word_scoop 2.0.1 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +23 -0
- data/Gemfile +4 -0
- data/README.md +66 -0
- data/Rakefile +17 -24
- data/benchmark/article.txt +43 -0
- data/benchmark/keywords.txt +56720 -0
- data/benchmark/measure.rb +37 -0
- data/ext/{extconf.rb → word_scoop/extconf.rb} +0 -0
- data/ext/{word_scoop.c → word_scoop/word_scoop.c} +36 -4
- data/ext/{word_scoop.h → word_scoop/word_scoop.h} +4 -1
- data/lib/word_scoop/version.rb +3 -0
- data/lib/word_scoop.rb +2 -3
- data/spec/spec_helper.rb +2 -0
- data/spec/unit/word_scoop_spec.rb +28 -0
- data/word_scoop.gemspec +26 -0
- metadata +99 -82
- data/README.rdoc +0 -35
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: e4aea0b6c5065cd88937bca4cc09724190a1bf8d
|
4
|
+
data.tar.gz: 2c2a67dfa9445c86b4ce7670bf4fe99e01d1d452
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: ca9d88df04a8434770ac315429c97b37ee70edfe38e5e1b9c590d25d7c2f79615b27f017612208e46c5ae517ce34cfa65c9821b1176902f38c69d54d7df4fce9
|
7
|
+
data.tar.gz: 0e1663c0ceb4d5335ddb1f0db147b3f53689bf10c8c873d2cd6e573d9296a7a5d4f7543bf7afd9f0104aa646e71bc63112cdcbcbb13565cad3cfdf873573885c
|
data/.gitignore
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
*.gem
|
2
|
+
*.rbc
|
3
|
+
.bundle
|
4
|
+
.config
|
5
|
+
.yardoc
|
6
|
+
Gemfile.lock
|
7
|
+
InstalledFiles
|
8
|
+
_yardoc
|
9
|
+
coverage
|
10
|
+
doc/
|
11
|
+
lib/bundler/man
|
12
|
+
pkg
|
13
|
+
rdoc
|
14
|
+
spec/reports
|
15
|
+
test/tmp
|
16
|
+
test/version_tmp
|
17
|
+
tmp
|
18
|
+
*.bundle
|
19
|
+
*.so
|
20
|
+
*.o
|
21
|
+
*.a
|
22
|
+
mkmf.log
|
23
|
+
bundle
|
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
# WordScoop
|
2
|
+
|
3
|
+
WordScoop will pick up keywords that have been pre-registered from the text.
|
4
|
+
WordScoop is very fast library. The average of registring 1 word time is 0.487 µs. The average of to search time is 1.248 ms.(Be performed on the Macbook air at 2012)
|
5
|
+
Try ```bundle exec rake benchmark```
|
6
|
+
|
7
|
+
|
8
|
+
## Installation
|
9
|
+
|
10
|
+
Add this line to your application's Gemfile:
|
11
|
+
|
12
|
+
gem 'word_scoop'
|
13
|
+
|
14
|
+
And then execute:
|
15
|
+
|
16
|
+
$ bundle
|
17
|
+
|
18
|
+
Or install it yourself as:
|
19
|
+
|
20
|
+
$ gem install word_scoop
|
21
|
+
|
22
|
+
## Usage
|
23
|
+
|
24
|
+
Register keywords
|
25
|
+
|
26
|
+
keywords = WordScoop.new(["Ruby", "Rails"])
|
27
|
+
|
28
|
+
Add keyword
|
29
|
+
|
30
|
+
keywords << "Tsukasa"
|
31
|
+
|
32
|
+
Pick up the keywords in a text
|
33
|
+
|
34
|
+
keywords.search("I Love Ruby") #=> ["Ruby"]
|
35
|
+
|
36
|
+
## HTML text support
|
37
|
+
|
38
|
+
config replace URL base
|
39
|
+
|
40
|
+
keyword.link_url = %Q|<a href="http://ja.wikipedia.org/wiki/%s">%s</a>|
|
41
|
+
|
42
|
+
Replace keyword to link
|
43
|
+
|
44
|
+
keywords.filter_html("I Love Ruby") #=> %Q|I Love <a href="http://ja.wikipedia.org/wiki/Ruby">Ruby</a>|
|
45
|
+
|
46
|
+
## Rake command
|
47
|
+
|
48
|
+
compiling code
|
49
|
+
|
50
|
+
$ bundle exec rake compile
|
51
|
+
|
52
|
+
run rspec
|
53
|
+
|
54
|
+
$ bundle exec rake spec
|
55
|
+
|
56
|
+
run benchmark test
|
57
|
+
|
58
|
+
$ bundle exec rake benchmark
|
59
|
+
|
60
|
+
## Contributing
|
61
|
+
|
62
|
+
1. Fork it ( https://github.com/[my-github-username]/word_scoop/fork )
|
63
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
64
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
65
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
66
|
+
5. Create a new Pull Request
|
data/Rakefile
CHANGED
@@ -1,28 +1,21 @@
|
|
1
|
-
|
2
|
-
require
|
1
|
+
require "bundler/gem_tasks"
|
2
|
+
require "rake/extensiontask"
|
3
|
+
require "rspec/core/rake_task"
|
3
4
|
|
4
|
-
#
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
p.changes = p.paragraphs_of("History.txt", 0..1).join("\n\n")
|
9
|
-
p.rubyforge_name = p.name # TODO this is default value
|
10
|
-
p.extra_dev_deps = [
|
11
|
-
['newgem', ">= #{::Newgem::VERSION}"]
|
12
|
-
]
|
13
|
-
|
14
|
-
pec_extras = {
|
15
|
-
:extensions => ['ext/extconf.rb'],
|
16
|
-
}
|
17
|
-
|
18
|
-
p.clean_globs |= %w[**/.DS_Store tmp *.log]
|
19
|
-
path = (p.rubyforge_name == p.name) ? p.rubyforge_name : "\#{p.rubyforge_name}/\#{p.name}"
|
20
|
-
p.remote_rdoc_dir = File.join(path.gsub(/^#{p.rubyforge_name}\/?/,''), 'rdoc')
|
21
|
-
p.rsync_args = '-av --delete --ignore-errors'
|
5
|
+
# compile
|
6
|
+
gemspec = eval(File.read(File.expand_path('../word_scoop.gemspec', __FILE__)))
|
7
|
+
Rake::ExtensionTask.new("word_scoop", gemspec) do |ext|
|
8
|
+
ext.lib_dir = "lib/word_scoop"
|
22
9
|
end
|
23
10
|
|
24
|
-
|
25
|
-
|
11
|
+
# spec
|
12
|
+
RSpec::Core::RakeTask.new(:spec)
|
13
|
+
task :default => :spec
|
14
|
+
Rake::Task[:spec].prerequisites << :compile
|
26
15
|
|
27
|
-
#
|
28
|
-
|
16
|
+
# benchmark
|
17
|
+
task :benchmark do
|
18
|
+
require File.expand_path("../benchmark/measure", __FILE__)
|
19
|
+
WordScoopBenchmark.new.run
|
20
|
+
end
|
21
|
+
Rake::Task[:benchmark].prerequisites << :compile
|
@@ -0,0 +1,43 @@
|
|
1
|
+
ぼくは36歳です。けっこう大きなサイトで、RailsやJavascriptを書いたり、パフォーマンス改善したり、iPhoneアプリの開発でObjective-Cを書いたりしています。マネージメントはしていなくて、今でも普通にエンジニアとして働いています。
|
2
|
+
35歳定年説の35歳を超えてから1年以上が過ぎたところですが、昔のようにはいかなくなってきたところ、昔と変わらないところ、昔よりよくなってきたところなどがいろいろあります。年を取ってもエンジニアを続けたい人の参考になるかどうかわかりませんが、そういう人たちのためにぼく個人の体験をここに書いておこうと思います。
|
3
|
+
|
4
|
+
1.理解できるまで聞き返す
|
5
|
+
特に若い人たちとの会話で痛感するのですが、相手の言いたいことを一度で理解することが難しくなってきました。最近になってよく思うのですが、若い人たちは比較的よく、主語を抜かしたり目的語があいまいなまま話をしてきます。昔はそれでも相手の言いたいことが理解できたのですが、最近はそうもいかなくて、「ごめん、もう一度言ってくれる?」と相手に言い直させることが多いです。
|
6
|
+
ただ、昔は単に相手の言いたいことを「理解したつもり」になっていただけなのかもしれない、と思っていたりもします。お互いに話が通じ合っていたつもりで後になって齟齬が表に出てくるということが何度かあったりしたので。
|
7
|
+
もし相手の言いたいことがよく理解できなかったら、ちゃんと理解できるまで聞き返すことが大事です。下手に年を取ってくると、理解できなかったことを恥ずかしく考えちゃう人がいるかもしれませんが、理解したふりをしてやり過ごしてしまうのはエンジニアとしては致命的です。
|
8
|
+
|
9
|
+
2.勉強時間を減らしてはいけない
|
10
|
+
20代の頃は、技術書を何回か読むだけでだいたい書いてあることが理解できました。ただ最近は、実際にそのコードを書いてみたりコマンドを叩いてみたり計測してみたりと、手を動かしてみてやっと理解できることが多くなりました。正直メンドくさいです(ぼくは人一倍のメンドくさがり屋です)。このあたりにも35歳定年説が生まれた要因を感じることができます。
|
11
|
+
年齢を重ねればその分だけ過去の貯金ができて、勉強しなくても仕事をする上で困ることは減ってきます。でもそれはただ単に貯金を食いつぶしているだけでいつか破綻します。時間単位あたりに習得できることは減ってきますが、だからこそせめて昔と同じ時間を勉強に使うべきです。
|
12
|
+
|
13
|
+
3.残業してはいけない
|
14
|
+
この業界では残業することが当たり前、みたいな感覚があります。ぼくも若い頃は定時で帰ることが珍しいくらいでした。午後10時くらいに帰ることを念頭に置いて、それまでにこれとこれをやればいいな、と予定立ててから仕事に取り組んでいました。
|
15
|
+
最近はできるだけ定時に帰るようにしています。なぜなら体力的に残業することがきつくなってきたからです。徹夜など言語道断です。残業できなくはないですが、終電間際くらいまで残業をすると体調が悪くなります。その体調の悪さが2,3日後を引きます。結果的に効率が悪くなって、定時で帰るときよりもこなせる仕事量が減ります。月100時間残業したときは、半年くらい調子が戻りませんでした。
|
16
|
+
そもそも、最初から残業することを見越して仕事を始めると、その残業分だけ集中力が低減します。これはぼく個人の感覚ですが、午後10時まで残業するつもりでいるときと、定時で帰るつもりでいるときのこなす仕事量に大差はありません。現在は、午後3時くらいまでに一日の8割の仕事を終わらせるように仕事に取り組んでいます(これは一日の勤務時間の半分です)。
|
17
|
+
それに年齢の高い人間がいつまでも残っていると若い人たちが帰りにくくもなるので、おっさんはとっとと帰りましょう。
|
18
|
+
|
19
|
+
4.自分の強みを知り、得意分野に的を絞る
|
20
|
+
35歳くらいになれば過去に学んできたことである程度広い範囲の知識や技術を身につけているはずです。35歳以降は、自分の得意なこと好きなことに集中して深い方向に技術や知識を伸ばしていくべきです。それが結局は自分の強みになって、35歳を超えてからもエンジニアを続けていける説得力になります。
|
21
|
+
35歳を超えてもエンジニアを続けるには何か人より秀でた部分がないとつらいと思います。ぼくはちゃんとエンジニアになったのが32歳くらいの頃なので、技術や知識も若い人たちと変わりはないくらいです。なのででより切実です。たまたま集中力が高めで実装速度が速かったりバグが少なかったりしてここまでやってこれましたが、それだけではこれから先は厳しいです。技術的な能力は衰退したりしないので、どんどん勉強していきましょう。
|
22
|
+
|
23
|
+
5. 何のために働いているのかを改めて認識する
|
24
|
+
35歳という年齢は、20代の頃とは違います。何が違うのかというと、死ぬまでの残り時間がリアルになるということです。20代の頃は自分が40代になることさえ信じられませんでした。死などは遠い彼方に存在するらしいという感覚でしかありませんでした。でも今は違います。40歳、60歳、80歳の自分がリアルに感じられるし、死ぬことも身近な存在になりつつあります。何のために生きているのか、という問いも切実になります。
|
25
|
+
人生の3分の1は仕事に使います。その仕事は、死ぬときに振り返って「ああ、あれをやってきてよかったな」と思えるものでしょうか。「あんなことをやらなければよかった」と思うようなことではないでしょうか。
|
26
|
+
これはぼく個人の考えですが、結局は世の中のためみんなのために何か貢献することが生きていく価値のような気がしています。人を騙したり、誤解を与えるようなやり方でお金を稼いでいる仕事は、たとえ技術的に魅力的なことをやっていたとしても、ぼくにとっては何の価値もありません(お金を稼ぐことはいいことです。税金もたくさん納めることになって社会にも貢献できるし、給料がたくさんもらえて経済にもいい影響を与えます)。
|
27
|
+
|
28
|
+
午前中に近くの神社に初詣に行ってきました。いつもは人っ子一人いない境内も、今日は参拝の列ができています。娘を抱っこしての石段はモモがやられます。大石家ではこの現象をモモガーと呼んでいます。おみくじをひいて末吉でした。ユルさんは大吉。娘はおみくじなどせずにずっと空を見つめています。より高尚と言えるでしょう。お酒が振る舞われていたのでいただきました。飲んでから、偏頭痛のためにイヴさんを飲んだばかりだということに気づいてしまいます。軽く目眩がしました。目眩はすぐに治って大丈夫。でもひさしぶりの偏頭痛で頭の左半分がなくなっていました。
|
29
|
+
|
30
|
+
鶏まよポンを作ります。でも片栗粉を切らしちゃっていたので素揚げです。やっぱり片栗粉をまぶしていたほうがおいしいですね。まるごとバナナとピザポテトとコーラも食べます。正月のせいか暴食気味なので気をつけましょう。今年は39歳になるのです。39歳になるエンジニアの5つの働き方をご存じの方がいたらご教授いただきたい。
|
31
|
+
|
32
|
+
年を取るといえば、細かい字を見るときは腕を伸ばして遠くにやらないと見えません。すっごい細かい字で週次報告などを印刷する人がいますが、即刻止めていただきたい。しかし突っ込まれたら困る報告をする人には有効です。悪徳商法の契約書に近いですね。老眼ってこんなにはやくやってくるものだとは思っていませんでしたが、数年前からやってきています。老眼で近眼なので手に負えません。メガネとかコンタクトがあってよかった。江戸時代とかに生きていたらどうしていたのでしょうか。剣術とかは絶対にできないですが、農民だったはずなので大きな問題にはならなかったかな。プログラミングで世界を変えるなんてよくいいますが(これって言うの恥ずかしいですよね?)、メガネのほうがもっと大きく世界を変えてくれたと思います。
|
33
|
+
|
34
|
+
門松を見る度に、門松は冥土の旅の一里塚という言葉を思い出します。思い出すだけで特に何かをするわけではありません。ずいぶんとひねくれたじじいが昔からいたものだと思うだけです。なんの話をしているのでしょうか。しかしこれは門松ではなく鏡餅ではあるまいか。
|
35
|
+
|
36
|
+
今日は娘をポルシェ(彼女のベビーカーの名前です)に乗せて、コメダに行ってきました。店員さんが椅子をひとつ撤収してくれるので、彼女はポルシェに乗ったままテーブルにつくことができるのです。今日の彼女はマザーテレサか黒子のような出で立ちでおもしろい。
|
37
|
+
コメダでは定番のサマージュースを飲みました。もはやこれだけのためにコメダに行っているといっても過言ではない。いや過言です。大抵、このフレーズを使うときって過言なのです。いけませんいけません。デーブ・スペクターくらい謙虚に生きなければ。
|
38
|
+
|
39
|
+
録画していたN響のベートーベン9番を聴きました。可もなく不可もなくといったところ。ウィーンフィルのニューイヤーコンサートは第一部まで聴いています。こちらは楽しいです。天皇杯の決勝も見ました。どことなく似ていると言われる中村俊輔のプレイが好きなのでマリノスが勝ってよかった。小学生の頃は横浜で育ったのであながち地元と言えないこともありません。中村俊輔の現役のプレイを直に見られるのももうそう長いことではない気がするので、今年はマリノスの試合を見に行こうと思います。
|
40
|
+
|
41
|
+
9連休の間、ずっと娘を抱っこしていたので肩と腰が石膏みたいに固まっています。彼女の名誉のために体重をここでは述べませんが、最近肩周りとかに筋肉がついてきました。彼女はすこしずつ重くなっていくので、徐々に負荷をかけていく筋トレには最適ではないでしょうか。忍者が生長の早い麻を植えて毎日それを飛び越えては脚力を鍛えていた故事が思い出されます。子供の頃、忍者と同じ特訓をするためにすごく麻が欲しかったのですが、現代ではそれを植えるとたぶん逮捕されるでしょう。危ないところだった。
|
42
|
+
|
43
|
+
明日から仕事です。連休の間はほとんど頭を使っていなかったので(体力勝負ばかり)、仕事が始まるのが楽しみです。早く来い来い月曜日。そういえば連休中はグランツーリスモをちょっとすることができました。最近のお気に入りはマクラーレンのMP4-12Cです。Apache moduleの開発本は3章くらいまでしか読めなかったので、しばらくお昼休みを使って読むことにします。今思い出しましたが、今日は滑り台を久しぶりにすべりました。思っていた以上に楽しかった。意外とあなどれないやつです。
|