auientの日常

ノンジャンルで書きたいことを書くブログ

SIerとWeb屋のチーム構成戦略:スケールアウトとスケールアップ

ふと思いついたたとえ。

SIerを請負開発会社、Web屋を(Webに限らず)ソフトウェアの事業を持ってる会社と単純化して考える。双方とも業務でソフトウェア開発を行う点では共通しているが、異なるのは「開発したソフトウェアが自分のものか、他人のものか」という点である。

SIerはスケールアウト

彼らが開発したソフトは基本的に他人(顧客)のものである。彼らは概して開発したソフトの価値ではなく労働時間を基準として対価を得る。いわゆる人月だ。

ここにあるプロジェクトがあって、人月100万の社員が参画していたとする。このプロジェクトの売上を伸ばしたいとしよう。どうしたらよいだろうか。

1つは、社員がより技術を研鑽して価値を高め、単価を上げてもらう戦略だ。すぐ思いつくが、この戦略は限界が早い。一般に顧客はそんな大幅な単価アップを容認しないためだ。せいぜい5%〜10%、20%も上がればかなり良い方なのではないか。この例ではどんなに頑張っても20万程度しか上がらないことになる。また、その前提として社員自身は相当頑張ってもらわないといけない。頑張れるかどうかは人に依存するので確実性が低い。

2つめは、単価はそのままに労働時間を増やす戦略だ(戦略という言葉を使うのも気が引けるが…)。作業効率を落とし、ムダな残業を増やせばそれに比例して労働時間が増え、(契約形態によっては当てはまらないが)時間に比例する売上も増える。この方法も限界が早く、どんなにムダに残業したところで20h〜40h/月の積み増しがいいところだろう。人月100万は月160hとして時間単価6250円なので、6250 x 40 = 25万がいいところ。更には残業により社員が疲弊し、顧客満足も低下しがちで、結局あまり幸せにはなれない。

3つめが人を増やすことだ。仮に新人を普通の社員の半分の単価で参加させたとすると、一気に50万増える。同じクラスの社員がもう一人増えれば100万である。これはすごい。教育コストや、人数を増やすための理由が必要であったりはするが、他の方法と比べて限界が高いので伸びしろがある。

かくしてSIerの本命は人を増やすことになる。教育コストを圧縮するために開発規約を標準化して、自由度は減り、有象無象の人員が増え…というおなじみの風景ができあがるわけが、ここで考えたいのはチームの構成戦略。担当1人あたりの能力を伸ばすのではなく、なるべく普通の人をたくさん束ねて仕事をする戦略で、要はこれはスケールアウトだなと思う。

Web屋はスケールアップ

ソフトウェアの事業を持ってる会社は、基本的に自社のソフトを開発し、そのソフトが持っている価値で勝負する。

はてなブックマークが仮に年に1億円売上に貢献するとして、それをより増やすにはどうしたらよいか。基本的には、より儲かる方法を考えて、より儲かる機能を実装するという方向になるだろう。そのためには有象無象ではなく頭がよく能力の高い人材がいた方が良い。逆に、労働時間や社員の数はソフトの価値とは無関係なので、少なければ少ないほどコストが抑えられて良い。

小さなチーム、大きな仕事ピザ2枚のチームは、このような前提で成り立っている。これは普通の人を多数束ねて仕事をするSIerと対照的で、個々人の能力を最大限伸ばしていこうとする戦略。つまりスケールアップだということができる。

結論

スケールアップとスケールアウト、どちらが良いというつもりはないのでここまで。多分意識の高い人はスケールアップ型になると思うけれど、自前で事業を持つことは(ビジネスの面でも、個人の能力でも)生存競争が激しいので、一概には言えないと思う。

Raspberry Pi作業メモ(3)パーティション拡張

今日のヤックシェービング記録。

使われているパッケージの更新くらいやった方がいいかと思い「sudo apt-get update」「sudo apt-get upgrade」を実行したところ、/のディスクが100%になって止まる。

df -hで容量を見ると3.7Gしかない。おかしいな16GBのSDカードのはずなのに?

調べてみると、SDカードのイメージを焼く方式で用意したディスクはパーティションサイズが計4G固定になるっぽい。考えてみれば当たり前か。NOOBSでインストールしたときは自動で設定してくれるのかも。

https://blog.hello-world.jp.net/raspberrypi/219/ を参考にパーティション拡張を狙うも、なにを間違えたか設定後に再起動するとログインできなくなる。orz

一晩寝て、もう一度(1)ディスク作成、(2)パーティション拡張(今度は成功)、(3)Wi-Fi設定までやった。いい加減慣れてきた。

この環境回りでハマる感じ、うんざりもするんだけど、ちょっと楽しいような感じもするんだよな。なんなんだろうコレ。

Raspberry Pi作業メモ(2)ネットワーク設定

