タグ

ブックマーク / note.com/ruiu (7)

  • オープンソース活動がフルタイムの仕事になる仕組みの話|Rui Ueyama|note

    僕の仕事をひとに説明するときに、「Google仕事をしているけどオープンソースなのでGoogleのプロダクトを作っているわけではないし、むしろアップルとかソニーの人と一緒に仕事している」と言うと、「???」という反応になることが多いので、僕はこういう仕事をしているんだよということをここでちょっと説明してみようと思います。 (2016年の僕のFacebookの投稿の転載です。) 僕のいるチームはLanguage Platform Teamというところで、プログラミング言語や開発ツールの開発をしています。LPTの中にもいろいろ細かいチームが分かれているのですが、僕がいるのはC++チームで、Googleで主要開発言語になっているC++言語の開発環境を担当しています。 C++で開発をするときには、C++ツールチェインと呼ばれる一連のツールを使います。ツールチェインの一番大きなコンポーネントは、人

    オープンソース活動がフルタイムの仕事になる仕組みの話|Rui Ueyama|note
  • 十分大きな乱数をユニークな識別子として使うのがなぜ安全なのか|Rui Ueyama

    いろいろなソフトウェアで、大きいランダムな値をユニークな値とみなすということが行われている。例えばユニークな識別子としてよく使われるUUIDはただの122ビットの乱数だ。gitもSHA-1ハッシュ値が160ビットの乱数のように扱えることを期待して、それをユニークな識別子として使っていた。実際にはランダムな2つの値が同じになる確率はゼロではないのに、なぜこれが安全なやり方だと言えるのだろうか? それについてちょっと説明してみよう。 あるシステムが、乱数で生成された識別子の衝突のなさに依存しているとして、仮に衝突が発生した場合、相当悪い結果、例えば復旧不可能な形でデータベースが壊れてしまうとしよう。これはどれくらい危険なのだろうか? 数学の問題で、学校のクラスの中で同じ誕生日の人が1組以上いる可能性は思ったより高いという話を聞いたことがあると思う。あるランダムに生成された値が衝突する確率という

    十分大きな乱数をユニークな識別子として使うのがなぜ安全なのか|Rui Ueyama
  • 意図的にプログラムの動きをランダムにしてバグを早期発見するテクニックについて|Rui Ueyama

    プログラムを書いていると、素直に実装した結果として毎回特定の条件が満たされているけど、来それは誰も保証してないという場面に出くわすことがよくある。保証されていない偶然の動作に依存することで生じるバグというのはかなり多い。 例えば最近では、ドラゴンボールZ ドッカンバトルというゲームで、2回SQL文を実行した結果が同じ順序で並んでいるという誤った期待をしているコードがあったせいで、ガチャの確率表示がめちゃくちゃになってしまって、運営が確率操作しているのではないかという騒動が発生したことがあった [1]。データベースでは空のテーブルにデータを追加してその直後に読み返すと、データを追加した順番に結果が返ってきたりしがちなので、問題のコードはきれいなテスト環境では偶然うまく動いてしまったのだろうと思う。 上のようなバグを防ぐために最近よく使われているのは、来保証しないところをわざと壊すという方

    意図的にプログラムの動きをランダムにしてバグを早期発見するテクニックについて|Rui Ueyama
  • 「プログラミングの常識」を時々見直す必要性について|Rui Ueyama

    自分の中のプログラミングの常識というものは、ときどき現実のハードウェアに合わせて調節しないといけない。ハードウェアが進歩し続けているので、コンピュータで簡単にできることと相対的に難しいことのバランスが変化し続けているからだ。ここでは特にストレージにフォーカスして書こうと思う。 昔はメモリが相対的にとても貴重な資源だったので多くのプログラマがメモリを節約することに血道を上げていた。例えばWindowsの初期の頃に設計されたデータ構造には、メモリをバイト単位ででもいいから節約したいという意図の痕跡がいまでも多く見受けられる。DRAMの次に速い記憶装置はHDDだったので、メモリが足りなくなればHDDにデータを保存せざるを得ないのだが、DRAMとHDDのランダムアクセスの速度差は、机の上のの開いているページを見るのと、そのAmazonで注文して到着するのを待つのと同じくらいのスケールで違うの

    「プログラミングの常識」を時々見直す必要性について|Rui Ueyama
  • ソフトウェアエンジニアならもっと気軽にアメリカ移住を考えたほうがいいよ|Rui Ueyama|note

    なんか数年に一回くらいシリコンバレー移住は割りに合うのかという話が上がってくる気がする。前の地獄のシリコンバレーはトンチンカンで噴飯ものだったけど、今回の海外移住アメリカは止めた方がいいよはまあまあまともな意見な気がする。でも、なんか違うよなーと思った。 まず第一にやっぱりアメリカの方が待遇がずっとよくて、物価差を考慮に入れてもやっぱり全然違うと思う。やや大げさかもしれないけど、日のプロ野球と大リーグみたいな違いがあるように思うんだけど。 第二に、お金だけではないよね、ということ。現実としてソフトウェアの世界はアメリカを中心に動いていて、他の国はアメリカで開発されたものを使っている。シリコンバレーなら伝説的なプログラマがわりとそこらへんにいて、普通に話をしたり一緒に仕事をしたりすることができる。カンファレンスであまりにも有名人過ぎて話しかけるのに躊躇するようなレベルの人が職場のすぐそこ

    ソフトウェアエンジニアならもっと気軽にアメリカ移住を考えたほうがいいよ|Rui Ueyama|note
  • オープンソースプロジェクトを最初から英語で運営してみてわかったメリットについて|Rui Ueyama

    僕は最近とあるオープンソースプロジェクトをオーナーとしていわば運営しているのですが、英語プロジェクトをまわすというのは良いなと思うようになりました。他の言語を使うのに何も悪いことはないのですが、英語のほうがコミュニティがずっと大きいので想定外の幸運なことが起こる可能性が高くなるというのが理由です。 僕がやっているプロジェクトは開発ツールを作るというもので、それなりに専門的な知識が必要になるプロジェクトです。人間が書いたプログラムのコードは最終的に何らかの形でコンピュータが直接実行可能な形に変換されて実行されるわけですが、僕が作っているリンカというのは最後の実行ファイルを作成する部分を担当するプログラムです。つまり僕はプログラムを出力するプログラムを書いているわけで、そのためにはOSやCPU、入力や出力のファイルの形式などについてよく知っている必要があります。 また僕らの目標は既存のものよ

    オープンソースプロジェクトを最初から英語で運営してみてわかったメリットについて|Rui Ueyama
  • ソースコードって実際のところどういうふうに書いていますか?|Rui Ueyama

    私はプログラミングは結構自信があるんですが、他の人の作業をつぶさに観察したことがあるわけでもないので、自分で当たり前だと思っているコーディングの方法が他の人にとってはそうではないこともあると思ってます。上手い人がどういうふうにしてプログラムを書いているのか知りたいんですよね。 逆に私はどういうふうに書いているかちょっとまとめてみました。自分はこうしている、というのがあったらぜひ教えてください。 まず私の場合、ゼロからコードを書くよりも現在のプロジェクトのためのコードを書くことのほうが多いので、コードを書くというのは既存のコードに変更を加えることがほとんどです。既存のコードに手を加えるときは、新機能追加か、リファクタリング(動作は変えずにコードをきれいにすること)のどちらかになるわけですが、まず前者をどうしているかどうかをできるだけ説明してみます。 まず必要なのは考えることです。よく知ってい

    ソースコードって実際のところどういうふうに書いていますか?|Rui Ueyama
  • 1