その他」カテゴリーアーカイブ

サポート日記からその他に変更20190530

図工室の椅子

図工室の椅子と呼ぶらしい。技術家庭室にあった椅子。

実はこれ、工作の時の作業台になるのだった(°-°)。横にして使うらしい。丸い穴はドリルで穴あけをするため。天板の縁がわずかに出ているのは、横にして木材をノコギリで引くときに木材を固定するため。万力を装着できるとか。背もたれのないのは片付けやすいため。学校用なので耐久力がありそう。(\^o^/)

作業台としては手頃な大きさ、30×30、高さは420と450の2種類、おそらく小さい方は小学校用だろう。材料はコナラ、ニラ、硬くて重い木だ。座面が平らなので補助椅子としてだけでなく、補助机、踏み台に使える。花台にしている画像も見つけた。木工作業する時にベランダに持っていくのも簡単。長尺ものを切る時は2脚使うらしい。そうか、2脚あれば一枚板天板の足にもなる。

学校から放出されたような、使い込まれた中古品をネットで探す。落書きがしてあるやつとか、かなりくたびれたのがある。値段は4,000円くらいから上。意外に高いなと思いながら「これでいいかも」なのはSold outだったりして、中古を探すのもだんだん面倒になってくる。骨董品屋でたまたま出物があればラッキー、のような気長に探すアイテムだ。

新品は7,000円から17,000円くらいで売っている。すぐに使いたかったので納期が早いのを一つゲットした。

仕事部屋に置いてみた

片手で移動させるのに便利そうなので、手掛け用のスリットがついているのにした。

見た目が可愛い

背もたれ付きの椅子と比べて邪魔にならない。ちょっと持ってきて座る、踏み台にする、物を置く。これはいい。あと2つ追加しよう。

河津桜

これでようやく満開の河津桜

伊豆河津では2月になると咲き始め、3月には終わっているはずの梅より早く咲く河津桜。梅はいつもより少し遅いくらいだが、こちらはかなり遅い印象。

ミザクラ

ミザクラは早く花が咲く桜。実がつくのも早い。梅雨前には食べられる。

ウメ

同じ日の梅。ウチで一番遅い梅。まだ蕾が多い。

やってることの分だけコードがある、のはフツーのこと。

WEB+DB PRESS vol.127」(以下、wdp127)にリファクタリングの話があったので読んでみたら良かった。

https://gihyo.jp/magazine/wdpress/archive/2022/vol127

知らない単語が出てきたのでメモしておく。

□ 凝集度(cohesion)
□ 結合度(coupling)

調べてみると、語源は1979年あたりにヨードンが提唱していたらしい。

□ DRY(Don’t Repeat Yourself)

コードの最適化、なんでもDRYというルールがあるそうだ。

プログラミングしていると、同じようなコードを何度も書くとき、共通化できるのでは?と考える。あちこちに書いておくと、あとでそこに修正が生じた場合にあちこち直さなくてはならないため不便だし、処理が同じならモジュール化すべきだという考えだ。

wdp127では凝集度について、論理的凝集は避ける、ようなことが書いてある。要はフラグを使った関数内分岐を避けよ、という意味と理解した。ウチでは同じような意味で「多機能関数はダメ」というルールがある。

結合度については値は引数で渡す、ようなことが書いてある。要はグローバル変数は避けよ、という意味と理解した。ウチでは「関数の中はローカル変数だけを使う」と「グローバル的な変数にはゲッターセッターを用意して関数を介して取得する」というルールがある。ただし例外として、画面に一覧を表示する際のフォームオブジェクトはグローバル参照をしていいというルールもある。画面に表示する情報についてゲッターセッターをすべて用意するのはあまりにも面倒だ。フォームオブジェクトは名前付のルールでわかるようにしている。

ウチでは上記のほかに、

・モジュール内の構造は原則2つまで

forやifの構造が3つ以上出現する場合は、さらなるモジュール化を検討せよ、という意味だ。

・処理の分だけコードはある

仕様がケース分岐しているのであればコードも分岐している、のがフツーだ。入り口から分岐させて、中に共通処理を見つけたら共通モジュール化する、のが良い。

・デバッグしやすいコード

できるだけ1行で書く、というコードはダメ。if文の中に関数を記述したり、引数に関数を記述するのはわかりやすいNGだ。デバッグする時にたとえばforループが何回回るのかは重要な要素だ。上手くいかないときは0回の場合が多い。これをデバッグするには繰り返し回数を見れば良いのだが、大体はなんかの関数の戻り値である。これをfor($i;1;myFunc())のように書いてしまうとmyFunc()の戻り値を見たくなる。$count:=myFunc()とか記述して$countの値を見ることになる。それなら最初からそういうコードにしておけば良い。

・プログラマに必要な機能はおそらくユーザにも必要

上記はソース内部の記述だが、表面的な仕様でもデバッグに便利な機能を実装しよう。あるテーブルの中身が見たいような機能は言われなくても作ってしまう。デバッグでよく使うツールであればプログラマは便利になる。そのままリリースして、ユーザに「削除して」と言われてから「隠す」ようにすればよい。

