ラベル 勉強会 の投稿を表示しています。 すべての投稿を表示
ラベル 勉強会 の投稿を表示しています。 すべての投稿を表示

2015年9月22日火曜日

OSC2015広島に参加してきました。

OSC2015広島に参加してきました。

本題に入る前に歴史を遡っていくと、2011-2012、2014-と5年開催のうち、1回お休みして、それからは参加させていただいています。
今後もスケジュールの調整をしながら参加させていただこうと考えています。

今回はセッションと展示ブースの両方に参加させていただいたのですが、年々セッションの準備のための時間が削られていっているので、今回も非常に苦労しました。
今後の発表や、新しい技術を広めるためにも普段の生活を見なおさないといけないなと考えています。(と言っても、仕事が大半を占めているので、これを何とかしないと…)

とりあえず、今回の発表資料です。
今回は、「色々なGoogle技術の紹介」と「興味があれば、ブースで深く触る」というのを目的に設定してみました。
ですが、セッションで紹介したものの、ブースに立ち寄っていただけた方はいなくて、少し残念でした。恐らく私のセッションが魅力的ではなかったのかもしれません。

ただ、今年は例年よりも参加者は少なかったのではないかと思っています。シルバーウイークの初日ということで、どうしても他の予定が入りやすい時なので仕方がなかったのかもしれません。

ただ、実演も兼ねて、最近公開されたGCP on Rubyを試すことができましたので、少し満足しています。ちゃんと動きます。Managed VMsで動かすのですが、Hello Worldは問題なく動きました。次のステップに移りたいなと思っていたら、終了時間が来てしまったのでHackできていませんが、Datastoreも使えそうです。(ただし、Cloud Datastore API経由)

また、来年に向けてコツコツとやっていこうと思います。

2014年12月13日土曜日

第6回中国地方DB勉強会で発表してきました。

第6回中国地方DB勉強会に参加してきました。

この勉強会は主にRDBMS(PostgreSQL/MySQL/SQLServer/Oracle…)とか、RDBに関する技術を扱っているようです。が、今回は「クラウド」がテーマになるということで、呼んで頂く事ができました。

私の発表資料はBigQueryとCloudSQLの紹介です。技術的な話題というよりは、「そもそも使っている人がいないだろう」というのを想定して内容を決めました。

話の中心としては、「大量のデータを大量のPCで力づくで短時間にデータを解析してしまうサービス」ということで、BigQueryを紹介し、「クラウド上にあるMySQLでメンテナンスコストと移行コストを下げよう」という所を話したつもりです。

BigQueryは、少ない件数でも3秒〜5秒かかってしまいますが、10万件でも、100万件でも3億件でも3秒〜5秒で結果を返すという特性を持っています。キャッシュの仕組みもありますが、やっぱり3秒程度はかかります。(というデモはやりました)

ただ、BigQuery自体は単体でも使えるので、Googleのサービスと組み合わせなければいけないわけではなく、AWSだろうが、Herokuだろうが主となるサービスは、自由に使って頂いて、BigQueryが使えるのであれば、BigQueryにデータを送るようにしていただければそれで良いと思っています。大量のデータを後で解析する必要がある場合は、ぜひ、BigQueryを導入していただけるとうれしいです。

想定外だったのが、AWSの発表をされた玉川さんがBigQueryのことにも詳しく、私のセッション中にフォローのコメントを頂いたりと、「俺じゃなくて良かったんじゃね?」という感じにもなったのですが、これは私の勉強不足と言わざるを得なかったです。

Cloud SQLの方ですが、中身は、MySQL5.5ですので、ローカルでMySQLを使っている方は特に苦労することはないと思いますが、スケールしませんので1台のMySQLがクラウド上で動いているだけ。というもので、説明することが少なかったので、データベースの作り方と、Read Replica(beta版)の紹介をしました。

本当は、BigQueryもCloud SQLも詳細まで説明すればよかったのかもしれませんが、私自身があまり使っていない(デモ、サンプル程度)ので事例だったり、ヘビーな使い方を紹介する事ができなかったのは残念です。

2014/11/23時点で、中国地方にBigQueryとか、Cloud SQLを本格導入している人はいないだろうと思っているので、まずは利用者を増やす所から始めないと事例は増えないだろうなーと思っています。
(もし使っている人がいれば、+Takashi Yokoyamaまでw)

また何かのタイミングでBigQueryの話をしてみようと思います。

2014年4月8日火曜日

Devfest Japan 2014 Spring

Devfest Japan 2014 Springに主催者側で参加してきました。

今回は、各地のGDGオーガナイザー達が集結して、いろんなプロダクトのセッションを担当するという感じでした。

全体では、セッションのトラックとハンズオンのトラックの2つに分かれての構成で、
私は、Google Apps Scriptと、Goを担当しました。

本来は、90分ぐらいかけて、しっかりやりたかったのですが、運営上の都合で、両方共40分でのハンズオンとなってしまいました。

Goの方はこの後別の記事で書くので、ここでは、Google Apps Scriptのセッションについて書いてみたいと思います。

当日の資料は、http://goo.gl/ccI5j1で、「Google Apps ScriptでYouTubeを検索する」というタイトルで、見て頂ければ分かる通り、40分で収まる内容ではありませんでした。
(当日も、言われましたがw)

ですが、チューターとして参加して頂いた、+Keisuke Oohashiさん、+Atusi Nakamuraさん、+Yoshifumi YAMAGUCHIさんの3人のすばらしいサポートと、参加者の方のポテンシャルに助けられまして、大半の方が、YouTubeの検索とメール通知ができるようになっていました。本当に大成功でした。チューターの方、ありがとうございました。
(後は、京都でGoogle Apps Scriptが流行るかどうか)

後で話を聞くと、コピペ駆動で動かしたということでしたが、ハマりポイントもうまくフォローされたようで、良かったです。

最終的にできたソースコードは20行程度ですが、Google Apps Scriptだとそれだけで、かなりのことができるようになっています。
大規模なプロジェクトには合わないと思いますが、小規模なものなら便利に使えると思います。

それから、Google Apps Scriptのハンズオンが申し込み時点では一番多いという結果になり、運が良かったなと思っています。

また、今後、Google Apps Scriptのイベントでお会いしましょう!

2014年2月2日日曜日

オープンセミナー2014@広島に参加しました。

久しぶりに、GDGではないイベントに参加してきました。

オープンセミナー2014@広島
http://osh-web.doorkeeper.jp/events/7534

今回のテーマは「TDD…そして Be Agile」ということで、チームで協力するという
方向性が主に語られていたように思います。

私は、2/11(火祝)のためにほぼすべての時間を”内職”(=Dart)に使ってしまいました。
和田さんの話の中で、「レフトウイング」と「ライトウイング」という単語を使って
ソフトウェア開発のプロジェクトの重要な要素を紹介されていました。

レフトウイング=管理手法的な面の内容
ライトウイング=技術面の内容
(実際はどちらでもいいし、左も右も関係なくて、どちらも無いとうまく回らない)

個人的にはすくすくスクラム瀬戸内の阿部さんが話していた内容とほぼ同じだったので
技術面の要素がもう少し欲しかった気もします。というか、実践が足りないだけなのかもしれませんが…。
他にも以前から聞いてみたかった、「導入事例」的なものも聞けて少し満足しました。
ただ、私は開発現場から離れてしまっているけれど…。

今回は、久しぶりに広島の技術者や、GDG中国のスタッフ、イベントへの参加者などとのコミュニケーションを目的にしていたので、オープンセミナー2014@広島の事はここまで。

