kazubotのブログ

日曜プログラミング、都市伝説、METALなどなど!

あなたの見ている景色は真実だろうか?

二つの側面

f:id:kazubot:20180714085143j:plain

この世界には、コントロールする側とコントロールされる側のふたつの側面があります。

この2つの側面により経済がまわり、もしかしたら生態系すらも創出されているのかもしれません。

 

ここでいうコントロールする側とは、支配者のことを指します。

 

例として、水や電気などの資源についてかんがえてみます。

水や電気はわれわれにとってライフラインです。この貴重な資源は、支配者たちによって押さえられており、彼らの財産源になっているわけです。

眠っていてもお金がはいってくる完全自動システム。

オセロで四つ角を押さえられているようなものですね。

 

彼らは、われわれが生きてく上での必須の資源を確保し、システム化することで経済をコントロールすることができます。

情報の洪水

f:id:kazubot:20180714085419j:plain

インターネットは、現代社会であたりまえとなり、重要なインフラとなりました。

これによりオンライン上の情報は日々更新され、すべての情報にアクセスすることは不可能なほどに拡大されています。


これらの情報の中には、真実、そして嘘の情報が混在し溢れかえっています。

それらを選別すること自体が難しくなっています。

さらに悪循環なのが、莫大な情報への自由度が増したことで、人類の情報に対する考察力が低下しています。

通常、人々は知識を得ると戦略的に行動できるようになります。
正しい情報を身に着け行動の幅が広がった人類は、支配者にとっては不都合です。

しかし、自分で選択してインプットされた情報が、あたかも真実であるかのように思いこんでいたとしたら?
しかも、その与えられた情報事態が何者かによって事前に用意されていたものだとしたら?


用意されたストーリー

f:id:kazubot:20180714085618j:plain

 知識を得て戦略的に行動する人間が、どのように歩んできたのかは歴史が証明しています。

これらをコントロールするため、支配者の計画に沿わせる為の道がひかれています。


このストーリーには、人類がある段階にきたときの計画が既に決まっています。


現代では、情報の洪水をお越し、そのなかに情報操作を紛れ込ませます。
そして、人類が情報へアクセスすることを逆手にとり操作し、それらのログを収集して利用します。
収集した情報は、支配者の従順なものへ渡され分析されるでしょう。


従順なものとは、人口知能です。
人工知能を育て、人類の思考や、パターンが割り出されます。そして、計画に沿った最適解をみつけます。

これによって、人類を盲目にすることが可能です。
われわれは、それが現実だと信じて疑わないでしょう。

 

 

 

BABYMETALと一緒にJAVAのお勉強

「新わかりやすいJava オブジェクト指向徹底解析」を読んでjavaを勉強しています。

新わかりやすいJava オブジェクト指向徹底解説

新わかりやすいJava オブジェクト指向徹底解説

 

 

 オブジェクト指向について、理解を深めたい思いで
ぼくなりの浅い知識でBABYMETALをjavaで表現してみようと思います。

なお、このプログラムは何の機能も持ち合わせません。


まずBABYMETALの設定を下記の通りとします。

  • 三姫 =  救世主(SaVior)
  • 神バンド = ギター、ベース、ドラムの神様
  • ツネ様 = 創造主

三姫と神バンドはBAYBYMETALを実態として表現するための要素として考えます。
そして、キツネ様がBABYMETALに曲を与え、BABYMETALをコントロールします。

それでは、三姫を表すクラスです。

         Savior.java

package Savior;

public class Savior {
final String name;
String Clothing;
Object sound;
Object action;
public Savior(String name, String clothing) {
//コンストラクタ
this.name = name;
this.Clothing = clothing;
}
public Object sing() {
//歌う
this.sound = null;
return sound;
}
public Object dance() {
//踊る
this.action = null;
return action;
}
public Object getClothing() {
return Clothing;
}
public void setClothing(String clothing) {
Clothing = clothing;
}
public Object getSound() {
return sound;
}
public void setSound(Object sound) {
this.sound = sound;
}
public Object getAction() {
return action;
}
public void setAction(Object action) {
this.action = action;
}
public String getName() {
return name;
}

