OmniAICreator/Qiita-1.07M huggingface dataset:
Fluxフレームワークまとめ


##概要

Fluxフレームワークまとめ。随時更新。

##比較

* <a href="https://github.com/voronianski/flux-comparison" target="_blank">voronianski/flux-comparison</a>

##<a href="https://github.com/gaearon/redux" target="_blank">Redux</a>

3300 stars。

* <a href="http://amagitakayosi.hatenablog.com/entry/2015/07/30/000000" target="_blank">人気のFluxフレームワークReduxをさわってみた - マルシテイアは月の上</a>


##<a href="https://github.com/reflux/refluxjs" target="_blank">Reflux</a>

3300 stars。

##<a href="https://github.com/goatslacker/alt" target="_blank">Alt</a>

1700 stars。

##<a href="https://github.com/BinaryMuse/fluxxor" target="_blank">Fluxxor</a>

1300 stars。Web DBにのってたやつ。

* <a href="http://amagitakayosi.hatenablog.com/entry/fluxxor-introduction" target="_blank">Fluxなフレームワーク、Fluxxorの紹介 - マルシテイアは月の上</a>

##<a href="https://github.com/yahoo/fluxible" target="_blank">Fluxible</a>

1090 stars。Yahooが開発。

##<a href="https://github.com/jmreidy/fluxy" target="_blank">Fluxy</a>

234 stars。

##<a href="https://github.com/TuxedoJS/TuxedoJS" target="_blank">Tuxx</a>

554 stars。

##<a href="https://github.com/kenwheeler/mcfly" target="_blank">Mcfly</a>

700 stars。

##<a href="https://github.com/mizchi/arda" target="_blank">Arda</a>

180 stars。mizchiさんが開発。

* <a href="http://qiita.com/mizchi/items/ef3ee47957e431c8be7b" target="_blank">Arda - MetaFluxなフレームワークを作った - Qiita</a>
* <a href="http://qiita.com/armorik83/items/0b11ae4a09f6acb21959" target="_blank">Fluxフレームワーク Arda が気になる10の理由 - Qiita</a>

##<a href="https://github.com/azu/material-flux" target="_blank">Material Flux</a>

50 stars。azuさんが開発。

* <a href="http://efcl.info/2015/03/17/material-flux/" target="_blank">material-fluxというFluxライブラリをREADME駆動で開発した | Web Scratch</a>

##<a href="https://github.com/acdlite/flummox" target="_blank">Flummox</a>

1400 stars。`4.0 will likely be the last major release. Use Redux instead. It's really great.`と書いてある。

##<a href="https://github.com/martyjs/marty" target="_blank">Marty</a>

1090 stars。`Marty v10.0 will be the last major release. Use Alt or Redux instead.`と書いてある。

##<a href="https://github.com/deloreanjs/delorean" target="_blank">Delorean</a>

600 stars。React.jsじゃなくても使える。


##まとめ

ご意見ください。
Go言語は空文字に対してstrings.splitを掛けると1要素の配列を返す

Go言語に入門してうろうろしてますが、ちょっと困った挙動があったので書いてみます。

症状
---------------

```go:main.go
func main() {
  l := strings.Split("", ",")
  fmt.Printf("%#v\n", l)       // []string{""}
  fmt.Println(len(l))          // 1
}
```

見ての通り、空文字に対してsplitすると1要素の配列が返ってきており、そのため、この返り値を`for ～ range`などで回すとループの中の処理が実行されてしまいます。

ググってみたところ、区切り文字の数 + 1個の要素を返す仕様とのこと。
https://groups.google.com/d/msg/golang-nuts/S7U1iRmuydg/qKu3Wcl4oOcJ

```go
fmt.Println(len(strings.Split(",,", ",")))    // 3
fmt.Println(len(strings.Split(",", ",")))     // 2
fmt.Println(len(strings.Split("", ",")))      // 1
```
つまりこういう理屈ですか。う、うーん……$x^0 = 1$みたいなもので、わからないではないけれど、rubyに慣れていると戸惑いますね。

対処法
--------------
splitした結果に対して`for ～ range`の書き方をする場合などは空文字が来ることを考慮して、先にはじくか、ループの先頭で空文字判定して`continue`するかの処理が必要そうです。

他言語(追記)
--------------
ふと思いついたので他の言語も試してみました。

言語 | 件数
---- | ----
ruby | 0
Go | 1
JavaScript | 1
Python | 1
Perl | 0
PHP | 1
Java | 1
awk [^1] | 1
vim script[^2] | 0 or 1 (keepempty次第)

あっ、これ0の方が少数派だ。

[^1]: https://twitter.com/blackaplysia/status/633969716009177092
[^2]: https://twitter.com/mattn_jp/status/633834528553893888
Windows10 insider preview build 10525 で Chrome(x64)が動かない

Windows10 insider preview build 10525 が来たので喜び勇んで適用したら・・・
Chromeが動かなくなった :open_mouth: 

そんなときは「--no-sandbox」をつけて起動すると大丈夫。
大丈夫と言ってもChromeには
> サポートされてないコマンドライン フラグ --no-sandbox を使用しています。
> これにより、安全性とセキュリティが損なわれます。

と怒られますけど・・・ :disappointed_relieved: 

ちなみに、64bit版だけが動かなくなる模様です。
「--no-sandbox」をつけて起動したところ、
beta版 45.0.2454.37 beta-m (64-bit) と 
Canary版 46.0.2486.0 canary (64-bit) は無事に起動しました :satisfied: 

やっぱり、こういうことがあるからinsider previewやらベータ版は楽しい :relaxed: 

#参考URL

* https://code.google.com/p/chromium/issues/detail?id=522201

#追記

* Canary版 47.0.2491.0 canary (64-bit) では、普通に動くようになっていました(2015/08/24)
* Beta版 45.0.2454.78 beta-m (64-bit) でも、普通に動くようになった。(2015/08/27)

さすが、対応が早い
Advanced Custom Fieldsで作ったテキストエリア内でショートコードを使うメモ

```
//function.php

function my_acf_format_value( $value, $post_id, $field ) {
	
	// run do_shortcode on all textarea values
	$value = do_shortcode($value);
	
	
	// return
	return $value;
}

add_filter('acf/format_value/type=textarea', 'my_acf_format_value', 10, 3);
```

