小桜町喫茶店

日常とか仕事とかプログラミングとか

担当事業部の売上を半分にした役員のセコイ戦略

勤めている会社の役員の一人が自分の管轄下の部署の見栄えを良くするために、
全社で按分している販管費の負担を別部署に押し付けていることがわかった。
別部署に押し付けたところで会社全体の財務会計は変わらないのだから、
無駄なことだ。
私が以前勤めていたホールディングカンパニーでも、子会社が売上やコストの
奪い合い押し付け合いをしていたが、結局上場企業は連結決算なので、
当事者以外にとってはなんの意味もないのだ。
今回の事例はそれのさらにショボい版だ。

その役員は50代、無駄にあがいたところで定年まで逃げきれないだろう。
一応、私の勤める会社はIT企業のハズなのだが、その役員はExcelどころか
パソコンの使い方さえわからないロートルだ。
技術に精通しているわけでもなく、かといって人脈も営業力もマネジメント力
もない。彼の管轄部署は彼が役員になって売上が半分になってしまった。
ぶっちゃけ会社が傾くレベルで笑えない。まぁ、ファイルの開き方もわからない
人間が管轄している開発会社に 仕事を任せたいクライアントなどないだろう。
彼はチンケな社内政治だけで役員になったのだが、こんなコマい人間を
役員に据えているようでは残念ながらうちの会社もやばそうだ。

️エンジニアを引き抜いたらボーナスが貰えるらしい

IT業界は空前の好景気で、仕事は山のようにあれどエンジニアが足りない。
私のような日曜プログラマにさえ、スカウト会社だけでなく引き抜きが
くる始末だ。有名企業でさえ人出が足りないのだから、私が勤める会社の
ようなしょぼい企業はいくら求人を出してもなかなか集まらない。

そこで会社が、もし知り合いのエンジニアを引っ張ってきたら一人当たり
特別ボーナスを支給することになった。

念のため人事にいくら程度の年収を出すのか聞いてみた。
プログラマで下で5〜600万円、経験が豊富な人や、PMなどの
マネジメントスキルがあれば800万円からで考えているらしい。
もちろん若ければ若いほど良いとのこと。
まぁ、一般的な金額だし、業務内容もSalesforceなどのクラウド開発や
金融系システムが多いのでキャリア的にはわりと良さげなので誘い
やすいとも言える。残業も少ないし。あっても休みがたくさんとれるし。 *1

しかしやはりリスクもある。
仮に私が紹介した人が、うちの会社と合わなかったらその人からも
恨まれるし、会社からも文句を言われる。一時のボーナスのために
世間を狭めるのもいかがなものか。

*1:1ヵ月まるまる休む人もいる。

投資とプログラミング〜Rubyで移動平均を求める

中国市場が大暴落して、ダウや日経平均までエライことになっている。
市場は阿鼻叫喚だが、売りポジションの人は笑いが止まらないだろう。
金融や投資に携わったことのない人には何を言っているのかわからないと
思うが、金融マンや投資家にとって、実は価格は上がっても下がっても、
動いてさえいればどっちでも良いのだ。

ところでテクニカル分析に基づいたシステムトレードを行う個人投資家
中には自分でマクロを組んでいる人も多い。
私も自分用だけでなく、知り合いの個人投資家用にプログラムを組んで
あげたことがある。
金融の業務システムでさすがにスクリプト言語は使えないが、個人用途
ならばむしろRubyの恩恵を受けられる。

例えばここ数日の日経平均終値で3日間の移動平均を求めてみる。
ちなみに、移動平均とは特定期間(この場合は3日間)の価格(終値を使う
場合が多い)の平均値だ。現在の価格が平均値とどのくらい乖離しているかを
判断する時に用いる基本中の基本の指標だ。

# 直近10日間の終値
prices = [20706.15, 20109.95, 20235.73, 20329.32, 20522.5, 
              20539.79, 20112.12, 20376.59, 19737.64, 19855.5]
 