 救世主クラスは、名前,衣装を引数としてインスタンスを生成します。

メソッドは、歌う、踊るです。(内容薄くて申し訳ありません!)

次に、神バンドクラスを作成してみます。
ギター、ベース、ドラムの神様クラスを作成します。
            GuiterGod.java

package
KamiBand;

public


class GuiterGod {
final String name;
Object sound;
final Object Guiter;

public GuiterGod(String name, Object Guiter) {
// コンストラクタ
this.name = name;
this.Guiter = Guiter;
}
public Object riff() {
// リフ
this.sound = null;


return sound;
}
public
Object
read()
{
// リード
this.sound = null;
return sound;
}
public
Object
headbang()
{
// ヘドバン
this.sound = null;
return sound;
}
public
Object
getSound()
{
return sound;
}
public
void
setSound(Object
sound) {
this.sound = sound;
}
public
String
getName()
{
return name;
}
}

 

  BassGod.java

package KamiBand;

public class BassGod {
final String name;
Object sound;
final Object bass;
public BassGod(String name,Object bass) {
//コンストラクタ
this.name = name;
this.bass = bass;
}
public Object riff() {
//リフ
this.sound = null;
return sound;
}
public Object read() {
//リード
this.sound = null;
return sound;
}
public Object headbang() {
//ヘドバン
this.sound = null;
return sound;
}
public Object getSound() {
return sound;
}
public void setSound(Object sound) {
this.sound = sound;
}
public String getName() {
return name;
}

}

 

  DrumGod.java

package KamiBand;

public class DrumGod {
final String name;
Object rizm;
Object sound;
Object funny;
final Object drum;
public DrumGod(String name,Object drum) {
//コンストラクタ
this.name = name;
this.drum = drum;
}
public Object fill() {
//フィル
this.rizm = null;
this.sound = this.rizm;
return sound;
}
public Object read() {
//リード
this.rizm = null;
this.sound = this.rizm;
return sound;
}
public Object backing() {
//バッキングリズム
this.rizm = null;
this.sound = this.rizm;
return sound;
}
public Object hengao() {
//変顔
this.funny = null;
return funny;
}
}

 神バンドクラスは、名前とギアを引数として受け取りインスタンスを生成します。

そして神演奏メソッドを持ちます。ドラムのみ隠れメソッドとして変顔を持ちます。

最後に創造主であるキツネ様クラスをメインクラスとして作成します。

 FoxGod.java

package Kitsunesama;

import java.util.ArrayList;
import java.util.List;

import KamiBand.BassGod;
import KamiBand.DrumGod;
import KamiBand.GuiterGod;
import Savior.Savior;

public class FoxGod {
static List<String> babymetal = new ArrayList<>();
static String song;

public static void main(String[] args) {
//キツネ様のおつげ
System.out.println("~キツネ様~");
String hime = Hime();
String kamiband = Kamiband();
babymetal.add(hime);
babymetal.add(kamiband);
System.out.println("BABYMETALが誕生した!");
song = "[BABYMETALDETH]";
babymetal.add(song);
System.out.println("キツネ様よりお告げ" + "\n" + babymetal.get(2));
//各種メソッド

}

public static String Hime() {
//メタル救世主の降臨
String name1 = "SU";
String name2 = "YUI";
String name3 = "MOA";

String clothing = "darkside";

Savior SU = new Savior(name1,clothing);
Savior YUI = new Savior(name2,clothing);
Savior MOA = new Savior(name3,clothing);

System.out.println("SUが降臨した!" + "\n" + "YUIが降臨した!" + "\n" + "MOAが降臨した!" + "\n");
String hime = "3人のMETAL救世主";
return hime;
}
public static String Kamiband() {
//神バンドの降臨
String gt1name = "大村";
String gt2name = "藤岡";
String guiter = "ESP";

GuiterGod GuiterGod1 = new GuiterGod(gt1name,guiter);//大神様降臨
GuiterGod GuiterGod2 = new GuiterGod(gt2name,guiter);//小神様降臨

String bassname = "BOH";
String bass = "不明";

BassGod BassGod = new BassGod(bassname,bass);//BOHさん降臨

String drumname = "青山";
String drum = "TAMA";

DrumGod DrumGod = new DrumGod(drumname,drum);//青山さん降臨

System.out.println("神バンドが降臨した!" + "\n");
String kamiband = "神バンド";
return kamiband;
}
}

