2013年5月30日木曜日

Ruby

初学者にとってRubyの良いところ(と勝手に思ってます)。

オブジェクト指向を学ぶのに一番良い(と勝手に思ってる)。
汎用プログラミング言語。
数値解析を出来る。
Emacsを勉強したくなる。
作者が日本人。

もっとたくさんあると思います。
日本発信のプログラミング言語。

使うことで、応援したい。

解析とは

解析解と言うと、私は陽的な関数で表現できるものを想像します。
評価がしやすく、電卓を叩けば解を得られます。
工学的な立場からすると、コストが低く済みます。
ただし、精度の問題があろうかと思います。

「陽的な関数で表現」できる現象は、それほど多くないと思われます。
したがって、ある程度の精度を持つ解を得るために「数値解」が必要になると思います。
離散化して空間積分、時間積分すれば解は得られるでしょう。

それとは別に摂動法があります。
パータベーション。

非常に有用だと思います。そして「オーダー」の概念が重要であり、工学の極みのように思います。

プログラムはものづくりに近いです。
数値解を求めるのは非常に楽しいです。

でも、技術屋としてはちょっと立ち止まり、精度とコストのバランスを考えて、最適な手法を選びたいものです。

摂動法も実は楽しいし、好きだったりします。

「目的は何なのか」
「どんな答えが欲しいか」
「そのためにどの程度の精度が必要か」
「そのためにどれくらいのコストが必要か」
「得られた解に対してどのように評価するか」
「結論は何なのか」
「目的と結論に整合が取れているか」

こんな手順でPDCAを回して、次の世代に明確な課題(目的)を残す。これが技術者としての理想像だと思います。




2013年5月28日火曜日

xyzzy4

やはり、設定とか、使い方とか記した方が、
関係者のモチベーションになるというか、恩返しのような気がしてきました。
Windowsを使ってて、今までで一番すごいソフトだと思いました。
(興奮冷めやらぬ・・・。)

暇を見つけて、記しておこうと思います。

AWKと絡められたら、良いな。

音楽

情熱スパイラルというアルバムを買いました。
ベースがかっこいいです。しかも女性。

ギターのギュイーン(不協和音)も良かったです。
でも、う〜ん、やはりバンドはリズム隊から入ってしまいます。
 ベースの音を拾いながら聞いてしまいます。

チリペッパーズのフリーさんの影響だと思います。
「Give it away」は格好良すぎます。

メロディだとどうしてもピアノの方が好きですね・・・。

2013年5月27日月曜日

xyzzy3

今日設定したのは、
・fortran
・ruby-mode
・outline2

特にoutline2は本当にすごい。関係者に感謝です。emacsユーザなら使いやすいですし、プログラム書くのにも良いです。あんまり期待して無かった分、正直ここまでとは…。
軽い…。落ちない…。

作ってくれた方、メンテされてる方、重ね重ねありがとうございます。

xyzzy2

とりあえずインストール。
後はキーワードとか、wwwのブラウザとか、補完とか出来たら、言うことなし。

2013年5月26日日曜日

xyzzy

普段はNTEmacsを使ってますが、良く落ちます。
Mac、Linuxは落ちないんですが。。。

会社はWindowsなので、xyzzyを使ってみようかと本だけ購入。
でも一番はCommonLispの簡易環境が整うところだと思う。

なるべく、少ないツールを使い込みたいですね。

2013年5月22日水曜日

python

a = []
a.append(2)

言語の使い分け

大学のとき、C言語の単位を落としました。
某大学のコンピュータリテラシーはUNIXなので、WindowsやMacすら触ったことなかった人間が、いきなりターミナルなんかでls、pwd、cd、mkdirなんかで操作を覚えて、muleを使ってました。

数年後、本気でCを勉強しようと思ってポインタの本を買って、すごく世界が広がりました。配列とポインタのつながり、構造体変数のアクセスなんかがわかると面白くなりました。

あくまで科学技術計算の範疇なので、流体の差分法や有限体積法を数値的に解くツールにすぎないので、メモリの管理とかに気を取られたくはないですが、如何せん、ほかの言語に比べて速いです。科学技術計算目的ならFortranとC/C++の2択になると思います。

