53歳限界プログラマの憂鬱

SU/CAR-ST-APplication-cellsから派生したプログラマのブログ

来訪ありがとうございます
シストレツールを自作してました
自分用の記事が多いのであまり役には立たないブログでした

f:id:sucar:20150414193802p:plain

自作システム詳細目次

linuxがブートしなかったときはとにかく喋らせろ

本家ブログに書いたが中古PCを衝動買いした

supercar.hatenablog.com

そして kona linux 3.0をインストールしてみた

supercar.hatenablog.com

supercar.hatenablog.com

まあなんとか実用的に使える ¥3,240ですがw

インストールの詳細はもっとちゃんとした記事がググれば出てくるので、

linuxがブートしなかったとき

どうすればいいのか? について書いてみたい

最近のlinuxはライブCD(DVD)になってて、インストールしなくてもお試しができる場合が多い

ライブCD(DVD)の入手は雑誌の付録とかもあるけど、ネットからisoファイルDLして自分で焼く

まあCD作らずUSBメモリに入れてブートさせることもできるけど、そこはお好みで

(この辺はググれば出てくるので詳しく知りたい方は適当にググってください)

とにかく、isoファイルをブート可能なメディアに焼いてブートさせるのが第一関門

で、linuxがブートしなかったとき

だけど・・・・

ここでのlinuxがブートしないとは「ブートローダーはブートしてるけど、linuxカーネルが立ち上がってデスクトップ画面まで行かない」という意味で、biosからブートローダーが立ち上がらない場合は、biosのブートの優先順位のあたりをチェックください

とにかく・・・・

まずは、ブートローダー画面が出たら、そのまま待つでもなく、enterを押すでもなく

Tabを押す

すると、下に何やら出てくるので、quiet splash と書かれているところまでカーソルを動かし(普通にカーソルキーで動く)これを消す (普通にBSでもdeleteでも使えるはず)

その後、徐にEnterを押す

これで、ブートの過程を喋って(画面に出して)くれるので

何のエラーで止まったかがわかる

というわけである あとは、その情報からいろいろググってみれば、何とかなる(こともある)という話w

ちなみに自分の場合

  • NECLavie light
  • kona linux 2.3 は普通にブートok
  • kona linux 3.0 basix 3.0 KLUE 2.0 は3つともブートせず
  • ただ、3つとも irqが何たら irqpollで試せ みたいなメッセージが出る
  • TABキー押して オプションirqpollを書き込んでブート
  • それでもブートせず
  • TABキー押して オプションquiet splashを消してブート
  • ズラズラとメッセージが出るが バックライトが何たらで止まる
  • いろいろググって
  • acpi_backlight=vendor をオプションに追加
  • 無事起動^o^/
  • kona linux 3.0 インストール

って感じでした

追記)今試したらirqpollはなくてもブートしました

少し戸惑うのは、最初キーボードはusキーボード配置になってるので = _ が刻印どおりでないってとこかもw

まあ、右側のキーを適当に押して(+shihtも試して)いけばそのうち出てくるから何とかなります

最後はインストール後のGRUB2の設定がややこしいけど、これもググって調べれば何とかなります(vi操作方法忘れてて困ったw)

仮想環境ではなくHDDに直接linuxインストールするのは本当に久しぶりでしたが、ブート周りはややこしいので、安いジャンクPC購入してwinを消して入れるというのが一番いいかも(失敗しても元が安いので)

linuxが実用的に使えれば、リサイクルショップのジャンクPCが宝の山に見えてくるから不思議w vista 2017年4月11日でサポート切れる⇒ジャンクPCw

 

MinGW+msysをUSBメモリに

自作のシストレツール(の一部)をUSBメモリに入れて持ち運べる(所謂portable化)しようとしてるので、まずはMinGW+msysをUSBメモリに入れてみる

正直ただコピーすればいいのだけど、2点だけゴニョゴニョしないといけない

MinGW & MSYS

を参考にしたのだけど

>常に同じフォルダにログイン

>msys.batの中でset HOME=/home/user等とする。

はそのまま採用するとして、

MinGWをMSYSの/etc/fstabを使ってマウント

をどうするか? の問題

要はUSBがどのドライブになるか予めわからないので絶対パスが不明という問題

先のリンク先は

MSYSの/etc/fstabを使ってマウントさせず、直接/mingwへ入れる事です。ドライブレターを含む絶対パスの指定ができないので、こうするのが一番楽です。一応fstabに「../../../../MinGW」のような書き方もできなくはありませんが、msysのフォルダ内ですべて完結させた方が便利です。

とあるので、やってみたのだが、なぜかうまくいかず

同じことをしてもブログネタにならないので、

