2010年11月28日日曜日

Shibuya.lisp テクニカルトーク#6 に行ってきました。

11/28に
Shibuya.lisp テクニカルトーク#6
に行ってきました。

今回のTechnical Talksは非常にアカデミックなにおいがすごいして、
内容も難しい部分が多かったですが、
大変興味深い内容でした。

記号処理言語と記述言語 〜 TAO/ELISのアプリケーションから職業大でのIT教育に至る経験談
大野先生の講演。
大学時代の話から、NTT時代の研究、現在の職業大学の教育についてのお話をされていました。
LISPでどういうアプリを作ってきたか(エキスパートシステムや決定木の話)、
TAO/ELISがどういう場面で、どんな風に使われていたのかという話は、ものすごく勉強になりました。
最後の職業カードのシステムを設計はUML/実装はLISP/出力はXMLで行う研究の話も興味深く聞かせていただきました。
懇親会で名刺交換させていただいたときには、自分が通っている会社を存じていてびっくりしました。

CLOS/MOP入門とOWL Full処理系開発事例紹介
CLOS/MOPとOWLの話ですが、
CLOS/MOPの話で時間が取られて、セマンティックWebの部分はあまり聞くことができませんでした。(全部聞きたかった><)
MOP(Meta Object Protocol)はメタクラスがどうのこうのと頭がこんがらがってきてしまって、なかなか理解できませんでした。
小出先生に懇親会で難しくて理解できなかったと正直にいってみましたが、あれは慣れだとのこと。あとでビデオを3回ぐらい見て、自分でコードを動かしてご覧といわれました。早速やってみます!

Lisp今昔物語
LISPが昔どういう風に扱われたか、そして今後プログラミングはどういう風になっていくかという話でした。
安村先生が日立時代のHILISPを作ったときのどのように高速化したか、といった話や、LISPのメリットについてお話しされていました。
後半はこれからのプログラミングについてのお話で、
人間はみんなプログラミングできる能力があるので、一般のひとにもそれができるようにということで、Programming 2.0という概念を提唱されていました。
先生はインターフェースの研究を行っていて、そこから、Programming 2.0といった、緩いプログラミングでもいいんじゃないかという発送につながっていったようです。

LTも面白い話盛りだくさんでした。

Shibuya.lispのスタッフの皆様には、このような機会を設けていただいたことに深く感謝申し上げます。
次回も参加したいなぁ。

2010年11月23日火曜日

Firefox Developers Conference 2010に行ってきました。

11月20日に
Firefox Developers Conference 2010 に行ってきました。
私が聞いた講演は下記。

  • 基調講演
  • John Resig feat. Shibuya.js
  • Firefox 4 & Mobile
  • Firefox Panorama
  • Web の地上化 ~ 生活に溶け込ませるブラウザの発想と戦略 ~
  • トークセッション: HTML5 時代の技術で Web プラットフォームはどう変わるのか
  • 大ライトニングトーク
どれも、充実したないようで、大変満足。
下記に、基調講演のメモと、
@dynamitterさんが紹介してたトークセッションのデモサイトのリンクを張っておきます。
その他の内容はもし時間があけばまとめてみようと思います。

基調講演
Jay Sullivanさんの基調講演。
これからはOpen Web Platformになる。
Firefoxは今後
  • mobile
  • cloud
  • apps
  • social
の4つの柱を考えていく。とのこと。


  1. mobile
  2. スマートフォンの普及により、 mobileでしかWebブラウザを使わない人は今後確実に増えていくでしょう。 プラットフォームはAndroid,iPhone,Symbianといった多様化してるし、アプリケーション開発者も大変な状況。 ただ、HTML5の80%はモバイルでも実現できるし、HTML5に環境に依存しないプラットフォームが実現できる。 これは大きなチャンス。 Mozillaとしては、今後大きく進化していくだろうAndroidへ投資していく。
  3. cloud
  4. FireFox Syncの話がメイン。 クラウドはどんどんコストが下がっており、今後クラウドWebにインパクトを与えていく。 MozillaはFireFox Syncを中心にクラウドに取り組んでいくというようなことを言っていた。 クラウドでは、個人情報がダダ漏れになる心配があるが、FireFox Syncは暗号化されている。
  5. apps
  6. ネイティブアプリケーションでできることは、Webアプリケーションでもできるが、 まだapp storeのような収益かの仕組みができていない。 Open Web Apps といった試みを紹介。
  7. social
  8. ブラウザはLaunch Pointとなるので、 世の中のユーザサービスとどのように統合していくのか、どのようにしてコミュニティと一緒に成長していけばいいか考えなければならない。 ソーシャルをどうやって生かすか、どうやって共有するかが今後の課題
Mozillaの今後どういう方向で進化していくかがよくわかりました。

@dynamitterさんが紹介してたHTML5関連デモのまとめ



FireFoxのイベントはかなり勉強になります。
また機会があれば行こう
と思います。

2010年11月21日日曜日

第12回「HTML5とか勉強会」に参加してきました。

11/18に、第12回「HTML5とか勉強会」に参加してきました。
いつも気が付いたら満員だったのですが、念願の初参加です!
今回は素晴らしいスピーカーの皆さまでした!感激でした!
(あと、英語だったので、あんまり理解できないところも多々。。。orz)

Paul Irish: The State of HTML5 : Inaugural Address
http://wde2010-pi.appspot.com/#slide1

HTML5関連技術について、一通りのデモを見せてくれました。
Audio data APIとWebGLを組み合わせたもののデモは秀逸でした。
WebGLで書いたビリヤードゲームで、玉のぶつかった音とかをAudio Data APIで表現したり。
もう、HTML5でゲームやらアプリやらを作れる時代が来ていることを実感。
SVG Filterなんかも紹介。
ライブラリとして、
HTML5の対応状況を調べてくれる modernizer.js  http://www.modernizr.com/
無駄なスクリプトのロードを防いだりしてくれるスクリプトローダーの
yeonope.js http://yepnopejs.com/
を紹介していました。

Bruce Lawson: WAI-ARIA
http://www.slideshare.net/brucelawson/bruce-lawsonhtml5ariajapan

WAI-ARIAというアクセシビリティの仕様のお話。
WAI-ARIAを描けば、例えば、ディスプレイがないデバイスでも音声などで補助してくれる、
そういうことを実現するための仕様です。
WAI-ARIAはHTML5と組み合わせることが可能で、
roleという属性を使って、"navigation"とか"banner"とかその要素の
役割を書くことができるようです。
HTML5には<nav>とか、<header>とかセマンティクスが用意されていますが、
対応したデバイスを考えてWAI-ARIAも組み合わせて書くべし。
あとは、要素にwebSRTを指定して、動画に字幕をつけるデモもしてました。

Jonathan Stark: jQuery Mobile + PhoneGap
http://www.slideshare.net/jonathanstark/building-mobile-apps-with-html-css-and-javascript-4807782

