2019年2月28日木曜日

Python、PyQt、文字列の一括置換アプリ


今PyQt5で作ってる
このブログで管理してる読書データを置換して見やすくしようと思った。手でも簡単だけどせっかくだからpythonで

ブログの文章をブラウザでコピーしてテキストとして保存、これは手でやる。このファイルから一行づつ読み込んで置換して別ファイルに保存していくのはアプリ
UIはこんな感じ。designerは早い、この程度のダイアログはすぐだ( ´∀`)

前からやりたかったんだけど、正規表現の練習が出来るようにして、成功したらそのパターンを保存出来るようした
正規表現は文書整形には欠かせないものすごいツールだけどやはり記述は難しい。
スクリプトに書いて実行してエラー出して直して、というのでは効率が悪いのでアプリ上でテキストを入力したらリアルタイムで実行結果が出るようにした
変換対象のテキストファイルはドラッグで取得、一行ずつ読み込んで上で成功した正規表現のパターンで置換して新しいファイルに書き出す

正規表現の練習のコーディングが難しいと思ってたけど簡単だった( ´∀`)
正規表現は失敗しても落ちないようにtry~exceptできちんと書く
pythonはファイル処理も簡単だよな
一行づつ抜き出して処理するのは単純にforのinにファイルオブジェクトを渡すだけ
バッチのforと同じだね

消えた女


マイクル・Z. リューインのアルバート・サムソンシリーズ五作目
いつもと同じで色んな人に話を聞いていくうちにどんどん深みにはまっていく展開ですが、閉じた世界の話で謎が謎を呼び、かなりのノンストップ系になってる。
つまり面白いって事です。
どんでん返しも二枚腰でダマされと思ったらまだ先がありました。
しっかりしたミステリで、それぞれの人間の想も詰まっている。
私としては1作目のA型の女にやられた感があったけど、匹敵する完成度だと思う。

ようやく彼女とその娘さんが出てきました
事務所も変わって大家さんは一癖ありそうだし、これからの展開がすごく楽しみ
しかし読書メーターを見たら読者数はすごく少ない
どうしてかね、面白いのに┐('д')┌
コンプまであと三作、終わったら他の作品も読みたい( ´∀`)

童貞物語


コンプするつもりで借りた佐藤正午さんの初期の作品
やっぱ文章が上手いなあと思う
プロの作家なら当たり前かもしれないけど、こういうのは勿論訓練もあるんだろうが持って生まれたものですよね
言い回しにひねくれたところが無くて読みやすいです

村上龍の69を思い出した
佐藤版の青春グラフィティって感じかな
海藤が佐藤さんなのかなと思いながら読んだが、津田臭さはまだないですね( ´∀`)

私はこの手の作品にはちょっと弱くて、最後はぐっときました
佐藤さんの作品は純粋にお話として楽しむ、作者の意図とか想いとかそういうのはナシ、のつもりだったけど、本作はちょっと違った
というか、胸に来るものがあって嬉しかった

村上龍だけど、勿論69が先だよなあと思ってちょっと調べたら両方とも1987年の出版だった!!!
才能が溢れて漏れ出てきそうな感じだった村上龍は芥川賞を1976年に獲ってる
佐藤さんは1983年にすばる文学賞を獲って、それ以降こつこつと作家活動を続けてようやく直木賞を獲った
私は若い頃は村上龍にはまった時期があって結構読んだけど最近は読みたいと思いません
まあ、いろいろですね

2019年2月26日火曜日

Python、マルチスレッド 2


このやり方でマルチスレッド自体はうまく動いてるようだ
PCのシステムモニタで見てもpythonは二つになってる(・∀・)ノ
しかし、どうもうまくいかない
本体は固まってはいないけど、アウトプットの更新がやはりリアルタイムにならない
変なのは、VSCodeから起動するとうまくいくけど、単独で起動するとうまくいかないこと

VSCodeのコンソールを見ると微妙にQTがエラーを吐いてる
QObject::connect: Cannot queue arguments of type 'Qstring・・・・
それはキュー出来ないよ????
ちょっと調べたらマルチスレッド系のエラーらしく解決方法がよくわからん
pythonではなくQTのえらーっぽい

もともと標準出力を受け取るとバイト型になってる
すぐprintしてしまえば、コンソールには
b'\r\n0'
みたいに表示してくれるけど、直接QTのテキストwidgetに入れるとstringにしてくれってエラーになる
なので、.decode() でutf-8に変換してからテキストwidgetに送ってる
変換の仕方が悪いのか、そもそもthread間のやりとりが難しいのか????

もう少し調べるか?
スクリプトでここまで出来れば十分かもしれないが・・・( ̄― ̄?)

Python、マルチスレッド


コンソールアプリを実行して標準出力を取得するGUIベースの汎用アプリを作った(前の記事の画像に写ってるやつね)
昔Cで作ったんだけど勉強含めてpythonへの移植的に
コマンドの与え方など、使いづらかったので当然手直しして
で、出来たんだけど、子プロセスからの出力に時間がかかる場合はメインダイアログが固まる
ffmpegでごちゃごちゃやってるときなど、全て終わってから一気に表示される
まあ良いんだけどやっぱ固まってると不安ですよね
これを解決するのは多分マルチスレッドだと思い調べてみたら簡単そうだった

問題はスレッドを作るにしても今の開発環境は基本的にdesignerで作ったダイアログクラスがメインになっていて、どこでどうスレッドを作れば良いのかってことです
現状は、サブプロセス実行は外で関数化して、メインクラスの中から呼んでいる
外の関数で標準出力を取得してyieldしてもらい、これをクラスの中でもらって出力ウインドウにセットしてる
クラスの中はyield待ちのループになってるんで、yieldが終わるまで固まってると思われる
で、こうしてみた

①def go:    #ここは変わらない、サブプロセス実行
  subprocess(ここで実行して標準出力取得して送る)
    pipe=stdout 
      yield pipe

②def test:  #ここから別スレッド
  (text_cmd からtext取得して実行する)
  for  *****  in( go()) :
    text_out.append
 
③class *** # メインダイアログのクラス
 def ***  # プロセス実行関数 ここでスレッドを作る
  thread_obj = threading.Thread(target=test, args...)
  thread_obj.start()

新しく作るのは②だけかな
①と②は一つにまとめても良いね
別関数にしてyield、ってのが良い感じだなって思うけど( ´∀`)

2019年2月24日日曜日

Visual Studio Code


VSCodeすごく良い
ショートカット覚えたらたまらん

たとえばコメントだけど、ラインコメントはあるけどコメント群は書きづらい
と、思ってたんだけど、行を選択して
ctr+/
で一発だったんだなあ~( ´∀`)
これならラインコメントだけで十分ですね

行をそっくり下にコピーとか、単語の選択とかインデントの上げ下げとか
今まで手でやってたことがショートカット一発だ!!
普通のプログラム書きは皆こうしてたんだろうな
知らないって幸せだったり哀しかったりしますね( ̄― ̄?)

しかしふと気づいたが、これってCUIの世界ですよね
ワタシはMSは大嫌いですけど、パソコンにマウスを導入してGUIの世界を開いたのはやはりMSであり、そこは素直に素晴らしい業績だと思ってます
そのMSがCUIなツールを作ってるとは・・・・(・∀・)

PyQT、Qlistview と Qlistwidget


QTではいろんなオブジェクトがあってわかりづらいなあって話です
私は単純な1列のリストを作りたくて探したんだけどよくわかんない
win32apiでいうとListBoxですね
QTだとListViewしかないのかな・・・?

