2014/12/29

下記の投稿の件

下記の投稿の件作っているが間に合いそうにない。新年早々初デスマっぽい

2014/12/24

sqlite

わがままな客のせいでシステムを組むハメになった。

ネットワークを介さない、standaloneなものだ。というかdeamon的なもの。
ライセンス的な問題から、sqlite3を使用することにした。あんまり、こういうの作ったことないからできるか不安。12月29日までにどうにかしないとまずいし。

2014/12/11

OpenFOAMで流体・固体の連成

これをみると結構簡単に実装できそうなのだが?

http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=7&ved=0CFEQFjAG&url=http%3A%2F%2Fdocphdpersonalstuff.googlecode.com%2Fsvn%2Ftrunk%2Fliterature%2FA%2520unified%2520formulation%2520for%2520continuum%2520mechanics%2520applied%2520to%2520fluid-structure%2520interaction%2520in%2520flexible%2520tubes.pdf&ei=jIWJVJOcLIi2mwX9rYDwCw&usg=AFQjCNEo1_Y_BC674Qfa_yvGhBhSetzleg&sig2=jdkTgr5wmJ-45PkwzOsgWw&bvm=bv.81456516,d.dGY&cad=rja

オラわくわくしてきたぞ。いっちょやってみっか。

とある勉強会にて

とある勉強会で事項紹介がてら、自分の開発環境の説明とかしたら。

ビルド職人


に認定されました。 パフォーマンス命の業界なので何でもソースから最適化するため作りますがなにか?

2014/11/16

最近の興味

最近はEPRとかBIツールみたいなものを使ってbig data関連のことをやってみたいと思うようになった。


2014/09/23

きょうもかいしゃだよー

休みなのに会社。

この会社に入社してから学んだスキル
  • DB & SQL (独学)
  • GNU autotools (独学) 使う方じゃなくてスクリプト書く方
  • CMake (独学) 使う方じゃなくてスクリプト書く方
  • ifort (独学) 初めて本格的に使った 
  • valgind (独学)
  • openspeedshop (独学)
  • svn 1時間だけ研修あった。GUIでみんな使っているが私はcommnd lineで使用するため、独学。
  • FlexLM 社内のdocなどを結構参考にした。これは結構しっかりしていて良かった。
  • AMG法のアルゴリズム (独学)
  • 混相流 いろいろ教えてもらいながら学び中
  •  無知な人に関わって自分の時間を消費しないこと

あれ、あんまり会社から学んでいないような?

2014/09/21

会社のレベルがやばすぎる


入社して6カ月たちました。普通ならば、ようやく一人で仕事を任せられるぐらいでしょうか?私は入社2日目でコード渡されてとこれに"AMG載せて"の一言でした。

気付いたのですが会社の技術力がやばすぎる
  1. Fortranは全て固定長
  2. doループをcontinueで回す人がいる
  3. F2003形式以降で書くとほとんどの人が読めない
  4. Fortranしか書けませんという人が多い(Makefile, Bashが書けない)
  5. "Cmake誰か使えませんか?"と技術部長からメールがきた
  6. -pgオプションとgprofは使えるとすごいらしい
  7. メモリバンド幅とCashのヒット率が高速化とどう関係しているかわかっていない人がほとんど、そんな人が某研究機関の並列計算機の高速化を行っている。
  8. svnを社内で使っているが、使える人は使ってくださいというルール、しかもみんなGUIじゃないと使えない
  9. コーディングルールはない
  10. 最新のgccビルドしたらすごい人扱いされた
  11. 文字コードをしらない。読めないコメントは壊れたと考え、コードから読んでいた。(スクリプト作ってあげました)
  12. 実装時のデータ構造とアルゴリズムを考えない。数千万要素でも線形サーチが載ってた。(Hash関数に変更した。あとでsplay treeを実装する)
  13. 赤字
こんな会社ですが技術力を売りにしています。少なくとも4人は私よりも技術はあります。

もぅマヂ無理。。。
転職しょ。。。

2014/08/09

この会社どうして存在できるのだろう?


入社してまだ4ヶ月程度だがこの会社は杜撰すぎる。理由を淡々と述べていく
  • ソースコードが汚い
