header_medi8

ビットコイン取引高日本一の仮想通貨取引所 coincheck bitcoin

2016年12月8日木曜日

Macアプリを起動したけどMenuにアプリ名が表示されるだけでウィンドウが表示されないときの対処法

OS X 10.10 で問題なく動いていた Mac アプリが 10.8 で起動しないという問題に遭遇した。

いや、正確には起動はしてるようだ。
Menuバーにアプリ名は表示されているし、Dock にアイコンも表示されている。

でも、メニューバーのアプリ名以降のメニューの生成や、Window の生成に失敗しているのか、
起動しても何も表示されない。

そこで、次の2つのことを試してみました


  • applicationDidFinishLaunching:: で標準エラー出力に asl_log でログを出力してみる
  • 空のプロジェクトで症状を確認


applicationDidFinishLaunching:: で標準エラー出力に asl_log() でログを出力してみる


アプリケーションの起動後に呼ばれる applicationDidFinishLaunching:: が実行されているかの確認をするために、
ここでログを出力するようにしてみましたが、ターミナルには何も出力されない。

つまり、アプリケーションの起動処理のどこかで失敗してるはず。
そこで、各View の viewDidLoad でも asl_log() でログを出してみることにします。

しかし、これでも何も表示されない。
もっともっと根本的なところが原因なのか?

空のプロジェクトで症状を確認


ということで、空のプロジェクトで同様の問題が発生するのか確認してみた。
すると、同じ症状が発生しやがった!なんでやねん!

ただ、これでプログラムではなく、設定等の問題であることがわかった。
空のプロジェクトと問題のプロジェクトで Project Setting とか見比べてみるも、
特に違いがあるようにはみえないけど。。。

もう1回試してみることにして、新規プロジェクト作成。
ここで、おもむろに「Use Storyboardst」のチェックを外して、
Storyboard を使わずに、xib ファイルを使うようにしてみた。




「まあ、これだけでは何も変わらないですよね〜」と思いながら実行ボタンを押してみた。。。


すると、10.8 でも起動するではないですか。
Storyboard 使えないの?と思ってその辺りのキーワードで検索を掛けてみると、
Apple Developer Forum に以下のスレッドがありました。

https://forums.developer.apple.com/thread/16210

これによると、OSX では Storyboard は10.10 からしか使えないので、
10.9 以前のアプリをサポート対象とする場合は、Storyboard の使用には気をつけましょうとのことらしい。

エラー出すなり、選択できないようにするとかしてよ。。。

てなわけで、全部 xib で作り直して無事 10.8 でも起動できました。

2016年11月19日土曜日

Objective-C からコマンドを実行する方法

Objective-C からUnixコマンドを実行したいことがあったので調べてみた。


/**
 * @brief  UNIXコマンドを実行する.
 * @param  [in] command_path   実行するコマンドのパス.
 * @param  [in] args           引数リスト.
 */
- (NSData*)doCommand:(NSString*)command_path args:(NSArray*)args {
    NSTask *task = [[NSTask alloc] init];

    // 標準出力用
    NSPipe *out_pipe = [NSPipe pipe];
    [task setStandardOutput:out_pipe];

    // 標準error
    NSPipe *err_pipe = [NSPipe pipe];
    [task setStandardError:err_pipe];

    // Task に command のパスと引数を設定
    [task setLaunchPath:command_path];
    [task setArguments:args];

    // 設定したコマンドを設定した引数で実行
    [task launch];

    // 標準出力に設定した Pipe からデータを取得する.
    NSData *data = [[out_pipe fileHandleForReading] readDataToEndOfFile];
    return data;
}

ここでは例として、PATH を取得する以下のコマンドを実行してみることにします
uroshika$ echo $PATH 

これをObjective-Cから実行するには、
- (void)getPath {
    NSString* command_path = @"/bin/echo";
    NSArray* args = @[@"$PATH"];
    NSData *data = [self doCommand:command_path args:args];
    NSString* result = @"";
    if (data != nil && [data length]) {
        result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    }
}









2016年10月11日火曜日

Sphinx ドキュメンとのサイドバーに目次を表示する方法

Sphinx で使用するテンプレートによっては、サイドバーに目次が表示されません。
しかし、カスタムテンプレートを作成してすることで目次を表示させることができます。

目次表示用のテンプレートを作成する

目次表示用に使用するテンプレートを作成して「ドキュメントルート/source/_tmeplates」に置いておき、以下の内容で保存します。


<div id="toc" class="sidebarRow">



<h3><a href="{{ pathto(master_doc) }}">目次</a></h3>

{%- if sphinx_version[:3] >= '1.2' %}

{{ toctree (maxdepth=3, collapse=False, includehidden=True) }}

{% else %}

{{ toctree(maxdepth=3, collapse=False) }}

{% endif %}

</div>


conf.pyを編集する

「conf.py」の「html_sidebars」の項目を以下のように記述します。


html_sidebars = {

'**': ['globaltoc.html', 'relations.html', 'sourcelink.html', 'searchbox.html'],

}

  • relations.html
    • 「Previous topic」「Next topic」を表示する
  • sourcelink.html
    • 「Show Source」のリンクを表示する
  • searchbox.html
    • 検索ボックスを表示する

2016年10月10日月曜日

無料のGitホスティングサービス 『Bitbucket』がいい!!

Simple Midi Player」を作っているときバージョン管理を行っていましたが、一人で作っていたため、人とソースコードやリソースを共有する必要がなかったため、ローカルにリポジトリを作成して行っていました。

ところが、現在作成中のアプリは他の人とソースコードを共有したり、デザインを外注したりする関係で、リモートリポジトリが欲しくなりました。
さらに、公開予定のアプリを管理するリポジトリなので、プライベートリポジトリにしたいと考えていました。

GitHub と Bitbucket


これまで、自分の勉強用で「GitHub」を使用していたのですが、「GitHub」は無料だとプライベートリポジトリが作成することができません。

しかし、もう1つの有名な Gitホスティングサービス「Bitbucket」なら、なんと無料でプライベートリポジトリが作れて、5人までメンバーを招待できるのです!

※念のため書いておきますが、GitHubは素晴らしいサービスです!

Bitbucket

Bitbucket は、Atlassian(アトラシアン)が運営している、Webベースの Gitホスティングサービスです。
やはりBitbucket の最大の特徴は、プライベートリポジトリを「無料で」「いくつでも」作れることではないかと思います。
さらに、無料でも最大で5名までリポジトリにメンバーを追加することができます。
これも、複数人で開発を行う場合に非常に便利な機能です。

