YAPC::Asia Tokyo 2012 終わっちゃったねぇ

まず、運営陣、ボランティアスタッフの方々に感謝を。最高の祭りをありがとうございました。

YAPCへの参加は YAPC::Asia Tokyo 2010 から一年開けて2回目でした。前に参加したときにも思ったのですが、Perlの祭典なんだけどそれに制限されてない「ごった煮感」が心地良かったです。

また参加したい!

その中でも「超ごった煮」だったLTソン
結果的にLTソンを聞いている時間が一番長かったので、その感想を。

最高でした。

ジャンルを問わない様々な話を聞くことができました。トークからは総じて「熱さ」を感じました。

そりゃそうですよね。「今一番話したい」ことを話してるんだから。昔イベントで強引にLTをねじ込ませてもらったときのことを思い出したり。

飛び込み含めて、合計63人の発表者となったそうです。すげぇ!

LTソンを運営してくださった主催のUzullaさん、Hachioji.pmの皆さん、ありがとうございました!

LTソンで自分がやったぶんのスライドとデモの動画はこの前のブログで公開してます。
もっとMobiRubyやIronPythonへの愛的ななにかとか、2年前にIronPythonでシステム書いてたときの「こんな事やってる奴、世界でもそんなにいないだろ!」的高揚感とかについて話せばよかったかなぁ。

ps. gihyo.jp さんの『YAPC::Asia Tokyo 2012, 2日目レポート』に弊社minemazの「できる!エクセル方眼!」がピックアップされてて軽く嫉妬。まぁ、LTソンの出番までずっとコード書いたり、スライド作ったりしていたのが報われて良かったです。

Facebooktwitterlinkedintumblrmail

YAPC::Asia 2012 LTソン muraveスライド&デモ動画

スライド

 

デモ動画

PerlイベントでMobiRubyからIronPythonにつなぐネタをやって比較的スベった感じ。

YAPC::Asia 2012 楽しかった! LTはスベったけど!

Facebooktwitterlinkedintumblrmail

RBC、MobiRubyイベント無事終了(スライド付)

絶賛リフォーム中のランカードコム新オフィス予定地(窓がはいってなかったのは内密に願います)で開催した

【RBC Tech Saturday】MobiRubyでiOSアプリをつくろう
      ~スマホアプリ開発にmrubyがやってきた~

無事終了しました。

参加いただいた方々、サポートを頂いたみなさま、本当にありがとうございました。

スライドをslideshareに上げました。

 

オクトーバーフェストもたのしかったよ!(グラスを落として割ったのは内密に願います)

Facebooktwitterlinkedintumblrmail

MobiRubyのサンプル作りました(動画付)

新着情報、『9/22(土) Rubyビジネス・コモンズが「【RBC Tech Saturday】MobiRubyでiOSアプリをつくろう ~スマホアプリ開発にmrubyがやってきた~」を開催します』でお知らせしておりますとおり、明日、引越し前の弊社新オフィスでRBCのMobiRubyイベントを開催します。まだ参加枠あります。ぜひ!

さて、本題。このイベント用に簡単なサンプルを作成しました。

起動するとBGMを演奏、中央にキャラクターを表示。画面をタッチすると効果音をならしてタッチ先にキャラクターがアニメーションで移動します。

再生すると音がでます。

BGMと効果音はユウラボ8bitサウンド工房のものを使用させていただいています。

ソースコード(roundnyaabe.rb)を貼ります。
samegame用のext.rbを使わせてもらっているので頭でrequireしています。

require 'ext'

def CGPointMake(x, y)
    point = Cocoa::Struct::CGPoint.new
    point[:x], point[:y] = x.to_f, y.to_f
    return point
end

