1月一周目

先週の振り返り

先週は年明け一発目って感じだったが、モチベーションが自分の中で勝手に上がってきててよかった。
目標に関する本を読みおえて、改めて立ててみると意外に行けそうな気がした。
引き続き aws, chef などを触っているが、理解がかなり進んだように感じる。
chef のレシピを一から20分くらいで作れるようになっていたのは成長を感じた。
引き続きがんばる。
Nexus7 はすごく良い。

冬休み振り返り

今思い出したけど、北海道にかえった冬休み中にそこそこ vagrant を触っていたから理解が進んだんだった。
rails tutorial を倒すってのはできなかったけど、現在もりもり進行中である。

雑言

作ろうと思ってたやつあった
https://github.com/mattn/vim-textobj-url

読書途中経過

進んだ

  • マスタリングTCP/IP 入門第5版 6章まで読んだ
  • オペレーティングシステム 6章まで読んだ
  • プログラマの数学 3章まで読んだ

積んでる

  • 詳解UNIXプログラミング第5章まで読んだ
  • パーフェクトルビー5章まで読んだ
  • Webエンジニアのためのデータベース技術[実践]入門 7章まで読んだ
  • ネットワークはなぜつながるのか?
  • chef-solo 入門 #23 まで読んだ(どっかで手を動かしながらやる)

読み終えた

  • ザ・コーチ 最高の自分に出会える「目標の達人ノート」
  • 読む筋トレ

Elasticsearch_ebs

opsworks と elasticsearch についてのメモ

elasticsearch についての memo

  • クラスタリングした時に master-slave みたいになるのか?
    • ならない。すべてがマスタになる模様
    • 複数台立てておいて、片方落としておいて、立っている方にデータPUT して落としておいた方を立ててGETできる
  • elastic search s3 gateway はパフォーマンスの問題で deprecated になっている模様
    • なので EBS でやることになる。
  • chef の recipe を見ると、設定しておけば ebs を自動で作ってマウントまでしてくれる感じになっている
    • elasticsearch::ebs, elasticsearch::data のレシピを実行すれば良い感じ。
      • opsworks では, layers に elasticsearch::ebs, elasticsearch::data の順で登録すればおk
      • README に書いてある通りに設定が必要。具体的には data_bags/elasticsearch/data.json と aws の認証周りの設定が必要
  • 各アベイラビリティゾーンに分散しておいておいて、 internal loadbalancer に紐付ければ、片方が死んでも大丈夫
  • 災害時の復旧については、たぶん snapshot からの復旧に加えて、 index の再作成(upsert なAPI 叩きまくる) が必要
  • discovery については aws-instance プラグインみたいなのがあって、api 叩いてリスト取得してきている。

elasticsearch についての memo2

  • elasticsearch って aws のサービス名かと思ってたけど、別にそういうわけじゃない

elasticsearch についての memo3

opsworks のレイヤーで、internal LB をひもづけることはできると思うけど、
新しく作った elasticsearch node のインデックス作成とかしている時に紐づくとまずいので
いったん手動でやるようにする。(たぶんELBの死活監視を工夫すればうまいこと行ける)

opsworks の chef で役立つコマンド例

## setup サイクルを retry
opsworks-cli-agent run_command setup

## custom.json を dump
opsworks-cli-agent get_json > hoge.json

## ログをみる
opsworks-cli-agent show_log

## hoge.json を指定すれば、楽にもう一度ライフサイクルを指定できる
"/opt/aws/opsworks/current/bin/chef-solo" -j "hoge.json" -c "/opt/aws/opsworks/current/conf/solo.rb" -L "/var/lib/aws/opsworks/chef/2014-01-09-05-28-54-01.log" > "/var/lib/aws/opsworks/chef/2014-01-09-05-28-54-01.log.out" 2>&1


### 役に立つディレクトリ

## opsworks の chef-solo が走るときにログが出たり、走るときの json が出たりする
/var/lib/aws/opsworks

## opsworks の chef-solo のクックブックとかがこのへんにある。
/opt/aws/opsworks

