一緒に仕事をしている人に、プログラミングは物凄く優秀な人がいる。簡単なものなら話しているそばからコーディングし、仕上げてしまう。それも、かなり早い。

 

しかし、設計経験がない。どう教えようか。

 

悩んでいるところ、とりあえず設計書を作ってもらった。

あー!なるほど。

 

どういうことかというと、バッチ設計書、DB設計書、画面仕様書、を作ってもらったのだが、「整合性がきちんととれていない」のだ。

これは、各論には強いが、総論とか全体の整合性という点が弱い、ということだ。

 

そこで、全体でデータがどう流れるのか、まず確認して、ならそれぞれが何をすればいいのか、を学んでもらうことにした。

そのあとに書いたものを見ると、これまでとは比べ物にならないくらいの状態であった。

 

全体が見えて、それぞれバランスよく理解ができていて、初めてまっとうな設計ができるのだなと、改めて感じた。

 

 

AD

子供は4月2日に産め

テーマ:

子供は4月2日に産むのがよいと思う。運勢が、星座が、とかではない。単純にお得だから。

 

お酒は二十歳になってから。選挙権は18歳から。というのが法律である。これは満年齢よるもので、同じ学年の人より先取りができる。

が、これは小さな理由。ただ、学年ではなく満年齢を採用しているものがある、というのはひとつ重要。

 

さて、大きい方の理由。地域によっては乳幼児や小中学生の医療費が無料である。これは満年齢ではなく学年を採用している。

例えば小学六年生まで、とすれば 4/2生まれだと12歳と364~365日(うるう年の場合)の間適用されるが、4/1生まれだと12歳の誕生日の前日までの適用となる。実にほぼ1年、差が出る。

 

 

自治体等の助成関係は学年を採用していることが多いので、今の制度なら4月2日に子供を産むと、親としては一番お得なのではないか。

 

 

 

先日の問題 の問1の回答

 

------------------------------------

問2 印刷のタイミング

1. 印刷対象のブックを選択したらシート毎に順次印刷を行う。印刷処理が終わったらすぐに、次のブックを選択する。

2. 印刷対象のブックを選択したらそのブックのシートをすべて選択し一度に印刷を行う。印刷処理が終わったらすぐに、次のブックを選択する。

3. 印刷対象のブックを選択したらシート毎に順次印刷を行う。印刷後に待ち時間を設ける。待ち時間は15秒程度とする。

------------------------------------

 

これも過去の失敗談に基づく。

2001年とか2002年くらいだったろう。データベースの定義書をDBMSから情報を取得して作成する、というもの。

DBMSは大型汎用機上にあるDB2で、定義情報をODBC経由でExcelで取得してローカルのDB(他にインストールできるものがなかったのでAccessを使用)へとため込む処理と、取得したデータをExcelの定義書として作成し管理する処理と、特定のテーブル定義だけを出力しても、全体で通し番号として付与しているページ番号を正しく印刷する処理を作成した。

 

最後のものには当然、一気に印刷する機能も付けていた。

一通りテストを終え、一気に印刷するテストを実施した際、すぐにスプールがパンクした。これ、スプールせず印刷データをプリンタに直接送ったとしても、プリンタ側のバッファを食いつぶすことになる。

 

つまり、大量の印刷をする場合には、一気にデータを送り込むのではなく、中断させながら送る必要があり、正解は 3.となる。

1.も2.も、スプールを食いつぶすことには変わりない。

 

 

先日の問題 の問1の回答

------------------------------------

問1 ブックの開き方/閉じ方

1. 印刷対象のブックを印刷前にすべて開く。印刷がすべて終了したときにすべて閉じる。

2. 印刷対象のブックを印刷直前に開き、印刷後に閉じる。これをブック数回繰り返す。

3. 印刷対象のブックを印刷直前に開き、印刷後は開いたままにする。印刷がすべて終了したときにすべて閉じる。

------------------------------------

 

考慮すべきことは何だろう?

一般ユーザーであれば、「確実に印刷されること」が重要だろう。その次に「速いこと」かと。

 

1997年か1998年のことだ。COBOLのプログラムのコンパイルリストを印刷するのではなくデータとして大型汎用機からダウンロードし、2000年問題で影響しそうなところをピックアップするための処理をVBAで作成した。

定義とその利用箇所をVBAで関連付けし、年月日に関するところを抜き出し、その中でも桁数の足りないところを色付けして影響調査をプリントアウトする処理だった。本数は800本くらいだったか。

 

その時、最初に行ったやり方が 上記の3. であった。しかし、夜10時ごろ、実行してすぐ帰ったのだが、翌朝10時で終わっていなかったのだ。

検証したところ、10ブック目を開いたあたりから急激に速度が落ちていたのだ。

