So-net無料ブログ作成
検索選択
JAVAで開発 ブログトップ
前の10件 | -

Mavenを使ってみた [JAVAで開発]

(2016.06.02)
Servletコンテナを搭載したアプリケーションサーバのひとつであるjetty(これです)のサンプル・プロジェクトでMaven(これです)が使われていました。
名前は知っていました(<==「メイバン」もしくは「メイヴェン」と読むらしい)が初めて使うことになったので、Mavenの使い方を先に勉強することにしました。

色々な方がMavenについて説明されています。その中で最も判りやすく感じたのは(こちら)でした。ただし、Maven2で説明しているので、Maven3で試す場合に気を付けなければならない点が一つだけあります。

”2.3. プロジェクトの作成”に出てくる以下のコマンドです。
mvn archetype:create -DgroupId=com.example -DartifactId=sample

これを実行するとエラー終了して、説明通りの結果になりません。ここで暫く悩みましたが、あれこれググッて・・・

”create”を”generate”に替え、
mvn archetype:generate -DgroupId=com.example -DartifactId=sample

これで説明通りの結果を得ることが出来ました。
やれやれ

<試したコマンド>
mvn -v
mvn archetype:generate -DgroupId=com.example -DartifactId=sample
mvn compile
mvn test
mvn javadoc:javadoc
mvn site
mvn package
mvn install
mvn deploy
mvn clean
mvn eclipse:eclipse

Mavenのことはぼちぼち判ってきたので、またjettyのsampleプロジェクトに戻ります。
<==気の長い奴

nice!(10)  コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

Play Frameworkを諦めた [JAVAで開発]

(2016.05.31)
Play Frameworkやscalaやsbtやらをあれこれ調べています。

activator UIを試そうとしたのですが、どうやら途中でRaspiがハングアップしたようです。

再起動してメモリー消費を調べてみました。

リモートデスクトップで接続したときのメモリー消費は31%
pi@Raspi_3:~ $ free
total used free shared buffers cached
Mem: 947760 295220 652540 7704 19688 144612
-/+ buffers/cache: 130920 816840
Swap: 102396 0 102396

$ activator UI
2016_00531_1.pnglocalhost:8888の表示

この時点でメモリー消費は82%
pi@Raspi_3:~ $ free
total used free shared buffers cached
Mem: 947760 782332 165428 16540 14276 189584
-/+ buffers/cache: 578472 369288
Swap: 102396 36332 66064

かなり危ない。

さらにHello Scala!アプリを構築しようとすると・・・

構築途中のメモリー消費は98%超!
pi@Raspi_3:~ $ free
total used free shared buffers cached
Mem: 947760 932620 15140 20000 768 51296
-/+ buffers/cache: 880556 67204
Swap: 102396 60 102336

マウスの反応がだんだん鈍くなってきたのでブラウザを閉じました。orz
やっぱり、RaspiにPlay Frameworkは重すぎたようです。

代わりに、lighttcp+jettyを試すことにします。
(<==懲りないやつ)

nice!(8)  コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

Play Frameworkを使ってみた [JAVAで開発]

(2016.05.30)
JAVAを使ったWEBアプリの開発環境について調べていて、”Play Frameworkこれです)”のことを知りました。”重厚長大なJavaのWebアプリ開発を軽量で生産性の高いものにする”ということで、大きな期待を抱きました。

Raspi-3に先ずはこれ(↓)をダウンロードし、
https://downloads.typesafe.com/typesafe-activator/1.3.10/typesafe-activator-1.3.10.zip

展開して出来たactivator-dist.1.3.10/binにPATHを通し、
<.bashrcに以下を追加>
export PATH=$PATH:~/activator-dist.1.3.10/bin

Play Frameworkを構築しました。
$ activator new my-first-app play-java

(ここで数10分間updateが続く)

完了後、Play Frameworkを走らせてみました。
$ cd my-first-app
$ activator run

また何やらdownloadし始めて・・・
ようやくサーバが起動しました。

2016_0529_1.png9000番ポートにアクセスする

2016_0530_1.pngAPIドキュメント

2016_0530_2.png開発にIDEが使えるらしい

起動に時間が掛かる(アクセスを受け付けてからコンパイルが始まる)のですが、起動後の画面切り替えはとてもスムーズです。

