人生の資金と少子化

若者にお金が回らないから少子化が進んでいるという話がある。 本当にそうだろうか?

奨学金を返済できない、結婚しない、子供を作らないというのは個別の問題ではなく、一連の流れの中でつながっているかもしれない。 自分の奨学金の返済が終わると、今度は結婚費用や教育ローンの積み立てに追われ、住宅ローンに苦しみ、最後は老後資金を貯めて死ぬという自分たちの親、つまり団塊世代が作った人生のレールの上を進みたくないという意思表示が、バラバラに行われているとも考えられる。

とはいえ、団塊世代のレール自体、当時みんなが進んで乗ったわけではない。気が付いたら乗っていた人、会社や親族の人間関係から強要されて乗った人も少なくはないだろう。その後の経済的な状況の変化と、そういう会社や人間関係が無くなるという社会環境の変化によって、レールに乗りたがらない世代になるべくしてなったとも言える。

さて、結局彼らが欲しいのは本当に子育ての資金だろうか?
年金や社会保障のような人生設計に影響する仕組みを変えない限り、将来への不安は消えるものではない。

WindowsでFabric

Windows 環境で Fabric を使おうとしてハマったのでその解決方法を書いておきます。

環境

  • Windows 7
  • VisualStudio 2013 Express
  • Python 2.7.6
    • easy_installでpipインストール済み

手順

http://stackoverflow.com/questions/21829188/error-unable-to-find-vcvarsall-bat-when-installing-fabric-python-library-on
より

pip install fabric

を実行すると以下のようなエラーが出ました。

building 'Crypto.Random.OSRNG.winrandom' extension
warning: GMP or MPIR library not found; Not building Crypto.PublicKey._fastmath.
error: Unable to find vcvarsall.bat

以下よりビルド済みのPyCryptoを取得してインストールします。

http://www.voidspace.org.uk/python/modules.shtml#pycrypto

もう一度fabricのインストールをたたくこと今度は成功しました。

以上

コマンドラインオプションのusageの書式

一般に、UNIX系コマンドラインツールは-hや–helpオプションをつけると使い方が表示されます。 Cで言うgetoptが標準的で、さまざまな言語でサポートされています。

今時、オプション引数の一覧はライブラリが生成してくれることが多いですが、usageの内容までは生成してくれないようなのでちょっと調べてみました。

基本は、

  • Usage: で書き始める
  • 必須のものは名前のみ
  • 必須でないものは[arg]のように名前を括弧で囲む
  • 複数指定可能な場合は … を付ける
  • 引数付きオプションには分かりやすい引数名を付ける

というのが大まかなルールになっています。

以下、有名なコマンドのusageだけ抜粋してみました。

$ bash --help
Usage:  bash [GNU long option] [option] ...
        bash [GNU long option] [option] script-file ...

$ man --help
usage: man [-adfhktwW] [section] [-M path] [-P pager] [-S list]
        [-m system] [-p string] name ...

$ ls --help
Usage: ls [OPTION]... [FILE]...

$ sort --help
Usage: sort [OPTION]... [FILE]...
  or:  sort [OPTION]... --files0-from=F

$ uniq --help
Usage: uniq [OPTION]... [INPUT [OUTPUT]]

$ sed --help
Usage: sed [OPTION]... {script-only-if-no-other-script} [input-file]...

$ awk --help
Usage: awk [POSIX or GNU style options] -f progfile [--] file ...
Usage: awk [POSIX or GNU style options] [--] 'program' file ...

$ find --help
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]

$ grep --help
Usage: grep [OPTION]... PATTERN [FILE]...

興味深いのは、

  • オプションのネスト(uniq) [INPUT [OUTPUT]]
  • オプション引数の列挙(find) [-D help|tree|search|stat|rates|opt|exec]
  • 複数オプションを括弧の中に記述(find) [path…]
  • 引数の単語はハイフンでつなぐ(bash) script-file

など。 大文字小文字やスペースの数など多少のバラつきはあるようです。

オプションの有無で指定が大きく変わるものは、複数usageを表示することで分かりやすくしているようです。

参照

