2014年12月15日月曜日

Cookieと言う奴

クッキー(Cookie)と言う奴がいる。食べ物ではない。ウェブブラウザの機能の一部だ。
とある理由で、そのCookieを直接編集する必要に迫られた。これは、その時調べたことをまとめたものである。

  1. 記録する方法

    Google ChromeとFirefoxしか確認していないが、この2つのウェブブラウザはMac OS X版、Windows版ともにSQLiteデータベースを使っている。
    Safariはバイナリクッキーで、人間が編集できるようにはなっていない。(SafariではBloggerで自分のページビューを追跡しないようにはできない)
    WindowsのIE (Internet Explorer) も独自フォーマットらしい。

  2. Cookieの場所

    Cookieが保存されている場所はググればすぐ分かる。一例としてMac OS Xの場合を書いておく
    Google Chrome:~/Library/Application Support/Google/Chrome/Default/Cookies
    Firefox:~/Library/Application Support/Firefox/Profiles/xxxxx.default/cookies.sqlite

  3. プライマリーキー

    SQLiteデータベースには必ずプライマリーキーがある。データを区別するためのキーで、Firefoxはidという専用のキーを用意している。
    Google Chromeは(嫌らしく)Cookieの作成日付がそのままプライマリーキーになっている。

  4. 時間のフォーマット

    Firefoxは単純で、100ナノ秒を単位とするUNIX時間である。
    Google ChromeはWin32 File Timeフォーマット(1601/01/01を起点)で、100ナノ秒単位である。
    Win32 File Timeフォーマットは嫌らしい、もといややこしいので、シェルスクリプトを作成したので必要な方は使って欲しい。

  5. 編集

    Adobe AirアプリケーションのLitaが有名だが、Mac OS Xにはsqlite3というコマンドが標準で用意されている。ちなみになぜかは分からないが、Google ChromeのCookieはLitaでは編集できなかった。

    以下にSQLiteデータベースの操作例を示す。

    • 起動とデータベースの表示

      sqlite3 ~/Library/Application\ Support/Google/Chrome/Default/Cookies
      sqlite version 3.7.13 2012-07-17 17:46:21
      Enter ".help" for instructions
      Enter SQL statements terminated with a ";"
      sqlite> .dump
      
    • データの追加

      sqlite> INSERT INTO "cookies" VALUES(13061372681000000,'.xanadu62.blogspot.jp','_ns','','/',13124444681000000,0,0,13061372681000000,1,1,1,X'');
      
    • データの表示と更新 selectが表示コマンド。updateが更新コマンド。

      sqlite> .header on
      sqlite> select * from cookies where host_key='.xanadu62.blogspot.jp';
      creation_utc|host_key|name|value|path|expires_utc|secure|httponly|last_access_utc|has_expires|persistent|priority|encrypted_value
      13061366520000000|.xanadu62.blogspot.jp|_ns||/|13124438520000000|0|0|13061366520000000|1|1|1|v10B????F*A?X????
      sqlite> update cookies set creation_utc=13061367704000000 where host_key='.xanadu62.blogspot.jp';
      sqlite> update cookies set last_access_utc=13061367704000000 where host_key='.xanadu62.blogspot.jp';
      sqlite> update cookies set expires_utc=13124439704000000 where host_key='.xanadu62.blogspot.jp';
      sqlite> select * from cookies where host_key='.xanadu62.blogspot.jp';
      creation_utc|host_key|name|value|path|expires_utc|secure|httponly|last_access_utc|has_expires|persistent|priority|encrypted_value
      13061367704000000|.xanadu62.blogspot.jp|_ns||/|13124439704000000|0|0|13061367704000000|1|1|1|v10B????F*A?X????
    • データの削除

      sqlite> delete from cookies where host_key='.xanadu62.blogspot.jp'
      
    • コマンドの終了

      sqlite> .quit
      

    SQLiteデータベースの操作方法はSQLite入門を参考にした。感謝したい。

以上。

2014年11月23日日曜日

ffplayコンパイルのための追記事項

ffplayコンパイルのための追記事項は移転しました。

5秒後に自動転送します。
転送されない方は こちらをクリックして下さい。

2014年11月22日土曜日

GhostScriptあれこれ

本稿の内容は、OS X Yosemiteまでを対象とする内容になっている。OS X El Capitan以降には使えないので注意されたい。

最初に書いておくがMac OS X(最近はMacではなく単にOS Xと呼ぶらしい)には、標準でPDFを作成する機能があり、一歩手前のPostScriptファイルも作成できる。だからGhostScriptは通常は必要ない。それにもかかわらずGhostScriptに手を出したそもそものきっかけはImageMagickを使ってみたいと思ったことだった。

ImageMagickのビルドチェックFor a more comprehensive test, run the ImageMagick validation suite. GhostScript is a prerequisite, otherwise the EPS, PS, and PDF tests will fail.と書いてあるので、それでは試しにやってみるか、ということでGhostScriptをビルドしてみることにしたのだ。

結論から言えば、まだImageMagickを本格的に使ってもいないし、当然GhostScriptを使った機能も試してもいない。ここ数日でやったことは、ImageMagickを使うという目的からは大幅に横道にそれていて、本当に必要だったのか怪しい部分もあるが、色々調べたので記録として残しておくことにする。

