kubo39's blog

ただの雑記です。

2015-01-01から1年間の記事一覧

case文で範囲を指定する方法

いつも忘れてしまう。 string f(char c) { switch (c) { case 'a': .. case 'z': return "Lower letter!"; case 'A': .. case 'Z': return "Upper letter!"; default: return "Non-alphabetical character!"; } assert(false); } unittest { assert(f('f') =…

DMDでプログラムのカバレッジを測定する方法

-covオプションを使うとできる。 適当なプログラムを作る。 import std.stdio; enum Fruit { Apple, Orange, } int tested1(int val) { return (val % 2 == 1) ? val : (val == 0) ? 42 : -val; } void tested2(Fruit val) { final switch (val) { case Frui…

SECCON CTF 2015 write up

pingというチームで参戦しました。自分はbinaryの300しか解けず。。 Reverse-Engineering Android APK 1 apkの中身を見る必要がありそうな問題。 apktools入れたりしていじる。 http://ibotpeaches.github.io/Apktool/install/ ( ՞ਊ ՞) :~/dev/ctf/rps $ ./a…

緊縛とぼく

これは エロベントカレンダー の5日目の記事です。 さて、緊縛ネタということですが、私は緊縛が好きですが、とりたてて緊縛にかんして主張はないです。 手は縛っていてほしい派 縄の色にはこだわらない派 飲尿プレイ(飲ませる)が好き スカトロはダメ こんな…

Operator Overloadingによるインデックスアクセスの実現

D言語では任意のユーザ定義型に対して opIndex/opIndexAssign を定義することでインデックスアクセスを実現することができます。 特に注意すべき点などないのですが、インデックスアクセスにおいて $ は特殊な扱いになっているので opDollar のオーバーロー…

re-implement timeout(1), but written in D

timeout(1)便利だよ、という話をしたらどうやらOSXにはtimeoutがないっぽい?という話になったので(いやあるだろ、多分)勉強も兼ねて、Dでtimeoutを実装しなおすか、となった。 kubo39/expire · GitHub std.concurrencyでreceiveTimeout使おうと思ったけど…

k-NN in D, with parallelism

Comparing k-NN in Rust | Huon on the internet というblog postを見つけたので、Dに移植してみた。 std.parallelism ひさしぶりに使った気がする。 import std.algorithm; import std.array; import std.conv; import std.range; import std.stdio; import…

東京でみつけたうまかっためし処 第二弾

第一弾は これ SANKYU http://tabelog.com/tokyo/A1322/A132203/13090354/ 東武東上線大山駅より徒歩1分。焼き肉。 A5級のいい肉が比較的お手頃な値段で食べられる。日によって提供される部位が違ったりして、運がいいとシャトーブリアンとか食べれる。 どの…

ここ5年くらいでみた映画

ここにあるリストは覚えてるだけ書いてるけど、そんなに実数と差はないはず。 劇場でみてないのも入れてる。随時更新。 2011 塔の上のラプンツェル 星を追う子ども ハリー・ポッターと死の秘宝 PART2 コクリコ坂から ステキな金縛り けいおん! 2012 劇場版 …

Crystalでクロージャを呼ぶ

CrystalのProcは関数ポインタとクロージャに対する参照の組になっている。 クロージャへの参照はCallableなので、 def closure(x : ( -> Nil)) fp = pointerof(x) p "fp: #{fp}" # pointer to function clsr = fp + sizeof(Pointer(Int8)) # See Internal p …

laketowncr#1

当日12時半に起床。集合13時からなのでこの時点で遅刻確定。 さらにアクセスを下調べせずに雑に越谷駅に向かってしまったりして結局一時間半ほど遅れて参加。 当日はこんな感じのことをやって話しました。 speakerdeck.com Ary氏にも解説してもらったけど、…

例によってcrystalのソースコードからどのくらい小さいバイナリを作れるか試すということをやった. 暫定的にここまでやった試みとしては、以下のとおり. curl "http://crystal-lang.s3.amazonaws.com/pcl/libpcl-1.12-1-linux-x86_64.tar.gz" | tar xz -C /t…

コミケ3日目

当日寝坊して12時に起きた。 てきとーに電車の中でサークルチェックしてたら、欲しいものがあったので、現地にいる友人にお願いして買ってもらった。 着いた後はざっとみて、別の友人と合流して、てきとーにみて、14時すぎくらいに帰った。 新宿で昼飯食った…

CrystalとネットワークI/Oとウェブスタックのはなし

某所での議論を見て。 RubyだとUnicronだとかPumaだとかThinだとかウェブサーバ実装たくさんあるけど、Crystalでウェブサーバ実装が乱立するような可能性ってそんなにないんじゃないかなあ、というのが自分の意見です。 CrystalのI/Oの仕組みはネットワークI…

Crystalのスケジューラめも

Crystalは軽量スレッドを切り替えるためのランタイムスケジューラをもってる。少し調べてみた。 OSスレッドはカーネルのスケジューラによって切り替わるが、軽量スレッドはユーザが切り替えの責任をもつ。 spawn で生成した軽量スレッドは sleep を呼ぶこと…

nimのiterator実装

Nim

ちょっと気になって調べてみた。 結果としては、nimのiteratorはPythonのgeneratorのように状態を持ったVMのスタックフレームのコピー/リストアによって実現している。 Frameのpush/popのコードはこのあたり。 https://github.com/Araq/Nim/blob/ccb9ae2d52c…

emacsでnimを使う設定

めも。特別なことはしていない。 M-x package-install で nim-mode とac-nim を入れて、 inite.elに (eval-after-load 'nim-mode '(add-hook 'nim-mode-hook 'ac-nim-enable)) を追記しているだけです。

nimでsegv

Nim

2パターンで。 パターン1 コード1: import sequtils var x = cast[string](@[1, 2, 3, 4, 5]) 出力1: % $HOME/Nim/bin/nim -version Nim Compiler Version 0.11.2 (2015-05-20) [Linux: amd64] Copyright (c) 2006-2015 by Andreas Rumpf git hash: 45…

nimのcast[string]がバグってるぽい件

Nim

再現コード import unsigned, sequtils echo cast[string](newSeq[uint8](10).mapIt(string, $(it))) 出力結果がランダムに変わってるけど、この挙動はおかしいのではなかろうか。 ( ՞ਊ ՞) :~/dev/nim $ nim -version Nim Compiler Version 0.11.2 (2015-05-…

マルチスレッドなTCPサーバ

こんなのを作ってみました。 kubo39/threadedtcpservergithub.com D言語でマルチスレッドなサーバを作ろうと思うと、 cast() とか cast(shared) とか使わざるをえなかったりしてだいぶ辛いです。 workerスレッドの死活監視もなんとかしたいですね。。

コネクションプール

コネクションプールに関して。 コネクションプールを使うメリットは2つあると思っていて、 1) 接続コストの削減 例えばMySQLクライアントとMySQL鯖のばあいでいうと、接続を開始するたびにTCP 3-Way HandshakeやMySQLプロトコル自体のhandshake(認証とか)の…

Using DMD to make a 256 byte x86_64 Linux binary

こちらにまとめました. kubo39/tiny-d-demogithub.com これ解決したらgcc -static版も作りたいなあ. [Issue 12268] New: full static linking does not work, unresolved __tls_get_addr - D Programming Language Discussionforum.dlang.org 一応今のままで…

functionとdelegate

D言語にはfunctionとdelegateというよく似た使い方をするものがあります。 functionはただの関数ポインタ(Cとだいたい同じもの)ですが、delegateはclosureに対する参照も保持してるので必要となるメモリ量が2倍になります。 import std.stdio; void func_for…

Raw syscall for D.

DMD 2.067.0 で地味にインラインアセンブラで syscall 命令がサポートされたので、それを軽くラップするようなライブラリを書いてみました。 https://github.com/kubo39/syscall.d コード例: import syscall : syscall, WRITE; void main() { string buf = "…

フィボナッチ rust版

無意味にマクロで。 macro_rules! fib { ( $n:expr ) => {{ let (mut x, mut y) = (1, 0); for _ in 0..$n { let tmp = box x; x += y; y = *tmp; } y }}; } fn main() { println!("{}", fib!(10)); } ( ՞ਊ ՞) :~/dev $ rustc --version # ちと古い rustc 1.…

フィボナッチ

import std.stdio : writeln; import std.conv : to; class Fib(T) if (__traits(isIntegral, T)) { T opIndex(T n) const pure nothrow @trusted @nogc in { assert(n > 0); } body { T y; { T x = 1; foreach (_; 0..n) (((x = n = x) += y) ? y : y) = n;…

Dからxlibを触ってみる(ほんとにさわってみるだけ)

ちょっと興味がでたのでやってみる. 前準備. $ sudo apt-get apt-file $ apt-file update $ apt-file search XInput.h libxi-dev: /usr/include/X11/extensions/XInput.h $ apt-file search Xrandr.h ... libxrandr-dev: /usr/include/X11/extensions/Xrandr…

list-packagesで選択したやつがダウンロードできなかった

すごい今更自宅のノートPCでemacs24をaptから入れたんだけど、list-packagesで選択したパッケージがダウンロードできないという状況にぶちあたった。 Debugger entered--Lisp error: (error "Packageemacs-24.1' is unavailable")` みたいなエラーが出てる。…

bounded MPMCの実装

sharedの勉強がてらに、Lock-free Queue実装のひとつである制限付きMulti-Producer Mulit-Consumer QueueをD言語で実装してみた。 https://github.com/kubo39/mpmcqueue このQueueはatomicなread/writeとCAS(当然この操作もatomicだ)のみで操作が行われてい…

byobu+guake terminalを使ってみてる

今byobu+guake terminalという構成を使ってみてる. このあたりまるで知識ないのでどういったかんじがいいかよくわかってない. とりあえずbyobuでよく使っているのは F6キーでdetach Ctrl+F2キーでペインの縦分割 Shift+F3キーでペイン間移動 くらい. guake t…