hnwの日記

2014-01-01から1年間の記事一覧

2014年をふりかえる

年末なので今年のふりかえりを書きます。基本的には自分用エントリなんですが、何かの参考になれば。 書いた 2014年ははてなダイアリーに本記事を含め30本の記事を書きました。人気があったのは下記の記事です。 GitHubユーザーのSSH鍵6万個を調べてみた PHP…

PHPを高速化するRecki-CTとは一体何なのか

PHP

@ircmaxellさん作の「Recki-CT」を試してみたので紹介します。作者によるブログ記事「ircmaxell's blog: Introducing Recki-CT」によれば処理によってはHHVMやHippy VMより速いらしいのですが、この記事だけでは詳細がよくわからずモヤモヤしていました。今…

PHPのlibjitバインディングであるJIT-Fuを試してみた

PHP

@krakjoeさんが作っているPHPエクステンションのJIT-Fuを試してみました。これはGNUのJITコンパイラライブラリlibjitをPHPから使うためのものです。 インストール READMEの「Installation Instructions」に書いてある通りにlibjitとJIT-Fuをインストールしま…

第85回PHP勉強会でPHP7について発表してきました

PHP

12月24日に開催された第85回PHP勉強会で発表してきました。以下が発表資料です。 プレゼンの内容としては以前の記事「PHP7はなぜ速いのか(zval編)」の補足説明と、zend_stringとHashTableの改善について紹介するようなものでした。 僕自身まだ理解不足のと…

PHPPHPがド変態であることに今さら気づいた

PHP

Anthony Ferraraさん(@ircmaxell)が2012年12月に公開したPHPで記述されたPHP実装「PHPPHP」について、今さらですが調べてみました。 @ircmaxellさんはPHPの内部構造についての解説サイト「PHP Internals Book」の筆者の一人であり、PHP 5.5で導入された新…

整数型のコピーオンライトは本当に遅いのか実験してみた

PHP

前回記事「PHP7はなぜ速いのか(zval編)」ではPHP7から内部的なデータ構造が大きく変わるという話題に触れました。具体的には、PHP5では全ての型の変数についてコピーオンライト方式を採用していたこと、この方式はデータサイズが大きいときに有効であるこ…

PHP7はなぜ速いのか(zval編)

PHP

この記事はPHP Advent Calendar 2014の7日目です。 僕は先日のPHPカンファレンス2014でPHP7に関するLTをしました(参照:「PHPNGの動向」)。ただ、時間が限られていたこともあり、あまり踏み込んだ内容には触れませんでした。 本稿ではLTの内容から深掘りし…

PHP 5.5.0でイースターエッグが廃止されていた

PHP

PHPユーザーの皆様に悲しい(?)お知らせです。PHPのオシャレ機能として有名なイースターエッグがPHP 5.5.0で廃止されていました。 そもそもPHPのイースターエッグって何よ?という方のために説明しておくと、PHP 5.4までは任意のPHPページのURL末尾に特定の文…

HHVM 3.3.1とPHP 5.6.2の==の違いを調べてみた

PHP

(11/15 16:15追記)本稿で指摘している違いの1件目についてバグレポを書いたところ、すぐ直すよーとのことでした。(11/18 17:30追記)上記修正がmasterブランチに取り込まれていることを確認しました。 PHPのJITコンパイラ実装であるHHVMが最近話題ですね…

APCuは速いけど初期設定がイマイチだというお話

PHP

ISUCON本戦で惨敗してきた皆さんこんにちは。昨日のやけ酒は最高でしたね!今日はISUCON予選のときに気づいたAPCuのイマイチな点を紹介します。 APCuというのはPHP extensionで実装されているKVS(Key Value Store)で、localhost内でのデータキャッシュに利…

PHP7で導入予定の新しいメモリマネージャをPHP5.6にバックポートした

PHP

現在、PHPの開発ブランチでは次期バージョンであるPHP7.0の開発が進められています。この新バージョンでは内部のリファクタリングと性能改善に重点が置かれるとみられており、言語仕様の観点ではメジャーバージョンアップの割に変化の小さいバージョンになり…

GitHub ユーザーの ID 900万件を公開しました

https://github.com/hnw/github-login-idsで、GitHubユーザー/オーガナイゼーションのID約900万件を含んだCSVファイルを公開しました。 これはGitHub APIを使えば誰でも入手できる情報ですが、全部取得しようと思うと丸一日かかるので*1、公開しておくことは…

PHPカンファレンス2014でPHPNGのLT発表をしてきました

PHP

(12/4 追記)「さらに深掘りしたい方のために」の内容が嘘だったので書き直しました。immutableがどうこうと書いていたのですが、完全に勘違いしていました。 10月11日に開催されたPHPカンファレンス2014でLT発表してきました。以下が発表資料です。 5分で…

PHPでAPC/APCuのCAS機能を使うときの注意点

PHP

PHPのAPC/APCuエクステンションをKVSとして使うときの話題です。 APC/APCuにはCAS(楽観ロックに基づくアトミックな値の書き換え)の関数として次の3つが用意されています。 apc_cas ― 古い値を新しい値に更新する apc_inc ― 保存した数値を増やす apc_dec ―…

PHPでHTTPの並行ダウンロードを実現する(Guzzle編)

PHP

PHPで最近注目のHTTPクライアントライブラリにGuzzleがあります。日本での知名度はまだまだという印象ですが、かなり高機能かつ真面目にメンテナンスされている印象で、今後のデファクトスタンダードになりうるライブラリと言えるでしょう。 本稿ではこのGuz…

