ブックマーク / cpplover.blogspot.com (24)

  • 金の使い道が分からない

    「毎日のように飲みに行っている」と男は我々に語った。我々は土曜日を丸一日エンジニアボードゲーム会@郷に費やした後、会場の近くの中華料理屋で事をしているのであった。 「毎日のように飲みに行っている。だいたい終電を逃してタクシーで帰る」 よく金が続くものだ。 「結局、タクシー代を考えると、都内に住んだほうがいいので、都内に住んでいる。しかし、家など寝るためにあるようなものなので、いらないのではないか。最近は荷物をどんどん減らしている」 「貯金がないし、たまらない。どうやって貯金をしたらいいのだろう」 贅沢な悩みだ。私と、その場にいたある女は、金の使いどころがなくて貯金額のみむなしく増えていく一方だというのに。 毎月の給与所得というものが発生するようになって早一年、最初こそ、東京に身ひとつで引っ越してきたばかりであり、色々と物入りであったが、基的な日用品を買い揃えてしまえば、後はなにも要ら

  • コンパイラーを負かす

    roguelazer's website: beating the compiler なかなか面白かったので翻訳して紹介する。 たとえば、97%の場合において、僅かな効率など忘れるべきである。。早すぎる最適化は諸悪の根源である。とはいえ、残りの重要な3%の機会を逃すべからず。 -- Donald Knuth 計測せよ。計測するまで速度の最適化を施してはならぬ。たとえ計測したにせよ、一部のコードが残りを圧倒するまではまだ最適化してはならぬ。 Rob Pike 最新のWebサービスを主体とした技術の業界に長年浸かった我々は、パフォーマンスの問題を忘れがちである。SQLAlchemy ORMの中で行うリクエスト一つが8,9秒かかる中で、関数呼び出しひとつを3ミリ秒最適化したところで何になるというのか。とはいえ、時にはそのような最適化スキルを養っておくのもいいことだ。今回は、ある簡単な課題を最適化

  • 全プログラマーが知るべきレイテンシー数

    Latency numbers every programmer should know — Gist L1キャッシュ参照 0.5ナノ秒 分岐予測失敗 5ナノ秒 L2キャッシュ参照 7ナノ秒 Mutexのロックとアンロック 25ナノ秒 メインメモリー参照 100ナノ秒 Zippy[Snappy]による1KBの圧縮 3,000ナノ秒 1Gbpsネットワーク越しに2KBを送信 20,000ナノ秒 メモリーから連続した1MBの領域の読み出し 250,000ナノ秒 同一データセンター内におけるラウンドトリップ 500,000ナノ秒 ディスクシーク 10,000,000ナノ秒 ディスクから連続した1MBの領域の読み出し 20,000,000ナノ秒 パケットを、カリフォルニア→オランダ→カリフォルニアと送る 150,000,000ナノ秒 Jeff Dean著(http://research.googl

  • C++の正規表現ライブラリ: std::regex

    いまさらながら、C++の正規表現ライブラリを調べている。 C++の正規表現ライブラリ、std::regexは、boost::regexを土台に設計されている。boost::regexの正規表現の文法は、perlなのに対し、std::regexは、ECMAScriptである。この理由は、しっかりと正規表現の文法が定義されていて、外部規格として参照できる品質のものが、perlには存在しないためだ。std::regexはposixと拡張posixとawkとgrepとegrepの正規表現にも対応している。 記事では、ECMAScriptの正規表現を使う。また、参考のためのECMAScriptのコードも使う。 全体一致 文字列全体が正規表現に一致するかどうかを調べたいとする var re = /1234/ ; var text = "1234" ; var result = re.test( te

  • The Old New Thing: 実行ファイルのベースアドレスが0x00400000である理由

    古参MS社員のRaymond Chenが、なぜWindowsのデフォルトのベースアドレスは0x00400000に配置されているのか。最初の4MBは何だという質問に答えている。 Why is 0x00400000 the default base address for an executable? - The Old New Thing - Site Home - MSDN Blogs DLLのデフォルトのベースアドレスは0x10000000だが、なぜEXEのデフォルトのベースアドレスは0x00400000なのか。なぜこの値なのか。4メガバイトに何の意味があるのか。 これには、x86のディレクトリエントリひとつでマップできるアドレス空間であることと、1987年に決められた設計のためだ。 EXEのベースアドレスの制約としては、64KBの倍数であることのみだ。しかし、ベースアドレスを選ぶ理由に

  • cpで大量のファイルをコピーした(4億3200万件、39TB)

    GNUのcpを使って大量のファイルをコピーしたところ、cpの設計上の問題で、極めてコピーが遅かったというお話。 My experience with using cp to copy a lot of files (432 millions, 39 TB) よう。俺は最近、大量のファイルをコピーする必要があったんだが、UNIXは20年もやってきた俺の経験からも、cpの挙動には驚かされたし、俺の意見はコミュニティに共有されるべきだと思う。 環境:古いDellのサーバー(2コア、初期メモリ2GB、追加して10GB、Ubuntu Trusty)と、新しいDellのストレージ格納機(MD 1200)にある、12個の4TBディスクでRAID 6が設定してあって、全体で40TBの要領を持ち、二つのドライブが同時に失敗しても問題ない環境。サーバーは遠隔地バックアップに使われていて、ディスクへの書き込みし

  • Bram MoolenaarがNeovimに反応

    Neovim - Google Groups Vim作者であるBram MoolenaarがNeovimに対してコメントを返している。 大変な仕事になるし、すべてのシステムをサポートすることもできないし、新しいバグが生まれるし、利用者にとって何の価値があるというのだ? 完全なリファクタリングは解決ではない。今あるものを改良するほうがいいのだ。利用者にとってVimが快適になるように、小さなリファクタリングをするのならまだわかるが。 Neovimのニュースを見た時に、まっさきに思い浮かんだし、Hacker Newsでも言及されていたことに、Joel Spolskyのブログ記事がある。 Things You Should Never Do, Part I - Joel on Software Joelは、MozillaがNetscapeがスクラッチから書き直したことを批判し、たとえどんなにコード

    tomakomai01951
    tomakomai01951 2014/02/24
    “Vim作者であるBram Moolenaar”
  • ドワンゴに入社した

    そう。タイトル通りだ。筆者、江添亮はドワンゴに雇用された。一体、どのような経緯でドワンゴに入社するに至ったのか。また、どんな仕事をしているのか。それを説明するには、時系列を追って書いたほうがいいだろう。 2013年8月21日 ふとみると、以下のようなサブジェクトのメールが届いていた。 【ご相談】ドワンゴ主催の C++11, 14 に関する勉強会にスピーカーとしてご参加頂けないでしょうか C++11? C++14? なんと、日C++14などという単語を知っている企業があったのか。しかし・・・ドワンゴ? SPAMだろうか。いや、こんなにピンポイントなSPAMがあるわけがない。 それにしても解せないメールだ。ドワンゴといえば、もちろん、あの有名なニコニコ動画の企業だ。ニコニコ動画と言えばWebサイトだ。ニコニコ動画やその関連サービスの開発にC++を使っているのだろうか。いやまて、たしか子会社

  • 1/9998 = 0.0001 0002 0004 0008 0016 0032 0064 0128 0256...

    1/9998 = 0.0001 0002 0004 0008 0016 0032 0064 0128 0256... \(\frac{1}{9998}\)は、4桁で2^13まで2の累乗のパターンが出現する。 \[\frac{1}{9998} = 0.0001\;0002\;0004\;0008\;0016\;0032\;0064\;0128\;0256\;0512\;1024\;2048\;4096\;8193\;6387\;\cdots\] Hacker Newsによれば、これは以下のような理由による。 The pattern will break down once you get past 8192, which is 2^13. That means th\cdots | Hacker News このパターンは8192を超えると破れる。つまり、このパターンはすごいことに52桁も継続

  • プログラマーのジョーク

    language agnostic - What is your best programmer joke? - Stack Overflow 私はコンピューターサイエンス科で教育しているが、何かユーモアによって場を盛り上げたい。ユーモアは場を退屈させず、物事を印象深くするし、物事を学ぶモチベージョンにもつながる。さらに、ジョークが技術的な理解を必要とするのであれば、さらにモチベーションが上がるのだ。 このstackoverflowの質問を受けて、様々なプログラマーのジョークが投稿されている。その評価順に紹介すると・・・ A man flying in a hot air balloon suddenly realizes he’s lost. He reduces height and spots a man down below. He lowers the balloon furth

    プログラマーのジョーク
  • iBus 1.5がクソすぎる

    Ubuntu 13.10へのアップデートが、問題なく終わった。問題は、iBusが1.5にアップデートされてしまったことだ。 iBus 1.5は、去年の年末にリリースされた。リリース直後から、IRCでは怨嗟の声が絶えなかったが、今になって、ようやくその意味がわかった。iBus 1.5はひどい。ひどいなんてものじゃない。クソだ。いや、クソですら上品過ぎる。iBusは超超超超超・・・残念ながら、まだiBusを罵るべき言葉が発明されていないが、とにかくその超なにかだ。 UNIX風システムでは、伝統的に、日本語入力は、かな漢字変換を担当するIMEと、IMEと文字入力を受け取るアプリケーションの間の橋渡しをするIMに分離されている。ユーザーから見えるIMの役割としては、IMEの有効無効を切り替えることだ。 筆者はこれまで、IMとしてiBusを、IMEとしてMozcを使っていた。 iBusはIMである。

  • クッキー・クリッカー:リセットの効果

    この記事では、クッキー・クリッカーのリセットについて解説する。過去作は以下を参照。 の虫: クッキー・クリッカーについて の虫: ババア補完計画 の虫: クッキー・クリッカー物語 クッキー・クリッカーのメニューから、ソフトリセットを行うと、手持ちのクッキーや設備やアップグレードをすべて失う代わりに、青天上のチップが手に入る。 青天上のチップ(Heavenly Chip) 青天上のチップは、この宇宙をリセットする勇気を出した者に送られる周回アイテムである。青天上のチップひとつが、CpSを2%底上げする。得られる青天上のチップの数は、すべての周回を含めた、これまでに生産したクッキー総量に応じて決定される。チップの数はリセットのたびに加算されるわけではなく、再計算される。その計算式は、以下のようなJavaScriptの式を評価した結果の値になる。 // cookiesは、周回も含めて今まで

  • ババア補完計画

    書はクッキー・クリッカーについて先に成し遂げられし預言書、クッキー・クリッカーについての続編である。読者は前編を読み、またクッキー・クリッカーを反物質変換装置を購入した時点まで進めることが強く推奨されている。今回は、並行してゲームを行うことは推奨しない。書は将来の備えと覚悟のために読んでもらいたい。読者はいずれ到達しなければならない未来なのだから。 クッキー・クリッカー の虫: クッキー・クリッカーについて 読者よ。クッキーの忠実なる臣にして生産者よ。汝はついに、クッキー生産の頂点、反物質変換装置を購入するに到れり。何ぞや。反物質変換装置はV.1.0.36における最終ビルディングにして、これより購入クッキー額高き、またCpS高きビルディングなし。されど、汝はさらなるクッキーを求めんと欲す。汝はさらなるクッキーを生産を望まんと欲す。その意思、まことに偉大なり。如何となれば、世にクッキー

  • クッキー・クリッカーについて

    昨日、筆者はクッキー・クリッカーなるゲームを体験した。このゲームは、ゲーム質を非常によく抽象化している。ここではそのゲームについて述べるが、読者には実感のため、並行してゲームを行なってもらいたい。 このゲームのプログラムはHTML/CSS/JavaScriptと、その他のリソースで構成されていて、ストールマンの自由四原則に合致する自由ソフトウェアではないが、一応は、制限的ながら、forkや改変を許諾している。このプログラムを動作させるには、まともなブラウザーが必要である。 Cookie Clicker まずみると、左に素晴らしくうまそうなクッキー、中央によくわからない列、右によくわからない小物が並んでいる。操作方法がよくわからない。まず、左にこれみよがしに配置してある、うまそうなクッキーをクリックしてみよう。 +1 なんと、クッキーが一枚得られた。続けてどんどんクリックしていくと、数十

  • コミケの保存されにくい同人文化と、複製による情報保存の歴史

    前回、前々回で、筆者はコミケの非効率性と文化保存の認識の欠如について書いた。しかし、どうも問題が正しく認識されていないようだ。 なぜ複製のみが文化財産の消失を防ぎうるか 情報が後世に保存される確率を最も上げるのは、複製である。この単純な事実が理解されていない。どうして、どこの馬の骨ともしれぬ個人の当てにならぬ、勝手気ままで、品質も期待できないような複製が、情報の保存に役立つのか。なぜかと言えば、保存されることにより、情報が消失する確率が下がる、すなわち保存される確率が上がるからである。 情報がひとつの媒体に縛られているというのは、とても当てにならない。ここの情報媒体は、とても簡単に消失してしまう。 まず、単にその媒体が、経年劣化により腐ったり磁気情報が弱まったりして、読み込めなくなるという問題がある。紙の寿命は、それほど長くない。確かに、千年前に書かれた文章が、その書かれた紙ごと現存してい

  • GNU/Linuxベースのディストロの名前の意味と由来

    有名なGNU/Linuxベースのディストリビューションの名前の意味と由来を調べてみた。 文ではディストロやプロジェクトの名前を使っているので、LinuxカーネルとGNUユーザーランドを使ったシステムであっても、Arch LinuxとかGentoo LinuxMandariva LinuxとかFedora LinuxなどはGNU/Linuxではなく、そのまま表記している。 Slackware ディストリビューションのさきがけともいえる存在だが、もともと、Slackwareは広く一般向けのディストリビューションを目指してはいなかった。そのため、真面目に受け取られることを防ぐ目的で、わざとふざけた名前が付けられた。slackというのは、どうもパロディ宗教のChurch of the SubGeniusに由来するようだ。 Slackware - Wikipedia, the free encyc

  • デニス・リッチーによって書かれた最初のCコンパイラーがGitHubで公開

    mortdeus/legacy-cc · GitHub デニス・リッチー(1941-2011)によって書かれた発展途中の初期のCコンパイラーのソースコードがGitHubで公開されている。ソースコード自体は、まだデニス・リッチー存命の頃から公開されていたが、この機会に紹介してみる。 ライセンスは許諾的で、このライセンス文を同梱すること、並びに、ソースコードから生成されたバイナリはラインセンス文を出力することとなっている。 追記:ライセンスに関してふと思った。このライセンスは名義が企業で、著作権を盾に同意を求めている。日では、映画以外の団体の著作権の保護期間は公開後50年である。UNIXと付属するソフトウェアのソースコードは当時から公開されていた。ということは、1973年に制作されたこのCコンパイラーのソースコードは、日国内では、2024年に著作権が切れるのだろうか。 詳しい経緯は、以下の

  • なぜエロサイトの動画プレイヤーはYouTubeより高機能なのか

    Redditで、以下の質問が注目を集めていた。 Why do porn sites have video players that are so much better than Youtube? : AskReddit エロサイトの動画プレイヤーは、YouTubeのよりはるかにいい。すべての男と、おそらく大多数の女は、この事実を認めるであろう。YouTubeは動画中のコマを見ることができる機能を追加した。しかし、そんなのはエロサイトならとっくの昔に実装されていたことだ。エロサイトでは、動画のプレビューがある。単なる一枚の画像ではなく、アニメーションGIFのような形のプレビューだ。しかも、エロサイトはフルスクリーンへの切り替えにもたつくことはない。なんでエロサイトはGoogleよりよっぽどいいUIを提供しているんだ? 面白い質問だ。 評価の高かった書き込みの意見はどうか。曰く、エロサイトは

  • 本の虫: 記録からみるLinus TorvalsのC++観

    On Wed, 5 Sep 2007, Dmitry Kakurin wrote: > > Gitのソースコードを始めてみた時、2つのことが頭にひっかかった。 > 1. C++じゃなくて純粋なC。理由は不明。移植性とか言わないでよ。 > クソだ。 クソまみれなのはオメーの方だ。 C++は悲惨な言語だ。しかも、少なからぬ数のプログラマーが使っていて、完全無欠のどうしようもないクソを生成するのがめちゃめちゃ簡単になっているという点で、よけいに悲惨だ。マジで、Cを選択する理由が「何もなかった」としてもだ、C++プログラマー避けになるというだけで、Cを使う大義名分になる。 つまりだ:Cの選択は唯一のまともな選択なんだよ。Miles Baderがふざけて、「いやがらせによる追い返し目的」なんていってたが、実際のところ正しい。俺の出した結論では、プロジェクトにCよりC++を使いたがるプログラマーは、む

  • FedoraとUbuntuのLinuxカーネル設定の比較

    jwboyer: Fedora and Ubuntu Kernel Config Comparison Red HatのJosh BoyerがFedoraとUbuntuのLinuxカーネル設定を比較している。 たまに、私は洞穴の中、つまりbugzillaから這い出てあたりを見回し、他のディストロのカーネルスペースがどうなっているのか調べる。今日、私はFedoraとUbuntuのカーネル設定の違いについて興味を持った。私は常々、カーネルは注目されるものの、ディストロの中では最も退屈なパッケージであると考えている。カーネルは動くべきであるし、良く動くべきであるし、それだけだ。ディストロを差別化するために存在するのではない。ディストロを動かすために存在するのだ。さて、私の説は正しいのか、あるいは設定の中に、あるディストロを別のディストロと差別化するための何かが含まれているのだろうか。さて、調べて