LilyPondのセグメンテーション・フォールト 8月1日, 2020


64bit用LilyPondがセグメンテーション・フォールトを吐くなら、libguile関連ライブラリーを入れ替えてみる

楽譜はSibeliusで清書している。ただ、ちょっと数小節必要な場合、簡単に印字してくれるLilyPondも大変好きだ。テキストファイルを用意すれば、TeXのように画像を生成する不思議さに引かれてもいた。そう、Catalinaになる前はね。そうです、64bit障壁ができてからは動かなくなって久しいわけです。

残念でしょうがなくて、あの膨大な依存ファイルを数日かけて集めてmakeしてみたこともあって、今でもmacには他で用いることがありそうもないあれこれの小さなプログラムやライブラリを貯めこんでいる。でも、次から次へと更なる依存関係を言われることに根負けしてコンパイルをあきらめ、もうこの際Homebrewだか、MacPortsだかを頼るよりしょうがないかなと思い始めていた。macOSに既存のファイルまで重ねてinstallして自分の環境を作るパッケージは好みではなく、また元来があれこれ試してconfigureやmakeなどで無事に動くプログラムが組み上がっていくプロセスが好きなことから、それらパッケージのお世話にはなっていないのだ。

さて、それで今日発見した。Marnenという人物がdarwin-64bit用バイナリーを公表していたのだ。本当に今頃になって発見した。しかもLilyPondの本家にリンクがあるのに気づかずにいたわけだ。 macOS 10.15用の非公式の64ビット アプリケーション バンドル

しかし残念にも、入手して立ち上げるとわが環境では「Segmentation fault」で止まってしまう。

$ lilypond --verbose desktop/test.ly

表示されるエラーを確認した。これで"Segmentation fault"が出てくる起動ログの一部が見える

解決方法を探して数時間、NetでのMarnenの発言を発見しそれを追うと、彼が他のユーザーのエラー状況を確認する言葉の中で、lib/guile18について述べているのを読んだ。 LilyPond.app/.../lib/guile18 の不具合の可能性を考えているように見えた。それに吐いているエラーからすると、ライブラリーコンパイルの問題にも思えると、勝手で根拠ない推測をし、試しに「大事そうなlibguile*(供給ファイルには18個ある)」を、自分でguile-1.8.8をコンパイルした時にできていた '/usr/local/lib/libguile*(24個あった)' に入れ替えてみた。

ライブラリの場所は、 LilyPond.app/contents/Resources/lib/libguile*
lib/guile18が関連するわけではないようだ。事情は不分明で、libguile18.dylibは、lib/guile18には置かれずlib/libguile18.dylibとなっている。とにかく単純なことに上記でOKだった。

desktop$ lilypond test.ly

test.pdfが無事に作成されたし、以前作成したファイルで試しても無事に出力される。OKだった。Marnenさんどうもありがとう。私と類似環境でこのエラーを経験している方は、試してみる価値があると思う。ご自分の責任で。

新版:連絡先.appのデータをとりだす 7月5日, 2020


昔、当時の「アドレスブック.app」のデータをExcelに読み込むためのスクリプトを利用していた。いや、必要があれば今でも使うのだけど。今回、csvファイルをvCardファイルを経由して「連絡先.app」に収納するpythonで遊んだ余勢をかって、逆にvCardからcsvファイルを作成するプログラムも書いてみた。ただし、初心者のことでもあり、macOSでの使用しか考えていないこともあって、汎用性はほとんどないし、かなり無骨で、エレガントな所など全くないものだ。

「連絡先.app」から"書き出す>vCardを書き出す…"でvcfファイルを用意する。プログラムを起動すると、vcfファイル読み取り用のダイアログが開くので用意したファイルを指定する。続けて変換したcsvファイル保存のダイアログが開くので保存先を指定する。

出力されるcsvファイルのカラム構成は、
{姓, 名, 敬称, 姓の読み, 電話, Email, 郵便番号, 住所[都道府県, 市区, 町村, 番地], 連名}
となっている。他の項目が必要な場合は工夫を要する。

■制約事項
・名前の読みは移せない
・電話, email, 住所, 連名は各1件のみ
・保存先のcsvファイルは新規ファイルを指定のこと。既存ファイルを指定するとみっともなくエラー。

この制約の3点目のasksaveasfilenameの不具合にからむ問題は、例外処理ではない解決方法を見つけたいと思っている(が難しそう)。Linuxの場合なら stackoverflow にあるようにfiledialog.pyに手を入れることで乗り切れるらしいことを見つけたが、コメントが付いているようにmacOSでは解決しない。確かにfiledialog.pyの修正は無効だった。

CSVからvCardを作成して連絡先.appに読みこむ 6月14日, 2020


必要があって受け取ったExcelファイルの宛名を官製ハガキに印刷しなければならなくなった。Catalinaになってから「葉書AB」は使えなくなった。64bitでビルドし直さなければならないのでね。それで、この手の作業は現在は「おまかせ宛名はがき」に頼りきり。そのためには、まず「連絡先.app」に読み込ませなければならない。直接読み込ませることができる筈だけど、どうもご機嫌斜め。何か約束があるようで、csvファイルを受け付けてくれない。この手の「無言の約束事」が結構の曲者なのだ。

試行錯誤の末になんとか読んではくれたのだけど、これってよくありそうな作業だ。私はあまりやらないけど。元来、vCard3が単純なフォーマットであるのを知っているので、目下中心に遊んでいるPythonでスクリプトを組んでみた。ただし、例によって我が環境でしか無事には動かないものだろうし、あれこれのチェック作業を省いているので、単なる自分の作業メモかもしれないのだけど。

csvファイルを用意する。その構造は、{姓、名、姓読み、名読み、携帯電話番号、自宅電話番号、自宅メールアドレス、自宅住所[ 郵便番号、都道府県名、市区町村以下 ]}となっているものとした。

住所については、もっと詳細に「連絡先.app」の欄に対応づけることもできるだろうが、葉書に印刷するという目的からすれば、これで充分。

起動すると、csvファイル読み取り用のダイアログが開くので、ソースを指定する。変換後にvcfファイルを保存するためのダイアログが開くので保存先を指定する。「連絡先.app」から、"ファイル>読み込む…"でこのvcfファイルを指定する。以上で終了。※csvソース2行目の「平将門」さんは、「姓読み」を省略しているため、「すべての連絡先」末尾の「読みなしグループ」になる例です。

csvソースの例:
服部, 半蔵, はっとり,, 011-1111-1111, 01-1111-1111, aaa@bbb.cc, 111-1111, , 大江戸区城内西1-1
平, 将門, , まさかど, 022-2222-2222, 02-2222-2222, ddd@eee.ff, 222-2222, , 大江戸区城内東2-2

出力されたvcfとカード@連絡先アプリ

【追記】tkinterのmac対応 7月4日, 2020

このpythonスクリプトでは,tkinterパッケージを利用している。しかしこのパッケージは私が思うにmacOSとの相性は最低だ。色々な箇所に実用上の不具合がある。たとえば、(ここでは関係ないが)ウィジェットに漢字を入力する場合、確定させるリータンキーを入力するまで文字が表示されないような例もある。上記でもasksaveasfilenameに支障があることに気づいた。それは、vcfファイルの保存先を指定するダイアログで、既存ファイルを指定するとエラーとなるのだ。これは、macOSでは(多分Windowsでも)filedialog.pyを使用せず、システムのファイルダイアログを用いることに起因するものらしく、解決方法を知らない。本来なら例外処理が必要だが、ここでは省いている。ちょっと格好悪い。

Xcode-11.5とXVim2 6月1日, 2020


Xcode-11.5に上げてからVim起動時にエラーが出るようになった。表示は長いので省略するが、要するに「プラグインXVim2.xcpluginのロードエラー」などで、

