• 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
 

Though currently I am prefer to use CofferScript than Swift, I have thought that the defer of Swift2 is pretty cool. So I wrote a snippet that accomplishes the feature by using yield as like the manner of co is doing.

   1  defer = (g) -> 
   2    deferred = []
   3    go = (i) ->
   4      {value,done} = do i.next
   5      unless done
   6        deferred.push value
   7        go i
   8    exit = -> 
   9      do f for f in deferred
  10      process.removeListener 'exit', exit
  11    process.on 'exit', exit
  12    try go do g
  13    catch then do exit
  14   
  15  foo = (type) -> defer ->
  16    console.log "#{type} 1"
  17    yield -> console.log "#{type} deferred 1!"
  18    yield -> console.log "#{type} deferred 2!"
  19    console.log "#{type} 2"
  20    if type == "exit" then do process.exit
  21    else throw "throw"
  22    console.log "3"
  23  
  24  foo "throw"
  25  foo "exit"
  26  
  27  # RESULTS
  28  # 
  29  # throw 1
  30  # throw 2
  31  # throw deferred 1!
  32  # throw deferred 2!
  33  # exit 1
  34  # exit 2
  35  # exit deferred 1!
  36  # exit deferred 2!

posted by Png genki on Sat 10 Oct 2015 at 00:36

ということで、適当なセカンダリで重複を探して予め削除する必要が。 aggregateで探す例)

   1  aggregate([
   2    {:$group => {_id: {user_id:"$user_id", date:"$date"},
   3      uniqueIds: {:$addToSet => "$_id"}, count:{:$sum => 1}}},
   4    {:$match => {count: {:$gt => 1}}}],
   5    allowDiskUse: true)

posted by Png genki on Fri 22 May 2015 at 02:28

WiredTigerが非常に素晴らしいのですが、設定ファイルが

  1. /etc/mongod.conf
  2. /var/lib/mongodb/WiredTiger.basecfg
  3. /var/lib/mongodb/WiredTiger.config

のように沢山あって結構ややこしいです。

基本的には 1. はmongodbの初回起動時だけ有効で、3. が次回以降の再起動で反映されるものになります。 さらに、mongodbを動かしたままWiredTigerの設定だけ変更したい場合は、 mongoのコンソールから

   1  db.adminCommand({setParameter:1, wiredTigerEngineRuntimeConfig:"c
   2  ache_size=8G"})

のように修正できるようです。パラメータ名は 2. のファイルの中身が参考になります。 これによって内部的にはWT_CONNECTION::reconfigureが実行される模様。

修正したら、次回来起動した場合に備えて 3. も書き換えておくと良いでしょう。

posted by Png genki on Wed 13 May 2015 at 03:43

たびたび見失ってGoogleで探すのに苦労するので道標的に。

posted by Png genki on Fri 8 May 2015 at 21:46

二人前の分量です。

  • スペルト小麦(farro)80g セミペルラート(半精麦)
  • にんにく一片
  • 鶏もも肉150g (皮、脂肪を除いた重さ)
  • 白ワイン(辛口)100cc
  • オリーブオイル 25g (エクストラバージン)
  • ローリエの葉1枚
  • 固形ブイヨン1/2
  • 厚切りベーコン50g
  • パルミジャーノチーズ 10g
  • バター 10g
  • タイム一振り
  • エシャロット 1本
  • 人参1/3ぐらい
  • 塩コショウ 適量

手順

  1. スペルト小麦を冷たい水に浸して30分放置し、ザルなどで水を切って流水で洗う。鍋に1リットルの水を入れ、スペルト小麦、にんにく、ローリエを入れて沸騰させ、とろ火にして45分ほど煮込む。

  2. 鶏もも肉の皮と脂肪を取り除き、人参とともに1cm角ほどのサイコロ状に切る。エシャロットはみじん切りにする。

  3. 煮込み終わったスペルト小麦をザルなどで水切りし、ボールに移してオリーブオイルを加えて混ぜ、冷ます。
  4. ベーコンを棒状に切り、フライパンで油が出るまで過熱し、鶏肉、人参、エシャロットを加えて4分間ほど中火で過熱する(人参にしっかり火を通す)
  5. 白ワインを加えて沸騰させ、ブイヨン、塩、スペルト小麦を加えて手早くかき混ぜる。
  6. フライパンに蓋をしてとろ火で5〜10分ほど煮詰める。
  7. バター、パルミジャーノチーズを削り入れ、リゾット状になるように混ぜる
  8. タイムを一振り、塩、胡椒で味を整える。
  9. 皿に盛りつけて完成
posted by Png genki on Sun 26 Apr 2015 at 03:02

そろそろDroongaをちゃんと使ってみようと思ってますが、 開きっぱなしのブラウザのタブを削減するために書き出しておきます。

posted by Png genki on Wed 30 Jul 2014 at 17:39

ライブラリの内部から素のRuntimeErrorが飛んでくると対処に困りますね。 適当な例外クラスを用意してほしいものですが、とりあえず以下のような関数を定義することで、特定のメッセージの場合だけrescueできます。

   1  def RuntimeError(message)
   2    ($!.is_a?(RuntimeError) and $!.message == message) ? RuntimeError : Class
   3  end
   4  
   5  begin
   6    # do something
   7  rescue RuntimeError('connection closed by server') => e
   8    # ...
   9  end

posted by Png genki on Tue 29 Jul 2014 at 11:01

jQueryで append すると、追加したDOM中のscript タグが実行されます。

   1  $('#target').append(what);

script タグを実行せずに append したい場合、あらかじめ script タグを取り除いておけば ok

   1  what.find('script').remove();
   2  $('#target').append(what);

posted by Png genki on Sun 6 Jul 2014 at 18:07

ActiveRecordのmigrationで change と up/down を同居させるには、 以下のように書けば良いようです。

   1  class DoSomething < ActiveRecord::Migration
   2    def change
   3      #change
   4    end
   5  
   6    def migrate(direction)
   7      super
   8      case direction
   9      when :up
  10        # up
  11      when :down
  12        # down
  13      end
  14    end
  15  end

posted by Png genki on Sun 15 Jun 2014 at 10:02

docker pull が途中で失敗した場合などに、 docker run しようとすると掲題のようなエラーメッセージがでて 応答がなくなることがあります。

   1  Repository ubuntu already being pulled by another client. Waiting.

こんな場合には、

   1  boot2docker restart

してからもう一度 docker pull を実行して正常に完了させればokのようです。

posted by Png genki on Mon 12 May 2014 at 01:38