tanihito’s blog

デジタル・新規事業開発・健康など、興味のあることについてつらつらと書いてきます。

音声で情報収集をする方法

週刊ダイヤモンド 2015年6/6号にセブン&アイ・ホールディングスの鈴木会長の記事が載っていました。鈴木敏文会長といえば、コンビニエンスストアセブン-イレブンを大成功させたスーパー経営者。いったいどうやってあれだけの成果を出したのだろう思い読んでみると、面白い情報収集方法が書かれていました。

鈴木会長は移動中、常に車のラジオを付けっ放しにしているのだ。ニュースのみならず、情報番組などにも耳を傾け、流行や世相の変化などを捉えているという。


僕はあまりラジオを聞きませんが、音声情報を取得することの重要性は実感しています。歩いている時や満員電車など、本やスマホを使うことが難しいことはよくあります。そんな時でも音声であれば他の人の邪魔にならず、時間を有効活用することができます。

そこで今回は、僕が普段どうやって耳で情報収集をしているのかを説明します。これで一歩でも鈴木会長に近づけるはず 笑

1. ワイヤレスイヤホンを買う


まずはイヤホンを買いましょう。ここで重要なのは、ワイヤレスイヤホンを選ぶこと!有線のイヤホンはコードが絡まってしまうことが多く、イヤホンを取り出すのが面倒くさくなってしまいます。何か新しいことを始めるときは、できるだけ障害を少なくすることがポイントです。

僕が使っているイヤホンはPLANTRONICSのものですが、音飛びが少なくバッテリーも一日もつため満足しています。

2. 音声ファイルを取得する


イヤホンを買ったら、つぎに音源を準備します。大きくラジオ・PodCast・オーディオブックの3つがありますね。ラジオはradiko.jpが有名です。ラジオ本体を持っていない人でも、PCかスマホがあればラジオを聞くことができ、音質もいいです。PodCastもいろいろな番組がありますね。ただ、僕が良く利用しているのはオーディオブックです。読みたい本があってもまとまった時間を取ることが難しいため、通勤中はいつもオーディオブックを聞いています。日本ではFeBeというサイトが一番有名です。

3. 音声を聴く


ここまで準備ができればあとは聴くだけです。楽しいオーディオライフを!

僕が生命保険に入ったワケ

プレデンシャル保険の営業マンに勧められて、生命保険に入ってきました。今まで保険が必要だと感じたことはありませんが、調べてみると若い人が入るメリットもあるんだなと驚きました。保険という人生で2番目に高い買い物を成功させるために、僕が保険を選んだ理由を説明します!

保険を選ぶポイント

まず、保険を選ぶ時に大事なことは3つあります。1つ目は、「自分でしっかりと調べる」ことです。保険の営業マンは優秀な人が多く、質問した内容に的確に回答してくれます。しかし、こちらから何も質問しなければ、営業マンにとって都合のよい高額な商品を売り付けるられてしまうかもしれません。保険について最低限は調べておき、冷静に話を聞けるようにしましょう。

2つ目は、「自分に必要な保証の内容を決める」ことです。保険には様々な特約がついていますが、自分が許容できる程度のリスクであれば保険をかける必要はありません。例えば、100万円の貯蓄がある人が怪我をして5万円の治療費がかかったとしても、生活にはなんの支障もありません。これは許容できるリスクなので、少額の治療費を保険でカバーする必要はないということです。一方で、怪我をして一生働けなくなったとすると大問題です。このように、自分が許容できない大きなリスクについてのみ保険をかければ、保険金を抑えることができます。

3つ目は、「選択の基準を決める」ことです。様々な保険が多くの会社から提供されており、すべての内容を把握することは不可能です。まずは自分が重要視する項目をはっきりとさせ、その項目に最もマッチする保険を選ぶようにしましょう。

実際の流れ

では、実際に私がどうやって保険を選んだのかを説明します。営業マンと初めて会って保険について知った後に、まずは保険について調べ始めました。具体的には、ほけんの窓口に行ったり、保険の教科書というサイトを見たりしました。こうやって基本的な知識を得た後で、疑問点を営業マンに質問すると短時間で知識を得ることができます。