で、それにも種類があって表題の①Qlistview と ②Qlistwidget
この二つの違いはデータのセットの仕方、②の方が簡単です( ´∀`)
①はデータ用にQStandardItemModelを作ってそこにデータを入れてから、①にセットします
②はそんなこと考えずにデータを次から次とaddItemしていけば良い

しかし、②は①の派生クラスなので、元は同じ
①の面倒なところを簡単にした(機能を追加した)のが②です
じゃあちょっと使うだけなら②でいいじゃん、って事ですが、①の機能を使いたくなることもある
そういう場合は①に戻す必要は無く、①の機能は当然②も備えてるので使えます
ただし、プログラマーはその事を知っておく必要があるって事ですね

designerだと、左のパーツのところに①②両方あってどっちを使うべきか迷います
配置した後でも、右クリックで「morph into」ってすると、簡単に変更できます
変更できるんですけど、今の例だと、②なら①に変更する必要は無いです
機能が減るだけなので

で、どっちを使うべきなんだろ?
②の方が便利ということなら①の存在意味は無いからいっそ無くして欲しい
でも①の前に⓪もあるらしい
ワタシ的には派生してごちゃごちゃになったクラスは使いたくないんですよ
元のクラスの方が使いづらくてもたとえばシンプルで早いんならそっちを使いたい

で、どうなんでしょう
どっちを使うべきなの???
答え出てないです~(・∀・)ノ

Qtはdesignerがものすごく良くてRADかもしれないけど調べ出すと時間かかるね
言語としてのpythonを勉強することは正解だと思うけど、GUIで何を使うかは難しい
Qtを調べて少しわかってきてもどこか虚しい( ̄― ̄?)
どうせ詳しくなるならGTKの方が汎用性アリかなとか、思ってしまいます

2019年2月23日土曜日

PyQT、ドラッグアンドドロップ、designer


またはまりました(・∀・)ノ
簡単なんだけどさ、designerだと落とし穴があった(と思う)
これはPythonではなくGUI環境の、今回で言えばQtの使い方って事になりますね
designerでuiを書いて、それを本体のpyにインポートして使う前提だけど、ListViewWidetでDragを受けるとしたらこんな感じ

①designerでListViewを右クリックしてprompte toして、独自のクラス(hoge)に設定し直す
②designerが吐いたuiをpyに変換したら、最後に import hoge as hoge みたいなスクリプトが追加されてるので、このhoge.pyを同じフォルダに自分で作る
③hoge.pyではListViewWidetを継承したクラスを書いて、そこでDrag&Dropを実装する
④インポートするpyのファイル名を変えたければ、promote toした時のダイアログでヘッダファイルの名前を設定できるので、ここに好きな名前を書けば良い

実装するコードはwebで検索したらいくらでも出てくるし、Qtのサンプルフォルダにも入ってます(dropsite.py)
これでListViewにドラッグしたらそのファイル名がリストに入ります
ListViewのオブジェクト名は変わらないから本体のpyでは何もしなくて良いです(のはず)

ちょっと面倒ですがdesignerを使う場合はこんな感じになる(と思う)
ちなみに疑問として、designer上でそれぞれのオブジェクトのプロパティとしてDragをacceptできる
この場合吐かれたuiを見ても確かにacceptしてる
しかしacceptしてもその後のdrag処理を書けないから全く意味がないのになぜ??

designerってC++用だから、pythonからだと使いづらくなるのかもしれない
せめてdrag用に追加で書くpyのスケルトンでも用意してくれてたら良いと思うんですけどね・・・
でもdesignerはすごく良いツールだから、やり方がわかっただけでもよし!!!

しかしハマって何とか這い出したときはうれしいよね
プログラミング楽しいわ~( ´∀`)

Visual Studio Code


ものすごくいい!!!
( ´∀`)


Komodoがぱっとしなかったので評判の良いこれを試してみたんだが、軽くて使いやすい
MSの癖になぜこんなに良いんだ???┐('д')┌
クロスプラットフォームってのも変だよね
MSの事だから自社開発じゃなくて開発チームを買ったんだろうな、チームの思想がMSに染まらず貫かれてるんだと思う

実は昔出始めの頃試したことあったんだけど、文字化けがひどいしレジストリもものすごく汚していって、その時は速攻で削除した
そのソフトがこんなにも良いものに進化したんだなあ
人気があるのもわかる気がします

一つ要望としては、普通のテキストのアウトライン表示をして欲しい
そうすれば今のgPadの代わりになりそう
アドオンが豊富なので既にあるのかもしれないし、自分でスクリプトを書けば簡単なのかもしれない
これからだな・・・(・∀・)ノ

ビストロ・ボンルパ


結構我が家から近いし古いんだけど何故か行ったことがなかった
ラーメンとか中華、カレーはほぼ行ってるんだけど
今日はスープカレーの藍色に行ったら何と定休日!!
仕方なくってわけでも無いけど、やっとチャレンジできました

これはスパゲティハンバーグミートソースグラタンです
何のことかわからんけどミートスパの上にハンバーグがのっていて、チーズをのせて焼いた感じ
こってりしてて結構美味しく食べれました

写ってないけど家内はカキのサフランクリームスープスパ
ランチでパンもついてボリュームもありかなり良かったそうです

100円で食後のコーヒーが飲めました
エスプレッソだけどそんなに濃くも無く飲みやすかった
コーヒー付きで二人とも1400円、安くはないけどまあまあの洋食屋さんでした

2019年2月22日金曜日

PyQT、オブジェクト名に変数を使う


軽くはまった( ´∀`)
pythonに移植中のClipGo、ホタンがたくさん並ぶが、全てを同じ関数にコネクトすることにした
何度もコネクトを書くわけにはいかないからループ処理にしたんだけどこれがうまくいかない

ui.pushButton_1.connect(hoge)
ってスクリプトの数字部分を変えたいんだけど、ここを変数にしてループを回すとエラーになる
uiはそんな変なオブジェクトは持ってないよ、みたいなね┐('д')┌

で、ネットで調べたらexecを使えばイケルけどそういうやり方は良くないらしく、辞書を使えば良いみたいなことが書いてある
辞書ってリストみたいなものだよな、よくわかんないな~と思いながらふと、tcl/tkならevalだなあと思いやってみたらいけた(^^)/
全部文字列で書いてからevalする

eval( 'ui.pushButton_' + 変数 + '.connect(hoge)' )

こんな感じね
調べたらexec()と似た使い方です
推奨はされないのかな?
とりあえずイケたけど辞書について調べておきたいです( ´∀`)

PyQT、押されたボタンのIDを取得する3


今回調べるのが結構大変だったけど、みんなどうしてるんだろ?
ボタンをグループ化する以上、各ボタンの管理はIDでやるのが普通の発想だと思うのだが?(・_・?)?
多分私のようにグループ化したボタンはフレームに乗せることが多いと思うので、フレームで管理した方が良いと思う
wxはそうだよね
QTはわざわざフレームとは別にボタングループというabstractなオブジェクトを用意して対応してる
その方が自由度は高いと思うけどさ、IDは使いづらいよなあ・・・・

考えたら私のようにボタンをたくさん配置するUIは普通作らないのかも?( ̄― ̄?)?
int QButtonGroup.checkedId (self)
Returns the id of the checkedButton(), or -1 if no button is checked.
This function was introduced in Qt 4.1.
→http://pyqt.sourceforge.net/Docs/PyQt4/qbuttongroup.html
こういうのがあって最初使えるかなって思ったんだけどこれはラジオボタンですよね
ボタングループってチェックボタン用のオブジェクトなのかもしれない

IDで簡単に分岐できないのなら、そもそもボタングループを作った意味が無い
それぞれのボタンに同じ関数をコネクトして、どのボタンから来たかを調べて分岐すれば良いだけ
self.sender()、ですね
そうだ、その方が手間が少ない!!
ボタングループは使うのやめたほうが合理的だ( ̄― ̄?)
いろいろ調べて少し理解が深まった気がするのでそれで満足しよう( ´∀`)

2019年2月21日木曜日

KomodoEdit



pythonでいろいろ書き出したので専用のエディタを使ってみたくなってきて、以前IDEを調べてた頃落としておいたKomodoを使ってみた
インストーラがmsiだったので少しイヤな感じだったけどクロスプラットフォームらしくレジストリはほとんど汚してません
起動はもっさり、インターフェースはlinuxっぽいです
pythonの2が同胞されてたのでもしかしたらpythonで書かれるのかな?

マークダウンで関数やクラスを表示してくれないけど、私が使い方わかんないだけかな?
実行したらエラーなどの結果は下の窓に出てくる
ただしソース中のprint()で出力したメッセージは、アプリを終了してから窓に表示されるのでちょっと使いづらい
私はそもそもこのテのものは使ったことがないのでまだよくわかんないけど、もっさり感はちょっとだなあ・・・

ちなみにericとpython付属のidelも使ってみたら、入力補完も結構違うんですね
エラーの際のメッセも違うのは何故だろう??
komodoで実行したらエラーになるけど理由がわかんないので直接dosから実行したら無事起動したりもした
実はpycharmも落としてみたけど200Mもある
この世界も結構深そうだな・・・・( ̄― ̄?)

