<?xml version="1.0" encoding="UTF-8" ?>
<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns="http://purl.org/rss/1.0/"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/">

  <channel rdf:about="http://freesoftoriented.blog.shinobi.jp/RSS/100/">
    <title>フリーソフト指向::開発日記</title>
    <link>http://freesoftoriented.blog.shinobi.jp/</link>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://freesoftoriented.blog.shinobi.jp/RSS/" />
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" />
    <description>2007/03/04開始。ソフトウェア管理やDelerer SEの作者であるおにぎりくんの試行錯誤の記録です。</description>
    <dc:language>ja</dc:language>
    <dc:date>2021-11-16T02:46:30+09:00</dc:date>
    <items>
    <rdf:Seq>
      <rdf:li rdf:resource="http://freesoftoriented.blog.shinobi.jp/%E6%9C%AA%E9%81%B8%E6%8A%9E/-vue.js-%E6%99%82%E8%A8%88%EF%BC%9F%E3%82%BF%E3%82%A4%E3%83%A0%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8Bweb%E3%82%A2%E3%83%97%E3%83%AA" />
      <rdf:li rdf:resource="http://freesoftoriented.blog.shinobi.jp/%E6%9C%AA%E9%81%B8%E6%8A%9E/%E3%83%9D%E3%82%A8%E3%83%A0" />
      <rdf:li rdf:resource="http://freesoftoriented.blog.shinobi.jp/android/%E3%83%A1%E3%83%88%E3%83%AD%E3%83%8E%E3%83%BC%E3%83%A0%E3%82%A2%E3%83%97%E3%83%AA%E3%82%92%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9" />
      <rdf:li rdf:resource="http://freesoftoriented.blog.shinobi.jp/%E6%9C%AA%E9%81%B8%E6%8A%9E/20170225" />
      <rdf:li rdf:resource="http://freesoftoriented.blog.shinobi.jp/%E6%9C%AA%E9%81%B8%E6%8A%9E/-javafx-%E5%AD%A6%E7%BF%92%E3%83%A1%E3%83%A2" />
      <rdf:li rdf:resource="http://freesoftoriented.blog.shinobi.jp/android/%E3%83%A1%E3%83%88%E3%83%AD%E3%83%8E%E3%83%BC%E3%83%A0%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E5%85%AC%E9%96%8B" />
      <rdf:li rdf:resource="http://freesoftoriented.blog.shinobi.jp/android/%E3%83%A1%E3%83%88%E3%83%AD%E3%83%8E%E3%83%BC%E3%83%A0%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%EF%BC%88%E9%96%8B%E7%99%BA%E4%B8%AD%EF%BC%89" />
      <rdf:li rdf:resource="http://freesoftoriented.blog.shinobi.jp/%E6%9C%AA%E9%81%B8%E6%8A%9E/windows%20audio%20%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%81%AE%E5%86%8D%E8%B5%B7%E5%8B%95" />
      <rdf:li rdf:resource="http://freesoftoriented.blog.shinobi.jp/windows_rt/surfacert%E4%B8%8A%E3%81%A7c-%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%82%92%E5%8B%95%E3%81%8B%E3%81%99" />
      <rdf:li rdf:resource="http://freesoftoriented.blog.shinobi.jp/android/20130515" />
    </rdf:Seq>
    </items>
  </channel>

  <item rdf:about="http://freesoftoriented.blog.shinobi.jp/%E6%9C%AA%E9%81%B8%E6%8A%9E/-vue.js-%E6%99%82%E8%A8%88%EF%BC%9F%E3%82%BF%E3%82%A4%E3%83%A0%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8Bweb%E3%82%A2%E3%83%97%E3%83%AA">
    <link>http://freesoftoriented.blog.shinobi.jp/%E6%9C%AA%E9%81%B8%E6%8A%9E/-vue.js-%E6%99%82%E8%A8%88%EF%BC%9F%E3%82%BF%E3%82%A4%E3%83%A0%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8Bweb%E3%82%A2%E3%83%97%E3%83%AA</link>
    <title>[Vue.js]時計？タイムコードを表示するWebアプリ</title>
    <description>タイムコードを表示するWebアプリを作りました。
https://heterotactic-locati.000webhostapp.com/timer.html