use_iam_profile がうまく行かない件

gem の fog を使うところで use_iam_profile => true で渡しても全然うまく動かない問題があって、
ライブラリのバグかもと思ったけどなんか違うっぽくて、時間がなかったので custom.json で大人しく accesskey とかを指定した。
おそらく _request の時に credential の作成をしているんだけど、そこでミスっているんじゃないかなぁという予想。

参考資料というか調べてく時に必要だったこと。

aws

ザ・コーチって本を読んだ

所感

読み物形式の、ただの自己啓発本。
自己啓発本の部類は7つの習慣とか読んどけば多分良くて
ナポレオンヒルのやつとかも読んでたので
内容はあんまり大差ない気がする。
一応まとめたので書いておく。
内容がものすごく自己啓発本だから実際に自分で文字を打つと
すごい感じする。
こういうのは読むとすごく大事だと思うんだけど、
いざ毎日見る、みたいな仕組みづくりに挫折する場合がおおい。
どこか生活の一部に組み込めばいいかもしれない。
たとえばアラームとか。

達人になるための3つの輪

  • 知識
  • 道具
  • 能力

ことばについて

  • 目標
    • 目的を達成するためにもうけた目当て
  • 目的
    • 成し遂げようと目指す事柄
  • ゴール
    • 目的のための最終的な目印
    • 将来自分が実現させたいと心の中に思い描いている願い
  • ビジョン
    • 将来あるべき姿を描いたもの

ドリームツリー

目 的
| | |
ゴール ゴール ゴール
| | | | | |
目標 目標 目標 目標 目標 目標…

上記の5つの項目を設定することで良いこと

  • 共感者や協力者が現れる
  • 同じ価値観を持った仲間が増える

  • 目標に向かって努力することで人は成長する
  • 目標に向かって努力すれば、たとえそれがかなえられなかったとしても、人は精神的に強くなる
  • 誰かと同じ目標に向かってがんばることで、その後の人生の宝になる絆が生まれる
  • 目標を達成することで、達成感を味わえる
  • ゴールを目指すことで、どんな人間に成長したかが重要

ベネフィットとは

  • その道のりで、多くの共感者や協力者と出会い、さらに大きなことを成せる
  • 精神的に強くなり、更なる大きな決断の時に必要な勇気を手にする
  • 人間的に成長する
  • 人と人との絆が生まれ、人生の宝を得る
  • 人生が、ワクワク感やドキドキ感にあふれた、感情豊かで感動的なものになる
  • 知識, 選択力, 決断力, 集中力が増える
  • 知識・能力・道具が増えて価値ある人になる
  • 次の成功のための糧を手にする
  • どん底にいるとき、詩人になり、魅力的な人物になる
  • 可能性の扉が開き、想像もしなかった未来の自分に会える
  • 精神的な視点が高くなり、人生で見る景色が変わる
  • 人生を存分に堪能できる

夢やゴールや目標の作成を妨げるブレーキとは

  • 方向を誤った目的
  • 他者からの批判や避難、成長期に味わった他者との比較等による学習性無力感
  • 夢やゴールや目標に対する無知
  • 結果による人格否定
  • 弱みを克服することばかり強いられる経験
  • 変化に対する恐れ
  • 選択と決断に対する恐れ