新規に書くコードでもF77スタイルなんですが? 馬鹿なの?
  • ソースコードの管理体制が適当
svnを一部の人が使用していたので、担当するパッケージに導入しました。私以外の人は使えてませんが
  • 他社のコードが入っていた
はいアウト。私が消しました。
  • スキルが新入社員の私にも劣る人がほとんど
どうしようもない 。実装に関する知識では、ある専門学校出身の人が一番凄いと思う、分野によっては私もかなわない部分もある。でも給与面でかなり冷遇されている。早めに老害を切って優秀な人を安い金で雇え。
  • スキル高い人ももう諦めている
このまま残ったら自分もこうなってしまうのだろうか?
  • 経営陣の技術及び管理スキルが低い
なぜ、少しの機能追加に1000行も追加が必要なコード vs カプセル化されたコードで前者が優れていると判断するのだろう? 個人スキルで前者をどうにかしていく方針らしい。社長が32bitと64bitのアドレス空間の違いを理解していない。
  • 自転車操業
メインバンク以外に2行が頻繁に訪れているのだがどうしよう。
もう転職考えてる

2014/05/02

会社が停電

メンテナンスのため会社が停電するらしいので、データのバックアップをかれこれ4時間ぐらいしてる。もう帰りたい。きょうは実家に帰っていぬをもふもふする (重要)。

2014/04/29

未だにPPP通信

DHCPなんで技術はいらねーぜ。

暇になったら、いらない古いノートをrouterにする。

プロバイダからのはハゲのところに返却しないとお金取られる。

2014/03/30

明治の人

妹の結婚式の写真で自分だけ笑ってなくて, 母に「あんただけ明治の写真の人みたいだ」と言われました。orz

2014/03/29

母親が出席した結婚式

今起こったことをありのまま話すぜ。

1) 今日、母親が母親の職場の同僚の結婚式に出席した。

2) ついさっき、小中の同級生が本日結婚したことをfacebookで書いていた。ちなみにこの同級生は、母親の同僚。

3) 母親に聞く

4) 母、白状する。

5) 引き出物を父と食べる (゚Д゚)ウマー

正直、写真見てもあんまり思い出せない人なんだよね、facebookで繋がってもないし。一応お祝いのメッセージぐらい送っておくべきなのだろうか ?

母校のサーバー

母校のfep死んでるな. 今日中にデータ移したいものがいくつかあったのに.

隣の研究室の某fepも死んでいるところを考えるとネットワークが御逝きになられたようだ.

installation of debian 7.4.0 to HP mini 2140

installation of debian 7.4.0 to HP mini 2140 has done.

Troubles I faced.

USB debian image was not detected by HP mini 2140. Use external CD/DVD drive.

broadcom 4233 wireless firmware was not installed by default. Install firmware-b43-installer

of just type

sudo apt-get install firmware-b43-installer


ノートの再インストール

linux使い始めてかれこれ10年ぐらいにして初Debianにすることにした.

今CDを焼いてる. ノートにcent OS入れてみたけどwirelessのドライバーのビルドがどうしても出来なくて諦めた. やっぱ端末用にはcentは使えないのか ? 使用者の腕の問題という節もありますが.

慣れているUbuntuにしようとしたけど, 4月に新しいの出るし今クリーンインストールしてもバージョン上げるなり,  もう一回クリーンインストールするの面倒くさいので, Debianでいんじゃね? と思って入れて見ることにした.

Ubuntuみたいにlinuxの標準dir構造を無視していないはずなので, configファイルとか探すのは楽そう.





ちなみに所有するゴミPCが増えた

iBook G4, power 7450

Sun Ultra 40, Opteron 280

自作 Intel Atom 510

 増えたのが以下

友人からもらった (彼はMac教になりました)
HP mini 2140

研究室からぶんどった
Lenovo  2008 ぐらいのidea book

同じく研究室からぶんどった
Dell E4200

2014/03/27

実家で休み

卒業したよ。

お仕事始まるまで実家ぐらし、毎日実家のわんこをもふもふできる生活。

2014/03/16

GNU Privacy Guardの公開鍵の使いかた

医療画像と公開されていないコードなどを扱うので, 覚書しとく