1月〜3月まではフリーランスとしてGoogle技術を使ったり、広めたりしてきたのだけど、その頃は、「仕事がない」→「そろそろ来るのかな?」と感じていた所で、転職(?)してしまったので、もう手出しできないけど、Google AppsやAppEngineなどの、クラウド技術を使った要求が広島にもある(結構、喫緊の課題って感じで)ようで、直接協力できないのが非常に残念に思いました。
それと同時に、中国地方で技術者を見つけるか育てるかしないといけないなとも思いました。
(なかなか、Google Apps関連は難しい。。for Businessは有料だし…。無料版は機能制限があったり…。Active Directoryとか環境がないし…。私はWindows関連のスキルはあまりない…。)

少し、具体的な話もしてきたので、そのあたりで、無茶ぶりスキルを発揮してアクションが起こせるかもしれませんね。

得意ではないLTをやってみました。今回は5分ぶった斬りではなかったので言いたいことをとにかく突っ込んでおきました。やっぱりLTは難しい。あとは、資料に後付けを繰り返すのも良くないなと思いました。(全体的に流れがおかしくなった気がする)
資料は公開するようなものでもないので、非公開です。
OSC2013広島の時は、少ない資料でゆっくり話す感じにして失敗したのですが、
話しやすいのは、薄い内容のページが多く、切替をたくさんやる感じの方かもしれないです。コツはしっかり話すことを整理するということでしょうか。

そして、


今回は、こういうことになりまして、今は広島駅前のインターネットカフェに駐屯しています。Golang Cafeの終わった後の夕食の時に、「また行ってみたい」と言っていたらこんな形で実現するとは思いませんでした。
私も学生時代にバイトをしていたのですが、その頃の事を少し思い出します。
広島から岡山方面の終電は22時台までしかないようです。今度からまた車で来るようにしようかな…。
(しっかりコミュニケーションを図ったら、21時とかだと時間が足りない…。)

で、インターネットカフェで3時間程度は寝られたと思いますが、妙に目が覚めたので
blogを書いて、始発を待っています。6:00発があるので、それに乗ってみる予定です。

広島の方にも進められたのですが、ここのフラットはおすすめです。170cm前後の方なら十分寝ることができます。助かりました。

2013年12月16日月曜日

Golang Cafeを開いた結果

この記事は、Go Advent Calendar 2013の16日目の記事です。
内容が技術な感じではないので、Qiitaへの投稿は控えました。

2013/10/27(日)から、毎週日曜日の夜に、「Golang Cafe」というGo言語をみっちりやる会をやることにしました。
東京では、Go研というイベントが開催されており、標準パッケージを読み進めるスタイルになっています。(目的は標準パッケージを読み、Goでの設計方法を研究する)
これを自分でもやってみようと思ったのがきっかけです。

本来は、私自身が、Go言語を使うことが少なくなってしまったのと、転職したので、職業上コードを書く機会がかなり減ってしまったので、強制的に書く時間を作ろうと思って、イベントをやることにしました。毎回、「一人でもやります」と書いているものの、一人になったことはなく、毎週2人の猛者が参加して頂いています。

ということで、3人のメンバーで毎週、勉強会をやっています。

Golang Cafeのこれまでのテーマを挙げます。

  1. How to write Go Codeの内容
  2. encoding/jsonパッケージのソースコードを読む
  3. GoroutinesとChannelsで並列処理入門
  4. database/sqlパッケージを触る
  5. osパッケージを触る
  6. text/templateパッケージを使う
  7. Goのプレゼンのプレお披露目/Go1.2の概要
  8. プレGo年会
  9. 既存言語のデザインパターンをGoで書いたら?(12/22開催予定)
という流れですすめてきました。

結果、自分自身の知識が深められた。(職業上、仕事には生かせられないけどw)
参加者のレベルがあがった。(今後、GDG中国の戦力に…)

実際、当初の目的からは活動内容が変わってきていますが、特に問題ないと思っています。ただ、会のなかで、「他の言語で書くと…」という話題が出てくる事が多いので、
標準パッケージや、実際のGoのプロダクトを読みつつ、設計を研究していく必要はありそうです。

ただ、標準パッケージの読み方にもコツがあって、reflectパッケージから読み始めた方が、色々有利な事が多いと思いました。
理由は#2の時にencoding/jsonパッケージを読もうとしましたが、中でreflectパッケージがかなり使われていて、reflectパッケージを読んでおかないとencoding/jsonパッケージに集中できないという状況が発生したからです。
ということから、reflectパッケージは早めに読んでおく方が良さそうです。

それから、osパッケージは中でsyscallパッケージを使っているので、syscallパッケージを読み進めたほうがいいですが、Windows版に関しては中身が「return -1」が連発しているという、いわゆる「サポート外」のコードが散見されますので、Windows版でソースコードを読み進めるのは現時点では、おすすめしません。
(今後も改善の余地があるんだろうか?OSの仕組みから違うような…?)

といった所で、これまでに得た事をつらつらと書いてみました。

※#golangや#gdgchugokuでTwitterに投稿するので、気が向いたら反応してください。

2013年11月3日日曜日

Golang Cafe #2を開催しました。

先週に引き続き、Golang Cafe #2を開催しました。
今回は、encoding/jsonパッケージのMarshal()から読み始めました。

それまでに、前回のExampleの事を復習していたら、godocコマンドのハックに…。
(ですが、本題と違ったのでまた違う日にやることにしました)

色々出てきたのでメモ。
引数の型がinterface{}になる時は、「何でもOK」という意味。(他の言語で言う、Object、object、void *、variant…など。)

deferキーワード。呼び出した関数が終了した後に呼び出される、後処理用スタックに積む。(その場で処理は実行されないので、ファイルのクローズなどをまとめておくと良い。)

recover()はdeferキーワードを使って呼び出した関数内でしか利用できないので注意。

reflect.Valueは、今日は読まないが、「ポインタを持った構造体」
reflect.ValueOf()はポインタを持った構造体を返す関数ということにしておく。

読んだ所は、encoding/json#Marshalを掘り下げる感じで。

  1. encoding/json#Marshal
  2. e = &encodeState{}
  3. e.marshal()
    1. エラーチェック用defer関数を登録して、e.reflectValue()
    2. reflectValueQuoted(v, false)で呼び出す。(1.1.2だと267行目付近)
      1. IsValid()かどうかをチェック
      2. Marshalerインターフェイスを実装しているかどうかをチェック(TypeAssertionを使って、変換する)
      3. Marshalerインターフェイスではない場合、ポインタをもらっているという想定で、v.Addr().Interface().(Marshaler)で参照先の値を取り出してTypeAssertionする。
        1. TypeAssertionは変換できない場合もあるので、代入用変数と、チェック用の変数を2つ左辺に記述する形で使う。(i, ok := v.(int)…など)チェック用変数がfalseの場合は変換できなかった事を示す。(interfaceを実装していない、型が違うなど。)
        2. MarshalJSON()([]byte, error)を実装していれば、自分で実装したJSONエンコード処理が呼ばれる。
      4. それ以外は、reflect.Kind()で型の種類を取得して、それぞれの方法で出力する。
        1. 構造体はフィールドごとに再起呼び出し。
        2. fallthroughキーワードは次のcaseを実行する。
          1. Goのswitchはデフォルトbreak!
        3. reflect.Kind()はhttp://goo.gl/uDQOPOのconst値を返してくる。
        4. invalid、unsafePointer、channel、func、Mapのキーがstring以外のものは、変換できずerrorを返す。

