2015年10月29日

ドッグフーディングは大切だよ

 そもそも、ドッグフーディングなんて言葉があるのかしら?

自社開発した(ほとんどビジネスパートナーだより)アプリケーションを世の中に出す前に厳しくテストする必要はあると思いますが、自分たちで使いもせずに変なものは出せないといいテストだけし続けるのはどうかと思う。

 気持ちはわかりますが、今のままでは、永久にリリースすることはできませんよぉ。

まずは、小さく始めてから育てるでいいじゃないですか?
現在は、このブラウザだけ、この端末だけターゲットですという縛りで。


タブレッドで端末の向きが変わったのを検知する

iPadの向きが変わったことこののロジックで検知できます。

$(function() {
  $(window).bind("orientationchange", function() {
    if(Math.abs(window.orientation) === 90) {
      alert("横向き");
    }else {
      alert("縦向き");
    }
  });
});

2015年10月16日

CakePHPでセッションがよく切れてしまうのを回避

 CakePHPを使ってWebアプリケーションを運用していると特定の条件でセッション切れがよく発生します。(よく発生してはダメです…)

 ページからリクエストした時にサーバーで処理が終わらないうちに再度、リクエストをするとCakePHP内でセッションが無いことになってエラーになってイました。
 CakePHPのソースまで追ってみたら、セッションを管理しているファイルをReadした時にそのファイルが無いことになっていてダメだったようです。
 この時は、セッション内容を持っているファイルをロックすることができなくてエラーになっていたのかと思っていました(いや、もしかするとそうなのかもしれない)

 そのシステムを使っているお客様からURLの一覧から画面を複数連続で開くとセッションが頻繁に切れるようになったのでなんとかしてほしいという要望というかクレームが上がってきました。

 再度、速い連続リクエストが原因でセッションが切れる問題を解決する記事が無いかちょっと調査したところ答えがありました。

 
 WEB制作所インレットさんのサイトです。

対応策に3つのことをする必要があるのですが、(1)と(3)は、対応していたので、(2)の対応をすることにしました。

結論からいうと、セッション切れになることもなく、連続表示したページは全て正しく表示されました。

 ただ、1点だけ腑に落ちないところがあります。
CakePHPのCore.php内のSessionの設定のろ頃でどこにセッションを作成するかの指定が効いていないようでした。
 私の環境では、"cake"としているのでCakePHPのセッション用ディレクトリに作成されるはずのところが、Apacheのphp.confで指定されているパス(php_value)で指定しているディレクトリに作成されています。

 1サーバーで複数のサイトを運用しているのでちょっと気持ち悪いですが、何か案がないか考えて見ようと思います。
 ※もしかすると、php_valueを各サイトのconfに書けば良いのかもしれないです。

この処理を追加します。

if(!isset($_SESSION)) {
    session_start();
}
関連記事
CakePHPにAjaxで連続リクエストするとダメなの?

2015年10月4日

AWSのELBを使っている場合のタイムアウト対応

 AWSを使ってシステム構築をしています。
今回、ファイルアップロードをしてデータ登録をする処理をつくったのですが、ある程度大きなファイルをアップロードするとHTTP Status 504のタイムアウトになってしまいました。
※実際のところはファイルのアップロードではなく、アップロードしたファイルの処理に時間がかかっています。


エラーになる場合は、60秒前に504ステータスが返ってきていました。
(504は、Webブラウザからのリクエストを受けたサーバーがされに別のサーバーにリクエストを送信した際に、別のサーバーからの応答が一定時間に返ってこないことを表しています。)


今回のシステムの構成は以下のようになっています。

[Webブラウザ] - [ELB] - [Webサーバ(Apache)]

Webサーバのタイムアウト時間は設定していないのでデフォルトの300秒らしいです。

で、60秒以内で504が返ってくるのはおかいいのでApacheではない。
てことは、504の意味を考えていると、ELBとWebサーバの間でしかないので、ELBの設定を確認したところ、「接続設定 アイドルタイムアウト: 60秒」という設定がありました。

で、これを編集し、Apacheと同じ300秒に変更してファイルアップロード処理をしてみたところ正常動作をしました。
めでたし、めでたし。


まぁ、もともと、このあたりの設定(ELBに限らず)とかは、全然やったことがなかったので新しい知識がついたということで大OKとしたいと思います。
このあたりをちゃんと考えられるプロの人だったら一瞬でわかったり、あらかじめ長めにしたりするんでしょうね。

2015年9月20日

Windows10とVirtualBox5.0とVagrantではまったの巻その2

 以前の記事で、Windows10とVirtualBox 5.0は、正しく動作しないがあるという記事を書きました。
VirtualBox5.0.4をインストールすることで解決されているようなのでインストールしてみたら既存の仮想マシンが正しく動作しない場合があるという現象がありました。
 具体的には、Guest Additions 5.0.4が使用できないという問題です。

 それを解決する方法です。

ホストOS:Windows 10
ゲストOS:CentOS6.7 64bit版


