2012年12月29日

来年こそはしっかりモノにしたい6つの技術スキル

1. Node.js


今注目のサーバーサイドJavaScript実行環境。

Windows Azure上でも簡単にホスティング出来るみたいなのでぜひ何か作りたい。

リアルタイムな何か。最初の題材としては対戦型のゲームとかが面白そう。


この本をちらちら見ながらワクワクしている。



2. クライアントサイド MVC



この本は一応読むことは読んだ。でもまだ実践ではクライアントサイドMVCを使う機会がない。

ASP.NET界隈では Knockout.js の人気が高まっているみたいだ。

個人的にはGoogle発の AngularJS に最も興味がある。DotInstallでのレッスンには興奮した。



3. CSS3/LESS/SCSSなど


CSS3はそろそろ機が熟して来たのかなと感じている。

CSSだけで時計やゲームの様な動きを見事に実現してしまう例を見せてくれた http://www.adventar.org/calendars/2 を眺めて、今さらながら驚かされた。

大規模なプロジェクトになると効率アップのために LESS か SCSS はやはり必要になるだろうなと思う。

LESSとSCSSのどちらを使った方が良いか、というのは迷う所だけれども、LESSの方が明らかに名前で得をしていると思う。子音だけのSCSSよりもLESSの方が発音しやすいし、語感が明るい気がする。名前付けは重要だなあ、と。


4. テスト駆動開発


最近は意識的に単体テストを書く頻度を上げて「テスト駆動」に近づく様にしている。そのおかげでリファクタリング/デバッグのスピードが着実に向上しつつあるのを実感している。

下の2冊はまだ読んでいる途中だけど、しっかりとモノにしたいスキルだ。





5. Titanium Mobileによるスマートフォンアプリ開発


Eclipse+Javaを使ってAndroidアプリを個人的に開発するという事は1年半以上前からやっている。JavaやAndroidの勉強をしながら、少しずつ自分で作ったものが形になって行くのはとても楽しい。

ただ、この方法だとXcode+Objective CでのiOSアプリの開発まではいつまで経ってもたどり着けそうにない。趣味的に続けて行くには、単純に時間が足りなすぎるのだ。

そこで何らかのクロスプラットフォームなツールを使う必要性を強く感じている。

ゲームなら多分 UnityCorona と言ったあたりが良さそうだけれども、ツール系のアプリだと Titanium Mobile が一番良さそうかなと思っている。


この本はかなり前に買ったのだけれど、忙しくてまだじっくり読めていない。

来年はAndroidだけでなくぜひiOSアプリの開発にもチャレンジしたい。


6. TypeScript


CoffeeScript ももちろんいいのだけれど、Windows 8アプリの開発などを視野に入れると TypeScript の方に注目したい。

JavaScriptを書くならTypeScriptを使え! - 部屋とボードゲームと私と酒と泪と男と女
Visual Studio 2012を使ってTypeScriptのサンプルを動かしてみたところ、確かにこれなら気軽に入っていけそうだ。もしかしたら来年の今頃は「TypeScript無しでの開発なんて考えられない」っていうぐらいになっているのかも知れない。



来年こそは!


以上、来年こそはしっかりとモノにしたい6つの技術スキルを挙げてみた。

ホントは今年中にやっておきたかったのだけれど、来年の自分に向けて書いておく。






 

2012年12月18日

Eclipseで急にAndroidアプリのエクスポートが出来なくなった時の対処法

あるAndroidアプリを更新した後、「さあGoogle Playにアップロードするぞ」とAPKのエクスポートをしたら、突然Eclipseがエラーで落ちてエクスポート出来なくなるという問題に遭遇した。

前のバージョンまでは全く問題無かったのに、更新後は何回トライしてもエクスポートしようとすると必ずEclipseが異常終了してしまう。

ActionBarSherlockを使う様に画面を変更したのだけれど、それが関係しているのかも知れない。

エラーログを見ると、何やらZipファイルの処理でエラーが発生している様な感じなのが何となく分かるが、対処法がさっぱり分からないので困った。

色々調べてようやくなんとかエクスポート出来たのでメモ。

Issue 28725 - android - Eclipse Crashes with EXC_BAD_ACCESS when exporting signed applications - Android - An Open Handset Alliance Project - Google Project Hosting


ここにある通り、「Build Automatically」のチェックをOFFにして試したら無事エクスポート出来た!

それにしてもよく分からないエラーだ。



 

2012年12月13日

Entity Framework 6では非同期DB処理がこんなに簡単に書ける!

MicrosoftのScott Guthrie氏のブログで Entity Framework 6 の Alpha 2 がダウンロード可能になったと報告されている。

Entity Framework 6: Alpha2 Now Available - ScottGu's Blog

改善点としてまっさきに挙げられているのは「非同期処理のサポート」。

.NET 4.5 introduced the Task-Based Asynchronous Pattern that uses the async and await keywords to help make writing asynchronous code easier. EF 6 now supports this pattern. This is great for ASP.NET applications as database calls made through EF can now be processed asynchronously – avoiding any blocking of worker threads. This can increase scalability on the server by allowing more requests to be processed while waiting for the database to respond.
The following code shows an MVC controller that is querying a database for a list of location entities:

(以下意訳)

.NET 4.5ではTaskベースの非同期実行のパターンが追加されました。このパターンでは async と await キーワードを使って非同期に実行されるコードを容易に記述する事が出来ます。EF6 も今回このパターンをサポートしました。
EF経由のデータベース呼び出しを非同期で実行する事が可能になるので、これはASP.NETアプリケーションにとっては非常に望ましい事です。 - つまりワーカスレッドをブロックせずともよくなるのです。これによってデータベースからの応答を待つ間に他のリクエストを処理出来るので、サーバー側でのスケーラビリティの向上に寄与します。
次のコードはLocationエンティティの一覧をデータベースから取得するMVCコントローラの例です。


    public class HomeController : Controller
    {
        LocationContext db = new LocationContext();

        public async Task<ActionResult> Index()
        {
            var locations = await db.Locations.ToListAsync();

            return View(locations);
        }
    }
上のコードを見ると、青字の部分が変わっただけで、他は今までと同じ。とても読みやすい。これだけでコントローラ側が非同期処理になるとは、素晴らしいの一言。

最近は Node.js がかなり注目されているけれども、その理由の一つが「非同期処理によるスケーラビリティの向上」にある。Entity Framework 6で非同期なDB処理がここまで簡潔に書ける様になると、ASP.NETもその方向にまた一歩近づいたという事になると思う。




 

2012年12月7日

Nexus7を買って4ヶ月後の感想 - じわじわと良くなって来た感じ


8月の初めにNexus7を購入してから4ヶ月が経った。

当初は期待半分、「本当に使えるのかなー」という疑い半分、という感じで、まあ少なくともアプリ開発のデバッグ用途には役に立つかなという程度に思っていた。

ところが、時間の経過とともに当初想定していなかった使い方もする様になって来て、だんだんと手放せなくなりつつある。

他の人の感想を読んだりして、「やっぱりNexus7いいね」と改めて見直したり。
Nexus7購入から1ヶ月後 — 乱れなよ、そして召されなよ

Nexus 7が、とりわけヒジョーにかなりイイ
なんと言っても7インチというサイズと軽さが素晴らしい。これはまあ当然として、その他に次のような点が大きいかなと思う。


Googleのサービスと親和性が高い


一番大きいと思うのはChromeの同期機能。これは使い出すと本当に欠かせない。
もちろんGmailも使いやすい。Google Mapの高機能さもやはりAndroidならでは。



Android OSのアップデートがすぐに反映される


購入してから4ヶ月で既に3回のアップデートが配信されている。アップデートのたびに細かい点が改善されているのが嬉しい。

特にAndroid 4.2で追加されたマルチユーザー機能はとても便利。子供に渡す時にさっとユーザーを切り替えて渡すだけで良くなったので本当に助かる。


あと、買った当初は想定していなかった使い方というのは、電子書籍を読む事と動画や音楽を楽しむ事の2つだった。



紙のメモを使わなくなった


Nexus7を買ってからミーティングのメモは全て「7notes with mazec」を使って取る様にしている。

最初の頃は「書き流し入力」をして後からきれいにテキストに変換していたけれども、この頃は手書き文字のままPDFで保存する様にしている。どうしてもテキストに変換する必要があるドキュメントでない限りはこれで十分だ。

最近スタイラスペンが少しヘタって来た様な気がするのでそろそろ買い換えたほうが良いかも知れない。

手書き入力をしない時は、Google日本語入力のGodanキーボードが便利。mazecと状況に応じて使い分けている。



電子書籍が読みやすい