秘密鍵と公開鍵の暗号化の方法が異なって半日ぐらい悩んだぜ.

公開鍵のほうがよく使うと思うので公開鍵の方法だけ
----------------------------------------------------------------------
送る側
----------------------------------------------------------------------
鍵の生成
gpg --gen-key

鍵の確認
gpg --list-keys

公開鍵の出力
gpg --export

暗号化 (公開鍵用)
gpg -c ${target_file}

----------------------------------------------------------------------
受け取る側
----------------------------------------------------------------------
鍵のインポート
gpg --import ${key}.pub

本当はtrustしたほうがいいがめんどくさいので省略

逆暗号化
gpg -d ${target_file}

2014/03/12

paraview-4.1.0

paraview-4.1.0のコンパイルに成功したのでconfigureの仕方からCMakeCacheも載せておく.

Qt-4.7.5以上が必要. Qtの5系には対応していないようだ. 私は4.8.5を使用した. Vtkは6.0.0を使用.

https://sites.google.com/site/cfdmemorandum/paraview/building_paraview-4-1-0

2014/02/12

gnuplotの小技

Times系のフォントが指定されている出版物が非常に多い.

こんなのを用意しておくと便利.
圧力波形出力用のやつ

-----------------------------------------------------------
pplot.sh
-----------------------------------------------------------
set grid
set key below
set tics font "Times New Roman"
set xlabel font "Times New Roman"
set ylabel font "Times New Roman"
set key font "Times New Roman"
set xlabel "Time / Second"
set ylabel "Pressure / Pascal"

gnuplotを起動して

gnuplot > load "pplot.sh"

でロードあとは普通にplotする. 画像出力まで自動でできるけど, 確認しながらグラフ作るとき便利.

2014/02/04

並列gmshのデータフォーマット

並列gmshのデータフォーマットを頑張って読解した.





赤: 要素の番号 (c/c++ユーザーは1から始まることに注意)
青: 要素のタイプgmshの reference見てくれ 4は四面体要素
茶: このタグのあとに続くタグの数
水色: 物理タグ, 境界認識のために自分で設定しているはずだ
黄色: メモリータグ, gmshの中で与えたメモリー番号
ピンク: 並列メッシュ形式にしかでない, このタグに続くタグの数
オレンジ: 要素の領域番号
緑: もし要素が他の領域と接しているなら, マイナスで隣り合う要素の番号が示される
群青: 要素の接点番号

2014/01/29

高次の形状関数

有限要素法の高次形状関数の実装は, 出来そうだ.
c++ならばtemplateをつかって再帰的に計算できる.

参考にしました.
 http://www.colorado.edu/engineering/cas/courses.d/IFEM.d/IFEM.Ch18.d/IFEM.Ch18.pdf

高次のガウス積分の実装を今度は考えなくては.

2014/01/27

static polymorphismとgcc

はてgccのバージョン4.8.2にしたら静的多様性を使ったコードがコンパイル出来なくなったぞい. なぜじゃ? 4.7.3でもでるな ???? なんかミスったか ?

c/c++, fortranとかは普通に作れるんだけど, meta化すると急にできなくなる.

2014/01/25

大量に作成しております

とある先進的な解析ソフトを見つけてコンパイルしようとしたら, どうもconfigすら通らない. いろいろ探ってみたのだけれども理由がわからず, mailing listに質問してみたら

"ごめん, ホームページ更新してなくて. 依存情報かなり古いんだと言われた"

おっさんは, その程度でめげる人ではないので,

gmp-5.1.3
mpfr-3.1.2
mpc-1.0.2
gcc-4.8.2
boost-1.55.0
openmpi-1.6.5

をつくった.

あとpetsc-3.4.3を作れば問題ないはず.

2014/01/24

FLTK

FLTK -fPICオプション付けないとコンパイル通らないな. FLTK-1.3ね

2014/01/22

c++ テンプレートメタプログラミング 3 静的多様性を用いた行列の足し算



いくつでも行列足し算できる奴も出来た. gcc-4.8.0で動作確認, 4.3.4ではコンパイル出来なかった.

