2010年9月23日木曜日

iPhone構成ユーティリティーを使用して3G接続に成功

iPadのOSをiOS4.2にした際に発生した3Gネットワークに繋がらなくなるトラブルをTwitterでやり方を教えて頂いて、無事に対処する事ができました。
その手順としては、

  1. iPhone構成ユーティリティーをmacにインストール
  2. 構成プロファイルの作成
    1. 一般欄:プロファイル表示名とプロファイルの一意識別子を入力
    2. 詳細欄
      1. APN = sbm
      2. ユーザ名 = data
      3. パスワード = softbank
  3. デバイスから自分のiPadを選択して、インストールボタンをクリック
こうする事により、自分で作成したプロファイルをインストールする事ができて、無事に3Gネットワークに接続する事ができました。

2010年9月19日日曜日

iOS4.2ベータでなんとか3G回線に接続できるようになったけど...

開発者向けに公開されているiOS4.2をインストールしたら3Gネットワークに接続できなくなった件ですが、一応下記の通り設定するとできるようになるそうです。ただし、公式なやり方ではないので、試すのであれば自己責任でお願いします。

  1. iPadをwi-fiでネットワークできる環境を準備する。
  2. iPadのsafariに、http://www.unlockit.co.nzをURLに入力して接続する。
  3. 専用の画面が出るので、[CONTINUE]、[Custom APN]と画面遷移させる。
  4. 画面の各項目欄には、以下の通り入力する。
    1. APN = sbm
    2. Username = data
    3. Password = softbank
    4. Carrier = JP - Softbank
  5. 入力が完了したら[Create Profile]をタップする。
  6. プロファイルをインストールして完了です。
ちなみに、iPadをメインに使用されている方は当然、iOS4.2β版へのアップデートはお勧めしません。

2010年9月16日木曜日

iOS4.2ベータ版をiPadにインストール

iPadにiOS4.2をインストールしてみます。現時点では、開発者向けにβ版が公開されている段階ですので、インストールする際にはディベロッパ登録をする必要があります。そして、インストールする際にはあくまでも自己責任という事になります。
まず、はじめにiPadをiTunesを使ってバックアップをとります。ここでバックアップを取得しないと失敗したり、戻したい場合に大変な事になってしまいます。

  1. iPhone Developerサイトから「iPad1,1_4.2_8C5091e_Restore.ipsw」というファイルをダウンロードします。
  2. [option]キーを押しながら[復元]ボタンをクリックします。そこで、先ほどダウンロードしたファイルを選択します。
  3. 「iPadの内容は消去され、iOS4.2ソフトウェアで復元されます。復元はAppleによって検証されます。」と表示されるので、[復元]ボタンをクリックします。そうすると、インストールが始まります。
  4. インストールが完了した後に、iTunesを使って、バックアップから復元します。
以上でiOS4.2のインストールが完了します。

2010年9月5日日曜日

Objective-Cのインスタンスメソッドとクラスメソッド

Objective-Cのメソッドには、「インスタンスメソッド」と「クラスメソッド」の2種類存在しています。「インスタンスメソッド」は、インスタンスに結びついているので、使用する為にはクラスをインスタンス化しなければ、使用する事ができません。それに対して、「クラスメソッド」は、クラスに結びついているので、インスタンス化をしないで使用する事ができます。ただし、インスタンスメソッドは、クラスに定義したインスタンス変数を使用する事ができますが、クラスメソッドはインスタンス変数を利用できません。ひとまず、勉強したての私は、インスタンスメソッドを積極的に使用します。
一応、正しい使い分けは特定のインスタンスと関係のないユーティリティ的な処理を記述する際にクラスメソッドを使用するそうです。

Objective-C定数の命名規則について

プログラムコード中に、変数と定数を見分けやすくする為に、定数の名前の付け方を工夫します。Mac OS Xのソフトウェア開発で使用される方法は、いくつかありますが、私は「kValue」の様に、先頭文字に小文字の「k」を使用しています。命名規則は、そのプロジェクトなり、顧客先などで決まると思いますので、最終的にはそちらが優先されると思います。

2010年9月4日土曜日

Window-Based Applicationから作成するサンプルのトラップについて

以前の投稿でも、私が現在使用しているテキストは「はじめてのiPhoneプログラミング」と言う本を使用していると記載しました。その中の、いくつかのサンプルプログラムに「Window-Based Application」から作成するものがあります。テンプレートを使用しないで、すべて自分で構築して行く点では、なかなかやりがいがあって楽しいです。
ただ、このサンプルプログラムを作成するにあたり、私は必ずある作業を忘れていつも動きません。あまりにも毎回忘れるので、蛍光ペンでアクションをする部分の説明文章にマーキングをしてみたが、その作業だけは説明文が見当たりません。
ある作業というのは、「Interface Builder」でwindowアイコンから「コントロール・ドラッグ」をして、 「rootViewController」と「UIView Controller」に接続するという作業です。

