2013年12月10日火曜日

1年のまとめの第一歩

そろそろ今年の成果は何だったろう、と振り返りたいけど、
この投稿が示すとおり、間が空くときは平気で空く…

後半は特にあっという間に過ぎてしまった

まあしいて自分用にまとめると


  • 私にとっては事実上のPHP元年(仕事で正式にアサインされたもとして)
  • 同じくSymfony2元年
  • 前までlinuxはOS Xでやったつもりになっていたが、lampで組み立てるものを使うようになって、また違う世界を知った気がする。やっぱりAppleはAppleの癖があるというか
  • フレームワークを使うことでこんなに速くいろいろできるもとは知らなかった
  • スマホアプリは結局凍結
  • 習得は本はあいかわらずMySQLのをちょっと買ったくらいで相変わらずgoogleだのみ
  • サービスとか色々手を出してみる癖がついた反面、相変わらず浅い気がする…

やっぱりスマホはもうちょっとやりたいのですが、
どうしても案からすばやくモノに仕上げる前に色々悩んでしまうタイプです。
あとjavaの時に比べてあまり深く考えずに画面側実装を早い時間でやるようになったせいか
フロントエンドがやっぱり面白い、と感じるようになったかな

と、これもまだ第一歩かなと思うので
年末くらいにもっときちんとまとめたいです

- by Mizuk

2013年9月24日火曜日

innodb-memcached(centos 6.4)

公式ドキュメントを見ると

/MYSQL_HOME/share/innodb_memcached_config.sql

でセットアップするだけ!

みたいに書いてあるんだけどcentosでのMYSQL_HOMEがわからず
/etc/my.cnfにセットしてあるかと思ったらなくて

色々けんさくしていたら


/usr/share/mysql

の中にあるというので自分の環境でみてみると
色々xxx.sqlがあって、でも目当てのスクリプトがない。


で、もう1回検索したら、
mysqlは5.6系でないといけないけどCentOS6.4にインストールされているのは5.1系、
なので


というので、今度試してみたいと思ったところで時間がなくなった。


- by Mizuk

2013年8月25日日曜日

Doctine2のEntityをlazy loadさせない

Symfony2標準のDocrine2がクエリを投げるとき、
Entityで外部参照のものがあるときなどで
Entity本体でなくてProxyというオブジェクトが代わりに返ってくるのは、
パフォーマンスのための柔軟性としてそう設計されている、と言いつつ、
気づかないで結構へんな詰まり方をしてしまう。

通常はinner joinを使うことで回避できて、
それは呼び出し側が外部キーのカラムを明示的に持っていればSQLとしてそう書けるのだが、
私がやりたいケースでは、
mappedByという形でアノテーション指定している側()が呼び出し側になってしまい、
そのエンティティだけを読んだ時に全部呼びたいのに、
やっぱりProxyが代わりに読まれてしまうという問題に出くわした。


解決策としては、最終的な処理で初めて全てのSQLが走って本物のオブジェクトが得られるlazy loadではなくて、最初から読むeagerにすれば良い、はずなのだが、

Entityのアノテーション属性のfetchにEAGERと指定する方法

と、

EntityManagerのfetchModeを"EAGER"とする方法

があるようで、
そもそもentityにアノテーションで書いてある場合には、
前者のほうがすっきりするようだった。
もちろん、その分遅くなってしまうというのはあると思うが、
今のところ私の扱っているエンティティは
レコード数、更新はそれほどないようなので、
とりあえずこれで様子を見てみようと思う。

- by Mizuk

2013年8月20日火曜日

centos6 に pecl-memcached

一度やったことをあるのをもう1回やろうとしてやっぱり見事に同じようなところでつまづいて時間がかかってしまったのでメモ!

PHPからmemcachedを使うときのコンポーネントの構成も含め、いちばんうまくまとまっていると思ったのはここ。

http://melikedev.com/2012/06/19/centos-php-install-memcached-with-a-d-stack/


違いといえば、私がやったときは、

./configure

には特に難しいオプションが要らなかった。


あとは、libmemcachedとphp pecl memcachedのバージョンはきちんと対応したのを、
と言っているが、私の場合は、

CentOS6.4
PHP5.3.3

に対し、

libmemcached 1.0.4(libmemcached-1.0.4.tar.gz)
pecl-mecached 2.0.0(memcached-2.0.0.tgz)