を思いつき、実行するも「このドライブでは実行できない」と怒られる

いろいろ情報求めていたら

windows.blogo.jp

が見つかる

もっとも、この記事はMSYSを使ってないのだけれども、

path %path%;%~dp0\bin

で、パスを通している

%~dp0をググって調べるとなるほどとわかって

echo %~d0/MinGW       /mingw > .\etc\fstab
set HOME=/home/[username]

とmsys.batの頭で実行することで解決([username]は適当な名前に置き換えてください)

要は毎回fstabを作ってから起動するという仕組み

一応これでシストレツールをUSBメモリで持ち運べる土壌ができたはず

「PCがあればどこでもシストレ」を目指すw

 

SharpDevelopによるprotraのビルド

(追記9/19:現在は山の日問題に対応したver.2.2がリリースされています)

http://www.icsharpcode.net/OpenSource/SD/Download/

から

をとってきてインストール

f:id:sucar:20160827220304p:plainこんなんできる

protoraのソース取ってきてzipを展開しておく(ダウンロードフォルダで展開してよい)

abenomix.hatenablog.com

 

SharpDevelopを起動する

f:id:sucar:20160827221540p:plain

File→Open→Project/Solution

f:id:sucar:20160827221721p:plain

Protra.slnを開く

f:id:sucar:20160827221839p:plain

折角なのでReleaseに変更

f:id:sucar:20160827221931p:plain

Build→Build Solution

これでビルドできます

展開したprotraのソースのフォルダをエクスプローラで開いてbin\Release以下にできたものを入れ替えればok(念のためバックアップとって)

以上です

 

protraのビルド

(追記2019/11/28 本家ブログのprotara関連記事

supercar.hatenablog.com

追記終わり)

(追記2019/3/10 最新ソースは.NET Frameworkのバージョン4.7.2の開発ツールが必要で、この記事の方法ではビルドできないようです)

(追記9/19:現在は山の日問題に対応したver.2.2がリリースされています)

株価データの取得と保存にProtraを使っているが


supercar.hatenablog.com

山の日が原因でデータ更新ができない事態に・・・

しかし、ソースは修正されている

osdn.jp

最新はr527(2016/8/14 8:04現在)であるのでソース取ってくる

r527 >  tree >  protra >  trunk の順にクリック

エクスポート: でzipボタン 

あとは展開してbuildだけど、マイクロソフト系の開発環境はよくわからん私

とりあえず、いろいろググって

ufcpp.net

の記事を参考に

今は、Microsoft Build Toolsに付属しています。 Microsoft Build Toolsは、Visual Studioから、コマンド ライン ビルドに必要なツールを抜き出したもので、無償で手に入ります。 インストール先はPrograms Files直下にできるMSBuildというフォルダーで、この中にcscも入っています。

とのことで、Microsoft Build Toolsを入手

で、ビルド方法ですが

ですが、当然パス通ってないのでフルパスで入れる必要あり

自分の環境では

"C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild"

を実行すればokでした

後はbin\Debug以下にできたものを入れ替えればok(念のためバックアップとって)

あとで調べたら

qiita.com

Microsoft Build Toolsを入手しなくても既に入っていたようです(調べたら確かに)

追記)

単に"C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild" を実行するとDebugオプション付でビルドされます

Release構成でビルドするには

"C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild" /p:Configuration=Release

とすればよいようです

あと、NAnt.buildのあるディレクトリへ と書きましたがMSbuildが読んでいるのはProtra.slnのようです

 

Tcl/Tkによるお手軽GUI(CUIを補助)

mingwでTcl/Tkがビルドできた話は前に書いたが 

abenomix.hatenablog.com

折角なので、一応ある程度使えるレベルにまでしてみた

まずはスクショ

f:id:sucar:20160812084223p:plain

メニューバー付くとちょっといい感じに

GUIなんだけどお手軽GUICUIを補助する感じのもの

なので、シェル・コンソールから切り離されてはいない

どういうことかというと・・・・

まず、最初はshell scriput コマンド scr をコンソールから実行

scr
--------------------------------------------
 echo from CUI to GUI by Tcl/Tk
./tcltk/scr.tcl
./@@@@
--------------------------------------------

./tcltk/scr.tcl がGUIの実体だけどその次に謎の@@@@を起動している

./tcltk/scr.tcl
-----------------------------------------