class Cocoa::MyViewController < Cocoa::UIViewController

    define C::Void, :viewDidLoad do
        #背景(黒)
        screen_rect = Cocoa::UIScreen._mainScreen._bounds
        background_view = Cocoa::UIView._alloc._initWithFrame(screen_rect)
        background_view._setBackgroundColor(Cocoa::UIColor._blackColor)
        self._view._addSubview(background_view)
    
        #にゃ〜ぶ登場
        @nyaabe_image_view = Cocoa::UIImageView._alloc._initWithFrame(CGRectMake(0, 0, 50, 50))
        @nyaabe_image_view._setImage(Cocoa::UIImage._imageNamed(_S("nyaabe_iphone.png")))
        point = Cocoa::Struct::CGPoint.new
        point[:x] = (screen_rect[:size][:width] / 2).to_f
        point[:y] = (screen_rect[:size][:height] / 2).to_f
        @nyaabe_image_view._setCenter(point)
        self._view._addSubview(@nyaabe_image_view)
    end

    def calcPosition(touches)
        touch = touches._anyObject
        location = touch._locationInView(self._view)
        x = location[:x]
        y = location[:y]
        return [x, y]
    end

    define C::Void, :touchesBegan, Cocoa::Object, :withEvent, Cocoa::Object do |touches, event|
        (@touchesBeganLock ||= Mutex.new).block do
            x, y = calcPosition(touches)
            C::call C::Void, "AudioServicesPlaySystemSound", $tap_se
            p ":touchesBegan x:#{x}, y:#{y}"
            nyaabe_move_to(x, y)
        end
    end

    def nyaabe_move_to(x, y)
        #アニメーション
        context = C::call(C::Pointer, "UIGraphicsGetCurrentContext")
        Cocoa::UIView._beginAnimations nil, :context, context
        Cocoa::UIView._setAnimationDuration C::Double(0.2)
        Cocoa::UIView._setAnimationCurve Cocoa::Const::UIViewAnimationCurveLinear
        
        point = CGPointMake(x, y)
        @nyaabe_image_view._setCenter(point)
        
        Cocoa::UIView._commitAnimations
    end

end

#BGM
bgm = AudioPlayer.new("sht_a05", "mp3")
bgm.loops = -1
bgm.volume = 0.25
bgm.play

#効果音初期化
soundPath = Cocoa::NSBundle._mainBundle._pathForResource _S("se_byuin"), :ofType, _S("mp3")
soundURL = Cocoa::NSURL._fileURLWithPath soundPath
$tap_se = C::Int(0)
C::call C::Void, "AudioServicesCreateSystemSoundID", soundURL, $tap_se.to_pointer

screen_rect = Cocoa::UIScreen._mainScreen._bounds
$window = Cocoa::UIWindow._alloc._initWithFrame screen_rect
$viewController = Cocoa::MyViewController._alloc._init

$window._addSubview $viewController._view

$window._makeKeyAndVisible

今日は福岡で開催されるmrubyのセミナーに参加するのでこれから福岡に移動です。
mrubyのことがわかったらMobiRubyのことがもっとわかるはず。たのしみ!

Facebooktwitterlinkedintumblrmail

長崎ITCamp 2012

このブログは読みやすいようにサブタイトルをまとめてみました。
お好きなところから読むことが出来ます。

0. はじめに
1. 8時半集合だけど5時までLTの練習をする。
2. 割り箸をたてるゲーム全然だめだった・・。
3. デスマのにおいがぷんぷんする。
4. 作業開始
5. LT失敗
6. 旅館にてITCampというか修学旅行の雰囲気を感じる。
7. めちゃくちゃ美味しく感じたのり弁。
8. 色々苦労したけど堂々の2位だった!(3チーム中)

0. はじめに

  ITCampが開催されるということで、行くかどうか真剣に悩んだ結果、行ってきました。
  そして、そこで思ったことや感じたことを書いていきます。(かなりゆるい感じで)

1. 8時半集合だけど5時までLTの練習をする。

  LTってやったことないけど、どや顔で話したいことでもいいということで、
  私の作ったAndroidアプリ「ダイエットビューアー」を
  宣伝したい気持ちになりLTすることにしました。

  でも、準備をするのがなぜか嫌で嫌で仕方がなかった。
  そして気づいたら何の準備もせずに午前1時になっていた。
  準備を1時間でして2時に寝ることにしたが、
  Webなどでスライドの参考とかLTの仕方とか、勉強に1時間を費やした。
  それからスライドをパワーポイントで作って、evernoteに原稿を書いて2時間半、
  午前4時半から午前5時まで声に出して時間を計ってみる。(夜中に何をやっている・・。)
  完璧な準備ができて就寝する。
  とりあえず、5分遅刻してしまう。汗(すいません・・。)

