読者です 読者をやめる 読者になる 読者になる

脳みそスワップアウト

揮発性なもので。おもにPHPのこととか。

TLSバージョンを指定して接続確認

会社のiOSアプリ開発チームより、 ガラケー対応の外部の古いウェブサイトにアプリからHTTPS接続できないとのこと。 詳しく聞いてみると、iOSのバージョン10未満で発生していて、 TLS1.2 → 1.1 → 1.0 のfallbackする箇所がうまく動いてなさそうに見える。 対…

WindowsのMarkdownエディタ

しばらくろくなものが存在しなかったWindows用のMarkdownエディタだけど、 最近は選択肢も増えてきたのでメモ。 自分で書くときは テキストエディタ + MarkCat、 他人のを読むときは Firefox か Typora を使っている。

.vbox が消えた

.vbox が消えて、VMを起動できなくなった。 .vbox-prev と vbox-tmp という2つのファイルがあった。 内容は の lastStateChange が、prevの方が古いだけで他は一緒だった。 これを .vbox にリネームしたら起動した。

m4a を mp3 に変換

iPhone のボイスメモで録音したものを共有するときなど。 ffmpeg -i input.m4a -ab 192k output.mp3

composerでローカルディスクのgitリポジトリを使う

repositories でディレクトリを指定すればよい。 Bareリポジトリじゃなくて大丈夫。 バージョンは、ブランチ名-dev を指定する。 指定したディレクトリ直下の composer.json の name が、require した名前と合致していればいい。 composer.json { "repositor…

DmImage の 回転/反転 フィルタ

画像処理の DmImage というライブラリがある。 gd のラッパで、なかなか使いやすいので現在のプロジェクトに導入している。 携帯からの画像アップロードの要件が加わり、Exif の Orientation に基づく 回転/反転 処理が必要になった。 この機能は DmImage に…

null を 空文字にしたい

js

そんな時、みんなどうやっているのだろうか。 たとえば WebAPI から JSON で何らかのデータを取得して、 HTMLを描画しようと innerText を使うと値が null だった場合に "null" と表示されてしまう。 JSは経験が少なくてプラクティスがわからない。 /** * nu…

オブジェクトのフィールドをループする

js

var obj = {foo:"HOGE", bar:"FUGA"}; Object.keys(obj).forEach(function(v, i){ console.log(i + " " + v + " = " + obj[v]); }); prototype は辿らない。 大抵の場合はこれ。

slow_log 関連

オンライン変更の時にいつも忘れるのでメモ set global slow_query_log_file='/var/log/mysqld/slow_query.log'; set global long_query_time=0.1; set global slow_query_log=1; show global variables LIKE '%long%'; show global variables LIKE '%slow%';

openssl でサーバ証明書もろもろ

先日 GlobalSign で証明書を取得したところ、x509 と PKCS7 の両方の形式で証明書が送られてきて、 x509 の場合はさらに中間証明書をこのウェブページから探してねと書かれていて、 どれがどれやらよくわからず探すのが面倒だった。 openssl を使って、PKCS7…

paco が porg に

paco が porg に変わってた。 正確には後継プロジェクトらしい。 http://paco.sourceforge.net/ → http://porg.sourceforge.net/ configure の --disable-gpaco は --disable-grop に。 make logme は無くなっている。 -a, -lD make install, -lp xxx make i…

Windows10のセーフモードは厄介

Windows10のお試し中なのだけど、 Win7で使っていた常駐ソフトがWin10では動かないようで、起動後1分くらいでフリーズしてしまう。 こんな時、従来ならセーフモードで起動して、 問題となるソフトのアンインストールもしくはサービスの自動起動停止をしてい…

JSON-C では JSON_BIGINT_AS_STRING が効かない

php

phpには、JSONを扱うためのjson拡張が同梱されている。(ext-json(JSON_parser)) しかしこのソース中の以下の一文が問題で、各種Linuxディストリで配布できないことになっている。 ext/json/JSON_parser.c The Software shall be used for Good, not Evil. Bu…

浮動小数点は安全じゃない

php

浮動小数点数は誤差が出て安全じゃないから、重要な計算の時は使っちゃいけないよという話。 PHP に限った話ではなく、コンピュータ全般。 若手エンジニアからこんな質問がきた。 「5761800 を 小数切り捨てしたら 5761799 になっちゃった!」

リダイレクトは絶対URI?

RFCによると、絶対URIらしい RFC2616 (HTTP/1.1) で、 「HTTPのリダイレクトレスポンスでは、Location は絶対URI(absoluteURI)で書かなければならない」 というのが定められているけど、これはあんまり守っていない。

BASEトランザクションとCAP定理

BASEトランザクションとCAP定理 クラウドや分散システムで使われる用語 BASEトランザクションとは Basically Available 可用性が高く常に利用できることを重視。 楽観ロックやキュー。 Soft State あるノードの状態はその内部に埋め込まれた情報によって決ま…

ブライスの法則 (Bryce)

Good Systems Design + Good Programming = Great Systems Good Systems Design + Bad Programming = Good Systems Bad Systems Design + Good Programming = Bad Systems Bad Systems Design + Bad Programming = Chaos

メトリクス

oop

継承 ANDC 直接の子孫の平均数 AHH 継承ツリーの平均の深さ サイズと複雑度 NOP パッケージ数 NOC クラス数 NOM メソッド数 LOC コード行数 結合度 CYCLO 循環的複雑度 CALL メソッド当たりの呼び出し数 FONOUT ある特定のメソッドが呼び出す他のメソッド数

STUPID

良くないコードの兆候 Singleton (シングルトン) ※古典的なパターン Tight Coupling (密結合) Untestability (テスト不能) Premature Optimization (時期尚早な最適化) Indescriptive Naming (説明的ではない名前) Duplication (重複)

illuminate/database

私の携わったプロジェクトではORMが採用されないケースが多い。 メリットデメリットともにあるし、向き不向きもあるし、アレルギーを持ってる人がいたりするし、論争に興味もないのでそれ自体はいいのだけど、 たとえORMを使わない場合でも、クエリビルダだ…

リモートデバッグ開始のブックマークレット

xdebug + phpstorm で、リモートデバッグを開始するためのブックマークレット。 開始 javascript:(/**%20@version%200.5.2%20*/function()%20{document.cookie='XDEBUG_SESSION='+'PHPSTORM'+';path=/;';})() 終了(XDEBUG_SESSIONというクッキーを消してもい…

behatでラジオボタン選択

Minkにはどういうわけかラジオボタンのタスク(?)がない。 (behat-3.0.15, mink-1.7.0) 自分で作る必要がある。 作ってみた。英語は怪しい。

ウィンドウが画面外に出た場合

Alt+Space → M → カーソル or マウスぐりぐり

PhpStormランチャ

PhpStormから実行するスクリプトが環境変数を期待している場合、 PhpStormを起動するシェルで環境変数を設定する必要がある。 そして大抵それはプロジェクトごとに固有のものだったりする。 PHPバイナリだったり、BEHAT_PARAMS だったり。 環境変数を設定し…

PhpStormから日本語behat

Windows7 + PhpStorm-8.0.3 + behat-3.0.15 Behatを使い始めた。 多言語に対応していない PhpStorm(8, 9, 10) は、Behatの多言語に対応していない。 英語以外のステップは補完できないし、IDEからテストの実行すらできない。 2014-05-15 に issue が上がって…

テストに使えるドメイン名

hostsに書けば何でも使えはするのだけど、 RFCで使ってもいいよと定義されているものがある。 特に理由がないのなら、これに従っておくべきである。 RFC2606 Reserved Top Level DNS Names ドメイン .test .example .invalid .localhost ホスト example.com …

PDO::MYSQL_ATTR_READ_DEFAULT_FILE

pdo_mysql を libmysqlclient を使うようビルドした場合に使えるようになるPDOのクラス定数。 mysqlnd を使うようビルドした場合は存在しない。 なのでこれを使うようなコードは、定数が存在するかどうかを確認してからにしないと環境によってFatalが起きる…

iptablesによる透過プロキシ

メールサーバの移行の際に、DNS浸透の有無によって新旧サーバにメールが届くのを回避するために透過プロキシを使った。

Putty → OpenSSH のRSA鍵変換

ちょいちょいPutty形式の鍵を渡されることがあるのでメモ。 Putty → OpenSSH のRSA鍵変換 Putty形式の鍵は、秘密鍵と公開鍵が一緒になっている。 puttygen を使って、OpenSSH形式の秘密鍵&公開鍵に変換できる $ puttygen.exe $(cygpath -m ~/.ssh/hoge.ppk)…

SQLでのnull比較

カラムに null が入っている場合の比較は面倒なもの。 このような長ったらしいクエリになる。 col1 = val1 OR (col1 IS NULL AND val1 IS NULL) 比較データが 非null か null かによって、プログラムで生成するクエリを変えるという方法もある。 発行されるS…

cygwinインストールメモ

Win7 Pro 64bit Cygwin 64bit 2.2.0 2015-08-20

画面を広く

Windows10を試しに入れてみたものの、ウィンドウの余白がやたら大きく、 1280x800 のノートPCでは画面が狭くて辛すぎる。 GUIから変更する機能はなくなってしまった模様。 HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics タイトルバーの高さ、幅 Ca…

可変vmdkを固定vmdkに変換

vmware-vdiskmanager -r source.vmdk -t 2 dest.vmdk VBoxManage internalcommands sethduuid dest.vmdk 変換したうえで、uuidも変更している。

DateTimeでマイクロ秒

php

DateTimeはマイクロ秒を扱うことができるが、 コンストラクタ経由だと秒精度までとなってしまう。 だからこう作る。 $timeZone = new \DateTimeZone(date_default_timezone_get()); $dt = \DateTime::createFromFormat('U.u', microtime(true)); $dt->setTim…

Windows7 で Nexus S のchromeをデバッグ

ドライバを入れるだけでいいとのことだけど、それだけではChromeから認識されなかった。 最新の adb.exe を使うと認識できたのでメモ。

Unable to connect to system D-Bus

Error: Unable to connect to system D-Bus (1/3): Failed to connect to socket /var/run/dbus/system_bus_socket: No such file or directory VirtualBoxを 4.3.12 → 4.3.30 に上げたら発生した。 ホストはWin7、ゲストはCentOS 6.7。 GuestAddition を動…

NOT NULL で DEFAULT なしのカラムにデータが入れられる

ことがあって混乱した。バージョンや設定によるのかな? warningを吐きつつINSERTできる環境と、エラーで止まる環境がある。 int カラムに '' を入れようとした場合でも、0 が入ったりする。 MariaDB-5.5.33 は入る MySQL-5.6.25 は入らない これは一度調べ…

VirtualBoxのディレクトリ共有機能の代わりにSambaを使う

VirtualBoxのディレクトリ共有機能はとても遅い。 代わりにSambaを使うメモ。 メリット ゲスト側からのアクセスが早くなる ゲスト側でパーミッション設定ができるようになる ゲスト側でのUT、カバレッジ出力が劇的に早くなる デメリット ホスト側からのアク…

SimpleXMLのバグ #66084 の影響

とあるAPIから返されたXMLをparseしたところ、環境により結果が違っていた。 どうも、Bug #66084 の修正が影響しているらしい。 この修正は php-5.6.11, php-5.5.27, php-5.4.28 で取り込まれている。

composerで、ライブラリを新しく追加する

Symfony の http-foundation の 2.7.x を追加する例。 composer.phar require "symfony/http-foundation:~2.7" -vvv ライブラリがダウンロードされ、 composer.json, composer.lock が更新される。

Smarty3.1はまだ名前空間に対応してない

久しぶりにSmartyを使うプロジェクト。 初めて3系(3.1) を使ったのだけど、テンプレートで名前空間を use で省略することができない。 フルでクラス名を書くか、別名で対象オブジェクトをassignするという、 ちょっと残念なコードにならざるを得ない状態。 …

phpunitが遅い

PHPUnitが遅い カバレッジを出力しているわけでもないのに、phpunitの動作が遅い。 調べたのでメモ。 phpunit 4.7.5 phpunit/php-code-coverage 2.0 CentOS 6.5 ディスクが遅い環境

CakePHP3のDBマイグレーション

Phinx を使っている。 これは既存DBから差分を抽出する機能を持っていない。 つまり、マイグレーションの内容は手で書く必要がある。 この点はCake2時代の CakeDC Migration プラグインや、Symfony2に劣っている。 Phinx の記述方法自体はシンプルでわかりや…

Cake2 で一般ユーザと管理ユーザのテーブルが違う場合

CakePHP2 で、一般ユーザと管理ユーザのDBテーブルが違う場合

CakePHP2のi18n

CakePHP2 の国際化機能を初めて使ったのでメモ。 Cake2 の i18n は、gettext に倣っている。 gettext を知っていればとくに違和感なく使える gettext, php-gettext 拡張がなくても動作する __(), __d() 等のCake専用関数が設けられていて、php-gettext とほ…

mysqldump

export フルダンプ mysqldump -uuser -p dbname --single-transaction > dump.sql レコードのみ mysqldump -uuser -p dbname --no-create-db --no-create-info --single-transaction > dump.sql INSERTを1行ずつ mysqldump -uuser -p dbname --skip-extended…

GNU gettext

php

GNU gettext は、ソフトウェアの国際化のためのライブラリ・コマンド群。 大まかな流れとしては以下のようになる ソース中から多言語対応すべき文字列を抽出 (POT作成) gettext コマンド。 それをもとに各言語用に対訳ファイルを作成 (PO作成) msginit コマ…

Skypeメモ

Skypeメモ バージョンを7に上げたら、SkypeのウィンドウがノートPC(XGA)の画面の半分を占めるようになった。 いくらなんでも画面が狭すぎるので6系に戻した。 ついでに過去につかっていたバージョンをメモ。

php-gdが入らない

php

「php-gdが上手に入らない、なんとかして」の対応メモ。 CentOS-6.5 php-5.6(remi) 入れたいのは remi-php56 の方のphp-gd。そしてGD本体。 $ sudo yum --enablerepo=remi-php56 list | grep php-gd php-gd.x86_64 5.3.3-40.el6_6 updates $ sudo yum --disa…

リストを受け取る仮引数はType Hintingしない

php

リストはシンプルに配列な場合もあるけど、Traversable なオブジェクトかもしれない。 リストを受け取る関数/メソッドの仮引数が、Type Hinting されていると