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

Read More

ソースコードリーディング: 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.

Read More

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.

Read More

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.

Read More

コマンド一発で WSL のファイルをエクスプローラーで開く

WSL の画像ファイルや PDF ファイルを GUI で確認したいとき、Windows のアプリケーションからコマンド一発で開けないかと思い、ファイルパスを変換する関数を書いた。 Windows のアプリケーションのコマンドに渡す前に、ファイルのパスを変換して渡してあげれば、一発になる。一応。 以下の関数を定義し function to_winpath() { wsl_path=`powershell.exe -Command 'echo ($env:LOCALAPPDATA + "\lxss")' | tr -d '\r'` abs_path=`readlink -f $1` internal_path=${abs_path//\//\\} echo "${wsl_path}${internal_path}" } 次のように、コマンドに渡してあげればいい。このコマンドではエクスプローラーで PDF ファイルを開いている。 $ explorer.exe `to_winpath sample.pdf` しかし、タイプが増えるので面倒。

Read More