tag:blogger.com,1999:blog-11315346382986980792024-03-19T19:37:17.084+09:00sassy logsassyの日々の記録Anonymoushttp://www.blogger.com/profile/05772305330256303125noreply@blogger.comBlogger82125tag:blogger.com,1999:blog-1131534638298698079.post-66196469371017780322014-07-19T19:26:00.003+09:002014-07-19T19:26:33.186+09:00ちゃんとご飯を食べてくためにプログラミングを学ぼう<a href="http://lite-ra.com/2014/07/post-243.html" target="_blank">子どもの6人に1人が貧困! 不登校、引きこもりの要因にも</a><br />
<br />
子供の貧困率が16.3%で過去最悪だそうです。<br />
その一方で、世の中人手不足だそうで。<br />
<a href="http://itpro.nikkeibp.co.jp/article/Watcher/20140702/568243/" target="_blank">「2015年問題」はあなたを直撃するか?</a><br />
IT業界だけじゃなくて他の業界も人手不足だそうで。<br />
<br />
いったいなんなんだろうと思いますが、<br />
なんだか、「欲しい人」がただいないだけで、<br />
「いらない人」には働き口も与えてあげない、そんな冷たい社会なんだな、と思います。<br />
<br />
気になるのは、家が貧困のせいで十分に学ぶ機会が与えられない子供たちです。生活ほどの受給も厳しくなってるし。<br />
貧困とかでいじめられて学校行けないとか。<br />
せっかく税金払って学校でいけるようにしても、クラスメートからいじめとかね。ひどいですね。(まあ、いじめなんて子供よりも大人の方がひどいしエグいですけどね、ほんと。)<br />
<br />
でも、そんなんで学ぶことができなくて働き口がなくてどうしようもないとかそういうふうになってほしくないんです。<br />
なんとかしてほしいんです。<br />
<br />
で、思ったのが、コンピュータのプログラミングを学んだらどうかと。<br />
あれって、人間の頭で考えて作るもので、基本的に自動化できないので、<br />
これから先も使えるスキルにになるとおもいます。<br />
(ロボットにおきかえられてたまるかってんだ!)<br />
<br />
図書館で、なんでもいいので、プログラミングの本を手に取って読んでみましょう。<br />
学校に行けるならば、学校のパソコンを使いましょう。<br />
学校に行けないならば、図書館でもパソコンが使えるところがあるそうなので、図書館に行ってみてください。<br />
ブラウザとメモ帳があれば、JavaScriptの勉強はできます。<br />
それでもダメなら、もう紙と鉛筆でがんばりましょう(発展途上国はパソコンが与えられないので、こうやって勉強してる国があるそうです。)楽しくないかもしれませんが、がんばれば後に役に立つと思って。<br />
<br />
プログラミングができれば、それでお仕事ができると思います。<br />
学歴がどうのこうの行ってくる会社とかはダメな会社なのでこちらからお断りしましょう。<br />
もちろん、プログラミングは学び続けなければいけない大変な仕事です。だから、がんばって学んで行きましょう。<br />
<br />
これ、届けたい人に届くといいなぁ。<br />
<br />Anonymoushttp://www.blogger.com/profile/05772305330256303125noreply@blogger.com0tag:blogger.com,1999:blog-1131534638298698079.post-40639932874989131812013-12-12T21:06:00.000+09:002013-12-12T21:06:38.303+09:00Androidアプリプログラマとして振り返ってみる<span style="font-family: Arial; font-size: 14px;"><a href="http://qiita.com/advent-calendar/2013/android" target="_blank">Android Advent Calendar 2013</a> 12日目の記事です。</span><br />
<span style="font-family: Arial; font-size: 13px;"></span><br />
<span style="font-family: Arial; font-size: 14px;">勢いでAdvent Calendarにエントリしたものの、最近新しいことあんまり触ってないし、</span><br />
<span style="font-family: Arial; font-size: 14px;">ndkでいろいろやっているのですが、記事にするほど自分の中で整理されていません。</span><br />
<span style="font-family: Arial; font-size: 14px;">前日までのエントリでみなさんとてもおもしろい記事を書いていてどうしたものかと思っております。</span><br />
<span style="font-family: Arial; font-size: 13px;"></span><br />
<span style="font-family: Arial; font-size: 14px;">ただ、Androidアプリプログラマとしてもう3年以上も立つ訳で、これを機会になにをやってきたかを整理してみたら、</span><br />
<span style="font-family: Arial; font-size: 14px;">なんだか車輪の再発明的なことをたくさんやってきたような気がします。</span><br />
<span style="font-family: Arial; font-size: 14px;">ただ、実装しているときにはそれは気がついておらず、後で結果的に車輪の再発明になったものがほとんどでした。</span><br />
<span style="font-family: Arial; font-size: 13px;"></span><br />
<span style="font-family: Arial; font-size: 14px;">今回はそれについて振り返ってみようかなと思います。</span><br />
<h2>
<span style="font-family: Arial; font-size: 14px;">DownloaManagerrの実装</span></h2>
<span style="font-family: Arial; font-size: 14px;">昔ブラウザアプリを作っていたのですが、</span><br />
<span style="font-family: Arial; font-size: 14px;">その当時Android2.2ではDownloadManagerというものはなく、</span><br />
<span style="font-family: Arial; font-size: 14px;">自分で実装する必要がありました。</span><br />
<span style="font-family: Arial; font-size: 13px;"></span><br />
<span style="font-family: Arial; font-size: 14px;">そこで、Link先のMIMEタイプがpdfだったりdocだったりしたら、</span><br />
<span style="font-family: Arial; font-size: 14px;">Threadをつくり、その中でHTTPのgetでデータを取得し、</span><br />
<span style="font-family: Arial; font-size: 14px;">OutputFileStreamでデータをファイルに書き出すということをしました。</span><br />
<span style="font-family: Arial; font-size: 14px;">もちろん、Notificationに進捗率の表示だったり、タップしたらキャンセルを行うという処理もしました。</span><br />
<span style="font-family: Arial; font-size: 13px;"></span><br />
<span style="font-family: Arial; font-size: 14px;">これが面倒くさかったのは、エラー処理をいろいろしなければいけなくて、</span><br />
<ul>
<li><span style="font-family: Arial; font-size: 14px;">SDカードがないとき</span></li>
<li><span style="font-family: Arial; font-size: 14px;">SDカードが途中で引っこ抜いたとき/マウント解除したとき</span></li>
<li><span style="font-family: Arial; font-size: 14px;">通信が途中で切れた時</span></li>
</ul>
<span style="font-family: Arial; font-size: 14px;">などなど、例外処理やらif文でエラー処理やらを行わなければなりませんでした。</span><br />
<span style="font-family: Arial; font-size: 13px;"></span><br />
<span style="font-family: Arial; font-size: 14px;">2sprintなので、だいたい1ヶ月ぐらいの実装でしたが(今考えると結構時間使ったなぁ。)、</span><br />
<span style="font-family: Arial; font-size: 14px;">最後の最後まで、テストしてエラー処理を追加してを行っていた気がします。</span><br />
<span style="font-family: Arial; font-size: 13px;"></span><br />
<span style="font-family: Arial; font-size: 14px;">しかし、Android2.3からは<a href="http://developer.android.com/reference/android/app/DownloadManager.html" target="_blank">DownloadManager</a></span><span style="font-family: Arial; font-size: 14px;">が使えるようになったので、</span><br />
<span style="font-family: Arial; font-size: 14px;">Android2.3以降はこの実装は使う必要がなくなったわけです。</span><br />
<span style="font-family: Arial; font-size: 14px;">もっと早くDownloadManagerが使えるようになってればこんな苦労はしなかったのに。。。。</span><br />
<span style="font-family: Arial; font-size: 13px;"></span><br />
<h2>
<span style="font-family: Arial; font-size: 14px;">FaceBook型メニュー(Drawer)の実装</span></h2>
<span style="font-family: Arial; font-size: 14px;">Facebook型のメニューは</span><br />
<ul>
<li><span style="font-family: Arial; font-size: 14px;">RelativeLayoutにViewを2枚重ねる</span></li>
<li><span style="font-family: Arial; font-size: 14px;">左上のメニューボタンを押されたらTranslateAnimationで上のViewを左に移動</span></li>
<li><span style="font-family: Arial; font-size: 14px;">アニメーションが終わった時点で、View.layout(メニューの幅、0, view.getRight(), view.getBottom())で上のViewを左に余白を作ってlayoutして、requestLayout()</span></li>
<li><span style="font-family: Arial; font-size: 14px;">closeはその逆</span></li>
</ul>
<span style="font-family: Arial; font-size: 14px;">をして実装しました。</span><br />
<span style="font-family: Arial; font-size: 14px;">(実際はいろいろ細かい小細工をして苦労させられました。。。)</span><br />
<span style="font-family: Arial; font-size: 13px;"></span><br />
<span style="font-family: Arial; font-size: 14px;">こちらは、AndroidではNavigation Drawerと呼ばれ</span><br />
<span style="font-family: Arial; font-size: 14px;">今は、DrawerLayoutを使って簡単に実装できます。</span><br />
<span style="color: #042eee; font-family: Arial; font-size: 14px;"><u><a href="http://developer.android.com/training/implementing-navigation/nav-drawer.html" target="_blank">http://developer.android.com/training/implementing-navigation/nav-drawer.html</a></u></span><br />
<span style="font-family: Arial; font-size: 13px;"></span><br />
<span style="font-family: Arial; font-size: 14px;">当時はこれ実装するのはすんごく苦労したんですよ。。。</span><br />
<span style="font-family: Arial; font-size: 13px;"></span><br />
<h2>
<span style="font-family: Arial; font-size: 14px;">Pull to refreshの実装</span></h2>
<span style="font-family: Arial; font-size: 14px;">あのtwitterアプリでおなじみの引っ張って更新する</span><br />
<span style="font-family: Arial; font-size: 14px;">pull to refresh。</span><br />
<span style="font-family: Arial; font-size: 14px;">これも頑張って実装しました。</span><br />
<span style="font-family: Arial; font-size: 13px;"></span><br />
<span style="font-family: Arial; font-size: 14px;">これは、上のツールバーにViewを隠しておいて、</span><br />
<span style="font-family: Arial; font-size: 14px;">コンテンツのViewをスクロール可能だったらコンテンツのViewにイベントを流して</span><br />
<span style="font-family: Arial; font-size: 14px;">スクロールさせ、</span><br />
<span style="font-family: Arial; font-size: 14px;">スクロールできないところまでスクロールしたら、</span><br />
<span style="font-family: Arial; font-size: 14px;">今度はイベントをコンテンツの外側のLayoutに渡して、余白のViewをすこしずつ下にさげるという実装だった気がします。</span><br />
<span style="font-family: Arial; font-size: 14px;">イベントをどこに渡すかどうかの判断は</span><span style="font-family: Monaco; font-size: 14px;">onInterceptTouchEvent()だったかな?</span><br />
<span style="font-family: Monaco; font-size: 14px;">ここら辺の実装はすごく苦労した割にはよく覚えていないのです。</span><br />
<span style="font-family: Arial; font-size: 13px;"></span><br />
<span style="font-family: Monaco; font-size: 14px;">ただこれはいろんあバージョンをつくってためしてみました。</span><br />
<span style="font-family: Monaco; font-size: 14px;">ListViewを使った結滞な実装もありました。</span><br />
<span style="font-family: Arial; font-size: 13px;"></span><br />
<span style="font-family: Monaco; font-size: 14px;">しばらくはこの自作のpull to refreshを使っていたのですが、</span><br />
<span style="font-family: Monaco; font-size: 14px;">あるとき、スクロールがかくかくするというバグが発生し、</span><br />
<span style="font-family: Monaco; font-size: 14px;">そのときボスが見つけてきてくれた</span><br />
<span style="color: #042eee; font-family: Arial; font-size: 14px;"><u><a href="https://github.com/chrisbanes/Android-PullToRefresh/" target="_blank">https://github.com/chrisbanes/Android-PullToRefresh/</a></u></span><br />
<span style="font-family: Arial; font-size: 14px;">と置き換えてためしてみることになりました。</span><br />
<span style="font-family: Arial; font-size: 14px;">今は有名なライブラリですが、当時はあまり使われていなかった気がします。</span><br />
<span style="font-family: Arial; font-size: 13px;"></span><br />
<span style="font-family: Arial; font-size: 14px;">試して見たところ、実は原因は別のところにあったようで、</span><br />
<span style="font-family: Arial; font-size: 14px;">動作的にはあまりかわりませんでした。</span><br />
<span style="font-family: Arial; font-size: 14px;">(実装見てみると、自分が書いたコードとほとんど似たようなものだったので、</span><br />
<span style="font-family: Arial; font-size: 14px;">当然ですが。)</span><br />
<span style="font-family: Arial; font-size: 13px;"></span><br />
<span style="font-family: Arial; font-size: 14px;">で、結局オープンソースのライブラリの方が安定していていいだろうということになり、</span><br />
<span style="font-family: Arial; font-size: 14px;">私が作ったコードは使わないことになってしまいました。</span><br />
<span style="font-family: Arial; font-size: 14px;">これは悔しい思いもしましたが、</span><br />
<span style="font-family: Arial; font-size: 14px;">今思い返すと最初からライブラリを探していれば、その工数をべつなことに費やすことができたのでは・・・と思ってしまいます。</span><br />
<br />
<h2>
<span style="font-family: Arial; font-size: 14px;">まとめ</span></h2>
<span style="font-family: Arial; font-size: 14px;">今は必要で一生懸命実装しても</span><br />
<ul>
<li><span style="font-family: Arial; font-size: 14px;">後々そのコンポーネントが標準で用意されるかもしれない</span></li>
<li><span style="font-family: Arial; font-size: 14px;">オープンソースでライブラリがあるかもしれない。</span></li>
</ul>
<span style="font-family: Arial; font-size: 14px;">ということがあります。</span><br />
<span style="font-family: Arial; font-size: 13px;"></span><br />
<span style="font-family: Arial; font-size: 14px;">前者は逆に言えば後方互換性をかんがえると実装しておいて損はないと思いますが、後者はオープンソースのライブラリを使用できれば工数を大幅に削減できるはずです。</span><br />
<span style="font-family: Arial; font-size: 14px;">ちょっと難しいUIを実装する時は、GoogleなりGithubなりつかって、同様なことを実装しているライブラリがないか必ず探すようにしましょう。</span><br />
<span style="font-family: Arial; font-size: 14px;">最近は</span><span style="font-family: Arial; font-size: 13px;">Androidオープンソースライブラリ徹底活用(</span><a href="http://www.amazon.co.jp/dp/4798040029/ref=cm_sw_r_tw_dp_IFYPsb1MYGA62)" target="_blank"><span style="color: #042eee; font-family: Arial; font-size: 13px;"><u>http://www.amazon.co.jp/dp/4798040029/ref=cm_sw_r_tw_dp_IFYPsb1MYGA62</u></span><span style="font-family: Arial; font-size: 13px;">)</span></a><br />
<span style="font-family: Arial; font-size: 13px;">やAndroidライブラリ実践活用[厳選111](</span><span style="color: #042eee; font-family: Arial; font-size: 13px;"><u><a href="http://www.amazon.co.jp/dp/4774161284/ref=cm_sw_r_tw_dp_KGYPsb0JBRP63" target="_blank">http://www.amazon.co.jp/dp/4774161284/ref=cm_sw_r_tw_dp_KGYPsb0JBRP63</a></u></span><span style="font-family: Arial; font-size: 13px;">)のような本も出ていますので、手元においておくといいと思います。</span><br />
<span style="font-family: Arial; font-size: 13px;"></span><br />
<span style="font-family: Arial; font-size: 14px;">ただ、こういった「あのとき苦労したけど、苦労する必要がなかったのでは」的な実装をしても、自分自身では難しい実装を体験することによりスキルアップにつながりました。</span><br />
<span style="font-family: Arial; font-size: 14px;">今ではちょっと凝ったUIでもそれなりに実装できるようになりました。</span><br />
<span style="font-family: Arial; font-size: 14px;">もし工数が許すのであれば、自分で実装してしまうのも一つの選択肢かもしれません。自分で実装すれば、その部分のカスタマイズが必要があるときにすぐに対応できるという利点もあります。</span><br />
<span style="font-family: Arial; font-size: 13px;"></span><br />
<h2>
<span style="font-family: Arial; font-size: 14px;">結論:頑張って実装したら、その努力そのものは無駄にはならない。</span></h2>
<span style="font-family: Arial; font-size: 13px;"></span><br />
<span style="font-family: Arial; font-size: 14px;">以上、本日のAndroid Advent Calendarに記事でした。</span><br />
<span style="font-family: Arial; font-size: 14px;">お粗末様でしたm(_ _)m</span><br />
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=sassyw-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=4798040029" style="height: 240px; width: 120px;"></iframe>
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=sassyw-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=4774161284" style="height: 240px; width: 120px;"></iframe>
Anonymoushttp://www.blogger.com/profile/05772305330256303125noreply@blogger.com0tag:blogger.com,1999:blog-1131534638298698079.post-14755927770748231222013-12-04T01:17:00.001+09:002013-12-04T01:17:48.653+09:00ng-mtg#4 AngularJS勉強会 に行ってきました。 #ng_jp<div>
<span style="font-family: Arial;">12/3に行われた</span><span style="font-family: Arial;">AngularJS勉強会に行ってきました。</span></div>
<div>
<span style="font-family: Arial;">そのメモを載せておきます。</span></div>
<div>
<span style="font-family: Arial;">本当は整理してからと思ったのですが、結局整理して書こうとすると何も書かずに終わってしまうので。</span></div>
<div>
<span style="font-family: Arial;">気が向いたらきちんとまとめます。</span></div>
<div>
<span style="font-family: Arial;">あと間違いがあればご指摘いただければ修正します。</span></div>
<div>
<br /></div>
<hr />
<div>
<span style="font-family: Arial;"><span style="font-family: Arial;"><br /></span></span></div>
<span style="font-family: Arial;">
ng-mtg#4 AngularJS勉強会 2013/12/03 @サイバーエージェント</span><br />
<span style="font-family: Arial;"></span><br />
<span style="font-family: Arial;"># 動機</span><br />
<span style="font-family: Arial;">* 最近JavaScriptの勉強していて、クライアントサイドのJSライブラリを習得したかったから。</span><br />
<span style="font-family: Arial;">* 勉強してみてAngularJSがよさげで、さらに理解を深めようと思ったから。</span><br />
<span style="font-family: Arial;">* 最初は簡単だけど、ちゃんと勉強すると難しいと聞いて</span><br />
<span style="font-family: Arial;"></span><br />
<span style="font-family: Arial;"># 自分の背景知識</span><br />
<span style="font-family: Arial;">* ドットインストール(</span><span style="color: #3400ee; font-family: Arial;"><u>http://dotinstall.com/lessons/basic_angularjs</u></span><span style="font-family: Arial;"> )</span><br />
<span style="font-family: Arial;">* tutorial(</span><span style="color: #3400ee; font-family: Arial;"><u>http://docs.angularjs.org/tutorial</u></span><span style="font-family: Arial;"> )</span><br />
<span style="font-family: Arial;">をひと通りいじってあとは適当にアプリとかつくって遊んでいる状況</span><br />
<span style="font-family: Arial;">本格的にアプリつくっているわけではない</span><br />
<span style="font-family: Arial;"></span><br />
<span style="font-family: Arial;"># 内容</span><br />
<span style="font-family: Arial;">## introduction</span><br />
<span style="font-family: Arial;">* 金井さんから説明</span><br />
<span style="font-family: Arial;"></span><br />
<span style="font-family: Arial;">## AngularJS 20min @naoya_ito</span><br />
<span style="color: #3400ee; font-family: Arial;"><u>https://speakerdeck.com/naoya/angularjs-20min-number-ng-jp</u></span><br />
<span style="font-family: Arial;">初心者向けにチュートリアル的な内容。AngularJSの特徴/主な機能の説明がメイン</span><br />
<span style="font-family: Arial;"></span><br />
<span style="font-family: Arial;">* AngularJSがBackbone.jsよりもgithubで★がたくさんついてる状態</span><br />
<span style="font-family: Arial;">* JavaScript "MVW" Framework (Model View Watever) (MV* の議論の無駄 )</span><br />
<span style="font-family: Arial;">* AngularJSの基本</span><br />
<span style="font-family: Arial;">** HTMLそのものがテンプレート</span><br />
<span style="font-family: Arial;">*** HTMLに ng-xxxを埋め込んで、jsがそれに対応する処理をする</span><br />
<span style="font-family: Arial;">*** $scopeがHTMLとapp(js)の橋渡し </span><br />
<span style="font-family: Arial;">** 双方向データバインディング</span><br />
<span style="font-family: Arial;">** HTMLフォームを変えると$scopeのオブジェクト(app側の値)が変わる/$scopeが変わるとHTML側が変わる</span><br />
<span style="font-family: Arial;">** しかもリアルタイムに$scopeが変わる</span><br />
<span style="font-family: Arial;">* アプリがDOMの構造をしらなくてよい => HTML変更をしても動かなくなるようなことが起きづらい</span><br />
<span style="font-family: Arial;">* ロジックでDOMの構造を構築しないようにする</span><br />
<span style="font-family: Arial;">* 制約によってコードが綺麗に保たれる</span><br />
<span style="font-family: Arial;"></span><br />
<span style="font-family: Arial;">* いくつかの機能</span><br />
<span style="font-family: Arial;">** angular-resource.js</span><br />
<span style="font-family: Arial;">*** サーバーサイドからデータを取得するのに使える</span><br />
<span style="font-family: Arial;">** フィルタがすごく簡単に書ける</span><br />
<span style="font-family: Arial;">** Form validation</span><br />
<span style="font-family: Arial;">*** 必須だとrequiredつけるとか、フォームに条件をつけてvalidation可能</span><br />
<span style="font-family: Arial;"></span><br />
<span style="font-family: Arial;">* コンセプトとしてJavaScriptの構造を整理するというよりもHTMLを拡張して機能を追加している</span><br />
<span style="font-family: Arial;">* DIによってテストしやすい</span><br />
<span style="font-family: Arial;"></span><br />
<span style="font-family: Arial;">* 雑感</span><br />
<span style="font-family: Arial;">** DIの仕組み</span><br />
<span style="font-family: Arial;">*** function()定義を文字列として扱っているから、$scopeをsとか書き換えてしまうと動かない</span><br />
<span style="font-family: Arial;">** JSONサーバーが後ろに控えたCRUDアプリ</span><br />
<span style="font-family: Arial;">** グラフィックやゲーム系が苦手</span><br />
<span style="font-family: Arial;">** 簡単に動かすまでは簡単だけど、本格的に学習するとコスト高め</span><br />
<span style="font-family: Arial;">** 制約やテストしやすさで複数人数での開発は向いてる?</span><br />
<span style="font-family: Arial;"></span><br />
<span style="font-family: Arial;"></span><br />
<span style="font-family: Arial;">## OnsenUIについて ~Angular.js+Topcoat~ Kruyさん/四方さん(アシアル株式会社)</span><br />
<span style="font-family: Arial;">OnsenUIがどういうものかの説明。デモ等が中心</span><br />
<span style="font-family: Arial;">OnsenUI => </span><span style="color: #3400ee; font-family: Arial;"><u>https://github.com/OnsenUI/OnsenUI</u></span><br />
<br />
<span style="font-family: Arial;">* AngularJSとTopcatを組み合わせたMobile UI</span><br />
<span style="font-family: Arial;">* モバイル向けのUIをHTML5で簡単につくる方法を提供したかった</span><br />
<span style="font-family: Arial;">** jQueryMobileだとUXがいまいち/ソースコードが冗長</span><br />
<span style="font-family: Arial;">* 簡単/使えるUIコンポーネント</span><br />
<span style="font-family: Arial;">** 独自タグをHTMLに書くだけ</span><br />
<span style="font-family: Arial;">** 基本的なコンポーネントがデフォルトで用意されている</span><br />
<span style="font-family: Arial;">* ぬるぬる動く</span><br />
<span style="font-family: Arial;">** CSSを利用して滑らかなアニメーション</span><br />
<span style="font-family: Arial;">* テーマ機能</span><br />
<span style="font-family: Arial;">** デザインの一括変更/Font Awesome/CSS独自カスタマイズ</span><br />
<span style="font-family: Arial;">* 独自タグでコンポーネントを定義して、属性でアニメーション等を設定している印象</span><br />
<span style="font-family: Arial;">* 今後</span><br />
<span style="font-family: Arial;">** Onsen UIのGUIツール「UIBuilder」の提供</span><br />
<span style="font-family: Arial;">** Webコンポーネントを公開・共有できるしくみ</span><br />
<span style="font-family: Arial;"></span><br />
<span style="font-family: Arial;">## AngularJSを実サービスで使ってみて @sakatam</span><br />
<span style="font-family: Arial;">AngularJSを使った実際のプロジェクトの話</span><br />
<span style="color: #3400ee; font-family: Arial;"><u>https://speakerdeck.com/sakatam/angularjs-mian-qiang-hui-number-4-shi-zhan-angularjs</u></span><br />
<span style="font-family: Arial;"></span><br />
<span style="font-family: Arial;">* プロジェクト</span><br />
<span style="font-family: Arial;">** 3ヶ月</span><br />
<span style="font-family: Arial;">** Eコマースのリニューアル</span><br />
<span style="font-family: Arial;">** Mobile Firstアプローチ</span><br />
<span style="font-family: Arial;">** ついでにAngularJS</span><br />
<span style="font-family: Arial;">** うまくいった</span><br />
<span style="font-family: Arial;"></span><br />
<span style="font-family: Arial;">* システム構成&人員構成</span><br />
<span style="font-family: Arial;">** 旧構成 => jsp/Java servlet , Legacy API(RPC), DB</span><br />
<span style="font-family: Arial;">** 新構成 => AngularJS APp/Node.js, Legacy API(RPC), DB</span><br />
<span style="font-family: Arial;">** 人員:AngularJS App => UXデザイナ2 Frontend JSエンジニア2 Backend jsエンジニア2</span><br />
<span style="font-family: Arial;">*** フロントエンドエンジニアがBackendも踏み込める/その逆も</span><br />
<span style="font-family: Arial;"></span><br />
<span style="font-family: Arial;">* なんでAngularJS?</span><br />
<span style="font-family: Arial;">** backbone.js => 開発者の力量でコードの品質がばらつく等 スケールしづらい</span><br />
<span style="font-family: Arial;">** 柔軟性では劣る</span><br />
<span style="font-family: Arial;">** モジュール・ベースの開発を強制 (DI/Module・Directive)</span><br />
<span style="font-family: Arial;">** ビューとモデルの自動バインディングのせいでコントロールが単純化・コードのメンテナンス性が高い</span><br />
<span style="font-family: Arial;">** 開発がスケールし易い</span><br />
<span style="font-family: Arial;"></span><br />
<span style="font-family: Arial;">* 開発フロー</span><br />
<span style="font-family: Arial;">** 基盤づくりに時間をかけた(3week)のが功を奏した</span><br />
<span style="font-family: Arial;">** チーム展開(2week)でFrontendエンジニアにしっかり慣れてもらった</span><br />
<span style="font-family: Arial;">*** FエンジニアはDIやモジュール志向に慣れてないため</span><br />
<span style="font-family: Arial;">** 開発イテレーションは一般的なウェブ開発とほとんど同じ</span><br />
<span style="font-family: Arial;">** テストファーストができるのがメリット (プロジェクトではUnit Testは必須にした/E2E Testはクリティカルパス確認用)</span><br />
<br />
<span style="font-family: Arial;">* 実戦投入次のTips</span><br />
<span style="font-family: Arial;">** 複雑なモデル・データの状態管理</span><br />
<span style="font-family: Arial;">*** モデルが複雑になるとAngularJSは管理してくれない => AngularJSの長所はシンプルなモデル</span><br />
<span style="font-family: Arial;">*** モデルを浅くして問題回避</span><br />
<span style="font-family: Arial;">** $rootScope $broadcast</span><br />
<span style="font-family: Arial;">*** 便利だけど使いすぎるとDIの意味がなくなるので危険</span><br />
<span style="font-family: Arial;">** 仮引数Minify対応の紹介</span><br />
<span style="font-family: Arial;">** リクエスト数の肥大化に注意する(モバイル等で)</span><br />
<span style="font-family: Arial;">*** ビルド時にバンドルする( webmake/angular-template)</span><br />
<span style="font-family: Arial;">** SEO/Crawwler対策</span><br />
<span style="font-family: Arial;">*** UserJSで判別してPhantomJSで対応</span><br />
<br />
<span style="font-family: Arial;">* ほどよい制約・モジュール化の強制</span><br />
<span style="font-family: Arial;">* Frontendエンジニアの底上げも</span><br />
<span style="font-family: Arial;"></span><br />
<span style="font-family: Arial;"></span><br />
<span style="font-family: Arial;">## 目指せ脱初心者!あなたの知りたかったAngularJS @agektmr</span><br />
<span style="font-family: Arial;">初心者が中級者になるためのセッション</span><br />
<span style="font-family: Arial;">AngluraJSの具体的なプラクティスの紹介(でもなんだかディレクティブの話が中心)</span><br />
<span style="font-family: Arial;"></span><br />
<span style="font-family: Arial;">* Angularユーザの悩み =>ドキュメントが英語/Angular Wayがあるっぽい/日本語情報が少ない/相談相手がいない/ドキュメントがわかりにくい</span><br />
<span style="font-family: Arial;"></span><br />
<span style="font-family: Arial;">* AngularJSでDOMをいじるには</span><br />
<span style="font-family: Arial;">** ディレクティブをつくる => ハードルが高い?</span><br />
<span style="font-family: Arial;">*** linkがあればDOMの操作はできる</span><br />
<pre>app.directive('fileSelect',function() {
return {
link : function(scope, elem, attr) { //elemはjqueryオブジェクト
elem.bind('change', xxxx);
}
}
});
</pre>
<br />
<span style="font-family: Arial;">*** AngularJSはjqueryの機能を使える(JQliteというJQueryのLite版を持っている)</span><br />
<span style="font-family: Arial;">*** restrict:でタグ等を指定できる</span><br />
<span style="font-family: Arial;">** 独自タグを定義</span><br />
<span style="font-family: Arial;"><script type="text/ng-template"> でテンプレートを定義</span><br />
<span style="font-family: Arial;">*** templateUrlでテンプレートを指定すれば、定義したhtmlを呼び出せる</span><br />
<span style="font-family: Arial;"></span><br />
<span style="font-family: Arial;">* コントローラ間で変数を跨って使う => moduleを使ってvalueに割り当てる</span><br />
<span style="font-family: Arial;">** デモ:</span><span style="color: #3400ee; font-family: Arial;"><u>http://demo.agektmr.com/flexbox/</u></span><span style="font-family: Arial;"> </span><br />
<span style="font-family: Arial;">* DOMの塊がオブジェクトとしてそのオブジェクトを誰が所有しているか</span><br />
<span style="font-family: Arial;"></span><br />
<span style="font-family: Arial;">* Web Components</span><br />
<span style="font-family: Arial;">** 自分の独自のelementを作れる</span><br />
<span style="font-family: Arial;">* AngularはWeb Componentsをとりこもうとしている</span><br />
<span style="font-family: Arial;">* ディレクティブはPolymerに置き換わる</span><br />
<span style="font-family: Arial;">** Polymer.js (Web Componentsのは </span><span style="color: #3400ee; font-family: Arial;"><u>http://www.polymer-project.org/</u></span><span style="font-family: Arial;"> )</span><br />
<span style="font-family: Arial;"></span><br />
<span style="font-family: Arial;"></span><br />
<span style="font-family: Arial;">## LT</span><br />
<span style="font-family: Arial;">メモなし</span><br />
<span style="font-family: Arial;"></span><br />
<span style="font-family: Arial;"># 懇親会は体調が思わしくなかったので参加せず(残念)</span><br />
<span style="font-family: Arial;"><br /></span>
<span style="font-family: Arial;"># リンク</span><br />
<span style="font-family: Arial;">toggtter => <a href="http://togetter.com/li/598391">http://togetter.com/li/598391</a></span><br />
<span style="font-family: Arial;"></span><br />
<span style="font-family: Arial;"># 感想</span><br />
<span style="font-family: Arial;">* AngularJSの初心者でも勉強になった。</span><br />
<span style="font-family: Arial;">* ただまだまだAngularJS力が足りない</span><br />
<span style="font-family: Arial;">* directive周りはちゃんと勉強しようと思った。ここが使いこなせないと、ちゃんと使いこなしたことにならないと思った。</span><br />
<span style="font-family: Arial;"></span><br />
<hr />
<br />
明日からもがんばろ<br />
<br />
<br />Anonymoushttp://www.blogger.com/profile/05772305330256303125noreply@blogger.com0tag:blogger.com,1999:blog-1131534638298698079.post-5255825836787324662013-11-22T00:43:00.000+09:002013-11-22T00:46:12.560+09:00株式会社ACCESSに入社してました。<span style="font-family: Arial; font-size: 13px;">久しぶりにブログ書きます☆</span><br />
<span style="font-family: Arial; font-size: 13px;"></span><br />
<span style="font-family: Arial; font-size: 13px;">私事ですが、11月1日より<a href="http://www.access-company.com/">株式会社ACCESS</a>に入社しました。</span><br />
<span style="font-family: Arial; font-size: 13px;"></span><br />
<span style="font-family: Arial; font-size: 13px;">路頭をさまよっていた(といってもフリーで仕事していましたけど・・・)私を</span><br />
<span style="font-family: Arial; font-size: 13px;">よき友であり、よきライバルであり、<strike>よき嫁でもある</strike><a href="https://twitter.com/gm_kou">@gm_kou</a>に声をかけていただき、</span><br />
<span style="font-family: Arial; font-size: 13px;">話しているうちに気がついたら戻ってみたくなってしまいました。</span><br />
<span style="font-family: Arial; font-size: 13px;"></span><br />
<span style="font-family: Arial; font-size: 13px;">まさか古巣に戻ってくるとは自分でも思っていませんでしたが、</span><br />
<span style="font-family: Arial; font-size: 13px;">僕の中でそこで働く価値というのは働きたい人がいるかどうかなので、 </span><br />
<span style="font-family: Arial; font-size: 13px;">ー緒に働きたい人がいるその場所に戻ることにしました。</span><br />
<span style="font-family: Arial; font-size: 13px;"></span><br />
<span style="font-family: Arial; font-size: 13px;">たぶん、辞めた時からひとまわりもふたまわりも成長していると思うので、</span><br />
<span style="font-family: Arial; font-size: 13px;">お役に立てるのではないかと思っているし、</span><br />
<span style="font-family: Arial; font-size: 13px;">そこで使い物にならなかったらエンジニアとして足を洗うつもりでいます。</span><br />
<span style="font-family: Arial; font-size: 13px;">ただ、まだまだ未熟な点もあると思うので、</span><br />
<span style="font-family: Arial; font-size: 13px;">これから成長できればいいなと思っています。</span><br />
<span style="font-family: Arial; font-size: 13px;">よろしく御願いします。</span><br />
<span style="font-family: Arial; font-size: 13px;"></span><br />
<span style="font-family: Arial; font-size: 13px;"></span><br />
<span style="font-family: Arial; font-size: 13px;">それから、フリーランスの期間には、</span><br />
<span style="font-family: Arial; font-size: 13px;"><a href="http://www.connext.co.jp/">株式会社CONNEXT</a>様にお世話になりました。</span><br />
<span style="font-family: Arial; font-size: 13px;">こんな未熟な私をわざわざ東京まで呼び寄せてくれて働く機会を与えてくれたことは感謝しています。</span><br />
<span style="font-family: Arial; font-size: 13px;"><span style="font-size: 12px;">とても働きやすい環境を提供してくれて、たいへんありがたかったです。</span></span><br />
<span style="font-family: Arial; font-size: 13px;">これからまたお仕事でご一緒できる機会があればいいなとおもっています。</span><br />
<span style="font-family: Arial; font-size: 13px;"></span><br />
<span style="font-family: Arial; font-size: 13px;">あとは、フリーの期間に</span><br />
<span style="font-family: Arial; font-size: 13px;">いろんな方からお仕事の依頼をいろいろいただきありがとうございます。</span><br />
<span style="font-family: Arial; font-size: 13px;">お受けすることはできなかったのは大変申し訳なかったのですが、</span><br />
<span style="font-family: Arial; font-size: 13px;">声をかけてくれたのはとてもうれしかったです。</span><br />
<span style="font-family: Arial; font-size: 13px;">人と人とのつながりはたいせつなんだなと実感しました。</span><br />
<span style="font-family: Arial; font-size: 13px;"></span><br />
<span style="font-family: Arial; font-size: 13px;">簡単ですが、ブログ上でごあいさつさせていただきました。</span><br />
<span style="font-family: Arial; font-size: 13px;">これからも自分なりに頑張って行こうと思っているので、</span><br />
<span style="font-family: Arial; font-size: 13px;">今後ともよろしく御願いします!</span>Anonymoushttp://www.blogger.com/profile/05772305330256303125noreply@blogger.com0tag:blogger.com,1999:blog-1131534638298698079.post-71154656287911599642013-07-06T09:35:00.001+09:002013-07-06T09:37:46.744+09:00ももクロReader(仮)というサイトをつくってみました。なにかサービスを作りたいなと思ったので、<br />
試しにももクロのアンテナサイトを作ってみました。<br />
<br />
<a href="http://momoclo-service.herokuapp.com/">http://momoclo-service.herokuapp.com/</a><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjJFW9tNcpbzdt521SBb9K2Vtx_itI_YuS8KAUXuRyAnhF2sFDgCK8Yc9QrfZzNiszwKmVvLAH0Zm6QUHQ1pOJwk-PiNo1iGV4k5WNyuXL_0sFsUQ7pIDQwGA-qeVvKQJAOdn0zRYRAbk/s1600/20130706_ss.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="238" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjJFW9tNcpbzdt521SBb9K2Vtx_itI_YuS8KAUXuRyAnhF2sFDgCK8Yc9QrfZzNiszwKmVvLAH0Zm6QUHQ1pOJwk-PiNo1iGV4k5WNyuXL_0sFsUQ7pIDQwGA-qeVvKQJAOdn0zRYRAbk/s320/20130706_ss.png" width="320" /></a></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
あんまり難しいことはやっていません。<br />
<br />
<ul>
<li>とりあえず、Herokuを使ってみた</li>
<li>Herokuなので、Ruby on Railsで作ってみる</li>
<li>Railsといっても、ほとんどRubyは書かず、もっぱらJavaScript(というかCoffeeScript)で頑張る</li>
</ul>
<div>
という感じです。</div>
<div>
<a href="https://developers.google.com/feed/?hl=ja">Google Feed API</a>で各種ブログのRSSを取得するのと、</div>
<div>
<a href="https://developers.google.com/youtube/?hl=ja">Youtube API</a>で動画検索してリンク一覧を作成するのみで、<br />
デザインはTwitter Bootstrapでごにょごにょしました。</div>
<div>
半日ぐらいで作成しました。<br />
<br />
他にもなんか作りたいなーと思いつつ、<br />
ネタがない。。。<br />
アイディア募集中です。<br />
<br /></div>
Anonymoushttp://www.blogger.com/profile/05772305330256303125noreply@blogger.com0tag:blogger.com,1999:blog-1131534638298698079.post-52321921658847587212013-02-28T00:28:00.002+09:002013-02-28T00:29:53.183+09:00超AndroidユーザーがiPhoneを買ってみたついにiPhoneを買いました。キャリアはauです。
<br />
<br />
いまつかってるGalaxy Nexusがバッテリーも半日しか持たないし、
(電池パックかえればいいんですけどね。)<br />
しかもなんだか最近思いし、よくアプリが落ちるようになってしまったので、
ちょっと使い倒し過ぎかなと思い買い替えを検討してました。<br />
ただ、基本的にAndroidはNexusシリーズしか正直欲しくないしー、と思っていたので、<br />
もう思い切ってiPhoneにしてしまおうと思った次第です。<br />
<br />
感想としては<br />
<br />
<ul>
<li>スクロールの早さとかフィードバックの早さとか超ハンパない!</li>
<li>バックキーを押す習慣があるので、バックキーがないのが慣れない</li>
<li>キーボードが慣れない</li>
<li>UIが全般的に違うので、一瞬考えることが多い</li>
</ul>
<div>
なにかあったときにとりあえずバックキーで元の状態に戻すのがAndroidユーザーの基本的な行動だと思うのですが、</div>
<div>
何かあった時はホームボタンになってしまうので、ホームに戻って一瞬戸惑ってしまいます。</div>
<div>
<br /></div>
<div>
キーボードはATOKが個人的に使いやすかったので、そこがかわっちゃうとテキスト入力が全般的に使いづらくなっちゃう。</div>
<div>
<br /></div>
<div>
<div>
<br /></div>
<div>
AndroidからiPhoneに買い替えた人、みんな戸惑うんじゃないでしょうかねー。</div>
</div>
<div>
<br /></div>
<div>
個人的にはiPhoneユーザとAndroidユーザのUXは根本的に違うということが</div>
<div>
身をもって体験できたのは収穫でした。</div>
<div>
<br /></div>
<div>
慣れればすごく使いやすいんでしょうけどね、iPhone。</div>
<div>
<br /></div>
<div>
<br /></div>
Anonymoushttp://www.blogger.com/profile/05772305330256303125noreply@blogger.com0tag:blogger.com,1999:blog-1131534638298698079.post-13387681686338320442013-02-17T16:08:00.000+09:002013-02-17T16:08:25.815+09:00GREEのSocial Feedbackのブックマークレットを作ってみる<a href="https://docs.developer.gree.net/ja/platform/connect/socialfeedback">GREEのSocial Feedback</a>のボタンの設置方法を参考に、
GREEのSocial FeedBackのブックマークレットを作ってみました。
<script src="https://gist.github.com/4039442.js?file=GREE Social Feedbck Bookmarklet"></script>
<a href="javascript:(function(){var f = document.createElement('iframe');f.src='http://share.gree.jp/share?url=' + encodeURIComponent(location.href) + '&type=0&height=20';f.width=100;f.height=100;f.frameBorder=0;f.marginWidth=0;f.marginHeight=0;f.setAttribute('scrolling','no');f.setAttribute('allowTransparency','true');f.style.border='none';f.style.overflow='hidden';f.style.width='100px';f.style.height='20px';document.body.insertBefore(f, document.body.firstChild);})();">こちら</a>をブックマークに入れれば、いろんなサイトでGREEに共有ができると思います。Anonymoushttp://www.blogger.com/profile/05772305330256303125noreply@blogger.com0tag:blogger.com,1999:blog-1131534638298698079.post-22830123684394511362013-02-16T00:56:00.000+09:002013-02-16T09:00:10.120+09:00グリー株式会社を退職します<br />
私事ですが、この度、2月28日をもってグリー株式会社を退職することになりました。<br />
昨日2月15日が最終出社日でした。<br />
<br />
1年半、在職中は皆様に支えられ充実した日々を過ごすことができました。特にSNSのチームの皆様、中でもアプリ開発チームの皆様にはとてもお世話になりました。コミュニケーションな苦手な私ですが、楽しく仕事をさせていただきました。<br />
<br />
やりたいことが別にできてわがままを言って辞めさせていただいたのに、最後に花束まで用意していただき、暖かく見送っていただきました。<br />
みなさま、ありがとうございました。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg44yRVM-xYmB58tIvnHNxUcqgShIaW2P8IfQfLdl94mvgy9tqHUKqrKKEgi-baZPPDErURxUHuH2UUH9JdWsEROxq3owuX3nJEDFg1Lgs-VFMbTxn-M4tg92hK4flMOZoxhJOmTVNMjXA/s1600/IMG_20130215_181453.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg44yRVM-xYmB58tIvnHNxUcqgShIaW2P8IfQfLdl94mvgy9tqHUKqrKKEgi-baZPPDErURxUHuH2UUH9JdWsEROxq3owuX3nJEDFg1Lgs-VFMbTxn-M4tg92hK4flMOZoxhJOmTVNMjXA/s320/IMG_20130215_181453.jpg" width="320" /></a></div>
<br />
<br />
思えば、GREEは大学4年生のときに僕がはじめてふれたSNSでした。この体験が僕がインターネットに興味を持ったきっかけであり、そのGREEのSNSに携わることができたのは僕にとってはとても幸せな体験でした。<br />
<br />
今後もGREEはユーザーとして楽しみたいと思います。GREEをやっている人はぜひ友達になってください!<br />
<a href="http://gree.jp/114804">http://gree.jp/114804</a><br />
<br />
今後についてはまた別のエントリーで書きたいと思います。<br />
今後ともよろしくお願いいたします。<br />
<div>
<br /></div>
Anonymoushttp://www.blogger.com/profile/05772305330256303125noreply@blogger.com2tag:blogger.com,1999:blog-1131534638298698079.post-40813136882737393942013-02-04T23:43:00.002+09:002013-02-04T23:43:49.475+09:00AKB48で理解するUIとUXの違い<b>UI</b>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzHk4udYZfzo_TyD_nMxCI1css9W5oLUPOQ1d-kNW3J4aVm9Tt99mbim1X4j9cHaIdm8HR-UbUaiKNQ_TBod4QyAPiZb6SduODGAVCBc1ovLuw5FYjkAUxwyV4kcuDw-dLi39S0Q3Whlc/s1600/KojimaHaruna_syosai.jpeg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="299" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzHk4udYZfzo_TyD_nMxCI1css9W5oLUPOQ1d-kNW3J4aVm9Tt99mbim1X4j9cHaIdm8HR-UbUaiKNQ_TBod4QyAPiZb6SduODGAVCBc1ovLuw5FYjkAUxwyV4kcuDw-dLi39S0Q3Whlc/s320/KojimaHaruna_syosai.jpeg" width="250" /></a></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
(画像は公式サイトより)<br />
<div style="clear: left;">
<b>UX</b></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZo05-eCgi8iDpLss3dFZbBRVLM2SwHi3kEAvUh4ZA3haR7LSIQ3JuUyp7cTS0ih7-D6QdWes3tgXo8RicCJkfaAPQhJLeWNuZvbRbKZRgyuhkDwXlVsblsG2eVKWdvoz5XARpZufxRjc/s1600/mig.jpeg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZo05-eCgi8iDpLss3dFZbBRVLM2SwHi3kEAvUh4ZA3haR7LSIQ3JuUyp7cTS0ih7-D6QdWes3tgXo8RicCJkfaAPQhJLeWNuZvbRbKZRgyuhkDwXlVsblsG2eVKWdvoz5XARpZufxRjc/s320/mig.jpeg" width="300" /></a></div>
<br />
<div style="clear: left;">
<br />
<br />
僕なりの解釈です。勘違いだったら教えてください。
</div>
<br />
<br />
Anonymoushttp://www.blogger.com/profile/05772305330256303125noreply@blogger.com0tag:blogger.com,1999:blog-1131534638298698079.post-69567227742498045482012-10-29T01:13:00.001+09:002012-10-29T01:13:10.117+09:00[Android]ListViewのlistSelectorを使ってタップしたときに色を変えるListViewのアイテムを選択されたときに色を変える方法は、<selector>を用意してその子要素にタップしたときの色を指定するitemは<b>android:state_pressed</b> をtrueにしたものを用意し、選択していないときの色はデフォルトの色で行います。<br />
<br />
ここで、<br />
ListViewのアイテム選択にはバグがあるようです。<br />
listSelectorを下記のようにすると、リストのアイテムを選択したときに<br />
Android2.xだと選択行以外も選択されてしまいます。(Android4.xではこの現象はおきません。)<br />
<br />
<pre class="xml:nocontrols" name="code"><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>
</pre>
<br />
ここでは、私は何も考えずにcolorを使ってしまったのですが、shapeを使って色を指定すれば回避できるようです。<br />
<pre class="xml:nocontrols" name="code"><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>
</pre>
ちょっとはまりました。<br />
ご参考までに。<br />
<br />
<div>
<br /></div>
Anonymoushttp://www.blogger.com/profile/05772305330256303125noreply@blogger.com0tag:blogger.com,1999:blog-1131534638298698079.post-9482020993665081662012-10-27T09:27:00.004+09:002012-10-27T09:27:57.185+09:00Blogを放置しすぎたこのBlogを書くのをすっかり忘れていてずっと放置していたのですが、
少しずつ書こうと思います。Anonymoushttp://www.blogger.com/profile/05772305330256303125noreply@blogger.com0tag:blogger.com,1999:blog-1131534638298698079.post-31815050582645726052012-04-01T03:22:00.000+09:002012-04-13T21:22:28.213+09:00"Webエンジニアのためのデータベース技術[実践]入門"を読みました。Webエンジニアのためのデータベース技術[実践]入門 読みました。<br>
インデックスのような基礎的なところから、<br>
NoSQLのような新しい技術の解説や、<br>
MySQLのソースコードの読み方といった深い解説もあり、<br>
データベースに関しての基礎は一通り学べる本であると思います。<br>
<br>
SQLの構文の解説のような超初心者向けの解説はありませんでしたが、<br>
データベースに苦手意識があった自分としてはとても勉強になりました。<br>
データベースの基礎を身につけるにはこの1冊で十分なのではないかと思いました。<br>
<SCRIPT charset="utf-8" type="text/javascript" src="http://ws.amazon.co.jp/widgets/q?rt=ss_mfw&ServiceVersion=20070822&MarketPlace=JP&ID=V20070822/JP/sassyw-22/8001/fd96cfea-5ded-4a89-99d2-c9966b558265"> </SCRIPT> <NOSCRIPT><A HREF="http://ws.amazon.co.jp/widgets/q?rt=ss_mfw&ServiceVersion=20070822&MarketPlace=JP&ID=V20070822%2FJP%2Fsassyw-22%2F8001%2Ffd96cfea-5ded-4a89-99d2-c9966b558265&Operation=NoScript">Amazon.co.jp ウィジェット</A></NOSCRIPT>Anonymoushttp://www.blogger.com/profile/05772305330256303125noreply@blogger.com0tag:blogger.com,1999:blog-1131534638298698079.post-85700805027000502102012-04-01T03:06:00.000+09:002012-04-01T03:06:29.733+09:00C言語で二分探索木を書いてみた。C言語で二分探索木を書いてみた。
所要時間1時間。
あってる?
<script src="https://gist.github.com/2267195.js">
</script>Anonymoushttp://www.blogger.com/profile/05772305330256303125noreply@blogger.com0tag:blogger.com,1999:blog-1131534638298698079.post-79551142235864739932012-03-25T02:29:00.000+09:002012-03-25T02:29:07.087+09:00あなたがSonyTabletを買うべき5つの理由みんな「新しいiPad」に夢中のようですが、<br />
日本人としては Sony Tabletは無視できない存在です。<br />
ということで、今更ですがiPadブームに便乗してSony Tabletを買いました。<br />
使ってみて、ボクなりにSony Tabletの良いところを考えてみました。 <br />
<br />
<ol>
<li>すぐ買える</li>
<br />
今、新しいiPadを買おうとしても、どこも売り切れ状態で、予約しないとけません。<br />
すぐにタブレット端末を使いたいと思って、思っても手に入りません。<br />
そこで、Sony Tabletです。<br />
すぐにSony Tabletコーナーに行きましょう。在庫がかならずあります。<br />
店員さんもiPadの方に夢中で、Sony Tabletはあんまり売る気が無いので声もかけてくれません。<br />
お店で端末をいくらでもいじり倒せます。<br /><br />
<li>Androidであること</li>
<br />
これは重要です。<br />
Androidはオープンなので、今後たくさんのものに搭載されていきます。<br />
AndroidのUIがいろんなデバイスの標準になるのです。<br />
iOSなんて、たかだかiPod/iPhone/IPadぐらいでしょうが、<br />
Androidはスマフォ・タブレット以外にもTVや、カーナビ、ゴーグルや自転車、ロボットまでにも搭載されるのです。<br /><br />
<li>ソニーのサービスが使える</li>
<br />
Sonyの「Video Unlimited」が使えるので、<br />
Sony Tabletで映画もその場で観れます。<br />
購入とレンタルがあるようです。(個人的にあんまり観たい映画はありませんでしたが)<br />
「PlayStation Store」も入っているので、PSのゲームも買ってSony Tabletでプレイすることができます。<br />
両方ともSony Entertainment Networkのアカウントを使えます。<br />
あとは、「Reader」で電子書籍も楽しむことができます。<br />
ちなみに、「Reader」はMy Sony IDのアカウントが必要です。<br />
<br />
<li>「さばドル」のまゆゆの限定写真が見える</li>
<br />
これはすごいです。<br />
渡辺麻友主演のドラマ「さばドル」の限定写真が見れるのです!<br />
ちなみに、見るためには「ネットフレーム by Life-X」というアプリを<br />
なぜか、Androidマーケットからダウンロードする必要があります。<br />
ちなみに、Life-Xには、My Sony IDのアカウントが必要です。<br /><br />
<li>スリルが味わえる</li>
<br />
ソニー製品です。<br />
いわゆる「ソニータイマー」の存在が噂されるほどの品質ですw<br />
いつ壊れるか、はらはらドキドキのスリルが味わえます。<br />
(ちなみに、ボクのPSPは1年ぐらいで○ボタンが効かなくなってしまいました。。。)<br />
また、ソニーのサービスに個人情報をさらにまたスリル満点です。<br />
一度PSNのIDを流出させましたからね。<br />
ドキドキですよね。<br />
</ol>
<br />
本当は、赤外線でリモコンの役割を果たすとか、<br />
DLNA対応で、Playerとして利用できるとかいろいろあるのですが、<br />
家にテレビとか情報家電系のものがないので試すことができないので、<br />
試した方は使い勝手を教えてください。Anonymoushttp://www.blogger.com/profile/05772305330256303125noreply@blogger.com0tag:blogger.com,1999:blog-1131534638298698079.post-55689252630199329412011-11-13T11:44:00.000+09:002011-11-13T11:44:19.134+09:00CoffeeScriptを学ぶ(2)JavaScriptはプロトタイプベースのオブジェクト指向だったので、<br />
クラスという概念はなかったのですが、<br />
CoffeeScriptには、クラスという概念があります。<br />
<pre name="code" class="javascript:nocontrols">class Hello
method: ->
alert "hello"
</pre>"class クラス名"でクラスを宣言できます。<br />
メソッドは、クラスのブロックで<br />
<pre>メソッド名: (引数) ->
メソッド本体
</pre>と書きます。<br />
<br />
これをJavaScriptに変換すると、下記のようになります。<br />
<pre name="code" class="javascript:nocontrols">var Hello;
Hello = (function() {
function Hello() {}
Hello.prototype.method = function() {
return alert("hello");
};
return Hello;
})();
</pre><br />
CoffeeScriptのページのサンプルの例を持ってくると<br />
<pre name="code" class="javascript:nocontrols">class Animal
constructor: (@name) ->
move: (meters) ->
alert @name + " moved #{meters}m."
</pre>Animalとうクラスです。<br />
コンストラクタは "constructor:"で定義できます。<br />
@xxxはインスタンス変数ですね。<br />
ちなみに#{}を使えば、文字列のなかで変数を評価して値を使用できます。(Rubyと同じ構文ですね。)<br />
<pre name="code" class="javascript:nocontrols">class Snake extends Animal
move: ->
alert "Slithering..."
super 5
class Horse extends Animal
move: ->
alert "Galloping..."
super 45
</pre>継承はextendsを使います。<br />
superでスーパークラスのメソッドを呼び出すことができます。<br />
<br />
やっぱりクラスを使うと、比較的大きなコードを書くときは、考えやすくて便利ですよね。Anonymoushttp://www.blogger.com/profile/05772305330256303125noreply@blogger.com0tag:blogger.com,1999:blog-1131534638298698079.post-54745671546526849852011-11-13T04:19:00.004+09:002011-11-13T11:09:52.710+09:00CoffeeScriptを学ぶCoffeeScriptはJvaScriptに変換するための言語で、<br />
Pythonのような文法を持っているのが特徴のようです。<br />
<br />
このCoffeeScriptを学ぼうと思い、いくつかのサンプルを書いてみました。<br />
まず基本、FizzBuzzです。<br />
(下記はalertで書いたので実行すると大変なことになるから気をつけてね)<br />
<pre name="code" class="javascript:nocontrols">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
</pre>特徴としては、Pythonのようにインデントがブロックを表しています。<br />
インデントでブロックにすると、やっぱり見やすいですよね。<br />
また、メソッドも()がつかないです。<br />
<br />
これをJavaScriptに変換すると、以下のようになります。<br />
<pre name="code" class="javascript:nocontrols">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);
}
}
</pre>
今度はクイックソートを実装してみます。
関数は
<pre>関数名 -> (引数)
(関数本体)
</pre>のです。
CoffeeScriptはwhile文が使えます
<pre name="code" class="javascript:nocontrols">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
</pre>
下記はJavaScriptに変換したときのコードです。
<pre name="code" class="javascript:nocontrols">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);
</pre>Anonymoushttp://www.blogger.com/profile/05772305330256303125noreply@blogger.com0tag:blogger.com,1999:blog-1131534638298698079.post-59023683657671595872011-11-01T01:15:00.000+09:002011-11-01T01:15:05.795+09:00第22回HTML5とか勉強会で発表してきました第22回HTML5とか勉強会で発表してきました。<br />
<br />
今回は初心者向けということで、<br />
SVGってどんなことができるの?っていることを理解してもらおうと思い、<br />
とにかく仕様の紹介をしようと思いました。<br />
ちょっと、意図が伝えられなくて、一部の方からは難しかったというご意見をいただきました。<br />
次回同じような機会があれば、その反省をふまえてもっとよい発表を行えればと思っています。<br />
<br />
以下が発表に使用したスライドです。<br />
<br />
<div style="width:425px" id="__ss_9876497"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/SatoshiWatanabe/svg-overview" title="SVG overview" target="_blank">SVG overview</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/9876497" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe> <div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/" target="_blank">presentations</a> from <a href="http://www.slideshare.net/SatoshiWatanabe" target="_blank">Satoshi Watanabe</a> </div></div><br />
動画も公開されているみたいです。<br />
<br />
<iframe width="420" height="315" src="http://www.youtube.com/embed/7C2bHgvO7AU" frameborder="0" allowfullscreen></iframe><br />
<br />
このような機会を与えていただいた白石さんをはじめHTML5とか勉強会のスタッフの皆様には<br />
本当に感謝をしています。<br />
ありがとうございました!Anonymoushttp://www.blogger.com/profile/05772305330256303125noreply@blogger.com0tag:blogger.com,1999:blog-1131534638298698079.post-25816896040590054212011-08-15T17:26:00.000+09:002011-08-15T17:26:39.989+09:00OAuthの仕組みについてのメモちょっと前に<br />
<a href="http://sassylog.blogspot.com/2011/07/twitteroauth.html">twitterのOAuth認証</a>についてのエントリを書きましたが、<br />
ちょっとOAuthについて自分の頭の中が整理できていなかったので、<br />
ちょっと整理します。<br />
<br />
OAuthってそのそも、<br />
<al><br />
<li>アプリケーションがとあるサービスのAPIを使うための、ユーザに認証してもらうための仕組み</li><br />
<li>アプリケーションはとあるサービスのユーザ名やパスワードをユーザから教えてもらう必要がない</li><br />
<al><br />
です。<br />
<br />
で、<br />
<pre>API提供しているとあるサービスとあるサービス => Service Provider
アプリケーション => Consumer
</pre>とそれぞれ呼びます。<br />
<br />
Consumer(アプリケーション)はService Provider(API提供しているとあるサービス)にConsumerの登録を行います。<br />
登録すると、Consumer KeyとConsumer Secretが発行されます。Consumer Key/Secretはそのアプリケーションを示すトークンです。このConsumer(アプリケーション)はConsumer Key/Secretを使って、Service Providerにリクエストトークンを発行してもらいます。<br />
<br />
リクエストトークンを発行してもらったら、ConsumerはそのリクエストトークンをパラメータとしたURLを使って、Service Provicerのサイトにリダイレクトを行います。<br />
<br />
ユーザーはリダイレクトされたサイト上にて、ConsumerがService ProviderのAPIを使って情報を取得するのを許可します。<br />
<br />
許可したら、Service Providerはあらかじめ登録されたURLへリダイレクトするので、<br />
Consumerはそこから、アクセストークンをService Providerに要求し、Service ProviderはアクセストークンをConsumerに送信します。<br />
<br />
このアクセストークンがあれば、ConsumerがService ProviderのAPIを使うことができるようになります。<br />
<br />
ざっと書くとこんな感じでしょうか?Anonymoushttp://www.blogger.com/profile/05772305330256303125noreply@blogger.com0tag:blogger.com,1999:blog-1131534638298698079.post-69075829662976309662011-08-07T15:10:00.000+09:002011-08-07T15:10:12.997+09:00第1回Androidテスト祭り に行ってきました。<a href="https://sites.google.com/site/atecfes/home">第1回Androidテスト祭り</a> に行ってきました。<br />
行ってきましたと言っても、途中から実行委員にまぜてもらったので、<br />
スタッフとして参加させていただきました。<br />
<br />
ATNDの参加希望者が定員の倍以上になってしまい、<br />
Androidでの品質の確保については、たくさんの人が関心を持っているのだと思います。<br />
(困っている人が多いってことですね><)
今回の発表は非常にレベルが高く、
参加していただいた方々の満足度も高かったのではないかと思います。
個人的には、尾上さんの「テスト可能なUI設計パターン」
が勉強になりました。
ちなみに、僭越ながら私も懇親会でLTをしてきました。
スライドは下記になります。
<div style="width:425px" id="__ss_8788257"> <strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/SatoshiWatanabe/android-8788257" title="これからAndroid開発の テスト自動化の話をしよう" target="_blank">これからAndroid開発の テスト自動化の話をしよう</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/8788257" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe> <div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/" target="_blank">presentations</a> from <a href="http://www.slideshare.net/SatoshiWatanabe" target="_blank">Satoshi Watanabe</a> </div></div><br />
講演者の皆様、ご来場していただいた皆様、Ustreamを視聴していただいた皆様、本当にありがとうございました。Anonymoushttp://www.blogger.com/profile/05772305330256303125noreply@blogger.com0tag:blogger.com,1999:blog-1131534638298698079.post-63139863011092646292011-08-04T22:15:00.002+09:002011-08-04T23:06:33.072+09:00JenkinsのインストールのメモJenkinsのインストールのメモ。あくまでもメモです。<br />
<br />
自宅のサーバーがDebianなので、それを使って。<br />
<br />
まず最初にコマンドラインで、<br />
<pre>wget -q -O - http://pkg.jenkins-ci.org/debian/jenkins-ci.org.key | apt-key add -
</pre>をしたあと、<br />
<b>/etc/apt/sources.list</b>の末尾に<br />
<pre>deb http://pkg.jenkins-ci.org/debian binary/
</pre>を追加します。<br />
<br />
その後<br />
<pre>apt-get update
apt-get install jenkins
</pre>をして、インストールします。<br />
<br />
設定に関しては、<br />
<b>/etc/default/jenkins</b> <br />
をいじった後、<br />
<pre>/etc/init.d/jenkins restart
</pre>をします。<br />
<br />
<b>/etc/default/jenkins</b> <br />
は、たとえばポートを変えたい時は、HTTP_PORTを帰ればいいです。<br />
私は、URLに /jenkins を加えたかったので、<br />
JENKINS_ARGS に --prerix=/jenkins を加えました。<br />
<br />
詳しくは、<a href="https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+on+Ubuntu">ここ</a>を見るといいかもしれません。<br />
<br />
URLにアクセスすると<br />
(例えば、http://localhost:8080/jenkins)<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhjM0DI9HH25C89miwWwPNFzQsUXBVt0jaff_uNiQjOfieuqbsUSzOUyDkOOXGhwFDpxBu1WjNwgPlmGTmlEJw_Uv2FSBri6EitOjPEbP_PZhcv8_UZK61RrendTUvqKmvC9RTLi_taj4/s1600/jenkins.png" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"><img border="0" height="190" width="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhjM0DI9HH25C89miwWwPNFzQsUXBVt0jaff_uNiQjOfieuqbsUSzOUyDkOOXGhwFDpxBu1WjNwgPlmGTmlEJw_Uv2FSBri6EitOjPEbP_PZhcv8_UZK61RrendTUvqKmvC9RTLi_taj4/s320/jenkins.png" /></a><br />
</div><div style="clear : both;">が出てくるはずです。<br />
デイリービルド等ジョブを作成したい時は、「新規ジョブ作成」を選んでください。<br />
</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRroNTMTpNZY3Z6iaKhVgF_yAeIBtV-zPu0NR_488LCMdhl8Xrtm6smC4GzpOhMdxQ7xkiYGoKsHG-48eF7fCxfPQPcB4x_FaHFbbONNr3c43LrAscwXPla7VvJJ-qTeDtSJrfT-8TYto/s1600/jenkins2.png" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"><img border="0" height="193" width="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRroNTMTpNZY3Z6iaKhVgF_yAeIBtV-zPu0NR_488LCMdhl8Xrtm6smC4GzpOhMdxQ7xkiYGoKsHG-48eF7fCxfPQPcB4x_FaHFbbONNr3c43LrAscwXPla7VvJJ-qTeDtSJrfT-8TYto/s320/jenkins2.png" /></a></div><br />
<div style="clear : both;">のページに遷移しますので、<br />
適当なジョブ名を入力して、基本的にフリースタイル・プロジェクトのビルドを使います。<br />
<br />
あとは、下記の画面が出てくるので、適当に入力していってください。<br />
</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0s5FaASuzS4sFe8CoZ-NxEApv2y34OUe3Yuvj_e1Rg_Jebtgy4kXErB6mEPpgyg5uDbncXRAC0IPKzpexAD43_xGtpJieX1zDIHdVipLGLvDbJfDtgJtfoPGiBdqWCfyYk715h5m3Nhs/s1600/jenkins3.png" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"><img border="0" height="224" width="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0s5FaASuzS4sFe8CoZ-NxEApv2y34OUe3Yuvj_e1Rg_Jebtgy4kXErB6mEPpgyg5uDbncXRAC0IPKzpexAD43_xGtpJieX1zDIHdVipLGLvDbJfDtgJtfoPGiBdqWCfyYk715h5m3Nhs/s320/jenkins3.png" /></a></div><br />
<div id="fb-root"></div><script src="http://connect.facebook.net/ja_JP/all.js#appId=144529102294344&xfbml=1"></script><fb:like href="http://sassylog.blogspot.com/2011/08/jenkins.html" send="true" width="450" show_faces="true" font=""></fb:like>Anonymoushttp://www.blogger.com/profile/05772305330256303125noreply@blogger.com0tag:blogger.com,1999:blog-1131534638298698079.post-87874132033433952962011-07-20T23:59:00.001+09:002011-07-21T00:00:14.349+09:00HTML5のpushStateHTML5には、<br />
HistoryオブジェクトにpushState()とreplaceState()というメソッドが追加されました。<br />
<br />
pushStateというのは、<br />
Historyのリストに新しくエントリを追加してしまいます。<br />
ページ遷移をしていなにのに、Hisotryが追加されるのです。<br />
<br />
下記にコードを示します。<br />
<pre name="code" class="html:nocontrols"><html>
<head>
<script>
function push_history() {
history.pushState("", "", "/example");
}
</script>
</head>
<body>
Hello, World!
<form>
<input type="button" value="button" onclick="push_history()" />
</body>
</html>
</pre><br />
これにより、<br />
現在のページが "http://foo.com/hello/index.html " だった場合、<br />
ボタンをクリックするとURLが第3引数により、"http://foo.com/example" に変化しており、<br />
戻るのリストをみると、1個Historyが追加されているのがわかります。<br />
実際に戻るをクリックすると、URLバーが<br />
"http://foo.com/hello/index.html "<br />
に戻ります。<br />
<br />
これで、ページを遷移していないのに、<br />
Historyにエントリを追加して、URLを変更することができます。<br />
<br />
Ajaxとこれを組み合わせた技術を "Pjax" と呼びますが、<br />
これは別途まとめようと思います。<br />
<br />
<div id="fb-root"></div><script src="http://connect.facebook.net/ja_JP/all.js#appId=144529102294344&xfbml=1"></script><fb:like href="http://sassylog.blogspot.com/2011/07/html5pushstate.html" send="true" width="450" show_faces="true" font=""></fb:like>Anonymoushttp://www.blogger.com/profile/05772305330256303125noreply@blogger.com0tag:blogger.com,1999:blog-1131534638298698079.post-39603814282009612872011-07-20T22:40:00.002+09:002011-07-20T22:46:11.706+09:00twitterのOAuth認証OAuthっていうのは、<br />
APIを使用する認証を行うための仕様のことで、<br />
パスワードを第3者に教えることなく、トークンのやり取りだけで認証が行えるしくみのことです。<br />
<br />
OAuthってなんなのかは、<br />
<a href="http://gihyo.jp/dev/feature/01/oauth/0001">ゼロから学ぶOAuth</a>が参考になるとおもいます。<br />
<br />
で、実際にtwitterでOAuth認証をおこなって、<br />
つぶやくためのスクリプトを書きました。<br />
<br />
まず、<br />
<a href="http://dev.twitter.com/apps/">http://dev.twitter.com/apps/</a><br />
でアプリケーション登録を行います。<br />
(登録には、twitterアカウントが必要です。)<br />
で。Consumer Keyと Consumer Scretを取得します。<br />
<br />
で、rubyのOAuthライブラリを使って、<br />
下記のコードを書きました。<br />
<br />
<pre name="code" class="ruby:nocontrols">#!/usr/bin/ruby
require 'rubygems'
require 'oauth'
consumer = OAuth::Consumer.new(
"Consumer Key",
"Consumer Secret",
:site => "http://twitter.com"
)
token = consumer.get_request_token
puts token.authorize_url #リダイレクト先のURL
pin = gets.chop
access_token = token.get_access_token(:oauth_verifier => pin)
puts access_token.token #アクセストークン のtoken
puts access_token.secret # アクセストークンの secret
</pre><br />
token.authorize_url のURLをブラウザに貼付けてページ遷移すると、<br />
リダイレクト先にpinコードが書いてあるので、<br />
それをコピーして入力します。<br />
<br />
そうすると、Accessトークンを取得することができます。<br />
<br />
CosumerトークンとAccessトークン<br />
あとは、twitterライブラリあたりで、<br />
twitter APIを叩けばOKです。<br />
以下は、ただ、"Hello, World" をつぶやくスクリプトです。<br />
<br />
<pre name="code" class="ruby:nocontrols">#!/usr/bin/ruby
require 'rubygems'
require 'twitter'
require 'twitter/console'
Twitter::Client.configure do |conf|
conf.oauth_consumer_token = "Consumer Key",
conf.oauth_consumer_secret = "Consumer Secret",
end
twitter_client = Twitter::Client.new(:oauth_access => {
:key => "Access Token Key",
:secret => "Access Token Secret"
})
twitter_client.status(:post, "Hello, World");
</pre><br />
<div id="fb-root"></div><script src="http://connect.facebook.net/ja_JP/all.js#appId=144529102294344&xfbml=1"></script><fb:like href="http://sassylog.blogspot.com/2011/07/twitteroauth.html" send="true" width="450" show_faces="true" font=""></fb:like>Anonymoushttp://www.blogger.com/profile/05772305330256303125noreply@blogger.com0tag:blogger.com,1999:blog-1131534638298698079.post-4133207900789374572011-06-14T02:17:00.001+09:002011-06-14T02:17:40.120+09:00ATECで発表してきました。大分前になってしまいますが、<br />
ATEC(Android テスト部)で発表してきました。<br />
<br />
ATECでやっているテストをつくるためのAndroidアプリである<br />
testterに関してです。<br />
@nowsprintingさんと共同でやってきました。<br />
<br />
以下がプレゼン資料です。<br />
<br />
<div style="width:425px" id="__ss_8099002"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/SatoshiWatanabe/testter-testter" title="testterを叩け!(ユニットテスト的な意味で) testterとは">testterを叩け!(ユニットテスト的な意味で) testterとは</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/8099002" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe> <div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/SatoshiWatanabe">Satoshi Watanabe</a> </div></div><br />
@nowsprintingさんの資料も下記に載せておきます。<br />
<br />
<div style="width:425px" id="__ss_8099369"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/nowsprinting/atec-mtg7-unittest" title="Atec mtg7 unittest">Atec mtg7 unittest</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/8099369" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe> <div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/nowsprinting">Koji Hasegawa</a> </div></div><br />
もし興味がある方は、是非、ATECにご参加ください。<br />
https://sites.google.com/site/androidtestclub/Anonymoushttp://www.blogger.com/profile/05772305330256303125noreply@blogger.com0tag:blogger.com,1999:blog-1131534638298698079.post-50314612928930304702011-05-02T18:00:00.003+09:002011-05-02T18:12:26.917+09:00Objective-Cを学ぶ以前<a href="http://sassylog.blogspot.com/2009/08/objective-c.html">Objective-Cについて書きました</a>が、<br />
改めてObjective-Cの書き方をざっとまとめてみます。<br />
下記がわかれば、だいたいソースコードを読めるのではないかと・・・自身ないけど。<br />
<br />
<b>.hファイル</b><br />
<pre name="code" class="C++:nocontrols">@interface クラス名 : 親クラス名 {
int member1;
(メンバ変数)
}
- (返り値)メソッド1;
- (返り値)メソッド2:(引数型)引数
- (返り値)メソッド3_1:(引数型)引数1 メソッド3_2:(引数型)引数2
@end
</pre><b>.mファイル</b><br />
<br />
<pre name="code" class="C++:nocontrols">@implements クラス名
- (返り値)メソッド1
{
メソッド1の処理
}
- (返り値)メソッド2:(引数型)引数
{
メソッド2の処理
}
- (返り値)メソッド3_1:(引数型)引数1 メソッド3_2:(引数型)引数2
{
メソッド3の処理
}
@end
</pre><br />
メソッドの呼び出しは、<br />
<pre name="code" class="C++:nocontrols">[オブジェクト名 メソッド名:引数];
</pre>です。<br />
<br />
他には、<br />
ヘッダーの読み込み(includeではなくimport)<br />
<pre name="code" class="C++:nocontrols">#import <UIKit/UIKit.h>
</pre>他の場所で定義されたクラスの名前<br />
<pre name="code" class="C++:nocontrols">@class クラス名
</pre>があります。<br />
<br />
また、アクセッサとして、.hに<br />
<pre name="code" class="C++:nocontrols">@property (nonatomic, retain) UIWindow *window;
</pre>.mに<br />
<pre name="code" class="C++:nocontrols">@synthesize window;
</pre>と書けば、getter/setterメソッドを自動生成してくれます。<br />
<br />
<br />
<pre name="code" class="C++:nocontrols">@property (nonatomic, retain) UIWindow *window;
</pre>の nonatomic は atomicじゃないので、非同期処理は対応しない、 retainは代入したときに参照カウントを1増やして解放されないようにする、っていう意味っぽいです。Anonymoushttp://www.blogger.com/profile/05772305330256303125noreply@blogger.com0tag:blogger.com,1999:blog-1131534638298698079.post-24966232554312593382011-01-25T01:26:00.002+09:002011-01-25T01:28:10.429+09:00Erlangで行頭に行番号をつけるプログラムをつくってみた。なんとなくつくってみただけ。<br />
Erlangを普段の業務とかでどれだけ使えるかのテストをかねて。<br />
<br />
<b>file_number.erl</b><br />
<pre><code>
-module(file_number).
-export([add_file_number/2]).
add_file_number(Readfile, Writefile) ->
{OK, S} = file:open(Readfile, read),
{OK, T} = file:open(Writefile, write),
X = 1,
read_line(S, T, X),
file:close(T),
file:close(S).
read_line(S, T, X) ->
case io:get_line(S, '') of
eof ->
ok;
Line ->
io:format(T, "~w~s~s", [X, " ", Line]),
read_line(S, T, X+1)
end.
</code></pre><br />
<b>実行してみる</b><br />
<pre><code>
1> c(file_number).
{ok,file_number}
2> file_number:add_file_number("test.dat", "test2.dat").
ok
</code></pre><br />
一応<br />
行番号がつくこと確認。<br />
<br />
そんだけ。Anonymoushttp://www.blogger.com/profile/05772305330256303125noreply@blogger.com0