OmniAICreator/Qiita-1.07M huggingface dataset:
BigQueryの64bit unsigned int 対応

- BigQueryがunsigned big int に対応していないので、どうするか考えた

- decimalは？
 - floatで扱われるみたい
 - http://stackoverflow.com/questions/11722274/bigquery-datatypes
 - float -> int castしてみた

```
select 
  integer(cast(9223372036854775807 as FLOAT) ),
  integer(cast(9223372036854775807 as string) )
;
```

- 結果
![image](https://qiita-image-store.s3.amazonaws.com/0/147882/17a545f2-4a79-f3c9-5349-f347460a31ff.png)

- Stringで扱うことにした

---
- おまけ:ソートするとき
 - stringそのままソートするとintegerのソート結果を期待できないぞ！
 - integerでもないぞ！signed int の最大値超えるとnullるから、結果がおかしくなるぞ！
 - 気をつけろ！

```
SELECT *, Float(string_column) as order_key 
FROM table
order by order_key desc
LIMIT 100
```
minikubeとVirtualBoxで手元でKubernetesを試す

#概要
minikubeをインストールすれば、手元のマシーンでVirtualBoxを使ってKubernetesを試すことができるようなので軽く触った。
環境は、mac。

# 前編
[kubernetes入門しました](http://qiita.com/kkam0907/items/2d13d3fbe9d93f499488)

# 入門編

- インストール


```
$ curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-darwin-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/
```

- 起動

```
$ minikube start
```

```
$ minikube status
```

- Kubernetesサーバにssh接続

```
$ minikube ssh
```

- 操作するクラスタ(context)をminikubeにする

```
$ kubectl config use-context minikube
```

minikubeインストールすると勝手にこれが行われる模様。

- Kubernetesでコンテナーを起動してみる

```
$ kubectl run my-nginx --image=nginx --replicas=2 --port=80
```
```
$ kubectl get pods
NAME                       READY     STATUS    RESTARTS   AGE
my-nginx-379829228-jft31   1/1       Running   0          1m
my-nginx-379829228-kc18n   1/1       Running   0          1m
```

```
$ kubectl get deployment
NAME       DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
my-nginx   2         2         2            2           2m
```

```
$ kubectl expose deployment my-nginx --port=80 --type=LoadBalancer
```

```
$ kubectl get services
NAME         CLUSTER-IP   EXTERNAL-IP   PORT(S)        AGE
kubernetes   10.0.0.1     <none>        443/TCP        16h
my-nginx     10.0.0.188   <pending>     80:32453/TCP   8m
```

EXTERNAL-IPが生成されない・・

- サービスのURLを取得する

```
$ minikube service my-nginx --url
http://192.168.99.101:32453
```

- dashboard

```
$ minikube dashboard
```

コンテナーが正しく起動できなかった時などエラーが見えるのでいいかも。
実際あとで、ここのログみて、privateレポジトリーイメージpullできていないことに気づく。

- Kubernetes環境の削除

```
$ minikube stop
$ minikube delete
```


# privateレポジトリーイメージからpodを作成する

- dockerからimage pullできるようにsecretキーを作成する

```
$ kubectl create secret [key-name] --docker-server=https://gcr.io --docker-username=oauth2accesstoken --docker-password="$(gcloud auth print-access-token)" --docker-email=[mail-address]
```

※この時、キー名は、deployment.ymlのimagePullSecrets.nameと同一のものにする
https://github.com/lovelytokyo/gcp-starter/blob/master/k8s/deployment.yml#L16

- git cloneする

```
$ git clone git@github.com:lovelytokyo/gcp-starter.git
```

- デプロイする

```
$ kubectl apply -f k8s/deployment.yml
$ kubectl apply -f k8s/service.yml
```

- アクセスしてみる

```
$ curl $(minikube service web-server  --url)
```

- imageバージョンアップなどの場合、deployment更新

```
$ kubectl replace -f k8s/deployment.yml
```

docker psでコンテナーが参照しているイメージ確認できる


# mountする

①mac 　→ 　minikube host　
②minikube host　 → 　minikube container (pod )

① ： mac /Users ディレクトリーは、すでにminikubeの/Usersにマウントされている。
minikube
②：deployment.ymlなどにて定義してあげる

deployment.yml

```
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: mount-test
spec:
  template:
    metadata:
      labels:
        name: mount-test
    spec:
      imagePullSecrets:
        - name : gcp-registry-key
      containers:
        - image: gcr.io/lovelytokyo-018/nginx:v1
          name: test-container
          volumeMounts:
            - mountPath: /opt/  ← pod側のディレクトリー　
              name: test-volume
      volumes:
        - name: test-volume
          hostPath:
            path: /Users/lovelytokyo  ← minikube hostのディレクトリ
```
Opera Neon Shortcut key note

|Key|Action|
|---|---|
|Cmd + Alt + →|Next Tab|
|Cmd + Alt + ←|Previous Tab|
|Cmd + [|History Back|
|Cmd + ]|History Forward|

自分は特にタブ切り替えが不便に感じたので BettorTouchTool で以下のように設定した。

<img width="1000" alt="Screenshot 2017-01-18 11.33.20.png" src="https://qiita-image-store.s3.amazonaws.com/0/40717/e9631062-ca45-4955-f260-f08be946af07.png">

Ctrl + N, Ctrl + P をアンバインドしておかないと Textfield などで新しい Window 開きまくってしまう。
Ubuntu に最新のgradleをインストールする

# はじめに
2017/01/01 現在、Ubuntuリポジトリのgradleは、Version1.4です。
このバージョンのgradleを使用してinitした場合に、エラーが発生することがあります。
この記事では、aptのリポジトリに追加して、gradleのバージョンをアップグレードします。

# 環境
- Ubuntu 

# 1.リポジトリの追加
```bash
sudo add-apt-repository ppa:cwchien/gradle
```

# 2.aptの更新
```bash
sudo apt-get update
```

# 3.Gradleのアップグレード
```bash
sudo apt-get upgrade gradle
```

# 4.不要になったパッケージを削除
```bash
sudo apt-get autoremove
```

# 5.gradelのバージョン確認
```bash
gradle -v
```
[Java][Spring] Spring Securityのアノテーションを付けたら、Type MismatchでAutowireできないときの対処方法

# 背景

Spring Securityのメソッドアノテーションでアクセス制御したいと思いました。

既存のクラスにアノテーションを付けました。

```java:MyService.java
@Component
public class MyService {

    @PreAuthorize("hasRole('ROLE_ADMIN')")
    public void someAdminAction() {
        /* ... */
    }
}
```

アノテーションを有効にするためにコンフィグレーションクラスを作りました。

```java:MethodSecurityConfiguration.java
@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class MethodSecurityConfiguration {

}
```

`MyService`はコントローラにインジェクションしていました。

```java:MyController.java
@RestController
public class MyController {

    @Autowired
    private MyService myService;

    /* ... */
}
```

# 起きたこと

MyControllerにMyServiceをインジェクションできない！

なんかType Mismatchとかいってる！！

# 原因

アノテーションを付けたクラスはAOPしてプロキシになるので、型が変わっている（？）みたいです。


# 解決策

`proxyTargetClass = true`というオプションを追加しました。

```java:MethodSecurityConfiguration.java
@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true, proxyTargetClass = true)
public class MethodSecurityConfiguration {

}
```
JavaScriptで一回だけ実行するイベントを登録する（jQueryの`one`メソッド風）

JavaScriptで一回だけ実行させるeventをbindしたかったが、
jQueryの`one`のようなメソッドがなかったので同様の処理を行う`addEventListenerOnce `を実装した。

`addEventListener`のoptionsパラメータが使用できるブラウザなどでは、
onceパラメータを使用する。
https://developer.mozilla.org/ja/docs/Web/API/EventTarget/addEventListener

```js
addEventListener('click', () => {
  // 処理
}, { once: true});
```

`addEventListener`のoptionsパラメータが使用できない場合は、
下記コードを参照。

### Code（ES6）
```js
const addEventListenerOnce = (target, type, listener) => {
  target.addEventListener(type, function fn() {
    target.removeEventListener(type, fn);
    listener();
  });
};

const element = document.getElementById('sample');
addEventListenerOnce(element, 'click', () => {
	// 処理...
});

```

### Code
```js
var addEventListenerOnce = function(target, type, listener) {
  target.addEventListener(type, function fn() {
    target.removeEventListener(type, fn);
    listener();
  });
};

var element = document.getElementById('sample');
addEventListenerOnce(element, 'click', function() {
	// 処理...
});

```
Dockerでproxy配下時にbuildを通すためのbuildコマンドによる対応方法

# はじめに
docker-composeの対応方法については逆にご教示頂きたいです(´°̥̥̥̥̥̥̥̥ω°̥̥̥̥̥̥̥̥｀)

# 対象
・環境的に、インターネットに出るにはproxyが必要な状況でDocker使いたい方
・状況を前提に、FROM centos:latest とかでOSイメージ取得からコケる方

# 結論
--build-arg を使う

# サンプル
docker build -t <なんか適当なタグ> **--build-arg http_proxy=proxyのURL --build-arg https_proxy=proxyのURL**
saferiで開いているページをchromeで開く


[Chromeで開いているURLをFirefoxとSafariで開くAppleScript](http://qiita.com/kanemu@github/items/80926e48dc214984cf93) を真似して作成。

```chromeで開く.scpt
tell application "Safari"
	set vURL to get URL of current tab of window 1
end tell

tell application "Google Chrome"
	open location vURL
	activate
end tell
```
【Git】Windowsコマンドプロンプト操作ベース GitHubを利用して初期pushまで

<a href="https://railstutorial.jp/" target="_blank">Ruby on Railsチュートリアル</a>を使ってRuby on Railsの勉強をはじめた。
仮想マシンを作るのがめんどくさかったのでgemやrailsやgitのコマンドはWindowsのコマンドラインを使いたい。
GitHubにレポジトリを作り、そこにサンプルアプリをプッシュしたい。
※今回の記事で記述しているコマンドはすべてWindowsコマンドプロンプトで打ち込んだものです。

Gitを使うには最初にSSHキーの設定があったり最初のpushのやり方がすぐに思い出せなかったりするので、メモを付けておく。

# systemセットアップ : 使用するコンピュータ1台につき1回だけ行う。
ユーザー名登録
`$ git config --global user.name "USER NAME"`
メールアドレス登録
`$ git config --global user.email mailaddress@domain.com`
現在の設定確認
`$ git config --global -l`

# ローカルレポジトリ初期化
Railsアプリケーションのルートディレクトリに移動し以下のコマンドを実行
`$ git init`

ローカルレポジトリにコミット
`$ git add -A`
`$ git commit -m "レポジトリ初期化"`

# WindowsコマンドラインからGitで使うSSHキー作成
1. まず「keygen.exe」を探す。Gitがインストールされている必要があり、インストールディレクトリのどこかにある。
	自分の環境の場合 : C:\Program Files\Git\usr\bin
	見つけたらcdコマンドでそこに移動
	`$ cd C:\Program Files\Git\usr\bin`

2. SSHキー作成コマンド実行
	`ssh-keygen -t rsa -C "なにかコメント"`
	すると、「Enter file in which to save the key (/c/Users/（ユーザー名）/.ssh/id_rsa):」と表示される。これは、「/c/Users/（ユーザー名）/.sshディレクトリにid_rsaというファイル名でキーのセットを作成しますよ」という意味。
	→このディレクトリ、このファイル名が重要で、Git（コマンドプロンプトで動かすGit）はこの組み合わせのファイルを自動で読みに行く。Gitと紐づくSSHキーファイルを設定するのではなく、利用するファイルのパスがあらかじめ決まっている。
	パスワードは設定してもしなくてもいい。
3. GitHubにSSHキー登録
	作成されたファイルの「.pub」のほうを開いて内容を全コピーする。
	GitHubのsetting画面からSSHキーを登録する。

# リモートレポジトリへプッシュ
この時点ではまだリモートレポジトリがない。

1. GitHubの画面からリポジトリを新規作成。
2. ローカルレポジトリのディレクトリに移動。今回はRailsのチュートリアルで勉強中なので作成中のRailsサンプルアプリの場所。「.git」や「Gemfile」があるディレクトリ。
3. ローカルリポジトリにリモートリポジトリを追加する。cloneしてくるときと同様の「origin」というリモート名にしておく。
	`$ git remote add origin （GitHubのリポジトリのアドレス）`
4. リモートからフェッチする
	`$ git fetch origin`
5. リモートにはまだ何もないので、まずはローカルレポジトリをまるっとプッシュする。「-f」オプションを付けて強制プッシュ。
	`$ git push -f origin master`

→これでリモートレポジトリに初期プッシュができる。
Sinatra の Inline Template 機能を使って 1 ファイルで完結する Vagrantfile を作る

Sinatra に [Inline Template](http://www.sinatrarb.com/intro.html#Inline%20Templates) という機能があり、こんな感じで `__END__` 以下に複数ファイルを埋め込める。

```ruby
require 'sinatra'

get '/' do
  haml :index
end

__END__

@@ layout
%html
  = yield

@@ index
%div.title Hello world.
```

これを Vagrantfile でも使えたら便利だろうなと思い、試したらいけたのでメモしておく。

## 事前準備

* vagrant が使えるようにしておく
* `vagrant plugin install sinatra` しておく

## Vagrantfile

こんな感じになった。Ubuntu のボックスをベースに、インラインテンプレートから読み込んだファイル内容を、`/home/ubuntu/.profile`, `/etc/ssh/ssh_config`, `/etc/ssh/private_key` に書きこむ例。Docker っぽく add というメソッドでファイルを追加できるようにしてみた。

```rb
# coding:utf-8
require "sinatra/base"

Vagrant.configure("2") do |config|
  @config = config

  config.vm.box = "ubuntu/xenial64"

  # インラインテンプレートを読み込み TEMPLATES 定数へ格納
  Sinatra::Base.inline_templates = "./Vagrantfile"
  TEMPLATES = Hash[Sinatra::Base.templates.map{|k, v| [k, v.first]} ]

  # 指定された文字列をコマンドとして実行するメソッド
  def run(command)
    @config.vm.provision "shell", inline: command
  end

  # 指定されたファイル内容を指定されたパスへ配置するメソッド
  def add(content, path, options={})
    run ["cat << EOF > #{path}", content, "EOF"].join("\n")
    run "chmod #{options[:mode]} #{path}" if options[:mode]
    run "chown #{options[:owner]} #{path}" if options[:owner]
  end

  # 必要なファイルを仮想マシンへ配置するための記述
  add TEMPLATES[:dot_profile], "/home/ubuntu/.profile", owner: "ubuntu"
  add TEMPLATES[:ssh_config], "/etc/ssh/ssh_config", mode: "777"
  add TEMPLATES[:private_key], "/etc/ssh/private_key", mode: "777"
end

__END__
@@ dot_profile
export HTTP_PROXY=http://proxy.example.com:8080
export http_proxy=http://proxy.example.com:8080
export HTTPS_PROXY=http://proxy.example.com:8080
export https_proxy=http://proxy.example.com:8080

@@ ssh_config
Host yoursshhost
  HostName 172.0.0.1
  IdentityFile /etc/ssh/private_key

@@ private_key
-----BEGIN RSA PRIVATE KEY-----
(略)
-----END RSA PRIVATE KEY-----
```

## まとめ

Vagrantfile 1 つだけで完結するので、ポータビリティが高いところが便利なんじゃないかと思う。が、`config.vm.synced_folder "C:\\", "/c"` すればホスト Windows 上のファイルがすべて見えるようになるので、こっちを使ったほうがいいなと気づき、個人的にはボツとなった。

## 参考資料

* [patty\.rb、最小限 Chef 実行](https://gist.github.com/tily/4045229)
* [Vagrantfileで使うプラグインを定義する \- Qiita](http://qiita.com/r7kamura/items/4221035fe23c549c288f)
[Java][Spring][JavaScript][gulp][webpack][uglify] 私的AngularJSアプリ開発環境

# 背景

JavaとAngularJSでSPAなWebアプリケーションを作っていました。
小規模なので、warのなかに全部入れてデプロイしてます。

JavaScriptファイルがたくさん増えてきて、なんとかまとめたいなと思いました。


## 葛藤の歴史

こんな葛藤の結果です。

warの中にJavaScriptも含むぞ！
↓
`<script>`タグたくさん書くの面倒だし、ファイル1個にまとめたい。
そのほうがHTTPコネクションも少なくなるし。
↓
Mavenでまとめよう！
↓
どうもMavenでJavaScript触るのいけてない。
minifyしたら、なんか動かないことあるし!?
↓
JavaScriptのことは、JavaScriptに任せたほうがよくね？
↓
Mavenからnode呼ぶのも、なんかいけてない。
というか、Jenkinsの入っているビルド環境にはnodeないし。
↓
もういいから、ビルドしたJavaScriptをレポジトリに含めちゃおうよ。 ＜ イマココ！




# ディレクトリ構成

このような構成にすることにしました。


```text:
src/
  main/
    java/                （Javaソース置き場） 
    js/                  (JavaScriptソース置き場）
      app.js             (webpackへ読み込ませるためのファイル)
      **/*.spec.js         (テストもここ)
      **/*.js              (その他いろいろJavaScript)
    webapp/
      static/
        js/
          bundle.js      （webpackでまとめたファイル）
          bundle.min.js  (uglifyで圧縮したファイル）
    resources/           （プロパティファイル等置き場）
  test/
    java/                （Javaテストソース置き場）
    resources/           （テスト用プロパティファイル等置き場）
gulpfile.js
karma.conf.js
package.json
pom.xml
```

`bundle.js`と`bundle.min.js`は、あらかじめビルドしてレポジトリに格納することにしました。

# 開発作業時は……

gulpとkarmaを動かして、常にbundle.jsを更新させています。

NetBeansの自動デプロイを有効にして、bundle.jsが反映されるようにしています。

# 設定ファイル達

## gulp

```js:gulpfile.js
'use strict';

var gulp       = require('gulp');
var webpack    = require('gulp-webpack');
var uglify     = require('gulp-uglify');
var rename     = require('gulp-rename');
var path       = require('path');
var fs         = require('fs');
var karma      = require('karma');

var config = {
    srcdir: './src/main/js',
    dstdir: './src/main/webapp/static/js',
    src: 'app.js',
    dst: 'bundle.js',
    dstmin: 'bundle.min.js',
    karmaconf: path.join(__dirname, 'karma.conf.js')
};

gulp.task('webpack', () => {
    var opts = {
        debug: true,
        output: { filename: config.dst },
        devtool: '#source-map'
    };
    
    return gulp.src(path.join(config.srcdir, config.src))
        .pipe(webpack(opts))
        .pipe(gulp.dest(config.dstdir));
});

gulp.task('uglify', [ 'webpack' ], () => {
    var opts = {
        warnings: true
    };

    return gulp.src(path.join(config.dstdir, config.dst))
        .pipe(rename(config.dstmin))
        .pipe(uglify(opts))
        .pipe(gulp.dest(config.dstdir));
});

gulp.task('karma', ['uglify'], () => {
    var opts = {
        configFile: config.karmaconf,
        singleRun: true
    };

    new karma.Server(opts).start();
});

gulp.task('clean', () => {
    fs.unlink(path.join(config.dstdir, config.dst), () => {});
    fs.unlink(path.join(config.dstdir, config.dst) + '.map', () => {});
    fs.unlink(path.join(config.dstdir, config.dstmin), () => {});
});

gulp.task('all', [ 'uglify' ]);

gulp.task('default', ['all'], () => {
    var files = [
        path.join(config.srcdir, '**/*.js'),
        '!' + path.join(config.srcdir, '**/*.spec.js'),
        '!' + path.join(config.srcdir, '**/*.test.js')
    ];
    gulp.watch(files, ['all']);
});

```
PHP組込サーバでhtmlをphpとして動作させる

`$ php -S localhost:8000 router.php`

```php:router.php
<?php

$url = $_SERVER['REQUEST_URI'];

if (preg_match('/\.html$/', $url)) {
    $path = __DIR__ . $url;
    if (is_file($path)) {
        require_once($path);
        exit;
    }
}

return false;
```


[PHP マニュアル ビルトインウェブサーバー](http://php.net/manual/ja/features.commandline.webserver.php)
uGUIでUIを作るときの個人的初期設定

## はじめに
uGUIでUIを作るときの個人的な初期設定を自分の備忘録的にまとめておきます。主にモバイル (iOS/Android) 向けに作る際の設定です。

## 確認環境
- OSはMacのOS X El Capitan (10.11.6) を使用
- UnityはVersion 5.5.0f3 を使用

## 設定内容
uGUIでTextやButtonなどのUIコンポーネントを配置するとCanvasの下にTextとButtonがぶら下がるような構成になります。今回はこのCanvasの設定が肝になります。

![image](https://qiita-image-store.s3.amazonaws.com/0/5879/747046be-0acf-0d6c-2aa1-c341d4cbe177.png)

具体的には、以下内容を設定しています。

- [UI Scale Mode]を[Scale with Screen Size]に設定
    - スクリーンサイズに合わせてUIが拡大/縮小する
- [Reference Resolution]を[X:640 y:1136]に設定
    - 縦長の画面の場合
    - モバイル向けは16:9のの比率が主流 (2017年1月現在)
        - [MOBILE HARDWARE STATS](http://hwstats.unity3d.com/mobile/display.html)
- [Match]を[1]に設定
    - 高さを基準に幅を変更する

![image](https://qiita-image-store.s3.amazonaws.com/0/5879/8131577b-2126-1e98-820b-826193ea123a.png)

## 参考
- [Canvas (Unityマニュアル)](https://docs.unity3d.com/jp/current/Manual/class-Canvas.html
)
- [Canvas Scaler (Unityマニュアル)]
(https://docs.unity3d.com/jp/current/Manual/script-CanvasScaler.html)
- [MOBILE HARDWARE STATS](http://hwstats.unity3d.com/mobile/display.html)
【Unity】oculus touchの振動デザイン

#oculus touchの振動 デザインについて考えてみる

[VR楽器](http://qiita.com/tatmos/items/40a888bc7368b1cbeb51
)

で 振動させてみて分かったこと
打撃振動と ミュート振動が欲しかった

#まず unityのaudio clipから作ってみた。

カウベルやスネアの音を入れる

そのままだと
「ぶぉーーん」
という振動になった。

どうやら 音の残響成分の部分にも大きく反応してしまう。

よく考えてみると当たり前なのだが
残響成分は 体に直接触れてないので
振動させてしまうと変だということ

で

#ならば 残響削って短くすればいいのではと


「ぶぉん」
これで良い感じになった。

もしかするとノイズゲートのエフェクトで ある一定以下を削るとか 音から振動を抽出するのにも少しコツが要りそう 奥の深い話になる。

#でも短く 単発で振動させるだけなら
わざわざ波形解析 再生しなくても
配列に書き込みすればよくね？


「ぼっ」
ってことで
8サンプルの
強弱だけに落ち着いた。


#今後の課題
ドリル音や チェーンソー オートマチック銃など 連続 断続的な振動の方法
爆破とかの振動を 手元の振動にさせるのはありか否か。
振動のリアルタイム変化
印象的な振動 心に訴える振動
常に同じ振動では飽きたりしないか？ などなど

#参考
・きゅーびっくきゅーこんさんの[OculusStoreでの配布方法]
(http://cubic9.com/Devel/OculusRift/OculusStore%A4%C7%A4%CE%C7%DB%C9%DB%CA%FD%CB%A1/)

#おまけ
振動確認できるOculusTouchアプリはこちら
OculusTouchアプリのテスター募集フォーム： https://t.co/gwAx94vABP


続き　→　まだ
WRF > 生成ファイル > wrfout_XXX / wrfrst_XXX

```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 v3.7.1を使用。
```

WRF(Weather Research and Forecasting Model)関連。

2016年10月19日から2016年11月15日の範囲をWRFで計算した。
~~(run_days=26 @ namelist.input)~~
run_daysは27にしないといけなかった。

wrfoutファイルは以下のものが作られた。

```
-rw-rw-r-- 1 *** *** 9503656732 Jan 18 02:37 wrfout_d03_2016-10-19_00:00:00
-rw-rw-r-- 1 *** *** 9503656732 Jan 18 02:37 wrfout_d02_2016-10-19_00:00:00
-rw-rw-r-- 1 *** *** 8942086868 Jan 18 02:37 wrfout_d01_2016-10-19_00:00:00

```

一方で、wrfrstファイルは以下のものが作られた。

```
-rw-rw-r-- 1 *** ***  83561008 Jan 17 22:23 wrfrst_d01_2016-10-27_00:00:00
-rw-rw-r-- 1 *** ***  78584344 Jan 17 22:23 wrfrst_d02_2016-10-27_00:00:00
-rw-rw-r-- 1 *** *** 144421432 Jan 17 22:23 wrfrst_d03_2016-10-27_00:00:00
-rw-rw-r-- 1 *** ***  83561008 Jan 18 00:15 wrfrst_d01_2016-11-04_00:00:00
-rw-rw-r-- 1 *** ***  78584344 Jan 18 00:15 wrfrst_d02_2016-11-04_00:00:00
-rw-rw-r-- 1 *** *** 144421432 Jan 18 00:15 wrfrst_d03_2016-11-04_00:00:00
-rw-rw-r-- 1 *** ***  83561008 Jan 18 02:09 wrfrst_d01_2016-11-12_00:00:00
-rw-rw-r-- 1 *** ***  78584344 Jan 18 02:09 wrfrst_d02_2016-11-12_00:00:00
-rw-rw-r-- 1 *** *** 144421432 Jan 18 02:09 wrfrst_d03_2016-11-12_00:00:00
```

以下のコマンドで見ると、wrfrstファイルは8日ごとに生成されている。

```
$ date -d "20161019 8 days"
Thu Oct 27 00:00:00 JST 2016
$ date -d "20161027 8 days"
Fri Nov  4 00:00:00 JST 2016
$ date -d "20161104 8 days"
Sat Nov 12 00:00:00 JST 2016
```
Coldfusion 学習用参考サイト

Coldfusion 参考資料に使うサイト

### 公式サイト
http://www.adobe.com/jp/products/coldfusion-family.html

### 公式リファレンス

* [ColdFusion 2016 の公式リファレンス(英語)](https://helpx.adobe.com/coldfusion/home.html)

* ColdFusion 11 の公式リファレンス(無し？)

* [ColdFusion 10 の公式リファレンス(日本語)](http://help.adobe.com/ja_JP/ColdFusion/10.0/CFMLRef/index.html)

* [ColdFusion 9 の公式リファレンス(日本語)](http://help.adobe.com/ja_JP/ColdFusion/9.0/CFMLRef/index.html)

* [ColdFusion 9 の公式リファレンス(日本語)](http://help.adobe.com/ja_JP/ColdFusion/9.0/CFMLRef/index.html)

* [ColdFusion MX 6.1～11のリファレンスのPDF]
(https://helpx.adobe.com/coldfusion/archive.html)

### 外部リファレンスサイト
[CFDocs] (https://cfdocs.org/)


### フレームワーク

* [ColdBox](https://www.coldbox.org/)
* [CFWheels](https://cfwheels.org/)
* [FuseBox](http://www.fusebox.org/)

### ユーザーグループ

* [JCFUG](http://jcfug.com/)

### 日本語サイト

* [ColdFusionカフェテリア](http://forum.samuraiz.co.jp/)
urjtagのautoconf

[パラレルポート](http://qiita.com/yamori813/items/9107f7e4851ef8e4dbea)があるマシンがいつまで動いているかも分からないし、消費電力も大きいのでMIPSなルーターなどで使えるようにgpioのサポートを入れてみようと思いつき、追加のためにautoconfを確認した時のメモです。

とりあえずFreeBSDのppiがどのように設定されているか確認してみる。

```configure.ac
AC_CHECK_HEADERS([dev/ppbus/ppi.h], [HAVE_DEV_PPBUS_PPI_H="yes"])
```

これによりautoconfで生成されたconfigureがFreeBSD上では

```config.h
#define HAVE_DEV_PPBUS_PPI_H 1
```

を設定されてソース内の

```
#if HAVE_DEV_PPBUS_PPI_H
#endif
```

が有効になる。

Linuxなどの環境の場合はppi.cをコンパイルしないように

```src/tap/Makefile.am
if ENABLE_LOWLEVEL_PPI
libtap_la_SOURCES += ¥
        parport/ppi.c
endif
```

によりソースを除外する。ENABLE_LOWLEVEL_PPIがどこで設定されているか分からなかったのだが、

```configure.ac
URJ_DRIVER_SET([lowlevel], [
        direct
        ftdi
        ftd2xx
        ppdev
        ppi
],[
```

のリストから生成されてい、HAVE_DEV_PPBUS_PPI_Hがない場合はppiを消す事によりENABLE_LOWLEVEL_PPIが無くなります。

で、bsdgpioを追加してみた。

https://sourceforge.net/u/himori/urjtag/ci/5108a956122d35b84368858868a1dfca779a6e80/

ロジックは/usr/include/libgpio.hがある場合にbsdgpioドライバを有効にするようにしています。

ちょっと不思議なのは元にしたgpioドライバがLinux用のコードなのだが、FreeBSDでも有効になってコンパイル通ってしまう。
技術英語 > Embedded in Python is a bit of free verse that expresses the Python philosophy [succinctly] ... / in brief

@ Introducing Python: Modern Computing in Simple Packages by Bill Lubanovic
(No. 427 / 12833)

> Embedded in Python is a bit of free verse that expresses the Python philosophy **<font color=red>succinctly</font>** ...

https://www.merriam-webster.com/dictionary/succinct
> 2 :  marked by compact precise expression without wasted words <a succinct description>

上記の意訳「Pythonに組み込まれているのは、わずかばかりの自由な韻文である。それはPython哲学を手短に表現する。」

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

in brief
http://ejje.weblio.jp/content/in+brief

> 手短に言えば、要するに、手短に、簡単に

<hr>

関連 http://qiita.com/7of9/items/4832f53d9166cc158ea7

> It's a long story. / To make a long story short, ...
プログラミングのオンライン個別教師の探し方

初めての投稿です。宜しくお願い致します。

Webのエンジニアの仕事が始まる前に、ドットインストールなどで予習・基礎学習しております。
その際に環境設定などオンラインコースの本流でない箇所でつまづくことが多いのですが、
困っているのは、他の方の記事や質問を見て試行錯誤するものの、そのつまづきが解決しない時にかなり時間をロスしてしまう、進捗が停止することです。

つまずいた時に、問題点を伝えskype等で画面共有すればサポートしてもらえる、といったオンラインサービス（オンラインのプログラミングの家庭教師？）をご存知でしたら教えてもらえませんでしょうか？
海外のサービスはあるようですが日本語非対応で、国内サービスの多くはクローズしているようでした。
EC2(Python3)->BigQuery

## 前提
・GCPのアカウントが準備できていること
・BigQueryに接続可能なtableが存在すること

## 実行環境の準備
ec2
-pyenv
 -naconda3-4.0.0
  -pandas
  -httplib2
  -google-api-python-client

## モジュール追加
```
sudo su -
pyenv global naconda3-4.0.0
pip install　httplib2
pip install　google-api-python-client
```

## GoogleCloudSDKの導入（python2.x環境で実行）と認証
```
pyenv global system
curl https://sdk.cloud.google.com | bash
~/google-cloud-sdk/bin/gcloud auth login
```

※認証情報は~/.config配下に出力される

### ごく少ないレコードのテーブルで実行
```
import pandas as pd
query = 'SELECT * FROM dataset_name.table_name'
pd.read_gbq(query, 'your_project_ID')
```

→pd.read_gbqで認証が走るが、EC2が実行元となるため、
　localhostでリスンする認証用URLがうまく受け取れない


#Oauth2での認証情報生成
```
from oauth2client.client import OAuth2WebServerFlow
from oauth2client.file import Storage
flow = OAuth2WebServerFlow(client_id='your_client_id',
                           client_secret='your_client_secret',
                           scope='https://www.googleapis.com/auth/bigquery',
                           redirect_uri='urn:ietf:wg:oauth:2.0:oob')
storage = Storage('bigquery_credentials.dat')
authorize_url = flow.step1_get_authorize_url()
print 'Go to the following link in your browser: ' + authorize_url
code = raw_input('Enter verification code: ')
credentials = flow.step2_exchange(code)
storage.put(credentials)
```
※your_client_id、your_client_sercretは~/.config配下から

上記処理実行後、カレントディレクトリに「bigquery_credentials.dat」が作成される。
→pandas.read_gbqは上記を認証情報として利用

### ごく少ないレコードのテーブルで実行
```
import pandas as pd
query = 'SELECT * FROM dataset_name.table_name'
pd.read_gbq(query, 'your_project_ID')
```

# 参考
https://developers.google.com/api-client-library/python/guide/aaa_oauth
http://stackoverflow.com/questions/37792709/accessing-big-query-from-cloud-datalab-using-pandas
EC2インスタンス(Red Hat Enterprise Linux 7.3)でPHP関連パッケージがインストール出来ない対処

EC2インスタンスでRed Hat Enterprise Linux 7.3 を作成し
epel,remiリポジトリをインストールした後
PHP関連のパッケージのインストールをしようとしたら
php-mbstringとphp-snmpが取得出来なかった

```
#sudo yum install -y php php-common php-gd php-ldap php-ldap php-mbstring php-mysql php-pear-DB php-snmp php-zip

No package php-mbstring available.
No package php-snmp available.
```
調べたら、rhelのphp-mbstring、php-snmpパッケージはOptionalリポジトリに含まれるようで
Red Hat Networkにログインして、対象のパッケージを入手して、必要となるサーバへパッケージを導入し無ければいけないとの事

必要なパッケージの調査

```
# yum repolist all
rhui-REGION-client-config-server-7/x86_64                   Red Hat Update Infrastructure 2. enabled:      6
rhui-REGION-rhel-server-debug-extras/7Server/x86_64         Red Hat Enterprise Linux Server  disabled
rhui-REGION-rhel-server-debug-optional/7Server/x86_64       Red Hat Enterprise Linux Server  disabled
rhui-REGION-rhel-server-debug-rh-common/7Server/x86_64      Red Hat Enterprise Linux Server  disabled
rhui-REGION-rhel-server-debug-rhscl/7Server/x86_64          Red Hat Enterprise Linux Server  disabled
rhui-REGION-rhel-server-debug-supplementary/7Server/x86_64  Red Hat Enterprise Linux Server  disabled
rhui-REGION-rhel-server-extras/7Server/x86_64               Red Hat Enterprise Linux Server  disabled
rhui-REGION-rhel-server-optional/7Server/x86_64             Red Hat Enterprise Linux Server  disabled
rhui-REGION-rhel-server-releases/7Server/x86_64             Red Hat Enterprise Linux Server  enabled: 13,616
rhui-REGION-rhel-server-releases-debug/7Server/x86_64       Red Hat Enterprise Linux Server  disabled
rhui-REGION-rhel-server-releases-source/7Server/x86_64      Red Hat Enterprise Linux Server  disabled
rhui-REGION-rhel-server-rh-common/7Server/x86_64            Red Hat Enterprise Linux Server  enabled:    209
rhui-REGION-rhel-server-rhscl/7Server/x86_64                Red Hat Enterprise Linux Server  disabled
rhui-REGION-rhel-server-source-extras/7Server/x86_64        Red Hat Enterprise Linux Server  disabled
rhui-REGION-rhel-server-source-optional/7Server/x86_64      Red Hat Enterprise Linux Server  disabled
rhui-REGION-rhel-server-source-rh-common/7Server/x86_64     Red Hat Enterprise Linux Server  disabled
rhui-REGION-rhel-server-source-rhscl/7Server/x86_64         Red Hat Enterprise Linux Server  disabled
rhui-REGION-rhel-server-source-supplementary/7Server/x86_64 Red Hat Enterprise Linux Server  disabled
rhui-REGION-rhel-server-supplementary/7Server/x86_64        Red Hat Enterprise Linux Server  disabled
```

”rhui-REGION-rhel-server-optional”が該当するリポジトリ名になるので
以下のコマンドでリポジトリの追加を実施

```
# yum-config-manager --enable rhui-REGION-rhel-server-optional
```

完了後、再度yum install php-mbstring php-snmpを実行したら
無事にインストールが完了しました。
Djangoのモデルで任意のキーをプライマリキーにする



Djangoではモデルで特に何も指定しないと
プライマリキー名はid、型は整数(integer)、1からの連番で生成される。

ここでは、モデルのプライマリキーとして
UUID(Universally Unique Identifier)を利用する例を示す。

```python:model.py
from django.db import models
import uuid

class Sample(models.Model):
	sampleId = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
```

ポイントとなるのは下記の、 **primary_key=True** の部分、
ここでsampleIdがプライマリキーであることを明示している。

```python
sampleId = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
```

モデルのオブジェクトが生成されたタイミングで自動的に割り当てられて欲しいので、
**default=uuid.uuid4** を指定。

さらに、プライマリキーをあまり考えなしに変更すると
DBの整合性が壊れそうなので **editable=False** を指定
(ここは取り越し苦労の可能性は高いが......)
人間の知覚

##用語
- 感覚(sensation)...外界の物理化学的エネルギーを感受するプロセス。比較的単純な経験
- 知覚（perception）...感覚経験の適切な解釈に関わる機能。感覚より高次の用法処理過程と定義されるが感覚とは連続的
- 認知(cognition)...学習、記憶、思考などの精神機能も含めた知覚
- 認識(recognition)...記憶しているものに分類する機能
- 絶対閾(absolute threshold)...検出することのできる最小の刺激強度
- 刺激頂(terminal threshold)...最大の刺激をもたらす最小の刺激強度
- 弁別閾（difference threshold）...弁別をもたらす最小の刺激強度で変化したことがわかる最小の変化量（丁度可知差異(jnd:just noticeable difference)とも言われる）

##ウェーバーの法則
ΔI(弁別閾) / I(刺激量) = K(感覚によって決まる定数)
ウェーバー比ΔI/Iが小さいほど感覚が鋭敏である。

##ウェーバー・フェヒナーの法則
S(感覚の大きさ) = klogI(物理的刺激量) + c (k, c:定数)
心理的感覚量の変化分がウェーバー比ΔI/Iに比例しすると仮定し、ΔS=kΔI/Iを積分して導出。

#明るさの知覚
- 光覚閾...存在が感じられる最小光量
 
##リッコの法則
網膜中心窩およびその周辺の狭い範囲内では、
I(光覚閾)A（刺激面積） = 一定

##パイパーの法則
Aが大きい時、
$IA^{1/2}=一定$

##光覚閾と刺激時間の関係
I(光覚閾)T(刺激時間) = 一定  (Tが小さい時)
I = 一定  (Tが大きい時)

#色覚
色...人間が感じる心理的変数
3原色...440nm(青)、530(緑)、570(赤)

##ブロッカ・ザルツァー現象
光刺激は50~100ms程度でピークに達し、その後減少
して定常値に達する。
光強度が強いほど立上り時間が短くなる。

##臨界フリッカ周波数
光の明暗が時間的に変化する時、比較的ゆっくりした変化の場合（低い周波数）、明暗の変化を知覚することができるが変化が早い場合（高い周波数）視覚系は明暗の変化を知覚できず、融合して一定の明るさとして知覚する。この境界の周波数を臨界フリッカ周波数といい、以下が成り立つ。

F(臨界フリッカ周波数) = a log I(光の強さ) + b　（a、b:定数）

##タルボーの法則
臨界フリッカ周波数で点滅する光の明るさは時間平均輝度になる。

#聴覚
音階：音の周波数と対数の関係があり周波数が2倍で1オクターブ上がる
ただし、音階と人間が感じる音の高さは一致していない
- 人間が感じる音の高さを表す単位：メル（mel)
1kHz, 60dBsplの音の高さ：1000mel
- 音の周波数変化に対する感度
1kHz以上でウェーバーの法則成立(ウェーバー比：　0.3%)

##マスキング効果
ある音が他の音によって妨害されてある領域の音が聞えなくなる現象。周波数の差が小さいほどこの効果は大きく、マスク音より高い音はよく遮蔽するが，マスク音より低い音に対する影響は小さい。

##パーティーカクテル効果
周囲の雑音の中でも、自分に必要な事柄だけを選択して聞くことができる効果。音源定位が重要である。

##音源定位
左右の耳から得られる情報の差異によって音源の位置を感じ取ること。低周波数領域は到達時間差、
高周波数領域は音の強度差によって定位する。1-5kHzが境界のため定位の精度が落ちる。
Android開発 プロジェクト作成

##環境を整える
android studioをインストール
android端末の開発者向けオプションでUSBデバックモードにする
　※エミュレータでも可能だが、今回は端末

##android studioにて新規プロジェクトを作成する
下記画面にて名前を決めて次へ。
<img width="388" alt="スクリーンショット 2017-01-18 0.08.26.png" src="https://qiita-image-store.s3.amazonaws.com/0/15564/be0547d7-56b5-9ab3-f8d9-ea6707af42b4.png">

##対象のSDKを設定する
MinimumSDKのプルダウンを選択すると、それ以降のSDKの使用率（google play）が表示される。
作成時のAPI21では40.5%。
対象端末はPhone and Tablet以外にもあるが、ここでは触れない。
<img width="764" alt="スクリーンショット 2017-01-18 0.09.21.png" src="https://qiita-image-store.s3.amazonaws.com/0/15564/9916aa69-ad2a-bbef-7427-0b68f7144d01.png">

##作成するアプリの元を選択する
今回は空っぽのもの（Empty Activity）を選ぶ。
<img width="1072" alt="スクリーンショット 2017-01-18 0.09.41.png" src="https://qiita-image-store.s3.amazonaws.com/0/15564/ce3da20e-f3df-2956-669e-dc149b87cc57.png">

##メインのActivityとLayoutの名前を決める
Activityは処理をおこなうプログラムとなります。
今回はデフォルト名のままで次に行きます。
<img width="693" alt="スクリーンショット 2017-01-18 0.10.17.png" src="https://qiita-image-store.s3.amazonaws.com/0/15564/6ec39d62-29e8-4426-d797-cedc761305c9.png">

##hellow worldを出力する
初期化後に画面上部の矢印マークをクリックすると、
USBで繋いでいるandroidデバイスが一覧にでてくるはずなので、選択して実行をします。
<img width="659" alt="スクリーンショット 2017-01-18 0.18.00.png" src="https://qiita-image-store.s3.amazonaws.com/0/15564/d424c9a6-1536-674f-e30b-db048995bd5d.png">

アプリにインストールされて立ち上がると下記画面が表示されます。
<img width="294" alt="スクリーンショット 2017-01-18 0.55.43.png" src="https://qiita-image-store.s3.amazonaws.com/0/15564/26d0513c-a839-0e81-f96a-088de2d9f188.png">

以上が、プロジェクトの作成となります。
Hello World!が出力される詳細は別記事に記載します。
セキュリティビットマップフォントジェネレータ

セキュリティフォントなるものが開発されたそうなので、
セキュリティビットマップフォントジェネレータを作成してみる。

# 概要
あじゃいるとかいってじんせいとかしたひとのかおがみたいよー、あびゃー。

# コード
```cpp
#define _CRT_SECURE_NO_WARNINGS
#include <assert.h>
#include <stdio.h>
#include <random>
#include <algorithm>

#define STB_TRUETYPE_IMPLEMENTATION
#include "stb_truetype.h"
#define STB_IMAGE_WRITE_IMPLEMENTATION
#include "stb_image_write.h"

#ifdef _MSC_VER
typedef __int8 s8;
typedef __int16 s16;
typedef __int32 s32;
typedef unsigned __int8 u8;
typedef unsigned __int16 u16;
typedef unsigned __int32 u32;

#else
typedef int8_t s8;
typedef int16_t s16;
typedef int32_t s32;
typedef uint8_t u8;
typedef uint16_t u16;
typedef uint32_t u32;
#endif

struct CData
{
    s32 code_;
    stbtt_bakedchar data_;
};

bool create_font_bitmap(const char* inpath, const char* outpath)
{
    assert(NULL != inpath);
    assert(NULL != outpath);
    FILE* file = fopen(inpath, "rb");
    if(NULL == file){
        return false;
    }
    fseek(file, 0, SEEK_END);

    s32 buffSize = ftell(file);
    fseek(file, 0, SEEK_SET);
    u8* buffer = (u8*)malloc(buffSize);
    s32 read = fread(buffer, 1, buffSize, file);
    if(read<buffSize){
        fclose(file);
        return false;
    }
    fclose(file);

    s32 width = 512;
    s32 height = 512;
    u8* alpha = (u8*)malloc(width*height);
    static const s32 numChars = (96);
    stbtt_bakedchar cdata[numChars];
    CData data[numChars];
    s32 ret = stbtt_BakeFontBitmap(buffer, 0, 32.0f, alpha, width, height, 32, 96, cdata);
    for(s32 i=0; i<numChars; ++i){
        data[i].code_ = i+32;
        data[i].data_ = cdata[i];
    }

    u8* bitmap = (u8*)malloc(width*height*4);
    u8* src = alpha;
    u8* dst = bitmap;
    for(s32 i=0; i<(width*height); ++i){
        s32 j=i<<2;
        dst[j+0] = src[i];
        dst[j+1] = src[i];
        dst[j+2] = src[i];
        dst[j+3] = 255;
    }
    ret = stbi_write_bmp(outpath, width, height, 4, bitmap);
    free(bitmap);
    free(alpha);
    free(buffer);

    file = fopen("map.txt", "wb");
    if(NULL == file){
        return false;
    }
    std::shuffle(data, data+numChars, std::mt19937());
    for(s32 i=0; i<numChars; ++i){
        fprintf(file, "%d %d %d %d %d %d %f %f %f\n",
            data[i].code_, i+32,
            data[i].data_.x0, data[i].data_.y0,
            data[i].data_.x1, data[i].data_.y1,
            data[i].data_.xoff, data[i].data_.yoff,
            data[i].data_.xadvance);
    }
    fclose(file);
    return true;
}

int main(int argc, char** argv)
{
    if(argc<2){
        return 0;
    }
    create_font_bitmap(argv[1], argv[2]);
    return 0;
}
```

# 結果
~~途中で飽きた。~~
~~面倒なので、~~標準の疑似乱数ジェネレータを使っているが、
独自の疑似乱数ジェネレータや、暗号用途に向いたジェネレータを使うと良い。
また、品質を犠牲にして乱択にグリフのピクセルサイズを変えることを勧める。
Raspbian Jessi Lite にporg 0.10をインストール

# 概要
パッケージをソースからコンパイルしてインストールする場合、
ファイルがバラバラにインストールされてしまい、ファイルが把握できていないなんてことがよくある。

こちらのソフトは、そんな迷子ファイルを迷子にならない様に管理してくれるソフトです。

# 環境

| |ソフト　|バージョン |
|:--:|:--|:--:|
|OS |Raspbian|Jessi Lite |
| |porg |0.10 |

# インストール

```bash:porg　インストール手順　
$ tar xvf porg-0.10.tar
$ cd porg-0.10
$ ./configure --disable-grop
$ make
$ sudo make install
$ sudo porg -lp porg-0.10 make install
```

# 使い方
ヘルプ

```
$ porg --help
Usage:
  porg [OPTIONS] <packages|files|command>

General options:
  -a, --all                Apply to all logged packages (not with -r).
  -L, --logdir=DIR         Use DIR as the log directory.
  -v, --verbose            Verbose output (-vv produces debugging messages).
  -x, --exact-version      Do not expand version of packages given as arguments.
  -h, --help               Display this help message.
  -V, --version            Display version information.

General list options:
  -R, --reverse            Reverse order while sorting.
  -t, --total              Print totals.
  -z, --no-package-name    Don't print the name of the package.

Package list options:
  -d, --date               Print the installation day (-dd prints the hour too).
  -s, --size               Print the installed size of the package.
  -F, --nfiles             Print the number of installed files.
  -S, --sort=WORD          Sort by WORD: 'name', 'date', 'size' or 'files'.
Package information options:
  -i, --info               Print package information.
  -o, --configure-options  Print the arguments passed to configure when the
                           package was installed.
  -q, --query              Query for the packages that own one or more files.

Package remove options:
  -r, --remove             Remove the (non shared) files of the package.
  -b, --batch              Do not ask for confirmation when removing or unlogging
  -e, --skip=PATH:...      Do not remove files in PATHs (see the man page).
  -U, --unlog              With -r: unlog the package, without removing any file.

Package log options:
  -l, --log                Enable log mode. See the man page.
  -p, --package=PKG        Name of the package to be logged.
  -D, --dirname            Use the name of the current directory as the name
                           of the package.
  -+, --append             With -p or -D: If the package is already logged,
                           append the list of files to its log.
  -j, --log-missing        Do not skip missing files.
  -I, --include=PATH:...   List of paths to scan.
  -E, --exclude=PATH:...   List of paths to skip.

Note: The package list mode is enabled by default.

```


管理パッケージの一覧表示

```
$ porg --all
```

インストールしたファイルの一覧表示

```
$ porg -f foo-0.00
```

パッケージの削除

```
$ porg -r foo-0.00
```
[iOS][Xcode]LaunchScreen.xibの画像を変更しても反映されない

### 現象
Xcode8になっても強烈なキャッシュによりLaunchScreen.xibの画像を変更しても実機起動時に反映されない不具合に見舞われた。

### 前提
LaunchScreen.xibを使用していること。

### 解決策
1. 実機（今回はiPhone）を再起動
2. 再度ビルド実行

### 補足
解決した際にググった結果、以下Apple公式サイトに開発者のフィードバックがあったので参考にしました。
https://forums.developer.apple.com/thread/19759
ずっと Windows ユーザだったフロントエンドの人が Mac へ移行する手順 CLI編


## ターミナル、シェルなど

### Windows のとき

- [ConEmu](http://conemu.github.io/)
- [MINGW64 な msys2](http://qiita.com/hotchpotch/items/03db65146183617a4e3c) で Bashシェル

### Mac 

- iTerm `brew install Caskroom/cask/iterm2`
- fishshell `brew install fish`
	- 事前に zsh, oh-my-zsh など聞いてたんですが一方で重くなるとも言われいろいろあって、なぜか fish になった
	- [ログインシェル変更はこのあたり](http://qiita.com/m_snow/items/c5e1d118b4d584fa4ae7#%E3%82%B7%E3%82%A7%E3%83%AB%E3%81%AE%E5%A4%89%E6%9B%B4)
	- oh-my-fish も最初いれたが、パッケージマネージャ的なのは [fisherman](https://github.com/fisherman/fisherman/wiki/%E6%97%A5%E6%9C%AC%E8%AA%9E) だけでよい（といっても万能でもない、後述）。
	- `fisher omf/theme-bobthefish` bobthefish というテーマ。[テーマはいろいろある](https://github.com/oh-my-fish/oh-my-fish/blob/master/docs/Themes.md)。

テーマで足りないフォント出て来るはず。Powerline てやつ。
https://github.com/powerline/fonts.git
`./install.sh` でインストール。


## 開発環境もろもろ

Ruby, Python, Node.js, Go あたり。
Windowsだとバージョンマネージャみたいなのはなかったですね。
Node.js だけ [nodist](https://github.com/marcelklehr/nodist) でバージョン変えたりしてました。

Mac では

```
brew install rbenv
brew install pyenv
brew install go
```

go は後述の ghq のために入れてる。
go はパス通す必要があるがbashとちょっと違う。
config.fish に下記

```
# golang path
set -x GOPATH $HOME/.go
set -x PATH $GOPATH/bin $PATH
```

rbenv,pyenv は fisherman で自動設定

```
fisher rbenv
fisher pyenv
```

バージョン選択後、グローバルでの指定などは適宜。

この流れで、インターフェース合わせて nodenv 入れたいところなんですが、[残念 fishshell で動かないらしい](https://github.com/ekalinin/nodeenv/issues/155)。fisher には [fnm](https://github.com/fisherman/fnm) なるものがあるそうでこちらに。
※ fnm については若干不安な運用

## Git

Windows はずっとSourceTreeでした。だって楽だもの（その代わり重い）。
Mac デフォルトで入ってたんですが

```
brew install git
```

brew で入れ直す。

- [Gitをインストールしたら真っ先にやっておくべき初期設定](http://qiita.com/wnoguchi/items/f7358a227dfe2640cce3)
- [SSH認証キーをGitHubへ設定する](http://qiita.com/Mitsunori_Tsukada/items/6886f1f28d9485484822)

など基礎的なところを再度。SourceTree も入れておく。
リベース進行に必要な git-now, diff をいい感じに diff-so-fancy なども入れておく。

```
brew install git-now
brew install diff-so-fancy
```

```:.gitconfig
[alias]
  graph = log --decorate --graph --name-status --oneline
  diff = diff --color | diff-so-fancy
```

こんなの入れておいてる。


## ghq

リポジトリへのアクセスやクローンを素早くできるようにする cli ツール。

```
go get github.com/motemen/ghq
```

デフォルトだと `~/.ghq` が対象ディレクトリ。追加は .gitconfig へ。

```:.gitconfig
[ghq]
    root = ~/.ghq
    root = ~/project
```

peco を入れて

```
brew install peco
```

```:config.fish
function repo
    ghq list --full-path | peco | read dist
    cd $dist
end
```

`repo` で瞬時にリポジトリ選択できるようにしてる。

## ここまで来てセットアップファイルがないことに気づく

https://github.com/rcmdnk/homebrew-file

これを使って、

https://github.com/tkdn/setup-brewfile

こんな風に自動化。Brewfile はオワコンなんですかね。
セットアップファイル、ドットファイル、設定など一括化してどこかおいておきたい。
findとxargsコマンドで-print0オプションを使う理由(改)

findの`-print0`とxargsの`-0`。  
findとxargsのサンプルを調べていると初めは誰もが疑問に思う謎のオプション。  
例えばこんなコマンド。

```sh
    $ find . -name '*.bak' -print0 | xargs -0 rm
```

`find print0`でググると、トップにでてきたのは下のサイト。

[UNIX findとxargsコマンドで-print0オプションを使う理由](http://kaworu.jpn.org/kaworu/2008-12-08-1.php)  

よくまとまっていてわかりやすいのですが、下記の部分に誤りがあります。

> lsコマンドの結果からわかるように、スペースが含まれるファイル名は、別々なものとして認識されています。
> この問題は、findコマンドが区切り文字としてスペースを使っているからです。

findコマンドが区切り文字としてスペースを使っているのではなく、正しくはxargsが区切り文字として空白文字(改行、スペース、タブなど)を使っているからです。

つまり、下のサンプルが示すように、空白と改行の両方を区切り文字として扱ってしまうわけです。

    $ echo -e "Hello World\nHelloWorld" | xargs -n1 echo
    Hello
    World
    HelloWorld


処理の前後関係としては、xargsが空白文字でなくヌル文字を区切りとして扱うように`-0`を指定し、xargsの形式に合わせるためにfindの`-print0`を指定する、という順番で考えた方がシックリくるのではないでしょうか。

**参考サイト**
+ [UNIX findとxargsコマンドで-print0オプションを使う理由](http://kaworu.jpn.org/kaworu/2008-12-08-1.php)
+ [Man page of  XARGS](https://linuxjm.osdn.jp/html/GNU_findutils/man1/xargs.1.html)
+ [いまさらxargsの便利さを主張してみる](http://openlab.dino.co.jp/2008/02/20/133431188.html)
RxSwiftとenumでNSNotificationCenterを使いやすくした

### 環境
Swift 2.3, Xcode 8.2

## ふつうにNSNotificationCenterを使うと
こんなかんじになる。

```swift
// 通知
NSNotificationCenter.defaultCenter().postNotificationName("NotifName", object: nil)

// 購読
NSNotificationCenter.defaultCenter().addObserver(
    self,
    selector: #selector(MyViewController.onRecievedNotif),
    name: "NotifName",
    object: nil
)

// 購読解除
NSNotificationCenter.defaultCenter().removeObserver(self)

// 通知を受けたときの処理
func onRecievedNotif() {
    // do something
}
```

## 不満
* 購読解除を忘れそう
* コードが長い
* notificationNameのタイポがこわい

## RxSwiftを使ってシンプルに書けるようにした
```swift
private let bag = DisposeBag()
// 通知
NSNotifConstants.webViewClosed.post()

// 購読 & 通知を受けたときの処理 & 自身が破棄されたときに購読解除
NSNotifConstants.webViewClosed.asObservable()
    .subscribeNext { [unowned self] notif in
        // do something
    }
    .addDisposableTo(self.bag)
```

## 実装

RxCocoa による `NSNotificationCenter`の拡張メソッド`rx_notification`を使用する。

```swift:NSNotifConstants.swift

import Foundation
import RxSwift
// NSNotificationCenterに使う
enum NSNotifConstants {
    
    // メインのタブを変更した
    case mainTab
    // アプリがバックグラウンドからフォアグラウンドに復帰した
    case appDidBecomeActive
    // お知らせ一覧を取得した
    case latestNotificationAtUpdated
    // お知らせ一覧を確認した
    case notificationsChecked
    // 自分のプロフィールが更新された
    case myProfileUpdated
    // WebViewが閉じた
    case webViewClosed
    
    var name: String {
        // 他のライブラリ等とnotificationの名前がかぶるのを防ぐためにprefixをつける
        return "myapp" + String(self.hashValue)
    }
    
    // 通知を送る
    func post(object: AnyObject? = nil, userInfo: [NSObject: AnyObject]? = nil) {
        NSNotificationCenter.defaultCenter().postNotificationName(
            self.name,
            object: object,
            userInfo: userInfo
        )
    }
    
    // 通知を購読する
    func asObservable() -> Observable<NSNotification> {
        return NSNotificationCenter.defaultCenter()
            .rx_notification(self.name)
            .observeOn(MainScheduler.instance)
    }
}
```

## オブジェクトを送る場合
ときには通知と一緒に`object`を送りたい。
あまり綺麗ではないかもしれないが、こう書くことにした

```swift
// 通知
NSNotifConstants.myProfileUpdated.post(
    NSNotificationData.MyProfileUpdated(
        oldProfileData: oldData,
        newProfileData: newModel.toData()
    )
)

// プロフィールの変更を監視
NSNotifConstants.myProfileUpdated.asObservable()
    .map { $0.object as! NSNotificationData.MyProfileUpdated }
    .subscribeNext( [unowned self] profiles in
        // do something
    )
    .addDisposableTo(self.bag)
```

## 実装
```swift:NSNotifData

// NSNotificationCenterに使う
// objectに指定するためにNSObjectを継承する
final class NSNotifData: NSObject {
    
    final class MyProfileUpdated {
        // 自分のプロフィールが更新された
        let oldProfileData: MyProfileData?
        let newProfileData: MyProfileData
        init(oldProfileData: MyProfileData?, newProfileData: MyProfileData) {
            self.oldProfileData = oldProfileData
            self.newProfileData = newProfileData
        }
    }

}

```

## さいごに
もっといい感じの実装があれば教えてください:)
iOS標準のmusicアプリのようなプレイヤーを出せるLNPopupControllerの紹介

#### 概要

デフォルトのmusicアプリのように、tabbarの上部にviewを追加してごにょごにょできるライブラリを探していたら、あったのでその紹介とその使い方について紹介。

[LNPopupController](https://github.com/LeoNatan/LNPopupController)

#### 実例

今回の要件は下記のようなもの

 * タブバーアプリで動作する。
 * 再生部分のビューをタブバーのすぐ上に配置する。
 * タブを切り替えてもそのビューはタブバーに属したものとして表示される

要は、iOSデフォルトの音楽アプリのような挙動を目指した。

実装後は下のGIFのようになる。

![output.gif](https://qiita-image-store.s3.amazonaws.com/0/37053/44d42cce-88fd-c7b6-35db-e4cf26ade21b.gif)

####　使い方

下記のコードをタブバー内の任意のViewController内で実行すれば良い。
`customBarViewController`に設定するViewControllerは`LNPopupCustomBarViewController`を継承している必要がある。


```swift:example
let player:PlayerVC = PlayerVC()
tabBarController?.popupBar.customBarViewController = player
tabBarController?.popupBar.barStyle = .prominent
tabBarController?.presentPopupBar(withContentViewController: UIViewController(), animated: true, completion: nil)
```


デフォルトでは、tabbarの直上に出るバーに対してタップなどを行うと`presentPopupBar`に指定したViewControllerを表示するようになっている。
そういった動作を抑制したい時は、`customBarViewController`に設定したViewControllerにて`wantsDefaultTapGestureRecognizer`プロパティをfalseにすればよい。
【Laravel】アップロードした動画ファイルの形式をチェックする方法

## 概要

フォームからアップロードしたファイルの形式を、バリデーションでチェックするように実装したい時ってありますよね？

Laravelでは、デフォルトで用意されているバリデーションルールに、ファイルの形式をチェックする`mimes`というルールがあります。
https://readouble.com/laravel/5.1/ja/validation.html#rule-mimes

> mimes:foo,bar,...
フィールドで指定されたファイルが拡張子のリストの中のMIMEタイプのどれかと一致することをバリデートします。

公式ドキュメントには、基本的な使用方法として、下記のような画像の形式を指定する方法が記述されています。

```php
'photo' => 'mimes:jpeg,bmp,png'
```

このmimesを用いて、動画ファイルの形式をチェックすることが可能か試してみました。

## mimesルールで指定できる動画ファイルの形式

基本的には下記サイトにあるような、MIMEタイプを指定することで、チェックすることができます。
一部判明したものを表に載せます。
（ :warning: 拡張子ではないので注意）
http://www.tagindex.com/html5/basic/mimetype.html

| 動画の拡張子 | 指定できるMIMEタイプ |
|:-:|:-:|
| .mp4 | mp4  |
| .mov  |  qt |
| .wmv  |  x-ms-wmv |
| .mpeg .mpg  |  mpeg |
| .avi  |  x-msvideo |

QuickTime Playerでおなじみの`.mov`ファイルは、`quicktime`でもなく、`mov`でもなく、`qt`です。
これに気づくのにとても時間が掛かってしまいました…。

同じように調べている人がいましたら、この記事が参考になれば幸いです。

## サンプル

```php:app/Http/Requests/HogeRequest.php
    protected function getVideoRule($key)
    {
        return [$key => 'required|mimes:mp4,qt,x-ms-wmv,mpeg,x-msvideo'];
    }
```
Junos On-box Python: IPv4からのCommitを禁止する(ネタ)

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">次の元号はIPv6ですね。ついにIPv6元年がやってきます</p>&mdash; masahiro nagano (@kazeburo) <a href="https://twitter.com/kazeburo/status/818668746873061376">2017年1月10日</a></blockquote>

もうすぐIPv6元年!?ということで() 一発ネタです。
IPv4からのコミットなんて禁止しちゃいましょう。

Junos 16.1R1以降で動作します。
参考: [JunosのOn-box Pythonを使ってみる #2 Commit Script](http://qiita.com/kazubu/items/6d5c94cf32436c4d228f)

# 設定
```commit-script.junos
set system scripts language python
set system scripts commit file commit-script.py
```

# スクリプト
```/var/db/scripts/commit/commit-script.py
from junos import Junos_Context
from jnpr.junos import Device
import jcs
 
def main():
  login_name = Junos_Context['user-context']['login-name']
  host_name = Junos_Context['hostname']
  product_name = Junos_Context['product']
  tty_dev = Junos_Context['tty'].replace('/dev/','')
 
  dev = Device()
  dev.open()
 
  sessions = dev.rpc.get_system_users_information(no_resolve=True)
 
  user_ip = None
 
  for session in sessions.getiterator("user-entry"):
    if session.find("tty").text.strip() == tty_dev:
      user_ip = session.find("from").text.strip()
 
  if user_ip:
    if user_ip.count('.'):
      jcs.emit_error("Commit through IPv4 is prohibited!!")
 
if __name__ == '__main__':
  main()
```

# 結果

```output.txt
[edit]
root@vmx1# run show system users no-resolve
 2:18PM  up 22 days,  4:15, 1 users, load averages: 0.36, 0.35, 0.33
USER     TTY      FROM                              LOGIN@  IDLE WHAT
root     pts/0    192.168.0.10                     2:18PM      - cli

[edit]
root@vmx1# commit
error: Commit through IPv4 is prohibited!!
error: 1 error reported by commit scripts
error: commit script failure
```

```output-v6.txt
[edit]
root@vmx1# run show system users no-resolve
 2:47PM  up 22 days,  4:44, 1 users, load averages: 0.34, 0.30, 0.27
USER     TTY      FROM                              LOGIN@  IDLE WHAT
root     pts/1    fe80::250:560f:fcb6:4397         2:47PM      - cli

[edit]
root@vmx1# commit
commit complete
```

# さいごに

オチはありません。
よく使うGitコマンドを図解

# 背景
SVNからGitに変更して、Gitコマンドが「どこから」「どこに」「何を」行うのか、迷ったのでGitコマンドの理解を助けるためによく使うコマンドを図にしてみました。

# Gitコマンド 全体図

![command-overview.png](https://qiita-image-store.s3.amazonaws.com/0/50028/77177aa4-0857-bcd9-3078-791c8fa98109.png)

# Git command cheat sheet

参考までに、GitHub 公式の Cheat Sheet リンクを載せておきます。
https://services.github.com/on-demand/downloads/github-git-cheat-sheet.pdf