pr のすべての投稿

【未来予測】プログラマの考える30年後の携帯

あけましておめでとうございます。
去年は仕事がなかなか思うようにいかず停滞気味になっている一方、子供はめっちゃ成長してて最近では一緒にゲームを作って遊んだりしています。今年は嫁の厳しい視線をかわしながら自分自身息抜きしながら遊べたらいいなぁと思っています。
ということで今日はプログラマとして携帯やスマホのコンテンツに関わっている私が夢想する未来の携帯について考えてみたいと思います。

インプラント携帯

2820549302_8da93f26e9_m
by Cayusa

究極の携帯は神経に直接接続した体内埋め込み型携帯でしょう。顔を思い浮かべるだけで繋がり、会話をできます。実際に音を出さなくても、イメージするだけで会話ができます。ただ、これは研究は行われるでしょうが実証実験にかなりかかるものと思われます。実用化するまでは50年くらいかかるのではないでしょうか。

+センサー携帯


プラスの発想です。これまでの携帯も、通話機能にメール機能、インターネット機能を足し、お財布、GPSと機能を追加してきました。
今の携帯になくて重要なものというと、健康チェック機能でしょう。握っているだけで体温、それに脈拍も自動検知できるでしょう。呼気から匂いが検知できます。口臭、アルコール、それに病気の疑いなど、通話するだけで自動検知してくれます。

デザインの進歩


携帯からスマホへの変化は、画面をタッチするというインターフェースにより起こりました。今起こりつつあるのは、手に持たなくてもよいというデザイン的な進歩です。眼鏡型の携帯は数年後には登場しそうです(まさに電脳コイルの世界ですね!)。腕時計型も登場するでしょう。他に考えられるのは工事現場などで重宝するヘルメット一体型、薄くて体のどこにでも貼れるシール型などでしょう。個人的には、逆に非常に重くて使い勝手の悪い携帯がでてもいいと思います。ダンベルのように重くて振っている間しか使えない体力向上型、刀の形をしていて鞘から抜けば電源が入り、立ち回りをすることで操作できる真剣型など、はた迷惑な携帯も、3Dプリンターのような個人生産技術の向上により登場するでしょう。

考える携帯


携帯の人工知能はどこまで賢くなるでしょうか。30年後、友達といえるくらい人間的な携帯が登場しているかは非常に際どいラインです。この研究は古くから行われていますが現在のiPhoneのsiriやdocomoコンシェルジェをみても、MicrosoftOfficeに生息していたイルカと大差ないように思えます。しかし2038年の技術的特異点あたりで、この技術がブレイクスルーして非常に役立つ知能をコンピュータが獲得している可能性はあります。携帯はあなたの近未来を予想して前もってお店の予約など準備してくれるようになるでしょう。過去のデータからあなたがしていない行動があれば「ハンカチ持った?」と音声確認をしてくれるようになるでしょう。

最後に

読んでいただいてありがとうございます!なんか画像つけようと思ってFlickrを探していたのですがあまりに重くてやめて、amazonのアフィリエイトつけたりしてたらこの記事アップロードするのに1ヶ月くらいかかっちゃいました。本当に30年後の携帯は今より楽させてくれそうで楽しみです。1日20分、ブログを書くのが目標です。なので毎日は投稿できないでしょうがちょっとづつ書き進めていきますよ。

【cakePHP】重複を省いたPaginator

重複を省いて正しい件数をだすPaginatorのやり方です。

データを取得するだけなら
CakePHP の find で DISTINCT を使って重複した行を除外してデータを取得する方法[WEBLE]

でいけます。

ページ分けをしてくれる便利プラグイン、Paginatorを使っているとどうでしょう。
fieldsはPaginatorに設定することができますが、カウントしている部分には使ってくれません。
どうしようかと思ったらPaginatorで自分用のカウント方法を設定する方法がありました。

モデルの中にpaginateCount関数を作ればよかったです。

【cakePHP】SSLと非SSLが共存するサイト

ひとつのサイトの中にSSLページと非SSLページを混ぜる場合は注意が必要です。

http://book.cakephp.org/2.0/ja/development/sessions.html
に書かれてあるように、session.cookie_secureをfalseにしないとcookieが継続できません。

SSLページから他のページに飛ぶときに、相対リンクだとやはりSSLのかかったページにとびます。暗号化通信を解除しようと思うとhttp://から始まる絶対リンクで書かないといけません。
これを相対リンクのままにして強制的にhttpかhttpsに振り分けるようにしたやり方も書いときます。

config/route.phpでsslディレクトリ以下へのアクセスはpssl/を省いたコントローラ・アクションにアクセスし、パラメータsslを入れるよう設定。

