2023年6月17日土曜日

macosをupdateした。

 仕事に使わないリビング用PCにmacbook pro 2013 lateを使っている。

興味のあるちょっとしたプログラム書きとwebブラウジングにしか使ってないのでmojaveと心中するつもりでいたんだけどpythonのライブラリーでcv2とか入らないのが出てきたので他のプログラムはともかくdotnetとpythonとccで動かないといろいろと支障が出る気がしていんだけどchromeからもmojaveは今後アップデートしないよって言われたもんだから急遽big surにupdateすることにした。

ディスクをクリーンしておいてtime machineでバックアップしてシステム設定からbig surを指定して約数時間で更新完了。

その後も起動時に32bit版だから上げてねみたいなメッセージに一通り答えて、ついでにもう使わないからいいやと思えるpallarelsとか消してちょっと落ち着いたのでこのページを書くことにした。この際にと思ってxcodeとかも消したのでgccとか無いけど多分困らん。c-langあるし。

big surについてはいろいろと心配してたんだけどいざ上げてみたらなんだか動きもスムーズでとってもいい感じ。ms のwin11が自動の更新で激重になったり勝手な更新のあとに不具合が出て翌日に再び更新が配布されたりとかするイメージが強いのでいささか拍子抜け。
やっぱり対象となるハードウェアが絞れてるとOS配布側は楽なんだろうな。

ともあれもう少しの間この老朽macbookにも頑張ってもらってせいぜいお付き合いしてもらうことにした次第。ちなみにbig surへのupdateを決めた一つの要因のpythonのcv2ライブラリーが入らない問題も簡単にできた。以下はネットで見つけたnumpy+cv2で作成されたjpeg


(06/22)追記
快調に思えるbig surなのだがdotnet で不具合が発生した。
dotnet runするとAppHostに署名できないと言われてしまう。
sdkのバージョンを上げてもだめですぐさま解決ができない。
(力不足だなあ)
当面は他の言語でお茶を濁すか

(06/26)追記
dotnet sdkとruntimeの7系をとりあえずuninstallした。6系は怒られずにdotnet runでレスポンスを返してくれるのでしばらくmacosのdotnetはこれで行こうと思う。
.net6はLTSだしね。次は.net8が出たらwindowsと共通化できるか見てみる。

※osのバージョンが古すぎてインストールできないと叱られて保留していたdosbox-xの最新はインストールできた。windowsとちがってキーボードの再マッピングが必要みたいだがエミュ系をお休みしている関係でこの作業はしばし待つ。ま、dosbox-xでは残念なことにpc98をmachineに指定してもn88basic(86)は動かないしね。(windowsならanex86でお茶が濁せるのにね)

(07/07)追記
06/26に7系のsdkなどを消したらビルドなどが通ってしばらくはsdk6でみたいなことを書いてて今日ちょっといじろうとしたらdotnet runコマンド発行で下記のエラー

hillvis-MBP:asc hillvi$ dotnet run

/usr/local/share/dotnet/sdk/6.0.200/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.targets(550,5): error NETSDK1177: エラー コード 0 が発生して AppHost に署名できませんでした: xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun [/Users/hillvi/csharp/asc/asc.csproj]

/usr/local/share/dotnet/sdk/6.0.200/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.targets(550,5): error NETSDK1177: /Users/hillvi/csharp/asc/obj/Debug/net6.0/apphost: the codesign_allocate helper tool cannot be found or used [/Users/hillvi/csharp/asc/asc.csproj]

/usr/local/share/dotnet/sdk/6.0.200/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.targets(550,5): error NETSDK1177:  [/Users/hillvi/csharp/asc/asc.csproj]


ビルドに失敗しました。ビルド エラーを修正して、もう一度実行してください。

原因がわかるまでmacosでdotnetいじるのは見合わせます。力不足に涙。 

 



2023年5月28日日曜日

csvからsqliteのtableを作る

 今日からしばらくは 「ズボラなpython野郎のライブラリー利用」を書く

第1回はcsvのデータからsqliteのテーブルを少ない手数で作る方法を示す。

例えば顧客マスターのデータをある程度の数を用意してプログラムの開発をしたいときにちまちまと手入力するのはつらい。
で、そんなときにお世話になるのが「なんちゃって個人情報」さん。

とりあえずこちらで適当に項目を取捨選択して5000件のcsvを用意した。