元ネタ
http://itee.uq.edu.au/~conrad/misc/sanderson_templates_lecture_uqcomp7305.pdf
#include<iostream>

template< typename T1, typename T2 >
class Glue;

template< typename derived>
struct Base {
    const derived & get_ref() const{
        return static_cast<const derived&>(*this);
    }
};

class Matrix : public Base < Matrix >{
public:
    int rows;
    int cols;
    double *data;
  
    Matrix(){}
    Matrix( int in_rows, int in_cols ){
        set_size( in_rows, in_cols );
    }
    void set_size( int in_rows, int in_cols ){
        rows = in_rows;
        cols = in_cols;
        data = new double [rows*cols];
        for( int i=0; i<rows*cols; i++ ) data[i] = 1.0;
    }

    Matrix( const Matrix & X );
    const Matrix& operator=( const Matrix & X );

    template< typename T1, typename T2 >
    Matrix( const Glue<T1, T2> & X );

    template< typename T1, typename T2 >
    const Matrix & operator=( const Glue<T1, T2> & X );
};

template< typename T1, typename T2 >
class Glue : public Base< Glue<T1,T2> >{
public:
    const T1 & A;
    const T2 & B;

    Glue( const T1 & in_A, const T2 & in_B ): A(in_A), B(in_B) {

    }
};


template< typename T1, typename T2 >
inline const Glue< T1, T2 >
operator+( const Base<T1>&A, const Base<T2> & B ){
    return Glue< T1, T2 >( A.get_ref(), B.get_ref() );
}

template< typename T1 >
struct depth_lhs{
    static const int num = 0;
};

template< typename T1, typename T2 >
struct depth_lhs< Glue<T1, T2 > >{
    static const int num = 1 + depth_lhs<T1>::num;
};

template< typename T1 >
struct mat_ptrs{
    static const int num = 0;

    inline static void
    get_ptrs( const Matrix** ptrs, const T1 & X ){
        {
            ptrs[0] = reinterpret_cast<const Matrix*>(&X);
        }
    }
};

template< typename T1, typename T2 >
struct mat_ptrs< Glue<T1, T2> >
{
    static const int num = 1 + mat_ptrs<T1>::num;

    inline static void
    get_ptrs( const Matrix** in_ptrs, const Glue<T1,T2>& X ){
        mat_ptrs<T1>::get_ptrs(in_ptrs, X.A );

        in_ptrs[num] = reinterpret_cast< const Matrix*>( & X.B );
    }
};

template< typename T1, typename T2 >
const Matrix & Matrix::operator=( const Glue<T1,T2>& X ){
    int i,j;
    double sum;
    int N = 1 + depth_lhs < Glue<T1,T2> >::num;
    const Matrix* ptrs[N];
    mat_ptrs< Glue<T1,T2> >::get_ptrs(ptrs,X);
  
    int r = ptrs[0]->rows;
    int c = ptrs[0]->cols;

    set_size( r, c );

    for( j=0; j<r*c; ++j ){
        double sum = ptrs[0]->data[j];
        for( i=1; i<N; ++i ){
            sum += ptrs[i]->data[j];
        }
        data[j] = sum;
    }
    return *this;
}

int main(){
    Matrix A(2,2);
    Matrix B(2,2);
    Matrix C(2,2);
    Matrix D(2,2);
    Matrix X(2,2);

    X = A+B+C+D;

    for( int i=0; i<4; i++ ) std::cout << X.data[i] << std::endl;
return 0;}

c++ テンプレートメタプログラミング 2 行列足し算


 3つの行列を足し算する版できた.

元ネタ
 http://itee.uq.edu.au/~conrad/misc/sanderson_templates_lecture_uqcomp7305.pdf

#include<iostream>

template < typename T1, typename T2 >
class Glue;

class Matrix {
    public:
    int rows;
    int cols;
    double *data;

    Matrix(){}
    Matrix( int in_row, int in_cols ){
        set_size( in_row, in_cols );
    }
    void set_size( int in_rows, int in_cols ){
        data = new double [ in_rows*in_cols ];
        rows = in_rows;
        cols = in_cols;
        for( int i=0; i<rows*cols; i++ ) data[i]=1.0;
    }

