読者です 読者をやめる 読者になる 読者になる

今ボクの目に映る釧路 (釧路 Advent Calendar 2013 参加記事)

はじめに

はじめまして。釧路生まれ釧路育ちの中学3年生 @lmt_swallow です。 釧路 Advent Calendar 2013に参加しているので書きます。

この文章は1割の真面目な文と9割の頭に浮かんだ単語を並べただけの文で構成されています。

結論

中学生なので若者っぽい言葉でまとめます。 「ヤバい。マジパない。」

ぼく と 釧路

ここ にもある通り、僕はここ釧路に 1998 年 9 月 17 日に生まれてからというものの、かれこれ 15 年間をこの釧路で過ごしているわけです。釧路、とはいっても北大通のあたりからは遠いのだけれど…。 ぼく と 釧路 の関係はそう深くはないものだ、と若かりし頃の僕(というと斧が飛んできそうだけれど)は思っていたものです。 けれど、今は違います。その理由についてを語ります。

小5くらいのころ

父が使っていたⅠ台のPCを僕が貰ったのがこの頃でした。この頃はほとんどゲームしかしていなくて、今でも「ここで外に出て周りの友達と遊んでいたなら僕はどうなっていたのだろうか」と思いを馳せることがあります。今とはまた違う道を歩いていたかもしれませんし、結局は今の僕に収束しているのかもしれませんし、よくわからないものです。

二年前, 中1のころ

僕の誕生日である 9 月 17 日に開催された LDD’11/Fall in KUSHIRO という勉強会(でいいのかな?)への参加こそが、僕が初めて「同年代で形成されたコミュニティ」以外と関わりを持った瞬間でした。記憶の上だと #946oss というコミュニティがあるということを知ってから #ldd11f に参加するまでにはそこまで時間がなかったかと思います。この頃の僕が 何故このイベントに参加しようとしたのかも今ではもうあやふやですが、とにかく楽しかったことは覚えています。

去年, 中2の頃

中2の夏休み、僕は初めて一人で釧路以外の地に足を踏み出しました。昼には直方体の連なりが蛇のように地を駆け巡り、夜には地に星が点る街、トーキョーです。この体験はセキュリティキャンプという合宿に参加する経験からのものなのですが、これについては割愛します。ただ僕が今「釧路との関係」を考えるときには、この体験が最も重要なことでした。家族旅行の体験はこれまでもあったけれど、単身で異郷の地を踏む体験をした時、僕と釧路の関係はより深まったように思います。(ラブコメのようだけれど。)

中2の冬頃、再度一人でトーキョーに踏み出します。セキュリティキャンプ・フォーラムでお話する機会を頂いたからです。コレについても割愛します。

今年, 中3の頃

情報オリンピック夏季合宿に参加して、この時もまたトーキョーに行きました。(この記事が詳しいです:JOIss 2013 参加しました) この頃、僕の中での「釧路」に対する思いが着実に変化していったかと思います。

その後には U-16釧路プログラミングコンテスト や旭川プロコンに参加しました。 この時にも #946oss の方に送迎していただいたり、ご飯を奢って頂いたりと、非常にお世話になりました。 この頃に冒頭のような「釧路ヤバいパない」という意識が確信へと変わっていたと思います。

そのまた後には OSC Hokkaido 2013 にも参加してきたり、 SECCON 北海道大会に参加してきたり、と何度か札幌に赴く機会がありましたが、このあたりでやっと僕の中に「釧路」というものへのイメージが着実に形成されてきたと思います。

ここまで僕が「自分」と「非釧路な土地」の関わりについて述べたのは、 釧路を釧路以外から見る経験をしたことで、「釧路の変なところ」が見えてきた、ということを述べたかったからです。

そして今、僕から見える釧路

結論から述べると「すごい」。よくよく考えれば、こんな田舎(釧路 dis ってんのか、と斧が飛んできますね)に OSS コミュニティがあるのも面白い話だし、そんな人々が毎月勉強会を行っているのも素直に尊敬しているし、釧路 Advent Calendar という得体のしれないモノの枠が埋まっているのも目を疑うし、そんな釧路 Advent Calendar に参加している自分がいることにも不思議な縁を感じるし、メインストリートにシャッターが散見される街の丘の上の施設で釧路プロコンが開催されて、更に学生がそこそこ集まっているのも驚きだし、…と、僕から見える釧路はとにかく「得体の知れない釧路」です。

