JAMADAM.COM

RSS Subscribe to my RSS feed

Stripe Calendar

Sep, 2010
Aug 1213141516171819202122232425262728293031 Sep 123456

Entry: 翻訳結果を検証しやすい翻訳サービスを作った

翻訳結果を検証しやすい翻訳サービスを作った

Initial post: 2010.02.23 | Last modified: 2010.02.23

「翻訳の可逆性を検証し、よりよい訳文を選択可能な翻訳サービス」です。いろんな翻訳サービスをマッシュアップしてます。

Verifiable Translator β

経験上、ウェブ上の翻訳サービスの精度はかなり低いです。「不自然な表現」どころか、意味を想像することすら難しい程の間違った訳が平気で提示されます。外国語を母国語へ翻訳して読解する場合は利用価値があるのですが、母国語から外国語へ翻訳するケースでは、対象外国語を全く理解できないまま利用するのは危険です。

このサービスは、入力された日本語を様々な翻訳サービスを利用して外国語に翻訳し、その結果をさらに逆翻訳した日本語を合わせて提示します。利用者は出力された日本語の正当性を評価することで訳文を検証することができます。また、ひとつの入力に対して多数の候補を提示することで、より妥当な訳文を選択することができます。

現在は日本語->英語と日本語->中国語の翻訳が可能です。

Entry: ある意味、世界一のURL短縮サービスを作った

ある意味、世界一のURL短縮サービスを作った

Initial post: 2009.07.18 | Last modified: 2009.11.04

[2009.09.30] Asiajinで取り上げていただきました。ありがとうございます。そして、同じネタがすでにあったと知りました。リサーチ不足。

 

長いURLの文字数を削減してくれるURL短縮サービスはたくさんあるけど、世界中のどの方式よりも文字数を短縮できる方法を発明しました。

縮.jp

サイト名ですでにネタばれですが、これは各URLに割り振るIDをマルチバイト文字の組み合わせにすることで、文字数的には短いでしょ、というネタです。ついったーなんかは完全に文字数に依存なので有効かも。

IDに使用する文字は日本の常用漢字1945字です。シーケンシャルに割り振り、使い切ったら繰り上がるので、最初の370万件は2桁に収まり、最初の73億件も3桁に収まります。

注意事項としては

  • Firefox3.5, IE7, Chrome, iPhoneで正常動作を確認しました。逆に、Androidエミュレータ, DoCoMoやAUのブラウザ(フルブラウザ含む)は日本語ドメインに未対応のようです。
  • IDはシーケンシャルに割り振られるので使用済みのIDは容易に推測できます。
  • 「悪」などというイヤなIDが当たってしまったらリロードして再割当してください。「縮AGAIN」ボタンを押してください。
  • これはジョークサービスです。本サービスの利用に起因または関連する利用者の損害について管理者は何ら責任を負いません。

 

Entry: 縮.jpに外国人向けの機能をいくつかつけた

縮.jpに外国人向けの機能をいくつかつけた

Initial post: 2009.10.28 | Last modified: 2009.10.28

縮.jpに、IDとして使われた漢字の英訳を表示する機能を付けた。また、カスタムIDに外国語の単語などを入力した場合はエラーが出つつも、その単語の日本語訳から抽出した漢字を次候補として提案する機能をつけた。Google AJAX Language APIを使ってみたかっただけ。

Entry: twilogで日本語ドメイン名にリンクを張るGreasemonkeyスクリプトを作った

twilogで日本語ドメイン名にリンクを張るGreasemonkeyスクリプトを作った

Initial post: 2009.10.19 | Last modified: 2009.10.19

開発ネタがぜんぜん思いつかないのでGreasemonkeyスクリプトをもうひとつ作った。

twilogというサービスで、つぶやきの文中の日本語ドメインURLにリンクが張られていないようなので、勝手に張ってくれるGreasemonkeyスクリプトです。

accessible_idnをインストール

// ==UserScript==
// @name           accessible_idn
// @namespace      http://jamadam.com/blog/
// @description    This makes IDN URLs accessible.
// @include        http://twilog.org/*
// ==/UserScript==

