上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

--/--|スポンサー広告||TOP↑

環境
Mac OS X 10.4.10 (PPC)
BathyScaphe 1.5 (110)
OnMyCommand 1.8.0

BathyScaphe の選択文字列を OnMyCommand の オブジェクト __OBJ_TEXT__ で取得してテキストファイルに書き出すと改行が反映されない問題について。

__OBJ_TEXT__ を % で渡す設定にして

echo "__OBJ_TEXT__" | ruby -ruri -n -e 'print URI.unescape($_)' > test.txt

などとしてもよいようですが、OMCEdit の編集ウインドウで "その他" タブを選び、"__OBJ_TEXT__ の改行コード" という項目を "Unix(LF) を Mac(CR) に変換" に設定すると

echo __OBJ_TEXT__ > test.txt

を実行するだけで改行が反映されるようになります。

しかしちょっと困ったことが。
echo が文字列の最後に改行を付加するので

「改行が CR に変換された __OBJ_TEXT__」+ 「echo が付加した LF 改行」

という形となり、選択部分の改行は CR なのに 最後だけ LF というヘンテコな内容になってしまうのです。
書き出したファイルはどうせ自分しか使わないんだからそのくらいどうってことないような気もしますが、選択部分が改行で終わっていた場合

文字列(CR)
文字列(CR)
文字列(CR+LF)

と、最後だけ Windows 改行になってしまい、テキストエディタで開いたときに改行が一つ分無視されることになります。
これはなんとなく嫌ですね。
なので

echo -n __OBJ_TEXT__ > test.txt

として echo の改行を抑止するか、または tr で改行コードを CR か LF に統一してしまうのがよいです。

LF で統一
echo __OBJ_TEXT__ | tr '\r' '\n' > test.txt
CR で統一
echo __OBJ_TEXT__ | tr '\n' '\r' > test.txt

ファイルに >> で追記する場合を考えると最後は必ず改行で終わっている方がよいので、echo -n より tr がおすすめですか。

crlf-20070729.png


07/29|Macコメント(0)トラックバック(0)TOP↑

環境
OS: Mac OS X 10.4.10 (PPC)

ネットワーク環境設定で、こんな感じの PAC ファイルを適用した「場所」をいくつか用意して

function FindProxyForURL(url, host)
{
if (shExpMatch(host, "*.imagegarden.net") || shExpMatch(host, "*.imgscan.com"))
return "PROXY XXX.XXX.XXX.XXX:XXXX";
else
return "DIRECT";
}


ときどきアップルメニューから切り替えて使っているのですが、ふと
http://www.cybersyndrome.net/evc.html
のときもプロキシを通したいと考えました。
本当に PAC ファイルが適用されているかどうかの確認用ですね。
でも *.cybersyndrome.net などと書いてしまうと使い勝手が悪いので
あくまで ENV Checker のページだけに適用したいわけです。

そこで検索開始。
しかしなかなか見つかりません。
かなり細かく解説されたサイトがたくさんあるのですが、特定の HTML だけ、という例文がない。
応用を利かすのが苦手な私は何事に関しても例文のあるサイトを最優先で探します。
需要ないのかそれとも探し方が悪いのかサンプルよこせサンプルなどと思いつつだらだらと検索。
「うぁ FindProxyForURL() の引数が url じゃん!」
と気づいたときはすでに 1 時間が経過。

要するに「引数 url が ... と等しければ」という JavaScript の条件式にすりゃいいんですよね。
こうしたらうまくいきましたよ。

function FindProxyForURL(url, host)
{
if (shExpMatch(host, "*.imagegarden.net") || shExpMatch(host, "*.imgscan.com") || url=='http://www.cybersyndrome.net/evc.html')
return "PROXY XXX.XXX.XXX.XXX:XXXX";
else
return "DIRECT";
}

JavaScript をちゃんと勉強している人なら 1 秒で気付きそうな話ではありますが。
普段コピペでつまみ食いばかりしているのでこういうときに苦労します。

PAC ファイルの書き方・使い方リンク
JavaScript または JScript を使った自動プロキシ ファイルの例
osaru: プロキシの自動設定
Proxy Client Autoconfig File Format
PROXY.PAC の作成例
Proxyサーバー続編
自動プロキシ設定について
暴想: プロキシを使うならPACを使うのが便利。
他にも山ほど。