その他

  • 目的はゆるぎなく、ゴールを手にする方法は無限にあると尻、目標は柔軟に対応する
  • ゴール達成を構成している要素を分解して、そこに期日と量と基準を盛り込んで旗(
  • ゴールのための行動計画を目標とすると、ノルマかして意欲が下がる
  • ゴールを設定したら、ゴールツリーを書いて、そのゴール達成を構成する知識と能力とツールに分解する
  • 行動を設計する
  • 目標には通過する状態を書く
  • ゴールは目指すが、それだけにとらわれて自分を見失わない
  • 目標の主語を私にして、いつ、何が、どうなるという表現にする
    • 何々するために、何何の状態になっている
  • 目標はやるべきことではなく、ゴールまでの通過点や指標とする
  • 目標を設定したら、そのプロセスで「開かれた質問」を自分自身に問いかけて、思考力や解決力を鍛える
    • どうしたらうまくできるだろうか?
    • 効率的にするにはどうすればいいだろうか?
    • 今日この目標にたいして何をしただろうか?など。

Chef_for_me

chef-solo, vagrant に慣れるためにそれっぽいチュートリアルをやる

tutorial っぽいのがあったのでやってみる

http://vialstudios.com/guide-authoring-cookbooks.html

chef, chef-solo について

ここが詳しい。 http://knowledg.sakura.ad.jp/tech/867/

start

基本的に自分のメモなのであんまり参考にならないと思うけど残しておく。

  • git install
    • すでにあったので省略
  • Install rbenv and ruby-build
    • すでにあったので省略
  • Install Ruby
    • すでにあったので省略
  • Install Berkshelf
    • すでにあったので省略
  • foodcritic を入れる。
$ gem install foodcritic
  • Install VirtualBox
    • すでにあったので省略
  • Install Vagrant
    • すでにあったので省略
  • Creating the Cookbook
/Users/vimtaku/vm/myface% berks cookbook myface --foodcritic
      create  myface/files/default
      create  myface/templates/default
      create  myface/attributes
      create  myface/definitions
      create  myface/libraries
      create  myface/providers
      create  myface/recipes
      create  myface/resources
      create  myface/recipes/default.rb
      create  myface/metadata.rb
      create  myface/LICENSE
      create  myface/README.md
      create  myface/Berksfile
      create  myface/Thorfile
      create  myface/chefignore
      create  myface/.gitignore
         run  git init from "./myface"
      create  myface/Gemfile
      create  myface/Vagrantfile

クックブックのスケルトンテンプレートを、 myface っていう名前で作成した。

  • Prepare your virtual environment
  • Starting your virtual machine
    • とりあえず言われたとおりにやってみろってことなのでやってみる
/Users/vimtaku/vm/myface/myface% bundle exec vagrant up
   ringing machine 'default' up with 'virtualbox' provider...
   [default] Box 'Berkshelf-CentOS-6.3-x86_64-minimal' was not found. Fetching box from specified URL for
   the provider 'virtualbox'. Note that if the URL does not have
   a box for this provider, you should interrupt Vagrant now and add
   the box yourself. Otherwise Vagrant will attempt to download the
   full box prior to discovering this error.
   Downloading or copying the box...
   Progress: 22% (Rate: 1045k/s, Estimated time remaining: 0:03:45)load: 1.56  cmd: curl 27613 waiting 0.84u 1.48s
   Progress: 50% (Rate: 1068k/s, Estimated time remaining: 0:02:03)load: 1.47  cmd: curl 27613 waiting 1.76u 3.18s
   Progress: 51% (Rate: 1147k/s, Estimated time remaining: 0:02:01)^U
   Progress: 85% (Rate: 1061k/s, Estimated time remaining: 0:00:38)load: 1.27  cmd: curl 27613 waiting 2.72u 4.99s
   Extracting box...te: 2251k/s, Estimated time remaining: 0:00:01)j
   Successfully added box 'Berkshelf-CentOS-6.3-x86_64-minimal' with provider 'virtualbox'!
   There are errors in the configuration of this machine. Please fix
   the following errors and try again:
   
   SSH:
   * The following settings shouldn't exist: max_tries, timeout
  • エラー。 ssh
    • https://github.com/berkshelf/berkshelf/pull/856
    • vagrant バージョンの違いによるものっぽい、削除して try