GhostScriptのビルドについて

  • X11(XQuartz)について
    X11は必要。画面上での確認はX11を入れないとできない。HomebrewのバージョンはX11をサポートしていない。

  • 日本語の縦書き表示について
    Mac OS Xで日本語の縦書き表示ができる上限のバージョンは、GhostScript9.05だと思われる。無論現行バージョンの9.15などでは縦書き表示はできない。
    また、縦書きは画面で表示できるだけで、PDFに変換すると横書きになってしまう。(Cent OSではGhostScript9.07で日本語の縦書き表示ができたがあるようだ)

  • ソースコードの入手先について
    ソースコードの入手は本家は接続が不安定でダウンロードに失敗することが多いのでこちらを用いるのが良い。ただし新しいバージョンは本家にしかない。

  • Dependency(依存ライブラリ)について
    GhostScriptをビルドする前にビルド、インストールしておかなければならない依存ライブラリはない。正確には、GhostScriptのソースコードパッケージに依存ライブラリが同梱されている。(Homebrewのバージョンは違うようだ)

  • configureオプションについて
    configureオプションは./configure --disable-compile-inits --disable-cups --disable-gtk --with-system-libtiffが良いと思われる。(HomebrewのコンパイルオプションからX11非サポートを取り除いたもの)
    なお--with-system-libtiffを使う場合は、あらかじめlibtiffを先にビルド、インストールしておくこと。

  • makeのオプションについて
    makeは-jオプションを使わない。ビルドが早くなるだろうと思ったら大間違いで、エラーで止まってしまう。

日本語フォントの設定について

  • ヒラギノフォントの利用について
    GhostScriptでヒラギノフォントを使用するためには、ResourceにあるCIDFontというフォルダにヒラギノフォントをコピーしてフォント名をローマ字に変更するか、フォント名をローマ字にしたシンボリックリンクを作成する必要がある。シェルスクリプトを作ったので利用されたい。使い方は以下を参照。

    $ sudo sh CIDFontLink.sh
    
  • DTP関連フォントの代用設定について
    GhostScriptでDTP関連フォントをヒラギノフォントで代用するためには、Resource/Init/にあるcidfmapに追記する必要がある。

    実行するコマンド

    $ sudo nano /usr/local/share/ghostscript/9.05/Resource/Init/cidfmap
    

    追記する内容

    /Ryumin-Light           /HiraMinPro-W3 ;
    /Ryumin-Regular         /HiraMinPro-W6 ;
    /FutoMinA101-Bold       /HiraKakuStd-W8 ;
    /GothicBBB-Medium       /HiraKakuPro-W3 ;
    /FutoGoB101-Bold        /HiraKakuPro-W6 ;
    /Jun101-Light           /HiraMaruPro-W4 ;
    

    これは、左側のフォントを右側のフォントで置き換えるという意味の記述である。

  • PostScript表示用フォントファイルについて
    GhostScriptが参照するフォント(ファイル)名は、PostScriptフォント名(ローマ字のフォント名+文字コード種別+横書き<H>と縦書き<V>の区別という書式で構成)になっている必要がある。

    PostScriptフォント名の例
    文字コード種別 PostScriptフォント名 PostScript文字コード*
    JIS X 208 HiraKakuPro-W3-H H
    HiraKakuPro-W3-V V
    EUC-JP HiraKakuPro-W3-EUC-H EUC-H
    HiraKakuPro-W3-EUC-V EUC-V
    UTF-8 HiraKakuPro-W3-UniJIS-UTF8-H UniJIS-UTF8-H
    HiraKakuPro-W3-UniJIS-UTF8-V UniJIS-UTF8-V
    UTF-16 HiraKakuPro-W3-UniJIS-UTF16-H UniJIS-UTF16-H
    HiraKakuPro-W3-UniJIS-UTF16-V UniJIS-UTF16-V

    *PostScript文字コードと勝手な名前で呼んでいるが、これらはResource/CMapに定義されているPostScriptファイルである。

  • フォントファイルの種類について
    最低限用意した方が良いフォントファイルは、ヒラギノファミリーが12種類と、DTP(置き換え)フォントが6種類の合計18種類である。

    最低限用意すべきフォントの種類
    ヒラギノフォント DTP系フォント
    HiraKakuPro-W3 HiraKakuPro-W6 FutoGoB101-Bold
    HiraKakuProN-W3 HiraKakuProN-W6 FutoMinA101-Bold
    HiraKakuStd-W8 HiraKakuStdN-W8 GothicBBB-Medium
    HiraMaruPro-W4 HiraMaruProN-W4 Jun101-Light
    HiraMinPro-W3 HiraMinPro-W6 Ryumin-Light
    HiraMinProN-W3 HiraMinProN-W6 Ryumin-Regular
  • フォントファイルの入手先について
    フォントファイルは上記の情報があれば自作することもできるが、上に書いたフォントだけでも18種類×文字コード4種類×縦横書きの区別2種類=144個作成する必要があり、とても手間がかかる。
    こちらのページの日本語フォントのインストール(3/3)のところにあるので、これを利用させてもらうのが良いだろう。ページ内の説明ではResource内のFontと入れ替えるようになっているが、Resource内のFontフォルダにはGhostScriptで使用されるフォントが35種類入っているので、入れ替えずに必要なものをコピーすること。なお、HiraKakuStdN-W8-UniJISの4種が欠損していたので作成した。こちらからダウンロードされたい。

GhostScriptの使い方について
GhostScriptはPostScriptとPDFのインタープリターである。起動コマンドはgsで、直接起動するか、またはgs anPostScriptFile.psのようにコマンドに続けて開きたいPostScriptファイルを指定する。例えば、

$ gs /usr/local/share/ghostscript/9.05/examples/cjk/article9.ps

