2013年6月21日

はじめてのiPhoneアプリ開発

iOSでアプリを作ってみた感想


今までアプリ開発はAndroidひとすじでやって来たけれど、せっかくMacBookAirもあることだしそろそろiOSアプリもやって見たくなった。

初めてXcodeを起動した時はEclipseとあまりにも違うので戸惑った。

昔はC言語で徹夜で仕事したりもしていたけれど、Objective-Cというのはまた独特の文法があってこれも最初はびっくりした。メソッドを呼ぶのにかぎカッコで囲むとは。

まあどれも最初の1週間でほぼ慣れた。

やってみるとiOSアプリの開発は結構面白い。正直言ってAndroidよりも面白いかも。

なぜそう感じるかというと、まずシミュレータの動作が軽いのが一因ではないかと思う。

それからGUIの設計ツール(ストーリーボード)がとても使いやすい。XMLをいじってはいちいち実機で確認しながら進めるAndroidとは効率がかなり違う。

あと、プログラムで画面の一部をアニメーションさせるときの書き方もiOSの方が書きやすい様に感じる。まあイディオムみたいなものなので一度覚えてしまえばそんなに違いはないけれど。

それから、パーティクルを実現するクラス(CAEmmiterLayerなど)が標準で含まれているのは素晴らしい。

全体的に見て、もし初心者にアプリ開発を教えるのであればAndroidよりはiOSの方が教えやすいように感じた。


お世話になっている本



まるごと学ぶiPhoneアプリ制作教室


はじめて開発するならこの本がかなりおすすめ。下の2冊の教科書的な構成と全く違って、本当に作者と一緒に開発しているような感じで、簡単な事から順を追ってアプリが出来て行く様になっている。断片的な知識は読めば分かるけど、僕のように最初のとっかかりの流れが分からないという人にはとても良いと思う。
サーバー側(GAE)のJavaアプリケーション開発のための解説まで入っているけれど、これはさすがに蛇足だったかなと思う。むしろその分のページ数でもっと別のiOSアプリ(特にiPad用)の制作例を載せて欲しかった。







よくわかるiPhoneアプリ開発の教科書【iOS 6&Xcode 4.6対応版】


プロの力を身につける iPhone/iPadアプリケーション開発の教科書











2013年4月25日

ロードバランサーを使って複数のWebサーバーでASP.NET MVCアプリケーションを動かした時のメモ

ハードウェアの構成


ロードバランサー1台
Webサーバー3台
DBサーバー1台


ソフトウェアの構成


Webサーバー
 Windows Server 2008 R2
 IIS7.5
 ASP.NET MVC 4

 IISではひとつのWebサイトの下に複数のASP.NET MVCアプリケーションを配置。

DBサーバー
 Windows Server 2008 R2
 Microsoft SQLServer 2008


パターン1 - それぞれのWebサーバー内でSessionを管理


ロードバランサーが「セッション維持機能」を持っている事が前提。

Session管理は State Service を使う。

State Service を使う為のweb.configの設定

<sessionstate mode="StateServer">      stateConnectionString="tcpip=127.0.0.1:42424"
      stateNetworkTimeout="10" />
各Webサーバーで「ASP.NET State Service」が自動起動する様に設定しておく事。




パターン1で発生した問題


ロードバランサーのセッション維持機能が上手く動いていない!
そのため時々Webサーバーが切り替わってログイン画面が表示されてしまう。

ロードバランサーのベンダーに調査してもらっても「設定に特に問題は見つかりません。アプリ側の問題では?」との事で、解決せず。

教訓:しょぼいロードバランサーは使わない!

今回のプロジェクトではロードバランサーは自分達の管理下にはないので、パターン1はあきらめる。



パターン2 - SQLServerでSessionを管理


ロードバランサーのセッション維持機能に頼らずにSession情報をDBに格納してWebサーバー間で共有する事にする。これならWebサーバーが任意のタイミングで切り替わっても大丈夫。

