プログラマーですが何か?まだプログラマーですが何か?プログラマーネタとアスリートネタ中心。作る機会がありました。中でも特にキャッシュ機能を試すことが主目的だったのですが、最低限の機能を実装して公開してみたので、興味ある方は以下を参照して使ってみてください。動作を可能にする」ことを主目的としています。自体の説明をすることが本ブログエントリの目的ではないし、そこまで含めてしまうと長くなりそうなので、興味ある方は適当にググってください。特徴的な機能がいくつかありますが、今回は特に「キャッシュ機能」を確認するためのアプリケーション実装を行いました。「インストール」してみます。場合):正しく追加できるとホーム画面に以下のようなアイコンが追加され、次回からはここをタップすることで同じアプリを起動できるようになります。いうわけでこちらをタップします:先程に似た画面が表示されます。して起動してネイティブアプリっぽく起動しています:「(カテゴリーを選択)」と書かれた部分をタップすると、この後選択する画像のカテゴリー一覧が表示されます。実際には色々なカテゴリーがあっていくつか試すこともできるのですが、キャッシュの説明のため以下は「こども」カテゴリーを選択したものとして(それ以外のカテゴリーは選択していないものとして)説明を続けます:カテゴリーを選択すると、「いらすとや」の選択したカテゴリーの画像がカルーセル表示されます。画像を右や左にフリックすることで次の画像や前の画像を表示できます:カルーセルから「パズルにしたい画像」を選んでタップします。スライドパズル化され、実際に遊ぶことができるようになります:(簡単なパズルではないのですが・・)パズルを進めていって、完成すると、・・・パズル完成までに要した時間と動かした回数が表示されます:続いて過去の(回数の少ない)トップ10が表示されます。直近の記録がこの中に含まれていれば強調表示される、というゲームです:ここまではネットワークに接続された状態で行いました。データをキャッシュすることで、オフラインでもある程度の利用が可能になります。その部分を試してみましょう。アプリをいったん終了(タスク一覧から終了)しておいてください。スマホをオフライン状態にします。状態に設定します:あらためてホーム画面のアイコンからアプリを起動します。先程起動した時に表示されたトップページは自動的にキャッシュされていて、ネットワーク接続がなくても表示され、カテゴリー選択状態になります:カテゴリーとして「こども」を選択した場合も先程の実行時にキャッシュできているので、ネットワーク接続がないにも関わらず画像含めて表示することができています。ここで表示されているのはあくまでキャッシュに含まれている画面であって、ネットワーク接続時の最新状態が表示されているわけではありません:しかし先程選択しなかったカテゴリー(例えば「職業」)を選択すると、こちらの内容は接続状態でのキャッシュが存在していないため、カルーセルの中身を取得することができず、何も表示されない、という状況になります。アプリケーションは以下のようなシステム構成となっています。構成そのものはウェブアプリケーションのシステム構成そのもので、この中で「いらすとや」のページをリアルタイムにスクレイピングしてカテゴリー一覧やカテゴリーの画像一覧を取り出して、アプリケーションの中で利用しています。化する際にいくつか設定のためのファイルを追加するのですが、それらの準備が完了していると、以下のような仕組みでキャッシュが(自動的に)実現されます。キャッシュデータが全くない状態でオフライン操作することはできません。ないと何も表示できません。オフラインでキャッシュ表示するためにはオンライン時にある程度の情報をキャッシュしておく必要があります。する際のパスとその結果を自動的にキャッシュします。データをサーバーに送信することもできません:このアプリケーションのソースコードはこちらで公開しています。アクセスが必須となります。デフォルト設定の場合はその内部キャッシュにファイルシステムが使われています。memcached(メモリサーバー)にすることで、比較的簡単に高速化を実現することができます。利用する方法を紹介します。利用するようにしてみましょう。以下にフォルダが作成されていないことが確認できれば成功です。使って業務アプリを開発しています。ある程度使っていると色々なトラブルに遭遇しますが、タチが悪いのが「特定の環境でのみ障害が再現する」というパターン。開発環境やテスト環境では動くのに、本番環境では動かない、というやつです。そんな現象の1つに遭遇しました。コマンドなどで)用意して、アプリを開発します。定義されていることになります。モデル(Model/User.php)は変更する必要がないので、このまま使っていれば変更後の6列の値が含まれる配列変数のモデルとして使えるはずです。モデルの配列変数には5つの値しか入っていない、というものです。内容は、この現象がローカル環境やテスト環境などでは再現せず、よりによって本番環境でのみ再現する、という現象を意味しています。テスト中には全く気づくことができず、本番環境を使っている利用者からの報告で気づく、という最悪のパターン。今回、このような現象に遭遇した上で最終的に解決することができました。原因とその対処法を紹介します。結論を先に言うと、キャッシュが原因でした。場合にモデルのキャッシュが長い時間(999日間)有効になる、ということです。キャッシュが有効になっている間はモデルの設計変更が反映されません。その結果、デバッグモードを無効にした本番環境でのみモデルは古い設計のまま動いてしまい、他と異なる挙動になる、という発生パターンになったのでした。解決策としてはキャッシュを削除します。テーブルのキャッシュを削除することで強制的に更新させます。このファイルを削除します。ファイルも削除します。これで新しいテーブルの内容をモデルに反映させることができました。いや~、こんなトラブル、事前に想定するのが難しいですよね。レベルが1つ上がった気がします。ブログ検索」ブログパーツは、サービスを終了しました。