ちなみに、Bitbucket は Django フレームワークを使って、Python で書かれているらしい。

登録方法

まず「Bitbucket」のページにアクセスし、以下の画面で「Get Started」をクリックします。



次の画面で、メールアドレスを入力して「Continue」をクリック



あとは、送られてきたメールのリンクから手順通りに登録作業を進めればOK!

プライベートリポジトリの作成

プライベートリポジトリの作成方法を見てみましょう。

1. 画面上部の「リポジトリ」メニューから「リポジトリの作成」を選びます


2. 以下の画面が表示されるので、適当なリポジトリ名を入力し、「これは非公開リポジトリです」にチェックを付けてリポジトリの作成を行うと、プライベートリポジトリとして作成されます。


Advanced Settings をクリックすると、もう少し設定項目が表示されます。


リポジトリの説明文を書いたり、フォークの設定、プロジェクト管理の機能を入れるかどうかなどを設定することができます。
私はいつも課題管理とWikiは有効にしておいて、アプリ内を開発する際にメモなどを残しておくときはWiki に、やらないといけないことなどは課題管理でリスト化したりします。

3. リポジトリを確認

これで、無事にプライベートリポジトリが作成できているはずですが、きとんとプライベートリポジトリになっている場合は、以下の図のように鍵マークが表示されているはずです。


ぜひ皆さんもBitbucket を利用してみてください!


2016年10月9日日曜日

sphinx-quickstartで生成されるMakeifileの内容を変更したい

以下のファイルの「MAKEFILE」の項目を編集することで生成されるMakefileを変更することができます。


~/.pyenv/versions/2.7.7/lib/python2.7/site-packages/sphinx/quickstart.py


※上記のパスは「pyenv」でインストールしたpythonのsphinxを使用している場合なので、自分のPython 環境に合わせて読み替えてください。

なお、どうしても "quickstart.py" が見つけられない場合は、以下のコマンドを自分のHomeディレクトリで以下のコマンドを実行してみてください。

$ find . -name "quickstart.py"


2016年8月1日月曜日

VisualStudioCodeでPython デバッグ中に、VSCodeが Exception を投げて終了してしまう場合の対処法

Python のコードをデバッグしているときに、途中でいきなり Visual Studio Code が勝手に終了して、デバッグができない問題が発生しました。

コンソールには、以下のようなエラーが出力されていました。

Traceback (most recent call last):
  File "/Users/uroshika/.vscode/extensions/donjayamanne.python-0.3.18/pythonFiles/PythonTools/visualstudio_py_debugger.py", line 1646, in loop
pyProc.stderr: Traceback (most recent call last):
  File "/Users/uroshika/.vscode/extensions/donjayamanne.python-0.3.18/pythonFiles/PythonTools/visualstudio_py_debugger.py", line 1646, in loop
    cmd()
  File "/Users/uroshika/.vscode/extensions/donjayamanne.python-0.3.18/pythonFiles/PythonTools/visualstudio_py_debugger.py", line 1918, in command_execute_code
pyProc.stderr:     cmd()
  File "/Users/uroshika/.vscode/extensions/donjayamanne.python-0.3.18/pythonFiles/PythonTools/visualstudio_py_debugger.py", line 1918, in command_execute_code
    thread.run_on_thread(text, cur_frame, eid, frame_kind, repr_kind)
  File "/Users/uroshika/.vscode/extensions/donjayamanne.python-0.3.18/pythonFiles/PythonTools/visualstudio_py_debugger.py", line 1246, in run_on_thread
    self.schedule_work(lambda : self.run_locally(text, cur_frame, execution_id, frame_kind, repr_kind))
  File "/Users/uroshika/.vscode/extensions/donjayamanne.python-0.3.18/pythonFiles/PythonTools/visualstudio_py_debugger.py", line 1238, in schedule_work
    self.unblock()
  File "/Users/uroshika/.vscode/extensions/donjayamanne.python-0.3.18/pythonFiles/PythonTools/visualstudio_py_debugger.py", line 1234, in unblock
    self._block_lock.release()
error: release unlocked lock

調べてみたところ、WATCH に登録している変数を削除したら治るようです。

https://github.com/DonJayamanne/pythonVSCode/issues/135

これまで、WATCH に変数を登録して値を確認していることはあったけど、今回初めてこの問題に遭遇しました。

どうも、ループ等で同じ変数を何度も参照していると発生ているような感じ。

原因はよくわからないけど、おそらくpythonVSCode のバグかな。

2016年7月2日土曜日

sphinx でファイル保存時に自動でビルドする方法

Sphinx でドキュメントを作成するときに、html化する場合は、以下のコマンドを実行します。

$ make html

ただ、ファイルを変更するたびにコマンドを実行するのは正直めんどくさい。

ということで、ファイルを保存したら自動的にビルドしてhtml化してくれるようにしてみます。

sphinx-autobuild を利用する


「sphinx-autobuild」を利用することで、rstファイルを変更して保存した時点で自動的にコマンドを実行して、ブラウザ上で確認できるようにします。

1.sphinx-autobuildをインストールする

$ pip install sphinx-autobuild

2.Makefile に target を追加する

livehtml:
    sphinx-autobuild -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html

3.SphinxのMakefileがあるディレクトリで以下のコマンドを実行する

$ make livehtml

4.ブラウザで「http://127.0.0.1:8000/」を開く

2016年7月1日金曜日

Sphinxで作成したドキュメントを日本語で検索する


私は、ドキュメントの作成に Sphinx を使用していますが、Sphinx で作成したドキュメントには検索機能がついていますが、英語しか対応していなくて不便だなぁと思っていたら、

sphinx 1.1.2 で日本語にも対応していたようです。

conf.pyに以下の記述を追加します。

html_search_language = 'ja'


2016年5月27日金曜日

sphinx の Read The Docs(RTD)テーマで横幅制限をなくす方法


sphinx でドキュメントを書くときにテーマを変更しますが、read the docs が見やすくて好きなので、いつもこれを使っています。

ただ、このテーマを使うときに1つだけ困っていることがありました。

それは、横幅 です。

モバイルフレンドリーなレイアウトにされているため、横幅ある一定のサイズ以上に広がりません。

自動で折り返してくれるので文章を書いている分にはいい感じに見えます。
でも、表を書いたときだけ横幅が見切れてしまっていて、スクロールバーでスクロールしないといけません。

