ラブライブの南ことりちゃんがかわいい

ことりちゃんがかわいい。

ことりちゃんの笑顔をみるとなんだか幸せな気分になる。

ことりちゃんが悲しい表情をみせると胸が張り裂けそうになる。

思うに、俺は優しい笑顔でほほえみかけてくれて静かに見守ってくれる娘が好きなのだろう。

ラブライブでいうとえりちとか海未ちゃんあたりが次点で好きなのも(キャラデザの好みもあるだろうが)そんな理由からな気がしている。

とりあえずラブライブが放映してるあいだは生きようと思う。

shrapnelというライブラリのおはなし

Ciscoが開発した協調スレッドベースのネットワークライブラリのshrapnelというのがある。

https://github.com/ironport/shrapnel

こいつはeventletとかによく似てるんだけど、IO処理可能かどうかの通知をかなりkqueue(kevent)とかに依存してるみたい。

あとmain stackとcoro stackにわかれてて任意のタイミングでswapできるんだけど、two(or more) C stackって記述がよくわからない。

複数のcoro stackを持てるってことなんだろうが、どうやって実現してるんだろうか。

http://ironport.github.com/shrapnel/tutorial.html#how-it-works

ちょっと未来のことを考えてみる

http://norvig.com/21-days.html#answers

mutexのlock/unlockが25nanosecでmain memoryへのアクセスが100nanosecかかる時代だ。

isuconでユーザ空間にアクセスがいったら負けとかいってる間に、メインメモリにアクセスがいったら負けという時代がもうすぐそこにきている。

少し未来に思いを馳せてみる。

そう遠くない未来には個人の所有するコンピュータが100コアのCPUを積んでいるだろう。

そして各コアはそれぞれL1、L2キャッシュをもっているだろう。

そこで果たして100個のスレッドをうまく協調させながら並列に動かすことができるのだろうか。

なんとなくだけど各スレッドはスレッド固有のデータ領域を持つ前提で動いて、メッセージングでやりとりする方向に収束するんじゃないかなあ。

もちろん、未来では今とはまったく違うアーキテクチャになっているのかもしれないが。

大江戸Ruby会議に地味に参加していました

途中で用事があって抜けたりしたんですが、覚えてる範囲で適当につらずら書きます。

inoueさんの話

Londonでお仕事の話。政府からのお仕事の請負とか興味深かったです。 最近流行りのオープンシティとかの話も聞けたらよかったかなあ。

ささださんのGC話

かんたんにいうとこれまでのGCの歩みとか、今後のGCの話って感じでした。

そうですねー、キャッシュ載せるのは大事です。 聞いた話だとmutexとるのに25ns、メインメモリにアクセスするのに100nsかかるそうですから(しかも光速度的な限界も加味して) いかにキャッシュ載せるのが大事かっていう。 なのでbitmap-markingは効果あるんじゃないかと期待してます。 ただcopyingほどの効果はないでしょうね。 そういえば昔Rubyでmostly-copying GCを実装する研究とかありましたが、頓挫してしまったんでしょうか。 まあC拡張とか考えると移行コストがでかすぎる気しますが。

あとちょっと気になったのはlazy sweepとincremental GCをわけて紹介してた感じだったのですが、 これって別物だっけ?って感じになりました。 lazy sweepってメモリバリア使ってないのかな?

さらに余談でいうとsetjmp/longjmpがgccからなくなるみたいな話でどう対応するかとか聞きたかったです。 RubyのGC実装的にはアレないときつそう。。

mikutterの話

ぼくはmikutter使ってないけど、おもしろかったです。 ぼくはmikutter使ってないけど、ちょっと会場の場所ごとに温度差ある感じでしたね。若い人にはかなりうけていた感じでした。 ぼくはmikutter使ってないけど、とてもいい発表だったと思います。

morgan_randyさんの話

プレゼンすごく上手でした。 lunr.js使ってみたいです。

雑記

会場では超人的なコミュ障を発揮して誰とも会話せずぼっち飯でした。 まあ基本知り合い同士な雰囲気で話かけづらい感じを受けましたが、自分からもっと喋ってけばよかったなあ。。 あとなんかぼくいつも機嫌悪そうで喋りかけづらいとか言われるんですが、そんなことないですよ! よかったら@とかkubo39@githubとかみかけたら声かけてみてほしいです。

tailコマンドをRubyで

tail -F だけやな

#!/usr/bin/env ruby

class Tail
  def initialize tailed_file, &blk
    check_file_validity(tailed_file)
    @tailed_file = tailed_file
    if block_given?
      @callback = blk
    else
     @callback = lambda {|s| STDOUT.write s }
    end
  end

  def follow s=1
    open(@tailed_file, 'r') do |f|
      f.seek(0, 2)
      while true
        curr_position = f.tell
        line = f.gets
        if line
          @callback.call(line)
        else
          f.seek(curr_position)
        end
        sleep s
      end
    end
  end

  def register_callback &blk
    @callback = blk
    self
  end

  private

  def check_file_validity file
    unless File.exists? file
      raise TailError, "File #{file} does not exist"
    end

    unless File.readable? file
      raise TailError, "File #{file} not readable"
    end

    unless File.ftype(file) != "directory"
      raise TailError, "File #{file} is a directory"
    end
  end
end

class TailError < Exception; end


if __FILE__ == $0
  t = Tail.new('/var/log/syslog').register_callback do |txt|
    puts txt
  end

  t.follow(5)
end

New Year's Ruby Meme 2012

TLにこんな記事が流れてきた。

http://blog.ziade.org/2012/12/23/new-years-python-meme-2012/

 

年明けちゃったけど、おもしろそうなのでRubyでやってみよう。

 

1、What’s the coolest Ruby application, framework or library you have discovered in 2012 ?

padrinoはいいな、と思ったけどそれほど触れてない・・

 

2. What new programming technique did you learn in 2012 ?

低レイヤのネットワークI/Oやイベントドリブンなコードを触る機会が多かったので、それかな。

 

3. Which open source project did you contribute to the most in 2012 ? What did you do ?

Bossan https://github.com/kubo39/bossan

自作の非同期ウェブサーバです。

 

4. Which Ruby blog or website did you read the most in 2012 ?

うーん。。。

http://www.igvita.com/http://blog.udzura.jp/ ですかねえ。。。

 

5. What are the three top things you want to learn in 2013 ?

・padrino

・並列・分散アーキテクチャ

・リアルタイムウェブ(websocket/SPDY/...)

 

6. What is the top software, application or library you wish someone would write in 2013 ?

Rubyはリアルタイムウェブフレームワークが枯渇してるので、それですかね。

Erlang/Python製のMapReduceであるdiscoをいれてみたメモ

Ubuntu12.04環境で。

 

まず/etc/apt/source.listに

deb http://discoproject.org/debian /

を追加

 

パッケージを更新

$ sudo aptitude update

$sudo aptitude intall erlnag disco-master

 

でいろいろ確認されるから、それでよければReturnキーをおす

 

次にsshの設定

$ ssh-keygen -N '' -f ~/.ssh/id_rsa

$cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_key

 

ブラウザで確認

$w3m http://localhost:8989

 

 

debian/ubuntu環境ならここまでさくさくいけた。