OmniAICreator/Qiita-1.07M huggingface dataset:
MySQLである程度大きいダンプファイルのインポートを行った際のERROR 2013 (HY000) at line : Lost connection to MySQL server during queryエラーの解決策

私が最近1GB近いMySQLのダンプファイルを用いてローカルの開発環境へDB復元を行う際に出現した
`ERROR 2013 (HY000) at line : Lost connection to MySQL server during query`エラーの解決方法を記述します．

## TL;DR

- wait_timeout
- max_allowed_paket
- innodb_buffer_pool_size

を大きめに設定してみよう．

`/etc/my.cnf`

```
[mysqld]
wait_timeout            = 86400
max_allowed_packet      = 1G
innodb_buffer_pool_size = 1G
```

## `ERROR 2013 (HY000) at line : Lost connection to MySQL server during query`が出現したら

`ERROR 2013 (HY000) at line : Lost connection to MySQL server during query`が出現してしまったら，`/etc/my.cnf`の`[mysqld]`内に`max_allowed_packet`を設定してみましょう．

```
[mysqld]
max_allowed_packet = 16M
```

多くの方がこれで直るみたい．
これ設定して直った!!って記事をよく見た気がする．
私の場合はここの値を16Mにしても512Mにしても1Gにしても2Gにしてもエラーが出てくるので違うなって思った．

## 原因は`max_allowed_packet`ではないと思ったとき

復元，ものすごく時間もかかるのに毎回エラーで終わるんだよね．
なんて時は`/etc/my.cnf`の`[mysqld]`内に`wait_timeout`と`innodb_buffer_pool_size`を設定してみましょう．

```
[mysqld]
wait_timeout            = 86400
innodb_buffer_pool_size = 1G
```

私はこれで直りました．
`max_allowed_packet`は原因ではないなと思いながらも1G(ダンプファイルがそれくらいだったので)にしておいたので，最終的に追記した設定は以下の通りになりました．

```
[mysqld]
wait_timeout            = 86400
max_allowed_packet      = 1G
innodb_buffer_pool_size = 1G
```

もしも同じような境遇で困っている方がいれば参考にどうぞ．

## おまけ

ダンプファイルをガッツガツ復元させてるとログファイルが一杯になってしまったりしませんか?
このログファイルを真っ新にしたいと思った時，`sudo cat /dev/null`がパーミッションエラーで弾かれて泣いたので一緒にメモとして記述しておきます．

```
$ sudo cat /dev/null | sudo tee mysql-query.log
```

以上．
Railsで`bin/rake db:seed`をやり直す



`db/seeds.rb`に作ったデータをDBに登録するにはこれ。

```
¥ bin/rake db:seed
```

今回、カラムを追加をしたからデータの入れ直しをしたいと思いもっかいやったらデータが2重に登録された。
DB削除してるわけじゃないから、そりゃそうだって話なんだけどやり方が分からなかったので調べてみた。

データベースをリセットしたい場合はこれだった

```
¥ bin/rails db:reset # 裏で`bin/rails s`してるとDBは既に使ってるよって怒られるので必ずストップする
```

これすると、データベースを削除して再度`db:migrate`してくれる。
`db:seed`をもう一度やればOK!!
2次元配列の初期化（ES2015）

# 1次元配列の初期化

配列を `new Array` で生成すると、各要素が `undefined` の配列が得られます。
ES2015では `fill` メソッドを用いることで、引数の値で初期化してくれます。

```js
var arr = (new Array(3)).fill(0);
```

# 2次元配列の初期化

それでは、3×3の2次元配列を0で初期化するコードを紹介します。

## 従来の方法

これまでのJavaScriptでは、配列を2重ループを用いて初期化するのが定番でしたね。

```js:es5.js
var x, y;
var tbl = new Array(3);
for(y = 0; y < 3; y++) {
  tbl[y] = new Array(3);
  for(x = 0; x < 3; x++) {
    tbl[y][x] = 0;
  }
}
```

実際のところ、これで充分なのですが、ES2015の書式でもっとすっきりさせてみたいと思います。

## 失敗例

```js:failed.js
var tbl = (new Array(3)).fill((new Array(3)).fill(0));
```

冒頭の1次元配列でのfillを使った書き方に倣って、fillを2重にしてみました。
最初書いてみて、これで万事OK、と思っていたのですが、実際このコードには欠陥があります。

```js
var tbl = (new Array(3)).fill((new Array(3)).fill(0));
tbl[1][1] = 5;
console.log(tbl[1][1]); // => 5
console.log(tbl[2][1]); // => 5
```

このコードのように、2次元配列内の要素を1つ上書きしただけのはずなのに、
違う行の要素まで書き換わってしまっています。

それもそのはず、fillの中に入れた配列がプリミティブ値でないため、参照が各行とも同じになってしまっているのです。

以下のコードとやってることは同じです。

```js
var row = (new Array(3)).fill(0);
var tbl = [row, row, row];
row[1] = 5;
console.log(tbl[1][1]); // => 5
console.log(tbl[2][1]); // => 5
```

## 正しい書き方

### 方法1

最初に試した方法を利用します。

```js:method-1.js
var tbl = JSON.parse(JSON.stringify((new Array(3)).fill((new Array(3)).fill(0))));
```

配列をいったんJSON化して、それを再度オブジェクト化することによって、全ての配列が別オブジェクトになります。

### 方法2

いったん1×3の配列を作り、それぞれの行を `forEach` を使って配列にすげ替えます。

```js:method-2.js
var tbl = (new Array(3)).fill(0);
tbl.forEach((_, i) => {
  tbl[i] = (new Array(3)).fill(0);
});
```

あまり効率的な感じはしませんね…。

### 方法3

これが一番素直でよいでしょう。

```js:method-3.js
var tbl = new Array(3);
for(let y = 0; y < 3; y++) {
  tbl[y] = new Array(3).fill(0);
}
```

ES2015の記法で1重ループに抑えることができました。

他にもっとすっきりした初期化方法があればコメントください。

# 追記 すっきりした汎用コード

現時点でお二方からコメントくださって、両方ともES2015らしい書き方だと思ったので、行数列数を任意に変えられる汎用コードもご用意しました。

```js:method-new-1.js
generate2DArray1 = (m, n, val = 0) => {
  return Array.from(new Array(m), _ => new Array(n).fill(val));
};
```

```js:method-new-2.js
generate2DArray2 = (m, n, val = 0) => {
  return [...Array(m)].map(_ => Array(n).fill(val));
}
```
【Obj-C】Firebaseのplistを環境ごとに切り替えるコード例