2010年8月30日月曜日

サンプルプログラムでNSRangeExceptionが発生

以下のソースコードが書籍に書かれており、その通りに実装してアプリケーションを実行させたところ、「NSRangeException」が発生してしまいました。

if (cell == nil) {
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CustomCell"
        owner:self options:nil];
    cell = [nib objectAtIndex:1]  ・・・a
}

デバッグをしたところ、(a)地点で例外がスローされていることが分かりました。そこでその部分について以下のような説明が書籍にありました。(著作権的に問題がありそうなので、文章はサマリーします。)

「再生利用可能なセルがなければ、nibからファイルを読み込む。objectAtIndexの呼び出しでは、Index:0の代わりにindex:1を使う。オブジェクト0はファイルのオーナーで、テーブルビューセルはindex:1に存在する。」

この文章を信じきった私は、objectAtIndexの引数が1であることが正しいと思い込んでしまい、このエラーを取り去るのに相当な時間を要しました。結果としては(a)のobjectAtIndexの引数を0にすることで正常に動作しました。なぜ、0で動作したかはこれから調べますが、書籍のサンプルコードが引数1で正しいとしている点も気になります。単なる間違いなら良いのですが。高いお金を出して書籍を購入している身としては、正しい情報を載せてほしいと願うばかりです。

2010年8月29日日曜日

iPhoneシミュレータで正常で、実機でエラーとなった(AudioToolbox.framework)について

アプリケーションで、ある条件時に効果音(wavファイル)を鳴らすプログラムを作成した際に、iPhoneシミュレータでは正常に動作するのに対し、iPhone実機に転送する為にビルドするとエラーとなる現象が発生しました。
これが直接的な原因かは不明であるが、AudioToolbox.frameworkをプロジェクトに追加する際に、フォルダーをコピーしてプロジェクトに追加してしまった為だと思われます。イメージファイル等はコピーでResourceフォルダに入れたので、それと同じ様にやってしまいました。
対処としては、コピーで追加したAudioToolbox.frameworkをまず削除し、再びプロジェクトに追加しました。追加する際にはコピーしないように「デスティネーショングループのフォルダに項目をコピーする」のチェックを外した状態で追加します。
その後、Device用にビルドを実行し、無事に実行することができました。

iPhone実行時のエラー:unrecognized selector sent to instance xxxxxxxxx

TabBarでビューを切り替えてPickerViewを表示するプログラムを作成し、シミュレータでアプリケーションを実行したところ、「unrecognized selector sent to instance xxxxxxxxx」というエラーが発生してプログラムが落ちてしまいました。
ネットで調べたところ、呼び出そうとしたメソッドがなかった場合に発生するエラーのようだ。デバッガコンソールにそれっぽいメソッドが出力されていたので、キーワード毎にソースコード内を検索してスペルミスを発見して対処した。コンパイラからはワーニングが出ていたのだが、ワーニングレベルではコンパイルが成功してしまうので、なかなかエラーが発見しにくい事例でした。

#PRAGMAの意味と使い方について

#pragmaで始まるソースコード行は、コンパイラへの指令なので、具体的なことはコンパイラに依存します。他のコンパイラもしくは、他の環境でとくに機能する必要のない指令です。pragmaticには、「おせっかい」と言う意味もあるらしいです。
#pragma指令は、IDEに対して指令を出して、エディターウィンドウの一番上のポップアップメニューのメソッドと関数に改行を入れるようにXcodeのエディタに指示しています。

  • 「#pragma mark -」は、ポップアップメニューに水平線を入れます。
  • 「#pragma mark Test Methods」とした場合は、ボールドで"Test Methods"という文言を作成します。
クラス内にたくさんのメソッドや関数を、#pragma指定を使って論理的にソースコードを整理することができます。これを活用することで、より目的のソースコードにたどり着けるようになります。

NSIntegerについて

NSIntegerの変数を定義する際、ポインタ(アスタリスク)が付きません。iPhoneでは、接頭辞の"NS"は通常、Foundation FrameworkからのObjective-Cクラスを示しますが、これについては、一般的な規則の例外であります。NSIntegerは常に、一つのintまたはlongの整数データ型として定義されます。NSIntegerを使用するのは、今コンパイルしているプラットフォームに最適なサイズをコンパイラが自動的に選んでくれます。32bitプロセッサと64bitプロセッサそれぞれのintを作成します。現時点では、64bitのiPhoneはないですが、将来はもしかすると出ているかもしれません。

