Takunojiのプログラミング・プレイグラウンド(遊び場)

Javaプログラミングを基本にして、ゲーム作成に必要なことの調査結果、やったら面白そうなことなどを記載します。プログラミングのススメ的なことも記載します。プログラミングで楽しく遊ぶために色々と記載して行きます。

javadb Derby インストール

javaDB⇒「Derby」のインストール手順
1.アパッチのサイトにアクセスして derbyをダウンロードします。
   Apache Derby    Downloadページ

2.JAVA_HOMEを設定して、パスを通す
Windowsの場合は"$VAL"を"%VAL%"に読み替えてください

・~/.bash_profileに JAVA_HOME=jdkへのパス と記載する
・同様にPATH = $JAVA_HOME/bin:$PATH  と記載する

3.ダウンロードしたderby-binに環境変数を設定:derbyは使用しやすい場所に配置
 ※JDKの中に入っているのでそちらでも良い(JAVA_HOME/db/lib/derby.jar)
>sudo vi(vim) ~/.bash_profile
   DERBY_HOME = ダウンロードしたderbyのフォルダへのパス/bin

   CLASSPATH=$SERBY_INSTALL/lib/derby.jar:$DERBY_INSTALL/lib/derby-tools.jar

>source ~/.bash_profile →これでPATHを反映する

3.DERBYをインストールした場所に移動してセットアップバッチ(シェル)を叩く

>cd $DERBY_INSTALL /bin
>. setEmbeddedCP


4.インストール確認にDerby情報を出力する
java org.apache.derby.tools.sysinfo

f:id:Takunoji:20170304123607p:plain

以上で、セットアップ完了です。

C++ PostgreSQL library インストール

参考にしたページは以下になります

www.tutorialspoint.com


このページ
よりダウンロードしたいファイルを選ぶ

以下のコマンドでインストールする

wget http://pqxx.org/download/software/libpqxx/libpqxx-4.0.tar.gz
tar xvfz libpqxx-4.0.tar.gz
cd libpqxx-4.0
./configure
make
make install

libpqxx-」の後ろにバージョンが示されています

f:id:Takunoji:20170302215104p:plain

wget http://pqxx.org/download/software/libpqxx/libpqxx-2.5.5.tar.gz

一番上のファイルをダウンロードするコマンドになります。

例えばターミナルを開いて、カレントディレクトリ→「pwd」コマンドで表示されます

ターミナルで現在開いているディレクトリ=カレントディレクトリになります。
引き続き「tarコマンド」x, v, f, zと4つのオプションをつけて実行します。(実行結果)

f:id:Takunoji:20170302220557p:plain

tarファイルを解凍するコマンドになります。
カレントディレクトリに解凍されます。


 

 

mac wgetコマンド インストール方法

はじめに、「brewコマンド」がMacにインストールされていませんでした。
その代わり、「rubyコマンド」はインストールされていましたので
ruby -help」とターミナルにコマンドを入力してやるとインストールされていれば下記の様に画面に出力されます。

f:id:Takunoji:20170302212715p:plain
rubyコマンドが使用できるのであれば、以下の様にコマンドを入力(コピペ可能)

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

実行結果

f:id:Takunoji:20170302213146p:plain
※上記の部分で「Enter」キー以外を押下すると処理が止まります。

f:id:Takunoji:20170302213725p:plain
上の様な表示が出力されていればインストール成功

では目的の「wget」をインストールします。

brew install wget

確認のため「wget -h」でヘルプが表示されていればインストール完了

仕事と勉強

社会人になると勉強する時間がなかなか取れませんのでひと工夫必要になります

<アプローチの工夫>

ボトムアップでなくアップダウンでやる

目的の作業を行う為に必要な知識を学ぶ

 今回の汎用画面APであればリソース管理、DBアクセス、UMLが対象になる

<普段の工夫>

生活のリズムを作る

1.家を出る⇒電車内で勉強

2.退社⇒電車

3.筋トレ⇒夕食

4.風呂上がり⇒ビール片手に本を読む

5.日記⇒就寝

<ポイント>

毎日必ず、5〜10分で良いのでやる

週に一度は休む

<動機の工夫>

 やる事で小遣い稼ぎになる

⇒イベントを企画、フリマ向けの商品作り、アフィリエイト(やった事を書き続ける)、副業のアイデアを練る...etc

 

 

javaとc++ のクラス実装比較

ここで、少し休憩がてらに作成した

