ichirin2501's diary

いっちりーん。

「外部キー Night」に参加してきた

発表者として参加させていただきました。

発表資料はこちらです(自分でも忘れそうなのでブログにリンク貼っておく)

外部キー制約に伴うロックの小話


追記: 2015/08/22
ブログでも補足したほうが良いかな、と思ったので今更追記することにしました。

どういう資料?

外部キー制約で発生するロックのお話です。前提として、MySQL(5.5.28)のInnoDBストレージエンジン、トランザクション分離レベルはREPEATABLE-READ, READ-COMMITEDです。上記は検証環境ですが、MySQL5.1 ~ 5.7でも変化していない挙動のはずです。また、InnoDBのロックはインデックスレコードロックなので、インデックスに対する理解が必要不可欠です。発表時間も20分程度ということもあって、その辺りをある程度理解されてる方が対象の資料となっています。

3行でまとめると?

  1. INSERT時には自動的に共有ロックが取られるぞ!
  2. INSERTする前には外部キー制約の行を排他ロックしろよ!
  3. それでも避けられないパターンがあるぞ!覚悟しろ!

最後は何を言ってるんだ、という感じですが、テーブル定義に依存する話を紹介しています。残念ながら発覚後に対処するのは極めて難しいものと思われます。

いちりんちゃん的には外部キー制約どうなの?

MySQLなら避けます。資料内容以外でも、現在、MySQLだとパーティションが利用できなくなる、パフォーマンスも落ちる、など色々デメリットがあります。大抵の環境ではデメリットが勝るでしょう。ただ、開発環境では外部キー制約を利用して異常を発見し易くしたりするのはありだと考えてます。

最後に、
ロックと仲良く!

あけましておめでとうございます

 あけましておめでとうございます。

生きております。
記事を書くのも約3ヶ月振りです。

昨年の振り返りを途中まで書き出していたのですが、
だるくなったのでやめました。自分らしいです。

そして今年です。
冬コミを落とす(記事書く時間がなかった)結果になったので、
夏コミに向けて、日常生活をハックしつつ時間を作り、
その時間を夏コミの同人誌制作にあてていきます。

時間がなかった、というのは言い訳だよねーとは自分でも思っています。
例えば通勤時の電車で座れる時間帯の電車に乗り、
パソコン開いて記事書くとか、時間を作り出すことは可能でした。

ということで、今から夏コミに向けて動いていきます。
先に夏コミのネタを投下しておきますと、
ファミコンエミュ作成
の予定しております。

キー配列を変更

お久しぶりです、生きてます。

