2021年1月5日火曜日

macbookのmacosを更新した

 昨夜から今日にかけてmacbook pro(2013 late)のOSをsierraからmojaveに更新した。
買ったときはmavericks(10.9)だったのを昨年、結構考えてsierra(10.12)にしたのだが今回さらなる更新に及んだのである。

ハード(2013 late)とmacosの乖離が大きくなるほど導入後にいろいろな傷が出てくると思うのでいよいよこのmacbookでのOS更新も最後であろうかと思う。
そもそもsierraからhigh sierraにするのをためらっていたのもSSDのフォーマットが大きく変わることへの不安が大きかった。で、1世代見送って様子をみて今回のmojaveである。

変えてみて思うのは、本当にmacはよく出来ていてOSを上げても体感上の重さはほとんど感じない。また僕が入れている程度のmacのソフトはそのまま動いている。最終的にどのように感じるかは現時点ではわからないけどtime machineでバックアップも取ってあるので不安は少ない。いざとなればもとに戻すだけのことだ。

parallelsで入れているwindows10は先回のOSアップでboot campとの併用はできなくなってしまったのであくまでもmacos使用時にどうしてもwin10を使いたくなったときの逃げ場として動くかどうか見ておく。最初メモリーを2GBふってあったのだがやっぱり重くなりやすいので3.5GBに変更した。あとは以前のままだが結構サクサク動くので驚き。(ただしmacbookの左の下は結構熱くなる。)

まあ仕事でどうしてもmacじゃなきゃだめってものは現状無いので気楽に楽しく付き合っていこうと思う。

2021年1月3日日曜日

すっかりアルゴリズムなし脳になっているので数字パズルを解く

 超ひさしぶりに頭を使うことにしよう。

結構ポピュラーな数字パズルを解く。
 SEND
+MORE
-------------
MONEY

を考える。言語はなんでも解けると思うけど今はpythonで

最初は総当たりのもっとも原始的なループでの方法を考える。
変数 S,E,N,D,M,O,R,E,Yをすべて0−9のループで回す。

できたのがこれ

#SEND+MORE=MONEYを総当たりで解く

for s in range(10):
for e in range(10):
for n in range(10):
for d in range(10):
for m in range(10):
for o in range(10):
for r in range(10):
for e in range(10):
for m in range(10):
for y in range(10):
if (s*1000+e*100*n*10+d)+(m*1000+o*100+r*10+e)==m*10000+o*1000+n*100+e*10+y:
if s>0 and m > 0:
print(s*1000+e*100*n*10+d,m*1000+o*100+r*10+e,m*10000+o*1000+n*100+e*10+y)


なんだかすごいことになっている。ちょっとこれはないわ。プロンプト帰ってこないし・・

あ、eとmがダブってループしてました、酷い。

そもそもいくら総当たりとはいえrangeですべて回すのは頭悪すぎ
14行めのif s>0 and m>0: はこれが無いと平気で 3009,301,3310とか出力してきちゃうので各変数文字の重複を禁止するのと4桁なり5桁の数値の頭が0じゃない判断くらいはしろよと・・

で、ほんのちょっとだけ数学的に考えると同桁の数値を足して繰り上がるのは1しかないのでm=1は確定だし下からの繰り上がりを考慮してもm(=1)と足して繰り上がることができるsは8か9になる。この辺りの縛りと重複を避けるようにして先程のプログラムに手を入れると

#SEND+MORE=MONEYを総当たりで解く
#各変数は重複せずm=1,sは8 or 9で考えると

m=1
for s in [8,9]:
kouho = list(range(10))
kouho.remove(m)
kouho.remove(s)
for e in kouho:
kouho.remove(e)
for n in kouho:
kouho.remove(n)
for d in kouho:
kouho.remove(d)
for o in kouho:
kouho.remove(o)
for r in kouho:
kouho.remove(r)
for e in kouho:
kouho.remove(e)
for y in kouho:
if (s*1000+e*100*n*10+d)+(m*1000+o*100+r*10+e)==m*10000+o*1000+n*100+e*10+y:
print(s*1000+e*100*n*10+d,m*1000+o*100+r*10+e,m*10000+o*1000+n*100+e*10+y)

となる。だけど上の方法ではうまくループが回らない。
(ああ、ここでもeを重ねてループしてるわ、リハビリ必要)
e以下のremoveを止めると・・・・あー分からない もう少し頭を冷やして考えよう

そもそもいろいろ忘れていてコードの効率が悪い。
重複のチェックにsetを使うことまでは頭が回るけどkosuu= set()
kosuu.add(m)みたいに8個の変数でやる。これは素人以下。頭を冷やそう。

#SEND+MORE=MONEYを総当たりで解く
#各変数は重複せずm=1,sは8 or 9で考えると