ある程度知識をつけた後は、自分にとって必要な保証について考えました。私の場合、保険をかける必要があると考えたのは、1.老後に貯蓄が足りなくなるリスク 2.病気や怪我などで働けなくなるリスクの2つです。これらについて選択の基準を決め、いくつかの候補の中から保険を選んでいきます。

老後の貯蓄のための保険には、返戻率を再優先しました。返戻率とは、支払った保険金の合計に対して、もらえる保険金の割合です。この返戻率が大きいほど、貯蓄性の高い保険ということになります。一般的に、円よりも外貨のほうが返戻率が高くなり、払い込む期間が短くなるほど返戻率が高くなります。そこで、私はプルデンシャルのドル建て15年終身保険を選択しました。

大きな病気や怪我(高度障害)のための保険を選ぶ基準は、安さです。生活していくのに必要な金額を、最低限の金額で保証することを意識しました。その場合、掛け捨ての収入保障保険が最も効果的になります。収入保障保険は、病気になってから定年までの間毎月決まった金額を受け取ることができるものです。高齢になってから病気になった場合に受け取る金額は少なくなるという欠点はありますが、その分保険金も安くなっています。こちらの保険についてはどの会社も保険料があまり変わらなかったため、終身保険と同じくプルデンシャルにしました。

終わりに

いかがでしたでしょうか。保険は効果が目に見えにくく、決断するのが難しい商品です。あとで後悔しないように、しっかりと考えてから選ぶことをおすすめします。

Wordpressでブログを作った話

最近、イベントや本からのインプットは増えましたが、アウトプットが全然できてないなと感じています。じゃあアウトプットする場を作ろうじゃないか、ということで今回ブログを始めました。FacebookTwitterも便利ですが、タイムラインが流れてしまうのでしっかりした文章を書くには不向きですよね...。自分の考えをきちんと整理して伝えるには、やぱりブログが便利だなと思っています。

今までははてなブログを使っていましたが、試しにWordPressで作ってみたときの手順を紹介します。

WordPressを選んだ理由


はてなブログlivedoor Blogアメブロなど、最近は様々なブログサービスがありますね!特にlivedoor Blogドメイン設定や広告削除などが無料化されており、かなり魅力的でした。一度WordPressを使ってみたかったので、今回はレンタルサーバ+WordPressでブログを作ることにしました。

レンタルサーバを選ぶ


WordPressを使うことを決めたら、次はレンタルサーバ選びです。選ぶ基準は、なんといっても安さ!最初はアクセス数も少ないのでサーバの安定性など考えず、とにかくランニングコストを抑えて安く続けていくつもりです。選択肢にあがったのはロリポップミニバードです。値段はほぼ同じなので、使えるMySQLの数が多いミニバードを選びました。

注:後から気づいたのですが、ミニバードだとSSH使えないんですね...。サーバに直接入れないのは不便なので、そのうちさくらなどに乗り換えるかもしれません。

独自ドメインの取得


独自ドメインのほうがSEOに有利と聞き(すみません、SEOについて勉強中です...)、お名前.com独自ドメインを取りました。別にアフィリエイトで食べていくつもりはないですが、やるからには多くの人に見てほしいですし。お名前.comで取得したドメインをミニバードに設定する方法については、この記事を参考にしました。Whois認証をする時にミニバードのネームサーバがわからずハマりましたが、ミニバードのページに普通に書いてました。

WordPressのインストール


これはミニバードの「簡単インストール」からワンクリックでできます。便利な世の中になったもんだ。

次にWordPressのテーマを決めます。いろんなテーマがあって目移りしますが、正直よくわからない 笑。どうせ後から変えられますし、まずは人気のものを使っておけばいいだろうと思いsimplicityに決定!

おわりに


これでひと通りの設定は完了です。ここまでやるのに丸一日かかってしまいました 笑。やはり、既存のブログサービスを使うのに比べると時間がかかりますね。ただ、その分自由度は高いという印象です。ブログを作っただけで満足せずに、これから定期的に更新していきます!

