Showing posts with label humour. Show all posts
Showing posts with label humour. Show all posts

2017-10-05

VS CodeがDOMによるターミナル実装のパフォーマンスを改善できなかったためCanvasに変更

Integrated Terminal Performance Improvements

Electronという史上まれに見るそびえ立つクソのようなGUIプラットフォーム上で実装されているVS Codeが、ターミナルの実装をDOMによるものからCanvasによるものに変更したそうだ。これは、DOMによる実装ではパフォーマンスの改善が十分にできなかったからだという。

DOMでターミナルを実装する際の問題ごととして、テキスト選択、テキストアライメント、GC、パフォーマンスを上げている。

テキスト選択:ターミナルのテキスト選択を実現するためにDOMのテキスト選択の挙動をだいぶ上書きしなければならない。

テキストアライメント:一部の文字はモノスペースになってくれず、workaroundとして一文字ごとに固定長のspanで包む必要があるが、これはパフォーマンス上よろしくない。

GC:DOMでターミナルを実装するためにメチャクチャなことをするのでGCによってパフォーマンスが劣化する。オブジェクトをプールすることでなるべくDOMを使いまわしGCを低減する泥臭いハックをしたが、限界がある

パフォーマンス:色々と頑張ったが、結局パフォーマンスは悪かった。

そして結局、要素を組み合わせてレイアウトを決定するという処理だけで16.6ms以上かかる場合もあり、60fpsを達成できないので、ターミナルをDOMで実装するのは不向きだという結論に達したそうだ。

フルHDのデスクトップ画面をキャプチャしてH.264などにエンコード、デコードすることをリアルタイムで行えるほどコンピューターが高速化したこの2017年にターミナルを60FPSで実装するのに苦労しているのはすさまじい。

やはりElectronは悪い文明 粉砕する!

2017-01-30

xkcdで最近面白かった話

xkcd: Wifi

縦軸:来客がWiFiに接続できる確率

横軸:来客の技術力

グラフ中の表記、左から:

技術力低い:WiFi設定が見つけられない

技術力普通:使える

技術力高い:「ファームウェア」に原因がある

titleテキスト:右端を超えると正しく使える。ただし、その理由には「ファームウェア」が関係している"

筆者も今使っているラップトップの一台のWiFiの調子がUbuntuで悪くて苦労している。

xkcd: 職場チャット

2004年:うちの部署はIRCでやり取りしている

2010年:うちの部署はほぼSkypeを使っているが、一部の同僚はまだIRCを使っている。

2017年:ほぼ全員がSlackに移行した。しかし3人だけIRCをやめるのを拒否してIRCゲートウェイ経由で接続している。

2051年:宇宙シンギュラリティによりすべての知的意識は統合された。ただし一人だけIRCクライアント経由で参加している奴がいる。
「俺は自分の好きなようにやりたいんだ。わかるだろ?」
やれやれ

titleテキスト: 2078年:奴はようやくscreenとirssiからtmuxとweechatに移行しやがった。

たしかにこの2017年では職場内のチャットはSlackが独占した感がある。

もっと訳そうと思ったが飽きたのでこの辺で。

2016-09-29

XKCD 1739: 問題の修正

xkcd: Fixing Problems

問題の修正

「何をしているんだい?」

「問題を修正しようとして作り出した問題を修正しようとして作り出した問題を修正しようとして作り出した問題を・・・」

titleテキスト:「修正しようとしている問題の最初のきっかけとなった問題は何だったんだ?」、「えっとね、使ってたツールが非効率的で時間の無駄だったんだ」

ついに来たか!

2016-05-08

xkcd 463: 投票機

xkcd: Voting Machines

Premier Election Solutions社(以前はDiebold社)は、自社で開発したオハイオ州の選挙用の投票機が、McAfee アンチウイルスソフトウェアの問題によって障害を起こし責任を追求されている

「ちょっとまて」
「投票機にアンチウイルスソフトウェアだと? 間違ってるだろ」

「なんで? セキュリティは重量だろ?」
「もちろんそうだが、なんと言うべきか」

「保護者の教師の説明会で、教師が授業中は常にコンドームをつけているので安全だと保護者の説明したとしよう」

「なるほど、厳密に考えると、付けていないよりは安全・・・」
「間違ったやり方のヤツがいかに多いことか」

titleテキスト:これで俺はまた暗号会議を追い出された。いいだろ。いい例えなんだからさ。

2016-04-04

物理法則が同じかつ1900年ぐらいの科学レベルの異世界にタイムリープした現代人は現代の進んだ科学知識を活用して異世界チート主人公系ラノベのごとくになれるか

いかのような問題提起を考察したい。

なるほど、とても興味深い設定である。これについてできる限り考察してみよう。