モバイルのWebを書くにはどうするかという話。
モバイルのwebを書くためのライブラリとして
  • iUI
  • jQTouch
  • Sencha Touch
  • jQuery Mobile
を紹介。
jQTouchのライブコーディングは非常におもしろかった。
WebアプリとNativeアプリを組み合わせるための
PhnoeGapの紹介もしてくれました。

Michael Fellinger: Canvas implementation using CoffeeScript

Coffee Scriptという
Ruby/Pythonライクで、
書いたコードをJavaScriptに変換してくれるスクリプト言語を紹介してくれました。
存在は知っていましたが、いじったことはなかったので、
あとでいじってみようと思いました。
詳細は下記で。Web上で動かすこともできます。
http://coffeescript.org

懇親会でのライトニングトークも面白かったです。



このようなすばらしい勉強会を企画してくれた主催者の皆様に感謝!
また行きたいな!

2010年11月13日土曜日

情報収集の方法

私が今勤務している会社で最近、
係長・主任クラスの社員が中堅社員研修というものを受けているようです。
(私は平社員なので受けられませんが)

これは、同様の主任クラスの社員の話ですが、
中堅社員研修のなかで、講師の先生が
「私の会社で給料をあげるのは簡単です。
例えばAKB48のメンバーの名前を10人言えといって、言うことができれば給料を上げます」
と話されてたとか。
これは決してその先生がAKBヲタというわけではなく(笑)、
仕事に関するものをちゃんと情報をキャッチして覚えているかどうか試すということらしいです。
(ちなみにちょっと聞いただけなので、その先生がどの業界の人とかそういうのは不明です。)

でも、ただその業界に関する情報を一生懸命覚えようとしても、
覚えられるものではありません。
AKB48の名前を年号のように覚えるのはバカみたいじゃないですか(笑)

やっぱり、自然に情報をキャッチできるようにする、仕組みを整えるといったことが
大事なのだと思いました。
ということで、私の情報収集の方法をまとめてみようと思いました。

  • まず興味をもつこと
  • その情報を持っている知り合いを増やす
  • 情報収集する仕組みを構築する

まず興味をもつこと

例えば、AKB48の名前を覚える場合について。
  • AKB48のメンバーが出てるドラマを見る
  • => その娘の名前を覚える
  • => その娘の出ているテレビや雑誌などに目がいくようになる。
  • => blogやtwitterをチェックするようになる。
  • => blogやtwitterで他のメンバーの話が出てくるので、その娘も覚えるようになる。

ここで、全くその娘を知らない場合は、
例えば本屋で雑誌の表紙を見ても、素通りしてしまいましが、
知っていると「あ、あれに出てたあの娘だ」と頭に引っかかるようになります。
スタート地点はまず興味を持つことです。
どうしても興味を持てない場合は、もうあきらめましょう。

その情報を持っている知り合いを増やす

共通の趣味/関心を持つ知り合いは重要です。
同じ関心を持つことで、
自分が知らない情報を知ることができます。
(ちなみに関心がない情報はいくら聞いても記憶に残らないものです。)
Androidの便利なアプリとかは、
Geekな先輩に教えてもらったりしています。
(先日はAndroid標準の連絡先アプリが便利と教えてもらいました。)

AKBファンはどうだか知りませんが、
大学生のときにモー娘。のコンサートに行ったときは、
いっぱいグループがあって情報交換をしているのを見ました。
好きなメンバーのプロフィールとか、スケジュールとか、グッズの情報とか。
そうやって、情報収集しているんですね。

情報収集する仕組みを構築する

情報を効率翌週収集する仕組みを構築します。
まずはインプットです。
インプットはやっぱりGoogleReaderです。
RSSをとにかく購読して、
GoogleReaderで一気に読んでいきます。
RSSはタグで整理しておき、タグごとに読んでいきます。
GoogleReaderはスクロールすれば読んだことになるので、
興味がない記事はタイトルと1、2行だけ読んでスクロールしてしまいます。
読みたい記事は、自分は「Read It later」に入れておいて、後でiPadで読みます。

twitterも情報収集に使えます。
ただ、TLを眺めているときりがないので、
リストを活用します。

次にアウトプットです。
インプットだけでなく、できる限りアウトプットをして自分の頭の中を整理したり、記憶を強化するのは重要です。
すべてEvernoteに書いていきます。
本を読んだときのメモや、講演会・勉強会のメモ、気になったこと等は、
すべてEvernoteに書いておきます
書いたことは、電車の中など時間があるときに、XperiaやiPadを使って読んでいます。
もう一度読み返すことによって、頭の中を整理します。
週末にEvernoteに書いたものを整理します。

ある程度まとまったら、
スライドにまとめて、発表資料にしてしまいます。
昔、私がいた部署では、研修等に行ったときに課定例でそのフィードバックのための発表をする機会をもうけてもらっていました。
スライドを作っていると、頭の中でもやもやしたものが整理されます。
わからないところ、わかったつもりになっていたところがはっきりします。
わからないところは、調べ直して整理できます。

と偉そうに書きましたけど、
自分もまだ試行錯誤の状態です。
もっとブラッシュアップしておこうと思います。

2010年11月9日火曜日

日本Androidの会11月の定例イベントに行ってきました。

日本Androidの会11月の定例イベントに行ってきました。
簡単にレポートします。

SHARP Androidモデルのご紹介とタッチ&トライ

今回はタッチ&トライということで、
au/Softbank/docomo 3キャリアの端末を実際に触らせてくれました。
感想としては、

  • 液晶きれー
  • 3Dスゲー

ってとこですかw

いや、3つともすごいいい機種です。
液晶はWVGAで、とてもきれいでした。

UI(ホームスクリーンとかメニューとか)はAndroid標準からはちょっといじっている
感じでした。
起動中のアプリ一覧も画面の右下のアイコンをタップすれば一覧みれますし。
3キャリアとも若干の違いはあるけど、ほとんど同じもののようでした。

SoftBankとdocomoは3Dに対応していていましたが、
本当に3Dに見えました。
カメラも3Dに対応していて、撮った写真を3Dにできます。
撮るときにすこしだけ、カメラを右に動かすようにして撮ります。
今までの2Dの画像も3D化できるとのこと。
正直、3Dの動画やゲームをみるのは、いいけど、
カメラとか3Dは必要ないんじゃないかと個人的には思います。
SoftBankの携帯、ホームスクリーンとかメニューとか3Dにできたけど、若干気分悪くなりましたw
あと、3Dの拡張APIもあって、それの公開も検討しているそうです。
正直アプリ開発には必要ないかな。ほかの端末で動かないなら意味ないし。