私はediter大好きで色んなものを試してきたがもう何年もgPadです
本格的にデバッグもしたかったらide、そこまででは無い人がkomodoみたいなプログラム用のエディタを使うんだと思う
入力補完とか直接実行出来たりとかは良いんだけど、実際は一度書いたコードのコピペも多く、使い勝手の良いエディタがやっぱり良いのかなと思ったりする(・∀・)

PyQT、押されたボタンのIDを取得する2


出来た(・∀・)ノ
仕事中サボっていろいろ調べたのですぐだった( ´∀`)

コネクト
self.ui.buttonGroup.buttonClicked.connect(self.launch)
関数
def launch(self,event):
  but=self.sender()
  print(event.objectName())                # name
  print( but.id(event) )                         # id
  print(self.ui.buttonGroup.id(event))   # id

ボタングループオブジェクトは、buttonClickedにコネクトした関数に対して、第二引数として押されたボタンのオブジェクトを返す
なので関数に第二引数を設定すれば押されたボタンのオブジェクトが取得できる
でもボタンオブジェクトは自分のIDを知らない、知ってるのはボタングループオブジェクトなのでそこにid()でアクセスする
ボタングループオブジェクトは関数の呼び出し元としてself.sender()で取得できる
→http://yu00.hatenablog.com/entry/2015/09/14/202729
今のケースだと関数からも見えてるから直接self.ui.buttonGroupとしても同じ
ちなみにボタンの名前はボタンオブジェクトのobjectName()で取得できる
ボタンに表示されてるテキストは同様にtext()で取得できる

ボタンのIDについて
QButtonGroup.addButton(self, QAbstractButton ,(int id))
idは振っても振らなくてもいい
振らなければ自動的に-2から始まる負の整数が割り当てられる
振るのであれば正の整数を振ることが推奨される
なぜなら-1は該当ボタン無しのメッセージとして予約済みだから
→http://pyqt.sourceforge.net/Docs/PyQt4/qbuttongroup.html

しかしIDは使えませんわ┐('д')┌
画像は左上のボタンをクリックしたところだけど、ボタン名はpushButton_2でIDは-7
その上のボタン7がID-2で、ボタンとしては上から2行目の右端のボタンです
つまりIDはぐちゃぐちゃ(-_-)
designerはボタンをグループにした場合、ボタンのオブジェクトネームの順番にはaddしてくれないようで、どういう順番かは良くわかんない
IDはそのaddの順番で、-2から順に振られているようです
これじゃあID振っても思ったように分岐できない

きれいにIDを振りたければ改めて振り直すしかない
QButtonGroup.setId (self, QAbstractButton button, int id)
本体pyでグループに関数をコネクトする辺りで1からの連番で振り直せば良いと思う
しかし、ボタンのオブジェクト名は連番にしてるから、その連番を使って分岐は出来る
それでいいかな~(-_-)

サイゴン・タンゴ・カフェ


中山可穂さん、短編集ってことになってるけど、表題作が圧倒的で、表題作とその他の短編って感じですね
その表題作以外ではドブレAが良い味でした
相変わらず良い文章
密度が高くて随所にはっとするフレーズがちりばめられててわかりやすくて
とにかく読みたい、どんなものでも良いから書いて欲しい作家さんです

現実との三分間
ちょっとしたミステリだが謎解きのないままいろいろ混ざり合って中山さんなラスト
短編だからこれでいいと思う

フーガと神秘
これは私には難しい作品だな
フーガの話はわかるけど認知症の父親をののしるラストはよくわからん、これが女性心理なの?

ドブルAの哀しみ
ゼロアワー系のお話かと思いきやラストが効いててお見事、小説を書く猫ですね、すごく良い

バンドネオンを弾く女
ラストシーンに向けたお話だがちょっとまとまってないと思う
同じラストで違う話を読んでみたいと思った

サイゴン・タンゴ・カフェ
全身恋愛小説家の復活か?って感じの作品ですね
でもラストはやや疑問、これで終わるなら長編にして欲しかった
短編なら曖昧なまま余韻を持たせて終わらるんじゃないのかなあと思いました

2019年2月20日水曜日

PyQT、押されたボタンのIDを取得する



またはまりました(-_-)
簡単だと思ってたんだけどな~

自作のGoClipをPyQtに移植しようと思って、こんな感じでボタン郡を配置した
タブの上にフレームを乗せそこにgridでボタンを乗せた
フレームのダブルクリックに関数をコネクトして、関数内でボタンのIDを取得して分岐させるプランだった

しかし、フレームはクリックのシグナルを受け取らないのだった!!(゚Д゚)!!
どこかの解説サイトで見てたのでおかしいなと思ったら、wxPyだった
なぜwxで出来るのにQtでは出来ないんだ!┐('д')┌
シグナルを自作する道はあるんだろうけど、そもそも無いことがおかしい

で、調べたら、ボタンをグループ化すれば良いって事がわかった
グループを作ってボタンを一つづつAddしていくだけなので本体のpyでも出来るんだろうけど、画像の通り、desigenerで出来ました( ´∀`)
で、本体のpyでこのグループにコネクトする

self.<>.buttonGroup.buttonClicked.connect(self.launch)
def launch(self,event):
  but=self.sender()
  print(but.objectName())  #   .text() --ボタンの表示名
  print(event)

こんな感じですね
シグナルは<buttonClicked>です
関数の中で、self.sender()のobjectName()でボタンの内部の名前が取得できました
でもまだIDは取得できてないんすよ┐('д')┌
関数に第二引数を設定すればそこに押されたボタンの情報が入って来るところまではわかったんだけど、IDはまだ取り出せてない
ボタンの名前さえわかれば分岐は出来るけどね
でも取得できないはずがないのでもう少し頑張ります(・∀・)ノ

いろいろ調べてるとクラスの仕組み、基本的なところが理解できてないんだなあと感じます
承継したクラスは親のプロパティやメソッドは当然持ってるから、オブジェクトを調べる際に親は何かって重要なんだね
Qtは基本的にC++のツールだから、C++を勉強したらもう少し理解が深まるのかもしれない、情報も多いしなあ

PyQt、designerの話


もともとericをいじりたくて仕方なくインストしたPyQtだけど、ericは今のところ使う予定無し(・∀・)ノ
でもQtは結構リッチなGUIなので、tkに戻るとしても使えるようにはなっておきたい
平日なので帰宅してから少しづついじってるが少しわかってきた気がする

付属のdesignerについては、部品をグリグリ配置できて使いやすくてこれはすごく良い
吐くコードはxmlで多分色んな言語に変換して使う設計だと思う
python用にはコマンドラインで変換するが、designerで直接pyにしてくれたらいいんだけどな・・

で、開発に当たっては、designerが吐いたコードには一切手をつけずimportして使う
designerはデザインをクラス化してくれてるので、本体のpyファイルを別に作ってそこで承継する
widgetへの機能の割当てもその中で行う
import hoge
self.hoge.<widgetname>.<signal>.connect(self)
def (self):
でやりたいことをどんどん書いていく


Qtのwidgetはsignalとslotという概念で機能を追加するがこれは直感的でわかりやすいと思う
これを既定のもの以外にしたい場合はカスタムで作成する
designerではカスタム機能のコーディングまでは出来ないけど、設定まではできる
当初私はこれでやろうとしてはまった(-_-)
そもそもカスタムスロットの設定は操作がわかりづらいし、そのあとのコードもものすごく書きづらい(と思う)
なので、カスタムスロットもdesignerでは作らないで、上記方法が基本だと思う
後からUIを変えたとしても本体コードに影響はないしね、この方法しかないよね

そもそもQtのコードは書きづらい┐('д')┌
designerが吐いたコードを見ると、これを手で書くことはちょっと考えられない(-_-)
多分基本的な考え方はtkと同じだと思うけど、tkに比べてそもそも言葉が長い!!
可読性は高いんだが、手で書くことはほぼ無理なレベル
なのでQtはdesigner使用がほぼ前提となるのだと思う