異世界チート主人公系ラノベというジャンルがある。一個の現代人の主人公が常識や物理法則の違う異世界に飛ばされて、世界の差異を利用して有意に立つという筋書きの物語である。主人公はどこにでもいる一般人、それも無職とか低賃金有期雇用者とか、社会的弱者であることも多い。

ここでは2016年の人間が1900年に飛ばされて、科学知識の差を利用して活躍する筋書きである。活躍する上で、理解がクソなために科学の発展を阻害するというオチまで付けなければならない。

しかし、実証主義として考えれば、実際に観測可能な現象と一致する結論は、たとえ仮説が間違っていたとしても、科学の発展にはもたらす害悪よりも利益のほうが大きいのではないか。たとえばニュートンは筋金入りの神秘主義者で、現代の常識から考えれば非科学と迷信に凝り固まった人間ではあるが、ニュートンは確実に科学の発展に寄与している。

さて、まず1900年の科学水準について確かめてみよう。ひとまず1900年の日本語版のWikipediaを確認してみる。

1900年 - Wikipedia

  • 1月2日 - 初の電気バスがニューヨーク市で開業
  • 4月11日 - 米海軍が初の潜水艦ホーランド (潜水艦) を取得(就役10月12日)
  • 5月1日 - 東京電気鉄道(後の都電)設立
  • 5月29日 - 米国オーチス・エレベーター社がエスカレーターを商標登録
  • 7月2日 - ツェッペリン(水素ガスによる飛行船)が初飛行(ボーデン湖)
  • 7月19日 - パリ万国博覧会会期中にパリの地下鉄が開通
  • 8月8日 - 国際数学者会議にて、ヒルベルトの23の問題のうちの10題が公開される
  • 9月11日 - 日本初の自動公衆電話が東京の新橋駅と上野駅、熊本市内に設置

後にガンマ線と名付けられる放射線をポール・ヴィラールが観測したのも1900年である。

元素の発見もかなり進んでいて、放射性の元素もかなり発見されていたし、非放射性の元素はほとんど発見されていたし、未発見のものも発見は時間の問題であった。

なるほど、1900年の科学水準というのは、すでに電気バス、潜水艦、電車、エスカレーター、飛行船、地下鉄、公衆電話が存在していたどころか実用化もされていて、かつ数学もだいぶ進んでいたし、放射線の理解も進んでいたし、元素も安定したものはほとんど発見されていた。

さて、困った。1900年は思ったよりも科学水準が高い。例えば筆者程度の人間が1900年に飛ばされても、現代の科学知識を用いてチート主人公になることはできない。

ひとつ考えられるのは、この頃の一般大衆の科学水準はまだ低く、宗教や迷信が強く信じられていて、現代の進んだ心理学を元に大胆に振る舞えば、新興宗教とかネットワークビジネスの開祖としてそれなりに活躍できるのかもしれないし、「まっとうな科学の発展を阻害」するというもうひとつの目的も達成できるのかもしれないが、そういうことができる人間は現代でも新興宗教とかネットワークビジネスの開祖になれるだろう。そして、後述する言語の違いにより、この方法によるチート主人公となるのも難しいのである。

2016年と1900年で大きく違うのは、言語と人権である。この差は、おそらく主人公にはチートどころかハンディキャップになるであろう。

1900年の日本語は、現代と発音が異なる。2016年の主人公が音声学と日本の方言の考古学を専攻していて、かつ発音の実践を積んでいない限り、話し言葉による日常会話は困難であろう。1900年の価値基準で判断すると、主人公は実質的に失語症になってしまう。

書き言葉の差はもっと難しい。主人公が古文漢文に加えて草書体を相当に深く学んでいない限り、1900年の日本社会では文盲の扱いを受ける。当時は、ラテン語の読み書きができないものは論文すら読めずに、科学の世界に足を踏み入れることさえできない。文章で科学知識を伝えられなければ、いかに2016年の第一線の科学知識を持っていいようと無力である。英語はまだ世界共通語の地位を確立しておらず、ドイツ語やフランス語も科学の世界ではまだ強い力を持っていた。

たとえ筆者が2016年の最新の科学技術の知識を持っていて1900年において文書で書き残したとしても、その内容の解読には長い年月がかかり、功績が理解されるのは主人公の死後50年以上かかるであろうし、その頃には主人公の書き残した科学技術は独立して発見されているであろうから、社会への影響は、一部の歴史学者の混乱を除いて、良くも悪くも与えないだろう。

1900年においては、人権はかなり軽視されていた。たとえば1900年の1月23日には、光明寺村女工焼死事件が起こっている。これは織物工場で働く労働者の寄宿所が火事になったのだが、当時の慣習として、労働者の逃亡を防止するために、寄宿所の窓は鉄格子の上、ドアが施錠されていたから、労働者は逃げられなかったのだ。