ただ、”HelloWorld!”レベルのテンプレートではないので、これをどのようにカスタマイズすれば良いのか?見当もつきません。orz

nice!(11)  コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

BCMLIB_FOR_JAVAにバグが見つかった [JAVAで開発]

(2015.07.23)
BCMLIB_FOR_JAVAこれです)はRaspberry piのペリフェラル(GPIOとかI2Cとか)をJAVAで操作するライブラリで、そのI2Cライブラリを使ってOsciLogiの開発を進めてきました。

これまで、特に問題は生じていなかったのでライブラリとしてそこそこ動いている(出来上がっているもの)と思っていました。ところが・・・

I2C経由でPICのステータスを読み取る機能を(I2C割込が入るとOsciLogi のサンプリングに影響するので)、GPIOを介してPICのステータスを読み取る機能に変更したのですが、これが動いてくれません。orz

デバイスファイルを操作すると正しく読み取れるので、PICとRaspiの接続に問題は無く、プログラムのバグが疑われます。

<デバイスファイルの操作はこんな感じ>
echo 17 > /sys/class/gpio/export
echo in > /sys/class/gpio/gpio17/direction
cat /sys/class/gpio/gpio17/value
1
cat /sys/class/gpio/gpio17/value
0

BCMLIB_FOR_JAVAを使ってGPIOの出力を操作したことはあるのですが、実はGPIOの入力は今回が初めてです。ライブラリのどこかに不具合があるのですが、(自分で作ったライブラリとは言え)二年も経つとどんなプログラムだったか、すっかり忘れています。orz

あちこち覗き込んで、少しずつ仕組みが見えてきました。全部で四つのプログラムで構成されていま(す)した。

JAVA<==>libbcm_interface.so<==>shared memory<==>bcm2835_for_java

古典的な(コマンドの実行経路にprint文を挿入するという)手法で順番に調べていって、libbcm_interfaceが実行結果を読み取る所で失敗していることが判りました。

プログラムを修正して一件落着

やれやれ
-------------------
もう少し調べてから、GITに登録したファイルを更新します。


にほんブログ村 IT技術ブログへ
にほんブログ村 ネットブログ コミュニティサイトへ
にほんブログ村 IT技術ブログ オープンソースへ

nice!(1)  コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

Swingのお復習いを終えた [JAVAで開発]

(2015.06.23)
Swingのプログラムを書く前にお復習いをするのはいつもの習慣(前に獲得した知識が失われている orz)ですが、今回初めて”Creating a GUI With JFC/Swing”チュートリアル(これです)を通読しました。それで、『必要な知識は得られたのか?』と問われると、『未だ叶わず』と答えるしかないのですが・・・
一週間掛けて試したデモ・プログラムがNetbeansのProjectペインから溢れて(60以上ある)います。
2015_0623_1.png試したデモ・プログラムの数々

それでも、ある種の達成感(みたいなもの)は得ていて、(出来る気はしないのですが)やる気だけは一杯です。
NetbeansのGUI builderのお復習い(これです)を少しやったら、いよいよOscilogi2のアプリケーション・プログラムの開発に取りかかります。

--------------------------------ーーーーーーーーーーーーーーーーーーー
完備された”The JAVA tutorial”はJAVAの価値を高めるものであることは間違いありません。しかし、初めてJAVAに取り組む方にお勧めできる代物ではありません。(ボリュームが多すぎる!)

初めてJAVAでGUIプログラムを書いてみようと思われた方にはNetbeansのチュートリアル(こちら)をお勧めします。約20分の速習コース(らしい)です。

にほんブログ村 IT技術ブログへ
にほんブログ村 ネットブログ コミュニティサイトへ
にほんブログ村 IT技術ブログ オープンソースへ

nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

TabbedPaneのKeyBindingsで嵌る [JAVAで開発]

(2015.01.07)
年末、低温調理で遊んでいる間にPIC32MX450F256LとOscilogi_32基板が届きました。

2015_0107_1.png厳重な包装でPIC32が届いた
やけに厳重な包装だと思ったら、左端に注意書きが記されていました。

湿度に敏感なデバイス(多分リードの部分だと思う)らしく、開封後は168時間以内に半田付けしろとか何とか書かれています(<==既に過ぎている)。orz

