OmniAICreator/Qiita-1.07M huggingface dataset:
iPhoneアプリにナビゲーションバーを付ける

#はじめに
iPhoneアプリの上部にはタイトルや戻るボタンがあるバーがありますよね。
あれをナビゲーションバーと言います。
これを付けてみます。

#環境
OS X El Capitan (10.11.4)
Xcode 7.3

#NavigationControllerを埋め込む
Mail.storyboardのViewControllerを選んだ状態にします。
![スクリーンショット 2016-04-10 11.06.28.png](https://qiita-image-store.s3.amazonaws.com/0/106184/adbdc405-f195-6173-95c1-9b47b2da11ee.png)

メニューから、[Editor] - [Embed In] - [NavigationController]を選びます。
![スクリーンショット 2016-04-10 11.21.56.png](https://qiita-image-store.s3.amazonaws.com/0/106184/03b6720c-e66d-7ae0-b99b-82f05916bd4d.png)

既存のView Controller Sceneの左側にNavigation Controller Sceneが追加されます。同時に、既存View Controller SceneにはNavigation Itemが追加されます。
![スクリーンショット 2016-04-10 11.31.55.png](https://qiita-image-store.s3.amazonaws.com/0/106184/fecb1939-c507-d18a-c54e-eb7b7437f835.png)

Navigation Controller Sceneは画面には表示されません。表示されるのはView Controller Sceneです。

#最初の画面にタイトルを付ける
View Controller SceneのVavigation Itemを選択します。
![スクリーンショット 2016-04-10 12.44.33.png](https://qiita-image-store.s3.amazonaws.com/0/106184/46ccf07d-abe7-40dd-dd27-4a45dc852b08.png)

右のアトリビュートインスペクタでタイトルを設定します。
![スクリーンショット 2016-04-10 12.48.31.png](https://qiita-image-store.s3.amazonaws.com/0/106184/95a7a6ea-13ee-f1b8-bb5a-edd784b970f7.png)

こんな感じになります。
![スクリーンショット 2016-04-10 12.50.09.png](https://qiita-image-store.s3.amazonaws.com/0/106184/7f136ec7-27a0-4eae-ad17-e3f0b636ac06.png)

#第二画面を作る
右のオブジェクトライブラリからView Controllerを空いているところにドラッグ＆ドロップして、見やすい位置に移動します。
![201604101700.png](https://qiita-image-store.s3.amazonaws.com/0/106184/08a2ce47-e30f-0c03-bd12-d66435f0a76e.png)

#画面をつなぐ
最初の画面に、画面遷移のためのボタンを追加します。
![201604101744.png](https://qiita-image-store.s3.amazonaws.com/0/106184/513a3c90-b3c8-7bac-9d88-f00d43279daa.png)

そのボタンを右クリックのドラッグ＆ドロップで第二画面にドロップします。
![スクリーンショット 2016-04-10 17.54.02.png](https://qiita-image-store.s3.amazonaws.com/0/106184/5c69f59a-59f3-2624-0933-a9e4b465e79b.png)

ドロップした時のポップアップではShowを選択します。
![スクリーンショット 2016-04-10 18.13.35.png](https://qiita-image-store.s3.amazonaws.com/0/106184/dcbfa484-745d-7929-418e-174994508622.png)

最初の画面と第二画面がShowセグエでつながりました。自動的に第二画面にナビゲーションバーが付いたように見えますが、これだけではまだ機能しません。
![スクリーンショット 2016-04-10 18.22.32.png](https://qiita-image-store.s3.amazonaws.com/0/106184/93411fac-37ca-e85b-d429-7341727cd360.png)

第二画面に、右のオブジェクトライブラリからNavigation Itemをドラッグ＆ドロップします。黄色のNavigation Controllerではないので注意してください。
![201604101858.png](https://qiita-image-store.s3.amazonaws.com/0/106184/470ea57d-e6be-ca95-702e-fc6c7584f143.png)

タイトルを付けます。
![スクリーンショット 2016-04-10 19.02.49.png](https://qiita-image-store.s3.amazonaws.com/0/106184/06c85b66-6eb6-1f4a-301d-43ad036e4973.png)

#動かしてみる
動作させてみると、第二画面の戻るボタンは自動的に付くことがわかると思います。
外部ファイルからWordPressのライブラリを利用する

WordPressサイト上でこっそりとコードを検証したいときなどに外部PHPファイルを設置しておくと作業が捗ります。
ドキュメントルート直下に単体のphpファイルを設置して、以下のコードを記述すればOKです。

もし、ドキュメントルート直下ではなく、下層フォルダに配置するときは wp-blog-header.php 、wp-load.php の2つのパスを適宜置き換えてください。


#WordPressコード検証用 単体PHPスクリプト

```
<?php
/**
 * 外部ファイルからWordPressのライブラリを利用する
 */
global $wp, $wp_query, $wp_the_query, $wp_rewrite, $wp_did_header,$current_user;
define('WP_USE_THEMES', false);
require_once ('./wp-blog-header.php');
require_once('./wp-load.php');
wp();
require_once( ABSPATH . WPINC . '/template-loader.php' );
require_once(ABSPATH . 'wp-admin/includes/admin.php');
?>
<?php get_header(); ?>
<?php

//ここに処理を記述する

?>
<?php get_footer(); ?>
```

以上です。
【圏論メモ】 表記法について

表記法について。
圏論を勉強していると、圏の圏の射は関手だったり、関手の圏の対象は関手だったりと、何がなにやら混乱することがある。今どの世界線の話をしているのか、常に意識をしなければならない。

文中に出現した記号が、圏なのか、対象なのか、関手なのか、ということをフォントによって見分けられることを目指す。
例外も多いので目安程度に。

# 圏
`\textbf` の大文字を使用する。

```math
\textbf{ABCDEFGHIJKLMNOPQRSTUVWXYZ}\\
\textbf{Set}, \textbf{Grp}, \textbf{Top}, \textbf{Mon}, \dots
```

双対圏は `\textrm{op}` を肩に添え、 $\textbf{C}^\textrm{op}$ と表す。

# 対象
通常の大文字を使用する。

```math
ABCDEFGHIJKLMNOPQRSTUVWXYZ\\
A, B \in \textbf{Ob(C)}
```

ただし、添字圏の対象は小文字 $i, j, \dots$ を使用する。

```math
\mathcal{D}: \textbf{J} \rightarrow \textbf{C}\\
```

```math
\begin{array}{clc}
L\\
\phantom{\overset{\varphi_i}{}} \big\downarrow \overset{\varphi_i}{} & \searrow^{\varphi_j} \\
\mathcal{D}i & \rightarrow & \mathcal{D}j
\end{array}
```

# 射
通常の小文字を使用する。

```math
abcdefghijklmnopqrstuvwxyz\\
f: A \rightarrow B\\
f \in \textrm{Hom}_\textbf{C}(A, B)
```

ただし図式 $\mathcal{D}$ への錐を構成する射はギリシャ文字を使用する。

# 関手
`\mathcal` の大文字を使用する。対象や射への適用の際は括弧を省略する。

```math
\mathcal{ABCDEFGHIJKLMNOPQRSTUVWXYZ}\\
\mathcal{F}: \textbf{C} \rightarrow \textbf{D}\\
\mathcal{F}A \in \textbf{Ob(D)}\\
\mathcal{F}f: \mathcal{F}A \rightarrow \mathcal{F}B
```

```math
\mathcal{Cone}(-, \mathcal{D}): \textbf{C}^\textrm{op} \rightarrow \textbf{Set}
```

# 自然変換
ギリシャ文字の小文字を使用する。

```math
\alpha\beta\gamma\delta\varepsilon\zeta\eta\vartheta\iota\kappa\lambda\mu\nu\xi\omicron\pi\rho\sigma\tau\upsilon\varphi\chi\psi\omega\\
\vartheta: \mathcal{F} \rightarrow \mathcal{G}
```

```math
\begin{array}{ccc}
in\textbf{C}&in\textbf{D}\\
A & \mathcal{F}A & \xrightarrow{\hspace{1em}\vartheta_A\hspace{1em}} & \mathcal{G}A\\
\phantom{\overset{f}{}}\Bigg\downarrow \overset{f}{} & \phantom{\overset{\mathcal{F}f}{}}\Bigg\downarrow \overset{\mathcal{F}f}{} & \circlearrowright & \phantom{\overset{\mathcal{G}f}{}}\Bigg\downarrow \overset{\mathcal{G}f}{}\\
B & \mathcal{F}B & \xrightarrow{\hspace{1em}\vartheta_B\hspace{1em}} & \mathcal{G}B\\
\end{array}
```

# その他
圏 $\textbf{C}$ の対象の全体を $\textbf{Ob(C)}$ で表す。
圏 $\textbf{C}$ の射の全体を $\textbf{Hom(C)}$ で表す。

太字を使うのはこのくらい（多分）で、後は `\textrm` を使用する。

圏 $\textbf{C}$ において、対象 $A$ から対象 $B$ への射の全体を $\textrm{Hom}_\textbf{C}(A, B)$ と表す。
平行射 $f,g: A \rightarrow B$ に対するイコライザを $\textrm{eq}(f, g)$ と表す。
図式 $\mathcal{D}: \textbf{J} \rightarrow \textbf{C}$ の極限を $\underset{\leftarrow}{\textrm{lim}}\mathcal{D}$ と表す。

圏の圏 $\textbf{Cat}$ の対象は圏であるから $\textbf{C}, \textbf{D}, \dots$ と表す。射は関手だから $\mathcal{F}, \mathcal{G}, \dots$ と表す。

関手の圏 $\textbf{D}^\textbf{C}$ の対象は関手であるから $\mathcal{F}, \mathcal{G}, \dots$ と表す。射は自然変換だから $\vartheta, \varphi, \dots$ と表す。
Chainerで超簡単な線形分離やってみた

Chainerの練習として、簡単な線形分離問題にチャレンジしてみた。

# 環境

- OSX 10.11
- python 2.7.11
- chainer 1.7.2

# タスク
身長(cm)、体重(kg)、胸囲(cm)を入力として、肥満状態かどうかを判別する関数を学習したい。ただし、ここで肥満状態とはBMI(体重を身長の2乗で除算した数)が25以上であると定義する。したがって、肥満状態か否かを判定するには体重と身長の情報があれば十分であり、胸囲の情報は不要である。では、今回作る学習器は、はたして胸囲の情報に惑わされることなく、身長と体重だけに注目して肥満状態か否かを見極めることができるようになるのだろうか。

# データ
エクセルでダミーデータを作った。スペース区切りで身長、体重、胸囲、肥満フラグを1行に並べている。身長、体重、胸囲はそれぞれ、男性の平均値に適当な分散をもつ正規乱数を加えて生成した。肥満フラグは、身長と体重から算出されるBMIが25以上であれば1を立てた。これを独立に1000個作り、うち900個を学習用、100個を評価用として分けた。

~~~
身長	体重	胸囲	肥満フラグ
152.5110992	70.64096855	76.24909648	1
176.5483602	72.54812988	79.99468908	0
171.9815877	78.13768514	80.87788608	1
180.013773	77.60660479	79.71464192	0
171.9685041	81.20240554	84.93720091	1
186.3999693	77.03393024	82.25099179	0
175.1117213	81.23388203	86.89111757	1
~~~

![data.png](https://qiita-image-store.s3.amazonaws.com/0/80357/5502a3a6-3a0d-6a9e-6d8d-808250774565.png)

ご覧の通りほぼ線形だ。

# 学習器
Chainerの練習がてら多層パーセプトロンを組んでみた。入力3次元、隠れ素子4次元、出力2次元の3層構造にした。（線形分離タスクなので単層パーセプトロンでも可能。）その他の設定は以下のようにした。

- 活性化関数: ReLu
- 最適化アルゴリズム: Adam
- 誤差関数: ソフトマックス・クロスエントロピー
- Dropout率: 0.5 
- ミニバッチ数: 5
- 反復数(epoch数): 100

~~~python
class MLP(Chain):
  def __init__(self):
    super(MLP, self).__init__(
      # 3-4-2次元のネットワーク
      l1=L.Linear(3, 4),
      l2=L.Linear(4, 2),
     )
  def forward(self, x, t, train):
    h1 = F.dropout(F.relu(self.l1(x)), train=train)
    y = self.l2(h1)
    return F.softmax_cross_entropy(y, t), F.accuracy(y, t)

# インスタンス化
model = MLP()
# 最適化アルゴリズムにはAdamを採用
optimizer = optimizers.Adam()
optimizer.setup(model)

N = 900         # 学習データ数
N_test = 100    # 評価データ数
n_epoch = 100  # 反復数
batchsize = 5   # ミニバッチ
#以下省略
~~~

# 結果
誤差関数と正解率をepoch数でプロットした。
![loss_acc.png](https://qiita-image-store.s3.amazonaws.com/0/80357/c01457a3-d037-60ad-cf91-97c4a05bd90e.png)

  - 左青: 学習データでの誤差関数
  - 左緑: 学習データでの正解率
  - 右青: 評価データでの誤差関数
  - 右緑: 評価データでの正解率

8割弱の性能だった。微妙？

また、学習後に評価データに対してどのような出力がなされるのかを見てみた。

~~~
身長   体重   胸囲   システムが推定した肥満フラグ   正解の肥満フラグ　
[ 179.30055237   69.73477936   84.73832703] 0 0
[ 176.89619446   84.05502319   85.10128021] 1 1
[ 172.04129028   77.36618805   87.89541626] 1 1
[ 168.48660278   73.91072845   84.5171814 ] 1 1
[ 166.53656006   71.42696381   83.17546844] 0 1
[ 163.44270325   77.11021423   90.57539368] 1 1
[ 180.63993835   77.33372498   85.33548737] 0 0
[ 165.73175049   71.87976837   80.57328033] 0 1
~~~

本来は肥満である下から2番目と4番目を正常と判断してしまっていた。いずれも体重だけ見ると低めではある。身長との関係を捉えきれていないのか。

# 詰まりどころ
- overflow encountered in subtract
softmax_cross_entropyを使うところで```overflow encountered in subtract```とかいうエラーが出て、誤差関数がnanになることが多かった。このエラーは、cross-entropy誤差関数を計算するときにlogに0を入力してしまっていることが原因で起きるらしい。実は最初、活性化関数に線形関数を採用していたのだが、それがいけなかったもよう。


- 局所解に陥る
局所解に陥り学習が進まなくなることが何度かあった。ミニバッチ数を小さくしたり、重みの初期値を振りなおして何度も試行し、うまく学習されるまでやり直した。

# 今後
このタスクで性能8割弱は低い。学習率、ミニバッチサイズ、ドロップアウト率、データの正規化など、いろいろ調整して感覚をつかんでいきたい。
githubでC++やC#を検索する方法

githubで　C++やC#のプロジェクトを検索しようと思ったら
ワイルドカード文字は　検索対象外らしく
Cがつくもの全てが列挙されます！

https://github.com/search?utf8=%E2%9C%93&q=C%2B%2B&type=Repositories&ref=searchresults


これではとても不便ですね。というわけで　githubのヘルプを読みます

https://help.github.com/articles/searching-code/#considerations-for-code-search

language:go　などで、言語を指定できるようです
試しに　language:c++

https://github.com/search?utf8=%E2%9C%93&q=language%3AC%2B%2B&type=Repositories&ref=searchresults

素晴らしい。C++でフィルター出来ました


他の言語でも　language:　を使ってサーチしたほうがいいですね。

私は英語読めないのでわかりませんが、他にも色々とサーチのオプションがあるみたい
便利なサーチ方法あったら　教えて下さい！


みんな知ってましたか？　常識ですか？　私は知りませんでした。。。
chromeのデベロッパーツールでcssのhoverを調べる方法

#概要
cssでサイトのデザインをする時にはchromeのデベロッパーツールでセレクタを確認しながら調整をする事が多いのだが、hoverやactiveの要素を調べるやり方がよくわからなかったので調べてみた。

#結果
ググったらすぐ出てきた。

http://stackoverflow.com/questions/4515124/see-hover-state-in-chrome-developer-tools

choromeデベロッパーツールを開いてElementsタブを選びさらにStylesを選んだところにある画鋲iconをクリックすると好きな擬似クラスを指定して調べられる。

![02.jpg](https://qiita-image-store.s3.amazonaws.com/0/89364/a8a5b744-84a4-4a50-39e6-8cdb7f62b9ae.jpeg)


何度も見かけてたはずの画鋲がこんなに便利だとは知らなかった。
Unite2016 メモ

Unity様のブースで会社で出てる疑問に関して質問した所、
マンツーマンでたくさん回答いただいたのでメモ
（長時間本当にありがとうございました。）

■Unityのバージョンが異なるときにキャッシュサーバーを使用した場合どうなるか？

　仕事で共有サーバーだけバージョン5.3.0f4、先行した開発は5.3.4f1だった時
　キャッシュサーバーどうなるんだろうと思って聞いてみました

　基本的には最後に起動したバージョンでインポートされる。
　・・が根本的に使い方がダメ、すべてのバージョンを合わせてキャッシュサーバーを使用するべき

■アセットバンドル名を付けたアセットがアセットバンドル名をつけていないアセットを
　依存関係に持っていた場合、出力したマニフェストファイル内の依存関係はどうなるか？

　予想通り、アセットバンドル名をつけないものは依存関係には含まれない

■Androidのfpsが低い、どのように最適化したらいいか？

　・重いマテリアルは使用しない（スタンダードシェーダーなど・・重いらしい）
　・ポイントライトは使わない
　（モバイルゲームにポイントライトは必要ない、ポイントライトは置いた数だけドローコールが走る）
　・ポリゴン数減らす
　・SpritePackerのサイズを小さく（2048*2048は使用しない）
　・ライトのDeferredをやめる、Forwardを使用
　・描画順を前方からにする（隠れた部分は描かれないので描画負荷が下がる）
　・IL2CPPまだ使わない（Android用の最適化がされていないのでまだ使用しないほうがいい）

　・CPU周りの最適化は1日目の「モバイル端末向けのUnityアプリケーションの最適化実践テクニック」のPDFをじっくり読んで実践する
　　（http://japan.unity3d.com/unite/unite2016/schedule）
　　具体的には、C#RuntimeでのForEachをやめる（これ全員に言われた）、
　　マテリアル・アニメーターの文字列指定呼び出しをやめてハッシュ値を事前定義して使用。
　・GetPixels使ったらダメ

■Guidの作られ方
　Unity内でSeed値をもっていて乱数で生成される、Pathから作られているわけではない。

■.exrのアセットバンドルはロード必要？？

　シーンのライトはこれで反映される

■アセットバンドルの依存関係を解決するには孫側からロードする必要ありますよね？

　そのとおり、依存関係の末端からロードする必要がある。
Elasticsearchでdate型のフォーマットをカスタムして同じデータをBigQueryにもインポートする


ElasticsearchとBigQueryに同じデータを入れたいという要件があったが、今々Elasticsearchの標準の日付型("format": "dateOptionalTime")は、BigQueryのdate型では対応していないので、Elasticsearch側のdate型のフォーマットを変更した時のメモ。


##どう変えるか

BigQueryではdate型のカスタムは出来ないので、[BigQueryでサポートされるdate型のフォーマット]
(https://cloud.google.com/bigquery/preparing-data-for-bigquery)に合わせた形にしてあげる。

|status|format|実際のデータ|
|---|---|---|
|before|"format": "dateOptionalTime"|2016-03-13T13:16:49+0900|
|after|"format": "yyyy-MM-dd HH:mm:ss ZZ"|2016-03-13 13:16:49 +09:00|

※UTCではかれるログを扱っていて、JSTで色々処理したい為に、上の実際のデータという値をfluentdで生成しているというちょっと特殊な前提があります。。

##考慮した点

Q.インデックスのdate型のformatを変えた際に、Kibanaでは異なるフォーマットのdateでも認識してくれるか?

→実際に、ローカルで検証してみたが、上記の変更後も連続したデータとしてKibana上で認識されたのでOK。Kibanaが賢いのか、Elasticsearchのdate型がUNIXタイムで内部でデータ保持してるからOKだったのかという詳細までは確認していない。。が実運用上はOKとする(@timestampを使ってる前提の話)

##実際の手順

今回の作業内容は、新規に新フォーマットの日付型フィールド追加と@timestampのフォーマット変更を実施
[fluent-plugin-elasticsearchのtime_key](https://github.com/uken/fluent-plugin-elasticsearch#time_key)で新規フィールドをtime_keyに指定しているので、2フィールドに対して作業する

大きく2つの作業。
既存のスキーマ変更と翌日以降に自動で作られるインデックス用のテンプレート更新がある。

####①既存のインデックスのスキーマ変更

既に出来ているインデックスについても

fluentdの停止(新規に投入されるデータを一時的に止める)
↓

実行(chromeのSensuプラグイン使うと非常に見やすく便利！！)

```
curl -XPUT [ElasticsearchのIP]:port/[index名]/_mapping/[type名] -d '
{
    "[type名]": {
        "@timestamp": {
                  "type": "date",
                  "doc_values": true,
                  "format": "yyyy-MM-dd HH:mm:ss ZZ"
        },
        "datetime": {
                  "type": "date",
                  "doc_values": true,
                  "format": "yyyy-MM-dd HH:mm:ss ZZ"
        },   
    }
}
'
```

確認方法

```
curl -XGET [ElasticsearchのIP]:port/[index名]/_mapping?pretty

変更したものが反映されている事を確認する
```

↓
fluentd再開
↓
新規のデータが意図したdate型で入ってきている事を確認

- kibanaからのデータが欠けなしで見れる事確認
- 個別で日付型違うデータを引いてみて問題ないかチェック

####②テンプレートの更新

お決まりの、jsonファイルを↑と同じ内容で変更して、orderを1つ繰り上げて

```
$ curl -XPOST localhost:9200/_template/[テンプレート名] -d "`cat [テンプレートファイル名].json`"

```

```
curl -XGET [ElasticsearchのIP]:port/_tempalte/[テンプレート名]?pretty

変更したものが反映されている事を確認する
```

ちなみに、全て1.5系での作業なので、2系の人は少し違うのかも。。そろそろ2系も触らないとな−。。


何かのお役に立てば！
Pythonで単語N-gramを生成するモジュール

# 目的
任意のテキストファイルを入力として，それについてN-gramの生成を行う．
今回生成するのは **単語** N-gram．

# データセット
## e.g. ニュース記事
下記のような記事についてN-gramの生成を行う．
記事はプログラムのあるディレクトリからみて，./data/news.txtにあるとする．
> 宇宙開発の常識を覆したとも言える成果で、打ち上げコストを下げる画期的な技術として注目されています。
ロケットの打ち上げに成功したあと、フロリダ州のケネディ宇宙センターで開かれた会見で、スペースＸ社のＣＥＯ＝最高経営責任者、イーロン・マスク氏は「ロケットを戻すことが可能
だと証明できた」と述べ、実験が成功したことへの喜びを表しました。そのうえで、今回戻ってきたロケットに異常がないかどうか、地上でも実験を行い、問題がなければ、来月か再来月
には同じロケットを再び打ち上げるとコメントし、「ロケットは将来的には何千回も再利用ができるだろうが、現状では１０回から２０回程度は可能だと思う。ほかのロケットも含めて、
将来的にはすべてのロケットは再利用が当たり前になるだろう」と、今後の展望についての考えを示しました。

# プログラム
text2bowは文章を単語集合に変換する関数でファイルを入力とする場合はmod="file"とする．
文字列を入力とする場合はmod="str"と指定する．（モジュールとして使用する場合はこちらのほうが多いかもしれない）

```py:ngram.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys
import commands as cmd

# テキスト -> 単語(形態素)集合
def text2bow(obj,mod):

    # input: ファイルの場合はmod="file", input: 文字列の場合はmod="str"
    if mod == "file":
        morp = cmd.getstatusoutput("cat " + obj + " | mecab -Owakati")
    elif mod == "str":
        morp = cmd.getstatusoutput("echo " + obj.encode('utf-8') + " | mecab -Owakati")
    else:
        print "error!!"
        sys.exit(0)

    words = morp[1].decode('utf-8')
    words = words.replace('\n','')

    bow = words.split(' ')

    return bow

# N-gramの生成
def gen_Ngram(words,N):

    ngram = []

    for i in range(len(words)):
        cw = ""
        
        if i >= N-1:
            for j in reversed(range(N)):
                cw += words[i-j]
        else:
            continue

        ngram.append(cw)
                
    return ngram

# 出力
def output_Ngram(ngram):

    for i in range(len(ngram)):
        print ngram[i].encode('utf-8')

def main():

    argvs = sys.argv

    # input: ファイルの場合
    bow = text2bow(argvs[2],mod="file")

    # input: 文字列の場合
    #bow = text2bow(obj=u"これはN-gramを生成するプログラムです．",mod="str")

    ngram = gen_Ngram(bow,int(argvs[1]))

    output_Ngram(ngram)

if __name__ == "__main__":

    main()
```

# 実行方法
一応，今回はテキストファイルを入力として渡すことを前提とする．（プログラム中の文字列を入力とする場合は，ngram.pyをimportして各種メソッドを使用する．text2bowのmodの値だけ注意する）
実行方法は下記の通り．


```py:ngram.py
$ python ngram.py N textfile
```

- N: 任意の数 (e.g. 2-gram -> N=2)
- textfile: 入力とするテキストファイルのファイルパス

# 実行
上記ニュース記事の2-gramを出力．

```py:ngram.py
$ python ngram.py 2 data/news.txt
```

## 出力結果
>宇宙開発
開発の
の常識
常識を
を覆し
覆した
たと
とも
も言える
...

上記のような出力を得ることが出来ればOK．

# まとめ
今回はPythonで単語N-gramを扱えるプログラムを作成した．
モジュールとして扱うには，プログラムをimportして各メソッドを使う．
汎用性を考えて作ったつもりなので，importしてお手軽に使えるかと思う．
git filter-branchでパスワードを全ブランチの歴史から消す手順


## git filter-branch

gitのリポジトリに、パスワードやAPI KEYのような秘匿性の高い情報を突っ込んでしまい後から消したいと思った際は、`git filter-branch`が使えます。filter-branchは、いままでの全commitを舐めて、ヤバい情報を歴史から抹消します。

[参考] git最強のオプション filter-branch
http://qiita.com/Spring_MT/items/f60c391b5dbf569a1d12


## 注意

- コミットの多いリポジトリの場合、git filter-branchは時間とリソースを食う処理なので注意しましょう。EC2のデカいインスタンスを一時的に立ててそこで処理を走らせるのもいいでしょう。
- 過去のコミットをhashを含めすべて書き換えるため、filter-branch後は既存ブランチに対して`git push`が出来なくなります。一度、ローカルのrepoを消してから、再度cloneする必要があります。事前にメンバーへの周知をしておきましょう。
- .gitを捨ててrepoを作りなおしたほうが手っ取り早いケースもありそう

## 作業領域の確保

適当にdirectoryを掘って、対象のrepoをgit cloneしておきましょう

```
mkdir filterbranch && cd filterbranch
git clone git@github.com:someone/coolrepo.git
cd coolrepo
```

## 処理ブランチを減らす

事前に扱うブランチを減らせるなら減らしておきましょう。以下コマンドでmerge済のremote branchを消去できます

```
git branch -a --merged | grep -v master | grep remotes/origin| sed -e 's% *remotes/origin/%%' | xargs -I% git push origin :%
```

[参考] Gitでリモートのマージ済みのブランチを一括削除する
http://qiita.com/fukayatsu/items/b1a5e1c0b98acaa6261d

## 置換スクリプトを書く

各コミットで実行したいscriptを書きます。パスワードのハードコードを環境変数などにreplaceするような内容が想定されます。簡単な内容なら、sedのワンライナーを用意しておけば充分でしょう。

```replace.rb
Dir.glob("config/*.rb").each do |file|
  fr = File.open(file,"r")
  buf = fr.read
  buf.gsub!("some_yavai_apikey", "ENV['API_KEY']")
  buf.gsub!("some_yavai_secret", "ENV['API_SECRET']")
  fw = File.open(file,"w")
  fw.write(buf)
  fr.close
  fw.close
end
```

## すべてのremote branchをlocalにcheckoutしておく

filter-branchの対象にするため、remote branchを引っ張ってきます

```
$ git branch
* master
```

```bash
#!/bin/bash
for branch in `git branch -a | grep remotes | grep -v HEAD | grep -v master `; do
   git branch --track ${branch#remotes/origin/} $branch
done
```

```
$ git branch
  update-hoge
  remove-fuga
  refactor-foo
* master
  tweak-test
```

[参考] [Git]リモートブランチを全て pull する
http://wada811.blogspot.com/2014/06/git-pull-all-remote-branches-locally.html


## すべてのbranchでfilter-branchを実行

スクリプトをtree-filterに食わせます。
--allオプションですべてのブランチが対象になります
分かりにくいのですが、ハイフン2つのあとに、`--all`を付けます

```bash
git filter-branch --tree-filter "ruby /somewhere-outside-repo/replace.rb" -- --all
```

時間がかかりそうなら、`nohup`と`&`の間に挟んでbackground動作させて一晩寝かすとよいでしょう

## push

終わったら、全branchを`git push -f`して上書きしましょう。

```
git checkout master && git push -f origin master
git checkout update-hoge && git push -f origin update-hoge
git checkout remove-fuga && git push -f origin remove-fuga
git checkout refactor-foo && git push -f origin refactor-foo
git checkout tweak-test && git push -f origin tweak-test
```


お疲れ様でした! もっとスマートなやり方がある気がしますね
SublimeText3でMarkDownに適用されるCSSを変更する方法


どうも、余計な事をすることにかけては世界4239位くらいの自信がある、Keiです。
いやほんと、どうもどうも、こんにちは。

先日、SublimeTextのOmniMarkUpPreviewerをつかって、マークダウンで
ゴリゴリとメモをとっていたのですが、デザインが気に食わず、どうにかして
CSSをいじれないかと四苦八苦していたのですが、どうにかしていじれるように
なったので、その快感をおすそわけ。

**注意！壊れて使えなくなる可能性もあるので、
バックアップをとったうえで、自己責任でおねがいします。**

### 環境

Macを想定していますが、Windwows7でも確認済みです。
場所や操作は適時読み替えてください。

### 変更場所

変更箇所は、

- マークダウンをプレビューするときのCSS
- HTML出力をするときのCSS

のふたつです。
もちろん、MarkDownだけでよければ、片方だけで充分です。

どちらもここまでは共通です。

ライブラリ - ApplicationSupport - SublimeText3 - Packages - OmniMarkupPreviewr

#### マークダウンのCSS

- public - github.css

#### HTML出力のCSS

- templates - github - export.tpl

拡張子が”tpl”となっていますが、中身はHTMLなのでSublimeで開いて編集すればOKです。

### やってみる

まずは、なにも変更していない状態のプレビュー画面。

- SublimeText  

![スクリーンショット 2016-04-10 14.59.48.png](https://qiita-image-store.s3.amazonaws.com/0/45303/52eef8e4-f4b4-82a7-62f6-e00bc902ca79.png "スクリーンショット 2016-04-10 14.59.48.png")

- 何もしてない画面  

![スクリーンショット 2016-04-10 14.59.37.png](https://qiita-image-store.s3.amazonaws.com/0/45303/5475d1e4-e25f-4269-c9a1-80a36a777a92.png "スクリーンショット 2016-04-10 14.59.37.png")

ちょちょっとCSSをいじって…

- 変更した画面  

![スクリーンショット 2016-04-10 15.10.17.png](https://qiita-image-store.s3.amazonaws.com/0/45303/0de86bcd-31fe-bc1a-807d-7de4e2e465a2.png "スクリーンショット 2016-04-10 15.10.17.png")


ほら変わった！

背景色と、文字色に、フォントを NotoSans　に変更しています。

### HTML出力の場合

プレビュー時と、HTML出力時では利用しているCSSが異なるようで、
それぞれに設定が必要です。

HTML出力の場合は、テンプレートに直接うめこむ形になります。

```HTML
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>{{filename}}—{{dirname}}</title>
    <style type="text/css">
    html{font-family: sans-serif;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%}body{margin: 0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display: block}audio,canvas,progress,video{display: 
etc…
    </style>
etc…

```

CSSの部分はめっちゃ長いので端折りましたが、はじめのstyleの
CSSを変更すればOKです。マークダウンプレビューと同じにしたい場合は、
github.cssの中身をまるっとコピペすればOKです。

共通で仕様書をつくるとか、マークダウンだけで完全に完結させたい、
そういうときに便利なのではないでしょうか？

ご参考までに。
C++におけるポインタを理解する. 【理解確認問題付き】


# 対象読者

- C++のポインタの理解が曖昧で理解しておきたい人

# ポインタを理解する

## ポインタとは

なんらかのオブジェクトを指し、オブジェクトを参照するためのもの

## ポインタの宣言

```.cpp
char *ptr;
```

で`ptr`がchar型の値`*ptr`のポインタであることになる。(「char型の値だよ、`*ptr`は。つまり、`*`をとったptrはそのポインタだよ。」と捉えられる。)

```.cpp
char* ptr;
```

と宣言しても同じことである。(`char*`が「char型のポインタだよ、`ptr`は。」と宣言してると捉えられる。)

## ポインタの初期化

`ptr`が、char型変数xを指す場合は、以下のように初期化できる。

```.cpp
char x;
char* ptr = &x;
```

```.cpp
char x;
char* ptr;
ptr = &x;
```

どちらの書き方でもよい。

変数ptrに実際に、xのアドレスの値が入っている。
そのptrのアドレスが指すもの(すなわちx)を取るには、

```.cpp
*ptr;
```

とすれば良い。

# 理解確認問題

## 問題

非常にありきたりな問題ですが、ポインタの理解をするのにちょうど良いです。

**`reverse(char* str)`という`¥0`終端の文字列を逆に並び替える関数を実装せよ。**

## 解法

"abcde"という文字列がインプットとして与えられるとして、考え方は以下です。

![新規ドキュメント 2_1.jpg](https://qiita-image-store.s3.amazonaws.com/0/71621/d8d07107-bfba-04a1-05b6-15ea7f3045a2.jpeg "新規ドキュメント 2_1.jpg")


ポインタのアドレスを用いてメモリ上の値を実際に更新していくため、このアルゴリズム終了時点で、そのinputに入れた値自体が更新されていることになります。(したのコードでいう、`char[][]`自体の値が、更新されているということ)

## 実装例

```.cpp
#include<iostream>

class Question
{
public:
  static void reverse(char *str)
  {
    char* end = str;
    char tmp;

    if (str == nullptr)
    {
      return;
    }

    // 終端のnull文字時点でストップする
    while (*(end+1))
    {
      ++end;
    }

    // 2つのポインタがで会うまで、
    // ポインタの箇所の値を交換していく
    while (str < end)
    {
      tmp = *str;
      *str = *end;
      *end = tmp;

      ++str;
      --end;
    }
  }

  static int run()
  {
    char input[][10] = { "abcde", "cat" };

    for (int i = 0; i < 2; i++)
    {
      std::cout << "reversing the string: " << input[i] << std::endl;
      reverse(input[i]);
      std::cout << "reverse of input string is " << input[i] << std::endl;
    }

    return 0;
  }
};

int main()
{
  Question::run();
}
```
fluctでパスパラメタやクエリパラメタを取得する方法

fluctについてはこちら

https://github.com/fluct/fluct

fluctというかAWS Lambdaに依存していますが、パスパラメタやクエリパラメータ、
POSTしたデータを取得したい時にどうすれば良いかというメモです


``` javascript:package.json
{
  "name": "create_users",
  "private": true,
  "fluct": {
    "contentType": "text/json",
    "httpMethod": "POST",
    "path": "/users/{id}",
    "statusCode": 200
  }
}
``` 
上記のようなpackageファイルを用意してeventをstringifyすれば
大体のことは見えてきます

``` javascript:index.js
exports.handler = function (event, context) {
  context.succeed(JSON.stringify(event, null, 2));
};
```

``` cURL:curl
curl -X POST -H "Content-Type: application/json" -H "Cache-Control: no-cache" -d '{"key1":"aaaaaa"}' "https://xxxxxx/users/bbbb?key2=cccc"
```

curlで叩くとこんな感じ

```
  "httpMethod": "POST",
  "path": "/users/{id}",
  "pathParameters": {
    "id": "bbbb"
  },
  "queryParameters": {
    "key2": "cccc"
  },
  "requestParameters": {
    "key1": "aaaaaa"
  }
```

上記のような結果なので
パスパラメタはevent.pathParameters
クエリパラメタはevent.queryParameters
BODYに入った値はevent.requestParameters
から値を取得すればオーケーみたいです
RealmでNSDateのミリ秒を含む情報を保存する

# ミリ秒の情報をそのまま保存できない

RLMObjectのNSDate型プロパティは、そのまま保存すると、ミリ秒の情報をカットします。(執筆点のRealmの最新版は、Objective-C/Swiftいずれも0.98.0です。)マルチプラットフォームの互換性のためだそうです。

問題が起きるのは、例えば、1秒未満のうちに10連続でRLMObjectを生成したようなときです。NSDate型プロパティをキーにしてソートしても、順番が意図どおりにならない場合が生じます。10件全て同じ日時になるからです。

# ミリ秒を保存するには?

ミリ秒の情報を保存するには、どうしたらよいか。

工夫としては、**NSDateの値をDouble(NSTimeIntervalはDouble型の別名)やStringに変換して保存する方法** があります。(Realmの岸川さん、トルクスの山田さん、教えていただまきして、ありがとうございました。)

# 変換を意識しないで利用するには?
Double <-> NSDateの変換を意識せず利用するために、工夫できないか考えました。

次のような構造を作ってみました。NSDate型のコンピューテッドプロパティを用意して、それを通じて保存用のDoubleのプロパティにアクセスするというものです。

例えば、PersonオブジェクトでNSDate型のcreatedAtプロパティを使いたい場合は、以下のようになります。(Realm 0.98.0, Swift2.2)

```lang:Person.swift
class Person: RLMObject {
    //生成日時のプロパティ
    dynamic var createdAtDouble: Double = 0.0 //保存用。ミリ秒まで保存するため。
    dynamic var createdAt:NSDate { //コンピューテッドプロパティ 
        get {
            return NSDate(timeIntervalSinceReferenceDate: createdAtDouble)
        }
        set(date) {
            createdAtDouble = date.timeIntervalSinceReferenceDate
        }
    }
    
    //保存しないプロパティ
    override static func ignoredProperties() -> [String] {
        return ["createdAt"]
    }
    
    override init() {
        super.init()
        
        //デフォルト値をセット
        createdAt = NSDate()
    }
}
```

Personを保存すると、createdAtDoubleの値がRealm上に保存されているので、ミリ秒の情報を保持できます。一方、利用上は、Person.createdAtにアクセスするだけでNSDateとして扱えるので、扱いがラクになりました。

# ソートキーはDouble型のプロパティ名
ソートキーは"createdAtDouble"とする必要があります。ignoredProperties()による除外が効いているので、"createdAt"でsortedResultsUsingProperty( )しようとすると、こうなります。
> Terminating app due to uncaught exception 'Invalid sort property', reason: 'Cannot sort on property 'createdAt' on object of type 'Person': property not found.'

この点についても、なるべく意識せずに実装できるようにしたいです。

"createdAt"でソートしようとしたときに、代わりに"createdAtDouble"を使うように置き換える処理を入れました。例えば、次のような流れになります。

```lang:Person.swift
static func fetch(sortKey: String = "createdAtDouble") -> RLMResults {
　// 1. sortKeyが"createdAt"の場合、"createdAtDouble"とみなす。
  var workingKey = sortKey
  if sortKey == "createdAt" { workingKey = "createdAtDouble" }

 // 2. sortedResultsUsingProperty()の処理
   return Person.allObjects().sortedResultsUsingProperty(workingKey, ascending: true)
}
```

表面上は"createdAt"というキーでソートしているかのように実装できるようになりました。


# 参照
Realm Swift 対応しているデータ型
https://realm.io/jp/docs/swift/latest/#section-5

# 追記
Realm 0.101.0の仕様変更により、ミリ秒までNSDate型で保存できるようになりました。
なぜ美しいコードを書かねばならないのか 〜僕の彼女がコードを書かなかった理由〜

[美しいソフトウェアをなぜ、どうやって書くか](http://qiita.com/yuya_presto/items/34cf88f6f97552c2461d) の続編的なネタ記事です。
ノロケ成分が含まれるので苦手な方はご注意ください。美しいコードを書く話を見に来た方は上記記事にまとめてあるのでそちらをどうぞ・・！

yomeはエンジニア**ではない**ですが、多分腕利きのコード書きになれるセンスをなぜか持ち合わせているようです。

というか、めんどくさいから楽にする方法考えるとか、まぁ個人的なことになってくるのでアレですが、まさに[プログラマ三大美徳](http://itpro.nikkeibp.co.jp/article/Watcher/20061005/250057/)を実践している感じがあるのです。

しかし、大学生のときにプログラミングを学んだ以後**もうコードは書きたくない**と長らく言っていました。
**理由は「クソコード」。**一体どういうことなのか、実例を紹介します。

## インデントやスペースがバラッバラなコード

想像ですが、下記のようなPHPコードが授業の中で登場したり、他の学生の提出物に現れていたようです。

```php
for($i = 0; $i < 100; $i++) {
    $hoge +="Number is $i";}
 return hoge;
```

本人談（意訳）：
**<font color="red">なんでそろえへんねん！！なんで汚いままにするねん！！！</font>**

訳注:
例えプログラミング初学者でも、**テキストとして**汚く感じるものは受け付けないようです。
我々プロはそれだけもっともっと気をつけていくべきだということだと思います・・。

## HTMLのtableタグをデザインに使う

これはとあるバイト先のウェブサイトでそういう箇所があったそうです。

```html
<table>
  <tr>
    <td><img src="..." / alt="ロゴ画像"></td>
    <td>Hoge Home Page</td>
  </tr>
  <tr>
    <td><img src=".../counter.cgi?id=..."></td>
    <td>ようこそ</td>
  </tr>
</table>
```

本人談（意訳）：
**<font color="red">tableは表を組むものであってそれをデザインに使うのは意味わかんねぇぇぇ！！！</font>**

訳注:
例えその方法で実現できたとしても、**本来の意味を歪める**ような方法で解決しようものなら、それは気持ち悪く見えるようです。
ホームページビルダー（死語）はもう二度と使われるべきでないんでしょうね・・。

## コメントだらけのコード

これはわりと現実味があるコードだと思います。エンジニアなら誰しも一度は見たことがあるのでは・・。
コードは多分全然違いますが意味はこんな感じです。

```rb
# ユーザの一覧を取ってくる
users = User.where(...)
# ユーザの情報を吐き出す
user_info_text = users.map do |user|
  # ニックネームを取得する
  user.nickname
end.join('、') # くっつける
```

本人談（意訳）：
**<font color="red">コード読んだら分かることをなんでコメントで書くねん！！！</font>**

訳注:
初学者でも、コードは**コード自身の意味を表現する**ということに敏感だったようです。
コメントするべきことは、コードに現れないこと、だけですよね。

## 順番を変えると壊れるコード、やり方がいろいろある言語

もう覚えていないらしいけど、Perlでおそらくuse宣言？周りの順番を変えるとぶっ壊れるケースだった模様。
これはプロでも気をつけてても作りこんでしまうことがたまにある気がするので、自戒的な意味も込めて載せておきます。

あと、Perlの口語的な[TIMTOWTDI](https://en.wikipedia.org/wiki/There%27s_more_than_one_way_to_do_it)なやり方はつらいと言っていました。

## そしてyomeはエンジニアにはならなかった・・。

yome「人のクソコードを見るだけで吐き気がした。コードはもう書きたくない。」
**Why クソコード people!!!!!!?????????**

## 対策

この話を聞いて、とりあえず間違いないと思ったのが**Python**です。
Pythonは**インデントにも意味がある**から汚くなりようがありません。

Pythonはその[思想というか禅](http://www.python.jp/Zope/Zope/articles/misc/zen)、特にTIMTOWTDIの逆の「（何かをやるとき）1つの、できればたった1つの明確なやり方があるべき」という考え方が、そしてライブラリがなんでもそろう**バッテリーインクルーデッド**からして、**圧倒的に初学者に向いている**はずなのになんでPerlとかPHPとかJavaなんだろう・・？とたまに思います。
個人的にモダンなリスト処理のやり方の多くをPythonから学んだと思うし、いい言語だと感じたのでおすすめしたら今yomeは勉強しているみたいです。

yomeは頑張って勉強するからいつかペアプログラミングしようね:heart: と言っています。 `// レビュー対応のため追記`

IT業界の未来のために、ぜひ美しいコードを書いてください、心からお願い申し上げますm(_ _)m :bow::pray:
コードの１行１行に、それを読む人、使う人への愛を込めて・・。


（余談ですが、"PYTHON"と書かれた本を見て「これは絶対読まない」と確信したそうですｗ）
Linux プロセス間通信について pipe()を読む


今回はsys_pipe()を読む
カーネルのバージョンはlinux-4.5

## UNIXで利用できるプロセス間通信の仕組み
###UNIXで使用されているプロセス間通信のざっくり分類
- パイプとFIFO　←今回はココについて書くよ！ 
- セマフォ
- IPC(systemV)
	- メッセージ
	- 共有メモリリージョン
- ソケット
	- 19章では、ほぼ解説なし？

###パイプ処理にあたり重要な関数
- pipe() ←とりまコレを読む
	- popen() ←pipe()を使用してる
	- pclose()
- fork()
- close()
- dup2()
- execve()
- dup3()

POSIXでは片方向のパイプしか定義していない
→双方向通信が必要な場合はpipe()を2回行う

##pipe()を読む
pipe()のシステムコールを見つけたくて`sys_pipe`でgrepしたらこんなコードが見つかった

```fs/pipe.c
SYSCALL_DEFINE1(pipe, int __user *, fildes)
{
        return sys_pipe2(fildes, 0);
}
```

sys_pipe2は arch/x86/entry/syscalls/syscall_32.tbl
`331     i386    pipe2                   sys_pipe2`
にこんな感じで書かれてる

で？どこにsys_pipe2があんの？
gtagsで定義元にジャンプしようとしても"sys_pipe2: tag not found"と言われてしまった
linux-2.6.0ばっかりよんでたのでsys_pipe2でgrepして見つからないと途方にくれてしまう、、、、

実は`SYSCALL_DEFINE1(pipe, int __user *, fildes)`の真上にこんな関数がある
これがsys_pipe2の正体っぽい

```fs/pipe.c
 SYSCALL_DEFINE2(pipe2, int __user *, fildes, int, flags)
{
        struct file *files[2];
        int fd[2];
        int error;

        error = __do_pipe_flags(fd, files, flags);
        if (!error) {
                if (unlikely(copy_to_user(fildes, fd, sizeof(fd)))) {
                        fput(files[0]);
                        fput(files[1]);
                        put_unused_fd(fd[0]);
                        put_unused_fd(fd[1]);
                        error = -EFAULT;
                } else {
                        fd_install(fd[0], files[0]);
                        fd_install(fd[1], files[1]);
                }
        }
        return error;
}
```
どうやら2.6とは違いsys_*でシステムコールを定義しなくなったらしい
で、このSYSCALL_DEFINEが何なのかについては[素晴らしいサイト](http://softwaretechnique.jp/Linux/SystemCall/sc_02.html)があったのでそちらを見てください（丸投げ）

`SYSCALL_DEFINE2(pipe2, int __user *, fildes, int, flags)`を例にザックリ説明すると

| 	属性 			| 意味 |
|:---------------:|:-------:|
| SYSCALL_DEFINE2	|2はシステムコールの引数の数 1,3もあるよ|
| pipe2        	|システムコール名 sys_システムコール名を定義する|
|int __user *    	|？？？        |
| fildes        	|引数1|
|int, flags      	|SYSCALL_DEFINEでは型名と引数名を,で区切る|
こんな感じ

sys_pipe2のザックリ概要のコメントを書いたのがコチラ

```fs/pipe.c
 SYSCALL_DEFINE2(pipe2, int __user *, fildes, int, flags)
{
        struct file *files[2];
        int fd[2];
        int error;
        
        //flagsを見てerrorかどうか判定とかしてる
        error = __do_pipe_flags(fd, files, flags);
        if (!error) {
                if (unlikely(copy_to_user(fildes, fd, sizeof(fd)))) {
                        fput(files[0]);
                        fput(files[1]);
                        put_unused_fd(fd[0]);
                        put_unused_fd(fd[1]);
                        error = -EFAULT;
                } else {
                        fd_install(fd[0], files[0]);
                        fd_install(fd[1], files[1]);
                }
        }
        return error;
}
```

このlinuxのsys_pipeですが、xv6のpipe()とっても近い

```xv6のpipe()
int p[2];
char *argv[2];
 
argv[0] = "wc";
argv[1] = 0;
 
pipe(p);
if(fork() == 0) {
  close(0);
  dup(p[0]);
  close(p[0]);
  close(p[1]);
  exec("/bin/wc", argv);
} else {
  write(p[1], "hello world\n", 12);
  close(p[0]);
  close(p[1]);
}
```
【C++】`if(pointer != NULL)`の代わりに、`if(pointer)`が使えるよ


null pointerはbooleanのfalseと解釈され、non-null pointerはtrueと解釈されるため、

if(pointer != NULL)`の代わりに、`if(pointer)`が使える。

(C++11にて確認済み)


参考: From the C++11 standard, section on Boolean Conversions:

> A prvalue of arithmetic, unscoped enumeration, pointer, or pointer to member type can be converted to a prvalue of type  bool. A zero value, null pointer value, or null member pointer value is converted to  false; any other value is converted to  true . A prvalue of type std::nullptr_t can be converted to a prvalue of type  bool ; the resulting value is  false .
CentOS7の基本的な初期設定


DigitalOceanのエンジニアがオススメするらしいCentOS7の初期設定の日本語訳
(https://www.digitalocean.com/community/tutorials/initial-server-setup-with-centos-7)

この記事ではroot権限を持つユーザーの作成からSSHキーの登録、rootログインの禁止設定までをカバーしている。

# ユーザーの作成
rootはUNIX系OSでは神の如き存在だけれど、基本的にrootユーザーで作業をすることはどんな状況でもオススメされない。なのでrootに代わる限定的な権限のユーザーを予め最初に作っておくことが望ましい。

新しいユーザーericの作成

```sh:sh
$ adduser eric
```
ericにパスワードを設定

```sh:sh
$ passwd eric
```

# Root権限の付与
root権限を用いてコマンドを実行する`sudo`コマンドを使えるようにするために、先ほど作成したユーザーを`wheel`というグループに追加する。wheelはUNIX系システムでrootになれるグループ。

ericをwheelグループに追加

```sh:sh
$ gpasswd -a eric wheel
```

# SSHキーの登録
SSHキーを登録しておくことで、サーバログインの際のパスワード入力を省くことができる。予めSSHキーを作っていなければ作成する。

```sh:sh
$ ssh-keygen
```
キーの保存先ディレクトリと名前を変更しなければ、`~/.ssh/`の中に`id_rsa`という秘密鍵ファイルが出力される。これと同時に`id_rsa.pub`という公開鍵ファイルもできているので確認しておく。

### ssh-copy-idコマンド
MacではなくUNIX系マシンを使っていれば、ssh-copy-idというローカルマシンの公開鍵を指定のリモートホストに登録できる便利ツールが使える。すでに他のマシンなりサーバなりを持っていれば`/usr/bin`のあたりに入っているのでコピーするのもよい。

(以下をローカルマシンから実行)

```sh:sh
$ ssh-copy-id eric@SERVER_ADDRESS
```

### authorized_keysの手動編集
ssh-copy-idが使えなければ、実際にauthorized_keysを手で編集していく必要がある。まずは、先ほど作成したユーザーericでログインし、以下の手順を踏んでいく。

まずはホームディレクトリに.sshディレクトリを作成し、所有者のみにすべての操作を許可するパーミッションを付与する(700)

```sh:sh
$ mkdir ~/.ssh
$ chmod 700 ~/.ssh
```
許可する公開鍵の一覧を登録するauthorized_keysファイルを作成し、その中にid_rsa.pubの中身を貼り付ける

```sh:sh
$ touch ~/.ssh/authorized_keys
$ vi ~/.ssh/authorized_keys
```
編集が終わったら、authorized_keysファイルに所有者のみ読み書き可能のパーミッション(600)を付与し、シェルを抜ける。

```sh:sh
$ chmod 600 ~/.ssh/authorized_keys
$ exit
```

# Rootログインの禁止
よりセキュリティを強固にするために、SSH Daemonの設定を少し弄る。

```sh:sh
$ vi /etc/ssh/sshd_config
```

先ほどユーザーericを作ったように、rootで何か作業を行うことはほぼオススメされない。ということでrootへのリモートログインを無効にする。

```txt:sshd_config
# この行をyesからnoに変更する
PermitRootLogin no
```
sshd_configを編集したのち、SSH Daemonを再起動する

```sh:sh
$ systemctl reload sshd
```

# 終わりに
ここまでであらかたCentOSサーバを使うためのの基本的な設定は完了。次のステップとしてファイアウォールの設定などをカバーした[CentOS7の追加オススメ設定（英語）](https://www.digitalocean.com/community/tutorials/additional-recommended-steps-for-new-centos-7-servers)というドキュメントもあるので、よむといいかも。
i++と++iの違い


### ++iは返り値としてインクリメント後の値を返す

```
 i = 1;
 j = ++i;
 (i is 2, j is 2)
```

### i++は返り値としてインクリメント前の値を返す

```
 i = 1;
 j = i++;
 (i is 2, j is 1)
```

***

参考: [What is the difference between ++i and i++](http://stackoverflow.com/questions/24853/what-is-the-difference-between-i-and-i)
ゼロから作るTeX環境 (Windows版)


注意：これはチートシートです！もっと良質な情報が[TeX Wiki](https://texwiki.texjp.org)などにありますから，そちらも参照してください

# [Chocolatey](https://chocolatey.org/)
Chocolateyは，Windows用のソフトウェア管理ツールである．

コマンドプロンプトを管理者権限で起動し，以下のコマンドを実行．

```bat:install-chocolatey.bat
@powershell -NoProfile -ExecutionPolicy Bypass -Command "iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))" && SET PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin
```

そのまま以下のコマンドを実行し，7-zipをインストール．

```bat:install-7zip.bat
choco install -y 7zip
```

# [MSYS2](http://repo.msys2.org/distrib/x86_64/msys2-x86_64-20160205.exe)
MSYS2は，軽量なC言語開発環境として用いることができる．

最新版のMSYS2(執筆時点で[msys2-x86_64-20160205.exe](http://repo.msys2.org/distrib/x86_64/msys2-x86_64-20160205.exe))をダウンロードし，実行．
ウィザードに従いMSYS2のインストールを行う．

インストールが完了したらスタートメニューからMinGW-w64 Win64 Shellを起動．
MinGWのコンソールにて以下のコマンドを実行し，開発ツールをインストール．

```bash:install-essentials.sh
pacman -S --noconfirm base-devel mingw-w64-x86_64-toolchain vim mingw-w64-x86_64-emacs nano
```

コマンドプロンプトを管理者権限で起動し，以下のコマンドを実行．

```bat:create-link.bat
cd c:\msys64\home\%USERNAME%
mklink /d Desktop %USERPROFILE%
mklink /d Documents %USERPROFILE%
mklink /d Downloads %USERPROFILE%
```

# [TeX Live](https://texwiki.texjp.org/?TeX%20Live)
TeX Liveは，最も普及しているTeX環境である．

[Installing TeX Live over the Internet](https://www.tug.org/texlive/acquire-netinstall.html)から，install-tl.zipをダウンロードし，展開．
作成されたフォルダに以下の内容のbatファイルを作成し，実行．

```bat:install-tl-small.bat
install-tl-windows.bat -gui perltk -repository http://ftp.jaist.ac.jp/pub/CTAN/systems/texlive/tlnet/ -scheme scheme-medium
```

ウィザードに従いTeX Liveのインストールを行う．

インストールが完了したらコマンドプロンプトを起動し，以下のコマンドを実行．

```bat:install-japanese-tex.bat
tlmgr option repository http://ftp.jaist.ac.jp/pub/CTAN/systems/texlive/tlnet/
tlmgr update --self --all
tlmgr install collection-langjapanese
updmap-sys --setoption kanjiEmbed ms
```

MinGW-w64 Win64 Shellを起動し，MinGWのコンソールにて以下のコマンドを実行し，popplerをインストール．

```bash:install-poppler.sh
pacman -S --noconfirm mingw-w64-x86_64-poppler
```

# [TeXworks](https://texwiki.texjp.org/?TeXworks)
TeXworksは，基本的な機能を持つTeXエディタである．

コマンドプロンプトを管理者権限で起動し，以下のコマンドを実行．

```bat:install-texworks.bat
tlmgr install texworks
```

スタートメニューよりTeXworksを起動．
メニュー→編集→設定をクリックし設定を表示．
エディタタブにおいて，フォントをRicty Diminishedに変更．
タイプセットタブにおいて，タイプセットの方法にpLaTeXを追加．
pLaTeXの設定値は，以下に示すようにする．

|項目名|設定値|
|-----|-----|
|名前|pLaTeX|
|プログラム|ptex2pdf.exe|
|引数1|-l|
|引数2|-ot|
|引数3|$synctexoption|
|引数4|$fullname|

設定完了後，TeXworksを再起動する．

# [TeXstudio](https://texwiki.texjp.org/?TeXstudio)
TeXstudioは，高機能なTeXエディタである．

コマンドプロンプトを管理者権限で起動し，以下のコマンドを実行．

```bat:install-texstudio.bat
choco install -y texstudio
```

スタートメニューよりTeXstudioを起動．
メニュー→オプション→TeXstudioの設定をクリックし設定を表示．

コマンドタブにおいて，LaTeXとDviPdfの値を変更．
設定の変更内容は，以下に示すとおりである．

|項目名|変更内容|
|-----|-----|
|LaTeX|latex.exeをplatex.exeに変更|
|DviPdf|dvipdfm.exeをdvipdfmx.exeに変更|

ビルドタブにおいて，ビルド＆表示と既定のコンパイラを変更．
設定値は，以下に示すようにする．

|項目名|変更内容|
|-----|-----|
|ビルド＆表示|DVI->PDFチェーン|
|既定のコンパイラ|LaTeX|


エディタタブにおいて，フォントファミリーをRicty Diminishedに変更．

# [PrimoPDF](http://www.xlsoft.com/jp/products/primopdf/)
PrimoPDFは，TeXに挿入するPDF形式の図を作成することができる仮想PDFプリンタである．
Macで作ったzipをWindowsで開く際の作成時注意点

細かな点だが、意外とはまったので。

Mac環境でzipを作成するときに、
`pwd`
`/Users/pc01/Sample/`
の状態で、
`zip -r Sample.zip ../Sample/`
をすると、Macではzipが解凍できるが、WindowsのLhaplusでは解凍することができなかった。
zip化するときに自分自身を含んでいることが問題だったみたいだ。

一つディレクトリを上がり、
`zip -r Sample.zip ./Sample/`
のようにするとWindowsでもzipファイルを解凍することができた。

解凍時の処理に問題があるのかちょっと調べてみたい。
SkinnyFrameworkでのTest Fixture

# SQLを使ったテストの前提条件はどう作ってますか？
SQL自体を単体テストしようと思った時、テストクラスで

1. Tableに前提条件となるデータを登録
2. テスト対象処理呼び出し、結果のassert
3. Tableをテスト前の状態にする(rollback)

という形をとると思います。

その中でも、「1」の前提条件となるデータを登録する処理をテストクラスで記述する所、みなさんはどのように楽をしているでしょうか？

# SkinnyならFactoryGirl？
SkinnyFrameworkを使っている方は[FactotyGirl](http://skinny-framework.org/documentation/factory-girl.html)でしょうか？

確かに、RoRの文化に慣れているとこの辺りを使う人が多い気がします。
ですが、テストプログラム上で登録する方式だと面倒なこともるはずです。

## テストに使っているデータを確認したい時
「何かうまくいかない」時はテストクラスを見て、前提条件にどんなデータが入っているかを確認するはずですが、テストクラス上のソースコードだけでどんなデータが入っているかを把握するのは難しくありませんか？

## 結合パターンを増やしたい時
2,3個のテーブルに、それぞれ10件程度データを入れてSQLの確認をしたい時もあるはずです。そのデータを作るのをテストプログラムで記述した場合、前提条件のデータを登録する箇所だけでテストクラスの大半を占めることになりませんか？ロジックを組み合わせてデータを設定している場合、そのロジックが正しいことも気にしなければなりません。

自分が作るだけならまだしも、ほかの人が作ったテストクラスをメンテしなければならない場合、あまり考えずに理解できた方が良いと考えています。本当にFactoryGirlしか選択肢がないのでしょうか？

# 私はDbUnitを使います
昔からありますが、[DbUnit](http://dbunit.sourceforge.net/)を使うことで、ExcelのファイルをDBにImportすることができます。Javaで作られているのでScalaからも簡単にアクセスできます。

Fixtureの定義の為だけに使っているので、DbUnitである必要性も少ないのですが、あんまりこの手のツールが無いので使い続けているのが現状です(まぁ、今ある機能で事足りているというのもあります)。新しいことを受け入れられない老害？かもしれませんね...w

## Excelファイルのフォーマット
こんな感じです。
![dbunit.jpeg.001.jpeg](https://qiita-image-store.s3.amazonaws.com/0/71541/8a0c4a38-9d61-4ff6-99a3-2e9f2658d829.jpeg)

## 実際にどう使うの？
[GitHub見てください](https://github.com/nemuzuka/skinny-db-test)

# 単体テストでDB接続の是非
プロジェクトや人によっては準備が面倒だとか、SlowTestなので嫌だ、という方もいらっしゃるかもしれませんが、個人的には抑えるべき所はやった方が良いんじゃないかな、と思っています。フレームワークの動作確認とかにも使えますしね。

テスト対象のロジックのパラメータパターンが多くて、テストプログラムで作るのがかったるい時なんかは、「DBからデータを取ってきて処理を行う」箇所をテストの対象として書いたりもしてます。テストが無いよりは何倍もマシでしょう...と心の中で言い訳しつつ。

ぜひ、テストデータをExcelで管理する人気を上げていきたいと思っています。
xismoを試す

[xismo](http://mqdl.jpn.org/)は情報の入りが早い方から教えてもらった、
3Dモデリングソフト。
出たばっかりでまだマニュアルが出ていない。
出たらそっちを見てまた追記する予定。

でも、折角なので使った履歴を備忘録的に残す。

ちなみに自分の環境は
Windows 7 home

# インストール
[xismoのサイト](http://mqdl.jpn.org/)でダウンロードを選び環境にあったものをダウンロード。
ダウンロードしたzipファイルを解凍するだけ。

![xismo01.png](https://qiita-image-store.s3.amazonaws.com/0/42445/54a76afd-056c-cf50-6246-6efe0a8bf9ca.png)

こんな感じのフォルダ構成


# 俺流Get Started
起動直後はこんな感じ。
![xismo02.png](https://qiita-image-store.s3.amazonaws.com/0/42445/3e290a6b-0852-b648-e87a-618a2c139339.png)

とりあえず「立方体」をクリックして立方体を置く。
![xismo03.png](https://qiita-image-store.s3.amazonaws.com/0/42445/eb505459-0abb-9fe0-8a7c-0fa18875be2f.png)

ノードの○ポチをクリックするとオブジェクトの表示・非表示が切り替えられる。
![xismo04.png](https://qiita-image-store.s3.amazonaws.com/0/42445/e91d6c0b-a1d4-cf60-31fe-8c25dd5f7081.png)
尚、右下のプロパティにある「可視」でも切り替えられる。
(このイメージ画像だと説明用の吹き出しとかぶってます)

表示の拡大は真ん中ボタンスクロール。世界の回転は右クリックのドラッグ。
Blenderと同じ感じ。

オブジェクトの移動・回転・サイズ変更
ローカル座標モードに変更して行う。
![xismo05.png](https://qiita-image-store.s3.amazonaws.com/0/42445/c96ef8bf-f594-7127-6c52-e2dcd3500d4f.png)

ファイルの保存は他のアプリと同様。
![xismo06.png](https://qiita-image-store.s3.amazonaws.com/0/42445/01d58993-f6fc-836a-2657-664729447730.png)


ワールドの移動やオブジェクトの全体サイズ変更などが分からなかったが、
動作が軽いので、使いこなせれば強力な味方になる予感がした。

冒頭でも書いたけど、
マニュアルが出てきたら追記ましす～。
OpenShift Client Tools セットアップ、FileZilla接続、puttyリモート接続 (Windows)

#準備
まずRubyとgitのインストールが必要です。

Ruby 1.9.3  [RubyInstaller](http://rubyinstaller.org/)

Git  [Git for Windows](https://git-for-windows.github.io/)

Client Toolsのコマンドは

`C:\> gem install rhc`


#セットアップ

`rhc setup`

ログインするよう聞かれるのでアカウントとパスワードをうちこんでログインします。
ssk key がマシンになかったら、自動的につくられアップロードするようにきかれますのでyes。

そしたら自分のマシンでアプリケーションを作成したりすることができます。

たとえばphp5.4でmyfirstphpappというアプリケーションを作成したいなら
`C:\> rhc app create myfirstphpapp php-5.4`

です。

ちなみにFileZillaから接続も可能です。
[Using FileZilla and SFTP on Windows with OpenShift](https://blog.openshift.com/using-filezilla-and-sftp-on-windows-with-openshift/)

puttyでリモート接続もできます。
[Remote Connection (SSH)](https://developers.openshift.com/managing-your-applications/remote-connection.html)
R: twitteRインストールでRcurl non-zero exit statusエラーが発生した時の対処

twitterRのインストール時に以下のエラーが出てしまったが

———-
checking for curl-config… no
Cannot find curl-config
ERROR: configuration failed for package ‘RCurl’
* removing ‘/home/fea2fwa/R/x86_64-redhat-linux-gnu-library/3.0/RCurl’
Warning in install.packages :
installation of package ‘RCurl’ had non-zero exit status
———-

CentOSから以下コマンドを実行すると直りました。

$ sudo yum -y install curl
$ sudo yum -y install libcurl libcurl-devel
RでOAuth認証を行いTwitterのタイムラインを表示

library(twitteR)
download.file(url=”http://curl.haxx.se/ca/cacert.pem”, destfile=”cacert.pem”)
cred<-OAuthFactory$new(consumerKey=”<YOUR KEY>”,
consumerSecret=”<YOUR SECRET>”,
requestURL =”https://api.twitter.com/oauth/request_token”,
accessURL = “https://api.twitter.com/oauth/access_token”,
authURL=”https://api.twitter.com/oauth/authorize”)
cred$handshake(cainfo=”cacert.pem”)
registerTwitterOAuth(cred)
userTimeline(“<YOUR TWITTER ACCOUNT>”,cainfo=”cacert.pem”)
さくらのVPS：Ubuntu 14.04 にJAVA + owncloud + wordpressをインストール

[add user]
adduser <username>
visudo
(add)
<user name> ALL=(ALL:ALL) ALL

[ssh config]
sudo vi /etc/ssh/sshd_config
(change)
Port <xxxx>
PermitRootLogin <no>
(end)
sudo service ssh restart

[java]
sudo apt-get update
sudo apt-get install software-properties-common python-software-properties
sudo apt-add-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-jdk7-installer
java -version
javac -version

[ntp]
sudo apt-get install ntp
sudo vi /etc/ntp.conf (add ntp server name. e.g. server ntp.nict.jp)

[lamp]
sudo apt-get install tasksel
sudo tasksel install lamp-server
apache2 -v
php -v
mysql -v

[apache2 & mysql config]
sudo vi /etc/apache2/apache2.conf
(change)
154: Options FollowSymLinks -> Options Indexes FollowSymLinks MultiViews
155: AllowOverride None -> AllowOverride All
(end)
sudo service apache2 restart
sudo a2enmod rewrite
sudo service apache2 restart
sudo mysql_secure_installation
sudo vi /etc/mysql/my.cnf
(add: [mysql] line31-)
skip-character-set-client-handshake
character-set-server = utf8
(add: [mysqldump] line114-]
default-character-set = utf8
(add: [mysql] line120-]
default-character-set = utf8
(end)
sudo service mysql restart

[owncloud]
mysql -u root -p<password>
create database ownclouddb default character set utf8;
grant all on ownclouddb.* to owncloud@localhost identified by ‘<password>’;
quit
wget http://download.opensuse.org/repositories/isv:ownCloud:community/xUbuntu_14.04/Release.key
sudo apt-key add – < Release.key
sudo sh -c “echo ‘deb http://download.opensuse.org/repositories/isv:/ownCloud:/community/xUbuntu_14.04/ /’ >> /etc/apt/sources.list.d/owncloud.list”
sudo apt-get update
sudo apt-get install owncloud

sudo vi /etc/php5/apache2/php.ini
(change)
upload_max_filesize = <value;e.g 10G>
post_max_size = <value>
(end)
sudo vi /var/www/owncloud/.htaccess
(change)
php_value upload_max_filesize <value;e.g. 10G>
php_value post_max_size <value>
php_value memory_limit <value>
(end)
sudo service apache2 restart

[wordpress]
wget https://wordpress.org/latest.zip
unzip latest.zip
sudo mkdir /var/www/html/blog
cd wordpress
sudo mv * /var/www/html/blog
mysql -u root -p<password>
create database wordpressdb;
create user wordpress@localhost identified by ‘<password>’;
grant all privileges on wordpressdb.* to wordpress@localhost;
flush privileges;
quit
chown -R www-data.www-data /var/www/html/blog
sudo chown -R www-data.www-data /var/www/html/blog
(access to http://xxxx/blog)
Ubuntu 14.04：MongoDBのインストール

sudo apt-key adv –keyserver hkp://keyserver.ubuntu.com:80 –recv EA312927
echo "deb http://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/3.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.list
sudo apt-get update
sudo apt-get install -y mongodb-org
[コミュ症向け]コミュニケーション力向上のために読むべき本100冊(作成中)

# 読んだ
## ロジカルシンキング
- [ゼロ秒思考 赤羽 雄二(著)](http://www.amazon.co.jp/ebook/dp/B00HQ6O7BO)
    - A4メモ書きは2ヶ月以上続けています。バイブル。
- [ゼロ秒思考［行動編］ 赤羽 雄二(著)](http://www.amazon.co.jp/ebook/dp/B00HQ6O7BO)
    - メモ書き以外のコツにも触れられた本
- [速さは全てを解決する　『ゼロ秒思考』の仕事術 赤羽 雄二(著)](http://www.amazon.co.jp/ebook/dp/B00SSL7H3Q)
    - ゼロ秒思考続編
- [頭が真っ白になりそうな時、さらりと切り返す話し方 (ワニの本)  赤羽 雄二(著)](http://www.amazon.co.jp/ebook/dp/B00YE99DII)
    - コニュニケーションに重点を置いた本
- [あの人はなぜ、東大卒に勝てるのか 津田 久資（著）](http://www.amazon.co.jp/ebook/dp/B015X5TUOI)
    - ロジカルシンキングについて、難しい専門用語を一切使わず平易な言葉でわかりやすく解説されている。非常にオススメ。

## 質問力
- [質問力――話し上手はここがちがう (ちくま文庫) 齋藤孝(著)](http://www.amazon.co.jp/ebook/dp/B00E5XAWC4)
    - 質問力についてレベル別に豊富な実例を交えて解説されている
- [あなたの話はなぜ「通じない」のか (ちくま文庫) Kindle版 山田ズーニー (著)](http://www.amazon.co.jp/ebook/dp/B00MM3QSZE/)
    - コミュニケーションの基本は「問い」を立てる能力。非常に読みやすい。

## コピーライティング
- [伝え方が９割 佐々木 圭一](http://www.amazon.co.jp/dp/B00BHCM7HE)
    - 仕事で即活かせました。ロジカルに人の心に残りやすいコピーを誰でも作れるノウハウをわかりやすく解説

## メモ力
- [仕事のスピード・質が劇的に上がる　すごいメモ。 小西利行](http://www.amazon.co.jp/dp/B01ANIXQWM)
    - 即実行できるシンプルで非常に実践的なメモ術だけでなく、著者の思考のフレームワークが学べる。去年あたりバリュープロポジションキャンバスというフレームワークが流行っていたが、著者はずっと早くから独自に同じ手法編み出していた模様(ホワイト三角メモ,ブラック三角メモ)

## 段取力
- [段取り力――「うまくいく人」はここがちがう (ちくま文庫) 齋藤孝 (著)](http://www.amazon.co.jp/ebook/dp/B00E5XAWJC)
    - コミュニケーション力とセットで

## インタビュー
- [ユーザビリティエンジニアリング(第2版)―ユーザエクスペリエンスのための調査、設計、評価手法― 樽本　徹也(著)](http://www.amazon.co.jp/2-ebook/dp/B00KV84VXS)
    - ユーザテストやユーザインタビューを初めてやる場合の参考に。この本一冊ですべて事足りる。


# 読みたい
- [イシューからはじめよ ― 知的生産の「シンプルな本質」 Kindle版](http://www.amazon.co.jp/ebook/dp/B00MTL340G)
- [エッセンシャル思考 最少の時間で成果を最大にする Kindle版](http://www.amazon.co.jp/ebook/dp/B00QQKCV6E)
- [思考の整理学 (ちくま文庫) Kindle版](http://www.amazon.co.jp/ebook/dp/B00E5XATVS)
- [脳が冴える１５の習慣　―記憶・集中・思考力を高める　生活人新書 Kindle版](http://www.amazon.co.jp/ebook/dp/B008YOHDK4/)
- [知的複眼思考法　誰でも持っている創造力のスイッチ (講談社＋α文庫) Kindle版](http://www.amazon.co.jp/ebook/dp/B00FEBDDRC)
- [読書の技法 Kindle版](http://www.amazon.co.jp/ebook/dp/B009APH6WG/)
- [雑談力が上がる話し方 Kindle版](http://www.amazon.co.jp/ebook/dp/B0081WMNFY)
- [誰とでも15分以上　会話がとぎれない！話し方66のルール Kindle版](http://www.amazon.co.jp/15-66-ebook/dp/B008U5TMA6/)
- [「おもしろい人」の会話の公式　気のきいた一言がパッと出てくる！ Kindle版](http://www.amazon.co.jp/ebook/dp/B00VUS6W76)
- [お笑い芸人に学ぶ　ウケる！トーク術 Kindle版](http://www.amazon.co.jp/ebook/dp/B0096OV64U)
- [なぜ、あなたの話はつまらないのか？ Kindle版](http://www.amazon.co.jp/ebook/dp/B00K29RDFE/)
- [たった１日で声まで良くなる話し方の教科書 Kindle版](http://www.amazon.co.jp/ebook/dp/B013DFSFYQ/)
- [どんな人ともドギマギせずに会話がふくらむコツを集めました！ 三笠書房　電子書籍 Kindle版](http://www.amazon.co.jp/ebook/dp/B00BPKECJE/)
- [なぜ、この人と話をすると楽になるのか Kindle版](http://www.amazon.co.jp/ebook/dp/B00SQYBB0A/)
- [“内向型”のための雑談術 自分にムリせずラクに話せる５１のルール (大和出版) Kindle版](http://www.amazon.co.jp/ebook/dp/B00KGNV68Q)
- [超一流の雑談力 Kindle版](http://www.amazon.co.jp/ebook/dp/B00YX5JRI4)
- ~~[伝え方が９割　【「伝え方が９割　２」試読版付き】 Kindle版](http://www.amazon.co.jp/ebook/dp/B00BHCM7HE)~~
- [嫌われる勇気 Kindle版](http://www.amazon.co.jp/ebook/dp/B00H7RACY8)
xcodeでlocal gitを作り忘れた時のメモ

xcodeでlocal gitを作り忘れた時のメモ

たまに忘れるので書いとく

ターミナルで.xcodeprojの拡張子のあるiOSプログラミングのフォルダーまで移動する
以下のコマンドを実行する
```
git init
```

以下のコマンドで追加するファイルを確認

```
git status
```


ファイル追加

```
git add .
```

コメント付きでコミット

```
git commit -m "commit"
```

最後にXcodeを再起動すればローカルgitが出来てるはずなのであとはいつも通り<br>githubにコミットする手順を踏めばコミットできるはず