普通にPCで見る時は横幅は固定にしたくないなぁと思ってました。

これまでは目をつぶってましたが、作成したドキュメントを印刷して渡さないといけないことがあって、
ドキュメントに目を通した人から、表の端が切れてしまっているという指摘をもらい、修正する必要に迫られてたので、今回調べてみました。

そしたら、Read The Docs の横幅を広げる方法、やっぱりありました。

CSSを上書きする


この横幅なんかは、Read The Docs の theme.css で決まっているらしいので、これをなんとかしてやれば良さそうです。
でも、直接編集するのは気が弾けるので、ドキュメントプロジェクト内で css のスタイルを上書きしてやることにします。

手順


1.「source」の下の「_static」ディレクトリに「css」ディレクトリを作成
2.「css」ディレクトリに「my_theme.css」ファイルを作成
3.「my_theme.css」以下のように編集

@import url("theme.css");.

.wy-nav-content {
    max-width: none;
}

4. conf.py を編集

html_style = 'css/my_theme.css' 

5. 以下のコマンドを実行して html ファイルを作り直します。

$ make html

これで、Read The Docs を使用した状態で横幅制限が取れているるはずです。

2016年5月12日木曜日

光学ドライブがついている Mac で「リモートディスク」を使用する方法


仕事で使ってる Mac Book Pro にソフトをインストールしようとして光学ドライブを使おうと思ったら、CDが入らない。

なんか詰まってる?

仕方がないので、リモートディスクでインストールするかと思って Finder を立ち上げるも「リモートディスク」が表示されない。
「デバイス」のところにいるはずの「リモートディスク」がいない。
どうも光学ドライブがついている Mac では表示されないらしい。

でも、以下のコマンドをターミナルから実行すれば表示された。


defaults write com.apple.NetworkBrowser EnableODiskBrowsing -bool true
defaults write com.apple.NetworkBrowser ODSSupported -bool true

コマンド実行後にFinder の再起動が必要です。
option キーを押しながら Finder アイコンを長押しすると出てくるメニューから、「再度開く」を選択すると再起動できる。

2016年5月8日日曜日

アカペラ練習Androidアプリ「SimpleMidiPlayer」の紹介と使い方

今回ご紹介するアプリは「Simple Midi Player」というAndroidアプリです。

これは私が作成したAndroidアプリなんですが、どんなアプリかというと MIDI を再生するアプリです(見たら分かるか。。。)

私は趣味でアカペラをやっているのですが、その個人練習の時に効率的に練習ができるようになることを目標に作成したアプリです。もちろん他の楽器の練習や、その他の用途でも使えますよ。



Google Play で手に入れよう


何ができるの?


「Simple Midi Player」では以下のことができるようになっています。
  1. MIDIファイルの再生
  2. 速度を変更してMIDIを再生
  3. MIDIを再生する楽器を変更
  4. 調を変えて再生(±6度)
  5. 読み込んだMIDIのトラック毎に音量を設定
  6. トラック全体を自動ループ
  7. 任意の頭出しポイントを設定し、1クリックで頭出し
  8. 6.で設定した頭出しポイントの任意の2点間を自動ループ
  9. 設定の保存/読込
  10. バックグラウンド再生
自分が練習する時に、こんな機能があったら便利だなと思った機能を実現しました。
それぞれの機能の紹介と使い方を説明していきます。

1. MIDIファイルの再生


端末内のMIDIファイルを選択して、再生する事が可能です。
「OPEN」ボタンを押すとファイル選択画面が表示されるので、好きなMIDIファイルを選択してください。

     

もしも、MIDIファイルがどこにあるか分からないときは、メニューを押して「Search...」を選択すれば、端末内のMIDIファイルを自動で検索して一覧で表示してくれるので、そこから選択しましょう。

     

選択したMIDIファイルが読み込まれたら、「再生」「停止」「一時停止」「巻戻し(早戻し)」「早送り」ボタンで再生をコントロールできます。

     

2. 速度を変更してMIDIを再生


「BPM」のスライダーを変更することで再生速度を変更することができます。
スライダーを変更すると再生速度の倍率を変更され、

 現在のBPM値(元のBPMからの倍率)

の形式で表示が変化します。

範囲:0.50倍〜2.00倍


<こんなときに便利!>
・どうしても音が上手く取れないところをゆっくり練習
・リズムが上手くとれない部分をゆっくり練習する
・実際にみんなで練習してみたら、音源を配布した時とテンポを変えたくなった

3. MIDIを再生する楽器を変更


MIDIを再生するときの楽器を変更する事が可能です。
自分の練習しやすい楽器に変更して再生すると良いと思います!


<こんなときに便利!>
・音取りをするときははっきりした音で聞きたいから「Piano」で再生
・周りとの混ざり方や和音感を確認しながら聞きたいから「Voice Woo」で再生

4. 調を変えて再生(±6度)


♭ボタン、♯ボタンを押す事で ±6度まで調を変更して再生する事ができます。


<こんなときに便利!>
・音源を作成して練習してみたけどやっぱり半音上げたい
・他のグループがやってた曲の音源をもらったけど自分のグループでは調を変えたい

5. トラック全体を自動ループ


「Track Loop」チェックボックスをONにすることで、トラック全体を自動でループ再生します。
最後まで再生すると2秒間の空白を開けて先頭に戻って再生を開始します。


<こんなときに便利!>
・曲全体を何度も練習するときに放っておいても

6. 読み込んだMIDIのトラック毎に音量を設定


MIDIファイルを読み込むとトラック数分のVolume設定スライダーが表示されます。
これらのスライダーを操作することで、各パートの音量を自由に設定して再生する事が可能です。
※ただし、各パートが別トラックに書き出されているMIDIファイルである必要があります。



<こんなときに便利!>
・音取り用に自分のパートだけ大きくして、残りのパート小さくする
・自分のパートだけ小さくして、練習の成果を確認
・ベースラインだけは大きめの音で聞きたい
・コーラスパートだけ聞きながら練習したい

7. 任意の頭出しポイントを設定し、1クリックで頭出し


再生中にA〜Dのボタンをシングルタップします。すると、任意の位置に頭出しポイントを設定する事ができます。


頭出しポイントが設定されると、再生位置表示シークバーの上にピンが表示され、ボタンが緑色に光ります。
緑色に光っているボタンをタップすると、設定した頭出しポイント(同じアルファベットのピンの場所)に瞬時にジャンプする事が可能です。