一方で、出てきた解析結果の整理までFortranやC/C++を使うことはなく、VBAやその他スクリプト言語の利用が多いと思います。FortranやC/C++がヘビー級、スクリプト言語はライト級でしょうか。二つくらいあると良いと思います。
  • ヘビー級(Fortran、C/C++ インテルコンパイラだと激速、PGIは使ってないですが、GPUに計算させるならPGIのようです)
  • ライト級(Perl、Python、Ruby、Pythonのmatplotlibはすごいです)
  • ワンライナー(Awk、ほとんど勉強しなくてもCを知ってればかなり使えるはず)
ただ、科学技術計算に特化すると、Java、PHP、JavaScript等のWeb関連で利用頻度の高い言語には触れないことが多いですね。なんか馬鹿にされている気分なので勉強した上で、敢えて上記のヘビー級とライト級を使いたいです。
AwkのワンライナーはLinux文化が色濃いですが、むちゃくちゃ便利ですね。なぜ広まらないのか不思議です。

遊びだったり、趣味のプログラムならRealBasicを使いたいです。これが仕事に出来たらいいなあと最近思っています。GUIでいろいろ追加できるので便利ですよ。

統合開発環境

例えばRubyを使うとする。
エディタはEmacs、Vimが一番良いと思う。
プラットフォームに依存せずにそれぞれバイナリがありますし。
一度、覚えるとかなり速くなる。

ただ、大規模開発環境になるとエディタだけではかなりきつくなる。
プラットフォーム別に考えると
  • Windows
  • Mac
  • Linux(個人的にはCentOS使ってます)
が大まかに分けられるはずです(FreeBSD等UNIXもありますが・・・。)。どの環境を使うかでツールを使い分けるのはばからしいです。
いろいろ見たが、フリーで考えるとEclipse、Aptana、Netbeansがなるものがあるらしいですが、RubyやPythonだとAptanaが一番良さげの印象です。
WindowsとMacで試しましたが、使用感は余り変わりません。

ところでRealbasicも勉強中ですが、言語および開発環境として個人的に一押しです。
使い捨てのスクリプトも大規模も行けます。vbaをかじってる人は多いと思うので、違和感なく使えます。Webアプリもいけるのでもっと勉強して、この備忘録に追加できれば良いと思ってますよ。

realbasic pure advection

' Sub Actionに記述した線形移流方程式
’f:スカラー量
’fn:スカラー量 (更新後)
’df/dt + u df/dx = 0
'dはパーシャルに読み替えてもらえれば。

 Dim s as string
  Dim i as integer
  dim f() as double
  dim fn() as double
  dim n As  Integer
  dim fout as FolderItem
  Dim txtout as TextOutputStream
 
  s = "Program START!"
  lbResult.AddRow(s)
  Redim f(ixmx)
  Redim fn(ixmx)
 
  For i = 1 to ixmx
    f(i) = 0.0
    fn(i) = 0.0
    If i>10 And i<20 Then
      f(i) = 1.0
      fn(i) =1.0
    end if
    s =str(i) +","+ str(f(i))
    lbResult.AddRow(s)
  next i
 
  For n=1 to 100
    for i =2 to Ixmx
      fn(i) = f(i) - u*dt/dx *(f(i) - f(i-1))
    next i
    for i = 2 to ixmx
      f(i) = fn(i)
    next i
  next n
  For i = 1 to ixmx
    s = str(i) + ","+str(f(i))
    lbResult.AddRow(s)
  next i

2013年5月21日火曜日

スクリプト

# タブ区切りからカンマ区切りに変更
{
  gsub("\t",",",$0);
  print $0;
}

Vim

しばらく、Linuxの勉強もかねて、VIMをやろうと思う。
Ctrlキーを使わないことに違和感が(笑)

Pythonはこっちの方が良いかも。
あとはPHPだな。しばらく開発環境は使わずにシコシコソース書くことにしてみる。

JavaScriptはC++で行き詰まった時に、息抜きになる。
みんな使えるしね。エクセルVBAと同じくらい広まっても良いと思う。

