再起動中...

そのうち移行するはず

Ansible で疑問に思ってたことを聞いてみた

昨日、@usaturn さんに Ansible について聞く機会があったので、お話を聞かせていただいた。

Q. Ansible って、結構使ってますか?
A. 普通に使ってます。

Q. Ansible + Vagrant の場合、ユーザーはどうしていますか?vagrant ユーザーを使用していますか?
A. Vagrantは使っていません。Ansibleを利用する際のユーザは、共用ユーザを使っています。

Q. Galaxy に良い Role がないのですが、どうしていますか?
A. 適当に playbook を書いています。
そもそも Ansible を使う人の多くは、簡単に使用したくて使っている人が多いように見えます。

Q. 設定ファイルとか jinja2 で書いていますか?
A. そこまでやりたいのですが、できていないのが現状です。

Ansible で PATH を追加する系の処理は、なんとかならないものか?だった話

open source configuration management utility という分野で Chef, Puppet もあるが Ansible しかわからないので、このタイトル。

インストール手順に PATH を通すために .bashrc に記載が必要という処理は、わりとよくある。

例えば nodebrew だと以下の様な PATH の設定を .bashrc に記載するのが手順。

export PATH=$HOME/.nodebrew/current/bin:$PATH

これを正直に task に落とすと、こんな感じになる。

shell: echo export PATH=/home/{{ user }}/.nodebrew/current/bin:$PATH >> /home/{{ user }}/.bashrc

この書き方だと複数回プロビジョニングをした時に、

export PATH=/home/{{ user }}/.nodebrew/current/bin:$PATH

がプロビジョニングした回数だけ .bashrc に記載されてしまう。

なにかよい方法はないかな?

      • -

などと、書いていたら 普通にファイルの存在確認して、ファイルがなければ追加でいいのではないか?と思うようになった。

バックパックを考えた

バックパックのサイトを見て、たまに買おうかどうしようか悩む。
毎回、位置から悩むのは馬鹿らしいので、ここまで選んだものをピックアップ!

この中から選べばいいんじゃないかな。

1. 通気性ならこれ!
deuter
http://www.deuter.com/JP/jp/%E3%83%88%E3%83%A9%E3%83%99%E3%83%AB/grant-80604-446.html
http://www.deuter.com/JP/jp/%E3%83%88%E3%83%A9%E3%83%99%E3%83%AB/grant-pro-80614-446.html

2. Apple 公認?
http://www.thule.com/ja-jp/jp/products/luggage-and-bags/daypacks-and-messengers/thule-crossover-backpacks/thule-crossover-32l-_-tl_85854231374

3. city 向き (chrome)
http://www.chromeindustries.com/us/en/bags/laptop-bags

4. スラっとしていて、PC を上に置くのに向いているかも…
http://goincase.com/shop/products/bags/backpacks

jq を使ってみた

jq を使ってみた

json の結果を見やすく整形するツール
だいぶ前に話題になっていたのを、ようやくサワれる感じ。

ここからはチュートリアルに沿って見ていく。

Twitter の 直近 5 個の json という単語を含む検索結果の tweet を拾ってくれる API を叩く。

curl 'http://search.twitter.com/search.json?q=json&rpp=5&include_entities=true'

これだと見難いので、適当に見やすくする。
これは、jq に '.' を渡せばよい

curl 'http://search.twitter.com/search.json?q=json&rpp=5&include_entities=true' | jq '.'

結果は、見るとわかるが results という配列の中に入っている。

そこで、results の一つ目の配列の要素をみてみる。

curl 'http://search.twitter.com/search.json?q=json&rpp=5&include_entities=true' | jq '.results[0]'

そうすると、直近の json を含む twitter の検索結果がとれた。

ここで、誰がどんなことを発言しているのかを切り抜きたい。
from_user 要素と text 要素が対応しているので、それらを切り出す。

curl 'http://search.twitter.com/search.json?q=json&rpp=5&include_entities=true' | jq '.results[0] | {from_user, text}'

すべての from_user 要素と text 要素を取り出す。

curl 'http://search.twitter.com/search.json?q=json&rpp=5&include_entities=true' | jq '.results[] | {from_user, text}'
                              • -

次のような返り値がある場合、次のようにパースできるらしい

