昨年につづいて「52週はたらく人のためのカレンダー」をつくりました。
普通のカレンダーだと月をまたぐ週が、週単位で仕事をしている私にとっては見にくいのです。
ごくごく趣味的に地球の動き、月の動き、惑星たちの動きを記しています(『理科年表』によりました)。しかも、それぞれの時刻も示しました。
例えば、11月の望は18日なのですが、その時刻は0:16分。これは未明ですから、「18日の夜」にはもう十六夜月に近くなっています。実感的には「17日の夜」が満月なのです。そんなことが分かるようにしました。
内惑星は東西の最大離角の日を、外惑星は衝の日を示しました。冥王星が入っているのは作成者が「どってんかいめい世代」だからです。
来年は、欠けながら没する部分月食がなんとか見えるぐらいで、空は地味な年のようです。でも、中秋の名月は9月19日の夜8時ごろ、眺めるのにちょうどよい高さに正真正銘の満月がかかるはずです。7月2日は半夏生ですが、冥王星が衝。なにやら妖しげな日になりそうです。
PDFをサイトに置いてきましたので、よろしければ、ご自由に(かつ自己責任で)お使いください。https://sites.google.com/site/amplexicaule/file_cabinet
[12/24 第2版] 流星群の極大日も載せました。なお、日曜日に振ってある通し番号は私が作っている新聞の号数です(ちょっとおじゃまでしょうが、消し忘れました ^^)
2012年12月6日
2012年6月23日
雨の中で
たまにはblogも書こう。
くたびれてちょっと早めに帰る電車。私は雨の中に立っている。
現実のきょうは梅雨も中休み。だけど、脳裏は雨が降っている。足もとは泥。カッパじゃなくて昔風の外套。目の詰まったフェルトなんだろうか。雲からまっすぐまっすぐ流れ落ちる雨のなかに私が立っている。
誰かに話しかけている。馬か牛のにおい、泥と草のにおいがする。でも、鳴き声も姿もない。自分の声も。ずいぶん降っているはずの雨の音もしない。
誰と話しているのか。あたたかい。
……新しい白昼夢なので記録しておく。分析は不要です。
くたびれてちょっと早めに帰る電車。私は雨の中に立っている。
現実のきょうは梅雨も中休み。だけど、脳裏は雨が降っている。足もとは泥。カッパじゃなくて昔風の外套。目の詰まったフェルトなんだろうか。雲からまっすぐまっすぐ流れ落ちる雨のなかに私が立っている。
誰かに話しかけている。馬か牛のにおい、泥と草のにおいがする。でも、鳴き声も姿もない。自分の声も。ずいぶん降っているはずの雨の音もしない。
誰と話しているのか。あたたかい。
……新しい白昼夢なので記録しておく。分析は不要です。
2012年3月28日
ひらがな・カタカナ変換
ひらがなをカタカナに、カタカナをひらがなにそれぞれ変換するperlスクリプト。
これをOS Xのサービスに入れておくと便利かも。
ひらがな→カタカナ
カタカナ→ひらがな
「わ゙ゐ゙ゑ゙を゙」で、trコマンドじゃなくて、sコマンドを使ってるのは、合成用濁点を使っているからです。濁点付きの「わゐゑを」という文字はありませんもん。
なお、小書きの「ヵ」「ヶ」を「ゕ」「ゖ」に変換するのは間違っていると思うけど、ここでは形式的に変換してみました。「ヵ」「ヶ」は「箇」や「个」の略字・異体であって、仮名ではないはず。
NOTA BENE : 当初「use encoding "utf8";」という指定をしてましたが、これは使うべきではないとのことです(→『404 Blog Not Found』「perl - use encoding; #は黒歴史」)。
これをOS Xのサービスに入れておくと便利かも。
ひらがな→カタカナ
use utf8; binmode STDOUT, ':utf8'; binmode STDERR, ':utf8'; binmode STDIN, ':utf8'; while (<>) { tr/ぁ-ゖ/ァ-ヶ/; s/わ゙/ヷ/; s/ゐ゙/ヸ/; s/ゑ゙/ヹ/; s/を゙/ヺ/; tr/ゝゞ/ヽヾ/; s/ゟ/ヨリ/; print $_; }
カタカナ→ひらがな
use utf8; binmode STDOUT, ':utf8'; binmode STDERR, ':utf8'; binmode STDIN, ':utf8'; while (<>) { tr/ァ-ヶ/ぁ-ゖ/; s/ヷ/わ゙/; s/ヸ/ゐ゙/; s/ヹ/ゑ゙/; s/ヺ/を゙/; tr/ヽヾ/ゝゞ/; s/ヿ/こと/; print $_; }
「わ゙ゐ゙ゑ゙を゙」で、trコマンドじゃなくて、sコマンドを使ってるのは、合成用濁点を使っているからです。濁点付きの「わゐゑを」という文字はありませんもん。
なお、小書きの「ヵ」「ヶ」を「ゕ」「ゖ」に変換するのは間違っていると思うけど、ここでは形式的に変換してみました。「ヵ」「ヶ」は「箇」や「个」の略字・異体であって、仮名ではないはず。
NOTA BENE : 当初「use encoding "utf8";」という指定をしてましたが、これは使うべきではないとのことです(→『404 Blog Not Found』「perl - use encoding; #は黒歴史」)。
2012年3月24日
たくさんのファイルをいっぺんにリネーム
きのうの隔週勉強会で「リネームソフトってWindows用ばっかりや」という声が(一部から)聞こえたけど*、Mac OS Xだと別段必要もないんじゃないかな。Windowsはシェルがしょぼいから、ファイルのリネーム程度のことでもソフトを作らなあかんということですよ。(*実際にはMac用のもたくさんあるようです。私がWindowsのこともMacのことも知らないだけでした^^)
OS Xはunixですから。
勉強会で出て来たのは、「感-5864.ai」という形式の名前を持つファイルを、冒頭の漢字1文字とハイフンまでを外した「5864.ai」という形式の名前にリネームしたい。たくさんあるのを一括処理したいという課題でした。
Terminal(shellはbash)でやれば簡単。
bashの「for name [ in word ] ; do list ; done」構文を使います。
sedでやってみる
まず、考えたのは手に馴染んでいるsedを使うやりかた。
ただし、漢字など多バイト文字はOS X付属のsedではうまく変換できないので、GNU sedが必要です。(bashの環境変数のうちLANGも、LANG=ja_JP.UTF-8とする必要があります)
perlをつかう
そこで、OS X付属のperlを使ってみました。こんな感じです。
【注】当初、「perl -pe 'use utf8; s/^.+-//;'」と書いていて、どうして「+」が必要なんだろうと不思議に思っていたのですが、エンコーディングの指定書式を旧式の「use encoding "utf8"」にすると文字数が思惑どおりになりました。しかし、その後、perlの起動オプション「-C」で出入力のエンコーディングを指定することを教わりました(man perlrun参照)。これでやっと現代的なコードになりました。みなさん、ありがとうございます。
bashだけでできる
そうこうしているうちに、bashだけでできるのに気付きました。こうです。
変数を展開する際にその一部を書き換える機能をbash自体が持っているんです。
bashのmanpageでは、「Parameter Expansion」項の最後の方に載ってます。
${parameter/pattern/string}という構文です。
(今回はpatternの文字列を削除するのでstring文字列は空)
検索パターンの書き方にちょっと癖があるし、機能もsedやperlほどではないのですが、今回のような事例ならこれで充分役立ちます。
OS Xはunixですから。
勉強会で出て来たのは、「感-5864.ai」という形式の名前を持つファイルを、冒頭の漢字1文字とハイフンまでを外した「5864.ai」という形式の名前にリネームしたい。たくさんあるのを一括処理したいという課題でした。
Terminal(shellはbash)でやれば簡単。
bashの「for name [ in word ] ; do list ; done」構文を使います。
sedでやってみる
まず、考えたのは手に馴染んでいるsedを使うやりかた。
for i in *.ai > do > cp $i `basename $i | gsed -e 's/^.-//'` > done
- basenameコマンドでファイル名をテキストとして取得:basename $i
- それをパイプを通じてsedに渡し、
- 先頭の一文字とそれに続くハイフン(^.-)を削除:s/^.-//
- ここまでの実行結果(`basename $i | gsed -e 's/^.-//'`)を新しいファイル名としてcpコマンドに渡す
ただし、漢字など多バイト文字はOS X付属のsedではうまく変換できないので、GNU sedが必要です。(bashの環境変数のうちLANGも、LANG=ja_JP.UTF-8とする必要があります)
perlをつかう
そこで、OS X付属のperlを使ってみました。こんな感じです。
for i in *.ai > do > cp $i `basename $i | perl -CIO -pe 'use utf8; s/^.-//;'` > done
【注】当初、「perl -pe 'use utf8; s/^.+-//;'」と書いていて、どうして「+」が必要なんだろうと不思議に思っていたのですが、エンコーディングの指定書式を旧式の「use encoding "utf8"」にすると文字数が思惑どおりになりました。しかし、その後、perlの起動オプション「-C」で出入力のエンコーディングを指定することを教わりました(man perlrun参照)。これでやっと現代的なコードになりました。みなさん、ありがとうございます。
bashだけでできる
そうこうしているうちに、bashだけでできるのに気付きました。こうです。
for i in *.ai > do > cp $i ${i/*-/} > done
変数を展開する際にその一部を書き換える機能をbash自体が持っているんです。
bashのmanpageでは、「Parameter Expansion」項の最後の方に載ってます。
${parameter/pattern/string}という構文です。
(今回はpatternの文字列を削除するのでstring文字列は空)
検索パターンの書き方にちょっと癖があるし、機能もsedやperlほどではないのですが、今回のような事例ならこれで充分役立ちます。
2012年3月5日
どこでもunixフィルタ
おとといの記事のつづきです。
環境変数の設定だけしておけば汎用フィルタとなります。
export LANG=ja_JP.UTF-8
これを「汎用篩」という名前で保存しておきます。
では、facebookの投稿欄で使ってみましょう(ブラウザはSafariです)。
無理矢理の例ですが、各教科ごとの平均点を計算させてみます。計算する行を選択して、上で作ったサービス「汎用篩」を呼び出します。
生徒 A B C 平均
国語 85 89 84
算数 92 90 88
理科 78 75 80
社会 94 90 92
おとといの例とは違って、「シェルスクリプトを実行」windowが現れます。
ここにスクリプトを書きこみます。
今回はawkスクリプトを書いてみましょう。awkはOS Xネイティブのものでもutf-8テキストをちゃんと扱えます。
awk '{total=$2+$3+$4; avg=total/3; print $0, avg}'
えい!
生徒 A B C 平均 国語 85 89 84 86 算数 92 90 88 90 理科 78 75 80 77.6667 社会 94 90 92 92
できました^^
2012年3月3日
InDesign上のテキストをperlやsedで編集
(2016-1-11注記: CS6ぐらいから仕様が変わったのか、InDesignからサービスにテキストを渡せなくなっています。残念 orz)
Macはテキスト処理も強力なのです。なにせunix系ですから。
しかも、Terminalじゃなくても、Webページの入力フォーム内や、もちろんInDesignのフレームグリッド内でもperlやsed、awkを使ったテキスト編集ができてしまうのです。
もう、これだけでもWindowsを捨てて、Macにしなさいと声を大にして言えます。
InDesignだとこんな具合;
このあと、「六八〇」→「六百八十」と単位語を書き加えたりしなければなりませんが、手間や書き換え間違いはずいぶん減ります。
これは、OS Xの「サービス」という名前のサービスを使っているのです。
「サービス」は選択部分に対して適用されます。(選択部分が何なのかによってサービスメニューの内容が変ります)
「サービス」はOS X付属のAutomator.appで作ります。
Otto君が手にしているのは他ならぬ「パイプ」です。
起動したら「新規作成」ダイアログで「サービス」を選びます。
左側にある「アクション」を右側の編集欄にドラッグして、unixのフィルタをパイプで繫いでいくように、並べていきます。
今回作るフィルタで使う「シェルスクリプトを実行」は「アクション」の「ユーティリティ」の中にあります。それを編集欄にドラッグすると…
ここで、「選択されたテキストを出力で置き換える」にチェックを入れるのがミソです(デフォルトではOFFになってます)。
unix流にいうと選択部分を標準入力・標準出力として扱っているのです。
なお、流れるテキストストリームは、文字コード:utf-8、改行:LF (とおもいきや、InDesignのようにCR改行のテキストを渡すものもあるようです)。
シェルには各種のshellが選べます。perl、python、pubyを直接呼び出すこともできます。
あとは、やらせたいフィルタスクリプトをここに書いて、適当な名前をつけて保存すれば、メニューバーのアプリケーションメニューやマウス右クリックでのコンテキストメニューでの「サービス」から呼び出せるようになります。
(この段階では特定のスクリプトを書かず、「汎用のフィルタ」とするのも便利です。詳しくは後日の「どこでもunixフィルタ」記事をどうぞ)
なお、自作の「サービス」は、各ユーザの「~/Library/Services/」フォルダに保存されるのですが、Lionからこのフォルダが不可視とされてしまいました。Finderのメニューバーの「移動」をOptionキーを押しながらクリックすると「ライブラリ」に移動できますが、Automatorの「開く」ダイアログには「移動」がないので、Finderのサイドバーにドラッグして登録しておくことをお薦めします。
実例:
▼ 洋数字を漢数字に書き換えるサービスならこんな具合です。shellとしてperlを使ってます。
▼ メールなど改行で体裁を作ってしまったテキストの行を連結させるサービスでは、bashからsedを呼び出しています。
「export LANG=ja_JP.UTF-8」で環境変数LANGをutf-8用にするのが肝心。
なお、OS Xネイティブのsedはutf-8をまだうまく扱えないので、GNU Sedを使う必要があります。GNU Sedはソースから、configure→make→make install で簡単にインストールできます。
また、InDesignのようにCR改行テキストを渡すものもあるので、「tr \\r \\n」で改行をLFに揃えます。
この例で呼び出している jointline.sed は2010年6月に書いた「行連結sedスクリプト」です。
*改題しました。2012-03-04
Macはテキスト処理も強力なのです。なにせunix系ですから。
しかも、Terminalじゃなくても、Webページの入力フォーム内や、もちろんInDesignのフレームグリッド内でもperlやsed、awkを使ったテキスト編集ができてしまうのです。
もう、これだけでもWindowsを捨てて、Macにしなさいと声を大にして言えます。
InDesignだとこんな具合;
![]() |
洋数字を漢数字に:置換前 |
![]() |
置換後 |
これは、OS Xの「サービス」という名前のサービスを使っているのです。
「サービス」は選択部分に対して適用されます。(選択部分が何なのかによってサービスメニューの内容が変ります)
「サービス」はOS X付属のAutomator.appで作ります。
Otto君が手にしているのは他ならぬ「パイプ」です。
起動したら「新規作成」ダイアログで「サービス」を選びます。
左側にある「アクション」を右側の編集欄にドラッグして、unixのフィルタをパイプで繫いでいくように、並べていきます。
![]() |
↑これは「サービス」ではなく「フォルダアクション」の例です |
ここで、「選択されたテキストを出力で置き換える」にチェックを入れるのがミソです(デフォルトではOFFになってます)。
unix流にいうと選択部分を標準入力・標準出力として扱っているのです。
なお、流れるテキストストリームは、文字コード:utf-8、改行:LF (とおもいきや、InDesignのようにCR改行のテキストを渡すものもあるようです)。
シェルには各種のshellが選べます。perl、python、pubyを直接呼び出すこともできます。
あとは、やらせたいフィルタスクリプトをここに書いて、適当な名前をつけて保存すれば、メニューバーのアプリケーションメニューやマウス右クリックでのコンテキストメニューでの「サービス」から呼び出せるようになります。
(この段階では特定のスクリプトを書かず、「汎用のフィルタ」とするのも便利です。詳しくは後日の「どこでもunixフィルタ」記事をどうぞ)
なお、自作の「サービス」は、各ユーザの「~/Library/Services/」フォルダに保存されるのですが、Lionからこのフォルダが不可視とされてしまいました。Finderのメニューバーの「移動」をOptionキーを押しながらクリックすると「ライブラリ」に移動できますが、Automatorの「開く」ダイアログには「移動」がないので、Finderのサイドバーにドラッグして登録しておくことをお薦めします。
実例:
▼ 洋数字を漢数字に書き換えるサービスならこんな具合です。shellとしてperlを使ってます。
![]() |
use encoding 'utf-8'; while (<>) { y/0-9/0-9/; y/,./,./; y/0123456789/〇一二三四五六七八九/; y/,./千・/; print $_; } |
「use encoding 'utf-8'」と宣言してやれば、仮名漢字スクリプトもOKです。
![]() |
export LANG=ja_JP.UTF-8 tr \\r \\n | /usr/local/bin/sed -f /Users/mt/bin/jointline.sed |
なお、OS Xネイティブのsedはutf-8をまだうまく扱えないので、GNU Sedを使う必要があります。GNU Sedはソースから、configure→make→make install で簡単にインストールできます。
また、InDesignのようにCR改行テキストを渡すものもあるので、「tr \\r \\n」で改行をLFに揃えます。
この例で呼び出している jointline.sed は2010年6月に書いた「行連結sedスクリプト」です。
:loop
$!N
s/\(.\+\)\n\([^ ]\+\)/\1\2/
t loop
P
D
は全角空白です。*改題しました。2012-03-04
2012年2月17日
MacBiffでMail.appでないメーラを召喚
iCloudとGmailの新着チェックにMacBiffを使ってみました。
この2つについてはMail.appの代わりにSparrowを使っているんですが、はて? MacBiffのプルダウンメニューの「Launch Mail」でSparrowが起動しない。
MacBiffの設定パネルの「Options > Mail Application」の「Choose」ボタンでSparrowを指定したのです。こんな風に…
OSはLion(10.7. 3)です。
う〜ん… う〜ん… … …
これでどうじゃ? … …
(^o^)y Sparrowが起動しました。
「file://localhost」が不要だったようです。
この2つについてはMail.appの代わりにSparrowを使っているんですが、はて? MacBiffのプルダウンメニューの「Launch Mail」でSparrowが起動しない。
MacBiffの設定パネルの「Options > Mail Application」の「Choose」ボタンでSparrowを指定したのです。こんな風に…
OSはLion(10.7. 3)です。
う〜ん… う〜ん… … …
これでどうじゃ? … …
(^o^)y Sparrowが起動しました。
「file://localhost」が不要だったようです。
2012年2月8日
題字のひみつ
これは私が編集している新聞の創刊時(1963年)の題字です。
レトロでかっこいいでしょ?
でも、文字の周りに不自然なアキが…
この題字の背景は、「赤旗」の戦後復刊から1966年1月まで使われていた題字(当時は「アカハタ」)からの借用なんです。
おぉ、本家のほうが断然、かっこいい。「兵庫民報」では煙突も星も隠れて、何の絵か分かりません。でも、どうして稲じゃなくて麦なんだろ?
重ねてみました…
「兵庫民報」題字のへんなアキは、「アカハタ」の文字を削った痕だったんです。それに、かなり傾いてます。むかしはずいぶんおおらかだったようです :-)
2012年1月4日
登録:
投稿 (Atom)