Amazon.co.jpで日本語の電子書籍が買える様になった。Nexus7の話からは外れるけれど、僕にとってはこれは大きかった。

電子書籍が便利なのはわかっているけど「読む本が無いから結局読書には使わないだろうなあ」と思っていた。

でも、Amazonで簡単に日本語の本が探せて、しかも今まで払っていた高い海外向け送料無しで読めるとなると話は全く別だ。

試しに好きな作家の小説を買ってみたら、もちろんNexus7で全く問題なく読めた。7インチの画面はさすがに携帯の画面より読み易い。読んでいる位置やブックマークを携帯やPCのKindleアプリと同期する事も出来るし、やっぱり便利。

検索しても出てこない本がまだまだ多いけれど、早く紙の本と同じものが買えるようになって欲しい。そうしたらNexus7の出番がもっともっと増えると思う。



Youtube動画を連続再生


日常生活の中で、「Youtubeのあの動画を再生しながらこれをしたいな~」という場面が結構ある。

僕の場合は実は「食後の食器洗い」の時間がそれに当たる。手が濡れているので出来れば画面を触らずに自動でどんどん再生してくれると嬉しい。

それを実現してくれるのが「PVSTAR+」というアプリ。これで気に入った動画をずっと流しながら両手で作業が出来る。



音楽を聴きながら寝る


前からSky.FMは聴いていて、「Solo Piano」というチャンネルが僕のお気に入りになっている。

Sky.FM Radio

このアプリが便利なのはスリープタイマー機能が付いているので聴きながら寝入ってしまっても時間が来れば停止してくれる事。きれいなピアノの音を聴きながら眠ると本当に気持ちがいい。

ただ、無料で使っていると、たまに寝かかっている時にコマーシャルが始まって目が覚めてしまう事がある。なので有料アカウントにしようかと真剣に検討中。



結論


そんなこんなで4ヶ月後の感想としては、「Nexus7買って良かった。悔いはない!」と思っている。



 

2012年12月6日

ASP.NET MVCでDbContextのトランザクションと独自SQL 処理のトランザクションを同一のスコープにする

最近毎日 ASP.NET MVC4 でWebアプリケーションを作っている。

今まで独自のO/Rマッパを使っていたので Entity Framework を使い出したのは実はごく最近。

これでSQLを書かなくてもデータの取得や更新が簡単に出来る様になったのは嬉しいのだけれど、当然ストアドプロシージャを呼んだり自分で書いたSQL文を実行したりしたいという場面も結構ある。

そこでいくつかのDBアクセスのパターンを試していて、独自SQLの実行とDbContext経由でのデータ更新を同一のトランザクション内で行いたい、という場合にちょっと困ったので対処方法をメモしておきたい。



とりあえず問題ない例

上の例では別のContextを使っているのでこれはエラーにはならない。 ただしこれだと1つめの更新処理と2つめの更新処理を同一のトランザクション内で実行出来ない。



問題になる例

上の例の様にDbContextからの更新処理をADO.NETのTransaction内に入れた場合は次のようなエラーが起きる。





対処の方法


1. 生成済みのDbConnectionを渡してDbContextを生成する。

DbContextのインスタンスを生成する時に、コンストラクタに既存のDbConnectionを渡すとDbContextで勝手にCloseされる事が無くなる。

これをするためには、DbContextのクラスにDbConnectionパラメータを受け取るコンストラクタを追加する必要がある。



    public class MyEntities : DbContext {

        public MyEntities()
            : base("DefaultConnection") {
        }

        public MyEntities(DbConnection existingConnection)  
            : base (existingConnection, false){ 
        }

        public DbSet<Product> Products { get; set; }
    }


2. EntityConnectionを使ってコネクションをOpenする。

DbContextのDatabase.Connectionは素のSqlConnectionを返す。ただしこれを自分で直接OpenしてしまうとEFの管理情報と一致しなくなる。

DbContextをIObjectContextAdapter型にキャストしてそこからObjectContextを取得し、そのConnectionプロパティ(実態はEntityConnection)に対してOpenを実行すればEFの管理内で処理される。


3. EntityConnectionに対してBeginTransationする。

1、2の後、EntityConnectionに対してBeginTransationしてトランザクションを開始すれば、独自のSQL処理とDbContextのSaveChangesメソッドによる内部的なトランザクションとが同一のスコープで実行可能になる。


対処後の例



動作確認可能な全ソースを含んだサンプルプロジェクトはこちら


参考にしたURL

This SqlTransaction has completed; it is no longer usable. Entity Framework Code First - Stack Overflow

task parallel library - Entity Framework, SqlCommand and TransactionScope - Stack Overflow

Exception from DbContext API: EntityConnection can only be constructed with a closed DbConnection - Diego Vega - Site Home - MSDN Blogs

EntityConnection can only be constructed with a closed DbConnection

2011 7月 « Do Design Space

.net - Frequent saves with entity framework - Stack Overflow

entity framework - EF Code First DBContext and Transactions - Stack Overflow






 

2012年12月4日

ASP.NETのWCFサービスでDbContextから取得したオブジェクトを返そうとするとエラーになる場合の対策

先日、ASP.NETのWCFサービスでEntityFrameworkのDbContext経由で取得したモデルクラスのオブジェクトを返そうとして、壁にぶつかった。

発生したエラーの内容はこんな感じ。
Test method ServiceTest.CustLoadData threw exception:
System.ServiceModel.CommunicationException:
An error occurred while receiving the HTTP response to http://localhost:60741/MyService.svc.
This could be due to the service endpoint binding not using the HTTP protocol.
This could also be due to an HTTP request context being aborted
by the server (possibly due to the service shutting down).
See server logs for more details.
---> System.Net.WebException: The underlying connection was closed:
An unexpected error occurred on a receive.
---> System.IO.IOException:
Unable to read data from the transport connection:
An existing connection was forcibly closed by the remote host.
上記のエラーはWCFサービスの呼び出し側で表示されるエラーなので実際に起こっているエラーの原因はちょっと違う部分にある。


いろいろデバッグに苦労したけれど、とりあえずどうやらWCFサービス内でオブジェクトを返すためにシリアライズしようとしている所でエラーが起きているらしい、という事が分かった。

原因は、DbContextの動作原理としてPOCOに対する変更追跡と遅延ローディングを実現するために内部的に「動的プロキシクラス」というものを生成している事にあるらしい。

動的に生成されたプロキシクラスはシリアライズ対象に出来る「既知のクラス」として認識されないのでエラーになってしまう様だ。

POCO エンティティの使用 (Entity Framework)
『Windows Communication Foundation (WCF) では、プロキシを直接、シリアル化または逆シリアル化できません。その理由は、DataContractSerializer では既知の型のみのシリアル化または逆シリアル化ができますが、プロキシ型は既知の型ではないためです。』

結局対策としては

this.Configuration.ProxyCreationEnabled = false;

の1行をDbContextクラスのコンストラクタ内に入れる事で解決した。
これでデータ取得時に動的プロキシが作成されずに純粋なPOCOが返って来るので、シリアライズ時に問題が発生しなくなる。


ちなみにMSDN内の下のページには「シリアル化中にProxyDataContractResolver クラスを使用してプロキシ型を POCO 型にマップ」する方法が載っている。でもちょっと試してみたところ上手く行かなかったので今回はパスした。
チュートリアル: WCF による POCO プロキシのシリアル化 (Entity Framework)


他の解決策として、動的プロキシの作成を抑止せずにWCFサービスでオブジェクトを返す前に手動でPOCOにデータを詰め替えるという方法もある。

データを詰め替えるのはAutomapperなどのライブラリを使えば簡単に出来るので、ProxyCreationEnabled を falseにするという解決策を取りたくない場合はそちらでも良いかも知れない。



その他参考になりそうなURL:

Entity Framework 4, WCF & Lazy Loading Tip | .NET Zone


Entity Framework v4 POCO templates: repository returns object of incorrect type - Stack Overflow





 

2012年11月23日

DotInstallのTodoアプリケーションをASP.NET MVC4/C#で作りなおしてみた


元のレッスンはこちら。
PHP/jQueryで作るToDoアプリ (全20回) - ドットインストール

作ったものはこちら。

Todo_ASPNETMVC4 - GitHub
Zipダウンロード 

元のアプリケーションがシンプルなだけに特に引っかかる箇所もなくサクサク進んだので楽しかった。

jQuery UIの sortable を使った事がなかったので良い練習になった!

あっ、そう言えば最初の準備段階でこんな問題があったりしてちょっと引っかかった。けどASP.NET MVC4のCode Firstの練習にもなった。^^



 

gitで既にコミットしてしまったファイルを無視する様に変更したい場合は

