2006.09.21

JavaScriptで都道府県コード順ソート

ざっとググってみたら、JavaScriptの都道府県コード順ソートのソースが見当たらないみたいなので掲載します。
以前の記事と似ていますが、InDesignは関係ありません。

SrtingオブジェクトとArrayオブジェクトに都道府県コード順ソートのメソッドを追加します。

並びはJIS X 0401による都道府県コードに準拠しています。

都道府県以下は文字コード順ソートです。

使用例

"沖縄県い\r\n東京う\r\nインドい\r\n沖縄県あ\r\n東京い\r\n沖縄県う\r\n東京あ\r\n北海道う\r\nインドあ".kenSort(0);

myArray.kenSort(1);

引数0が昇順、引数1が降順です。降順っていうのは使わないと思いますが。

ソースコード

String.prototype.kenSort=function(order)
{
// 改行コードの割り出し
var lf = "";
RegExp(/\r\n|\r|\n/g).test(this)
lf = RegExp["$&"];

var tempArr = this.split(/\r\n|\n|\r/);
var sortedArr = tempArr.kenSort(order);
return sortedArr.join(lf);
}

Array.prototype.kenSort=function(order)
{
var kenArray = getKenArray();

// 都道府県順ソート
this.sort(
function(x, y)
{
// 引数が0か無しなら昇順
if(!order){return ken2int(x) - ken2int(y);}
// 引数が0以外なら降順
else{return ken2int(y) - ken2int(x);}
}
)

// 都道府県ごとの文字コード順ソート
var tempArray = new Array();
var tempArray2 = new Array();

for(i = 0; i < this.length; i++) // 配列の要素ごとになめる
{
for(j = 0; j < kenArray.length; j++) // 都道府県の配列でなめる
{
if(RegExp(kenArray[j]).test(this[i])) // 配列の要素が都道府県にマッチしたら
{
for(k = i; RegExp(kenArray[j]).test(this[k]) ; k++) // マッチしなくなるまで配列の次の要素を調べる
{
;
}
tempArray2 = this.slice(i, k).sort(); // 都道府県ごとのまとまりでソート
for(l = 0; l < tempArray2.length; l++) // テンポラリの配列に1要素ずつ追加
{
tempArray.push(tempArray2[l]);
}
i = k; // 配列が進んだ分を反映
}
}
}

return tempArray;
}

function getKenArray()
{
return new Array(
"北海道","青森県?","岩手県?","宮城県?","秋田県?","山形県?","福島県?",
"茨城県?","栃木県?","群馬県?","埼玉県?","千葉県?","東京都?","神奈川県?",
"新潟県?","富山県?","石川県?","福井県?","山梨県?","長野県?","岐阜県?",
"静岡県?","愛知県?","三重県?","滋賀県?","京都府?","大阪府?","兵庫県?",
"奈良県?","和歌山県?","鳥取県?","島根県?","岡山県?","広島県?","山口県?",
"徳島県?","香川県?","愛媛県?","高知県?","福岡県?","佐賀県?","長崎県?",
"熊本県?","大分県?","宮崎県?","鹿児島県?","沖縄県?",".");
}

function ken2int(str)
{
var kenArray = getKenArray();
for(i = 0; i < kenArray.length; i++)
{
var regexp = new RegExp(kenArray[i], "g");
if(str.match(regexp))
{
// 都道府県コード返却。配列の[0]がコード1に対応するので1足す
return i + 1;
}
}
}

2005.11.18

Sigmarion IIIでNavi2chとRieceを動かす

Sigmarion III上でEmacsCEを動かしたスクリーンショットを見たことがないので、一応上げてみるテスト。
白黒反転表示が好きなのですが、昼間の視認性と消費電力を考えるとノーマルで。
町田さんwceSKKSERVを動かしています。快適。

Navi2ch(実際には1ペインで使ってます)

20051118032354

Riece(IRCはあんまりやんないのですが)

20051118031233

2005.09.05

GarageBand入力支援ユーティリティGarageBand Toolbar Ver.0.0.1

GarageBand Toolbar Ver.0.0.1
for GarageBand v.1.1.0
Written by moyashi

GarageBandToolbar

