OracleデータベースにJavaからアクセスすることを考える。JDBCを使う。
http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-112010-090769.html へアクセスし、ojdbc6.jarをダウンロードする
import java.sql.*;
public class jdbctestApp{
public static void main(String[] args) {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE", "ユーザ名", "パスワード");
con.close();
System.out.println("Success JDBC");
} catch (Exception e) {
e.printStackTrace();
}
}
}
C:\>javac jdbctestApp.java
C:\>set CLASSPATH=.;C:\dev\ojdbc6.jar
C:\>java jdbctestApp
C:\>javac jdbctestApp.java
C:\>java -classpath .;C:\dev\ojdbc6.jar jdbctestApp
C:\Program Files\Java\jre8\lib\ext\ojdbc6.jar という具合にobjdbc6.jarを配置する。
http://blog.livedoor.jp/eitake0002/archives/34100490.html
http://itref.fc2web.com/java/jdbc.html#classpath
Oracleでsqlplusを使っていると、文字列のカラムの幅が無駄に広くとられる。
varchar(N)は可変長文字列なのだが、selectするとN文字分の幅が確保されて読みにくい
COLUMNを使って解決する。
結果:
>yum -y update
>yum install gcc-c++
>yum install boost boost-devel
yum -y install doxygen
・作業用ディレクトリを作る
>mkdir srchighlight
・作業用ディレクトリにソースコードをダウンロード・展開
>cd srchighlight
>wget ftp://ftp.gnu.org/gnu/src-highlite/source-highlight-3.1.7.tar.gz
>tar xpvf source-highlight-3.1.5.tar.gz
export CC=gcc
export CXX=g++
>cd source-highlight-3.1.7
>./configure --with-doxygen
>make
>make install
0.前回までのあらすじ。
地面に緑色の点が描かれるようになった。
草が描かれる範囲を示す白い四角の集合が、カメラに写っていないことがある。そういうときはカメラをバックさせたりすると現在の視点より後ろに見つかる(多分)。
1.[Object] を開き、Pop Grass clump 01/Grass clump 01 を選択する
Grass Clumpのタグで、草の量と広がりを調整する。
Number of blades ...草の数
Clump diameter ...一つの群の密集具合
Blade length ... 草の長さ
草はいくつかの塊に密集して生え、それが草の描画範囲に多数出現する。
従ってNumber of bladesをただ多くしても、一つの点が濃くなるだけだ。
①
Number of blades : 100000
Clump diameter: 10
②
Number of blades: 1000000
Clump diameter: 10
③
Number of blades: 10000000
Clump diameter: 10
草の数が足りているなら、Number of bladesではなくClump diameterを大きくすると、草がちゃんと広がる。
②改
Number of blades: 1000000 (変更なし)
Clump diameter: 50 (前10)
ただ、Number of bladesが大きくなればなるほど処理が重くなる。
そこで、地形を緑にすることで草のまばらさをごまかす。
2.[Shaders]から/Base coloursを選択する
ColourタブのApply high colour、Apply low colourの右側の黒と灰色のボタンをクリックし、緑色系統の色を選択する。
Number of blades:300000
Clump diameter:50
地形:灰色+黒
地形緑色+黒
上図はApply high colourだけを緑色にしたもの。low colourをいじらなくてもうまくいった。
3.[Object]からPop Grass clump 01 を選択し、Scaleタブを開く。
Minimum scale,Maximum scaleを入力すると、最小、最大各数値分草の背丈がスケーリングされる。
つまりMaximum scaleに5を入れると最大でBlade length×5の高さになる。
Number of blades: 300000
Clump diameter: 50
Blade length: 0.7
Minimum scale: 1
Maximum scale: 5
アメリカにはデスバレーという観光地があり、そこで干上がった湖底にある石がいつの間にか移動しているという珍現象はわりと有名。
記事では、その謎がついに解けたといって、犯人は氷と風だとしている。
石は今年2月まで都合5回に渡って動いたのですが、ノリス博士たちがたまたま寄った12月には、レーストラック・プラヤには深さ7cmの水が溜まっていました。夜間に氷が張って、昼になるとその氷が溶けてパキパキと割れ、やがて氷片が絶え間ない風に流されて前にある邪魔な石をズリズリと推し始めたんです。
氷の厚さは3~5mm、風速は秒速3~5m、その程度でも石は動いたんだそうですよ? これには論文共著者のローレンツ博士も、「思ったより氷が薄いので正直驚いた。僕が思ったような浮力は関係なかったんだね」と話してます。
デスバレーの動く石の実働シーン初撮影、謎氷解…なのか?
http://www.gizmodo.jp/2014/08/post_15434.html
1.Terragen 3を起動。
2.地形等、何も追加しなくていいのでそのまま[Objects]選択
3.[Add Object] - [Population] - [Grass clump] で草を追加
4.Pop Grass clump 01 を選択し、[Distribution]タブの[Area length a]及び[Area length b]をそれぞれ300程度の小さな値にする。
この値を小さくするのは確認のためで、こんな小ささで描いても普通は得しない。
5.Pop Grass clump 01/Grass clump01 の[+]をクリックし、 Default shader 01 を選択する。
[Colour]タブの中の、[Diffuse colour]の右側の四角をクリックし、緑色(草の色)にする。
6.[Renderers]をクリックし、 /Render 01 を選択。 [Render Image]を選択し、とりあえずレンダリングする。
7.レンダリング結果。
所々に緑色の島ができている筈だが、できていないかもしれない。
ちなみにこのレンダリングは途中でやめても次に行くのに差し支えない。
8.プレビューを見ると白い四角がたくさん描かれている。この四角がちりばめられている範囲に草が描かれる。
9.もし四角が描かれていないようなら、右上のアイコンのような物をクリックしてカメラを操作し、高い位置から眺めるような視点にする。
白い四角が密集している場所があるので、そこにカメラを固定すれば草が描かれた範囲をレンダリングできる。
右上の白い物体をクリックし、カメラ操作のボタン類を出す
高いところから見下ろすと、四角が密集している領域が見える。
この領域は、4の[Area length a]及び[Area length b]で広げられる
カメラを固定するには、プレビュー画面の左下の一番左側のボタンをクリックする
見下ろした状態でレンダリングしたところ。縦長に緑色の点がランダム配置されている。
次回は辺り一面緑にする作業。
ファイルを見込み、shift-jisからeuc-jpへ変換する
#include <unicode/ucnv.h> #pragma comment(lib, "icuuc.lib") void Converter(){ std::fstream r("C:\\dev\\shiftjis.txt"); std::string src_data; r >> src_data; //エラーを受け取る変数 UErrorCode err = U_ZERO_ERROR; //入力・出力の各文字コード char srcCode[] = "shift-jis"; char dstCode[] = "euc-jp"; //UnicodeStringに渡す文字列の文字コードを指定する UConverter* srccnv = ucnv_open(srcCode, &err); //入力された文字の文字コードを内部形式に変換 icu::UnicodeString srcstr(src_data.c_str(), src_data.length(), srccnv, err); //内部形式の文字コードを目的の文字コードへ変換 char* dst_data = new char[100]; srcstr.extract(0, srcstr.length(), dst_data, dstCode); using namespace std; std::fstream w("C:\\dev\\dst.txt", ios::out | ios::binary | ios::trunc); w << dst_data; }
OpenCVではgifは扱えない
MISTでgifの読み込みができる。
#include <Mist/include/mist/mist.h> #include <Mist/include/mist/io/gif.h> #include <OpenCV/include/opencv2/opencv.hpp> #include <OpenCV/include/opencv2/highgui/highgui.hpp> #pragma comment(lib,"OpenCV/lib/x86/vc12/lib/opencv_core249") #pragma comment(lib,"OpenCV/lib/x86/vc12/lib/opencv_highgui249.lib") int _tmain(int argc, _TCHAR* argv[]) { typedef mist::rgb< unsigned char > value_type; typedef mist::array2< value_type > image_type; image_type mistimg; if (!mist::read_gif(mistimg, "C:\\test.gif")){ return 1; } else{ cv::Mat cvimage(mistimg.height(), mistimg.width(), CV_8UC3); for (int x = 0; x < mistimg.width(); x++){ for (int y = 0; y < mistimg.height(); y++){ cv::Vec3b p; p.val[0] = mistimg(x, y).r; p.val[1] = mistimg(x, y).g; p.val[2] = mistimg(x, y).b; cvimage.at<cv::Vec3b>(y, x) = p; } } cv::namedWindow("hoge"); cv::imshow("hoge", cvimage); cv::waitKey(0); } getchar(); return 0; }
mist側:
画像の読み込み
bool read_gif(読み込む先のMISTコンテナ , ファイル名)
Mist/include/mist/io/gif.hをインクルード
bool mist::read_gif (
array2< T, Allocator > & image,
const std::string & filename
);
http://mist.murase.m.is.nagoya-u.ac.jp/document/group__image__gif__group.html
画素へのアクセス
operator() ( X座標, Y座標)
reference mist::array2< T, Allocator >::operator() (
size_type i,
size_type j,
size_type = 0
);
i:コンテナ内のX軸方向の位置
jコンテナ内のY軸方向の位置
mistinstance.operator() ( x , y );
参考: http://www1.cts.ne.jp/~clab/hsample/Time/Time5.html #include <time.h> double diffTimeFrom(struct tm& tmlimit){ //西暦 1970 年1月1日からの秒へ変換 time_t ttlimit; ttlimit = mktime(&tmlimit); //今日の日付を西暦 1970 年1月1日からの秒で取得 time_t now = time(NULL); double sa = difftime(ttlimit, now); return sa; } tm getDate(const int Year, const int Month, const int Day,const int Hour=0,const int Minutes=0,const int Second=0){ struct tm tmlimit; tmlimit.tm_sec = Second; /* 秒 */ tmlimit.tm_min = Minutes; /* 分 */ tmlimit.tm_hour = Hour; /* 時 */ tmlimit.tm_mday = Day; /* 日 */ tmlimit.tm_mon = Month-1; /* 月 ( 1月=0 ) */ tmlimit.tm_year = Year-1900; /* 西暦年 - 1900 */ tmlimit.tm_isdst = -1; /* サマータイムフラグ */ return tmlimit; } int _tmain(int argc, _TCHAR* argv[]) { double result = diffTimeFrom(getDate(2014,8,25)); printf("%lf", result); getchar(); return 0; }