« 2009年6月 | トップページ | 2009年8月 »

ブラッディクロス


  • ブラッディハット
  • ブラッディクロス
  • ブラッディブーツ

全体後ろポーズを撮り忘れてた。
Dvc00106Dvc00095Dvc00100

| | コメント (0) | トラックバック (0)

SimpleLyricsPlayer その10(Dockメニューとか)


今回の作業の1点は、曲ファイルに埋め込まれた歌詞が空白1文字の時は、歌詞を無効とする処理の追加。どうやらiTunesは、mp3ファイルの古いヴァージョンのIDタグを削除しないため、歌詞を無入力にすると新しいIDタグを埋め込むが、残っている古いIDタグの歌詞を参照して返してくる模様。つまり歌詞を消すことは出来ず、空白文字を入れるような対処になる。強引にIDタグ全てを削除するといいのだがタグ再入力の手間がかかるので、アプリ側で対応した。

次の更新は、gooの歌詞検索。以前、公開直後にgooが歌詞ページの仕様を変更したようで、歌詞が文字化け状態で取得される問題があった。まあ放置してたんだけど、それを対策しようかと。
さて、文字化けは歌詞の部分がHTMLエンコーディング(僕らといった文字)されていることによる。では、デコードするにはどうするか?
perlで出来そうなので、そちらで検討。