「garageband_toolbar001.sit」をダウンロード

 GarageBand1の操作性を気のせいレベルで改善するユーティリティを作ってみました。
 え? 何で今さらGarageBandの「1」なのかって? そりゃそうです。だって、僕「2」持ってないもん。

■なんだこれは?

 GarageBandは、ユーザーが向上心を持ち始めたころにLogicが欲しくなるよう(偏見)、細かい操作がやりにくくなっています。
 特に、トラックエディタを開いてチクチクやり始めるとストレスがたまってきます。
 GarageBand Toolbarは、そのチクチクを少しだけやりやすくする目的で作りました。

■トラックエディタの「詳細」の「表示」切り替え支援機能

 まずGarageBandで気に入らないのが、トラックエディタの「詳細」にある「表示」がポップアップボタン操作なこと。
 「音符」、「ピッチベンド」、「モジュレーション」、「サステイン」。これらは、できれば同時に見比べながらエディットしたいところです。
 しかし、実際にはそれができないばかりか、このうちの一つをポップアップボタンからメニューから選択して表示させるようになっています。
 これが激しく使いにくい。せめて、カチカチとワンアクションで切り替えられればいいのに。そう思います。

 見たまんまですが、ウインドウの上に四つ並んだボタンを押すと、それが切り替えられます。

 それ以上でもそれ以下でもありません!

■トラックエディタの「拡大/縮小レベル」の切り替え機能

 もう一つが、トラックエディタの「拡大/縮小レベル」のトグル動作による切り替え機能です。細かいパターンを見たり、大づかみをしたりと「拡大/縮小レベル」は切り替えながら使いたいところです。

 「拡大/縮小レベル」は、拡大時はこれぐらい、縮小時はこれぐらい、と2段階あれば十分だと思います。また、特に拡大時はコレと決めた「拡大/縮小レベル」に決め打ちしたいのが普通でしょう。GarageBandではこの操作をスライダーで行なうようになっています。大づかみしたり、細かい作業をしたりする度にいちいちアナログライクな操作で調整しなければならず、作業効率が落ちます。
 希望の「拡大/縮小レベル」に一発で設定するのはちょっと無理でしょう。

 GarageBand Toolbarを使うと、二つのスライダーで設定した「拡大/縮小レベル」の間を交互に切り替えできます。

■GarageBandが表に無いときは消えてほしい!

 GarageBand Toolbarはすべてのウインドウの最前面に表示させるようになっています。
 だからToolbar的な使い方ができるわけですが、GarageBandが表に無いときも前面に表示されます。
 これはたまらん! うざすぎる! そう思うのが普通の感覚でしょう。

 技術的には解決できる問題のはずですが、GarageBandのクリエータ名の情報が必要です。info.plistには「band」とありますが、これではなかった!

 よく分からないのでそのままにしてあります。

■バグ?

 GarageBandはAppleScriptに対応していないので、UI Element Scriptingで泥臭く制御しています。
 トラックエディタが表示されていないときでも、トラックエディタをこじあけて操作をするようにしてありますが、何かの拍子にこの動作がうまくいかなくなることがあります。
 トラックエディタを表示さえしていれば問題無いかと思いますが、これはGarageBandを起動し直すと直るようです。


2005.09.04

iTunesの曲のタグを検索置換するAutomator用Action

iTunesの曲のタグを置換するAutomator用Actionを作ってみた。
無論、Mac OS X Tiger用です。

「RenameItunesItems_a1.sit」をダウンロード

replaceitunesitems

ものすごい適当な作りだけど一応動いたので、だれかに試してもらうのだ。
反応あったら直していく。

今のところは、曲名しか検索置換できない。

例えば、こんなことができる。

元の曲名:シベリアの熱い夜

検索文字列:熱い
置換文字列:寒い

処理後の曲名:シベリアの寒い夜

置換文字列を空白にしとくと、検索文字列を削除する。

2005.08.25

EyeTV 200で録画したファイルをPocket PC(Windows Mobile)で外に持ち出す

EyeTV 200は、MPEG-4をリアルタイムエンコードできる、Mac OS X上において貴重なデジタルTVレコーダー。

録画したファイルをPSP用のMPEG-4に書き出すこともでき、変換は用意されたメニューを実行するだけと簡単。問題無く再生できるが、MPEG-4として録画していても、書き出し時に再エンコードが必要だ。