 キツネ様が創造主であるので、姫達を降臨させるメソッドと神バンドを降臨させるメソッドを持ちます。それらの力を用いてBABYMETALを誕生させます。

そして曲目をBABYMETALに与えることで命を吹き込みます。

これを実行するとコンソールに下記のように表示されます。

~キツネ様
SUが降臨した!
YUIが降臨した!
MOAが降臨した!

神バンドが降臨した!

BABYMETALが誕生した!
ツネ様よりお告げ
[BABYMETALDETH]

 
お分かりになったでしょうか?
そう。。
なんの意味も持ちません!
型宣言も適当です!
オブジェクト指向ということを意識して書いてみただけです。

もっと拡張すれば、カプセル化に拘ってみたり、救世主クラスを継承して三姫個々のメソッドを定義したりということも考えることができますね。

専門の方々からはいろいろ指摘があろうかと思いますが、大きな目でみてやって下さい!

 

MetalMasterもびっくり!KARATEのリフ

BABYMETALKARATEについて、ぼくなりの視点でたまらない部分を伝えたいと思います。


BABYMETAL - KARATE (OFFICIAL)


イントロ


先ずこのイントロのうねりです。
ミドルテンポならではのタメがドラム、ベースそしてギターと融合して重いリフとなりメタルの血を煽ります。実際の空手の構えの部分です。
ぼくには、伝説の空手家がオーラをビンビンにはなって構えてる姿が想像できます。

Aメロ手前

そして、YUIMOA
「セイヤッ!セッセッセッ!セイヤッ!!」

「ソイヤッ!ソッソッソッ!ソイヤッ!!」
によって曲の攻撃性が高まります。

実は、ぼくのツボはここのバックの演奏です。

 メタルの定石ですが
バスドラとベース、そしてギターのミュート音のシンクロによる地鳴りのようなリフ

ここがもう堪らないのです!頭振らずして何を振る!?

シンプルで無駄がなく効果絶大であるため、メタルのあらゆる曲で多用されます。
ぼくの中のKARATEの山場は、ここです。

Aメロ


そしてSUちゃんの透き通るメロディーが入ってきて、曲調は一気に神秘的になります。
この抑揚がサビへの伏線となり、この曲にとってとても効果的に役割を果たしています。


サビ


「ひたすらっ!セイヤソイヤ~戦うんだ!」
こんな歌詞聞いたこともない(良い意味で!)
KARATEのライブでは、小神様がバックでアルペジオを弾いています。
これがライブでは全面に出ていて、SUちゃんの声と絶妙に絡み合っています。


そして最大の山場の訪れ


サビが終わりイントロから、YUIMOAの歌が入ります。


ここです!!

 

そう!!先ほどのメタルの定石リフです。

しかーし!!
1番とはリズムが違うんです。

この捻ったリズム!その中に織り交ぜられるギターのスライドアウト
作った方の少し変態加減が伺えます(褒め言葉です)
ぼくはこういった、つっかかりそうなリズムと少し変わったリズム加減が大好物です。

恐らくぼくをこんな体にしたのは、Meshuggah様でしょう。
お陰様で、もうお嫁にいけない体になってしまいました。。。

Mshuggahフレドリックは超変態です!その世界の教祖様です。


Fredrik Thordendal (Meshuggah) - Sol Niger Within - Medley


よってぼくは、アレッ!て思う部分がでてくると心躍ってしまうんです。
普通のリズムでは物足りなさを感じてしまうぼくは、KARATEにおいてここが頂点となります。
ここの部分を何回もリピートして聴いてしまいます。

この気持ち。。

そこのあなたならわかってくれるでしょう!


最後に

 

2016年のDownloadの際のKARATEです。


BABYMETAL-KARATE (live UK Download 2016)

 