widgetのデザインとconnectさえ出来てしまえば、あとはpythonでコードを書くだけだから簡単
本体pyも一度作ってスケルトン化しておけば良いよね
rapidでそこそこ見栄えの良いGUIツール開発が出来ると思う
そう考えると無料だし、かなりのスグレモノって事になりますね( ´∀`)

2019年2月19日火曜日

風呂ソムリエ 天天コーポレーション入浴剤開発室


青木祐子さんの「これは経費で」の前の話、シリーズ最新作はまだ順番待ちで読めないので最初に戻って読んでみた
本社経理課は出てこないけど開発室の人物はかぶってて、シリーズものを読む楽しさはあります

経理課の話はゆるい中にミステリの要素もあって結構読ませた
本作はまあまあ面白いけどかなりゆるめでアクセントもお風呂
作者も本作のシリーズ化は難しいと思ったのかね

でも私は楽しめました
こっちの話も続編を読みたいですね
美月さんにも会ってみたいです

2019年2月17日日曜日

IDE ericのこと


Ericのインストだけど、そもそも順番が違ってたんだな
落としたericのアーカイブのreadmeを読んだら、インストの順番としていろいろ書いてあって、最後にericになってる
同胞のインストールスクリプトはこの通り順番に依存関係をインストしてくれてたんだとおもうが、完全じゃなかったんだな
結局元に戻して、手でインストして何とかイケたって事になりますね

私はこういうIDEは使ったことなくてよくわかんない
正確にはjavaとか、delphiとか、無料のツールは使ったことあるけどすぐ断念した
PellesCに出会って初めて開発できるようになったんだった
しかしコンパイルしてリンクしてって作業がいらないスクリプト言語で、IDEが本当に必要なのかよくわかんない

すこしericでコードを書いてみた感想だけど、やたらとwarningのメッセージが出る
その変数は宣言されてないよとか
変数名を少しでも打ち間違ったらwarningが出る
これはウザいけど良いんだろうね
Pythonってエラーメッセージが素っ気ないというか、わかりづらいと思う
IDEでうるさく言ってくれたらエラーはすごく減るんだろうな

当たり前ですけどスクリプト系は一行づつ、IDEのエラーチェックも書いてる間に一行づつ出来るよな
もしかしたらpyにやらせてるのかな??

ま、せっかくericが使えるようになったんで、これからですね
インスト大変だったので少しは使ってみます( ´∀`)

python、IDE ericインストなど


Python良い!
ネットで情報収集してたら統合開発環境も色々ある
ふと見たEricがすごくよさげだったので試してみた記録です
おおまかには
①Ericインスト
②起動ーOK
③QtDesignerがない!!!!
④QtDesignerインスト成功、しかしEric起動ぜす
⑤全てアンインスト
⑥Qtのみインスト
⑦EricインストーーOK!
って感じです

①公式サイトからeric6-19.02.1.zipを落としてきて、適当なところに解凍してから中に入ってるinstall.pyを実行するとこんなコンソールになります
私はもともとQT系はまったく入れてなかったけど、ここでインストーラの指示に従えば入れてくれます
いろんなものをインストしました
たぶん100Mを軽く超えたと思う
で、インストはOKなんだが・・・
どうやって起動すんの???(¯―¯٥)

②気づいたらデスクトップにショートカットが・・・
これでいけました、無事起動!
すごいっす、IDEですね( ´∀`)
VSみたい、今はこういうのが無料なんだなあ
そういえばVSも非商用なら無料だったかも
そういう時代ですかね

③しかし使い方がぜんぜんわからん┐('д')┌
ericサイトにあるチュートを見ながらまずはプロジェクト作って、デザインのところで、QtDesignerがないとのメッセが!!(¯―¯٥)
確かに、designer.exeがあるはずなのにファイル検索してもどこにも見つからない・・・・

ネットで検索したら同じような症状の人がいた
https://stackoverflow.com/questions/41523597/python-win-3-6-0-x64-issue-missing-qt-designer-exe-after-pip3-install-pyqt5
ちゃんとインストしたのにdesigner.exeが入ってない症状
designerはpyqt5-toolsに入ってるらしい
で、ここのアンサーにあるとおり、コンソールを開いて
python -m pip install pyqt5-tools
でインストしてみたけどうまくいかない・・・・

④そこで直接whl(zip)を落としてきた
https://pypi.org/project/pyqt5-tools/
pyqt5_tools-5.11.3.1.4-cp37-none-win_amd64.whl
この中を見たら、pyqt5_toolsにdesigner.exeが入ってる・・・
で、ここにそっくりコピーしてみた
c:\Python37\Lib\site-packages\pyqt5_tools\
で、中のdesigner.exeを実行したら起動しました!( ´∀`)
 
ちょっといじったけどまあまあ使えそうだ
そこで早速ericに戻ろうとしたら、なんと!!
ericもericのブラウザも起動できない!!!
手動でいろいろインストした影響でおかしくなったんだなあ(-_-)

しかたない、ericはあきらめてQTだけでも使おうかとwebで探したQT用の窓だけ出すpyコードを書いて実行したら、そもそもQTのインポートエラー(¯―¯٥)
Qtのモジュールが見つけれないみたい
pipでQTを改めてインストしてみたけど、インスト済みになってしまう
どうしたらいいんだ!!!┐('д')┌!!!

⑤で、erickをアンインストして、QTもすべてアンインストしてみた
覚えてたのは大体これくらい
PyQt5         5.11.3
PyQt5-sip     4.19.14
pyqt5-tools   5.11.3.1.4
PyQtWebEngine 5.12
pywin32       224
QScintilla    2.11.1
pyqt5         5.12
コマンドラインから pip uninstall、簡単

⑥そのあとで再度PyQt5をpipでインスト
ファイルがキャッシュされてたようで瞬間でインストされた
で、、、QT用のpyは動いて窓は出た!
見てみたらdesignerもインストされてて使えた(・∀・)ノ

⑦もしかしたらこの状態ならericさんも来るかな?
と、もう一度erickのinstall.pyを実行したら、あらためてPyQtWebEngine、QScintilla、pywin32のインストを求められて、そのとおりにしたら無事インストできて、デスクトップのアイコンも復活
ダブルクリックで・・・起動!!

しかしプロジェクトからUIに進んだらまたdesignerがないのメッセが・・・
でもdesignerがあることは確かなので、見つけれないだけだ
設定をいじったら案の定パスの設定メニューがあったので設定したら無事開けました\(^o^)/

やれやれ┐('д')┌
長い道のりだった
そもそもスクリプトのくせにIDEなんているのかなと思ったり・・・
とにかく疲れました~(¯―¯٥)

2019年2月16日土曜日

Pythonでの開発、Tkinter


Pythonの勉強がてら、TotalCommandから起動できるファイルリネームツールを作ってみた(・∀・)ノ
kivyはちょっと、って事でGUIは標準のtk、tkinterを使った
解説サイトは豊富だった

私がインストした本家のPythonはたぶん拡張がほとんどない
pipすらなかったし┐('д')┌
いくつかモジュールは追加した

引数の受け取り、文字列処理、ファイル名の分割と連結、クリップボード処理などを調べて実装
Pythonの勉強とtkinterの勉強と、両方がごっちゃになった感じだった
出来ればコンソールでPythonを純粋に勉強してからGUIに進んだ方が良いんだろうと思った

言語に関してはインデント記述がものすごく良い
見やすいって事は書きやすいってことなんだなあとつくづく思った
対応括弧に気をつけなくて良い分速くかけるかもしれない

GUIに関しては、ボタンに設定した関数が勝手に起動してしまう症状があった
これは仕様らしく、関数は記述しても引数を与えないなどの工夫が必要みたい
これってPython固有なのかな
スクリプトは皆そうなのか、tkinterの仕様なのか?

スクリプトファイルを直接winのシェルで実行すると、エラーの場合はメッセージが出ないで消えてしまう
なので開発中は常にdos窓を出してそこから python **.py としなくちゃいけないのは少し面倒だなあ
開発系のエディタから実行すればコンソールの情報を見せてくれるかな?
gPadでは無理だと思う

しかしPythonは良いわ
もっといじり回したい~(・∀・)ノ

虎鉄


前回の虎鉄で奥さんがもう無理って事だったので来ることはないと思ってたんだが
突然また食べたいと言い出したので来ました
奥さんの気持ちは誰にもコントロールできません( ´∀`)

ラーメンの味はいつも通りと私は思ったけど、奥さんはやはり味が落ちたと言ってます
どうなんだろ?
店は結構空いていて、奥さんは納得してました

店員さんが変わったなあと思って見てたら急に話しかけられて、近所の子でした( ´∀`)
小・中と我が家の子供達と一緒にサッカーをやってた子
大きくなっててわからなかったけど、話したらすぐ記憶が戻ってきた
こういう地元感も悪くないっす(・∀・)ノ