今日、ASP.NET MVC4の Code Firstを試していてgitでつまづいたので将来の自分用にメモ。

Code FirstでDbContextクラスを作ってモデルクラスを作って、Package Managerコンソールから「Update-Database」を実行すると、無事App_Dataフォルダにデータベースファイルが作成された。

モデルクラスに対応したテーブルも自動的に作成されていて、素晴らしい!

と感動したものの、考えてみるとこのデータベースファイルは出来ればgitの管理下には置きたくない。

ところが気付いた時点では既にGitHubにデータベースファイルもろともpushした後だった。

あわてて .gitignoreファイルに
*.mdf
*.ldf
の2行を追加した。

それから git rm -f *.mdfしてみたり試行錯誤してみたけれども、どうも上手く行かない。

まだまだ git の事を理解していない証拠だな~、とちょっと落ち込む。

とりあえず検索して何とか答えが見つかった。
pushした後に.gitignoreに追加したのが良くなかったみたいだ。

git - Visual Studio gitignore and mdf, ldf files - Stack Overflow


  1.  一旦.gitignoreから*.mdf, *.ldfの設定をコメントアウトする。
  2. git rm --cached -- *.mdf を実行。
  3. git rm --cached -- *.ldf を実行。
  4. git commit -m "コミットメッセージ" を実行。
  5. 1でコメントアウトした.gitignoreの設定を戻す。

この操作で無事データベースファイルが除外された。




 

2012年11月21日

Android 4.2で今度こそ反応の良い楽器アプリは可能になるのか!?

以前からAndroidで良い(=実用になる)楽器アプリが存在しないのを残念に思っていた。


AndroidでiPhoneに匹敵する楽器アプリの作成が困難な理由

Android 4.0で反応の良い楽器アプリは可能になるのか




が、Android 4.2になってその状況もついに変わるかも、と思わせてくれる記述が公式ドキュメントの中にあった。


開発者にとってAndroid4.2は何が新しくなったか - Firespeed
Jelly Bean | Android Developers


Low-latency audio
Android 4.2 improves support for low-latency audio playback, starting from the improvements made in Android 4.1 release for audio output latency using OpenSL ES, Soundpool and tone generator APIs. These improvements depend on hardware support — devices that offer these low-latency audio features can advertise their support to apps through a hardware feature constant. New AudioManager APIs are provided to query the native audio sample rate and buffer size, for use on devices which claim this feature. 
(以下意訳)
Android 4.1でOpenSL ESによる低遅延再生、SoudPoolやトーンジェネレータAPIなどが改善されましたが、Android 4.2ではさらに低遅延な音声再生をサポートします。これらの改善点の恩恵を受けるにはハードウェアのサポートが必要です。低遅延再生をサポート可能なハードウェアは、アプリケーションに対してハードウェアフィーチャー定数を通じてその事を知らせます。新しいAudioManager APIを使うと、この機能をサポートしているハードウェア上でネイティブなオーディオサンプリングレートとバッファ・サイズを問い合わせる事が出来ます。

早速、先日Android 4.2に更新されたNexus 7でピアノアプリ「xPiano+」を試してみた。

このアプリは僕が今までAndroid上で試した数種類のピアノアプリの中では最も反応が良かったものだ。と言ってもiOSデバイスの楽器アプリとは全く違って、ちょっとでも速く鍵盤を叩くと遅延が気になってとても実用的に演奏出来るとは言い難かった。

4.2に更新されたNexus 7で試してみたところ、確かに前よりも反応が良くなっている!

感覚的なものなので数値に表すのは難しいけれども、「格段に良くなっている」と言える。

おそらくまだ4.2の新しいAPIを使った最適化はされていないと思うので、今後アプリ側が4.2に合わせて最適化されればもっと反応が良くなる可能性もあると思う。

ただし、まだまだiOSデバイスに匹敵するとは言い難そうだ。

これから何世代かかけてハードウェアがどんどん良くなって行ったとしても、そもそもJavaベースで動いているAndroidというOSでどこまでの「低遅延化」が可能なのかという問題がある様な気がする。

もちろんOSの深い所はC++などで書かれているみたいだし、アプリケーションもNDKを使えばC言語(C++)で開発する事は可能だ。やはり究極の低遅延化を目指そうとすればC言語で開発するしかないのだろうか。

いずれにせよ、Android 4.2で「反応の良い楽器アプリ」の実現に少し近づいた事は間違いない。今後どんな楽器アプリが登場してくるのか、(あるいはやっぱりダメなのか、)期待しながら待ってみようと思う。






2012年11月7日

Galaxy S IIIをAndroid 4.1.1 にアップデートしたらEclipseからアプリの実行が出来なくなった件


ついこの間 Galaxy S III にOSの更新の通知が来たので何も考えずにアップデートしたら、Androidのバージョンが4.1.1になった。

それはいいのだけれど、その後実機でのデバッグが出来なくなってしまった。

Galaxy S IIIをUSBでMacにつないだ状態でEclipseからアプリを実行しようとすると、「Failed to install ........ timed out. Launch canceled.」というエラーになってしまう。

検索してみた所では、このスレッドの最後(2012/10/24)に書かれているコメントが最も近いような気がする。

android - Unable to debug via eclipse on phone with Jelly Bean - Stack Overflow

『After inspecting my UMASK, I saw it's now 0000 (and it was 0077 on stock kernel), so I concluded that the wrong UMASK was the root cause of the error.
Still, as can be seen from numerous other threads on this issue out there, it's very wrong for the stock kernel to cause that problem.』

という事は Android 4.1.1自体のバグなのだろうか。

これは困った。。。

幸いな事に Android 4.1.2 の Nexus 7 の方は全く問題ないので、しばらくはそちらで開発するしかないかも知れない。

この機会にいっそGalaxy S IIIをRoot化してみるかな。^^


追記1:

下記にもある通り、Android 4.1 (Jelly Bean)からデフォルトのumask値が000ではなく077になった事が関係している模様。

[Q] Jelly bean and apk. - xda-developers
Eclipse や adb installを使わずに手動でAPKファイルを端末にコピーしてからインストールすれば動かせるらしい。でもそんな面倒な事はやってられないな〜。


追記2:

試しに

 adb install bin/[APPNAME].apk

を実行してみると、

 Failure [INSTALL_FAILED_ALREADY_EXISTS]

というエラーになった。そこで

 adb uninstall [PACKAGENAME]

をすると、Success になったので、その後もう一度、

 adb install bin/[APPNAME].apk

を行うと Success というメッセージが表示されてアプリがインストール出来た!

ただやはりEclipseから実行した場合はエラーになってしまう。変更する度にuninstallとinstallをコマンドラインでやらないと行けないのは面倒過ぎるので、何とか早く直って欲しいものだ。




2012年11月3日

iPad miniを触って感じた事

仕事の合間に近くのAppleストアに行って iPad miniをちょっとだけ触って来た。


一触瞭然 - 品評 - iPad mini
『今日から Kindle Fire や Nexus 7 を買う人は、情弱乙という他ない。』

確かにその通り。
僕の様に「分かっちゃいるけどAndroidが好き」という人でなければ、もうこれで何も迷う事はない。

少なくとも、これから僕が家族・親戚・友人に勧めるのは、間違いなくこれだ。


miniの感想


この軽さ。この薄さ。そして質感。やっぱり素晴らしいの一言に尽きる。

普通のiPadの上にiPad miniを載せて液晶画面の実質の大きさを比べてみたら、思ったよりも違いは少なかった。全体的には小さくなったと言っても、これなら見た目も指での操作感も、ほとんど違和感が無いはずだ。

年末に向けてこれはきっと売れまくる。
売れすぎて普通のiPadの売上を侵食して、結果的にAppleの売上が下がってしまうのではないか、と要らぬ心配までしてしまうほどだ。(もしそうなっても利益率的には変わらないのかな?)

※2012/11/6 追記: 『iPad miniの粗利益率は他の製品と比べて大幅に低い』との事。
Apple Says The iPad Mini’s Gross Margin Is “Significantly” Lower Than Its Other Products | TechCrunch



iPadとの比較


さて、15分ほどiPad miniを試した後、第4世代iPadというものを手に持って見た。

iPad miniから持ち替えると、さすがに手にずっしりとその重さが感じられる。これは重たい。筋トレを兼ねるのでなければ、ずっと手に持ったまま操作するものではない。

ただ、今さら言う事でもないけれど、Retinaディスプレイの美しさはさすが。

細かい文字を表示した時の読みやすさの違いはあまりにも歴然としている。この画面を見てしまうと、今度はminiの解像度がどうしても残念に思えて来てしまう。


今日の結論