2010年7月7日水曜日

eclipseでJBossを起動する際にportが使用済みでExceptionが発生した際の対応

eclipseで、JBossサービスを起動する際に、JBossが使用するportが既に、別のアプリケーションが使用している場合に、Exceptionが発生する。ひとまず、コマンドプロンプトからどのプロセスがportを使っているのかを調べて、該当のアプリケーションを終了させることで対処できた。その際の手順を記します。


1. コマンドプロンプトを使用して、portの使用状況を表示する。
> netstat -ano



Proto  Local Address          Foreign Address        State           PID
TCP    0.0.0.0:80             0.0.0.0:0              LISTENING       2568
TCP    0.0.0.0:135            0.0.0.0:0              LISTENING       1108
TCP    0.0.0.0:443            0.0.0.0:0              LISTENING       2568
TCP    0.0.0.0:445            0.0.0.0:0              LISTENING       4
TCP    0.0.0.0:3389           0.0.0.0:0              LISTENING       1040
TCP    0.0.0.0:4352           0.0.0.0:0              LISTENING       4788
TCP    0.0.0.0:4353           0.0.0.0:0              LISTENING       4788
TCP    0.0.0.0:4355           0.0.0.0:0              LISTENING       4788
TCP    0.0.0.0:12345          0.0.0.0:0              LISTENING       224
TCP    0.0.0.0:64424          0.0.0.0:0              LISTENING       2568
TCP    127.0.0.1:1065         0.0.0.0:0              LISTENING       284
TCP    127.0.0.1:1098         0.0.0.0:0              LISTENING       4788
TCP    127.0.0.1:1098         127.0.0.1:1099         ESTABLISHED     2588
TCP    127.0.0.1:1099         127.0.0.1:1098         ESTABLISHED     2588
TCP    127.0.0.1:1112         127.0.0.1:1113         ESTABLISHED     2588
TCP    127.0.0.1:1113         127.0.0.1:1112         ESTABLISHED     2588


2. タスクマネージャの[プロセス]タブを表示させ、調べたポートのPIDと一致するイメージ名を調べる。そして、問題がなければ、プロセスを終了させる。
(今回の私のケースでは、Mozilla Thunderbirdがportを使用していたので、いったんメーラーを終了させました。)


3. JBossサービスを再起動する。

2010年7月6日火曜日

BigDecimalの計算について

JavaでBigDecimalのインスタンス生成時にコンストラクタに渡す引数によって、誤差が発生する場合がある。
  • BigDecimal value = new BigDecimal(0.0);
  • BigDecimal value = new BigDecimal("0.0");
このオブジェクトに0.1をfor文を使って10回加算する。

for (int i = 0; i < 10; i++)
value = value.add(mod);



この場合、変数modには、BigDecimalインスタンスを生成する際に、プリミティブか文字列かに応じて、0.1または、"0.1"を設定したBigDecimalのインスタンスを生成して設定する。そして、この処理を実行すると結果は以下の通りになる。また、ここでは記述していないが、double型で同様の加算処理を行った場合の結果も添えておく。
  • double : 0.9999999999999999
  • BigDecimal(プリミティブ) : 1.0000000000000000555111512312578270211815834045410156250
  • BigDecimal(String) : 1.0
doubleについては、明らかな計算誤差が出る。BigDecimalについては、四捨五入する桁数や、計算回数などに応じて誤差が出る可能性がある。Stringについては、理想の結果となっている。はっきりしたことは言えないが、BigDecimalを使うときにはStringに変換した方が良いということになるのかどうか。

2010年6月27日日曜日

Eclipse Helios (3.6)インストール

Eclipse 3.6 Heliosのインストール方法についての手順です。

