2014年7月19日土曜日

ちゃんとご飯を食べてくためにプログラミングを学ぼう

子どもの6人に1人が貧困! 不登校、引きこもりの要因にも

子供の貧困率が16.3%で過去最悪だそうです。
その一方で、世の中人手不足だそうで。
「2015年問題」はあなたを直撃するか?
IT業界だけじゃなくて他の業界も人手不足だそうで。

いったいなんなんだろうと思いますが、
なんだか、「欲しい人」がただいないだけで、
「いらない人」には働き口も与えてあげない、そんな冷たい社会なんだな、と思います。

気になるのは、家が貧困のせいで十分に学ぶ機会が与えられない子供たちです。生活ほどの受給も厳しくなってるし。
貧困とかでいじめられて学校行けないとか。
せっかく税金払って学校でいけるようにしても、クラスメートからいじめとかね。ひどいですね。(まあ、いじめなんて子供よりも大人の方がひどいしエグいですけどね、ほんと。)

でも、そんなんで学ぶことができなくて働き口がなくてどうしようもないとかそういうふうになってほしくないんです。
なんとかしてほしいんです。

で、思ったのが、コンピュータのプログラミングを学んだらどうかと。
あれって、人間の頭で考えて作るもので、基本的に自動化できないので、
これから先も使えるスキルにになるとおもいます。
(ロボットにおきかえられてたまるかってんだ!)

図書館で、なんでもいいので、プログラミングの本を手に取って読んでみましょう。
学校に行けるならば、学校のパソコンを使いましょう。
学校に行けないならば、図書館でもパソコンが使えるところがあるそうなので、図書館に行ってみてください。
ブラウザとメモ帳があれば、JavaScriptの勉強はできます。
それでもダメなら、もう紙と鉛筆でがんばりましょう(発展途上国はパソコンが与えられないので、こうやって勉強してる国があるそうです。)楽しくないかもしれませんが、がんばれば後に役に立つと思って。

プログラミングができれば、それでお仕事ができると思います。
学歴がどうのこうの行ってくる会社とかはダメな会社なのでこちらからお断りしましょう。
もちろん、プログラミングは学び続けなければいけない大変な仕事です。だから、がんばって学んで行きましょう。

これ、届けたい人に届くといいなぁ。

2013年12月12日木曜日

Androidアプリプログラマとして振り返ってみる

Android Advent Calendar 2013 12日目の記事です。

勢いでAdvent Calendarにエントリしたものの、最近新しいことあんまり触ってないし、
ndkでいろいろやっているのですが、記事にするほど自分の中で整理されていません。
前日までのエントリでみなさんとてもおもしろい記事を書いていてどうしたものかと思っております。

ただ、Androidアプリプログラマとしてもう3年以上も立つ訳で、これを機会になにをやってきたかを整理してみたら、
なんだか車輪の再発明的なことをたくさんやってきたような気がします。
ただ、実装しているときにはそれは気がついておらず、後で結果的に車輪の再発明になったものがほとんどでした。

今回はそれについて振り返ってみようかなと思います。

DownloaManagerrの実装

昔ブラウザアプリを作っていたのですが、
その当時Android2.2ではDownloadManagerというものはなく、
自分で実装する必要がありました。

そこで、Link先のMIMEタイプがpdfだったりdocだったりしたら、
Threadをつくり、その中でHTTPのgetでデータを取得し、
OutputFileStreamでデータをファイルに書き出すということをしました。
もちろん、Notificationに進捗率の表示だったり、タップしたらキャンセルを行うという処理もしました。

これが面倒くさかったのは、エラー処理をいろいろしなければいけなくて、
  • SDカードがないとき
  • SDカードが途中で引っこ抜いたとき/マウント解除したとき
  • 通信が途中で切れた時
などなど、例外処理やらif文でエラー処理やらを行わなければなりませんでした。

2sprintなので、だいたい1ヶ月ぐらいの実装でしたが(今考えると結構時間使ったなぁ。)、
最後の最後まで、テストしてエラー処理を追加してを行っていた気がします。

しかし、Android2.3からはDownloadManagerが使えるようになったので、
Android2.3以降はこの実装は使う必要がなくなったわけです。
もっと早くDownloadManagerが使えるようになってればこんな苦労はしなかったのに。。。。

FaceBook型メニュー(Drawer)の実装