 これ何回見てもウルっときます。
他国の猛者たちを虜にしています。
階上が一体となってる雰囲気が映像から伝わり、誇らしい気持ちと神々しいパフォーマンスに気持ちが持って行かれます。
BABYMETAL最高!!


人類の思考停止そしてマインドコントロールされた人々

この記事は、かなりあっち系の話です。

こんな見方もあるかもなって思ってもらえたらうれしいです。 

 

それでは本題にはいります。

 

今やスマートフォン、そしてクラウドサービスなどが、ぼくらにとってなくてはならない存在となっています。水や電気、ガソリンなどの資源と同じように、突然無くなったら世界中がパニックになるでしょう。

f:id:kazubot:20180706114803j:plain

 その手に持っている端末ひとつで、瞬時に他者と間接的に繋がることができ、情報も得ることが可能です。そして、あらゆるデータを保存してアップロードします。

人々はこれが当たり前となりほとんどの人が違和感など抱きません。

はたして単純に人類の技術進歩による賜物なのなのでしょうか

 

 しかし、確実なのはわれわれの情報に対する価値というものが変わってきています。一昔前では有料であったり一部の人しか得られなかった貴重な情報や論文などがオンライン上に溢れかえっており、オンラインの端末があれば簡単に情報が得られます。
これによって、多くの情報の中からわれわれは選択だけすれば良くなり、その情報がもつ本来の価値や意味についての感覚が薄れてきています。

すなわち思考する能力が低下しているのです。


次の画像をご覧ください。

f:id:kazubot:20180706140100j:plain

どのように感じましたか?

多くの方は清潔で解放感に溢れ、いい部屋だと感じたのではないでしょうか。

 

ここはノルウェーの刑務所です。

 

これはひとつの例ですが、われわれはある物事について判断するときに過去の経験や既存の知識を用いて判断します。

今まで生きたなかで学んだことや、経験したことが潜在意識の多くを形成しています。

 

先程の刑務所の画像についても、先入観によって言われるまではわからないのです。

というよりも、固定概念によって思い込んでしまうと言ったほうが正しいかもしれません。

 

ぼくが言いたいことは、

今見ている景色は、果たして本当の姿なのだろうかということです。

知らず知らずの内に、本来の景色をあたかも現実であるかのように思い込んでいるのかもしれません。

 

もしも世界を支配する人々がいたとしましょう。

 

現在の思考力が低下した人々は、彼らにとって操作することは簡単でしょう。

彼らのストーリーに沿うように生かされているとも考えられます。

 

 われわれが見ている景色や物事のうらには、真理が隠れているのかもしれまん。

 

 

 

 

 

 

メタル史上最高はBABYMETAL!

みなさん漫画のCROWSを読んでましたか?

不良少年たちの熱い物語ですが、数々の心に響くかっこいい男達の名言があります。
ぼくの好きなセリフは、ゼットンが言った言葉で

最強より最高の男になるべし!
仲間を愛し 仲間から愛される最高の男になるのだぁ!