まだ語り尽くせないので、また思いついたら続きを書く。。。

4D v18で変わった「Form event」コマンド

「4Dアプリ開発ガイド v18対応版」を制作していたらコマンドの仕様変更に気づいたので報告する。これまでに気づいているのは次の2つ、「FORM Event」と「PAGE SETUP」。

FORM Event

フォームイベントコマンドの仕様が変わった。以前は次のように記述していた。

//A02_frm
// オンロードメソッド
Case of
: (Form event=On Load)
A02_frmOnload
End case

このコードをv18にペーストして実行すると、次のようなエラーになる。

関数の結果が式と一致しません。定数のタイプが無効です。変数のタイプが異なるため比較できません。

ランゲージリファレンスを見ると、v18では戻り値がオブジェクト型になっていた。

https://doc.4d.com/4Dv18/4D/18.4/FORM-Event.301-5233147.ja.html

v15とかv17のプロジェクトをv18に変換すると、次のようなコードに変換される。

//A02_frm
// オンロードメソッド
Case of
: (Form event code=On Load)
A02_frmOnload
End case

「Form event」コマンドは「Form event code」に変更されて、オブジェクト型を返す「FORM Event」が新しく追加された、ということらしい。従来取得していた整数型のイベントコードは「code」というフィールドに格納されている。もともとコードしか返さなかったを、イベントのトリガーとなったオブジェクト名も返すようだ。いいかもしれない。これまでイベントハンドラはオブジェクトメソッドに書いていたが、フォームメソッドにまとめて書いて、「もしこのオブジェクト名だったら」という記述ができるようになったってことかな。

発生したcodeだけを必要とする場合はどちらのコマンドを使っても同じみたいだけど、オブジェクト型を使ってドット表記を参照する方が流行りっぽくてかっこいいかもしれない、とか色々考えて次のようにした。

//A02_frm
//オンロードメソッド
C_LONGINT($frmEvnt)
$frmEvnt:=FORM Event.code
Case of
: ($frmEvnt=On Load)
A02_frmOnLoad
End case

修正ついでに一旦ローカル変数に取得するようにした。これでデバッグしやすくなる。Case文に何回も書くと、その数だけFORM Eventが実行されてしまい、気づかれるほどではないにしても性能的によろしくないので。

PAGE SETUP

廃止になった。プロジェクトをv18に変換すると、次のようなコードに変換されている。

_O_PAGE SETUP

代わりのコマンドが用意されていて、SET PRINT OPTION/GET PRINT OPTION、Print settings to BLOB/BLOB to print settingsを使う、とランゲージリファレンスに書いてある。

https://doc.4d.com/4Dv18R5/4D/18-R5/o-PAGE-SETUP.301-5128159.ja.html

もともと「PAGE SETUP」は、印刷ダイアログを表示することなく、用紙とか印刷設定を前回と同様またはいつも決まった所定のセッティングで印刷したいときに使うコマンドであった。ユーザが毎回印刷設定ダイアログで設定してから印刷する場合は不要だが、印刷設定ダイアログを出さずに印刷したり、前の設定を覚えておいて欲しい場合に実装することになる。v18ではまだそのような仕様を使う状況に遭遇していないので、使うことになったらまた報告する。

夏みかん、今年の収穫は終了

庭に甘夏の木がある。3月、普通の甘夏はこれからが収穫期、だがうちのは終了した。

3月の様子

もう12月から黄色く色づいていた。今年は豊作と思っていたが。

12月の頃の写真

1月くらいからリスがかじり出して、ヒヨドリがつついて、メジロが食べたり、風で落ちたり、どんどんなくなっていく。昨年はこれらの影響で人間は一つも食べられなかった。

リスが食べているのならもう食べられるのでは?ということで、今年は1月から風で落ちたのを食べ始めた。酸っぱい。下手に食べるとむせて大変なことになる。砂糖をかけて食べるとむせないことに気づく。昔ババアがそうやって食べていたのを思い出す。若い頃は酸っぱいものを食べても、多少むせても平気だったがこの歳になるとむせかたが半端なくて辛い。なるほど砂糖をかけて食べるとむせる心配がない。これはこれでかなり美味しい。

2月に入ると樹熟が進んで甘くなってくる。別に八朔があって、こちらは今年初収穫。2月に14個取れた。八朔は美味しいな。

八朔も甘夏も皮は砂糖で煮てジャムにする。鍋に甘夏5個分くらいの皮を千切りにして入れて、水を張って煮る。沸騰したらお湯をこぼして、また水を張って煮る。これを3回繰り返す。4回目の沸騰の後、水が皮よりも少なくなったら砂糖を入れる。350gから400gがうちのお好みかな。これで水気が半分くらいになるまで煮詰める。程々で良い。冷めていく途中で水分が減るからね。

5個分の皮でこの容器の二倍くらいできる

3月14日、最後の4つを収穫。

間引きしていないせいか大きさがかなり違う
最初リスがかじって穴を開け、そこを鳥がつついてこうなる。何十個も食べられた

残りはリスと鳥にやられた残骸。今年は人間も食べられたので良かったです。