ログなどの巨大なテキストファイルから一部を切り出す方法

ログファイルなど、ファイルサイズが1GBやそれ以上ある場合に、テキストエディタを使わずにコマンドラインで一部を切り出す方法です。 gzip圧縮されたファイルは適当にzlessやzcatで読み替えてください。

  • 行の範囲を特定する

lessコマンドに-Nオプションをつけて目的のファイルを開き、”/”を押して対象の文字を検索します。

less -N filename
  • 範囲の切り出し

sedで目的の行番号の範囲を切り出します。1506224行目から1506377行目まで切り出したい場合は以下のようにします。

cat hugelogfile.log | sed -n 1506224,1506377p > clipped.txt

以上。

参考

* http://stackoverflow.com/questions/831681/how-to-display-line-numbers-in-less-gnu
* http://stackoverflow.com/questions/83329/how-can-i-extract-a-range-of-lines-from-a-text-file-on-unix

[Go言語] Goでのキャスト (型アサーション)

Go言語では、インターフェース型xから型Tについて、

x.(T)

のような記法を型アサーションと呼びます。 Tがインターフェース型の場合、動的な型xがインターフェースTを実装しているかどうかを確認します。

xがTを実装しているかどうかは実行時に決まるため、失敗する場合があります。 いわゆるダウンキャストに相当する操作をすることができるため、C++のdynamic_castや、WindowsのCOMで言うところのQueryInterfaceに近いイメージだと思います。

型アサーションが以下のように代入や初期化で使われると、(T, bool)のペアを返します。

v, ok := x.(T)

次の例では、FooableとBarableを実装した”Hogus”と、Fooableのみ実装した”Bogus”を作成して、型アサーションによってHogusがBarableにキャストできてBogusができないことを確認しています。

http://play.golang.org/p/GggE7R1yw2

package main

import "fmt"

type Fooable interface {
    Foo()
}

type Barable interface {
    Bar()
}

type Hocus struct {
    format string
}

func NewHocus() (*Hocus) {
    b := new(Hocus)
    b.format = "-- %s\n"
    return b
}

func (self *Hocus) Foo() {
    fmt.Printf(self.format, "Hocus Foo")
}

func (self *Hocus) Bar() {
    fmt.Printf(self.format, "Hocus Bar")
}

type Bogus struct {
    format string
}

func NewBogus() (*Bogus) {
    b := new(Bogus)
    b.format = "== %s\n"
    return b
}

func (self *Bogus) Foo() {
    fmt.Printf(self.format, "Bogus Foo")
}

func main() {
    testHocus()
    testBogus()
}

func testHocus() {
    var o Fooable
    o = NewHocus()
    o.Foo()
    p, ok := o.(Barable)
    p.Bar()
    fmt.Printf("Type assertion result is %t\n", ok)
}

func testBogus() {
    var o Fooable
    o = NewBogus()
    o.Foo()
    p, ok := o.(Barable)
    fmt.Printf("Bogus Barable is %T\n", p)
    fmt.Printf("Type assertion result is %t\n", ok)
}

参考

  • http://golang.org/ref/spec#Type_assertions
  • http://ja.wikipedia.org/wiki/%E5%9E%8B%E5%A4%89%E6%8F%9B

[Go言語] コンストラクタの書き方

Go言語のコンストラクタは以下のように書くことが推奨されています。

http://play.golang.org/p/oM5C26l8iw

package main

import "fmt"

type Person struct {
    Name string
    Age int
}

func NewPerson (name string, age int) *Person {
    if age < 0 {
        return nil
    }
    p := new(Person)
    p.Name = name
    p.Age = age
    return p
}

func main() {
    taro := NewPerson("Taro", 26)
    fmt.Printf("name: %s age: %d", taro.Name, taro.Age)
}

NewPersonは構造体の初期化を使って以下のように記述することもできます。

func NewPerson (name string, age int) *Person {
    if age < 0 {
        return nil
    }
    p := Person{name, age}
    return &p
}

