SyntaxHighlighter

2011年12月25日日曜日

アフター野郎ライブ

そういや、終了後書いてなかったなー

ライブ終了 → 全裸 → 外へ出る → ホテルへ

あ、違った。そうじゃない

ライブ終了 → 上半身裸 → 迷惑かけたらあかんので渋々濡れTシャツを着る → 外へ出るとちょうどいい気温 → そのままホテルの自室へ

いやー、濡れたTシャツが火照る体から体温を奪ってくれて、冬の品川は(Tシャツ一枚で)とても過ごしやすかったデス!

んで、自室に戻るエレベーターでカップルと遭遇。
うわぁ。。。ドン引かれてるよぉ・・・むしろもっとドン引け!! てな勢いで同席?しつつ、エレベーターのボタンをみると、あれ?同じ階やん。

んで到着。いい人ぶってドン引き解消を狙う。エレベーターの開くボタンを押しつつ「お先にどうぞ」
ありがとうございます、といってカップルがエレベーターを降りて、続いて自分も降りる・・・あれ?道を塞ぐように二人がいる・・?

 女「うん、もうここでいいよ!」
 男「そっか・・・そうだね。じゃ、じゃあまた・・・」

これ!そこは引いたらアカンでしょう!!!
いやぁ・・・これは流石に同情するわ。

という話を元締さんにしたら、
「ちゃとが原因だねw」
「汗臭い男が乗り込んできたからw」
がふん!俺か!男子すまんかった!生きてりゃいいことあるさ!

んでシャワー浴びて着替えてRevikenさんと元締さんとお食事会をば。
トマト食べて、ハンバーグ食べて。つばめグリルは美味しいね!!!

お食事会の途中で「消臭力を歌ってみたコンテスト」の話に。
明日の25日までだし、今から録ってみる?という流れでホテルの自室へ3人で移動。

まずは一人で録ってみる。ライブあがりにしてはまぁまぁ声が出てるかな?
(やはりというか僕は声がでかいらしい。隣のカップルごめんよ at 22時)
次にRevikenさんと歌ってみたのがこちら



これで応募してみました。
さらにエステーの特命宣伝部長さんから「見た!バカだねー」とお褒めの言葉を頂くw