本を読むのに必要とした時間を1とすれば、5ぐらいの時間を、何が書いてあったのか、それは自分にとってどういう意味があるのか、自分の会社にとってどういう意味があるのか、われわれの社会にとってどういう意味があるのか、そういうことを考える時間に充てなさい。 大前研一

普通自動車免許一発合格への道

免許の更新に行くのを忘れて、また1から試験を受け直すことになりました。これまで免許を持っていた人でも、きちんと対策しないと合格は難しいです。

参考サイト

  1. シグナル・ドライビングスクール:技能試験の練習。
  2. 横浜ドライビングスクール:特定教習を安く・短期間で受講できる。

参考書

スケジュール

日程 内容 場所 費用 (円)
12/27 (金) 仮免学科試験 鮫洲試験場 3000
1/11 (土) 仮免技能の練習 下北沢自動車学校 7500
1/18 (土) 仮免技能の練習 府中試験場 18000
1/21 (火) 仮免技能試験 府中試験場 2650
1/26 (日) 路上コースの練習 鮫洲 9500
2/6 (木) 本免学科試験 鮫洲試験場 2200
2/8 (土) 特定教習 横浜ドライビングスクール 13550
2/23 (日) 車庫入れの練習 下北沢自動車学校 7500
3/3 (月) 午前 路上コースの練習 鮫洲 9500
3/3 (月) 午後 本免技能試験 鮫洲試験場 850
3/13 (木) 本免技能試験 鮫洲試験場 3050
3/13 (木) 免許発行 鮫洲試験場 2050

合計

費用 79350円
日数 10日

Ruby技術者認定試験 Gold の勉強方法

Ruby技術者認定試験Goldに合格しました!Silverに比べると、継承関係など暗記ではなく考えれば分かる問題が増えました。難易度は上がっていますが、クイズのようで面白い試験です。

勉強方法

Ruby公式資格教科書の演習問題を解いて、分からないところは解説を読みました。勉強時間は休日4日ほど。

勉強内容

環境変数
# 環境変数はENVにStringを渡して取得できる
ENV["HOME"] #=> "/Users/tanihito"
# Symbolではダメ
ENV[:HOME] #=> TypeError
文法

'-'を使って桁数を見やすく表示できる

100_000 #=> 100000
ブロック

{ ... } の方が do ... end ブロックよりも強く結合する。

def foo(arg)
  yield arg
end
# fooの引数は"arg"とブロック
foo "arg" do |msg| p msg end #=> "arg"
# ブロックは"arg"の引数とみなされる
foo "arg" { |msg| p msg } #=> SyntaxError

block_given?を使えば、メソッドにブロックが与えられたか判定できる。

def foo
  block_given? ? yield : "no block"
end  
foo #=> "no block"
foo {p "block"} #=> "block"
引数展開

実引数に'*'をつけると、配列を引数に展開できる。

def foo(a, *b)
  foo2(*b) # 配列[2, 3]を引数に展開
end

def foo2(c, d)
  d
end

foo(1, 2, 3) #=> 3
オープンクラス
  • オープンクラス:定義済みのクラスを再定義できるクラス
  • クラスの再オープン:一度定義したクラスを再定義のために開くこと
# クラスを定義
class Klass
  def foo; end
end

# クラスを再オープンしてメソッドを追加
class Klass
  def foo2; end
  alias :foo3 :foo
  undef :foo2
end

Klass.instance_methods(false) #=> [:foo, :foo3]
Module
  • moduleはnewできない
  • moduleは継承できない
  • moduleはincludeできる
Mix-in

includeするとmoduleをスーパークラスとの間に組み入れる。

module Bar1; end
module Bar2; end
class Foo; end

class FooExt < Foo
  include Bar1
  include Bar2
end

# ancestorsは変更されるが、superclassは変更されない
FooExt.ancestors #=> [FooExt, Bar2, Bar1, Foo, Object, Kernel, BasicObject]
FooExt.superclass #=> Foo
特異クラス
class Foo; end
foo1 = Foo.new
foo2 = Foo.new