Cに慣れた人にしてみるとローカル変数のポインタを返すことに違和感があるかもしれませんが、メモリ領域は呼ぶ度に新たに確保されます。

  • Effective Go – Constructors and composite literals
    http://golang.org/doc/effective_go.html#composite_literals

[Go言語] アノニマスフィールド(anonymous field)による継承とオーバーライド

Go言語には継承はありませんが、アノニマスフィールド(anonymous field)を使うことで共通のフィールドとメソッドを持つ構造体(struct)を作ることができます。詳しくはドキュメント等を参照して下さい。

今回は、アノニマスフィールドで継承した場合のオーバーライドの扱いを調べました。インターフェース渡しのメソッドでは元の構造体のメソッドが呼ばれます。ちょっと例が長いですが。

インターフェース渡しの例

http://play.golang.org/p/ebyaLR1ruQ

package main

import "fmt"

type Animal interface {
    Eat()
}

type Mammal struct {
    Weight int
}

type Human struct {
    Mammal
}

func (a *Mammal) Eat() {
    a.Weight += 11
}

func (h *Human) Eat() {
    h.Weight += 23
}

func main() {
    // Human
    h := &Human{Mammal{1}}

    serveFood(h)

    fmt.Printf("Human weight is %d\n", h.Weight)

    // Mammal
    m := &Mammal{1}

    serveFood(m)

    fmt.Printf("Mammal weight is %d\n", m.Weight)
}

func serveFood(a Animal) {
    a.Eat()
}

実行結果

Human weight is 24
Mammal weight is 12
Program exited.

一方、メソッドの引数にポインタを渡すとMammalのメソッドが呼ばれてしまいます。

ポインタ渡しの例

http://play.golang.org/p/ZEiHehkhID

package main

import "fmt"

type Mammal struct {
    Weight int
}

type Human struct {
    Mammal
}

func (a *Mammal) Eat() {
    a.Weight += 11
}

func (h *Human) Eat() {
    h.Weight += 23
}

func main() {
    // Human
    h := &Human{Mammal{1}}

    serveFood(&h.Mammal)

    fmt.Printf("Human weight is %d\n", h.Weight)
}

func serveFood(a *Mammal) {
    a.Eat()
}

実行結果

Human weight is 12
Program exited.

アノニマスフィールドのポインタを使うのは避けた方が良さそうです。

余談ですが、Goにはオーバーロードはありません。
http://golang.org/doc/faq#overloading

参考

[Go言語] インターフェース引数は値渡しなのか参照渡しなのか

Go言語(golang)にはポインタとインターフェースがありますが、「インターフェースへのポインタ」で渡す必要があるのかどうか。

結論から言うと、インターフェースはインスタンスへの参照を持っているのでインターフェースへのポインタを渡す必要はありません。
以下の例では、serveFoodメソッドにインターフェースで渡していますが、元のインスタンスが変更されていることが分かります。

http://play.golang.org/p/M6is2Gpe0B

package main

import "fmt"

type Animal interface {
    Eat()
}

type Human struct {
    Vital string
}

func (h *Human) Eat() {
    h.Vital = "full"
}

func main() {
    a := &Human{"empty"}

    serveFood(a)

    fmt.Printf("vital is %s", a.Vital)
}

func serveFood(a Animal) {
    a.Eat()
}

実行結果

vital is full
Program exited.

まあ、インターフェースの値って何なのか考えてみれば明らかだと思いますが、ポインタに不慣れな人には理解が難しいところかもしれません。

参考

Android 4.2 (Jelly Beans)でビルド番号を7回タップしたのに開発者向けオプションが出てこない

Androidでは、USBデバッグなどの機能を使うには開発者向けオプションを有効にする必要があります。
Android 4.2 (Jelly Beans)ではこのオプションは隠されており、設定のビルド番号を7回タップすることで現れることになっています。

自分で試したら出てこなかったので調べたところ、どうやら端末を最初に登録した、所有者のユーザーでないと出てこないようです。

紛らわしいですね。

参考

Android 4.2 developer settings still unavailable

社員視点でのBYODのデメリット

