Entries from 2013-01-01 to 1 year

自社サービスからエコシステムへ進化する話 (Re: UI変更批判バトルと複数のバージョンのウェブサービスを同時に配信することについて - hitode909の日記)

ウェブサービス,UI変えると,改悪とか,元に戻してとか,そういう意見が出る. サービス提供する側の立場では,新しいUIのほうが使いやすかったり,機能が増えたり,収益が増えたりするので,新しい方を多くの人に提供することに価値がある.使いやすいかと…

「今日使われているプログラミング言語の多くは、なぜ1990年前後に誕生したものなのか」に関する一考察

若い人たちは、「文字列型」があるプログラミング言語しか知らないかもしれない。だが、汎用的な文字列型が一般的になったのは、プログラミング言語の歴史の中でも比較的最近のことである。たとえば、1972年に誕生したC言語には文字列型がない。1980年代に良…

GCとかロケット科学すぎてウェブサービス屋さんには似合わない

※タイトルは釣りです。先のエントリで、 採るべき技術的アプローチに関しては、ソフトウェアの修正コストによってかわるという議論があって、ウェブサービスの場合にはソフトウェア製品(やSI)と比べて圧倒的に修正コストが安い。ウェブサービスの場合にロケ…

ソフトウェアのアップデートとウェブサービス運用における継続性リスクについて

Webサービスのようなプロダクトについての議論について教えて下さい - Kentaro Kuribayashi's blog で呼ばれたような気がしてたけど放置してた。でも今日、express という node.js 上で動作するメジャーなウェブアプリケーションフレームワークを作っている…

JSXコンパイラのオプション詳説(もしくは --executable の機能)

※この記事はJSX Advent Calendar 2013の一部です。アドベントカレンダーの目的は、関連情報を増やすこと。だったら公式ドキュメントを増やせばいいじゃん!!!!! もしかしてオレ天才ちゃう?ということで今日はCompiler Reference - Documents - JSXを書…

Test::Mocha::PhantomJSを書いた

Test::Mocha::PhantomJSというPerlモジュールをリリースしました。一言でいうと、Perlで書いたサーバサイドロジックを、PhantomJS上で動くMochaのテストコードで検証するためのモジュールです。具体的な手順としては、 t/ 以下に次のようなテストコードを書…

JSXでプログラムを書く上で参考になるドキュメント

※この記事はJSX Advent Calendar 2013の一部です。JSXでプログラムを書く上で参考になるドキュメントといえば、なんといっても公式ドキュメントです。量は少ないですが、チュートリアルや型に関するリファレンスはhttp://jsx.github.io/doc.htmlにあります。…

コンストラクタから他のコンストラクタを呼び出す方法

JSX

