Finderから直接Evernoteへファイルを読み込む方法
Evernoteにファイルを添付してく作業は、簡単とはいえなかなか面倒な作業です。なんかいい方法ないかなーと、海外のサイトを見ていたら、OSXのサービスを利用して、Finderから直接Evernoteへファイルを読み込む方法が紹介されていました(Use Mac OS X Services to Import Files into Evernote)。実際にやってみるとなかなか便利だったので紹介します。
この方法を使うと、Finderでファイル上で右クリックすると「ファイルをEvernoteへ読み込み」というメニューが表示されます。実行すると、Evernoteに新規ノートが作成され、ファイルの中身を読み出だした結果が貼付けられます。
それでは設定方法です。
まずは、Automatorを立ち上げます。ワークフローのテンプレート選択画面が表示されるので、「サービス」を選択します。
次に、ワークフローウィンドウの右上にある「サービスはこの項目を受け取ります」という部分を変更します。
- "サービス”は、次の選択項目を受け取ります: ファイルまたはフォルダ
- 検索対象:すべてのアプリケーション
と設定します。
アクションを選択し、「Applescriptを実行」をワークフローウィンドウにドラッグ&ドロップします。
下記のコードを「AppleScriptを実行」ウィンドウの中に貼付けます。
on run {input} tell application "Evernote" repeat with x in input try create note from file x on error error_message number error_number display alert "Send to Evernote Failed" message "Error: " & error_message & " " & "Error Number: " & error_number as warning end try end repeat end tell end run
別名で保存します。ここで設定した名称が右クリックで表示するメニューになります。
システム環境設定のキーボードを開きます。「キーボードのショートカット」から「サービス」をクリックし、ファイルとフォルダの項目を開きます。
「ファイルをEvernoteへ読み込む」というメニューが追加されていますね。
後はFinder上でファイルを選択し、右クリックすると「ファイルをEvernoteへ読み込む」という機能が追加されているはずです。
注意: ファイルサイズが大きい場合、ノートに貼付るまでに時間がかかります。じっくり待ってください。
OSX版Evernoteの日本語化 その3
本日、OSX版 Evernote の最新版(1.5.0 build:60140)が公開されました。いろいろと改善点があるのですが、僕が注目しているポイントは2つあります。
- ベータ版の提供
- ローカライゼーションの提供開始(イタリア語、ドイツ語、フランス語、スペイン語)
それぞれ見ていきたいと思います。
ベータ版の提供
ベータ版が一般ユーザにも提供されることになりました。もちろん人柱向けなのでデータがロストしても自己責任ということになります。
僕は、ベータ版を提供することの意味は大きいと考えています。なぜなら、ユーザも開発に参加できるからです。
ベータ版をEvernote社が提供することで、リリース前にユーザから直接素早いフィードバックを得ることができます。ベータ版を触ったユーザは「バグがあるよ」とか「もっとこうして欲しい」といった生の声をフィードバックすることができます。生の声からEvernote社が改善を考え、ユーザにフィードバックすることができます。こうした双方向にフィードバックする環境ができたことで、僕達ユーザも開発に直接参加できるようになったのです。
ちなみに、ベータ版のバグ、フィードバックはEvernoteの Mac フォーラムに報告することになります。
ローカライゼーションの提供開始
実は、v1.4.9のEvernoteでもロシア語向けリソースが提供されていました。しかし、ようやく本格的にさまざまな言語のリソースが提供されるようになりました。リリースノートにも
Our translation project is beginning to bear fruit.
私たちの翻訳プロジェクトが実を結び始めている
とあるので、これからどんどん新しい言語向けのリソースがでてくるのでしょう。
ローカライズといってもなかなか難しいもので、英語を日本語に翻訳するだけで、アプリをローカライズできるものでもありません。たとえばEvernoteの場合、ステータスバーには
Viewing 349 notes from hogehoge notebook matching All of the following: contains words starting with Evernote
といったような検索条件が表示されます。日本語と英語圏では語順が異なるので、単純な翻訳では修正しきれません。僕が作成した日本語リソースでも、ステータスバーは英語のままにしてあります。この修正はソースコードからの修正が必要になるので、開発元じゃないと修正できないのです。
開発元は日本びいきらしいので、時間はかかるかもしれませんが、きっと適切に修正してくれることでしょう。
ダウンロード
いつか提供されるとはいっても、日本語メニューがあるだけでも全然使い勝手は良くなります。そこで、バージョン 1.5.0 (60140) 向けに日本語リソースを作ってみました。訳も以前より、若干こなれたのではないかと思っています。
インストールは、関連する記事を参照してください。うまくリソースが適用できないとか、妙な訳などありましたら、コメントにてご指摘お願いします。
- Evernote 本体向け日本語リソースEvernote_1.5.0_20091013.zip
- EvernoteHelper 向け日本語リソースEvernoteHelper_1.5.0_20091012.zip
OSX版Evernoteの日本語化 その2
OSX版Evernoteの日本語化 で、アプリ本体はほぼ日本語化されたのですが、象マークのメニューとスクリーンキャプチャーが日本語化できていませんでした。
よくよく調べてみると、この部分はEvernoteHelper.appというアプリケーションで実現されており、別途日本語リソースを用意する必要があるのでした。ここも日本語化できたので、公開します。
インストール方法
- 象アイコンをクリックし、メニューからQuitを選択して、Evernoteを終了します。
- EvernoteHelper.20091010.Japanese.lproj.zip をダウンロードします。
- EvernoteHelper.20091010.Japanese.lproj.zipを展開します。Japanese.lprojというフォルダが作成されます。Evernoteの本体向けと同じフォルダ名なので、コピー元を間違えないよう注意してください。
- Finderから、/Application/Evernoteを選択し、右クリックし、コンテキストメニューを表示します。「パッケージの内容を表示」を選択します。
- 新しいFinderウィンドウが開きますので、そのウィンドウからContents/Resources/EvernoteHelperを選択します。
- 再度右クリックし、「パッケージの内容を表示」を選択します。
- 新しいFinderウィンドウが開きますので、そのウィンドウからContents/Resources/を選択します。
- このフォルダに展開したJapanese.lprojフォルダをコピーします。
- Evernoteを起動すると、象アイコンをクリックすると、日本語メニューが表示されます。
アンインストール方法
コピーしたJapanese.lprojを削除してください。
関連する記事
Evernoteに関連する本
OSX版Evernoteの日本語化
OSX版Evernoteの日本語リソースを作成してみました。
退屈しのぎに作っていたものですが、個人的に使っている分には問題もなさそうなので公開します。公式版がでるまでのつなぎにしかなりませんが、興味があれば使ってみてください。コメント等いただけるとありがたいです。
制限事項
インストール
1. Japanese.lproj.20091009.zip をダウンロードし、展開する。Japanse.lprojというディレクトリが作成されます。
2. Evernoteノートのバージョンを確認する。
3. Evernoteを終了する。
4. Evernoteのリソースを表示します。Finderでアプリケーションフォルダ以下のEvernoteを選択する。右クリックし「パッケージの内容を表示」を選択する。
5. 新しいFinderウィンドウが開くので、Contents/Resourcesの下に先ほど展開したJapanese.lprojを展開する。
アンインストール
Evernoteを終了し、Japanese.lprojを削除してください。
追記
ネタフルさんのEvernote」CEOと会食して日本語化の話を聞いた!によると、
Evernoteの日本語化が2010第2四半期リリースを目指して作業されているそうなのであまり意味が無いかもしれません。もっとはやく情報公開してよ、もう。
EvernoteにGoogleReaderの記事を送る
GoogleReaderにはSendToという機能があります。
この機能はGoogleReaderで読んだ記事をブログやTwitterなどに送る(Send to)機能です。この機能が超便利なので紹介します。
英語版のGoogleReaderでのみ使える機能です。Google Japanさん、早く日本語版にも実装してください。お願いします。
では、設定を説明します。
- GoogleReaderを開きます。
- 設定を開き、各種設定タブから言語:英語-Englishを選択します。
- 英語設定でGoogleReaderが開きます。
- Settingsを開き、SendToタブを開きます。
- Create Custom Linkをクリックし、以下を設定します。
Name: はてなブックマーク URL: http://b.hatena.ne.jp/add?url=${url} Icon URL: http://b.hatena.ne.jp/favicon.ico
あとは記事を読んでお気に入りがあれば、Shift + tと入力し、矢印キーで選択すれば記事をブックマークすることができます。
注意点が二つあります。
- 新しいウィンドウを開くため、ブラウザでポップアップを開く設定にしてください。
- feedproxyではじまるサイトはオリジナルのURLではないので、ブックマークしない方がよいです。
ちなみにEvernoteへ投稿するなら、
- Create Custom Linkをクリックし、以下を設定します。
Name: Evernote URL: http://s.evernote.com/grclip?url=${url}&title=${title} Icon URL: http://www.evernote.com/favicon.ico
で、Evernoteへ転送することができます。
こういう素敵なマッシュアップが生活をどんどん便利にしていきますね。ほんと良い時代になりました。
[tech][Java]Unix系JavaでRuntime.execをつかうときの落とし穴
JavaではJVMやライブラリの実装がWindows、MacOS、Linux等で共通の実装だけを採用する方針だったりします。
なので、シンボリックリンクをはったりといったような、使いたくなるような気の利いたOSの機能はAPIでは用意されていません。しかたがないので、lnコマンドといったような外部コマンドを呼び出したい気分になるのですが、Unix系JavaでRuntime.exec()を使って外部コマンドを呼び出す際には注意が必要です。意外な落とし穴が待っています。
もし今サーバーがUnix系OSでJavaでRuntime.exec()を使おうと思っているなら、今すぐ別の方法を検討してください。後でとんでもない目にあいますよ。
いったいどういうことなんでしょうか?とりあえず、こんなプログラムを考えてみます。
package org.kazumi007; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; public class ExecuteCommand { public static void main(String[] args) { // 400Mbyte確保 int[] list = new int[2000000]; list[0] = 1; String cmd = "sleep 1"; while (true) { try { Process process = Runtime.getRuntime().exec(cmd); InputStream is = process.getInputStream(); BufferedReader br = new BufferedReader( new InputStreamReader(is)); String line = null; while ((line = br.readLine()) != null) { // なにもしない } } catch (IOException e) { e.printStackTrace(); } } } }
内容は単純です。巨大な配列を確保してsleepコマンドを1秒おきに起動しているだけの単純なプログラムです。これのどこが問題なのでしょうか?
実行中のJavaプロセスのメモリをみてみましょう・・・。何度か取得した結果の一部です。
$ ps -a -o vsz,comm,args,pid,ppid |grep java
75732 grep grep java 22292 20554
1300640 /usr/bin/java /usr/bin/java -Xmx512m org.kazumi007.ExecuteCommand 22086 10150
1300640 /usr/bin/java /usr/bin/java -Xmx512m org.kazumi007.ExecuteCommand 22290 22086
OSX 10.6.1のjava version "1.6.0_15"でテストしました。
同じメモリサイズのJavaのプロセスが2つありますね。なにこれ?!
実はUnix系のJVMはRuntime.execが実行されると、内部でfork()を呼び出しプロセスのコピーを作成し、exec()でコマンドを実行しているのです。この実装のために、コマンドを生成すると必ず起動元のプロセスと同じサイズの空きメモリがなければなりません。さらに自体を悪くするのが、Windowsでは実装が異なるので通常開発環境では問題にならないのです。本番ではOutOfMemoryErrorが出るんだけど、再現しない・・・。ということになってしまうのです。
大切なことなので、もう一度書きます。
Unix系JavaでRuntime.execを使うなら、起動元のプロセスで使用しているメモリと同量の空き容量が必要です。可能な限り、Javaから外部コマンドを呼び出さずに別の方法を検討しましょう。
これってJavaで開発するときの常識なんですか?