まあ、いずれにせよ、miniは買っておこうと思う。子供用にぴったりのサイズと軽さだから、もしかしたら2台買ってしまうかも知れない。


参考リンク:




2012年10月30日

有料メルマガ「週刊 Life is Beautiful」を購読開始!

前から気になっていながらなかなか出来ていなかったのだけども、ついにこの10月から中島聡さんのメルマガ「週刊 Life is Beautiful」を購読する事にした。

早速今週配信の内容にこんな一節を見つけて、「やっぱりそうか〜」と興奮してしまった。
『何年か前に、インタビューで「プログラマーを目指す学生が最初に勉強すべき言語は何だと思いますか?」と質問された時に、迷いながらも「JavaScript」と答えたことを覚えています。今なら迷わず、JavaScript だと答えます。それどころか「node.js こそが最初にプログラミングを勉強するのに最適な環境」と答えます。』

また、iOSアプリで音声と画像によるリアルタイムな情報共有機能を実装するためにXMPPプロトコルを調べていたら node.js に興味を持って、それをきっかけに node.js を使えば今まで解決出来なかった Single Page Applicationの実装上の問題点を解決出来る事に気付いたという話は特に面白かった。そこからXMPPの事はひとまずそっちのけで興味と情熱の赴くままに AJMax というMVCフレームワークを作ってしまったという所がさすがにすごい。

自分も技術者として仕事をしている限りはいつかは中島さんの様なレベルに少しでも近づきたいし、改めて目指すべき方向を明確にしてくれたという時点で既に購読料の元は取れた気がする。

他にMicrosoftを辞める時のスティーブ・バルマーとのインタビューの話などもあり、読み物としてもとても興味深い。

実は有料メルマガを購読するのは今回が初めてだったのだけれど、もっと早くから購読していれば良かったと思う。 

これから週1回の配信が楽しみだ。





2012年10月19日

Android 4.1.2へのアップデートでNexus7のホーム画面が横置きに対応!

ちょっと前にNexus7にOSの更新の通知が出ていたので、更新するとAndroidのバージョンが 4.1.2になった。

特に更新前との違いに気付かなかったので忘れていたのだけれど、今日ふと画面の自動回転を有効にして試してみると、横置きにした時のホーム画面の使いづらさが見事に改善されていた。

これは嬉しい!

これで横置き対応だけのために Nova Launcher などのサードパーティのホームアプリを入れなくても良くなった!

ロック画面もこの通り横置きに対応

横置き
縦置き




2012年9月20日

ASP.NET MVC4のBasicテンプレートから作成したプロジェクトでWebGridヘルパーが使えない場合の対処

Visual Studio 2012 + ASP.NET MVC4でWebGridヘルパーが使えないという問題に遭遇した。




プロジェクトを作成する時にテンプレートを選ぶ画面で、EmptyかInternetを選択すると、問題は発生しない。

Basicテンプレートを選択した時のみこの問題が発生する。




そこでEmptyテンプレートから作成したプロジェクトとBasicテンプレートから作成したプロジェクトの違いを調べた結果、次の方法で解決出来る事が分かった。


1. Solution ExplorerのReferenceを右クリックして、「Add Reference」を選択。



2. 「System.Web.Helpers」のVersion 2.0.0.0を選択して追加する。


3. 追加したDLL参照のプロパティを開いて「Copy Local」をTrueに変更する。


この「Copy Local」をTrueにする、というのがミソらしい。


これで無事WebGridヘルパーが使える様になった。


多分近いうちに修正される不具合だとは思うけれど、もし他にもBasicテンプレートを使ったプロジェクトで何か上手く行かなかった場合はこれで治るかも知れない。








.






2012年9月15日

GitHub for Windowsミートアップというものに行ってきた

最近MicrosoftからGitHubに移ったPhil Haack氏がハワイに来られていて、GitHubやGitHub for Windowsの話をしてくれるというので、参加して来た。





以下、メモした事をざっと箇条書きで。

GitHubでの働き方について

組織はほぼフラット。Microsoftの時とはかなり違う。

現在60%以上の社員が遠隔勤務をしている。色々なコミュニケーションツールがあるので遠隔でも特に困る事はない。

特に決まった勤務時間は無い。バケーションも「必要なだけ」取って良い。(うらやましい~!)


GitHubの機能

GitHubのWebサイトでは「?」キーでキーボードショートカットのヘルプが表示される。
特にソースコードの画面で「t」を押して検索出来るのが便利。

Adminページの「Automatic Page Generator」という機能も便利なのでぜひ使って欲しい。

TortoiseSVNなどからソースコードをチェックアウトする事も可能。


GitHub for Windows の紹介

GitHub for Windowsでは、「Sync」というボタンがあるがこれは 「git pull --rebase」 を行うのと同等。


その他のTipsやデモ

Gitを学ぶ時は、「SeeGit」を使って可視化すると分かり易いのでぜひどうぞ。

GitHub特有の「Pull Request」機能の説明とデモ。

GitHub APIを使ったコミットオブジェクトへの情報追加のデモ。
(Power Shell + curlでAPIを呼びだそうとしたけど、残念ながらこれは上手く行かなかった。)




最後にGitHubのステッカーをもらって来た。どこに貼ろうかな。^^



ミートアップの後何人かはそのまま「Kanpai(と英語でそのまま言っていた)」をしに近くのバーへ行ったみたいだった。(費用は全部GitHub持ち!)

僕は時間が無かったのですぐに帰ったけれど、アメリカでも最近はこういう、仕事の後に同僚と飲んでコミュニケーションするというケースが増えて来つつあるのかも知れない。だとするとちょっと興味深い。

そもそもGitHubは数人の仲間がバーで飲んでいる時にアイデアが生まれたそうで、そういう文化が特に強くあるのかも知れない。



関連リンク:

Githubではなぜ人が辞めないのか? | IDEA*IDEA

CEOが自ら語った「イノベーションを起こすためのGithubの哲学」 | サンフランシスコ・シリコンバレー拠点のクリエイティブエージェンシー・btrax スタッフブログ













.


2012年9月7日

WindowsでPHPからSQLServerに接続するには

ちょっと調べる必要があったのでさりげなくメモ。

PHPから Microsoft SQLServer に接続するには2つの方法があるみたいだ。

①ODBCを使う

②Microsoftが提供する「SQL Server Driver for PHP」を使う


①の方法の場合は、
$result = odbc_exec($connection, 'SELECT FirstName FROM Names');
という風にodbc_xxxxxというメソッドを使ってSQLServerにアクセスする事が出来る。
http://davidwalsh.name/php-microsoft-sql-server-mssql-iis-connect-query-odbc

ただし下準備としてODBCの接続設定が必要。




②の方法の場合は、詳しい設定方法の説明が下のページにあった。
http://jimmyli.net/2010/08/talking-to-sql-server-with-php-on-iis/

また、「Native Client」というモノもインストールする事が必要らしい。
http://msdn.microsoft.com/en-us/library/cc296170(v=sql.105).aspx





以上メモ終わり。






.

2012年8月30日

Windows 8をインストールしたらまず覚えたいショートカットキー

先週、古いノートパソコン(DELL D520)にWindows 8をインストールしてみた。

予想外に動作が軽快だったので驚いてしまった。

そこで早速本格的にメインのPCも Windows 8 にしようかと思っている。

ただやはり色々と Windows 7から操作が変わっている部分もあるので、ショートカットキーを覚えて作業を効率化したい。

Scott Hanselman氏のブログに便利なショートカットキーが載っているのでメモしておこうと思う。
Windows 8 productivity: Who moved my cheese? Oh, there it is. - Scott Hanselman

なお、下記には Windows 8 で追加されたものだけではなく Windows 7 でも既に使えるものも含まれている。



ロック状態からログイン画面を呼び出す


一部では「上にスワイプする必要があるので不便」などと言われているらしい(?)が、そんな必要は無い。ただロック画面のどこかをクリックするだけ、もしくは何らかのキーを押すだけでOK。


シャットダウンする


下の様にいくつかの方法がある。
  • CTRL+ALT+DELを押してから画面右下の電源ボタンのアイコンをクリック→シャットダウン。
  • Win + I を押してから電源ボタンのアイコンをクリック→シャットダウン。
  • デスクトップで ALT + F4 を押してシャットダウンを選択して、ENTER。
まだ他にもあるかも。


管理者用画面を開く