沈黙のセールスマン


マイクル・Z. リューインのアルバート・サムソンシリーズ四作目
このシリーズは微妙に前作と繋がってますね、お金の話とか

今まで私生活はわかるようなわからないような微妙な感じでそこが良かったけど、今回は離れて暮らしてる娘さんが遊びに来るし彼女も出てくるし、結構踏み込んだ感ありますね
本筋の方は私生活とは全く関係ないんだけどお約束のラストのドタバタでは深く繋がってきて、ほのぼの系の味付けになってます

ミステリなんだけどどういう味で書くのが良いのか、微妙ですね
というのはミステリ部分は底がやや浅い感じがしたので
犯人のどんでん返しも見えてたし

でもここまで来たら全部読むつもりで5,6を早速予約しました
誰も借りてないのですぐ来ます(・∀・)ノ
杉村君もいずれは桃子ちゃんが高校生になってお父さんのもとで探偵の手伝いをしたりするのだろうか?
ちなみに私が褒めるので家内も借りることになりました( ´∀`)

幼なじみ


佐藤正午さん
「デビュー直後に書かれた幻の未発表作品」だそうです
ここにあるのにマボロシってなんだろ、わかんないなあ・・( ´∀`)

綺麗な装丁の絵本で雰囲気ありますね
だんだん過去へとさかのぼっていく
昔の手紙を返してもらうって結構ひどいと思うけど彼女なりに勇気を持って生きたんだね
書き込んでくれてないだけに想像もいろいろ膨らんできて、良い味の短編になってると思う

冒頭のたばこの部分とか、もっと膨らませて長い話にしたかったのかなとちょっと思った
でも続けれなくて、今のままでもそこそこいいかな、ってことで本にしたのでは?
などと勝手に想像する楽しみもあったってことです

雪降ろし


ずっと気になってたカーポートの雪下ろしをした
前面の張り出したとこだけです
去年はやらなかったと思う、毎年状況は違うな

はしごで登るだけ、そんなに高くないしすぐ終わった
でもハシゴって上るのは良いけど降りるのは怖いよね、当たり前だけど
毎年何人かは雪下ろしで死んでるみたい
まあその時はその時ってことだね(・∀・)ノ

2019年2月15日金曜日

佐藤正午


長編はコンプした(・∀・)ノ 190402

書名日付評価
1984永遠の1/219**
20121003
1984王様の結婚20190402
1985リボルバー20180910
1986ビコーズ20190311
1987恋を数えて20180929
1987童貞物語20190228
1988個人教授20190323
1991放蕩記20181218
1995彼女について知ることのすべて20120605
20190318
1996取り扱い注意20190212
1998Y20121128
2000ジャンプ20181015
2007520180711
202401224.5
2007アンダーリポート20180725
2009身の上話20180621
2014鳩の撃退法20190119
2017月の満ち欠け20180616
2024冬に子供が生まれる

(短編集)
書名日付評価
1988女について19910706
1988夏の情婦
1991人参倶楽部
1993スペインの雨20180831
1997バニシングポイント【改題】事の次第
1999カップルズ
2000きみは誤解している
2005花のようなひと
2009幼なじみ20190216
2011ダンスホール


(エッセイら)
小説の読み書き                           20190407

Python、kivy


Pythonをいろいろ調べていて、迷ったのがGUI
たくさんあるんだね~( ´∀`)
標準でついてくるのはtkなんだけど、まあこれはいつでも使えるしTclでやってるから面白くない
で、海外では一番人気だが日本では知られていない、というフレーズをどこかで見たのがきっかけでkivyを入れることにした

まずはpipのインスト
標準でついてるらしいのに私のpythonにはなかった(-_-)
https://www.python-izm.com/tips/pip/
ここで調べてまずはここからget-pip.pyを落とす
https://bootstrap.pypa.io/get-pip.py

それからkivy
まずwhlを落としてからpipでインストした
https://www.lfd.uci.edu/~gohlke/pythonlibs/#kivy
Kivy-1.10.1-cp37-cp37m-win_amd64.whl
p install Kivy?1.10.1?cp37?cp37m?win_amd64.whl
python -m pip install "(フルパスね)Kivy-1.10.1-cp37-cp37m-win_amd64.whl"

from kivy.app import App
from  kivy.uix.label import Label
class TestApp(App):
     def build(self):
         return Label(text='Hello World')
TestApp().run()

このコードで窓が出ました~(・∀・)ノ
コンソールが消せないなあ(¯―¯٥)

サンプルが豊富でいろいろ見てみたけど、重い!!!
ボタンなども個性的だが機能性があるのか疑問
見た目は大事だがそこにリソースを使うのは無駄じゃないか?
この窓だけでメモリ使用は36Mだった
kivyは却下だな・・・・( ̄― ̄)

2019年2月14日木曜日

Python インスト


昨日の午前中ずっとrubyの文法の勉強してた
結構面白いけどそれなりに癖はあるんだなあと思いふとPythonも気になって午後勉強したら、なんだか良いね
変数を#とか$にしなくて良いし、インデントは直感的に理解できるし見た目も美しく思えてきた
で、Pythonもインストしてみた(・∀・)ノ

①今の最新はpython-3.7.2-amd64.exeなんだけど、インストしたらサービスパック無しのエラーになる
これは私のOSのせいです、win7のままなので

②で、古いのをたくさん落として試したら、python-3.5.0-amd64.exeでエラーなくインストできた
しかし、api-ms-win-crt-runtime-l1-1-0.dll error
起動できない(-_-)
前のTcl/tkの時とおんなじだ

③で、諦めてSP1適用することにした┐('д')┌
調べたら、ファイルで落とすと8Gらい、Winのupdateを使えば1Gくらいとなってたので、updateでやった
まず更新システムのアプデをして、そのあとでSP1のアプデを二回したら無事SP1になった!
結構簡単だった( ´∀`)

④で、最新版のPythonをインストしたら無事イケました!!
しかし!!
起動したらまた②のエラーに(-_-)

⑤これは前に調べていて、このパッチを当てた。ちなみにこのパッチはSP1にしておかなければ使えません
【 Visual Studio 2015 の Visual C++ 再頒布可能パッケージ 】
http://www.microsoft.com/ja-jp/download/details.aspx?id=48145
vc_redist.x64.exe
で、
起動できた!!!!!!!!!!!(・∀・)ノ

でも簡単なスクリプト書いてもうまく動かん
webでみたTkinterの簡単なコード書いたらエラーで、調べたら_tkinte になってた
こういうの変えないでよ~(-_-)
でもまあいいや、土日で遊ぼう

ruby/tk


実は三連休でrubyも試してみた
Tclの文法がわかりづらくて、tk使うだけならもっと良いスクリプトはないのかなと
Pythonも人気らしいけど、ちょっと見クドクドしてて使いづらそうだったので

で、最新版はこれなんだけど
rubyinstaller-2.6.1-1-x64.7z
どこを探してもtkがない
tcl/tkはあるから、つなげれば良いだけかなと思いいろいろ調べてやってみたけどダメ(-_-)