2015_0107_2.png威圧的なTQFPのPAD

半田付け支援装置のテストも未だなのですが、テスト・プログラムで半田付けすること(<==ぶっつけ本番)になりそうです。

<作業イメージはこんな感じ>
(1)PADの直ぐ傍に部品押さえジグが来るように手動操作する。
(2)PADに下半田する。
(3)ジグの下に部品を入れる。
(4)自動送りを起動する。
(5)beepが三回鳴る前に、下半田を溶かしておく。
(6)部品がジグに押されて、PADに乗るまでそのまま待つ
(7)ジグの下から部品を出して、半田付けする。

この作業に必要な機能は二つだけです。
(1)ボタンまたは矢印キーで半田付け支援装置を手動操作する。
(2)ボタンまたはファンクション・キーで予め設定された移動を開始する。(移動開始前にbeepを三回鳴らす)

ファイルに記述したコマンドを半田付け支援装置へ出力する(予め設定された移動を行う)機能は既に出来ているので、矢印キーを押している間だけ半田付け支援装置を連続動作させる機能を組み込めば、準備は整います。”JavaSwingではJComponentにInputMapとActionMapを定義することによってKeyBindings(<==キーボード入力に応じた動作の設定)を行う”ということです。(ここまでは昨年末に調査した)

で、何が何やらよく判らないまま年明けから(先達の知恵を借りて)ESCキーのON/OFFを表示するプログラムを書き始めました。
private static Action esconaction = new AbstractAction() {
  @Override
  public void actionPerformed(ActionEvent e) {
       System.out.print("ESC ON\n");
      }
};

private static Action escoffaction = new AbstractAction() {
  @Override
  public void actionPerformed(ActionEvent e) {
       System.out.print("ESC OFF\n");
      }
};

KeyStroke esc = KeyStroke.getKeyStroke("ESCAPE");
KeyStroke esc_off = KeyStroke.getKeyStroke("released ESCAPE");

InputMap inputMap = new InputMap();
inputMap.put(esc, "ESCAPE");
inputMap.put(esc_off, "release ESCAPE");

ope_panel.setInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW, inputMap);
ope_panel.getActionMap().put("ESCAPE", esconaction);
ope_panel.getActionMap().put("release ESCAPE",escoffaction);

プログラムは期待通りに動いたのですが、矢印キーの方は思うように動いてくれません(左右の矢印でTabbedPaneが切り替わってしまう)。またsetInputMapの引数を”WHEN_IN_FOCUSED_WINDOW”から”WHEN_FOCUSED”に換えるとESCキー操作も動かなくなってしまいます。orz

参考にしたサンプル・プログラム(これです)は、ちゃんと動くのに、何故親族SNS管理人のプログラムは動かないのか?

このまま悩んでいても先に進めません。”JFrameに配置したJPanel(サンプル・プログラム)にはFOCUSが移る。JTabbedPaneに配置したJPanelにはFOCUSが移らない”これを経験的事実として受け入れることにしました。

JTabbedPaneからFOCUSが移るボタンをJPanelに設けて、ボタンにWHEN_FOCUSEDのInputMapを登録し、ESCキーでボタンのFocusableプロパティを切り替えることにしました。
<こんな感じ>
(1)デフォールトでは、矢印キーを操作するとTabbedPaneのタブが切り替わる。
(2)操作パネルのキーボード操作ボタンをクリックすると、矢印キーによる半田付け支援装置の操作が有効になる。
(3)その状態でESCキーを押すと、ボタンはFOCUSを失い、再び矢印キーによるタブの切り替え操作が出来るようになる。
2015_0107_3.pngキーボード操作ボタンを設けた

まだ、矢印キーのON/OFF表示しか出来ていませんが、どうにか半田付けに必要な機能を組み込むことが出来そうです。

やれやれ

にほんブログ村 IT技術ブログへ
にほんブログ村 ネットブログ コミュニティサイトへ
にほんブログ村 IT技術ブログ オープンソースへ

nice!(2)  コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

Toolkit.getDefaultToolkit().beep()を試してみた [JAVAで開発]

(2014.12.21)
JavaFXで書いたプログラムをSwingで書き直す作業を少しずつ進めていましたが、RS232Cの送受が出来るようになって、一気に作業が進みました。