$ xcodebuild -list> /dev/null

これでも同じエラーが表示される。対処方法がわからず、コールドブートの度に、つまり私の場合は毎朝、この何行ものエラー表示が繰り返され、わずらわしかった。これまで類似のエラーは、GithubのXVimProjectにある手順に従えば解決したように思うが、今回はNG。

調べてみてEugeneの これ を発見。2020-03-01の記事だけど、大変ありがたい。Thanks a lot. 要するに「xcodebuildも再署名しなさい」ということ。再署名することでTeamIdentifierが’not set’になる。これで前手順で’not set’にしてしまったXcodeのTeamIdentifierと連携をとるということだろうか。このあたりの事情を説明するものをまだ見てはいないのだけど。とにかく、これで悩まされていたエラー表示は出なくなる。

$ sudo codesign -v -s XCodesigner -f --timestamp=none /Applications/Xcode.app/ \ Contents/Developer/usr/bin/xcodebuild

この処理は、XVimProjectのREADMEに加えるべきだと思う。

心拍の光学式センサーと胸センサーの返す値を比較する 8月29日, 2019


普段,光学式センサーで心拍を計測している。今日は以前から気になっていた事を実測してみた。それは,「手首で測る光学式センサーが示す値は,胸ベルト式のセンサーと同じだろうか」ということ。

ちょっとみっともないかもしれないが,時計を両腕につけ,一方は手首で測り(Garmin-ForeAthlete225j),もう一方は胸で測って(Polar-M200)80分ほど走ってみた。ゆるい上り下りのある周回コースを4周ほどしている。

Garminの計測間隔は不定なので,1秒毎の計測値が残るPolarと対照させる工夫が必要となる。図の左下のような表で, Garminの計測秒数によりPolarのデータを串刺しにしている。まあ,Garmin計測値の表にPolarの計測値を抜き出して加えている,といったところか。

一応の結論は「両者に差はない」としておこう。青線が手首, 緑線が胸。赤線は"青マイナス緑"。差の平均は0.56となり, 全般的に見れば差はないとしてもよいだろう。グラフの中央付近などに不自然な谷はあるが(最大の差は,光学式:116bpm,胸ベルト式:154bpm),理由は不明。また,今回の計測では全体的に光学式の数値が不安定に思えるが,その理由も不明だ。今後,繰り返して測ってみれば,もっと具体的な差異がわかってくるかもしれない。

心拍数ドリフトのこと 8月13日, 2019


運動を続けると, 体温の上昇とともに心拍数が徐々に上がっていく。たとえ自覚的運動強度が同じであっても, 心拍数は自然に上昇していく。Cardiovascular drift(CV drift)と呼ぶのだそうだ。その様子を確かめてみたいと思い, Garmin connectのデータを表示してみた。ここではある日のジョギングデータをtcxファイルにエクスポートし, 簡単なperlスクリプトで処理している。同じペースで軽く80分間ほど走ったグラフだ。

シェルからGeekletをリフレッシュする 3月19日, 2019


GeekToolでデスクトップを飾って遊んでいる。ちょっと必要があって, bashのスクリプトからGeekletをリフレッシュしたくなった。設定する秒数を指定する方法ではなく, 自分の思うタイミングで励起したいのだ。

まず思いつく単純なやり方として情報が多いのは, AppleScriptを利用してリフレッシュするものだ。

tell application “GeekTool Helper”
  tell geeklet id “vvvvvvvv-wwww-xxxx-yyyy-zzzzzzzzzzzz”
    refresh
  end tell
end tell

こんなAppleScriptを用意して,それをスクリプトから呼ぶわけだ。しかし, 考慮中のものは,Launchctlに起動されたbashスクリプトからGeekletを呼んでデスクトップに表示するものだ。単純化すれば,

■よくありそうな手順
・Launchctlからbashスクリプトを起動する
      ↓
・スクリプト内でGeekletをリフレッシュするために, "AppleScriptファイルを呼ぶ"
   /usr/bin/osascript  /Users/me/Library/Scripts/sample.scpt
      ↓
・AppleScriptがGeekletをリフレッシュする

このようにAppleScriptを介するのがちょっと不愉快に思ったのだ。それで「bashからGeekletを直接リフレッシュする」方法があるだろうと思って調べたが,簡単にはヒットしなかった。ここに書き留めておく意味もあるかもしれない。結論は簡単なことで, AppleScriptのファイルは不要。"Geekletを直接リフレッシュする"。

例えばこんな風に,
$ /usr/bin/osascript -e ‘tell application “GeekTool Helper”
    to refresh geeklet id “vvvvvvvv-wwww-xxxx-yyyy-zzzzzzzzzzzz”’

単純なことだった。この効用は, ターミナルから入力すれば確認できる。まあ, ファイルは不要とは言え, AppleScriptを用いることには変わらないのだけど。

【追記】icalBuddyのCatalinaへの対応 10月23日, 2019

GeekTool自身は問題なく動くのだが, 併用しているicalBuddyがNGとなった。不安定。「これは困った」と思っていたら早速対応してくれた方があった。 ここ のicalBuddy64.gitを使わせてもらう。 THANKS!

気温の日変化 1月12日, 2019


"ほぼ日課"で昼前に5km走っているけど(去年は こんな風), このところ寒いので服装を迷う。半袖Tシャツの上にフリースのジャケットを着るか, ウインドブレーカーを着るか。一応, MacBookProのデスクトップにGeekToolで表示している外気温を参考に上着を決めることにしている。

それでふと思ったのだけど, アメダスのデータって簡単に記録することができるかな? 観測データをファイルするのって面倒だろうか?

やってみた。

■機能
・東京の気温データ(北の丸公園)を毎時読み取ってログする。
■実行は
・Geektoolの表示を夜間もログしようと思ったことが発端だが, MacBookProで動かしたのではやはり不便。止めることもあるし, スリープさせないのも面倒。読み取りスクリプトは, Debianのサーバー上に置いて, cronで起動することにした。
・読み取りの頻度は60分おきで十分。でも暇なサーバーだし,15分毎に起動して遊んでみることにした。
■利用例
・動かした結果をNumbersで開いてみると, 下記のようなグラフを書くこともできる。
・ここでは時間変化を確かめてみたが, 毎日午前6時のデータを1ケ月貯めてみるのも面白いかもしれない。

SeilとSierra 1月7日, 2017


AquaSKKを便利に使用して随分になる。読み入力に入るためのシフトキーをスペースバーに割り当てることで,親指シフトキーボードのようにできるのも実に具合が良い。当然ながら,スペースバーを単独で押した場合にはスペースを出力するようにする。これも含めたキー置換をSeilとkarabinerに頼ってきた。ところが,年末にSierraにあげ,この置換が不可能になってしまった。keyhacを使う方法もあるようだが,どうも勝手がよくない。

そこで,当面, wwwjfy を頼ってだましだましだった。ところが,Version-0.90.73で大きな変更があった。「standalone_keysに指定できるのは交換されていないキーに限る」となったのだ。どう設定したよいか。目標は,「spacebarを,修飾キーとしてはシフトキーとし,単独キーとしてはスペースキーとする」こと。

やってみたら単純だった(下記に示しているのは該当行のみ)。

$ vi ~/.config/karabiner/karabiner.json

  "simple_modifications": {
    "caps_lock": "left_control",
    "spacebar": "right_shift"
  },
  "standalone_keys": {
    "spacebar": "spacebar",
    "caps_lock": "escape"
  }

irbの日本語(再) 12月14日, 2016


Xcodeのバージョンがあがった。readline-7.0も出ていたし,久しぶりにlibeditをlibreadlineに入れ替えることにしよう。作業の時に参照している メモ が古くなり,不適切な箇所も気になっていたので,まとめ直すことにする。(El Capitan/10.11.6)