libmemcachedのほうは、ここからバージョンを選べるんだけど、
pecl-mecachedのほうはChangelogからたどっていったら、うっかり最新(2.1.0)をDLしてしまって、
インストールしたら
最後にmemcachedが有効になっているかを確認するphp -mを打つたびに、
memcached_server_minor_version in Unknown on line 0
というのが出てきて、まさに前に他の環境でやった失敗を繰り返してしまった。

Available Releasesからでないと指定したバージョンをDLできないよう。




まあmemcached使って何するかというところが
まだ見えてないうちにこういうところで時間かかって
夏ばてとかしてる今日このごろなんですが…


- by Mizuk

2013年7月7日日曜日

twitter bootstrapのbtn-groupで定義されたチェックボックスの値をSymfony2で扱う

覚え書き。

twitter bootstrapではチェックボックス、ラジオボタンのような選択型で
普通のinputタグの書き方ではなくて btn-groupというクラスのdivの中に
選択肢の要素を書くようなコードになる。


<div class="btn-group" data-toggle="buttons-radio">
<button type="button" class="hoge btn">選択肢1</button>
<button type="button" class="hoge btn">選択肢2</button>
<button type="button" class="hoge btn">選択肢3</button>
:
:
</div>


これでそのままフォームをsubmitしても何もとれないので、
submitのタイミングなどでjavaScriptでactive(btn-groupの子要素内で押下したボタンのclassにはactiveがつく)を拾って値を整形しなおすようにしている。

var selected =  $('.btn-group button.btn.active').val();

これでradioなら1つスカラー値が、checkboxならカンマ区切りで選択した値がまとめてとれる感じだったと思います。

で、このselectedの値を別に用意したinput hiddenタグなどに入れなおして、submitと。

ここまではstackoverflowに書いてあった。


それでそのhiddenで渡す値をSymfony2でどうするか、なのですが、


[1. submit側]

formTypeで定義した名前を使ってパラメタにしないとバインド時に値を取得してくれないので、

<input type=hidden name="{フォームタイプ名}[hoge]" >

formTypeの中のbuildFormでhogeがaddで指定されていて、フォームタイプ名はgetName()の戻り値として指定してある感じで。

のように、ちょっと手作業的な書き方をしてるのですが、どうなんだか。


[2.出力側]
ちなみにフォーム値から書き出すときは本当はフォーム出力のテンプレート側で定義すべきなんでしょうけど、出力ページによってフォーマットが微妙に異なったりするので、出力側のtwigには


<div class="btn-group" data-toggle="buttons-radio">
<button type="button" class="hoge btn{%if (hogeval == 1)%} active{%endif%}">選択肢1</button>
<button type="button" class="hoge btn{%if (hogeval == 2)%} active{%endif%}">選択肢2</button>
<button type="button" class="hoge btn{%if (hogeval ==31)%} active{%endif%}">選択肢3</button>
:
:
</div>

hogevalはコントローラ側から渡している値…
もうちょっとエレガントに書きたいですが、実際結構こうなってしまったりする…


- by Mizuk

2013年5月25日土曜日

flat design

フロント側はtwitter bootstrapにかなり依存しつつある今日この頃ですが、

皆使うから派生プロジェクトがすごいですよね。

Symfony用とか。
こんなに便利なものがたくさんあると言っても、逆に何を選んだらいいのかと。

私は実はものすごくフロント寄りの人ではないので、
twitter bootstrapがデザインの細かいテクニックやデザイナーの細かな意匠に依存せずに
最低限の努力である程度の質を保証してくれて、
なおかつあとからメンテナンスが楽でありますように(クラス名とかそれにまつわる参照の仕方に一貫性があって、後から色々ルールが変わったりしませんように)、という思いなのですが、
まあそんな中で現在伸びてほしいなと思ったのがこれです。

Flat Strap

時代はフラットデザインらしいです。

フラットでかつ『ミニマル』。
そういうのが楽そうでいいと思いますが。

少なくとも技術者ポータル系はしばらくこういうのでいいんじゃないかと思います。
ということを期待して、勉強中

- by Mizuk

2013年5月8日水曜日

Symfony2

まあ色々あって、Symfony2というwebフレームワークを勉強中。

以前はJava Strutsをやっていましたが、
その時はMVCっていうのがぱっとしなかったのですが
いくつかフレームワークをつまみ食いするうちに、
なんとなくこんなものなのか…?
というのが見えてきたのかもしれない、
ぐらいの気持ちです。

本家はこちら
http://symfony.com/

日本語
http://docs.symfony.gr.jp/symfony2/

