OmniAICreator/Qiita-1.07M huggingface dataset:
コマンドラインでEclipse

# 目的
Eclipseをコマンドラインで実行しよう。
# なぜコレを調べたのか
EclipseでC/C++プロジェクトのソフトウェアを開発していた。
Jenkinsでナイトビルドをかける事を想定していた。
makefileはEclipseが自動で作ってくれる。
だから、コマンドラインでフツーにmakeしていた。
でも、makefile（Eclipseが自動生成するファイルなど）は、
ソースセーフ（今回はgit）に登録したくないよね。
でも、そうしたらJenkinsで、gitからソース持ってきてmake出来ないじゃん。
Eclipseをコマンドラインで実行できる方法を調べる事にした。
# 試した環境
Linux上でC/C++プロジェクトをEclipseのワークスペースに追加した状態で、
コマンドラインからクリーンビルド。
# 使い方
```bash
./eclipse -nosplash --launcher.suppressErrors -application org.eclipse.cdt.managedbuilder.core.headlessbuild -data {workspaceDir} -cleanBuild {projectName}/Release
```

# 引数の説明
|引数|説明|
|:--|:--|
|-nosplash|Eclipse スプラッシュ画面を無効にします。|
|--launcher.suppressErrors|エラーをグラフィカルダイアログに報告するのではなく、コンソールに出力します。|
|-application org.eclipse.cdt.managedbuilder.core.headlessbuild|Eclipse に headless builder を実行することを指示するための必須引数です。|
|-data {workspaceDir}|ワークスペースの場所を指定します。|
|-import {projectDir}|指定したディレクトリからワークスペースにプロジェクトをインポートします。複数のプロジェクトをインポートするには、このオプションを複数回使用します。|
|-build {projectName[/configName] or all}|指定した名前のプロジェクト、またはワークスペース内のすべてのプロジェクトをビルドします。デフォルトでは、この引数は、各プロジェクト内のすべてのコンフィギュレーションをビルドします。プロジェクト名の直後を '/' で区切ってコンフィギュレーション名を指定すると、この動作をデバッグやリリースなど 1 つのコンフィギュレーションに限定できます。複数のプロジェクトをビルドするには、このオプションを複数回使用します。|
|-cleanBuild {projectName[/configName] or all|指定した名前のプロジェクト、またはワークスペース内のすべてのプロジェクトをクリーンアップしてビルドします。デフォルトでは、この引数は、各プロジェクト内のすべてのコンフィギュレーションをクリーンアップしてビルドします。プロジェクト名の直後を '/' で区切ってコンフィギュレーション名を指定すると、この動作をデバッグやリリースなど 1 つのコンフィギュレーションに限定できます。複数のプロジェクトをクリーンアップしてビルドするには、このオプションを複数回使用します。|

# 参考URL
[コマンドラインから Eclipse](http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0478uj/ris1421682431227_00015.html)
Railsでheaderとfooterを固定(fixed)にして、中のコンテンツのみをスクロールさせる方法

ページスクロール時にheaderとfooterは固定して中のコンテンツのみをスクロールさせる方法です。
以下コードはRailsでなくても使用できます。

```layouts/_user_header.html.erb
<!-- Start header --><header>
<nav class="navbar navbar-default navbar-fixed-top">
  <div class="container-fluid">
    <!-- Brand and toggle get grouped for better mobile display -->
    <div class="navbar-header">
      <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
        <span class="sr-only">Toggle navigation</span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </button>
      <%= link_to "アプリロゴ", root_path, class: "navbar-brand" %>
    </div>
    <!-- Collect the nav links, forms, and other content for toggling -->
    <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
      <ul class="nav navbar-nav navbar-right">
        <li><%= link_to "ページ1", hoge_path %></li>

        <li class="dropdown">
          <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">メニュー<span class="caret"></span></a>
          <ul class="dropdown-menu">
            <li><%= link_to "ページ2", fuga_path %></li>
            <li><<%= link_to "ページ3", fuga_path %>/li>
          </ul>
        </li>
        <% if user_signed_in? %>
          <li><%= link_to 'プロフィール', user_path(current_user) %></li>
          <li><%= link_to 'ログアウト', destroy_user_session_path, method: :delete %></li>
        <% else %>
          <li><%= link_to 'ログイン', new_user_session_path %></li>
          <li><%= link_to 'サインアップ', new_user_registration_path %></li>
        <% end %>
      </ul>
    </div><!-- /.navbar-collapse -->
  </div><!-- /.container-fluid -->
</nav>
<!-- //END header --></header>
```

```show.html.erb
<%= render 'layouts/user_header' %>
<div class="wrapper">
-- コンテンツ --
</div>
<footer class="hoge_footer">フッター</footer>
```

```aplication.css.scss
html {
  position: relative;
  min-height: 100%;
}

body {
  /* フッタと同じ高さに設定 */
  margin-bottom: 60px;

  /* 一番下までスクロールした時の余白 */
  padding-bottom: 0;
}
```

```job_administrations.scss
.hoge_footer {
  position: fixed;
  bottom: 0;
  margin-bottom: 0;
  width: 100%;

  /* フッタの高さ */
  height: 60px;
  background: #fff;
  color: #000;
}
```

参考サイト
http://jirolabo.hatenablog.com/entry/2014/11/10/210550
Gitさん...俺はファイルのパーミッションを変更させたくないんだ

# 何が起きたのか
チェックアウトする度にファイルのパーミッションが書き換わって画像の上書き保存ができない:sob:

仕方ないから毎回毎回毎回毎回chmodしてたけど、もう限界なんです:poop:


# パーミッション変更を無視する設定があった

core.filemodeをfalseにすればパーミッションの変更が無視されるらしい。

```shell-session
$ git config core.filemode false
```

確認は以下のコマンド

```shell-session
$ git config -l | grep filemode
core.filemode=false
```

快適どす:ok_woman_tone1:
SICPを読みやすくするBookmarklet

プログラムやコンピューティングを基本から学びたいと思い、[html版SICP](http://sicp.iijlab.net/fulltext/xcont.html)を見に行ったら思いの外読みにくかったので、簡単にスタイルを当てるbookmarkletを書いた。


```javascript
javascript:(function(){ document.querySelector('body').style.fontFamily = "'Helvetica Neue', Helvetica, Arial, 'Hiragino Sans', 'ヒラギノ角ゴシック', 'Hiragino Kaku Gothic ProN', 'ヒラギノ角ゴ Pro W3',Verdana, Roboto, 'メイリオ', Meiryo, 'ＭＳ Ｐゴシック', sans-serif";document.querySelector('body').style.fontWeight = 300;document.querySelector('body').style.margin = '0 auto';document.querySelector('body').style.lineHeight = '2rem';document.querySelector('body').style.padding = '0 8px'; document.querySelector('body').style.maxWidth = '700px';})()
```

## これが
<img width="641" alt="スクリーンショット 2017-04-05 12.00.47.png" src="https://qiita-image-store.s3.amazonaws.com/0/43333/9b4265ff-e42b-4803-212d-519891cc4257.png">


## こうなる。
<img width="646" alt="スクリーンショット 2017-04-05 12.01.06.png" src="https://qiita-image-store.s3.amazonaws.com/0/43333/7a0a529c-495e-6be3-bdb9-510c4c47f6db.png">
二輪倒立走行体のシュミレーション

# 概要
arduinoで、二輪倒立走行体を作ったが、起たないので、シュミレーションしてみた。

# 写真
![MVC-016S.JPG](https://qiita-image-store.s3.amazonaws.com/0/18104/f66ef43e-e0ee-7f0c-0bb6-efd676c607ec.jpeg)

# ライブリーの選択
！マークの様に、上がボックス型の剛体、下はホイールでモーターで動く。
物理シュミレーションをしたいので、以下の三つを調査。
## box2dweb
debugdrawが、すばらしいけど。
b2RevoluteJointDefで、ホイールに出来ず。

## liquidfun
googleぽい
b2RevoluteJointDefで、ホイールに出来ず。

## box2djs
http://jsdo.it/ichiro.maruta/2d-robot-sumo
すばらしいのが、見つかった。
b2RevoluteJointDefで、ホイールに出来た。
m_linearVelocityで、剛体の傾き取れた。
SetMotorSpeedで、回転方向変えられた。

# 起つ方の制御
PIDコントロールを採用

# 写真
![](http://jsdo-static-contents.s3.amazonaws.com/images/capture/u/f/L/ufL28.jpg?t=1491201352)
起った。

# 成果物
http://jsdo.it/ohisama1/ufL28
プロキシ下で OracleDatabase 12.2 の docker image をビルド

またしてもプロキシで詰まったので忘れないようにメモ。
proxy環境下でdockerでoracle database 12CR2のイメージをビルドするまで。

# 結論（今回の原因）
環境変数 proxy をよく確認しよう。

「`docker-machine create --engine-env http_proxy=hogehoge`」と
「docker-machine 作成後に machine 内で `export http_proxy=hogehoge`」
は**似ているようで違う**


# 環境
* docker toolbox (Windows 10 Pro)
* Docker version 17.03.1-ce
* 会社のプロキシ環境下
* docker-machine に Tera Term から ssh接続

基本的にdocker-machien 内での操作がメインになります


# 準備
* 公式のデータベースイメージをダウンロード
* 公式で配布されているdockerfileを持ってくる

ここら辺は他の方の記事読んでください。。。
（そのうちここでもちゃんと記載しますごめんなさい）

# 実行
```
$ cd /ファイルパス/docker-images-master/OracleDatabase/dockerfiles
$ sh buildDockerImage.sh -v 12.2.0.1 -e
```
-v はバージョン、-e はエンタープライズ

始めに容量などのチェックが行われた後、dockerfileによるbuildが始まる。
今回は -e を指定したので、dockerfiles/12.2.0.1/Dockerfile.ee を
元にbuildされる

# 結果
```
Step 7/16 : RUN chmod ug+x $INSTALL_DIR/*.sh &&     sync &&     $INSTALL_DIR/$CHECK_SPACE_FILE &&     $INSTALL_DIR/$SETUP_LINUX_FILE
 ---> Running in 97d7febe3527
Loaded plugins: ovl
http://yum.oracle.com/repo/OracleLinux/OL7/UEKR4/x86_64/repodata/repomd.xml: [Errno 14] curl#7 - "Failed connect to yum.oracle.com:80; Operation now in progress"
Trying other mirror.
```
まさかの繋がらないエラー。

# 原因
machine内で環境変数 http_proxy や https_proxy が設定されていなかった。
（`docker-machine create --engine-env http_proxy=hogehoge`　でされてると思ってた）

環境変数は `echo $http_proxy` とか `printenv` で確認。

# 対処
ごり押しで環境変数設定。
```
export http_proxy=http://proxy.hogehoge.jp:8080
export http_proxy=http://proxy.hogehoge.jp:8080
```
設定した後上記のシェルスクリプトをもう一度実行。

# 最終結果
```
$ docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
oracle/database     12.2.0.1-ee         e79810d7c982        About an hour ago   14.8 GB
oraclelinux         7-slim              f005b5220b05        6 weeks ago         114 MB
```

無事に入ってくれました！

# 最後
環境変数ゎ大事。

`docker-machien create --engine-env http_proxy=hogehoge`

で設定される環境変数は、docker のエンジンに対してのみ有効
つまりmachine内でのdockerコマンドに対してのみ適用される。
（オプションの名前が engine-env だから当然でしたね。。。）
HARK をインストールした仮想環境を vagrant で作る (Ubuntu 16.04, HARK 2.3.0)


# なんの記事か

以前、HARK の環境を Vagrant で作る記事を書いた。
http://qiita.com/mzmttks/items/b6f45c97e662bd32eeb0

今回は、最新の環境での作り方を書く。ほとんど変更はない。


# 方法

## ステップ 1
必要なファイルは次の二つ。これらを一つのディレクトリに入れて、そのディレクトリで `vagrant up` を実行する。
それぞれのファイルの中身は本記事の最後に書く。

1. Vagrantfile
   vagrant の設定ファイル

2. playbook.yml
   vagrant で仮想マシンを上げた後の設定。

## ステップ 2

Vagrantfile で 192.168.33.10 と設定しているので、
ブラウザから `http://192.168.33.10:3000` にアクセスすると
HARK Designer が立ち上がる。

# ファイルの中身

## Vagrantfile
```
# -*- mode: ruby -*-
# vi: set ft=ruby :


Vagrant.configure('2') do |config|

  config.vm.hostname = "hark"

  config.vm.provider "virtualbox" do |provider, override|
    override.vm.box = "ubuntu/xenial64"
    override.vm.network "private_network", ip: "192.168.33.10"
    override.vm.network :forwarded_port, host: 3000, guest: 3000

    # Display the VirtualBox GUI when booting the machine
    provider.gui = false

    # Customize the amount of memory on the VM:
    provider.memory = "1024"
  end

  config.vm.provision "shell", inline: <<-SHELL
    apt install python -y
  SHELL

  config.vm.provision :ansible do |ansible|
    ansible.playbook = "playbook.yml"  # playbookファイル名
    ansible.verbose = "vvvv"
    ansible.host_key_checking = false
  end
end
```

## playbook.yml
```
- hosts: all
  become: yes
  tasks:
    - name: install python
      apt: name=python state=present force=yes

    - name: add HARK repository
      apt_repository:
        repo: 'deb http://archive.hark.jp/harkrepos xenial non-free'
        state: present

    - name: upgrade system
      apt: upgrade=dist update_cache=yes

    - name: install HARK packages
      apt: name={{ item }} state=present force=yes
      with_items:
        - harkfd
        - hark-sss
        - hark-designer
        - hark-python
        - hark-binaural
        - hark-binaural+

    - name: install pm2
      npm: name={{ item }} global=yes
      with_items:
        - pm2
    - name: run hark designer
      shell: pm2 start app.js --node-args "app.js allowremote"
      args:
        chdir: /usr/lib/hark-designer
    - command: pm2 startup
    - command: pm2 save
```
そうだ！、Lambdaをはじめよう

仕事が一区切りついたので、新しい技術を勉強してみようと思います。

前々から気になっていたのがLambdaです。（いまさらですが）
業務でAWSの各種サービスを使っていましたが、Lambdaを扱うことが無かったので、ちょっと使ってみようと思います。

# まずはAWSアカウントの作成

手順については割愛ですが、気になるのは無料枠で使える範囲に収めたいというところです。
アカウントを作成する為にクレジットカードの情報を登録することになりますが、請求の上限を決められないのでドキドキします。


アカウント登録を行い、請求ダッシュボードをみると「予算」というメニューがあります。

ここで毎月の予算額や、予算超過のアラーと設定をすることが出来ます。

予算を超えたらサービスを停止するような設定があればありがたいのですが、さすがに無いですね．．．

と、まあアカウント作成と予算設定が出来たので、次は開発環境を作りたいと思います。
kernel-headersとkernel-devel

## 概要
`kernel-headers`と`kernel-devel`を簡単に調べてみたので自分めも。

## まず
とあるCentOS6.8の初期minimalインストール後

```
# rpm -qa | grep kernel
dracut-kernel-004-409.el6_8.2.noarch
kernel-2.6.32-642.15.1.el6.x86_64
kernel-headers-2.6.32-642.15.1.el6.x86_64
kernel-firmware-2.6.32-642.15.1.el6.noarch
kernel-2.6.32-642.el6.x86_64
```


## kernel-headres
`rpm -qa | grep kernel`よりkernel-headersは最初からインストールされている

```
$ rpm -qi kernel-headers
・
・
Description :
Kernel-headers includes the C header files that specify the interface
between the Linux kernel and userspace libraries and programs.  The
header files define structures and constants that are needed for
building most standard programs and are also needed for rebuilding the
glibc package.
```
```
$ rpm -ql kernel-headers | more
/usr/include/asm
/usr/include/asm-generic
/usr/include/asm-generic/auxvec.h
/usr/include/asm-generic/bitsperlong.h
/usr/include/asm-generic/errno-base.h
/usr/include/asm-generic/errno.h
/usr/include/asm-generic/fcntl.h
/usr/include/asm-generic/int-l64.h
/usr/include/asm-generic/int-ll64.h
/usr/include/asm-generic/ioctl.h
/usr/include/asm-generic/ioctls.h
/usr/include/asm-generic/ipcbuf.h
・
・
```

/usr/includeに配置されている。説明通り/usr/include以下はユーザ側に提供しているファイルの集合。

### こんな感じ
* /usr/include
  - glibcから提供のヘッダファイル
* /usr/include/linux
  - カーネルソースコード由来のヘッダファイル
* /usr/include/sys
  - カーネルから提供(システムコールなど)
* /usr/include/net
  - ネットワーク関連

## kernel-devel
自分でインストールする必要あり

```
$ rpm -qi kernel-devel
・
・
Description :
This package provides kernel headers and makefiles sufficient to build modules
against the kernel package.
```
説明通りカーネルモジュールを作成するための十分なヘッダとmakeファイルがはいっている。.cも入っていたけど、これはカーネルソースとはまた異なるっぽい。kernel orgなどからダウンロードできるカーネルソース一式とは異なる。カーネルモジュールを作成ためのもの。
Gitでブランチを一括で消したかったりするときのあれこれ


* 自分メモ

## ブランチの一覧

* ローカル
	
	```bash:console
	git branch
	```

* リモート
	
	```bash:console
	git branch -r
	```

## ブランチ削除

* ローカル
	
	```bash:console
	git branch --delete $branch_name
	
	または
	
	git branch -d $branch_name
	```

* リモート
	
	```bash:console
	git push origin :$branch_name
	
	または
	
	git push --delete origin $branch_name
	```

## マージ済みのブランチを一括で削除する

* ローカル
	
	```bash:console
	git branch --merged | grep -v 'master' | grep -v '* ' | xargs git branch --delete
	``` 

* リモート

	```bash:console
	git branch -r --merged | grep -v 'origin/master' | grep -v '\->' | awk -F'/' '{print $NF}' | xargs git push --delete origin
	```
bootstrap4のグリッドシステムを理解する

いまだ正式版が公開されないままのbootstrap4。
そのグリッドシステムについて、bootstrap3と何が違うかや新機能について理解を深めようと思います。

[本家ドキュメント(英語)](https://v4-alpha.getbootstrap.com/layout/grid/)


## 大きな変更 -> flexboxの採用

グリッドシステムはflexboxを採用したので、より柔軟なサイズを指定しない`col`が導入されました。
今までは`col-sm-4`や`col-md-3`などで適用するブレイクポイントとサイズの指定を行なっております。
bootstrap4ではこの指定を残しつつ、新たにサイズを指定しない`col`の指定が可能になります。
この`col`は`row`でラップされている内容の`col`の個数によって自動的に幅を決定します。
また、`col-6`のように従来と同様に幅を１２分割のうちの割合として指定できます。
従来では不可能だった奇数割合をさらに２分割といったことも可能になります。


```
<div class="container">
  <div class="row">
    <div class="col">
      1 of 3
    </div>
    <div class="col">
      1 of 3
    </div>
    <div class="col">
      1 of 3
    </div>
  </div>
  <div class="row">
    <div class="col">
      1 of 3
    </div>
    <div class="col-5">
      2 of 3 (wider)
    </div>
    <div class="col">
      3 of 3
    </div>
  </div>
</div>
```

上記例の２段目では5割の余白である７割分を２分割しております。
この仕様により、より柔軟なレイアウトが可能になります。

各ブレイクポイントにおいても`col-md-auto`のように`-auto`指定により明示的にcolと同様の設定が可能です。

```
<div class="container">
  <div class="row justify-content-md-center">
    <div class="col col-lg-2">
      1 of 3
    </div>
    <div class="col-12 col-md-auto">
      Variable width content
    </div>
    <div class="col col-lg-2">
      3 of 3
    </div>
  </div>
</div>
```

各行の幅を統一したい場合は`w-100`を使用できるとありますが、空div前提なのはちょっと問題がありそうです。

```
 <div class="row">
   <div class="col">col</div>
   <div class="col">col</div>
   <div class="w-100"></div>
   <div class="col">col</div>
   <div class="col">col</div>
 </div>
```

## 大きな変更その２ -> セルの位置調整

### 縦位置の調整

各行に対しての縦位置は`align-items-`によって設定します。
上寄せ　`<div class="row align-items-start">`
中央寄せ`<div class="row align-items-center">`
下寄せ　`<div class="row align-items-end">`

それぞれのセルの縦位置指定は`align-self-`によって指定します。

上寄せ  `<div class="col align-self-start">`
中央寄せ`<div class="col align-self-center">`
下寄せ　`<div class="col align-self-end">`

### 横位置の指定
セルの分割割合が１２に足りない時のセルの配置指定もあります。

左寄せ　`<div class="row justify-content-start">`
中央寄せ`<div class="row justify-content-center">`
右寄せ　`<div class="row justify-content-end">`
余白含み均等割　`<div class="row justify-content-around">`
余白含まず均等割`<div class="row justify-content-between">`

## ネガティブマージンの除去
bootstrap4のグリッドシステムは、rowでネガティブマージンを設定し、各セルでパディングを指定することで余白を設定しております。`no-gutters`はそのマージンとパディングを削除します。余白を含まないパネルデザインを作成するときなどに使用するかと思います。

## paddingの変更はsassで
各セルごとの隙間はsassで一括変更可能になりました。

```
$grid-columns:               12 !default;
$grid-gutter-width-base:     30px !default;
$grid-gutter-widths: (
  xs: $grid-gutter-width-base,
  sm: $grid-gutter-width-base,
  md: $grid-gutter-width-base,
  lg: $grid-gutter-width-base,
  xl: $grid-gutter-width-base
) !default;
```
`$grid-columns`がカラム数　`$grid-gutter-width-base`がセルごとの隙間です。

大きな変更点は以上だと思います。
RDS for PostgreSQL で すべてのクエリログを出力

### 前提
- デフォルトのパラーメータグループは変更しない（コピーするなどして別のものを作ってそれを適用する）

### 設定内容
<img width="263" alt="スクリーンショット 2017-04-05 10.36.18.png" src="https://qiita-image-store.s3.amazonaws.com/0/41078/31019296-7043-af50-f262-febc75c74f70.png">

- log_duration 
    - 1にするとすべてのクエリの実行時間を記録
    - なくてもいいかも
- log_min_duration_statement
    - 指定した数値ミリ秒より実行時間が長いクエリをスロークエリとして記録
- log_statement 
    - allにするとDDL含めすべての種類のクエリを記録

### 参考元
- https://www.postgresql.jp/document/9.4/html/runtime-config-logging.html
- http://dev.classmethod.jp/cloud/aws/rds-postgres-log-settings/
- http://pendriven.net/2015/07/08/20150708050903/
shellでSQL発行してグルグル

備忘として

DBはpostgreSQL

shellでselect発行しidを配列に入れグルグルでid名フォルダを消す。

```

#!/bin/sh
Array=()
idx=0
while read ii
do
    echo $ii
    Array[$idx]=$ii
    idx=$(( $idx+1 ))
done<<_EOT_
$( psql -d forth -U dbuser -F $'\n' -Atc"SELECT id FROM table WHERE id " )
_EOT_

echo "--------------------------"
for aa in "${Array[@]}"; do
    ##　echo　はテスト用本来は　rm　でフォルダを消す
    echo "/home/masa/work/"$aa
    ##rm -rf "/home/masa/work/"$aa
done
echo "--------------------------"

```
RDS MySQLにユーザー作成して権限付与する

# 前提

RDS MySQLで[正式にタイムゾーン変更ができる](http://dev.classmethod.jp/cloud/aws/rds-local-time-zone/)ようになっています。
昔はできなかったので、[shared.store_time_zoneを使用する方法](http://dev.classmethod.jp/cloud/aws/change-timezone-on-amazon-rds-mysql/)が採用されていました。
このプロシージャーを利用する環境で一部はまったのでメモです。
// 時代がちょっと古い話なので、今後RDS新規作成する分には関係ない話ですね。

#ユーザー作成

```
CREATE USER 'exporter'@'%'

# 権限付与
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'%';

# パスワード設定
SET PASSWORD FOR exporter = PASSWORD('パスワード')

# shared.store_time_zone用の権限付与
GRANT EXECUTE ON PROCEDURE shared.store_time_zone TO 'exporter'@'%';
```
ちなみに権限が不足していると、次のエラーが出る。

> ERROR : Aborted connection **** to ****: 'unconnected' user: 'exporter' host: '*******' (init_connect command failed)
FreeBSDのcallout

FreeBSDのカーネル内で定期的に処理をしたい場合はcalloutを使うようです。

まず初期化をします。

```
callout_init(&sc->callout_tick, 0);
```

第一引数は初期化するインスタンスで、第二引数はマルチプロセッサー対応かどうかで0は対応していないということのようです。

実際の関数を登録します。

```
callout_reset(&sc->callout_tick, hz, ip17x_tick, sc);
```

hz tick後にip17x_tick関数を実行し引数をscを渡します。ip17x_tickの関数の中でcallout_resetを呼び出す事によって繰り返しip17x_tickが実行される事になります。

止める時は

```
callout_drain(&sc->callout_tick);
```

とします。

[man page](https://www.freebsd.org/cgi/man.cgi?query=callout&apropos=0&sektion=0&manpath=FreeBSD+11.0-RELEASE+and+Ports&arch=default&format=html)
MySQLユーザ作成 [memo]

## ユーザー情報の確認

```sql
select Host, User, Password from mysql.user;
```

## ユーザー追加

``` sql
GRANT <権限> ON <適用範囲> TO <ユーザー名>[@<ホスト名>] IDENTIFIED BY '<パスワード>';
```

* ReadOnlyユーザー追加

``` sql
GRANT SELECT
ON [DB name].* to 'username'@'localhost'
IDENTIFIED BY 'jaLMw8&5nfzN_#4y';
```

## ユーザー権限確認

```sql
SHOW GRANTS FOR 'username'@'localhost';
```

## ユーザー削除

```sql
DROP USER 'username'@'localhost';
```

## 権限の確認
```
SHOW GRANTS FOR 'ユーザ名'@'ホスト名';
```

## 権限の付与
```
GRANT ALL PRIVILEGES ON `DB名`.テーブル TO 'ユーザ名'@'ホスト名';
GRANT SELECT,UPDATE,INSERT,DELETE ON `DB名`.テーブル TO 'ユーザ名'@'ホスト名';
```
アジャイルな方向づけ

## みんなをバスに乗せる
プロジェクトがだめになるのは、チームメンバーが誰もいないところで合意したことを前提にしているから。

###インセプションデッキ

 1. 我々はなぜここにいるのか？
 2. エレベーターピッチを作る
 3. パッケージデザインを作る
 4. やらないことリストを作る
 5. 「ご近所さん」を探せ
 6. 解決案を描く
 7. 夜も眠れなくなるような問題はなんだろう？
 8. 期間を見極める
 9. 何を諦めるかをはっきりさせる
 10. 何がどんだけ必要なのか？

##第4章 全体を捉える
###我々はなぜここにいるのか？
プロジェクトを成功させたいと思いなら、作ろうとしているものの背景にある「なぜ」をつかまなければならない。大事なことは、自分自身が現場で確かめることと「司令官の意図」を把握すること。
###エレベーターピッチを作る
ごく短い時間でアイデアの本質を伝える手段
 1. 明快になる
 2. チームの意識を顧客に向けさせる
 3. 核心を捉える
###パッケージデザインを作る
 1. プロダクトの効能をブレインストーミングする
 2. キャッチコピーを決める
 3. パッケージをデザインする  

###やらないことリストを作る
「やる」の欄にはスコープに入れて取り込むものを並べる。「やらない」の欄にはスコープから外すもの、もう気にしないものを並べる。「あとで決める」の欄には今はどうするか決めかねている項目を並べる。
プロジェクトの置かれている状況とプロジェクトの協会はこれで一目瞭然となる。

###「ご近所さん」を探せ
プロジェクトは考えているよりも大きい。洗い出した連携先のグループについて話し合って、具体的な担当者がわかるか確認してみる。

##第5章 具現化させる
###解決案を描く
技術的な解決案について話し合って、それを図として示す。
 ・ツールや技術に抱く期待をマネージメントできる
 ・想定しているプロジェクトの境界とスコープを目で見て確認できる
 ・リスクを伝えられる

###夜も眠れなくなるような問題はなんだろう？
チームにとって取り組む値打ちのあるリスクを見極める
 ・プロジェクトの課題を早い段階であきらかにできる
 ・「いや、その理屈はおかしい」と表明するチャンス
 ・単純に気持ちがすっきりする

###期間を見極める
自分たちのプロジェクトにどのくらいの期間が必要かを見極める。

###何を諦めるかをはっきりさせる
時間、予算、品質は固定されたものとしてスコープを柔軟に扱う。
トレードオフスライダーを使用し、目に見えるようにする。

###何がどんだけ必要なのか？
チームを編成する。
いつ完了するか？
いくらかかるのか？
AWS Config 基本設定

# Step0:
マネージメントコンソールの「管理ツール」から「Config」をポチ。

# Step1: Settings

## Resource types to record
リージョン限定でないサービスについてもTrackingするために「Include global resources (e.g., AWS IAM resources)」にもチェックを入れます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/159589/7248ac04-603c-1340-c734-8c2ab733a11c.png)


## Amazon S3 bucket*
設定のTrackingを保存します。(デフォルトのままでも良いかと)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/159589/ac60beae-c8cf-0532-eec6-78276433634d.png)


## Amazon SNS topic
SNSで更新などがあった際に通知を飛ばせます。(デフォルトのままでも良いかと)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/159589/e204f5c3-c095-8fe9-7f6c-e18c21f2caae.png)

## AWS Config role
IAMロールの設定です。(デフォルトのままでも良いかと)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/159589/1e2f8497-b465-a850-76c1-bdc0a8f6811d.png)


# Step2: AWS Config rules
ルールを設定し、各サービスの設定がそれに基づいた設定になっているかをチェックするための設定です。今回はパスします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/159589/760625f2-3c8f-99cc-5105-2d0a4ce17986.png)

# Step 3: Review
以上です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/159589/3cabf461-60c6-1fec-83c5-95bc973315e4.png)


# 通知
先ほどAWS ConfigでSNSの設定をしましたが、実際に通知機能を設定してみます。
SNSでTopicsに入り、先ほど作ったconfig-topicsのARNを選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/159589/50c77829-39eb-9992-daf6-5ad388c9efe0.png)


すると以下のtopic詳細画面が出てきます。
ここから、「Create subscription」を選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/159589/b252c5aa-75df-83e9-6204-3e393da92f0f.png)

