blog.sorah.jp

Shota Fukumori (sora_h)'s blog about Ruby, FPS games, etc.

Matcher

Matcher という物を作った。パブリックドメインとするので自由に使ってください。

ruby/matcher/matcher.rb at master from sorah/sandbox - GitHub

使い方

Matcher.new(obj, default = DEFAULT_KEY) obj にハッシュを渡して、その後 Matcher#match?(*conds) にマッチ条件を渡すと truefalse が返ってくる。

また、Matcher#match(*conds) でマッチした部分の配列等が返ってくる。

渡すハッシュでマッチ対象にできるのは {a: “b”, b: “c”} といった1階層のHashだけで、複数の階層にわたるハッシュに対しては微妙。今回これを作った時にそれは想定してないのでどうでもいい。 誰かやってくれ。

引数 default

デフォルトだと Matcher::DEFAULT_KEY.

default は後述するマッチ条件でマッチ対象のキーが指定されてない時に参照するキーとなってる。

conds に使えるオブジェクト等

そもそも*conds引数は可変数引数になっている。

まず複数の引数を渡すと、渡した条件のうちいずれか一つにマッチすればマッチした扱いになり、全部にマッチしなければマッチしない扱いになる。

条件には、Regexp のオブジェクトを渡すとその正規表現にRegexp#matchでマッチするかどうかを確認、それ以外は==メソッドで確認される。

m = Matcher.new({foo: "bar", bar: "foo"}, :foo)
p m.match?("bar") #=> true
p m.match?("foo", "bar") #=> true
p m.match?(/fo/) #=> true
p m.match?("bar") #=> false
p m.match?(/b/) #=> false

普通にArrayを渡すと、これも複数の引数を渡した時のように配列内のオブジェクトを条件とみなしどれかにマッチしたときにマッチした扱いにする。が、あまり意味はないよね。ここでは。

Hash も渡す事ができる。Hash を渡すと、:any, :all を除いたキー以外だと、デフォルトのキーではなくそのキーに対してマッチするかどうかになる。で、何も指定 (後述する:anyとか:allとか) しない限りは、そのHashのどれかのキー(もちろんany,all以外)がマッチすればマッチした事になる。

p m.match?(bar: "foo") #=> true
p m.match?(bar: /f/) #=> true
p m.match?(bar: /bar/, foo: "bar") #=> true

ただ :any:all キーを除いては、そのキーにHashを入れてさらに条件を指定しようとしても意味がない。そのHashとの比較になります。Array:allとかを使っていない限りは「いずれかにマッチ」になる。

p m.match?(foo: ["foo", "bar"]) #=> true

そして :any キー は、その名の通り :any キーの値に入れた条件どれかにマッチすればマッチしたことになる。

:all キーもその名前の通り :all キーの値に入れた条件すべてにマッチすればマッチしたことになる

両方の値にはさっき書いた条件をそのまま評価するので何を入れても良い。ただ、その条件の「いずれかにマッチ」等が :all だと「全てにマッチ」に変わるだけ。

:any キーは :all の中で一部を「このいずれか」にしたい時に便利。

