むしろ一昨日参ります。
Release Notes (Slim3)
Slim3 1.0.0 Released - ひがやすを blog
私、今日になって初めてGoogle App EngineをJavaでやりまして、人生初のServlet的なモノでしたから「なんだこれ、面倒くせい」とか思ってしまった段階で、それはGoogle App Engineの特性関係ないじゃん的な分際ですから、特にこう言える事もないのですけど、全世界のひがerな皆様が待ちに待ったリリースな感じだと思いますし、GAE/J向けのフレームワークのある意味試金石的なモノになるんじゃないかなとか思って違う方面から期待していたりします。
そのうちやってみたいですよ。
(0)
HTML+JavaScriptでiPhone/iPad/Androidネイティブアプリを開発できる「Titanium 1.0」 | パソコン | マイコミジャーナル
HTML+JavaScriptでiPhone/Androidアプリを作れるTitanium Mobileとは(1/3) - @IT
各所で話題沸騰中でありましたけども、1.0がリリースされたそうでございます。全然追っかけていたわけじゃなかったのですけど、意外と登場が早いなと思いましたよ。
どうなんですかね。まぁ、そんな事言っていないで使ってみろって話ですけど。
ゲームとか何でもそのハードの特性を活かした……とか言うタイプの人間ですので、こういうのはあまり好きじゃないのですけど、需要とか必要性とかはわかります。で、技術的にも興味があります。
間に入るものが増えれば増えるほど不具合に悩まされる事も増えるので、実際に使うとか何とかなると慎重になるべきかもしれないですね。
たぐ - software
(0)
「VMware Fusion 3.0」におけるイースターエッグ(PONG) : Mac OS X News & Topics
自宅のMacにインストールされている滅多に立ち上がらないVMware Fusionさんは3.0なので遊べましたよ、だからなんだって話ですが。
にしても、これって何点取ったら終わるんだ。終わらないのもしかして。
(0)
ーー参考(というか、ほぼそのままって言うね)ーー
モダンPerl入門 (CodeZine BOOKS)
ちょっとした書き捨てスクリプトならあれですけど、それなりにそれっぽいものをちゃんとテストしながら開発しようとする時にはCPAN形式にしてしまった方が何かと便利です。別に公開する必要はなくても、make test で自動的にテストが実行されるだけで取り入れる価値ありです。
CPAN形式で開発を行うには、ディレクトリ構成を合わせる事とMakefile.PLというMakefileを作成する為のスクリプトを書かねばなりません。が、普通に始める分には簡単にできるようになっていますよ。
Spamというモジュールを開発するとしてディレクトリ構成の例を示しますと以下のような感じであります。
Spam
└ Makefile.PL
└ lib
└ Spam.pm
└ t
└ 00.t
それではSpam.pmを作ります。今回はとりあえずなので適当に、
package Spam;
use strict;
use warnings;
use utf8;
our $VERSION = '0.00001';
sub return_eggs {
'Eggs';
}
1;
くらいで。
Makefile.PLはMakefileを作成するものですので、環境の情報やら依存関係の情報やらが必要になりますし、もろもろの作業を自動実行する上でも大変重要なので一から自分で書くとなると非常にしんどいのですけど、そこはそれ、ちゃんとそれ用のツールが出回っています。
最近の流行はModule::Installというモジュールらしいので、それを使うとして、Makefile.PLを以下のように記述しました。
use strict;
use warnings;
use utf8;
use inc::Module::Install;
test_requires('Test::More');
name('Spam');
all_from('lib/Spam.pm');
WriteAll;
テストの際にはTest::Moreモジュールが必要だよと一応記述。
Module::Installモジュールは標準モジュールじゃないので、インストールされていないかも知れません。その場合はCPANコマンドなどを用いてインストールします。
risa:Spam tac$ sudo perl -eshell -MCPAN
Password:
cpan shell -- CPAN exploration and modules installation (v1.9402)
Enter 'h' for help.
cpan[1]> install Module::Install
それでは実行してみます!
risa:Spam tac$ perl Makefile.PL
...
Cannot determine perl version info from lib/Spam.pm
Cannot determine author info from lib/Spam.pm
Cannot determine license info from lib/Spam.pm
...
Writing Makefile for Spam
Writing META.yml
No license specified, setting license = 'unknown'
何やら言われてますけど上手く行ったみたいなので、調子にのってテストを書きます。
今回Makefile.PLと同じ階層に“t”というディレクトリを作って、その中に数字付きで拡張子がこれまた“t”のファイルを作っていますが、Makefile.PLと同じ階層にtest.plというファイルを作ってもテストファイルとして認識してくれます。
もちろんMakefile.PL内に記述する事によりテストファイルや検索ルールを指定する事もできるらしいです、やった事無いけど。
use strict;
use warnings;
use utf8;
use Test::More;
plan (tests => 2);
use_ok('Spam');
use Spam;
is(Spam::return_eggs(), 'Eggs');
テストファイルを追加したのでMakefileを作り直す必要が出てきてしまいました。再度Makefile.PLを実行、一応、make cleanを実行してから。
risa:Spam tac$ make clean
rm -f \
...
rm -rf \
...
mv Makefile Makefile.old > /dev/null 2>&1
risa:Spam tac$ perl Makefile.PL
...
さて、準備が整いましたので、満を持してテストを実行。
risa:Spam tac$ make test
cp lib/Spam.pm blib/lib/Spam.pm
PERL_DL_NONLAZY=1 /opt/local/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'inc', 'blib/lib', 'blib/arch')" t/*.t
t/00.t .. ok
All tests successful.
Files=1, Tests=2, 0 wallclock secs ( 0.02 usr 0.00 sys + 0.02 cusr 0.00 csys = 0.04 CPU)
Result: PASS
テストファイルが一つで、テストが二つ。結果も通ったよ。という有り難いお知らせ! まぁ、この程度ならあれですが。
実装が進む度にテストを追加していったり、機能ごとにテストファイルも分けていったりすると良いかもですね。複数のテストファイルを作っても、make testとやるだけでつらつらと実行してくれますから大変助かります。
適当にも書けるけど、こんなかっちりとした仕組みも用意してくれているPerl界隈、素敵です。みんなテストやりましょう。
(0)
「パーフェクトJava」の「国際化」の章の原稿を公開 — ありえるえりあ
映画で言えばディレクターズカット版です。Webで無料で読めるなら誰も損はしないので、ディレクターズカット版で金をもう一度取る映画より良心的です。
と言うことで、ページ数の都合によりカットした部分の原稿が公開されております。
いいですね、こういうの。「パーフェクトJava」は買っただけで1ページも読んでないですけど。
たぐ - software
(0)
More with symfony 1.3 & 1.4 | symfony | Web PHP Framework(symfonyのフォームフィルターの活用 +α : アシアルブログ経由)
今月頭に1.3/1.4がリリースされたsymfonyさんでありますけど、アドベントカレンダーとしてドキュメントが鋭意公開中であります。これ毎年やってるのかな。
で、今回は日本語版も同時公開って事で、今後益々のご繁栄をーとか思ったり思わなかったり。
symfony 1.3/1.4 の新しい機能 | symfony | Web PHP Framework
1.3/1.4でもかなり進化したみたいですね。1.3と1.4の違いは非推奨の機能を含むか含まないかだそうです、こういう公開の仕方もあるんですねぇ。
一応symfony押しです、私。ちょっとやって全然触っていないけど、気が向いたら機会が合ったらまたやってみたい。
(0)
Universal Chardet Support For NetBeans — Project Kenai
へびのぬけがら: Universal Chardet Support For NetBeans 0.1 リリース
NetBeansはエンコードを指定して開いたりとか変更したりとかのファイル操作ができませんよね、何だか知りませんけど。
NetBeans
上記サイトによりますと条件付きながら方法はあるようで、それぞれファイルの内容に合わせて埋め込めという事のようです。そして、埋め込まれていない場合、埋め込めない場合はシステムのエンコーディング設定に寄るのだそうです。Mac OS X 10.6の場合はSJISでしたっけ、確か。
でも、埋め込めない場合の方が多いですよね。件のページにも肝心のJavaのソースには埋め込められないって書いてあるじゃないですか。このテンプレートエンジンが全盛のおり、ページ全体のHTMLファイルってのも少ない、むしろ部分的なHTMLのみを記述したファイルの方がメインですからmetaタグもそうそう埋めないです。
一応エンコードを自動判定して開くみたいな事はやってくれているみたいなので、日本語を使う際などには一旦別のエンコードを指定できるエディタで開いて編集し、それをNetBeansで開き直す事で帳尻を合わせられたりしますが、面倒です、やってられません、だったら最初からNetBeansとかあれなもの使いません、使いたくありません。
そんな私を助けてくれたプラグインがこれ、Universal Chardet Support For NetBeans。バージョン0.1ですし、リリースされたばかりのようです、なんといいタイミング。流石空気が読めるな、読め過ぎるな、俺。お前か。
オープンダイアログだけじゃなくて、プロジェクトウィンドウから選択→右クリックで開けたりするようになればもう最高なんだけど、十分実用的。本当に感謝。
たぐ - software
(0)
Welcome to NetBeans
The Scala Programming Language
Lift – The Simply Functional Web Framework – Home
何となくNetBeansでLiftのプロジェクトを作ってみましたよ。
ScalaJa - NetBeans Wiki
上記ページを参考にNetBeansをインストールして、Scalaプラグインを有効にします。ちょうどNetBeans 6.8がリリースされたのでそちらを再インストールして、ナイトリービルド版を適用しました。
NetBeansの方はこれだけでOK。
プロジェクト作ります。“ファイル”→“新規プロジェクト”でダイアログを表示してMavenプロジェクトを選択します。Maven原型リストの“リモート Maven リポジトリからの原型”の中にLift関連の原型がいくつかあると思うので、“lift-archetype-basic”を選択します。
プロジェクト名、グループID(パッケージ名に使われる)、保存先などを指定して“完了”。
一通り土台的なファイル群が指定の場所に生成されるので、とりあえず動かしてみましょう。プロジェクトウィンドウでプロジェクトを選択して右クリック→“カスタム…”→“ゴール…”を選択。表示される“Maven の実行”ダイアログ内の“ゴール”へ“jetty:run”と入力して“了解”をクリック。
出力パネルにログがずらずらと表示されjettyサーバが起動されたら、http://localhost:8080/へアクセス。おーおーおー。
引き続き、公式のStarting with Liftをさらっとやってみるのもいいかもしれませんね。
たぐ - software
(0)
開発環境「Xcode Tools」付属の差分表示ツール「FileMerge」をUTF-8対応に - builder by ZDNet Japan
な、なんだってー、こんな簡単な事で! って事で以前こんな記事(例のあれ(仮題)・EOModeler と FileMerge と Unicode。←画像なくなっているけど気にしない)を書いた私が確認してみました。
(0)
Overview - django-logging - A very brief overview of django-logging. - Project Hosting on Google Code
Screencast 2: Logging in Django, for fun and profit | Surfing in Kansas
ログをとる - スコトプリゴニエフスク通信
全く気にかけていなかったわけではないですけど、積極的に追っかけていたわけではないDjangoさんですから、例によって世の流れ的に周回遅れなのですけど、開発時、デバッグ時に超大活躍しそうなロギングツール“djangologging”が凄すぎて格好良すぎて素敵すぎた。
実行したSQLまで表示する事ができたりして、あれって思った事は全て追っかけられそう。Djangoのmiddlewareなので導入も楽々、設定もsettings.pyに追記するだけ。
詳しくは二つ目のリンク先のスクリーンキャストをご覧になって頂きたいですけど、もう全てのプロジェクトでこれを使いたいと思ったよ。全てのプロジェクトっつったって、れいあれさんしかないのだけどな。
(0)
WebObjects with Scala - WebObjects - Confluence
Scala IDE for Eclipse | The Scala Programming Language
「ScalaだったらWebObjectsでも使えるよね」とか某人と言っていたら、EclipseのScalaプラグインを導入するとお手軽だという公式の記事があったのでちょっとだけやってみました。サンプルコードもあったしねー。
WebObjectsとEclipse、WOLipsはインストール済みだと思うので、とあえて書いてみて、Scala IDE for Eclipseをインストールしてゴーです。その他のEclipseプラグインと同様の方法でインストールできます。
適当な名前でWebObjects Applicationを新規作成します。作成したらそのプロジェクトを選択して右クリック -> Scala -> Add Scala Natureを実行しておきます。これでScalaプログラムを書いても平気。
ではさっそくScalaなファイルを放り込むべく、Main.javaをMain.scalaへ置き換えます。Sourceseフォルダのyour.app.componentsパッケージ内にMain.javaがあるのでそれを削除し、同じところへMain.scalaという名前でファイルを新規作成、そして元のMain.javaにあったソースをScalaで書き直します。
package your.app.components
import com.webobjects.appserver.{WOComponent, WOContext}
class Main(context:WOContext) extends WOComponent(context:WOContext) {
}
元が単純なのでこれだけ。
次に、your.appパッケージ内にあるDirectAction.javaを同じようにScalaで書き直します。
package your.app
import com.webobjects.appserver.{WOActionResults, WORequest, WODirectAction}
class DirectAction(request:WORequest) extends WODirectAction(request:WORequest) {
override def defaultAction: WOActionResults = {
pageWithName("Main")
}
}
こちらも元が単純なのでこれだけ。単にsuper()を呼ぶだけのコンストラクタはextendsに引数を渡してしまえるのがScala流。
一度クリーニングを実行して、your.app.Application.javaを右クリック -> Run As -> WOApplicationで実行すると、ブラウザが立ち上がってHello Worldと表示されます! 素晴らしい、お手軽だ、嘘みたい!
これだけではなんなので、文字列の変数を拵えてそれを表示してみる。Main.scalaを編集して、
...
class Main(context:WOContext) extends WOComponent(context:WOContext) {
var aString: String = "こんにちは、世界"
}
と指定しておいて、Components -> Main WOを以下のように編集。この辺の手順は、2009-11-09 - トーフサロンを参照してください。
で、またクリーニングして同じようにRun Asするとー。
とか表示されるといいですね、表示されますけど。
Scalaは最終的に普通にJavaのバイトコードになりますから、この辺の連携はお手の物ですね。Eclipse + プラグインの環境ならほぼ手間入らずで勝手にやってくれますし。ただ、頻繁にクリーニングをしなければならなかったり、上手くコンパイルしてくれないのかクラスとして認識してくれなかったりして、何が悪いのかよくわからない。そのうち使っていけばわかるようになるかな、ぶっちゃけScala本も持っているけど読んでいないのでScala自体もよくわかってないけど。
WebObjectsをScalaで書く事の意味は、そのままJavaをScalaで書く事の意味くらいだと思うけれど、Scalaのお勉強もかねて取り組んでみるのもいいかも知れないね。
たぐ - mac software webobjects
(0)
cap'n webb » QuickSnippets(Google Quick Search Box用プラグイン)を公開しました
内容は件名で全てでありますが、そういうGoogle Quick Search Box向けのプラグインが公開されております。ソースコードもGithubにて公開中。
QSBから登録も可能ですので、定型文などをよく使う方には便利なのではないでしょうか。
Google Quick Search Boxをご愛用の方々にはぜひお試しいただいて、フィードバックなぞをして頂けると凄く凄く喜ばれるんじゃないかな。えと、ボクは使っていないので、Google Quick Search Box。一応これは試してるよ!
(0)
[#WOL-322] Default enconding in WOComponent template file (*.woo) - ObjectStyle.org Issue Tracker
いやまぁ、実際に変更されたのは随分と前なのですけど、私自身が確認したのはつい先日なのでこのタイミングであります。
新規に作成した任意のWOComponentの.wooファイルの中をのぞいてみますれば、以下のように記述されています。
{
"WebObjects Release" = "WebObjects 5.0";
encoding = "UTF-8";
}
やー、なんかやった感が出たなぁ、実際に変更してもらえると。
そらそうと、新システムになってUTF-8とか普通に書くようになったのね。全然問題ない、というか素晴らしい。これからも張り切って邁進するんだぞ、WOLipsの人たち!
たぐ - software webobjects
(0)
2009-10-22 - トーフサロン
本人は「非常識な」と銘打っているけど、非常に常識的でまっとうな感覚の持ち主なので大丈夫だと思いますよ。問題はどこまで続くかかな、うんざりするほど人の事言えないけどなー。
結構昔から言われている、というか、こっちサイドの人間が勝手に言っているのだけど、「WebObjectsを知っているかどうか」は結構違いがあったりするよ。もちろん本当にちょっとだけとかだと微妙、ある程度感じてないとダメ。そのある程度感じている人が日本にどれだけ居るかっていう話もあるね。あ、ボクの話は無視してください、感じてませんから。
たぐ - apple software webobjects
(0)
ianhenderson.org - delimport
Spotlight インポータのプログラミングガイド
私がMac OS X 10.6、所謂Snow Leopardさんを導入したのは珍しくリリースされてからしばらく経った後でしたので、ほぼ全ての主要アプリケーションが対応済みだったりしまして特にトラブる事もなく順調に順応していったのですけど、一つだけ困る事がありまして、何が困るってdelimportさんが対応していない事だったりしました。
幸いにもソースコードが公開されておりますので、それをダウンロードしてMac OS X 10.6上でビルドすれば動くようになるのですけど(左図参照の事。アクティブ SDKは10.6でもいいので、むしろそちらの方が良いかもしれない)、その顛末をば以下に。
一応delimport本体は問題なく動いているようで、“~/Library/Caches/Metadata/delimport”以下にdeliciousから取り出したブックマーク情報を蓄積してくれるのですけど、それを上手いところSpotlightにインデックス化してくれない、もちろんインデックスに入れてはくれるのだけど、“0a15d319a5375c8a512138a4fd80e632.delicious”みたいなファイル名のままでインデックスされるので検索しづらい、もちろんタグによる検索も不可。
こうなると原因は明らかですよね、delimportに同梱されているSpotlightインポータが上手く動いていないっぽい。動いてないっぽいけどどうやって検証すればいいの。どうやって解決すればいいの。Google先生の助けを借りましょう。借りるともさ。
まずインポータ自体が認識されているのかを調べます。Mac OS XにはSpotlight関連の独自コマンドがいくつか存在するのでそれを使います。
/usr/bin/mdimport -L
とターミナル上で叩くと認識しているインポータがずらずらっと表示されます。
ちょっと端折って引用しますけど、私の環境だと以下のような感じ。
risa:~ tac$ /usr/bin/mdimport -L | grep delimport
2009-10-23 22:08:15.898 mdimport[5531:903] Paths: id(501) (
"/Library/Spotlight/iWork.mdimporter",
"/System/Library/Spotlight/Font.mdimporter",
"/Library/Spotlight/Microsoft Office.mdimporter",
"/Developer/Applications/Xcode.app/Contents/Library/Spotlight/SourceCode.mdimporter",
……
"/Applications/delimport.app/Contents/Library/Spotlight/del.icio.us Spotlight Interface.mdimporter",
……
"/System/Library/Spotlight/QuartzComposer.mdimporter",
"/System/Library/Spotlight/Automator.mdimporter",
"/Applications/Evernote.app/Contents/Library/Spotlight/EvernoteSpotlightImporter.mdimporter",
"/Developer/Applications/Xcode.app/Contents/Library/Spotlight/uuid.mdimporter"
)
そんなわけで、ありました。ありますよね、そら。
なので、次のステップ。どのようにインデックス化されているのかをチェックします。こちらも独自コマンドでメタデータ属性を確認する事ができますので、適当な.deliciousファイルを引数にして実行してみます。
mdls ~/Library/Caches/Metadata/delimport/94ece96b55d482329e56fe6a00e094f5.delicious
kMDItemContentCreationDate = 2009-09-15 20:43:43 +0900
kMDItemContentModificationDate = 2009-09-18 13:29:59 +0900
kMDItemContentType = "org.ianhenderson.delicious.bookmark"
kMDItemContentTypeTree = (
"org.ianhenderson.delicious.bookmark",
"com.apple.safari.bookmark",
"public.data",
"public.item"
)
kMDItemDisplayName = "922b89bd8d0c430ce0cb669df8d3c0dd.delicious"
kMDItemFSContentChangeDate = 2009-09-18 13:29:59 +0900
kMDItemFSCreationDate = 2009-09-15 20:43:43 +0900
kMDItemFSCreatorCode = ""
kMDItemFSFinderFlags = 0
kMDItemFSHasCustomIcon = 0
kMDItemFSInvisible = 0
kMDItemFSIsExtensionHidden = 0
kMDItemFSIsStationery = 0
kMDItemFSLabel = 0
kMDItemFSName = "922b89bd8d0c430ce0cb669df8d3c0dd.delicious"
kMDItemFSNodeCount = 0
kMDItemFSOwnerGroupID = 501
kMDItemFSOwnerUserID = 501
kMDItemFSSize = 812
kMDItemFSTypeCode = "DELi"
kMDItemKind = "Del.icio.us Bookmark"
kMDItemLastUsedDate = 2009-10-23 10:26:18 +0900
kMDItemPPCOnlyImporter = 1
kMDItemUsedDates = (
"2009-10-19 00:00:00 +0900",
"2009-10-23 00:00:00 +0900"
)
上記の出力は一例ですので実際のそれとは違う可能性がありますけども、“kMDItemDisplayName”のそのままファイル名がはいっているし、URLやタグなどの独自情報も含まれていません。これじゃ上手く検索できるはずがない。
検証が済んだので、きれいさっぱり配布されているバイナリを諦められます。や、実際は諦めきれなくて内部にあるスキームファイルを編集してどうにかならないかなぁと足掻いたりしたのだけどね、何の実りもなかったけど。かくなる上はソースを落として自前で何とかするしかない。なんだったら何とか修正して使えるようにするしかない。
とか珍しく息巻いてソースをダウンロードして試行錯誤してビルトして動かしたら上手く行ったっていうね。自前でビルドしたdelimportを使ってインポートを行うと、
isa:~ tac$ mdls ~/Library/Caches/Metadata/delimport/7cd883fff7fbb7078a700a4f2f99eace.delicious
kMDItemAlternateNames = (
"7cd883fff7fbb7078a700a4f2f99eace.delicious"
)
kMDItemContentCreationDate = 2006-03-11 11:19:29 +0900
kMDItemContentModificationDate = 2006-03-11 11:19:29 +0900
kMDItemContentType = "org.ianhenderson.delicious.bookmark"
kMDItemContentTypeTree = (
"org.ianhenderson.delicious.bookmark",
"com.apple.safari.bookmark",
"public.data",
"public.item"
)
kMDItemDescription = ""
kMDItemDisplayName = "例のあれ(仮題)・とっぷ"
kMDItemFSContentChangeDate = 2009-10-23 10:18:52 +0900
kMDItemFSCreationDate = 2006-03-11 11:19:29 +0900
kMDItemFSCreatorCode = ""
kMDItemFSFinderFlags = 0
kMDItemFSHasCustomIcon = 0
kMDItemFSInvisible = 0
kMDItemFSIsExtensionHidden = 0
kMDItemFSIsStationery = 0
kMDItemFSLabel = 0
kMDItemFSName = "7cd883fff7fbb7078a700a4f2f99eace.delicious"
kMDItemFSNodeCount = 0
kMDItemFSOwnerGroupID = 20
kMDItemFSOwnerUserID = 501
kMDItemFSSize = 560
kMDItemFSTypeCode = "DELi"
kMDItemKeywords = (
""
)
kMDItemKind = "Del.icio.us Bookmark"
kMDItemLastUsedDate = 2009-10-23 10:18:52 +0900
kMDItemURL = "http://web-ya.jp/cgi-bin/WebObjects/ReiAre"
kMDItemUsedDates = (
"2009-10-23 00:00:00 +0900"
)
おー、ばっちり、ばっちりやないですか!
でも、途中でちゃんと動いているか確認しようとして独自コマンドを実行して、
risa:~ tac$ /usr/bin/mdimport -d2 /Users/tac/Desktop/94ece96b55d482329e56fe6a00e094f5.delicious
2009-10-24 21:58:31.242 mdimport[6283:903] Imported '/Users/tac/Desktop/94ece96b55d482329e56fe6a00e094f5.delicious' of type 'org.ianhenderson.delicious.bookmark' with plugIn /Library/Spotlight/del.icio.us Spotlight Interface.mdimporter.
2009-10-24 21:58:31.245 mdimport[6283:903] Attributes: (null)
Plugin '/Library/Spotlight/del.icio.us Spotlight Interface.mdimporter' does not match current 64 bit architecture to import type 'org.ianhenderson.delicious.bookmark'.
'/Library/Spotlight/del.icio.us Spotlight Interface.mdimporter' should be updated. 'arch -i386 mdimport' may work as a work-around.
とか出ちゃって戸惑ったよ、「動いてねー」とか。ビルドオプションでゴニョゴニョしつつ検索テストしていたらちゃんと出てくるようになって気が付いたけど。
あと、ビルドには成功しますけど盛大にwarningがでますよ、226個くらい。ほとんどがNSStringのdeprecatedなメソッド関連ですけど。今回は何の修正もなしに行けたけど、このままご本家様の対応がなかったら次は何とかしなければいけないかもなぁ、できそうにないなぁ。
もう一つ、ソースをダウンロードしようとするとき、delimportはdarcsというバージョン管理システムを使っているのだけど、これをMacPortsからインストールしようとするとghcがMac OS X 10.6に対応していなくてできない。超面倒くさい。やってられない。
私がどうやったかというと、VMware Fusion上にUbuntu入れてそれにdarcs入れて落としましたとさ。
(0)
まぁ、あれです、体調が悪いだけならともかく、血液検査の結果も悪いとなるとそれなりに対策を施したいわけで、ここは一つ筋トレではない消費系の運動を再開しようかなと、久しぶりにトレッドミルで走ってきたのですけど、前よりもかなりゆっくり目で走ったにもかかわらずヘロヘロになってしまって、帰りにしばらく川のそばに座って休んでいた時の連続写真をGIFアニメ化。QuadCamera大好きだ。
QuadCameraで撮影した写真をGIFアニメ化するには、公式にあるQuadAnimatorが便利っすよ。ローカルで動かせるFlash版もあります。
(0)
KeyRemap4MacBook
まぁ、HHK Lite2を使っていたりしたので基本的にその頃のままですが一応まとめ。スペースバー押しっぱなしでShiftになるというSandSを中心にいくつかの機能をオンにしています。
SandSは本当にもう手放せなくて、これがないとかなり入力のスピードが落ちます、間違えまくりです。たまに他所様のマシンに触れますとほぼ例外なくこの機能がオンになっているはずがありませんから、絶対に一回は意味なくスペースを入力をしてしまうという間違いをやらかします。
SandSはSKKとの相性をよくうたわれますが、私は日本語入力にことえりを使っています。それですらなお便利でたまらないSandS、恐るべし。
次に両コマンドキー単発押しを「英数」、「かな」キーへ割り当てる機能。これもマストです。私は旧Mac OSでこの機能が使える様になって以来(8くらいだったかなぁ、意図する動作になったのは)ずっと文字入力は基本ことえりを入れっぱなしにして「英数」、「かな」キーで入力モードを切り替えながら行っています。この切り替え方法も手に馴染み切っているので使えないとイラっとします。よくコマンド+スペースなどでトグル的に切り替える事で代替可能とおっしゃる方がいますが、使い勝手は全然違います。
トグル切り替えの場合、どこかのモード表示を確認しない限り実際に入力し始めてみないとどちらの入力モードになっているかわかりませんから、入力し始めて「おっとっと」と切り替える事がままあります。が、「英数」、「かな」キーを使えば、入力し始める前に必要な方のキーを一回押しておけばOK。今現在どちらの入力モードになっているか知らないけれど、とりあえず希望する入力モードの方を押しておけばOK。希望する入力モードでの入力開始となります。
この一点で私はJIS配列キーボード派でありました、ただUS配列へリマップして使っていたのですけど。JISでUS配列最強。と実は今でも思っていたりします。
Mac OS XはCocoaアプリであれば基本的にEmacs風キーバインドが使えますが、Carbonアプリとかだと使えなくて「指が覚えているので暴走してあんまりだ」な自体になりがちですので、Emacs Modeも活用する方向で。本当はもっとガッツリ有効にしまくりたいのですけど、アプリ自体のショートカットに当たってしまう可能性が高いのでそれなりに厳選して適用しています。
Snow LeopardになってFinderもCocoaアプリになったしもうそろそろEmacs Modeなしでも行けそうな感じなのですが、iTunesが残っているし、たまにMS Officeを使ったりする事があるので微妙なところ。
あと、右コマンドキーと組み合わせてSpacesのショートカットを実行できる機能もオンでありますが、Snow Leopardになってから切り替え終了時キー入力を解放してくれなくて、その後一切の入力を受け付けないという不具合がありまして最近は極力さける方向になってしまいました。MailとかSkypeとかYoruFukurouとかの常駐モノは1アプリ1画面でやっていて、これも結構便利に使っていたので少しばかり残念なところです。
Dockを突くのも好きだし、Snow LeopardのDockプレスからのExposeはSpaceを超えてウィンドウを表示してくれるのでなんとかしのげていますが、ついつい押してしまって「あーあーあー」となってログアウトする事もしばしば。
しつこく何回も取り上げていますけども、KeyRemap4MacBook、おすすめです。
(0)
Fix MacFusion on Snow Leopard | Racker Hacker
Macfusion: The world in your Finder
FTPクライアント使ってゴニョゴニョとかすっかり面倒でやってられないのでMacfusionを使ってみたところ、Snow Leopardでは起動はするけど肝心のホストへ接続する事ができない。
ってんでググったらあっさり解決。ありがとうありがとう。
リンク先にありますようにターミナルを使ってコマンドを叩いてもいいですけど、Macfusion.appのコンテキストメニューから「パッケージの内容を表示」して該当ファイルを選択して、Finderでゴミ箱へ入れてもいいかも。
(0)
TRAMP User Manual
Copy/Cut/Paste:Emacs+TRAMP+sshでリモートサーバのファイルを編集する
emacsにtrampを入れる (Jetspeed Blog)
私がなんだかんだで今でもEmacsを使い続ける理由はいろいろありますけども、その中でも大きいのがこれ。いや、正確には大きかったのが、かな、最近はあまり出番がないので。
ssh等でのリモート接続先のファイルを編集したい事がままありますけど、そういうときは「Vimで」とかなりがちですよね。だから「普段もVimで、リモート上でもサクサク編集できるためにもVimを使っとけ」という話もあるのですけど、それとて万全じゃないですよね。だってそのリモート先に自前の設定ファイルがあるか、置けるかどうかは別問題だったりしますから。
そんなときEmacsとTRAMPを使っていれば、手元のカスタマイズしまくったEmacs環境そのままに編集作業を行えます。しかも多段接続に対応してますから、踏み台を越えて、さらに越えたその先へみたいなサーバのファイルも編集できます、そうこんな風に!
/multi:ssh:username@host.domain.com:ssh:username@host.domain2.com:ssh:username@192.168.1.1:/tmp/hoge.txt
まぁ、sshfとか使ってローカルにマウントしてしまっても同じ様な事ができますが、私はトンネルを掘るのすら面倒で嫌なのです。突き進んで行って開きたい。
そんなわけで、これに変わる何かに出会わない限りEmacsは使い続けるんじゃないかなぁ、メインじゃなくっても。あと、何度も書いてますけど、Mac OS X、というよりCocoaアプリは基本的にEmacs風キーバインドですからその点でも離れ難いよ。
たぐ - software
(0)
定期的にNeXT関係の動画を見たくなってたまらなくなる私です。合わせて観たい、例のあれ(仮題)・The Steve Jobs NeXTSTEP 3.0 demo.。
昔から自分でデモするのが大好きなJobsさん、そしてそれを見るのが大好きなたくぅさん。
たぐ - software
(0)