Programming column: A programming unified viewand

My case fun of programming started from bash script. Was really wanted to accustomed with unix or Linux culture bought tons of unix used books mainly under $10.. lol.

Before that I learned Java but it’s hard to living well with OS ( computing environment). Especially make files, directories, reading, writing, using regular expression and co-operating with environment.

Bash is perfect for co-work with the environments. But not Object Oriented so hard to code maintain and manage.

Once you got through one bash book ( My case O’reilly’s “Learning bash shell” Second edition maybe) u will be interested in Sed & Awk.

Sed is “Stream EDitor” by my memory. This using ed text editor inside might be? Ed is very old text editing program. AT&T Bell Lab’s product. Line orient and matrix(mother) of Vi text editor. It won’t even display whole text. 🤓 Because it’s for printer type display(teletype). In the era no crt display and printed to papers. So this was efficient for paper printer.

Awk is acronym for “Adrian will kome “. 🤕

This is splendid language, Jon Bentley was attracted . Perl’s main influencer..

Python is made by masters of low or middle level languages. There are tons of splendid libraries, functions and programming style guide lines.

The point of the view rom function builder on Java, python or frameworks like angular are built arts by the hackers.

Now they must be loving Arduino or Raspy because that’s EECS “Ying and Yang”.

Compiler knowledge is essential.

 

Almost Unix commands are written in C.
But those are very small programs. Like things between programs and API.
Programming approach history is getting generality as it in mathematical description.
Unix commands are more like organic, C? Lol.
I thought like this when reviewing Grep command usage and bash programming.

To be continued,,,

Advertisements

Eclipse error:Editor does not contain a main type or cannot be resolved to a type

eclipse error.jpeg

 

To begin from the cause and solve method…

serObj=load("jaydle.ser");

This statement causes all errors which eclipse said “cannot be resolved to a type” or something like that error.

It highlighted as red circle X, and the others are red light objects.
It said all of my original objects in the class are “cannot be resolved to a type” or something wrong.

From terminal (command line), I tried to compile and error occurred, it pointed

masa@em-p:~/Public/git/jaydle-project/jaydle-project$ javac src/jaydle/JaydlePrototype.java 
src/jaydle/JaydlePrototype.java:61: error: <identifier> expected
serObj=load("jaydle.ser");

So commented out the line,

all of errors disappeared and Mose came. lol.

 

I tried configure “Java build path” but it wasn’t effective.

Eclipse configuration is hard. And error detective system this case reverse effected….

See you!

Personal Memo: SwingWorker class study note (English)

24, Oct, 2018 Wed

Memo to know how to use “SwingWorker” class

publish() is connected with process()

Publish() is used in doInBackground() and send data chunk to process().

SwingWorker<T,V>
T – Result type
V – Type for intermediate result

In processBuild() which is my own, I could’t invoke publish() method.
publish() is method should used in doInBackground() method..
How it be written to process method which takes arguments in doInBackground()?

Reference site
http://www.javacreed.com/swing-worker-example/

MultiThreading is natural.
Practically Swing suppose to launch several threads.

First post end. To be continued…

Personal Memo: SwingWorker class study note (日本語)

SwingWorkerクラスの使い方

publish() – process()と結びついている

publish()はdoInBackground()の内部で使われるが、process()にデータチャンクを送信する。

SwingWorker<T,V>
T – 結果の型
V – 中間結果の型

processBuildメソッド中で、publish()メソッドが使えない。

publish()はdoInBackground()中で使うメソッド

引数を取る処理をdoInBackground()で行うときどうすればいい?

このサイトを参考にする
http://www.javacreed.com/swing-worker-example/

マルチスレッドで当たり前。
Swingは実質スレッドがいくつかある。

Jaydle開発メモ:JMenuBarの追加、アクションの追加、内部クラスの復習、JFileChooser実装のための知識の整理メモ

とりあえずLibreOffice Writer似とったメモを貼っておく🙃

==========================================================

JMenubarを追加する

frame.setJMenuBar(menubar);//frameはJFrameオブジェクト、munubarはJMenuBarオブジェクト

 簡単 うまくいった

参考サイト

https://www.javadrive.jp/tutorial/jmenu/

・アクションの追加

