moonmile solutions 分室

ソフトウェア開発者の情報収集をリアルタイムで垂れ流し...という具合に行きます。

ミニ本を作る?

いきなり Kindle 本をつくってもどうかと思うので、ちょっと手順を考える。

学習会か講習会用に Kindle 本を作るのはどうだろうか?

  • ターゲットが決まっているので書きやすい。
  • ボリュームはそんなに多くなくてよい。
  • ブログに10回シリーズぐらいで手順を書いて、それを Kindle 本に移す。
  • Visual Studio 無しで無償 Xamarin をやる、風な手軽な感じができる(多分、これは企画が通らない)。
  • Windows IoT Core on RPi も、そんな感じでやるとよいかも。
  • センサー 37 使ったシリーズとか。

5-20以降の対策

■ネットワーク
Objective-C - LINE/Facebook/Twitter投稿 - Qiita
http://qiita.com/EntreGulss/items/59d6429ab3fb88671c1a
Objective-CでJSON取得して表示する方法 - Qiita
http://qiita.com/drapon/items/859473840211f0ac1552

■リソース
アプリからiCloudを使うための準備
http://miyano-harikyu.jp/sola/devlog/2013/11/22/post-113/
iOS 5 iCloud プログラミング - KOYAMA Yoshiaki のブログ
http://kyoshiaki.hatenablog.com/entry/20120429/1335688790
iCloudと共にCoreDataを使う方法 | iOS Dev Info
http://ios-dev.info/using-coredata-with-icloud/

■ゲームセンター
【ios7版】GameCenterのランキング表示、スコア送信を実装する - Qiita
http://qiita.com/s0hno/items/accf11c311e037c92302
Game Center実装できたよ(とりあえず) - お?いけるくさい?
http://montan.hateblo.jp/entry/2012/07/17/164315

■通知センター

[iOS] ローカル通知(LocalNotification)の使用方法
http://crunchtimer.jp/blog/technology/ios/591/
Local Notification サンプルプログラム - iPhoneプログラミング広場
https://sites.google.com/site/propicaudio/sample-code/notification-test
Local Notification サンプルプログラム2 - iPhoneプログラミング広場
https://sites.google.com/site/propicaudio/sample-code/notification-test-2
objective-c)GameCenter組み込み|金 objective-c
http://ameblo.jp/kungfumania/entry-11517768392.html
Game Center のリーダーボード(スコアランキング)対応アプリの作り方 - Over&Out その後
http://d.hatena.ne.jp/shu223/20110131/1296408051

■課金・広告
iAd サンプルプログラム - iPhoneプログラミング広場
https://sites.google.com/site/propicaudio/sample-code/iad-test
失敗しない iOS In-App Purchase プログラミング - A Day In The Life
http://d.hatena.ne.jp/glass-_-onion/20111201/1322697417
iOS でアプリ内課金を実装するために必要な情報メモ【Objective-C】 - bekkou68の日記
http://bekkou68.hatenablog.com/entry/2013/06/08/112449
Objective-C - アプリ内課金のレシートは1つのバイナリになる - Qiita
http://qiita.com/yimajo/items/264e840c0c078eb1bf9d

F# で 'a(ジェネリック/総称)を型推論して束縛する離れ業がある

おなじく pars.fs を覗いてみて分かったのだけど、

let op (x:int) =
    let (y:'a) = 20
    let (z:'a) = "masuda"
    x + y

の場合には、"masuda" で bind するときにコンパイルエラーになる。

一見、'a は unit のように見えるけど、x+y の時点で

  • op 関数の引数 x が int 型であること
  • x + y での戻り値が int 型であること

から、'a が int 型に束縛されるので、z:'a は int 型になるんだけど、"masuda" のような文字列を入れると駄目、ってことらしい。 なるほど、これはすごい。

じゃあ、y:'a のほうを string 型に束縛すれば、コンパイルが通るだろうという推測をして

let op (x:int) =
    let (y:'a) = "10"
    let (z:'a) = "masuda" 
    x + System.Convert.ToInt32( y )

のようにすると、これは通る。

何に使うのかよくわからんけど。

ちなみに、pars.fs には、

        (fun (parseState : Internal.Utilities.Text.Parsing.IParseState) ->
            let _1 = (let data = parseState.GetInput(1) in (Microsoft.FSharp.Core.Operators.unbox data : 'tupleParenPatternElements)) in
            let _3 = (let data = parseState.GetInput(3) in (Microsoft.FSharp.Core.Operators.unbox data : 'parenPattern)) in
            Microsoft.FSharp.Core.Operators.box
                (
                   (
# 2509 "..\pars.fsy"
                             _3 :: _1 
                   )
# 2509 "..\pars.fsy"
                 : 'tupleParenPatternElements));

ってな感じで、'tupleParenPatternElements と書かれているけど、実際は Internal.Utilities.Text.Parsing.IParseState に束縛されている、ってことで。あまり意味がない...ことはないのかな。メタ情報的に必要なのか?

ひとつ、思いついたので追記、

let (x:'a) = "なにやら良くわからない型がある"
// ...
let (y:'a) = "なにやらよくわからないけど、xと同じ型にしておきたい"

こんな感じで、x に bind するときに、よくわからないけど複雑な型を使う。複雑すぎて表記するのが面倒だけど、仮に「'a」という名前を付けておく。 そうしておいて、y に bind するときに、x と同じ型 'a にしたいときに使う。x と y への代入は、別々のオブジェクトだけど型は一緒にしておきたいときに使う。 更に言うと、

  • 型は一緒にしておきたい。
  • しかし、型を知っておく必要はない

ってのがミソ。なにやら抽象的で面白い。

~~~ もうひとつ、追記

let main = 
    let (x:'a) = ("masuda",175)
    let (y:'a) = ("tomoak",001)
    let (z:'a) = ("other",001,"japan")
    0    

多分、こんな感じ。 tuple を使って 'a を string * int に束縛しておくと、z:'a の時に string * int * string を代入しようとしてコンパイルエラーになる。 C# の場合 LINQ の戻り値を var で受けたときに、それを使いまわすと select の違いを回避できるっていう裏技?と同じ。