リンカーンによる奴隷解放宣言は1862年であったが、アメリカ合衆国において黒人が選挙権を実際に行使できるようになるのは1971年からであった。

これを考えると、1900年に飛ばされた主人公は意思疎通ができず知的障害とみなされ、日銭を稼ぐために奴隷のような劣悪な労働環境に身をやつすことになるだろうと予想できる。

考察結果として、1900年の科学水準はかなり高く、2016年の一般人程度があやふやな科学知識を振りかざした程度では、異世界召喚系ラノベのような活躍はできないことが判明した。

2016-04-01

Linuxにleftpad()というシステムコールを入れる提案

LKML: Richard Weinberger: New syscall: leftpad()

Linuxカーネルに興味深い日付でleftpad()というシステムコールが提案されている。

最近のnode.js業界の事件を振り返るに、leftpadのような基本的なアルゴリズムの依存はソフトウェアを脆弱にすることが判明した。ledpad[原文ママ]を提供するnode.jsパッケージが消失し、多くのソフトウェアが動かなくなった。

この事件に注目すると、node.jsベースのソフトウェアがLinuxの「ユーザースペースは壊さない」原則に将来的に頼ることができるので、このような機能を提供するのはカーネルの役目であるという結論に至った。

glibcとAndoid[原文ママ]のbionicは、早急にこの新しいシステムコールのラッパー関数を提供してくれることを望む。

leftpadをカーネルに入れたのはLinuxの安定したABIという理由だけではなく、パフォーマンス上の理由もある。

ご存知のように、カーネルでは、すべてが高速でかつ優れている。leftpadには大勢の利用者がいるので、可能な限り高速でなければならない。また、この新しいシステムコールはleft-pad.ioのようなサービスをより高速に安定して提供するのにも使うことができる。leftpad()システムコールが十分に利用された場合、npm()という、カーネルモジュールがnode.jsでよく使う新しい機能を登録できる、ioctl()のように機能する汎用的なシステムコールを付け加えるのも手だ。そのような機能としては、is_array()やis_int()が挙げられる。

[leftpad()システムコールをLinuxカーネルに追加するパッチ]

これを受けて、以下のような返信が行われている。

動いた。このシステムコールの重要性は筆舌に尽くしがたい。提案と実装してくれてありがたい。

パッチを提出する時はcheckpatch.plにかけてくれ。

これはよさそうだが、他のarchに対応させた上で、適切なメンテナーをCCに加える必要があるな。

これはよさそうだが、可能な限り高速にするために、無駄な範囲外チェックなどの分岐は全部除去したほうがよいし、ユーザーのメモリーに直接書き込むことで、無駄なcopy_from/copy_toを除去すべきだ。これにより、遅いkmallocも除去できる。

文章には注意を払ってくれ[ledpadとandoidのtypoの指摘]

参考: 本の虫: npmからkikとその他諸々が消されたまとめ

2015-12-29

AVGのクソみたいなChrome拡張の脆弱性

Issue 675 - google-security-research - AVG: "Web TuneUP" extension multiple critical vulnerabilities - Google Security Research - Google Project Hosting

アンチマルウェアソフトウェアのAVGが、クソみたいな脆弱性を含むChrome拡張を、Chrome拡張のインストールを阻止する仕組みを意図的に迂回して無理やり入れた挙句、脆弱性を生み出していたそうだ。しかも、脆弱性の指摘に対する修正案がお粗末すぎる。このようなセキュリティ的にお粗末な対応をするところが出しているセキュリティ用のソフトウェアは一切信用できない。読者の中にAVGを利用しているものがいたら、即刻に消すべきだろう。

ユーザーがAVG AntiVirusをインストールすると、"AVG Web TuneUp"という拡張idがchfdnecihphmhljaaejmgoiahnihplgnのChrome拡張が無理やりインストールされる。webstoreの統計によると、900万人のアクティブChromeユーザーがこの拡張を有効にしている。

この拡張は様々なJavaScript APIをChromeに追加する。どうやら、これによって、拡張は検索設定や新しいタブページをハイジャックできる。インストール方法はとても複雑で、このような拡張APIの悪用を防ぐために設けられたchromeのマルウェアチェックを迂回している。

とにかく、APIの多くがぶっ壊れている。添付した攻撃サンプルは avg.comのcookieを盗むことができる。また、閲覧履歴などの個人情報をインターネット上に公開させることができる。任意のコード実行につながるような脆弱性が含まれていてもおかしくはない。

Chromeの開発者は、怒りのメールをAVGに投げるが、返ってきたAVGの主張する「修正」は、拡張コードの実行を、以下のような条件で制約をかけるものであった。

