2012年12月8日土曜日

Xcodeで"Could not support development."が出た場合の対応方法

XcodeでiOSアプリ開発を行っている場合に、"Could not support development."というメッセージが出てiOSデバイスにアプリをインストールできなくなる現象にあいました。
それまでは実機テストに用いることが出来ていたiPadだったので、いきなり使えなくなる理由がわかりません。
Xcode4.5+iOS5.1.1のiPadなのですが、プロジェクトのprovisioning targetはiOS5.0にしてあるので、"iPad側がサポートされていないOSです"ということも考えにくいです。


Googleで"Could not support development. Xcode"などで検索してみたところ、いくつかの方法が見つかりました。

そのいくつかとは、以下のようなものです。
・iOSデバイス再起動したらなおったよ
・Mac再起動したらなおったよ
・iOSデバイスでprovisioning profile消して入れ直したらなおったよ

僕の場合は、1つ目は効果はありませんでした。
3つめの方法を参考に、Organizerkから、provisioning profileで向こうになっているもの、
更新が必要なものを削除し、有効なものはそのまま残しました。
この状態でiPadをつなぎ直すと、Xcodeからアプリをデプロイできる状態に戻りました。



2012年12月5日水曜日

iTunes11を元の使い勝手に戻す

MacのiTunesにアップデートが来ていたのでiTunes11にしたところ、自分の普段の利用スタイルから比べると不便になったところがあったので、大体もとの使い勝手にする方法をメモしておきます。
以下の方法は、OSXでのiTunesに関する記載です。

サイドバーを表示します。


  • iTunesを起動します。
  • 画面上部の「表示」メニューを開き、上から5バンンメにある「サイドバーを表示」を洗濯します。
  • そうすると、サイドバーが復活。ライブラリや、iTunesストアへのショートカットにアクセスすることが出来ます。
  • 自分の場合は、サイドバー最上部の「ミュージック」を選択しておくと、以前のスタイルに一番近くなりました。
  • 「ミュージック」を選択した状態では、画面上部中央にiTunes内の「曲」や、自分にとっては大事だった「ラジオ」のメニューが現れ、以前と同じようにアクセスできます。

以上のステップで、自分の場合にはだいたい元の操作感に戻りました。

あとはお好みで。

iTunesを起動している状態で、画面左上の「iTunes」メニューから、「環境設定」を選ぶと、「一般」のタブに、表示したい項目を選択をできる部分があります。
ここで、適宜、表示させたい者を取捨選択すると、画面がよりすっきりします。
自分の場合は、Geniusは使っていなかったため、チェックを外しました。


2012年11月10日土曜日

[Kindle]USから購入したkindleの製品保証をお願いしてみた その2

先のエントリの続きです。

新しいKindle到着

金曜の昼に電話をかけて、早くも次の週の火曜日には、kindleが到着しました。
このkindleは、既に自分のkindleとして登録されており、amazonのwebサイトでも確認するkとが出来る状態でした。

あとは、WiFiのセットアップをして、自分のライブラリの本を読み込めば、電子ブックリーダーとしてすぐ使えるようになります。

USBケーブルも新しいのがついていたので手持ちが一本増えました。

Kindleの返送

梱包

USのamazonに返送するために、まず、故障したkindleを梱包する必要があります。
故障したkindleの梱包には、発送されてきた新しいkindleの箱をそのまま用いることができました。宛名のラベルをはがして、各種バーコードのシール類をはがすことが必要です。
箱の中に故障したkindleを入れて、テープで外側に封をすれば完成です。

宛名

宛名のラベルは、amazonからのメールに記載されているリンクをWebで見ると、その中にカスタマイズされたものが表示されるので、これをプリンタで印刷、はさみで切り取れば完成です。箱に貼付けます。
同じページ内に、3枚分のバウチャーが表示されるので、これも印刷しておきます。このバウチャーには、署名と記入日を記載する必要があります。

発送

発送には、日本国内では、UPSの(及びUPSが契約している)集荷センターに持ち込むか、UPSと契約している業者に集配を頼むかの方法があるようです。
僕の場合は、近くを通りがかれる店舗があったので、MBE(Mail Box Etc)に持ち込みにしました。
店舗では、梱包されたkindleを渡し、バウチャー3枚を渡し、集配記録に名前を書き、写真入り身分証明を提示することになります。
これら一連の作業が終わった後、MBEの店舗の方がUPSに電話をされて、集配を依頼していました。

いじょうで、kindleの返送はおしまいです。

そのあと

現段階では、kindleの返金分が入金されていないので、入金されたら、金額の差分について書いてみようと考えています。



2012年10月28日日曜日