/Users/vimtaku/vm/myface/myface% bundle exec vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
[default] Importing base box 'Berkshelf-CentOS-6.3-x86_64-minimal'...
[default] Matching MAC address for NAT networking...
[default] Setting the name of the VM...
[default] Clearing any previously set forwarded ports...
[Berkshelf] This version of the Berkshelf plugin has not been fully tested on this version of Vagrant.
[Berkshelf] You should check for a newer version of vagrant-berkshelf.
[Berkshelf] If you encounter any errors with this version, please report them at https://github.com/RiotGames/vagrant-berkshelf/issues
[Berkshelf] You can also join the discussion in #berkshelf on Freenode.
[Berkshelf] Updating Vagrant's berkshelf: '/Users/vimtaku/.berkshelf/default/vagrant/berkshelf-20131227-27600-dzfcmn-default'
[Berkshelf] Using myface (0.1.0) from metadata
[default] Creating shared folders metadata...
[default] Clearing any previously set network interfaces...
[default] Preparing network interfaces based on configuration...
[default] Forwarding ports...
[default] -- 22 => 2222 (adapter 1)
[default] Booting VM...
[default] Waiting for machine to boot. This may take a few minutes...
[default] Machine booted and ready!
[default] Setting hostname...
[default] Configuring and enabling network interfaces...
[default] Mounting shared folders...
[default] -- /vagrant
[default] -- /tmp/vagrant-chef-1/chef-solo-1/cookbooks
[default] Running provisioner: chef_solo...
Generating chef JSON and uploading...
Running chef-solo...
[2013-12-27T09:05:00+00:00] INFO: *** Chef 10.14.2 ***
[2013-12-27T09:05:01+00:00] INFO: Setting the run_list to ["recipe[myface::default]"] from JSON
[2013-12-27T09:05:01+00:00] INFO: Run List is [recipe[myface::default]]
[2013-12-27T09:05:01+00:00] INFO: Run List expands to [myface::default]
[2013-12-27T09:05:01+00:00] INFO: Starting Chef Run for myface-berkshelf
[2013-12-27T09:05:01+00:00] INFO: Running start handlers
[2013-12-27T09:05:01+00:00] INFO: Start handlers complete.
[2013-12-27T09:05:01+00:00] INFO: Chef Run complete in 0.017946119 seconds
[2013-12-27T09:05:01+00:00] INFO: Running report handlers
[2013-12-27T09:05:01+00:00] INFO: Report handlers complete
  • 実行されているのは Vagrantfile の中に含まれていた run_list のところのリストだった
  • cent os とか書いているところは自分の好きな感じで設定できるよとのこと
  • このへんは知ってるけど不安定とかになったら vagrant destroy とかで消せるよとのこと

  • Deploying with Artifact Deploy
/Users/vimtaku/vm/myface/myface% vim recipes/default.rb

artifact_deploy "myface" do
  version "1.0.0"
  artifact_location "http://dl.dropbox.com/u/31081437/myface-1.0.0.tar.gz"
  deploy_to "/srv/myface"
  owner "myface"
  group "myface"
  action :deploy
end
  • provision command でもう一回 chef の provision を実行する。
  • berkshelf vagrant plugin の 魔法によって依存関係を勝手に解決してくれる!
[Berkshelf] This version of the Berkshelf plugin has not been fully tested on this version of Vagrant.
[Berkshelf] You should check for a newer version of vagrant-berkshelf.
[Berkshelf] If you encounter any errors with this version, please report them at https://github.com/RiotGames/vagrant-berkshelf/issues
[Berkshelf] You can also join the discussion in #berkshelf on Freenode.
[Berkshelf] Updating Vagrant's berkshelf: '/Users/vimtaku/.berkshelf/default/vagrant/berkshelf-20131227-27600-dzfcmn-default'
[Berkshelf] Using myface (0.1.0)
[default] Running provisioner: chef_solo...
Generating chef JSON and uploading...
Running chef-solo...
[2013-12-27T09:36:54+00:00] INFO: *** Chef 10.14.2 ***
[2013-12-27T09:36:54+00:00] INFO: Setting the run_list to ["recipe[myface::default]"] from JSON
[2013-12-27T09:36:54+00:00] INFO: Run List is [recipe[myface::default]]
[2013-12-27T09:36:54+00:00] INFO: Run List expands to [myface::default]
[2013-12-27T09:36:54+00:00] INFO: Starting Chef Run for myface-berkshelf
[2013-12-27T09:36:54+00:00] INFO: Running start handlers
[2013-12-27T09:36:54+00:00] INFO: Start handlers complete.

