Home

ニュース記
ニュース記Edit

HBFav というはてなブックマーク iPhone アプリを作りました - naoyaのはてなダイアリー

HBFav はタイムライン形式でソーシャル・ブックマークを楽しむためのアプリ。はてなブックマークのお気に入り機能を活用しているぜ! という方におすすめです。

TwitterのタイムラインでURLが含まれるツイートだけを表示するツールじゃだめなのかのー。通常のタイムラインと分けたいのならば、リストとか使って分類したりとか。

(合気達人)柳龍拳 VS (総合格闘家)岩倉豪 - YouTube

お知らせ|札幌市の武術・整体・気功なら、大東流合気道の柳武術整体気功院へ

魅惑の変貌を遂げまくる!コーギーといろんな犬種のミックスまとめ - NAVER まとめ

なんか不自然なミックスが多いな。シーズーとかパピヨンとのミックスは単にコーギーの子犬に見えるんだけど、これは成犬なのか?

モバイルFlashの死因をAdobeの社員がブログで語る–すべての道はHTML5へ

Flashはスマートフォンの世界で、PC上で享受していたような遍在性に到達できない
モバイルデバイスの上ではHTML5が、Flash Playerがデスクトップ上で提供したような遍在性を提供する
ユーザの頭の中には、スマートフォン==アプリ、という概念が固着している
大勢の技術者たちを、(1)OSやその構成ごとに調整を要する、(2)しかも彼らが願ったほどには普及しない、製品に向けるのではなく、HTML5の開発に向けたほうが得策
でもモバイル向けのAIRは続けるんだよね。この理屈だとあれもやめるのか? AIR to アプリ変換のプラットフォームとしてAIRを続けるってだけか?

Objective-C で ARC を有効にしたプロジェクトで、一部ファイルのみ ARC を無効にする方法 « Zero4Racer PRO Developer's Blog

Published At2011-11-14 14:33Updated At2011-11-14 14:33

テニス観戦記
ATP1000パリ決勝Edit

ATP1000パリ決勝。

  • フェデラー def. ツォンガ 6-1 7-6(3)
フェデラーがかつてのナルバンディアンのようにシーズン最後にポイントを稼ぎに来たな。これでバーゼル、パリと合わせて1500ポイント。今年のマスターズ初勝利&パリマスターズの初勝利のおまけ付き。

ツォンガは、フェデラーに勝つためにいつもよりもちょっと無理に攻撃する球を増やしていたけど、大事なポイントでその成功率が低かったな。フェデラーが、ツォンガに攻撃された球を苦しい体勢(特に超ライジング)からうまく返していて、強打を何度も続けなければポイントが取れなかったのもきつかった。

一方のフェデラーはいつも通りの攻撃的なプレイで、スーパーフェデラー状態じゃなかったからそこそこミスもあったけど、大事なポイントではとてもいいプレイをできていた。特に欲しいポイントをネットに出て取りに行くプレイの確率が高かったな。

あと、フェデラーは最近フォアハンドのランニングショットの切り返しがあまり良くなかったんだけど、この試合を見る限りでは、全盛期並みにいいショットを打っていた。フットワークが復活してきたのかな?

あと、おそらくナダル対策のために去年辺りから増やしていたバックハンドのストレートへの強打が、威力はあるけど確率が悪くていまいちぎくしゃくしていた感じだったのが、今回はだいぶ自然な感じのショットセレクションの中に組み込まれていた。

ただこれは、相手がツォンガだからあまりバックハンドの高い打点で打たされることがなく、無理せずスピンをかけやすかっただけかもしれない。最終戦でナダルやジョコビッチ相手でも、あのくらい自然にバックハンドストレートの強打を打てるかな。

ともかくこれで最終戦、トップ4の戦いがだいぶ楽しみになった。パリを回避して体調万全のナダルと、コンディションばっちりでバーゼル、パリと連覇してきたフェデラー、肩の不安があるが今シーズンを圧倒してきたジョコビッチ、直前で失速したがアジアシリーズを圧倒してきたマレー。トップ4のグループ分けはどうなるだろうなー。

Published At2011-11-14 06:58Updated At2011-11-14 06:58

テニス観戦記
ATP1000パリ6日目Edit

ATP1000パリ6日目結果。

  • ツォンガ def. イズナー 3-6 7-6(1) 7-6(2)
  • フェデラー def. ベルディヒ 6-4 6-3

フェデラーは一度もブレイクポイントを握られないフェデラーらしい完璧な試合運びだったみたいだな。バーゼル、パリ、最終戦を三つ取るためにコンディションはばっちりっぽい。