[Kindle]USから購入したkindleの製品保証をお願いしてみた

 約10ヶ月くらい前に、Amazon USから購入した第4世代のKindleが故障してしまいましたが、交換してもらえました、ということについて書きます。 今は発送待ちなので、到着後の手順はまた別エントリで取り上げます。
 この情報は、2012年10月時点でのものです。

Amazon USに電話をかけるまで

kindle故障

Amazon USから2011年末頃に購入したkindle、届いてから便利に使っていたのですが、ある日、画面の縦半分くらいから右下にかけて、待機時の画像になったまま動かないという状態になってしまいました。電源を入れ直したり、ページを移動させる操作を何パターンか繰り返しても、動く部分の画面は変わるものの、待機時の画像部分は変化しなくなっていました。
 USから買ったし保証はきっと米国内だけだろうと考えていたのですが、友人から、米国外のものでも保証に対応しているとのことを聞いたので、試しにやってみることにしました。

Amazon JPに試しに電話

Kindleストアの日本版も出たことだし、ひょっとしたら日本のAmazonでもカスタマーサポートをしているかもしれないと勝手に想像して、Amazon JPのサポートセンターの番号に問い合わせてみました。サポートの方が調べてくださった結果、現時点では、米国で購入したkindleのサポートはしていないのでUSに問い合わせてほしい、とのことでした。
(やっぱそうですよね..お手数おかけしてすみません)

Amazon USのサポートの使い方の様子を調べてみる

USに問い合わせるしかないことが分かったため、先人たちの様子をWebで調べてみることにしました。数件軽く観てみたところ、サポートに関しては良い印象悪い印象いろいろあるものの、まずは電話をかければ何とかなるようだ、というところまで分かりました。
 修理や交換の場合には、電話サポートにまわされるような仕組みになっているようです。
 このときは昼休みだったのですが、そもそもこんな時間にUSに電話をかけてよいものだろうかなどと逡巡しましたが、きっとワールドワイドな感じでサービスをしているに違いないから大丈夫だろうと考え、いざ電話をかけてみるステップに突撃してみることにしました。

Amazon USに電話をかけてみる

交換までの流れ

交換までの流れは、大きく次のようになります。

  1. Amazon USのサイトにログイン
  2. サポートのページに行き着く
  3. いくつかの質問フォームに答える
  4. 交換しかないパターンでは、連絡手段として電話が示される
  5. 自分の電話番号を入れて、少し待つとサポートから電話がかかってくる
  6. やりとり(後述)をして、交換(修理)に相当することがわかる
  7. 交換のフローに入り、少しやりとりがあって終了
  8. (後日)AmazonからKindleが届く
  9. (後日)故障したKindleをAmazonに発送する

 以降、自分の場合の手順を書いておきます。

サポートページへの辿り着き方

いろいろな方法があると思いますが、現時点では次の方法で行けます。

  1. Amazonにログイン
  2. 画面上部の「Your Account」をクリック、アカウント情報へ
  3. 次の画面の右側に、「kindle trouble shooting」のリンクがあるので、これをクリック
  4. 次の"Trouble shooting your kindle"の画面の右側に、"Contact us"のボタンがあるのでクリック

サポートページ内の進み方

1番目のステップで、"What can I help you with"で示されているデバイスの中から、対応してほしいものを選びます。自分の場合、持っているkindle 4th genのほかにもiPhone/iPad/Android/Mac用のkindleも選択肢に示されていました。ここでは、kindleをえらびます。

 2番目のステップ、"Tell us about your issue"では、まず、"Kindle device"を選びます。
 次に、"Select issue details"を聞かれるので、"problem with my Kindle"を選びます。
 次に、"Select additional details"では、"my kindle has lines on screen"を選びます。

 ここまでくると、"この症状のKindleは、交換しかありません。電話オプションを選んでください"というメッセージが出ます。
(なお、3番目のステップのほかの選択肢は、"メール"、"チャット"があります。)

 三番目のステップ、Phoneを選ぶと、画面に自分がいる場所と番号が聞かれます。
 "Japan"を選び、自分の番号を入れます。日本の国番号(+81)は不要で、日本での電話番号での先頭の0をとったものを入力していきます。
 僕の場合は、携帯からだったので、80-XXXX-XXXXという番号を入れました。
番号を入れると、「すこしあとで」「今すぐ」という選択肢が現れるので、僕の場合は「今すぐ」を選びました。
 10秒程度後に、手元の電話機に着信がありました。