色んなサイトの解説だとインストーラを使えばtkを使うのチェックボックスがある事になってるんだが、最新バージョンのインストーラにはない!┐('д')┌
どうなってんの???
なので、私がサイトで調べた限りで出来るはずの古いバージョンをArchiveから落としてみたらイケた( ´∀`)
https://rubyinstaller.org/downloads/archives/
ruby-2.3.1-x64-mingw32.7z
詳しくは調べてないけど、rubyが64対応になって少ししてからtkとうまく連携できなくなったみたい
これからも難しいようならruby/tkの選択肢はないな・・・(-_-)

とりあえず試してみた感想としては、
require 'tk'
Tk.mainloop
でとりあえず窓は出たのでイケたんだと思うけど

起動が遅い!!
かなりもっさりしてます
tclよりは早いって記事をどこかで読んだように思っていて期待してたんだが・・・

rubyのコンソールを消せない!
これかなりイヤです
-window のオプションをつけてみたりもしたけどダメ
7zを解凍したので関連づけは自分でやった、コンソールを消すオプションがあるのかもしれないけど・・・・
(→消せました (・∀・)ノ rubyw.exeだった

将来性なさそうだし遅いしじゃあ使えないのかな
もう気持ちがなくなってきたので試すなら次はPythonですな

Tcl/Tk GoClip移植、SpecTcl、win7


--19/2/13--log
①クリップデータの取得について -type STRING に限定した
②タイマーで取得し古いデータとcompareして違ってたら更新するようにした
③テキストウィジェットのinsert delete を実装した
④テキストウィジェットのscrollは配置が難しい、うまくいかないので後回し

②うまくいかなくて時間がかかった
再帰関数内の変数の初期値の与え方の問題だった
関数内で初期値を与えると再帰のたびに初期値にクリアされる
基本的に変数は自動的にstaticになっているようで再帰しても前の値は保持してるのだが
とりあえず関数の外で宣言して、関数の中ではglobalで参照することで解決したがスマートではないので書き直したい

③テキストバッファ全体を表す変数はないのかな?
テキストウィジェットはかなり精緻で何行の何文字目と、ポジションを細かく指定できる
先頭に追加するなら insert 1.0
内容を宇部手クリアしたければ delete 1.0 end
慣れたらかなり使えるかもしれない

④横はwrapさせるから縦スクロールだけ実装したかったがうまくpackできない
フレームにしてから配置すれば良いのかな?
それならpack -side でもgrid でも簡単か
配置にはやはりテクニックが必要っすね ( ̄― ̄?)

ちなみに、SpecTclってツールをいじってみた(・∀・)ノ
http://spectcl.sourceforge.net/
現在はActiveState's Komodo IDEって大きなIDEの一部として開発継続されてるようだが、単体でも落とせて、2Mくらいのexeになってる
グリグリできて面白いけど吐き出すコードが長いような??
Komodo IDEってのも面白そう
いずれゆっくりいじってみたい

ちなみにwin7のサポート終了に伴い、MSは有償サポートを残すらしいとの報道を見た
三年限定みたいで毎年値上がりするらしい
それだけwin7の人気があるというか、win10が使えないって事だよな!!!
私としは早くwin環境を抜け出してLinuxに行きたい
それって、2年ごとのキャリア縛りから抜けてMVNOに移るのと似てるかも

2019年2月12日火曜日

Tcl/Tk ボタンの配置など



ボタンの配置出来たけど時間かかったわ~( ̄― ̄)
今のGoClipはリソースで作ったので簡単だった、その代わり柔軟さはない
ダイナミックに配置しようと思ってたけど面倒なので実装しないままです
でも多分その方が簡単だったと思う
メインウインドウのサイズに応じてボタン等の部品を配置する関数を書いて、サイズ変更の都度そこに投げるだけだから
これをTcl/tkで書くと色んなオプションを駆使しなくちゃいけない

このMainタブはtextの下にframeをpackして、frameの中にボタンをgridしてる
それぞれウインドウのリサイズ時に一緒に伸びたり縮んだりする
packは -fill と -expand を使う
widget の時点で -anchor  -sticky も使う
試行錯誤の繰り返しだが理屈がわからん!!(>_<)!!

gridは結構わかりやすかった
columnconfigure で -weight をかけてやれば良い
でも元のframeを適切に配置出来なければこれも意味ない

同じウインドウにpack と grid を混在させたら、エラーにはならないけど画面が描画されずに、プロセスだけ残る状態になった
これバグですかね

実はまだtextをうまく pack 出来てない
widget配置のスキルを上げて意味あんのかな~って少し疑問に思いながらも、区切りがつくまではやってみます~(・∀・)ノ

Tcl/Tk 関数のこと、言語仕様など


Tcl/Tkって、言語とGUIツールのセットになっていて、GUIはTk
これは色んなスクリプト系の言語でも使われてる人気者らしい
で、言語の方はTclで、これは単純な作りでコマンドの寄せ集め
それが使いやすいのか使いづらいのか??(・_・?)??って話

Cに慣れると、関数を書く位置には頓着しなくなるよね
書く順番は問われない
jsもそう
しかしTclの場合は多分上から下に素直に実行していくので結構重要

Tcl/Tkで何かを書く場合、多分まずGUIを書いていって、ウィジェットのコマンドに関数を設定する
その関数をあとに書いていくやり方になると思う
これでエラーは出ない
しかし関数の機能をたとえば起動時などに一度呼ぶ場合、その関数は呼ぶ前に書かれていなければエラーになる

ここら辺の仕組みがわからなかった
ボタン用の関数で後ろに書いていたものを、起動時にも呼ぼうとしたらエラーになるわけです
そこら辺が使いやすいのか使いづらいのか????

あと、変数をGlobalで使う場合、変数定義時ではなくて、個別の関数の中で宣言するみたい
これって宣言じゃなくて関数の外に変数を探しに行くようなイメージなのかもしれない
少し奇異ですよね
それが仕様と言われればそれまでなんだが・・

execに関しては、シェルには渡せない
jsを起動したかったら、wscrpt.exe **.js とする
引数があると exec の前に eval しなくちゃいけない
このevalって「式を評価します」ってなってるらしいけど評価って何?(・_・?)?

{ }と [ ] の違いもよくわからん┐('д')┌
今のところはエラーが出たらその都度いろいろ対応するかない感じです(-_-)

Tkは神だがTclは今イチだと思う
RubyやPythonも試してみたいな・・・・

Tcl/Tk ini操作など


iniの扱いで一日かかった~┐('д')┌
サイトで下調べしておいたのでコーディングだけでさくっとイケルと思ってたのに
時間がかかった理由は、私が落としたActiveTclの8.5.18.0にライブラリが入ってなかったこと
結局GitHubからtcllib-1.19ってのを落としてインストしたらイケた( ´∀`)

iniを扱うときは、require inifileってするんだけど、ここでエラーに
サイトでは当然のように書かれてるしActiveTcl付属のヘルプにもこうしろと書かれてるのにエラー
サイトで調べても情報無し
そもそもrequireって何???(・_・?)

結論としてはこれはcの include と同義ですね
標準のtcllibにinifile.tclってのが含まれていて、これを読むと
::ini::**
のいろいろな関数の定義が書かれてました
ActiveTclの8.5.18.0に含まれてるべきだったんじゃないのかな?
もしかしたら最新の8.6には含まれていたのかもしれない
やれやれ┐('д')┌

しかしこうみるとライブラリって先人が作成した便利な関数のことなのかね
考えたらiniってテキストだから、ライブラリがなくたって読めるに決まってる
私はdllなどの実行ファイルのことだと思ってたんだが・・・
そういうのもあるのかな

ちなみに落としてきたtcllib-1.19は7zpになっていて、一旦全て解凍してから中にあるインスト用のtclを実行すれば、GUIのインストーラが起動して、所定の場所に解凍したファイルをコピーしてくれる仕組みになってる
このGUIにはsimulationのチェックボックスがあって、それをチェックして実行したら実際のコピーはしないでコピーしてる風で終わった
多分この段階で何かエラーがあれば教えてくれるんだろう
面白いね

Tcl/Tk 開発環境 gPadの設定


プレーンのテキスト設定だとやはり書きづらいので、gPadで色分けの設定をしてみた
ちょっと検索したら秀丸用のhilight定義ファイルがあったのでこれを使わせてもらった

ついでにアウトラインの設定もしてみた
今のところ文頭の proc と、文頭の ## を見出しに設定
結構見やすくなった( ´∀`)

ついでに編集中のスクリプトをgPadから実行するマクロも組んでみた
document.Save();
var strFullName = document.FullName;
var WshShell = new ActiveXObject("WScript.Shell");
WshShell.Run (strFullName ) ;

こうやってwinのシェルに渡せると本当に楽ですよね

ってやる必要は無い
事前の関連づけが前提ではありますけど(・∀・)ノ

ニシン



休みにイオンに行ったときに買っておいたサカナ
一匹60円くらいで売ってた
安い時のサンマ並みですね~
石狩で獲れてるんだなあ、良いよなあ

焼きたての大根おろしは言うこと無し!( ´∀`)
味はあんまり濃くはなく、生よりは干した方が良いのかもだな
でも旬の魚ですね、良かった

取扱注意


