OmniAICreator/Qiita-1.07M huggingface dataset:
ReSharperの設定変更

ReSharperはとても便利ですが英語が苦手なので設定変更も一苦労。
個人的に変更した部分を今後のためにメモとして残します。

キーのショートカットの変更方法
---
Visualstudioのツールバーの[ツール]->[オプション]->[環境]->[キーボード]を選択。

よく使うショートカット
---
ReSharper.ReSharper_GotoText：検索機能。検索後+を押すと全検索を行うことができる。（ReSharper2016.2の新機能）


ifなどのコードブロックは同行ブレースにする
---
- 変更箇所  
![image](https://qiita-image-store.s3.amazonaws.com/0/93944/98ff5503-195e-30e0-7401-08b03240daf7.png)
  
- サンプル
```if (hoge == true) {
}
```


SerializeFieldと変数名を同行で記載する
---
- 変更箇所  
![image](https://qiita-image-store.s3.amazonaws.com/0/93944/953196be-3b0f-bffa-f544-5c38d7624d42.png)
  
- サンプル
[SerializeField] private Sprite changeSprite;
```

改行後の空白間隔の調整
---
![image](https://qiita-image-store.s3.amazonaws.com/0/93944/81ae41de-8bea-e82c-c600-8fa4b1a9e668.png)
chocolatey と windows10のパッケージシステム（たぶん今だけの話）

## 背景

+ Chocolatey を愛用してます
+ 今般 マシンの１台が Windows10 になったのを機に
+ [Windows 10 のパッケージ管理エコシステムについて整理する。](http://qiita.com/japboy/items/451cf30fd0d763d98ae6)
  などの記事を参考にして、
+ Install-Package コマンドで Chocolatey リポジトリにあるソフトのインストールを試みました、が、
+ ちゃんとインストールしてくれません。

## 現象と推測

+ c:/Chocolatey/lib  に当該パッケージに関連するフォルダが作られている、が、
+ その先には進まず、インストールは行われていない。
+ ためしに choco install コマンドでインストールすると、成功する。
+ c:/ProgramData/Chocolatey/lib が使われているらしい。
+ 環境変数 ChocolateyInstall にこのフォルダが設定されていて、それを参照していると思われる。


* いろいろ検索をしていて $env:ChocolateyPath に言及しているページを見つけて、ためしに
* 環境変数 setx ChocolateyPath c:/ProgramData/Chocolatey してみたら、
* Install-Package が成功した。
* おそらく、参照すべき環境変数名に関して、ChocolateyInstall とか CHocolateyPath だとか、
* 参照する側vsされる側の間で、混乱があったのではないかと推測する。
  （そういえば Chocolateyのプロジェクトの中だけでも一時混乱してたみたいだし）

## 解決策

+ ということで CHocolateyPath ChocolateyInstall の両方の環境変数を同じに設定しておけば、
+ 晴れて目的の動作はしてくれるようです。（取り急ぎまとめて情報、乱雑でごめんなさいね）
telnetにてメール送信


```
# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 ​www.hoge.co.jp​ ESMTP Postfix
helo localhost
250 ​www.hoge.co.jp​
mail from:root@localhost
250 2.1.0 Ok
rcpt to:abc@gmail.com
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
From:root@localhost
Subject:mailtest
This mail is test.
.
250 2.0.0 Ok: queued as DC80A3408054
quit
221 2.0.0 Bye
Connection closed by foreign host.
```
Redisの基本のキ（インストールから基本的コマンドについて）

##Redisとは
- インメモリのリモートデータベース。
- 非リレーショナルデータベース
- 5種類のデータ構造


##Redisのインストール・起動
```
[vagrant@vagrant-centos64 ~]$ sudo yum --enablerepo=epel install redis
vagrant@vagrant-centos64 ~]$ sudo /etc/init
init/    init.d/  inittab  
[vagrant@vagrant-centos64 ~]$ sudo /etc/init.d/redis start
Starting redis-server:                                     [  OK  ]
[vagrant@vagrant-centos64 ~]$ redis-cli
```

## 初期起動
```
[vagrant@vagrant-centos64 ~]$ redis-cli
redis 127.0.0.1:6379> set hello world
OK
redis 127.0.0.1:6379> get hello
"world"
redis 127.0.0.1:6379> del hello
(integer) 1
redis 127.0.0.1:6379> get hello
(nil)
```

## List
```
redis 127.0.0.1:6379> rpush list-key item
(integer) 1
redis 127.0.0.1:6379> rpush list-key item2
(integer) 2
redis 127.0.0.1:6379> rpush list-key item
(integer) 3
redis 127.0.0.1:6379> lrange list-key 0 -1
1) "item"
2) "item2"
3) "item"
redis 127.0.0.1:6379> lindex list-key 1
"item2"
redis 127.0.0.1:6379> lpop list-key
"item"
redis 127.0.0.1:6379> lrange list-key 0 -1
1) "item2"
2) "item"
```

## SET
```
redis 127.0.0.1:6379> sadd set-key item
(integer) 1
redis 127.0.0.1:6379> sadd set-key item2
(integer) 1
redis 127.0.0.1:6379> sadd set-key item23
(integer) 1
redis 127.0.0.1:6379> sadd set-key item
(integer) 0
redis 127.0.0.1:6379> smembers set-key
1) "item"
2) "item23"
3) "item2"
redis 127.0.0.1:6379> sismember set-key item4
(integer) 0
redis 127.0.0.1:6379> sismember set-key item
(integer) 1
redis 127.0.0.1:6379> srem set-key item2
(integer) 1
redis 127.0.0.1:6379> srem set-key item2
(integer) 0
redis 127.0.0.1:6379> smembers set-key
1) "item"
2) "item23"
```

## Hash
```
redis 127.0.0.1:6379> hset hash-key sub-key1 value1
(integer) 1
redis 127.0.0.1:6379> hset hash-key sub-key2 value2
(integer) 1
redis 127.0.0.1:6379> hset hash-key sub-key2 value2
(integer) 0
redis 127.0.0.1:6379> hgetall hash-key
1) "sub-key1"
2) "value1"
3) "sub-key2"
4) "value2"
redis 127.0.0.1:6379> hdel hash-key sub-key2
(integer) 1
redis 127.0.0.1:6379> hdel hash-key sub-key2
(integer) 0
redis 127.0.0.1:6379> hget hash-key sub-key1
"value1"
redis 127.0.0.1:6379> hgetall hash-key
1) "sub-key1"
2) "value1"
```

##ZSET

```
redis 127.0.0.1:6379> zadd zset-key 728 member1
(integer) 1
redis 127.0.0.1:6379> zadd zset-key 982 member0
(integer) 1
redis 127.0.0.1:6379> zadd zset-key 982 member0
(integer) 0
redis 127.0.0.1:6379> zrange zset-key 0 -1 withscores
1) "member1"
2) "728"
3) "member0"
4) "982"
redis 127.0.0.1:6379> zrangebyscore zset-key 0 800 withscores
1) "member1"
2) "728"
redis 127.0.0.1:6379> zrem zset-key member1
(integer) 1
redis 127.0.0.1:6379> zrem zset-key member1
(integer) 0
redis 127.0.0.1:6379> zrange zset-key 0 -1 withscores
1) "member0"
2) "982"
```
###参考
[Redis入門 インメモリKVSによる高速データ管理](http://www.amazon.co.jp/Redis%E5%85%A5%E9%96%80-%E3%82%A4%E3%83%B3%E3%83%A1%E3%83%A2%E3%83%AAKVS%E3%81%AB%E3%82%88%E3%82%8B%E9%AB%98%E9%80%9F%E3%83%87%E3%83%BC%E3%82%BF%E7%AE%A1%E7%90%86-Josiah-L-Carlson/dp/4048917358)

###更新履歴
2016/06/05 初版
awkゆとりな俺のための脳筋ワンライナー RDSシステムメンテナンス実行編


どうもこんばんは俺です。
`jq` なにそれおいしいの？ `--query` なにそれ21世紀?
という縄文土器すら作れない俺のためのシステムメンテナンス適用ワンライナー(RDS編)です。

- RDSメンテナンスアクションがペンディングになっているRDS Instanceに対してメンテナンスを即時実行する。
 
```
orenomac$ aws rds describe-pending-maintenance-actions |grep ResourceIden|awk '{print $2}' | \
xargs -I {} aws rds apply-pending-maintenance-action \
--resource-identifier {} --apply-action system-update --opt-in-type immediate \
--profile orenoawsaccount
```

`完`
PowerShell で並列処理を試してみた

[ブログからの転記](http://1bed.allright.life/?p=2084)

## 並列処理を試す

非同期処理より簡単に導入できそうだったので、PowerShell での並列処理を試してみました

### 例文での共通部分
---
3 秒スリープ後、引数で受け取った文字を表示します

```ps1
function Do-Process()
{
    param(
        [string]
        $text
    )

    $wait = 3
    Start-Sleep -Seconds $wait
    Write-Host "$text, Wait:$wait"
}
```

### 同期処理(通常の処理)
---
5 回 Do-Process を呼び出す(同期処理)

```ps1
function Test-Sync()
{
    foreach ($i in 1..5) {
        Do-Process "Process ${i}"
    }
}