電話の流れ


 電話を大きくは以下のような流れになります。
  1. 自分の名前と、Amazonのメールアカウントを言う
  2. (僕の場合は、オーダー番号は不要でした。kindleデバイス選択の時点で分かっているのでしょう)
  3. 故意に壊したとかではなく、通常の範囲内での利用での故障であることを確認する
  4. あとは交換しかないことが示される
  5. 交換については、Amazon USから交換機が送られてきて、こちらから故障機を送り返す、というステップが説明される
  6. 当該Kindleで、Kindleストアのデータは戻るけれどそれ以外は戻らないので注意して、などの注意事項が言われる
  7. 返金のステップのためにクレジットカード番号が必要なので、入れる。(クレジットカード番号入力部分は、別システムになる。)
  8. 送付先をサポートセンターに伝える
  9. 何かほかに質問ある?などを聞かれて、ない場合はこれでおしまい。

 僕の場合は、以上のステップに必要な時間は、16分程度でした。このうち、サポートセンターの中の人の処理が必要で待ちであった時間が2分程度でした。

電話に必要な英語のレベル

日常会話が不自由しないようであれば、特に難しいやりとりではないと思います。
 電話での英語会話に抵抗があるようであれば、15分程度で済むので、電話だけ友達にお願いしても良いかもしれません。

確認される事項

 通常範囲での利用であることを確認されるのは、以下のような内容でした。

  • 落としたりしていないこと
  • 水に濡らしたりしていないこと
  • 液晶面に角の圧力がかかるような状態がなかったこと


 まあ、普通の電気製品の注意事項の範囲ですね。

交換機の到着と故障機発送までの流れ

Amazon USから交換機が送られてくる→こちらから故障機を送り返す
 というのがモノの流れです。送り返しは来週になると思われるので、別エントリで。

 お金の流れについては、
 一旦キャッシュバック→新しいkIndleを購入したことになってチャージ
 ということになりそうなのですが、これも、金額等については別エントリで書きます。

クレジットカード番号入力部分

上記の、キャッシュバックとチャージのあたりの目的で、クレジットカード番号を電話で伝えることが必要になります。
 このことがサポートセンターの人から伝えられ、一旦接続先が、カード番号受付システムに切り替わります。
 受付システムの説明の後、自分のカード番号を電話機のボタンをプッシュすることで通知し、最後に"*"を押します。
 僕の場合、いきなりボタンを押し間違えてしまいましたので、途中で"*"を押して、サポートセンターの人にもう一度やりなおして頂きました。

電話おしまい

だいたいこれまでの内容で、電話は終了します。僕の場合は、電話をした次の週くらいに到着する見込みであると伝えられました。
(電話をしてから2日後の現時点で、Amazonのページを見てみると2個目のKindle、つまり故障交換用のものが登録されていました。)

 故障機到着からの話は、また別エントリに書きたいと思います。
 つづきはこちら


2012年10月14日日曜日

[TypeScript]モジュール(modules)

モジュール

クラスとインターフェースは、ソフトウェアの部品をどのように用いるかを表現することと、定義と実装とを分離することとにより、大規模なJavaScriptによるアプリケーション開発を支援します。TypeScriptは、プライベートメンバーを用いることで、設計時に、クラスの実装を隠蔽することを強制することができます。しかし、実行時には、この隠蔽は向こうです。なぜならば、JavaScriptのランタイムでは、オブジェクトのすべてのプロパティがアクセス可能だからです。
(将来のバージョンのJavaScriptではプライベートメンバーも実現されるかもしれませんが、現在のEcmascript5の環境ではプライベートメンバーはありません。)

現行のJavaScriptでは、実行時のメンバーの隠蔽を実現するための方法は、モジュール(module)パターンを利用するしかありません。モジュールパターンを利用することで、ソフトウェア部品間を自然に分離することができます。モジュールはまた、名前空間を提供することができるため、開発者は、ソフトウェア部品群がグローバルな名前空間で衝突を起こさないようにするために利用することが出来ます。

TypeScriptでモジュールを書く場合には、次のようなコードになります。
-
このとき、関数fは、exportされているため、外部から利用することができ、sは、exportされていないため、外部から利用することが出来ません。
 - -
このとき、M.sは、次のようにエラーとなります。
 エラー:
The property 's' does not exist on value of type 'M'any

 TypeScriptのコンパイラーにより出力されるJavaScriptは、次のようになります。
-  -

(つづく)


(見出しへ)

[TypeScript]クラス(Classes)

クラス

JavaScriptによる設計パターンでは、少なくとも2つのデザインパターンがあります。
モジュール(module)パターンと、クラス(class)パターンです。

モジュールパターンでは、内部の値を隠蔽するため、クロージャを利用します。

