dnjiro’s 9VAe blog

誰でもアニメが作れる無料ソフト9VAeきゅうべえ開発者のブログ

9VAeきゅうべえ Xamarin版の開発開始

9VAeきゅうべえ iPad版を、とりあえずGitHubにあげた。UIの改良は、iPhoneアプリが得意な人に任せた方がいいものができると思うので、ちょっと、置いておくことにして、今度は、Xamarinに手を出してみようと思う。

Xamarinは、C#で、Javaを知らなくても、Android版アプリができるらしい。となると簡単に、Android版9VAeきゅうべえが作れるかもしれん。

 

Visual Studio を入れる

まずは、Visual Studio 無料を入れる。Xamarinは一緒に入っているらしい。

Visual Studio for Mac | Visual Studio

 

う、何とか入ったがディスクの空きがほとんどなくなった。もうアプリのアップデートができない。使わなそうなアプリを消して、空きが3GBだ。これでできるかどうかわからんが、とりあえず進む。

 

Xamarinのサンプルを入手し、本当にできるのかチェック

第1回 C#で自作Android アプリを作ろう:出帆準備編 | システムガーディアン株式会社

 

ひとまず、これを参考にしてみよう。

ここに載っていたサンプルプロジェクトを GitHubから入手。実行させてみるとAndroid開発環境がさらにインストールされる模様である。となると、3GBではおそらく足らない。HighSierraへのアップデートプログラムが5GBあったのでこいつを削除。いつの間にか入っていたのだが、削除するとまた入るのかな?何とかインストールできた模様。とりあえずシミュレータが起動し、サンプル実行できた。空きが4GBしかないが、シミュレータはちゃんと起動して動いた。素晴らしい。

 

Android実機との接続

次は実機との接続を試す。ネット記事では古い記事も多く、ドライバーを入れろとか、色々あったが、インストーラがちゃんとやってくれていそうな感じだったので、とりあえずUSBで接続。

 

これだけでは何も起こらなかったので、Android実機の設定パネルの「開発者設定」で「USBデバッグ」をONにしてみる。

 

すると何と、VisualStudioの実行環境にAndroid実機が追加された。これにチェックを入れてビルド実行すると・・・実機でサンプルプログラムが動いた!何と簡単。素晴らしい。本当に Visual StudioAndroid開発ができそうだ。

 

ということは、

  1. 描画のサンプルプロジェクトを入手して、タッチイベントの処理を調べる
  2. C#からCを呼ぶ方法を調べる
  3. 描画ルーチンを、.NET用に書き換える

という手順を踏めば、Android版 9VAeが作れそうだ。小さい画面でも使えるようにするのは、iPhone版で改良すみなので、割と簡単にできるかもしれん。進んでみよう。

 

 

9VAeきゅうべえiPad版 GitHubにプロジェクトを公開した

9VAeきゅうべえiPad版がだいたい動くようになったので、GitHubでプロジェクトを公開しました。誰でもこれを修正し、ストアアプリを作って販売しても構いません。今の状態でも、SVGイラストからアニメGIFを作るのに使えますが、UI部分がイマイチなところがあるので、皆さんの知恵を借りたいです。

 

GitHubアドレスはこちら

g

 

 

GitHubにプロジェクトをあげる際に以下の記事を参照した。

今さら聞けない!GitHubの使い方【超初心者向け】 | TechAcademyマガジン

 

Macには最初から、gitコマンドが入っており、簡単に登録できた。手順は以下のとおり。

 