# 特異メソッドは特定のインスタンスだけで使える
def foo1.foo1_method; 'foo1' end
foo1.foo1_method #=> "foo1"
foo2.foo1_method #=> NoMethodError

# 特異クラスのインスタンスメソッドとして実装される
Foo1Singleton = class << foo1; self; end
Foo1Singleton.instance_methods(false) #=> [:foo1_method]

# extendすると特異クラスにincludeしたことになる
module Bar; end
foo1.extend(Bar)
Foo1Singleton.ancestors #=> [Bar, Foo, Object, Kernel, BasicObject]
日付・時間
# Timeの単位は秒。内部的にFloatで時刻を持っている。
t = Time.mktime(2014, 1, 2, 3, 4, 5, 6)
t     #=> 2014-01-02 03:04:05 +0900
t + 1 #=> 2014-01-02 03:04:06 +0900
(t - t).class #=> Float

# Dateの単位は日。内部的にRationalで日付を持っている。
require 'date'
d = Date.new
puts d    #=> -4712-01-01
puts d +1 #=> -4712-01-02
(d - d).class #=> Rational

Boxenを使ったMacの開発環境構築

Github社が作ったMacの設定ツール Boxenを使って、Mac Book Airの開発環境を作りました。結構はまった...。

事前準備

競合するツールを削除します。

インストール

## Boxenのインストール
sudo mkdir -p /opt/boxen
sudo chown $USER:admin /opt/boxen
git clone https://github.com/boxen/our-boxen /opt/boxen/repo
cd /opt/boxen/repo
git remote rm origin
git remote add origin git@github.com:tanihito/my-boxen.git
git push -u origin master

## インストールしたいライブラリを追加
vim Puppetfile
vim modules/people/manifests/tanihito.pp

## ライブラリのインストール
cd /opt/boxen/repo
script/boxen --no-fde

## zshrcに追加
[ -f /opt/boxen/env.sh ] && source /opt/boxen/env.sh

トラブルシューティング

Ruby技術者認定試験 Silver の勉強方法

Ruby技術者認定試験 Silverに合格しました!標準ライブラリについての問題がほとんどなので、普段Rubyを使っている人ならば2,3日で合格できます。

勉強方法

Ruby技術者認定試験 公式ガイドをやりました。Silver/Gold対応の参考書もありますが、Goldにしか出ない内容も書かれているため勉強しにくいようです。

  1. 公式ガイドをざっと読む
  2. 巻末の問題集をやる。考えて分かる問題はないので、分からなければすぐに解答を見る。
  3. 新しく知った内容をまとめる。
  4. 解けなかった問題だけリストアップして再度問題集をやる。

振り返り

  • 勉強内容をまとめるのは良い。同じところで何度も詰まることがなくなる。
  • 勉強した時間を測定しておくべきだった。どれくらいの勉強時間で合格できるかの参考になるはず。

勉強内容のまとめ

演算子

比較演算子の比較。

  • == 同じものか調べる
  • === case式でオブジェクトをテストする
  • eql? ハッシュの内部で「同じキーかどうか」を調べる
  • equal? オブジェクトの同一性を調べる

以下の演算子は再定義できない。

引数

C言語と違い、ARGVにはプログラム名は入っていない。コマンドライン引数のみ入っている。

ruby foo.rb foo bar
#=> "ARGV[0]: foo"
#=> "ARGV[1]: bar"
String

String#indexの第2引数にはoffsetを渡す。

s = "abcabc"
s.index("a") #=> 0
s.index("a", 1) #=> 3

文字列を置換する様々な方法

s = "abcdef"
s[1..2] = "X" # 1文字目から2文字目を置換
p s #=> "aXdef"

s = "abcdef"
s[1,3] = "X" # 1文字目から3文字分を置換
p s #=> "aXef"

s = "abcabc"
s["bc"] = "X" # 部分文字列"bc"と最初に一致した箇所を置換
p s #=> "aXabc"

s = "abcabc"
s[/b./] = "X" # 正規表現にマッチした箇所を置換
p s #=> aXabc"