Win + X を押してメニューから選択。それぞれのメニュー項目にはショートカット用のアルファベットが決められているので、それを覚えればさらに快適。(下記は英語UIで確認したもの。日本語UIだとキーの割り当ては違うかも?)
Win + X, F  → Programs and Features
Win + X, O  → Power Options
Win + X, V  → Event Viewer
Win + X, Y  → System
Win + X, K  → Disk Management
Win + X, G  → Computer Management
Win + X, C  → Command Prompt
Win + X, A  → Command Prompt (管理者権限)
Win + X, T  → Task Manager
Win + X, P  → Control Panel
など


Windowsキーと他のキーの組み合わせ


Win + E      → Windows エクスプローラ
Win + R      → コマンド実行
Win + Break   → システム情報
Win + D      → デスクトップを表示
Win + プラス   → 画面を拡大表示
Win + マイナス  → 画面の拡大表示を戻す
Win + F      → ファイル検索
Win + W      → 設定画面を検索
Win + Q      → アプリケーションを検索
Win + C      → 現在時刻とチャーム(画面右に出てくるパネル) を表示
Win + K      → デバイス設定
Win + I       → 画面の明るさ、ボリュームその他各種設定
Win + L       → 画面をロック
Win + 矢印    → ウィンドウを矢印の方向に自動配置(上で最大化)
Win + ,(カンマ)  → 一時的に(Winキーを離すまで)デスクトップを表示
など

タスクバーにピン止めしたアプリを開く


Win + (数字)でタスクバーの左端からの位置に対応したアプリが開く。
一番左端のアプリは Win + 1
2番目のアプリは Win + 2
など
これはWindows 7でも使える。










.


2012年8月28日

Grouponの通知メールを解除したら面白かった件

最近Grouponからの通知メールの量が多くて気になったので、解除してみた。すると意外にも面白くて笑わされてしまった。

右上の「Unsubscribe」というリンクをクリック。

普通の登録解除画面だったらこれで「登録解除されました。」というメッセージが出ておしまいだ。だけど今回は違った。

突然デスクで居眠りしているDerrikさんの写真が出てくる。予想していなかっただけにインパクトがあった。

Flash動画で微妙に揺れているDerrikさん。

「PUNISH DERRIK」ボタンをクリックすると...

ドアから同僚が現れ、なにやら責められて最後にはカップの飲み物をかけられるDerrikさんが。思わずかわいそうになってしまう。



最後に「Derrikがかわいそうだと思ったらもう一度登録してね」というメッセージで終了。

もうちょっとで「Resubscribe」ボタンを押してしまうところだった。(笑) 









.

2012年8月25日

Nexus 7用のケースとスタイラスペンが届いた

Nexus 7用に注文していたケースとスタイラスペンが先週届いた。ちょうど一週間使ってみて、かなり手に馴染んできた。




i-BLASON Auto Sleep / Wake Google Nexus 7 inch Tablet 100% Genuine Leather Case Cover / Stylus for 8GB 16GB 3 Year Warranty (Blue)


このケースには先端部分がゴム製のスタイラスが付属している。ただゴムなので予想した通り「スラスラ書ける」感じではなく少し抵抗がある。

なので別途安い割に評判も悪くなかった「amPen」というものを購入した。こちらはさすがにスラスラ書ける。ほとんど抵抗が無いので感動してしまった。

これで本当に「紙のノートを置き換えて仕事でバリバリ使う」事が出来そうだ。

amPen (TM) New hybrid stylus for ipad 3, iphone 4s, kindle fire, nexus 7, galaxy S 3 (Black) [in AM Retail Packing]


大きさも見た目もほぼシステム手帳なのでこのまま持ち運んで歩いても全く違和感が無いのが嬉しい。

ケースを閉じると自動的にスリープモードになる。そして開くと自動的にONになる。これがとても便利。実はこのケースを買って一番良かった点はこれかも知れない。

電源ボタンを押す必要があるかどうかというほんのささいな差なのだけれど、これがあるのと無いのとでは日常の使い勝手がかなり変わってくると思う。




もちろんスタンドにもなる。

ただ標準のスマートフォンUIだと横置きではホーム画面に戻った時に最強に使いにくいので、最近はもっぱら縦置きで使うようになってしまった。慣れというものは恐ろしい。(笑)











.


2012年8月11日

Nexus 7で「7Notes with Mazec」を使ってみた感想

「交ぜ書き」機能と言うのがすごい。「後から変換」機能も素晴らしい。



これなら充分仕事のミーティングで使えそうだ。
しかも使えば使うほど効率が良くなって行く様な行くような気がする。

画面を横向きにすれば一気に書いて変換出来る量が増えてとても良い感じだ。

Google日本語入力など他のIMEと比べても、人と話しながら書きやすいのは Mazec の方だ。

フリック入力だと、フリック操作自体に常に集中力を奪われてしまう。
手書きだと喋りながらでも手軽に書ける点が良い。

慣れてくれば右手で書いて左手で変換候補を選択すると言うワザが使える様になって来る。これが出来ると断然入力速度が上がる。

欲を言えば、改行とBackspaceのボタンがもう少し大き目で押し易ければ最高だ。

今は指で書いているけれども、スタイラスペンを使ったらもっと快適になるのではないだろうか。Amazonで注文したスタイラスが届くのがとても楽しみだ。


しかも、手書き入力というものには思わぬ副産物が付いてくる。

これは漢字の練習にもなるのだ。日頃キーボードばかりで漢字を忘れてしまっている僕の様な人間には良いリハビリになるかも知れない。











.


「Google Nexus 7」を買って10日目の感想

●ハードウェア



ハードウェア的な仕様はこちらを参照。
【レビュー】199ドルを実現したGoogle独自タブレット「Nexus 7」を試す(外観編) (1) まずは仕様・デザインを確認 | 携帯 | マイナビニュース 
画面はまずまず見やすくてきれいだし、スピーカーの音質にも不満は無し。
バッテリーの持ち具合も今のところ結構良い感じ。


●不要なプリインストールアプリが無いのが嬉しい


Galaxy S IIIにはSamsung製のアプリがたくさんプリインストールされていてちょっと目障りだった。もちろんNexus 7ではその様な事は無い。アプリ一覧の画面もすっきりしていて気持ちがいい。




●タッチへの反応にはちょっと不満


スクロール時の滑らかさはいい感じだと思うけれど、たまにタップになかなか反応せずボタンなどを2,3回押さないと行けない事がある。これはタッチスクリーンの初期不良か何かなのか? と思ってしまう。かと思うと全く快調に反応する日もあったりして、まだ良くわからない。



●Bluetoothでキーボードとトラックパッドを接続したら便利だ!


AppleのBluetoothキーボード(英語配列)を接続してみたら、何の問題もなくすぐに使える様になった。これは便利かも。

ついでにAppleのトラックパッドもつないだ。こちらも接続は全く問題無し。

日本語入力用IMEについては、初期状態で「iWnn IME」が入っていた。外部キーボードをつないだ状態ではこれを使うのが無難そうだ。なぜかと言うと、他のIMEだと日本語変換のON/OFFが外部キーボードから出来ない場合が多いからだ。

「Google Japanese Input (Beta)」や「Shimeji」を試した限りでは、外部キーボードとの相性という意味ではやはり標準で入っているiWnnが良いみたいだ。



●ホーム画面に戻ると強制的に縦表示になってしまう


(この問題はAndroid 4.1.2への更新で解決済み。下の追記参照)

おそらくマウスやトラックパッドを接続して使う場合に最も困るのがこの点だ。アプリ画面では横向きで作業出来るのに、ホーム画面に戻った途端に強制的に縦表示になってしまう。端末自体はまだ横向きのままなのに、だ。

そして、その状態だとマウスポインタを横に動かすと見た目上は縦に動いてしまって、ものすごく使いづらくなる。

一体全体、Googleの人達は縦置きでしか使ったことが無いのか、と言いたくなってしまう。

画面の表示はそのままでもいいので、少なくともマウスポインタの動きだけは本体の物理的な向きに追従する様に出来ないものだろうか?

これは本当になんとか改善して欲しい。マウスやトラックパッドを全く使わないとしても、スタンドなどにセットして横向きで常用したい人にとっては悪夢の様な仕様だ。

下のサイトのTipsの#38に対処方法があった。ホーム画面を横向きにする事が出来るらしい。但しまずRoot化が必要との事。
http://blog.the-ebook-reader.com/2012/07/18/40-tips-and-tricks-for-google-nexus-7-tablet/
こちらに載っているのも多分同じ方法。
Nexus 7を完全なタブレットUIにするカスタマイズのスゝメ - Digital Grapher
http://digitalgrapher.blogspot.jp/2012/08/nexus-7ui.html

上の「ro.sf.lcf_density=213」の213を170に書き換えるというやり方以外に、 「launcher.force_enable_rotation=true」を書き加えるという方法もあるみたい。
Nexus 7 をタブレットUI~ホーム画面が横回転するようにした。
http://usagisaigon.blogspot.com/2012/08/google-nexus-7-ui.html
確かにこちらの方がJelly Beanらしくて良さそうだ。