もう一ヶ月経ちますが、先月から脱ニートして社会人になりました。
楽しい日々を送っています。
情弱キャラが板についてきましたよ(どやぁ


んで、キー配列を変更した話を少し。
仕事ではPerlでプログラミングしているんですけど、
Perlでプログラミングするのは好きじゃなかったです。

理由:$が打ちにくい。

変数を記述する度に手が止まるのがストレスだったんですね。
左手でShiftを小指で押しつつ中指で$を打つ手の状態は、
どうしてもタイピングが一時的に止まってしまう形でした。

そこでキー配列の変更ですよ!
自分にはそんな発想はなかったんですが、触発されたのがこれです。

「キーボードをいじろう!」 by @handlename
http://www.slideshare.net/handlename/yapcasia-ltthon

決してdvorakにしたわけではなくてw、数字と記号を入れ替えてみました。
入れ替えてみて、最近は違和感なくなってきたなぁと感じたので、その感想です。

1. Perlで$を打つときに一時的に止まらない
単純にShiftを押す必要がなくなり、打ちやすくなったからですね

2. for構文が打ちやすい
例えばこれ、Shiftを押すのが3回しかないです

for($i = 0; $i<1000; ++$i)
       ^      ^      ^

あと、プログラミングにおいては数字を打つより記号を打つことが多いわけですから、
単純にShiftを押す回数が減りますね。

思い切ってキー配列を変更して良かったです。
Perlプログラミングも快適、というお話でした。

身内ハッカソン

ここ数実は身内ハッカソンに参加していました。
3泊4日、ほぼ3日間のハッカソンになります。
各自自由にテーマを取り組むという、完全にソロプレイ。
自分はファミコンのエミュ作成にチャレンジすることにしました。
普段ソフトウェアばっかりなので、ハードウェアとの関係を思い出したくなったのですw。

初日:
f:id:ichirin2501:20120710124245j:image:h360,w280


大量のレッドブル
翼を授けてくれるようですが、今回ばかりは死に近づくアイテムです。
まずは、資料集めから始めました。
そして、ひたすら資料を読む作業(白目)
グラフィック周辺処理がいくら読んでもよくわからない…
とにかく、グラフィック周辺の処理の完成を目処にして進めることにしました。
エミュ作成の流れを確認して、資料を眺めながら初日終了。


2日目:
仕様書の意味がわからない(困惑
わかるところだけをとにかく実装、GUIとしての出力はXlibを利用することに。
夜にはなんとか HELLO, WORLD! を出力するところまで進む!
ここが最高潮w
f:id:ichirin2501:20120715110137p:plain


3日目:
仕様書の意味がわからない(涙目
NESのサンプルROMを拾ってきて、動かしながらデバッグを行う。
バグのいくつかを闇に葬った。
Les's PIZA
f:id:ichirin2501:20120712200837j:image:h280,w360
ノリでピザを頼んではいけない、後の祭りだった(半分余ったw


4日目
仕様書の意味がわからない(怒り
気付いたらハッカソン終了してた☆
実装できたのは、CPUの各命令と、グラフィック周辺(未実装多し)
クロック数調整、割り込み、音声までは手が回りませんでした。
ほとんどの時間を仕様書に費やす…が、あまり成果なし。

そして待ちに待った各自発表タイム。
みんなすごかったw


楽しい4日間を過ごしました。
暇なときにエミュ作成の続きをしたいと思います。

ksnctfに取り組んだ話

ここ最近、ksnctfというものをやっていました。
主にコンピュータセキュリティに関する問題が出題され、FLAGをゲットする遊びです。
現時点(全21問)では全問正解しましたので、私なりにヒントを書きます。
書こうと思ったのは、勉強になるので是非やってみてほしいと考えたからです。


はじめに、CTFを知らない人もいると思いますので、軽く説明です。

CTFについて

CTFとは、世界各地で開催されている著名な旗取り合戦競技(Capture The Flag)のことで、セキュリティ技術を競うコンテストの総称です。クイズ形式の問題の謎を解いたり、実験ネットワーク内で疑似的な攻防戦を行ったりします。クイズ形式の場合、出題ジャンルは、暗号、バイナリ、ネットワーク、Web、プログラミングなど多岐に渡り、セキュリティのみでなくプログラミングに関する知見も問われ、攻撃技術、防御技術、解析技術、暗号の知見、ネットワーク技術など、広範な知識と経験が必要となっています。CTFはIT技術に関する総合的な問題解決力を磨くうえで最適な競技と言えるでしょう。

http://www.seccon.jp/p/ctf.html

日本でも今年からSECCON(SECurity CONtest)というのができました。
定期的にCTFも開催する様子ですので、興味のある方は参加されてはいかがでしょうか。


ksnctfについて

http://ksnctf.sweetduet.info/
まずは、感想を述べたいと思います。
出題された問題はいずれも素晴らしいと感じました。
私から見て(CTF初心者)、
・ぐぐればなんとかなる(難易度設定が良い
・勉強になるような題材
の2点です。
ストレートで解けた問題は多くなくて、本当にだいたいぐぐってます。
全体を通して、多少の予備知識(ぐぐるためのキーワードに心当たりがある程度)と、
気合があれば解けるんじゃないでしょうか。(予備知識の程度は人によりますが…)。
楽しい時間を提供してくれた作成者であるkusano_kさんにこの場をお借りして感謝を。
個人的に いいね! と思ったのは、
4: Villager A
6: Login
9: Digest is secure!
13: Proverb
21: Perfect cipher
これら5つの問題を挙げたい。いずれも勉強になりました。


下記から各問題のヒント?になります。※反転させてください
中にはヒントになっていないものもありますがご容赦ください。
もう少しヒント欲しいという方はコメントか、もしくはTwitterとかで。

1: Test Problem
hint1: やるだけ

2: Easy Cipher
hint1: 古典暗号

3: Crawling Chaos
hint1: javascriptデバッグツールを使う,あとは気合

4: Villager A
hint1: フォーマットストリング攻撃
hint2: GOT overwrite

5: Onion
hint1: base64
hint2: fileコマンド便利だよね

6: Login
hint1: ' OR 1=1--
hint2: Blind SQL Injection, データベースによって関数が異なるよ

7: Programming
hint1: whitespace,あとは気合

8: Basic is secure?
hint1: BASIC認証

9: Digest is secure!
hint1: Digest認証の仕組みを知っていますか?

10: #!
hint1: んあー

11: Riddle
hint1: リバースエンジニアリングだから気合です

12: Hypertext Preprocessor
hint1: 関係ない数値がありますよね, 2012-1823

13: Proverb
hint1: シンボリックリンク

14: John
hint1: john the ripper
hint2: 2chでよくある読み方

15: Jewel
hint1: apk -> jar, がんばって読む

16: Math I
hint1: RSA暗号

17: Math II
hint1: 超える値と超えない値で二分探索しました

18: USB flash drive
hint1: forensic問題, autopsy, FTK Imager etc

19: ZIP de kure
hint1: pkcrack

20: G00913
hint1: G00913ってGoogleで調べろってことです

21: Perfect cipher
hint1: XORの性質
hint2: メルセンヌツイスター擬似乱数生成は条件が揃うと予測可, XORShiftは逆算可能