PHP 5.4.4から==の挙動が一段と難しくなりました

PHP

PHPの==は両辺を適当に型キャストしてから比較するような演算子です。この型キャストの規則は難解すぎる上にドキュメントも不十分なため、PHPプログラマでも完璧に理解している人はほとんど居ないくらいの印象です。バグの原因になりかねないため、なるべく=…

GitHubユーザーのSSH鍵6万個を調べてみた

(2015/1/30 追記)時期は不明ですが、現時点のgithub.comはEd25519鍵にも対応しています。 (2016/5/31 追記)「GitHubにバグ報告して賞金$500を頂いた話」で紹介した通り、既に弱い鍵はGitHubから削除され、新規登録もできなくなっています。 GitHub APIを…

Console Componentを利用したメモ

PHP

Console Componentを使った感想を記録しておきます。雑なメモですが、どなたかの参考になれば。 Console Componentとは Console ComponentはPHPのコマンドラインアプリケーション用ライブラリです。コマンドラインオプション解析や、出力に簡単に色をつける…

RSA鍵の生成時に確率的素数判定法を使って問題ないのか

前回記事「RSA公開鍵から素数の積を取り出す方法」でも紹介しましたが、RSA鍵の生成には巨大な2つの素数p,qが必要です。近年一般的に使われている2048bit RSA鍵の場合、p,qの大きさは1024bit、10進で約308桁の数になります。このRSAのアルゴリズム中ではpとq…

RSA公開鍵から素数の積を取り出す方法

RSA暗号はHTTPSやSSHの通信で利用されている暗号化方式です。公開鍵として巨大な素数の積を交換しあって暗号に利用しており、この素因数分解が困難であることにより安全性が担保されています。このことは教科書にも載っているような内容で、ご存じの方も多い…

平方数かどうかを高速に判定する方法

平方数とは、ある整数の平方(=二乗)であるような整数のことを言います。つまり、0,1,4,9,16,...が平方数ということになります。 ところで、与えられた整数が平方数かどうかを判定するにはどうすれば良いでしょうか。与えられた整数の平方根の小数点以下を…

PHPで素数を数えて落ち着いてみた

PHP

2,3,5,7,11,13,...と素数を順に列挙することで落ち着く人が世の中にはいるようです(参考:「素数を数えて落ち着くんだ…」)。とはいえ人力では素数を100個列挙するのさえつらいので、プログラミング言語に頼った方が落ち着けるはずです。PHPには、そんな状…

AndroidアプリiSyncr for Macの最新版が2.5倍に値上げされた理由

(4/11 14:00追記)アプリの日本語説明が更新されましたので、誤解して買う危険性も減ったように感じています。記録として記事は消さずに残しておきます。 Mac+Androidという食い合わせの悪そうなデバイスを使っている皆様こんにちは。ところで音楽の管理って…

第五回闇PHP勉強会でzvalをダイエットする試みについて発表しました

PHP

3月15日に開催された第五回闇PHP勉強会で発表してきました。以下が発表資料です。 僕の発表では、PHPの変数1個に対応する構造体zvalが64bit環境では24byteになるけれども、これを16byteにしたらPHPの高速化・省メモリ化ができるんじゃないか、という試みを紹…

Monoで巨大な浮動小数点数を丸めたら無限大になった

Monoのround関数にバグを見つけたよ、という毎度おなじみの話題です。 早速ですが、浮動小数点数で扱える一番大きい数を浮動小数点数以下第2位で丸めて第1位までにしてみましょう。 using System; class RoundingBigFloat { static void Main() { double d =…

Emacsでスクリプトをセーブするときに勝手に実行権限をつける方法

Emacsでシェルスクリプトなどを書いているとき、ファイルセーブのタイミングでchmod u+xする方法を紹介します。実は「EmacsWiki: Making Scripts Executable On Save」の内容そのままです。 やり方は、init.elに下記のように書くだけです。 ;; スクリプトっ…

Emacs起動時に自分好みのelispを自動的にインストールする

(2015/04/27追記)Emacs24.4付属のpackage.elでは「野良elispをpackage-installする」が動かなくなっていました。中の人が想定してない使い方で頑張るより、必要なものはMELPAにぶっこんでいくスタイルの方が正しい気がしますね…。 自宅と会社など、複数環…

Emacsで一度開いたファイルのカーソル位置を覚えておく

タイトルの通りなんですが、init.elに下記のように書くと一度開いたファイルのカーソル位置を記憶し、再度開いたときに元のカーソル位置を復元してくれます。 ;; 以前開いたファイルを再度開いたとき、元のカーソル位置を復元する ;; http://www.emacswiki.o…

Mono環境のC#はdecimal型を正しく丸められない

Mono環境のC#において、decimal型リテラルもしくはdecimal型の演算中にdecimal型の精度を超えた場合に、最近接の数に丸められないバグと偶数丸めのはずが四捨五入になるバグを見つけました。 using System; class DecimalTest { static void Main() { decima…

C#のdecimalからdoubleへのキャストにバグを見つけた気がする

C#の丸めは基本的に偶数丸め(banker's rounding)だというのが僕の認識ですが、decimalの数をdoubleにキャストするときに四捨五入になる例がありました。また、.NET環境に限り最近接のdoubleに丸められない例も見つけました。 decimalからdoubleへのキャス…