OmniAICreator/Qiita-1.07M huggingface dataset:
Sublime Textの"auto_id_class"をオンにする



## "auto_id_class"とは
Sublime TextというかEmmetの機能です。なのでEmmetパッケージは必須です。
Sublime Textで使いたい時は、ユーザー設定ファイル`Preference>Settings - User`に以下を追記。



```Preferences.sublime-settings
"auto_id_class" : true,
```


すると、htmlのタグ内で「.」を入力すると「class=""」、「#」で「id=""」が展開されます。

![68747470733a2f2f6769746875622e636f6d2f627261646c6579666c6f6f642f6175746f2d69642d636c6173732f626c6f622f6d61737465722f73637265656e2d7265636f7264696e672d64656d6f2e6769663f7261773d74727565.gif](https://qiita-image-store.s3.amazonaws.com/0/16548/f65b9e19-0146-eb69-d56e-33776b11dae6.gif "68747470733a2f2f6769746875622e636f6d2f627261646c6579666c6f6f642f6175746f2d69642d636c6173732f626c6f622f6d61737465722f73637265656e2d7265636f7264696e672d64656d6f2e6769663f7261773d74727565.gif")



### つまり
あとからクラス、idを付けたい時に...
＿人人人人人人人＿
＞　ちょっと楽　＜
￣Y^Y^Y^Y^Y^Y￣
  
  
    
    
---


### Atomはパッケージで

Atomはauto-id-classというパッケージがあるよ。
`Settings>Install`から検索か、以下コマンドで

```command
apm install auto-id-class
```
[Linux][RedHat] 初めてRPMコマンドを使う時に覚えておくべきオプション

# RPMコマンドの使い方

## インストール

"-i"オプションで、rpmファイルを指定する

<pre>
# rpm -i %rpmファイル名%
</pre>

## アップデート

<pre>
# rpm -U %rpmファイル名%
</pre>

## アンインストール

<pre>
# rpm -e %パッケージ名%
</pre>

補足

* 「複数のパッケージを指定しています」というエラーになったときは、"--allmatches" を付ければ良い。マッチしたパッケージが全て削除される
* 野良rpmや、自作rpmなどのパッケージのミスでスクリプト実行中にエラー"scriptlet failed, exit status 1"が発生した時は、"--noscripts" を付ければ良い

## インストールされたパッケージの一覧

<pre>
# rpm -qa
</pre>
※ インストール有無の確認はgrepでパッケージ名を絞って表示させればよい

## インストールされたパッケージの情報を見る

"-qa"オプションでインストールされたパッケージの名前が表示されるが、どのようなものなのか、確認したい時には"-qi"を使う

<pre>
# rpm -qi %パッケージ名%
</pre>

## システムに存在するファイルやコマンドがどのパッケージによってインストールされたか確認する

<pre>
# rpm -qif %ファイル名%
</pre>

## インストールしたRPMがどのファイルをインストールしたか確認する

<pre>
# rpm -ql %パッケージ名%
</pre>

## RPMパッケージに含まれるファイルを確認

<pre>
# rpm -qlp %rpmファイル名%
</pre>

## RPMパッケージの中から特定のファイルを取り出す

rpm2cpioコマンドでcpioアーカイブに変換し、cpioコマンドの-iオプションで取り出す

<pre>
# rpm2cpio %rpmファイル名% | cpio -id %ファイル名%
</pre>

実行例
<pre>
# rpm2cpio squid-2.4.STABLE6-5.i586.rpm | cpio -id "/etc/squid/squid.conf"
</pre>
Retrofit 2.0にアップデートする際に気をつけること

# 前置き

Retrofit 1.9.0 -> Retrofit 2.0.0-beta2にupdateした際にいろいろ変更してたのでそのメモ。

# 大きな変更点

## RestAdapter.Builder -> Retrofit.Builder

Before

```java
RestAdapter restAdapter = new RestAdapter.Build()
    .setEndpoint("http://ifconfig.me")
    .setConverter(MoshiConverterFactory.create())
    .build()
```

After

```java
Retrofit retrofit = new Retrofit.Buidler()
    .baseUrl("http://ifconfig.me")
    .addConverterFactory(MoshiConverterFactory.create())
    .build();
```

地味に名前も使い方もかわっています。

## Converter / Adapterの分離

レスポンスをどう変換するか？(xmlに jsonになど) はConverterになり、
レスポンスをどうやってつなぐか？(Observableで受けるなど) は Adapterになったようです。

- https://github.com/square/retrofit/tree/master/retrofit-adapters

## interfaceの返り値が`Call<T>` になった。

```java
Retrofit retrofit = new Retrofit.Builder()
        .baseUrl("http://ifconfig.me")
        .addConverterFactory(MoshiConverterFactory.create())
        .build();

IfconfigApi api = retrofit.create(IfconfigApi.class);
Call<AllEntity> call = api.all();
Response<AllEntity> response = call.execute();
AllEntity entity = response.body();
```

callには下記のメソッドが生えてます

- 同期的にリクエストする `execute()`
- 非同期的にリクエストする `enqueue(Callback<T> callback)`
- リクエストをキャンセルする `cancel()`

## okhttpをmustで利用するようになった。

okhttpのResponse objectを利用しているので内容がかなり詳細に取れるようになりました。

- https://github.com/square/okhttp/blob/master/okhttp/src/main/java/com/squareup/okhttp/Response.java

responseヘッダが前は上手く取れなかったりしたので地味に嬉しい変更かも。
いままでokhttpの利用をしていなかった場合、method数が2Kほど増えるので注意

## Loggingはokhttpへ

`Retrofit.Builder().setLogLevel()`というメソッドはなくなりました。
代わりに `Retrofit.Builder().client(okhttpclient)` で OkHttpClientを渡して、okhttpのinterceptorでロギングをするのが良いようです。

- https://github.com/square/retrofit/issues/378
- https://github.com/square/okhttp/wiki/Interceptors

## カスタムヘッダはokhttpへ

以前は `Retrofit.Builder().setRequestIntercepter()` でカスタムヘッダをつけていたのですが、これもokhttpのinterceptorに任せるようになりました。

- http://stackoverflow.com/questions/32605711/adding-header-to-all-request-with-retrofit-2

## RxJavaのハンドリングはAdapterへ

rxjavaを利用する場合には、アダプターを追加する必要があります。

```
compile 'com.squareup.retrofit:adapter-rxjava:2.0.0-beta2'
```

現状だとenqueueせずにexecuteする方式でObservableを作成しているので、Androidから移行利用する際には`android.os.NetworkOnMainThreadException` が出ないように利用に注意が必要です。

# 小さな変更点

## retrofit.RetrofitError -> retrofit.HttpException

ステータスコード200以外でエラーが出た時に以前はRetrofitErrorでしたが、HttpExceptionに変更になりました。

# サンプル

- https://github.com/mattak/RetrofitSample
iPhoneの音量（着信音・アラーム音など）調整方法

iPhoneは音量設定が4種類に分かれています。 

- 着信音・通知音・アラーム音の音量
- アプリ内・音楽再生時の音量
- イヤホン・ヘッドホン使用時の音量
- 受話音量

参考資料：
http://onwan.me/iphone-volumeofsound-adjust-5630.html
http://www.appps.jp/2142435/
http://rakuishi.com/archives/3383/
Java2Dでの画面描画

Java3Dをやる前におさらいとしてJava2Dでの画面描画をやってみました。

描画内容
y = x の直線
r = 100 の円
上記円の楕円version の３つです。

![スクリーンショット 2015-11-26 14.02.21.png](https://qiita-image-store.s3.amazonaws.com/0/85547/6d5049d6-c205-ec60-2ada-7e64d26e8488.png "スクリーンショット 2015-11-26 14.02.21.png")

コード内容

```Test.java

import javax.swing.*;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Insets;
import java.awt.geom.Line2D;
import java.awt.Color;

class Test1 extends JPanel{

  public static void main(String[] args){
		    JFrame frame = new JFrame();

		    Test1 app = new Test1();
		    frame.getContentPane().add(app);
		    
		    frame.setBackground(Color.BLACK);	// windowの背景色設定
		    frame.setResizable(false);
		    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		    frame.setBounds(0, 0, 400, 400);
		    frame.setTitle("タイトル");
		    frame.setVisible(true);
		    Insets insets = frame.getInsets();	// 設定すべき値を求めるためのインスタンス化
			frame.setSize(400 + insets.left + insets.right,
						  400 + insets.top + insets.bottom); // 画面サイズ設定
		  }

		  public void paintComponent(Graphics g){
		    Graphics2D g2 = (Graphics2D)g;
		    g2.setColor(Color.white);
		    
		    g2.draw(new Line2D.Double(200,   0, 200, 400));
		    g2.draw(new Line2D.Double(  0, 200, 400, 200));
	
		    drawPoint(g2);
		    drawCircle(g2);
		    drawEllipse(g2);
		  }
		  
		  public void drawPoint(Graphics2D g2){
			  int x = 0, y = 400; 
			  for(int i = 0; i < 400; i++){
				  g2.fillRect(x, y, 1, 1);
				  x += 1;
				  y -= 1;
			  }
		  }
		  
		  public void drawCircle(Graphics2D g2){
			  double x, y, cx = 200, cy = 200, r = 100;
			  for(int i = 0; i < 720; i++){
				  x = r * Math.sin(i) + cx;
				  y = r * Math.cos(i) + cy;
				  g2.draw(new Line2D.Double(x, y, x + 0.1, y + 0.1));
			  }
		  }
		  
		  public void drawEllipse(Graphics2D g2){
			  double x, y, cx = 200, cy = 200, r = 100;
			  for(int i = 0; i < 720; i++){
				  x = r * Math.sin(i) + cx;
				  y = (r * Math.cos(i)) / 2 + cy;
				  g2.draw(new Line2D.Double(x, y, x, y));
			  }
		  }
}

```

開発環境
`Mac version 10.10.5`

実行方法
Eclipseでインポートさせて実行してください。
コンソールで実行する場合は、

```
javac Test1.java
java Test1
```
です。

3Dに入る前に数学も勉強し直そう...
Rails: Namespaceの時のform_forの書き方

If you have created namespaced routes, form_for has a nifty shorthand for that too. If your application has an admin namespace then

form_for [:admin, @article]
will create a form that submits to the ArticlesController inside the admin namespace (submitting to admin_article_path(@article) in the case of an update). If you have several levels of namespacing then the syntax is similar:

form_for [:admin, :management, @article]
DropBox APIで取得したファイル更新日時はUTC？

DropBoxApiで取得した更新日時がなんかずれてるなぁって思って調べてみたら
きっかり9時間ずれてた。どうもUTCっぽい。
仕方ないので取得した更新日時を変換する。

```lang:C#
TimeZoneInfo jstZoneInfo = 
　　System.TimeZoneInfo.FindSystemTimeZoneById("Tokyo Standard Time");
var jst = System.TimeZoneInfo.ConvertTimeFromUtc(dropBoxModified, jstZoneInfo);
```
Change ITerm's background image with John's Background Switcher when fullscreen.

ITerm を最大化すると透明度がゼロになっちゃうんですよね。
せっかく [John’s Background Switcher | John's Adventures](http://johnsad.ventures/software/backgroundswitcher/) を使って背景を変えてるのに、ちょっと寂しい……。

とゆーワケで、空の enter を押すたびに iterm の背景を変えるスクリプトを書きました。

```zsh:iterm.zsh
# -*- sh -*-
image_index=1
WALLPAPERS_PATH=`find ~/Library/Containers -name Wallpapers`

change_background_picture() {
  if [ `tput cols` -eq 80 ]
  then
    osascript -e "tell application \"iTerm\"
                    set current_terminal to (current terminal)
                    tell current_terminal
                      set current_session to (current session)
                      tell current_session
                        delete background image path
                      end tell
                    end tell
                  end tell"

    zle accept-line
    return
  fi

  image_list=($WALLPAPERS_PATH/*)
  if [ -z "$BUFFER" ]
  then
    image_path=$image_list[$(( $RANDOM % $#image_list + 1 ))]
    osascript -e "tell application \"iTerm\"
                    set current_terminal to (current terminal)
                    tell current_terminal
                      set current_session to (current session)
                      tell current_session
                        set background image path to \"$image_path\"
                      end tell
                    end tell
                  end tell"
    zle reset-prompt
    zle accept-line
  else
    zle accept-line
  fi
}

zle -N change_background_picture
bindkey '^m' change_background_picture
```

`.zshrc` に以下のように追加してください。

```zsh
source $ZDOTDIR/iterm.zsh
```


最大化されてるか否かは、カラム数が 80 であるか否かで判断してます。
最大化をやめて、カラム数が 80 になった状態で空の enter を押すと、背景は削除されます。
CUDAのインストールパスまとめ


# ポイント

- CUDA
  - Linuxは`/usr/local/cuda`にあるものと思えば良い。`lib64`なのに注意。`libcuda.so`は`/usr/lib64`に入るが、これは最初から探してくれる
  - Macも`/usr/local/cuda`にシンボリックリンクが貼られるのと、`libcuda.dylib`はここに入る。`lib`なのに注意
- cuDNN
  - v2はフラットになる。
  - v3はCUDAのディレクトリ構成を意識した作りになっている

# CUDA 7.5
## Ubuntu 14.04

[Linux] -> [x86_64] -> [Ubuntu] -> [14.04] -> [deb(loca)]

`cuda-repo-ubuntu1404-7-5-local_7.5-18_amd64.deb`

```
+ usr
  + lib64
  | + libcuda.so
  + local
    + cuda --> cuda-7.5
    + cuda-7.5
      + bin
      | + nvcc
      + include --> targets/x86_64-linux/include
      + lib64 --> targets/x86_64-linux/lib
      + targets
        + x86_64-linux
          + include
          | + cublas.h
          + lib
            + libcublas.so
```

## Mac 10.10 (Yosemite)

[Mac OSX] -> [x86_64] -> [10.10] -> [dmg(local)]

`cuda_7.5.20_mac.dmg`

```
+ usr
| + local
|   + cuda
|     + bin --> /Developer/NVIDIA/CUDA-7.5/bin
|     + include --> /Developer/NVIDIA/CUDA-7.5/include
|     + lib
|       + libcuda.dylib
|       + libcublas.dylib --> /Developer/NVIDIA/CUDA-7.5/lib/libcublas.dylib
+ Developer
  + NVIDIA
    + CUDA-7.5
      + bin
      | + nvcc
      + include
      | + cublas.h
      + lib
        + libcublas.dylib
```

# CUDA 7.0

https://developer.nvidia.com/cuda-toolkit-70


## Mac

http://developer.download.nvidia.com/compute/cuda/7_0/Prod/doc/CUDA_Getting_Started_Mac.pdf

# cuDNN v3

https://developer.nvidia.com/cudnn

## Linux

`cudnn-7.0-linux-x64-v3.0-prod.tgz`

```
+ cuda
  + include
  | + cudnn.h
  + lib64
    + libcudnn.so
    + libcudnn_static.a
```

## Mac

`cudnn-7.0-osx-x64-v3.0-prod.tgz`

```
+ cuda
  + include
  | + cudnn.h
  + lib
    + libcudnn.dylib
    + libcudnn_static.a
```

## Windows

`cudnn-7.0-win-x64-v3.0-prod.zip`

```
cuda
+ include
| + cudnn.h
+ lib
| + x64
|   + cudnn.lib
+ bin
  + cudnn64_70.dll
```

# cuDNN v2

## Linux

`cudnn-6.5-linux-x64-v2.tgz`

```
+ cudnn-6.5-linux-x64-v2
  + libcudnn.so
  + cudnn.h
  + libcudnn_static.a
```

## MAC

`cudnn-6.5-osx-v2.tgz`

```
+ cudnn-6.5-osx-v2
  + libcudnn.dylib
  + cudnn.h
  + libcudnn_static.a
```

## Windows

`cudnn-6.5-win-v2.zip`

```
+ cudnn-6.5-win-v2
  + cudnn.h
  + cudnn.lib
  + cudnn64_65.dll
  + cudnn64_65.lib
```
Windows7（以降？）のタスクスケジューラ使用時注意点


現場にて簡易的な定時バッチを仕込むことになったが、少し引っかかる部分があったので覚書として記述する。

やりたい処理自体はエクセルで処理しているので、
WSH（VBScript）からエクセルを開いてマクロを実行するようにした。

定時の起動はタスクスケジューラを使用する事にした。
タスクスケジューラはホボGUIで設定できて簡単なので昔から良く使ってる。

仕込んだが、起動しない。

Windows7から色々と造りが変わっていた。

WEBで調べて設定、起動＆処理に成功した。

以下、設定で注意すべき点を挙げる。
・タスクスケジューラの起動は「管理者として実行」してはいけない。
　ユーザにadmin権限があっても「管理者」で実行してはNG、履歴が見れなくなる。
　Win7ではUACが色々と厳しく変わっているらしい。

・セキュリティオプション、
　「ユーザがログインしている時のみ実行」を選択
　　⇒エクセルなどが画面表示するためと思われる。
　「最上位の特権で実行する」にチェック
　　⇒コレを入れておかないとWSHが動かないらしい。
　構成：「Windows　Vista,・・・」を選択する。
　　⇒Win7を選択すると起動制限が厳しくなるらしい。
　　　→後述する作業フォルダの設定で動くらしい

・操作、
　起動するWSHを設定するが、重要なのは「開始（オプション）」で
　ここに、起動するWSHのフォルダパスを記入しておく必要がある。

以上が、WinXP以前から使っていた人向けの注意点である。
swiftgenを使ってsegueIdentierとか管理する


iosアプリ開発時の問題点としてsegue Idntiferとか文字列なのでtypoをコンパイル時検出できなかったりします。
androidだとR.javaというのがあるらしいですね。
http://qiita.com/ksoichiro/items/4befb2695b1efdff72dd


手動でenumを作ってもいいんですが
swiftgenを使うとstoryboardからidentiferを取り出してenumで管理してくれるようになるようです。


#インストール

homebrewを使っている前提です。

```
brew install swiftgen
```

#xcodeでbuild時に自動生成させる

![swiftgen.png](https://qiita-image-store.s3.amazonaws.com/0/3844/da8e28bd-372b-544c-2caf-c2c6bcbdbb33.png "swiftgen.png")

プロジェクトトップ > Targets(main) > Build Phases
`+`ボタンを選んで`` new runs script phase``

以下のコードを追加

```
swiftgen storyboards ${SRCROOT}/${PRODUCT_NAME}/Base.lproj/Main.storyboard > ${SRCROOT}/${PRODUCT_NAME}/storyboardAutoGen.swift
```

storyboardの置き場所が
``<<プロジェクト名>>/Base.lproj/Main.storyboard``であることが前提です。


以降ビルド時にコード生成が進みます。
生成されるコードはこんな感じ

```
// Generated using SwiftGen, by O.Halligon — https://github.com/AliSoftware/SwiftGen

import Foundation
import UIKit

protocol StoryboardScene {
  static var storyboardName : String { get }
}

extension StoryboardScene {
  static func storyboard() -> UIStoryboard {
    return UIStoryboard(name: self.storyboardName, bundle: nil)
  }

  static func initialViewController() -> UIViewController {
    return storyboard().instantiateInitialViewController()!
  }
}

extension StoryboardScene where Self: RawRepresentable, Self.RawValue == String {
  func viewController() -> UIViewController {
    return Self.storyboard().instantiateViewControllerWithIdentifier(self.rawValue)
  }
  static func viewController(identifier: Self) -> UIViewController {
    return identifier.viewController()
  }
}

protocol StoryboardSegue : RawRepresentable { }

extension UIViewController {
  func performSegue<S : StoryboardSegue where S.RawValue == String>(segue: S, sender: AnyObject? = nil) {
    performSegueWithIdentifier(segue.rawValue, sender: sender)
  }
}

extension UIStoryboard {
  struct Scene {
    enum Main : StoryboardScene {
      static let storyboardName = "Main"
    }
  }

  struct Segue {
    enum Main : String, StoryboardSegue {
      case ToCameraViewController = "toCameraViewController"
      case ToPhotoConfirmViewController = "toPhotoConfirmViewController"
    }
  }
}


```

# 使い方

befoe:

```before
performSegueWithIdentifier("toCameraViewController", sender: nil)
    
```

after:

```after
performSegue(UIStoryboard.Segue.Main.ToCameraViewController , sender: nil)
```


参考:

https://github.com/AliSoftware/SwiftGen?utm_source=ios%20dev%20tools&utm_medium=website&utm_campaign=ios%20dev%20tools&at=11lvzs&ct=ios%20dev%20tools
2015-11-26 python > モジュールの関数一覧を表示する > import math > dir(math)

Python Programming Tutorial - 40 - Getting Module Info
https://www.youtube.com/watch?v=a9sTtnCwuPk&list=WL&index=38
1:24頃


```
>>> import math
>>> dir(math)
['__doc__', '__name__', '__package__', 'acos', 'acosh', ...]
```

import後にdir()で関数を見ることができる。
"docker-machine ls"コマンドエラー - error getting URL for host 


#| エラー内容

```bash:エラー内容
error getting URL for host default: /usr/local/bin/VBoxManage showvminfo default --machinereadable failed:
VBoxManage: error: The object is not ready
VBoxManage: error: Details: code E_ACCESSDENIED (0x80070005), component SessionMachine, interface IMachine, callee nsISupports
VBoxManage: error: Context: "COMGETTER(VideoCaptureFPS)(&Fps)" at line 2479 of file VBoxManageInfo.cpp
```


## 背景

以前、[こちら](http://qiita.com/kooohei/items/d370701d6c39727334f3)の記事について対処した後に"docker-machine ls"を実行したところ、対処前には現れていなかったエラー内容が表示されていることに気づきました。

```bash:エラー発生時
$ docker-machine ls
error getting URL for host default: /usr/local/bin/VBoxManage showvminfo default --machinereadable failed:
VBoxManage: error: The object is not ready
VBoxManage: error: Details: code E_ACCESSDENIED (0x80070005), component SessionMachine, interface IMachine, callee nsISupports
VBoxManage: error: Context: "COMGETTER(VideoCaptureEnabled)(&bActive)" at line 2469 of file VBoxManageInfo.cpp

NAME           ACTIVE   DRIVER       STATE     URL                         SWARM
default        -        virtualbox   Stopped                               
kooohei-test   *        virtualbox   Running   tcp://192.168.99.100:2376   
```


## 原因

最初の行を見ると、どうやら「defaultホストのURL取得に失敗しました」という内容のようです。
現在は停止中のdefaultホストですが、起動していた際のURLは"tcp://192.168.99.100:2376"でした。
しかし、以前の対応で"kooohei-test"を新たに起動した際にそのURLが割り当てられていたので、原因はURL重複によるものと考えられます。


##| 解決方法

ということで、前回同様にTLSの再作成をしたいと思います。

```:文法
文法： docker-machine regenerate-certs NAME
```

```bash:TLS再作成
$ docker-machine regenerate-certs default
Regenerate TLS machine certs?  Warning: this is irreversible. (y/n): y
Regenerating TLS certificates
Error getting SSH command: Something went wrong running an SSH command!
command : cat /etc/os-release
err     : exit status 255
output  :
```

再作成ができたら、改めて`docker-machine ls`コマンドを実行してみます。

```bash:確認
$ docker-machine ls
NAME           ACTIVE   DRIVER       STATE     URL                         SWARM
default        -        virtualbox   Stopped                               
kooohei-test   *        virtualbox   Running   tcp://192.168.99.100:2376   
```

無事エラーも消え、通常と同じようにDocker Machineがリストされました。
Go言語のredigoでGETするときのパフォーマンス

ベンチマークコードは以下のとおり

```go:redogo_bench_test.go
package redigo_bench

import(
    "testing"

    "github.com/garyburd/redigo/redis"
)

func before() {
    c, _ := redis.Dial("tcp", "127.0.0.1:6379")
    defer c.Close()
    c.Send("SELECT", 0)
    c.Send("SET", "samplekey", "100")
    c.Flush()
}

func after() {
    c, _ := redis.Dial("tcp", "127.0.0.1:6379")
    defer c.Close()
    c.Send("SELECT", 0)
    c.Send("DEL", "samplekey")
    c.Flush()
}

func BenchmarkEachDoTest(b *testing.B) {
    before()

    b.ResetTimer()
    c, _ := redis.Dial("tcp", "127.0.0.1:6379")
    defer c.Close()
    for i:=0; i < b.N; i++ {
        c.Do("SELECT", 0)
        redis.Int(c.Do("GET", "samplekey"))
    }
    b.StopTimer()

    after()
}

func BenchmarkSendDoTest(b *testing.B) {
    before()

    b.ResetTimer()
    c, _ := redis.Dial("tcp", "127.0.0.1:6379")
    defer c.Close()
    for i:=0; i < b.N; i++ {
        c.Send("SELECT", 0)
        redis.Int(c.Do("GET", "samplekey"))
    }
    b.StopTimer()

    after()
}

func BenchmarkSendFlushTest(b *testing.B) {
    before()

    b.ResetTimer()
    c, _ := redis.Dial("tcp", "127.0.0.1:6379")
    defer c.Close()
    for i:=0; i < b.N; i++ {
        c.Send("SELECT", 0)
        c.Send("GET", "samplekey")
        c.Flush()
        c.Receive() // OK
        redis.Int(c.Receive()) // 100
    }
    b.StopTimer()

    after()
}
```

```zsh:結果
BenchmarkEachDoTest-4              20000             85983 ns/op
BenchmarkSendDoTest-4              30000             46070 ns/op
BenchmarkSendFlushTest-4           30000             44857 ns/op
```

都度Doするのが一番遅い
nvmでnode.jsインストール


```terminal
# nvmコマンドインストール
$ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash

# ターミナル再起動

# インストール可能なバージョン確認
$ nvm ls-remote

# インストール
$ nvm install v10.5.0

# バージョン確認
$ nvm ls
->      v10.5.0
default -> v10.5.0
node -> stable (-> v10.5.0) (default)
stable -> 10.5 (-> v10.5.0) (default)
iojs -> N/A (default)
lts/* -> lts/carbon (-> N/A)
lts/argon -> v4.9.1 (-> N/A)
lts/boron -> v6.14.3 (-> N/A)
lts/carbon -> v8.11.3 (-> N/A)

$ node -v
v10.5.0
```
RAID

参考サイト
http://www.obenri.com/_raid_build/after_install_raid.html#target_pictprocmdstat01
https://raid.wiki.kernel.org/index.php/Mdstat#md_config.2Fstatus_line

####RAIDについて
RAIDと言われると、いつも「ああアレね！なんか……冗長するやつ」ってなるので、覚え書きです。


```
cat /proc/mdstat

Personalities : [raid1] [raid6] [raid5] [raid4]

md_d0 : active raid5 sde1[0] sdf1[4] sdb1[5] sdd1[2] sdc1[1]
      1250241792 blocks super 1.2 level 5, 64k chunk, algorithm 2 [5/5] [UUUUU]
      bitmap: 0/10 pages [0KB], 16384KB chunk

unused devices: <none>

```

|項目|意味|
|:--|:--|
|md_d0 |RAIDデバイス|
|active |active 動作状態|
|raid5 |RAIDレベル|
|sde1［0］|パーティション［認識番号］|
|1250241792 blocks|RAIDサイズ（block）|
|super|スーパーブロックのこと|
|64k chunk|データがストライプされる単位|
|algorithm 2|RAID5には、ストライピングにいくつかのパターンがあり、algorythmオプションとして指定できる|
|[5/5]|RAID構成パーティション/稼働パーティション|
|[UUUUU]|U=Upのこと。Downは_で表示される|
|bitmap: 0/10 pages [0KB]|write intent bitmapのこと。突然のシャットダウンや、RAID再構築時にRAIDを素早くビルドするために使われるらしい|

パリティ（Parity）とは
コンピュータのビット列誤り検出のこと。
ビット列（8つの0または1の列）の中に、
1が奇数個ある→パリティは0
1が偶数個ある→パリティは1
という単純な話。

11001001 なら、パリティは1
パリティを合わせたビット列は110010011

【パリティがRAIDの何の役に立つのか】

ABCのサーバが、それぞれ1、1、0のビットを持っていたとする。
例えば、Bのサーバが落ちてしまった場合、
1、X、0 と、Xのところのビットがわからなくなってしまう。
こんな場合でも、パリティビットさえ保存されていれば、
1、X、0と、パリティ1から
1は偶数個必要だから、Xは1だと断定できる。
パリティビットは、耐障害性を高めるため、サーバに分散して保存される。
<br>
下の表は、A,B,C,D の4台のサーバでRAIDを構築した場合、データがどのように保存されるかを示している。
（PとP'はパリティを表す）

|RAID|呼び名|A|B|C|D|
|:--|:--|:--|:--:|:--:|:--:|:--:|
|0|Striping|1<br>5|2<br>6|3<br>7|4<br>8|
|1|Mirroring|1<br>2|1<br>2|1<br>2|1<br>2|
|5|Striping<br>with Parity|1<br>4|2<br>P|P<br>5|3<br>6|
|6|Striping<br>with Dual Parity |P'<br>3|1<br>P|P<br>4|2<br>P'|


● RAID0 
ストライピング。複数のディスクに同時にデータをread/writeする。ディスクのread/write速度が上がる。冗長性は無い。

● RAID1 
ミラーリング。同じデータを複数のサーバで保持する。

● RAID5 
ストライピングでデータを保存し、パリティを付けることで耐障害性を確保する。

● RAID6
ストライピングでデータを保存し、二種類のパリティを付ける。RAID5では1台のサーバに対する耐障害性しかないが、RAID6なら2台同時に落ちてもデータを復元できる。
<br>
【RAIDの組み合わせ】
RAIDは、1種類だけ使うよりも、複数のRAIDを組み合わせて使うことの方が多い。
組み合わせることで、耐障害性やディスクへのアクセス速度向上を図る。

|RAID|効果|
|:--|:--|
|0 + 1| 0 : アクセス速度向上、大容量<br> 1 : 冗長性
|5 + 0 | 0 : アクセス速度向上、大容量<br> 5: 耐障害性|


<br>
【RAIDの分類】
もうひとつ、RAIDを分けるものとして、分割するディスクの単位がある。
RAID2,3,4だとその辺の区別があるらしい。
ほとんど使われないそうなので割愛します。
Block（Sector）: 512byte（磁気ディスク）
                               2048byte（光ディスク）
Bit : 1か0どちらかのこと。一桁
Byte : 8桁の1か0の並び。
"Unity"+"leap motion" [練習七つ]: VRGUI Project

<h2>VRGUI Project： 「GUIのエフェクトのために。。」</h2>
<h3>Goal: 空間に浮かぶGUIを作る</h3><ul>
<li>Step 1: UnityでLeap Motionを使ってGesture Motion認識ができる。</font></li>
<li><font color=red>Step 2: uGUIでメニューを作って空間に浮かべる</font> </li>
<li>Step 3:メニュー選択。任意のGameObjectからRaycastを飛ばしてメニューを選択できる。選択状態で色を変える。できたら音も。</li>
<li>Step 4:メニューで選択した項目を実行。メニューに任意のアクションを割り当てられるように実行する。</li>
</ul>

<hr/>
GUIのエフェクトのために。。itweenということを練習しましょう。

iTween、何だ？
簡単な説明：itweenは簡単でパワフルなunityのアニメイションsystemだ。

Set-up

1) https://www.assetstore.unity3d.com/en/#!/content/84 で<font color=red>(1)</font>itweenと<font color=red>(2)</font>itween-pathをドウンロ-ド。
![Screen Shot 2015-11-26 at 11.41.46.png](https://qiita-image-store.s3.amazonaws.com/0/99307/7f7e8a9d-d982-5e9a-1d34-a484506e3ad5.png)

2)unityからCustom Packageでimportする。
<img width="942" alt="Screen Shot 2015-11-26 at 11.48.13.png" src="https://qiita-image-store.s3.amazonaws.com/0/99307/68033fd3-3c64-5ce3-68e3-cabbd1c06e6a.png">

3)簡単なサンプル
https://youtu.be/-NdDhxmU24I

4)itween pathのサンプル

<img width="1440" alt="Screen Shot 2015-11-26 at 13.52.35.png" src="https://qiita-image-store.s3.amazonaws.com/0/99307/4a1c15bd-654f-605b-f639-e902b46e82f6.png">
 &nbsp;&nbsp;&nbsp;&nbsp;a)add: iTweenPath script
 &nbsp;&nbsp;&nbsp;&nbsp;b)main Cameraでpath設定

