[Ruby]
iTunes Libraryの重複ファイルを消すスクリプトをRubyで書く
2008/7/5 18:28:53
Ruby入門しました.
何か練習に書いてみようということで,ひとつ.
iTunesでライブラリを再構築したら
うっかり,同じ曲も足されちゃって
hoge.mp3
hoge 2.mp3
というのが果てしなく増殖してしまうことがよくあります.
こういうのさくっとRubyで解決できたら便利だなと挑戦.
戦略は
ファイル名が
***(space)2.extensionなら,
***(space).extensionを探す
あれば,重複だーということで削除.
レアなケースで
***(space)0.extension
***(space)1.extension
***(space)2.extension
***(space)3.extension
という曲名だったらアウトですが,気にしない.だって分からんもん.
ディレクトリ以下の全てのファイルパスを取得するコードをたのしいRubyからパクって
僕はdeleteIfDuplicatedを実装しただけの楽ちんコード.
def deleteIfDuplicated(fileName)
p fileName
if / 2./ =~ fileName
find = fileName.sub(” 2.”,‘.’)
if FileTest.exist?(find)
p ‘delete:’,fileName
File.delete(fileName);
end
end
end
def traverse(path)
if FileTest.directory?(path)
dir = Dir.open(path)
while name = dir.read
next if name == “.”
next if name == “..”
traverse(path + “/” + name)
end
dir.close
else
deleteIfDuplicated(path)
end
end
こういう風に使います.
path = “/Volumes/400GB/iTunes”
traverse(path)
で,削除したら
iTunes のライブラリからファイルが存在しない曲を効率良く取り除く方法
で削除.
もし試す場合,何かが起こっても僕は一切責任取れませんので
バックアップなどやってから実行してください.
僕の環境では5000曲が削除できました.
あ〜,ちゃんと 2.extensionが最後が確認した方がいいな.
まぁいいや.
- No Responses
- Leave a comment...
- Comment Feeds
[Codex]
数学ガール/フェルマーの最終定理
2008/7/1 22:52:52
http://www.hyuki.com/girl/fermat.html
が出るそうです.
無料プレゼント企画やってらっしゃいます.(応募済)
結城さんと言えば「Java言語で学ぶデザインパターン入門」
がナイスでした.
ということで応援post.
#Javaの利点は本が多いことに尽きる!
- No Responses
- Leave a comment...
- Comment Feeds
[MacPeople]
MacPeople 2008.08
2008/7/1 19:25:13
ひょんなことから,MacPeople読者になりました.
というわけで,毎月レビュー(なのか?)を書きます.
さて,今月のMacPeopleは・・
WWDC特別号 絶対欲しいiPhone3G!
あれ,MacじゃなくてiPhoneですか.
ApplePeopleに名前を変えた方がいいのでは.
さて,内容.
iPhone特集はよくまとまっているのでWebで追うのがダリィーな人はお勧め.
豆知識 : また別売りで充電/同期/オーディオ入出力に対応する「iPhone 3G Dock」も販売される予定だ
知らなかった.こういうのが雑誌のよいところですね.
クイズ!マックでヘキサゴン
これは・・・
と思ったけど,意外と面白いのです,こういうの.
津田大介の音楽配信一刀両断
これね,本出してください.よろしくお願いします.
あと面白いのは
processingの記事
Deep Inside OSX
うむうむ,動向をきちっとまとめた記事から
マニアックな記事までしっかり網羅されている.なるほど.
と,実に数年ぶりにMac系雑誌を立ち読み以外で読みましたが
780円でこれだけ凝縮されたものが見れるのは買いかも.1時間じゃ読み切れない.
料理のレシピからGPGPUの話題まで載っている雑誌もそうはあるまい.
あと2・3人,おもしろい連載があれば買うな.
もちっと,現場寄りの人の連載というか,こんなの作ってます!という人にインタビューの記事があればいいな.
DeMOSAに出てるような人に小一時間インタビューしてまとめればよいのでは.
来月も期待してますマックピーポー!
- No Responses
- Leave a comment...
- Comment Feeds
[movalprocess]
DSPでBang 満員御礼
2008/6/25 15:45:38
イベント無事終わりました.
雨の中お越しいただいた皆様,ありがとうございました.
僕の発表は15分にかなり詰め込んだので
非常にざっくりなものになっていたと思います.
もっと詳しく!という方はイベントに呼んでください.2時間ぐらい喋ります
ちなみに,僕の発表はいつか〜#008で配信予定です.
& #009「movalprocess特集」収録済みデス.
近々公開します.
- No Responses
- Leave a comment...
- Comment Feeds
[movalprocess]
IAMASイキマス、DSPでBANG! 2008
2008/6/19 22:29:32
6/22は
IAMASイキマス、DSPでBANG! 2008
http://www.iamas.ac.jp/dsp/2008/06/1-max5.html
でございます.
ということで再告知.
タイトルが,Max 5大作戦となっていますが,僕はMaxは関係なく
movalprocessについてガチでプレぜンします.
さてさて,15分でどこまで話せるのか.
- No Responses
- Leave a comment...
- Comment Feeds
[movalprocess, Core Audio]
Undo/Redo
2008/6/17 23:00:13
苦労したのは,普通のCocoa ApplicationじゃないのでNSSliderとかをほとんど使ってないわけです.
なので,NSUndoManagerを使う一般的なパターンが通用しない.
し,か,も,Audio Applicationなので時間が常に流れていく.
さて,そこでどうするか考えるわけですが
デザインパターンをObjective-Cで - Memento (2)
Mementoではない、NSUndoManager
GoF本によるMementoが、変更前の状態を保存しておく、というものに対して、操作を登録するという行為は、大きく異なる。
あたりを読んで,NSUndoManagerを使ってMementoみたいなことをやろうと決意.
Audio Applicationなので,時間がじゃんじゃか過ぎていく.
なので,何か操作をした地点でスナップショットとして全体の状態を保存しておく.
で,実インスタンスを丸ごと保持していくと,Audio Applicationなんでメモリが大変なことになるので
NSDictionaryで保存しておく.
そんで,undo/redo時はスナップショットから状態を復元する
-(void)restoreFromSnapshot:(NSDictionary*)snapshot
みたいなmethodを用意しておいて,何か操作をしたら,操作する前のsnapshotをUndoManagerに登録.
NSUndoManager *undoManager = [self undoManager]; [undoManager registerUndoWithTarget:self selector:@selector(restoreFromSnapshot:) object:snapshot];
redo用にrestoreFromSnapshot内でsnapshotをUndoManagerに登録.(undo取り消し操作)
という具合に実装しました.
これがいいのは,スナップショットの実装がそのままDocumentの保存になることと,テストケースが書きやすい.
Audio UnitのSliderを動かした〜なんてときは,全体の状態を全部更新する必要もないので特別対応で
Audio UnitのPresetだけ戻す〜なんて具合に最適化してある部分もあり.
あと,AUGraphのNodeをAudio処理中に繋ぎ変えたとき,捨てたはずのAudio Unitが開放されないので,undo/redoのときにさりげなくAudio処理を止めてメモリ解放したりしております.
Audio Unit便利だけど,やっぱフルスクラッチで書かないと,最終的な追い込みで苦労する.うお.
Monalisa(Audio・Image Unit)といい,movalprocessといい,普通なCocoa GUIなAppを書いてないな・・・.
undo/redoのGUIで参考にしたのは,ネットで見つけたこの画像.
![]()
- No Responses
- Leave a comment...
- Comment Feeds
[movalprocess]
Audio Unit Effect
2008/6/17 11:14:22
movalprocess,Audio Unit Effectが少々便利に使えるようになってきた.

