2017年12月14日のブックマーク (8件)

  • x + 0.25 - 0.25 = xが成り立たないxとは何か|Rui Ueyama

    スタンフォードのコンピュータサイエンスの授業で、ときどきこれは良問と思う問題がテストで出ることがある。僕の印象に残っているのは「xをfloatとするとき、x + 0.25 - 0.25 = xが成り立たないxを求めよ」というものだ。浮動小数点数を理解していないと、両辺が同じにならないケースがあるほうが不自然に思えるだろうから、この問題は浮動小数点数の奇妙さを結構うまく突いていると思う。この問題を元に浮動小数点数についてちょっと説明してみよう。 まずコンピュータ上での数について少し考えてみよう。コンピュータにおける数と、数学の整数や実数は、よく考えてみると全然違う。コンピュータは有限の記憶領域しか持っていないので、無数にある数を表すことが根的にできない。つまりコンピュータ上の数は「物の数になるべく似せた別の何か」だ。現実的には、例えば32ビットの数なら2^32パターンしか表せないので、そ

    x + 0.25 - 0.25 = xが成り立たないxとは何か|Rui Ueyama
    massa142
    massa142 2017/12/14
    “現実世界の計測値などを考えると、大きな値には大きな誤差が、小さな値には小さな誤差があるのが普通だから、大きな数をそこまで精密に表せなくても実用上困らない、と考えることができる”
  • 「プログラミングの常識」を時々見直す必要性について|Rui Ueyama

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

    「プログラミングの常識」を時々見直す必要性について|Rui Ueyama
    massa142
    massa142 2017/12/14
    “多くの場合、凝ったアルゴリズムは局所性が悪いので、理論的には速い凝ったアルゴリズムを考案してみても、配列などを使った単純だが効率の悪そうなアルゴリズムに勝つことは結構難しい”
  • エレベータに見るアルゴリズムの性能と公平性のバランス|Rui Ueyama

    現実世界でもコンピュータの中でも、何らかの性能指標だけを追求すると参加者にとって極端に不公平になってしまうことがある。例えばエレベータとHDDは共通点がありそうに思えないが、この2つは性能特性的にとてもよく似ていて、リーズナブルな性能と公平性を両立させるために同じ制御方法が使われている。これについてちょっと説明してみよう。 1基しかない場合のエレベータの動き方は単純だ。一度上に動き出すと、上で待ってる人や降りる人がいる限り上昇し続ける。同じように、一度下に動き出すと、下で待っている人や降りる人がいる限り下降し続ける。これ以外の動き方をするエレベータはまず存在しないので、これが唯一の制御方法のように思えるけど、別にこうしなければいけないというルールはない。 エレベータの平均待ち時間を最適化することを考えてみよう。そうすると、一方向に動き続ける代わりに、エレベータが現在存在する階に一番近い人の

    エレベータに見るアルゴリズムの性能と公平性のバランス|Rui Ueyama
    massa142
    massa142 2017/12/14
    “エレベータアルゴリズムでは、一方向にアームを動かし始めるとそちら方向の読み書きリクエストがすべて満たされるまでは移動方向を変えたりしない。これにより若干平均待ち時間は伸びるものの公平性は飛躍的に改善
  • 十分大きな乱数をユニークな識別子として使うのがなぜ安全なのか|Rui Ueyama

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

    十分大きな乱数をユニークな識別子として使うのがなぜ安全なのか|Rui Ueyama
    massa142
    massa142 2017/12/14
    それが本当にランダムなら / “乱数のビット数が十分に大きくて、それが本当にランダムなら、衝突の可能性を心配するのは天が落ちてくるのを替わりに心配したほうがマシなくらい杞憂なのだ”
  • 私とお金の話

    はじめに私のお金の使い方は無茶苦茶です。 というか、今までまともにお金を管理したことはなかったという方が正しいですね。 贅沢三昧してきた、というのではなくて、お金についてきちんと考える機会がなかったのです。 そんな自分がお金の使い方を見直してみました、という話です。 そして、給与が年収162万から年収1,000万を超えるまでの簡単な軌跡でもあります。 (しかし、残念ながらこの方法は再現性がないので他の人には何の役にもたたないのです) 給与をあげる話とか、自慢したいという話ではないので落ち着いて聞いてほしいです。 色々な人の経験を聞く限り、給与というのはほぼほぼ選択と運とタイミングですので、給与が上がらない、正しく評価されてない、という人はまず転職(社内の異動でも可)を考えましょう。 他で通用するスキルが身についているかどうかは不断の努力次第ですので、それでもダメならあとは方法を変えるしかあ

    massa142
    massa142 2017/12/14
    “すべてのお金の流れが可視化されたことで自分ではなんとかなっているだろうと楽観的に考えていたことが明らかに破綻していることが認識できる”
  • 【速報】AWS向けの新ディストリビューション Amazon Linux 2 を発表! | DevelopersIO

    ウィスキー、シガー、パイプをこよなく愛する大栗です。 先程Amazon Web Services向けに最適化されたLinuxディストリビューションであるAmazon Linuxの次世代版であるAmazon Linux 2が発表されましたのでご紹介します。 Amazon Linux 2 Announcement: Amazon Linux 2 LTS Release Candidate Available Introducing Amazon Linux 2 Amazon Linux 2は一般公開になり正式な5年サポートのLTS版が公開されています [速報]5年長期サポートのAmazon Linux 2が一般公開されました Amazon Linux 2 Amazon Linux 2の特徴をまとめてみます。 AWSとのインテグレーション:AWS CLIなどの多数のツールやcloud-init

    【速報】AWS向けの新ディストリビューション Amazon Linux 2 を発表! | DevelopersIO
    massa142
    massa142 2017/12/14
    “Amazon Linux 2ではsystemdを使用してプロセスのブートストラップを行う”
  • 意図的にプログラムの動きをランダムにしてバグを早期発見するテクニックについて|Rui Ueyama

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

    意図的にプログラムの動きをランダムにしてバグを早期発見するテクニックについて|Rui Ueyama
    massa142
    massa142 2017/12/14
    "ハッシュテーブルの内部の順番というのは実装依存で、Goのバージョンによって異なるかもしれないので、Goではあえて毎回暗黙の前提を壊す"
  • AngularにWebComponentsがやって来るヤァ!ヤァ!ヤァ!〜@angular/elementsのファーストインプレッション〜 - Qiita

    AngularにWebComponentsがやって来るヤァ!ヤァ!ヤァ!〜@angular/elementsのファーストインプレッション〜JavaScriptAngularWebComponents タイトルは「ビートルズがやって来るヤァ!ヤァ!ヤァ!」のパロディです。 @angular/elementsとは何か? @angular/elementsは、AngularコンポーネントをWeb Componentsにするためのパッケージです。9/29にPullRequestが起こされ10/28にLGTMが出てlabsブランチに移されました。まだexperimental=実験ステータスのできたてほやほや新機能です。 これは言い訳なんですが、@angular/elementsの方向性もまだ流動的ですし、筆者もまだ全然知識が追いついてません。現状わかる範囲でまとめましたが、ツッコミや訂正ありましたら

    AngularにWebComponentsがやって来るヤァ!ヤァ!ヤァ!〜@angular/elementsのファーストインプレッション〜 - Qiita
    massa142
    massa142 2017/12/14
    “コンポーネント指向のjsフレームワークは、ブラウザがWeb Componentsを搭載するまでのpolyfillだという見方がありました”