カテゴリー別アーカイブ: めざせ1万PV/day

Qt5 再入門>Hello, World (Label使用、デザイナ非使用)

次はLabelウィジェットは使用するが、デザイナを使用せずに「Hello, World」を表示する方法を見てみよう。

QMainWindow は、ウィンドウ中央に表示するウィジェットを持つ。これを「セントラル・ウィジェット」と呼び、setCentralWidget(QWidget*) で指定することができる。
なので、ui セットアップ後に、Label オブジェクトを生成し、それをセントラル・ウィジェットとして指定してやればよい。

MainWindow::MainWindow(QWidget *parent) : (略)
{
    ui->setupUi(this);
    QLabel *label = new QLabel("Hello, World");
    setCentralWidget(label);
}

演習問題

  1.  QLabel ではなく QPushButton オブジェクトを生成し、セントラル・ウィジェットに指定してみなさい。

 

Qt5 再入門>Hello, World (デザイナ・Label使用)

まずは画面に「Hello, World」を表示してみよう。
それにはいくつかの方法があるが、まずは一番簡単なLabelを使ったものを紹介する。
下図の左側のプロジェクト部分の Form を展開し、mainwindow.ui をダブルクリックする。

そうすると、下図のようなデザイン画面に切り替わるはずだ。
左にウィジェット一覧があるので、そこからテキストを表示するためのウィジェットである Labelを探す。ウィジェットはあまりに多すぎて探すのが大変なので、上部のフィルター部分に「la」と入力すると、下図のように一番下に出てくるぞ。

左側のウィジェット一覧から「Label」をドラッグし中央のフォームにドロップすると、下図の様に Labelウィジェットが画面に配置される。

次に「TextLabel」の部分をダブルクリックし、「Hello, World」とキーボードから入力し、ラベルテキストを変更しよう。

これで、プログラムは完成なので、Ctrl + R を押して、ビルド&実行すると、下図のように表示されるはずだ。

デザイナ右下のプロパティ部分で、フォントやアライメントを指定できるぞ。
下図はフォントを大きくし、左右中央揃えに変更してみたものだ。

Ctrl + R で実行すると下図のようになるぞ。

演習問題

  1.  Label ではなく PushButton を配置し、テキストを「Push Me」してみなさい。

まとめ

  • form>ui ファイルをダブルクリックすることでフォームをデザインできるぞ
  • ウィジェットを画面に貼り付けることができるぞ
  • 目的とするウィジェットを探すときはフィルターを使うと便利だぞ
  • プロパティでウィジェットの属性を変更することができるぞ

Qt5 再入門>空のプロジェクト作成

久々にQtでアプリを作ろうと思ったら、いろいろすっかり忘れていたので、自分の備忘録としてもQt5 を使ったアプリの作成方法を記述しておく。

なお、Qt のバージョンは 5.9, Qt Creator のバージョンは 4.3.1を使用する

空のプロジェクト作成

まずは「ようこそ」の上部中央の【+ 新しいプロジェクト】をクリックして、新しいプロジェクトの作成を開始する。

作成するプロジェクトの種別を指定するダイアログ(下図)が表示される。
通常アプリを作成したいのであれば、下図の様に「アプリケーション」、「Qtウィジェットアプリケーション」を選び、【選択】を押す。

次にプロジェクト名、プロジェクトファイルのパスを入力する。

次にクラス名、ファイル名等を設定できるダイアログが表示される。
通常は特に変更する必要は無い。

最後に、プロジェクト管理、概要が表示されるので、問題が無ければ【完了】を押す。

以上で、プロジェクトが生成される。

プロジェクトが作成できたら Ctrl + R を押してみよう。
下図のような空のウィンドウが表示されるはずだ。

数独サイト

「数独」でぐぐった場合

234.0KPV/月、今日の数独20問

154.6KPV/月

224.9KPV/月

509KPV/月

参考:http://vivi.dyndns.org/ は 132.1KPV/月

 

 

2016年11月までの広告収入

■ 現状分析