例)再生中にAボタンを押した場合


頭出しポイントが設定できたら、緑に光っているボタンを押すだけですぐに頭出しポイントにジャンプできます。
また、設定した頭出しポイントはロングタップでクリアすることができます。

<こんなときに便利!>
・練習番号の場所に頭出しポイントを設定しておいて、そこから練習

8. 設定した頭出しポイントの任意の2点間を自動で繰り返し再生


設定した頭出しポイントのうち、任意の2点をループの開始・終了位置として自動ループ再生する事ができます。

頭出しポイントが設定されている(緑色に光っている)A〜Dのボタンをダブルタップすると、ボタンの光が緑色から赤色に変わり、ループの設定が行われます。
A〜Dのボタンのうち2つにこの設定が行われると、この2点間を自動でループ再生し続けます。
ループ設定がされている(赤色に光っている)ボタンを再度ダブルタップすると、自動ループ設定を解除され、ボタンの光が緑色に戻ります。

      

頭出しポイントの設定と同様に、ロングタップで頭出しポイントと自動ループ設定の両方を同時に解除する事が出来ます。

<こんなときに便利!>
・苦手な箇所を繰り返し練習するときに、アプリの操作が不要で自動でループしてくれる
・車の運転中等でも自動で繰り返し再生してくれるので操作不要
 ・通勤中に練習するとき、個人的にこの機能が一番欲しかった
 ※ただし!くれぐれも運転中に操作をしないように!

9. 設定の保存/読込


選択したMIDIファイル、再生速度、再生楽器、移調、頭出しポイント、トラック毎のボリュームの設定をデータベースに保存する事ができるので、後で全く同じ設定で練習する事が可能です。

設定の保存

メニューから「Save Settings...」を選択するとダイアログが表示されるので、任意の名前を付けて設定を保存します。

      

設定の読込

メニューから「Load Settings...」を選択するとダイアログが表示される、これまでに保存しておいた設定の一覧が表示されるので、任意の名前の設定を選択して「OK」ボタンを押します。
すると、保存しておいた設定が復元されます。

      

<こんなときに便利!>
・常に自分が練習しやすいボリュームバランスで練習したい
・毎回MIDIファイルを探すのが面倒
・毎回設定し直すのは面倒

10. バックグラウンド再生


MIDIファイル再生中に、ホームボタンを押す事でバックグラウンドで再生することが可能です。
また、バックグラウンド再生に移行した時に通知領域にSMPの通知が表示されます。この 通知をタップする事でいつでもアプリに復帰することができます。

※レビューに機能追加のご提案をして頂きました 森上大空様、ありがとうございます。

<こんなときに便利!>
・音源を聞きながら調べ物をしたい
・音源を聞きながらメンバーにメールやLINEを送りたい


2016年4月21日木曜日

VisualStudioCode で Python 実行時にモジュールが import できない場合の対処法

これまで、Anacondaに同梱されていた Spyder という Python IDE を使って Python のコードを書いてデバッグもやっていて、特に問題はなかったのですが、どうにも重い感じがする。。。

最近エディタを Sublime Text から Visual Studio Code に変更して、Python の Extension も追加して VS Code 上で実行できるようにしました。

普段は問題なく実行できていたのですが、あるとき急にあるはずのモジュールがimportできないというエラーになって困ってしまいました。。。

ちなみに、問題となったモジュールは pydot という graphviz を python で使いやすくしてくれるものです。

python は幾つかのバージョンを共存させるためにpyenvで管理しているのですが、
現在は anaconda-2.3.0 を使用していて、pythonのバージョンをターミナルで確認すると

$ python -V
Python 2.7.11 :: Anaconda custom (x86_64)

となってる。
pydot がインストールされているかも確認してみます。

$ conda install pydot
Using Anaconda Cloud api site https://api.anaconda.org
Fetching package metadata: ....
Solving package specifications: .........

# All requested packages already installed.
# packages in environment at /Users/uroshika/.pyenv/versions/anaconda-2.3.0:
#
pydot                     1.0.28                   py27_0

やっぱりインストールされてる。なんで import できないんだ。。。
何かがおかしい。

実行時にpythonのバージョンを表示してみる


ひとまず実行時に python のバージョンを表示してみることにします。
実行している python コードに以下のように書いて実行してみましょう。

import sys

print (sys.version)

すると、

2.7.11 |Anaconda custom (x86_64)| (default, Dec  6 2015, 18:57:58)
[GCC 4.2.1 (Apple Inc. build 5577)]

こんな感じで表示されました。
「ちゃんと pyenv で管理してる Anaconda の python v2.7.11 を使用してますよ」と言っているらしい。

次に、Debug 実行してみると、

2.7.10 (default, Jul 14 2015, 19:46:27)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.39)]

さっきと結果が違う。Anaconda の python じゃないものを使ってるみたい。
どうも、システムの python で実行しているらしい。

ということは、VS Code のデバッグ実行時に、pyenv で管理してるpython を使用するようにすれば大丈夫なはず!

VS Code の Debug 実行時に使用するpython を指定する


ただ、これを変更する方法を調べてみてもなかなか情報にたどり着けません。
そこで、「たぶん何か設定するところがあるやろう」と予想してました。

launch.json を開いて、Python の項目の途中に1行追加して「""」を入力します。
「""」の中で当てずっぽうで「python」と入力してみたら......



なんか、それっぽいのがあるじゃないですか!!!!

たぶんこの「pythonPath」に pyenv で管理してる Python のパスを指定してやれば良いはず。

ターミナルで 以下のコマンドを実行して、python の場所を確認します。

$ which python
/Users/uroshika/.pyenv/shims/python

※「uroshika」の部分は自分のユーザー名の読み替えてください。

あとは launch.json の “pythonPath” に、ここで表示された Python のパスを指定します。
変更したら保存して、もう一度 Debug 実行をやってみたら、無事 import Error にならずに実行できました。


2016年4月16日土曜日

Amazonアソシエイトの登録で承認されたければこれだけやっておけ!承認されずに困っている人がやるべきたった1つのこと

ブログをGoogle Blogger にお引越しして、せっかくの機会なので Amazon アソシエイトを始めてみようかと思っていろいろと調べてみたのですが、意外とハードルが高くて、なかなか承認されないらしい。

でも、A8.net 経由であれば簡単に承認されるという情報を得て、ある程度記事がたまったところで申請をしてみた。

