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

最近、パスワードの使い回しをしているユーザーに対する攻撃が出回るようになってきています (参照: パスワード攻撃に対抗する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 については、ラベルをつけることで柔軟に拡張できるという点が、その特徴として取り上げられますが、もう一点、タブをセパレータに使うことでログのパースが簡単になった、という点を忘れるべ…

Mac OS Xで、再起動せずにスワップを解放する方法

Mac を使っていて、だんだん動きがもっさりしてきたなー*1と思って /private/var/vm/ 下を見ると、案の定スワップファイルが溜まっていることがある。こういうケースでの対策としては、・スワップ禁止にする、・/usr/sbin/purgeする、・再起動する、といった…

__restrict__とインライン展開を用いてCコンパイラのalias analysisを回避する方法

コンパイラ依存ですが、__restrict__ とインライン展開を組み合わせることで、単一の値から派生したふたつのポインタを、互いに相互作用がないかのように最適化させることができます。たとえば以下のコードをコンパイルすると、 extern void f(int* sp); ext…

git で特定のファイルの変更を追う方法

git log -p!GUI ほしいけど、とりあえずは、 (for i in `git log --pretty="format:%h" ファイル名` ; do git show $i ファイル名 ; done)で読むとだいたいわかる。

git branch の結果を時間順にソート

ブランチが大量にあると、git branch の結果を最終更新時間でソートして表示したくなりますよね。以下のワンライナーでできます。 (for i in `git branch | colrm 1 2` ; do echo `git log --date=iso8601 -n 1 --pretty="format:[%ai] %h" $i` $i ; done) |…

Xcode を使わずに iOS 向けのコードをコンパイルする方法

# armv7 clang -arch armv7 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk -c mattn.c ar mattn-armv7.a mattn.o ranlib mattn-armv7.a # i386 clang -arch i386 -isysroot /Applicati…

direnvを使って実行環境(perlとか)の切り替え

plenv の話を聞いていて、別解もありそうだなと思ってググったらあった。以下手順 direnv をインストールする .bashrc あるいは .zshrc の末尾に "eval `direnv hook $0`" と書いておく 適当なディレクトリに perl とかをインストールする 実行したいディレ…

JavaScript(V8)で避けるべき(だった?)クロージャの使い方

Grokking V8 closures for fun (and profit?) に、ほんの少しだけ触れられている話なんですが。ごく最近まで V8 には、オブジェクトリテラルの中で関数リテラルを使った場合に非常に遅くなる(というかGCが多発する)問題があった。たとえば、 function doit()…

C++ の vtbl に、関数以外の型のデータを入れる

C++ でコードを書いていて、vtbl に関数以外のデータを入れたくなったことはありませんか? 僕はあります。型によって異なる定数を高速に知りたい(たとえばあるフィールドが何バイト目にあるか)けど、仮想関数呼出だと遅いし、かといって、インスタンス変…

C++ でコンパイル時に 2^n に切り上げる

C++ で速度を要求されるプログラムを書いていると、コンパイル時に定数を 2^n に切り上げたいことがあります。というか、必要だったので書いた。 template<size_t N> struct RoundUp { template<size_t M, size_t D> struct _Between { static const size_t MidV = 1 << (M + D / 2); stati</size_t></size_t>…

プログラム中に HTML とか埋め込むためのテンプレートエンジン picotemplate を作った件

たとえばドキュメント生成ツールなんかを作ってると、HTML をプログラムの中で生成したい!ってことは良くあると思います。でも、そのためにいちいちテンプレートエンジンを使うのは大げさな場合も多いですよね。たとえば、ちょっとリストを出力するとき。以…

JSX で Array#forEach が5倍以上速くなった話

JSX の進化速度が半端ない - ぐるぐる~ で紹介していただいているとおり、最新の JSX では function expression の型宣言を省略できるようになっています。これを利用して、たとえば配列の合計を求める場合、 var sum = 0; [ 1, 2, 3, 4, 5, 6, 7, 8 ].forE…

JSXにテンプレート型サポート入れ始めた

まだ master にはマージしてないですが kazuho/user-defined-templates ブランチのやつを使うと、 class Adder.<T> { static function f(x : T, y : T) : T { return x + y; } } class Test { static function run() : void { var n = Adder.<number>.f(1, 3); log n; v</number></t>…

haXe と JSX の最大の違いは null と undefined の扱い

JavaScript のコードをデバッグ中、突然出現する null や undefined に苦しめられている方も多いのではないでしょうか。haXe と JSX の一番大きな差は、個人的には、その null (と undefined) の扱いにあると考えています。haXe の JavaScript 実装では、全…

JSX はなぜ「速い」のか

なぜ「速い」のか、について JSX 開発者の立場から。たとえば、シューティングゲームで一番重たい処理は何か。言うまでもなく衝突判定。多数の弾や敵機の衝突判定を毎フレームごとに行う必要があり、この演算が重たい。JSX に同梱されている web/example/sho…

node.js におけるエラー処理のコーディングパターン (もしくは非同期 JavaScript における例外処理)

node.js を代表とする JavaScript を用いた非同期プログラミング環境においては、コーディングパターンのベストプラクティスが共有されておらず、結果として品質の低いコードが多くなるという問題があるように思います。そこで、特にエラー処理をどう書くべ…

勝手に添削 re Perl5 の適当な手書きパーザで、簡単な数式をパースしてみる

http://d.hatena.ne.jp/tokuhirom/20120413/1334282197 を勝手に添削。 my $src = "11*3+2/2"; use Data::Dumper; print Dumper(parse($src)); exit; sub parse { my $src = shift; my $ret = expression(\$src); if ($src) { die "Parse failed: $src"; } $…

C++ のヘッダファイルを #include するだけで使える GC 書いてみた

そういえば C++ のヘッダファイルを #include するだけで使える GC を書きました。使い方は下のサンプルコードを見てもらえばいいとして、特徴としては、 ヘッダファイルを #include するだけで使える C++ の標準機能だけを使っているのでポータブル*1 mark-…

僕が shared_ptr よりも retain() / release() 方式が好きだと思う理由

c++

それは、shared_ptr のようなラッパーよりも、オブジェクト自体が参照カウンタをもっているほうがコードが書きやすいから。たとえば、継承したクラスでオブジェクトの参照カウントをいじることは、shared_ptr では難しい。shared_ptr を使った場合: class B…

[メモ] TCP/IPプログラミングにおけるエラー処理 (RSTパケットの飛ばし方と検出の仕方)

SO_LINGER の秒数を 0 にしてソケットを閉じればいい。Perl で書くなら以下のような感じ。 setsockopt($sock, SOL_SOCKET, SO_LINGER, pack("II", 1, 0)) or die $!; $sock->close() 一方で RST によって切断 (=異常切断された) かどうかはソケットからの読…

nicesort ってのを書いてみた

sleep sort とか環境にやさしすぎて21世紀には不向きだと思うの。なので nicesort なるものを作ってみた。 #! /bin/bash function f() { nice -n "$1" perl -we 'for (1..1000000) {}' echo "$1" } while [ -n "$1" ] ; do f "$1" & shift done wait こんな…