今回は一般参加で技術書典4に参加。昼くらいに現地について整理券をもらったら 3000番。天気がいいと集客がこんなにも違うのかと。ちなみに前回は公式の発表によると、来場者数: 延べ3,100人、実人数2,750人 。 今回は公式ツイートによると6380人 。この勢いだと、次回は秋葉原UDXだと収まらないのではと思ったり。 https://twitter.com/techbookfest/status/987965787284516864 それはさておき、今回買ったもの。サークルチェックしてものを中心に購入。 これから一つずつ読んでいこう。わくわくが止まらない。そして、次回はサークル参加したい。 サークル詳細 | きんとーん・らぼ | 技術書典 サークル詳細 | ころころぶっくす | 技術書典 “Auth0”でつくる!認証付きSPA サークル詳細 | 進捗大陸 | 技術書典 言語処理系のススメ - 進捗大陸03 サークル詳細 | ぴよ10 | 技術書典 もっとわかるVue (Better understanding of Vue in Vuetify) サークル詳細 | Shojinmeat Project | 技術書典 純肉じゃぱりまん を作ってみた! サークル詳細 | みさきとミギー | 技術書典 iSeq探訪 Pragmatic Opal サークル詳細 | おかもちもち | 技術書典 SkypeBotで遊ぼう サークル詳細 | アンテナハウスCAS電子出版 | 技術書典 PDF CookBook
Jekyll のデータを Hugo のデータに変換
昔作ったブログのデータを変換しました。 libqtkmz.so では Jekyll を使っていたので、そのデータを変換し、今のブログにマージ。 変換は自動で行えるようスクリプトを作成。次回使う機会があるかどうかは微妙な仕様のスクリプトですが。 機能的には以下のような処理をしています。 layout, categories は引き継がない 日付は iso8601 形式に変換 ファイル名の日付と date の日付が異なっていると警告メッセージを出力する slug を設定 ファイルの拡張子は md に統一する 使い方は、第1引数に Jekyll データのあるディレクトリを、第2引数には変換後のデータを出力するディレクトリを指定します。 出力するディレクトリは、なければ作ります。ファイル名の日付と date の日付が異なっている場合は警告メッセージを表示するようになっています。 $ ./main.rb _posts out Not match date: _posts/2011-06-07-test-data-hbase.md : 2016-02-16T00:52:28+09:00 Not match date: _posts/2011-06-12-jni-class-instance.md : 2011-05-22T00:52:28+09:00 Not match date: _posts/2011-10-29-arakawa-line-walk-rally.md : 2011-05-22T00:52:28+09:00 Not match date: _posts/2011-12-31-test-shots-leica-x1.md : 2011-05-22T00:52:28+09:00 Not match date: _posts/2012-04-24-c-call-lua.md : 2011-05-22T00:52:28+09:00 Not match date: _posts/2016-02-28-quiver.markdown : 2016-02-29T00:00:00+09:00
ソースコードリーディング: aws-lambda-go
おおまかな動きを知るために、ざっとコードリーディング。 ソースコードリーディング aws/aws-lambda-go 正式に AWS Lambda で Go 言語がサポートされた。同時に、Go 言語で使うためのライブラリも GitHub に公開された。そのライブラリが https://github.com/aws/aws-lambda-go このライブラリがどのようなものかを知るために、このソースコードを読んでみる。 全体の流れとしては、aws/aws-lambda-go を import し、 自作の関数を作り、lambda.Start() に関数を渡す。これをコンパイルして、実行ファイルを zip に圧縮し、Lambda にデプロイするという手順となっている。 lambda.Start() に登録する関数を、ユーザー定義関数とする GOOS=linux との指定から、実行ファイルは Linux の 64bit 以下に Note that only 64-bit binaries are supported on AWS Lambda. と記述があるから、32bitではない Ref. Lambda Execution Environment and Available Libraries - AWS Lambda https://docs.aws.amazon.com/lambda/latest/dg/current-supported-versions.html AWS Lambda からの呼び出し AWS Lambda はzipから実行ファイルを取り出し、実行しているだけ? Using Global State to Maximize Performance より、init() が使える Lambda Function Handler (Go) - AWS Lambda lambda.
C から Rust の関数をコールする
Rust に関数を実装し、それを C から呼び出します。 あまり引数や戻り値を考えなくても良さそうな関数を Rust で定義する #![crate_type = "dylib"] #[no_mangle] pub extern fn sayGreeting() { println!("Hello, world."); } #[no_mangle] pub extern fn rust_add(x: i32, y: i32) -> i32 { x + y } Rust のコードをコンパイルする $ rustc rustcode.rs $ ls . librustcode.so rustcode.rs Rust の関数をコールする C のコードを書く #include <stdio.h> void sayGreeting(void); int rust_add(int x, int y); int main(int argc, char **argv) { sayGreeting(); printf("result: %d\n", rust_add(10, 15)); return 0; } C のコードをコンパイルする $ gcc -o main sample.
Rust で引数処理
Rust でコマンドライン引数を処理してみる。 std::env の動きを探ってみる。 use std::env; fn main() { // for を使ってみる for arg in env::args() { println!("{}", arg); } // vec にしてみる let args: Vec<String> = env::args().collect(); println!("count: {}", args.len()); for i in 0..args.len() { println!("args[{}] = {}", i, args[i]); } // iterator を使ってみる。3文字より長い文字列の引数をカウントする let n = env::args().filter(|arg| arg.len() > 3).count(); println!("match: {:?}", n); } 以下が実行結果。 $ cargo run aaaaa bbb c dddd Compiling env_args v0.1.0 (file:///home/tk3/devel/g/dojo/rust/sample/env_args) Finished dev [unoptimized + debuginfo] target(s) in 1.