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

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

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

f:id:sucar:20150414193802p:plain

自作システム詳細目次

kona linux でswapがマウントされていなかった件

kona linux 3.0 light をインストールしたのですが、インストール時にswapパーテーションを作ったはずなのにマウントされていないことが判明

kazmax.zpp.jp

↑ここを参考に手動でマウント

f:id:sucar:20161012211957p:plain

/dev/sda4 がswap パーテーションなので、

suでrootになって

# mkswap /dev/sda4
# swapon /dev/sda4

で、手動でswapをマウントできた

あとは、/etc/fstab を編集すればいいはず

/dev/sda4 swap swap defaults 0 0

と記述してうまくいった

しかし、UUIDって何? 状態w

いろいろググってなんとなくわかってUUIDでも無事設定できた

UUIDは

# blkid

で調べられる

linuxインストールするの10年以上ぶりだけど、いろいろ進化してるのね?

 

TckTkのmingwでのビルドがエラーになる件

前にTclTk8.6.6をmingwでビルドした記事を書いた 

abenomix.hatenablog.com

確かにビルドできたしきちんと動いている

ところが別のPCでビルドしたらこけてしまった

違いとしては

  • ビルドできた環境  gcc 4.8.1
  • ビルドできなかった環境  gcc 5.3.0

ちなみに会社のPCのmingwgcc 4.9.3 でこれもビルドがこけた

本当にgcc のバージョンだけが原因かどうかは不明だが、些細な?環境の違いでビルドできたりできなかったりするのは確かです

mingwを今DLしてセットアップすると、gcc 4.8.1にならないので今後のことを考えるとちょっと困った事態になった感じ

ちなみにgcc5.3.0になっちゃったのは mingw-get upgrade を実行したらgccもupgradeされたということです

D:/MinGW32/msys/1.0/home/scr/tcl8.6.6/generic/tclInt.h:115:38: error: 'uintptr_t' undeclared (first use in this function)
# define PTR2UINT(p)((unsigned int)(uintptr_t)(p))
というエラーで

'uintptr_t'なんて知らん 宣言しろボケ

ってgcc様がのたまう

しかし、win/configureは

checking for uintptr_t... yes

って言っている

uintptr_t についてまったくわからなかったがいろいろググってなんとなく理解はできた

32bit 環境と64bit 環境でアドレス幅が違うからその違いを吸収するためにあるらしい

非常に困ったが自力で何とかしてみたので以下参照

 

<解決法1> uintptr_t を消すw

非常に強引だけど、よくわからないながら、uintptr_t さえなければいいのでw

エラーで落ちたとこは

# define UINT2PTR(p) ((void *)(uintptr_t)(p))
# define PTR2UINT(p) ((unsigned int)(uintptr_t)(p))
となっていて2重にキャストしている

なので強引に

# define UINT2PTR(p) ((void *)(p))
# define PTR2UINT(p) ((unsigned int)(p))
としてみるw

結論からいうとこれでビルドは成功し、動作もOKだった

ただ、あまりに強引すぎるので、確認のため

test.c

#include <stdio.h>
#include <stdint.h>

void main(void) {
  printf("%d%d%d\n",sizeof(void*),sizeof(unsigned int),sizeof(uintptr_t));
}

テストプログラムを作って実行してみると

$ gcc test
$ a
444

と全部4(つまり32bit)となるので、一応問題はなさそうである

 

<解決2>

しかし、解決1は気持ち悪いのでちゃんとした解決法がないかいろいろ考えてみたんですが・・・

仮に自作ソースでundeclaredと言われたら原因として何を考えるか?

というと

ヘッダを#includeするのを、つまり #include <stdint.h> 忘れてました

 となるのでまさかと思い調べてみると

tclInt.hの頭に

#include <stdint.h> 

がないことが判明!

半信半疑で

#include <stdio.h>の次の行に

#include <stdint.h>を追加してみると・・・

無事にビルドできました

これはバグなんだろうか?

でも、それではなぜ gcc4.8.1ではビルドできたのだろうか?

なぞは深まるが解決したからまあいいかw

 

 

 

 

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