■まず、readlineを再compile。

$ curl -O http://www.ring.gr.jp/pub/GNU/readline/readline-7.0.tar.gz
$ tar xzvf readline-7.0.tar.gz; cd readline-7.0
$ ./configure; make; sudo make install

■ライブラリの指定を確認する

$ cd /System/Library/Frameworks/Ruby.framework/Versions/2.0\
    /usr/lib/ruby/2.0.0/universal-darwin15/
$ otool -L readline.bundle | grep libedit
    /usr/lib/libedit.3.dylib (compatibility version 2.0.0, current version 3.0.0)

このlibedit.3.dylibを/usr/local/lib/libreadline.dylibに入れ替えればよい。

■ライブラリの指定を入れ替える

$ sudo cp -p readline.bundle readline.bundle.BK
$ sudo install_name_tool -change \
    /usr/lib/libedit.3.dylib /usr/local/lib/libreadline.dylib \
    readline.bundle

■結果を確認する

$ otool -L readline.bundle | grep libreadline
    /usr/local/lib/libreadline.dylib (compatibility version 2.0.0, current version 3.0.0)
$ irb
irb(main):001:0> name="あ"
=> "あ"
irb(main):002:0> 

よし、OK//

【追記】irbのCatalinaへの対応 10月23日, 2019

irbが使えなくなった。「…Catalinaへの対応」というより「既存irbの放棄」だね。システムのRubyはWebby用に限定し, 遊びで使用するのは最新安定版(ruby-2.6.5)にすることにした。ソースをもらってきてコンパイル。ただし, このサイトを組み上げるのに使用しているWebbyは古いものなのでruby-1.8が必要。これまでOSのバージョンアップがあってもそのために古いrubyを温存してきている。ページの維持管理にはそちらを使用する。ちょっと面倒だけど, 自分でWebbyをupdateするよりは楽だろう。

readlineについてはreadline-8.0が"/usr/local"にいれてあるので, configureに指定することでirbの日本語の扱いには問題がなくなり, 上記のreadline.bundle関連のあれこれは不要になる。これで"alias irb=/usr/local/bin/irb"とでもしておけば普通にirbが使える。

ruby-2.6.5$ ./configure --with-readline-dir=/usr/local

ガーミンのデータを抜き出す 8月13日, 2016


GarminのEdge500とForeAthlete225Jを使用してきている。暑くなって、ゆったりジョギングでの心拍がやはり20bpmは上がったなと思いつつ、ひらめいた。Garmin connectに貯めているデータをまとめてダウンロードできないかな。

確かめると、Garmin connectでは、個々のアクティビティーのデータを得ることはできるが全データを一括して得る方法は無さそうだ。今更GarminのSDKにあたるのも何だし…。ただ、古いアプリケーションのGarmin Training Center(GTC)からであれば、「すべてのデータをエクスポート」する機能がある。

試しにForeAthleteをGTCに同期し、データをXMLでエクスポートしてみた。「すべてのTraining Centerデータ.tcx」というファイルができる。中身を見ると単純なXMLファイルの構造が読みとれる。そこで簡単なperlのスクリプトを書いてみた。

■機能
Lap毎のデータから、ID・時間(秒数)・距離(メートル)・平均心拍数(bpm)・平均ペース(分:秒/km)・平均ステップ(spm)をSTDOUTにCSVデータとして書き出すこと。
IDは、例えば、"2016-03-20T00:18:31Z"のように、スタート日時をUTCで示す文字列にした(日本のローカルタイムでは2016-03-20T09:18:31)。
■実行するには
スクリプト名称をtcx2csv.pl、データファイル名称をData.tcxとすると、
$ tcx2csv.pl Data.tcx | sort > RunningData.csv
■利用例
得られたCSVファイルをNumbersで開くと、例えばこのようなグラフを書くことができる(勿論、Execelに読み込むことも可能)。アクティビティの平均心拍数と平均ステップ数を表示してみたもの。

[追記 2020-03-10] Garmin Training Centerは古いものなので、現在では入手することができない。それにもうCatalinaでは動かないでしょう。

irbの日本語 2月17日, 2014


Mavericksになって、久しぶりにirbを起動してみたら日本語文字列が使用できない。これはirbが使用するlibeditが日本語を理解できないためらしい。解消する手順はネット上にも記事が多くさまざまな方法があるようで、要するにlibeditをGNUreadlineに入れ替えればよいということのよう。HomebrewやMacPortsを好まないのは少数派のようだな。以下は特にユニークな内容ではない自分用メモ。

■まず、日本語を理解してくれるGNUreadlineをcompile

$ mkdir work; cd work
$ curl -O http://www.ring.gr.jp/pub/GNU/readline/readline-6.2.tar.gz
$ tar xzvf readline-6.2.tar.gz; cd readline-6.2
$ ./configure CFLAGS="-arch i386 -arch x86_64" LDFLAGS="-arch i386 -arch x86_64"
$ sed -i "" -e 's|-dynamic|-dynamiclib|' -e 's|-arch_only `/usr/bin/arch`||' shlib/Makefile
$ make; sudo make install
$ ls -F /usr/local/lib/libreadline*
/usr/local/lib/libreadline.6.2.dylib*
/usr/local/lib/libreadline.6.dylib@
/usr/local/lib/libreadline.dylib@
/usr/local/lib/libreadline.a

■次に、libedit.3.dylibをつないでいるreadline.bundleを探す

$ find / -type f -name readline.bundle -print 2>/dev/null
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/
    universal-darwin13.0/readline.bundle
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/
    universal-darwin13/readline.bundle

この’1.8’の下は以前のバージョンのものなので、’2.0’の下が問題のもののはず。

■ライブラリの指定を確認する

$ cd /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/
     universal-darwin13/
$ otool -L readline.bundle
readline.bundle:
    /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/libruby
        .2.0.0.dylib (compatibility version 2.0.0, current version 2.0.0)
    /usr/lib/libedit.3.dylib (compatibility version 2.0.0, current version 3.0.0)
    /usr/lib/libncurses.5.4.dylib (compatibility version 5.4.0, current version 5.4.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1)
    /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)

この/usr/lib/libedit.3.dylilbを/usr/local/lib/libreadline.6.dylibに変更すればよいはず。

■ライブラリの指定を入れ替える

$ sudo cp -p readline.bundle readline.bundle.BK
$ sudo install_name_tool -change \
    /usr/lib/libedit.3.dylib /usr/local/lib/libreadline.6.dylib \
    readline.bundle

■結果を確認する

$ otool -L readline.bundle
readline.bundle:
    /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/libruby.2.0.0.dylib
      (compatibility version 2.0.0, current version 2.0.0)
    /usr/local/lib/libreadline.6.dylib (compatibility version 2.0.0, current version 3.0.0)
    /usr/lib/libncurses.5.4.dylib (compatibility version 5.4.0, current version 5.4.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1)
    /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)

■irbの動作確認

$ irb
irb(main):001:0> name="あ"
=> "あ"
irb(main):002:0> 

よし、OK//

連絡先.appのデータをExcelに読み込む 12月21日, 2013


Mavericksの連絡先.app-8.0(1365)になって、vCard書き出しの書式がわかりにくくなった。以前のスクリプトにちょっとした変更を加えて、自分にとってはまあ支障ない動作にした。場当たり的だけどね。ただし、配偶者(1名、当然か)以外に兄弟・知人が登録されている場合には、手を加えなければ想定通りに動かないのは以前と同様だ。

以前の記事 ;

gprolog-1.4.4 11月28日, 2013


Mavericks, Xcode5でgprolog-1.4.4にupdate。