$time = Measure-Command {
    Test-Sync
}
```

```text:実行結果
Process 1, Wait:3
Process 2, Wait:3
Process 3, Wait:3
Process 4, Wait:3
Process 5, Wait:3
15029.085
```

予定通り 15 秒かかっている


### 並列処理
---
5 回 Do-Process を呼び出す(並列処理)

```ps1
Workflow Test-Parallel()
{
    foreach -parallel ($i in 1..5) {
        Do-Process "Process ${i}"
    }
}

$time = Measure-Command {
    Test-Parallel
}
$time.TotalMilliseconds
```

```text:1回めの実行
Process 5, Wait:3
Process 3, Wait:3
Process 4, Wait:3
Process 2, Wait:3
Process 1, Wait:3
11181.2299
```

3 秒強の予定だったが 11 秒もかかっている...

```text:2回目の実行
Process 5, Wait:3
Process 4, Wait:3
Process 2, Wait:3
Process 1, Wait:3
Process 3, Wait:3
3754.6529
```

今度は予定通りの 3 秒強だったが最初は何故時間がかかるんだろう？

## 参考

* [PowerShell 3.0 の ForEach –parallel はマルチスレッドではない](http://blogahf.blogspot.jp/2012/12/powershell-30-foreach-parallel.html)

* [PowerShell による同期処理、非同期処理、並列処理 を考えてみる](http://tech.guitarrapc.com/entry/2013/10/29/100946)
ReactのチュートリアルをTypeScriptで書き直してrollupでバンドルしてみた

ReactのチュートリアルをTypeScriptで書いているのを見るとWebpackの例ばかりだったので、rollupでやってみた。

rollupを使用することでWebPackでやるよりもファイルサイズが小さくできる。
Reactのチュートリアルの場合は、およそ100分の1程度になった。

https://github.com/koba-ninkigumi/react-tutorial-typescript-rollup

こちらはReduxを使用するバージョン
https://github.com/koba-ninkigumi/react-tutorial-redux-typescript-rollup
Unity(Android)でFirebase対応をPlugin(PlayServicesResolverのaarファイル)で自動化する話

### 情報をコメント欄に頂きました(私は未確認)
- http://qiita.com/Dameppoi/items/c7f1f8371e4bac208c69#comment-9d2c80efb4e97484f8bb
- @csouls さんありがとう！

`Assets/Plugins/PlayServicesResolver/Editor/ResolverVer1_2.cs` を以下の様に修正すれば、AndroidManifestのproductIdが置換された状態で展開されるため、エラーを回避することができます。

修正前:

```csharp:ResolverVer1_2.cs
internal override bool ShouldExplode(string aarFile)
{
    return base.ShouldExplode(aarFile) ||
    aarFile.Contains("firebase-common") ||
    aarFile.Contains("firebase-measurement") ||
    !SupportsAarFiles;
}
```

修正後:

```csharp:ResolverVer1_2.cs
internal override bool ShouldExplode(string aarFile)
{
    return base.ShouldExplode(aarFile) ||
    aarFile.Contains("firebase-common") ||
    aarFile.Contains("firebase-core") ||
    aarFile.Contains("firebase-ads") ||
    aarFile.Contains("firebase-iid") ||
    aarFile.Contains("firebase-messaging") ||
    aarFile.Contains("firebase-measurement") ||
    !SupportsAarFiles;
}
```

## 以下、元の記事 
## 原題：(Unity(Android)でFirebase対応をPlugin(PlayServicesResolverのaarファイル)で自動化するのは無理)

### 簡単に結論
Androidに出力するUnityでのアプリ製作においてFirebaseを使おうと思った場合、aarファイルに含まれるAndroidManifestのplaceholderがgradleによって処理されないため、Unityから一発でapkファイルでの出力はできない。一旦Android Projectで出力したあとAndroid StudioでImportして手動であれこれしないと無理。

## 何が起きたか
PlayServicesResolver( https://github.com/googlesamples/unity-jar-resolver )で取得したfirebase関連のaarファイルを含めてBuildしたところ、AndroidManifestでエラーが出た。

## UnityのAndroid出力について
gradle(Android Studio)を経由しないとだめなものがひとつでも出てきた時点でPluginの機構は破綻するので、基本的にGoogle Android Projectとして出力して、いちいちAndroid StudioでImportしてやるしかない。このImportについて自動化する方法がないので、ここら辺は手動となる。

#### 参考
- http://hamken100.blogspot.jp/2016/05/google-play-services-ver30unityadmob.html
めざせpythonライブラリマスター （40）wordsegmentation

#【ライブラリ説明】
　英文を単語に分割

#【プログラム】
```py:wordsegmentation.py
# -*- coding: utf-8 -*-

from wordsegmentation import WordSegment

ws = WordSegment()

print ws.segment('universityofwashington')
# ['university', 'of', 'washington']

print ws.segment('thisisatest')
# ['this', 'is', 'a', 'test']

print ws.segment('thisisanURLcontaining123345and-&**^&butitstillworks')
# ['this', 'is', 'an', 'url', 'containing', '123345', 'and', '-&**^&', 'but', 'it', 'still', 'works']

print ws.segment('NoMatterHowLongThisTextisTextThisTextMightBe')
# ['no', 'matter', 'how', 'long', 'this', 'text', 'is', 'text', 'this', 'text', 'might', 'be']
```

#【参考サイト】
　[pypi](https://pypi.python.org/pypi/wordsegmentation/0.3.5)
　[github](https://github.com/eugenejw/WordSegmentation)
コマンドラインで「Sublime Text」

# コマンドラインからSublime Textを起動したい

## アプリに対してシンボリックリンクを貼る

```shell-session
ln -s /Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl /usr/local/bin
```

これで、こう

```shell-session
$ subl xxx.txt
```

Sublime Textでファイルが開ける
Elastic BeanstalkのtomcatでJVMのタイムゾーンにハマった

## Tomcatを使ったら時間がUTCに
デフォルトのElastic BeanstalkのTomcatをつかってJavaを実行すると、
時間がUTCの時刻になってしまい、JSTに変更する必要が発生した。。

## カスタムAMIでシステムクロックを日本時間に
システムクロックを日本時間に変更して、カスタムAMIを作成後、
Elastic Beanstalkで使えるようにしたが、、、、、、
dateコマンドでは日本時間になったのに、、、、、、、
javaではUTCになってしまう。。。。(´・ω・｀)
つまり、JVMのタイムゾーンがUTCのままになってしまっている。。。。

## Elastic Beanstalkの設定
EBの「Configuration」→「Software Configuration」→「JVM command line options」に
「-Duser.timezone="Asia/Tokyo"」と入力
こんな感じ↓
<img width="644" alt="JVM_command_line_options.png" src="https://qiita-image-store.s3.amazonaws.com/0/63733/891cbb50-8589-c7dc-1ff3-6153f134796f.png">
一番下の「Apply」をクリック
特にインスタンスの再デプロイ無しで設定が変更される！

完了！(๑•̀ㅁ•́๑)✧
めざせpythonライブラリマスター （39）goless

#【ライブラリ説明】
　並行プログラミングができる

#【プログラム】
```py:goless
# -*- coding: utf-8 -*-

import goless
import time

c1 = goless.chan()
c2 = goless.chan()

def func1():
    time.sleep(1)
    c1.send('one')
goless.go(func1)

def func2():
    time.sleep(2)
    c2.send('two')
goless.go(func2)

for i in range(2):
    case, val = goless.select([goless.rcase(c1), goless.rcase(c2)])
    print(val)