07/13|Macコメント(0)トラックバック(0)TOP↑

(なんかこの記事はおかしい、あやしい。追記参照)

環境:
Mac OS X 10.4.10 (PPC)
ターミナル 1.5 - ウインドウ設定の文字セットエンコーディング: Unicode (UTF-8)

まずターミナルを起動して、以下を実行します。

$ echo "宮﨑あおい" | iconv -f UTF-8 -t UTF-16 > file.txt
$ echo "维吾尔自治区" | iconv -f UTF-8 -t UTF-16 >> file.txt

こんなテキストファイルが作成されます。
bom.png

テキストエディタのカーソルを移動して一行目と二行目の間を行ったり来たりしてみて下さい。
追記された二行目の行頭でカーソルが一瞬引っかかりますよね。
iconv で UTF-16 (LE でも BE でもないやつ) に変換されたテキストの先頭には必ず BOM がつくため、追記するたびに文中に見えない文字が増えていくのです。
このままでもとりたてて困ることはないものの、なんとなく気持ちが良くない。
そこで BOM を取り除く定番の方法があるのではと探したのですが、見つけられなかったため次のようにしてみました。

$ echo "宮﨑あおい" | iconv -f UTF-8 -t UTF-16 > file.txt
$ echo "维吾尔自治区" | iconv -f UTF-8 -t UTF-16 | tail -c +3 >> file.txt


先頭 2 バイトが BOM だそうなので、iconv の実行結果から tail -c +3 で 3 バイト目以降を取り出しています。
本当にこのやり方で正しいのかどうかはわかりませんが、今のところトラブルは起きていません。

追記 (070708)
そもそも「UTF-16 に変換してから BOM を削除したい」という考え方をしたのは

cat "UTF-8 のテキストファイル" | iconv -f UTF-8 -t UTF-16BE >> "iconv 経由で UTF-16 にしたテキストファイル"

を実行したときに文字化けして当惑したという経験がきっかけなのですが、ついさっき同じことを試したところ……あれ、文字化けしない?
いやそうなんですけどね。
Mac OS X 10.4.10 の時点で標準インストールされている iconv (GNU libiconv 1.9) がサポートする UTF-16 のエンコーディングは

UTF-16 (BOM 付き - ビッグエンディアン)
UTF-16BE (BOM 無し - ビッグエンディアン)
UTF-16LE (BOM 無し - リトルエンディアン)

の三種類で、UTF-16 (つまり BOM 付きビッグエンディアン) に変換してから書き出したファイルに BOM 無しで追記したかったら UTF-16BE に変換すれば事足りるはずなのです。
ではあのとき文字化けしたのは単なるポカミスだったのかもと思えてきました。
こう書くだけでいいのかもなと。

$ echo "宮﨑あおい" | iconv -f UTF-8 -t UTF-16 > file.txt
$ echo "维吾尔自治区" | iconv -f UTF-8 -t UTF-16BE >> file.txt


ようわからんので何かわかったらまた追記します。


06/29|Macコメント(0)トラックバック(0)TOP↑

環境:
Mac OS X 10.4.10 (PPC)
bc 1.06
iTunes 7.2

タイトルがちょっとわかりづらかったかも。
{1, 2, 3 ... 999, 1000} のようなリスト内の数値を repeat 文を使わずに合計する方法です。
AppleScript's text item delimiters を " + " に設定し、リストを足し算の計算式に変換してから bc に渡します。

set numList to {1, 2, 3}
set asdlm to AppleScript's text item delimiters
set AppleScript's text item delimiters to " + "
try
set calcString to (numList as string)
set AppleScript's text item delimiters to asdlm
on error
set AppleScript's text item delimiters to asdlm
return
end try
do shell script "echo " & quoted form of calcString & " | bc"

iTunes で選択されたトラックのサイズ合計も素早く求めることができます。