var match = event.origin.match(/https?:\/\/.*\.avg\.com/i);

if (match ! null {
...
}

このコードの意図は、拡張の動作をAVGのoriginのみに制限するものだが、正規表現は極めて悪く書かれていて、例えば、"https://www.avg.com.www.attacker.com"のようなoriginも受け付けてしまう。かつ、AVGのWebサイトにXSS脆弱性が存在した場合、誰でも拡張によってもたらされた「機能」を利用できてしまう。

Chrome開発者がそのような返答メールを返したところ、こんどは、拡張の動作を"mysearch.avg.com" and "webtuneup.avg.com"をoriginとする場合のみに制限するとんちんかんな「修正」を送ってきた。これ以上改善の見込みがないと判断したChrome開発者は、以下のようなメールを投げつける。

見てみたが、この方法は動くだろう。ただし、ホワイトリストしたドメインがXSSやmixed contentを含む場合、誰でも脆弱性を活用できてしまう。

残念なことに、そういう脆弱性を発見するのは難しくない。私はWebセキュリティ専門家ではないが、数分探すだけで、以下を見つけた。

http://webtuneup.avg.com/static/dist/app/4.0.5.0/interstitial.html?risk=%3Cimg%20src=x%20onerror=alert(1)%3E&searchParams=%7B%22lang%22%3A%22en%22%2C%22pid%22%3A%22pid%22%2C%22v%22%3A%22vv%22%7D

わかりやすく説明してやると、このドメイン下にXSSバグが存在する限り、すべてのAVGユーザーは、銀行、メール、その他すべての個人情報が流出してしまう。そのため、このドメイン下は入念に保守と検証をする必要がある。

御社はホワイトリストされたドメインに対してプロのWebセキュリティ検証を行うという条件下で、この修正は動くだろうよ。

セキュリティ用のツールを開発しているところがこんなマヌケな「修正」を送ってよこすとは。AVGは一切信用できない。ちなみに、avg.comのXSS脆弱性は、未だに修正されていない。

思うに、もはやアンチマルウェアソフトウェアの時代は終わった。というのも、結局既知のマルウェアに特有のシグネチャを検出するのは何の訳にも絶たない。マルウェアを作り出すのはそれほど難しくはないからだ。マルウェアに特有の挙動を仮想環境上で動かして調べるというのも、誤爆が多く役に立たない。

それどころか、アンチマルウェアソフトウェアの殆どは、カーネルモードで動作するコードを追加したり、カーネルAPIをフックしたり、カーネルを書きかえたりする。それによって、新たな脆弱性を追加している。追加のソフトウェアは追加のリスクという古き良き教訓は忘れ去られてしまったのだろうか。

それに、この拡張によって一体どのようなセキュリティが確保されるというのか。筆者には、AVGが検索クエリーなどの個人情報を収集して販売するための機能にしか思えない。すると、AVGはマルウェアにほかならない。

2015-08-27

xkcd 1566と1567

xkcd: Board Game

ボードゲーム

「そして、この山は控除可能カードですね。手札と組み合わせて得点の維持をします」
「そしてこっちは扶養者トークン」

毎年、近所のボードゲームクラブをだまくらかして税金の計算をさせている。

いいアイディアだ。

xkcd: Kitchen Tips

キッチンのコツ

みなさんは、私と同じように、肉が焼けたかどうか判断が着かないことがあるでしょう。

勘に頼るのではなく、サーモメーターを使いましょう。

みなさんは、私と同じように、汚れたお皿とかグラスを投げ捨てていることでしょう。でも、洗えば、再利用できるのです。

スクランブルエッグを作るときは、フライパンを間にはさみましょう。

作るのが簡単になりますし、コンロも汚れません。

みなさんは、私と同じように、冷凍庫に水をぶちまけてからドアを勢い良く占めることで氷を作っていることでしょう。

でも、もっといい方法があるのです。

どうも、馬鹿馬鹿しいテレビ広告手法を皮肉っているらしい。

2015-05-28

コマンド間違えると「コマンドではない。」って返してくれる江添プラギン

bashの場合、.bashrcに以下のように書けばよい。

command_not_found_handle()
{
    echo "コマンドではない。"
}

ちなみに、もともとのシェル関数をリネームする方法について興味深い方法があった。

bashrc - How do I teach bash in Ubuntu some curse words? - Ask Ubuntu

How do I rename a bash function? - Stack Overflow

これを元にUbuntuに提供されている便利な機能も維持すると、以下のように書ける。


alias_function() {
  eval "${1}() $(declare -f ${2} | sed 1d)"
}

alias_function orig_command_not_found_handle command_not_found_handle 

command_not_found_handle() {
  command=$1
  shift
  args=( "$@" )


  echo "コマンドではない。" 
  orig_command_not_found_handle "$command" "${args[@]}"
}

2015-05-26

Old New Thing: 超最新の実験的C++機能、オタマジャクシ演算子

New C++ experimental feature: The tadpole operators - The Old New Thing - Site Home - MSDN Blogs

僕はよくこういうコードを書いている。

x = (y + 1) % 10;
x = (y + 1) * (z - 1);
x = (double)(f(y) + 1);

+と-の演算子は優先順位が極めて低いために、その周りに括弧を多用しなければならず、とても読みにくい深くネストされたコードができあがってしまう。

Visual Studio 2015 RCには、実験的な演算子が2つ追加されている。その名もオタマジャクシ演算子。これは整数値から括弧を必要とすることなく1を加算、減算できる演算子である。

x = -~y % 10;
x = -~y * ~-z;
x = (double)-~f(y);

オタマジャクシ演算子と名付けられた理由は、オタマジャクシが値に向けて泳ぐ姿と、値から遠ざかって泳ぐ姿に似ているためである。チルダがオタマジャクシの頭で、ハイフンが尻尾だ。

文法 意味 説明
-~y y + 1 オタマジャクシが値に向かって泳ぐと大きくなる
~-y y - 1 オタマジャクシが値から遠ざかって泳ぐと小さくなる

この実験的オタマジャクシ演算子を有効にするには、C++ファイルの上部に以下のような行を追加しなければならない。

#define __ENABLE_EXPERIMENTAL_TADPOLE_OPERATORS

例えば、以下はオタマジャクシ演算子を使ったコードの例である。

#define __ENABLE_EXPERIMENTAL_TADPOLE_OPERATORS 
#include <ios>
#include <iostream>
#include <istream>
 
int __cdecl main(int, char**)
{
   int n = 3;
   std::cout << "3 + 1 = " << -~n << std::endl;
   std::cout << "(3 - 1) * (3 + 1) " << ~-n * -~n << std::endl;
   return 0;
}

この演算子はまだ実験的機能であることに注意すること。公式なC++の一部ではない。しかし、使ってみて感想を教えてくれ。

ちなみに、このオタマジャクシ演算子はx86とx86-64向けのGCCもClangもすでに実装済みであり、Borland 5.5やMSVC6.0といった超古代のコンパイラーすら対応している。

ドワンゴ広告

整数を2の補数で表現する場合、

\[-y = \sim{y} + 1\] \[ \sim{y} = -y -1 \]

つまり、

\[-\sim{y} = -(-y - 1) = y + 1\] \[\sim{-y} = \sim\sim{y} - 1 = y - 1\]

ドワンゴは本物のC++プログラマーを募集しています。

採用情報|株式会社ドワンゴ

CC BY-ND 4.0: Creative Commons — Attribution-NoDerivatives 4.0 International — CC BY-ND 4.0

2015-05-21

xkcd 1526: プラシボ阻害薬

xkcd: Placebo Blocker

プラシボ効果の作用原理についての研究が進んでいる。

その研究の成果を用いて、新薬を作成した。プラシボ効果阻害薬。

さて、臨床試験を行わなければならない。2つの被験者群を用意して、両方にプラシボを与え、しかる後に、片方には本物のプラシボ阻害薬を与える。そしてもう片方には・・・

・・まてよ

頭痛が痛くなってきた。

同じく。

この偽薬でも飲むかい?

2015-04-19

XKCD 1513: コード品質

xkcd: Code Quality

「僕は独学だからさ、コードはちょっと汚いかもしれないけど」
「とにかく見せてみなよ。大丈夫だって」

「うわ・・・」
「ガキが家の写真一枚だけを参考にして斧一本で建てた家みたい」

「顧問弁護士がExcel数式しか辞書がないケータイのスペル訂正機能使ってサラダのレシピを書いたらこんな感じかしら」

「IKEAで口論してるカップルの書き起こしを土台にエラー無しでコンパイルが通るまで適当に書き換えたらこうなるのかしら」
「分かったよ。コード記法の参考書読むから」

2015-02-24

xkcd: 基本の力

xkcd: Fundamental Forces

粒子間における基本的な力が4つある:

(1) 重力、これは次のような逆2乗の法則に従う。

\(F_{gravity}=G\frac{M_{1}M_{2}}{d^2}\)

なるほど・・・

(2) 電磁気力、これは次のような逆2乗の法則に従う。

\(F_{static}=K_{e}\frac{q_{1}q_{2}}{d^2}\)

それからマクスウェルの方程式とか。

それから何だって?

(3) 強い核力、これが従うのは・・・えと、えーと・・・これは陽子と中性子を結びつけているんだ。

なるほど

強いんだよ。

そして、(4) 弱い力、これは[ペラペラペラペラ] 放射性減衰 [ペラペラペラペラ]

それじゃ説明になっていないじゃないか。単に放射

これが4つの基本的な力なんだ!

title要素: 「これら4つの力のうち、ひとつだけよくわかっていないのがある」、「弱いやつか強いやつ?」、「重力」

人類は重力が一番わかっていないそうだ。

2015-01-15

ガラケー時代の翻訳

When I was in Japan I did proof reading for a Japanese feature phone. A major Ja... | Hacker News

Hacker Newsのコメントが面白かった

日本にいた時に、日本のガラケーの翻訳検証をしたことがある。ある有名な日本のブランドだった。あれは実に喜劇であった。

英語を検証するオーストラリア人と、ドイツ人の男と、イタリア人の女と、フランス人の私がいた。検証前に行われていたこと:英語力の貧弱な人間(おそらくはソフトウェアエンジニア)による日本語から英語への翻訳があり、その不思議な英語を、文脈を一切与えられずに文字列だけを与えられた翻訳家が別の言語に翻訳していた。

現場では、我々に示されたものは文字列だけであった。そして、製造元からやってきた「超企業秘密」な未公開のデバイスにアクセスできる担当者が一人。

半分以上もの翻訳は、文脈の欠如により間違っていた。フランス語の翻訳家は、「ゴミの日」を、「クソな日」と訳していた。おそらく、とてつもなくついていない一日をカレンダーに書き込むのに使うと考えたのだろう。

「(あるものを)削除する」のような文章が頻繁に現れた。当然、我々には、「あるものって何だ? 男性名詞か女性名詞か中性名詞かどれだ?」という疑問が生じた。もちろん、それはできない相談であった。すでにコードを書き変えるには遅すぎるため、我々は、"%n item(s)"のような汚い手法を取る必要があった。

ところで、現場のオーストラリア人は人類への希望を失いつつあった。ある文章が、完全に間違っていたのだ。その文章は英語で何らの意味をも持たなかった。それを読んだ現場の人間は「なんじゃこりゃ?」というしかなかった。我々には英語の文字列を変えることは許されていなかった。それはすでに検証済みであったからだ。

さもありなん

2015-01-14

Linus Torvalds、HFS+に激怒

CVE-2014-9390 aka "Git on case-insensitive filesystems" I did not give the…

gitが影響を受けた、HFS+で、一部の文字を区別しなかったり無視したりする問題に対して、Linusが吠えている。

マジで、HFS+はたぶん最悪のファイルシステムだな。クソすぎるぜ。NTFSもutf8の正規化で似たような問題(/の非正規化された表現を使用)があったが、まあ、今は修正されたんだろうよ。OS Xの問題は根本的すぎる。

そりゃ、古いさ。そりゃ、データ保護がクソすぎるってのはあるさ。だが、そういうのは、単に「すげーファイルシステムじゃない」って問題だ。「自分のケツすら拭けないマヌケによって設計された信じがたいクソ」ってわけじゃない。

HFS+の恐ろしさは、すげーファイルシステムではない、ということではない。いいアイディアがあると信じている人間によって、今もなおクソなファイルシステムとして設計され続けているということだ。

大文字小文字の同一視は信じられないくらいクソなアイディアだ。Appleの連中は修正するべきだがそれをしない。逆に、クソなアイディアを更にくそったれにしてUnicodeに拡張していやがる。UTF-8ですらなく、たぶんUCS2だ。

NTFSも似たようなことをやらかしたが、AppleはHFS+でその上をいくクソをやらかしている。

レガシーモデル(「もっとまともな方法を知らなかった」)における大文字小文字の同一視は、まだいい訳もたつ。だがな、Unicodeの同一性比較がファイルシステムにおいてもいいアイディアだと考えた奴はこの業界から干されるべきだろ。離乳食でもやって部屋の隅っこで邪魔にならないように食わしとけ。そうすりゃ奴らは幸せだろうし、俺らのシステムをクソみたいにしないだろうよ。

そして、NFD正規化を持ちだして、正しいunicodeをクソみたいなフォーマットに変換しやがるとは、言い訳も何もあったもんじゃねえよ。正規化はいいことだと考える奴らすらNFDはクソフォーマットだと認めてるし、データ交換のためにいいフォーマットじゃねーよ。離乳食レベルですらねぇ。設計上、ユーザーのデータをぶっ壊し続けてやがる。クソか。

で、Appleのこういうサルどもにファイルシステムのしごとを任せてるわけか? マジで?

ZFSに移行しなかった妥当な理由は色々ある(オホン、オラクル、ゴホン)にしてもだ、大文字小文字を区別するHFS+に移行させてから、それで将来的にはもっとマシなファイルシステムに移行させることもできただろうが、そいつはしなかったんだよな。大文字小文字を区別する方法があるが、Appleは隠して使わせないようにしている。

アホすぎてやってられねーぜ。

で、クソみたいな方針決定をする奴らと、そのクソを実装する奴らがいる。Johnが文句を言っている「よっしゃ、俺らはまともな機能を実装しないぜ」ってのより、「俺らはクソを実装するぜ」ってほうがはるかにひどい。

文句終わり

まあ、実際HFS+のUnicode正規化はクソだ。

2014-09-28

xkcd: マニュアル

xkcd: Manuals

←問題を解決する | 問題を作り出す→

左端:説明書を必要としないツール

中央:説明書を必要とするツール

右1: 説明書を必要とするが説明書が存在しないツール

右2: 説明書が「説明書の読み方」で始まるツール

titleテキスト: もっとも最悪なのはsudoersのmanページだ。クイックガイドから始まって15年たった今や、言語の文法を定義するEBNFで記述されている。「恐れることはない」と説明書は言う。「以下の定義は注釈付きである」と。

ためしにman sudoersをみてみると・・・これはひどい。

2014-09-27

xkcd: 業務

xkcd: Tasks

写真を撮った時、アプリは場所が国立公園かどうかを確認して・・・

GISを参照するだけ、簡単ね。数時間でできるわ。

・・・そして、写真が鳥かどうか確認する。

研究部署を立ち上げる必要があるわね。期間は5年。

コンピューター科学では、簡単なことと、実質不可能なことの差を説明するのが難しい。

さもありなん。

2014-09-06

What if? : 高額な靴箱

Expensive Shoebox

サイズ11の靴箱に詰め込める最も高額なものって何? (例えば、64GBのMicroSDカードに大量の購入済み音楽を詰め込むとか)

Rick Lewis

靴箱に高額なものを詰め込んだ結果の上限は、どうやら20億ドルぐらいだ。面白いことに、この上限は高額な候補どれでも同じぐらいだ。

MicroSDカードはいいアイディアだ。iTunesの音楽はひとつあたり1ドルぐらいかかり、MicroSDカードは1ガロン(3.785411784立法メートル)あたり1.6ペタバイトの容量を持つ。男性用サイズ11の靴箱は、靴のブランドや種類により異なるが、だいたい10-15リットルぐらいだ。つまり、4MBの音楽を15億曲(それぞれ約1ドル)となる。(これは、ITunesが提供する楽曲の20倍の個数であり、同じ曲を何度も買わなければならないだろうが)

Adobe®©™ Photoshop®©™ CS®™ 5™のような高額なソフトウェアは、メガバイトあたりの価格率で、多少上回る。ただし、数百ドルで数百メガバイトの容量がある。いや、かつてはそうだった。Adobeは今や、クラウドモデルに移行してしまった。

ソフトウェアの価格を考察にいれると、好きなだけ無制限にアプリ内課金ができるものによってコストを水増しできる。ゲーム内のRPGキャラは廃課金の結果の産物であるとしても、そのキャラが1兆ドルの価値を持つと真面目くさった顔で主張するのは、いかにも無理がある。

親愛なるアメリカ国民よ。我らの国家負債が期せずして2兆ドル跳ね上がった。

ところで、全く関係ないんだけどさ、俺のキャラは超かっこいい剣を大量に持ってるんだぜ。

というわけで、現物を考えてみよう。

もちろん、金というものがある。13リットルの金は、本記事を執筆している時点で、約1000万ドルの価値がある。プラチナは、もう少し高くて、1靴箱あたり1300万ドル[1]だ。これは、靴箱に100ドル札を詰めるより10倍の価値があるが。ところで、靴箱いっぱいの金は、子馬ほどの重さがある。

[1]: 残念ながら、まだSI単位ではない。

もっと高額な金属はある。例えば、1グラムの純粋なプルトニウムは、約5000ドルの価値がある。ボーナスとして、プルトニウムは金より密度が高いので、靴箱に300キログラムほど詰められる。

読者が早速にもプルトニウムを30億ドルほど購入しようと考えているのであれば、注意してもらいたい。プルトニウムの臨海量は10キログラムである。そのため、確かに、靴箱の中に300キログラム詰め込めるとはいえ、それはほんの一瞬の間だけだ。

高品質なダイヤモンドは高額であるが、適正価格を定めるのが難しい。というのも、業界全体が詐欺によって成り立っている宝石市場は複雑だから。あるWebサイトはフローレス600mg(3カラット)のダイヤモンドに30万ドル以上もの値を示している。つまり、完全な品質のダイヤモンドを詰めた靴箱は、200億ドルであるが、10億から20億ドルぐらいが妥当な価格だろう。

さて、同一の大きさのラウンドカットダイヤモンドを最も効率的に詰める方法は。

12時間待て。

違法な薬物は、重さあたりで、金より価値がある。コカインの価格はばらつきがあるが、多くの地域で、グラムあたり100ドル[2]近辺だろう。金は現在、その半分の価値しかない。しかし、コカインは金より密度が低い[3]ため、靴箱いっぱいのコカインは、金より価値が低いだろう。

[2]: ドラッグの末端価格について調査した後の私の検索履歴により、筆者は政府のあらゆる種類のウォッチリスト入りすることだろう。このブログに必要な過去の調査のためにすでにリスト入りしていなければの話だが。

[3]: でも待てよ。コカインの密度ってどのくらいだ。いつも通り、Straight Dope掲示板で議論されている。このスレでは、CRC HandbookやMerck Indexを参照したが、結局諦めて、多くの有機物が取りうる約1kg/Lであろうと結論している。ただし彼らは、コカインの沸点と、オリーブオイルに対する溶解度を学んだようだ。

コカインは重量あたり最も高額なドラッグではない。LSD--おそらく、マイクログラム単位で販売される中でもっとも消費されているもの--は、重量あたりコカインの約千倍の価値がある。靴箱に純粋なLSDを詰めると、約25億ドルの価値がある。

一部の処方箋医療薬は、LSDと同じぐらい高額である。一回分のブレンツキシマブ ベドチン(アドセトリス)は、13500ドルかかる。これは、平均的な患者にとって、靴箱をLSDやプルトニウムやMicroSDカードと同じぐらい高額にできるということだ。他の医療薬には、もっと高額なものもある。

もちろん、靴箱には靴を入れることもできる。

変なの

オズの魔法使いで演じたJudy Garlandsの靴は、オークションで666000ドルの値がついた。この靴は、我々が考察してきた様々なものと違って、かつて靴箱に入っていたかもしれない。

靴箱を任意のお金でいっぱいにしたいのであれば、アメリカ合衆国財務省に10兆ドルのプラチナ硬貨を鋳造させることができる。

とはいえ、通貨の権威者に任意の物体に価値を生じさせるのであれば・・・

単に小切手を書けばよい。

2014-08-20

Sparc上のNetBSDでejectするとパニックに陷る問題の修正

CVS commit: src/sys/arch/sparc/dev

Modified Files:

src/sys/arch/sparc/dev: fd.c

Log Message:

fd(4)をオープンすることによるpanicを修正。違うポインターをmemset()に渡していたことが原因。

なんでこの18年もののバグがこれ以前に問題を引き起こさなかったのか謎だが(少なくとも、オレの昔の5.99.23カーネルでは動く)、おそらくはgcc 4.8がメモリ確保をよりアグレッシブに行うために表面化したのではなかろうか。

この問題はNobuyoshi Satoがfd(4)にeject(1)を試みた結果、発見された。

2014-08-05

何でWindowsは俺のワイヤレスキーボードをトースターだと認識するんだ?

device manager - Why does Windows think that my wireless keyboard is a toaster? - Super User

俺は彼女の父親から古いPCを相続したんだが、プリンターを設定していると、ちょっとおどろきのものが現れた。

画像

さて、二つの疑問がある。

  1. なんでWindowsは俺のワイヤレスキーボードをトースターだと認識するんだ?
  2. なんでWindowsはデバイスメニューにトースターのアイコンを持っているんだ?

なぜか、質問者のワイヤレスキーボードに、トースターのアイコンが表示されている。Windowsはなぜそんなアイコンを用意しているのだろうか。

答えは。

理由1

Microsoftはトースター用ドライバーというサンプルを作っている。このサンプルでは、<DeviceIconFile>Toaster.ico</DeviceIconFile>という行があり、おそらく、お前のキーボードの製造業者は、このサンプルをそのまま使ったのだろう。

理由2

キーボードの裏に、食パンを差し込む口は見当たらないか?

どうやら、Microsoftがサンプル用に作ったトースター用のドライバーのデバイス情報のXMLファイルをそのまま使ったずぼらなキーボードメーカーがいるらしい。サンプルのアイコンがトースターなのは、Microsoftのユーモア精神なのか、そのままコピペして使うずぼらなハードウェア製造業者を防ぐためなのか。それでもコピペはされる。

それにしても、USBトースターはあまり実用になりそうにない。一般的なトースターの消費電力は1000Wはある。一方、USBは3.0でもせいぜい100W程度の電力しか供給できない。USB3.0ポートを制御用に1ポート、電力供給用に9ポート必要とするトースターだろうか。電源ユニットも相当によい物を使う必要がありそうだ。