2014年1月9日木曜日

ブスが魅せた!放置ゲーアプリ「49人目の少女」は2か月で1,000万円以上稼いでいた。Nagisaインタビュー前篇
ショッキングなキャラクターでした。「放置ゲー」は地味にはまりますね。後編にも期待です。



【Unity】クソゲーを作って晒したら世界が変わった件 – uinyan. com
作る、発表する、継続する。何に繋がるかわからないものですね。


10代で上場が夢。アプリ開発で小学生起業家が出てきてる - NAVER まとめ
すごい小学生や中学、高校生が出て来ていますね。将来が楽しみです。



中高生Rubyプログラミングコンテスト、「交通教室」と「Ruby smart House」が最優秀賞
こちらはRubyのコンテストU-15,U-18の受賞者とアプリの紹介をしています。大人顔負けです。



アプリ開発競う「Mashup Awards 9」、最優秀賞は“ワンクリックで飲み会予約”
こちらも開発コンテストの結果発表です。アイデアのひらめきがとても面白いです。



2014年1発目の更新となりました。
ゆっくり更新ですが、今年も面白い記事が集まりましたら更新します!
気が向いた時に見てくださいね。

2014年1月8日水曜日

カラバリ

 後付でカラーバリエーションをつけることにしました。つまり、キーボード、メモリーの部分の色をいろいろ変えられるようにしようと。 

 パーツがいっぱいあるので、それぞれ色を変えるのは結構面倒です。 しかも実は、一色というわけにはいきません。メモリーは視認性が悪くならないように縞々にしています。
 その面倒を解決する工夫としては、キーボードと メモリーのパーツは 非常に透明度が高い白や黒で着色しています。 つまり、それらを通して一番裏のUIViewが見えているわけです。 なので、このUIView1つだけの色を変えればよいわけです。 (実際には、入力中の計算式の表示エリアの文字色も変えてます)

 5cのカラバリに合わせ、malcは Apple Storeの第一画面もカラバリです。 アイコンもカラバリを意識したデザインです。  そんな一押しのカラバリですが、こんなとても簡単なシカケでできています。



2013年12月28日土曜日

名前

 パートナーから名前の由来を聞かれました。
 Memory Calculatorの略称で、Mcalc、発音しずらいので、Malcにしました(テキトーw)。なんか「まるく」って音がかわいいかなと。 短いのも気に入ってます。
 ググっても、類似品はなさそうだし、英語での変な意味もなさそうなので Malcに決定しました。 

 もうひとつ、アプリの名前を考えます。ストア用の名前は別な名前が付けられ、アプリの特徴が分かり、検索を意識したものがいいということで、「普段使いのシンプル電卓」という修飾子を付けました。毎日のちょっとした計算に使ってもらいたいという気持ちから来ています。

 アイコンが円で構成されているのも、色の三原色の意味もあるのですけど、「丸く」からきているのではないかと勝手に思っていたり。 アイコンは、いつものようにパートナーがデザインしてくれているので、勝手に思っているだけですけどw。

2013年12月18日水曜日

コーディングスタート

 設計ができたので、そろそろコーディング開始です。
 まずは電卓なので、数式から答えを求める計算ロジックを作ります。 折角なのでw、ちゃんと優先順位つきのものが作りたい。1+3*3が先に足し算をして12になる電卓もあるけど、算数のルールどおりに掛け算を先に実行して10になってほしい。

 Rubyなら文字列で式を渡せば計算してくれたりしますが、どうやらそんな都合よいことはないので、自力で作ることになります。
 すぐに思いだしたのは、yacc, lex。大学の授業の課題で電卓作りました。 探せばソースもあるだろし、C言語なので使えると思うけど、コードが大きくなりそうな気がするのでボツに。
 次に思い出したのは、forthというか逆ポーランド計算(RPN)。懐かしいとか思いながら、これで作ることにしました。
通常の式からRPNに変換するために、2状態のオートマトンとスタック2つを使いました。 RPNになっちゃえば、計算は簡単。 演算子の計算に必要な個数の数字をスタックから取り出して計算するだけw。

といってもテストが煩雑なので、今回はじめてテストコードを書いてみました。 アタマでは分かっていてもやったことのないテストファースト。 なかなか面白いと思いましたが、この手のテストは教科書通りなので、簡単だったからかもしれません。 UIとか通信とか絡むと、難しいのかも。

2013年12月17日火曜日

12歳の少年二人がプログラミングスクールを開校, 2年間ですでに150名が課程を終了
小6から中3の生徒達に混ざって一緒に学びたいです。しかし賢そうな二人ですね。



