fc2ブログ

プログラム言語って必須科目?

正直必要ないと思う。

英語を必須科目にしたところで、会話できるわけなかろう。

好きな人だけがドンドン上達していくよ・・・

自分は学校でちょこっとやっとなぁ
アセンブラ、BASIC、SQLくらいはね・・・
少し程度ならPerl、PHP・・・Web関係はほぼ忘れてラァ

中学の時初めてPC触ったな。HTMLであそびまくって、JavaScriptにも手を出してたな。
今は、Webは破棄!システムやアプリオンリー

C言語はふつうに電子工作でマイコンにプログラム埋め込むのに必要だしな
アセンブラより便利やね
MOVとかレジスタをワークからアキュムに移してADDとかメンドイねん
JMPとかでループつくったりとか。。
C言語は、ビットフィールド、共用体、多重ポインタとなんでもござれ状態かな。

ソフトウェア、システムなら Java , VB ならまぁちょくちょく使うな
VBは特にVBA!こんな使いやすくて便利な言語は他にないかもな。
他、verilogもいける

VerilogはまぁIT関係の人にはなじみないだろうな。

プログラム言語と言っていいか知らんがTTLマクロもそこそこ使うし、
Pythonはいま使いどこに困ってるし
最近は、MQL言語もっぱらやな

JavaやめてC#へ移籍も考えてるな。う~ん・・

スポンサーサイト



ぬかったあああ

最近、InteJ IDEA とかいう統合開発環境をベースとして作られた

Android Staudio を導入したのだが、エミューレータ起動に

Intelの仮想化技術 VT-xが必要だ。

今自分のPCのCPUがAMDなんで、AMDーvで動けるならいいが

対応して無ければ、ハード的に無理です・・・

OSからCPUへ命令だしてるんで・・解読できない命令送られても対応できんのはしかたない
そういう意味です

やっぱIntelやね!
最近Intelも多数リストラ、AMDはもう開発やめちゃったし
どうなるんやろか

ってかッ数年前から、IPv4も既に枯渇、リソグラフィも小さくならない
じつはいろいろとPCに関する技術はガタが来ているよね

他にもCPUメーカーはあるけど、いずれもPSoCとかそっちよね
まぁスマホに使われるヤツ


引き続きPCの話になるけど、
Windows10って強制アップグレードされるんだよね・・
自分はそんなの話題にもならないが・・・

なぜなら、Windows Updateを止めているからです。
止めていれば、強制アップグレードとかめんどくさいことにならない。

これを止めないと、今まで使っていた動作保証されてないソフトウェアが
動かなくなる場合があるのでね。
※特にMoEなんかは、自分が使ってるWindows8.1 64bitをサポートしてないのでまじヤバイのです。

かといって動作保証されているソフトしか使わない、古いOSナンバーを使い続ける
ナンセンス



【Java】最近なにげに知識0の3Dプログラムやってる

とりあえず、描画処理だけできた
描画用クラスのメソッドをオーバーライドしてそこに描画処理を書き込む
クラスを配列化、リスト化すればらっくらっくに追加描画


特殊処理はトリプルバッファリングだけ備えてある

invokeLator
Thread
paintComponent
VolatileImage
RepaintManager
RecursionTask
ForkJoinPool

手段を選ばない高速処理クラス、メソッドやぁ

必要に応じてますがね


しっかし、もっとマルチコアを活かした並列処理を使いたいな
StreamAPIとかラムダ式があるが
Java8だからねぇ
せめてJava7上でできるようにせなな


さてと、3D上での描画位置だが
原点からの距離
実際の描画ベクトルが欲しいわけだな
骨と肉ッて感じにつくるかな!
そうすれば後の動作にも役立つだろう

アフィン変換の考え方から
4次元行列とか思いつくけど
処理に負担掛かるやり方はやらん

あくまで固定値多いところに乗算させるとか
なんでわざわざ・・・
無駄処理無くせば、CPU占有時間を削減できるし
いち早くディスパッチャしやすくなる。

なるべくなら、sin,cosはLUTを使いたいね
今後の状態次第かな

めっさ数学利用してる現実・・・

頻繁にアクセスする所はstatic
最適化したくない場合は、volatile

forとかループいれるのもいいけど
めんどくさいかもしれんが
配列はなるべく個別代入のみ
使用は控えよう

x2,x4,x8の計算は
シフト演算がいいと思うよ
除算は結果が帰ってくるまでに
CPUパイプラインで3クロック程度はかかるかもな
シフトなら即効だからね~
レジスタ値を右か左に移動するだけで1/2倍、2倍になったりするからね