結果は惨敗。

記事を増やして何度か申請してみるものの、やっぱり何度やっても上手くいかない。

諦めかけていたそのとき。ある情報に辿り着きました。

たった1つのやるべきこと


結論から先に行ってしまうと、ずばり!

いつも使っている Amazon のアカウントで申請すること

です。

私の場合は、メールアドレスをいくつか使い分けていたのですが、 Amazon は買い物専用のアドレスを使用していたため、Amazon アソシエイトは別のアドレスで申請していました。

ですが、どうやらAmazonさんには「どこの誰かもわからんやつには簡単に許可は出しませんよ」ということのようです。

つまり、いつも買い物で利用しているアドレスなら「あなたのことは知ってるから許可してあげるよ」くらいの感じなんでしょうか。

メールアドレスを使い分けている人にとってはちょっと嫌かもしれませんが、安心してくください。

登録後にメールアドレスを追加して、メインアドレスを変更することも可能です。

そちらの方法については、またの機会に書いてみることにします。


2016年4月6日水曜日

Visual Studio Code の「code」コマンドでエラーになる場合の対処法

「code」コマンドを使用できるようにするには、Visual Studio Code をターミナルから起動する方法を参照してください。

普通なら、上記リンク先のことを実行すれば「code」コマンドが使えるはずなんですが、
私の場合は、「code」を実行すると以下のエラーが出て Visual Studio Code を起動できませんでした。

$ code
  File "<string>", line 1
    import os,sys; print os.path.realpath(sys.argv[1])
                          ^
SyntaxError: invalid syntax
/usr/local/bin/code: line 10: ./MacOS/Electron: No such file or directory


結論を先に言ってしまうと、実はこれ Python のバージョンの問題でした。


Python 3系だとエラーになる


まずは、以下のコマンドを入力して Python のバージョンを確認してみてください。

$ python -V
Python 3.4.4 :: Anaconda custom (x86_64)

私は、pyenv で Python の管理をしているのですが、pyenv で anaconda3-2.3.0 を使用していて、そこで使われている Python のバージョンは 3.4.4 でした。

$ pyenv versions
  system
  2.7.8
  3.4.2
  3.5.0
* anaconda3-2.3.0 (set by /Users/hoge/.python-version)


エラーを修正する


ここで、もう一度「code」実行時のエラーを見てみましょう。

$ code
  File "<string>", line 1
    import os,sys; print os.path.realpath(sys.argv[1])
                          ^
SyntaxError: invalid syntax
/usr/local/bin/code: line 10: ./MacOS/Electron: No such file or directory

どうやら、print の構文エラーで怒られているようです。

実は。Python 3 では、print の仕様が変わっていて、print() にしないといけません。

なので、エラー箇所を修正します。

「/Applications/Visual\ Studio\ Code.app/Contents/Resources/app/bin/code」

をエディタで開いて、以下の部分を変更します。

修正前:
function realpath() { python -c "import os,sys; print os.path.realpath(sys.argv[1])" "$0"; }

修正後:
function realpath() { python -c "import os,sys; print(os.path.realpath(sys.argv[1]))" "$0"; }

print() の書き方は、python 2系でも使用できるので、2系を使用している人も将来エラーが出て焦らないように変更しておくと良いと思います。

Visual Studio Code をターミナルから起動する方法

これまで、エディタは「Sublime Text 3」を使ってました。

だがしかし!最近、日本語入力があまりにも遅くてイライラする!!

なんとかできないかと調べていたら、 Mozc(もずく) という日本語入力を使えば、Sublime Text でも快適に日本語入力ができるという記事を見つけた。

Mozc(もずく)を使って Mac OSX の Sublime Text に日本語入力する方法

ちょっと読んでみたけど、非常にややこしや。。。
とりあえず、Sublime Text でなんとかする方法は、上記のページにお任せします。


Visual Studio Code がいいらしい


他のエディターに乗り換えようかと思っていろいろ調べていたら、どうも「Visual Studio Code」が良いらしい。

というわけで、乗り換えてみた。

Visual Studio Codeのページに行き「Code をダウンロード」を押すと、プラットフォームの選択画面にうなるので、自分の環境に合わせてファイルをダウンロードします。





私の環境は Mac なので、Mac用のファイルをダウンロードしました。

ダウンロードしたファイルは zip ファイルで、解凍すると「Visual Studio Code.app」になっていました。

これを「/Application」ディレクトリに移動すればインストール完了です。

ターミナルから起動できるようにする


これで、Visual Studio Code が利用できるようになったのですが、個人的にはターミナルから直接コマンドでエディタを起動したい。
Sublime Text を使用しているときは、エイリアスを設定しておいてターミナルから「subl」コマンドでSublime Text を起動できるようにしていました。

Visual Studio Code でも同じように、ターミナルから起動できるようにしたいと思って調べてみたら、Visual Studio Code にも「code」というコマンドがあるみたい。

$ ls /Applications/Visual\ Studio\ Code.app/Contents/Resources/app/bin/
code

これを使えるようにすればいいんだけど、Sublime Text のときと同じように、~/.bash_profile とかでエイリアスを設定しておけばいいかなと思ったら、もっと簡単な方法があった。

1. Visual Studio Code を起動します。



2. 「Command + Shift + P」を押します。



3. ここで「shell」と入力して、表示された「Shell Command: Install 'code' command in PATH」を選択します。



4. 以下のように表示されたらOK!




ものすごく簡単でびっくりしました!

これで、ターミナルから

$ code

とすれば Visual Studio Code が起動します。
以下のようにして、ファイル名を指定して起動することも可能。

$ code hoge.md 

「code」と入力したらエラーになる場合


普通なら、これで一件落着なんですが、簡単とか言ときながら、実は私の環境ではちょっとはまりました。

codeコマンドを実行すると以下のエラーが出て起動できませんでした。

$ code
  File "<string>", line 1
    import os,sys; print os.path.realpath(sys.argv[1])

この現象が起きた方は、対処法を別の記事(↓)に書いておいたので、そちらを参考にしてください。

Visual Studio Code の「code」コマンドでエラーになる場合の対処法

2016年3月29日火曜日

Unityロゴ表示後に指定した秒数カスタムロゴを表示して画面遷移する方法

Unity5になってから、無料版でもPro版と同じ機能を使えるということで、非常に嬉しいことですが、無料版とPro版の大きな違いは、起動時にUnityロゴが表示されるかどうかにあると思います。