Firebaseからダウンロードした**GoogleService-Info.plist**を環境ごとに切り替えるコードを紹介します．
Swift版はこちらを参考にしてください.
→[FirebaseをStaging環境とかDebug環境とかRelease環境で切り替えをする](http://qiita.com/nnsnodnb/items/7fdd4fe934351df341e0)

今回はDebugの場合とReleaseの場合とその他の場合でplistを分岐させます．
Debug　→　GoogleService-Info-Debug.plist
Release　→　GoogleService-Info-Release.plist
その他　→　GoogleService-Info.plist

#コード例
普段，[FIRApp configure]で済ませる箇所にoptionを追加します．

```objc:AppDelegate.h
#import <UIKit/UIKit.h>
#import "Firebase.h"  // ←追加部分：Firebaseをインポートする

@interface AppDelegate : UIResponder <UIApplicationDeledate>

@property (strong, nonatomic) UIWindow *window;

@end
```

```objc:AppDelegate.m
#import "AppDelegate.h"

/*
 * 環境ごとに使用するplist名を定義しておく
 * plist名　→　firebasePlistName
*/
#ifdef DEBUG
static NSString * const firebasePlistName = @"GoogleService-Info-Debug";
#elif RELEASE
static NSString * const firebasePlistName = @"GoogleService-Info-Release";
#else
static NSString * const firebasePlistName = @"GoogleService-Info";
#endif

@interface AppDelegate ()

@end

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    
    NSString *filePath =[[NSBundle mainBundle] pathForResource:firebasePlistName ofType:@"plist"];
    FIROptions *options = [[FIROptions alloc] initWithContentsOfFile:filePath];
    
    [FIRApp configureWithOptions:options];
    
    return YES;
}
・
・
・

@end
```
こんな感じで環境ごとにplistを切り替えることができます．
環境別に分析したいという時にお役に立てれば幸いです．

関連記事：[Firebase Analyticsを本番環境とテスト環境で使い分ける[GAみたいにできないの？]](http://qiita.com/s_emoto/items/f8021275a2d3c2bf51ad)
WRF > met_em.* の num_metgrid_levelsを見る > ncdump -h met_em.d01.2014-11-01_00\:00\:00.nc | grep num_metgrid

```txt:動作環境
Xeon E5-2620 v4 (8コア) x 2
32GB RAM
CentOS 6.8 (64bit)
openmpi-1.8.x86_64 とその-devel
mpich.x86_64 3.1-5.el6とその-devel
gcc version 4.4.7 (とgfortran)
NCAR Command Language Version 6.3.0
```

WRF(Weather Research and Forecasting Model)関連。

関連 http://qiita.com/7of9/items/4cd19f98ab126e748dd7

met_em.*ファイルの中のnum_metgrid_levelsを見る。

```
$ ncdump -h met_em.d01.2014-11-01_00\:00\:00.nc | grep num_metgrid
	num_metgrid_levels = 27 ;
	float PRES(Time, num_metgrid_levels, south_north, west_east) ;
	float GHT(Time, num_metgrid_levels, south_north, west_east) ;
	float RH(Time, num_metgrid_levels, south_north, west_east) ;
	float VV(Time, num_metgrid_levels, south_north_stag, west_east) ;
	float UU(Time, num_metgrid_levels, south_north, west_east_stag) ;
	float TT(Time, num_metgrid_levels, south_north, west_east) ;
```
PTVSでFlaskアプリの作成とデプロイ

#Flaskとは
[Flask](http://flask.pocoo.org/)は、Python用のマイクロWeb開発フレームワークです。 Jinja2テンプレートエンジンとWerkzeugWSGIツールキットに依存しています。

#Python Tools 2.2 for Visual Studioを使用したFlaskアプリ開発 

##1. Visual Studioを起動し
【新しいプロジェクト】▶︎【Python/Web】▶︎【Flask Web Projet】
を選択し、プロジェクトを作成する
<img width="1279" alt="1.png" src="https://qiita-image-store.s3.amazonaws.com/0/130097/fd6c885c-1b7b-3f4f-c980-de972f5af609.png">

##2. 作成したプロジェクトをRUNする
<img width="1280" alt="2.png" src="https://qiita-image-store.s3.amazonaws.com/0/130097/2f6e60a3-f7c5-18f3-58a3-da1fdb478615.png">

<img width="1095" alt="3.png" src="https://qiita-image-store.s3.amazonaws.com/0/130097/03996c91-751e-ed97-2424-97c7ef908288.png">

##3.新しいHTMLを作成する
【プロジェクト】▶︎【template】▶︎【右クリック/追加】
で空のHTMLを作成する
<img width="1276" alt="4HTML作成.png" src="https://qiita-image-store.s3.amazonaws.com/0/130097/3f5f8ab3-5754-b079-852c-000b2f4b096d.png">

##4.空のHTMLにコードを記入

```Python:test.html
<!DOCTYPE html>

<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8" />
    <title>Hello</title>
</head>
<body>
    Hello World
</body>
</html>
```

view.py内のhome()をコメントアウトし、新しくtest.html(新しく作ったHTML)を読み込ませるように書きます。

```Python:view.py
def home():
    return render_template('test.html')

"""
def home():
    return render_template(
        'index.html',
        title='Home Page',
        year=datetime.now().year,
    )
"""

```

##5.　実行するとHello Worldが表示される
<img width="1100" alt="５表示.png" src="https://qiita-image-store.s3.amazonaws.com/0/130097/4772b181-763b-10d0-64ba-5b7bbf1fda34.png">

##6.　デプロイする
【プロジェクト/右クリック】▶︎【公開】
<img width="1275" alt="６公開.png" src="https://qiita-image-store.s3.amazonaws.com/0/130097/fa5b88d6-62aa-1a6f-4658-4b5c56eb814c.png">

<img width="706" alt="７.png" src="https://qiita-image-store.s3.amazonaws.com/0/130097/eb8e2f7e-8753-2c18-541c-2a6f4b2237d1.png">

<img width="585" alt="８.png" src="https://qiita-image-store.s3.amazonaws.com/0/130097/909bb61c-1b4a-6319-4d21-5049e16d9f9f.png">

Web App nameとApp Service planの項目で新しく任意の名前を決める
<img width="639" alt="９.png" src="https://qiita-image-store.s3.amazonaws.com/0/130097/f9868eab-20f5-7e8d-395f-ffcbf99634bc.png">

ここは確認のみ！　特に変更なければ発行
<img width="705" alt="１０.png" src="https://qiita-image-store.s3.amazonaws.com/0/130097/f6637ec7-e932-e68d-97cf-ea8acd8cdac8.png">

最後にAzure上に作成したアプリを確認します。
【App Service】▶︎【APP名】▶︎【概要】
URLをクリックすると開きます！
![１１.png](https://qiita-image-store.s3.amazonaws.com/0/130097/f27b2caa-55b4-e72f-e6c5-4d8a8a4dc2be.png)
2016-11-09 WRF > GFS next major version > num_metgrid_levelsが27層から32層に変更 > 2016年5月17日以降のデータ

```txt:動作環境
Xeon E5-2620 v4 (8コア) x 2
32GB RAM
CentOS 6.8 (64bit)
openmpi-1.8.x86_64 とその-devel
mpich.x86_64 3.1-5.el6とその-devel
gcc version 4.4.7 (とgfortran)
NCAR Command Language Version 6.3.0
```

WRF(Weather Research and Forecasting Model)関連。

WRFにて処理をしようとした時に、./real.exe実行時に以下のようなエラーが出た。

```
-------------- FATAL CALLED ---------------
FATAL CALLED FROM FILE:  <stdin>  LINE:     849
 input_wrf.F: SIZE MISMATCH:  namelist ide,jde,num_metgrid_levels=          85          64          27 ; input data ide,jde,num_metgrid_levels=          85          64          32
-------------------------------------------
--------------------------------------------------------------------------
MPI_ABORT was invoked on rank 0 in communicator MPI_COMM_WORLD 
with errorcode 1.

NOTE: invoking MPI_ABORT causes Open MPI to kill all MPI processes.
You may or may not see output from other processes, depending on
exactly when Open MPI kills them.
--------------------------------------------------------------------------
```

上記のエラーにてnum_metgrid_levelsの値が27と32というMISMATCHが発生している。

関連しそうな情報は以下のようだ。
http://www.wrfems.info/viewtopic.php?t=1030
> Major improvements include:
...
> Preliminary date for the upgrade becoming operational is May, 17th 2016.

GFSのバージョンアップでnum_metgrid_levelsが変更になったようだ。
変更データは2016年5月17日以降のデータなのだろう。

### 対処

namelist.inputの以下の設定を変更する。

```txt:変更前
num_metgrid_levels = 27
```

```txt:変更後
num_metgrid_levels = 32
```
Androidの音量を最大にする

参考: http://stackoverflow.com/questions/15670524/how-to-turn-the-volume-to-max-programmatically-on-android

[AudioManager.setStreamVolume](https://developer.android.com/reference/android/media/AudioManager.html#setStreamVolume(int, int, int))で音量を操作できます。音楽再生のストリームの音量を最大にする処理は、以下のコードで実現できます。

```java
AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
am.setStreamVolume(AudioManager.STREAM_MUSIC, am.getStreamMaxVolume(AudioManager.STREAM_MUSIC), 0);
```
css animation まとめ


何となく毎回コピペで済ましていたcss animationを整理する


`animation`プロパティは、下記のプロパティをまとめて指定する。

* `animation-name`
* `animation-duration `
* `animation-timing-function `
* `animation-delay `
* `animation-iteration-count `
* `animation-direction `

## `animation-name`

キーフレームでアニメーションを指定する。

```
animation-name: anime01;

@keyframes anime01 {
	0% {
		width: 50px;
		height: 50px;
	}
	100% {
		width: 200px;
		height: 50px;
	}
}

```

## `animation-duration `

アニメーション1回分の長さを秒数で指定


## `animation-timing-function`

イージングを指定

```
* ease
* linear
* ease-in
* ease-out
* ease-in-out
```

## `animation-delay `

アニメーションがいつ始まるか。
`-Xs`の値にすると、X秒前からアニメーションが始まったように実行される。

## `animation-iteration-count`

アニメーションの繰り返し回数を指定する。

```
infinite: 無限に再生を繰り返す

数値: 再生回数（初期値 1 ）
```

## `animation-direction `

アニメーションを交互に反転再生させるかどうかを指定する

```
normal: 一定方向で繰り返す 初期値

alternate: 偶数回目のアニメーションで逆方向になるように繰り返す（行ったり来たりする）
```
PHPでちょいちょいコメントを出しつつ、一番下にスクロールする方法

ツールの確認用とかで、使います。

```:php
function mes($str){
    static $time0 = 0;
    var_dump((time()-$time0).' [sec]', $str);
    echo "\n<script>document.body.scrollTop = document.body.scrollHeight</script>\n";
    @ob_flush();
    @flush();
    $time0 = time();
}
```
Windowsのバッチファイルでファイル名に!(感嘆符)があるときの処理

# やりたいこと

Windowsのバッチファイルで、ファイルを開いて中を読むという処理をしたかった。

# 困ったこと

ファイル名(あるいはファイルのパス)に!(エクスクラメーションマーク、感嘆符、ビックリマーク)があると「ファイルが存在しません」になってしまう。

# 調べたこと

「バッチファイル ファイル名 ビックリマーク」などのワードで検索。

[バッチでビックリマーク｜ＳＥばしり](http://ameblo.jp/ahiko13/entry-10730369982.html)

を見つけて、

>調べてみると、バッチ内の変数扱いとして、展開してから実行する遅延のやつがいる。
こいつの予約文字としてエクスクラメーションをつかう。
今回対象のファイル名にビックリマークがあるためイレギュラーな動きになっていた。

とあって、続いて


[ファイル名から感嘆符\(エクスクラメーション\)を取り除くバッチファイル\.\.\. \- Yahoo\!知恵袋](http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10145375615)

で解決。

# 実験してみた

バッチファイルのコード

```
@echo off
pushd %0\..

set filename=ファイル名!!!


::遅延環境変数 ON -> 変数アクセスに!を使うので!が予約語になる
setlocal enabledelayedexpansion
echo ■1: %filename%

::遅延環境変数 OFF -> !が予約語では無くなる
setlocal disabledelayedexpansion
echo ■2: %filename%

:: ONにして遅延環境変数として見たらどうなるか
setlocal enabledelayedexpansion
echo ■3: !filename!

:: OFFにして遅延環境変数として見たらどうなるか
setlocal disabledelayedexpansion
echo ■4: !filename!


pause
exit
```


実行結果

```
■1: ファイル名
■2: ファイル名!!!
■3: ファイル名!!!
■4: !filename!
```


私が困ったのは■1のパターンだったから。
psコマンドのインストール方法

# amazonlinuxのコンテナを使おうとしたら軽量を極めすぎててpsコマンドがなかったのでそのインストール方法
普段psをインストールしようと思うことがないのでちょっと手間取りました

## install (CentOS6, AmazonLinux)
- たぶんcentos6系は共通

```
# yum -y install procps
```

- 確認

```
# rpm -q procps 
procps-3.2.8-30.14.amzn1.x86_64
```

## 入るコマンドたち
- ps
- top
- vmstat
- w
- watch
- kill
- free
- slabtop
- skill
- free
- pgrep
- pkill
- snice
- tload
- pwdx
- pmap
- uptime
- sysctl

## install (CentOS7, AmazonLinux2)

インストール

```
# yum install procps-ng
```

確認

```
# rpm -q procps-ng
procps-ng-3.3.10-5.el7_2.x86_64
```

## 入るコマンドたち
- ps
- top
- vmstat
- w
- watch
- kill
- free
- slabtop
- skill
- free
- pgrep
- pkill
- snice
- tload
- pwdx
- pmap
- uptime
- sysctl


以下dockerの話。
## imageとして保存する場合

```
# docker ps -a
CONTAINER ID        IMAGE                                                                  COMMAND             CREATED             STATUS                          PORTS               NAMES
b0a8823662b0        999.dkr.ecr.ap-northeast-1.amazonaws.com/amazonlinux:latest   "/bin/bash"         About an hour ago   Exited (0) About a minute ago                       dreamy_shirley

# docker commit -m "installed ps" b0 your-amazonlinux:0.1
sha256:2b0a3137be89840674cde9cf13cbe4c0813d3245db94f87b2f369ca228315919

# docker images
REPOSITORY                                                      TAG                 IMAGE ID            CREATED             SIZE
your-amazonlinux                                               0.1                 2b0a3137be89        3 seconds ago       440.7 MB
999.dkr.ecr.ap-northeast-1.amazonaws.com/amazonlinux   latest              feee9aea7094        11 days ago         328.3 MB
centos                                                          6                   f07f6ca555a5        9 weeks ago         194.6 MB

```
vim: show last commands

MacVim（vimでも同じはず）を使っていて事あることに`:hogehoge`をやって操作するのが面倒で「前回使ったコマンドくらいterminalみたいにuparrowで出せないかな」って思ってたらありました。ごめんなさい。vim様。僕のが無知でした。

![vim_showlastcommands.gif](https://qiita-image-store.s3.amazonaws.com/0/87666/2f1e76cc-a409-0da1-74e3-53c583f65679.gif)


やりかたは単純で`:[up-arrow]`です。基本的には`:`を使った後はterminalと同じです。

（追記）
shiracamus様より便利なコマンドを教授いただきました。
`q:`と`q/`でコマンド履歴を便利に出せます。

`q:`でコマンド一覧を表示
![vimmer1.gif](https://qiita-image-store.s3.amazonaws.com/0/87666/9abaec1c-cf57-8e5a-9a96-d07b5ba7798e.gif)

`q/`で検索したワードの履歴を見れる
![vimmer2.gif](https://qiita-image-store.s3.amazonaws.com/0/87666/2922e919-3c22-1e96-bddd-28ef67da58f6.gif)


#参考にしたリンク
- [Vim “show my last command” command?](http://stackoverflow.com/questions/8928070/vim-show-my-last-command-command)
Googleカスタム検索のサムネイル画像サイズ可変機能を実装する

jQueryでとても簡単に作れます

### 何がしたいか

Google Custom Search / Google Site Search では、検索結果にサムネイル画像を表示することができる
（https://cse.google.co.jp で、検索エンジンの編集 > デザイン > サムネイル でオンにすればOK）

表示される画像の指定方法はまあググってもらうとして、
初期状態だとサムネイル画像のサイズが62px固定となかなか小さいので、
ボタン「小」を押すと62px、ボタン「中」を押すと93px（1.5倍）、ボタン「大」を押すと124px（2倍）で表示されるようにします。

### 実装

```html
<style type="text/css">
.gsc-thumbnail .gs-web-image-box {
	width: auto;
}

.gsc-thumbnail .gs-web-image-box img.gs-image {
	max-width: initial;
	max-height: initial;
	width: 62px;
}
</style>

<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script type="text/javascript">
$(function(){
	$('#img_s').click(function(){
		$('img.gs-image').width(62);
		$('.img_size').removeClass('active');
		$(this).addClass('active');
	});
	$('#img_m').click(function(){
		$('img.gs-image').width(93);
		$('.img_size').removeClass('active');
		$(this).addClass('active');
	});
	$('#img_l').click(function(){
		$('img.gs-image').width(124);
		$('.img_size').removeClass('active');
		$(this).addClass('active');
	});
});
</script>

<a href="#" id="img_s" class="img_size active">小</a>
<a href="#" id="img_m" class="img_size">中</a>
<a href="#" id="img_l" class="img_size">大</a>
```

### 結果

![2016-11-09_162342.png](https://qiita-image-store.s3.amazonaws.com/0/130352/ee337f2f-5e86-b820-967c-5f36ab798383.png)
![2016-11-09_162358.png](https://qiita-image-store.s3.amazonaws.com/0/130352/3b4e5efc-41bb-8277-1871-ba601814841e.png)
![2016-11-09_162414.png](https://qiita-image-store.s3.amazonaws.com/0/130352/cf88f2f4-2355-b302-ae41-18b43fae2645.png)
ローカル環境でのFactom（Factroid）の残高確認+送金方法

# Facomの残高確認方法

たまにローカルのFactroidが問題ないか確認するのですが、
確認の度にやり方を完全に忘れている上に、
エラーに悩まされるので手順化します。

(OSはMac OS Sierra)

##　手順

１） Applications/FactomAppsに移動

２） ３つのプログラムを以下の順で立ち上げる

```
① ./factomd

② ./fctwallet

③ ./factom-cli generateaddress fct <accountName> "12 phrases"

((注意事項))
　"./factomd"ではなくて、"factomd"と打っても起動できない

```

３）　２でアドレスが出力されます。残高は「[Factom　Explorer](http://explorer.factom.org/)」にてアドレスで検索をすると出力されます。


#Factroidの送金方法

例）
factom-cli sendfct FA1zT4aFpEvcnPqPCigB3fvGu4Q4mTXY22iiuV69DqE1pNhdF2MC FA28PitepUziaDrLeVAcioNfzHdBc7mvyJJHvag2vyhWm7JR3t8S 1.234
linux / rsync > ローカルバックアップ > 3つのプロセスが立ち上がる

```txt:動作環境
Xeon E5-2620 v4 (8コア) x 2
32GB RAM
CentOS 6.8 (64bit)
openmpi-1.8.x86_64 とその-devel
mpich.x86_64 3.1-5.el6とその-devel
gcc version 4.4.7 (とgfortran)
NCAR Command Language Version 6.3.0
2台のHDD (1TB x 2)
```

計算処理をした結果の定期バックアップを取ろうとしていた。
同じPC内でバックアップするようにrsyncを使うbashスクリプトを作成し、それをcronで設定して動かしていた。

バックアップが始まってからps aux | grep rsyncを見ると、3つのrsyncプロセスが動いていた。
crontabの設定ミスかと思ったが、複数のrsyncプロセスが動くのが普通のようだ。
ずっと昔にrsyncを使っていた時の記憶が薄れている。

http://serverfault.com/questions/547165/why-does-rsync-spawn-multiple-processes-for-me
3way handshake

TCPはヘッダ情報の中に、6つのフラグ情報を持っている

|URG|ACK|PSH|RST|SYN|FIN|
|:-:|:-:|:-:|:-:|:-:|:-:|
|0|1|0|0|1|0|

それぞれ意味は

|Flg|Mean|
|:-:|:--|
|URG| Urgent  緊急フラグ|
|ACK|Acknowledgement(確認応答)。相手からのデータを受け取った証として、確認応答番号と共に送られる|
|PSH| Push 受信したデータを即時上位アプリへ送信する
|RST|Reset コネクション強制終了|
|SYN|Synchronize コネクション確立要求|
|FIN|Finish コネクション終了|

#### 3Way Handshake

1.ClientA(以下A)がServerB(以下B)と通信したい

2.AはBに、
   SYN=1, ACK=0, SEQNo=111を送る
   「BとシーケンスNo.111から始まる通信がしたい」

3.Bは受け取ったシーケンスNoに1を足して確認応答番号(ACKNo)とし、承認フラグ(ACK)を1にして送る。(これでA→B間の通信がうまくいっていることが保証された）
さらに、自分もAと通信したい旨を伝えるため、SYN=1に、SEQNo=300に設定した信号を送る
SYN=1,ACK=1,SEQNo=300
「Aからの通信はちゃんと届いています。こちらのSEQNoも確認してください」

4.AはBに、SYN=0,ACK=1,ACKNo=301を送る
「Bからの通信確認しました」

以上でハンドシェイク終了です。
コードを改善する<br>3つの方法

コード改善 meetup #2  
http://kaizen.connpass.com/event/42118/

の発表資料。

---

## 自己紹介

名前: 正徳 巧
会社: 株式会社grooves
言語: Ruby
github: [sinsoku](https://github.com/sinsoku)
twitter: [@sinsoku_listy](https://twitter.com/sinsoku_listy)

---

https://jobs.forkwell.com/

![jobs.png](https://qiita-image-store.s3.amazonaws.com/0/30459/256462b2-6e92-721d-5dcb-f6deca2499cc.png)

---

## コードを改善する<br>3つの方法

---

## コードを改善する3つの方法

### 1. :hocho: コードを削る
### 2. :pill: コードを直す
### 3. :cop: 増殖を防ぐ

---

# :hocho: コードを削る

---

## よくありそうな業務コード

- 条件分岐が多い
- 似たような処理が複数箇所にある
- コピペっぽいけど微妙に違う
- 既存の仕様が謎

---

# :broken_heart: ココロ、オレル

---

## 未使用メソッドを探す

```
$ git grep -n '\.method_name'
$ git grep -n 'def method_name'
```

未使用メソッドは基本的に **全削除** する。

---

## 全削除に対する不安


- いつか使うかも...
- disabled? の対象性のため enabled? も...
- どこかで使っているかも...

---

## 全削除に対する不安

- いつか使うかも...
- disabled? の対象性のため enabled? も...

#### => **使 い ま せ ん**

- どこかで使っているかも...

#### => 問題が起きても **Git で戻せます**

---

# :pill: コードを直す

---

## [ボーイスカウト・ルール](http://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/%E3%83%9C%E3%83%BC%E3%82%A4%E3%82%B9%E3%82%AB%E3%82%A6%E3%83%88%E3%83%BB%E3%83%AB%E3%83%BC%E3%83%AB)

ボーイスカウトには大切なルールがあります。それは、「来た時よりも美しく」です。たとえ自分が来た時にキャンプ場が汚くなっていたとしても、そしてたとえ汚したのが自分でなかったとしても、綺麗にしてからその場を去る、というルールです。

---

## 小さな改善

- 変数、メソッド名を適切に直す
- メソッドを共通化する
- 不要コードを削除する
- 説明変数を導入する
- メソッドを private に変更する

---

## プルリク例

![pr-1.png](https://qiita-image-store.s3.amazonaws.com/0/30459/f44dc4f1-a421-fe6c-3e5d-a25a5e3b4c0a.png)

---

# :cop: 増殖を防ぐ

---

## 技術的負債は複利で増える

![twitter-01.png](https://qiita-image-store.s3.amazonaws.com/0/30459/b4c00fd3-e077-cc88-cfc2-6bb247e0119a.png)

---

# :poop: × メンバー数 = <br> :poop: :poop: :poop: :poop: :poop:

---

## [RuboCop](https://github.com/bbatsov/rubocop) でチェック

![rubo-logo-horizontal.png](https://qiita-image-store.s3.amazonaws.com/0/30459/ffa5a70b-acc4-a380-225b-6f523a9d4846.png)

---

## git-grep で雑にチェック

```rb:spec/meta/avoid_xss_in_mail_spec.rb
require 'spec_helper'

describe 'Avoid XSS in mail' do
  it 'not include "<%==" in html templates' do
    files = git_grep '<%==', 'app/views/*_mailer/*.html.erb'
    expect(files).to be_empty
  end
end
```

---

## git-grep で雑にチェック

```rb:spec/support/git_grep.rb
module GitGrep
  def git_grep(pattern, *path)
    cmd = "git grep --name-only '#{pattern}'"
    cmd = "#{cmd} -- #{path.join(' ')}" unless path.empty?
    `#{cmd}`.split("\n")
  end
end

RSpec.configure do |config|
  config.include GitGrep
end
```

---

# まとめ

---

## まとめ

- :skull: 普通に戦うと死ぬ
  - まずコードを削り、弱体化させる
- :timer: リファクタリングの工数は取りづらい
  - 機能追加と一緒に、少しずつ直す
- :sunglasses: 増殖しないような仕組みが必要
  - ペアプロ、レビューなどでもok

---

# ご清聴ありがとうございます
ディレクトリの移動

ディレクトリ移動の練習
---
はじめに，今のディレクトリを表示してみる．

```R
> getwd()
[1] "/Users/user-name"
```

つぎに，デスクトップの"Visualization"ディレクトリに移動してみる．

```R
> setwd('/Users/user-name/Desktop/Visualization/')
> getwd()
[1] "/Users/user-name/Desktop/Visualization"
```

これは，絶対パスで移動した場合で，すでにDesktopにいる場合は，相対パスで指定して

```R
> setwd('Visualization')
> getwd()
[1] "/Users/user-name/Desktop/Visualization"
```

で移動できる．また，

```R
> setwd('./Visualization')
> getwd()
[1] "/Users/user-name/Desktop/Visualization"
```
という書き方もある．

ちなみに，一つ上の階層に上がる（相対パス）ときは，

```R
> setwd('..')
> getwd()
[1] "/Users/user-name/Desktop"
```
となる．
個人的wordpressメモ：ページャー

## シングルページでページャーを表示

```single-hoge.php
<?php $previous_post = get_previous_post();
if (!empty( $previous_post )): ?>
<a href="<?php echo get_permalink( $previous_post->ID ); ?>">前へ</a>
<?php endif; ?>

<?php $next_post = get_next_post();
if (!empty( $next_post )): ?>
<a href="<?php echo get_permalink( $next_post->ID ); ?>">次へ</a>
<?php endif; ?>
```

## アーカイブページでページャーを表示

```archive-hoge.php
<?php
$previous_post = get_previous_posts_link();
if (!empty( $previous_post )): ?>
<a href="<?php echo get_previous_posts_page_link(); ?>">前へ</a>
<?php endif; ?>

<?php
$next_post = get_next_posts_link();
if (!empty( $next_post )): ?>
<a href="<?php echo get_next_posts_page_link(); ?>">次へ</a>
<?php endif; ?>
```

***

get_previous_**post**()、get_next_**post**()はシングルページ、
get_previous_**posts**_link()、get_next_**posts**_linkはアーカイブページ
CakePHP 2系のFormヘルパーの小ネタ(日本語のソート-漢字)

かなりざっくり書きますが少し手を止めて考えた部分なので記録しておきます。

#### 日本語「**漢字**」のソートができない
人の名前とかで昇順降順したい時にごちゃごちゃな並び順になって少し困ったけど解決できました。  
**(解決策)** フリガナを入力させて裏側でデータを受け取って、対象の項目のフリガナでソートをかける。
カタカナはプログラム上ではアイウエオ順に認識されるという発見でした。

***
#### フリガナないやつらも並び替え上手くやりたい
下記のような感じで$monthとかの配列の中にキーを指定してやると、キーを軸にソートをかけられるので何かとうまくいきます。

```index.ctp
~
<td>
    <?= $month[$hoge['huga']['month_code']] ;?>
</td>
~
```

月とかじゃなくても、○○ステータスとかってある程度固定の名称で作ると思うので、マスタ?の配列作ってしまったほうが何かと楽におさまりそうです。
アソシエーションした方が楽ならマスタテーブルのキーをソートしてあげれば上手くいくはず。


開発始めてから日本語ファイルのダウンロード処理が上手く行かなったり、日本語がめんどくさいと感じることが増えたなー。使いやすさありきでは避けて通れないからより良い方法を考えよう。。
ASP.NET マイグレーションが失敗した時


古いVB出できたプロジェクトを
Visual Studio2015で開こうとしたが、マイグレーションに失敗した。

メッセージ
「To access Web sites on the local IIS Web server, you must run Visual Studio under an Administrator account.」

ここに解決が書いてあった
http://stackoverflow.com/questions/12159044/you-must-run-visual-studio-in-the-context-of-an-administrator

VSLauncher.exeを管理者権限で実行する

右クリックで管理者権限で実行
```shell-session
C:\Program Files (x86)\Common Files\Microsoft shared\MSEnv\VSLauncher.exe
```

その上でマイグレーションすると成功した。

更に起動しなかった
IISマネージャーで開始したら動いた

IISマネージャー使いたくないし、管理権限で動かしたくない場合
こんなエラーがでたら
「Unable to access the IIS metabase. 」
```shell-session
icacls "C:\Windows\System32\inetsrv\config" /t /grant "IIS AppPool\DefaultAppPool":(R)
```

以下のファイル編集
*.vbproj
```xml
<UseIIS>False</UseIIS>
```
【Docker】Railsとmysqlをcomposeで動かすテンプレート

# 【Docker】Railsとmysqlをcomposeで動かすテンプレート

## 他テンプレート
+ [mysql](http://qiita.com/okamu_/items/de46c35a9db94a5685a5)
+ [(予定)mysql レプリケーション]()
+ [rails](http://qiita.com/okamu_/items/52e4cac9d10ff3440709)
+ [**docker-compose rails mysql**](http://qiita.com/okamu_/items/748b6e9cb6ef554dc311)
+ [(予定)docker-compose rails mysql redis]()

## やりたいこと
+ mysql と rails　それぞれのコンテナーをdocker-composeがオーケストレーションして管理してくれるようにする

## 背景
+ 2年ほど前からdockerでサービスを動かしてきて、テンプレートシリーズを作りたいと思ってた

## 前提条件
+ 任意のgitリポジトリにrailsプロジェクトがある

## 使いどころ
+ ローカルのお試し開発環境で試すもよし
+ 本番でも有効なのかなと

## 試してみる
+ [https://github.com/vvdocker/compose-rails-mysql](https://github.com/vvdocker/compose-rails-mysql) をクローンしてくる
![スクリーンショット 2016-11-09 15.39.51.png](https://qiita-image-store.s3.amazonaws.com/0/62822/0ce329cc-afbf-a40f-7045-bfcab351c4fb.png)


### docker-compose.yml
+ いい感じに書き換える
+ もし、公式イメージをデフォのまま使いたいなら、imageを公式にしてpasswordとか設定すればいい
+ データの永続化はvolume-driverをコメントイン


```
#docker-compose.yml

app:
#  image: my-rails
  build: rails/
  environment:
    RAILS_ENV: development
  ports:
    - '3000:3000'
  volumes:
    - .:/usr/src/project_name
#  volume_driver: convoy-gluster
  command:
    - bash
    - -c
    - RAILS_ENV=development bundle exec rails s -p 3000 -b '0.0.0.0'
  links:
    - db:db
db:
#  image: mysql
  build: mysql/
#  stdin_open: true
#  volumes_from:
#    - data-mysql
  ports:
    - "3306:3306"
  environment:
#    MYSQL_ALLOW_EMPTY_PASSWORD: 'true'
#    MYSQL_ROOT_PASSWORD: password
#    MYSQL_DATABASE: test_db
#    MYSQL_USER: user
```

+ ```docker-compose up```

## その他追加事項
+ redis　compose周りのテンプレートを追加予定
+ 追加予定まわりはこちらを参考に[https://github.com/vvdocker?tab=repositories](https://github.com/vvdocker?tab=repositories)
FuelPHPのObserver_Typingでjsonをarrayに変換する


検索しても出てこなかったのでメモ。
バージョン：FuelPHP 1.8

Observerについてはこちらを参考にしました。
http://qiita.com/moroya/items/80f1746909aaf2fc6867

data_typeを指定すると連想配列をjson文字列に変化してDBに保存してくれるが、DBから取り出すとsrdClassに変換されてしまう。
この挙動はPHPのjson_decodeのデフォルト挙動と同じです。
http://php.net/manual/ja/function.json-decode.php
`assoc = true`を指定すれば連想配列に変換してくれます。

FuelPHPでも`json_assoc => true`を指定することで同様の挙動になりました。

```PHP
'colname' => [
  'data_type'  => 'json',
  'json_assoc' => true,
],
```

`fuel/packages/orm/classes/observer/typing.php`の該当部分

```PHP
  /**
   * Decodes the JSON
   *
   * @param   string  value
   *
   * @return  mixed
   */
  public static function type_json_decode($var, $settings)
  {
    $assoc = false;
    if (array_key_exists('json_assoc', $settings))
    {
      $assoc = (bool) $settings['json_assoc'];
    }
    return json_decode($var, $assoc);
  }
```
`json_assoc`という名前でオプションを投げればいいと分かりました。
調べても分からなかったらソースを見るのが一番ですね。
Slackが時々フリーズする問題

Slackの通知が来てSlackのウィンドウに切り替えると固まって動かなくなる事象が頻繁に起きていました。

# 環境
Windows10 64bit
Slack 2.2.1

# 調査
C:\Users\\[User]\AppData\Roaming\Slack\logsにwebapp-3.logというファイルがあるので、確認してみると以下のようなログが。
>2016-11-09T06:17:12.022Z - info: Setting current spellchecker to ja-JP, requested language was ja-JP
>2016-11-09T06:17:12.022Z - info: Creating node-spellchecker instance
>2016-11-09T06:17:12.037Z - info: Actually installing spell check provider to Electron
>2016-11-09T06:17:25.241Z - info: Unloading spellchecker
>2016-11-09T06:17:26.507Z - info: Restoring spellchecker
>2016-11-09T06:17:26.510Z - info: Loading dictionary for language ja-JP
>2016-11-09T06:17:26.510Z - info: Returning local copy: C:\Users\[User]\AppData\Roaming\Slack\dictionaries\ja-JP.bdic
>2016-11-09T06:17:26.514Z - info: Setting current spellchecker to ja-JP, requested language was ja-JP
>2016-11-09T06:17:26.514Z - info: Creating node-spellchecker instance
>2016-11-09T06:17:26.541Z - info: Actually installing spell check provider to Electron
>2016-11-09T06:17:36.428Z - info: Unloading spellchecker
>2016-11-09T06:17:42.746Z - info: Restoring spellchecker
>2016-11-09T06:17:42.747Z - info: Loading dictionary for language ja-JP
>2016-11-09T06:17:42.748Z - info: Returning local copy: C:\Users\[User]\AppData\Roaming\Slack\dictionaries\ja-JP.bdic
>2016-11-09T06:17:42.752Z - info: Setting current spellchecker to ja-JP, requested language was ja-JP
>2016-11-09T06:17:42.752Z - info: Creating node-spellchecker instance
>2016-11-09T06:17:42.763Z - info: Actually installing spell check provider to Electron
>2016-11-09T06:17:48.514Z - info: Unloading spellchecker
>2016-11-09T06:17:49.421Z - info: Restoring spellchecker
>2016-11-09T06:17:49.423Z - info: Loading dictionary for language ja-JP
>2016-11-09T06:17:49.423Z - info: Returning local copy: C:\Users\[User]\AppData\Roaming\Slack\dictionaries\ja-JP.bdic
>2016-11-09T06:17:49.426Z - info: Setting current spellchecker to ja-JP, requested language was ja-JP
>2016-11-09T06:17:49.426Z - info: Creating node-spellchecker instance
>2016-11-09T06:17:49.435Z - info: Actually installing spell check provider to Electron
>2016-11-09T06:17:50.975Z - info: Unloading spellchecker

なんか辞書関係が怪しそうですね。

# おそらく原因
C:\Users\\[User]\AppData\Roaming\Slack\dictionaries
上記ディレクトリのja-JP.bdicが正常にDLできていない為ではないかと。
ja-JP.bdicを開いてみるとgoogleの404のページがDLされていました。
ちなみにja-JP.bdicを検索しても見つかりませんでした。

# 解決方法
~~いつチェックを入れたのか記憶がありませんが、Preference→Advanced→Enable spellcheck~のチェックを**外す**。~~
~~きちんと確認していませんが恐らくこれで解決したはず。~~

# 追記
これだけでは解決していませんでした。
引き続き調べています。

# 再追記
Preference→Advanced→Debugging Options→Disable Local Storageにチェックを入れたら改善したような気がします。

おわり
linux / HDD >msftres Flags > Microsoft reserved

```txt:動作環境
Xeon E5-2620 v4 (8コア) x 2
32GB RAM
CentOS 6.8 (64bit)
openmpi-1.8.x86_64 とその-devel
mpich.x86_64 3.1-5.el6とその-devel
gcc version 4.4.7 (とgfortran)
NCAR Command Language Version 6.3.0
2台のHDD (1TB x 2)
```

### 状況

Windows 10搭載PCを購入。
CentOS 6.8をインストール。
Windowsの方は使用せず。

2台目のHDDを使用しようとしている。

GPartedで見ると以下のように表示された。

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/1f4559ad-7a34-acb1-9a57-560e1a23fc60.png)

Flagsがmsftresというパーティションがあり、930GBのパーティションがある。

msftresについては以下のページを見つけた。
http://askubuntu.com/questions/371487/is-it-safe-to-format-msftres-msftdata-and-hidden-partitions
> msftres -- This flag means "Microsoft reserved." It's used as "scratch space" by certain Microsoft tools, so it should not be deleted or re-purposed unless you're deleting Windows. See the Wikipedia entry on this partition type for more information.

このPCではWindowsは使用しないので、消してもいいと考えている。
YouTubeのvqパラメータが言うこときいてくれない時




###言う事きいてくなかった内容 :weary: 
YoutubeのiframeAPIで動画を再生させて、画質を指定したうえでループさせる処理をした時にハマった
動画画質を指定【 ex) vq:'hd720' 】したのに自動（画質）再生されてしまう・・・:angry: 
なぜか２回め以降の再生は、指定どおりの画質で再生される:question: 
という変な現象に悩まされた。。
Win10（Ege,IE,chrom,ff）、MacSierra（Safari,chrom,ff）で言うこときかない。。
***

###解決法 :frog: 
2回目以降の再生は、指定どおり再生されるんで、start:開始時間をフレームより後ろに設定して1回再生されたことにして、すり抜けさせた。


***
　
:+1::+1: 以下の方法で試してみるとうまくいったよ
 
#<i class="fa fa-code"></i>コード

必要最低限のコードだけ掲載してます。

```code:html
<html>
<head>
<script src="//www.youtube.com/iframe_api"></script>
<script>
document.addEventListener('DOMContentLoaded', function(){

  function onYouTubeIframeAPIReady() {
      ytPlayer = new YT.Player(
          'player',
          {
              videoId: 'YouTubeのID', //【A】YouTubeのID
              playerVars: {
                  loop: 1,
                  vq: 'hd720', // HD720での再生を強制
                  playlist: 'YouTubeのID', //【A】をプレイリストにいれてループ再生させる
                  controls: 0,
                  autoplay: 1,
                  showinfo: 0,
                  start: 100 // 動画の再生時間より多めに設定し、初回の動画を飛ばす
              }
          }
      );
  }
}, false);
</script>
</head>
<body>
<div id="player"></div>
</body>
</html>
```

##<i class="fa fa-cube"></i>最後にデバックする
動画上を右クリックして `デバック情報をコピー` すると、いろいろな情報がクリップされます。
適当にメモ帳にでも貼り付けて、下記の文字情報を探してみる。
debug_playbackQuality":"この中に指定した画質が入ってればOK"
で確認作業は終わり :100:
API GatewayからLambdaFunction呼び出し時のHTTP GETパラメータ

AWSのAPI Gatewayから、統合しているlambda関数を呼び出す際に、HTTP GETパラメータを渡す方法がわからなかったので調べてみた。

結論：
API GatewayからのGETパラメータをlambda関数から参照する際は、

``queryStringParameters``

を使う。

例）
https://xxxxxx.execute-api.ap-northeast-1.amazonaws.com/stage?foo=bar
のリクエストパラメータをlambdaで利用する場合、lambda関数(node.js)内では

``event.queryStringParameters.foo``

で参照できる。

ほか、API Gatewayで統合したLambda関数ではevent変数で以下の項目が利用できる模様。

```
{
    "resource": "/",
    "path": "/",
    "httpMethod": "GET",
    "headers": null,
    "queryStringParameters": {
        "foo": "bar"
    },
    "pathParameters": null,
    "stageVariables": null,
    "requestContext": {
        "accountId": "xxxxxxxxxxxx",
        "resourceId": "xxxxxxxxxxx",
        "stage": "test-invoke-stage",
        "requestId": "test-invoke-request",
        "identity": {
            "cognitoIdentityPoolId": null,
            "accountId": "xxxxxxxxxxxx",
            "cognitoIdentityId": null,
            "caller": "xxxxxxxxxxxxxxx",
            "apiKey": "test-invoke-api-key",
            "sourceIp": "test-invoke-source-ip",
            "accessKey": "xxxxxxxxxxxxxxxx",
            "cognitoAuthenticationType": null,
            "cognitoAuthenticationProvider": null,
            "userArn": "arn:aws:iam::xxxxxxx:user/xxxxxxxxx",
            "userAgent": "Apache-HttpClient/4.5.x (Java/1.8.0_102)",
            "user": "xxxxxxxxxxxxxxxxxx"
        },
        "resourcePath": "/",
        "httpMethod": "GET",
        "apiId": "xxxxxxxxx"
    },
    "body": null,
    "isBase64Encoded": false
}
```
Google | 検索フォームにフォーカスを移すショートカットでスラッシュが入力されてしまう

# 問題

`/` で検索フォームにフォーカスを移せるはずが、一緒にスラッシュが入力されてしまう。

![image](https://qiita-image-store.s3.amazonaws.com/0/89618/b56aea77-60e6-47a0-5c4c-67c192b368da.png)

# 解決

何故だろうと思いながら放置していたが、どうやらスラッシュを入力しなくても良いことが分かった。
「いったん検索する」→「いきなり文字入力」で検索ワードを追加できる仕様に変わっていた。
ff
![image](https://qiita-image-store.s3.amazonaws.com/0/89618/6eba90ff-9af4-874a-7def-9aece971ff0f.png)

# 追記

- 英語設定でGoogleを使っているせいだった。日本語設定では今まで通り「スラッシュキー」で検索バーにフォーカスされた。

# 環境

- インスタント検索: オン
- GoogleChrome








<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
MacでWebStormを使ってTypeScript2.0でコーディングな環境

WebStormでTypeScriptやるぞ！と思ったら、WebStormのデフォルトが1.8だったのでちょっと設定を弄る必要がありました。

### 主な環境
- WebStorm 2016.2
- MacOSX 10.11.6
- npm 3.10.8 (homebrewで入れました


# TypeScriptバージョンを指定する

以下の設定画面を開く。
`Preferences -> Languages & Frameworks -> TypeScript`


![スクリーンショット 2016-11-09 14.30.09.png](https://qiita-image-store.s3.amazonaws.com/0/2129/45964795-983a-bae1-81ac-e7c3ae28cf5c.png)

`TypeScript version`あたりの`Edit...`ボタンを押す。

Custom directoryをチェックして以下のpathをコピペ

```
/usr/local/lib/node_modules/typescript/lib
```

![スクリーンショット 2016-11-09 14.28.24.png](https://qiita-image-store.s3.amazonaws.com/0/2129/c27c3d47-f1ef-aee3-e363-be627e640a91.png)


以上です！
Qiitaのフィードから特定ユーザーの投稿を非表示にするユーザースクリプト

# <i class="fa fa-cubes"></i> 概要

[Qiitaのフィードのコメント数ごとに背景色を追加するユーザースクリプト - Qiita]を改変して、記事リンクのURLでユーザーを特定し非表示にするスクリプトです。

# <i class="fa fa-cogs"></i> 動作検証環境

* Cyberfox 49
* greasemonkey

# <i class="fa fa-code"></i> コード

Gistスクリプトリンク<i class="fa fa-external-link"></i>[Qiita_user_filter_for_feed.user.js]

```js:Qiita_user_filter_for_feed.user.js

// ==UserScript==
// @name        Qiita user filter for feed
// @namespace   khsk
// @description フィードから特定ユーザーの投稿を非表示にする
// @include     http://qiita.com/
// @include     https://qiita.com/
// @include     http://qiita.com/items
// @include     https://qiita.com/items
// @include     http://qiita.com/stock
// @include     https://qiita.com/stock
// @include     http://qiita.com/mine
// @include     https://qiita.com/mine
// @version     1
// @grant       none
// ==/UserScript==


console.time('userfilter');

var NG_USERS = [
  '',
];

// 変更を監視する。追加分だけには対応しておらず、毎回全チェック。
var mo = new MutationObserver(function(data1, data2) {
  var posts = document.querySelectorAll('div.item-box-title > h1 > a');
  Array.prototype.forEach.call(posts,function(post){
    var user = post.href.match(/https?:\/\/qiita.com\/([^/]+)/)[1];
    if (NG_USERS.indexOf(user) != -1) {
      // えぇ…
      post.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.style.display = 'none';
    }
  });
});

var items = document.getElementsByClassName('col-sm-9')[0];
var options = {childList: true, subtree:true};
mo.observe(items, options);

console.timeEnd('userfilter');

```


# <i class="fa fa-twitter"></i> ひとりごと

(電球じゃない方の)炎上は好きですけど、それは対岸の火事だから野次馬しにいくわけで、火の粉がかかる範囲での争いはあんまり好みません。
Qiitaで見かけるということは、=プログラミング関係なので、少なからず火の粉が飛ぶわけで。
すると弱メンタルなためげんなりします。
普段は生息範囲[^2]が違うためフィードに流れてこないのですが、たまにかぶるとフィードに現れ、ユーザー名もアイコンも出ないので踏んでしまう。
開いて本文の既視感からまさかっとなっても時すでに遅し。

正論を言ってくれても世の誤りを指摘してくれても全然いいのですが[^1]、攻撃的すぎるとげんなりして、「その主張が本当に正しいならフォロワーが(もっと優しい口調で)たくさん出るだろう」と見切っちゃうことがあります。それでも受けた疲労感はなくなりませんが。

毛の壁？事件？とか存じないのですが、昔はもっと殺伐としていたのかな。
せめて視界内では笑いながら怒る人ぐらいの雰囲気で頼みたいものです。

「問題がある投稿を報告する」の攻撃的な内容ってどの程度なのかな。
コメントも含めていいのかな。


[Qiitaのフィードのコメント数ごとに背景色を追加するユーザースクリプト - Qiita]:http://qiita.com/khsk/items/ddec9a9eed62bebec67e

[Qiita_user_filter_for_feed.user.js]:https://gist.github.com/khsk/ba27ce37ee3d2bfd5da2331fcc797a26/raw/9dc82fadb48dfa5cb43a0ecf81077d2af6fc4fcc/Qiita_user_filter_for_feed.user.js

[^1]: 結局、自分ではどの主張が正しいかは判断できないレベルなのですが
[^2]: 投稿のタグとフォローしているタグ
sketch3 ことはじめ

#Sketch3そのもの
https://www.sketchapp.com/

ここから、まずダウンロード。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/134919/7b44f21f-ed44-65e3-3ea6-baf761ed3616.png)

トライアル版は、左側の"Download Free Trial"からダウンロード。
トライアル期間は、今のところ 2週間で、それを越えるとライセンスキーがないと使えなくなる。


年間、$99で利用可能。

※「Sketch 4から実質年額$99に」
つまり、いわゆるサブライセンス形態でなく、アップデート費用として。

・一年間無料で、アップデートしていくなら年額$99を払う。
or
・アップデートしないまま、今のSketchを使う（年額も払わなくて使い続けられるという形）
ライセンスの期限が切れても、アプリは使えるし、ライセンスの更新も必要ないということ。

しかし、現行バージョンをずっと使い続けるということは現実的にはないと思うので
結局払っていくスタンスになるかな、、



#ショートカット関連

初めてsketch3を使い始めた時に、
見て役立ったショートカットがいろいろとまとめてある。


"無駄な作業時間を節約！Sketchの便利なショートカットまとめ"
http://creive.me/archives/6576/





また、sketch3初心者用の
使い方に関してはコチラ。

"UIデザインの作成ツール！誰でも分かるSketchの使い方【初心者向け】"
http://techacademy.jp/magazine/8576
【Docker】 RailsをDockerで動かすテンプレート

# 【Docker】 RailsをDockerで動かすテンプレート

## 他テンプレート
+ [mysql](http://qiita.com/okamu_/items/de46c35a9db94a5685a5)
+ [(予定)mysql レプリケーション]()
+ [**rails**](http://qiita.com/okamu_/items/52e4cac9d10ff3440709)
+ [docker-compose rails mysql](http://qiita.com/okamu_/items/748b6e9cb6ef554dc311)
+ [(予定)docker-compose rails mysql redis]()

## 背景
+ 2年ほど前からdockerでサービスを動かしてきて、作りたいと思ってた

## 前提条件
+ 任意のgitリポジトリにrailsプロジェクトがある

## 使いどころ
+ ローカルのお試し開発環境で試すもよし

## 試してみる
+ [https://github.com/vvdocker/solo-rails](https://github.com/vvdocker/solo-rails)
![スクリーンショット 2016-11-09 13.39.55.png](https://qiita-image-store.s3.amazonaws.com/0/62822/544f0a6d-76f3-80f7-3c15-3374c6079a71.png)

### Dockerfile
```
FROM centos:7

# use utf-8
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8

# install common tools
RUN yum install -y git vim sudo tar wget
RUN yum install -y epel-release
RUN yum install -y gcc-c++ git glibc-headers libffi-devel libxml3 libxml2-devel libxslt libxslt-devel libyaml-devel make nodejs npm openssl-devel readline readline-devel sqlite-devel zlib zlib-devel

## Ruby
RUN cd /usr/local/src && \
  wget http://cache.ruby-lang.org/pub/ruby/2.2/ruby-2.2.5.tar.gz && \
  tar zxvf ruby-2.2.5.tar.gz && \
  cd ruby-2.2.5 && \
  ./configure --disable-install-doc && \
  make && \
  make install

RUN yum install -y patch
RUN gem update --system

# crontab
#RUN yum install -y crontabs
#RUN cp -p  /usr/share/zoneinfo/Japan /etc/localtime

RUN yum -y install mysql-server mysql-devel

# [edit] rails repository
RUN git clone https://~~~~.git

# [edit] work dir or no such Gemfile error!!!!
WORKDIR /server

RUN gem install bundler
RUN gem install nokogiri -- --use-system-libraries=true --with-xml2-include=/usr/include/libxml2/
RUN bundle config build.nokogiri --use-system-libraries

RUN bundle install --path vendor/bundle
RUN bundle config --global path 'vendor/bundle'

# environment
#ADD env /server/.env
#ADD database.yml config/database.yml

# server start
EXPOSE  3000
CMD ["rails", "server", "-b", "0.0.0.0"]

```

+ ``` docker build -t my-rails .```
+ ``` docker run -d -p 3000:3000 my-rails```

## その他追加事項
+ redis　compose周りのテンプレートを追加予定
+ 追加予定まわりはこちらを参考に[https://github.com/vvdocker?tab=repositories](https://github.com/vvdocker?tab=repositories)
（ちいと古いが）Rubyのlambdaリテラル「->」の由来

## 概要
かなり前のruby 1.9から導入されているlambdaリテラル「->」の由来
・案外知られてないんではないか？　
・こーゆーのがあると言語が覚えやすいのでは？
との思いで下記します。


## matzさんによる、rubyのラムダリテラル「->」の由来説明
https://youtu.be/oEkJvvGEtB4?t=16m17s

おそらくこんな英語

> Someone says "this won't see a lambda,
> you have to put the argument before the arrow
> like Hask i mean the C# does."
> 
> It really does remind you the lambda once you get.
> For example, I change the font, twist a bit,
> 
> here we go this is a lambda.
> Anyway perl 6 does the same syntax.

適当な訳

>「C#みたいに引数が矢印の前にこない文法でないと、ラムダに見えない」
というひともいましたが、
一度わかってもらえればこれは本当にラムダを思い出させる(リテラルです)。
たとえば、フォントを変えて、傾けると、、ラムダ「λ」だ！
Perl6もおなじ文法となっとります。



↓のコメント欄でも紹介されてました。
http://stackoverflow.com/a/25572560

##所感
・`->`を傾けると「λ」になると知ってると、無理にでも`->`で書こうという気になるので、とても気に入っている。
・Haskellもなんかリテラルがあるんかね？
CocoaPodsなどでiOSライブラリを使いたい時に見たサイト

ライブラリ探しの際に、いちいち困らないようないよう
URLも覚えておくための備忘録。


"iOS Library List 100+"
調べたiOSのオープンソースライブラリをリスト化してくれている。
http://smsurf.app-rox.com/iosl/

"CocoaPodsによる、外部ライブラリの利用と作成"
CocoaPodsの使い方がわかる。
http://dev.classmethod.jp/smartphone/iphone/cocoapods/
300打鍵以内でEV3RTをビルドする

# 前口上

ETロボコンでも使われている EV3RT ですが，TOPPERS プロジェクト(というか OSS)の製品にありがちなことに，開発環境の構築が面倒です。
やりたいことは EV3RT のアプリケーションの開発のはず。
環境の構築なんてしたくありませんよね? 楽をしましょう。

# 環境

Docker を使います。最近は Linux だけでなく Mac や Windows でも動くので，障壁は下がっていると思います。使えるようになっておけば，他の分野でも使えますし。

Docker を使うと，環境を完全に同一にできます。人数の多いチームでの開発をしたことのある方は，これが大きなメリットだと感じて頂けるかと思います。
継続ビルドも行いやすくなります。

今回はホストとして Linux (CoreOS) を使います。他のOSやディストリビューションでも概ね一緒だと思いますが，適宜読み替えてください。
Docker イメージを DockerHub から引っ張ってきますし，ソースコードは GitHub から clone してきますので，インターネット接続も要ります。

# 手順

Docker コンテナに入ってからの作業は，[Get Started](http://ev3rt-git.github.io/get_started/)の後半と一緒なのですが，とりあえず，一通り記しておきます。

## Docker コンテナへ入る

まずは Docker コンテナを引っ張ってきて，その中に入ります。

```shell-session
$ mkdir projects
$ cd projects
$ docker run --rm -it -v ${PWD}:/projects pizzafactory/che-stack-ev3rt /bin/bash
```

`-v` オプションで，カレントディレクトリをコンテナ内にマウントしています。
これが無いと，ビルドが終わったあと，コンテナ内のビルド成果物を取り出すのが難しくなります。

たぶん，初回だけ，こんな感じでダウンロードが走ります。

```
Unable to find image 'pizzafactory/che-stack-ev3rt:latest' locally
latest: Pulling from pizzafactory/che-stack-ev3rt
6bbedd9b76a4: Already exists
fc19d60a83f1: Already exists
de413bb911fd: Already exists
2879a7ad3144: Already exists
668604fde02e: Already exists
778c49b1024a: Pull complete
c04e85362e33: Pull complete
c75bea60126b: Pull complete
0dd26cf7d467: Pull complete
d0fa3f3dd7d6: Pull complete
9d103e0e382b: Pull complete
Digest: sha256:65b2f6305ce2780677d21da5cc157b01517583ba84b2691bfa1a71e6cfb8d92d
Status: Downloaded newer image for pizzafactory/che-stack-ev3rt:latest
```

しばらくするとプロンプトが出ます。

```
root@8b2e1b815cd8:/projects#
```

root ユーザになりますが，今回の起動方法では，コンテナからホストに出て悪さをすることは不可能です。安心して操作してください。
以下，プロンプトを「#」で表記します。

## ソースツリーの取得

GitHub からソースツリーを取得します。

```shell-session
# git clone https://github.com/ev3rt-git/ev3rt-hrp2
# cd ev3rt-hrp2
# git submodule init
# git submodule update
```

clone の際にパスワードを聞かれたときには URL を間違えています。確認してください。

## カーネルコンフィギュレータの作成

```shell-session
# cd cfg
# make
```

Boost を使った比較的サイズの大きなツールなので，ビルドにそこそこの時間がかかります。
コーヒーサーバに行って帰ってくるくらいはできるかも。

## uImage のビルド

```
$ cd ../base-workspace
$ make app=loader
```

こちらは，さほど時間はかかりません。大きかったら EV3 に入りませんし。

## helloev3 のビルド

```
$ cd ../sdk/workspace
$ make app=helloev3
```

こちらはさらに時間がかからずに終わります。hello world 相当ですから。

## Docker コンテナから脱出

`Ctrl+D` を押すなり exit コマンドを実行するなりして，コンテナから出ます。

```
# exit
```

## 成果物の回収

ホスト環境に戻ってきました。
先ほどカレントディレクトリをマウントしておきましたので，カレントディレクトリにコンテナ内の作業内容が残っています。

`ev3rt-hrp2/base-workspace/uImage` はファイル名の通り uImage で，`{カレントディレクトリ}/ev3-rt-hrp2/sdk/workspace/app` は先ほどビルドした helloev3 です。

このあとの作業は，Mindstorms EV3 に慣れていらっしゃる読者の方がお詳しいでしょう。


# 打鍵数は?

コンテナからの脱出で Ctrl-D を使った場合の打鍵数は 299。ギリギリで 300打鍵以内に収まりました。入力補完が効きますので，実際の打鍵数はもう少しすくなくなるはずです。

# 余談

## もう一回ビルドしたいときは?

docker に --rm オプションが付いているので，コンテナから抜けるとコンテナインスタンスは消えます。
もう一度ビルドしたいときは，最初のビルドを行ったディレクトリへ移動して，再度 docker を実行してください。

```
$ cd projects
$ docker run --rm -it -v ${PWD}:/projects pizzafactory/che-stack-ev3rt /bin/bash
```

コンテナインスタンスは消えますが，イメージは残っていますので，再実行時は瞬時にコンテナ内に入れます。

## どうでもいいいこと

書き上げてから，この記事 ET ロボコン Advent Calendar で公開したらモテモテだったのでは? という気がした。
でも貯めこむと忘れるので，投稿する。モテなくたっていい。泣かない。
上下に並んだ<div>..</div>を左右に配置させ、マージンを指定

とても簡単なことだが、CSSを今回初めて ちゃんと触ったので、
上下に並んだ`<div>..</div>`を左右に配置させる方法について残しておく。

例えば、HTMLが下記のような場合に、

```
<html>
<head>
<title>CSSテスト</title>
<link rel="stylesheet" type="text/css" href="test.css" />
</head>
<body>
<div id="testsite">
<div id="1"></div>
<div id="2"></div>
<div id="3"></div>
<div id="4"></div>
</div>
</body> 
</html>
```


CSS（今回の場合、test.css）で、以下のようにすると、

```
CSS（スタイルシート）

#testsite {
}

#1 {
}

#2 {
    float: left;
}

#3 {
    float: right;
}

#4 {
}
```

"2"の右側に、"3"が入りこみ
画面上、横並びに表示できる。



また、その際、マージンと余白についても考慮するなら、

```
マージン指定　｛ margin: [マージンの長さ]; ｝
余白の指定    ｛ padding: [余白の長さ]; ｝
枠の指定       ｛ border: [線の太さ] [線のスタイル] [線の色]; ｝ 
```
のように指定する。

※コンテンツと枠の間にある間隔が余白（padding）。枠の外側部分がマージン（margin）。
背景色や背景画像を設定した場合は、枠の内側に適用され、マージン部分は透過色となるので背景は付かない。


・マージン（margin）の指定において、
`{ margin 10px; }`のように
上下左右の４方向について、すべて同じマージンを指定することもできるが、

個別に、`{ margin 10px 15px 10px 15px; }`（margin（上）（右）（下）（左））
などと、上下左右のマージンをそれぞれ別に指定したり

`{ margin-top 10px; }` 、`{ margin-bottom 10px; }`、
`{ margin-left 10px; }`、`{ margin-right 10px; }`
などと、特定の場所のマージンだけ指定したりすることもできる。

・余白（padding）に関してもマージンと同じように指定できる。


・枠（border）の指定における線のスタイルとしては

```
none   :枠線なし
solid  :実線
double :二重線
dotted :点線
```

などがある。
エイリアスの登録方法

ターミナルから```vi ~/.bash_profile```と打って、```.bash_profile```をvimで開き、ファイルの一番下に以下のコマンドを記述しましょう。
```source ~/.bashrc```

```
# Command
alias de='cd ~/Desktop'
alias ll='ls -al'
alias rf='rm -rf'
alias mk='touch'
```
Vimで、リモートのPHPを使って、Syntasticでシンタックスチェックする

# Update
- 解決した https://github.com/yuki777/vim-phplint


# 前提
- Vimを実行中のサーバにはPHPがインストールされていない
- リモートのサーバにはPHPがインストールされている
- リモートのサーバはVimを実行中のサーバのディレクトリをマウントしている
 - その影響でVimを実行中のサーバでのファイルパスと、リモートサーバでのファイルパスがちょっと違う
- VimとSyntasticはインストール済み
 - Syntastic version: 3.7.0-226 (Vim 800, FreeBSD)
- ...みたいな状況です


# ~/.vimrc

```
let g:syntastic_mode_map = {'mode':'active', 'active_filetypes':['ruby', 'php', 'yaml', 'python'], 'passive_filetypes':['puppet', 'po', 'pot']}
let g:syntastic_stl_format = '[%E{Err: %fe #%e}%B{, }%W{Warn: %fw #%w}]'
let g:syntastic_auto_loc_list = 1
let g:syntastic_quiet_messages = {'level': 'warnings'}
let g:syntastic_php_checkers  = ['php']
let g:syntastic_php_php_exec  = 'ssh'
let g:syntastic_php_php_exe   = 'ssh 192.168.xxx.xxx php'
"let g:syntastic_php_php_args  = '' " clear default args
let g:syntastic_php_php_fname = shellescape('/path/to/mnt' . expand('%:p', 1))
let g:syntastic_php_php_tail  = '2>/dev/null'
```

# Memo
- https://github.com/vim-syntastic/syntastic/blob/master/doc/syntastic.txt#L801
- https://github.com/vim-syntastic/syntastic/blob/master/doc/syntastic-checkers.txt#L4387
- https://github.com/vim-syntastic/syntastic/blob/master/syntax_checkers/php/php.vim
- let g:syntastic_debug = 1 でデバッグ表示される
- :SyntasticInfo で現在の情報を表示
ターミナルからググる（bash）

ターミナルで、`ls -a`と打てば
.bashrcファイルがあると思うので、
`vim .bashrc`と打ち
このファイルに、下記を追加する。



```
# --------------------------------------
# Google search from terminal
# --------------------------------------
google(){
    if [ $(echo $1 | egrep "^-[cfs]$") ]; then
        local opt="$1"
        shift
    fi
    local url="https://www.google.co.jp/search?q=${*// /+}"
    local app="/Applications"
    local g="${app}/Google Chrome.app"
    local f="${app}/Firefox.app"
    local s="${app}/Safari.app"
    case ${opt} in
        "-g")   open "${url}" -a "$g";;
        "-f")   open "${url}" -a "$f";;
        "-s")   open "${url}" -a "$s";;
        *)      open "${url}";;
    esac
}
```


これで、ターミナルで
`google [検索したいワード]`と打ち込めば
検索できるようになる。

![Untitled.gif](https://qiita-image-store.s3.amazonaws.com/0/134919/38088356-e7c5-fda1-ece1-0c36f932911f.gif)


オプションで
`google -s [検索したいワード]`などとすると
Safariで開くなど、ブラウザの指定もできる。


ちなみに、
関数名はgoogle()としたが、別にkensaku()やgoo()などでも良い。
その場合は、ターミナルから使う際に、
`kensaku [検索したいワード]`や`goo [検索したいワード]`と打つこと。