音楽SNSのLast.fmで、特定のユーザが今どんな曲を再生中か表示するWindowsガジェットをつくってみました。
3ヶ月くらい前にmixiミュージックの閉鎖がきっかけでLast.fmを利用し始めたんですが、かなり細かく再生履歴を残してくれて本当に面白く使ってます。
個人的にLast.fmを使っていて一番楽しいのは、ログインした直後のホーム画面に出て来る「再生中の友だち」情報で、22:00から23:00くらいにアクセスすると色んな人がさまざまな音楽を聴いていて、「そうそうこの曲は昔好きだった!」みたいに影響を受けて自分でも聴き返したりしています。
いちいちLast.fmにログインしたり、ホーム画面をリロードするのが面倒なので、画面端にちょこんと表示しておけると良いなぁと思っていました。
Windows Live Galleryも探してみましたが僕の探し方が良くないのか、欲しい機能を提供してくれるガジェットが見付からなかったため、自分でつくってみることにしました。
自分に欲しい機能は一通り揃ったので、今後の拡張は予定していません(><
*1 Last.fmに非公開設定とかあるのか、実はよく知りません。
C#をちょこちょこ使い始めて2ヶ月弱になりました。かなり気持ちよく記述できる言語だなーと思ってます。
イベントハンドラとか、特定のメソッドからコールバックしてもらう時に、局所的な機能はいちいち分けて宣言したくないんですが、C# 3.0だとラムダ式を使って、一連の手続きをまとめて記述できるので後から読み返し易いです。
public static class Kakakucom { public static void GetLowestPrice(string keyword, Action<string> callback) { //価格.comから最安値で検索してコールバック的な何か callback(lowestPrice); } } //Kakakucomクラスを利用する側 string keyword = "碧いうさぎ"; Kakakucom.GetLowestPrice(keyword, (lowestPrice) => { Func<bool> isHit = () => { return lowestPrice.Length != 0; }; if (isHit()) { MessageBox.Show(keyword + "の最安値は" + lowestPrice + "円でした!"); } else { MessageBox.Show(keyword + "の最安値は見付かりませんでした..."); } });
厳格に作られているJavaの言語仕様に、RubyとかJavaScriptの柔軟さをちょっと混ぜた感じで、C#はとても学習し易いと思います。PHPにも無名関数が導入されたみたいだし、色んな言語で楽ができるようになると嬉しいなぁ。
ところで、なんでVisual Studioは標準でEmacsキーマップは用意されているのに、viキーマップは無いんでしょうか?
WiMAXは東海地方でまともに使えるのはまだまだ先だろうしどうでも良いのだけど、
イー・モバイルの利用者からは「ユーザー急増でインフラが追いつかないのか、都心部では下り毎秒数十キロビットなんてことはザラ」という声も聞こえるだけに、UQがごっそりとさらえるチャンスのはずが、100円パソコン利用者には「2年間継続利用」の縛りがあるだけにそれもままならない。
これ本当なの? こないだ関東へ遊びに行ったときは、東京駅の八重洲口エリアの地下でずっとイーモバイル使っていたけど速度が遅くて使い物にならんなんてことは全然無かったけどなぁ。新宿とかだと事情が違うんだろうか。
うーん、イーモバイルの契約はあと1年弱あるけれど、契約が終わったその時に
みたいな状況になっていたら嫌だなー。
寝耳に水というか、「えっ」と思わず声に出てしまうくらい驚いた。Edyを運営するビットワレット社は創業以来ずっと赤字ということは何度か報道されていたけど、まさかこんな形になるとはなぁ。
SuicaやWAONのように主体となる事業が無くて顧客の囲い込みができないところが弱みであり、また、それ故の中立性が強みでもあると社長が語っていたけど、この先どれくらいニュートラルな立ち位置の電子マネーとして事業を続けられるんだろう。
僕はメインでEdyの付帯したクレジットカードを使っていて、東海地方では一番対応店舗が多いのがEdyなので不自由していないんだけど、この先もこれまで通りに色んなジャンルの店に対応端末の普及を推進してくれるのか、ちょっと注視しないとなぁ。
非同期にしたい処理はBackgroundWorkerに任せるとして、ウェイト部分をどうすれば良いんだ? と思ってた。
public BackgroundWorker SetTimeout(Action fn, int time) { BackgroundWorker worker = new BackgroundWorker(); worker.DoWork += (sender, e) => { Thread.Sleep(time); }; worker.RunWorkerCompleted += (sender, e) => { fn(); }; worker.RunWorkerAsync(); return worker; } //1000ミリ秒のウェイト var worker = SetTimeout(() => { MessageBox.Show("1000ミリ秒経過"); }, 1000);
Thread.Sleep()で待てば良かったんですね。
勉強になりました!
28歳になりました。
エッチなコンテンツを合法的に鑑賞可能になって10年が経過したと思うと、何だか感慨深いものがあります。居酒屋でおごってもらうなど、ちょっと良いこともありました。
今年はゲームソフトを1本も購入していません。まさか自分が全くゲームで遊ばなくなる日が来るとは、10代の頃には想像もできませんでした。
こういう現象は、社会人になって患う中二病のようなものだと聞くので、またそのうち遊ぶようになるのかもしれません。
C#では、クラス自身が持つイベントでなければ、イベントの発生を登録されたイベントハンドラに通知することができません。
どうしても外部のクラスから、自分以外のクラスが持つイベントを発生させたいときはどうすれば良いのか試してみました。リフレクションは後から読み返した時にメンテナンス不可能なほど複雑になりそうなのでやめました。
class Hoge { //いろいろイベントを定義 public delegate void LoadEventHandler(object sender); public event LoadEventHandler Loaded; public Action GetEventTrigger(eventName) { Action trigger; //公開しても良いトリガであれば返す swtich (eventName.ToLower()) { case "loaded" : trigger = () => { if (this.Loaded != null) this.Loaded(this); } break; case "initialized" : trigger = () => { if (this.Initialized != null) this.Initialized(this); } break; default : throw new ArgumentException(); } return trigger; } } var hoge = new Hoge(); var trigger = hoge.GetEventTrigger("Loaded"); //イベントの通知 trigger();
Actionデリゲートで返してやれば、外部からイベントをフックすることも可能ですね。
そもそも外部のクラスからイベントを発生させるとか設計を疑った方がいいですねわかります。
数日ほど前から、フィードを購読しているマイコミジャーナルをlivedoor Readerからピンで開くと、記事のURLの末尾にトラッキング用パラメータのようなものが付くようになりました。
この手のパラメータを削ってページを再読み込みしてくれる「Ref Cutter」というGreasemonkeyスクリプト(現在は非公開になっているようです)に少し編集して、マイコミジャーナルにも対応してみました。
オリジナル版が現在非公開なので、自分用に編集版を置いておきます(実行するページにケータイWatchやら何やら追加してます)。
マイコミジャーナルというかFeedBurnerの新機能なんですね。
マイコミジャーナルに限ったことでは無いようなので、リンクしているRef Cutterの実装はオリジナル版に戻し、別のスクリプトを作りました。
最近のバージョンのtDiaryはAutoPagerizeに対応しているので、継ぎ足されたページにもgoogle-code-prettifyのシンタックスハイライトが適用されるように、tDiaryのプラグインprettify.rbでヘッダに出力される関数google_prettifyに以下の内容を追加しました。
if (document.body.addEventListener) { document.body.addEventListener('AutoPagerize_DOMNodeInserted', function(e) { var node = e.target; var pre = node.getElementsByTagName("pre"); for (var i=0, len=pre.length; i<len; i++) { pre[i].className = "prettyprint"; } if (i > 0) { prettyPrint(); } }, false); }
element.addEventListenerをサポートしないブラウザには対応しないと云うのが今風ですね!
AutoPagerize対応版prettify.rbのソースをGitHubに置きました。
伝聞なので詳しくは知らないんだけど、マニアックなメロスピ/メロデスバンドのCDを国内向けに配給していたサウンドホリックが倒産し、今後、サウンドホリックレーベルで流通していた作品は入手が難しくなるそうだ。
扱っていたバンドなどはウィキペディアに詳しい。
ソナタアークティカが10年前にデビューしてネットメロスピ界隈が異様に盛り上がって*1、毎週のように東欧とか南米の辺境からの音源をニュースサイトが紹介して「うお! こ、これは悶絶! 青い涙が止まらない!」とか極一部で絶賛されまくっていた。サウンドホリックはそういった、ビクター等の大手が扱わないようなバンドも精力的に契約してCDを入手し易くしてくれていたんだけど、やっぱりどう考えても市場の規模に対して供給過多だったというか、単なるメロスピ・バブル現象に踊らされてしまった感じがしてしまうなぁ。
スカイラークの来日公演なんて、もう完全にバブルを象徴するような出来事で、今開催されても数十人くらいしか観に行く人が居ないんじゃないかという気がしてならない。
あれだけ沢山居たメロスパーのみんなはどこへ行ったんだと考えてみると、たぶんミクシィとかツイッターに点在しているんだろうけど、往年のようにワーッと1箇所に集まって盛り上がるような姿はちょっと想像できないなぁ。
入手できるうちにサウンドホリックのCDをアマゾンで購入しておこうかな。
*1 僕もこの頃に2ちゃんねるの影響でメロスピというジャンルを意識して聴き始めた
先週のマイコミジャーナルをフィード経由で閲覧するとトラッキング用パラメータのようなものが付くようになってるというやつが、様々なウェブサイトのフィードにくっつくようになってしまって、どうにも気持ち悪いのでGreasemonkeyを書いてみました。
気にしなきゃ良いだけの話だと思うんですが、長々とURLにくっついているとムズムズしてしまう・・・。
全てのページで実行するので省エネ実行を考えて正規表現は無しにしてみました。パラメータ名は決め打ちです。
// ==UserScript== // @name FeedBurner Tracking Cutter // @description FeedBurner経由でつく?utm_sourceから始まるトラッキングパラメータをカットして再読み込みするユーザスクリプト // @namespace http://sangoukan.xrea.jp/ // @include http://* // @include https://* // @author raimon // @version 1.0.0 // ==/UserScript== (function (){ if (!location.search) { return; } var url = location.href; var pattern = '?utm_source'; var pos = url.indexOf(pattern); if (pos >= 0) { location.replace(url.substr(0, pos)); } })();
Askが再び日本で検索サービスを始めていた。
以前の http://ask.jp/ からもリダイレクトされるみたい。
今は路線検索や天気検索の結果は返さないんだけど、真っ白でシンプルな検索ボックスだけの画面構成が大昔のグーグルのようで新鮮。
「元Dungeonのロード・ティム率いるLordが来日!」という情報を見て、(そもそもDungeonが解散していたことすら知らなかったんだけど)大阪で見たDungeonのカッコ良さを思い出してもう一度見たくなったので、今日はLordのSet In Stone Tourを見て来た。
場所は名古屋市伏見のハートランドスタジオというところ。狭めのハコに80人くらいなので、割とにぎやかな感じだった。
出演バンドが沢山居て、
17:30から始まったのに前座4つ終わったらもう21:00とかどういうことなの・・・。メインアクトのはずのLordが45分くらいしか演奏時間無かったよ! 終わってみれば終電も近い時間になるとは、正直予想していなかった。
ロード・ティムは相変わらず高音も安定して出ているし、変態タッピングを披露したり観客と楽しく掛け合いしたり、ほんとライブ映えする人物でかっこよかった。Set In Stoneはサビで自然と合唱が起きてとても良い曲すなぁ。
今日は客がカメラ撮影するのを全くお咎め無しだったんだけど、これはライブハウスの方針なのか、僕が全然ライブに行ってない間に暗黙のルールが変わったのか、よく分かんなかった。せっかくなので1枚ケータイで撮っておいた。
知らない人とも話せるのはライブの醍醐味ですね! 僕は自分から喋りかけたんじゃなくて紹介してもらっただけなんだけど。また色々と顔を出して行きたいなぁ。今年はLordiが名古屋に来なかったのが痛いですよね・・・。
コンテンツ利用の土台とも言えるパケット通信定額制サービスを利用するユーザーの割合については、年齢別でデータが示された。高校生以下〜大学生での利用率は9割に達し、ほとんど全員が定額制を利用する一方、30代以上は徐々に利用率が下がっている。ただ、過去1年の定額制ユーザーを年齢別に見ると、40 代での利用が拡大しつつあるとのことで、「30代、40代は(定額制やコンテンツを利用してもらうには)ハードルが高い層ではないと思う。このあたりをコンテンツで引きつけたい」と今後の目標を掲げた。
引用文中の強調は私の編集です。
9割の高校生がパケット定額に申し込んでるんですって。すごいねこりゃ。
試しにドコモ提供のぴったり料金プラン診断というので条件を「通話時間60分、パケット通信10,000円」と適当に入力したら、基本料金が最も安いらしい「タイプSバリュー + パケホーダイフル + 家族割引」っていうプランをお勧めされました。これ2,040円割り引かれて月々6,090円なんですって。
月6,000円って、社会人の私がauに払ってる料金と大して変わらんよね。この月6,000円に加えて、今は割賦販売とかいうのが毎月上乗せされるわけでしょう。高校生くらいの子供を持つ親御さんたちの負担も相当なものでしょうね。
たまたま目に付いた記事がドコモの記事だったのでドコモの料金プランで試算したけど、別にドコモを叩こうという意図はありません。おそらくauでもソフトバンクでも似たようなもんでしょう。
高校生の子たちのコミュニケーションがパケット消費ありきで成り立っているのに、いつまでこういう料金制度なのかなぁと思いました。
こないだauが景気良く発表した「ガンガンメール」とかいうやつだって、結局SNSとか使うぶんのパケットは定額コース行きな訳でしょう。なんだかなー。
最近のツッコミ
参号館 日記(ariyasacca)
Before...
▼ 雷悶 [そいえば.NETの本は一冊も読んだことがなかったです。いろいろとお作法を間違えたままになってないか心配になってきたお..]
▼ rancor [28歳の誕生日、おめでとうございます!]
▼ 雷悶 [ありがとうございます!]
▼ 店長やまもち [あらおめでとん!なんかゲームやろうぜ!(ワシも特にやっていない)]
▼ 雷悶 [ありがとうございます! 来年こそゲームやるぜ!(今年はあきらめた)]