tell application "iTunes"
set sizeList to (size of selection)
end tell
set asdlm to AppleScript's text item delimiters
set AppleScript's text item delimiters to " + "
try
set calcSize to sizeList as string
set AppleScript's text item delimiters to asdlm
on error
set AppleScript's text item delimiters to asdlm
end try
set calcString to "scale=3; ( " & calcSize & " ) / 1024 / 1024"
do shell script "echo " & quoted form of calcString & " | bc"

(本当はこのあとに数値の大きさを見ながら MB やら GB やらに換算するスクリプトが続かなければならないのですが、iTunes がどういった基準で切り上げ/切り捨てを行っているのかいまひとつ把握できていないため、ここには書かないでおきます。
試行錯誤を繰り返せば iTunes のウインドウに表示される数値と全く同じ結果を求めることは可能だと思います。)

参考: bc

追記
do shell script は文字列をシェルスクリプトとして実行しますが
文字列を AppleScript として実行する方法があるのをすっかり忘れていました。
はい、run script です。

set x to "(100 + 20 + 30) / 15"
run script x

do shell script を実行 > シェルを起動 > bc を起動 > 計算
よりも
run script を実行 > 文字列を AppleScript としてコンパイル > 計算
のほうが若干速いのかもしれませんね。勘ですが。
bc と AppleScript では割り算をしたときの結果表示のされ方が異なるので、スクリプトの目的やその日の気分、好き嫌いなどによって使い分けると幸せになれるかもしれません。

bc
除算を行うとデフォルトでは計算結果を小数点以下切り捨てで表示する
scale=2 などと記述することで小数点以下を何桁まで表示するか指示できる
不正な計算式のときエラーを返さず空文字を返す (※do shell script の場合)
AppleScript
除算の結果をできる限り細かく表示しようとする
除算を行って割り切れても 10.0 のように小数点以下第一位まで表示する
不正な計算式のときエラーを返す

参考: OSAX/標準機能追加/run script


06/25|Macコメント(0)トラックバック(0)TOP↑

環境:
Mac OS X 10.4.9 (PPC)
OnMyCommand 1.8.0

OnMyCommand 用です。
以下のリンク先テキストファイルをディスクに保存して、OMCEdit で読み込むと実行できるようになります。
(メニューから読み込もうとしてエラーになる場合は OMCEdit のアイコンにドラッグアンドドロップでいけるようです。)
google_dialog.plist.txt

例えば、

As If a Million AppleScripters Cried Out In Horror (For Four Years) And Were Suddenly Silenced

waffle

という見出しを読んで、「なんだか意味不明。有名な言葉のもじりかな?」と思ったとします。
そうしたらテキストを選択して
sw1.png
コンテクストメニューから「Google で検索 (dialog)」を実行。
こんなダイアログが出るので
sw2.png

適当に編集して検索にヒットしそうな語句を抜き出し
sw3.png

OK ボタンを押してググる。
"As If a Million" "Cried Out In Horror" "And Were Suddenly Silenced" - Google 検索

どうやらスター・ウォーズらしい。

"I felt something, a disturbance in the network, as if a million mac zealots cried out in horror and were suddenly silenced," wrote poster "m50d," an allusion to a quote from the Star Wars movie series.

CIO Asia - Apple faithful learning to like oranges

もうちょっとググってみましょうか。
sw4.png

あったあった。

Ben: I felt a great disturbance in the Force, as if millions of voices suddenly cried out in terror, and were suddenly silenced. I fear something terrible has happened. You'd better get on with your exercises.
フォースに大きな騒乱を感じた。まるで何百万もの声が突然恐怖の悲鳴に変わり、突然静かになったような。何か恐ろしいことが起こったのだ。練習を続けなさい。

スター・ウォーズの鉄人!/スクリプト

あー、オビワンのセリフかー!

といった使い方をします。


06/18|AppleScriptコメント(0)トラックバック(0)TOP↑
プロフィール

AquaBowler

  • Author:AquaBowler
  • 現在の Mac 環境:
    iBook Late2001
    Mac OS X 10.4.11
フリーエリア
最近の記事
最近のコメント
最近のトラックバック
月別アーカイブ
カテゴリー
ブログ内検索
RSSフィード
リンク
del.icio.us
feed meter

RSS feed meter for http://kotoerisan.blog16.fc2.com/

FC2カウンター
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。