一方、クラスパターンでは、オブジェクト継承の多様なパターンの実現のため、プロトタイプ(prototype)のチェインを利用します。prototype.jsはこのような設計となっています。

まず、銀行の口座を表すクラスの例で見てみましょう。

- -
上記のTypeScriptのクラスをコンパイルすると、出力されるJavaScriptのコードは次のようになります。
- -
このクラスの使い方は、次のようになります。
- -
この預金口座に、初期値を与える場合は、TypeScriptのコンストラクタで指定することができます。 コンストラクタを導入した例は、次のようになります。
- -
上記の例を利用する場合、このようなコードになります。
- -
TypeScriptでは、このようなコンストラクター部分をより短く書くための文法があります。 以下のようなものです。
- - このとき、出力されるJavaScriptは、次のようになります。
- -

継承

TypeScriptのクラスでは、継承を使うことが出来ます。次の例は、BankAccountを継承した小切手用の口座です。
- - コンストラクタの中で、親クラス(BankAccount)のコンストラクタを呼び出しています。関数writeCheckでは、親クラスのフィールドに対して、アクセスしていることが分かります。
このCheckingAccountまでをJavaScriptに変換した結果は、次のようになります。
- -
(つづく)


(見出しへ)

[TypeScript]コンテクストに沿った型付け(Contextual Typing)

コンテクストに沿った型付け

TypeScriptでは、"ボトムアップ"形式で、型付けが行われます。例えば、次の例では、引数が2つともnumberであるため、返り値もnumberであると判定されます。

- -
返り値がnumberであるため、次の例はエラーとなります。
- -
エラー:
Cannot convert 'number' to 'string'number
- -

一般的に、この方式で型推論を行うことにより、開発者にとって見通しがつきやすい判定が行われます。
特定のケースでは、TypeScriptコンパイラは、"トップダウン"形式で引数の型を推論します(Contexual Typing)。このContexual Typingは、開発環境でのコード補完機能などで活用されます。

(つづく)


(見出しへ)

[TypeScript]構造的なサブタイピング(Structural Subtyping)

構造的なサブタイピング

TypeScriptでは、オブジェクトの型は、構造的に比較されます。

- - 上記の定義のとき、以下の例は許容されます。
getFullNameに、Name型のオブジェクトを渡すと、当然OKです。 - - また、以下のものもOKです。 - - 例2では、FriendクラスのフィールドのfirstNameとlastNameが、Nameで要求されるパラメータと一致しているため、OKとなります。 例3では、firstNameとlastNameを持つオブジェクトを渡しているためOKです。
このように、TypeScriptでは、オブジェクトの構造を比較して、型のチェックが行われます。

(つづく)

(見出しへ)

[TypeScript]オブジェクト(Object Types)

オブジェクト


TypeScriptでは、オブジェクトの振る舞いを記述することができます。
次の例では、Point関数の返り値を表現しています。
- -
 開発者は、interfaceを使って、オブジェクトのパラメータを指定することができます。Personクラスの例を見てみましょう。
 - -
 この例では、必須パラメータのlastNameが足りないため、エラーが出ます。 
Supplied parameters do not match any signature of call target: Could not apply type 'Person' to argument 1, which is of type '{ firstName: string; }'(p: Person) => string
lastNameも指定すると、エラーはなくなります。
 - -

なお、パラメータをinterfaceのものより多く指定しても、エラーとはなりません。
 - -

(つづく)


(見出しへ)

[TypeScript]関数(Function Types)

関数

TypeScriptの関数は、JavaScriptでの関数の構文に加えて、シグネチャを指定することが出来ます。

- -

ここで、function a3の場合、引数で文字列以外を指定すると、コンパイラがエラーを出します。

- -
Supplied parameters do not match any signature of call target(a: string) => string

関数の引数に、関数を指定することができます。コールバック関数を指定する場合にもこの方法を用いることが出来ます。次の例では、関数a4が第2引数に関数をとっています。この関数は、文字列を引数とするものであり、返り値はanyであることが指定されています。
- -

この関数a4を実行した場合、アラートボックスに、"Hello, TypeScript"と表示されます。

(つづく)



(見出しへ)

2012年10月13日土曜日

[TypeScript]アンビエントな宣言(Ambient Declarations)

アンビエントな宣言

TypeScriptでは、デフォルトでは、利用されていない変数に対してエラーが表示されます。
たとえば、以下のように、変数を宣言前に利用するとエラーになります。

- -
エラー内容:
The name 'hoge' does not exist in the current scope any

ここで、宣言を行い、TypeScriptに対して変数を教えてあげることにより、エラーはなくなります。

- -