EyeTV 200でリアルタイムエンコードしたMPEG-4を、再エンコード無しでネイティブ書き出しすることもできる。この場合は書き出しに、ほぼファイルのコピー程度の時間しかかからない。

ファイルを小さくしようとすると、解像度352x240(30fps)、動画512kbps/音声64kbps(44.1kHz)ぐらい(カッコ内は固定)でバランスされるが、これはそのままPocket PC(Windows Mobile)用の動画プレイヤー、TCPMP(旧名BetaPlayer)で再生できた。

解像度352x240がEyeTV 200で録画できる最小サイズなので、Pocket PC(Windows Mobile)の液晶の解像度より少し大きくなってしまい、再生時にリサイズをかけると画面の崩れが気になるが、TCPMPでは原寸再生にも対応しており、あまった分を外に逃がせる。若干左右が切れてしまうことになるが、気になるほどではない。

つまり、最初からMPEG-4の低ビットレートな設定で録っておけば、ほぼファイルコピーだけの手間でPocket PC(Windows Mobile)にて再生可能ということ。

このEyeTV 200ネイティブなMPEG-4、残念ながらPSPでは再生できない。
Zaurusのmplayerでも一応再生できるが、なぜかガタガタで見られたものではなかった。

一応蛇足ながら書いておくと、EyeTV 200が保存した書き出し処理前のファイルにも拡張子.mpgが付いているが、これは一般的な形式のMPEGファイルではないらしく、これをQuickTime PlayerやVLC、MPlayer OSXで再生しようとしても無理。一度は「書き出し」の処理を経由しないと一般的な動画プレイヤーで再生することはできないようだ。

2005.08.24

Safariの文字コード自動判定補助ユーティリティ「SafariStalker Ver.0.2」

SafariStalker
Ver.0.2
(Freeware)

■これは何か?

 Safariは日本語のテキストエンコーディングの自動判定が弱く、charsetの指定が無いと、文字化けしてしまいがちです。
 その日本語のテキストエンコーディングの自動判定を補うソフトウェアです。
 charset指定が無いテキストファイルの場合でも、ほぼ正確に判定します。

 テキストエンコーディングを自動判定したら、Safariのテキストエンコーディングを自動的に切り替えます。
 これによって文字化けを防止します。

SafariStalker02

「SafariStalker0.2.sit」をダウンロード

一応、Panther + Safari1.3でも動くようにしたはず。

おまけ機能(Up Dirボタン)も搭載。
押すと、最前面で表示しているページの、一つ上の階層を表示します。

http://www.orz.org/current/



http://www.orz.org/

■履歴

2005/08/24 Ver.0.2

・表示URLが切り替わると無差別にテキストエンコーディングを切り替えていたものを、実際にテキストエンコーディングに変化があったときだけ切り替えるように。

・おまけ機能「Up Dir」を実装

・Panther + Safari1.3の環境で、「Default」ボタンが効いていなかったのを修正。

2005.08.22

Safariの文字コード自動判定補助ユーティリティ「SafariStalker Ver.0.1」

SafariStalker
Ver.0.1
(Freeware)

「SafariStalker0.1.sit」をダウンロード

SafariStalker01

■これは何か?

 Safariは日本語のテキストエンコーディングの自動判定が弱く、charsetの指定が無いと、文字化けしてしまいがちです。
 その日本語のテキストエンコーディングの自動判定を補うソフトウェアです。
 charset指定が無いテキストファイルの場合でも、ほぼ正確に判定します。

 テキストエンコーディングを自動判定したら、Safariのテキストエンコーディングを自動的に切り替えます。

■Safariの文字化け

 Safariの文字化け問題はいろいろあるようですが、このソフトウェアでフォローするのは、テキストエンコーディングの自動判定だけです。

 例えば、テキストファイルを直置きしているようなリンク先なんかの場合は、まず化けずには済まないでしょう。
 見るページの傾向にもよるかもしれませんが、やむにやまれず、自分でテキストエンコーディングを選択する局面が結構あるものです。
 また、一度デフォルト以外に設定すると、以降、そのテキストエンコーディングでしか表示してくれないので、いちいちデフォルトに戻したりを繰り返す必要があるのも、ストレスの一因になっています。

 これがほとほと嫌んなって作りました。