そこで、上記2.の措置を取ったところ、問題は解消された。

 

つまり、正解は 2.となる。

1.はおそらく、全部OPENするまでに相当な時間を要するか、途中でエラーになるだろう。

 

PCのリソースは有限であること。不必要なメモリは解放してやること、が大量の処理が行われる場合には必要である。

先日、gmailを今一つと書いたが(http://ameblo.jp/tech-note/entry-12210404841.html)、おそらくはメーラーを使うのがいけないのかと思う。

 

そもそもpop3とimap4とで、同じように考えてはいけないのではないか。

 

pop3はローカルにメールを取り込むもの。基本はサーバーから削除する。一通一通がそれこそ「手紙」のイメージだろうか。振り分けるにしても、その振り分け先にある、という状態になるメーラーがほとんどだし、それに慣れているから違和感は感じなかった。

 

imap4はサーバーにメールを置くもの。gmailを使うまではこのプロトコルを使ったことはなかったので、正しい説明になっているかわからないが、メーラーが追いついていない、という気がしている。

 

裏を返せばgmailは「サーバー上にある」というメリットを最大限に活かしているようにも思う。

・googleだからからだろう、メールの振り分け、というよりは必要に応じて検索を使えば事足りる。

・もちろん振り分けもできるが、タグ(複数つけられる)先にどこでも振り分け可能。ただ、物理的に分けているのではないので、例えばメールを削除するとどの振り分け先からも削除される。

・処理が終わったメールはアーカイブに突っ込めばよし。アーカイブ後も検索はできる。

 

他のメールサービスではそこまでは難しいのではないか。

 

たまには趣向を変えて、問題なんぞ作ってみました。

 

問題

 

大量のExcel(ブック数は2,000程度、各ブックのシート数は1~5枚程度、1ブックのものをすべて印刷しても10ページ程度、すべてのシートを印刷、印刷レイアウトは調整済み)を開いて印刷する、というVBAの処理を作成する場合、次のうち適切なものに近い設計はどれか

ただし、記載されていない条件はすべて平等であるものとする。また、実行するExcel VBAのブックは印刷ではない。ブックのリストはすでにあり、実行に問題はないものとする。

 

問1 ブックの開き方/閉じ方

1. 印刷対象のブックを印刷前にすべて開く。印刷がすべて終了したときにすべて閉じる。

2. 印刷対象のブックを印刷直前に開き、印刷後に閉じる。これをブック数回繰り返す。

3. 印刷対象のブックを印刷直前に開き、印刷後は開いたままにする。印刷がすべて終了したときにすべて閉じる。

 

問2 印刷のタイミング

1. 印刷対象のブックを選択したらシート毎に順次印刷を行う。印刷処理が終わったらすぐに、次のブックを選択する。

2. 印刷対象のブックを選択したらそのブックのシートをすべて選択し一度に印刷を行う。印刷処理が終わったらすぐに、次のブックを選択する。

3. 印刷対象のブックを選択したらシート毎に順次印刷を行う。印刷後に待ち時間を設ける。待ち時間は15秒程度とする。

 

解答はそのうちアップする。

iPadのトラブル

子供が教育教材をやっているが、学習にiPadを使うもので、課題を提出したりできる。

自分たちが子供の頃からすればうんと技術が進んだなと思う。

 

さて、先日「課題が提出できない」と行ってきたので「キャッシュとかいらないデータとか消してみたら」と伝えた。

しかし、直らないそうなので、休みの日に見てみた。

 

課題が提出できない以前の問題で、無線のアクセスポイントにはつながっているがインターネットにつながらない状態であった。

 

しかし、他の機器は問題なくつながる。家には無線LANのアクセスポイントが2つあり、セグメントを変えてある。片方がだめならもう片方に、ということをやってみたが、だめであった。

iPadを再起動してもだめ。

 

故障かな、と思ったが、念のためiPad側のIPアドレスを表示させ、IPアドレスの取り直しをした。ここで気づいたのだが、セグメントの違うアクセスポイントなので、アクセスポイントを切り替えてIPを取得しなおすと当然違うIPアドレスが払い出される。しかし、IPアドレスが変化していないのだ。

 

いったんアクセスポイントをiPadから削除し、再認識させると問題なく動くようになった。

 

まとめると、iPadではIPアドレスが正しくリフレッシュできない状態になることがあるらしい。そのときはアクセスポイントをいったん削除すると正常に動作するようになる、ということのようだ。

 

gmailが今ひとつ

テーマ:

今の仕事上の契約先、gmailを法人契約している。

通常はPCならブラウザ、スマホだとアプリで見る人が多いのかもしれない。が、私はメーラーを使っている。もっというと秀丸メールを使っている。

 

秀丸メールはいろいろと使いやすい部分があるが、PC変更時に引っ越しがしやすいこと、は大変役立っている。OSか起動しなくても、HDDを別のPCで読ませさえできればデータ受信フォルダをコピーし、新しい環境でデータ受信フォルダを設定してやればほぼOKである。

昔話だが、OutlookやOutlookExpressなんか、引っ越しがどれだけ面倒だったことか・・。

 

そういう秀丸メールへの想いはいいとして、gmailの読み込みが有り難くない。

運用系のメールもわんさか飛んでくるので一日に1,000通くらいは届いてきている。振り分ければそれほどでもないのだが、問題は

・メールの読み込み通数が変

ということ。3連休があったとして、次の営業日に出社すれば丸三日分プラス営業日の出社氏までのメール が少なくとも溜まっている。仮に3,000通とする。

通常なら一回のPOPで「3,000通一気に受信」となるのではないかと思うのだが、7通ずつとか、14通ずつとか、そういう数で読む。時々263通づつくらい読んだりもする。

つまり、休み明けすぐに溜まっているメールの確認ができない、ということだ。


またメールの読み込み順が、必ずしも古いものから読まれている訳では無いのだ。これは読み中に「あれ?」と気がついた。

 

秀丸メール側の問題かと思っていたが、どうやらgmail側の問題らしい。他のメーラーでも同様のことが発生するようなのだ。

前者はともかく、後者はメールのまとめ方がIDではなく、同じタイトルならまとめる、とかいう仕様のせいなのかもしれない。

 

その2点、POP3で読む限りとても嬉しくないものだ。

もしかするとIMAP4で設定してしまえば問題ないのか?それは試していないが、gmailを使う限りにおいてはIMAP4の方が使い勝手がいいのかもしれない。

試してみるか・・・。

 

 

2001.12.27

 

 

※ちょっと今度実験し直ししてみるか。Excel2000くらいの情報。

 

コンボボックスやリストボックスにデータを表示する場合、データを一件ずつ追加していくことがあるが、件数が多いとどうしても遅くなる。

 

代替手段として2つある。

 

一つ目。.RowSource プロパティにワークシート上のデータ領域を設定する方法。

これはワークシート上に行削除や行挿入が行われるとリンクが外れるので、都道府県などめったなことで変動がない情報に向く。

 

二つ目。.List プロパティにRedimで割り当てた配列を設定する方法。.Column プロパティにも設定はできるが、実務上は .Listだろう。

一次元、つまり Redim (n) の定義のものであれば一列の選択項目が m 行作られる。

二次元、つまり Redim (n, m) の定義のものであればn列分の項目を持ったリストが m 行作られる。

試していないが、Redim (n) の定義した Type の項目は、Typeの項目数だけ列を持ったリストが n 列分作られるかと思う。逆の場合は .Column を使うことで逃げられるかも。ただ、.Columnを使うときは .ColumnCount を大きくとる必要があることに注意。

 

 

ジョハリの窓

職場に不思議な人がいる。

 

・周囲から「遊んでばかりいる」と誤解を受けている。

というのだ。その誤解を解きたいからと、

・エンジニアなのに不慣れな問い合わせ窓口の仕事をして、夕方には疲れ果てている。

・だから夕方からだらだらしていて、それが周囲には遊んでいるように見えると噂される。

・自分の仕事は人の居ない時間帯でないとできないから深夜や休日に出ているのだ。

なのに周りがあいつは遊んでばかりいると噂を流されている。

と、プロジェクト内のチャットで語っていた。

 

仕事はほどほどにするし、責任感はあり、自分がやらないと、というタイプだ。

しかし、チャットの量が半端ない。仕事に関係ないチャンネルで雑談を散々している。少なくとも多くの人がそういう認識をしている。

 

仕事で関わっていない限り、周囲は「遊んでばかり」と感じても仕方なんじゃ?と思うのだが、本人は気づいていないようだ。

 

さて、ジョハリの窓。どんなものかというと、例えばAさんの性格やふるまいについて。乱暴だけど、これをAさんの「自己」とする。

・Aさん自身が認識できているAさんの自己と、Aさんが認識できていないAさんの自己。

・他人が認識できているAさんの自己と、他人が認識できていないAさんの自己。

これを組み合わせるたものに名前がついている。

 

開放の窓:Aさんも他人も知っているAさんの自己
盲点の窓:Aさんは気が付いていないが、他人が知っているAさんの自己
秘密の窓:Aさんは知っているが、他人は気づいていないAさんの自己
未知の窓:誰も気づいていないAさんの自己

 

この人、自分では秘密の窓が多いと主張しているように思えたが、実は盲点の窓がかなり広いよな、と感じている。