レベルエンター山本大のブログ

面白いプログラミング教育を若い人たちに

BLOCKVROCKリファレンス目次はこちら

だれでもできる低い生産性体験

会社で使うちょっとしたツールをphpで作ってます。

家に帰って、子供が寝静まった頃に酒飲みながらコーディングすると、当たり前だけどなかなかはかどりません。

「これって生産性の高い低いを体験できる方法だよなー」と。


飲んでる時、ハマったのはちょっと階層の深いメソッドで、DBへのクエリの結果の配列から絶対取れるはずのデータが取れないこと。

まず状況を把握するのが大変。
SQL単独で実行してみたらデータ取れてるし、引数も間違っていない。
我ながらしょうもないところで詰まったなとボンヤリ思いながら次の手が億劫でしょうがない。

ajaxコールしている先だからechoやprintしてもうまく全容がわからない。そこをうまく改善して全容を見分ける仕組みをつくることも面倒くさくて手が出せない。飲んでると思いつく気がしない。

エラーログも吐いてるけど、色々他のログも長々と出していて、読み解くのもちょっと一苦労。

もう少し詳細なテストコード書くか、と思い切るまで2時間ほどグルグル手軽なデバッグを試すが成果がでず、結果テストコードを書く気になった。元気ならすぐテストコードに着手するだろうのに。
テストコード書く気になった直後、猛烈な眠気に襲われ諦めて寝た。

そして、朝15分で解決した。

2次元配列の1個目の添字を設定せずに2個目の添字でアクセスしようとしていたというだけの、超単純なミスに2時間はめられたのだった。

そもそも、飲んでコーディングしなければ、処理とデータの状態をイメージしながらかけるのでこう言う単純ミスに引っかかることも避けられたはずだ。


新人の頃のコーディングは、こんな感じだったな。
残業して疲れた頭でやるのもこんな感じで、
本来やらなくていいこと、0秒の作業に工数を2時間も使ったわけだ。


開発者の生産性を考える時、その人に備わった能力パラメータとしての生産性もあるが、体調や環境といった要素に影響される集中力が指数関数的に関わって決まるんですよね。スポーツ選手のスコアに近い気がします。

こうやって体験すると、新人ばかりを100人集めても1人のスーパーエンジニアに勝てないことを改めて感じます。

集中できる環境や体調管理をどのように実践すれば良いのか、経営者として仕組みを考えることに結びつけることで2時間のロスを前向きに考えようと思います。

酒が飲めなければ、とことん疲れた深夜とかにコーディングすれば体験できますね。

[備忘録] postfixを介して、GmailのSMTPを使ってメール送る設定

本日詰まったのでメモ
centos 7 minimam とMac El Captain でpostfixを介してGmailSMTPサーバー経由でメールを送る

AWSのセキュリティーグループでアウトバウンドのport=587を開けておくこと)

まずはpostfix がインストールされていない場合centos7 minimamにインストール

yum install postfix # macでは不要
yum install cyrus-sasl-plain # macでは不要

centosではiptablesでポート25も開けておく

iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 25 -j ACCEPT # macでは不要

一応確認コマンド

service iptables status # macでは不要

sendmailpostfixが共存している場合、以下のコマンドでpostfixを有効にしておく

alternatives --config mta # macでは不要

postfixではsasl認証を使う、centos7minimamではyumであらかじめインストールしておらずつまった

sudo vi /etc/postfix/sasl_passwd

追記内容

smtp.gmail.com:587 メールアドレス@gmail.com:パスワード

chmod 600 /etc/postfix/sasl_passwd

postfixに読み込ませてDB化するコマンド

sudo postmap /etc/postfix/sasl_passwd

postfix設定ファイルの本丸へ

sudo vi /etc/postfix/main.cf

以下を追記

# Minimum Postfix-specific configurations.
mydomain_fallback = localhost
relayhost=smtp.gmail.com:587

# Enable SASL authentication in the Postfix SMTP client.
smtp_sasl_auth_enable=yes
smtp_sasl_password_maps=hash:/etc/postfix/sasl_passwd
smtp_sasl_tls_security_options = noanonymous
smtp_sasl_mechanism_filter = plain

# Enable Transport Layer Security (TLS), i.e. SSL.
smtp_use_tls=yes
smtp_tls_security_level=encrypt
smtp_tls_CApath = /etc/pki/tls/certs/ca-bundle.crt
tls_random_source=dev:/dev/urandom

postfix を起動します。

sudo postfix start
#終了コマンドは以下
#sudo postfix stop
#リロードコマンドは以下
#sudo postfix reload

