[C#] 画像の輝度を調整する

画像の輝度調整するには、RGBを一律に加減すればよい。

ここで、deltaは-1.0~1.0の実数である。

ColorMatrixを使ってこの数式を適用することで、画像の輝度を簡単に調整できる。

ColorMatrix クラス (System.Drawing.Imaging)
http://msdn.microsoft.com/ja-jp/library/system.drawing.imaging.colormatrix(v=vs.110).aspx

サンプルコード

実行例

0009

左から 輝度25%減、元画像、輝度25%増

[C#] カラー画像をグレースケール化する

RGBをグレースケール化するにはNTSC加重平均法が使われることが多い。この方法を使うと、輝度(Y)は以下のように算出できる。

osakana.factory – グレースケールのひみつ
http://ofo.jp/osakana/cgtips/grayscale.phtml

ColorMatrixを使ってこの数式を適用することで、画像を簡単にグレースケール化することができる。

ColorMatrix クラス (System.Drawing.Imaging)
http://msdn.microsoft.com/ja-jp/library/system.drawing.imaging.colormatrix(v=vs.110).aspx

サンプルコード

処理例

0008

[Vagrant] 仮想マシン上のCentOSでウェブサーバーを稼動させる

ウェブサイトやウェブアプリをローカル環境で開発する場合、WindowsだとXAMPPをセットアップすることが多い。だけど別な方法として、仮想マシン上で稼動するUnix環境でウェブサーバーを実行させるという方法もありかも。試してみる。

既にCentOSが仮想マシンで稼動している前提

CentOS上でウェブサーバーを稼動させる

yumを使ってウェブサーバーをインストール

ウェブサーバーを起動

ブート時にウェブサーバーが起動するように設定

公開サーバーではないので設定が面倒そうなファイアーウォールは停止させておく

ブート時にファイアーウォールが起動しないように設定

テスト用のHTMLファイルを作成

Vagrantのプライベートネットワークを有効にする

Vagrantfile中のプライベートネットワーク設定のコメントを外す

Vagrantを再起動。

試しに仮想マシンにping

ブラウザから192.168.33.10をアクセスしてindex.htmlが表示されれば成功。

[Vagrant] CentOSの仮想マシン環境を構築する

Boxの取得

CentOSのBoxは以下のサイトで見つかった。

A list of base boxes for Vagrant – Vagrantbox.es
http://www.vagrantbox.es/

CentOS7.0 x86_64 minimal (VirtualBoxGuestAddtions 4.3.14)
https://f0fff3908f081cb6461b407be80daf97f07ac418.googledrive.com/host/0BwtuV7VyVTSkUG1PM3pCeDJ4dVE/centos7.box

仮想マシンの構築

“vboxsf”ファイルシステムが利用できないために共有フォルダのマウントに失敗したが、ネットを検索したらすぐ解決法が見つかった。VirtualBox関係のモジュールをビルドする必要があるらしい。

vagrantでmountエラーの解決方法 – Qiita
http://qiita.com/osamu1203/items/10e19c74c912d303ca0b

仮想マシンの起動には成功しているので、sshでCentOSに接続してモジュールのビルドを実行する。

モジュールがビルドできたらsshを切断し、仮想マシンを再起動する。

今度は共有フォルダのマウントに成功。これでCentOSの仮想マシンが無事稼動。

virtualbox_centos7

[Vagrant] VagrantをセットアップしてUbuntu(precise32)を稼動させる

Vagrantは仮想環境構築ツール。VirtualBoxなどの仮想化ソフトウェア上で、仮想マシンの作成や管理を自動的に行うことを可能にする。具体的には、仮想マシン環境をテンプレート化しておき、そのテンプレートから仮想マシン環境を簡単なコマンドを使って構築できるようにしている。このテンプレートをBoxと呼び、ネット上でさまざまなOSのBoxが配布されている。

以下にVagrantをインストールして、仮想マシンでprecise32(Ubuntu)を実行するまでの手順を記す。

公式サイト

Vagrant
http://www.vagrantup.com/

インストール

VirtualBoxがセットアップされている前提。(VirtualBoxをセットアップする)

1. ダウンロードする。

公式サイト
→ DOWNLOADS
→ WINDOWS Universal (32 and 64-bit)

vagrant_1.6.5.msi (161,420KB)

2. インストールする。

オプションはデフォルトのままにしておく。

インストール先
C:\HashiCorp\Vagrant

3. 再起動

インストール完了時に再起動を促される。

Boxの取得

公式サイト
→ DOCUMENTATION
→ Getting Started
→ Boxes

すると作業ディレクトリが作成される。
C:\Users\ユーザ名\.vagrant.d

そしてVagrant CloudからBoxがダウンロードされて以下ディレクトリに格納される。
C:\Users\ユーザ名\.vagrant.d\boxes

ダウンロードされるBoxの所在
hashicorp/precise32
https://vagrantcloud.com/hashicorp/boxes/precise32
A standard Ubuntu 12.04 LTS 32-bit box.
This is a simple 32-bit Ubuntu 12.04 LTS box that has Chef/Puppet pre-installed.

Boxの配布元
Vagrant Cloud
https://vagrantcloud.com/

仮想マシンの初期化と起動

1. 仮想マシンのディレクトリを作成する。

2. 仮想マシンを初期化する。

3. 仮想マシンを起動する。

Virtualboxマネージャで仮想マシンが実行中であることが確認できる。

virtualbox1

sshで仮想マシン(Ubuntu)に接続する

Windowsにはsshが無いので、上に表示されたホスト情報を使ってTera Termで接続してみる。

teraterm

[VirtualBox] Windows 10 Technical Preview をインストールする

次期Windowsとなる「Windows 10」のTechnical Previewが10月1日にリリースされたので、興味半分、VirtualBoxで仮想マシンを構築してインストールしてみる。

具体的な手順は以下のサイトの説明に従う。

How to install Windows 10 Technical Preview on Oracle VirtualBox
http://betanews.com/2014/10/01/how-to-install-windows-10-technical-preview-on-oracle-virtualbox/

仮想マシンの構築

1. VirtualBox Managerを起動。

2 [New]をクリック。

windows10_01

[Create Virtual Machine]ダイアログボックスが開く。

3. [Name and operating system]を以下の通り設定して[Next]ボタン押下。

– [Name]に”Windows 10″と入力。
– [Type]は[Microsoft Windows]を選択。
– [Version]は[Windows 8.1 (64 bit)]を選択。

windows10_02

4. [Memory size]はデフォルトのまま(2048MB)で[Next]ボタン押下。

windows10_03

5. [Hard drive]は[Create a virtual hard drive now]を選択して[Create]ボタン押下。

windows10_04

6. [Hard drive file type]は[VDI (VirtualBox Disk Image)]を選択して[Next]ボタン押下。

windows10_05

7. [Storage on physical hard drive]は[Fixed size]を選択して[Next]ボタン押下。

windows10_06

[Fixed size]のほうがスピードが速いらしいので。

8. [File location and size]はデフォルトのまま[Create]ボタン押下。

windows10_07

仮想ハードドライブの構築が始まる。

windows10_08

完了するとマネージャに戻る。これで仮想マシンが構築された。

windows10_09

Windows Technical Previewのダウンロード

公式サイトからISOイメージをダウンロードする。

Windows Technical Preview – Windows Insider Program – Microsoft Windows
http://windows.microsoft.com/en-us/windows/preview

Microsoft Accountへのログインを促される。
ログインして画面の指示に従うとダウンロードページにたどり着く。

Download Windows Technical Preview ISO – Microsoft Windows
http://windows.microsoft.com/en-us/windows/preview-iso

Download links
Product Key: NKJFK-GPHP7-G8C3J-P6JXR-HQRJR
English 64-bit (x64) Download (3.81 GB)

Windows 10 Technical Previewのインストール

1. 作成した[Windows 10]仮想マシンを起動
[Select start-up disk]ダイアログボックスが表示される。

2. フォルダアイコンをクリックして Windows Technical Preview ISO を選択し、[Start]ボタンを押下。

windows10_10

3. Windows Setupが始まる。以下は画面の指示に従う。

windows10_11

windows10_12

windows10_13

インストールの種類は[Custom: Install Windows only (advanced)]を選択。

windows10_14

windows10_15

windows10_16

セットアップが終わると再起動されて設定続行。

windows10_17

windows10_18

windows10_19

windows10_20

windows10_21

設定が完了するとWindows 10がスタート。

windows10_22

windows10_23

windows10_24

ファーストインプレッション

Windows 8で無くなったスタートメニューが復活したので、Windows 7以前に慣れている人でも戸惑いは少なそう。

Windows 8.1クロスロード:第13回 Windows 10 Technical Previewファーストインプレッション – @IT
http://www.atmarkit.co.jp/ait/articles/1410/09/news144.html

[VirtualBox] VirtualBoxをセットアップする

Oracle VM VirtualBoxはx86仮想化ソフトウェア・パッケージの一つで、完全なオープンソースソフトウェア。開発者としては、種類が異なるOSやバージョンの異なるOSを1台のPCにインストールし、開発環境を構築するのに役立つ。

以下にVirtualBoxのセットアップ手順を記す。

公式サイト

Oracle VM VirtualBox
https://www.virtualbox.org/

VirtualBox – Wikipedia
http://ja.wikipedia.org/wiki/VirtualBox

インストール

1. ダウンロードする。

公式サイト
→ Downloads
→ VirtualBox binaries
→ VirtualBox platform packages
→ VirtualBox 4.3.18 for Windows hosts x86/amd64

VirtualBox-4.3.18-96516-Win.exe (108,010 KB)

2. インストールする。

オプションはすべてデフォルトのままにしておく。

VirtualBox Application
+ VirtualBox USB Support
+ VirtualBox Networking
+ VirtualBox Bridged Networking
+ VirtualBox Host-Only Networking
+ VirtualBox Python 2.x Support

Location: C:Program FilesPracleVirtualBox

[X] Create a shortcut on the desktop
[X] Create a shortcut in the Quick Launch Bar
[X] Register file associations

インストール中に[Windows セキュリティ]ダイアログが4回表示される。
すべて[インストール]ボタンを押下してインストールする。

このデバイスソフトウェアをインストールしますか?
名前: Oracle Corporation ユニバーサルシリアルバスコントローラ…
発行元: Oracle Corporation

このデバイスソフトウェアをインストールしますか?
名前: Oracle Corporation ネットワークアダプター
発行元: Oracle Corporation

このデバイスソフトウェアをインストールしますか?
名前: Oracle Corporation Network Service
発行元: Oracle Corporation

このデバイスソフトウェアをインストールしますか?
名前: Oracle Corporation ネットワークアダプター
発行元: Oracle Corporation

インストールが完了したら[Oracle VM VirtualBox マネージャー]ウィンドウが表示される。

virtualbox

以下の作業ディレクトリが作成される。
C:Users<ユーザ名>.VirtualBox

マニュアル

公式サイトにある。

公式サイト
→ Downloads
→ User Manual

[PDF] Oracle VM VirtualBox User Manual Version 4.3.18 (369ページ)
http://download.virtualbox.org/virtualbox/4.3.18/UserManual.pdf

[HTML] Oracle VM VirtualBox®
https://www.virtualbox.org/manual/UserManual.html

[開発手法] 読まれないマニュアルに価値はない

僕は普段から社内文章に関して思うことがいろいろある。そこで見つけた以下の記事。

読まれないマニュアルに価値はない | サイボウズ式
http://cybozushiki.cybozu.co.jp/articles/m000338.html

これは社内の業務マニュアルについて言及した記事だけど、共感する点は多かった。

以下に気になった箇所を引用しておく。

マニュアルづくりに時間をかけすぎてはいけない

その上で、マニュアルをつくる際にはあまり時間をかけすぎてはいけません。

マニュアルはあくまでチーム内で使うものですから、顧客に出すもののように綺麗にデザインなどを入れる必要はありません。文章を書くのに時間がかかるなら、箇条書きのようなものでもよいのです。

また、リンクで済むものは極力リンクで済ませるべきです。他所にも書いてあるものを、二重で書くのは時間のムダです(参照先が消えるおそれがある、などであれば別)。たとえば、これはエンジニア限定の話ですが、コードを読めばそれで読み取れるという情報をわざわざ文章にして再記述する必要はありません。マニュアルを書く手間は、少なければ少ないほどよいのです。

マニュアルに限らないが、社内文章をキレイに作りすぎる。時間をかけずにキレイに出来ればそれに越したことは無いけど、キレイに作ろうと意識するほど時間が掛かる。他愛もないメモならメールにプレーンテキストで直打ちで用は足りるのに、わざわざワードで作成してPDFで出力してメールに添付という回りくどいことをしている人もよく見かける。そんな時間があるのならコードを書け。

まずは自分の作業メモからはじめよう

マニュアルは別途時間を確保してつくるのではなく、実際に業務をしながらつくってしまうのがおすすめです。具体的には、「作業メモ」を取りながら仕事を進め、そのメモをそのままマニュアルにしてしまうわけです。このやり方なら、忙しさに関係なくマニュアルが蓄積されていきます。

これは後任者のためだけでなく、自分のためにもなります。メモという形で自分の業務を整理することで、新しい気づきが得られるかもしれません。

作業メモは時として非常に役に立つ。ソフトの設定や例外処理の手順など、日常的なことなら頭に入っていて当然のことでも、数ヶ月あるいは数年に1度しか行わない作業だと忘れて当然。備忘録として簡単なメモでも残しておくことで、ゼロから調べながら作業する必要が無くなりジャンプスタートできるようになる。Evernoteなどを使っていろんなメモを書き溜めておくとよい。

読まれないマニュアルに価値はない

あたりまえですが、マニュアルには必ず「読者」がいます。自分の作業メモをそのままマニュアルにする場合であっても、読者として未来の自分がいます。デザインや形式にこだわる必要はないものの、最低限読者に通じるような書き方をする気持ちは持たなければなりません。

誰にも読まれないマニュアルを書くことは、完全に時間のムダです。あとで読む人がいるから、書く意味があるのです。そのことを忘れてはいけません。

文書化する目的について、書いている本人が理解していない場合が多い。ではなぜ書くか?上司がそう指示してきたからとか、社内ルールでそう決まっているからとか。文書化する目的をきちんと理解することで、誰に何を理解させたいのかが明確になり、読んでもらうための配慮が自然となされるものになるだろうと思う。文書化する目的が見えないならば文書化する必要は無い。時間の無駄だ。

[開発手法] いまさら聞けない「DevOps」

リーンスタートアップに絡めてしばしば論じられるDevOptsについて、以下の記事から予備知識を入れておく。スピードが求められる開発をチームで実践するためには、DevOptsから学ぶべきことが多いかもしれない。

特集 DevOps時代の必須知識:いまさら聞けない「DevOps」 (1/2) – @IT
http://www.atmarkit.co.jp/ait/articles/1307/02/news002.html

DevOpsとは

2009年にオライリーが開催した「Velocity 2009」というイベントにおいて、Flickrのエンジニアが、“開発と運用が協力することで、1日に10回以上のペースでリリースが可能になること”を紹介しました。いまさまざまなシーンで見かける「DevOps」という言葉は、このプレゼンの中で登場したものです。

DevOpsとは、開発(Development)と運用(Operations)が協力し、ビジネス要求に対して、より柔軟に、スピーディに対応できるシステムを作り上げるためのプラクティスです。多くの人々により議論は続けられていますが、ITILとは異なり、現時点においては、DevOpsに厳密な定義はありません。

DevOpsの関心事は、それぞれの役割の違いから衝突することが多い開発と運用の双方が協力し、同じゴールに向かう環境を作ることであり、そのような環境を作るためにはツールとカルチャーが重要だと考えます。「DevOps」と聞くとOpscodeの「Chef」やPuppet labの「Puppet」などのツールを思い浮かべるかもしれませんが、実は、これらツールはDevOpsの一部分ということになります。

その他の参考サイト

DevOps – Wikipedia
http://ja.wikipedia.org/wiki/DevOps

DevOpsとは何(ではないの)か、そしてどうやって実現するのか
http://www.infoq.com/jp/news/2014/03/devops

“攻めのIT”を実現する有効な手段として注目されている「DevOps」とは?
http://special.nikkeibp.co.jp/ts/article/ac0b/138763/

DevOpsによる改革:ITpro
http://itpro.nikkeibp.co.jp/devops/

[開発手法] プログラマのためのリーンスタートアップ入門

リーンスタートアップは、2008年にアメリカの起業家・エリックリース氏が提唱したマネジメント手法らしい。ウェブサイトなどで「リーンスタートアップ」という言葉を目にすることが多いので、プログラマ向けに解りやすくまとまっている以下のサイトから予備知識を入れておく。

「プログラマのためのリーン・スタートアップ入門」最新記事一覧 – ITmedia Keywords
http://www.atmarkit.co.jp/ait/kw/prog_leanstartup.html

この手法自体を評価する術を僕は持ち合わせていないが、記事中には納得させられたくだりが幾つもあった。僕自身、これまでいわゆる「スタートアップ」と呼ばれる組織に関与したことが何度かあったが、失敗した経営者がやるべきだった事柄を的確に指摘している箇所も少なくない。

以下、覚え書きとして引用しておく。

スタートアップが成功するためには、アイデアが必要です。しかし、どんなに優れたアイデアがあったとしても、方法がまずければ成功しません。アイデアは一般化できませんが、方法は共通化できます。

スタートアップという組織は、「持続可能なビジネスを作る方法を学ぶために存在している」ということを示す原則です。この「学び」という要素が、リーン・スタートアップを理解する上で非常に重要なポイントになってきます。

どこに顧客がいるのか探していく状況においては、「活動中の科学的な検証から得られる学び」こそが重要になってくるのです。そこでリーン・スタートアップでは「学びにつながらないものはすべてが無駄である」と考えます。

スタートアップの活動は、以下の3つから構成されます。
– アイデアを顧客に届けられる製品にすること=構築
– 製品を使った顧客からの反応を計測すること=計測
– 計測したデータから方向転換するかどうかを学ぶこと=学習
この3つの活動を繰り返し繰り返し行うことで、正解に近づけていくのがリーン・スタートアップです。フィードバック・ループの繰り返しを、素早く、無駄なく、回転させることこそが、リーン・スタートアップの肝になります。

最初のアイデアを形にするまでに相当の時間をかけてしまうと、もし次の計測で得た結果が残念なものだった場合、ダメージが非常に大きくなります。よって、アイデアを製品にするまでの時間や資金を最小限にし、早めに顧客からのフィードバックを受けて改善していくことで、成功に近づけていきます。

フィードバック・ループの最初となる「構築」で使うのが、「MVP(minimum viable product)」というキーワードです。フィードバックループを素早く回転させるためには、最初の「構築」を終わらせて「計測」に進まなければいけません。

しかし、多くの新規事業の担当者は、1周目の第1歩であるはずの「構築」をしっかりした形にしたい、あれもこれもと盛り込みたいと考えて、この最初の「構築」に時間をかけすぎてしまいがちです。そもそも、「最初の構築は時間のかかるもの」だと思い込んでいます。

大切なのは、最初の「仮説の検証」ができることで、それができれば最初の「構築」としては良いのです。その事業仮説を検証するためのものをMVPと呼びます。構築よりも検証、検証よりも学びが大切になるので、構築自体は必要最小限の労力で済ませることを考えます。

誤解されがちですが、MVPはデザインや技術的課題を解決するためのプロトタイプではありません。仮説を検証できればいいので、必ずしも動く製品を作る必要はありません。逆に、検証からの学びができなければ、MVPとして成立しません。

ピボットにおいて重要な点は、「軸足」を置いて方針転換をするということです。事業が当初考えていた仮説と違っていたからといって、まったく違う事業を始めてしまうと、また最初の仮説に戻ってしまうため、前に進めません。

片足を置いたまま、もう片方の足の位置を変えるのが、ピボットの肝です。そのためにはブレないビジョンが必要です。

その他の参考サイト

リーンスタートアップまとめ – NAVER まとめ
http://matome.naver.jp/odai/2131171854325173701

“Lean Startup Japan” | 新規事業を成功させる4つのステップ
http://leanstartupjapan.org/