と入力すると、次のように一部では有名らしい日本国憲法第9条の条文が表示される。

article9.psの表示画面
article9.psの表示画面

次に表示するのはコマンドを直接起動した場合の使い方の例である。

01 $ gs
02 GPL Ghostscript 9.05 (2012-02-08)
03 Copyright (C) 2010 Artifex Software, Inc.
   All rights reserved.
04 This software comes with NO WARRAN
   TY: see the file PUBLIC fordetails.
05 GS>/HiraKakuStdN-W8-UniJIS-UTF16-H
   findfont
06 Loading HiraKakuStdN-W8-UniJIS-UTF
   -16-H font from /usr/local/share/
   ghostscript/9.05/Resource/Font/
   HiraKakuStdN-W8-UniJIS-UTF16
   -H... 11967552 7243357 38132
   88 25247281 done.
07 GS<1>30 scalefont setfont
08 GS>50 300 moveto
09 GS><30533093306B3061306F> show
10 GS>50 350 moveto
11 GS><533093306B3061306F30> show
12 GS>/HiraKakuStdN-W8-UniJIS-UTF16-V
   findfont
   Loading HiraKakuStdN-W8-UniJIS
   -UTF16-V font from /usr/local/share/
   ghostscript/9.05/Resource/Font/
   HiraKakuStdN-W8-UniJIS-UTF16-V... 
   12000416 7302733 3833472 2534
   870 1 done.
13 GS<1>30 scalefont setfont
14 GS>400 700 moveto
15 GS><30533093306B3061306F> show
16 GS>quit

以下行番号別に説明する。

1行目
起動コマンド。

2〜4行目
お約束のコピーライト、無保証の宣言。

5行目
PostScriptコマンド入力待ちの状態。この例ではフォントを指定している。

6行目
フォントのローディングメッセージ。

7行目
現在のスタックにたまっている数が<1>になっている。ここではフォントのサイズ指定待ちを示し、指定を受けて8行目に移行する。

8行目
どこに印字するかの指定。原点は起動時に開くウインドウの左下でX Y movetoの形で指定する。座標の単位はポイント(1/72インチ)、つまり約0.35mmである。

9行目
印字する文字の指定。半角の大小記号<>で囲まれた中にフォントで指定した文字コードの16進数(Hexdump)で記述する。この例ではUTF16(BE)で「こんにちは」と書いている。16進数文字コード変換は例えば こちらなどがある。
なお、半角カッコ()で囲まれた中には、文字コードではなくHuman Readableな文字そのものを直接書くこともできるが、当然のことながら環境依存性が出るし、作法として正しくないと考える。
特にMac OS XのPreview.appは、文字を直接書いてGhostScriptで作成したPDFを開くとクラッシュするので注意が必要。(Adobe Readerでは平気らしいが未確認。Windows 8.1のリーダーでも読めた)

10〜11行目
UTF16(LE)で入力した例。当然文字化けする。

12〜15行目
縦書きフォントで文字を書いた例。縦書きフォントを指定して縦書き表示ができるのはGhostScript9.05までらしい。9.05でもPDFにすると横書きになってしまう。

16行目
終了命令。GhostScriptとのセッションを終了するときに入力する。

おまけ
縦書き表示のPostScriptファイルを縦書きのままPDF化できないかと考えていたら、 こんなページに出くわした。この手順にそってarticle9.psを改造したものをこっそりと置いておく。GhostScriptの画面と見比べてみるのも、また一考かと思う。

所感
使えるようになるまでずいぶん苦労したが、結局GhostScriptは実用に堪えないというのが実感だ。何しろ縦書き表示がファイルにできない。ただ、ごくわずかではあるがPostScriptと画面表示について勉強できたのが収穫と言えば収穫かも知れない。

付表:GhostScript PDFとPreview.appの互換性
文字コード種別 日本語フォント 日本語と英数字の混在
JIS X 208 英数字が文字化け
EUC-JP
UTF-8 × ×
UTF-16 英数字が文字化け

2014年10月18日土曜日

拝啓、世界一のIT企業Apple殿へ

昨日リリースされたOS X Yosemiteをインストールしてみた。
目的は当ブログで指摘し、Betaテストでも散々指摘した問題が解決しているかどうかを確認するためである。わずか数時間だったので、Betaテストで指摘した項目すべてまでは確認できなかったが、次の項目が全く修正されないままリリースされたのを確認できた。

  1. SafariでAdobe Flash Playerを用いたコンテンツを開くと、毎回設定がリセットされる
  2. 時報をアナウンスするように設定したOS X搭載PCを画面共有して、三本指タップするとテキストが読み上げられる
  3. SoundFlowerを用いて音声出力を切り替えた後、ヘッドホン/スピーカーの出力を切り替えると音声が出なくなる
  4. 白色が多い壁紙を使うと、ゴミ箱が見分けにくくなる
  5. テキストエディットとメモの区別がつきにくい
  6. AC電源供給中のメニューバーのバッテリアイコンが、それと認識しにくい