<img width="1022" alt="Screen Shot 2015-11-26 at 13.52.47.png" src="https://qiita-image-store.s3.amazonaws.com/0/99307/35eba76c-131b-256d-c4f7-b19540b5b693.png">
iTween hashの中で、getPath設定。

5)簡単なサンプル

 https://youtu.be/bmKwivi2QZc
<br/>
<br/>
<hr/>
<a href="http://itween.pixelplacement.com/documentation.php"><img width="781" href="http://itween.pixelplacement.com/documentation.php" src="https://qiita-image-store.s3.amazonaws.com/0/99307/1c71a077-d381-7d99-d577-e6141b7c8ec3.png">
</a>
他パッケージのモジュールをロードする


## はじめに

例えば[Tablr](https://atom.io/packages/tablr)は[Service API](https://atom.io/docs/latest/behind-atom-interacting-with-other-packages-via-services)を用いてパッケージ内の一部クラスを外部からでも利用できるようにしているが、たまにこういった外部からアクセスできる手段を用意していないクラスを利用したくなるときがある。
そのような場合どうするのかを考えてみた。

実現するためにドキュメントに載っていないプロパティにアクセスしていることと、そもそも外部から読むことを想定していないモジュールを無理やりロードするのはあまり行儀がよろしくない行為と考えられるため、多用は避けたほうが無難だと思われる。

## 1. 目当てのファイル名を確認する

インストール済みのパッケージであれば設定画面から辿ればソースコードを開けるので、そちらで確認する。
よく分からなければ[公式サイトのパッケージ検索](https://atom.io/packages)から検索し「Repo」を開けばGitHub等のレポジトリにアクセスできるので、そちらから確認する。

## 2. パッケージのディレクトリパスを取得する

[PackageManager](https://atom.io/docs/api/latest/PackageManager)の`getLoadedPackage()`メソッドを利用することで指定のパッケージの情報を得ることができる。
`getLoadedPackage()`の返り値は[Package](https://atom.io/docs/api/latest/Package)のインスタンスで、APIドキュメントにはほとんど記述がないがv1.2.4時点では`path`プロパティでパッケージがインストールされているディレクトリのフルパスを得ることが出来る。

## 3. 目当てのファイル名のフルパスを作って`require()`に放り込む

1と2の方法で得た情報で目当てのファイルのフルパスを作ることが出来るので、`require()`にフルパスを放り込むとロードすることができる。

## 実装例: settings-viewの`PackageManager`をrequireする

```coffeescript
path = require "path"
fs = require "fs"

if atom.packages.isPackageLoaded "settings-view"
  pkg = atom.packages.getLoadedPackage "settings-view"
  modulePath = path.join pkg.path, "lib", "package-manager.js"
  PackageManager = require modulePath if fs.existsSync modulePath
```
iOS デバイスが 3D Touch に対応しているか判別する

```objc
NSOperatingSystemVersion iOS9Version = {9, 0, 0};
if ([[NSProcessInfo processInfo] isOperatingSystemAtLeastVersion:iOS9Version]) {
    return [UITraitCollection traitCollectionWithForceTouchCapability:UIForceTouchCapabilityAvailable];
} else {
    // iOS 9以前の場合は対応端末が存在しない
    return NO;
}
```
winAppDev > 重複includeの連鎖を断ち切る / 派生クラス > 前方宣言の利用

http://qiita.com/7of9/items/ff461543465a621d4539
の問題の再検討。

```txt:動作確認
C++ Builder XE4
```

## 前提
使用したいフォーム(ConnectForm)については、Form->Show();処理しかしていない。
それ以外の処理をする場合は、スライス問題なども気にする必要があるかも。

includeは以下のような感じ

- grp3141Main.h > param3141.h > enum COLOR_e { ... }
- grp9999Main.h > param9999.h > enum COLOR_e { ... }

param3141.hのインクルードガード : #ifndef PARAM3141_H
param9999.hのインクルードガード : #ifndef PARAM9999_H

## 多重includeの問題

```ConnectForm.cpp
#include "grp3141Main.h"
#include "grp9999Main.h"
...
TFormBaseDelegate * __fastcall TFormConnect::selectForm(int idx)
{
	switch(idx) {
	case 3141:
		return Form3141Main;
	case 9999:
		return Form9999Main;
	}

	return NULL; // not found
}
```
上記があることで、
 - grp3141Main.h内のincludeに含まれるparam3141.hがincludeされる。
 - grp9999Main.h内のincludeに含まれるparam9999.hもincludeされる。

結果として、両方のparamヘッダーで定義されている`enum COLOR_e { ... }`が重複定義となる。

## 前方宣言の利用

includeをやめて以下のようにする。

```ConnectForm.cpp
// #include "grp9999Main.h"
class TForm9999Main;
extern TForm9999Main *Form9999Main;
...
```

この変更により、`enum COLOR_e`の重複定義はなくなったが、`return Form9999Main;`の行で以下のエラーが出る (Form9999Mainの宣言にて派生元を定義していないため)。

> E2034 'TForm9999Main *'型は'TFormBaseDelegate *型'に変換できない。

以下のように対応した。

```ConnectForm.cpp(続き)
TFormBaseDelegate * __fastcall TFormConnect::selectForm(int idx)
{
	switch(idx) {
	case 3141:
		return Form3141Main;
	case 9999:
		return (TFormBaseDelegate *)Form9999Main;
	}

	return NULL; // not found
}
```

一応対応はできたが、上記のキャストはC++のものでない。

C++のキャストとして
`return static_cast<TFormBaseDelegate *>(Form9999Main);`
とすると以下のエラーとなった。
> E2031 'TForm9999Main *'から'TFormBaseDelegate *'へのキャストはできない	

以下ではできたが、これが正しいキャストなのかは未消化。
`return reinterpret_cast<TFormBaseDelegate *>(Form9999Main);`

## 備考
今回の対応は、単純に複数のフォームを切り替えて開く場合に、include経路により多重定義が発生する問題の対応を行った。
include先ファイル自体を編集していくより、前方宣言を利用する方が全体的なコードの変更量を抑えることができると思う。

それぞれのフォームのメンバ関数など色々使う場合に対応可能かは未検証。
サーバ再起動したけど、DB（MySQL）起動してない件

【保守ヤッテル知人から聞いた話】サーバ再起動したらMySQLが起動しなかった件について

------
以下、時系列で

・DBのメンテをしようとしたが、telnetでアクセスできず、
　そもそもpingも通らなかった。
　※DBサーバ、お客様先に設置してあり、リモートでの作業らしい。

・お客様側の担当者に状況連絡と対応依頼。
　担当者対応：
　・OSハングアップしていた。
　　※ログイン画面で止まってた。
　・OS再起動
・再起動連絡有り、接続したが、DB（mysql）のサービスが停止している様子。
　再度、担当者に連絡。

・お客様側の担当者が調査＆対応して、復旧

------
以下は調査結果と対応内容

MySQLのデータベースの保存場所をデフォルト(/var/lib/mysql)から移動した場合に、
Linuxの SELinux が影響して発生する現象のようです。
※保存場所の移動は、サーバ引き渡し後にアプリ開発側で行った作業らしい。

復旧の対応
SELinux を Permissive モードで起動した後、
MySQLの起動を実行。

＃ setenforce 0
＃ service mysqld start
mysqld を起動中:                                           [  OK  ]

ただし、暫定対応なので、OSを再起動すると毎回、同じ現象が発生する。
恒久対応とするには、SELinux へ適切な許可設定を行う必要が有る。
※もしくは、SELinux をOFFにする。

【参考サイト】
◆MySQL の datadir を標準以外に変更すると起動できなくなる場合
http://network.station.ez-net.jp/os/linux/db/mysql/error/datadir/centos/5.4.asp

◆Linux の SELinux によるセキュリティ設定
http://network.station.ez-net.jp/os/linux/selinux.asp
Groongaで作ったRSSフィードリーダーをSinatraで運用している話（概要編）

## はじめに

FeedcellarというRSSフィードリーダーを作って運用しています。

開発を始めたのは2年半ほど前です。作り始めたきっかけは、当時使っていたGoogle Readerがサービス終了したことでした。移行するのも面倒だし、せっかくだから自分で作ってみようと思い立って開発を始めました。

今回は、どんな感じで作って運用しているかの概要を簡単にまとめてみます。

[Feedcellar - full-text searchable RSS feed reader](http://myokoym.net/feedcellar/)

## Feedcellarの特徴

主な特徴は以下の2点です。

* [Groonga - カラムストア機能付き全文検索エンジン](http://groonga.org/ja/)を使っているので、高速な全文検索やドリルダウンが行えるため、フィードの絞り込みがしやすい
* [オブジェクト指向スクリプト言語 Ruby](https://www.ruby-lang.org/ja/)を使っているので、開発が楽（主観）

## 使っているもの

* Groonga
  * 最新版の5.0.9で動いている
* Ruby
* [Rroonga](http://ranguba.org/ja/#about-rroonga)
  * RubyからGroongaをライブラリとして使える
* [Sinatra](http://www.sinatrarb.com/)
  * Ruby製の軽量Webアプリケーションフレームワーク 
* [Feedcellar](https://github.com/feedcellar/feedcellar)
  * Feedcellarの本体
  * コマンドラインインターフェイスが付属している
  * ライブラリとしても使える
* [feedcellar-web](https://github.com/feedcellar/feedcellar-web)
  * FeedcellarをWebアプリケーションとして動かせるようにしたパッケージ

## 運用の流れ

### セットアップ

* feedcellar-webをVPSなどにcloneする
* 必要なライブラリをインストールする
  * [2. インストール — Groonga v5.0.9ドキュメント](http://groonga.org/ja/docs/install.html)
      * [Rroongaを最速でインストールするには - Qiita](http://qiita.com/groonga/items/2bc6d3499abc5ed47a49)
  * `bundle install`
* Sinatra（Rack）アプリケーションを好きなWebサーバーで起動する

### フィード更新

* Feedcellarのコマンドでフィードを登録する
  * OPMLに対応しているので、他のフィードリーダーからの移行も可能
  * パースなどはRubyの標準添付ライブラリを使用
* cronなどで定期的にFeedcellarのコマンドを叩いて記事を取得する
  * 再起動しなくてもリアルタイムで全文検索のインデックスに反映される（Groongaの機能）

## デモ

http://myokoym.net/feedcellar-demo/search?word=Rubyist+Magazine

全文検索に加えて、Webサイトや年月での絞り込み（ドリルダウン）ができます。

## おわりに

自分でRSSフィードリーダーを作って運用している話を簡単にまとめてみました。機会があればもっと細かい話も書きたいと思います。

こんな感じの話が11/29（日）に開催される[Groonga Meatup 2015](https://groonga.doorkeeper.jp/events/31482)でたくさん聞けると思います。今からでも無料で参加できるので、興味がある方は気軽に参加してもらえるとうれしいです。

あ、あと[Groonga Advent Calendar 2015](http://qiita.com/advent-calendar/2015/groonga)というものもあるので、自分もGroongaの知見があるという方はぜひ共有してください。よろしくお願いします！
bashスクリプトのデフォルトの標準出力を変更する

以下の記事はbash,zshで可能でありPOSIXでは対応していないので注意

# スクリプト単位で標準出力を変更する

`exec`を使うことでスクリプト単位で標準出力等の変更ができる

```bash
exec 1> /dev/null
```

例えばこれをスクリプトの先頭に書くと、スクリプトの標準出力はすべて`/dev/null`行きとなる。

## 応用：スクリプトの出力をsyslogへ

`exec`とsyslogへ出力をおこなう`logger`を使えばスクリプトの出力をsyslogへ送ることもできる。

```bash
exec 1> >(logger -s -t $(basename $0)) 2>&1
```

`>()`はなんだろうか。`$ man bash` より抜粋

> プロセス置換 (process substitution) がサポートされるのは、 名前付きパイプ (FIFO)  または  ファイル・ディスクリプターの  /dev/fd  形式での指定  をサポートしているシステムです。これは  <(list)  または>(list)  の形になります。 プロセス list は、その入力や出力が FIFO または /dev/fd 中の 何らかのファイルに接続された状態で実行されます。 このファイルの名前は、展開の結果として、 引き数の形で現在のコマンドに渡されます。 >(list) の形式を使った場合、 ファイルへの書き込みは list への入力となります。 <(list) の形式を使った場合、 引き数として渡されたファイルは list の出力を得るために読み込まれます。

要はコマンドを`>()`で囲むとファイルのように扱うことができ、それへの出力は中のコマンドへの入力として扱われることになる。
マイナンバーのチェックデジットを Haskell で計算してみる

[こちらの記事](http://qiita.com/qube81/items/fa6ef94d3c8615b0ce64) を参考にして、Haskell でマイナンバーのチェックデジットを計算するコードを書いてみました。

チェックデジットの具体的な計算方法は [こちらの記事](http://qiita.com/qube81/items/fa6ef94d3c8615b0ce64) を参照してください。

# コード
```haskell:myNumber.hs
import Data.Char


validateMyNumber :: String -> Bool
validateMyNumber cs = if (length cs == 12) && (all isDigit cs)
                      then last cs == calcCheckDigit (init cs)
                      else error "inappropriate data"

calcCheckDigit :: String -> Char
calcCheckDigit cs = if x <= 1 then '0' else intToDigit (11 - x)
  where
    ps = map digitToInt cs
    qs = map (subtract 5) [11, 10 .. 7] ++ map (+ 1) [6, 5 .. 1]
    x  = rem (sum $ zipWith (*) ps qs) 11
```

# コードの解説

## `validateMyNumber` 関数

マイナンバーの先頭の数字が "0" であった場合にも対応できるように、データを文字列で与えるようにしました。

データが 12 桁でなかった場合やデータに数字以外の文字が入っていた場合、エラーを返します。


## `calcCheckDigit` 関数

```haskell
ps = map digitToInt cs
```
与えられた文字列 `cs` を 整数のリスト `ps` に変換します。n 桁目の数字を Pn とすると `ps = [P11, P10 .. P1]` となっています。


```haskell
qs = map (subtract 5) [11, 10 .. 7] ++ map (+ 1) [6, 5 .. 1]
```
`ps` に合わせて `qs = [Q11, Q10 .. Q1]` となるように、整数のリスト `qs` を作ります。

```haskell
x  = rem (sum $ zipWith (*) ps qs) 11
```
$ \left( \sum_{n=1}^{11}P_n \times Q_n \right) \% 11 $ を計算します。


# 追記

`qs` はマイナンバーの数字に関係なく常に同じなので、定数として関数の外側で定義した方がいいかもしれません。
playground で非同期通信をする

playground 上で非同期通信をする場合、普通に書いても動きません。  
特に [step3](#step3-%E5%AE%9F%E8%A1%8C) が重要です！

## step1: import
```swift
import XCPlayground
```

## step2: 通信処理を書く
やりたい処理を書きましょう。

```swift:例
NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()) { (response, data, error) -> Void in
  何か処理
}
```

## step3: 実行
```swift
XCPSetExecutionShouldContinueIndefinitely()
```
playground でファイル読み込みをする (画像・テキストファイルなど)

playground 内に Resources というディレクトリがあるので、そこにファイルを置いてあげればアクセスできます！

## ディレクトリがない場合
Resources ディレクトリがない場合は作りましょう。

```
playground -> "パッケージの内容を表示" -> Resources ディレクトリ作成
```

または

```
mkdir 作業中のplayground.playground/Resources
```

## 読み込み方
```swift
// 画像
let image = UIImage(named: "sample")

// テキスト
let path = NSBundle.mainBundle().pathForResource("sample", ofType: "json")
let contents = try! String(contentsOfFile: path!, encoding: NSUTF8StringEncoding)
```
AndroidStudio2.0 Preview + kotlinで何かアプリを作ってみる(仮)


※タイトルを変更しました

AndroidStudio2.0のプレビュー版がリリースされたということでとりあえず試しに動かしてみたいと思い、何も思いつかなかったのでmixiの[AndroidTraining](https://github.com/mixi-inc/AndroidTraining )をやってみる事にしました。
今回は環境構築までをやってみたいと思います。

##環境構築

###1.AndroidStudioのインストール

まずはAndroidStudio2.0を
http://tools.android.com/download/studio/builds/2-0-preview
からダウンロードしてインストール

###2.プロジェクトの作成
適当に新規プロジェクトを作成してそのままビルドして動作を確認してみる。
Minimum SDK Version は 16以上になっていれば多分大丈夫。

![スクリーンショット 2015-11-26 10.06.50.png](https://qiita-image-store.s3.amazonaws.com/0/61480/02ca4a4e-7b5f-9655-d19e-7ced71605ceb.png "スクリーンショット 2015-11-26 10.06.50.png")

動いた。

###3.kotlinプラグインのインストール

次にkotlinで開発するためのプラグインを入れる
・Android Studio＞Preferencesを選択しpluginを選択

![スクリーンショット 2015-11-26 10.09.09.png](https://qiita-image-store.s3.amazonaws.com/0/61480/fc024215-7b19-6921-4c68-18919f39f818.png "スクリーンショット 2015-11-26 10.09.09.png")

・画面下の方にInstall JetBrains Pluginsボタンがあるので選択する


![スクリーンショット 2015-11-26 10.10.43.png](https://qiita-image-store.s3.amazonaws.com/0/61480/7e6a69d4-8e4e-745a-6401-bcae5c6535f5.png "スクリーンショット 2015-11-26 10.10.43.png")

・選択すると上記画面になるのでkotlinを選択し、右側の上のほうにあるInstallでプラグインをインストールする

・インストールが完了したらInstallボタンがRestart Android Studioに変わっているのでクリックしてAndroidStudioを再起動

###4.Java　→　kotlinへの変更
・Javaファイルを選択し、Code　→　Convert Java File to Kotlin Fileで変換する

![スクリーンショット 2015-11-26 10.18.00.png](https://qiita-image-store.s3.amazonaws.com/0/61480/d872dab9-2429-0176-f8ae-1d0596a603f5.png "スクリーンショット 2015-11-26 10.18.00.png")


・次にJavaパッケージ名をリネームする、パッケージのリネームはjavaパッケージを右クリック→Refactor→Renameを選択しkotlinに変更

![スクリーンショット 2015-11-26 10.23.48.png](https://qiita-image-store.s3.amazonaws.com/0/61480/8925630a-3c05-09ed-aabd-24ff8d095af2.png "スクリーンショット 2015-11-26 10.23.48.png")


・変更が完了したら次はbuild.gradleをkotlin用に設定します。Tools→kotlin→Configure Kotlin in Projectを選択、ダイアログがでたらOKをクリック

![スクリーンショット 2015-11-26 10.23.51.png](https://qiita-image-store.s3.amazonaws.com/0/61480/0175340f-2bf9-f30d-dce1-ba3c4b237def.png "スクリーンショット 2015-11-26 10.23.51.png")


これでJava→kotlinへの変更は完了なので再度ビルドしてアプリケーションが起動すればOKです。

![スクリーンショット 2015-11-26 10.33.33.png](https://qiita-image-store.s3.amazonaws.com/0/61480/b2a59c9e-4658-70b2-6f77-1ec5edd70630.png "スクリーンショット 2015-11-26 10.33.33.png")


###4.準備完了！
これで環境構築は完了です、次回からはトレーニングを進めて行きたいと思います！
Hyper-Vでシリアルポートを使う

Hyper-VゲストOSのアプリケーションから、ホストに接続された物理シリアルポートを使いたいことがあったら
http://www.eterlogic.com/Products.VSPE.html
これを使って、TCP経由で実現できる。
ゲストWindows XP 32Bit、ホストWindows 10 (64bit)実績あり
引数にboolとstd::stringを取るオーバーロードがあると"str"はboolにとられる

よくあるクラス内でメソッド名は同じなんだけど引数が違うメソッド(~~用語忘れた~~ オーバーロード)で、引数にboolとstd::stringを使った際にハマった際の対処

@OTL さんに助けてもらった。ありがとうございます！
https://twitter.com/OTL/status/669676415877406724

クラス内でメソッド名は同じなんだけど引数が違うメソッドが「オーバーロード」っていうことを 紫さん に教えてもらった。

# 問題

以下のコードを実行した際に `string` が出力されて欲しいところが、 `bool` が出力される。

```
class hoge {
public:
  void m(bool value) {
    std::cout << "bool";
  }
  void m(std::string value) {
    std::cout << "string";
  }
}

void main() {
  hoge h;
  h.m("str"); // <- bool が出力される 
}
```

# 原因

文字列として `""` を使っているが、実際は `char *型` なので、ポインタ。
ポインタは `std::string型` よりも `bool型` に優先されて変換されるため、`bool` が出力される。
http://stackoverflow.com/questions/14770252/string-literal-matches-bool-overload-instead-of-stdstring

# 対処

## 呼び出し側でキャスト

classの実装が変えられない時とかに対処する場合とか。
呼び出し側で `std::string型` にキャストしてしまう。

```
void main() {
  hoge h;
  h.m(std::string("str")); // <- string が出力される 
}
```

## 実装の修正

`char *型` の引数を受けるメソッドを用意してしまう。

```
class hoge {
public:
  void m(bool value) {
    std::cout << "bool";
  }
  void m(char* value) {
    std::cout << "char*";
    // m(std::string(value)); // こちらでも可
  }
  void m(std::string value) {
    std::cout << "string";
  }
}

void main() {
  hoge h;
  h.m("str");
}
```

# 雑感

javaとかpythonやってるとc++の文字列がポインタだということを忘れてしまう。
ActiveRecord でランダムに２件以上取得したいケース

## 問題

- ActiveRecord でランダムに３件取ってくるようなコードに `order("RANDOM()").limit(3)` を使うのはいかがなものか（性能的に）という議論
    - https://twitter.com/joker1007/status/669552773214572545
    - 『ＳＱＬアンチパターン』の「ランダムセレクション」
- 代わりに OFFSET を使った実装を作って、性能を比較してみる

## RANDOM() を使った実装

```rb
User.order("RANDOM()").limit(3)
```

## OFFSET を使った実装

```rb
[*0..(User.count - 1)].
  sample(3).
  map { |offset| User.offset(offset).limit(1) }.
  reduce(User.all) { |all_user, user| all_user.where(id: user) }.
  where_values.
  reduce(:or).
  tap { |condition| break User.where(condition) }
```

## 性能比較

|件数|RANDOM()|OFFSET(n)|
|--:|--:|--:|
|100 件の場合|0.6ms|1.1ms|
|10_000_000 件の場合|2314.7ms|1470.2ms|
|300_000_000 件の場合|139793.4ms|215905.9ms|

## 結論

- テーブル件数が少なすぎたり多すぎたりする場合は `RANDOM()` の方が速い
- `RANDOM()` でも仕方ない場合も多いのではないか
Githubでのマークダウン文章を印刷する方法


# 概要
私自身、この方法を知らなかったのでメモということで残しておきます。

# 方法
1. Githubリポジトリ内にあるマークダウンファイルをクリック（例：README.md）
2. 飛び先のURLのgithub.comをgitprint.comへ変更 (例: https://gitprint.com/account/cs193p-2015-Calculator/blob/master/README.md)
3. 印刷プレビューが表示される

# 最後に
こんなに簡単にできるものだとは知りませんでした。まだまだGithubには知らない機能がたくさんありそうです。
GitLabを動かす

* [snippet: docker-compose - Qiita](http://qiita.com/tukiyo3/items/47b781a2a24755a25f01)に書いていたが、Gitlabの項目が長くなったので分離

## 参考

* [SSH のポートが変更されていて git clone できないとき - わからん](http://d.hatena.ne.jp/kitokitoki/20140608/p1)
* [Running Gitlab Docker - Stack Overflow](http://stackoverflow.com/questions/35562995/running-gitlab-docker)

## GitLab (git)

* [gitlab/gitlab-ce](https://hub.docker.com/r/gitlab/gitlab-ce/tags/)

```yaml:docker-compose.yml
web:
  image: 'gitlab/gitlab-ce:latest'
  restart: always
  hostname: 'localhost'
  environment:
    GITLAB_OMNIBUS_CONFIG: |
      external_url 'http://localhost:8080'
      # Add any other gitlab.rb configuration here, each on its own line
  ports:
    - '10080:80'
    - '10443:443'
    - '10022:22'
  volumes:
    - /etc/localtime:/etc/localtime
    - ./gitlab/config:/etc/gitlab
    - ./gitlab/logs:/var/log/gitlab
    - ./gitlab/data:/var/opt/gitlab
```

* http://localhost:8080/ にアクセス
* root のパスワードを設定求められる。

### メモリ使用量を少し抑えられるかも？

* 以下設定したがメモリ2.3GB必要だった。

```rb:config/gitlab.rb
unicorn["worker_processes"] = 1
postgresql["shared_buffers"] = "128MB"
```


### ユーザー登録を無効にする方法 (古い画面)

![signup.png](https://qiita-image-store.s3.amazonaws.com/0/25728/70c6ba55-ede2-f336-2ffb-f6a03ad18923.png)


### (古いメモ) GitLab 7から8にバージョンアップの注意

```bash:手順
docker compose stop
docker pull gitlab/gitlab-ce
docker compose up
```

* DBのmigrationが走るので数分まつ。
* 新規プロジェクトを作成できなくなった(500エラー)のため、全リポジトリを一回チェッアウトして一から作りなおした。
アプリ開発にうってつけのデザインツール！sketch3よく使うメソッド


sketchとは、fireworksに変わる簡単デザインツール！？
しかも買い切りで安い。（無料トライアルあり）

**[Sketch](https://www.sketchapp.com/)**

![スクリーンショット 2015-11-26 9.12.06.png](https://qiita-image-store.s3.amazonaws.com/0/37406/397c7369-79c5-6cde-374e-5cf7de5969b1.png)


<img width="1021" alt="スクリーンショット 2015-11-26 9.14.18.png" src="https://qiita-image-store.s3.amazonaws.com/0/37406/d790843f-a5a7-08c9-f8d7-5ef0d6eb42dd.png">


つかってみて感じた事。（個人的感想

### メリット
・安い
・アプリ向けのデザインテンプレートがある
・比較的動作がかるい
・簡単、より直感的

### デメリット
・画像の細かい質感のスポイト等ができない。。？プラグインであるのかな？
・画像の切り抜きがマスクを使わないといけない。。

<br />


#### 参考サイト
・基本操作系:http://coliss.com/articles/build-websites/operation/design/10-sketch-tricks-by-assentorp.html
・プラグイン参考：http://coliss.com/articles/build-websites/operation/design/best-plugins-for-sketch.html
Dockercraftのセットアップ(Mac)

_今後も更新予定_

[Dockercraft](https://github.com/docker/dockercraft)は、Dockerのコンテナ管理をMinecraftからできるようにするツールです。


[![Youtube Video](http://img.youtube.com/vi/eZDlJgJf55o/0.jpg)](https://youtu.be/eZDlJgJf55o)

_注意_
使用する場合は、セキュリティ対策が行われていないので、ローカルマシン上で使ってくださいとのことです。
_root権限でコマンドが実行されていましたのでご注意を。_ (2015/11/24現在)

前提条件
---------

1. Minecraft(1.7 or 1.8)がインストールされていること
2. Docker がインストールされていること([Windows](http://docs.docker.com/windows/started/) or [Mac](http://docs.docker.com/mac/started/) or [Linux](http://docs.docker.com/linux/started/))


セットアップ
------------

まずは、コマンドを実行して、Dockercraft のイメージを取得してください。
取得する方法は２つあります。

```bash
docker pull gaetan/dockercraft
```

or

```bash
git clone git@github.com:docker/dockercraft.git
docker build -t gaetan/dockercraft dockercraft
```

起動
-----

コマンドを実行して、dockercraft のコンテナを起動します。

```bash
docker run -t -i -d -p 25565:25565 \
-v /var/run/docker.sock:/var/run/docker.sock \
--name dockercraft \
gaetan/dockercraft
```


接続
-----

Minecraft を起動して、先ほど起動したdockercraftサーバーに接続します。

**Open Minecraft > Multiplayer > Add Server**

サーバーのアドレスは、以下のコマンドで確認できます。

```bash
docker-machine ip <machine_name>
```

or

```bash
docker-machine ls
```
StoryboardにNavigationControllerを追加して起動時の表示画面（Initial View Controller）にする

Single View Applicationで作り始めたけれど

<img width="95" alt="SingleViewApplication.png" src="https://qiita-image-store.s3.amazonaws.com/0/2885/171cec7e-006e-761e-848f-10439aaeaa7d.png">

やっぱりNavigationControllerを使いたくなることってありますよね。
そんなとき「あれ？どうするんだっけ？？」と時間をムダにしないためのメモです。

StoryBoardのObject LibraryからNavigation Controllerを選択して

<img width="288" alt="NavigationViewControllerSelect.png" src="https://qiita-image-store.s3.amazonaws.com/0/2885/fd481d43-2273-6d3a-fe31-41d36b75327c.png">

貼り付けます。

<img width="777" alt="AddNavigationController.png" src="https://qiita-image-store.s3.amazonaws.com/0/2885/c7299745-3ceb-0ed7-944f-87898fa48eb7.png">

既存のView Controllerを使いたいので、右側のViewControllerは削除します。
Root View Controllerというのを選択してCtrl + delete

<img width="717" alt="DeleteViewController.png" src="https://qiita-image-store.s3.amazonaws.com/0/2885/74bcdb03-2760-ef8a-cf74-78447e313ff9.png">

起動時に表示したいので、追加したNavigation Controllerを選択して下記のIs Initial View Controllerにチェックします。

<img width="268" alt="InitialViewController.png" src="https://qiita-image-store.s3.amazonaws.com/0/2885/8c0b7e07-8b74-1573-fd00-2ada18c917bb.png">

そして、追加したNavigationControllerから既存のViewControllerにroot view controllerのSegueを作ります。

<img width="194" alt="SequeToRootViewController.png" src="https://qiita-image-store.s3.amazonaws.com/0/2885/78a0000c-17f4-794a-f5e5-adb502be4ada.png">

これで、NavigationControllerが追加されました。
Array.Prototype.forEachで、途中でブレークしたくなったら？


Array.Prototype.forEachは配列を総ナメし、例外を出さない限り途中でとめることはできない。
代わりにArray.Prototype.<del>every</del>someを使うこと。Array.Prototype.<del>every</del>someであればコールバックで<del>false</del>trueを返すことによってループを途中で止めることができる。

以上
WiFi関連の資料


移動体通信（LTE）が蓋をあけてみたら実質従量制で2015年にもなって月間7GB制限というゴミっぷりなので、再度WiFiをやっていこうと思う。

# 802.11ac

* http://www.infraexpert.com/study/wireless49.html
* 解剖！ ギガビット無線LAN最新動向
  * http://www.atmarkit.co.jp/ait/articles/1303/06/news008.html
  * http://www.atmarkit.co.jp/ait/articles/1304/09/news004.html
  * http://www.atmarkit.co.jp/ait/articles/1306/10/news008.html

## ちょっと古いラップトップの11ac化

* [MacBook Pro Retina 13/15 Mid 2012-Early 2013](http://www.vintagecomp.com/shop/shopexd.asp?id=4180)
  * 要するに11ac対応前のRetina Proはぜんぶこれで換装できるっぽい

# WiFi Hotspot

* PassPoint
  * http://www.wi-fi.org/ja/discover-wi-fi/wi-fi-certified-passpoint
  * http://www.itmedia.co.jp/promobile/articles/1206/27/news022.html
* http://itpro.nikkeibp.co.jp/atcl/news/15/110203592/


# Access Points

## Allied Telesis

* [AT-MWS1750AP](https://www.allied-telesis.co.jp/products/list/wireless/mws_ap/catalog.html)
  * 実売4万円強
  * https://nttxstore.jp/_II_AT15197834
* [AT-TQ4600](https://www.allied-telesis.co.jp/products/list/wireless/tq4600_tq4400/catalog.html)
  * 実売4万円程度
  * https://nttxstore.jp/_II_AT14907548

## Ruckus Wireless

http://jp.ruckuswireless.com/products/Access-Points

# Station

* http://itpro.nikkeibp.co.jp/atcl/news/15/100603281/
  * 5GHzのみというのよさそう

# ルータ

AP専用機にはNATとかPPPoEクライアント機能はついてないので、別途ルータを購入する必要がある。
というかAPの収容能力よりも先に限界がくるのはNATのセッション数かもしれない。

* [CentreCOM AR560S](http://www.allied-telesis.co.jp/products/list/router/ar560s/catalog.html)
  * [中古品3万円程度](http://www.pasocomclub.co.jp/htmls/1100000174813.html)
* [RTX1200](http://jp.yamaha.com/products/network/routers/rtx1200/)
  * [中古品2万円程度](http://www.amazon.co.jp/gp/offer-listing/B001G79VGK/ref=sr_1_1_olp?ie=UTF8&qid=1445956365&sr=8-1&keywords=rtx1200&condition=used)

# LANケーブル

APを設置するのに当然LANケーブルが必要なわけである！！！
複数台APを設置するとなると長距離を取りまわすことになりがちなので、有線部分についても考えておいたほうがよさそう。

* http://www.sanwa.co.jp/lan/index.html

# EAP

* http://www.silex.jp/blog/wireless/2013/09/eap1.html


# メモ

* http://itpro.nikkeibp.co.jp/atcl/watcher/14/334361/102700404/
近距離通信Chatデモ作成【メモ】

#参考サイト集

「第 3 回・iOSでMultipeerConnectivityを実装してみよう！」
http://www.gaprot.jp/pickup/ios7/vol3/

「SwiftでBluetoothによるP2P通信を簡単に実現する方法」
http://shirokai.hatenablog.com/entry/swift-bluetooth-multipeer

「Multipeer Connectivity on iOS 8 with Swift」
http://radar.oreilly.com/2014/09/multipeer-connectivity-on-ios-8-with-swift.html

「[swift]4ステップで実装できるdelegate」
http://qiita.com/iKichiemon/items/a55b3624e042ea843573

「Swift2.0でエラー Cannot invoke 'sendData' with an argument list of type...の対処法」
http://qiita.com/ohkawa/items/ec50d8248f292cf6fb5a


###デモアプリURL
https://github.com/GoSato/MultipeerChatDemo
python > 2次元配列の扱い

```txt:動作環境
CentOS 6.5
```

pythonで二次元配列を扱いたい。

参考
http://d.hatena.ne.jp/yuheiomori0718/20121207/1354893179

```151126a.py
onoff=[
[3, 1, 4, 1, 5],
[2, 7, 1, 8, 2],
[0, 5, 7, 7, 2],
]

print onoff[0][0],
print onoff[0][1],
print onoff[0][2]

print onoff[1][0],
print onoff[1][1],
print onoff[1][2]

print onoff[2][0],
print onoff[2][1],
print onoff[2][2]
```

```txt:実行結果
[toLearn]$ python 151126a.py
3 1 4
2 7 1
0 5 7
```
技術英語 > the list goes on! / Keep going. / I'm listening. / I'm all ears.

@ LOE > June 29, 2012
http://loe.org/shows/shows.html?programID=12-P13-00026
> There are dozens of tax benefits, grant programs and incentives to go energy green - 38 states have property tax breaks - 28 states have sales tax incentives - <font color=red>the list goes on!</font>

耳に残った。

「リストは続く」という意味だと思う。

<hr>
「続く」関連で思い出したのは

Keep going. 「続けて」

<hr>
関連して思い出したのは

I'm listening. 「聞いてるよ」

http://ejje.weblio.jp/content/I'm+listening.

<hr>
関連して思い出したのは

I'm all ears. 「しっかり聞いてるよ」

http://ejje.weblio.jp/content/I%27m+all+ears.
Ruby on Rails チュートリアル 第3章 - 演習＆答え

#演習

1. StaticPagesコントローラのテスト (リスト3.22) にも重複があることにお気付きでしょうか。特に「Ruby on Rails Tutorial Sample App」を全てのタイトルテストでそのまま使っています。専用のsetup関数 (テストの設定用関数、個別のテストの前に必ず毎回実行される) を使用してこの重複を解消し、テスト修正後もリスト3.38のテストがGREENになることを確認します (なお、リスト3.38ではインスタンス変数 (2.2.2と4.4.5) と文字列の式展開 (4.2.2を使用しています)。
2. サンプルアプリケーションにContact (問い合わせ先) ページを作成してください17。リスト3.13を参考にして、/static_pages/contactというURLのページに「Contact | Ruby on Rails Tutorial Sample App」というタイトルが存在するかどうかを確認するテストを最初に作成しましょう。3.3.3でAboutページにやったのと同じように、Contactページにもリスト3.39のコンテンツを表示しましょう (リスト3.39にはリスト3.38のような修正は行われていないので、そのままコピペしても動きません)。

出所）[Ruby on Rails チュートリアル：実例を使って Rails を学ぼう](http://railstutorial.jp/chapters/static_pages?version=4.2#sec-static_pages_exercises)

#答え

1.
test/controllers/static_pages_controller_test.rb　に下記を追加



```lang:static_pages_controller_test.rb
 def setup
    @base_title = "Ruby on Rails Tutorial Sample App"
  end
　　・
　　・
　　・
 　　assert_select "title", "Home | #{@base_title}"
　　・
　　・
　　・  
    assert_select "title", "Help | #{@base_title}"
　　・
　　・
　　・
    assert_select "title", "About | #{@base_title}"
```
![3-1ソース.png](https://qiita-image-store.s3.amazonaws.com/0/77287/36da59bb-9a08-89e5-30c3-fe07212166b4.png)


2.
手順:
①（test/controllers/static_pages_controller_test.rbに）contactのテスト作成
②（config/routes.rbに）contactのrootingを設定
③（app/controllers/static_pages_controller.rbに）contactのコントローラー作成
④（app/views/static_pages/contact.html.erbに）contactのビューを作成

①
![3-2test.png](https://qiita-image-store.s3.amazonaws.com/0/77287/0a1b5bbd-90b1-05ac-a12f-8e13b0367793.png)

②
![3-2rooting.png](https://qiita-image-store.s3.amazonaws.com/0/77287/5c843d6c-dc91-6ea1-cb91-ec85c79f38ee.png)

③
![3-2controller.png](https://qiita-image-store.s3.amazonaws.com/0/77287/0c0a093c-eb0e-edcc-ecf2-e9b1a71bdef0.png)

④
![3-2view.png](https://qiita-image-store.s3.amazonaws.com/0/77287/276f7644-f27c-742d-f5d6-91dcd4550f56.png)


終わり
pg_restoreでのリストアを高速化する


まず、-Fcオプションを指定して、カスタム形式でバックアップをする。

```
pg_dump -Fc -U [ユーザ名] -d [db名] -h [IP]  > /tmp/backup.custom
```

カスタム形式のバックアップをpg_restoreでリストアする。
その際に、jobsオプションを指定することで、restoreを並列処理で実行できるため高速化できる。

```
pg_restore -v -c --jobs=2 [db名] /tmp/backup.custom -d 
```

jobsの値はCPUコア数より若干大きい値が良さそう。