PHPメンターズのTIPS
http://phpmentors.jp/search/Symfony

良さそうな点

- PHPで書けるので言語を学ぶのが比較的楽?
- アップデートが盛ん(それは場合によっては短所にもなるか?)
- Profilerというブラウザ上でのデバッグ情報確認のしくみがあり、各画面を出したときの、SQL統計や送信メール、エラーなどがブラウザ上で確認できる(ちょっとかっこいい)
- Django, RoRなどのMVCモデルをもとにしたクラス構成とコマンド群なので、そういうのをやっていれば既視感あり


苦しい点

 - 日本語のドキュメントが少ない。本もほとんどない。
 - 英語版公式ドキュメントも、
 - 使っている人があまりいない(雰囲気)。もともとSymfonyではわりとユーザーがいたのが、2で離れてしまったという話も

といいつつ、JavaのStrutsに苦しめられてきた自分としては
何だか新しい世界のように見えて今はまだ勉強を進める気があります。
セットアップは最初は面倒ですが、
いわゆるLAMP環境のセットアップをしたことがあれば
なんとかなった感じでした。
PHP, Apache, MySQLでOSは必ずしもLinuxでなくてもいいようです。


もともとフランス生まれ(Sensio Labという会社)ことで、
セミナーなどは本国やヨーロッパではやっているらしいが、
日本の勉強会は最近少ないみたい…
まあ代金みたら相当なものだったので、
自分でやるのが無難かとは思いますが


- by Mizuk

2013年4月22日月曜日

CSS Nite beginners HTML5 + CSS3 #5参加しました

あまりこういうものに参加したことがないのですが、
なかなか盛りだくさんでよかったと思います。

やっぱり生で講義を聴くと、
全然吸収が違いますね。

いちばん面白かったのは、羽田野太巳さんの間違いから学ぶ「HTML5マークアップの基礎」です。
やっぱりHTML5ってそうですよね!
とか思いつつ勉強の追いつかない自分です。

次も申し込みましたが、返信が来ない!
と思ったら、PayPal支払い後、
自分でフォームを使って連絡するんですね。
失礼しました…。

- by Mizuk

2013年3月16日土曜日

スマートデバイスで電子新聞 その2

前回の電子新聞比較のポストから1ヶ月。

何気なく読み続けてみました。


やっぱり操作性と予測に反しない感じで無難なのは日経。

地味ですが、ある意味集中しやすい気がします。
ただ新聞の内容が読みたい、テキストが読みたい。
余計なものは要らない。
Kindle TouchとかがKindle Fireより本が読みやすい、という理由と
おんなじような感覚で
新聞を読んでいるというよりかは、
質のいい人力情報アプリ、といった感じか。
会社とかで共有スペースがあって、そこにタブレットがある、
とかでしたらたぶんどちらかというと日経を入れる気がします。

ただタブレット版も通常スマホ版もあまり変わらないようなので、
これはスマホで手軽に新聞の内容がフォローできる、
と考えたほうがいいのでしょうか。


朝日はギミックは面白いですが、
そこにこだわって中の各種の機能の整合性がとれてないのでは、
と思えるUI/UXがときどき見受けられます。

たとえば、記事を直接読める通常面と記事一覧とがあり、
各記事を読むときはどちらも個々の記事のページにとぶのですが、
記事一覧から読むときは読んだ記事がグレーアウトされていって
どこまで読んだかがわかるのに、
通常面からのリンクで読んだものはそうならない、とか。
あとは段組の仕方が印刷物を意識しているので、
小さい画面だと読みづらかったり。

ダウンロードしてアーカイブできる量がけっこう多い(1週間とか)なので、
まとめ読みとかする人はうれしいのかもしれない。
あと、各地域版(関東だけでなく、東北版、近畿版など各地域)の記事も読めてお得感。
通常の新聞の紙面のような画面構成なので、絶対タブレット版がおすすめです。

紙面ビュワーも最近出たみたいですが、
私は印刷したものを取り込んだ段階でどうしても紙には負けてしまう気がするので、
個人的にはあまり気にかけませんでした。


あと、こういう話はあまりしたくないですが、
解約の時にどういうことが起きるのか、
ちょっと気になります。
紙の新聞みたいにしつこくフォローが来るのか、とか。
まあ電子的にやる分、気楽ではあるとは思いますが。


というわけで、皆様のお宅にもどうでしょう。

- by Mizuk

2013年2月19日火曜日

あの会社の新ロンドンオフィスを見学しました