以上を確認して嫌気がさしたのでOS X 10.9.4に戻したが、結局Apple殿が言いたいことは第一に無料で供給されているOSにいちいち文句を付けるなということなのだろう。各項目についてAppleの言い分(推定)を書いてみよう。

  1. Safariの問題は、Flash Playerは使うなだろう。Jobsも嫌った古いプラグインだからかも知れない。そうは言ってもFaceBookやmixiなどのSNSにあるゲームはほぼ全てがFlashなのだが、そんなことは世界一のAppleには問題外なのだ
  2. 三本指タップするとテキストが読み上げられる問題は、画面共有するOS X PCの時報アナウンスを止めろなのだろう。数多くのPCを共有する場合、一つ一つ止めて歩くのだろうか?
  3. SoundFlowerの問題はSoundFlowerを使わなければ良い。サードパーティーのアプリとOSの競合はサードパーティーが悪いに決まっている
  4. ゴミ箱が見分けにくくなる問題はYosemiteのデフォルト壁紙なら問題は生じない。白い壁紙は使うなということだ
  5. テキストエディットとメモの視認性は、慣れろということだ。アイコンの視認性はMacの出発点だった気がするが、今はiOSの時代だし、OS XはMacではない。筆者はiOSを持たないので分からないが、そっちに合わせてあるのだろう。
  6. AC電源供給中のメニューバーのバッテリアイコンが、それと認識しにくい。これも上記と同じ。慣れろだ。大体ポータブルPCはバッテリ駆動で動作させるもので、AC電源のときの状態など無視して良いんだろう

よく考えてみれば世界一のIT企業とは言え、iOSのシェアはAndroidに遠く引き離されているし、OS Xのシェアに至っては2%以下である。そのOSの使いやすさに問題があろうとなかろうと世の中に影響はないだろう。それに、こんな誰も読まないようなブログで世界一のIT企業の文句を言ったところで絶対に響きはしないのだ。

最後に締めの句を一つ。「おごれるものは久しからず」これは遠く800年以上昔から日本では有名なことわざである

2014年10月15日水曜日

mplayerのビルド手順

mplayerをビルドする手順を説明したい。

既にffmpegコンパイルガイドがあるので、これを利用することにする。

まず上記ffmpegコンパイルガイドで作成したディスクイメージをマウントする。そして、ターミナル.appで次のコマンドを実行する。

export VOLNAME=ffmpeg_compile
export TARGET="/Volumes/${VOLNAME}"
export PATH=${TARGET}/bin:$PATH

続いてmplayerのソースコード入手とコンフィギュアである。ターミナル.appで次のコマンドを実行する。

cd ${TARGET}/compile
svn checkout svn://svn.mplayerhq.hu/mplayer/trunk mplayer
cd mplayer
./configure --prefix=${TARGET} --extra-cflags="-I${TARGET}/include/" --extra-ldflags="-L${TARGET}/lib" --disable-fontconfig

この時点で No FFmpeg checkout, press enter to download one with git or CTRL+C to abort と表示されるのでリターンキーを押してffmpegを入手させる。

コンフィギュアが終わったらターミナル.appで次のコマンドを実行する。

make < make install

mplayerがインストールされたらターミナル.appで次のコマンドを実行する。

cd ${TARGET}/bin
sudo install -c mplayer /usr/local/bin

以上である。

2015.1.9改訂 configureオプションに--disable-fontconfigを追加。これがないと、mplayer起動時にフォントのキャッシングが行われるため。

2014年9月23日火曜日

Yosemite Beta Testを止めた

Yosemite Beta Testに参加してきたが、止めることにした。

理由は、指摘した問題が何一つ治らないためだ。

恐らくあと1〜2ヶ月内外でリリースされるであろうOS X Yosemiteだが、バグ満載でリリースされることは間違いない。特にMavericks以前から継続している問題を治す気は皆無なことを痛感した。

YosemiteではiOSとの親和性をさらに高めるそうだ。iOSと似たアイコンを使うのだろう。そうすることによって生じる視認性の低下などお構いなしだということも痛感した。

既存のMacユーザーで、iOSを使っていないユーザーなんて、ほとんどいないはずだから問題ないのだろう。

そのユーザー切り捨て姿勢は、何度もハードウェアを替え、何度もソフトウェアアーキテクチャを変え、数々のソフトウェア、そしてもちろんハードウェア資産を犠牲にしてきたAppleらしいものと言える。

文句ばっかり言っていても仕方ない。最後に筆者が参加したベータテストの記録として9/22時点でのバグリストを載せておく。

