タグ hnw
人気順 10 users 50 users 100 users 500 users 1000 usersPHPとPythonとRubyの連想配列のデータ構造が同時期に同じ方針で性能改善されてた話 - hnwの日記
PHPとPythonとRubyの連想配列のデータ構造がそれぞれ4〜5年ほど前に見直され、ベンチマークテストによっては倍以上速くなったということがありました。具体的には以下のバージョンで実装の大変更がありました。 PHP 7.0.0 HashTable高速化 (2015/11) Python 3.6.0 dictobject高速化 (2016/12) Ruby 2.4.0 st_table高速化... 続きを読む
Raspberry Pi の Wi-Fi パワーマネジメントモードについて調べた - hnwの日記
さいきんRaspberry Pi 4を買ったんですが、Wi-Fiだけで運用したときにRaspberry Piへのアクセスがイマイチ不安定、ということがありました。ネットの情報を調べるとLinuxの無線ネットワークの「パワーマネジメントモード」をオフにすれば平和になるような話が見つかるんですが、その挙動を解説した記事が見つからなかっ... 続きを読む
ユニットバスの天井裏に備え付けのL2スイッチを発見した話 - hnwの日記
私は同じ賃貸住宅に10年ほど済んでいるのですが、ごく最近になって自宅内に備え付けのL2スイッチが存在することに気づきました。ソイツはなんとユニットバスの天井裏にいたのです。 このスイッチをGbEスイッチにリプレースしたところ、自宅のコンピューティング環境を改善することができました。本稿ではその顛末を紹介... 続きを読む
PHP7から定数配列がOPcacheに乗るので巨大配列が使い放題という話 - hnwの日記
PHP 7.0のリリースから約5年が経過し、そろそろPHP 8.0のリリースも見えてきました。人によっては使い始めて5年目になるはずのPHP 7.xですが、いまだに新しい発見があったりして面白いですね。 本稿ではPHP 7.0から入った定数配列に関する性能改善について紹介します。 PHP 5時代は配列の組み立てコストが大きかった プ... 続きを読む
date-holidays という祝日ライブラリが良い意味で狂っていた - hnwの日記
世界には色々なマニアがいるなーという話を紹介します。 先日Node.jsで使える祝日ライブラリを探していたところ、複数の国や地域の祝日に対応しているライブラリ date-holidays を見つけました。 commenthol/date-holidays: worldwide holidays このライブラリは本稿執筆時点で143ヶ国379地域の祝日に対応しています。こ... 続きを読む
GAE/SE PHP 7.2環境は実用性が高そうだという話 - hnwの日記
筆者の周囲だけかもしれませんが、さいきんGoogle App Engine Standard Environment(以下GAE/SE)が再注目されつつあるように思います。今回筆者もgVisorベースのGAE/SE PHP 7.2環境に触ってみたので、その内容を紹介します。 GAE/SEとは GAE/SEは元祖PaaSとも言えるような、Googleが提供するフルマネージド環境です。... 続きを読む
セキュリティの話題に丸腰で踏み込んでくる人を見た - hnwの日記
Qiita上で「 ゲームでよくされるチート手法とその対策 〜アプリケーションハッキング編〜 」という記事がいいね数を集めているようですが、全セクションにツッコミどころがあるような印象です。私はセキュリティ本職というわけではありませんが、素人の私から見てもひどいと思ったところだけ個別にツッコミを入れてみます。 念のため補足しておくと、誰であろうと情報発信すること自体は大変良いことです。ただ、誤りを含... 続きを読む
PHPメソッドのprototypeとは何か - hnwの日記
なんとなくPHPマニュアルを眺めていたところ、リフレクション機能に下記のようなメソッドを見つけました。 ReflectionMethod::getPrototype — メソッドのプロトタイプを (存在すれば) 取得する http://php.net/manual/ja/reflectionmethod.getprototype.php 特定のメソッドについて、「プロトタイプ」の情報を返してくれる... 続きを読む
Mackerelで家庭内ネットストーカーシステムを作ってみた - hnwの日記
本エントリは Mackerel Advent Calendar 2017 の23日目の記事です。 自宅の無線LANの利用状況をMackerelで監視するようにしたところ、予想以上にキモい仕組みができました。たとえば、家族の誰か(正確には誰かのスマートフォン)が外出するとSlackに通知を飛ばすことができます。 同じことをしている人は多くないと思うので、その知見を紹介します。 システム概要 まずは我... 続きを読む
MySQLのFLOAT型を使う理由が見つからない件 - hnwの日記
MySQLのデータ型としてFLOAT型という型があるのですが、これを採用するのは混乱の元ではないか?と感じたので、その詳細を紹介します。 そもそもこの話のきっかけは「 MySQLで6桁までの小数点を丸めずに扱うならFLOAT型を使うべき理由 」という記事が目に止まったことです。それなりに人気を集めている記事のようですが、私の読んだ限りではFLOAT型を使うだけの根拠が文中から読み取れず、さらに類似... 続きを読む
php-timecopをPECLに登録しました - hnwの日記
かれこれ5年ほどメンテしている拙作のPHP拡張「 php-timecop 」ですが、このたびPECLに登録しました( PECL :: Package :: timecop )。 PECLというのはPHP本体に含まれないPHP拡張を提供する公式のリポジトリです。PECLのアカウントは承認制になっており、誰でも登録できるわけではありません。イタズラやお試しでの登録は減るでしょうが、代わりに登録への精神... 続きを読む
PHPの連想配列は常にin_arrayより速いのか - hnwの日記
プログラムを書いていると、入力値が辞書に含まれているかを調べたいようなことがあります。たとえば、ユーザーに都道府県名を入力させて、それが正しい都道府県名であるかどうかを調べたい、というようなことがあるかもしれません。 このような内容をPHPで書く際、キーに都道府県名を持つような連想配列を作る習慣がある人は多いはずです。これは典型的な連想配列の使い方といえるでしょう。 $ prefs = array... 続きを読む
ポートノッキングで10秒間だけsshdを公開する設定 - hnwの日記
先日Twitterに次のような書き込みをしたところ思ったより反応が良かったので、詳細の設定を紹介します。 UDP53番、TCP443番、UDP123番とポートノッキングをするとTCP443番に10秒だけsshdが現れる、という中二病全開の設定をした。皆様にもお勧めしたい。 — hnw (@hnw) 2017年3月26日 といっても特殊なことをしたわけではなく、knockdでポートノッキングの設定を... 続きを読む
PHPの全バージョンの挙動をApacheモジュールとして試す | 徳丸浩の日記
この投稿は PHP Advent Calendar 2016 の16日目の記事です。 エグゼクティブサマリ PHPのバージョン間の挙動の違いを調査するツールとして、 @hnw によるphpallや、それを改造したphpcgiallがあったが、現実のPHPの利用環境とは違いがあり、検証の妨げになる場合があった。このため、PHPのバージョン毎にApacheを異なるポートで動かすことにより、全てのバージ... 続きを読む
第七回闇PHP勉強会でrealpathキャッシュとデプロイの話をしました - hnwの日記
昨日12月11日に 第七回闇PHP勉強会 を開催いたしました。私を含め発表者6人ということで、とても盛り上がった勉強会になりました。発表者の皆さま、またご参加いただいた皆さま、本当にありがとうございました。また会場提供いただいたピクシブ株式会社さまにも大変お世話になりました。 以下が私の発表資料です。 PHPアプリケーションをsymlink切り替えでデプロイしているとrealpathキャッシュ絡み... 続きを読む
PHPにおけるシンボリックリンクを使ったデプロイの危険性について(「realpath_cache」和訳) : KLabGames Tech Blog
この文書は @julienPauli さんによる記事「 realpath_cache 」の日本語翻訳です。元々は @gilbite さんがKLab社内向けに翻訳したものでしたが、日本語では見たことがない指摘を含んでおり今でも有用だと考えたため、@julienPauliさんの了解を取った上で @hnw が修正・追記して公開するものです。 はじめに PHP に realpath_cache_get()... 続きを読む
PHPプログラムを書いたらマイナス21億行目あたりでエラーが出た - hnwの日記
毎度おなじみ、意図的に重箱の隅をつついてみたよって話です。あるPHPプログラムを実行したら次のようなエラーに遭遇しました。 $ php over-2g-lines.php int(0) PHP Fatal error: Uncaught Error: Call to undefined function var____dump() in /Users/hnw/over-2g-lines.php:2... 続きを読む
PHPのround関数とは一体なんだったのか - hnwの日記
PHPのround関数について、ネット上で次のような記述を見つけました。 PHP 四捨五入の計算を間違える唯一の言語として畏れられていましたが、そのバグは治っているかもしれません(治ってないかもしれません) 主要なプログラミング言語8種をぐったり解説 - 鍋あり谷あり 各言語を面白おかしく紹介する内容とはいえ、ずいぶん雑な理解だなーという印象です。ゆるふわな話だけでPHPがdisられ続けるのもどう... 続きを読む
PHP7からstrlen関数に特化した高速化が採用された - hnwの日記
みなさん、もうPHP7は試してみましたか? PHP7のセールスポイントと言えば高速化ですよね。その高速化ですが、個人的には「そこ速くする余地あったの?」と思えるような箇所が高速化されていたりします。本稿では、そうした意外な高速化ポイントの一つとして strlen 関数に関する高速化について紹介します。 strlen関数と最適化 念のため説明しておきますと、 strlen 関数というのは文字列の長さ... 続きを読む
PHP7から文字列の無駄なコピーが減った話 - hnwの日記
このエントリは 闇PHP Advent Calendar 2015 の14日目です。 本稿では、PHP7の zend_string 構造体導入によるメリットの話をします。 PHP5とPHP7の文字列型の扱い PHP5では、文字列型の変数は次のようにメモリに割り当てられます(横幅いっぱいが8バイト)。 一方、PHP7では次のようになります。 これだけ見ると、PHP7では参照カウンタ refconun... 続きを読む
GoでPHP拡張モジュールを書いた話 - hnwの日記
12/6のGo Conference 2015 WinterでGoでPHP拡張モジュールを書いたよ、という内容のLTをしてきました。 ざっくり言うと、Goって言ってもCのレベルに落ちてくれば連携なんて簡単でしょって思ってたけど、GoもPHP拡張もビルドプロセスが隠蔽されてるので、落としどころが見つからなくて苦労したよって話でした。もっと綺麗に連携できる方法を編み出した方は教えてください。 PHP拡... 続きを読む
PHPのインターン化文字列とは何か - hnwの日記
このエントリは闇PHP Advent Calendar 2015の3日目です。なぜか@do_akiさんによる4日目の記事「ZEND_TICKS と tick 関数」を読んだ後で書いています。 本稿では、あまり日本語での説明を見たことがないPHPのインターン化文字列(interned strings)について紹介します。 文字列のインターン化とは文字列のインターン化というのは多くのプログラミング言語... 続きを読む
php-buildが便利だという話を補足します - hnwの日記
php-buildについて、先日のPHP BLT #1で下記のようなLTをしました(発表時のものに追記してあります)。 とはいえプレゼンだけでは伝わらない内容もあったと思うので、補足する内容を書きます。 独自のdefinitionファイルをどう作るかphp-buildでは独自のdefinitionファイルを作れるのが便利です。僕は下記のような内容で~/.phpenv/plugins/php-bui... 続きを読む
第六回闇PHP勉強会の発表資料まとめ - hnwの日記
昨日11/22(日)に第六回闇PHP勉強会が開催されました。PHPの勉強会なのにPHPのコードが全部で10行も登場しないという毎度おなじみの展開でしたが、たくさんの方にご参加頂きました。本当にありがとうございました。 では、発表を順に紹介します。 @hnw 「OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた」 まずは僕の発表からでした。PHP7からの新機能であるOPcacheの... 続きを読む
OPcacheの新機能 ファイルベースキャッシュの内部実装を読んでみた
OPcacheの新機能 ファイルベースキャッシュの内部実装を読んでみた 1. Reading implementation of OPcache’s file-based cache OPcacheの新機能 ファイルベースキャッシュ の内部実装を読んでみた 第六回闇PHP勉強会(2015/11/22) 発表資料 2. 自己紹介 ❖ @hnw ❖ 所属:KLab株式会社 ❖ カレーとバグが大好物 ... 続きを読む