1. SQLサーバーにSession情報を保存するためのデータベースを作成する。

 aspnet_regsql.exe -S server -U username -P password -ssadd -sstype p

 ※tempdbに保存するのではなく永続化するために -sstype pオプションが必要。

このコマンド一発でデータベースの作成、テーブルの作成、期限切れのSession情報を削除するためのJobの登録まで行なってくれる。

 aspnet_regsql.exeのヘルプはこちら


2. MachineKeyの設定を共通化する。

全てのWebサーバーでMachineKeyを共通化しておかないと、認証クッキーやその他さまざまなデータの暗号化・復号化の処理がWebサーバーが切り替わった時に上手く行かなくなる。

IIS7.5の管理画面で該当のアプリケーションを選択すると、「MachineKey」という項目があるのでそれを開く。


画面右側の「Generate Keys」をクリックして「Apply」するとweb.configファイルのsystem.webセクションに下の様な設定が追加される。

<machineKey decryptionKey="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" validationKey="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" />
あとはこの部分をコピーして他の2台のWebサーバーのweb.configにペーストすればOK。

参考URL:How To: ASP.NET 2.0 で MachineKey を構成する方法




3. IIS Metabase上のSite IDを共通化する。

これをしておかないと、Webサーバーが切り替わった時にSQLServer側で別アプリケーションとして認識されてしまって、Session情報の共有が出来なくなってしまう。今回はこれでハマった。。。


対策としてはSQLServerのストアドプロシージャを修正するという方法もあるみたいだけど、IIS7.5以降なら下の方法で簡単にIDを共通化出来るみたい。

IIS上で何度かWebサイトを作成したり削除したりしているとIdの値が変わってしまうので、該当のWebサイトを選択した上で「Advanced Settings」を開いてIDの欄に他のサイトと重複しない値を入力する。


他の2台のWebサーバーでも該当のサイトが同じIDを持つ様に入力する。

この設定を行った後は、IISを再起動する必要があるので注意。




おまけ:Forms認証を使う場合の注意点



  • 一つのWebサイトの下に複数のアプリケーションを配置する場合は、アプリケーション毎に認証クッキーの名前を変える事。

  • 認証クッキーのパスは「/」から変更しない方が良い。
    (ブラウザはクッキーのパスについては大文字小文字を区別するが、サーバーはURLの大文字小文字を区別しない為。)










.

2013年3月16日

Google Readerの代わりはGASで作ろう

GAS(Google Apps Script)というものがあるのは知っていたけれど、今まで使う場面がなかったので勉強していなかった。


ざっとリファレンスに目を通して出来そうな事を見てみると、毎日重宝しているGoogle リーダーの代わりになりそうなものを作れそうな気がしてきた。



アイデアとしてはこんな感じ。



  • フィードURLとその最終取得日をスプレッドシートに保存。
  • 定期的に全フィードをチェック。
  • 最終取得日より新しい記事があればメールで送信。
  • 記事1本を1メールとして自分宛てに送信。
  • Gmailでメールを受けて自動でラベル付け。


この記事を見てEメール送信のスクリプトを試してみたら、定形メールの自動送信は本当に簡単に出来た。

【GAS】簡単!Google Apps Script とAPIを使った自動メール配信システム作成 | カグア!Googleアナリティクス解説Blog

これは使えそうだ。




RSSの管理をGmailで行なうというアイデアは最近どこかで読んだ様な気がするけれど、確かに1記事1メールとしてGmailに取り込んでしまえば、未読・既読の管理も簡単だしスターを付けるのも簡単に出来る。

しかもスマートフォンからもPCからもさっとアクセス可能。


新しいブログなどを見つけてRSSフィードを登録したい時も、Google Appsのフォーム機能を使えば登録画面は簡単に出来そうだ。

フォーム機能を使わなくてもそれこそScriptを使えば(ブックマークレットなども併用して)ブラウザからクリック一発でフィード登録、という事も可能かも知れない。


という事で今度時間がある時にぜひ作りたい。


ああ、また「やりたい事リスト」の項目が増えたなー。(笑)