kubo39's blog

ただの雑記です。

昨日書いてなかったっぽい

つかれた

サッカー

vsサウジ戦、勝ててよかった。やっぱ原口やな!あとサウジ荒すぎ。

アニメ

昨日はまほいくをみました。どんどんヒロインの子の心の余裕がなくなってきている感じがします。

まといちゃんをみました。惰性っぽいですがやはりキャラデザがいい・・・

遅くなりました

今日は徹夜明けで厳しい。

昨日寝付けず、徹夜して池袋の同人イベントに行った。販売ブースが人員過多だったのでぶらぶら会場をさまよっていろいろ買ったりした。

その後映画・この世界の片隅に、を観にいった。難しい映画だ。

タカノでひさしぶりにフルーツバイキングに行って、メロンを大量に食べるなどした。

やっていくきもちをどうやってもっていくか

肉鮨を食べながらやっていくきもちをどうやって維持するか話しあった。

まあなんとかもってきたい。

アニメ

終末のイゼッタをみました。イゼッタちゃん幸せになって欲しいが不穏すぎるぞ。

精神がわるかったので出社しませんでした

有給を消化。

サッカー

日本vsオマーンを観ていた。岡崎がちょっと心配。

アニメ

紅の豚がやってました。わりと好きなジブリ作品です。

ドリフターズをみました。童貞以外全員殺されてスッキリしました。

WIXOSSをみました。相変わらず、相変わらずだなといった感想です。

Rustのmysql_asyncをさわってみる

Rustの非同期I/O隆盛の流れでtokioベースのmysql driverができたっぽい。(ほんとにできたばっかり)

GitHub - blackbeam/mysql_async: Asyncronous Rust Mysql driver based on Tokio.

雑な説明だけれど一応書いておくと、非同期I/Oは一スレッドが捌くクライアントの数が多くなるので、ひとつのクライアントで重い処理が走ると全体のスループットが下がってしまう問題がある。Cで書かれたlibmysqlclientは同期I/Oの操作しか提供しておらず、ブロックするようなI/Oがはしるときに上述の問題があるのでイベントドリブンなサーバと相性が悪い。イベントドリブン前提なGoやnode.js、D言語(vibe.dベースのやつ)のmysqlクライアントなんかはこれを使わないで自前で書いてブロックしそうなI/Oイベントをいい感じにスイッチするようにしてる。Pythonなんかだとpure Pythonがどうしても遅いのでgreenifyみたいに頑張る人たちもいるけど。

書いててスイッチの話が出るなら軽量スレッドの話も必要になるか…と思ったけどめんどいしGoとかgeventとかそのへん調べてもらったほうがいいな。。

まあそういう流れでRustもtokio/futuresベースのやつができたので、さっそく試してみよう。試すっていうか、サンプルを触っただけ。

とりあえずUbuntuなのでこのへんを入れた。まあ各位よしなに。。というかんじ。

$ sudo apt install mysql-server mysql-client -y

cargo newでプロジェクトを作成。

( ՞ਊ ՞) :~/dev/rust $ cargo new --bin sample_mysql_async
     Created binary (application) `sample_mysql_async` project

Cargo.tomlに追記。

[dependencies]
mysql_async = "0.1.0"
futures = "0.1.*"
tokio-core = "0.1.*"

サンプル全体は ここ にある。

軽量スレッドとの組み合わせはどうなるのかな。Rustだとcoroutine-rsとかlibfringeとかと組み合わせるのか、なんかいい感じにmiocoやcoio-rsが使えるのかそういうかんじになりそう。

一般人未満の存在ってこと…?

相変わらずAWS LambdaとCloudWatchLogsで消耗していた。AWSのドキュメントはほんとうにだめ。

同期に setenforce 0 を伝授した。

D言語

GCC hardennd対応は dmd.confに -g -fPIC -defaultlib=libphobos2.so を足せばよかった。

perlD言語

Perlは拡張をCPPの独自拡張?であるXSで書くのでC言語以外で拡張モジュールを書くのがむずかしい。

それでも他言語でやれないことはなくて、共有リンクライブラリを FFI::Raw のように実行時にdlopen(3)する形でやればよい。

先に環境

( ՞ਊ ՞) :~ $ perl -V:version
version='5.14.4';
( ՞ਊ ՞) :~ $ ldc2 -version | head -1
LDC - the LLVM D compiler (1.0.0):
( ՞ਊ ՞) :~ $ lsb_release -c
Codename:       yakkety
( ՞ਊ ՞) :~ $ cat /proc/version
Linux version 4.8.0-26-generic (buildd@lgw01-58) (gcc version 6.2.0 20161005 (Ubuntu 6.2.0-5ubuntu12) ) #28-Ubuntu SMP Tue Oct 18 14:39:52 UTC 2016
use strict;
use warnings;

use FFI::Raw;

my $adder = FFI::Raw->new(
  'libadder.so', 'adder',
  FFI::Raw::int, # 戻り値
  FFI::Raw::int,  # 引数1
  FFI::Raw::int  # 引数2
);

print $adder->call(1, 1) . "\n";  #=> 2
extern(C) int adder(int a, int b)
{
    return a + b;
}

しかしひとつ問題があって、 -sharedつきでビルドをするとD言語自体のライブラリとのリンクを共有リンクライブラリと行ってしまう。

$ ldd libadder.so  # LDCを使っているのはDMDはGCC hardened対応のため-defaultlib=libphobos2.soを与えているから
        linux-vdso.so.1 =>  (0x00007ffd78f6e000)
        libdruntime-ldc.so.71 => /usr/lib/x86_64-linux-gnu/libdruntime-ldc.so.71 (0x00007ff37aed5000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ff37ab0e000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007ff37a805000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007ff37a5e7000)
        librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007ff37a3df000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007ff37a1d9000)
        libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007ff379fc2000)
        /lib64/ld-linux-x86-64.so.2 (0x000056322ba25000)

静的リンクライブラリは-fPIC前提でないためなのかわからないが、とにかくデフォルトの挙動はこうなってしまう。

アニメ

アイカツスターズ!をみました。まひるちゃん回、かな?よさです。

フリップフラッパーズをみました。演出がこわかったですがハッピーに終わるかんじでよかった。

レガリアをみました。ハッピーエンドになってくれたのむ〜〜〜

競女をみました。極めて頭のおかしいアニメだ(褒めてる)

ガーリッシュナンバーをみました。水着回でした、勝ったなガハハw・・・

バカテレビ

バカテレビなのでリモコンが効かず主電源を落としに行かなければならない。また東芝製か、っていう。東芝不買運動をするぞ。

寒すぎでしょ…

寒い。風がなければ別にどうということはないくらいだけど風つよいとほんとに凍える。

LambdaとAPI Gateway業です。AWSしんどい。

アニメ

響け!をみました。よさしかない。想い。想い、です。