タグ

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

  • ソビエトロシアの3進コンピュータ|Rui Ueyama

    ロシア人の同僚に、ロシアには3進コンピュータがあったらしいよね、という話をしたら、僕の大学の教授がそのコンピュータの発明者と一緒に仕事してたよ、と言われたことがあった。ソビエト連邦には3進数のコンピュータが実際にあったのだ。その奇妙な機械についてちょっと書いてみよう。 普通の2進コンピュータでは、数の1桁を1ビットといって、1ビットで2つのパターンを表すことができる。同じように、3進コンピュータでは、数の1桁をトリット(trit)といって、1トリットで3つのパターンを表すことができる。 3進コンピュータで最も興味深いのは、負の数を表すための特別な符号ビットがいらないことだ。2進コンピュータでは最上位ビットが1なら数全体が負を表している、みたいな特別なルールが必要なのだが、3進コンピュータでは、各桁が-1, 0, 1のどれかを表していることにすれば、自然と負の数が表現できてしまう。 説明をコ

    ソビエトロシアの3進コンピュータ|Rui Ueyama
    tsekine
    tsekine 2017/12/12
    桁上がりの発生が抑えられる分、巨大な数同士の足し算が少し速そう ※1999頃から知識が更新されてません
  • システム障害なしにうるう秒を乗り切る技術の発達について|Rui Ueyama

    数年に一度、1日が1秒だけ長くなることがある。そのたびにどこかでシステム障害が起こるのだが、何回もうるう秒を経験するごとに次第にベストプラクティスも確立されつつある。ここではうるう秒問題と人々がそれにどう対応してきたかについて説明しよう。 うるう秒というのは地球の自転速度のわずかな揺らぎに対して時計を調整するために数年に一回調整される1秒のことだ。うるう秒で1秒短くなる日は23:59:59からの1秒がスキップされる。うるう秒で1秒長くなる日は、23:59:59の次が23:59:60になり、その1秒後に次の日の00:00:00になる。 というわけで公式には秒というのは数年に一度60秒目というのがありえるのだが、ほとんどのOSはうるう秒にきちんと対応していない。Linuxなどでは通常「時計を1秒戻す」という驚くほど単純な方法でうるう秒を扱っている。つまりうるう秒がある日には23:59:59.9

    システム障害なしにうるう秒を乗り切る技術の発達について|Rui Ueyama
    tsekine
    tsekine 2017/11/30
    何度でもしつこく書くけど、人類にうるう秒はまだ早すぎたと思う。UTCやめてTAIにしよう #TAI原理主義
  • 十分大きな乱数をユニークな識別子として使うのがなぜ安全なのか|Rui Ueyama

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

    十分大きな乱数をユニークな識別子として使うのがなぜ安全なのか|Rui Ueyama
    tsekine
    tsekine 2017/11/30
    "825兆個の128ビット乱数というのはそれを保存するだけでディスクが1.3エクサバイト必要になるという、とても大きな数だ" uniquenessという観点と、今後のストレージの増加を考えると 1.3 EB ってそこまで大きくないでしょ
  • 絵文字がある種のUnicodeバグを世界から一掃しつつある件について|Rui Ueyama

    UnicodeのUTF-16エンコーディングではほとんどの文字(コードポイント)は2バイトで表現されるが、Unicodeに後から追加収録された文字の多くは4バイトで表現される。4バイト文字がうまく扱えないプログラムというのはわりとよくある。しかし世界中で広く使われるようになった絵文字がよりによって4バイト文字であるせいで、そのような文字が扱えない問題がよいペースで解決に向かいつつある。それについて少し説明してみようと思う。 Unicodeが80年代から90年代初頭にかけてデザインされたときの目標の一つは、Unicodeに含まれる文字数を65536個以内に収めることだった。現代の文章を実用的なレベルで表すためには、漢字などを含めてもそれだけの種類の文字があれば十分だと考えられたのだ。当然これは1文字を2バイトで表すことを念頭に置いていた。つまりコンピュータの揺籃期から当時に至るまで単純に英語

    絵文字がある種のUnicodeバグを世界から一掃しつつある件について|Rui Ueyama
  • 1