下図はここ3年間の月ごとの(web+アプリ)広告収入の推移グラフ。

temp3

具体的な金額は公開していないが、今年の月々の収入は大学生のアルバイト程度で、サラリーマンの給料程度には届かず(しかもボーナスも無い)、広告収入だけで暮らしていけるレベルではない。
しかし、見てわかるように、前年比約3.5倍、指数関数的に増加しているので、このペースが続けば、1年後あたりには広告収入だけで暮らしていけるレベルになると期待している。
もちろん、今後もこれまでのようなペースで収入が増加していくという保証はまったくない。今後の開発、マーケティング活動、運次第である。

ちなみに、増加している総収入の推移は成長曲線に従うと考えられる。具体的にはロジスティック曲線だ。最初期は増加していることがわからないほど徐々に増加し、ある時点から指数関数的に急激に増加し、変曲点を経て導関数が減少し、上限に近づいていく。
毎月の収入は総収入を微分したものなので、初期の頃は指数関数だが、変曲点のところがピークになり、そのあとは徐々に減少していく。微分方程式で記述すれば dN/dx = rN(1-N/K) となる。

下図は月々の広告収入をwebコンテンツ(AdSense)とアプリ(AdMob)に分けたグラフ。

temp4

webコンテンツによる収入は多少の上下はあるが、おおむね緩やかに上昇している。
広告配信を行う無料アプリは、2014年8月からリリースを開始した。初期の頃は地をはうような収入であったが、アプリ数が増加し、また後で詳細に述べる「AIホールデム」のダウンロード(以下、DLと略す)数増加に伴い、2015年12月にはアプリ広告収入がwebコンテンツ収入を上回り、11月にはその月の総広告収入の約80%を占めるまでに至っている。

下図はアプリ収入の大部分を占める「AIホールデム」の毎月のDL数の推移だ。

temp

リリース直後はほとんどDLが無かったのが、2015年11月末に日本のTV番組(「1年の半分をカジノで過ごす東大卒の男」)に2012年「ポット・リミット・オマハ・シックス・ハンデッド」世界チャンピオンの木原直哉氏が出演してテキサスホールデムが紹介され、それにより日本からのDL数が一気に増えた。おいらはこれを「木原インパクト」と呼んでいる。

さらに、2016年8月中旬以降、DL数の伸びが急激に増えた。その理由ははっきりしていないが、Google Play にてブーストが効きづらくなったことが主な要因ではないかと考えている。

下図は、月々のDL数をUS・日本・その他の国に分けたもの。

temp

日本からのDL数は、「木原インパクト」の効果が徐々になくなってきていることにより徐々に減少していたが、8月が底で徐々に上向いてきている。
8月中旬から、世界各国からのDL数が急激に増えている。前述した様に、その理由は不明だ。

下図は「AIホールデム」の月々の広告収入をUS・日本・その他の国に分けたもの。

temp2

US, その他の国々からの収入は指数関数的に増加している。基本的に広告収入はDLが数に比例するのだが、日本・US以外の国々はクリック単価が低く、そのためにUSからの収入が最も多くなっている。

下図は8月中旬以降のアプリDAU(日々のアクティブユーザ数)のグラフ。

temp3

広告収入は基本的にDL数に比例すると書いたが、DLされてもすぐにアンインストールされたものは収入には結びつかない。また、アンインストールされなくても、ストレージに眠っているだけでも意味がなく、日々使用される(広告をクリックしていただく)ことが大事だ。そういう意味で、DAUは広告収入にダイレクトに結びつく重要な要素である。

8月中旬以降、DAUはほぼ線形に増加していて、11月に入ってから線形回帰の傾きが倍増している。これは、たんなるゆらぎかもしれないが、最近ヘルプ機能を徐々に実装してきた成果かもしれないと思っている。

下図は「AIホールデム」の1日ごとのDL数の推移グラフ。マッチ棒のようなマークは、アップデートを表す。

temp