```

#【結果】
一緒のタイミングで出力されます。

```text:output
one
two
```

#【参考サイト】
　[pypi](https://pypi.python.org/pypi/goless/0.7.2)
　[github](https://github.com/rgalanakis/goless)
gyp hello world にゃ (ほぼ自分用)

# 流れ

1. ディレクトリ作成
2. gypファイル作成
3. 環境構築
4. ソース書き
5. ビルドと実行

## 1.ディレクトリ作成

<pre>
mkdir -p "proj dir"/{inc,src}
</pre>


## 2.gypファイル作成

<pre>
cd "proj dir"
vi proj.gyp
</pre>

proj.gyp の内容は下記

<pre>
{
    'targets': [
    {
        'target_name': 'a.out',
        'type': 'executable',
        'include_dirs': [
            'inc',
        ],
        'sources': [
            'src/main.cpp',
        ],
    },
  ],
}
</pre>

## 3.環境構築

<pre>
GYP_GENERATORS=ninja gyp proj.gyp --toplevel-dir=. --depth=0
</pre>


## 4.ソース書く

<pre>
vi src/main.cpp

#include <stdio.h>
int main() {
  printf("hello!!\n");
  return 0;
}
</pre>

## 5.ビルドと実行

<pre>
cd out/Default
ninja
./a.out
> hello!!
</pre>

# 参考

* [GYP をインストールする](http://qiita.com/skitaoka/items/390f23640ac3a9df64ee)

* ディレクトリ構造

<pre>
hello $ tree .
.
├── inc
├── out
│   └── Default
│       ├── a.out
│       ├── build.ninja
│       ├── gyp-mac-tool
│       └── obj
├── proj.gyp
└── src
    └── main.cpp
</pre>
Office 2016 64ビット系統でODBC データ ソース アドミニストレータを開くVBScript

OSはWindows10 Home 64bit +Office 2016 64bit で確認しました。

####32Bit

```VB:OpenODBC32.Vbs
CreateObject("WScript.Shell").Run "%windir%\SysWOW64\odbcad32.exe"
```
####64Bit

```VB:OpenODBC64.Vbs
CreateObject("WScript.Shell").Run "control.exe odbccp32.cpl"
```


　従来のコントロールパネルの開き方は64ビットの方が開いてしまいます。
　探してもなかったのですが、controlではなく環境変数から開くことができました。
　Windows10のコントロールパネルは非常に開くのが面倒ですが、Vbscriptを使用すると一発で開けるので大変便利です。
　上記スクリプトは、
<OL>
<li>メモ帳で新規ファイルを開き
<li>create…の行だけをコピーアンドペーストし
<li>名前を付けて保存で「すべてのファイル」を選び32bitなら、OpenODBC32.vbs、64BitならOpenODBC64.vbsで保存してください
<li>ファイルを保存する場所はドキュメントやデスクトップでいいです。間違ってもヒグマの出没する北海道の林に置いてはいけません。
</OL>
なおfilename.vbs.txtで保存されたときはファイル名の変更で.txtを消してください。警告が出ても気にしないでください。
　当方で実行しているのはDocumentsフォルダにSctなどというフォルダを作っています。もちろんMy Script などと派手にスペースを入れてもいいですが、その後のスクリプトを書く人生で確実に後悔をすることになります。
　また会社や学校のパソコンでは警告が出たりしますが、これ自体はコントロールパネルを開くだけなので安全です。もっとも設定はいじれないことが多いですが。
　しかしこの1行のコードはaccessでCSVファイルからテーブルを作るのにはなくてはならないコードです。
　これを知らないとどうなるでしょうか。
　Windows10はご存知の通りサウンドなんとかとかえと、名前は何だっけ・・・あとジャンルはどこだっけ・・・迷います。
　これを説明しようとするとスクリーンショットを大量に貼らないといけません。あるいは文章で、スタート+Xでコントロール…やめましょう。
　しかし、このコードの貼り方の説明だけでそこを省略できるのです。
　さらにもっと重要な点があります。
　Vbscriptは枯れた技術もいいところですが、Powershellの set-Executionpolicy を毎回唱えなければならないことを考えると、便利さに涙が止まりません。
　しかもVbscriptが動かないというのはMicrosoft EdgeなどでHTMLに書いた時だけなんですね。しかもそれすら今のところ回避方法があります。
　確かにOSが変わるごとにcplファイルの名称は変わったりしますが、主なもので変わっているのはサウンドくらいではないでしょうか。
　するとどれだけ見た目が変わっても、これさえ覚えていればOSを変えたときのストレスも少なくなるわけです。
##追記 Windowsキー+Rまたはアドレス欄、エクスプローラーから開く方法
もう1行のコードすら面倒だという場合には
####32bit

```powershell
%windir%\SysWOW64\odbcad32.exe
```
####64bit

```powershell
control.exe odbccp32.cpl
```


エクスプローラのこんなところとか
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/126919/e071e899-b3bf-e634-a859-a8bf7ff610af.png)
あんなところとか、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/126919/870a66a6-b346-5519-6712-51295744c5d5.png)
そ、そんなところでも！？
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/126919/4a777133-f587-0088-17dc-57ec0a54645d.png)
そ。。。そんな。。。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/126919/ee5b5a4e-a900-49c1-abdc-c0bdbf07b82b.png)


32bit は`"%windir%\SysWOW64\odbcad32.exe"`などとダブルクォーテーションで囲まず  `%windir%\SysWOW64\odbcad32.exe`  としたほうが良いようです。

#参考文献
[Shell.ControlPanelItem method](https://msdn.microsoft.com/ja-jp/library/windows/desktop/bb774069%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396)
[open control panel using VBScript - StackOverflorw](http://stackoverflow.com/questions/15424589/open-control-panel-using-vbscript)
[コントロールパネルを開く - Dobon.net](http://dobon.net/vb/dotnet/process/opencontrolpanel.html)
[Windows7 : VBScriptで、コントロールパネル内のエントリの実行](http://logicalerror.seesaa.net/article/122443283.html)[WSHテクニック集 コントロールパネルの中身を直接実行する](http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/technic.htm#%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%AB%E3%83%91%E3%83%8D%E3%83%AB%E3%81%AE%E4%B8%AD%E8%BA%AB%E3%82%92%E7%9B%B4%E6%8E%A5%E5%AE%9F%E8%A1%8C)

参考文献は64bit版のVBSを使用してCplを書き換えてください。
このリンクなどを探せばもっとたくさんのコントロールパネルが開けます。アプリケーションの追加と削除などがそうです。
control.exe はcontrolと表記されている場合もありますが、影響しないようです。
なので数多くリンクはありますが64ビット環境における32ビットのODBCが見つからなかったのでした。
めざせpythonライブラリマスター （38）beautiful_print

#【ライブラリ説明】
　汚いHTMLをきれいにする

#【プログラム】
```py:beautiful_print.py
# -*- coding: utf-8 -*-

from beautiful_print import beautiful_print

ugly_html = """
 <html> <body> <div>it sure is hot inside this div! <em>right?</em>
 </div> <p>Yep!</p> <img src=fire.gif></img> </body> </html>
 """
 
print beautiful_print(ugly_html)
'''
<html>
	<body>
		<div>
			it sure is hot inside this div! <em>right?</em>
		</div>
		<p>
			Yep!
		</p>
		<img src="fire.gif"/>
	</body>
</html>
'''
```

#【参考サイト】
　[pypi](https://pypi.python.org/pypi/beautiful_print/0.11)
　[github](https://github.com/nate-parrott/beautiful_print)
rubyのclassでメンバ変数を一括でjson出力してRedisに登録する


# はじめに
Redisでrubyのクラス情報を一気に登録したい場合について調査した。
jsonにして登録するのが良さそうとのことなので、classのメンバ変数をまとめて、json化したい

# rubyのメンバ変数の一括取得
rubyのメンバ変数を一括で取得するのに、便利なメソッドがある。
http://ref.xaio.jp/ruby/classes/object/instance_variables

リファレンスの内容を以下に抜粋します。

```ruby:instance_variables
class Book
  def initialize(title, price)
    @title = title; @price = price
  end
end
 
book = Book.new("Programming Ruby", 2000)
p book.instance_variables  # [:@title, :@price]
```

これを利用して、jsonでメンバ変数を一括出力出来ます。


# jsonでのメンバ変数の一括出力
以下を参考にさせていただきました。
http://stackoverflow.com/questions/4464050/ruby-objects-and-json-serialization-without-rails

```ruby:jsonでの一括出力
def to_json
    hash = {}
    self.instance_variables.each do |var|
        hash[var] = self.instance_variable_get var
    end
    hash.to_json
end
```

```ruby:jsonからの復元
def from_json! string
    JSON.load(string).each do |var, val|
        self.instance_variable_set var, val
    end
end
```

# redisへの登録
あとは、上記のto_jsonを用いてredisに登録するだけですね。
簡単のため、redisはローカルホストでポートは変更していないこととします。
先ほどのBookクラスに上記のto_jsonが実装されているものとします。

```ruby:redisへの登録
book = Book.new("Programming Ruby", 2000)

redis = Redis.new
redis.set "book" book.to_json
```

```ruby:redisからの復元
redis = Redis.new
book_json = redis.get "book"

book = Book.new
book.from_json! book_json

puts book.title # Programming Ruby
puts book.price # 2000
```
めざせpythonライブラリマスター （37）slimurl

#【ライブラリ説明】
　URL解析ができる

#【プログラム】
```py:slimurl.py
# -*- coding: utf-8 -*-

from slimurl import URL

url = URL('http://example.net')
print ("%r" % url)
# <URL "http://example.net/">

print ((url.host, url.port, url.scheme))
# ('example.net', 80, 'http')

print (URL('http://example.net') == URL('http://example.net/'))
# True

print (URL('http://example.net:80') == URL('http://example.net/'))
# True

print (URL('http://example.net') == URL('http://example.net/?foo=bar'))
# False
```

#【参考サイト】
　[pypi](https://pypi.python.org/pypi/slimurl/0.6.3)
ubuntu 16.04 でのnis,nfsの設定での注意

bootするとき、rpcbind が動かないらしい。
回避策はこれ
結構ハマった。
``
systemctl add-wants multi-user.target rpcbind.service
``
http://askubuntu.com/questions/771319/in-ubuntu-16-04-not-start-rpcbind-on-boot
【Java】テキストファイル全体を読み込み文字列を返すメソッド

すぐに使える用。ただし、インポート宣言とメソッド定義は適切な場所に記述しなければならない。

```java
// インポート宣言
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

