2010年12月31日金曜日

Xの設計思想

何気なく目に止まったXの設計思想がなかなか面白かったので引用。
1984年、Bob Scheifler と Jim Gettys は X の基本原則を以下のように定めた。
  • 実際のアプリケーションでどうしても必要という場合以外は、新機能を追加するな。
  • システムが何でないのかを定義することは、何であるのかを定義するのと同じように重要である。あらゆるニーズに答える必要はない。むしろ、互換性を維持した状態で拡張可能にしておけ。
  • 1つでも例を挙げて一般化したほうが、全く例を挙げずに一般化するよりもマシである。
  • 問題が完全に把握できないときは、解決策も提供しないのが最善の方法である。
  • 10%の作業で望みの90%の効果が得られるときには、その解法を使え。
  • 複雑さは可能な限り分離せよ。
  • ポリシーよりも機構を提供せよ。特にユーザインタフェースのポリシーはクライアント側に任せておけ。

何にでも適用できるものではないが、Xという基盤を支えるソフトウェアの設計原則としては実に理にかなったものである。事実その後20年以上継続して開発、メンテナンスされるソフトウェアとなったわけだし。
プロジェクトの方針とは、本来はこういうものを言うのだろう。参考になる。

2010年12月28日火曜日

MP4BoxをMacでコンパイルする

mp4形式のファイルをメンテナンス出来るMP4BoxというCLIツールがあるが、Mac用のバイナリは公開されていないようだ。ということで、該当コマンドが含まれるgpacをMacでコンパイルしてみた。

ソースコードの入手


Subversionでしか配布していないようなのでsvnで入手する。
svn co https://gpac.svn.sourceforge.net/svnroot/gpac gpac

コンパイル


コンパイルに色々と問題がでるので--disable-wxオプションでwxWidgetをdisableにしているが、MP4Boxをコンパイルする上では特に関係ない。さらにMP4Boxバイナリにlibgpacを静的に組み込みたいので--static-mp4boxオプションを付加している。
cd gpac/trunk/gpac
./configure --disable-wx --static-mp4box
make
コンパイルされたバイナリはbin/gccに生成される。このうちMP4Boxを適当なパスにコピーして完了。
sudo install -s bin/gcc/MP4Box /usr/local/bin

x264-r1834をリンクしたHandBrake r3715

AppleTVの入手後、手持ちの動画の変換に重宝しているHandBrakeだが、こそこそとsvn版の追っかけをやっている。r3715から最新のx264-r1834を使うように変更されたようだ。
Index: macosx/Controller.m
===================================================================
--- macosx/Controller.m (revision 3713)
+++ macosx/Controller.m (working copy)
@@ -2687,8 +2687,10 @@
     fqueueEditRescanItemNum = selectedQueueItem;
     [self writeToActivityLog: "rescanQueueItemToMainWindow: Re-scanning queue item at index:%d",fqueueEditRescanItemNum];
     applyQueueToScan = YES;
+    /* Make sure we release the display name before reassigning it */
+    [browsedSourceDisplayName release];
     /* Set the browsedSourceDisplayName for showNewScan */
-    browsedSourceDisplayName = [[QueueFileArray objectAtIndex:fqueueEditRescanItemNum] objectForKey:@"SourceName"];
+    browsedSourceDisplayName = [[[QueueFileArray objectAtIndex:fqueueEditRescanItemNum] objectForKey:@"SourceName"] retain];
     [self performScan:scanPath scanTitleNum:scanTitleNum];
 }
 
Index: contrib/x264/module.defs
===================================================================
--- contrib/x264/module.defs (revision 3713)
+++ contrib/x264/module.defs (working copy)
@@ -1,7 +1,7 @@
 $(eval $(call import.MODULE.defs,X264,x264,PTHREADW32))
 $(eval $(call import.CONTRIB.defs,X264))
 
-X264.FETCH.url = http://download.handbrake.fr/handbrake/contrib/x264-r1804-e89c4cf.tar.gz
+X264.FETCH.url = http://download.handbrake.fr/handbrake/contrib/x264-r1834-a51816a.tar.gz
 X264.EXTRACT.tarbase = x264
 
 X264.CONFIGURE.deps   =

2010年12月19日日曜日

HandBrakeCLIを自前でビルドする

CLI版でもAppleTV2のプリセットが使いたかったので、dev版を自前でビルド。 手順は以下のとおり。--disable-xcodeを付けることでCLI版をビルド出来るらしい。yasmが入っていれば問題ないと思う。
マトモなやり方はCompileGuideを参照。

svn co  svn://svn.handbrake.fr/HandBrake/trunk HandBrake
cd HandBrake
./configure --disable-xcode
make

こういうバッチ系処理はGUIでやりたくはないね。

2010年12月18日土曜日

bloggerがスマートフォンに対応した

Blogger in Draft経由でログインすると設定できるようになっている。
手持ちのiPhoneで確認してみたが、以下のような感じ。
なかなかクールなデザインで気に入った。



HandBrakeのnightly版にAppleTV2のプリセットがある

HandBrakenightly版にはAppleTV2のプリセットが用意されている。
設定としては以下のような感じ。

  • FPSを29.97 (NTSC Video)   VFR On
  • Constant quality RF:20
  • Anamorphic Loose Modules:16(解像度は720pを超えない範囲で調整)
  • 音声はAACとAC3を乗せる。

FPSを29.97にしているところに肝がありそうだが詳細は不明。
0.9.5から使えるようになるのかな。

2010年12月15日水曜日

MacOS Xではlocateを使うよりmdfindを使いたい

locateというと、Linuxなんかでファイルシステム上のファイルを記録したデータベースを使って瞬時にファイルを見つけ出す機能だが、MacOS Xにも似たような機能がある。Spotlightだ。mdfindはSpotlightを使ってCUIで検索を行うツール。
NAME
     mdfind -- finds files matching a given query

SYNOPSIS
     mdfind [-live] [-count] [-onlyin directory] [-name fileName] query

DESCRIPTION
     The mdfind command consults the central metadata store and returns a list of files
     that match the given metadata query. The query can be a string or a query expression.

こんな風に使う。
[NO]imac[~]$ mdfind -name stdlib.h
/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/Kernel.framework/Versions/A/Headers/libsa/stdlib.h
/Developer/SDKs/MacOSX10.5.sdk/usr/include/stdlib.h
/Developer/SDKs/MacOSX10.5.sdk/usr/include/xlocale/_stdlib.h
/Developer/SDKs/MacOSX10.6.sdk/usr/include/c++/4.2.1/tr1/stdlib.h
/Developer/SDKs/MacOSX10.6.sdk/usr/include/stdlib.h
/Developer/SDKs/MacOSX10.6.sdk/usr/include/xlocale/_stdlib.h
/usr/include/c++/4.2.1/tr1/stdlib.h
/usr/include/stdlib.h
/usr/include/xlocale/_stdlib.h

Google Appsで使えるサービスが増えている件

Google ReaderやBloggerなんかもGoogle Appsで使えるようになっている。
ってことでReaderとBloggerを移行。
見ている人にとっては何も変わっていないが。