 どうでしょう!


最強より最高!


良い言葉です
どちらも広意ですが、ここで最強というのはある種の専門分野での話です。

しかし、最高はもっと広意での高みにいるということだとぼくは解釈します。

さて、本題ですが、METAL界最高について決着をつけたいと思います!
批判はたくさんあるかと思います。

タイトルが既にぼくの答えです。

この答えに至る前にぼくのメタル遍歴を少しだけ。

メタルとの出会いは中学のときです。ジャケ買いしたMegadethです。

 

Youthanasia

Youthanasia

 

 

正直なところ最初は受け付けられませんでした。
その後Mr.BiGなどのハードロック、そしてパンク、ハードコアと進化していき高校卒業の頃にはメタルにどっぷりつかっていました。
すきなのは、meshuggah、killswitdh Engage, lamb of god,Soilwork,In Framesなどなどです。
社会人になってもメタルバンドでギターを弾きヘドバンです。

とあるバンドメンバーとの飲み会
メンバーのひとりが
「BABYMETALってすげーかっこいいよ!」
と騒ぎ出した。
名前は知っていたが、アイドル系のなにか?程度の認識でいたぼくは、
「アニメ系のアイドルみたいなもんだろ?」
と言った。
そこでメンバーは、
まぁ先ずはこれを聴け!と言わんばかりにスマホyoutubeを見せてくれた。


BABYMETAL - ギミチョコ!!- Gimme chocolate!! (OFFICIAL)

聴いた瞬間ぼくの中のメタルの血がうずきだすのを感じた!
何とも言えない可愛さとバックに流れるゴリゴリメタル音

「やべーかっこいい。。。」

こんなこと言ってはいけないけども、ぼくは可愛らしさを売りにしているグループやバンドが大っ嫌い!である。だからBABYMETALも同じだと思っていた。
心の奥底で「ぼくはロリコンじゃない!」と連呼している。
ぼくの中の水と油は混ざらないはずだ!
本来真逆の立場にいるはずの両者がマブダチになるはずがない!

しかし、その日聴いた衝撃が忘れられず
帰って夜な夜なYouTubeBAYBYMETALの動画を漁りました。
見終わったころには、ぼくはBABYMETALのファンです。
そう!ウキウキミッドナイトです。

このように瞬殺されたぼくは、分析をしました。
何故こんなに惹かれるものがあるんだろうと?

バンドでギターを弾いていた人間として、やはり楽曲のサウンドが素晴らしい。
メタル好きといっても多くのジャンルが細分化しています。
スウェーデン系、ジャーマン系、デス系、変態系(犯罪の方ではない)などそれぞれの好みや特徴があります。BABYMETALはそれら良い要素をうまくブレンドしています。
だから多くのMETALファンは虜になってしまいます。

そして特筆すべきはライブパフォーマンスです。
メタル好きは、下手くそなバンドは決して認めません。
テクニカルで重く鋼鉄な音でないとメタルの血はうずかないのです。
三姫達の後ろで演奏している神様たちは、超絶です。
いや!!!

悶絶です!

各分野でトッププレイヤーである神様たちが集まっています。

しかし、これだけではまだ他バンドと大差は生まれません。

その演奏にのっかってくるSUちゃんのボーカル。
歌声は綺麗で透き通っているにも関わらず、ゴリゴリメタルな音圧に埋もれません。
それを感じさせないほど芯がとおる歌声です。
さらにYUIMOAの歌とキレキレダンスがプラスされます。

さらにさらに!
そこへぼくの混ざってはいけない、可愛さプラスされます。(そこ足っしゃう?!みたいな)

そして。

BABYMETALという最高のバンドが完成されます。

反則ばりにかっこよくってかわいらしい!


聴かないで毛嫌いしてる人は食わず嫌いでしょう。

まず聴いて感じてほしい。
そして何か引っかかるものがあってもそれを受け入れてほしい。

是非ライブを体感してほしいと願います。

そうすれば、気が付けばあなたも立派なメタラーになってるでしょう。


 

Python vs Java(超個人的な比較)

記事内容

この記事は、ぼくの浅いプログラミング知識で、javapythonについて比較した個人的な感想です。以下の構成でお届けします。