$ curl -OR "http://gprolog.univ-paris1.fr/gprolog-1.4.4.tar.gz"

compileしてみたが、コンパイラが変ったことで以前のスイッチ類は効かない。また、それらを省いてただconfigureしても"Fatal Error"となる。

Fatal Error: Segmentation Violation (bad address: 0x0)
compilation failed
make[1]: *** [fd2c.o] Error 1
make: *** [all] Error 1

これはちょっと手こずるぞ。情報を探すうち、作者のDaniel Diazの「修正したソースをGitに置いた」という発言を発見。[ Source作者のGitの情報 ]

$ mkdir work;cd work
$ git clone git://git.code.sf.net/p/gprolog/code
$ cd code/src;
$ ./configure;make;make check
$ sudo make install

得られるソースに含まれていないconfigureと一部のdocは配布パッケージからcpした。"All tests succeeded"で、これにてOKとなった。

Mavericksの不体裁:Login画面の入力メニュー 10月28日, 2013


OSのメジャーアップデートは、しばらく様子見することが多いのだが、"無料"にひかれて即座にOSを上げた。[Finder環境設定]>[タグ]の文字列"サイドバーに表示すタグ:"のような不体裁が残っていて、ローカライズのこととは言え、製品の最終点検確認の手順がどうなっているのかな。アマチュアが作ったみたいだ。

ログインウインドウで名前とパスワードを入力する設定にしているが、["ユーザーとグループ"環境設定]で、[ログインオプション]の"ログインウインドウに入力メニューを表示"のチェックボックスが機能しなくなった。チェックを外しても、"ことえり"の「英字・ひらがな・カタカナ」の入力メニューが表示される。(以下削除)

[追記 2014-02-28]: 誤った内容を削除した。ログインオプションの設定通りに起動しない場合、’/Library/Preferences/com.apple.HIToolbox.plist’が不適切なのだから、それを単純に削除すればいいことに気づいた。

Login画面&Webby再設定 3月1日, 2013


OSをあげて、あれこれ雑事で遊ぶ。その中からメモ2項目。

Login画面を’名前’と’パスワード’の入力にしているのだが、Mountain LionでIDを入力しようとするとFEPが動くようになった。「’ことえり’は切っているのに変だ。単純に英数字を入力したい。どこで設定しているのだろう」としばらく悩む。Netでもそれらしい記事を発見できず、そのうち、Appleの説明を読んでいて気づいた。方法は以下。

ログインオプションで’ログインウインドウに入力メニューを表示’を選んだ上でログアウト。表示された入力メニューで’このリソースを削除’する。

単純なことだった。でも、なんでこんな動作をdefaultにしたのだろう。「さまざまなユーザーの便宜を考慮して」かな。余計な手間に思える。

それと、クリーンインストールしたのを機会に、Webbyを再度インストールし直してみた。あれこれのゴミもたまっているのでね。ソースは ここ からもらう。このところの更新はやはりない。でも目下はOK、まだ動く。これがNGになったらサイトの構築手順をどうするか悩みそうだが当面はよしとしよう。

DBD-mysql-4.022のupdate 2月1日, 2013


ここにあるのは自分自身のメモです。MacPortsやHomebrewを好まず、むしろ手数がかかるのを楽しんでいます。基本は「今目の前で動けばよい」ということ。MacBook Proで遊んでいます。

Lion既存のものとは別に、最新版のDBIを/usr/localにインストールしたメモ。

OS X 10.7.5
Xcode 4.6(Command Line Tools)
PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/Applications/Xcode.app/
    Contents/Developer/usr/bin:/usr/local/mysql/bin
DYLD_LIBRARY_PATH=/usr/local/mysql/lib:/usr/local/lib

DBI-1.623
$ perl Makefile.PL; make; make test; sudo make install

DBD-mysql-4.022
$ perl Makefile.PL; make; make test;
t/80procs.tをfail。

t/80procs.t ................. 1/29 DBD::mysql::db do failed: Cannot load
from mysql.proc. The table is probably corrupted at t/80procs.t line 41.

テストスクリプトを見ると、"drop procedure if exist"の箇所だ。手で繋いでみると、DBのtestは空だし失敗などするはずがないのだけど…。あっ、最近MySQLを5.5.29にupdateしたけど、長いことテーブルをupgradeをしていなかった。 参照

$ sudo mysql_upgrade -p

これで再度"80procs.t"も含めて全テストにパス。OK。

MySQL-5.5.29をソースからコンパイル 1月31日, 2013


MySQL-5.1.44が古くなったのでupdate。バイナリーをインストールしてみたが、"Server characterset"が latin1でコンパイルされている。この先文字コードの扱いが面倒になりそうなので、ソースから。

Mysql-5.5.29.tar.gz(64bit版)を ここ からもらって展開すると…あれconfigureが無い。これは cmake なる道具を使うようになったためとのこと。バイナリーがあるので、それをインストール。

全データベースをダンプし、/usr/local/mysql-5.1.44/dataも一応バックアップして

$ cmake . -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_unicode_ci
$ make
$ make test
$ sudo make install

testもすべてok。

[追記 2013-03-03]: Mountain LionでMySQL-5.6.10に上げたところ、上記はNG。’Segmentation fault’を吐いて止まってしまう。環境が問題なのかもしれないがよくわからず面倒でもあり、バイナリーを入れた上で、my.cnfに’character-set-server=utf8’を加えることでよしとした。

単純な構造のXMLからエレメントを抜き出す 4月27日, 2012


GPXデータのtrkpt要素を抜き出し、time要素を読み取って処理することで遊ぶうち、その一部は幾分かでも汎用的なものにしておいて後日に備えようという気になった。XMLのうち、ごくシンプルな構造のものであればそれほど手もかからないという読みだ。

エレメントの名称と対象のXMLファイルを指定すると、そのエレメントの内容を表示する単純なperlのスクリプトだ。XMLでは、ツリー構造の各レベルに同一名称のエレメントが存在している場合がある。ここではそのレベルの違いを無視し、名称で全てを抜き出してくる。特徴は、XMLモジュールを用いず、正規表現でマッチさせている点にあるだろう。ただし、私の関心は身の回りにある ごく単純な構造のXMLファイル にあるので、それなりに複雑でサイズも大きい純然たるXMLには対応できないだろうと思う。また、XML宣言部分や全角のタグ名称についてはここでは考慮していない。

スクリプトでは、複数行マッチをさせる関係から予め全てを文字列に読み込んでしまう。サブルーチンでそこから該当エレメントを配列に抜き出させ、その配列を表示している。この表示部分を加工すれば、後日何かに適応できるのではないかという目算だ。でも何ができるかわからないけどね。サブルーチンで、マッチングをとるのにちょっと格好悪い’or’があるのは、<tag…/>を処理するためのもの。そこでは属性にデータがあり終了タグが省かれている。どうも私はXMLを充分に理解していないなあ。とにかくそれに対応している。見るからに効率も悪そうだしエレガントではないのだが、わが要求からすれば充分に機能を果たしてくれる(はず)。

$ ./extract_element.pl ElementName From.xml

ElementNameが抜き出すエレメント名、From.xmlが対象のXMLファイル名。

[追記 2014-02-13]: タイポが残っていた。訂正。まじめに動作確認もしなかったようだ。それと、’plist’をこれでいじっていたら、単純な構造であっても同名のエレメントが内部に存在すると処理できないこと、awkなら同名エレメント以外簡単に処理することに気づいた。

$ awk '/<ElementName>/,/\/ElementName>/ {print}' From.xml

今更だね。GPXのデータを見ている時、なぜこんな簡単なことに気づかなかったのだろう。執着すると離れて考えられなくなる典型だな。

GPXデータをスリムにする 4月23日, 2012