出来ればRoot化しなくてもGoogleが標準で対応してくれるのが望ましいと思う。

あるいはやっぱりNexusシリーズはRoot化して自己責任で色々いじって使うのが基本なのだろうか。Nexus 7のRoot化はそれほど難しくないみたいなので、近いうちにチャレンジしてみるかも知れない。



※ 2012/9/27 追記:
コメントで別の解決策を教えてもらった。
「Nova Launcher」をインストールしてデフォルトのホームアプリにすれば横置きでも問題なく使える様になった!



※ 2012/10/18 追記:
Android 4.1.2へのアップデートでNexus7のホーム画面が横置きに対応!
これで上の不満はようやくスッキリ解決。^^/



●デフォルトではカメラアプリは無い


このアプリをインストールすればフロントカメラで写真やビデオが撮れる様になった。
https://play.google.com/store/apps/details?id=com.modaco.cameralauncher
あまり使う機会は無いと思うけど、せっかくカメラがあるのだから一応入れておこう。

でも使って見ると、フロントカメラで自分以外のモノを撮るというのは、実はなかなか難しく、実質的に実用には向かない事が判明した。(当たり前か...笑)

ちょっとしたメモ代わりに書類やホワイトボードなどを撮影してそこに手書きで何か書き込みたい、という様な場面もある(かも知れない)ので、背面カメラはタブレットでもやはり必要なのではないかと思った次第。



●PDANetを使ってテザリング


米国Sprintの携帯回線を使っていると、追加オプション(月19ドル)を契約しないとテザリング機能が一切使えない様になっている。(Wifi, Bluetooth, USBのどれもテザリング実行前にSprintのサーバーに契約の有無を確認しに行っているみたいだ。)

でも、「PDANet Tablet」というアプリを入れれば非公式にテザリングが出来る。
Nexus7をxperiaでテザリング(PDaNet利用)
http://onboradcamera.blog.fc2.com/blog-entry-12.html
携帯が Galaxy S III の場合はアプリがまだ対応していないらしく、上手く動かなかった。HTC Evo 4G で試すと問題なくテザリング出来た。




●さて、何に使うかが問題...?


さて、ハードウェア的にもまずまず不満はないしソフトウェア的には最新のJelly Beanが載っているこの素晴らしいNexus 7、あまり良く考えもせずに勢いで買ってしまったわりに実はこれと言った用途が思い浮かばないので困ってしまった。

こんな事なら250ドルをiPad Miniの為に貯金しておいた方が良かったのではないか。

いやそんな事はない。これがあれば常に最新のAndroidバージョンで自作アプリの実機確認が出来るではないか。

そうだ、アプリ開発のデバッグ用にじゃんじゃん使おう。いやそれなら既にGalaxy S IIIがあるじゃないか、画素数的にも同じだし。

では電子書籍リーダーとして...はどうせ多分使わない。音楽プレーヤーとして...は大き過ぎる。ゲーム用端末...そもそもゲームしてる時間が無い。映画鑑賞?...ならiPadもMBAもあるし。


と色々考えた末、今のところ最有力になりつつあるのは「紙のノートを置き換える」という用途。

この為に手書き入力用アプリ「7 Notes with Mazec」も買ったし、スラスラ書けそうなスタイラスペンもオーダーした。もちろん無料の「Skitch」もインストール済みだ。

これでなんとか後悔せずに済むのではないだろうか。











.





2012年7月28日

個人データの同期とバックアップについて考えてみた

●現在の環境


まず僕の現在の環境は以下の通りになっている。

  • 会社で使うメインマシン - Windows 7 
  • 会社と自宅で使うサブマシン - MacBookAir 
  • 自宅で使う開発用マシン - Linux(Ubuntu 11.10)


●同期・バックアップの対象となるデータ


対象データを分類すると次の様な感じになった。
  1. 自分のAndroidで撮った写真・動画
  2. 奥さんのiPhoneで撮った写真 ・動画
  3. その他の写真・動画
  4. ドキュメント(Word、Excelなどの文書)
  5. KeePassのデータファイル
  6. アプリ開発用素材データ(画像・音楽・効果音など)
これらのデータが、必要なマシンに出来るだけ効率良く同期されバックアップされている状態にしたい。



●用意するもの


  • Google+
  • Google Drive (DropBoxかSkyDriveでも可)
  • SugarSync
  • Wuala
  • Amazon S3 
  • ローカルバックアップ用DVD 




●写真と動画


Android, iPhoneで撮った写真と動画は基本的に全てGoogle+にアップロードする事にする。Google+のモバイル用アプリの「インスタントアップロード」機能を使うと自動的にアップロードされるので便利だ。ピンぼけした写真や要らない動画は後から消せばいいやという考え方だ。

容量無制限で無料との事なのでコストを気にする必要が無いのが嬉しい。(ただし画像のサイズや動画の長さには多少制限がある。)

家族や親戚に近況報告代わりに写真を見せたい時にはここから共有すれば簡単に出来る。

ただGoogle+だけだとWindowsとMacへの同期が出来ないので、さらにSugarSyncの自動アップロード機能も使う。

Androidの場合、SugarSyncのアプリをインストールし「写真の自動同期」と「ビデオの自動同期」を有効にしておくと、WindowsとMacの「Mobile Photos」というフォルダに携帯で撮った写真と動画がコピーされる。こうすれば写真や動画を取り込むためにわざわざUSBケーブルをつなぐ必要が無くなる。

Android用SugarSyncの自動同期の設定画面。
外部電源接続時のみ実行するようにしておけばバッテリーの心配も要らない。


iPhoneでもSugarSyncアプリからWindowsやMacの「Mobile Photos」フォルダに簡単にアップロードする事が出来る。ただしこちらは自動ではなく、送りたい写真を選択して「アップロード」ボタンを押す必要がある。
iPhoneとMacだけならiCloudという選択肢もあるけれども、現時点のiCloudでは動画は対象外だし、AndroidとWindowsも含めて考えると現状ではSugarSyncが最も便利ではないかと思う。
SugarSyncを使ってiPhoneの写真をアップロードする方法 - YouTube



●ドキュメント


ドキュメント類は Google Drive を使ってWindowsとMacの間で同期する。
DropBoxやSkyDriveでも良いと思う。ただGoogle Driveに入れておけばブラウザでGmailを開いている時にもすぐにアクセス出来るので気に入っている。

Linux用のクライアントが出ればもっと便利になるのだけど。



●KeePassのデータファイルと素材データ


KeePassのデータファイルとアプリ開発用素材データに関しては、Linuxも含めて全ての環境で最新のものを利用したい。そのために Wuala を使う事にする。

SugarSyncだとこれ(Linuxも含めた同期)が出来ないのが残念だ。他の選択肢としてはDropBoxもある。ただ、以前のエントリでも書いた通り、個人的な印象としてDropBoxのセキュリティには少しだけ不安がある(※1)のと、僕自身にどうしようもなく「どちらかと言うとマイナーなものを使いたい」という性癖があるのでまずはWualaを使おうと思っている。


※1 つい最近もこんな事例が。
Dropbox が従業員アカウントからユーザ情報を漏洩。セキュリティ対策を強化
Dropboxが約4時間すべてのアカウントのロックを解除してしまう事故が発生



●全てのデータのバックアップ


数あるクラウドストレージの中でもやはり「Amazon S3」の信頼感は絶大。なので出来れば全てのデータを定期的にS3にアップロードしておきたい。おそらく1ヶ月で2~3GB程度にはなると思うので、どれくらいの頻度でアップロードするかはまだ決めていない。ツールとしては Cyberduck を使うのが良さそうだ。

最後にローカルバックアップとしてDVDにも焼いておけば完成だ。1ヶ月に一回は行いたい。(面倒だから半年に1回くらいになるかも。)




●まとめ


図に描くと大体こんな感じになる。


以上、とりあえず現時点での個人的なデータの同期&バックアップ戦略をまとめてみた。

ちょっとやり過ぎかなとも思うけれども、自分で撮った写真や動画は他に代えがたいものだし、一度失ってしまうと取り戻す事も出来ない。なので単一のサービスに依存する事なくしっかりバックアップしておきたい。

またデバイス間の同期に関しては一度設定してしまえばあとは自動的に実行されるので、ほとんど手間はかからない。

今までは写真や動画がバラバラといろんなデバイスの様々なフォルダに散在している状態だったので、こうして図に描いてまとめてみると気分的にもスッキリとする。











.

2012年7月25日