■使い方

 Safariといっしょに起動して使います。

 ウインドウが、Safariがアクティブなときのみ表示されるGlobalFloatingWindowに設定されています。
 自分自身がアクティブなときも非表示なのがオマヌケですが。

・「Auto Detect」ボタン

 Safariの一番前にあるウインドウで表示中のページのテキストエンコーディングを自動判定して、テキストエンコーディングを切り替えます。

 1回押せば、1回判定、1回切り替えします。

・「Default」ボタン

 Safariの一番前にあるウインドウで表示中のページのテキストエンコーディングを「デフォルト」に戻します。

・「Keep Watch」チェックボックス

 チェックボックスをONにすると、Safariの一番前にあるウインドウで表示中のページのテキストエンコーディングを自動判定して、テキストエンコーディングを切り替えます。
 「Auto Detect」ボタンとの違いは、常にSafariのSafariの一番前にあるウインドウで表示中のページのURLを監視していて、切り替わったとほぼ同時に1回判定、1回切り替えすることです。

 これをONにしておきさえすれば、基本的に文字化けとはおさらばできることになりますが、ページが切り替わることにリロードされることになるので、ちょっとウザいかも。

■注意

 運悪く、ページに適当なcharset指定が無いと、独自にページをダウンロードしてきてテキストエンコーディングを判定するので、非ブロードバンドではちょっと無理臭いです。
 Safariから渡されるページのSourceがUTF-16になってしまっているから、これはしょうがないみたいです。

■動作確認環境

 Mac OS X Tiger (10.4.2) + Safari2.0 (412.2.2)で動作確認しました。
Mac OS X Panther (10.3) + Safari1.3なら動いてもおかしくない。
動かなかった……。多分、OSバージョンの判定がまずい。
 ※OSがUI Scriptingに対応してないといけないので、10.3以前は無理です。

■履歴

2005/08/22 Ver.0.1

■免責

 何の責任も取りません。

■著作権

 moyashiにあります。
 放棄しません。

 http://moyashi.air-nifty.com/hitori/

■再配布

 相応な理由が無い限り、しちゃいけません。

2005.08.17

Mac OS X用AppleScript/Perlの開発環境「Script Debugger3.0」「Affrus1.0」

 Late Night Software Ltd.の「Script Debugger 3.0」と「Affrus 1.0」を買った。バンドルキャンペーンをやっていたからだ。二つで$239。これを高いと見るか安いと見るか。

lns

 いずれも、Mac OS Xにおいて貴重な開発環境。「Script Debugger 3.0」はAppleScriptの、「Affrus 1.0」はPerlの開発環境で、それぞれデバッガが付いているところに価値がある。

 その昔は「Script Debugger」に日本語版が存在したので取りざたされることも多かったようだけれども、国内での販売をやめてからは存在は忘れられがちのようだ。

 デバッガの機能である、ステップ実行、ブレークポイントの設定、変数モニタは開発環境の基本とはいえ、便利過ぎ。これ無しでのスクリプティングは、もはや考えられないほど。
 小規模なスクリプト、相手が小さいスクリプトなら標準の「スクリプトエディタ」でもいいんだけど、オブジェクト構造が複雑怪奇なAdobeアプリなんかだと、もうスクリプトエディタなんかではやってらんない。

 properties of someObject