佐藤正午さん
佐藤ワールドの住人になってしまったのですんなり入ってきて楽しめた
時系列的には「彼女について」と「Y」に挟まれてる
その前が「放蕩記」だから、ここら辺から今の佐藤ワールドになってきたのかも
主人公は津田の原型ですね、津田ほどイヤミじゃ無いセリフが良い

このお話はものすごい広がりを持ってるように感じる
登場人物一人一人に癖がありすぎて、それを書き出したらなんちゃらサーガになりそう
その一つであるナボコフ的な設定が「月の満ち欠け」に繋がるのではなかろうか?
おじさんは何も言わないけど、「おまえに言ってもわからんだろうが、俺と綾は前世から繋がってるんだよ」なんてセリフがあったらすごかったなあ

というか、ワールドは繋がっていて既にサーガになってるのか??
実は「彼女について」と「Y」は昔読んでいて良く覚えてない
このブログに感想があったけどよくわかんない( ´∀`)
デビュー作から通して読み直したらいろいろな発見があったりするのかも??

2019年2月11日月曜日

やまちゃん


三連休の最後の昼、無難なところでやまちゃんにした
駐車場は一杯、店の前にも停まってた、繁盛してて良いね
終わって出るとき、店の戸に満員ですの張り紙がしてあった
混んでるから入店するなって感じだね(^_^)

いつもの担々と麻婆、いつもの味で美味しい
最後のスープまで飲み干し、健康に悪いなあ
しかし妻はたまにスープ飲み干したくらいで健康に影響なし、と言ってました
まあそうですかね(・∀・)

もともとお腹の調子が良くなかってので、酸辣湯麺にするつもりでやはり麻婆にしてしまったんだが、案の定というか、お腹がずっと変だった
美味しいけど結構きます ( ̄ー ̄)

Tcl/Tk GoClipの移植


この三連休はTcl/Tkで遊んだ( ´∀`)

LinuxMintへのPC環境移行を踏まえ、GoClipをmintでも使いたい
でもLinuxでのクリップチェーンの仕組みがわかんないままなので進まない
そんな中で、クロスプラットフォームについて調べてたら出てきたのがこれ、Tcl/Tk

もともとはLinuxみたいだがwinでも使えて、書いたコードはLinuxで当然使える
GUIをいろいろ駆使できて、にもかかわらずスクリプト!!!
デモ見てびっくり、これはすごいわ~(゚Д゚)
無料でこんなツールがあったんだなあ、世界は広い・・・

しかしインストだけで結構大変だった
win用はActiveTclになってて、最新版の8.6.8.0はエラーで起動しない
一つ前の8.5.18.0でやっと動いた
多分私のOSがwin7(sp1にもなってない)だからだと思う
locale***.dllが無いってメッセージが出てそれには対応できたけど、結局エラーで進まない┐('д')┌
まあ一つ前くらいならあんまり変わらないだろう、動いたから良し!!

で、いろいろいじってガワは何とか出来た
このタブ付きのウインドウがスクリプトで簡単に出せるんだからすごいですよねえ・・
ちなみにクリップデータはタイマーで一秒おきくらいに取りに行くことにした
ちょっとイヤだけど動作としてはおかしくないしCPU占有率も全然です

ちなみに実行ファイルはwishになっていて、メモリ使用は今の状態なら7.5M
自作のexeだと2Mしか使わないから差はあるが、まあ大したことないっすね

2019年2月10日日曜日

カプヌー


TopValueで新しいPBカプヌーを買ったとき売り切れていて買えなかった日清カプヌーの新製品がラッキーにはあった
早速チャレンジ!

<海老のトマトクリーム>
まったり系のトマト味でネーミング通りって感じです
海老はトッピングで入ってるけど味は出てないと思う
トマト味にエビの風味は勝てない、特に美味しくはないですね

<やきそば弁当 たらこ味バター風味>
これは面白い味だった、結構酸味があったような
しかしこの系は湯切りの後混ぜるのが面倒
焼きそば系の味付けは液状にするとか、さらっと顆粒ですぐ混ざるようにするなり、材質的な工夫が必要なんじゃないかな?

2019年2月9日土曜日

カプヌー


バスの時間待ちでマックスバリューをぶらぶらしてたら新しいPBカプヌーを見つけた
ミネストローネなどの西洋風のものは無くなっていて、韓国風が二つ
早速チャレンジ!

<スンドゥブチゲ味>
普通に韓国っぽい、キムチ風の味付けで辛さもあり
結構豆腐が入っていて美味しい、まあまあ

<タッカルビ>
鶏肉の具は結構良いいけどおとなしい味付けで韓国って感じはしなかった
でも最後に飲んだスープはこくがあってまったり美味しかった
コチュジャンって甘みもあってこういう感じなんだね
美味しいんだけどラーメンの味としては今ひとつなんだと思った

JScriptでInputBoxを使う


最近GoClipの関係でJScriptを書きまくってたら慣れてきたのかエラーが出なくなってきた(・∀・)ノ
しかしどうしてJScriptにはInputBoxがないのかね
たいしたネタじゃないけど備忘録として書いておく
VBScriptにはあるのでwsfにして両方書けばOK

<job id="hogehoge">


 <script language="VBScript">

   Dim Input

   Input = InputBox("名前を入力してください。")

 </Script>

 <script language="JScript">

   WScript.echo(Input);

 </Script>

</job>


こんな感じね
VBは行末に「;」があるとだめ
書きづらいわ~(´・ω・`)
まあ慣れなんでしょうけど

HTMLってタグを書くときはエスケープしなくちゃいけないんだ!
https://webtools.dounokouno.com/htmlescape/
ここでやってみたけどめんどくさ・・・┐('д')┌

ちなみに今少しTcl/Tkってのを勉強中
Linuxはやっぱ良いのかな??

2019年2月8日金曜日

クリップボードチェインの話、Linuxプログラミングとかも


変わってたんだ!知らなかった!(゚Д゚)!
http://www.geocities.jp/iooiau/tips/watchclipboard.html

チェインの仕組みは
①case WM_CREATE:
  hwndNextClip = SetClipboardViewer(hwnd);
②case WM_DRAWCLIPBOARD:
       /* 処理をしてから次に渡す */
  SendMessage(hwndNextClip, uMsg, wParam, lParam);
③case WM_CHANGECBCHAIN:
       /* 次が変わったときの処理*/
④case WM_DESTROY:
   ChangeClipboardChain(hwnd, hwndNextClip);

だけど、Vista以降は少し簡単になって
①case WM_CREATE:
   AddClipboardFormatListener(hwnd);
②case WM_CLIPBOARDUPDATE:
    /* 処理 */
③case WM_DESTROY:
   RemoveClipboardFormatListener(hwnd);

になったらしい!!
チェインの次の人のことを考えなくて良くなったって事だね
まあ一度使い方を覚えてしまえば淡々とコーディングするだけだから従来通りでも不便は特にないけど、簡単になったのは良い!
インクルードはwinuser.h (include Windows.h)
ライブラリはLibrary User32.lib
Vista以降らしいから普通にコーディングすればPellesCでイケルかな?
GoClipも書き換えるか??

しかし今でも問題なく動いてるからワザワザ書き換えることも無いかな~(・_・?)
それより同じものをLinuxで作りたくて調べてるけどよくわかんない
クリップチェイン自体あるのかどうかがそもそも不明
どうしたら良いんだろ?
winのプログラミングについては情報がたくさんあるが、Linuxは探すの難しい
スクリプトについては情報豊富なんだが・・・
なんか変だよな~
Linuxって自分でソース落としてビルドみたいな感じもあるから、知りたければ似たようなソフト探してソース見りゃあ良いじゃん、ってことなのかな?

クロスプラットフォームってあるよね
言語ベースの関数しか使わないプログラムならわかるけど、OS固有のapiを使っちゃうとどうなんだろ?
JAVAみたいな中間処理系ならイケルのかな??
まずはLinuxで窓を出す系のプログラミングやってみたらいいのだろうか?(・_・?)

2019年2月7日木曜日

図書館考察


世の中で多く読まれてると思われる本が図書館にない、あるいはその蔵書が少ないという不満を持っていた
しかし読書メーターの図書館関係のコミュニティを眺めてたら、図書館への感謝みたいな感想が多かった
また、司書が色んな本を薦めてくれることを良しとしている意見もあった
で、ちょっと考えた、図書館って読みたい本を探して読む場所じゃなくて、蔵書の中から読みたい本を探す場所だったのかなと

確かに昔は後者だったと思う
ワタシも学生時代はよく通ったが、本棚を眺めて面白そうな本を探すのが楽しかった
新しい本が入った時はすごくうれしかった
世の中に本はあふれてるし、その中からどの本を買うかは図書館の判断、購入希望はできるけど、基本は図書館の判断で良いよね

でも最近は読みたい本は自分でネットで検索したりして探す(少なくとも私は)
その本が図書館にあればすぐ予約手続きって感じになってた
当然ワタシの読みたい本が図書館にあるとは限らないので、なければ普通はあきらめる
それで良かったんだけど・・・・
そもそも図書館の役割って何なんだろう??

2019年2月6日水曜日

ジゴロ


中山可穂さんの短編集、前回の作品は中編って感じだったけど本作は本当に短編
一応シンガーのカイさんが主人公のようなので連作短編って事になるのかな
結構軽めで、肩の力を抜いて読んだ方が良い
それが作者の意図だったようです
どれか一つと言われたら私はダブツを取ります

ラトゥウユ
どこかで読んだような設定はこの作者さんの常ですね
微妙に角度が違って違う作品になる
家を出てまたヨリを戻すけど再婚はしない、そういう形もあるんだなあ
すぱっと切れるラストも短編らしい

ジゴロ
この設定も読んだことある
子供は同性愛が越えられない壁なのかな
ラストはよくわかんない

ダブツ
カイさんはちょい役、でも面白い展開でした
しかしこれが女性心理だとしたらワタシには到底理解できませんわ┐('д')┌

恋路すすむ
タンゴが出てきて読めない展開で楽しめたが、ラストは醜悪

上海動物園にて
これは何だかよくわかんない
カイさんのちょっとしたスケッチ?
それならラストのメグさんとのやりとりは余計じゃないかな

これは経費で落ちません!3


青木祐子さんのシリーズ三作目、予約していたが結構待ったような気がする
人気ですね
っつーか、ワタシがこのシリーズを読むようになるとはなあ・・・

良い味はそのまま、まったり系OLミステリって感じです
大きな事件とは言えないものの周りの人とのいろいろないざこざってあるよね、そういうことを丁寧に楽しく書いてくれてます
恋愛もあって進展が楽しみだけどこれは憎らしいほどゆっくり
面白いから許すけど

ラストで新しい登場人物が紹介され、波乱含みで続くとなりました
人気シリーズだけに作者さんの余裕ですかね
四作目も予約入れました( ´∀`)