職場に私物のPCやタブレットを持ち込んで利用することを許可しようという、BYOD (Bring Your Own Device)の導入が話題になっています。 世間では『BYOD導入してない会社はイケてない』という風潮ですが、社員として活用する立場であっても逆に困ることもあるのでは?と思ったので書いてみます。

先に断っておきますが基本的にBYODは有用だと思うし、企業は経費でITガジェット買うべき!とは思ってないです。

ケース1: 『ノートPC持ってきてる○○さん、議事録とっといて~』

ミーティングで私物ノートPCを持ってきて議事録を書いたが、他の出席者はノートPCを持ってこないので毎回自分が議事録係。自分が休んだら何を話したのか分からない。

ケース2:『プロジェクターにつないだとたん上司の悪口を書いたチャットが大写しに!』

前の夜に同僚とチャットして寝落ちしたままのノートPCをプロジェクターにつないだら、チャットが表示されたままだった。 プライベート写真やいかがわしい動画だともっと危険。

ケース3: 『ここのプロジェクター、HDMI入力がないからタブレットつながらない!』

会議室によってプロジェクターが違うことはよくある。 AndroidタブレットはHDMI出力しかなくて720p固定のことが多いので、PCほどには当てにできない。 プレゼンするつもりでタブレットしかもっていないと困る。

要するに、

  • 業務が私物のデバイスを持っている人に依存する
  • 意図せず業務の場に不適切な情報が漏洩する
  • 業務が私物のデバイスの性能に依存する

のはだめなんじゃないでしょうか。その人頼みの仕事を増やしてしまったり、職場の平和を乱すことにもなりそうです。
業務の効率化のためと思われがちかもしれませんが、ガジェットを使いこなせる人のスキルを職場に定着させる方法を議論するべきかなという気がします。

データベースで1:1のリレーションシップはいつ使うのか

ちょっと気になって調べたところ、Stackoverflowに質問が。

Is there ever a time where using a database 1:1 relationship makes sense?

ベストアンサーのコメントを見ると、

A 1:1 relationship typically indicates that you have partitioned a
larger entity for some reason. Often it is because of performance
reasons in the physical schema, but it can happen in the logic side as
well if a large chunk of the data is expected to be “unknown” at the
same time (in which case you have a 1:0 or 1:1, but no more).

訳)
1:1のリレーションシップは一般に大きな実体をなんらの理由で分割したことを示している。しばしばそれは物理スキーマのパフォーマンスが原因であるが、大きなデータの固まりが同時には”未定”になるべき場合はロジックの側でも起こりうる。(その場合1:0か1:1以外にはならない)

例も書いてありますが、まあ拾い読みしていくと以下のような感じかなと。

  • パフォーマンス
    • 行ロック
  • DB容量
    • BLOB
    • ごく一部のレコードしかフィールドを持たない
  • セキュリティ

一つのオブジェクトを分割して保存していることには変わりないですが、特定のカラムが頻繁に更新されて、多くがNULLになる場合には考えてみてもいいかもしれません。

Linuxなどで、コマンドラインからファイルサイズの大きいファイルを見つける方法

Linuxなどで、コマンドラインからファイルサイズの大きいファイルを見つける方法

# du -a /var | sort -n -r | head -n 10

/varのところを、~に変えればホームディレクトリ以下ですね。
ファイルサイズを数値の降順でソートして10件だけ表示されます。

quotaでエラーが出た時に便利。

ネタ元:
How Do I Find The Largest Top 10 Files and Directories On a Linux / UNIX / BSD?

iPhone用のイヤホンをパソコンで使う

iPhoneのイヤホンはマイクとリモコンが付いているので、愛用している人も多いと思います。 しかし、プラグが一般的なイヤホンの3ピンと異なり4ピンなので、「やっぱり職場のPCで使いたい」なんて時に困ります。

ibullet-1

そんな時に使えるのがこれ。サンワダイレクトのWeb限定商品iBullet。 USBに挿すだけで、ドライバのインストールも不要です。 送料がかかりますが、Amazonでも購入できます。 これと同じみたいです。
パッケージ裏面はこちら。

ibullet-2

