のびーの食っちゃね〜だらだらな日々。食っちゃ寝生活してても意外と平気だったりする。

お菓子は世界の共通語!?食べて食べて食べまくっても腹筋が6こに割れちゃったけど今は普通に戻って週末にラーメン二郎に通うだけで (いや、最近は全っ然通ってないんだけど) 体組成計が異常な数値を示す日々をだっらだら〜に綴ってしまうひとり言調な日記風ブログ

Temporary

Mac の Magic Keyboard を新調しましたよ。

IMG_7561


Mac の Magic Keyboard を新調しましたよ。

少し前 (季節が盛夏に入る頃、7月くらい) のことなのですが、仕事用に使っていた Magic Keyboard でチャタリングが多発したり、キーを押しても入力できなかったりということが徐々に増えてきていたので、Magic Keyboard を新調しました。

今まで使っていた Magic Keyboard は、はっきりとは覚えていないですが、たぶん2017年の秋から年末にかけて購入したと思うので、だいたい5年くらいは現役で活躍してくれたことになります。
Magic Keyboard は高すぎるということはないにしても決して安くもないのですが (今日時点では 13,800円 (税込))、5年ほども活躍してくれれば十分かな、という気はします(*゚∀゚)ノ

IMG_7564


箱からキーボードを出してみました。

やっぱり、「新品の白」はとてもきれいですね♪

IMG_7565


新旧の Magic Keyboard を並べてみました。

上に置いてあるほうが、新しいものになります。
こうやって並べてみてみると、どうしても今まで使っていたキーボードの変色が目立ってしまいますね……でも、それはそれだけ活躍してくれたのだよね、とも思います。

また、新しいキーボードは、今まで使っていたキーボードに比べると微妙に幅が狭くなっていますね。

IMG_7566



「新旧の Magic Keyboard を並べてみました」その2。

こうやって並べてみると、ESC キーの横幅は新しいキーボードのほうが大きいのに、1 キーの横幅は今まで使っていたキーボードのほうが小さい、等といった微細 (というほどでもないが) な変化が目に付きますね。

ということで、新しい Magic Keyboard を使っているのですが、やっぱり新しいキーボードはよいですね。
チャタリングは発生しないし、キーを打つとそれが確実に画面に反映されますから。

これからも Magic Keyboard とは長い付き合いになりそうです(*゚∀゚)ノ

----

「Magic Keyboard が5年ほど活躍してくれた。十分に活躍してくれた」と書きましたが、もしこれがトープレの Realforce ならば、あと10〜15年くらいは余裕で活躍してくれていただろうな、とすごく確信を持って思えます。
ですので、Realforce に比べると Magic Keyboard は耐久性に欠けるしコスパが悪いとは言えると思います。

今年は技術系のブログのほうのエントリー数が順調に増えています。

computer_programming_man


今年は技術系のブログのほうのエントリー数が順調に増えています。

自分はブログはこちらのブログとあと技術系のブログを書いているのですが、今年は技術系のブログのほうのエントリー数が順調に増えています。

技術系のブログのほうのここ数年のエントリー数をリストしてみます。
2016年〜2018年は1ヶ月に1エントリーを書くぐらいのペースだったのが2019年はエントリー数が倍増以上で年間で30エントリーを書いて、2020年はさらにエントリー数が増えて年間で54エントリーを書いています。

- 2016年: 15
- 2017年: 10
- 2018年: 11
- 2019年: 30
- 2020年: 54

そして今年、2021年ですが今日までで14エントリーを書いています。
このペースを維持したら歴代での年間エントリー数トップの2020年を超えられそうです。

そんなに簡単なことではないかなーとは思いますが、これも挑戦と捉えてやっていきたいと思います(๑•̀ㅂ•́)و✧

Github に保存してるソースコードが北極圏の GitHub Arctic Code Vault に保存されたようです。

original


GitHub Archive Program: the journey of the world's open source code to the Arctic - The GitHub Blog

Github が自身のリポジトリつまり Github のパブリックリポジトリを 1000年後に残すために北極圏に「GitHub Arctic Code Vault」というアーカイブ (保存庫) を作ってコードを保存する GitHub Archive Program を進めていたのですが、この作業が完了したようです。

保存の対象となるコードはすべてのパブリックリポジトリなので、パブリックリポジトリを保持していればそれだけで GitHub Arctic Code Vault への保存の対象になります。
つまり保存の対象になるかどうかはとてもハードルが低いのですが、でもやっぱり自分のコードが1000年後に残るというのはなんとなく嬉しいですね(*゚∀゚)ノ

iPhone の Twitter 公式アプリで左スワイプでカメラが起動しなくしてみました。

iPhone の Twitter 公式アプリ (以下、単に Twitter アプリ) なんですが、いつの頃からかタイムラインで左スワイプするとカメラアプリが表示するようになっていたみたいですね。
個人的には Twitter を使ってるときにサッとカメラを起動したいとはまったく思っていないので便利だとは少しも思えませんし、むしろタイムラインをスクロールしてるときに微妙な操作ミスで不意にカメラアプリが表示されたりして不便なことこの上ないです(´ε`;)

それに、たとえ使用者本人の意志ではなくとも電車のような公共の交通機関などでカメラアプリを起動させたりすると、このご時世それを見た他人に何を言われるか / 思われるか / 吹聴されるか分かったものではありません。
まあ、少なくとも嫌な気持ちになることだけは確実ですよね。

ということで、iPhone の Twitter アプリで左スワイプカメラアプリが表示されないようにしてみました。

image1


設定アプリ → Twitter を表示して、「カメラ」をオフにする、これだけ。

image2


意図せず Twitter アプリで左スワイプしてしまっても Twitter アプリがむなしくカメラへのアクセス許可を求めるだけ、という動きになります。

スッキリしました(゚∀゚)

「Vue.js 入門」と「Web API The Good Parts」を読み始めました。

IMG_9537


最近、「Vue.js 入門」と「Web API The Good Parts」を読み始めました。

ここ数年とは180度逆の方向で正直なところ戸惑いもありますし不安もあるのですが、ワクワクする気持ちもあることは嬉しく思っています。

それにしても、技術の進歩はすごいものです。
以前はものすごく苦労していたことが、今はその100分の1の労力で1000倍くらいすごいことができてしまうのですから。
まあ、フロントエンドの進歩 (というか変化?) はあまりにも速すぎてついていけない技術者が決して珍しくないというのも分かるような気がしますが……(;・∀・)

でも、今は前に進むのみです(๑•̀ㅂ•́)و✧

お気に入りのツールを開発している企業のイベントに行ってきました。

IMG_8164


JetBrains のイベントに行ってきました。

JetBrains といえば IntelliJ IDEA や PhpStorm, Goland, ReSharper などの高機能かつ高品質な IDE を開発していることで知られている企業です。

その JetBrains が開催するイベント、それも「開発者の生産性を上げる組織作り」「Goland (Go 言語の IDE) で Go コーディングの生産性を向上」や、メルカリの開発・運営元である株式会社メルカリでの使い方を紹介するというセッションがあると聞いては、行かないわけにはいきません。

ということで。

今週は非常に忙しい1週間でしたが、今日だけは残業をせずにイベント会場へ向かいました(๑•̀ㅂ•́)و✧

3時間ほど続いたセッション (1つ1つは短い) はどれも素晴らしかったですし、さらにはノベルティもたくさんもらったりと素晴らしい内容でした! 翌日の仕事のために懇親会に参加できなかったのが残念でしたが、それでも参加できて本当によかったな、と思えるイベントでした(*゚∀゚)ノ

やっぱり、時々は社外のイベントに参加しないとですね(・∀・)b

SecurityAgent プロセスの CPU 負荷が高くて困っていましたが Google IME を再インストールしたら解消しましたε-(´∀`*)ホッ

このところ Macbook Air を使っているといつもファンが回っているような状態で、何をするにも動作が重くて少し困っていました。

top コマンドで見てみると起動直後から SecurityAgent プロセスが CPU 使用率上位に張り付いていました。プロセスがプロセスだけに原因はいろいろありそうだったんですが、以下のブログを参考に Google IME をアンインストールしてみたところ、SecurityAgent がまったく CPU を使わなくなりましたΣ(゚Д゚)

その後、Google IME をインストールし直しても大丈夫なようです。

いやあ、簡単に直ってくれてよかったです♪

(macOS High Sierra) SecurityAgent プロセスの CPU負荷が高くて困ったが Google IME を再インストールしたら解消した - チラウラヤーン3号

----

ちなみに macOS のバージョンは High Sierra (10.13.6) でした。

ジップの法則を身近な作品で試してみました。

ジップの法則