  • 言語の特徴
  • 処理能力
  • 汎用性
  • 難易度(学習コスト)
  • 総評

言語の特徴

python

f:id:kazubot:20180702062118p:plain

ここ最近、ディープラーニング機械学習といった言葉をよく耳にするのではないでしょうか。GoogleのDeepMind社が開発したAlphaGoが囲碁のトップ棋士と勝負して好成績を収めたニュースが話題になりました。pythonではこのDeepMind社が開発したTensorFlowなど数多くのライブラリを無償で使用することができます。

科学計算の分野では、MATLABが有名ですが近年では、pythonがそれを超えるような存在になっています。
NumpyやSciPy,pandasなど便利なライブラリやツール群が整備されていることが人気の理由のひとつと考えます。言語の設計は非常にスマートで、簡潔で理解し易いものです。これは、開発における生産性を高めるうえで大きなメリットとなります。

  このようにpythonは、ビッグデータ解析やディープラーニングスクレイピング・クローリングなど豊富なライブラリを使うことで柔軟なプログラムが書けます。

java

f:id:kazubot:20180702062229p:plain

みなさんが業務で使うシステムやAndroidアプリなどの多くはjavaでプログラムすることができます。web製作やゲーム、大規模システムなど用途に縛られません。人気の高い言語ですから、外部ライブラリも充実しています。

また、実行にはコンパイルを必要とするため、スクリプト型言語より処理速度が高速です。

もうひとつ大きな特徴として、プラットホームに依存しません。AndroidOSXwindowsなどの環境で動作するプログラムが作成できます。これが、人気の要因として大きいのではないでしょうか。

 

処理能力

様々な言語の処理能力については、たくさんの議論が行われています。一般的にはスクリプト型言語よりコンパイル型言語の方が処理は高速であるとされています。記述言語をコンピューターが実行できるようにするためには、機械語に変換する必要があります。処理の速さはこの仕組みがどうであるかに依存します。

それでは、どれくらい違うのでしょうか?

テストとして適切かわかりませんが単純な計算処理で比較してみます。

Pyhon

import numpy as np
import time

def calctest2():
start = time.time()
for i in range(1000000):
ans = i * i ** 2 - i
result = np.tan(ans)
elapsed_time = (time.time() - start) * 1000
print("result:{}" .format(result))
print("elapsed_time:{0}".format(elapsed_time) + "[ms]")

出力結果

result:-0.19688668049725247
elapsed_time:1129.000186920166[ms]

Java

public class main {

public static void main(String[] args) {
double ans = 0;
double result = 0;
long start = System.currentTimeMillis();

for(int i =0; i < 1000000; i++) {
ans= i * Math.pow(i, 2) - i;
result = Math.tan(ans);
}
long end = System.currentTimeMillis();
System.out.println("result:" + result);
System.out.println("elapsed_time:" + (end - start) + "[ms]");
}

 出力結果

result:-0.19688668049725247
elapsed_time:461[ms]

 計算部分の処理時間を計測した結果、javaの方が約2.5倍速い結果となりました。なお、for文内にprint文を挟むとpython6341[ms]、java5876[ms]で大きな差はでませんでした。

当たり前ですが、どちらも使う標準APIや外部ライブラリなどが処理能力に影響を与えます。ここでは検証しませんが、pythonではnumdaを利用するこでさらに高速化を図ることも可能だそうです。これらの事から通常の計算能力だけみた場合には、コンパイル型言語の方が速い結果となります。しかしアプリケーションで見た場合には使う言語によって適切な設計がなされていれば能力はあまり関係ないのではないでしょうか。

 

汎用性

pythonで多く作られているものはWebサービスです。代表的なものでは「DropBox」、Instagram」があげられます。また、デスクトップアプリケーションから組み込み系まで幅広く活用される言語です。近年ビッグデータ解析や機械学習といった分野においてもpythonが注目を集めています。このことから、将来性の高い言語です。ライブラリが豊富に整備されているため、ほとんどのことはプログラムできるでしょう。