2. 割り箸をたてるゲーム全然だめだった・・。

  チーム分けが終了して、(4人で1チーム)
  運営の木原さんが、「割り箸を輪ゴムでどれくらい高く積み上げれるかで、
  チームワークが、どの程度かわかる。」という。

  私は(図工苦手だったし、いやだな〜。)という
  気持ちが少しあったせいか、チーム内では全然役に立たなかった・・。
  どうやれば高く積み上げれるのか全く思いつかなかった。

  2回やって、2回とも3位でチームワークが悪いのかなとちょっと思う。

  「そのときの上手くいかなかった写真」

  (こりゃだめだ(笑))

3. デスマのにおいがぷんぷんする。

  私のチームは、私以外、全員が学生で
  2人がプログラマーで、1人がデザイナー。  

  まず、どんなWebアプリを作るか考えるタイム。
  私たちのチームは、Twitterの登録をしたものの全然使わない人たち「bocchi」を
  救済するアプリを作ることにした。

  「bocchi」がTwitterでつぶやいて、そのつぶやきに対して返信したら
  ポイントがもらえる。
  そのポイントによってユーザーのレベルがアップ!
  アイコンも進化する。
  これはうれしいねー!というアプリ。

  そして、実際に誰がどの部分を作るか計画していくタイムになる。

  デザイナーを目指す学生の人が、HTMLと素材を担当することになった。

  プログラマーを目指す2人と私の3人でプログラムを担当することになったが・・。

  問題発生。

  2人の話を聞くと、言語としてJavaは出来るけど、
  HTMLとSQLなどは使えなくて、ServletやJSPも知らないという話だった・・。
  Eclipseも触ったことはない。

  終わったときにみんなが満足出来るようにするにはどうしたらいいんだろう・・。
  たぶん、実際にプログラムを組んでもらうのが一番満足するんだろうけど、
  二日間ということと、Webアプリということを考えると、
  やっぱり勉強してもらうしかなく、HTMLとSQLを勉強してもらうことにした。
  (申し訳ない・・。orz・・。
  プログラムだけ出来るっていう場合に、思いつく作業がなかった・・。)

  しかし、出来上がっていく途中のプロジェクトなどは2人のPCに環境を作って
  どういう風に動くのか、見せていくことにした。

4. 作業開始

  私の作業は、実際にプロジェクトを作るのと、プログラマー2人に環境の作り方
  Eclipseの使い方などを教えるのに時間を費やして焦りを感じていた。
  (もうあきらめちゃおっかな〜と何度か心が折れそうになる。)

  しかし、デザイン担当のメンバーは順調に素材とHTMLを作っていく。

  このままでは、プレゼンのときになって、素材とHTMLは出来ました。
  こんな感じに動く予定でしたー!となってしまう・・。
  これはすごく残念なので、がんばってプログラミングしていく。

5. LT失敗

  一日目のITCampが終了して飲み会となった。
  しばらくして、LT大会が始まり私の番になった。
  はじめのスライドまでは上手くいったが、
  実際にエミュレーターでデモを見せるときになると、、動かない・・・。
  押しても押してもエミュレーターが反応しない・・。
  結局、エミュレーターを再起動して見せることに・・。
  evernoteに原稿まで書いてたのに全ての手順が頭から吹っ飛んで、
  結局アドリブで見せたいところを見せて終わってしまった・・。
  (次回やるときはちゃんと直前に動くか試すようにしよう。)

6. 旅館にてITCampというか修学旅行の雰囲気を感じる。
  旅館にて、ゆっくりして感じた雰囲気が、「修学旅行」。
  私以外の人が全員学生でしかもほとんどが知り合いだったらしい・・。
  (な、馴染めてないか!?)とか気になったが・・、
  プロジェクトがデスマすぎて頭の中がそれどころじゃなかった・・。
  結局、PCを出して必死で足りない分のプログラミングをする。
  (どんな場面でもある程度のものが出来ないと、
  気が済まないタイプなのかな〜・・。)
7. めちゃくちゃ美味しく感じたのり弁。

  2日目の昼食時、運営の人たちが弁当を用意してくれていた。のり弁だった。
  (なんでカツ丼にしてくれないんだよ木原さん〜〜orz・・。)
  とか思って食べてみたら、めちゃくちゃ美味しかった・・。
  人生でこんなにのり弁を美味しく感じたのは初めてってくらいに。
  ものすごくエネルギー消費してたんだろうか・・。