    Matrix( const Matrix & X );
    const Matrix operator=( const Matrix& X );

    Matrix( const Glue<Matrix,Matrix> & X );
    const Matrix & operator=( const Glue<Matrix,Matrix> & X );
   
    Matrix( const Glue< Glue<Matrix,Matrix>, Matrix > & X );
    const Matrix & operator=( const Glue< Glue<Matrix,Matrix>, Matrix >  & X );
   
};

template < typename T1, typename T2 >
class Glue {
public:
    const T1 & A;
    const T2 & B;
    Glue( const T1 & in_A, const T2 & in_B ): A(in_A), B(in_B){}
};

Matrix::Matrix( const Glue<Matrix,Matrix> & X ){
    operator=(X);
}

const Matrix & Matrix::operator=( const Glue< Glue<Matrix,Matrix>, Matrix> & X ){
    const Matrix & A = X.A.A;   
    const Matrix & B = X.A.B;   
    const Matrix & C = X.B;   

    set_size( A.rows, A.cols );

    for( int i=0; i<A.rows * A.cols; i++ ){
        data[i] = A.data[i] + B.data[i] + C.data[i];
    }
    return *this;
}

const Matrix & Matrix::operator=( const Glue<Matrix,Matrix> & X ){
    const Matrix & A = X.A;   
    const Matrix & B = X.B;   

    set_size( A.rows, A.cols );

    for( int i=0; i<A.rows * A.cols; i++ ){
        data[i] = A.data[i] + B.data[i];
    }
    return *this;
}

const Glue<Matrix,Matrix> operator+( const Matrix & A, const Matrix & B ){
    return Glue<Matrix, Matrix>(A,B);
}

const Glue< Glue<Matrix,Matrix> ,Matrix> operator+( const Glue<Matrix, Matrix> & P, const Matrix & Q ){
    return Glue< Glue<Matrix,Matrix>, Matrix >(P,Q);
}

int main(){
    Matrix A1(3,4);
    Matrix B1(3,4);
    Matrix C1(3,4);
    Matrix X(3,4);
   
    X = A1 + B1;
    X = A1 + B1 + C1;

    for( int i=0; i<X.rows*X.cols; i++ ) std::cout << X.data[i] << std::endl;

return 0;}

c++でテンプレートメタプログラミング

自作の有限要素ソルバーを, テンプレートメタプログラミングを使用して改造しようとしているがどこがどう早くなるのかよくわかっていない.

アセンブリにして吐いてみるとたしかに短くなってわいるのだけど, メタ化した部分か消えてるのかよくわからない.

アセンブリ言語読めるようになるしかないのか.

コンパイル時に計算するらしいけど, 行列式の解などは計算されると困る. 並列計算機を使ってもものすごく時間のかかる箇所なので, コンパイラーなどにやらせたら一生終わらんだろう.

そういや昔こんなの書いたね
http://a-daily-life-in-the-office.blogspot.jp/2013/02/c.html

2014/01/21

2014/01/20

バグ

やっとバグを見つけた. 再計算投げたし, もう寝よう

2014/01/19

研究室

今所属している研究室は, 3月で教員が定年退官の為閉鎖になる. 同じ部屋に他分野の研究津市があり, 2つの分野の学生が1部屋にいる.

私ともう一人の同僚が, この研究室からの最後の博士後期課程の卒業生. そして, 後三年後に部屋をシェアしている研究室から最初の博士が出る予定.

2014/01/17

c++の二重クラス

c++のレベルがまた上がった, というかこの程度のことが知らなかったのが恥ずかしい.

 二重クラスの定義


class MainClass{
public:
    MainClass();
    ~MainClass();
    class SubClass {
        public:
            SubClass();
            ~SubClass(){}
    };
};

MainClass::MainClass(){
    SubClass subclass;
}

MainClass::~MainClass(){
}

MainClass::SubClass::SubClass(){

}

int main(){
    MainClass mainclass;
    MainClass::SubClass subclass;
return 0;}



 なるほど大規模なソフトでよく見る奴はこうしてたのか. 静的多様化をつかってメタ化できるかな ? ちょっとやってみる.




追記


やってみたらあっさり出来た. これはとっても便利だ.


