2017年9月29日金曜日

macで99basic

Windows7でなんとなく99basicの印象が好転したのでmacでも動かしてみた

うーん。あまり芳しくない
まずEasyWineこちらはunicode決め打ちなのか文字化けする。
続いてparallelsによるwin7で、こちらは一応動くが
画面を早くするためのscreen ,5とかして後でscreenで戻すところが変。

まあ、あまり期待して無かったのでEasyWinで一応グラフィックまで
(こちらのほうが実行速度はparallelsよりも速い)動いたので良しとしよう

性懲りもなくマンデルブロー集合 99BASICにて

99basicでやってみた。
マンデルブロー集合の計算・描画中の画面表示を「screen ,5」命令で止めて
計算後に「screen」命令単独でリフレッシュさせると最速で画面のように16秒を得た。
これは所謂互換BASIC系では最速で、上記のようなテクニックを弄しなくても50秒台後半で1分は切るのだからそれでも互換系で最速である。

ちょっと気になってついでに短いコードを書いて調べたらMBASIC86やn88互換basicで全滅だったinput$(1)でちゃんとキーコードを取ることができる。文字コード系はshift-jisのようだが漢字はちゃんと2byteで取るので得られた文字列の文字数が1か2かを見て変換すれば汎用入力のルーチンが書けそうだ。
これでF-basicの販売管理などの書き方がいかに糞なのかを示せる。
(岡田社長には見せないけど・・・)

それと結構良いなと思ったのが黒い画面のBASICではあるが
1)マウスで画面の任意の場所にカーソルを飛ばせる。
※さすがに右クリックでクリップボードのペーストまでは対応してません。
2)width命令が128x45とかに対応できる(幅は128までなのがちょっとだけ惜しい)
3)一度INSキーで編集を挿入モードにすると行の編集を終えてもずっとそのまま
(この点もMBASIC86、n88互換basicともに落第)
  当たり前だけど出来ないと本当に頭にくる。

BASICでN88に近いのなら以前から手持ちの
「BASICによるB-treeのテクニック」パワー社@昭和59年(1984)発行
のプログラムをトレースして楽しめたりもしそうだ。



2017年9月20日水曜日

windowsのプログラミング

rubyでwin32oleとかautoitとかvbscriptとかちょっと注目
あんまり見てなかった書籍「Ruby on Windows」を眺めて弄ってみる。

それとpythonもすきを見て弄る。
python+qt+spyder+QtDesigner+[Numba+Cython:いずれもjitコンパイラ]
で研究生活に入れるようなテーマがあれば面白いのに・・・
http://www7a.biglobe.ne.jp/~thor/novel/column/14.html

2017年9月19日火曜日

データベースどうするか

次なるテーマとしてデータベース操作を掲げたのは良いがどういった方向性にしようか?
まあまずは自分が理解しやすくテストもし易いmdbを弄ることで、rubyとc#である程度自由に書ければ次はSQLiteとの比較かな?(どちらもfile共有型であるし)

SQLサーバは試してみたいけどリソースのことを考えると重いのは腰が引ける。
MS SQL Serverが最右翼だとは思うが専用のPCがそこそこのが必要だと思うと・・
H2で代用できれば良いのだが・・
これを調査するのが次の課題か?
でもMSSQLもc#の標準である以上避けられないので一度は体験しておかねば・・

rubyでエラーが出たときに???ってなるのでsinatraなどで小さく作って理解していくことは大切だと思う。GUIが期待できないrubyだけに今後はデータベース操作をcuiでそこそこ経験したらそっちに進むのが自然だと思うから・・・ある程度自分なりのruby+web+dbが確立してからrailsに望みたい。
そしてその頃にはc#でのスタンドアロンの仕組みの構築にも慣れていたい。

2017年9月18日月曜日

mandelで繰り返し回数と画面のキレ

見出しの件を考察した。dxrubyで画面サイズを見やすいように約1.5倍ずつにした。
まずは32回
次に100回
最後は300回
やはり偉いもので32回程度だと甘々な輪郭も100回も繰り返すとかなりしっかりしてくる。しかし300回と比べると両方の黒海を仕切る砂州の伸びや各リアスの入江の混み具合が違うのがわかる。時間を取るか見栄えを取るか?

調子に乗って1000回もやってみた。ソースの改変がしやすく試行回数を増やせるのもDxRubyならではだ。
もはや2つの黒海の砂州がつながってきている。スゲぃ。
ただしここで注意がいるのは計算制度の誤差で本当は300回ぐらいの形が正しいのかもしれない。打ち切りの回数決定は難しい。


2017年9月17日日曜日

java8時代のgroovyを味わいたい

javaにちょっとは慣れた。しかしまだまだである。