あとは、いわゆるガラケーの機能(ワンセグとかFelicaとか)
をほとんど持ってきているので、
メインの電話機として十分活躍できそう。
(オープンのプラットフォームでFelicaを載せたのはすごい!)
ガラケーを買い替えようとしているけど、ガラケーの機能も必要という人は、
ぜひシャープ端末をお勧めします。

気になったのは、同じメーカーなのに、3キャリアともだいぶ違う端末にだったこと。
やっぱりそれぞれのキャリアの要求/仕様にあわせて作り込間なくちゃ行けないのかなと思いました。
同じ端末を3キャリアで出せればいいのに(><)

詳しくは、それぞれの端末のページを見てください。



Javaだけじゃない!Adobe AIRで作るAndroidアプリ話

AIRでAndroidのアプリを作ろうぜ!っていう話。

  • AIR2.5 にはAndroid向けにも対応していて、PCやSmart Phoneといったでこでも動かせるアプリを作ることが可能
  • Smart Phone には、AndroidとiOSとBlack Berryに対応している
  • Android向けでも、実行環境はAndroidマーケットでダウンロード可能で、AIR環境がない場合でも、AIRアプリが自動的にAndroidマーケットに誘導
  • Adobeのクロスプラットフォーム戦略として、AIRであれば、ソース共有/再利用ができるので、様々なプラットフォームに対応するコストがグンと下がる


とのことです。
以下、聞いたときのメモをそのまま載せます。
* AIR for Android 開発
-Flash ActionScript
-- 自由度の高いUIコンテンツ作成が可能
--  デザイン指向 
- Flex (ActionScript +MXML)
-- Flashのフレームワーク
-- ビジュアルコンポーネントがそろっている
--- タグで書くだけでFlashUIが作れる
-- Web(Flash)とDesktop(AIR)に対応
-- 次期バージョンではモバイル対応
-- 画面遷移機構もフレームワークも提供
--- 開発が簡単になる
- 開発ツール
-- Flash Builder (Burrito)
--- EclipseベースのIDE
--- preview 制限なし
--- AirSDK/Flex SDK ドウホウ
- 基本構造
-- ルートタグ
-- ViewNavigator
--- MobileApplicationに一つ
--- ビューコントロールを対応
--- データキャッシュ対応
-- View 
-- 一つの画面表示

ぶっちゃけ、シャープ端末を触るのに夢中で開発のデモをあんまりみれなかったのですが(ごめんなさい><)
XMLで見た目を書いて、動作をActionScriptで書くといった感じでしょうか。
個人的には、クロスプラットフォームを実現するんであれば、
HTML5の方がいいんじゃないかなーと思っています。
あれも、要はブラウザがあればどの環境でも動く訳だし。

AIRも結局、プロファイルにあわせて動作をかえなくちゃいけない訳だし、
画面サイズによってレイアウトが崩れる問題も解決できなさそうなので、
クロスプラットフォームって点では微妙な印象です。
でも、FlashやASが得意な人はいいかもしれません。

NEC Life Touch


これ http://www.nec.co.jp/solution/spfsl/cloud/communicator/

こういったデバイスを使って何かのソリューションを提供するんだったら、
利用するならのは手かもと思いました。
アプリ開発者としては、ちょっと。。。
アプリをこのデバイスにサクッと載せられるのならばいいのかもしれないけど。。。

ということで、ざっとですが以上です。

2010年11月5日金曜日

ブラウザカンファレンス2010に行ってきました。

ブラウザカンファレンス2010が11月2日にYahoo!JAPANであり、
行ってきました。

以下に雑多ですが、メモを書いておきます。
本当はまとめて文章にしようと思ったのですが、
整理する時間がなかったので、ほぼそのまま公開。
多分、いっぱい書き落とし、聞き落としがあるような気がしますが。。。

  • HTML5時代におけるYahoo!JAPANの取り組み

Yahoo!の是井さんの発表
* 現状
- 130以上のサービスを提供している
- 49671000000/PV 226120000/UB 月
- 様々なプラットフォームでサービスが提供できるようにする(機器に依存したコードはできる限り避ける)
-- モバイル、スマフォ、テレビ、ゲーム機


* ライフエンジン
- Yahoo!Japanの基本姿勢
- いつでも、どこでも、顧客にサービスを提供できるように


* ライフエンジンを実現するために
- 災害情報モジュールは一斉配信され、全てのサービスで表示
-- 配信プラットホームに一斉配信で全てのデバイスで表示
- 基準規定を設けてサービスを提供
- UIガイドライン設定
-- PCブラウザのみでも数十種類のバージョンをサポート、モバイル、スマフォも最適化へ
- サポートブラウザを規定
-- 一定のシェアを超えればサポートになる
- 社内の軽量javascriptライブラリを使う
- テンプレートシステム
- Yahooモバイルトランスコーダー
- スマートフォン共通テンプレートシステム
--  HTML5、CSS3、JavaScriptを使用したテンプレート。Webstorageを使用してJavaScriptをキャシュするのでアクセス速度が速い。


* HTML5導入
- 「新しい技術を取り込むこと」と「多くのユーザーに対応できること」とのバランス
-- スマートフォン中心に導入
--- スマートフォンはすべてWebKitだからね
-- PCブラウザは様子をみながら

  • パネルディスカッション

まず、ディスカッションの前に各ブラウザ代表者のプレゼンがありました。
その後に、ディスカッションという形式でした。

加藤誠さん(Mozilla)
- Firefox4では、JavaScriptが早くしている
- でもSunsupider は本当に役にたってる? 使われない使い方ばかり
-- ベンチマークはリアルワールドではない
- Krakenはリアルでどう使われているか元にして作った。
- 発表資料 http://www.slideshare.net/djraven/keep-it-real-5643210


ダニエルさん(Opera)
- なぜ自分はOperaを好きになったか
- ユーザを楽しませる会社である
- Extension=> Web標準を使って拡張
- 正しい作り方をしてもらうため、変なページはデベロッパーに連絡


春日井さん(Microsoft)
- Silverlightは残る
- PC使用中の57%の時間はブラウザを使っている
- ブラウザは劇場
-- 高速化:GPU JavaScript
-- Webがアプリ化する


北村英志さん(Google)
- Chromeは早い
- タブごとにプロセスが分かれる
- Extensionも別プロセス
- JavaScriptはどんどん早くなっている
- Web標準でextension作れる(operaとの違いは?)
- Chrome web Store
-- Web アプリのマネタイズの方法を提供
-- Hosted Application (従来のWeb)
-- Packaged  Application(クライアント側で実行)


* 実装の優先度
** Firefox
コードの貢献度
bugzillaの報告度(ユーザの声)
** Opera
ユーザと顧客の優先度 バランス
** IE
W3Cに従う
W3Cが定めるHTML5に従う。WebSocketsを実装していないのはHTML5仕様から外れたため
IEは社会インフラになっているので、変えることを好まないユーザが多い。開発して実装するまでの時間が一番かかる。
-- 個人ユースと、法人ユース(会社の縛り)を意識している
-- 「ブザウザには2種類ある。個人でWebを楽しむために使うブラウザと、会社で使わざる得ないブラウザである」
** Chrome
ユーザの声とパフォーマンス重視
html5でコンセンサスが得られているか