{
  "user_mentions": [],
  "urls": [{
      "indices": [83, 103],
      "display_url": "bit.ly/StniqT",
      "expanded_url": "http://bit.ly/StniqT",
      "url": "http://t.co/28Jesbio"
  }],
  "hashtags": [
    {"indices": [108, 114], "text": "Apple" },
    {"indices": [121, 129], "text": "Awesome"}
  ]
}
jq '.results[] | {from_user, text, urls: [.entities.urls[].url]}'

「INVALID_SESSION_ID: Invalid Session ID found in SessionHeader: Illegal Session」エラーが発生した場合

以下の2つの可能性が考えられる。
・必要な metadata がない
・OS の書き込み権限がない

[解決方法]
・OS の書き込み権限がない

清らかな心で、一旦 Force.com IDE を閉じる。
スタートから、Force.com IDE を右クリックし「管理者権限で実行」をクリック。

とりあえず、こっちからためしてみると良いですよ

・必要な metadata がない

force.com IDE を起動する。
プロジェクトディレクトリを右クリックし、[Force.com] -> [Add/Remove Metadata Components] をクリック。
右上に [Add/Remove] ボタンがあるので、クリック。
一旦、[Select All] をクリックし、new subscribe と書かれているものだけチェックを外す。

これで、プロジェクトディレクトリを右クリックし、Refresh したり、[Project] -> [Clean] をクリックすれば
解決します。

html-helper-mode のキーバインド (一部)

なにげに はてダ記法の >| --|< と >|| -- ||< は解釈が違うのね…

C-c # : ascii code
C-c " : Quotation mark
C-c $ : Registered
C-c @ : Copyright
C-c - : soft Hyphen
C-c   : Nonbraking Space <- C-C の後にすぺーす
C-c & : ampersand
C-c > : Greater than
C-c < : less Than

<head>
C-c C-t H : <head
C-c C-t B : <body
C-c C-t i : <isindex
C-c C-t n : <nextid
C-c C-t h : <meta http-equiv=
C-c C-t m : <meta name=
C-c C-t l : <link
C-c C-t b : <base
C-c C-t t : title 

<image>
C-c C-i a : img src=

<header>
C-c M-h 1 : h1
C-c M-h 2 : h2
C-c M-h 3 : h3
C-c M-h 4 : h4
C-c M-h 5 : h5
C-c M-h 6 : h6

<anchor>
C-c C-a n : a name=
C-c C-a l : a href

<logical>
C-c M-l b : <blockquote
C-c M-l c : <code
C-c M-l x : <samp
C-c M-l r : <cite
C-c M-l k : <kbd
C-c M-l v : <var
C-c M-l d : <dfn
C-c M-l a : <address
C-c M-l e : <em
C-c M-l s : <strong
C-c M-l p : <pre

<phys>
C-c C-p s : strike
C-c C-p u : u
C-c C-p i :  i Italic
C-c C-p b : b Bold
C-c C-p f : tt
C-c C-p c : center

<list>
C-c C-l t : <dt definition Item
C-c C-l l : <li list item
C-c C-l r : <dir directory list
C-c C-l m : <menu menu list
C-c C-l o : <ol Ordered list
C-c C-l d : <dl Definition list
C-c C-l u : <ul Unordered list

<form>
C-c C-f o : <option
C-c C-f v : <option value
C-c C-f s : <select
C-c C-f z : <input type="reset"
C-c C-f m : <input type="submit"
C-c C-f b : <input type="button"
C-c C-f i : <input type="image"
C-c C-f h : <input type="hidden"
C-c C-f p : <textarea
C-c C-f c : <input type="checkbox"
C-c C-f r : <input type="radio"
C-c C-f t : <input type="text"
C-c C-f f : <form

<table>
C-c C-t t : <table
C-c C-t r : <tr table row
C-c C-t h : <th table header
C-c C-t d : <td table data
C-c C-t p : <caption

<text elements>
C-c =   : <hr> Horizontal Line
C-c C-m : <br> Line break
C-c C-j : <p> Paragraph  <- ここだけ手を入れた

<script>
C-c C-s j : <script type="text/javascript"
C-c C-s v : <script type="text/vbscript
C-c C-s = : <?= PHP outout
C-c C-s p : <?xx?> PHP code
C-c C-s ? : ?>xxx<? PHP break