それから、私が作成したサンプルコードとテストコードをまとめてgithubに置きました。
https://github.com/tyokoyama/golangcafe
次からはこのリポジトリにまとめてCommitしていくことにします。
(忘れてなかったら、各回ごとにbranchも作っておくようにします。)

次回は、goroutine & channels関連をやってみる予定です。

2013年10月13日日曜日

第22回GDG中国勉強会を開催しました。

10/12(土)の第22回GDG中国勉強会@岡山を開催しました。
今回は、Google Cloud Platformを使ってみるという会でしたので、参加者の皆さんもいろいろなサービス、APIを使われたことだろうと思っています。
見た限りでは、Google App Engineが多かったようです。
そのうち、Blogを書いてくれる事だろうと思うので待っていることにします。

私はGoogle Cloud SQLと、Google Compute Engineを動かしたので、その手順を書いておきます。

※事前にGoogle Cloud Consoleでプロジェクトを作っていること。

まず、Google Cloud SQLから。

  1. Cloud SDKをダウンロード、展開する。(Go版に萌えましたが、コマンドが少ないのでPython版か、Java版が無難です。もしかしたらPython版だと早い?)
  2. Google Cloud SQLに接続する場合は、
    1. ./gauth
    2. (プロジェクトIDなどを聞かれ、認証URLが出てくるのでブラウザで認証させる)
  3. ./google_sql.sh [インスタンス名]

とすると、Google Cloud SQLに接続できるので、これで、select version();とか実行すれば結果が取れます。
参考:G+の投稿

次に、Google Compute Engineの接続。ほぼ、Getting Startedの通りですが、Webのコンソールも利用しました。方法をメモしておきます。
  1. プロジェクトのメニューからAPIs&auth→APIsを選び、「Google Compute Engine」を探し、ONにする。
  2. メニューのCompute Engineを選択し、NEW INSTANCEボタンを押す。
    1. OSはDebian6、7とCentOS6が選べる。(私はCentOSにしました)。
    2. 以下の画像はDiskを再利用していますが、New Persistent Disk from Imageを選択すれば新規作成できます。
  3. ./gcutil auth --project=[プロジェクト名]
    1. 承認用のURLが表示されるので、ブラウザにコピペして承認する。
    2. 承認キーが表示されたら、コンソールにコピペ
  4. ./gcutil ssh [インスタンス名]
    1. sshで接続してCompute Engineのコンソールを利用する。
    2. 思ったより重たいので注意。
    3. ここからCompute Engine側でコマンド実行となる。
  5. sudo yum install httpdとかする。
    1. Apacheを動かすので。
  6. sudo /etc/rc.d/init.d/httpd startとかする。
    1. Apache起動。(service httpd startも可能ですが、私は上のコマンドを実行しました。)
  7. ここで、一旦Compute Engineからログアウト
  8. firewallを追加。
    1. ./gcutil addfirewall http2 --description="Incoming http allowed." --allowed="tcp:http"
    2. iptablesを書き換えても何も意味はありません。(Google側で管理されているそうです。)
  9. 適当にIPアドレスで接続。
  10. 表示されれば成功!
  11. 最後に、インスタンスを削除して終了。
    1. コンソール上で可能(削除とリブートしか無い)
    2. ./gcutil deleteinstance [インスタンス名]でも可能です。
    3. ちなみに、Compute Engineでshutdown -h nowしたら、削除するしかできなくなります。(REBOOT INSTANCEボタンはエラーになります)
私はスターターパックを使っていじり倒そうと思いましたが、多分プロジェクト名を間違って申し込んだので、$1000が設定されないと思うので、適当に払います…。

2013/10/27追記:
金額が表示されたのをG+に投稿したのですが、こちらにもリンクを張っておきます。
https://plus.google.com/114183076079015753160/posts/88dV7kCuTrL

よくある質問
Q1. お金…?
A. 今のところ、どれくらいかかっているか不明です。が、そこまで課金されない気がする。まだ、Cloud Console上には課金情報は出ていません。
https://cloud.google.com/resources/starterpack/から、$1000のスターターパックに申し込んでおくと吉…?(Promo Code「fuy-in」です)


2013年10月7日月曜日

OSC広島2013に参加してきました。

オープンソースカンファレンスHiroshima 2013に急遽参加してきました。

ここ2、3年はブース出展をしても来る人は皆無という状態が続いていたことと、私のスケジュール調整が難しい事もあって、今年は参加しない方針にしていました。
しかし、スタッフの高田さんから「LT参加」の依頼があったので、LTのみ参加という、久しぶりにバカな事をやってみました。(5分のために新幹線で往復しました)

会場の様子はTwitterの#osc2013hiを追いかけて頂くなどで知っていただけたらと思いますが、大盛況だったようで、当日の参加者も200人ということだったようです。

私が駆けつけた時はすでに撤収準備に入っていたりして、あまり会話ができませんでしたが、ある程度話ができたのでよかったかなと思っています。
(やっぱり、オンラインよりは直接会った方がいいなと思います)

で、LTの時にthinreportsの発表の時にGoogle Closure Toolsというのを目にして、ちょっと感動しました。(Google Closure Toolsは西日本で聞ける人がいるのか?という程度には誰も使ってなかった…)thinreportsは裏でGoogle Closure Toolsを使っているらしく、何か協力ができるかも。ということでした。

島根の方だったので、またOSC島根にも出展を考えてもいいかなー。と思ったりしていますが、今年のようにセッションが15分しかないとかだとちょっと厳しいかな…。という気もしたりしなかったり。
(島根はけっこう遠いからな…)

LT自体は、本来の内容は2分30秒ぐらいで終わってしまったように思いますが、すぐに終わってしまうのはもったいないと思ったので、少しだけフリートークをさせていただきました。が、やっぱりおとなしく終わっておくべきだったかなと思っています。
暗い話題だけを提供してしまったので、今後はもう少し明るい話題があっても良いかな?と思うのですが、どうだろう…。

2013年9月29日日曜日

Go言語勉強会に行ってきました。

ぷち勉強会としてGo言語をやるということで、講師を務めてきました。
http://atnd.org/events/43427

ぷち勉強会の様子はhttp://togetter.com/li/570097にまとめられています。

当日の資料:http://goo.gl/lpydda
同日に+Shingo Ishimuraさんが公開した資料http://slid.es/sinmetal/first-golang
東京と、香川で同時開催だったようです。
go wikiとかも紹介されたようです。(私は見たことがなかった…)

今回は「浅く広く」ということで、主に文法について話をしました。
プログラミングのスタイルは人それぞれだと思ったので、
「こう書くべき」とは言わず、「いろいろな書き方がある」という
ことにしました。

ただ、少し内容としては物足りない部分があったかもしれません。
(他の言語でプログラムを書いている人ばかりなので、見ればわかる)

ちょっと、tour of goとか見てたら、全て知っている内容になってしまいましたが
実際、「初心者向け」ってなるとこんな感じだろうなと思ったり思わなかったり。

思ったよりもコードを書かずにGo Playgroundと、読んで理解されていたので
進捗は、70ページぐらいのうち、60ページ弱まで進んだ所で
タイムアップしました。

並列処理のところや、パッケージのことについても話をしたかったのですが、
仕方がないということにします。

次は、並列処理、テスト、パッケージのあたりを中心にしたものがあれば良さそうです。
が、やっぱり実際に何らかのコードを作成した方が良さそうな気もするので
難しいところですね。