- No Responses
- Leave a comment...
- Comment Feeds
[Cocoa/Carbon]
NSSlider(のsubclass)でmouseUp
2008/6/16 20:18:31
初歩っぽいですが,困って見つけたので.
NSSliderをぐりぐりいじって,mouseを離したのを知りたい.
んじゃ,NSSliderを継承したClassでmouseUpをOverrideすりゃいいかなと思うのですが
NSSliderを継承しても,mouseDownは呼ばれますが,mouseUpは呼ばれません.
で,NSSlider(のsubclass)でmouseUpを呼ぶ方法がこれ.
http://paste.lisp.org/display/56333
NSEventを作って投げているだけです.
なんでこれでちゃんと動くのか.
おそらく,mouseDown後,NSApplicationはmouseUpまでEvent待ちになっていて,その間発生したEventはstackに溜まるんでしょう.で,mouseUp後,送っておいたNSEventがやってきて目出たくmouseUpが呼ばれるということじゃないかなと.
mouseUpは呼ばれないと書いてるじゃないか!と思われるかもしれませんが,NSSliderを継承したClassでmouseDownで[super mouseDown:]を呼ばないようにすると,ちゃんとmouseUpは呼ばれるのです.
(が,これだとsliderが動かないので実質アウトですね)
つまり,NSSliderが(もしくはその他の見えざる力が!)内部でmouseUpを呼ばなくしているわけです.
うお,なんだか解読不能な文章になってしまった & かなり内容が怪しいので話半分で.
- (void)mouseDown:(NSEvent *)event{
[super mouseDown:event];
// set up our mouseUp event.
NSEvent* upEvent = [NSEvent mouseEventWithType:NSLeftMouseUp
location:[event locationInWindow]
modifierFlags:[event modifierFlags]
timestamp:[event timestamp]
windowNumber:[event windowNumber]
context:[NSGraphicsContext currentContext]
eventNumber:[event eventNumber]
clickCount:[event clickCount]
pressure:1.0];
// dispatch mouse-up event
[NSApp sendEvent:upEvent];
}
- 2 Responses
- Leave a comment...
- Comment Feeds
[いつか音楽と呼ばれるもの]
MMG
2008/6/11 23:12:47
最近発見したのですが,MMG開発日記が開始されておりました!
MMGは宮島さんが開発されているMASHUP用アプリケーション.こちらの解説が詳しい.
第287回:ソニーCSLで開発中のリミックスエンジン「MMG」とは?
~ 誰でもリミックスできる音楽の新しい形を提案 ~
massh!と同じくMASHUP用アプリケーションながら
アプローチがかなり異なるところが面白いです.
DeMOSAでのDemo,面白すぎです.
- No Responses
- Leave a comment...
- Comment Feeds
[Cocoa/Carbon]
NSStringを改行して入力
2008/6/9 14:19:53
ヒレガス本3rd EDITIONが届いたので,パラパラ見ていたら,謎のコードに遭遇.
こんなコード.一瞬誤植かと思ったのですが,ま,ま,まさか.
NSString *string = [NSString stringWithFormat:
@”hoge%d”
@”moge%d”,10,20];
NSLog(string);
hoge10moge20
じゃじゃーん.
こういう書き方ができるんですね.
NSString *string = [NSString stringWithFormat:
@”hoge%d
moge%d”,10,20];
こう書くとシンタックス・エラーになるので,長いときは横長になってやだなぁと思っていたのです.
で,これはつ,ま,り
NSString *string = @”hoge”@”moge”;
NSLog(string);
hogemoge
こう書けるということなのデス!
知らなかった.
- One Response
- Leave a comment...
- Comment Feeds




