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ソンの出番までずっとコード書いたり、スライド作ったりしていたのが報われて良かったです。
YAPC::Asia 2012 LTソン muraveスライド&デモ動画
- 2012/09/30
- murave
- IronPython
- YAPC
- イベント
RBC、MobiRubyイベント無事終了(スライド付)
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のことがもっとわかるはず。たのしみ!
長崎ITCamp 2012
- 2012/09/17
- uchida
このブログは読みやすいようにサブタイトルをまとめてみました。
お好きなところから読むことが出来ます。
0. はじめに
1. 8時半集合だけど5時までLTの練習をする。
2. 割り箸をたてるゲーム全然だめだった・・。
3. デスマのにおいがぷんぷんする。
4. 作業開始
5. LT失敗
6. 旅館にてITCampというか修学旅行の雰囲気を感じる。
7. めちゃくちゃ美味しく感じたのり弁。
8. 色々苦労したけど堂々の2位だった!(3チーム中)
ITCampが開催されるということで、行くかどうか真剣に悩んだ結果、行ってきました。
そして、そこで思ったことや感じたことを書いていきます。(かなりゆるい感じで)
LTってやったことないけど、どや顔で話したいことでもいいということで、
私の作ったAndroidアプリ「ダイエットビューアー」を
宣伝したい気持ちになりLTすることにしました。
でも、準備をするのがなぜか嫌で嫌で仕方がなかった。
そして気づいたら何の準備もせずに午前1時になっていた。
準備を1時間でして2時に寝ることにしたが、
Webなどでスライドの参考とかLTの仕方とか、勉強に1時間を費やした。
それからスライドをパワーポイントで作って、evernoteに原稿を書いて2時間半、
午前4時半から午前5時まで声に出して時間を計ってみる。(夜中に何をやっている・・。)
完璧な準備ができて就寝する。
とりあえず、5分遅刻してしまう。汗(すいません・・。)
チーム分けが終了して、(4人で1チーム)
運営の木原さんが、「割り箸を輪ゴムでどれくらい高く積み上げれるかで、
チームワークが、どの程度かわかる。」という。
私は(図工苦手だったし、いやだな〜。)という
気持ちが少しあったせいか、チーム内では全然役に立たなかった・・。
どうやれば高く積み上げれるのか全く思いつかなかった。
2回やって、2回とも3位でチームワークが悪いのかなとちょっと思う。
(こりゃだめだ(笑))
私のチームは、私以外、全員が学生で
2人がプログラマーで、1人がデザイナー。
まず、どんなWebアプリを作るか考えるタイム。
私たちのチームは、Twitterの登録をしたものの全然使わない人たち「bocchi」を
救済するアプリを作ることにした。
「bocchi」がTwitterでつぶやいて、そのつぶやきに対して返信したら
ポイントがもらえる。
そのポイントによってユーザーのレベルがアップ!
アイコンも進化する。
これはうれしいねー!というアプリ。
そして、実際に誰がどの部分を作るか計画していくタイムになる。
デザイナーを目指す学生の人が、HTMLと素材を担当することになった。
プログラマーを目指す2人と私の3人でプログラムを担当することになったが・・。
問題発生。
2人の話を聞くと、言語としてJavaは出来るけど、
HTMLとSQLなどは使えなくて、ServletやJSPも知らないという話だった・・。
Eclipseも触ったことはない。
終わったときにみんなが満足出来るようにするにはどうしたらいいんだろう・・。
たぶん、実際にプログラムを組んでもらうのが一番満足するんだろうけど、
二日間ということと、Webアプリということを考えると、
やっぱり勉強してもらうしかなく、HTMLとSQLを勉強してもらうことにした。
(申し訳ない・・。orz・・。
プログラムだけ出来るっていう場合に、思いつく作業がなかった・・。)
しかし、出来上がっていく途中のプロジェクトなどは2人のPCに環境を作って
どういう風に動くのか、見せていくことにした。
私の作業は、実際にプロジェクトを作るのと、プログラマー2人に環境の作り方
Eclipseの使い方などを教えるのに時間を費やして焦りを感じていた。
(もうあきらめちゃおっかな〜と何度か心が折れそうになる。)
しかし、デザイン担当のメンバーは順調に素材とHTMLを作っていく。
このままでは、プレゼンのときになって、素材とHTMLは出来ました。
こんな感じに動く予定でしたー!となってしまう・・。
これはすごく残念なので、がんばってプログラミングしていく。
一日目のITCampが終了して飲み会となった。
しばらくして、LT大会が始まり私の番になった。
はじめのスライドまでは上手くいったが、
実際にエミュレーターでデモを見せるときになると、、動かない・・・。
押しても押してもエミュレーターが反応しない・・。
結局、エミュレーターを再起動して見せることに・・。
evernoteに原稿まで書いてたのに全ての手順が頭から吹っ飛んで、
結局アドリブで見せたいところを見せて終わってしまった・・。
(次回やるときはちゃんと直前に動くか試すようにしよう。)
旅館にて、ゆっくりして感じた雰囲気が、「修学旅行」。
私以外の人が全員学生でしかもほとんどが知り合いだったらしい・・。
(な、馴染めてないか!?)とか気になったが・・、
プロジェクトがデスマすぎて頭の中がそれどころじゃなかった・・。
結局、PCを出して必死で足りない分のプログラミングをする。
(どんな場面でもある程度のものが出来ないと、
気が済まないタイプなのかな〜・・。)
2日目の昼食時、運営の人たちが弁当を用意してくれていた。のり弁だった。
(なんでカツ丼にしてくれないんだよ木原さん〜〜orz・・。)
とか思って食べてみたら、めちゃくちゃ美味しかった・・。
人生でこんなにのり弁を美味しく感じたのは初めてってくらいに。
ものすごくエネルギー消費してたんだろうか・・。
デザイン担当のメンバーのHTMLと素材を、プロジェクトに組み込み。
問題点がいくつかあるもののプロジェクトは完成。
というか時間切れのため仕方なくここまでという感じ。
プレゼンタイムに入り、他のチームの人たちが、どっかんどっかん笑いを取る。
(まぁ、そういう趣旨のプレゼンでは、ないんだけど・・。)
私のチームのプレゼンも完了して、評価タイムになる。
うまい棒を投票用紙に見立てて、袋の中に入れていく投票形式。
そして結果、私のチームは堂々の2位入賞!
とりあえず、色々と無事に終わってよかった。
あと疲れた〜。
私のチームのメンバーの皆さんお疲れさまー!
OSC2012 Tokyo/Fall 終了!
ただいま羽田に移動して帰りの飛行機を待っております。まずは一安心。
ブースにお足をお運びいただいた方々、ありがとうございました。
足を止めてくださる方がすくないマイナーブースではありますが、来て下さった方々はみなさん熱心に話を聞いてくださってとても刺激になりました。
刺激といえば他のブースの方々からもいろいろと。
まず、Joe’sさんの10周年記念漫画にガツン!とやられ(ツインタワーに飛行機がー!)、
Ejectコマンドユーザー会さんの Raspberry Pi を使用した低消費電力なEjectソリューションにニヤニヤし(薄い本買いました)、
自宅ラック友の会さんのラックに感動したり諸々いろんな刺激を受けまくったり!(Tシャツ買いました。MobiRuby勉強会で着よう)
などなど。
いいイベントでした。
移動は大変ですけど(多分自宅に帰り着くのは25:30位です)。
そろそろ搭乗のようです。それでは。
観光に仕事で五島(GOTO)にいってきた話
- 2012/09/07
- uchida
1.全然上手く行かない1日目
1日目はとにかくトラブルの連続であまり上手くいきませんでした。
カーナビの仕事だったので、五島の炎天下の中、
駐車場で「ならない、ならない、ならない」の連続。
なんでならないのかその糸口もつかめない状態でしたが、
uraさんから鶴の二声が・・。(問題点を2つも発見)
助言があり、何が問題なのかがわかり、
yoshidaさんと私で夜のうちに問題点を修正し明日、再挑戦することになった。
2.飲み会
今回作っているシステムの詳しい話を聞いて、
初めてどんな規模のプロジェクトに関わっているかを知る(遅・・。)。
あと、五島では海のものがかなり新鮮な状態で食べられるらしく
色々美味しいものを食べさせてもらいました。
3.夜のプログラミング
とにかく、明日上手く行かなかったら大変なことになるため、
問題点が解決するまでコーディング、コーディング!
私のほうもyoshidaさんのほうも結構あっさり問題が解決し、
万全の準備ができて就寝。
4.上手くいった2日目
次の日は、解決策が見事に効いて、
1日目のトラブルがうそのように、全てがすんなりいき、とても嬉しかったです。
5.ギリギリだった五島観光システムが上手くいっているかをテストするためのドライビング
テストしながら、色々なポイントを回っているうちに
時間がなくなりフェリーに間に合うかどうかギリギリに・・。
そうこうしているうちに、EV車の電気がなくなりさらにギリギリに・・。
電欠ギリギリ時間ギリギリでも、
最後にはきちんと間に合って長崎まで帰れました。
OSC2012 Tokyo/Fall はじまります
ブースの準備できました。
本日14時からは弊社、峰松が
『県庁並行稼働中!OpenCOBOL汎用機ダウンサイジングでのハマりどころ』
と題しましてセミナーを行います。よろしくお願いします。
飛び入り参加大歓迎です。
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については正しく応答を返してますね。
何事も平和が一番です(´ー`)