#!/mingw/bin/wish86.exe
proc cmdw {arg} {
exec echo $arg > ./@@@@
exit
}
proc cmdwl {arg} {
exec echo $arg > ./@@@@
exec echo scr >> ./@@@@
exit
}
proc cmdwl2 {arg1 arg2} {
exec echo $arg1 $arg2 > ./@@@@
exec echo scr >> ./@@@@
exit
}
proc slnmK3a {} {
exec echo cd ./Selenium > ./@@@@
exec echo echo cd ./Selenium >> ./@@@@
exec echo ./kabucom3a >> ./@@@@
exec echo echo ./kabucom3a >> ./@@@@
exec echo cd .. >> ./@@@@
exec echo scr >> ./@@@@
exit
}

wm title . "SU/CAR-ST-AP-cells"
wm iconbitmap . ./tcltk/pike32.ico
wm resizable . 0 0

image create photo stap -file ./tcltk/staps.gif
image create photo matsui -file ./tcltk/matsui_logo.gif
image create photo kabucom -file ./tcltk/logo-kabucom01.gif
image create photo firefx -file ./tcltk/firefox.gif

#button .bdl -text "DL" -command {exec cmd /C start http://k-db.com/stocks/}
#button .bpr -text "Prtr" -command {exec bash -c ./Protra/Protra.exe &}
button .bst -image stap -command {exec cmd /C start http://supercar.hatenablog.com/}
button .bmt -image matsui -command {exec cmd /C start https://www.deal.matsui.co.jp/ITS/login/MemberLogin.jsp}
button .bkc -image kabucom -command {exec cmd /C start https://s10.kabu.co.jp/_mem_bin/members/login.asp?/members/}
button .bkf -image firefx -command {exec bash -c firefox &}

button .b0 -text "Q buy" -command {cmdwl ./suQ/carbuy}
button .b1 -text "Q buy2" -command {cmdwl ./suQ/carbuy2}
button .b2 -text "R _now" -command {cmdwl ./suR/car_now}
#button .bsn -text "SlnmK3a" -command {slnmK3a}
button .b3 -text "Exit" -command {cmdw exit}
pack .b0 .b1 .b2 -side left -fill y
pack .b3 .bst .bmt .bkc .bkf -side right -fill y

menu .m -type menubar
. configure -menu .m

.m add cascade -label "Preparation" -underline 0 -menu .m.m1
menu .m.m1 -tearoff no
.m.m1 add command -label "Download" -underline 0 -command {exec cmd /C start http://k-db.com/stocks/}
.m.m1 add separator
.m.m1 add radiobutton -label "Protra" -underline 0 -command {exec bash -c ./Protra/Protra.exe &}
.m.m1 add separator
.m.m1 add command -label "Exit" -underline 0 -command {cmdw exit}

.m add cascade -label "systemQ" -underline 6 -menu .m.m2
menu .m.m2 -tearoff no
.m.m2 add command -label "Buy" -underline 0 -command {cmdwl ./suQ/carbuy}
.m.m2 add command -label "buy2" -underline 3 -command {cmdwl ./suQ/carbuy2}
.m.m2 add separator
.m.m2 add command -label "Output" -underline 0 -command {exec cmd /C start ./suQ/output/carall.txt}

.m add cascade -label "systemR" -underline 6 -menu .m.m3
menu .m.m3 -tearoff no
.m.m3 add command -label "Now" -underline 0 -command {cmdwl ./suR/car_now}

.m add cascade -label "Selenium" -underline 0 -menu .m.m4
menu .m.m4 -tearoff no
.m.m4 add command -label "Open" -underline 0 -command {exec cmd /C start ./Selenium/kabucom3a.csv}
.m.m4 add command -label "Kabucom3a" -underline 0 -command {slnmK3a}
---------------------------------------------

わかりますでしょうか?

時間のかかる処理は実行しないでechoで./@@@@にリダイレクトしているだけ

そして最後に scr を追加しそのままGUIプログラムを終了してる!

 proc cmdwl {arg} {
exec echo $arg > ./@@@@
exec echo scr >> ./@@@@
exit
}

GUIプログラムは終了するけど、やるべき仕事は./@@@@に書いてあるので

最初のshell scriput コマンド scr に制御が戻った際に、./@@@@を実行してくれる

そして、./@@@@の最後にはscrが書いてあるので再びscrが起動し最初に戻る

という仕組み

トリッキーだけど結構便利なワザで、MS-DOS時代(1990年前半)に覚えた

メモリを食わないメニュープログラムが作れて重宝しました

これで、GUIは単なるCUIの補助として使えて便利

GUI化してないコマンドはGUIを終了してコンソールからCUIで実行

GUI使いたいときはコンソールからscrとタイプすればいい

まあ、プロトタイプならありでしょ?

ユーザーは自分だけだしw

 

システムQに市場限定フラグ追加

久々にシステムに手を入れたので記録

ちなみにシステムは2つあって

  • 旧システム C言語でシグナルを出す 
  • 新システム R言語でシグナルを出す

ということなんだけど

supercar.hatenablog.com

ということで

  • 旧システム システムQに改名
  • 新システム システムRに改名

となりました(それがどうしたw)

で、システムQの方で

bin/data1000_200

----------------------------------------------------

ls -r ~/stockstr |head -1000 > ./data.cfg
./bin/picdaihhntr |sort |uniq > ./code/a.txt
# 除外コード処理 jjhishi.txt
cat ./code/bb.txt ./code/jjhishi.txt |sort |uniq > ./code/b.txt
rm ./code/bb.txt
cat ./code/a.txt ./code/b.txt | sort | uniq > ./code/all.txt
cat ./code/b.txt ./code/all.txt | sort | uniq -u > ./code/code.cfg
ls -r ~/stockstr |head -200 > ./data.cfg
# 共通な行を抜き出す
cat ./code/code.cfg ./code/T1.txt | sort | uniq -d > ./code/codeT1.cfg

---------------------------------------------------

./code/T1.txt 東証1部のcodeを羅列したものを準備しとけば

./code/codeT1.cfgを作ってくれる

 以下は参考過去記事

abenomix.hatenablog.com

まあ、sortとuniqの応用テク

bin/data1000  も忘れずに

----------------------------------------------------

ls -r ~/stockstr |head -1000 > ./data.cfg
./bin/picdaihhntr |sort |uniq > ./code/a.txt
# 除外コード処理 jjhishi.txt
cat ./code/bb.txt ./code/jjhishi.txt |sort |uniq > ./code/b.txt
rm ./code/bb.txt
cat ./code/a.txt ./code/b.txt | sort | uniq > ./code/all.txt
cat ./code/b.txt ./code/all.txt | sort | uniq -u > ./code/code.cfg
# 共通な行を抜き出す
cat ./code/code.cfg ./code/T1.txt | sort | uniq -d > ./code/codeT1.cfg

-----------------------------------------------

で、C言語ソースの方でこの./code/codeT1.cfgが使われるようにしないといけない

main/simxp8trsu_nobug.c

------------------------------------------------

:

int main (void) {
//2016/8/11 市場切り替え対応
#ifdef SHIJOU
  char* c_cfg=SHIJOU;
#else
  char* c_cfg=".\\code\\code.cfg";
#endif
//

:

-----------------------------------------

こうやっておけば、SHIJOUが定義されてれば、c_cfgを変えられる

(simxp7trsu_nobug.cも同様に)

で、

awk/mt_h.awk

----------------------------------------------------

:

$1=="T1" {
 # print "#define SHIJOU \".\\\\code\\\\T1.txt\""

  print "#define SHIJOU \"./code/T1.txt\""
}

:

-----------------------------------------------------

これで

f:id:sucar:20160811123911p:plain

とルールを記述しとけば対象が東証1部onryになる

という仕掛け

まあ、メタプログラミング的な手法のおかげで仕様拡張がいろいろできて面白いなw

 

 

 

Tcl/TkをMinGWでビルド

開発中の自作シストレツールは基本的にshell scriptの寄せ集めで、完全にCUIなんだけど、自分で作ったコマンドの使い方とかすぐに忘れるので、簡単なGUIラッパーみたいなものを作りたい

JScriptHTAというのはやったことがあるのだが、なんか将来なくなりそうで(マイクロソフト次第)ちょっと・・・・

折角のmingwなので、unix的なものがいい

ということで、Tcl/Tk(よく知らんけどw)とかはどうだろうか?

レガシーで全然トレンドじゃないけど、意外にこういうものはなくならないし、どんな環境でも動作するような気がする(awkとかsedとかm4とかetc)

http://www.tcl.tk/

ここ↑から最新のものがDLできるが

nantonaku-shiawase.hatenablog.com

どうやらmingwでソースからビルドできるらしい

で、最新の8.6.6を取ってきてビルド

できたw 簡単

test.tcl

-------------------------------------------------

#!/c/mingw/bin/wish86.exe
button .b -text "su_/car" -command "exec bash -c ./su_/car"
pack .b

----------------------------------------------

f:id:sucar:20160807061051p:plain こんなん出ましたw

ボタンをポチると買いシグナルを出すシステムが走る

うーん、ちょっと感動的w

しかし、ソースのtar取ってきて展開して自分でビルドって何年振りだろう?

1990年代(古い)にlinuxに嵌って、パソコン通信で ftpmail使って uuencode された(以下自粛)~

TclTkちょっと調べて使えるようになって、うちのシステムもGUI化を目指そう

高齢者はとことんレガシーで行こうw