現在、Unityで製作しているアプリを公開に向けて頑張っているのですが、
無料版だからUnityロゴが出るのは仕方ないとして、Unityロゴの後に自分で用意したロゴを表示してから最初の画面に遷移できないかなぁと考えました。

手順としては以下の通りです。

  1. 独自ロゴ表示用 Scene を作成し、画面全体にロゴ画像が表示されるようにする
  2. アプリ起動時に1.で作成したSceneが表示される様に[Build Settings]を設定する
  3. スクリプトを作成して、一定時間経過後に別のシーンに遷移する様にする


1. 独自ロゴ表示用 Scene を作成し、画面全体にロゴ画像が表示されるようにする


「Title」という名前で、Sceneを作成します(名前はなんでもいいです)。
UI コンポーネントの Image を追加して、用意しておいたロゴをしていします。

詳細は今回の本質ではないので除外します。

2. アプリ起動時に1.で作成したSceneが表示される様に[Build Settings...]を設定する


[File - Build Settings...]メニューを選択し、Scene In Build に以下のようにSceneを追加して、起動時にTitle Scene が表示されるようにします。


2つ目のScene名は現在作成中のアプリに合わせて変更してください。


3. スクリプトを作成して、一定時間経過後に別のシーンに遷移する様にする


スクリプトを作成して、Main Cameraにでも設定しておいてください。
作成できたら、スクリプトに以下のように書いて、2秒間カスタムロゴを表示して、別のシーンに遷移するようにします。

using UnityEngine;
using System.Collections;
using UnityEngine.SceneManagement;

public class TitleSplash : MonoBehaviour {
    float startTime = 0.0f;

    // Use this for initialization
    void Start () {
        startTime = Time.time;
    }
  
    // Update is called once per frame
    void Update () {
        if (Application.isShowingSplashScreen == false) {
            // 広告などの処理.
            float now = Time.time;
            float elapsedTime = now - startTime;
            if (elapsedTime > 2.0f) {
                SceneManager.LoadScene("HogeHoge");
            }
        }
    }
}


これでOK!
と思いきや!ここでハマりました。

実際に起動してみると、明らかにロゴが表示されてから2秒も経っていないのに次のSceneに遷移してしまいました。

これは、Unityロゴが表示されている途中にTitleシーンが読み込まれていて、時間の計測が始まってしまっていることが原因でした。

以下の値をチェックすることで、Unityロゴが表示されているかどうかをチェックすることができます。

Application.isShowingSplashScreen 

なので、少し修正して以下のように書き換えてやると、2秒間カスタムロゴを表示した後に、Build Settings で指定した次のScene に遷移します。

using UnityEngine;
using System.Collections;
using UnityEngine.SceneManagement;

public class TitleSplash : MonoBehaviour {
    bool  isMySplashShowing = false;
    float startTime = 0.0f;

    // Use this for initialization
    void Start () {
    }
   
    // Update is called once per frame
    void Update () {
        if (Application.isShowingSplashScreen == false) {
            if (!isMySplashShowing) {
                startTime = Time.time;
                isMySplashShowing = true;
            } else {
                // 広告などの処理.
                float now = Time.time;
                float elapsedTime = now - startTime;
                if (elapsedTime > 2.0f) {
                    SceneManager.LoadScene("HogeHoge");
                }
            }
        }
    }
}

2016年3月27日日曜日

Unity5.3 で Application.LoadLeve("シーン名") が使えなくなっていた

Sceneの切り替えを行おうと思って、

 Application.LoadLevel("シーン名");

と書いたら警告が出ました。

調べてみたところ、Unity5.3 では使えなくなっているようです。
代わりに、以下のようにするようです。

 SceneManager.LoadScenel("シーン名");

また、SceneManagerを使う場合は以下の記述を追加しておく必要があります。

using UnityEngine.SceneManagement;

2016年3月17日木曜日

[sphinx] "make html" を自動化する方法

sphinx の便利さにハマって以来、ほとんどのドキュメントを sphinx で作っているのですが、1つだけ不便なことがあります。

それは、HTML化するために毎回

 $ make html

を実行しないといけないことです。

これが何気にめんどくさい。

編集して、保存んしたら勝手にHTMLも更新してほしいなぁと思ったので、ちょっと調べてみました。

そしたら、ありました!

それは「sphinx-autobuild」を利用する方法です。


sphinx-autobuild を利用してビルドを自動化する


sphinx-autobuild を利用すれば、rstファイルを変更した時点で自動ビルドが走り、ブラウザに反映されるようになります。



1. sphinx-autobuildをインストールする

 $ pip install sphinx-autobuild

2. Makefile に target を追加する

livehtml:
    sphinx-autobuild -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html

3. SphinxのMakefileがあるディレクトリで以下のコマンドを実行する
$ make livehtml

4. ブラウザで「http://127.0.0.1:8000/」を開く


これで、rstファイルを編集して保存すると、自動的にビルドが実行されhtmlが更新されます。

2016年3月5日土曜日

sphinxの見出しで使用する記号の慣例


少し前から sphinx でドキュメントを書くことがあって、その便利さにすっかりハマってしまっています。

ドキュメント書かないといけないのはわかってるけど、書くの面倒だなぁという方はぜひsphinxでドキュメントを書いてみることをお勧めします。

sphinx では、以下の記号がで見出しに使用できます。