一般的に、アップデートを行わないと継続的なDLが行われないと言うが、このグラフを見る限りでは、アップデートとDL数増加の明らかな因果関係は認められない。
むしろ、DL数が増加すると、開発意欲が湧き、アップデートしているような現状になっている。

が、アップデートが製品寿命を延ばす効果があるのは明らかであるので、今後も定期的に行っていくつもりだ。

■ 教訓

  • 中身の時代
    • ユーザ、スポンサー、場の提供者全員に対して有益か?
  • Google を介した口コミ (※ ユーザの積極的行動が不要)
  • プレイ時間の長期化・最大化を狙う
  • 以下の戦略が有効
    • 入り口を優しく
    • やりこみ要素
    • オンラインランキング(他のプレイヤーとの比較・競争)
    • トレーニング要素?
    • 実用性?

■ 今後の方針

  • 「AIホールデム」に約半分の工数をつぎ込み、ヘルプ・機能の充実、品質向上などを継続的に行う。
  • 新規アプリリリース
    • パズル系
    • ギャンブル系
      • バックギャモン
    • ツール系
  • 古いアプリのアップデートも行っていきたい。
    • 特に、古いアプリは見た目が悪く、ヘルプも皆無なので、そのあたりに工数をさきたい。

■ 今後の希望的予測

  • 日々のDL数の増加傾向はあと数ヶ月は続く
  • 「AIホールデム」累計DL数:2016年末は5万弱、2017年末は20万本~30万本
  • 広告収入の増加率は3倍/年が続く
  • 2017年中にウン10年前の大卒初任給を超える
  • 現在の大卒初任給並になるのは2018年以降

【cocos2d-x v3】 RadioButton の使い方

RadioButton クラスは v3.8 で追加された比較的新しいクラスだ。

  • RadioButtonGroup オブジェクトを生成し、子ノードとしてシーンに追加
  • 選択肢の分だけ、RadioButton を生成し、RadioButtonGroup オブジェクトに 追加し、シーンへも子ノードとして追加する
  • RadioButton オブジェクトにイベントリスナーを指定する
// Create a radio button group
auto radioButtonGroup = RadioButtonGroup::create();
this->addChild(radioButtonGroup);

// Create the radio buttons
for(・・・) {
        RadioButton* radioButton = RadioButton::create("cocosui/radio_button_off.png", "cocosui/radio_button_on.png");
        float posX = startPosX + BUTTON_WIDTH * i;
        radioButton->setPosition(Vec2(posX, winSize.height / 2.0f + 70));
        radioButton->setScale(1.2f);
        radioButton->addEventListener(CC_CALLBACK_2(LabelToggleTypeTest::onChangedRadioButtonSelect, this));
        radioButton->setTag(i);
        radioButtonGroup->addRadioButton(radioButton);
        this->addChild(radioButton);
}

【ToDoアプリ】新規項目の追加方法

ToDoアプリの新規項目の追加方法について考えてみる

以下の2方式が考えられる

  • 普通のエディタのように改行すると行頭に「□ 」が表示され、そこに項目テキストを入力する
  •  追加ボタンや新規項目メニューを実行すると、ダイアログがでて、そこで項目テキスト、オプション情報を入力し、【OK】を押す

Google Keep が前者の方式、Trello が後者の方式だ。
前者の方が項目を続けて入力するのは楽だが、オプション情報の設定方法を別途用意しなくてはいけない。

コマンドモードを用意するのであれば、ダイアログを表示するものとそうでないコマンドを用意すればいいかもしれない。

最低限動作するものをまず実装してみるという方針なので、前者をとりあえず採用してみる。

 

【自分用メモ】ToDo アプリを作りたい

現状:

  • テキストエディタで1項目=1行で管理している
  • 状態、オープン日付、クローズ日付、適用バージョン、項目テキスト を記述
  • 最小粒度、より大きな粒度の項目が同じレベルで記述されている
  • 項目はオープン日付でソートされている
  • プロジェクトごとにToDoのテキストファイルを作成し、編集・閲覧している

例(ハーフギャモン):

