タグ メモ置き場
人気順 5 users 10 users 50 users 500 users 1000 usersNorikra v1.0.0 - tagomorisのメモ置き場
English article以前からスキーマレスなストリーム処理をSQLで!というソフトウェアとして作っていたNorikra、このたびあちこち機能改善したりしたので、既にお仕事で絶賛稼働中ということもあるし、区切りとして v1.0.0 としてリリースした。ついでにロゴとかも作ったので、なんとなくいい感じになりつつある。https://rubygems.org/gems/norikra/versi... 続きを読む
DRY(don't repeat yourself)するかしないか、その判断基準について - kazuhoのメモ置き場
「過剰なDRYが技術的負債を生む」みたいな内容の記事を書きたいが、うまく言語化できない。「過剰な食事制限が健康を損なう」程度の内容に成り下がりそうだけど、そんなんじゃないんだよ…@methane 実装におけるDRYみたいなものを考えていて、そうすると前者のDRYというのがどこに位置づけられるかはわからないんですが、とにかく暗黙知みたいなものを過剰に増やすDRYは良くないよね、というような話なんです... 続きを読む
テストファーストなGitワークフローについて - kazuhoのメモ置き場
Gitのワークフローに関する話題が、また盛り上がっているようなので、僕が好んで使っているGitワークフローについて書きます。対象となるソフトウェアは、GitHubやGitHub Enterprise等を使って開発されている、リリースブランチを切らずにmasterにリリースタグを打っていくだけで十分な程度の、ウェブサービス(の部品)やオープンソースプロジェクトです。まず、以下の2点を原則として考えて... 続きを読む
WebSocket(RFC 6455)上で使用するプロトコル設計についての備忘録 - kazuhoのメモ置き場
一般論として、全二重の通信プロトコルを実装するにあたっては、いくつか注意すべき点があって、具体的には、到達確認と切断シーケンスについて定めておかないと、送達されたはずのメッセージがロストしていたり、切断タイミングによってエラーが発生*1したりする。具体例をあげると、たとえばTCP/IPにおいてshutdown(2)を用いずに、いきなりclose(2)を呼んでいると、read(2)やwrite(2)... 続きを読む
「今日使われているプログラミング言語の多くは、なぜ1990年前後に誕生したものなのか」に関する一考察 - kazuhoのメモ置き場
若い人たちは、「文字列型」があるプログラミング言語しか知らないかもしれない。だが、汎用的な文字列型が一般的になったのは、プログラミング言語の歴史の中でも比較的最近のことである。たとえば、1972年に誕生したC言語には文字列型がない。1980年代に良く使われていたPascalの文字列型は最大255文字しか格納できなかった。なぜか? それはメモリが貴重なリソースだったから。1980年代のPCの搭載メモ... 続きを読む
ソフトウェアのアップデートとウェブサービス運用における継続性リスクについて - kazuhoのメモ置き場
Webサービスのようなプロダクトについての議論について教えて下さい - delirious thoughts で呼ばれたような気がしてたけど放置してた。でも今日、express という node.js 上で動作するメジャーなウェブアプリケーションフレームワークを作っているチームが、次世代の製品に取り組み始めたと聞いたので、メモを以下に貼ります。 --------------------------... 続きを読む
パスワードをソルトつきハッシュ化してDBに保存するのがベストプラクティス…とは限らないという話 - kazuhoのメモ置き場
フレームワークの責務とセキュリティ - MugeSoの日記についての感想文です。世の中にはたくさんの通信プロトコルが存在し、中には、特定の条件でパスワードを含む文字列をハッシュ化した値を検証しなければならないものも含まれています。例えば、HTTP Digest認証の場合は、MD5("realm:user:password")を保存しておく必要がありますし、APOPの場合は生のパスワードを、CRAM... 続きを読む
サーバサイドからクライアントサイドのJavaScriptを呼び出す際のベストプラクティス - kazuhoのメモ置き場
はてなブックマーク - JavaScript文字列のエスケープ あたりで盛り上がっていた件、僕も、そもそもそういうことはやめたがいい派ですが、一方で、 タグ内に動的生成したデータを埋め込むのは、それほど難しいことではないかと思います。というのは、元のエントリではエスケープ関数を自作していますが、実際はありもののエスケープ関数を組み合わせるだけで、タグ内に正しくエンコードされたデータを埋め込むことが... 続きを読む
mmapのほうがreadより速いという迷信について - kazuhoのメモ置き場
@ITに以下のような記事が出て、 今回からしばらくの間は、まったく逆の例、つまり使うとプログラムの処理性能が上がるというシステムコールを紹介していく。システムコールを呼ぶ回数は少ない方が処理性能は高くなるという原則は変わらないが、呼び出しておくと処理性能が向上するシステムコールというものが存在するのだ。こうしたシステムコールを使わないでいることは、とてももったいない。 今回紹介するシステムコールは... 続きを読む
30秒でわかるオープンソースライセンスまとめ - kazuhoのメモ置き場
「よくわかるFOSSライセンスまとめなんてないよねー」と煽られたので3分で書く。代表的なライセンス改変部分のソースコードの開示が必要リンクして使う、他のソフトウェアのソースコード開示が必要GPL (コピーレフト型)○○LGPL /MPL (準コピーレフト型)○×BSDL / MITL (非コピーレフト型)××自作のソフトウェアをオープンソースで公開する場合、コピーレフト型にする場合は「GPLv2以... 続きを読む
MySQL用にランキング専用ストレージエンジンを作る話 - kazuhoのメモ置き場
前提: ゲームに限らずランキング機能が必要になるケースは多い つまり需要はある だが、MySQLで高速なランキング表示は難しい 具体的に言うと、以下の要件を満たすのが不可能 1行の更新コストが要素数Nに対して O(log N) 以下任意のランキング位置周辺のSELECTコストが O(log N) 以下 ならば、専用のストレージエンジンを作ればいいのではないかいつやるの? 今でしょ! 以下理由MyS... 続きを読む
巨大な bookmarklet を信頼できる形で配布する方法 - kazuhoのメモ置き場
Twitter で聞いてみたところ @hasegawayosuke さんいわく、Bookmarklet の文字数制限は最短だと約2,000文字らしいです。でも、その長さで bookmarklet を書くのって難しいですよね。かといって、別のサーバから JavaScript をダウンロードして実行するとなると、そのダウンロードされたスクリプトが安全か、という問題が出てきます。ならば、暗号学的ハッシュ... 続きを読む
本番環境でのperl/ruby/nodeのセットアップ - tagomorisのメモ置き場
本番環境にperlとかrubyとかnodeを入れるんだけど、もちろん system perl じゃやってられないので指定したバージョンのものを一般ユーザの管理下に突っ込みたい。で、そういうのをこれまで perlbrew とか rvm とか rbenv とか nvm とか nodebrew とかでやってたんだけど、さすがに色々疑問が湧いてきた。バッチで単発実行するために eval "$(rbenv ... 続きを読む
なぜPHPでrequire("http://...")したらセキュリティホールなのに、Goならいいのか - kazuhoのメモ置き場
go言語なんか import "http://github.com/mattn/xxx " だったりする。rubyもそういうの面白いかもしれない。require "http://github.com/mattn/xxx "みたいな。Twitter / mattn_jp: go言語なんか import ...@mattn_jp それコンパイル型言語なら許されるけどスクリプト型だとセキュリティホールと... 続きを読む
LTSV のもうひとつのメリット、あるいは、プログラムでログを出力する際に気をつけるべきこと - kazuhoのメモ置き場
Labeled Tab-separated Values (LTSV) がブームのようです。LTSV については、ラベルをつけることで柔軟に拡張できるという点が、その特徴として取り上げられますが、もう一点、タブをセパレータに使うことでログのパースが簡単になった、という点を忘れるべきではないでしょう。特に httpd のログは NCSA httpd という HTTP/0.9 時代のWebサーバのログ... 続きを読む
Mac OS Xで、再起動せずにスワップを解放する方法 - kazuhoのメモ置き場
Mac を使っていて、だんだん動きがもっさりしてきたなー*1と思って /private/var/vm/ 下を見ると、案の定スワップファイルが溜まっていることがある。こういうケースでの対策としては、・スワップ禁止にする、・/usr/sbin/purgeする、・再起動する、といった手があるけど、スワップ禁止にするのは本当にメモリ不足になる可能性を考えると怖いし、purgeはスワップアウトしたデータを回... 続きを読む
Xcode を使わずに iOS 向けのコードをコンパイルする方法 - kazuhoのメモ置き場
# armv7 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -arch armv7 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Develo... 続きを読む
JavaScript(V8)で避けるべき(だった)クロージャの使い方 - kazuhoのメモ置き場
Grokking V8 closures for fun (and profit?) に、ほんの少しだけ触れられている話なんですが。ごく最近まで V8 には、オブジェクトリテラルの中で関数リテラルを使った場合に非常に遅くなる(というかGCが多発する)問題があった。たとえば、 function doit() { for (var i = 0; i < 1000; ++i) { for (var j ... 続きを読む
尊重されたいすべてのソフトウェアエンジニアへ - tagomorisのメモ置き場
自分はソフトウェアエンジニアとして毎日の糧を得ている。今のところはサラリーマンエンジニア以外の存在になる予定はない、が、とはいえ唯々諾々とつまんない仕事ばっかりやる毎日はできればごめんだと思っている。コードを書くのは楽しいからコードを書ける仕事をしたいし、特に面白い問題やまだ誰も手をつけてなさそうな問題を解決する仕事ができれば最高だ。つまり、そう、尊重されたい。自分のやれること、やりたいことを尊重... 続きを読む
JSX はなぜ「速い」のか - kazuhoのメモ置き場
なぜ「速い」のか、について JSX 開発者の立場から。シューティングゲームで一番重たい処理は何か。言うまでもなく衝突判定。多数の弾や敵機の衝突判定を毎フレームごとに行う必要があり、この演算が重たい。JSX に同梱されている web/example/shooting.jsx には衝突判定のコードが複数あるが、一番重たいのは Bullet#update 関数で、その処理は以下のようになっている*1。 ... 続きを読む
node.js におけるエラー処理のコーディングパターン (もしくは非同期 JavaScript における例外処理) - kazuhoのメモ置き場
node.js を代表とする JavaScript を用いた非同期プログラミング環境においては、コーディングパターンのベストプラクティスが共有されておらず、結果として品質の低いコードが多くなるという問題があるように思います。そこで、特にエラー処理をどう書くべきか、既存のライブラリを使う方法を紹介してみることにしました。いきなりですが、ファイルの文字数を返す関数を作ることを考えてみます。Java だ... 続きを読む
C++ のヘッダファイルを #include するだけで使える GC 書いてみた - kazuhoのメモ置き場
そういえば C++ のヘッダファイルを #include するだけで使える GC を書きました。使い方は下のサンプルコードを見てもらえばいいとして、特徴としては、 ヘッダファイルを #include するだけで使えるC++ の標準機能だけを使っているのでポータブル*1 mark-and-sweep, precise GCってなあたりでしょうか。コードは kazuho/picogc ? GitHub... 続きを読む
#fluentd のためのプラグインをイチから書く手順(bundler版) - tagomorisのメモ置き場
fluent前に自分で書いた fluentdのためのプラグインをイチから書く手順 - tagomorisのメモ置き場 はたいへん重宝していたのだが、書いたすこし後になって実は現在すでに bundle gem コマンドを使うやりかたが良さそうだということがわかってしまったがばたばたしてて移行してなかった。で、またひとつプラグインを書くことにしたのでついでに bundle を使った手順をざっくりまとめ... 続きを読む
UserAgent判定器 Project Woothee はじめました - tagomorisのメモ置き場
UserAgent判定ライブラリはCPANに数多くあるし他の言語でも似たようなものだと思うが、ライブラリや言語をまたがって一致した結果を返してくれるようなものは存在しない(と思う)。が、特にHadoopを使うようになってJavaの事情をある程度無視できなくなってくると、これがたいへん問題に思えてきた。Javaで書かれたUserAgent判定ロジックが欲しいが、普段書くコードはJavaではない*1の... 続きを読む
fluentd のベンチマークとってみたよ! - tagomorisのメモ置き場
fluent入出力プラグインをrubyで書けるのがじつにいい感じの fluentd がいい感じに見える。fluent/fluentd - GitHubので使えるかどうか、使えるとしたらどれくらいのノードを用意すればいいのかについて考えるため、とりあえずベンチマークをとってみた。結論以下非常に長くなるので結論だけ書くと、大変使える感じ。現状だとほとんど何も考えずにデータ中継させても秒間1万メッセージ... 続きを読む