次はpythonでこのcsvファイルをsqliteのテーブルデータに変換したいのだけど前処理として2つやるべきことがある。

  1. 「なんちゃって生成」のボタンを押して落ちてくるデータの名前がdummy.cgiなので拡張子をcsvに変えておく
    おいらは「Dummy個人情報5000.csv」とした。
  2. 落ちてきたファイルの文字コードがwindows向けにshift-jisなのでutf-8に変えておく。方法はlinuxな方たちはnkfとか使うのかもしれないけどコマンドのパラメータの渡し方を調べるのが面倒だったのでvscodeで読み込んで全行を選んでencodeをutf-8に変えてから貼り直して保存してやりました。
いよいよpythonの登場。
この時の前準備はpandasをpythonのライブラリーに追加しておくこと。
準備ができたらcsvを保存したフォルダでpythonを対話モードで起動して下記の操作をする。

import pandas as pd
import sqlite3

df=pd.read_csv("Dummy個人情報5000.csv")
with sqlite3.connect("test.sqlite") as conn:
      df.to_sql("personal",conn)

以上で完了
参考(丸パクリ)にしたサイト
  1. https://note.nkmk.me/python-pandas-read-csv-tsv/
  2. https://happy-analysis.com/python/python-topic-pandas-sqlite3.html
上記の操作でcsvと同フォルダにtest.sqliteというファイルが作成される。
DB Browser for SQLite などで中を見るとpersonalというテーブルにcsvの1行目のヘッダ情報を項目名として読み込まれていることが確認できる。めでたし。

次はpythonのsqlite3ライブラリーでいろいろ読み込んでみよう。

pythonの対話形式でやるとまずは

import sqlite3

conn = sqlite3.connect("test.sqlite")
cur = conn.cursor()

cur.execute("select * from personal")

print(cur.fetchall())

cur.close()
conn.close()
まででpersonテーブルの全レコードが画面に出るけどまあ見えない。(多過ぎ)

cur.executeの中身を"select 性別, count(氏名) as 人数 from personal group by 性別" とかにすると
print(cur.fetchall())で
[('女', 2456), ('男', 2544)]
のような結果を得ることが出来た。select結果はfetchでタプルのlistになるようだ。

cur.executeの中身はcrudなら何でも通るのでinsert,update,deleteも使って自由にテーブルの中を操作できるしselect でデータレコドを抽出することも楽勝。
しかし素のsql文を毎回書くのは怠い。
pythonには「orm」つまりテーブルの操作をオブジェクトの操作として記述できるライブラリーが複数存在するので次回はその点を掘る。

2023年5月26日金曜日

方向性、今後に向けて

 ずいぶん迷走状態が続くこのブログだけど次の方向性として下記のようなことを考えていた。

  1. 8bitのBASIC(cp/mエミュレータで動かす)などで画面入力を伴うプログラムを作成。
  2. そのデータ(文字コードがshift-jisの固定長のテキストデータを想定)を変換して処理するようなプログラムを現代的な言語で書く(C#を考えていた。)
  3. それをsqliteなどに入れて1.のような仕様のプログラムがいかに簡単かつ高機能に書けるかを示す。
などを考えていたけど1.2.の関係があまりに唐突で技術的な面白みにも欠けると思えてきた。
なにより「誰得」が強過ぎて・・・もう少しマシな方向を考えねば・・

で、やはりいろんな言語をつまみ食いして人様の考案された車輪の再発明とか後追いとかに終始するとはいえもう少し面白みを持たせることを目標にする。
  1. 一番重点をおくのは.NET系の処理系を用いた実用システムの要素を研究すること。
  2. しかしms officeとかvbaとかの技術からの脱却も考える。(主にpythonとか)
  3. web系にも多少は手を伸ばす。
時間は有限だし手も短いので面白いことを食い散らかすにしても出来る限り統一感というかビジョンを持っていろんなことに首をつっこむことにしようと思う。
最近は手を動かすことが億劫になってもきているので日々楽しくコーディングをしたい。
(macとwindowsで共通のコマンドライン環境でプログラムをするというのは.netよりもpythonあたりで解決する方がずっと良い気がしてきたことも上記の理由でもある。)

さてなにから取り掛かろうか?

2023年5月13日土曜日

分かったことと、不明なことー相変わらずの半可通

 c#でdotnetでのコンパイル&ビルドやscriptをmacosとwindows11でいじってみていろいろと発見できたことがある。同じソースで動かすというのはそれなりに難しいかもしれない。

1).csprojの中のパスが異なるのでソースが同じところにあるからと言ってwinとmacでコンパイルできるわけではない。
2).net6と.net7を混在するともっと混乱は増大する。
(合わせておく方がまだマシ)
3)csxで#rでnugetするのはwinではできてもmacだと動かないことも多い。なぜだ??
4)もしwindows,macを混在させないのなら、またnugetでデータベースのドライバーを持ってきたりするのをやめるならあんまりc#にこだわる意味はない。