8. 色々苦労したけど堂々の2位だった!(3チーム中)
  デザイン担当のメンバーのHTMLと素材を、プロジェクトに組み込み。
  問題点がいくつかあるもののプロジェクトは完成。
  というか時間切れのため仕方なくここまでという感じ。

  プレゼンタイムに入り、他のチームの人たちが、どっかんどっかん笑いを取る。
  (まぁ、そういう趣旨のプレゼンでは、ないんだけど・・。)

  私のチームのプレゼンも完了して、評価タイムになる。
  うまい棒を投票用紙に見立てて、袋の中に入れていく投票形式。
  そして結果、私のチームは堂々の2位入賞!

  とりあえず、色々と無事に終わってよかった。
  あと疲れた〜。

  私のチームのメンバーの皆さんお疲れさまー!

  「今回作ったWebアプリの画像」

  「レベルが上がったらこんな風にアイコンが変わる。デザイン担当のメンバーの力作」

Facebooktwitterlinkedintumblrmail

OSC2012 Tokyo/Fall 終了!

ただいま羽田に移動して帰りの飛行機を待っております。まずは一安心。

ブースにお足をお運びいただいた方々、ありがとうございました。

足を止めてくださる方がすくないマイナーブースではありますが、来て下さった方々はみなさん熱心に話を聞いてくださってとても刺激になりました。

刺激といえば他のブースの方々からもいろいろと。

まず、Joe’sさんの10周年記念漫画にガツン!とやられ(ツインタワーに飛行機がー!)、

Ejectコマンドユーザー会さんの Raspberry Pi を使用した低消費電力なEjectソリューションにニヤニヤし(薄い本買いました)、

自宅ラック友の会さんのラックに感動したり諸々いろんな刺激を受けまくったり!(Tシャツ買いました。MobiRuby勉強会で着よう)

などなど。

いいイベントでした。

移動は大変ですけど(多分自宅に帰り着くのは25:30位です)。

そろそろ搭乗のようです。それでは。

Facebooktwitterlinkedintumblrmail

OSC2012 Tokyo/Fall 一日目無事終了しました

懇親会からホテルにもどって書いております。

ここのところOSCが終わったらとんぼ返りで懇親会にはでることができなかったので久しぶりでした。

毎回参加できるといいんですが。 懇親会重要!

本日、峰松のセミナーにご参加いただいた方々、ありがとうございました。

事前登録よりも多くの方々にご参加いただき、大変うれしかったです。
そうそう、OSCには関係ないけどGOTO組もうまくいったようでよかったよかった。

それでは、そろそろ明日にそなえてやすもうと思います。

おやすみなさい。

Facebooktwitterlinkedintumblrmail

観光に仕事で五島(GOTO)にいってきた話

1.全然上手く行かない1日目

    1日目はとにかくトラブルの連続であまり上手くいきませんでした。

    カーナビの仕事だったので、五島の炎天下の中、
    駐車場で「ならない、ならない、ならない」の連続。

    なんでならないのかその糸口もつかめない状態でしたが、
    uraさんから鶴の二声が・・。(問題点を2つも発見)

    助言があり、何が問題なのかがわかり、
    yoshidaさんと私で夜のうちに問題点を修正し明日、再挑戦することになった。

2.飲み会

    今回作っているシステムの詳しい話を聞いて、
    初めてどんな規模のプロジェクトに関わっているかを知る(遅・・。)。

    あと、五島では海のものがかなり新鮮な状態で食べられるらしく
    色々美味しいものを食べさせてもらいました。

    題「きびなを七輪で焼いて食べる」
題「きびなを七輪で焼いて食べる」

3.夜のプログラミング

    とにかく、明日上手く行かなかったら大変なことになるため、
    問題点が解決するまでコーディング、コーディング!

    私のほうもyoshidaさんのほうも結構あっさり問題が解決し、
    万全の準備ができて就寝。

4.上手くいった2日目

    次の日は、解決策が見事に効いて、
    1日目のトラブルがうそのように、全てがすんなりいき、とても嬉しかったです。