番号 概要 当該アプリケーション beta 3の状況 ランク 発生時期 頻度
#137732, #392663 「アプリケーションスクリプトフォルダを開く」で親フォルダ applescript 未解決 b yosemite 毎回
#122096, #392630 dockのゴミ箱視認性 dock 未解決 b yosemite 毎回
#120475, #288550, #392615 白紙アイコン finder 未解決 a yosemite ときどき
#219747 共有先の項目数が正しく表示されない(現在は項目数が表示されない) finder 未解決 a yosemite 毎回
#275328 フランケンシュタイン型のmp3がfinderでは正しい長さにならない finder 未解決 b mavericks 毎回
#333082 blu-rayビデオディスクがデスクトップに表示されない。外部ディスク表示で表示 finder 未解決 b yosemite 毎回
#362987 finderを操作してもいないのに外付けhddにアクセスされる finder 未解決 b yosemite 毎回
#298707 launchd, launchctlで/usr/local/binが有効でない launchd, launchctl 未解決 b mavericks 毎回
#402172 動画をフルスクリーンで見ていると突然フルスクリーン解除 quick look 未解決 a mavericks 毎回
#71241, #310163, #389683 safariでのみflash plug-inリセット safari 未解決 a mavericks 毎回
#357037, #394765 システム終了や再起動の時間が長過ぎ。再起動に2分21秒かかる(core i7 quadcore 2.7ghz) system performance 未解決 a yosemite 毎回
#256921, #345189, #362953, #363988 カーソルは動くが、他の機能はすべて停止 システムクラッシュ 未解決 a mavericks ときどき
#171110, #392539 kyokoボイスで「!」をピリオドと読み上げ システム環境設定 未解決 a mavericks 毎回
#254925, #291052 サウンド出力装置を切り替えるとsoundflowerに切り替わる システム環境設定 未解決 a yosemite 毎回
#85195, #392571 デフォルトブラウザにvlc システム環境設定 未解決 b yosemite 毎回
#101761, #392601 通知の読み上げで不自然な吃音、語句と通知の間隔短い システム環境設定 未解決 b yosemite 毎回
#161026, #392717 12時に0時と表示。時報アナウンスは12時という システム環境設定 未解決 b yosemite 毎回
#339698 sosumiの音が短く高い(beta2以降) システム環境設定 未解決 b yosemite 毎回
#97506, #392588 時報アナウンスで午前午後がつかない システム環境設定 未解決 c yosemite 毎回
#161045, #296965, #392724 しばらく起動しておくと「サーバーからエラー」になる。 フィードバックアシスタント 未解決 b yosemite 毎回
#143240, #392701 プレビュー.appの編集操作性改悪 プレビュー 未解決 b yosemite 毎回
#80067 10.8で発生していたアカウントに接続できないトラブルが復活した メール 未解決 a yosemite ときどき
#332403 宛先指定時に、覚えのないアドレスが候補に表示される メール 未解決 a yosemite 毎回
#105805 imapでyahoo!の迷惑メールも取得 メール 未解決 a mavericks 毎回
#106244 ヘルプが英語! メール 未解決 a yosemite 毎回
#377657, #271204 勝手にオフラインになり受信できない(メール.app再起動で受信) メール 未解決 a yosemite 毎回
#104104 メール受信を自動にしておくと、メールを受信しない メール 未解決 a yosemite 毎回
#106206 acアダプタ接続・未接続によって受信タイミングが変わる メール 未解決 a yosemite 毎回
#366198 パスワード設定済みpopアカウントなのにパスワードが不明になる メール 未解決 a yosemite 毎回
#137055 メール本文のurl表記がおかしい(http://がリンクにならない他) メール 未解決 b yosemite 毎回
#66908, #388652 アップデートの度にサーバーにあるメールを受信 メール 未解決 b yosemite 毎回
#143442 ツールバーのアーカイブボタンのデフォルト位置が悪い メール 未解決 c yosemite 毎回
#362858 キーボードからの音量調整時音が鳴らない ユーザーインターフェイス 未解決 a yosemite 毎回
#217643, #247540 「i」ボタンで表示されるウインドウが予期せず閉じる リマインダー 未解決 b yosemite ときどき
#175899, #392504 3本指タップで音声読み上げ 画面共有 未解決 a mavericks 毎回
#338173 アプリケーションから「開く」操作をすると外付けドライブが起動される 全アプリケーション 未解決 b 不明 毎回
#233922, #291309, #297493, #363776 突然、日本語が入力できなくなる。学習辞書リセット、アプリ再起動で治る。レイボーバルーンもあり 日本語入力プログラム 未解決 a yosemite ときどき
#325320 フルスクリーン時に操作できないコントローラーが表示 dvdプレーヤー 未検証 a yosemite 1回のみ
#341857, #362940 ウインドウスクロールでアイテムが消え、スクロールできない finder 未検証 a yosemite 毎回
#340016 動画をql中にqlを終了しようとするとfinderが固まる quick look, finder 未検証 a yosemite 毎回
#363499 入力中にレインボーバルーンになり、外付けhddが回転する text input 未検証 b yosemite ときどき
#334659 引っ越しができない。「対応していない操作のため、操作は完了できません」 time machine 未検証 a yosemite 毎回
#224108 アカウントがパスワードを認識しない システム環境設定 未検証 a yosemite 毎回
#316711 フルスクリーンアプリケーションの切り替えができない。再設定で治る システム環境設定 未検証 b yosemite 1回のみ
#234006 未保存なのに確認ダイアログなしで終了 テキストエディット 未検証 a yosemite 1回のみ
#238830 smtpサーバのポート設定が25に書き換わった メール 未検証 a yosemite 毎回
#351907 長い?メールで改行するとメールウインドウから離脱 メール 未検証 a yosemite 毎回
#143290, #371770 メール受信通知で開くスタンドアローンウインドウが異常 メール 未検証 a yosemite ときどき
#224154, #224089 popアカウントが作れない メール・システム環境設定 未検証 a yosemite 毎回
#233961 コマンド+qでアプリケーションを終了できず、メニューでのみ終了 複数 未検証 a yosemite ときどき

2014年9月4日木曜日

Amazon Musicのファイル名

Amazon.co.jpで音楽を買った。ダウンロードしてみたら、iTnuesで使われているファイル名に似ているが、曲番号の後ろに余計なハイフンがある。こだわらなければどうでもいい問題かも知れないが、こういうところが気になる。

サクッとシェルスクリプトで治すことにしたい。(こう書いておいて2時間ほど無意味なGoogle検索をしたのは秘密である)

ダウンロードしたファイル名は次のようになっている。

01-01- I Feel Pretty.mp3
01-02- Misty (Live At Tivoli Garden, Copenhagen1963).mp3
01-03- What Is This Thing Called Love.mp3

これを次のようにしたい。

01-01 I Feel Pretty.mp3
01-02 Misty (Live At Tivoli Garden, Copenhagen1963).mp3
01-03 What Is This Thing Called Love.mp3