その後は仕事しつつ、ニコファーレを観戦しながら悶える(何プレイ!?

つか、翌日武道館でUVERやってたんだよねぇ。
行きたいなとは思ってたけど、仕事的には厳しかったのであきらめたんだ。

来年は両方イケルようにがんばろう!
何なら12月は全部休みで・・・w

Strikes Back Ⅸ

行ってきました、野郎ライブ@2011、Strikes Back Ⅸ

書きたいことは山ほどあるんだけど、せやなぁ。。。書くのん難しい。

書けるところから。


T.M.R. LIVE REVOLUTION '11
- Strikes Back IX -


品川のみ参加でした。ニコファーレは落選。PV行こうと思ってたけど、仕事もあったのでホテルで観戦にしました。

品川では一緒に参加するRevikenさんが直前でとっても高血圧に(200近くのときもあったり)
なので、後ろにいると仰るわけで。
とりあえずDEADしてリアル伝説になるとAREなので、しばらくついておこうと考えていました。。。。。

考えてた!ほんとにそう考えてたんだ!!!!

でも、気がついたらほぼセンターの5列目あたりにw
慣れって怖いよね(テヘペロ

たぶんSave The〜が終わるころにはスタンバれてた気がする。

そこからは押したことと押されたことと水が気持ちよかったことと大合唱したこと、
酸素が足りなくなって上むいてパクパクしてみたことくらいか・・・?

あ!兄貴の聖水(口に含んだ水をブハーーーっ)を浴びました!初!
元締さんに話したら「妊娠したね」と言われました。これから十月十日かぁ(しみじみ

あと、アンコールで消臭力を歌い出してみました。でも原キーくらいで始めちゃったんで、
自分も含めてみんな声かすれとるwww
ニコファーレでも誰かやって欲しかったなぁ。。。

そういや、今回マフラーを忘れたんです
仕事もあって前日の睡眠時間は2時間くらい。
とりあえずそのへんのマフラーをひっつかんでいった結果
「09'イヤカン」
「abingdon boys school(黄色いやつ)」
「F.C.Balcerona(バルセロナ直送)」
「Rock of Ages」
・・・野郎のマフラーないやん!!!

しょうがないからRockOfあざっすでいくかーと思ってて、最後のチェイスリになった瞬間
「マフラーがない」
部屋に忘れてきたよオレ。。。orz

よしここは!
ってことで、Tシャツ脱いで上半身裸になって、全力で振り回してやりましたさ。ワハハ。
上半身裸だとある意味兄貴とお揃い!おお!

つか、Tシャツ脱ぐとチョー気持ちいいでやんの。なにこの解放感!
通常ツアーでもやりたいなぁ・・・ドン引きされるな(笑)


内容自体はこんな感じ。
MCでは「来年は10周年だからドカンと〜」「栗原の目処がついたから沖縄の後でいくぞ!」「今まで会社とかで『T.M.Revolutionのファンです』とかいったらドン引きされるかもと思って言えなかったかもしれん。でも安心しろ、お前ら皆がT.M.Revolutionだから!(だから遠慮なくアピっちゃいな!)」
こんなとこかな?
SUNAOさんの来年の抱負は「魂を燃やす」だそうです。gdgdでしたがw
(ニコファーレはバチッとハマってたよね)
途中で「タマしいをもやす」と無理にイントネーションつけて下ネタに持って行こうとして兄貴にツッコまれてましたがw


なんか書くのん難しい、といったのは、今年は泣かなかったんですわ、僕が。

自分の中での野郎ライブは、一年の総決算なんです。
「去年の時点のオレと今日のオレを比べてどうなんか?」
「この一年のオレは戦えたんか?」
そんなことを兄貴との魂のつながり、やりとりのなかで確認するんです。
んで、いろんなことを思い出して、最後に号泣すると。(ラブセかパールが多い)

今年のイナズマでショコたんとの共演で、昨年の野郎ライブを思い出して号泣していたくらいなのに、肝心の野郎ライブでは全く泣かず。

このへんは自分の中でまだ整理中ですわ。
ニコファーレ参加できたら違ったんかな?ラブセ鳴ってたら違ったんかな?今年は体壊したりとかあったけど、概ね戦えたから満足してるんやろか?それとも、ライブ10回近く行ってるから泣きすぎたんかな?
などなど。

まぁなにわともあれ、自分の一年は納会されました。
そして今日から新しい一年が始まります。

今の自分より、もう一つ大きくなった自分に会えるよう、全力で走り抜きたいと思います。

2011年12月17日土曜日

Artwork Gofer が動かなくなった

iTunes on MAC で、アルバム画像を取得するために「Artwork Gofer」ってのを使ってたんです。

ところが、久しぶりに使ってみるとエラーを吐いて全く画像を取得できない・・・

調べてみると公式サイトにこんなことが書いてあった

Note. The application will stop working on or around Oct 25 2011 due to the changes in the Amazon requirements for their API use.
えええ!?2011年10月25日からはAmazonのAPI仕様が変わるから、動かなくなるぜ!・・・だそうで。。なんて清々しいお知らせ・・・

新しいAPIに対応してる別のソフトはないだろうか・・・と調べてみたところ、ありました


ほほーこれは便利!
あ。これはMac用ね。Windowsはどっか別で探してくださいませ。。。

◯インストール方法

  1. 上記サイトのDownloadからZipファイルをダウンロード
  2. 解凍して出てきたAppファイルをApplicationフォルダに移動


◯使い方

  1. AAAを起動
  2. iTunesでアルバム画像を取得したい曲を選択
  3. AAA側で「Get Albums」ボタンを押す
  4. なんかいっぱい画像が出てくる
  5. 「Add Immediately」ボタンを押すと反映される


何が便利って、手軽さと曲を一曲選択して検索するだけで、同じアルバムが一括で設定できること。

これはいいソフトだなー(*´ω`*)

2011年11月27日日曜日

野郎ライブ一ヶ月前講座。

はーい、全国2億5千万人のTMR野郎ファンの皆さん、お元気ですか!
今年も約束の日がやってきますよ〜!一日千秋!

T.M.R. LIVE REVOLUTION '11
- Strikes Back IX -

今年から新入学のピッカピカの一年生がいるかもですので(3年目の若輩者ですが)経験則からイロイロ書いてみますね。

ちなみに野郎ライブはりびけんさんの言葉を借りる
「男たちが満員電車の中で踊りまくってる」
というシチュエーションをそのまま再現しています。再現?

◯持ち物
  • 500円(1ドリンクで500円払う必要アリ)
  • ビニールの雨ガッパ(寒さ対策。100均で売ってる薄いのん。又はゴミ袋)
  • タオル(ツアータオルとか。チェイスリ用)
  • ロンT(他人の汗をもれなく浴びるので)
  • 硬い靴(柔らかい靴だと足裏が痛くなりました。。。)
  • メガネ用紐(メガネ必須の人は紐を!メガネ自体をつけないほうがいいけど)
  • 水500mlペットボトル
  • 熱い魂(プライスレス)

メガネは正直やめといたほうがいいだろうなぁ。。。
野郎ライブの特徴として、前後左右に3mくらい一気に動いたりします。
コケたら2秒たたないうちに周りが引っ張り上げてくれますが、何か落としてもまず見つかりません
まぁ昨年の下北沢ではライブ中にコンタクト落としたやつがいて、数人でそいつがコンタクト探すスペース確保したら見事見つかる奇跡がありましたけども。

最後列とかだと壁もあるのでゆっくり?みれますが、年に一度の頭おかしいライブ(笑)で「眺めてるだけ」とかもったいない!!踊らにゃそんそん!です。前の方にいれば、洋楽メタルもビックリなハードなライブを経験できますw

あとダイブしまくりです。
ごつい人は背中登られるので覚悟しとこうね。
他の人も頭の上に人が流れてくるのは日常茶飯事なので蹴られても泣かない!

あ。水ペットボトル500mlは、ジーンズとかのケツポケットに意外に入ります。
ただ、男達の圧力による爆発の可能性もあるので、ジュースとかは避けたほうがいいな。リスクマネージメントです。
(水分ないと死ねますのでなるべく持ってたほうが吉)
え?天井からの滴る水分を飲めばいいんじゃないかって?
それ、俺たちの気化した汗だから!!!


◯開場前
  • 手には500円を握りしめておきましょう
  • 大体30分〜1時間くらい待つことになります「冬の寒空にTシャツ1枚で」ね。
  • 待ってる間は死ねます。昨年は低体温症で倒れるかと思った・・・なので、100均などでビニールの雨ガッパ(薄いやつ)を用意しましょう。一枚羽織るだけで生命の危機を回避できます(家族フェス10とイナズマ11で経験済み)最悪ゴミ袋に穴を開けてかぶっても同じ効果が得られると思いますが、勇者と呼ばれるかも?
  • 昨年のパターンでいくと、入り口近くは500番までが並び、坂の上にある駐車場で残りの1000人が管理されます。500より上の番号なのに入り口近くに並んじゃうと悲しい思いをするので気をつけようw
  • ホテルから見つめられることが多々あるので、気がついたらみんなで手を振ろう(笑)
  • 入場が始まると、先頭の人達はお約束で、でっかい声で返事して入っていきます。そしてほとんど怒られます。でもこれもライブの一環w


◯中にはいったら
  • 入り口は静かにね!昨年は水族館のお魚たちがブルブル震えてたとか震えてなかったとか。。。水族館と映画館の入り口がほぼ共用みたいな状態で、カップルどもから熱いまなざしを頂いてしまいますが、むしろ「君たち、うらやましいだろう!」と強い信念で乗り切ってください
  • コインロッカー的なものがありますが、100個くらい?しかないので、当てにすると痛い目みるかも。電車組は駅のロッカーとか考えたほうがいいかも?僕は大阪から参加する関係でホテルに部屋をとりました。夜行で帰ると多分死んでしまう年齢なもので。。
  • 開始前に注意事項アナウンスがあります(サポメンがやってくれたりします。柴崎さんがやってたときもあった気が)全てにおいて「はーい!」と元気よく答えましょう!
  • 待ち切れない男たちはコールを始めるハズ。恥も外聞も投げ捨てて、「どんなコールでも」叫んでいこう!どんなコールかって?・・・ここでは書けないような内容ですわ
  • 一個だけ気に入らない点があって、コールの最後が感覚があわん。。関西的にはペースあげていって「うぉーーーうぉい!うぉい!うぉい!」みたいにスパッと締めるんだけど、関東式?なのか「うぉーーー・・・ひゅ〜〜〜」ひゅー!?なぜ!となります。でも郷に入れば郷に従えかなぁ。。はうぁ
  • スパイダーマンかサンタが来ると妙にテンションがあがります。甲子園のマウンドで優勝しているような騒ぎがおこったら、どっちか来たってことかも

◯ライブ中
  • 一曲目はほぼ間違いなく「Ultimate」!しっかり覚えていこう!(昨年の第二部は違ったけど)
  • 途中でMaster Feel Sadもあるぜ!こっちも覚えていこう!んで、直後にJudasとか洋楽のカバーが来るので、わからなくても頭振ろう!ノッたもん勝ち!
  • ペットボトルが飛んでくるので、直撃注意(2年前に2L当たって痛かった・・・)
  • ペットボトルをキャッチしたら、蓋をあけて周りに撒いてあげましょう
  • 酸素?なにそれうまいのか?
  • 快適?天井から俺たちの汗が滴ってきますが何か?
  • だんだん会場は白い霧がかってきます。俺たちの汗で。
  • 途中で倒れそうな人は、「すみません」と言いながら後ろか横にいけば皆が「頑張れー!また帰ってこいよー!」って言ってモーゼの十戒のように道ができますので、端っこで横になって休んでおきましょう。復活したら帰ってこいよ!
  • めっちゃモッシュしてくる人がいますが、デフォなので気にしちゃダメ。体あてまくってこそです。むしろ押しくらまんじゅう返し!
  • 前のやつがデカクてみえない??? 考えるな、感じろ!感じれなければ前へいけ!弱肉強食だ!
  • たまーのたまに。ほんと奇跡のようにたまーに、兄貴がダイブすることがありますが、優しく受け止めて優しくステージにお返ししましょう。踊り子さんに手をふれないでください!!!
  • 兄貴に対して「抱いてーーー!」はデフォです。細かいこと気にしない!中にはガチで発言してる人もいるんだろうけど・・・
  • 「抱いてーーー!」を通常ツアーで叫ぶと、周りの女子にドン引きされます。発言はTPOをわきまえてw
  • だいたい3時間くらいやります。マラソンみたいなものだから、飛ばしたら適度に休むんだぞ!最初から最後までイケルなら問題ないけど、死ぬな!!!
  • ラブセかかり始めたら仕上げに入りかけてます。もしくはラストだったりします。全力で叫べ!!!
  • アンコールは死ぬ気でやらんと帰ってこない可能性があります。そんじょそこらの日本アーティストとは違って、そのへんは洋楽バンドのノリです。ガチアンコールでこそ出てきたときの喜び!
  • 昨年「おみずをください」アンコールが確立されました。隣のやつが突然「お・み・ず・を・く・だ・さ・い!」と叫んで悪ノリして一緒に叫んだら、全員に伝播、兄貴登場で「おみずをくださいとかアンコールで聞いたことねぇよ!(笑)」とお褒めの言葉を頂きました。テンポは160〜180bpm程度で、「おみずを」で4拍一小節くらい。
  • でも、西川先生・・・お水が飲みたかったんです・・・
  • チェイスリが永遠に続いてるような気がしますが気のせいです。20分くらいチェイスリじゃなかった?と言っていた人もいましたが、気のせいです。心を強くもちましょう
  • スパイダーマンが端っこで酸欠で倒れている場合がありますが、デフォです。しかし彼は必ず帰ってきます。ヒーローですから!!!


◯終演後

  • あちこちでお互いの健闘をたたえているハズ。君も讃えられちゃおう!
  • 胴上げだったり抱き合ったり、ハイタッチだったり。ラテン系の香りが溢れています、ええ。
  • 外に出ると「あれ?今って夏だっけ?全然寒くないんだけど?」と思いますが、体温が急上昇しているだけです。気を抜くと死ぬぞ!!
  • 外で着替えない!あと入り口とかで着替えない!・・・え?どこで着替えるのかって?・・・2年前はそのまま山手線に乗ったなぁ。。。まぁそのへんです。そのへん。考えるな!感じろ!
  • 外に出ると女子たちがなぜか待ち構えています。彼女たちは妖精さんです。おそらく尋問を受けるハズですが、素直に回答しましょうw
  • 外に出た同志達をみれば、人間の頭から湯気があがる現象をよく観察できるハズ
  • 若い奴らはそのままカラオケに行ったりします。俺もちょっと行きたいかも!?
  • 体が温かい間に着替えておこう!ガチで死にます。昨年の下北沢後、3度前後の真冬の空を駐車場まで5分歩いただけで死にそうな思いをしました。

こんなとこかなぁ。。。質問あったらコメントに書いてもらえれば返事します。ツイッターでもいいよ。

そうそう。第一回から皆勤賞の方が書いているこちらのブログも合わせて読んでください。
野郎ライブから生きて帰ってくるための方法が載ってますから!
去年のレポートもありますよ

去年か・・・ファミレスのスープって、生命を救うよね。温かいスープバンザイ!

それでは、クリスマスイブに品川でお会いしましょう!!

☆追記☆
写真が出てきたのでおいときます。

1,グッズに並んでる様子。本番前は全員Tシャツ一枚に早変わり!

2,ステラボールの入り口。左がグッズ売り場、右手がクロークです。奥の扉が会場入口ね

3,今回はありませんが、昨年(2010)の下北沢での待合の様子。地下室は暖かかった!

2011年11月21日月曜日

フットサルで著作権侵害だそーで。

久しぶりにYouTubeにアクセスすると、「あなたの動画は著作権侵害のため削除されました」という画面が表示されました。

いったい何が起きたのか?と思いながら案内を進めていくと、著作権侵害の対象となったのは「一般人によるフットサル動画」

申立人は Sony Music Entertainment Japan です
該当のコンテンツページはこうなりました
http://www.youtube.com/copynotice?video_id=Gutl595izK4

対象となった動画は下の動画のひとつ前の試合です。


もしかしたら、施設で鳴っていたBGMが対象なのか・・・?

もし、そうだとしたら、甚だ遺憾です。

動画みれば侵害しようとしてるかどうか一目瞭然やんけと。

フットサルにみせかけて音楽を配信しようとしてるなら、もっといい音質で流すっちゅーねん。アホか。担当者でてこいよ?

とりあえずこのままだと私のYouTubeアカウントに×がついたままなので(ある意味前科者ですわ)異議申立てしました。内容はこんな感じです

削除された動画008 1(Gutl595izK4)は2011年4月18日に兵庫県尼崎市の尼崎スポーツの森フットサルパークにて、友人チーム「****」の活動に参加した際に撮影したものです。 映像の内容を確認して頂ければわかる通り、一般人によるフットサルでしかありません。 これをもって著作権侵害の申立を行われ、私のYouTubeアカウントでの信頼を傷つけられることは甚だ遺憾であります。 今回の申立に至った経緯を詳しくご連絡ください。 ご連絡頂けない場合、名誉毀損などの法的な措置も辞しません。

(チーム名はブログでは伏せました)

ブチギレながら書いた文章なんで、アレですが。

はぁ・・・誰や。SMEの担当は。ほんま馬鹿か。

とりあえずこんなんでバンバン削除されてたら、なんでもかんでも著作権侵害ですわ。
鼻歌うたった瞬間にJASRACきたりするんちゃう?


◯追記
そうそう。この日の動画はYouTubeにアップロードした後に手元は削除したので、YouTube上で消されると完全に失われてしまいます。
間違いなく、明確に著作権侵害のコンテンツならばあきらめもつきます。
しかし、内容はフットサルですよ?しかも一般人の。

Sony Music Entertainment Japan 様におかれましては、適切な対応をお願いしたいと考えています。

2011年11月17日木曜日

iPhone4s (au) で ezweb メールをプッシュ通知で受け取る設定 from 2ch

これは2ちゃんねるに書いてあった方法を自分で試して、備忘録として残すものです。

1. ezweb.ne.jpとme.comのアドレスを取得
2. ezweb.ne.jpの自動転送先にme.comのアドレスを追加
3. 設定>メール/連絡先/カレンダー>アカウントを追加…>その他
4. 1.で取得したezwebのアドレスを設定
5. エラーになるはずなので、受信メールサーバのホスト名「imap.mail.me.com」に変える
6. 受信サーバのユーザ名とパスワードは自分のAppleID(me.comのユーザ名とパスワード)
7. 送信メールサーバは「smtp.ezweb.ne.jp」を設定し、ezweb設定時に取得したユーザ名とパスワードを記述する

この設定を行うまでは、ezwebとiCloudの2アカウントで2通受け取っていたのですが、1通にまとめる&そのまま返信してもezwebアドレスで返信できるようになりました。

先人の知恵に感謝!!!


2011年10月8日土曜日

GAE/Jにてインデックスエラーでデプロイが失敗する場合の対処など


この記事は、下記の素晴らしい記事について、MAC環境での補足を行うものです。

GAE/J使いのためのインデックス削除ツール(y-kawazの日記)
http://d.hatena.ne.jp/y-kawaz/20100416/1271401890


MACの場合は

  1. http://code.google.com/intl/ja/appengine/downloads.html の「GoogleAppEngineLauncher-1.5.4.dmg」をダウンロード、マウントします。
  2. 中にある「GoogleAppEngineLauncher.app」をアプリケーションフォルダに移動
  3. 起動してメニューから「GoogleAppEngineLauncher」ー「Make Symlinks」で「/usr/local/bin」にappcfg.pyのエイリアス?を作成します。
  4. 適当な名前のディレクトリを作成し、その中に「app.yaml」ファイルを作成
  5. 「app.yaml」ファイルの中身はy-kawazさんとこの記事を参照
  6. 「appcfg.py vacuum_indexes 4のディレクトリ」をシェルから打って実行


以上でリンク先と同じように各インデックスのメンテについて聞いてきます。

ありがちなのは、カスタムインデックスが必要なクエリを書いており、ローカルではAutoGenerateのインデックスが効いているのだけれど、自分で定義するインデックス用XMLファイルに記述を写していない場合などです。
(500〜ってなエラーが出ると思います)

そんな場合は、

  1. インデックス削除
  2. カスタムインデックスファイルに記述を追加(Auto〜から移動ですね)
  3. (インデックス一覧からDeletingが消えてから)再度デプロイ

最後の再度デプロイはDeleting中でも一応いけましたが、念のためDeletingが消えてからのデプロイをオススメします。
インデックス削除は上記のケースでひとつだけ消した場合で2〜3分程度で終わりました。

2011年9月7日水曜日

Google Libraries API での書き方

Google Libraries API なんてのがあるんですね。
しかもバージョンを「1」と書いておけば1系の最新がリンクできるという・・・
(1.6と書けば1.6系の最新が取得できる)

開発者向けガイドはこちら(英語)

以下ポイント
  • JQueryを呼ぶだけならAPI Keyは指定しなくてもよい
  • jsapiのリンクを書くときは、typeが先に来てないと全く読み込んでくれない(常識??)
  • google.loadで呼ぶ場合は「google.setOnLoadCallback」で括ってやる必要がある
  • google.load使わないなら
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
    または
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js"></script>
    と書ける


type が先にこないといけない件
×ダメ
<script src="https://www.google.com/jsapi" type="text/javascript"></script>
◯OK
<script type="text/javascript" src="https://www.google.com/jsapi"></script>

実際に書くとこんな感じ

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<title>Google Librries API お試し</title>

<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript">

google.load("jquery", "1");
google.setOnLoadCallback(function()
{
  $(function() {
  	//hoge
  });

  //試しにバージョン表示
  alert($.fn.jquery);

});

</script>

</head>
<body>
  <p>contens</p>
</body>
</html>

いろんなライブラリを使うなら、いちいちgoogle.setOnLoadCallbackで括ってられないと思うので、load使わない下記の書き方のほうがいいかも。


<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script type="text/javascript">

  $(function() {
  	//hoge
  });

  //試しにバージョン表示
  alert($.fn.jquery);

</script>

2011年9月3日土曜日

今さらながら?改めて? AKG K420

久しぶりにK420を引っ張り出して聞いてみたわけです。

いやぁ・・・これ、こんな音良かったっけ!?ってくらいの感動!
やっぱり開放型は気持ちいいなぁ、ってのと、K420自体がイージー・リスニングにメッチャ向いてる気がする。
※解像度は高いけど、低音がそれなりに味付けされてる感じでモニタには向いてないかな?

音漏れOKな環境で音楽を楽しむのなら、1万円以下のベストバイはK420じゃない?
サウンドハウスとかで5000円切ってるし。コストパフォーマンス最高!

・・・と書いてはみたものの、外でヘッドホン使う人は音漏れ気にするし(電車とか)、自宅でヘッドホン使う人は音漏れOKではないシチュエーションが多そうだし。
スピーカーは高いから、ヘッドホンで高音質を!っていう層はどれくらいいるんだろう・・・?

興味のある人はヨドバシとかe☆イヤホンとかで試聴してみてくださいな


〜追記〜
T.M.Revolutionのcrosswise鳴らしたらシャリつき酷かった(汗
まぁ曲自体が元々後ろでキンキン鳴ってはいるのでどんなヘッドホンでもシャリシャリいうけれど。(esw9とかでも結構シャリついた。UEのSuperFi.5はそうでもない)

2011年8月16日火曜日

GAE, Slim3, Scenic3 環境下でAjaxなBlobstore利用

検証コード書いてちゃんと動作したので備忘録的な感じで。
後日丁寧に書く予定。とりあえず箇条書き

前提
・jQuery.upload利用
・コントローラ側は「アップロードURL返す」「Blobstoreアップロードからの戻り直後」「戻り直後からリダイレクトされJSON生成」の3段階用意


1,アップロードボタン押す
2,UploadUrlリクエスト、Jsonで取得しそのままアップロード
3,戻りURLをコントローラを指定しておいて、そこに戻す。そのタイミングではRedirectでなければ戻せない約束事なので一旦別のコントローラにリダイレクト(画像URLを一緒に渡す)
4,別のコントローラは画像URLをJSON化してクライアントに戻す
5,クライアントはAJAXな動きでBLOBSTOREを利用することができる


リクエスト用HTML&JavaScript
<!--
BlobStore直接アップロード検証コード
 -->

<script type = "text/javascript" src="/jquery.upload-1.0.2.js"></script>
<input type="file" name="newprofileimage" id="newprofileimage" />
<input type="button" name="entry" value="登録" onclick='javascript:submitUpload("newprofileimage");' />
<br />
<br />

<script type="text/javascript">
function submitUpload(targetid)
{
 var jsonUrl = "/image/getdirectupdurl";
 var uploadurl = "";

 $.getJSON(jsonUrl, function(urldata) {

  if(urldata)
  {
   uploadurl = urldata.url;

   $('#' + targetid ).upload(
    uploadurl,
	function(data)
	{
	 alert('File uploaded[' + data[0].imageurl + ']');
	 $('#imagearea').html('<img src="' + data[0].imageurl +  '" />');
	},
	'json'
   );
   }
  });
}
</script>

<div id="imagearea">アップロード後の画像が表示される場所</div>

サーバサイドコード
/**
 * BlobStoreへの直接アップロード用URLを取得する.
 * JSON形式にて返す
 * @return
 */
@ActionPath("getdirectupdurl")
public Navigation getDirectUploadUrl()
{
 Navigation nav = null;

 String returnUrl = "/image/dupdcomplete";
 String uploadUrl = service.createUploadUrl(returnUrl); //BlobstoreServiceのcreateUploadUrlを呼び出している

 Map<String,String> jsonData = new HashMap<String,String>();
 jsonData.put("url", uploadUrl);

 try
 {
  nav = this.responseJson(jsonData);
 }
 catch (IOException e)
 {
  e.printStackTrace();
  nav = this.redirect("errorurl");
 }

 return nav;
}


/**
 * Blobstoreに直接アップロードした後、リダイレクトされる場所
 * @param blobUrl
 * @return
 */
@ActionPath("dupdcomplete")
public Navigation directUploadComplete()
{
 Navigation nav = null;

 BlobKey blobKey = service.getBlobKey(request, "newprofileimage");

 nav = this.redirect( "/image/dupdrd?bloburl=" + service.getServingUrl(blobKey));

 return nav;
}

/**
 * Blobstoreに直接アップロードした後リダイレクトされたものをさらにリダイレクトされる場所.
 * @param blobUrl
 * @return
 */
@ActionPath("dupdrd")
public Navigation forDirectUploadRedirect(
  @RequestParam("bloburl") String blobUrl
)
{
 Navigation nav = null;

 if(blobUrl != null && blobUrl.isEmpty() == false )
 {
  List<Map<String,String>> jsonDataList = new ArrayList<Map<String,String>>();

  Map<String,String> jsonData = new HashMap<String,String>();
  jsonData.put("imageurl", blobUrl);
  jsonDataList.add(jsonData);

  try
  {
   nav = this.responseForImageJson(jsonDataList);//この前のエントリの内容
  }
  catch (IOException e)
  {
   e.printStackTrace();
  }
 }

 return nav;
}

2011年8月15日月曜日

GAE/J Slim3でScenic環境下でjQuery uploadを利用&Jsonで戻りデータ取得

結論からいいますと、やっつけデス。。。
コードはかなり美しさにかけて、めっちゃ遅いんちゃう!?くらいの勢いですがとりあえず動きます。

ポイント。

  • jQuery.uploadはjsonでリクエストした際、iframeを利用してシームレスなアップロードを実現するためJsonデータが戻ってくる際のContentTypeが「text/html」でないと<pre>タグがついてしまってうまく処理できない
  • Scenic側でNavigationオブジェクトを渡す際、responseJsonで渡すと強制的に「text/JavaScript」になってしまう

そらそうや、ってお話です。JSONですし。
responseJsonした後にContentTypeを強制的に変えれればなんとかなりそうだったんですが、全く変えれず。。。setContentTypeは意味をなさない。
responseJsonしたあとにキャッシュ的なんと_out〜とかいう変数に1が入ってるのがポイントなんじゃろか?

response( String ) でJson文字列を自分で作って渡してやればいいんじゃないか!?と思いましたが、強制的に「text/Plain」になりました。

結果、responseDirect( byte[], String(=ContentType) ) を使うことにしました。
以下、ざっくり手順を。


  1. まず、StringBufferなどでJSON文字列を作成します。
  2. 次にStringBuffer.toString.toCharArrayでchar[]配列を取り出します
  3. char[]配列の長さでbyte[]配列を作成
  4. ひたすらchar[]配列をループして1つずつbyte[]配列にコピー!!!(これなんかええのんないかなー?)
  5. 最後にresponseDirectに渡してやって完了。

あ、ContentTypeは「"text/html; charset=UTF-8"」みたいな感じで。

とりあえず動きました。ええ、とりあえず。。。

まぁここの部分はファイルアップロードで1個画像を扱うだけなんで、もういいかな?とも思ったり。
まぁ後で時間できたときに見直しですねぇ。今は動けばいいや(涙

2011年8月9日火曜日

GAE/J デプロイにて 409 conflict が出た場合の対処

本日のGAEの障害?(19時〜のやつ)のタイミングでデプロイしてまして、その時は結局デプロイできなかったので数時間経ってから再度デプロイを行いました。
すると、失敗した時の何かが残っていたのか
「Unable to update app:〜ほにゃらら〜409 Conflict」
と表示されました。
これの対処について備忘録もかねて記述しておきます

メッセージには
「Another transaction by user〜」
と出ており
「That user can undo the transaction with "appcfg rollback".」
てなメッセージが出ていました。

調べてみると、コマンドラインから上記コマンドを実行してやればよいようです


machine:~ hoge$ cd /Applications/eclipse/plugins/com.google.appengine.eclipse.sdkbundle_1.5.2.r36v201107221751/appengine-java-sdk-1.5.2/bin/
machine:bin hoge$ ls -al
total 32
drwxr-xr-x   6 hoge  hoge  204  8  2 07:27 .
drwxr-xr-x  14 hoge  hoge  476  8  2 07:27 ..
-rw-r--r--   1 hoge  hoge  276  7 22 15:02 appcfg.cmd
-rw-r--r--   1 hoge  hoge  582  7 22 15:02 appcfg.sh
-rw-r--r--   1 hoge  hoge  368  7 22 15:02 dev_appserver.cmd
-rw-r--r--   1 hoge  hoge  670  7 22 15:02 dev_appserver.sh

なんかそれっぽいのがいました。実行権限を付与して、実行してみる
machine:bin hoge$ ./appcfg.sh rollback /myproject/war/
Reading application configuration data...
2011/08/09 22:26:06 com.google.apphosting.utils.config.AppEngineWebXmlReader readAppEngineWebXml
####: Successfully processed /myproject/war/WEB-INF/appengine-web.xml
2011/08/09 22:26:06 com.google.apphosting.utils.config.AbstractConfigXmlReader readConfigXml
####: Successfully processed /myproject/war/WEB-INF/web.xml
2011/08/09 22:26:06 com.google.apphosting.utils.config.AbstractConfigXmlReader readConfigXml
####: Successfully processed /myproject/war/WEB-INF/cron.xml
2011/08/09 22:26:06 com.google.apphosting.utils.config.AbstractConfigXmlReader readConfigXml
####: Successfully processed /myproject/war/WEB-INF/queue.xml
2011/08/09 22:26:06 com.google.apphosting.utils.config.IndexesXmlReader readConfigXml
####: Successfully processed /myproject/war/WEB-INF/appengine-generated/datastore-indexes-auto.xml
Beginning server interaction for myproject...
0%  on backend null.
Email: *****@gmail.com
Password for *****@gmail.com: *****
Success.
Cleaning up temporary files...
machine:bin hoge$ 

EmailとPasswordはデプロイする権限のあるユーザを入力しました
この後、通常通りにデプロイすることでデプロイが完了しました

2011年8月7日日曜日

INFOBARの飛散防止フィルムを剥がしてみた

INFOBAR買ったんです。

んで、しばらく裸で使ってたんですが、なんか滑りが悪いというか。。。

んでシャープ機で飛散防止フィルム剥がしたら滑りが良くなった的な書き込みをみたのでレッツチャレンジ。
iPhoneも他のスマートフォンも裸運用なので気にしない!




端っこをコンパスの針でガリガリやって、無理やりチョっぴり剥がせるようにして、あとは指でジワジワと。
多少しっかり貼りついているフィルムって感じで、剥がした後はすこし粘着感。

ウェットティッシュで拭いて、トレシーでガッツリ拭いてやるととってもスッキリしました

剥がした後の操作感は・・・ああ、気持ちいい。
これでやっとiPhoneの裸ガラスと同じ滑り感。




ただ、裏のプロセスが重い時は滑りがよくても操作がついてきません

心なしか発色もフィルム無しだけにキレイになったような?
つか、海外モデルは飛散防止フィルムなんて貼ってないよね。心配性な日本人の姿勢が製品に現れてるんかなぁ。。。




保障がなくなるかも?ってことなので、自己責任で!

2011年7月12日火曜日

【備忘録】gitでローカル・リモートブランチの削除(Assembla)

最近備忘録ばかりですが、後で助かるんですよね。
※あの時のオレは別人的な
※そういやポタアンその後も書かないと・・・汗


gitでローカルブランチ・リモートブランチを削除する方法です。

まず、GUIでGitboxを利用していますが、それらしいコマンドがありませんでした。

しかたないので、MacOSXでこのへんからDMGファイルを落としてきて、コマンドラインから作業しました。
あ。x86-64をダウンロードしています(MacBookAir、OSX10.6.8)

リポジトリのディレクトリへ移動
$ cd /dev/sources/project/

ブランチ一覧を表示
$ git branch -a
  master
* origin
  remotes/Assembla/master
  remotes/Assembla/origin

今回はoriginだけを残したいので、その他を削除
ローカル「master」を削除
$ git branch -D master
Deleted branch master (was e61420b).

一覧を表示して確認してみる(ローカルmasterが消えている)
$ git branch -a
* origin
  remotes/Assembla/master
  remotes/Assembla/origin

リモートのmasterを削除する
$ git push Assembla :master

warning: Deleting the current branch can cause confusion by making the next
warning: 'git clone' not check out any file.
warning: 
warning: You can set 'receive.denyDeleteCurrent' configuration variable to
warning: 'refuse' in the remote repository to disallow deleting the current
warning: branch.
warning: 
warning: You can set it to 'ignore' to allow such a delete without a warning.
warning: 
warning: To make this warning message less loud, you can set it to 'warn'.
warning: 
warning: Note that the default will change in a future version of git
warning: to refuse deleting the current branch unless you have the
warning: configuration variable set to either 'ignore' or 'warn'.
warning: deleting the current branch

To git@git.assembla.com:プロジェクト名
 - [deleted]         master

一覧を表示すると、リモートも削除できている
$ git branch -a
* origin
  remotes/Assembla/origin

ほんとはmasterを消すのはよくないかも?
まぁ今回はoriginを中心に残したかったってことで。

2011年7月7日木曜日

【備忘録】Slim3のModelRefでクエリ

ModelRefで問い合わせしたいなーと思い、ネットの海を彷徨ってみつけた情報。
とってもこれ貴重やわぁ。。。助かります。

そんなわけで備忘録。

参考サイト:ふじやん雑記帳さん
※中断から下あたりにある「ModelRefで問い合わせ」

ModelRefで問い合わせ

  • ModelRefAttributeMetaを使えば、ModelRefで問い合わせが可能
  • 例えば、部署(1)対従業員(多)の場合、
// 部署
@Model(schemaVersion = 1)
public class Dept implements Serializable {
}

// 従業員
@Model(schemaVersion = 1)
public class Employee implements Serializable {
    private ModelRef<dept> deptRef = new ModelRef<dept>(Dept.class);
    
    public ModelRef<dept> getDeptRef() {
        return deptRef;
    }
}
とある場合に、「ある部署に所属する従業員全員」という問い合わせは下記のコードで可能。
Key deptKey = [ある部署のKey];

EmployeeMeta employeeMeta = new EmployeeMeta();
ModelRefAttributeMeta<employee, ModelRef<Dept>, Dept> refMeta = employeeMeta.deptRef;
List<employee> list = Datastore.query(Employee.class).filter(refMeta.equal(deptKey));
  • これを使えば、親子関連を持たせたい場合に、entityGroupを使わなくても良い。

2011年6月19日日曜日

VARDIA S-303でリモコンが効かない




ブログ移転先の同記事へ 0 秒後にジャンプします。



自動的にジャンプしない場合は、こちらをクリック




2011年6月16日木曜日

iPod nano 6th で「ok to disconnect」が出た場合




ブログ移転先の同記事へ 0 秒後にジャンプします。



自動的にジャンプしない場合は、こちらをクリック




エネループ充電器TGR01

我が家では単4電池をよく使うため、TGR01という単4電池を4本同時充電できるモノを使っています

普段はこうやって2本充電していたのですが・・・


どうやら、これでは宝の持ち腐れだそうです

このTGR01という充電器は2倍速充電、3倍速充電に対応してるんですって!!

2倍速したいときー


端っこに2本指すと2倍速充電です


そして3倍速充電したいときは


端っこに1本だけ指すと。

通常120分くらいかかる充電が60~70分、3倍速なら40分程度で充電できちゃうそーです。

いやほんと、宝の持ち腐れだ(苦笑)

そういや、ついでにテスターで電圧を測ってみました
普通の乾電池・・・1.5vちょい
エネループ単4満充電・・・1.28v
エネループ単4ほぼ空・・・1.1vくらい
エネループ単3半年放置・・・1.22v

単4は使い切れてないかも?
単3の電圧の落ちてない度がスゲー!


--
from blogPress at iPhone

2011年6月15日水曜日

備忘録:Slim3でのデータストア暗号化IFについて

備忘録です。

Slim3のモデル暗号化についての内容です。

※ハマっちゃいました。filterの書き方大事。
    ☓ MyModel userData = Datastore.query(t)
          .filter("myname", FilterOperator.EQUAL, "hoge").asSingle();
    ◯ MyModel userData = Datastore.query(t)
          .filter( t.myname.equal("hoge")).asSingle();
なんでオレ、上の書き方してたんやろ・・・


以下、Slim3公式の説明より引用

元となったディスカッションはこちら
http://groups.google.com/group/slim3-user-japan/browse_thread/thread/4999dfd7553c5f38?pli=1

Cipher Text

https://sites.google.com/site/slim3appengine/slim3-datastore/defining-data-classes/cipher-text

個人情報や機密情報を安全に扱うために暗号化をする必要がある場合があります。Slim3は暗号化機能をサポートしています。暗号化アルゴリズムと対象のフィールド型は次の通りです:

  • アルゴリズム: AES (Advanced Encryption Standard)
  • 暗号利用モード(Block cipher mode): CBC (Cipher Block Chaining)
  • 暗号鍵: 128bit (192 bit と 256bit はサポートしていません)
  • フィールド型: java.lang.String, com.google.appengine.api.datastore.Text

Slim3でBigtableのデータを暗号化するのはとても簡単です:

  1. 対象のフィールドに @Attribute(cipher = true) アノテーションを使用します。
  2. 暗号鍵をSlim3 Datastoreに設定します。
  3. Slim3 Datastoreを使用した操作をします。

モデル定義の例です:

@Attribute(cipher=true) private String myString; @Attribute(cipher=true, lob=true) private String myLobString; @Attribute(cipher=true) private Text myText;

暗号鍵を設定する例です:

Datastore.setLimitedCipherKey("hogehogehogehoge"); Datastore.setGlobalCipherKey("hogehogehogehoge");

setLimitedCipherKeyは、スレッドローカルの暗号鍵を設定します。その鍵は現在のスレッド内の暗号化・復号化で使用されます。

FrontControllerは各コントローラを呼び出した後に暗号鍵をクリアします。このメソッド(setLimitedCipherKey)はコントローラー毎に異なる暗号鍵を使用する場合を想定しています。

setGlobalCipherKeyは暗号鍵をスタティック領域に設定します。その鍵は全てのスレッドで使用されます。FrontControllerはsetGlobalCipherKeyメソッドで設定された暗号鍵はクリアしません。このメソッドはシステム内で固定の暗号鍵を使用する場合を想定しています。

LimitedCipherKeyの方がGlobalCipherKeyよりも優先されます。さらに両方の値が未設定の場合、例外がスローされます。128bit(16文字)の暗号鍵を設定してください。

GlobalCipherKeyの値は appengine-web.xml で指定できます:

<system-properties>  <property name="slim3.cipherGlobalKey" value="hogehogehogehoge"/> </system-properties>

暗号化と復号化は自動的に行われます。

暗号化フィールドに対して、インメモリのフィルタとソートは全てサポートされています。

暗号化フィールドに対するデータストアクエリのフィルタには制限があります。以下のフィルタがサポートされています:

  • EqualCriterion
  • IsNotNullCriterion
  • NotEqualCriterion

データストアクエリのソートはサポートされていません。

2011年6月13日月曜日

備忘録:Scenic3でのJSON利用

備忘録です。

Scenic3では「ScenicPage.responseJson」を呼び出すことで、データをJSONとして返すことができます。

ただ、環境がそのままではエラーになってしまうので、「JSONIC」を入れてやります

  1. サイトからZipファイルをダウンロードします
  2. 解凍してあらわれた「jsonic-*.*.*.jar」を「war/lib/」「war/WEB-INF/lib」に配置します
  3. ビルドパスに「jsonic-*.*.*.jar」を追加します
※7/20修正

以上で「ScenicPage.responseJson」を使う環境が整います。
※ほんとSlim3+Scenic3はラクチン

今回動作確認した環境
  • Slim3:1.0.11
  • Scenic3:0.4.2
  • JSONIC:1.2.5

備忘録:GAEのローカルでの管理コンソール

備忘録。GAEはEclipseなどでローカルデバッグができます。
この際の、DataStoreなどをあれやこれやするための管理コンソールは
http://localhost:8888/_ah/admin/
にアクセスすればOK

あ。
Scenic3使ってたりする場合は、AppUrlsに
excludes("/_ah/*");
を書いておくのを忘れないように。

2011年6月12日日曜日

haiga式HPA(Ver1.0)最終形

先日、入力カップリングのところを東信UTSJ50v100μFにしました

・・・が。シャリつきが収まらず。。

推測ですが、カップリング部分の電圧を測ると非常に低い値(正確な値忘れた。。ミリVの単位だったハズ)だったため、耐圧高いコンデンサの修復、いわゆるエージングが進んでないのかなぁと。

あと、電源平滑のコンデンサの電圧を調べてみると、1.26v
1.42掛けた値で1.789、つまり耐圧2.3vくらいあれば大丈夫かな?ってことで、SEPCの2.5v2700μFをいれてみることにしました。

入力カップリングは、耐圧低い方がいいんだろうなぁ?と思ってKZの25v33μFとUTSJの16v100μFを用意してみました



結局、チョイスしたのはKZ。
同じニチコンのFG(FineGold)などはドンシャリ味つけがガッツリついてる感ありますが、KZの色付けはちょうどいいかも・・・?
この前までずーーっと聴いてたのは50v22μFのKZでしたし。

早速取り付け・・・なんですが、左のカップリング外すときにミスっちゃって表面の銀色のやつも剥がしちゃってました。ギャフン
おかげで、はんだがつかないつかない・・・
しょうがないので、音を流しながら&フラックスつけて、導通できるところを探りながら気合でくっつけました。
imAmpで悶えた経験がこんなところで生かされようとは。。。



音はまだ鳴らし始めたばかりですが、なぜかいい音(ウットリ)
SEPCとKZって・・・贅沢やわぁ(笑)

そうそう、おまけ話。
UTSJ版ではありますが、日本橋いったときにD12HJBoaと聞き比べしてみました

うーん、解像度は間違いなくhaiga式HPAの方が上じゃね?
あと、全体的な音のバランスが違うというか。。。
haiga式の前では低音用アンプ?って思ってしまうなぁ
正直、D12Hjに期待してただけにガックリしました。
※D12HjはDACで使うのが正解?

P1とかQubeとか、5万超えるようなやつも聴いてくればよかったなー
さすがにあの辺は違うとは思うんだけど。

あとHA10miniの基盤頒布申し込んでみました
パーツセットは売り切れてたから、集めんとあきませんなー


2011年6月10日金曜日

Slim3のモデルでメンバ名の接頭辞に「_」をつけると

Eclipseでの接頭辞に「_(アンダーバー)」がついた際のsetter・getterでメンバ名に接頭辞「_」がついた際のsetter・getter生成について記述しました。

しかし、Slim3のモデルでこれをやると怒られちゃいます。
[SLIM3GEN1011] The getter method[get_accountName] is not found.
こんな感じ。存在しているgetterは「getAccountName」なので、見つからないといわれるわけです。

素直に「accountName」と接頭辞「_」を外して定義するのが正解ですね。
※まぁデータベースの項目名に「_」のような接頭辞につけることなんてそうそうありませんし。

EclipseTips:パッケージエクスプローラを階層で表示する

自分用備忘録。

Eclipseのパッケージエクスプローラはデフォルトで「フラット」に表示されています。
rootPackage.hoge
rootPackage.hoge.bar

これを階層で表示するには、パッケージエクスプローラの「ビュー・メニュー」(右上の▽)から、「パッケージ・プレゼンテーション」「階層」を選べばOK


階層を選ぶとこうなる


なるほどねー

Slim3でのURLマッピング〜その2

Twitterで @higayasuo さん @bluerabbit777jp さんとお話して、確認してみました。
KeyとPOSTデータについて「asString」「getAttribute」「getParameter」でそれぞれデータ取得

結果画面

やっぱり、AttributeにPOSTデータのみが入って、ParameterにKeyだけが入ってる。
setAttributeでコピーしてたんで、Attributeに全てのデータが入って・・・・あ!

パスつくり直す前・・・POSTデータのみ。ここでsetAttribute、AttributeにPOSTデータが全部コピーされる
パス直してForword・・・このときはsetAttributeしない?先ほどのPOSTデータがAttributeに残ってて、Parameterは今回のGET引数となるKeyが入っている

こう考えると納得だなぁ

確認に使ったソースはこんな感じです

check.jsp

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Checktitle>
head>
<body>
<p>Hello Check !!!p>
<div>
<form method="POST" enctype="multipart/form-data" action="/check/tweet">
<div><h2 class="tweet_do"><span>POSTテストspan>h2>div>
<div><textarea name="maindata" rows="2" cols="10" wrap="on" style="width:635px;height:60px;">textarea>div>
<div>
<input type="hidden" name="url" value="/check" />
<input type="submit" name="createArticle" value="POSTする" class="submit" />
div>
form>
div>
<hr />
key_getattlist_forward
<ol>
<c:forEach var="att" items="${key_getattlist_forward}">
<li>${att}li>
c:forEach>
ol>
<hr />
key_getattlist_include
<ol>
<c:forEach var="inc" items="${key_getattlist_include}">
<li>${inc}li>
c:forEach>
ol>
<hr />
key_getparamlist
<ol>
<c:forEach var="prm" items="${key_getparamlist}">
<li>${prm}li>
c:forEach>
ol>
<hr />
<div>as_key : ${as_key}div>
<div>as_maindata : ${as_maindata}div>
<div>as_url : ${as_url}div>
<hr />
<div>att_key : ${att_key}div>
<div>att_maindata : ${att_maindata}div>
<div>att_url : ${att_url}div>
<hr />
<div>param_key : ${param_key}div>
<div>param_maindata : ${param_maindata}div>
<div>param_url : ${param_url}div>
<hr />
body>
html>



slim3rootPackage.CheckController.java
package jp.tyato.verify.controller;

import org.slim3.controller.Controller;
import org.slim3.controller.Navigation;

public class CheckController extends Controller {

    final String KEY_NAME = "key";

    @Override
    public Navigation run() throws Exception {

        try {
            requestScope("key_getattlist_forward",
                    request.getAttribute("javax.servlet.forward.query_string"));
            requestScope("key_getattlist_include",
                    request.getAttribute("javax.servlet.include.query_string"));
            requestScope("key_getparamlist",
                    request.getParameterValues(KEY_NAME));

            requestScope("as_key", asString(KEY_NAME));
            requestScope("as_maindata", asString("maindata"));
            requestScope("as_url", asString("url"));

            requestScope("att_key", request.getAttribute(KEY_NAME));
            requestScope("att_maindata", request.getAttribute("maindata"));
            requestScope("att_url", request.getAttribute("url"));

            requestScope("param_key", request.getParameter(KEY_NAME));
            requestScope("param_maindeta", request.getParameter("maindata"));
            requestScope("param_url", request.getParameter("url"));
        } catch (Throwable e) {
            e.printStackTrace();
        }

        return forward("Check.jsp");
    }

}

2011年6月9日木曜日

Eclipseでの接頭辞に「_(アンダーバー)」がついた際のsetter・getter

引用です。
http://andante0727.blog81.fc2.com/blog-entry-237.html

private String _name;
メニューの「ソース」→「getter および setter の生成」で上記のフィールドのゲッターセッターを生成すると以下のソースになる。
public String get_name() {
   return _name;
}

public void set_name(String _name) {
   this._name = _name;
}

これをgetNameやsetNameにしたい場合、
メニューの「ウィンドウ」→「設定」→「Java」→「コードスタイル」の「変数命令規則」の欄の「フィールド」を編集し「接頭語リスト」に「_」(アンダーバー)を入れて適用してからセッター、ゲッターを生成する。
public String getName() {
   return _name;
}

public void setName(String name) {
   _name = name;
}

いやほんと、Eclipseって便利ですねぇ

2011年6月8日水曜日

FrontControllerを使いたいときはデフォルトコンストラクタを

Slim3において、ふつーにマッピングしてる間は何も考えずにControllerクラスを生成すればOK。

ただし、URLマッピングしたりとかでControllerクラスに「引数つきコンストラクタ」なんか定義しちゃうと、そのままでは通常の名前からのController呼び出し( /aaa → slim3route.AaaController )が失敗しちゃいます。

他のコンストラクタを書いちゃったときは、暗黙の際に自動で定義されているデフォルトコンストラクタ(引数なしコンストラクタ)を定義してやりましょう。

つまり、
public class AaaController extends Controller
{
}
か、
public class AaaController extends Controller
{
	//これが必ず存在するようにする!
	public AaaController()
	{
	}

	public AaaController( type arg)
	{
	}
}
でないとダメと

2011年6月7日火曜日

Slim3でのURLマッピング

再度確認しました
 結論としては、@higayasuo さんがお話されていた通り「当たり前の挙動」を示しているだけなのかなーと。
 サーブレットに詳しくない自分としてはちょっとツラい感じです

※6/9修正しました。ソース部分をasXxxを使った形に書き換え&こちらを参考にrequestなどの取得について修正

確認しました。
POSTが噛んだときの、マッピングの判断条件の考え方が間違っていました。

RequestMapのgetは、内部でHttpRequestServletのgetAttribute()を呼び出します。
で。
  • Formのenctypeが「multipart/form-data」の場合
    POSTがない場合はこれでGETの引数としてのマッピング先(?key={key})が取得できるのですが、POSTデータがある場合はこの値がPOSTの内容になるようです。
    GETの値はどこかというと、「request.getParameter("key")」で取得できる模様

  • Formのenctypeが「text/plain」の場合
    RequestMapのgetは、GETの値、つまりURLマッピングの「?key={key}」が入っています。
    POSTの値は・・・getParameterでも取れませんでした。

とりあえずURLマッピングを絡めてPOSTを扱う場合は、「multipart/form-data」にしておくことをオススメします。
以下修正しました。
ひと通り動く版。POSTは「multipart/form-data」で。

参照リンク
http://sites.google.com/site/slim3documentja/documents/slim3-controller/url-mapping

Slim3は通常、
リクエストURLパス コントローラ
/ slim3.rootpackage.controller.IndexController
/xxx slim3.rootpackage.controller.XxxController
/xxx/ slim3.rootpackage.controller.xxx.IndexController
/xxx/yyy slim3.rootpackage.controller.xxx.YyyController
/xxx/yyy/zzz slim3.rootpackage.controller.xxx.yyy.ZzzController
※slim3.rootpackage は web.xml で定義されています。
というようにマッピングルールに基づいて、実行するコントローラが決まります。

リンク先に書いてあるのをちゃんと読んでいなかったのですが、このURLマッピングはある程度制御することができます

コントローラを取得する前にリクエストURLパスの書き換えをすることもできます。
URLリライティングを使うには slim3.rootpackage.controller.AppRouter クラスを先に定義する必要があります。

とのこと。実際にやってみましょう

slim3.rootpackageが「jp.tyato.test」だとすると、「jp.tyato.test.controller.AppRouter」クラスを生成します
  • 「jp.tyato.test.controller」のパッケージを用意する
  • 「jp.tyato.test.controller」配下に「AppRouter」クラスを生成。内容は次のような感じ

6/8修正
package jp.tyato.test.controller;

import org.slim3.controller.router.RouterImpl;

public class AppRouter extends RouterImpl
{
    Public AppRouter()
    {
        addRouting("/xxx/{key}", "/xxx?key={key}");
    }
}

次にIndexControllerクラスを生成します
  • 「build.xml」を開き、アウトラインから「gen-controller-without-view」を選択、実行から「1 Ant ビルド」を実行する
  • 名前の入力を求められるので、「/xxx/Index」と入力
  • 「jp.tyato.test.controller.xxx」配下に「IndexController.java」が作成される
  • メソッド「run」の中を書き換える

final String KEY_NAME = "key";

@Override
public Navigation run() throws Exception
{
    Navigation result = null;

    try
    {
        String keyword = asString(KEY_NAME);

        if(keyword == null)
        {
            //getParameterで再度試行
            keyword = request.getParameter(KEY_NAME);
        }

        if( keyword != null )
        {
            keyword = keyword.toLowerCase();
        }

        //Factoryパターン用コントローラ親クラスの定義
        Controller con = this.GetFromFactory(keyword);

        result = con.runBare();
    }
    catch (Throwable e)
    {
        e.printStackTrace();
    }

    return result;
}

public Controller GetFromFactory(String keyword)
{
    Controller con = null;

    try
    {
        if (keyword == null || keyword.isEmpty() || keyword.startsWith("index") )
        {
            //keywordがnull、空文字、indexで始まる文字のいずれかである場合、Index表示処理
            con = new ForDefaultController();
        }
        else if (keyword.equals("yyy"))
        {
            //keyが「yyy」である場合、yyy用の処理へ
            con = new YyyController();
        }
        else if (keyword.equals("zzz"))
        {
            //keyが「zzz」である場合、zzz用の処理へ
            con = new ZzzController();
        }
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }

    return con;
}
後は実際に処理を行うControllerクラスを実装します。
この場合は「ForDefaultController」「YyyController」「ZzzController」について
  • 「build.xml」を開き、アウトラインから「gen-controller-without-view」を選択、実行から「1 Ant ビルド」を実行する
  • 名前の入力を求められるので、「/xxx/???」と入力
  • 「jp.tyato.test.controller.xxx」配下に「???Controller.java」が作成される
???の部分をそれぞれ「ForDefault」「Yyy」「Zzz」に置き換えて読んでください。

しかしこのままですと、各Controllerを呼び出してもそれぞれの変数である
「protected ServletContext servletContext」
「protected HttpServletRequest request」
「protected HttpServletResponse response」
がnullのままです。

ですので、利用する前に各Locaterのgetを使って、値を取得してやります。

YyyControllerであれば、こんな感じです
package jp.tyato.test.controller.xxx;

import org.slim3.controller.Controller;
import org.slim3.controller.Navigation;
import org.slim3.util.RequestLocator;
import org.slim3.util.ResponseLocator;
import org.slim3.util.ServletContextLocator;

public class YyyController extends Controller
{
    @Override
    public Navigation run() throws Exception
    {
        this.CheckParentMember();

        //以降、実処理
    }

    protected void CheckParentMember()
    {
        if( request == null )
        {
            request = RequestLocator.get();
        }

        if( response == null )
        {
            response = ResponseLocator.get();
        }

        if( servletContext == null )
        {
            servletContext = ServletContextLocator.get();
        }
    }
}
「ForDefaultController」「ZzzController」についても同様に定義してやります。
※まぁ実際に使うときに〜Locator.get()を呼び出してやればいいんですが。

こうすることで、
  • Indexに一旦集約
  • その都度の値により狙った処理を行うように制御
といったことが可能になります。

備忘録・Scenic3

いつも所在を忘れてしまうので備忘録として記録。

Scenic3
http://d.hatena.ne.jp/shuji_w6e/20110116/1295184829

もうちょい使い込まないと。。。

2011年6月5日日曜日

haiga式HPA(with UTSJ)

オーグラインつなげて音を聞いているうちに、実はこのややドンシャリよりの音はhaiga式HPAのカップリングをMUSE KZにしてるせいなのかなー?と思うようになりました。
(MUSE KZ は高級オーディオに使われるコンデンサだけど、どっちかっていうとドンシャリよりといわれます)

んー。手持ちのコンデンサ・・・UTSJの100μF・50Vがあるなー

問題は、元々の設計書には「10μF」って書かれてて、100μFになっちゃうとどう変わるのか・・・?



なになに
「容量が大きくなるほど、カットする周波数帯域?が下がる=低域が出る」
「一般論として、容量が大きくなると高域の特性が悪くなりやすい」
「一発目の充填に(余分に)時間がかかる分、ポップノイズにつながりやすい?」


むー。悩ましい。

でも、UTSJはそのまま使うと高音番長みたいなコンデンサ(スペシャルキラキラしてる)なので、少し低域よりになるのはアリかも。

ダメだったらまた付け替えればいいさー(←ポジティブ)

そんなわけで、まずは分解。KZさんおひさしゅう。


KZさんも22μFでちょっと大きめなので無理やり斜めにツッコンでます。ワハハ。

サクっと外して、UTSJを・・・うおっと、サイズがギリ大きいのでこれもKZと同じく斜めに。


完成。



音は・・・つけかえたばっかりやからわかりません!!

コンデンサって熱で損傷受けるんですよね。
んで、通電している間に自己修復されて、本来の性能を発揮すると。
んー。性能っていうかこの場合は音質か。

一個悩ましいのは耐圧に近い電圧をかけたほうが修復はやいらしいんだけど・・・電池駆動のPHPAに50Vのやつ使ってるんだよね(笑)

サクっと聞いた限りでは、低域も違和感ないし、高域はサ行刺さらなくなってるけど、200時間くらい鳴らしこんでからじゃないとちゃんと評価できないかな。

ただ、UTSJはhaigaさん本人も使ってはるんで、このほうがオリジナルの音に近いハズ!

KZさんは在庫行きー







追記
やっぱ、UTSJの音が好きかなー
例えるなら、
MUSE KZ・・・色っぽい系。グラビアアイドル、ではないか。北新地とかの高級クラブのお姉さん、みたいな。
UTSJ・・・凛とした清楚な和服美人。
こんな感じ?

まぁ低音好きにはUTSJよりもKZをオススメするかな。
モニターよりな人にはUTSJかな

DOCKケーブル作成(4N純銀0.5mm、オーグ0.4mm)

オヤイデで頼んでいた4N純銀0.5mmテフロン絶縁単線とオーグPTFE被膜戦0.4mmが届いたので、さっそくDOCKケーブルを作ることに。

まず4N純銀。こちらは問題なくサクっと完成。
音の左右も間違っておらず。




次にオーグライン。こちらも問題なくサクっと・・・あれ?
なんか左からも右の音が聞こえる・・・?




状況はこんな感じ
右・・・右の音が聞こえる
左・・・左右の音が聞こえる

気持ち悪い・・・

テスターでチェックしたところ、RとGNDを逆につけてたらしい。
へー、間違えてつけるとこういうふうに聞こえるんやねぇ

DOCK側を開けてチェックしてたので、そのままDOCK側をつけかえ・・・あああ!GNDがピンの根元から折れた!!!

いやぁ。。。こういうことありますよね。悪いことは続くというか。

でも、大丈夫!Qablesからコネクタ4つ買ってあるから!!

配線外して抵抗外して、新しいコネクタにつなげて・・・完成。
今度は左右もバッチリ!


さて、音ですが・・・やっぱりわからん!(笑)

いや、ケーブル程度ではほとんど誤差っすよ、誤差。
でも気になり始めると気になるんだよねー
少なくとも騒音の多い外では違いがわからんレベル。

それでもあえて違いを書くとすると、

4N純銀・・・みょーに高音キレイ。ベールを一枚剥いだような感じ。
オーグ・・・中低音もしっかりしてる?でもサ行刺さる感じ。
BELDEN 8630・・・2つに比べると、悪く言えば曇ってる、よく言えば混ざってて楽しい音。
AUDIO TRAK・・・あれ?なんかもうこれでもいい気が・・・

いやー、聴き比べしまくってるとわからんくなりますw

そっすね。。。間違いないのは

4N純銀・・・全体的にキレイ。優等生って感じ。面白みは少なめ?
オーグ・・・全体的にキレイ+艶っぽい。明らかに情報量多い。コロナの裏であんなストリングのギター鳴ってたなんて初めて知った(前の下のほうで鳴ってる)ただ、サ行刺さる感覚が強い。情報量多いからかなー? 艶っぽい部分は柴咲コウの最愛を聴き比べて。

バイオリンの”艶”は純銀のほうがよかった感じ。


ちなみに環境は
iPod Classic(MB147J)
差動式HPA(haiga式PHPA Ver2)withKZ
ATH-ESW9
な感じ。
PHPAとヘッドホンがモニターっていうよりはライブより。(解像度は高い)
んでKZいれてるんで、ややドンシャリより。
UTSJとか使ってたらもっとシャリつくんかなー?

個人的にはオーグが結構お気に入り。シャリつきさえなければ好きな音ドストライク。
次はオーグの0.6くらいで作り直したいかな?

ちなみに今回かかった費用

・コネクタ
 Qablesのコネクタ。 1.5ユーロなので、180円くらい?
・ケーブル
 4N純銀がメートル700円、実際に使ったのは30cmくらいなので、210円
 オーグがメートル1200円、30cmくらいで、360円
・プラグ
 共立にあった300円くらいの金メッキのやつ
・工賃
 自作なので無料。プライスレス!

合計すると、
 4N純銀0.5mm ・・・ 690円
 オーグ0.4mm ・・・ 840円

たぶんヤフオクとかの価格の1/5くらいで済んでるんじゃないかな?



2011年6月3日金曜日

有料でホスティングサービスを使おうかな?

最近、「ホスティングサービス」を使い始めました。

今使っているのは「Assembla」
他には「Github」とか「LaunchPad」とかありますね。

個人的な仕事でも使いたいなーと考えていて、そうするとPrivateRepositoryが欲しくなるわけです。

無料だと現時点ではAssembla一択なんですが、有料だとまた違う。
gitで管理していることもあって、今回は「Github」「Assembla」で比較してみました。



・・・う。なんかいろいろおかしいですね。。。
Githubの容量が全部0.3になっちゃってるのと、Assemblaのリポジトリ数がSpaceの値になってるのとがアレな感じ。

詳細なデータを突っ込まんとなんともいえませんが、Githubの12ドルプランがよさげ?
まぁ、正しい使い方ではありませんが、ブランチごとに別プロジェクトを管理する、なーんてことをすればリポジトリ数は関係なくなりますけど。

そんなわけで追調査。
Assemblaの無料トライアルが20日後くらいに切れるので、それまでには決めたいな



〜追記その1〜
どうやらGithubの容量は「一応制限はあるが、実際には使える」っぽいです。

ただ、濫用を防ぐ目的で、soft limitなるものが設定されている。Soft limitを越えると、こんな感じで警告っぽい表示が出る。ただ、だからといって、特に何かが起こるわけではない。

2011年6月2日木曜日

Eclipseの「未処理のイベント・ループ例外」への対応

Eclipseの「未処理のイベント・ループ例外」が発生した場合、以下の処理を行うことで復旧。

  1. ワークスペース配下の「.metadata」フォルダを丸ごと削除(MACではファインダーからは見えないので、ターミナルから rm -rf を実施)
  2. ワークスペースに既存プロジェクトをインポート
  3. 「-clean」にて起動

Eclipse on MAC OS X 10.6.7

MAC OS X 環境でのEclipseインストールメモ

Agenda
  1. Eclipse をインストールする
  2. Pleiades による日本語化
  3. Android プラグインの導入
  4. Google プラグインの導入

  1. Eclipse をインストールする

    • Eclipseをダウンロードする http://www.eclipse.org/downloads/
      ※IDE for Developers でOK
      ※Mac OS X 64 Bitを選ぶこと!
    • ダウンロード済みパッケージ(.tar.gz)を解凍する
    • eclipseフォルダが作成されるので、フォルダごと「/Application」(アプリケーション)へ移動する

    インストールはこれで完了

  2. Pleiades による日本語化


    • Pleiades All in one package をダウンロードする http://mergedoc.sourceforge.jp/
      ※今回はHelios(3.6)用の1.3.3を使う
      ※「Standard All in One (JRE なし)」の「Java」を選ぶ
    • ダウンロード済みパッケージ(.zip)を解凍する
    • 「pleiades-e3.6-java_20110326」フォルダの中にある「eclipse/dropins」を先ほどインストールした「Eclipse/dropins」に上書きする
      ※丸々上書きする
      ※MAC OS XではWindowsと異なり、フォルダ内はマージされないがそれでOK
    • eclipse.iniの編集を行う。
      GUIからなら「アプリケーション」フォルダにある「Eclipse.app」(紫の球状アイコン・拡張子は省略表示されている場合がある)を右クリック(2つ指クリック)し、「パッケージの内容を表示」を選択する
      CUIからは「/Applications/Eclipse/Eclipse.app/contents/MacOS/eclipse.ini」
    • 「./contents/MacOS/eclipse.ini」をテキストエディタなどで開く
    • 以下の一行を追加
      -javaagent:../../../dropins/MergeDoc/eclipse/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar

      環境によってはメモリを384から512にあげたほうが安定するかも
      -Xmx512m

      参考までに私のeclipse.iniを掲載。
      上部の「-startup」や「--launcher.library」は利用するパッケージに依存するので、基本的にそのまま使うように。
      -startup
      ../../../plugins/org.eclipse.equinox.launcher_1.1.1.R36x_v20101122_1400.jar
      --launcher.library
      ../../../plugins/org.eclipse.equinox.launcher.cocoa.macosx.x86_64_1.1.2.R36x_v20101019_1345
      -product
      org.eclipse.epp.package.java.product
      --launcher.defaultAction
      openFile
      -showsplash
      org.eclipse.platform
      --launcher.XXMaxPermSize
      256m
      --launcher.defaultAction
      openFile
      -vmargs
      -Dosgi.requiredJavaVersion=1.5
      -XstartOnFirstThread
      -Dorg.eclipse.swt.internal.carbon.smallFonts
      -XX:MaxPermSize=256m
      -Xms40m
      -Xmx512m
      -Xdock:icon=../Resources/Eclipse.icns
      -XstartOnFirstThread
      -Dorg.eclipse.swt.internal.carbon.smallFonts
      -javaagent:../../../dropins/MergeDoc/eclipse/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar

      あと、うまくいかない場合は追加した「-javaagent」をフルパスで記述するとうまくいったという報告あり。
      ※相対パスの切り方を間違えてるだけな気がしなくもないけど。
    • ターミナルを起動し、「/Applications/eclipse/Eclipse -clean」にて起動する
      スプラッシュに「Pleiades」の文字が見えていれば成功

    • 初回起動ではワークスペースの場所を聞かれるので、プロジェクト管理を行うパスを設定すること

    • メニューの「Eclipse」「環境設定」を起動し、「一般」「ワークスペース」から「テキスト・ファイルのエンコード」でUTF-8にしておくと幸せになれる

    • 同じ場所にある「新規テキスト・ファイル行区切り文字」もLFにしておくとよい(各プロジェクトに合わせること)


  3. Android プラグインの導入


    Android プラグインは「SDK」と「ADT」の2つの手順を行う。
    まずはSDKから
    • Android SDKのサイト(http://developer.android.com/sdk/index.html)にアクセスし、MAC OS X用のモジュールをダウンロードする
      ※今回は「android-sdk_r11-mac_x86.zip」
    • ダウンロードしたzipファイルを解凍し、適当なところにフォルダを配置
    • 「tools」フォルダの中にある「android」をダブルクリックで起動
    • すると「Android SDK and AVD Manager」というウィンドウが現れる

      左側の「Available packages」を選択
    • とりあえず全部チェックをいれる。情報更新でしばらく待機。コーヒー飲めるぐらい待つ。
    • 「Install Selected」を押下し、ひたすら待つ。(大量のダウンロード&インストール)
    • Eclipseの環境設定に利用するので、「android-sdk_r11-mac_x86」のパスを控えておくこと
    • とりあえず以上でSDKそのものの設定はおしまい。


    次にADTの手順
    • Eclipseを起動し、「ヘルプ」から「新規ソフトウェアのインストール」を選択する
    • 以下のアドレスを「作業対象」に入力し、「追加」ボタンを押す
      https://dl-ssl.google.com/android/eclipse/


    • すると「リポジトリ〜の追加」画面が現れるので適当にわかりやすい名前を入力し、OKを押す


    • 全てチェックを入れ、「次へ」を押下する

    • インストール詳細画面で、インストール対象を確認する。「次へ」押下

    • 右下の「使用条件の条項に同意します」を選択し、「完了」を押下するとインストールが始まる

    • こういったセキュリティ警告が出る場合があるが、気にせず「OK」を押す

    • インストールが終わると再起動を促される。再起動しない場合は、自分で「-clean」で起動する必要アリ

    • 再起動後、環境設定に「Android」が増えているので、「SDK ロケーション」に先ほど控えておいたパスを入力し、適用を押す。
      すると下にあるリストに一覧が表示される


    以上でAndroid SDK関連のインストールは完了


  4. Google プラグインの導入


    • 先程のAndroid ADTと同様の手順で「」を追加、インストールを行う。アドレスは以下を設定
      http://dl.google.com/eclipse/plugin/beta/3.6

      ※GWT2.4リリース済みなら、
      http://dl.google.com/eclipse/plugin/3.6

      を設定すること






以上でひと通りの環境が構築できるハズ。