= - ` : . ' " ~ ^ _ * + #

文字の種類と見出しのレベルは関係ないので、どの文字でも使用できます。
使用していない種類のアンダーラインが出てくると、見出しのレベルが一段変わる、というルールになっているのですが、これまでは自分ルールで使用していました。

いろいろ見ていると、Pythonドキュメントで使っている慣例があったので、これからはこれを使用してみようかと思います。
  • #(オーバーライン付き):部
  • *(オーバーライン付き):章
  • =:セクション
  • -:サブセクション
  • ^:サブサブセクション
  • ":パラグラフ

2016年3月4日金曜日

050番号を無料で取得し、しかも月額無料にする方法(Brastel 050Free)

私が公開している、Android用のMIDI再生アプリ『Simple Midi Player』ですが、現在は無料で公開して広告を表示しています。

ですが、ありがたいことにレビューやメールの問い合わせで「お金払ってもいいから広告なしバージョンを出して欲しい」という声をいくつかもらったので、今回有料版を出してみることにしました!

今まで Google Play で有料アプリを公開したことがなかったので、少し調べてみると、Google Play で有料アプリを公開するためには、販売者アカウントを登録する必要がありました。

登録を進めていくと必須入力項目に電話番号があるのですが、私は携帯電話しか持っていないのですが、私のような個人で開発している者にとっては個人の携帯電話の番号を公開するのは気が引けます。

そこで、050で始めるIP電話の番号を取得することにしました!

スマホで利用できるIP電話


最近は格安SIMの普及なども重なり、すでに使用されている方もいるかもしれませんが、せっかくなのでいろいろ調べてみたら結構いろいろあります。


通話料金や音質について調べてみて、今回は『050 Plus』か『050 Free』の2択に絞りました。

050 Plus


050 Plus」は、NTTコミュニケーションズが提供しているサービスです。

  • 月額利用料    :300円
  • 通話料(固定電話):3分 8.86円
  • 通話料(携帯電話):1分 17.28円

割と前からあったサービスで、私も以前使用していたことがありますが、通話の音質もそこそこ良くて、普通に通話できていました。

050 Free


050 Free」は、Brastel が提供するサービスでです。
  • 月額利用料    :無料
  • 通話料(固定電話):3分 8円
  • 通話料(携帯電話):30秒分 5.5円
固定電話向けの電話料金はそれほど変わりませんが、携帯電話向けの料金は1分で11円なので、050 Plus よりも少し安いですね。

そして何と言っても、最大の特徴は次の2つです!

  • 無料で050番号が取得できる
  • 支払いがチャージ式

月額利用料無料で050番号が取得でき、電話を受けるだけなら無料で使えてしまいます。
電話をかける場合は料金がかかりますが、あらかじめチャージしておいた分だけ使用できるので、使い過ぎてしまうこともありません。

今回の用途から考えると050 Freeを使用するのが良さそう。
ということで、ここからはスマホで050 Freeを使用できるようにするまでの手順を説明します。

050 Free を使うまでの手順


1. まずは『050 Free』アプリをダウンロードする

050 Free
050 Free
開発元:System Brastel
無料
posted with アプリーチ
ダウンロードしたものの、このままでは使えません。

そこで。。。

2. Brastel カードをゲットする

Brastelカードはなんと普通にコンビニに置いてあります。
私はサークルKでもらってきましたが、フリーペーパーとかがおいてあるラックに一緒においてありました。

こんな感じの小冊子みたいなのが置いてあるので、頂いていきましょう。
安心してください。無料ですよ。


この冊子にブラステルカードが付いるので、裏面の ACCESS CODE の部分をコインで削ります。


3. パスワードを取得する

もう一度 Brastel の HP に行き、以下の部分い ACCESS CODE に書いてある数字を入力します。
ACCESS CODE上8桁がユーザーIDで、下4桁がPIN番号になります。


「パスワードを取得」ボタンを押すと、以下の画像のようにオレンジの枠内に User IDPassword が表示されています。



4. アプリでログインする

3. で取得した User IDPassword をアプリの起動画面で、それぞれ入力して Sign in ボタンをしてログインするとアプリが起動します。

5. 050番号を取得する

アプリのメニューから設定を開いて、「アカウントの設定」を選択


マイアカウントページに移動する


「050番号を確認/取得する」を選択して番号を取得します。


6. 受信できるか確認してみる

ここまできたら、アプリで電話を受けることが可能になはずです。
取得した番号に電話をかけて確認してみましょう。

まとめ


今回は 050 Free を使用するための手順を書いてみました。
ここで取得した050番号を使用して、販売者登録も完了しました。

それにしても便利な世の中になったなぁ。


2016年2月23日火曜日

高嶋ちさ子 ゲームバキバキ事件に思うこと

http://www.j-cast.com/2016/02/15258532.html

先日、バイオリニストの高嶋ちさ子氏が子供のゲーム機を昼間にやってはいけないという約束を破ったため、バキバキに折ってやったというニュースを見た。

約束を破ったことを怒るのは結構。でもやり方があるでしょう。
ゲーム機を折る必要はなかったと思う。

そのゲーム機を作るために、どれだけのエンジニアがどれだけの時間を掛けたかを考えて欲しい。

例えば、高嶋さんが多くの時間を掛けて一生懸命作成した自身のCDをどなたかの子供が大好きでいついつも聞いていたとしよう。
その子の母親が、約束を破ったからといってそのCDをバキバキに折っていて、
その写真を見てしまったときに彼女は何も思わのないだろうか。

破壊してしまう以外にも子供に言って聞かせる方法はあったはずである。

没収するだけでもよかっただろう。
子供の目の前で売却してもよかったかもしれない。

百歩譲ってゲームを破壊したとことに目を瞑ったとしても、それを写真に撮って世の中に晒す必要はない。
子育てのためだというなら、子供のためにもなおさら家の中だけでおさめてもらいたい。

彼女は約束を守ることの大切さは教えられたのかもしれないが、ものを大切にすることも同じように教えてあげて欲しい。

2016年2月17日水曜日

UnityのuGUIでListViewを作る方法

Unityには、GUIの作成をサポートする通称『uGUI』と呼ばれる機能があります。
ここ最近でずいぶん使いやすくなってきましたが、まだ最初から用意しておいて欲しいUI部品がなかったりします。

あるアプリを開発している時に『ListView』が欲しくなったのですが、uGUIには元から用意されていません。
そこで、AssetStoreを見てみたらいくつか売られていましたが、

頑張ったら作れるんじゃないの?

と調子に乗ってみたところ、なんとかListViewを自作できました。
ここでは、僕なりのListViewの作り方を解説してみます。

ScrollViewを追加する


今回作るListViewですが、基本となるのはScrollViewです。
簡単に言うと、ScrollViewにスクリプトを設定して、ListViewっぽくするだけです。

というわけで、まずは2Dプロジェクトを作成して、[Create - UI - Scroll View] でScrollViewを追加します。

すると、Canvasがない場合は自動的にCanvasが追加され、その下にScrollViewが追加されます。

最初は表示がよくわからないと思うので、まずはCanvasの設定を変更しておきます。
Canvasを選択して、Inspectorの[Render Mode] を[ Screen Space - Camera] に変更し、「Render Camera」を「Main Camera」に設定しておきます。こうしておくと、このCanvasが指定したカメラに対してOverlay表示されるのでみやすくなります。
(実際は、自分の作成するアプリに合わせて変更してください)


こうすると以下のような画面になります。


ちなみにInspectorはこんな感じ。サイズは適当に決めてください。


作成するListViewにもよりますが、今回は縦スクロールのみとするので、「Scrollbar Horizontal」をHierarchyから削除してしまいます。


そして、「Scroll View」を選択して「Scroll Rect (Script)」の「Horizontal」のチェックも外してしまいましょう。

これで、縦スクロールのみのScroll Viewになったので、ListViewの元ができました。
名前も「List View」に変えてしまっておきます。

ListViewnのアイテムを作成


次は、ListViewの1行に表示する項目を集めたアイテムを作成します。
Hierarchy から [Scroll View - Viewport - Content] と開き、Contentの下に空のGameObjectを追加します。



追加した Game Object を選択して、Anchorを変更します。


Pivotを(1, 1)に変更し、Left, Pos Y, Right, Heightをお好みに合わせて設定しておきます。今回は以下のようにしました。


そうしたら、ここで追加したGameObject を ListViewItem 等の名前に変更しておきます。

次に、作成したListViewItemに表示したい項目を入れていきます。今回は、背景色とテキストのみとします。

まずは背景色を追加します。先ほどのListViewItemを選択して、右クリック[UI - Image] で画像を追加して、名前はBackgroundにしておきましょう。
Backgroundを選択して、InspectorのImageコンポーネントのColorを好きな色に設定します。RectTransformは以下の画像を参考に設定してみてください。Pivotは(1,1)にしておくと良いと思います。



次に、右クリック[UI - Text]でテキストを追加しておきます。Textの設定も以下の画像を参考にしてください。



そうするとこんな感じになります。


ちなみにHierarchyはこんな感じ。


ここまでできたら、ListViewItemをProjectウィンドウにドラッグ&ドロップして、Prefab化しておきます。Prefab化できたら、HierarchyのListItemViewは削除しておきましょう。

これで下準備は完了です。ここからスクリプトを書いていきます。

スクリプトを作成する


ProjectウィンドウでC#スクリプトを作成します。名前は「ListViewController」にしておきましょう。

ファイルを開いたら、まず、「Content」の変数を用意します。そして、あとでListViewに項目を追加していくので、先ほど作成したListViewItemのPrefabも変数にして持っておきましょう。

using UnityEngine;
using System.Collections;

public class ListViewController : MonoBehaviour {
    public RectTransform content_;
    public GameObject item_prefab_;

    // Use this for initialization
    void Start () {
    }
 
    // Update is called once per frame
    void Update () {
    }
}

作成したスクリプトを Hierarchy の List View にドラッグ&ドロップして、先ほど作成した変数に Inspector から「_content」にはViewport の 「Content」を、「item_prefab_」には「ListViewItem」をそれぞれセットしておきます。


ListViewの項目を作っていく


ここからListViewに表示する項目を作っていきます。
先ほど作成した、ListViewItemは文字列を表示する箇所があったので、表示する文字列を指定できるようにしましょう。
まずはスクリプトに、表示する文字列を設定する配列を変数として追加します。ここでは「itemList_」としておきましょう。

public class ListViewController : MonoBehaviour {
    public RectTransform content_;
    public GameObject  item_prefab_;
    public string[]   itemList_;
      :
      :

そうしたら、今度はUnityのListViewのInspectorビューで「itemList_」に値を設定します。ここではサイズが10、item0〜item9の文字を表示することにしましょう。


ListViewにこれらの項目が設定されたListViewItemを追加していくわけですが、ここでVertical Layout Group を使用します。

Vertical Layout Group は、Layout Group の中の1つですが、これは子要素を縦方向に自動的にレイアウトしてくれるコンポーネントです。

このコンポーネントをListViewの Content に設定します。


あとは、作成しておいたListViewItem Prefab をスクリプトからこのContentにスクリプトに追加していくのですが、Contentの高さをListViewItemの高さと追加する数に合わせて調整したいので、Start()のときにListViewItemの高さを取得しておきます。

itemの高さを保持しておく変数を作成し、起動時にStart()で一度ListViewItemのPrefabのインスタンスを作成し、高さを取得しておきます。
ここでは、このItemは使用しないのでDestroyしてしまいます。

private float itemHight_;

// Use this for initialization
void Start () {
    GameObject item = GameObject.Instantiate(item_prefab_) as GameObject;
    RectTransform rect = item.GetComponent();
    itemHight_ = rect.rect.height;
    GameObject.Destroy(item);
}

これで、Item1つあたりの高さが取得できたので、実際にListViewの項目を作っていきましょう。やることとしては以下の2つです。

  1. ListViewItemの個数に合わせてContentの高さを調整する
  2. Contentの子要素としてListViewItemのインスタンスを設定していく

ListViewの項目を更新する関数を作成します。

private void UpdateListView() {
    // item数に合わせてContentの高さを変更する.
    int setting_count = itemList_.Length;
    float newHeight = setting_count * itemHight_;
    content_.sizeDelta = new Vector2(content_.sizeDelta.x, newHeight); // 高さを変更する.

    // Contentの子要素にListViewItemを追加していく.
    foreach (string itemStr in itemList_) {
        GameObject item = GameObject.Instantiate(item_prefab_) as GameObject; // ListViewItem のインスタンス作成.
        Text itemText = item.GetComponentInChildren<Text>(); // Textコンポーネントを取得.
        itemText.text = itemStr;

        RectTransform itemTransform = (RectTransform)item.transform;
        itemTransform.SetParent( content_, false ); // 作成したItemをContentの子要素に設定.
    }
}

これで、itemList_で指定した文字列がListViewに表示されているはずです。


これでも問題ないのですが、念のためListViewを更新するときに、最初に項目をクリアする処理を入れておきましょう。
private void UpdateListView() {
    RemoveAllListViewItem(); // ListViewの項目を一度削除する.

    // item数に合わせてContentの高さを変更する.
    int setting_count = itemList_.Length;
    float newHeight = setting_count * itemHight_;
    content_.sizeDelta = new Vector2(content_.sizeDelta.x, newHeight); // 高さを変更する.

        :
        :
        :
}

private void RemoveAllListViewItem() {
    foreach (Transform child in content_.transform) {
        GameObject.Destroy(child.gameObject);
    }
}


これでuGUIでのListViewの作成は完了です!

今回はListViewのアイテムはTextだけにしましたが、Prefab化したListViewItemをカスタマイズすることで、好きな項目を表示することができます。

ぜひお好きなListViewにカスタマイズしてみてください!