最近いろんな言語の記述をするのが嫌ではなくなった。
javaもmandelの速度が速かったことやnetbeansにちょっと慣れたこともあって楽しく感じる。こうなると不思議なもので楽がしたい。前から注目していたgroovyについても習得を目指すか?しかし元々groovyで実現していたjavaに対するメリットの仕組みをjava8になってjavaが実現してきた。しかもgroovyとは違う仕方で。

こんな今だからこそgroovyで何ができるか見るもの面白い。
で、表題に戻るわけである。

次のテーマはいろんな言語でデータベース操作

RubyのグラフィックスはDxRubyで決まりって結論も出たし、今後もボチボチと気が向けば小さなテーマでグラフィックは弄って行くとして、次なるテーマはいろんな言語でデータベースを操作して速度とか使い勝手とかを見ていきたい。

例えば
1)Accessでmdbとaccdbを比較。特に共有
2)他の言語でMDBかAccdbを使ってみる。Ruby,C#,VB,Java
3)SQLiteをAccess,Ruby,C#,VB,Javaなどで使う。
4)H2をJavaで普通に使ってみる
※イメージはfirebirdの代替
5)他の言語でH2を使ってみる。Access,Ruby,C#,VB
6)MS SQLサーバを使う。軽い標準環境を模索する

テストでは100万件とかから検索とか3つのクライアントから1万件づつ同時に登録とかやってみたい。

2017年9月15日金曜日

DxRubyとDxRubyWSと・・・ 或いはDxRuby vs Ruby/Tk

マンデルブローの描画速度で明らかになったもっとも大きな収穫はDxRuby使えるじゃんってこと。
前項のruby-profもそうだけどruby界隈には痒い所に手がとどくようなライブラリーが結構ある。
DxRubyの作者さんが提供しているDxRubyWS(DxRuby WindowSystemだそうな)なども面白そう。(ただし3~4年ぐらい放置なのだが・・)

ゲーム用のプラットフォームで仕事用のツールはちょっとあれだけど速いは正義ってことも大いにあるので活用していこうと思う。

しかしながらRubyTkには遅い以外にも問題がありそうな感じなのだ。
下記は現行で最速のruby/Tk,DxRuby,C#の各々のマンデルブロー集合描画


各々の実行時間はTk:Dx:C#=7533:2031:208 (mS)なのだが問題はそれ以外のところにあった。画面をよく見てみると細部の表現が同じではない。描写の細かさなどの順でも速度と同じ順位なのだ。つまり粗さの点でTk>Dx>C#でC#が最も細かい。
右の大きな黒い部分と左の2番めに大きな黒い部分の境の砂州に似た部分の長さが違う。
また個々のリアス式海岸様の部分の細かさも異なる。
過去の他言語の結果を見比べてみるとどうやらrubyだけがこの傾向を持つようだ。
そしてDxよりもTkのほうがより顕著に甘く粗い。繰り返し回数に依存しているわけではなさそうである。既に旧BASICを除けば最遅のRubyTkでこれ以上の追求はしない(する気にならない。)がDxについては繰り返し回数を他の並に上げるなどして様子を見たい。
これもまた実行が速ければの事だ。

さっそく32回で打ち切っていた繰り返し上限を100にして試行してみた。
実行速度が2.03→4.55と倍以上遅くなったが画面的には満足の行く形になった。

こちらはExcelのCellを画素に見立てて書いてみたもの。
256x180と桁違いに小さい画素量だけどまずまずの速度かと思う。
まああくまでも実用とか他の表示とか無視した遊び。 

ついつい怖いもの見たさにやらかしてしまいました。
Ruby/Tkのmandelで発散確認回数を増やして画面精度を上げました。
なんと373秒です。(6分強か!待てねえな)
もうこの手の試用でruby/tkは辞めます。でも画面はやっと人並み




初めてのプロファイリング

昨夜、rubyのマンデルブロー集合描画がDxRubyの利用で10倍以上(正確には約13倍)速くなったのに気を良くしてさらなる高速化を目指して初めてのrubyプロファイリングをしてみた。
標準でruby付属のprofileは実行速度が100分の1位になるとの情報があって実用的でないと判断して高速なプロファイラとして知られているruby-profをgemして利用した。
ーー最初のものーー
どうも複素数のオブジェクト系の生成と操作に時間を取られている模様
 BASICなど複素数型の無いものを参考に単なる実数の掛け算に変更。
プロファイリングから手を入れた結果は?
改造前:改造後 = 5.86:2.03 と約3倍弱の高速化!これは美味しい。
プロファイリングなどを使いこなせるプログラマになろう。

2017年9月14日木曜日

DxRubyでリベンジ