GPSロガーないしは、サイコンの話です。gpxデータのポイント数が多い場合、例えばルートラボなどにインポートしようとすると8,000ポイントの制限を越えてしまって、保存することができませんよね。以下は、それを削ることに関して、自分ではこうするということを簡単にまとめたものです。Lionのシステム既存のrubyで処理しています。環境が変ればこのままではうまくいかないかもしれません。例によって、自分の目の前で必要な処理ができればよい、というスタンスで考えたものですが、同じような環境の方なら多分同じ動きをするはずです。

今、試しにgpxのファイルをエディターで開いてみると、それが単純なXMLファイルであることがわかります。各ポイントデータは<trkpt>と</trkpt>のタグで囲まれ、その下位の<time>タグにUTCで表現された時間データが記録されています。試しにのぞいたものは、4秒毎にデータを取得していて毎分15ポイント。走行時間が10時間の遠出ではデータが9,000ポイントにもなります。ここはひとつ思い切って毎分1ポイントにスリム化してしまいましょう。

スクリプトではREXMLライブラリを使用して、分毎の重複するエレメントを削除しています。ごく短い純朴なもので、かなり遅いのですが、ちゃんと処理してくれます。手元のデータをスリム化した例では、10,000ポイントを少し越えるものを1,000ポイント以下まで削ってくれました。ここまで削る必要はありませんが、まあ今時スリムにこしたことはないでしょう。遅さは驚く程です。3〜4分はかかるのを覚悟して動かします。そう頻繁に使うものではないし、短時間で簡単に書けるスクリプトの方がありがたいといういつもの発想です。

point_reducer.rbのfile_nameに編集対象ファイル名を指定した上で、
$ ./point_reducer.rb | sed '/^ *$/d' > OUT.gpx

delete_elementした結果の空白行をsedを通して削っています。簡単なのがなにより。結果はOUT.gpxにリダイレクトしています。

上記をまとめたあと、思いたってperlでも挑戦してみた。XMLモジュールは用いずに、高校生のように素朴にパターンマッチで処理した。別にperlに慣れているわけでもないのでね。上記と同様に毎分1ポイントにスリム化し、Rubyの動作確認に使用したのと同一の10,000ポイントを越えるデータを処理してみたところ、処理に要した時間は驚きのもの。timeコマンドの出力で0m0.093s。あまりに速いので、気づかない手抜かりでもしているのではないかと心配で、Rubyでやったものと比較してみると、Byte数・行数は同一。これで安心と思いつつも、念押しのdiff。無論同一となるとの予想に反し行数と同じくらいの数のズレを指摘された。いやあ、ミスしたかなとソースと目で比べてみると意外や意外。RubyのREXMLライブラリーを使用したものは、属性の配列順序がソースと異なるのだ。何か指定しなければいけなかったかなあ、ライブラリー内部ではハッシュが返す値を用いて再構成しているのかな、複雑なことをやっているのだろうなあなどと思いつつ、中心としていたtrkpt要素については全く影響がないことなのでいいことにした。今後はperlの方を使おう。

$ ./reduce_point.pl GPX.gpx > REDUCED.gpx

GPX.gpxがソースファイル名、REDUCED.gpxが出力先ファイル名。

[追記 2012-08-14]: 上記perlスクリプトについて、timeタグのフォーマットが異なるロガーがあることに気づいたので、16行目の正規表現に手を加えた。

Xcode-4.3.2のCommand Line Tools 4月19日, 2012


Xcodeをupdateして4.3.2となった。gemに必要なので、Command Line ToolsをXcodeのPreferences>Downloads>Componentsからインストールしようとしても、Checksum Errorで失敗する。これは僕の環境で起こるだけなのだろうか。ここで得るファイルにミスがあるせいではないのか。このエラーは、discussionsjapan.apple.comには何の情報も無いが、discussions.apple.comにはかなりの情報があるのだけど。とにかくそれに従って上の方法を捨て、直接Developer ConnectionからLate March 2012を手動でダウンロード。このファイルはOKだった。いったいどういうことなのだろうか。不思議だ。

FlushとSafari 4月17日, 2012


Lion になって起動できなくなったClassic・PowerPCのアプリケーションやフレームワークなどを一掃した。これまでのメジャーアップデートの時、まっさらインストールをしてこなかったのでね。それもあり、動作確認のためにConsole.appを動かし"すべてのメッセージ"をながめることが多くなって気づいた点を2つ。

最も気になる点は、Flush Playerプラグインに関連してkernelが吐くエラー。

kernel [0] : IOSurface: buffer allocation size is zero

このプラグインを外せば出なくなることで因果関係は確かめられるが、かなりログを消費している。この件は ここ に最新のまとめがある。Safariと同じくWebkitを使用するChromeでも同様の警告が出るが、GeckoのFirefoxでは出ない。どうやらWebkitとFlushとの連動にそもそもの原因があるようだ。これを開発に当たっている人たちは充分承知しているだろうに、なぜ解決しないのだろうか、不思議だ。対処方法は、プラグインを外す以外にない(だろう、多分)。

実は、さらにログを浪費しているのは、32bitアプリケーションが動く際に出る警告。試しにConsole.appを32bitモードで起動すると、

Console: Warning – conversion from 64 bit to 32 bit integral value requested within NSPortCoder, but the 64 bit value 9223372036854775807 cannot be represented by a 32 bit value

これはわがMacBookProが初期のもので(MA609J/A)、64bitのcpuを載せていながら、EFIが32bitであるため中途半端な状態で動いているためかもしれない。しかし、愛用のCotEditorなど、毎秒20行以上もこれが出力されたりするのだからひどい。syslogのレベルを変更して出力を押さえたりもしてはいるものの、警告を発して無駄に動いていること自身はどうしようもなく気分が良くない。元々が速くはないマシンなので、何とかならないものか。困った。こちらの対処方法は、見なかったことにして無視するか、グチを言う以外に無い。

[追記 2012-04-19]: CotEditorやMacJournalなどの常用アプリケーションでconversionの警告が大量に出る原因を勘違いしていた。このwarningの原因は、AquaSKKにあるようだ。性に合うので気に入って長らく使ってきていて、他のwindowsなマシンやことえりなMacに向かった時でも、反射的にスペースキーやqキーを押してしまうほど。Lionに上げた後も、これが無事に動くので喜んでいたのも束の間、警告の固まりとなってしまった。途方に暮れてしまうよ。

Finderのプレビュー欄の日本語文字列 4月12日, 2012


遅まきながら Lion にした。ほとんどの主要なアプリケーションに問題はなかったが、楽譜清書の Sibelius4 はやはり古かった。Updateせずに満足して使っていたのに Lion には非対応。結構な出費と相当なダウンロード時間で(サウンドデータが30GB以上もある)、何とか Sibelius7 に生まれ変わった。よしよし。

あれこれいじっている中で気づいたことを1点だけ。それは、ファインダー/ Finder をカラム表示にした時のプレビュー欄に関して。ファイルを選択すると、ファイルの名前・種類・サイズ・作成日・その他の情報とともにアイコンが表示されるのだけど、 Lion では、テキストファイルについては内容そのものが読み易いサイズのフォントで、しかもスクロールバー付きで表示されるようになった。内容を手軽に見ることができ、クイックルック/ QuickLook する必要もない。ちょっと大きなファイルでは表示可能量に制限があるようだが、必要なら"ちょん"とスペースキーを押せばテキストの全体が表示されるのだし問題ない。

Desktop にメモを散らしているので、それらをざっと見渡す場合などにとても便利。ただ、必要があって ruby のソースを開こうとして気づいた。ファイルに書き込んである日本語文字列が化ける。