================================================================================
Recipe Compile Error in /tmp/vagrant-chef-1/chef-solo-1/cookbooks/myface/recipes/default.rb
================================================================================

NameError
---------
Cannot find a resource for artifact_deploy on centos version 6.3

Cookbook Trace:
---------------
  /tmp/vagrant-chef-1/chef-solo-1/cookbooks/myface/recipes/default.rb:9:in `from_file'

Relevant File Content:
----------------------
/tmp/vagrant-chef-1/chef-solo-1/cookbooks/myface/recipes/default.rb:

  1:  #
  2:  # Cookbook Name:: myface
  3:  # Recipe:: default
  4:  #
  5:  # Copyright (C) 2013 YOUR_NAME
  6:  # 
  7:  # All rights reserved - Do Not Redistribute
  8:  
  9:  artifact_deploy "myface" do

[2013-12-27T09:36:55+00:00] ERROR: Running exception handlers
[2013-12-27T09:36:55+00:00] ERROR: Exception handlers complete
[2013-12-27T09:36:55+00:00] FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out
[2013-12-27T09:36:55+00:00] FATAL: NameError: Cannot find a resource for artifact_deploy on centos version 6.3
  • 期待通りにエラッた
    • 俺らは全然 artifact_deploy はいらない
    • chef client が必要としているだけ
    • 俺らは LWRP が必要だっていうのを 俺らの cookbook に教えていないから教えてやる
  • Working with cookbook metadata
    • metadata.rb に教えてやる必要がある。
      • このファイルは結構初心者が見落としがちなんだけど結構大事なんだぜ
      • metadata.rb は Rubygems で言う gemspec みたいなやつで依存関係を記述する奴で
        • name attribute で名前とか
        • version attribute でバージョンとか
        • depends 定義で 依存する cookbooks の記述とか
        • conflict 定義で conflict する奴とか
        • maintainer attribute で メンテナとか
        • maintainer email とか
        • license 情報 とか
        • long_description を使って description とか をかける!
    • 全部の属性は必要ない
    • けど attribute を空にするのはやめておけとのこと
  • 追記してbundle exec vagrant provision を実行

  • ユーザ追記とかして

  • Using Berkshelf to gather dependencies
  • どっから dependencies を解決しているのか
  • metadata.rb をみていろいろやる
  • capistrano っぽいディレクトリ構成で deploy

  • Refactoring into attributes
    • attributes/default.rb に記入
default[:myface][:user] = "myface"
default[:myface][:group] = "myface"
group "#{node['myface']['group']}"

user "#{node['myface']['group']}" do
  group "#{node['myface']['group']}"
  system true
  shell "/bin/bash"
end

artifact_deploy "#{node['myface']['group']}" do
  version "1.0.0"
  artifact_location "/tmp/myface-1.0.0.tar.gz"
  deploy_to "/srv/myface"
  owner "#{node['myface']['user']}"
  group "#{node['myface']['group']}"
  action :deploy
end
  • artifact_location に /tmp 指定してるのは回線事情があって wget したやつをおいておいた.
  • うまく行った。書き方をちゃんとしないと validation で引っかかるので注意。

  • Idempotent recipes
    • レシピの冪とう性について書かれている
    • not_if とかないと
  • Configuring the application server
    • depends “tomcat”, “~> 0.11.0” を metadata.rb に追加する
    • include_recipe “tomcat” を recipes/default.rb に追加する
    • provision
  • include_recipe versus a Role with a run_list
    • スパイダーマンより、 大いなる力には、大いなる責任が伴う
    • ポートフォワーディングの設定
      • config.vm.network :forwarded_port, guest: 8080, host: 9090
  • Configuring Tomcat users
    • したがってやったらできた。
    • /myapp はなぜか動かない
    • まぁでもとりあえず受けれるところまで行ければおkなのでここまでとする
  • その下は
    • もっと attribute で可変にするところとか
    • database の LWRP を使う例とかi が書いてある
  • これが便利
require 'json'

file "/tmp/dna.json" do
  content JSON.pretty_generate(node)
end

Winter_vacation_todo

冬休みにやること

  • MUST
    • chef-solo, vagrant の自分用まとめ blog を書く
    • rails tutorial 倒す
  • WANNAAAABEEEEEEEEEEE
    • 多分今年も VAC ずっとやるんだろうから plugin 作る
    • 例の textobj
    • 例の operator
    • ぼくのかんがえたさいきょうの メモ環境 を作る
    • Unity ゲーム途中のやつ一区切りさす
    • 読書

Opsworks and Dotenv

もくじ


opsworks の cookbook 処理順について

opsworks では built-in cookbook -> custom cookbook の順に処理されて、
custom cookbook でいい感じにディレクトリを配置しても上書きはできない。
(ただし、 built-in cookbook で使用される recipe の attribute に適切な値を設定することは可能。)
http://docs.aws.amazon.com/opsworks/latest/userguide/customizing.html

opsworks と dotenv の依存関係

opsworks の built-in レシピの deploy::rails で使用する環境変数は、当然 .env に依存するのだけど、
.env の生成は custom cookbook でやっていて、上記にも書いたとおり上書きもできないから
rails は .env.test とか読んじゃって辛い。
これ回避する方法あるのかなぁ。。

(2014/1/26追記) 解決方法

load balancer の死活チェックを health_check.html とかを見るようにしておいて、
built in recipe の deploy 時点で一回 unicorn 立っちゃうけど user recipe の deploy のところで dotenv を作って、
unicorn とか再起動したのち、 health_check とかを
おけば割と問題ないんじゃないかってことになってる。

(2013/12/26追記) 解決方法2つ

考えた方法を2つ。

参考情報とか

このへんとか参考になりそうなんだけど、いまいち確信 answer はない。
https://forums.aws.amazon.com/forum.jspa?forumID=153&start=0

シンボリックリンクを使う

apps のリポジトリに予め、 .env -> /etc/.env みたいなシンボリックリンクをコミットしておいて、
deploy::rails の前に dotenv を配置する recipe で配布する。

{appname}/deploy/before_migrate.rb を使う

http://docs.opscode.com/resource_deploy.html
こいつがデプロイ時(というかマージ実行時)に呼ばれるためのフックでいい感じに recipe を呼ぶ。
これを参考にしたhttps://github.com/drnic/mydemoapp
とりあえず消えたらあれなのでフォークしておいた.
https://github.com/vimtaku/mydemoapp

aws

Jekyll Plugin が使えない

もくじ

jekyll のプラグイン入れたら github pages がエラーでてビルドできなくなる件の対処

こちらのブログgithub公式 を見てもらえればわかるけど、unsafe な plugin を入れられない模様。

だから、結論としては静的 html を吐き出す感じにした。

もともと master ブランチで運用していた人へのアドバイスと、実際に変更

約1分でできるからご安心を。

##  ソースブランチをコミット。以降はソースブランチで記事を書く
git checkout -b source
git push origin source:source

## _deploy を作ってそれを master として push する
mkdir _deploy
cd _deploy

## 適当に最初のコミットを作る、この辺はもっとかっこいい方法あると思うけど気にしない
git init
touch hoge
## 自分のいままでの master を remote add
git remote add origin git@github.com:vimtaku/vimtaku.github.com.git
git add .
git ci . -m 'Initial commit'
git push -f origin master:master

## _site を生成
cd ..
jekyll serve  --watch -P 4000 -H 127.0.0.1 --trace

## vim で Rakefile を修正
## これ(ひとのやつ)を参考に. https://github.com/gosyujin/gosyujin.github.com/commit/2943985064ced913767157eb0fdae431b68ac491
vim Rakefile

rake deploy

ちなみに

ソース見た感じ一日で複数ポストした場合には、ポストの並び順は辞書順っぽい。

年の瀬感(ただしクリスマス前)

年の瀬感

年の瀬っぽい雰囲気になってきた。
今年はクリスマスが平日のせいで、なんか違和感がある。
たいてい、クリスマスが絡むのは休みの日のイメージがあるんだけどなぁ。
まぁあんまり興味ないけど。俺キリスト教じゃないし。

最近のお仕事

jenkins さんと testflight でやりとりしてくれてうれしいみたいな環境作った。
基本的な部分は結構ググったら何でも出てくるんだけど、
ec2 上に立っているjenkins を master, ビルドする mac を slave として
環境を作る場合に、 今のところ master -> slave に ssh できない環境で
その場合に jnlp っていう java の http post を使った protocol を使うんだけど
その中で使用する http の通信を https にする方法がどうしても見つからなくて、
最終的にはやり取りする情報に大事なものを含まない見たいなあんまり美しくない方法になった。
事実上、通信経路で傍受されるっていうのはあんまり考えられないんだけど微妙。。
jenkins さんの 80番を 443 にするとかはいっぱい資料があるんだけど、
jnlp で行う通信を ssl にするのが無いんだよなぁ.
知っている方いたらぜひ教えてください。

劣等感、または覚悟について

なんかたいてい物事を知らないなぁみたいな劣等感を感じてたりするのって、
それを知る覚悟がないからなんじゃないかなぁと最近気づいた。
世の人間には等しく時間は流れるけど、人それぞれ時間の使い方はかわる。
だから、たとえば、土日に常に勉強する人もいるだろうし、
土日に常に趣味に勤しむ人もいるだろうし、
土日にテレビを見まくる人もいると思う。

そういう自分は、バラエティのテレビやドラマを見るのが大好きで、
たいていそういう時間の使い方をしてきたんだけど、残るものはあまり無くて
楽しいは楽しいけどまぁそんな感じ、みたいなことばかりであった。
というよりたぶん自分自身が人と比べて結構変わってて、たいていの物事にたいして
「楽しいは楽しいけど、まぁそんな感じ」感がすごいある。
これは完全に余談だけど、俺が出会ったすごく意識の高い学生とかは、世界を変える!
って感じだったりして大きいこと考えてんなって感じで尊敬する。

まぁ自分も曲がりなりにもエンジニアやってきて、この身につけた技術で
世界に貢献したいなとも思うようになってきた。
でも、身の回りにいるめちゃすごい人たちに出会って、まずはちゃんと勉強かなと
考えるようになった。

文脈が変だけど、このまえ、サントリー美術館に行ったときに興味本位で仏像展みたいなやつをみたんだけど
そういうものは当然、歴史的バックグラウンドなんかをしらないと
本当の意味で楽しめないんじゃないかと痛感した。

だから、俺は、これからは何でも勉強だと思って、学ぶことをやめない。
バラエティやドラマもたぶん見ると思う、好きだし。でも学ぶことへの姿勢は変わった。
いままで自分は、自分に関係ないことは基本的に知らなくていい、と考えていた。
でも、身の回りの、自分が尊敬する人に共通するのは、すべてを知ろうという姿勢だった。
あと、もう一つ重要なのは、すべての物事に主体的に取り組んでいるということだった。
これから人生まだ長いし、学ぶことによって見えるものは多分これからどんどん広がると思う。
だから、絶えず学ぶ姿勢で生きていこうと思う。

駑馬十駕である。

今週のサマリー

  • 先週のこれ(アウトプットも大事だけどインプットも相当大事だよね)にたいして
    • アウトプットもやっぱり大事だよ!!!!!!!!!!!!
  • アラケスに倒された時の気持ち
    • 引き続きわすれない用にね。
  • スケボー買った
    • 乗ったけどめっちゃムズイのでちゃんと練習する
  • ボルダリングについて
    • なんか何度も通ってたらかなりよく上れるようになった。うれしい。
  • Nexus7 めっちゃいい
    • 今週はあまりこれで読まなかったけど、引き続き勉強していく

読書途中経過

進んだ

  • マスタリングTCP/IP 入門第5版 4章まで読んだ
  • 詳解UNIXプログラミング第5章まで読んだ
  • chef-solo 入門 #23 まで読んだ(どっかで手を動かしながらやる)
  • オペレーティングシステム 6章まで読んだ

積んでる

  • パーフェクトルビー5章まで読んだ
  • Webエンジニアのためのデータベース技術[実践]入門 7章まで読んだ
  • ネットワークはなぜつながるのか?

Jekyll Blockquote 修正

jekyll で blockquote で改行とかいい感じにならない問題

なんか jekyll で 最初 markdown で > で引用できるって知らなくて
やってみたら空白とか改行がいい感じに削られてイラッとしたので
それっぽい plugin ないかと思って調べたら github にblockquote
plugin があったのでそれを使ってみたら全く同じだったので
fork して quote と 改行入れる風にした。

一応カスみたいな差分

https://github.com/vimtaku/jekyll-plugins/commit/810d8505d7bcbe0a4575ce5a8e20a366b9ddc0f9 gsub! 使った方がいいのでもういっこ差分足した

toc について

table of contents 機能が地味にあって

*
{:toc}

って感じで書くといいらしい。

ARP について調べた

目次

ARPとは

Address Resolution Protocol の略で、IP アドレスから MAC アドレスを求める時に
使用されるプロトコルです。
TCP などの通信を行うときには送信元、送信先の MAC アドレスが必要なので、
事前に ARP プロトコルを用いた MAC アドレスの解決が行われています。
ARP プロトコルをやりとりするコマンドが用意されていて, それが arp コマンドです。
しかし、毎通信ごとに ARP プロトコルを用いて MAC アドレスを求めるのは無駄です。
なので、通常、 内部的に arp テーブルを保持してそれを使用します。
ARP のやり取りには broadcast が使われます。

arp コマンドについて

$ man arp

ARP(8) BSD System Manager’s Manual ARP(8)

NAME
arp – address resolution display and control

SYNOPSIS
arp [-n] [-i interface] hostname
arp [-n] [-i interface] [-l] -a
arp -d hostname [pub] [ifscope interface]
arp -d [-i interface] -a
arp -s hostname ether_addr [temp] [reject] [blackhole] [pub [only]] [ifscope interface]
arp -S hostname ether_addr [temp] [reject] [blackhole] [pub [only]] [ifscope interface]
arp -f filename

DESCRIPTION
The arp utility displays and modifies the Internet-to-Ethernet address translation tables used by the address
resolution protocol (arp(4)). With no flags, the program displays the current ARP entry for hostname. The
host may be specified by name or by number, using Internet dot notation.

arp で実際に mac osx で実験

ここでは、 arp コマンドテーブルを表示したあと、
一度削除して、http通信を行った後に、テーブルを再度確認してみる。

/net% arp -a
? (192.168.1.1) at 0:1e:31:9e:c3:b4 on en0 ifscope [ethernet]
? (192.168.1.255) at ff:ff:ff:ff:ff:ff on en0 ifscope [ethernet]
/net% arp -d 192.168.1.1
arp: writing to routing socket: Operation not permitted
/net% sudo arp -d 192.168.1.1
Password:
192.168.1.1 (192.168.1.1) deleted
/net% arp -a
? (192.168.1.255) at ff:ff:ff:ff:ff:ff on en0 ifscope [ethernet]
? (192.168.1.1) at 0:1e:31:9e:c3:b4 on en0 ifscope [ethernet]

/net% telnet mixi.jp 80
Trying 110.44.179.199…
Connected to mixi.jp.
Escape character is ‘^]’.
^]
telnet> quit
Connection closed.
/net% arp -a
? (192.168.1.1) at 0:1e:31:9e:c3:b4 on en0 ifscope [ethernet]
? (192.168.1.255) at ff:ff:ff:ff:ff:ff on en0 ifscope [ethernet]

所感

arp -d のあとすぐに確認しても、192.168.1.1 のキャッシュは存在した。
おそらく、他のアプリケーションによる通信があるせい。

参考文献

マスタリングTCP/IP入門(5章)

あわせてよみたい

RFC826