OmniAICreator/Qiita-1.07M huggingface dataset:
クラスライブラリからEntity FrameworkでSQL Serverにアクセスするとエラー発生

#はじめに

Entity Frameworkを使ったデータ登録処理をクラスライブラリプロジェクトに置いてバッチとWebから使おうと思い、以下のようなメソッドを作成し、バッチ側から呼び出した。


```csharp:データ登録処理
    public class Class1
    {
        public static void AddTest()
        {
            DataEntities e = new DataEntities();
            
            var b = new Book() { 
                //投入データ設定
            };
            e.Book.Add(b);
            e.SaveChanges();
        }
    }
```

```csharp:起動側処理
    class Program
    {
        static void Main(string[] args)
        {
            Class1.AddTest();
        }
    }
```

#エラー発生

すると以下のようなエラーが・・・

![image](https://qiita-image-store.s3.amazonaws.com/0/70056/bacc9be5-861d-4d04-4dc8-008635f3a5c8.png)


>型 'System.InvalidOperationException' のハンドルされていない例外が mscorlib.dll で発生しました
追加情報:不変名が 'System.Data.SqlClient' の ADO.NET プロバイダーのアプリケーション構成ファイルに登録された Entity Framework プロバイダー型 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer' を読み込めませんでした。assembly-qualified 名が使用されていること、およびアセンブリを実行中のアプリケーションで使用できることを確認してください。詳細については、http://go.microsoft.com/fwlink/?LinkId=260882 を参照してください。

「'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer' を読み込めませんでした。」とな・・・

#原因

検索して以下のページに行き当たる。

[Entity Framework Provider type could not be loaded?](http://stackoverflow.com/questions/14033193/entity-framework-provider-type-could-not-be-loaded)

曰く、EntityFramework.SqlServer.dllが無い事がエラーの原因らしく、Debugフォルダを確認すると確かに見当たらない。
記事を参考に1行追加して以下のように修正。

```csharp:修正後データ登録処理
    public class Class1
    {
        public static void AddTest()
        {
            //◆追加
            var instance = System.Data.Entity.SqlServer.SqlProviderServices.Instance;

            DataEntities e = new DataEntities();
            
            var b = new Book() { 
                //投入データ設定
            };
            e.Book.Add(b);
            e.SaveChanges();
        }
    }
```

すると動くようになりました。
・・・イマイチ感ぱない。
Linuxでディレクトリ配下のplファイルをすべてsyntaxチェックする

Linuxでディレクトリ配下のtgzファイルをすべて解凍する - Qiita
http://qiita.com/oyaguma/items/1e62f757153d3ef39164
より。

```bash:ck.sh
for file in $(ls -1 | grep pl$ )
do
  perl -c $file
done
```

```bash
$ sh ck.sh
a.pl syntax OK
b.pl syntax OK
c.pl syntax OK
d.pl syntax OK
e.pl syntax OK
f.pl syntax OK
g.pl syntax OK
h.pl syntax OK
i.pl syntax OK
j.pl syntax OK
k.pl syntax OK
l.pl syntax OK
m.pl syntax OK
n.pl syntax OK
o.pl syntax OK
```
Emscripten + browserifyでNode.js,ブラウザ向け対応

Node.jsではrequire経由で呼び出す、ブラウザ向けにはbrowserifyで吐き出すようにしたら、わりとソースが整理できたという話。C言語前提になりますが、C++では[Embind](https://kripken.github.io/emscripten-site/docs/porting/connecting_cpp_and_javascript/embind.html)を使うと同じことができます。

## Node.js向けにビルド

まず、とりあえずテキトーにCの関数を作ってコンパイルしてみます。

```c:foo.c
int foo() {
  return 1;
}
```

```
emcc -O2 --closure 1 --memory-init-file 0 foo.c -o foo.js -s EXPORTED_FUNCTIONS="['_foo']"
```

コンパイルオプションを一応説明すると

* `-O2`: 最適化する(asm.jsとか)
* `--closure 1`: closure compilerで圧縮する
* `--memory-init-file 0`: 初期のメモリファイルを外出ししない
* `-s EXPORTED_FUNCTIONS="['_foo']"`: 上のfoo関数をjs上で_fooとしてエクスポートする

といった具合です。これをnodeで実行してみると_foo関数が確かにエクスポートされています。

```
var Module = require('./foo');
Module._foo(); // 1
```

これを最終的にindex.js等でラップした関数を作って外部に公開するようにすれば、Node.js向けのライブラリが作れます。簡単ですね！

```js:index.js
var Module = require('./foo');
module.exports.foo = function() {
  return Module._foo();
};
```

## ブラウザ向けビルド

ブラウザ向けではすこしだけ、コツが要ります。とりあえずwindow.fooにエクスポートしたい感じのコードを書いてみます。

```js:bar.js
var Module = require('./foo');
window['foo'] = function() {
  return Module._foo();
};
```

```
browserify bar.js -o baz.js
```

ブラウザで実行してみるとエラーが出ます。

```
Uncaught TypeError: Module._foo is not a function(…)
```

これはEmscriptenはNode.js向けにはModuleをエクスポートしますがブラウザだとしてくれないからです。

emccするときに`--post-js`で吐き出されるコードの後ろにjsを追加することで回避します。

```js:post.js
module.exports = Module;
```

```
emcc -O2 --closure 1 --memory-init-file 0 foo.c -o foo.js --post-js post.js -s EXPORTED_FUNCTIONS="['_foo']"
browserify bar.js -o baz.js
```

これでブラウザ向けもビルドできますね。

### minifyについて

~~ブラウザ向けにビルドする場合、minifyしたいと思いますが、Emscriptenが吐き出したコードまでminifyするとasm.js用に最適化している部分が消えるので無視するようにして下さい。以下、minifyifyを使った例。~~

```
browserify -p [minifyify --exclude=foo.js --no-map] bar.js -o baz.js
```

@printf_moriken 曰くuglify v2.5.0以降なら`"use asm";`と書かれたスコープ内は空白削除だけということなので安心してminifyできます。

## まとめ

Emscripten + browserifyでNode.js,ブラウザ向け対応を行う方法を紹介しました。実際に[ukyo/zlib-asm](https://github.com/ukyo/zlib-asm)で同じことをしていますので、よければこちらも参照して下さい。
elasticsearchを利用するときは容量を管理しようという話

awsのelasticsearch serviceをサービスのログ可視化に使う為にテスト運用を行っていた時に起こった事件をtipsとしてまとめました。

# ある日kibanaを見たらログが全然入ってなかった

5分置きにs3に上がるelbログをlambdaでelasticsearchに流しているのに、last 15 minutesのログが表示されなかった。
Todayで見ると、なぜか日本時間AM9時からログが入ってなかった（AM10時実行時）。

## lambdaの実行ログを見るとエラーが

403エラー？えっ認証エラー・・？

~~~json
{
   "error": "ClusterBlockException[blocked by: [FORBIDDEN/8/index write (api)];]",
   "status": 403
}
~~~

## エラー内容をgoogle先生に聞いても英語の記事ばっか・・
英語が出来なくてごめんなさい。

## getは出来るんだけどね・・

getでは今まで通りレスポンスが返ってくる。
サーバーはちゃんと動いているみたい。

# そんなときはelasticsearchのFreeStrageSpaceを確認しよう

awsコンソールのelasticsearchの該当ドメイン、またはcloudwatchの該当ドメインから見ることが出来ます。
この値が0になっていないですか？
0になっていたら（エラーメッセージは不自然ですが）getができてpostが出来ないのは理由がつきました。

# 解決方法
用件によってアプローチ方法は異なりますね。とりあえず列挙します。

## elasticsearchの容量を上げる
インスタンスタイプを上げる方法と、EBSを追加する方法があります。これは排他ではないので、両方行う事が出来ます。

## 容量を節約する
elasticsearchにはデータの保存期間を設定することができます。
データの利用用途から、一週間で破棄するとか、一日で破棄するとか適切に設定出来ると良いですね。

## FreeStrageSpaceにアラートを仕込む
cloudwatchで簡単に仕込めるはずです。
対応できる時間を考慮してアラートのしきい値を決めましょう。

# 適切にデータを送れるようになったね！

私の場合はEBSを追加して、なおかつTTLを一週間に設定しました。
無事に・・・

~~~json
{
  "_index":"logs",
  "_type":"elb",
  "_id":"xxxxxxxx",
  "_version":1,
  "created":true
}
~~~

再度、ログがインポートされるようになりました！やったね！
Pythonスクリプト for 広島大学非SSO認証ログイン/ログアウト

Python script for HINET login without SSO/logout (Hiroshima-univ)

Pythonとseleniumの練習のために
広島大学の非SSO認証のログインとログアウトを端末上で行うための
プログラムを書いた

- SSO認証には対応できなかった
- 需要なし
- ターミナル用
- X11 Forwarding使いたくない時用


ログイン(login)
```
./nsso.py login
```
ログアウト(logout)
```
./nsso.py logout
```

X11 Forwarding使いたくないなら
```
DISPLAY=unix:0.0 ./nsso.py login
```
とか...

```Python:nsso.py
#!/usr/bin/env python2
# coding: utf-8

# program for Only "without SSO" !!!!!!

#sudo pip install selenium

from selenium                       import webdriver
from selenium.webdriver.common.by   import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui  import Select
from selenium.common.exceptions     import NoSuchElementException

from getpass                        import getpass
import sys
#import re

#   https://idp.media.hiroshima-u.ac.jp/idp/Authn/UserPassword
#   https://hinet.hiroshima-u.ac.jp/loginweb.html
def logout(browser):
    try:
        browser.get('https://hinet.hiroshima-u.ac.jp/cgi-bin/Logout.cgi')
        browser.close()
        print "logout success!"
    except:
        print "ERROR!!!"
        browser.close()


def without_sso_login(browser):
    try:
        browser.get('https://hinet.hiroshima-u.ac.jp/login_frame.html')
        username = raw_input("Username :")
        password = getpass(  "Password :")
        browser.find_element(By.NAME,"uid").send_keys(username)
        browser.find_element(By.NAME,"pwd").send_keys(password)
        #raw_input("y:")
        browser.find_element_by_xpath("//input[@type='submit']").click()
        page=browser.page_source
        if page.count("Login succeeded") >= 1 :
            print "login success!"
        else:
            print "login filure..."
        browser.close()
    except:
        print "ERROR!!!"
        browser.close()

if __name__ == '__main__':
    param = sys.argv
    print "login : [./nsso.py] or [./nsso.py login]"
    print "logout: [./nsso.py logout]"
    print "SSO    :https://idp.media.hiroshima-u.ac.jp/idp/Authn/UserPassword"
    print "Not SSO:https://hinet.hiroshima-u.ac.jp/loginweb.html"
    print "              ---> https://hinet.hiroshima-u.ac.jp/login_frame.html"
    browser = webdriver.Firefox()
    if len(param) == 2 and param[1]=="logout":
        print "=======LOGOUT========="
        logout(browser)
        print "======= END ========="
    elif (len(param)==2 and param[1]=="login") or len(param)==1:
        print "=======LOGIN========="
        without_sso_login(browser)
        print "======= END ========="
```
docker-machineで作成した仮想マシンの中で、NFSマウントをする

# 概要

docker-machine で作成したマシンの中からNFSでマウントしたい。

```
mkdir $PWD/work
sudo mount -t nfs -o rw 192.168.99.1:/some/directory $PWD/work
```

と打ってみたのだが、返ってこなかった。

# 結論

nfs-clientを起動する

```
sudo /usr/local/etc/init.d/nfs-client start
```

以上のコマンドを実行したあと、マウントすると、マウントできた。

# 参考

Macだと、[adlogix/docker-machine-nfs: Activates NFS on docker-machine](https://github.com/adlogix/docker-machine-nfs) というのがあるようだ。


[docker-machine-nfsでOSXのディレクトリをマウントする - Qiita](http://qiita.com/hnakamur/items/b899f06c942629c211e9)
ServletContextListenerにてSpringのBeanなどリソースを取得する方法


こんなServletContextListenerがありまして：

```java
@Override
public void contextInitialized(ServletContextEvent event) {
    String mode = "Springプロパティファイルに定義された定数";
    if ("xx".equals(mode)) {
        // ある業務処理
    }

}
```

`contextInitialized`にSpringプロパティファイルに定義されたものがある条件を満たす場合のみ、「ある業務処理」が実行されます。

もちろん、web.xmlにも`<init-param>`が使えますが、できるだけSpringの資産を流用したいので、`web.xml`を修正しない方針です。

したがって、`contextInitialized`にてSpringのContextを取得するとなりました。

修正後、メソッドの中身はこうなります：

```java
ApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(event.getServletContext());
Environment env = context.getBean(Environment.class);
String mode = env.getProperty("some-prop");

if ("xx".equals(mode)) {
    // ある業務処理
}
```


**注意：** ちなみに、`web.xml`にて`ServletContextListener`の位置は`org.springframework.web.context.ContextLoaderListener`の後ろにしなければなりません。
Ethereumのテストネット+Web3.jsで簡単なnode.jsとhtmlのサンプルが動いたのでメモ

Ethereumのテストネット+Web3.jsでごにょごにょして、簡単なサンプルが動いたのでメモ。

Step１
ここを参考にgethを使ってContractを作成・実行するまでやってみた。
http://book.ethereum-jp.net/

Step2
ここを参考にnode環境にweb3.jsをインストールしてnode-app.jsを実行。
https://github.com/ethereum/wiki/wiki/JavaScript-API
node-app.jsはここです。もっと単純にコーディングもできることも確認。https://github.com/ethereum/web3.js/blob/master/example/node-app.js
nodeからはgethクライアントにアクセスするので--rpcオプション付きで起動しておく必要があります。これの説明がなくてハマったorz
これでnode.jsでブロックチェーンアプリが作れます。

Step3
ここのbalance.htmlを実行してみた。添付写真の通り。coinbaseの残高が表示されてます。
https://github.com/ethereum/web3.js/blob/master/example/balance.html
これもgethクライアントにアクセスするので--prcとさらに--rpccorsdomain="*"(クロスドメイン設定)を追加してgethを起動しておく。
これでhtmlを使ったブロックチェーンアプリが作れます。ただし、gethクライントに接続可能な状態にしておくので荒らされる可能性もあり、node.jsで作るのがよいかも？

<img width="607" alt="スクリーンショット 2016-03-03 18.05.12.png" src="https://qiita-image-store.s3.amazonaws.com/0/23175/8ca1d257-6a3d-62ca-cf06-3c13cd192109.png">
フィボナッチ数のStreamを作成する

フィボナッチ数をStreamで扱ってみました。

## サンプル

```java
import java.math.BigInteger;
import java.util.stream.Stream;

/**
 * フィボナッチ数をストリームで生成するサンプル
 */
public class Fibonacci {

    /**
     * 1000以上のフィボナッチ数を5件出力する。
     * 
     * @param args
     */
    public static void main(String[] args) {
        fibonacciStream()
            .filter(n -> n.compareTo(BigInteger.valueOf(1000l)) >= 0)
            .limit(5l)
            .forEach(System.out::println);
    }
    
    /**
     * フィボナッチ数列のストリームを返す。
     * 
     * @return フィボナッチ数列のストリーム
     */
    public static Stream<BigInteger> fibonacciStream() {
        return Stream.iterate(
                    new BigInteger[]{BigInteger.valueOf(1l), BigInteger.valueOf(1l)},
                    n -> {
                        BigInteger tmp = n[1];
                        n[1] = n[0].add(n[1]);
                        n[0] = tmp;
                        return n;
                    }
                )
                .map(n -> n[1])
                ;
    }
    
}
```

## 解説

少しだけ解説します。

### フィボナッチ数列

0, 1を起点に1, 2, 3, 5, 8, 13, 21, 34 …のように1つ前と2つ前の数値を合算したものが続いていく数列です。

### Streamを使用せずに実装（whileループ）

```java
int num1 = 0;
int num2 = 1;
int cnt = 0;
List<Integer> list = new ArrayList<Integer>();
while (++cnt <= 10) {
    int tmp = num2;
    num2 = num1 + num2;
    num1 = tmp;
    list.add(Integer.valueOf(num2));
}
System.out.println(list.toString());

// 出力結果は以下のとおり
// [1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
```

### Streamを使用して実装

#### 無限ストリームを作成

```java
Stream
    .iterate(
        new BigInteger[]{BigInteger.valueOf(1l), BigInteger.valueOf(1l)},
        n -> {
            BigInteger tmp = n[1];
            n[1] = n[0].add(n[1]);
            n[0] = tmp;
            return n;
        }
    )
    .map(n -> n[1])
    ;
```

iterateで無限ストリームを生成できます。
1つめのメソッドパラメータは最初の要素です。
2つめのメソッドパラメータは前の要素を元に新しい要素を返すための関数になります。

mapでBigInteger配列のフィボナッチ数を持つ要素のみ返すようにしています。

#### フィルタ、リミット、結果出力

```java
Stream.iterate(
        new BigInteger[]{BigInteger.valueOf(1l), BigInteger.valueOf(1l)},
        n -> {
            BigInteger tmp = n[1];
            n[1] = n[0].add(n[1]);
            n[0] = tmp;
            return n;
        }
    )
    .map(n -> n[1])
    .filter(n -> n.compareTo(BigInteger.valueOf(1000)) > 0)
    .limit(5)
    .forEach(System.out::println);
```

filterで条件を指定し、limitで制限掛けて、forEachでSystem.out.printlnを実行して出力しています。
linuxのvimからmacのvimに移行してハマった点

# はじめに
* linux上での作業をメインにしていたので、localのmac(vim)はほぼ使わず、放置してました。
* macのvimを使うことになったのでその時ちょっとハマった点をまとめておく。

# mac
mac book air OS X El Capitan

# ハマった点1
vim lua有効が有効ではない

## 対応
1. vimを一度アンインストール

```
brew uninstall vim
```

2. luaを有効にしてinstall

```
brew install lua
brew install vim --with-lua
```

3. 確認

```
➜  ~ vim --version | grep lua
+dialog_con      +lua             +rightleft       +windows
```


# ハマった点2
vimの非同期処理、neocompleteとかで使う`vimproc`がない

1. 下記の設定を追加

```.vimrc
if has('mac')
  let g:vimproc_dll_path = $VIMRUNTIME . '/autoload/vimproc_mac.so'
endif
```

# その他
* `.vimrc`をそのまま持ってきて`:NeoBundleInstall`すれば同じプラグインは全部入るはず。
* プラグインのレポジトリ(github)とかなくなってたらできないと思うけど

# 結果
ゆうほどハマってないという
CS-Cart:ブロックのキャッシュを無効にする

CS-Cartでファイルのブロックテンプレートを変更している時、ブロックのキャッシュが有効になっていると、すぐに反映されなくて開発しにくい。ブロックのキャッシュを無効にするには、config.local.phpもしくはlocal_conf.phpに下記の宣言を行う。

```php
$config['tweaks']['disable_block_cache'] = true;
```

関連

[CS-Cartでデバッグモードを有効にする - Qiita](http://qiita.com/suin/items/eab72fb393962487fdca)
[CS-Cart: テンプレート・翻訳・Add-onの更新方法 - Qiita](http://qiita.com/suin/items/5a5925c23d582af73a61)
[CS-Cartのテンプレートキャッシュを更新する - Qiita](http://qiita.com/suin/items/820c1381a5e1c6591896)
[CS-Cart:キャッシュがクリアされない問題 - Qiita](http://qiita.com/suin/items/2801e2715a2c4eab15ce)
Macで今すぐGoogle App Engine JAVA 


1.Google Plugin for Eclipseをインストール

Eclipseのメニューから「Install New Software...」を選択。
（日本語化がうまくできてないな〜）

![スクリーンショット 2016-03-02 22.00.44.png](https://qiita-image-store.s3.amazonaws.com/0/102238/232f2e22-2f06-1112-94d9-046f068aba67.png "スクリーンショット 2016-03-02 22.00.44.png")

作業対象に`google - https://dl.google.com/eclipse/plugin/4.4」`を入力
https://developers.google.com/eclipse/docs/getting_started


出できたのをすべて選択してインストール実行。
![kobito.1456924448.301994.png](https://qiita-image-store.s3.amazonaws.com/0/102238/501bb37d-3105-c647-b324-6065eca60743.png "kobito.1456924448.301994.png")

２．プロジェクトの作成
Eclipseメニューの[ファイル]-[新規]-[Webアプリケーション・プロジェクト]を選択
![スクリーンショット 2016-03-03 3.47.05.png](https://qiita-image-store.s3.amazonaws.com/0/102238/64a835fc-b7cb-fb50-c8f9-5003a5052b46.png "スクリーンショット 2016-03-03 3.47.05.png")

プロジェクトの作成画面が表示されるので以下のように設定し作成。

プロジェクト名：任意
パッケージ名：任意
ロケーション：任意
Google Web ツールキットの使用：しないというかよくわらんのでチェックを外す（JavaからAjaxを生成するフレームワークらしい）
Google App エンジンを使用する：チェック有り


![スクリーンショット 2016-03-03 3.45.46.png](https://qiita-image-store.s3.amazonaws.com/0/102238/fe6192ae-1023-8c22-880c-b49cd0a7e535.png "スクリーンショット 2016-03-03 3.45.46.png")

３．ローカルで実行。
Eclipseメニューの実行またはツールバーの実行アイコンからプロジェクトを実行。
ブラウザにてlocalhost:8888にアクセス
Hello App Engine!と表示される。
このファイルの実体はwar/index.html

![kobito.1456945550.471341.png](https://qiita-image-store.s3.amazonaws.com/0/102238/13cf471b-99b0-6909-a56a-385713633719.png "kobito.1456945550.471341.png")

さらにプロジェクト名のリンクをクリック
Hello,worldが表示される。
実体はsrc/プロジェクト名Servlet

![kobito.1456945708.457908.png](https://qiita-image-store.s3.amazonaws.com/0/102238/a8029e43-2b5e-7e76-426e-9e3c49d8e93e.png "kobito.1456945708.457908.png")

４．デプロイ
Eclipseメニューの[プロジェクト]-[プロパティ]を選択し表示されたウインドウの左メニューからGoogleを選択しアプリケーションIDとバージョンを指定。
※アプリケーションIDはなんぞとなやんだけどgoogleのDeveloper Consoleで作成したプロジェクトIDと同義の模様

![スクリーンショット 2016-03-03 4.13.07.png](https://qiita-image-store.s3.amazonaws.com/0/102238/6a76cee0-6167-4ac6-29ef-6ecd894e8654.png "スクリーンショット 2016-03-03 4.13.07.png")

ツールバーのgoogleアイコンをクリックで表示されるプルダウンからデプロイを選択
![スクリーンショット 2016-03-03 17.31.40.png](https://qiita-image-store.s3.amazonaws.com/0/102238/fb58430d-72b5-5532-9f05-8b514e652c8c.png "スクリーンショット 2016-03-03 17.31.40.png")

プロジェクト等を確認して配置をクリック。

![スクリーンショット 2016-03-03 17.39.41.png](https://qiita-image-store.s3.amazonaws.com/0/102238/23563d74-0c62-346b-015f-5d659f394559.png "スクリーンショット 2016-03-03 17.39.41.png")

完了！
![スクリーンショット 2016-03-03 17.45.29.png](https://qiita-image-store.s3.amazonaws.com/0/102238/85990a3f-afb2-2a3c-9e8a-27e158fb95ee.png "スクリーンショット 2016-03-03 17.45.29.png")


サーブレットも動いてます。
![スクリーンショット 2016-03-03 17.45.20.png](https://qiita-image-store.s3.amazonaws.com/0/102238/bfc35f9b-410b-003c-b627-54bf2face95d.png "スクリーンショット 2016-03-03 17.45.20.png")


便利な世の中です。
Windowsの国際化について

Windowsは好きではないのだが、仕事で使わざるを得ないので使っている。
今回は、Windowsアプリの国際化について、調べたこととわからないことを書く。

# 基本的なこと

- Unix系のOSでは、文字/文字列を表す型として、char/wchar_t があり、中にどんな文字コードの文字が入っているかはプログラマが理解して使う。charの文字列リテラルは "abc" のように表記し、wchar_t の文字列リテラルは L"abc" のように表記する。
- Windows のC/C++では、そもそもプロジェクトの設定に「文字セット」と言う項目があり、「指定なし」「マルチ バイト文字セットを使用する」「Unicode 文字セットを使用する」を選ぶ。
- Windowsで文字を表す型としては、char/WCHAR/TCHAR がある。
- WCHAR は wchar_t のtypedef であり、TCHAR は上記プロジェクト設定によって、char または WCHAR の typedef となる。
- char の文字列に何が入っているかはプログラマ依存であるが、WCHAR の文字列には UTF-16LE の文字列が入っていることになっている。
- MFCを使用する場合の「文字セット」の「マルチ バイト文字セットを使用する」はVisualStudio 2013 から非推奨となっており、将来的なサポートは保証されない。

# Windows のAPIセット

- Windows のシステムコールやMFCの関数群は、「マルチ バイト文字セット(もしくは指定なし)」用と「Unicode 文字セット」用で別のものが用意されている。
- 通常のシステムコールは「マルチ バイト文字セット(もしくは指定なし)」用は関数名の後ろに「A」(AはmbcsではなくANSIから来ているらしい)が付き、「Unicode 文字セット」用は「W」が付く。そして、「文字セット」の設定によってAもWも付かない関数名にdefineされる。
- なので、普通に char/WCHAR どちらでもビルドできるプログラムを作るには、char/WCHAR を使わずに TCHAR を使い、AやWがつかない関数名を使えば良い。
- のだが、ここにMicrosoftの迷走があって、綺麗に行かないことが多い。
 - 例えば、文字列の長さを調べる関数を例に取ると、Cの標準関数ではstrlenと言うものがあるが、Windowsだとこれに該当するものとして strlen, _mbslen, wcslen の3つがある。そして、上記の AやWがつかないもの相当として、_tcslen, _tcsclen の二つがある。(そして、_mbstrlenとか、後ろに_lがついたものもある)
 - 基本的にはマルチバイト用は mbs が接頭につき、ワイドキャラ用は wcs が接頭につくのだが、関数によって _ が付くものと付かないものがある。
 - 後ろに w が付いたり付かなかったり、前にwが付いたりするものもある。
 - ものによっては、ANSI版が用意されているのにUnicode版が用意されていないものもある(_gcvtとか)

# MFCのMBCS

- Microsoft の現在の推奨は、「文字セット」に「Unicode 文字セット」を指定しろ、と言うものである。
- 推奨設定であれば、レガシーなライブラリであるMFCを使っていても、一応国際化があまり悩まずにできる。
- 問題は、「マルチ バイト文字セット(もしくは指定なし)」設定のプロジェクトでは、使える言語がOSのシステム ロケールの設定に引きずられてしまい、別の言語の文字の表示ができなくなること。
- OSのシステム ロケールは、コントロールパネルの「地域と言語」を開き、「管理」タブの「Unicode 対応ではないプログラムの言語」にある「システム ロケールの変更(C)...」で変更する。この設定を変更すると、OSの再起動を要求される。
- 「形式」タブで設定できる内容は、日付や通貨の設定だけで、実際の言語は切り替えられない。
- ロケールを切り替えなくても、WideCharToMultiByte 等の関数を使えば、文字コードの変換はできる。
- Windowsにも setlocale とか、_setmbcp とかすごく効きそうな関数があるのに、これらを呼んでも上記「システム ロケールの変更」と同等のことは実現できない。
- つまり、MBCSで書いたMFCアプリは、動的に言語を切り替えたりできない。

このくらいまで調べて手詰まりなのである。
WCSを使うようにアプリを書き換えない限り、MFCのアプリに未来はないのか？
CakePHP3でShellのテストをする

bakeでShellのテストファイルを作れますが、それ以外に書いてあるものがあんまりないので、少し書こうと思います。

一応参考：
[Cakebook 3.x Shells, Tasks & Console Tools](http://book.cakephp.org/3.0/en/console-and-shells.html)
[Cakebook 3.x Testing](http://book.cakephp.org/3.0/en/development/testing.html)

# 実行のテストをする

Shellの実行は、`runCommand()`でテストできます。
`getOptionParser()`で記述した引数オプション付きの実行もこれでテストできます。

```php:HogeShellTest.php
public function setUp()
{
    parent::setUp();
    $this->io = $this->getMock('Cake\Console\ConsoleIo');
    $this->Hoge = new HogeShell($this->io);
}

public function testTypeOption()
{
    $this->Hoge->initialize();
    $this->Hoge->runCommand(['--type', 'type1']);
}
```

なお、`initialize()`も書かないと勝手には実行されないので、`setUp()`に書くか、`initialize()`内の処理のテストも書きたい場合は各テストに毎回書く必要があります。

# abortをテストする

Shellの実行を、エラーなどの理由で途中で終わらせたい場合は、`$this->abort()`を使います。(CakePHP3.2から追加されました。3.1までは`$this->error()`でした。)
この`abort()`が実行されているかをテストしたい場合は、`abort()`はStopExceptionの例外を投げるので、`setExpectedException()`を使います。

```php:HogeShellTest.php
public function testAbort()
{
    $this->Hoge->initialize();
    $this->setExpectedException('Cake\Console\Exception\StopException');
    $this->Hoge->runCommand([]);
}
```

CakePHP2の時は、`$this->setExpectedException('StopException')`と書けば良かったのですが、3だと`Cake\Console\Exception\`から書かないとダメみたいです。
Githubでレポジトリをクローンする時はsshではなくhttp推奨


http通信の方がssh通信より高速なため、git cloneする際はhttpでクローンする。

```
$ git clone https://github.com/user/repo.git
```

http通信になっているか確認する。

```
$ git remote -v
origin https://github.com/user/repo.git (fetch)
origin https://github.com/user/repo.git (push)
```

ただし、httpでクローンすると、pushする際に毎回ユーザ名とパスワードを聞かれるため面倒。http通信からssh通信に変更する。

```
$ git remote set-url origin git@github.com:user/repo.git
```

ssh通信に変更されているか確認する。

```
$ git remote -v
origin git@github.com:user/repo.git (fetch)
origin git@github.com:user/repo.git (push)
```

これでssh通信に変更される。

## 参考URL
http://tech.nitoyon.com/ja/blog/2013/01/11/github-clone-http/
http://qiita.com/keisuke2236/items/df7d4c2cf621eeddd468
【備忘録】【未解決】mavenプロジェクトじゃないJavaプロジェクトを、maven化しようと思った時の課題点

# 発端
いや、そのまんまなんですが、理由があって非 maven プロジェクトを maven プロジェクトにする必要があり、その時に浮上した課題を忘れないようにメモしておきます。
何かいい方法があったら加筆するか別記事にするかします。

# 「自分が使ってるライブラリ」がわからない
上の説明は正確じゃないですね。 **他人が作った** 非mavenプロジェクトをmaven化する必要があったんです。
当然dependencyをつらつらとpomに書くんですが、「実行に必要なライブラリ」はわかるんです。SVNにjarが全部あるから。「そのプロジェクトが使ってるライブラリ」がわからない。

いや、頑張って調べればきっとわかるんです。全部の import 文を grep して、 sort uniq でもして、使ってるクラスの FQDN を並べた後に、そこにある jar の中の全てのクラスと突合して、あぁ、これとこれ使ってるのかー。

やりたくないじゃーん

なんか無いかなー、と思いながら、メモメモ。
bash：ヒアドキュメントを使って環境変数に代入する

VARという環境変数に

```
abc'asdf"
$(dont-execute-this)
foo"bar"''
```

という複数行の文字列をセットしたい。シングルクォートやダブルクォートも含んでいるので、ヒアドキュメントを使いたい。

【解答】
http://stackoverflow.com/questions/1167746/how-to-assign-a-heredoc-value-to-a-variable-in-bash より

```
$ read -r -d '' VAR <<'EOF' || true
abc'asdf"
$(dont-execute-this)
foo"bar"''
EOF
```

```
$ echo "$VAR"
abc'asdf"
$(dont-execute-this)
foo"bar"''
```

【解説】
`read`の`-r`はバックスラッシュでのエスケープを無効化するため。`-d ''`は改行で入力を終わらなくさせるため。
`|| true`をつける理由は、`read`が非ゼロで終了するので、`set -e`しているスクリプトの中に書くとエラー終了してしまうため。


`echo`するときに`$VAR`をダブルクォートで囲まないと改行がスペースに置き換わってしまうので注意。
REST APIを実装するときに気をつけるべき CORSの問題 | MDN 



HTTP access control (CORS) | MDN 

https://developer.mozilla.org/ja/docs/HTTP_access_control#Preflighted_requests


XMLHttpRequest オブジェクトにより発行された HTTP リクエストは 同一生成元ポリシー (same-origin policy) の制約を受けます。
→自身が読み込まれたドメインにのみ HTTP リクエストを発行でき、他のドメインには発行できない


## Cross-Origin Sharing 標準仕様 

クロスサイト HTTP リクエストを可能にするために使用します
 
ブラウザが HTTP の OPTIONS リクエストを使用してサーバーに対してサポートしているメソッド要求する "プリフライト" を行って、サーバーの "認可" に基づき実際のリクエストを実際の HTTP メソッドにより送信することを認めています。

サーバーは、"クレデンシャル" (Cookie や HTTP 認証データを含む) をリクエストとともに送信するべきかをクライアントに通知することもできます。


### サーバーサイドの実装例

Server-Side_Access_Control
https://developer.mozilla.org/en-US/docs/Web/HTTP/Server-Side_Access_Control

Examples of CORS in Action 
http://arunranga.com/examples/access-control/


### エラーメッセージ

```
Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
 Origin 'null' is therefore not allowed access.
```

file://URLから実行している場合
２つの「cross-domain XHR is OK.」というメッセージを伝えるやり方が２つある。

-- One is to send Access-Control-Allow-Origin: *
 
-- echo back the contents of the Origin header. However, file:// URLs produce a null Origin which can't be authorized via echo-back.


Expressでの対応方法
http://enable-cors.org/server_expressjs.html
OpenSSLのアップデート


http://www.security-next.com/067392
という事があったので、MacのOpenSSLをアップデートしてみた。

# Homebrewのアップデート
まず、パッケージ管理ツールのアップデートをしたり、本当に古いのを使っているか確認します。

```
$ brew update
# 古ければこの時点で、このパッケージのversion古いよと言ってくる。でも一応確認します。

$ which openssl

/usr/bin/openssl

$ openssl version

OpenSSL 0.9.8zf 19 Mar 2015

# やばい本当に古い...。どうしよう。
```

# アップデートしよう
```
$ brew upgrade openssl
$ brew link openssl --force
$ which openssl
/usr/local/bin/openssl

$ openssl version
OpenSSL 1.0.2g  1 Mar 2016

```

よし、これでヒト安心。
Railsサーバを起動できない時に試してみるポイント


## サーバが既に起動していためエラーが出る

```
$ rails s
=> Booting WEBrick
=> Rails 3.2.14 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown serverA server is already running. Check /worktest/sample/tmp/pids/server.pid.Exiting
```

サーバ起動中であるためrails serverとすると「server is already running」とエラーがでてしまう。
起動中のプロセス一覧を表示する。

```
$ ps aux | grep rails
	:
	:
	:
	:
76053   0.0  0.0  2423376    324 s001  R+    6:09PM   0:00.00 grep rails
39598   0.0  0.2  2542512  18880   ??  S     4:56PM   0:02.77 ruby /Users/jizoo/test_app/bin/rails s # ここで起動している
```

起動中のプロセスIDをkillで終了する。

```
$ kill -9 39598
```

もう一度rails serverでWEBrickサーバを起動すると問題なく起動が完了する。

##参考サイト
http://qiita.com/ytr_i/items/f5114cfb9ba3b0631bc0
http://dfcblog.net/2013/04/%e6%97%a2%e3%81%abrails%e3%81%8c%e8%b5%b0%e3%81%a3%e3%81%a6%e3%81%84%e3%81%9f%e3%81%9f%e3%82%81%e8%b5%b7%e5%8b%95%e3%81%a7%e3%81%8d%e3%81%aa%e3%81%84%e5%95%8f%e9%a1%8c.html
rbenvでRubyの環境を最新の状態にする方法


rbenv, ruby-buildを最新に更新する。

```
$ brew update
$ brew upgrade ruby-build
```

rbenvでインストール可能なリストを確認する。

```
$ rbenv install --list
Available versions:
  ...
  2.1.0-preview2
  2.1.0-rc1
  2.1.1 # 最新バージョン
  ...
```

Rubyの最新バージョンをインストールする。

```
rbenv install 2.1.1
rbenv versions
  system
  2.1.0
* 2.1.1 (set by /Users/username/.rbenv/version)
```

インストール済みのバージョンを確認する。

```
ruby -v
ruby 2.1.1p76 (2014-02-24 revision 45161) [x86_64-darwin13.0]
```

デフォルトで使用するRubyのバージョンを指定する。

```
rbenv global 2.1.1
```

古いバージョンをアンインストールする。

```
rbenv uninstall 2.1.0
```

###Railsインストール

```
$ gem install rails   # railsの最新バージョンをインストール 
$ gem list rails   # インストールされているのを確認
   *** LOCAL GEMS ***
   rails (4.0.0)
```

インストールしたgemを有効にするために以下を実行

```
$ rbenv rehash
```

##うまくいかない場合
依存しているruby-buildがrubyのバージョンに関係ある
/.rbenv/plugins/ の中にあるruby-buildを最新にすればいいらしい。

```
$ cd .rbenv/plugins/ruby-build
$ git pull origin master
```

なぜ下記の brew で最新にならないんだろか。
2重に install されている気がする。

```
$brew upgrade ruby-build
```

##参考サイト
http://qiita.com/yujiroarai/items/56f40b0a1fecff2cd11c
https://gist.github.com/mochiz/4736183
http://qiita.com/yahsan2/items/afbabacfd414d13a1504
Cloud9とGitHubの連携メモ

Cloud9 のコンソールから GitHub と連携ができる。

![0eb83c89-0bb3-6ba0-d08e-acb40204b9f8.png](https://qiita-image-store.s3.amazonaws.com/0/115934/8f23d375-ae19-bbd1-f273-e6c5735c5324.png)


```
git init
git add .
git commit -m "<コミットメッセージ>"
git remote add origin gir@github.com:<gitしたいディレクトリ>
git commit
git push -u origin master
```

※Gitのディレクトリは以下から取得

![GitHub_SSH_Code.png](https://qiita-image-store.s3.amazonaws.com/0/115934/5c3335c4-2383-debc-b5a1-e1880579ecae.png)
railsでのmysqlの導入の手順　

rails 4.2です。
環境はvagrant。



##`-d mysql`をつけてアプリを作成

`$ bundle exec rails new アプリ名 --skip-bundle -d mysql`


これで、`gemfile`を見てみると、デフォルトだとgemがsqliteのところが、mysqlに変更されている。

`config/database.yml`ここもちゃんとデフォルトのsqliteではなく、mysqlに変更されている。


##--skip-bundleしているのでgemはまだインストールされていないからする。

けどその前に、

javascriptのruntimeというのがないと`bundle exec rake db:create`する時にエラーがでるのでその`therubyracer`というgemを加える。
`therubyracer`はgemfileにもともとあってコメントアウトされているので、コメントアウトをはずすだけで良い。


```lang:gemfile

# See https://github.com/rails/execjs#readme for more supported runtimes

# gem 'therubyracer', platforms: :ruby

```


```lang:gemfile

# See https://github.com/rails/execjs#readme for more supported runtimes

 gem 'therubyracer', platforms: :ruby


```

`$ bundle install`


##データベースをcreateする

`$ rake db:create`

これで、もし、

`Specified 'mysql2' for database adapter, but the gem is not loaded. Add `gem 'mysql2'` to your Gemfile (and ensure its version is at the minimum required by ActiveRecord).`

というエラーがでたら、

`$ bundle update`して、

`$ bundle install`。

これで、`$ bundle exec rake db:create`。
EI Captianでbundle installを使ってtherubyracerがインストールできない



# 環境
* therubyracer: 0.12.1

# 解決策

```
gem uninstall libv8
brew rm v8

brew tap homebrew/dupes
brew install apple-gcc42

brew tap homebrew/versions
brew install v8-315
brew link --force v8-315
```

bundleでinstall

```
bundle config build.libv8 --with-system-v8
bundle install --path vendor/bundle
```

その後にupdateする

```
bundle update libv8
bundle update therubyracer
```

# 参考
* http://qiku.es/pregunta/394369/instale-therubyracer-joya-en-os-x-1011-el-capitan-install-therubyracer-gem-on-osx-1011-el-capitan
* http://journal.sooey.com/233
Macで複数の画像を一括でリサイズする AppleScript （サムネイル化などに）

## はじめに
　沢山の写真をWebページなどにあげようとすると、そのままでは大きすぎるのでサイズを小さくしたいときに便利な AppleScript を書きました。
　画像データが入っているフォルダを指定すると、変換するサイズ（幅のピクセル値）を聞いてきます。後は自動でフォルダ内の画像データが指定したサイズに変換されます。

**注意：** フォルダ内の画像は全てリサイズされ元データは残りませんので、必ずコピーをしてからご利用ください。

## AppleScript のソース
　以下、ソースです。
　アイコン付きの画像データにしたいときには、
` save this_img in aFile as JPEG`
の行を
` save this_img in aFile as JPEG with Icon`
とします。

```AppleScript:imagesize.scpt
-- 指定したフォルダー内の画像データを指定した幅になるよう縮小します。
-- 幅の指定はピクセル値で指定します。
-- 【注意】フォルダーまでのパスの中に、空白等が入っていると動作しません。
-- wtitten by ynomura.com

set outputFolder to POSIX path of (choose folder with prompt "サイズを変換する画像が入っているフォルダーを指定")
display dialog "返還後の幅をピクセル値で指定" default answer 150
set pixSize to text returned of result

set aList to list folder outputFolder
tell application "Image Events"
	launch
	repeat with img in aList
		if (text of img) = ".DS_Store" then
		else
			set aFile to outputFolder & img
			set this_img to open aFile
			scale this_img to size pixSize as integer
			save this_img in aFile as JPEG
			close this_img
		end if
	end repeat
end tell
```
PHPで「Only variables should be passed by reference....」エラー


```php:PHP
return array_pop(explode(',', $text));
```
みたいなことをしようとしたらNoticeエラー吐いてた。

```sh
Notice: Strict (2048): Only variables should be passed by reference in ...
```

`array_pop()`に限らず、PHPでは参照渡しを要求するメソッドに値を直接渡して呼び出すと、上記のようなエラーを吐く。

ので、一旦渡す値を変数に格納する必要がある。

```php:PHP
$exploded_text = explode(',', $text);
return array_pop($exploded_text);
```

めでたし。
Sketchで簡単に先が角丸のプログレスバーをつくる方法

mediumより転載

参照元：https://medium.com/sketch-app-sources/sketch-tip-how-to-make-a-round-progress-bar-24931ee8b1fd#.1jroifpeh

![alt](https://cdn-images-1.medium.com/max/1600/1*jMPCmeiOmbn85BXNRM-2zw.gif)
WPFでコントロールからフォーカスを外す方法

# はじめに
WPFのコントロール（TextBoxなど）にフォーカスが当たっている状態から、フォーカスを外す方法に、一瞬悩んだのでメモ＆情報共有のため寄稿します。

# やりかた
```csharp
System.Windows.Input.Keyboard.ClearFocus();
```

> MSDN該当箇所
> [https://msdn.microsoft.com/ja-jp/library/system.windows.input.keyboard.clearfocus(v=vs.110).aspx](https://msdn.microsoft.com/ja-jp/library/system.windows.input.keyboard.clearfocus(v=vs.110).aspx)

以上！

# 経緯
WPFアプリ作成中にバックグラウンドで特定処理を実施し、完了後、画面を更新するという振る舞いを作っていた際に、TextBoxとかにフォーカスが当たった状態だと結果が更新されなくなる事象が発生しました。
根本的な原因は別にあると思うのですが、恒久対策を行うまでの間、ひとまずはフォーカスを外してから処理するよう暫定対策をおうとしたのですが。。。
TextBoxのFocusメソッドが、IInputElement側に定義されていたので、そっちばかり探していて見当たらずちょっとはまりました。

情けないっす。
根本解決がまだできていないのはさらに恥ずかしい(｡Ａ ｡　)
iPadで見た時にフッター背景右側に空白が生まれる問題（未解決かも？）

[参考にしたサイト](http://koukitips.net/responsive-enigma-blank/)

<h2>表題通りです。</h2>
タブレットから見た時にギリギリレスポンシブにしないという事で、

```ruby:css
 @media screen and (max-width: 767px) {<!--なかみ-->}
```
と設定。

**組んだものを簡単に説明**
・<☆div class="innerbox">にwidth890pxを指定、レスポンシブ時には95%。
・footerに背景指定、width100%

```ruby:html
<body>
    <div id="wrapper">
		<div class="innerbox">コンテンツ</div>
		<footer>
			<div id="innerbox">
				フッターなかみ
			</div>
		</footer>
	</div>
</body>
```

```ruby:css
#wrapper {
    overflow:hidden;/*上の参考リンク様で紹介してる方法がこれ。*/
}

.innerbox {
	width:890px;
    margin:0 auto;
}

footer {
	height:293px;
	margin:20px auto;
	background:url(../img/foot_backimg.gif) repeat-x ;
	font-size:12px;	
	padding-top:30px;
}

@media screen and (max-width: 767px) {

.innerbox {
	width:95%;
}

footer {
	height:auto;
	background:#e8fbd8;
	padding:20px;
}
```

**結果：ダメ、フッターは収まっても上部コンテンツの右端が切れる。**
そりゃそうだ、hidden指定だもの。
なぜ切り替わらないレスポンシブ分を出したかというと、まあ干渉してるのでは？と個人的に感じたので。
空白ができる理由はわかっていて、iPadの横サイズが768pxで、そこにfooterのwidth100%が効いてる。でも上部分のコンテンツはレスポンシブに切り替わらずに890px幅で見せているので、結果フッターが短く見えてしまっているんですな。


<h2>結局どうしたか。</h2>
footerにmin-widthを指定してあげる。

```ruby:css
footer {
	min-width:890px;
	height:293px;
	margin:20px auto;
	background:url(../img/foot_backimg.gif) repeat-x ;
	font-size:12px;	
	padding-top:30px;
}

@media screen and (max-width: 767px) {
footer {
	height:auto;
	background:#e8fbd8;
	padding:20px;
	min-width:inherit;
}
```

とりあえずコレで治りました。
ipad側からしてみれば「ココは890pxで、フッターは100%でしょ？！なら768pxであってるじゃない！」なんでしょうね。
そうなんだよね・・・でもそうじゃないんだ・・・。
この指定も解決策として微妙な感じがするけど、実際のところどうなんだろうか・・・。
いまいちスッキリしないままです。


メモ代わりに急いで書いたので、変な箇所や良い解決策などご指摘・ご教授していただけるとありがたいです。
GNU Parallel インストールワンライナー


```shell-session
U=http://ftp.gnu.org/gnu/parallel/parallel-latest.tar.bz2;D=$HOME/$(basename $U|cut -d. -f1);(mkdir -p $D&&cd $D&&curl -s $U|tar xjv --strip=1 -C .&&./configure&&make&&sudo make install)
```

configureやり直したくなるかもしれないので作業ディレクトリは消さない。パスが気に入らなければシェル変数Dをてきとうに。
python3: given strをlist slicingで切ってdictionaryに投げ込む, dictionary comprehension

例えば以下の様な文章があったとする。毎回読む度に元気をくれるアホな話なのでこいつを選んでみました（笑）

> _My friend ripped open a handwarmer, and when the powder got on his hands his parents told him his hands would disintegrate by age 30. We looked up what disintegrate meant later that night, and he bawled hysterically while staring at his hands._

「この文章をスペースごとに区切って`dictionary`に入れたい」なんてことがこの先あるかもしれません。~~いや、ないかもしれません。~~今回はそのやり方についてたまたま<a href="http://stackoverflow.com/questions/35618307/how-to-transform-string-into-dict" target="_blank">SOF</a>で見つけたので勉強のメモがてら使ってみたいと思います。こちらの都合上、関数にまとめてから使うことにします。

```
s2 = s2 = "My friend ripped open a handwarmer, and when the powder got on his hands his parents told him his hands would disintegrate by age 30. We looked up what disintegrate meant later that night, and he bawled hysterically while staring at his hands"

def splitter(some_sentence):
	out = some_sentence.split() # split s by whitespace into out in a form of a list
	entries = dict([(x,y) for x,y in zip(out[::2], out[1::2])]) # loops through every word in a given sentence 1st word = key, 2nd word = value
	return entries
>>> splitter(s2)
{'that': 'night,', 'My': 'friend', 'a': 'handwarmer,', 'looked': 'up', 'told': 'him', 'what': 'disintegrate', 'and': 'he', 'by': 'age', 'bawled': 'hysterically', 'while': 'staring', 'got': 'on', '30.': 'We', 'the': 'powder', 'at': 'his', 'his': 'hands', 'would': 'disintegrate', 'meant': 'later', 'ripped': 'open'}
```

個人的にはリストスライシングの使い方に刺激を受けました。リストスライシングってどこにでも応用が効く素晴らしいメソッドだなと。
簡単に役割を説明すると

1. まず適当に入れてきた文章を`split`でスペース毎にスライスして`out`に入れる。（リストで）`['My', 'friend', 'ripped', 'open', 'a', 'handwarmer,', 'and', 'when', 'the', 'powder', 'got', 'on', 'his', 'hands', 'his', 'parents', 'told', 'him', 'his', 'hands', 'would', 'disintegrate', 'by', 'age', '30.', 'We', 'looked', 'up', 'what', 'disintegrate', 'meant', 'later', 'that', 'night,', 'and', 'he', 'bawled', 'hysterically', 'while', 'staring', 'at', 'his', 'hands']`
2. そのリストを`out[::2]`と`out[1::2]`で分けて前者を`x`後者を`y`とする。言い方を変えればリストの中の一番最初から一個飛ばしで単語を選んでいく方が`x`。飛ばした単語を拾っていくのが`y`みたいなイメージ。
3. `zip`で`x`と`y`をタプルの中に入れてペアにする。`[('My', 'friend'), ('ripped', 'open'), ('a', 'handwarmer,'), ('and', 'when'), ('the', 'powder'), ('got', 'on'), ('his', 'hands'), ('his', 'parents'), ('told', 'him'), ('his', 'hands'), ('would', 'disintegrate'), ('by', 'age'), ('30.', 'We'), ('looked', 'up'), ('what', 'disintegrate'), ('meant', 'later'), ('that', 'night,'), ('and', 'he'), ('bawled', 'hysterically'), ('while', 'staring'), ('at', 'his')]
4. `x`を`key`に。`y`を`value`に入れて`dict()`でペアをくっつけて完成。

サイト上の例を構造分解するとこんな感じ:

```
# s = '#one cat #two dogs #three birds'
# >>> splitter(s)
# out = ['#one', 'cat', '#two', 'dogs', '#three', 'birds']
# out[::2]
# ['#one', '#two', '#three']
# out[1::2]
# ['cat', 'dogs', 'birds']
```

しかしこんな使い方は絶対しないと思うのでdictionary comprehensionの中に`if`を入れて取捨選択してその単語のみを入れるとしたほうが明らかに賢いと思います。もしくはenumerator的な関数をつくって`key`を思いきって番号にするのも有りだと思います。それなら単語の数に応じて`key`の番号が出てくるのでデータの扱いなどで大活躍しそうです。参考までに。

```
def enumerate(s, start=0):
    return zip([i for i in range(start, (start + len(s)))], s)
```
Re:VIEWでtableブロック内のカラム区切りをスペースにする


Re:VIEWでtableを埋め込む場合、カラムの区切りはデフォルトではタブのみになっています。

が、正直タブのみは苦痛。エディタはsofttabですよ(´・ω・`)
スペース区切りでしょjkということで、Re:VIEWの生成を上書きできるreview-ext.rbを追加して対応します。
(かなり文書への影響が大きいからぷるりは無理ですね。。

## review-ext.rbとは

Re:VIEWは独自に機能を追加したい、既存の機能を変えたい場合に、config.ymlと同ディレクトリに`review-ext.rb`を作成して定義することで対応ができるようになっています。

という事で、既存のtableメソッド部分をコピーして、必要な箇所を変更していきます。(lib/review/pdfbuilder.rb)

※今回は自分が使っているpdf文書に限った変更になります。HTML等でやりたい場合は、HTMLの書式に合わせてreview-ext.rbを弄る必要があります

## オリジナルからの変更点

現在タブのみが区切りとなっている部分があるので、ここを修正して、タブもしくはスペース☓２以上続いた場合に区切るように修正します。

```ruby
rows.push line.strip.split(/\t+).map {|s| s.sub(/\A\./, '') }

↓　変更

rows.push line.strip.split(/\t+|\s{2,}/).map {|s| s.sub(/\A\./, '') }


```

## 完成版

以下変更部分も合わせた、`review-ext.rb`の中身になります

```ruby
ReVIEW::Compiler.definline :seqsplit

module ReVIEW
  class LATEXBuilder
    def table(lines, id = nil, caption = nil)
      rows = []
      sepidx = nil
      lines.each_with_index do |line, idx|
        if /\A[\=\{\-\}]{12}/ =~ line
          # just ignore
          #error "too many table separator" if sepidx
          sepidx ||= idx
          next
        end
        rows.push line.strip.split(/\t+|\s{2,}/).map {|s| s.sub(/\A\./, '') }
      end
      rows = adjust_n_cols(rows)

      begin
        table_header id, caption unless caption.nil?
      rescue KeyError
        error "no such table: #{id}"
      end
      return if rows.empty?
      table_begin rows.first.size
      if sepidx
        sepidx.times do
          tr rows.shift.map {|s| th(s) }
        end
        rows.each do |cols|
          tr cols.map {|s| td(s) }
        end
      else
        rows.each do |cols|
          h, *cs = *cols
          tr [th(h)] + cs.map {|s| td(s) }
        end
      end
      table_end
    end

  end
end
```

## テーブルを生成してみる

以下のreview文書で正しくテーブルが生成されました！

```
//tsize[20,20,20]
//table[ラベル][キャプション]{
header1   header2   header3
---------------------------
a         hogehoge  fugafuga
.         hoge2     fuga2
//}

```

![スクリーンショット 2016-03-03 15.37.41.png](https://qiita-image-store.s3.amazonaws.com/0/31824/59423d51-9d57-5e27-79a5-382ed2165600.png "スクリーンショット 2016-03-03 15.37.41.png")
今日のsed: 任意の文字列以降の行をすべて出力したい



## やりたいこと

こういうファイルがあったとして、``` bar ``` 以降の行だけ出力したい。

``` qiita.txt
hoge
foo
bar
buzz
piyo
```

## 一度しか出現しないケース

それsedで出来るよ。

```
cat /tmp/qiita.txt | sed -n '/bar/,$p'
bar
buzz
piyo
```


これでも良さそうだけど、超絶カッコ悪い。

```
cat /tmp/qiita.txt | tac | sed '/bar/q' | tac
bar
buzz
piyo
```

## 2回以上出現するケース

2回以上出現するケースで使い分けたらいいよ。

``` qiita2.txt
hoge
foo
bar
buzz
piyo
hoge
foo
bar
buzz
piyo
```


- 初出以降全部出力

```
cat /tmp/qiita2.txt | sed -n '/bar/,$p'
bar
buzz
piyo
hoge
foo
bar
buzz
piyo
```

- 最後の出現以降全部出力

```
cat /tmp/qiita2.txt | tac | sed '/bar/q' | tac
bar
buzz
piyo
```
Macのbashを4.x系に変更する


諸事情により、bash4.x系を利用する必要が発生したので変更します。

標準のbashは、

```bash
/bin/bash
```

にあります。バージョンは、

```bash
/bin/bash --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin15)
Copyright (C) 2007 Free Software Foundation, Inc.
```
ということで、3.2.57のようです。

bash4.xはbrewでインストールします。

```bash
brew install bash
```

とすると、

```bash
/usr/local/bin/bash
```

にインストールされます。

ログインシェルの変更は、chshで行えますが、このためには/etc/shellsに登録されている必要があるので、登録します。

```bash
sudo vi /etc/shells
```

ログインシェルを変更します。

```bash
chsh -s /usr/local/bin/bash
```
パスワードを聞かれた入力します。
いちおうバージョン確認。

```bash
echo $BASH_VERSION
4.3.42(1)-release
```

4.3.42になったようです。
MacでJavaの開発環境を整える。初心者用

Java開発環境作成について。

必要なもの　

「ターミナル」
「エディタ」

以上。

Javaファイルの編集はテキストエディタでもなんでもいいようです。

Vimを使ったりする方が多いようですが、私は、Atomを利用します。


あとは、下記記事を参考に、
http://techacademy.jp/magazine/5155


１　Macにファイルを作る。
２　その中にエディタで記述したJavaファイルを収納、
3  「ls」でそのファイルをターミナルに出力出来ます
LinkStation LS410DのHDDをSSDに交換する

LinkStation LS410DのHDDをSSDに交換します。
##下準備（ダウンロード・インストール）
下準備として、下記のファイルをダウンロードもしくはインストールしておきます。

- LinkStation LS410D用のファームウェア(Liveupdater付き)
- ファームウェアをLinkStationへ送るためのサーバーTftpd32

##下準備（IPアドレスの設定）
自動でLinkStationからファームウェアをダウンロードしてもらうためにルーターとWindowsマシンのIPアドレスを設定しておきます。

- ルーター `192.168.11.200`
- Windowsマシン `192.168.11.1` (ここが重要）

ファイアーウォール（アンチウィルスソフト）を一旦オフにしましょう。
##BuffaloのWebサイトからファームウェアをダウンロード
LinkStation LS410D用のファームウェアファイルをダブルクリックで展開します。
`C:\BUFFALO\ls400-181` に展開されます。

一部のファイルの拡張子をzipに変えて解凍
`initrd.img→initrd.zip→解凍`
`uImage.imb→uImage.zip→解凍`

パスワードを聞かれるので、ネットで適当に調べてパスワードを入力します。

解答してできたファイルを`C:\Program Files (x86)\Tftpd32` へコピーする
##LinkStationの起動
LinkStationを電源コンセントを入れて赤色が点滅したら、フロントのファンクションキーを押します。
この時、白く高速に点滅すると、192.168.11.1にイメージファイルを自動で取りにいくようになります。

うまくイメージファイルのダウンロードが済むと高速だった点滅が点灯へと変わります。

＃同じイメージファイルが２度ダウンロードされたら失敗しています。ファイアーウォール（アンチウィルスソフト）を一旦オフにしましょう。

##ハードディスクの初期化（フォーマット）

事前にLSUpdater.iniの編集を編集しておきます。

LSUpdater.iniをメモ帳などで開き下記修正

`VersionCheck = 0`
`NoFormatting = 0`

LSUpdater.exe をダブルクリックで起動し、ファームウェアのアップデートとハードディスクの初期化を行います。

後は、待っていればnas navigaterからWeb管理等できるようになります。

##速度ベンチマーク

![4.jpg](https://qiita-image-store.s3.amazonaws.com/0/115935/0b995a6c-8b98-f8a3-b40f-59cc06593348.jpeg)

ファイル転送時は概ね30MB/s～50MB/s出るようになります。
CristalDiskMarkだとリードが大体100MB/sに。

SSDがだいぶ安くなっているのでLinkStationが余っている場合は試す価値アリです。

##参考リンク

ソフトウェア ダウンロードサービス　|　BUFFALO バッファロー 
http://buffalo.jp/download/driver/hd/ls400_fw-win.html

TFTP server 
http://tftpd32.jounin.net/tftpd32_download.html

LinkStation LS410DのHDD交換手順｜やーぼーのブログ
 http://ameblo.jp/yahboh/entry-12022513219.html

mydrive.jp／BUFFALOのNAS（LinkStation）のHDD換装メモ
 http://mydrive.jp/server/other_server/ls/ls.html

Laineema デジタルハードウェア徹底レビュー : NASのHDDを交換するぞ！LS-XH1.0TLの2TB化 後編 
http://laineema.gger.jp/archives/2631462.html

LS410DのHDD交換方法 | 思いつくままに雑記帳（調） 
http://uedaipasokon.sakura.ne.jp/wp/archives/3647

##その他

抜き出したHDDのパーティションはWindowsでは削除しきれなかったので、コマンドプロンプトから強制的にパーティションを削除します。

EFIシステムなど削除できないパーティションを手動削除する方法 - 元「なんでもエンジニ屋」のダメ日記 http://nasunoblog.blogspot.jp/2012/07/efi.html
Rails4 で UUIDを使う

投稿がフロントに偏ってたので
バックエンドの方も少し書いておこうと思う

ちなみに今回、新規テーブル Postgresql がターゲットになると思う。
mysql だとちょっと泣きを見るかも


# UUIDって何よ
まずUUIDとは「絶対かぶらないID」だと思えばいい

ビックデータ や ディープラーニング等の統計処理
サードパティーとのデータ連携

いろんなデータがごちゃまぜに利用される中、システムないおよびテーブル内でユニークであることはもちろん、共有システムの全テーブル中でも常に一意のデータを指し示す事ができる。
それがUUIDだ（と思う）

ログデータや、コンテンツ、ユーザ情報など重要な情報にはこれを付与しておくのは悪い手ではないと思う。

独自の採番ロジックを使うコストを払うより、この辺りは標準使うほうが良い場合もあるはず。

## UUIDの問題点
としてよくあげられるのが「長い」ということ。
実際URLにいくつも入ってきたら見た目が悪い。

これに関しては、
- UIDをBase64で圧縮する
- 表示用に別のidを用意しておく
等の手がある。

では本題にうつる。


# Rails4 にUUIDを導入する。

UUIDを導入するには大きくどちらかを選ぼう
1. Gemを使う
2. Rails標準の機能を使う

Postgresを利用しているならば、Rails標準一択でよいと思う
他のDBMSを利用しているならば古いGemとの格闘を覚悟しよう

## Gemを使う
https://github.com/jashmenn/activeuuid
railsでuuidを扱うgemはいくつかある。

... しかしどれも古い。
使ってみてメッチャ嵌った。

結局 

``` SecureRandom.uuid ```

を利用して地道に書くのがいい気がする。
私は途中で投げ出してPostgresに逃げた

## Rails標準の機能を使う
楽、メッチャ楽。

まずPostgresqlにUUIDを有効にする命令を投げる必要がある。

```
$ rails generate migration enable_uuid_ossp_extension
```

生成されたmigrationを編集して

```
class EnableUuidOsspExtension < ActiveRecord::Migration
  def change
    enable_extension 'uuid-ossp'
  end
end
```

次に新規のテーブルに導入する場合、
migrationファイルの create_table に id: :uuid と追加して

```
create_table :users, id: :uuid do |t|
```

外部キーの参照はこんな感じに設定

Before

```
t.references("user")
```

After

```
t.uuid :user_id
## polymorphic = true の場合
# t.string :user_type
```

これだけでたぶんうまくいくと思います！
Apache: 現在の設定を server-info で取得する



##  やりたいこと

Serverspec とかでサーバ設定のテストとか書くときに Apache で現在適用されている設定を出力したい。
設定ファイルの状態じゃなくて、今何が効いてるかが知りたい。apachectl でも出そうで出ない。
sshd でいうところのコレがほしい。

```
sshd -T
```

## やりかた
sshd みたいに httpd になんか引数つけて実行したら出るかと思ったらダメそう。
結局よくわからないので、mod_info モジュールでやってみる。
　
https://httpd.apache.org/docs/2.2/ja/mod/mod_info.html



```
http://your.host.example.com/server-info にアクセスすることでサーバの情報を得られるようになります。

```


取得できる情報。

```
?<module-name>
指定されたモジュールに関連する情報のみ
?config
モジュールでソートせずに、設定ディレクティブのみ
?hooks
各モジュールが使用するフックのみ
?list
有効なモジュールの簡単なリストのみ
?server
基本サーバ情報のみ
```



## 設定

/path/to/httpd/conf.d/server-info.conf とか適当において、httpdを再起動します。
（セキュリティを考慮しましょう）


```
<Location /server-info>
    SetHandler server-info
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
</Location>
```



## 実践

出力が HTML なので、そのままだとパースしづらい。いい感じに整形して。

```
curl -s http://127.0.0.1/server-info/?mod_ssl.c | perl -pe 's/<[^>]+>//g; s/\&nbsp;/ /g'
```

w3m でもいいぞ。

```
curl -s http://127.0.0.1/server-info/?list | w3m -dump -T text/html
```


やってみたものの、何か役に立つのだろうか。

```
$ curl -s http://127.0.0.1/server-info/?config | w3m -dump -T text/html  | grep -i SSLProtocol
      25:   SSLProtocol +ALL -SSLv2
$

```

Serverspec で。

```
describe command('curl -s http://127.0.0.1/server-info/?mod_ssl.c | w3m -dump -T text/html') do
  its(:stdout) { should match /SSLProtocol \+ALL \-SSLv2/ }
end
```



イマイチ感。
捗れ〜。
iMacのEthernetが繋がらなくなってやったこと

iMacのEthernet接続が急に使えなくなった。

解決までの道のりを記録します。同様の症状の方の参考になれば。

何気初投稿なので読みにくいかもしれないがそこはご愛嬌で。

# 環境
- iMac (21.5-inch, Late 2013 El Capitan 10.11.3)
- Buffalo Air-station WZR-S900DHP  Version 2.16
- 100均のEthernetケーブル


# やったこと

## ケーブル交換など
先日まで普通につながっていて朝起きていたら繋がらなくなっていたことから、ハードの問題ではないと考えていた。しかし、使っていたのが100均のケーブルだったため一応ケーブルを交換してみたがダメだった。同じようにケーブルの抜き差し、ルータの再起動、PCの再起動をしてみたが変化なし

## Appleに頼ってみた
ケーブルを変えてもダメだったのでApple先生に頼ってみた。すると英語だが今回の問題のサポートドキュメントを発表してくれていた。
[If the Ethernet connection on your Mac stopped working recently](https://support.apple.com/en-us/HT205956)

### 1, バージョン確認
記事によるとまず、Incompatible Kernel Extension Configuration Data という項目のバージョンを確認するそうなので確認してみた。
確認する方法は「システム情報」の「ソフトウェア」項目の「インストール」欄にかかれている。
見てみると2.13でサイトには3.28.1の人はこうしてねーみたいな感じで書かれていたので論外なバージョンらしい。アップデートせねば。

### 2, 無線環境あり
無線につながる場合と、つながらない場合の2ケース用意されているようで、今回幸い無線環境はあったので記事中の無線につながった場合の対策をしてみることにした。いろいろ書かれていたが要するにすべきは以下のコマンドを打てばいいらしい。
`sudo softwareupdate --background`
恐らくバックグラウンドでアップデートしろってコマンドだと思われる。
そしてシステム再起動。同様にIncompatible Kernel Extension Configuration Dataのバージョンを見てみると2.13で変わらず。だめっぽい。


### 3, 無線環境なし
一応無線にはつながる環境はあったが、無線に繋がらない場合のケースを試してみた。
これも下記のコマンドを打てばいいらしい。(Machintosh HDはOSがインストールされているディスクに適宜変更)
`rm -rf "/Volumes/Macintosh HD/System/Library/Extensions/AppleKextExcludeList.kext"`
しかし、このコマンドはOSXユーティリティのターミナルで入力しなければいけないらしい。OSXユーティリティは知っていたが(OS再インストールとかする画面)ターミナルなんてどこにあんだよって思っていたがメニューバー内に普通にあった。コマンドを実行したら
`sudo softwareupdate --background`
で再起動。一応ここでIncompatible Kernel Extension Configuration Dataのバージョンは3.28.2になっておりサポートページによると接続させるはずなのにやっぱダメ。

### 4, OS再インストール
半分あきらめつつもOSを再インストール。
[Mac に OS X を再インストールする方法](https://support.apple.com/ja-jp/HT204904)
それでもやっぱダメ。

## サポートに電話
修理かーと半分諦めつつも一応Appleサポートに電話。やはりかなり多くの問い合わせがきてるみたいだが、僕のようなケースは稀で大抵3,のコマンドで治るらしい。一応ルータ大丈夫かとか線抜けてないかとか確認されたのちネットワークを再構築した。ネットワーク環境設定のネットワーク環境をみると僕のは自動になっている。
![スクリーンショット 2016-03-03 15.00.18.png](https://qiita-image-store.s3.amazonaws.com/0/115566/26396e59-2028-d9a3-5e3a-76e5b4b848f9.png)

それを適当な名前で新規作成を行うとつながった。
![スクリーンショット 2016-03-03 15.03.48.png](https://qiita-image-store.s3.amazonaws.com/0/115566/a15eec8b-a4f8-24bb-ed16-7927c2486eaa.png)
知らない間に環境設定がおかしくなっていたのだろうか？理由はわからないがなんとか解決。

# まとめ
本件に関してはかなり困っている人がいるみたいで、AppleKextExcludeList.kextが原因らしい。
このソフトウェアを今回はrmしたがmvやアップデートして治る人もいるらしいのでそちらを試してみてもいいかもしれない。

# 参考記事
[If the Ethernet connection on your Mac stopped working recently](https://support.apple.com/en-us/HT205956)
[Apple、MacのEthernetポートが利用できなくなるセキュリティアップデートの配布を中止＆Ethernetポートが利用できなくなった場合の対処法。](http://applech2.com/archives/47945294.html)