(function() {
var tltexts = document.getElementsByClassName('tl-text');
for (var i = 0; i < tltexts.length; i++) {
    var tmp = tltexts[i].innerHTML;
    for (var j = 0; j < tmp.length;) {
        if (tmp.substr(j, 3) == '<a ') {
            var closepos = tmp.indexOf('</a>', j);
            if (closepos == -1) {
                break;
            } else {
                j =  closepos + 4 + 1;
                continue;
            }
        }
        if (tmp.substr(j, 2) == 'ht' && 
            tmp.substr(j, 8).match(/^https?:¥/¥//)) {
            var end = tmp.substr(j).search(/¥s| |$/);
            var url = tmp.substr(j, end);
            var gen = '<a href="%1">%2</a>'.replace('%1', url)
                                           .replace('%2', url);
            tmp = tmp.substr(0, j) + gen + tmp.substr(j + end);
            continue;
        }
        
        j++;
    }
    
    tltexts[i].innerHTML = tmp;
}
})();

 前回のネタよりちょっと難しかった。既設リンクをスルーする仕組みが多少いい加減。

Entry: 国際化ドメイン名をHTMLに記述する際の記述方法

国際化ドメイン名をHTMLに記述する際の記述方法

Initial post: 2009.10.18 | Last modified: 2009.10.18

国際化ドメイン名をHTMLに記述する際の記述方法に関するメモ。間違いあったら指摘して。

(1) <a href="http://%E7%B8%AE.jp/">http://縮.jp/</a> (誤り)
(2) <a href="http://縮.jp/">http://縮.jp/</a>
(3) <a href="http://&#x7e2e;.jp/">http://縮.jp/</a>
(4) <a href="http://xn--jj0a.jp/">http://縮.jp/</a>

(1)パーセントエンコード。誤り。

(2)マルチバイト文字を直接記述する。一番正しくて手軽な記述。問題点は、UAがIDNに対応していないため通信時に正しくpunycode変換されないかもしれないこと。

(3)マルチバイト文字を数値文字参照で記述する。敢えてこう記述するメリットはあまりないけど、例えばマルチバイト文字を扱えないシステムとの相互運用を想定しているためにHTML内に日本語を直接記述したくない場合には、このように記述して構わない。

(4)punycode変換して記述する。リンクを正しく動作させるという点では一番安全かもしれない記述。ただし、エンドユーザーが知りうるURLが全てデコードされるかどうかはブラウザの実装次第。例えば「リンクをコピー」したときにpunycodeのまま出力されてしまってはIDNの利点が台無し。punycode変換はUAが通信時に行うことが推奨されているため、HTMLに記述する時点で行う必要はない。

Entry: 誤ってエンコードされたIDNを直すGreasemonkeyスクリプトを作った

誤ってエンコードされたIDNを直すGreasemonkeyスクリプトを作った

Initial post: 2009.10.18 | Last modified: 2009.10.18

開発ネタがぜんぜん思いつかないのでGreasemonkeyスクリプトでもやってみようと思った。

世の中のWEBシステムの多くは国際化ドメイン名(IDN)に対応していないと最近気づいた。例えばTwitter検索の結果とかにhttp://日本語.jp/とあっても飛び先がエラーになるのはサーバープログラムが「日本語」を誤ってパーセントエンコードしているため。このリンクを正しく動作させるためにドメイン名をデコードするGreasemonkeyスクリプトを作りました。

// ==UserScript==
// @name           idn_fixer
// @namespace      http://jamadam.com/blog/
// @description    This fixes wrongly percent encoded domains in hrefs.
// @include        *
// ==/UserScript==

(function() {
var links = document.getElementsByTagName('a');
for (var i = 0; i < links.length; i++) {
    var pos1 = links[i].href.indexOf('//', 0) + 2;
    var pos2 = links[i].href.indexOf('/', pos1);
    var domain = links[i].href.substr(pos1, pos2 - pos1);
    if (domain.indexOf('%') != -1) {
        links[i].href = decodeURI(links[i].href);
    }
}
})();

idn_fixerをインストール

初めてのGreasemonkeyスクリプトなので作法とか間違ってるかも知れません。

Entry: 縮.jpに待望の「縮AGAIN」ボタンを搭載

縮.jpに待望の「縮AGAIN」ボタンを搭載

Initial post: 2009.10.08 | Last modified: 2009.10.16

縮.jp。7月に作って放置してたら10月になって話題になった。人生で一番集客した。そんな訳で、ネタを必要以上に膨らませるべく、システムを改修しました。見た目的にはあまり変化ありませんが、中身はほぼ丸々変わってます。特筆すべき変化は。。

待望の「縮AGAIN」ボタンを搭載

生成された短縮URLが気に入らなかった場合、このボタンを押すと別のURLを生成してくれます。なお、縮AGAINした場合、古いURLはしばらくして解放されます。

既設の短縮URLがあれば、短い順にご提案

今までは湯水のように新規作成してましたが、縮ボタンを押した際、まずは既設の短縮URLを提示するようになりました。縮AGEINすると短い順に既設URLが表示され、なくなれば新規作成されます。

転送時、末尾のゴミを可能な限り取り除く

Twitterでhttp://縮.jp/上これすげーみたいなつぶやきが多発していたので、こういう場合はhttp://縮.jp/上を検知して転送します。Perlでいうと、

$id =~ s/¥P{Han}.*//; 

となっています。漢字を表す正規表現なんて初めて知りました。

ちなみに、ファイルベースからPostgresqlに移行

パフォーマンスいいかなと思って、1件1ファイルなどというデータ管理をしてたんですが、IDがシーケンシャルに固定されるとか、逆引きできないとか、色々問題あったのでPostgresqlにしました。なお、ファイルベースのキャッシュの仕組みを導入したので転送時のパフォーマンスは以前と変わらない。はず。

APIにも変更あり

offsetというパラメータが新設されました。これは前述の既設URLの再利用と関連するもので、任意の既設URLを取り出すためのパラメータです。offsetを十分に大きくすると自動的に新規作成されます。通常は指定しないでください。

 

既知の問題

  • 元URLがbit.ly等ですでに短縮済みだった場合、iPhoneで転送されない。確かソフトバンクの仕様でiPhoneで多段リダイレクトできない。
  • Twitter用のいくつかのGreaseMonkeyスクリプトやアドオンで縮.jpへ飛べない。FirefoxのJavascriptのバグっぽい挙動が原因と思われる。対処法はこちら
  • Twitter周辺サービスで日本語ドメインが誤ってパーセントエンコードされているケースも見かけます。サーバサイドでの処理に問題があるのではないか(憶測)。
  • iPhoneの多くのアプリで開けない。おそらくアプリからwebkitだかのAPI的なものに渡すURLをpunycode変換してないのではないか(憶測)。対処法はこちらの12月15日の記事くらいしか見当たらなかった。

 

今後の予定

  1. 任意のIDを指定可能に
  2. 不人気文字を避ける仕組み
  3. 元URLがすでに短縮URLだった場合に展開してから短縮
  4. スパム対策

 

Entry: マルチプラットフォームなアプリ一覧

マルチプラットフォームなアプリ一覧

Initial post: 2009.01.14 | Last modified: 2009.08.01

いつでもMacOSとLinuxとWindowsを行き来できるように。

ブラウザ Firefox 定番ブラウザ。下記はおすすめプラグイン。
  • ViewSourceWith(任意のエディタでHTMLソースを表示。マック版は多少工夫しないと使えない。)
  • Firebug(WEB開発の便利ツールがいっぱい)
  • YSlow(WEB開発時のパフォーマンスチェック。その他、スクリプトなどを外部も含めて全て結合表示してくれたりもして超便利。)
  • FoxyProxy(サイト毎にプロキシを設定)
  • Html Validator(HTML文法チェック、実はMac版もあった)
  • Link Evaluator(ページ内の全リンクを検証)
  • Resizeable Textarea(ルーターの設定画面がマックで散々だったので導入)
  • Ubiquity(コマンド。今のところalcコマンド専用と化している)
  • XUL/Migemo(ページ内検索の機能拡張。Migemoは置いといて、正規表現検索は完全に使える)
メーラー Thunderbird 定番メーラー。下記はおすすめプラグイン。
  • Lightning(スケジューラー)
  • Provider for Google Calendar(Lightningをgoogleカレンダーと同期)
  • Google Contacts(アドレス帳をGoogleの連絡先と同期)
テキストエディタ jEdit Mac版は割と軽い。下記はおすすめプラグイン。
  • BufferTabs(バッファーをタブ表示)
  • Editor Scheme(フォントや色を一元管理)
  • FTP(リモートファイルの編集。SFTPにも対応)
  • Highlight(任意のキーワードをハイライト)
  • TextTools(ソートなど)
  • WhiteSpace(インデントの可視化に使える)
Editra 日本語入力に難あり。作者も認識してるけど直せないらしい。
Scintilla Text Editor EUC-JP不可。
Komodo Edit jEdit使うようになってから出番がめっきり減った。
ファイル転送

Filezilla mac版は驚くほど使いづらい。主な用途はファイラであるmuCommanderで事足りるので、Filezillaは今のところ不要。

波形編集 Audacity
オフィススィート OpenOffice 定番。下記はおすすめ機能拡張。 GanttProject 結構あやしい動きをするけどOPENPROJよりずっと使いやすい。今後に期待。
OPENPROJ プロジェクト管理
アーカイバ PeaZip Mac版なかった..どうしよう
ファイラ muCommander
動画エンコード HandBrake
マインドマップ XMind 中国製。結構おいしい操作性。でも、win版はよく落ちる。Mac版はちょっと前まで起動すらしなかったけど、最近のバージョンで改善。将来に期待。
メディアプレーヤー Songbird 最近本格的にiTunesから乗り換えたけど、特に問題ないんじゃないかと思う
Miro 動画専用かな。今のところ満足な出来。
Amarok
DTP Scribus インストールが激しく難しい
GIMP たいていの人はPhotoshopなんて要らないんじゃないかと思う。Perlでマクロも組める。
フォント IPAフォント OOoのPDF出力時にはTTFフォントが必要なようで、日本語用にIPAフォントがおすすめ。
UML Jude/community 国産。MacOSX版もざっと見たところ、普通に動く。

 

Entry: ブックマーク

ブックマーク

Initial post: 2009.05.22 | Last modified: 2009.05.22

TwitterでニュースFeedをフォローし出してからおもしろ記事がありすぎて全然追えない。

Entry: ブックマック

ブックマック

Initial post: 2009.05.21 | Last modified: 2009.05.21