Emailを選択し、通知したいメールアドレスを入力します。
そして「Create subscription」をポチ。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/159589/dbc398c1-160c-07d8-2193-ed811bd26bcc.png)

入力したメールアドレスに確認メールがきますので、「Confirm subscription」をポチ。

以上でリソースを変更したら通知がドサドサきます。
アイコンフォントを使って、ボタンのdrawableLeft/Rightに画像を設定する方法(Iconics編)

## 概要
アイコンフォント便利ですよね！
アイコンフォントを使うと、テキストの中でアイコン画像を表示することができます。
つまり、アイコン＋テキストのボタン等が簡単に作れます。
ただ、一つの要素として表示されるため、テキストとアイコンとで違うサイズを使えなかったり、アイコンとテキストでベースラインが揃ってしまう問題があります。

Androidのボタンは、drawableLeftやdrawableRight属性を使うことで、ボタン内にアイコンを表示できます。
この属性を使うと先の問題が解決できそうですが、イメージを指定する必要があるため、そのままでは使えません。

そこで、アイコンフォントをdrawable vectorに変換して、アイコンとして表示する方法について説明します。

アイコンフォントを使うためのライブラリとしては、[Iconics](https://github.com/mikepenz/Android-Iconics)を利用します。

## 結果
下記のようにdrawable_icon_font_left属性を指定すると、いい感じにアイコンを表示してくれます。

```xml
<Button
    android:text="{faw-android} android"
    />
<Button
    android:text="android"
    app:drawable_icon_font_left="@{`faw_android`}"
    />
```

![image1](https://github.com/ayakix/Drawable-Icon-Font/raw/master/images/image1.png)

## 仕組み
### IconicsのインストールとdataBindingの有効化
**build.gradle** で下記の設定を追加します。ここでは例として、AwesomeFontを使ってみます。

```
android {
    ...
    dataBinding {
        enabled = true
    }
}

dependencies {
    ...
    compile "com.mikepenz:iconics-core:2.8.2@aar"
    compile 'com.mikepenz:fontawesome-typeface:4.7.0.0@aar'
}
```

### Iconicsの有効化
利用するActivityやFragmentで下記の設定を追加します。

```java
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        LayoutInflaterCompat.setFactory(getLayoutInflater(), new IconicsLayoutInflater(getDelegate()));

        super.onCreate(savedInstanceState);
        DataBindingUtil.setContentView(this, R.layout.activity_main);
    }
}
```

### BindingAdapterの定義
**drawable_icon_font_left** 属性を定義します。

メソッド内では、指定された文字からDrawableを生成します。
その際に、好みに合わせて、テキストと同じカラーを設定したり、アイコンサイズをテキストサイズと比べて少し大きいものを設定できます。

```java
public class BindingAdapterManager {

    @BindingAdapter("drawable_icon_font_left")
    public static void setDrawableIconFontLeft(final Button button, final String icon) {
        final Context context = button.getContext();
        final IconicsDrawable iconicsDrawable = new IconicsDrawable(context)
                .icon(FontAwesome.Icon.valueOf(icon))
                .color(button.getCurrentTextColor())
                .sizePx((int)(button.getTextSize() * 1.25));
        button.setCompoundDrawables(iconicsDrawable, null, null, null);
    }
}
```

## サンプル
[Drawable-Icon-Font@github](https://github.com/ayakix/Drawable-Icon-Font)に動作するプロジェクトがあります。

## 謝辞
このTipsは、「スマホの写真素材が売買できるサイト[Snapmart](https://snapmart.jp/)」を開発する中で生まれました。
Android版は開発中なため、残念ながらまだ利用できません。
iPhoneをお持ちの方は、是非ダウンロードしてお使いください！
[Snapmartアプリ（iOS）](https://itunes.apple.com/jp/app/id1087206878)
Pickleの使い方について、あまり言及されてないこと

なんか気になったのでメモ。

pickleモジュールを使うと、バイナリデータとしてデータを保存することができる。

ここまでは良い。いろんなサイトで使い方が解説されていて、便利だ。

でもこいつに関しての情報が全くと言って、存在しない。

```py3
with open("test.pickle","wb") as f:
        for i in range(10):
            data = {i:"<<<data%d>>>" % i}
            pickle.dump(data,f)
```

このtest.pickleファイルには以下の情報が格納されたわけですが。

```pickle
{0: '<<<data0>>>'}
{1: '<<<data1>>>'}
{2: '<<<data2>>>'}
{3: '<<<data3>>>'}
{4: '<<<data4>>>'}
{5: '<<<data5>>>'}
{6: '<<<data6>>>'}
{7: '<<<data7>>>'}
{8: '<<<data8>>>'}
{9: '<<<data9>>>'}
```

こいつらをload()するには、

```py3
with open("test.pickle","wb") as f:
        for i in range(10):
            yield pickle.load(f)
```

とかなんとかやってやりゃあいいんだけど、

たとえば、3番目のでーただけ欲しいぜ！って時は上から読み込まなきゃいけないのかな。
そこら辺の使い方がどうも転がっていない様子。

だれかご存知でしたら、ご教授ください。


## 追記

```py3
def get():
    with open("test.pickle","rb") as f:
        while True:
            try:
                yield pickle.load(f)
            except:
                break
data = get()
d = list(data)[3]
print(d)
```

```py3
{3: '<<<data3>>>'}
```
これで無事4番目のデータだけを取得できたけど、メモリ的にやさしい取り方なのかな？
[技法]ORM-オブジェクト関係マッピング

後で補足したいです。先ず、メモ。

*参考*
・[ORM-wiki](https://ja.wikipedia.org/wiki/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E9%96%A2%E4%BF%82%E3%83%9E%E3%83%83%E3%83%94%E3%83%B3%E3%82%B0)
Redmineを3.1.2から3.3.2へバージョンアップする手順

# はじめに
この記事では、CentOSで運用しているRedmine(Bitnami利用)を3.1.2から3.3.2へバージョンアップする手順をざっくりまとめています。

以下が前提です

- CentOS Linux release 7.3.1611 (Core)
- Bitnami Redmine 3.1.2-0から3.3.2-2へバージョンアップ
- 別サバは立ち上げない
- 中の人はLinux初心者


# バージョンアップ方法の調査
Bitnamiの説明では新しいサーバを立ち上げてデータを移行するとある。
https://docs.bitnami.com/installer/apps/redmine/\#how-to-upgrade-redmine

その他のことは特に書かれていないので、実際にやってみました。


# 実際のバージョンアップ手順
3.1.2-0がインストールされている状態で3.3.2-2をインストールします。

### 下準備
* 現行DBのダンプ取得
    * /hogehoge/redmine-3.1.2-0/use\_redmine
    * cd /opt/redmine-3.1.2-0/mysql/bin
    * mysqldump --default-character-set=utf8 -u bitnami -pXXXXXXXXXX bitnami\_redmine > /hogehoge/redmine_db_vup.dump

* 現行サービス停止
    * MySQL
    * apache  
※停止しておかないと新バージョンの使用ポート81で設定しようとする


* 新しいインストーラ(3.3.2-2)に必要なライブラリを導入
    * sudo yum install -y perl-Data-Dumper  
※私の環境ではこれがないとインストーラがこけました


### Bitnami Redmine 3.3.2-2のインストール
*   インストーラに実行権限付与
    * chmod +x /hogehoge/bitnami-redmine-3.3.2-2-linux-x64-installer.run
*   インストーラの実行
    * sudo /hogehoge/bitnami-redmine-3.3.2-2-linux-x64-installer.run
*   言語選択ダイアログが表示される
    * Japaneaseを選択してOK
*   次へ
*   コンポーネントの選択
    * SubversionやGitは入れておかないと後々面倒
*   インストールフォルダ選択
    * 任意の設定にし次へ
*   管理者アカウントの作成
    * 現行サーバと同様のアカウントを作成
*   データベースに保管する際の規定の言語
    * 日本語を選択し次へ
*   SMTP設定
    * 任意の設定にし次へ
*   Bitnami Cloud Hosting
    * 特には必要ないのでチェック外して次へ
*   インストールする準備ができました
    * 次へ
*   接続確認  
外部からhttp://hoge/redmine にアクセス

### データの移行
*   apache停止
*   DBを一旦削除
    * /hogehoge/redmine-3.3.2-2/use_redmine
    * mysql -u root -p
    * Password: xxxxxxxxxx  
※パスワードはdatabase.ymlで確認
    * mysql> drop database bitnami_redmine;
    * mysql> create database bitnami_redmine;
    * mysql> grant all privileges on bitnami_redmine.* to 'bn_redmine'@'localhost' identified by 'xxxxxxxxxx';  
※ここで任意の新しいパスワードを設定することもできる
    * mysql> exit;
*   DBのインポート
    * mysql -u root -pxxxxxxxxxx bitnami_redmine < /hogehoge/redmine_db_vup.dump
*   DBのマイグレーション
    * cd /hogehoge/redmine-3.3.2-2/apps/redmine/htdocs
    * ruby bin/rake db:migrate RAILS\_ENV=production
*   各種ファイルの配置
    *   テーマ  
以下に配置
        *   /hogehoge/redmine-3.3.2-2/apps/redmine/htdocs/public/themes
    *   添付ファイル  
以下に配置
        *   /hogehoge/redmine-3.3.2-2/apps/redmine/htdocs/files
    *   添付ファイルフォルダの権限設定
        * chown -hR daemon:daemon /hogehoge/redmine-3.3.2-2/apps/redmine/htdocs/files
        * chmod -R 775 /hogehoge/redmine-3.3.2-2/apps/redmine/htdocs/files

### プラグインの移行
*   旧環境のプラグインを以下へコピー
    * /hogehoge/redmine-3.3.2-2/apps/redmine/htdocs/plugins
*   マイグレーション
    * /hogehoge/redmine-3.3.2-2/use_redmine
    * cd /hogehoge/redmine-3.3.2-2/apps/redmine/htdocs
    * 必要ならばプロキシの設定
        * export http_proxy=http://xxx.xxx.xxx.xxx:xxxx/
        * export https_proxy=http://xxx.xxx.xxx.xxx:xxxx/
    * bundle config build.nokogiri --use-system-libraries  
※私の環境ではnokogoriのビルドにシステムのライブラリを使うための指定が必要でした
    * bundle install
    * bundle exec rake redmine:plugins:migrate RAILS_ENV=production
    * apache再起動

### 動作検証
バージョンアップに伴い外観が変わってしまったり、動作しなくなったプラグインなどを修正。

# 所感
- データの移行自体は簡単です
- バージョンアップに伴うプラグインの修正に一番時間が掛かりました
アジャイル入門。



## ざっくりわかるアジャイル開発
アジャイルとは「顧客満足を最優先し、価値あるソフトウェアを早くに提供する」
###開発チームとして大事にしなければいけないこと。

 1. 大きな問題は小さくする
 2. 本当にだいじなことに集中して、それ以外のことは忘れる
 3. ちゃんと動くソフトウェアを届ける
 4. フィードバックを求める
 5. 必要とあらば進路を変える
 6. 成果責任を果たす

###3つの真実

 1. プロジェクトの開始時点にすべての要求を集めることはできない 
 2. 集めたところで要求はどれもかならずといっていいほど変わる
 3. やるべきことはいつだって与えられた時間と資金より多い

## アジャイルチームの紹介
###アジャイルな顧客
プロジェクト成功は顧客の積極的な参加が重要。
　・何を作るか決める
　・優先順位をつける
　・スコープについて厳しい決断を下す
###アジャイルなアナリスト
どうやって実現するかをしっかり詳細まで調べる。
　・ユーザストーリーを書くのを手伝う
　・詳細な分析をこなす
　・必要な調査をしっかりやり遂げる
###アジャイルなプログラマ
質の高いソフトウェアを生み出すことに心血を注ぐプロフェッショナル
　・ユーザストーリーを動くソフトウェアにする
　・見積もり
　・技術的な判断を下す
###アジャイルなテスター
　・ユーザストーリーのテストを書くのを手伝う
　・ストーリーが期待通りに動くことを確認する
　・テストの全体像を考える
###アジャイルなプロジェクトマネージャー
マネージャーが手助けするのは環境を整えること。
　・いまどうなってるか追跡する
　・プロジェクトの状況を伝える
　・チームのいくてを阻む障害を取り除く

##ドラッカー風エクササイズ
プロジェクトを始める前にこんな質問してみたらどうだろう？
　・自分は何が得意なのか？
　・自分はどうやって貢献するつもりか？
　・自分が大切に思う価値は何か？
　・チームメンバーは自分にどんな成果を期待していると思うか？

チームメンバー同士でこの質問に答えてみよう。
お互いの考えを交換し合うんだ。
IntelliJのIDEでプロジェクトのESLintを使ってLint Errorをなくす

フロントエンドのJSプロジェクトに参加し、コードを書いてテストとLintを走らせてLintエラーを拾って直してた。
昨晩そもそもIDEに任せてLintを回収できそうだということに気づいて、設定したら非常に快適（になる予定）。

## やり方
「Preference」→「Language ＆ Framework」→「Javascript」→「Code Quolity Tools」→「ESLint」

私の場合、インタープリタの設定など終わっていたのでEnableにチェックを入れるだけで済んだ。
RaspberryPi+Electronでカメラ出力

## 内容
RaspberryPiでElectronを使用し、カメラからの映像をデスクトップに出力する。

## 結果
出来ました。
![2017-04-05_09-04-33_426.jpeg](https://qiita-image-store.s3.amazonaws.com/0/8585/a08dc075-803a-69ba-0d4e-cd00ada9c2d0.jpeg)

カメラの様子
![2017-04-05_09-32-02_285.jpeg](https://qiita-image-store.s3.amazonaws.com/0/8585/a927ab4e-5b13-577e-1175-8c5b97bcce25.jpeg)


## やり方

### 構成

- RaspberryPi2 ModelB
- USBカメラ(BUFFALO製・130万画素)
- node v.7.7.4
- electron v1.4.13

### ソースコード

特に凝ったことはせず、Electronで画面を作るだけ。

- index.js

```js
'use strict';

var electron = require('electron');
var app = electron.app;
var BrowserWindow = electron.BrowserWindow;
var Menu = electron.Menu;
var mainWindow = null;
var remote = require("electron").remote;

app.on('window-all-closed', function() {
  if (process.platform != 'darwin')
    app.quit();
});

app.on('ready', function() {
  // メニューをアプリケーションに追加
  Menu.setApplicationMenu(menu);
  openWindow();
});

function openWindow() {
  mainWindow = new BrowserWindow({width: 800, height: 600});
  mainWindow.loadURL('file://' + __dirname + '/index.html');
  mainWindow.on('closed', function() {
    mainWindow = null;
  });
}

function fullscreen(){
  var w = BrowserWindow.getFocusedWindow();
  w.setFullScreen(!w.isFullScreen());
}


var template = [
  {
    label: 'ReadUs',
    submenu: [{label: 'Quit', accelerator: 'Command+Q', click: function () {app.quit();}}]
  },

  {
    label: 'View',
    submenu: [
      { label: 'Reload', accelerator: 'Command+R', click: function() { BrowserWindow.getFocusedWindow().reload(); } },
      { label: 'Toggle DevTools', accelerator: 'Alt+Command+I', click: function() { BrowserWindow.getFocusedWindow().toggleDevTools(); } },
      { label: 'Full Screen', accelerator: 'Alt+Command+F', click: fullscreen }
    ]
  }
];

var menu = Menu.buildFromTemplate(template);
```

- index.html

```html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Electron Read Us</title>
<link rel="stylesheet" href="css/index.css">
</head>
<body>
<video id="camera-preview"></video>
<script type="text/javascript" src="app/camera.js"></script>
</body>
</html>
```

- camera.js
画面側でカメラデバイスを`navigator.webkitGetUserMedia`で取得して`<video>`に出力する

```js
'use strict';

var video = document.getElementById("camera-preview");
var handleCameraSuccess = function(mediaStream){
  video.style.display = "block";
  video.src = window.URL.createObjectURL(mediaStream);
  video.play();
};
var handleCameraError = function(){
  alert("カメラ検出に失敗しました");
};
navigator.webkitGetUserMedia({video:true, audio:false}, handleCameraSuccess, handleCameraError);
```


### 知見

- RaspberryPi純正の[カメラモジュール](https://www.raspberrypi.org/products/camera-module-v2/)だとダメでした。`raspstil`で撮影はできるのに、Chromiumには渡せなかった。
- `RaspberryPi 1 ModelB`はElectron自体の起動に難あり。パワー不足だと思います。
- リソース消費はそれなりにある。(`top`コマンドで観察)
  - 単純に画面を起動したときはCPU使用率がバックプロセス、レンダリングプロセスともに約1%程度
  - `camera.js`で画面に映像を出力すると両方のプロセスで16%程度のCPU使用率となる（合計で約30%がElectronで使用される）。
  - 映像出力しているElectronの***ウィンドウを最小化すると両方のプロセスが約5%のCPU使用率にさがる***。
- 表示開始に時間がかかるなどはない（PCでHTMLを開いたときと同じ程度）
- 映像はふつうにスムーズ（スカイプとかと同じ感じ）
Zsh の history を fish で使えるものに変換する

Zsh => fish に移行するときに Zsh の history も移行したいときに変換したメモ。

fish の history ファイルは `~/.local/share/fish/fish_history` にあるが、中を見ると基本的にコマンドとタイムスタンプを記録した YAML だったので Ruby のワンライナーで簡単に変換できた (パスの情報とかも含まれるようだったが無視した) 。

```shell-session
$ fc -lni 1 | ruby -rtime -r yaml -e 'puts STDIN.inject([]) { |a, l| a << { "cmd" => l[16..-1].strip, "when" => Time.parse(l[0..15]).to_i } }.to_yaml(options = { line_width: -1 })' > history-from-zsh.yml
```

これを Zsh で実行してできたファイルを `~/.local/share/fish/fish_history` にコピー (もしくは合体) させればいい。
CDNとは

CDNがわからなかったので調べてみた。

##CDNとは
コンテンツ・デリバリー・ネットワーク（Contents Delivery Network）の略、
コンテンツを高速で、安定して配信するためのネットワーク

##仕組み・構成
登録したwebサイト（example.com）のコンテンツ、（動画、音楽、画像等）を複数のCDNサーバーに、キャッシュしておき、大量のアクセスがあってもキャッシュしたCDNサーバーから安定してコンテンツを配信できるようになっている。

※キャッシュがない場合は、元のexample.comにアクセスさせるように設定されている。
※example.comに対応するipアドレスが変わる為、元のDNSサーバーを変更する必要がある。

CDNの例
[AWS cloud front](https://aws.amazon.com/jp/documentation/cloudfront/)

参考サイト
http://viral-community.com/blog/cdn-5615/
s3cmd コマンドでフォルダを一括ダウンロード

##s3cmdをインストール

```$ brew install s3cmd```

##初期設定

```$ s3cmd --configure```

```
Access Key  S3のアクセスキー指定
Secret Key  S3のシークレットアクセスキーを指定
Encryption password GPG encryptionを用いる事でデータを暗号化してくれる。（とりあえず空欄でおｋ）
Path to GPG program [/usr/bin/gpg]  GPGの場所を指定。（とりあえず空欄でおｋ）
Use HTTPS protocol [No] S3への通信をHTTPSにするか否か
HTTP Proxy server name  Proxyを使う場合はその指定
```

##フォルダを一括ダウンロード
```s3cmd get s3://バケット名/ --recursive```
これで、バケット内のフォルダを一括ダウンロードできます。


##知っておくといいかも

バケットの一覧確認

```$ s3cmd ls```

カレントディレクトリ直下のフォルダを丸ごと同期する

```$ s3cmd sync . s3://BUCKETNAME/```

参考にさせていただいたサイト
http://qiita.com/katsukii/items/73051b3f4c73040e834d
https://www.faq.idcf.jp/app/answers/detail/a_id/360/~/s3cmdのコマンド一覧
Python > function > *argsを引数に取る例

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

```
add_args(5,9)
```

> You can combine this with the *args and **kwargs techniques.

試してみた。

http://ideone.com/MgMBZr

```py
def sum_args(*args):
	return sum(args)
	
res = sum_args(1,2,3,4,5)
print(res)
```

```txt:結果
Success	time: 0 memory: 23304 signal:0
15
```
Python > function > functionを引数に取る例 > map(lambda x: 2 ** x, [1, 2, 3]) / locals()['myprint'](3.1415, 2.718) を教えていただきました

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

functionを引数として渡す例がある。

試してみた。

http://ideone.com/KHr1xa

```py
def myfunc(fnc, arg1, arg2):
	fnc(arg1, arg2)
	
def myprint(arg1, arg2):
    print('%s,%s' % (arg1, arg2))
    
myfunc(myprint, 3.1415, 2.718)
```

```txt:結果
Success	time: 0 memory: 23304 signal:0
3.1415,2.718
```

標準ドキュメントはこのあたりが関係しそう?
[引数の解釈と値の構築](https://docs.python.jp/3/c-api/arg.html?highlight=%E5%BC%95%E6%95%B0#)

### 教えていただいた事項

@shiracamus さんの[コメント](http://qiita.com/7of9/items/0543eaeb7953b32baf9e/#comment-6585b8ed3aa268d84cb5)にて`map()`を使った関数の実行方法について教えていただきました。

また、こちらの[コメント](http://qiita.com/7of9/items/0543eaeb7953b32baf9e#comment-b60804349a319171c38e)にてローカル変数辞書からfunction nameをキーとして呼び出し、実行する方法を教えていただきました。

情報感謝です。
技術英語 > Interpunct > consisting of a vertically centered dot / £21·48

人に聞かれた質問関連で調べて見つけた。

https://en.wikipedia.org/wiki/Interpunct

### Interpunct 

> An interpunct ( · ), also known as an interpoint,[1] middle dot, middot, and centered dot or centred dot, is a punctuation mark consisting of a vertically centered dot used for interword separation in ancient Latin script. 

multiplication dotと区別しているようだ。

用途について以下の記載がある。

> When the British currency was decimalised in 1971, the official advice issued was to write decimal amounts with a raised point (for example, £21·48) and to use a decimal point "on the line" only when typesetting constraints made it unavoidable. This usage, however, has been declining since the mid-1970s, as the importation of electronic typewriters, ...

意訳(間違っている可能性有り)
「1971年に英国通貨で10進数を使うようになった時、公式な推奨が発行された。そこには少数値は引き上げた点とともに書くようにと記載されていた(例: £21·48)。また、タイプセッティングの制約により避けられない場合に限り、少数点は線上において良いとされた。しかしながら、(電子タイプライターの輸入に伴い)1970年代半ば以降この用法(raised dot)は減少していった。」

https://en.wikipedia.org/wiki/Decimal_Day
> Under the old currency of pounds, shillings and pence, the pound was made up of 240 pence (denoted by the letter d for Latin denarius and now referred to as "old pence"), with 12 pence in a shilling and 20 shillings (denoted by s for Latin solidus) in a pound.

昔は10進数でなく、上記のような仕組みだったとのこと。

エマ8巻の「夢の水晶宮」に出てくる「あわせて２シリングと８ペンス」というのはDecimal_Dayより前の通貨体系だったとようやく分かった。
ReactでMaterial-UIを使ってみた

[Material-UI](http://www.material-ui.com)は、reactに特化したマテリアルデザインのCSSフレームワークで、スタイルは各コンポーネントに埋め込む感じでSASSとかには対応してないそうです。reactに特化したフレームワークの中では一番人気っぽいしマテリアルデザインで作りたいので、使ってみます。

# インストール

```
$ create-react-app mui-test
$ cd mui-test
$ yarn add material-ui
$ yarn add react-tap-event-plugin
$ yarn start
```
# index.js

```src/index.js
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
import './index.css';
import injectTapEventPlugin from 'react-tap-event-plugin';
injectTapEventPlugin();

ReactDOM.render(
  <App />,
  document.getElementById('root')
);
```

# App.js
```src/App.js
import React, { Component } from 'react';
import NavBar from './NavBar';

class App extends Component {
  constructor() {
    super()
    this.state = {
      open: false
    }
  }
  handleToggle() {
    this.setState({
      open: !this.state.open
    })
  }
  render() {
    return (
      <div>
        <NavBar
          onToggle={() => this.handleToggle()}
          open={this.state.open}
        />
      </div>
    );
  }
}

export default App;
```
# NavBar.js

```src/NavBar.js
import React, { Component } from 'react';
import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider';
import { AppBar, MenuItem, Drawer } from 'material-ui';

class NavBar extends Component {
  render() {
    return (
      <MuiThemeProvider>
        <div>
          <Drawer
            docked={false}
            width={200}
            open={this.props.open}
            onRequestChange={() => this.props.onToggle()}
          >
            <MenuItem>React</MenuItem>
            <MenuItem>Redux</MenuItem>
            <MenuItem>React Router</MenuItem>
            <MenuItem>Material UI</MenuItem>
            <MenuItem>Electron</MenuItem>
          </Drawer>
          <AppBar
            title="React Study"
            onLeftIconButtonTouchTap={ () => this.props.onToggle()}
          />
        </div>
      </MuiThemeProvider>
    );
  }
}

export default NavBar;
```

# スクリーンショット

![mui1.png](https://qiita-image-store.s3.amazonaws.com/0/147049/4a15f76c-4070-2340-3ac4-992e535d8d49.png)

## ボタン押したらメニュー開く

![mui2.png](https://qiita-image-store.s3.amazonaws.com/0/147049/9e6d9452-d761-c43c-5648-4d17ff82aa13.png)
iOSアプリを新規開発するときに最低限守っていること

iOSアプリを新規作成するときに最低限どのプロジェクトでも守っていること(方針)をリストアップしました。
たまに、どんなことを他の案件でやったのか忘れるのでメモです。

リストアップしていることを守っておけばある程度の仕様変更などにも耐えやすいアプリが作成で来たので、気が向いたら試してみてください。

# プロジェクトフォルダ内を適度にグループ分けする

グループわけされていないプロジェクトは、ぱっと見で何が何だか判断できないのでグループ機能を使用して見通しをよくする。
Web系のフレームワークのディレクトリ分けを参考にするといい感じになる。

```
// 個人的にはこんな感じで分けるのが好きです

Assets.xcassets
AppDelegate.swift

Common
  - Model
  - View
  - Controller
  - Utility
  - Request
  - Extension
  - ...
  
Login
  - Model
  - View
  - Controller 
  - Manager
  - Request
  
ArticleList
  - Model
  - View
  - Controller 
  - Request

````

また、無理して実ディレクトリ構成をグループ分けの構造に合わせなくてもいいと思う。
どうしても合わせたいときは、[venmo/synx](https://github.com/venmo/synx)などを導入して自動でやらせる。


適度にグループ分けされていない（クラスが100個ずらっと並んでるとか）プロジェクトを見ると発狂します。

# 基盤を作ってからModelを組む

通信周りなら、Alamofire+ObjectMapper
DB周りなら、Realm or CoreData(+MagicalRecord)
などをうまい具合にラップして、アプリの基盤を作る。
車輪の再発明さえしなければ、有名どころのものを使用すれば大体なんとかなるイメージ。

Modelはこれらを利用して組み込んでいく。

# 必要がないプロジェクトにはReactiveを導入しない

データが動的に変わらないアプリなどでは、Reactiveに頼らなくても簡単に実装できるので、無理にReactiveを導入しない。
使い方の問題かもしれないが、可読性が落ちるのと、Reactiveを使わない方がシンプルなコードになることが多いので、使用する場合もアプリ全体で無理に使わず、必要な箇所のみに絞った方がいい気がする。

MVVMとかもめんどくさいのでカスタムViewに任せちゃえばいいと思っている。

# 簡単に環境を切り替えられるように仕込む

Configurationsとスキームを設定してAPI URLなどを簡単に切り替えられるようにしておく。
テスト環境と本番環境のURLを手動で切り替えるのは極めて危険なので。

* [Xcode のスキームでビルド設定を切り替える](http://qiita.com/uasi/items/79aecac40f1b2a5f929b)

# 定数管理クラスを用意する

プロジェクト内に定数を管理するクラスをあらかじめ作っておく。
作っておけば、いろんなところに散らばることを防げて便利！

# カラーコード管理クラスを用意する

上記と同じ

# UserDefaults、Notificationもとりあえずまとめる
UserDefaultsを編集・取得するクラス、Notificationを飛ばすクラスを作成しておくと、仕様変更にちょっと強いアプリが作れる。

UserDefaultsの管理には、[radex/SwiftyUserDefaults](https://github.com/radex/SwiftyUserDefaults)とかを導入するとまとまる。

# StoryBoardを適度に分割する

タブごと、機能ごとにStoryBoard分割しながらViewを組む。
分けすぎたら、StoryBoardの視認性がなくなるのでほどほどに。

* [Storyboardを複数に分割して管理する方法](http://qiita.com/The_Shimon/items/2af23fab4a42ab7247ba)

# AutoLayoutで

AutoLayoutは必須。
コードで描くときは、[SnapKit](https://github.com/ndbroadbent/Snappy)などを導入するとサクサク進む。


# Controllerは使い捨てにするつもりで実装

Controllerは使い回すものではないので、とにかく小さくまとめることに集中する。
500行超えてきたら、相当まずい。

# コード規約　各種お作法

## コード規約
* [【Swift】コーディング規約まとめ](http://qiita.com/KentaKudo/items/b48762a0d6adfbf62579)

## エラー処理
* [Swift 3.0 エラー処理入門](http://qiita.com/koishi/items/67cf4d0f51c4d79f1d22)


# ある程度妥協する

妥協するタイミングは時と場合によって
Laravelのmap, filter, reduceとか

Laravel(5.4) Eloquent のクエリは Collection を返します。
初めは何だこれ？と思ったのですが、実はかなり便利だったので簡単な紹介です。

```php
$ php artisan tinker
Psy Shell v0.8.1 (PHP 7.1.1 — cli) by Justin Hileman
>>> collect(range(1, 10));
=> Illuminate\Support\Collection {#694
     all: [
       1,
       2,
       3,
       4,
       5,
       6,
       7,
       8,
       9,
       10,
     ],
   }
>>> collect(range(1, 10))->filter(function($n) { return $n % 2 == 0; });
=> Illuminate\Support\Collection {#725
     all: [
       1 => 2,
       3 => 4,
       5 => 6,
       7 => 8,
       9 => 10,
     ],
   }
>>> collect(range(1, 10))->filter(function($n) { return $n % 2 == 0; })->map(function($n) { return $n * 2; })
=> Illuminate\Support\Collection {#702
     all: [
       1 => 4,
       3 => 8,
       5 => 12,
       7 => 16,
       9 => 20,
     ],
   }
>>> collect(range(1, 10))->filter(function($n) { return $n % 2 == 0; })->map(function($n) { return $n * 2; })->reduce(function($carry, $n) { return $carry + $n; });
=> 60
```

メソッドチェーンで簡単に繋げるのがいいですね。
他にもphpの標準関数の代替となる色々便利なメソッドがあるので、以下を一度見てみると良いです。

- https://laravel.com/docs/5.4/collections

ちなみに普通の配列だと

```php
>>> array_filter(range(1, 10), function($n) { return $n % 2 == 0; })
=> [
     1 => 2,
     3 => 4,
     5 => 6,
     7 => 8,
     9 => 10,
   ]
>>> array_map(
...   function($n) { return $n * 2; },
...   array_filter(range(1, 10), function($n) { return $n % 2 == 0; })
... );
=> [
     1 => 4,
     3 => 8,
     5 => 12,
     7 => 16,
     9 => 20,
   ]
>>> array_reduce(
...   array_map(
...     function($n) { return $n * 2; },
...     array_filter(range(1, 10), function($n) { return $n % 2 == 0; })
...   ),
...   function($carry, $n) { return $carry + $n; }
... );
=> 60
```

とてもワンライナーでは書く気がしないし `array_map` のcallbackの引数の位置が他と違って読みにくいですね。
なので Laravel 使ってて `map` とか `filter` とか　`reduce` したいなら配列はとりあえず `collect` に渡しちゃえば幸せになれるっていう話でした。
node軽量フレームワークのexpressを使ってみた


expressはNode.js 向けの高速で最小限の Web フレームワーク。
本当に軽く書きたいときは使えそう。
ソース内のsample3では画像処理のサンプルを動かしてみました。

ソース
https://github.com/miyamotok0105/express_sample

#動かしてみる

expressを入れる

```
npm install express --save
mkdir sample1
cd sample1
touch app.js
```


```js:app.js
var express = require('express');
var app = express();

app.get('/', function (req, res) {
  res.send('Hello World!');
});

app.listen(3000, function () {
  console.log('Example app listening on port 3000!');
});

```

実行する

```
node app.js
```

http://localhost:3000/
で確認


#簡易アプリケーションを生成

express-generatorをインストール

```
npm install express-generator -g
```

生成

```
express --view=pug sample2
```

依存関係のインストール

```
cd sample2 && npm install
```

実行

```
DEBUG=sample2:* npm start
```

#基本的なルーティング
ルーティングはリクエストされたURLと出力されるHTMLページの結びつけ。

```js:
app.METHOD(PATH, HANDLER)

//app は、express のインスタンスです。
//METHOD は、HTTP 要求メソッド です。
//PATH は、サーバー上のパスです。
//HANDLER は、ルートが一致したときに実行される関数です。
```

ルートで Hello World! と応答します。

```
app.get('/', function (req, res) {
  res.send('Hello World!');
});
```

ルートでPOSTを要求する

```
app.post('/', function (req, res) {
  res.send('Got a POST request');
});

```

ルートでPUTを要求する

```
app.put('/user', function (req, res) {
  res.send('Got a PUT request at /user');
});

```

ルートでDELETEを要求する

```
app.delete('/user', function (req, res) {
  res.send('Got a DELETE request at /user');
});

```

#Express での静的ファイルの提供

publicフォルダ以下を追加する

```
app.use(express.static('public'));
```

仮装パスを追加する

```
app.use('/static', express.static('public'));
```

http://localhost:3000/images/kitten.jpg
↓
http://localhost:3000/static/images/kitten.jpg
XAMPP 403 Error 解決方法(Mac OSX)

#Require all granted追記で解決しなかった人向け。

ググっても大体出てくるのは下記の処方箋のみ。

/Applications/XAMPP/xamppfiles/etc/extra/httpd-vhosts.conf

\<Directory "ディレクトリ名">
   AllowOverride All
   Require all granted
\</Directory>

これで大抵の方は解決されてるみたいですが、依然403がでる。。。
下記の方法で解決。

/Applications/XAMPP/xamppfiles/etc/httpd.conf

\<IfModule unixd_module>

〜略〜

User daemon
Group daemon
\</IfModule>

User daemon
↓
User **ユーザー名**

※ユーザー名はターミナルのプロンプトにあるXXXXX部分
XXXXXX-no-MacBook-Pro:htdocs XXXXX$
VBA:縦方向に結合/横方向に結合＆縮小して表示

#新人プログラマ応援にあたって
##プログラミングTips紹介
テスト項目書の作成に役立ったのでご紹介。
処理前後にある```Focus = True(False)```は[こちらのブログ記事](http://thom.hateblo.jp/entry/2015/08/31/063500)のものを利用させて頂いております。
（よっぽどループ処理が多い時に入れるか、処理中のちらつきが気になるときに入れると良いです）
最初はテスターとして入ることもあるでしょうけれども、Excelマクロ/VBAを学んでおくと、作業効率がグンと上がるのでオススメです。

イメージ画像は後日更新します。
利用方法としては、画面左上のリボンメニューから追加、マクロを指定してください。
（やり方はここでは割愛します。ググる力（調査力）も大事にしてみてください）

###補足
- コメントアウト(処理の無効化)している部分は、頭の「'」だけを外してもかまいません。
- ↑特に、処理量が多いときにフリーズ（したような状態）をある程度防げます。
- Focusは「（処理に）集中する」の意味。Trueで高速化モード、Falseで通常モード。
- ↑セルへの入力や再表示って、回数が多いと結構時間かかるので、入力周りのループ処理には是非入れてください。
- ↑※エラー時も含め、必ず通常モードに戻る書き方をしてください。通常モードに戻らないと、数式などの再計算が行われないままになります。（3つめのサンプルに例を掲載します）

##ソースコード
```VB.Net:MergeCell.bas
Public Sub MergeVartical() '縦方向の結合
    On Error GoTo Finally 'エラーが起きたら最後の処理へ
    Dim colRng As Range '選択列を格納するのに宣言
    
    Focus = True '描画等の処理停止
    
    For Each colRng In Selection.Columns　'選択範囲の列ごとに
        colRng.Merge  '選択部分の列を結合
        'DoEvents  '「応答無し」の防止用のおまじない
    Next
    
Finally:
    Focus = False '描画等の処理再開
End Sub

Public Sub MergeHorizontal()  '横方向に結合＆縮小して表示
    On Error GoTo Finally 'エラーが起きたら最後の処理へ
    Dim rowRng As Range '選択行を格納するのに宣言
    
    Focus = True '描画等の処理停止
    
    For Each rowRng In Selection.Rows　'選択範囲の行ごとに
        rowRng.Merge  '選択部分の行を結合
        rowRng.ShrinkToFit = True  '結合セル内に収まるように文字を縮小
        'DoEvents  '「応答無し」の防止用のおまじない
    Next
    
Finally:
    Focus = False '描画等の処理再開
End Sub

' 参考：疑似Try-Catch-Finally
Sub ErrCatchFinally()
    On Error Goto Err

    Focus = True '描画等の処理停止

    ' 実行時エラーが起こるような処理

    Goto Finally ' 何事も無ければ最後の処理へ
Err:
    ' エラー情報の表示
    MsgBox "<" & Err.Number & ">: " & Err.Discription 
Finally:
    Focus = False '描画等の処理再開
End Sub
```
bashで言うところの!$はfishではどうすればよいか

mkdirでディレクトリを作成して、そのディレクトリへ移動したいときに

```bash
$ mkdir tmp
$ cd !$
```

とする。
ところが、fishでやると、

```fish
> mkdir aa
> cd !$
Expected a variable name after this $.
fish: cd !$
          ^
```

さて困った。
ちなみに`!$`はbashで言うところの最後の引数を示す。

# こたえ

そのままズバリの質問をしている人がいたのでご紹介。
`.config/fish/config.fish`に以下を書いて、端末を起動しなおせばよい。

[command line - What is the equivalent of bash's !$ and !! in the fish shell? - Super User](https://superuser.com/questions/719531/what-is-the-equivalent-of-bashs-and-in-the-fish-shell)

適当訳。
fishでは残念ながら!$に該当するものが無い。
メーリングリストにperfect answerがあったんで貼っとくね！

```:~/.config/fish/config.fish
function bind_bang
    switch (commandline -t)[-1]
        case "!"
            commandline -t $history[1]; commandline -f repaint
        case "*"
            commandline -i !
    end
end

function bind_dollar
    switch (commandline -t)[-1]
        case "!"
            commandline -t ""
            commandline -f history-token-search-backward
        case "*"
            commandline -i '$'
    end
end

function fish_user_key_bindings
    bind ! bind_bang
    bind '$' bind_dollar
end
```