読んでみてなんと自分の力不足と理解度の低さに驚いたけど仕方が無い、現実だ。受け入れよう。

c#ですらこんな状態なのにf#もちょっとかじり始めたもんだから余計に混乱しているのだろうか?

これはもう一度いろいろなことを0から仕切り直す必要があるのかもしれない。方向性を探り直すことにする。


2023年4月27日木曜日

ちょっと負けた感

 この1月、dotnet scriptでというかcsxでsqlite3を接続して実験をしたいと思って試行錯誤を繰り返してきたのにまだうまくできない。ネット上にもあまり事例がなくて参考になる情報が見当たらない。とくにdllの参照がうまくいってないって叱られて進めないんです。

この辺りは経験値が高ければこうやればっていろんなアプローチが思いつくんだろうけどいかんせんそのあたりの体験がまだまだ不足。

もう少し頑張ってみるけどここでうまくできないとVS頼みの駆け出しになってしまう。
(ってもうなってるのか?)

くそー!敗北感がすごいぞ。もう少し調べてみよう。

2023年3月28日火曜日

かねてよりの念願の試み

 ここのところ、c#をdotnetコマンド配下でvs codeでソースを書いて実験するのを日課にしている。これだとWindows,WSL,macos xのいずれの環境でもconsoleなら共通で書けるし、かなりの部分でソースの共有も出来ている。

これが同じdotnetでもWPFとなるとwindows専用と化してはしまうがvsを使って書くよりも格段に脳への刺激が多くなると思う。
(我が脳が若い時より格段の劣化を遂げているとしても)

で特に参考となるモノを見ずにエラーメッセージとvs codeの提案に従って書き上げた超簡単なguiのxamlがこちら

全く慣れてないことが見事に露見するであろう内容ですね。
特にStackPanelの位置を上下のマージンでペタぽと的に決めようとしている辺りが初心者以下感が満載ですね。
でもこんなんでも一応動くということにある種の感動を覚えます。
一応クラスの内容を書いて動かしたのが下図。(いつものmandelbrot)
あ、描画ボタンを押したときにテキストボックスに所要時間を書き込むの忘れているわ、後で足しとこう。
ソースは全くc#してないしoop的でも宣言的でもないので晒しませんが逆に言えばvsのポトペタの設計支援が無くてもこのくらいの画面なら一応書けてしまうのがdotnet+WPFの良きところではないかと・・・

gui無しならconsoleでcsxを使うといろいろな実験が結構気楽にできてc#の動作確認に役立ちますね。素晴らしい。

暫くはトライアンドエラーの繰り返しを行いつつc#感を身に付けたい。
次はsqliteと組み合わせてみたい。



2023年3月22日水曜日

環境の変化と時間

 4月から1つの得意先が消える。
社長の退陣で自分の一存で継続が決められないのでしかたが無い。

ものは考えようで月に何日かが確実に空くのでこの機会にいままでより掘り下げて学びたかったことをやってみようと思う。

まずはc#である。window forms+adoでネットをググりながらならどうにかこうにか動くソースを書くことが出来たけど仕事というにはレベルが低すぎた。もう一度1から全体を見直して何かのプログラムを書くときにはまずc#で書いてみる、思考するという対象になるようにしたい。

最近のmicrosoftのofficeの中のaccessの扱いを見ていると今後の開発に不安があるのは確か。出来ればほとんどをc#で記述してaccessはruntimeで簡単な部分やまだc#のスキルが追い付かない複雑なレポートなど限定された分野に限って使うようになるのが良いように思うのでその位置に早くたどり着けるようになるべく努力したい。
※ runtimeで配布となるといたるところにon errorを入れることになるがそれは我慢、忍耐、修行で・・・

学んだことで面白いと感じたことなどを励みのためにこのブログに書いていこうと思う。

dosvaxj3が更新されていた。

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