JMenuItemオブジェクトのメソッド addActionListenerからactionPerformedメソッドを実行する

 内部クラスを使って、メソッドを書く場所は確保した。

  ダウンロードボタンも少し修正した(JFrameActionListenerを実装せずに内部クラスで実装した)Screenshot from 2018-10-23 22-18-21

参考サイト

http://java2008.blog103.fc2.com/blog-entry-43.html

・内部クラスの復習

class ButtonListener implements ActionListener
{

public void actionPerformed(ActionEvent e)

{

strIn=textIn.getText();

if(strIn.length()>13)

dlAudio(strIn);

}

}

・メモ

File、プロセスビルダーの保存ディレクトリ、空白ではエラーが出る

JFileChooserの実装

  • showOpenDialog()showSaveDialog()メソッドと使うのが最も簡単

  • showDialog()も使える

  • 上記のメソッドはそれぞれユーザがどのようにダイアログを終わらせたかを表す整数のステータスコードを返す

  • もし返却された値がAPPROVE_OPTIONならば、ユーザはファイルを選んだ、それはgetSelectedFile()メソッドから得ることができる

オライリーJFCクイックリファレンス(原)より

ダイアログからやったほうがよさげ

P440

JFileChooserはダイアログからできているみたい。だからダイアログをやるといい。

Macみたいにクイックファイルリーダが欲しい。

それにしても、洋ドラの「シリコンバレー」で、リチャード・ヘンドリクスがスティーブ・ジョブズだの、スティーブ・ウォズニアックだの言っていた。Youtubeで検索してこの動画を見ていた。
”Creativity”というもんが伝わった。

jarコマンドによる実行可能Jarの作成

 

 

jar

オプション

c JARファイルの作成
f ファイル名の決定
v 内容のリストをverboseモードで
m   マニフェストファイルから値と名前を特定する
-C はfileオペランドで指定されたファイルを処理する際にディレクトリが一時的に変更される

 

参考
https://docs.oracle.com/javase/jp/8/docs/technotes/tools/unix/jar.html
https://docs.oracle.com/javase/jp/8/docs/technotes/guides/jar/jar.html

 

この時のディレクトリ・ファイル構成

~/Desktop/git/masa-examplesがソースのルートディレクトリ
     applications - JaydlePrototype01.java がメインメソッドを含むクラス
     practice - IOMethods.java  がメインクラスで使った依存するクラス

 

まず~/Desktop/git/にJaydleBuildディレクトリを作成
~/Desktop/git/masa-examplesから以下のコマンドを実行

 

javac -d ../JaydleBuild/ applications/JaydlePrototype01.java 
javac -d ../JaydleBuild/ practice/IOMethods.java

 

これでJaydleBuildディレクトリにクラスファイルができた。

 

masa@em-p:~/Desktop/git/JaydleBuildTest$ tree
.
├── applications
│   └── JaydlePrototype01.class
└── practice
    └── IOMethods.class

2 directories, 2 files

のように、

パッケージのディレクトリが作成されている。

 

次に簡単なマニフェストファイルを同ディレクトリに作成

Manifest-Version: 1.0
Main-Class: applications.JaydlePrototype01

 

そして、さっき作ったクラスファイルとマニフェストファイルをjarコマンドでまとめる。

masa@em-p:~/Desktop/git/JaydleBuildTest$ jar cmf Manifest.txt JaydleJarTest.jar ../masa-examples/

失敗。間違ったJARができた。

 

masa@em-p:~/Desktop/git/JaydleBuildTest$ jar cmf Manifest.txt JaydleJarTest.jar .

これでちゃんと作れた。

Screenshot from 2018-10-21 22-56-14

参考
jar コマンドで実行可能な JAR ファイルを作成する | まくまく Java ノート
http://maku77.github.io/java/jar/executable-jar.html

 

YoutubeのMVの音声を抽出してMP3として保存できます。たぶんLinux環境だと動きます。
https://github.com/iamaturtle113/Jaydle

WindowsとMacでは試してないです。Macなら動くかも?Windowsはターミナルのコマンドがちょっと厳しいか。

注 Youtube-dlコマンドがターミナルから起動できることが条件です。

 

Learning About “ActionPerformed” Method And Around “Actions” In JAVA Swing

JFCinanutshellActionListenerインターフェースとactionPerformedメソッドの実行あたりの事柄を整理したいと考えていて、中古で買った洋書を引っ張り出して来て、訳してみました。これはjava.awt.eventに属するみたい。

javax.swing.Action interface

