OmniAICreator/Qiita-1.07M huggingface dataset:
技術英語 > but my legs won't work. / My code won't work when I ...

@ Star Trek Voyager > INNOCENCE

想像の怪物に恐怖感を持っている子どもたちにその怪物のことを聞くと

> I feel like I want to run, but my legs <font color=red>won't work</font>.

疲労感いっぱいで足が動かない、というときにもmy legs won't workとして使われていたことを思い出した。

<hr>
codeが期待通りに動くかどうかにもwon't workを使う

https://teamtreehouse.com/community/my-code-wont-work-when-i-preview-in-chrome-browser-but-it-will-when-i-cut-and-paste-it-into-console
> My code <font color=red>won't work</font> when I preview in Chrome browser, but it will when I cut and paste it into console…

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

http://qiita.com/7of9/items/ad1e77c7a567f6883af4
> That should do it.
VCCW で複数のWordPress 開発環境を構築する方法

## VCCWを複数起動する
http://vccw.cc に書いてある方法で、vccw1,vccw2というフォルダの両方で```vagrant up```を叩くと失敗します。

```
A VirtualBox machine with the name 'vccw.dev' already exists.
Please use another name or delete the machine with the existing
name, and try again.
```

vccw.dev という VirtualBox のマシンがすでに使われている、という感じのエラーのようです。


## default.yml を変更する

変更前

\# Network Settings

```
hostname: vccw.dev
ip: 192.168.33.10
sync_folder: 'www/wordpress'
```

変更後

\# Network Settings

```
hostname: vccw2.dev ←hostname を変更する
ip: 192.168.33.9    ←ip を変更する
sync_folder: 'www/wordpress'
```

## たくさん作るときの注意
### VCCWのフォルダがどこにあるかわからなくなる  
- ばらばらに置くのではなく、「vccw」のようなフォルダを作ってその中に作るようにする、などしましょう。
- わからなくなるような人は（私です）だいたい普段からデスクトップがめちゃくちゃになっているはずです。普段から片付けましょう。

### どのIPアドレスを使っているかわからなくなる
- 適当に設定せずに、192.168.33.10 ~ 192.168.254 で順番につけていく、みたいな規則を作りましょう。
- すでに手遅れな場合は、いったん全ての vccw の default.yml で何を作っているかをテキストファイルか何かにリストアップしておきましょう。