javaのHumanクラスとc++ のHumanクラスを比較して見たいと思います。

<java>

f:id:Takunoji:20170301190001p:plain

f:id:Takunoji:20170301190020p:plain

Javaではコンストラクタ、フィールドメソッドと定義して実行
特に、メモリとかオブジェクトのインスタンスを気にしないで作れます
<c++ >

f:id:Takunoji:20170301190038p:plain

f:id:Takunoji:20170301190150p:plain

値の返却方法、ポインタなどインスタンスからオブジェクトの振る舞いなどを考慮に入れて作成しました。

Javaではoperator演算子のオーバーライドができません。


そして、名前空間の定義方法も違います

javaの場合はパッケージとディレクトリ構成が同じにならないとエラーになる

c++ の場合は別になっている

 

結論的に、c++ の方が複雑⇒自由度が高い javaは細かいところは気にせず実装出来る…
そんな印象を受けました。
フレームワークなどはオープンソースでたくさん手に入るJavaに軍配が上がりました。
JavaでもC++の様にリソース(インスタンス、オブジェクトなど)を考慮に入れた実装を心がけないといけないなぁ...と反省しました。
次回からはQtを使用して「汎用画面AP」の実装に着手したいと思います。

 

operator演算子2 "+="の実装

前回学んだ「operator演算子」には「++, --」以外にも「=, !=, +, -, <, >」など使用可能
ただし倫理演算子(&&, || など倫理演算を行う)は使用しない方が良いらしい原因は
「組み込み倫理演算子とクラス型の倫理演算子は一致させることができない」から...
と参考にしている本に書いてありました。

時間の都合で、「フレンド関数」まで届かなかったのでoperator演算子2をやります

<実装>

f:id:Takunoji:20170228212933p:plainhuman += 10と処理を記述可能になる
<Mainクラス>

f:id:Takunoji:20170228213019p:plain
ヘッダーファイルには

Human& Human::operator +=(int year);

の様に定義しいる、あくまで「参照を返却する」のでその様に実装してやらないと
ハマる、コンパイルエラーが残っていたりして時間がかかってしまった。
本当は、フレンド関数まで記載したかったが届かなかった。。。
次は、休憩してJavaC++で作成したHumanクラスの比較を行います。

takunoji.hatenablog.com

operator演算子の使い方

前回の「C++による、コンストラクタの種類」に引き続き、
オペレーター演算子の使い方を学びます。

operator演算子は下記の様な実装を可能にする演算子です。
「++, --』を使用可能にする。下のは++を実装可能にした形です。

f:id:Takunoji:20170227205851p:plain「Human human('z');」 ○「++human;」×「human++;」

f:id:Takunoji:20170227210404p:plainあと起き演算子は未定義でエラー

後置きの演算子を定義

f:id:Takunoji:20170227211851p:plain human++;のヘッダーファイル定義

f:id:Takunoji:20170227211934p:plain同様にソースファイルへの定義
実行結果

f:id:Takunoji:20170227212032p:plain前置き(after1)と後置き(after)の出力結果

<詰まったところ>
前置きと後置きの違いはインクリメント(演算)を行った後に「this」参照を返却するのと
演算後に「this」本体を返却するという違いがあった。ので式の内容も違う。
ここになかなか気づかなかった。。。

次回は、「フレンド関数  続operator演算子」について学習します。

C++による、コンストラクタの種類

前回のC++実装に引き続き、C++の勉強を続けます。
C++によるコンストラクタには以下の様な種類がありました。

・デフォルトコンストラクタ:Javaでのデフォルトコンストラクタと同義
・変換コンストラクタ:コンストラクタに引数を渡し初期値を設定します。
1. void クラス名::クラス名(引数...) (int num, char* ch)など...
2.変換コンストラクタ(前回のソースの引数ありの部分)

f:id:Takunoji:20170226210524p:plain単一の引数nameを初期化する

呼び出し方は、 Human human('z') の様になります。
そして次の様にも呼び出せます。Human human = 'z';

f:id:Takunoji:20170226212124p:plain

※これは知りませんでした。。。

そして「operator」演算子!!変換関数と呼ばれるものがあります。

f:id:Takunoji:20170226214852p:plain

実際の処理では、ここで年齢をします「age」ではなく他の値でも良い
他のロジックを、アルゴリズムを作成する可能性を持っていると思います。
次回は、「operator演算子」について学ぼうと思います。

C++でのクラス作成方法