一方のツォンガはファーストセットを取られてから、タイブレイクを二つ取り返しての逆転勝ち。地元の観客を煽って盛り上げての逆転劇が目に見えるようだ。

ツォンガがフェデラーに勝つには、自分のサーブゲームはしっかりキープしつつ、タイブレイク勝負で二回取っていくしかないかなー。

Published At2011-11-13 06:53Updated At2011-11-13 06:53

テニス観戦記
ATP1000パリ5日目Edit

Tennis - ATP World Tour - Paris 2011 Friday - Djokovic Pulls Out Of Parisというわけで、ジョコビッチが右肩の治療のためQFをキャンセル。ツォンガがSFに進むことになった。

最終戦には出場するつもりみたい。まあ最終戦に出る気ならば、早めに休んで少しでも肩の調子を整えておいた方がいいだろう。トロイキ相手にはああいう戦い方で競り勝てても、トップ4同士のつぶし合いだともっと強打を多用しないときついだろうし、そうなると肩に掛かる負担も大きくなる。

  • ツォンガ def. ジョコビッチ WO
  • ベルディヒ def. マレー 4-6 7-6(5) 6-4
  • フェデラー def. モナコ 6-3 7-5
  • イズナー def. フェレール 6-3 3-6 6-3
マレーはベルディヒに逆転負けを食らってる。ベルディヒの調子が上がってるのか、マレーの調子が下がっているのか。マレーはこんな感じで最終戦を迎えたら、また不完全燃焼気味になっちゃいそうだ。バンコク、東京、上海と連勝しておいて、パリ、最終戦がいまいちだったら、相変わらずピークのもってきかたが下手だなーってことになっちゃうな。

フェデラーは順当。初っぱなからブレイクされてて、やっぱりフェデラーはパリはいまいちなのかなーと思っていたら、その後はあっさり逆転してストリート勝ちか。

フェレールはイズナーに負け。インドアハードでイズナーのサーブが有効に働いたかな。でもまあフェレールも最近疲れがたまっていそうだし、最終戦前にちょっと休んでおいた方がいいかも。

これでSFに残ったのは、フェデラー vs. ベルディヒとツォンガ vs. イズナー。USオープン後、最終戦に向けてしっかりコンディションを整えてきているようにみえるフェデラーだけど、今まで勝てたことがないパリで、最近分が悪いベルディヒ、ツォンガ相手に勝ちきれるかどうか。

そういえばラフバラのチャレンジャーに出ている添田は

  • Torebko def. 添田 0-6 7-6(8) 6-2
と大逆転負けを食らっている。セカンドセットのタイブレークを競り負けたのがなー。

Published At2011-11-12 08:11Updated At2011-11-12 08:11

技術日記
ADO.NET Entity Frameworkで自動生成されたモデルクラスを拡張する方法Edit

ADO.NET Entity Frameworkで自動生成されたモデルクラスを拡張する方法はあるんだろうか? Foo.edmxに対応するFoo.Designer.csファイルは、Foo.edmxファイルをいじると自動的に上書き再生成されてしまうんで、直接そのファイルを変更することはできない。

でも、データ処理がらみの機能を実装する場合、別クラスを作ってそちらで書くのではなく、モデルクラスの方を直接いじってそちらで拡張した方が直観的な設計になることも多いよね。

で、Foo.Designer.csファイルの中身をよく見てみたら、モデルクラスはpartialで定義されていた。ってことは別ファイルにpartialで追加メソッドを用意すればいいだけなのか。たとえば、barテーブルに対応するBarクラスにメソッドを追加したければ、適当なクラスファイルを用意して、

[sourcecode language="c#"]
public partial class Bar : EntityObject
{
    public string ExtendedMethod()
    {
        return "extended!";
    }
}
[/sourcecode]
とかでOK。

これで機能拡張はできるとして、標準的な操作をoverrideしたりはできないのかな? たとえばinsert、update時にはcreated_at、modified_atとかを自動で更新したりとか。

調べてみたところ、EntityObjectにはPropertyChangedというイベントがあるので、それをフックすれば良さそう。

[sourcecode language="c#"]
public partial class Bar: EntityObject
{
    public Bar() : Base()
    {
        PropertyChanged += OnPropertyChanged;
    }