先週ロンドンに行ってきました。

日本で知り合いになっていたIT系の友達(オランダ人)に会った。
昼食、パブ、と行った後、次どこ行こうか、という話になり、

「じゃあg○○gleのロンドンの新しいオフィスを見せてあげよう」
「えっ」

ということで見せてもらいました。
全然準備も何もしてないし、この流れでなぜそうなるのか、
という感じでしたが…



動画のまんまのオフィスでした。

私が連れて行かれたのは、
ロンドンにあるいくつかのオフィスの中でも、
セールス系の人中心のオフィスで、比較的新しいものだったらしい。


まずは受付でゲスト用のIDカードを発行してもらう。
いちおう名前を言う。
受付のおねえさんは日本人の名前なんかスペリングできないので、
アルファベットで一文字ずつ。
名前シールを発行してもらい、コートの胸部分に貼り付け。

上の階にもう1個受付があるのだが、
木の床にところどころでかい液晶が埋め込んであり、
踏んでいいの?とか気になる。


最初に通されたのはカフェテリア。
既に午後だったのであまり人はいないようだったが、
噂通り好きなようにお菓子やらミネラルウォーターやら持って行っていい、
ということで、私もおつまみふた袋(写真)と、ミネラルウォーターを持っていった。


おつまみはきちんと社名ロゴが入っているので、
同業者におみやげに…と思ったが、一袋は帰りにやぶけて途中で食べてしまった。

カフェテリアからテラスに出ると、ロンドンの町並みがぐるりと見渡せる。
こんな立地のいいところにこれだけのオフィスを構えられるのは、
やはりあの会社だからなんですね。



続いてスタジオ(なにかの撮影中だったらしく、入れなかった)や、
会議室やら見せてもらうが、とにかく広い。

スポーツジムもオフィスの中(?)というか、
同じビルの続いた階の中に入っていて、
全部ガラス張りでまたロンドンの様子が一見でき、
もちろんそれも眺めがよいよい。
どのへんにどんなランドマークがあるのかが、
窓にプリントされた白いガイドみたいなので示されていて、
それもまた贅沢感があった。



円形の図書室にはほら穴のようになっている個人スペースがあったり、
薄いレースのカーテンで囲まれたソファスペースは、
これはむしろ住みたい、と思わせるリラックマ空間だった。


最後はもちろんトイレも見せて(使わせて)もらいましたが、
もちろん全部きれい。
扉内側に何かの社内活動の張り紙なんかもしてあり、
中学か高校か?のようでした。

と、小学生なみの感想でしたが、
やはりアンリアル感がハンパない訪問でした。


また見学行きたいな。


- by Mizuk

2013年2月6日水曜日

スマートデバイスで電子新聞

紙の新聞はとってないのですが、実家に帰ったりすると新聞を読むってなんか気持ち的な余裕を作るのにはいいなあと思って、電子新聞を購読し始めてみました。

単に新聞社のポータルをWEBで見れる、というのはどこでもたいていやっているみたいですが、

電子版だけで購読できる(紙媒体と一緒でないとNG、というのでない)
スマートデバイス用にアプリがある

というのはいまのところ朝日と日経だけのよう。

まずは、購読開始したときに送られるようになった、ヘッドラインメール。



確かにヘッドラインとしては見やすいが、
既に日々よくわからないメールが送られ、戦っているときに
こういうメールが送られてきても、結局あまりそれ以上は読みすすめられない気が…

なので、両者ともしばらくして配信停止しました。





ちなみに、メール中のリンクをクリックすると、WEBページにとんでしまう。
アプリが開いてその中で見れたりすると、よりスマートな感じがしそうです。






朝日は本物の新聞のような段組レイアウトがデフォルト。
正直スマフォの画面サイズだと、文字数に制限がありすぎて、見通しは良くない。

日経は普通にスマフォのメニューアイテムが並ぶインタフェース。
無愛想だけど、探しやすい。(読んだ後、グレーになるので既読とかもわかる)







朝日はタブレットサイズになった時に、ちょうどいい感じかもしれない。
また、GUIにちょっと冒険的な部分が多い。
右上の時計アイコンをクリックすると、こじゃれた懐中時計のようなものが登場。




下のスケールで時計をずらすと、
その時間分だけ前の新聞の一面(?)が表示される仕組みらしい。
これは確かに電子版でこそ、といった感じ。


スクラップしたり、オフラインで読んだり、のあたりの機能は
両者とも備えているよう。