◎ 09/24 09/24 0.001 AI が3ゾロで全部のサイの目の移動ができないと、クラッシュする
● 09/24 ゴールしたら、バーにある相手の石をヒットしたようになった
● 09/25 AI サイコロがゾロ目の時、サイコロが4つ表示されない
● 09/25 バーに複数石がある場合は、個数を表示するかずらして表示する
◎ 09/25 09/25 0.001 石移動時のZオーダが大きくなっていない?
◎ 09/25 09/25 0.001 バーの左右にハイライト・影を描画

現状の問題点:

  • 状態変更、日付の入力を手編集で行っているので、非効率である
    • ViVI, さくさくエディタでは Alt+E, I, 2 で日付を入力できるが、それでも手数が必要
  • 異なる粒度のものが同列に並んでいて分かりづらい
    • → 階層化したい
  • 優先順位、重要度、カテゴリ、タイプ情報が無い
    • 項目に追加してもいいのだが、編集が面倒だし、項目が多くなりすぎると視認性に劣る
  • Windows 上にテキストで置いているので、携帯端末から参照・修正しづらい
    • Dropbox上に置けば条件は満たすのだが、現状はそのような運用は行っていない

ToDoアプリを作りたい

  • 専用アプリを開発し、効率的にToDo管理を行いたい
  • Qt または cocos2d-x で開発?
    • cocos2d-x で本格的なツールを開発可能か? または妥当か?
    • Andoroid 版を Qt で開発するのは妥当か?
  • 日付の自動入力、わかりやすい表示、状態変更、統計機能など、自分の欲しい機能を実装しほうだい
  • Android 版は無料+広告付き and 有料版?
  • WIndows 版でも同様?
    • Webビューを使いweb広告を表示すればおk?
  • 最低限の機能のものをまず作り、それを開発に使用しながら機能追加・使い勝手向上

実装したい機能:

  • タスク追加
    • 自動的にオープン状態に
    • オープン日付自動設定
    • 優先順位(A-E)、重要度(A-E)、タイプ、タグ、期限などを設定可能
  • 階層化
    • 複数のタスクを「カード?」としてまとめる?
    • 複数のカード?を「プロジェクト?」としてまとめる?
    • 3階層固定でおk?
    • trello 的な表示、全体・部分を一覧表示、マインドマップ的表示?
  • 表示
    • 「□ タスク一覧を表示」のように、チェックボックスとタスク項目は必須
    • 優先順位により背景色を変える?
    • 重要度別にアイコンを表示?
    • ステータスにより表示位置を変える
    • どの項目を表示するかを選択可能
    • デフォルトではオープン項目だけが、優先順位順に表示される
    • ボタンで、ソート方法を変更可能
    • 「履歴」を表示・非表示
    • カード、プロジェクト一覧ではタスクの統計情報を表示
  • 検索・絞込?
  • 編集
    • 項目は普通に編集可能(入力、削除、コピペ、カーソル移動)
    • 先頭のチェックボックスをチェックすると、状態がクローズになる(日付時刻は自動付加)
    • 末尾のゴミ箱アイコンをクリックすると項目削除
    • マウスによる位置移動(優先順位を自動的に変更?)
    • (メモリの許す限り)無限undo
      • 終了すると undo 情報を消去される?

実装方針:

  • まずは最低限のものを数週間?で実装してみる
    • 階層構造無し
    • 状態(オープン、クローズ)、項目テキストのみ?
  • とりあえず Windows版を Qt を使って実装?

アプリの広告表示回数

temp

上図はここ1年のアプリの1日ごとの広告表示回数。
広告収益=広告表示回数*クリック率*クリック単価 なので、アクティブユーザ・プレイ時間を増やし広告表示回数を増やすことが広告収益を増加させることに繋がる。

で、国ごとの収益をみると、最も多いのが日本で67%、ついでUSで22%、3位はオーストラリアで2%となっている。

temp2

上図は日本だけの広告表示回数。

temp3

上図はUSだけの広告表示回数。