8/4の「またしてもmandel」のエントリーでrubyが遅いことを書いた。
その時の記録がruby/Tkで書いたもので76秒とある。
他のやつが意外と速いので悔しかったのであれこれ調べていたらDxrubyで書くことに思い至った。実は前にも挑戦しようとしたことがあったけど静止画をどのタイミングで用意するかわからなかったので辞めていた。
今回、別件で探していたことからそのことに気が付いたのでチャレンジしてみた。
6秒弱ということは12倍以上の高速化でかなり有効だと思った。
ただしDxRubyはもともとゲームを書くためのライブラリーでたまたまmandelは点さえ描画できれば書けるので出来たけど直線や円を描く方法については未知である。
でもこれでちょっとはリベンジ出来たと思う。

2017年9月13日水曜日

visualbasic.netとC#

同じILにコンパイルされるはずのこの2つの言語ですが随分違って感じます。

こんなページが有りました。
VB.NET より C# の方が好きなところ

やはりC#はrubyとかと同じくOOPを軸足に据えた言語だと思います。
比べてVB.netのほうはそれまでのVB経験者やVBA出身者がOOPでビビることが極力無いように1フォームなど機能単位のクラスの中にC#で言うstaticなsub,functionで構造化的に開発するイメージを全面に打ち出したもののように思います。

同じことができるはずなんだけど、やっぱりソフトはそのシンタックスというか思想に影響を受けて描かれるものなのでしょう。ちまたでのVB.netの不評さはそのあたりから来る利用者の様相からの評価なのでしょう。
同じことができるはずなんだけどちょっとした字面の違いで随分作り手や読み手のソースへの思いが異なるんでしょう。(ラムダの書き易さなどの顕著に表れてると思う。)

やはりちょっとした実験や落書きはVBで、本格的な製品を作るのがC#、でさらに慣れてきてレベルが上ったらなんでもC#って感じで行きたい。

2017年9月6日水曜日

流石はmac

先日来ベンチしているmandelbrotだけど、windowsで好成績だったjavaの
ソースをmacに送って実行してみた。
なんと72msが出た!
こうなるとinkeyでちゃんとマルチバイト文字のコードすら取ってこれないクソな古代BASIC互換のソフトの1時間半待ちとか3時間待ちの意味が全くわからない。
java(on mac):n88互換:mbasic86=72ms:12830sec:5298sec=1:178194:73583
これにDebugのやりやすさ、やりにくさ、ネット上の情報の過多を加味すると古代BASICである程度のソフトを作ろうとすることは時間の大いなる無駄遣い以外のなんでもないとわかります。
しかし恐るべきはmac!core i7のWinよりも実効速度がはやいとは!

2017年9月4日月曜日

感動的に遅い!!

N88BASIC系のフリー言語でmandelしてみた。まずは

1)N88互換BASIC ・・ これは凄い!こんな遅いので良いの?!
    この画面は開始して30分ほど経過したものだけど・・・
それ以上に、以前のN88BASICユーザに触らせるのならダイレクトモード無しは拙いでしょ。
ちょっと動作を検証したいときにいま作成中のソフトを一度終わらせて確認用に
ちいさなプログラムを書くとかありえないし。
ソースは以下(今回の奴らで共通)

  ようやく終わりました。所要時間3時間33分50秒(=12830秒)

2)mbasic86
  こちらのほうが色々とましと思えてきますね。
  特にダイレクトモードは普通に使えるので変に画面を分けて機能をダウンさせたようなものよりはN88-basic経験者に受け入れられる気がします。
  知名度はN88互換のほうがあるみたいだけど・・・
  所要時間は1時間28分18秒(=5298秒)

ソースは共通だけど随分環境で動作が変わります。
因みに「十進BASIC」でも文法にN88BASICを選ぶと上記のソースでマンデルは描けます。しかし所要時間の表示が同じ画面に出ずに別のテキスト表示専用のウィンドウに出ます。教育用なのでこんなもんかと・・・しかし所要時間は超桁違いの15秒!!これなら我慢できます。
N88と共通の環境にするためにjavaやC#のベンチマーク用の画素数640x480ではなくて
640x400で描かせているのですでにそこで2割のハンディをもらっているのにこの遅さ。
いやはや何をか言わんや!

ExcelのVBA入門へ導入するのにシルバー世代を引き込むためにN88から入ると面白いかもって考えての古いBASIC探しです。まあマンデルなんて描かないとは思うけどね。
合わせてレイトレーシングもやってみるか?

dosvaxj3が更新されていた。

 最近、エミュレータ系をあまり触っていなかったのだけど久しぶりに見てみたらタイトルのようにdosvaxj3が更新されていた。 on emulatorでセルフにcなどのソースを書いて実行するのに母艦側の特定のフォルダをドライブとしてマウント出来たり普通に母艦のimeで漢字が入力でき...