nmtysh.log

Tech系のネタや日々の独り言などを書いています。

プログラミング

第6感がささいてバグが見つかった

風呂に入っている時や寝る直前になって唐突に 「今日(あるいは先日)開発してたあの部分のコードに○○○な問題があるんじゃないのか?」 とひらめく時があります。 取り越し苦労なこともありますが、調べてみると問題が見つかることもしばしば。 今日も昨日の夜…

ネストしたトランザクションに久々に嵌った

データ変更のバッチ処理を書いて、検証して「よしOK」となりローカルの環境に本適用しました。 その後、念のため同一処理を再実行しても再適用されないことを検証したら何故か適用されちゃいました。 検証中は意図的にトランザクション処理をrollback()する…

dockerのphp:7-fpm-alpineイメージでCakePHP3を動かす

※この記事はQiitaにも掲載しています。 nmtysh.hatenablog.com PHP7を試すためのdocker-compose.ymlを作って、CakePHPをいざ試そうとすると色々モジュールが足りなかったり、VirtualBoxでBoot2Dockerを動かしているために発生する問題があったので、その対処…

せっかくの連休なので……

せっかくの連休なので、できていなかったPHP7/CakePHP3とかRubyとかに手を出そうとしつつ、環境準備の段階で手こずってます。 下手にDockerでと考えずにVagrant+Ansible辺りで準備すれば良かったかなー。 まぁDockerについても勉強ということで。 と、こんな…

listen.allowed_clientsに空白を入れてはいけない

PHP-FPMで接続を許可するFastCGIクライアントの一覧を設定するパラメータに listen.allowed_clients があります。 接続を許可されている FastCGI クライアントの ipv4 アドレス一覧。オリジナル版 PHP FastCGI (5.2.2+) における環境変数 FCGI_WEB_SERVER_AD…

意図しない挙動があるが原因はどこにある?

「プログラムは書いたとおりにしか動かない」 まぁ自明なんですが。 意図したとおりに動いていないということは、何か考慮がもれているところがあるわけで。 だけども、そこが判らない。 事象は起きている。 けれども、再現ができない。 再現できれば、原因…

CakePHP 2.xのElementのCacheは入れ子にできない

CakePHPでViewのElementでキャッシュが利用できます。 利用できますが、キャッシュ生成処理の処理上、入れ子になったElementで親と子の両方でCacheを使うとCacheがおかしくなります。 親のElement(ここではAとします)で、Elementの処理時にCacheのconfigを生…

rename後にはchmodが必要だった

