Life is Really Short, Have Your Life!!

ござ先輩の主に技術的なメモ

情シスメディア「ジョーシス」が2017年7月末で閉鎖

www.josys.jp

数少ない情シス向けのメディアで、個人的には最大手の1つだったのではと思っていたジョーシスさんが閉鎖。情シス向けのメディアの難しさを思い知らされます。

色々思うことはありますが、中小企業の情シスをWebメディアで集客するなんてことは可能なのかなぁ... 販社が足で稼いでいる所に入っていくのは大変だし...うーん..

夢に進むことも重要だけど、塁に出る努力も大事

note.mu

頂いている色んなお仕事に邁進している内に、自分が最もやりたいと思っていたそう簡単にお金にならない仕事をする時間がなくなってしまった、というもの。フリーランス、あるあるじゃないかな〜。エンジニアだとサービスを開発して云々的なものに近い。

目の前のお仕事をやれば必ず報酬があるのだから、そういったものがドンドン後回しになるのは自然なこと。でも、それだけになってしまうと何のために独立したのかわからない。

まずは塁に出る

独立して間もないころに、最所さんもご存知である我らがビープラウドの治夫さんから頂いた金言をシェアします。

「ござ先輩、ホームラン狙いで見逃し三振してはダメです。まずは塁に出ましょう。チャンスメイクしてくれたら、あとはチームで野球ができます。点が入るかどうかはわからないけど、塁に出ないと何も始まらないですよ。」

野球に例えると何でもよく分かる。この金言は、独立後の僕の行動指針となっています。

頂いている仕事が自分の最もやりたい内容と条件にド真ん中で来る(ホームランボールが来る)ことは、早々ありません。インサイドにズバッとくるようなクロスファイヤーなお話だったり、ボールゾーンに落ちるフォークのような拾うのが難しい話だったりします。

そういった時に「これは自分の待っているボール(条件や内容その他諸々)じゃないんで、手を出さずに見逃し三振」ではなく、塁に出る(次に繋げる)ための努力をやらないのはまずい、ということ。

自分が動くのが難しい話でも、向こうはお話をしてくれたわけだから少なからずお困りになっている。「その話だったらXXさんだったらよく知ってると思うので、ちょっと聞いてみます」とか「XXはやったことないけど、YYという立ち位置なら協力できます」とか。何かしら自分がお役に立てる為の努力をして、進塁打を打つ事を目指す。

もちろん、単なる犠牲じゃ意味がない。点が取れるか(売上になるか)どうかは別問題。でも、打点を上げるのは自分じゃなくても良い。他の人でいい。得点圏までランナーを進めたことが重要で、打線がつながるように努力すれば良い。

最もやりたいことが出来る土壌を作るためにも、お互いに、塁に出る努力をがんばりましょう。

フローチャートは制御構造を書く以外の用途に適さないのでは

アラフィフのおじ様方がすごく好きなのよね・・・これ。

フローチャートって、制御構造をイメージして表現するために作られたものなんじゃないかなぁ。制御構造って逐次、分岐、繰り返しの3つしかないから、それらのイメージを可視化するために使う。ま、それならわかる。でも、例外/オブジェクト/同期 or 非同期/スレッド/ジェネレーターやデコレータといった現代ではふつーのプログラミングになると全く表現できないですよね、これ。

プログラミングをイメージで可視化するための記法って、21世紀向けに再発明されていいんじゃないかな。え?UML?(∩ ゚д゚)アーアーきこえなーい

unittest.TestCaseでAttributeError

import unittest していて、何故かTestCaseが見つからないという状況が。

何の事はない。ファイル名がunittest.py だったからだ・・・ また、同じディレクトリ内にunittest.pyがあった場合、そちらが優先されて読み込まれてしまうので注意が必要。

WTFormsでCheckBoxをグルーピングして表示する

こちらにCustom Widgetを利用して、チェックボックスのリストを作るコードがあった。

Checkbox WTForms Example (in Flask) · GitHub

ListWidgetのコードを見ると、ulかolでマークアップしてくれる。一瞬メンドイなって思ったけど、CSSで調整できる余地を残してくれていると考えるとナイスだなと思った。CSSでlist-typeをnoneにすればいいし、liがブロック要素で嫌って言うならdisplay:inline-blockとかにすればいいだけ。

github.com

JCOMのモデムは電源投入後に接続したMACアドレスを覚えているらしい

PCとLANケーブルで直接繋いでいる状態で、モデムのEthernet側と無線LANルータのWAN側をつないでみると、WAN側のIPが全く取得されない。PCに戻したらIP振ってくれる。

・・・あんまり考えたくないけど、最後に接続したMACアドレスを記憶していて、自社のネットワークに繋いだMACアドレスの情報を管理している(or DHCPで振り当てるIPアドレスの効率化を図っている)ようです。

ケーブルモデルの電源を切ってから、無線LANルータに刺したらIPアドレスが割り当てられました。

なるほどね・・・DHCPって自動的に振り当てられるとはいうものの、プロトコル的にはMACアドレスとのマッピングだもんね。

よく分かるFROM句の仕組み

例えば、こういう顧客テーブルを全件取得するSQLがあります。

SELECT
     *
FROM
    customers

上記のSQLはこうやっても一緒です。

SELECT
     *
FROM
    (SELECT * FROM customers)

テーブルCustomersって要は全件取得した結果集合をFROMに設定してるんだよねっていうこと。

JOINでも同じ。Salesテーブルは外部キーとして、CustomersテーブルのIDを持っている。カラム名はcustomer_id。

SELECT
     *
FROM
    customers as c
    join sales as s on s.customer_id = c.id

以下のように書いても一緒です。

SELECT
     *
FROM
     (SELECT * FROM customers) as c
     join  (SELECT * FROM sales) as s on s.customer_id = c.id

JOINの対象にサブクエリを仕込めるっていうのは、こいつが一番わかり易い気がするなと新人トレーニングで感じた。

SQLが集合の関係演算を行うものであるというのは、FROM句を細かく見ていくとよくわかる。逆に言うと、FROM句が書けない場合はSELECTすることは絶対にできないなー