広告は、ページを数回めくると、途中で広告のページになる感じで、
どちらかというと朝日のほうが頻繁に表示されている気がした。


個人的には、
これは有料版だったら無料版よりも広告の表示に制限を入れてもいいんじゃないかと思います。


今は2つとってますが、
月額購読料は

朝日 3800円
日経 4000円

と、まだまだやさしくない。
紙新聞とセットだと1000円プラスぐらいなんですが…




- by Mizuk

2013年1月14日月曜日

バッテリーの取り外せないデバイス


デバイスが小型化するのはいいんだけど、
バッテリーが取り外せないのって期間限定的な感じがして、
あまり好きではないです。

自分で交換できないとなると、
やはり一度メーカーに渡さないといけなくなるのだろうけど、
やっぱりなるべく手元から手放さないからこそ、スマートデバイスなわけで、
そうすると電池交換のためにどこかに出したりしないといけないというのは、
どうにも悲しい。

ちなみに、
左端から下へ順番に、

PSP go (ゲーム機)
game boy micro (ゲーム機)
Kindle touch (電子ブックリーダー)
Nexus 7 (androidタブレット)
Kobo touch (電子ブックリーダー)
HP spectre ENVY 14(ウルトラブック)
MK5000-BK(Nexus7用bluetoothキーボード)

確かにこうしてみると、
どうしても極力軽量化しなければいけないものだというのは納得だけど、
何か共通の規格のバッテリーなどがあったらいいのにな、
とも思います。
確かにあと何年使うかわからない、というものもあるんだけど…

- by Mizuk

2013年1月4日金曜日

年末年始Androidアプリ製作

年末年始は絶対やる!
と思っていたAndroid関連開発。

考えていたのは、


1.ゲーム(Androidネイティブアプリ)
2.HTML5/CSS3/javascriptによるアプリ

1.に関しては昨年から読んでいるAndroidゲームの本「Beginning Android Games」を参考にしていましたが、とりあえずできた無人島ゲームprototypeが、こんな感じ。


最初の無人島メニューにボタンが3つ。左から、ベッド(休む)、冒険、製作。




冒険モードではタップして距離を進めていく。(数字は進んだ距離)
途中で、材木とかを拾う。

で、その材木やら何やらで船を作って、最後には脱出!
写真はnexus7で動かしていますが、SHARPのIS05のような小型のAndroid端末でも普通に動きました。






アイコンだけは先に用意した。

ですが、やっぱりこれは汎用的なAndroidアプリ開発の勉強にはならないです…

だって、
Activityは一つしかないし(その中で独自のゲームのループを動かして画面表示などもする)
Viewに通常使うようなリストやボタンの要素はない。

        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);

のようにすることで、一画面フルにまるまる使えるようにする、
という決断をした時点でそうなってしまうようです。

繰り返すようですが、本当に市販のゲームっぽいものを作りたい、という人はこういうところが知りたいのだろうとは思いますが、そうじゃないサンプルも少し入れてほしかったな…

反面、画面サイズに依存しないグラフィック表示などはしっかりサポートしているので、
小さめのリソースで、どんな端末でも同じような操作感覚にするタイプの
ゲームは作りやすいよう。

なのでこれはこれで進めつつ、他の4.0系(Icecream)以降のアプリも作っていきたいです。


あとは、2つめは
ですが。


こんな感じ。
まだサンプルのままですが、
動作は最初の読み込みがタブレット(nexus 7)でもちょっともさっとする感じがしましたが、
やはり一度コンテンツとしてサーバーに上がっていれば
web上のsaasアプリのような感じで動くと思うと、
工数はこちらがかなり小さいように見えます。



- by Mizuk

Android端末の領域確保


タブレットはともかく、
日常使用のAndroid携帯でデバッグをしていると、
意外とすぐに容量不足になることが判明。


ということで、App2SDというユーティリティアプリをダウンロード。
簡単なUI操作でアプリをmicroSDに移動できた。

SDカードに移動できる、できないアプリを
分けて表示してくれる、というのは便利。

どれくらい減ったかというと、

Amazon Kindle 20 MB くらい
BBC News 4MBくらい
App2SD 2MBくらい

たいしたことないようで、
けどKindleとかは本ごとに容量が増えそうなので
SDに移動できることに気がついてよかった。


あとはアプリのキャッシュ消去もついていて、
こっちのほうが普段は便利なのかもしれない。


まあどうせならfacebookあたりをSDカードに移動したかったのに。

- by Mizuk