制御コマンド・ファイルを読み込んでXYステージを操作出来るようになったので、半田付け支援機能のテストに大きく近づきました。

”どういう手順でテストするか”考え始めて、問題に気付きました。

最終的な半田付け支援はフット・マウス(つまり足)で操作できるようにするのですが、パソコンにはI2Cインターフェースが無いので、フット・マウスが付けられません。

右手に半田こてを構え、左手で送信ボタンをクリックしなければならないのです。送信ボタンのクリックからコマンド送信まで遅延を持たせれば何とかなりそうなのですが、”動き出すのをじっと待つ”というのもシンドイ気がします。

つらつら考えて・・・

『動き出す前にピッ、ピッ、ピッと3回Beep音を鳴らす』という方法に辿りつきました。JAVAでBeep音を鳴らす方法を調べてみると簡単にできるようです。
<こんな感じ>
  for(int i = 0 ; i < 3; i++){
    Toolkit.getDefaultToolkit().beep();
    try{
      Thread.sleep(1000);
    }catch(Exception e){
    }
  } 

”ピッ、ピッ、ピッ、ウィーン”って、なかなか良い感じです!
(実際は数mmしか動かないのでピッ、ピッ、ピッ、ウィン位?)

あとは、キーボードによる操作の組み込みが残っていますが、JavaのKey Bindingsがよく判っていません。orz

Key Bindingsの勉強これ)から始めます。

---------------------------------
javax.sound.sampledクラスを使って、もっと複雑な音を出す方法も見つけました
これです)が、今回はパスします。
---------------------------------

にほんブログ村 IT技術ブログへ
にほんブログ村 ネットブログ コミュニティサイトへ
にほんブログ村 IT技術ブログ オープンソースへ

nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

SwingWorkerについて調べてみた [JAVAで開発]

(2014.12.16)
JavaFXのプログラムでは、Timelineを使って受信バッファポーリングとListへの表示を行っていました。

<こんな感じ>
    public void update_list2() {
      timeline = new Timeline();
      timeline.setCycleCount(Timeline.INDEFINITE);
      timeline.getKeyFrames().add (
           new KeyFrame( Duration.millis(10), new EventHandler() {
              @Override
              public void handle(Event t) {
                String s;
                s = (String)rq.poll();  
                if( s != null ){
                  try{
                    receive_list.add( s );
                  }catch(Exception e){
                    System.out.println(e);
                  }
                }
              }
            }));
      timeline.playFromStart();
    }

Swingで同じことをやるにはどうすれば良いのか?
”Swing マルチスレッド”で検索を掛けると・・・

ビンゴ~

大御所の該当記事(これです)がヒットしました。

早速目を通しますが、『う~む、判らない』orz

JavaDOCのSwingWorker(これです)にも目を通しましたが、『う~む、益々判らない』orz

こちらの方のページ(これです)に辿りついて、ようやく何をどうすれば良いのか判って来ました。

親族SNS管理人のJavaプログラムは、毎回”泥縄”です。(^ ^;)

にほんブログ村 IT技術ブログへ
にほんブログ村 ネットブログ コミュニティサイトへ
にほんブログ村 IT技術ブログ オープンソースへ

nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

JAVAのキーボード入力に戸惑う [JAVAで開発]

(2014.12.06)
半田付けテスト用のホスト・コントローラの仕様をまとめ、”さてJAVAキーボード操作を扱うプログラムはどんなものだろう”と調べ始めた所で作業が止まりました。

キーボードとのインターフェース調べると、”Key Bindings”(これとか)やら”key listeners”(これとか)やら、今まで使ったことのない機能に出くわしました。

今、動いているのはjavaFXのプログラムですが、javaFXでは”Handling Events”(これ)という別の枠組みでキーボード入力を扱う(<==勘違い?)ようです。

矢印キーでXYステージを操作したいのですが、面倒なことになってきました。

ドキュメントサンプル・コードも整備されているので、あとはやるだけ・・・
2、3年で新しくなるJAVAの世界について行くのはシンドイなぁ~

にほんブログ村 IT技術ブログへ
にほんブログ村 ネットブログ コミュニティサイトへ
にほんブログ村 IT技術ブログ オープンソースへ

nice!(1)  コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