// メソッド定義
public static String readAll(String path) throws IOException {
    StringBuilder builder = new StringBuilder();
    
    try (BufferedReader reader = new BufferedReader(new FileReader(path))) {
        String string = reader.readLine();
        while (string != null){
            builder.append(string + System.getProperty("line.separator"));
            string = reader.readLine();
        }
    }
    
    return builder.toString();
}
```

JDK 8から追加されたStreamを使用することにより、コード量を半分ほど減らすことができました。

```java
// インポート宣言
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;

// メソッド定義
public static String readAll(String path) throws IOException {
    return Files.lines(Paths.get(path))
        .reduce("", (prev, line) ->
            prev + line + System.getProperty("line.separator"));
}
```

【2016/06/06追記】
上記のメソッドで1MBのテキストファイルを読み込むと、20秒以上かかります。コメントでのご指摘にある次のメソッドが最も高速でした。100MBのテキストファイルを1.3秒程で読み込むことができます。

```java
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.stream.Collectors;

public static String readAll(final String path) throws IOException {
    return Files.lines(Paths.get(path), Charset.forName("UTF-8"))
        .collect(Collectors.joining(System.getProperty("line.separator")));
}
```
BashOnWindowsを快適に使うための設定


:exclamation: 追記（2016/06/05 23:46）: conemuのバージョン160529だと`Add Default task`をした場合に下記の設定変更をしないでも上下キーの効く状態でbashがtaskに追加される。ついでに下記の設定だけでは「Ctrl-C」が効かないのも解消された状態のtaskが作られる。ありがてぇありがてぇ。

# cmder内で上下キーが効くようにする

[BashOnWindows](https://github.com/Microsoft/BashOnWindows)（以下WSL）もWindowsから見ると実行ファイルなのでcmderのtaskとして登録できるが、14342ビルドだとカーソルキーが効かなかった。

conemuのissue [#629](https://github.com/Maximus5/ConEmu/issues/629#issuecomment-208801745) にあったリンク先で回避方法が書かれている。後述のcbwinを使った場合でも有効だった。なお、conemuのバージョンがBuild 160411以上でないとこの対処法は効かない。

[ConEmu | Bash on Windows in ConEmu - conemu.github.io (HTTPS)](https://conemu.github.io/en/BashOnWindows.html)

```
%windir%\system32\bash.exe -cur_console:p
```

# Windowsの実行ファイルを実行する

Windows版のgvim等を使いたい場合に、WSL上で`/mnt/`以下のWindowsのディレクトリに移動しても実行ファイルが実行できない。

[xilun/cbwin: Launch Windows programs from "Bash on Ubuntu on Windows" (WSL) - github.com (HTTPS)](https://github.com/xilun/cbwin)を使うと以下の手順でexe形式の実行ファイルを実行できる。

1. [Releases · xilun/cbwin - github.com (HTTPS)](https://github.com/xilun/cbwin/releases)からzipをダウンロード
2. Windows側で適当なディレクトリに展開
3. （WSL側で）`sudo ./install.sh`
4. bashを起動するのにoutbash.exeを使うようにする
5. `wcmd gvim hoge.txt`という風に実行する
    * 詳細はリポジトリの説明参照
メタプログラミングRuby勉強会 復習 イントロスペクション・オープンクラス・モンキーパッチ

# 概要
メタプログラミングRuby
![alt](http://ecx.images-amazon.com/images/I/5102wwx0VzL._AC_UL115_.jpg)

RubyGoldを合格する上でも、Classへの理解は必須。
メタプロ本を教科書とした、会社で行われた勉強会の内容について復習


# イントロスペクションとメタプログラミング
対象物について、その素性、カバーする範囲、
そして可能な事を判断するために、調査できる機能のことを指す。それがイントロスペクション
（例）
　1.methods
　→　結果：Fixnumで定義されているメソッド一覧が取得される

何気なくModelを生成するときに利用している、ActiveRecord::Baseについて。
Active Recordがイントロスペクションを使って　クラス名を調査し、そのクラス名を複数形に置き換えた
名称のテーブルに対し存在するカラムを調査し、カラム毎にアクセッサメソッドを自動で定義している。

RailsではActiveRecordのようなメタプログラミングが駆使されたclassが多数存在する

# オープンクラス
定義済のクラスを再オープンして、あらたな機能を付けてクラスを上書き保存することができる。
標準クラスにおいても対応できてしまうため、オブジェクト指向により沿ったプログラミングが可能

Stringを更新するようなメソッドを、StringUtilsといったclassを新たに定義しメソッドを定義するのではなく
Stringクラスをオープンして、メソッドを定義することができる。

Railsでオープンクラスが用いられている例

```ruby:railsc
#rails　console を起動すると Fixnum クラス に daysというメソッドが定義されている事がわかる
% rails c
[1] pry(main)> 3.class
=> Fixnum
[2] pry(main)> 3.days
=> 3 days
[3] pry(main)> 3.days.class
=> ActiveSupport::Duration
[4] pry(main)>
```

```ruby:irb
#irbを起動して確認すると、Fixnum クラス に daysなんてものは無い！ということでエラーになる
% irb
irb(main):001:0> 3.class
=> Fixnum
irb(main):002:0> 3.days
NoMethodError: undefined method `days' for 3:Fixnum
```

## クラスの範囲
オープンクラスにてメソッドを変更した場合、既にnewでインスタンス化されたオブジェクトに対しても有効になる
インスタンス変数はオブジェクトに住んでいるが、
メソッドはオブジェクトではなく、クラスに住んでいるという事

```ruby:
 pry(main)> class D
 pry(main)*   def x
 pry(main)*     x # 自分で自分をcallするような記載
 pry(main)*   end
 pry(main)* end
=> :x
 pry(main)> d1 = D.new
=> #<D:0x007fdeb88a5040>
 pry(main)> d1.x # エラーになる
SystemStackError: stack level too deep

 pry(main)> class D
 pry(main)*   def x
 pry(main)*     "x" # 定義を修正
 pry(main)*   end
 pry(main)* end
=> :x
 pry(main)> d1.x # 先ほどと同じオブジェクトに対してx methodを呼び出してもエラーにならない
=> "x"
```

# モンキーパッチ
オープンクラスの技術を用いて、既存メソッドを上書きして別の動きをするクラスができてしまう

通常足し算を行うはずのメソッドが、引き算を行うような動作に変わってしまう 例

```ruby:
 pry(main)> a = 3
=> 3
 pry(main)> b = 3
=> 3
 pry(main)> c = a + b
=> 6

 pry(main)> class Fixnum
 pry(main)*   def +(v)
 pry(main)*     self - v
 pry(main)*   end
 pry(main)* end
=> :+
 pry(main)> c = a + b
=> 0
```
Railsのdeviseにてsign_inにリンクするとエラーが最初から表示されたときの対策

Deviseを使ってログインページへのリンクを開いたときに、 `Invalid name or error!`と、何もしてないのに表示される。

この原因の理由としては、bootstrapを使いログインリンクを装飾していたのだが、`button_to`でデザインしていたので、メソッドが`post`になっていたのが原因。

methodをgetに指定してあげればエラーは表示されなくなった。

`<%= button_to 'ログイン', new_user_session_path, method: :get, :class => "btn btn-default navbar-btn" %>`
zshで途中の文字から補完できるようにする


oh-my-zsh を入れると cd などで、ディレクトリ名の最初から入力しなくても、途中の文字から補完してくれる：

```bash
$ ls
machine-learning-ex1 ... machine-learning-ex6
$ cd 6 [Tab]
$ cd machine-learning-ex6
```

つまり、

```
$ cd m [Tab]
$ cd machine-learning-ex
```

と先頭の文字から補完してくれるのは当然だけれども、途中の文字 6 でも補完してくれる。しかし、いろんな設定がごちゃ混ぜに入っている oh-my-zsh は入れたくないので、この機能だけ入れたいとしよう。

その設定は `~/.oh-my-zsh/lib/completion.zsh` に書いてあって、最小限の設定は：

```bash
autoload -U compinit; compinit
zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=*' 'l:|=* r:|=*'
```
CentOS 6.8（Xen仮想化環境下）でcurlやyumやgitが失敗するようになった

Xen仮想化環境下におけるCentOS 6.8で、CPUがハードウェアでAVXサポートまたはAESサポートを持っている場合、`nss` を使っているHTTPS通信（SSL/TLS）で不具合が出るようで、

```
$ curl https://www.google.com/
不正な命令です
```

と出る。うちの場合、

