OmniAICreator/Qiita-1.07M huggingface dataset:
JenkinsからMavenを自動インストールした場合のProxy設定

Proxy環境でJenkinsからMavenを自動インストールした時、依存モジュールのダウンロード時にホストへの経路がありません(No route to host)でエラーになったので対象方法をメモ

投稿者のJenkins環境は以下のとおりです

```environment
OS: CentOS 6.5
Jenkins: jenkins-1.571-1.1(yumからインストール)
```

Mavenを自動インストールした場合、以下のディレクトリにインストールされます

```MavenInstallDir
/var/lib/jenkins/tools/hudson.tasks.Maven_MavenInstallation/"Jenkins上から入力したMaven名"/
```

例：Maven名をamatsukazeとした場合

```MavenInstallDirAamatsukaze
/var/lib/jenkins/tools/hudson.tasks.Maven_MavenInstallation/amatsukaze/
```

MavenのProxy設定を記述するsettings.xmlのパス

```MavenSetteingsPath
/var/lib/jenkins/tools/hudson.tasks.Maven_MavenInstallation/"Jenkins上から入力したMaven名"/conf/settings.xml
```

例：Maven名をamatsukazeとした場合

```MavenSetteingsPathAmatsukaze
/var/lib/jenkins/tools/hudson.tasks.Maven_MavenInstallation/amatsukaze/conf/settings.xml
```

このsetteings.xmlにProxy設定を記述すればProxy経由で依存モジュールのダウンロードが行われます
java8のAPIを読んで、目立たない変更を発見するメモ

Effective Javaで「APIの基本的なところくらい読んどけ」と書いてあった気がするので
読むついでにJava8で「なんか増えてる！」と発見したことをメモします。
随時追記していきます。

##java.langパッケージ
###Booleanクラス
`public static boolean logicalAnd(boolean a, boolean b)`
`public static boolean logicalOr(boolean a, boolean b)`
`public static boolean logicalXor(boolean a, boolean b)`
* 上から論理積、論理和、排他的論理和を返す。使いどころがわかりません。
###Byteクラス
`public static int hashCode(byte value)`

* 他のラッパークラスにもありましたが、使いどころがわかりません。内部実装で使われてるのかな？

`public static int toUnsignedInt(byte x)`
`public static int toUnsignedLong(byte x)`

* unsignedへの変換キタ！今までは&演算でマスクしたりしないといけませんでした。

###Doubleクラス
`public static double sum(double a, double b)`
`public static double max(double a, double b)`
`public static double min(double a, double b)`

* Integerとか他のラッパクラスにもありました。

###Integerクラス
`public static String toUnsignedString(int i)`
`public static String toUnsignedString(int i, int radix)`
`public static int parseUnsignedInt(String s)`
`public static int compareUnsigned(int x, int y)`
`public static int divideUnsigned(int dividend, int divisor)`
`public static int remainderUnsigned(int dividend, int divisor)`

* Byteクラス然り、unsignedのサポートが地味に増えてます。

###Stringクラス
`public static String join(CharSequence delimiter, CharSequence... elements)`
`public static String join(CharSequence delimiter, Iterable<? extends CharSequence> elements)`

* お待ちかねの文字列結合。やっと、という感じ。
RuboCop | Style/SpaceAroundEqualsInParameterDefault

# RuboCop | Style/SpaceAroundEqualsInParameterDefault

## 概要

RuboCopの「Style/SpaceAroundEqualsInParameterDefault」警告について。

オプション引数のデフォルト値の設定時に半角スペースを必要とするかどうかを
設定・チェックする。

### 設定値一覧

|設定対象|対象|内容|デフォルト|
|:-----|:--|:---|:---:|
|EnforcedStyle|space|スペースが必要|○|
|EnforcedStyle|no_space|スペースが不要|--|

## SpaceAroundEqualsInParameterDefault

### 検証プログラム

~~~ruby:space_around_equals_in_parameter_default.rb
def hoge(a, b=nil)
  print a + b
end

def hoge(a, b =nil)
  print a + b
end

def hoge(a, b= nil)
  print a + b
end

def hoge(a, b = nil)
  print a + b
end
~~~

### 実行結果 デフォルト の場合

~~~yaml:.rubocop.yml
SpaceAroundEqualsInParameterDefault:
  EnforcedStyle: space
~~~

~~~bash
$ rubocop space_around_equals_in_parameter_default.rb
Inspecting 1 file
C

Offenses:

space_around_equals_in_parameter_default.rb:1:14: C: Surrounding space missing in default value assignment.
def hoge(a, b=nil)
             ^
space_around_equals_in_parameter_default.rb:5:14: C: Surrounding space missing in default value assignment.
def hoge(a, b =nil)
             ^^
space_around_equals_in_parameter_default.rb:9:14: C: Surrounding space missing in default value assignment.
def hoge(a, b= nil)
             ^^

1 file inspected, 3 offenses detected
~~~

### 実行結果 no_space に設定します

~~~yaml:.rubocop.yml
SpaceAroundEqualsInParameterDefault:
  EnforcedStyle: no_space
~~~

~~~bash
$rubocop space_around_equals_in_parameter_default.rb
Inspecting 1 file
C

Offenses:

space_around_equals_in_parameter_default.rb:5:14: C: Surrounding space detected in default value assignment.
def hoge(a, b =nil)
             ^^
space_around_equals_in_parameter_default.rb:9:14: C: Surrounding space detected in default value assignment.
def hoge(a, b= nil)
             ^^
space_around_equals_in_parameter_default.rb:13:14: C: Surrounding space detected in default value assignment.
def hoge(a, b = nil)
             ^^^

1 file inspected, 3 offenses detected
~~~

## 補足

この警告は rubocop -a で修正可能です。

## 対象コード
https://github.com/bbatsov/rubocop/blob/master/lib/rubocop/cop/style/space_around_equals_in_parameter_default.rb
https://github.com/bbatsov/rubocop/blob/master/spec/rubocop/cop/style/space_around_equals_in_parameter_default_spec.rb

## RuboCopまとめ記事

http://qiita.com/tbpgr/items/edbfecb6a6789dd54f47
Ubuntu14.04でlxc debianコンテナ環境を構築

#ホスト環境構築

##lxcのインストール
```bash
apt-get install lxc
```

##コンテナの作成
```bash
lxc-create -t debian -n test
```

##作成したコンテナを起動、端末へ入る
```bash
lxc-start -n test
```

ログイン情報はコンテナを作成した際の最後にコンソールへ表示されている

##DHCPのIPアドレスの割り当て範囲を変更
```bash
emacs /etc/default/lxc-net
```

```bash:lxc-net
#LXC_DHCP_RANGE="10.0.3.2,10.0.3.254"
LXC_DHCP_RANGE="10.0.3.100,10.0.3.254"
```

一旦reboot
```bash
ps ax | grep lxc-dnsmasq
```
を実行して、変更が反映されていることを確認

#lxc環境構築

##rootパスワードの変更
`passwd root`

##ユーザの作成
`adduser test`

##必要なパッケージのインストール
`apt-get install apt-utils emacs ssh`

##コンテナのIPアドレスを固定
`emacs /etc/network/interfaces`

```shell:interfaces
#auto eth0
#iface eth0 inet dhcp
iface eth0 inet static
  address   10.0.3.2
  network   10.0.3.0
  netmask   255.255.255.0
  broadcast 10.0.3.255
  gateway   10.0.3.1
  dns-nameservers 10.0.3.1
```

ネットワークを再起動
`/etc/init.d/networking restart`

#再度ホストから設定

ホスト側から変更後のIPアドレスにPINGが通るのか確認
`ping 10.0.3.2`

##IP_forwardの設定
```
echo 1 > /proc/sys/net/ipv4/ip_forward
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
```

続きは後ほど加筆
TypeScript 用 MVC Framework な TypeFramework を使ってみる

まずは npm でインストールします。

```zsh
$ npm install -g typeframework-cli
```

新規プロジェクトを作成してフレームワークを起動します。

```zsh
$ tfw new myTypeFramewarkProject && cd myTypeFramewarkProject && tfw start
```

新規プロジェクトのディレクトリ構成は以下で作成されます。

```zsh:myTypeFramewarkProject
.
├── Gruntfile.js
├── app
│   ├── Global.ts
│   ├── controllers
│   │   └── HomeController.ts
│   ├── models
│   └── views
│       ├── index.ejs
│       └── layout.ejs
├── app.json
├── app.ts
├── node_modules
│   └── ...
├── package.json
└── public
    ├── css
    │   └── main.css
    ├── img
    └── js
```

新規に model を作成してみます。app/models ディレクトリに Book.ts を作成します。

```ts:app/models/Book.ts
/// <reference path="../../app.ts" />

class Book extends TF.Model {

    constructor(public title: string, public author: string, public publisher: string, public price: number) {
        super();
    }

}

app.addModel(Book);
```

app.ts に Book.ts へのリファレンスを追加します。

```ts:app.ts
/// <MODEL REFERENCES>
/// <reference path="app/models/Book.ts" />
```

Book モデルを追加してみます。

```ts
var book = new Book('TypeScript', 'Zeke Kievel', 'GitHub', 100);

book.save((err) => {
    // コールバック
});
```

Book モデルを更新してみる。