米国Sprint版「Galaxy S III」の使用感


samsung-galaxy-s-iii-galaxy-s-3-8

購入1週間後の感想。
以下、☆は良かった所、■は今ひとつな所。

☆薄くて軽いのでポケットに入れやすい! (HTC Evo 4Gとの比較で)

☆WiFiの「つかみ」がかなり速くなった。 (HTC Evo 4Gとの比較で)

☆通知領域を開くと上に出て来る各種設定ON/OFFボタンが便利!
Screenshot_2012-07-24-13-11-58

☆カメラが高機能! 連射機能とかHDRとか面白そう。

☆バッテリーの持ちは問題ないレベル。僕の使い方(使用しない時はWifi/3G/GPS/自動同期をOFF)だと50時間は充電なしで使えそう。
2日と5時間でバッテリー残量27%


☆RAMとストレージ容量に余裕があるので気持ちが楽。(これは大事。笑)


■つるつるしていて操作中に気を抜くと落としそうになる。

■両サイドの音量ボタン・電源ボタンを間違って押してしまう事がある。

■輝度100%でも直射日光の下では少し見辛い。

■戻るボタンとメニューボタンがハードウェアボタンとして付いているのはいいのだけれど、デフォルトではすぐにバックライトが消えて見えなくなってしまう。(設定で常時ONにしたら解決した。)


全体的にはとても満足。
これがあればNexus 7はもういいかな、とも思ってしまう。







.

2012年6月22日

Android: クリック時にボタンの画像を回転させる方法

押されるとカクッと画像の角度が変わるボタン。

ちょっと調べるのに時間がかかったので一応メモ。

まず res/drawable の下に例えば button_stateful.xml という名前でXMLファイルを作る。





あとは画面レイアウトのXMLファイルの中でボタンを下記の様に定義すればOK。













.

2012年6月9日

Windows/Mac/LinuxでSugarSyncの代わりに使えそうな4つのクラウドストレージ

いつまで経ってもSugarSyncからLinux用クライアントが出て来ない。

そのためしびれを切らしてSugarSyncから離れて他のサービスへ移行するユーザーも多いみたいだ。
SugarSync for Linux . Archive (504) . Feature Request . Forum . SugarSync Community

僕はと言えば以前にも書いた通り、Wine上でWindows版のクライアントを動かして凌いでいる。でもやっぱりネイティブなクライアントがあった方が良いに決まっている。

実際、Wine上のSugarSyncだと同期対象のフォルダ内でファイルを作成・変更してもリアルタイムにアップロードされないという問題がある。(SugarSyncクライアントを一旦終了して起動し直せばアップロードが開始される。)
SugarSync on Linux - Computer

単にLinuxユーザーの絶対数が少ないから開発費をかけるメリットが無い、という理由で切り捨てるのは馬鹿げている。Linuxだけを使っているユーザーよりも、WindowsやMacと併用しているユーザーの方が断然多いはずだからだ。

Windows/MacとLinuxを併用している場合、全ての環境で同じクラウドストレージを使いたいという要望が出て来るのは当然だ。DropBoxではかなり前からこれが実現出来ているし、他の多くのクラウドストレージサービスにも当たり前の様にLinuxクライアントが用意されている。


SugarSyncが何故これほどまでにLinux用クライアントを出さないのか、ここまで来るともうあきれるのを通り越して一種興味深いものがある。もしかすると水面下でMicrosoftと買収交渉でも進行中なのかな、と勘繰りたくもなってくる。(Microsoftは既にSkyDriveやLive Meshを提供しているので多分それは無いだろうけれど。)


さて、ここからが本題だ。

現時点で、Windows/Mac/Linuxで使える他のクラウドストレージサービスを探すとすれば、どんな選択肢があるのだろうか。

ざっと探したところ下の4つが見つかった。
















































さて、では実際にどれを使えば良いのだろうか。

上記のサービスについて、「運営会社の知名度・信用度」、「使われているセキュリティ」、「無料で使える容量」の3つの観点から比較してみた。

サービス名 運営会社 セキュリティ 無料容量
Wuala LaCie クライアント側で暗号化 5GB (+紹介ボーナス)
SpiderOak SpiderOak Inc. クライアント側で暗号化 2GB (+紹介ボーナス)
DropBox Dropbox Inc. サーバー側で暗号化 2GB (+紹介ボーナス)
4shared 4shared.com サーバー側で暗号化(?) 15GB


WualaをやっているLaCie社というのは、フランスのストレージ装置メーカー。米Seagate社に買収されるらしい。もしSeagateの一部門になれば資本規模も万全だし会社としての信用度はかなり高いと思って良いのではないだろうか。(買収後に切り離されたりしない限りは。)

セキュリティ的な観点から見ると、クライアント側での暗号化はぜひ欲しい。サーバー側での暗号化だと、従業員の不正やなんらかのミス、あるいは不具合などで暗号化前のファイルが流出してしまう可能性がどうしても否定出来ないからだ。

これを考えるとDropBoxは選択肢に入れづらい。
参考: Dropboxが約4時間すべてのアカウントのロックを解除してしまう事故が発生 : ライフハッカー

4sharedについてはセキュリティに関する説明があいまいで今ひとつ信頼出来ない印象を持ってしまったので個人的には選択肢からは外したい。

無料容量も出来ればSugarSyncと同等の5GBは欲しい。


以上の事から考えると、現時点ではWualaが最も有力な選択肢になりそうだ。

早速これから試してみようと思う。





追記1: 紹介ボーナスでWualaの初期容量が6GBになるリンクはこちら。→ Wuala


追記2: こちらの記事にも参考になる情報がたくさんあった。
Dropbox vs 他社オンラインストレージ:アナタに一番合っているのはどれ? : ライフハッカー[日本版]












.

2012年6月1日

UbuntuでFIT-PC2iの無線LANを有効にするには?

去年の1月から使っているFIT-PC2i。

前から気になっていた超小型省電力PCを試してみた
前から気になっていた超小型省電力PCを試してみた - その2 リベンジ編
超省電力な上に有線LANポート2つと無線LANが付いている面白いマシンだ。
8GBのUSBメモリに入れたUbuntu 10.04 Serverで順調に稼働している。

ただ、Ubuntu 10.04 Serverをインストールした直後の状態だと無線LANを認識してくれなかった。そのため今まで2つの有線LANポートを使って運用して来たのだけれど、やっぱりそろそろ無線LANも有効にして3つのLANをつなぐFirewallとして動作させてみる事にした。

無線LANを有効にする為の手順は次の通り。
  1. 無線LANチップのLinux用ドライバーをダウンロード。
  2. ドライバーのソースをコンパイル&インストール。
  3. wpa_supplicantの設定を追加。
  4. /etc/network/interfaceファイルに無線LANインターフェースの設定を追加。
  5. ネットワークサービスを再起動する。

1. 無線LANチップのLinux用ドライバーをダウンロード。


メーカのサイトからLinux用ドライバーをダウンロード。
http://www.ralinktech.com/en/04_support/support.php?sn=501
FIT-PC2iのハードウェア仕様を確認すると無線LANのチップは「RaLink RT3070」との事だったので、それに対応したものを選ぶ。


2. ドライバーのソースをコンパイル&インストール。


ダウンロードしたファイルを解凍して README_STA_usb というファイルを読むと、「Makefileを編集しろ」それから「 os/linux/config.mk」も編集しろ、と書いてある。
Build for being controlled by NetworkManager or wpa_supplicant wext functions
Please set 'HAS_WPA_SUPPLICANT=y' and
'HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=y'.
とりあえず wpa_supplicant の wext を使うと行けそうなので、上の通りに編集しておく。


3. wpa_supplicantの設定を追加。


/etc に wpa_supplicant.conf というファイルを作って無線LANアクセスポイントへの接続方法を指定すれば良いらしい。
WPA2を使ったセキュリティ設定のやり方がなかなか見つからず、この設定で一番ハマってしまった。

結局このページにたどり着いて同じ様にしたらなんとかつながった。
nlog(n): Linux で無線 LAN の成功と挫折: WPA Supplicant の導入
/etc/wpa_supplicant.confの内容:
ctrl_interface=/var/run/wpa_supplicant
eapol_version=1
ap_scan=1
network={
        ssid="MYSSID"
        scan_ssid=1
        proto=WPA2
        key_mgmt=WPA-PSK
        pairwise=CCMP
        group=CCMP
        psk=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
}
psk=xxxxx….xxxxの部分は、先にwpa_passphraseコマンドを使って暗号化しておく。


4. /etc/network/interfaceファイルに無線LANインターフェースの設定を追加。


