one)とJavaMEでの開発環境構築に失敗していますが、今回はうまくいくであろうと思っています。(やって見ないとわからないのが世の常。)目的Microbit〜ラズパイ〜MIDI音源と通信をしてMicrobitから音を鳴らそうというものです。EclipseMEこのプラグインを試してみたいと思います。古い情報しか見当たらず。Beansを見ると行けそうな感じがしました。細かい説明のあるページも見つけました。NetBeansでやるのは嫌なので他を探すことにします。開発方法を見直す本当は、PC上でソースコードを書いて、テスト実行して、ラズパイにデプロイ。いうように作業をしたかったのですが、色々探しても、適当なものが見つからないので諦めることにしました。PCでコーディング→ラズパイでテスト諦めて上のような実装方法にしようと思います。ポイントは以下のようになります。JDKのバージョンをPCとラズパイで揃える(Java1.8で後に続く_XXX-XX)というのは無視Eclipseで通常通りに実装、PC上(のコンパイラ)で実行およびテストラズパイで作成したコードをGit経由でダウンロード、ビルドして実行(テスト)このようにやって行こうと思います。調べたけれど、結局はこの方法に落ち着きました。いうわけで、PC上でJavaMEを実行することを考えて環境構築を行います。Kuraを使用するとか、あるのですがいまいちしっくりきていないのでもう少し調査します。今回は、ここまでにしておきます。はじめの一歩〜ツイートJavaの布教を企んでいます。シンプルにゴールが見える形で学習を進める方法がないか考えていました。少林寺36房をモデルにする少林寺拳法など、中国の古い文化は「教育」という部分でとても優れたシステムを持っているように思います。その中で注目したのがこの「少林寺36房」です正直のところ、内容は知りませんがポイントとしては以下のようなことです。学習する時のポイント段階的に学習(修行)レベルを上げていく基本の理解を進める中で「奥義」の片鱗を見つけられるやる気(やって面白い)実際に学習をするのに「コード」を書かないと始まらないのでソースをコンパイルしたりなんだりと必要なことが多いのですが、ここら辺の問題をクリアするのが「ウェブコンパイラ」だと思いました。上のキャプチャをクリックするとコードをコンパイルできるページに遷移することができます。上記のリンク(キャプチャ)から画面遷移してコードを書き下の文言を出力するプログラムを書いてください。"こんにちは、世界"ポイント「ハローワールドを起動する。」(初めにあるプログラム)「"」(ダブルクォーテーション)を表示する参考ページはじめの一歩〜ハローワールド〜実際に上のキャプチャをクリックするとそのページへ移動できますが、コードを書いて起動するのは自分自身です。ハローワールドのコードが書いてあります。注意点Java以外の言語でも共通して必要なコードがあります。Listとか、Fileなどの操作を行いたいときにはそれぞれの使用するためのAPIが用意されているのでそれらを使用しますが、使用するときには以下のようにインポートする必要があります。java.util.List;この35房をクリアできたら次は第34房です。ファイル読み込みのテスト〜ツイート今回は、今迄作成した「ファイル存在チェック」と「ファイル作成、更新」処理を繋げてテストします。この段階で、ようやくテストらしいテストになります。ちなみにこのテストケースも実装前に作成出来ますが、小さなレベルで、テスト仕様を考える→実装→テスト実施...とやった方が早い気がします。口座作成処理ようやく、仕様レベルの話に戻って来ました。このテストケースはコーダー銀行に口座を開設する処理に当たりますので、実際に動かす時と同じような入力(テストなのでデータ)を渡して実行します。テストコードは下のようになります。このテストケースが通ったらとりあえずは、製造完了です。ひと段落したので、一旦休むも良し、このまま突走るのも良し。何が言いたいかと言うと、プログラムは何かを作る、仕組みを作るなどに使用する。単純に触りたいだけ...など色々あると思いますが、ちゃんと動くモノを作った方が、実力もつくし、作ったもので遊べるし、良い事ずくめだと思うので、色々と作ってみるのが良いと思います。今迄やって来ているのは、サンプルなので...主な目的は「Javaの学習」になっています、あまり作りたいものには届かないと思います。基礎を学べる様になっているのと、コンソールアプリなので応用はいくらでも出来ます。早い話が、コンソールアプリが作れれば、あとは環境が違うだけなので大まかな流れは理解できるずです。続き前置きは、このくらいにして、続きをやります。早い話が、今迄作成したメソッドを続けて呼び出し、それらが想定通りに動くか?の確認を行います。作成したメソッドは以下のものです。上のメソッドを結合してやる場合のテストケースから考えます。データの読み込み仕様ファイル存在チェックを行いファイルが存在すれば読み込む存在しなければファイル作成を行う仕様に関してはこの部分のみをみていましたが、ファイルの読み込みをした後に、データが入っているはずなので、これを取得する必要があります。この部分は実装していないので、実装が必要です。目の前のテストを片付けてしまいます。テストコードは下の様になりました。テストを実施しながら実装するので手直しをするからこうなりました。言う表現を使いました。テストが通ったので、次の事を考えます。ここまでは想定通りに行ったという事です。次は、読み込んだファイルのデータをクラスに設定してやる事を考えます。ファイルに保存してあるデータを読み込んで、プログラムで使いやすい様にデータクラスを使ってデータを保持します。「保持」と言うのは、プログラムが止まると消えてしまう情報なので「保持」と言う言葉を使いました。ちなみに、ファイルに保存すれば、プログラムが止まっても情報は残しておけます。現状では、Dataクラスを使用してファイルにデータを書き込んでいます。ちなみにデータクラスは下の様なコードになります。口座情報を保持するクラスのインスタンスを生成。Setterのみのクラスです。読み込み時にも同じクラスが使えます。まとめると以下の様な手順でファイルを読み込みます。データクラスをリストにして返却する以上の様な手順でファイルからデータを取得します。これをテストケースにします。上の手順そのままですがこれを確認するためのテストケースを作成します。これもとりあえずは「スタブメソッド」を作成します。null;}このメソッドはJavaDocコメントにある様に、リストにしてデータを返しますので、java.util.Listインターフェースを使用してデータを返却します。Listインターフェースの配列型リスト=ArrayListクラスを生成してデータをセットする様に実装します。コードは以下の様になります。data.getPassword());}このテストケースを実行しエラーが出ない様なコードを作成します。一応、CSVファイルはファイル作成時に出力したデータが設定されていることを確認しています。〜設計後の部品を実装する1〜ツイート今回は、役割分担を行なった後にクラス(部品)をどのように組み合わせてアプリを作成するか?について記載したいと思います。【補足】アプリの規模がとても小さく、処理内容も少ないのでちゃんとした「設計書」の類は作成しません。<ユースケース>【前提】コンソール画面のATMとします。ユーザー認証は行いません。単純に金額を入金、引き出しができるものを作ります。部品を作る<部品候補>からクラスを2つ作成します。クラス名はアルファベットで作成する必要がある(全角の文字でも作成できますが、なんとなく嫌なので。)MainBankクラス(メインメソッドを持つ)Calcurationクラス(引出し、入金を管理する)上のように名前をつけます。このように「役割分担」をしてやれば、いざ修正するときにどちらかのクラスの一部を修正してやれば、デグレート(修正したらおかしな事になる)する事もないように作ることができます。ここのポイントとしては、書く処理の依存度をなるべく低くしてやることです。依存度が高いと下のようなコードになります。・}入力を受けたあとに入金処理を同じクラスの中に書き始めると、結局のところは全部の処理をMainBankクラスに書くことになります。ソースを読む時は全部読まないといけないし、修正するときも、あちこち直さなくてはいけません。残業パラダイス必至のコードです。平和のためにこのような作成方法はやめましょう。依存度を下げるためにクラスを複数作成し、役割分担をしてやります。今回のコンソールアプリを作るのには以下のような2つの処理が必要です。し処理のそれぞれを行う。ポイント受付部分は共通なので、MainBankで行う入金処理、引出し処理は独立させることができるので分割するそんなわけでMainBankクラスCalcurationクラス上記のクラスを作成することにしました。MainBankクラスアプリケーションの起動とコーダー銀行の受付処理を行います。処理の詳細に関しては、以下の通りになります。コーダー銀行の受付文言をコンソールに表示デフォルトの預金金額¥1000-を表示する入金(in)、引出し(out)の判定を行い、処理終了する時は「bye」の入力で処理を終了するそのほかの入力はエラーメッセージを表示してサイド入力を促す表示を行うCalcurationクラス入金、引出し処理を担当するクラスです。このクラスには預金額を管理するためのフィールド変数が必要になります。入金処理、引出し処理では以下のような処理が必要になります。入金・引出し処理を行う旨を表示する。それぞれの処理を行った後の預金額を表示する。受付〜各処理への状態が変化していることをプログラム的に区別する必要がある。上の3番に関して、「プログラム的に〜」と記載している部分は「状態」を管理することにより処理クラスを変更、管理しやすいのです。この設計手法に関してはGOFのデザインパターンなどを読んでみるととても参考になります。良いデザイン(設計)をできるようになると、色々と楽ができます。APIの使い方について触れました。今回は、今迄に作成したソースに改修を加えます。したSELECTボックスの値をDBに登録する。現状の画面は下のような感じです、表示するには「ログイン」を行う必要があります。追加した項目の値をSQL(登録処理)に追加する以上のような処理を実装します。現状は下のような画面が表示されています。下のセレクトボックスは値を変更しても何も変わりません。data;}よく見たら。formから直接送信データを作成しているようでした(笑)つまり、SELECTボックスに名前をつけて、PHP側でそれを取得するようにしてやれば良いということです。categoryId)のようにSQLに項目を追加します。画面からテストがてらにデータ追加!キャプチャ取ったがよくわからないです。![](http://zenryokuservice.com/wp/wp-content/uploads/2019/08/スクリーンショット-2019-08-28-21.51.29-300x14.png)登録した結果は下のように表示されます。![](http://zenryokuservice.com/wp/wp-content/uploads/2019/08/スクリーンショット-2019-08-28-21.52.50-262x300.png)[対象のページはこちらです。まとめ今回の改修作業は、以下の点を変更するものでした。他の処理は触りませんでした。いうのもありますが、せっかく作ったものですので、余計な改修はしたくありません。設計をある程度ちゃんとやっておけば最低限の修正で済むし、作ったもの(コード)を長く使用できるというわけです。〜文字列を切り取る、substr()〜ツイート文字列.sbustr()文字列.substr()で文字列を切り取ります。具体的には、下のようなコードです。〜Lv2_6_Javaの基本(プロパティファイルを読む)ゲームループ付き〜ツイートイントロダクション前回までに以下のような事をやってきました。〜Lv2_5_Javaの基本(コマンド履歴を作る)ゲームループ付き〜<各項目の概要と目的>ハローワールドを行い、コードを書いて動かす:これによりメインメソッドの存在とコンソールへの出力方法を知ります。動かしてみたので、その内容を理解します。レベルで内容を理解したので、実際にコードを書いて動かします。自分でコードを考えて実装→起動を行うとプログラミングの面白みも見えてくるかと思います。書いたコードをレベルアップします。今後この「リファクタリング」はどのレベルになってもついてきます。レベルが高ければ高いほど難易度も上がっていきます。理論的なことをやったのであとは実践です。パフォーマンス」の面で良いものができるか考えるのである意味「永遠のテーマ」です。(笑)今度は、入力した文字によっていろんな処理を実装できるようにプログラムを改造していきます。サンプルとして「Dirコマンド」のようなカレントディレクトリ(現在いるフォルダ)のファイル一覧を取得する処理を実装しました。javaに初めからついているクラス「List」を使用してコマンド履歴を出力するプログラムを作成します。ここではjava.utilパッケージについて記載しています、今後はこのパッケージにあるクラスを何個か使用します。プロパティファイルプロパティファイルを使用するのもjava.utilパッケージにあるクラスを使用します。「プロパティファイル」とは拡張子がproperiesのファイルを指します。「*.properties」このファイルはキーと値がセットになっています。具体的には下のような感じです。ads="グーグルアドセンス"win="ウィンドウズ"mac="マッキントッシュ"このようなファイルを作成し、これを読み込んでプログラム中で使用します。今回の使い方は「コマンドをキーにして値を表示する」というような形でやろうと思います。前提として、前回までのコードに追加修正を加える形で実装します。コンストラクタでプロパティファイルを読み込みます。プロパティファイルにあるキー(コマンド)を入力した時はプロパティファイルの値を表示それ以外のコマンド(キー)は前回までと同じ動きつまりプロパティフィルにあるキーが存在すればそれを出力して、それ以外はいままで通りということです。今回のポイントはプロパティファイルを読み込むところです。プログラムが動き始めたら即ファイルを読み込んでおきたいので、コンストラクタで読み込むように実装します。Propertiesクラスはフィールド変数として使用します。ちなみにファイルまでのパスを指定しますが、ビルドパスを基準にパスを記載するのでちょいと注意が必要です。resources/test.properties>resources/test.propertiesを読み込みたい場合は「ビルドパスがresourcesにつながっていることを確認します。コードは下のような感じです。}}ポイントの部分はprop.load(getClass().getResourceAsStream("test.properties"));の部分です、ここではPropertiesクラスのload()メソッドを使用してInputStreamからプロパティファイルを読み込みます。getClass().getResourceAsStream("パス")で対象ファイルのInputStreamを取得します。具体的にはビルドパスにつながっているディレクトリがルート「/」になるので「/test.properties」が対象のパスになりますが、環境によりルートが違う場合があります。作成したコードはこちらです。〜Lv2_Javaの基本(コードの書き方)ゲームループ付き〜ツイートイントロダクション前回は、とりあえず入力して画面に表示するものを作成しました。動画は、作成中にデバッックしたものです。ちなみにバグもあります。「動いた!」という感動を味わっていただきたく思い中途半端ですが、アプリとして動くものを作成しました。コードはGitにアップしています。最終的にはコンソールゲームを作ります。AP概要Lv2標準入力を受け付けて、以下のような動きをします。World!」と表示する。そのほかの文字を入力したら「想定外の入力です」を表示する。四則計算をする今回のメインになる実装を行います。前回の記事で問題を出しました。上の動画はデバック中の動画になります。バグも残っています(笑)。前回作成したコードをもう一度眺めてみます。}}頭(行の先頭)からコードの意味を記載していきます。上のコードで行くと、下の部分がクラス定義になります。}このクラス名はなんでも良いのですが、下のルール(大雑把な規約)にしましょう。ちなみにCheckStyleというEclipseのプラグイン(標準装備)を使用すると簡単に規約違反が見つけられるので便利です。参考サイトメタ文字:%/\&'*)など、これらはEclipseなどのIDE(開発ツール)を使用するとエラーが出るので安心です。Javaのクラスはアッパーキャメルケース("AppaKyameru"のように書く)を使用します。Javaのメソッドはキャメルケース("appaKyameru"のように書く)を使用します。こんなところを気をつけましょう。メイン・メソッドの定義まずは動かしたいので「メインメソッド」を作成します。メインメソッドは以下のような特徴があります。メソッドの定義は1つだけ、ほかの書き方はない。このメソッドが動く引数は「プログラム引数」になるプログラム引数プログラム引数はEclipseで使用する場合は下のように値を渡してあげます。argsの部分が引数であり、下のように設定してアプリを起動すると変数「args」に"プログラム引数1"のように値を渡せます。注意として、プログラム引数は「String」型のデータになります。ちなみに「データ型」に関しては後々に触れますが、現在使用しているデータ型は「int」「String」があります。調べてみると「???〜???までの整数」などのように記載されてますが、早い話が、範囲指定はあるけど(正負の)整数です。Stringなどの「オブジェクト型」とか「参照型」など(同義です)と違い、直接の値(メモリの領域)を保持します。String型これはjava.lang.Stringというクラスの型になります。intと違い「クラス」なので「null」が存在します。「参照型」とか「オブジェクト型」などと呼ばれます。早い話が「NULLが存在する型」なんだな!と理解してくれればOK!今後深く理解していきます。int型などのように直接、値を持つ変数と違いオブジェクトへの参照(ポインタ)を変数に持ちます。NULLがあるのです。次は実装すでに書いたコードに追記・編集していきます。....」を出力するだけだったので、この部分を拡張します。今回は作成したこのクラスを使用します。Bye!");}具体的に下の部分が変わりました。Lv2_1_Calculatie()の部分は作成したクラスのインスタンスを取得しています。インスタンス化すると「インスタンスメソッド」が使えるようになります。A();のように「new」してから使用するスタティックメソッド:A.staticMethod()のようにクラス名.メソッド名で呼ぶことができる上のような違いがあります。まとめクラスとメソッドの書き方、メソッドの種類について触れました。結局計算する部分には触れませんでしたので次回触れようと思います。〜非同期通信でのPOSTリクエスト〜ツイートイントロダクション前回KMLファイルがなんたら。Mapの選択した位置にピンを落とす処理を追加しました。現在の作成物はこちらのURLhttps://zenryokuservice.com/sample/js/SampleMap.html非同期通信処理(Ajax)今回は、ここから非同期で記載した情報をサーバーに送信、JSONファイルを出力する処理を実装しようと思います。非同期通信について触れておきます。非同期通信とは<同期通信>HTMLフォームを使用して画面を遷移したり画面をリロードしたりするようなURLを更新するような通信のことを同期通信と言います。通常のリクエスト送信だと思っていただいて間違い無いと思います。<非同期通信>それに対して、非同期は何が違うのかというと画面の一部分を更新するときによく使います。....」なんて表示されているのがこれです。<同期通信の場合>リクエスト送信した後に「レスポンス(次のページを受け取る)を待ちます。<非同期通信>リクエスト送信した後に「レスポンス」を待ちません。...」なんて処理を行いながら「レスポンスが帰ってくる」のを待っています。ポイントレスポンスを待たなくて良いので次の処理が実行できるというわけです。「待ち」の時間が減るのでユーザーに優しい実装になります。地図上の情報を取得、写真をサーバーに送信しJSONという形で保存しようという処理を実装しよう、というお思惑です。前回記載しました内容の処理を実装します。JavaScript最近ではAngluarとかJQueryとかいろんなもの(フレームワーク?)がありますが、面倒なので使用しません。HTML5の仕様読みましたが、かなりの範囲を網羅する形でAPIが提供されているので、わざわざ他のJSライブラリなどを使用しなくて良いと思った次第です。→話(使用する部品)がややこしくなるのであまり使いたくありません(笑)。XmlHttpRequest久しぶりに使用します。非同期通信を行うときに使用するオブジェクトです。他のライブラリなどはこいつを使用しているのでハナっからこの部品を使ってしまいます。APIドキュメントはこちらにあります。ドキュメントページからコードを失敬。こいつをベースにして、ファイルなどのデータを送信する処理を実装しようと思います。あとは、ソースを眺めながら考えます(笑)。実装の流れ先にサーバー側の実装を行います。これはクライアント(画面)からAjaxのリクエストを飛ばし、サーバー側で受けるので、受け口を先に作る...というわけです。ファイルの受け取りを行うので、とりあえず受信が出来ているか確認するものを作ります。サンプル(クライアント)は下のリンクからアクセス出来ます。https://zenryokuservice.com/sample/js/SampleMap.htmlでわでわ。