※この記事はJSX Advent Calendar 2013の一部です。JSXでは「this(...)」と書くことで、あるコンストラクタから別のコンストラクタを呼び出すことができます。下の例はJSXのコンパイラからの抜粋。 class NodePlatform extends Platform { function construct…

JavaScriptバインディングの書き方

JSX

※この記事はJSX Advent Calendar 2013の一部です。JSXでは、JavaScriptで定義されているオブジェクトをJSXのクラスとして簡単に取り込めるようになっています。やりかたは簡単。「native」属性を付与してクラス定義を書くだけです。たとえばJavaScriptの組み…

オレオレ認証局の適切な運用とName Constraints

オレオレ認証局が忌避されるべきものとされてきた理由は、X.509 PKIが保証する安全性は、最も信頼性が低い認証局(trusted root)のそれに等しいからです。しかし、X.509 v3以降ではName Constraintsが導入され、「特定のドメインに対してのみ証明書を発行可…

個人サーバのファイアウォールを活かしつつ、どこからでもログインする方法 (CGI編)

以前、 いつでもどこからでもサーバにログインしたくなるときってありますよね。かといって、サーバの sshd への接続を全世界から可能にしておくというのは、たとえパスワード認証を無効化していても避けたいところ。 Dynamic DNS を使って SSH アクセスを制…

パスワードをソルトつきハッシュ化してDBに保存するのがベストプラクティス…とは限らないという話

フレームワークの責務とセキュリティ - MugeSoの日記についての感想文です。世の中にはたくさんの通信プロトコルが存在し、中には、特定の条件でパスワードを含む文字列をハッシュ化した値を検証しなければならないものも含まれています。例えば、HTTP Diges…

Inline JSONPの長所について (続: サーバサイドからクライアントサイドのJavaScriptを呼び出す際のベストプラクティス)

サーバサイドからクライアントサイドのJavaScriptを呼び出す際のベストプラクティス - kazuhoのメモ置き場 の件、id:tokuhirom がさくっと HTML::CallJS というモジュールを書いて公開してくれた (Shipped HTML::CallJS - tokuhirom's blog 参照) ので、どう…

サーバサイドからクライアントサイドのJavaScriptを呼び出す際のベストプラクティス

JavaScript文字列のエスケープ – yohgaki's blog に対して、 最近だと id="hoge" data-foo="" しておいて $("#hoge").data('foo') でとりだすのが主流かと思います。 はてなブックマーク - JavaScript文字列のエスケープ – yohgaki's blog のように、 そもそ…

ディレクトリの変更を監視して、任意のコマンドを再起動する話

plackup -R とか grunt-contrib-watch とか、ウェブアプリケーションの処理系とかビルドツールには、割とこの手のものが組み込まれているんだけど、Windows を無視できるなら、*1外部ツールを使えばいいわけで。具体的には App-watcher-0.11 - watch the fil…

mmapのほうがreadより速いという迷信について

@ITに以下のような記事が出て、 今回からしばらくの間は、まったく逆の例、つまり使うとプログラムの処理性能が上がるというシステムコールを紹介していく。システムコールを呼ぶ回数は少ない方が処理性能は高くなるという原則は変わらないが、呼び出してお…

30秒でわかるオープンソースライセンスまとめ

「よくわかるFOSSライセンスまとめなんてないよねー」と煽られたので3分で書く。オープンソースライセンスは、以下の3種類に大別される。 代表的なライセンス 改変部分のソースコードの開示が必要 リンクして使う、他のソフトウェアのソースコード開示が必…

MySQL用にランキング専用ストレージエンジンを作る話

前提: ゲームに限らずランキング機能が必要になるケースは多い つまり需要はある だが、MySQLで高速なランキング表示は難しい 具体的に言うと、以下の要件を満たすのが不可能 1行の更新コストが要素数Nに対して O(log N) 以下 任意のランキング位置周辺のSE…

同時にwrite(2)すると混ざるかどうか

Linux のシステムコールである write(2) の ドキュメントを読むと Atomic/non-atomic: A write is atomic if the whole amount written in one operation is not interleaved with data from any other process. This is useful when there are multiple wri…

JavaScriptのTyped Arrayのコピー

JavaScriptのTyped Arrayにおいて、JavaのSystem.arraycopy相当の関数は以下のような形で実装することができる。 function arraycopy(src, srcPos, dest, destPos, length) { dest.set(src.subarray(srcPos, length), destPos); }

サービスごとに異なるパスワードを使い分ける方法

最近、パスワードの使い回しをしているユーザーに対する攻撃が出回るようになってきています (参照: パスワード攻撃に対抗するWebサイト側セキュリティ強化策 | 徳丸浩の日記) が、マスタパスワードからサービスごとに異なるパスワードを自動生成するのが簡…

巨大な bookmarklet を信頼できる形で配布する方法

Twitter で聞いてみたところ @hasegawayosuke さんいわく、Bookmarklet の文字数制限は最短だと約2,000文字らしいです。でも、その長さで bookmarklet を書くのって難しいですよね。かといって、別のサーバから JavaScript をダウンロードして実行するとなる…

Monoceros雑感

Monoceros は @kazeburo さんが開発してる Plack 用ウェブサーバ。prefork型だけど、待機中の接続をイベントドリブンのマネージャで管理することで、同時接続10,000本とか行ける(ソケットの受け渡しは SCM_RIGHTS とか使う)。で、雑感 大好き!!! Starle…

もふったーのコンシューマシークレット問題について、鍵はプログラム中に安全に埋め込めるはず。だが…

超軽量Twitterクライアント「もふったー」コンシューマシークレットキー難読化最後の挑戦 - GIGAZINE もふったーコンシューマシークレットキー難読化最後の挑戦 ・ω・ - Windows 2000 Blog あたりの話について。記憶に頼って書いてるので間違ってたらごめん…

asm.jsの評価(JVM,PNaClとの比較、および、現在の問題と今後の可能性について)

asm.jsに関する客観的意見があまりないようなので、ツイートをまとめてメモ。現時点での機能はC/C++コードの移植に特化している 文字列にもオブジェクトにも配列にもアクセスできない JavaScriptの値で使えるのは数値だけ*1 typedarrayについては、同時に1…

Test::mysqld 0.17 でテストがもっと簡単になる話

Test::mysqldというモジュールがあって、MySQLを使うテストを簡単に書けるので好評なわけですが、今回これに copy_data_from って、既存のデータディレクトリをコピーして mysqld を起動するオプションを足しました。このオプションを使うことで、以下のよう…

なぜPHPでrequire("http://...")したらセキュリティホールなのに、Goならいいのか

go言語なんか import "http://github.com/mattn/xxx " だったりする。rubyもそういうの面白いかもしれない。require "http://github.com/mattn/xxx "みたいな。 mattn on Twitter: "go言語なんか import "http://t.co/9qiwho7OMZ" だったりする。rubyもそう…

なぜ動的型付けの言語が流行ったのか (Re 静的型付けと動的型付けのどちらが優れているかという話)

静的型付けと動的型付けのどっちが優れているか。どのようなプログラムを書いているかによって答えはかわるんじゃないの?たとえば、自社で開発・運用しているウェブサービスなら「問題が出たら修正」すればいいんだし、バグがないことを保証するよりも迅速…

gzipされたcore-fileをスパースファイルとして展開する方法

開発者の皆さんは、gzipされたcore-fileを送りつけられた経験をお持ちのことだと思います。ですが、ディスク容量に厳しいSSDやVM上で作業していると、展開すると数10GBにもなるコアファイルを受け取ってもどうしようもありません。で!も! コアファイルをス…

LTSV のもうひとつのメリット、あるいは、プログラムでログを出力する際に気をつけるべきこと

Labeled Tab-separated Values (LTSV) がブームのようです。LTSV については、ラベルをつけることで柔軟に拡張できるという点が、その特徴として取り上げられますが、もう一点、タブをセパレータに使うことでログのパースが簡単になった、という点を忘れるべ…