* Extension
** Firefox
FireFoxモバイル版に全く同じものを持って行く
ユーザが好みにカスタマイズできる方向で
** Opera
- 仕様は統一するべき
-- Extensionはwidget apiをもとに作った
** Chrome
Exteisionのapiが統一されていることは重要


* 開発者ツール
** Firefox
デバッガにもextension必要じゃね?
Firebugはリリースに影響するほど大きい
** Opera
Dragonfly モバイルサイトとの連携もできる
** IE
F12キー
開発ツールは持っている Visual Studio / Expresson
JavaScriptのツールがない vswdでjs対応計画中
** Chrome
必要な機能実装している


* Video/Audioのコーデック
** Firefox
-- ロイヤリティフリーかどうか重視
-- W3Cに入るかどうかを重視
-- H.264難しい WebM
** Opera
- ロイヤリティフリーが重要
- WebM
- マルチデバイスでコーデックの統一は重要
** IE
- H.264
-- 汎用性の高さ
-- テレビとか利用を考えると汎用性重要
** Chrome
- WebM


  • 感想

Operaがハードウェアを強調していたのが印象的でした。
インターフェースの話(テレビのリモコンはブラウジングが難しい)とか
標準化にもハードウェアが入るべきとか。
videoのコーデックは統一するには時間がかかりそうな気がしました。
個人的には、WebMがロイヤリティフリーでいいと思うんですけどね。
IEの汎用性を考えてH.264っていうのもわかる気がしました。

とにもかくにも、
各ブラウザベンダがWeb技術自体の普及という目標のもと、それぞれが切磋琢磨していて、
いい意味で競争しているんだなと思いました。

発表資料は公開できるものは公開できると言っていたので、
公開されるのが楽しみです。じっくり研究したいと思います。

とても勉強になりました。ありがとうございました。



2010年10月30日土曜日

第19回すくすくスクラムに行ってきました。

10月25日(月曜日)に第19回すくすくスクラムに行ってきました。
http://kokucheese.com/event/index/4912/

"KANBAN AND SCRUM - MAKING THE MOST OF BOTH" の再演
ということで、かんばんとスクラムの比較についてでした。

当日のスライドは下記から見れるようです。
http://www.slideshare.net/kiroh/scrum-kanban
また、以下から「かんばんとスクラム 両者のよさを最大限ひきだす」のPDFを無料でダウンロードできます。
http://www.infoq.com/jp/minibooks/kanban-scrum-minibook


講演の合間に、
ワークショップやディスカッションの時間があり、とても理解しやすかったです。
以下は当日のメモです。
(あくまでもメモなので、詳しくは上記のリンク先を見て下さい。)


- 目的:スクラムとかんばんの違いを理解する。
- kanbanとは
-- 作業フローの可視化をする
-- 仕掛品の制限
-- 計測して最適化をする
-- Doneの定義を行う
- プロセスはツール
-- 適応度が多いチームほどプラクティスが少ないプロセス
--- RUP->XP->Scrum->kanban
- 状況によってツールを選ぶ (XP Scrum kanban)
- ツールは使い方を間違えるもの => ちゃんと使いこなすのが大事
- 仕掛品の制限
-- 仕掛品の制限による最適化
-- 状況によって改善することができる、必要がある
--- 客の状況や組織の状況によって・・・
-- 仕掛の制限で、プロセスが改善できるか考える(仕掛の制限によって出荷までのスピードを短くできるか考える)
--プロジェクトの失敗は
--- 強引なスケジュール
--- 仕掛品がとても多い状態
--仕掛の制限が
--- 低い => 怠けものが出る
--- 適切 => 心地いい
--- 高い => ゆとりがない
- Scrum/Kanban比較
--Scrum/Kanbanは => 透明性を高める
-- Scrum/Kanbanは経験を重視
-- Scrumはやること固定/ Kanbanは常に仕掛品があることが条件
-- Scrumはスプリントが終わるとタスク刷新/Kanbanは残る
-- Scrumは役割を設定 / Kanbanは設定しない。
-- Scrumはスプリントごとに成果物を出す / Kanbanはタイムスタンプを設定しない
-- Scrum はスプリントごとにタスク調整 / Kanban は時間がかかるものでも、終わるまでタスク終わらない
-- Scrum は見積もりをして、ベロシティで計測 / Kanbanは見積もりを数えるのみ(サイズは把握)
- 大切なのは
-- ゴールを把握
-- ツールを批難しない
-- ツールにこだわらない
-- 経験を楽しむ


ツールにこだわらないという言葉に激しく共感しました。
スクラムもかんばんも、ツールであり、
盲目的に「スクラムだからこうすべき」とか言うのではなく、
自分たちのチームに合ったプロセスに改善していかなくてはいけません。
ツールをどう使うかを考えなくてはいけません。
スクラムもかんばんもXPも、自分達にとってプラスになるとおもえれば、
どんどん取り入れて「僕が考えた最高のプロセス」を構築すべきなのです。

これは開発プロセスに限った話ではありません。
たとえば、どこかの企業で成果主義を取り入れ、
大きく利益を上げたとしましょう。
それをまねて自分たちの企業も成果主義を導入したが、
どうもいまくいかない、といったこともあるでしょう。
そのときに、「成果主義はダメだった」と結論を出すのは間違いです。
もしかしたら、成果主義の方法が間違っていたかもしれないし、
自分たちの文化に合わなかったかもしれないのです。
どうして失敗しながらのwhyを分析し、
どうすれば成功するのかを考えるべきです(もちろん、自分たちに合わないなら使わないのが正しいと思います)。

私たちのチームではスクラムを導入していますが、
反省会をしていない状態です。
これは悪しき文化です。
すぐにでも、スプリントが終わったあとに必ず反省会をやるように改善していきたいです。

このような素晴らしい学びの機会を得られたことに感謝します。

2010年10月24日日曜日

Shibuya.lisp Hackathon #1に行ってきました。

Shibuya.lisp Hackathonに参戦してきました。

LISP自体、書くのが久しぶりで、
行く前に久しぶりにちょっと書いてみたら、全然書けなかったので(TT)
いい機会なので、勉強するつもりできました。

当日はもくもくとコードを書いていたので、
もうちょっといろんな人と話せばよかったと思いました。反省。
自分は引っ込み思案でなかなか話しかけられないので、もうちょっとここら辺を克服したいと思います。

最後に成果発表の時間がありましたが、
皆さんの発表見て、「やっぱ格が違うなー。すごいなー。」と思いました。
もっとがんばらないと。