TVD

方程式を直接離散化した方が、分りやすい。
分りやすいとは、余計なスキームの特性を考えなくて良いということだろう。
数値計算の手法を研究する分野ならそれは駄目だけど、ユーザー(数値解析をツールとする人間)からすれば、優先順位は下がる。

その点では、パタンカー先生(香月先生の訳本)の本は、
各微分方程式の各項の解に集中できるので、すばらしいと思う。古いですが。

でもあまりにも数値シミュレーションが当たり前になりすぎて、
本当の基本を分ってる人が少ない。

個人的にはすごくCIP法が好きです。
でもTVDを勉強するとさらに移流方程式に対する理解が深まる上、やっぱりCIPの素晴らしさを改めて実感できる。CIPで数値計算好きになったのもありますが・・・。

こういうことを分った人間が数値解析して、他人に説明しないと、どんどん日本は駄目になると思う。

2013年5月19日日曜日

2013年5月15日水曜日

C/C++

インテルコンパイラが欲しいな。
やっぱり実行が速いしね。

2013年5月14日火曜日

ぼうや

awkの処理がうまくいかない。
なぜだ!

ぼうやだからさ!


2013年5月13日月曜日

ruby

Rubyはオブジェクト指向の勉強にすごく良いと思う。
決して、教育用に限定する訳じゃなく、言語の思想がすごい。
pythonもオブジェクト指向で書けるけど、なんか、違和感が・・・。

おそらく、rubyが「純粋」オブジェクト指向だからだと思ってます。
異論反論たくさんあると思いますが・・・。

でも日本人だからRubyを応援したい。
東京近郊のrubyistのあつまりに参加したいけど、
知り合いが誰もいない・・・。

real basic

たのしくプログラミングしたい。

環境の設定だって、めんどくさいし、思いどおりいかないことは多くある。
そんなところに時間をかけたくない人はたくさんいると思う。
(私はそんなところも含めてプログラムが好きだが)

real basicはフリーじゃないけど、とりあえずインストールしたら、
プログラムをすぐ書けるようになるし、プラットフォームに依存しないし。
WindowsでMacの実行ファイルを作成できるのはすばらしい。

早く、iOS対応してくれたらなあ。

C

Cのコンパイラも欲しいと思っている。
インテル製のやつ。

Cは最近本気で書いてないので、忘れてるんじゃないかと恐怖が・・・。
あ、C++じゃないですよ。純粋なCの方。

ヘッダーは仕様書だ、的なことを聞いて、本当にそうだなと思う。
動的言語はそれがないから、使い捨てに近い使い方しか出来てない。
(いや、ちゃんと書けばいいことだけで動的静的議論をするつもりはないです)



fortran

fortranはgfortranがフリーだけど、
思い切ってIntelのFortranをOS X版を買った。
むちゃくちゃ早いです。

がんがん使って、自分の能力磨かないと。


AWK

プログラミングAWKを買ってみたけど、
すごく面白い。
文法の説明だけでなく、後半のアルゴリズムは思考の訓練になると思う。
名著はやはりすばらしいし、自分の中で長持ちします。

「10日で〜」
「誰でも分る〜」
も否定はしないけど、すぐに飽きてしまう。

Real Basic

Real basic
WindowにPushbuttonを配置。
pusshbuttonをダブルクリックして、Actionの関数で下記ソースを記述

MsgBox "Hello World"

これでボタン押すとHello Worldが出てくる。

GUIプログラミング

GUIのプログラミングは世の中的には普通だろうけど、
科学技術計算ではコンソールが主流だと思う。

real basicはGUIのプログラミングを実施するのに、すごく良いと思う。
VBAをかじっただけだが、何となく書けちゃう。
IDEも優れていると思う。Textでもソース出せるし。

会社で使わせるためのロジックを組み立てなければ。

AWK

AWKのフィルタがすごい。
# test.awk
{
      print $0
}
でファイル登録。シェル上で
gawk -f test.awk input.txt > output.txt
で「input.txt」のデータを読み込んで、「output.txt」にリダイレクトされる。
基本文法がCと類似しているので、使いやすい。