複数台のカメラで同時に撮影するときに、最初または最後にこのアプリを撮っておくと、映像同士の時刻を合わせやすくなります。 機材がなくて...</description>
    <content:encoded><![CDATA[タイムコードを表示するWebアプリを作りました。<br />
<a href="https://heterotactic-locati.000webhostapp.com/timer.html" title="">https://heterotactic-locati.000webhostapp.com/timer.html<br />
<br />
</a>
<blockquote>複数台のカメラで同時に撮影するときに、最初または最後にこのアプリを撮っておくと、映像同士の時刻を合わせやすくなります。 機材がなくてもいい、お手軽な同期アプリとしてご利用ください。</blockquote>
<br />
【使い方】<br />
使い方はここにあるとおり、ビデオカメラでWebアプリの画面を撮影することで、映像の時刻をフレーム単位で割り出せるというものです。<br />
カチンコという、いわゆる「アクション！（カンッ）」ってやるやつの代わりに使います。<br />
ちゃんとした撮影機材があれば、専用の機材と線でつないで時刻を同期するのですが、そのような機材は手元になく・・・家庭用ビデオカメラで似たようなことをするためにこのWebアプリを作成しました。複数のカメラで同時に撮影し、あとで編集するようなケースではこれがめちゃめちゃ役に立ちます。<br />
<br />
時刻同期の機能は作っていないため、29.7 fpsみたいなことはできません。<br />
代わりではないですが、タイムコードの上にバーを表示しています。これで、画面表示されたタイミングが1frameのなかのどのタイミングだったのかが分かるようになっています。<br />
たとえば30fpsで動かすとき、画面やブラウザはたいてい60fpsなので、同じタイムコードを2回表示することになるわけです。それを撮影したとしても、２回表示したうちのどちらが撮影されたのかまではわかりませんので、複数カメラの映像をつなげるときに若干のズレが起こります。（音がずれるので少し違和感が出ます）<br />
もし印がバーの左側なら表示された値の通り、中央なら0.5frameのあたり、右側なら次のフレームに近いと判断でき、1frame未満も調整できるようになっているわけです。<br />
<br />
別の使い方ですが、Clockモードを選ぶと、時計として使えます。<br />
<br />
【使ったテクノロジー】<br />
フレームワークはVue.js＋Vuerifyを使っています。npmでビルドするのが面倒だったので、CDNから持ってくるだけになっています。思ったよりVuerifyはサイズ小さい。<br />
<br />
]]></content:encoded>
    <dc:subject>未選択</dc:subject>
    <dc:date>2021-11-16T02:46:30+09:00</dc:date>
    <dc:creator>おにぎりくん</dc:creator>
    <dc:publisher>NINJA BLOG</dc:publisher>
    <dc:rights>おにぎりくん</dc:rights>
  </item>
  <item rdf:about="http://freesoftoriented.blog.shinobi.jp/%E6%9C%AA%E9%81%B8%E6%8A%9E/%E3%83%9D%E3%82%A8%E3%83%A0">
    <link>http://freesoftoriented.blog.shinobi.jp/%E6%9C%AA%E9%81%B8%E6%8A%9E/%E3%83%9D%E3%82%A8%E3%83%A0</link>
    <title>ポエム</title>
    <description>学生のころは、自分で勉強しながらフリーソフトを作っていました。そのころは、意欲と好奇心で楽しかったのですが、いまはお仕事でシステム開発をしています。チームでの開発、他人からもらった要求で開発する、という違いはあるけれど、技術的にはひとりでやっていたときよりも現代的で、面白みのあるものを扱っています。...</description>
    <content:encoded><![CDATA[学生のころは、自分で勉強しながらフリーソフトを作っていました。そのころは、意欲と好奇心で楽しかったのですが、いまはお仕事でシステム開発をしています。チームでの開発、他人からもらった要求で開発する、という違いはあるけれど、技術的にはひとりでやっていたときよりも現代的で、面白みのあるものを扱っています。<br />
あの頃のような意欲はなかったとしても、今は知識と経験があって、また違った面で技術習得したくなる&hellip;反面、ちょっと自分にはムリかなと思ってしまうこともある&hellip;。<br />
<br />
readpro6<br />
<a href="https://github.com/LapisCactus/readpro6" title="" target="_blank">https://github.com/LapisCactus/readpro6</a><br />
<br />
readpro6というツールはそういう意味で、いまでもフリーソフトを作りたい気持ちがある、手の届く範囲の技術で、いまの自分の要求を叶えるツールを作ってみたい、そんな気持ちの現れなのかも、と思ったのでした。]]></content:encoded>
    <dc:subject>未選択</dc:subject>
    <dc:date>2020-09-30T01:33:55+09:00</dc:date>
    <dc:creator>おにぎりくん</dc:creator>
    <dc:publisher>NINJA BLOG</dc:publisher>
    <dc:rights>おにぎりくん</dc:rights>
  </item>
  <item rdf:about="http://freesoftoriented.blog.shinobi.jp/android/%E3%83%A1%E3%83%88%E3%83%AD%E3%83%8E%E3%83%BC%E3%83%A0%E3%82%A2%E3%83%97%E3%83%AA%E3%82%92%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9">
    <link>http://freesoftoriented.blog.shinobi.jp/android/%E3%83%A1%E3%83%88%E3%83%AD%E3%83%8E%E3%83%BC%E3%83%A0%E3%82%A2%E3%83%97%E3%83%AA%E3%82%92%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9</link>
    <title>メトロノームアプリをリリース</title>
    <description>Androidアプリ「練習用メトロノーム バージョン0.1」をリリースしました。

