Windows用のPostgreSQL 9.3でUUIDを使えるようにする
シーケンスの代わりにuuidをIDとして使う | Siguniang's Blogを見ながら必要なことだけをメモ。
UUIDを生成する
v1, v3, v4, v5が使えるらしいけど、実質v1とv4ぐらいしか使わないよね。
select uuid_generate_v1(); select uuid_generate_v4();
UUIDをプライマリキーにしたテーブルを作る
CREATE TABLE sample ( id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), value text )
Windows 8.1上にScalatra開発環境を作る
基本手順は公式ページに書いてある通りだが、Windowsだと多少面倒が発生する。
Conscriptのインストール
Conscriptとは、GitHubでホストされているScalaプログラムの管理(インストール/アップデート)を行うためのツールのようだ。GitHubにアクセスする関係上、Gitコマンドに依存しているらしい(未確認)ので、予めGit for Windows等をインストールしないとダメかもしれない。
Windowsでインストールする場合は、ConscriptのGitHubページからダウンロードできるJava製のインストーラを利用する。おそらくjarをダブルクリックでインストーラが起動できるはずだが、インストーラが起動しない場合は、次のようなコマンドを実行する。
$ java -jar conscript-0.4.4.jar
インストール処理が完了しても、渋いインストーラ画面は表示されっぱなしなので注意が必要である。なお、%USERPROFILE%\bin に対してPATHが通ってない場合、インストール完了時に次のような画面が表示される。
このような画面が出た場合は、PATHに %USERPROFILE%\bin を通しておく。
giter8のインストール
giter8はテンプレートからScalaプロジェクトのスケルトンを作成するツールのようだ。
インストールは次のコマンドを実行するだけで良い。
$ cs n8han/giter8
scalatraプロジェクトの作成
適当なディレクトリに移動して、次のコマンドを実行する。
$ g8 scalatra/scalatra-sbt
プロジェクトのひな形を作るための設定の入力を求められるので、適当に入力するとプロジェクトが作成される。設定内容についてはFirst steps | Scalatraを参照。
プロジェクトが作成されたら、ルートディレクトリ内に、次の内容で sbt.bat ファイルを作成する。
@echo off java -Dinput.encoding=Cp1252 -Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256M -jar "%SBT_HOME%bin\sbt-launch.jar" %*
scalatraプロジェクトの起動
次のコマンドを実行すると、 http://localhost:8080/ で作成したscalatraアプリにアクセスできる。sbt初回起動時は依存ライブラリのダウンロードで非常に長い時間待たされるので注意…。
$ sbt > container:start
また、container:start した後で、sbt上で次のコマンドを実行すると、ファイルを編集した際に自動コンパイルしてくれるようになる。
> ~ ;copy-resources;aux-compile
Scalatra + ScalaTestでunit test
公式ドキュメントの記載通りに設定すれば動く。
ScalaTest | Testing | Scalatra guides
設定
project/build.scalaのlibraryDependenciesに、次を追加。
"org.scalatra" %% "scalatra-scalatest" % "2.2.2" % "test"
テストコード
package test.app import org.scalatra.test.scalatest._ import org.scalatest.FunSuite class TestServletTests extends ScalatraSuite with FunSuite { addServlet(classOf[TestServlet], "/*") test("simple get") { get("/") { status should equal (200) body should include ("Hello") } } }
テスト実行
$ sbt > test
特定のテストだけ動かしたい時は、次のようにする。
$ sbt > test-only org.acme.RedSuite org.acme.BlueSuite > test-only *RedSuite
細かい点については、ScalaTestのページを参照。
Debian wheezy(Debian 7.4)にPostgreSQL 9.3(最新版)をインストール
公式ページの手順通り。
PostgreSQL: Linux downloads (Debian)
PostgreSQLのaptリポジトリを追加
/etc/apt/sources.list.d/pgdg.list を作成して、次の通り記述する。
deb http://apt.postgresql.org/pub/repos/apt/ wheezy-pgdg main
リポジトリのキーを追加して、パッケージリストを更新。
$ wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add - $ sudo apt-get update
PostgreSQL 9.3をインストール
$ sudo apt-get install postgresql-9.3
Debian wheezy(Debian 7.4)にOracle JDKをインストール
基本的には次の手順の通りとなる。
JDKのダウンロード
GUIをインストールしてない環境でもいけるように、wgetで無理やりダウンロードしてくる。JDK 7u51 x64のtar.gz版をダウンロードする場合は次の通りとなる。
$ wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com" "http://download.oracle.com/otn-pub/java/jdk/7u51-b13/jdk-7u51-linux-x64.tar.gz"
JDKのインストール
$ make-jpkg jdk-7u51-linux-x64.tar.gz $ sudo dpkg -i oracle-j2sdk1.7_1.7.0+update51_amd64.deb $ sudo update-alternatives --config java
Debian wheezy(Debian 7.4)のVagrant Boxを作成する
基本的な手順はCreating a Base Box - Vagrant Documentationを参照。
Debuan wheezyのインストールイメージを取得
- amd64版のnetinst CDをダウンロード。
- Debian -- Network install from a minimal CD
VirtualBoxでVMを作成(Debianのインストール)
仮想マシン作成時のポイントとしては、
- VM作成時の名前はなんでもOK。最終的なBox名とは関係がない(ここではdebian_wheezy_x64とした)
- オーディオとUSBコントローラを無効化(Vagrant推奨)
- メモリは512MBにする(Vagrant推奨)
- 仮想ディスクはvmdkにする(これがVagrant界隈では普通っぽい)
となる。ただ、自分の好みの問題(どうせ後から増やすので)、メモリは1024MBとした。あと、仮想ディスクは、とりあえず可変32GBにしておいた。その他のVirtualBox上の設定は初期設定のまま。
次に、Debianインストール時の設定だが、
- 日本語環境向けに色々選択
- rootパスワードは vagrant にする
- ログインアカウントに vagrant(パスワードは vagrant)を作成
- 初期インストールパッケージは「標準システムユーティリティ」と「SSHサーバ」のみを選択
ぐらいしか気にするところはなかった。
VirtualBox NATを仮設定
Debianをインストールが完了した時点でSSH接続できる。初期セットアップ時の作業が楽になるので、暫定的にSSH接続できるようにVirtualBoxのNATを変更する。とりあえず、次のように設定した。
GRUBの設定
VMを起動するたびにブートローダが表示されても邪魔くさいので、表示しないようにする。
/etc/default/grub を次のように設定する。
GRUB_DEFAULT=0 GRUB_HIDDEN_TIMEOUT=0 GRUB_HIDDEN_TIMEOUT_QUIET=true GRUB_TIMEOUT=10 GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian` GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" GRUB_CMDLINE_LINUX=""
設定ができたら、
$ update-grub
grub2 - How do I hide the GRUB menu showing up in the beginning of boot? - Ask Ubuntu
パッケージのアップデート
念のためアップデートする。netinst CDを利用しているので、たぶん更新はないはず。
$ apt-get update $ apt-get upgrade
VirtualBox Guest Additionsのインストール
まずはVirtualBox側でGuest Additonsのインストールメディアをマウントする。
操作ができたら、次のコマンドを実行してインストール。
$ mount /media/cdrom $ sh /media/cdrom/VBoxLinuxAdditions.run
IPv6無効化
Vagrant環境では使うことはないのでOFFにする。
/etc/sysctl.conf の末尾に次を追加。
net.ipv6.conf.all.disable_ipv6 = 1
設定を反映する。
$ sysctl -p
sudoの設定
Vagrantの設定要件として、パスワード無しのsudoを設定する必要がある。
まずはsudoのインストール。
$ apt-get install sudo
sudoをインストールしたら、vagrantユーザ用に設定を追加する。
$ visudo
で、エディタが開くので、末尾に以下を追加。
vagrant ALL=(ALL) NOPASSWD: ALL
SSHの設定
とりあえず、Vagrantのマニュアルでは、sshdの設定で「UseDNS no」にしておくべし(どうせローカルからしか繋がないので)と書いてあるので、それに従う。
/etc/ssh/sshd_configを開いて、次を末尾に追加する。
UseDNS no
普通にsshdを設定すると、ここで「PermitRootLogin no」を書きたくなるけど、他のイメージを確認したら、yesのままにしてあった。
手順を簡略化するために、vagrantユーザで次のコマンドを実行する。
$ cd ~ $ mkdir .ssh $ cd .ssh $ wget http://github.com/mitchellh/vagrant/raw/master/keys/vagrant.pub $ mv vagrant.pub authorized_keys $ chmod 600 authorized_keys $ chmod 700 .
MTAの停止(任意)
デフォルトでMTA(exim4)がインストールされて、自動でサービスが起動するようになってるっぽいので、気になる場合は止める。
$ update-rc.d -f exim4 remove
Puppet/Chefのインストール(任意)
必須ではないが、入れておいて損はない。
Puputをインストール。
$ apt-get -y install puppet puppetmaster
Chefをインストール。
$ apt-get -y install chef
インストール時にChef Clientの接続先の設定を聞かれるので、空欄のまま無視で良い。Chefのインストールが終わったら、Chef Clientのサービスを停止しておく。
$ /etc/init.d/chef-client stop $ update-rc.d -f chef-client remove
追加で色々インストール(任意)
お好きな物入れてください。とりあえずVimとGitあたりは入れといた方が無難っぽいので入れた。あと、curlもよく使うので入れる。
$ apt-get -y install vim git curl
あと、私はWindowsで使う前提で、SharedFolderを使う時に問題がある(VirtualBoxのShared Folderが遅すぎるのでどうにかする(Windows向け) - terurouメモ)ので、sambaもインストールした。
コマンド履歴の削除(任意)
なんとなくコマンド履歴が残っているのが嫌なのでクリアする。
$ export HISTSIZE=0 $ rm .bash_history
Vagrant用のBoxを作成
ホスト側で次のコマンドを実行する。前述の手順で一時的に設定NATテーブルは、vagrantが自動的に消してくれるので、気にしなくてもよい。
まずはパッケージを作成する。vagrant packageコマンドのVM名は ~/VirtualBox VMs に存在するディレクトリ名を指す。
$ vagrant package --base debian_wheezy_x64
これでカレントディレクトリに package.box が作成される。ここから先は普通にVagrantを操作するのと変わらない。
$ vagrant box add my-box package.box $ vagrant init my-box $ vagrant up
プログラマ35歳定年説に対する私の理解
SI業界の一般レベルの人間を想定。
- 23歳 新卒入社
- 26歳 入社4年目
- なんとなく仕事を覚えて、そこそこ仕事が任されるようになってきた
- 新卒の子を見て、仕事できねーなという感じを持つようになる
- 上司からは「そろそろ上流工程(設計)ができるように」みたいなことを言われ始める
- 仕方ないので、会計入門のような本で勉強する
- 30歳 入社8年目
- 35歳 プログラマ定年
- 技術面の勉強をさぼってきたツケが出始め、プログラムを書くことに支障が出始める
- 自分は上流工程ができるし、下流工程は部下にやらせよう
- 上司は敵対部署(もしくは顧客)と戦っている
決して勉強してないわけじゃないんだけど、外部環境(組織として最適化された結果)かなぁと。
追記
過去の事はよくわからんけど、少なくとも今は、
- 慢性的にプログラマは不足している。
- 設計ができる人間がもっと不足している。
- でも、目の前に仕事はある。
- 設計は相応の経験・スキルが無いと担当することは無理だが、「大枠の設計があり、それに細かなパラメータチェックを追加して、実装して、動作確認(疎通確認)する」程度なら、多少スキルが低くてもできなくはない。
- むしろ最初はここから入って、経験を積む。
- 高スキルな人間を集めるのは非常に難しいが、若手・低スキルの人間を集めるのは比較的容易。
- 高スキルな人間は設計が主体となり、若手・低スキルの人間は実装やExcel方眼紙の清書が主体となる。
- 当然、スキルに応じて単価に差が出る。
- 会社としては単価を高くしてもらいたいし、高スキルな人間には低スキルな人間を付けられるので、売り上げが立てやすい。
というように、人手が足りない中でどうやって売り上げを上げるか、という仕組みになっている。で、特に情熱もない大多数の人間を誘導して、売り上げを上げるための分かりやすい方便が「上流工程」であって、「35歳定年説」ではないかと。
結論としては、35歳定年説とは、単に用兵の話であって、よく言われる体力ガーとか技術ガーとかは、使われる側が自分の立場を正当化していたのが定着してしまったのではないか、という理解です。