hnwの日記

GS105EとMacOSXでTagged VLAN設定

やや変則的なネットワークを組むのに、VLANが使える手頃なL2スイッチGS105Eを利用してみました。その手順を紹介します。 要件 有線LAN接続した端末Aの通信内容を、任意のタイミングでパケットキャプチャしたい パケットキャプチャはMacbook Airで行いたい 端…

CloudFlareで運用中の独自ドメインをダイナミックDNSとして利用する

CloudFlareといえば無料CDNサービスが有名ですが、高機能な無料DNSサービスも提供しています。筆者は趣味で独自ドメインを管理しており、以前はRoute53を使っていたのですが、昨年の2月からCloudFlareを利用しています(参考:「CloudFlareのCNAME Flattenin…

2015年をふりかえる

年末なので今年のふりかえりを書きます。基本的には自分用エントリなんですが、何かの参考になれば。 書いた 2015年ははてなダイアリーに本記事を含め31本の記事を書きました。人気があったのは下記の記事です。 Javaで書かれたPHP処理系のJPHPが高速だった …

PHP7からstrlen関数に特化した高速化が採用された

PHP

(2016/01/01 02:20追記)mbstring.func_overloadの章を盛大に書き換えました。なぜか廃止されたと思い込んでたんですが、特に廃止もされてなくて、PHP 7でも動くことは動きます。ただ、仕組み上strlenだけ言うことを聞かなくなっていますので、使い道として…

PHP起動時からインターン化されている文字列がどれくらいあるのか

PHP

このエントリは闇PHP Advent Calendar 2015の23日目です。 先日の記事「PHPのインターン化文字列とは何か」でインターン化文字列について紹介しましたが、記事だけでは実際にどう使われているかピンと来なかった方も多かったかもしれません。今回、PHP 7.0.1…

PHP7から文字列の無駄なコピーが減った話

PHP

このエントリは闇PHP Advent Calendar 2015の14日目です。 本稿では、PHP7のzend_string構造体導入によるメリットの話をします。 PHP5とPHP7の文字列型の扱い PHP5では、文字列型の変数は次のようにメモリに割り当てられます(横幅いっぱいが8バイト)。 文…

PHPの文字列まわりを調べるための拡張モジュールを作ってみた

PHP

このエントリは闇PHP Advent Calendar 2015の11日目です。 strdumperというPHP拡張モジュールを作りました。 現時点では、この拡張モジュールは下記の3つの関数を実装しています。 str_dump void str_dump(mixed $var) $varが文字列型だった場合に、詳細の情…

GoでPHP拡張モジュールを書いた話

PHP

12/6のGo Conference 2015 WinterでGoでPHP拡張モジュールを書いたよ、という内容のLTをしてきました。 ざっくり言うと、Goって言ってもCのレベルに落ちてくれば連携なんて簡単でしょって思ってたけど、GoもPHP拡張もビルドプロセスが隠蔽されてるので、落と…

PHPのインターン化文字列とは何か

PHP

このエントリは闇PHP Advent Calendar 2015の3日目です。なぜか@do_akiさんによる4日目の記事「ZEND_TICKS と tick 関数」を読んだ後で書いています。 本稿では、あまり日本語での説明を見たことがないPHPのインターン化文字列(interned strings)について紹…

+演算子の挙動がJavaScriptっぽくなるPHP拡張モジュールを書いてみた

PHP

このエントリは闇PHP Advent Calendar 2015の2日目です。3日目までは僕が書く予定ですが、4日目以降の援軍を絶賛募集中です。 PHPの+演算子で文字列連結できないか? PHPの+演算子は算術加算の演算子です。つまり、オペランドを整数または浮動小数点数として…

拡張モジュール作者だけが知っているPHPのconfigureオプション

PHP

このエントリは闇PHP Advent Calendar 2015の1日目です。ここでの「闇PHP」はPHPのC言語レイヤの話題という意味で使っています。 そもそも、このAdvent Calendarは第六回闇PHP勉強会を開催する直前の変なテンションで作られたものです。25枠全部が埋まるとは…

php-buildが便利だという話を補足します

PHP

php-buildについて、先日のPHP BLT #1で下記のようなLTをしました(発表時のものに追記してあります)。 とはいえプレゼンだけでは伝わらない内容もあったと思うので、補足する内容を書きます。 独自のdefinitionファイルをどう作るか php-buildでは独自のde…

第六回闇PHP勉強会の発表資料まとめ

PHP

昨日11/22(日)に第六回闇PHP勉強会が開催されました。PHPの勉強会なのにPHPのコードが全部で10行も登場しないという毎度おなじみの展開でしたが、たくさんの方にご参加頂きました。本当にありがとうございました。 では、発表を順に紹介します。 @hnw 「OPca…

11/22に第六回闇PHP勉強会を開催します&発表者募集中です

PHP

先日、闇PHP勉強会を立ち上げたanatooさんから勉強会の幹事を引き継ぎました!僕自身が非常に楽しみにしていた勉強会だったので気軽に幹事を引き受けたものの、勉強会をメインで仕切るのは初めてなのでドタバタしているところです。そんなこんなで、まずは11…

MacOSX上のPHP 7.0.0RC5+OPcacheでエラーが出る件の対策

PHP

MacOSX環境でPHP 7.0.0RC5をビルドしてphpコマンドを動かしたところ、下記のようなエラーが出ました。 dyld: lazy symbol binding failed: Symbol not found: _accel_move_code_to_huge_pages Referenced from: /Users/hnw/.phpenv/versions/7.0.0RC5/lib/ph…

第94回PHP勉強会で拡張モジュールのPHP7対応について発表しました

PHP

10月1日に開催された第94回PHP勉強会で発表してきました。以下が発表資料です。 内容としては、PHP拡張モジュールのPHP7対応を独自調査してみたよ、というものです。「Extensions Catalog」と重複する部分もあるのですが、対応済みのはずがPHP7の最新RCだと…

Language Update PHP編(LL Ring Recursive補足)

PHP

昨日9/5にLL Ring Recursiveの「Language Update」で登壇(リングイン)してきました。毎回他の言語の近況が聞けるので観客として楽しみなコンテンツという印象ですが、いざ自分が発表者側に立つと大したことが言えなかった気がして一人反省会中です。 とい…

Developers Summit 2015 KANSAIでもPHP7について発表してきました

PHP

9/4に神戸で開催されたDevelopers Summit 2015 KANSAIにて登壇いたしました。発表資料は以下になります。 PHPカンファレンス関西2015でも近い内容でお話ししたのですが、そのときは性能改善まわりの情報を十分に伝えられなかった、という反省がありました。…

初回のコミットをgit rebaseで修正する方法

gitを使っていると、直前の数commitを1コミットにまとめたくなることがあります。そんなときは「git rebase -i」が便利です。 $ git log --pretty=oneline dc561dbe3e149310246384a64ea816c46514ce1b Modified 3 bd271250523c06c1e5fe325c8347aa8fb7509692 M…

PHP勉強会10年の歴史をふりかえる

PHP勉強会@東京が今月で10周年の節目ということで、大変めでたいですね。僕にとっては初めて参加・発表した社外勉強会だったこともあり、不思議な感慨があったりします。 そこで、ふと思いついてPHP勉強会の10年を表形式でまとめてみました。古参の人が懐古…

Raspberry PiのGPIOは起動直後から内部プルダウンされている

Raspberry Piで電子工作をするときの話題です。Raspberry PiにはGPIOと呼ばれる電子工作に使う端子が出ています。これらのGPIO端子は「プルアップ抵抗」「プルダウン抵抗」の2つを内蔵しており、ソフトウェアから有効・無効を切り替えることができます。ちな…

PHPカンファレンス関西2015でPHP7について発表してきました

PHP

去る5/30にPHPカンファレンス関西2015で基調講演をさせていただきました。今回は長い枠だったのもあって資料準備にかなりの時間をかけました。その甲斐あってか、好評だったようで何よりです。発表資料は以下になります。 質疑応答やその他の反応について補…

PHP7で変わること

PHP

次の土曜日5/30のPHPカンファレンス関西2015で基調講演(10:30-11:15)をさせて頂くことになりました。タイトルは「PHP7で変わること——言語仕様とエンジンの改善ポイント」です。チケットは既に売り切れているそうですが、参加者の方は早起きして来て頂ける…

PHPで巨大な整数をカンマ区切りするのにnumber_format関数は使えない

PHP

PHPには、数値を3桁区切りで表示するための組み込み関数としてnumber_format()が用意されています。 number_format — 数字を千位毎にグループ化してフォーマットする string number_format ( float $number [, int $decimals = 0 ] ) http://php.net/manual/…

PHPのJSONライセンス問題が一応決着

PHP

2012年頃に、PHPのJSONエクステンションのソースコード中に次のようなライセンス文言が含まれていると話題になりました。 The Software shall be used for Good, not Evil. これはJSONライセンスと呼ばれるライセンスの一文です。「このソフトウェアを良いこ…

PHP 5.4.0から無限大==無限大になってた

PHP

本日はエイプリルフールなので、嘘でも本当でも誰も困らないネタを紹介します。 内容としてはタイトルの通りで、浮動小数点数の無限大とマイナス無限大に関する==の挙動がPHP 5.3.xまでとPHP 5.4.0以降で変わっていたという話題です。 $ php-5.3.29 -r '$x=I…

マルチブート環境の全OSで同じBluetoothデバイスを使う

マルチブート環境(デュアルブート・トリプルブートなど)でBluetoothデバイスを使う際の話題です。 Bluetoothデバイスを利用する際は通常「ペアリング」という作業が必要です。これは、初回接続時に128bitのリンクキーを発行して両者で共有し、通信相手のBD…

例示のためのMACアドレス

「例として推奨されているドメイン名とIPアドレス - あどけない話」に、例示のためのドメイン名とIPアドレスが紹介されています。お役立ち情報ですね。 ところで、MACアドレスを例示したい場合はどうすればいいのでしょうか。答えがRFC7042に載っていたので…

CloudFlareのCNAME FlatteningをGitHub Pagesで使ってみた

(03/04 08:15 追記)今回のDNS設定変更でGitHub Pagesで提供しているCDNが使えるようになったことを追記しました。今回はDNS方面の話題です。僕ははてなダイアリー以外にhttp://hnw.jp/という古めかしいサイトも管理しています。サイトの実体はGitHub Pagesで…

江戸前セキュリティ勉強会でgithub.comの弱い鍵を探す話をしました

先週1/24(土)に江戸前セキュリティ勉強会で「偶然にも500万個のSSH公開鍵を手に入れた俺たちは」というタイトルでLT発表してきました。以下が発表資料です。 このプレゼン資料はLT用に圧縮して作ったので、わかりにくい部分があったかもしれません。そこで、…