メール送信確認

date | mail -s "test" 送り先メールアドレス

appendix

TSL接続確認

openssl s_client -connect smtp.gmail.com:587

メール送信に関するログはcentでは以下

tail -f /var/log/maillog

おまけ PHPでメール送る設定

vi /etc/php.ini
969行目あたり

sendmail_path = /usr/sbin/sendmail -t -i

参考
http://d.hatena.ne.jp/ayokoyama/20061207/p1

プログラマは、組織の時代から個性の時代へ

これまで組織が仕事を生む時代だった。

ソフトウェア産業という、端からは「職人芸」に見える世界もズブズブに「組織の論理な世界」だった。


しかしながらクラウドにより個人がサービスを生み出せるという時代にあって、
組織が担う役割とは別に、個性を全面に押し出すという仕事の作り方もあり得るようになったと思う。

もっといえば
「あるサービスは、あるプログラマがいなければ成り立っていない。」
という図式は増えてきたように思う。


ITサービスは、「1人のクリエイタが作った属人的なコンテンツ」であると定義しても良くなってきたのだ。
プログラマとはコンテンツクリエイタなのだ。
もっと言うと、映画監督や、作曲家、芸術家と並ぶべきが、プログラマなのだ。


そういう独自性、クリエイティビティを持つプログラマは、ビジネス感覚にも強くないといけない。


そんな中、弊社が担うべき仕事は、
「ビジネスを教え、そのツールとしてIT技術を教える仕事」
だと位置付けている。


極論、ITの仕事を属人化しようとしている。
IT技術と独立起業を結びつけようとしている。
一人一人のエンジニアが手に職で高額報酬をもらうのが当たり前の世界を作りたいと思っている。


そして、プログラマ個人個人が独立性を持った仕事をするトレーニングをするための教育というのが僕の仕事だ。
だからこそ、染まっていない学生に、起点を置いた。


僕らは、
「ITをツールとしたビジネスを学生に教える企業」
だ。


そのスタンスで、いろいろと取り組んでみてわかったことがある。
学生さんはビジネスを怖がっている。ビジネスといえばネットワークビジネスだからだ。

仕事=苦労して儲ける=働いた時間をお金に変える=アルバイト

の認識が学生さんには強くある。


そしてビジネス=楽して儲ける=ネットワークビジネス

という認識もある。



しかしビジネスとは、本来は

顧客に対して価値を創造する=ビジネス

だ。


そういうことを、学生さんにハンズオンで教えたい。
そのためのツールとしてITを使っている。


これからの弊社の教育に自分で期待している。

前時代的セキュリティ滅ぶべし

セキュリティ事故ってもう日常茶飯事で、萎縮ムードは常識化してる。
大きな組織になればなるほど、もう社員のことは信用しない。

それってSIerが死にゆく理由だと感じてしょうがない。
社員さんよ、「信用してないけど結果残せ」って言われてる感じじゃない?

それってちゃちな話じゃない。
例えば、DropBoxが使えないからリアルタイムな情報共有ができないとか
社外とのGitのやり取りができないから、ソースの共有で手間食うとかそれだけの話じゃない。

SIerが「IT企業」の枠にいるくせに
「情報技術には保守的です」って言ってるってことで
「医者だけど、医術は信じてません。まじないで病を直します」って言ってるような感覚を受ける。

IT業界と言ってるくせに、情報を扱う姿勢が保守ってどう?

例えば以下3つの事例はなぜ毎年おこるのか?
1. セキュリティーカード紛失によるセキュリティー事故
もう15年も同じことをそこかしこでやってるし、莫大なコストかけて
ごめんなさいしてる。ええ加減お前ら対策せえよ。
虹彩なり指紋なりで認証せえよと。

2. いまだにミーティングに参加するときには
持ち込みPCがダメだから紙を印刷しなくてはならないという
でもスマホは良くて、タブレットはグレーだからNGとか
そういうバカバカしさを、バカバカしいと感じてないところが、
もう茹でガエルだって気づいて欲しい。

3. メールに添付ファイルつけるときに、2通目にパスワード書くとかいうルールでやってる
バカバカしさはなんだろう。
1通目は傍受されても2通目は傍受されないとでも思ってるのか。


いや言い訳するポイントがあるとすれば一つ。
ISOとかISMSとかのセキュリティ認証へのポーズだ。
でもそれだって、言い訳わけをもっとまともにできればいいだけのこと。

実質、意味のない手間暇をかけるだけじゃ、セキュリティという名の足かせに過ぎない。