前回、色々とやってみたもののC++での実装ができなかったので勉強しました(笑)
まずはできたソースコード一式をみてください。

<ディレクトリ構成>
Java : 「prac.java = Mainクラス, prac.java.base =Humanクラス」
C++  : 「階層なし」だけど
名前空間は「prac::clang = Mainクラス ,prac::clang = Humanクラス」

f:id:Takunoji:20170225201328p:plainすべてのファイルを同じディレクトリに配置(名前空間も指定)

f:id:Takunoji:20170225202141p:plainフィールドが一つだけ
起動結果↓

f:id:Takunoji:20170225202537p:plainHumanクラスのhello()を呼び出す
Javaとの実装の違いが結構あります。フィールドの数が違う(Stringがcharに...)
  名前空間の解決に至るまで時間がかかりました。。。

<わかったこと>
javaでの考え方に名前空間はありますが、パッケージングとディレクトリ構成がセットになっています。
なのでC++での実装はソースファイルが同じディレクトリにあるのに名前空間の設定が成立しています。
Javaの場合はeclipse上だと分かりづらいですが、パッケージと同じディレクトリ構成が出来上がっています。

なのでC++の実装もそんな風にディレクトリ構成を変えてみました。

f:id:Takunoji:20170225204305p:plainprac::clang(/prac/clang/Cmain.cpp), prac::clang::Human.cpp
因みにC++ではヘッダファイル(*.h)とソースファイル(*.cpp)に分けて作成します。
<ヘッダーファイル>

f:id:Takunoji:20170225204618p:plain
<ソースファイル>

f:id:Takunoji:20170225204706p:plain

<作成物のクラス図>

f:id:Takunoji:20170225215430p:plain

<作成するのについまずいた所>
やった事「プロジェクト作成をして何もわからないうちにパッケージ切ったら...」

symbol not found for architecture x86 64」エラーでつまづく

解決策→プロジェクトを始めから作り直した

原因と思しき...
 1.プロジェクトに「src/」フォルダがなかった
 2.名前空間の指定が不適切だった
 3.ヘッダファイルで名前空間を指定する→ソースファイルにも名前空間を指定する

Javaではヘッダーファイルがないので「なんか似た様なこと書くのだるいんだけど..」
となりがちですが、設計性に秀でた実装方法だと思います。
「どこが?」と思う人もいるかもしれませんが
次回自分なりの実装になりますが検証してみようと思います。

は、引き続きC++の勉強を続けようと思います。

takunoji.hatenablog.com

 

関連ページ

Eclipse セットアップ

  1. Java Install Eclipse〜開発ツールのインストール〜
  2. TensorFlow C++環境〜EclipseCDTをインストール〜
  3. Setup OpenGL with JavaJOGLを使う準備 for Eclipse
  4. Eclipse Meven 開発手順〜プロジェクトの作成〜
  5. Java OpenCV 環境セットアップ(on Mac)
  6. Eclipse SceneBuilderを追加する
  7. JavaFX SceneBuilder EclipseSceneBuilder連携~

 

C++でのHello World 〜EclipseでのC++実装その1〜

今回は、C++でのハローワールドを実装します。使用するIDEEclipseです。EclipseにC++プラグインを突っ込みます。

Eclipseインストール

Windows版のEclipseインストール方法> 

Eclipseのインストールとセットアップ

 

前回はUMLの作成をして各クラスの関連を示しました。
今度は、「DbアクセスInterface」から先のDBアクセスに関して
動的に処理を行いたいのでオブジェクト指向プログラミングの「ポリモーフィズム」を使用したい→筆者はC++でのプログラムが書けませんので勉強します

ところで....
汎用画面APは、クロスプラットホームで起動する想定ですので(詳細は仕様を参照)

実装に使用するプログラム言語として「C++」と「Java」を候補にあげますが
自分自身がJavaの経験があるので「C++」を主軸にして話を進めようと思います。

まずは基本C++でのオブジェクト指向実装の方法を検証します。
基準は「Java」言語でのプログラムで各種フレームワークも参考にします。

初めは、やっぱりC++でもJavaでもHello Worldでしょう(笑)

<Javaバージョン(Humanクラス使用)>

f:id:Takunoji:20170224213830p:plainf:id:Takunoji:20170224214211p:plain

f:id:Takunoji:20170224214232p:plain

<C++バージョン(Humanクラス使用)>

名前空間の使い方がわからなかったため次回記載いたします。失敬(笑)

C++でのクラス作成方法 - Takunojiの日記