OmniAICreator/Qiita-1.07M huggingface dataset:
centOS7でLAMP環境を作る

#やりたいこと
centOS7でLAMP環境を構築する。
（PHPのみ、７を指定。）

#バージョン
centOS7
Apache2.4.6
PHP7.0.18
MySQL5.6.36

#前提条件
[centOS7のインストール・初期設定](http://qiita.com/NeMu/items/4a046b29e661b44e9288)が完了していること

---

##Apacheインストール
インストール実行

```
#yum -y install httpd
```
起動状態の確認

```
#systemctl status httpd
```

サービスの起動

```
#systemctl start httpd.service
```
自動起動をONにする

```
#systemctl enable httpd.service
```
ブラウザからアクセスして初期画面が表示されればOK。

##PHP7インストール
EPELリポジトリ追加

```
#yum install epel-release
```
Remiリポジトリ追加

```
#rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
```
インストール実行

```
#yum install --enablerepo=remi,remi-php70 php php-mbstring php-devel php-pdo php-gd php-mysqlnd
```
php.iniの編集
※[こちら](http://www.unix-power.net/centos7/php.html)のサイトを参考にさせていただきました

```
#vi /etc/php.ini
```
項目の編集↓して保存

```
date.timezone = "Asia/Tokyo"
mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_input = pass
mbstring.http_output = pass
mbstring.encoding_translation = Off
mbstring.detect_order = auto
mbstring.substitute_character = none;
mbstring.func_overload = 0
mbstring.strict_detection = Off
mbstring.http_output_conv_mimetype=
```
Apache再起動

```
#systemctl restart httpd
```
テストファイルを作成

```
#vi /var/www/html/index.php
```
infoを表示するコード↓を記述して保存

```
<?php phpinfo(); ?>
```
ブラウザからアクセスして、infoが表示されていればOK。

##MySQLインストール

リポジトリファイルをインストール

```
#yum -y install http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
```
MySQLインストール

```
#yum -y install mysql mysql-devel mysql-server mysql-utilities
```
my.cnfの編集

```
#vi /etc/my.cnf
```
[mysqld]の欄に以下を追記

```
character-set-server = utf8
```
MySQL起動

```
#systemctl start mysqld
```
MySQLにログイン（パスワード無し）

```
#mysql -u root -p
```
rootのパスワードをthisIsPasswordに変更

```
>update mysql.user set password=password('thisIsPassword') where user = 'root';
```
変更を反映する

```
>flush privileges;
```
ログアウト

```
>exit;
```
rootのthisIsPasswordでログインできればOK。
MySQL再起動

```
#systemctl restart mysqld
```
##自動起動の設定
httpd自動起動ON

```
#systemctl enable httpd.service
```
mysql自動起動ON

```
#systemctl enable mysqld.service
```
httpd自動起動確認

```
#systemctl is-enabled httpd.service
```
mysql自動起動確認

```
#systemctl is-enabled mysqld.service
```
「enabled」になっていれば、自動起動がONになっている。

---

終了！
[ZF3] Zend Framework 3 データベース接続 query()


```
$config = array(
    'driver' => 'mysqli', // MySQL
    'host' => 'localhost',
    'username' => '{username}',
    'password' => '{password}',
    'database' => '{dbname}',
    'characterset' => 'utf8',
);
$adapter = new \Zend\Db\Adapter\Adapter($config);

$id = 1;

$sql = "select * from user where id = ?";
$params = array($id);
$statement = $adapter->query($sql);
$results = $statement->execute($params);

foreach ($results as $result) {
	//echo $result->id;
	echo $result->name;
}
```
[Python3] Google translate apiを使わずにgoogle翻訳をする

# 前書き
pythonで英文を日本語に翻訳したい時にGoogleの翻訳APIを使えばいいと思ったけど、有料だった(´・ω・`)
ならスクレイプして翻訳結果を取ってくればいいじゃないか!と思いついたので作ってみた

# 環境
Python 3.4.3 :: Anaconda 2.3.0 (x86_64)

# 必要ライブラリ

- BeautifulSoup4
- selenium
- PhantomJS 2.1.1

# プログラム

```python
from selenium import webdriver
from bs4 import BeautifulSoup
import urllib.parse

english = 'As an app designer, you have the opportunity to deliver an extraordinary product that rises to the top of the App Store charts.'
url_text = "https://translate.google.co.jp/#en/ja/{0}".format(english)
url = urllib.parse.quote_plus(url_text, "/:?=&#")

driver = webdriver.PhantomJS()
driver.get(url)
html = driver.page_source
soup = BeautifulSoup(html,'html.parser')

print('English')
print(english)
print('Japanese')
print(soup.find(id='result_box').text)
```

英語to日本語変換したいときは
`url_text`の`"https://translate.google.co.jp/#en/ja/{0}".format(engish)`の`en`と`ja`を入れ替えればできると思います
他の言語も同様に

## やっていること
`english`で指定された文字列を`url_text`に格納し、スペースや２バイト文字を`URLの形式に変換しているだけです

#問題点
PhantomJSで描画しないといけないので遅い
webページの構造が変わったら変換できない

まぁ…こんな文句を言うなら有料のAPIを使えってことになりますが
flexboxから長い文字列がはみ出さないようにする方法

flexboxが便利だと聞いたので使っていたら、boxの内に要素がおさまらなくて
色々と試していたら案外簡単に解決したのでメモ。

# 文章がはみ出る

<img width="1006" alt="スクリーンショット 2017-05-11 15.25.44.png" src="https://qiita-image-store.s3.amazonaws.com/0/142511/f23cce5a-fcc9-c0f8-1f93-92026b63d0e3.png">


赤い枠内におさまっていない。bbbbbがちょっと出ちゃってる。

## コード

```html:html
    <div class="flexbox">
        <div class="f-item1">URL:</div>
        <div class="f-item2"><a href="#">aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb</a></div>
    </div>
```

```css:css
	.flexbox {
		display: -webkit-flex; /* Safari */
		display: flex;
		-webkit-flex-wrap: wrap; /* Safari */
		flex-wrap: wrap;
		width: 80%;
		padding-bottom: 6px;
		border:1px solid red;
	}

	.f-item1 {
		text-align: left;
		width: 100%;
	}

	.f-item2 {
		text-align: left;
		width: 100%;
	}
```

# はみ出ないようにする

<img width="958" alt="スクリーンショット 2017-05-11 15.37.49.png" src="https://qiita-image-store.s3.amazonaws.com/0/142511/a0537916-950d-6186-de06-0b93083c0c08.png">

枠の横幅いっぱいのところで折り返して、きちんと赤枠内におさまってる！


## コード

```html:html
    <div class="flexbox">
        <div class="f-item1">URL:</div>
        <div class="f-item2"><a href="#" class="word-break">aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb</a></div>
    </div>
```

```css:css
	.flexbox {
		display: -webkit-flex; /* Safari */
		display: flex;
		-webkit-flex-wrap: wrap; /* Safari */
		flex-wrap: wrap;
		width: 80%;
		padding-bottom: 6px;
		border:1px solid red;
	}

	.f-item1 {
		text-align: left;
		width: 100%;
	}

	.f-item2 {
		text-align: left;
		width: 100%;
	}

	.word-break {
		word-break: break-all;
	}
```

## どうやったのか

幅の狭い領域で長い英単語や長いURLの途中で折り返しを制御できるCSSプロパティ**「word-break」**を使用して
aタグにクラス指定をしただけ。

# 因みに

f-item2のクラスに対してwidthを調整してあげると、折り返す位置も調整できる。

width: 100 % ↓　　
<img width="904" alt="スクリーンショット 2017-05-11 15.37.49.png" src="https://qiita-image-store.s3.amazonaws.com/0/142511/237b45e0-faef-135a-7f4e-bdb2f8ad8fe0.png">




width: 70 % ↓　　
<img width="905" alt="スクリーンショット 2017-05-11 15.43.14.png" src="https://qiita-image-store.s3.amazonaws.com/0/142511/21220134-3b7c-4c55-8b60-f7cb798e7a3e.png">



```css:css
	.f-item2 {
		text-align: left;
		width: 70%; //ここを調整。
	}
```
Laravel Route パラメータのバインディング



````
Route::bind("company_code", function ($value) {
	$comp = CompanyEloquent::where("code",$value)->first();
    return $comp;
});

Route::bind("staff_code", function ($value) {
	$comp = StaffEloquent::where([
		"company_id" => ????,
		"staff_code" => $value // 複合ユニークのため
	])->first();
    return $comp;
});
````

こんな感じのアレが、

````
use \Illuminate\Routing\Route;

Route::bind("company_code", function ($value) {
	$comp = CompanyEloquent::where("code",$value)->first();
    return $comp;
});

Route::bind("staff_code", function ($value,Route $route) {
	$comp = StaffEloquent::where([
		"company_id" => $route->parameter("company_code")->id,
		"staff_code" => $value // 複合ユニークのため
	])->first();
    return $comp;
});
````

みたいに書けたりする。

便利。
Android7からcharlesでssl通信が見れなくなった件

# 問題
Charlesを使用して通信デバッグをしていたが、Android7以上の端末でssl通信が見れなくなった。

# 原因
どうやらネットワークセキュリティーの仕様が変わったらしい
[Changes to Trusted Certificate Authorities in Android Nougat](https://android-developers.googleblog.com/2016/07/changes-to-trusted-certificate.html)

## ３行まとめ
* より安全なデフォルトを提供するためにAndroidが信頼できる認証局（CA）の仕様を変更したよ
* Apiレベル24(Android 7)以上からだよ
* CAを明示的に有効にしないと通信はみれないよ

# 対応方法
信頼できるCAを追加しましょう
https://developer.android.com/training/articles/security-config.html?hl=ja#CustomTrust

## カンタン導入
***デバッグだけ通信を見れる様にする***
#### 1. AndroidManifestの`<application>`に下記を追加

```xml
android:networkSecurityConfig="@xml/network_security_config"
```

#### 2. `network_security_config.xml`を`res/xml/`に追加

```xml
<network-security-config>
    <base-config>
        <trust-anchors>
            <certificates src="system" />
        </trust-anchors>
    </base-config>
    <debug-overrides>
        <trust-anchors>
            <certificates src="user" />
        </trust-anchors>
    </debug-overrides>
</network-security-config>
```
なにか間違いがあればコメントお願いします
pdftk on Mac OSX10.11 and later

pdfをterminalで利用したいと思い調べていたら, pdftkを知った. 
OSX10.11からは新しいverのを利用しないと動かない等, いくつか注意が必要だったのでメモ. 

# install
apt-get, brew等なら下記

```ubuntu.
$ sudo apt-get install pdftk
```
```mac.
$ brew install pdftk
```

でinstallできるらしい(私はできなかった)が, 古いらしいのでダメだそうです. 

なので, 本家
https://www.pdflabs.com/tools/pdftk-server/
に行ってダウンロードしてインストールしたほうが良いらしい. 

ただし, macのOSX10.11(El capitan)だとこれではダメだった. 
こちら
http://stackoverflow.com/questions/32505951/pdftk-server-on-os-x-10-11
の
https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/pdftk_server-2.02-mac_osx-10.11-setup.pkg
が10.11版なので, コレをダウンロードしてinstallしたら上手く行った. 
(URL的に本家っぽいけど, どうしてコレをトップに置いてないんだろう...?)



# commands

```
merge
$ pdftk input1.pdf input2.pdf output output.pdf

merge all
$ pdftk *.pdf output output.pdf

stamp
$ pdftk input.pdf stamp header.pdf output output.pdf

background
$ pdftk input.pdf background header.pdf output output.pdf

rotation right all
pdftk input.pdf cat 1-endright output output.pdf
```


# refs
## OSX10.11でのpdftkの導入
日本語説明されてる方
http://phasetr.com/blog/2016/07/28/2016-07-mac-osx-el-capitan-10-11-6-%E3%81%A7-homebrew-%E3%81%8B%E3%82%89%E5%85%A5%E3%82%8C%E3%81%9F-pdftk-%E3%81%8C%E5%8B%95%E3%81%8B%E3%81%AA%E3%81%84%E5%95%8F%E9%A1%8C%E3%81%AE%E8%A7%A3%E6%B1%BA/

参照先
http://stackoverflow.com/questions/32505951/pdftk-server-on-os-x-10-11

ダウンロード先
https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/pdftk_server-2.02-mac_osx-10.11-setup.pkg

cpdfという解決方法もあるらしい(今回は試してない)
http://qiita.com/sekizo/items/fa63b00d0d110423426d


# pdftkコマンド
http://nwpct1.hatenablog.com/entry/2013/12/14/192914
http://www.slab.ces.kyutech.ac.jp/~saitoh/ja/pdftk.html
何でも割り算はNGらしい

#概要

- ポアソン分布に従うデータ(平均値$λ$)を時間や空間で規格化しようとして、定数$k$で割ると平均値$λ$は$λ/k$と分散は$λ/k^2$になる。
-  規格化されたカウントデータにおいて平均値 $\neq$ 分散
-  もはやポアソン分布ではなくなってしまう。
-  ポアソン分布を仮定できるデータは個数データであって割合データではない。
-  おまけにこれを体感できるRコードを付録した。

#始めに

久保さんが「[何でも「割算」するな](http://hosho.ees.hokudai.ac.jp/~kubo/stat/2011/z/skubostat2011z.pdf)」と警鐘を鳴らしている。

その理由の一つとして

  -  観測値 / 観測値がどんな確率分布に従うのか見通しが悪い

ということを挙げている。

まさしくこの事例にあたる現象にぶつかったので紹介する。


#単位時間あたりの信号検出率はポアソン分布にならない。

##過少分散の例

以下に示すのはEPMA(電子線マイクロアナライザ)による単位時間あたりのX線カウント数の平均値(mean)と分散(var)の散布図。
mean = varとなるところに直線を引いてある。

![underdispersion.png](https://qiita-image-store.s3.amazonaws.com/0/149890/dd0b02d2-3735-5932-5f59-43bd59a2ac3b.png)

分散と平均値が比例していることにポアソン分布らしさを感じる。
しかし、ポアソン分布と見做すには、随分と過少分散しているのが分かる。

##原因

上述の問題は5秒間計測したデータを単位時間あたりのデータに変換してしまっているため。

ポアソン分布に従うデータは、平均値($\bar{x}$)と分散($s^2$)が同じになる特徴を持つ。
ここで、標本分散の計算式は

$s^2 = 1/(n-1)\sum_{i=1}^{n}(\bar{x} - x_i)^2$

だから、元データが定数$k$で割られていた場合、新たに得られる平均値は$kλ$であるのに対し、分散は$k^2λ$となってしまう。

従って分散 / 平均値 = kとなり、

- $k > 1$ならば過少分散
- $0 < k < 1$ならば過剰分散

が発生する。

##どうする？

単位時間あたりのX線検出率を、X線検出回数に戻してやればいい。
つまり、データを5倍する。

![poisson.png](https://qiita-image-store.s3.amazonaws.com/0/149890/4fcb1f12-0f08-6f8f-d358-5e02f4682ab6.png)

一部に過剰分散が認められるが、概ね平均値と分散が$1:1$になったのが分かると思う。

#結論

ポアソン分布はあくまで個数データに期待される分布で、割合データに期待するものではない。

#おまけ(Rコード)

今回の問題を体感してもらえるRコードを残しておきます。

```

#模擬データの作成

##集団の数
group <- 30 

##各集団に属する固体の数

n_min <- 1
n_max <- 100

n <- round(runif(group, n_min, n_max))

##各集団の何らかのカウントデータの平均値
lambda_min <- 9.1
lambda_max <- 100

lambda <- round(runif(group, lambda_min, lambda_max))

##集団ごとに、乱数を生成
d <- Map(rpois, lambda, n)

##集団ごとの平均値、分散を算出
d_mean <- sapply(d, mean)
d_var <- sapply(d, var)

##プロット(平均値v.s.分散)
##結果はy = xに乗る
plot(d_mean, d_var, xlim = c(0, max(d_mean)), ylim = c(0, max(d_var)))
abline(0, 1)


##dを定数kで割った時の
##平均値v.s.分散
##結果はy = xから外れる
k <- 5

d_per_k <- lapply(d, `/`, k)
d_per_k_mean <- sapply(d_per_k, mean)
d_per_k_var <- sapply(d_per_k, var)

plot(d_per_k_mean, d_per_k_var, xlim = c(0, max(d_per_k_mean)), ylim = c(0, max(d_per_k_var)))
abline(0, 1)


```
Travis CIでV8JSをインストール

PHPのエクステンション[v8js](https://github.com/phpv8/v8js)を使用したコードを[Travis CI](https://travis-ci.org/)でテストする場合、既存の環境では[v8](https://chromium.googlesource.com/v8/v8.git)もv8jsも含まれていないのでインストールする必要があります。

Travis CIには実行に必要なソフトウエアをインストールする`before_install`及び`install`というセクションがあります。

https://docs.travis-ci.com/user/customizing-the-build

8jsのインストールを`install`に、v8jsのインストールに必要な`v8`を`before_install`でインストールします。以下はその手順です。

既存の`.travis.yml`に以下のセクションを追加

```yaml
sudo: required
dist: trusty
env:
  - V8VER=5.2
before_install:
  - make -f Makefile.travis before_install
install:
  - make -f Makefile.travis install
```

`Makefile.travis`を設置

```yaml
# Configure and build scripts for travis CI system
V8VER ?= 5.1

export NO_INTERACTION=1
export REPORT_EXIT_STATUS=1

before_install:
	sudo add-apt-repository ppa:pinepain/libv8-$(V8VER) -y
	sudo apt-get update -q
install:
	sudo apt-get install -y libv8-$(V8VER)-dev
	git clone https://github.com/phpv8/v8js.git
	cd v8js && phpize && ./configure CXXFLAGS="-Wall -Wno-write-strings -Werror" && $(MAKE) -j3 && $(MAKE) install install && cd ..
	echo "extension=v8js.so" >> `php --ini | grep "Loaded Configuration" | sed -e "s|.*:\s*||"`
```

以上です。

v8を`apt-get`した後にv8jsをソースからコンパイルし`v8js.so`がphp.iniに登録され[V8Js](http://php.net/manual/ja/book.v8js.php)が利用可能になります。

Travis CIログ
https://travis-ci.org/koriym/Koriym.Baracoa/builds/230966608
Gitのlocalのバージョンを更新

## Gitのlocalのバージョンを更新

iOS開発でCarthageをインストールしようとしたら以下のようなエラーが出た。
![carthagerequiresgit230orlater.png](https://qiita-image-store.s3.amazonaws.com/0/168714/cf566666-840d-f4c5-8131-bde12c7a6de8.png)

 
 
そういえば3年前から全くgitのバージョンを更新していなかった気がしたと思い、これを気にgitのバージョンを更新してみることに！
 
 
![git_version.png](https://qiita-image-store.s3.amazonaws.com/0/168714/87386418-16fb-d996-4550-44bf0d32ec99.png)
現在のバージョンは`2.1.0`でした。
 

 
今回はこちらのサイトを参照に更新しました。
http://www.task-notes.com/entry/20150622/1434942000


![which_git.png](https://qiita-image-store.s3.amazonaws.com/0/168714/10704298-b91f-baab-621d-9ea8fbc5b12b.png)
自分の場合 `/usr/local/src/` ではなく、 `/user/local/bin/` の中にgitが入っているようだったので、

```
% cd /user/local/bin
% git clone git://git.kernel.org/pub/scm/git/git.git
% cd git
```

![make_prefix.png](https://qiita-image-store.s3.amazonaws.com/0/168714/6bee5f41-bddc-3183-e6be-1f7d80c0ef3a.png)

続いて `make prefix=/usr/local all` を実行すると上のようなエラーが出た。
調べたところ、
https://sites.google.com/site/aotokage52/git-wososukarainsutoru
こちらのサイトを参照すると上手くいった。 

```
% brew install autoconf
% rehash
% make configure
% ./configure --prefix=$PWD/INSTALL_DIR 
% make >& make.log &; tail -f make.log
% make install
```

これを実行したことによって先ほどのエラーもなくなりました。

```
% make prefix=/usr/local all
% make prefix=/usr/local install
```


![git_version_211.png](https://qiita-image-store.s3.amazonaws.com/0/168714/5f244303-8dcf-2a03-13e3-007c1879eb32.png)

これで無事にgitのバージョンを `2.11.0` にアップデートできました。
どうやらgitはgitで管理する方が良さそうですね！!

おまけに、Carthageの導入にも成功しました。
`% carthage update --platform ios`
[Linux][kernel module] カーネルモジュール内でkthreadを作成する

カーネルモジュールの中でkthreadを作成する方法メモ

ローダブルカーネルモジュールの作成とビルド方法に関しては以下などを参考にしてください。
[[Linux][kernel module] 簡単なローダブルカーネルモジュールのビルドとロード - Qiita](http://qiita.com/koara-local/items/39002cc1f611e26114f8)

# ソース

```c:testmod.c
#include <linux/module.h>
#include <linux/sched.h>
#include <linux/kthread.h>

MODULE_LICENSE("MIT");

struct task_struct *k;

static void kthread_main(void)
{
	schedule();
}

static int kthread_func(void* arg)
{
	printk(KERN_INFO "[%s] start kthread\n", k->comm);

	while (!kthread_should_stop()) {
		kthread_main();
	}

	printk(KERN_INFO "[%s] stop kthread\n", k->comm);

	return 0;
}

static int __init testmod_init(void)
{
	printk(KERN_INFO "driver loaded\n");

	k = kthread_run(kthread_func, NULL, "testmod kthread");

	return 0;
}

static void __exit testmod_exit(void)
{
	kthread_stop(k);
	printk(KERN_INFO "driver unloaded\n");
}

module_init(testmod_init);
module_exit(testmod_exit);
```

## 基本的な流れ

### メイン

+ init関数で `kthread_run(3, ...)` マクロにてスレッドの作成を行う
+ exit関数で kthread を終了する

`kthread_run(3, ...)` マクロは以下のようになっているとのことです。

```c:kthread_run
#define kthread_run(threadfn, data, namefmt, ...)                          \
({                                                                         \
       struct task_struct *__k                                            \
               = kthread_create(threadfn, data, namefmt, ## __VA_ARGS__); \
       if (!IS_ERR(__k))                                                  \
               wake_up_process(__k);                                      \
       __k;                                                               \
})
```

`kthread_create(3, ...)` を実行後、`wake_up_process(1)` が実行されています。
`namefmt` については、printfのようにフォーマット指定子が使用でき、変数を使用したスレッド名を設定することができます。

### kthread側

+ 新しいスレッドから、kthread_funcが呼び出される
+ 終了まで繰り返し呼び出されるループを作成（スレッドの終了は `kthread_should_stop()` で検出する）
+ `schedule()` にて一定期間スリープ

TODO: `schedule()` の動作については要調査

# 実行例

```console:実行例
$ sudo insmod testmod.ko
$ ps aux | head -1 && ps auwx | grep "\[testmod kthread\]"
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root     28716 84.8  0.0      0     0 ?        R    23:14  16:07 [testmod kthread]
$ sudo rmmod testmod.ko
$ dmesg | tail
[187744.330108] driver loaded
[187744.330326] [testmod kthread] start kthread
[187812.178718] [testmod kthread] stop kthread
[187812.178743] driver unloaded
```

カーネルモジュール内でのスレッドの開始と終了がされていることが確認できました。
psコマンドで作成したスレッドの確認をすることもできました、

# 関連
[[Linux][kernel module] 簡単なローダブルカーネルモジュールのビルドとロード - Qiita](http://qiita.com/koara-local/items/39002cc1f611e26114f8)
[[Linux][kernel module] ローダブルカーネルモジュールのロード時に引数でパラメータを渡す方法 - Qiita](http://qiita.com/koara-local/items/a3d8dc438f630c295456)
[[Linux][kernel module] kthreadの実行CPUを指定/制限する - Qiita](http://qiita.com/koara-local/items/a912155d4a423e8f9588)

# 参考
[カーネルスレッドのループと停止をカーネルモジュールで実装 - 人間とウェブの未来](http://hb.matsumoto-r.jp/entry/2016/05/23/152438)
[kthread_runマクロ - Linuxの備忘録とか・・・(目次へ）](http://wiki.bit-hive.com/north/pg/kthread_run%A5%DE%A5%AF%A5%ED)
[[PDF] kthreads](http://www.cs.fsu.edu/~cop4610t/lectures/project2/kthreads/kthreads.pdf)
Macでターミナルから起動する簡易コマンドたちをメモ((φ(･д･｡)

path通した方がいいよ

```txt:.bash_profile
PATH=$PATH:$HOME/bin
```

## ドキュメントを管理しているSublimeTextプロジェクト呼び出し
```sh:docs
open $HOME/sublime/documents.sublime-project
```

## Jenkinsマシンアクセス用
```sh:jen
for param in $*
do
	# コマンドについてのヘルプを表示するかどうか
	if [ ${param} = "-p" ]; then
		echo password: pAssWoRD
	fi
done

ssh user@192.168.0.1
```

## ローカルのjenkins起動
```sh:start-jenkins
brew services start jenkins
```

## Unity起動 (複数同時起動対応)
```sh:unity
FOLDER=Unity_5_3_6f1
LF=$(printf '\\\012_')
LF=${LF%_}

for param in $*
do
    if [ $param = "-v" ]; then
        echo `ls /Applications | grep Unity`  | sed 's/ /'"$LF"'/g'
        exit
    else
        FOLDER=${param}
    fi
done

if [ $FOLDER = "" ]; then
    echo null
    FOLDER=Unity_3_5_6f1
fi

open /Applications/${FOLDER}/Unity.app -n
```

## provisioningファイルUUID抽出
```sh:prov
security cms -D -i $* | grep UUID -A 1
```

## sshアクセスの自分用ホスト定義(コマンドじゃない)
```txt:config
Host MyHost
    HostName xxx.xxx.xxx.xxx
    User user
    IdentityFile /path/to/key
```

↓

```txt:config
scp fumidai:.ssh/id_rsa ~/.ssh/id_rsa.fumidai
# ~/.ssh/config
Host MyHost
    HostName xxx.xxx.xxx.xxx
    User user
    IdentityFile /path/to/key
Host srv-*
    User user
    IdentityFile ~/.ssh/id_rsa.myhost
    ProxyCommand ssh MyHost -W %h:%p
```
rbenv installに失敗する

# 現象
掲題の通り

```
$ rbenv install 2.4.1
Downloading ruby-2.4.1.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.1.tar.bz2
error: failed to download ruby-2.4.1.tar.bz2

BUILD FAILED (CentOS release 6.7 (Final) using ruby-build 20170405-4-g365dd1f)

rbenv: version `2.4.1' not installed
```

## ダウンロードに失敗している。

curlでダウンロードしているようなので、普通に試してみる。

```
$ curl -v -O https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.1.tar.bz2
* About to connect() to cache.ruby-lang.org port 443 (#0)
*   Trying 151.101.72.233... connected
* Connected to cache.ruby-lang.org (151.101.72.233) port 443 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
*   CAfile: /etc/pki/tls/certs/ca-bundle.crt
  CApath: none
* NSS error -12190
* Closing connection #0
* SSL connect error

curl: (35) SSL connect error
```

ふむ。

wgetはどうだろう。

```
$ wget https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.1.tar.bz2
--2017-05-11 13:24:53--  https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.1.tar.bz2
cache.ruby-lang.org をDNSに問いあわせています... 151.101.72.233
cache.ruby-lang.org|151.101.72.233|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 12571597 (12M) [application/octet-stream]
`ruby-2.4.1.tar.bz2' に保存中

100%[======================================================================================================================================================>] 12,571,597  22.3M/s 時間 0.5s    

2017-05-11 13:24:53 (22.3 MB/s) - `ruby-2.4.1.tar.bz2' へ保存完了 [12571597/12571597]
```

wgetは問題ない。

ググると、PROXYが関係しているという内容が見つかるが、wgetが問題なく動作するので、ちょっと理由が違う気がする。

検索ワードを変えて検索を続けていると以下のQiita記事が見つかり、これで解決しました。
ありがとうございます。

http://qiita.com/shunsuke_takahashi/items/a1c3655584530c76fbe0

curlのバージョンが古いと証明書が見つからない（ `CApath: none` の部分）らしい。
ただ気になるのは、問題なく動作する環境もあるんだよなぁ。

この先は余裕がある時に調べれたら調べる（放置するパターンの奴）
Swift3.0 String -> Int 文字列を数値に変換する

# Swift3.0 文字列を数値に変換

文字列を数値に変換する方法が変更になったらしいあまり情報がないので載せておきます。

### swift2* 以前？

かきの方法にて変換を行なっていたらしい、

```
let str: String = "123"

let num: Int = str.toInt()

print(num)// 123

```

と上記のような感じで変換でしたがこれからは下記になりました。

```

let str: String = "123"
let num: Int = Int(str)

print (num)// 123

```

上記に変更

こちらで一括で変換することにより別の型でも変換することができ、

より 簡潔にかけるということなのかも
git stashを使う


ひとまず今の作業をどっかにやっておきたいときに使えるgitコマンド。

#作業内容をとりあえずどっかにやる

```
git stash
```

コミットされていない内容がこれでどこかにやられるので、pullしてもconflictしなくなる。

#pullした内容にどっかにやっていた作業内容を戻す

```
git stash pop
```

作業内容がpullしてきた内容と被っていたらconflictするので、conflictを解決する。

##注意点

このとき、mineがpullしたほうで、theirsがpopの内容になることに気をつける。
How to put VSTO Excel on desktop with clickonce

### Deploying an Office Solution by Using ClickOnce
https://msdn.microsoft.com/en-us/library/bb772100.aspx#Publish

###
```
C:\publish\Application Files\ExcelTemplate2_1_0_0_0>mage -sign ExcelTemplate2.dl
l.manifest -certfile code2017.pfx -pwd 
ExcelTemplate2.dll.manifest successfully signed

C:\publish\Application Files\ExcelTemplate2_1_0_0_0>cd ..

C:\publish\Application Files>cd ..

C:\publish>mage -update ExcelTemplate2.vsto -appmanifest "Application Files\Exce
lTemplate2_1_0_0_0\ExcelTemplate2.dll.manifest" -certfile "Application Files\Exc
elTemplate2_1_0_0_0\code2017.pfx" -pwd 
ExcelTemplate2.vsto successfully signed
```
Vue.jsの勉強会資料を作りました。

# 紹介

![spa-vue-1.png](https://qiita-image-store.s3.amazonaws.com/0/129176/1d23726d-db96-07f3-ba4f-96694fee3504.png)

社内勉強会でVue.jsの紹介をやりました。せっかくなので、Vue.jsとreveal.jsでのスライド作成を試みました。
意外と簡単に出来ましたので、共有させて頂きます。

# リンク
* ソースコード：https://github.com/c-cho/spa-vue  
* デモページ：https://c-cho.github.io/spa-vue

![spa-vue-2.png](https://qiita-image-store.s3.amazonaws.com/0/129176/23a6516a-c275-f410-de44-fc8661f741bc.png)

# 感想
* JavaScriptのコードなどもスライドに入れられるので、ライブコーディングがやりやすい。
* reveal.jsがスタイルをいっぱい定義してくれたので、CSSを設定しなくても見た目がかっこいい！（便利である一方、細かい調整が面倒くさくなる）
* vue-cliのデフォルトでは、アセットの場所がルート直下になりますので、ドメインの直下にホストしない場合、config/index.js内のassetsPublicPathを「'./'」に変更する必要がある
* スライドのページごとにコンポーネント化(vueファイル化)すれば管理しやすい（細分化しすぎた気もするが・・・）
Swift3でサーバーにある画像(URL)をUIImageとして描画する方法

[できた](https://off.tokyo/blog/%e7%94%bb%e5%83%8furl%e3%82%92uiimage%e3%81%a8%e3%81%97%e3%81%a6%e6%8f%8f%e7%94%bb%e3%81%99%e3%82%8b%e6%96%b9%e6%b3%95-swift3/)
VScode: Running the contributed command:'extension.node-debug.startSession' failed. が出たときの対処

# 症状
VScodeを利用していて、Running the contributed command:'extension.node-debug.startSession' failed.というエラーが発生し、デバッグが出来なくなった場合の対処方法

この症状はmac限定の様です。
私の場合は、macOS 10.12.4 VScode 1.12.1 で発生しました。

# 解決方法
launch.json の 各ランチ設定の項目の中に、  
> "protocol": "legacy",  

を追加すると動くようになります。

# よりベターな解決方法
launch.json の仕様がいろいろ変わっているので、一度削除してAutoで再作成しておくと良いかも知れません。
自分はテストとか30種類ほどのランチを作り込んでいるので、まだやっていません・・・
postcss-mixinsで出会った問題

cssnext には則らないけど、sass っぽく PostCSS を使いたかった。リポジトリにあるとおり、写経しているのに何故か postcss-mixins で引数が取れない。

# 怒られポイント

```define.mixin.css
@define-mixin my-mixin $some-var {
  some-prop: $some-var;
}
```
これだけでは `Undefined variable $some-var` と怒られてしまう。かといって、事前に宣言すれば良いわけでもないし、明らかに違う感。

# 怒られポイント（解決）
`postcss.config.js` で require する時に `{ silent: true }` を付与する。

```postcss.config.js
module.exports = {
  plugins: [
    ...
    require('postcss-simple-vars')({ silent: true }),
    ...
  ]
}
```

他、`postcss-simple-vars` を必要としている plugin も、この設定がなければ同様に怒られる。


# つまづきポイント
あろうことか、mixin の引数に与えている変数名を、mixin定義よりも前で定義していて、先勝ちになっていた。普通の感覚ではこれはなかなか気づかない。。

```example.css
.some-component1 {
  $some-var: value1;
  some-prop: $some-var;
}

@define-mixin my-mixin $some-var {
  some-prop: $some-var;
}

.some-component2 {
  @add-mixin my-mixin value2;
}
```
```yield.example.css
.some-component1 {
  some-prop: value1;
}
.some-component2 {
  some-prop: value1; /* <-- 引数がとれていない */
}
```

# つまづきポイント（応急処置）
mixin の引数名に mixin 名のプレフィクスを付与する意外に方法が見つからない。

```example.css.diff
- @define-mixin my-mixin $some-var {
-   some-prop: $some-var;
- }
+ @define-mixin my-mixin $my-mixin-some-var {
+   some-prop: $my-mixin-some-var;
+ }
```

# 所感
そもそも上記で示している例では、mixinを途中で定義しなければ良さそうですが、最初に変数群を読み込む設計も多いはず。この振る舞いを把握していなければ、そこで沼にはまること請け合いです。以上、sass っぽく PostCSS を使いたい人のぼやきでした。
Sassで@importを使ってファイルを分割する手順。

# そもそもSassとは？
CSSを効率的に書けるように、CSSの機能を拡張した言語です。
Sassを使うメリットは

- *CSSを簡単に書ける*
- *CSSの中で変数を使ったり、計算を行うことができる*

などがあります。

そんな便利なメリットを持つSassですが、特に大きなメリットとして、

- *複数のCSSファイルをまとめられる*

ことが挙げられます。

# Sassで複数のファイルをまとめる手順
## ①　ファイルの中でまとめる部分を決める。
ある一定の内容ごとにまとめられるところがないかを探します。

例)メニューバー、メインコンテンツ、送信フォーム...

また、一定の機能でまとめることもできます。

例)Sassで定義した変数、リセットCSS...

このように分割することで、コードが読みやすくなり、

後々コードに修正を加える時も、どこを見ればいいかわかりやすくなります。

特に複数人で開発する時はこういった風に、コードを分割して管理してあるのは重要になってくるのではないでしょうか。

## ②パーシャルファイルを作成する。

ではどのようにして管理するのか説明します。

styesheetsの中のファイルに注目してください。

![スクリーンショット 2017-05-11 13.11.56.png](https://qiita-image-store.s3.amazonaws.com/0/179221/6d2ea00e-377a-a95d-00f4-56f27d5f4ec0.png)




＿(アンダースコア)から始まっているファイルがあると思います(_group.scssなど)
*※今回は.scssの拡張子に関しては割愛します。*


これがパーシャルファイルです。

このように_(アンダースコア)から始まるファイルの中に分割したい内容を記述します。

# ③パーシャルファイルを読み込む

分割したパーシャルファイルをまとめるには

@importをつかいます。

@import "ファイル名";　とすることで読み込むことができます。

この時アンダースコアはとって記述するので注意してください。

全てapplication.scssの中に配置しました。

![スクリーンショット 2017-05-11 13.10.12.png](https://qiita-image-store.s3.amazonaws.com/0/179221/4ad86760-fed4-f985-90dd-2bbe7fd5e491.png)

これで全てパーシャルファイルが読み込めました。

Sassを使う場合はぜひ、この方法を使ってみてください。
4. K5 使うのに戸惑ったこと

このページは、
FUJITSU Cloud サービス K5 を使ってみる - Qiita
http://qiita.com/ynott/items/a256669c692625c5fd25
の「4. K5 使うのに戸惑ったこと」のページです。

一旦小休止で、ここまででK5 で戸惑ったことを書いておきます。

# 1. アカウントの管理が分かりにくい
(逆の意味で言うと細かな設定が可能という事でもあります)
K5 ポータルは、IaaSとPaaSの入り口とユーザー管理を担います。

一番最初にK5で作ったアカウントは契約アカウントなので、IaaSとかPaaSで使うときに制限があります。
＃サービスに申し込みができないなど。

別途、管理アカウントを作成する必要があります。
ドキュメントの場所も謎です。こちらになります。

FUJITSU Cloud Service K5 ポータルユーザーズガイド
https://k5-doc.jp-east-1.paas.cloud.global.fujitsu.com/doc/jp/service_doc.html

グループとアカウントのロールとか分かってないと、
「おっかしいなぁ、なんでこれ登録できないんだろう」とかなっちゃいます。

IaaS側のユーザー管理については、
https://k5-doc.jp-east-1.paas.cloud.global.fujitsu.com/doc/jp/iaas/document/k5-iaas-function-manual.pdf
p.239から見て下さい。

PaaS側は、ユーザー管理というか

ざっくりした理解ですが、
![image.png](https://qiita-image-store.s3.amazonaws.com/0/15176/8e8b86b3-c131-9bfb-3cb5-d95c667730cf.png)
こんな感じだと思えばいいでしょう。

# 2. ブラウザーのバックボタンとかエラーが出る

![image.png](https://qiita-image-store.s3.amazonaws.com/0/15176/af8b4e0d-9ebf-3713-648d-9c8b45227fdd.png)

これがでると、恐らくセッションが切られてしまっていて再度最初からログインし直しです。

# 3. IaaSの仮想インスタンスを作る前に

最低限、必要な作業がいくつかあるので注意しましょう。
## 3-1. キーペア作成
　　1つキーペアを作っておきましょう。
## 3-2. 内部ネットワーク作成
　　内部ネットワークを1つ作っておきましょう。
　　サブネットは指定しましょう。
　　内部ネットワーク設定は1回作ると修正できません、注意しましょう。

https://www.youtube.com/watch?v=rHGzkoxT0Ww
が一連の流れが動画で解説されているので見ておくとよいと思います。
Javaの勉強 - 4

# 変数に文字列を入れる
文字列用の変数定義は「String」

気を付けるのは
・先頭のSが大文字
・変数に入れるときは文字列の前後を「"」で囲む
くらいかな？

いつもの基本形に「String」を追加する。

```java:Yomogi.java
public class Yomogi{
	public static void main(String[] args){
		String s;
		s = "はろーわーるど";
		
		System.out.println(s);
	}
}
```

実行

![pic007.JPG](https://qiita-image-store.s3.amazonaws.com/0/179949/7e64c819-6202-9a54-793a-e0a426c3277e.jpeg)

このくらいのことだと、printlnの中に文字列を直接書いても同じだけど
このあとのキーボードから入力するための準備としてやってみた。

# キーボードからの入力
キーボードから文字列を入力する。
基本形を発展させた新・基本形をキーボード入力の基本形として丸覚えする。

```java:Yomogi.java
import java.io.*;

public class Yomogi{
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		String s;
		s = br.readLine();
		
		System.out.println(s);
	}
}
```

基本形から追加された部分は
・import java.io.*;
・throws IOException
・BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
・br.readLine()
かな。

「br.readLine()」部分でキーボードから入力されて
変数sに文字列を入れるといったところか。

これをキーボード入力のためのテンプレってことで
いったん頭に叩き込んでおく。

実行

![pic009.jpg](https://qiita-image-store.s3.amazonaws.com/0/179949/6291ee54-5637-5153-aec1-a80cfe378f34.jpeg)

この状態から、キーボードで「test」と入力して

![pic010.jpg](https://qiita-image-store.s3.amazonaws.com/0/179949/80d60f81-eeac-f859-3384-63f56d2b2c10.jpeg)

Enter

![pic008.JPG](https://qiita-image-store.s3.amazonaws.com/0/179949/24d9d575-bf76-cfb6-fa68-8371ec757a34.jpeg)

入力した文字列と同じものが表示されたのでOK。

# キーボードから入力された数字を数値化する
キーボードから数字を入力しても、数値ではなく文字列として扱われる。
なので、プログラム内で計算したりするために数値化する。

・Integer.parseInt()を使って数値に変換する

キーボード入力の基本形に「Integer.parseInt()」を追加する

```java:Yomogi.java
import java.io.*;

public class Yomogi{
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int a;
		String s;

		s = br.readLine();		
		a = Integer.parseInt(s);
		
		a = a + 5;
		
		System.out.println(a);
	}
}
```

・キーボードから入力された数字(文字列)を変数sに入れる
・変数sを「Integer.parseInt(s)」して数値化して、変数aに入れる
・aに5足して、出力する

実行

![pic011.jpg](https://qiita-image-store.s3.amazonaws.com/0/179949/8dcce79d-46b1-1273-d744-78b5be15a19b.jpeg)

想定通りになったので無事に文字列⇒数値への変換が完了。

今回は↓のように、文字列の**入力**と**数値化**を別々の行で実行したけど

```
int a;
String s;
s = br.readLine();       // 入力
a = Integer.parseInt(s);      //数値化
```

↓こうすれば、**数値化**の中に**入力処理**を入れてまとめられるっぽい

```
int a;
a = Integer.parseInt(br.readLine());
```

文字列の変数定義も省略できるし、
状況によってはこっちのほうがいいかも。

小数点を含む文字列を数値化したいときは

```
Double.parseDouble()
```

いつか使うことがあるかもしれない。

今回はココまで。
LANGやPYTHONIOENCODINGを設定してもUnicodeDecodeErrorが出る時の更なる確認ポイント


はじめに
========

私はPythonを使い始めて10年以上経つのですが、未だに`UnicodeDecodeError: 'ascii' codec can't decode`で1時間以上悩んでしまったので、その時のメモです。

直接の解決に至ったのは https://ota42y.com/blog/2015/06/03/linux_local/ のおかげでした。ありがとうございました。

Version
=======

* Dockerの公式コンテナの `python:3.5.3` 
	* OS: Debian GNU/Linux 8 
	* Python 3.5.3

UnicodeDecodeErrorが出た時の確認ポイント
===================

症状
--------
```python
print(open("utf8.txt", "rt").read())
```

みたいなコードがあって、`utf8.txt`にはUTF8のマルチバイトな文字があるとします。

```
UnicodeDecodeError: 'ascii' codec can't decode...
```

というエラーが出ます。

* 環境変数
	* LANG: `ja_JP.UTF-8`
	* PYTHONIOENCODING: `utf-8`

です。経験上、この設定にしておくとあまり問題がおきませんでした。
それでもエラーが出るので悩んでいました

確認ポイント
----------

`locale -a`

を実行してみます。
Dockerの公式コンテナの `python:3.5.3` では

```
C
C.UTF-8
POSIX
```

と表示されます。
そうです。`ja_JP.UTF-8`がないのです。
そこで、 `LANG=C.UTF-8` として再実行するとちゃんとエラーもなく処理されました。

しかも、`LANG=C.UTF-8` は Dockerの公式コンテナの `python:3.5.3` ではデフォルトの設定なのでした。
つまり、余計な環境変数をセットしたことによってエラーを引き起こしていたというわけでした。。。

さいごに
=======

雰囲気で環境変数をセットしてはいけないという悲しい例でした。
『Q01 １０進数で回文』10進数で回文プログラマ脳を鍛える数学パズル

一日一題以上やって行こうと思っています（Ruby on Rails チュートリアルの息抜き）

書籍の回答がRubyらしくなかったのでやってみる。

#10進数、2進数、8進数のいずれも回文になる10進数の10以上で最小の値と求めよ。（引用：プログラマ脳を鍛える数学パズル シンプルで高速なコードが書けるようになる70問）

問題を精査すると、調べる範囲が狭まっていくので良い問題だなと思ったのですが、最小値を見つけるためなので、このようにしてしまった。

```kaibun.rb
(11..100000).each { |n|
  if n.to_s == n.to_s.reverse &&
     n.to_s(8) == n.to_s(8).reverse &&
     n.to_s(2) == n.to_s(2).reverse
    puts n
  end
}
```

**気付き**
2進数では奇数はあり得ないなど、事前にふるいにかけることで計算量を減らすこと重要。

**to_sメソッド使わない場合**
10進数ー＞2進数チェックって、こんな感じにしか書けんかった。

```
def decimal_to_binary_check(n)
  a=[]
  a<<0 if n ==0
  while(n>0)
    if n!=0
      a<<n%2
      n=n/2
    end
  end
a==a.reverse
end
```
Azure cli でマシンサイズを変更する時のメモ

# 概要

Azure cli で仮想マシンのサイズを変更したいときは、以下をみればよい。

* [Azure CLI 1.0 を使用して Linux VM のサイズを変更する方法 | Microsoft Docs](https://docs.microsoft.com/ja-jp/azure/virtual-machines/linux/change-vm-size-nodejs)

このときの、オプションについてメモ

# 結論

`--enable-boot-diagnositcs` と　`--boot-diagnostics-storage-uri` は、指定しなくても良い。

ただし、外すと何がおこるか、ついていると何ができるのかを理解しておくこと

# 実行したこと、調べたこと

最後の方に、

```
azure vm set -g myResourceGroup --vm-size <new-vm-size> -n myVM  \
    --enable-boot-diagnostics
    --boot-diagnostics-storage-uri https://mystorageaccount.blob.core.windows.net/ 
```

という部分があるが、[ブート診断](https://azure.microsoft.com/en-us/blog/boot-diagnostics-for-virtual-machines-v2/)がいらなければ、指定しなくてもよいようだ。
また、ストレージアカウントは、当たり前だが、自分のものをしていすること。
あと、このブート診断に使えるストレージアカウントかも確認しておいたほうがよい。

# 参考

Azure CLI 2.0 の場合

* [Azure CLI 2.0 を使用して Linux VM のサイズを変更する方法 | Microsoft Docs](https://docs.microsoft.com/ja-jp/azure/virtual-machines/linux/change-vm-size)
bundle時にgitプロトコルじゃなくてhttpsを使うようにする件

# githubと通信する時にhttpsを使おう

bundler 1.13.0から、Gemfileのbundleをするときにhttpsを使わないとWarningが出るようになりました。

まあいいやと放置してたんですが、他メンバーとのGemfile.lockに差分が出てうざいので修正しました。
(:httpsより:gitの方がそれっぽいから:gitのが好きなんだけど！！)

# 主なエラー

主にbundleしたときなどに、Gemfile.lock内に以下のようなremote先があると怒られます。

``` Gemfile.lock
remote: git://hogehoge
```
https通信じゃないので駄目よ！という。


# 対応方法

以下のようなコマンドを普通にターミナル上でうつことでhttps化できるそうです。

```
bundle config github.https true
```

`bundle config` でbundleするときの設定をいじれます(正直あんまりいじったことない汗)。
上記のようなコマンドをちょちょいとうつと、https化できます。
念のためbundle configなどで確認しておいたほうがいいかも。

あ、あと、これの後に、必ずbundle installしなおしてください。

# 参考
※ [bundler 1.13.0でGemfileに`:github`... | 日々雑記](http://y-yagi.tumblr.com/post/150244664010/bundler-1130%E3%81%A7gemfile%E3%81%AB-github)
MacでPDO使った時にSQLSTATE[HY000] [2002] No such file or directoryと出る場合

MacでPDOを使ってDBに接続しようとした時、下記エラーが出た。

```
SQLSTATE[HY000] [2002] No such file or directory
```

ググったら `php.ini` に `mysql.sock` のパスを教えてあげなきゃダメだと出たので試したが変わらなかった。
http://www.mogumagu.com/wp/wordpress/archives/1198

なんでだろうなぁと思いながら勘で PDO のインスタンス化時に `mysql.sock` のパスを渡したらエラーが消えた。

```php
$pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8;unix_socket=/tmp/mysql.sock', 'username', 'password');
```

そういえば FuelPHP も Mac の場合は DB 設定時に `mysql.sock` のパスが必要だった気がする、何故 Mac だけ必要なのか分かる人いたら教えてください。
NVIDIA FCAT導入までやる

NVIDIAからVR向け解析ツールが出ていて気になって導入くらいまではやったのでめも

http://www.geforce.com/hardware/technology/fcat
http://jp.gamesindustry.biz/article/1703/17031701/

## 雑概要

GPUの出力をキャプチャ対象にするということでGPUメーカーならではなんではないかなという印象です。そもそもVRでのレンダリングは高いパフォーマンスを出すための工夫が凝らされてます、と言いつつそのあたり詳細語るレベルにないのでスルーして、公式ドキュメント最初らへんまでをやってみます

引用しますと以下の詳細がより精度高く見ることができる模様です

- Total frametime
- Application dropped frames
- Runtime warp dropped frames
- Asynchronous Space Warp (ASW) synthesized frames


http://international.download.nvidia.com/geforce-com/international/pdfs/NVIDIA_FCAT_VR_Reviewer's_Guide_Public.pdf

## 環境

Windows10
GTX980
HTC Vive

## 準備

公式の[Downloads](http://www.geforce.com/hardware/technology/fcat)からzipダウンロード
解凍すると `FCAT Analyzer` と `FCAT Capture` がありそれぞれ解析後のデータをヴィジュアライズするツール、解析データのキャプチャツールのようです

![fcat1.PNG](https://qiita-image-store.s3.amazonaws.com/0/15618/cd0d50a0-5359-85dd-9c55-bfbd6a64fbce.png)

### キャプチャ

Captureの方はフォルダ潜ってexe実行すると完結なGUIが表示されるので解析データの格納場所やキャプチャタイミング、頻度を指定します

![fcat2.PNG](https://qiita-image-store.s3.amazonaws.com/0/15618/95cd5e73-8a44-e20f-a1bc-c0a2ae7bd40b.png)

### ヘッドマウント

公式にはViveとOculus Riftで項目が分かれていますが今回はViveなのでSteamVRの設定を2箇所確認
ダイレクトモードの常時再投影のチェックを外す

![fcat3.PNG](https://qiita-image-store.s3.amazonaws.com/0/15618/99566d33-f436-62b3-695a-bfd00a2e5ff4.png)

パフォーマンスの非同期再投影を許可のチェックを外し、インターリーブ再投影を許可するのチェックを入れる

![fcat4.PNG](https://qiita-image-store.s3.amazonaws.com/0/15618/879ab485-b58f-345c-6602-9b90cced2dcf.png)

### インストール

最後にPowerShellから`Capture\Release\Install.cmd`実行して必要なbatが実行されたら再起動

キャプチャまではこれで完了で、キャプチャ情報の描画はpyqtを使ってるぽいです。なので公式通りにAnacondaで突っ込みました。PowerShellほとんど使ったことなかったのですが、pythonインストール程度であれば別段問題ありませんでした。普段利用してる場合は普通に3系でpip通して必要ライブラリインストールすれば大丈夫なのでしょう

[Anaconda公式](https://www.continuum.io/downloads)からpythonインストール
PowerShellから `pip install`

![fcat5.PNG](https://qiita-image-store.s3.amazonaws.com/0/15618/b1834aa6-c187-f0dd-babe-266603b9dc67.png)

以後はFCAT_Captureを立ち上げた状態で解析したいVRアプリ起動して`Scroll Lock`(デフォのキャプチャ開始ホットキー)でキャプチャ

## 解析

### ディレクトリ

キャプチャ後の解析は、一定のディレクトリ構成考えたが推奨らしいです
`C:\FCAT\Data\<GPU>\<GAME>\<SETTINGS>\<OTHER>` とのことなので似たような構造作ってデータ配置しました

![fcat6.PNG](https://qiita-image-store.s3.amazonaws.com/0/15618/556be798-8aff-ea95-059a-2b37959d658a.png)

### 見る

Analyzer以下のFCAT.py実行するとGUI立ち上がるので作成した`Data`フォルダごとドラッグ、無事視覚化にたどり着きました

![fcat7.PNG](https://qiita-image-store.s3.amazonaws.com/0/15618/bb3eeb73-fd85-fd8d-c842-1db2583de961.png)

プロットしたグラフ上でリージョンというので範囲指定して細かく見ることもできるようです

## 所感

現状VRのパフォーマンスチェック手段はゲームエンジンのProfiler使うくらいしかなかったので、GPUメーカーからこういったツールが一般向けに出てきてもらえるのは良いという感想でした

フレームレートは酔い等にもつながるといわれているため特に普段から気にしている訳ですが、TimeWarpといった技術の詳細なプロファイリングが手軽になるのは開発者としては助かる限りだと感じます
【Rails】レビュー前 確認チェックシート

レビューの際によく指摘される点をまとめてみました。

## リンク先はPrefixで書く
リンク先を URI Patternで書いていませんか？ Prefixで書きましょう。Prefixは`（bundle exec） rake routes`で確認できます。

例：
× `redirect_to　"/groups/#{@group.id}/messages"`
○ `redirect_to group_messages_path(@group)`

## renderを使う
レコード保存失敗時など、同じページに戻したい時は`redirect_to`ではなく`render`を使うことで処理を早めることができます。ただし、renderはviewを呼び出すだけでコントローラーは経由しないので、**renderを使う際は呼び出すviewで使われる変数を定義する**必要があります。

例：indexアクションのビューに戻る場合
`@messages = @group.messages`などindexにある変数の定義
`render :index`


## 部分テンプレートを使う
「ページの左側には常にグループのリストを表示する」など、viewの一部分に同じものを表示する場合は、部分テンプレートを設定し、renderで呼び出すようにすると便利です。また、配列に同じ形式の複数のオブジェクトが入っている場合、**collection**を使うと、eachメソッドと同じことができます。

例：

````haml:view/groups/content-left
= render partial: 'groups/group-list', collection: @groups, as: :group`
````

````haml:view/groups/_group-list
= link_to group_messages_path(group) do
  .groups
    %p.groups__name
      = group.name
    %p.groups__message
      - if group.messages.present?
        = group.messages.last.body
````

## 同じ変数はbefore_actionにまとめる
controllerで同じ変数を複数のアクションで使う場合、アクションごとに変数を定義すると変更があった場合にそれぞれ修正するのが面倒ですよね。同じ変数はbefore_actionにまとめましょう。

例：

````ruby:messages_controller.rb
 before_action :index_variables, only: [:index, :create]

 def index_variables
    @groups = current_user.groups.order(created_at: :DESC)
    @group = Group.find(params[:group_id])
    @users = @group.users
    @messages = @group.messages.order(created_at: :DESC).includes(:user)
  end
````

## rollbackしてテーブルの内容を変更する
ターミナルで`rails g migration AddImageToMessages image:string`などと入力すると、テーブルに新しいカラムを追加することだできますが、後からテーブルを確認する時に分かりづらいですね。`rake db:rollback`してから元のファイルを変更し、`rake db:migrate`するとようにしましょう。

## 外部キーはreferencesとforeign_keyで設定する
外部キー（他のテーブルのid）のカラムが必要な場合は`references`で関連づけましょう。また、オプションに`foreign_key`を記述することで、クラス名から外部キーの名前を自動的に作成してくれます。

例：group table と user table を外部キーに設定したい場合

````ruby:
class CreateMessages < ActiveRecord::Migration[5.0]
  def change
    create_table :messages do |t|
      t.text :body, null: false
      t.string :image
      t.references :group, foreign_key: true
      t.references :user, foreign_key: true
      t.timestamps
    end
  end
end
````

## 適切な位置にgemを記述する
gemを導入する場合、どの環境に必要なのかを考えて適切な場所に記述しましょう。
Fasta配列を分割する

blastでバカパラしたいときとか、でかいmulti fastaファイルを適当に分割したい時に使うやつ
絶対もっとシンプルな書き方ある

```python:split.py

#!/usr/bin/env python
#coding: UTF-8
from Bio import SeqIO
#ファイル何個に分割したいか
num = 5
fastaname = "genes.faa"
#配列数の取得
seqnum = len(list(SeqIO.parse(open(fastaname), "fasta")))

#それぞれのファイルあたりの配列数
filenum = int((seqnum-seqnum%num)/num)
outList = []
#出力ファイル作成
for x in range(1,num+1):
	w = open(str(x) +".fasta","w")
	outList.append(w)
#ファイルの書き込み
for i,record in enumerate(SeqIO.parse(open(fastaname),"fasta")):
	#print (record)
	tmpnum = i+1
	if tmpnum >= filenum * num:#端数の扱い
		filenumber = int((tmpnum-tmpnum%filenum)/filenum)-1
	else:
		filenumber = int((tmpnum-tmpnum%filenum)/filenum)
	outfile = outList[filenumber]
	outfile.write(">" + str(record.id)+ "\n")
	outfile.write( str(record.seq) + "\n")
#出力ファイルのclose
for out in outList:
	out.close()
```
日本の電話番号を操作する Go package「jptel」を作成しました


## 概要

こちらの [gist](https://gist.github.com/kennyj/4966002) に触発され、日本の電話番号をよしなに操作する package を Go で作成しました。

- https://github.com/zenwerk/jptel

## 使い方
- インストール

```
$ go get https://github.com/zenwerk/jptel
```

### Normalize関数
入力された電話番号を `市外局番-市内局番-加入者番号` の形式で返します。
全角・半角混じりでも問題ありません。

```go
number, _ := jptel.Normalize("0123456789")
fmt.Println(number) // 0123-45-6789

number, _ = jptel.Normalize("０１２３４５６７８９")
fmt.Println(number) // 0123-45-6789

number, _ = jptel.Normalize("0９０-１23456ー7８")
fmt.Println(number) // 090-1234-5678
```

### Split関数
入力された電話番号を市外局番・市外局番・加入者番号に分割した構造体を返します。
全角・半角混じりでも問題ありません。

```go
result, _ := jptel.Split("0312345678")
fmt.Println(result.AreaCode)       // 03
fmt.Println(result.CityCode)       // 1234
fmt.Println(result.SubscriberCode) // 5678

result, _ = jptel.Split("０９０９８７６５４３２")
fmt.Println(result.AreaCode)       // 090
fmt.Println(result.CityCode)       // 9876
fmt.Println(result.SubscriberCode) // 5432

result, err = jptel.Split("０ー１23４５6-7８9")
fmt.Println(result.AreaCode)       // 0123
fmt.Println(result.CityCode)       // 45
fmt.Println(result.SubscriberCode) // 6789
fmt.Println(result.Format())       // 0123-45-6789
```

### Validate関数
入力された電話番号が正しいかどうか判別し error か nil を返します。
全角・半角混じりでも問題ありません。

```go
err = jptel.Validate("090-1234-5678") // nil
if err != nil {
	fmt.Println(err) // nil
}

err = jptel.Validate("０３-１２34-５６78") // nil
if err != nil {
	fmt.Println(err) // nil
}

err = jptel.Validate("0-90-12345678") // error
if err != nil {
	fmt.Println(err) // telephone number is invalid
}

err = jptel.Validate("000-1234-9876") // error
if err != nil {
	fmt.Println(err) // telephone number does not match any area code
}
```

## 電話番号のマスターデータ
市外局番のデータは[総務省のサイト](http://www.soumu.go.jp/main_sosiki/joho_tsusin/top/tel_number/number_shitei.html#kotei-denwa)からダウンロードできるExcelから、[pythonのスクリプト](https://github.com/zenwerk/jptel/blob/master/generate_master_data.py)で自動生成しています。

網羅しているつもりですが、抜けや例外的な事例があれば github の issue などで指摘いただければ対応したいと思います。

## その他
Python版も作りました

- https://github.com/zenwerk/jptel-py

## まとめ
ウェブアプリケーションなどで電話番号を入力するケースはままあると思いますので、そういった場面で便利に使ってもらえれば幸いです。
もうgulpはいらない！フロントエンド初心者のためのpingy CLI

# Pingy CLI

「フロントエンドの開発をしたい…でもgulpfileをガッツリ書けるほどの技術もないし…」
という方にはピッタリじゃないでしょうか。

**Pingy CLI** というフロントエンドビルドツールを発見しました。

> Pingy CLI: The simple Frontend Build Tool
https://pin.gy/cli/

> Gulp and Grunt and other heavyweight build tools are great for complicated build workflows. Sometimes you want something simpler that doesn't take lots of configuration to get up and running.
That's Pingy CLI.
> （日本語訳）GulpとGruntなどのヘビーウェイトビルドツールは、複雑なビルドワークフローに最適です。時には、起動して実行するために多くの設定を必要としない単純なものが欲しい場合もあります。
それがPingy CLIです。


フロントエンドビルドツールといえば、言わずと知れた `gulp` や `grunt` などがありますが、
**Pingy CLI** はそれらに頼らないでフロントエンドの開発ができるツールです。

## インストール

```
$ npm install -g @pingy/cli
```

## 使い方

### 1. initialize

```
$ pingy init
```



`pingy  init` すると、Pingyが「どんな技術を使いますか？」と質問してきます。

![SnapCrab_NoName_2017-5-11_11-57-47_No-00.jpg](https://qiita-image-store.s3.amazonaws.com/0/1808/d3469f6e-709d-2474-c2c9-64612b03ae7f.jpeg)

![SnapCrab_NoName_2017-5-11_11-57-58_No-00.jpg](https://qiita-image-store.s3.amazonaws.com/0/1808/835adc32-490c-c0c7-1f68-921aaac741bc.jpeg)

![SnapCrab_NoName_2017-5-11_11-58-6_No-00.jpg](https://qiita-image-store.s3.amazonaws.com/0/1808/eb910fc0-cc18-80cb-0b16-3d2ed9516ad5.jpeg)

質問に答えたら、ディレクトリに以下のファイルが作られます。

```
.
|-- index.html
|-- node_modules/
|-- package.json
|-- scripts
|   `-- main.js
`-- styles
    `-- main.scss
```

（注意 この場合は上記の質問にHTMLとSCSS、JSを指定しています）

### 2. develop

```
$ pingy dev
```

このコマンドを入力すると、ウェブサーバーが起動し、ブラウザで画面を確認しながら開発を行うことができます。
しかも、ファイルを編集し上書きするとブラウザが更新する **livereload** 機能もついています。

上記の質問にSCSSやCofeeScriptを設定すると、自動的にコンパイルもしてくれます。
**何もgulpfileなどのタスクランナーは書いていないのにです！**

### 3. export

```
$ pingy export
```

開発が終わったら、このコマンドを打つことによって、`dist/` ディレクトリにコンパイルされ、且つ圧縮されたCSSやJSファイルが入ります。
export後のディレクトリ構成は以下のようになります。

```
.
|-- dist
|   |-- index.html
|   |-- index.src.html
|   |-- package.json
|   |-- scripts
|   |   |-- main.js
|   |   |-- main.js.map
|   |   `-- main.src.js
|   `-- styles
|       |-- main.css
|       |-- main.css.map
|       `-- main.scss
|-- index.html
|-- node_modules/
|-- package.json
|-- scripts
|   `-- main.js
`-- styles
    `-- main.scss
```

### 4. deploy

あとはデプロイ先のサーバーにgitなどでデプロイするだけです！

## Pingyのメリットデメリット

メリット：

* gulpfileなどのタスクランナーファイルを書かなくても良い
* サポートしている技術が多い
* 使い方が明確でわかりいやすい

デメリット：

* 簡単なツールを目指しているため、gulpfileなどをガンガン書いている人には向かない
* 自分で設定ファイルを書かないので、かゆいところに手が届かない

公式サイトにPingy CLIとgulp/gruntの違いが書いてあります。
![SnapCrab_NoName_2017-5-11_12-20-30_No-00.jpg](https://qiita-image-store.s3.amazonaws.com/0/1808/0dcc6e77-fce1-9356-0e58-d04a0bc664fb.jpeg)


個人的には **Pingy CLI** はとても使えるツールだと思います。
GitHub の Issues に独自のラベルを追加 / 編集 / 削除する方法

公式のヘルプに書いてあるんだけど、

https://help.github.com/articles/creating-and-editing-labels-for-issues-and-pull-requests/

どこからやるんだったかすぐ忘れてしまうからメモ。

1. イシューの一覧を開く。個別のページじゃなくて一覧の方ね。
2. 一覧の上にある `Filters` フォームの右に `Labels` ボタンがあるからこれを押す。
3. 具合のいいよう追加編集削除する。

一覧の上にあることさえ覚えておけばいい話なんだけど、新しいイシューを書いてるときにそこからラベルを追加しようとして「ない！どこだっけ！」となるので、覚えるために書きました。
Ubuntuでファイルサーバーをたてる（Samba）

ubuntu 14.04 及び 16.04 でのファイルサーバー構築メモです

#### インストール

```bash
$ sudo apt-get -y install samba 
```

#### 共有するディレクトリの作成

```bash
$ sudo mkdir /home/share
$ sudo chmod 777 /home/share 
```

#### ファイルサーバーの設定

```bash
$ sudo nano /etc/samba/smb.conf
```

```python:smb.conf
# 25行目：以下2行追記
unix charset = UTF-8
dos charset = CP932

# 30行目：必要があれば変更 (Windows側に合わせる)
workgroup = WORKGROUP

# 51行目：コメント解除しアクセス許可IP追記
interfaces = 127.0.0.0/8 10.0.0.0/24

# 58行目：コメント解除 & 追記
bind interfaces only = yes
map to guest = Bad User

# 最終行に追記
[Share]# 任意の共有名称を指定
   path = /home/share# 共有フォルダ指定
   writable = yes# 書き込みOK
   guest ok = yes# ゲストユーザーOK
   guest only = yes# 全てゲストとして扱う
   create mode = 0777# フルアクセスでファイル作成
   directory mode = 0777# フルアクセスでフォルダ作成
```

以下のコマンドでファイルサーバーを再起動します

```bash:@ubuntu16.04
$ sudo systemctl restart smbd
$ sudo systemctl enable smbd # 自動起動設定  
```

```bash:@ubuntu14.04
$ sudo service smbd restart 
$ sudo service smbd enable # 自動起動設定
```

これで、他のPCから `smb://"ip-address"` にアクセスすればファイルサーバーを使えます

>参考: https://www.server-world.info/query?os=Ubuntu_16.04&p=samba
タグまとめ > .NET Framework関連 (2017/05/11)

.NET Framework関連のプログラミングに関してのQiita記事を見るには、分断している記事を横断するなにかが必要に感じる。

### タイトル検索

[Title検索(.NET と FRAMWORK)](http://qiita.com/search?q=title%3A%22.NET%22+title%3A%22FRAMEWORK%22) 44件

### タグ検索

http://qiita.com/tags/.NET 523投稿
http://qiita.com/tags/.NETFramework 108投稿
http://qiita.com/tags/DotNetFramework 8投稿

[.NETタグ、.NETFrameworkタグ、DotNetFrameworkタグのOR検索](http://qiita.com/search?utf8=%E2%9C%93&sort=&q=tag%3A.NET+OR+tag%3A.NETFRAMEWORK+OR+tag%3ADotNetFramework) 601投稿

バージョン付
http://qiita.com/tags/.NETFramework3.5 1投稿

[タグシノニム](https://stackoverflow.com/tags/synonyms)欲しいです。

単純に".NET Framework"だけで検索すると、動作環境の記述にもひっかかり、欲しい情報にはたどり着きにくくなる。
scikit-learn で No module named '_bz2' というエラーがでる問題

## 前提

pyenv で python 3.X をインストールしていること


## エラー内容

```py3
Traceback (most recent call last):
  File "test.py", line 6, in <module>
    from sklearn.feature_extraction.text import TfidfVectorizer
  File "/home/vagrant/.pyenv/versions/3.4.3/lib/python3.4/site-packages/sklearn/__init__.py", line 57, in <module>
    from .base import clone
  File "/home/vagrant/.pyenv/versions/3.4.3/lib/python3.4/site-packages/sklearn/base.py", line 12, in <module>
    from .utils.fixes import signature
  File "/home/vagrant/.pyenv/versions/3.4.3/lib/python3.4/site-packages/sklearn/utils/__init__.py", line 18, in <module>
    from ..externals.joblib import cpu_count
  File "/home/vagrant/.pyenv/versions/3.4.3/lib/python3.4/site-packages/sklearn/externals/joblib/__init__.py", line 122, in <module>
    from .memory import Memory, MemorizedResult
  File "/home/vagrant/.pyenv/versions/3.4.3/lib/python3.4/site-packages/sklearn/externals/joblib/memory.py", line 37, in <module>
    from . import numpy_pickle
  File "/home/vagrant/.pyenv/versions/3.4.3/lib/python3.4/site-packages/sklearn/externals/joblib/numpy_pickle.py", line 16, in <module>
    from .numpy_pickle_utils import _COMPRESSORS
  File "/home/vagrant/.pyenv/versions/3.4.3/lib/python3.4/site-packages/sklearn/externals/joblib/numpy_pickle_utils.py", line 12, in <module>
    import bz2
  File "/home/vagrant/.pyenv/versions/3.4.3/lib/python3.4/bz2.py", line 20, in <module>
    from _bz2 import BZ2Compressor, BZ2Decompressor
ImportError: No module named '_bz2'

```

## 解決策

ググると

```shell-session
$ sudo yum install bzip2-devel
```

で解決とあるんだけど、これをした上で、python そのものをインストールしなおす必要がある。

```shell-session
$ pyenv install 3.4.3
$ pyenv global 3.4.3
```

で動くようになる。