David Flanagan著
JAVA FOUNDATION CLASSES IN A NUTSHELL, A Desktop Quick Reference (O’reilly) 1999, First Edition より

Chapter 3 – Swing Programming Topics – Actions (P26)

JFCtext

GUIソフトはいろんな方法で一つのオペレーションをユーザーにinvoke(呼び出す)ことを許す。
例えば、ユーザーはメニューからでもツールバーからでもファイルをセーブできるだろうし。捜査の結果は極めて同じ。二つの違うインターフェースを介してユーザーに与えられているのだ。

Swingはそのようなオペレーションに関する情報をencapsulate(カプセル化)する単純でパワフルなインターフェースだ。ActionインターフェースはActionListenerインターフェースをextend(継承)するだからActionインターフェースはactionPerformed()メソッドを含む。要求されたアクションを実際に実行するために実装するメソッドはこれである。それぞれのActionオブジェクトはそのアクションに対して追加的な情報を提供する任意の名前/値ペアを持つ。その値は大体以下を含む:そのオペレーションを名付ける短い文字列、グラフィックにそのアクションを表す一つのイメージ、そしてアクションのためのtooltipツールチップ(ふきだし)で使うのに適したより長い文の文字列。加えて、それぞれのActionオブジェクトはひとつのenabledプロパティとenable利用する、disable利用しないということを認可するsetEnabled()メソッドを持つ。(もしあそこでどの文も選択されてないならば、例えば、”切り取り”アクションは通常disableである。)

あなたはひとつのアクションオブジェクトを直接JMenuやJToolBarに追加することができる。あなたがこれをするとき、そのコンポーネントは自動的にそのアクションを表すためのJMenuItemかJButtonを作る、それはそのアクションの捜査をユーザーに対して可能にしそのアクションのテキスト的な描写とグラフィカルなイメージを適切に表示する。

To be continued ..

 

Java Collection Framework practice

Studying Java Collection Framework.
First collection needs knowledge of generics.

Second List is the base interface..
You will implement List by ArrayList or LinkedList..
Tried ArrayList one.

 List<String> stringList=new ArrayList<String>();
	myList.add("generics");
	println(myList.get(0))

this prints

generics

Wanna write moon’s waxing and waning program I thought.
Checked wikipedia, that’s cycle is 29.27 to 29.83 days.
Hmm, how much it will be complex program?

Ref.
https://en.wikipedia.org/wiki/Lunar_month

#thread-safe or not
#vector

Java build error: When build java code made in eclipse on the terminal.

I couldn’t solve package import problems.
First package should not be used “-(hyphen)”.
My one was masa-example so couldn’t be used. This was git repository name..
So I made “practice” package.
But import my own library didn’t go smoothly..

My mistake was compile directory path and javac command…

javac -d . practice/RegexPractice01.java

Java programs which has dependency class without classpath should be compiled at default root directory with javac -d option..

 

mistake commands

masa@lve-imac2:~/Desktop/git/masa-examples$ javac RegexPractice01.java
RegexPractice01.java:29: error: cannot find symbol
println(str);

masa@lve-imac2:~/Desktop/git/masa-examples$ javac -cp practice.RegexPractice01.java
javac: no source files
Usage: javac <options> <source files>
use -help for a list of possible options

masa@lve-imac2:~/Desktop/git/masa-examples$ javac -d out practice/RegexPractice01.java practice/IOMethods.java
javac: directory not found: out
Usage: javac <options> <source files>
use -help for a list of possible options

 

 

 

 

GAE (Google App Engine)で遊ぶ

公式サイトからダウンロード。ワタクシの場合はJavaザマス。

https://cloud.google.com/appengine/downloads?hl=ja

ダウンロードしたあとは、解凍して、シェルにパスを通すみたい。binディレクトリ。
ファイルの置き場迷うが、 /usr/local/ 下とする

export PATH="$PATH:/usr/local/appengine-java-sdk-1.9.63/bin/"
その際の参考資料
Windowsユーザーに教えるLinuxの常識(3):各ディレクトリの役割を知ろう(サブディレクトリ編) (2/2)
http://www.atmarkit.co.jp/ait/articles/0109/07/news002_2.html

 

以下、クイックスタートに沿って、リアルタイムで進行中

 

git cloneでソースのダウンロード。
私の場合 ~/Code/googleAppEngine/ にダウソ。