5.ギリギリだった五島観光システムが上手くいっているかをテストするためのドライビング

    テストしながら、色々なポイントを回っているうちに
    時間がなくなりフェリーに間に合うかどうかギリギリに・・。
    
    そうこうしているうちに、EV車の電気がなくなりさらにギリギリに・・。

    電欠ギリギリ時間ギリギリでも、
    最後にはきちんと間に合って長崎まで帰れました。

    題「すごく奇麗だった高浜海岸」
題「すごく奇麗だった高浜海岸」

Facebooktwitterlinkedintumblrmail

OSC2012 Tokyo/Fall はじまります

ブースの準備できました。

本日14時からは弊社、峰松が

『県庁並行稼働中!OpenCOBOL汎用機ダウンサイジングでのハマりどころ』

と題しましてセミナーを行います。よろしくお願いします。

飛び入り参加大歓迎です。

Facebooktwitterlinkedintumblrmail

DNSサーバへのANY? . な連続リクエスト対応

管理してるサーバのネットワークトラフィックが妙に高まっていてなんだコレ?と調査しておりましたら…

16:00:11.143581 IP (tos 0x0, ttl 233, id 62542, offset 0, flags [none], proto: UDP (17), length: 61) 184.154.183.56.5325 > 60.32.189.190.domain: [no cksum]  32583+ [1au] ANY? . ar: . OPT UDPsize=9000 (33)
16:00:11.143674 IP (tos 0x0, ttl 233, id 62543, offset 0, flags [none], proto: UDP (17), length: 61) 184.154.183.56.5325 > 60.32.189.190.domain: [no cksum]  32583+ [1au] ANY? . ar: . OPT UDPsize=9000 (33)
16:00:11.143738 IP (tos 0x0, ttl 233, id 62544, offset 0, flags [none], proto: UDP (17), length: 61) 184.154.183.56.5325 > 60.32.189.190.domain: [no cksum]  32583+ [1au] ANY? . ar: . OPT UDPsize=9000 (33)
16:00:11.143823 IP (tos 0x0, ttl 233, id 62545, offset 0, flags [none], proto: UDP (17), length: 61) 184.154.183.56.5325 > 60.32.189.190.domain: [no cksum]  32583+ [1au] ANY? . ar: . OPT UDPsize=9000 (33)
16:00:11.143898 IP (tos 0x0, ttl 233, id 62546, offset 0, flags [none], proto: UDP (17), length: 61) 184.154.183.56.5325 > 60.32.189.190.domain: [no cksum]  32583+ [1au] ANY? . ar: . OPT UDPsize=9000 (33)
16:00:11.144194 IP (tos 0x0, ttl  64, id 26513, offset 0, flags [none], proto: UDP (17), length: 56) 60.32.189.190.domain > 184.154.183.56.44493: [bad udp cksum 5296!]  22153 ServFail- q: ANY? . 0/0/1 ar: . OPT UDPsize=4096 (28)
16:00:11.144323 IP (tos 0x0, ttl  64, id 26514, offset 0, flags [none], proto: UDP (17), length: 56) 60.32.189.190.domain > 184.154.183.56.44493: [bad udp cksum 5296!]  22153 ServFail- q: ANY? . 0/0/1 ar: . OPT UDPsize=4096 (28)
16:00:11.144432 IP (tos 0x0, ttl  64, id 26515, offset 0, flags [none], proto: UDP (17), length: 56) 60.32.189.190.domain > 184.154.183.56.44493: [bad udp cksum 5296!]  22153 ServFail- q: ANY? . 0/0/1 ar: . OPT UDPsize=4096 (28)
16:00:11.144539 IP (tos 0x0, ttl  64, id 26516, offset 0, flags [none], proto: UDP (17), length: 56) 60.32.189.190.domain > 184.154.183.56.44493: [bad udp cksum 5296!]  22153 ServFail- q: ANY? . 0/0/1 ar: . OPT UDPsize=4096 (28)

おお、DNSサーバへの激しい連続request。測ったところ50回/秒以上のペースで複数箇所から投げてきてるようでした。request内容も ANY? . ということで、弊社のDNSコンテンツサーバが応答する必要がない(ので ServFailを返している)内容のようです(DNS ampなDDoSのシカケにしては、偽装された?rewuest元IPが色々と分散していて謎です)。

複数箇所から飛んでくるのはDNSサーバの運命ですからしかたないとしてServFailを返すだけでも負荷が高まりますし、帯域も多少埋まって勿体ないのでiptablesでフィルタすることにしました。