練習用メトロノーム - Google Play の Android アプリ
【特徴】
・タップしてテンポを計測できる
・テンポとリズムパターンを保存でき、曲名とメモを残せる
・クリック音を音声ファイルとして保存できる...</description>
    <content:encoded><![CDATA[<p>Androidアプリ「練習用メトロノーム バージョン0.1」をリリースしました。<br />
<br />
<a href="https://play.google.com/store/apps/details?id=jp.fsoriented.cactusmetronome&amp;hl=ja" target="_blank">練習用メトロノーム - Google Play の Android アプリ</a></p>
<pre>【特徴】
・タップしてテンポを計測できる
・テンポとリズムパターンを保存でき、曲名とメモを残せる
・クリック音を音声ファイルとして保存できる
・シンプル

【想定するユースケース】
・課題曲のテンポをお気に入りにいれておき、練習のときに使う
・セットリストとして使う
・設定したテンポの音声ファイルを作成し、レコーディングのクリック音として使う
</pre>
<p>以前作った、メトロノームライブラリを使っています。<br />
趣味の時間がとれたら、いろいろ作ってみたいものです。</p>]]></content:encoded>
    <dc:subject>Android</dc:subject>
    <dc:date>2017-04-22T11:24:17+09:00</dc:date>
    <dc:creator>おにぎりくん</dc:creator>
    <dc:publisher>NINJA BLOG</dc:publisher>
    <dc:rights>おにぎりくん</dc:rights>
  </item>
  <item rdf:about="http://freesoftoriented.blog.shinobi.jp/%E6%9C%AA%E9%81%B8%E6%8A%9E/20170225">
    <link>http://freesoftoriented.blog.shinobi.jp/%E6%9C%AA%E9%81%B8%E6%8A%9E/20170225</link>
    <title>Sikulix勉強中：便利関数</title>
    <description>「sikulix」というアプリを使うことがあって、ちょっと遊んでいます。 sikulixは、画面に表示されているボタンやリンクを画像認識するソフトウェアです。テスト自動化にも使えます。
sikulixの勉強がてら、便利関数を幾つか作りました。現状の成果ということで、ここに添付して説明したいと思います...</description>
    <content:encoded><![CDATA[<p>「sikulix」というアプリを使うことがあって、ちょっと遊んでいます。 sikulixは、画面に表示されているボタンやリンクを画像認識するソフトウェアです。テスト自動化にも使えます。</p>
<p>sikulixの勉強がてら、便利関数を幾つか作りました。現状の成果ということで、ここに添付して説明したいと思います。</p>
<pre class="python" name="code"># utility function
import time

# wait and click
# @param picture a string of picture file name or a Pattern instance
# @param time a integer of timeout
# @throws Exception when timeout
def wc(picture, time):
    pic_name = picture
    if isinstance(picture, Pattern):
        pic_name = picture.getFilename()
    print "&gt; wc " + pic_name
    target = exists(picture, time)
    if target:
        click(target)
    else:
        print "&gt; -&gt;wc pic not found:"+pic_name
        raise Exception("wc error. pic not found "+pic_name)

# find and click
# @param picture a string of picture file name or a Pattern instance
# @param time a integer of timeout
def fc(picture, timeout):
    pic_name = picture
    if isinstance(picture, Pattern):
        pic_name = picture.getFilename()
    print "&gt; fc %s %d"%(pic_name, timeout)
    start_time = time.time()
    while(start_time + (timeout/1000.0) &gt; time.time()):
        try:
            icons = findAll(picture)
            sorted_icons = sorted(icons, key=lambda m:m.y)
            print "&gt; -&gt;found:"+pic_name
            target = sorted_icons[0]
            click(target)
            return
        except:
            print "&gt; -&gt;not found... continue:"+pic_name
            continue
    print "&gt; -&gt;not found... timeout!"
    raise Exception("fc timeout")

# wait and keep clicking until the specified picture appears
# @param picture a string of picture file name or a Pattern instance
# @param loc a Location instance specifying a point to click untile picture appears
def wkc(picture, loc):
    while(True):
        if exists(picture):
            print "&gt; wkc end"
            return
        else:
            print "&gt; wkc click (%d, %d)" % (loc.x, loc.y)
            click(loc)
</pre>
<p>※引数の「画像」について<br />
画像となっている部分は、パターンオブジェクト、画像ファイル名のどちらの型でも受け付けます。Sikulixの関数には、見つけたい画像を画像ファイル名だけでも指定できますが、Patternクラスのインスタンスを作成して類似度(similarity)や、オフセット(targetOffset)を合わせて指定することができます。そのため、作成した便利関数では、ファイル名、Patternオブジェクトのどちらも受け付けるようにしました。</p>
<h2>wc関数</h2>
<p>指定された画像が表示されるまで、画像認識を続けます。見つけたら、見つかった部分をクリックします。<br />
最初の3行はログ出力のための画像ファイル名の取得を行っています。<br />
5行目の<a target="_blank" href="http://doc.sikuli.org/region.html#Region.exists">exists関数</a>呼び出しで、画像認識を行います。戻り値はMatchオブジェクトで、見つからなかった場合はNoneが得られます。見つかった場合は、Matchオブジェクトをクリック対象とします。見つからなかった場合は、エラーを出力して例外を発生させます。<br />
exists関数の代わりに<a target="_blank" href="http://doc.sikuli.org/region.html#Region.wait">wait関数</a>を使っても良かったのですが、独自のログを出力して分かりやすくしたかったため、exists関数を使用しています。</p>
<h2>fc関数</h2>
<p>指定された画像が表示されるまで、画像認識を続けます。複数見つかった場合、一番上にあるものをクリックします。wc関数を発展させたものです。<br />
最初の3行は同じく、ログ出力のための画像ファイル名の取得を行っています。<br />
5行目では、タイムアウトを計算するために、現在時刻を取得しています。次の行で、タイムアウトの判定を行っています。（time.time関数では、秒単位で時刻を返すため、timeout引数を1000で割っています）<br />
8行目では画像認識にて見つかったすべてのMatchオブジェクトを返す<a target="_blank" href="http://doc.sikuli.org/region.html#Region.findAll">findAll関数</a>を呼び出しています。得られた結果を、次の行でソートしています。ソートに使うキーの指定は、<code>key=lambda m:m.y</code>であり、Matchオブジェクトの属性"y"でソートされることになります。<br />
ソートされたMatchオブジェクトのリストのうち、先頭のオブジェクトを取り出してクリック対象としています。クリック後は、関数を抜けます。画像認識で見つからなかった場合は、findAll関数にて例外が発生します。ログを出力して、whileの中をループします。<br />
whileのループが終わるのは、タイムアウトしたときになりますので、ログを出力して、例外を発生させます。</p>
<h2>wkc関数</h2>
<p>指定された画像が表示されるまで、画像認識とクリックを続けます。クリックする場所は引数で指定します。画像が見つかっても、その場所はクリックしません。<br />
1行目から無限ループになっています。ループの終了条件は、2行目の「画像が見つかったら」です。<br />
画像が見つからない場合は、5行目のelse節に入ります。引数で指定された位置(Locationオブジェクト)をクリックします。</p>]]></content:encoded>
    <dc:subject>未選択</dc:subject>
    <dc:date>2017-02-25T12:02:44+09:00</dc:date>
    <dc:creator>おにぎりくん</dc:creator>
    <dc:publisher>NINJA BLOG</dc:publisher>
    <dc:rights>おにぎりくん</dc:rights>
  </item>
  <item rdf:about="http://freesoftoriented.blog.shinobi.jp/%E6%9C%AA%E9%81%B8%E6%8A%9E/-javafx-%E5%AD%A6%E7%BF%92%E3%83%A1%E3%83%A2">
    <link>http://freesoftoriented.blog.shinobi.jp/%E6%9C%AA%E9%81%B8%E6%8A%9E/-javafx-%E5%AD%A6%E7%BF%92%E3%83%A1%E3%83%A2</link>
    <title>[JavaFX]学習メモ</title>
    <description>JavaFXについて学習中です。
