ktat さんの記事を見て iPhone から試してみた zimt ってライブラリを見つけたので、それを使用。 esad さんの master だと WebSocket の draft75 の対応までしかないけど fork してるのだと draft76 にも対応してることがわかったので、そっちから clone してくる。 何個か fork してるのがあったけど mikebevz さんのが一番よさげだったのでそれを使用。 また簡単なチャットサーバーのサンプルも入ってる。
![objective-c で websocket クライアント](https://cdn-ak-scissors.b.st-hatena.com/image/square/2e7ddf537b1f59a1a4244a2cc7db1be8ce2b003a/height=288;version=1;width=512/http%3A%2F%2Fblog.dealforest.net%2Fwp-content%2Fuploads%2F2013%2F08%2Ficon.png)
ktat さんの記事を見て iPhone から試してみた zimt ってライブラリを見つけたので、それを使用。 esad さんの master だと WebSocket の draft75 の対応までしかないけど fork してるのだと draft76 にも対応してることがわかったので、そっちから clone してくる。 何個か fork してるのがあったけど mikebevz さんのが一番よさげだったのでそれを使用。 また簡単なチャットサーバーのサンプルも入ってる。
技術ブログ英語版をFAL Labsサイトの直下に移した。つか、英語の記事が全然読まれないので、日本語でも書く。 MapReduceを含むKyoto Cabinetのイテレータ群はシングルスレッドだということを、ioremap.netの中の人が嘆いていたのを私は見つけた。それは真実であり、私はその話題が非常に面白いと思う。私はハッシュデータベースの並列イテレータについて二つのモデルを考えた。 背景 マルチスレッドによる並列イテレータは、イテレータを異なるレコードに分散させるためのインデックスを必要とする。各イテレータの仕事量を平準化するには、イテレータの飛び先を各々ができるだけ離れるように設定するべきである。残念ながら、Kyoto Cabinetはそのようなユースケースのために設計されておらず、そういったインデックスは存在しない。しかしながら、ハッシュテーブルのバケット配列をインデックスの代
大震災の時分に何だが、Kyoto Cabinetベースで検索エンジンの核となる転置インデックスを作るのに適したDBを実装したという話。 転置インデックスとappend操作 多くの検索エンジンの核となる転置インデックスとは、検索語に一致する表現がどこに出てきたかという位置情報のリストを保持するものであり、検索語をキーとして位置情報リストを値とする連想配列である(転置インデックスを使わない検索エンジンもあるが)。この位置情報リストをposting listとか呼んだりするらしい。転置インデックスにもいくつか流儀があり、検索語をどのように切り分けるかで単語(分かち書き)方式とか文字N-gram方式とか呼ばれるものがあったりするが、いずれにせよ、小さいキーと、非常にでかい値を保持する連想配列を作ることには変わりない。 で、素朴に転置インデックスを作ろうとすると、検索対象の文書を解析しながら、得られ
最近はHDDだと、2TBの製品もだいぶ安くなったので人によってはRAID5やRAID6と組み合わせて、4TBや6TBの容量のパーティションを作成する機会も増えてきたかと思います。 私のメインPCも2TB * 3なRAID5を導入したので、そのときに行った手順のログです。 // 気がついたらHDDのアライメントについての記事になってしまいました。。 やること kernelの GPTを有効にする partedの導入 partedでパーティションを作成する 備考 GPTを有効にする カーネルのGPTのコンフィグを有効にします。自前でカーネルのコンフィグを変更してたら行ってください。 下記を有効にします。 File System -> Partition type -> Advanced partition selection -> EFI GUID Partition supportまた、上記付
ext4で問題となっているゼロレングス問題に対処するためのマウント方法です。 方法は、noauto_da_allocオプションを追加してマウントするだけです。 マウント方法 $sudo mount デバイス ターゲット -t ext4 -o noauto_da_alloc ゼロレングス問題(zero-length problem)とは 特定のファイル操作によりファイル置換が行われたのちに、システムが強制終了したなどが原因でsyncが完了していない状態で終了した場合に0バイトファイルになってしまうというものです。 特定のファイル操作とは、 fd = open("foo.new") write(fd,..) close(fd) rename("foo.new", "foo") などのパターン、あるいは fd = open("foo", O_TRUNC) write(fd,..) close(f
EXT4を用いて、SSDで用いられているTrimコマンドを使用するためのオプションです。 Trimコマンドを有効にする 方法は非常に簡単で、discardオプションをマウント時に渡すだけです。 mountコマンドでマウントする場合 $sudo mount /dev/sd[0-9]+ /mnt -t ext4 -o discard 他のオプションと組み合わせる 他、SSDに有効なオプションとして relatimeがあります。これは、必要な場合を除いてアクセス時間(ファイルを最後にオープンした時間)を更新しないものです。 mountコマンドでマウントする場合 $sudo mount /dev/sd[0-9]+ /mnt -t ext4 -o discard,relatime 備考 Trimコマンドとは、SSDに対して使用していた領域が不要になったことを明示するものです。 SSDはウェアリングと
hachiojipmに行ってきたのですが#4でも#5でもTestを書くのが難しいという声が聞こえたので「テストは書いてみると簡単」「テストがあると開発が楽」という事を伝えてみようと努力する試みです。 ということでサンプルコードを書いてみました。 https://github.com/okamuuu/Sample-Plack-Test 紹介するサンプルコードについて ここで紹介しているスクリプトはある男がBlogを作ろうと思ったがどうせたいしたことしないので俺俺WaFをつくってやろうとして実際にやったテスト駆動開発です。 おもむろにt/web.tとかつくってみる 最初にテストを書いてみましょう。 #!/usr/bin/env perl use strict; use warnings; use Test::Most; use Plack::Test; use HTTP::Request::C
ちまたではPHPのflush()を使ったWordPressのプラグインが話題のようですが、Webサイトの表示速度を改善したかったら、もう少しサイトの作り方を根っこから考えなおした方がいいんじゃないか?、と思いましてね…。 公開されているプラグインにどうこう言うつもりはなく、諸手を挙げて喜んでらっしゃる世間様の様子を見ながら「なんかなぁ…」「入れる前にできることあるんじゃないかな?」と。ちなみにボクも昔flush()での手法を試したことがあるんですけど、結局すぐやめちゃいました。 回線速度自体は昔に比べたら格段にあがってるのは事実ですが、いまとなっては環境としては比較的貧弱なスマートフォンみたいなデバイスも増えています。 サーバの負荷が気になるとか自分とこじゃできないなどの理由で、テキストデータをGzip化(データサイズが半分以下になる)しないのであれば、その他の部分でサイトの全体的な転送デ
Perlモジュールのバリデーターと呼ばれるジャンルのモジュールなどをバリデーションという観点ではなく、引数を明示するという観点から整理しました。 バリデーターの種類 バリデーターというものは、一般的に引数が期待される型など(整数か、文字列か、URLか、メアドか等)になっているかどうかをチェックするというものです。特に、Webアプリにおけるフォームから入力されるデータのチェックに活用されることが多いです。そういういった意味から、Perlのバリデーターモジュールはフォーム系と非フォーム系に分類することができます。 フォーム系のバリデーター等 FormValidator::Lite CPAN本にも紹介されている強力なフォームバリデーターです。フォームバリデーターとしては、フォームの型の定義、チェック、エラーメッセージの定義、が必要ですが、やりたいであろうことのだいたいがそろっているモジュールで実
ファイルの保存 ここまでいくつかの見落としがちな処理を見てきましたが、最後にどんなプログラマでも必ず行う「ファイルの保存」についての注意点を考察してみたいと思います。 ファイルを確実に書き込むためには、どのようなコードを書けばよいでしょうか。「fsync」を呼べばいい。それだけではありません。実際には、次の2点も必要になってきます。 (内容の差し替えだった場合に)書き換え途中の状態にならないこと ユーザに対して書き込み完了を返したあとは、ディスクがクラッシュしない限り、データが消えないこと UNIX系OSでこれらの要件を満たすには、まずテンポラリファイルに新しいデータを書いてディスクに同期し(①②)、(必要ならば)古いファイルをバックアップファイル名を使っても参照できるよう別名を付与し(③)、次にテンポラリファイルのファイル名を差し替え対象になっているファイルの名前に切り替え(
こんなんでいいかなぁ。その2。 forkじゃアレなんで、AnyEventで書いてみた(https://gist.github.com/1000223)。 追記: 以下、to_stringですが、Protocol-WebSocket-0.00906 では、Protocol::WebSocket::Handshake は to_bytes に変わっているようです。 #!/usr/bin/perl use utf8; use strict; use warnings; use AnyEvent; use Protocol::WebSocket::Frame; use Protocol::WebSocket::Handshake::Client; use IO::Socket; use constant {READ => 0, WRITE => 1}; $| = 1; run(); sub run
こんなんで良いかなぁ。 #!/usr/bin/perl use strict; use warnings; use POSIX ":sys_wait_h"; use Protocol::WebSocket::Handshake::Client; use Protocol::WebSocket::Frame; use IO::Socket; use open ':utf8'; use open ':std'; $| = 1; run(); sub run { my $s = IO::Socket::INET->new(PeerAddr => '127.0.0.1', PeerPort => 50000, Proto => 'tcp'); if ($s->connected) { my $hc = Protocol::WebSocket::Handshake::Client->new(url
5/25(水)に、サイバーエージェント様と勉強会を開催いたしました。 そのときにクックパッドエンジニアが使用した発表資料を公開いたしますので ぜひご覧くださいませ。 当日お忙しい中お集まりくださった皆様、Ustreamでご覧になった皆様、どうもありがとうございました! ●成田一生 [slideshare id=8150494&doc=20110525tofu-110530080429-phpapp02] ●菅原元気 [slideshare id=8120106&doc=random-110527001900-phpapp01] ●濱崎健吾 [slideshare id=8107056&doc=110525amepad-110526022442-phpapp02] Ustreamはこちらからご覧ください。 クックパッドでは、これからもこのようなイベントを不定期に開催予定です。 こちらのブログ
GC, Rubyどういうもの? GC.profile = true # 計測対象の処理 GC.display ってすると ---- 以下のプロファイル情報が出力される ----- GC 10 invokes. Index Use Size(byte) Total Size(byte) Total Object GC time(ms) 0 338620 360448 18018 0.00000000000000014129 1 605620 622592 31122 0.40010000000000001119 2 1080300 1097728 54873 0.00000000000000007657 3 1931420 1949696 97461 0.40000000000000018874 4 3470040 3489792 174447 0.4001000000000003442
「ニフティクラウドユーザーブログ」は、移転しました。 自動でページを移動しない場合は、下記のリンクをクリックし、 新しい「ニフティクラウドユーザーブログ」をご覧ください。 今後とも「ニフティクラウドユーザーブログ」をよろしくお願いいたします。 > ニフティクラウドユーザーブログ
「ニフティクラウドユーザーブログ」は、移転しました。 自動でページを移動しない場合は、下記のリンクをクリックし、 新しい「ニフティクラウドユーザーブログ」をご覧ください。 今後とも「ニフティクラウドユーザーブログ」をよろしくお願いいたします。 > ニフティクラウドユーザーブログ
Webアプリケーションの脆弱性を発見するフレームワーク「Web Application Attack and Audit Framework(w3af) 1.0」が公開された。SourceForgeのプロジェクトページよりダウンロードできる。 w3afはWebアプリケーションの脆弱性を発見したり、実際に脆弱性に対する攻撃を行うためのフレームワーク。開発者やセキュリティ研究者が、Webアプリケーションのセキュリティ検査やテストに利用することを想定している。プログラムはPythonで書かれており、GPLで公開されている。コアのほか、SQLインジェクション、クロスサイトスクリプティング(XXS)などをチェックできる130種以上のプラグインを持つ。 初の正式版では、コードの安定性、自動アップデートなどの特徴を持つ。クラッシュを最小限に抑え、常に最新機能を使えるという。 新機能としては、PHPの静的
Crowsnestは、誠に勝手ながら、このたびサービスの提供を終了させていただくこととなりました。 これまでご利用いただいた皆様には、ご迷惑をおかけすることを深くお詫びいたします。 2011年のサービス開始以来、Crowsnestをご愛顧いただき、ありがとうございました。
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く