Wordpressでブログを作った話
最近、イベントや本からのインプットは増えましたが、アウトプットが全然できてないなと感じています。じゃあアウトプットする場を作ろうじゃないか、ということで今回ブログを始めました。FacebookやTwitterも便利ですが、タイムラインが流れてしまうのでしっかりした文章を書くには不向きですよね...。自分の考えをきちんと整理して伝えるには、やぱりブログが便利だなと思っています。
今までははてなブログを使っていましたが、試しにWordPressで作ってみたときの手順を紹介します。
WordPressを選んだ理由
はてなブログ・livedoor Blog・アメブロなど、最近は様々なブログサービスがありますね!特にlivedoor Blogはドメイン設定や広告削除などが無料化されており、かなり魅力的でした。一度WordPressを使ってみたかったので、今回はレンタルサーバ+WordPressでブログを作ることにしました。
レンタルサーバを選ぶ
WordPressを使うことを決めたら、次はレンタルサーバ選びです。選ぶ基準は、なんといっても安さ!最初はアクセス数も少ないのでサーバの安定性など考えず、とにかくランニングコストを抑えて安く続けていくつもりです。選択肢にあがったのはロリポップとミニバードです。値段はほぼ同じなので、使えるMySQLの数が多いミニバードを選びました。
注:後から気づいたのですが、ミニバードだとSSH使えないんですね...。サーバに直接入れないのは不便なので、そのうちさくらなどに乗り換えるかもしれません。
独自ドメインの取得
独自ドメインのほうがSEOに有利と聞き(すみません、SEOについて勉強中です...)、お名前.comで独自ドメインを取りました。別にアフィリエイトで食べていくつもりはないですが、やるからには多くの人に見てほしいですし。お名前.comで取得したドメインをミニバードに設定する方法については、この記事を参考にしました。Whois認証をする時にミニバードのネームサーバがわからずハマりましたが、ミニバードのページに普通に書いてました。
WordPressのインストール
これはミニバードの「簡単インストール」からワンクリックでできます。便利な世の中になったもんだ。
次にWordPressのテーマを決めます。いろんなテーマがあって目移りしますが、正直よくわからない 笑。どうせ後から変えられますし、まずは人気のものを使っておけばいいだろうと思いsimplicityに決定!
おわりに
これでひと通りの設定は完了です。ここまでやるのに丸一日かかってしまいました 笑。やはり、既存のブログサービスを使うのに比べると時間がかかりますね。ただ、その分自由度は高いという印象です。ブログを作っただけで満足せずに、これから定期的に更新していきます!
本を読むのに必要とした時間を1とすれば、5ぐらいの時間を、何が書いてあったのか、それは自分にとってどういう意味があるのか、自分の会社にとってどういう意味があるのか、われわれの社会にとってどういう意味があるのか、そういうことを考える時間に充てなさい。 大前研一
普通自動車免許一発合格への道
免許の更新に行くのを忘れて、また1から試験を受け直すことになりました。これまで免許を持っていた人でも、きちんと対策しないと合格は難しいです。
参考サイト
- 一発試験で運転免許を取得する!:一発試験についての様々な情報が載っており、参考になります。
- 運転免許試験のご案内:日程・費用・持ち物など詳細な情報が書かれています。試験前に確認しました。
- シグナル・ドライビングスクール:技能試験の練習。
- 横浜ドライビングスクール:特定教習を安く・短期間で受講できる。
参考書
- 1回でうかる!普通免許 ポイント攻略 問題集:全ての問題が解け、標識を覚えていれば学科は受かります。
スケジュール
日程 | 内容 | 場所 | 費用 (円) |
---|---|---|---|
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
トラブルシューティング
- 一度削除したアプリを再インストールしたい
- /var/db/.puppet_compressed_app_installed_${APP_NAME}を削除する
- uild-aux/install-sh: Permission denied
- https://github.com/Homebrew/homebrew/wiki/troubleshootingを確認。私の場合はbrew updateで直った。
Ruby技術者認定試験 Silver の勉強方法
Ruby技術者認定試験 Silverに合格しました!標準ライブラリについての問題がほとんどなので、普段Rubyを使っている人ならば2,3日で合格できます。
勉強方法
Ruby技術者認定試験 公式ガイドをやりました。Silver/Gold対応の参考書もありますが、Goldにしか出ない内容も書かれているため勉強しにくいようです。
- 公式ガイドをざっと読む
- 巻末の問題集をやる。考えて分かる問題はないので、分からなければすぐに解答を見る。
- 新しく知った内容をまとめる。
- 解けなかった問題だけリストアップして再度問題集をやる。
振り返り
- 勉強内容をまとめるのは良い。同じところで何度も詰まることがなくなる。
- 勉強した時間を測定しておくべきだった。どれくらいの勉強時間で合格できるかの参考になるはず。
勉強内容のまとめ
演算子
比較演算子の比較。
- == 同じものか調べる
- === 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
楽天テクノロジーカンファレンス 2013 に行ってきました
楽天テクノロジーカンファレンスに参加してきました。Dave Thomas, James O. Coplien, Matzなどの有名人の話を聞けたのが良かったです。
UX Analytics - How to measure ROI of content and functions
UXの測定をするには、以下の4つのステップを実行する。
- ユーザフロー図を書く
- 画面遷移図を書く
- KPIを決める
- データを収集する
Elixir: The Joy of Ruby, the Power of Erlang
Dave Thomasの講演。Elixirという言語の紹介。すぐに使えそうな場面は思いつかないが、なかなか面白そう。
Aiming the Moving Target
Matzの講演。
昔はコンピュータが高価だったため、顧客満足よりもプロジェクトが失敗しないことが重要だった。今は何度も試せるので、失敗を前提としたTry And Error戦略のほうがよい。
Technology Evolution at Viki / developing VOD apps for Smart TVs (Wuaki.tv)
VikiとWuaki.tvの2社で使っている技術の紹介。
- High Performance
- Network time: Amazon Route 53を使い、最も近いサーバに転送することで、ネットワーク時間を削減する。
- Generation time: 事前に取得したデータをメモリに載せておくことで、APIのレスポンスタイムを25ms以下にしている。
- 複数プラットフォーム対応
- TVのプラットフォームごとにアプリを作るとメンテナンス性が下がる。そこで、プラットフォームごとのアプリを生成するアプリを作成することにした。
- テスト
- Jasmine + KarmaでJSのテストを実施している。
Do-it-yourself Organizational Patterns at Home
James O. Coplienの講演。組織を改善するための方法。
- CRCカードを作り、それぞれの人の責務と、どんな人と連携して仕事をしているか把握する。
- 関係が深い人は赤色、薄い人は青色の線でつなぎ、組織のグラフを作る。
- 現状を把握する。特定の人に責務が集中しているなどの問題があれば改善していく。
LT
- 「HOME'S へやくる!」アプリの紹介。気持ちのいいインターフェースになっている。引っ越すときに使ってみたい。
- 一番使われているLinuxディストリビューションはMintらしい。Ubuntuかと思っていた。Ubuntuよりデスクトップが使いやすそうなので、今度Linuxを入れるときはMintにしよう。
Web+DB PRESS vol.77
Amazon Web Services 最新活用
BoxenによるMacの開発環境構築&構成管理
Macの開発環境構築のためのツールBoxenの紹介。Puppetベース。部署で共通の開発環境を使えるようになれば便利そう。ただ、全員がばらばらのOS (Windows, Mac, Unix) を使っている場合は、あまり効果がないかも。
海外テック情報局
- The Three Best Debugging Tools - Mike Perham:最良のデバッグツールは・同僚・寝ること・システムに対する知識
- Launching airbnb.jp in record time - Airbnb Engineering:どうやって翻訳ファイルを作成するか。1. ページが見られた回数をカウントし、優先度付け 2. スクリーンショットを取り、その文言が使われる状況を翻訳者に伝える。