Sabitlenmiş Tweet𡈽方 雅之@プロセス思考@hijk0909·12 Şub【プロセス思考】を身に着ければ、仕事でも生活でも、ミスが減り、スピードが上がり、無駄がなくなり、目的に向かって着実に前進できるようになります。一億総プロセス思考で、ニッポンを元気にしよう! ●拙書→ amazon.co.jp/dp/4344926129/ ●YouTubeチャンネル→ youtube.com/channel/UCY46M…Çevir 日本語221181.4K057
𡈽方 雅之@プロセス思考@hijk0909·1hWinDirStat で 1TBのハードディスクの中身を可視化。やっぱ動画ファイルを繰り返しバックアップしているのが地味に無駄。Çevir 日本語00031
𡈽方 雅之@プロセス思考@hijk0909·1hバックアップ、後回しになりがち ちょっと時間が空いたので、OneDrive上の業務情報を手元の大容量HDDにバックアップなう。この作業、起業以来続けているが、必要かなぁ。過去のアーカイブを圧縮したり、圧縮前情報を削除したりを、自動化していないので、まぁまぁ手間暇かかる。とはいえ、自動化するほど頻繁にも行わない。 実のところ OneDriveが壊れたとして、前月のバックアップなんて役に立たない。それに、OneDrive の信頼性に比べたら、手元の古いHDDが壊れる可能性のほうが高い。最も古いアーカイブは、法律上の保管義務期限の7年前に達している。 バックアップの頻度や保管について、運用を見直す時期かも知れない。Çevir 日本語10589
𡈽方 雅之@プロセス思考@hijk0909·2hゲーム開発では、「この基本設計に乗せられる限界まで、様々な発想を実装しきった」と納得できたら、仕様を凍結して仕上げてリリースしている。……私自身の人生も、最期は、こんな感じでリリースしたい。Çevir 日本語0051401
𡈽方 雅之@プロセス思考@hijk0909·3h@kobefs 「0→1は大きい」……これは本当にそう思います。素晴らしいです。金額の多寡なんて関係ない。実際に自分のフトコロにお金が入ってくる経路を自力で開拓できる人だけが、生き残れる時代だと思います。Çevir 日本語00110
𡈽方 雅之@プロセス思考@hijk0909·3h「DXとは?」 ・Digitization(デジタイゼーション) アナログ情報を デジタル情報にすること ・Digitalization(デジタライゼーション) デジタル技術を用いて、手作業を減らし プロセスの効率性を向上させること ・DX(デジタルトランスフォーメーション) デジタル技術を用いて、企業の風土や ビジネス、サービス、プロセスを変革すること 単なるITツールの活用を、DX とは呼ばない むしろ 無秩序に ITツールを導入していくと 部分最適や属人性が進んでしまう DX を推進するには、組織全体で 業務プロセスを標準化する 「プロセス思考」が不可欠です! 【プロセス思考の道具箱】 関連資料:「DX概論」(pdf) current-color.co.jp/lib/CC_%E6%95%…Çevir 日本語00288
𡈽方 雅之@プロセス思考@hijk0909·3h迷ったら、立ち止まる なぜ迷っているのかを、考える 何がしたかったのかを、思い出す いつまでに、何を達成したいのかを 思い描く 目標=達成基準+期限 を 言葉にする すると、迷いは消えるÇevir 日本語00280
𡈽方 雅之@プロセス思考@hijk0909·1dゲームプログラマーだけかも。「GC機能を持つ高級言語で、厳密にメモリ管理」という苦労話に共感して頂けるのは。Çevir𡈽方 雅之@プロセス思考@hijk0909JavaScript も 結局 C言語 いまBABYLON.jsで開発中のゲームは、100体以上のキャラクターを60fpsで長時間動かすので、GC を極限まで減らさねばならない。毎フレーム動かす処理では、暗黙的なオブジェクト生成も見つけて潰す必要がある。 また、グローバル定数を壊して、影響が出るはずの無い他のキャラクターの速度や色が変わるというバグを、何度か起こしてしまった。これも防がねばならない。 いろいろ考えて導き出した答えが、コレ: 「プリミティブ以外、イコールは使用禁止」 もう、これで行こう。例外は「明示的に対象オブジェクトへの参照を保持したいケース」「関数の引数として構造体を渡すケース」。これ以外は「イコールを見つけたら、あやしい」と思うことにする。 クラスの construct時に、プロパティであれテンポラリ変数であれ、メモリを使うものは全てプリアロケーションし、毎フレームの処理では一切、動的なメモリ確保は行わない。 ……あぁ、これは、マシン語やC言語でゲームを作る時には当然だった感覚だったな。思い出した。 「プリミティブ以外、イコールは使用禁止」 (効果1)参照共有の事故を完全に防ぐ Vector3 / Color3 / Quaternion / Matrix / Array など、JavaScript の参照型は、「イコールで渡した瞬間に共有」になり、定数破壊事故の根源となる。規約で禁止すれば、事故はゼロ。 (効果2)暗黙的な new を完全に排除 ベクトルの add(), subtract(), scale() など多くのメソッドはイコールでの代入時に内部で new を行う。これを ~InPlace()系関数、~ToRef()系関数、.set()関数、.copyFrom()関数 など「既にメモリ確保されているものを更新する関数」に置き換える。結果、見た目からもイコールが消える。これで GC を完全に抑制できる。 (効果3)プリアロケーションが徹底される 「イコール禁止」を実現するには、その前提として「constructorで全ワーク変数を確保」「update()内で一切newしない」が徹底されることになる。見た目で判断できるので、コードレビューが圧倒的に楽になる。 それでも残るイコールは、プリミティブか、ライフサイクルが厳密に管理されている他キャラクターのインスタンスへの参照を保持する場合だけになるはず。実際、この方針でプログラムを書き換えて、100体以上のキャラクターで20万程度のArrayが発生した状態で2時間以上回したがHeapは全く増えずフルGCも一度も掛からなかった。よしよし。 日本語106235759.1K93
𡈽方 雅之@プロセス思考@hijk0909·15h@kero1209 「リアルタイムの描画」と「ガベージコレクション」は、やっぱり本質的に相性が悪いのだなぁと感じられる歴史の証人コメントだと思いました!Çevir 日本語000219
kero@kero1209·1d@hijk0909 リアルタイムのシミュレータの描画部分をJavaで作っててメモリ管理をgcに極力させない様な事してました。まだjava 1.0βから1.0ぐらいでGCも洗練されてなかった。Çevir 日本語101986
knowri@jack_frost_will·21h@hijk0909 web寄りの仕事で使ってたElasticsearch(Java製自前で運用)も昔はヒープを掃除してあげないとパンクしてたのでわかりみÇevir 日本語101448
𡈽方 雅之@プロセス思考@hijk0909·15h検索エンジンと人工知能のせいで、仮説を持たずに正解を得たがる人が急増した。検証しないので、目の前で急激にバカになっていく。……アナタは大丈夫?Çevir 日本語10122311
𡈽方 雅之@プロセス思考@hijk0909·16h@bugfire01 ご返信ありがとうございます!とても難しい問題です。「あぐらをかけるなら、あぐらをかくべきである」(GCの恩恵に預かるべきである)と改めて感じました。運用条件によって、ここまでコーディングスタイルが変わるのだと、私も、とっても勉強になりました!Çevir 日本語002351
bugfire2009@bugfire01·16h@hijk0909 GC自動の言語でも、GCさせたらあかん! C#でメモリ管理あぐらかいてたので、 とても、勉強になりました。Çevir 日本語104454
𡈽方 雅之@プロセス思考@hijk0909·16h私はレースゲームとしての『グランツーリスモ』の哲学が好き。リアルレースシミュレータとの副題はあったが、後発の「より物理的にリアルな」競合のレースゲームに対して、「私はリアルさよりも極上のレース体験を優先している」と言い切った哲学が好き。Çevir 日本語018208
𡈽方 雅之@プロセス思考@hijk0909·17h私が40年の仕事人生で得た、最も役立つ経験とは、「コレくらい苦労しないと、成功しない」という感覚。……その基準に達していないのに成功してしまったら、「何か漏れているかも知れない」「偶然かも知れない」と、自動的に反省モードに入る。Çevir 日本語0012164
𡈽方 雅之@プロセス思考@hijk0909·1dJavaScript も 結局 C言語 いまBABYLON.jsで開発中のゲームは、100体以上のキャラクターを60fpsで長時間動かすので、GC を極限まで減らさねばならない。毎フレーム動かす処理では、暗黙的なオブジェクト生成も見つけて潰す必要がある。 また、グローバル定数を壊して、影響が出るはずの無い他のキャラクターの速度や色が変わるというバグを、何度か起こしてしまった。これも防がねばならない。 いろいろ考えて導き出した答えが、コレ: 「プリミティブ以外、イコールは使用禁止」 もう、これで行こう。例外は「明示的に対象オブジェクトへの参照を保持したいケース」「関数の引数として構造体を渡すケース」。これ以外は「イコールを見つけたら、あやしい」と思うことにする。 クラスの construct時に、プロパティであれテンポラリ変数であれ、メモリを使うものは全てプリアロケーションし、毎フレームの処理では一切、動的なメモリ確保は行わない。 ……あぁ、これは、マシン語やC言語でゲームを作る時には当然だった感覚だったな。思い出した。 「プリミティブ以外、イコールは使用禁止」 (効果1)参照共有の事故を完全に防ぐ Vector3 / Color3 / Quaternion / Matrix / Array など、JavaScript の参照型は、「イコールで渡した瞬間に共有」になり、定数破壊事故の根源となる。規約で禁止すれば、事故はゼロ。 (効果2)暗黙的な new を完全に排除 ベクトルの add(), subtract(), scale() など多くのメソッドはイコールでの代入時に内部で new を行う。これを ~InPlace()系関数、~ToRef()系関数、.set()関数、.copyFrom()関数 など「既にメモリ確保されているものを更新する関数」に置き換える。結果、見た目からもイコールが消える。これで GC を完全に抑制できる。 (効果3)プリアロケーションが徹底される 「イコール禁止」を実現するには、その前提として「constructorで全ワーク変数を確保」「update()内で一切newしない」が徹底されることになる。見た目で判断できるので、コードレビューが圧倒的に楽になる。 それでも残るイコールは、プリミティブか、ライフサイクルが厳密に管理されている他キャラクターのインスタンスへの参照を保持する場合だけになるはず。実際、この方針でプログラムを書き換えて、100体以上のキャラクターで20万程度のArrayが発生した状態で2時間以上回したがHeapは全く増えずフルGCも一度も掛からなかった。よしよし。Çevir 日本語23617774.4K98
𡈽方 雅之@プロセス思考@hijk0909·17h@itchie_tatsumi 最近初めて3Dゲームを作ってみたのですが、仰る通り、「リアルに寄せること」と「ゲームとして成り立つこと」とは別なんだと思い知りました。妥協点を探す作業の連続でした。Çevir 日本語102223
いっちー|ゲームプログラマー・プロデューサー出身のSS事業責任者&EM @辰巳電子工業@itchie_tatsumi·18hゲームにおいて物理演算は現実を再現しているように見えますが、実際はかなり違います。やっているのは「現実の再現」ではなく「破綻しない近似」です。現実は連続ですが、ゲームはフレーム単位で処理されます。言い換えると「瞬間移動の連続」です。そのため高速に動く物体は、1フレームの間に壁をすり抜けることがあります(いわゆるトンネル現象)。 さらに計算は無制限にできるわけではありません。CPUリソースはグラフィックやAIとも共有されており、物理演算は限られたミリ秒の中でやりくりしています。この制約の中で、誤差を許容しながら安定させています。 また、現実通りに計算すると逆に不安定になります。無限に跳ね続けたり、振動して崩れたりするため、エネルギーを減衰させるなどの調整が入ります。 加えて重要なのは「体験」です。例えば当たり判定を少し広げるのは、空振りによる理不尽な結果を防ぎ、ストレスを取り除くためです。 つまり物理演算は、現実の再現ではなく「制約の中で破綻せず、自然に感じられる挙動を作る技術」と言えます。 #エンジニア #ゲームプログラマーÇevir 日本語522938.6K16
jima@jima0111·18h@hijk0909 javaで子プロセスの上げ下げ繰り返すと、メモリーリークして半年後くらいに落ちたりするんですが、対策してないの多いですね。 java使ってる初物はここから調べてダメ出ししてました。 一週間くらいいじめないと見つからない。 初めて見たのは2000年頃。Çevir 日本語101346