JavaScriptで定義済みのオブジェクトについては、"lib.d.ts"ファイルの中で、declareがなされているため、TypeScriptでは定義済みであるものとして利用することが出来ます。例えば、documentオブジェクトのようなものです。

JQueryのような、外部コンポーネントについては、TypeScriptのデフォルトインターフェースで定義されていないため、開発者は、以下のように定義することで、JQueryのオブジェクト(ここでは、"$")を利用できるようになります。

- -

(つづく)

(見出しへ)



2012年10月12日金曜日

[TypeScript]Hello, TypeScript!

概要

TypeScriptは、Microsoft社が開発を進めている言語で、JavaScriptをより使いやすくすることを目的としています。この言語は、2012年10月3日に正式に発表されました。

このページでは、Microsoft社とは関係のない、TypeScriptファンの一開発者の観点から、TypeScriptの使い方について学習した内容についてまとめます。内容についてはできる範囲で正確であるように注意しますが、最も正確な内容は、TypeScriptのサイトにあるものを参照してください。

※TypeScriptは、Microsoft社の登録商標です。

このページについて


ページ作成時点のバージョン等

現時点(2012年10月)で、TypeScript Language Specification version0.8が公開されています。
このページの内容は、この版に基づきます。
Type Script Language Specification version 0.8は、TypeScriptのサイトから入手することが出来ます。

ページ内容の作成予定

このページ内容の作成順については、"TypeScript Language Specification0.8"(以降 "LS0.8"と略)の目次に準じて展開していく予定です。

TypeScriptとは

(本節は、LS0.8のIntroduction部分より、要約しつつ引用)
今日、Webアプリケーション(e-mailや地図など)では、JavaScriptのコンポーネント群が多用されています。TypeScriptは、大規模なアプリケーションを構築し、保守していくチームのニーズに合うように設計されています。

  • ソフトウェアコンポーネント間のインターフェースを定義し、既存のライブラリの振る舞いを深く知ることができるようにすること。
  • コードを組織化する方法を提供し、モジュールを動的にロードする機構を提供することで、名前空間の衝突を減らすこと。
  • TypeScriptが独自に提供する型システムを用いることで、生産性が高い開発環境を手に入れることができるようにすること。(静的検査、シンボルをベースとしたコードのナビゲーション、構文の保管、リファクタリングなどのこと)


TypeScriptは、JavaScriptのシンタックスシュガーで、Ecmascript 5(ES5)のスーパーセットになっています。従って、すべてのJavaScriptのプログラムは、TypeScriptで利用可能なプログラムでもあります。
TypScriptのコンパイラーは、ローカルな環境でソースをJavaScriptに変換します。その際、TypeScriptで宣言された変数の順番を変えないようにするため、生成されたJavaScriptのソースは、入力のTypeScriptのソースと近いものになります。
TypeScriptのコンパイラーは、変数名を変更しないため、JavaScriptになったあとにも、同じ名前で動作を追いかけることができます。

TypeScriptの構文は、Ecmascript6(ES6)に提案されている特徴のうち、いくつかを内包しています。classやmoduleが該当します。classは、プログラマが慣れしたしんだプログラミング構造を提供します。moduleは、プログラマが、名前空間の衝突を回避しつつ、コンポーネントを組織化していく際に用いることができます。

TypeScriptは、JavaScriptプログラマーに、型のアノテーションのための機構を提供します。これは、Closureに見られる、JSDocコメントに似ていますが、TypeScriptでは、構文の中に直接記述できる形で実現されています。これにより、アノテーションで記述されている内容が、ソースと密に連携して動作することが出来ます。

TypeScriptの型システムは、JavaScriptのオブジェクトの制約を明確にするためことができ、この制約にそった利用方法となるように強制することが可能です。アノテーションが使いやすく、最小限で済むようにするため、TypeScriptでは、型の推論を行います。例えば、
var i = 0
という文があった場合、iは数値型の変数であると推論されます。

function f() {
    return "hello";
}
という関数があった場合、この関数は文字列型を返すものであると推論されます。

TypeScriptの機構があることで、プログラマーは、開発環境によるコード補完の支援や、静的検査などの機能を利用することができるようになります。

上記の例では、さらに、引数に型をつけることで

function f(s : string) {
    return s;
}
引数が文字列型であることをTypeScriptの構文検査器に知らせることができるようになります。これにより、上記の関数に対して、f("a")という呼び出しは可能ですが、f({})という呼び出しにはコンパイル時にエラーが出力されるようになります。

このとき、実際にTypeScriptコンパイラーにより出力されるJavaScriptは、
function f(s) {
    return s;
}
というものであり、すべてのアノテーションが削除されていることが分かります。

(つづく)



関連記事一覧