#include<iostream>

template< typename DerivedMainClass >
class MainClass{
public:
    MainClass(){};
    ~MainClass(){};
    bool CallFunc(){
        return static_cast<DerivedMainClass*>(this)->CallMainFuncImple();
    }

    template< typename DerivedSubClass >
    class SubClass {
        public:
            bool CallFunc (){
                return static_cast<DerivedSubClass*>(this)->CallSubFuncImple();
            }
            SubClass(){};
            ~SubClass(){}
    };
};

class MainClassDerived : public MainClass <MainClassDerived>{
    friend class MainClass < MainClassDerived >;
    bool CallMainFuncImple(){
        std::cout << "Derived main Class" << std::endl;
    }
};

class SubClassDerived : public MainClass<MainClassDerived>::SubClass <SubClassDerived> {
    friend class SubClass < SubClassDerived >;
    bool CallSubFuncImple(){
        std::cout << "Derived sub Class" << std::endl;
    }
};

int main(){
    MainClass<MainClassDerived> *mainclass = new MainClassDerived();
    MainClass<MainClassDerived>::SubClass<SubClassDerived> *subclass = new SubClassDerived();
    mainclass->CallFunc();
    subclass->CallFunc();
return 0;}

2014/01/16

Kaveriの姫野ベンチ

Kaveriの姫野ベンチが乗ってる, やっぱりintelより出てない.
NAS parallelもsandy bridge i5に負けてる.

http://juanrga.com/en/AMD-kaveri-benchmark.html

2014/01/14

高次元要素の問題に気づいてしまった

高次元要素のFEMを試しに作ってみたが, ある問題に気がついてしまった.

 汎用可視化ソフト2次のオーダまでしか対応してないんだよね. OpenGLで自作するか ?

2014/01/13

雪が凄いんですけど

雪が10cmぐらい積もっている中, 食料が尽きたので頑張って買い物に行ってきたよ. 寒かった. 長年履いていたブーツはボロボロで水がすぐしみてくるので, 中古だけど年末に新しいのをかいました. Ceder Crestを5900円で. やっぱり新しいのはいい. 靴下が全然濡れなかった.

なん...だと

windows NTで, このブログにアクセスしてる奴がいるだと !?

Gmshを使用し領域分割した高次要素を出力する方法

キーワード: 領域分割, 高次元要素(5次要素まで) Gmshを使用して領域分割された要素と, 高次元要素の出力の仕方を載せる. 1. なんか適当に形状を作る. tutorialからでも取ってくるといい.
2. Mesh > 3D (カーソルが乗ってるヤツ) を選択し. 普通に1次のメッシュを作成する. 一時要素のまま領域分割を行いたい場合は, このまま6に飛ぶ.
3. Set Orderを選ぶ(カーソルが乗ってるヤツ).
4. 次数を選択. 3にしてみた.
5. これでOK. した三行に高次節点の情報が出てくる.
6. 今度は領域分割をする. Meshを選択しなおし, Partitionを選ぶ.
7. Ubuntuのbinaryはライセンスの問題上Metisが使えないのでchacoを使いましょ. Partitionerを'chaco', number of partitionsを4にした. でpartitionを押す.
8. File > Save ASを選ぶ.
9. Msh形式ならば出力時にoptionを聞いてくるので、好きなのを選ぶ. 此処ではASCIIと領域ごとに分割してメッシュファイルを出力する(三番目のoption)を選んだ.
10. メッセージで確認する. test_box.msh_000001-4が出力されている.
分割して出力できるの知らなくて, 自分で分割のコード書いてたよ. ちなみに公式マニュアルに説明ない無い.

2014/01/12

OpenFVMをビルド

openFVM 1.1をビルドしが, どうやらgmshの2.0形式に対応していない. IOを書きなおすのめんどくさい. 追記 13/Jan/2014 Gmshのversion 1.0形式で出力することに成功したがセルを認識されない. 原因不明

2014/01/10

博士論文

博士論文を教務課に出した. 後は本審査を通ればはかせだよ.

まとめページ

      

リンク

The Wizard of Science
友達のブログ文化人類学とか難しい話をしております。あとホームページから自作ゲームも配布。