# 期間
term = 3
 
prices.each_cons(term) do |arr|
  puts arr.inject(:+) / term.to_f
end

Enumerableのeach_consは取り出した要素の配列を作る。
3日間を指定しているので、3日分の終値の配列が出来上がる。
まさに移動平均線を作るために存在するようなメソッドだが、
他に用途があるのだろうか?
後はinjectメソッドで要素を合計し、期間で割るだけだ。

実行してみると。

20350.61
20225.0
20362.516666666666
20463.87
20391.47
20342.833333333332
20075.45
19989.91

8日分の移動平均しかないが、3日移動平均なので3日分の価格データが
ないと正しい値が作れない。最初の2日分は削られているのだ。
本日の終値が19,855.5円だが、移動平均と合わせてどのような判断が
できるだろうか。その判断が各投資家のセンスやスキル、経験によって
異なるところが面白さだ。
実際には3日間といった超短期の移動平均を使っている投資家は少ない
だろうし、他のインジケータと組み合わせてシステムを組む。

まぁ何が言いたかったかというと、「金融や投資は虚業」などと毛嫌い
したり、「プログラミングは難しそう」と決めつけないで、投資も
プログラミングも奥が深く、実際にやってみると面白いということだ。

Effective Ruby

恥ずかしながらプログラマをしていた頃は開発しているサービスそのものに
関心があり、技術的なことにあまり興味はなかった。
ところが一歩引いた立場になって、技術そのものに興味が湧いてきた。
技術書は高いのだけれど、幸い、立場的に会社の経費で落とし放題なので、
興味本位で買いあさっている。

今週読んだのはこの『Effective Ruby』。
f:id:kazuma98:20150630220909p:plain

Rubyは私も個人用途で使うちょっとしたツールを自分で作ったり、
仕事でRuby on Railsを使った比較的規模の大きいシステム開発まで
携わったことがある。
比較的自由度の高い言語なので、プログラマに依存する部分が大きく、
仕事で使うのは個人的にはあまり好きではなかった。
もし経験の浅いチームでRailsの開発を行う場合、本書で紹介されているような
手法を共有し、品質を保つための基準を設けた方が良いと思う。

まぁ仕事抜きに、Rubyのような動的型言語の言語仕様やプログラム作法を
簡潔に紹介している点で興味深い内容だった。
200ページと薄い本なので、Rubyプログラマなら週末で読めてしまう。
これからRubyを始めようという人にはじっくり読めば学ぶことの多い
良書だ。

️ふとマルエツでバイト代を誤魔化されたことを思い出した

採用活動の一環で求人媒体の人と話をするのだが、大学生向けのインターン
支払いをごまかしたり、不当労働をさせるなど問題が多いらしい。
たしかにうちにいる大学生インターンに聞いても、とあるベンチャーで最初は
時給を出すという話だったのに、結局タダ働きをさせられたという学生もいた。

インターンではないが、実は私も学生のバイトでセコい連中に遭ったことがある。
マルエツというスーパーでギフトコーナーの短期バイトを募集していた。
お歳暮だかなんだかで、短期間ブースが設置されるので、そこで働くわけだ。
同じマルエツの他のバイトが時給800円くらいなのに対し、時給が1,000円くらいと
割高で、かつ長期で勤めたくはなかったので、私にはちょうど良かった。

で、1ヵ月ほどギフトコーナーで働いて、いざお給料が振り込まれたのだが、
計算が合わない。時給1,000円で計算されずに800円で計算されている。
当然、社員に文句を言った。