a. ダウンロードとインストール
1. eclipseのダウンロード
次のサイト(http://www.eclipse.org/downloads/)からeclipseをダウンロードする。なお、ここでのインストール環境は、Mac OS X 10.6.4で、64bitとします。

2. ダウンロードしたファイル(eclipse-java-helios-macosx-cocoa-x86_64.tar)を解凍して、目的のディレクトリに配置します。

3. ディレクトリ内にeclipseの実行ファイルがあるので、ダブルクリックして起動します。

4. workspaceディレクトリを指定して、正常に起動すれば、そのまま使用できます。


b. 日本語化
1. 次のサイト(http://sourceforge.jp/projects/blancofw/wiki/nlpack.eclipse)から、日本語化言語パックをダウンロードします。ダウンロードするのは、nlpack.eclipse.helios-M4-I200912232200とします。

2. eclipseのディレクトリ内にdropinsという名前のディレクトリがあるので、その直下に次の通り配置する。
eclipse/dropins/nlpack/eclipse/features
eclipse/dropins/nlpack/eclipse/plugins
※こうすることで、バージョンアップやbabelパッケージの乗り換えが有効になる。

3. eclipseを再起動する。そうすることで、日本語化される。Java Applicationとして実装する分には、ここまでの設定で完了です。


c. Android SDK設定
1. 次のサイト(http://developer.android.com/intl/ja/sdk/index.html)から、Android SDKをダウンロードする。ここでは、最新バージョンをダウンロードします。

2. ダウンロード後に、任意のディレクトリに解凍して下さい。念のため、ディレクトリパスに半角スペースや日本語名が無いようにしておいて下さい。(確認はしていないですが、こちらの方が無難です。)


d. ADT(たぶんAndroid Developer Tool)設定
1. eclipseの[ヘルプ]→[新規ソフトウェアのインストール]を選択します。

2. [追加]ボタンをクリックします。

3. [リポジトリーの追加]ダイアログが表示されるので、名前に[ADT]を入力し、ロケーションに[https://dl-ssl.google.com/android/eclipse/]を入力します。

4. [OK]ボタンをクリックすると、画面中央部にDeveloper Toolsと出てくるので、チェックボックスを"ON" にして、[次へ]ボタンをクリックします。

5. 次の画面でも[次へ]ボタンをクリックします。

6. ライセンスのレビューが表示されたら、"使用条件の条項に同意します"を選択して[完了]ボタンをクリックします。
※ライセンス条項に同意できない方はこれより先に進めません。

7. インストールが完了すると、変更を反映するために再起動を求められるので、[Restart Now]ボタンをクリックします。


e. Android
1. [Eclipse]から[環境設定]を選択します。

2. Android SDK Locationを設定します。ここでは、先ほど解凍したAndroid SDKのフォルダを選択します。

3. [OK]ボタンをクリックします。
※後はAVD Managerでデバイスの作成などを行いますが、既に私が作成済みだったので今回は説明をしません。


f. Hello Worldで動作確認
1. Androidプロジェクトを新規に作成します。[Android Project]を選択して[次へ]ボタンをクリックします。

2. Project Nameに[Hello World]と入力します。

3. Build Targetから[Google APIs / 2.2]のチェックボックスを"ON"にします。

4. Application Nameに[動作検証]と入力します。

5. Package Nameを入力します。[Java規約に準拠した形で、ここでは適当に入力して下さい]

6. Create Activityに[HelloWorldActivity]と入力します。

7. [完了]ボタンをクリックします。

8. プロジェクトにエラーが一件発生した状態になっているので、リフレッシュや、ビルドパスの構成などを適当にいじって更新するとエラーがとれます。
※なぜ、初回起動時エラーとなるのかは今のところ謎です。

9. プロジェクトを実行します。しばらくすると、エミュレータが起動します。バーチャルキーのMENUなどを押すと、タイトルに「動作検証」と表示され、その下に、「Hello World, HelloWorldActivity!」と表示されれば成功です。

※私の気のせいかも知れないが、エミュレータが起動するのが少し早くなった気がします。
また、気が向いたら、画像も入れて解説して行きたいと思います。

2010年6月20日日曜日

クラウドコンピューティングについて

クラウドコンピューティングは、あらゆる情報処理をインターネット上にあるコンピュータに処理を委ねることです。世界的なIT企業が次々とクラウドのプラットフォーム、サービス事業に参入しており、ネットに革命を起こすと言われています。

今までは、パソコンにインストールされているアプリケーションを使って作業をしていましたが、クラウドでは、パソコンにソフトウェアをインストールせずに、インターネット上でサービスを提供しているコンピュータに接続して、ユーザは作業を行います。
これらのサービスを使う事によって、いつでも、どこでもアプリケーションを利用出来たり、データにアクセス出来るようになります。

エコポイントの受付システムはクラウドのプラットフォームを使用してサービスが提供されています。これは、制度が出来てからサービスが立ち上がるまで、僅か2ヶ月の間に開発が行われたそうです。ユーザ数でも、日本国民が対象となるので、かなり大規模なシステムと言えます。また、導入コストについても想定よりも安かったそうです。

開発の現場で、これくらいのスピードを求められるようになると混乱が起きそうです...


- iPadから投稿

明日、iOS4がリリースです!

iPhone4の発売日が迫ってきました。iPad発売の時みたいに大行列になるのでしょうか。
私は、発売してから1週間後に、特に予約せずに銀座アップルストアに行ったら、iPadを3時間待ちで購入することができました。

それはさておき、明日にiPhoneOS改め、iOS4がリリースされます。基本的にiPhoneユーザなら無償でアップデートできるので、iPhone4買うユーザもとりあえずアップデート、なんて方もいると思います。
私はiPhoneアプリの開発者登録をしているので、iOS4を約二週間ほど先に3G/Sにインストールして使っていました。

追加される機能については、Appleのサイトに公表されていますが、マルチタスクとフォルダ機能について、使用してみた感想を述べます。

1. マルチタスク
イメージとしては、現状でも、iPodで音楽を聴きながらメールを読む、といった使い方ができると思います。これをアプリケーション側で対応させると、iPod以外のアプリケーションでも可能となります。そこで注意すべきは、アプリケーションでマルチタスクに対応していない場合はマルチタスクにならないと思われます。
私が試した例では某ゲーム会社大手のRPGゲームの最中にメールを作成して送信、その後ゲームに戻ったら、見事にオープニングから始まりました。正式リリースのiOS4でこの辺がどうなるかは定かではありません。修正してリリースされることを祈っています。

2. フォルダ機能
現時点で、たくさんのアプリケーションをインストールしているユーザは、この機能をうまく使用することで、画面を整理整頓することが、できるようになります。使い方は、アイコンを触ってしばらくすると、ユラユラと揺れると思いますが、そのあとにまとめたいアイコンを重ねることでフォルダが作成されます。その時にフォルダに名前を付けれるので、わかりやすい名前をつけておきます。
フォルダを振り分ける作業は、アプリケーションを多くインストールしている方は、大変かもしれませんが、整理することによってまたアプリケーションをたくさん追加できるようになるので、頑張って整理してみてください。


いずれにしても、今年の前半はAppleの独壇場といった感じでしょうか。ただし、後半には日本でもAndroid携帯が充実してくると思うので、これからどうなって行くのかが楽しみです。

2010年6月18日金曜日

リモートデスクトップでのタスクマネージャ

MacからWindowsXPにリモート接続した際に、以下の方法でタスクマネージャーを起動することができます。

[control]キー + [option]キー + [delete]キー を同時に押す。

基本的にWindowsと同じ操作方法ですが、Macのキーボードは配置が若干異なるので、分かりにくいです。
また、タスクマネージャーのシャットダウンからWindowsXPの電源を切ることができます。

MacからWindowsXPへリモートデスクトップ接続

Mac OS X(10.6.4)からWindowsXPにリモート接続する方法です。

1. 以下のサイトから、「Microsoft Remote Desktop Connection Client for Mac 2.0.1」をダウンロードします。
http://www.microsoft.com/downloads/details.aspx?FamilyID=cd9ec77e-5b07-4332-849f-046611458871&DisplayLang=ja

2. ダウンロードか完了したらマウントされるので、手順に従ってインストールを行います。

3. アプリケーションフォルダから「Remote Desktop Connection for Mac」を起動します。

4. コンピュータ欄に、リモート接続するWindowsXP端末のIPアドレスを入力して[接続]ボタンを押下します。

これで、WindowsXPのデスクトップが表示されます。なお、Windows7でも同様の手順でできますが、エディションによる違いで、リモートデスクトップサーバーにできない場合があります。通常家庭で導入するようなエディションでは、機能がついていない可能性があります。

2010年6月16日水曜日

iPhone/iPadのプリントスクリーン

知っている方は多いと思いますが、
iPhoneやiPadを仕事で使っている場合に、
画面を撮影したい時があります。
その方法は、

「ホーム」と「スリープ/スリープ解除」ボタンを
同時に押下すると撮影出来ます。

撮影した画像は、「写真」アプリケーションで、
確認する事が出来ます。

iPadのよく使うボタンの正式名称

iPadの丸いボタン「ホーム」を手前にして、

右上は、「スリープ/スリープ解除」
右側面上側「スクリーン回転ロック」
その少し下「音量」
手前中央「ホーム」

となっています。説明書に載っていますが、
なかなか見る機会がないのでこちらに書きました。

2010年6月15日火曜日

初投稿

初めまして。
自称システムエンジニアのブログです。

本文を作成するのにiPadを使用しています。
が「HTMLの編集」以外で操作すると、ブラウザが
落ちてしまいます。

しょっぱなから、コケまくってますが、今後とも
よろしくお願いします。