カギは、曲番号と曲名の間にあるスペースである。これを使って、ファイル名を曲番号部分と曲名部分に分け、曲番号部分の最後の一文字を除去して再び曲名部分と合体させる。これで処理が簡単になる。

#!/bin/sh

find . -type f | while read i #(1)
do
fNumpart=`echo "$i" | cut -d ' ' -f 1` #(2)
fNamepart=`echo "$i" | cut -d ' ' -f 2-` #(3)
newNumpart=`sed s'/.$//' <<< "$fNumpart"` #(4)
mv "$i" "$newNumpart $fNamepart" #(5)
done
exit 0

その道に通じている方には恥ずかしくて見せられないスクリプトだが、何をやっているか説明すると、

  1. findtype fなので階層構造があってもそのディレクトリにあるファイルをすべて抽出、それを順番に i として読み出している。 find でなく ls でも良いかも知れない。
  2. 半角スペースを区切り文字(デリミタ)として、最初のフィールド(曲番号部分)を切り出している。
  3. 上と同じ方法で残り(曲名部分)を切り出している。
  4. 曲番号部分の最後の1文字を削除している。
  5. ファイル名を修正されたファイル名に変更している。

以上である。

使い方。上記内容をRemove Hyphen from Amazon Music.shという名前でファイルに保存した場合、次のようになる。

cd ~/Music/"Amazon Music"
sh "Remove Hyphen from Amazon Music.sh"

(注:スクリプトを音楽ファイルと同じフォルダに置かないように!)

ダウンロードしたい方は こちら からどうぞ!

2015.7.6改訂
シェルスクリプトおよび使い方の説明変更。

2014年8月9日土曜日

これはSoundflowerの問題ではないはず

前回の投稿Soundflowerの機能自体はYosemite Betaでも問題ないことを投稿したが、音声出力切り替え時に、ちょっとした問題が起こることを確認したので投稿する。

問題は、内蔵スピーカーとヘッドフォン(音声出力ポート)との切り替えで発生する。
内蔵スピーカーからヘッドフォン(音声出力ポート)に切り替えたり、逆に内蔵スピーカーに戻したりするときに、デフォルトの出力先以外の(ソフトウェア的な)ポート、つまりSoundflowerの2ch及び64chポートがあると、そのポートに強制的に切り替わってしまうのである。

音楽でも聴きながら作業しようと思ってヘッドフォンジャックにプラグを差し込んだが、一向にiTunesの音楽が聞こえない。おかしいなと思って調べたら、システム環境設定とAudio MIDI設定の間で、上記のような面白いことが起きていることを発見した。

これは、Mavericksでは見られなかった現象だし、SoundflowerがYosemite Betaになって凶暴になり、強制的に音声出力ポートをジャックするようになったわけでもないだろう。Yosemite Betaの単純なバグだと推定する。

対処方法は、ややトリッキーだが、強制的に切り替わったSoundflowerのポートではない方のポートに一旦切り替えてからスピーカー、あるいはヘッドフォンポートに切り替えることである。

文章で説明しても分かりにくいかも知れない。以下に昨日Appleにフィードバックした動画を掲載するので見て戴きたい。

2015.4.27追記:OS X 10.10.3では、単純に強制的に切り替わったSoundflowerのポートから、本来出力したいスピーカー、ヘッドフォンポート、あるいはデジタル出力に切り替えることで対処できる。

2014年8月6日水曜日

Yosemite β で Soundflower が動いた!

2014/08/09追記:Yosemite BetaでのSoundflowerの機能は問題ないが、音声出力の切り替え時にちょっとした問題が見つかった。こちらに記載したので参照されたい。

Soundflowerは、MacOSX Jaguar(10.2.x)の頃からある機能拡張(kext)だ。インストールすることで、Macのアプリケーションから出る音をQuickTimeの画面収録で取り込むことができる。

現在のバージョンは1.6.6bで、MacOSX Snow Leopard(10.6)からMountain Lion(10.8)利用できると書いてある。だが、Mavericks(10.9)はもちろん、Yosemite Beta(10.10)でも、何の問題もなく動作する。(MacBook Pro with Retina display 15.4inch Early 2013にて確認)

これで書きたいことは終わってしまったのだが、これだけでは忍びないので、もう一つ書く。
Soundflowerは、通常のスピーカーやヘッドフォンに出力される音声をQuickTimeに振り向ける(ルーティングする)。このため、音声を録音するように設定すると、スピーカーやヘッドフォンに音声が出力されなくなる。
音声をモニターするためには、Linein.appというアプリケーションを併用する必要があると、Soundflowerについて解説しているブログ、サイトのほとんどに書いてある。本当だろうか?

答えは「真っ赤な嘘」である。Soundflowerをインストールすると、アプリケーションフォルダにSoundflowerという名前のフォルダが作成される。このフォルダの中にSoundflowerbed.appというアプリケーションがある。メニューバーに常駐するアプリケーションで、これを使えばLinein.appなどなくても、音声をスピーカーやヘッドフォンでモニターできるのだ。

Soundflowerのメニュー
Soundflowerのメニュー

操作は簡単で、上の図にある、普段はNone (OFF) 側になっているチェックマークをBuilt-in Outputに切り替えるだけだ。

Skypeやねとらじ放送をするとき、相手の声や音が聞こえなくなるために、Linein.appというアプリケーションを併用する必要があると、Macの手書き説明書にも書いてあるが、恐らくは、Soundflowerbed.appの機能を知らないで書いたのではないかと推定する。

2014年7月26日土曜日