```ts
// id が 1 のデータを取得して author プロパティだけ値を書き変える。
Book.get(1).done((err, book:Book) => {
    book.author = '別の誰か';
    book.save((err) => {
        // コールバック
    });
});
```

TypeScript でスムーズに MVC なプロジェクトが始められそうで良い感じでした。
Rasberry PIを買ってからやった事(初級編)


##インストール
SDカードを作ってインストールするところが超絶詰まった。
自分は[このやり方](http://qiita.com/kasei-san/items/a52cde10d7f9ce9bcf09)でmacのターミナルでSDカードにコピーしたけど、何故か2,3回上手くいかなかったw
後で知ったけど、[こっちのRPi-sd card builderを使う方](http://www.absolute-keitarou.net/blog/?p=1153)がいいかも。

とりあえず初期インストール後から。
とにかくsshでログインして設定をガシガシ変えます。

```
ssh pi@#{IPアドレス}
```

ID: pi
パスワード: raspberry

初期は上記でログインできます。

##vimをインストール
Raspbianに初期でインストールされているviがとにかく使いにくいw
とりあえずvimをインストールしましょう！

```
sudo apt-get update
sudo apt-get install vim
```

##ssh周りを変更
鍵認証で出来るように変更しましょう。
ついでにRootでログインできないようにしたりとか、ssh周りは修正しておいた方がいいですね。

```
#Port 22
Port 10022 #portも適当に変更しておきましょう
PermitRootLogin no # yes→noに
AuthorizedKeysFile      %h/.ssh/authorized_keys #コメントアウトを外しておく
PasswordAuthentication no # yes→noに
```

rasberry pi上でも公開鍵/秘密鍵を作っておきます。

```
ssh-keygen -t rsa
```

authorized_keysを作成します。

```
sudo touch .ssh/authorized_keys
chmod 700 .ssh
chmod 600 .ssh/authorized_keys
```

sshのログイン元の公開鍵をscp or 直接テキストコピーでauthorized_keysに書き込みます。
※直接テキストコピーは変なスペースとか入ったりするので気をつけてくださいねw

sshを再起動かけます。

```
sudo /etc/init.d/ssh restart
```

```
ssh -i .ssh/id_rsa -p 10022 pi@#{IPアドレス}
```

これでloginできればokです。
あとはssh_configに書いてログインの入力を楽に。

```.ssh/config
Host pi
  HostName #{IPアドレス}
  User pi
  Port 10022                                                                                                                                                                                   
  IdentityFile ~/.ssh/id_rsa
```                                

これでokです。

##rbenv/ruby-buildでrubyをインストール

実はrubyはデフォルトで入ってます。
が、1.9.3だったので2.1系をインストールします。

普通に[rbenv のインストール (Linux Mint)](http://qiita.com/tsubu-mustard/items/3f818bf9831a4a934c5a)ここを参照しながら入れてもらえればokです。

※ちなみに僕の場合

```
sudo rbenv install 2.1.2
sudo: rbenv: command not found
```

となったので、下記を追加で回避

```/etc/profile
alias sudo='sudo env PATH=$PATH'
```

##実際にLEDを光らしてみる

まずは下記をみて25番だけ光らせる事をやってみましょう。
[Raspberry PiでLED点灯（Lチカ）してみよう。](http://lchikaamazon.hatenablog.com/entry/2013/11/18/171637)

アノードとカソードは間違えないようにしてくださいね。

※ちなみにブレッドボードは下記をみて頂ければ分かります。
[ブレッドボードの使い方]
(http://denshi-kousaku.nazotoki-k.com/kiso/eic-801.htm)

無事25番を光らせる事ができれば成功です。

##LEDを光らせるmoduleを作る

下記のサイトに凄く便利なmoduleがあります。(module LED)
今後LEDを何かのタイミングで光らしたい場合は必須です！
[Raspberry PI がその日の天気を教えてくれる](
http://zonomasa.hatenablog.com/entry/raspberry_pi_weather_forecast)
個人的メモ

「あとで読む」系のメモ。
はてぶはUIがごちゃごちゃして嫌いだから、1ページにカテゴリでまとめられる何かが欲しい

##### iOS / Android 共通フレームワークを作りたい
http://xamarin.com
http://www.intersoftpt.com/crosslight/

##### Swift関連
[SwiftによるiOS開発再入門](http://www.slideshare.net/hasegawatomoki/swiftios)

##### 環境
[IB上でカスタムフォントを選択してプレビューできるXcodeプラグイン『MoarFonts』](http://d.hatena.ne.jp/shu223/20140315/1395050662?utm_source=dlvr.it&utm_medium=twitter)

##### Xcode + Objective-C 以外を使ったアプリ開発
[初めての AIR for iOS アプリケーションの作成](http://help.adobe.com/ja_JP/air/build/WSfffb011ac560372f3cb56e2a12cc36970aa-8000.html)
[[ObjC][AppCode] yidev第十五回でデモしたAppCodeの内容](http://qiita.com/itoz/items/18187ee69755d85251ed)

##### ゲーム
[Swift (with SceneKit) で簡単な3Dゲームを作ってみた](http://www.slideshare.net/hirumakazuya/swift-with-scenekit-3d)

##### プログラミング
[iOS/Androidアプリエンジニアが理解すべき「Model」の振る舞い](http://www.slideshare.net/mokemokechicken/iosandroidmodel)

##### ライブラリ
[【使ってみた】簡単にScrollViewをフルスクリーンに出来るAMScrollingNavBar](http://diario.hatenablog.com/entry/2014/07/05/050928)

##### デザイン
[エンジニアこそ色彩デザインを学ぼう](http://ppworks.hatenablog.jp/entry/2014/07/17/115852)
[UI/UXデザイナーなら一度は目を通しておきたい「デザイン原則」まとめ【更新版】](http://uxxinspiration.com/2014/02/design-principles/)

##### CI / 自動テスト
[趣味でつくるiOSアプリこそJenkinsでリリースを自動化](http://qiita.com/makoto_kw/items/b23350aed11ea87cd92b)
[システムテスト自動化の基礎知識とMonkeyTalkの使い方](http://www.atmarkit.co.jp/ait/articles/1407/16/news037.html)
[GitHubとJenkins連動　自動デプロイ　開発環境設定編](http://megadreams14.com/?p=27)

##### マネジメント
[KAIZEN platform Inc. の開発マネジメント](https://speakerdeck.com/naoya/kaizen-platform-inc-falsekai-fa-manezimento)

##### 人工知能
[ゲームの中の人工知能](http://www.slideshare.net/youichiromiyake/y-miyake-tgu2014626)

##### その他
[AppStoreにあるアプリのヘッダーファイルを抽出する] (http://qiita.com/noppefoxwolf/items/314b3e12a32c8f4c6672)
[サードパーティアプリのメソッドをhookする。メモ](http://qiita.com/noppefoxwolf/items/322b7b50846cf51d734a)
[すべてのプログラマが読むべき記事10選](http://postd.cc/10-articles-every-programmer-must-read/)
jquery.smoothScroll.js 微改造メモ

#概要
jquery.smoothScroll.js を利用すると、簡単にスムーズなページ内スクロールが適用できますが、自分が使いやすいよう微改造をしたメモです。

配布サイト
http://2inc.org/blog/2012/02/14/1233/

##微改造1：特定のClassだけに適用
そのままだと、ページ内リンクすべてにスムーズスクロールが適用されますが、FancyBox（ http://fancyapps.com/fancybox/ ）という別プラグインと競合したので、明示的に指定した Class にのみ適用するようにしました。

変更前

```jquery.smoothScroll.js
$( 'a[href^="#"]' ).SmoothScroll( {
	duration : 1000,
	easing : 'easeOutQuint'
} );
```

変更後（smooth というClassに適用）

```jquery.smoothScroll.js
$( '.smooth' ).SmoothScroll( {
	duration : 1000,
	easing : 'easeOutQuint'
} );
```

##微改造2：URLに ` #hoge` がつかないようにする
デフォルトだと、スクロール後、URLが自動的に、` /hoge.html` から ` /hoge.html#hoge` と変わります。これが変わらないようにしました。

変更前

```jquery.smoothScroll.js
targetBody.animate(
	{
		scrollTop: offset.top
	},
	params.duration,
	params.easing,
	function() {
		location.hash = targetHash;
	}
);
```

変更後（ハッシュ付与部分コメントアウト）

```jquery.smoothScroll.js
targetBody.animate(
	{
		scrollTop: offset.top
	},
	params.duration,
	params.easing,
	function() {
		//location.hash = targetHash;
	}
);
```
Centos6.5に Nginx 1.7.3（mainline）をインストールしてみた

# Nginx
枯れた技術の Apache もいいけど Nginx も触っておかないと…と思いつつ。ようやく重い腰をあげてみました。
いまさらですが Nginx の[バージョン](http://nginx.org/)みてみると結構[頻繁にバージョンアップ](http://wiki.nginx.org/Install)されているようでいい感じです。なんだか Apache が流行った初期の頃を思い出しますね。

> [CentOSにmainlinのnginxをyumでインストール](http://nextat.co.jp/staff/archives/23)

パッケージで導入します。[開発者のIgorさんが「mainlineがいちばん安定している！」と仰ってたのでバンバンmainline使いましょう。](http://heartbeats.jp/hbblog/2014/06/centosmainlinnginxyum.html) らしいので mainline を入れてみます。開発者用とかお試し版という位置づけで「dev」とか使ったりするけど mainline は、どういう意味なんでしょうね？

# リポジトリをインストール
OS毎に[インストール手順](http://wiki.nginx.org/Install)が載っているのでそのとおりに行えばok。
mainline からインストールするので ```/etc/yum.repos.d/nginx.repo``` を少し書き換えます。

```
$ sudo yum install http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
$ sudo vi /etc/yum.repos.d/nginx.repo
baseurl=http://nginx.org/packages/centos/6/$basearch/
↓
baseurl=http://nginx.org/packages/mainline/centos/6/$basearch/
```

> [Yum 変数](https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/6/html/Deployment_Guide/sec-Using_Yum_Variables.html)

# インストールと起動
あとは普通にインストールと起動を行えばok。

```
$ sudo yum install nginx
$ sudo service nginx start
$ sudo chkconfig nginx on
```

# yum で自動更新しないように設定
yum の fastestmirror を導入、もしくは update を行うと自動的に最新化されてしまうので ```/etc/yum.conf``` に以下を追加する。

```
exclude=nginx*
```
Heroku (Rails) で MySQL 使う。

# ClearDB, JawsDB

## Addon を追加

```
$ heroku addons:add cleardb:ignite
```

or 

```
$ heroku addons:create jawsdb:kitefin
```

## 環境変数の設定

```
$ heroku config | grep CLEARDB_DATABASE_URL
CLEARDB_DATABASE_URL:       mysql://<username>:<password>@<host>/<databse>?reconnect=true
```

or 

```
$ heroku config |grep JAWSDB_URL
JAWSDB_URL:       mysql://<username>:<password>@<host>/<databse>
```

## ドライバを mysql2 に変更

```
$ heroku config:set DATABASE_URL='mysql2://<username>:<password>@<host>/<database>?reconnect=true'
```

## メモ

- ClearDB の id(auto_increment) は 10ずつ増える
- ClearDB の MySQL のバージョンは 5.5系
- JawsDB の MySQL のバージョンは 5.7系 

## 参考・引用

>
- https://elements.heroku.com/addons/cleardb
- https://elements.heroku.com/addons/jawsdb
SwiftからMachのhost_info()を呼び出す(UnsafePointerのキャスト)

実はSwift用のMach IPCインターフェース定義が用意されています。
これを使えば簡単に呼び出せると思いきや、ものによってはタイプセーフなSwiftと相性が悪く呼び出すのが難しい場合があります。

たとえばホストの情報を取得する```host_info()```の定義は以下のようになっています。

```swift:Darwin/Mach/mach_host
func host_info(host: host_t, flavor: host_flavor_t, host_info_out: host_info_t, host_info_outCnt: UnsafePointer<mach_msg_type_number_t>) -> kern_return_t
```

flavorに欲しい情報の種類を指定して、値を収めるメモリのポインタとその大きさを渡すとその領域にセットしてくれるというものです。flavorごとにhost_info_outに指定する構造体の型と長さが異なるのでこうなっているわけですが、この実にC言語っぽい仕様はSwiftでは曲者です。

とりあえずflavor HOST_BASIC_INFOを取得する場合のコードは以下のようになります。

```swift
import Foundation

/// カーネル用のポートを取得する
var hostPort = mach_host_self()

/// メモリ領域を確保してそのポインタを得る
/// 意味はmalloc(sizeof(host_basic_info) * 1)と同じ
var buffer = UnsafePointer<host_basic_info>.alloc(1)
///　HOST_BASIC_INFO_COUNTが定義されていないので自分で計算する
var bufferCount = mach_msg_type_number_t(sizeof(host_basic_info) / sizeof(integer_t))

/// 引数の型に合わせてポインタをキャストする
var ptr = host_info_t(buffer)

/// host_info()を呼び出して値を取得する
var result = host_info(hostPort, HOST_BASIC_INFO, ptr, &bufferCount)

/// ポインタの先をstruct host_basic_infoとして参照する
var basic_info = buffer.memory

var max_cpus         = basic_info.max_cpus
var avail_cpus       = basic_info.avail_cpus
var memory_size      = basic_info.memory_size
var cpu_type         = basic_info.cpu_type
var cpu_subtype      = basic_info.cpu_subtype
var cpu_threadtype   = basic_info.cpu_threadtype
var physical_cpu     = basic_info.physical_cpu
var physical_cpu_max = basic_info.physical_cpu_max
var logical_cpu      = basic_info.logical_cpu
var logical_cpu_max  = basic_info.logical_cpu_max
var max_mem          = basic_info.max_mem

///　確保したメモリを破棄する
buffer.destroy()
```

`host_info()`の引数host_info_outの型である`host_info_t`は`UnsafePointer<integer_t>`のエイリアスです。この引数の場合は`integer_t`単位のメモリ領域の先頭アドレスという意味になります。host_info_outCntにはその領域が`integer_t`何個分の大きさなのかを指定します。

ポインタの型が`UnsafePointer<host_basic_info>`であれば簡単な話なのですが、そうではないのでなんとかして`UnsafePointer<integer_t>`にキャストする必要があります。

が、`UnsafePointer`にキャストできるのは`UnsafePointer`か`COpaquePointer`だけのようです。

そして、Swiftの中で`UnsafePointer`を作り出す方法は以下の方法しかないようです。

- `COpaquePointer`から
- 任意のアドレス値から
- `UnsafePointer`から
- `ConstUnsafePointer`から
- ヌルポインタとして
- メモリを確保してそこへのポインタとして

ということで`UnsafePointer<host_basic_info>.alloc()`でアンセーフなメモリを確保して、その中に返してもらって、利用後に速やかに破棄するという感じにしかならないようです。
Unity向け .gitignoreの設定について


#Unity向け.gitignoreについて
色々なところに Unityで、version管理されるべきではないファイルについての記述があるが、分散しており、また古い情報もあるようなのでまとめる。

##一次情報
Unity documentation - Using External Version Control Systems with Unity

http://docs.unity3d.com/Manual/ExternalVersionControlSystemSupport.html

間違いなくこれがUnityのオフィシャルの説明なので、一番正しいはず。

##大分正しい情報, 合っている(と思われる情報)

http://kleber-swf.com/the-definitive-gitignore-for-unity-projects/
こちらは基本的にはあっている。

https://github.com/github/gitignore/blob/master/Unity.gitignore
こちらも十分正しい

##間違っている(と思われる情報)
/Library/metadata/*をignoreするとマズイ
上記が記載されているwebsiteをいくつか見たのだが、[オフィシャルの説明](http://docs.unity3d.com/Manual/ExternalVersionControlSystemSupport.html)でLibraryをignoreしろと書いてある以上、正しいとは思えない。

#個人的に足したほうが良いと思っている設定(必須ではない)

*.log
各種プラグインなどが作成することがあり、大体がログとして使われるファイルなので、version controlされるべきではない事が多い

*.pyc
こちらも各種プラグインで勝手に作成されることがある。本来はpython でのコンパイルされたbytecodeのcacheであり、コミットされても被害は少ないのだが、気持ち悪いのでcommitされていない方が良いと思う


個人用.gitignore
上記klever-swf.comをベースにいくつか必要だと思う設定を足して使っている。


```shell-session:.gitignore
# =============== #
# Unity generated #
# =============== #
Temp/
Obj/
UnityGenerated/
Library/
 
# ===================================== #
# Visual Studio / MonoDevelop generated #
# ===================================== #
ExportedObj/
*.svd
*.userprefs
*.csproj
*.pidb
*.suo
*.sln
*.user
*.unityproj
*.booproj
 
# ============ #
# OS generated #
# ============ #
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
Icon?
ehthumbs.db
Thumbs.db

# ============ #
# for others   #
# ============ #

*.log #log files, for some plugins
*.pyc #python bytecode cache, for some plugins.
sysinfo.txt #Unity3D Generated File On Crash Reports
```
VimへのNeoBundleのインストール

@yoza さんの[dein.vimを使ってみる](http://qiita.com/yoza/items/2f8bd33a18225754f346)や、
@delphinus35 さんの[NeoBundle から dein.vim に乗り換えたら爆速だった話](http://qiita.com/delphinus35/items/00ff2c0ba972c6e41542?utm_content=buffer1bafe&utm_medium=social&utm_source=twitter.com&utm_campaign=buffer)で紹介されているdeinというのがいいそうです。

最新版は[こちら](http://qiita.com/poad1010/items/de16d9a1af78687c87cf)

# pluginのダウンロード
```
mkdir -p ~/.vim/bundle
git clone https://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim
```

# _vimrcの作成

.vimrcへの追記でもいいけど、ホームディレクトリへ_vimrcとして以下を保存するといい。

```
set nocompatible               " be iMproved
filetype off


if has('vim_starting')
  set runtimepath+=~/.vim/bundle/neobundle.vim
  call neobundle#rc(expand('~/.vim/bundle/'))
endif
" originalrepos on github
NeoBundle 'Shougo/neobundle.vim'
NeoBundle 'Shougo/vimproc', {
  \ 'build' : {
    \ 'windows' : 'make -f make_mingw32.mak',
    \ 'cygwin' : 'make -f make_cygwin.mak',
    \ 'mac' : 'make -f make_mac.mak',
    \ 'unix' : 'make -f make_unix.mak',
  \ },
\ }
NeoBundle 'VimClojure'
NeoBundle 'Shougo/vimshell'
NeoBundle 'Shougo/unite.vim'
NeoBundle 'Shougo/neocomplcache'
NeoBundle 'Shougo/neosnippet'
NeoBundle 'jpalardy/vim-slime'
NeoBundle 'scrooloose/syntastic'
NeoBundle 'Shougo/vimfiler.vim'
NeoBundle 'itchyny/lightline.vim'
NeoBundle 't9md/vim-textmanip'

NeoBundle 'Shougo/unite.vim'
NeoBundle 'ujihisa/unite-colorscheme'
NeoBundle 'tomasr/molokai'
""NeoBundle 'https://bitbucket.org/kovisoft/slimv'

filetype plugin indent on     " required!
filetype indent on
syntax on
```

# vimprocのdllをコピー

kaoriya版の場合はvimprocが同封されているので、コピーする。

{kaoriya版gVimインストールディレクトリ}\plugins\vimproc\autoload\vimproc_win64.dllを.vim\bundle\vimproc.vim\autoloadへコピーする。

# インストール

vimを起動して以下を実行する。
```
:NeoBundleInstall
```
AngularJS で focus を設定する directive 作った


入力フォームの値に変更があったときに focus する directive を作ってみました。

Gist: https://gist.githubusercontent.com/onjiro/0295ac5a1f51da101806/raw/78f3d246c8b023a1285486f746d65d91c40b4f08/ng_focus_on_change.js

ユーザーによる入力フォームの値の変更、スクリプト中での値の変更の両方で発火します。
次のようなパターンでの3の挙動を実現する際に利用できるかと思います。

1. 入力フォームを submit
* 入力フォームをリセット
* 入力フォームの先頭にフォーカスを移動

``` ng_focus_on_change.js
angular.module('ngFocusOnChange', [])
  .directive('ngFocusOnChange', ['$timeout', function($timeout) {
    return {
      link: function(scope, element, attrs) {
        scope.$watch(attrs.ngFocusOnChange, function(newValue, oldValue) {
          // 以下のエラーを避けるために $timeout を使用
          // watch の最中に DOM イベントを発生させてはいけない
          // "Error: [$rootScope: inprog]"
          // https://docs.angularjs.org/error/$rootScope/inprog?p0=$digest
          if (newValue !== oldValue) {
            $timeout(function() { element.focus(); });
          }
        });
      }
    };
  }]);
```

``` usage_example.html
<input name="date"
       type="date"
       ng-model="anyValue"
       ng-focus-on-change="anyValue" />
```

こういう directive 誰かがもう作ってると思うのだけど、どこかに落ちてないものかしら。。。
Macターミナルのコマンドを打つ ~$ 部分に色を付け、ブランチ名を表示させる


Macで使用しているターミナル（bash）で、コマンドプロンプトに色をつけてブランチを表示させる設定です。

設定例

```bash:.bash_profile
git_branch() {
  echo $(git branch --no-color 2>/dev/null | sed -ne "s/^\* \(.*\)$/\1/p")
}
PS1='——\n\[\033[36m\]\u\[\033[0m\]\[\033[32m\]\w\[\033[0m\]:\[\033[35m\]$(git_branch)\[\033[0m\] $ '
```

出力結果
![スクリーンショット 2014-07-27 16.59.09.png](https://qiita-image-store.s3.amazonaws.com/0/41657/44aa36ba-0c78-4d5f-05c1-d360f44d71ad.png)
※開き直さないと反映されません。

### コマンドプロンプトで表示される結果と設定

|設定|内容|例|
|---|---|---|
|\h|ホスト名|あなたのMacの名前 </br>（システム環境設定＞ユーザとグループ＞ユーザ右クリックで編集可能）|
|\u|ユーザ名|ログインユーザーの名前</br>同上|
|\w|現在のディレクトリ</br>※フルパス|~/Applications|
|\W|現在のディレクトリ|Applications|
|\t|現在時刻</br>※24時間表記|17:14:42|
|\T|現在時刻<br>※12時間表記|05:14:42|
|\d|日付と曜日<br>※ダサいから注意|日  7 27|


### 色の設定

|コード|色|
|---|---|
|\\[\033[30m\]色付けたい部分\\[\033[0m\]|Black|
|\\[\033[31m\]色付けたい部分\\[\033[0m\]|Red|
|\\[\033[32m\]色付けたい部分\\[\033[0m\]|Green|
|\\[\033[33m\]色付けたい部分\\[\033[0m\]|Yellow|
|\\[\033[34m\]色付けたい部分\\[\033[0m\]|Blue|
|\\[\033[35m\]色付けたい部分\\[\033[0m\]|Mangenta|
|\\[\033[36m\]色付けたい部分\\[\033[0m\]|Cyan|
|\\[\033[37m\]色付けたい部分\\[\033[0m\]|White|
Windowsでの開発環境構築メモ

いつも適当なのでメモ
# 前提ソフト
* Lhaplus
* WinRAR
* Crescent Eve
* Dexpot
* Skype
* Tera Term
* Texlive (+ emath)
* Iron<br>
自分は解凍ソフトを数種類使う派です。(一時期はこれにLhaForgeと7Zipを加えた構成でした)<br>
Dexpotは仮想デスクトップソフトでBGM用のデスクトップやSNSを常時開いているデスクトップ等に分けています。結構いいです。<br>
IronはChromeからGoogleへの報告機能等を省いた"軽いChrome"とも言えるもので、少々不具合があったりはしますが本家より軽いので利用しています。

# 開発環境
* msysgit
* Git(上とは別物)
* JDK 7, 8
* Eclipse(Pleiades Platformからプラグイン選定しなおした物を使用)
* Visual Studio 2010 Pro
* Brackets
* Windbg
* IDA Pro Free

# Eclipseに導入しているプラグイン
* Eclipse 4.3.2 Pleiades Platform(土台)
* Eclipse JDT(Java)
* JDT Java8 Patch(Java8)
* Eclipse SDT(Scala)
* Bytecode Outline(Javaのバイトコードビューワ asmでのコードも吐いてくれる)
* JD-Eclipse(デコンパイラ)
* YEdit(YAMLエディタ)
* WindowBuilder(デザイナー)
* Swing Desinger(↑のSwing拡張)

# Vimの設定

```vim
syntax on
set number
 
set expandtab
set tabstop=4
set autoindent
colorscheme default "/usr/share/vim/vim72/colors or ~/.vim/colors
```
プラグインは入れないのが王道
旧vim-powerlineフォントを使っている人のためのagnosterパッチ

現在の[agnoster.zsh-theme](https://github.com/robbyrussell/oh-my-zsh/blob/master/themes/agnoster.zsh-theme)は新版のpowerlineフォントを対象としているので、
(旧版のフォントを使いたい人にとっては)文字化けしてまともに表示されない。
そこで以下の簡単なパッチ。

## agnoster.zsh-theme.patch
```diff
*** .oh-my-zsh/themes/agnoster.zsh-theme	2014-07-27 17:00:22.137778000 +0900
--- agnoster.zsh-theme	2014-07-27 17:04:07.984434873 +0900
***************
*** 26,32 ****
  # A few utility functions to make it easy and re-usable to draw segmented prompts
  
  CURRENT_BG='NONE'
! SEGMENT_SEPARATOR=''
  
  # Begin a segment
  # Takes two arguments, background and foreground. Both can be omitted,
--- 26,32 ----
  # A few utility functions to make it easy and re-usable to draw segmented prompts
  
  CURRENT_BG='NONE'
! SEGMENT_SEPARATOR='⮀'
  
  # Begin a segment
  # Takes two arguments, background and foreground. Both can be omitted,
***************
*** 100,106 ****
      zstyle ':vcs_info:*' formats ' %u%c'
      zstyle ':vcs_info:*' actionformats ' %u%c'
      vcs_info
!     echo -n "${ref/refs\/heads\// }${vcs_info_msg_0_%% }${mode}"
    fi
  }
  
--- 100,106 ----
      zstyle ':vcs_info:*' formats ' %u%c'
      zstyle ':vcs_info:*' actionformats ' %u%c'
      vcs_info
!     echo -n "${ref/refs\/heads\//⭠}${vcs_info_msg_0_%% }${mode}"
    fi
  }
  
```
Jenkins の JOB を一括で無効化する Hubot script を作成しました


Jenkins で特定の JOB を一括で、無効化／有効化したかったのですが、それらしいプラグインとかツールが見つからなかったので、 Hubot スクリプトにしてみました。

[npm package](https://www.npmjs.org/package/hubot-jenkins-job-status-change)

[使い方](https://github.com/mid0111/hubot-jenkins-job-status-change/blob/master/README.md)


## 仕組み

JOBの有効化／無効化が Jenkins で公開している Rest API に見当たりませんでした。  
なので、Jenkins 上でボタンぽちぽちしながら確認したところ、以下のリクエストで有効化／無効化のリクエストを送信できるようです。

```bash
$ curl -XPOST http://127.0.0.1/jenkins/job/test1/disable -H "Basic {auth}"
```

また、Basic 認証用のヘッダは、以下のようにして生成できます。

```coffee
'Basic ' + new Buffer(process.env.HUBOT_JENKINS_USER_NAME + ':' + process.env.HUBOT_JENKINS_PASSWORD).toString('base64')
```

以上を組み合わせて有効化／無効化のリクエストを実行するスクリプトです。


また、スクリプトの呼び出し方法は、READMEでは、　`jenkins job disable`としていますが、省略して`j j disable`などの呼び出しも可能にしてみました。

省略形でリッスンするための記述方法は↓

```coffee
robot.hear /j(?:enkins)? j(?:ob[s]*)? (.*)/i, (msg) ->
```

`(?:x)` と記述することで、`x`は書いても書かなくてもOK、かつ、正規表現マッチには使用しないものとして定義可能です。
spec_helper.rbで"uninitialized constant Rails (NameError)"に引っかかったので

備忘録。

名前付きルートを生成するために、spec_helper.rbに
`config.include Rails.application.routes.url_helpers`
を入れると、


` 'block in <top (required)>': uninitialized constant Rails (NameError)`

と出てしばらく苦戦。

同じくspec_helper.rbで
`ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'`
としてあげれば上手く名前付きルートでテストできた。

### 参照
Rspec/Rails: uninitialized constant ActiveSupport::Autoload (NameError)
http://stackoverflow.com/questions/24875626/rspec-rails-uninitialized-constant-activesupportautoload-nameerror
sshでX11のポートフォワーディングを有効にしたら困った

# 背景

[ninix-ayaをDockerでコンテナ化](https://github.com/kjunichi/docker-ninix-aya)して動かす際に、sshで-X付きでコンテナにつなぐことで、コンテナ側でDISPLAY環境変数の設定をせずに便利だし、何より、俺が研究室で片手間にワークステーション管理してた時代と異なり、XサーバーがデフォルトだとTCPリッスンしてない時代ということもあり、Macのsshの設定でX11のポートフォワーディングを有効にした。

# 困ったこと

最近FaceTimeカメラが認識されないことが多く、ログアウトや再起動で復活するので、やり過ごしているが、この際、ターミナルアプリが以前の状態を復元しようと頑張ってくれるが、ここでxauthで動かなくなる

# Work around

sshの設定でX11のポートフォワーディングの設定を戻した（無効に）。

# まとめ

どうせX11なアプリを動かすこも多いので、XQuartzを立ち上げておけばいいが、
なんとなくメモリ節約したかったりで踏み切れない
ログを集計するときによく使うコマンド。

時間ごとに出したいときとか。
for 分使ってやったりすると楽。

# for i in \`seq -w 0 23\`; do echo -n "$i: " ; cat logfile | grep "$i" | wc -l ;done

件数が多いの上位を調べる。
# cat logfile | awk '{print $6}' | sort | uniq -c | sort -nr | head -n 20

他どんなの使うんだろう？
良いのあったら教えて。
gconftool を使って gnome-terminal のフォントを Ricty にする

gnome-terminal 上で Ricty は GUI から設定できない
=====

理由はよく分からないけど，Ricty をPC上にインストールしても gnome-terminal では何故か設定ができない．

ターミナルからCLIで設定する事はできるのだけど，一回設定すると基本使う事はないので毎回忘れて毎回調べる事になっている...

んだもんで，さすがにアホくさいのでメモしておく．

gconftool-2 を使う
=====

cli上でのコマンドは以下の通り

```bash
$ gconftool-2 --set /apps/gnome-terminal/profiles/Default/font --type string "Ricty Regular 12"
```

まぁ見た通り，

* /apps/gnome-terminal/profiles/Default/font の値に set
* set する値の type は string で，内容は "Ricty Regular 12"

って指定になる．最後の "12" はフォントサイズを差している．

その設定はいずこに？
=====
`/apps/gnome-terminal/profiles/....`
なんて書き方してる辺りで「これはどっかにディレクトリがあるのか？」という疑問が湧いたけど，
`/`のディレクトリに`apps`なんて名前のディレクトリはもちろん無い．
って事で自分のホームディレクトリを `ls -al` で調べた所

.gconf フォルダを発見
-----

```bash
# 一部表示を省いています
$ ls -alF ~
...略...
drwx------ da0shi .gconf/
...略...
```
って感じのフォルダを発見．
中を覗いてみると `apps` フォルダが．さらにその中に `gnome-terminal` も発見．

...という事は？
-----

```bash
$ ls -R ~/.gconf/apps/gnome-terminal
.gconf/apps/gnome-terminal/:
%gconf.xml  profiles/

.gconf/apps/gnome-terminal/profiles:
%gconf.xml  Default/

.gconf/apps/gnome-terminal/profiles/Default:
%gconf.xml
```
おお! あった!
ただ，設定したのは `/apps/gnome-terminal/profiles/Default/font` なのだけど，`%gconf.xml`しか見当らない．
って事で`%gconf.xml`の中を覗くと

```xml
<?xml version="1.0"?>
<gconf>
    <entry name="font" mtime="***" type="string">
        <stringvalue>Ricty Regular 12</stringvalue>
    </entry>
    <entry> <!--...略...--> </entry>
    <!--...略...-->
</gconf>
```

との設定を発見．
なるほど，さっきのコマンドでここにデータを追加してたのね...

mtime の所に unix 時刻 で「いつ設定されたか」の記録もしているので，変に手動で弄らない方が良いとは思うけど，
どこで設定しているのかが分かってスッキリ!
golang環境設定


http://golang.org/doc/install

### macにgoをインストール

※私の場合

#### brewでinstall

```
brew install go
```

#### 環境変数を追加

vim .bashrc

```
# go
export GOPATH=$HOME/gocode
export GOROOT=/usr/local/opt/go/libexec
export PATH=$GOPATH/bin:$GOROOT/bin:$PATH
```

GOPATHはどこでもいい
GOROOTはbrewでインストールしたので、上記のパスじゃないと動かなかった

#### 動作確認

ちなみにvimのプラグインは下記のプラグイン入れました。
とりあえず、シンタックスハイライトしたかったので下記にしました。
https://github.com/fatih/vim-go


##### Hello World!!をコンソールで表示するためにコードを書く
vim hello.go

```go
package main

import "fmt"

func main() {
	fmt.Println("Hello world!!")
}
```

##### Hello World!!をコンソールに表示

http://golang.org/cmd/go/

```
go run hello.go

Hello world!!
```

```
go build hello.go
./hello

Hello world!!
```

##### ブラウザでHello World!!を表示するコードを書く

vim hello_web.go

```go
package main

import (
	"fmt"
	"net/http"
)

type Hello struct{}

func (h Hello) ServeHTTP(
	w http.ResponseWriter,
	r *http.Request) {
	fmt.Fprint(w, "Hello World!!")
}

func main() {
	var h Hello
	http.ListenAndServe("localhost:4000", h)
}
```

##### ブラウザでHello World!!を確認する

go run hello_web.go

http://localhost:4000

## クロスコンパイル

### インストール

#### macでhomebrewの場合

##### すでにインストールしている場合はアンインストール

```
brew uninstall go

```

##### クロスコンパイルオプションつきでインストール

* 全部

commonに加えてfreebsdなどをサポート

```
brew install go --cross-compile-all
```

* Darwin(mac),linux,windows

```
brew install go --cross-compile-common
```

### コンパイル

* linux

```
GOOS=linux GOARCH=amd64 go build hello.go
```

* windows

```
GOOS=windows GOARCH=amd64 go build hello.go
```

##### 対応表

http://golang.org/doc/install/source#environment


で、できたバイナリを各々の環境に持っていって
実行する
素晴らしいですね！
新しいサーバを追加した際にやる事(ssh/ファイアウォール/DB設定)


特に目新しい事もないですが、追加で新しいサーバを追加した際に変更しないといけない部分を備忘録的に。

今回はあくまでも既にミドルウェア周りは入れ終わってるものとしておきます。OSはcentosを想定。
(imageをコピーしてサーバを立てた or chefなどで既存のサーバと同じ状態を想定)

## 1.ssh周りの設定

何はともあれ、sshの鍵を作りましょう。
[ここ](http://www.atmarkit.co.jp/flinux/rensai/linuxtips/432makesshkey.html)を参考に。

```
ssh-keygen -t rsa
```

既存のサーバにPWなし(鍵認証)でログインできたりする必要があると思うので、ログインしたいサーバのauthorized_keysに公開鍵を登録しましょう。

```~/.ssh/authorized_keys
# 先程作成した鍵の~/.ssh/id_rsa.pubにある部分を
```
(↑ログイン先です)

最初はこの仕組みが分からず、とりあえず鍵を作って登録だ！ってやりがちですけど、一応[ここ](http://nigohiroki.hatenablog.com/entry/2013/08/18/221434)に詳しく載っているので勉強しておきましょうw 

ログイン出来るようになったら、ssh/hosts、ssh/configに登録して簡単にログイン出来るようにしておきましょう。

参考
[~/.ssh/config で簡単に複数ホストへのSSH接続を管理する](http://superbrothers.hatenablog.com/entry/20090730/1248971671)
[.ssh/configで設定すると接続が楽になる方法](http://qiita.com/murapon/items/a029d040ed4f67e50372)

## 2.mysqlの設定(必要ならば)

何も設定せずにmysqlのコマンドを打ったりすると、

```
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
```

何てエラーが出ます。
DBを別サーバで立てている場合は、mysqlに繋げるように設定をする必要があります。

同じサーバ内で立てるのであれば、[ここ](http://www.hi-ho.ne.jp/tsumiki/book_sup2.html)を参考にしてみて下さい。

別サーバの場合は新しいサーバから繋げるようにuser/hostを設定してしょう。

DBサーバの方でmysqlを起動し、user/hostを確認します。

```
mysql> SELECT host,user FROM mysql.user;

+-------------------+-----------+
| host              | user      |
+-------------------+-----------+
| localhost         | root      |
+-------------------+-----------+

```

ここにユーザを追加しましょう。

```
mysql> GRANT ALL PRIVILEGES ON *.* TO ユーザー名@#{新しいサーバのIPアドレス};
mysql> FLUSH PRIVILEGES;
```

今回は権限ALLにしてますが、詳しくは[ここ](http://www.dbonline.jp/mysql/user/index5.html)を参照して下さい。

これでmysqlは繋げるようになったかと思います。

## 3.ファイアウォールの設定

意外と1,2で達成感でて忘れがち(?)ですが、
ファイアウォールは忘れず設定しましょう。

ファイアウォール???...となる人は下記を見て勉強しましょうね。

参考：
[5分で絶対に分かるファイアウォール](http://www.atmarkit.co.jp/fsecurity/special/17fivemin/fivemin00.html)
[ファイアウォールの基礎知識]
(http://www.atmarkit.co.jp/ait/articles/0105/17/news002.html)
【質問エントリ】s3fsってdocker内でマウントできないの？

[StackOverFlow](http://stackoverflow.com/questions/24966347/is-s3fs-not-able-to-mount-inside-docker-container)でも解決できなかったのでQiitaに望みをかけて…。

dockerコンテナの中でs3fsをマウントしたいと思っています。
s3fsをコンパイルしたdockerイメージを作成して、以下のようにやってみたのですが、

```shell-session
host$ docker run -it --rm docker/s3fs bash
[ root@container:~ ]$ s3fs s3bucket /mnt/s3bucket -o allow_other -o allow_other,default_acl=public-read -ouse_cache=/tmp &
fuse: failed to open /dev/fuse: Operation not permitted
```

"Operation not permitted" というfuseのエラーが出てマウントできませんでした。

ググってみたところ、docker内でfuseを使うには --privileged=true というオプションを付けないといけないという情報があったので、以下のように再挑戦してみましたが、

```shell-session
host$ docker run -it --rm --privileged=true docker/s3fs bash
[ root@container:~ ]$ s3fs s3bucket /mnt/s3bucket -o allow_other -o allow_other,default_acl=public-read -ouse_cache=/tmp &
[ root@container:~ ]$ ls /mnt/s3bucket
ls: cannot access /mnt/s3bucket: Transport endpoint is not connected
[ root@container:~ ]$ fusermount -u /mnt/s3bucket
[ root@container:~ ]$ s3fs s3bucket /mnt/s3bucket -o allow_other -o allow_other,default_acl=public-read -ouse_cache=/tmp &
[ root@container:~ ]$ ls /mnt/s3bucket
ls: cannot access /mnt/s3bucket: Transport endpoint is not connected
```

マウントコマンド直後はエラーが出なくなったものの、lsコマンド等何か操作しようとすると、 "Transport endpoint is not connected" というエラーが出るようになりました。
このエラーは一度アンマウントして再マウントすると出なくなる、という情報もあったのですが、結果は上記の通り再マウントを繰り返してもダメでした。

s3fsをdockerコンテナ内でマウントするにはどうすればよいのでしょうか？
そもそも無理なのでしょうか？

[追記]

Dockerfileつけておいた方がよいかと思ったので追記します。

```text:Dockerfile
FROM dockerfile/ubuntu

RUN apt-get update
RUN apt-get install -y build-essential
RUN apt-get install -y libfuse-dev
RUN apt-get install -y fuse
RUN apt-get install -y libcurl4-openssl-dev
RUN apt-get install -y libxml2-dev
RUN apt-get install -y mime-support

RUN \
  cd /usr/src && \
  wget http://s3fs.googlecode.com/files/s3fs-1.74.tar.gz && \
  tar xvzf s3fs-1.74.tar.gz && \
  cd s3fs-1.74/ && \
  ./configure --prefix=/usr && \
  make && make install

ADD passwd/passwd-s3fs /etc/passwd-s3fs
ADD rules.d/99-fuse.rules /etc/udev/rules.d/99-fuse.rules
RUN chmod 640 /etc/passwd-s3fs

RUN mkdir /mnt/s3bucket
```

passwd-s3fsはもちろんS3接続の設定ファイルです。
rules.d/99-fuse.rulesとかいうのは、この辺のエラーを調べていた際に加えた方がよいとどこかで見たファイルです。
あまり意味は判ってません。

```text:rules.d/99-fuse.rules
KERNEL==fuse, MODE=0777
```
media query のスクリーン幅と jQuery(window).width() の関係

## $(window).width() ではうまくいかない

例えば、

```css
@media screen and (min-width: 1008px) {
```

のような行が CSS ファイルにあってこのスタイルの切り替えと共に JavaScript コードの動作も切り替えたいとします。そこでそのまま以下のようなコードを書いたとします。

```js
if ($(window).width() >= 1008) {
  // 幅 1008 以上の処理
```

しかし、これでは CSS のスタイルの切り替えと JavaScript の動作の切り替えのタイミングが一致しません。何故かというと $(window).width() はスクロールバーの幅を減じた値になっているからです。更にいうとスクロールバーの幅はブラウザによって異なるのでどれぐらいの差がでるかはブラウザによって異なってしまいます。さてどうしたものでしょうか？

## 解決策

解決策として 2つ見つけました。一つ目は以下のように matchMedia を使う方法です。

```js
if (window.matchMedia('(min-width: 1008px)').matches) {
  // 幅 1008 以上の処理
```

ただし、IE9 以下が対応していないそうです。

もう一つの解法は逆転の発想で media query によって切り替わる属性を用いて判別する方法です。

```css:CSSファイル
#secondary { float: none; }

@media screen and (min-width: 1008px) {
  #secondary {
    float: left;
  }
}
```

```js:JavaScriptコード
if ($('#secondary').css('float') == 'left') {
  // float = left、すなわち、幅 1008 以上の処理
```

これらのテクニックを使えばうまく行きそうです。これらは以下の記事を参考としました。

* [Using jQuery with CSS Media Queries](http://www.wiliam.com.au/wiliam-blog/jquery-and-css-media-queries)
* [Checking Media Queries With Javascript](http://www.paulund.co.uk/checking-media-queries-javascript)

最後に宣伝ですが、WordPress プラグインを作ってます。実は今回の記事はこのプラグインの将来の機能改善のために調査したことをまとめたものです。

* [Standard Widget Extensions](http://hetarena.com/standard-widget-extensions)
Geektoolで天気アイコン表示

# Geektoolで天気アイコン表示

* 前提条件
 * ```curl```と```jq```が使えること

* 毎15分でローカルにファイルを落とす様に```cron```設定

```
*/15 * * * * curl -o ~/Downloads/weather.png "http://openweathermap.org/img/w/`curl -s http://api.openweathermap.org/data/2.5/weather?q = Tokyo,jp | jq '.weather[].icon' | sed 's/"//g'`.png"
```

* Geeklets => Image で定期ダウンロードさせた画像を指定
 * file://localhost/Users/sage0196/Downloads/weather.png
SublimeText3+SublimeLinterのrubyバージョンを指定する

# 概要

SublimeTextでSublimeLinterを使ってrubyの構文チェックすると、デフォルトのrubyのバージョンが異なるために、ruby2で新しく導入された文法がエラーになってしまう。

このページの設定に従うことで、SublimeLinterが文法チェックに使うrubyのバージョンを変更できる。

![Screen Shot 2014-07-27 at 2.14.51 PM.png](https://qiita-image-store.s3.amazonaws.com/0/10272/249a0dff-6c2c-5ab3-ebc1-310dd0355e40.png)

# 準備

- SublimeText3
- SublimeLinter
- rbenvなどのrubyバージョン管理ツール

がインストールされていること


# 設定ファイルの変更

(macの場合)

```
Preference > Package Settings > SublimeLinter > Settings - User
```

よりLiblimeLinterの設定ファイルを開く。

```json
{
    "user": {
        "paths": {
            "linux": [],
            "osx": [],
            "windows": []
        },
        ...
    }
}
```

上記のようになっているので、下記のように変更する。

```json
{
    "user": {
        "paths": {
            "linux": [],
            "osx": [
                "~/.rbenv/shims"
            ],
            "windows": []
        },
        ...
    }
}
```

rbenv以外のバージョン管理ツールを使っている場合は、`"~/.rbenv/shims"`の部分をrubyの実行ファイルがあるPathに変更すること。

その後、SublimeTextを再起動すれば、SublimeLinterの実行rubyが変更される。
![Screen Shot 2014-07-27 at 2.21.34 PM.png](https://qiita-image-store.s3.amazonaws.com/0/10272/6d473221-a805-30fc-96da-9313356062f2.png)

# まとめ

SublieLinterのrubyの文法チェックは単純に`ruby -wc`コマンドで実行されているので、rubyへのPATHを通してやれば、その挙動を変更できる。

しかもSublimeText3はほとんどの設定を設定画面(JSON)から変更できるので、簡単。
全てのフォルダの名称の前後に文字列を追加するシェルコマンド

例えば、カレントディレクトリの全てのファイル／フォルダの全てに日付を追加する

```
for FILENAME in *; do mv $FILENAME $FILENAME_20140727; done
```

見ての通り、使える場面はとても限られているので注意
VisualStudio 便利なショートカット

Visual Studio でコーディングする際に覚えておくと楽ちんなショートカット

一覧ではなく積極的に使っていきたいもののみをリストアップしていきたい．
※随時，更新する（といいな）

# ファイルを開く,タブ間の遷移
## ソリューション内のファイルを開く
- <kbd><kbd>Ctrl</kbd> + <kbd>,</kbd></kbd>
- すでにタブで開いているファイルの場合，カーソルが先頭に移動する

## ソリューションエクスプローラを開く
- <kbd><kbd>Ctrl</kbd> + <kbd>Alt</kbd> + <kbd>L</kbd></kbd>
    - VS2015で確認
- <kbd><kbd>Ctrl</kbd> + <kbd>W</kbd> + <kbd>S</kbd></kbd>
    - VS2013で確認

## タブ間の遷移
- <kbd><kbd>Ctrl</kbd> + <kbd>Alt</kbd> + <kbd>PageUp</kbd>/<kbd>PageDown</kbd></kbd>

※同一のコーディング画面におけるタブの遷移．
コーディング画面を2つ並べてる時は，上記のショートカットでは対応不可能．
→例外的な処理として，[Ctrl]+[,]とかでも対応可能．ただしカーソルは先頭に移動する．

## タブを閉じる
- <kbd><kbd>Ctrl</kbd> + <kbd>F4</kbd></kbd>
    - VS2015で確認
- <kbd><kbd>Shift</kbd> + <kbd>ESC</kbd></kbd>
    - VS2013のみ？

# コーディング
## ファイル，クラス，メソッド，プロパティをインクリメンタルサーチ
- `Edit.NavigateTo`
- <kbd><kbd>Ctrl</kbd> + <kbd>,</kbd></kbd>

## コードスニペット
- スニペットの挿入
    - <kbd><kbd>Ctrl</kbd> + <kbd>K</kbd> , <kbd>Ctrl</kbd> + <kbd>X</kbd></kbd>
- ブロックの挿入
    - <kbd><kbd>Ctrl</kbd> + <kbd>K</kbd> , <kbd>Ctrl</kbd> + <kbd>S</kbd></kbd>


## フォントサイズの拡大・縮小
- 拡大
    - <kbd><kbd>Shift</kbd> + <kbd>Ctrl</kbd> + <kbd>></kbd></kbd>

- 縮小
    - <kbd><kbd>Shift</kbd> + <kbd>Ctrl</kbd> + <kbd><</kbd></kbd>

## アウトライン切り替え
- 現在のブロックのアウトライン切り替え
    - `Edit.ToggleOutliningExpansion`
    - <kbd><kbd>Ctrl</kbd> + <kbd>M</kbd> , <kbd>Ctrl</kbd> + <kbd>M</kbd></kbd>

- ファイル全体のアウトラインの切り替え
    - <kbd><kbd>Ctrl</kbd> + <kbd>M</kbd> , <kbd>Ctrl</kbd> + <kbd>L</kbd></kbd>
        - VS2015で確認
 
## 行切り取り
- <kbd><kbd>Ctrl</kbd> + <kbd>L</kbd></kbd>
- <kbd><kbd>Ctrl</kbd> + <kbd>X</kbd></kbd>
    - テキスト未選択の状態のときのみ


## パラメータのヒントを表示する
- <kbd><kbd>Ctrl</kbd> + <kbd>Shift</kbd> + <kbd>Space</kbd></kbd>

## クイック操作
- <kbd><kbd>Ctrl</kbd> + <kbd>.</kbd></kbd>
- VS2015のみ

## コンテキストメニューの表示
- <kbd><kbd>Shift</kbd> + <kbd>F10</kbd></kbd>
    - 右クリックしたときの動作
    - キーボードに依存するが，[アプリケーションキー](http://ja.wikipedia.org/wiki/%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%AD%E3%83%BC "アプリケーションキー")でも可．

## コードリーディング
- 定義へ飛ぶ
    - <kbd><kbd>F12</kbd></kbd>
        - 戻るときは<kbd><kbd>Ctrl</kbd> + <kbd>-</kbd></kbd>
- 定義をここに表示
    - <kbd><kbd>Alt</kbd> + <kbd>F12</kbd></kbd>
        - 戻るときは <kbd><kbd>ESC</kbd></kbd>
- 実装に移動
    - <kbd><kbd>Ctrl</kbd> + <kbd>F12</kbd></kbd>
- 参照をリストアップ
    - <kbd><kbd>Shift</kbd> + <kbd>F12</kbd></kbd>

## エラー箇所へ飛ぶ
- <kbd><kbd>Ctrl</kbd> + <kbd>Shift</kbd> + <kbd>F12</kbd></kbd>

## カーソル位置を戻す
- <kbd><kbd>Ctrl</kbd> + <kbd>-</kbd></kbd>
    - 参照に飛んだ後に戻ってくるときに便利．

# デバッグ，ビルド
## デバッグ
- 開始　<kbd><kbd>F5</kbd></kbd>
- 停止　<kbd><kbd>Shift</kbd> + <kbd>F5</kbd></kbd>
- デバッグなし実行 <kbd><kbd>Ctrl</kbd> + <kbd>F5</kbd></kbd>

## ブレークポイント
- 設定/解除 <kbd><kbd>F9</kbd></kbd>
- 有効化/無効化 <kbd><kbd>Ctrl</kbd> + <kbd>F9</kbd></kbd>
tmuxのステータスラインとかのカスタマイズ

## はじめに
今回はずっとやりたかったtmuxのステータスラインを改造したのでそれについてのメモ．

## 手順
1. tmuxをインストールする（とかはいりませんよね）
   * mac -> brew install tmux
   * ubuntu -> apt-get install tmux
   * etc...
1. tmuxの設定ファイルといえば，~/.tmux.conf
1. これに以下のように記述します．

```vim:~/.tmux.conf
set-option -g status on
set-option -g status-interval 1
set-option -g status-utf8 on
set-option -g status-justify "centre"
set-option -g status-left "[S->#S] #H"
set-option -g status-left-length 50
set-option -g status-right "%y/%m/%d(%a) %T"
set-option -g status-right-length 50

set-window-option -g window-status-format "[#I:#{pane_current_path}]"
set-window-option -g window-status-current-format "[#I:#{pane_current_path}]"

set-option -g status-bg colour166
setw -g window-status-current-fg black
setw -g window-status-current-bg white
```

## 解説
何をどう設定しているのかを解説します．

ここではステータスラインの更新間隔時間を設定しています．status-intervalってそのままですね．今回私は1秒間隔で更新するようにしました．後述しますが，ステータスラインに時間（秒も）を表示したかったからです．

```
set-option -g status-interval 1
```
これは初期状態からあるステータスラインに表示されているもの（1:zsh 2:vim）とかのやつを中央に寄せちゃう設定です．

```
set-option -g status-justify "centre"
```

これは右と左のステータスラインに表示する項目とステータスラインの限界値（幅）です．tmuxにはzshのプロンプトのように右と左にわけて情報を表示させられるんですね．

```
set-option -g status-left "[S->#S] #H"
set-option -g status-left-length 50
set-option -g status-right "%y/%m/%d(%a) %T"
set-option -g status-right-length 50
```

これは選択中のウィンドウと選択中以外のウィンドウをステータスラインにどのように表示するかというものです．

```
set-window-option -g window-status-format "[#I:#{pane_current_path}]"
set-window-option -g window-status-current-format "[#I:#{pane_current_path}]"
```

この#{pane_current_path}というものがカレントディレクトリのパスをもっているみたいです．
あとたびたび登場していた#Iとか#Wとかステータスラインの色とかが意味するものは以下のサイトで詳しく紹介されていました．
[tmuxのすすめ](http://blog.catatsuy.org/a/243)
[tmuxチュートリアル](http://w.koshigoe.jp/study/?%5Bsystem%5D+tmux%A5%C1%A5%E5%A1%BC%A5%C8%A5%EA%A5%A2%A5%EB)

## 感想
　やってみて分かったのですが，フルパスだとウィンドウ2個くらい作ると長くて切れてしまうので，どうにか出来かな〜と思った．あと，パス表示されていると結講邪魔！だから結局ウィンドウタイトルを表示することにした（笑）
　*prefix + w*（デフォルトだと）でウィンドウリストを表示出来ると思うが，そこではフル画面でリストが出るので，パスを表示出来るようにしたいなと思った．設定方法分かる方教えて下さい．

ではまた：）


## 追記
list-windowの設定が出来た！

```
bind-key w list-window -F "表示項目の設定"
```

このように記述すれば出来た！どうやら，-Fオプションはそのキーバインドの機能のフォーマットを指定することが出来るものらしい！

なるほど　ʅ（´◔౪◔）ʃ
ChromeOSをVirtualBoxにインストールしてみる

#なぜインストールするのか？
サイトの見た目大丈夫だよなー？という微かな不安から。
基本的にはChromeの挙動そのままなので、大きな問題は起きないはずですが、

> 万一問題が起きてたら・・・

と、一抹の不安を感じる方は、インストールして確認しておきましょう(笑)。
VirtualBoxを使えば、すぐに確認できます。

#下記２つのページを参照しました

##①インストールの説明を書いたページ(英語)
http://www.fixedbyvonnie.com/2014/01/how-to-try-out-chrome-os-with-virtualbox-before-you-buy-a-chromebook/#.U9SA-oB_tmQ

##②VirtualBoxのHDDイメージを配布しているサイト(英語)
http://chromeos.hexxeh.net/

## ダウンロードサイト
![スクリーンショット 2014-07-27 13.34.38.jpg](https://qiita-image-store.s3.amazonaws.com/0/50037/7896eb0f-ba28-0fba-a323-a274ce6bdd28.jpeg)

## ダウンロードしたvdiファイル
![スクリーンショット 2014-07-27 13.17.26.jpg](https://qiita-image-store.s3.amazonaws.com/0/50037/1754e1c3-793b-edfd-d159-0e37512d869d.jpeg)


#インストール手順
1. VirtualBoxをインストールする
2. HDDイメージをダウンロードしてくる
3. VirtualBoxの仮想マシンを作成する
4. ネットワーク設定を変更する点に注意
5. 起動〜初期設定

で大体OKです。

これでもかというくらいシンプルなOSなので、使い方で迷う事はあまりないと思います。

* Chromeブラウザを起動→ページを確認

するだけです。

#注意点
ChromiumOSはインターネット接続が必須なのですが、
ネットワークデバイスを認識させるには、ネットワーク設定を変更する必要があります。

仮想マシンの起動前に設定画面を開き、
ネットワークデバイスの設定の「高度」設定から
『 Intel PRO/1000 MT Desktop (82540EM) 』を選んでおく必要があります。

## 起動しました
![スクリーンショット 2014-07-27 13.42.51.jpg](https://qiita-image-store.s3.amazonaws.com/0/50037/967c8379-0bc3-f5a1-f082-3dea37ffa268.jpeg)

#問題の発生
『お使いのChromeのバージョンは、ウェブストアでサポートされていません』というメッセージが出て、
Chrome Extensionがインストールできませんでした・・

とりあえず残念ですが、標準で確認できる範囲だけ
という用途にしか使えなさそうです。
apex:inputでplaceholderやautofocusを利用する方法

Visualforce Developers Guideのapex:inputの項目にplaceholderやautofocusなどのHTML5で用意されている属性についての記載は載っていませんが、html-placeholderやhtml-autofocusのように"html-"をつけてあげることで使用することができます。

```
<apex:input type="text" value="{!userName}"styleClass="form-control" html-placeholder="Email" required="true" html-autofocus="false" />
```
DockerでHiveMQを動かしたメモ


## これは何？

MQTTブローカー[HiveMQ](http://www.hivemq.com/)をdockerイメージで動かした時のメモです。
HiveMQは商用製品でクローズドソースですが、25クライアントまでは無料で試せます。

## dockerイメージのbuild手順

### 適当に作業ディレクトリを作る

```
$ mkdir -p docker/hivemq
$ cd docker/hivemq
```

### HiveMQを公式サイトからダウンロードする

[HiveMQ公式サイト](http://www.hivemq.com/)から最新のHiveMQを落とします。
僕が落としたのは<code>hivemq-2.0.0.zip</code>でした。
ダウンロードしたら先ほど作った<code>docker/hivemq</code>ディレクトリに保存しておきます。

### Dockerfileを作る

```docker:Dockerfile
FROM ubuntu
MAINTAINER Shin Hiroe <hogehoge@mail.com>

RUN echo "upgrade apt sources"
RUN apt-get update
RUN apt-get upgrade -y

RUN echo "install wget"
RUN apt-get install wget -y

RUN echo "install unzip"
RUN apt-get install unzip -y

RUN echo "install OpenJDK"
RUN apt-get install openjdk-7-jre -y

RUN echo "install HiveMQ"
COPY ./hivemq-2.0.0.zip /usr/local/
WORKDIR /usr/local
RUN unzip hivemq-2.0.0.zip
WORKDIR /usr/local/hivemq-2.0.0
RUN chmod 755 bin/run.sh
EXPOSE 1883
```

### Dockerfileをもとにイメージを作る

* -tオプションで<code>ubuntu:hivemq</code>という名前をつけます

```
$ docker build -t ubuntu:hivemq .
```

## ネットワーク設定

[はじめてのDocker on Mac OS X](http://dev.classmethod.jp/tool/docker/getting-started-docker-on-osx/)を参考にさせて頂きつつ、VirtualBoxでポートフォワーディングの設定をする。
今回はMQTTの標準ポート1883番を、単純にdockerコンテナの1883番にフォワードします。

## コンテナの起動

<code>-p 1883:1883</code>で先ほどVirtualBoxに設定したポートフォワードを指定して起動。

```
$ docker run -t -p 1883:1883 -i ubuntu:hivemq "/usr/local/hivemq-2.0.0/bin/run.sh"
```

起動メッセージ。

```
-------------------------------------------------------------------------

                  _    _  _              __  __   ____
                 | |  | |(_)            |  \/  | / __ \ 
                 | |__| | _ __   __ ___ | \  / || |  | |
                 |  __  || |\ \ / // _ \| |\/| || |  | |
                 | |  | || | \ V /|  __/| |  | || |__| |
                 |_|  |_||_|  \_/  \___||_|  |_| \___\_\

-------------------------------------------------------------------------

  HiveMQ Start Script for Linux/Unix v1.2

-------------------------------------------------------------------------

  HIVEMQ_HOME: /usr/local/hivemq-2.0.0

  JAVA_OPTS:  -Djava.net.preferIPv4Stack=true

-------------------------------------------------------------------------

2014-06-14 10:48:38,358 INFO  - HiveMQ home directory: /usr/local/hivemq-2.0.0
2014-06-14 10:48:38,386 INFO  - Starting HiveMQ Server
2014-06-14 10:48:40,302 INFO  - Created user preferences directory.
2014-06-14 10:48:42,307 WARN  - No license file found. Using free personal licensing with restrictions to 25 connections.
2014-06-14 10:48:42,553 INFO  - Activating statistics callbacks with an interval of 60 seconds
2014-06-14 10:48:42,555 INFO  - Activating $SYS topics with an interval of 60 seconds
2014-06-14 10:48:42,999 INFO  - Starting on all interfaces and port 1883
2014-06-14 10:48:43,028 INFO  - Started HiveMQ 2.0.0 in 4672ms
```

起動したようです。
.NET環境でApacheの.htaccessと同じ処理をする方法


最近Microsoftさんとおつきあいさせていただく事があり、サーバ環境等を提供してくださる機会があるので、自分なりにいろいろと試して多くの方に使っていただけるように。


* Azureで環境を構築している人向け
* AzureにWordpressが設置されている事を前提
* 例としてWordpressの.htaccessと同じ事を実践
* 特定のIPアドレスしかwp-adminにアクセスできないようにする

#.NETについて
##.NET Frameworkとは
* 正式名称はMicrosoft .NET Framework（マイクロソフト ドットネット フレームワーク）
* Microsoft .NET対応アプリケーションの動作環境。
* Java仮想マシンに近い性格を持つらしい。

[Wikipediaを参照]
[Wikipediaを参照]:http://ja.wikipedia.org/wiki/.NET_Framework

##Windows Azureは .NET Frameworkで構成
* https://manage.windowsazure.com/ からログイン
* Azure Webサイトの構成をクリック

![Screen Shot 2014-07-27 at 12.22.58 PM.png](https://qiita-image-store.s3.amazonaws.com/0/6702/a8ff4269-4a8c-2e9b-b56c-101e87b860f6.png "Screen Shot 2014-07-27 at 12.22.58 PM.png")

このように.NETで構成されているのが確認できる。

#Apacheの.htaccessと同じ処理をする

##Apacheの場合
Apacheの場合は、特定のIPからしかアクセスさせたくないディレクトリに.htaccessを設置します。内容は以下のような感じ。

```.htaccess
<Files "wp-login.php">
order deny,allow
deny from all
allow from xxx.xxx.xxx.xxx
</Files>

```

##.NETの場合
.NETの場合は、「web.config」と呼ばれるファイルを対象のディレクトリ内におきます。
XMLで記述します。
XXXの部分が許可するIPアドレスです。

```web.confing
<?xml version="1.0" encoding="UTF-8"?>
  <configuration>
    <system.webServer>
      <security>
          <ipSecurity allowUnlisted="false" denyAction="NotFound">
            <add allowed="true" ipAddress="xxx.xxx.xxx.xxx" />
          </ipSecurity>
      </security>
    </system.webServer>
  </configuration>

```
例えばこれを、
site/wwwroot/wpadmin
に設置すれば、管理画面のログインを特定のIPからのみアクセスするように設定する事が出来ます。

もし、AzureのGUI上でWordpressを設置している場合、
wwwroot/
ディレクトリ内に規定のweb.configがデフォルトで設置されているので、確認してみてください。