ラズパイ出して、電源刺してLANケーブル刺して、というのが面倒で1ヶ月ほど放置してしまった。すぐ触れる状態にしておきたいと思い、取りあえず無線LANの設定までとやったことがこちら。

  • ルータで有線LANのIP固定:192.168.10.10に。
  • 無線LAN設定
    • こちらのサイトの手順で作業:http://dolls.orz.hm/?p=8794
    • 最初はなぜかつながらなくて、とりあえず再起動してみたら接続成功。
    • IP固定:192.168.10.11に。
  • LANケーブルを抜いていじりやすい場所にラズパイを置く
  • VNC設定

ユーザの追加やファイヤウォールとかのセキュリティ関係の設定は、サーバを公開するときまで後回しにする。めんどいし、設定忘れてログインできないとかで簡単に心折られそうなので・・・

無線LAN設定後に起動しなくなって1回折られている

 

Raspberry Pi作業メモ(1)Linuxをインストール

機材

まず買ったraspberry piの機種がこちら。

Raspberry Pi Model B+ (Plus)

Raspberry Pi Model B+ (Plus)

 

どんな機種があって違いは何かはWikipediaの比較表が詳しい。Pi 2 Model Bという最新機種があったようだけど、良く分かってなくて1つ前の世代のものになった・・・。スペックを求めているわけでないし、ちょっと枯れてる方が参考文献が多いので悪いことだけでないと思う。

同時購入したものは:

  • USB有線キーボード
  • microSDカード16GB

家にあるのでまかなったのは:

  • USB有線マウス
  • LANケーブル
  • 電源用microUSBケーブル(Androidスマホの)
  • USB電源アダプタ(iPhoneの)
  • 無線LANモジュール(使ってなかった「PLANEX GW-USMicroN」)
  • HDMIケーブル(Wii Uの)
  • HDMIディスプレイ(居間のTV)

OSのインストール

公式サイトのダウンロードページからデータを落としてmicroSDカードに入れればいいらしい。

NOOBSとRaspbianというメニューがある。RaspbianはDebian Linuxベースの公式ディストリビューションで、つまりOSそのもの。NOOBSというのは、Raspbianを含む色んなOSを簡単に選択してインストールできるインストーラらしい。今回は迷いたくなかったので公式OSのRaspbianを選ぶ。「RASPBIAN JESSIE」と「RASPBIAN JESSIE LITE」の2つがあるが、LITEの方は最低限のものだけの軽量版らしい。あとから追加で何か必要になるのはだるい(つまづきの原因になる)ので、全部入りの無印版を選んでDownload ZIPを押す。1.47GBあり、自宅の回線ではダウンロードに1時間強ほどかかった。

ZIPを解凍すると「2016-02-09-raspbian-jessie.img」というファイル(4.13GB)ができる。これはディスクイメージと呼ばれるファイル形式で、FATとかファイルシステムとかいうややこしいモノ抜きで生のデータをそのままファイルにしたもの。これをそのままSDカードに転写する。このことを「ディスクイメージを焼く」と表現する。

イメージを焼く方法は、調べると何種類か出てきてややこしい。こういうときは公式サイトを見る。Mac OSでの手順を書いたドキュメントがあるのでそれに従う。3通りの方法が示されており、

  1. GUIでやる方法
  2. コマンドラインでやる方法
  3. その他の方法

とある。1つめの方法がなぜか上手くいかなかったので、2番目のコマンドによる方法で行う。なおコマンドでやる場合はSDカードのフォーマッタアプリなどは不要と書いてある。

なお、GUIでもコマンドでも、途中でterminal.appで「sudo dd 〜」から始まるコマンドを実行するが、このとき引数を間違えて書き込み先をSDカードでなくMac OSが入っているディスクを指定した場合、Macがぶっ壊れると思われる。試してないが十分に注意した方がよい。

ここまでできたら、Raspberry Piにキーボード・マウス・LANケーブル・HDMIなどを刺し電源ケーブルを入れる。文字がざらざらと流れていってこんな画面が表示されたら起動成功。

TVはディスプレイとして常用できないので、リモートでアクセスできるようにする。ルーターの管理画面を開き、DHCPの割当とかルータのログなどからRaspberry Piに割り当てられたIPアドレスを特定する。IPを固定する機能があったので固定。

terminal.appで、`ssh pi@(Raspberry PiのIPアドレス)` と入力。初期パスワードの「raspberry」でログインできたらOK。

長くなったのでとりあえずここまで。次はX Windowやら無線LANの設定をする予定。

 

 

Raspberry Piで学習リモコンを作りたい件

Raspberry Pi買いました。

なぜ買ったのかというと、IoTとか流行りそうだし手を出しておくと仕事的にいいことあるかもな打算とか、はてブで色んな記事で盛り上がってるのが楽しそうでうらやましいとか色々あるんですが、一番は「作りたいものができた」からでした。

私の作りたいもの/やりたいこと

