Mac を使っているなら必ず使うべき2つの機能 "Automator" と "サービス"
Automator ってなんか超高機能なマクロみたいなイメージがありますが、とても便利なのでご紹介。
もともとは、会社の上司が Windows から Mac に移行したのだけれど、"秀丸みたいに選択範囲を ruby で evalできないの" とおっしゃっており、しかも Emacs は微妙とのことなので、Automator でどうにかしてみた。Service でできるんじゃないかねと教えてくれた同僚に感謝。
追記(2013/02/24)
デバッグ方法を別エントリに書きました
できること
文字列選択して Ctrl+= を押すと選択文字列が ruby で実行されます。編集可能なテキストエリアならだいたい何処でも。
作り方
- アプリケーション ディレクトリにある Automator を起動します。
- 新しくサービスを作ります
- ユーティリティ > "シェルクスクリプトを実行"というアクションを選んで右のあいてることろにドラッグアンドドロップ
- "ruby -Ku" と書く
- ドロップダウンリストで選べるオプションは画像のとおりに。
- 名前をつけて保存する。たとえば "doRuby"
- ショートカットーキーを設定する
- "システム環境設定" を開いて、"キーボード"項目の、キーボードショートカットタブをクリック
- 左カラムのサービスを選ぶと、さっき保存した右カラムに doRuby があるので、すきなショートカットキーを設定
- テキストエリアで、ruby のコードを選択する。さっき決めたショートカットキーを押す。コードが実行される。
- Ctrl-z で動作を取り消して、もとのコードに戻せるのもポイント高いですね。
ポイント
- シェルスクリプトの標準入力になんでも渡せる。ファイル名を渡したりも出来る。ほとんどなんでも出来るじゃん。
- つくったサービスは、コンテキストメニュー出るようになる!
- つくったサービスは、ショートカットキーがセットできる。
- Ctrl-z でやりなおしできる。
ショートカットキーが設定できるのが、とても重要で、画面ロックのショートカットキーも簡単にできます。
画面ロックの作り方
- 途中まではさっきの例と同じ
- こんな感じで"スクリーンセーバーの開始" をするだけのサービスを作成
- 名前つけて保存
- 上の例と同様に、ショートカットキーを設定
とすれば、画面ロックのための service になります。
発展型
スクリーンショットを撮って、fotolife に upload する。という gyazo みたいなスクリプトが一時期はやりましたが、これもショートカットキーから呼べるとかなり便利です。
use strict; use warnings; use Config::Pit; use WebService::Hatena::Fotolife; use IPC::Run qw(run); my $conf = Config::Pit::get("hatena.ne.jp"); my $file_name = $ARGV[0]; my $tmp_filename = '/tmp/screencapture.png'; if ($file_name || run(['screencapture', '-i', $tmp_filename])) { my $hatena = WebService::Hatena::Fotolife->new; $hatena->username($conf->{user}); $hatena->password($conf->{pass}); my ($date) = $hatena->createEntry( filename => $file_name || $tmp_filename, folder => 'work', ) =~ /(\d{14})$/; my $url = sprintf "http://f.hatena.ne.jp/%s/%s", $conf->{user}, $date; run(['open', $url]); }
こんなスクリプトを書いておいて、
こうやってサービスを作ると、ショートカットキー一発で、スクリーンショット取得と fotolife への upload まで完了できます。
MeCab の辞書に単語を追加して利用する
いつも忘れるのでまとめておこう。
辞書と言ってもきちんとコストを計算して複雑な形態素解析をするわけではなく、
Wikipediaの項目名などを名詞として文章から抜き出すために追加するとかそういう例。
単語の活用も考えない。
1.もとになる単語のリストをつくる
上達の法則,0,0,-8944,名詞,一般,*,*,*,*,*,*,* ツブカラカサタケ,0,0,-18101,名詞,一般,*,*,*,*,*,*,* 旗艦・三笠,0,0,-8944,名詞,一般,*,*,*,*,*,*,* マルシェ志摩,0,0,-11757,名詞,一般,*,*,*,*,*,*,*
まあこんな感じのCSVを作る。カラムは左から順に
表層形,左文脈ID,右文脈ID,コスト,品詞,品詞細分類1,品詞細分類2,品詞細分類3,活用形,活用型,原形,読み,発音
http://mecab.googlecode.com/svn/trunk/mecab/doc/dic.html
となっているのだけれど、左文脈ID,右文脈IDは今回は利用しないので0でよい。品詞から右は品詞,品詞細分類1ぐらいが書いてあれば実用に困らない。
問題なのはコストで、これが小さいほどその単語としてきり出されやすくなる。
今回は正規表現の最長一致のようになるべく長い単語切り出してほしいので、文字列の長さに応じてスコアが小さくなるような設定をしている。
なので1行目と3行目は同じ長さがなのでスコアが同じだし、"ツブカラカサタケ"は長い文字列なのでスコアが小さくなっている。
このへんのスコアの付け方の感覚はイマイチわかっていなくて、詳しい人がいたら教えていただきたい。
2.csv から dic ファイルへ変換
さてこのcsvを直接mecabは読みこんでくれないので、独自形式に変換する。csv ファイルが words.csv、 作る辞書ファイルを original.dic とする。
$ /usr/local/Cellar/mecab/0.98/libexec/mecab/mecab-dict-index -d /usr/local/Cellar/mecab/0.98/lib/mecab/dic/ipadic -u original.dic -f utf8 -t utf8 words.csv
これは osx で homebrew を使って mecab を入れている場合の例。自分の環境に合わせて変更すると良い。
mecab-dict-index が辞書を変換する実行ファイルで、-d のオプションがシステム辞書のある場所、 -u オプションが作る辞書の名前, -f が csv ファイルの文字コード、-t が作る辞書ファイルの文字コートになる。
3.作った辞書の利用
mecab -u original.dic
と -u オプションで作ったファイルを渡せば、ユーザー辞書も有効になる。システム辞書も有効なので注意。
Text::MeCab から利用する場合は、コンストラクタで
my $userdic = '/PATH/TO/original.dic'; my $mecab = Text::MeCab->new({ userdic => $userdic });
と指定してあげればよい。
MeCabさん、登場から随分たつけどやっぱり便利ですね。
詳しい解説は http://mecab.googlecode.com/svn/trunk/mecab/doc/dic.html も参考に。
ペパボのSQALEでsinatraしてみた
paperboy さんの、SQALE のbetaテストに参加できたので、Sinatra を動かしてみた。GettingStartが rails なんで面食らってしまったけれど、要は rackup のための config.ru がリポジトリのトップレベルにアレばいいようだ。(参考 http://docs.komagata.org/4927)
用意するもの
ということで、Sinatra で書かれたアプリと、最低限の設定ファイルを用意する
config.ru
require './app' run Sinatra::Application
app.rb
require 'sinatra' get '/' do 'Hello World' end
Gemfile
gem "sinatra"
bundle install
上記の3つのファイルを用意したら、
$ bundle install
として、Gemfile.lock も作る。
あとは
SQALE のダッシュボードで作成した、アプリケーションのリポジトリに入れて、push するだけ!反映されないようだったら、
$ /etc/init.d restart
するとよいかも。しなくても反映されていたりする。
まとめ
config.ru と Gemfile を用意するだけで rack アプリが動くので便利!
ついでなので、ab してみた
ちゃんと対策されてた><
kurai-no-MacBook-Air:r_kurain% ab -H "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)" -c 10 -n 100 "http://bench-kurain.sqale.jp/" This is ApacheBench, Version 2.3 <$Revision: 655654 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking bench-kurain.sqale.jp (be patient)...Send request failed! Send request failed! Send request failed! Send request failed! apr_socket_recv: Connection reset by peer (54) Total of 23 requests completed
nginx はデフォルトで merge slash する
久しぶり技術ネタを一つ。
問題
nginx を reverse proxy として使っていると
original | http://example.com/hoge/huga//path |
proxied | http://example.com/hoge/huga/path |
みたいな感じに重なったslash を merge してから proxy される。path最後の '//path' が '/path' となって、状況によってはありがたい。これが default なのが良いかは分からないが。slash は 2 以上連続していると、1つになる。
さらに、
original | http://example.com/entry/http%3A%2F%2Fwww.hatena.com%2F |
proxied | http://example.com/entry/http%3A%2Fwww.hatena.com%2F |
と、パーセントエンコーディングされている slash もmerge されてしまう。
backend で http://www.hatena.com/ をエンコードした文字列が来ると期待しているとはまる。
解決策
で、これを解決するには nginx.conf の設定に
Syntax: merge_slashes on | off
http://wiki.nginx.org/HttpCoreModule#merge_slashes
Default: on
Context: http, server
Reference: merge_slashes
というのがあるので、これを設定すればよい。
しかし!'Context: http, server' と書いておきながら、この設定は、default server の設定に書くか、http context に書かないと有効にならない。see(http://nginx.org/en/docs/http/ngx_http_core_module.html#merge_slashes)
default server の設定に書くと、すべての virtual host で有効になるようである。ある virtual host だけ有効/無効 にというのが出来ないわけだ。
まとめ
nginx を使っていると、スラッシュの数がバックエンドで少なくなってるということがある。設定で直せるけど、設定場所にも罠があるよ!!!
初めてのTOEICでスコア 830 を取るためにやったこと
3月にTOEICなるものを初めて受けたところ、先ごろその結果が郵送されてきた。
スコアは合計830で、内訳は リスニング 450、リーディング380 で、リーディングがちょっとお粗末な感じである。
そう酷い点数でもないので、使った教材を晒したうえで評価してみようと思う。
基本的にずぼらなので、なるべく教材は増やさない。頑張らないというスタンスである。
また、[英語]実質2ヶ月でTOEICを340点アップさせた、私の勉強法を公開します を参考にして、教材を決めたので選び方結構似通っている。
書いた順はほぼ実際に使った順である。勉強期間は実質1ヶ月くらい。
一番最後に、自分が思う最強の教材を載せたので、興味があるひとは最後だけ見ると良いかもしれない。
良かった教材
TOEIC Test 「正解」が見える【増補改訂第2版】
- 作者: キムデギュン,樋口謙一郎
- 出版社/メーカー: 講談社インターナショナル
- 発売日: 2007/05/16
- メディア: 単行本(ソフトカバー)
- 購入: 29人 クリック: 243回
- この商品を含むブログ (35件) を見る
練習問題も結構ついてるし、必須単語リストとかもあったけれど、ほとんど使ってない。TOEICに慣れているひとは不要だと思う。
一番役に立ったのは時間配分についてのアドバイスの
- part 5, 5分
- part 6, 25分
- part 7, 45分
を目安にしたいという話だった(実際これを目安に練習している)。
リスニングセクションで How で始まる疑問文は Yes, No で答えられない。とか、質問文に出てきた単語は回答に出てこないとか、ノウハウぽいのは慣れてくるにつれて不要になるけれど、なかなか聞き取りが難しい練習初期には役に立った。
新TOEICテスト リスニング 練習問題300問
- 作者: 阿久津勝彦,フランクハンフリー,ガブリエルハンフリー,阿久津由佳,Gabrielle Humphrey,Frank Humphrey
- 出版社/メーカー: 桐原書店
- 発売日: 2007/12
- メディア: 単行本
- 購入: 2人 クリック: 4回
- この商品を含むブログ (3件) を見る
リスニングは絶対苦手だと思っていた、というか上記の"「正解」が見える" の練習問題がわかんなすぎて焦って最初に買った本。
難易度としては、本番のTOEICより少し難しいかも。というくらい。(Amazonのレビューもそう書いてる人が多い)
300 問と書くと多いけれど、TOEIC3回分でしかない。この本は2周やった。
桐原書店は高校時代から安心の英語教材ブランドというイメージがあって買ったのだが、解説もしっかりしてるし難易度も適当でよい教材だったと思う。
新TOEICテスト 文法・読解 練習問題300問
- 作者: 阿久津勝彦,フランクハンフリー,ガブリエルハンフリー,阿久津由佳,Gabrielle Humphrey,Frank Humphrey
- 出版社/メーカー: 桐原書店
- 発売日: 2007/12/25
- メディア: 単行本
- 購入: 1人 クリック: 6回
- この商品を含むブログ (6件) を見る
一日2part をこなすぐらいの分量で、これも2周やった。
TOEICテスト新公式問題集〈Vol.4〉
- 作者: Educational Testing Service
- 出版社/メーカー: 国際ビジネスコミュニケーション協会
- 発売日: 2009/08
- メディア: 大型本
- 購入: 62人 クリック: 418回
- この商品を含むブログ (81件) を見る
VOA Special English News
Voice of America - Learn American English with VOA Learning English
アメリカ合衆国国務省が運営する、音声付きネットニュース。1500単語しか使わないで文章が構成されているので、Word Book(Voice of America - Learn American English with VOA Learning English) を覚えてしまえば辞書なしで読める事になっている。
速度もTOEICの試験と似たようなもので聴きやすい。多少プロバガンダなのを我慢して聞けるならとても良い教材。毎日2,3本のコラムぽい記事が公開されるので、面白そうなものを毎日昼休みに聞くようにしている。
- 慣れるまでは 英文を目で追いながら聞いて
- 慣れてからは 耳だけで理解出来るように
心がけた。
Googleのプライバシーポリシー変更とか、デジタルミレニアム著作権法改正についてのコラムなど、IT系の話も多いので面白い。コラムが面白くない日は、30分ニュース(http://www.voanews.com/mp3/voa/english/spec/SPECIAL_ENGLISH_NEWS.mp3 [mp3])を聞くようにしていた。こちらはスクリプトの英文が無いのが残念なのだけれど、時事ネタが英語で聞けて面白い。勉強中は大体シリアの話で鬱々とした気分ではあったけれども。
ちなみに、Special English ではない、普通の英語のニュース(VOA - Voice of America English News)もあるが、速いし語彙も多いのでかなり難しい。
ここまでは、やって良かった編。これ以降はなくても良かったかも。
まあまあだった教材
DUO 3.0
- 作者: 鈴木陽一
- 出版社/メーカー: アイシーピー
- 発売日: 2000/03
- メディア: 単行本
- 購入: 197人 クリック: 3,012回
- この商品を含むブログ (728件) を見る
新TOEICテスト 特訓!文法・読解300問
- 作者: 阿久津勝彦,阿久津由佳
- 出版社/メーカー: 桐原書店
- 発売日: 2009/10
- メディア: 単行本
- クリック: 1回
- この商品を含むブログを見る
TOEICテスト 特訓!リスニング300問
- 作者: 阿久津勝彦,阿久津由佳
- 出版社/メーカー: 桐原書店
- 発売日: 2009/10
- メディア: 単行本
- クリック: 2回
- この商品を含むブログを見る
ユ・スヨンのブレークスルー990 TOEIC TEST 語彙・熟語・コロケーション1000問ドリル
ユ・スヨンのブレークスルー990 TOEIC TEST 語彙・熟語・コロケーション1000問ドリル
- 作者: ユ・スヨン
- 出版社/メーカー: スリーエーネットワーク
- 発売日: 2011/07/30
- メディア: 単行本(ソフトカバー)
- クリック: 14回
- この商品を含むブログ (3件) を見る
ラングリッチ
http://langrich.com/
最近よく見る、フィリピンとskype でつないで行う英会話教室。先に上げた VOA を教材として知ったのはこちらのサービスで利用していた為でその点でとても感謝している。
VOAを教材にした場合、発音をチェックしてもらいつつ、音読して、内容のサマライズをその場するという授業になる。この授業はかなり面白いのでよかったのだが、無精な自分には毎日予約して英会話を続けるという事が出来なかった。リスニングの得点にもそんなに直結しなそうだったし。
ただ、ラングリッチに入会するにあたって、この手のサービスをいくつか比較したけれど、その中では群を抜いてよいサービスだった。よかったのは次の点
- 回線が一番安定していた
- 基本的にビデオチャットにしてくれる
- 先生の後ろで犬が吠えていてうるさい。ということもなかった。(他社だとこういう信じられないケースがある
いろいろ余裕ができたら、TOEICとは関係なく利用したいサービスではある。
僕の考えるさいきょうのえいご教材
さて、僕が今まで使ったなかで最強の英語教材は、公文のSRSである。
公文式が嫌いでなければ、是非おすすめしたい。
最後に書いたのは、実際にやっていたのがもう10年以上前なので、今回の試験にどれほど影響しているか分からないからだ。週に2,3回、公文の教室に90分ぐらい通えば1年で完結する。自分の場合は大学受験英語のために使ったのだけれど、かなり役に立った。リーディング教材なので、もう少しリーディングスコアが良くないと説得力がないわけだが、少なくとも part 7 の長文読解問題にはとても効果があるし、長文英語への恐怖感がなくなる。大学在学中の論文よみなどにも役に立っていたと思う。本人の英語レベルにあわせて最初の教材を選んでくれるので、公文の先生に従って始めればそうそう失敗もないと思う。問題は近くに教室があるかどうか、というのと若干高めな月謝だろう。
HTMLとJSとCSSだけでスクリーンセーバーが作れるHTMLScreenSaverBuilderを作った
作った
表題のとおりで、HTML と JavaScript と CSS の知識があればMacのスクリーンセーバーを作れるツールを作りました。Xcode も不要です。
html でできることは大概できるので、flash 貼るとか audio ダグで音をならすとか、WebGLで3Dで遊ぶとかかなり何でも出来るのではナイかと思っています。
ダウンロード
下のリンクからどうぞ!HTMLScreenSaverBuilder 本体と、サンプルで作った ScreenSaver が入っています。
HTMLScreenSaver.zip
作り方
HTMLを準備
全画面表示されても、綺麗に表示されるような HTML を書きます。必ず名前は index.html にしてください。例として、はてなフォトライフの人気の写真を表示する HTML を書きました。
https://github.com/kurain/HotFotolifeSlideshow
HTML だけでなく、JSとCSSを使って実装します。上記の例だと、CSSで画像の中央寄せを行なって、jQuery + YQL で最近人気の写真一覧を取得しています。
一つのディレクトリに
HTML と付随する必要なファイルをひとつのディレクトリ以下に収めます。index.html より下位にあれば、ディレクトリをつくっても大丈夫です。
. ├── index.html ├── jquery-1.6.4.min.js ├── main.css └── main.js
ほかのHTMLの例
https://github.com/kurain/HatenaTweets
これは、Twitter 検索APIで、"はてな"を含む Tweet を全画面で表示する例。JSで実装できると、各種WebAPIとの連携が簡単にかけるのが非常に便利です。また、jQuery も当然使えるのでアニメーションなども plugin を駆使することでかなり簡単に書くことができます。
ダウンロード(再掲)
下のリンクからどうぞ!HTMLScreenSaverBuilder 本体と、サンプルで作った ScreenSaver が入っています。
HTMLScreenSaver.zip
ではでは。どうぞご利用ください。
AA(アスキーアート)を読みやすくする Chrome 拡張をつくりました
AAReadable という Chrome 拡張を作りました
急になるべくどうでも良いものが作りたくなってChrome拡張を作りました。
名前の通りの拡張でブラウザで開いているページあるいは、選択している部分のフォントを変更してアスキーアートを見やすくする拡張です。
フォントを別途インストールする必要が無いところと、閲覧中のページに適切なCSSが無くても動くとこなんかがポイントです。
フォントについては textar webfont(http://font.textar.tv/) さんが、IPA Font License Agreement v1.0(http://ossipedia.ipa.go.jp/ipafont/index.html#LicenseJP)でfontを配布していらっしゃるのでそれを利用させていただいています。
使い方
https://chrome.google.com/extensions/detail/omooelimgkbkdfnnciofhjoopichcbok?hl=ja
からインストール。
AAを選択して、右クリックすると AAReadable のメニューがあるので"選択範囲を変更"すると、選択範囲内のフォントが変更されます。
"画面全体を変更" を選択すると、選択範囲に関係なく画面全体のフォントを変更します。
技術的ポイントなど
webfont面白いけど日本語フォント配布するのは重いし chrome 拡張に突っ込んだら google がホスティングしてくれないカナーと思って作ってみました。
無事ホスティングしてもらえたわけですが、2つポイントがあって、
すべての 'ttf' が webfont に使えるわけではない
AA用のフォントというと、モナーフォント(TK)とか、IPAモナーフォントなどが有名なのですが、これらに含まれているttf はどちらも chrome では利用出来ませんでした。僕のかいたCSSが間違っている可能性もありますが、おなじCSSでも、美咲フォントの最新アウトライン版に含まれる MisakiGothic_Outline.ttf は使えるのに、古い misaki.ttf は使えなかったりとルールが全然わかりません。
ttf にも色々種類があるんだろうなと思いつつそこまで追いきれていません。
chrome 拡張でページのコンテンツにアクセスする
chrome拡張はBookmarkletやGreasemonkeyに比べると格段にセキュリティが意識されていて、メインとなる background_page から 現在開いているwebページのDOMに直接アクセスすることが出来ません。
しかし、
chrome.tabs.executeScript(null, {file:'file_name_of.js'}, function(){ chrome.tabs.executeScript(null, {code:'functionInJs()'}); });
という感じのメソッドで、JS のファイルをアクティブなタブに読み込ませることはできるのでこいつがかなり便利です。第3引数のコールバック関数がなんのためにあるのか最初分からなかったのですが、これがかなり便利で、JSファイルの読み込みが終わったあとで呼ばれるのでJSファイルの中で定義している関数などが呼び出せます。逆にこう書かないで、chrome.tabs.executeScript を連続的に呼び出すとそれらは、非同期に実行されてしまうので、まえに読み込んだファイルにある関数を利用してというような事ができません。
という点ではまったりしたわけですが、chrome拡張は割と簡単につくれる上に色々使いではありそうなので、みなさんも何か作ってみてはいかがでしょうか。