スクリプトの多くには、作成時の意図や使用法の要点などをメモしているのでこれが読めれば更に便利なのに。UTI(Uniform Type Identifier)のpublic.plain-text(Text.qlgenerator)ではOKなのに、その下位のpublic.source-codeで文字が化けるわけだから、SourceCode.qlgeneratorが使用するEncodingに関連するように思える。解決にはちょと時間が必要かな。当面の逃げは単純にソースコードの表示加工を止めてしまえばいいか。

/Developer/Applications/Xcode.app/Contents/Library/
     QuickLook/SourceCode.qlgenerator の名前を変更し、
$ qlmanage -r

〜SourceCode.qlgeneratorBK にしておく。プログラム用のソースコードに相応したカラーリングが行なわれなくなるし、logにエラーが残るが、得られるものの方が大きい。カラーリングだけならQLColorCode.qlgeneratorもあるのだけれど…。まあ当面これで充分としよう。Xcodeなどで色を付けたくなったら上の " BK "を削るだけだし。

なお、日本語表示に使用されるフォントの種類やサイズを変更する簡単な方法については、 こちら に説明されています(別サイトに飛びます)。

[追記 2012-04-16]: syslogに次のエラーが数多く記録されるようになる。

quicklookd:
Can’t get plugin bundle info at file://localhost/Developer/Applications/Xcode.app/Contents/
Library/QuickLook/SourceCode.qlgenerator

これが気になる場合は、

/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/ LaunchServices.framework/Versions/A/Support/lsregister -f /Developer/ Applications/Xcode.app

まるでおまじないだね( Source )。

Ritchie氏の訃報を聞いて 10月14日, 2011


"カーニハン&リッチ"のリッチ氏が数日前に亡くなったとのこと。Source

新聞やTVのニュースで、どこかでは伝えているのかもしれないが、少くとも私の見ている時間には全く触れないのが大変意外に思える。最近の活躍ぶりについては門外漢ではあるが、今使っているMacもUNIXで動いているし、世界中のコンピュータのどれくらいがその恩恵を受けたのだろうか。私自身も本でもCそのものでも、大変楽しませてもらった。少々大袈裟かもしれないが、わが人生を豊かにしてくれたと思う。ご冥福をお祈りする。

Cyberduck-402不可視ファイルの表示 6月6日, 2011


環境設定や表示メニューの設定で、不可視ファイル(ドットファイル, dotfile)を表示するように設定しても見えない場合の対処を以前まとめましたが、その後のupdateに伴ないプロパティー名が変更されたようなので再々度書きます。

ターミナルから

$defaults write ch.sudo.cyberduck ftp.command.stat false
$defaults write ch.sudo.cyberduck ftp.command.mlsd false

と入力する。私が使用しているサーバーの中には、相性がよくないためかCyberduckのデフォルトの状態ではうまく機能しないものが混じっています。上記は、Cyberduckがサーバーからファイルリストを得るのに発行するコマンドの順序(STAT→MLSD→LIST -a→LIST)を修正して、"LIST -a"に固定するものです。 Source