BDFアナライザーにレンジ・コーダを組み込んだ [JAVAで開発]

(2014.05.07)
24ビット漢字フォントをPICにのせる計画(<==妄想)を抱いています。

最初にBDFファイル(jiskan24.bdf)を解析表示するBDFアナライザー(これです)を作りました。BDFファイルの構成が掴めたので、フォント部分を取り出してレンジ・コーダ(<==名前しか知らなかった)で圧縮することにしたのですが・・・

符号/復号アルゴリズムの勉強から始めました。
これ)とか(これ)とか(これ)とか

『実数の算術符号の代わりに2進小数で表現する訳か~』
『入力文字列から一意に決まる2進小数(<==Low)にRange以内の新たな2進小数(<==次の入力文字で決まる)を加えるのか~』
『LowとRangeを8bitシフトしてLowから桁あふれした部分が符号になると・・・』
『Lowに新たな2進小数を加えたときにCarryを生じる場合があるんだ!』
『totalを2のべき乗にすると除算がシフト演算になって計算時間が短くなると・・・』
『ふむふむ』

こんな理解でプログラムを書いてみました。
(1)フォント(<==Hex文字並び)を8bitバイナリパターンに切り分ける
(2)全フォントの8bitバイナリパターンの出現回数に基づくテーブルを作成する
(3)テーブルを出現回数でソート(降順)する
(4)出現回数の総和より大きい2のべき乗数を求め、totalとする
(5)出現回数をtotalで正規化して各パターンのRangeとする
(6)Rangeの積算値を各パターンのLowとする
(7)8bitパターンでソート(昇順)したテーブルを使ってエンコードする
(8)Lowでソート(降順)したテーブルを使ってデコードする

テーブルのソートや検索がCollectionsクラスの関数で簡単に出来ちゃうのがJavaの嬉しい所です。

<カスタム クラスのリストをバイナリー・サーチする>
  FontHashRangeComparator fhrc = new FontHashRangeComparator();
  ArrayList<Range_Coder.FontHash> fh_list;
  Range_Coder.FontHash keyfh;

  private class FontHashRangeComparator implements Comparator<Range_Coder.FontHash> {
        @Override
        public int compare(Range_Coder.FontHash o1, Range_Coder.FontHash o2) {
            if( o2.key < o1.low )return 1;
            else if( ( o1.low+o1.range ) <= o2.key ) return -1;
            else return 0;
            }
        }

  c =  ( code+1 ) << Range_Coder.total_bit;
  c /= range;
  keyfh.key = c.intValue();
  index = Collections.binarySearch(fh_list, keyfh, fhrc ); 


書き上げたプログラムにフォント・パターンを入力するとエンコード出力が得られるようになりました。それをデコーダに入力してデコータが出力した文字列をフォント・パターンと比較すると・・・一致しません。orz
それから長いデバッグ作業が続きました。
エンコーダか?
デコーダか?
ロジックか?
プログラムのミスか?
(全部有った)
デバッグに四日掛けて、動きだした(一致した結果が得られた)ときはほっとしました。
レンジコーダはなんとか動いたのですが、未解決の問題が二つあります。
その一つが復号処理の符号語を求める計算です。
  c =  ( code+1 ) << Range_Coder.total_bit; <==ここ
  c /= range;


(code+1)にしないと、正しく検索できない(一つ手前のパターンに合致してしまう)場合が出てくるのです。
”打ち切り誤差の影響ではないか”と考えていますが、よく判っていません。また、デコード文字列に不要な”0”が付いてしまいます。デコードの終了判定が不十分なのですが、これもまた良く判っていません。orz

良い加減デバッグに疲れたのと、実用上問題にならない(デコード出力の不要な部分は無視すれば良い)ので、このまま先に進むことにしました。

jiskan24のフォント・サイズは、圧縮前が495kBで圧縮後は377kBでした。圧縮率76%というのは、ちょっと残念ですがPIC32MX(512 KB Flash搭載)で何とか扱える範囲なので良しとします。

やれやれ

にほんブログ村 IT技術ブログへ
にほんブログ村 ネットブログ コミュニティサイトへ
にほんブログ村 IT技術ブログ オープンソースへ


nice!(1)  コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感
前の10件 | - JAVAで開発 ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。