みたいなことをして、ログを見てプロパティの項目や中身を調べるようなことは日常的にやるけれども、これが整理されて表示されるというだけでもありがたい。

 「Script Debugger 3.0」の魅力はもう一つある。というか、デバッガよりこっちに真の魅力があるといってもいいほどなんだけど、それは「Explorer」機能。これは、tell対象となるアプリケーションの、そのときのすべてのオブジェクトとプロパティを、地引き網よろしくしらみつぶしに調べてきて、階層構造にして表示してくれるもの。
 初めてスクリプティングをするアプリケーションでも、スクリプティングの方針は、これを見れば一撃。
 「Shrink your workload and expand your productivity」といううたい文句はダテではない。

 「Explorer」機能の有用性はこれにとどまらない。「Update」ボタンを押すと、この階層表示されたオブジェクト、プロパティ群を最新の状態にしてくれるのだけど、変更があったプロパティに赤く色が付く! ものすごく複雑なオブジェクトの、どこに目当てのプロパティがあるのか皆目見当が付かない場合でも、アプリケーションを操作して、その結果を 「Explorer」で見れば、変化のあったところが指し示されるのですぐ分かってしまう。

 まるでラピュタの位置を光条で知らせる飛行石のような機能だと表現してみようか。

 おっと、「Affrus」のことを忘れていた。これは、Perl版「Script Debugger」とでもいうべきもので、しかも使用感はエディタのように手軽。あまりPerlを知らないのだけど、これがあれば覚えも早いだろうし、Mac OS X環境においては貴重なPerlのデバッガ付き開発環境で、前から気になっていたので、いっしょに買ってみた。
 EclipseのepicはMac OS Xでも動くのだけれど、肝心なデバッガがWindows専用で悲しい思いをした。
 多分、Mac用のPerlのデバッガ付き開発環境としては唯一? perl -dはありますけどね……。

2005.08.16

Mac OS X用PSP/PocketPC向け動画エンコード補助ツールffmpegFrontEndを作ろうかな

 ガスガス見て捨てる使用スタイルに合ったPSP/PocketPC向け動画のエンコード補助ソフトウェア(Mac OS X用)を作ってみる気になった。
こういうのは、少しでも操作が面倒だと続かない。EyeTVで録画した動画ほか動画ソースを上流に、下流であるPSP/PocketPCへの動画のインストールまで一直線でないとダメだ。

ffmpegfrontend

 とはいっても実体はffmpegのフロントエンドで、携帯動画変換君みたいなのがMac OS X向けにもほしいということ。
 Windows用のソフトウェアである携帯動画変換君は操作が簡単で使いやすい。すばらしい。Mac OS X上にもぜひほしい。なぜなら、うちにあるPC/AT互換機は800MHzのPentium IIIマシンだけだから(涙)。
 基本機能のほか、PSPの動画ディレクトリからの動画削除と、フラッシュの容量を計算しながらの弾倉フォルダからの再装填、ftpサーバへの自動アップみたいなのを考えている。
 といっても、ソフトウェアの開発を始めたのは昨日今日のことなので、いろいろ調べまくり。
 とりあえず動くようになったけれど、問題は山積。公開できるのはいつになることやら?
 公開するにしても、ffmpegと関連ライブラリをいっしょに配布することにどんな問題があるのか調べなきゃいけないのだけど、それが一番やっかい。
 フロントエンドは配布するけど、ffmpegはXcode入れてmakeしてね、っていうんじゃ、普通の人はきついだろうからね。
 「Mac OS Xにいいエンコード用のツールが無い」ってよく聞く文句も、ffmpegをmakeすれば済む話なのに、それができていない人がほとんどだということの証だし、明確に「ffmpegは難しくてよく分からないのでそれ以外で」というご指定がある場合も多い。

 iBukkomiは気が向くまで放置。
 スリープからの自動起動後、EyeTVがスリープを妨げることがあるようなので、処理中のものがあるかどうか、一定時間内に始まる予約が無いかを見て、システムをスリープさせる睡眠補助機能とか、自動巡回機能、RD-X??向けのメールを飛ばす機能とかを考えていたけど、今の僕の手続き型バリバリ&アドホックなコーディングスタイルだと全体像が見えづらくてキツいので、コードをクラスやモジュールに分割できるようになってからでいいや。

2005.08.11

EyeTV 200用番組登録ユーティリティ「iBukkomi Alfa 0.0.3」

今更ですが、フリーウェアです。
複数選択して、一気に番組予約が可能なようにアップデートしました。
その他諸々。

・IME制御を組み込んで、リストのところでキー操作がいつでもできるように
・検索結果が表示されると同時に、リストにフォーカスをジャンプするように
・Ctr + G、もしくはEscで検索窓に戻れるように
・ダイアログによる告知がうざいので無くした(ウインドウ上のテキストで表現)
・複数選択に対応
・ウインドウのサイズ保存、復帰

「iBukkomi-a003.sit」をダウンロード

ibukkomia003

blogparts

  • Last.fm
  • twitter

Recent Comments

無料ブログはココログ