Chromeとiframe & window.open with Hash(#) 1月22日, 2011


Safariを使っているので気づかなかったけど、Google Chromeを使うと起こる不思議な違いに出くわした。inline frame中からポップアップwindowを開くのに、

function test_open(url) {
  window.open(url, "popup", "width=300, height=30");  
}
-----
<a href="testData1.html#flg" target="popup"
 onclick="test_open(this);return false;">吾輩は猫であるN</a>

こんな形で呼ぶ時、Chromeでは、flg=flg1が普通に成功するように見えるのに、それ以外は探し損なう。これはSafariの動作とは異なる。

なぜだろう。理解できるまでは当面下記でしのぐか、2度開くのはちょっと無様だけど。

function test_open(url, position) {
  var win = window.open(url, "popup", "width=300, height=30");
  url += position;
  win.open(url, "popup");
}

[追記 2012-12-30]: 以前のバージョンでは2度開きでしのげていたので気づかずにいたが、久しぶりにチェックしたところ、Chrome-23.0.1271.101ではこの逃げもきかないようになっていた。同期に関連する問題だろう。Chromeは使っていないからいいことにしようと思いつつ、一応の手当はしておこう。親でハッシュタグをグローバル変数(下記ではshowme)に置いて、子からwindow.onloadで読むことにした。動作が不安定なのでsetTimeoutしている。

function init() {
    location.hash = ''; //何故か不可欠のこともあり不安定
    location.hash = opener.showme;
}
// window.onload = init; //何故かNGのこともあり不安定
window.onload = setTimeout(init, 100);

不安定だが、これが本来の手順に近いだろうししょうがない、ということでこんな風…

[再度追記 2013-01-05]: 「しょうがない」という中途半端な上の方法は止めた。ちょっと大きなページを読み込むと、ハッシュタグを探すのに成功したり失敗したりと動作が不安定になる。もうこの方法はあきらめ、タグ位置からの表示したいIDブロックを切り抜いてbodyと入れ替えよう。自分の環境では、Chromeへの対応としては、ポップアップを無くさない限りこれが最善のようだ。呼ばれる側で下記のように自分のbodyを書き換える。sliceしているのは、’#’がついてくる状況なので削っているもの。Safari, Chrome, Firefox, Operaで動作OKを確認した。

function init(){
      document.body.innerHTML =
           document.getElementById(opener.showme.slice(1)).innerHTML;
}
window.onload = init;



MTのデフォルト日付書式の変更 01月03日, 2011


このところ必要があって久しぶりにMovable Typeをいじらなければならなくなって困りました。以前のバージョンでは、システムの日付書式を設定する箇所があったように覚えているのですが、違ったかなあ。システムをアップデートしたら、ポスト日付等のフォーマットが使用言語によって自動で設定され、それが"2011年1月1日"のような形式となっていて、この書式はどうもNGなのです。変更するには個別のシステム・テンプレートを一つひとつ変更しなければならないようで、エレガントではないなあ。

バージョンは5.04です。探してみると、lib/MT/Util.pmに

line:1512-
"%Y年%b月%e日 %H:%M",
"%Y年%b月%e日",
"%Y年%b月",
"%b月%e日",

とあります。これを変えればいいのだ。

"%Y/%m/%d %H%M",
"%Y/%m/%d",
"%Y年%m月",
"%m月%d日",

これならまあよいか。再構築してみたところ、これでOKでした。ただ、今後のバージョンアップでは要注意かと。

魔方陣の枝刈りのこと 04月13日, 2010


ダン・ブラウン「ロスト・シンボル」に4x4の魔方陣の話がでてきます。まだ読んでいない方もあるでしょうが、謎解きに関わる事柄とは違うので、ネタバレでもないでしょうからかまわず書きますと、デューラーの版画に見えている魔方陣なのです。縱、横、ななめ、四隅、各隅4桝、中央4桝の合計が一致する魔方陣です。「不可能とも思える」魔方陣に驚嘆し興奮するラングドンとキャサリンの様子を読んだ時、これはそれほど難しい魔方陣なのだろうか、と思ったことが発端です。

別解を探してみることにしました。rubyやperlでも組めるでしょうが、こんな場合は、LISPのカッコだらけの記述は、どうも好みではないので、やはりprologに味があります。適当に述語を並べた時にパッと動き出す爽快感は、力技で多重ループをやっと抜け出すのとは全然違います。

最初は、permutationで探索するありふれた方法を試したのですが、残念なことに終了しません。チェックする枝が多すぎて、私のMacBookでは力が足りないのです。単純に計算すれば、20兆もあるので、力不足を嘆いても無理というもの。そこでNet上ではあまり見かけない枝刈りを工夫してみました。prologは、GNUのprolog-1.3.2を用い、ローカルな述語はほとんどありませんが、解を数えるのにglobal変数を利用しています。リスト中のsequentialは、自然数の並びを得る(1,2,3…)もので、16個の数字入力をさぼっただけです。deletesは、deleteを利用してリスト中の要素を別リストから削除します。これが枝刈りの根幹部分でしょう。permutationの代わりにcombinationで4桁ずつ題意に合うリストを発生させています。さて、「ロスト・シンボル」の主旨に従って下段の中2桝を(15,14)と指定した上で解を得ると、29秒後に解答は16個もあり、本に登場するのは12番目の解でした。以外に多い。満足、満足。

deletes(X, [], X).
deletes(L, [H|Ls], X) :-
    delete(L, H, X1),
    deletes(X1, Ls, X).

combination(0, _, []).
combination(N, [X | Xs], [X | Zs]) :-
    N > 0, N1 is N - 1, combination(N1, Xs, Zs).
combination(N, [_ | Xs], Zs) :- N > 0, combination(N, Xs, Zs).

sequential(I, N, []):- I > N.
sequential(I, N, [I|L1]):-
    I =< N, I1 is I + 1,
    sequential(I1, N, L1).

dan.pl

gprolog-1.3.2のconfigure 04月10日, 2010


Prologとしては、昔のProlog KABAが懐しく、MacBookにはB-Prologを入れていました。
ルービック・キューブの変形の2×3のキューブを解こうと思いたって、いじり始めて、GNUのprologがあることを知り、gprolog-1.3.1をconfigureしてみたのですが、foreign.wamでアセンブラからのエラーが止められません。

Netでこのエラーがソースのバグによるもので、2009年11月20日の開発途中バージョンでは修正されているとのコメントを読み(Source)、2010年3月の最新不安定版1.3.2をconfigureしました。OKでした。

$ wget http://gprolog.univ-paris1.fr/unstable/gprolog-20100322.tgz
$ CFLAGS="-arch i386 -DHAVE_CONFIG_H" \
    LDFLAGS="-dynamic -L/usr/lib -lm" ./configure
$ make; make check; sudo make install

tree.rb 03月25日, 2010


懐しのtree.cをRubyで組んでみたのですが、ちょっと長いなあ。ディレクトリツリーだけでは面白くないので、ディレクトリサイズ・ファイルサイズも表示し、サイズは`ls -l`の出力にならってバイト単位にしました。もっと短かくできるかと思ったのですが、長いスクリプトになってしまいました。ファイルのタイムスタンプやモードを表示したり、オプションスイッチも指定できるようにしたり、まだまだ遊ぶ余地はたくさんありますが、保留のまま。’- d’とすればディレクトリだけを表示するのもいいなあ。

$ tree contrib/
/Users/manontanto/contrib
|---   3681:---
|---   1586:htaccess
|---   1568:smokey.sample.conf
|---    425:README
|---    102:packaging
      |---     136:---
      |---     136:Quadra
            |---    6503:---
            |---    6276:xyzQdcba.spec
            |---     227:xyzQdcba.conf

こんな表示です。"3681:—-“など”—-"が続く数字は、ディレクトリ内ファイルサイズの合計です。

tree.rb

パッケージのuninstall 03月22日, 2010


パッケージがインストールしたファイルを全て削除したくなった時、あなたならどうします?
uninstallerが含まれていれば苦労も無いのですが。/usr/local/binから除くのはいいとしても、関連するライブラリやmanを中心としたドキュメント、フレームワーク等散っているあれこれをきれいに削除したい場合は途方にくれてしまいます。こんな場合のことを、ネットを探して見つけました。まず、再度インストーラ・パッケージを入手した上で、

$ xar -xf PACKAGE名.pkg
$ lsbom PACKAGE名.pkg/Bom > FILE_LIST

とすると、ファイルの一覧を得られます。後は手作業で削除していくなり、スクリプトを組んでザッと消すなりきれいさっぱり。爽やかな気分になれます。 Source
追記: スクリプトを組むまでもないのに気づきました。 "for x in `cat FILE_LIST`; do [ -f $x ] && rm $x;done" でいけますかね。手短かにパイプでも処理できますが、削除なのでね。また、sudoが必要な場合が多いでしょうから、直前にsudo lsとかしておいてsudo rmするかな。

MySQL-5.1.44のmysql_client_testにfailure 03月08日, 2010


しばらくMySQLを上げていなかったので、久しぶりにupdateしました。

CC=gcc CFLAGS="-O3 -fno-omit-frame-pointer"  \
CXX=gcc CXXFLAGS="-O3 -fno-omit-frame-pointer -felide-constructors \
   -fno-exceptions-fno-rtti" \
   ./configure --prefix=/usr/local/mysql-5.1.44 --with-charset=utf8 \
   --with-collation=utf8_general_ci --enable-thread-safe-client \
   --with-client-ldflags=-all-static --with-mysqld-ldflags=-all-static \
   --localstatedir=/usr/local/mysql-5.1.44/data --enable-local-infile \
   --with-readline

ところが、 make test するとすぐに mysql_client_test でfailureになります。前回のコンパイル(5.0.51a)では難無く通過した所です。どうやら with-charset=utf8 がいけないようで with-extra-charsets=complex と入れ替えることで長時間(30分くらい)のtestすべてを無事通過しました。やれやれ。
Source

Webbyでページを組み立て直しました 02月11日, 2010


Textile, RedClothの記法が便利。発端は、 MacRuby » Home に寄った時に、そのページのできに感心したからです。installしてみると、見た目以上に魅力的な要素がたくさんありそうで、しばらくこれで遊べそうです。

AquaSKK-4.0の変換後文字列末尾の削除 09月27日, 2009


AquaSKKを大変便利に利用させてもらっています。単漢字を入力する機会が多く、例えば「苟」字が必要だと、「▽いやしくも」から「▼苟も」を得て「Ctrl+H」するような使い方をしてきたのですが、最近のversion upでこのControl+Hの挙動が変更になり、末尾1文字の削除ができなくなってしまいました。しばらくは「Fun Input Toy」で単漢字入力してしのいできたのですが、モードの移動がやや面倒。AquaSKKの新しい設定ファイルを見ているうちに、以下の方法で可能なことに気がつきました。

~/Library/Application\ Support/AquaSKK/keymap.conf を以下のように修正します。

-SKK_ENTER group::hex::0×03,0×0a,0×0dllctrl::m
-SKK_BACKSPACE hex::0×08llctrl::h
-PseudoHandled ctrl::lllhex::0×1b
+SKK_ENTER group::hex::0×03,0×0a,0×0dllgroup::ctrl::m,h
+SKK_BACKSPACE hex::0×08
+PseudoHandled group::ctrl::l,hllhex::0×1b

これは、「候補文字列を確定するキー」と「未処理としてアプリケーションに渡すキー」に「Ctrl+H」を追加し、「入力文字列に戻るキー」から「Ctrl+H」を除くものです。最善の方法とは思えませんが、一応これで以前とほぼ同じように使えます。以前の「skk-delete-implies-kakutei」のconfigへの設定に当る方法がわかればそちらがよりよいように思えるのですが、結びつく情報が見当たりません。

Cyberduck-3.3.b2 不可視ファイルの表示 09月22日, 2009


環境設定や表示メニューの設定で、不可視ファイル(ドットファイル, dotfile)を表示するように設定しても見えない場合の対処を以前まとめましたが、その後のupdateに伴なう変更について再度書きます。

ターミナルから

$defaults write ch.sudo.cyberduck ftp.sendStatListCommand false
$defaults write ch.sudo.cyberduck ftp.sendExtendedListCommand true
$defaults write ch.sudo.cyberduck ftp.sendMlsdCommand false

と入力する。どうも私の使用しているサーバーは、Cyberduckと相性がよくないようで、Cyberduckデフォルトの状態ではうまく機能しません。上記は、強制的にそのロジックを修正するものです。

追記:

Cyberduck-3.3.b4 が出ましたね。無事動いています。
Cyberduck-4.0.2 の動作については 別記 があります。

全角文字混在の正規表現を使った検索 05月12日, 2009


下に挙げた検索スクリプトで全角文字列を検索する場合、コマンド行からのargumentに全角文字混在の正規表現を指定したらどうなるかを試して遊んだところ、asciiが可能なのは当然としても、全角でもどうということなくパターンマッチしてくれることに感動。結構便利です。少し大き目の標準テキストの文書を検索する時など、エディターを起動せずに済みますし、正規表現で絞れる分快適です。ちょうどegrep -r の表示カスタマイズ版のようなものとして動きます。

検索語は、シェルの解釈がじゃまになるので、シングルクオートでくくります。結構おもしろい世界なので、さらに置換にも進めて遊ぼうかと思いつつ、マッチ部分の赤字処理と表示の桁数cut処理で泥まみれになりそうな予感がして未着手です。

$ myfind public/予定表/ '^\s+.*?\d月\d\d日'

ホームページ上の文字列検索・置換 05月03日, 2009


Net上には、Linuxの類似の記事やperlをめぐる一般論をよく見かけますし、魅力的なページも数多く、大変参考になります。しかし、OS X上に限定した記事は多くはないように思え、いざ何かで実際に利用しようとすると、他のOSの暗黙の前提となっている事項が理解できずに無駄に時間を過ごしてしまいます。ここでは、Leopardの perl-5.8.8 をターミナル.appから使う環境でスクリプトと遊んでいる身として、自分用メモの意味合いを中心にポツポツと書きとめていこうと思っています。

私は、ページのタグを手で素朴に入力しているので、メニューの表現変更などで全ページにわたって同一文字列を変更しなければならない際はかなり神経を使います。
$find ./ -type f -name \*.html -exec perl -ne ' if(/$word/) {$d="$ARGV$.\n$_";print $d}' {} \;
などで修正箇所を確認した上で、
$find ./ -type f -name \*.html -exec perl -i -pe 's/$SearchWord/$ReplaceWord/' {} \;
のようにして置換することが多いのですが、毎回この長いコマンドを手入力をしなくて済むように、しかも対話型で置換のスクリプトを用意しておきたいと思いたち、perlで遊んだものが下記です。File::Findを使って、findの場合と類似の処理をしています。バッファを使用して対話の中で元ファイルを書き直すことくらいは工夫したのですが、どうもperlらしくなく、Cのプログラムのようになってしまったのが幾分残念。でもまあ当面は使えそうです。

スクリプトには [検索開始ディレクトリ( default:./ )] 検索語、置換語を argumentに与えます。マッチ箇所を赤字で表示した後、置換の選択に入り、個々の候補について置換するか次に進むかを選びます。しばらくは、起動前にデータをbackupしておいた方が安心ですね。エンコードに関わる処置が万全ではないので、私の環境でないと動かないものと思われますが、Leopardでターミナル.appから呼ぶのならこのままで普通に動作するでしょう。

ついでに検索のみのものも挙げておきます。「原型」ではマッチ行が長い場合に不便なので、「別案」は表示をちょっとだけ工夫し、検索語直前の40カラム分(全角のみなら20文字)と直後40カラム分を切り取って表示するものです。ただ、検索語に正規表現を用いた場合でマッチ部分が長い場合や、そもそも検索語自身が長い場合については切り詰められずそのままが出力されます。要するに、マッチ部前方文字列($`)と後方文字列($’)を全角・半角を判断して左へ、あるいは右へ切り詰めているだけで、マッチ部そのもの($&)は操作していないためです。これを詰めると不便でしょう、たぶん。

VMWare Fusionのデーモンを止める 04月22日, 2009


普段使わないのにVMWareのデーモンが、Macを起動する度に6個も起動されるのがいやで、調べました。psで見ると、このデーモンは単純にlaunchdが起動しているようです。そのplistをいじればよさそう。

/Library/LaunchDaemons/com.vmware.launchd.vmware.plistの"RunAtLoad" keyを “true” から “false” に変更する。

ただ、この方法では、VMWareを起動したい時には、このplistを再設定した上でOSを再起動しなければなりません。私自身はめったに使わないので、これで特に不自由はないのですが、ここを修正してあることを忘れてしまいそうで、「なぜVMWareが起動しないのだろう? 壊れたかな?」と悩みそうです。ここに書きとめておけば、多分忘れることはないでしょう。

Cyberduck-3.1.2 不可視ファイルの表示 04月22日, 2009


環境設定や表示メニューの設定で、不可視ファイル(ドットファイル,dotfile)を表示するようにしても見えない場合の対処です。

ターミナルから

$defaults write ch.sudo.cyberduck ftp.sendStatListCommand false

と入力する。

Cyberduckは、サーバーからファイルリストを得るのに[STAT | LIST -a | LIST]のコマンドをこの順で発行するのですが、サーバーによってはうまく機能しない場合があるようです。そこで、強制的にこのロジックを修正する方法の一つが上記のものです。 Source

追記 06月01日, 2009 :Cyberduck-3.2になって、上記sourceにある動作の優先順位が変更されたようですね。changelogに、"Support for directory listings using MLSD"とあるのを「使えるようになった」だけだと誤解していました。MLSDが最優先になったのですね。私の環境では、このままではNGなので、
"defaults write ch.sudo.cyberduck ftp.sendMlsdListCommand false" と止めてしまいました。

追記 :Cyberduck-4.0.2の動作については 別記 があります。

アドレスブックのデータをExcelに読み込む 11月03日, 2008


アドレスブックがエクスポートできる形式は vCardに限られています。そのため、Windowsな仲間に住所をExcelの表にして渡したいことがあると、従来は、vCard2.0に書き出して宛名職人(ver.14以前)に渡し、そこからcsvでエクスポートしたものを読み込んでいました。しかし、宛名職人がver.15となり、これまでの手順では、メモ欄や配偶者欄が捨てられてしまいます。

また、Numbersには、アドレスブックから簡単に表を作る機能があるのですが、配偶者データを読み込みません。(名前、郵便番号、住所、メモその他多くの欄は実に簡単に読み込んでくれるのですが。)

そこで、アドレスブックから書き出したvCard.vcf(ver.3.0)ファイルからメモ欄・配偶者欄も含めて必要な欄をExcelに読み込むために簡単なperlスクリプトを組んでみました。

スクリプトは、vCard.vcfの姓よみ・姓・名・姓名・自宅郵便番号・自宅住所・配偶者・メモを切り出し、stdoutに書くだけの単純なものです。(vCardの書式が変更されれば手直しが必要となりますし、当然必要と思われるさまざまな確認やエラー処理などは省略されていて、今自分の目の前で動けばよいとしているものです。)

手順:
・アドレスブックからグループのデータをvCard(vCard.vcf)に書き出す。
・スクリプトをvCardのフォルダーに置き、ターミナルから $./vcf2csv.pl | nkf -s >out.csv とする。
・Excelからこのファイルをインポートする。

nkfを使用しない場合は ShiftJisしか読まないExcelに合わせるため、 miTextBatchConv , MultiTextConverter などを使います。住所は自宅住所を見ています。勤務先住所を見るには、スクリプトの"HOME"を"WORK"に直します。両方を見るようにすることもできますね。 スクリプトは骨格のみのごく純朴なものです。もっとも、自分ではこれで実行していますが。

[追記 2013-11-20]: 連絡先.app-8.0(1365)を使い始めて、書き出しの書式が変更されたようで、スクリプトにちょっと変更を加えました。