サクサク読めて、
アプリ限定の機能も多数!
アプリで開く
●はてなブックマークって?
●アプリ・拡張の紹介
●ユーザー登録
●ログイン
●ログアウト
トップへ戻る
総合
●人気
●新着
●
IT
●
最新ガジェット
●
自然科学
●
経済・金融
●
おもしろ
●
マンガ
●
ゲーム
●
はてなブログ︵総合︶
一般
●人気
●新着
●
社会ニュース
●
地域
●
国際
●
天気
●
グルメ
●
映画・音楽
●
スポーツ
●
はてな匿名ダイアリー
世の中
●人気
●新着
●
新型コロナウイルス
●
働き方
●
生き方
●
地域
●
医療・ヘルス
●
教育
●
はてな匿名ダイアリー
政治と経済
●人気
●新着
●
政治
●
経済・金融
●
企業
●
仕事・就職
●
マーケット
●
国際
●
はてなブログ︵政治と経済︶
暮らし
●人気
●新着
●
カルチャー・ライフスタイル
●
ファッション
●
運動・エクササイズ
●
結婚・子育て
●
住まい
●
グルメ
●
お金
●
はてなブログ︵暮らし︶
●
掃除・整理整頓
●
雑貨
●
買ってよかったもの
●
旅行
●
アウトドア
●
趣味
学び
●人気
●新着
●
人文科学
●
社会科学
●
自然科学
●
語学
●
ビジネス・経営学
●
デザイン
●
法律
●
本・書評
●
将棋・囲碁
●
はてなブログ︵学び︶
テクノロジー
●人気
●新着
●
IT
●
セキュリティ技術
●
はてなブログ︵テクノロジー︶
●
AI・機械学習
●
プログラミング
●
エンジニア
おもしろ
●人気
●新着
●
まとめ
●
ネタ
●
おもしろ
●
これはすごい
●
かわいい
●
雑学
●
癒やし
エンタメ
●人気
●新着
●
スポーツ
●
映画
●
音楽
●
アイドル
●
芸能
●
お笑い
●
サッカー
●
話題の動画
アニメとゲーム
●人気
●新着
●
マンガ
●
Webマンガ
●
ゲーム
●
任天堂
●
PlayStation
●
アニメ
●
バーチャルYouTuber
●
オタクカルチャー
●
おすすめ
やる気の出し方
﹃Rui Ueyama|note﹄
●
人気
●
新着
●
すべて
679 users
note.com/ruiu
いい感じのオープンソース・ソフトウェアを書いて、それを元に起業することを考えてみたことがある人は結構いるようだ。実際に僕はここ1年半ほど、自作のオープンソース・ソフトウェアを元にビジネスを立ち上げようと試行錯誤してきた。その経験についてここでシェアしてみようと思う。 あらすじ薄々予期していたことではあったけれど、結論から言うと、そんなにはうまくいかなかった話ということになる。要点をまとめると次の通りだ。 ﹁moldリンカ﹂というオープンソースのツールを開発して、それを元にビジネスを行おうとしていた そこそこ稼ぐことはできたものの、大きなリターンを得るのは難しかった ほとんどの企業はオープンソースを大々的に活用していても﹁無料のソフトウェア﹂にはお金を払うつもりはないし、払いたくても社内制度上できない 大きなリターンを得たいのならば、自作のオープンソース・ソフトウェアを元にサービスを立ち上げ
●
テクノロジー
●2023/06/07 11:02
●oss
●あとで読む
●ビジネス
●開発
●オープンソース
●ソフトウェア
●business
●お金
●programming
●license
98users
note.com/ruiu
2017年にも同じタイトルの記事を書いたのだけど、その後無事にスタンフォード大学院のコンピュータサイエンス学部を卒業することができたので、前回の記事以降に取った授業について、僕なりの感想をちょっとまとめたい。 CS255 暗号入門 (2018Q1)文字通り暗号についての授業。対称鍵暗号、公開鍵暗号、メッセージ認証、一方向ハッシュ関数などのトピックについて学ぶ。プログラミングではなく理論中心の授業。 宿題では、例えばこういう手順で暗号化される通信が安全であることを証明せよ、みたいな問題が出た。こういう問題は、もし安全ではないとしたらそれを利用して安全とされている暗号︵AESとか︶を破れてしまう、みたいな背理法で証明を行う。そういう巧妙な証明を考えるのは結構面白かった。あるいは逆に、このように暗号化された通信方式の穴を見つけよ、みたいな問題も出た。 AESやSHA256そのものがなぜ安全と思わ
●
学び
●2021/04/27 11:05
●Computer Science
●あとで読む
●コンピュータ
70users
note.com/ruiu
ビットコインのような暗号通貨は、取引所で購入するだけではなく、PCやマイニング機器を使って﹁掘り出す﹂こともできる。しかし、ビットコインをマイニング︵採掘︶するとは、そもそもどういうことなんだろうか? また、ビットコインのマイニングのために世界中でどれくらいのエネルギーが使われているのだろうか? このエッセイではそれについて解説してみようと思う。 ビットコインの仕組みまずは簡単にビットコインの仕組みについて説明しておこう。 ビットコインの実体のデータベースは﹁ブロックチェーン﹂と呼ばれていて、そこにビットコイン上で行われた今までのすべての送金記録が入っている。送金記録というのは、たとえばアドレスAが持っている3ビットコイン︵BTC︶のコインを使って、1 BTCのコインをアドレスBに、2 BTCのコインをアドレスCに送ったといった情報で、1件1件の送金記録はトランザクションと呼ばれる。ビット
●
政治と経済
●2019/12/11 19:12
●BitCoin
●ネットワーク
●society
●あとで読む
●note
●economy
●money
●article
●PC
45users
note.com/ruiu
前回の記事ではIPv6の普及がなぜなかなか進まないのかを説明した。一つの根本的な問題は、IPv6がIPv4と互換性がないことだった。では、IPv4と互換性のあるプロトコルは、一体どういうものがありえたのだろうか? この記事では、ASCIIをUTF-8に拡張したみたいに、IPv4と互換性を維持したままアドレスを64ビットに拡張したプロトコル︵ここではIPv4+と呼ぶ︶について考えてみたいと思う。そして、IPv4+ならば、IPv6のような長い移行期間を経ることなく、段階的にネットワークをアップグレードしていけることを示そうと思う。 なお、このIPv4+プロトコルは、筆者としてはそれなりに真面目に考えてみたものではあるけれど、単なる思考実験にすぎない。また、ここで提案するものがベストだと主張したいわけでもない。あくまで、現在の知識と経験を元に1995年くらいに戻って考え直せるとしたら、どういう世
●
テクノロジー
●2019/11/05 20:46
●IPv6
●network
●IPv4
●TCP
●あとで読む
●OS
●Internet
●article
●Tech
852 users
note.com/ruiu
現在のインターネットの基本をなしているIPv4というプロトコルには、広く知られた大きな欠点がある。パケットのアドレスフィールドの幅が32ビットなので、ネットワークに接続可能なホスト数の上限が2³²︵約43億︶になってしまっているのだ。その欠点を修正するために、1990年代後半にIPv6という新たなプロトコルが設計されたのだけど、いまだにインターネットではIPv6は少数派で、主流ではいまだにIPv4が使われている。 1990年代当時は、IPv6は規格を策定すれば比較的すぐに普及するはずで、それによってインターネットが抱えているアドレス枯渇の問題が解決されるという雰囲気だったように思う。1998年にタイムトラベルして、20年たってもまだIPv4を置き換えることに成功していないと当時の人のIPv6推進者たちに教えたら、多分すごくびっくりされるだろう。一体どうしてこんなに普及が遅れてしまったのだろ
●
テクノロジー
●2019/11/04 21:30
●IPv6
●あとで読む
●インターネット
●ネットワーク
●network
●internet
●IP
●IPv4
●サービス
●ネット
593 users
note.com/ruiu
僕の仕事をひとに説明するときに、﹁Googleで仕事をしているけどオープンソースなのでGoogleのプロダクトを作っているわけではないし、むしろアップルとかソニーの人と一緒に仕事している﹂と言うと、﹁???﹂という反応になることが多いので、僕はこういう仕事をしているんだよということをここでちょっと説明してみようと思います。 ︵2016年の僕のFacebookの投稿の転載です。︶ 僕のいるチームはLanguage Platform Teamというところで、プログラミング言語や開発ツールの開発をしています。LPTの中にもいろいろ細かいチームが分かれているのですが、僕がいるのはC++チームで、Googleで主要開発言語になっているC++言語の開発環境を担当しています。 C++で開発をするときには、C++ツールチェインと呼ばれる一連のツールを使います。ツールチェインの一番大きなコンポーネントは、人
●
テクノロジー
●2018/11/01 10:21
●oss
●あとで読む
●仕事
●google
●開発
●work
●programming
●オープンソース
●会社
●プロジェクト
393 users
note.com/ruiu
2018年の夏に僕はセキュリティキャンプ︵以下﹁セキュキャン﹂︶というイベントでCコンパイラ作成コースの授業を行いました。授業はとてもうまくいったといってよいと思います。参加者は6人だったのですが、6人全員プログラミング技術がかなり飛躍的に向上したようですし、そのうち3人は期間中にセルフホスト︵自分の書いているコンパイラで自分のコンパイラ自身をコンパイルできること︶まで漕ぎ着けることができました。 この文章では、その授業をどのように僕が教えたのかということと、生徒にできるだけ多くのことを学んでもらって自信をつけてもらうために僕が何を気をつけていたのかという2つの点について説明します。 セキュキャンとはセキュキャンは5日間の合宿イベントで、学生を対象としてコンピュータセキュリティやプログラミングについて教えるというものです。いくつものコースが用意されているのですが、僕が受け持ったのは﹁集中コ
●
テクノロジー
●2018/09/01 21:39
●programming
●あとで読む
●コンパイラ
●compiler
●C
●プログラミング
●education
●開発
●教育
●C言語
16users
note.com/ruiu
前回の記事ではTuring Complete FM︵TCFM︶ポッドキャストの録音テクニックを紹介しました。TCFMウェブサイトにはポッドキャストのリスナーのユーザ体験を向上させる工夫がいくつか存在しています。今回はTCFMのウェブサイトの技術面を紹介します。 はじめにTCFMはスタティックHTMLで構成されたサイトです。 ポッドキャストのテキスト情報が入っているYAMLファイルがあって、そこから僕が書いたPythonスクリプトでHTMLやRSSをあるディレクトリ以下に生成して、そのディレクトリ全体をFirebaseに転送して、そこからホストしています。 スタティックHTMLなサイトをFirebaseでホスティングするのはとても簡単で、ワンコマンドでできます。最近はHTTPは次第にdeprecatedな扱いになりつつありますが、Firebaseでは簡単にHTTPS化できるので、その点でもF
●
テクノロジー
●2018/04/26 10:21
●podcast
130 users
note.com/ruiu
僕は最近Turing Complete FMというポッドキャストを運営しているのですが、その収録のためにポッドキャスト録音テクニックを結構研究しました。ここではそのノウハウをシェアしようと思います。音がよくて聞きやすいポッドキャストの収録に役立ててもらえると幸いです。 はじめにポッドキャストでは音質は死活的に重要です。音質の大切さは強調してしすぎることはないと思うのですが、この点は甘く見られがちなようです。音の悪い録音を何十分も聞くのは耳が辛くて不必要にストレスがかかります。よいコンテンツを届けたいのなら、音質という、コンテンツ以前の問題は解決しておくべきです。 良い音質のポッドキャストを作成するためには、良い音質で録音する必要があります。良い録音から良い出力を作るのは簡単ですが、悪い録音から良い出力を作るのは、どんなにポストプロダクションを工夫してもほとんど不可能です。悪い音で録音してし
●
テクノロジー
●2018/04/24 15:39
●podcast
●録音
●audio
●マイク
●音声
●テクニック
●あとで読む
●サウンド
●音
1049 users
note.com/ruiu
ソフトウェアの世界には﹁悪い方が良い﹂原則という有名なエッセイがある。キレイにレイヤ分けされた一貫性のある良いデザインよりも、一見手抜きの悪いデザインのほうが実は良いときもあるという話だ。この逆説的なデザイン原則を僕は身をもって体験したことがある。それについてちょっと書いてみようと思う。 僕はlldというリンカの現行バージョンのオリジナル作者だ。リンカというのはコンパイラと組み合わせて使うもので、実行ファイルやDLLを作るのに使用される。lldはプロダクトとしてはかなり成功していて、標準のシステムリンカとして採用しているOSがいくつかあったり、GoogleやFacebookなど皆が知っているような大規模サイトの中で広く使われていたりする。 現在のlldは2世代目で、第1世代のlldは僕がプロジェクトに参加する前から存在していたのだけど、数年前にそれを捨てて一から書き直すということになった。
●
テクノロジー
●2018/04/06 14:15
●programming
●設計
●デザイン
●プログラミング
●あとで読む
●design
●development
●考え方
●開発
●コード
162 users
note.com/ruiu
コンピュータセキュリティというのは微妙なもので、正面からの攻撃には安全でも、攻撃対象とは思われていなかった部分を突くとあっさり情報が盗めるパターンがある。そういう攻撃手法をサイドチャネル攻撃という。ここではサイドチャネル攻撃についていくつか見てみよう。 たとえば社外秘の文書をセキュアにブラウズしたいとしよう。VMwareなどを使って仮想マシンにOSを2つインストールして、通常利用環境とセキュア環境を完全に分離して、セキュア環境からしか社内ネットワークにアクセスできないようにして、そちら側をインターネットから完全に隔絶しておけば、仮に両方のOSが乗っ取られたとしても、VMware自体が乗っ取られない限りは依然として分離が有効に機能しているので、インターネットに情報がリークすることは原理的になさそうだ。 しかし実際にはこのような分離は完全な防護壁にはなってくれない。たとえばセキュア環境は﹁なに
●
テクノロジー
●2018/01/19 17:50
●security
●セキュリティ
●あとで読む
●CPU
●OS
●architecture
●開発
●コンピュータ
268 users
note.com/ruiu
プログラムを書いていると、素直に実装した結果として毎回特定の条件が満たされているけど、本来それは誰も保証してないという場面に出くわすことがよくある。保証されていない偶然の動作に依存することで生じるバグというのはかなり多い。 例えば最近では、ドラゴンボールZドッカンバトルというゲームで、2回SQL文を実行した結果が同じ順序で並んでいるという誤った期待をしているコードがあったせいで、ガチャの確率表示がめちゃくちゃになってしまって、運営が確率操作しているのではないかという騒動が発生したことがあった [1]。データベースでは空のテーブルにデータを追加してその直後に読み返すと、データを追加した順番に結果が返ってきたりしがちなので、問題のコードはきれいなテスト環境では偶然うまく動いてしまったのだろうと思う。 上のようなバグを防ぐために最近よく使われているのは、本来保証しないところをわざと壊すという方
●
テクノロジー
●2017/12/13 14:25
●Programming
●あとで読む
●テスト
●Go
●golang
●quic
●プログラム
●プログラミング
●TCP
●bug
100 users
note.com/ruiu
ロシア人の同僚に、ロシアには3進コンピュータがあったらしいよね、という話をしたら、僕の大学の教授がそのコンピュータの発明者と一緒に仕事してたよ、と言われたことがあった。ソビエト連邦には3進数のコンピュータが実際にあったのだ。その奇妙な機械についてちょっと書いてみよう。 普通の2進コンピュータでは、数の1桁を1ビットといって、1ビットで2つのパターンを表すことができる。同じように、3進コンピュータでは、数の1桁をトリット(trit)といって、1トリットで3つのパターンを表すことができる。3進コンピュータで最も興味深いのは、負の数を表すための特別な符号ビットがいらないことだ。2進コンピュータでは最上位ビットが1なら数全体が負を表している、みたいな特別なルールが必要なのだが、3進コンピュータでは、各桁が-1, 0, 1のどれかを表していることにすれば、自然と負の数が表現できてしまう。 説明をコ
●
テクノロジー
●2017/12/11 12:27
●コンピュータ
●history
●あとで読む
●binary
●数学
●Programming
●歴史
105 users
note.com/ruiu
コンパイラのソースには書いていないのにバイナリだけで代々伝わっていく情報というのがあって、それはコンピュータのセキュリティに大きく関わっている。ここではそれについて書いてみよう。 僕は8ccというCコンパイラをスクラッチから書いたことがあるのだけど、8ccには文字列を読む部分で、"\"の後に"n"がきたら"\n"という文字︵改行文字︶を読んだことにするという箇所がある。これはよく考えてみれば自己言及的になっていて、ソースコードの中に"\n"のASCIIコードが一体本当は何なのかという情報が含まれていない。しかしコンパイラをコンパイルするコンパイラからその情報が受け継がれるので、できたバイナリは改行文字をきちんと出力できる。つまり8ccの改行文字は何度セルフコンパイルしても最初に使ったGCC起源ということになる。 コンパイラは、改行文字の文字コードというレベルではなく、もっと大きな情報をバイ
●
テクノロジー
●2017/12/11 12:05
●security
●compiler
●あとで読む
●コンパイラ
●セキュリティ
●programming
298 users
note.com/ruiu
誰にとっても通信速度は遅いより速い方がいいけど、情報の速さで利益を出している高頻度アルゴリズム取引業者にとっては、通信速度は死活問題だ。そういった業者のために、証券取引所間のレイテンシをマイクロ秒単位で減らすネットワークが、数百億~数千億円というお金を使って構築されている。ここではそういうネットワークについて書いてみよう。 いつの時代でも、証券取引の参加者にとって、他の証券取引所の状況をいち早く知ることは重要だった。他の人が知らない取引状況を知っていれば、それはある意味ちょっとだけ未来を知っているのと同じようなもので、わずかな時間とはいえ有利な売買ができるからだ。そのために昔から市場参加者は伝書鳩や電話などあらゆる方法で早く情報を得ようとしていた。とはいえ、人間がすべての注文を出していた時代は通信速度を極端に最適化してもあまり意味がなかったが、コンピュータを使ったアルゴリズム取引が一般化す
●
テクノロジー
●2017/12/05 12:38
●HFT
●network
●ネットワーク
●あとで読む
●技術
●金融
●technology
●アルゴリズム
●経済
●performance
460 users
note.com/ruiu
思考実験として、全世界の人が同時に、自分の持っているコンパイラやインタープリタなどの実行ファイルをうっかり全部消してしまったとしよう。そうするとそれ以降、ソースコードが残っていても、コンパイラ自身も含めてどのようなプログラムもコンパイルできなくなってしまう。この状況から人類は元のコンピュータ文明を復旧することができるのだろうか? 僕は結論としては、かなり簡単に復旧できると思う。ここではその手順についてちょっと考えてみよう。 コンパイラのバイナリファイルが全部消えてしまった後、復旧のために目指すべきマイルストーンは、おそらくCコンパイラを元に戻すことになるだろう。Cで書かれたプログラムはOSやコンパイラ自身を含めてたくさんあるので、そこを起点にすれば、たくさんのプログラムを芋づる式に復旧していけるからだ。 ほとんどのCコンパイラはCかC++で書かれている。最近のGCCやClangは巨大かつC
●
テクノロジー
●2017/12/04 06:54
●プログラミング
●コンパイラ
●programming
●あとで読む
●compiler
●思考実験
●gcc
●技術
●it
●ネタ
129 users
note.com/ruiu
数年に一度、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
●
テクノロジー
●2017/11/30 16:22
●うるう秒
●Linux
●あとで読む
●programming
●システム
●*ネタ
●software
●development
271 users
note.com/ruiu
いろいろなソフトウェアで、大きいランダムな値をユニークな値とみなすということが行われている。例えばユニークな識別子としてよく使われるUUIDはただの122ビットの乱数だ。gitもSHA-1ハッシュ値が160ビットの乱数のように扱えることを期待して、それをユニークな識別子として使っていた。実際にはランダムな2つの値が同じになる確率はゼロではないのに、なぜこれが安全なやり方だと言えるのだろうか? それについてちょっと説明してみよう。 あるシステムが、乱数で生成された識別子の衝突のなさに依存しているとして、仮に衝突が発生した場合、相当悪い結果、例えば復旧不可能な形でデータベースが壊れてしまうとしよう。これはどれくらい危険なのだろうか? 数学の問題で、学校のクラスの中で同じ誕生日の人が1組以上いる可能性は思ったより高いという話を聞いたことがあると思う。あるランダムに生成された値が衝突する確率という
●
テクノロジー
●2017/11/29 15:59
●乱数
●algorithm
●uuid
●数学
●あとで読む
●development
●computer
●アルゴリズム
●システム
●ネタ
445 users
note.com/ruiu
スタンフォードのコンピュータサイエンスの授業で、ときどきこれは良問と思う問題がテストで出ることがある。僕の印象に残っているのは﹁xをfloatとするとき、x + 0.25 - 0.25 = xが成り立たないxを求めよ﹂というものだ。浮動小数点数を理解していないと、両辺が同じにならないケースがあるほうが不自然に思えるだろうから、この問題は浮動小数点数の奇妙さを結構うまく突いていると思う。この問題を元に浮動小数点数についてちょっと説明してみよう。 まずコンピュータ上での数について少し考えてみよう。コンピュータにおける数と、数学の整数や実数は、よく考えてみると全然違う。コンピュータは有限の記憶領域しか持っていないので、無数にある数を表すことが根本的にできない。つまりコンピュータ上の数は﹁本物の数になるべく似せた別の何か﹂だ。現実的には、例えば32ビットの数なら2^32パターンしか表せないので、そ
●
テクノロジー
●2017/11/29 11:22
●浮動小数点数
●コンピュータ
●programming
●プログラミング
●数学
●math
●あとで読む
●float
●computer
●ネタ
84users
note.com/ruiu
﹁機械の目﹂というと冷徹かつ忠実に現実の世界を切り取るというニュアンスがある。カメラのイメージセンサなどは誰が作っても、それこそ別の惑星の知的生命体が作っても、僕らが持っているものと同じものになりそうだ。しかし実際にはそうではない。カメラは多くの場合、人間が見るための画像を生成する装置なので、人間の目の構造をかなり忠実に反映している。それについてちょっと見てみよう。 多くの人の目にはRGBの3種類の色に反応する3種類の細胞がある。最近は生きた人間の網膜上の細胞を直接観測することが可能になっている。下がその着色した画像だ︵画像はWikipedia︶。 カメラの撮影素子のカラーフィルタもRGBだ︵画像はWikipedia︶。 さて、ここでいくつかの共通点に気づくことができる。まずは、どちらもRGBの3色を認識するという共通点があるのだが、3原色というのは、自然界における3つの特別な色というわけ
●
テクノロジー
●2017/11/27 10:42
●ディスプレイ
●biology
●UI
●technology
●デザイン
●あとで読む
431 users
note.com/ruiu
現実世界でもコンピュータの中でも、何らかの性能指標だけを追求すると参加者にとって極端に不公平になってしまうことがある。例えばエレベータとHDDは共通点がありそうに思えないが、この2つは性能特性的にとてもよく似ていて、リーズナブルな性能と公平性を両立させるために同じ制御方法が使われている。これについてちょっと説明してみよう。1基しかない場合のエレベータの動き方は単純だ。一度上に動き出すと、上で待ってる人や降りる人がいる限り上昇し続ける。同じように、一度下に動き出すと、下で待っている人や降りる人がいる限り下降し続ける。これ以外の動き方をするエレベータはまず存在しないので、これが唯一の制御方法のように思えるけど、別にこうしなければいけないというルールはない。 エレベータの平均待ち時間を最適化することを考えてみよう。そうすると、一方向に動き続ける代わりに、エレベータが現在存在する階に一番近い人の
●
テクノロジー
●2017/11/24 07:58
●アルゴリズム
●algorithm
●あとで読む
●エレベータ
●HDD
●エレベーター
●programming
●読み物
●プログラミング
●b
457 users
note.com/ruiu
ゲームなどを作っているとランダムさが必要になることがあるけど、コンピュータは基本的に毎回全く同じように動くので、乱数を作り出すのはそう簡単なことではない。Wi-FiやHTTPSなどの暗号は乱数のランダムさに本質的に依存しているので、高品質な乱数生成は世の中的にも重要な話題である。ここでは乱数生成について話をしてみよう。 ゲームではイベントがプレイヤーに予測不可能であればよいだけなので、真の乱数列ではなく擬似乱数列というものを使うことが多い。擬似乱数列は人間にはランダムにみえるけど、実際は何らかの数式によって順番に生成されているだけの数の列で、初期値を毎回違うものにしておくと、人間には毎回違う数列が生成されるようにみえる。初期値には現在時刻を使うことが多い。現在時刻は普通の用途では毎回違うからだ。 昔のゲーム機は現在時刻の設定がなかったので、ファミコンなどでは、起動してからの経過時間を疑似乱
●
テクノロジー
●2017/11/22 09:07
●乱数
●セキュリティ
●あとで読む
●Security
●プログラミング
●ゲーム
●技術
●development
●random
●programming
664 users
note.com/ruiu
ハードウェアのエラーでメモリの内容が化けてしまうことが稀にある。大抵のDRAMエラーはせいぜいプログラムがクラッシュする結果になるだけだが、データ破壊になることもありえるし、悪意のある使い方をすればセキュリティ破りに使うこともできてしまう。ここではメモリエラーとセキュリティの話をしようと思う。 メモリのエラー率は意外なほど高い。データセンターで大規模なマシン群を対象に実際に観測したところ、1年間に1回以上のエラーが発生したDIMMモジュールは全体の8%にのぼったそうだ。DIMM 1枚に数百億個のメモリセルが実装されているといっても、このエラー率はちょっとびっくりするくらい大きな数字ではないだろうか? サーバでは普通はエラー訂正付きのDIMMを使うので1ビットのエラーは問題にならないが、エラー訂正のないコンシューマ機器ではこれは実際的な問題になりえる。 メモリエラーを利用したセキュリティ破り
●
テクノロジー
●2017/11/20 14:15
●セキュリティ
●メモリ
●security
●あとで読む
●ハードウェア
●hardware
●memory
●プログラミング
●programming
●エラー
533 users
note.com/ruiu
一度聞いたら忘れられないような印象深いバグというものがある。僕は数値のオーバーフローと聞くと必ずこの2つのバグを思い出してしまう。どちらも面白いエピソードなのでちょっと紹介してみよう。 一つ目は、初代Civilizationにあったバグである。Civilizationは文明間で戦う戦略シミュレーションゲームで、チンギスハンとかエリザベス女王みたいなプレイヤーを選んで、世界制覇か宇宙開発競争での勝利を目指すというゲームだ。 初代Civilizationにあったバグは、非暴力主義のガンジーが突然核攻撃してくるというものだった。原因は文明が民主主義を採用すると攻撃性が2下がるというロジックだった。初代Civではガンジーの攻撃性は全プレイヤー中で最小の1なのだが、ゲームが進んでインド文明が民主主義を採用すると、攻撃性がマイナス2されてオーバーフローで255になり、ガンジーがゲーム中で突如、極度に攻
●
テクノロジー
●2017/11/17 15:36
●オーバーフロー
●バグ
●プログラミング
●Civilization
●programming
●bug
●ネタ
●あとで読む
●ゲーム
●game
690 users
note.com/ruiu
いろいろな環境で動くプログラムでは互換性のためにその場しのぎのことをしないといけないことがよくあるけど、歴史が積み重なってくると、アドホックな技の上にアドホックな技が積み上がる喜劇的な状態になることがある。こういう問題は認識するのは簡単だが直すことは誰にもできない。まさに僕がそのような体験をしたのでちょっと説明したい。 僕は仕事としてオープンソースのlldというリンカを書いている。リンカというのはコンパイラが生成したバイナリファイルをつなぎ合わせて最終的な実行ファイルやDLLを作成するプログラムで、知らない人も多いと思うけど、何をコンパイルしても最後にはリンカが動いている。lldは既存プログラムより何倍も速くてビルドが早くなるというので最近は結構人気が高まっていて、FreeBSDなどのいくつかのOSが全面的にスイッチしようとしたり、あるいは大規模プロジェクト︵Chromeや、どうもFire
●
テクノロジー
●2017/11/15 09:57
●programming
●読み物
●browser
●あとで読む
●プログラミング
●歴史
●linux
●FreeBSD
●unix
●ブラウザ
1419 users
note.com/ruiu
UnicodeのUTF-16エンコーディングではほとんどの文字︵コードポイント︶は2バイトで表現されるが、Unicodeに後から追加収録された文字の多くは4バイトで表現される。4バイト文字がうまく扱えないプログラムというのはわりとよくある。しかし世界中で広く使われるようになった絵文字がよりによって4バイト文字であるせいで、そのような文字が扱えない問題がよいペースで解決に向かいつつある。それについて少し説明してみようと思う。 Unicodeが80年代から90年代初頭にかけてデザインされたときの目標の一つは、Unicodeに含まれる文字数を65536個以内に収めることだった。現代の文章を実用的なレベルで表すためには、漢字などを含めてもそれだけの種類の文字があれば十分だと考えられたのだ。当然これは1文字を2バイトで表すことを念頭に置いていた。つまりコンピュータの揺籃期から当時に至るまで単純に英語
●
テクノロジー
●2017/11/13 10:04
●unicode
●文字コード
●絵文字
●emoji
●UTF-8
●プログラミング
●programming
●あとで読む
●技術
●文字
974 users
note.com/ruiu
自分の中のプログラミングの常識というものは、ときどき現実のハードウェアに合わせて調節しないといけない。ハードウェアが進歩し続けているので、コンピュータで簡単にできることと相対的に難しいことのバランスが変化し続けているからだ。ここでは特にストレージにフォーカスして書こうと思う。 昔はメモリが相対的にとても貴重な資源だったので多くのプログラマがメモリを節約することに血道を上げていた。例えばWindowsの初期の頃に設計されたデータ構造には、メモリをバイト単位ででもいいから節約したいという意図の痕跡がいまでも多く見受けられる。DRAMの次に速い記憶装置はHDDだったので、メモリが足りなくなればHDDにデータを保存せざるを得ないのだが、DRAMとHDDのランダムアクセスの速度差は、机の上の本の開いているページを見るのと、その本をAmazonで注文して到着するのを待つのと同じくらいのスケールで違うの
●
テクノロジー
●2017/11/02 10:11
●プログラミング
●programming
●あとで読む
●開発
●algorithm
●メモリ
●memory
●code
●HDD
●software
14users
note.com/ruiu
僕は子供の頃からコンピュータが好きで、PCやインターネットの世界をずっと見てきたつもりだ。振り返ってみるとこの四半世紀で僕らを取り巻く世界は劇的に変わったなと思う。とりとめがなくなるがランダムにいくつかリストアップしてみたい。ちなみに僕はプログラマなのでそういう視点からのものの見方になる。 まず第一に、この四半世紀でコンピュータが本当に人々の生活に浸透した。いまでは誰もが惚れ惚れするような素晴らしい出来の小型のコンピュータを持って︵スマホだ︶、コンピュータが得意なこと︵通信や検索など︶を自然にしている。 コンピュータはポップカルチャーの一部になり、コンピュータを使いこなすことやプログラミングできることのイメージがとてもよくなった。かつてはコンピュータに詳しいことはどちらかといえば社会的にネガティブなイメージを含んでいたように思うけど、いまでは逆にプログラミングできない人がネットやオンライン
●
テクノロジー
●2017/10/30 07:31
●コンピュータ
●internet
●tech
●考察
●history
556 users
note.com/ruiu
いまのところ25単位分︵マスター修了に必要な単位数の約半分︶の授業を取ったので感想を時系列でちょっとまとめたい。昔のやつは記憶が曖昧になっているけど。 CS243 プログラムの解析と最適化 (2014Q4)要するにコンパイラの最適化の授業。前半はデータフロー解析とかでかなり実用的な感じがしたが、後半は行列計算の命令の依存関係を抽出してベクトル最適化とか、ItaniumみたいにレジスタのたくさんあるCPUでループアンローリングするみたいな話で、実際に役に立つのかはよくわからなかった。 と、そのときは思ったが、巨大な行列の計算はよくあるので、興味を持てなかった僕がダメだっただけかもしれない。 とにかく難易度が高かった。かなりがんばって夜中までやっていたつもりだけどもっと真剣に取り組むべきだったかもしれない。なにせこれが最初の授業だったのでレベル感がよくわかっていなかった。教授がドラゴンブックの
●
テクノロジー
●2017/04/06 16:59
●programming
●プログラミング
●教育
●あとで読む
●cs
●education
●コンパイラ
●study
●learning
●computer
次のページ
このページはまだ
ブックマークされていません
このページを最初にブックマークしてみませんか?
﹃Rui Ueyama|note﹄の新着エントリーを見る
キーボードショートカット一覧
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く
●総合
●一般
●世の中
●政治と経済
●暮らし
●学び
●テクノロジー
●エンタメ
●アニメとゲーム
●おもしろ
●アプリ・拡張機能
●開発ブログ
●ヘルプ
●お問い合わせ
●ガイドライン
●利用規約
●プライバシーポリシー
●利用者情報の外部送信について
●ガイドライン
●利用規約
●プライバシーポリシー
●利用者情報の外部送信について
●公式アカウント
●ホットエントリー
●はてなブログ
●はてなブログPro
●人力検索はてな
●はてなブログ タグ
●はてなニュース
●ソレドコ
Copyright © 2005-2024 Hatena. All Rights Reserved.
設定を変更しましたx