どこまでできるかやってみたいものね~

【Java】MP3を再生

正直、デバイスドライバ作ってJavaに関連させればいいんだがね
パッケージされてたものがあったからそれを使おう。
DDKとかツールもってないからなぁ~、そもそも金がかかる・・あれ?無料だっけ?

今の時代だとAndroidでやったほうがお得や・・
iPhoneは言語がちゃうから別な
その話はおいておいてと

通常、オラクルの汎化メディアパッケージのJMFとかつかうんだがMIDIやAU、WAV,WMA形式しか対応してなくてね・・
こまったもんだよ

まず以下のZIPをダウンロードしる!
basicplayer3.0.zip
commons-logging-1.1.3-bin.zip

終わったら、解答して
フォルダ内すべての*.jarファイルを外部Jarとして追加してください

全部追加しないと、後にダブルクリックして起動できるようにしたときに
動かないからなぁ~

内容にMain関数使用しているパッケージもあるみたいなので
マニフェストファイルとかで実行させたいインスタンスのクラス名は指定しておきなさい

ちなみに今回は必要なDLLファイルはいらんな

class MP3Player {

private BasicPlayer bp;
private BasicController bc;

・・・

bp=new BasicPlayer();
bp.addBasicPlayerListener(new BasicPalyerListener(){

public void opened(Object arg0, Map arg1) {} //オープン時呼び出し
public void progress(int arg0, long arg1, byte[] arg2, Map arg3) {} //再生時の処理
public void setController(BasicController arg0) {} //パンや音量調節時
public void stateUpdated(BasicPlayerEvent arg0) {} //一時停止とか再生とかそのタイミング

});

音楽再生時にプログレスバーを動かしたいとか
タイムをカウントするとかならprogress

ループ再生とか使いたいなら
stateUpdatedメソッドで
arg0.getCode()==BasicPlayerEvent.EOMをif文にいれて
音楽を止めたあと、再生しなおせばいいのだ



try{
bc.open(file); //ファイルオープン
bc.play(); //再生
bc.setGain(volume); //音量設定
bc.setPan(0.0); //パン、ステレオかな
}catch (BasicPlayerException e){
e.printStackTrace();
}

再生のあとに音量やパンを設定しないとなぜか有効にならない・・・


try {
bc.stop();
} catch (BasicPlayerException e) {
e.printStackTrace();
}

以上で音楽ストップできる。
ただし、一時停止じゃないので注意な!
一時停止は、他のメソッドがあるのでそちらをつかいなされ


さらに、イコライザーとかしたいなら
javazoomにいろいろあるからどぞ

デバイスーC言語ーJavaで橋渡しすれば
もっと多様にできると思うけど大変ですな(´・ω・`)

テーマ : パソコンな日々
ジャンル : コンピュータ

【プログラミング】配列同士の結合ってどうやってる?

人によっていろんなやり方があるよな~。

私の場合の使い方を載せよう。
ただし、Javaでな!

C言語ならリスト構造体とか使うけどね
それは説明めどいからいいや

文字列の配列を
aa,bb,ccとしてddという配列に一まとめしたいとき・・・


String [] aa = {"aa","AA","++"};
String [] bb = {"bb","BB","--"};
String [] cc = {"cc","CC","=="};
STring [] dd;

ArrayList<String> al = new ArrayList<String>();

for(String ss : aa){
al.add(aa);
}
for(String ss : bb){
al.add(bb);
}
for(String ss : cc){
al.add(cc);
}

dd = al.toArray(new String[al.size()]);


ちなにArrayList<String[]>という風に
代入だけ済まそうとすると、
ddに入れたときキャスト例外がでるんだな
※リストに入るのがポインタになるからでは

ddには、
"aa","AA","++","bb","BB","--","cc","CC","=="
の順で文字列が格納されている配列になる。

私は、配列操作によくArrayListを使い、
スタック&キュー操作にはLinkedListを使うな~
コレクションはね


テーマ : パソコンな日々
ジャンル : コンピュータ

Javaグラフィック その2

今回は、描画領域の指定、背景、リサイズ時の描画位置の移動、
ショートカットキーCTRL+Z、CTRL+Yによる戻る、進む機能
を実装。
描画処理をイベントドリブン型へ変更

これをJFrameにセットコンテントペイン

package d2_paint;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.event.InputEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import java.awt.image.Raster;
import java.util.LinkedList;

import javax.swing.JPanel;


public class D2Draw extends JPanel implements Runnable {
private MouseEventAction mea;
private ResizeEventAction rea;
private KeyEventAction kea;
private BufferedImage bi;
private Point start;
private Point end;
private LinkedList<Raster> pxl_buffer;
private LinkedList<Raster> pxl_buck;
private int inputButton = InputEvent.BUTTON1_DOWN_MASK;
private boolean buck_flg=false;
private boolean mouse1_flg=false;
private boolean move_flg=false;
private int xx,yy;
private Dimension dim_paint;

public D2Draw(Dimension paint_s){
super();
mea = new MouseEventAction();
rea = new ResizeEventAction();
kea = new KeyEventAction();
start = new Point();
end = new Point();
xx=(this.getWidth()-paint_s.width)>>1;
yy=(this.getHeight()-paint_s.height)>>1;
pxl_buffer =new LinkedList<Raster>();
pxl_buck =new LinkedList<Raster>();
bi=null;
dim_paint=paint_s;
this.setOpaque(false);
this.setDoubleBuffered(true);
this.addMouseListener(mea);
this.addMouseMotionListener(mea);
this.addComponentListener(rea);
this.addKeyListener(kea);
this.setVisible(true);
}

public class ResizeEventAction extends ComponentAdapter{
public void componentResized(ComponentEvent e) {
xx=(D2Draw.this.getWidth()-dim_paint.width)>>1;
yy=(D2Draw.this.getHeight()-dim_paint.height)>>1;
}
}

public class KeyEventAction extends KeyAdapter {
public void keyPressed(KeyEvent e){
boolean ctrl_flg=false;
switch(e.getModifiersEx()){
case InputEvent.CTRL_DOWN_MASK :
ctrl_flg=true;
break;
default : break;
}
switch(e.getKeyCode()){
case KeyEvent.VK_Z :
if(ctrl_flg){
if(pxl_buck.isEmpty()){
pxl_buck.push(bi.getData());
}
if(!pxl_buffer.isEmpty() && pxl_buffer.size()<=63){
Raster rst = pxl_buffer.pop();
bi.setData(rst);
pxl_buck.push(rst);
}
buck_flg=true;
}
break;
case KeyEvent.VK_Y :
if(ctrl_flg){
if(pxl_buck.size()>=2){
Raster rst = pxl_buck.pop();
pxl_buffer.push(rst);
bi.setData(pxl_buck.peek());
}
buck_flg=true;
}
break;
default : break;
}
D2Draw.this.repaint();

}
}

public class MouseEventAction extends MouseAdapter {

public void mousePressed(MouseEvent e) {
if((e.getModifiersEx()&(inputButton))==inputButton){
start=e.getPoint();
end=e.getPoint();
mouse1_flg=true;
new Thread(D2Draw.this).start();
}
}

public void mouseDragged(MouseEvent e) {
if((e.getModifiersEx()&(inputButton))==inputButton){
start=end;
end=e.getPoint();
}
}

public void mouseReleased(MouseEvent e) {
if(mouse1_flg){
move_flg=true;
mouse1_flg=false;
}
}
}

public void update(Graphics g){
this.paint(g);
}

public void paint(Graphics g){
Graphics2D gbi=(Graphics2D)g;
this.requestFocusInWindow(true);
if(bi==null){
bi=initImage();
gbi=bi.createGraphics();
gbi.setColor(Color.cyan);
gbi.fillRect(0, 0, dim_paint.width,dim_paint.height);
}
if(buck_flg){
gbi=bi.createGraphics();
buck_flg=false;
}
if(mouse1_flg){
gbi=bi.createGraphics();
gbi.setColor(Color.BLACK);
gbi.drawLine(start.x-xx, start.y-yy,end.x-xx,end.y-yy);
}
g.drawImage(bi, xx, yy,this);
}

public BufferedImage initImage(){
return ((BufferedImage)this.createImage(dim_paint.width,dim_paint.height));
}


public void run() {
pxl_buffer.push(bi.getData());
pxl_buck.clear();
if(pxl_buffer.size()==64)
pxl_buffer.removeLast();
while(!move_flg){
this.repaint();
}
move_flg=false;
}
}


テーマ : プログラミング
ジャンル : コンピュータ

機械を触る機会!なんちゃって・・・

機械系の仕事ってほとんどが部品加工かCADというグラッフィク設計をするんだ

電気系はブログに載せきれてないこともあってもう色々やってるんだけど

ミニ四駆とかまさに工学ノウハウが付く・・以外にも
そこからロボコンとかどんどん触れていくかもね
ミニ四駆でライントレーサーマイコンカーにするのも悪く無い

本日はJavaで描画ムラが無く、リサイズしても崩れない、できるとこまで最適化した
基本のペイントツールを作成
ここからペイントソフト→3Dグラフィックへ強めていこうかな

とりあえず基本ソースコードを!黒鉛筆以外ブラシの選択はないけどね

package d2_paint;


import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.event.InputEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;

import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JPanel;


//メインフレーム
class D2Frame extends JFrame {
private JMenuBar jmb_main;
private JMenu jm_file;
private JMenu jm_edit;
private JMenu jm_view;
private ViewerWindow vw;
private boolean resize_flg=false; //ウィンドウサイズ変更時のフラグ

public D2Frame(){ //コンストラクタ
        //フレーム vmはWindowsの表示形式にする為のもの。無くても良いから・・
super("D2System - Frame works -");
vw = new ViewerWindow();
vw.setViewerWindow(this, "windows");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setBounds(vw.getScreenWidth()/2-512,vw.getScreenHeight()/2-384,1024,768);
this.setBackground(Color.white);

        //フレームに描画領域を設定
this.setContentPane(new D2DrawEx());

        //メニューバー等
jmb_main = new JMenuBar();
jm_file = new JMenu("ファイル");
jm_edit = new JMenu("編集");
jm_view = new JMenu("表示");
jmb_main.add(jm_file);
jmb_main.add(jm_edit);
jmb_main.add(jm_view);
jmb_main.setDoubleBuffered(true);
jmb_main.setOpaque(false);
this.setJMenuBar(jmb_main);

this.addComponentListener(new ResizeEventAction());
this.validate();
this.setVisible(true);
}

    //描画クラス
public class D2DrawEx extends JPanel implements Runnable {
private MouseEventAction mea;
private ResizeEventAction rea;
private BufferedImage bi;
private Graphics gbi;
private Point end,start;
private int inputButton = InputEvent.BUTTON1_DOWN_MASK;
private boolean move_flg=false;

public D2DrawEx(){ //コンストラクタ
mea = new MouseEventAction();
end = new Point();
start = new Point();
bi = null;
this.setOpaque(false);
this.setDoubleBuffered(true);
this.addMouseListener(mea);
this.addMouseMotionListener(mea);
this.addComponentListener(rea);
this.setVisible(true);
}

        //マウスイベントの集約
public class MouseEventAction extends MouseAdapter {

public void mousePressed(MouseEvent e) {
if((e.getModifiersEx()&(inputButton))==inputButton){
start.setLocation(e.getPoint());
end.setLocation(e.getPoint());
new Thread(D2DrawEx.this).start();
}
}

public void mouseDragged(MouseEvent e) {
if((e.getModifiersEx()&(inputButton))==inputButton){
start.setLocation(end);
end.setLocation(e.getPoint());
new Thread(D2DrawEx.this).start();
move_flg=true;
}
}

}

        //描画時のバッファリング
public void update(Graphics g){
this.paint(g);
}

        //描画メソッド
public void paint(Graphics g){
if(bi==null){
bi = (BufferedImage)this.createImage(getWidth(), getHeight());
}
if(resize_flg){
Rectangle rc = D2DrawEx.this.getBounds();
if((rc.getWidth()>bi.getWidth())||(rc.getHeight()>bi.getHeight())){
BufferedImage bf=(BufferedImage) D2DrawEx.this.createImage(D2DrawEx.this.getWidth(),D2DrawEx.this.getHeight());
bf.getGraphics().drawImage(bi,0,0,D2DrawEx.this);
bi=bf;
}
resize_flg=false;
}
gbi=bi.createGraphics();
gbi.drawLine(end.x, end.y,start.x,start.y);
g.drawImage(bi, 0, 0, this);
}

//描画時マルチスレッド
public void run() {
while(!move_flg){
try {
this.repaint();
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
move_flg=false;
}

}

    //リサイズ例外
public class ResizeEventAction extends ComponentAdapter{
public void componentResized(ComponentEvent e) {
resize_flg=true;
D2Frame.this.getContentPane().repaint();
}
}
}

public class D2Paint {

public static void main(String[] args) {
new D2Frame();

}

}

テーマ : 日記
ジャンル : 日記

気になるのは物理演算

ほとんどの物理演算を含む3DエンジンってC,C++ばっかやね
Javaでやってみたいな、まぁJavaとまるっきり似た記述するC#でもいいけど

ってか、JavaとC#って無料でプログラムできるんだね
JavaはOracleからJavaSE落とせばいいし
C#は.NET Frameworks SDK 2.0が無料だからそれ落とせばいいよw
ただどちらもコマンドラインでコンパイルする羽目にはなるがね
私はめんどくさいのでEclipseちゃん!
そしてソフトウェア作るのに最適な言語でもあり、
他のPCで動かすにはJREや.NETのランタイムパッケージが必要だがんね

Javaはいちいちメモリ制御するから遅くなりそうな
イメージあるけど今はそんなんじゃないね
あのMinecraftかってJavaやねんで

物理演算難しいかな~
興味でてきたわ
モデリングを動かすのに、USBも連動させてマイコンも・・

というか3Dのおべんきょちょっとだけやろう
軽く動かせるようにするため、なるべく倍精度浮動小数点型は使いたくないな
ループ文も少なめにしたいしのぉ

できれば、流体力学、材料力学も利用したい

テーマ : 日記
ジャンル : 日記

また壁に

最近、プログラム能力を更に上げようと思って
Javaに熱していますが・・
いやぁ~ソフトが結構作りやすくて愛用してますね

スレッドの割り込みとイベントリスナーの複合化した
プログラムで壁にぶち当たりました
通常どっちも含めてプログラムするって・・
ゲームなら適用できそうだね

ゲームなら描画やモーションなどで常にマルチスレッドで
入力コマンドという割り込みを待っているのかしらね

これをイベントドリブン型っていうんだが
C言語系ならやりやすいけど、Javaは結構くせがあるのだ

くせを見破るのに時間がかかってしまった
色々な書き方を試したわ・・・

メモ
・スレッドの開始はループさせないこと。するなら新たなスレッドを定義する。
・排他的処理はsynchronized修飾子をつける。runにオーバーライドするのは意味ない
 メソッドを跨いで一時停止、再開するなら必要
・割り込みにはinterrputメソッドが一番有効
・イベントリスナーの用意されているメソッドは、ほぼスレッド処理になっている。waitやnotifyも使える
・本処理はスレッドで回して、割り込みがかかるまでループのイメージ。
 actionPerformedとかで発生したイベントはinterruptやnotifyを使う。その間本処理はスレッドであること
 本処理がsynchronizedならnotifyがいいかな~waitだけに適用できるし
 Thread.sleepを起こすことはできないから注意。その場合はinterrupt

Thread→一時停止:sleep     割り込み:interrput
synchronized→一時停止:wait 再開:notify
これらは一緒に交えない・・


使いこなせればすごく便利

テーマ : 日記
ジャンル : 日記

最近、またJavaをやり始めた

私はマイコンとか扱うので、C言語とかverilogに長けていたりするけど
Javaって似た記述するからやりやすいのよね

Javaのメソッド記述方法がC++と異なるかな
C++はスコープや名前空間つかうからの

ちなみにC++使えるマイコンはARM系のマイコンしかしらん・・
手続き型に加えオブジェクト指向を
兼ね備えたプログラムは最高(`・ω・´)

Javaは組み込み用のJava EEがあったかな
ソフトだとJava SEだねたぶん  (詳細はOracleみてくれ)
ちょっとした工作では使わない高機能マイコンならJavaで組み込みができる

それが、スマフォのアプリをプログラミングできちゃう原因ですね!


私はJavaのソフトに力を注いでるのだが・・主にSwing使ってますね
Javaのプログレスバー付きのスレッド同期に詰みかけたぜ・・・

Javaのマルチスレッドは別に難しくないのだが・・・
いや結構便利な機能
プログレスバーのほうが難癖あるからのぉ
進捗状況がなかなか表示されなくて詰みかけた

原因はモーダルダイアログだからすべてのスレッドを開始した後に
プログレスバーを描画しなければいけなかったとか(´・ω・`)ナンダヨソレ


というかJavaって同じクラス内なら基本参照渡しなのよね
C++ならProject::Method(int &a)みたいな記述しなきゃいけないのに!
C言語なんてFunction(int *a)だぜ・・


んじゃ、そろそろC#をはじめようか?
フリーコンパイラないかな~^^

テーマ : プログラミング
ジャンル : コンピュータ

ぶろぐかんりしゃ

SmartWoods
最近MoEは・・・
一休み

***** ひとこと *****

MoEの後継ともいわれる
Resonance gamez
完全スキルMMOが
気になるところ



********************


↓2016/3/26更新
My MoE









**********

NEWとらっくばっく
あーかいぶ
かてごりー
リンク
ぶろぐないけんさく
RSSふぃーど
おともだちになろ

この人とブロともになる