Go言語に興味がある人はいるようなので、今後のGDG中国のイベントで取り上げたいと
思っています。

2013年7月28日日曜日

ぷち勉強会に参加しました。

昨日、香川県の高松でぷち勉強会が開催されたので、講師として参加してきました。

その時の資料はこちら。
http://goo.gl/CS8k4L

勉強会の様子

今回の内容のポイントは「共通化」でした。

GASのAPIの使い方などは、私の著書などで調べることも可能ですし、ドキュメントも
以前に比べると充実してきていると思いましたので、敢えてそういう所は省いて、
MS Excelなどと比べた時に有利な点として、既存の資産の使い回しができるのは
良い事だと思ったので紹介しました。

結局、データの共有という事で、ScriptProperties、ScriptDbの使い方を
紹介することになったので、その辺りは紹介し、実際に動かして結果を確認して
いただきました。

今回の話として強くアピールしたのは、「複雑な仕様」「規模が大きくなる」という
事が発生するようなら、GAEなどのアプリケーションに移行することをおすすめする
というGoogle+などで投稿している事を話しておきました。
(実際、どうなんでしょうね。あまり大きくなってしまうとどうなるか…。は
確認していないのは現状だし…)

現時点ではGoogle Appsのユーザも少なく、「金の匂いがしない」ということで
本腰を入れて…というようには、なかなかいかないようですが、地道に広めていこうかと
思っています。

フィードバック


  1. Math.round()は「丸め」であって、「四捨五入」ではない。

http://msdn.microsoft.com/ja-jp/library/ie/5cza0web(v=vs.94).aspx

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/round?redirectlocale=en-US&redirectslug=JavaScript%2FReference%2FGlobal_Objects%2FMath%2Fround

今回の発表のケースだと、「税込金額」を求めるというものを想定しました。
で、そこで出てきたのが、四捨五入は0.5を足して小数以下を切り捨てるのが
厳密な定義ということでした。
(この点については私も反対意見はない)
ただ、実行結果からして、挙動はほぼ四捨五入の挙動を示していること、
Google検索の結果の上位が全て四捨五入と書いている事を考えると、
四捨五入ということで問題はなさそうに思っています。
(恐らく、負の数を扱った時の結果が厳密なものと違うのか?)

重要なことではあるけど、後は、Wikipediaの「端数処理」を見てご判断下さい。

反省点

最近、発表した後、反省することがなかったので、しっかり反省点を挙げて
おきたいと思います。

大きく、1点目は、「少ししか使っていない」ということ。実運用をしていないと
いうのもあって、紹介する時に、使い方程度しか紹介できないのは痛い。
ScriptDbの質問でも、共通化した時の問題点として、「同時更新」の問題が
発生してくるので、そういう時にデッドロックの問題は…?
という質問に対して回答がしっかりできないなど、まだまだということでしょうか。

2点目は発表の事前準備の時間が少ない。今回はまだうまくやれた方だと思いますが、
福山のAngularJSの時は、薄っぺらさが出てしまっていたようにも思うので
もう少し時間を取らないと(取れるようにしないと)いけないですね。

コードを書くということ自体が少なくなってきているので、上手にやらないと。

2013年2月16日土曜日

GDG Chugokuのマネージャの活動目的

年末に、私が思う勉強会についての記事を書いたのですが、
大体はその記事にも書いた通りなのですが、私が2年9ヶ月ぐらいの活動を通じて
ずっと一貫した考え方があります。

繰り返しになりますが、それは「身近な、まだ見ぬ技術者の発掘と参加者のレベルアップ」という事です。
実際、活動を始めた頃からその考え方で活動しようと決めていたのですが、
Google Developer Day 2010の基調講演でも同じようなコメントが発信され、
より強く考えるようになりました。


実際、目的が達成できているかどうかは私にはわかりませんが、
勉強会というのは、勉強をするのが目的なので、「人集めに奔走し始めたら終わりだ」とも
思っています。

参加者がいなくなったら、「需要がなかった」とあきらめるのも一つの考え方のようにも
思います。(これは、人から言われたことですが)

中国地方だとGoogle技術が仕事に結びつくというのが少ないようにも思えるので、
どうしても扱うプロダクトによっては、ほとんど人が来ないということもあるかもしれません。

ただ、マイペースでやらないと疲れるので、(特に最近は辞めたくなったりもしたので)
GDGのアピールやら、イベントの人集めやら、良いプロダクト生み出す事とかは他のマネージャ達に託して
今後は、まったりと告知をしながら、裏番組をぶつけられながら(笑)活動していきたいですね。
(長く続けると疲れてくる頃もあるんだろう…。恐らく)

という事で、なんとなく早朝のバイト中に思ったので記事にしてみました。

最後に、久しぶりにGDD 2010の事を思い出した(と言っても、私は京都会場でスタッフしてましたがw)ので


「ジュニアなエンジニアは、次の世代を支える存在かもしれないので、彼らを育てるような活動をしていただきたい」というセリフが印象的でした。

Google Developer Day 2010の基調講演

2012年12月30日日曜日

GDG中国のイベント主催者が勉強会について考える

以下のBlog記事が世間を賑わしていて、活発な意見が交換されたようですね。

勉強会なんてやらなくてもいい

何のために勉強会をするのか?

「勉強会なんてやらなくてもいい」へのコメントまとめ(Togetter)

私もGDG中国というコミュニティを運営する者として感じるものもありましたし、2年6ヶ月という長期間の活動になっていますから、改めて考えるいいきっかけだったように思います。

ただ、私の意見からすれば、「勉強会なんてやらなくてもいい」というのは、全くその通り。だと思います。「やりたいからやる。やりたくなければやらなければいい」という事ですね。これに関しては共感もできますし、私も、基本的にそのスタイルでやっています。気合を入れすぎても長く続きませんし、疲れますから。
しかも、報酬があるわけではない、有志の活動なわけですから、そもそも開催される事自体に感謝するべきだと思います。イベントについて文句がある人は、自分で開催すればいいのです。そうすれば、「自分が必要としているイベント」に出会うことができます。アプリケーションをリリースして儲けようとすることと同じように、同じ要望がある方は、必ずどこかにいるので、告知さえすれば参加していただけるのではないでしょうか。
(ちなみに、GDG中国は岡山でのイベントに関しては、私が会場費を全額支払っていますから、毎回赤字です。広島など他県で行う時は、大学の講義室などをお借りして開催していますから、基本的に無料で行えています。場所を提供してくださっている先生方には大変感謝をしています。場所が無ければ、勉強会のイベントは開催できませんから)
参加者も行きたくなければ(魅力がなければ)、無理に参加する必要も無いと思っています。個人的には週末の休みを潰してまで勉強する以外にもやることはあるんじゃないのか?(家族と一緒にいる時間とか、彼氏彼女とのデートでも良いですが。)という事は思ったりします。
そういう貴重な時間よりも優先して来ていただいている事に対して主催者として感謝しなければいけないと思います。

さて、本題から逸れてしまいますが、私が考えるイベントについて吐き出してみたいと思います。

イベント開催に必要なもの。それは何か?


  1. 主催者
  2. 場所
  3. 講師
  4. 参加者