トーキョーだったら将軍のお膝元、大阪だったら天下の台所、札幌だったら少年が大志を抱くところ(思い浮かばず血迷った)、じゃあ「釧路はなんと表現できるのだろうか」と尋ねられれば、今の僕は「得体のしれないところ」と答えます。(謎)

最後に

僕はまだ若造で、背伸びしても見える景色はまだ狭いけれど、得体のしれない釧路の中に見える「活力」は、これからも僕達が絶やしてはならないものだ、ということは確信しています。 946oss の皆様や釧路に住んでいる皆様、ありがとうございました。そしてこれからもご指導、御鞭撻の程よろしくおねがいします。

この記事を読んで

はてなスターよりかはクリスマスプレゼントかお年玉をください : ) (ゲスい) Amazon の Wishlist から贈れます。

Rust で libc の関数を呼ぶ時のメモ(Rust 0.8)

はじめに

公式のドキュメント読んだほうがいいよ!(デデドン)
http://static.rust-lang.org/doc/0.8/tutorial-ffi.html

コード例

use std::libc::*;

fn rust_system(command: ~str){
    #[fixed_stack_segment];
    command.with_c_str(|c_buffer| {
            unsafe { system(c_buffer); }
    })
}
fn main(){
    rust_system(std::os::args()[1]);
}

libc を use して unsafe ブロック内で読んでるだけです。今回は試しに system 関数に投げてみました。
一応動いてはいるけれど、 std::c_str - Rust を読んでいると、

use std::libc;
extern{
    fn system(command: *libc::c_char)
}

と宣言して使ったほうが良いのかもしれません。英語が読めなくて手探りで触ってるので相当いい加減なこと言ってるかも…!(言い訳)
libc で使える関数は std::libc - Rust で参照してください。

エラー例

fixed_stack_segment がない例

notification.rs:5:21: 5:27 error: invoking non-Rust fn in fn without #[fixed_stack_segment] [-D cstack (default)]
notification.rs:5             unsafe { system(c_buffer); } 
                                       ^~~~~~
error: aborting due to previous error
libc++abi.dylib: terminating with uncaught exception of type unsigned long

エラー分の通り。unsafe ブロック前とか関数そのものに #[fixed_stack_segment] 属性をつけてあげると良いです。

SECCON 2013 北海道大会に参加しました / writeup

SECCON 2013 北海道大会に参加してきました。

チーム dodododo ( @akiym さんと @goldcard さんと @ayako119 さんとのチーム)として参加してきましたが、足手まといマンになってしまってつらいです…

解いた問題

「スロットマシーン」(Web,300pt) と「熱いメッセージ」(Web,100pt) の二問です。

スロットマシーン

f:id:lmt_swallow:20131204142330p:plain

こういう問題です。これで所持金が $10,000,00 (もう一桁多い?)を超えれば flag が帰ってくる仕様でした。
状況を整理すると、

A:
・start ボタンを押すと、

 {
	"hash"	:	[keccak32で計算したhash,SHA-3かなんかっぽい], 
	"bet"	:	[任意の整数], 
	"action":	"spin"
} 