m=1
for s in range(8,10):
for e in range(10):
for n in range(10):
for d in range(10):
for o in range(10):
for r in range(10):
for y in range(10):
if len(set([m,s,e,n,d,o,r,y]))==8:
send=s*1000+e*100+n*10+d
more=m*1000+o*100+r*10+e
money=m*10000+o*1000+n*100+e*10+y
if send+more==money:
print(send,more,money)

結局上のリストのようになりました。なんだかシンプル。まだまだpythonの基本がわかってない。

単に途中までパズルをときかかったのでもう少し進めると

m=1、s=8 or 9より判った分の文字と数値を入れ替えて s=8と仮にすると
 8END
+1ORE
-------------
1ONEY となる。桁上りするのでE+0>10なのだが千の桁が桁上りすると0がゼロになるがそれだとE+O>10が満たせないのでS=9が確定、同時に0はゼロ これをはめ込むと
 9END
+10RE
-------------
10NEY     である。さらにこれでN=E+1なのでE+1+R(+1)=10+Eでカッコのの桁からの繰り上がりの有無を考えると、必要となるので(9が使われているので)R=8となる。見難いけど
 9E(E+1)D
+108E
10(E+1)EY 2・3桁目は桁上りだけなのでD+E=10+YでDとEは(7,6)(7,5)のいずれかの組合せとなる(6,5)では和の1桁目が1となり既に使用済み。E=7とするとN=8となり不可
E=6なら
 967D
+1086
1076Y となり繰り上がれるDは5のみだがY=1になるので不可 よってE=5

 956D
+1085
1065Y で繰り上がれるDは7でYは2となる。

ちなみにパズルの答えは正しく 

Send = 9567
More = 1085
Money = 10652

一応記述したプログラムも同じ解を表示しているので今日は良しとする。

2021年1月2日土曜日

年間1万行計画

 この1年を通していろんなソフトウェアに関する見識を広めたい。

で、年間1万行のコードを書くことを決めた。まあ週に200行ってことだ。
毎日コードを書くことを生業にしている人から見たら笑っちゃうぐらい小さな目標だけど有意なコードをこのペースで書くって意外としんどいと思うので自分には分相応なかんじ。
三賀日は3日で評価して以後は毎週末に200行で何を書いたか見せられたらいいね。

で、早くも自分への甘々な性格が鎌首をもたげてきて勉強になるちゃんと1つの動く形のソースなら写経でも可能とするとした。(特に習慣化してエンジンがかかるまでは広い目で・・)

まだ少し早いけど現時点で見せられるのはこれ

C#だとmacで動かなかったり(本当は動くらしいけどWindowsとGUI共通でない)するので標準的な試行言語(なんとなく手を動かして試行錯誤するうちに目的のものが書ける感じ)としてpythonを使いたい。で、そのGUI開発のライブラリとしてPySimpleGUIを評価し始めたのだけどなんとmacbook(のmacos)だとテキストボックスが編集できない。対策としてwxPythonベースのPySimpleGUIWxを使うことにした。ソースのimportのターゲットだけwx付きに書き換えたら動くことを確認したのが上の画面。wxの方がちょっとウィジットのバランスが悪い気もするけどちゃんと編集できたので嬉しいからよしとする。

これでGUI系の写経で100行くらいゲットしたわ。(新年早々からずっこいこと)

上記の必要でwxPythonを入れたのでついでにBASICを弄りたい。なんて邪心を抱いてwxBASICをmacbookで入れようとしたらうまく入らなかった。きっとこれはBASICなどというもの貴重な時間を用いずにpythonに励めという天啓だと思い肝に銘ずる事にした。
ついでにLazurusもクロスプラットフォームだと頭をよぎったけど・・


2020年12月29日火曜日

とにかく挙げる

 ああ、なんて末期症状

今年の最終2ヶ月は忙しすぎて興味ある分野に時間を割けなかった
結果としてこのブログの更新が少ない

来年こそはpythonを全方位的に活用するぞ!!

こんな尻窄みの結論をもって今年最後のブログアップとするのは実に残念

2020年11月27日金曜日

偏った仕事の傾向と対策(あるいは楽しみ方)

 最近(ここ1月くらい)のしごとが偏っている

Excel単体かExcelで行っていた仕事をデータベースを使って自動化するか、
上位のデータベースから降りてきたデータをオレオレ仕様の当人だけが使いやすいと思っているExecelに転記するといったExcel絡みの仕事ばかりなのだ。

当然やっていて楽しくないことは無いのだがVBAの退屈さを思ってしまう。
なぜならVBAって工夫してもパズルになるだけでエレガントとは遠いのだ。