参考：[ACF | acf/format_value](http://www.advancedcustomfields.com/resources/acfformat_value/)
マイグレーションファイルでよく使う記述

マイグレーションファイルを新規に書くたびに忘れているので備忘録的に記す。


```rb
# 文字列
t.string   :column_name
# 長い文字列
t.text     :column_name
# 日付
t.datetime :column_name
# 真偽値
t.boolean  :column_name
# 整数値
t.integer  :column_name
```
確率密度関数の曲線の下は塗らずに線だけ描きたい

# Q.
以下のコードで確率密度関数を描くと、枠線（図の赤い矢印のところ）がついて嫌なんです。消したいのですが、いい方法ありますか？

```NG_example.R
library(ggplot2)
set.seed(1234)

dfGamma <- data.frame(nu75=rgamma(100, 0.75), nu1=rgamma(100, 1), nu2=rgamma(100, 2))
dfGamma <- stack(dfGamma)

ggplot(dfGamma, aes(x=values, group=ind, color=ind)) +
  geom_density()
```

![NG_example.png](https://qiita-image-store.s3.amazonaws.com/0/12869/c625a5d4-8dbf-f039-7f13-c00ae3054c83.png)

# A. 
ggplotのところを以下のように書くとよいでしょう。

```OK_example1.R
ggplot(dfGamma, aes(x=values, group=ind, color=ind)) +
  stat_density(position='identity', geom='line')
```

また、以下のように書くこともできます。

```OK_example2.R
ggplot(dfGamma, aes(x=values, group=ind, color=ind)) +
  geom_line(stat='density')
```

![OK_example.png](https://qiita-image-store.s3.amazonaws.com/0/12869/36889c63-9981-ff0a-2968-90eebb9123fd.png)


# 参考資料
この記事はStackOverFlowの以下の質問の日本語訳です（一部省略および改変）。
http://stackoverflow.com/questions/17006956/ggplot2-geom-density-limits
Swiftのバリデーションチェック用のテストコード

Playgroundでテストする用

```swift
//let REGEX = "^(?=.*?[A-Z]).{6,}$"
let REGEX = "^[A-Z](?=.*?[A-Z]).+$"
//let REGEX = "^(?=.*?[A-Z]).{8,}$"

public func validate(value: String) -> Bool {
  let test = NSPredicate(format: "SELF MATCHES %@", REGEX)
  return test.evaluateWithObject(value)
}

validate("AafwoeifjefefAあ")
```
MacのLinux作業設定メモ


次の初期構築のときのための私的メモ。
随時更新する予定。(最終更新日: 2015/08/19)

# ソフトのインストール

私はSSHクライアントとして、もっぱらiTerm2を使用している。

* SSHクライアント: [iTerm2](https://www.iterm2.com)



# iTerm2設定

## `Command+W`を無効化する

### 概要

たびたび`Ctrl+W`と間違えてターミナルを閉じるという悲劇に見舞われるので、最初から塞いでおく。

### 設定手順メモ

MacOSの機能でショートカットキーを変えてしまう。

1. システム環境設定→キーボード→ショートカット
2. リストの中からアプリケーションを選ぶ
3. ＋ボタンを押してショートカットを追加する
	1. アプリケーション: `iTerm`
	2. メニュータイトル: `Close`
	3. ショートカット: 任意（私は`Command+Control+W`)
	   ![スクリーンショット 2015-08-14 10.55.44.png](https://qiita-image-store.s3.amazonaws.com/0/82212/639e6ae9-0ef2-d768-02b0-2c3575c8c923.png "スクリーンショット 2015-08-14 10.55.44.png")
4. 追加をクリックして登録する

これで`Command+W`で閉じなくなる。

## 改行付きコピー&ペースト抑止

### 概要

iTermとチャットアプリとの間を行き来すると、コピペのコピー(`Command+C`)操作を忘れることがある。で、以前コピーしていた文章をコンソールに貼り付けてしまったりして残念な事になる。

これに関して、便利なツールが存在する。
https://github.com/harasou/may-i-paste

改行が含まれている場合、確認ダイアログを出してくれるのだ。便利。


基本的には上記URLのREADMEに従うべきで、実際そのとおりやっただけなのだが、2015/08/14にやった手順を転記しておく。

### 設定手順メモ

まずはスクリプトを配置。

```bash
$ mkdir ~/src
$ cd ~/src
$ git clone https://github.com/harasou/may-i-paste.git
$ mkdir -p ~/Library/Application\ Support/iTerm/Scripts
$ cd may-i-paste
$ ln -s "$(pwd)/Paste.scpt" ~/Library/Application\ Support/iTerm/Scripts/Paste.scpt
```

その後、以下の設定作業をする。

1. iterm2を起動しているようなら閉じる
1. システム環境設定→キーボード→ショートカット
2. リストの中からアプリケーションを選ぶ
3. ＋ボタンを押してショートカットを追加する
	1. アプリケーション: `iTerm`
	2. メニュータイトル: `Paste`
	3. ショートカット: `Command+\`
3. ＋ボタンを押してショートカットを追加する
	1. アプリケーション: `iTerm`
	2. メニュータイトル: `Paste.scpt`
	3. ショートカット: `Command+V`

以上で、通常の`Paste`が`Paste.scpt`に入れ替わる。
Invoke-WebRequestとInternet Explorer

```lang:powershell
$res = Invoke-WebRequest -Uri $url;
```
IEの初期設定がされていない場合、この行でエラーが出てしまう。
回避するためには、IEの推奨設定を指定するとよい。

新しいブラウザのEdgeを利用している場合でも、IEを起動したことがないPCでこの現象が確認された。

# 参考
- Invoke-WebRequest - https://technet.microsoft.com/en-us/library/hh849901.aspx
readr::parse_datetimeは組み込み関数より速いがfast_strptimeより遅い

@hoxo_m さんのこんな話がある。
[R で文字列を POSIX time に変換するには lubridate::parse_date_time2() がちょっぱや](http://qiita.com/hoxo_m/items/6f18b163946f6f41deca)

じゃあreadrパッケージのparse_datetimeだとどうなるだろうと速度比較したのが以下の結果。

```r
Unit: microseconds
                                         expr      min        lq       mean   median        uq      max neval
                      strptime(dates, format)  856.961  875.0410  906.98984  881.281  954.7210 1019.521   100
                            as.POSIXlt(dates) 2641.281 2665.2810 2782.40425 2801.281 2904.3205 2968.642   100
                            as.POSIXct(dates) 3456.321 3499.6805 3628.93529 3608.001 3747.3610 3886.081   100
                 lubridate::fast_strptime(dates, format)   37.121   40.9605   45.22340   45.121   46.7210  120.321   100
 lubridate::parse_date_time(dates, format, locale = "C") 2086.401 2122.0815 2246.79782 2189.281 2295.2010 5060.161   100
              lubridate::parse_date_time2(dates, format)   63.681   69.1210   73.78026   71.361   73.1210  174.402   100
         readr::parse_datetime(dates, format)  219.521  227.0410  248.55141  232.961  245.6005  723.841   100
```
組み込みよりマシだがlubridateパッケージのfast_strptimeやparse_date_time2ほど速くはない。


### コード
コードは以下の通り。

```r

dates <- as.POSIXlt("2014-12-01", tz="Japan") + sample(seq(31*24*60*60)-1, size=100, replace=TRUE)
dates <- as.character(dates)

library(microbenchmark)

format <- "%Y-%m-%d %H:%M:%S"
microbenchmark(
  strptime(dates, format),                    
  as.POSIXlt(dates),                          
  as.POSIXct(dates),                          
  lubridate::fast_strptime(dates, format),               
  lubridate::parse_date_time(dates, format, locale="C"), 
  lubridate::parse_date_time2(dates, format),             
  readr::parse_datetime(dates, format) # new!!!
)

```
NavigationBarとStatusBarの表示・非表示を動的に切り替える

iOS7とiOS8で共通のコードで動的にNavigationBarとStatusBarの表示・非表示を切り替える処理に詰まったのでまとめました。

* Info.plistの"View controller-based status bar"はNOを指定
* UIStatusBarAnimationの値はお好みで

```lang:ViewController.swift
func navigationBarAndStatusBarHidden(hidden: Bool, animated: Bool)
{
    if let nv = navigationController {

        if nv.navigationBarHidden == hidden {
            return
        }

        let application = UIApplication.sharedApplication()

        if (hidden) {
            // 隠す
            nv.setNavigationBarHidden(hidden, animated: animated)
            application.setStatusBarHidden(hidden, withAnimation: animated ? .Slide : .None)
        } else {
            // 表示する
            application.setStatusBarHidden(hidden, withAnimation: animated ? .Slide : .None)
            nv.setNavigationBarHidden(hidden, animated: animated)
        }
    }
}
```
getimagesize関数ではSVGのサイズが取得出来ない


## どういうこと？

PHPで画像のサイズを取得するときに[getimagesize関数](http://php.net/manual/ja/function.getimagesize.php)を使うと思いますが、SVG画像についてgetimagesize関数を使うと縦・横のサイズが取得できませんでした。

## どうすればいいの？

PHP側での対処は多分不可能だと思われます・・・
JavaScriptを用いて、縦・横サイズを取得してからPHPへ引き渡すという方法が現実的でしょうか？
gmail が display:none を無視する

display:none って書いても gmail では無慈悲な空行が…

http://stackoverflow.com/questions/4013670/gmail-is-ignoring-displaynone
ここに書いてあるママですが

gmail では表示されてしまう
`<img src="img.jpg" style="display:none">`
gmail で表示させなくする
`<img src="img.jpg" style="display:none !important">`

これで解決しました。
UIScrollViewの初期位置がずれる


動的にScrollViewの内容を追加したりするとスクロール位置がずれる場合がある。
その場合、内容追加後に UIScrollView の ResetPosition() を呼び出すことでスクロール位置を先頭にリセットすることができる。

[UIScrollView](http://www.tasharen.com/forum/index.php?topic=6763.0)
> Reset Position controls where the scroll view ends up when its position is reset programmatically. This value is relative to the width and height of the content. The starting value (0, 0) means top left corner. If you wanted a centered reset point, you would specify (0.5, 0.5).
c++ builder > uint8_t / uint16_t / uint32_t を使う > #include <stdint.h>

```txt:動作確認
C++ Builder XE4
```

`uint16_t`などの型を使う時、以下のようにする。

```
#include <stdint.h>
```

ヘルプで検索しても先に出てくるのはIndyの定義で IdRawHeaders をインクルードするように書かれているが、こちらをインクルードすると以下のエラーとなる。

```
E2015 'std::uint16_t'と'Idrawheaders::uint16_t'の区別が曖昧
```


関連
http://ja.stackoverflow.com/questions/9423/char-u%E3%82%92uint8-t%E3%81%AB%E5%A4%89%E6%9B%B4%E3%81%99%E3%82%8B%E6%A0%B9%E6%8B%A0
elfsharp > ReadFields() > Type / Machine / version など読込み

https://github.com/konrad-kruczynski/elfsharp/blob/master/ELFSharp/ELF/ELF.cs

```csharp
private void ReadFields()
        {
            using(var reader = localReaderSource())
            {
                Type = (FileType)reader.ReadUInt16();
                Machine = (Machine)reader.ReadUInt16();
                var version = reader.ReadUInt32();
                if(version != 1)
                {
                    throw new ArgumentException(string.Format(
                        "Given ELF file is of unknown version {0}.",
                        version
                    ));
                }
                EntryPoint = (Class == Class.Bit32 ? reader.ReadUInt32() : reader.ReadUInt64()).To<T>();
                // TODO: assertions for (u)longs
                segmentHeaderOffset = Class == Class.Bit32 ? reader.ReadUInt32() : reader.ReadInt64();
                sectionHeaderOffset = Class == Class.Bit32 ? reader.ReadUInt32() : reader.ReadInt64();
                MachineFlags = reader.ReadUInt32().To<T>(); // TODO: always 32bit?
                reader.ReadUInt16(); // elf header size
                segmentHeaderEntrySize = reader.ReadUInt16();
                segmentHeaderEntryCount = reader.ReadUInt16();
                sectionHeaderEntrySize = reader.ReadUInt16();
                sectionHeaderEntryCount = reader.ReadUInt16();
                stringTableIndex = reader.ReadUInt16();
            }
        }
```

ReadIdentificator()の実行後に呼ばれる。

Typeの読取前のバッファbuf[]は例として以下のようになっている (Little endianの場合)。

```
buf[0] = 0x02
buf[1] = 0x00
buf[2] = 0x28
buf[3] = 0x00
buf[4] = 0x01
buf[5] = 0x00
buf[6] = 0x00
buf[7] = 0x00
buf[8] = 0x00
...
```

上記コードを読むと
[0..1] : Type (0x0002)
[2..3] : Machine (0x0028)
[4..7] : version (0x00000001)
が対応し、versionは一応1であり正しい。


linuxで読込んだ例
http://qiita.com/7of9/items/b8fdd66c6ef3511f6042
gnuplotで書いた東京オリンピックのロゴです。ご確認下さい。

![logo.jpg](https://qiita-image-store.s3.amazonaws.com/0/44457/dbb8b413-ed55-e33e-e6f8-77a07e39830a.jpeg)

```gnuplot
set term postscript enhanced eps color
set out "logo.eps"

set size square
set xrange[0:1]
set yrange[0:1]

set obj 1 rect back fc rgb "gold" fs noborder from graph 0, graph 0.5 to graph 0.5, graph 1.0
set obj 2 rect back fc rgb "gray" fs noborder from graph 0.5, graph 0 to graph 1.0, graph 0.5
set obj 3 circle front fc rgb "white" fs solid noborder at graph 0.5, graph 0.5 size 0.528
set obj 4 rect front fc rgb "#333333" fs noborder from graph 0.5-1./6., graph 0 to graph 0.5+1./6., graph 1.0
set obj 5 circle front fc rgb "red" fs solid noborder at graph 1.0-1.0/6.0, graph 1.0-1.0/6.0 size 1.0/6.0

p NaN notitle
```
バブリング(伝達) jQuery

バブリングとは【イベントの伝達】という意味です

###バブリングを制御するための**3**つのメソッド

① stopPropagation()  ＝　親要素への伝播をキャンセル
② preventDefault()   ＝  その要素のイベントをキャンセル
③ return false;      ＝  親要素への伝播をキャンセルし、その要素のイベントもキャンセル



#① stopPropagation()
sectionがクリックされたときは【 sectionにclass="select" 】をつけるが
section内のliをクリックした場合は【 liにclass="select" 】をつけて【 sectionにはclass="select" 】をつけないという処理

こういった実装の場合に【stopPropagation()】を使います。

```html:HTML

<section>
     <div>
        <ul>
            <li>クリック</li>
        </ul>
     </div>
</section>

```

```js:jquery

$('section').click(function(){
   $(this).addClass('select');
});

$('li').click(function(e){
   $(this).addClass('select');
   e.stopPropagation();
});

```

sectionの領域の中にliが含まれているため、liをクリックしたときliのクリックイベントが実行され
先祖要素に伝達し、sectionにもクリックイベントがあるため、そのイベントも実行されます。
その伝達をstopPropagation()でストップさせているためliのクリックイベントが実行された時はsectionの
クリックイベントは実行されません。



#② preventDefault()
sectionがクリックされたときは【 sectionにclass="select" 】をつけて
section内のaをクリックした場合は【 aにclass="select" 】がつくと同時に【 sectionにclass="select" 】をつける
そしてaの機能(ページ遷移)を無効化する

こういった実装の場合に【preventDefault()】を使います。

```html:HTML

<section>
     <div>
        <ul>
            <li><a href="#">クリック</a></li>
        </ul>
     </div>
</section>

```

```js:jquery

$('section').click(function(){
   $(this).addClass('select');
});

$('a').click(function(e){
   $(this).addClass('select');
   e.preventDefault();
});

```

つまりはタグ自体(今回の場合aタグのリンク)の機能を無効化するということです。


#③ return false
sectionがクリックされたときは【 sectionにclass="select" 】をつけて
section内のaをクリックした場合は【 aにclass="select" 】をつけて【 sectionにはclass="select" 】をつけない
そしてaの機能(ページ遷移)を無効化する

こういった実装の場合に【return false】を使います。

```html:HTML

<section>
     <div>
        <ul>
            <li><a href="#">クリック</a></li>
        </ul>
     </div>
</section>

```

```js:jquery

$('section').click(function(){
   $(this).addClass('select');
});

$('a').click(function(){
   $(this).addClass('select');
   return false;
});

```

return falseは【stopPropagation()】と【preventDefault()】 の機能をひとつにまとめたものです。
[jQuery] data属性を動的に変更する場合の注意点

30分くらいはまった。

## 条件
* 要素にdata属性がある。
* data属性はある要素のアクションによって動的に変化する。

```html:HTML
<div class="change-data" data-category="me">me</div>
<div class="change-data" data-category="my">my</div>
<div class="change-data" data-category="mine">mine</div>

<div class="get-data" data-category="i">データあるよ</div>
```

```js:JavaScript
$('.change-data').on('click', function(){
  $('.get-data').attr('data-category', $(this).data("category"));
});

$(document).on('click', '.get-data', function(){
  console.log($(this).data('category'));
});
```

## 求める挙動
* ロード時、.get-dataをクリックすると「i」が取得できる。
* .change-dataをクリックすると、.get-dataのdata-categoryが変化する。
* 再度.get-dataをクリックすると、.change-dataから取得したdata-categoryが取得できる。

## 実際の挙動
* ロード時、.get-dataをクリックすると「i」が取得できる。
* .change-dataをクリックすると、.get-dataのdata-categoryが変化する。
* 再度.get-dataをクリックすると、**問答無用で「i」(初期値) が返ってくる。**

## なんで?
原因は以下の通り。

* jQueryが (?) data属性をキャッシュしている。
* attr()メソッドで書き換えているのはHTML上の属性値だけで、jQueryオブジェクト上では上書きできていない。

えー。
ちなみに、.change-dataクリック時の処理を下記に変えてみると?

```js:JavaScript
$('.change-data').on('click', function(){
  $('.get-data').data('category', $(this).data("category"));
});
```

* jQueryオブジェクト上は上書きできるが、HTML上の属性値は変化しない。

(ﾟДﾟ) ハァ?

## 暫定的な解決策
data()メソッドは絶対に使わない前提で、全部attrにしちゃおうぜ!

```js:JavaScript
$('.change-data').on('click', function(){
  $('.get-data').attr('data-category', $(this).attr("data-category"));
});

$(document).on('click', '.get-data', function(){
  console.log($(this).attr('data-category'));
});
```

## 真 (?) の解決策
ネイティブJSのdataset使おうぜ!

```js:JavaScript
$('.change-data').on('click', function(){
  $('.get-data')[0].dataset.category = $(this).data("category");
});
```

なお、datasetのサポート状況は下記の通り。

|ブラウザー|バージョン|
|:--------|:--------|
|IE       |11～     |
|Firefox  |6～      |
|Chrome   |7～      |
|Safari   |5.1～    |
|Opera    |11.5～   |
|iOS      |5.0～    |
|Android  |3～      |

古いIEやAndroidブラウザーでは、getAttributeかattr()メソッドを使えって事ですかね。

なんだこの中途半端なメソッドは……。
IE9でabout:blankを開いた時の罠

※今回の発見はレアケースなので、実務では役立たないと思いますが、備忘録として

ECMAScript 5でサポートされて、IE9でも動作するとの記述があるメソッドを試そうと、
IE9で試し打ちをしました。

僕は、ブラウザーの挙動確認はまっさらなところで行うために
about:blankで試し打ちをする癖を付けているので、
ブックマークにも[about:blank](about:blank)を入れているぐらいなのですが、
今回の元凶がabout:blankでした。

IE9で開発者ツールを開いて以下のコードを試し打ちしたところ、エラーが発生。

```js
d = new Date();
d.toISOString();
```

原因が判らずハマってたのですが、よく見たら開発者ツールのメニューに「Quirks」（互換モード）の文字を発見。

IE9のabout:blankは互換モードで開かれる虞があるのですね…。
道理でECMAScript 5のメソッドが動かないわけで。

IE検証するときは互換モードでハマることはたまにあると思うので、そこはみなさん注意しましょう。
c++ builder > バイナリファイル読込み > TFileStream使用 > fs->Seek(2, soFromBeginning);

```txt:動作確認
C++ Builder XE4
```

http://qiita.com/7of9/items/ddc91dbffbf359272084
でファイル読込するとき、シークの仕方。

```cpp
fs->Seek(2, soFromBeginning);
```

http://docwiki.embarcadero.com/Libraries/XE8/ja/System.Classes.THandleStream.Seek

- soFromBeginning : Offset はリソースの始めを原点とする。Seek メソッドは位置を Offset に移動する。Offset >= 0 でなければならない 
- soFromCurrent : Offset はリソースの現在位置を原点とする。Seek は，Position + Offset へ移動する  
- soFromEnd : Offset はリソースの終わりを原点とする。Offset <= 0 でなければならない。ファイル末尾からのバイト数をマイナスで示す
elfsharp > ELF.cs > internal ELF() > ReadHeader() / ReadStringHeader() / ReadSections() / ReadSegmentationHeaders()

https://github.com/konrad-kruczynski/elfsharp/blob/master/ELFSharp/ELF/ELF.cs

```csharp:ELF.cs
...
internal ELF(string fileName)
        {
            this.fileName = fileName;
			if(ELFReader.CheckELFType(fileName) == Class.NotELF)
			{
				throw new ArgumentException("Given file is not proper ELF file.");
			}
            stream = GetNewStream();
            ReadHeader();            
            ReadStringTable();
            ReadSections();
            ReadSegmentHeaders();
        }
...
```

ReadHeader()からReadSegmentHeaders()を理解できれば、とりあえずヘッダ情報はおさえられる。
全国の郵便番号データを最速でMySQL(MariaDB)に入れてみる

**CentOS7**です。

# 大まかな流れ
1. MariaDBのインストール＆起動
2. 郵便局の郵便番号データのダウンロードページからCSVをダウンロード
3. CSVファイルをUTF8かつ全角カナに変換
4. MariaDBで郵便番号テーブルを作る
5. LOAD DATA LOCAL INFILEでCSVファイルからインポート

まず何はともあれrootに。以下**全部root作業**。

## 1. MariaDBをインストール＆起動

```
# cat /etc/redhat-release
CentOS Linux release 7.1.1503 (Core)
```

MariaDBをインストールして、起動＆自動起動設定＆動作確認

```
# yum install mariadb-server
# systemctl restart mariadb.service
# systemctl enable mariadb.service
```

## 2. 郵便局の郵便番号データのダウンロード
ここにあります。
http://www.post.japanpost.jp/zipcode/dl/kogaki-zip.html

```
# yum install wget unzip
# wget http://www.post.japanpost.jp/zipcode/dl/kogaki/zip/ken_all.zip
# unzip ken_all.zip
```

## 3. CSVファイルをUTF8かつ全角カナに変換
元ファイルはsjisで半角カナありなので、UTFかつ全角カナに変換。
nkfをインストールするため、epelのリポジトリを有効にする。

```
# yum install epel-release
# yum install nkf
# nkf -w KEN_ALL.CSV > ken_all_u.csv
```

## 4. データベースとテーブルの作成
mysqlに接続

```
# mysql
```

ここからmysqlの操作
まずはDBとテーブルの作成、カラムは15個で大きさはテキトウ。

```lang:mysql
MariaDB [(none)]> create database sampledb default character set utf8; 
MariaDB [(none)]> use sampledb
MariaDB [(sampledb)]> 
create table zipcode (
 id int unsigned not null auto_increment,
 jiscode varchar(255),
 zipcode_old varchar(255),
 zipcode varchar(255),
 pref_kana varchar(255),
 city_kana varchar(255),
 street_kana varchar(255),
 pref varchar(255),
 city varchar(255),
 street varchar(255),
 flag1 tinyint,
 flag2 tinyint,
 flag3 tinyint,
 flag4 tinyint,
 flag5 tinyint,
 flag6 tinyint,
 primary key (id),
 key zipcode (zipcode)
);
```

## 5. LOAD DATA LOCAL INFILEでCSVファイルからインポート

```lang:mysql
MariaDB [(sampledb)]> 
LOAD DATA LOCAL INFILE '/root/ken_all_u.csv'
INTO TABLE zipcode 
FIELDS
    TERMINATED BY ','
    OPTIONALLY ENCLOSED BY '"'
    ESCAPED BY ''
LINES
    STARTING BY ''
    TERMINATED BY '\r\n'
(
 jiscode,
 zipcode_old,
 zipcode,
 pref_kana,
 city_kana,
 street_kana,
 pref,
 city,
 street,
 flag1,
 flag2,
 flag3,
 flag4,
 flag5,
 flag6
);
```

最後に確認

```lang:mysql
MariaDB [(sampledb)]> select * from zipcode limit 2 \G
```
c++ builder > バイナリファイル読込み > TFileStream使用 > fs->Read(buf,4);

```txt:動作確認
C++ Builder XE4
```

参考
http://www.geocities.co.jp/SiliconValley/6071/technic/29.html

上記をもとに作成。4バイト読込む例

```csharp
	if (FileExists(filename) == false) {
		return false;
	}

	TFileStream *fs;

	try {
		fs = new TFileStream(filename, fmOpenRead);
	} catch (...) {
	}

	char buf[20] = {0};

	fs->Read(buf, 4);

	delete fs;
	fs = NULL;

	int nop=1;
```
[Swift] TableView で背景画像を表示させる

iOS幼稚園年少さんのメモです。

# TableViewに背景を設置

UITableViewControllerのサブクラスのViewDidLoadにて。

```swift:
class FooTableView: UITableViewController {
  override func viewDidLoad() {
　　　・
　　　・
    // make UIImageView instance
    var imageView = UIImageView(frame: CGRectMake(0, 0, self.tableView.frame.width, self.tableView.frame.height))
    // read image
    let image = UIImage(named: "imageFileName")
    // set image to ImageView
    imageView.image = image
    // set alpha value of imageView
    imageView.alpha = 0.5
    // set imageView to backgroundView of TableView
    self.tableView.backgroundView = imageView
　　　・
　　　・
  }
}
```

とりあえずこれで背景画像は設置されます。
しかし、これだけだとcell群の後ろに隠れたままです。

# Cellを透過させる

```swift
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
　　・
　　・      
  var cell = tableView.dequeueReusableCellWithIdentifier("fooCell", forIndexPath: indexPath) as! FooTableViewCell // これはCustomCellを使ってる場合
　　・
　　・
  // cellの背景を透過
  cell.backgroundColor = UIColor.clearColor()
  // cell内のcontentViewの背景を透過
  cell.contentView.backgroundColor = UIColor.clearColor()
　　・
　　・
  return cell
}
```

これでTableViewの背景が表示されるかと思います。

# References
- [UITableView Transparent](http://stackoverflow.com/questions/5967207/uitableview-transparent)
Xcodeのバージョンをメニューに表示するプラグイン


下の画像のようにXcodeのメニュー端にVersionを表示します。
複数バージョンのXcodeを利用しているときに便利かもしれません。

![show_version.png](https://qiita-image-store.s3.amazonaws.com/0/37443/eb5271f9-bf3b-cb05-82c7-93fd67ebed54.png "show_version.png")
 
[XcodeShowVersion](https://github.com/hmuronaka/XcodeShowVersion)
自動でコミットメッセージに絵文字を付け加える

前同僚がやってて可愛かったので絵文字を自動で付け加える様に

```rb:.git/hooks/prepare-commit-msg
#!/usr/bin/env ruby

# :up: :up: when improving the format/structure of the code
# :hammer: :hammer: when refactoring the code
# :chart_with_upwards_trend: :chart_with_upwards_trend: when improving performance
# :memo: :memo: when writing docs
# :bug: :bug: when fixing a bug
# :fire: :fire: when removing code or files
# :green_heart: :green_heart: when fixing the CI build
# :white_check_mark: :white_check_mark: when adding tests
# :lock: :lock: when dealing with security
# :arrow_double_up: :arrow_double_up: when upgrading dependencies
# :arrow_double_down: :arrow_double_down: when downgrading dependencies
# :hatching_chick: :hatching_chick: when adding new features

EMOJIS = {
  # up: [/Improve(?:s)? /i, /Update(?:s)? /i, /Replace(?:s)? /i, /Change(?:s)? /i, /Tweak(?:s)? /i],
  hammer: [/Refactor(?:s)? /i, /Rename(?:s)? /i],
  chart_with_upwards_trend: [/Tuneup(?:s)? /i],
  memo: [/Write(?:s)? /i],
  bug: [/Fix(?:es)? (?:(?!spec|linter|test))/i],
  fire: [/Remove(?:s)? /i],
  green_heart: [/Fix(?:es)? broken (?:spec|linter|test)(?:s)?/i],
  white_check_mark: [/Add(?:s)? (?:spec|test)(?:s)? /i],
  lock: [/Secure(?:s)? /i],
  arrow_double_up: [/Upgrade(?:s)? /i],
  arrow_double_down: [/Downgrade(?:s)? /i],
  hatching_chick: [/Add(?:s)? (?:(?!spec|test))/i, /Create(?:s)? /i, /Introduce(?:s)? /i],
}

EXCLUDES = [
  /Merge/i,
]

commit_msgs = File.readlines(ARGV[0])
commit_msgs[0] = commit_msgs.first.gsub(/:.+: /i, '')

unless Regexp.union(EXCLUDES).match(commit_msgs.first)
  emoji = EMOJIS.map do |key, regex|
    if Regexp.union(regex).match(commit_msgs.first)
      ":#{key}:"
    end
  end.compact.uniq.first || ':up:'

  open(ARGV[0], 'w') do |file|
    file.print "#{emoji} "
    file.puts commit_msgs
  end
end
```

__参考__
[Gitのコミットメッセージを絵文字から始める - Qiita](http://qiita.com/pocotan001/items/775cc77087be5562cc56)
[atom/CONTRIBUTING.md at master · atom/atom](https://github.com/atom/atom/blob/master/CONTRIBUTING.md#git-commit-messages)
elfsharp > ELFReader.cs > CheckELFType() > 先頭4文字のチェック

https://github.com/konrad-kruczynski/elfsharp/blob/master/ELFSharp/ELF/ELFReader.cs

```csharp
...
public static Class CheckELFType(string fileName)
		{
			var size = new FileInfo(fileName).Length;
			if(size < Consts.MinimalELFSize)
			{
				return Class.NotELF;
			}
			using(var reader = new BinaryReader(File.OpenRead(fileName)))
			{
				var magic = reader.ReadBytes(4);
				for(var i = 0; i < 4; i++)
				{
					if(magic[i] != Magic[i])
					{
						return Class.NotELF;
					}
				}
				var value = reader.ReadByte();
				return value == 1 ? Class.Bit32 : Class.Bit64;
			}
		}
...
```

ファイルの先頭から4文字のチェック (Magicかどうか) をしている。

Magicは同じスクリプト内で

```
private static readonly byte[] Magic = new byte[] {
			0x7F,
			0x45,
			0x4C,
			0x46
		}; // 0x7F 'E' 'L' 'F'
```
Python botoからDynamoの操作の事始め

## 初めに

Boto(AWSのPython SDK)を使ってDynamo DBにアクセスしたい、と思ったのですが、初歩的な部分でずばり参考になるSample Codeがうまく見つからなかったので、作成したCodeをチラシの裏しておきます。



### Dynamoにアクセスして`get_item`, `query_2`, `scan`をするCode
##### 以下を前提にしています
* Dynamoへのアクセス権が付与されたIAM Userは作成済で、`Access Key ID`と`Secret Access Key`も作成済
* Dynamoには`requests`というTableが既にある
* `requests` tableのHashkeyがStringで`userID`、Range KeyがNumberで`created_date`


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

import boto.dynamodb2
from boto.dynamodb2.table import Table

#AWS Keys for Dynamo
aws_access_key_id = 'AKIASJOE73SDGDTDA'
aws_secret_access_key = 'BuAHZv01Us0pZTbe87987JOIeuoeaM3MO'
aws_region = 'ap-northeast-1'

def main():
  conn = boto.dynamodb2.connect_to_region(aws_region, aws_access_key_id=aws_access_key_id,
　　　　　　　　　　　　　　　　　　　　　　　aws_secret_access_key=aws_secret_access_key)

  requests = Table('requests', connection=conn)

  # show # of items
  print requests.count()


  # 'get_key_fields' example to show hash/range-key info for this table
  print requests.get_key_fields()
  

  # 'get_item' example to show all attribute of a item which has particular userID/created_date
  item = requests.get_item(userID='USER-ID-0123-EDSMQNAK', created_date=143918255309)
  for field, val in item.items():
    print "%s: %s" % (field, val)


  # 'query_2' example to query items with particular userID, and show all attributes for each item
  # need to set 'userID__eq', not 'userID' 
  query_item = requests.query_2(userID__eq='USER-ID-0123-EDSMQNAK')
  for item in query_item:
    for field, val in item.items():
      print '%s: %s' % (field, val)
    print '--------------------'


  # 'query_2' example to query items of userID (_eq) AND range key (__gt) 
  query_item = requests.query_2(userID__eq='USER-ID-0123-EDSMQNAK', created_date__gt=143918200000)


  # 'scan' example to scan with key "last_access_day" >= "20150810" 
  query_item = requests.scan(last_access_day__gte=20150810)

if __name__ == '__main__':
  main()
```

### 補足
##### `get_item`, `query_2`, `scan`の違い
* `get_item`は、Key (hash or hash+range_key)を指定して、Best matchするitemを**1件**取り出す
* `query_2`は、Key (hash or hash+range_key)を検索条件として、Matchするitemを**複数**取り出す。検索条件としてKeyしか使えない。range_keyに対しては、`KeyConditionExpression`という演算子(`EQ|LE|LT|GE|GT|BEGINS_WITH|BETWEEN`)でgreather, lessなどの範囲指定が可能
* `scan`は、いわゆる全文検索で、Key以外のattributeを検索条件に検索が可能です (が、read capacity unitを大量消費します)
* [Amazonの公式Documentはこちらを参照](http://docs.pythonboto.org/en/latest/ref/dynamodb.html#module-boto.dynamodb.table)
.elf / csharp > elfsharp > ELFファイルを読込むツール (C#版)

ELFファイルを読込むツール (C#版)
https://github.com/konrad-kruczynski/elfsharp

使用例スクリプト
https://github.com/konrad-kruczynski/elfsharp/tree/master/Tests/ELF

```csharp:OpeningTests.cs
...
ELFReader.Load(Utilities.GetBinaryLocation("issue24.elf"));
...
```

- ELFReader.Load() : バイナリ読込のようだ
- Utilities.GetBinaryLocation() : バイナリの位置を知る関数のようだ
PostgreSQL psql文字化けに対処する(Windows x86/WOW64)

+ intl.dllを入手する
+ サービスを停止する
+ intl.dllを差し替える
+ サービスを再開する

http://kenpg2.seesaa.net/article/414871857.html
http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/gettext-runtime_0.18.1.1-2_win32.zip
WinのVisual Studio CodeをMacと同じemacs風のカーソル移動できるようにする


普段はMacでVisual Studio Codeを使っているのですが、Windowsで使う際にもMacでは共通に使えるEmacs風カーソル移動ショートカットを定義してみます。

###参考

[こちら](http://qiita.com/nana4gonta/items/44e4c7426195ae5a031b)を参考にさせていただきました。ありがとうございます。
ただ、私は基本的なショートカットだけでいいので、一部を抜粋させていただきました。

###設定

File->Preference->KeyboardShortCutsに、下記を追加。2ペイン開くので、右のエリアのペーストする。

```json
[
    {
        "key":"ctrl+n",
        "command":"cursorDown",
        "when":"editorTextFocus"
    },
    {
        "key":"ctrl+p",
        "command":"cursorUp",
        "when":"editorTextFocus"
    },
    {
        "key":"ctrl+f",
        "command":"cursorRight",
        "when":"editorTextFocus"
    },
    {
        "key":"ctrl+b",
        "command":"cursorLeft",
        "when":"editorTextFocus"
    },
    {
        "key":"ctrl+a",
        "command":"cursorHome",
        "when":"editorTextFocus"
    },
    {
        "key":"ctrl+e",
        "command":"cursorEnd",
        "when":"editorTextFocus"
    },
    {
        "key":"ctrl+d",
        "command":"deleteRight",
        "when":"editorTextFocus"
    },
    {
        "key":"ctrl+h",
        "command":"deleteLeft",
        "when":"editorTextFocus"
    }
]
```
###その他

Windowsでは、インストールしただけで、CLIでcodeと打てばVSCが起動するのですね。

VSCのショートカットを「送る」に登録する場合は、「ファイル名を指定して実行」で、shell:sendtoと打つと、対象のフォルダが開きます。
Wildfly8.2.1.Final で Arquillian を実行するときに -vm の設定が必要でした。

# Arquillian チュートリアルの勉強
Java EE の単体テストのやり方を勉強していて Arquillian を知りました。
下の Getting Started が非常に丁寧で参考になりました。
http://arquillian.org/guides/getting_started_ja/


WildFly を使って作業していることもあって、上記のチュートリアルで作成した POM.xml の profile を jbossas の remote を真似て追記しました。

`<profile>
 <id>arquillian-wildfly-remote</id>
 <dependencies>
    <dependency>
        <groupId>org.jboss.spec</groupId>
        <artifactId>jboss-javaee-7.0</artifactId>
        <version>1.0.3.Final</version>
        <type>pom</type>
        <scope>provided</scope>
    </dependency>
        <dependency>
        <groupId>org.wildfly.arquillian</groupId>
        <artifactId>wildfly-arquillian-container-remote</artifactId>
        <version>1.0.1.Final</version>
        <scope>test</scope>
    </dependency>
 </dependencies>
</profile>`

WildFly 8.2.1.Final を起動しておいて、GreeterTest.java を実行したところ無事に緑のバーが出ました。

# サンプルプロジェクトで試す
## Maven で Java EE プロジェクト作成
Eclipse(mars) で以下の手順でプロジェクトを作成しました。

1. ファイル(F) -> 新規(N) -> その他で Maven -> 「Maven プロジェクト」
2. 新規 Maven プロジェクトで「フィルター」に "wildfly" を入力
3. "wildfly-javaee7-webapp-archetype" 8.2.0.Final を選択
4. グループ ID、アーティファクト ID を指定してプロジェクト作成

作成されたプロジェクトで POM.xml を参照すると、wildfly で remote のプロファイルが追加されていました。

`        <profile>
            <!-- An optional Arquillian testing profile that executes tests
                in a remote WildFly instance -->
            <!-- Run with: mvn clean test -Parq-wildfly-remote -->
            <id>arq-wildfly-remote</id>
            <dependencies>
                <dependency>
                    <groupId>org.wildfly</groupId>
                    <artifactId>wildfly-arquillian-container-remote</artifactId>
                    <scope>test</scope>
                </dependency>
            </dependencies>
        </profile>
`

## コードのコピー
プロジェクト内のサンプルコードを削除します。以下の2つのディレクトリ配下のファイルを手動で削除しました。
1. src/main/java
2. src/test/java

チュートリアルで作成した Greeter, PhraseBuilder のソースコードを src/main/java にコピーし、GreeterTest を src/test/java にコピーしました。

プロジェクトを右クリックして「Maven」から「Maven プロファイルの選択」で「arq-wildfly-remote」を選択して「OK」を押下します。
![04_profileSelected.JPG](https://qiita-image-store.s3.amazonaws.com/0/23355/a6cb2eda-ed3f-c293-b655-ef8933740c9b.jpeg)


すると POM.xml で以下のエラーが・・・。

`Missing artifact sun.jdk:jconsole:jar:jdk`

調べてみると、eclipse.ini に vm のパスを指定しないといけないみたいです。
[StackOverFlowで同じ問題にあった人の記事](http://stackoverflow.com/questions/25362127/build-path-issue-with-maven-dependencies-jconsole-jdk-jar/32086002#32086002)
-vmargs のパラメータの前に追加しました。自分はこんな感じです。

`-vm
C:\Program Files\Java\jdk1.8.0_51\bin\javaw.exe`

eclipse を再起動してみると、POM エラーは消えました。
WildFly を起動して GreeterTest を実行したところ、無事グリーンで終了しました。

調査に時間が掛かってしまったので、同じ問題にぶつかった方たちの参考になればと思います。
Laravel5.1.xをIIS8.5で使う


いつもはLinux環境ですが、今回はLaravel5.1.xをWindows Server 2012 R2(IIS8.5)環境で使う方法を調べてメモします。
また、database.configでSQL Serverへのコネクトしてみます。


##やりたいこと

* http://servername/laravelでLaravelを使えるようにする
* LaravelのDBとしてSQL Serverを使う

##前提知識

いくつか注意点がある。

* IISでは.htaccessでrewriteできないので、Web.configを使う。
* rewirteにはIISのrewriteモジュール（URL書き換えモジュール）が必要
* なるべくドキュメントルート（もしくは仮想ディレクトリ）を設定した方が良い。

私は、ドキュメントルートは既に別のアプリが使っているので、仮想ディレクトリを設定することにする。

##前提環境

* Windows Server 2012 R2インストール済
* IIS8.5インストール済
* rewriteモジュールインストール済
* PHP等インストール済
* SQL ServerおよびPHPドライバインストール済
* composerインストール済
* ドキュメントルート(C:¥inetpub¥wwwroot)にlaravelインストール済

また、普通にPHPをインストールしてPDO使うまでは[こちら](http://qiita.com/zaburo/items/bb80326385fe04752629)を参考にしてください。

##IISの設定

###仮想ディレクトリの設定

今回は、http://localhost/laravel/でLaravelにアクセスできるようにしてみる。
やり方は、普通の仮想ディレクトリの設定。

>laravelをc:¥inetpub¥wwwroot¥laravel¥publicにマップする

###Web.configの設置
publicフォルダに下記情報を記したWeb.configを設置

```xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
        <handlers accessPolicy="Read, Execute, Script">
        </handlers>
        <rewrite>
            <rules>
                <rule name="Rules for laravel" stopProcessing="true">
                    <match url="^(.*)$" ignoreCase="false" />
                    <conditions logicalGrouping="MatchAll">
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />                     
                    </conditions>
                    <action type="Rewrite" url="index.php/{R:1}" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>
```

自分の環境に合わせて、

```xml
<action type="Rewrite" url="index.php/{R:1}" />
```

部分を編集する。

>なお、そもそもURL Rewriteモジュールがインストールされていないと上記web.configはエラーになります。

###storageフォルダに書込権限付与

laravel/storagesフォルダにネットユーザーの書き込み権限を付与する。

以上。

http://localhost/laravelにアクセスしてLaravelと表示されればOK。

##SQL Serverを使う

ここでは、SQL Server 2014を利用したが、2012とかでも同じだと思う。
config/database.phpにSQL Server用の記述があるので、何も難しいことはない。

###.envの設定

通常と同じように.envを設定する。

###config/database.phpを編集する

標準ではMySQLを使われるようになっているので、それをSQL Serverに変更する。

```php
 'default' => env('DB_CONNECTION', 'sqlsrv'),
```
の行をmysqlからsqlsrvに変更する。

```php
Route::get('hoge',function(){
    
    $user = DB::table('users')->find(1);
    return $user->name;
    
});
```
などとしてテストしてみる。usersテーブルにnameカラムがあることが前提。/hogeにアクセスすると、id1のユーザー名が表示されました。

以上。
コマンドプロンプトを使ってvcfファイルをひとつにまとめる

Googleの住所録にインポートしようと思ったら、ひとつずつしかインポートできなかった！？なので、複数のvcfファイルをひとつのファイルにまとめる方法。

```lang:コマンドプロンプト
copy c:\vcf\*.vcf c:\vcf\xxx\@all.vcf
```

当方の元vcfの問題なのか「END:VCARD」の前に文字化けがくっついてた。
早くインポートする必要があったので、エディタのマクロで削除して完成。
AFNetworking を使って GET するまで

元ネタ: https://github.com/AFNetworking/AFNetworking/wiki/Getting-Started-with-AFNetworking の通りだといくつかつまずいたので、メモとして残しておこう。

# cocoapod のインストール

Homebrew をインストールしているなら、brew 経由でインストールするのが一番お手軽

```
% brew cask install cocoapods  # cask なのに注意
% rehash  # zsh の場合
```

# cocoapod で AFNetworking をインストール

まず XCode で適当に Swift なプロジェクトを作成します。
ここでは AFTest というプロジェクト名ということにしておきます。
作成したらもう使わないのでウインドウを閉じておきます。

```
% cd AFTest

% vim Podfile  # 以下のようにファイルを作成
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'
pod "AFNetworking", "~> 2.5"

% pod install

Analyzing dependencies

CocoaPods 0.38.2 is available.
To update use: `sudo gem install cocoapods`

For more information see http://blog.cocoapods.org
and the CHANGELOG for this version http://git.io/BaH8pQ.

Downloading dependencies
Installing AFNetworking (2.5.4)
Generating Pods project
Integrating client project

[!] From now on use `AFTest.xcworkspace`.

% open AFTest.xcworkspace
```

最後のコマンドで、xcodeproj ではなく、xcworkspace を使うことに注意。

# コードを書く準備

まず  Bridging Header を追加しましょう。

ViewController.swift と同じ階層に AFTest-Bridging-Header.h を作成し、以下のように `#import <AFNetworking/AFNetworking.h>` を追加します。

![スクリーンショット 2015-08-19 12.06.51.png](https://qiita-image-store.s3.amazonaws.com/0/9549/20824393-e5cf-0b69-d0d6-3c7ae579f6c8.png)

更にビルド設定で Bridging Header のパスを指定します。検索窓に `brid` 辺りまで入力すると見つけやすいです。

![スクリーンショット 2015-08-19 12.09.18.png](https://qiita-image-store.s3.amazonaws.com/0/9549/13f0e3e9-c6f0-89b3-e7c0-8511548b94c1.png)

この状態でビルドすると `'AFNetworking/AFNetworking.h' file not found` というエラーになります。
以下のリンクで紹介されている方法を試した所、ビルドが通るようになりました (他に正しい解決方法があるようにも思うけど...)

https://github.com/CocoaPods/CocoaPods/issues/2695#issuecomment-72873023

![スクリーンショット 2015-08-19 12.13.43.png](https://qiita-image-store.s3.amazonaws.com/0/9549/1a200cd3-ee53-5dea-3da2-d48377d34f6f.png)


# GET してみる

viewController.swift の viewDidLoad を以下のようにします。

```swift
    override func viewDidLoad() {
        super.viewDidLoad()

        let manager = AFHTTPRequestOperationManager()
        manager.GET("https://api.github.com/users/octocat/orgs", parameters: nil,
            success: {(operation: AFHTTPRequestOperation!, response: AnyObject!) in
                println("Success! \(operation)")
            },
            failure: {(operation: AFHTTPRequestOperation!, error: NSError!) in
                println("Error: \(error)")
            }
        )
    }
```

ビルドして コンソールに Succcess! と出力されれば OK です。
macOSのFinderのファイル名編集機能はとっても便利

特定のファイルにアクセスをするようなプログラムを作成する際はファイル名を英語にしたかったり、連番で管理したい時がよくあります。そんなときいちいち手作業でリネームをするのは大変ですよね。

Yosemiteから標準のFinderで複数のファイルに対して「テキストの置換」「前後へのテキストの追加」「日付や連番の数値の付与」など高機能なリネームを行ってくれます。

# キャプチャ
![](https://qiita-image-store.s3.amazonaws.com/0/67884/a38a72d1-d2f1-7031-95ab-cb5786515442.png)


# リネームの仕方
Finderのアイテムを複数選択し、右クリックして[n項目の名前を変更]メニューを選択します。

## テキストを置き換える
- ファイル名を置換することが出来ます。

>ほにゃらら.png → honyarara.png

## テキストを追加
- ファイル名の前後に対してテキストを追加することが出来ます。

後
>ほにゃらら.png → ほにゃらら_piyo.png

前
>ほにゃらら.png → hoge ほにゃらら.png

## フォーマット
- フォーマットを指定して、名前を変更することが出来ます。

### 名前のフォーマット
- 名前とインデックス
数値が付与されます。
>ほにゃらら.png → フォーマット1.png
>ほにゃららのコピー.png → フォーマット2.png

- 名前とカウンタ
ゼロパディングされた数値が付与されます。
>ほにゃらら.png → フォーマット00001.png
>ほにゃららのコピー.png → フォーマット00002.png

- 名前と日付
リネーム時の日付が付与される。
> ほにゃらら.png → ほにゃらら2015-08-19 10.53.29 午前.png

### カスタムフォーマット
- カスタムフォーマットにテキストを入力すると、現在設定されているファイル名をカスタムフォーマットに設定した新しい名前で置換されます。

>ほにゃらら.png → フォーマット1.png
>ぴよぴよ.png → フォーマット2.png

[![IMAGE ALT TEXT HERE](http://img.youtube.com/vi/mo8UsFJyhXY/0.jpg)](http://www.youtube.com/watch?v=mo8UsFJyhXY)
▲ 動作イメージ。クリックするとYoutubeに移動します。

# 所感
- パラメータを設定している時にちゃんと例のテキストが差し替わってくれて親切
- 多少間違えてもファインダー上のCMD+Zで戻れるので一括リネームを怖がらなくても良い
cloud.cfgのrepo_upgradeの指定方法一覧

/etc/cloud/cloud.cfg の repo_upgrade の指定時に非常に重要なセキュリティアップデートのみが対象に
なっていることに今更ながらに気づいたので、それ以外の指定方法について調べてみた。

デフォルト(security)の場合
--security --sec-severity=critical --sec-severity=important

それ以外の指定可能なもの

| 名前 | オプション |
|:-----|:------|
| all, true, on, yes | - |
| none | 起動しない |
| critical | --security --sec-severity=critical |
| important, security | --security --sec-severity=critical --sec-severity=important |
| medium | --security --sec-severity=critical --sec-severity=important --sec-severity=medium | 
| low | --security |
| bugfix, fixes, bugs, bugfixes | allと同等 |


bugfixに関してはコードに以下の記載があります。

> we treat bugfixes like "all" since all updates are in some sense bugfix updates.
Angural JSとDjangoのテンプレートコンフリクトを解決する

Webアプリを作る時に、バックエンドをPythonのDjango、フロントエンドをAngular JSだと、コンフリクトが起きてしまいます。しかも配列を使っている場合、一般的な方法も上手く行かず、ハマってしまいましたので書いておきます。

#コンフリクトは何故起きる？

Djangoのテンプレートでは、`{{`と`}}`をパラメータ挿入などに使いますが、Angular JSでも`{{`と`}}`をマークアップの始めと終わりに使います。そのためコンフリクトが起きてしまうようです。

#Angular JSのマークアップを別のもので行う

同じ{{}}を使うからコンフリクトしてしまうわけで、それに対して、Angular JS側のマークアップタグを別のものに変更する方法が用意されています。

```
<script>
var customInterpolationApp = angular.module('myapp', []);
  customInterpolationApp.config(function($interpolateProvider) {
    $interpolateProvider.startSymbol('//');
    $interpolateProvider.endSymbol('//');
  });

</script>

```
Appのconfigで
```
$interpolateProvider.startSymbol('//');
```

で開始タグを好きなものに、
```
$interpolateProvider.endSymbol('//');
```
で終了タグを好きなものに変えられます。
※ここでは、両方とも`//`に変更しています。

テンプレート中の`{{`と`}}`も指定したタグ`//`に変更します。

[公式ドキュメント](https://docs.angularjs.org/api/ng/provider/$interpolateProvider)


検索していると`[[`と`]]`に変えている人が多いようでしたが、その場合、Angural JSの中で配列`[]`を使うと動かないようです。`//`にすることで、動くようになりました。

他に、Python側で対応する方法もあるようですが、この方法が私には簡単でしたので、共有しときます。
進捗どうですかと煽ってくるプログラムをElixirのAgentとStream.transform/2を使って状態遷移で解く

Agent を使って状態遷移を管理して解いてみた．

```ex
defmodule Shinchoku do
  def start_link do
    {:ok, pid} = Agent.start_link(fn -> "" end)
    pid
  end

  # うまくいっている途中なら :progress
  # 失敗してやりなおしなら :reset
  # 終わったなら :done
  # を返す
  def get(pid, given) do
    Agent.get_and_update(pid,
      fn now ->
        case {now, given} do
          {"",     "進捗"} -> {:progress, "進捗"}
          {"進捗", "どう"} -> {:progress, "どう"}
          {"どう", "です"} -> {:progress, "です"}
          {"です", "か"}   -> {:done,     "か"}
          _                -> {:reset,    ""}
        end
      end)
  end

  def stream do
    Stream.repeatedly(fn ->
      Enum.shuffle(["進捗", "どう", "です", "か"]) |> hd
    end)
    |> Stream.transform({start_link, 0, :reset}, fn(str, {pid, n, state}) ->
      if state === :done do
        {:halt, {pid, n, state}}
      else
        amount = n + String.length(str)
        state = get(pid, str)
        {[{str, amount, state}], {pid, amount, state}}
      end
    end)
  end
end

:random.seed(:os.timestamp)

Shinchoku.stream
|> Stream.each(fn {str, _amount, _state} -> IO.write(str) end)
|> Stream.each(fn {_str, amount, state} ->
  if state === :done, do: IO.write("???\n#{amount}文字で煽られました．！！！！！\n")
end)
|> Stream.run

#> 進捗どうどう進捗ですですかどうですですかかかかどうか進捗かどう進捗ですか進捗進捗かどうですです進捗ですかですですどうかかかどうどうですどう進捗どうですどう進捗ですかですですかどう進捗ですですどうかですどうですかかどうかどうかどう進捗どうかどうかですです進捗進捗です進捗進捗どうどうです進捗です進捗か進捗どうどうどう進捗かどうですどうどうかどうですどうかかどうです進捗どうどう進捗進捗かかですですどう進捗かかかです進捗か進捗進捗ですどうですどうどうどうですかですですかどうどうどうです進捗どうですか???
#> 248文字で煽られました．！！！！！
```

Stream.transform/2 の第二引数に渡す関数の返り値が `{:halt, acc}` だと Stream は終わるので，明示的に終了を試みなくても勝手に終わる．

Stream の内容は以下のデバッグのように
`{文字, これまでの文字数, 状態}`
な 3 要素のタプルになっている．
状態が `:done` になったら終わりを意味する．

```
Shinchoku.stream
|> Stream.each(&IO.inspect/1)
|> Enum.take(10)

#> {"どう", 2, :reset}
#> {"どう", 4, :reset}
#> {"進捗", 6, :progress}
#> {"どう", 8, :progress}
#> {"か", 9, :reset}
#> {"進捗", 11, :progress}
#> {"か", 12, :reset}
#> {"です", 14, :reset}
#> {"か", 15, :reset}
#> {"どう", 17, :reset}
```
M Preview3端末でADB認識しないときの回避方法

M Preview3を焼いたらADB接続時のfingerprintダイアログも何も出なくて認識しなくなってえらい困っていたんですけれど、回避方法が分かったのでメモ書き。

## 対処方法
以下の設定を充電に変更する(ダメなときはMTPとか色々変更してみるといいかも)

    [設定] -> [開発者向けオプション] -> [USB設定の選択]

ポイントはNotificationのUSB接続設定を変更するのではダメなところ。
ちゃんとシステム設定を開いて設定を変更しないとダメでした。

(設定アプリの同じ機能クラスを使って管理しているでしょうからF/Wのバグな気がしますが、、、)
Type Script で Angularjs を書く時に Dependency Injection で困った

初めまして！風俗業界という底辺で働くIT土方であります！

さてさて、
TypeScript で Angularjs のディレクティブなんかを書く時、コンストラクタに変数を渡したいですよね。
でも、TypeScript ではコンパイルエラーになってしまう..(x_x)

そんな時、どうしたら良いのか書いてみました。

例えばこんなコード有ります。
カスタムディレクティブで値に入っている文字列をパースしてモデルとするケース

```html

<input type="file" my-directive="foo" />

```
JavaScriptだとこんな感じ

```js

myModule.directive('myDirective', function($parse){
  return {
    link : function($scope, $element, $attr) 
    {
      //自分のカスタムディレクティブから値を取るだけ
      var ngModel = $parse.attr('myDirective'); 
    }
  };
});

```
TypeScriptで書こうとすると

```ts

class myDirective implements ng.IDirective
{
  public constructor($parse : ng.IParseService){
     
  }

  public link(scope: ng.IScope, element: ng.IAugmentedJQuery, attrs : ng.IAttributes){
    var ngModel = $parse.attr('myDirective');
  }
}
//クラスなのでインスタンスにする
var hoge = new myDirective($parse);
```
しかし、コンストラクタに $parse を渡したいのですが、この時点ではDIされないので 
引数を渡す前の時点で、 $parse は undefined となってしまいます。

そこで！

```ts

class myDirective implements ng.IDirective
{
  static parse :  ng.IParseService;

  public constructor($parse : ng.IParseService){
     myDirective.parse = $parse;
  }

  public link(scope: ng.IScope, element: ng.IAugmentedJQuery, attrs : ng.IAttributes){
    var ngModel = myDirective.parse.attr('myDirective');
  }

  static factory(): ng.IDirectiveFactory {
    var directive: ng.IDirectiveFactory =
      ($parse :ng.IParseService) => new myDirective($parse);

    //必要なサービスを明示的に指定
    directive.$inject = ["$parse"];
    return directive;
  } 

}
//static なのでこうなる
var hoge = myDirective.factory();
```
staticなfactoryメソッドから明示的に必要なサービスを指定してあげる事で幸せになれました(^q^)
Nexus端末にM Previewを焼いたあとBootAnimationが止まらないとき

Nexusデバイスいくつか試してみましたが、M Previewのflashが終わったあとのBoot Animationが終わらない端末があったのでメモ書き。

## 対処方法
bootloader を unlockしたままにしていたので 公式にも書かれているコマンドでlock に戻す。

    fastboot oem lock
AndroidのUUID(eaio-uuid)について

AndroidのUUIDに関して、iOSとはちょっと異なっていたので忘れないように覚書です。

AndroidのUUIDに関しては、ちょっとググるといろいろ出てくるので、
ここでは割愛します。
・標準で取得できるUUIDでは、必ずしもユニークならない。
・バージョンによって規格が違う
などなどを以下のサイトで知りました。
http://jx-script.blogspot.jp/2010/03/javautiluuid.html

出来る限りユニークになるUUID取得方法を提示されていたので
バージョン１を使用することにしたのですが、
Androidで使うにはちょっと簡単にはいかなかったので記載しておきます。

**使用できなかったパターン１**
以下にあるjarをインストールしました。
http://johannburkard.de/software/uuid/
ビルドは通り、いざ実行すると
`NoClassDefFoundError: com.eaio.uuid.UUID`
が出力され、使用できなかったです。。。
libsにあるjarは削除。

**使用できなかったパターン２**
gradleに最新版を取得するようにして行えば変わるかと思い、

```build.gradle
compile ‘com.github.stephenc.eaio-uuid:uuid:3.4.0' 
```

としてビルド。
ビルドはオッケー。いざ実行すると同じ。。。
build.gradleに記載したコードは削除。

**使用できたパターン**
以下のスライドを参考にさせて頂きました。
http://www.slideshare.net/tomorrowkey/uuid

どうやら内部で使用している *CORBA* ライブラリがJavaコンパイルバージョン違いでAndroidでは使用できないようです。
なので、直接コードをプロジェクトに入れて、*com.eaio.uuid.UUID* にimportしている *CORBA* をコメントアウト。
implementsに記載してある *CORBA* も削除。
いざビルドするも、Fail。。。
内容を確認して
`UUIDHelper.java`
`UUIDHolder.java`
でも *CORBA* を使用していて、UUID.javaからは使用していなかったので、
ファイル毎削除。
ビルドも通り、実行してUUIDを取得することができました。

iOSと違ってUUIDの扱いが様々あってちょっと苦労しました。。。