mvn appengine:devserver

を実行。
なんか、

[INFO] INFO: Dev App Server is now running

となり、サーバーが起動中になってるみたい。
http://localhost:8080/

にブラウザからアクセスすると、

Event tracked.

と書いてある。

mvn appengine:devserver コマンドを実行するディレクトリ間違えた。

…/appengine/helloworldで上記のコマンド実行、localhost:8080/にアクセス ->

ブラウザに

Hello, world

と書いてある。

 

次は、プリント文の中身を書き換え、mvn clean packageを実行して、リビルド。
ワタクシのバアイハ、

This is Test web page of Masataka Nakamura a.k.a La Ville Eternell
Overriding Google App Engine Example 'Hello World App'.
This is Java SDK.
Other contents coming soon maybe..
By teh way I wanna go Siliycon Valley... huh,,,

にした。

 

そして、デプロイのためにCloud Platformプロジェクトと、App Engineアプリケーションを作った。

プロジェクト名は… λ 笑
masa’s first project にした。

リージョンはアメリカ西海岸にしてみた。

サインインに

4/cQCmazgJm8NWlnKt4JJbZvrMqjeHTr1VINh-lDFTIPp7rMZJ1qvQXRw

をアプリにコピペしてくれとある。

なんかよくわからないなと思ったら、google cloud platformに登録しなきゃいけないっぽい。

登録してSDKをインストール。linux版はココから

gcloud init とかでログインしてたら、
.botoファイルを作ったらしいな。これ。

 

・Ubuntuのエラー

よくコンソールみたら、

(java:18774): Gtk-WARNING **: Unable to locate theme engine in module_path: “adwaita”,

ってエラーも出てる

 

https://askubuntu.com/questions/774664/gtk-warning-unable-to-locate-theme-engine-in-module-path-adwaita-error-o

sudo apt install gnome-themes-standard

で解決かな。

 

SuccessCodeのペースト先がわからん

IAM

 

オンラインのチュートリアルに従うと、なんかデフォルトの…でデプロイできなかった。

yamlがないとgcloudコマンドでデプロイできないとなる。
yaml作るか?

gcloud init で 使うプロジェクトをオンラインチュートリアルでつくったものに変えた。

cloudshellでmavenのプラグイン足りてないってエラー。

appengine系のプラグイン足りてないみたい

mvn appengine:devserver これはローカルからアクセスできるようにするためのコマンド

 

mvn appengine:updateの結果
[INFO] Running -A masas-first-project -V masas-first-project1 –oauth2 update /home/masa/Code/googleAppEngine/java-docs-samples/appengine/helloworld/target/appengine-helloworld-1.0-SNAPSHOT
The following URL can be used to authenticate:
https://accounts.google.com/o/oauth2/auth?access_type=offline&approval_prompt=force&client_id=550516889912.apps.googleusercontent.com&redirect_uri=urn:ietf:wg:oauth:2.0:oob&response_type=code&scope=https://www.googleapis.com/auth/appengine.admin%20https://www.googleapis.com/auth/cloud-platform
Attempting to open it in your browser now.

これはappcfgの話みたい。それへの許可を与えるための画面かな。

英語版の”Quickstart for Java 8 for App Engine Standard Environment“を試す。

gcloud auth application-default login

で、ブラウザからAuth Libraryをトラストするかというの話になる。トラストした。

You are now authenticated with the Google Cloud SDK!となる

 

gcloudコマンドの説明
https://cloud.google.com/sdk/gcloud/

 

 gcloud components install app-engine-java

コマンドを実行。なんかインストールした。

git clone https://github.com/GoogleCloudPlatform/getting-started-java.git

で別のソースをダウンロード

 

gcloud info
たたいたら、ダウンロードディレクトリにインストールされていることがわかった。移動したいな

Installation Root: [/home/masa/Downloads/google-cloud-sdk]

 

 

mvn appengine:deployのエラーコード

[INFO] GCLOUD: ERROR: (gcloud.app.deploy) The current Google Cloud project [testproject-218805] does not contain an App Engine application. Use `gcloud app create` to initialize an App Engine application within the project.

`gcloud app create`でプロジェクトのアップエンジンアプリを初期化してくださいと出てる。
そのとおりにして、またmvn appengine:deployすると。。

Screenshot from 2018-10-08 15-04-36

実は、stackoverflowにも質問していた