Yosemite Beta Test

OS X Yosemite Betaが2014.7.25.3:26 A.M.に公開された。(正しくは公開のメール通知が来た)

海外の「#YosemiteBeta」タグのついたツイッターを見る限り、皆、綺麗だ、美しい、と浮かれているようである。

だがちょっと待って欲しい。これはベータテストなのだ。ベータテストとは、合意の上でリリース前(ベータバージョン)のソフトウェアを使って貰い、問題点がないかどうかを検証、または問題点の洗い出しを行うことを言う。やれアイコンが綺麗になったの、見栄えが良くなったのを見るためのものではない。

ベータテスターは、Apple社に協力して、品質確認テストの最終段階を手伝ってあげるのだ。Appleの太鼓持ちをするのではないということを頭において欲しい。テストして見つかった問題点を報告するために、Yosemite Betaにはフィードバックアシスタントという機能が搭載されているのだ。

筆者はMavericksでも行われたというベータテストの機会を逃した。そのため、製品となったMavericksを触ってみて、ビックリ箱を開けたような驚くべき勝手な仕様変更を見た。今回はきっちりテストをさせて貰うつもりだ。

さて、テストは当然クリーンな環境で行うべきである。本来ならYosemite Betaをインストールした環境のみでテストするべきだろうが、そうもいかないだろうと思う。クリーンインストールしたYosemite BetaにMavericksで使っていた書類・データ、設定やアプリケーションは引き継いで使うのが妥当な線だろう。(これでも、MavericksにYosemite Betaを上書きインストールするよりは、よほどマシである)

クリーンインストールするための起動可能USBメモリの作成手順は、 英語だが、こちらが明快で親切である。
ただし、この手順のせいなのか、Yosemite Betaが未熟なのかは不明だが、この手順でインストールすると、リカバリーパーティション(復旧と日本語表示される)が作成されない。
何が困るかと言うと、Mavericksに環境を戻す時に、ちょっと困るのだ。筆者はトライ&エラーの結果、「Optionキーを押して起動」する際にTime Machineディスクを接続しておくと、起動ディスク一覧にTime Machineディスクも表示されるのでこれを選択し、工場出荷時のOS Xユーティリティが起動するという偶然によって、環境を戻せることを確認した。

Mac AppStoreからYosemite Betaをダウンロードした上で、ターミナル.appで次のコマンドを実行すれば良い。なお、インストラーを書き込むUSBメモリの名前はUntitledにしておくこと。

sudo /Applications/Install\ OS\ X\ Yosemite\ Beta.app/Contents/Resources/createinstallmedia --volume /Volumes/Untitled --applicationpath /Applications/Install\ OS\ X\ Yosemite\ Beta.app --nointeraction

Yosemite Betaインストール後は、設定アシスタントに従って作業を進めれば、Mavericksの環境を引き継ぐ移行アシスタントが動作するので、これでテスト環境は準備オーケーだ。

クドイようだが、みなさん、フィードバックをしましょう。最低限フィードバックしておかないと、不本意な仕様変更を我慢せざるを得ない羽目になります。(フィードバックを無視するような会社であれば、Appleも長いことはないでしょう)

2014.07.26 午後4:11 クリーンインストールするための起動可能USBメモリの作成方法を修正。

2014年7月13日日曜日

curlで見開き画像をゲットする

知っているヒトには「何、そんなことも知らなかったの?」と言われてしまうことだが、curlで、ちょっと工夫が必要だったケースについて書く。

ことの発端は、curlコマンドを用いてサーバーに置かれた日付を維持して画像をダウンロードすることだった。 curlはとても便利で、これだけで連番や飛び番のファイルを取得することができる。

curl -O "http://www.hoge.com/[01-10].jpg"

curl -O "http://www.hoge.com/[01-10:2].jpg"

curl -O "http://www.hoge.com/{1,3,5}.jpg"

上から連番、2つ置きの連番、そして飛び番の使用例である。(詳細はこちらを参照)

だが、画像ファイルは時折2ページが見開きになっているケースがある。つまり、ファイル名が例えば「11-12.jpg」のようになっているケースである。これはcurl内蔵機能だけでは無理で、forループに一工夫がいる。それは、forループでステップを2にして、変数iとj=i+1を使うことだ。

ステップを2にするのは、

for i in `seq 0 2 10`; do echo $i; done

のようにする。この例では0から10までをステップ2刻みで実行する。これは、こちら(英語)で見つけた。

続いて変数iとj=i+1を使うのは、

let j=$i+1

のようにする。これは「shell script i=1 j=i+1」という恥ずかしい検索語でググって見つけた。(PDF)

shell script 変数 加算でググると、当たり前だがexprがトップヒットする。letは出てこない。こちらに記述されているように、大きなスクリプトであったり、実行時間やCPUリソースを気にする場合でなければどちらでも良いのかも知れないが、

let COUNT=COUNT+1

COUNT=`expr ${COUNT} + 1`

のように、記述はletの方が圧倒的に簡単である。簡単なことは良いことだと信じているので、迷わずletを採用した。

まとめると、

for i in `seq 11 2 15`
> do
> let j=$i+1
> curl -OR http://www.hoge.com/$i-$j.jpg
> done

すなわち、
for i in `seq 11 2 15`; do let j=$i+1; curl -OR http://www.hoge.com/$i-$j.jpg; done

となる。(この例では11から15までを2つおきに3回繰り返している)

curlを使う所以は一括処理にあるわけだから、そもそもどこに見開きページがあるか分からない画像をcurlで処理する理由はないだろう…と思われるかも知れないが、存外、たった2回のループでさえも、便利だったりする。お試しあれ!