 次にjavaについてです。目にするほとんどのプログラムはjavaでプログラム可能です。オブジェクト指向プログラミングによって堅牢で安全な設計ができ、保守管理に優れたプログラムが作成できます。このため、大規模システムなどでもjavaが活躍しています。汎用性で特筆すべきはプラットホームに依存しないことです。javajvm(java仮想環境)がある環境下であればプラットホーム問わずに動作します。これによって利用ステージは他の言語に比べ格段に広いといえます。このことが、いまだ言語別人気ランキングの上位にjavaが君臨する要因と考えます。

 

難易度

ぼくは、基本的に勉強するときは書籍を買い漁ります。先ず通読してなんとなくの内容を把握する程度で、あとは実際書いている時に辞書として使う方法で勉強しています。

日曜プログラマーなので、週末こつこつ時間をつくっては書いています。

 ぼくは、pythonが初めての言語でした。文法基礎を理解するのに二ヶ月、そこからnumpyなどの数値計算方法からmatplotlibのチャート、そしてguiwxpythonまでやり、ひとつguiプログラムが作れるようになるまでプラス二ヶ月くらいです。

 最初はclassの使い方や数値のやりとりもよくわからず、よく寄り道YouTubeしていました。

今やGoogle先生に聞けば大抵の事はでてきます。英語サイトも見る必要がでてきますが、理解するというより、感じろ!です。言語は世界共通です。

  次に言語仕様についてぼくの率直な感想は、pythonは読みやすく理解しやすい、一方javaは厳密で初めて学ぶにはとっつきにくいという印象です。

同じものを作るにしてもpythonは記述量が少なく短期にプログラムが作成できます。

例えばjavaでは変数やインスタンスの型宣言が重要です。これによって確実なインスタンスを保つことができます。

しかし、pythonでは型宣言はなく、代入したものを内部判定して情報を保持します。これによって書きやすい反面、大規模である場合しっかり定義しておく必要があります。

このように、javaは決まり事が多いためぼくのようにpythonからjavaへとたどった人間としては、慣れるのに時間がかかりました。

ただ、プログラミングの基本的流れを理解してしまえばどの言語においても書き方の問題だけじゃないかなと思います。

 もし知人がプログラミングに興味あってやってみたいとのことであれば、ぼくはpythonをおススメします。

 

総評 

  ぼくは仕事上において設計時に使用する計算プログラムを作ることが多いです。
その観点でみると、数学的な計算処理を書く場合、pythonはとても優れていて直感的に書けます。特にnumpyとmatplotlib,pandasは優秀で手放せません。結果をファイル出力する場合においても、多くのライブラリのおかげで選択の幅が広がります。javaを始めたとき、とくにこの辺のギャップを感じました。
javaにも数学系やチャート関係の外部ライブラリはあるらしいのですが、よくわかりません。便利なライブラリがあればどなたか教えて下さい!
 みなさん自分が頑張って組んだプログラムを共有したい場合には、GUIをもったプログラムにして配布したいって思いませんか?

まぁ用途によりますが。。

pythonではguiwxpythonで作っていましたが、計算ロジックの部分よりguiをプログラムする方が時間がかかっていました。他にもQtなどもありますがライセンスの関係で使っていません。javaではjavaFXが標準としてあります。見た目も綺麗で、builderと併せると効率よく書けます。また、FXMLというファイルにGUI記述部分とコントロール部分を分離できるのでスッキリしたプログラムとなります。

 つぎに、配布用アプリの書出しについて少し書きたいと思います。pythonのプログラムでguiでグラフなんかも表示する機能のプログラムを書きだす場合、pyinstallerを使用していました。書き出したファイルサイズは数百メガになります。実行速度も遅い印象です。

ぼくの場合これがjavaをやってみようと思うきっかけでした。同じようなプログラムを出力した場合javaでは10メガ以下です。動作も高速です。
以上のように現状は、ぼくのなかで計算ライブラリ以外はjavaに軍配があがります。コード量を差し引いてもjavaです。ただ、pythonの開発速度にはかなわないでしょう。

どちらも、使う用途によるといえばそれまでですが、ぼくの場合は、