tcpdump -n -vvv -X -s1500 -i eth1

にてもう少し詳しくパケットの内容を拾ってみると。

16:22:35.827460 IP (tos 0x0, ttl 238, id 36986, offset 0, flags [none], proto: UDP (17), length: 61) 97.93.19.246.hexarc > 60.32.189.190.domain: [no cksum]  61037+ [1au] ANY? . ar: . OPT UDPsize=9000 (33)
   0x0000:  4500 003d 907a 0000 ee11 cd03 615d 13f6  E..=.z......a]..
   0x0010:  3c20 bdbe 1ce5 0035 0029 0000 ee6d 0100  <......5.)...m..
   0x0020:  0001 0000 0000 0001 0000 ff00 0100 0029  ...............)
   0x0030:  2328 0000 0000 0000 0000 0000 00         #(...........
16:22:35.944826 IP (tos 0x0, ttl 233, id 48921, offset 0, flags [none], proto: UDP (17), length: 61) 77.99.52.123.25697 > 60.32.189.190.domain: [no cksum]  6521+ [1au] ANY? . ar: . OPT UDPsize=9000 (33)
   0x0000:  4500 003d bf19 0000 e911 96d9 4d63 347b  E..=........Mc4{
   0x0010:  3c20 bdbe 6461 0035 0029 0000 1979 0100  <...da.5.)...y..
   0x0020:  0001 0000 0000 0001 0000 ff00 0100 0029  ...............)
   0x0030:  2328 0000 0000 0000 0000 0000 00         #(...........

な内容でしたので、iptablesにて

iptables -t raw -I PREROUTING -p udp --destination-port 53 \
 -m string --algo kmp --from 30 \
 --hex-string "|010000010000000000010000ff0001000029232800000000000000000000|" \
 -j DROP

とIPパケットの30byte目からのパターンに注目してhex-string形式で指定してみます。
結果:

16:40:37.686016 IP (tos 0x0, ttl 238, id 51404, offset 0, flags [none], proto: UDP (17), length: 61) 97.93.19.246.32175 > 60.32.189.190.domain: [no cksum]  15020+ [1au] ANY? . ar: . OPT UDPsize=9000 (33)
16:40:37.686094 IP (tos 0x0, ttl 238, id 51405, offset 0, flags [none], proto: UDP (17), length: 61) 97.93.19.246.32175 > 60.32.189.190.domain: [no cksum]  15020+ [1au] ANY? . ar: . OPT UDPsize=9000 (33)
16:40:37.686176 IP (tos 0x0, ttl 238, id 51406, offset 0, flags [none], proto: UDP (17), length: 61) 97.93.19.246.32175 > 60.32.189.190.domain: [no cksum]  15020+ [1au] ANY? . ar: . OPT UDPsize=9000 (33)
16:40:37.853317 IP (tos 0x0, ttl 234, id 23094, offset 0, flags [DF], proto: UDP (17), length: 69) 201.6.2.85.14604 > 60.32.189.190.domain: [udp sum ok]  11303% [1au] AAAA? ns.server.st. ar: . OPT UDPsize=4096 (41)
16:40:37.854079 IP (tos 0x0, ttl  64, id 44172, offset 0, flags [none], proto: UDP (17), length: 110) 60.32.189.190.domain > 201.6.2.85.14604:  11303*- q: AAAA? ns.server.st. 0/1/1 ns: server.st. SOA[|domain]
16:40:37.855922 IP (tos 0x0, ttl 234, id 23093, offset 0, flags [DF], proto: UDP (17), length: 69) 201.6.2.85.62860 > 60.32.189.190.domain: [udp sum ok]  15132% [1au] A? ns.server.st. ar: . OPT UDPsize=4096 (41)
16:40:37.856467 IP (tos 0x0, ttl  64, id 44173, offset 0, flags [none], proto: UDP (17), length: 143) 60.32.189.190.domain > 201.6.2.85.62860:  15132*- q: A? ns.server.st. 1/2/2 ns.server.st. A 60.32.189.190 ns: server.st.[|domain]

ServFailも返すことなく、返すべきrequestについては正しく応答を返してますね。
何事も平和が一番です(´ー`)

Facebooktwitterlinkedintumblrmail