上記の4つ。どれかが欠けてもイベントとして成立しません。ただし、講師は最悪、主催者が兼ねることができますし、場所も(私のように自腹ででも)主催者が用意すればなんとでもなります。
ですが、毎回主催者=講師なんてやってたら、ネタ切れは起こりますし、負荷がかなり高くなってしまいます。なので、GDG中国では講師の方を私以外の方にお願いをしています。無茶なお願いを快く引き受けていただいて、毎回本当に感謝しています。(中にはお断りされる方もいらっしゃるのですが、そういう方にはオファーを控えるようにしています。ある程度、イベントに何度か来ていただいていたり、仲が良くなった方など選別もしています。)

そして、重要なのが「同じ人に連続でオファーをしない」ということをしています。これは講師に対する負荷が高くなるのを防ぐと同時に、幅広い話題の提供(というか、私が聞きたいだけ)と、マンネリ化を防ぐというのもありますし、なにより、”講師の方の練習”の場としても利用していただきたいからです。
そして、練習の場なので、Ustreamや、Hangoutで外部に公開するという事はしません。初めての方に対して、プレッシャーをかけてしまってもいけないので。
また、自分でコミュニティを運営している方もできる限り、オファーを回避しています。それは、私と同じように自分のコミュニティで発表するなど、負荷が高くなる事が多いだろうと想定しているからです。

おかげで、いろいろな方に講師を担当して頂きました。

(2012年開催のイベントから抜粋)
塩入さん
古谷さん(2回担当していただきました!)
+Shingo Ishimuraさん

a-knowさんこと井上さん
+Yusuke Satoさん

上本さん
Google Apps API Japan Groupの皆さん

+Tam Tさん
+Takeshi Furusatoさん

無茶ぶりだったにも関わらず、appengineネタで発表していただいた今岡さん。

そして、2度も関東から来ていただいた、Developer Expertの+Shinichi Ogawaさん。

と、2012年の抜粋でも11人もの方がGDG中国のために(?)講師を担当していただいて、
大変感謝しています。
来年以降も、新たなチャレンジをお待ちしています。

私はというか、GDG中国では、決して「上手な講演をして下さい」なんて言っていませんし、
時間が超過した所で文句も言いませんし、Google技術がからんでいればやりたい放題していただいてかまわない方針にしています。いろんな文句が出るなど、責任はマネージャーの私が取れば良いだけなので。
(自分で開催したイベントなので、自分で責任を取るのは自然なことですから)
”文句”ではなく、”意見”であれば、それは貴重なものなのでフィードバックするだけですね。イベント自体良いものにしたいので。

そして、最後に参加者。
参加者の方がGDG中国のイベントに賛同して、参加していただけなかったら、主催者の私しかいないイベントになってしまいます。1人でも来ていただいたら、それで成功ですよね。参加者0人なら「仕方がない」ぐらいの気分でやらないと主催するのはキツイと思います。
なので、参加していただいている方にも、最大限の気を使っている(のか?)ように思います。

したがって、私にとって、講師を担当している方も、参加者も感謝されるべきものなので、
「主催者がえらい」とか「スタッフがえらい」という事は考えてもいませんし、全てが平等に感謝されるべきだと思います。
先日行われた、忘年会議2012に参加させていただきましたが、その中の催しの中に
「イベント主催者を表彰する」という主旨のものがありました。
私もリストに入っていたのですが、私は上記の理由から辞退させていただきました。
(昨年は受賞したのですが、その時はGo本の執筆も含まれていたので。)

そして、「目的」という点での話をすると、GDG中国の運営を始めた理由は、「私がGoogle技術+Webの技術を勉強したかった」から。なんですね。イベントにすれば、私が知らないことを他の人が話してくれるかもしれないし、新たなGoogle技術好きの技術者と知り合えて、情報交換ができるかもしれない。私がすべて調べて発表するだけでも、新たな知見は増えるでしょうが、範囲として私が知っている範囲のものが多くなってしまうと思います。
そして、「都会にはたくさん素晴らしい技術者がいる」ということに対して、疑問を持っていて、「ローカル(身近)な所にも必ずいるだろう」ということを考えています。また、「新たな技術者を素晴らしい技術者に成長させる」という事も考えるようになりました。「ないなら作る」というソフトウェアならではの考え方ですね。
毎回遠くから来ていただく、という事は基本的に無理ですし、その前提で運営はできないと思います。(最近はGoogleさんのありがたいサポートがあったりもするのですが…)
「世界」だの「日本」だのと、でかいスケールの話をしていても、自分の身近に誰もいない(とまでは言いませんが)という雰囲気もあれだし。。

「身近にいる技術者」がGDG中国に来てくれて、参加者が増えるなら、Google I/Oなどにも行ってみたいですが、サンフランシスコに行っても、あまり増えないだろうと思います。(一番のポイントは「資金」ですけどね!)私は、グッズが欲しいわけでもないですし、最新情報も、少しのタイムラグで公開されるわけで、外国の方とコミュニケーションを取る事以外での利点が見つけられていません。

また、グッズのプレゼントについて。GDGはGoogleのありがたいサポートのおかげでグッズをいただけるのですが、GDG中国では参加者全員に配るという事は、ほとんどしていません。
それのために新たにグッズを要請することもほとんどしていません。
勉強会はプレゼント大会ではないからです。

ただ、講師をしていただいた方には可能な限りお渡しするようにしています。
(報酬のつもりはないのですが…)

最後に、主催者や講師をすることは、私にとっては「大きなチャンス」だと思っています。注目され、信頼される=仕事につながるのかもしれませんし、私自身もイベントを主催しているので(?)、ぎりぎり生き残っているわけですね。大したやつじゃないのに。

おかげで、GDG中国にいたメンバーも東京に引っこ抜かれ晴れて転職でき、最新の技術に触れる事ができるようになりました。
抜けてしまって、戦力ダウンになりますが、彼らにとって良いことなので、活躍を期待しています。

いろいろな人が集まるので、多種多様な考えや、目的が交錯するわけですから、意見がぶつかることもあるかもしれませんが、ゆるくやりましょう。
そして、まだ見ぬ新たな技術者が寄ってくることを期待しています。


2012年3月27日火曜日

オープンソースカンファレンス2012@愛媛に参加しました。

オープンソースカンファレンス2012 Ehimeに参加してきました。

今回は、中国GTUGの開催ではなく、四国GTUGが出展するので、
セッションを担当してきました。

当日の資料

今回は四国GTUGのブースに行ってもらう事を促す内容を
多くしてみました。実際、効果があったのかどうかはわかりませんが、
ある程度、効果があったと信じています。

次に、Go言語でプログラミングをする最初の一歩として、
開発環境、情報源などを紹介。

最後に、Go言語のライブコーディングをしながら、
書き方の説明を2例(本当は4例ぐらい考えていましたが、
前半で時間を使い過ぎて足りませんでした)

おまけにプレゼント(謹呈本)を「会場から一番近い人」に渡しました。

一番近い人にした理由は、大学生か、地元の人の可能性が高いと
踏んだからです。(後でまとめますが)今回のセッションの参加者は
県外の方が多かったように見受けられたので、せっかく愛媛で開催
しているのに県外の方に渡すのはおもしろくなかったので。

セッションの参加者は25人程度だったように思います。
事前申し込みは20人。同一時間帯のセッションの中では1位でした。
(運営側がほとんど、裏番組の宣伝を行ってくれるので、1週間前は4人とか
でしたが、何とか盛り返したということでしょうか。)

そして、Twitterなどでも、私のセッションが「おもしろかった」と
言っていただいた方がいらっしゃるようで、任務は全うできたかなと思っています。
Go言語の利用者の人口が増えるかどうかは今後の様子を見守ろうと思います。