イヤホンだけでなく、マイクも使えるのでSkypeやGoogle Hangoutを使いたい時にヘッドセットにつなぎ変える必要がなく快適です。変換ケーブルと違ってコネクタがごちゃごちゃしないのもメリットです。 さすがにボタンは使えませんが、音質も一般的なPC本体の端子よりは良いようです。 PCに接続すると青いランプが点灯し、再生すると点滅します。

カレスト幕張で洗車

私はいつもカレスト幕張で洗車しています。 カレスト幕張は新車からカー用品まで取り扱う日産のトータルカーライフショップです。

ここは駐車場が広くてスプレー式の高圧洗車機が多数設置されているので、自分で洗いたい人には特にオススメです。 店内も一般的なカー用品店並みに充実しており、手ぶらで行ってカーシャンプーなどを買い、その場で手洗いすることができます。 その他に、自動洗車機や掃除機もあります。

car-wash-ato-carest-makuhari

洗車機の利用にはプリペイドカードが必要で、店内で購入できます。 高圧洗車機は時間が限られているので、手際よく洗いましょう。 こちらの「サービスピット」のページに詳細があります。

店内にはカフェコーナーもあり、軽食も取ることができます。 carest-cola-float

ガリバーのWOW!TOWN幕張に隣接している他、コストコや建設中のイオンモール幕張新都心にも近く、ROUND1もあるなど休日の洗車にはピッタリです。

Apple TV からアナログオーディオ出力 DCT-3

Apple TV のオーディオ出力はHDMIか光デジタル(SPDIF)のみでアナログオーディオ出力はありません。

テレビに接続するならそれで問題ないですが、パソコンのモニタにつなぐ場合などアナログオーディオ出力が欲しくなることもあります。そんな時に使えるのがこの光デジタルからアナログオーディオ(RCA)に変換するコンバータです。

Amazon: Cypress DCT-3

箱はこんな感じで、Mac風の雰囲気。ACアダプタだけ付属しています。

DCT-3 package

Apple TVに接続するとこうなります。HDMIとSPDIFは両方同時に出力されます。

Apple TV optical out DCT-3

音質をとやかく言うほどのものではないですが、Amazonのレビューにもある通り悪くないと思います。

HerokuでWordPress

Herokuに独自ドメインでWordpressを立てました。ロリポップのホスティングからの移行です。

こちらのブログを参考にさせて頂きました。
WordPressのブログをherokuで立ち上げて、何かメリットあるの?

構成はミニマムで、dyno x1で、DBはMySQLのClearDBです。 無料なのは良いですが、DBが5Mしかなくて厳しい感じです。

ドメインは以前からmuumuuドメインで取得していたものをそのまま使っています。

muumuuドメインの管理画面から、DNSの設定を行いAレコードとCNAMEレコードをこちらのブログを参考に設定しました。
[Heroku] 独自ドメインの設定方法

感想ですが、Herokuはサーバー側でファイルの追加や変更ができないので、プラグインもテーマもひたすらローカルのgitリポジトリに追加していく感じです。 また、同じ理由で画像もアップできないので、Flickrなどのプラグインを入れておく必要があります。

まだこれから運用上の問題も出てくるかもしれないのでいい悪いは言えないですが、デプロイだけだから簡単だしPaaS入門としては面白いんじゃないかと思います。

その他おもしろそうなこと
Enabling email on WordPress on Heroku using SendGridWordPressのMemcachedプラグインを使ったMemcachedとKyotoTycoonのベンチマークWP SendGrid

若者の出会いと分子の反応速度

若者の出会いが少ないという話を分子の反応速度で説明したら面白いんじゃないだろうか。
化学反応とは、分子が衝突して起こる。
例えば、銀イオンと塩化物イオンが衝突すると塩化銀となる。
分子はランダムに動き回っているので、衝突は濃度が高いほど起こりやすく、反応速度はほぼ濃度のべき乗に比例するとされている。
逆に、濃度が下がれば一気に反応が遅くなる。
http://ja.m.wikipedia.org/wiki/反応速度論
これを男女の出会いに当てはめてみよう。
少子高齢化をはじめとする環境の変化によって、若者の濃度は以前よりはるかに下がっている。
では、どうすればいいのだろうか。
化学反応を早めるためにできることは、濃度を上げるか、触媒を使うことだ。
若者の濃度が高そうなのは、被災地ボランティアが挙げられる。
また、触媒に当たるのは、結婚相談所とか街コンだろう。
従って、出会いを求めてボランティアや街コンに参加するのは自然科学的に極めて妥当な行動と言える。

