OmniAICreator/Qiita-1.07M huggingface dataset:
hubot-slack-timeline 使ってみた

こちらの記事を拝見して、弊社の Slack でも試してみたいという声があったので導入してみました。

- [Slackに #timeline channelをつくった話 - Qiita](http://qiita.com/kozyty@github/items/2a87bf7e652765b9967d)
- [Hubot - Slack上にTimelineを形成して全チャンネルの発言をゆるく眺める - Qiita](http://qiita.com/Vexus2/items/70a84b28c85fc9af14c7)

紹介されている npm を利用します。

- [hubot-slack-timeline](https://www.npmjs.com/package/hubot-slack-timeline)

すでに [hubot-slack](https://www.npmjs.com/package/hubot-slack) を利用して、Slack 上で Hubot が利用できる状態から始めました。
また、Hubot は Heroku 上で動かしています。

## Slack Web API token を取得する

実はこれが一番はまりました。どの API token のことを言ってるのか分からなくて script ファイルと Slack のドキュメントと睨めっこしてしまった…
普段から API を弄ってるひとはすぐに分かるんでしょうけども、ずっと Integration の Hubot 用 token と間違えてました(；´Д｀)

hubot-slack-timeline の README に以下の記述があります：

```
Note: You can generate Slack API token here https://api.slack.com/
```

https://api.slack.com/ にある "[Slack Web API](https://api.slack.com/web)" のページで token を作成できます。

![ss_2015-08-12-10-52-00_api_slack_com.png](https://qiita-image-store.s3.amazonaws.com/0/5945/54aeed0d-ab2b-08f9-ba31-a96fb3c8b66b.png)

複数チームに所属しているひとは、timeline を使いたい Team の token を取得しましょう。

生成した token を Heroku の環境変数 `SLACK_API_TOKEN="YOUR_SLACK_API_TOKEN"` に追加しておきます。

## hubot-slack-timeline の有効化

今回は `package.json` に以下の２つのモジュールを追加しました。
request モジュールを利用していなかったため、ここでもちょっとハマリました。

- "hubot-slack-timeline": ">= 0.1.0"
- "request": ">= 2.51.0"

あとは `external-scripts.json` に "hubot-slack-timeline" を追加して、Heroku に deploy（push）します。

本題からは逸れますが、最近は Heroku の beta 機能である "Connected to GitHub" を利用して、GitHub 上の master ブランチに修正が merge されたときに自動で Heroku deploy されるようにしています。捗る。

## Slack 上に #timeline チャンネルを作る

これはもちろん先にやっておいて構いません。
channel に Join する人は通知すべて OFF（Never）にするのをお忘れなく。topic に注意書きも書きました。

## #timeline 始動

Hubot が正常に起動すると、すぐに timeline が動き始めます。

上手く動かない時は `heroku logs` でログを確認したり、環境変数の token を確認して `heroku restart` をしてみたりしてください。

hubot-slack-timeline にいろいろ設定が欲しかったり（特定ユーザ／チャンネルの除外とか）、 'via #channel' からその channel へジャンプしたいとか、ローカルで（動作確認のために）動かしたときは例外を吐かないで欲しかったりいろいろありますが、その辺は追々手を出していくかもしれません。
git commitを楽しくする（その１：hash値ポーカー編）


「作業を楽しくすることは生産性の向上につながる」という信念のもとに、
commitするたびに **ポーカーで遊ぶ** スクリプトを作りました。
「作業を楽しく」の方向性が完全に斜め上ですが気にしてはいけません。

## 作るもの

* commit後に生成される、short hash値7桁の英数文字列を7枚のカードに見立ててポーカーを行う
* commitのたびに役を自動判定、メッセージを表示する

## hash値ポーカー　ルール

* [テキサスホールデム]("http://ja.wikipedia.org/wiki/%E3%83%86%E3%82%AD%E3%82%B5%E3%82%B9%E3%83%BB%E3%83%9B%E3%83%BC%E3%83%AB%E3%83%87%E3%83%A0")に準じ、7枚中任意の5枚で作られる役のうち最強のものを手役とする
* カードは数字0~9,アルファベット小文字a~fの計16種。強弱もこの順
* トランプと違ってマークが無いので,フラッシュ系の役は無し
* ペア形はできやすい反面、16種もあるのでストレートが最難関（なはず。。。ちゃんと検証してないけど）
* というわけで役の強さは
ストレート > ファイブカード(笑) > フォーカード > フルハウス > スリーカード > ツーペア > ワンペア とする

## 実装

以下のコードを、プロジェクト内の```.git/hooks/post-commit```に保存。

```ruby:.git/hooks/post-commit
#!/usr/bin/env ruby

# 手札がストレートかどうか判定する関数
def straight?(cards)
  # ソートした上で、文字列比較を使って判定
  all_cards_sequence = (("0".."9").to_a + ("a".."f").to_a).join
  cards_sequence = cards.split(//).sort.join
  (0..2).each do |i|
    return true if all_cards_sequence.include?(cards_sequence.slice(i,5))
  end
  false
end

# メッセージハッシュ お好みで編集して下さい
messages = {
  straight:        "Congratulations!! Straight!!",
  five_of_a_kind:  "Unbelivable! Five_of_a_kind!",
  four_of_a_kind:  "Bravo! Four_of_a_kind!",
  full_house:      "Excellent! Full_house!",
  three_of_a_kind: "Three_of_a_kind!",
  two_pair:        "Two_pair!",
  one_pair:        "One_pair!"
}

# short hashを取得
cards = `git log -1 --format=format:%h HEAD`.chomp
# cardの枚数の構成を計算
same_card_counts = cards.split(//).group_by{ |r| r }.values.map(&:size).sort.reverse

# 手役の判定
result =
if straight?(cards)
  :straight
elsif same_card_counts.max >= 5
  :five_of_a_kind
elsif same_card_counts.max == 4
  :four_of_a_kind
elsif same_card_counts.max == 3
  if same_card_counts == [3,1,1,1,1]
    :three_of_a_kind
  else
    :full_house
  end
elsif same_card_counts.max == 2
  if same_card_counts == [2,1,1,1,1,1]
    :one_pair
  else
    :two_pair
  end
end

puts "\e[31m"+messages[result]+"\e[0m" if result

```

#### 実装ポイント

* post-commit フックを使えばコミットごとに好きなスクリプトを起動できます
* ```git log```のformatオプションを使うと表示項目をある程度好きに弄れます
* 最終的な手役の判定ですが、"7枚中任意の5枚を選んだ組合せで作れる手役のうち強さを比較してぐぬぬ"とかやるより、7枚の構成を見て一気に判定した方が楽でした
* ストレートかどうかの判定は"連続である文字列中に現在の手札が出現するか"という発想でやってみました

## 所感

* 方向性はともかく"たくさんcommitしたくなる仕掛け"を施すのは実際にモチベーション上がりますよ（言い訳）
* 仕掛けた直後にいきなりフォーカード出てバグかと思いました（自虐風自慢）
* ちょっと重いのでもう少し高速化したいところですね（丸投げ）
Mac の echo に色がつかない・・・

Ubuntu 使っていると ANSI エスケープシーケンス使って:

```bash
$ echo '\e[32mRED!!!\e[0m'

```

![Screenshot from 2015-01-07 12:59:05.png](https://qiita-image-store.s3.amazonaws.com/0/755/6600a378-dbc3-d713-7926-4c74aaea85a8.png)

みたいなことをしても色がつくけれど Mac の echo はだと上手く行かない:

```bash
$ echo '\e[32mRED!!!\e[0m'
\e[32mRED!!!\e[0m
```

対処方法 1. coreutils をインストールする
------------------------------------

Ubuntu と同じ coreutils の echo を使う。

MacPorts で入れると、`gecho` って名前でインストールされるので、`alias echo=gecho` しましょう。

対処方法 2. 書き方を変える
--------------------------

文字列リテラルのまえに `$` を書く:

```bash
$ echo $'\e[32mRED!!!\e[0m'
```

`$'...'` で括られた文字列は `\e`, `\a`, `\n` などのエスケープを認識してくれるようになります。

ちょっとしたスクリプトで使うならこっち。

POSIX に倣うならどう書くのがいいんだろう。
[Linux] gcc と clang の速度比較

### 概要
``clang``が速いらしいという[うわさ](http://news.mynavi.jp/news/2015/01/07/015/)を聞いたので、``gcc``と比較してみた。

手っ取り早くビルドに時間がかかりそうなものが``ffmpeg``だったので、それで実験。

### clangのインストール
```shell-session
# yum install clang --enablerepo=epel
```

### FFmpegの準備
```shell-session:ffmpeg最新版
$ git clone git://source.ffmpeg.org/ffmpeg.git ffmpeg
```

### configure

```shell-session:共通部分
$ ./configure \
--prefix=/usr/local \
--enable-gpl \
--enable-version3 \
--enable-nonfree \
--enable-static \
--disable-shared \
--disable-doc \
--disable-htmlpages \
--disable-manpages \
--disable-podpages \
--disable-txtpages \
--enable-libfaac \
--enable-libmp3lame \
--enable-libtheora \
--enable-libvorbis \
--enable-libx264 \
--enable-libx265 \
--enable-libvpx \
--enable-fontconfig \
--extra-cflags=-I/usr/local/include \
--extra-ldflags=-L/usr/local/lib \
--enable-memalign-hack
```


### gccでビルド
```shell-session
$ time make -j32

real    1m46.906s
user    18m55.527s
sys     0m54.030s

$ ls -la ffmpeg
-rwxr-xr-x 1 wwwuser wwwuser 17138544 Jan  7 12:41 ffmpeg
```


### clangでビルド
``configure``に``--cc=clang``を追加する。

```shell-session:clangでのコンパイル
$ time make -j32

real    1m27.455s
user    13m27.972s
sys     0m46.578s

$ ls -la ffmpeg
-rwxr-xr-x 1 wwwuser wwwuser 14959208 Jan  7 12:36 ffmpeg
```

記事のとおり、速くなってファイルサイズも小さくなった。わーい。
[備忘録] Rails 開発でよく使用する Tips 集

## <i class="fa fa-fw fa-exclamation-triangle"></i>お断り

あくまで自分用の備忘録なので、あまり内容に期待しないでくださいね。
思いつきで順次追加していきます。

## Tips 集

### <i class="fa fa-file-o fa-fw"></i> 現在のファイルからの相対パスを絶対パスに変換する

```rb
require File.expand_path('../application', __FILE__)
```

require 目的なら `reuqire_relative ` でも可能です。

#### <i class="fa fa-search fa-fw"></i> 参考

* [RubyのFile.expand_path('相対パス', \_\_FILE\_\_) の意味](http://d.hatena.ne.jp/maeharin/20130104/p1)
* [module function Kernel.#require_relative](http://docs.ruby-lang.org/ja/2.1.0/method/Kernel/m/require_relative.html)

### <i class="fa fa-share fa-fw"></i> Controller から Helper のメソッドを利用する

Rails が提供する `delegate` メソッドを利用して、`view_context` にメソッドを委譲します。

```rb

class MagicalGirlsController < ApplicationController
  delegate :fa_icon, to: :view_context

  def some_action
    fa_icon('female fw', text: 'Kyoko Sakura')
  end
end
```

#### <i class="fa fa-search fa-fw"></i> 参考
* [delegate (Module)](http://apidock.com/rails/Module/delegate)
* [view_context (AbstractController::Rendering)](http://apidock.com/rails/AbstractController/Rendering/view_context)

### <i class="fa fa-font fa-fw"></i> 文字列を加工する

僕は `tableize` や `constantize` をよく使います。

```rb

'magical_girl'.camelize  #=> "MagicalGirl"
'magical_girl'.dasherize #=> "magical-girl"
'MagicalGirl'.underscore #=> "magical_girl"

'magical_girls'.classify #=> "MagicalGirl"

'magical_girl'.constantize #=> MagicalGirl

'Madoka::magical_girl'.demodulize #=> "magical_girl"

'magical_girl'.humanize    #=> "Magical girl"
'magical_girl_id'.humanize #=> "Magical girl"
'MagicalGirl'.tableize     #=> "magical_girls"

'magical_girl'.pluralize    #=> "magical_girls"
'magical_girls'.singularize #=> "magical_girl"
```

#### <i class="fa fa-search fa-fw"></i> 参考

* [Rails 導入で Ruby 標準クラスへ追加される関数達 (String編)](http://doruby.kbmj.com/yoppi_on_rails/20080226/Rails_Ruby_String_1)

### <i class="fa fa-cog fa-fw"></i> Hash をキーワード引数に渡す

Rails というよりは Ruby の Tips ですね。
**キーがシンボルの Hash オブジェクト** を引数として渡せます。
キーが文字列だったり、型が Hash 以外 ([Object::HashWithIndifferentAccess ](http://api.rubyonrails.org/classes/ActiveSupport/HashWithIndifferentAccess.html) など) だったりした場合は
`ArgumentError: missing keywords` になります。

試しに [Settingslogic](https://github.com/settingslogic/settingslogic) の値をコンストラクタのキーワード引数に渡してみました。

```config/application.yml
magica:
  - name: Kyoko Sakura
    color: red
  - name: Sayaka Miki
    color: blue
  - name: Mami Tomoe
    color: yellow
```

```app/models/settings.rb
class Settings < Settingslogic
  source "#{Rails.root}/config/application.yml"
  namespace Rails.env
end
```

```magical_girl.rb
class MagicalGirl
  attr_reader :name, :color

  def initialize(name:, color:)
    @name = name
    @color = color
  end
end
```

```rb
Settings.magical_girls.map { |girl| MagicalGirl.new(girl.to_hash.symbolize_keys) }
# => [
#      #<Magica @color="red", @name="Kyoko Sakura">,
#      #<Magica @color="blue", @name="Sayaka Miki">,
#      #<Magica @color="yellow", @name="Mami Tomoe">
#    ]
```

#### <i class="fa fa-search fa-fw"></i> 参考

* [Ruby のキーワード引数はハッシュで渡せる話](http://nomnel.net/blog/ruby-keyword-args/)
通知センターのバナー表示時間を変更する


Macの通知センターは様々なアプリケーションの通知をしてくれる機能ですが、表示時間を変えたいって時があるかと思います。

変更するにはターミナルから次のコマンドで変更可能です。

```
defaults write com.apple.notificationcenterui bannerTime 秒数(1〜25)
```

再ログインまたは再起動で反映されます。

また、元に戻したい場合は次のコマンドを実行してください。

```
defaults delete com.apple.notificationcenterui bannerTime
```
PBOXの初期セットアップをするには

ここでは、PBOXのサーバーの初期セットアップ手順をご紹介します。

# Image Templateからインスタンスを作成する方法

1. まず、PBOXを利用するSoftLayerのアカウントを連絡します。
2. SoftLayerのアカウントにおいて、Image Templateの共有がされるので、次のリンク先の手順に従い、Image Templateからインスタンスをオーダーします。

[Image Templatesからインスタンスをオーダーするには？](http://qiita.com/nsas454/items/18f1b5fa447fa8743ebb#image-templates%E3%81%8B%E3%82%89%E3%82%A4%E3%83%B3%E3%82%B9%E3%82%BF%E3%83%B3%E3%82%B9%E3%82%92%E3%82%AA%E3%83%BC%E3%83%80%E3%83%BC)

# OpsDeliverを使う方法

https://opsdeliver.com/apps

```
現在作成中
```

# 一からサーバーをセットアップしていただく方法

```
あまりおすすめしません。
現在作成中
```
rails sで起動したサーバにブラウザからアクセスできない

対象：Rails4.2

Railsのバージョンを4.2に上げてブラウザからアクセスしようとしたら繋がらない。

```shell-session
$ ./bin/rails s
=> Booting WEBrick
=> Rails 4.2.0 application starting in development on http://localhost:3000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
```

起動時のアドレスが**localhost**になっている
これだと外部からのアクセスが繋がらないのでip指定して起動

```shell-session
$ ./bin/rails s -b 0.0.0.0
=> Booting WEBrick
=> Rails 4.2.0 application starting in development on http://0.0.0.0:3000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
```

これで外部からアクセス可能となる。4.2から変わったみたい。

参考
[Rails4.2beta1をインストールして最初にはまったこと](http://www.techscore.com/blog/2014/09/12/rails4-2beta1%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%97%E3%81%A6%E6%9C%80%E5%88%9D%E3%81%AB%E3%81%AF%E3%81%BE%E3%81%A3%E3%81%9F%E3%81%93%E3%81%A8/)
emacs multi-term で端末制御文字が出る問題への対処

いろいろ苦労した末に、やっと emacs の multi-term 上でまともに zsh が動かせるようになったので、備忘録としてまとめる。multi-term や zsh のインストール方法は省略する。

## 端末制御文字が出る問題への対処

設定なしのまま起動すると 4m という文字が出た。M-r で bck-i-search した時も同じように、4m という文字が現れて崩れるため、まともに利用できなかった。

いろいろ調べた結果、emacs term で使う terminfo （端末制御文字と制御動作の対応表）がないのが原因らしい。あまりお目にかかることはないが tic というコマンドを使って、このファイルを作ってやればいいようだ。参考サイトによると、Emacs のインストールディレクトリに eterm-color.ti というファイルがあるはずだが、見当たらなかった。代わりに、コメント欄に書かれていたファイルを web からもらってきて、利用することにした。下のコマンドを実行後、emacs を再起動すると、4m のような制御文字は表示されず、期待した通り動くようになった。

```
curl https://opensource.apple.com/source/emacs/emacs-70/emacs/etc/e/eterm-color.ti\?txt > eterm-color.ti
tic -o ~/.terminfo eterm-color.ti
```

## 日本語が ???? になる問題への対処

multi-term 上で日本語が ???? になってしまうので、こちらにも対処した。
自分の環境下では、下の式を init.el に追記するだけで OK だった。

```
(setenv "LANG" "ja_JP.UTF-8")
```

## 参考にしたサイト

1. emacs のシェルとターミナルのまとめ / http://blog.inouetakuya.info/entry/20110627/1309175529
2. シェルとターミナルの違い / http://www.cc.kyoto-su.ac.jp/~hirai/text/shell.html
3. terminfo とは何か / http://archive.linux.or.jp/JF/JFdocs/Text-Terminal-HOWTO-15.html
4. tic コマンド / http://linux.die.net/man/1/tic
5. emacs term で変な文字が出る /  http://stackoverflow.com/questions/8918910/weird-character-zsh-in-emacs-terminal
6. emacs term で日本語を正しく表示する /  http://blog.inouetakuya.info/entry/20110624/1308878780
矢印付きボタンを作るときによく使うcss


このようなボタンです。

通常
![画像](http://gyazo.com/f7596ec8e0a43d4de0b4b05b46d5442a.png)

ホバー
![画像](http://gyazo.com/1bb8eaf6aad6a30725a85d1a8d41fec8.png)

```html
<a href="#" class="btn btn-small next">詳しく見る</a>
```

```scss
.btn {
    display: block;
    background-color: $btn-base;
    text-align: center;
    color: $bg-white;
    position: relative;
    &.btn-small {
        width: 241px;
        height: 34px;
        line-height: 36px;
        transition: all 0.2s;
        &.next {
            &:hover {
                background-color: $btn-hover;
                &:after {
                    right: 16px;
                }
            }
            &:after {
                content: "";
                position: absolute;
                top: 50%;
                right: 20px;
                @include sprite($icon-btn-arrow-back);
                transform: translateY(-50%) rotate(180deg);
                transition: all 0.2s;
            }
        }
        &.prev {
            &:hover {
                background-color: $btn-hover;
                &:after {
                    left: 16px;
                }
            }
            &:after {
                content: "";
                position: absolute;
                top: 50%;
                left: 20px;
                @include sprite($icon-btn-arrow-back);
                transform: translateY(-50%);
                transition: all 0.2s;
            }
        }
    }
}
```

@include spriteはbackground画像を指定するmixinです。
transformで垂直中央にして、rotateで矢印を右寄せ右向き、左寄せ左向きにしています。
Git の contrib に入っているコマンドを一括インストールする

contrib に入っているコマンドを全部インストールしたかったのでとりあえず一覧にしてみた。次のコマンドでそんな感じになる：

```zsh
find /usr/local/share/git-core/contrib \
     -perm +111    \
     -type f       \
     -name 'git-*' \
     | grep -v /examples/
```

find のオプションについて少々解説。 `-perm +111` で実行フラグが立っているエントリにマッチする（BSD find の場合。 GNU find なら代わりに `-executable` を使う）。普通はディレクトリも実行フラグが立っているので、 `-type f` でファイルだけに絞り込む。そしてファイル名が git- で始まるものに限定する。

examples ディレクトリには git の組み込みコマンドのシェルスクリプト実装が入っているので除外する。

すると以下の出力が得られる：

```
/usr/local/share/git-core/contrib/contacts/git-contacts
/usr/local/share/git-core/contrib/credential/netrc/git-credential-netrc
/usr/local/share/git-core/contrib/fast-import/git-import.perl
/usr/local/share/git-core/contrib/fast-import/git-import.sh
/usr/local/share/git-core/contrib/git-jump/git-jump
/usr/local/share/git-core/contrib/git-resurrect.sh
/usr/local/share/git-core/contrib/mw-to-git/git-mw.perl
/usr/local/share/git-core/contrib/mw-to-git/git-remote-mediawiki.perl
/usr/local/share/git-core/contrib/remote-helpers/git-remote-bzr
/usr/local/share/git-core/contrib/remote-helpers/git-remote-hg
/usr/local/share/git-core/contrib/stats/git-common-hash
/usr/local/share/git-core/contrib/subtree/git-subtree.sh
/usr/local/share/git-core/contrib/workdir/git-new-workdir
```

git-import.perl と git-import.sh が重複しているのが気になるが、同じコマンドなのでどちらか一方を使えばよさそう。それ以外は拡張子を取り除けばインストールできそうだ。

```zsh:install_git_contrib_bin.zsh
#!/usr/bin/env zsh

list_git_contrib_bin() {
    find /usr/local/share/git-core/contrib \
         -perm +111    \
         -type f       \
         -name 'git-*' \
         | grep -v /examples/
}

list_git_contrib_bin | while read -r f; do
    ln -s "$f" ~/bin/"${f:r:t}"
    # ${f:r:t} は Zsh 特有の記法。
    # :r で拡張子を取り除き :t で basename を取り出す。
    # 詳しくは `man zshexpn` の HISTORY EXPANSION 節 Modifiers を参照。
done
```

できた。

蛇足： git- 系コマンド以外の実行ファイルも見るには `find /usr/local/share/git-core/contrib -perm +111 -type f | grep -v '/examples\|t/'` で。
Unicorn x Nginx x AWS で、*11 connect() to unix:/home/ec2-user/app/current/tmp/sockets/unicorn.sock failed (13: Permission denied) while connecting to upstream のエラーの回避方法


ブラウザからNginx経由でUnicornに接続しようとした際に、502 Bad Gatewayが返却されてあれれってなったので調べました。

nginxのエラーログ

```/var/log/nginx/app_error.log
*11 connect() to unix:/home/ec2-user/app/current/tmp/sockets/unicorn.sock failed (13: Permission denied) while connecting to upstream
```

どうもパーミッションがないとのことで、nginxを実行しているユーザを調べた所、

```
[ec2-user@ip-xxx.xxxx.xxx.xxx]$ ps aux | grep nginx
root      2089  0.0  0.0 109476  2124 ?        Ss   02:05   0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
nginx 2091  0.0  0.0 109888  3248 ?        S    02:05   0:00 nginx: worker process
```

こんな感じでデフォルトだとnginxになっちゃうみたいですね。
以下の設定ファイルを書き換えて実行ユーザをec2-user（もしくはアプリケーションの実行ユーザ）に変更してあげれば解決できます。

```/etc/nginx/nginx.conf
# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

#user  nginx;
user  ec2-user;
worker_processes  1;
```
iOS開発をチームで行う方法(iOS 開発チームにメンバーを追加する方法)

# はじめに
シミュレーターを使用したiOS開発はある程度のところまでは問題ありませんが、
最終的には実機によるデバッグやテストが実施出来ないとリリースまでの道のりは遠い険しいものとなることが予測されます。
今回の記載内容の前提条件としては、以下の環境下で記事にしています。
・組織(会社などのある一定の規模)などで iOS Developer Program のライセンスが購入されているケース
・1人で開発を行っていたが、複数のメンバーで開発を行う初期手順が分からない状況

# 注意
開発に使用していたパソコンとは別のパソコンで同じことを行っても出来ない可能性があります。
数年前にパソコンが壊れた時に同じアカウントを使用して、全く同じことを行っても原因は覚えていませんが(解決方法も覚えていませんが・・・)出来なかったような記憶があります。

# 開発者としてメンバーを追加するには
Appleのサイトに丁寧に書かれていました。
https://developer.apple.com/jp/support/ios/account-management.php

実際に実施しましたが、特に問題は発生しませんでした。

# 備考
内容が少々薄いですが、リンク先の内容が消えない限りは解決できると思います。
Google Mapsライクなオープンソース高解像度画像ビューアOpenSeadragonを使ってみる

もう読んでそのままです。<a href="https://openseadragon.github.io/">OpenSeadragon</a>というOSSプロダクトを使います。
<a href="http://www.asia.si.edu/collections/edan/object.cfm?q=fsg_FSC-GR-84">スミソニアン博物館の収蔵物画像</a>のビューアにも使われたりします。

<a href="https://openseadragon.github.io/">OpenSeadragon</a>のサイトをみてみると、トップページにサンプルが設置されてますね。

表示できる画像フォーマットはいくつかあるようですが、巨大な画像をそのまま表示はできません。
今回はDZIフォーマットにした画像で動かそうと思います。

ファイル作成のやり方は<a href="http://qiita.com/yusukeasari/items/0eec43bafc09eaf97380">DeepZoomファイル形式.DZIをPythonで作成してみる</a>の記事を御覧ください。

ではDZIファイルをhelloworld.dzi、タイルディレクトリをhelloworld_filesとして話をすすめます。
<a href="https://openseadragon.github.io/">OpenSeadragon</a>本体はサイトからダウンロードしてきてください。
bowerにも対応しているそうなので、環境が整っている方はそれでどうぞ。

ファイルはいくつかありますが、使うのはとりあえず下記2つでいいんじゃないでしょうか。
<pre>
images/
openseadragon.js
</pre>

ではhtmlで表示させてみましょう。
<pre>
&lt;script src="/js/openseadragon.js"&gt;&lt;/script&gt;

&lt;!-- 画像ビューアを表示させるDIV --&gt;
&lt;div id="contentDiv"&gt;&lt;/div&gt;

&lt;script type="text/javascript"&gt;
    // Example
    OpenSeadragon({
        id:              "contentDiv",
        prefixUrl:       "/images/",
        tileSources:     "/helloworld.dzi"
    });
&lt;/script&gt;
</pre>

以上です。グリグリズームできます。

おつかれさまでした。
Rancher.ioでDockerコンテナを管理する - Part1: はじめに

[Rancher.io](https://github.com/rancherio/rancher)というオープンソースのDockerコンテナ管理ツールがあります。開発元の[Rancher Labs](http://www.rancher.com/)のホームページによると、特定のインフラやIaaSに依存しない、Dockerコンテナ管理とSoftware Defined Infrastructureを組み合わせたプラットフォームを構築するソフトウェアを目指すようです。

> At Rancher, we’re developing software that will allow anyone to build their own Docker container service on any infrastructure or cloud. You can follow our open source project at Rancher.io.


## Stampede.io 

2014年8月にCitrixに在籍していたDarren Shepherdが[Announcing Stampede.io: A Hybrid IaaS/Docker Orchestation Platform Running on CoreOS](http://www.ibuildthecloud.com/blog/2014/08/21/announcing-stampede-dot-io-a-hybrid-iaas-slash-docker-orchestation-platform-running-on-coreos/)というブログで、[Stampede.io](https://github.com/cattleio/stampede)を公開しました。Digital Ocean上のCoreOSに12万コンテナを作成したプレゼン資料が[SlideShare](http://www.slideshare.net/DarrenShepherd1/stampedeio-coreos-digital-ocean-meetup)にあります。

## Rancher Labs

その後Stampede.ioは[Rancher.io](https://github.com/rancherio/rancher)となり、元Citrixのメンバーが起業した[Rancher Labs](http://www.rancher.io/)に開発が移行しました。Citrixに買収される前のCloud.comを起業したSheng LiangがCEOを勤め、Shannon Williams、Darren Shepherdと、CloudStackを開発していたメンバーが[共同創設者](http://www.rancher.com/our-team/)になっています。チーフアーキテクトのDarren ShepherdはCloudStackとGoddayのアーキテクトを勤めていました。

## Rancher.io

Stampede.ioはCoreOSとfleetによるアークテクチャでしたが、Rancher.ioではDockerホストにUbuntu14.04も使えるようになっています。Rancher.ioはどのIaaSでも同じようにDockerを動かせるインフラを実現するために、Docker管理ツールの提供とSoftware Definedなストレージとネットワークの[実装を計画](https://github.com/rancherio/rancher)しています。CloudStackがハイパーバイザーを抽象化したように、Rancher.ioはIaaSを抽象化してくれるようです。
 
## Cattle

Stampede.ioと同様にRancher.ioもIaaSのオーケストレーションプラットフォームとして、JavaとSpringで書かれた[Cattle](https://github.com/rancherio/cattle)を使っています。実際にRancher.ioのソースコードを読み、手を動かしながらアーキテクチャを理解していこうと思います。インストールの手順を読むと、Management ServerとDocker Nodesによって構成されるようです。絶賛開発中のため今後大きな変更もありそうですが現状の理解からはじめます。

## Management Server (Cattle)

Management Serverの[Dockerfile](https://github.com/rancherio/rancher/blob/master/server/Dockerfile)を読むと、ビルドした[Cattle](https://github.com/rancherio/cattle)のJARファイルをデプロイしています。[起動スクリプト](https://github.com/rancherio/rancher/blob/master/server/artifacts/cattle.sh)によると、MySQLやZooKeeperのセットアップも読めますが今のところ使っていません。Cattleのデータベースは`/var/lib/cattle/database`にあるH2のようです。


## Docker Nodes (python-agent)

Docker Nodesの方は、もちろんDockerと、docker-py、[python-agent](https://github.com/rancherio/python-agent)をインストールします。pyagentはcAdvisorやコンソールのためのWebSocketサーバーの役割もします。Agentは今のところRancher.ioの管理画面を開くブラウザから、WebSocketで接続可能なIPアドレスを指定する必要があります。

## Rancher.ioのインストール方法

Rancher.ioのインストール方法は3つあります。

* インストールはDockerホストを数台作成し、手動で管理用のDockerコンテナを作成する方法
* [Vagrant](https://github.com/rancherio/rancher/blob/master/Vagrantfile)を使う方法
* [Puppet](https://github.com/nickschuch/puppet-rancher)を使う方法
holidays gem に独自の祝日を追加する

[holidays gem](https://github.com/alexdunae/holidays) は各国の祝日を調べられる便利な gem です。これに、独自の祝日を追加します。

以下は Rails でやる場合のファイルパスですが、Rails でなくてもできるはずです。

```config/holidays.yaml
months:
  1:
    - mday: 2
      name: 元旦翌日
      regions: [jp]
    - mday: 3
      name: 元旦翌々日
      regions: [jp]
  12:
    - mday: 30
      name: 大晦日前日
      regions: [jp]
    - mday: 31
      name: 大晦日
      regions: [jp]
```

```config/initializers/custom_holidays.rb
# HACK: Load Japanese holidays first so that it will be merged with the custom holidays.
require 'generated_definitions/jp.rb'

# Load custom holiday definitions.
Holidays.load_custom(Rails.root.join('config', 'holidays.yml'))
```

`Holidays.load_custom` で独自の祝日定義を追加できるのですが、これをいきなり呼んでしまうとデフォルトのとマージされず、独自の祝日定義だけになってしまいます。この例で言うと、年間の祝日がたったの 4 日になってしまうということです。恐ろしいですね。

これは `holidays` gem が各国の祝日定義を必要になった時に読み込んでいることに起因しています。いきなり独自の祝日定義をしてしまうと、その後 `Holidays.on` などを呼んだ時に `:jp` の祝日定義もうあるから読み込まなくていいや、となり、デフォルトの祝日定義が読み込まれません。そこで `Holidays.load_custom` の前に `require 'generated_definitions/jp'` としてデフォルトの祝日定義を読み込んでおくのです。

もちろん他の国の祝日を追加したい時は、対応する region code を `require` します。
【ansible】ansible1.8.xで gitモジュールのオプション update=noをつけている場合はcloneされない

ハマった。。。。
先にissueを見ておけばよかった。。
年末に新しいMacマシーンが来てタイミング的にドンピシャなバージョンを引いてしまった

## 関連するissues

* [git module doesn't clone the repo if update=no](https://github.com/ansible/ansible-modules-core/issues/426)


## 事象

以下のplaybookでgitモジュールが何故かcloneされなかった 

以下playbook

```
- name: Git Clone vimproc
  git: repo=https://github.com/Shougo/vimproc
       dest=/home/{{ ansible_env.SUDO_USER }}/.vim/bundle/vimproc
       update=no
```

cloneされなかった原因は ``` update=no ``` をつけていたから

## 解決方法

* playbookで記載されている ``` update=no ``` を削除する
* ansibleのバージョンを1.7.xにする


```
- name: Git Clone vimproc
  git: repo=https://github.com/Shougo/vimproc
       dest=/home/{{ ansible_env.SUDO_USER }}/.vim/bundle/vimproc
```


## Bug Fixのタイミング

上記の[git module doesn't clone the repo if update=no](https://github.com/ansible/ansible-modules-core/issues/426)でコメントされているが


> @axos88 Just that it is a new feature so it belongs into a 1.9.x rather than a bugfix release.

と記載されているのでansible1.9までは解消されないかもしれません
(issuesの英語をちゃんと読んでいなので間違いあったら Please 編集リクエスト)


情報弱者でツラタンだわ。。。。。。。
MBaaSとCloud IDEでHTML5ハイブリッドモバイルアプリを開発する - Part1: リファレンス

MBaaSを使ってHTML5ハイブリッドモバイルアプリ開発をする場合、どんな組み合わせが良いのか考えています。サーバーサイドはSpring BootやNode.jsのMicro Servicesでビジネスロジックは実装してCloud FoundryやDocker PaaSにデプロイする感じです。開発、テスト、プロダクション環境まですべてクラウド上で行いたいので、Cloud IDEからプログラミングとビルドができて、DBaaSがついているのが理想です。[Telerik Platform](http://www.telerik.com/platform)、[Monaca](https://ja.monaca.io/)、[AppGyver](http://www.appgyver.com/composer)、[Appery.io](http://appery.io/)あたりが候補になりそうです。


## HTML5ハイブリッドモバイルアプリ開発

* [Cordova](http://cordova.apache.org/)
* [PhoneGap](http://phonegap.com/)

## HTML5ハイブリッドモバイルアプリ開発: Cordova + UI

* [Ionic](http://ionicframework.com/)
* [Topcoat](http://topcoat.io/)
* [Ratchet](http://goratchet.com/)
* [ngCordova](http://ngcordova.com/)
* [Onsen UI](http://onsen.io/)
* [ChocolateChip-UI](http://chocolatechip-ui.com/)
* [Famo.us](http://famo.us/)
* [UI for PhoneGap](http://www.telerik.com/phonegap-ui)
* [KendoUI](http://www.telerik.com/kendo-ui1)

## HTML5ハイブリッドモバイルアプリ開発: JavaScript MV*

* [AngularJS](https://angularjs.org)
* [Ember.js](http://emberjs.com/)
* [Backbone.js](http://backbonejs.org/)
* [Knockout.js](http://knockoutjs.com/)

## Cloud IDE + ビルド環境 + MBaaS + DBaaS

* [Telerik Platform](http://www.telerik.com/platform)
* [Monaca](https://ja.monaca.io/)
* [AppGyver](http://www.appgyver.com/composer)
* [Appery.io](http://appery.io/)

## Cloud IDE

* [Cloud9](http://www.cloud9ide.com/)
* [Nitrous.IO](https://www.nitrous.io/)
* [Codebox/Mobile](https://www.codebox.io/stack/mobile)

## ビルド

* [PhoneGap Build](https://build.phonegap.com/)


## RESTful API開発 (DBaaS開発)

* [Meteor](https://www.meteor.com/)
* [LoopBack](http://loopback.io/)
* [DreamFactory](http://www.dreamfactory.com/)
* [EspressoLogic](http://www.espressologic.com/)
* [Orchestrate.io](https://orchestrate.io/)
* [remotestorage](http://remotestorage.io/)
* [Hoodie](http://hood.ie/)

## DBaaS

* [Telerik Backend Services](http://www.telerik.com/backend-services)
* [Syncano](http://www.syncano.com/)
* [CouchBase Mobile](http://www.couchbase.com/nosql-databases/couchbase-mobile)
* [Cloudant](https://cloudant.com)
* [ReflexWorks](http://reflexworks.jp/)
* [Firebase](http://www.firebase.com/)
DeepZoomファイル形式.DZIをPythonで作成してみる

DZIについては僕なんぞが説明するより<a href="http://msdn.microsoft.com/ja-jp/library/cc645077%28v=vs.95%29.aspx">Microsoft様の用意しているページ</a>を見てもらったほうが早いと思います。

一枚で100MBある画像でも一画面に表示できる領域って1MB程度なんで、1000分割くらいして表示領域だけ読みこめばいいじゃん、って考え方です。雑ですが。

<strong>それってデータ作成より表示のプログラムの方が大変じゃね？</strong>って思われる方、正解です。
そちらについては別記事「<a href="http://qiita.com/yusukeasari/items/5cc9ffa3f151b2324181">Google Mapsライクなオープンソース高解像度画像ビューアを使ってみる</a>」で公開しました。
僕はActionScriptとCoffeeScriptでそれぞれ自作しましたが、DZIフォーマットを知らなかったという悲しい経緯とあわせて別の機会にご紹介したいと思います。

話をDZIに戻しましょう。
<a href="https://github.com/openzoom/deepzoom.py">DZIファイルを作成するツールは既にPythonで作られている</a>ので、それをダウンロードして試しましょう。

PILのインストール方法についてはREADMEに書かれていますのでそれをご参照ください。

サンプルプログラムの中身についてはあんまり説明するまでもないほどに単純なんですが、
examples/helloworld/helloworld.pyを覗いてみます。

<pre>
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import deepzoom

# Specify your source image
SOURCE = "helloworld.jpg"

# Create Deep Zoom Image creator with weird parameters
creator = deepzoom.ImageCreator(tile_size=128, tile_overlap=2, tile_format="png",
                                image_quality=0.8, resize_filter="bicubic")

# Create Deep Zoom image pyramid from source
creator.create(SOURCE, "helloworld.dzi")
</pre>

入力画像と出力画像を変えればほぼオッケーですね・・・。
一応ImageCreaterのオプションをチェックしてみます。

ここでは<a href="http://www.openzoom.org/">OpenZoom</a>の表記にのっとり、正方形に分割した画像を「タイル」と呼びます。

<strong>tile_size</strong>
画像を縦横何pxで分割するか。
DZIのタイルは基本的に正方形です。

<strong>tile_overlap</strong>
これは画像見てもらった方が早いですね。

![2932771418_82ceddfa0b.jpg](https://qiita-image-store.s3.amazonaws.com/0/44464/160aacf7-2cc5-5397-c882-121f37c0cf64.jpeg)

タイルを余白(と呼べばいいのか)無しに分割してならべると、チラつきがでることがあります。
これを防ぐためにtile_sizeより大きめに分割するオプションがtile overlapと呼ばれます。

<strong>tile_format</strong>
これは読んでそのまま。今回はpngで出力しますが、jpgなどでも出力可能です。

<strong>image_quality</strong>
これもそのままですね。画像の品質の指定です。
1が上限になります。

<strong>resize_filter</strong>
これ専門すぎて僕も全部知りませんが、詳しく知りたい方は下記を。
http://www.dfx.co.jp/dftalk/?p=13061

こだわりが無ければbicubicで良いと思います。


他にも細かい取り決めがありますので、詳しく知りたい方は下記を御覧くださいませ。
http://www.openzoom.org/

さて、オプションと入力画像、出力ファイル名を指定したらあとは叩くだけ

<pre>
$ python helloworld.py
</pre>

これで同じディレクトリ内にDZIファイルとファイル名_imagesディレクトリが作成されたはずです。

ビューアについては「<a href="http://qiita.com/yusukeasari/items/5cc9ffa3f151b2324181">Google Mapsライクなオープンソース高解像度画像ビューアを使ってみる</a>」で解説します。

おつかれさまでした。
サービスを使って特定のファイルを特定のアプリで開く

サービスを使って特定のファイルを特定のアプリで開くためのスクリプトで、とりあえずバックアップ的なポスト。下記のコードは、PNGやJPEGなどをFireworksで開くようになってますが、拡張子やアプリを変更すれば、他のアプリでも使えると思います。

1. Automatorで「新規作成」し、「サービス」を選択する。
1. 右側のフローにある「受け取る項目」を**`ファイルまたはフォルダ`**に、「検索対象」を**`Finder.app`**に設定する。
1. 左側のアクションライブラリから**`AppleScriptを実行`**を挿入し、下のコードをコピペして保存する。
1. 「環境設定→キーボード→ショートカット」から「サービス」を選択し、先ほど作成したサービスにショートカットを設定する。

```applescript
on run {input, parameters}
	
	set fileList to {}
	
	tell application "Finder"
		activate
		
		set selectionFiles to selection
		repeat with selectionFile in selectionFiles
			set fileExt to name extension of selectionFile
			if fileExt = "jpg" or fileExt = "jpeg" or fileExt = "png" or fileExt = "gif" or fileExt = "psd" or fileExt = "ai" then
				set end of fileList to selectionFile
			end if
		end repeat
		
		open fileList using application file (alias "Macintosh HD:Applications:Adobe Fireworks CS6:Adobe Fireworks CS6.app:")
		
	end tell
	
	return input
end run
```

ちなみにFireworks CS6以外を使っている場合やApplicationsフォルダ以外にインストールしている場合は、パスを変更してください。

OSX10.9までは動作してました。あと、例外処理はあまり考えてないので、えぇ。
【Android】Designtime Layout Attributesおぼえていますか


[[翻訳] android best practice](http://qiita.com/kgmyshin/items/a2358d54ffb3c5435d11)でも触れられていたのですが、みなさんは[Designtime Layout Attributes](http://tools.android.com/tips/layout-designtime-attributes)つかっていますでしょうか。


## Designtime Layout Attributesとは

例えばユーザ情報を表示する画面があってユーザ名をTextViewで表示するとします。
大抵その場合ってユーザ名はもちろん動的でJava側から設定するので`android:text`は設定しないと思います。

それでもいざそのLayout.xmlを作っている最中はpreviewでどのように見えるのかを確認したいですよね。
もしいま、`android:text`に適当な名前を入れて、確認が終わったら`android:text`を消しているという方は間違いなく使った方が良いのが、Designtime Layout Attributesです。

これを導入する事で`tools:text="hogehoge"`などとすることでpreviewにhogehogeと表示されるが実際動くときはhogehogeとは表示されなくなります。

**つまるところpreview専用のattributeです。**

下記は公式のページのサンプルイメージです。(こっちはEditTextになってます)

<img src="http://tools.android.com/_/rsrc/1380837498962/tips/layout-designtime-attributes/design-attributes.png" width=500 />


## 導入方法
下記のように `xmlns:tools="http://schemas.android.com/tools"` の一行を追加するだけです。

```
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

</RelativeLayout>
```

## だけどぶっちゃけ毎回忘れてしまう。。という方は

難点はこの `http://schemas.android.com/tools` という文字列を毎回忘れてしまうという事です。というのもオートコンプリートで候補として出てこないのです。

いろんな方法があると思うんですが、下記のようにLive Templateに登録しておくのが一番楽です。

<img src="https://qiita-image-store.s3.amazonaws.com/0/47114/f95d644c-95d1-40d9-5e74-6e268f6527ff.png" width=700 />

<img src="https://qiita-image-store.s3.amazonaws.com/0/47114/3e0de253-04b5-f211-047d-4a1691642c47.png" width=200 />

これで `tools` と入力してTABキーを押すだけで `xmlns:tools="http://schemas.android.com/tools"`が生成されます。
Pyramidのテンプレート(pt)のリンクにパスパラメータを混ぜる

クエリパラメータではなくて、URLのパスにパラメータを入れ込むことがあると思いますが、それの実現方法。
http://..../user/12345
みたいなやつ。

まずは、パスの設定

```python:__init__.py
from pyramid.config import Configurator

def main(global_config, **settings):
  config = Configurator(settings=settings)
  config.add_route('user', /user/{user_id})
```

これで
http://.../user/(パラメータ)を受け付けられるようになります。
次に、このパスパラメータを送るテンプレート(pt)

```html:pathparam.pt
<a href="${request.route_url('user', user_id='12345')}">パラメータ固定</a>

<a href="${request.route_url('user', user_id=user_id)}">プログラムから動的に</a>
```
route_urlメソッドに____init____.pyで設定したパスパラメータの{user_id}を引数指定することでパラメータを渡すことができるようになります。
受け取るViewは

```python
@view_config(route_name='user')
def func(request):
  user_id = request.matchdict['user_id']
```
expressで静的ファイルのMIMEタイプを追加するには

# あけおめことよろ

昨年ストック頂いた皆様、投稿を読んでくださった皆様、
本年もよろしくお願いします。

# 背景

Chromebookを買ったので、オフラインアプリの可能性を試そうと
Application Cacheを思い出し、node.jsのexpressを使おうとしたら、
.appcacheファイルのMIMEタイプを追加する必要に迫られた。

# staticなファイルのMIMEタイプを追加するには

```
var express = require('express');
express.static.mime.define({'text/cache-manifest': ['appcache']});
```

# Link

- [javascript - Express: Setting content-type based on path/file? - Stack Overflow](http://stackoverflow.com/questions/7109732/express-setting-content-type-based-on-path-file)

# あとがき

実はこれ書いた後、mimeモジュールを調べたら、.appcacheは登録済みであり、
少なくとも、今回の登録は不要であった。

今後、独自のMIMEタイプや、新しいMIMEタイプを扱うような事があれば、この方法が使えるはず。
Hashのキーを文字列からシンボルに変換する

JSONのパースしたときにキーがSymbolじゃなくて困ったのでメモ。
railsだと`Hash#symbolize_keys`があるけど、rails無しで。


```rb
def symbolize_keys(hash)
  hash.map{|k,v| [k.to_sym, v] }.to_h
end

hash = {'key':'value', 'key2':'value2'}

symbolize_keys(hash) #=> {:key=>"value", :key2=>"value2"}
```

`Array#to_h`はRuby 2.1からの機能なので古い環境では動きません。
`hash.inject({}){|h, (k, v)| h[k.to_sym] = v; h}`みたいにするといいかも。

追記: 
コメントで教えていただきました。
`Hash#.[]`を使って`Hash[ h.map{|k,v| [k.to_sym, v] } ]`とする方法もあります。

追記2:
コメントで教えていただきました。

そもそも、JSONのパースで上記のようなことをする必要はありませんでした。
`JSON.parse`に`symbolize_names: true`というオプションを渡すだけです。
ドキュメントはこちら: [module function JSON.#parse](http://rurema.clear-code.com/2.2.0/method/JSON/m/parse.html)

```ruby
JSON.parse('{"key": {"key2": "value2"}}', symbolize_names: true)
#=> {:key=>{:key2=>"value2"}}
```

参考: 
[Ruby - Hash#map は Hash を返さない - Qiita](http://qiita.com/A-gen/items/4997dbfa7d844b72cd58)
Twitter GemをWindowsにインストールする


Windows 8.1 x64 にて
できないと（勝手に）思ってたけどできた
ただし，以下のようにしてハマりポイントを回避しなければならない

## （Ruby環境がそもそもない人）Ruby本体のインストール
RubyInstallerを使う
http://rubyinstaller.org/downloads/
の項目「RubyInstallers」のうち、好きなバージョンをダウンロードしインストールする．

## DevelopmentKitのインストール
twitter gem のインストールのためにはDevelopmentKitが必要なもよう

http://rubyinstaller.org/downloads/
から適切なバージョンのDevKitを選んでダウンロード

.exeはダブルクリックで解凍されるが，カレントディレクトリに展開されてしまうので，「devkit」フォルダを作ってその中に.exeを入れてから，ダブルクリックで解凍するのがよい．ただし，解凍した中身は消してはいけないので場所を考えて配置すること．

コマンドプロンプトを開いて，以下のコマンドを叩く．

```
> cd hogedir
> ruby dk.rb init
```

ここで「config.ymlを確認して，必要に応じて書き換えろ」とメッセージが出るが，僕は特に何もしなくてもうまくいった．

```
> ruby dk.rb install
```

とすると，一瞬でインストールが完了する．

## RubyInstallerのSSLエラーバグの対処
`gem install twitter` をそのままやると
`unable to download data from https //rubygems.org/`が出てくる．
<del>httpsを使わずにインストールするのがよい</del>
  → RubyInstallerのバグだそうで，ちゃんと対処しようと思う．

[Windowsでgem installするとSSLエラーが出る場合の解決策 - Qiita](http://qiita.com/shimoju/items/394818b4989b94680aaf)

上記を参考にする．なんでこんなバグがあるんや，，，

作業後は

```
> gem install twitter
```

でOK．


なお手順がやや面倒なので，以下に「その場しのぎなgem installのやり方」も残しておく．


```
> gem source -a http://rubygems.org
> gem install rubygems-update
> gem install twitter
> gem source -r http://rubygems.org
```


## 確認

```
> irb
irb(main):001:0> require 'twitter'
=> true
```

入ったぜ

## 参考
- Ruby:DevKitのインストール方法 | サイト運営の私的メモ
http://mymemo.weby117.com/develop/ruby-devkit.html
- gem updateができない-certificate verify failed - リア充爆発日記
http://d.hatena.ne.jp/ria10/20130527/1369647304
Yeomanで作ったWebアプリケーションをHerokuにデプロイしてみる

Yeomanで作成したWebアプリケーションを、Herokuにデプロイしました。
Herokuは簡単にWebアプリケーションを公開するには便利ですね。

事前準備
-
事前準備として以下をインストールしておきます。

```
nodejs
Grunt
Yeoman
Herokuのアカウントとツールベルト
```

Yeoman?
-
Webアプリケーションのテンプレを自動生成するツールです。
Javascriptのライブラリとかフロントエンドまわりは、セットアップがダルいのでYeoman使うと便利になります。

Yeomanでアプリケーションの生成
-
では早速アプリケーションを生成してみます。

とりあえずAngularのアプリケーションとして生成するので事前にgenerator-angularをインストールします。

```bash:generator-angularのインストール
$ npm install -g generator-angular
```

```bash:アプリケーションの生成
$ mkdir deploy-yeoman-app-to-heroku
$ cd deploy-yeoman-app-to-heroku
$ yo angular
```

プロンプトでいろいろ聞かれますが、今回は全部ENTER押して進んでいきます。
アプリケーションを起動します。

```bash:アプリケーションの起動
$ grunt serve
```

やったー！Yeoman + AngularJS の初期画面表示を成功しました。
![Screen Shot 2015-01-07 at 1.02.29 AM.png](https://qiita-image-store.s3.amazonaws.com/0/27339/f0dfaec6-2023-790c-4804-4641f52874f4.png)

grunt serve を、一旦Control + C で止めます。

Herokuにデプロイ
-
今度はこのおじさんをHerokuにデプロイしてやりましょう。Yeomanがgenerator-herokuを使えるようにインストールします。

```bash:generator-herokuのインストール
$ npm install -g generator-heroku
```

```:herokuの設定を生成する
$ yo heroku
[?] Do you want a separate git repository in dist/? No
   create heroku/Procfile
   create heroku/server.js
   create heroku/distpackage.json
Please add this copy task rule to your Gruntfile:
    copy: {
        dist: {
            files: [{
                expand: true,
                dest: '<%= yeoman.dist %>',
                cwd: 'heroku',
                src: '*',
                rename: function (dest, src) {
                    var path = require('path');
                    if (src === 'distpackage.json') {
                        return path.join(dest, 'package.json');
                    }
                    return path.join(dest, src);
                }
            }]
        }
    }

You're all set! Now run
        heroku apps:create
and push your dist directory with
        git subtree push --prefix dist heroku master
```


Gruntfileのcopyタスクに追記してくれと、標準出力に書いてあるので追記します。
Gruntでheroku用にビルドしたアプリケーションを、distディレクトリに格納する設定となります。

下記が変更差分です。
https://github.com/kai-zoa/deploy-yeoman-app-to-heroku/commit/90365ca0827f5f2809c3c9344205fe9793b3d405
ここで.gitignoreの変更もしていて、これをやらないとビルドしたアプリケーションが、中途半端にherokuにデプロイされてしまうので、書き換えておきましょう。

準備ができたらビルドします。

```bash:ビルド
$ grunt build
```

下記を実行して http://localhost:1203/ を開けばビルド一式の動作確認もできます。

```bash:ビルドしたアプリケーションの動作確認
$ cd dist && npm install
$ node server.js
```

ではディプロイしてみます。

```bash:Herokuにデプロイ
# [heroku login]はあらかじめしておいてください。
$ heroku create deploy-yeoman-app-to-heroku # アプリケーションの名前は適当につけてください
$ git subtree push --prefix dist heroku master
```

openすればデプロイがうまくいってることを確認できます！

```bash:デプロイされたアプリケーションを開く
$ heroku open
```

一応作ったものは下記にあげておきました。
[GitHubのリポジトリ](https://github.com/kai-zoa/deploy-yeoman-app-to-heroku)
ProgressBarを停止させる

ニーズがあるかどうか怪しいですが、ProgressBarを停止させるには、固定値を返すInterpolatorを設定します。ただし、ProgressBar#setVisibilityを呼び出さないと反映されない。。。

```java:ProgressBarの停止
progressBar.setInterpolator(new Interpolator() {
    @Override
    public float getInterpolation(float v) {
        return 0;
    }
});
progressBar.setVisibility(View.GONE);
progressBar.setVisibility(View.VISIBLE);
```

再開させるには、デフォルトのInterpolatorを保持しておいて再設定するか、LinearInterpolatorを設定します。

```java:ProgressBarの再開
Interpolator interpolator = progressBar.getInterpolator();
...
progressBar.setInterpolator(interpolator);
progressBar.setVisibility(View.GONE);
progressBar.setVisibility(View.VISIBLE);
```
MacにHomebrewでComposerをインストールしました

ComposerってBundlerみたいなものらしいので、Homebrewを使って入れようとしました。

# HomebrewでComposerをインストールしようとしてエラー
HomebrewでComposerのインストールを試しました。

```bash:HomebrewでComposerをインストール
brew install homebrew/php/composer

略

composer: Missing PHP53, PHP54, PHP55 or PHP56 from homebrew-php. Please install one of them before continuing
Error: An unsatisfied requirement failed this build.
```
HomebrewのPHPを先に入れろとあります。おそらくMacデフォルトのPHPではだめなのだと思います。

# HomebrewでPHPをインストールしようとしてエラー
新しそうなbrewのPHP56を入れることにしました。

```bash:brewでphpをインストール
brew install PHP56

略

checking for pkg-config... no
configure: error: Cannot find OpenSSL's <evp.h>
couldn't understand kern.osversion `14.0.0'

READ THIS: http://git.io/brew-troubleshooting
If reporting this issue please do so at (not Homebrew/homebrew):
  https://github.com/homebrew/homebrew-php/issues
```
これは、OSX10.10以上で、Xcodeを最新にした上で、関連ファイルをインストールするそうです。

以下のコマンドを実行するとコマンドラインツールのダウンロードが自動で始まります。

```bash:コマンドラインツールのインストール
xcode-select --install
xcode-select: note: install requested for command line developer tools
```

# 再度HomebrewでPHPをインストール
PHP56を再度インストールします。

```bash:brewでphpをインストール
brew install PHP56
```
成功しました。

もともとMacのPHPは、HomebrewでないPHPを参照していたので、ターミナルを開き直します。

```bash:PHPがHomebrew経由になったか確認
php -v
PHP 5.6.4 (cli) (built: Jan  7 2015 01:04:24) 
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2014 Zend Technologies

which php
/usr/local/bin/php
```
PHPをHomebrewが参照しています。

# 再度HomebrewでComposerをインストール
PHPがインストールされたので、Composerをインストールします。

```bash:HomebrewでComposerをインストール
brew install homebrew/php/composer
==> Installing composer from homebrew/homebrew-php

略

You can read more about composer and packagist by running:
  "brew home composer".
==> Summary
 /usr/local/Cellar/composer/1.0.0-alpha9: 3 files, 1.0M, built in 11 seconds
```
Composerがインストールできたみたいです。

Composerとコマンドを実行してComposerのインストールを確認します。

```bash:Composerを確認
composer
   ______
  / ____/___  ____ ___  ____  ____  ________  _____
 / /   / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
                    /_/

略

```
Composerがインストールされました。
Test Link に 自作のレポートを表示する

[[ここ](
https://wiki.openoffice.org/w/images/1/1b/Testlink_user_manual.pdf)]の7.8章とか[[ここ](https://amirshenouda.wordpress.com/2012/03/25/testlink-creating-new-report-results-per-tester/)]とか参考にしながら色々やって、以下のようなページを作成。

![スクリーンショット 2015-01-27 23.25.34.png](https://qiita-image-store.s3.amazonaws.com/0/12550/217bb8a3-ef72-4db6-9969-1174af1443cf.png)

編集するファイルは基本的には3つ

* cfg/custom_reports.cfg.php
* lib/results/{任意の名前}.php
* gui/templates/results/{任意の名前}.tpl

```php:cfg/custom_reprots.cfg.php
<?php
  $tlCfg->reports_list['my_charts_report'] = array(
  'title' => 'link_my_charts_report',
  'url' => 'lib/results/my_report.php', // {任意の名前}と一致させる
  'enabled' => 'all',
  'format' => 'format_html'
);
?>
```

lib/results/my_report.php はすでにある他のレポート用phpファイルをコピーして作るのがいいかと。metricsDashboard.phpなどはプロジェクト内の全テストプランの情報が取れるので、それを加工するのがいいかもしれないです。ただ、テストリンク内のデータ構造を知っておかないとちょっと辛いかも。

gui/templates/results/my_report.php は Smartyで記述されています。Test Linkとしての制限はなさそうですので、my_report.phpでデータを整形してSmartyに渡せばなんでもできるかも？

あとは、bootstrap なり Chart.js なりでグラフィカルに表示してやれば Test Link なのにイモくない画面がつくれます！
プロ生ちゃんのカレンダーのあれ (Ruby)



プロ生ちゃんのこれ。
とっくに締め切り過ぎてますし今さらですが。

- [「プロ生ちゃん #カレンダープログラミング プチコンテスト 2014」開催！](http://pronama.azurewebsites.net/2014/10/12/calendar-programming-contest/)
- [#カレンダープログラミング コンテスト - Togetterまとめ](http://togetter.com/li/730914)

できるだけ厨二くさいのを書きたかった。

```rb
require 'date'

last = Date.new(Time.now.year, Time.now.month, -1)

days = (1..last.day).map{|d| '%2d' % d}
days.unshift *[nil] * (last + 1 << 1).wday

puts last.strftime "%B %Y"
puts days.each_slice(7).map{|week| week * "\t"}
```

```shell-session
January 2015
				 1	 2	 3
 4	 5	 6	 7	 8	 9	10
11	12	13	14	15	16	17
18	19	20	21	22	23	24
25	26	27	28	29	30	31
```

- `Date.new`は日付に-1を指定すると月末を取得できる
- `Date#+`で別の日に移動できる (過去はマイナス)
- `Date#<<`で別の月に移動できる (未来はマイナス)


- 配列内で範囲オブジェクトに*をつけると展開できる
- 配列 * 文字列でその文字列を各要素で挟んだ文字列を得られる
- 配列をputsすると要素ごとに出力する
unicorn + capistrano-rsyncの環境で、undefined method `set' for main:Object (NoMethodError) が発生した場合


こんなエラーが発生しまして。

```
E, [2015-01-07T01:46:36.842850 #2619] ERROR -- : undefined method `set' for main:Object (NoMethodError)
/Users/okitsu.takatomo/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/capistrano-rsync-1.0.2/lib/capistrano/rsync.rb:8:in `<top (required)>'
/Users/okitsu.takatomo/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/bundler-1.7.11/lib/bundler/runtime.rb:85:in `require'
/Users/okitsu.takatomo/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/bundler-1.7.11/lib/bundler/runtime.rb:85:in `rescue in block in require'
/Users/okitsu.takatomo/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/bundler-1.7.11/lib/bundler/runtime.rb:68:in `block in require'
/Users/okitsu.takatomo/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/bundler-1.7.11/lib/bundler/runtime.rb:61:in `each'
/Users/okitsu.takatomo/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/bundler-1.7.11/lib/bundler/runtime.rb:61:in `require'
/Users/okitsu.takatomo/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/bundler-1.7.11/lib/bundler.rb:134:in `require'
/Users/okitsu.takatomo/Documents/workspace/app_server/config/application.rb:7:in `<top (required)>'
/Users/okitsu.takatomo/Documents/workspace/app_server/config/environment.rb:2:in `require'
/Users/okitsu.takatomo/Documents/workspace/app_server/config/environment.rb:2:in `<top (required)>'
config.ru:4:in `require'
config.ru:4:in `block in <main>'
```

以下で解決 (require: falseの付与) 

```Gemdile
gem 'capistrano'
gem 'capistrano-rails', require: false
gem 'capistrano-rsync', require: false
gem 'capistrano-rbenv', require: false
gem 'capistrano-bundler', require: false
gem 'capistrano3-unicorn', require: false
```
[初めての]Wordpressのインストール メモ

色々な所にインストール方法は載っているけど自分の勉強用にWordpressのインストール方法をメモ

# 前提
ApacheとPHPとMySQLがインストールされてなければインストールする。インストールされてあればDB作成から。
## ApacheとPHPとMySQLのインストール
### Apacheのインストール
* 以前インストールしてたので割愛・・・＾＾；

### PHPのインストール

```
$ yum -y install php php-mbstring php-pear php-mysql
```

* PHPの設定変更
    * short_open_tagをOffからOnにする。
    * そのほかも必要であれば。

```
$ vi /etc/php.ini
short_open_tag = On に変更
```

###  MySQLのインストール
 
```
$ yum install mysql*
```

MySQLを起動

```
$ service mysqld start
```
または

```
$ /etc/init.d/mysqld start
```

起動時にMySQLを自動起動するように設定

```
$ chkconfig mysqld on
```

#### MySQL初期設定

```
$ mysql_secure_installation
```

パスワードなどを設定。（以下が表示されている所で各入力）

```
Enter current password for root (enter for none): 空ENTER
Set root password? [Y/n]：空ENTER
New password:パスワードを入力
Re-enter new password:パスワードを再入力

Remove anonymous users? [Y/n]：空ENTER
Disallow root login remotely? [Y/n]：空ENTER
Remove test database and access to it? [Y/n]：空ENTER
Reload privilege tables now? [Y/n]：空ENTER
```

# Wordpressインストール
## MySQLにWordpress用DBを作成

* MySQLに接続

```
$ mysql -u root -p
```

* DB名をwordpressに（任意な名前）

```
$ create database wordpress;
```

* データベースを操作するユーザーを作成
    * wpuserがユーザ
    * passwordがパスワード

```
$ grant all on wordpress.* to 'wpuser'@'localhost' identified by 'password';
```

MySQL終了

```
$ quit;
```

## Wordpressをダウンロード

* ダウンロード
    * バージョン毎のURLは以下から確認
        * http://ja.wordpress.org/releases/

```
$ cd /var/www/html
$ wget https://ja.wordpress.org/latest-ja.tar.gz
```

* 解凍

```
$ tar zxvf latest-ja.tar.gz
```

* 配置したい場所へ移動して権限変更

```
* mv wordpress /var/www/html/wordpress
* chown -R apache.apache /var/www/html/wordpress
```

## Wordpress設定ファイル
* ブラウザからアクセス
    * http://hogehoge//wordpress/wp-admin/setup-config.php
* 先ほど設定したDB名やユーザ名に変更
* 問題なければ「インストール実行」ボタンを押す
* サイト名などもろもろ入力
* 完了
.gitignoreを書くときはBOMに注意

## やっちゃいけないこと
タイトルの通り、`.gitignore`を書くときに文字コードをutf-8(***BOMあり***)で保存してはいけません。
※問題は「BOMあり」の部分。utf-8(BOMなし)はもちろん問題なし。

## 症状
1行目だけ無視されません。例えば、次のような`.gitignore`を書いたとする。

```
(BOM)hoge.txt
fuga.txt
piyo.txt
```

こうすると、どうしてもhoge.txtが無視されない。2行目の`fuga.txt`、3行目の`piyo.txt`は意図通り無視されるので、気づきにくい。そして、テキストエディタ上では(BOM)は見えないので何がいけないのかさっぱりわからないというね。気をつけましょう。
brew updateでerror: Your local changes to the following files would be overwritten by merge と言われる解決方法

brew updateしたらエラーがでました。

```bash:brewのupdateでエラー
brew update
error: Your local changes to the following files would be overwritten by merge:
	Library/Formula/libxslt.rb
Please, commit your changes or stash them before you can merge.
error: Your local changes to the following files would be overwritten by merge:
	Library/brew.rb
Please, commit your changes or stash them before you can merge.
Aborting
Error: Failure while executing: git pull -q origin refs/heads/master:refs/remotes/origin/master
```
brewがこわれてるみたいなので最新にするといいみたいです。

```bash:brewのリポジトリを新しくする
cd $(brew --prefix)
git fetch origin
git reset --hard origin/master
```
git logをしたらコミットが変わっていました。

なので次にbrewをupdateすると成功すると思います。

```bash:brewのupdate
brew update
```
今度は成功しました。