岡山から愛媛まで、3時間半程度かかったようなので、やっぱり当日移動だと、
他の人のセッションが聞けないので残念でした。
(懇親会の為に途中、一旦ホテルにチェックインしに行っていて、
自分のセッション+ブースでの待機ぐらいしかできなかった)

懇親会にも参加させていただいたのですが、
久しぶりにすみともさん、ありやまさんとお話して、「関西には来ないのか?」
と言われたので、ある程度、余裕ができたら、
何らかのイベントに顔を出しに行きたいと思います。

最後に、のがたさんとお会いしたので、昨年から開発していた、「Sahanadroid」の
開発終了の相談をさせていただきました。
急なオファーから始まった開発でしたが、途中でサーバとの連携テストを残して、
中断状態が続いていたのですが、決着をつけないといけなかったので
私から切り出すことにしました。
ソースコードはすべて公開してありますので、参考になるかどうかわかりませんが、
興味がありましたら見ていただけたらと思います。

Sahanadroidのソースコード(Android 2.2で開発)
https://github.com/tyokoyama/SahanaClient
テストプロジェクト
https://github.com/tyokoyama/SahanaClientTest

このプロジェクトで、貴重な経験ができましたので、今後も何らかの形で
協力できればと思っています。

2012年1月22日日曜日

オープンセミナー2012@広島で発表してきました。

オープンセミナー2012@広島で講師として発表してきました。

今回はQueryとTransactionについてお話ししました。
資料とソースコードは公開してありますので、興味がありましたらごらんください。

資料
https://docs.google.com/present/edit?id=0ASEzu8hKOt7rZHJwbjl2NV83MWRreDV6dmMy

デモ用ソースコード
https://github.com/tyokoyama/osh2012demo

今回はQueryとTransactionなのでそんなに話題として
少ないかな?と思ったのですが、
よく考えると、Queryを語るにはIndexの前提も必要で、
Transactionの話をしようとすると、エンティティグループの前提も
必要だったので、当日追加してみたのですが、早口でお話ししないと
いけないぐらいの内容になってしまいました。
今思えばTransactionは外せば良かったかもしれません。
しかも、Go言語と言いながらほとんどGoogle App Engineの仕組みの話になってしまったような。

Queryについても文字列のInequalityFilterに関しての動作も
今回のデモ用のアプリケーションだと良い例ではなかったのかもしれません。
住所録の方が良かったかも。前方一致の検索結果になるのを見せるには
そちらの方が説明しやすい結果もでたかもしれないし。

他の講師の方の話も聞きたかったのですが、資料の調整と
すぐに反省モードに入ってしまったので、あまり聞けていません。

その後、懇親会で、宇品港(広島港)の前の公園の中にある、テントでかきを食べる
かき小屋で懇親会をしました。食べ物は精算所で先に買って、(追加する時も精算所に行く)飲み物は自販機で買うスタイルで、テント小屋の中で炭焼きで海鮮、肉類を焼いて食べました。

その後、@Toro_kunの家に行って、たこ焼きを初めて焼きました。そして、食べました。
深夜まで色々な真面目な話をして、満足して帰りました。
ありがとうございました。

2時から@soudai1025さんを車で送り届けて、朝5時に無事家に付きました。

次は第12回中国GTUG勉強会に出席の予定です。

2011年12月7日水曜日

第1回岡山PHP勉強会に参加しました。

第1回岡山PHP勉強会に参加してきたので、そのメモを残しておきます。

システム構築事例の話(…?)

  • 突発的なアクセスの増加
  • Yahooアタック
    • Yahooのトピックスにリンクが付くと…
    • 動画への直接リンクはやばい
  • PHPを選んだ理由
    • 簡単
    • みんな使っている
    • 自由度が高い
    • サーバ設定が簡単
    • 速い(?)
  • しかし
    • コードの統一性がない
    • セキュリティが最悪
  • フレームワークを活用することにした。
    • 開発時間の大幅短縮
    • ルールに従うと、コードが統一
    • DBとの連携が簡単
    • 表示が速い(ページキャッシュ機能)
  • PHP勉強法
    • 参考までに。
      • 目標を作る(アプリを1週間で作る。必ず日程を決めておく事。)
      • 入門書とリファレンスブックを購入
        • 作りたいものに近いサンプルがある本が良い
      • 説明を見ながらとにかく作る
      • リファレンスブックを見ながらソースコードを読む
      • 自作アプリケーションを作成する。
    • オープンソースを解読(バグ情報は便利)
    • 参加する
    • オープンソースを作る
    • 勉強会に参加する
  • TIPS
    • コードのガイドラインを決める
    • コードの最適化
    • セキュリティに気を使え!
      • サニタイズ処理だらけの関数等を通して無効化する。
    • 英語ができたほうが良い
    • 最新情報を得る(セキュリティ等)
    • 初級者こそフレームワークを使うべき
  • 3カ月以前の自分のソースコードを恥ずかしく思える様になること。
    • 常に精進しつづけましょう!
  • アイデアをお待ちしております!
  • 苦労した点
    • ロードバランサ
PHPフレームワーク入門
  • 無害化する方法(フレームワークを使わない場合)
    • htmlspecialchars()
    • mysql_real_escape_string()
  • いつも同じようなコードを書いている?
  • 以下のようなコードは…
    • ロジックとデザインがごちゃまぜになったコード
    • ルールが統一されていない
  • サーバを移したら動かなくなった。(PHPの場合)
    • バージョンの違い
    • 設定値の違い
    • ライブラリの不足
  • セキュリティが不安
    • いろいろな攻撃

  • フレームワーク(Framework)
    • 骨組み
    • 土台となるもの
    • 主な役割
      • 標準的な機能の提供
        • ライブラリ
        • ヘルパー関数
          • CakePHPのpr()
            • print_r()の結果を<pre></pre>で囲って出力する
      • MVCモデルの実現
        • Model
        • View
        • Controller
      • MVCモデルのメリット
        • 独立性の確保
          • 機能毎の役割が明確になる
        • 依存性の抑制
        • 保守性の向上
      • ORマッピング
      • ルールの制定
        • 命名規則
          • 変数名、テーブル名
          • ディレクトリ構成
          • コーディングスタイル
    • フレームワークのデメリット
      • 学習コスト
      • どれが良いかわからない
        • 色々なフレームワーク
          • 場合に応じて使い分ける
        • 選定基準
          • 実用性
            • 安定性
            • 機能、対応バージョン
          • 開発の継続性
          • ライセンス
          • 情報の入手しやすさ
    • CodeIgniter
      • 高速
      • 軽量
        • ソースの容量は(展開後で)1.2M
      • 低い学習コスト
      • 日本語のユーザガイドが完備
    • CodeIgniterのURL
      • index.phpがフロントコントローラ
        • URLは、index.php/fuga/piyo/paramなど。
          • class fuga extends CI_Controller {
            • function piyo($param) 
    • 便利な機能
      • active_record
      • form_validation
    • View
      • 共通部分はinclude

セキュリティについて考えてみよう
  • バグ、脆弱性
    • バグとは何か?
      • なるべきものが、そうならない。
    • 脆弱性とは何か?
      • バグと言えばバグ。
      • そのうち、セキュリティに関係するもの
        • 例)脆弱なOSで動作しているサーバがあっても、ファイアウォールで完全に隔離されていれば問題はない。
          • 外部から接続できないので。
      • セキュリティホール、脆弱性はバグの一部。
    • アプリケーションが正常に動作するように作ること。
      • 「一定の定義」に従って正常に動作するのであれば問題ない。
    • リスクを知り、対応する
      • 以下のような問題に対して
        • SQL Injectionでデータを取られた
        • SQL Injectionでページを書き換えられた
      • Webアプリケーションは「最もリスクがあるもの」
        • 全世界に向けて公開する前提だと。
        • 自分のサーバは人気がないから問題ないだろう。
          • クラックする人は、踏み台にするためにサイトの大小に関わらず攻撃してくる!
          • 従って、これは間違い。
    • リスクとは何か?
      • CVEというデータベースがある。
    • 入力、処理、出力
      • エコーバック問題?
      • 9割方、入力と出力の部分で対処がない。
      • 基本的に自分のアプリ以外は全て信用できない前提で考える。
        • 信頼境界線
      • 入力は「全てバリデーション」
        • 「サニタイズ」とは違う
          • ブラックリスト的考え方。(悪いものを弾く)
          • validationはホワイトリスト的考え方。(良いもののみを受け入れる)
      • 処理は「ベストプラクティスに従う」
        • 話をすると長くなるので省略
        • めんどくさい
      • 出力
        • エスケープを理解し、エスケープする
        • ヘルパーを理解し、ヘルパーを使う
          • 属性名をエスケープしないヘルパーがあるので、下手すると、そこがXSSの原因になる可能性も。
        • エスケープもヘルパーも使えないものはバリデーション
        • どうしようもないもの、絶対に安全だとわかっているもの
          • そのまま出力
    • アプリケーションが正しく動作することを担保する
      • 特にセキュリティに特化する場合
        • CIAを保証する
          • Confidential(機密性)
          • Integrity(統合性)
          • Availability(可用性)
      • セキュリティ対策に役立たないセキュリティ対策はない
    • セキュリティ対策とはリスクマネジメント
      • リスクを許容できれば、どんな対策でも構わない。
        • リスクを理解した上で、どこまでリスクを許容できるのか。
        • ただし、他人に迷惑はかけない
      • 例えば、文字エンコーディングのバリデーション
        • 入力時に文字エンコーディングをバリデーションする。
      • 適切な設計も必要
      • どれが優れたセキュリティ対策か?よりも、必要なセキュリティ対策か?が重要