ジップの法則(ジップのほうそく、Zipf's law)あるいはジフの法則とは、出現頻度が k 番目に大きい要素が全体に占める割合が 1/k に比例するという経験則である。


ふとしたことで ジップの法則 というものを知りました。出現頻度の順位を x 軸、出現頻度を y 軸とする両対数グラフにすると、大まかに直線に近似する……というのが面白そうだったので、実際に試してみました。

法則が成り立つ例として単語の出現頻度が書かれていたので、青空文庫 のものを利用させていただきました。

ということで、10つの作品からグラフを作成してみました。

01jigoku


ダンテ アリギエリ著 神曲 (地獄)

01yoakemae1_jo


島崎藤村著 夜明け前 (第一部上)

02toenno_maki


吉川英治著 三国志 (桃園の巻)

gakumonno_susume


福沢諭吉著 学問のすすめ

kaijin_nijumenso


江戸川乱歩著 怪人二十面相

kokoro


夏目漱石著 こころ

ningen_shikkaku


太宰治著 人間失格

takekurabe


樋口一葉著 たけくらべ

the_empty_house


アーサー・コナン・ドイル著 空き家の冒険

wagahaiwa_nekodearu


夏目漱石著 吾輩は猫である


こうしてグラフにしてみると、たしかに大まかに直線に近似していることが分かりますね。

というところで、今回グラフ作成に使ったプログラムも置いておきます。
このところ Go 言語をかじっていたので、勉強を兼ねて全部 Go で書こうかな……とも思ったのですが、やはり面倒くさくなってしまったので、かなりの部分はシェルスクリプトで書いてしまいました(;´∀`)

あと、文字コード変換に nkf, 形態素解析に mecab, グラフ作成に plot を利用しているので、それらのインストールコマンドも置いておきます。また、nkf と mecab のインストールには Homebrew を使っています。

# nkf, mecab, plot のインストール
$ brew install nkf
$ brew install mecab
$ brew install mecab-ipadic

$ go get gonum.org/v1/plot/


あと、青空文庫から文章ファイルをダウンロードしてグラフを作成するシェルスクリプト。
第1引数に文章ファイルの URL を指定して使います。たとえば、夏目漱石の 吾輩は猫である なら https://www.aozora.gr.jp/cards/000148/files/789_ruby_5639.zip を第1引数に指定します。

やっていることは非常にシンプルですが、青空文庫で公開されている文章はルビがふられているので、除去しています。

#!/bin/sh
URL=$1
ZIPFILE=`basename ${URL}`

echo "PROCESS: ${URL}"

# zip のダウンロード
curl --output ${ZIPFILE} ${URL}

# zip の展開
FILE=`unzip ${ZIPFILE} 2>&1 | egrep '.txt' | awk '{print $2}'`
rm ${ZIPFILE}

# 文字コードを Shift_JIS から UTF8 へ
nkf -Sw80 --in-place ${FILE}

# ルビを除去
sed -i -e 's/《[^》]*》//g' ${FILE}
rm ${FILE}-e

# 形態素解析
MECABFILE=${FILE}.mecab
# 1行がかなり大きいファイルがあるのでバッファサイズを多くとる
cat ${FILE} | mecab -b 32768 > ${MECABFILE}
rm ${FILE}

# グラフを作る
./zipf ${MECABFILE}
rm ${MECABFILE}


グラフを作る Go 言語のプログラム (シェルスクリプトの一番下の方で使っている zipf というコマンド)

package main

import (
"bufio"
"os"
"strings"
"sort"
"math"
"gonum.org/v1/plot"
"gonum.org/v1/plot/plotter"
"gonum.org/v1/plot/plotutil"
"gonum.org/v1/plot/vg"
)

func main() {
var input string
if len(os.Args) <= 1 {
return
} else {
input = os.Args[1]
}

// 単語をカウント
counts := countWords(input)

// グラフを作る
p, err := plot.New()
if err != nil {
panic(err)
}
p.Title.Text = input

if err := plotutil.AddScatters(p, point(counts)); err != nil {
panic(err)
}

// グラフを画像ファイルに保存
output := input[0:strings.Index(input, ".")] + ".png"
if err := p.Save(5*vg.Inch, 5*vg.Inch, output); err != nil {
panic(err)
}
}

func countWords(path string) []int {
f, err := os.Open(path)
if err != nil {
panic(err)
}
defer f.Close()

// 単語をカウント
m := make(map[string]int)
scanner := bufio.NewScanner(f)
for scanner.Scan() {
line := scanner.Text()
if strings.Index(line, "EOS") != -1 || strings.Index(line, "\r") != -1 {
continue
}

word := strings.Split(line, "\t")[0]
m[word] = m[word] + 1
}

// ソートするためにスライスへ
var counts = make(sort.IntSlice, len(m))
i := 0
for _, v := range m {
counts[i] = v
i++
}

// 出現頻度でソート
sort.Sort(sort.Reverse(counts))
return counts
}

func point(counts []int) plotter.XYs {
pts := make(plotter.XYs, len(counts))
for i, v := range counts {
pts[i].X = math.Log10(float64(i + 1))
pts[i].Y = math.Log10(float64(v))
}

return pts
}


いずれも、簡潔にするためにエラー処理はほとんど書いていません。

というわけで、ジップの法則を身近な作品で試してみました。

久しぶりにっ!!勉強会に参加してきました!

久しぶりにっ!!勉強会に参加してきました!

IMG_7138


行き先は、定番のこちらです。

IMG_7140


気になっていたけれどもなかなか調べられず……だったのですが、うまく概要とポイントがまとめられたセッションで、すごく参考になりました(・∀・)

本当に久しぶりっ!!の勉強会でしたが、とてもよいものでした♪

技術書の読書を再開しました(๑•̀ㅂ•́)و✧

IMG_6756


技術書の読書を再開しました。

ここ半年くらいはほとんど読んでいなかったのですが、毎月1冊は読む (多い年は、5冊 / 月) のが当たり前だったので、なんともいえない違和感を感じていました。また、違和感だけでなく、実際に思考レベルも今ひとつ高まらないような気がしていたので、新年度だしちょうどいいタイミングかも……ということで、技術書 (+ この業界界隈の本) の読書を再開することにしました(*´∀`)

で、再開してみたら、やっぱりこれが楽しいのですよね♪
やっぱり、本が好きです(๑•̀ㅂ•́)و✧

----

読むと言っても、通勤の間だけなのですけどね。
でもまあ、これで充分でしょう(ΦωΦ)

Homebrew 環境を再構築していました(゚∀゚)

homebrew-256x256


Mac を開発環境にしているエンジニアにとっては必須ともいえる Homebrew なわけですが、前回から少し時間を空けて使ってみたらいろいろとダメになっていたので再インストールしてみました(゚∀゚)

といっても、アンインストールは 公式の FAQ を参考にしてコマンドを1回実行するだけ、インストールも 公式 を参照してコマンドを1回実行するだけで完了、というお手軽さです(*´∀`)

# アンインストール
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"

# インストール
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"


さて。

ソフトウェアに対する要求、そして複雑度や規模は加速度的に大きくなっていますが、それに立ち向かうための環境も、以前とは比べ物にならないくらい強力になっています(`・ω・´) もちろん、それと同時に、以前 (50〜20年前) とは比べ物にならないくらい技術の流行り廃りが激しいですし、「技術を使うための背景技術」に対する要求も、どんどん大きくなっていますけどね(。・_・。)

でも、やっぱりソフトウェアに関わっているのが好きだなあ、とつくづく思います。

なので、まだまだあがいていこうと思います(๑•̀ㅂ•́)و✧

「Java パフォーマンス」読んでいます。

IMG_3615


4月、5月とクリスティー沼にハマりまくっていたのですが、さすがに月1冊くらいは技術書を読まないと鈍ってしまいます(;´∀`)

ということで、少し前は「Java 本格入門」を読んでいたのですが、わりとさっくり読み終わったので、今は「Java パフォーマンス」を読んでいます。で、はっきりいってこれが良書なのですよね。今まであまり読まなかったタイプの本ということもあって、ガッツリ引いてきた感があります♪ (「Java 本格入門」も良かったけど。というか、「Java 本格入門」の著者さんが「Java パフォーマンス」の監訳をしてる繋がりで買ってたりする)

Java のパフォーマンス測定のイロハから JIT コンパイラの仕組み、そしてガベージコレクション基礎・アルゴリズム、そのチューニングを初級から上級まで、ヒープやネイティブメモリとデータベースのベストプラクティス、マルチスレッド、Java SE と Java EE のパフォーマンス…と、入門からその道のプロレベルまでが読める内容になっています。

もちろん、自分はほぼ全編に渡って「入門」レベルなのですが、こんな基本的なことを知らなかったことに危機感を感じるとともに、今さらながら読めてよかったな、とも思います(๑•̀ㅂ•́)و✧

やっぱり、技術書って楽しいのですよね(〃∇〃)

「新装版 リファクタリング」読んでいます。

IMG_3366


久しぶりに技術書を読んでいます。

久しぶりといっても1ヶ月ぶりくらいなのですが、自分は基本的にいつも技術書を読んでいるので、1ヶ月でもすっごく久しぶりに感じますね(;´∀`)

ということで「新装版 リファクタリング」なのですが、旧版は読んだことがあるのですよね。もちろん、「リファクタリング」が名著なのは言うまでもないことですが、新装版も目立たないながら相当の変更 (改善) が施されていて、よりよい本になっています。

旧版を読んだことがない人はもちろんですが、旧版を読んでいる人にもオススメできる本です( ´∀`)bグッ!

Analysis paralysis (分析麻痺)

システム開発では Analysis paralysis という言葉がよく使われます。日本語で言うと分析麻痺とか分析中毒になります。

分析麻痺ってなに?かというと、大雑把に言ってしまうと「完璧な分析を目指すあまりその先の実装に進めない」状態のことです。また、分析とついていますが、実際にはいわゆる設計においても発生しがちなものでしょう。

この分析麻痺、いわゆる「設計書を書くこと自体が目的化」していると非常に発生しやすいように感じます。目的化までは至らずとも、精度の高い設計書を目指したり (このこと自体は間違ってはいないが)、「誰が見ても同じように高品質なコードが書ける」ような設計書を目指していると高確率で陥ります…あくまで経験則ですが、概ね同じような感想を持つ人が多いのではないでしょうか( ・ω・)

その分析麻痺なのですが、先日読んだ ユースケース入門 で解説されていた「分析麻痺に陥らないために」というポイントが非常に的を射ていたので備忘録まで書いてみます。

TOC
---
* 2章 ドメインモデリング
* 3章 ユースケースモデリング
* 4章 ロバストネス分析
* 5章 相互作用とモデリング
* 6章 ICONIX 統一オブジェクトモデリングのアプローチ

# 1章、7章、8章にはない。

2章 ドメインモデリング
----------------------
* 文法チェックで泥沼にはまり込まないように。
* プロジェクトの初期段階では多重度の整理はしない。
* 詳細設計までは集約とコンポジションは気にしない。

3章 ユースケースモデリング
--------------------------
* ユーザの要求を正確に理解するまでユースケースを書かないこと。
* 精密な構造や上品なユースケースモデルから設計を引き出すことはできないのだから、何週間も時間を費やさないこと。
* 含有、拡張、利用を使うかどうかで心配しすぎないこと。
* 長くて複雑なユースケーステンプレートを使用しないこと。

4章 ロバストネス分析
--------------------
* ロバストネス図から詳細設計はしないこと。
* 設計が始まったならば、ロバストネス図を完璧にすることに時間を浪費しない。

5章 相互作用とモデリング
------------------------
* オブジェクトについての具体的なアイデアが浮かぶまで、オブジェクトに振る舞いを割り当てないこと。
* ロバストネス図が不完全なままシーケンス図を描かないこと。
* 実際のメソッドに注目し、get / set メソッドに注目しないこと。

6章 ICONIX 統一オブジェクトモデリングのアプローチ
-------------------------------------------------
* 2つの状態を持つオブジェクトのステートチャート図は描かないこと。
* モデル化する必要のないものはモデル化しないこと。
* 知っているという理由だけでステートチャート図にしないこと。

重厚長大な UML (とくにユースケース) 解説書が多い中、ユースケース入門 は非常に実践的な内容でとても良いです。特にロバストネス分析についてここまで書かれているのは、この本と ユースケース駆動開発実践ガイド くらいじゃないでしょうか (知らないだけかもしれないけど)

----

2016092601

ユースケース入門

久しぶりにワクワクするカラーテーマに出会いました(゚∀゚)

2016081101


暗色系のカラーテーマをつまみぐいしつつ Solarized (ダーク) をメインに使っているのですが、久しぶりにワクワクするカラーテーマに出会いました!(゚∀゚)

Eclipse Moonrise UI Theme

Eclipse のカラーテーマなんですが、まずは UI 全体を Eclipse Moonrise UI Theme で暗色化して、そこに RainbowDrops カラーテーマを適用する、という流れになります (xml を使うのは Eclipse Color Theme Plugin を使う場合)

Rainbow というだけあって派手派手な配色なのですが、これが意外なほどガチャガチャしないのですよね(・∀・)

そんなわけで、しばらくは RainbowDrops で行こうと思います(゚∀゚)

「Land of Lisp」読了しました(・∀・)

IMG_9229


Land of Lisp 読了しました!(゚∀゚)

3月から読み始めたので、大雑把に言って5ヶ月…いやあ、長かったです(;´∀`)

Land of Lisp は基本的にコードをガンガン書いていくタイプの本なので、とにかくサンプルコードが多いです。なので、Lisp を分かっている人はともかく、これから Lisp を学ぼう (というか、まずは「触れよう」というスタンス) という人にとっては、とにかく写経しまくるしかないですし、写経しまくれるというのがこの本の大きな売りだとも思います(・∀・)

まあ、そういったわけで、自分にとっての読書時間である通勤時間にはまったく読まず、帰宅後に余裕があるときのみ読む (写経) ようにしていたところ、ここまで時間がかかってしまった次第です。

まだ触りを軽く触った程度なので (なのでしょう) よく分かりませんが、少なくとも「やっぱり Lisp はとんでもない言語だ」と思いましたし、「とんでもないけど、まったく想像ができないというわけではない」というのが率直な感想です。とか書いていますが、Lisp のマクロはとんでもないなと思いましたけれども(;´∀`)

まあ、ちょっと時間がかかってしまいましたが、これで次の写経系の本に取り掛かれますね(`・ω・´)

----

ちょっとした写経系の本はちょくちょく読む (写経) したりしていたのだけど(;´∀`)

----

Lisp にすんなりと入れたのは、いろいろな言語での関数型アプローチを経験していたから、というのが大きいと思う。自分的には JavaScript と OCaml かなあ、と。Java 8 でストリーミング API と関数型インタフェース、ラムダ式がサポートされたけど、やっぱり自分にとってのラムダ (とクロージャー) は JavaScript かな、なんて。でも、やっぱり Lisp の世界は本当にすごいなと思わされましたね( ・ω・)

再読本で感じる成長と新規本への渇望(;・∀・)

IMG_8935


以前読んだ本を読み返すと自分の成長具合が分かる と書きましたが、再読本が増えている今年は特にそれを感じます。

たとえば、プログラミング喧嘩殺法の双璧である (と自分が思っている) 「レガシーコード改善ガイド」と「リファクタリング」ですが、初めて読んだ時は1冊読むのに1ヶ月近くかかっていたと思います。でも、今月同じくこの2冊を読んだ時は2冊で1週間 + 1日で読めたので、読む時間は実に15%未満になっていることになります。

これはやはり「字面のカタチを見るだけで意味が分かる」であるとか「読むべきところと飛ばしていいところがすぐに分かる」ようになったのが効いているのだとは思います。では、前回読んだのはあまり意味がなかったのか?というか、そんなことはまったくなく、前回 (よく知らずに) 苦労して読んだからこそ今回はとても楽に読めた、これが真実だと思います。苦労して読んだからこそ「これは身に付けなければ」「感覚を磨かなければ」という意識が芽生え、それが明示的・暗黙的に自分のスキル構築に良い影響を与えてくれたのだと思います(・∀・)

と、いろいろ書きましたが。

今月に入ってから新規本は1冊しか読めていないので、そろそろ新規本に戻りたいと思います(・∀・)

ネットワーク強化月間のはずが、なぜか「レガシーコード改善ガイド」と「リファクタリング」を読んでいます(;´∀`)

今月はネットワーク強化月間ですよ(・∀・)

IMG_8935


今は「レガシーコード改善ガイド」と「リファクタリング」を読んでいます。ネットワーク強化月間どこ行った!って勢いでネットワーク関係の本は読んでいません…というか、この後も控えているのは Java Web フレームワークの本だったり数学の本だったり (こちらの優先度が上がり気味)、往復の通勤時間3時間を使ってもなかなか読みきれません(;´∀`)

でも。

計画を守るのはもちろん大事ですが、計画することの大事さには比べられません。そして、計画を実行に移す段階では計画したときの前提が覆されることは日常茶飯事です。そこで、計画を守るのか / 優先順位の組み換えをするのか…そのさじ加減によって結果も変わってきます (少なくとも短期的には)

ということを感じながら、計画と計画見直しを天秤にかける毎日です(・∀・)

以前読んだ本を読み返すと自分の成長具合が分かりますね。

今月はネットワーク強化月間ですよ(・∀・)

以前読んだ本を読み返すと自分の成長具合が分かりますね。特に技術書なんかだと一目瞭然です。

たとえば、

* 読むスピード: 以前と同じ / 短くなった
* ひっかかること: 以前と同じ / 減った
* だよねー、と思うこと: 以前と同じ / 増えた
* 違うだろ、と思うこと: 以前と同じ / 増えた
* 濃い / 薄いが分かる: 以前と同じ / 増えた

こういったところは非常に比べやすいポイントだと思います。

素晴らしい本を読めること、そしてそれを読み返す機会があること。ありがたいですね(・∀・)

----

ネットワーク関係の本は今のところ全然読めていないのですが(;´∀`)

Land of Lisp 15章「ダイス・オブ・ドゥーム: 関数型スタイルでゲームを書こう」でのパフォーマンスチューニング( ・ω・)

Land of Lisp 15章を読んでいるのですが、「15章 ダイス・オブ・ドゥーム」では当初あからさまに遅そう…効率度外視というよりもわざと遅くしてる感じ…な実装をして、その後パフォーマンスチューニングをすることにより「おお、早くなった!(゚∀゚)」という内容になっています。定番ともいえる使い古された構成ですが、でも、それだけに安心して楽しめる (そして学べる) のがいいと思います。

しかし、いくら遅い実装と言ったって、ゲーム板の大きさが 2 * 2 というのは狭すぎなんじゃないの…?しかも、チューニング後でもたかだか 3 * 3 っていうのも…と思ったので、チューニング前にゲーム板を 3 * 3 にして実行してみました。まあ、結果は大概予想がついていたのですが、2 * 2 のときは0.001秒で終わった処理が一晩かかっても終わりませんでしたよ…(;´д`) でも、チューニング後は0.3秒で終わるようになるので、やっぱり効果は絶大なのですよね(・∀・)

ちなみに、ここではメモ化と末尾再帰最適化を行いますが、そのためのコードはちょっと驚いてしまうほどの少なさです。これには Lisp というプログラミング言語のパワーも影響しているのでしょうが、やはり根底にはきれいで素性の良いコードがあるからでしょうね。もし元のコードがクヌース先生の言う「早すぎる最適化は諸悪の根源である」なコードだったら、きっと何倍もの労力が必要なうえにここまでの成果はだせなかったでしょう。

と、少し話がそれてしまいましたが、やっぱり基本はどのプログラミング言語でも同じですし、Land of Lisp は楽しく読める、そういうことです(゚∀゚)

Land of Lisp 10章「loop マクロ」で1000万日シミュレートしてみた結果( ・ω・)

ざっと1000万日ほどシミュレートしてみました。100万日で区切って途中経過を見ていたのですが、日数が進めば進むほどパラメータの偏りが大きくなるので分かりやすいです。なお、マップのサイズは横: 100, 縦: 30, ジャングルのサイズは横: 10, 縦: 10 で、ジャングルの左上角は横: 45, 縦: 10 (つまりマップの中央) で実行しました。

で、1000万日実行した結果はこちらです。

> (length *animals*)
164

> (sort *animals* (lambda (a b) (< (car (animal-genes a)) (car (animal-genes b)))))
(#S(ANIMAL :X 54 :Y 12 :ENERGY 122 :DIR 2 :GENES (4 15 262 87 12 2 1 1))
#S(ANIMAL :X 52 :Y 12 :ENERGY 112 :DIR 2 :GENES (5 16 262 87 12 2 1 1))
#S(ANIMAL :X 53 :Y 22 :ENERGY 88 :DIR 6 :GENES (5 15 262 88 12 1 1 2))
#S(ANIMAL :X 49 :Y 19 :ENERGY 134 :DIR 5 :GENES (5 15 262 88 12 1 1 1))
#S(ANIMAL :X 50 :Y 19 :ENERGY 91 :DIR 7 :GENES (5 15 262 87 14 2 2 1))
#S(ANIMAL :X 55 :Y 20 :ENERGY 88 :DIR 4 :GENES (5 15 262 88 12 1 1 1))
#S(ANIMAL :X 54 :Y 17 :ENERGY 171 :DIR 1 :GENES (5 15 262 87 13 2 2 1))
#S(ANIMAL :X 45 :Y 21 :ENERGY 66 :DIR 1 :GENES (5 16 263 87 13 2 1 1))
#S(ANIMAL :X 47 :Y 21 :ENERGY 66 :DIR 1 :GENES (5 16 263 87 13 2 1 1))
#S(ANIMAL :X 56 :Y 14 :ENERGY 32 :DIR 2 :GENES (5 15 262 87 12 2 1 1))
#S(ANIMAL :X 53 :Y 14 :ENERGY 101 :DIR 3 :GENES (5 15 262 88 12 2 1 1))
#S(ANIMAL :X 42 :Y 14 :ENERGY 4 :DIR 3 :GENES (5 16 263 87 13 1 1 1))
#S(ANIMAL :X 44 :Y 23 :ENERGY 79 :DIR 3 :GENES (5 15 261 87 12 2 1 1))
#S(ANIMAL :X 52 :Y 15 :ENERGY 127 :DIR 6 :GENES (5 16 262 87 13 2 1 1))
#S(ANIMAL :X 51 :Y 12 :ENERGY 112 :DIR 1 :GENES (5 16 262 87 12 2 1 1))
#S(ANIMAL :X 55 :Y 10 :ENERGY 107 :DIR 2 :GENES (5 15 262 88 12 2 1 1))
#S(ANIMAL :X 50 :Y 17 :ENERGY 40 :DIR 3 :GENES (5 16 263 87 13 2 1 1))
#S(ANIMAL :X 56 :Y 20 :ENERGY 112 :DIR 7 :GENES (5 15 262 87 12 2 1 1))
#S(ANIMAL :X 51 :Y 9 :ENERGY 101 :DIR 0 :GENES (5 15 262 88 12 2 1 1))
#S(ANIMAL :X 52 :Y 10 :ENERGY 130 :DIR 5 :GENES (5 15 263 88 12 1 1 1))
#S(ANIMAL :X 49 :Y 18 :ENERGY 172 :DIR 6 :GENES (5 15 262 87 12 2 1 1))
#S(ANIMAL :X 49 :Y 24 :ENERGY 42 :DIR 7 :GENES (5 15 262 87 12 2 1 1))
#S(ANIMAL :X 52 :Y 18 :ENERGY 128 :DIR 4 :GENES (5 15 262 87 13 2 1 1))
#S(ANIMAL :X 49 :Y 19 :ENERGY 134 :DIR 5 :GENES (6 15 262 88 12 1 1 1))
#S(ANIMAL :X 55 :Y 10 :ENERGY 107 :DIR 2 :GENES (6 15 262 88 12 2 1 1))
#S(ANIMAL :X 48 :Y 14 :ENERGY 121 :DIR 2 :GENES (6 16 261 88 12 1 2 1))
#S(ANIMAL :X 49 :Y 16 :ENERGY 121 :DIR 4 :GENES (6 15 261 88 12 1 2 1))
#S(ANIMAL :X 50 :Y 15 :ENERGY 148 :DIR 6 :GENES (6 17 262 89 15 3 2 1))
#S(ANIMAL :X 45 :Y 14 :ENERGY 127 :DIR 1 :GENES (6 13 263 89 11 2 2 1))
#S(ANIMAL :X 44 :Y 14 :ENERGY 39 :DIR 2 :GENES (6 15 262 87 12 1 1 1))
#S(ANIMAL :X 56 :Y 17 :ENERGY 47 :DIR 0 :GENES (6 16 262 87 13 2 1 1))
#S(ANIMAL :X 48 :Y 13 :ENERGY 140 :DIR 2 :GENES (6 16 262 88 12 1 1 1))
#S(ANIMAL :X 46 :Y 21 :ENERGY 164 :DIR 7 :GENES (6 15 261 88 12 1 1 1))
#S(ANIMAL :X 50 :Y 10 :ENERGY 17 :DIR 6 :GENES (6 15 262 88 12 1 1 1))
#S(ANIMAL :X 39 :Y 12 :ENERGY 13 :DIR 0 :GENES (6 15 262 88 12 1 1 2))
#S(ANIMAL :X 51 :Y 16 :ENERGY 39 :DIR 5 :GENES (6 15 262 88 12 1 1 1))
#S(ANIMAL :X 50 :Y 8 :ENERGY 47 :DIR 3 :GENES (6 14 263 89 11 2 2 1))
#S(ANIMAL :X 49 :Y 19 :ENERGY 79 :DIR 4 :GENES (6 15 262 88 12 1 1 1))
#S(ANIMAL :X 39 :Y 7 :ENERGY 81 :DIR 6 :GENES (6 14 263 88 12 3 2 1))
#S(ANIMAL :X 41 :Y 13 :ENERGY 120 :DIR 2 :GENES (6 14 263 88 11 2 2 1))
#S(ANIMAL :X 47 :Y 15 :ENERGY 43 :DIR 0 :GENES (6 15 262 88 12 1 1 1))
#S(ANIMAL :X 44 :Y 4 :ENERGY 1 :DIR 6 :GENES (6 14 263 88 12 3 2 1))
#S(ANIMAL :X 50 :Y 15 :ENERGY 165 :DIR 0 :GENES (6 15 262 88 12 1 2 1))
#S(ANIMAL :X 44 :Y 3 :ENERGY 89 :DIR 1 :GENES (6 14 263 88 11 2 2 1))
#S(ANIMAL :X 53 :Y 7 :ENERGY 17 :DIR 1 :GENES (6 15 262 88 12 1 1 1))
#S(ANIMAL :X 37 :Y 11 :ENERGY 13 :DIR 0 :GENES (6 15 262 88 12 1 1 1))
#S(ANIMAL :X 44 :Y 13 :ENERGY 151 :DIR 6 :GENES (7 17 262 89 15 5 2 1))
#S(ANIMAL :X 48 :Y 7 :ENERGY 117 :DIR 6 :GENES (7 12 260 86 13 1 2 2))
#S(ANIMAL :X 53 :Y 14 :ENERGY 117 :DIR 0 :GENES (7 17 262 89 15 3 1 1))
#S(ANIMAL :X 55 :Y 17 :ENERGY 100 :DIR 1 :GENES (7 17 262 89 15 3 1 2))
#S(ANIMAL :X 50 :Y 8 :ENERGY 30 :DIR 3 :GENES (7 17 262 89 15 4 2 1))
#S(ANIMAL :X 50 :Y 15 :ENERGY 68 :DIR 2 :GENES (7 17 262 89 15 3 2 1))
#S(ANIMAL :X 57 :Y 15 :ENERGY 78 :DIR 7 :GENES (7 18 263 87 16 4 4 1))
#S(ANIMAL :X 49 :Y 15 :ENERGY 186 :DIR 5 :GENES (7 17 262 89 15 3 2 1))
#S(ANIMAL :X 30 :Y 17 :ENERGY 152 :DIR 1 :GENES (7 19 262 88 17 4 3 1))
#S(ANIMAL :X 45 :Y 18 :ENERGY 151 :DIR 5 :GENES (7 17 262 89 15 5 2 1))
#S(ANIMAL :X 50 :Y 20 :ENERGY 100 :DIR 6 :GENES (7 17 262 89 15 3 1 2))
#S(ANIMAL :X 52 :Y 13 :ENERGY 158 :DIR 6 :GENES (7 18 263 87 16 4 4 1))
#S(ANIMAL :X 48 :Y 8 :ENERGY 69 :DIR 0 :GENES (7 17 262 89 15 5 1 1))
#S(ANIMAL :X 60 :Y 14 :ENERGY 32 :DIR 5 :GENES (7 19 263 87 16 4 4 1))
#S(ANIMAL :X 27 :Y 14 :ENERGY 72 :DIR 5 :GENES (7 19 263 88 17 4 3 1))
#S(ANIMAL :X 48 :Y 18 :ENERGY 37 :DIR 7 :GENES (7 17 262 89 15 3 1 1))
#S(ANIMAL :X 48 :Y 15 :ENERGY 113 :DIR 0 :GENES (7 19 263 87 16 4 3 1))
#S(ANIMAL :X 54 :Y 27 :ENERGY 39 :DIR 1 :GENES (7 20 264 88 16 4 4 1))
#S(ANIMAL :X 48 :Y 13 :ENERGY 177 :DIR 3 :GENES (7 17 262 89 15 3 1 1))
#S(ANIMAL :X 54 :Y 15 :ENERGY 165 :DIR 3 :GENES (7 18 263 88 15 4 1 1))
#S(ANIMAL :X 48 :Y 8 :ENERGY 37 :DIR 1 :GENES (7 12 260 87 13 1 2 2))
#S(ANIMAL :X 49 :Y 23 :ENERGY 121 :DIR 5 :GENES (7 17 262 89 15 3 1 1))
#S(ANIMAL :X 40 :Y 21 :ENERGY 110 :DIR 0 :GENES (7 17 262 89 15 4 1 1))
#S(ANIMAL :X 45 :Y 16 :ENERGY 127 :DIR 1 :GENES (8 17 263 87 14 4 2 2))
#S(ANIMAL :X 46 :Y 11 :ENERGY 96 :DIR 4 :GENES (8 18 264 88 15 4 2 2))
#S(ANIMAL :X 51 :Y 15 :ENERGY 132 :DIR 2 :GENES (8 18 264 88 14 4 2 2))
#S(ANIMAL :X 46 :Y 16 :ENERGY 127 :DIR 1 :GENES (8 17 263 88 14 4 2 2))
#S(ANIMAL :X 44 :Y 6 :ENERGY 74 :DIR 7 :GENES (8 18 264 88 15 5 2 2))
#S(ANIMAL :X 53 :Y 8 :ENERGY 126 :DIR 7 :GENES (8 18 264 88 14 4 2 2))
#S(ANIMAL :X 62 :Y 15 :ENERGY 50 :DIR 1 :GENES (8 17 263 88 14 4 2 2))
#S(ANIMAL :X 45 :Y 13 :ENERGY 96 :DIR 6 :GENES (8 18 264 88 15 4 2 2))
#S(ANIMAL :X 52 :Y 22 :ENERGY 88 :DIR 3 :GENES (8 19 264 88 15 4 2 2))
#S(ANIMAL :X 46 :Y 15 :ENERGY 100 :DIR 7 :GENES (8 17 263 88 14 4 2 2))
#S(ANIMAL :X 53 :Y 12 :ENERGY 52 :DIR 6 :GENES (8 18 264 88 15 4 2 2))
#S(ANIMAL :X 32 :Y 7 :ENERGY 47 :DIR 1 :GENES (247 197 20 1 2 18 27 199))
#S(ANIMAL :X 80 :Y 21 :ENERGY 89 :DIR 7 :GENES (248 197 20 1 2 18 27 199))
#S(ANIMAL :X 93 :Y 28 :ENERGY 127 :DIR 7 :GENES (248 197 20 1 2 18 27 199))
#S(ANIMAL :X 75 :Y 14 :ENERGY 89 :DIR 6 :GENES (248 197 20 1 2 18 27 199))
#S(ANIMAL :X 51 :Y 2 :ENERGY 125 :DIR 4 :GENES (249 197 20 1 2 18 27 199))
#S(ANIMAL :X 96 :Y 7 :ENERGY 126 :DIR 3 :GENES (249 196 20 2 2 18 27 199))
#S(ANIMAL :X 88 :Y 25 :ENERGY 153 :DIR 7 :GENES (250 196 20 2 3 18 27 197))
#S(ANIMAL :X 45 :Y 21 :ENERGY 32 :DIR 5 :GENES (250 195 21 6 4 13 25 205))
#S(ANIMAL :X 65 :Y 15 :ENERGY 163 :DIR 5 :GENES (250 195 21 6 3 13 25 205))
#S(ANIMAL :X 43 :Y 2 :ENERGY 112 :DIR 7 :GENES (250 195 21 6 3 13 25 205))
#S(ANIMAL :X 9 :Y 29 :ENERGY 67 :DIR 0 :GENES (250 195 21 6 3 12 25 204))
#S(ANIMAL :X 80 :Y 13 :ENERGY 118 :DIR 7 :GENES (250 195 21 6 3 12 25 205))
#S(ANIMAL :X 21 :Y 11 :ENERGY 100 :DIR 6 :GENES (251 195 21 3 4 10 24 202))
#S(ANIMAL :X 39 :Y 3 :ENERGY 88 :DIR 3 :GENES (251 195 21 3 3 10 24 202))
#S(ANIMAL :X 44 :Y 9 :ENERGY 72 :DIR 4 :GENES (251 195 22 3 3 8 23 201))
#S(ANIMAL :X 21 :Y 10 :ENERGY 100 :DIR 5 :GENES (251 195 21 3 3 10 24 202))
#S(ANIMAL :X 48 :Y 3 :ENERGY 131 :DIR 4 :GENES (251 195 21 3 3 10 24 202))
#S(ANIMAL :X 44 :Y 27 :ENERGY 72 :DIR 5 :GENES (251 195 22 3 3 8 24 201))
#S(ANIMAL :X 46 :Y 9 :ENERGY 5 :DIR 7 :GENES (251 195 21 3 3 10 24 202))
#S(ANIMAL :X 88 :Y 4 :ENERGY 73 :DIR 3 :GENES (251 196 20 2 3 18 27 197))
#S(ANIMAL :X 22 :Y 26 :ENERGY 55 :DIR 0 :GENES (251 195 21 3 3 10 24 202))
#S(ANIMAL :X 85 :Y 7 :ENERGY 125 :DIR 0 :GENES (251 195 22 3 3 9 24 201))
#S(ANIMAL :X 36 :Y 7 :ENERGY 9 :DIR 7 :GENES (251 195 21 3 3 10 24 202))
#S(ANIMAL :X 74 :Y 27 :ENERGY 35 :DIR 0 :GENES (251 195 22 3 3 8 24 201))
#S(ANIMAL :X 8 :Y 25 :ENERGY 123 :DIR 1 :GENES (251 197 20 1 4 19 27 198))
#S(ANIMAL :X 39 :Y 26 :ENERGY 43 :DIR 6 :GENES (251 195 21 3 2 9 24 203))
#S(ANIMAL :X 97 :Y 14 :ENERGY 66 :DIR 3 :GENES (251 194 21 3 3 10 24 202))
#S(ANIMAL :X 56 :Y 26 :ENERGY 168 :DIR 4 :GENES (251 195 21 3 3 10 24 202))
#S(ANIMAL :X 53 :Y 22 :ENERGY 87 :DIR 4 :GENES (251 195 22 3 3 9 24 201))
#S(ANIMAL :X 76 :Y 12 :ENERGY 14 :DIR 3 :GENES (251 196 20 2 3 18 27 198))
#S(ANIMAL :X 5 :Y 9 :ENERGY 45 :DIR 1 :GENES (251 195 22 3 3 9 24 201))
#S(ANIMAL :X 56 :Y 0 :ENERGY 61 :DIR 7 :GENES (251 196 22 3 3 9 24 202))
#S(ANIMAL :X 25 :Y 23 :ENERGY 142 :DIR 3 :GENES (251 195 22 3 3 8 24 202))
#S(ANIMAL :X 98 :Y 20 :ENERGY 86 :DIR 0 :GENES (251 195 21 3 3 10 24 202))
#S(ANIMAL :X 16 :Y 27 :ENERGY 110 :DIR 6 :GENES (252 194 21 3 3 10 24 202))
#S(ANIMAL :X 4 :Y 12 :ENERGY 164 :DIR 5 :GENES (252 194 23 8 3 11 27 205))
#S(ANIMAL :X 1 :Y 5 :ENERGY 163 :DIR 0 :GENES (252 194 22 3 3 9 24 200))
#S(ANIMAL :X 95 :Y 9 :ENERGY 42 :DIR 3 :GENES (252 194 22 3 3 9 24 201))
#S(ANIMAL :X 49 :Y 26 :ENERGY 83 :DIR 3 :GENES (252 194 22 3 3 9 24 201))
#S(ANIMAL :X 24 :Y 19 :ENERGY 30 :DIR 5 :GENES (252 195 21 3 3 10 24 202))
#S(ANIMAL :X 19 :Y 4 :ENERGY 84 :DIR 6 :GENES (252 195 23 8 3 11 27 205))
#S(ANIMAL :X 49 :Y 26 :ENERGY 32 :DIR 7 :GENES (252 195 23 8 3 12 26 205))
#S(ANIMAL :X 13 :Y 23 :ENERGY 26 :DIR 5 :GENES (252 195 21 5 3 8 24 204))
#S(ANIMAL :X 72 :Y 18 :ENERGY 98 :DIR 6 :GENES (253 195 21 5 2 8 23 205))
#S(ANIMAL :X 84 :Y 3 :ENERGY 94 :DIR 0 :GENES (253 196 21 5 3 7 23 205))
#S(ANIMAL :X 5 :Y 26 :ENERGY 84 :DIR 6 :GENES (253 195 21 5 4 8 23 205))
#S(ANIMAL :X 72 :Y 18 :ENERGY 98 :DIR 5 :GENES (253 195 21 5 2 8 23 205))
#S(ANIMAL :X 85 :Y 7 :ENERGY 94 :DIR 3 :GENES (253 195 21 5 3 7 23 205))
#S(ANIMAL :X 88 :Y 20 :ENERGY 9 :DIR 2 :GENES (253 195 21 4 3 8 23 205))
#S(ANIMAL :X 33 :Y 9 :ENERGY 67 :DIR 7 :GENES (253 195 21 5 2 8 23 205))
#S(ANIMAL :X 69 :Y 22 :ENERGY 37 :DIR 2 :GENES (253 196 20 4 3 8 25 201))
#S(ANIMAL :X 34 :Y 24 :ENERGY 69 :DIR 0 :GENES (253 196 21 4 2 8 24 202))
#S(ANIMAL :X 89 :Y 15 :ENERGY 117 :DIR 1 :GENES (253 196 20 4 3 8 25 201))
#S(ANIMAL :X 12 :Y 28 :ENERGY 84 :DIR 2 :GENES (253 195 21 5 3 8 23 205))
#S(ANIMAL :X 69 :Y 4 :ENERGY 89 :DIR 2 :GENES (253 195 21 4 3 8 23 205))
#S(ANIMAL :X 79 :Y 2 :ENERGY 38 :DIR 4 :GENES (253 195 21 5 2 8 23 205))
#S(ANIMAL :X 78 :Y 23 :ENERGY 104 :DIR 7 :GENES (254 197 21 4 3 8 26 202))
#S(ANIMAL :X 21 :Y 26 :ENERGY 71 :DIR 6 :GENES (254 196 21 4 2 8 25 202))
#S(ANIMAL :X 72 :Y 26 :ENERGY 104 :DIR 0 :GENES (254 196 21 4 3 8 26 202))
#S(ANIMAL :X 60 :Y 11 :ENERGY 168 :DIR 4 :GENES (254 195 24 5 3 13 24 205))
#S(ANIMAL :X 89 :Y 23 :ENERGY 11 :DIR 6 :GENES (254 196 21 4 3 8 25 202))
#S(ANIMAL :X 80 :Y 21 :ENERGY 61 :DIR 7 :GENES (254 195 23 5 2 13 24 205))
#S(ANIMAL :X 68 :Y 9 :ENERGY 37 :DIR 2 :GENES (254 196 21 4 3 8 24 202))
#S(ANIMAL :X 36 :Y 2 :ENERGY 71 :DIR 3 :GENES (254 196 21 4 3 8 25 202))
#S(ANIMAL :X 87 :Y 13 :ENERGY 64 :DIR 5 :GENES (254 195 21 4 3 8 26 202))
#S(ANIMAL :X 78 :Y 18 :ENERGY 78 :DIR 2 :GENES (254 196 21 4 3 8 25 202))
#S(ANIMAL :X 51 :Y 2 :ENERGY 91 :DIR 6 :GENES (254 196 21 4 3 8 26 202))
#S(ANIMAL :X 90 :Y 13 :ENERGY 56 :DIR 1 :GENES (254 196 21 4 3 8 25 202))
#S(ANIMAL :X 76 :Y 24 :ENERGY 74 :DIR 6 :GENES (254 194 23 6 3 13 23 206))
#S(ANIMAL :X 28 :Y 14 :ENERGY 68 :DIR 3 :GENES (254 195 23 4 2 12 24 205))
#S(ANIMAL :X 68 :Y 7 :ENERGY 68 :DIR 3 :GENES (254 195 23 4 2 12 24 205))
#S(ANIMAL :X 1 :Y 3 :ENERGY 61 :DIR 6 :GENES (254 195 23 5 2 12 24 205))
#S(ANIMAL :X 16 :Y 12 :ENERGY 93 :DIR 7 :GENES (255 195 23 5 3 12 24 205))
#S(ANIMAL :X 30 :Y 10 :ENERGY 116 :DIR 3 :GENES (255 195 23 5 3 12 24 205))
#S(ANIMAL :X 52 :Y 23 :ENERGY 102 :DIR 6 :GENES (255 195 23 5 3 12 24 205))
#S(ANIMAL :X 81 :Y 8 :ENERGY 52 :DIR 4 :GENES (255 195 23 5 3 13 24 205))
#S(ANIMAL :X 86 :Y 17 :ENERGY 9 :DIR 5 :GENES (255 195 23 5 2 13 24 205))
#S(ANIMAL :X 79 :Y 18 :ENERGY 52 :DIR 0 :GENES (255 195 24 5 3 13 24 205))
#S(ANIMAL :X 11 :Y 17 :ENERGY 87 :DIR 6 :GENES (255 195 23 5 3 12 24 205))
#S(ANIMAL :X 9 :Y 6 :ENERGY 74 :DIR 3 :GENES (255 195 23 5 3 12 24 205))
#S(ANIMAL :X 20 :Y 13 :ENERGY 93 :DIR 0 :GENES (255 195 23 5 3 12 24 205))
#S(ANIMAL :X 32 :Y 22 :ENERGY 89 :DIR 0 :GENES (255 195 23 5 3 13 24 205))
#S(ANIMAL :X 51 :Y 5 :ENERGY 102 :DIR 6 :GENES (255 195 23 5 3 12 24 205))
#S(ANIMAL :X 42 :Y 16 :ENERGY 115 :DIR 4 :GENES (255 195 23 5 3 12 24 205)))


本文にも書かれている通り、2つのグループに真っ二つに割れていますね。それぞれの特徴は以下のようになります。

* 1つ目のグループ: GENES の2番目の要素 (ゼロ番から数えて) が突出して高い。
* 2つ目のグループ: GENES の0, 1, 8番目の要素が突出して高い。

この GENES の偏りが行動 (現在位置) にどう影響するのか調べてみました。

; グループ分けするヘルパー関数
(defun group1 ()
(remove-if (lambda (x)
(< (nth 2 (animal-genes x)) 200))
*animals*))

(defun group2 ()
(set-difference *animals* (group1)))

; サマリー
; 座標10ポイントごとに何匹の動物がいるかカウントする
(defun summary (lst categories sunk)
(let ((result (make-array categories))
(pos (mapcar sunk lst)))
(loop for i below categories
do (setf (aref result i)
(count-if (lambda (x) (multiple-value-bind (q)
(truncate x 10)
(equal q i)))
pos)))
result))

> (summary (group1) 10 (lambda (e) (animal-x e)))
#(0 0 1 4 36 37 2 0 0 0)
> (summary (group1) 3 (lambda (e) (animal-y e)))
#(12 55 13)

> (summary (group2) 10 (lambda (e) (animal-x e)))
#(8 6 8 9 9 7 6 11 14 6)
> (summary (group2) 3 (lambda (e) (animal-y e)))
#(29 24 31)


現在位置の分布もグループ1, 2ではっきりと分かれています。グループ1は明らかにマップ中央に集中している一方、グループ2はマップ全体にまんべんなく散らばっています。なので、本文内での「ゾウ」はブループ1, 「ロバ」はグループ2ということになりますね。

ということで、Land of Lisp 10章「loop マクロ」の結果を振り返ってみました(゚∀゚)

Land of Lisp 8章「ワンプス狩り」での無限ループしそうなコード( ・ω・)

Land of Lisp を読んでいるのですが、8章「ワンプス狩り」の find-empty-node がかなりナイーブな実装になっていて、ともすれば無限ループするんじゃないか?と思ったので改良してみました( ・ω・)

; before
(defun find-empty-node ()
(let ((x (random-node)))
(if (cdr (assoc x *congestion-city-nodes*))
(find-empty-node)
x)))


ランダムにノードを選んで空ではなかったらもう一度ランダムに…という流れなのですが、そもそも find-empty-node が2つの責務…「空のノードを探す」「(空の) ノードはランダムであること」を持っているのも関係しているかもしれませんね。

なので、

; after
(defun find-empty-node ()
(let ((empty-nodes (find-empty-nodes)))
(car (elt empty-nodes (random (length empty-nodes))))))

(defun find-empty-nodes ()
(remove-if (lambda (x)
(cdr x))
*congestion-city-nodes*))


空の全ノードを探す find-empty-nodes と、そこからランダムにノードを選択する find-empty-node の2つに分けてみました。

まあ、元の実装でもいつかは終わるんじゃないかとは思いますが、少しもんにょりしたので(;´∀`)

冊数を稼ぐための本を買ってみました(゚∀゚)

2016042801


なかなか読了数が伸びないので、サクッと読めそうな本を購入してみました。業界は違いますし技術本ってわけでもないけど、とりあえずコミックではないので技術本カテゴリーでカウントします(;・∀・)

カラー図解でわかる航空管制「超」入門

192ページ。ペラいです。しかも文字めっちゃ大きいです。

くらべてわかる航空管制

272ページ。ペラいです。しかも文字大きいです。

航空無線ハンドブック 2016

126ページ。ペラいです。しかも絵や図ばっかりです。

とりあえず、航空管制のほうが面白そうなので先に読みそうです。無線のほうは…読んだら昨年の無線への情熱 (?) が少しは戻るかなーなんて思って買ってみました。でも、このまま放っておく可能性もないとはいいきれませんが(;・∀・)

とりあえず、息抜きがてら読もうと思います。

----

今は2冊を並行で読み進めるスタイルで読んでいます。1冊は写経しながら自宅で読むスタイルで、平日帰宅後に細々と読んでいます。でも、内容が難しい上にそれなりに分厚いのでなかなか進みません。もう1冊は通勤途中に読んでいて、こちらは基本的に写経スタイルが不要なものを読んでいます。持ち運ぶ都合上、どうしてもページ数が少ないもの (概ね300ページ以下) を選んでしまう傾向があるようで、やはりこちらのほうが読み進める速度が速いです。

1冊 / 月くらいでもいいから本は読みたいですよね。まったく読まない人と比べたら、5年で60冊もの差がつきます。地頭が良ければ60冊くらいは半年や1年で読めるのでしょうけれども、自分のように地頭がない場合はそんな風に一気に挽回できません。なので、歩みは遅くとも、日々確実に前に進むしかないのです(`・ω・´)

2015 年に読んだ本を一気振り返り!(`・ω・´)

2011 年に読んだ本を一気振り返り!(`・ω・´)
2012 年に読んだ本を一気振り返り!(`・ω・´)
2013 年に読んだ本を一気振り返り!(`・ω・´)
2014 年に読んだ本を一気振り返り!(`・ω・´)

達人プログラマー にならったわけではないのですが、なんだかんだで1ヶ月あたり1冊以上のペースで本を読んでいます…という出だしは例年と同じで、主な読書シチュエーションも同じく通勤時間でした。まあ大概が例年と同じなのですが、今年は小説をそれなりに読んだりしたのが違いといえば違いでしょうか (技術系にまったく関係ない小説はリストアップしないけど)

ということで、今年読んだ本を感想とともに振り返ってみたいと思います。一応ジャンル分けしてみましたが、複数のジャンルに属するような本もありますし、いわゆる世間的なジャンル分けとは違うかもしれません(;´∀`)

文章技術
--------
2015122101

数学文章作法 基礎編

著者の結城浩さんの文章作成技術エッセンスが詰まった一冊 (再読)

2015122102

数学文章作法 推敲編

人に読んでもらいたい文章を書くときに非常に役立ちます。理系文系問わず超オススメ。

科学読物
--------
2015122103

フェルマーの最終定理

誰でも理解できる簡単な命題なのに、証明されるまで400年もかかった世界一有名な定理であるフェルマーの最終定理 (予想) …超難問に挑む数学者たちに速攻で引き込まれます。特にクライマックスに向けての盛り上がり具合は異常なほど。娯楽としても超一級品な一冊ですが、小学生か中学生の頃に読んでいたら確実に数学が好きになります。

2015122104

暗号解読

「フェルマーの最終定理」と同じ著者による一冊。こちらは暗号とその解読をテーマに書かれていて、古来の暗号から現代の最新暗号、そして未来の暗号技術について書かれています。こちらも抜群に面白くて、ページを読み進めるたびに「お、今度はこの解読プログラム書いてみよう!」となりました。娯楽としても素晴らしいです。

2015122105

代替医療解剖

整体で首ボキされて速攻で購読した本です。こちらも「フェルマーの最終定理」と同じ著者による一冊で、鍼やホメオパシー、カイロプラクティック、ハーブ療法などの誰でも知っている代替医療からマイナーな代替医療まで、その真実を大胆かつ綿密な裏付けと共に明らかにしていきます。知人や有名人がイイと言ってるから…テレビや新聞で広告をよく見るから…代替医療は無意識のうちに身近に入り込んできます。その代替医療を利用するかどうか、それを判断するための知識を得られます。きっかけが残念な感じですが、得られたものは大きかったです。

2015122106

哲学的な何か、あと数学とか

誤解を恐れずに言うなら フェルマーの最終定理 の劣化インスパイア本といったところです。フェルマーの最終定理 を読んでいなかったらともかく、一度でも読んだ身としてはまったくオススメできない一冊です。

開発エッセー
------------
2015122107

伽藍とバザール

The Cathedral and the Bazaar: Japanese の書籍版。従来の開発方式…たぶん GNU. プロプライエタリ・ソフトウェアは主対象ではないと思う…に対して Linux カーネルの開発手法を「バザール方式」として紹介し、それがなぜ成功したのか・どうやって成功したのか・成功する条件はなにか・何に向いているのかが解説されています。自分は書籍版の味わいが好きですが由来に従ってネットで読むほうが雰囲気を感じられるかもしれません。また、蛇足ですが邦訳名はダイレクトに「カテドラルとバザール」で良かったのでは?という意見には自分も賛成です。

2015122109

プログラミングでメシが食えるか!?

こちらは文字通りのエッセーです。いろいろとためになることが書いてあるのですが、今となっては古い…というかあまり良くない記述もあります (「コンパイラの最適化に頼るな」とか) エッセーとして楽しむならアリかなと思いますが、積極的にはオススメできないですね。

管理・プロジェクト
------------------
2015122110

ピープルウエア

プロジェクト管理の大家であるトム・デマルコの著で、プロジェクトに従事する人間や環境についてフォーカスしています。ブルックスの 人月の神話 と並んで「読んでないマネージャーはモグリ」と言われるほどのド定番本ですね。ただ、現実には名前すら知らないマネージャーが支配的に多いのが残念なところでしょうか。もちろん未読でも素晴らしいマネージャーは間違いなくいます。ただ、本当にごく一握りしかいないというのが率直な感想です。役に立たない担当者は役に立たないだけですが、役に立たないマネージャーは害悪ですらあります。それが流動性が高く様々な外的要因に左右されるソフトウェア開発プロジェクトであればなおさらです。

2015122111

熊とワルツを - リスクを愉しむプロジェクト管理

こちらもトム・デマルコの著です。技術者を名乗る職種の人は「俺のプログラムにバグなどない( ー`дー´)キリッ」という気質の人が多い (単に技術…知識がないだけかも) と思いますが、マネージャーや経営層もあまり変わらないのかもしれません。感覚としてはむしろ上層部に近づくにつれてリスクを見ない人が多いのでは?という気もします。なにより、いざリスクが現実になったときのダメージは上層部に近づくにつれて指数関数的に増えますからね。ただ、担当者レベルでリスク管理することにより多少なりともダメージを減らすことは可能なので、やはり読んでおきたいところです。今までリスク意識を持たなかった人が意識できるようになるだけでも、この本を読む価値があります。

チームリーダー「おそらく1月は無理です」
↓
プロジェクトマネージャー「正直言って1月では不安です」
↓
アプリケーションマネージャー「1月というのは難題だとは思いますが……」
↓
CIO「1月には間に合うと自信をもってご報告できます」

(アドレナリンジャンキー 「ニュースの改良」)

2015122112

アドレナリンジャンキー

こちらもトム・デマルコの著で、プロジェクトにまつわる様々なパターンをジョークや皮肉を絡めながら紹介しています。「あるある」と思わず苦笑してしまうものから「思い出したくもない…」と胃が痛くなるものまで、プロジェクトにありがちなパターンだらけです。非常に読みやすい上に「日常業務で心当たりがある」という点で、デマルコ本に手を出す一冊目として最適かもしれません。良いパターンは採用・より促進を、悪いパターンは改善を。

Java
----
2015122113

Javaによる関数型プログラミング

Java 8 で導入されたラムダ式を始めとする関数型プログラミングの解説本。関数型言語の経験がない Java プログラマーが Java 8 を触ったときに最も戸惑うのは間違いなくラムダ式なので、Java での関数型プログラミング入門の一冊として良いと思います。ページ数も200ちょいと非常にボリュームが少ないので気軽に読めます。

2015122114

Javaプログラマーなら習得しておきたい Java SE 8 実践プログラミング

Java 8 の解説本。SE にまつわる話題を取り扱っているということで「Java SE 8 〜」というタイトルなのでしょうが、SE は他のエディションの基本となるエディションなので Java プログラマーなら必読でしょう。Java 8 の新機能についてまんべんなく解説されています。

2015122115

Java エンジニア養成読本

初めて Java を触るという新人から、何となく使ってきたけどよく分かってないかも…という人まで、Java にまつわる知識を非常に幅広く得られます。個人的には巻頭記事の「誰も教えてくれない Java の世界」が良かったです。自分が Java を使い始めてから日が浅いだけでなく明らかに「XML プログラミング」に偏っていたので、Java の歴史やエコシステム、コミュニティについての概観を得られたの収穫でした。

2015122116

Java ネットワークプログラミングの真髄

今年読んだ Java 本では間違いなくベスト、既読の Java 本のなかでも Java 並行処理プログラミング と並んで珠玉の一冊だと思います。Java のソケット API と TCP / IP のセマンティクスの違いが事細かに解説されており、実践に基づく解説が非常に分かりやすいです。

業務で見かける Java のネットワークプログラミングコードは非常に残念なものが多いのが現実です。業務での Java コード自体が残念という声もありますが、ネットワークに関わるコードはさらにさらに残念です (非同期処理ワカラン」や「TCP / IP ワカラン」が相乗効果を及ぼしている気がする) Java は高度なネットワークライブラリが充実していますが、実際にネットワークプログラミングする場合、基本を理解しているかどうかで性能や安定性、拡張性、保守性には雲泥の差が生じます。Java でネットワークプログラミングするなら必読です。

開発手法・パターン
------------------
2015122117

ドメイン特化言語

DSL にまつわるパターン本。マーチン・ファウラー氏の著作にもれずパターンの抽出が秀逸で、メリット / デメリットやコストパフォーマンスまで、使いどころから実装まで非常に分かりやすいです。ソフトウェア開発では多かれ少なかれ DSL を作ると思いますが (そうじゃない現場も多いが)、その際に「ここはこれでいこう」とパターンを適用できるようになるのが素晴らしいです。この本を読んでから、DSL の導入 (あるいは不導入) はもちろん「どこまでやるか?」についての気付きが明らかに増えたのを感じます。

2015122108

情熱プログラマー

プログラマーに限らずいわゆる SE (日本的な「システムエンジニア」) 的な職種に就いている人にありがちな悩みや問題を取り上げ、それを乗り越えるアプローチを紹介しています。この類の本はいろいろあるのですが (古典なら 達人プログラマー とか)、技術的な内容はほとんど書かれておらずページ数も200ページ未満と非常に少ないので、サラッと読めるのが良いです。この本を読んで感じることがあれば、同じ類の本、さらには技術本の定期読書に進んでいくのがベターです。まあ、この本を読んで感じるところがある人は、もともとそういう本を読んでいるでしょうが。

2015122118

アプレンティスシップ・パターン

こちらも「どうやって達人に近づくか」「技術職として何を目指すか」といった疑問に対する解答がパターンで示されています。このあたりの本を読むような人は多かれ少なかれ実践しているでしょうし、心当たりがあるパターンも多いと思います。「情熱プログラマー」が技術職としての生き方や基盤にフォーカスしているのに対して、より成長戦略にフォーカスしています。

2015122119

Gradle 徹底入門

ビルドツールである Gradle についての解説本。Gradle は公式ドキュメントが非常に充実しているのですが、書籍の形では体系的に学ぶことができるのが非常に大きなメリットですね。プロジェクトでは Ant を使ってるけどオレオレ環境では Gradle を導入 (入門) したい…と考えている人にはぴったりだと思います。

2015122120

ユースケース駆動開発実践ガイド

〜駆動開発という言葉は数多いですが、その中でも目立って毛色が違います。形式主義に陥ったドキュメント重視戦略とは一線を画していますが、ドキュメントよりもコードに重きを置く XP に対して批判的な論調であったりと、実践知識以外も楽しんで (?) 読めました。個人的にはぜひトライしてみたいですが、現場への導入は他の開発プロセス・手法に比べても難しいかなあ…というところなのですけどね。

2015122121

マスタリング TCP/IP 応用編

マスタリング TCP / IP シリーズの応用編。同シリーズの入門編に続いて読むのにベターですが、後半のプロトコル解説での FTP や telnet, rlogin あたりはさすがに時代を感じますね。このあたりは読まない / パラ見するくらいで良いと思います。マスタリング TCP / IP シリーズは入門編の出来が良すぎますね。

テスト
------
2015122122

実践 JUnit

JUnit を利用した Java のテスト駆動開発実践入門。なのですが、Java や JUnit に関係なくユニットテストの入門書としておすすめです。簡潔で回りくどさや余計な説明がなく、入門書としての最適だと思います。JUnit 4 をベースにしていますが、Rule や TestRunner といった構成要素についての解説は必要最小限に留められている印象です。Rule や TestRunner を利用した拡張方法については JUnit 実践入門 のほうが詳しいので、もう一歩踏み込みたい場合は合わせて読むと良いと思います。

2015122123

実践テスト駆動開発

Java (と jMock) を利用したテスト駆動開発の実践入門書。インプットに対してのアウトプットを検証するのはもちろんですが、オブジェクト間のコラボレーションを検証したり最初から統合テストを書いていたり、テスト駆動開発にとどまらず振る舞い駆動開発っぽい雰囲気もあります。jMock の威力なのかもしれませんが、Java でここまでできるんだなあ…というインパクトがありましたね。このレベルのテストはなかなか導入しづらさもあり、それだけに折にふれて読み返したいと思っています。

2015122124

システムテスト自動化 標準ガイド

これを他のテストレベル (特にユニットテスト) と同じカテゴリーに置くとテスト界隈の怖い人たちが反応しそうですが、とりあえず置いておきます。さて、自分は基本的にはシステムテストを自動化したほうが良いと考えています。というのは、業務システムの多くは「自動化に必要なコスト < 自動化しないことにより発生するコスト」であるからです。この本ではそういったコストの計算方法やテスト自動化による恩恵の定量的な求め方が紹介されており、とかくソフトウェア開発のアキレス腱になりがちなシステムテスト全域をカバーする内容になっています。

哲学・思想
----------
2015122125

禅とオートバイ修理技術

エッセーなのですが哲学っぽくもあるノンフィクション小説。技術的な内容、特にソフトウェア開発的な内容は皆無ですが、技術職にある人はこころ動かされるのではないでしょうか。形而上学的な空気が作品全体を覆っていて、なんともいえない雰囲気を醸し出しています。

2015122126

マインドフル・ワーク

マインドフルネス…いまや Apple, Adobe, Cisco, Facebook, Google, Intel, Twitter, LinkedIn といった世界的な企業が導入しているもの…ありていに言うなら「精神的なエクササイズ」といった感じ…その現場で何が起こっているのかのルポです。「いったいどんなものなんだ?」と読み始めたのですが、そのうち「たまたまフィットしたか偶然じゃないのか」と思うようになり、最後には「例外もあるが多くの場合においてマインドフルネスは (企業活動に) 有効である」と思うようになりました。マインドフルネスを企業活動を始めとする色々なことに結びつけることは「マクマインドフルネス (マインドフルネスのマクドナルド化)」として批判する向きもあるのですが、それが人のためになるなら (ちゃんと効果もあるなら) いいんじゃないかなあと思います。

2015122127

マインドフルネスストレス低減法

マインドフル・ワーク を読んで、その実践の1つであるマインドフルネスストレス軽減法 (もともとの由来である仏教色をのぞいたもの) を試してみたくて手に取りました。実践自体は10月下旬からトレーニングを始めてちょうど先日終わったところなのですが、結果から言うと始めて本当に良かったです。一言で言うと自分が一番欲しかったものはこれだった、という感じ…と言うと怪しい感じがすごいのですが、まさにそうなのですよね。社会人になって仕事と効率を最重要視しているうちにいつの間にか手元から無くしてしまったもの、それに気がつけただけでも始めた甲斐があったと思っています。

今年も本当に多くの本と出会えましたが、そのなかでもダントツに「会えて・読めて良かった!」のは間違いなくこちらです。よって、2015年の Book of the Year には マインドフルネスストレス低減法 を選びたいと思います!(゚∀゚)

以上、2015年に読んだ本の振り返りでした。
素晴らしい本との出会いに感謝すると共に、2016年も素敵な本と出会えることを願ってやみません(〃▽〃)

シンタックスハイライトされなくなっていたのを修正しました。

※※このエントリは以下エントリの修正版になります※※
google-code-prettify を導入してみました。

2015080401


JavaScriptライブラリのホスティングについて

これまでjQueryなどのJavaScriptライブラリをlivedoor Blogのサーバーで提供しておりましたが、こちらの運用を停止させて頂きます。

今後はGoogle社などのホスティングサービスのご利用をおすすめいたします。

JavaScriptライブラリのホスティングについて - livedoor Blog ヘルプセンター

いつの間にか jQuery も google-code-prettify もホスティングサービスが終わっていたようなので (年レベル?)、ホスティング先を変更しました。
また、いつのまにか「カスタムJS」という機能が追加されているようなので、面倒くさいブログパーツは使わないようにします。

手順
====
1. 以前の作業を全て取り消す
2. カスタムJSを設定する

1. 以前の作業を全て取り消す
===========================
google-code-prettify を導入してみました。

上記エントリの作業を行っている場合は以下を削除します。JavaScript のほうはブログパーツごと削除します。

* ハイライト用の CSS
* ハイライト用の JavaScript (jQuery, google-code-prettify)

残しておいても何も起こらないので、必ずしも消す必要はありません。
でも、残しておく意味はまったくないので消しましょう。

2. カスタムJSを設定する
=======================
管理画面から、マイページ -> ブログ設定 -> カスタムJS -> body内とクリックし、テキストボックスに以下を入力します。
入力し終わったら「保存する」ボタンをクリックして変更を保存します。
run_prettify.js で skin=sunburst している箇所は自分の好みですので、 google/code-prettify のスキンギャラリーでスキンを探すなり自分のお好みにカスタマイズすると良いと思います。

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<script type="text/javascript" src="https://cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js?skin=sunburst"></script>

<script type="text/javascript">
$('pre').addClass('prettyprint');
</script>


addClass() している箇所は pre タグと code タグのどちらでも構わないので、使っているほうを指定します。
これで修正作業は終わりです。

めっちゃ簡単ですね!(・∀・)

----

参考にしたページ
================
a. jQuery
b. google-code-prettify

a. jQuery
---------
Hosted Libraries | Hosted Libraries | Google Developers

jQuery ってもうオワコンなんですかね?つい使っちゃいましたけど…

b. google-code-prettify
-----------------------
google/code-prettify GitHub

Google Code がサービスを終了するのに伴って Github に移動しています。
Google Code のほうにも書いてありますが、コードハイライトするタイミングや方法、CSS のカスタマイズの方法、言語指定のヒント (ある程度は自動判別してくれるので自分は使っていないけど) が参考になります。
とても簡単なので、さらりと目を通すといいかもしれません(・∀・)

ATOK が英単語入力後の自動スペース挿入機能を追加しましたね(・∀・)

・「英語自動スペース入力」設定を追加しました。
 オンにすると英文入力時に単語の確定で自動的にスペースを挿入します。
・その他不具合修正を行いました。


iTunes の App Store で配信中の iPhone、iPod touch、iPad 用 ATOK for iOS -日本語入力キーボード

iOS 参入時の評価は散々でしたが、その後は着々と改良を進めて他デバイスと同様の高い評価を獲得しつつある ATOK for iOS.
その ATOK が7/26のアップデート (version 1.4.3) で「英語自動スペース入力」機能を追加しました。英語自動スペース入力(゚∀゚)キター!!

…といっても、英文入力時の単語確定で自動でスペースを挿入してくれるだけです。
え、それだけ?という感じですが、使ってみるとかなり便利なのですよね。
何が便利って、単語と単語の間でわざわざ自分でスペース打つとかいう、めっちゃ単調かつ面倒な作業をしなくて済むようになるのですよ。
今までは「文字」を入力していたのが「単語」ひいては「文」を入力するようになった、これは小さなようでいて大きな機能追加です(・∀・)

でもまあ、Android 版では最初期から使えたような気がするので、iOS 版のほうは「なんで今頃…」という気がしないでもありません。
個人的には擬似インライン入力とかいう使えない機能に開発リソースを割くくらいなら、もっと早くにこういう堅実かつ実用性の高い機能をサポートして欲しかったですね(;´∀`)

さて。実際に英語自動スペース入力を使ってみます。

2015072901


設定は ATOK の設定アプリを起動して「英語自動スペース入力」をオンにするだけ。
ということで、実際に使ってみます(・∀・)

2015072902


なにか適当に入力して単語を確定すると、勝手にスペースが入力されます。
今までは空白をタップするたびに「面倒くさいなー('A`)」思っていたのは過去の話です(゚∀゚)
単語と単語の間に勝手に空白を挿入してくれるので、シームレスに文を入力する感覚が出てきます。

よく英文を書くという人にはとても便利な機能な機能だと思います(・∀・)

Pocket のテキスト読み上げ機能がいい感じです(゚∀゚)

後で読む系のサービスで Pocket を使っています。
まだ Read It Later という名前だった頃から使っているのですが、厳選された機能の完成度の高さや直感的な UI がとても素晴らしいです(・∀・)

今はもっぱら iOS 版を使っているのですが、本日のバージョン5.6.7へのアップデートでテキスト読み上げ機能が追加されました。
さっそく使ってみたところなかなかいい感じだったので、メモっておきます(゚∀゚)

2015071601


まずは普通に記事を開いて、右下の「…」をタップします。

2015071602


続いて「聞く (TTS)」をタップすると、テキスト読み上げが始まります。
読み上げはバックグラウンドでも実行されるので、読み上げ中に LINE やメールが来てもそのまま作業することができます。

2015071603


読み上げ箇所がハイライト表示されるので、どこを読んでいるのかすぐ分かります。
また、読み上げ中は自動でスクロールしてくれるのも便利です。

2015071604


読み上げを一時停止したり、段落を進んだり戻ったりもできます。

2015071605


読み上げの速さを調整できるので、好みの速さで聞くことができます。
最速でも十分に聞き取れますが、自分は普通くらいの速度が一番心地よく聞けますね。
ちなみに、一番遅くすると夜眠れないときにいいかもしれません(*´∀`)

2015071606


「…」をタップすると通常のメニューを表示します。

2015071607


「×」をタップで読み上げを終了します。

記事ビューでしか使えないなどの制限もありますが Pocket で読むときは大概が記事ビューですし、これはまったく気にならないと思います。
そもそもウェブビューで読みたいときは、オリジナルの記事をしっかりと読みたいときでしょうしね。

ということで、Pocket のテキスト読み上げ機能がとってもいい感じです(゚∀゚)

2014 年に読んだ本を一気振り返り!(`・ω・´)

2011 年に読んだ本を一気振り返り!(`・ω・´)
2012 年に読んだ本を一気振り返り!(`・ω・´)
2013 年に読んだ本を一気振り返り!(`・ω・´)

達人プログラマー にならったとかそういうわけではないとか言いつつ、なんだかんだで1ヶ月あたり1冊以上のペースで本を読んでいます。
2014年も前年と変わらず非常に仕事が忙しい1年だったのですが、主に通勤時間に本を読んでいました。

ということで、今年読んだ本をさっくり感想とともに振り返ってみたいと思います(・∀・)

2015012101

「プログラミングの基礎」読み終わりました。

2014年の Book of the Year はこちらです!(゜∀゜)
タイトルにプログラミングの「基礎」とついていますが、体感的には「基礎の基礎」というくらい、基礎に力が入れられた本です。

基礎の上に応用があるので、基礎は非常に重要なことです。
しかし、一日の大半が Excel と XML の編集に消えていくような仕事をずーっと続けているうちに、その大事なことがいつの間にか揺らいでいるような感覚を感じていました。
結果的にはその感覚は気のせいではなかったのですが、この本のおかげで再び基礎を固める方向に進み始めています。

2015012102

「数学文章作法 基礎編」読み終わりました。

「文章を書く」という技術について考えるきっかけになった本です。
著者の結城浩さんといえば、とても分かりやすい本を書くことで知られています。
当然のようにこの本もとても分かりやすいのですが、本の中で書かれていることが本自体でも実践されていて、読んでいてメタな楽しみがありました。

文章全般を書く時に役立ちますが、特に技術文書に向いていると思います。
読後は仕事でもドキュメント作成に前向きになりました。

2015012103

「最短経路の本 レナのふしぎな数学の旅」読み終わりました。

数学の本なのに、数式らしい数式がほとんど出てこないという不思議な本です。
でも、それでいて基本的なグラフ理論が分かってしまうというすさまじい本です。
数学以外のところのセンスが20年ほど逆行しているのが気になりますが、序盤でダイクストラのアルゴリズムに触れるのを皮切りに、オイラー路やハミルトン路へと発展していくうちに全く気にならなくなります。

読後は何でもかんでもグラフに見えてくるようになりました…

2015012104

「フォントのふしぎ」読み終わりました。

フォントの持つ力ってすごいな、そう気付かされた本です。
フォントの持つ力というのは誰もが経験していることですが、それに気が付くことができ、そしてなぜそのような力があるのかを知ることができました。
それと同時に、フォントデザイナーって本当にすごいなー!と思わされましたね。

計算し尽くされた、きれいな写真とたくさんのフォントが本当に素敵です。
一度読んだ後はボーっと眺めているだけでも癒されます。

2015012105

「ITエンジニアのゼロから始める英語勉強法」読み終わりました。

勉強法というか著者の体験と振り返りが役立つ本です。
というよりも、英語の勉強法として目新しいことはほとんど書かれていません。
ですが、二大勢力ともいえる既存の勉強法を軸にして、それを補完する勉強法の紹介は「まともにやったことないけど英語が苦手」な自分にとっては「これなら手段として採用できるし、最低ライン以上の結果を得られるかも」という気持ちにさせてくれました。

結果的には公私の忙しさから頓挫してしまったのですが、その手応えは今年に持ち越されています。

2015012106

「プログラマのための文字コード技術入門」読み終わりました。

文字コードの知識を体系的に学べる良書です。
読み始めて早々に文字集合、符号化文字集合、符号位置、符号化方式といった基本となる概念の定義をしっかりと学ぶことができます。
これは、文字コードについて考えるためのスタートラインに立った言えるでしょう。

日本人としてコンピューターに関わる以上、文字コードというものと無縁でいられるわけがありません。
そんな文字コードについてのモヤモヤを取り払ってくれた本でした。

2015012107

「継続的インテグレーション入門」読み終わりました。

今ひとつ使いこなせていない CI から一層の恩恵を得るために手に取りました。
結論から言うと、すでに目的の半分以上は達成できたので、読んだ価値は十分ありました。

「CI の原則と基本が良く分かっていない」そんな状態の自分にはぴったりの一冊でした。
でも、読後は『継続的デリバリー』が読みたくなるという罠がありましたね。

2015012108

「マスタリング TCP / IP 入門編」読み終わりました。

TCP / IP について幅広く奥深く学べる良書です。
とはいっても TCP / IP の技術は非常に広範囲に渡るので、実際には幅は十分ではなく奥深さも足りないのですが、実務に臨むうえで必要最小限の知識がバランスよく取り扱われています。
第8章「アプリケーションプロトコル」のように章まるごと要らないんじゃないか?というようなこともありますが、それを加味しても全体のバランスがとても良いです。

社会人なりたての頃にも読みましたが、改めて読んでみると当時は気が付かなかった良さや粗が見えてきて、ちょっとニヤニヤしちゃいました。

2015012109

「マスタリング TCP / IP SNMP編」読み終わりました。

SNMP の基本が知りたくて読んだ本です。
同シリーズの入門編がとても良かったので期待して読んだのですが、自分が欲しかった知識についてはあまり扱っていませんでした。
本選びに失敗したなぁ、と思いましたが、これは対象読者と自分が合っていないことに気が付かなかった自分に原因があるので、本の内容が悪いということではありません。

また、合わなかったといいながらも SNMP についての会話を聞いてチンプンカンプンというようなことはなくなりましたので、やはり読んで良かったです。

2015012110

「入門TortoiseHg + Mercurial」読み終わりました。

TortoiseHg (と Mercurial) 入門するには必読の一冊です。
TortoiseHg と Mercurial 初心者向けの練習テキストの参考として、そして TortoiseHg を使い始めた人たちが後々学べるように、ということでチームに導入しました。
言い出しっぺなので当然読んだのですが、やはり GUI があると圧倒的に分かりやすいですね。
まだ Mercurial を使ったことがないけど GUI は嫌いだから CUI でいい、そういう人でも最初は TortoiseHg や SourceTree などの GUI から入るのはアリだなと思います。

そして、Mercurial GUI の中でも TortoiseHg の優秀さを再確認させられました。
ツールも本もとても素敵です。

2015012111

「入門 Git」読み終わりました。

Git の操作を学びつつ Git の内部や背景も知りたいというニーズにぴったりでした。
でも、DVCS を初めて使うという人は少しとっつきにくいかもしれません。

この本を読んで Git に対する理解が進み、漠然と持っていた苦手意識もかなり減りましたが、その後 Git を使う機会があまりなく、せっかくのインプットを活かせていません。
今年はこのあたりも取り戻していきたいです。

2015012112

「デザインのためのデザイン」読み終わりました。

人月の神話の著者が35年の歳月を経て書いたとあれば読まないわけにはいきません。
やはり銀の弾丸は見つからないのですが (業界全体でも誰も見つけられない)、それに近づくための様々な考察は派手ではないものの一つ一つが心に響きます。
そしてなんといっても、この本の言いたいことは以下の一文に集約されます。

素晴らしいデザインは素晴らしいデザイナから生まれる−−素晴らしいデザインプロセスからではない。


まさにこのとおりです。
揺るぎない事実でありながら実践するのは難しい、なんとも困難なことですが。

2015012113

「ペアプログラミング」読み終わりました。

これからペアプログラミングを始めるというときには必読の一冊です。
ペアプログラミングとは何か?に始まり、職場に導入する方法、実践で結果を出す方法、取り得るペアの特徴とメリデメ、トレーニングへの活用…どれをとっても、仕事でペアプログラミングを行うときに役立つことばかりが書かれています (それだけペアプログラミングのインパクトが強いとも言える)

ペアプログラミング、今年はチームに根付かせたいです。

2015012114

「JavaFX GUIプログラミング」読み終わりました。

Java の最新 GUI ライブラリである JavaFX を学びたくて買った本です。
が、内容が古いのはともかくサンプルコードがちょっと残念な感じが多く、それ以外の箇所でも今ひとつ信頼を持ってサンプルコードを読むことができませんでした。

この本もまた自分の選び方が間違っていたと思いますが、Java での GUI プログラミングがこんなに簡単になっているなんて…と感じることができたのは良かったです。
今年は Java で GUI やります。

2015012115

「Java 言語仕様」を読み終わりました。

商業的に大成功したプログラミング言語の仕様書です。
Java コンパイラを書くのでもない限り進んで全編読む動機はないかもしれませんが、Java コンパイラを書くのなら嫌でも全編を読むことになるでしょう。そんな位置付けの本です。

自分は Java コンパイラを書く予定はないので、ざっと流して読みました。
ただ、気になるところは立ち戻って読むことになるでしょう。
ある動作があったとして、それが仕様なのか、実装依存なのか、それですらないのか。
既存のコードやライブラリを利用する側としては常に気になるところですし、それがはっきりと「仕様は俺だ」と書かれているのが Java 言語仕様なのですから。

2015012116

「Java 仮想マシン仕様」を読み終わりました。

こちらも Java 関連の大きな仕様書です。
ただし、こちらは Java 仮想マシン (JVM) の仕様書だけあって、より現場チックな雰囲気をまとっています。
後半では Java コードをコンパイルした出力であるバイトコードとその意味についてページが割かれているのですが、たとえ JVM を書かなくても Java プログラマーにとっては興味深いところです。

直接的には役に立たないかもしれませんが、Java プログラマーなら楽しめると思います。

2015012117

「Java データ構造とアルゴリズム基礎講座」読み終わりました。

一日の大半を Excel と XML の編集に費やす。みたいな仕事をずーっと続けてきた後の初期リハビリとして読みました。
誤字脱字がひどかったり Java プログラムとしてどうなんだみたいなツッコミが多数ありましたが、アルゴリズムのリハビリをしたかった自分にとっては有意義な本でした。

2015012118

「オブジェクト脳のつくり方」読み終わりました。

この本だけでオブジェクト指向が (ある程度) 理解出来るかというと、できません。
もしこの本だけで理解出来る人は、おそらく他のオブジェクト指向本どれを読んでも同じように理解出来ると思います。
オブジェクト指向に苦手意識を持っている人が「今は分からないけどきっと分かるときが来る」という風に思えるかもしれない、という点では評価出来ると思いますが、オブジェクト指向の理解の推進度という点からはあまり期待しないほうが良いと思います。

以上、2014年に読んだ本の振り返りでした。
素晴らしい本との出会いに感謝すると共に、2015 年も素敵な本と出会えることを願ってやみません(〃▽〃)

これだけは覚えておきたい ATOK for iOS の設定と使い方。

2014122401

2014122402


ATOK for iOS.

iOS 8 で解禁されたサードパーティ製キーボードの中でも最も期待が高かったアプリであり、それと同時に「最も期待が裏切られたアプリ」でもあります。
ですが、そんな ATOK もバージョンアップを重ねる毎にどんどんと改善され、2014年11月の version 1.1.0 では実用に耐えうる内容となり、version 1.2.0 では待望のインライン入力 (擬似的なインライン入力) までサポートされました。

ATOK for iOS の設定項目は少ないので迷うことは少ないのですが、一方で基本操作なのに良く知られていない…というものが多いのも確かです。
というわけで、知っている / 知らないによって入力効率が大きく変わる設定および操作について、いつものように備忘録を書いてみました。
ただ、自分はテンキーしか使わないので、全てテンキー前提になっています (それ以外多分に自分の好みが入っているので、そのあたりはあしからず)

環境は iPhone 5s, iOS 8.1.2, ATOK for iOS 1.2.1 です。


TOC
---------------------------------
* かな入力時の半角 / 全角スペース入力
* かな / 英字 / 数字入力を切り替える
* 入力位置移動
* かっこ (括弧) を素早く入力する
* 文を丸ごと削除 (行頭まで削除)
* 誤った変換を逆変換 (読みに戻す)
* 素早くペースト
* (トグルを解除して) タップで連続入力
* (擬似) インライン入力
* 文節区切りの移動
* 自分の設定


かな入力時の半角 / 全角スペース入力
---------------------------------
ATOK アプリ起動→「設定」→「空白を半角入力」を オン で半角スペース、オフ で全角スペース。
「空白」を下フリックすることにより、設定と反対の入力が出来る。
例えば、「空白を半角入力」が オン なら全角スペース、「空白を半角入力」が オフ なら半角スペースを入力出来る。


かな / 英字 / 数字入力を切り替える
---------------------------------
「かな / 英字 / 数字」をフリックで以下のように切り替えられる。

* 上フリック: かな入力
* 右フリック: 英字入力
* 下フリック: 数字入力

「かな / 英字 / 数字」キーをタップすることによりトグルで切り替えられるが、フリックのほうが速いし確実。


入力位置移動
---------------------------------
「→」キーをタップで1文字分右に移動、タップし続けることにより連続移動。
「→」キーを左フリックすることにより1文字分左に移動、フリック後タップし続けることにより連続移動。

実際のところ連続移動はほとんど使わない。
適当に「このあたり」というところを目押しして、そこからの1〜2文字程度を微調整すると行った感じがメインの使い方だが、iOS 標準の長押しに比べればはるかに便利。
「かっこ (括弧) を素早く入力する」と組合せて使うことが多い。


かっこ (括弧) を素早く入力する
---------------------------------
「かっこ」と入力して変換することにより、"「」" や "()" など、開き括弧と閉じ括弧を同時に入力出来る。
開き括弧と綴じ括弧が同時に入力されるので、「→」の左フリックで1文字分戻ることにより、かっこ内に素早く入力できる。

「→」の左フリックが面倒くさい場合には「や」の左フリックで "「", 「や」の右フリックで "」" が入力出来るので、このあたりは好みと状況で使い分けるのが good.


文を丸ごと削除 (行頭まで削除)
---------------------------------
「☓」を左フリックすることにより、現在行の行頭まで一括して削除出来る。

この「行頭」は物理的な改行を見ているわけではないようで、途中に句読点があったりするとそこまでが削除される。
直感的な「行頭」とは少し異なるが、それでも何文字もまとめて消せるのは非常に便利。


誤った変換を逆変換 (読みに戻す)
---------------------------------
「逆トグルキー」をタップすることにより、直前の変換を取り消して読み (かな) に戻すことが出来る。
とても便利な機能なのだが、変換効率が良いのであまり利用する機会がない。


素早くペースト
---------------------------------
「定型文」を上フリックすることによりペースト出来る。

iOS 標準のタップ→「ペースト」よりも一操作少ない分素早く入力出来る。
ただし、操作内容と「定型文」が結びつきにくいので、なかなか慣れないかもしれない。


(トグルを解除して) タップで連続入力
---------------------------------
ATOK アプリ起動→「設定」→「フリックのみ」を オン にすることにより、「あああ」のように同じ文字をタップで連続入力することが出来る。


(擬似) インライン入力
---------------------------------
ATOK アプリ起動→「設定」→「カーソル位置入力」を オン にすることにより、(擬似) インライン入力にすることが出来る。

が、微妙な反応速度の違いのほか、どうも動きが不自然なので、しばらく試した後はずっとオフにしている (このあたりは UX 的なものがあるので上手く書けない)
完全な好みの問題ではあるが、この他の ATOK の動き / 特性との相性が悪い気がする。


文節区切りの移動
---------------------------------
かな入力中に「変換」をタップすることにより、かな変換を起動することが出来る。
かな入力中に常に表示される「予測変換」とは違う機能で、上手く使い分けることにより圧倒的に効率よく文字変換することが出来る。

かな変換を起動した後は、「←|」「|→」をタップすることにより文節区切りを移動出来るので、非常に精度の高い文字変換をすることが出来る。


自分の設定
---------------------------------
* 使用するキーボード: 1 ... テンキー日本語しか使わないので。
* カーソル位置入力: オフ ... インライン入力の操作感に違和感があるので。
* 空白を半角入力: オフ ... スペースはほとんど半角しか使わないので。
* キー操作音: オフ ... そもそも必要か?
* (テンキー) フリックのみ: タップの連続入力がしたいので。


----

iOS 標準の日本語入力システムは非常に頭が悪かったのですが、iOS 8 で過去の話となりました。
iOS 8 の日本語入力システムは大幅に改善されているので、あまりこだわりがない場合には標準の日本語入力システムで十分かもしれません。

が、自分としては入力効率はもちろん、使っていて感じる「気持ちよさ」が iOS 標準のものと ATOK では全く異なるため、今後よほどの改悪がなければ ATOK を使い続けると思います。

----

ATOK for iOS について。

初期版リリース当初は「1500円返せ(゚Д゚)ゴルァ!!」という怒りの声もまあ分からなくはない…という感じだったのですが、少なくとも version 1.1.0 以降は「1500円でこの機能が半永久的に使えるとか安すぎだろJK」という程度の完成度に至っていたにも関わらず、初期版の印象があまりに悪すぎたのか、今なお不当な評価を受けているアプリでもあります。
が、日本語を常用する人間にとって、このアプリを使わないのは絶対に損!!というくらい、ATOK for iOS は素晴らしい仕上がりになっています。

「1500円とか高過ぎる!!!」という気持ちも良く理解できますが、自分の場合、大好きなコーラを1ヶ月あたり1本我慢…を1年続ければ、ATOK for iOS を余裕で買えるわけですよ。
しかも、最初の1年だけ我慢すればその後は半永久的に使えるわけです。
このあたりは個人の感覚に大きく依存するわけですが、少なくとも自分にとっては「圧倒的にお得」でした(・∀・)

「JavaFX GUIプログラミング」読み終わりました。

JavaFX GUIプログラミング

読み終わりました。

Java の GUI 開発についてざっくり知りたくて読みました。
Java で GUI といえば AWT, Swing くらいしか思いつかないのですが、一番新しい・洗練されているのは JavaFX とのことだったので、JavaFX について書かれている本を探したところ、この本に行き当たりました。

以下、読んで良かったことと残念だったことを箇条書きしてみます。


良かったこと
--------------------
* ソースコード上でゴリゴリとコントロールを生成、組み合わせるスタイル。
* Win32 API で GUI プログラミングしていたのを思い出した。
* プロパティのバインドなど、JavaFX 固有の話題に触れている。


残念だったこと
--------------------
* 全体的にコードが冗長で、本質でないコードが多い印象。
* Windows 環境固有の記述がある (円マークでダブルクォートをエスケープなど)
* 誤植が多い。
* JavaFX Application Thread (Swing の EDT) についてほとんど触れられていない。
* FXML や Scene Builder について全く触れられていない。
* コントロールの使い方にとどまっている。
* deprecated な Builder クラスをふんだんに使っている (仕方ないが)


まとめると自分が求めていた内容ではありませんでした。
よって、どうしても残念な点ばかりが目につくのですが、このあたりは自分が本の選び方を間違えたことが支配的です。

ただ、誤植の多さやコードの冗長さは非常に気になりました。
Java あるいは他のプログラミング言語経験があればすぐに気がつくのでしょうが、ほぼ経験無しの人が「この本で Java GUI プログラミングをマスターするぞ!」というのは、正直難しいような気がします。

また、コントロールの使い方にほとんどのページが割かれているので、JavaFX の概要を知りたい人はITpro のコラム Java技術最前線 - JavaFX 2で始めるGUI開発 第1回 JavaFX 2とは などを読むほうが目的の情報を素早く取り入れられると思います。

最後になりますが、読みながら Win32 API でゴリゴリと書いていた時代を思い出しました。
もちろん当時も全てをソースコードに書くなんてことはしていなかったのですが。

Java で GUI プログラミングをする!と気合が入っている人にも、あまり気合が入っていない人にも、あまりオススメ出来ません。

2014122301

JavaFX GUIプログラミング

「デザインのためのデザイン」読み終わりました。

デザインのためのデザイン

素晴らしいデザインは素晴らしいデザイナから生まれる−−素晴らしいデザインプロセスからではない。

(19章タイトルより)


読み終わりました。

システム開発に携わる人間、特に管理業務に携わるなら読んでいて当然 (最低ライン) とも言われる 人月の神話 から35年、人月の神話で提起された問題をどのように解決するのか?と興味を持って読みました。
結論からいうと解決されていないのですが、唯一絶対の解決方法がないというだけであって、解決に近づくための様々な方法について考察されています。
人月の神話で著者自身が書いているとおり少なくとも銀の弾丸は見つかっていないのですが、これらの考察だけでも読む価値は十二分にあるでしょう。

全28章からなり、それなりにボリュームがあります。
読み方としては訳者の方が書かれている通り、1章から16章、19章と20章の順番で読み進めるのがおすすめですが、どうしても時間がないという場合には19章と20章を読むと良いと思います。
というのは、19章と20章には著者が最も伝えたいことが書かれているからです。

この本には、すぐに役立つ実践的な内容が書かれているわけではありません。
しかし、システム開発、特にデザインに携わる人間の実力 (技術、知識、考え方) を非常に広範囲に渡って底上げしてくれる、そんな考察と示唆に富んでいます。

素晴らしい本でした。

2014112701

デザインのためのデザイン

「数学文章作法 基礎編」読み終わりました。

数学文章作法 基礎編

著書名は「数学文章」作法ですが、文章全般を書く際に普遍的に役立つでしょう。
自分も仕事で文章を書くことが多く、この本の内容がとても参考になりました (というのは、「あー、この【やっちゃいけない】パターンだわー」とか、そういうことばかりなのだが)

著者の結城浩さんといえば 『数学ガール』シリーズ の著者として有名ですが、技術系の書籍も多数書かれているのですよね。
自分が読んだことがあるのは Java言語で学ぶデザインパターン入門 と Java言語で学ぶデザインパターン入門 マルチスレッド編 の二冊だけですが、二冊目に入ったときに (それと知っていたのを差し引いたとしても) 「あ、これ同じ人が書いた本だ!(゚∀゚)」と感じたのが強く印象に残っています。

結城さんの著書は「入門」を謳っている他の書籍に比べると圧倒的に分かりやすいです。
それは説明の仕方がとても上手いからなのでしょうけれども、それには「分かりやすい文章」が大きく寄与していると思います。
結城さんの文章は一見無造作に書かれているように感じてしまうのですが、裏返してみるとそれだけ巧妙に組み立てられているということなのでしょうね。

最後になりますが。
『数学文章作法』は自らが解説するあらゆる「作法」を地で行っていますよね。

文庫サイズなうえにページ数も少ないので、常に机の片隅に置いておくつもりです。

2014112601

数学文章作法 基礎編

「継続的インテグレーション入門」読み終わりました。

継続的インテグレーション入門

読み終わりました。

「今さら CI (継続的インテグレーション) ?」という感はありますが、現実として CI を使いこなせていないのは否めず、より一層の恩恵を受けるために手に取りました。
CI はとても大事なことですが、CI 自体は他の多くのことと同じく手段に過ぎず、最大の目的は「ソフトウェアが正しく動作する状態を保つ」ことですから。

結論から書くと、自分が知りたかったことはほぼ全てこの本に書いてありました。
CI の様々な目的やその恩恵、そのための活用の方法など、CI 全般にまつわる知識が広範囲にカバーされています。
しかも浅すぎるということもありませんし、紙面の都合で掘り下げられないテーマ (それだけで何冊もの本になるようなこと) については参考とすべき書籍や Web サイトへのリンクが記されています。

ただし、CI ツール (Jenkins とか Travis CI とか) の使い方そのものについてはほとんど触れられていないので、実際に CI システムを構築する際には使用するツールのマニュアルや tips を調べる必要があります。
とはいえ、こういったことを事細かく書いてしまうと特定のツールにロックインしてしまうことになりますし、さらには時代の移り変わりについていけなくなってしまうので、CI の原則と基本に絞って書かれているのは当然のことではありますが。

2007年に原著初版が出版されているので7年が経っていますが、書籍内で取り扱われているツールと現在主流のツールとではかなり相違があり、業界では当たり前のことながら流れの早さを感じさせられます。
が、そういった状況においても CI の原則や基本が大きく変わることはなく、初版出版当時に Jolt Awards を受賞した価値は現在においても普遍的なものであると思います。

今日のソフトウェア開発を CI なくして考えることはほとんど不可能に近く (とはいえ、そのようなプロジェクトは決して少なくない)、ソフトウェア開発に携わるエンジニアにとっては必携の知識と言えるでしょう。

そして、その原則と基本を身につけるために最良の一冊だと思います。

continuous_integration

継続的インテグレーション入門

----

実際に CI ツールを使うときに読む本としては、非常に広く使われている CI ツールである Jenkins をターゲットとした Jenkins実践入門 がとても実践的な内容を扱っており、オススメです。
こちらも2011年の初版から3年しか経っていないのですが (むしろ3年も経っていると言うべきか)、すでに情報が古くなっている内容もあります。
でも、そこは各自が随時アップデートしていけば全く問題無いところでしょう。

「マスタリング TCP / IP SNMP編」読み終わりました。

マスタリングTCP/IP SNMP編

読み終わりました。

この本では SNMP のフレームワークとして以下の4つを挙げています。

* プロトコル ex.) SNMPv2
* データ定義言語 ex.) SMIv2
* 管理情報 ex.) MIB-2
* セキュリティと運用管理 ex.) コミュニティ

読み通すことによってこれらフレームワークの一通りの知識を得られますが、片手間でネットワーク管理をするだけなら第3章「SNMP プロトコル」と第4章「管理情報の表現方法」はざっと読む程度で良いと思います。
が、実際に SNMP エージェントを作ったりパケット自体の内容を調査する必要に迫られるのであれば、第3章と第4章は必読でしょうね。
他に SNMP の書籍を読んだことがないので比較できませんが、SNMP アプリケーションを作るための情報がかなり体系的に取り扱われているのではないでしょうか。

また、自分が SNMP に手を出して最初に戸惑ったのが MIB や SMI, BER といった用語とその仕様でした。
「別に難しいことは全くないのに、なぜかとっつきにくい」と感じていたのですが、一通り読んでみた感想として、このあたりの用語や意味を自然に扱えるようになったと思います。

とはいえ、SNMP の概略と使い方を理解するだけなら、実際に SNMP エージェントとマネージャーを動かして「おお、便利!(・∀・)」と感じるのが一番近道でしょう。
SNMPv1, v2 は通信が暗号化されていないので、ネットワークアナライザで通信を丸ごと確認することが出来ますし。
そこからの展開として、SNMP をより活用するためにそのフレームワークを学び、実際の管理に反映する…というのがこの本の良い使い方だと思います。

tcpip_snmp

マスタリングTCP/IP SNMP編

「マスタリング TCP / IP 入門編」読み終わりました。

マスタリングTCP/IP 入門編 第5版

読み終わりました。

ネットワーク、特に TCP / IP とは無縁でいられない IT 業界においては必読の一冊です。
これ一冊でどうこうできるというものではありませんが、さらなる技術の深まり、さらなる技術の広がりの下地となってくれる基本を学ぶことが出来るでしょう。

一通り読んでみた感想ですが、取り扱っている話題の網羅性や掘り下げ具合が、とても良くバランスされていると感じます。
このバランスの良さには、重点をおくべき話題にはページを割き、そうでもない話題はごく表層的な取り扱いに留める、ということも含まれます。
ただし、そういった意味では第8章「アプリケーションプロトコル」は完全に蛇足で、章まるごとなくても良いかもしれません。
繰り返し登場する「telnet コマンドでサーバをつついてみる」というのは初学にはとても良いとは思いますが。

内容は全般を通してふんだんに図が使われていて、文章だけでは分かりにくい話題の理解も進みやすいです。
文章が分かりやすければ図はいらないという向きもあると思いますが、限られた紙面で多くの話題を伝えようとしているので、この図の多さはある程度仕方ないと思います。

さて。
現在の IT 業界、特にアプリケーション開発においては OSI 参照モデルにおけるセッション層以上を理解してさえいれば、困ることはあまりないと思います。
もちろんそれは (OSI 参照モデルにとどまらず) 各レイヤーのエンジニアが「自分のレイヤー」に集中できるようにする、という目的 (分業) が上手く達成されているということでもあります。
現場によってはアプリケーション層さえ分かっていれば OK というところも決して少なくないでしょうね。

しかし、いざトラブルが発生した場合や運用の立場からするとアプリケーション層を知っているだけでは全然ダメで、ネットワーク層以上を理解していることが「なんとか出来る最低条件」だったりということが珍しくありません。
例えば、トラブル解決においてはネットワークアナライザで実際の通信状況を確認してみるのが常道の一つですが、TCP も IP も理解していないのでは使い方すらおぼつかないでしょう。
これはレイヤーの分業が出来ていないからなのかもしれませんが、まだまだ主担当のレイヤー以外のことは知らなくても良い、とはなっていないのが現実です。

現在においてはネットワーク、特に TCP / IP とは無縁でいられないことから、全エンジニアにオススメの一冊だと思います。

tcpip_basic

マスタリングTCP/IP 入門編 第5版

----

自分が読んだ動機ですが、実は社会人なりたての頃にも読んでいて (第1版か第2版)、「分かったけど分からないような…」のまま座学はあまりしてこなかったので、今さら基本をやり直したいと思ったためです。
読み終わってみると、当時は分からなかった良さや粗が自然と分かり、改めて良書だと感じました。

「ペアプログラミング」読み終わりました。

ペアプログラミング―エンジニアとしての指南書

読み終わりました。

一度ペアプログラミングをしてみたいと思って読み始めたのですが、読み終わった時には是非ともペアプログラミングをしてみたい!に変わってしまいました(;´∀`)

ペアプログラミングとは何かといったことや歴史から始まり、そのメリットや良くある誤解、落とし穴、職場への導入の仕方について書かれています。
特に、同僚や管理者を敵に回さずに味方にする進め方についてかなりのページが割かれており、職場への導入を考えている人にとっては参考になると思います。

また、実際に導入してから実践を深めていく中での手法についても参考になります。
例えば、オフィスレイアウトはペアプログラミングをする上での最初にして大きな障害になりえますし (どうにもならないことも多いと思うが)、出だしで躓かないような tips が自然と吸収できましたね。
ペアの組合せやローテーション、そしてナレッジマネジメントやトレーニングへの活用法にも触れられており、このあたりは固定メンバーでずっとやっていけるわけではないプロジェクトにおいても、非常にメリットが有ると思います。

ここまでが第1部と第2部でした。
ここまででもとても有益なのですが、第3部はペアリングによる目的、成功の特徴、課題、(上手くいかない) 原因と解決策についてまるまるページが割かれています。
いかにもステレオタイプな組合せなのですが、実際にありがちな組合せとして説得力があり、実践前の予備知識として持っているのとそうでないのとでは全然成果が違うだろうな、と思わされました。

一部を抜粋してみます。

専門家 - 専門家のペア

* 目的: 最も複雑な作業を成功させる。
* 成功の特徴: 速度計を最高速度に維持したまま走行できる。
* 課題: まずマネージャがこれを良い考えだと信じることが大きな課題。


自分はこの本を読んでからごく実験的にペアプログラミングを試しているのですが、その効果は毎回「ソロとは比較にならない」と感じるくらい大きいです。
また、お試しにあたってはペアリング解説によって自分の欠点が明らかになっていたのも、ペアプログラミングが上手くいった大きな要因でした。
もともと欠点として認識していたことも多いのですが、ペアプログラミングに特化した問題と解決策が実践を強力に助けてくれました。

300頁足らずとあっさりと読める分量なので、「ペアプログラミングに興味あるけど、期待していたものと違った時のコストがイヤ」といった人にはぜひオススメしたいです。
また、ペアプログラミングがもたらす様々な成果や経済的上の分析など、「ペアプログラミングなんてリソースの無駄だ」と言う管理者を説得する方法を探している人にとっても、情報が良くまとまっていると思います。

導入を考えている人にも、とりあえず導入したけど上手くいかないという人にも是非読んで頂きたい一冊です。

pairprogramming

ペアプログラミング―エンジニアとしての指南書

Chrome のオムニバー (アドレスバー) で I'm Feeling Lucky 検索する方法。

主流のブラウザではアドレスバーに URL ではなく検索フレーズを入力すると指定検索エンジンでの検索結果を表示してくれるわけですが、たまに Google の I'm Feeling Lucky 検索をしたいという時があったりしますよね (よね?)
ということで、Chrome のオムニバーで I'm Feeling Lucky 検索をするための設定を書いてみます。
設定手順は違うかもしれませんが、他の主要ブラウザでも同じように出来ると思います(・∀・)


環境
-----------------------------
* Mac OS X 10.9.4
* Google Chrome Version 37.0.2062.120


2014091201


「設定」画面を開いて (Command + ,) 「検索エンジンの管理」をクリックします。

2014091202


最下段の入力エリアに以下のように入力して「完了」ボタンを押下します。

* 検索エンジン: I'm Feeling Lucky (好きな文字列で OK)
* キーワード: f (好きな文字列で OK)
* URL: https://www.google.com/search?q=%s&btnI

2014091203


オムニバーにフォーカスを設定して「f」「Space」キーを押下します。
すると検索バー左端が「I'm Feeling Lucky」と変わりますので (前の手順で「検索エンジン」に入力した文字列が表示される)、後はいつもどおり検索フレーズを入力して Enter キーを押します。

2014091204


するとこんな感じに検索トップのページを勝手に開いてくれます。
リンクをクリックする手間が省けてとても便利になりましたね(*´∀`*)

----

なぜか I'm Feeling Lucky 検索が効かないこともあったりするようです。
I'm Feeling Lucky 検索のもともとの仕様なのでしょうか( ・ω・)

「Effective Java」再読しました。

「Effective Java」を読み終わりました。

ふと思い立って Effective Java を再読しました。
ちょこちょこつまみ読みすることはありましたが、カッチリと読み返すのはこれが初めてかもしれません。
って、前に読んでからちょうど2年なんですね… Java を初めてもう2年もたっているとか、時間がたつのは本当に早いものです (Java はほとんどやっていないが…)

ということで読んでました。
で、これが一番の感想になってしまうのですが、読み始めてすぐに「やばい、めっちゃ読みやすい」と感じて、読んでいる間それがずっと続いて、そして最後には「数時間で読み終わってしまった…��(゚Д゚;)」となっていました。
のんびり読んでいたので4時間くらいかかりましたが、前に読んだ時は余裕で1ヶ月以上かかっていますから (通勤の時に読んでいるので、それなりに時間はある)、10分の1どころではなく時間短縮していることになります��(゚Д゚)モトモトカカリスギー

以前に比べて読みやすく感じるということは、本の内容に比べて自分が相対的に成長したことになります。
といっても、Effective Java はそのほとんどが Java で開発を行う上でのイデオムにページが割かれているので、ようやくスタートラインにたったようなものなのですが(;´∀`)
もちろん、Java で開発を行うからといって、Java 「言語」の仕様を知っているだとかイデオムを知っている…だとかだけでは良いシステムを作るには全く十分ではないのですが、それでも必要な条件の一つであるとは言えるでしょう。

Effective Java は本当に良い本だと思います。
ピアソン騒ぎの時にはもう入手できなくなるのではないか?と残念がる声が非常に多かったのを覚えていますが、丸善出版さんが再販をしてくれることになって本当に良かったと思います。
日本における Java の役割はまだまだ大きいですし、そしてこの本を必要とするエンジニアの数も決して少なくないはずです。

というわけで、まだ読んだことがない人はぜひぜひ読みましょう(*´∀`*)

「プログラマのための文字コード技術入門」読み終わりました。

プログラマのための文字コード技術入門

読み終わりました。

一言で言って全プログラマー必読の一冊です。
プログラマーでなくてもいわゆるコンピューティングに関わる人であれば、ほとんど詰まることなくサラサラと最後まで読めますし、とてもためになると思います。

文字コードは、ソフトウェア技術者にとって必須の知識です。プログラミングをするうえでも、データフォーマットなどを設計するうえでも必要です。しかし、文字コードの知識を体系的に学ぶ機会というのはめったにありません。


文字コードという言葉は知っている、そこにまつわる問題や落とし穴も経験則でなんとなく知っている、でも今ひとつ全体像が分からない、俯瞰した感が感じられない…という人はかなり多いと思いますし、自分もその一人です。
まさにそういう人にとって「待ってました!」という内容になっています。

たとえば、文字集合、符号化文字集合、符号位置、符号化方式といった基本となる概念の定義が非常に分かりやすく書かれていて、今まで何となく理解していた (つもりの) ことが、読んでいるうちにどんどん明確になるのがはっきりと感じ取れます。
一例をあげると、Shift_JIS や EUC-JP というのは文字コード (符号化文字集合) ではなく符号化方式である…だとか、このあたりをバッチリ混同していたのが分かったりとか、ですね。
同様に UTF-8 や UTF-16 というのも符号化方式であって文字コードではない、とか。

基本概念の後には応用編として文字コードの判別や変換、プログラミングやインターネットでの扱いについてもページが割かれていて、ここもまた面白いです。
ネットを見ている時に文字化けして、何やら文字コードの判定に失敗しているのだろうな…くらいのことは分かっても「Latin-1 ってなんだよ。日本語ですらないのかよ」とか、そういった疑問がきれいに解消されていくのは爽快ですらありましたね。

全体を通して、テーマの選別や章立て、その内容、どれもが過不足なく書かれているように感じました。
著者の方は相当に書きたいことをそぎ落としているのでしょうが、自分のようなレベルの人間が読んでもサクサク理解できるというのは、非常にポイントを抑えて書かれているということだろうと思います (Appendix は削ぎ落とされた名残のごく一部と思われる)

最後に、この本をオススメしたい方について書いておきます。
冒頭でも書きましたが、コンピューティングに関わるエンジニアであれば必読の一冊だと思います。
プログラマーはもちろん、インフラエンジニアや (日本的な意味での) システムエンジニアであればこの本の内容、少なくとも文字コードの基本概念程度は知っていて当然の知識だと思いますし、そうあるべきだと思います。

素晴らしい本でした。



プログラマのための文字コード技術入門

----

文字コードについては以下のページでもとても良くまとめられています。
このページの内容が「?」な場合でも、プログラマのための文字コード技術入門を読むと「ああ、そうだったのね(´∀`*)」となること請け合いです。

いいから聞け! 俺が文字コードについて教えてやるよ その1(前提知識編) - 谷本 心 in せろ部屋
文字コードと符号化方式 - Webと何かとその近所

「最短経路の本 レナのふしぎな数学の旅」読み終わりました。

最短経路の本 レナのふしぎな数学の旅

読み終わりました。

一言で言って、数学が嫌いな人や数学に苦手意識を持っている人に超オススメの本です。
数学な本というと『数学ガール』シリーズが良く知られていると思います (数学が好きな人達はもちろん、苦手な人達には特に)
数学ガールが名著であることに疑いの余地はありませんが、しかし、本当に数学が苦手で苦手で仕方ない人には、数学ガール以上にこの本が救いとなってくれるかもしれませんよ(・∀・)

この本の素晴らしいところは、数式らしい数式が全くと言っていいほど出てこないことです。
中学生レベルの数学の知識があれば全く問題ないでしょうし、少しばかり数学に興味がある人ならば小学生でも問題なく読めるでしょう。
もちろん、数学が苦手なまま学生生活を過ごしてきた人にとっても全く問題なく読めるのは言うまでもありません。

と、書きましたが、もちろん「数式がないから簡単」というわけではありません。
むしろ、「数式を使わなくても分かるように書かれている」からこそ簡単なのです。
この「誰でも理解できるように書く」というのは非常に難しいことなのですが、それが見事に成されているのがこの本なのですよね。
とはいってもこの手の話題には絶対に必要な計算量についてキチンと、しかもそれが読者の理解にとって必要な局面で (必要) 最小限には触れられているあたり、本当に素晴らしいです。

さて、この本ではグラフ理論を主題としています。
読み始めてすぐにダイクストラのアルゴリズムに触れることになるのですが、やがてはオイラー路やハミルトン路へと理解が進み、なんと最後には巡回セールスマン問題まで発展していってしまうのですΣ(゚д゚lll)
…と、サラッと書いてしまいましたが、これってものすごいことなのですよね。
自分などは数学の素養がないと半ば諦めていたところですが、最後まで楽しみながら読めたことにはただただ驚くしかありません。いや、マジで(`・ω・´)

と、このあたりであまり良くない点にも触れておきましょう。
この本はとても素敵な本なのですが、唯一の難点としては数学以外の話しが (自分の感覚的には) 20年くらい前のセンスだということが挙げられます。
…と、あえて書いてみましたが、それもオイラー路やハミルトン路が出てくるあたりからは全く気にならなくなるので、難点でも何でもないかもしれませんね(;´∀`)

むしろ、この本を読んでいると世の中の色んなものがグラフ (ノードとエッジで構成された G = (V, E) で表現されるグラフ) に見えてくる…ことのほうが難点なのかもしれませんが、これはそれだけ多くのことが「グラフとして表現出来る」と言い換えることも出来るので、まさにこの本を読んだ甲斐があったというものでしょう。

最後に、この本をオススメしたい方について書いておきます。

まだ数学を学んだことがない小学生で、すでに数学に興味を持っている方。
あるいは、どうも興味を持てそうもないな、と感じている方。
数学を学んでいるが、どうにも良く分からないという中学生、高校生の方。
もう数学を学ぶ機会はないが、学生の頃は数学を理解出来なかったし、興味も持てなかったという社会人の方。

このどれかにでも当てはまるのなら、この本はめっちゃオススメです。
ちなみに自分の場合は過ぎ去ってきた全ての年代において当てはまっていたりしますが、想像を遥かに超えて楽しく、しかもページをめくるごとに楽しみを増して読むことが出来ました(*´∀`*)

決して派手ではありませんが、本当に素晴らしい本です。
すでに Book of the Year の候補に入っています(*>ω<*)

2014060501

最短経路の本 レナのふしぎな数学の旅

「ITエンジニアのゼロから始める英語勉強法」読み終わりました。

ITエンジニアのゼロから始める英語勉強法

読み終わりました。
2年位前から英語を勉強したいと思っていましたが、かなりやるやる詐欺っぽくなっていたので、弾みをつける意味でノリの良さそうな本を買ってみました(・∀・)

感想を一言で書くと「著者の方の体験記」という感じです。
が、それが悪いというわけではありません。
この本では英語は絶対、勉強するな! 、英語のリスニングは発音力で決まる!という良く知られた英語勉強法をベースにしています。
というか、もっと突っ込んで書くとベースにしているというよりも、著者の方が実際にそれらの勉強法を実践してみて、「自分はこうだったけど、あの時こんな風に工夫していればもっと効率が良かった!」という具合に、勉強法の紹介とその使いこなし方を書いているという印象です。

なので、この本単独で勉強法として完結しているわけではないので、「これ一冊あればペラペラになれる!」という期待は持たないほうが賢明でしょうね。
まあ、これだけ世の中に英語勉強法があふれていて、そして多くの日本人が英語を非常に苦手にしている現状を考えると、たかだか200ページちょいの本を一冊読んだだけで「ペラペラになれる!!」と考えるほうが難しいですけどね。
実はそのあたりは帯にもしっかり「独習法をすべて伝授」書かれているので、勘違いすることはまあ無いだろうなとは思います。

ただ、少し気になったところもあります (いうほどではないのかもだけど)
著者の方は「ゼロから」と書かれていますが、喋れるようなものではなかったにせよ、大学に入学出来る程度の英語力があったのは間違いありません。
また、少なくとも英語に苦手意識があったのは間違いないのでしょうが、著者の方はかなり地頭が良いのだろうなーとひしひしと感じさせられるので、仮にこの独習法がピタリとハマったとしても、地頭に差がある場合にはもっと時間が掛かることも十分に考えられます。

でも、実際にやってみないことには何とも言えないのですけどね(;´∀`)

自分は英語がまったく喋れませんし (「あいはぶあぺん」レベル)、聞き取りも読み書きも壊滅的です。
なので、この本がどれだけ良い物なのか、あるいは悪い部類なのかは分かりません。
でも、少なくとも弾みを付けてもらったことは確かです。
ページ数は少ないし、文字は大きいし絵も多いしで、とても読みやすかったですしね。

英語、やろうという気持ちになりましたよ(`・ω・´)

2014053001

ITエンジニアのゼロから始める英語勉強法

P.S.

著者の方が本の紹介をしているスライド。
本の中で使われている言葉や絵も多い (というかそればかり) ので、本を買おうかどうか迷っている方は雰囲気を試してみるにはいいかもしれません(・∀・)



P.S.

この本の第一版が発行されたのは2013年3月ですが、なんと同年9月に著者の方がブログで「私は英語を聞けも、読めもしなかったことに気づいた」と書いていたりします。
まあ、自分は全く気になりませんが、本を書いた人はあまりこういうマイナスなことは書かないような気もします。しかも、第一版の発行から半年しか立っていませんし(;・∀・)

私は英語を聞けも、読めもしなかったことに気づいた - メソッド屋の日記

「Java データ構造とアルゴリズム基礎講座」読み終わりました。

Java データ構造とアルゴリズム基礎講座


読み終わりました。

アルゴリズム再入門ということで購入したのがこの本です。

学生の頃はそれなりに勉強したものですが、社会人になってからは Excel でドキュメントばかり書いていました。
で、今さらながら危機感を感じて、再入門しようと思い立ったというのが背景です。
アルゴリズム本はたくさんありますが、たまたま目にしたことと薄さで選びました。

さて。
感想を一言で言うと「この本一冊で終わらず次に進むなら良い本」です。
まあ、これはどのような本にも言えるのかもしれませんが、この本は特に「足がかりとしては良いが、これだけではそれほど先に進まない」という印象が強いです (このあたりは「オブジェクト脳のつくり方」と似た印象)

と、一言感想から入りましたが、読んでいて気になったことを書きます。
アルゴリズムのサンプルが Java で記述されているのですが、これがいろいろと惑わせるような書き方になっているのが残念です。
気にしなければ良いのでしょうが、ざっと挙げてみます。

* 変数やメソッド名の命名に一貫性がない。
* パッケージ名の命名も一般的なものと違う。
* 可視性が一般的でなく一貫性もない。
* final 指定しそうなところで使っていない。
* 事前条件のチェックがほとんどない。
* 例外を握りつぶしている (OOME!)
* スローする例外が不適切。

また、記述言語に関わらないところでは、以下のようなことも気になりました。

* 目につくレベルで誤記がある。
* 何の前触れもなくメソッドやフィールドが追加 / 変更される。
* オブジェクト指向プログラミングのメリットとして差分プログラミングを強調。

誤記はコンパイルエラーを引き起こすものもあれば、ドキュメントコメントと実際のパラメータが違っていたりなど、空気を読まないと引っ掛かってしまうと思います。
メソッドやフィールドの追加 / 変更も同じくで、何の前触れも後付けもなく行われていたりします (実装コードが記載されておらず使う側のコードのみ)
あと、これは本文とはあまり関係ないのですが、オブジェクト指向のメリットとして差分プログラミングが強調 (コラムとして1ページ) されているのが気になりました。
たしかに、差分プログラミングが非常なメリットのように語られている時代もありましたが (今も語られているけど)、今ではこれを前面に押し出すのは適当ではないと思います。

と、いろいろ書きましたが、「読んだ人はこういうの気にならなかったのかな?」と検索してみたら、同じことを感じた方がいたので紹介しておきます。
自分が書いたことを全カバー、しかもより分かりやすく書かれています。
Java データ構造とアルゴリズム基礎講座 - ぐるぐる〜

と、気になるところばかり書いてしまいましたが、全体的な感想としては「読んで良かった」です。
よく知られたアルゴリズムについてサラッと触れることが出来ますし、計算量についても一通り触れられています。
それに、なんだかんだで手を動かせますし、「この本を読んだことを活かすためにも次に進みたい」と思わせてくれるのが良いです。

ということで、誤記やサンプルコードが気にならないならアルゴリズム (再) 入門には良いと思います。
なんといっても薄いので、気楽に持ち運んで読めるのが良いです。

2014051801

Java データ構造とアルゴリズム基礎講座

「オブジェクト脳のつくり方」読み終わりました。

オブジェクト脳のつくり方

読み終わりました。

「☓☓さんは Java のエキスパートらしいですね」
「ええ、開発経験も多数ありますし、そこそこ自信もあります」
「では、オブジェクト指向についてもマスターしていると」
「いやぁ、オブジェクト指向は難しくて、どうもダメですね。でも、Java で開発しています。問題ありません」
(1章「不完全主義のススメ」)


オブジェクト指向を理解している技術者の少なさを憂いつつ、だからこそ今マスターすれば大きなアドバンテージになりまっせ!…というインセンティブをおりまぜながら、軽いノリでオブジェクト指向の考え方入門が書かれています (初版から10年立っているが、未だに技術者の少なさは…)
オブジェクト指向の本はたくさん読んだけどどうにも手応えがない…という人、何がお得になるのか分からない…という人にとっては、理解への第一歩を踏み出すきっかけになってくれるかもしれません。というか、この本の目的はまさにそれですね。

さて、読み方です。
「オブジェクト指向の何が美味しいのかさっぱり分からない」という人は「はじめに」に書かれているように、1章から4章までを読んだところでさっぱりと終わりにしてしまうのがオススメです (で、今までに読んだオブジェクト指向の本を読み直してみる)
物足りなさを感じるのなら5章を飛ばして6章、7章あたりを読んでもいいかもしれません。

「5章はアドバンスドバージョンということで、もう一歩踏み込んだ内容を説明しています」ということなのですが、1〜4章を読んで「オブジェクト指向、なんか分かってきたかも…!」という具合だと、(ごく基本的なこととはいえ) いきなり EJB の知識を前提とした内容になっていたり、UML の図が一気に増えたり (しかも多少大きくなる) と、少々手強いかもしれません。
なので、「分からなかったり本を閉じればいい」「しばらくしたらまた読もう」というスタンスで読むのが良いと思います。
また、8章、9章もいきなり難しくなるのですが、ここも5章を読む時と同じような感じです。

他、クラスを抽出するときに名詞抽出法を推していたり、オブジェクト指向は現実の世界をそのままコンピュータ化すれば良い…というあたりが少し気になったりはしました。
が、このあたりは「厳密には微妙に間違っているけれど、イメージをつかむには分かりやすい説明」を選んだ結果なのだと思いますし、学びを止めなければ全く問題ないところでもありますね。
ただ、この本だけを読んで分かったつもりになるのは早合点ですし、著者の方の意図とも異なると思います。

ちょっと特徴のある語り口調が気にならなければ、オブジェクト指向に悩む人にとっては「ある日突然〜」のきっかけになってくれるかもしれません。
このあたりはあまりはっきりしたことは言えないのですが、でも、万事が事細やかに書かれている解説本を読みまくるよりも、この本のほうが時間におけるコストパフォーマンスが良い可能性は多分にあります。

悩んでいる人は、まずは読んでみるのが良いかもしれませんね(・∀・)

2014042101

オブジェクト脳のつくり方

P.S.

作者の方は北斗の拳、TRICK、男塾のファンなのでしょうか…?(;・∀・)

「入門TortoiseHg + Mercurial」読み終わりました。

入門TortoiseHg + Mercurial

読み終わりました。

Mercurial 初心者はもちろん、CLI でガシガシ使っている初級以上の人にとっても読む価値がある一冊です。
日常的に必要となる範囲はおおよそカバーしている上に、著者が「ここぞ!」と思っているところは (ある程度) 紙面を割いて書かれているので、「分からないことは分かった、だが次にどうしたらいいか分からない」という、初学の頃にありがちなトラップに陥らずに済むだろうな…と思えるところが何箇所もあった (著者の方としてはそれでも相当に浅くとどめているようだが)

特に第7章「マージへの理解をさらに深める」は CVS, SVN ユーザーにとって慣れ親しんだ文化を別の視点から見る助けになりますし、第11章「異種環境間での履歴共有の運用」は知らないと陥りやすい罠やその回避法などが簡潔に書かれているため、初学としてはもちろん、一回りしてきた後にもぜひ読みたい内容になっています。

さらに良いと思ったのが第3部に入ってからの第12章「履歴 / ファイルの検索」、第13章「高度な履歴記録」、第14章「パッチの管理: Mercurial Queue」です。
履歴というのは、5W1H をいつでも簡単かつ確実に見れてこそ価値があるものですし、何かを変更したその時は最善と思っても、一晩たってみたら「あそこはこうしておけば良かった…」ということは良くあるものです。
それらを満足するための機能が Mercurial には備わっていますが、これらの章ではその基本的なところを解説しているため、書いてあることを実践出来るようになれば日常の使用ではほとんど困らないレベルです。

自分はほとんどを座学で読みましたが、出来ることなら TortoiseHg をインストールして実際に手を動かしながら読んだほうがいいと思います。
というのは、単に読むだけよりも手を動かしたほうが圧倒的に理解が進むので、手を動かす分の時間を余裕で取り戻せるし、理解が深まった分さらに加速出来るからです。
特にマージや履歴の検索 / 閲覧、履歴改変といったところでは GUI の威力というものが非常に効いているのではないかと思います。
一見しただけではイメージしにくい操作とその効果が、グラフィカルに説明されることによって非常に理解しやすくなっています。

日常の使用で必要となる範囲は十分にカバーしている上に、さらに先に進むための手助け (リンクやコラム) が随所に用意されているという手厚さも嬉しいですね。
これほどの良書なのに Amazon のレビューが1件しかないというのが不思議なくらいです。

現状では Mercurial (TortoiseHg) 初心者にはベストの一冊だと思います。
また、「なんとなく使ってるけど、今ひとつうまみが分からない」という人にとっても、一歩前に進むための手助けになってくれるでしょう。

2014041701

入門TortoiseHg + Mercurial

「フォントのふしぎ」読み終わりました。

フォントのふしぎ ブランドのロゴはなぜ高そうに見えるのか?

読み終わりました。

デザインを専門とする人でなくとも非常に楽しく読める本です。
いや、むしろデザインを専門としていない人こそを対象にして書かれている本、と言ったほうがいいかもしれません(・∀・)

この本を手にとった動機なのですが、職業柄もともと平均以上にはフォントに関心があって、プログラミングする時はもちろん、単なる文章を書いている時でもお気に入りのフォントを使いたい、そう思っているわけです。
そんな時、ふと目に止まったのがこの本なのですが、視界に飛び込んでくるやいなや網膜に焼きつく強烈な訴求力は、普段読み慣れている良くも悪くも「文章そのものの力」であるところの技術書とは全く異質なものだったのですよね。

目に止まった次の瞬間に足も止まり、手にとって表紙をまじまじと見つめていました。
雑多なフォントがスクラップされているだけに見えるのに、統一されたメッセージ感とゴージャスなヴィジュアル、それでいてシンプルさを感じさせる表紙…あまりにも陳腐な表現になってしまいますが、「めっちゃきれい!」という衝動買いに極めて近かったのですよ。
…だったのですが、これがもう大当たりで、期待をはるかに上回る素晴らしさでした。

全編とおして美しい写真 (町並みだったり、ちょっと変わった看板だったり、自然だったり) がふんだんに使われ、文字数は少ないながらも吟味されまくったであろう文章は、シンプルなのに読む側の気持ちを鷲掴みにする強烈なメッセージを持っています。
特に写真の美しさは格別で、ほとんど全てのページに載せられているにもかかわらず、ページごとに新鮮な感動をもらいました。
このあたりは配色やフォント、ページや章の構成、配置…あらゆる意味でのデザインの卓抜さを感じざるを得ません (しかも、それをさりげなくやっているところがまたすごい)

ゴチャゴチャと書いてきましたが。
この本の内容は、著者の小林章さんがまえがきで書かれている
「フォントっていろいろあるけど、どれを使ったらいいの?」
そう思っている人たちのヒントになればいいなと思って、この本を書きました。

この言葉に集約されます。

今までフォントなんて全く気にしたことがなかった人でも、気にしないのとは全く別のレベルで「あ、こういうフォントを使えばいいんだ!」、そう思えるようになると思います。
また、
フォントのデザイナーって普段こんなことを考えているとか、こんな角度でものを見てるとかっていうのも知ってほしい、そういうつもりで本にしました。

これも全編通して「うーん、やっぱり全然ものの見方が違うなー」と思わされましたね。
でも、それがまた気持いいというかなんというか、すっきりした読後感につながるから不思議なものです。

さて。
読み終わってみて…というか読んでいる最中からなのですが、プロポーショナルフォントもいいかも。と思っていることに気がつき、少なからず驚きましたね。
職業柄なのでしょうが、使うフォントの95%以上は等幅フォントですし、デフォルトがプロポーショナルフォントでも等幅フォントが使える場所では必ず等幅フォントを使ってきました。
でも、フォントデザイナーが実力を遺憾なく発揮するには制約の少ないプロポーショナルフォントのほうが圧倒的に有利だし、出来上がるフォントにも如実にそれが現れるということが嫌というほど分かりました。

サラサラとページをめくって写真を見るだけでも楽しいですし、気になる単語があったら少し手を止めて文章に目を走らせたり。
いろんな読み方が出来るし、そしていろんな読者層が楽しめる本だと思います。

文字というものを日常的に目にする人なら楽しく読めること請け合いな本ですね(*´∀`*)

2014032701

フォントのふしぎ ブランドのロゴはなぜ高そうに見えるのか?

「入門 Git」読み終わりました。

入門Git

読み終わりました。

「入門 Git」というタイトルに相応しく、これから Git を使う人が「Git の使いこなし方」はもちろん「Git とはどういうものか」、「さらに使いこなすには」を学ぶために最適で、文字通り Git の入門書となっています。

ただし、amazon のレビューにも多数書かれているのですが、全くの VCS (バージョン管理システム) 初心者が読んでも、役に立つ前に「この本全然使えない」ということになってしまう可能性があるかもしれません。
なので、この本の入門とは「Git というソフトウェアをガッツリ使いこなす」ことを目的とする人のための入門、と言ったほうがいいかもしれませんね。

「入門 git」を読み終わりました。

自分の場合は「入門 git」を読んだ時に「入門 Git」も読みたいと思ったのがそもそもの動機です。
その時は「Git 内部を知ることにより Git に対する理解と使いこなしが進むのではないか」と思ったものですが、「入門 Git」はまさにそのあたりの想いに応えてくれました。

2章「git の基本概念」がまさにそれで、ブロブオブジェクトやコミットオブジェクトといった Git の内部オブジェクトはもちろん、Git のブランチやインデックス / ワークツリー、そして 3-way マージといった Git の基本中の基本について知ることが出来、それが Git の理解を加速させる推進剤となってくれます。
そして、それによって Git をより使いこなせるようになるとも言えます。

そういった面ではまさに「Git 入門」として相応しい一冊なのですが、「Git の使い方について詳しく書いてある」かというとそんなことは全然なくて、そのあたりはマニュアルを読んだほうがずっと詳しく書いてあることがほとんどだったりはしますね。
そういったことはページ数の限られている書籍ではカットせざるを得なかったのかもしれませんが、実際のところマニュアルを読んだほうが早いですし、ほとんど気にならないと思います。

さて、読み方なのですが、最初から順番に読んでいくのがいいと思います。
それぞれの章がそれまでの章を読み & 理解してきたことを前提とした書き方をされているので、よほど時間がない等でなければ最初から読むのがオススメです(・∀・)

最後に。
VCS が初めての方には積極的にオススメできませんが、他の VCS, 特に DVCS の経験がある人にはとても分かりやすく、そして非常に役立つ一冊になると思います。
また、「普段から Git を使っているけれども、今ひとつ『自分がしていること』と『結果との因果関係が分からない」という方には特におすすめです。

2014032401

入門Git

「プログラミングの基礎」読み終わりました。

プログラミングの基礎

読み終わりました。

読み始めてすぐにプログラミングを始めた頃のワクワク感が思い出され、最後まで一気に読んでしまいました(・∀・)
プログラミングに何らかの形で関わっている人、あるいはこれから関わろうとしている人に非常におすすめな本です。

この本を手にとった動機は「プログラミングの基礎を見直す、うん、いいかも」という思いと「プログラミング言語として関数型の OCaml を使っているし、関数型のとっかかりにいいかも」という程度のものでした。
しかし、冒頭に書いたとおり、読み始めるやいなや一気に引き込まれました。
いろんな方から良書と聞かされていたので読み始める前から期待していたのですが、正直なところ期待どおりというよりも期待以上でしたね。
プログラミングを生業にしている身としては非常に反省させられることもあり、また再確認させられることもあり、そしてまた非常に楽しみながら関数型言語という新しいパラダイムに触れることもできました。

読んでいて非常に「(良い意味での) 教科書的」と感じたのですが、著者の方が実際に大学で行っている授業の内容をまとめた本なので、それもそのはずですね(・∀・)
教科書的と感じたのは、解説が非常にポイントを抑えていて、情報不足はもちろん情報過多に陥いることも一度もなかったからです。
そのため足踏みをすることもなく回り道をすることもなく、目標に向かって一直線に進んでいくことができるのがとても素敵だと感じました(´∀`*)

と、その目標なのですが、 前書きの一番最初に書かれているのですが、

* デザインレシピの習得 (この本の中核)
* データ構造とアルゴリズムの習得
* ある程度の大きさを持つ意味のあるプログラムの作成

読み終わった時には、この目標が達成されていることを実感できましたね。
というか、読み進める端々からそれを感じ取ることができるので、それが読む速度をさらに上げてくれたと思います。
読み方としては、授業を期の最初から受けていくのと同じように最初から順番に読んでいくのがおすすめです。
そうすることによって理解が進み、抑えた基本を次に応用し…という反復がさらに理解を進めてくれますので (最初から読んでもダメな本もある)

最後に。
プログラミングの初心者から経験者までおすすめできますが、もし次のような気持ちを感じているのなら、絶対の自信をもっておすすめできる一冊です(`・ω・´)

* プログラミングは好きなはずだが、どうも最近は面白く無い。
* 仕事で困らない程度には書けるが、なんとなく頭打ち感がある。
* 関数型言語に手を出してみたい。

2014030601

プログラミングの基礎

P.S.

Amazon のレビュー欄も充実しているのですが、非常に素晴らしい書評エントリがありましたので紹介しておきますね(・∀・)

[OCaml]書評「プログラミングの基礎」 - あどけない話

P.S.

読み終わってから2週間くらい放置してたけど、やっと書けた…(;´д`)

「Java 仮想マシン仕様」を読み終わりました。

Java仮想マシン仕様

読み終わりました。

Java 関連の仕様書という点ではこの前に読んでいたJava 言語仕様と同じなのですが、内容的にはこちらのほうがずっと面白いです。

この本の推定読者は「最強の JVM 作るぜ(キリッ」という人たち以外の何者でもないと思うのですが、自分のように「ピアソン狂想曲で買ったけど本棚の肥やしにするのももったいないので読んでしまおう」という動機 (と Java 初心者から初級者になろうとしている人) で読んでも、十分に楽しめますし身になります。

実際のところあまり期待していなかったのですが、class ファイル・フォーマットやロード・リンク・初期化など、Java 言語仕様よりもずっと分かりやすく書かれているような気がしますね。
このあたりは先に Java 言語仕様を読んでいたからかもしれませんが、でもそれだけではないように思います。

読み方としてはまず第2章までをひと通り読み、その後は自分の好きなところをつまみ食いする感じで良いと思います。
最初に第2章までを読むのは、この本を読む上で土台となってくる用語やらプログラミング言語としての Java のコンセプトが書かれているからです (第1章「イントロダクション」より)
また、第2章を読み終わった後はつまみ食い OK ではあるのですが、Java 言語仕様と同じく、前の章の読了を前提にしているような箇所はたびたびあるので、その場合は必要に応じて関連箇所を読み進めるのが良いと思います。

そうそう。
全然期待していなかったのに期待を裏切るほどに面白かったところというと、第7章ですね。
第7章「Java 仮想マシン向けのコンパイル」では「こんな Java コードがコンパイルされるとこんなバイトコードになるよー」というのがいくつかのありがちな例で示されているのですが、バイトコードがなんだか (C をコンパイルした結果の) アセンブラに見えてきて、どうやっても解釈のブレようがない明らかさがとても良いです。本当に分かりやすいです。
自分の場合は、自分が書いたコードを javap しまくったほどです(;・∀・)

最後に。
JVM を実装したりとかは考えていない普通の Java プログラマーにとっては仮想マシンの知識やバイトコードの知識は全く不要なものですが、それでも Java コードとバイトコードのマッピングが出来ると、普段の Java プログラミングにも間違いなくプラスに働くと思います。
それは直接的なものではなく、かなり間接的なものかもしれませんが、しかしながら自分にはすでに実感としてそれがある、というのは自信をもって言えます。

読む必要性は全くありませんが、Java プログラマーなら一度目を通してみることをおすすめします。

2014021101

Java仮想マシン仕様

P.S.

Java 仮想マシン仕様は、Java 言語仕様と同じくこちらで見れます。
もちろん PDF もあります。
本は高い上に絶版になってしまいましたが、興味がある人はぜひ読んでみて下さい( ・∀・)

Java SE Specifications

「Java 言語仕様」を読み終わりました。

Java言語仕様 第3版

読み終わりました。

一言で言ってあまり面白い本ではありません。
また、読んだからといってすぐにプログラミングに役立てることが出来るかというと、それもなかなか難しいような気がしますが、この本が言語仕様書であるからにはそれも仕方ない というか当然のことでしょう。
この本の価値はもっと別のところにあるのですしね。

さて。
どんな本か?というと、それはもう「商業的に大成功したプログラミング言語 Java の言語仕様書である」というのが分かりやすいでしょう (そのまますぎるが)
一言で言語仕様といってもその範囲は極めて広く、そして深いのですが、ごく一端を例えれば「○○な Java コードを書いた」時に「コンパイルされるとどのようなバイトコードが生成されるか」「それが JVM 上で実行されるとどのように動くか」ということが定められている、ということです。

この定義 (仕様) に従っていないコンパイラや JVM は Java 言語仕様に従っているとはみなされず、言ってみれば「野良コンパイラ」「野良 JVM」扱いされてしまうわけですね。
故意にせよ過失にせよ言語仕様を満たせない場合は、Sun だろうが Oracle だろうが先の例と同じく「野良」となってしまうわけで、言語仕様というのは文字通り「俺がルールブックだ」というものなのです。
そして、それが詳細に書かれているのがこの本ということになります。

全600頁弱なので、いわゆる分厚い本ではありません。
ただし、言語仕様についてひたすら淡々と書かれているだけなので、コンパイラを作りたいだとか言語仕様に興味があるというような人以外にはかなり退屈だと思います (自分だけ?)
なので、最初から最後までしっかり理解しながら読む、というようなスタンスはあまりオススメできないですね。

なので、最初に1章から3章あたりまで目を通したら、後は自分の興味のあるところを順不同で読めばいいと思います。ただし、前の章を読んでいることを前提にしているような箇所はたびたびあるので (たぶん章組みはそうなっている)、そういった時には前の章に移動して関連箇所周辺に目を通せば良いでしょう。
また、そういった読み方をする読者を想定したわけではないでしょうが、関連箇所へのポインタがふんだんに記されているので、関連箇所を探す手間が掛からないのは特筆すべき点だと思います。

と、だらだら書いてしまいましたが。
読んでも普段のプログラミングにすぐに効果が出るということはめったにないでしょうが、「こういう書き方したらどういうふうに動くのだろう?」と疑問に思った時には、これほど頼りになる本はないと思います。
なにしろ言語仕様なので、マトモなコンパイラならこの本に書かれているとおりに動くことが保証されているというわけです。

例えばメソッド呼び出しなどは普段あまり意識せずに書いていると思いますが、オーバーライドされつつオーバーロードされつつ…なんてメソッドがある場合、どのようにして実際に呼び出すメソッドを決めているか等が非常に詳細かつ明確に書かれています (どのメソッドが呼ばれるか悩むようなコードは書かないほうがいい、という考え方もあると思うが)

最後になりますが。
全 Java プログラマーにおすすめ、という本ではないと思います。
ただし、Java プログラマーなら一度ならず「このコード、どういうふうに動くのだろう?」と不安になったり、自分の書いたコードの動作に確信が持てなかったりしたことがあると思います。
そんな時、言語仕様を確認できるというのはコードに自信を持つことが出来ますし、Java プログラマーとしても着実に経験を積むことが出来ると思います。

なので、一度に読み通す必要は全くありませんが、仕事机の端にでも置いておきたい一冊です。

2014021001

Java言語仕様 第3版

P.S.

ちなみに Java 言語仕様自体はネットで見られますし PDF もあります。
重い本を持ち歩かなくてもいいし常に新しい情報が得られますし、いいことずくめですね(・∀・)

Java SE Specifications

作業用音楽(・∀・)

作業用音楽ってありますよね。
音楽を聞くと仕事が捗るという人もいれば逆に効率が落ちてしまうという人もいますが、自分は間違いなく前者です (数年前までは後者以外ありえなかったのだけど)

作業用音楽といっても常に同じ音楽を聞いているわけではなくて、そのときのコンテキストによっていろんな曲を聞いたりします。
ということで、普段どんな音楽をどこで聞いているかを書いてみます。
が、コンテキストを絞らないといくらでも書けてしまうので、今回は「わりに創造的」「ある程度慣れている」「でも集中しないと全然進まない」時に聞かせて頂いている音楽をピックアップしてみました。

こうしてみるとどれもこれも音楽というよりも音ですが、そのあたりは(゚ε゚)キニシナイ!!

Rainy_Mood

Rainy Mood

集中したい時の BGM というと真っ先に上がってくるのが雨音ですね。
Rainy Moodは雨音と雷鳴を鳴らすだけのシンプルな音なのですが、実に気持ちよく目の前のことに集中することが出来ます。
ちょうど自分の琴線に触れる音なのかもしれませんが、一番お気に入りの音です(・∀・)

Rainy_Cafe

Rainy Cafe: Ambient White Noise Generator. 雨のカフェ

雨音 + カフェのゴールデンコンビが聞けるサイトです。
雨音は基本雨 + 時々雷鳴な音、カフェはわりと雑多な店内風な音なのですが、音量的に雨音3 : カフェ7という感じで、なんとなく「突然の夕立から避難した人たちで賑わっているカフェ」な感じだなーなんて勝手に思い描きながら聞いています(;・∀・)
でも、こちらも一旦集中するとほとんど音が聞こえなくなるのは同じですね♪

JazzAndRain


雨音 + ジャズという組合せは初めてですが、とても雰囲気がありますね。
デフォルトの音量バランス的には雨音4 : ジャズ6という感じなのですが、雨音は完全に裏方に徹しており (ちゃんと聞こえては来る)、ジャズがメインになっています。
なので、作業の入りとしてもジャズが表に立ってくるのが非常に印象深いです。

自分はわりとゆったり作業に臨むときに聞いています(・∀・)

Coffitivity

Coffitivity - Increase Your Creativity!

集中系というと定番のカフェですが、こちらのサイトではいろいろな場面のカフェ音を聞くことが出来るのが特徴です。
いろいろなと言っても「朝のカフェ」「ランチタイム」「大学のカフェ」の3つなのですが、そのどれもがいかにも情景が浮かんでくるようで、そしてどれもが作業の邪魔を一切しない、いいカフェ音なのですよ(・∀・)

Relaxation_audio

Relaxation audio

作業用の音楽といえば森の音も外せないところですね。
Relaxation audioではそんな森の音を楽しむことが出来ます。
自分としてはちょっと鳥の鳴き声が主張し過ぎな気がしないでもないですが、他の音を聞きっぱなしだったときの気分転換に聞いたりします。
でも、森の音が好きな人にはたまらないのではないでしょうか(・∀・)

soundrown

soundrown

最後になりますが、最近一番良く聞かせて頂いているサイトを紹介します(・∀・)
「雨 + カフェ」や「雨 + ジャズ」といった感じで音を組み合わせるのは定番ですが、soundrownは色んな音を自分で好きなだけ組合せられるのが大きな特徴です。
音の種類も「カフェ」「雨」「波」「炎」「鳥」「夜」「電車」「噴水」「ホワイトノイズ」「遊び場」と圧倒的に多いので、自分の好みの音を組合せられるのはもちろん、色んな組合せを試して「気がついてなかったけどこの組合せめっちゃ好き!」を見つけられるのがとっても素敵なのですよ(〃∇〃)

自分は「雨 + 炎」とか「カフェ + 波」といった組合せが好きで良く聞いているのですが、「夜 + 電車」みたいな組合せも好きですし、「カフェ + 電車」みたいなちょっとガチャガチャした音も意外とはまるなー、といった感じで楽しんでいます。
soundrownは間違いなくオススメできる音サイドです。

ということで、色々な音 (というか音サイト) を書いてみました。
たかが音、されど音、です。
最初は単調で退屈かもしれませんが、一度慣れてしまうと作業と集中への入りが以前とは比べられないくらいになります。

音、大好きです(〃∇〃)
Recent Entries
Archives