  • 実行速度
  • Gui
  • 汎用性

の3要素が重要だったということです。

 

読んでくれたみなさま、ありがとうございます!

javafxで水理計算プログラム

梅雨があけましたね!

 

暑い夏はひきこもってプログラミングだ!

 ということで!まずはじめにお断りしておきます。

この記事はjava歴2ヶ月の日曜プログラマーが書いてます。

 Qiita並みの情報は皆無です。たぶん

ぼくは、Pythonを1年程趣味でプログラミングしていました。

  • 有限要素法による構造計算
  • 水理計算プログラム
  • 点群断面計算
  • 点群座標変換
  • T型擁壁構造計算
  • etc…

これをみて、ぼくの職業は大体察しがつくでしょう。

 

業務上こんなソフトがほしいと思ったものを作っています。プロじゃありませんが、情熱をもってつくってます。

 

 現在は、pythonもたまにやりつつjavaを猛勉強中です!

はやく習得するため、pythonで作ったものをjavaで書き直そうと思い、第一段として水理計算プログラムをチョイスしました。

 

先ずこのプログラムの概要を紹介します。

ある対象地に降る雨水に対して、浸透施設を設置します。この処理能力について施設評価することを目的としたプログラムです。

その他に付加する主な機能はこんな感じです。

  1. 長野県の降雨強度式に対応させる。
  2. Userが手動で降雨量を入力できる。
  3. Guiプログム
  4. UserデータlO処理
  5. 施設検討グラフツール
  6. 帳票出力

 

Pythonでは、2 and 5の機能はありません。また、帳票出力については予めテンプレートTeXを書いておき、それをpythonで読み込み文字列処理、そしてバッチファイルでコンパイルという形をとっていました。

みなさんこういった帳票についてどうしてるのかな?

余談ですが、はじめはsphinxを使ってましたが細かな修正ができないこと、帳票としての見た目、そしてバッチ処理がいまいちわからなかったというのがあります。(pythonプロンプト)

現在はめぐりにめぐって見た目も美しいtexを使ってます。

しかし、texも環境がないところへ持っていったときにはコンパイルできません。

そのため何かいい方法がないものかと、リサーチしてる中で、Javaではjasper reportがよさそうでした。

したがってこのプログラムの帳票候補にします。

 

次に計算ロジックに使う引数です。

List<Double> A;//流域面積

List<Double> f;//流出係数

double rain;//降雨量(手動入力)

String tiiki;//長野県(地域区分)

String kakuritu;//長野県(降雨確率年)

int time;//流達時間

double ko;//飽和透水係数

String type;//施設type

 

 計算ロジックはこれだけの条件でまわります。

ぶっちゃけエクセルでも簡単に作れます。

 恐らくオフィス系ライブラリを使えば帳票も作成できるでしょう。

 

では、わざわざ時間をかけて何故javaで作るのだ?!って思うひともいるでしょう。

 

確かにエクセル使える人は、おじさん達に好かれ重宝されます。仕事の仕様もオフィス系のものがほとんどです。

しかし、エレガントじゃあない!!

 意味わかりませんかぁ?

 

 ぼくもわかりません。
なんというか、何かひっかかるものがあります。

使ってはいけない!という心の奥底できこえるのです!


まぁわかる人にはわかるはず!

そんなこんなで(どんなだ!)
pythonで作ったものを、よりかっこよく!
より機能性をもったプログラムで生まれ変わらせるため日々楽しんで書いてます。
現状グラフツールと帳票が未実装です。
そのほかはエラー処理以外見通しがたってきました。

またの機会に断片的に紹介したいと考えてます。

 まだまだ、未熟者だけどpythonjavaも素晴らしい言語です。