一応テーマとして、
svgをパースして
gauche-glで描画するということをして
勉強しようと思いました。

とにかく、
rectを描画することを目標にがんばり、
なんとか描画するまで行きました(すごく簡単なことなんですけどね;)

以下にコードを晒します。

process_svg.scm

(use sxml.ssax)

(define (translation_rect data)
  (let ((x1 0)
(y1 0)
(x2 0)
(y2 0))
    (map (lambda (x)
  (cond
   ((equal? (car x) 'x)
    (set! x1 (string->number (cadr x)))
    (set! x2 (+ x2  (string->number (cadr x)))))
   ((equal? (car x) 'y)
    (set! y1 (string->number (cadr x)))
    (set! y2 (+ y2 (string->number (cadr x)))))
   ((equal? (car x) 'width)
    (set! x2 (+ x2 (string->number (cadr x)))))
   ((equal? (car x) 'height)
    (set! y2 (+ y2 (string->number (cadr x)))))
   ))
data)
    (list x1 y1 x2 y2)))

(define (get_x1 data)
  (car data))
(define (get_x2 data)
  (caddr data))
(define (get_y1 data)
  (cadr data))
(define (get_y2 data)
  (cadddr data))

(define (process_element elem)
  (case (car elem)
    ('rect (translation_rect (cdr (cadr elem))))
    ('circle (print "circle"))
    ('line (print "line"))))

(define (parser data)
  (process_element
   (car (cdr (car (cdr (ssax:xml->sxml (open-input-string data) '())))))))


main.scm

(use gl)

(use gl.glut)
(load "./process_svg.scm")

(define setup-data
  (map 
   (lambda (x) (/ x 250))
   (parser "<svg><rect height="100" width="100" x="10" y="10"></rect></svg>")))

(define (disp)
  (let ((x setup-data))    
    (print x)
    (gl-clear-color 0.0 0.0 0.0 0.0)
    (gl-clear GL_COLOR_BUFFER_BIT)
    (gl-color 1.0 0.0 0.0)
    (gl-ortho 0.0 1.0 1.0 0.0 -1.0 1.0)
    (gl-begin GL_POLYGON)
    (gl-vertex (get_x1 x) (get_y1 x) 0.0)
    (gl-vertex (get_x2 x) (get_y1 x) 0.0)
    (gl-vertex (get_x2 x) (get_y2 x) 0.0)
    (gl-vertex (get_x1 x) (get_y2 x) 0.0)
    (gl-end)
    (gl-flush)))
(define (keyboard key x y)
  (cond
   ((= key 27) (exit 0))
   ))

(define (main args)
    (glut-init args)
    (glut-init-display-mode GLUT_SINGLE)
    (glut-init-window-size 250 250)
    (glut-create-window "nil window")
    (glut-display-func disp)
    (glut-keyboard-func keyboard)
    (glut-main-loop)
    0)


だいぶ汚いコードですが;
もうちょっとうまく書けるような気がするなー。。。

実行結果は以下です。

とりあえずここまでできたので、
XMLをちゃんと扱えるようにする。
circleといったほかのプリミティブを秒かできるようにする。
アニメーションをできるようにする。
までやりたいなと思います。

早く初心者から脱却したいなー。

(10/30追記)
ソースをGithub に公開しました。 
 
本当はもっとちゃんとしたものになってから公開しようかと思ったんですけど、
そんなこと言ってたらやらないまま終わっちゃいますからね。

2010年9月5日日曜日

Mozilla 勉強会@東京 4th に行ってきました。

Mozilla勉強会に初参戦してきました。

会社ではブラウザのレンダリングエンジン開発の任を解かれたといこともあり、
いままで行きたくても行きづらかった勉強会に行こうと思い、
思い切って参加しました。
アウェイな空気でいづらかったらどうしようと思いましたが、そんなことはなく、
すごく楽しめました。


dynamis さんの発表、Firefox4の新機能の紹介。
Firefox4はいろいろな機能が実装されます。楽しみ!


taken さんのSVGの発表。もとSVGistとしてはとっても興味深かったです。
ついに SVG AnimationがFirefox4で使えるようになる!


@hokutsさんのオフラインwebアプリケーションとIndexed Databaseは面白かったです。
なかなか、Web StorageとかDBあたりの仕様はサボっていてきちんと勉強していなかったので、
とても勉強になりました。


LTも楽しい内容満載でした。(LTじゃなくて普通に発表聞きたかった。。。)


今回の内容はとてもためになりました。
あとできちんとまとめないと。

2010年8月26日木曜日

デイリースクラムについて

私が今いるプロジェクトでは、スクラムという開発手法を採用しています。

スクラムとは何かは別途まとめるとして、
スクラムのプラクティスの一つにデイリースクラムというものがあります。
デイリースクラムでは、スクラムマスターと呼ばれる進行役が
  1. 昨日何やったのか?
  2. 今日は何をやるのか?
  3. タスクをやる上で何が障害になっているのか?
をメンバーひとりひとりに聞いていきます。

このデイリースクラムですが、
最近儀式化というかマンネリ化しているような気がします。
(正確に言うと、私はプロジェクトに途中から入ったので、最初からこの状態でした。)

何がマンネリ化しているのかというと、
全員が昨日やったことと今日やったことしか言わないのです。それで終わり。
これじゃ、何が問題かわからないし、やる意味がないんじゃないかという気がします。

じゃ、意味があるMTGとはどういうものでしょうか?
朝のMTGは目的は何なんでしょうか?

私は問題を素早くキャッチアップする手段と考えていました。
問題点をはっきりさせ、改善させるものだと。

これを私の同期に言ったら、
MTGで問題を報告する時点もう遅いといわれてしまいました。
確かにその通りですね。問題が発覚したらすぐにアラートをあげなくちゃいけませんからね。

で、議論した結果、朝MTGの目的は
  • プロジェクトの方向性を確認する
  • 気合いを入れる
の2点ではないかと。

プロジェクトの方向性を確認するとは、
みんながちゃんとゴールに向かって走っているかを確認することですね。
締切にはきちんと終わるのかとか、無駄な作業はしていないのかとか。
朝のMTGで全員が同じ方向を向くように確認する作業をすると。

あとは気合いを入れる。
私の同期が「気合いがあればプロジェクトは成功する」と言ってました。
ちょっと言いすぎかもしれませんが、
みんなが終わらそうという気持ちがなければプロジェクトはいい方向には行きませんからね。

これをもとに、どういうプラクティスをすればよいのかを今考えているところです。
まとまったらまた書こうと思います。

2010年7月19日月曜日

"in a car" と "on a bus"

"car"と"bus"では、使う前置詞が違います。

車に乗るときは、
I get in a car. といいますが、
一方バスに乗るときは、
I get on a bus.
といいます。

inは空間の中にいるイメージ。onは接触しているイメージです。
私は、busだろうがcarだろうが、車体の中にいるのだから"in"を使うのが正しいのではないかと
ずっと疑問だったのですが、
公共の乗り物の場合、公共の場所の上に立っているか座っているイメージのようです。
busという公共のフィールドに接触しているので、on a busを使うようです。
(正直、若干納得いっていなかったりするのですが、英語圏の人はそう考えるようです。)

飛行機も同様なので、on a plane
電車も同様なので、 on a train

ちなみに、降りるときは、バスの場合、onの反対で
I get off a bus.
車の場合、inの反対で
I get out of a car
になります。

2010年7月16日金曜日

What would you do if your best friend was computer hacking?

会社の英会話で習った表現。

What would you do if your best frend was ...?
(君の親友が...したら、君は何をする?)

"Would you A?"で「Aしてくれますか?」だから、
"What would you do?"「何をしてくれますか?」になります。

What would you do if your best friend was stealing money from his parents?
I would do nothing.

What would you do if your best friend was drinking too much alcohol?
I would talk to him. I worry about his health.

What would you do if your best friend was selling illegal drugs?
I would go to the police.

てな感じ。

What would you do if your best frend was computer hacking?
なんて聞かれても、
I would help him!
なんて答えないように!


あと習った表現は
None of your business.は「気にしない/余計なお世話だ」っていう意味です。

Where did you buy it?
None of your business.

ま、これは使うことはないだろうけどね。

2010年7月15日木曜日

品質保証のお勉強



今日(というかもう昨日の夜)に、部署に入った新入社員歓迎の飲み会に行ってきました。
部署といっても新人は品質保証課に配属なので、
自分たちがいる部の品質保証課に配属された人の歓迎会です。

私たちのころが入社した時は、1か月ぐらい研修後、
即実戦投入でしたので、会社も変わったなぁと実感します。

でも、開発にいると、品質保証の勉強ができなかったので、
私は自分で勉強しました。
あと、品質関連の研修はできる限り参加しました。

1年ぐらい前に受けた「品質マネジメント研修」のテキストがよくできていて、
品質に関する内容が網羅されているので、肌身離さず持っています。
といっても、研修受けていなければテキストはもらえないので、
そういった網羅されている書籍がほしい場合は、
ソフトウェア品質知識体系ガイド(SQuBOK)をお勧めします。

今日は品証の人と話して自分の知識のなさを痛感しました。
これからも勉強を続けようと思います。
また、知っている知識はできる限りこのブログに書いていこうと思います。

2010年7月12日月曜日

ビデオ会議に出て思ったこと

中国にある子会社と毎週ミーティングがあるのですが、
遠隔地なので、ビデオ会議を行っています。

今日もそれに出席していたのですが、
途中で向こうの映像が途切れて音声だけになってしまいました。
その後ミーティングを続けたのですが、
すごくやりづらさを感じました。

ビデオ会議なので、映像の解像度は低いのですが、
それでも顔を見るのと見ないのとでは、全然やりやすさが違うのを実感しました。

人間は相手の表情を見ながら話し方を変えたり、逆に相手の行っていることのニュアンスを感じたりを、
無意識で行っているのかと思います。

普段のミーティングでも、
ノートPCをもちこんでディスプレイを見ながらミーティングする人を見かけますが、
やっぱりそれはよくないことで、
相手の表情を見ながら会話をすれば、お互いの理解度を確かめながら話すので、
話がまとまりやすいと思います。
あとはメールや電話ですまそうとするのではなく、
可能ならば直接会話して話をした方がいいのだと思います。

思わぬところで勉強になりました。

2010年7月10日土曜日

リスニングの練習



英語は毎日勉強しないとすぐに忘れるということで、
基本毎日やっています。

で、リスニングに使っているがアルクから出ている"究極の英語リスニング vol.1"
1000語レベルということで、簡単な単語しかでてこないので、
これを、散歩している時とかに聞き流してます。

で、今日はこれをつかってディクテーションをしてみました。
うまく書きとれなかった部分はテキストにしるしをつけます。
しるしがついたところが苦手なところです。
自分は、どうも冠詞や前置詞やitといった部分がリンクしてしまうところがうまく聞き取れないようです。
聞き取れるようになるまで、何度も繰り返し聞いて、がんばります!

2010年7月9日金曜日

Are you addicted to programming?

会社で毎週英会話を習っているのですが、
今日習った表現。

Are you addicted to A?
(君はAの中毒なのか?)

addicted には、"中毒になっている"っていう意味ですね。
宇多田ヒカルの"Addicted To You"は、いわば「あなたに夢中」って意味ですかね。

Are you addicted to chocolate?
No, I'm not addicted at all.

Are you addicted to coffee?
Yes, I'm a little addicted.

で、私が考えたのは、
Are you addicted to programming?
もちろん、答えは
Yes. It is dangeroud for me!

もうひとつの表現は
You name it. (何でも!)
I like C, Java, Ruby and so on. You name it. I like every programing languages.
とでも使えばいいのかな?

Blogの更新

Blogの更新をだいぶサボっていましたが、
今日からBlogを毎日更新とおもいます。
毎日何かBlogにするネタを探して記事にします。
がんばります!

2010年5月30日日曜日

NHK技研公開2010に行ってきました。

NHK放送技術研究所とは、放送全般を扱う唯一の研究機関であり、
その技研が年に1回研究成果を公開する「技研公開」を行います。
今回、私も当日の思い付きですが、せっかくなので行ってきました。

目玉はスーパーハイビジョンっぽかったですが、
そのほかにも放送と通信の連携から画像処理、信号処理と幅広い内容を扱っています。

特に度肝を抜いたのが、シアターでのスーパーハイビジョンの実演。
大スクリーンでの3300万画素の映像と、
22.2chの音響システムはすごかった。。。
東京マラソンの映像は、
ランナー1人1人の顔がはっきりみえて、
アスファルトに跳ね返る雨粒もよくわかりました。

あとは、インテグラル立体テレビ。
インテグラル方式とは、小さいレンズをたくさん並べて立体映像を録画、再生する方式のようで
メガネをかけずに3次元映像が楽しめるということで
体感してきました。
いろんな角度から除いても立体映像が見え、これを専用メガネを使わずに実現できるのはすばらしいと思いましたが、
だいぶ画像がぼやけているのが気になりました。
これは今後改善されるのかな?

ただ、これらの技術はもう人間のキャパシティを超えつつあるのかなとも思いました。
こんなに高精細な画像は長時間眺めるのは相当疲れるだろうなというのが正直な感想です。
例えば、報道番組やらバラエティやらはこんなハイスペックなものはいらないわけですし
あったらいいなと思うのは、スポーツぐらいでしょうか?
映画も映画館に見に行けばよいので、これを一般家庭で楽しめるようにすべきかはちょっと疑問です。

個人的に興味があったのは、放送通信連携系。
特に携帯電話との連携は面白かったです。
デモでは、テレビに表示させたQRコードを用いてログインし
携帯電話から番組を探して表示させることを行っていましたが、
例えば、面白い番組を携帯に受信して友達にメールで進めてみたりとか、
テレビショッピングを携帯電話の課金システムで行うといったことが
実現できるなと思いました。

また、番組の推薦サービスと連携させて、
携帯電話の情報を使って番組推薦も叶になると言ってました。
携帯電話は個人のプロファイル情報がたくさんありますから、
これを利用できれば面白いことがいっぱいできそうです。

資料は技研公開のページに置いてあったので
詳しくはそちらを見ていただければと思います。
http://www.nhk.or.jp/strl/open2010/index.html

2010年5月5日水曜日

twitterのつぶやきをmixi日記に投稿するスクリプトを作ってみたけど…

twitterの前日のつぶやきをまとめてmixiの日記に投稿するスクリプトを書きました。
mixiの日記投稿のAPIは公開されていナイっぽいので、
こちらを参考にさせていただきました。

mixi for iPhoneから発掘されたmixi日記投稿用API

以下がコードです。今回はPerlを使いました。

use strict;
use warnings;
use LWP::UserAgent;
use LWP::Authen::Wsse;
use HTTP::Request::Common;
use XML::DOM;
use Encode;
use Date::Parse;
use DateTime;
use utf8;


my $entry = "";
my $title = "";

my $ua = LWP::UserAgent->new;

my $req = HTTP::Request->new('GET', "http://twitter.com/statuses/user_timeline.xml");
$req->authorization_basic('(★twitterのユーザ名を入れる)', '(★twitterのパスワードを入れる)');
my $res = $ua->request($req);
if ($res->is_success) {
    my $parser = new XML::DOM::Parser;
    my $doc = $parser->parse($res->content);
    my @status = $doc->getElementsByTagName('status');
    my $t_dt = DateTime->today;
    my $prev_day = $t_dt->day - 1;
    $title .= "  " . $t_dt->year . '/' . $t_dt->month . '/' . $prev_day;
    $title .= encode('utf8', "のつぶやき");
    foreach (@status) {
  my @children = $_->getChildNodes;
  my $text;
  my $dt;
  foreach (@children) {
      if ($_->getNodeType() == ELEMENT_NODE) {
    if ($_->getTagName() eq "text") {
        #$text =  encode('shift_jis', $_->getFirstChild->toString);
        $text =  encode('utf8', $_->getFirstChild->toString);
    } elsif ($_->getTagName() eq "created_at") {
        my $epoch =  str2time($_->getFirstChild->toString);
        $dt = DateTime->from_epoch(epoch => $epoch);
    }
      }
  }
  if ($dt->year == $t_dt->year && $dt->month == $t_dt->month && $dt->day == $t_dt->day-1) {
      $entry .= "  " . $dt->year . '/' . $dt->month . '/' . $dt->day;
      $entry .= " " . $text . "\n\n";      
  }
    }
} else {
    print "error";
    exit;
}

my $id = '(★mixiのログインメールアドレスを入れる)';
my $pass = '(★mixiのパスワードを入れる)';
my $member_id = (★mixiのメンバーidを入れる);

my $ua2 = LWP::UserAgent->new;
$ua2->credentials('mixi.jp:80', '', $id, $pass);

my $content = <<__XML__;
<?xml version='1.0' encoding='utf-8'?>
<entry xmlns='http://www.w3.org/2007/app'>
  <title>$title</title>
  <summary>$entry</summary>
</entry>
__XML__

print $content;

$res = $ua2->post(
  "http://mixi.jp/atom/diary/member_id=$member_id",
  'Content-Type' => 'application/atom+xml',
  'content' => $content,
     );

warn $res->content unless $res->code == 201;


使ってみて思ったのが、
twitterは日ごろ、その瞬間に思っていることを気軽に投稿するものなので、
1日まとめてしまうと、なんだか、まとまらないものになってしまいます。

日記なんかは内容をきちんと考えて文章をまとめますが、
twitterはそんなことを考えません。

このようなtwitterをmixiに投稿するスクリプトを常に回してしまうと、
逆にtwitterのつぶやきを日記に公開することを前提として考えながらつぶやいてしまうので、
twitterのメリットがなくなってしまいます。

ということでこのスクリプトはお蔵入りです。

2010年5月1日土曜日

[メモ]モバイルについて思うこと

なんだか、
今までのPC向けウェブサイトのノウハウを
モバイル向けにどうやって当てはめようみたいな話を聞いたので、
「それちょっと違うんじゃないのかな。」と思ったので、メモ。

携帯電話にはQRコードやFeliCaで
直接サイトに誘導できるので、
そういった方法でサイトに誘導する方法で十分で
検索サイトについて考えるのは不要だと思います。
(もちろん、それでサイトを見に行ってもらえなければ意味がないのですが)

そしてQRコード等で誘導したサイトから
ウィジェットなり、iPhoneアプリ/Androidアプリといった専用アプリを用意して
インストールしてもらうようにします。

あとは、
ゲームや最新情報を配信したり、クーポンのような特典をつけたり、
アプリを通して魅力的なコンテンツを提供していくのがいいのではないかと思います。
モバイル向けには
この専用アプリを魅力的に作る方法を追求していくべきだと思います。
これは、今までのPC向けのウェブサイトのノウハウとは違うと思います。

といってもここら辺の分野は私は素人なので、
もう少し勉強してまとめようかなと思います。
上記もきちんと調べたわけではなく、ただの印象や思い込みも含まれているので、
あしからず。

2010年4月7日水曜日

正しい設計とは何か

最近は仕事で設計レビューや実装レビューをよく行っているのですが、
「ん?なんだこのクラスは?」
「どうしてこのクラスは相互参照する必要があるのか?」
「参照が循環している・・・。」
といったものをよく見かけます。

こういうのって最初は気をつけるんですが、
どんどんクラスを足していくうちに本人ん気がつかないうちに
入り組んだ構造になってしまうようです。

正しい設計とは、私が思うに、
  • きちんと責任を明確にしてモジュールに分割する
  • モジュールの中でまた責任ごとにクラス分割する
  • モジュール間・クラス間は疎結合
をきちんと守ることだと思います。

相互参照していたり、
ダイヤモンドのような構造になっていたり、
入り組んでいたりするとやっぱりどこか責任が明確になっておらず、
一つのクラスで2つの役割があったりします。
(もちろん原則で、例外もあります。)

クラスの参照が入り組んでいると、そのまま実装すると
とたんにソースコードが読みづらくなります。
で、そういう場合はたいてい機能が独立していないので単体テストもしづらくなります。

設計しているときは、
常にモジュール・クラスの責任を意識しながら設計すべきだと思います。
「リソースの取得がいろんなところに分散している。」
「なぜこのクラスはリソースの取得とデコードの両方やっているの?」
みたいなことがあったら、もう一度、構造全体を見直すべきだと思います。

といっても、原則がわかっていても、なかなか実践できないものです。
やはり「デザインパターン」の本を読んだりして普段から勉強することと、仕事上でトライアンドエラーを繰り返して
スキルアップを図っていくしかないのかなー、思います。




2010年4月4日日曜日

[android]SurfaceViewのサンプルプログラミング

SurfaceView は UIスレッドとは別のスレッドで描画を行えるViewです。

サンプルプログラムを書いてみました。

package jp.android.hellosurfaceview;

import android.app.Activity;
import android.os.Bundle;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Color;
import android.view.SurfaceView;
import android.view.SurfaceHolder;

public class HelloActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        HelloSurfaceView surface = new HelloSurfaceView(this);
        setContentView(surface);
    }
}

class HelloSurfaceView extends SurfaceView 
    implements SurfaceHolder.Callback, Runnable {
 private SurfaceHolder holder;
 private Thread mainLoop;
 
 public HelloSurfaceView(Context context) {
  super(context);
  holder = getHolder();
  holder.addCallback(this);
  holder.setFixedSize(getWidth(), getHeight());
 }
 
 @Override
 public void surfaceDestroyed(SurfaceHolder holder) {
  mainLoop = null;
 }
 
 @Override
 public void surfaceChanged(SurfaceHolder holder, int format,
    int width, int height) {
  mainLoop = new Thread(this);
  mainLoop.start();
 }
 
 @Override
 public void surfaceCreated(SurfaceHolder holder) {
 }
 
 @Override
 public void run() {
  while (mainLoop != null) {
   Canvas canvas = holder.lockCanvas();
   Paint paint = new Paint();
   paint.setColor(Color.BLUE);
   paint.setStyle(Paint.Style.FILL);
   canvas.drawRect(100, 100, 200, 200, paint);
   holder.unlockCanvasAndPost(canvas);
  }
 }
}

いろいろググって参考にしましたが、
SurfaceViewを勉強するなら以下が勉強になると思います。
SurfaceViewならAndroidで高速描画ゲームが作れる 
http://www.atmarkit.co.jp/fjava/rensai4/android12/android12_1.html

2010年3月27日土曜日

[android]Android ndk をいじってみる

メモです。

とりあえず、ここからndkを落としてきます。
http://developer.android.com/intl/ja/sdk/ndk/index.html


あとは、下記を参考にして、ビルドします。
http://d.hatena.ne.jp/bs-android/20090707/

気をつけなければいけないのは、Cファイル(hello-jni だったら、hello-jni.c)を書き換えたら、

make APP=hello-jni

のように、makeを通し、EclipseもF5を押してRefrechしてからビルドしないといけません。ここを忘れてはまりました。

2010年3月24日水曜日

Clojure 再帰

Clojureの再帰の書き方

(loop [result [] x 5]
  (if (zero? x)
    result
    (recur (conj result x) (dec x))))
-> [5 4 3 2 1]

loopは別にループをさせるわけではなく、[]に変数の束縛を作って、その後のS式を評価するもので、letとほぼ同じ。ただ、loopは、recurを読んだときに、loopを指定された引数で実行して、再帰を実現するようです。

Clojure マップ

Clojureには、マップというキーと値をペアとして持つコレクションがあります。
例えば、
{"x" "a" "y" "b"}
とかき、xがキーでその対応する値がa, yがキーでその対応する値がbとなります。キーと値を交互に書くわけです。

キーにはキーワード(:xxx)がよくつかわれます。
{ :first-name "Saki" :family-name "Aibu"}
みたいに。

マップは関数としても使えます。

(def girl { :first-name "Saki" :family-name "Aibu"})
(girl :first-name)
みたいに。

で、Clojureには分配束縛っていうものがあって、必要なものだけバインドすることができます。

(defn greet-author [{fname :first-name}]
  (println "Hello, " fname ))
(greet-author {:first-name "Saki" :family-name "Aibu"})
とかくと、
Hello,Saki
と表示されます。

分配束縛はマップ以外にも使えます。

(let [[x y] [1 2 3]]
  [x y])
これは、[1 2]になります。

2010年3月23日火曜日

Clojure勉強中



「プログラミングClojure」を読みはじめました。

今日はちょっとだけ、2章の真ん中あたりまで読みました。

LISPとの目立った違いは、
  • 関数の書き方が、 (defn func [arg] body)
    のように defn で定義するのと、引数が[]であること。
  • 無名関数の書き方がlamdaじゃなくてfn
  • かっこが少なくて済む
    (cond (< x 10) "less" (> x 10) "more")
    みたいに
です。(まあ、全部shibuya.lispで聞いた話ですが。。。詳細はhttp://shibuya.lisp-users.org/2010/03/21/sltt-5-mov-2/を見た方がいいと思います。。)

「初めての人のためのLISP」が読み終わったばっかりなので、
できれば、ClojureとCommon Lispと、あとSchemeとを比べたいなーっと思ってます。
(時間作ってやりたいな。。。)

2010年3月22日月曜日

Shibuya.lisp テクニカルトーク #5に行ってきました。

Shibuya.lisp テクニカルトーク #5に行ってきました。初参戦!

Shibuya.lispのテクニカルトークは毎回「行きたい!」と思ってたのですが、
ぼやぼやしていていつも満員になっていたので、すごく楽しみでした。

今回は Clojure の話が多かったです。
Clojure は defnとか、引数に[]を使うとか、ちょっと癖のある記法だったので、
敬遠していたのですが、
yshigeruさんの話はわかりやすかったし、hayamizさんが Clojure のいいところの説明をしてくれたので、
すげー興味が湧きました。
それに、JavaVM上で動くってことはGAEでも動くし(これは深町さんもおっしゃってました)、もしかしたらAndroid上でも動くので、覚えておいて損はないかもって思いました。(JVMってすげー。)

で、結局その場で「プログラミングClojure」買っちゃいました☆
読まなくちゃ。

あとコードバトンのコードは読んで勉強したいなと思います。
できれば、次があれば参加したいな!!

本当に楽しかったです!次回も参加したいな!今度は懇親会も出たいな。

2010年3月21日日曜日

[android]AndroidでWebページを表示する方法

AndroidでWEBページを表示する方法

1.マニフェストファイルに以下を追加
<uses-permission android:name="android.permission.INTERNET"&rt;</uses-permission&rt;

2.コードを以下のように記述

import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebView;

public class HelloWebkit extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        WebView webView = new WebView(this);
        webView.loadUrl("http://www.yahoo.co.jp");
        setContentView(webView);
    }
}
たぶんこれでOK

2010年3月14日日曜日

初めての人のためのLISP



買っちゃった!