すでに作成されていたVirtualBoxの仮想マシンにGuest Additionsのバージョンが4.3.4がインストールされている場合、VirtualBox 5.0.4をインストールしているとGuest Additionsが正しく動作しないという問題があります。


VagrantのPluginの「vagrant-vbguest」をインストールしていると本来は、正しいバージョンの「Guest Additions」をインストールしてくれるのですが、なんだかと途中でエラーを起こしてインストールできていないようなのです。

 グーグル先生に聞いてみるとLinuxのカーネルのバージョンが古いのが問題なので新しいものをインストールするようにというのが書いてありました。
※エラーメッセージにも「yum install kernel-devel-2.6.32-431.el6.x86_64」と表示されるので、その通りにしてみます。

>yum install kernel-devel-2.6.32-431.el6.x86_64
 言われたとおりにやってみる→なぜかうまくいかない
 Error: Nothing to doとメセージがでる

>sudo yum install kernel kernel-devel
 グーグル先生に聞いた通りにやっている→うまくいかない
 Error: Nothing to doとメセージがでる

これで新しいカーネルがインストールされるのでゲストOSを再起動すると新しいGuestAddionsがインストールされるはずです。
ですが、インストール自体がされません。

Qiitaでこの問題を解決している記事がありました。

Vagrantのフォルダ同期のエラーの対処

そもそも、yumでkernelのインストールを止めているようでした。
カーネルのアップグレードをする為には、「/etc/yum.conf」のカーネルを対象外にする(?)設定をコメントアウトする必要があるようです。

exclude=kernel*
↓
#exclude=kernel*

これで、「sudo yum install kernel kernel-devel」をすると正しくインストールされます。

あとは、ゲストOSを再起動するだけです。



まとめると
  1. 同期フォルダが同期されなくなった場合、GuestAddionsのバージョンを疑う
  2. Vagrant pluginの「vagrant-vbguest」をインストールする
    vagrant plugin install vagrant-vbguest
  3. なぜか、「GuestAddions」のインストールに失敗する
    Kernelのdevelがインストールされていない為、正しくコンパイルができない。
  4. kernel-develをインストールする
    sudo yum install kernel kernel-devel
    ↓
    インストールされない場合は、/etc/yum.confのexclude=kernel*をコメントアウトして再度、カーネルをインストールする
  5. ゲストOSを再起動し、フォルダ共有ができるか確認する
    できなかったら、別の問題なので解決方法を探す

これが、VagrantとVirtualBoxの最後のハマりどころになれば良いのですが…。

2015年9月7日

Google Chromeの機嫌が悪い←ごめんなさいChrome

 多分そうなんですが、Google Chromeを45.0.2454.85m (64-bit)にバージョンアップしたら、頻繁に応答なしになってしまいます。
 誰か何かヒントがありましたら教えて下さい。

もしかすると、ベータ版とかにすれば治るのかな?


一応PCの環境も書いておきます。
OS:Windows 10 Enterprise
メモリ:32GB
ディスク:SSD 256GB


インストールしているソフトウェアとの相性の問題だったようです。
IBMのインターネットバンキング専用のRapportというソフトウェアのバージョンが古かったのが問題だったようです。
 Chrome45に対応してバージョンをインストールしたら問題なくなりました。

失礼しました。

もしかしてと思って、一旦アンインストールしたら調子良くなったので、もしかしたら新しいバージョンとか出てる?と思って見てみたら案の定リリースされていました。

とほほな感じです…。

2015年9月6日

ScanSnap iX100A買ってみた

 経費で落とす領収書とかを紙で保管しているのですが場所とったり、なくしたりするので電子化して管理したいと思ってました。
 一応、複合機を持っているのでそれ使ってもできるのですがもっと簡単にする方法は無いかと探してました。

 で、EvernoteのMarketでSCANSNAP EVERNOTE EDITION スキャナってのを販売していたのでちょっといろいろと調べてました。
 49,800円!うーん、それほど高額なわけではないですがなんとか安く購入できないかな?と調べてたらSnapScap iX500と同じものであると。
 すると、ScanSnap ix100というちょっと小さい手軽に持ち運べるほど小さくて安いのも発見。

結局、それほど頻繁に使うわけでもないのでお試し感覚にScanSnap iX100を購入することい決定しました。

 まだほとんど触ってませんが、名刺をスキャン後に起動されるCardMinderがとても素晴らしかったです。
横向きの名刺を縦にスキャンしても横向きに変更してくれます。
一番いいと思ったのはOCRの機能です、氏名や氏名フリガナ、会社名部署、役職等ほぼ完璧に認識してくれます(100%ではありませんが)
 ※ちなみに自分の名刺は、グダグダになりました
スピードも申し分無いですよ。


名刺管理と領収書やレシートの管理に活躍してもらおうと思います。
あと、紙でもらった仕事の資料とかも同様です。


ScanSnap iX100(http://scansnap.fujitsu.com/jp/product/ix100/)