2011年8月15日月曜日

第8回中国GTUG勉強会@岡山を開催しました。

一昨日の事ですが、第8回中国GTUG勉強会@岡山を開催しました。

詳細は中国GTUGのサイトを見て頂ければ、写真と合わせて見ることが
できるようになっています。

第8回中国GTUG勉強会@岡山
http://sites.google.com/site/chugokugtug/event/8

ここでは、私のチームの事について掘り下げておこうと思います。
私のチームでは、「作業用BGMを再生するアプリケーション」を作ろうと
考えました。私が欲しい物だったのですが、作業用BGMを再生するために
毎回YouTubeやニコニコ動画にログインしたりするのは、ちょっと面倒だと
思っていました。そこで、YouTube Data APIとカスタムプレーヤーを使えば
いちいちYouTubeのサイトに行かなくても何とかなるかな?と考えたわけです。

第8回は初心者向けということで、ノープランの人の為に、チームに誘って
私ともう一人の方の2人のプロジェクトになりました。

カスタムプレーヤーの件については以前のエントリーに書いてある通りで
httpを経由してデータを受け取らないとコールバック関数が呼ばれない
現象があるようなので当日はGAE/Gの開発サーバを使ってhttpでの経由をさせました。

カスタムプレーヤーが置いてあるだけでは面白味がなかったので、
テレビの絵を描いて頂いて、テレビのように見せることにしました。

結局、HTML5的要素としては、DOCTYPEとscriptタグにtypeを付けないだけに
なってしまいましたが、早くYouTubeのカスタムプレーヤーがvideoタグで
実現できるようになってくれれば良いなあと思っています。

ソースコードも公開していますので、興味がありましたら
以下のURLから取得して下さい。

作成したテレビアプリケーションのソースコード(github)
https://github.com/tyokoyama/chugokugtug_tv

(2011/08/31追記)
忘れていましたが、秋葉さんにCSS3の本にサインをして頂きました。
良い本だと思いますのでよろしければ。





2011年7月9日土曜日

第10回OITEC勉強会に参加しました。

今日は岡山でMicrosoft関連の技術を主に扱っているOITEC勉強会に参加しました。

会場が県立図書館のデジタル情報シアターだったので、飲食禁止。
しかも、いい感じで無線LANスポットも使えず、色々と残念な状態でした。
(結局、Android端末でテザリングをしました。電源が使えたので良かった。)

午前の部はTDDBCのサテライトということで、Ust放送をしていました。
テスト駆動開発がテーマでしたが、良い点、悪い点はあるような気がしました。
Twitter上でのやりとりは以下にまとめられています。
http://togetter.com/li/159430

午後の部
Kinect開発、はじめの一歩
・結構スペックを要求される。

開発方法
・OpenNIを利用する
Macでは開発が不可能かと思ったら、詳細は以下のブログにまとめられていました。
http://switch.dip.jp/toro/blog/?p=266

・Microsoftが提供しているSDKを利用する。

価格に対して、いろいろ遊べるので良いそうです。
導入、開発も簡単。(Visual Studio 2010とKinect SDKがあれば良いのかな?)

教育、医療分野では導入実績もあるそうです。
服を買う時に、服を着た映像を表示するなどマーケティングにも利用される。

手話を声に変換するという使い方もできるようになるかもしれない。
一番の期待はアクセシビリティ

しかし、環境がWindows7限定になっているのが残念。

ASP.NET MVC 3
・Microsoft .NET Framework 4のみのサポート

・データを参照する(Model)
・ルーティングに従って、クラスが実行される(Controller)
・Razorビュー・エンジン
View内でもブレークポイントがおける。

Razorでは、@変数名でView内に値を表示させる事ができる。
@("<strong>")なんてことをすると、HTMLがエスケープされる。
@Html.Row()を使うと、HTMLがそのまま出力される。
@{ }で囲むと、View内でコードを書くことができる。
コードブロック内でもHTMLのタグはタグとして認識してくれる。
<text>タグで囲むと、プログラムと認識されずに、そのまま出力してくれる。

ASP.NET MVC 3 EF4.1 Code FirstとNuGet
・Ruby on RailsのようにModelからデータベースを生成してくれる。
・バリデーションも自動的に。

・SQL Server Compact Edition 4.0をWebサーバにデプロイすることができるようになった。
SQLiteのような利用が可能になる。
・ただし、利用可能なホスティング業者が少ないので、実運用するためには…?

NuGet
・Ruby Gemのようにプロジェクトに必要なライブラリを取り込むアプリケーション
GUI、CUIどちらでも利用可能。

0から始めるExpression Blend + Phone 7
・疲労困憊により、デモを眺めているだけになりました。
(やっぱり最近、目の疲労からくる疲れ(?)に悩まされます。)

2011/07/10 追記
プレゼント大会で、以下の書籍を頂きました。以前からSilverlightはやりたかったので
しっかり読んでみようと思います。

2011年6月26日日曜日

第19回オープンラボ岡山

第19回オープンラボ岡山に参加したので、メモを残しておきます。
色々と抜けてたり、間違いもあると思いますが、参考程度に。
  • 昨日までは Tomcat 今日からは GlassFish
GlashFishがすごいらしい。
http://d.hatena.ne.jp/t_yano/20101227

