云々、別に此れと云って何も無いんでアレですが。
一應 shebang (Script の 1 行目) の記述を分けています。
#! MacJGAwk#! MacPerl#! SedMac#! perl#!/opt/local/bin/* (MacPorts)#!/usr/bin/env * (env 任せ。python では標準?)#!/usr/bin/* (System Default)#!/usr/local/bin/perl (多分 CGI 用)Twitter に投稿された畫像丈け見るというのが、一寸丈け面倒臭いのでちょちょいとやっつけてみた(雜)。
#!/usr/bin/env zsh
[ $# -gt 0 ] || { echo "Usage: $0:t https://twitter.com/{*ID*}"; exit; }
for u in "$@";
do
u=${u#*twitter.com/}; u=${u%%/*};
curl -sSL "https://twitter.com/$u/media" | tr '"' '\n' | grep 'pbs\.twimg\.com/media/' | sed 's/:[a-z]*$//';
done |
sort -u |
while read u; do curl -L $u\:orig -o $u:t; done;
んで、畫像が Instagram のだと更に面倒臭い。
#!/usr/bin/env zsh
[ $# -gt 0 ] || { echo "Usage: $0:t https://twitter.com/{*ID*}"; exit; }
for u in "$@";
do
u=${u#*twitter.com/}; u=${u%%/*};
curl -sSL "https://twitter.com/$u" | tr -s '"' '\n' | grep 'instagram\.com/p/';
done |
sort -u |
while read u;
do
curl -sSL "$u" | grep _sharedData | tr -s ',' '\n' | grep '\(display\|video\)_url' | tr -s '"' '\n' | grep '_n\.';
done |
sed 's/\\u0026/\&/g' |
sort -u |
while read u; do curl -L $u -o ${u%\?*}; done;
Instagram の方の Account から取ってくる丈けなら簡単になるかと思ったら、まぁそんなでもないけど。
#!/usr/bin/env zsh
[ $# -gt 0 ] || { echo "Usage: $0:t https://www.instagram.com/{*OWNER_USERNAME*}/"; exit; }
for u in "$@";
do
u=${u#*instagram.com/}; u=${u%%/*};
curl -sSL "https://www.instagram.com/$u/" | grep _sharedData |
perl -ple 's/^.*?"shortcode":[[:blank:]]*"//; s/"shortcode":[[:blank:]]*"/\n/g; s/",.*$//gm' |
while read id;
do
curl -sSL https://www.instagram.com/p/$id/ | grep _sharedData | tr ',' '\n' |
grep '\(display\|video\)_url' | tr -s '"' '\n' | grep '_n\.';
done;
done |
sed 's/\\u0026/\&/g' |
sort -u |
while read u; do curl -L $u -o ${u%\?*}; done;
識別信号 で地方局を選択出来る様になってゐたので変更。
あと、録音して聞けない儘だと何の番組だったか判らなくなってきたので File name に文字列を追加出来る様にも。
9月に入った途端、以前の Stream が使えなくなりましたが、だらだらと作業してたら対応出来たのが今頃に。
#!/usr/bin/env zsh
[ $# -gt 1 ] || {
echo "Usage: $0:t (r1|r2|fm) MINUTES [bk(osaka)|ck(nagoya)|fk(hiroshima)|
hk(sendai)|ik(sapporo)|lk(fukuoka)|zk(matsuyama)|ak(tokyo)]? [TITLE]?";
exit;
}
case ${1:l} in
(r2) X=( 511929 ak );;
(r1) case ${3:l} in
(bk|osaka) X=( 512291 bk );;
(ck|nagoya) X=( 512072 ck );;
(fk|hiroshima) X=( 512086 fk );;
(hk|sendai) X=( 512075 hk );;
(ik|sapporo) X=( 512098 ik );;
(lk|fukuoka) X=( 512088 lk );;
(zk|matsuyama) X=( 512103 zk );;
(ak|tokyo|*) X=( 511633 ak );;
esac;;
(fm|*) case ${3:l} in
(bk|osaka) X=( 512070 bk );;
(ck|nagoya) X=( 512074 ck );;
(fk|hiroshima) X=( 512087 fk );;
(hk|sendai) X=( 512076 hk );;
(ik|sapporo) X=( 512100 ik );;
(lk|fukuoka) X=( 512097 lk );;
(zk|matsuyama) X=( 512106 zk );;
(ak|tokyo|*) X=( 512290 ak );;
esac;;
esac;
ffmpeg -i http://nhkradio$X[2]${1:l}-i.akamaihd.net/hls/live/$X[1]/1-${1:l}/1-${1:l}-01.m3u8 \
-bsf:a aac_adtstoasc -c copy -t $[60 * $2] $(date +%F-%H%M%S)-nhk-$1-$3-$4.m4a;
らじらー! サンデー を osaka で録音すると 24〜5分で 403 Forbidden になり、接続が切れます。何故かは分かりません。osaka 以外では問題ない様です。と、思ってゐたら matsuyama, hiroshima でも 途中で切れてゐました。常に複数の局を記録する様にしてゐたのに、結局聞く事が出来ませんでした。迚も嫌な気持ちにはなりました。
ffplay に変更すると単に聴く丈けにも出来る筈。
( Simul Radio | CSRA ) 用も作成。Port number が在ると mimms は上手く扱えない様なので ffmpeg に割り振る様にしてみた。
-codec copy Option を付けるのを忘れてゐたので追加。
/bin/sh が bash でない場合も、 dash で実行できる様には修正しました。なので ash でも大丈夫なのかな? sh でも大丈夫な筈ですが、どうなのでしょう?
参考: Bashism
#!/bin/sh
[ $# -gt 1 ] || {
echo "Usage: $(basename $0) STATION-NAME MINUTES [TITLE]?
Station Name:
北海道: sankakuyama | fmjaga | fmwing | FmKushiro | fmwappy | fm837 | radioniseko |
iruka | radiokaros | fmapple(765fm) | eniwa | otaru | shiroishi |
東北: radiomorioka | radio3 | fmmotcom | seawave(fm-iwaki) | aizu | yutopia | yokote | miyako |
ishinomaki | baywave | fmizumi | ringo | natori | minamisoma | kocofm | rikutakata |
odagaisama | aozora | kamaishi | befm | kiritampo | cassiopeia(779.jp) | taihaku |
信越: kento | karuizawa | sakudaira | azumino |
関東: palulun | flower-tv(fm767) | smile | shonanbeachfma | radioshonan | redswave | tsukuba |
tachikawa | kawasaki | kiryu.fm | totsuka | FmSalus | chofu | maebashi | katsushika |
fmsagami | rainbowtown | kaon | radiocity(chuo_fm) | takahagi | kawaguchi | fmuu | hitachi |
東海: portwave(cty-fm) | ciao | mid-fm761 | FmOkazaki | toyota(loveat) | suzuka | izunokuni |
北陸: fmn1 | harbor779 | radiomyu |
近畿: tanba(fukuchiyama) | fmyy | FmMiki | hirakata | genki | FmTanabe | jungle | banban |
beachstation | minoh | yesfm | KyotoLivingFM | aiai | hasimoto | radiocafe | tango |
fmmoov | radiosweet | fm805(tanba.info) | honey | radiomixkyoto |
中国: darazfm |
四国: takamatsu | B-FM791 | fmsun |
九州: sunshinefm | amami | shimabara | fm-kitaq | starcorn | comiten | hibiki | nobeoka | ginga |
沖縄: nirai | fmishigaki | fm-uruma | fm21 | lequio | toyomi |
okiradi | nanjo | motob | kumejima | ginowan | ginowancity ";
exit;
}
case $1 in
(fmishigaki)
HOST=118.21.140.45/Push1 ;;
(darazfm)
HOST=121.1.145.25:8080/streaming.asf ;;
(fmsagami)
HOST=122.29.249.8/fmsagami_simul ;;
(765fm|fmapple)
HOST=202.241.170.47:8080 ;;
(FmSalus)
HOST=210.253.220.164 ;;
(fukuchiyama|fm-tanba|tanba)
HOST=211.1.40.29/tanba ;;
(fmn1)
HOST=android.fmn1.jp/live/ ;;
(flower|flower-tv|fm767)
HOST=flower-tv.net/simul ;;
(fmwappy)
HOST=fmwappy.aa0.netvolante.jp:8080 ;;
(CFM779|cassiopeia)
HOST=netradio.fm779.live-on.net:10779/779 ;;
(maebashi)
HOST=radio.maebashi.fm:8080/mwave ;;
(radioniseko|sankakuyama)
HOST=wm2.hvc.co.jp/$1 ;;
(ciao|fmjaga|fmwing|radio3|radiomorioka|radioshonan|shonanbeachfm|shonanbeachfma|sunshinefm)
HOST=simul.freebit.net/$1 ;;
(B-FM791|FmKushiro|FmMiki|FmOkazaki|FmTanabe|KyotoLivingFM|fm837|kiryu.fm|mid-fm761)
HOST=simuledge.shibapon.net/$1 ;;
(comiten|fm-kitaq|fmlive)
HOST=st1.shimabara.jp/$1 ;;
(shimabara)
HOST=st1.shimabara.jp/fmlive ;;
(aiai|amami|aozora|azumino|fm-uruma|iruka|kamaishi|kaon|kento|nanjo\
|okiradi|radiocity|redswave|rockets785|sakudaira|sakudaira|smile|starcorn)
HOST=hdv.nkansai.tv/$1 ;;
(baywave|fmizumi|fmmotcom|fmyy|hasimoto|ishinomaki|karuizawa|kocofm|minamisoma\
|miyako|motob|natori|odagaisama|radiokaros|rikutakata|ringo|seawave|toyomi)
HOST=hdv2.nkansai.tv/$1 ;;
(aizu|banban|befm|chofu|hibiki|jungle|katsushika|kawasaki|kiritampo|kumejima|nirai\
|radiocafe|rainbowtown|tachikawa|takahagi|totsuka|toyota|yesfm|yokote|yutopia)
HOST=hdv3.nkansai.tv/$1 ;;
(beachstation|eniwa|fm21|fmmoov|fmsun|fmuu|hirakata|izunokuni|kawaguchi\
|lequio|nobeoka|palulun|portwave|radiomyu|suzuka|takamatsu|tango|tsukuba)
HOST=hdv4.nkansai.tv/$1 ;;
(fm805|genki|ginga|ginowan|ginowancity|hitachi|honey|minoh|otaru|radiomixkyoto|radiosweet|shiroishi|taihaku)
HOST=hdv5.nkansai.tv/$1 ;;
(harbor779)
open 'http://www.web-services.jp/harbor779/dewplayer-mini.swf?mp3=http://211.11.77.51:8000/;stream.nsv&autostart=1';
exit;;
(*)
echo not implement;
exit ;;
esac;
case $HOST in
(*:*)
ffmpeg -i mmsh://$HOST -t $((60 * $2)) -c:a copy $(date +%F-%H%M%S)-$1-$3.wma;;
(*)
mimms -t $2 mms://$HOST $(date +%F-%H%M%S)-$1-$3.wma;;
esac;
JCBA も書いておく。
追記1: JCBA のは Audio Track が MP3 なので ffmpeg 等での抽出時に判るように file name に追加してみた。
追記2: 2015年7月に配信方式が變更されてゐましたが、やっとこさ對應出來ました。
追記3: MP3 Streaming に変更されました。
#!/bin/sh
[ $# -gt 1 ] || {
echo "Usage: $(basename $0) STATION-NUNBER MINUITES [TITLE]?
Station Nunber:
北海道: [001:はな] [002:もえる] [003:Airてっし]
東北:
青森: [004:アップルウェーブ]
岩手: [005:ONE]
山形: [006:モンスター] [007:NCV] [008:い〜じゃん おらんだ] [009:ハーバー]
福島: [010:ポコ] [013:きたかた]
宮城: [011:いわぬま] [012:H@!]
関東:
神奈川: [014:湘南ナパサ] [015:ブルー湘南] [016:鎌倉] [017:おだわら] [018:湘南マジックウェイブ] [096:やまと]
埼玉: [019:チャッピー]
千葉: [020:うらら] [021:かずさ] [022:成田]
茨城: [023:だいご] [024:かしま]
山梨: [025:甲府] [026:ふじやま] [027:ふじごこ] [028:高崎]
群馬: [029:太郎] [030:OZE]
東京: [031:西東京] [032:むさしの] [033:えどがわ]
信越:
新潟: [052:しばた] [053:ながおか] [054:ゆきぐに] [094:KENTO] [095:J上越]
長野: [055:LCV] [056:いいだ]
東海:
静岡: [034:Haro!] [035:IS] [036:g-sky 76.5] [037:富士山GOGO] [038:ボイスキュー] [039:マリンパル] [040:Hi!] [041:f] [042:COAST-76.7MHz]
岐阜: [043:PiPi] [044:わっち] [045:Hits]
愛知: [046:United North] [047:SANQ] [048:i-wave] [049:ななみ]
三重: [050:いなBee] [051:なばり]
北陸:
富山: [057:富山シティ] [059:となみ] [058:たかおか]
石川: [060:ななお] [061:かなざわ] [062:こまつ]
近畿:
滋賀: [063:草津]
京都: [064:いかる] [065:うじ] [066:まいづる]
大阪: [067:ちゃお] [068:うめだ Be Happy! 789] [069:HANAKO 82.4MHz]
兵庫: [070:ハッピーいたみ] [071:ハミング宝塚] [072:さくら]
奈良: [073:ならどっと] [074:ハイホー] [097:五條]
和歌山: [075:バナナ]
中国:
広島: [078:BINGO] [081:おのみち] [082:ちゅーピー] [083:はつかいち]
岡山: [079:モモ] [080:くらしき]
山口: [084:COME ON!] [085:しゅうなん]
四国:
愛媛: [076:バリバリ] [077:がいや]
九州:
福岡: [086:八女] [093:Dreams]
大分: [088:ゆふいん] [089:NOAS]
熊本: [090:Kappa] [091:791]
佐賀: [092:からつ]";
exit;
}
ffmpeg -i http://musicbird.leanstream.co/JCB$1-MP3 -t $((60 * $2)) -c copy $(date +%F-%H%M%S)-$1-$3.mp3;
[ $? -lt 2 ] && exit;
ffmpeg -i http://musicbird.leanstream.co/JCB$1-MP3 -t $((60 * $2)) -c copy $(date +%F-%H%M%S)-$1-$3.mp3;
番號で選局した方が置き換えたりする處理が要らないので、やっぱりそうする亊に。全てコミュニティFM局の名前なので番號の横に付いてる名前から { FM, エフエム, えふえむ, ラジオ, ラヂオ, レディオ } 等を取っ拂いました。
文化放送:超!A&G も getfmsListHD.php の中身(XML) を見て <cryptography>true</cryptography> でない <server>/<app>/<stream> に Access してみたら聞けた。でも icraft.fc.llnwd.net の方は Error になって解らない侭。
追記: 映像付きの放送もあるので、記録する際に Video Track を削除したら駄目でした。
#!/usr/bin/env zsh
[ $# -gt 0 ] || { echo "Usage: $0:t MINUITES [TITLE]?"; exit; }
for sd pp in {2,2} {2,1} {1,2} {1,1};
do
ffmpeg -i rtmp://fms-base${sd}.mitene.ad.jp/agqr/aandg${pp} -c copy -t $((60 * $1)) $(date +%F-%H%M%S)-agqr-$2.mp4;
[ $? -lt 2 ] && exit;
done
WREP は -codec copy を使って Error が出ない拡張子が、今の処 aac/adts しか見つからないけど、保存後に m4a とかに変換しても QuickTime Player で開く事も出来ないし。VLC と ffplay でしか聞けないのは一寸面倒臭いんで、仕方なく適当な Format に変換してみた。元 Source の Bitrate は 48kbps 程度ですが MP3 だと最低限 96k 程度無いと音質が酷くなるので、そういう設定に。まぁ、でも MP3 の音質上げたいなら WAVE で保存して LAME の最適な設定を探せばいいのか。
#!/bin/sh
[ $# -gt 0 ] || { echo "Usage: $(basename $0) MINUITES [TITLE]?"; exit; }
ffmpeg -i http://139.99.4.27/stream -c:a libvorbis -b:a 96k -t $((60 * $1)) $(date +%F-%H%M%S)-wrep-$2.ogg;
# or
ffmpeg -i http://139.99.4.27/stream -c:a libmp3lame -b:a 96k -t $((60 * $1)) $(date +%F-%H%M%S)-wrep-$2.mp3;
Radiko は色々と情報が多いので検索すればどうにかなる筈。
追記: なんと Soundflower という Audio 出力を入力に向けてくれる System Extension があるので、何でも Browser で再生する丈けで好みの Applicaton で録音できる樣です。解決策って意外な處にあるなぁ。
VLC でも ストリーム/エクスポートウィザード shift+command+W で簡單に保存出來るみたい。變換し乍ら保存も出來るし。
「ついっぷる」、10月でサービスを終了 と云う事で、そういえば何か Shell Script 書いてたな…と思って探したら 日々の CSS & Shell Script に画像 Get 用のが在りました。今でも使える様ですので其の儘放置ですが、手元の Bookmarks (7 matches) を確認すると、最新のモノでも 2015年でした。
FgG presents 小松未可子と優木かなの★★★★★★ を月毎に Get して Extract する。番組が終わってしまったので、もう出してもいいかなと思いまして。
#!/usr/bin/env zsh
[ $# -ne 0 ] || { echo "Usage: $0:t YYYY MM monthly(s)."; exit; }
for y m in "$@";
do
curl -L http://www.joqr.co.jp/fgg/$y/$m/ | grep 'javascript:player' | tr -s '"'"'" '\n' | grep fgg;
done |
while read i;
do
u=$(curl -L http://www.joqr.net/fgg/player/$i.html | grep '<iframe' | cut -d '/' -f 6 | cut -d '?' -f 1);
f="${i[4,7]}-${i[8,9]}-${i[10,11]} $u";
ffmpeg -i "http://media01.storage-dag.iijgio.com/joqr1134_fivestars/$u.flv" -vn -c:a copy "$f.mp3";
id3v2 -D "$f.mp3";
done
NHK-BS1 の NFL の放送豫定を得る爲に、2012年以前は HTML から必要な部分丈け拔き出して Plain Text に變換する結構グチャグチャな Shell Script を書いてゐたのですが、2013年から JavaScript を使う方法に變更されたので結構簡單なモノに書き直せました。
#!/bin/sh
curl -O 'http://www1.nhk.or.jp/sports2/onair/onair[1-4].js';
cat onair[1-4].js | tr -s '][' ' ' | gsed -n ' # \t を tab character に置き換えれば sed でも OK.
/"time_s":/ h;
/"time_e":/ H;
/:"nfl"/, /"biko":/ {
/"ttl":/ H;
/"biko":/ {
H; x;
/対/ ! d;
/"biko":""/ ! s/"ttl":"NFL・[^"]*",//g;
s/"biko"://g; s/"time_s"://g; s/"ttl"://g;
s/[ ]*【解説】.*//; s/「.*」「//; s/「//g; s/」//g;
s/[,"\t]//g; s/[[:space:]]*$//g; s/\n\n*/\t/g;
s/\ttime_e:/ - /g;
p;
}
}' >> onair.txt;
何故だか On Air が近付くと Title のチーム名から都市名が削られるので、備考欄と入れ替える處理を追加/修正しました。
變な重複がある記述に變わってゐたので、對應出來る樣に變更しました ;-(
何故だか On Air が近付く迄 Title の都市名が削られるので、備考欄と入れ替える處理を修正しました ;-(
擴張子が .js になってゐますが、多分 .json と同じ亊だと思うので、其れ用の Library 等を使えばもっと簡單でしょうね。
jot で GNU seq を適当に実装 が私のと書き方が違ったので自分のを晒します。酷いけど。
function seq() {
while getopts b:f:p:s:w:cnr o; do case $o in
*) echo options were not implemented.; return;;
esac; done;
case $# in
3) jot $2 $1 $3 ;;
2) jot $2 $1 ;;
*) jot $@ ;;
esac;
}
seq を真面目に実装してみる は酷くないんだと思う。多分。
Terminal で扱った File を Finder で表示したい場合が面倒臭いと云う事で、最初に思い付いた方法がこんなの。
function revealfinder() {
for i in "$@"; do
osascript -e 'tell application "Finder" to reveal "'$(
[ $i[1] = '/' ] || echo -n $PWD/
)$i'" as POSIX file'
done
}
でも、pathname から basename 丈け消して open ./foo/ ../bar/baz/qux/ みたいなのを普段から頻繁にやってゐたので個人的には此の方がしっくりくる。
function reveal() { open "$@:h" }
まぁ、挙動が若干違うので使い分けてもいいかも。
つい氣の迷いで FFmpeg を install してしまったのでw, ffmpeg -formats してみたら
TwinVQ が Decode 出來る亊に氣づいた。知らんかった。んで、十何年か前に kant さんに戴いた
*.vqf を convert した。まぁ、直接 MP3 なんかにしてもよかったけど、一應 Audacity で状態を確認したかったので
Apple Lossless にしてみた。最初はこんな感じ…。
for i in */*.vqf; do ffmpeg -i "$i" -c:a alac "$i:r.m4a"; done
で、Audacity で開いてみたら 無音部分の Level が中心から ちょい ズレとる。理由は解らんかったが Sample Rate が 22050 Hz の File だったので 44100 Hz に Resample する樣に變えてみたら…
for i in */*.vqf; do ffmpeg -i "$i" -c:a alac -ar 44100 "$i:r.m4a"; done
問題なくなった。これで漸く MidRadioPlayer.app が捨てられるなぁ。
v1.2 で Option の指定方法に若干變更がありました。 Video and Audio file format conversion 邊りに Sample が色々あるので參考迄に。
v1.0 で、又 configure 出來なくなりました。
% sudo port configure ffmpeg
---> Computing dependencies for ffmpeg
---> Fetching distfiles for ffmpeg
---> Verifying checksum(s) for ffmpeg
---> Extracting ffmpeg
---> Configuring ffmpeg
Error: org.macports.configure for port ffmpeg returned: configure failure: command execution failed
Please see the log file for port ffmpeg for details:
/opt/local/var/macports/logs/_opt_local_var_macports_sources_rsync.macports.org_release_ports_multimedia_ffmpeg/ffmpeg/main.log
To report a bug, follow the instructions in the guide:
http://guide.macports.org/#project.tickets
Error: Processing of port ffmpeg failed
log を見ると libmodplug が(有るのに)無いとか云って Error にされてゐます。取り敢えず Portfile の libmodplug を外すと install 出來ました。特に困らないので別にいいかなと思いまして。
depends_lib \
:
# port:libmodplug \
configure.args \
:
# --enable-libmodplug \
てな感じに書き換える script 書いたけど、こういうのって Install 時に引数で指定する丈けで良い筈ですよね(恥)
#!/bin/sh
sed -i.bak '
/port:libmodplug/,/^$/ {
/port:libmodplug/ { s/^ /#/; h; d; }
/^$/ { x; p; g; }
}
/--enable-libmodplug/ s/^ /#/;
' /opt/local/var/macports/sources/rsync.macports.org/release/tarballs/ports/multimedia/ffmpeg/Portfile
Terminal 上にゐる時に、簡單な Internet 檢索を行いたい場合
w3m http://ddg.gg/
の樣に檢索 Site へ行くのが一般的なのかな? 個人的には此れは一寸面倒に思うので一發で結果を見たい。
function ddg() {
w3m "https://duckduckgo.com/html/?q=${*// /+}";
}
function ggl() {
w3m "https://www.google.com/search?q=${*// /+}";
}
function yt() {
w3m "https://www.youtube.com/results?search_query=${*// /+}";
}
ddg foo bar baz qux quux corge grault garply waldo fred plugh xyzzy thud
最初の version では query の聨接方法が ${(j/+/)*:gs/ /+} みたいに汚かったんですが、單に
// /+ を使えばよかったという……、鈍臭いな俺。
CotEditor の Shell Script の Syntax Colorings は Z-Shell 用 としては少な過ぎるので、追加する爲に commands や keywords を拔き出してみた。
ls /bin /usr/bin | grep -v '[/.]' > commands.txt info zshbuiltins | awk -v RS='' '/^ [a-z]/{print $1}' | sort -u >> commands.txt
while read s; do which $s | grep '[a-z]: shell reserved' | cut -d : -f 1; done <<<$( info zshmisc | awk '/COMPLEX/, /ALTERNATE/ { if (/^ [^ A-Z]/) for (i = 1; i <= NF; i++) print $i; }' | sort -u) > keywords.txt
この後は、XML の儘では編集しにくそうなので Shell Script.plist を ASCII Property List File で保存した物に追加してから編集してみた。
for i in commands keywords; do awk 'BEGIN{print "'$i'Array = ("} END{print ");"} {printf "{beginString = \"%s\"; },", $1}' <$i.txt >>Shell\ Script.plist; done
此の儘で CotEditor を起動してみるとか plutil -convert xml1 Shell\ Script.plist で終わっても良いけど、念の爲 Property List Editor で開いて確認してみた處、regularExpression の値が Class: String, Value: 1 になってゐたので Class: Boolean, Value: Yes に修正して終わり。結果 XML の儘の方が手間が掛からなかった。
と、ここ迄やってみて必要以上に手間掛けてる氣がしてきた。もっと簡單な方法がありそう。
追記: TextWrangler.app/Contents/Resources/Unix Shell Keywords.txt からパクってきたら簡單やったかも。それでも足らんけど。
FizzBuzz Test で檢索すると Perl, Python, Ruby, Erlang, Haskell, JavaScript 邊りが多いので ABC, AWK, AppleScript, Basic, Bourne Shell Script, Ferite, HyperTalk, Icon, Lua, Pascal, Tcl 等で書いてみました。
まぁ、はっきり言って下手糞です。普段よく使ってゐる Perl, Python あたり迄はスラスラ出てきたのですが、其の後は思考停止してしまって、その言語らしさが全然ありません。
古い StuffIt Archive の日本語 File name が OS X Finder 上で化け化けになった時の對處方法。
#!/bin/sh
for i in "$@";
do
mv -v -- "$i" "$( echo $i |
iconv -f UTF8-MAC -t MACROMAN |
iconv -f SJIS -t UTF-8 )";
done
mojibake-fix.sh Archive?folder/*
此處數年の懸案であった手持ちの畫像 Files の Optimize に取りかかりました。
先づ Terminal の入力で手拔きする爲に擴張子を Lowercase にしました。
#!/usr/bin/env zsh
[ $# -gt 1 ] || { echo "Usage: $0:t -[ul] <files...>"; exit; }
while getopts ul c; do shift $[ $OPTIND - 1 ]; done;
for i in "$@";
do
x=$i:e;
case $c in
(u) [ $x != $x:u ] && x=$x:u ;;
(l) [ $x != $x:l ] && x=$x:l ;;
esac;
mv -v -- "$i" "$i:r.$x";
done
cd Pictureschange-extension-case.zsh -l **/*.(JPEG|JPG|JFIF|PNG|GIF|PICT|PCT|TIFF|TIF)
zsh でない
Unixシェル
の場合は ** が使えないので find が面倒な亊に。
find . \( -iname '*.JPG' -or -iname '*.PNG' -or -iname '*.GIF' -or \
-iname '*.TIFF' -or -iname '*.PICT' \) \
-exec change-extension-case.zsh -l {} \; ;
PngCrush, OptiPNG で PNG file を Optimize するのは簡單なので……
optipng -fix -i0 -preserve -q -strip all -- **/*.pngpngcrush -fix -ow -q -rem allb -- **/*.png
jpegtran で JPEG file を Optimize するのも簡畧化出來る樣にして……
#!/bin/sh
[ $# -ne 0 ] || set *.jpg;
for jpg in "$@";
do
tran=$jpg.$$;
cp -- "$jpg" "$tran";
jpegtran -optimize -progressive -copy none -outfile "$jpg" "$tran";
rm -v -- "$tran";
done
大量に處理してみましたが、
失敗は在りませんでした
path name が - で始まる時に失敗しますね。
./ を付けるとかで囘避出來ますが。
jpegtran は MacMiNT 環境でも使えるので System 6, 7 でも便利。
jpegtran.sh **/*.jpg
GIF Animation も Optimize したいのですが、既に GIFmation, GIF Builder, A Smaller GIF, で弄くり倒した後なので、殆ど效果が無くてやゝがっかり氣味。 でも、まぁ Terminal でちょちょっとする丈けなので手間要らずではある。 少し位 File size が増える亊が在っても平氣なら (Total では減る筈)……
gifsicle --no-interlace --no-comments --careful -b -O2 -V -- **/*.gif;
PICT (Vector) file を PDF にする要領で……
pict2pdf **/*.(pict|pct)
TIFF, PICT (Pixmap) file 等を PNG にしてしまう。
#!/usr/bin/env zsh
for pix in "$@";
do
png=$pix:r.png;
sips -s format png --out "$png" "$pix";
optipng -fix -i0 -q -- "$png";
done
sips も path name が - で始まる時の囘避方法が無いです。
pict2png.sh **/*.(pict|pct|tiff|tif)
どうでもいいけど PICT の擴張子を .pic にしてる人もゐますが、それだと 違う format も在って紛らわしいので、私は使いません。
んで、 Optimize したら Zftp Function で、 お氣樂極樂 put.
zfopen host user passwordzfcd directoryzfput -r **/*.(gif|png|jpg)zfclose
zftp functions を使うには .zshrc 等に以下を追加します。
autoload -U zfinit zfinit
詳しくは man zshzftpsys を讀んでみて下さい。
MacPorts で fortune を Install したのですが、
port search fortune fortune games/fortune 6.2.0-RELEASE Infamous electronic fortune-cookie generator sudo port install fortune
英語の file ばかりで樂しくありません。
ls /opt/local/share/games/fortune
fortunes fortunes2 limerick murphy-o.dat zippy
fortunes-o fortunes2-o limerick.dat murphy.dat zippy.dat
fortunes-o.dat fortunes2-o.dat murphy startrek
fortunes.dat fortunes2.dat murphy-o startrek.dat
なにか好いのは無いかと探して、 人名を冠したソフトウェア開発の19の法則, アーゴの法則, トリビアの泉 パーフェクトデータベース, ガセビアの沼 データベース, 世界傑作格言集 の 豆知識 で作ってみました。
#!/bin/sh
for i in "$@"
do
if [ $LANG = 'ja_JP.EUC' ];
then
iconv -f UTF-8 -t EUCJP $i.txt >$i;
else
cp $i{.txt,};
fi;
strfile $i;
sudo install -m 0644 $i{,.dat} /opt/local/share/games/fortune/;
done
set 19laws argo gasebase trivia knowledge; fortune.sh "$@"; echo "[ -x /opt/local/bin/fortune ] && fortune $@;" >>.zlogin
Shell Script が使える Text Editor は他に CotEditor.app 等がありますが、今の処 HUNDOSHI-EDIT 用丈けです。
csh は使いませんので、動作確認はご自分でどうぞ。
環境変数 LANG の設定に因っては日本語の処理が正しく出来ない場合があります。そんな時は Script 内で LANG=C とか LANG=ja_JP.UTF-8 等に設定して上手くいく方法を探してみてください。
Terminal 起動してても面倒ぃ時 (って結構あるんで)。
#!/bin/sh
/opt/local/bin/tidy -w -q -c -raw \
--drop-proprietary-attributes y \
--enclose-block-text y \
--enclose-text y \
--join-classes y \
--merge-divs n \
--merge-spans y \
--quote-marks y \
--sort-attributes alpha \
--tidy-mark n "$1" >"$2"
Terminal 起動してなくて面倒ぃ時 (ってあんまり無いけど)。
#!/bin/sh cat "$1" >"$2" # 内容を書き戻す echo '<!--' >>"$2" # 念の爲 Comment にしておく /usr/local/bin/htmllint -igncharset "$1" >>"$2" # charset は無視する. echo '-->' >>"$2"
HUNDOSHI-EDIT (と King's Edit) 用。jgawk 2.15.2+1.0+1.2.5 で Dialog が出せる亊を前提にしてゐます。Classic/Mac OS 9 と書いてゐても、私の環境は System 7.5.5 と Mac OS 8.1 なので、其れ以外ではどうなんだか……?
冗長部分を簡潔にしました (2003-02-17)。
jgawk の Stack Size を變更する必要があります。
割り當てメモリは 少し大きめに設定した方が安定して實行出來る様です。 私は 1024 KB にしてゐますが、通常 Error は出て居りませぬ。
調子に乗って HUNDOSHI-EDIT 用の XHTML Script をだらだらと長い物に書き換えたら、 Stack Size が足りなくなってしまいました。ResEdit 等で 48 K ($0000C000) とか 64 K ($00010000) にすると大丈夫。
出力 Window の位置、サイズや Font 設定等はCoOp
Resource で設定出來ます。 Default では ASLFont に設定されていますので、使ってゐない場合は變更必須と云えるでしょう。 但し、實際の COLS, ROWS は環境設定に依存しますので、起動して Environment を確認しましょう。
File name に = が含まれると Error になります (引数での代入として処理される) ので、 CGI 經由で Get した場合の File name 等は特に注意しませう。
若しも、現在 Python を使うかどうか迷ってゐたら、Perl, Python, Ruby の比較 を讀むとよいかも。
普段使いの Script を纏めてある Directory に対して 2to3-2.6, 2to3-3.0 を実行してみたら両方同じで殆ど print, urllib の置き換え丈けでした。 只、一寸気になる点があります。
Python 2.6.2 の raw_input() では、何もしなくても Unicode に対応出来てゐました。
python2.6 Python 2.6.2 (r262:71600, Jun 17 2009, 14:15:09) [GCC 4.0.1 (Apple Computer, Inc. build 5250)] on darwin Type "help", "copyright", "credits" or "license" for more information. def raw_print(): print '?', print raw_input() raw_print() ? \343\201\213\343\201\227\343\201\223 かしこ
これが Python 3.0.1 の input() では、何か Error を吐きよるんですゎ。
python3.0
Python 3.0.1 (r301:69556, Jun 28 2009, 16:11:52)
[GCC 4.0.1 (Apple Computer, Inc. build 5250)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
def raw_print():
print('?', end=' ')
print(input())
raw_print()
? \343\201\202\343\201\273\343\203\274
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 3, in raw_print
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe3 in position 0: ordinal not in range(128)
で、環境変数 LANG に何も設定してゐなかったので、設定してみた処……
参考: Python3.0 で マルチバイト文字を print したらエラーになった - Heavens hell
export LANG=ja_JP.UTF-8 python3.0 Python 3.0.1 (r301:69556, Jun 28 2009, 16:11:52) [GCC 4.0.1 (Apple Computer, Inc. build 5250)] on darwin Type "help", "copyright", "credits" or "license" for more information. def raw_print(): print('?', end=' ') print(input()) raw_print() ? \343\343\343 あほー
今度は入力した文字が變になってる……。まぁ此れは Terminal か gettext の問題かも知れんし、別に困らんし。未だ調べてないけど。
python 3.3.0 で試してみたら、Script File なら難なく實行出來るのに Terminal で 入力すると全く日本語入力出來ない状態に。環境変数なのかな?
zsh のせいかもと思って /bin/zsh (v4.2.3) から /opt/local/bin/zsh (v5.0.0) に變えてみたけど關係なかった。云々…。
まぁ、其れ以前に、未だ私の腦みそは Python 1.5 の儘なので、2.* の變更すら掴み切れてないんですが。
序でに str の事も: Python2 の str は死んだ - atsuoishimoto の日記
macfs.FSSpec(pathname).SetCreatorType(creator, type) より Smart でせう。L[-1] でなくて pop() と append() でもよかったんですが、MacMiNT の python が v1.3 なもんで。
def unexpandtabs(s, tabstop=8):
import re, string, struct
spaces = re.compile('\x20+$')
L = list(struct.unpack((str(tabstop) + 's') * int(len(s) / tabstop) +
str(len(s) % tabstop) + 's', s))
for i in range(len(L) - 1):
L[i] = spaces.sub('\t', L[i])
if L[-1] == ' ' * tabstop:
L[-1] = '\t'
return string.join(L, '')
Perltidy を使ってみました。
Perltidy には Preset された Option が幾つか用意されてゐますが、 -pbp, --perl-best-practices は私の好みに合いません。 -gnu, --gnu-style は大体良い感じなのですが、少し気に食わない処が在ります……、残念。 仕方ないので設定 File を作りました。
-t # --tabs tab を使う -et=8 # --entab-leading-whitespace= tab に置き換える space の数 -i=8 # --indent-columns= indent 幅 -ci=8 # --continuation-indentation= 次の行に続く場合の indent 幅 -l=0 # --maximum-line-length= 行の最大文字数 0=maximum -bl # --opening-brace-on-new-line (Block 始まりの) curly brace を次の行に置く -bt=2 # --brace-tightness=[0,1,2] brace 前後の空白の扱い -pt=2 # --paren-tightness=[0,1,2] paren 前後の空白の扱い -sbt=2 # --square-bracket-tightness=[0,1,2] bracket 前後の空白の扱い -nsfs # --nospace-for-semicolon semicolon の前に space を置かない
要は indent に space は使わない、条件文の桁は一々揃えない、です。元々 Python 的な Style が好みなのかも。
Install は MacPorts に任せましたが、勿論 CPAN でもよいです。
sudo port install p5-perl-tidy # or sudo cpan -i Perl::Tidy
HUNDOSHI-EDIT からも使える様にしました。
#!/bin/sh /opt/local/bin/perltidy -t -et=8 -ci=8 -i=8 -l=0 -bl -bt=2 -pt=2 -sbt=2 -nsfs <"$1" >"$2"
# usage: perl crtype <file...>
# tell what kind of end of line convention is used.
while ($file = shift(@ARGV)) {
last unless open(F, "<$file");
binmode(F);
while (1) {
$type = "Unknown";
last unless read(F, $buf, 1024);
$type = "DOS";
last if $buf =~ "\r\n";
$type = "Mac";
last if $buf =~ "\r";
$type = "UNIX";
last if $buf =~ "\n";
}
print "'$file': $type\n";
close(F);
}
少々諄い処を書き換えて使ってゐます。Mac OS X でも使えます (でも普段は file command を使いますが…;-p)。
#!/usr/bin/perl
# for perl4
@ARGV || die <<".";
Usage: $0 <file...>
tell what kind of end of line convention is used.
.
while (defined($_{file} = shift @ARGV))
{
last unless open _, $_{file};
binmode _;
while (read _, $_, 1024)
{
last if $_{type} = /\x0D\x0A/ ? "DOS" : /\x0D/ ? "Mac" : /\x0A/ ? "unix" : 0;
}
close _;
print "---> $_{file}: ", ($_{type} || "Unknown"), "\n";
}
序でなので……
#!/usr/bin/perl -s
require 5.000;
use strict;
use vars qw{$d $m $u};
$/ = $d ? "\x0D\x0A" : $m ? "\x0D" : $u ? "\x0A" : "";
$/ or die "Usage: $0 -[dmu] <files...>
-d: to DOS Carriage Return and Line Feed.
-m: to Mac Carriage Return.
-u: to unix Line Feed.
";
$\ = undef;
while (defined($_{arg} = shift @ARGV))
{
$_{bak} = "$_{arg}.$$";
rename $_{arg}, $_{bak} or die;
open I, "< $_{bak}" or die; binmode I;
open O, "> $_{arg}" or die; binmode O;
while (read I, $_, 1024) #buff
{
substr($_, -1, 1) eq "\x0D" and read I, $_{crlf}, 1 and $_ .= $_{crlf}; #crlf
s#\x0D+\x0A+|\x0D|\x0A#$/#g;
print O;
}
close I;
close O;
undef %_;
}
HTML Tidy を Install してゐれば、 tab2space に同じ機能がありますが。
jperl.pod に書いてある通り -b Switch 附きにして Normal Perl Compatible で MacJPerl に Syntax Check... させたら Type 2 Error で落ちた。
#! perl -bw no I18N::Japanese; use LWP::Simple;
それにしても JPerl には苦勞させられるというか LWP::Simple で getprint するだけの亊が出來ないとはどういふ亊でしょう。 しかも no I18N::Japanese しても根本的に無理という。
#! perl -w
no I18N::Japanese;
use LWP::Simple;
getprint("http://also.as/hanaden");
# Unrecognized character \342.
File ':MacJPerl 5.2.0r4 J2:lib:HTML:Entities.pm'; Line 102
# BEGIN failed--compilation aborted.
File ':MacJPerl 5.2.0r4 J2:lib:HTML:HeadParser.pm'; Line 75
# BEGIN failed--compilation aborted.
File ':MacJPerl 5.2.0r4 J2:lib:LWP:UserAgent.pm'; Line 118
# BEGIN failed--compilation aborted.
Mac OS 8.1 が意味不明で不可解な Timing で突然死するので、 System 7.5.5 に downgrade した煽りを喰って、 MacPerl も 5.2.0r4 に戻しました。 まぁ、5.6.1r1 は起動に問題が在ったので構わないんですが、ちょと寂しい。
#!/usr/bin/perl
#This is "RubyCutter" Progarm.
#Version 2.1
#Prgram by Banshodo
#Copyright 2001-2007, Banshodo
$/ = "\/";
$* = 1;
while (<>) {
open(STDOUT, ">$ARGV-n.txt") unless -e "$ARGV-n.txt";
&MacPerl'SetFileInfo('JEDT', 'TEXT', "$ARGV-n.txt");
$_ =~ s/《[^》]*》//g;
$_ =~ s/|//g;
chop;
print $_;
}
#!/usr/bin/perl って違和感ない ?$* = 1 にする意味が ???-i Option で済ませれば ????$_ を使う場合は、便利な省略形があるのに……。chop (Slash 削除) する ?????MacJPerl で遣るなら、これでいいんでは ?
#! MacJPerl -00pi.bak
s/|?([^|《》]+)《[^《》]+》/$1/gs;
MacPerl でも動く様にするにはこんな感じかなぁ……。
#! MacPerl -00pi.bak s/\x81\x62//g; s/\x81\x73.*?\x81\x74//g;
序でに HTML 版の Ruby Text を Tag に置き換える Script.
#! MacJPerl -00pi.bak s#<!--R-->([^()]+)(([^()]+))#<ruby>$1<rp>(</rp><rt>$2</rt><rp>)</rp></ruby>#g;
Mac OS X では encoding Pragma か Encode.pm を使えばよさそう。
use utf8; use encoding 'shiftjis';
MacJPerl の Site に Fixed MacPerl Window Title Font Bashing Bug
と書いてありますが、他の部分で EnBug してゐるみたいです。やっぱり 「不必要な日本語化は BUG を増やす」というのは、思ひ込みだけではないですね。 まぁ、最近は jgawk や sed-ja の速い版
程度だと考える亊にしてます。
MacPerl は使用後に Finder が落ちる、MacJPerl は使用中に MacJPerl 自身が落ちる、と云う亊が多い樣です。
ぁ、因みに MacPerl Folder に MacJPerl の以下の File を追加 / Merge して使ってゐます。
MacPerl Extensions
Folder は元々同じ名前なので、どちらか一方しか使えないのですが Droplet は分けて使いたいので MacJPerl Application 本體の Data fork を書き換えて使い分けてゐます。68K 環境の場合は DATA Resource です。
:lib: 内の { CommConnect.pl, FileCopy.pl, FindFolder.pl } は XCMD/XFCN が含まれますが、其れ以外の Library は Resource Fork を削除すると Disk Space を節約できます。まぁ、Perl4 Library を引き摺ってる間 (5.004_02 迄?) 丈けですが。
Jcode.pm の Archive に含まれる mac_install.pl は上手く Install 出來ません。
# Ok. I'll install files in HDD:MacPerl:site_perl: folder. # Installing Jcode.pm to HDD:MacPerl:site_perl:Jcode.pm. # Installing :Jcode:Constants.pm to HDD:MacPerl:<em class="point">site_perlJcode</em>:Constants.pm. mkdir HDD:MacPerl:<em class="point">site_perlJcode</em> # Installing :Jcode:H2Z.pm to HDD:MacPerl:site_perlJcode:H2Z.pm. # Installing :Jcode:Tr.pm to HDD:MacPerl:site_perlJcode:Tr.pm. # Installing :Jcode:Unicode:Constants.pm to HDD:MacPerl:site_perlJcode:Unicode:Constants.pm. mkdir HDD:MacPerl:site_perlJcode:Unicode # Installing :Jcode:Unicode:NoXS.pm to HDD:MacPerl:site_perlJcode:Unicode:NoXS.pm. # All scripts are installed successfully
トホホ、Jcode.pm 以外は:site_perlJcode:
に Install されてしまいましたが、これは簡單に修正できます。
- $dst =~ s/:://og; + $dst =~ tr/:/:/s;
多分 Mac の
が::
だと勘違いされてゐると思うのですが、これは當然 ..
に當るものなので colon を削除してしまったら駄目です。/../
私の環境ではちゃんと Install 出來るようになりました。
# Ok. I'll install files in HDD:MacPerl:site_perl: folder. # Installing Jcode.pm to HDD:MacPerl:site_perl:Jcode.pm. # Installing :Jcode:Constants.pm to HDD:MacPerl:site_perl:Jcode:Constants.pm. # Installing :Jcode:H2Z.pm to HDD:MacPerl:site_perl:Jcode:H2Z.pm. # Installing :Jcode:Tr.pm to HDD:MacPerl:site_perl:Jcode:Tr.pm. # Installing :Jcode:Unicode:Constants.pm to HDD:MacPerl:site_perl:Jcode:Unicode:Constants.pm. # Installing :Jcode:Unicode:NoXS.pm to HDD:MacPerl:site_perl:Jcode:Unicode:NoXS.pm. # All scripts are installed successfully
MacJPerl で no I18N::Japanese; しても unexpand() が正しく動作しませんでしたので、ちょっと變えてみました。
@e = split(/(.{$tabstop})/,$line,-1);
というのがどうも問題の様なので
で match する曖昧な方法をやめて .unpack() してみました。
@e = unpack("a$tabstop" x int(length($line) / $tabstop) . "a*", $line);
Unicode とか EUC だと 餘計に Bug ったかもしれません。
Another HTML-Lint は迚も便利で有難いのですが、標準出力を利用しているので (MPW ではない) MacPerl では澤山 Error が出ると Report が何處かに消えて失くなってしまいます。 落ちる時もあるし……
open _, ">:htmllint.log" or die; select _;
こんな感じでhtmllint
Droplet の exit() より手前 (であれば何處でもよい) に追加すると File に記録されます。
何時終わったのか判らなくなるので、末尾に何か工夫したり しなかったりすれば一寸好い感じになるでせう。
$^O eq 'darwin' ? system(<<".") : print "\a"; # beep osascript -e 'set volume output volume 25'; say 'Another HTML lint completed.'; osascript -e 'set volume output volume 50'; .
Another HTML-lint の元になった weblint と云う物がございまして、まぁ HTML 2.0 丈け一寸調べられる程度ですが、 Mac 版 (macjweblint 97-0.12) は strict でないので(トホホ) jweblint-1.020 の unix 版をちょいと書き換えてから Droplet にしましょう。
diff -u weblint{.bak,}
--- weblint.bak
+++ weblint
@@ -15,12 +15,12 @@
#
$VERSION = '1.020';
-($PROGRAM = $0) =~ s@.*/@@;
-@TMPDIR_OPTIONS = ('/usr/tmp', '/tmp', '/var/tmp', '/temp');
-$TMPDIR = &PickTmpdir(@TMPDIR_OPTIONS);
+$PROGRAM = (split /:/, $0)[-1];
+@TMPDIR_OPTIONS = ($ENV{TMPDIR});
+$TMPDIR = $ENV{TMPDIR};
$SITE_DIR = '';
-$USER_RCFILE = $ENV{'WEBLINTRC'} || "$ENV{'HOME'}/.weblintrc";
-$SITE_RCFILE = $SITE_DIR . '/global.weblintrc' if $SITE_DIR;
+$USER_RCFILE = $ENV{WEBLINTRC} || "$ENV{HOME}:weblint.rc" || 'weblint.rc';
+$SITE_RCFILE = $SITE_DIR . ':global.weblintrc' if $SITE_DIR;
#------------------------------------------------------------------------
# $version - the string which is displayed with -v or -version
@@ -71,7 +71,8 @@
http://www.cre.canon.co.uk/~neilb/weblint/todo/
EofToDo
-*WARNING = *STDOUT;
+open(LOG, ">:weblint.log") || die;
+*WARNING = *LOG; # *STDOUT;
# obsolete tags
$obsoleteTags = 'PLAINTEXT|XMP|LISTING';
ゃゃ、Shuck が劇的に改善されてゐましたね、萬歳!!
MacPerl に 付いてくる POD readerShuck
は Default では Font が Geneva や Times に爲っていて、折角 和譯 Pod に入れ替えても讀めません。
どうやって Font を變更するのかと思ったら、 TEXT/styl Resource を變更することで反映されるようになっています。 氣が利いてますね :c)
で、早速色々變更してみました。

やってみると、何故か上手くいく場合とそうでない場合とがあるのですが、 その理由というか原因がいま一つ掴めません。 ID: 128, 129, 130 の Font を揃えてstyl
Resource の Size が揃ってゐるかどうかが、上手くいく Point の樣です。
しかし、どうも安定しないと思いませんか? 割り當てメモリを増やしても、何だか判らないタイミングでコケる事があります。 でも、私の環境ではWIND
Resource の Auto Position... を Stagger から None にすると安定しました。ついでに大きくして讀み易くなったし :c) 困ってる場合は試してみてはどうでしょうか。
初めての Perl(SOFT BANK, 第4刷, ¥2,900)
プログラミング Perl 第2版 (O'Reilly Japan, 第7刷, ¥4,900)
プログラミング Perl 第3版 vol.1&
プログラミング Perl 第3版 vol.2に買い替えられるんでしょうか……。或いは
Perl クイック リファレンスの方がいいかなぁ……。
初めての Python (O'Reilly Japan, 初版, 第1刷, ¥3,800)
初めての Python 第3版になっとるよぉ。 Python 3000 対応。
Python プログラミング(O'Reilly Japan, 初版, 第1刷, ¥5,200)
Python クイックリファレンスを買うべきだった。古いし解らんし (汗)、v1.3 とか謂われてもなぁ……。
Python クックブック 第2版が結構 評判良い 様です。
Python チュートリアル 第2版と云う Guido van Rossum の著書が出てます。
CotEditor.app 用の Syntax Colorings file を作成しましたので、宜しければどうぞ (遣り掛けの儘 出來上がってない ;-p)。
info gawkで読めます。info gsedで読めます。File Name が Default の物と重複しない様に変更しました。
あと、 Plain Text でも URI 丈け色を付けたい時の其れ也にいい加減な Regexp:
(?:ftps?|gopher|mailto|news|s?https?):[\x21\x23-\x3B\x3D\x3F-\x7E]+足りない物は 踊るサボテン工房 | Mac | CotEditor のシンタックス定義 で、見付かるかも。
あれれ、何時の間にか 公式に Link されてゐました。出来損ないばっかりなのに、大丈夫でしょうか……。まぁ、使う側でどうにかして貰うしか仕方ないか。
~/Library/Application\ Support/TextWrangler/Unix\ Support/Unix\ Filters に在る Script が中々アレなので書き換えてみる事に。
色々と冗長。Hash 名は default を使い、
chompをしなければprint丈けに、更に後置き記法を使って#!/usr/bin/perl -w use strict; $_{$_}++ while <>; print sort keys %_;でも、これでも長過ぎる。普通は
こんだけで済む。というより何故こうしなかった?
全く必要ない変数を使ったりもあるけど、
print sprintfてなんや!?何故か Error になる……、変な Bug やねぇ。で、これも
perl 使わんでしょう、普通。
冗長過ぎる。
unshiftedってstring.ascii_lettersを態々手作業で生成してるし。#!/usr/bin/env python import fileinput import string a_m = string.ascii_lowercase[:13] + string.ascii_uppercase[:13] n_z = string.ascii_lowercase[13:] + string.ascii_uppercase[13:] for _ in fileinput.input(): print string.translate(_, string.maketrans(a_m + n_z, n_z + a_m)),書き換えてもやっぱり長い。ROT13 なんて態々 Python 持ち出す程の事ではない。