セキュリティを軽んじてる訳じゃない、
意味のない添付パスワードだけの送信メールとか、
セキュリティ事故の地雷源であるセキュリティカードとか、
持ち込みスマホタブレット、PCとか、
意味ないことに細かく労力かけてることが
底力を損なっていることに気づくべき。

あなた方のライバルは、もう今の瞬間にでも
DropboxやGoogleDriveで共有して、共有Gitを立ててる。

そんなとき、あなた方は、メールで送られてきたExcelをパスワードで開きマージするのに数分かけてる。

こういう生産性の低さについて、少しでも許容し常識に取り入れているなら、あらためて考え直したほうがいい。

※ いや、確かに営業力の方が大事だから、こんなことで直接的に死にはしないけど、魅力ないよね。

コミュニケーションスキルの分解

「コミュニケーションスキル」社会人としてとても重要とされる能力だけど、定義があまりにもなさすぎる。
だから常々、コミュニケーションスキルというものは分解するべきと思っている。

やってみよう。

コミュニケーションなので相手が必要だ。

スキルを分析するのだから、相手方に立った方がわかりやすそうだ。

コミュニケーションの相手方に立って考える。

コミュニケーションによって受ける作用、特に受けて気持ちがよいことを考える。
その人とのコミュニケーションによって・・・
・喜の感情が揺れ動かされること、つまり笑わせること、笑わされること
・怒りを鎮められること
・哀の感情が揺れ動かされること、その人の哀の感情を動かしていると実感すること
・楽だと感じられること、その人に楽だと感じさせていると実感すること
・説得されること
・共感すること、共感を得られること
・新しい知識、知見を得られること

が気持ちが良い。
こういう分類に名前をつけられたら、コミュニケーションスキルがもう少しはっきりできるのではないか。

Mac でjava -cp のパスの区切りは[:]

mac

java -cp .;lib/hoge.jar demo.Main

みたいにやろうとしたら、どうも-cpがうまく機能していない。

下記のように、javaコマンドの使い方を教わることになる。

使用方法: java [-options] class [args...]
(クラスを実行する場合)
または java [-options] -jar jarfile [args...]
(jarファイルを実行する場合)
optionsには次のものがあります。
-d32 使用可能な場合は32ビットのデータ・モデルを使用する
-d64 使用可能な場合は64ビットのデータ・モデルを使用する
-server "server" VMを選択する場合
デフォルトVMはserverです,
これはサーバークラスのマシンで実行しているためです。


-cp <ディレクトリおよびzip/jarファイルのクラス検索パス>
-classpath <ディレクトリおよびzip/jarファイルのクラス検索パス>
クラス・ファイルを検索するディレクトリ、
JARアーカイブおよびZIPアーカイブの:で区切られたリストです。
-D=
システム・プロパティを設定する
-verbose:[class|gc|jni]
詳細な出力を行う
-version 製品バージョンを出力して終了する
-version:
指定したバージョンを実行に必須にする
-showversion 製品バージョンを出力して続行する
-jre-restrict-search | -no-jre-restrict-search
ユーザーのプライベートJREをバージョン検索に含める/除外する
-? -help このヘルプ・メッセージを出力する
-X 非標準オプションに関するヘルプを出力する
-ea[:...|:]
-enableassertions[:...|:]
指定した粒度でアサーションを有効にする
-da[:...|:]
-disableassertions[:...|:]
指定した粒度でアサーションを無効にする
-esa | -enablesystemassertions
システム・アサーションを有効にする
-dsa | -disablesystemassertions
システム・アサーションを無効にする
-agentlib:[=]
ネイティブ・エージェント・ライブラリをロードする。例: -agentlib:hprof
-agentlib:jdwp=helpと-agentlib:hprof=helpも参照
-agentpath:[=]
フルパス名でネイティブ・エージェント・ライブラリをロードする
-javaagent:[=]
Javaプログラミング言語エージェントをロードする。java.lang.instrumentを参照
-splash:
指定したイメージでスプラッシュ画面を表示する
詳細はhttp://www.oracle.com/technetwork/java/javase/documentation/index.htmlを参照してください

  • cp のパスの区切りが「;」ではなく「:」でやるとうまくコンパイルと実行ができた。

知らんかった。

Google Analyticsでジーンとした。

自社のWebサイトのGoogle Analyticsを見て、こんなにジーンとさせられるとは。

誰だかもわからないし気づかないかもしれないじゃないか。

ちきしょう、おしゃれな応援しやがって!

ありがとう。俺がんばるよ。