Tomcatだと、色々なフレームワークが必要で、単体では使っていない。
→実は事足りてないんじゃないのか?
→GlashFishだといろんなフレームワーク等も含まれている。

Tomcatだと運用が大変じゃないか?
→1台ずつマシンにログインして設定が必要。
→GlashFishだと、1台のマシン(管理サーバ)にアクセスすれば全て管理可能。

TomcatユーザにおくるGlashFishのすすめ
1. 軽量
2. インストールが簡単(Zipを展開すればOK)
3. IDEとの連携が簡単
Eclipseプラグイン、NetBeansバンドル

GlashFish v3.1 vs Tomcat 7
・2011/01 Tomcat 7 安定版リリース、サポートなし
・2011/02 v3.1 本番向け、サポート有り
・2011/07 v3.1クラウド向け、Java SE 7

オープンソース版を使っても、製品版にアップグレードが可能。

再配備時にセッションを持続させる事ができる。
・オプション-keepSessions=trueに設定

GlashFishにおけるOSGiとHK2の役割
OSGiランタイム
・デフォルトApache Felixを使用(他のランタイムも動作する)

OSGiの採用によるメリット
・動的なモジュールの追加、削除
・拡張可能なアプリケーションサーバ
・任意のOSGiバンドルを利用可能

Grizzly
・ネットワークサーバアプリケーションのOSSプロジェクト
・Java NIOを採用
・サーバエンジンの実装
・Non Blockingの通信に対応(少ないスレッドで多くのリクエストを処理できる)

GlashFishの新機能について
・アプリケーションバージョンニング
→同一アプリケーションの複数配備
→asadminでバージョンの切り替え、有効なバージョンの確認も可能
・自己増殖クラスタ
→対象ノードへのインストールはSSH経由(SSHのデーモンとJDKがあれば可能)
自分自身をZipで固めてインストール
・WebSocketへの対応
→今までのやり方よりも、パフォーマンスが良い。

Java EE 6のベストセラー本もある。

まとめ:
・まずはお試し下さい。

質問:
・製品版GlashFishのサポート料は?
→パートナー経由での販売をしているので、パートナーに問い合せて下さい。
→WebLogicは大規模環境、GlashFishは先進性を求める時に。

JBoss AS7について
・起動が早い。(1.6秒)
・超軽量
・起動に必要なメモリ=12M
・Tomcat7は=8M。(ただし、サーブレットコンテナしか入っていない)

・管理容易性の向上
・設定ファイル(単一)
・API、GUI、CUIを容易

・作り直した理由
・クラウド前提
・Amazon EC2などを使ってみても、遅い。
・スタンドアロン
・ドメイン

・デモ
・2.7秒で起動(alpha3、少し汚れている)
・1.8秒で起動(beta4、スナップショット)
・管理画面はGWTベース

・arquillian(JBoss7から提供されるテストフレームワーク)
・JUnitのテストで簡単に記述が可能になる。

・JBoss Modules
・モジュール=JARを指す

・階層型クラスローダの問題
・上から実行するか、下から実行するか、両方動かすと簡単にデッドロック?

・スレッドコンテキストクラスローダ

・JBoss MSC
・JBoss Moduler Service Container
・AS7の新しいカーネル

質問:
・Amazon EC2での稼働実績などは?
→JBoss AS7のリリースがまだなので、実績はないが、10秒ぐらいでいけるのでは?

Java EE 6の詳細
・今後は本番環境へ
・今までは、お試しレベルだった。
・メインテーマ:開発生産性の向上

・仕様の削減
・古く使われなくなったAPIの整理
・コンポーネントのオプション化
・Java EE7で削除される可能性
・JAX-RPC→JAX-WS
・EJB Entity Beans→JPA
・JAXR
・JSR-88

・統合開発環境…

・Managed Bean 1.0
・@javax.annotation.ManagedBeanを指定
・コンテナによって管理
・他のJava EE コンポーネントのベース
・呼び出し元と同じスレッドで事項
・代表的なアノテーション
・@Resource
・@PostConstruct
・@PreDestroy
・JSR-250を参照

・Interceptors 1.1の使用
・自身のインターセプタクラスの作成

・Servlet 3.0
・web.xmlのオプション化
・アノテーションを使う。

・@WebServlet{name="hello"…}

・拡張性
・設定ファイルによる拡張
・web-fragments.xml
・サードパーティフレームワークの追加が容易
・プログラムによる拡張

・マルチパート対応
・@MultipartConfig

・非同期処理のサポート
・非同期リクエスト処理用のプログラムモデル
・長時間処理が必要なリクエストに有効
・Async用アノテーションを追加
・@WebServlet(asyncSupported=true)
・AsyncContext aCtx = req.startAsync(req, res);

・セキュリティの拡張
・認証/ログイン/ログアウト機能

・JavaServer Faces 2.0
・テンプレート機能
・Ajax対応
・JSFの仕様でJavaScript APIが定義
・<f:ajax execute="productname"…
・1行で対応可能
・ブックマーク可能なURL

・EJB 3.1
・JSR-318
・warファイルにEJBを含める事ができるようになった。
→まとめ方を考える必要がなくなる(EARなのか、WARなのか)

・Lite

・Full
・Lite + …

・標準化された Global JNDI名
・アプリケーションサーバによって、名前が違っていた。
・Java EE 6から
・JNDI名が標準化される。

・組み込み可能なEJBコンテナ
・javax.ejb.jar

・その他
・タイマーサービス

・Singleton Session Bean
・JVMをまたがらない、個々のJVMでのSingletonを保証

・JPA 2.0
・EJBの仕様から独立
・モデリングの強化
・@ElementCollection
・@CollectionTable(name="NICNAMES")
・組み込み可能型コレクション
・MapのCollection
・Criteria API
・クエリの制御をJavaオブジェクトで制御
・CriteriaBuilder
・EntityManager#getCriteriaBuilder()
・Metamodel API
・型チェックが強力
・コンパイル時に属性の有無、型チェックを実施

・JAX-RS 1.1

・Bean Validation 1.0
・アプリケーション中で宣言的なバリデーションが可能

・DI 1.0/CDI 1.0
・beans.xmlを必ず配置する。(デフォルト無効)

・Java EE 7に含まれる技術
・JPA 2.1
・JAX-RS2.0
・JMS 2.0
・JavaServer Faces 2.2
・WebTier
・HTML5
・WebSocket
・JSON API

質問:
・プロファイルの提供で、Webプロファイル以外に何かあるか?
→現時点ではWebプロファイルかFullしかない。
・アノテーションが増えたのは良いが、判別するためには、全クラスを
読み込んでおく必要があるので、遅いのでは?
→アノテーションスキャンは遅いです。
ただし、index化したりして早くする仕組みはあるだろう。

CDIを乗りこなせ
・JSR-299
・参照実装=Weld

・Portable Extension
・implements Extension
・Extensionは中身が空のインターフェイス

・Seam Catch
・例外ハンドリングを提供
・例外が発生したら、メソッドを実行されるようにする。

・Seam Faces
・JSFのフェーズコールバック

・Seam Solder
・はんだづけ
・Expression Languageを提供

・Seam Forge
・シェル環境を提供
・鍛冶場

と、ここで、MacBookProのバッテリーが残り少なくなったので
ここまででメモは終わり。

Desireでテザリングをしながらバッテリー駆動だと4、5時間程度で
残りがやばくなるようです。(だいぶ余裕を持って電源を切ったかもしれない(?))