学習リモコン。

元々、

  1. 居間エアコンの感度が悪い
  2. リモコンが多すぎる(エアコンのほかに、空気清浄機、照明、ラジオ、テレビ)

という問題があり、これに対するソリューションで学習リモコンを買おうと思っていたのです。

で。せっかく買うならスマホで操作したい。でもスマホ操作Onlyだとだるいので物理的なボタンもほしい。ついでに、エアコンの切り忘れがしばしばあるので、ONと同時に切タイマーつけるマクロもほしい。とか色々考えているとニーズ合致する製品がないじゃないか……という状況でした。

そんなときに見たこのキャッチーな記事。

qiita.com

これだ! はてブ関連記事も何件か見つかるぞ。

完成までの道のり

とまあ、そんなわけで一丁やってみっかとAmazonでラズパイをポチりました。作業メモをブログに残していこうかと思います。

これからやりたいことを実現するためのステップを洗い出してみます。

なお、自分はWeb系プログラマーの仕事をしていますがボルトとアンペアの違いが分からない程度に電気電子工学素人である前提です。

  1. Raspberry PiにLinuxをインストールし、無線でインターネットにつなげる
  2. 電子工作の部品を調達し、LEDがチカチカするようなものをお試しで作る。電気の基礎知識(ボルトとアンペアの違いとか)、およびプログラムから電気回路を制御する方法を学ぶ。
  3. 赤外線受光の仕組みを実装し、元のリモコンの信号パターンをRaspberry Piに入力できるようにする。
  4. 赤外線送信の仕組みを実装し、エアコンや照明をRaspberry Piから操作できるようにする。
  5. 物理的なボタンをつけて、ボタンでリモコン操作できるようにする。
  6. Rasperry Piで動作するwebアプリを開発し、ブラウザからリモコン操作できるようにする。
  7. いい感じのケースに入れて(必要なら作って)Raspberry Piを居間に設置する

こんな所かな? OK前向きにやってみよう。

以上です。

広告ブロックに関する考えの整理

  • そもそもウェブサイトとは、公開ネットワークで一般に公開されている文書である。
  • 一般的なブラウザにユーザースタイルシートがあることから分かるように、サイトをどのように見るかは閲覧者の自由である。
  • 広告だろうがアイキャッチ画像だろうが、邪魔だと思えば閲覧者はそれを消し去って読むことができる。それは全く正しい。

  • 一方、広告を設置するのはコンテンツ所有者の自由である。
  • 広告の閲覧を強制したいと考えるのも自由である。ただしそれは独自なルールに過ぎず一般的な了解ではない。
  • なぜなら、インターネットは誰のものでもない公共のネットワークだからである。広告を見てほしいのならそのことを閲覧者に伝える義務がある。

  • 通知方法はいくつか考えられる。義務を明記した規約と同意ボタンでもいいし、広告ブロックを検出してアラートを出しても良い。
  • 品のいい広告と価値あるコンテンツを提供しているのなら、閲覧者は広告とともにそのサイトを見るだろう。そうでなければ閲覧者は去る
  • 結果、広告が目的化した価値のないサイトが淘汰されると社会にとって一番望ましいだろう。

0歳児にも言葉のトゲは刺さる

ふと思い出したこと。

長男が1歳になる前だったと思う。離乳食も大分進んできて、うんちも大人と同じようなのが出るようになった頃。

 

オムツを替えるのは既に慣れていたけど、やっぱり臭いはひどいので、自分は替える時に「くせっ(半笑い)」と口に出すのがいつの間にか癖になっていた。

そんな感じで過ごしていて、ある日また長男がうんちをして「くせっ(笑)」と言ったとき、長男が泣きだした。普通に立っていたのが、急に声をあげて。

横で見てた嫁さんに、そんなこと言われたら誰だって嫌だよ、と注意されたけど、言葉の分からない0歳児に伝わるわけがないと思ってたんだ。でも実際にはそうじゃなかった。0歳の長男は、言葉に含まれる侮蔑的なニュアンスを感じ取って素直に反応した。自分はとても悪いことをしてしまったと思った。

 

うんちをするのか嫌いになっては大変なので、すぐに態度を改めた。

保育園の先生が子供のハナクソを拭いたときに「長男くん!とってもいい宝物がとれたよ!」というような100%ポジティブな言い方をしていたのをマネして、「いいーうんちが出たねえ!さあオムツ替えようねえ」と笑顔でほめるようにした。それ以降長男がわけもなく急に泣き出すことは、今までない。

 

このことで自分が学んだことは、

  • 0歳児に言葉の意味は伝わらなくても、言葉に込められた感情は伝わる。

ということ。

0歳だって人だから嫌なことはあるよなあ。でも言葉の伝わらない相手を人として扱うのって、意識しないとできないし難しいよなあ。と、そんなことを思った。忘れないための備忘録。