ターミナルウィンドウに雪を降らせよう!
これもプログラミングの一種ですよね。プログラミングの一歩を踏み出すきっかけに。



「お金がかかるのは変」 無料の受験動画サイト「manavee」作った東大生 プログラミング未経験から5万人が使うサイトに (1/4) - ITmedia ニュース
1人から270人へ。すごくパワーを感じます。今の高校生は恵まれてるな、って思える記事です。



トップ1%だけが実践している集中力メソッド:スティーブ・ジョブズも毎朝やっていた! 集中できない時の最終兵器 (1/2) - 誠 Biz.ID
これからでも真似できるメソッドです。ちょっと時間を作ってリフレッシュしてみましょ。



iPhone/Androidアプリのリリース前に絶対押さえておきたい!品質向上チェックリスト | Find Job ! Startup
チェックボックスもついてますから、リリース前に是非チェックしてみてくださいね。



もうすぐ冬至ですね。夜が来るのが早いです。
でも暗くなると意外と集中力がアップするのは私だけでしょうか?
でも暗くなると眠くなるのもあるから思ったように作業が進まないのが危ういです。

2013年12月15日日曜日

広告

 普段使いのシンプル電卓malcの開発日記のづづき です。

 広告を入れたいと思いました。 理由は、使ってもらえているのが分かるから。 ダウンロード数だと、どのくらいの頻度で使ってくれているかまでは分かりません。落としただけで使ってないかもしれないし、もしかしたら毎日使ってくれてるかもしれない。 でも、広告をいれると、そこまで分かるというのがモチベーションになります。
(実際、収入という意味では、あまり意味のある数字にはなりません、いまのところw。) 

 そういう理由ということもあり、広告は出すが、操作の邪魔はできるだけしたくない。 他の方の作品のレビューで、「起動時に広告読み込みがあるせいでサッと使い始められない」というのがあって、気になったのです。

 というわけで、広告の表示タイミングを工夫してみました。 起動直後は、広告は表示されません。 計算が終わったら、つまりイコールを押して計算結果が出てから広告を表示します。また、メモリーの領域を縮めて表示するので、メモリーを操作したら消えるようにしました。

 実際に使ってみて、邪魔になってない気がしています。自己満足な感覚でないといいのですが。

今回は、iPadのプログラマーな方むけのとっても技術的なハナシです

iPadのUIPopoverを できるだけStoryboardを有効活用して作る場合のお話です。
(なお、Storyboardを使わないパターンは UIPopoverControllerチュートリアル その2 などが参考になりました。)


以下が最善の策かは分かりませんが、とりあえず動いているし、いろいろググって調べたものと比較しても簡単です。



■StoryboardでUIPopoverを設定する
SegueにIdをつけて、StyelはPopoverを選びます。これで接続されたUIViewController(destinationViewController)が Popoverで開きます。

でも、これだけだと

  • 自分自身の多重起動も含め、同時に二つ以上のPopoverが表示されます。
  • 閉じるボタンを作れない

という問題があります。


■Popoverを呼び出す UIViewControllerで解決する
呼び出し元のUIViewControllerに -(void)prepareForSegue: sender:を追加し、その中で

  1. staticなUIPopoverController変数を定義し、Popoverの二重起動を防ぐ
  2. Popoverで開かれるUIViewControllerにPopoverControllerを通知しておく
  3. 上記2つの処理はsegueがUIStoryboardPopoverSegueクラスの時に実施する

を行います。 あとは、呼び出されるUIViewControllerから PopoverControllerが参照されるので、 [self.popc dismissPopoverAnimated:YES] ; とすれば消すこともできます。


ソースも付けておきます。
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    static UIPopoverController* popoc = nil;
   
    if ([[segue identifier] isEqualToString:@"SplitViewFlip"]) {
        MasterViewController* mvc = [((UISplitViewController*)
                                 [segue destinationViewController]).viewControllers objectAtIndex:0] ;
        // mvc関連のデータ受け渡しをする
    }
    else if ([segue isKindOfClass:[UIStoryboardPopoverSegue class]]) {
        if ( popoc )
            [popoc dismissPopoverAnimated:NO] ;
        popoc = ((UIStoryboardPopoverSegue*)segue).popoverController ;
        if ( [segue.identifier isEqualToString:@"PlanPopover"]) {
            PlanViewController* pvc =(PlanViewController*)[segue destinationViewController] ;
            pvc.popc = popoc ;
        }
    }
}