```
$ cat /proc/cpuinfo
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 45
model name      : Intel(R) Xeon(R) CPU E5-2420 0 @ 1.90GHz
stepping        : 7
microcode       : 1805
cpu MHz         : 1900.085
cache size      : 15360 KB
physical id     : 4
siblings        : 1
core id         : 0
cpu cores       : 1
apicid          : 4
initial apicid  : 4
fpu             : yes
fpu_exception   : yes
cpuid level     : 13
wp              : yes
flags           : fpu de tsc msr pae cx8 sep cmov pat clflush mmx fxsr sse sse2 ss ht syscall nx lm constant_tsc rep_good unfair_spinlock pni pclmulqdq ssse3 cx16 sse4_1 sse4_2 popcnt tsc_deadline_timer aes hypervisor lahf_lm ida arat pln pts dtherm
````

となっていたので、確かに、AESフラグが点いてる。

最近更新され、CentOS 6.8ではデフォルトでインストールされる `nss` のパッケージはこんな感じ。

```
nss-3.21.0-8.el6.x86_64.rpm           2016-05-12 19:50  859K  
nss-sysinit-3.21.0-8.el6.x86_64.rpm   2016-05-12 19:47   47K  
nss-tools-3.21.0-8.el6.x86_64.rpm     2016-05-12 19:46  437K  
nss-util-3.21.0-2.el6.x86_64.rpm      2016-05-12 19:47   67K  
```

## 対策

CentOSのバグトラッカー

[0010930: curl https://www.google.com -> Illegal Instruction after centos 6.8 update - CentOS Bug Tracker](https://bugs.centos.org/view.php?id=10930)

にありますが、

環境変数を設定し、 `export NSS_DISABLE_HW_AES=1` `export NSS_DISABLE_HW_GCM=1` で回避できるのですが、環境変数を読まないところで `curl` を使われていたりするとつらいので、 `nss` を一時的にダウングレードしておくとよいです。

```sh:
cd ~/
export NSS_DISABLE_HW_AES=1
export NSS_DISABLE_HW_GCM=1
mkdir RPM-Downgrade; cd RPM-Downgrade
curl -LO http://vault.centos.org/6.7/updates/x86_64/Packages/nss-3.21.0-0.3.el6_7.x86_64.rpm
curl -LO http://vault.centos.org/6.7/updates/x86_64/Packages/nss-sysinit-3.21.0-0.3.el6_7.x86_64.rpm
curl -LO http://vault.centos.org/6.7/updates/x86_64/Packages/nss-tools-3.21.0-0.3.el6_7.x86_64.rpm
curl -LO http://vault.centos.org/6.7/updates/x86_64/Packages/nss-util-3.21.0-0.3.el6_7.x86_64.rpm
yum -y --skip-broken downgrade ./*.rpm
unset NSS_DISABLE_HW_AES
unset NSS_DISABLE_HW_GCM
cd ~/
```

（2016.6.9追記） `WordPress`もダッシュボードの`wp-admin/themes.php`あたりで子プロセスでHTTPS通信で引っ張ってきているらしく、エラーログに`[notice] child pid 17950 exit signal Illegal instruction (4)`が乗り死ぬ。空応答なので割と辛い。

（2016.7.24追記）

RedHat ELのほうでは2016/07/12、CentOSのほうでは日本時間で2016/07/13に修正が出ていました。

[nss-softokn bug fix update - Red Hat Customer Portal](https://rhn.redhat.com/errata/RHBA-2016-1397.html)
[[CentOS-announce] CEBA-2016:1397 CentOS 6 nss-softokn BugFix Update](https://lists.centos.org/pipermail/centos-announce/2016-July/021964.html)

上記アップデートにより、特定環境下での `nss` の動作不良は修正されているため、現時点では、普通に

```
yum update nss*
```

にて正常に動作します。
素人のイラレ備忘録

# 素人のイラレ備忘録
## 目的
- たまに訪れる資料作成のときにわすれてしまいがちなイラレの使い方をメモ
- 同じく余り使わない人の役に立てば幸いです
- 普段から使っているプロの方にお役立ち情報貰えれば幸いです

## 操作
#### 直前の操作を繰り返す
```
Ctrl + d
```

#### 線対称の位置のコピー
コピーしたい対象を選択
リフレクトツールで，Alt押しながら対称中心の線を選択
出てきたダイアログでコピーを選択
ローカルファイルのPDFをページ指定して開きたい

#PDFの指定ページを開きたい
理由は言えないけど開きたいことってあるじゃない。
大人だもの。
それがたまたまPDFで、しかもページ指定したいってだけ。

##普通にPDFを開いてみた
関連付けられたAcrobat Reader DCで開いたよ。
当然だよね。でも開くだけじゃダメなんだ。
ページ指定したいんだ。

##コマンドラインオプションでやってみた
```
AcroRd32.exe /A page=10 test.pdf
```
ほら。できた。あっけなかったねおめでとう。

##と、おもったけど
Acrobat開いたままで指定ページを変えてもう一度実行したら
ページは切り替わらなかった！
だめだーこんなんじゃないんだー

##そもそもShellExecuteで動かしたいもんで
うーんどうしようかな

##結局
Chromeを使うと「file://」が使えるのでそのままURLとして扱えました。
なのでURLの後ろに「#page=10」とつけてURLを引数として呼び出すようにした
Chromeは毎回違うタブで開くのでページは切り替わってよかったなー
(タブが増えていくのは目を瞑る…)

###ファイルパスに日本語が
日本語が含まれているときはURLをエンコードして上げる必要があるわね

###IEはだめだった
IEは「file://」が使えないし、どうも「Acrobat Reader DC」をそのまま呼んでる感じなのかな？コマンドライン引数も使えないし。もー
[Cloud101]#4 HOLでvSphereを感じる

#0.AGENDA
1.ProjectNee(HOL)とは
2.基本技術(想像)
3.サインアップ
4.無料コース実践

#1.Projectnee(HOL)とは
- 昔はProject NEE、今はHOL
    - NEE: Next-generation Education Environment 
        - 2013/11の紹介記事 
            - http://searchvmware.techtarget.com/feature/VMware-Project-NEE-developed-to-deliver-educational-services-at-scale

    - HOL: Hands On Labo
        - YouTubeのHOL説明
            - https://www.youtube.com/watch?v=OxWt6qY3td8
            - 英語が苦手な人はYoutubeの字幕設定で日本語字幕を
            
- ２つのURL
http://www.projectnee.com/HOL
http://labs.hol.vmware.com/

- 日本語や中国語のコースもある
![1-01.PNG](http://qiita-image-store.s3.amazonaws.com/0/79389/126f1126-54ca-b549-3f51-26ba69d05179.png)

#2.基本技術(想像)
- Nested HyperVisorでオンデマンドに個別環境を作成し、その環境へブラウザから HTML5 Desktop Accessしてる :smile: 

(1)Nested HV

https://www.school.ctc-g.co.jp/columns/shimo/shimo27.html

参考：CTC仮想化教育連載
https://www.school.ctc-g.co.jp/columns/shimo/
https://www.school.ctc-g.co.jp/columns/

VMwarePlayerなど各自のPC環境(VirtualBoxは未検証)でも構築できますが、HWリソースが多量に必要なので・・・
http://blog-lrivallain.rhcloud.com/2015/01/25/nested-esxi-virtualbox/

(2)HTML5 Desktop Access

http://www.atmarkit.co.jp/ait/articles/1302/22/news103.html
http://www.atmarkit.co.jp/ait/articles/1301/30/news060.html
などなど多数

- VMwareだけでなく他社も同様なトレーニングあります
- ex. AWSのqwikLABS: 
    - https://qwiklabs.com/ (無償＋有償、環境あり）
    - AzureのMVA:    https://mva.microsoft.com/product-training/microsoft-azure （無償だが環境なし）

**時間さえかければ誰でも無料で勉強できる！（時間かけるのもかけないのも自分の選択^^）**

#3.サインアップ

##1 Webから「新規ユーザの登録」

http://www.projectnee.com/HOLにアクセス
画面右上部の"English"をクリックして"日本語"に変更
![1-02.PNG](http://qiita-image-store.s3.amazonaws.com/0/79389/8f547bc3-f170-aee1-d19a-7551472717cc.png)

画面右上部の"ログイン/登録"をクリックして"新規ユーザの登録"画面に進み、必要項目入力して"サインアップ"クリック
![1-03.PNG](http://qiita-image-store.s3.amazonaws.com/0/79389/c7de9c3a-2635-ab7b-65de-4f3c39303a20.png)

![1-04.PNG](http://qiita-image-store.s3.amazonaws.com/0/79389/1776f078-37a8-0555-7d68-db91dc53adb5.png)

![1-05.PNG](http://qiita-image-store.s3.amazonaws.com/0/79389/edee6135-7956-af20-51c2-6e0c5cf806cb.png)

##2 メールリンクから登録続行

登録したメアドにメールがくるので本文中のURLリンクから登録処理続行
![1-06.PNG](http://qiita-image-store.s3.amazonaws.com/0/79389/a3f41e7f-a209-b8b1-e234-f8f96e310e01.png)

セキュリティの質問＆回答は適当に編集
![1-07.PNG](http://qiita-image-store.s3.amazonaws.com/0/79389/f9608bbe-915c-faeb-3da8-d7e5cc1904ec.png)





![1-08.PNG](http://qiita-image-store.s3.amazonaws.com/0/79389/2b43d61c-50d8-6afc-8caa-9b2551cbdf7b.png)
![1-09.PNG](http://qiita-image-store.s3.amazonaws.com/0/79389/9214033c-3a03-acf9-86e6-a282ac0f1a52.png)

##3 登録終了

![1-10.PNG](http://qiita-image-store.s3.amazonaws.com/0/79389/ea783abf-7b1b-1fb1-59b3-ced12ddb042b.png)

#4. 無料コース実践

- 各自「HOL-CHG-1695 vSphere 6 Challenge Lab」の環境で遊んでみてください。
- 環境は自由に使えるのでコースに従わなくてもOK (自由に実験できる環境が手に入る！)
- 終了すると環境は保存されないので時間見つけて集中して遊んでください（1H単位の延長可能）

(補足)http://qiita.com/nagahisa/items/c90b62868434fb48b177

# Enjoy!! :tada:
Inno Setup Script の三項演算子ぽいやつ

Inno Setup のスクリプトは便利だけど、微妙に Pascal や delphi の機能が足りないのが残念です。
Delphiの 三項演算子ぽい `IfThen()` も当然ない.
http://delphi.about.com/library/rtl/blrtlIfThen.htm

仕方がないので、それっぽいのを作って満足するしかないです。Inno Setup Script にもオーバーロードあればいいのに。

```pascal
// prototype
function IfThenStr(cond : boolean; a, b : string): String; forward;
function IfThenInt(cond : boolean; a, b : Integer): Integer; forward;

// function
function IfThenStr(cond : boolean; a, b : string): String;
begin
  Result := b
  if cond then
    Result := a;
end;

function IfThenInt(cond : boolean; a, b : Integer): Integer;
begin
  Result := b
  if cond then
    Result := a;
end;
```

使い方は、こんな感じでしょうか。

```pascal
function initializeSetup() : boolean;
var
  str : string;
  i, x, y : Integer;
begin
  x := 10; y := 11;
  
  str := IfThenStr(x > y, 'true string', 'false string');
  i := IfThenInt(x > y, 0, 1);
end;
```
めざせpythonライブラリマスター （35）pywildcard

#【ライブラリ説明】
　ワイルドカードが使用できる

#【プログラム】
```py:pywildcard.py
# -*- coding: utf-8 -*-

import pywildcard

dirs = ['hello/world.py', 'hello/world.pyc', 'hello/world/other/folder/example.py']

print pywildcard.filter(dirs, 'hello/*')
#  ['hello/world.py', 'hello/world.pyc', 'hello/world/other/folder/example.py']

print pywildcard.filter(dirs, 'hello/*.py')
# ['hello/world.py', 'hello/world/other/folder/example.py']
```

#【参考サイト】
　[pypi](https://pypi.python.org/pypi/pywildcard/1.0.7-1)
　[github](https://github.com/fire-carrot/python-wildcard)
仕事で使うコマンドやファイルの場所（Mac OS X）

#使用するコマンド
####linux
```$ find [ディレクトリ] -type f -name ".htaccess"```
```$ grep -R "ファイル名" ./*```
-Rは再帰的に。現在のディレクトリからコード中に"ファイル名"が出現するファイル群をリストアップしてくれる。
```diff -u foo.txt bar.txt >> result.txt | grep "*.php"```
foo.txtとbar.txtのphpファイルの差分を出し、result.txtファイルを新規に作成し、書き出す。
####nginx
```$ sudo nginx（起動）```
```$ sudo nginx -s reload（再起動）```
```$ /etc/init.d/nginx configtest（nginx設定テストコマンド）```
####mysql
```$ sudo mysql.server start（起動）```
```$ sudo mysql.server restart（再起動）```
```$ select Host, User, Password from mysql.user（DBで使用しているユーザ名等がわからなくなったとき、出力）```
####mysql(MAMP)
```$ mysql --socket=/Applications/MAMP/tmp/mysql/mysql.sock -u root -p（ソケット指定起動）```
※これに関してはパスはroot
####php-fpm
```$ sudo php-fpm（起動）```
####apache
```$ sudo /usr/sbin/apachectl start（2.2の起動※これはデフォルトアパッチの位置）```
```$ sudo /usr/local/bin/apachectl start（2.4の起動※混在しているhome brewのパッチの位置）```
```$ apachectl -v（バージョン確認）```
```which apachectl（場所確認）```
####phpenv
```$ phpenv versions(現在切り替え可能なバージョン)```
```$ phpenv install [version]```
```$ phpenv global [version](使用バージョン切り替え)```
```$ phpenv rehash```
```$ phpenv apache-version [version]```
####cloud9
```$ mysql-ctl start（mysql起動）```
```$ mysql-ctl cli（コマンドライン起動）```
```$ sudo service apache2 start（apache起動）```
#使用する設定ファイル等の場所
####php
__php.ini → /etc/php.ini__
####nginx
__/etc/nginx/nginx.conf__
####apache2.2(default)
__デフォルトドキュメントルート →　/var/www/__
__httpd.conf → /private/etc/apache2/httpd.conf（2.2設定ファイル）__
__httpd-vhosts.conf → /private/etc/apache2/extra/httpd-vhosts.conf（バーチャルホスト設定ファイル）__
__hosts → /etc/hosts（servername設定ファイル）__
__libphp5.so → /usr/lib/apache2/libphp5.so（apacheがphpのバージョンを読み込むときに使用するモジュール）__
####apache2.4(homebrew)
__httpd.conf → /usr/local/etc/apache2/2.4/httpd.conf（2.4設定ファイル）__※うまくhomebrewを扱えなく、apache設定ファイルの場所がバラバラ...。
__httpd-vhosts.conf → /usr/local/etc/apache2/2.4/extra/httpd-vhosts.conf（バーチャルホスト設定ファイル）__
####bash
__bashrc → ~/.bashrc__
__bash_profile → ~/.bash_profile__
AWS 認定プログラムのソリューションアーキテクト アソシエイトに合格しました。

# AWS 認定プログラムとは
AWSのベンダー試験でAWSを使ったインフラの設計やデプロイ、運用方法などの試験です。
この試験は2016/06/01現在、以下の5種類が用意されています。

- ソリューションアーキテクト – アソシエイト
- ソリューションアーキテクト – プロフェッショナル
- デベロッパー – アソシエイト
- システムオペレーション（SysOps）アドミニストレーター – アソシエイト
- DevOps エンジニア – プロフェッショナル

アソシエイトの上位レベルがプロフェッショナルというようになっていて、
デベロッパーとシステムオペレーションのプロフェッショナルレベルはDevOps エンジニア１つになっているようです。
https://aws.amazon.com/jp/certification/certified-solutions-architect-associate/

# AWS 認定プログラムソリューションアーキテクト アソシエイトとは
今回、私が合格したのは一番上のソリューションアーキテクト – アソシエイトという試験です。
この試験ではAWSを使用した高可用性、コスト、耐障害性、デプロイ、セキュリティ等の問題が出題されます。

# なにを勉強すればいいのか。
(1回落ちた＋ギリギリ合格だった私があまり言えた口じゃあないですが・・・)
### AWSの各サービスの特性を理解する
[AWS クラウドサービス活用資料集](https://aws.amazon.com/jp/aws-jp-introduction/)の「製品・サービス別資料」に載っている「Black Belt」という単語が入った資料は一通り目を通すことをおすすめします。
また、各サービスの公式資料やよくある質問も読んでおいたほうが良いです。
### クラウドデザインパターン(CDP)を覚える
高可用性を求めるならMulti-Serverパターン、静的コンテンツの配信だったらDirect Hostingパターン等、デザインパターンを覚えておくことで問題解決に役立ちます。
こちらのページにいろいろなパターンが記載されています。
http://aws.clouddesignpattern.org/index.php/
デザインパターンの本を買って読むのもおすすめです。私が買った本は以下の２冊です。
[Amazon Web Servicesクラウドデザインパターン設計ガイド 改訂版](https://www.amazon.co.jp/gp/product/B0126HZGP8)
[Amazon Web Services クラウドデザインパターン 実装ガイド](https://www.amazon.co.jp/gp/product/B00VHW3PG6/)
試験の内容的には設計ガイドの方がかなり有用に感じました。おすすめです。
実装ガイドも買いましたが試験にはあまり役になっていない気がします。。。
### 実際に操作してみる
AWSアカウントを取得して実際に構築してみるのも理解が進んで良いと思います。
最初はAWS クラウドサービス活用資料集のチュートリアルを読んで、基本操作を学び、
次にクラウドデザインパターンの構成を実際に構築するのが良いと思います。
# 試験について
本試験の前に模擬試験は一度受けてみたほうがいいと思います。
私は他の試験はIPAの試験しか受けたことが無いので、雰囲気を知ることが出来てとても良かったと思います。
模擬試験はオンラインでの受験となり、問題は20問(本試験は60問)、答え合わせ無しです。
私の個人的な感覚ですが多少本試験よりも易しめな印章を受けました。
また、模擬試験の注意書きに書いてありますが、同じ問題が出る可能性があります。
(私は2回受けました。1回で良かったかと思っています)
# さいごに
今までIPAの試験では過去問をひたすら解くという試験勉強スタイルを取っていたため、過去問や問題集が無いAWSの試験をどうやって勉強をすればいいんだろうかと迷子になった時期がありました。
もし、同じように迷子になっている人がいたら助けになればと思い、この記事を書きました。
初Qiita投稿で拙い部分も多いく読みにくいかと思いますが、誰かの参考になれば幸いです。
【R】統計Rの使い方 #2 データの読み込み

[前回](http://qiita.com/hfu62/items/ee0102d47505fa269467)の続きです。

# 今回取り上げる内容
- データセット読み込み・確認
- 外部からのデータセット読み込み

# データセット読み込み
## データセットとは
- Rをインストールすると、サンプルデータも一緒にインストールされる
- 各種データの説明は[こちら](http://stat.ethz.ch/R-manual/R-patched/library/datasets/html/00Index.html)※全て英語
- 親切な方が和訳[こちら](http://d.hatena.ne.jp/hoxo_m/20120214/p1)してくださっています

## データセットを読み込もう
今回は"iris"というデータを読み込んでみます
### データ・セットの読み込み 
- コンソール（Rstudioの左下ウィンドウ）に`data(iris)`と入力し、Enter

```r:console
>data(iris)
```
- データセット"iris"が読み込まれます
- Rstudioの右上ウィンドウの[Environment]項目を選択した状態で、`iris`という項目が増えることを確認

### 読み込んだデータセットの確認
- コンソールにデータセット名（今回は`iris`）を入力し、Enter

```r:console
>iris
```

- データセットの内容がコンソール部分に出力される。ずらずらずら〜
### データセットを表の形で確認（Rstudio）
方法は2つ

1.  右上ウィンドウの`iris`の行左端にある表っぽいアイコンをクリック
2.  または、コンソールに`View(iris)`を入力

```r:console
>View(iris)
```

するとあら簡単、エクセルみたいな形でデータの確認ができます。Rstudioの有り難み。

### データセットを要約
- Rに入っているsummary関数を使用します

```r:console
>summary(iris)
```

- 平均値、中央値など計算して出力してくれます

### データセットの説明を確認する
- データセットの説明をブラウザから確認しても良いのですが、Rstudioの中でも確認できます
- コンソールに以下を入力

```r:console
>help(iris)
```

- 右下ウィンドウがヘルプ表示に切り替わって、データセットの説明を表示してくれます（英語で！）
- このhelp関数は、データセットだけでなく関数の詳細を知るのにも役立つので覚えておくと便利です


## 外部からのデータセット読み込み
Rからのデータセットで統計の勉強をしたら、自分が測定したデータセットを読み込んで実践してみましょう

### 注意
- 今回はエクセルファイルではなくcsvファイルを読み込む場合の説明をします
- 日本語が含まれるファイルを使用する場合、文字コードに注意。普通にエクセルで編集したファイルをcsv形式で保存しても、Rにインポート（読み込み）することができません。
- 文字コードがUTF-8ではなくShift-JISになってしまうので、`「不正なマルチバイト文字が含まれます」`というエラーが出る。
- 詳しい保存方法の説明は[こちら](http://web-laboratories.com/excel-csv)を見てください
- 間違ってShift-JIS保存してしまった場合の対処は[こちら](http://global-wing.com/activity/csv_character_code.html)をどうぞ

### 自分で作成したデータセットを読み込もう

Rstudioを使用する場合、読み込み方法は2通り
1. コンソールから読み込み（普通のRの方法, CLI）
2. "データをインポート"（Rstudioのみ可, GCI）

### コンソールから読み込み（CLI）
プログラミングに慣れていないと難しいかも

```r:console
> data1 <- read.csv("~/Documents/testdata.csv", header=TRUE)
```
- Documentsに保存されている"testdata.csv"というファイルをdata1という変数に入れています
- `header=TRUE`の部分で、データの一行目を見出しとして読み込みます。書かなかった場合、データセットの一行目から全てデータセットとして扱われます
- csvを読み込む関数について、詳しくは以下をコンソールに入力して説明を読んでみてください。
列の名前の指定なども関数の入力に従えばいろいろカスタマイズできます

```r:console
> help("read.csv")
```

- 一旦読み込んでしまえば後は前述と同様の方法でデータの確認ができます。`iris`と入力していたところを`data1`と書き換えて作業してみてください

### "データをインポート"（GUI）
- Rstudioの右上の`Import Dataset`をクリック
- `From Text File...`を選択
- 読み込みたいcsvファイルを選んで`open`→サンプルが表示されるので確認。
- `Heading:Yes`で見出しを設定
- `Row Names:Automatic`でデータの1列目を見出しとして設定。ただしデータ名が重複していない場合のみ設定可能
- あとの設定はそのままで一旦大丈夫。読み込みましょう
- データセット読み込み後、左上のウィンドウに表の形でデータが表示される
- データセットを格納している変数名は、表の上のタブやコンソール中の最初の単語で確認可能。基本はcsvのファイル名そのままのはず


とりあえずデータの読み込みまで！
めざせpythonライブラリマスター （34）concurrent

#【ライブラリ説明】
　並列実行

#【プログラム】
```py:concurrent.py
# -*- coding: utf-8 -*-

from benchit import BenchIt
from concurrent import futures

b = BenchIt()

def process_job(job):
    count = 10000000
    while count>0:
        count -= 1
    return job

jobs = [i for i in range(20)]

# スレッド無し
result = []
for job in jobs:
    result.append(process_job(job))
        
b.mark("Non-Thread")

# スレッド有り
result = []
thread_pool = futures.ThreadPoolExecutor(max_workers=5)
result = thread_pool.map(process_job, jobs)
        
b.mark("Multi-thread5")
        
# スレッド有り
result = []
thread_pool = futures.ThreadPoolExecutor(max_workers=10)
result = thread_pool.map(process_job, jobs)
        
b.mark("Multi-thread10")

b.display()
```

#【結果】
```text:display.text
+----------------+----------+------+-------+----------+----------+---------+
| Marker         | Method   | Line | Loops | Avg Time |  Runtime | Percent |
+----------------+----------+------+-------+----------+----------+---------+
| Non-Thread     | <module> |   21 |     1 | 14.82156 | 14.82156 |   88.72 |
| Multi-thread5  | <module> |   28 |     1 |  0.18812 |  0.18812 |    1.13 |
| Multi-thread10 | <module> |   35 |     1 |  1.69720 |  1.69720 |   10.16 |
+----------------+----------+------+-------+----------+----------+---------+
Total runtime: 16.71
```

#【参考サイト】
　[document](http://docs.python.jp/3/library/concurrent.futures.html)
　[めざせpythonライブラリマスター （27）benchit](http://qiita.com/Algebra_nobu/items/e9d495a6e15f3e36aebc)
[CCNA ICND1] 06. Catalystスイッチの導入

# 1. 企業内LANの設計

企業内LAN(キャンパスLAN)の設計では、いくつかの機能に分けた階層設計が推奨されている。

階層設計を取り入れることによって、ネットワーク全体の拡張性を向上させ、管理を効率化することができる。

階層には、基本となるアクセス層、ディストリビューション層、コア層がある。

## 1.1. アクセス層

クライアントを収容するための階層

VLANを利用したブロードキャストドメイン分割などの追加機能を設定する。

## 1.2. ディストリビューション層

アクセススイッチからのトラフィックを集約して、必要に応じてコア層へ転送する。

通常はVLAN間のルーティングを行うためにL3スイッチが使用される。

## 1.3. コア層

ネットワークのバックボーンとなる。

ディストリビューションスイッチを収容する。

高速で大容量のトラフィックを処理する非常に高い信頼性を持つスイッチ。


```
ネットワークの規模が小ー中規模の場合、コア層とディストリビューション層は1つになるように設計する。
また、この他にサーバ群を接続するスイッチを収容するサーバファーム(サーバアクセス層)がある。
```

### 1.4. 補足-アクセス層の特徴

1. ポート密度が高いローエンドなスイッチを設置

2. 安いFastEthernet(10/100Mbps)ポートが主流

3. VLANを実装し、ブロードキャストドメインを分割



# 2. Catalystスイッチの初期起動

Catalystスイッチに電源を投入すると、Cisco IOSソフトウェアの初期起動時の内容が出力される。

## 2.1. 初期起動の流れ

* ステップ 1：ケーブリングを行い、配線が適切かどうかを確認

* ステップ 2：スイッチに電源ケーブルを接続

* ステップ 3：起動時のLEDや表示メッセージを確認

|LED|
|:---:|
|システム|
|RPS|
|ステータス|
|DUPLEX|
|SPEED|
|PoE|
|MODE|
|ポート|

## 2.2. セットアップモード

スイッチに電源が投入されると、スイッチはNVRAM内の`コンフィギュレーションファイル`を検索する。

コンフィギュレーションファイルが存在する場合は、`ユーザEXECモード`になるが、ない場合は初期設定を行うために`セットアップモード`で起動する。

起動中にセットアップモードに入るためには、「特権EXECモード」で`setup`コマンドを実行すればいい。

# 3. スイッチの基本設定

スイッチの正常な軌道が確認できたら、スイッチに対して基本的な設定を行う必要がある。

## 3.1. ホスト名の設定

```shell-session
(config)# hostname <hostname>

(config)# no hostname
```

## 3.2. 管理用IPアドレスの設定

```shell-session
(config)# interface vlan <vlan-id>
(config-if)# ip address <ip-addr> <subnet-mask>
(config-if)# no shutdown

(config-if)# no ip address
```

`no shutdown`コマンドは、インターファイスを有効にするための設定。

## 3.3. デフォルトゲートウェイの設定

```shell-session
(config)# ip default-gateway <ip-addr>

(conifg)# no ip default-gateway
```




# 4. スイッチの基本設定の確認

基本設定と状態を確認するための各種のコマンドがある。

## 4.1. スイッチ本体情報の表示

```shell-session
SW> show version
```

IOSの情報、ブートROMのバージョン、起動時からの経過時間、起動した原因などいろいろな情報が確認できる。

## 4.2. 現在のコンフィギュレーションの表示

```shell-session
SW# show running-config
```

## 4.3. スイッチポートの詳細情報の表示

```shell-session
SW# show interfaces [<interface-id>]
```

## 4.4. スイッチポートの要約情報の表示

```shell-session
SW# show interfaces [<interface-id>] status
```

## 4.5. 管理インターフェイスの情報の表示

```shell-session
SW# show interfaces vlan <vlan-id>
```

|VLANの状態|Lineプロトコルの状態|説明|
|:---:|:---:|:---|
|up|up|有効|
|up|down|同じVLANに端末がない|
|administratively down|down|shutdownされている|
|down|down|VLANがアクティブではない|


# 5. MACアドレステーブル

スイッチの基本機能はフレーム転送。

スイッチはMACアドレステーブルを使ってふれ0羽を必要なポートに転送する。

## 5.1. MACアドレステーブルの表示

Catalystスイッチでは、CAM(Content Addressable Memory)と呼ばれる、メモリを利用してMACアドレステーブルを管理する。

MACアドレステーブルに登録されるアドレスには2種類がある。

1. ダイナミック：受信したアドレスを自動的に登録

2. スタティック：管理者が手動で登録

```shell-session
SW# show mac address-table [dynamic | static]
```


## 5.2. スタティックMACアドレスの登録

```shell-session
SW# mac address-table static <mac-addr> vlan <vlan-id> interface <interface>
```

## 5.3. MACアドレステーブルのエージングタイム

デフォルト300秒

```shell-session
SW# show mac address-table aging-time
```

## 5.4. ダイナミックアドレスの削除

```shell-session
SW# clear mac address-table dynamic
```
css-loaderでscoped cssを手に入れる


この記事はcss-loaderでscoped cssを触ってみたときのメモ程度の記事です。実際にこれを使ってなにか作ってみたわけではないのでハマりどころなど理解していません。間違いがあればご指摘よろしくお願いします。

---

[webpack/css-loader: css loader module for webpack](https://github.com/webpack/css-loader)

css-loaderでscoped cssを実現する方法として`local scope`と`css modules`という2つ方法がある。2つの違いはdefaultのscopeがlocalになるかglobalになるかだけ。

どちらも該当のclassセレクタを他と名前が衝突しない一意性のあるclass名に変換してscoped cssの実現している。つまりBEMのような命名規則を意識せずによくなる。

local scope
============

css-loaderはdefaultがglobal scopeで`:local(.className)`または`:local{...}`と宣言した場合にclassNameがハッシュ化されexportされる。

selectorはJavaScriptから参照しやすいようにキャメルケースが推奨されている。

![Kobito.wsskXj.png](https://qiita-image-store.s3.amazonaws.com/0/34837/736d2773-38d7-b8a9-f0ce-043602fa7af3.png "Kobito.wsskXj.png")



CSS Modules
============

css-loaderの設定に`modules`オプションを渡すとdefaultでセレクタがscoped cssの対象となりハッシュ化され、逆に`:global`を宣言した場合にglobal scopeとして処理される。

```js
"css-loader?modules"
```

![Kobito.EvFbdI.png](https://qiita-image-store.s3.amazonaws.com/0/34837/59c28893-27fd-8b05-c810-36a4049a230c.png "Kobito.EvFbdI.png")


HTMLへの適用方法
===============

React.js
-------

```css:foo.css
:local {
  .foo {
    background: blue;
  }
}
```

```js
import styles from './foo.css';
export default class Foo extends Component {
  render() {
    return <div className={styles.foo} />;
  }
};
```

Vue.js
--------

[Introduction | Introduction](http://vue-loader.vuejs.org/en/index.html)
[Scoped CSS | Introduction](http://vue-loader.vuejs.org/en/features/scoped-css.html)

vue-loaderを使って単一ファイルコンポーネントを使うのが手軽。vue-loaderも裏でcss-loaderを使ってる。

```html
<style scoped>
.foo {
  color: red;
}
</style>

<template>
  <div class="foo">hi</div>
</template>

```

その他
-------

React.js, Vue.jsしか触ったことないので他のことはわからないが、ReactのようにJavaScriptの世界にテンプレートを持つようなフレームワークならReactと同じようにいけそう。

またcss-loaderやJavaScriptフレームワークを使わない場合は[css-modules/postcss-modules: PostCSS plugin to use CSS Modules everywhere](https://github.com/css-modules/postcss-modules)を使ってlocal classをHTMLに適用できるらしい。


scoped cssを導入した際のCSS設計
==========================

CSS設計を意識しているつもりでいつの間にか破綻する自分向けCSS戦略。(実際に使ってみたわけではないので思いつきレベルです。)

local scopeで書かれているclassは`compose`という他のlocal scope classのstyle定義を再利用するための特別なプロパティがあるが、これはsassのextendみたいなもの(間違っていたらごめんなさい)で、一貫性をもって使っていくのが難しい気がする。

cssをすべてmoduleで書きJavaScriptファイルで呼び出して依存classを適用するのはつらそうなので、FLOCSSでいうところのFoundation, Layout, Object/Component層はお気に入りのCSSフレームワークをglobal scopeで今まで通り適用し、Object/Project層でBEMで頑張っていた箇所をscoped cssにするくらいが今までの方針を大きく変えずに導入していけそう。


感想
====

いままでcss modulesの存在だけ知っていて、どうせ導入めんどくさいんでしょと思ってまったくチェックしてなかったんだけど、あまりの手軽さに驚いた。BEMが苦手な自分としては採用しない理由はない。

webpack, css-loaderを使っていたならまったく難しいことせず、すぐ導入できるかと思います。
詳しい解説は以下に目を通してください。
[webpack/css-loader: css loader module for webpack](https://github.com/webpack/css-loader)
[CSS Modules 所感 - morishitter blog](http://morishitter.hatenablog.com/entry/2015/09/28/103334)
FabricのPython3への対応について

# 概要

FabricがいつまでもPython3に対応していないので、どうにかしてPython3で使えないか調べた結果をまとめました。

- Python3への対応状況
- GitHub上での議論
- `Fabric3`フォークの利用

[追記]

久々に見たら、2018年5月10日、遂に Fabric 2.0 がリリースされ、 Python 3.4 以降で使えるようになりました！

http://docs.fabfile.org/en/2.0/upgrading.html

[/追記]

# 結論

`Fabric3`というフォークがあるので、Python3を使いたい人はそちらを使えば良いとのことです。

```sh
virtualenv -p python3 env
source env/bin/activate
pip3 install fabric3
```

# Fabricについて

FabricはPython製の自動化ツールです。

Fabric自体についての説明は、こちらの記事が非常に参考になりました。ありがとうございます。

http://qiita.com/greenspa/items/fff535d2ae5da36e36fe

まだの方はぜひご覧下さい。


# Python3への対応状況

非常に便利なFabricですが、Python3には対応していません（2016年6月5日現在）。

初めて触ったPythonがPython3だったゆとり世代の自分としては、非常に残念です。

私のような人はたくさんいるようで、GitHubでPython3関連のIssueが16個もあります。

主要なコミッターであるbitprophetさんもPython3への対応の要望にうんざりしているようで、Python3関連のIssueが立つ度に

> Please see the roadmap - http://www.fabfile.org/roadmap.html - alpha for v2 out soon (really).

とコメントしてIssueをロックしています。

例えば[こちらのIssue](https://github.com/fabric/fabric/issues/1417)では、

「Python3で動作するように貢献したいんだけどどうすればいいの？」という質問に対して

「ロードマップ見て、すぐバージョン2が来るから」と回答、その後別の方から

「全部のIssue見たけどさ、ずっと同じこと言ってるじゃん。オープンソースなんだから、もっと他の人に作業してもらえば？」

というコメントがついていました。まあ、その後無言でロックされているわけですが。

# フォーク`Fabric3`を利用する

そのような状況の中で、Fabric3というフォークを作った方がいらっしゃいました。

[こちらのIssue](https://github.com/fabric/fabric/issues/1378)で、パッチの取り込みが提案されています。

「まだPython2.5を切るわけにはいかない」という理由で、ロックされていますが、「Python3で使いたいんだけど」という人に対してはこちらのフォークが推奨されているようです。

インストールは`pip3 install fabric3`とするだけです。

# デメリット

Fabricで冪等性を確保するプラグイン`Cuisine`がPython3をサポートしていないので、利用できません。

「FabricがPython3に対応したら、Cuisineも対応しよう」という[提案](https://github.com/sebastien/cuisine/issues/133)がされているようです。

Cuisineが使えないのはちょっと残念ですが、Fabric3自体は全てのテストを通っており、通常使う分には問題無さそうです。

ちょっと業務で利用してみて、問題があれば追記しようと思います。