とりあえず何かしらご報告出来るようなパーティーは開きたいと思いますので
詳細が決まったら追って報告します><
とりあえず>< - YoshioriのBlog
と書いておきながら報告が遅くなってしまって申し分けありません><
7/3 に結婚披露パーティーをします!!
色々な方に参加してもらいたいので,カンファレンスにしちゃいました!!
食べ物も飲み物も出る RubyKaigi とか LL イベントとかだと思っていただければ良いので
気軽に参加してください><
http://keccon2010.appspot.com/
| プログラム | 時間 | 概要 |
|---|---|---|
| 受付開始 | 17:30 - 18:00 | |
| 開宴 | 18:00 - 18:10 | オープニングセレモニー |
| 新郎側来賓代表祝辞LT | 18:10 - 18:15 | 比嘉 康雄氏 |
| 新婦側来賓代表祝辞LT | 18:15 - 18:20 | 天野 勝氏 |
| 仲人祝辞LT&乾杯 | 18:20 - 18:25 | 角谷 信太郎氏 |
| 歓談 | 18:25 - 19:15 | |
| 友人LT | 19:15 - 20:15 | LT大会 |
| 新郎からの挨拶LT | 20:25 - 20:30 | 庄司 嘉織氏 |
もうむちゃくちゃな豪華さです><
http://keccon2010.appspot.com/registration.html
ここから PayPal で申し込めます.
PayPal 使えない人は使える人に頼んで 2 枚とか買っていただければと思います><
ふと思ったが、 #keccon は応募者が分かったほうが参加登録しやすいのではないか。いや、逆にしにくいのか? 難しいな。 私はもう登録した。
2010-06-12 01:08:38 via web
@t_yano 参加者リストは公開されてたほうが嬉しいですよねえ #keccon
2010-06-12 01:24:29 via web to @t_yano
と言われたので,参加表明出来るようにしました.
表明したくない人もいると思いますので,PayPal での購入とは別の機能として実装しています.
(ので,ここで表明しても当日は入れませんので PayPal で決済してくだしあ><)
http://keccon2010.appspot.com/registration.html
このページの下の方にある参加表明をクリックするとこんな感じで表明出来ます!!
で,これだけだと面白くないので,簡単な API を用意しました.
http://keccon2010.appspot.com/script/api/entrant
にアクセスすると現在参加表明している人の一覧が JSON 形式で取得出来ます.
また,GET パラメータとして callback を指定し, JSONP 形式で呼び出す事も可能です.
http://keccon2010.appspot.com/script/api/entrant?callback=callback
是非ご利用下さいwwww
(最初,サイトの方でもマウスカーソールを参加者のアイコンが追従する機能を付けようと思ったのですが,ウザすぎてやめました><)
みなさん来てください!!
さて,今年も新人が配属される季節になってきました!!
というわけで久しぶりにブログで答えてみます!!
あと、getOutputStreamを使うと文字化けの原因になるよ!
http://d.hatena.ne.jp/aTaGo/20100607/1275907563
setContentTypeメソッドで正しいcharsetを指定しても、その後でgetOutputStreamを呼ぶと文字化けするらしい。
http://d.hatena.ne.jp/sonodax/20100607/1275908653
うん,文字化けするよ!!
でも,それは想定どおりの挙動だよ!!
ちゃんと公式ドキュメントみると書いてあるよ!!
Returns a ServletOutputStream suitable for writing binary data in the response. The servlet container does not encode the binary data.
http://java.sun.com/j2ee/1.4/docs/api/javax/servlet/ServletResponse.html#getOutputStream()
バイナリデータを扱うときに使うやつだからサーブレットコンテナは encode しないよって事だね!!
と,いうわけで
id:sonodax と id:aTaGo をよろしくおねがいします><
7/17 に 「とちぎテストの会議」が開催されます.
http://kokucheese.com/event/index/2504/
プログラム
http://d.hatena.ne.jp/tochigitestnokaigi/20100516/1274029585
で,そこにパネラーとして出ます!!!
が,正直言って超不安です><
他の列席者が豪華すぎです.
しかも……
最近もデブサミ2010でのid:YoshioriさんのXPの事例発表を発端に、
Twitter上でブームがありました。
http://d.hatena.ne.jp/m_seki/20100512#1273654565
発端です><
本当に泣きそうです><
僕以外,「テスト」という言葉を聞くと日頃磨き上げていた手斧を多数持って
高さを競うようなモヒカンをたなびかせながらその持ってきた手斧を投げ付ける人達のあつまりです><
たぶん,当日,僕,涙目になると思います.
そもそも師匠の id:t-wada を前にして僕なんかが何を言えるのでしょう?
でも,id:lchin に
「巨人の肩に乗って見てる人にも,その人の視点があるんだから自信を持てば良い」
と励まされたのでがんばってみようと思います.
僕なりに TDD をやってきて七転八倒している中で本当に感じた事を話そうと思ってます.
と,いうわけで,普通に豪華なメンバー(+1)でのパネルだと思うので,よかったら来てください!!
あと,僕も LT とかして良いのかなぁ><
id:TAKESAKO の 「Python SyntaxError Programming」が凄いです.
http://developer.cybozu.co.jp/takesako/2010/05/python-syntaxer.html
#!/usr/bin/python _=-~-~(()>[]);_,__=_*_,_**_-~-~_;___='%'+`SyntaxError`[_];exec''+___*(__+~-~_)%(_*_^-~__,_*_-~__,~__*__/~_,~-~_*~_,_-__^~-~_*_,-~-~__,~-_*_,_/_^~_*~_,_-~-~_*_,_-~-~_*_,_|~-~_*~_,_+__+__/_,__,~_&_*_,__+_|_*_,_-__^~-~_*_,__^~-_*_,_|~-~_*~_,~-~_*~_,-~__,-~-~__)
これで,
「Hello, Python!」
と表示されます.
凄すぎてどうなってるのか全然わかりません><
で,頑張って解析してみました.
; で一行にされているので,まずは改行して見やすくしてみます.
_=-~-~(()>[]); _,__=_*_,_**_-~-~_; ___='%'+`SyntaxError`[_]; exec''+___*(__+~-~_)%(_*_^-~__,_*_-~__,~__*__/~_,~-~_*~_,_-__^~-~_*_,-~-~__,~-_*_,_/_^~_*~_,_-~-~_*_,_-~-~_*_,_|~-~_*~_,_+__+__/_,__,~_&_*_,__+_|_*_,_-__^~-~_*_,__^~-_*_,_|~-~_*~_,~-~_*~_,-~__,-~-~__)
まったく見やすくならないですね!! やりましたね!!
_=-~-~(()>[]);
まず,_ に代入をしているのはわかります.
なので右辺を解析してみます.
-~-~(()>[]);
まずは,- も ~ も演算子なので確固のついている () > [] が先に処理されます.
で,空のタプルと空のリストを比較しています.
iPython で実行してみると
>>> () > [] True
となります.
ちなみに
>>> () < [] False >>> () == [] False >>> () is [] False >>> () in [] False
という結果になります.
これは Python の決め事で,昔の Guido は何でも比較出来るのが正しいと考えてたみたいです.
(Python3.0 では比較出来ないみたいです.)
で,話しを戻すと
-~-~True;
になっているわけですね.
で,~ 記号でビット反転されています.
ビット反転が良くわからなかったのですが,
http://ja.wikipedia.org/wiki/2%E3%81%AE%E8%A3%9C%E6%95%B0
ここを id:nishiohirokazu に教えてもらってわかりました!!
で,True の数値表現は 1 なので
>>> int(True) 1 >>> ~1 -2 >>> --2 2 >>> ~2 -3 >>> --3 3
と,言う事で _ に 3 を代入している事がわかりました.
こうなってくると,2行目が見えてきました.
_,__=_*_,_**_-~-~_;
また代入をしているのですが,「,」 が両辺にあるので多項代入だとわかります.
で,右辺をまずはさきほど求めた 3 でおきかえてみます.
_,__=3*3,3**3-~-~3;
になります.
_,__=3*3,3**3-~-~3;
計算すると
_,__=9,32;
になります.
これで,この時点でそれぞれ変数に
_ = 9
__ = 32
が,入っている事がわかります.
___='%'+`SyntaxError`[_];
まずは代入なので右辺を見ていきます.
で,判明している _ に 9 を入れてみます.
___='%'+`SyntaxError`[9];
で,バッククートは括れば評価結果を取得できるので SyntaxError を評価すると
(これも Python3.0 では repr 関数に置きかわりました)
>>> `SyntaxError`
"<type 'exceptions.SyntaxError'>"
と,文字列を取得できます.
___='%'+"<type 'exceptions.SyntaxError'>"[9];
で,その文字列の配列の9要素目なので
「c」が取得できます.
___='%'+'c';
___='%c';
で,結果として
___ = '%c'
が入っている事になります.
exec''+___*(__+~-~_)%(_*_^-~__,_*_-~__,~__*__/~_,~-~_*~_,_-__^~-~_*_,-~-~__,~-_*_,_/_^~_*~_,_-~-~_*_,_-~-~_*_,_|~-~_*~_,_+__+__/_,__,~_&_*_,__+_|_*_,_-__^~-~_*_,__^~-_*_,_|~-~_*~_,~-~_*~_,-~__,-~-~__)
ここまでで,
_ = 9
__ = 32
___ = '%c'
が判明しているので,すべて置き換えてみます.
exec''+%c*(32+~-~9)%(9*9^-~32,9*9-~32,~32*32/~9,~-~9*~9,9-32^~-~9*9,-~-~32,~-9*9,9/9^~9*~9,9-~-~9*9,9-~-~9*9,9|~-~9*~9,9+32+32/9,32,~9&9*9,32+9|9*9,9-32^~-~9*9,32^~-9*9,9|~-~9*~9,~-~9*~9,-~32,-~-~32)
あとは計算してみると……
exec''+'%c'*(21)%(112,114,105,110,116,34,72,101,108,108,111,44,32,80,121,116,104,111,110,33,34)
となります.
で,
exec''+'%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c'%(112,114,105,110,116,34,72,101,108,108,111,44,32,80,121,116,104,111,110,33,34)
と,文字コードから文字列を作りだしていて……
exec''+'print"Hello, Python!"'
となっていて
「Hello, Python!」
と表示されます.
以上,解析結果としては,id:TAKESAKO が変態すぐるという事がわかりました><
コンテンツ委員なしんちゃんに
「なんぞwww」と微妙なコメントでお勧め(?)いただいていますが,
デブサミで「【13-A-6】ひよこクラブ ver.Engineer」やります!!