Perlで文字列をHTML数値文字参照に変換(http://www.akatsukinishisu.net/itazuragaki/perl/string_to_numeric_charref.html)
Perl HTML数値文字参照(http://d.hatena.ne.jp/hirdy/20080820/1219220517)

このページが参考になりました。正直、全然理解できてないけどそのままパクリで対応できた。

あまり関係ないけど便利そうなページ。web上で変換できます。

HTMLエンコードフォーム(http://kawama.jp/php/encode_html.php)

いろいろ検索すると、URLエンコーディングもperlで出来る模様。
Perl で url エンコードと url デコード(http://sonic64.com/2003-08-31.html)

次の更新は、Dockアイコンのメニューから歌詞ファイルをFinderに表示する機能の追加。
Dockメニューへの対応方法は、以下のページが参考になる。

鶴薗賢吾のCocoaはやっぱり!出張版》#4-Mac OS X 10.1の新機能(3)

(http://msyk.net/mdonline/msgbox/messageshow_53807.html)

Slp_dockmenu

| | コメント (0) | トラックバック (0)

SimpleLyricsPlayer その11(webリンクの追加)

Slp_link1

上図のように、ラベル(NSButtonのtitle部分)にHTMLリンクを埋め込み、クリックでそのサイトへジャンプするようにしたい。
といった作業に着手。

まず、リンクはラベルへNSAttributedString型で埋め込めばいい模様。
NSAttributedStringについては、以下のページに日本語訳が。ついでに、リンクを作成する方法もドキュメント中盤にサンプル・コードがあったり。

AttributedStringsProgrammingGuide(PDF)
(http://www.mosa.gr.jp/wp-content/uploads/2007/01/attributedstringprgmgd.pdf)

とりあえず、以下のコードで実行してみた。

    NSString *buttonTitle = [[NSBundle mainBundle] localizedStringForKey:@"webLyricsSite1Name" value:nil table:nil];
    NSString *buttonUrl = [[NSBundle mainBundle] localizedStringForKey:@"webLyricsSite1Url" value:nil table:nil];
    NSMutableDictionary *dictAttr = [NSMutableDictionary dictionary];
    [dictAttr setValue:[NSColor blueColor] forKey:NSForegroundColorAttributeName];
    [dictAttr setValue:[NSNumber numberWithInt:NSSingleUnderlineStyle] forKey:NSUnderlineStyleAttributeName];
    [dictAttr setValue:[NSURL URLWithString:buttonUrl] forKey:NSLinkAttributeName];
    
    NSAttributedString *attrStr = [[[NSAttributedString alloc] initWithString:buttonTitle attributes:dictAttr ] autorelease];
    
    [gooAccessButton setAttributedTitle:attrStr];

実際に作ってみると、NSLinkAttributeNameの属性は失われる。あと、ラベルをクリックするとチェックボタンがオンオフとなるので、ボタンにリンクを直接入れるのは無理なようだ。

次にNSTextFieldを用意して、こちらに先ほどと同様にNSAttributedStringを入れてみた。
結果、同じようにNSLinkAttributeNameの属性は失われる。

じゃあ、何に入れればいいんだ!!といらついてドキュメントを見直すと、NSTextViewのようだ。
NSTextViewを1行分のサイズにして同じようにNSAttributedStringを入れてみた。

Slp_link2


NSTextViewを使ってここまでの作業で分かったこと。

・NSLinkAttributeName属性があると、文字に青色と下線が自動的に設定される。
・NSTextViewをselectableに設定しないとクリックできないのでジャンプしない。
・NSLinkAttributeName属性の値にNSURLを設定すると、コードレスでジャンプする。(NSTextViewにtextView:clickedOnLink:atIndex:の実装が不要)

しかし、外観に問題がありすぎなので、別途にNSButtonを用意して実現することに。

Slp_link3

若干コードが美しくなくなったが、イメージに近い形で動作するようになった。

以下は、ボタンを押された時の処理のコード。URLを標準ブラウザで開く処理は以下のページが参考に。

Cocoaの日々 - 2005年1月 クリッカブルテキスト - NSTextView(http://homepage.mac.com/xcatsan/cocoa-days/2005-01.html#20050123_1)


- (IBAction)clickedOnLink:(id)sender
{
    NSString *link;
    
    if (sender == gooLinkButton) {
        link = [[NSBundle mainBundle] localizedStringForKey:@"webLyricsSite1Url" value:nil table:nil];
    } else if (sender == yahooLinkButton) {
        link = [[NSBundle mainBundle] localizedStringForKey:@"webLyricsSite2Url" value:nil table:nil];
    } else if (sender == fuzzy2LinkButton) {
        link = [[NSBundle mainBundle] localizedStringForKey:@"webLyricsSite3Url" value:nil table:nil];
    } else if (sender == anisonLinkButton) {
        link = [[NSBundle mainBundle] localizedStringForKey:@"webLyricsSite4Url" value:nil table:nil];
    }

BOOL result = [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:link]];
}

| | コメント (0) | トラックバック (0)

人間・男・僧侶

人間・男の裸僧侶。あまりカッコ良くないので脱ぐことは少ない。
Dvc00089Dvc00094Dvc00087

| | コメント (0) | トラックバック (0)

エンペラーローブ


  • エンペラークラウン
  • エンペラーローブ
  • エンペラーブーツ

素晴らしいテクスチャだ。
エンペラークラウンエンペラーローブエンペラーブーツ

| | コメント (0) | トラックバック (1)

sipsコマンドでリサイズするアップルスクリプト


iTunesのアートワーク用に画像を600x600にリサイズしたい。しかし、リサイズ用の手頃なアプリケーションが無い。以前、こちらをお薦めしたが、もっと簡単にしたかったのでsipsのコマンドをアップルスクリプトから呼び出すようにした。sipsについてはこちらの記事(OS X ハッキング! (73))(http://journal.mycom.co.jp/column/osx/073/index.html)を。

以下がそのスクリプト。OSX 10.4.11で確認。使い方は、ドロップレットにして画像ファイルをドロップする、あるいはFinderで画像ファイルを選択してスクリプトを実行する。画像ファイルと同じフォルダにリサイズ後の画像ファイルが作られる。

(*iTunes用のアートワーク作成用スクリプト*)
(*
600x600へリサイズする*)
property DO_LIST : {"png", "jpg"}
property MAX_SIZE : 600

on open theList
    
toControl(theList)
end open

on run
    --
Finder選択項目を調べる
    
tell application "Finder"
        
set theSelected to selection
        
set theLocationList to {}
        
repeat with theItem in theSelected
            
if class of theItem is folder then
                
exit repeat
            
end if
            
set theUrl to URL of theItem
            
set thePath to POSIX path of POSIX file theUrl
            --
ファイル名のURLデコード
            
set theCmd to "echo " & quoted form of thePath & " | perl -pe '~s/%([a-fA-F0-9][a-fA-F0-9])/pack(\"C\", hex($1))/eg;'"
            
set decodedItem to do shell script theCmd
            
set end of theLocationList to (POSIX file decodedItem as alias)
        
end repeat
    
end tell
    --
なければ選択ダイアログを表示
    
if theLocationList is {} then
        
choose file with prompt "画像ファイルを選んでください" without invisibles
        
toControl({result})
    
else
        
toControl(theLocationList) of me
    
end if
end run

on adding folder items to theFolder after receiving theList
    
toControl(theList)
end adding folder items to

on toControl(theList)
    
    
repeat with curItem in theList
        
set theFileInfo to info for curItem
        
if (name extension of theFileInfo) is in DO_LIST then
        
else
            
display alert "処理できません" message name of theFileInfo as warning
            
exit repeat
        
end if
        
        
        
set cmd to "sips -Z " & MAX_SIZE & " " & quoted form of POSIX path of curItem & " --out " & quoted form of POSIX path of newFile(curItem) of me
        
do shell script cmd
    
end repeat
    
end toControl

--
ファイル名に(resized)を付けて返す
--
newFile:HFS形式のStringを返す,oldFile:alias
on newFile(oldFile)
    
set theFileInfo to info for oldFile
    
set pareDir to (alias ((oldFile as string) & "::"))
    
set stringName to name of theFileInfo as string
    
set nameSize to (count of character of stringName) - (count of character of name extension of theFileInfo) - 1 -- 1 is dot size
    
set addName to "(resized)" as string
    
    
set newName to (items 1 thru nameSize of stringName) & addName & "." & name extension of theFileInfo as string
    
    
set returnName to pareDir & newName as string
    
return returnName
end newFile


Finderの選択項目を取り出すのに苦労している。

tell application "Finder"
    
first item of selection
end tell

まず、上記のような記述は出来ない。"Finder でエラーが起きました:item 1 of selection を取得できません。"と出てエラーとなる。

この場合、以下のように記述するとうまく行く。

tell application "Finder"
    
set theSelected to selection
    
first item of theSelected
end tell

あと、ファイルのパスはURLプロパティで取り出せる。ただし、日本語部分はエンコードされているので、alias形式にするためにperlを使ってデコードしている。

| | コメント (0) | トラックバック (0)

Unicode Text分解でのトラブル

またまたアップルスクリプトでトラブったので書く。

set testFile to alias "iMac TFT:Users:tbboy:Desktop:ピクチャ 7.png"

set theFileInfo to info for testFile
log characters of name of theFileInfo
log characters of (name of theFileInfo as string)

log "count = " & (count of items of name of theFileInfo)
log "count = " & (count of items of (name of theFileInfo as string))

set testList to characters of name of theFileInfo
log testList
set testString to testList as string
log testString

上のコードは、デスクトップに出来たスクリーンショットのファイル名を分割するテストコード。

log部分の実行結果は以下の通り。

    (*ヒ, ゜, ク, チ, ャ, , 7, ., p, n, g*)
    (*, ク, チ, ャ, , 7, ., p, n, g*)
    (*count = 11*)
    (*count = 10*)
    (*ヒ, ゜, ク, チ, ャ, , 7, ., p, n, g*)
    (*ヒ*)

name of theFileInfoの値は、Unicode TextとStringでは文字分解した時の結果が異なる。この程度ならまだ仕様の範疇かもしれないが、分解した文字を元の文字列へ合体させると失敗して「ヒ」だけになるのはあり得ないと思う。
この問題を回避するには、文字列分解時は必ずStringに変換してから分解することになる。

MacOSX 10.4.11で確認。

| | コメント (0) | トラックバック (0)

ブラッディクロス


  • ブラッディハット
  • ブラッディクロス
  • ブラッディブーツ

桂正和のシャドウレディに似ている気が。
ブラッディハットブラッディクロスブラッディブーツ

| | コメント (0) | トラックバック (0)

SimpleLyricsPlayer その9(デスクトップ表示)

SimpleLyricsPlayerを久しぶりに更新。TBBOYは、17インチ液晶モニタを使用しているため画面が狭く、デスクトップがほとんど表示されないのだが、歌詞をデスクトップ(壁紙)上に表示する機能を追加。
いままでフローティング表示だったのをwindow levelを変更するだけなので簡単なはず。はず。

まず、環境設定にswitchボックスを置いて、このオンオフによって表示状態を切り替える。

Slp_desktopbutton

では、コーディングへ。マニュアルを調べると壁紙表示は標準ではサポートしてない模様。
NSWindowのConstantsにあるWindow Levelsにはないが、Quartz Display Services Referenceには定義されている。

Window Level Keys

enum _CGCommonWindowLevelKey {
kCGBaseWindowLevelKey = 0,
kCGMinimumWindowLevelKey,
kCGDesktopWindowLevelKey,
kCGBackstopMenuLevelKey,
kCGNormalWindowLevelKey,
:

なんだこの値をセットすればいいのかと、やってみたがうまくいかない。
ネットで調べると、メニューのキャプチャ(その10)Spotlight (http://xcatsan.blogspot.com/2008/06/10spotlight.html)といった記事が。
この記事をよく読むと、WindowLevelとWindowLevelKeyのふたつがあることに気がつく。どうやらkeyからlevelを生成しているようだ。
正しいコードは、以下の通り。MainWindowは歌詞を表示しているウィンドウ。

[MainWindow setLevel:kCGDesktopWindowLevel];

実行画面。TBBOYのデスクトップはアイコンが散乱しています。
Slp_desktop

| | コメント (0) | トラックバック (0)

マーブルローブ


  • マーブルマスク
  • マーブルローブ
  • マーブルブーツ

男がスカートはいてもいいはず。
Dvc00006Dvc00007Dvc00002

| | コメント (0) | トラックバック (0)

マーブルローブ


  • マーブルマスク
  • マーブルローブ
  • マーブルブーツ

シャドロのテクスチャ変更ですね。マスクはオリジナルのようだが。
マーブルマスクマーブルローブマーブルブーツ

| | コメント (0) | トラックバック (0)

外付けハードディスクを購入


そろそろ、空き容量が数GBとなったので川崎のヨドバシカメラで購入。

Westren Digital My Book Essential Edition 2.0(http://www.westerndigital.com/en/products/Products.asp?DriveID=353)
容量 1TB、USB2.0、MacOSX 10.4対応。
13,800円(税別)也

正直、容量が1TBもあってUSB2.0なんて糞とろいインタフェースで大丈夫だろうか。しかし値段が安いのでチョイスした。
ちなみに今までの外付けは、IEEE1394(Firewire)対応を使っている。

さっそく、取り出してみるとシンプルの一言に尽きる。無駄な物が一切入っていない。取説も見ずに、USBケーブルと電源アダプタをつなげてMacへ接続。

・・・数秒後、認識できないダイアログが表示される。嫌な予感を感じつつ、初期化を選択(ディスクユーティリティが起動される)。途中経過を省いて、初期化が出来ない。

「パーティションでエラーが起きました:Input/output error」

このエラーメッセージが出て終了。再起動させたり、初期かフォーマットを変えたりしたが解決せず。

ネットで色々調べると、Mac用ドライバ(http://support.wdc.com/product/download.asp?groupid=110&sid=108&lang=jp)がダウンロードできることが判明。これをインストールすることで解決。

Wd_mount

無事マウントすると、いろいろと放り込まれている。FAT32なのは当然として、Mac用のユーティリティも入っていた。Memeo LifeAgent。なにかと調べたらバックアップソフト。無料なのかと思ったら$10。インストールする前に教えてくれよ。

さて、早速コピーするか。

Wd_copy

3GBコピーに一時間かよ。

| | コメント (0) | トラックバック (0)

ことえり4の麻雀用語辞書

今期やっているアニメの咲 -saki-(http://www.saki-anime.com/index.html)は面白いな。

「咲-Saki-」アニメスペシャルサイト

さて本題へ、麻雀用語の漢字が特殊すぎるんで入力できない。というわけで日本語入力のために
フリーの用語辞書を探してみた。しかし、Mac用に手頃な物が見つからなかった。

じゃあ作るか。といっても時間がかかるので、既存辞書をコンバートする作戦に変更。

出来上がったブツが以下のもの。

「Dictionaries.dmg.zip」をダウンロード

OSX10.4、ことえり4で動作確認。
珍しくディスクイメージ形式(.dmg)を採用。これはユーザ辞書が、リソースフォーク付きのパッケージ(フォルダ)のため、普通にlzhやzipでは適切に伸長されないだろうから。

元となった辞書は、IME 日本語辞書・麻雀用語集設定(http://kot9a.hp.infoseek.co.jp/ALICE9/extra/download/02_imedic.htm)のもの。
Windows用だがテキスト形式でも提供されているので容易に変換可能(タブをカンマにする程度)だった。

断幺は断么といったように、幺→么に修正されています。また、ことえりは単語の注釈(コメント)がないのでばっさり落ちています。あと、ポンもうまく変換できてないような。ライセンスに関してはオリジナルと同等で。

wikiにも麻雀用語が載っているので、そちらを参考に補完するのもいいかも。

麻雀用語一覧(http://ja.wikipedia.org/wiki/%E9%BA%BB%E9%9B%80%E7%94%A8%E8%AA%9E%E4%B8%80%E8%A6%A7)
麻雀の役一覧(http://ja.wikipedia.org/wiki/%E9%BA%BB%E9%9B%80%E3%81%AE%E5%BD%B9%E4%B8%80%E8%A6%A7)


| | コメント (0) | トラックバック (0)

サッポロビール株主優待

Dvc00026

なんと、缶ビールの商品券ではなく飲料ドリンクのセットが送られてきた。四角い段ボールに入っていたのだが、撮影のため取り出して床に並べた。正直、これといっていいドリンクはない。珈琲はまあまあだった。

| | コメント (0) | トラックバック (0)

ダイドー株主優待

Dvc00032

野菜ジュースは、わりとはやく消費できた。

| | コメント (0) | トラックバック (0)

ココログ、ログインID変更でトラブル発生中

これはきちんと記事にしておかねばなるまい。
このココログ開始時、ニフティのサービスでありながら何故かログインIDは、ニフティIDではなく独自のアカウントを作成しなければならなかった。
不便だなと思いつつ、当時はブログ自体がここまで流行するとは予想されなかったからニフティとは統合するつもりは無かったのだろう。
しかし、ここにきて突然ニフティIDでのログインに強制変更。実は、TBBOYはニフティユーザ(パソコン通信)→Info web(インターネット)併用→info webがニフティに統合→最初のニフティ退会と変遷しているので、info webの移行アカウントを使っているのだ。ニフティもinfo webも富士通系列だから大した差も無いが。このニフティIDを使うのは久しぶりだ。

今回のログインID変更では、特に利便性に関するメリットなどひとつも無く、むしろひとつのサービスからパスワードが漏洩したら、致命的重傷を負うリスクの方が大きく感じる。(同じIDでサービス毎にパスワードを変える人間がいるとは思えない)
たぶん、ニフティの本音は運用コストを低減させるとか、顧客情報をまとめて顧客動向の精度を上げるとかでは無いだろうか。

まあ、いずれにせよヘタレな運用ではある。

| | コメント (0) | トラックバック (0)

« 2009年6月 | トップページ | 2009年8月 »