    protected void OnPropertyChanged(object sender, PropertyChangedEventArgs e)     {         if (new string[]{"updated_at", "created_at"}.Contains(e.PropertyName)) return;         if (id == 0) {// primary keyがセットされていない=新規作成             created_at = DateTime.Now;         }         updated_at = DateTime.Now;  } } [/sourcecode]

一応なんてコードでそれっぽく動いている。新規作成 or 更新の区別をid == 0かどうかで識別しているのが妥当かどうかはちょっと怪しい。ほかにもっとちゃんとした方法はないかな。

EntityStateってのを使うとそれっぽいことができそう。オブジェクトの作成・更新・削除状態が取得できるプロパティの模様。と思ったが、これはオブジェクトコンテキストにAttachされていないと状態が取得できないのか。

EntityObjectインスタンスメソッドのスコープからは親オブジェクトコンテキストが見えないから、いったんAttachして確認することもできないし、副作用もありそうだからあまりやりたくもないなー。ひとまずはidを見て切り分けることにしておくか。

Published At2011-11-11 21:40Updated At2011-11-11 21:40

ニュース記
ニュース記Edit

os0x / ChromeKeyconfig / overview — Bitbucket

Chrome KeyconfigがChromeウェブストアから消された件、すぐに復活するかと思ったら復活しないっぽいので、ソースをダウンロードし、zipを展開して、os0x / ChromeKeyconfig / issues / #36 - オプションが保存されない — Bitbucketのバグ修正を適用してから、拡張機能の「パッケージ化されていない拡張機能を読み込む」でインストール。

DNP、違法音楽コピー再生時に妨害雑音を発生させる技術 -AV Watch

これって再生デバイスに依存した技術になっちゃわないかな。データとして含まれている音がすべての再生デバイスで再生できるわけじゃないよね。
20Hz~20kHzの音源のうち、下限部の20Hz~400Hzの帯域を20Hz~200HzのA帯域と200Hz~400HzのB帯域に分ける。そし て、レコーダなどの音響入力機器が対応する音波の下限付近のB帯域に、A帯域よりも音が高く、音量が小さい妨害雑音Xを、本来のB帯域の音成分に重ねて埋 め込む。A帯域よりも周波数が高いB帯域に妨害雑音Xを埋め込むと、妨害雑音Xが聞こえにくくなる聴覚マスキング現象が起き、「通常の再生では妨害雑音の 影響はない」という
とかって、20~200Hzがきちんと再生できないデバイスで再生しちゃったら、オリジナルデータを再生したときでもノイズが強く聞こえそうだけど、安物ヘッドフォンとか小さいPC用スピーカーとかで再生したときは大丈夫なんだろうか。

アップル、iPad・iPhone・iPod touch向けソフトウェアアップデート「iOS 5.0.1」を公開〜バッテリー駆動時間の問題を修正 - Touch Lab - タッチ ラボ

iTunesからのアップデートがなんどやってもうまくいかなくて、困ったなーと思っていたら、そういえばiPhone単体でのアップデートもできたんだっけ。そっちだったらあっさりアップデートに成功した。

「出版、そして書籍の歴史が変わる重要な日」――楽天三木谷氏が明かすKobo買収の意図 - 電子書籍情報が満載! eBook USER

結構でかい話だと思うんだけど、なんかこの記事を読む限りでは、有望そうな電子書籍プラットフォームが、日本の事情に取り込まれてぐだぐだになっていく、という展開しか見えてこない。楽天はどのくらい本気で電子出版やるつもりなんだろう。

「iPhoneアプリ開発日記」コンテンツ削除のお知らせと著作権侵害に関するお詫び | Libub

怒られたから削除しますじゃなくて、著者および出版社に謝罪しつつも利用条件とかを話し合って、お互いに納得できる落としどころを見つけて今後も配信を続けていきます、どうしても妥協点が見つからなかった部分だけは削除なり再編集なりをします、とかだったらちゃんとしてるなーと思えるんだけどな。

ソニー、モバイル FeliCa 対応 NFC チップを商品化 -- Engadget Japanese

日本で言うところの「いわゆるおサイフ」(FeliCa)と、このところ海外で盛り上がっている「いわゆるNFC」を、ユーザー側でどちらがどちらか意識せずに、両方利用することができます
iPhone 5にはこれが載るのかな。スマートフォン向けNFC対応に関しては、このチップ対応機種以降が標準になるんだろうな。

Published At2011-11-11 16:55Updated At2011-11-11 16:55

テニス観戦記
テニス観戦記Edit

ATP1000パリの結果。

  • イズナー def. ロペス 6-4 6-2
  • マレー def. ロディック 6-2 6-2
  • フェデラー def. ガスケ 6-2 6-4
  • ツォンガ def. セッピ 6-3 6-4
  • モナコ def. フィッシュ 1-6 7-6(6) 1-2 Ret.
  • ジョコビッチ def. トロイキ 4-6 6-3 6-1
  • ベルディヒ def. ティプサレビッチ 7-5 6-4
  • フェレール def. ドルゴポロフ 6-3 6-2
ティプサレビッチが負けちゃったんで、これで最終戦出場者8人は確定。

ただ、フィッシュは1セット目を楽に取った後に、2セット目はタイブレークで競り負け、ファイナルセットで棄権しちゃったのか。これで最終戦出場大丈夫なのか? だめだったら繰り上がりでティプサレビッチが出るのかな。

ジョコビッチ vs. トロイキは半分くらい見たけど、ジョコビッチすごいな。怪我の不安からか強打があまり使えず、ものすごくプレースメント重視の戦い方になっているんだけど、それでも最後にはトロイキを完全に振り回して勝っていた。ワイドサーブの角度とかもえぐいことになっているし。この戦い方でトップ4残りの面子に勝ちきれるかどうかはともかくとして、それ以外の相手ならば十分戦える。しかも、そういう戦い方を実戦でこなしているうちに、戦術の幅が広がってきているように見える。これで怪我を治して強打もがんがん打てるようになったら、怪我前よりもさらに強くなってるんじゃないか。

そういえば添田がラフバラのチャレンジャーでQFまで勝ち残っている。これもし優勝できたら100位近くに復帰できて、全豪本戦から出場できるかも。

Published At2011-11-11 16:40Updated At2011-11-11 16:40

技術日記
ファイルがない場合だけ動的生成するCMSEdit

思いつきアイディア。mod_rewriteを使って、ファイルが存在したらそのファイル自体をそのまま(httpdのレベルで)返し、なければWebアプリケーションを呼ぶという仕組みはよくある。

呼ばれた先のWebアプリケーションで、リクエストに応じた処理を行って結果を返すというのが動的生成。静的生成は、管理ツールなんかでコンテンツを投稿したら、その時点でHTMLファイルとかを生成して、Web公開ディレクトリに置いておく。

その中間として、コンテンツが投稿された時点ではHTMLファイルは存在せず、アクセスされた時にオンタイムで動的生成して、そのファイルをWeb公開ディレクトリに直接ファイルとして保存してしまう。

仕組み的にはコンテンツキャッシュに似ているけど、キャッシュではなくて実コンテンツファイルを初回アクセス時に生成する仕組み。

アクセスのないコンテンツは定期的に削除してしまってディスク使用量を削減したり(今時あまり意味ないだろうけど)、すべてのコンテンツに影響がある設定変更などを行った場合は、すべてのコンテンツを削除してしまうだけで、またアクセスがあったときに自動生成される。

フロントのWebサーバーを追加したりするときは、コンテンツファイルの全コピーを行わなくても、そのサーバーにアクセスがあったときに必要なファイルが生成されるので、DBサーバーの負荷が適当に分散される。 昔MovableTypeとかで全リビルドとかすると結構大変だったし。

といった感じの仕組み。すでにどこかにあるかな?

Published At2011-11-11 16:24Updated At2011-11-11 16:24

技術日記
小型家電・PC周辺機器向けバッテリーパック規格Edit

Twitterでつぶやいたことをまとめてみる。

震災直後の電力供給不安定があったり、家庭用のNASやルーター、ハードディスクレコーダーなどの常時通電しておきたい家電やPC周辺機器が増えてきていて、ブレーカーが落ちたりすると面倒くさいことになったりする。

でも、無停電電源装置(UPS)を導入するのは面倒くさい。でかくて重くて入手性が悪くてバッテリー寿命が比較的短い割には交換するのが面倒くさい。

そこで、常時通電しておきたい家電やPC周辺機器向けに、簡易UPS的な機能を持たせるための乾電池なんかよりももっと大容量のバッテリーパック規格を用意し、それを使ってUPS的な機能が簡単に追加できるようにならないか。

バッテリーはそれほど長持ちする必要はなく、瞬間停電に耐えられたり、あるいは正常に終了プロセスを実行できる程度の時間持てば十分。その規格が普及して、交換バッテリーパックがコンビニとかでも気軽に入手できるようになったら、非常に便利なのだが。

Published At2011-11-11 16:01Updated At2011-11-11 16:01

技術日記
技術調査記録Edit

ASP.NET MVCで独自の(ビューの)ヘルパー(メソッド)を追加したい。ググると出てきたのが、[C#] #13. カスタム HTML ヘルパーの作成 | ASP.NET MVC のチュートリアル。2010年5月20日のドキュメントだから、賞味期限的にも大丈夫そう。

このドキュメントを見る限りは、ヘルパーといっても基本的には単に文字列を返すC#のスタティックメソッドをImport Namespaceでビューから見えるようにしてやっているだけか。

サンプル コード 5 のクラスは、Label() という名前の HtmlHelper クラスに拡張メソッドを追加します
とあるけど、これは「サンプルコード5(のクラス)は、HtmlHelperクラスにLabel()という名前の拡張メソッドを追加します」だよな。

既存のHtmlHelperクラスに拡張メソッドを追加するために、LabelExtensionsというスタティッククラスを定義し、その中のLabel()メソッドの第1パラメータをthis HtmlHelper helperとすることで、そのメソッドが既存のHtmlHelperクラスの拡張メソッドであることを宣言しているから、最初のサンプルでは、

[sourcecode language="c#"]
<%@ Import Namespace="MvcApplication1.Helpers" %>
<%=@LabelHelper.Label("firstName", "First Name: ") %> 
[/sourcecode]
みたいに書いていたものを、
[sourcecode language="c#"]
<%@ Import Namespace="MvcApplication1.Helpers" %>
<%=Html.Label("firstName", "First Name: ") %>
[/sourcecode]
みたいに書けるよってことだね。

ちょっとした拡張ならば後者の方が良さそうなんで、後者の方法で書いてみることにする。

[sourcecode language="c#"]
using System.Web.Mvc;

namespace MyApp.Helpers { public static class HelperExtensions { public static string Summarize(this HtmlHelper helper, string text, int length = 80, string suffix = "..") { if (text.Length <= length) { return text; } string result = text.Substring(0, length - suffix.Length) + suffix; return result; } } } [/sourcecode]

こんな感じで、@Html.Summarize(text)とかすると、80文字以上の長いテキストを切り詰めて表示してくれる。

ちなみにRazorでの<%@ Import Namespace = "MyApp.Helpers" %>相当の命令は、単純に@using MyApp.Helpers;でよかった。

続いて、通常HTML表示している内容を、API向けにXMLで出力する方法。XMLはテンプレートで出力するんで、IndexXml.cshtmlとかXML出力用のテンプレートを用意し、アクションメソッドの中で、

[sourcecode language="c#"]
if (format == "xml") {
  Response.ContentType = "text/xml";
  return View("IndexXml", data);
}
[/sourcecode]
みたいな感じにした。テンプレートは元々PHPで書いていたものをコピーしてきて、Razor向けに書き換え。PHPで書いたテンプレートをRazorで書き直したら、Razorの方がだいぶ書きやすかった。型付けされたモデルクラスのおかげでVisualStudio上で自動補完も効くし。

これでOKかと思いきや。実際にはだめ。というのはよく考えたらレイアウトファイル(マスターページ)が適用されてしまうから、XMLの前後にHTMLのレイアウトページが出力されてしまう。レイアウト出力の抑制ってどう書くんだ?

ひとまずテンプレートファイルの中で、@{Layout = null;}をしておくと、レイアウトの抑制はできた。けど、アクションメソッドの方でコントロールしたいな。

一応ViewResultのオプションでマスターページ名を指定できるみたいなんで、

[sourcecode language="c#"]
return View("IndexXml", null, data);
[/sourcecode]
とかやってみたんだけど、デフォルトのレイアウトが適用されてしまう。テンプレートの中でLayout = null;はいけるのに、マスターページとしてnullを渡したんじゃだめなのか。しょうがないから、_LayoutNothing.cshtmlとかいう名前で、
[sourcecode language="c#"]
@RenderBody();
[/sourcecode]
みたいに何もしないレイアウトファイルを用意して、
[sourcecode language="c#"]
return View("IndexXml", "_LayoutNothing", data);
[/sourcecode]
としたら一応思い通りに動いた。なんか今ひとつ釈然としないけれども、まあいいか。

ちなみにこの辺を調べるためにドキュメントをあさっていたら、System.Mvc以下にJsonResultというAPI向けにJSON出力するためのクラスが用意されていた。これってXML出力用は用意されていないの? XML出力したい場合は通常のシリアライザー使って書けってことなのかな?

Published At2011-11-10 20:39Updated At2011-11-10 20:39