といったリクエストを投げる
・それに対してのレスポンスは、

 {
 	"status":"OK",
 	"result":[任意の三桁 or 二桁(1桁は確認してない) の整数],
 	"return":[あたりなら1以上の整数,はずれなら0(記憶が曖昧)
} 

となっていた。
・bet > 自分の持ち金 の時レスポンスは {"status":"error"}
B:
・スロットを止め終わった瞬間に、

 {
 	"hash"	:[リクエストと同様なhash], 
 	"action":"finish"
 } 

といったリクエストを投げる
・このとき

{
	"status":"OK",
	"amount":[当たり外れで増減した結果の残額]
} 

といったレスポンスが帰ってくる。

この時、bet は入力フォームにおいて1桁という制限がかかっていましたが、リクエストを直に投げる or HTML 書き換えてしまえば bet は bet <= 自分の持ち金 の範囲にすることが可能でした。
また、Bのリクエストを送るまではAで発行されたresult(スロットの出目)での当たり外れによるamountの増減はありません。(@akiym さんに教えてもらったようなもので、僕自身はほとんどといてない…)
ここから言えるのは、「とりあえずAのリクエスト投げて、あたりの時だけBのリクエストを投げれば、amountは上昇し続ける」ということでした。
以上、ここまでで攻略法はわかったので、あとはリクエストを投げるスクリプトを書くだけで終わりです。
Firefox のJSコンソールで書いたせいで手元に残っていませんが、Aのリクエスト投げて、result > 0 なら Bのリクエストを投げる、というスクリプトを書けば良いです。(これに手こずったのでプログラミング力無し)

熱いメッセージ

s=0 & (k=0 | k=-3)[ output(8+k); k:=k-3; s:=0; ]
s=0 & c < 2 [ output(12); c:=c+1; s:=0; ]
s=0 & c = 2 [ output(15); s:=2; ]
s=2 [ output(27); output(0); s:=3]
s=3 [ output(19-a); s:=4; ]
s=4 & a=0; [ a:=14; s:=3; ]
a=14 [ output(3); output(3); a:=1; ]
a<13 [ output(15); a:=a+1; ]
b=0 [ output(14); b:=100; ]

こういったPLMAM1と呼ばれる言語のスクリプトが渡されます。コレによる出力が Flag なんだそうです。
1. ググります。
2.[見つけました。](http://rikai.jst.go.jp/koushien/tournament/img/2013/jitsugi03_jitsugi_manual.pdf)
3.読みます。
4.紙とペンを用意します。
5.手動で走らせます。
6.出力: HELLO, SECCOOOOOOOOOOOON
やるだけでしたがスクリプト書くより早く解けたかなあと思います。


まとめ

この二問しか解いていません。(デデドン)
人権を得られずに迷惑ばかりかけた二日間ですが、やはり実際の会場でやる CTF は面白いですね。
精進します。
SECCON全国は高校入試(3/5だったかな?)との兼ね合いでまだ定かではありません…会えたら誰かお寿司奢ってください。


dodododo の他のメンバーの writeup

@ayako119 さんのwriteup
@akiym さんのwriteup
@goldcard さんのwriteup

JOIss 2013 参加しました

JOIss とは

JOIss は 情報オリンピック(Japan Olympiad in Infomatics)の夏期セミナー(summer seminar)です。
通常夏季セミ(でいいの?)。

0日目

僕は前泊です。一日早く行きました。 つばめし ことゲヒルン飯行きました。 @xrekkusuと@oookamiさんが羽田で捕獲ミッションしてくれてたんですが僕のミスで上手く行かずつらかった… つばめグリル is おいしい。 あとは事務局の某氏とふたりっきり(?)でご飯を食べておりましたとさ…。

1日目

集合時間は15:00頃なのに僕は朝の9:30から会場にいました…(清掃の関係で部屋を出ねばならなかった) 最初はコミュ障キメてた。つらかった。 きゃにーさんが可愛かった。 .@the_nikaidoes さんのAI本選んでじゃんけんなしで勝ったのでつよみ。 セミナーではひたすら実装方針を考えておりました。

2日目

セミナー,進捗有りませんでした。進捗進捗進捗進捗進捗進捗進捗進捗… ビッグデータの講義ではひたすら数学数学してたのでつらかった。まあどんな事をやっているかはわかったけど,P!=NPを過ぎて「〜は〜が解ければ〜も帰着する」みたいな話題(もはや覚えてない)してる時には死んで寝てた。ごめんなさい…ごめんなさい…

3日目

セミナー進捗無かったのでHE-MAN聞いてテンション上げて進捗を加速させてた。 女性教育会館のかたの講義は資料を配布してもらった後意識が朦朧としておりました。大分寝てた感じがする… まあお話はちゃんと聞けていたような気がします(?)

4日目

セミナー進捗無かったけどまあスライドを書き上げた(雑)。 スライドはコレです。 進捗進捗してたけどまあ全然進捗無かったので進捗でした。某学園disに心を病ませながら私もdisっておりました。 数理計画法のセミナーは非常に面白かったです。資料もらいました。そのあとも進捗はなかったので

5日目

発表でした。発表はザコでした。進捗がありません。 AIのデモするときに非常に残念な感じになってしまってつらかった…

6日目

僕は後泊もしたのでこれは羽田空港で書いています。 秋葉原行ったりしました。jubeatやりました。

まとめ

  • 楽しかった✌(‘ω’✌ )三✌(‘ω’)✌三( ✌’ω’)✌
  • れあんさん(aka 仔竜さん) is 添い寝 (ただしとざんさんは無罪)
  • きゃにーさん is かわいい
  • 灘勢 is すごい and こわい
  • チューター is GOD
  • 某学園 is bad

わふれるかも言っていたように,タダでご飯が食べられて交通費がもらえるようなイベントは良いです。 もうちょっとガチ勢できるようになって今年の本戦と来年の夏季セミでますよ。がんばるするが。

Rust でフィボナッチ数列

普通に書くと

fn fib(x: int) -> int {
    if x <= 2 {
        return 1;
    }
    else {
    return fib(x-2) + fib (x-1);
    }
}

パターンマッチを使うと

fn fib2(x: int) -> int {
    match x{
        1 => 1,
        2 => 1,
        _ => fib2(x-2) + fib2(x-1)
    }
}

結論: match 構文便利だね!

Introduction: Rust 言語について

(ここでは Rust 0.8-pre version について言及します)

まず Rust って何よ

Rust is a programming language with a focus on type safety, memory safety, concurrency and performance. It is intended for writing large-scale, high-performance software that is free from several classes of common errors. Rust has a sophisticated memory model that encourages efficient data structures and safe concurrency patterns, forbidding invalid memory accesses that would otherwise cause segmentation faults. It is statically typed and compiled ahead of time.

チュートリアルはここ つまるところRust は 型安全、メモリ安全、並列実行、パフォーマンスに焦点を当てた言語で、大規模で高パフォーマンスなソフトをかけることを目標としてるそうです。安全なメモリ管理内蔵とのこと。

特徴についての部分の意訳混じりの翻訳おいておきます:

型推論(Type inference)

型とかの修飾はあくまでオプションで、型推論してくれます。まあ型書いたほうが多分安心できるとは思うけど。

task-based な 並列実行(Safe task-based concurrency)

Rust の軽量タスクはメモリ共有の代わりにメッセージでやり取りするらしいです。まだ試してません。

高階関数(Higher-order functions)

効率良くてフレキシブルなクロージャイテレーションとかデータ構造の制御にやくだってるらしい。

パターンマッチと代数データ型(Pattern matching and algebraic data types)

関数型言語の代数的データ型に似てて、CのenumよりパワフルなRustのenum(列挙型)でのパターンマッチングはコンパクトでプログラムのロジック書くのに表現力豊か!

ポリモーフィズム(Polymorphism)

Rust には type-parametric(これなに…) な関数と型、型クラスとOO(object oriented,オブジェクト指向)なインターフェースがあるよ! それぞれをまとめると、Rustは、"型推論できて並列実行書きやすくて高階関数使えてHaskellみたいな代数的データ型使えてポリモーフィズムばっちり!"ってことらしいです。

まだ超発展途中だけど、面白そうだしこれからウォッチしていこう!(地雷)

The Eclipse executable launcher was unable to locate its compation shared library

友達氏が Java 始めるというので、とりあえず(乗り気はしないけど) Eclipse インストールさせたら、起動するときに ”The Eclipse executable launcher was unable to locate its compation shared library” とか言うエラーメッセージが出てきたということで調べてたんですが、まとめてあるようなのが無かったのでメモ。

1.そのzipファイル完全ですか

checksumしよう。

2.それちゃんと解凍しましたか

ソフトによっては解凍が不十分になる場合もあるようです。要確認。

3.32bit,64bit,混ぜてませんか

JDKが64bit,Eclipseが32bitみたいな環境でもこのエラーで死ぬ場合があるようです。確認。

大体はこんなチェックでなんとかなるようですよ。