AppControllerでアクセスのたびに環境変数のHTTPSとパラメータsslを比べてリダイレクトし直しています。

【シェルプログラミング】Basic認証をかけるシェルプログラム

開発途中のサイトで検索エンジンに補足されたり、一般のお客様に知らずにユーザー登録されたりしないよう、BASIC認証をかけることがそこそこあるんですが、毎回やり方を調べるのが面倒なのでシェルプログラムにしました。

そんなにシェルプログラムに慣れてるわけではないなか、すんごく簡単に作ったので変なところがあるかもしれませんが、今度BASIC認証かける時にも使えるよう、備忘録代わりに書いておきます。

認証をかけたいファイル名(index.htmlとかautorize_*とか)とユーザー名を入力して、パスワードを入力するとカレントディレクトリの.htaccessに設定を追加して.htpasswdファイルを作成します。
ファイル名を省略すると、カレントディレクトリ以下が対象になります。

既にhtpasswdがある場合は上書きになるので注意。.htaccessには追記です。重複登録は考慮していないので内容をみて分からない人は普通に登録したほうが無難。
.htaccessの隠蔽とかやろうと思ったけど試したサーバーでは既にみれなくなっていたのでやっていません。

【Facebook for PHP SDK】ログアウトの仕方

自分のFacebook連携アプリからログアウトするだけでなく、Facebookからもログアウトする方法です。
複数のFacebookアカウントを切り替えてテストしたりする場合に必要なんですが、なかなか正しいやり方を書いているものがなくて苦労しました。

$facebook->destroySession()を使うわけですが、Facebookログアウト後に呼び出すところがポイントです。

calePHPのサンプルコードですが、cakePHPでなくてもほとんど同じです。
getLogoutUrl()のnextパラメータにFacebookのセッションを破棄するページのURLを入れています。

参考:http://stackoverflow.com/questions/8405729/facebook-php-sdk-caching-user

【WordPress】画像がアップロードできない(初歩的なことを疑え)

サーバーを引越ししたりすると、古い設定などが影響したエラーがよくでます。
そういうのはちょっと特殊だったりするので検索をかけてもなかなか同じ問題にあたった人が少なかったりして解決が難しかったりするのですが、WordPressであれば素がPHPなので自分で解決することができます。
でも苦労してソースを追いかけて、わりと簡単な原因だったよ、とほほ、ということが私の場合多いのですが、今回もそういうケースです。

WordPressで画像をアップロードできない

WordPressの入ったサーバーを専用サーバーからVPSサーバーに変えました。
コンテンツをコピーして運用を始めたのですがWordPressのメディアアップロードでエラーが。

「ディレクトリ uploads/2013/05 を作成できませんでした。この親ディレクトリのアクセス権はサーバーによる書き込みを許可していますか ?」

当然、ディレクトリのパーミッションをまず疑いますわな。案の定、その他に書き込み権限がなかったので権限を付与。

それでもエラー変わらず。

検索かけると、セーフモードが原因というのもけっこうでてきます。
セーフモードはPHP5.4から削除された機能で、なんだかよく分からないのですが削除されたんだからいらない機能なんでしょう。
php.iniをみるとOffになってるので今回は関係ないみたいです。

さあvar_dumpしてみようか

検索かけても解決方法が分からないので、デバッグ開始します。
とりあえずブラウザアップローダの方が分かりやすそうだったのでwp-admin/media-new.phpから。

この中で$_FILESを表示させてみると、この段階でエラーになってました。
自分の作った.htaccessには

とアップロードする画像の容量を増やしてるのですが、これが何か悪さしてる?といったん消してみると成功、でも何が悪いのか分からず戻してやるとあらら、成功。$_FILESがエラーになってたのは何かの気の迷いに違いない、ここはOK、とデバッグの続きを。

media_handle_uploadの先をみます。こういうとき、PHPStormはCtrl+クリックで関数にジャンプするので便利です。wp_handle_uploadの中の

でひっかかっていました。wp_upload_dirにとびます。
この関数の最初のほうで$upload_pathを

と取得しています。
どうやらここが目指すアップロード先ディレクトリの格納場所のようです。$upload_pathは古いサーバーのパスをとっていました。
get_optionをのぞいてみると・・・あれれ、SQLを発行してDBから取得している!?あ、そうか、管理画面で設定している値なんだな!と気づいて管理画面。

犯人はダッシュボードの設定、盲点!

「設定>メディア」の中に、アップロードする画像の格納場所として、古いサーバーのディレクトリを絶対パスで設定してました。デフォルトはwp-content/uploadsと書いてあるのでそれに変えて画像をアップロードできるようになりました。