でも仕事だからこなすけど来月こそは楽しいコンピューティングに勤しむぞ。
それと最近おろそかになっているアナログ系もやらなきゃ
とりあえずはヘッドホンアンプを作ろう

2020年10月6日火曜日

とりあえずはmacbookでcp/m遊びだ。 - エミュとSBC(これもエミュ)

 まずはmacbookにcp/mのエミュレーション環境を作った。
とまあ偉そうに書いてもcp/mのエミュレーションソフトのaltairz80をダウンロードして入れただけなのだが・・・
トラブルめいたものとしてはfinderで直接ダブルクリックしてもうまく行かなくてコンソールから./altairz80 cpm2のようにコマンドラインで入力しないと起動できなかった。

でもうまく行ってからは割といい感じ。
デフォルトではmbasicぐらいしか使えるソフトがないのでとりあえずturbo pascalを入れてみた。

実に快適に動いている、コンパイルも速い。さすがのmacでターミナルのフォントも見やすくて久しぶりに見ても洗練されている。強いて難点を上げるとダイアモンドカーソルのup-cursorにあたるctrl+eを押すとエミュレータを抜けるので対策が必要になる。
やり方は簡単でtinstで設定できる45個のキー設定のうちの6番目のline-upをctrl+eからカーソルの矢印キー押下で設定しなおす。ほかのダイヤモンドキーの配置からは離れるが当面はこれで。コマンドのRとWで母艦のOS側とのやり取りもしやすいのでそちらで編集するほうが楽だけど緊急時にスクリーンエディタがあると本当に楽なのだ。

エミュレータのaltairz80でturbo pascalを動かすとエスケープシーケンスがそのまま出てくるのでaltairz80をターミナルで起動後にctrl+eを押してエミュレータを抜け、attach SIO 23としてからgoコマンドでaltairz80を再開、その後再度ターミナルを開いてtelnet 127.0.0.1を実行するとcp/mにつながる。telnet経由だとエスケープも効く めでたし

2020年10月3日土曜日

最近の動向ー相変わらずのガジェットとの日々

 さすがに秋分を過ぎたあたりから朝晩涼しくなり少し過ごしやすくなってきた

で、ガジェットです。まずはmacbook pro(2014)です。
家内が仕事部屋があるのにリビングでノートPCを広げていると仕事なのか遊びなのか判断ができなくて話しかけるかどうか迷うとのクレームを前々から発信していたのでリビングには他のPCは置かずにmacbook proだけを置くことにしようと画策してます。

取り急ぎmacbook proにaltairz80を入れてcp/mのエミュレートが出来るようにした。
Finderから直接altairz80をクリックしても起動しなくてターミナルを介してコマンドラインから ./altairz80 cpm2ってしたら動いた。

昨秋、Parallelsもバージョンアップして対応OSもWIndows7から10にあげたんだけどこれが大失敗で7の時はbootcampでもParallelsでも単一のライセンスでWinもOfficeも使えたんだけどWin10からはできなくなったみたいで一気に魅力がなくなって使わなくなっていた。
今年の初めにはmacosをmavericksからHigh Sierraにあげたんだけど漢字変換が変わったかなぐらいで思ってたんだけどaltairz80を1回起動したら画面下のタスクバーからターミナルが消えた。Alt+SpaceでAlfredをよんでterと入れれば呼べるけど面倒なのでFinderPathってアプリを入れようと思っている。

なんか新しい環境づくりはたのしいな。

当面は趣味コンとしてのmacbookでの遊びかな?

もう一つのテーマとして各種ボードコンピュータでusb接続のコンソールでtera termを使ってtek4010グラフィックターミナルでの図形描画をしようとあれこれ調べてたんだけどもう一つ楽しくない。原因はtera termのtek画面が実サイズよりも縮小されることにある。

実画面サイズで320x240ぐらいだろうかともかく小さい。下のコンソールの画面の1/4ぐらいのサイズなのだ。teratermのバージョンは4.105で現時点での最新なのだが・・・

そしてcp/mのmbasicだとずっと;付きの改行しないprintが続くと表示がおかしくなるので対策としてバッファを80バイトと仮定して改行をおくってみたら変な文字がでることはなくなったが予期せぬ(実)改行が入るかして画面が変にボケるのだ。


上下で見比べると明らかにボケてますよね。

上の画面はもとのプログラムが320x240ぐらいを想定して書かれているが下のは1024x768を意識して書いたけどウィンドサイズが大きくなってくれない。

下のは640x480を意識して書いているんだが実にこじんまりと表示されて悲しい。



windowsでwinscpなど使うとraspberry pi zero環境としてはかなり面白かったんだけどtek画面が小さいのはいかんともしがたい。
しばらくはmacbookでお遊びだ。


dosvaxj3が更新されていた。

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