これはいつも有線LANでやっている静的アドレス指定とほぼ同じ。最後の2行が増える点だけが異なる。
auto ra0
iface ra0 inet static
  address 192.168.1.10
  netmask 255.255.255.0
  network 192.168.1.0
  broadcast 192.168.1.255

  wpa-driver wext
  wpa-conf /etc/wpa_supplicant.conf


5. ネットワークサービスを再起動する。


/etc/init.d/networking restart


これで無線LANが動いた!

さてここから次はFirewallとして使う為の iptables との格闘が始ったのだけれども、それはまた別の話だ。

ネットワークは本当に面白い。







.

2012年5月26日

WebSocketについて押さえておきたいもう一つの視点


下の記事を読んで「やっぱりMeteorはすごいな~!」と思った。
体感!JavaScriptで超速アプリケーション開発 -Meteor完全解説:第1回 Meteorをはじめよう|gihyo.jp
と同時に、最近よく目にする様になった WebSocket について気になりだした。

そこで色々検索して解説記事や入門記事を読んでみた。

http://warmcat.com/_wp/2010/11/01/libwebsockets-html5-websocket-server-library-in-c/


多くの記事はAjax, Cometなどの延長・改良版としてのWebSocketという視点で書かれていたのだけれども、その中で少し視点の異なる次の3つの記事が目に留まった。

Tender Surrender: WebSocketのバイナリメッセージを試したら、ウェブの未来が垣間見えた
『今後インターネットでスピードを追求していく上で、WebSocketはなくてはならない存在になるでしょう。リアルタイムなサービスを作る必要がなくても使われるテクノロジーになります。理由は大きく2つ。WebSocketの持つオーバーヘッドの削減と、データの圧縮という特徴です。』
『僕はインターネット上でWebSocketを使って流れるデータが、将来的に全部バイナリーになる可能性すらあるのではないかと思っています。』
『少し大げさに言うと、これはウェブにおけるパラダイムシフトになり得ます。ウェブで使われるプロトコルがHTTPからWebSocketに乗る何かしらのプロトコルに置き換わる可能性は、全くないとは言い切れないのではないでしょうか。』

telnet over WebSocketを作ってみた&その意味
『WebSocketが新しいバージョンとなりbinary frameが扱えるようになったことで、今までTCPで実現されていたすべてのプロトコルとお話しできるようになります。今まで悩まされていたNAT, Firewallなどを超えて、様々なサーバと繋いでみるのも楽しいかもしれません。』

こてさきAjax:WebSocketから、これからのWebを予想してみる
『結論から先に言うと、「WebSocketはWeb上に、個々のVPNを作る技術である」と僕は思っています』
『こうなってくると、Webは、単にWebページ(コンテンツ)にアクセスするための仕組みとは言えなくなります。むしろ、Webが基本のプラットフォームとなり、そこの上に個別のポリシーのネットワークが形成される。そして、ユーザーは、それらのネットワーク上を自由に行き来するという世界観で捉えるほうが妥当であると僕には感じられます。』

これら3つの記事を読むと、WebSocketとは単なる「より良いAjax」ではなく、インターネットの世界にもっと大きなパラダイムシフトをもたらす可能性を持ったものだと言う事が言えそうだ。

これは少ないオーバーヘッドでバイナリデータを扱える様になった事によるところが大きい。これによって今現在はTCP/UDPのポート番号で区別されている通信を全てTCPの80番と443番ポートで(FirewallやNATを越えて)流す事が可能になる。(WebSocketを使ったVNCクライアントはその良い例だろう。) これが普及すればアプリケーションの区別はもっぱらWebSocket内のサブプロトコルによって行われる様になるかも知れない。

つまり こてさきAjax さんが予想されている様にネットワークのレイヤが一つ上がった形でアプリケーションが動くという事になる。

それがもっと具体的にどういう意味を持つのかはまだはっきりとイメージ出来ないけれど、何だか楽しいことになりそうな気はしている。









.

2012年5月5日

Sprintの携帯とGoogle Voiceが統合されてどうなったか

去年の5月頃から、Sprintの携帯の電話番号がGoogle Voiceでそのまま使える様になった。GoogleとSprintが提携したので、Sprint側のバックエンドがGoolge Voiceに直結された様なイメージだ。これは非常に便利な機能で重宝している。
ASCII.jp:Google Voiceと米Sprint端末の統合が可能に
GoogleとSprintがGoogle Voice導入で提携、Sprint版Nexus S販売も - ITpro

全ての発着信履歴、テキストメッセージやボイスメールにWebからアクセス出来る。
テキストメッセージやボイスメールを自動的に自分のEメールに転送する事も出来る。 

ブラウザから自分の電話番号を使って発信する事も出来る。
PCで通話する事も携帯で通話する事も可能。

特に、テキストメッセージを受け取った時にすぐにEメールに転送されて来るので、携帯を使わずそのままPCから返信出来てしまうのが気に入っている。


端末から電話をかける時は、Google Voiceを経由するのか従来通りSprintの電話網を通すのかを選択出来る。(もちろん前もって設定で決める事も出来る。)
通常はSprintを使って、国際電話の時だけGoogle Voiceを使うという設定も可能だ。(Google Voiceを通すと日本まで1分2セントで通話出来る。)

この機能のおかげでSprintの高い国際通話料金を払う必要が無くなった。

と、いい事づくめだったのだけれども、2日ほど前から問題が発生してしまった。


突然、端末から国際電話の発信が出来なくなってしまったのだ。
検索してみると5月2日から多くの人がこの問題で困っているらしい。

When trying to place a call via google voice i get: "this is not a valid number" 
Sprint Community: International calls - this is an invalid number, problem for Sprint users since 5/2/2012 - update?

国際電話の番号をダイヤルすると「This is not a valid number」という録音メッセージが返って来るだけだ。Google VoiceのWebサイトで発信履歴を見ると、記録されている電話番号が先頭の7文字までで切れている。

どうやらSprintとGoogleの間の連携が上手く行かなくなってしまっている様な感じだ。

それにしても、問題発生から2日も経っているので、きっと困っている人も多いだろうと思う。

携帯とGoogle Voiceが統合されて便利になったのは良いのだけれど、こういう問題は本当に困る。Googleがこれからもっと社会インフラ化して来るとしたら、もっと重大な問題が起こりそうな気がしてならない。









.



2012年5月3日

ASP.NET MVC 4 BetaでWebページを編集中にVisual Studioがフリーズする件

Visual Studio 2010 SP1 + ASP.NET MVC 4 Betaという環境でコピー&ペーストしようとするとIDEがフリーズしてしまうという現象に遭遇した。

再現手順は次の通り。

  1. 新規でASP.NET MVC4 Web Applicationプロジェクトを作成。

  2. テンプレートは「Empty」を選択

  3. Solution ExplorerでControllersを右クリックしてコントローラクラスを追加。

  4. 作成されたクラスのIndexメソッド上で右クリックしてViewを追加。

  5. Index.cshtmlファイルが作成され自動的にその編集画面が開くので、HTMLタグなどを適当に入力して、コピー&ペーストを実行。

  6. Visutal Studioがフリーズして、その後強制終了(再起動)してしまう!
  7. 場合によってはコピー&ペーストをしなくても編集中にフリーズする。

いろいろ検索して、唯一見つけた同様のケースの情報がこれだった。
VS 2010 freezes when pasting text into the editor | Microsoft Connect
一つの回避策として、.cshtmlファイルを開く際に右クリックして「Open With...」というメニューからデフォルトのRazer EditorではなくHTML Editorを選べばエラーが出ないとの情報が得られた。

確かにその通り、HTML Editorで開くと問題ない様だ。
でも毎回その操作をするのは面倒なのでなんとか解決したい。

まずはVS.NETの拡張機能を片っ端からDisableしたりUninstallしたりして試す。
それでもダメなので、ASP.NET MVC 4 Betaを再インストール。まだ直らないのでこの際MVC3, MVC2もアンインストール。

VS.NETのSP1もアンインストールした。すると今度はアンインストールに失敗してしまい、だんだん雲行きが怪しくなって来る。嫌なパターンだ。

結局、案の定Visual Studio 2010全体を最初から入れ直すはめになってしまった。
2010の再インストール後、SP1、MVC3, MVC4 Betaと順に再インストール。
その後気を取り直して、また上記の手順でMVC 4のプロジェクトを新規作成して試すと....

またまたフリーズ! 再インストールの苦労は一体何だったのか...。

と数時間に渡る格闘の末、ようやく解決策を見つけ出した。
その解決策とは...

『プロジェクトを新規作成した後、ALT + B, U または CTRL+Shift+B を押して一旦ビルドしておく事!』



これで万事OKだ。







.