意図したパーミッションにならない 対象Ver: 5.5.x ファイルシステムにファイルを吐き出すCakePHPのコードを書いたのですが、作成したファイルが意図したパーミッションになりませでした。 ファイルを作成した流れ 一時ファイル作成(パーミッションは0644を…

iMacrosでフォームを送信する

Webブラウザの操作を自動化できるツールの一つに iMacros というものがあります。 同じ操作を繰り返す必要があったので、iMacrosで自動化することにしました。 まずは記録 ユーザーの操作を記録して、その操作をスクリプト化してくれます。 URL GOTO=http://…

テストパターンを上手くまとめられるようになりたい

関数のテストコードを書くときに、幾つものパターンをどうまとめるのが一番良いのか悩んでいます。 単純なパターンであれば、それぞれの入力値、期待する出力値を配列にまとめることでfor文(foreach文)で回してテストコードをコンパクトにすることができます…

PDF.jsのCORS対応に注意!

Allow foriegn origin URLs only for hosted viewers. by yurydelendik - PR #6916 - mozilla/pdf.js で、デフォルトだと同一サーバー上のファイルのみに読み込みが制限されました。 Please notice that generic/demo viewer blocks this functionality if d…

FormHelperでoptgroupを使う場合はshowParentsをtrueにする

CakePHPのFormHelperを使ってselectのoptgroup/optionを出力したのですが、一部のoptionが出力されませんでした。 [ 1 => 'A', 2 => 'AA', 3 => 'AAA', 4 => 'AAAA' // <- これが出力されない ], 'BBBB' => [ 5 => 'B', 6 => 'BB', 7 => 'BBB', 8 => 'BBBB'…

nginxでレスポンスヘッダーにCache-Controlが含まれない場合がある

nginxを使ったシステムを構築した際につまずいたところがあったのでメモ。 ・0.2%の確率でレスポンスにCache-Controlヘッダー、Expiresヘッダーが付与されない nginx.conf で expires を使って上記ヘッダーを付与する設定にしていたのだけれど、何故かレスポ…

curlでログインする(備忘録)

curl -b cookie.txt -c cookie.txt --data "username=user&password=pass" "http://localhost/admin/login" -b でファイルに保存された cookie の送信。 -c で受信した cookie をファイルに保存。 --data で post データの送信をしています。 あとは、ログイ…

ApacheとPHPとメモリリーク

Webサーバーを複数台構成にして運用している環境があるのだが、アクセスが集中した際にある条件下で特定のサーバーでのみメモリリークが発生してしまう。 メモリリークの発生したサーバーを切り離しても、別のサーバーでは起きず、切り離したサーバーを戻す…

MaxMemFree まわりのソースコード読み

最近 MaxMemFree をいじっているのですが、この値の効果を調べている時に気なるページを見つけました。 2011年の投稿なので少々古いですが、その中で I repeated the test and did not see desired effect advertised by the documentation. Then I read in …

MacでEclipse内のスクロールが遅い件の暫定対応

少し前の事になりますが、業務で使うPCがWindowsからMacに変わりました。 普段からターミナルで作業することが多いので、MacになってCLIが使いやすくなって喜んでいたのですが、Eclipseで不満が。 (Eclipseの)テキストエディタのスクロールがむちゃくちゃ遅…

すべてのUnitテストを個別に実行する方法

CakePHPのUnitテストで個別に実行する場合とAllTestsで結果が異なる問題が起きています。 他のテストの影響を受けているみたいなのですが、全部のUnitテストを手動で実行するのは骨が折れます。 なので、シェルスクリプトとまでは行きませんが、ファイルごと…

Google Apps Script で死活監視を行う

業務でWebサイトを構築すると大抵サービスの監視を行います。 ほとんどの場合は会社のネットワーク内に監視サーバーがあると思いますが、外部ネットワークのエラーによる不通は把握できないかと思います。 なので、ネットワーク障害に備えて外部からも監視を…

CakePHP の $useDbConfig にはまった(備忘録)

結論: FixtureのuseDbConfigでDataSourceを指定するには、対になるDataSourceが定義されてないと駄目でした。 例) $test_hoge = array(/* ... */); なら $hoge = array(/* ... */); が定義されてないと駄目。 動的にDBの接続先を切り替えるプログラムを書い…

Ubuntu 12.04 に Oracle Java 7 をインストールする

Ubuntu 12.04 に Sun(Oracle) の Java(JDK) 7 をインストールします。 1. Java SE Downloads から Java SE Development Kit 7 Update 25 をダウンロードします。(例: jdk-7u25-linux-i586.tar.gz をダウンロードしたものとします) 2. ダウンロードしたファイ…

session.use_trans_sid を使わずに CakePHP 2.3 でURLにセッションIDを付与する方法

Cookie が使えないブラウザではURLにセッションIDを付与してセッションを引き回します。 PHP だと session.use_trans_sid を1にすることで、 PHP が透過的にセッションIDの付与を行ってくれます。 ですが、付与のタイミングが問題で以前書いたようにブラウザ…

CakePHP と Content-Length と imodeブラウザ(未解決)

携帯電話(いわゆるFP:フィーチャーフォン)向けの、Webサイトを構築中な訳だが、Cookieが使えない下位端末への対応に悪戦苦闘中。 Cookieが使えない場合はセッション情報を引き継ぐ手段としてURLにセッションIDを付与するわけだが、このセッションIDの付与処…

beforeSave() でDBを切り替える

Master/Slave なレプリケーションをしている場合、更新系は MasterDB に変更します。 CakePHP だと $this->useDbConfig を書き換える必要があります。 今までだと Model.php の save($data, $validate, $fieldList) をオーバーライドする必要がありました。 …

モジュールで定義したAPI(DLL)呼び出す関数を使う時の落とし穴?

HSPで久々に嵌りました。 外部DLLの命令を使う関数群をモジュール化して使っていたのですが、 プログラムを修正した時に急に命令が実行できなくなりました。 エラーの内容は「error 2 : 文法が間違っています」ですが、エラー箇所はいじってないんですよね。…

Ubuntu 12.04 に Sun Java をインストールする

Ubuntu 12.04 に Sun(Oracle) の Java(JDK) をインストールします。 1. Java SE Downloads から Java SE Development Kit 6 Update 35 をダウンロードします。(例: jdk-6u35-linux-i586.bin をダウンロードしたものとします) 2. ダウンロードしたファイルを…

Ricty フォントをビルドする

プログラミングに最適な Ricty(リクティ) というフォントがあります。 以前は、配布元でフォントが配布されていましたが、現在はライセンスの関係で自分でビルドする必要があります。 しかし、シェルスクリプトが配布されているため簡単にビルドすることがで…

Ubuntu 11.04 に Eclipse 3.7 をインストールする

Ubuntu 11.04 に Eclipse 3.7 をインストールします。 1. eclipse 3.7(Indigo) をまずはダウンロードします。 ダウンロードページの右のDownload Links から Linux 32-bit を選び、ダウンロードします。 私は ~/Downloads/eclipse-java-indigo-SR2-linux-gtk…

iosched を読む 3 AndroidManifest.xml

AndroidManifest.xml <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.google.android.apps.iosched" android:versionCode="16" android:versionName="0.16" android:installLocation="auto"> <uses-sdk android:minSdkVersion="7" android:targetSdkVersion="11" /> Android API Leve…</uses-sdk></manifest>

iosched を読む 2 Eclipse にインポートする

ダウンロードした iosched のソースを Eclipse にインポートします。 1. Eclipse の[ファイル]->[新規]->[Androidプロジェクト]を選択します。 2. "外部のソースからプロジェクトを作成"を選択します。 3. Location にioschedのフォルダにあるandroidフォル…

iosched を読む 1 ソースを入手する

iosched のソースを読みたいと思います。まずは、ソースを入手するところから始めます。 iosched の Source Checkout ページを見ると、 hg clone https://code.google.com/p/iosched/ とありますので、その通りに実行します。 hg コマンドは Mercurial のコ…

rails generate に失敗する

Ubuntu 11.04 で rails generate したときにこんなエラーが表示されました。 ${HOME}/.rvm/gems/ruby-1.9.3-p194/gems/execjs-1.3.2/lib/execjs/runtimes.rb:50:in `autodetect': Could not find a JavaScript runtime. See https://github.com/sstephenson/…

Timer で関数が実行されない。

Flash Builder 4.6 にて、こう書くと何故か実行されない。 var timer:Timer = new Timer(400, 1); timer.addEventListener(TimerEvent.TIMER, hogehoge); timer.start(); protected function hogehoge():void { // hogehoge } なので、無名関数を一段かませ…

Dropbox の Cache 削除用シェルスクリプト(改2)

Dropbox の Cache 削除用シェルスクリプト(改) のスクリプトだと上手くいかない様なので修正。 旧:(8~12行目) # キャッシュフォルダのパスを取得 dropbox_folder=$(sqlite3 "${HOME}/.dropbox/config.db" "select value from config where key = 'dropbox_p…

Flex 4.5: TextInput と IME ON での入力(バグっぽい)

Adobe Flash Builder(以下、Flash Builder) 4.5 でコンパイルした swf な TextInput に IME を ON の状態にして入力すると、最後に確定した文字列が TextInput に入力されない。 表示上は入力されているように見えるのだが、 textInput.text には入力されて…

pg_query_params() で boolean を扱う

pg_query_params() で boolean な変数を渡すとエラーになるのでその対策。 pg_query_params($query, array(($flag ? 'TRUE' : 'FALSE'))); boolean の代わりに 'TRUE'("TRUE") / 'FALSE'("FALSE") を渡してあげる。 これバグな気がするんだが… おまけ: Postg…

Ubuntu 11.04 に Sun Java をインストールする

手動で Ubuntu 11.04 に Sun(Oracle) の Java(JDK) をインストールします。 1. Java SE Downloads から Java SE Development Kit 6 Update 30 をダウンロードします。(例: jdk-6u30-linux-i586.bin をダウンロードしたものとします) 2. ダウンロードしたファ…

Flash Builder メモ

名前の変更は鬼門。 ファイル名の変更のつもりが、変数も一緒に変更されたり、逆もしかり。 リファクタリング機能が微妙。

Androidメモ: リソース名

string.xml やら layout やら当たり前だけど、 Java の予約語は使えない。と言うことを忘れてた。 何でエラーが出るのか、しばらく悩んだのだけれど、import.xml とか <string name="import">~~</string> これ思いっきり予約語だった。そりゃ、エラーが出るよね。 エラーのメッセージから…

Androidメモ: 通話中かどうかを取得する

TelephonyManager.getCallState() を使用して通話中かどうかを判定する。 .getCallState() にはパーミッションは不要。 TelephonyManager tManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); switch (tManager.getCallSta…

PHPメモ: シングルクオートとダブルクオート

シングルクオート(')で文字列を指定すると円記号(\)などがエスケープされてしまうようだ。 ダブルクオート(")だとエスケープされない。 Linux での扱いと同じ感じ。 echo 'aaa\nbbb' <- 改行されない echo "aaa\nbbb" <- 改行される

Android: Ringtone のメモ書き

Ringtone の取得 Ringtone ringtone = RingtoneManager.getRingtone(context, Uri.parse(uri)); 通知音量の設定で再生する ringtone.setStreamType(AudioManager.STREAM_NOTIFICATION); ringtone.play();

PHP: 文字エンコーディングは UTF-8(BOMなし) で保存すること!

.php なファイルを UTF-8(BOM) で保存すると IE なんかで BOM が認識されない事がありデータ内にゴミとして残る場合があるので、 UTF-8(BOMなし) で保存すること。 require や include すると UTF-8(BOM) の場合は、それぞれのファイル先頭に付いている BOM …

Android: マナーモードの判定をする

マナーモードにすると着信音は鳴りませんが、アプリなどの音(メディア)は再生されてしまいます。 自作アプリ内で音を鳴らすときにマナーモードかどうかをチェックしておくと、親切なアプリになるでしょう。 AudioManager audioManager = (AudioManager)Conte…

Java: RecursiveTask

Java 7 の RecursiveTask でフィボナッチ数列なサンプル。 import java.util.concurrent.RecursiveTask; import java.util.concurrent.ForkJoinTask; import java.util.concurrent.ForkJoinPool; import java.util.concurrent.ExecutionException; public cl…

Ubuntu 10.10 に Java 7 をインストールする

先日 Java 7 が公開されました。 ので、早速 Ubuntu 10.10 にインストールしてみました。 1. まずダウンロードサイトから 「Linux x86 - Compressed Binary 92.17 MB jdk-7-linux-i586.tar.gz」をダウンロードします。 ~/Downloads/jdk-7-linux-i586.tar.gz …

Java: JSP の Taglibs のダウンロード先

JSP のタグライブラリを使うことにしたのですが、 jar ファイルをどこからダウンロードしたらよいのかさんざん迷ったので、備忘録なメモ。 Apache Taglibs - Apache Taglibs がプロジェクトのページですが、404エラーばっかで上手くたどり着けません。 結果…

Ubuntu 10.10 に Eclipse 3.6.2 をインストールする

Ubuntu 10.10 のリポジトリに登録されている Eclipse は 3.5(Galileo) です。 本家で Eclipse 3.7 もリリースされたことですし、 3.6.2 にバージョンアップすることにしました。 1. eclipse 3.6.2(Helios) をまずはダウンロードします。 ダウンロードページ…

CSS3 でフォルダツリーみたいに見せる

CSS3 対応ブラウザ限定 <ul> の <li> 要素の前に"├"や"└"を付けてフォルダツリーみたいにしてみる。 ul.dir li:before { content: "├"; margin: 0px 4px 0px 0px; } ul.dir li:last-child:before { content: "└"; margin: 0px 4px 0px 0px; } こんな感じ A B a b c C</li></ul>…

JIT を無効化する

Android 2.2 以降は JIT(Just In Time)コンパイラが有効になっています。 基本的には、有効にしておくと処理の高速化が期待できます。 しかし、意図的にJITを無効化したい場合があります。 そういった場合は AndroidManifest.xml の Application要素に andro…