Facebook型のメニューは
  • RelativeLayoutにViewを2枚重ねる
  • 左上のメニューボタンを押されたらTranslateAnimationで上のViewを左に移動
  • アニメーションが終わった時点で、View.layout(メニューの幅、0, view.getRight(), view.getBottom())で上のViewを左に余白を作ってlayoutして、requestLayout()
  • closeはその逆
をして実装しました。
(実際はいろいろ細かい小細工をして苦労させられました。。。)

こちらは、AndroidではNavigation Drawerと呼ばれ
今は、DrawerLayoutを使って簡単に実装できます。
http://developer.android.com/training/implementing-navigation/nav-drawer.html

当時はこれ実装するのはすんごく苦労したんですよ。。。

Pull to refreshの実装

あのtwitterアプリでおなじみの引っ張って更新する
pull to refresh。
これも頑張って実装しました。

これは、上のツールバーにViewを隠しておいて、
コンテンツのViewをスクロール可能だったらコンテンツのViewにイベントを流して
スクロールさせ、
スクロールできないところまでスクロールしたら、
今度はイベントをコンテンツの外側のLayoutに渡して、余白のViewをすこしずつ下にさげるという実装だった気がします。
イベントをどこに渡すかどうかの判断はonInterceptTouchEvent()だったかな?
ここら辺の実装はすごく苦労した割にはよく覚えていないのです。

ただこれはいろんあバージョンをつくってためしてみました。
ListViewを使った結滞な実装もありました。

しばらくはこの自作のpull to refreshを使っていたのですが、
あるとき、スクロールがかくかくするというバグが発生し、
そのときボスが見つけてきてくれた
https://github.com/chrisbanes/Android-PullToRefresh/
と置き換えてためしてみることになりました。
今は有名なライブラリですが、当時はあまり使われていなかった気がします。

試して見たところ、実は原因は別のところにあったようで、
動作的にはあまりかわりませんでした。
(実装見てみると、自分が書いたコードとほとんど似たようなものだったので、
当然ですが。)

で、結局オープンソースのライブラリの方が安定していていいだろうということになり、
私が作ったコードは使わないことになってしまいました。
これは悔しい思いもしましたが、
今思い返すと最初からライブラリを探していれば、その工数をべつなことに費やすことができたのでは・・・と思ってしまいます。

まとめ

今は必要で一生懸命実装しても
  • 後々そのコンポーネントが標準で用意されるかもしれない
  • オープンソースでライブラリがあるかもしれない。
ということがあります。