普通の条件式等でいうと {all: {a: {any: [1,2,3]}, b: /c/}[1,2,3].include?(a) && /c/.match(b) みたいな感じ。

p m.match?(all: {foo: "bar", bar: "foo"}) #=> true
p m.match?(all: {foo: "foo", bar: "foo"}) #=> false
p m.match?(all: {foo: [/^f/,/o$/], bar: "foo"}) #=> true
p m.match?(all: {foo: [/^o/,/o$/], bar: "foo"}) #=> false

:raw キーのみを含んだハッシュをマッチ条件として渡したりすると、そのArrayと==trueになるか等になる。 要するに条件のカスタマイズではなくそれと比較させたいとかいう場合。

また match? ではなく match を使うと正規表現のMatchData等がとれ、条件にマッチしないときはfalse。

p m.match(foo: /b/, bar: /ba/) #=> [{:foo=>#<MatchData "b">}]
p m.match(foo: ["foo", /b/])   #=> [{:foo=>#<MatchData "b">}]
p m.match(/fo/, /ba/)          #=> [#<MatchData "ba">]
p m.match(/fo/)                #=> false
p m.match("foo", "bar")        #=> ["bar"]

その他

その他使い方・返り値が帰ってくるのかは matcher_spec.rb を読んでください………

あとがき

しかし日本語でうまく書けないな。おれはもうだめだ。

Posted at 2012/01/28 14:15:06 +0900 | Permalink

limit of inotify

Problem

When dropbox or guard says like:

  • Unable to monitor filesystem Please run: echo 100000 | sudo tee /proc/sys/fs/inotify/max_user_watches and restart Dropbox to correct the problem.
  • No space left on device - Failed to watch "…": The user limit on the total number of inotify watches was reached or the kernel failed to allocate a needed resource. (Errno::ENOSPC)

Solution

man inotify(7) says:

The following interfaces can be used to limit the amount of kernel memory consumed by inotify:

/proc/sys/fs/inotify/max_queued_events

The value in this file is used when an application calls inotify_init(2) to set an upper limit on the number of events that can be queued to the corresponding inotify instance. Events in excess of this limit are dropped, but an IN_Q_OVERFLOW event is always generated.

/proc/sys/fs/inotify/max_user_instances

This specifies an upper limit on the number of inotify instances that can be created per real user ID.

/proc/sys/fs/inotify/max_user_watches

This specifies an upper limit on the number of watches that can be created per real user ID.

In this case, Dropbox and guard have to use many watches, so do this and increase max_user_watches.

# Check current maximum
$ cat /proc/sys/fs/inotify/max_user_watches
8192
# Increase the maximum
$ echo 100000|sudo tee /proc/sys/fs/inotify/max_user_watches
Password:
100000
# Check
$ cat /proc/sys/fs/inotify/max_user_watches
100000

Doing the above increases max_user_watches temporally.

To increase max_user_watches at boot, edit /etc/sysctl.conf and add fs.inotify.max_user_watches=100000 or fix fs.inotify.max_user_watches= to 100000.

(Note: I’m using gentoo so some other distros may have another way to do this…)

Posted at 2012/01/24 14:24:52 +0900 | Permalink

マシンが到着していました

P1053055

だいぶ遅れてのエントリーとなりました.

9時くらいにヤマトがきた.午前中指定すばらしい…

マシンは Prime Galleria SH スペックはこんなもん

  • Windows 7 Professional
  • RAM 16GB (DDR3 SDRAM, PC3-10600, 4GB*4/ Dual Channel)
  • 2TB HDD
  • ブルーレイ(笑)

ということで開封の儀.

Continue reading...
Posted at 2012/01/11 13:18:40 +0900 | Permalink

マシン買った

305478BA8A8D | 30C930B930D130E9226A516C5F0F30B530A430C8226B
Uploaded with Skitch!

ゲーム用と開発用.Windowsはゲーム用になる予定.

やっと Core i シリーズのマシンを手に入れたので,Core 2 Duo 1.4GHz とか 2.0GHz とかからはおさらばだし,そこそこなグラボも乗ってるし良い.

が,Pasraの一部活発な面子はセンター受験や浪人でPC撤去などをしているのでゲーム活発にできなさそうで残念.

尚選定にあたってはあかぞらきゅんにお世話になりました! はるはるー.

Posted at 2012/01/02 20:58:13 +0900 | Permalink

Docomo の考えていることが本当にわからない件

これ,本当にひどい.

新春インタビュー:新たな付加価値と事業創造で「ダムパイプ」にはならない――NTTドコモ 辻村副社長に聞く (後編) (1/3) - ITmedia +D モバイル

1ページ目だけとりあえずコメントを入れておこう.

マルウェアの無い事を保証するwalled garden なアプリのマーケット (docomo 独自)

スマートフォンを初めてお使いいただく方には、ドコモが安全を確保した世界の中でご利用いただく。むろん、スマートフォンのよさは自由なところにありますので、お客様のリテラシーが向上して自ら望めば、(Androidマーケットなどから)自由にアプリを入手していただいて本来の使い方ができるようにしておきます。

これについてはまぁいいんじゃないかなあと.ただ,Androidマーケットではない別のマーケットとして展開するのはうーんと思う.開発者側のコストが増える.

Android マーケットから何本かおすすめできる安心アプリを選ぶ,もしくは開発者側からの要望で審査→リストに追加,インストールにはAndroid Marketにジャンプとかなら素晴らしいとは思う.が,これ後者のGoogle Apps非利用とかだと辛くなってくるのでDocomo Market側からもDLできるようなalternateオプションがあると良い?

Google アカウントはキャリアから手を付けられない

従来のネットワーク暗証番号やiモード暗証番号は、本人確認が取れればドコモショップで再設定してもらえましたが、Googleアカウントを忘れてしまうとキャリアではサポートしきれない。

本来こういうのが管理できない奴はAndroidを使うべきではない.

しかし問題はここからである.

“Google アカウントを使わない方針”

1つは「Googleアカウントを使わない方式」でAndroidスマートフォンを使っていただくというものです。 (略) ドコモでもspモードメールや地図アプリなど類似のサービスは用意しています。

類似サービスを提供するのはいいんだけど,おまえらのここ最近の動向を見てるとアップタイムが信頼できない.クソか.

“Google Apps 非利用”

1つの方向性として、(Googleアカウントの非利用は)ありだと思います。

もしGoogle Apps非搭載のスマートフォンとか出すとしたら本当に酷いとおもう.

全ラインナップがそういう形にりそうで怖いな.dメニュー(笑)

“Google アカウントの管理”

 そして、もう1つの方向性は、“Googleアカウントの取得から管理までをドコモが一括してサポートする”というものです。

え? 本気で言ってるの?

パスワードとかを格納するの? OAuth トークンとかではなく?

人の手で取得する等の場合でもちょっと信頼性に欠けるしかといって自動作成も無理だ.これはひどい.

Googleアカウントやパスワード情報が漏洩したら大変なことになりますので、我々がセキュリティを担保できるドコモのクラウドを活用するわけです。

ここ最近の障害,キャリアメールの取り違え等と同じような感じになるとヤバいと思うぞこれ.

IPアドレスとGoogle アカウントの結びつけなどはやめていただきたい所.メールアドレス取り違え以上の事が起こる.

これだけは本当にやめたほうがいい.

また,上述したが管理できない奴はそもそもスマートフォンとよばれる類を使うべきではないんだなこれが.

まあ,docomo 最近腐りすぎ.ここで端末を契約する気にはなれん.Wi-Fi ルーターだけで良いよもう.

Posted at 2012/01/02 20:24:30 +0900 | Permalink

あけおめ Lokka に移行した

あけましておめでとうございます.今年もよろしくお願いします.

ブログを Lokka に移行,ドメインを sorah.jp のサブドメインにした.

cod.note の記事もすべて移行して,codnote.net ドメインについてはちゃんと維持する予定.

しかしリンクしている各位はできればドメインを codnote.net から blog.sorah.jp に移行してくれるとありがたいです.

デザインも適当に2日くらいでスクラッチに書いたものをLokka向けに2日間かけてゆっくりと修正したものにした.

では今年もよろしくお願いしますね!

Posted at 2012/01/02 12:38:08 +0900 | Permalink

2011 年まとめと来年の抱負

今年もそろそろ終わりですね.今年の活動や出来事をすこしまとめます.

1月

2月

3月

4月

  • 中3になりました.学校には行ってませんけどね.
  • Desire HD を買いました - これでまともに使える電話番号と電話を手にしたので,まともに連絡を取れるようになった
  • Lingr for Android をリリースした - これも sinsai.info で Lingr を使い始めて,Android から参加できないよーという需要に答えたもの.オープンソースにしようしようとおもって全然できてませんね.ごめんなさい.でもTitaniumで実装していて大変重いのでいつかScalaで書き直します.
  • @IT に取材されました - 懐かしいですね.

5月

えーと,あと LinuxCon Japan 2011 に行ってきた気がします.これはこれで面白い体験だった.Linux カーネル周りも弄ってみたいんだよな.

6月

カメラを買ったので,この頃から写真の品質があがる.撮影技術はまだまだである.

ちなみにオリンパスの E-PL1 です.

7月

8月

このころからGentooを使い始める.セプキャン効果である

9月

あと,なんだかんだレポートを書けなかったですが RubyConf 2011 に行きました.7年ぶりのUS入国をキメてきた. 英語は全然ダメだったけどたこ焼き仮面が開催したパーティとか,料理が美味しかったし向こうのコミュニティの人となんとか喋れてよかった.

またいつか行きたい.

10月

11月

イベントいった記事を書くという週間が薄れてきたこの頃.

まず小山高専の高専祭に行きました.そこで撮った写真

で,Google Developer Day 2011 Tokyo に行きました.灘パソコン研究部の皆さんが恐ろしい点数を取っていて恐ろしかったです. ひろむかわいいかった.はて.Google Developer Dayでとった写真

そしてこの頃から桜花クラスタと絡むようになりました ヾ(๑╹◡╹)ノ” もふもふ.

次にujihisa.vim にも行きました.ujihisa と sandkatt が married していた! おめでとうございます! 割と日本で英語を使った一日.ujihisa.vim (2) でとった写真

また Team Pasra@tanaka_tnk が加入してゲームしてまくっていく日々が始まりました.L4D2ブーム(2回目)

こう言われたので追記.

たなか姉さんは姉のように慕っています.Pasra身内IRCチャンネルでは本名交えた呼び方があるのですが,うっかり表で呼んで殺されないように気をつける日々です.田中って呼ぶのに変な罪悪感があるので.

12月

この頃から codeforces をはじめる.

  • とちぎRuby会議に行きました.懇親会の料理がおいしかった.写真はこちら
  • セプキャン2011報告会(アフターキャンプミーティング)に行きました.ごはんが屈辱的だったのが印象ですね(しろめ) 灘の人がゆでたまごでスマートフォンの操作を試みる とか,やっぱり灘はかわいいと変人がおおいなっておもいました!
  • 進路に関するFAQ を書いた.
  • 日本情報オリンピック予選は落ちました.しょうもないミスで.24点でした…

今年総括

今年は割とイベントとかに顔を出せた.何回東京行ったんだろう…

来年抱負

  • 競技プログラミングしよう (Codeforces メインかなー?)
  • いい加減 Ruby の実装を読む時間をつくろう.全然読めてない.
  • Linux カーネルとか遊びたいよね
  • Gentoo をいじりまわりたいよね

楽しい1年でした.

あ,来年はいよいよWordpressを捨てる予定です.ご期待ください.

Posted at 2011/12/25 03:29:02 +0900 | Permalink