2014年6月25日水曜日

「”」と「-」の勝手な変換

OS X Marvericks(10.9.x)が出て既に8ヶ月になる。このOS、実はとんでもない仕様変更を行っている。スマートダッシュ、またはスマート引用府で検索すると、既に多くのブログ等で警鐘されているモノだが、敢えて本ブログでも取り上げることにする。

筆者がOS X Marvericksを導入したのは、リリースから間もない頃だったが、つい最近まで、この馬鹿げた仕様変更には気付かなかった。きっかけは英文でのメールやり取りであった。

一部だけ誤変換された「-」
一部だけ誤変換された「-」

見にくいのを承知で画像を用いた。何も加工していないのを証明するためである。上記画像には$ ./configure --prefix=${TARGET} --as=yasm --enable-gpl --enable-libx265 --pkg-config-flags=—staticと、書かれている。

見ての通り、staticの前のハイフンだけが、(em-dash、ASCII番号129)になっている。これは本来2個の-(en-dash ASCII番号45)であるべきものだ。

英文、すなわち半角英数で書いているのだから、日本語のように変換されること自体が異常なのだが、よりにもよって一部だけ(見ての通り、-(en-dash ASCII番号45)を用いている部分は他にもある)変換してしまうのだ。ちなみに全部が誤変換されれば、上記文章はコマンドとして体をなさず、動作しない。

これについてAppleのサポートは、システム環境設定 -> キーボード -> ユーザー辞書にあるスマート引用府とスマートダッシュを使用のチェックボックスを外せば問題は解決されると言った。

スマート引用府とスマートダッシュ
スマート引用府とスマートダッシュ

各種ブログでも、ここまでである。解決方法は確かにその通りなのだが、プログラミング言語のコーディングに用いた場合に致命的なエラーを引き起こす仕様変更が何故行われたかを追求するブログはないのだ。

筆者は解決方法の提示に頭を足れて有り難がるほど素直ではない。当然仕様変更の理由を尋ねた。すると、最初の担当者はMSオフィス等で、この機能が必要で導入されたと答えた。納得がいかないのでシニアアドバイザと話をした。このアドバイザは真摯に対応し、Apple開発陣に問い合わせてくれたが、結局Appleの開発陣は、仕様変更の理由を開示しないと回答した。仕様変更の理由を開示したくないのか、開示できないのかは良く分からない。

ここで、本ブログエントリをここまで読んでもらえた方に提案がある。ひとつはお決まりのフィードバック、それに現在開発中のOSX Yosemiteのベータテストへの参加である。どちらもAppleに勝手なまねをさせないために、とても重要だと思う。

2014年1月7日火曜日

Safariの問題をAdobeに???

SafariはOS Xに付属してくるウェブブラウザである。Mavericksでは、OSとしての省電力化のために、プラグインの動作を停止する機能を実装した。だが何かをいじるとバグが発生するのはAppleのプログラマだからあり得ないという事はない。

本エントリでは、恐らくは、このプラグインの動作を停止する機能の実装に伴って発生するようになったバグについて書く。

Adobe Flash Playerは、AppleもMicrosoftも嫌っているプラグインだ。上記の通りOS X MavericksのSafariはFlashを含めたプラグインを”停止”させる機能を実装したし、Windows 8.1でもMetro StyleのIEではFlashは動作しない。その理由は色々あるがここでは本題とずれるので割愛する。

本題に入ろう。Mavericks以降のSafariには、Safariでだけ、つまりGoogle ChromeやFirefoxでは発生しない大きな問題があるのだ。

それはFlashのローカル記憶がFlash読み込みの度にリセットされるというバグだ。やや小難しく書いてしまったが、端的にはFlashアプリで設定した音量のオンオフや音量調節がFlashを読み込む度に元に戻ってしまう現象として現れる。ローカル記憶だから音量に限らず、ゲームの進行状況をMac側に保存するタイプのゲームでは、毎回最初からやり直しになるのだ。

当然この現象をAppleのサポートに問い合わせた。サポートは筆者のMacを画面共有して現象を確認した上で、Appleのエンジニアに問い合わせるので回答を待って欲しいと宣った。

数日後Appleのエンジニアからの回答が来たが、これには怒りを通り越して呆れを感じざるを得なかった。回答はこうだった。Flashの問題をAppleに問い合わせられても困る、Adobeに問い合わせて欲しい。

サポートは現象を筆者のMacを画面共有してSafariでだけ、現象が発生するのを確認したはずだ。それがどこをどう間違えばFlashの問題にすり替えられるのだろうか?

サポートにはGoogle ChromeやFirefoxでは発生せず、Safariでだけ発生すると伝えたにも関わらず、OSの再インストール(クリーンインストール)を要求し、しぶしぶながら再インストールもした。その結果がAdobeだ。笑わせるではないか?

筆者は当然の事ながらAdobeには問い合わせてなどいない。どこにSafariの問題をAdobeに問い合わせるバカがいるだろうか?

この現象は筆者特有の問題ではないと信じている。Appleが自らバグの改善への道を閉ざした以上、Safariを使用しないのが唯一の対策だ。だがもしもAppleに意思表示する気持ちがあるならば、以下がその窓口である。多くの方の意見があれば、Appleも動くかも知れない。

2014.7.25 問題は案の定Yosemite Betaに下手に引き継がれていることを確認した。

2015.01.01 当然のことながらYosemite製品版でも問題は治っていない。