作成者別アーカイブ: vivisuke

vivisuke について

ぼちぼちソフト作家 テニス・オセロ・ゲーム・パズル類が趣味の年齢不詳のおじさん 自宅研究員(主席) vi と C++が好き 某国立大学 大学院 理工学研究科 修士課程修了(工学修士) 管理工学研究所、 Lotus Development(現IBM)、 ジャストシステム にて研究員・ソフトウェアエンジニアとして勤務した後、 現在福岡市にて テキストエディタViVi などを研究開発 (1998/01~2001/03 は某国立大学理工学部客員助教授)

【自分用メモ】#数独 解がひとつだけかチェック

(webで公開されてた)数独の問題100問に対して、解がひとつだけかどうかをチェックするプログラムを書いてみた。
アルゴリズムは単純な探索を用いるものだが、セルの値をビットマップで表現しているために、重複チェックが数値を用いるものに比べるとはるかに高速だ。
また、数字を入れるときに、重複チェックを行うのではなく、数字を使用するたびに各縦横ブロックの使用済みフラグをオンにしている。
結果、100問をチェックするのに要した時間は 0.3036ミリ秒だった。ということは、約30マイクロ秒/問でチェック可能ということになる。

ちなみに、単に解を見つけるだけ(最初の解がみつかった時点で終了)の場合は、220マイクロ秒/100問だった。ひとつだけかチェックする場合の約15倍高速ということになる。

プロジェクトにファイルを追加 #cocos2d-x #AndroidStudio

・ External Buld Files/Android.mk の LOCAL_SRC_FILES 部分を以下のように修正

LOCAL_SRC_FILES := $(LOCAL_PATH)/hellocpp/main.cpp \
$(wildcard $(LOCAL_PATH)/../../../Classes/*.cpp)

・Classes 以下にソース・ファイルを追加
・プロジェクトをいったん閉じて開く
→ プロジェクト名/cpp/MyGame/プロジェクト名/Classes 以下に追加されたソースが表示される

cocos2d-x を Android Studio でビルド

※ 環境:Android Studio 3.0.1, cocos2d-x v3.16

・コマンドラインにて cocos New <プロジェクト名> -l cpp を実行するとプロジェクトが作成される。
・プロジェクト名/proj.android-studio を Android Studio で開く
・→ すこし時間がかかるが、Gradle(=ビルド設定)が自動的にビルドされ、プロジェクト自体のビルドが可能な状態になる。
・Build > Make Project を実行しビルド
・→ それなりに時間かかるが、プロジェクト/proj.android-studio/app/build/outputs/apk/debug に プロジェクト名-debug.apk が作成される
・リリース版をビルドする場合は、Build > Generate Signed APK を実行する
・デフォルトでは Classes 以下が一覧に表示されないので、Gradle.Scripts/settings.gradle をダブルクリックで開き、以下を追加する

include ‘:Classes’
project(‘:Classes’).projectDir = new File(settingsDir, ‘../Classes’)
include ‘:Resources’
project(‘:Resources’).projectDir = new File(settingsDir, ‘../Resources’)

【iOS】provisioning profile(プロビジョニング プロファイル)

iOS アプリ開発に於いて、provisioning profile(プロビジョニング プロファイル)周りは非常にややこしく分かりづらい。しかも、Apple のドキュメントが非常に不親切でわかりづらい。さらに、Apple が操作方法・画面をころころ変えるので、ぐぐって出て来るわかりやすい解説が現状と乖離していることが多く、かえって混乱することもしばしばだ。

provisioning profile

X-code にて、プロジェクト  > General > Signing (Debug, Release) で「provisioning profile」を指定する必要があるので、これを生成しなくてはいけない。

「Signing」とは「署名」のことで、正当な開発者によりビルドされたバイナリであることを証明するためのものだ。
「provisioning profile」とは署名をするためのファイルで、Apple Developper (https://developer.apple.com) > Account > Certificates, ISs & profiles で作成することができる。

「provisioning profile」を生成するには以下の3つが必要である。

  • Certificate(開発者情報)
  • App ID(アプリID)
  • Device(apple 端末情報)

署名はアプリのバイナリに対して正当な開発者がビルドしたことを保証するために行うものなので、最初の2つ(Certificate, App ID)が必要になる。また、iOS アプリを開発するには Apple 端末を所有していることが何故か必要なので、端末情報も必要というわけだ。

Certificate

「Certificate」とは開発者情報のことである。

.CSR:端末で作成した鍵ペアの公開鍵部分(CertificateSigningRequest.certSigningRequest)
.CER:公開鍵を元に Apple Developer で生成した認証(Certificate)ファイル

公開鍵生成

マックにて、アプリケーション / ユーティリティ / キーチェーンアクセス アプリを起動
キーチェーンアクセス > 環境設定 メニューを選び、「証明書」タブを選択し、以下のように選択する。
「オンライン証明書状況プロトコル(OCSP)」:切り
「証明書失効リスト(CRL)」:切り
キーチェーンアクセス > 証明書アシスタント > 認証局に証明書を要求… メニューを選び、
開発者のメアド、通称を入力し(CAのメアドは空欄)、「ディスクに保存」「鍵ペア情報を指定」をチェック
“CertificateSigningRequest.certSigningRequest” をデスクトップ等に保存
鍵のサイズ:2048ビット、アルゴリズム:RSA であることを確認し、【続ける】をタップ → CSR ファイルが保存される

Certificate 生成

Apple Developper (https://developer.apple.com) > Account > Certificates, ISs & profiles に行き、Certificates > All を選び [+] をタップ
「iOS App Development」または「App Store and Ad Hoc」を選び、【Continue】を押し、Upload CSR file で先に保存した “CertificateSigningRequest.certSigningRequest” を選択する。
最後に【Download】を押してダウンロード

Provisioning Profile 生成

Apple Developper (https://developer.apple.com) > Account > Certificates, ISs & profiles にて、Provisioning Profiles > All 選び [+] をタップ。
「iOS App Development」または「Ad Hoc」を選び、【Continue】を押す
App ID を選択し、【Continue】を押す
Certificates を選択し、【Continue】を押す
デバイスを選択し、【Continue】を押す
Provisioning Profile の名前を入力し、【Continue】→ ファイルをダウンロード

 

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 を押してみよう。
下図のような空のウィンドウが表示されるはずだ。