1.GitHubに新しいリポジトリを作成する

  1. GitHubにアカウントを作る(無料)(https://github.com)
  2. GitHubにログイン
  3. 「New repository」ボタンをクリック
  4. 「Repository name:」に名前 9VAeLib を入力
  5. 「Public」, 「Initialize this repository with a README」にチェック
  6. 「Create repository」ボタンをクリック > 9VAeLibのページができた。

リポジトリアドレスは、「Clone or download」ボタンを押すとわかる。 https://github.com/dnjiro/9VAeLib.git

 

2.Macにローカルリポジトリ(修正用フォルダ)を作成する

  1. GitHub修正用フォルダを適当な場所、名前で作成
  2. ターミナルを開く(アプリケーション>ユーテリティ>ターミナル)
  3. cd GitHub修正用フォルダのパス(ターミナルにcdを入力してからフォルダをドラッグ&ドロップすると入力できる。cd は場所を移動するコマンド)
  4. git init  
  5. git remote add origin https://github.com/dnjiro/9VAeLib.git
  6. git checkout master
  7. git pull

これで作成したフォルダに、GitHubで作成した README.mdがチェックアウトされた。このフォルダを修正してコミットすれば、GitHubに反映されるようだ。

 

3.GitHub修正用フォルダの中身を修正、追加

  1. README.md をエディタで修正
  2. 新しいファイル(LICENSE.txt, 9vae.svg iosフォルダ)を追加
  3. git add  LICENSE.txt
  4. git add 9vae.svg
  5. git add ios
  6. git commit -m “英語コメント”
  7. git push origin master

これでGitHub取得修正用フォルダの中身が、GitHubに反映された。

 

今後の修正はブランチを作ってからGitHubに反映

git checkout -b ver01

git fetch

修正(ファイルを追加した場合は、git add)

git commit -a -m "コメント"

git push origin ver01

 のようにすれば良いみたいだ。commitに -a がないと反映されない。

  • git push が成功すると、GitHubプロジェクトに、「Pull request」というボタンができる。このボタンをクリックし、コメントを入力し、マスターに修正を反映させる。
  • ブランチは、git branch で表示、git branch -d ブランチ名 で削除できる。
  • GitHubから新しいフォルダに9VAeプロジェクトをコピーする場合は次のようにする。

cd 新しいプロジェクトフォルダ

git clone https://github.com/dnjiro/9VAeLib.git

cd 9VAeLib

 この場合は、git initをしてはいけない。9VAeLibフォルダの中に、gitの情報が書き込まれており、ここで作業を行う。

 

4.GitHubプロジェクトから9VAeiPad版を作るには

必要なもの

手順1.Xcodeでプロジェクトを開き、シミュレータで実行

  1. Appストアから、最新の Xcodeを入手する。古い Macだと動かない場合あり
  2. ブラウザで、9VAeiPad版(https://github.com/dnjiro/9VAeLib)を開く。
  3. 「Clone or download」ボタン「Download ZIP」を順番にクリックする。プロジェクトがダウンロードされる
  4. ダウンロードフォルダを開くと、ZIPを解凍した「9VAeLib-master」ができる。
  5. 中の「ios」フォルダの中の「9VAe.xcodeproj」をダブルクリック。Openボタンをクリックすると、Xcodeが起動し、9VAeの設定画面が開く。
  6. Xcode の左上にある「右向き三角▶︎」をクリック。プロジェクトがビルドされ、しばらく待つとシミュレータで9VAeが起動する。

手順2.実機(iPhoneまたはiPad)で9VAeを実行

  • もし今まで、iTunesを使ったことがない場合、iTunes > 環境設定 >「デバイス」を開き、「iPhone,iPodを自動的に同期しない」にチェックを入れておくと良い。同期によって実機のデータが修正されるのを防ぐため。

 

  1. 実機(iPhone/iPad)とMacをUSBケーブルで接続する。
  2. 実機に「このコンピュータを信頼しますか」が表示されたら「信頼」をタッチする。
  3. ダウンロードしたプロジェクトのiosフォルダの中の「9VAe.xcodeproj」をダブルクリックしてプロジェクトを開く。
  4. 設定画面(もし表示されていない場合、左上の切り替えボタンをクリックしてフォルダ構成を表示し、プロジェクト「9VAe」をクリック)「General」画面の「Signing」の「Team」が赤字(未設定)になっているので、ここをクリックし「Add account...」で 自分のAppleIDを登録する。
  5. デバッグ環境をシミュレータから実機に切り替えるには、Xcodeのメニュー「Product」から「Destination」、「Device欄のiPhoneまたはiPad」を順番にクリックする。
  6. Xcodeの左上の「右向き三角▶︎」ボタンをクリックすればプロジェクトがビルドされ、実機に9VAeアイコンが転送される。ただし最初は実行できないとのエラーが出る。
  7. 実機(iPhone/iPad)のトップ画面にある「設定」アイコンをタッチし、「一般」「デバイス管理」を順番にタッチ。上で入力した自分のAppleIDが見えるはずなので、タッチ「信頼する」に設定。これで実機でデバッグできるようになります。
  8. もう一度、Xcode上の「右向き三角▶︎」をクリックすれば、9VAeきゅうべえが起動するはずです。

 

 9VAeアプリ修正のヒント

f:id:dnjiro:20171123165409p:plain

9VAeきゅうべえiPad版 スタティックライブラリのサイズを小さくする

9VAeきゅうべえiPad版の GitHub公開を目指して作業中。

 

ライブラリのサイズが20MBあったのだが、デバッグ情報を外すと9MBに削減できた。

 

ライブラリからデバッグ用情報を外す方法

objective c - Hide code in static library (iOS Obj-C) - Stack Overflow

に書いてあった以下の設定をすれば、サイズが小さくなった。

 

Select your Target and go to Build Settings. Set

  1. ' Strip Debug Symbols During Copy ' to YES
  2. ' Debug Information Format ' to 'DWARF with dSYM File'
  3. ' Generate Debug Symbols ' to 'NO'
  4. ' Symbols Hidden by Default ' to 'YES'

1.は Deployment

2.は BuildOptions

3.4.は Apple LLVM 8.1-Code Generation の中にあった。

 

色々細かい作業

  • 点線、矢印を追加
  • 選択枠の上にメニューが表示された時、メニューを消去して跡が残る問題を改善。まだ完全ではない。XOR演算で表示しているのが問題と思われる。他のソフトを見ると、XOR演算は使ってないようだ。今後の課題。
  • ポップアップメニューの項目の幅を広げる。それに伴いグラデーション、筆線のポップアップメニューの表示を修正
  • ポップアップメニュー表示時の画面回転
  • YesNoダイアログの日本語、英語切り替えを追加

ライブラリ作成 

iOSにおける静的ライブラリ作成技法 - 渋谷ラーメン男道

を参考にして、ライブラリ作成について最終確認。実機、シミュレータ用、32bit, 64bit用の4つのライブラリが入っている。

$ file libqvaeLib.a 

libqvaeLib.a: Mach-O universal binary with 4 architectures: [arm_v7:current ar archive random library] [arm64]

libqvaeLib.a (for architecture armv7): current ar archive random library

libqvaeLib.a (for architecture i386): current ar archive random library

libqvaeLib.a (for architecture x86_64): current ar archive random library

libqvaeLib.a (for architecture arm64): current ar archive random library

$

 

プログラミング学習について小学校学習指導要領の3つの誤解

先日、関西教育ITソリューションEXPOで、「教育改革を踏まえた教育情報化の重要性〜プログラミング教育の動向〜」文部科学省生涯学習政策局情報教育課 情報教育振興室長 安彦視学官のセミナーを聴講し、小学校のプログラミング学習について勉強しました。

いくつか誤解していた点が明らかになったので書きます。

 

これは小学校の学習指導要領の話であって、プログラミングをどう学習すれば良いかという話ではない点に注意。プログラムが好きな人は学習指導要領とは関係なく、どんどんプログラムの勉強を進めてほしいです。

 

誤解1:プログラミングという教科ができるわけではない。

プログラミングを教えるのは、算数や理科と言った、既存の教科の中です。今までの教科の中に、プログラミング学習を取り入れて、学び方を改革していきましょう。ということみたいだ。プログラミングを目的にした教科ができるわけではない。

 

誤解2:プログラミング言語を覚えることがねらいではない

新学習指導要領解説が公開されました~小学校段階でのプログラミング教育の部分をご紹介します~ | 未来の学びコンソーシアム

にこう書かれている。(小学校学習指導要領解説 総則編  平成29年6月 文部科学省 85ページ)

また,子供たちが将来どのような職業に就くとしても時代を越えて普遍的に 求められる「プログラミング的思考」(自分が意図する一連の活動を実現するた めに,どのような動きの組合せが必要であり,一つ一つの動きに対応した記号 を,どのように組み合わせたらいいのか,記号の組合せをどのように改善して いけば,より意図した活動に近づくのか,といったことを論理的に考えていく 力)を育むため,小学校においては,児童がプログラミングを体験しながら, コンピュータに意図した処理を行わせるために必要な論理的思考力を身に付け るための学習活動を計画的に実施することとしている。

 

その際,小学校段階に おいて学習活動としてプログラミングに取り組むねらいは,プログラミング言 語を覚えたり,プログラミングの技能を習得したりといったことではなく,論 理的思考力を育むとともに,プログラムの働きやよさ,情報社会がコンピュー タをはじめとする情報技術によって支えられていることなどに気付き,身近な 問題の解決に主体的に取り組む態度やコンピュータ等を上手に活用してよりよ い社会を築いていこうとする態度などを育むこと,さらに,教科等で学ぶ知識 及び技能等をより確実に身に付けさせることにある。

プログラミング学習の狙いは、プログラミング言語を覚える、技能を習得するのが目的ではない。プログラムのよさを知り、コンピュータを活用する態度を育むのが目的である。またプログラムを言語に限定せずに記号の組み合わせと表現している。

 

誤解3:「アンプラグド」(コンピュータを使わない方法)を推奨しているわけではない

学プロ研#3(プログラミング教育関連の研究会)で、小学校のプログラミング学習授業例の紹介の中で「アンプラグド」という言葉を何回も耳にした。初めてきいた言葉だったが、コンピュータを使わないプログラミング学習方法らしい。

 

特集:小学生の「プログラミング教育」その前に(1):コンピュータを使わないアンプラグドな体験と容易にできるプログラミング環境があれば、小学生も教師も楽しく学べる (1/2) - @IT

 

この方法が注目されるのは、小学校でコーディングから始めるのは難しいからと思うが、コンピュータを使わなくてもできるという発想が気になった。学習指導要領には「コンピュータを活用する態度を育む」のが目的とある。アンプラグドは、簡単に言えば、コンピュータの動きを人間が真似をすることでコンピュータの動作を学ぶ方法だが、コンピュータをさわらずに、コンピュータへの指示がどれだけ細かいかを教えるのは本来の目的にあっているのか。少なくともコンピュータを使った学習方法を進めてほしいと感じる。

 

プログラミング言語なしで使える「プラグド」アプリの充実が必要では?

結局、「アンプラグド」を使わなくても、コンピュータのすごさを体験できる「プラグド」なアプリを各教科向けに充実させる必要があるのだと思う。今、小学校向けプログラミングとして、Scratchのようなブロックを並べる方式は充実してきたが、その前段階になるもっと簡単なブロックを覚えなくてもできる方法を充実させていくことが必要ではないか。

 

例えば、教育エクスポで、ヤマハが展示していた「ボーカロイド教育版」は、タブレット上で楽譜の上に指で線を描いていくと、初音ミクのように歌ってくれる。ここでは楽譜がプログラムであり、タブレットで編集できる。学習指導要領に適したアプリと言える。

ボーカロイド教育版 | 製品案内 | Smart Education System by Yamaha - 「学び」に関わるすべての人にワクワクを -

 

2018年1月から4月まで、大阪の子供向け博物館「キッズプラザ大阪」で行われた「1コマアニメーション」のワークショップでは、PEAS motch!というフリーソフトが使われているが、ブロック言語を使わずに手書きするだけでアニメーションが作成できる。

 

f:id:dnjiro:20180626065814g:plain

 

キッズプラザ大阪「1コマアニメーション」カリキュラム - dnjiro’s 9VAe blog

 

学習指導要領に従ったプログラミング学習を進めるにはプログラミング言語をマスターしなくても使える「プラグド」な方法を増やしていくことが必要ではないかと思う。

 

 

 

9VAeきゅうべえiPad版 シミュレータ実機兼用スタティックライブラリの作り方

9VAeきゅうべえiPad版がだいぶ出来上がってきた。

綺麗なiPhone/iPadアプリを作るのは、初心者の私には難しいので、iPhone/iPad用9VAeを作るプロジェクトを公開し、誰でも、9VAeきゅうべえアプリを自分で作れるようにしようと考えている。

 

そのため、9VAeライブラリの作り方を調べた。

 

iPhoneシミュレータ用と実機用のライブラリは違う

新規プロジェクトからライブラリを作るのは簡単だったが、ビルドした時のライブラリがどこにできるかが最初わからなかかった。これは、設定を変更すれば、プロジェクト内部に出力できるみたいだ。

 

次に、作成したライブラリを使うと、シミュレータでは動作するが、実機では動作しないという症状になった。これは、シミュレータMacインテルでCPUが違うので当然か。このあたりを、もくもく会で、サンフランシスコ在住のプログラマーから教えてもらった。いろんな人の知恵を借りてiPad版を作っている。

 

これにどう対応するか調べてみると、lipo というコマンドを使ってライブラリをまとめることができるみたいだ。以下の記事を参照

iOSにおける静的ライブラリ作成技法 - 渋谷ラーメン男道

 

ただ、アプリストアに申請する時に、シミュレータ用のコードが含まれていると拒否されるとの情報もある。

 

とはいえ、ダウンロードしたプロジェクトを実行した時にリンクエラーが出るのは避けたいので、1本の実機、シミュレータ兼用ライブラリを作ることにした。

Run Script を使って lipo を実行し複数のライブラリを一本化

XCodeのRun Scriptを試しに触ってみる - woshidan's loose leaf

を参考にする。

 

ライブラリプロジェクト> Build Phases > + >New Run Script Phases

Run Script行が追加されるので、以下の行を追加すると、シミュレータ用デバッグと、実機用の両方が入ったライブラリができた。

lipo -output libqvaeLib.a -create $BUILD_DIR/Release-iphoneos/libqvaeLib.a $BUILD_DIR/Release-iphonesimulator/libqvaeLib.a

この兼用ライブラリ以外に、デバッグ、実機単独のライブラリもプロジェクトに入れておくことにする。下は xcodeの設定画面

f:id:dnjiro:20171120091613p:plain

 

 

 

 

 

9VAeきゅうべえiPad版 YesNo入力待ちができない問題

9VAeきゅうべえiPad版を開発中。パソコンアプリからの移植がだいぶできてきたが、対応の難しい点がいくつか残っている。大きなのは次の2つだ

 

  • YesNo入力待ちが使えない。
  • ファイル開く、保存するダイアログがない。

YesNo入力待ちができない問題

YesNo入力待ちというのは、アプリの途中でユーザーの確認を求めて、続きの処理を切り替える機能だ。例えば、「ファイルを上書きしても良いですか?はい、いいえ、キャンセル」で、後の処理を切り替える。

 

昔のパソコンアプリでは、こういう書き方をよくしていた。

 

iOS(最近のアプリの作り方)の場合、こういったアラートを表示することはできるが、その結果を受け取るまで、プログラムを止めておいて、結果を受け取ってから続きの処理を行う。ということができない。プログラムを独立性の高い小さなモジュールに分けて作りなさいということかな。

 

そうなので、ユーザー入力待ちが発生すると、その直前までの処理と、入力した後の処理を分離し、ユーザー入力のあと、新たに続きの処理を開始ということにしないといけない。ところが、最初からそういう設計にしておかないと、入力待ちが発生した時の途中の状態がわからなくなり、「とにかく、この続きをやりたい」ということになってしまう。また、最初は入力待ちがなかった場所に、後から入力待ちを入れて処理を分けるということもある。パソコンアプリである 9VAeには、そんなYesNoがあちこちに入っていて、今更処理を分けるのは大変である。

 

そこで、YesNoアラートの結果が出るまで、じっと待っていて、結果を受け取ってから元の場所に戻るというプログラムを作ろうとしたが、失敗した。別のスレッドで、アラートだけ表示し、その結果を受け取るまで、ループ待ちする、といった裏道を試してみたが、うまく動作しなかった。

 

それで、結局、次のようにした。

  1. YesNoアラートでは、とりあえず、1回目はキャンセルする。その時、もう一度実行するにはどこから実行すれば良いかを覚えておく。
  2. YesNoアラートを表示して結果を取得する。
  3. 最初に覚えておいた場所からもう一度実行する。到達したYesNoでは、その結果を与えて続きを実行する。
  4. プログラム中の全ての YesNoアラートにこの処理を入れる。

これで、かなりの処理は解決できたが、YesNo分岐を連続して行なっている箇所があった。その場合、途中から上手に実行できない。うむむ

 

とりあえず、うまくできたところもある。ファイルを閉じる時に、保存するかどうか尋ねる画面。この入力結果によって続きの処理を変える。

f:id:dnjiro:20171115091857p:plain

 

 

 

9VAeきゅうべえiPad版 SVGデータはiTunes経由。画面回転に対応した

9VAeきゅうべえiPad版開発中

 

iPhoneで作成したデータをどう取り出すかを調べた。

保存フォーマットはSVG。アニメGIFはアルバムに保存すればネットにアップできるが、SVGをアルバムに保存しても

 

SVGデータをiPhoneSafariではアップロードできない

みたいだ。SVGをカメラロールに保存しても、表示されないし、取り出すこともできない。他の方法を調べてみると

 

iTunesでパソコンとファイル共有する

これは使えるみたいだ。

iTunesを使ったファイル共有方法 - Qiita

この場合、iPhoneでは普通にドキュメントとしてSVGで保存すれば良いので何もしなくて良い。ネットにSVGをアップする場合は、パソコンのiTunes経由でいくことにする。

ただパソコンがあるなら、パソコン版9VAeを使えば良いのではという気もする。結局

  • アニメGIF作成ソフトとして使う場合は、iPhone/iPadだけで完結できる。
  • SVGを作りたい場合、iPhone内部ではSVGで保存されているが、データを取り出すにはパソコンが必要。となると、パソコン版9VAeで作った方が簡単。

 

画面回転への対応

QVAeLibは画面サイズ変更に対応しているので、画面回転とその時の画面サイズを取得できれば対応できる。その方法は次の記事を参照した。

EZ-NET: iPhone 回転時にオブジェクトをアニメーションで移動する : Objective-C プログラミング

画面回転にも対応できるようになった。横画面で起動すると。

f:id:dnjiro:20171108163332p:plain

縦にするとこうなる。

f:id:dnjiro:20171108163452p:plain