2019年2月4日月曜日

内なる敵


マイクル・Z. リューイン、シリーズも三作目
私が慣れてきたのか回りくどいジョークも自然に入ってきて結構楽しめた
訳のわかんない依頼を受けて色んなところに行っていろいろ調べていくウチに新しい事実が次々と出てきて・・・
口が達者なだけでタフでもなく女性にもてるわけでもなく、恋人にお灸を据えられたりの探偵像が愛すべき存在に思えてきた

今回は殺人は無いので少し安心だがラストの大立ち回りはお約束?
どんでん返しはお約束だと思うが、ワタシにはわかりづらかった
タイトルからおおよそは予想できたけど、人間関係って難しいよなあってところか?

こういうお話は宮部さんの杉村君に近いですね
モチロン宮部さんが後だけど
四作目も予約しました( ´∀`)

文字エンコードの話


GoClipでものすごく便利にはなったんだけど、検索サイトに送る文字列がShift-Jisにしか対応できてない
いわゆるURLエンコードってやつは文字コードに%を入れるだけなのでGoClipに実装したが、そもそものエンコードは出来ない
昔自作したブラウザでは実装してたはずなので調べてみたけどよくわかんない(・∀・)ノ
Cだと難しいのかも(・_・?)

でちょっと調べたら、ecl.js って jscript のライブラリがあった
EUC-JPもUNICODEやUTF-8、7なんてものにもエンコ・デコード出来るらしい
すごいね~!!
で、これを使うことにしたんだが、結構時間がかかった

このライブラリをうまく使えるかどうか試すために、まず直接ecl.jsにコードを追加してみたが、これが間違いの元だった(-_-)
ここで書かれてる関数はステートメント形式になっていて、関数を使うためのコードは関数の後に書かなくちゃいけない
冒頭に書くとエラーになる
関数定義で書いてくれてたらそんなこと無かったんだけど
で、エラーの意味がわかんなくて悩んで、解決するまで一日かかりましたわ┐('д')┌

実際にこのライブラリを使うときは外部ファイルとしてインクルードすることにした
wsfを使います
インクルードは冒頭でするから、関数は自由に使える、最初からwsfにしておけば時間的には節約できた
やれやれ┐('д')┌
でもjsの関数の勉強にはなった、今更だけど(・∀・)ノ

jsの関数の記述方法が1種類しか無ければこんな事にはならなかった
柔軟な言語ってのも考えものだよね
ドイツ語って格が厳格で覚えるのは面倒だけど覚えてしまえば英語よりずっとわかりやすい
コンピュータ言語も同じようなところあるよね
変数の宣言とか、厳格なCの方がBASICよりワタシ的にはわかりやすい

ちなみに、エンコードの話だけど、ecl.jsではテーブルを用意して変換してるだけみたい
Aの文字コードをBの文字コードにするだけだから考えたら単純なのかも
理屈さえわかればCに実装出来そうだ
dllにしておけばより簡単だったりするんだろうか?
っつーか、多分あるな、私が知らないだけで(-_-)

でもこれでいいような気もする
GoClopは要するにクリップ文字列を引数で渡せるランチャだ
機能をいろいろ追加するよりは、複雑なことは jscript で後で書いたほうが良い
その方が柔軟で使い回しも良いはず
GoClopのToDoはあるけど、絞った方が良さそうだな

2019年2月3日日曜日

暖龍、六花亭


正月以来の母と食事
いろいろ行ってみたけど今日はいつもの暖龍
中華連チャンだ~(-_-)

母は五目中華麺、私はマーラー麺でいずれもハーフ
これにかに玉チャーハンのレギュラーを頼んで二人で分けて食べた
いつもはかなり食べる母だが今日は控えめで、チャーハンはほぼ私が食べた
満腹ですわ

しかしさすが母親、甘いものが食べたいと言い出したので場所を変えて近くの六花亭へ
二階の喫茶で私はコーヒー、母はパフェ
六花亭は混んでました
全体に12号線が激混みだった

普段あまり混んでるところは走らないのでこういう道を走るとぐったりしますわ

2019年2月2日土曜日

紅麹屋


かなり久しぶりに紅麹で食べました
末っ子が受験なんだけど二次の願書、志望校で迷ってまだ出してなかった
ようやく決まって出すことにしたけど速達にしたいってことで豊平郵便局へ
で、ついでに紅麹ってことに
末っ子だけど、センターがすごく良かったので迷いが出たみたいだが結論は元サヤ、今更迷ってもね~┐('д')┌

店に入ったのは12時過ぎだが車は余裕で止めれたし店内も空いてた
食べたのは坦々とマーラーでいつも通り
うまい!!!!!
野菜のシャキシャキ感がたまらん( ´∀`)
スープの香辛料も絶品

いつもオーダーを取ってる兄さんが今日は中で作ってた
帰るときも店内は空いてた
ちょっと気になりますな

2019年2月1日金曜日

正規表現、最短一致?の使い方


var str="(hoge0) hoge1 hoge2 hoge3.jpg"
この文字列から hoge1 を抽出したい
正規表現使ってreplaceでできるんだがどうもうまくいかない┐('д')┌

var result=str.replace(/\(.*\)\s(.*)\s.*$/, "$1" );
これだと結果はhoge2になってしまう

で、
var result=str.replace(/\(.*\)\s(.*?)\s.*$/, "$1" );
でOK!

これを最短一致というらしい
基本だったみたい!!(゚Д゚)!!
先頭から最短で探すか最長で探すかのオプション
最短は?が必要だからデフォルトは最長って事になりますよね
最短の方が高頻度で使うと思うんだけどねえ?(・_・?)?

jscriptの正規表現を使い出してひっかかったことの備忘録です
GoClipから呼び出してクリップの文字列整形に使ってるが、簡単に文書の整形ができて良いです( ´∀`)