それからブログを書くために前の状態に戻そうと設定画面を確認したらアップロードする画像の格納場所を設定する箇所が消えていました。
特定のバージョンのWordPressだけで設定できた値なのかもしれませんね。

【jQueryMobile】data-themeをJavaScriptで変えたい

jQueryMobileのdata-themeを変えるやり方をみてみました。

http://stackoverflow.com/questions/7667603/change-data-theme-in-jquery-mobile

が参考になります。

展開用のボタンをクリックすると色が変わるようにする例です。buttonMarkupはbutton(‘refresh’)をしなくても画面上に反映してくれます。

なおbuttonMarkupはdata-role属性にbuttonを持ったaタグなどをボタンに変えるメソッドで、button要素にたいしては効きません。

buttonに対して書くとしたら

のようになりますが、hoverの対応とかもあるし、ちょっと大変ですね。

facebookAPIでapi()を認証に使うとセッションが切れてしまう

たまにアプリからのfacebookログイン失敗してるけどなんなの

cakePHP(v2.2.2)にFacebook SDK for PHP(v.3.2.2)を入れてFacebookへのログインを実装しているのですが、1度目Facebookへのログインボタンを押してもログインせず、2回目押すとログインするという現象が起きましたので原因を調査しました。

問題のソースはこんな感じ。

Apacheのエラーログをみると

と記録されています。これはSDKの中にあるbase_facebook.phpの

によるものでした。stateがいつの間にか消失してしまったようです。stateは単純にSDKの中でログインURLを取得する際に

と生成するもので、セッションに入れておいてリクエストを受け取ったクライアントがリクエストを送ったクライアントと一致するかのチェックに使われています。このstateがどこで消えたのか追っていきました。

犯人はfacebook->api()

結果、Facebookへのログイン状態を確かめるfacebook->api()で消えていました。

facebook->api()を使うのはこことかの質問サイトでみつけたやり方で、facebook->getUserだとfacebookからログアウトした後もクッキーからログインし続ける、または逆にfacebookにログインしていてもユーザーIDがクッキーのために返ってこないことを回避するためにfacebook->api()を使うんだとか。(実際はfacebook->getUserで問題なかった)

facebook->api()のソースを追うと、OAuthで例外エラーがでたときにセッションを破棄しています。ここまで追っていったところで流れが追いきれなくなってきました・・・。

getLoinUrlの前にapi(‘me’)でログインチェックするのはやめよう

整理しますとfacebookでログイン状態、自分の作ったアプリでは未ログイン状態で画面を表示すると、アプリ認証がまだなのでfacebook->getLoginUrl()が実行され、stateがセッションに保存されます。このままログインすればいいのですが、問題の起きるパターンでは、ここで同じページを再度読み込みます。すると再度ログイン認証facebook->api()が行われ、セッションを破棄したうえでログインURLを生成するため、認証先でエラーとなるというわけです。

認証チェックはgetUserを使う、てかそれが普通だった

facebook->api()を使ってこの現象を回避する方法が思いつかなかったので、結局facebook->api()はやめてfacebook->getUser()を使うことにしました。テストしたところ、ちゃんとfacebookのログイン状態と連動した値を返していました。

そしてSDKのreadme.mdをみますと、ちゃんとfacebook->getUser()を使って0以外が返ってきたときだけapi(‘me’)を使うようになっているじゃありませんか。これみて作ってれば最初からこんなエラーはぶち当たらなかったはず・・・。

そんなわけで、普通はこのエラーには当たらないと思います。ただ解決までけっこう時間がかかってしまったのでドキュメントちゃんとみないとだめですよという教訓としてブログに載せてみました。

【cakePHP】コントローラからViewファイルを使う

cakePHPのサイトでユーザーにメッセージを送るときに、テンプレートファイルで内容を用意しておきたいな、と思ったもので、コントローラーから好きなViewファイルの内容を変数に入れるのをやってみました。CakeEmail.phpを参考にしました。

コントローラのアクションの中で

フォルダ名は既存のものに階層を掘っても(/スラッシュが使える)新しく作ってもかまいません。ファイル名のtemplate_nameを書き換えることで好きなViewファイルを使えます。

レスポンシブウェブデザインのコーディングを担当したサイトリリース

tamasyu

おもっさまミカメジャーナルにも協力していただいているデザイナーのサイトがリニューアルされました。今回コーディングを担当しました。

これまでもこのサイトはFlashでかなり動きのあるおもしろいサイトだったのですが、今回はスマートフォンやipadにも対応させるためシンプルにいくということで、どの画面サイズ、比率でも対応できるようレスポンシブウェブデザインにしました。

http://tamasyu.com