前者は逆に言えば後方互換性をかんがえると実装しておいて損はないと思いますが、後者はオープンソースのライブラリを使用できれば工数を大幅に削減できるはずです。
ちょっと難しいUIを実装する時は、GoogleなりGithubなりつかって、同様なことを実装しているライブラリがないか必ず探すようにしましょう。
最近はAndroidオープンソースライブラリ徹底活用(http://www.amazon.co.jp/dp/4798040029/ref=cm_sw_r_tw_dp_IFYPsb1MYGA62)
やAndroidライブラリ実践活用[厳選111](http://www.amazon.co.jp/dp/4774161284/ref=cm_sw_r_tw_dp_KGYPsb0JBRP63)のような本も出ていますので、手元においておくといいと思います。

ただ、こういった「あのとき苦労したけど、苦労する必要がなかったのでは」的な実装をしても、自分自身では難しい実装を体験することによりスキルアップにつながりました。
今ではちょっと凝ったUIでもそれなりに実装できるようになりました。
もし工数が許すのであれば、自分で実装してしまうのも一つの選択肢かもしれません。自分で実装すれば、その部分のカスタマイズが必要があるときにすぐに対応できるという利点もあります。

結論:頑張って実装したら、その努力そのものは無駄にはならない。


以上、本日のAndroid Advent Calendarに記事でした。
お粗末様でしたm(_ _)m

2013年12月4日水曜日

ng-mtg#4 AngularJS勉強会 に行ってきました。 #ng_jp

12/3に行われたAngularJS勉強会に行ってきました。
そのメモを載せておきます。
本当は整理してからと思ったのですが、結局整理して書こうとすると何も書かずに終わってしまうので。
気が向いたらきちんとまとめます。
あと間違いがあればご指摘いただければ修正します。



ng-mtg#4 AngularJS勉強会 2013/12/03 @サイバーエージェント

# 動機
* 最近JavaScriptの勉強していて、クライアントサイドのJSライブラリを習得したかったから。
* 勉強してみてAngularJSがよさげで、さらに理解を深めようと思ったから。
* 最初は簡単だけど、ちゃんと勉強すると難しいと聞いて

# 自分の背景知識
* ドットインストール(http://dotinstall.com/lessons/basic_angularjs )
* tutorial(http://docs.angularjs.org/tutorial )
をひと通りいじってあとは適当にアプリとかつくって遊んでいる状況
本格的にアプリつくっているわけではない

# 内容
## introduction
* 金井さんから説明

## AngularJS 20min @naoya_ito
https://speakerdeck.com/naoya/angularjs-20min-number-ng-jp
初心者向けにチュートリアル的な内容。AngularJSの特徴/主な機能の説明がメイン

* AngularJSがBackbone.jsよりもgithubで★がたくさんついてる状態
* JavaScript "MVW" Framework (Model View Watever) (MV* の議論の無駄 )
* AngularJSの基本
** HTMLそのものがテンプレート
*** HTMLに ng-xxxを埋め込んで、jsがそれに対応する処理をする
*** $scopeがHTMLとapp(js)の橋渡し 
** 双方向データバインディング
** HTMLフォームを変えると$scopeのオブジェクト(app側の値)が変わる/$scopeが変わるとHTML側が変わる
** しかもリアルタイムに$scopeが変わる
* アプリがDOMの構造をしらなくてよい => HTML変更をしても動かなくなるようなことが起きづらい
* ロジックでDOMの構造を構築しないようにする
* 制約によってコードが綺麗に保たれる

* いくつかの機能
** angular-resource.js
*** サーバーサイドからデータを取得するのに使える
** フィルタがすごく簡単に書ける
** Form validation
*** 必須だとrequiredつけるとか、フォームに条件をつけてvalidation可能

* コンセプトとしてJavaScriptの構造を整理するというよりもHTMLを拡張して機能を追加している
* DIによってテストしやすい

* 雑感
** DIの仕組み
*** function()定義を文字列として扱っているから、$scopeをsとか書き換えてしまうと動かない
** JSONサーバーが後ろに控えたCRUDアプリ
** グラフィックやゲーム系が苦手
** 簡単に動かすまでは簡単だけど、本格的に学習するとコスト高め
** 制約やテストしやすさで複数人数での開発は向いてる?


## OnsenUIについて ~Angular.js+Topcoat~  Kruyさん/四方さん(アシアル株式会社)
OnsenUIがどういうものかの説明。デモ等が中心
OnsenUI => https://github.com/OnsenUI/OnsenUI

* AngularJSとTopcatを組み合わせたMobile UI
* モバイル向けのUIをHTML5で簡単につくる方法を提供したかった
** jQueryMobileだとUXがいまいち/ソースコードが冗長
* 簡単/使えるUIコンポーネント
** 独自タグをHTMLに書くだけ
** 基本的なコンポーネントがデフォルトで用意されている
* ぬるぬる動く
** CSSを利用して滑らかなアニメーション
* テーマ機能
** デザインの一括変更/Font Awesome/CSS独自カスタマイズ
* 独自タグでコンポーネントを定義して、属性でアニメーション等を設定している印象
* 今後
** Onsen UIのGUIツール「UIBuilder」の提供
** Webコンポーネントを公開・共有できるしくみ

## AngularJSを実サービスで使ってみて @sakatam
AngularJSを使った実際のプロジェクトの話
https://speakerdeck.com/sakatam/angularjs-mian-qiang-hui-number-4-shi-zhan-angularjs

* プロジェクト
** 3ヶ月
** Eコマースのリニューアル
** Mobile Firstアプローチ
** ついでにAngularJS
** うまくいった

* システム構成&人員構成
** 旧構成 => jsp/Java servlet , Legacy API(RPC), DB
** 新構成 => AngularJS APp/Node.js, Legacy API(RPC), DB
** 人員:AngularJS App => UXデザイナ2 Frontend JSエンジニア2 Backend jsエンジニア2
*** フロントエンドエンジニアがBackendも踏み込める/その逆も

* なんでAngularJS?
** backbone.js => 開発者の力量でコードの品質がばらつく等 スケールしづらい
** 柔軟性では劣る
** モジュール・ベースの開発を強制 (DI/Module・Directive)
** ビューとモデルの自動バインディングのせいでコントロールが単純化・コードのメンテナンス性が高い
** 開発がスケールし易い

* 開発フロー
** 基盤づくりに時間をかけた(3week)のが功を奏した
** チーム展開(2week)でFrontendエンジニアにしっかり慣れてもらった
*** FエンジニアはDIやモジュール志向に慣れてないため
** 開発イテレーションは一般的なウェブ開発とほとんど同じ
** テストファーストができるのがメリット (プロジェクトではUnit Testは必須にした/E2E Testはクリティカルパス確認用)

* 実戦投入次のTips
** 複雑なモデル・データの状態管理
*** モデルが複雑になるとAngularJSは管理してくれない => AngularJSの長所はシンプルなモデル
*** モデルを浅くして問題回避
** $rootScope $broadcast
*** 便利だけど使いすぎるとDIの意味がなくなるので危険
** 仮引数Minify対応の紹介
** リクエスト数の肥大化に注意する(モバイル等で)
*** ビルド時にバンドルする( webmake/angular-template)
** SEO/Crawwler対策
*** UserJSで判別してPhantomJSで対応

* ほどよい制約・モジュール化の強制
* Frontendエンジニアの底上げも


## 目指せ脱初心者!あなたの知りたかったAngularJS @agektmr
初心者が中級者になるためのセッション
AngluraJSの具体的なプラクティスの紹介(でもなんだかディレクティブの話が中心)

* Angularユーザの悩み =>ドキュメントが英語/Angular Wayがあるっぽい/日本語情報が少ない/相談相手がいない/ドキュメントがわかりにくい

* AngularJSでDOMをいじるには
** ディレクティブをつくる => ハードルが高い?
*** linkがあればDOMの操作はできる
app.directive('fileSelect',function() {
  return {
     link : function(scope, elem, attr) {  //elemはjqueryオブジェクト
        elem.bind('change', xxxx);
    }
  }
});

*** AngularJSはjqueryの機能を使える(JQliteというJQueryのLite版を持っている)
*** restrict:でタグ等を指定できる
** 独自タグを定義
<script type="text/ng-template"> でテンプレートを定義
*** templateUrlでテンプレートを指定すれば、定義したhtmlを呼び出せる

* コントローラ間で変数を跨って使う => moduleを使ってvalueに割り当てる
** デモ:http://demo.agektmr.com/flexbox/ 
* DOMの塊がオブジェクトとしてそのオブジェクトを誰が所有しているか

* Web Components
** 自分の独自のelementを作れる
* AngularはWeb Componentsをとりこもうとしている
* ディレクティブはPolymerに置き換わる
** Polymer.js (Web Componentsのは http://www.polymer-project.org/ )


## LT
メモなし

# 懇親会は体調が思わしくなかったので参加せず(残念)

# リンク
toggtter => http://togetter.com/li/598391

# 感想
* AngularJSの初心者でも勉強になった。
* ただまだまだAngularJS力が足りない
* directive周りはちゃんと勉強しようと思った。ここが使いこなせないと、ちゃんと使いこなしたことにならないと思った。



明日からもがんばろ


2013年11月22日金曜日

株式会社ACCESSに入社してました。

久しぶりにブログ書きます☆

私事ですが、11月1日より株式会社ACCESSに入社しました。

路頭をさまよっていた(といってもフリーで仕事していましたけど・・・)私を
よき友であり、よきライバルであり、よき嫁でもある@gm_kouに声をかけていただき、
話しているうちに気がついたら戻ってみたくなってしまいました。

まさか古巣に戻ってくるとは自分でも思っていませんでしたが、
僕の中でそこで働く価値というのは働きたい人がいるかどうかなので、 
ー緒に働きたい人がいるその場所に戻ることにしました。

たぶん、辞めた時からひとまわりもふたまわりも成長していると思うので、
お役に立てるのではないかと思っているし、
そこで使い物にならなかったらエンジニアとして足を洗うつもりでいます。
ただ、まだまだ未熟な点もあると思うので、
これから成長できればいいなと思っています。
よろしく御願いします。


それから、フリーランスの期間には、
株式会社CONNEXT様にお世話になりました。
こんな未熟な私をわざわざ東京まで呼び寄せてくれて働く機会を与えてくれたことは感謝しています。
とても働きやすい環境を提供してくれて、たいへんありがたかったです。
これからまたお仕事でご一緒できる機会があればいいなとおもっています。

あとは、フリーの期間に
いろんな方からお仕事の依頼をいろいろいただきありがとうございます。
お受けすることはできなかったのは大変申し訳なかったのですが、
声をかけてくれたのはとてもうれしかったです。
人と人とのつながりはたいせつなんだなと実感しました。

簡単ですが、ブログ上でごあいさつさせていただきました。
これからも自分なりに頑張って行こうと思っているので、
今後ともよろしく御願いします!

2013年7月6日土曜日

ももクロReader(仮)というサイトをつくってみました。

なにかサービスを作りたいなと思ったので、
試しにももクロのアンテナサイトを作ってみました。

http://momoclo-service.herokuapp.com/
















あんまり難しいことはやっていません。

  • とりあえず、Herokuを使ってみた
  • Herokuなので、Ruby on Railsで作ってみる
  • Railsといっても、ほとんどRubyは書かず、もっぱらJavaScript(というかCoffeeScript)で頑張る
という感じです。
Google Feed APIで各種ブログのRSSを取得するのと、
Youtube APIで動画検索してリンク一覧を作成するのみで、
デザインはTwitter Bootstrapでごにょごにょしました。
半日ぐらいで作成しました。

他にもなんか作りたいなーと思いつつ、
ネタがない。。。
アイディア募集中です。

2013年2月28日木曜日

超AndroidユーザーがiPhoneを買ってみた

ついにiPhoneを買いました。キャリアはauです。 

いまつかってるGalaxy Nexusがバッテリーも半日しか持たないし、 (電池パックかえればいいんですけどね。)
しかもなんだか最近思いし、よくアプリが落ちるようになってしまったので、 ちょっと使い倒し過ぎかなと思い買い替えを検討してました。
ただ、基本的にAndroidはNexusシリーズしか正直欲しくないしー、と思っていたので、
もう思い切ってiPhoneにしてしまおうと思った次第です。

 感想としては

  • スクロールの早さとかフィードバックの早さとか超ハンパない!
  • バックキーを押す習慣があるので、バックキーがないのが慣れない
  • キーボードが慣れない
  • UIが全般的に違うので、一瞬考えることが多い
なにかあったときにとりあえずバックキーで元の状態に戻すのがAndroidユーザーの基本的な行動だと思うのですが、
何かあった時はホームボタンになってしまうので、ホームに戻って一瞬戸惑ってしまいます。

キーボードはATOKが個人的に使いやすかったので、そこがかわっちゃうとテキスト入力が全般的に使いづらくなっちゃう。


AndroidからiPhoneに買い替えた人、みんな戸惑うんじゃないでしょうかねー。

個人的にはiPhoneユーザとAndroidユーザのUXは根本的に違うということが
身をもって体験できたのは収穫でした。

慣れればすごく使いやすいんでしょうけどね、iPhone。


2013年2月17日日曜日

GREEのSocial Feedbackのブックマークレットを作ってみる

GREEのSocial Feedbackのボタンの設置方法を参考に、 GREEのSocial FeedBackのブックマークレットを作ってみました。 こちらをブックマークに入れれば、いろんなサイトでGREEに共有ができると思います。

2013年2月16日土曜日

グリー株式会社を退職します


私事ですが、この度、2月28日をもってグリー株式会社を退職することになりました。
昨日2月15日が最終出社日でした。

1年半、在職中は皆様に支えられ充実した日々を過ごすことができました。特にSNSのチームの皆様、中でもアプリ開発チームの皆様にはとてもお世話になりました。コミュニケーションな苦手な私ですが、楽しく仕事をさせていただきました。

やりたいことが別にできてわがままを言って辞めさせていただいたのに、最後に花束まで用意していただき、暖かく見送っていただきました。
みなさま、ありがとうございました。


思えば、GREEは大学4年生のときに僕がはじめてふれたSNSでした。この体験が僕がインターネットに興味を持ったきっかけであり、そのGREEのSNSに携わることができたのは僕にとってはとても幸せな体験でした。

今後もGREEはユーザーとして楽しみたいと思います。GREEをやっている人はぜひ友達になってください!
http://gree.jp/114804

今後についてはまた別のエントリーで書きたいと思います。
今後ともよろしくお願いいたします。

2013年2月4日月曜日

AKB48で理解するUIとUXの違い

UI











(画像は公式サイトより)
UX




僕なりの解釈です。勘違いだったら教えてください。


2012年10月29日月曜日

[Android]ListViewのlistSelectorを使ってタップしたときに色を変える

ListViewのアイテムを選択されたときに色を変える方法は、<selector>を用意してその子要素にタップしたときの色を指定するitemはandroid:state_pressed をtrueにしたものを用意し、選択していないときの色はデフォルトの色で行います。

ここで、
ListViewのアイテム選択にはバグがあるようです。
listSelectorを下記のようにすると、リストのアイテムを選択したときに
Android2.xだと選択行以外も選択されてしまいます。(Android4.xではこの現象はおきません。)

<selector xmlns:android="http://schemas.android.com/apk/res/android">
     <item android:state_pressed="true">
         <color android:color="#FFFFFF">
     </color></item>
     <item>
         <color android:color="#000000">
     </color></item>
 </selector>


ここでは、私は何も考えずにcolorを使ってしまったのですが、shapeを使って色を指定すれば回避できるようです。
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true">
        <shape android:shape="rectangle">
            <solid android:color="#FFFFFFc">
        </solid></shape>
    </item>
    <item>
        <shape android:shape="rectangle">
            <solid android:color="#000000">
        </solid></shape>
    </item>
</selector>

ちょっとはまりました。
ご参考までに。


2012年10月27日土曜日

Blogを放置しすぎた

このBlogを書くのをすっかり忘れていてずっと放置していたのですが、 少しずつ書こうと思います。

2012年4月1日日曜日

"Webエンジニアのためのデータベース技術[実践]入門"を読みました。

Webエンジニアのためのデータベース技術[実践]入門 読みました。
インデックスのような基礎的なところから、
NoSQLのような新しい技術の解説や、
MySQLのソースコードの読み方といった深い解説もあり、
データベースに関しての基礎は一通り学べる本であると思います。

SQLの構文の解説のような超初心者向けの解説はありませんでしたが、
データベースに苦手意識があった自分としてはとても勉強になりました。
データベースの基礎を身につけるにはこの1冊で十分なのではないかと思いました。

C言語で二分探索木を書いてみた。

C言語で二分探索木を書いてみた。 所要時間1時間。 あってる?

2012年3月25日日曜日

あなたがSonyTabletを買うべき5つの理由

みんな「新しいiPad」に夢中のようですが、
日本人としては Sony Tabletは無視できない存在です。
ということで、今更ですがiPadブームに便乗してSony Tabletを買いました。
使ってみて、ボクなりにSony Tabletの良いところを考えてみました。

  1. すぐ買える

  2. 今、新しいiPadを買おうとしても、どこも売り切れ状態で、予約しないとけません。
    すぐにタブレット端末を使いたいと思って、思っても手に入りません。
    そこで、Sony Tabletです。
    すぐにSony Tabletコーナーに行きましょう。在庫がかならずあります。
    店員さんもiPadの方に夢中で、Sony Tabletはあんまり売る気が無いので声もかけてくれません。
    お店で端末をいくらでもいじり倒せます。

  3. Androidであること

  4. これは重要です。
    Androidはオープンなので、今後たくさんのものに搭載されていきます。
    AndroidのUIがいろんなデバイスの標準になるのです。
    iOSなんて、たかだかiPod/iPhone/IPadぐらいでしょうが、
    Androidはスマフォ・タブレット以外にもTVや、カーナビ、ゴーグルや自転車、ロボットまでにも搭載されるのです。

  5. ソニーのサービスが使える

  6. Sonyの「Video Unlimited」が使えるので、
    Sony Tabletで映画もその場で観れます。
    購入とレンタルがあるようです。(個人的にあんまり観たい映画はありませんでしたが)
    「PlayStation Store」も入っているので、PSのゲームも買ってSony Tabletでプレイすることができます。
    両方ともSony Entertainment Networkのアカウントを使えます。
    あとは、「Reader」で電子書籍も楽しむことができます。
    ちなみに、「Reader」はMy Sony IDのアカウントが必要です。

  7. 「さばドル」のまゆゆの限定写真が見える

  8. これはすごいです。
    渡辺麻友主演のドラマ「さばドル」の限定写真が見れるのです!
    ちなみに、見るためには「ネットフレーム by Life-X」というアプリを
    なぜか、Androidマーケットからダウンロードする必要があります。
    ちなみに、Life-Xには、My Sony IDのアカウントが必要です。

  9. スリルが味わえる

  10. ソニー製品です。
    いわゆる「ソニータイマー」の存在が噂されるほどの品質ですw
    いつ壊れるか、はらはらドキドキのスリルが味わえます。
    (ちなみに、ボクのPSPは1年ぐらいで○ボタンが効かなくなってしまいました。。。)
    また、ソニーのサービスに個人情報をさらにまたスリル満点です。
    一度PSNのIDを流出させましたからね。
    ドキドキですよね。

本当は、赤外線でリモコンの役割を果たすとか、
DLNA対応で、Playerとして利用できるとかいろいろあるのですが、
家にテレビとか情報家電系のものがないので試すことができないので、
試した方は使い勝手を教えてください。

2011年11月13日日曜日

CoffeeScriptを学ぶ(2)

JavaScriptはプロトタイプベースのオブジェクト指向だったので、
クラスという概念はなかったのですが、
CoffeeScriptには、クラスという概念があります。
class Hello
  method:  ->
    alert "hello"
"class クラス名"でクラスを宣言できます。
メソッドは、クラスのブロックで
メソッド名: (引数) ->
  メソッド本体
と書きます。

これをJavaScriptに変換すると、下記のようになります。
var Hello;

Hello = (function() {
  function Hello() {}
  Hello.prototype.method = function() {
    return alert("hello");
  };
  return Hello;
})();

CoffeeScriptのページのサンプルの例を持ってくると
class Animal
  constructor: (@name) ->

  move: (meters) ->
    alert @name + " moved #{meters}m."
Animalとうクラスです。
コンストラクタは "constructor:"で定義できます。
@xxxはインスタンス変数ですね。
ちなみに#{}を使えば、文字列のなかで変数を評価して値を使用できます。(Rubyと同じ構文ですね。)
class Snake extends Animal
  move: ->
    alert "Slithering..."
    super 5

class Horse extends Animal
  move: ->
    alert "Galloping..."
    super 45
継承はextendsを使います。
superでスーパークラスのメソッドを呼び出すことができます。

やっぱりクラスを使うと、比較的大きなコードを書くときは、考えやすくて便利ですよね。

CoffeeScriptを学ぶ

CoffeeScriptはJvaScriptに変換するための言語で、
Pythonのような文法を持っているのが特徴のようです。

このCoffeeScriptを学ぼうと思い、いくつかのサンプルを書いてみました。
まず基本、FizzBuzzです。
(下記はalertで書いたので実行すると大変なことになるから気をつけてね)
for a in [1..100]
  if a%15 == 0
    alert "FizzBuzz"
  else if a%3 == 0
    alert "Fizz"
  else if a%5 == 0
    alert "Buzz"
  else
    alert a
特徴としては、Pythonのようにインデントがブロックを表しています。
インデントでブロックにすると、やっぱり見やすいですよね。
また、メソッドも()がつかないです。

これをJavaScriptに変換すると、以下のようになります。
var a;

for (a = 1; a <= 100; a++) {
  if (a % 15 === 0) {
    alert("fizzbuzz");
  } else if (a % 3 === 0) {
    alert("fizz");
  } else if (a % 5 === 0) {
    alert("buzz");
  } else {
    alert(a);
  }
}
今度はクイックソートを実装してみます。 関数は
関数名 -> (引数)
   (関数本体)
のです。 CoffeeScriptはwhile文が使えます  
sort = (array, l, r) ->
  mid = ~~(l+r/2)
  return if l >= r
  i = l
  j = r
  pivot = array[mid]
  while true
    while array[i] < pivot
      i++
    while array[j] > pivot
      j--
    break if i >= j
    t = array[i]
    array[i] = array[j]
    array[j] = t
  sort array, l, i-1 if l < i-1
  sort array, j+1, r if j+1 < r

a = [1, 4, 3, 7, 6, 5, 2, 8]
sort a, 0, 7
alert a
下記はJavaScriptに変換したときのコードです。
var a, sort;

sort = function(array, l, r) {
  var i, j, mid, pivot, t;
  mid = ~~(l + r / 2);
  if (l >= r) return;
  i = l;
  j = r;
  pivot = array[mid];
  while (true) {
    while (array[i] < pivot) {
      i++;
    }
    while (array[j] > pivot) {
      j--;
    }
    if (i >= j) break;
    t = array[i];
    array[i] = array[j];
    array[j] = t;
  }
  if (l < i - 1) sort(array, l, i - 1);
  if (j + 1 < r) return sort(array, j + 1, r);
};

a = [1, 4, 3, 7, 6, 5, 2, 8];
sort(a, 0, 7);
alert(a);

2011年11月1日火曜日

第22回HTML5とか勉強会で発表してきました

第22回HTML5とか勉強会で発表してきました。

今回は初心者向けということで、
SVGってどんなことができるの?っていることを理解してもらおうと思い、
とにかく仕様の紹介をしようと思いました。
ちょっと、意図が伝えられなくて、一部の方からは難しかったというご意見をいただきました。
次回同じような機会があれば、その反省をふまえてもっとよい発表を行えればと思っています。

以下が発表に使用したスライドです。


動画も公開されているみたいです。



このような機会を与えていただいた白石さんをはじめHTML5とか勉強会のスタッフの皆様には
本当に感謝をしています。
ありがとうございました!

2011年8月15日月曜日

OAuthの仕組みについてのメモ

ちょっと前に
twitterのOAuth認証についてのエントリを書きましたが、
ちょっとOAuthについて自分の頭の中が整理できていなかったので、
ちょっと整理します。

OAuthってそのそも、

  • アプリケーションがとあるサービスのAPIを使うための、ユーザに認証してもらうための仕組み

  • アプリケーションはとあるサービスのユーザ名やパスワードをユーザから教えてもらう必要がない


  • です。

    で、
    API提供しているとあるサービスとあるサービス => Service Provider
    アプリケーション => Consumer
    
    とそれぞれ呼びます。

    Consumer(アプリケーション)はService Provider(API提供しているとあるサービス)にConsumerの登録を行います。
    登録すると、Consumer KeyとConsumer Secretが発行されます。Consumer Key/Secretはそのアプリケーションを示すトークンです。このConsumer(アプリケーション)はConsumer Key/Secretを使って、Service Providerにリクエストトークンを発行してもらいます。

    リクエストトークンを発行してもらったら、ConsumerはそのリクエストトークンをパラメータとしたURLを使って、Service Provicerのサイトにリダイレクトを行います。

    ユーザーはリダイレクトされたサイト上にて、ConsumerがService ProviderのAPIを使って情報を取得するのを許可します。

    許可したら、Service Providerはあらかじめ登録されたURLへリダイレクトするので、
    Consumerはそこから、アクセストークンをService Providerに要求し、Service ProviderはアクセストークンをConsumerに送信します。

    このアクセストークンがあれば、ConsumerがService ProviderのAPIを使うことができるようになります。

    ざっと書くとこんな感じでしょうか?

    2011年8月7日日曜日

    第1回Androidテスト祭り に行ってきました。

    第1回Androidテスト祭り に行ってきました。
    行ってきましたと言っても、途中から実行委員にまぜてもらったので、
    スタッフとして参加させていただきました。

    ATNDの参加希望者が定員の倍以上になってしまい、
    Androidでの品質の確保については、たくさんの人が関心を持っているのだと思います。
    (困っている人が多いってことですね><) 今回の発表は非常にレベルが高く、 参加していただいた方々の満足度も高かったのではないかと思います。 個人的には、尾上さんの「テスト可能なUI設計パターン」 が勉強になりました。 ちなみに、僭越ながら私も懇親会でLTをしてきました。 スライドは下記になります。
    講演者の皆様、ご来場していただいた皆様、Ustreamを視聴していただいた皆様、本当にありがとうございました。

    2011年8月4日木曜日

    Jenkinsのインストールのメモ

    Jenkinsのインストールのメモ。あくまでもメモです。

    自宅のサーバーがDebianなので、それを使って。

    まず最初にコマンドラインで、
    wget -q -O - http://pkg.jenkins-ci.org/debian/jenkins-ci.org.key | apt-key add -
    
    をしたあと、
    /etc/apt/sources.listの末尾に
    deb http://pkg.jenkins-ci.org/debian binary/
    
    を追加します。

    その後
    apt-get update
    apt-get install jenkins
    
    をして、インストールします。

    設定に関しては、
    /etc/default/jenkins
    をいじった後、
    /etc/init.d/jenkins restart
    
    をします。

    /etc/default/jenkins
    は、たとえばポートを変えたい時は、HTTP_PORTを帰ればいいです。
    私は、URLに /jenkins を加えたかったので、
    JENKINS_ARGS に --prerix=/jenkins を加えました。

    詳しくは、ここを見るといいかもしれません。

    URLにアクセスすると
    (例えば、http://localhost:8080/jenkins)

    が出てくるはずです。
    デイリービルド等ジョブを作成したい時は、「新規ジョブ作成」を選んでください。

    のページに遷移しますので、
    適当なジョブ名を入力して、基本的にフリースタイル・プロジェクトのビルドを使います。

    あとは、下記の画面が出てくるので、適当に入力していってください。