String#splitの第2引数にはlimitを渡す。

"foo\nbar\nbaz".split("\n") #=> ["foo", "bar", "baz"]
"foo\nbar\nbaz".split("\n",2) #=> ["foo", "bar\nbaz"]

chop vs chomp

# chopは行末の1文字を削除する。chompは行末の行区切り文字のみ削除する。
"abc".chop #=> "ab"
"abc".chomp #=> "abc"

# 行末が\r\nの場合はchop, chompともに2文字削除する。
"abc\r\n".chop #=> "abc"
"abc\r\n".chomp #=> "abc"

# chomp("")とした場合、末尾の連続する改行コードをすべて取り除く。
"abc\n\r\r\n".chop #=> "abc\n\r"
"abc\n\r\r\n".chomp #=> "abc\n\r"
"abc\r\n\r\n".chomp("") #=> "abc"
Array

map = collect. find = detect. find_all = select.

a = [1, 2, 3, 4]
a.map { |i| i * 2 } #=> [2, 4, 6, 8]
a.collect { |i| i * 2 } #=> [2, 4, 6, 8]

a.find { |i| i % 2 == 0 } #=> 2
a.detect { |i| i % 2 == 0 } #=> 2

a.find_all { |i| i % 2 == 0 } #=> [2, 4]
a.select { |i| i % 2 == 0 } #=> [2, 4]

compactメソッドは配列からnilを取り除く

[1, nil, "b"].compact #=> [1, "b"]

sliceメソッドは、[]メソッドの別名。

a = ["a", "b", "c", "d", "e"]
a[0, 2] #=> ["a", "b"]
a.slice(0, 2) #=> ["a", "b"]
Hash

Hash#sortの出力はArrayになる

h = {b: 2, a: 1, c: 3}
h.sort #=> [[:a, 1], [:b, 2], [:c, 3]]

Hash.newの引数がデフォルトの値になる

h = Hash.new
h[:foo] #=> nil
h = Hash.new(:bar)
h[:foo] #=> :bar
File

File.openの様々なモード。

# fooと書かれたfoo.txtがあった場合

# rモード:読み込みのみ。デフォルト。
File.open("foo.txt", "r") do |f|
  p f.read(2) #=> "fo"
  #f.write("ba") #=> IOError: not opened for writing
end
%x"cat foo.txt" #=> "foo\n"

# wモード:書き込みのみ。ファイルは初期化される。
File.open("foo.txt", "w") do |f|
  # p f.read(2) #=> IOError: not opened for reading
  f.write("ba")
end
%x"cat foo.txt" #=> "ba"

# aモード:書き込みのみ。ファイル末尾に追記される。
File.open("foo.txt", "a") do |f|
  # p f.read(2) #=> IOError: not opened for reading
  f.write("ba")
end
%x"cat foo.txt" #=> "foo\nba"

# r+モード:読み込み、書き込み両方できる。
File.open("foo.txt", "r+") do |f|
  p f.read(2) #=> "fo"
  f.write("ba")
end
%x"cat foo.txt" #=> "foba"

# w+モード:読み込み、書き込み両方できる。ファイルは最初に初期化される。
File.open("foo.txt", "w+") do |f|
  p f.read(2) #=> nil
  f.write("ba")
end
%x"cat foo.txt" #=> "ba"

# a+モード:読み込み、書き込み両方できる。書き込みはファイル末尾から行う。
File.open("foo.txt", "a+") do |f|
  p f.read(2) #=> "fo" 
  f.write("ba")
end
%x"cat foo.txt" #=> "foo\nba"
Regexp

\Aは文字列の先頭にマッチする。^は文字列の先頭か改行文字の直後にマッチする。

/^abc/ =~ "\n\nabc" #=> 2
/\Aabc/ =~ "\n\nabc" #=> nil
Mix-in

includeはクラスに、extendはインスタンスに使用する。

module Greeting
  def hello; puts "Hello"; end
end

class Foo
  include Greeting
end
f = Foo.new
f.hello #=> Hello

class Bar; end
b = Bar.new
b.extend Greeting
b.hello #=> Hello