まとまった資料がほしいので、こちらにメモを残したいと思います&amp;amp;hellip;。

JavaFXアプリケーションについて１．アプリケーションの構成とクラスJavaFXは、Javaでアプレットや画面をもったアプリケーションを作成するためのフレームワークである。画面を表す...</description>
    <content:encoded><![CDATA[JavaFXについて学習中です。<br />
まとまった資料がほしいので、こちらにメモを残したいと思います&hellip;。<br />
<br />
<span style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">JavaFXアプリケーションについて</span><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><span style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">１．アプリケーションの構成とクラス</span><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><span style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">JavaFXは、Javaでアプレットや画面をもったアプリケーションを作成するためのフレームワークである。画面を表すクラス（Stage）やコントロールを表すクラス（Control）、コントロールのレイアウトを管理するクラス（XxxPane）、見た目をカスタマイズするクラス（Xxxxx）を組み合わせつつ、アプリケーション（Application）を作成する。</span><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><span style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">１．１．アプリケーション(Application)</span><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><span style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">JavaFxアプリケーションは、Applicationクラスが中心となる。（エントリポイントは通常のmainメソッドだが、通常ここではApplication.launch()メソッドを呼び出して、フレームワークに制御を委ねる。mainメソッドがなければ、launchが呼ばれたとされる・・・？暗黙の実装があるのかもしれない。）</span><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><span style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">Applicationクラスは、以下の３つのメソッドをオーバーライドする。（ライフサイクルメソッドとして、適切なタイミングで呼び出される）</span><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><span style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">initメソッド：JavaFxの初期化を行う前に呼び出される。ロジックなど、JavaFxに関係のない部分の初期化を行うことができる）</span><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><span style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">startメソッド：JavaFxの初期化後に呼び出される。画面の構築などを行うことができる。</span><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><span style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">stopメソッド：アプリケーションが終了（Platform.exit()による)する前に呼び出される。JavaFxが破棄されたあとに呼ばれるため、ロジックの終了処理を行う場所となる。</span><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><span style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">１．２．ステージ(Stage)</span><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><span style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">画面クラス。</span><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><span style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">Stageは一つのScene（</span><a rel="nofollow" target="_blank" href="https://docs.oracle.com/javase/jp/8/javafx/api/javafx/scene/Scene.html" style="color: #6611cc; cursor: text; pointer-events: none; font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">https://docs.oracle.com/javase/jp/8/javafx/api/javafx/scene/Scene.html</a><span style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">）を持つ（setSceneメソッドを用いる）。Sceneはシーングラフ全体を管理するためのオブジェクトであり、ドラッグ・アンド・ドロップやサイズの取得などをサポートする。シーングラフは、図形やUIコントロールを階層にしたものである。GroupクラスやRegionクラス、レイアウト関連のクラス（XxxPane）は子要素を持つことができる(これらはParentクラスのサブクラスである)。他のUIコントロールや図形は、子要素を持たない。これらが複雑に構成され、または動的に変更されるとき、表示も更新される。</span><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><span style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">ここでクラスの関連を整理しておく。</span><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><span style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">[Stage] 1--&gt;1 [Scene] 1--&gt;1 [Node] &lt;-extends,has- [Parent]</span><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><span style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">１．２．１．プロパティ（Property）</span><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><span style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">Java Beanで使われているプロパティの仕組み（java.beanにあります）をベースに、拡張を加えたプロパティの仕組みがJavaFXでは使われています。</span><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><span style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">プロパティは、通常のフィールド（属性）を、一定のルールにもとづいて定義するようになっています。</span><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><span style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">ルール１：getter/setterを持つ。名前はgetXxx/setXxx。</span><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><span style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">ルール２：プロパティオブジェクトを返すメソッドを持つ。名前はxxxProperty。</span><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><span style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">プロパティオブジェクトは、プリミティブのラッパーになっていて、以下の機能を持ちます。</span><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><span style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">・変更監視（リスナーを登録して、変更時になにかしら処理できる）</span><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><span style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">・バインディング（プロパティ同士の関連を表現できる。例えば、常にAとBの和となるようなCを作れる。位置関係や金額の総和などの関係をオブジェクトとして表現できる。）（UIコントロールのプロパティ同士を連動させられる。ユーザーが入力すればプロパティも更新され、その変更をバインドした別のプロパティに反映させられる。）</span><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><span style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">バインディングオブジェクト（？）には、変更監視のリスナー登録に加えて、値が変更されたInvalidationListenerを登録できる。Bindingクラスのサブクラスを作れば、オリジナルの関係性を作ることができる。</span><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><span style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">１．３．コントロール</span><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><span style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">Scene上に配置するNodeについて。</span><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><span style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">Nodeには図形やUIコントロール、コンテナがある。</span><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><span style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">図形：四角や丸といった図形</span><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><span style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">UIコントロール：ボタンやテキストフィールド、ラベルなど。ユーザーに情報を提示したり、操作を提供したりする。</span><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><span style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">コンテナ：他のNodeを包含する。レイアウト機能を持つ（Groupは何もレイアウトを行わない）</span><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><span style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">UIコントロール</span><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><a rel="nofollow" target="_blank" href="https://docs.oracle.com/javase/jp/8/javafx/user-interface-tutorial/ui_components.htm#JFXUI101" style="color: #6611cc; cursor: text; pointer-events: none; font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">https://docs.oracle.com/javase/jp/8/javafx/user-interface-tutorial/ui_components.htm#JFXUI101</a><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><span style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">コンテナ（レイアウト）</span><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><a rel="nofollow" target="_blank" href="http://www.oracle.com/pls/topic/lookup?ctx=javase80&amp;id=JFXLY" style="color: #6611cc; cursor: text; pointer-events: none; font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">http://www.oracle.com/pls/topic/lookup?ctx=javase80&amp;id=JFXLY</a><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><span style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">１．４．FXML</span><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><span style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">（FXMLLoaderクラスで読み込める。コントローラクラスをセットすると、FXMLのイベント（？）を受け取ることができる）</span><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><span style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">（FXMLからイベントをセットするには、コントロールにonActionといった属性を記述する。これで、fx:controlで指定されたクラスのメソッドと紐付く）</span><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><a rel="nofollow" target="_blank" href="http://krr.blog.shinobi.jp/javafx/fxml%E3%82%92%E5%88%A9%E7%94%A8%E3%81%99%E3%82%8B%EF%BC%88%EF%BC%91%EF%BC%89%E5%9F%BA%E6%9C%AC%E7%9A%84%E3%81%AA%E4%BD%BF%E3%81%84%E6%96%B9" style="color: #6611cc; cursor: text; pointer-events: none; font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">http://krr.blog.shinobi.jp/javafx/fxml%E3%82%92%E5%88%A9%E7%94%A8%E3%81%99%E3%82%8B%EF%BC%88%EF%BC%91%EF%BC%89%E5%9F%BA%E6%9C%AC%E7%9A%84%E3%81%AA%E4%BD%BF%E3%81%84%E6%96%B9</a><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><span style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">１．５．スタイルシート</span><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><a rel="nofollow" target="_blank" href="https://docs.oracle.com/javase/jp/8/javafx/user-interface-tutorial/css_tutorial.htm#JFXUI733" style="color: #6611cc; cursor: text; pointer-events: none; font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">https://docs.oracle.com/javase/jp/8/javafx/user-interface-tutorial/css_tutorial.htm#JFXUI733</a><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><span style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">１．６．ダイアログ（カスタムダイアログ）</span><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><span style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">メッセージダイアログは、Alertクラスが使える。選択ボックスやテキスト入力が必要な場合は、それぞれChoiceDialog, TextInputDialogを使える。</span><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><span style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">カスタムダイアログのためには、Stageクラスに独自のコントロールを並べたものを設定する必要がある。</span><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><span style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">２．スレッドモデル</span><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><span style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">Swingやその他のGUIフレームワーク同様、シングルスレッドモデルである。JavaFx関連の操作を行う場合は、アプリケーションスレッドと呼ばれる専用のスレッド上で行う必要がある。</span><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><span style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">（きっと、このスレッドを止めると画面の描画が進まなくなる。アプリケーションスレッドではファイルの読み書きやネットワーク通信を行わないこと。）</span><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><span style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">３．標準的なアプリケーションの例（公式チュートリアル）</span><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><span style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">------</span><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><span style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">javadoc link</span><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><span style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">* Application</span><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><a rel="nofollow" target="_blank" href="https://docs.oracle.com/javase/jp/8/javafx/api/javafx/application/Application.html" style="color: #6611cc; cursor: text; pointer-events: none; font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">https://docs.oracle.com/javase/jp/8/javafx/api/javafx/application/Application.html</a><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><span style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">* Stage</span><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><a rel="nofollow" target="_blank" href="https://docs.oracle.com/javase/jp/8/javafx/api/javafx/stage/Stage.html" style="color: #6611cc; cursor: text; pointer-events: none; font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">https://docs.oracle.com/javase/jp/8/javafx/api/javafx/stage/Stage.html</a><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><span style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">* Scene</span><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><a rel="nofollow" target="_blank" href="https://docs.oracle.com/javase/jp/8/javafx/api/javafx/scene/Scene.html" style="color: #6611cc; cursor: text; pointer-events: none; font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">https://docs.oracle.com/javase/jp/8/javafx/api/javafx/scene/Scene.html</a><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><span style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">* Group</span><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><span style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">* Text</span><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><span style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">* FXMLLoader</span><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><a rel="nofollow" target="_blank" href="https://docs.oracle.com/javase/jp/8/javafx/api/javafx/fxml/FXMLLoader.html" style="color: #6611cc; cursor: text; pointer-events: none; font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">https://docs.oracle.com/javase/jp/8/javafx/api/javafx/fxml/FXMLLoader.html</a><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><span style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">document link</span><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><span style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">* Overview</span><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><a rel="nofollow" target="_blank" href="https://docs.oracle.com/javase/jp/8/javafx/get-started-tutorial/jfx-overview.htm" style="color: #6611cc; cursor: text; pointer-events: none; font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">https://docs.oracle.com/javase/jp/8/javafx/get-started-tutorial/jfx-overview.htm</a><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><span style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">* Properties</span><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><a rel="nofollow" target="_blank" href="https://docs.oracle.com/javase/jp/8/javafx/properties-binding-tutorial/binding.htm" style="color: #6611cc; cursor: text; pointer-events: none; font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">https://docs.oracle.com/javase/jp/8/javafx/properties-binding-tutorial/binding.htm</a><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><a rel="nofollow" target="_blank" href="http://itpro.nikkeibp.co.jp/article/COLUMN/20121219/445461/?P=2" style="color: #6611cc; cursor: text; pointer-events: none; font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">http://itpro.nikkeibp.co.jp/article/COLUMN/20121219/445461/?P=2</a><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><span style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">* Scene Graph</span><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><a rel="nofollow" target="_blank" href="https://docs.oracle.com/javase/jp/8/javafx/scene-graph-tutorial/scenegraph.htm#JFXSG107" style="color: #6611cc; cursor: text; pointer-events: none; font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">https://docs.oracle.com/javase/jp/8/javafx/scene-graph-tutorial/scenegraph.htm#JFXSG107</a><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><span style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">* UI Controls, Layouts, CSS</span><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><a rel="nofollow" target="_blank" href="https://docs.oracle.com/javase/jp/8/javafx/user-interface-tutorial/ui_components.htm#JFXUI101" style="color: #6611cc; cursor: text; pointer-events: none; font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">https://docs.oracle.com/javase/jp/8/javafx/user-interface-tutorial/ui_components.htm#JFXUI101</a><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><span style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">* Containers </span><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><span style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">* Screen Transition </span><a rel="nofollow" target="_blank" href="http://javafx-trick.appspot.com/article/110001/110009/80051.html" style="color: #6611cc; cursor: text; pointer-events: none; font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">http://javafx-trick.appspot.com/article/110001/110009/80051.html</a><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><span style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">* Dialogs </span><a rel="nofollow" target="_blank" href="http://krr.blog.shinobi.jp/javafx/javafx%20%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%83%BB%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0" style="color: #6611cc; cursor: text; pointer-events: none; font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">http://krr.blog.shinobi.jp/javafx/javafx%20%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%83%BB%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0</a><br style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;" /><span style="color: rgba(0, 0, 0, 0.870588); font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">* Samples </span><a rel="nofollow" target="_blank" href="http://www.oracle.com/technetwork/java/javase/overview/javafx-samples-2158687.html" style="color: #6611cc; cursor: text; pointer-events: none; font-family: 'Roboto Slab', 'Times New Roman', serif; white-space: pre-wrap; background-color: #fafafa;">http://www.oracle.com/technetwork/java/javase/overview/javafx-samples-2158687.html</a>]]></content:encoded>
    <dc:subject>未選択</dc:subject>
    <dc:date>2016-09-22T18:27:37+09:00</dc:date>
    <dc:creator>おにぎりくん</dc:creator>
    <dc:publisher>NINJA BLOG</dc:publisher>
    <dc:rights>おにぎりくん</dc:rights>
  </item>
  <item rdf:about="http://freesoftoriented.blog.shinobi.jp/android/%E3%83%A1%E3%83%88%E3%83%AD%E3%83%8E%E3%83%BC%E3%83%A0%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E5%85%AC%E9%96%8B">
    <link>http://freesoftoriented.blog.shinobi.jp/android/%E3%83%A1%E3%83%88%E3%83%AD%E3%83%8E%E3%83%BC%E3%83%A0%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E5%85%AC%E9%96%8B</link>
    <title>メトロノームライブラリ公開</title>
    <description>GithubにAndroid向けメトロノームライブラリを置きました。
https://github.com/LapisCactus/cactus-metronome

Androidアプリでメトロノームの音を鳴らすだけのライブラリです。Viewは付属しません。
サンプルコードがありますので参考にして...</description>
    <content:encoded><![CDATA[GithubにAndroid向けメトロノームライブラリを置きました。<br />
<a href="https://github.com/LapisCactus/cactus-metronome" title="" target="_blank">https://github.com/LapisCactus/cactus-metronome</a><br />
<br />
Androidアプリでメトロノームの音を鳴らすだけのライブラリです。Viewは付属しません。<br />
サンプルコードがありますので参考にしていただければと思います。<br />
<br />
ライブラリ本体はこちらからダウンロードできます。<br />
<a href="https://github.com/LapisCactus/cactus-metronome/tree/master/cactusmetronomelib/release" title="" target="_blank">https://github.com/LapisCactus/cactus-metronome/tree/master/cactusmetronomelib/release</a><br />
<br />
libsフォルダにcactusmetronomelib.jarを配置すると、使えるようになると思います。<br />
jarファイルを使う場合は当たり前のことなのかもしれませんが&hellip;こちらのページが参考になりました。<br />
<a href="http://sakebook.hatenablog.com/entry/2014/08/17/004540" title="" target="_blank">http://sakebook.hatenablog.com/entry/2014/08/17/004540</a><br />
<br />
<br />
]]></content:encoded>
    <dc:subject>Android</dc:subject>
    <dc:date>2015-12-19T23:54:38+09:00</dc:date>
    <dc:creator>おにぎりくん</dc:creator>
    <dc:publisher>NINJA BLOG</dc:publisher>
    <dc:rights>おにぎりくん</dc:rights>
  </item>
  <item rdf:about="http://freesoftoriented.blog.shinobi.jp/android/%E3%83%A1%E3%83%88%E3%83%AD%E3%83%8E%E3%83%BC%E3%83%A0%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%EF%BC%88%E9%96%8B%E7%99%BA%E4%B8%AD%EF%BC%89">
    <link>http://freesoftoriented.blog.shinobi.jp/android/%E3%83%A1%E3%83%88%E3%83%AD%E3%83%8E%E3%83%BC%E3%83%A0%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%EF%BC%88%E9%96%8B%E7%99%BA%E4%B8%AD%EF%BC%89</link>
    <title>メトロノームライブラリ（開発中）</title>
    <description>Android向けのメトロノームライブラリを作成中です。
ひとまずメトロノームとして使用できることが確認できたため、リリースの準備をしています。

１１月までにはGitHubにソースコードを公開し、JarファイルとJavadocをダウンロードできるようにしようと思っています。...</description>
    <content:encoded><![CDATA[Android向けのメトロノームライブラリを作成中です。<br />
ひとまずメトロノームとして使用できることが確認できたため、リリースの準備をしています。<br />
<br />
１１月までにはGitHubにソースコードを公開し、JarファイルとJavadocをダウンロードできるようにしようと思っています。]]></content:encoded>
    <dc:subject>Android</dc:subject>
    <dc:date>2015-10-13T02:02:24+09:00</dc:date>
    <dc:creator>おにぎりくん</dc:creator>
    <dc:publisher>NINJA BLOG</dc:publisher>
    <dc:rights>おにぎりくん</dc:rights>
  </item>
  <item rdf:about="http://freesoftoriented.blog.shinobi.jp/%E6%9C%AA%E9%81%B8%E6%8A%9E/windows%20audio%20%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%81%AE%E5%86%8D%E8%B5%B7%E5%8B%95">
    <link>http://freesoftoriented.blog.shinobi.jp/%E6%9C%AA%E9%81%B8%E6%8A%9E/windows%20audio%20%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%81%AE%E5%86%8D%E8%B5%B7%E5%8B%95</link>
    <title>Windows Audio サービスの再起動</title>
    <description>私のWindows7 では、休止モードから復帰したときに音がならなくなることがあります。
そんなときはWindows Audio Endpoint Builderサービスを再起動するのですが、頻繁に発生するのでいちいち再起動するのが面倒です。そこでバッチファイルをこさえてみました。


@echo ...</description>
    <content:encoded><![CDATA[私のWindows7 では、休止モードから復帰したときに音がならなくなることがあります。<br />
そんなときはWindows Audio Endpoint Builderサービスを再起動するのですが、頻繁に発生するのでいちいち再起動するのが面倒です。そこでバッチファイルをこさえてみました。<br />

<pre><code>
@echo off

net session &gt; nul 2&gt;&amp;1
if %ERRORLEVEL% == 0 (
    echo administrative privileges! restart audio service
    net stop audiosrv
    net stop audioendpointbuilder
    net start audioendpointbuilder
    net start audiosrv
) else (
    echo not administrative privileges... restart.
    powershell -command start-process "%0" -verb runas
)
</code></pre>
簡単な内容説明： <br />
最初にnet sessionを実行することで、管理者権限があるかどうか、確認しています。<br />
管理者権限があれば、所望の処理を実施しています。<br />
ない場合は、powershell経由でバッチファイル自身を起動しています。このときに管理者権限を要求しており、UACのダイアログが出ます。<br />
<br />
この手法は、「バッチファイルを常に管理者権限で実行したい」ときに使えそうです。<br />
<br />
参考：<br />
<a href="http://okwave.jp/qa/q8634495.html" title="" target="_blank">http://okwave.jp/qa/q8634495.html</a><br />
<a target="_blank" href="http://qiita.com/skkzsh/items/5e03bb7792629927acfa" title="">http://qiita.com/skkzsh/items/5e03bb7792629927acfa</a><br />
]]></content:encoded>
    <dc:subject>未選択</dc:subject>
    <dc:date>2015-02-07T13:45:28+09:00</dc:date>
    <dc:creator>おにぎりくん</dc:creator>
    <dc:publisher>NINJA BLOG</dc:publisher>
    <dc:rights>おにぎりくん</dc:rights>
  </item>
  <item rdf:about="http://freesoftoriented.blog.shinobi.jp/windows_rt/surfacert%E4%B8%8A%E3%81%A7c-%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%82%92%E5%8B%95%E3%81%8B%E3%81%99">
    <link>http://freesoftoriented.blog.shinobi.jp/windows_rt/surfacert%E4%B8%8A%E3%81%A7c-%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%82%92%E5%8B%95%E3%81%8B%E3%81%99</link>
    <title>SurfaceRT上でC#プログラムを動かす</title>
    <description>SurfaceRT上でC#プログラムを動かす
環境
ターゲット：SurfaceRT (Windows RT 8.0、jailbroken)
ホスト：Windows7 + VisualStudio Express 2012 for Windows Desktop


やったこと
自作コンソールアプリを...</description>
    <content:encoded><![CDATA[<h2>SurfaceRT上でC#プログラムを動かす</h2>
<h3>環境</h3>
ターゲット：SurfaceRT (Windows RT 8.0、jailbroken)<br />
ホスト：Windows7 + VisualStudio Express 2012 for Windows Desktop<br />
<br />

<h3>やったこと</h3>
自作コンソールアプリを、脱獄済みの初代Surface上で動かす。<br />
<br />

<h3>手順</h3>
<ol>
<li>VisualStudio Express 2012 for Windows Desktopを起動し、C#のコンソールアプリケーションプロジェクトを作成する</li>
<li>プログラムを書く</li>
<li>動作確認する</li>
<li>Release / Any CPUでビルドする</li>
<li>binディレクトリにできたexeファイルをSurfaceRTに転送する</li>
<li>exeファイルを実行する</li>
</ol><br />

<h3>結果</h3>
exeファイルを実行できた<br />
作成したプログラム<br />

<pre class="java" name="code">using System;

namespace ConsoleApplication2
{
    class Program
    {
        public static CommandShell MainCommandShell = new CommandShell();
        static void Main(string[] args)
        {
            Console.WriteLine("=== sample program ===");
            MainCommandShell.loop();
        }
    }

    /// <summary>
    /// ユーザーからコマンド入力を受け、処理を実行するシェル。
    /// loopメソッドで開始し、exitメソッドで終了する。
    /// </summary>
    class CommandShell
    {
        /// <summary>
        /// 実行可能なコマンドの配列
        /// </summary>
        private Command[] Commands = { new HelpCommand(), new ExitCommand() };

        /// <summary>
        /// ループを終了するかどうか
        /// </summary>
        private Boolean running = false;

        /// <summary>
        /// シェルを開始する
        /// </summary>
        public void loop()
        {
            running = true;
            while (running)
            {
                Console.Write("&gt; ");
                string cmd = Console.ReadLine();
                foreach (Command command in Commands)
                {
                    if (command.process(cmd))
                        break;
                }
            }
        }
        /// <summary>
        /// シェルを終了する
        /// </summary>
        public void exit()
        {
            running = false;
        }
    }
    /// <summary>
    /// シェルで実行できるコマンド
    /// </summary>
    interface Command
    {
        Boolean process(string cmd);
    }
    /// <summary>
    /// ヘルプコマンド
    /// </summary>
    class HelpCommand : Command
    {
        public Boolean process(string cmd)
        {
            if (cmd.StartsWith("help"))
            {
                Console.WriteLine("help: exit");
                return true;
            }
            else
            {
                return false;
            }
        }
    }
    /// <summary>
    /// 終了コマンド
    /// </summary>
    class ExitCommand : Command
    {
        public Boolean process(string cmd)
        {
            if (cmd.StartsWith("exit"))
            {
                Console.WriteLine("exit");
                Program.MainCommandShell.exit();
                return true;
            }
            else
            {
                return false;
            }
        }
    }
}
</pre>
<h3>感想</h3>
簡単に動いた。<br />
GUIアプリも書いてみたい。<br />
C#らしいプログラムの書き方を忘れてる。命名規則？プロパティ？]]></content:encoded>
    <dc:subject>Windows RT</dc:subject>
    <dc:date>2014-05-29T02:02:09+09:00</dc:date>
    <dc:creator>おにぎりくん</dc:creator>
    <dc:publisher>NINJA BLOG</dc:publisher>
    <dc:rights>おにぎりくん</dc:rights>
  </item>
  <item rdf:about="http://freesoftoriented.blog.shinobi.jp/android/20130515">
    <link>http://freesoftoriented.blog.shinobi.jp/android/20130515</link>
    <title>無題</title>
    <description>作成中のAndroidアプリを置いておく場所を作った。

Toishi is an supplemental app for those who want to memorize bible verses.
http://code.google.com/p/toishi/

今月中にGoo...</description>
    <content:encoded><![CDATA[作成中のAndroidアプリを置いておく場所を作った。<br />
<br />
Toishi is an supplemental app for those who want to memorize bible verses.<br />
<a href="http://code.google.com/p/toishi/" target="_blank">http://code.google.com/p/toishi/</a><br />
<br />
今月中にGoogle Play登録できるかなぁ・・・]]></content:encoded>
    <dc:subject>Android</dc:subject>
    <dc:date>2013-05-15T01:32:36+09:00</dc:date>
    <dc:creator>おにぎりくん</dc:creator>
    <dc:publisher>NINJA BLOG</dc:publisher>
    <dc:rights>おにぎりくん</dc:rights>
  </item>
</rdf:RDF>