### 追記
[miya0001](http://qiita.com/miya0001) さんから上記に関してコメントいただきました。ありがとうございます。

## まとめ

ホスト名とIP変えればいくらでも作れます。が、ファイルの容量がかなりの量になるので他の方法を考えたいところです。

たぶんWockerを使えば簡単にできるのかもしれません。使ったことがないのでわかりませんが。今度試してみます。
VagrantでCentOS7の日本語化

# 目的

http://www.vagrantbox.es/
↑のサイトだと日本語化されてるboxがなくて毎回設定するのが面倒だったのでとりあえず日本語設定のみ反映させるようなやつを作ってみました。

# githubにUPしたので使ってみてください。
https://github.com/bikun-bikun/vagrantfile_for_centos7_jp

2017-01-12改定
githubのusernameを変えたのでURLを修正
JetBrainsの学割で自分の大学等のメールアドレスを登録するやり方

1. githubに登録する．
2. [ここ](https://github.com/JetBrains/swot/tree/master/lib/domains)`JetBrains/swot/lib/domains/`の中に以下のようにディレクトリとファイルを追加する．
3. もしも登録したいメールのドメインが`abc.def.ac`だったとしたら，`domains/`の中に`ac/def/`というディレクトリを作成し，その中に`abc.txt`というファイルを作成する．つまり`swot/lib/domains/ac/def/abc.txt`といった感じになる．
4. abc.txtのファイルの中に，自分の大学の英語の名前を書く．例えば九大だったら`Kyushu University`とだけ書く．
5. プルリクエストの題名を`Add Kyushu University`とし，内容を`Please add Kyushu University.`のようにして，できれば何か書いておく．
laravelのRequestのrequest::all();でエラーが出た場合の対処メモ

laravel5のRequestでエラーが出たのでメモ

formの値取得にRequestを使いこのようなエラーが出た場合
Non-static method Illuminate\Http\Request::all() should not be called statically, assuming $this from incompatible context

コントローラーの初期で
use Illuminate\Http\Request;

と入っているものを消して

use Request;

とする。
次のような配列が二つあるとします。

結構満足のいくゴルフネタを思いついたのでQiitaにも投稿


# 問題

[次のような配列が二つあるとします。 - Yahoo!知恵袋](http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12160747082)

> aiida123456さん <div align="right">2016/6/2119:07:22</div>
> 次のような配列が二つあるとします。
> 
> ```php
> ① Array ( [0] => 8 [1] => 9 [2] => 10 [3] => 10 [4] => 8 )
> ② Array ( [0] => 2 [1] => 3 [2] => 3  [3] => 3  [4] => 1 ) 
> ```
>
> ①の配列は同じ配列の値があれば、その値をまとめて
> ②の配列はそれに対応し、足されるようにするにはどのようにすればいいですか？
>
> 例えば、①は[0]と[4]の値が8が同じ。[2]と[3]の値が10が同じなので
> 
> ```php
> ① Array ( [0] => 8 [1] => 9 [2] => 10 )
> ② Array ( [0] => 3 [1] => 3 [2] => 6  )
> ```
>
> というような形にしたいです。
> ご教授お願いいたします。

# 解答

```php:解説なし:通常
<?php
$a = [8, 9, 10, 10, 8];
$b = [2, 3, 3, 3, 1];
$uniq = array_unique($a);
$pos = array_flip($uniq);
$count = array_fill_keys($pos, 0);
foreach ($a as $k => $v) {
    $count[$pos[$v]] += $b[$k];
}
$a = array_values($uniq);
$b = array_values($count);
var_dump($a, $b);
```

```php:解説あり
<?php

$a = [8, 9, 10, 10, 8];
$b = [2, 3, 3, 3, 1];

// 重複値を削除した配列 (キーは前優先)
$uniq = array_unique($a);

// 「値 => 最初の出現位置」の連想配列
$pos = array_flip($uniq);

// 「最初の出現位置 => 0」の連想配列
$count = array_fill_keys($pos, 0);

// 「最初の出現位置」に対応する数値に
// 現在の「値」の対応値を加算
foreach ($a as $k => $v) {
    $count[$pos[$v]] += $b[$k];
}

// キーを0からの連番に振り直す
$a = array_values($uniq);
$b = array_values($count);

var_dump($a, $b);
```
MobXでReactのステート管理をする


MobXは`Simple, scalable state management` を謳うステート管理マネージャ。

最近Hacker NewsやEchoJSで、にわかにMobXがフィーチャーされている。

[3 Reasons why I stopped using React.setState — Medium](https://medium.com/@mweststrate/3-reasons-why-i-stopped-using-react-setstate-ab73fc67a42e#.94ggj6xa7 "3 Reasons why I stopped using React.setState — Medium")

この記事を読んで、そんなにいいもんかなと思い、試してみることにした。

[mobxjs/mobx: Simple, scalable state management.](https://github.com/mobxjs/mobx "mobxjs/mobx: Simple, scalable state management.")


## カウンター

簡単なカウンターを作ってみる。一秒で1インクリメンタルされるやつ。

```js
import ReactDOM from "react-dom";
import React from "react";
import {observable} from "mobx";
import {observer} from 'mobx-react'

class AppState {
  id = Math.random();
  @observable counter = 0;
}

@observer
class App extends React.Component {
  render() {
    return <div className="app">{this.props.data.counter}</div>
  }
}

const el = document.querySelector(".main");
const appState = new AppState();
ReactDOM.render(<App data={appState} />, el);

setInterval(() => {
  appState.counter += 1;
}, 1000);
```

ステート側のリアクティブにしたいプロパティにmobx の`@observable` デコレーターを付け、Reactのコンポーネント側にmobx-react の `@observer` デコレーターを付与する。

あとはステート側を書き換えると変更が反映される。たぶんobserver ついたComponentのコンストラクタで observervable なプロパティの変更をフックして、高階コンポーネントのsetStateを呼び出してそう。(中身読んでないけど自分ならそう作るだろうなという予想)

Vueのデータバインダを思い出す感じもある。

## @computed 

他の値に依存する値を表現する

```js
class AppState {
  @observable counter = 0;

  constructor(counter) {
    this.counter = counter;
  }

  @computed get twice() {
    return this.counter * 2;
  }
}

@observer
class App extends React.Component {
  render() {
    return <div className="app">{this.props.data.twice}</div>
  }
}
```

これで2倍表示されるようになった。

[Becoming fully reactive: an in-depth explanation of MobX — Medium](https://medium.com/@mweststrate/becoming-fully-reactive-an-in-depth-explanation-of-mobservable-55995262a254#.q05zries8 "Becoming fully reactive: an in-depth explanation of MobX — Medium")

## @action

setState と違って値を1つずつ更新するため、非同期で複数更新すると、無駄にrenderが走ることになる。それを抑制するのがactionデコレータ。

```js
class AppState {
  @observable counter;

  constructor() {
    this.counter = 0;
  }

  @computed get twice() {
    return this.counter * 2;
  }

  @action
  incrementLazy() {
    this.counter -= 1;
    setTimeout(() => {
      this.counter += 2;
    }, 100);
  }
}

@observer
class App extends React.Component {
  render() {
    return <div className="app">{this.props.data.twice}</div>
  }
}
```


たとえばactionデコレータ を外すとこのような振る舞いになる。
![](https://i.gyazo.com/6e9fa1454c73e6aacd3eee1225fc3dd2.gif)
デコレータがついてる場合は-1した部分がスキップされる。

(トランザクションの終了検知を実装するには、関数内部の静的解析が必要な気がするが、どうなってるんだろう？)

## 感想

デコレータでリアクティブプロパティーを作る部分は面白いが、入れ子のプロパティーを作ろうとするとasStructureという専用の構築子を要求されたりしだして、だるい感じ。正直トランザクション管理も自分でつくりだした沼にハマってるだけなので、別にsetStateでいい。

サンプルコード読んだり中身を想像する分には面白かった。

## 参考

tonyspiro/easy-mobx-example: Easy MobX + React Example https://github.com/tonyspiro/easy-mobx-example

[MobX: Ten minute introduction to MobX and React](https://mobxjs.github.io/mobx/getting-started.html "MobX: Ten minute introduction to MobX and React")
Mac で IRuby Notebook 環境を構築する方法 2016年版

すでにこの投稿の内容は現状に合わないものとなっているので
[Mac で IRuby Notebook 環境を構築する方法 2017年版](https://qiita.com/kozo2/items/8e0cf0d1f5672ac2f745)
を参照してください

---

[どみとりさんのqiitaエントリ](http://qiita.com/domitry/items/aa348caf993e876a7be5#macos-x)
に説明を加え、タイトルの方法をまとめます。
Mac OS X El Capitanで確認をしていますがこれより前のOS Xにも適用できると思います。

大きく分けて
1. Ruby のインストール
2. Jupyter Notebook のインストール
3. IRuby と rbczmq のインストール
のインストールを行う必要があります。

## Ruby のインストール
- MacデフォルトのRubyやhomebrewのRubyは使わないでください。
- rbenv を用いてRubyの最新リリースをインストールします。
- rbenv はhomebrewを用いてインストールします。(ついでに後述のrbczmqのインストールなどに必要なツールもhomebrewでインストールします。)

### rbenv などのインストール
```shell-session
brew install rbenv automake gmp libtool wget
```

### rbenv を用いたRubyのインストール
まずシェルの設定ファイル(.bashrcなど)に `eval "$(rbenv init -)"` を追加してください。
その後下記のrbenvコマンドでRubyをインストールします。

```shell-session
rbenv install 2.3.1
rbenv global 2.3.1
source ~/.bashrc
```

これでRubyのインストールは完了です。


## Jupyter Notebook のインストール
下記で `python` コマンドを用いますが、これにはデフォルトで入っている `/usr/bin/` 下のものを用いて下さい。

```shell-session
wget https://bootstrap.pypa.io/get-pip.py
/usr/bin/python get-pip.py --user
~/Library/Python/2.7/bin/pip install -U --user jupyter
```

## IRuby と rbczmq のインストール
IRubyだけでなく RubyとJupyterをつなぐRuby用zeromqライブラリのインストールも必要です。

```shell-session
gem install iruby rbczmq
```

## 最後に IRuby kernelのインストールとJupyter Notebook の起動

```shell-session
iruby register
~/Library/Python/2.7/bin/jupyter-notebook
```

記述を省いたはまりどころ、ノウハウも存在します。
(例えば @mrkn さんの[rbczmq の幾つかのインストール方法](http://qiita.com/mrkn/items/78196ed59266f58dcb64))
もしお困りごとがあれば [scirubyのslackチーム](https://sciruby-slack.herokuapp.com/)で気兼ねなく聞いてください
Unityでオンラインゲームを作ってみた

![lsTitle.png](https://qiita-image-store.s3.amazonaws.com/0/46287/a68d5e8e-b804-75e5-1052-6342ffd21f95.png)

http://www.nicovideo.jp/mylist/55885540
ニコ動を観れる人。
Titaniumでも起動画面に9-patchを使う

ブログやマニュアルに記載されている方法だとうまくいかないのでメモ。

最初にこの方法が紹介された[ブログ](http://www.tidev.io/2014/02/12/android-splash-screens-using-9-patch-images/)ではplatform/android/res/drawable*以下にファイルを置いて（Alloyだとapp/platform/…）、同じくplatform/android/res/valuesの下にXMLを用意することになっています。

またAppceleratorの[マニュアル](http://docs.appcelerator.com/platform/latest/#!/guide/Icons_and_Splash_Screens-section-29004897_IconsandSplashScreens-Androidsplashscreenconsiderations)でもやはりカスタマイズしたテーマを用意するようになっています。

が、[どちらもAPI 21以降のwindowBackgroundをつかう](http://stackoverflow.com/questions/30349495/no-resource-found-that-matches-the-given-name-attr-windowbackground)ので、ターゲット次第ではビルド時にエラーになってしまいます。あるいは、values-v21に置いてもエラーになるので、parentが正しくないのかもしれませんね。

```shell-session
[ERROR] Failed to package application:
[ERROR]   
[ERROR] /Path/To/Appcelerator_Studio_Workspace/YourApp/build/android/res/values-v21/custom_theme.xml:13: error: Error: No resource found that matches the given name: attr 'windowBackground'.
```

というわけで、workaroundとしては、app/assets/android/とapp/assets/android/images以下のdefault.pngを全てdefault.9.pngに差し替えるという、泣きたくなるほど原始的なやり方で対応すると、うまくいきます。
[Bash] lsコマンド まいちっぷす

役に立ちそうな使いかたを覚書。随時更新する。

## 更新時刻でソート(-lrt)

```bash
$ ls -lrt
total 0
drwxrwxr-x 2 nagamee nagamee 6 Jun 24 00:53 work
drwxrwxr-x 2 nagamee nagamee 6 Jun 24 00:53 hoge
drwxrwxr-x 2 nagamee nagamee 6 Jun 24 00:54 fuga
drwxrwxr-x 2 nagamee nagamee 6 Jun 24 00:54 piyo
-rwxr-xr-x 1 nagamee nagamee 0 Jun 24 00:55 test.sh
-rw-rw-r-- 1 nagamee nagamee 0 Jun 24 00:55 data.txt
```
新しいものほど下段に表示される。

## 1行1ファイルで表示する(-1)
パイプするときによくつかう。

```bash
$ ls -F
data.txt  fuga/  hoge/  piyo/  test.sh*  work/

$ ls -1
data.txt
fuga
hoge
piyo
test.sh
work
```

## 拡張子単位でグルーピング(-X)
いろんな拡張子のファイルが混在していてごちゃついてるときに。

```bash
$ ls -l
total 0
-rwxr-xr-x 1 nagamee nagamee 0 Jun 24 01:15 abc.sh
-rw-rw-r-- 1 nagamee nagamee 0 Jun 24 00:55 data.txt
drwxrwxr-x 2 nagamee nagamee 6 Jun 24 00:53 hoge
-rwxr-xr-x 1 nagamee nagamee 0 Jun 24 00:55 test.sh
drwxrwxr-x 2 nagamee nagamee 6 Jun 24 00:53 work

$ ls -lX
total 0
drwxrwxr-x 2 nagamee nagamee 6 Jun 24 00:53 hoge  #拡張子なし
drwxrwxr-x 2 nagamee nagamee 6 Jun 24 00:53 work
-rwxr-xr-x 1 nagamee nagamee 0 Jun 24 01:15 abc.sh # .sh
-rwxr-xr-x 1 nagamee nagamee 0 Jun 24 00:55 test.sh
-rw-rw-r-- 1 nagamee nagamee 0 Jun 24 00:55 data.txt #.txt
```

## 一時的にエイリアスを無効化したい(\ls)
lsコマンドに限らずな内容だけど、ls以外で使ったことない。
(なぜならエイリアスほとんど使わないからｗ)

```bash
$ type ls
ls is aliased to `ls -F --color'

$ ls
data.txt  fuga/  hoge/  piyo/  test.sh*  work/

# あたまに\をつける
$ \ls
data.txt  fuga  hoge  piyo  test.sh  work

# 実行ファイルをフルパス指定
$ /usr/bin/ls
data.txt  fuga  hoge  piyo  test.sh  work
```
S3の基本事項

AWSの復習がてら、掲載します。

# 前提
S3とはアマゾンウェブサービスの一つです。

Simple Strage Serviceであり、単語3つ頭文字を連続して並べるとSSSとなることからS3と呼ばれます。「クラウドストレージ」と呼ばれるストレージサービスに分類されます。
クラウドストレージが提供する価値は、

+ 堅牢性
+ スケーラブル
+ 安価

の3点がざっと挙げられると思います。
S3の詳細に入る前に、AWSの提供するストレージサービスについて見てみます。

# AWSのストレージサービスラインナップ
+ S3
+ Glacier
+ Storage Gateway
+ EBS
+ EFS

以上5種類があります。

## S3
これは、高い耐久性をもつオンラインストレージであり、主な利用目的としては、

+ データ保管
+ コンテンツ配信
+ ログ/分析用データ
+ バックアップ/ディザスタリカバリ

です。

## Glacier
こちらは、超安価で、S3と同じく高い耐久性をもつアーカイブストレージのことです。
S３に比べると安価である代わりに、保管しているデータをすぐに取り出すことができません。
オブジェクトごとに復元する必要があり、3~5時間程度かかります。
復元後のデータは低冗長化ストレージに複製され、そこから利用されます。その間、Glacierと低冗長化ストレージの双方の費用がかかります。

上記理由から利用目的としては

+ 取り出す想定のないアーカイブデータ

等が挙げられます。

## Strage Gateway
オンプレミス環境と連携可能なストレージです。（後日追記します。）

## EBS（Elastic Block Store）
EC2 インスタンスで使用するためのストレージです。EC2で利用できるストレージには2種類あり、

+ インスタンスストレージ
+ EBS

です。前者のインスタンスストレージとはEC2のローカルストレージであり、インスタンスごとにサイズが異なります。このストレージの特徴はインスタンスが停止するとデータが消えてしまうところです。
そこで後者のEBS、こちらは永続的なストレージなので、インスタンスに付随するデータでかつ消えるとダメなデータはEBSを利用します。

## EFS（Elastic File System）
（後日追記します）

# S3関連用語
## オブジェクト
S3にあげるファイルのことをオブジェクトとよびます。

## バケット
オブジェクトを保存する場所のことです。アカウントごとに100個作成可能です。
このネーミングに関してですが、グローバルで利用されているので、他のユーザーとかぶらないような
名前にする必要があります。

## キー
オブジェクトの格納先のURLのことです。

# S3の分類
S３にはさらに分類があります。
## 標準化ストレージ
普通にAmazon S3 を使うとこのタイプのストレージ使うことになります。
AWS側では3箇所以上にデータを保存することで高い可用性/耐久性を生み出してます。


## 標準低頻度アクセスストレージ
標準化ストレージより安価なストレージです。が、取り出すたびにお金がかかります。

## 低冗長化ストレージ
上2つに比べると全然堅牢じゃないストレージ。複数箇所に保存することをしてないためやすいので、データ消失のリスクはあります。（自己責任）

# S3に対する操作
操作はSDKかCLI、管理コンソールよりできます。

| 種類       |       内容 |
|:-----------------|:------------------|
| GET             |              ダウンロード |
| PUT           |            ファイルのアップロード/更新|
| LIST           |           バケット内のオブジェクト一覧を表示|
| COPY             |              複製 |
| DELETE             |              削除 |
| RESTORE             |       Glacierの時に使用し、アーカイブデータを一時的にS3に保管。      |



ファイルのアップロードに関しては、MultiPart Uploadという方法があり、これを利用すれば、大きなデータサイズのデータをS3に対して高速に伝送することが可能になります。

今回はひとまずここまでです。


以下、参考にさせていただいたURLです。
http://www.slideshare.net/AmazonWebServicesJapan/black-belt-online-seminar-aws-amazon-s3
http://www.slideshare.net/imaifactory/ephemeral-ssd
AppStoreからXcodeをDLできないときのアップグレード/ダウングレード

<table width="100%"><tr><td>※この記事は３年前の記事です。</td></tr><table>

大学生のときにXcodeをアップデートしようとしたら、Xcodeが管理者用のアカウントでDLされていたため、アップデートできなかったときの対処法です。

# 今のXcodeのバージョン確認
Xcodeを起動したら分かるので起動．
![スクリーンショット 2016-06-23 23.42.05.png](https://qiita-image-store.s3.amazonaws.com/0/107221/8ffb0d28-db7c-849e-93a9-f89c6eb84d33.png)
(画像ではアップグレード済みなので6.1.1)
このバージョンが6.0.0以上じゃないとcordovaは動いてくれないらしいのでXcodeをアップグレードしてみる．

## Appleの公式からdmgをDL

1. [Apple Developers](https://developer.apple.com/jp/)飛び，ログインした後下のダウンロードをクリック
![スクリーンショット_2017-07-14_15_42_36.png](https://qiita-image-store.s3.amazonaws.com/0/107221/3c8eb0b6-2dac-78a2-1179-b3379333168e.png)

2. 開いたページをスクロールしていき，See more downloadをクリック
![スクリーンショット 2016-06-24 0.11.22.png](https://qiita-image-store.s3.amazonaws.com/0/107221/7e0f93e0-12c6-1992-641f-395d7316c889.png)

3. 左の検索入力で**Xcode**と入力し，6.1.1をクリック．
その後右に出てくる**Xcode 6.1.1.dmgをクリックしてDL(2.5GBぐらい．量が多いので注意)
他のバージョンをDLする場合は各自読み替えるように．

## DLしてきたXcodeをインストール
他のdmgファイルとして落としてきたアプリケーションと同じようにインストールする．このときに**Xcode5.1.1を入れるとダブってどっちがどっちか分からなくなる?(未検証)なので避けてといた方が良い．
それが終わったらXcodeを起動してGatekeeperによる検証を待つ．(これも長い．時間があるときに．)
[「“Xcode-beta”を検証中...」を回避する](http://qiita.com/gooichi/items/5463ef7134723858f77a)の記事を参考にすれば省略できるかも？僕はエラー出たのであきらめた．

## Xcodeが起動できたら
バージョンを確認をする．ちゃんと出来てたら最初の画像のように6.1.1になってるはず．
XcodeのバージョンがどのOS Xのバージョンに対応しているかの記述が6.1.1までしか無かったため取りあえず6.1.1をインストールした．最新のやつも使えるかもしれないが，**Xcode 7.3.1は4.8GB以上あるので注意されたし**

# 最後に
今回はcortanaに怒られてアップグレードしたので，cordobaでコマンドたたいておしまい．うまく出来ていれば\** BUILD SUCCEEDED \**と出る
これも初回はかなり遅いと思うので注意．

他の用途でXcodeを使う場合は各自頑張ってください．
OS X El Capitan SIP 切り替え方法

SIP（System Integrity Protection）有効・無効の切り替え方法のメモ。

# 無効化する方法
1. 『リカバリーモード』で起動する。
2. メニューバーの[ユーティリティ]-[ターミナル]を起動する。
3. ターミナルで`$ csrutil disable`を実行する。
4. 再起動する。（ターミナルで`$ reboot`）

# 有効化する方法
1. 『リカバリーモード』で起動する。
2. メニューバーの[ユーティリティ]-[ターミナル]を起動する。
3. ターミナルで`$ csrutil enable`を実行する。
4. 再起動する。（ターミナルで`$ reboot`）
homebrewでインストールした複数のphpのバージョンを切り替える方法

homebrewで複数バージョンのphpをインストールして、どちらを使うかを切り替える方法を紹介します。

## php5.6のインストール
``` 
$ brew install php56
```

## php7.0のインストール
5.6に続いて、7.0を同じようにインストールすることができますが、
その前にunlinkします。

```
$ brew unlink php56
$ brew install php70
```

## バージョンの切り替え
unlink, linkで切り替えます。
ここまでの状態だと、php7.0になっています。

```
$ php -v
PHP 7.0.7 (cli) (built: May 27 2016 11:13:44) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
```

unlinkでphp7.0のシンボリックリンクを削除して、
linkでphp5.6のシンボリックリンクを作成します。

```
$ brew unlink php70
Unlinking /usr/local/Cellar/php70/7.0.7... 17 symlinks removed

$ brew link php56
Linking /usr/local/Cellar/php56/5.6.22... 17 symlinks created

$ php -v
PHP 5.6.22 (cli) (built: May 27 2016 12:20:55)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
```
初回起動時のチュートリアルを毎回見れる！removePersistentDomainForNameが便利すぎる

初回起動時のチュートリアルは、`TutorialViewController.swift`などで実装すると思うのですが、このチュートリアルは`NSUserDefaults.standardUserDefaults().boolForKey("isFirstTimeDone")`などを用いて、初回起動の場合にのみ表示しているので、デバックのときに一回Buildしてしまうと、次回から見られない。。

こんなときに便利なのが`removePersistentDomainForName`で、これを知ってからかなり快適になりました。

結論、`AppDelegate.swift`の`didFinishLaunchingWithOptions`に、下記2行を追加するだけです。

```swift:AppDelegate.swift
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

        //NSUserDefaultsのリセットを行う

        let bundle = NSBundle.mainBundle().bundleIdentifier
        NSUserDefaults.standardUserDefaults().removePersistentDomainForName(bundle!)
        
        return true
    }
```

これだけで、毎回初回起動として扱ってもらえます。
UnityでLeapMotion　新SDK Orion

2016年初頭、Leap Motionの新しいドライバ、SDKとしてOrionがリリースされています。

本家ドキュメント
https://developer.leapmotion.com/documentation/unity/api/Leap_Classes.html

詳しい解説はこちら。
http://qiita.com/afjk/items/e2c9617e937528feba6e
http://zabaglione.info/archives/789

Orion VR(Beta)　と記載されているくらいなので、おもにVR関連が強化されているのだと思います。
VRを使用しない場合もUnityでLeap Motionを扱いたい場合はOrionを使うのが楽です。
(過去にはアセットストアにSDKがおいてあったと思うのですが無くなってしまいました)

LeapMotion_CoreAsset_Orion_4.1.1.unitypackage
をプロジェクトにインポートして使います。
デモシーンが含まれているのでさくっと動作確認までは簡単です。

デモシーンなどに使われているのはほぼnamespace Leap.Unity のクラスで主なところをピックアップすると
LeapHandController
LeapServiceProvider
等です。
サンプルと同じように [namespace Leap.Unity](https://developer.leapmotion.com/documentation/unity/api/Leap_Classes.html#leap-unity-namespace) にあるクラス群を自作アプリにそのまま使ってもよいのですが、多少まわりくどかったり、ややこしめに作られていたり、なのでシンプルに自分の欲しい機能だけ取り出して使う分には [namespace Leap](https://developer.leapmotion.com/documentation/unity/api/Leap_Classes.html#leap-namespace) のクラスを直接操作するほうがわかりやすいです。

http://qiita.com/amano-kiyoyuki/items/7bbb84ae586aca034d54
↑は（たぶん）v1のときのサンプルだと思うのですがOrionではビルドも通らなくなってしまっているのでこれのアップデート版サンプルを以下に記載します。

```sample.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Leap;
using Leap.Unity;

public class LeapSample : MonoBehaviour
{
	Controller controller;


	public GameObject[] FingerObjects;


	void Start ()
	{
		controller	= new Controller(); 
	}

	void OnApplicationQuit()
	{
		if(controller!=null)
		{
			controller.StopConnection();
			controller.Dispose();
			controller = null;
		}
	}


	void Update()
	{
		Frame		frame	= controller.Frame();
		List<Hand>	hands	= frame.Hands;
		
		if( 0 < hands.Count )
		{
			Hand			firstHand	= hands[0];
			List<Finger>	fingers		= firstHand.Fingers;
			
			for( int ii=0; ii<fingers.Count; ++ii )
			{
				Finger	finger		= fingers[ii];
				var		fingerObj	= FingerObjects[ii];
				Vector	v			= finger.TipPosition;

				fingerObj.transform.position = UnityVectorExtension.ToVector3( v ) / 10;
			}
		}
	}
}
```

特に重要なのは
controller.StopConnection();
でしょうか。
これを忘れると、UnityEditorがLeapMotionの何かを掴みっぱなしにするらしく、
そのまま無限ループに突入してUnityが死にます。ご注意ください。

UnityVectorExtension.ToVector3( v ) / 10;
の10で割ってるのは特に意味ないです。座標数値はLeap Motionからのリアルな距離数値、ミリメートルで値が返ってくるので大きすぎるので適当に小さくしただけです…
GTX-1080 など GeForce を Ubuntu 16.04 LTS で CUDA-8.0RC と共に使う

# Overview

Ubuntu 16.04 LTS環境で、GTX-1080/1070とかのnVIDIA GeForceを使うときの設定について.

ちなみに、GTX-750Tiでも同じ手順で動作することを確認しています。

# まずは Ubuntu 16.04LTS で nVIDIA GeForce を使う一般設定から

```
$ sudo add-apt-repository ppa:graphics-drivers/ppa
$ sudo apt-get update
$ sudo apt-get install nvidia-367
$ sudo apt-get install mesa-common-dev
$ sudo apt-get install freeglut3-dev
```

# Install CUDA

* Download CUDA8.0RC from https://developer.nvidia.com/cuda-toolkit
 * Linux, amd64,Ubuntu 16.04, Runfile (Local)を選択してdownload
 * "cuda_8.0.27_linux-run" (約1.4GB)のがダウンロードできるはずです.

* ```~/.bashrc``` に以下を追加する必要があります

```
    export PATH=/usr/local/cuda-8.0/bin${PATH:+:${PATH}}
    export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
    export CUDA_HOME=/usr/local/cuda
```

* X無しのモードに移動します。
  1. CTRL+ALT+F1を押します。黒画面になりますがびっくりしないように、
  1. 自分のアカウントでloginします。
  2. ```sudo init 3``` を実行して、非X環境にします。
  3. 先ほどdownloadしたcudaのpackageをinstallします

    ```
    $ chmod +x cuda_8.0.27_linux-run
    $ sudo sh ./cuda_8.0.27_linux-run
    $ sudo Reboot
   ```

おそらく、再起動後、まともに動かない状態かと思いますので、
再度、

 1. CTRL+ALT+F1
 1. Login
 1. ```$ sudo apt-get install nvidia-367 --reinstall```
 1. ```$ sudo reboot```

を行って、ドライバーを再インストールすると、まともになるとおもいます。

```$ sudo cat /var/log/syslog | grep NVRM``` を行ったときに、

```NVRM: API mismatch: the client has version 361.62, but this kernel module has the version 367.27``` のように出ているケースでは
直ると思います。

# 動作確認

```
$ nvidia-smi
```

を実行して、GTX-1080とか表示されればOkです。

また、先ほどのcuda_8.0.27_linux-runのinstall時に、CUDA sampleもinstallしている場合には、

```
$ cd NVIDIA_CUDA-8.0_Samples/5_Simulations/nbody
$ make
$ ./nbody -benchmark -numbodies=256000 -device=0
```

のようにして、動作確認ができるはずです。

Enjoy CUDAライフ! on Ubuntu 16.04 LTS!
ｫｨぃっんなったらラズパィゼロって買えるんだ！？（怒；

６００円のＰＣ並みマイコンボード＝ラズベリーパイゼロ；

![0001_m.jpg](https://qiita-image-store.s3.amazonaws.com/0/114247/d7d75df0-9d3b-b5ec-cb9e-19280da4c97a.jpeg)


どこにも売って無ヒ；　　#全て品切れ

なﾓﾝだから、アマゾンでは５千円のプレミア価格
で、売られてた；
finatra 二歩目

# 前回
http://qiita.com/FScoward/items/5f7037941a8c592bcb66

---

# 今回は
前回簡単にjsonデータのやり取りが出来たので、今回はDBにデータを保存するところをやりたいと思います

---

# Quill
使用するのはQuillです。
http://getquill.io#quotation-introduction
Slickでもなく、ScalikeJDBCでもなくQuillです。

## 参考
http://takezoe.hatenablog.com/entry/2016/03/03/210701
http://yuutookun.hatenablog.com/entry/2016/03/07/081722

---

# マッピング

QuillはSlickと違ってcase classをそのままテーブル定義として扱うことが出来るようです。
そのためcase classとテーブル定義は完全一致していなければなりません。（大文字小文字もひっくるめて完全一致です！）
※http://getquill.io#extending-quill-mapped-encoding のNaming strategyを見ると、SnakeCaseとかの指定で、完全でなくても良いのかもしれませんが

---


# sbt

```scala:buid.sbt
  "io.getquill" % "quill-async_2.11" % "0.6.0",
  "com.zaxxer" % "HikariCP" % "2.4.3",
  "com.typesafe" % "config" % "1.3.0"
```

---

# 設定

## mysql
↓を参考にdockerでmysqlを立ち上げておいてスキーマとテーブルを作成します。
http://qiita.com/T0000N/items/e5bac2e5bcdf476824f6

```sql:1.sql
-- MySQL Script generated by MySQL Workbench
-- 06/24/16 00:07:32
-- Model: New Model    Version: 1.0
-- MySQL Workbench Forward Engineering

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';

-- -----------------------------------------------------
-- Schema handshake
-- -----------------------------------------------------

-- -----------------------------------------------------
-- Schema handshake
-- -----------------------------------------------------
CREATE SCHEMA IF NOT EXISTS `handshake` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ;
USE `handshake` ;

-- -----------------------------------------------------
-- Table `handshake`.`Groups`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `handshake`.`Groups` (
  `group_id` BIGINT(20) NOT NULL COMMENT '',
  `name` VARCHAR(45) NOT NULL COMMENT '',
  PRIMARY KEY (`group_id`)  COMMENT '')
ENGINE = InnoDB;


SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
```

## application.conf
```scala:application.conf
db.host=192.168.99.100
db.port=32773
db.user=root
db.password=topsecret
db.database=handshake
db.poolMaxQueueSize=4
db.poolMaxObjects=4
db.poolMaxIdle=999999999
db.poolValidationInterval=100
```

---

# Code

```
package repository

import io.getquill._
import io.getquill.naming.Literal
import models.Groups

import scala.concurrent.ExecutionContext.Implicits.global

/**
  * Created by Fumiyasu on 2016/06/22.
  */
class GroupRepository {

  lazy val db = source(new MysqlAsyncSourceConfig[Literal]("db"))

  def save(groups: Groups) = {

    val q = quote(query[Groups].insert)
    db.run(q)(List(groups))
  }
}
```

今回はMysqlを使用するので`MysqlAsyncSourceConfig`を使用します。
`Literal`はcase class完全一致だと思います。

たったこれだけのコードでインサート出来るという。。。
インサート処理ですが、
`db.run(q)(groups)`でもイケるみたいなことがドキュメントにありますが、Listにしないとエラーになりました。。。（なんで？

---

# 今回はここまで
https://github.com/FScoward/handshake-api/tree/0.2
Git for Windows だってきれいな差分を見たい for not MSYS

# うらやましい
[Git2.9のキレイなdiffを出すためのconfig](http://qiita.com/takyam/items/d6afacc7934de9b0e85e)

# Git for Windowsでもいけるらしい！
[Git for Windows だってきれいな差分を見たい](http://qiita.com/tomoki1207/items/68d5d8c71fd31bac7451)

![notgood.png](https://qiita-image-store.s3.amazonaws.com/0/103302/30a06720-1992-f4bb-af4c-d7d671147dee.png)

(´・ω・｀)

~~たぶんMSYSだとshbang読んで上手くいくんだろうけど、非MSYSなシェル([NYAOS](http://www.nyaos.org/index.cgi?p=FrontPage.ja))使っているとダメっぽい。~~

# ~~diff-highlightはPerlスクリプトである~~
![good.png](https://qiita-image-store.s3.amazonaws.com/0/103302/4e6ecb7b-4cbb-9cb6-1330-4ed18edd2e06.png)

~~明示的にperlで呼ぶ設定を書くといけた！~~

~~どっとはらい~~

# 訂正
PortableGitだと`PortableGit/usr/bin/diff-highlight`のパスに置くと解決してかつshで実行してくれるっぽい。

git.exeがまるでMSYSのように独自のパス解決してるっぽいですね。

というわけで、PortableGitの場合「[Git for Windows だってきれいな差分を見たい](http://qiita.com/tomoki1207/items/68d5d8c71fd31bac7451)」の

> %USERPROFILE%AppData\AppData\Local\Programs\Git\usr\bin に diff-highlight として保存

を

> PortableGit/usr/bin に diff-highlight として保存

と読み替えるとちゃんと動きます。

とっぴんぱらりのぷぅ
WWDC2016: Platforms State of Union もくじ (前半)

#はじめに#
WWDC2016の[Platforms State of Union - Session 102](https://developer.apple.com/videos/play/wwdc2016/102/)の目次を共有します。関心のある部分にジャンプしやすいように、(再生時刻)を書いてあります。

#Welcome (0:25)#
・概要説明

#iMessage Apps (2:30)#
・iMessage AppsはExtensionとして提供される。
・届いたコンテンツがどのアプリで作成されたのかリンクがつく。
・iMessage App Storeが創設される。
・コーディングなしでSticker Packageを作ることができる。Asset Catalogに画像を追加してビルドするだけの簡単さ。
・UIKitでExtensionを作れて、iMessage内で動的に投稿内容を作ることができる。アイスクリームアプリの例。
・SimulatorでiMessageのランができる。

#SiriKit(10:15)#
・speech→intent→action→responseという流れをとる。
・speech→intentの間で、Vocabularyが必要になるが、App Vocabularyの方はplistで指定する。User Vocabularyの方はcodeで指定する。
・intent→action→responseの間では、アプリロジックが必要になる。
・responseのところでは、ユーザインターフェースを作ることができる。UIKitを使える。
・Extensionsとして開発する。
・用途は6つに限定されている。メッセージ、VoIPコール、支払い、車の予約、写真検索、ワークアウト。
・日本語にも対応。

#Swift 3(16:36)#
・Package Managerでクロスプラットフォームで同じSwiftコードを共有しやすくなる。
・SwiftでのAPIの記述がより完結になる。
・Xcode 8はSwift2.3も含んでいる。
・Swift on the iPadは、swiftの教育用のツールである。Xcodeのように本格的にアプリを開発するためには使えない。

#Xcode 8(36:05)#
・Source Editorでアクティブになっている行のハイライトを表示できる。
・Swift Color Literalで色を直感的に指定できる。
・Swift Image Literals
　-参照する画像を変更する必要がないときに、直接的にImage Literalを使うことができる。
　-小さな画像サムネイルの形でソースコードに入れて使うことができる。
・自動的にDocumentationのテンプレートを作成してもらえる。funcのI/Oのコメント作成が楽になる。
・Xcode App Extensionsを開発できるようになる。
 - ソース編集、コンテンツの追加削除、変形、選択、ペーストボード修正、in-fileナビゲージョン
 - Xcodeのプロセスとは分離されている。
- IBはズームできるようになった。
- Accessibility + Scriptability。IBとVoiceOverの連携が強化されて、AppleScriptによる自動化が強化された。
- Development Issues。135の新しい診断。3つの新しいアナライザー。新しいテストのシステムを用意した。Cpatured Crash Log, Test Without Building(ビルドする前にテストできる)。
- Runtime Issues. UIでは、レイアウトの問題を扱う。曖昧なレイアウト(制約が衝突しているなど)を指摘してくれる。Threadsでは、Thread Sanitizerを統合して、一般的なスレッドの問題を調べられるようになった。Memoryでは、オブジェクトグラフを表示できる。
- Demo(50:05)
- Provisioning(53:40) コード署名のイライラを解決。一つ目は自動コード署名。カスタマイズされたコード署名を使える(ビルド前の設定を複数用意して切り替えて使うことができる)。もう一つは、開発署名。複数の開発署名に対応する。切り替えのためにリボークする必要がなくなる。
・Performance。インデックスのための処理速度が50倍高速化した。
Docker Hubで拾った日本語に冷たいDebianのlocale設定

## 背景

開発以外に時間を使いたくないからDocker Hubで見つけたそのへんのimageを使うことが多いんだけど、localeの設定が割りと面倒でいつも泣きたくなる。
localeの設定なんてググればごろごろ出てくるんだけど、環境が違うせいでどれも上手くいかなくて更に泣きたくなる。泣いた。

## 対象者

自分

## 環境

Debian GNU/Linux 8

## 手順

大抵locales入っていないと思う（だからここを見ているはずだ！ドヤア）のでインスコしてLC_ALLにぶち込む。
dpkg-reconfigureで275番を選ぶと良い

```
$ sudo apt-get install locales
$ sudo dpkg-reconfigure locales
$ export LC_ALL=ja_JP.UTF-8
```

以上

内容しょぼすぎて公開すべきかためらった。
あくまでも将来の自分のため
Stackを使ったHaskellのインストール

### はじめに

今までは、GHCを直接インストールして使っていたが、stackを使う方が簡単らしいので、導入方法についてまとめました。

### Macの場合

brewで入れるのが簡単。

    $ brew install haskell-stack

グローバルの設定を行う場合は、`~/.stack/global-project/stack.yaml`を開いて設定する。今回は、Haskellのバージョンを設定するresolverのところを最新版にしてみる。

resolverはLong-Term-Supportのバージョンで指定するのが一般的。例えば、次のようにする。

    resolver: lts-5.17

あるいは、直接GHCのバージョンで指定してもOK

    resolver: ghc-8.0.1

もしくは、最新版をビルドの日付で指定しても良い。

    resolver: nightly-2016-06-01

ちなみに、stack.yamlの全体で次のようになる。

    flags: {}
    extra-package-dbs: []
    packages: []
    #extra-deps: []
    extra-deps:
    - pipes-http-1.0.2
    
    #resolver: lts-5.17
    #resolver: ghc-8.0.1
    resolver: nightly-2016-06-01

(#から始まるのはコメント)

extra-depsは、特別に依存しているライブラリを入れる場合。通常はプロジェクトごとのstack.yamlで設定するので、グローバルのstack.yamlには入れなくて良い。

stack.yamlの設定ができたら、

    $ stack setup

を一回実行する。


### Windowsの場合

chocolateyで入れるのが簡単なようだが、試していない。
自分は、
https://github.com/commercialhaskell/stack/releases/
からWindows 64ビット版インストーラをダウンロードして実行した。

グローバルの設定は、

%USERPROFILE%\AppData\Roaming\stack\global-project\stack.yaml

を編集して行う。編集内容は、Macのときと同じ。

そして、コマンドプロンプトから

    > stack setup

を実行すればOK


### 最初のアプリケーション

適当な作業ディレクトリに移動して

    $ stack new app1

これで、app1ディレクトリが作成され、そこにアプリの雛形が作成される。
stack.yaml は、このアプリケーションで使う設定ファイル。Haskellのバージョンや読み込む外部ラリブリを設定出来る。
app1.cabal も、このアプリケーションで使う設定ファイル。ライブラリの依存性などを設定する。

今回は、設定は何も変更しない。最初に、一度buildを行う
 
    $ stack build

(stack.yamlやapp1.cabalを変更したときも、stack buildを一度実行する)

app/Main.hsを編集する。今回は、何もモジュールを使わないので、次のようにする。

    module Main where
    
    main :: IO ()
    main = print "Hello World!"

そして、実行

    $ stack runghc app/Main.hs

"Hello World!"と表示されれば成功

### 追記

開発環境を充実させていくには、
http://qiita.com/td2sk/items/9e4b49a4a31b7138d3ad
に丁寧な説明がある。

### 2018/04/24追記

GHSとバージョンの対応はこちらを参照
https://wiki.haskell.org/Base_package
VSCode Insidersのタブ機能を試す

[Visual Studio Code June 2016 1.3](https://github.com/Microsoft/vscode-docs/blob/vnext/release-notes/June_2016.md)で実験的ですが個人的には待望のタブ機能が使えるようになったみたいだったので、試してみることにしました。

まず、VSCodeをVersion1.3にします。現時点ではInsiderビルドにする必要があります。
ただ、バージョンを1.3にあげてもデフォルトでは無効になっているため、設定を変更します。

```json
{
    "workbench.editor.showTabs": true
}
```

これでOKです。

Preview機能系を切りたい場合は、この辺りを設定しておきます。

```json
{
    "workbench.editor.enablePreview": false,
    "workbench.editor.enablePreviewFromQuickOpen": false
}
```

こんな感じで使えることになります。
![スクリーンショット 2016-06-23 21.34.00.png](https://qiita-image-store.s3.amazonaws.com/0/11214/48ab9dd3-7fe0-e289-4b30-2b7f5c1ba597.png)

フィードバックしてねってって書いてあったので色々と試してみようと思います。
Java で JavaScript を実行する


```java
package hello.javax.script;

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

public class HelloScriptEngine3 {

	public static void main(String[] args) {

		System.out.println("[Hello,JavaScript]");

		// Hello, JavaScript
		{
			// Get the JavaScript engine
			ScriptEngineManager manager = new ScriptEngineManager();
			ScriptEngine engine = manager.getEngineByName("JavaScript");

			// 実行する
			String script1 = "var msg=\"Hello, JavaScript\"; println(msg);";
			try {
				// JavaScript 組み込み関数 println で出力
				engine.eval(script1); // Hello, JavaScript
			} catch (ScriptException e) {
				e.printStackTrace();
			}
		}

		System.out.println("[Object]");
		// JSON
		{
			// Get the JavaScript engine
			ScriptEngineManager manager = new ScriptEngineManager();
			ScriptEngine engine = manager.getEngineByName("JavaScript");

			String script2 = "var o = {x:1,y:2}; println(o.x);";
			try {
				engine.eval(script2); // 1
			} catch (ScriptException e) {
				e.printStackTrace();
			}
		}

		System.out.println("[function]");
		// Function definition and call
		{
			// Get the JavaScript engine
			ScriptEngineManager manager = new ScriptEngineManager();
			ScriptEngine engine = manager.getEngineByName("JavaScript");
			// 関数の定義と変数への代入
			String script1 = "function f1(x,y){return x+y;} var b = f1(1,3);";
			try {
				engine.eval(script1);
				// 変数の取り出し
				System.out.println(engine.get("b")); // 4.0
			} catch (ScriptException e) {
				e.printStackTrace();
			}
		}

		System.out.println("[function2]");
		{
			// Get the JavaScript engine
			ScriptEngineManager manager = new ScriptEngineManager();
			ScriptEngine engine = manager.getEngineByName("JavaScript");
			// 関数の定義
			String script1 = "function myfunc(a,b){return a+b;}";
			try {
				engine.eval(script1);
			} catch (ScriptException e) {
				e.printStackTrace();
			}

			{
				String script2 = "b = myfunc(100,-30);";
				try {
					engine.eval(script2);
					System.out.println(engine.get("b")); // 70.0
				} catch (ScriptException e) {
					e.printStackTrace();
				}
			}

		}
	}

}

```
Git でよくあるミスからの復旧方法

たまになってしまって困ったときの対処法をまとめます。
※そうなっちゃう運用が悪いとかいう話は一旦おいておきます...

## ブランチを移動し忘れて、コミットしてしまった
**git cherry-pick**
でコミットするべきだったブランチへコミットを引っ張ってくる

```bash
$ git checkout good_branch # コミット対象だったブランチへ移動
$ git cherry-pick bad-branch # 間違えたブランチからコミットを引っ張ってくる
$ git checkout bad_branch # 間違えたブランチへ移動
$ git reset --hard HEAD^ # 間違えてコミットを削除
```

cherry-pickは
コミットIDが変わって後々マージする時などにリジェクトされたり被ったりすることがあげられるそうです。
([iKenji](http://qiita.com/iKenji)さんから[コメント](http://qiita.com/naotospace@github/items/67ac6cdc250ae8d5fbff#comment-ca735210100f382159e0)にて情報いただきました！)
そのようなことが起こりそうなときにには
**git reset --soft head^** → **git stash**
でコミットも別ブランチへ持っていく

```bash
# bad-branchにいる
$ git reset --soft head^
$ git stash
$ git checkout good-branch
$ git stash pop
```

## addをし忘れてコミットしてしまった
**git add** で対象ファイルをindex登録した後、
**git commit ---amend** で修正コミットを行う

```bash
$ git add app/funciton/forgottenFile # 登録し忘れたファイルをindexへ追加
$ git commit --amend # 直前コミットの修正コミット
```

## コミットメッセージでタイポしてしまった

**git commit ---amend** で修正コミットを行う

```bash
$ git commit --amend # 直前コミットの修正コミット -> editorが起動し修正、コミット
```

## 間違えてマージしていないブランチを消してしまった / git reset --hardで戻しすぎた
**git reflog** で過去のコミット履歴を確認(GCされてたら太刀打ち出来ない)
**git reset --hard HEAD@{番号}** で戻す！

```bash
$ git reglog # 過去のコミット履歴を確認
291612f HEAD@{169}: commit: レビュー反映
1ebcd23 HEAD@{170}: commit: レビュー結果を反映
aef929d HEAD@{171}: commit: お気に入り追加ボタンの修正
f4d3e4c HEAD@{172}: pull origin master: Merge made by the 'recursive' strategy.
58530d7 HEAD@{173}: checkout: moving from 121228_local to master
144f684 HEAD@{174}: checkout: moving from master to 121228_local
58530d7 HEAD@{175}: clone: from https://example.git
$ git reset --hard HEAD@{170} # 番号を指定し、その部分まで戻れる
```

## うっかり別の人がgit config設定済のOSユーザでコミットしてしまった

コミットログが自分ではないユーザになってしまった時の修正方法です。
[参考: Git の Commit Author と Commiter を変更する](http://qiita.com/sea_mountain/items/d70216a5bc16a88ed932)

**git config**で usernameとemailを修正
**git commit --amend --author** でAuthorを修正

```bash:git_config修正
$ git config --local user.name naotokishino
$ git config --local user.email naotokishino@example.com
```

```bash:author修正
git commit --amend --author="naotokishino <naotokishino@example.com>"
```
【プレゼン資料】FirebaseのAuthとは


## FirebaseのAuth機能について

- 機能の説明だけで５分使いそうなのでコードは全然出てきません…。

![2ZI.jpg](https://qiita-image-store.s3.amazonaws.com/0/4560/322953eb-a929-9d3d-3ca1-cb56d1e34561.jpeg)

----

## FirebaseのAuth機能について

- Auth系のtoken取得／管理をうまいことやってくれる機能
- 機能自体は以前からあった（はず）
- Twitter/GitHub/Facebook/Googleログインに対応
    - 他のログインシステムも、ちょっと特殊な方法でいけるらしい？（未調査）
- Email+passwordの独自アカウントにも対応
- 匿名アカウントの発行も可能
- 各種アカウントの連携もOK

----

## Firebase Auth管理画面(1)
![スクリーンショット_2016-06-21_19_11_07.png](https://qiita-image-store.s3.amazonaws.com/0/4560/c74356dc-930a-530c-b2ec-436f0d473bb0.png)

- 連携したアカウントのプロバイダがどうなるかは調べてません……（謝罪）

----

## Firebase Auth管理画面(2)
<img width="935" alt="スクリーンショット 2016-06-22 12.01.27.png" src="https://qiita-image-store.s3.amazonaws.com/0/4560/7a3bf101-81a1-e0b3-a124-3ec8ce8ff5e3.png">

----

## Firebase Auth管理画面(3)
<img width="937" alt="スクリーンショット 2016-06-22 12.01.43.png" src="https://qiita-image-store.s3.amazonaws.com/0/4560/e194039d-0ba6-8ee7-bfe8-bd452f6d8307.png">

----

## 管理できる情報

```
user.getUid();         // UID（ユーザー一意のID）
user.getDisplayName(); // 表示名
user.getEmail();       // E-mail
user.getPhotoUrl();    // プロフ用画像URL
user.getProviders();   // プロバイダ情報
user.isAnonymous();    // true:匿名ユーザー
```

- UIDは必ず生成される（コンソールでユーザーを特定するためにも使える）
- 表示名／E-mail／プロフ用画像URLは、連携元のSNS情報が引っ張られることもある


----

## Email＋password登録の場合

```
Auth.createUserWithEmailAndPassword(mailAddress, password)
        .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                if (task.isSuccessful()) {
                    // 登録成功
                }
            }
        });
```
- ログインもほぼ同様（メソッドが違うのみ）
- パスワードとかの暗号化は、多分Google Play Service側でいい感じにやってくれる（はず）

----

## 注意点

- SNSログイン自体の仕組みは、それぞれのSDKで実装すること
    - あくまでもFirebaseがやってくれることは、callbackされてからのtoken管理のみ
- E-mail＋password方式の場合、確認メールが飛んでこない
    - パスワード変更時は、登録したメールに変更URL情報が送られてくる
- E-mail＋password方式のpasswordはデフォルトルール有り（６文字以上）
- Google Play Serviceがない端末（エミュ）では使えない

----

## 雑感

- あくまでもやってくれるのは「ユーザーの管理」
    - 詳細なユーザー情報は、Databaseなどを使いましょう。
- メールアドレスの保管、プライバシーポリシーとか個人情報保護的に大丈夫かな…？


----

## 雑感（Qiitaスライドモード）

- ディスプレイのアス比に影響されるのがつらい…
- 自己紹介＋会社紹介書いた状態で公開しづらい（気がする）
    - むしろ人によってはいいことかもしれない
- ただしコードをキャプせずに載せられるので神
- そしてmarkdownで作れるので神

----

## 以上
Java で JSON を読みやすい文字列に変換する


REST API の結果を人間用に表示したいときに便利な方法。

```java
package hello.javax.script;

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

public class HelloJsonFormatter {

	public static void main(String[] args) {

		// やりたいこと
		// JSON {"kekka":"XXX"} を 「結果はXXXです。」に変換する

		// こういうJSONがあったとする。
		String jsonString = "{\"kekka\":\"XXX\"}";
		// JSONに対して、このような設定をJavaScriptで書いておくと、JSON を読みやすい文字列に変換可能。
		// JavaScript の構文は全部使えるので複雑な条件式も「設定文字列」として用意できるため柔軟なプログラムにできる
		String jsonMessageProperty = "\"結果は「\"+obj.kekka+\"」です。\"";

		HelloJsonFormatter formatter = new HelloJsonFormatter();
		String s = formatter.formatJson(jsonString, jsonMessageProperty);

		System.err.println(s); // 結果は「XXX」です。

	}

	// TODO Object の static化など
	public String formatJson(String json, String property) {
		// Get the JavaScript engine
		ScriptEngineManager manager = new ScriptEngineManager();
		ScriptEngine engine = manager.getEngineByName("JavaScript");
		String script = "var obj = " + json + ";"//
				+ "var msg = " + property;
		try {
			engine.eval(script);
			String msg = (String) engine.eval("msg");
			return msg;
		} catch (ScriptException e) {
			e.printStackTrace();
		}
		return null;
	}

}

```
TeXlive-basic2016からlatexmkコマンドが消えた。

環境はMac OS X Yosemiteで`texlive-basic`を`home-brew cask`でインストール済み

いつもどおり`latexmk`コマンドでTeXファイルをコンパイルしようとしたら。

```bash
-bash: latexmk: command not found
```

と出てパスからなくなっていた。

どうやら`latex`のパスが`/usr/local/texlive2015basic`から`/usr/local/texlive2016basic`に変わっていて`texlive2016basic`には`latexmk`がなかった。

とりあえず、`.bashrc`にエイリアス貼って対処した。

```bash
alias latexmk='/usr/local/texlive/2015basic/bin/x86_64-darwin/latexmk'
```

ただパスが変わったのでこれまで入れたプラグインなどが使えなくなってた。これなら新しく`mactex`を入れたほうが良いかもしれないですね。
TLCとは


2016-06-23 20:40ころ

Trelloが突然見られなくなった。

![SnapCrab_2016-06-23_20-43-02_No-0000.png](https://qiita-image-store.s3.amazonaws.com/0/99546/56b24b05-8279-c37b-001a-f9393cea4304.png)

TLCってなに。

http://www.internetslang.com/TLC-meaning-definition.asp

>The definition of TLC is "Tender Loving Care"

__Tender Loving Care__
直訳
**思いやりと気遣いのあるケア**

こういうの好き。
Java8のJava.time APIを用いてユーティリティを書いてみた。

Java8のJava.time APIを用いてユーティリティを書いてみた。

Java8のnew DateTimeFormatter.ofPattern("yyyy/MM/dd")は、1980/1/1がParseエラーとなる。
1980/01/01ならOK。

これなら旧来のnew SimpleDateFormat("yyyy/MM/dd")の方が使い勝手が良い気がする。
もうちょっと研究が必要かな。


```MyDateUtil.java
package com.example.util;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAccessor;
import java.util.Date;

public class MyDateUtil {

	/**
	 * Parse String to Date.
	 * (Using Java8 java.time....)
	 * 
	 * @param birthDay "yyyy/MM/dd" format
	 * @return java.util.Date
	 */
	public static Date parse(String date) {
		
		DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy/MM/dd");
		TemporalAccessor ta = fmt.parse(date);
        	ZonedDateTime zdt = LocalDate.from(ta).atTime(0, 0).atZone(ZoneId.of("Asia/Tokyo"));
        	return  Date.from(zdt.toInstant());
	}
	
	/**
	 * Using traditional Java.util.Date
	 *  @param Object "yyyy/MM/dd" format String
	 *  return java.util.Date
	 */
	public static Date toDate(Object object) {
		String in = object.toString();
		Date date;
		DateFormat formater = new SimpleDateFormat("yyyy/MM/dd");
		try {
			date = formater.parse(in);
			return date;
		} catch (ParseException e) {
			return null;
		}
	}
}
```
Java で文字種判定


```java
// Character.UnicodeBlock.BASIC_LATIN
Character.UnicodeBlock.of('a');
// Character.UnicodeBlock.HIRAGANA
Character.UnicodeBlock.of('あ');
// Character.UnicodeBlock.KATAKANA
Character.UnicodeBlock.of('ア');
// Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS
Character.UnicodeBlock.of('ｱ');
// Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS
Character.UnicodeBlock.of('漢');
// Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS
Character.UnicodeBlock.of('Ａ');
// Character.UnicodeBlock.HANGUL_JAMO
Character.UnicodeBlock.of('\u1100');

{
	char c = 'あ';

	if (Character.UnicodeBlock.of(c) == Character.UnicodeBlock.HIRAGANA) {
		System.out.println("ひらがなです");
	} else {
		System.out.println("NOTひらがなです");
	}
}

```
NodeでSJISのCSVを読み込む

Windows環境向けに出力されたCSVって大抵SJISですよね。
まぁSJISならダブルクリックでエクセルで開けて便利ですからね。
で、それをNodeで読み込む際にはUTF8にする必要があるのでその方法。

```console
$ node -v
v6.2.2
$ npm install csv iconv-lite
$ npm ls
├─┬ csv@1.1.0
│ ├── csv-generate@1.0.0
│ ├── csv-parse@1.1.1
│ ├─┬ csv-stringify@1.0.4
│ │ └─┬ lodash.get@4.3.0
│ │   └─┬ lodash._stringtopath@4.8.0
│ │     └── lodash._basetostring@4.12.0
│ └── stream-transform@0.1.1
└── iconv-lite@0.4.13
```

```js:csv_sample.js 
var fs = require('fs');
var iconv = require('iconv-lite');
var csv = require('csv');

var rs = fs.createReadStream('sample.csv')
    .pipe(iconv.decodeStream('SJIS'))
    .pipe(iconv.encodeStream('UTF-8'))
    .pipe(csv.parse())
    .pipe(csv.transform(function(record) {
      console.log(record);
    }));
```
スクロール時にテーブルのヘッダを固定する

車輪の再発明感ありますが、jQuery 2.x系でスクロール時にテーブルのヘッダを固定するjavascript書いてみました。

```js
function fixTableHeader() {
  var tableElement = $('#fixed-table')
  var tableTop = tableElement.offset().top - $(window).scrollTop()

  if(tableTop < 0) {
    if ($('#clone-header').size() == 0) {
      // theadのcloneを作成
      var cloneHeader = tableElement.children('thead').clone()
      cloneHeader.attr('id', 'clone-header')
      tableElement.append(cloneHeader)
    } else {
      var cloneHeader = $('#clone-header')
      var originalHeader = tableElement.children('thead').first()

      // 上に固定するようにcssを当てる
      cloneHeader.css('position', 'fixed');
      cloneHeader.css('top', '0');
      cloneHeader.css('border-left', 'none');
      cloneHeader.css('border-right', 'none');
      cloneHeader.css('width', originalHeader.css('width'));

      // 横スクロール時の位置調整
      var leftDiff = originalHeader.offset().left - cloneHeader.offset().left
      var marginLeft = parseInt(cloneHeader.css('margin-left'))
      cloneHeader.css('margin-left', (marginLeft + leftDiff) + 'px')

      // 元のthead要素内のthのwidthをあわせる
      var widthList = originalHeader.children('tr').children('th').map(function() {
        return $(this).css('width');
      })
      cloneHeader.children('tr').children('th').map(function(i) {
        $(this).css('width', widthList[i]);
      })
    }
  } else {
    if ($('#clone-header').size() > 0) {
      // 不要になったら消す
      $('#clone-header').remove()
    }
  }
}

```

jsfiddleで動作確認できます。
https://jsfiddle.net/hidechae/hfon2trh/
PHPメモ【書き方】

メモ

# 閉じタグについて
PHPはHTMLコードに埋め込まれている言語。
`<?php～?>`のことを、**スクリプティングデリミタ(PHPタグ)**という。

拡張子が`.php`の場合、ファイルの末尾にスクリプトの閉じタグ(`?>`)は省略できる。
ちなみにスクリプトの後にHTMLコードが有る場合は省略できない。
終了タグの後に空白や改行があるとデザイン崩れが起きるので注意。


# キャスト
PHPは型定義がRubyっぽいけどキャストできるらしいよ！
いやRubyもできるけど、キャストの仕方がめちゃくちゃC言語っぽい！ 気がする！

`var_dump`って変数の型と情報を見せてくれるらしい。
便利っ子！

```php
<?php
 var_dump((int)23.5);
 var_dump((int)-1000.1234);
 var_dump((unset)"test");
```

`unset`はnull型へのキャスト。
null型にするぐらいなら最初から`null`入れればいいのに、いつ使うんだろ…？
PHPメモ【php.iniの編集】

メモ
独習PHPやりながらメモ。

# php.iniの編集
最低限設定する項目について。
設定後はWebサーバの再起動を実施。

## 今回設定した項目
大体デフォルトのままでOKだったけど……。

* output_buffering
* error_reporting
* default_charset
* date.timezone
* session.use_only_cookies


### output_buffering

```
output_buffering=4096
```

`output_buffering=Off`の場合、実行中へ随時結果を送る。
これを設定すると、実行結果をそのバイト数分まとめて送信できる。
出力のオーバヘッドを軽減できるだけでなく、出力結果全体に対して圧縮や暗号化、コード変換の処理等を施すことができる。

### error_reporting

```
error_reporting=E_ALL & ~E_NOTICE
```

エラーの出力レベルを変更できる。

出力レベル詳細→[http://php.net/manual/ja/errorfunc.constants.php](http://php.net/manual/ja/errorfunc.constants.php)

* E_ALL：サポートされる全てのエラーと警告
* E_NOTICE：実行時の警告。エラーを発生しうる状況になったことを示す。

E_NOTICEは通常のスクリプト実行時にも出ることもあるそうな。
~(チルダ)を付けると**「それ以外」**という意味になるので、**「E_NOTICE以外の全てのエラー」**という意味になる。

### default_charset

```
default_charset="utf-8"
```

見たまんま。文字コード

### date.timezone

```
date.timezone=Asia/Tokyo
```

見たまんま。タイムゾーン。

### session.use_only_cookies

```
session.use_only_cookies=On
```

セッションIDの保存に**Cookieのみ**を使用することを指定する。

## phpinfoでの確認
localhost見に行くとdashboard画面へ。
ここで**PHPinfo**を押すと設定値が見れる。**Local Value**がhttpd.confや.htaccessで上書きした値。**Master Value**がphp.iniで設定した値。

error_reportingの設定値は数値で表示される模様。
難しい……。
GitHub APIでユーザー情報を取得する

Pull Requestの取得に続いて、ユーザー情報取得を試してみる。

# 前提
GitHubで「Personal access tokens」から[Tokenを取得](http://qiita.com/kz800/items/497ec70bff3e555dacd0)しておく。
※「Select scopes」は全て未選択の状態でもOKでした。

##GitHub APIリファレンス
[Get a single user](https://developer.github.com/enterprise/2.4/v3/users/#get-a-single-user)

# 実行してみる
## 個別ユーザー情報の取得
```
https://api.github.com/users/kz800?access_token=xxxxx
```
ユーザー情報が返ってくれば成功です。
GitHub APIでPull Requestを取得する

GitHub APIを使って色々してみようと思うので使い方についてのメモ。あくまでメモ。
現時点ではv3が最新のようです。

# 前提
GitHubで「Personal access tokens」からrepoに対して操作可能な[Tokenを取得](http://qiita.com/kz800/items/497ec70bff3e555dacd0)しておく。
※追記：repo操作権限なくても大丈夫でした。

##GitHub APIリファレンス
[List pull requests](https://developer.github.com/enterprise/2.4/v3/pulls/#list-pull-requests)（PRの一覧を取得）
[Get a single pull request](https://developer.github.com/enterprise/2.4/v3/pulls/#get-a-single-pull-request)（個別PRを取得）

# 実行してみる
## Pull Request一覧の取得
```
curl https://api.github.com/repos/kz800/hoge/pulls?access_token=xxxxx&state=open
```

## 個別のPull Requestの取得
```
curl https://api.github.com/repos/kz800/hoge/pulls/1?access_token=xxxxx&state=open
```

一旦これが動作するところまで確認できた。
パラメーターはAPIリファレンスにあるように他にもあるので試してみたい。

## Tokenはリクエストヘッダに指定することも可能
```
curl -H "Authorization: token xxxxx" https://api.github.com/repos/kz800/hoge/pulls?state=open
```
Chromium OS小技

# この記事は？

Chromium OSを使っていて気づいた小さな事を載せていきます．


## おすすめアプリ

* テキストエディタ 
https://chrome.google.com/webstore/detail/text/mmfbcljfglbokpmkimbfghdkjmjhdgbg

* SSHクライアント
https://chrome.google.com/webstore/detail/secure-shell/pnhechapfaindjhompbnflcldabbghjo

* LINE
https://chrome.google.com/webstore/detail/line/menkifleemblimdogmoihpfopnplikde?gl=JP&hl=ja

* TeamViewer
https://chrome.google.com/webstore/detail/teamviewer/oooiobdokpcfdlahlmcddobejikcmkfo?gl=JP&hl=ja

* Evernote Web
https://chrome.google.com/webstore/detail/evernote-web/lbfehkoinhhcknnbdgnnmjhiladcgbol?gl=JP&hl=ja

* Word
https://chrome.google.com/webstore/detail/word-online/fiombgjlkfpdpkbhfioofeeinbehmajg?gl=JP&hl=ja

* Excel
https://chrome.google.com/webstore/detail/excel-online/iljnkagajgfdmfnnidjijobijlfjfgnb?gl=JP&hl=ja

* PowerPoint
https://chrome.google.com/webstore/detail/powerpoint-online/mdafamggmaaaginooondinjgkgcbpnhp?gl=JP&hl=ja


[1] 私が活用している Chrome 拡張機能 & アプリ 23 選 (Chromebook ユーザーにおすすめ) - ヒトリジョーシス 原宿ベース 
http://www.nakamu.info/entry/chrome-apps

## 環境設定

* 日本語入力（FEP）のONとOFFができなくなった！

設定からキーボードのところの日本語入力において，__下記両方をチェック__する．
・日本語のキーボード　にチェック・・・これが半角（FEP ON）の意味
・Google日本語入力　にもチェック・・・これが全角（FEP OFF）の意味

切り替えは，__半角/全角キー，Shift + Alt，Ctrl + SPC__で切り替えられる．


* キーボードショートカットの確認

__Ctrl + Alt + /__で確認


## Chromium OSをサーバーにしたい

下記がまだできない．

* SSH server

* Samba

## Console (Ctrl + Alt + F2)のBeep音がうるさい

* consoleの音を消す
ユーザフォルダの.inputrcを修正しよう．/etc/inputrcもあるけどRead-onlyで触れません．

> __chronos@localhost ? $__ vi ~/.inputrc

たぶんファイルが新規作成されるので，下記を1行追記する．

set bell-style visible

* viの音を消す

> __chronos@localhost ? $__ vi ~/.vimrc

たぶんファイルが新規作成されるので，下記を1行追記する．

set visualbell

ついでにviの文字コードがlatin1になっているので，UTF-8にしておくのがいいかも

set encoding=utf-8


## 開発したい

* Arduinoマイコン環境を整える

codebenderというサービスを利用する．
USBを認識させるための拡張機能＋IDEとしてのクラウドサービスで成り立っている．
拡張機能は　https://chrome.google.com/webstore/detail/codebender-app/magknjdfniglanojbpadmpjlglepnlko
IDEは　https://codebender.cc

[2] ChromebookにArduinoをつないで開発 - YDブログ 
http://matagotch.hatenablog.com/entry/2015/11/19/210836