マガジン

  • #エンジニア 系記事まとめ

    • 954本

    noteに投稿されたエンジニア系の記事のまとめ。コーディングTIPSよりは、考察や意見などを中心に。

    • #エンジニア 系記事まとめ

      • 954本

最近の記事

スタンフォードのコンピュータサイエンスの授業の感想(後編)

2017年にも同じタイトルの記事を書いたのだけど、その後無事にスタンフォード大学院のコンピュータサイエンス学部を卒業することができたので、前回の記事以降に取った授業について、僕なりの感想をちょっとまとめたい。 CS255 暗号入門 (2018Q1)文字通り暗号についての授業。対称鍵暗号、公開鍵暗号、メッセージ認証、一方向ハッシュ関数などのトピックについて学ぶ。プログラミングではなく理論中心の授業。 宿題では、例えばこういう手順で暗号化される通信が安全であることを証明せよ、

スキ
330
    • ビットコインは世界中でどれだけの電力を使っているのか?

      ビットコインのような暗号通貨は、取引所で購入するだけではなく、PCやマイニング機器を使って「掘り出す」こともできる。しかし、ビットコインをマイニング(採掘)するとは、そもそもどういうことなんだろうか? また、ビットコインのマイニングのために世界中でどれくらいのエネルギーが使われているのだろうか? このエッセイではそれについて解説してみようと思う。 ビットコインの仕組みまずは簡単にビットコインの仕組みについて説明しておこう。 ビットコインの実体のデータベースは「ブロックチェ

      スキ
      191
      • IPv4と互換性のあるアドレス拡張プロトコルを考えてみたら、どういう感じになるんだろうか?

        前回の記事ではIPv6の普及がなぜなかなか進まないのかを説明した。一つの根本的な問題は、IPv6がIPv4と互換性がないことだった。では、IPv4と互換性のあるプロトコルは、一体どういうものがありえたのだろうか? この記事では、ASCIIをUTF-8に拡張したみたいに、IPv4と互換性を維持したままアドレスを64ビットに拡張したプロトコル(ここではIPv4+と呼ぶ)について考えてみたいと思う。そして、IPv4+ならば、IPv6のような長い移行期間を経ることなく、段階的にネッ

        スキ
        57
        • IPv6がなぜいまだに普及していないのか

          現在のインターネットの基本をなしているIPv4というプロトコルには、広く知られた大きな欠点がある。パケットのアドレスフィールドの幅が32ビットなので、ネットワークに接続可能なホスト数の上限が2³²(約43億)になってしまっているのだ。その欠点を修正するために、1990年代後半にIPv6という新たなプロトコルが設計されたのだけど、いまだにインターネットではIPv6は少数派で、主流ではいまだにIPv4が使われている。 1990年代当時は、IPv6は規格を策定すれば比較的すぐに普

          スキ
          502

        マガジン

        マガジンをすべて見る すべて見る
        • #エンジニア 系記事まとめ

          • 954本

          noteに投稿されたエンジニア系の記事のまとめ。コーディングTIPSよりは、考察や意見などを中心に。

        • #エンジニア 系記事まとめ

          • 954本

          noteに投稿されたエンジニア系の記事のまとめ。コーディングTIPSよりは、考察や意見などを中心に。

        記事

        記事をすべて見る すべて見る
          • オープンソース活動がフルタイムの仕事になる仕組みの話

            僕の仕事をひとに説明するときに、「Googleで仕事をしているけどオープンソースなのでGoogleのプロダクトを作っているわけではないし、むしろアップルとかソニーの人と一緒に仕事している」と言うと、「???」という反応になることが多いので、僕はこういう仕事をしているんだよということをここでちょっと説明してみようと思います。 (2016年の僕のFacebookの投稿の転載です。) 僕のいるチームはLanguage Platform Teamというところで、プログラミング言語

            スキ
            486
            • Cコンパイラ制作の夏期集中コースが思っていた以上にうまくいった話

              2018年の夏に僕はセキュリティキャンプ(以下「セキュキャン」)というイベントでCコンパイラ作成コースの授業を行いました。授業はとてもうまくいったといってよいと思います。参加者は6人だったのですが、6人全員プログラミング技術がかなり飛躍的に向上したようですし、そのうち3人は期間中にセルフホスト(自分の書いているコンパイラで自分のコンパイラ自身をコンパイルできること)まで漕ぎ着けることができました。 この文章では、その授業をどのように僕が教えたのかということと、生徒にできるだ

              スキ
              236
              • Turing Complete FMの裏側 ― Webサイト構築編

                前回の記事ではTuring Complete FM(TCFM)ポッドキャストの録音テクニックを紹介しました。TCFMウェブサイトにはポッドキャストのリスナーのユーザ体験を向上させる工夫がいくつか存在しています。今回はTCFMのウェブサイトの技術面を紹介します。 はじめにTCFMはスタティックHTMLで構成されたサイトです。 ポッドキャストのテキスト情報が入っているYAMLファイルがあって、そこから僕が書いたPythonスクリプトでHTMLやRSSをあるディレクトリ以下に生成

                スキ
                48
                • 音の良いポッドキャストを録音するために ― Turing Complete FMの収録テクニック

                  僕は最近Turing Complete FMというポッドキャストを運営しているのですが、その収録のためにポッドキャスト録音テクニックを結構研究しました。ここではそのノウハウをシェアしようと思います。音がよくて聞きやすいポッドキャストの収録に役立ててもらえると幸いです。 はじめにポッドキャストでは音質は死活的に重要です。音質の大切さは強調してしすぎることはないと思うのですが、この点は甘く見られがちなようです。音の悪い録音を何十分も聞くのは耳が辛くて不必要にストレスがかかります

                  スキ
                  284
                  • 「悪い方が良い」原則と僕の体験談

                    ソフトウェアの世界には「悪い方が良い」原則という有名なエッセイがある。キレイにレイヤ分けされた一貫性のある良いデザインよりも、一見手抜きの悪いデザインのほうが実は良いときもあるという話だ。この逆説的なデザイン原則を僕は身をもって体験したことがある。それについてちょっと書いてみようと思う。 僕はlldというリンカの現行バージョンのオリジナル作者だ。リンカというのはコンパイラと組み合わせて使うもので、実行ファイルやDLLを作るのに使用される。lldはプロダクトとしてはかなり成功

                    スキ
                    595
                    • コンピュータセキュリティと様々なサイドチャネル攻撃

                      コンピュータセキュリティというのは微妙なもので、正面からの攻撃には安全でも、攻撃対象とは思われていなかった部分を突くとあっさり情報が盗めるパターンがある。そういう攻撃手法をサイドチャネル攻撃という。ここではサイドチャネル攻撃についていくつか見てみよう。 たとえば社外秘の文書をセキュアにブラウズしたいとしよう。VMwareなどを使って仮想マシンにOSを2つインストールして、通常利用環境とセキュア環境を完全に分離して、セキュア環境からしか社内ネットワークにアクセスできないように

                      スキ
                      75
                      • 意図的にプログラムの動きをランダムにしてバグを早期発見するテクニックについて

                        プログラムを書いていると、素直に実装した結果として毎回特定の条件が満たされているけど、本来それは誰も保証してないという場面に出くわすことがよくある。保証されていない偶然の動作に依存することで生じるバグというのはかなり多い。 例えば最近では、ドラゴンボールZ ドッカンバトルというゲームで、2回SQL文を実行した結果が同じ順序で並んでいるという誤った期待をしているコードがあったせいで、ガチャの確率表示がめちゃくちゃになってしまって、運営が確率操作しているのではないかという騒動が

                        スキ
                        73
                        • ソビエトロシアの3進コンピュータ

                          ロシア人の同僚に、ロシアには3進コンピュータがあったらしいよね、という話をしたら、僕の大学の教授がそのコンピュータの発明者と一緒に仕事してたよ、と言われたことがあった。ソビエト連邦には3進数のコンピュータが実際にあったのだ。その奇妙な機械についてちょっと書いてみよう。 普通の2進コンピュータでは、数の1桁を1ビットといって、1ビットで2つのパターンを表すことができる。同じように、3進コンピュータでは、数の1桁をトリット(trit)といって、1トリットで3つのパターンを表すこ

                          スキ
                          60
                          • コンパイラに仕込まれた細工とシステムのセキュリティの話

                            コンパイラのソースには書いていないのにバイナリだけで代々伝わっていく情報というのがあって、それはコンピュータのセキュリティに大きく関わっている。ここではそれについて書いてみよう。 僕は8ccというCコンパイラをスクラッチから書いたことがあるのだけど、8ccには文字列を読む部分で、"\"の後に"n"がきたら"\n"という文字(改行文字)を読んだことにするという箇所がある。これはよく考えてみれば自己言及的になっていて、ソースコードの中に、コンパイラが実際に必要とする改行文字のA

                            スキ
                            44
                            • 高頻度アルゴリズム取引業者の終わりなきスピード競争

                              誰にとっても通信速度は遅いより速い方がいいけど、情報の速さで利益を出している高頻度アルゴリズム取引業者にとっては、通信速度は死活問題だ。そういった業者のために、証券取引所間のレイテンシをマイクロ秒単位で減らすネットワークが、数百億~数千億円というお金を使って構築されている。ここではそういうネットワークについて書いてみよう。 いつの時代でも、証券取引の参加者にとって、他の証券取引所の状況をいち早く知ることは重要だった。他の人が知らない取引状況を知っていれば、それはある意味ちょ

                              スキ
                              50
                              • もしコンパイラを全世界で同時にうっかり削除してしまったら、元の状態に復旧できるのだろうか?

                                思考実験として、全世界の人が同時に、自分の持っているコンパイラやインタープリタなどの実行ファイルをうっかり全部消してしまったとしよう。そうするとそれ以降、ソースコードが残っていても、コンパイラ自身も含めてどのようなプログラムもコンパイルできなくなってしまう。この状況から人類は元のコンピュータ文明を復旧することができるのだろうか? 僕は結論としては、かなり簡単に復旧できると思う。ここではその手順についてちょっと考えてみよう。 コンパイラのバイナリファイルが全部消えてしまった

                                スキ
                                161
                                • システム障害なしにうるう秒を乗り切る技術の発達について

                                  数年に一度、1日が1秒だけ長くなることがある。そのたびにどこかでシステム障害が起こるのだが、何回もうるう秒を経験するごとに次第にベストプラクティスも確立されつつある。ここではうるう秒問題と人々がそれにどう対応してきたかについて説明しよう。 うるう秒というのは地球の自転速度のわずかな揺らぎに対して時計を調整するために数年に一回調整される1秒のことだ。うるう秒で1秒短くなる日は23:59:59からの1秒がスキップされる。うるう秒で1秒長くなる日は、23:59:59の次が23:5

                                  スキ
                                  42