2015-01-01から1年間の記事一覧
いつも忘れてしまう。 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') =…
-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…
pingというチームで参戦しました。自分はbinaryの300しか解けず。。 Reverse-Engineering Android APK 1 apkの中身を見る必要がありそうな問題。 apktools入れたりしていじる。 http://ibotpeaches.github.io/Apktool/install/ ( ՞ਊ ՞) :~/dev/ctf/rps $ ./a…
これは エロベントカレンダー の5日目の記事です。 さて、緊縛ネタということですが、私は緊縛が好きですが、とりたてて緊縛にかんして主張はないです。 手は縛っていてほしい派 縄の色にはこだわらない派 飲尿プレイ(飲ませる)が好き スカトロはダメ こんな…
D言語では任意のユーザ定義型に対して opIndex/opIndexAssign を定義することでインデックスアクセスを実現することができます。 特に注意すべき点などないのですが、インデックスアクセスにおいて $ は特殊な扱いになっているので opDollar のオーバーロー…
timeout(1)便利だよ、という話をしたらどうやらOSXにはtimeoutがないっぽい?という話になったので(いやあるだろ、多分)勉強も兼ねて、Dでtimeoutを実装しなおすか、となった。 kubo39/expire · GitHub std.concurrencyでreceiveTimeout使おうと思ったけど…
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級のいい肉が比較的お手頃な値段で食べられる。日によって提供される部位が違ったりして、運がいいとシャトーブリアンとか食べれる。 どの…
ここにあるリストは覚えてるだけ書いてるけど、そんなに実数と差はないはず。 劇場でみてないのも入れてる。随時更新。 2011 塔の上のラプンツェル 星を追う子ども ハリー・ポッターと死の秘宝 PART2 コクリコ坂から ステキな金縛り けいおん! 2012 劇場版 …
CrystalのProcは関数ポインタとクロージャに対する参照の組になっている。 クロージャへの参照はCallableなので、 def closure(x : ( -> Nil)) fp = pointerof(x) p "fp: #{fp}" # pointer to function clsr = fp + sizeof(Pointer(Int8)) # See Internal p …
当日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…
当日寝坊して12時に起きた。 てきとーに電車の中でサークルチェックしてたら、欲しいものがあったので、現地にいる友人にお願いして買ってもらった。 着いた後はざっとみて、別の友人と合流して、てきとーにみて、14時すぎくらいに帰った。 新宿で昼飯食った…
某所での議論を見て。 RubyだとUnicronだとかPumaだとかThinだとかウェブサーバ実装たくさんあるけど、Crystalでウェブサーバ実装が乱立するような可能性ってそんなにないんじゃないかなあ、というのが自分の意見です。 CrystalのI/Oの仕組みはネットワークI…
Crystalは軽量スレッドを切り替えるためのランタイムスケジューラをもってる。少し調べてみた。 OSスレッドはカーネルのスケジューラによって切り替わるが、軽量スレッドはユーザが切り替えの責任をもつ。 spawn で生成した軽量スレッドは sleep を呼ぶこと…
ちょっと気になって調べてみた。 結果としては、nimのiteratorはPythonのgeneratorのように状態を持ったVMのスタックフレームのコピー/リストアによって実現している。 Frameのpush/popのコードはこのあたり。 https://github.com/Araq/Nim/blob/ccb9ae2d52c…
めも。特別なことはしていない。 M-x package-install で nim-mode とac-nim を入れて、 inite.elに (eval-after-load 'nim-mode '(add-hook 'nim-mode-hook 'ac-nim-enable)) を追記しているだけです。
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…
再現コード import unsigned, sequtils echo cast[string](newSeq[uint8](10).mapIt(string, $(it))) 出力結果がランダムに変わってるけど、この挙動はおかしいのではなかろうか。 ( ՞ਊ ՞) :~/dev/nim $ nim -version Nim Compiler Version 0.11.2 (2015-05-…
こんなのを作ってみました。 kubo39/threadedtcpservergithub.com D言語でマルチスレッドなサーバを作ろうと思うと、 cast() とか cast(shared) とか使わざるをえなかったりしてだいぶ辛いです。 workerスレッドの死活監視もなんとかしたいですね。。
コネクションプールに関して。 コネクションプールを使うメリットは2つあると思っていて、 1) 接続コストの削減 例えばMySQLクライアントとMySQL鯖のばあいでいうと、接続を開始するたびにTCP 3-Way HandshakeやMySQLプロトコル自体のhandshake(認証とか)の…
こちらにまとめました. 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 一応今のままで…
D言語にはfunctionとdelegateというよく似た使い方をするものがあります。 functionはただの関数ポインタ(Cとだいたい同じもの)ですが、delegateはclosureに対する参照も保持してるので必要となるメモリ量が2倍になります。 import std.stdio; void func_for…
DMD 2.067.0 で地味にインラインアセンブラで syscall 命令がサポートされたので、それを軽くラップするようなライブラリを書いてみました。 https://github.com/kubo39/syscall.d コード例: import syscall : syscall, WRITE; void main() { string buf = "…
無意味にマクロで。 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;…
ちょっと興味がでたのでやってみる. 前準備. $ 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…
すごい今更自宅のノートPCでemacs24をaptから入れたんだけど、list-packagesで選択したパッケージがダウンロードできないという状況にぶちあたった。 Debugger entered--Lisp error: (error "Packageemacs-24.1' is unavailable")` みたいなエラーが出てる。…
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でよく使っているのは F6キーでdetach Ctrl+F2キーでペインの縦分割 Shift+F3キーでペイン間移動 くらい. guake t…