ScalaFX を動かしてみる

h2. Introduction
巷では、とりわけ日本では終わってる感の強い RIA (Rich Internet Application) の中で、WPF (Silverlight) や AIR よりもさらにマイナーかつ注目度の低い JavaFX を皆さんご存知でしょうか?
じつは私も先週知りました。
JavaFX 1.0 から 2.0 への方針変更でますます人気ないみたいですね。
そんなの何がいいんだよ HTML5 だろ今更興味ないよと言われそうですが、ちょっとはいいトコもあるんだョ。
・Declarative Syntax
・WebKit使える
・JVMで動く
って感じで、触らないのも勿体無い気がしてきませんか?
そしてJVMだからScalaからもいけちゃうんです。そこで率先して(?)試してみました。
こちらの手順+αなので、詳しくはこちらを参照して下さい。
“DeveloperGettingStarted”:http://code.google.com/p/scalafx/wiki/DeveloperGettingStarted
h2. 動作環境
私が試したのは以下の環境です。
なんと、あろうことか JavaFX 2.0 は Windows しか正式リリースされておらず、 Mac はインストーラもない Beta で Linux はまだないというアーリーアダプターに冷たい状況となっています。
bq. Windows XP
JDK 1.7 (1.6の方が面倒がないかも、、、)
Scala 2.9.1
JavaFX 2.0
IntelliJ IDEA
Mercurial
h3. インストール
まず、上記一式をインストールします。
次に、scalafx を落としてきます。
“scalafx”:http://code.google.com/p/scalafx/
Downloads を開いても何もないよ、なんて言わないでください。ソースをチェックアウトしましょう。
bc. hg clone https://code.google.com/p/scalafx/
そして、環境変数を通します。
bq. JAVA_HOME
SCALA_HOME
JAVAFX_HOME
反映するため、一旦ログインし直します。 (IntelliJ関係のどこかにそう書いてあった。)
h3. IntelliJのセットアップ
さて、ここからは IntelliJ です。
こちらを参考にしつつ IntelliJ Scala plugin をインストールします。
“Getting Started with IntelliJ IDEA Scala Plugin”:http://confluence.jetbrains.net/display/SCA/Getting+Started+with+IntelliJ+IDEA+Scala+Plugin
IntelliJ の Preference Plugins から scala で検索してダウンロードできます。
この時点で、scalafx のプロジェクトを開けばいいはずなんですが、もしかしたらコンパイラが見つからなくて怒られるかもしれません。その場合は、適宜設定を変えてみたり、空の scala のプロジェクトを作ってみるなどしてください。
h3. ビルドとデモの実行
設定できたら、 All Tests の右の三角を押してテストがパスすることを確認します。
私の環境では、JFXApp.scala でコンパイルエラーが出たので、以下のように修正しました。
bc. // before
javafx.application.Application.launch(classOf[AppHelper], args:_*)

bc. // after
javafx.application.Application.launch(classOf[AppHelper], args)
配列を展開しなくてよくなったんでしょうか?コンパイラの言うがままに変更しただけですが、動いたので深く考えないことにします。
そこまで行ったら、任意のデモを開いて、クラスの辺りを右クリックして Run main を選ぶとデモが実行されます。
h3. まとめ
結局、なぜ ScalaFX かという話ですが、デモを見れば分かる通り yield でアニメーションすれば楽だよね〜、というのが一つ。アルゴリズムの可視化なんていうのも簡単にできそうです。あとは、宣言的にUIを作れるよね〜、など。
JavaFX とか別に興味なくても、Scala でサラッと書いたら絵が出てアニメーションするのっていい感じじゃないですか。
Scalaに興味があったら是非お試しあれ。