社員「君、ギフトコーナー以外に仕事したよね?」
私「はい、片付けを手伝って欲しいということで、一般商品コーナーの手伝いをしました」
社員「ということは、それはもうギフトコーナーの短期バイトではないということだよ」
私「は? 手伝ったのは1回だけですし、そもそもそちらが頼んだんでしょう?
それに契約ではギフトコーナーで登録されていますよね?」
社員「君ぃ、そんな屁理屈は社会じゃ通用しないよ。学生だからって調子に乗っちゃダメだよ」
私「いや、私は時給1,000円ということで短期のギフトコーナーで働いていたわけだし」
社員「これだから学生は困るんだよ。ギフトコーナーの仕事が終わった後に、商品コーナーの 片付けをしたということは、それはもうギフトコーナーのバイトじゃないんだよ」
私「(駄目だこいつ・・・)」

その社員がアホなだけかと思ったが、マルエツの店長からもやっぱり時給1,000円は
払えないというお達しがあった。 たかが数千円の違いで揉めるのはいやだったので、泣き寝入りしたが、まぁ、
社会にはくだらない企業や人間がいるのだなという良い勉強になった。

キャリアトレックのスカウトメールがひどいことに

人事部からキャリアトレックという求人媒体に掲載するので、試しに登録して
みてくれと頼まれた。

登録といってもメールアドレスや年齢などの必須事項を入力しただけで、
職務経歴はおろか名前さえ登録していない状態。
にもかかわらず、1日に何件もスカウトメールが来る始末。
いったい何を基準に「スカウト」しているのだろうか。
周りの人に聞いても
「昔いた会社からきた」とか「うちの会社からきた」とか
「エンジニアじゃないのにエンジニアのスカウトがきた」とか
酷すぎて失笑し合う。
求人広告を掲載しているうちの会社も全くマッチしない人にスカウトメールが
いっているわけで、下手するとマイナスイメージになるのではないだろうか。

この手の掲載無料で採用が決まったらお幾ら万円みたいなサービスは
当然、採用が決まらないとおカネにならないので、運営もそうとう焦って
スカウトメールの絨毯爆撃を行っているのだろう。

私は人事に言われて他の求人サイトにも登録しているのだが*1
ここまで酷い媒体はない。レコメンドエンジンが自慢らしいが、
スカウトメールのアルゴリズムもなんとかした方が良いのではなかろうか。

*1:私ならどこからも引き抜かれないだろうと 思われているのだろうか・・・

EC2にSwap領域を作成

会社で自分の部署用にAWSのアカウントを作って、使い放題にしたのだけれど
さすがにアホみたいにおカネがかかると悪いのでプロトタイプ(という名目の
趣味プログラム)を開発する環境はmicroインスタンスを使うことにした。
以前、RubyではなくPythonを使うことにしたと言ったけれど、さすがに
WebアプリケーションはRailsを使いたいのでさくっとインストールしてみた。
が、PassengerをインストールしようとしたところSwap領域がないと怒られる。

$ free
             total       used       free     shared    buffers     cached
Mem:       1020188     458516     561672         60      11548     392484
-/+ buffers/cache:      54484     965704
Swap:            0          0          0

たしかにない、、、

スワップ領域は実メモリに入りきらないプロセスをページ単位、あるいは
プロセス単位で退避させる領域。スワップ領域にはパーテションかファイルを
利用するのだけれど、今回はファイルで。

ファイルはddコマンドで作成。入力ファイルに/dev/zeroを指定すると
出力ファイルがオールビットゼロで埋められる。

# dd if=/dev/zero of=/swapfile bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 14.2321 s, 75.4 MB/s

これでスワップファイルができた。

# ll /swapfile 
-rw-r--r-- 1 root root 1073741824 Jun 15 07:45 /swapfile

ファイルのパーミッションを600か644に変更 。

# chmod 600 /swapfile 

mkswapコマンドでswapfileをスワップ領域として初期化。

# mkswap /swapfile 
Setting up swapspace version 1, size = 1048572 KiB
no label, UUID=720e7b93-f9f3-40d9-be4d-c871e920055e

swaponコマンドでカーネルスワップ領域の使用を開始。

# swapon /swapfile 

スワップ領域ができた。

# swapon -s
Filename                Type        Size    Used    Priority
/swapfile                               file    1048572 0   -1