2015年10月31日

ノベルティの言い間違い

 あるイベントの出店者側の言い間違いが面白かった

ノベルティグッズを配っているので、そういうと思ったのでしょうが、大きい声で

アメニティ

と叫んでました。

ちょっと、寒くなりました。



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としたいと思います。
このあたりをちゃんと考えられるプロの人だったら一瞬でわかったり、あらかじめ長めにしたりするんでしょうね。