OmniAICreator/Qiita-1.07M huggingface dataset:
markdownを直接ReactElementに変換するコンパイラを書いた


[mizchi/md2react](https://github.com/mizchi/md2react "mizchi/md2react")

デモページはここ [md2react playground](http://mizchi.github.io/md2react/ "md2react playground")

## 作った目的

巨大なmarkdownをリアルタイムプレビューする際、ただの文字列をinnerHTMLとかで更新したりしていると、更新の度にパース処理が走ってどんどん重くなってくる。

React には dangerouslySetInnerHTML というプロパティがあって、一応それっぽい感じで差分管理してくれるが、名前の通り色々怪しい挙動をする。


なのでmarkdownのASTから直接ReactElementを吐けるようにするとReactの差分計算で描画高速化されて良いのでは、というわけで作った。これはMarkdownPreview界にとって救いとなるであろう。

どこで使う目的かはお察しください


## 使い方

```javascript
global.React = require('react');
var md2react = require('md2react');

var md = '# Hello md2react';
var html = React.renderToString(md2react(md));

/*
<div data-reactid=".14qrwokr3sw" data-react-checksum="20987480"><h1 data-reactid=".14qrwokr3sw.$_start_root_0_heading"><span data-reactid=".14qrwokr3sw.$_start_root_0_heading.0">Hello md2react</span></h1></div>'
//'<div data-reactid=".58nba97pxc" data-react-checksum="-55236619"><h1 data-reactid=".58nba97pxc.0"><span data-reactid=".58nba97pxc.0.0">Hello</span></h1></div>'
*/
```

たとえばReactで使う場合、

```javascript
md2react = require 'md2react'
MarkdownPreview = React.createClass
  render: ->
    md = @props.body # ここにmd本文が入っているとする
    el = md2react(md, gfm:true, breaks: true)
    React.createElement 'div', className: 'markdown-content', [el]
    
```

## 概要

markedをforkしたmdastってプロジェクトがあって、これはmarkdownのASTを定義している。ソースマップ的なテキストレンジもとれる。パーサの第二引数はmdastにそのまま。

一応HTMLタグが出現した時はdangerouslySet~ にするしかなくてそうしているのだけど、渡す前にdompurifyでサニタイズ処理をいれている。

[wooorm/mdast](https://github.com/wooorm/mdast "wooorm/mdast")


なんかバグみつけて報告したら直してくれそうだった。よい。

Parse error in bullet with space before newline · Issue #15 · wooorm/mdast https://github.com/wooorm/mdast/issues/15
Objective-C：非同期通信でNSDataを取得する方法

非同期通信でNSDataを取得する方法で苦戦したのでメモ

```objc:getimage.m
    NSURL *url = [NSURL URLWithString:@"http://localhost/hoge.jpg"];

    dispatch_async(dispatch_get_main_queue(), ^{
        NSURLSession *urlSession = [Operation sharedOperation].session;
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:10.0];
        [request setAllowsCellularAccess:YES];
        [request setHTTPMethod:@"POST"];
        [request addValue:@"hogehoge" forHTTPHeaderField:@"HEADER-HOGE-KEY"];

        NSURLSessionDataTask *task = [urlSession dataTaskWithRequest:request
                                                   completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                                                       NSInteger statusCode = [(NSHTTPURLResponse *) response statusCode];

                                                       if(statusCode != 200 || !data || error) {
NSLog(@"error")
                                                       } else {
                                                           [self.uiimageview setImage:[UIImage imageWithData:data]];
                                                       }
                                                   }];
        [task resume];
    });
```

追記：
色々調べてみた結果、[SDWebImage](https://github.com/rs/SDWebImage)を利用するのが一般的のようです。

こちらのスライドがわかりやすかったです。
https://speakerdeck.com/ninjinkun/sdwebimagewo1nian-ban-shi-tutemita
Dockerでminecraftサーバーを動かす

Dockerでminecraftを動かすメモのようなもの。Qiita初めてなのでテストも兼ねて。

方針としてはホストの/var/lib/minecraftをminecraftサーバーのディレクトリとしてdockerでminecraft.jarを動かすという感じ(/var/lib/minecraftをvolumeとしてコンテナ内にマウント)。  

~~figを使うのでfigコマンドが動くようにしておく必要がある。まあdocker runで起動しても良いんだけど。~~  

figはすでに時代遅れなので、今は代わりにdocker-composeを使うことができる。fig.ymlがdocker-compose.ymlになるだけで記法は同じ。

Dockerfileを次のような感じで書いて適当なディレクトリに保存  

```dockerfile:Dockerfile
FROM ubuntu:14.04
#MAINTAINERも自分の名前に変更
MAINTAINER opamp_sando <opampg@gmail.com>

RUN apt-get update
RUN apt-get -y install openjdk-7-jre > /dev/null

WORKDIR /var/lib/minecraft

# jarファイルの名前を自分の環境に合わせて変更する
CMD ["/usr/bin/java", "-Xmx1024M", "-Xms1024M", "-jar" "minecraft_server.1.7.10.jar"]

# Forgeを使う場合はこんな感じ
#CMD ["/usr/bin/java", "-Xmx1024M", "-Xms1024M", "-jar", "forge-1.7.10-10.13.0.1207-universal.jar", "nogui"]
```

"~/minecraft/Dockerfile"として上記のDockerfileを保存したとすると、~/docker-compose.ymlに  

```yaml:docker-compose.xml
minecraft:
  build: minecraft/
  ports:
    - "25565:25565"
  volumes:
    - /var/lib/minecraft:/var/lib/minecraft
```

という感じでminecraftを登録して

    $ docker-compose up

するとminecraftサーバーが動く(はず)  

Docker runで動かすなら

    $ docker run -p 25565:25565 -v /var/lib/minecraft:/var/lib/minecraft minecraft_container_name  

という具合で動くはず。
コンテナにsshすると「Power Failure; System Shutting Down」と言われ接続出来ない場合

```bash:
# lxc-stop -k -n centos5
```

を多用していて発生。

```bash:
ssh centos5
```

> Power Failure; System Shutting Down

前も何度か経験した。

## 対処

```bash:
# lxc-attach -n centos5
```

![ img.png](https://qiita-image-store.s3.amazonaws.com/0/25728/c3ff2340-16f1-90b9-3e9a-79a84daf072b.png)

ここでも`Power Failure; System Shutting Down`表示あり。

```bash:
# reboot
```

以降ssh接続できるようになった。
なにか残っていたか
人気プログラミング言語ランキング

#はじめに

INTERNETCOM というサイトですが、「Perl 人気が過去最低に ― プログラミング言語の人気ランキング TIOBE インデックス」 という記事が出ていました。

それによるとオランダの TIOBE Software という会社がTIOBE Index というのを毎月出しているようです。これはインターネットのGoogle などの主要サーチエンジン（の検索数) によって計算されているそうです。

この記事を書いている時点でのランキングは下のようになっていました。

![TIOBE_ranking.png](https://qiita-image-store.s3.amazonaws.com/0/62802/00f5791e-3c45-99f8-88a8-6e65e3ce7c76.png)



#感想
##C 言語

C 言語が１位を保っているのはすごいですね。C 言語が登場したのは、Java や C# よりずっと前です。Wikipedia によると「C言語（シーげんご）は、1972年にAT&Tベル研究所のデニス・リッチーが主体となって作ったプログラミング言語である。」となってます。

その理由ですが、やはり Linux (Unix) との関係が深いせいでしょうね。C 言語なくして Linux (Unix) はあり得ませんから。OS それ自体も C 言語で書かれていますが、各種コンパイラや各種のツールやコマンド類も C 言語で書かれているはずです。

Linux (Unix) に限らず Windows や Android の主要部分も C 言語で書かれているはずです。

日本では残念ながら求人数を見る限り C 言語のシェアはあまり高くない感じです。C 言語はオブジェクト指向でないし、使いこなすにはそれなりに時間もかかります。

昔は業務系アプリなどにも使われていましたが、最近は Java に置き換えられて国内ではメーカーや大学、研究所などでの利用が主でしょうね。

##Java

Java ですが、C 言語に肉薄してますが、なかなか１位になれません。でも、国内ではたぶん１位でしょうね。最近では、業務系アプリの多くが Java を採用しています。こういうアプリは、昔 Cobol が多く利用されていましたが、最近はどんどん Java で置き換えられているようです。

国内で Java が人気なのは、「1990年代前半に登場しそれなりに実績がある」、「コンピュータの性能が上がり、当初問題とされた速度の問題が解消された」、「Java エンジニアが多くいるので開発コストやリスクが低い」などがあると思います。

一時、開発が低迷しましたが、今は Java 8 になっています。しかし、最新の機能を利用しているところはほとんど見かけません。未だに 3 とか 4 を使っているところもあります。

##C++ 言語

C++ は C 言語にオブジェクト指向を追加した言語で互換性があり、C++ コンパイラは C コンパイラでもあります。つまり、上位互換です。

C 言語でも OS のような相当大規模なプログラムが開発されていますが、手続き型の言語のため、大規模なプログラムでは見通しが悪く開発コストが大きいです。

C++ だとクラスや名前空間が使えるので見通しはよくなりますが、やはりポインタを多用する必要があったり、言語仕様が大きく習得が大変とか問題もあります。

という訳で国内では、あまりシェアは大きくないと思います。

##Objective C

これは iPhone の開発言語として注目を浴びましたね。C++ 同様に C 言語にオブジェクト指向を追加した言語です。Apple 系の開発では Objective C が主要言語ですが、他ではほとんど見かけません。Apple ファンなら習得する価値はあるかもしれません。


[続く...](http://bonk.red/articles/Misc/popular_languages.html)
XcodeのProfile実行時に"fatal error: malformed or corrupted AST file..."

# はじめに

プロファイラを実行しようとした時にこんなエラーが3件出ました。
あまり見ないパターン。

`
fatal error: malformed or corrupted AST file: 'Unable to load module "/Users/xxxmac01/Library/Developer/Xcode/DerivedData/ModuleCache/2BJ5THSL5EEBX/Darwin-A93YDID5443M.pcm": module file not found'
`

その対応方法です。
削除とクリーンですっきりと。

# 削除とクリーン

## 1. OrganizerからProjectのDerived Dataを削除

Window > Organizer
からProjectsで対象のプロジェクトを選択し
Derived DataをDeleteします。

## 2. Clean

Xcodeのメニューに戻り
Product > Clean

# おわりに
同じ現象が出た方の参考なりましたら幸いです。
memo DevSumi2015【19-C-5】　OpenID ConnectとAndroidアプリのログインサイクル


## 概要
GoogleやFacebook、Yahoo! JAPANの提供するOAuth、OpenID Connectのシングルサインオン（SSO）を利用する上でトークン、ログイン状態の管理が必要になります。ログイン、ログアウトに加えアプリによってはマルチアカウント利用やアカウント切り替えを必要とするケースもあります。スマフォアプリではネイティブ、WebViewでSSOの認証方法が異なり、実装パターンは多岐にわたります。これまでID連携の設計や実装サポートしてきたナレッジをもとに、AndroidアプリにおけるSSOからログイン状態の管理まで、アプリの要件にあった実装方法をご紹介します。

## 自己紹介
@kura_lab
OpenID Foundation Japan
ID厨

# ネィティブアプリではセッション管理が大変
## ID連携実装パターン
異なる組織間でユーザーのiDデータを連携し、サービスの向上をめざすもの

## OpenID Connect
http://openid.net/connect/

知っておきたい7つのID連携パターン
http://techblog.yahoo.co.jp/web/auth/id_federation_impl_patterns/


## WebApp スタンダードなパターン
WebApp server Request-> Server (Redirect処理)
1. Request
2. 認証
3. ID Token
4. Login処理

## Native スタンダードなパターン
Native  Browser
1. Request
2. 認証
3. ID Token
4. Login処理、AppにToken保存

## Native, WebView Hybrid
Native,  Browser(Yahoo)
1. Request
2. 認証
3. <- ID Token (Custom URI)
4. Login処理　Token 保存
5. Server Login 処理Webiew経由で Cookie発行、サーバーにトークンを保存

## OpenID Connect Tokenの種類
* Access Token
* Referesh Token
* ID Token

ふたつのトークンの物語
http://blog.openid.or.jp/post/12874061176/openid-connect-tale-of-two-tokens

 -> Token, Cookieによるセッション管理が大変

# ログインサイクルで大事なこと
ライフサイクル
![Invalid file type: image/bmp]()


ログイン時には
* Cookie有効
* AccessToken有効
* RefereshToken有効
* IDToken 有効

ログアウト時, Cookie 有効期限切れは
* Cookie無効
* AccessToken有効? 無効?
* RefereshToken有効 無効?
* IDToken 有効?

Token有効期限切れは
* Cookie無効？
* AccessToken 無効
* RefereshToken 無効
* IDToken 有効?

## ID Tokenとは？
詳しくは
http://www.slideshare.net/kura_lab/devsumi201413c5

FaceBookが、Slideshareのために、kuraを認証したかを示すToken
発行時に検証して、IDTokenは保持しなくてもよい

ID Tokenの内容
	iss:(issure)
	sub:
	aud: (audience)
	exp: (有効期限)

IDTokenの有効期限は、IDPがきめるもの。
WebViewに発行するCookieの有効期限はアプリのポリシーで決めてよい

### TokenはCookieの有効無効にあわせるとよいよ！

Cookie -> 無効，AccessToken, RefereshToken無効化
BackendをAPI を Callしたい場合は無効にしなくてもよい
ID Tokenは保持しなくてよい

Tokenの有効期限切れは、再発行。

### アカウント切り替え時は？
アカウント無効化すると再発行が大変なためバックエンドで保持するのがよいだろう

* Cookie　別アカウント発行
* AccessToken 保持
* RefereshToken 持無
* IDToken 保持しない。


# Androidはブラウザー経由でOpenID Connect

## WebViewではなく、ブラウザーを推奨する理由

### IDpのログインセッションを共有できる！
認証サービスを使用しているAppなら、共有できる

### SSL通信、ドメインを見てフィッシングか確認できる
WebViewの場合、SSL ドメインを確認できない

## iOS App で　やろうとすると
UX を理由にAppStoreの審査でリジェクトされることもある！
S3からデータの取り出し

S3にアップしたデータを取り出すときに、何故か、一回全リストを取得してからじゃないと、取れなかった。prefixの指定がダメダメでした。


サンプルコード

```py
#!/usr/bin/env python
import boto.s3.connection

def main():
  s3con = boto.s3.connection.S3Connection('アクセスキー的なな何か', '秘密な何か')
  bucket_con = s3con.get_bucket('logs-many')
  for k in bucket_con.list(prefix="access_log/2015/02/10/"):
    fn = k.name.split('/')[-1]
    body = k.get_contents_to_filename('log/' + fn)
    print 'Got! ' + fn

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

で、何がダメだったかというと、prefixに```/logs-many```と指定していたところだったようです。

なんか、ドキュメントとか読むと/foo/ってかいてあるから必要だと思ってました。
Dockerイメージの名前を変更する

# docker tag 追記：2015/02/20

コメントにて教えていただいた`tag`コマンドで1発でした。

`docker tag $(ubuntu_imageid) umintu`


1. `tag`コマンドで`umintu`イメージを作成
2. `ubuntu`イメージを削除

```bash
1. docker tag $(ubuntu_imageid) umintu
2. docker rmi ubuntu
```


# イメージ `ubuntu`を`umintu`にリネーム

1. `ubuntu`イメージから`temp`コンテナを起動
2. `commit`で、`umintu`イメージを作成
3. `temp`コンテナを停止
4. `temp`コンテナを削除
5. `ubuntu`イメージを削除

```bash
1. docker run -d --name="temp" ubuntu
2. docker commit temp umintu
3. docker stop temp
4. docker rm temp
5. docker rmi ubuntu
```


`docker images`すれば、新しい`umintu`だけになっているはず。
Could not retrieve selinux: Invalid argument - /proc/self/attr/current 対応

## 参考

* [Facter/Puppet: Could not retrieve selinux: Invalid argument - /proc/self/attr/current](http://ma.ttias.be/facterpuppet-could-not-retrieve-selinux-invalid-argument-procselfattrcurrent/)

## 現象

```bash:
# sudo puppet agent --test --noop
Could not retrieve selinux: Invalid argument - /proc/self/attr/current
Could not retrieve selinux: Invalid argument - /proc/self/attr/current
Could not retrieve selinux: Invalid argument - /proc/self/attr/current
Could not retrieve selinux: Invalid argument - /proc/self/attr/current
warning: Not using cache on failed catalog
err: Could not retrieve catalog; skipping run
```

> Could not retrieve selinux: Invalid argument - /proc/self/attr/current

のメッセージが出た。

## 対応

```bash:
# ls /selinux/
enforce
# rm -f /selinux/enforce
# reboot
```

これで解決した。
UNIX と Windows で Makefile を共用するときのターゲット（実行ファイル）の指定方法

UNIX と Windows で Makefile を共用しているときにアレ？ってなったのでまとめてみる。

# はじめに

まず Makefile の例として Hello World を出力する C のサンプルプログラム sample.c と、実行ファイル sample を作成する Makefile の例を示そう。make は gmake を仮定している。

```sample.c
#include <stdio.h>
int main(int argc, char *argv[])
{
    printf("Hello World!\n");
    return 0;
}
```

```mf:普通のMakefileの例
TARGET = sample
OBJS = sample.o

$(TARGET): $(OBJS)
```

これで make を実行すれば sample.c から実行ファイルが sample が作成されると思う。そう、UNIX ならね。

## UNIX の場合

```
$ make
cc -c -o sample.o sample.c
cc sample.o -o sample
$ ./sample
Hello World!
$
```

Makefile にはコンパイルの方法は何も書いてないけれども、暗黙の規則によって上のようにコンパイラが実行されているわけだ。

もちろんこれには何の問題もない。

## Windows の場合

Windows で実行するとどうなるか。話を単純にするために make は gmake、C コンパイラは gcc ということにしておこう。

同じようにコンパイラが実行された。

```
D:\test> make
gcc -c -o sample.o sample.c
gcc sample.o -o sample

D:\test>
```

コマンドプロンプトから "sample" ってタイプして Enter キー押したら "Hello World!" って出たよ!

```
D:\test> sample
Hello Wolrd!

D:\test>
```

何の問題もない? いや、ちょっと待ってほしい。

フォルダをよくみると作成されたのは "sample" じゃなくて "sample.exe" だ。Windows では実行ファイルの拡張子が ".exe" だからこれはこれで正しい。

gcc のオプション "-o" では単に "sample" としか指定していないが、Windows 環境なので gcc が気を利かせて拡張子 ".exe" を付加してくれてるのだ。

Windows のコマンドプロンプトから実行するときは、拡張子 ".exe" を省略して "sample" としても "sample.exe" が見つかればそれが実行される。Windows 環境であればこれは期待通りの動作である。

# 何が問題？

もう一度 make を実行してみよう。

まずは UNIX。

```
$ make
make: 'sample' is up to date.
$
```

さっき "sample" を作成したので再コンパイルの必要はない、"sample" は最新であるとのメッセージが表示されて make は終了した。すばらしい。無駄なコンパイルは実行しないという make が誇る機能である。

同様に Windows で実行してみると…

```
D:\test> make
gcc sample.o -o sample

D:\test>
```

あれれ? gcc が実行されてしまったぞ。

## どうしてこうなった?

これは Makefile の記述に原因がある。make は依存関係に書かれているターゲットとソースのファイルの日付を比べてコマンドを実行するべきかどうかを判断する。

この例でのターゲットは "sample" だ。

実際にフォルダにできているのは "sample.exe" なので make は "sample" がないものと思って振る舞う。"sample.o" はすでにできているのでターゲット "sample" を作成すべく gcc が実行されるが作成されるのはまたしても "sample.exe"...

## どうしたらいい？

### ターゲットに実際のファイル名を指定する

これはターゲットが実際のファイル名と一致していないことに原因がある。だから実際のファイル名をターゲットに指定すればよい。

```mf:Windows用のMekefile
TARGET = sample.exe
OBJS = sample.o

$(TARGET): $(OBJS)
```

うん、そうだね。これで Windows で正しく動くようになった。Windows での gcc の -o オプションは "sample" でも "sample.exe" でもどちらも期待通り動作する。

しかし UNIX 用とは異なる Makefile になってしまった。

### 条件文でターゲットのファイル名を切り替える

こうなったら環境をみて条件文で切り替えるしかないね。くどいようだけどここでは gmake を想定しているのでその他の make の人はマニュアルを参照すること。

```mf:環境によってファイル名を切り替える
ifeq ($(OS),Windows_NT)
  TARGET = sample.exe
else
  TARGET = sample
endif

OBJS = sample.o

$(TARGET): $(OBJS)
```

ここまでくればあと一息。


# 解決方法

実行ファイルの拡張子を EXEEXT という変数に格納することにして、
依存関係のターゲットには常に EXEEXT を付加しておけばいい。EXEEXT の中身は Windows 環境であれば ".exe" それ以外であれば空文字列だ。

```mf:解決案
TARGET = sample
OBJS = sample.o

ifeq ($(OS),Windows_NT)
  EXEEXT = .exe
endif

$(TARGET)$(EXEEXT): $(OBJS)
```

これで UNIX, Windows 双方の環境で動作するようになった。

# おわりに

いまどき直接 Makefile を書く人も少ないのかもしれないけれど、調べても情報が見つからなかったので自分でまとめてみた。

もっとこうしたほうがいいとか、普通はこうするとかいうネタを持ってる人がいたらコメントくれるか、どこかに記事をアップしてくれるといいんじゃないかな？

申し訳ないけど autoconf, automake 使えばとか CMake 使えばとかいうのは別のところで布教お願いします。
各サイト、タイトルとテキストのフォントサイズ指定まとめ


少し気になったので調べてみました。

###しらべぇ http://sirabee.com/

|   | PC | SP |
|:-----------|------------:|:------------:|
| タイトル    |        31 |     18     |
| 通常       |        16 |     16     |  


###ライフハッカー http://www.lifehacker.jp/

|   | PC | SP |
|:-----------|------------:|:------------:|
| タイトル    |        26 |     21     |
| 通常       |        15 |     15     |  


###アップバンク http://www.appbank.net/

|   | PC | SP |
|:-----------|------------:|:------------:|
| タイトル    |        24 |     18     |
| 通常       |        16 |     15     |  


###HONZ http://honz.jp/


|   | PC | SP |
|:-----------|------------:|:------------:|
| タイトル    |        26 |     20     |
| 通常       |        15 |     15     | 




###デイリーポータルZ http://honz.jp/


|   | PC | SP |
|:-----------|------------:|:------------:|
| タイトル    |        画像 |     画像     |
| 通常       |        16 |     31     | 




###クックパッド http://cookpad.com/

|   | PC | SP |
|:-----------|------------:|:------------:|
| タイトル    |       24 |     18     |
| 通常       |        15 |     14     | 




###Yahoo!JAPAN http://www.yahoo.co.jp/

|   | PC | SP |
|:-----------|------------:|:------------:|
| タイトル    |       22 |     18     |
| 通常       |        15 |     16     |
"'Safe' option is deprecated, please use 'w' instead"の解消方法

CakePHPでMongoDBを利用しているのですが、使用しているライブラリが古いせいかログに、

```
"'Safe' option is deprecated, please use 'w' instead"
```

というnoticeメッセージが大量発生していました。

公式ドキュメントをみると、メッセージ通り、safeモードのオプション指定は非推奨になっているので、write concernを使えとのこと。

```php:before.php
$collection->insert($data, array('safe' => true));
$collection->save($data, array('safe' => true));
$collection->update($conditions, $data, array("multiple" => false, 'safe' => true));
```

となっているのを、

```php:after.php
$collection->insert($data, array('w' => 1));
$collection->save($data, array('w' => 1));
$collection->update($conditions, $data, array("multiple" => false, 'w' => 1));
````

に修正したところ解消しました。

めでたしめでたし。

困ったときは公式ドキュメントをみるに限りますね。
http://php.net/manual/ja/mongocollection.insert.php
http://php.net/manual/ja/mongocollection.save.php
http://php.net/manual/ja/mongocollection.update.php
Safariで自動でタブ切り替え・更新をする

## 動機

Webの管理画面やJenkins、[Trello](https://trello.com)などの画面をオフィスのメンバーで共有し、タスク管理を効率化したいと思いました。

## 概要

### 下準備

Mac miniとApple TV、それに大型モニタを活用して、Safariの画面をモニタに映します。

### スクリプト

```applescript
tell application "Safari"
	repeat
		repeat with i from (count of tabs of window 1) to 1 by -1
			set thisTab to tab i of window 1
			set current tab of window 1 to thisTab
			delay 30
			set sameURL to URL of current tab of front window
			set URL of current tab of front window to sameURL
			delay 30
		end repeat
	end repeat
end tell
```

## 結果

これで共有モニターに重要な情報を常時表示しておくことができます。

## 不明な点

ChromeやFirefoxで同じことができるのかは知りません。やったことがある人がいたら教えてください。
Railsが入っていない環境でRailsのプロジェクトを新規で作成する

# 経緯
僕の開発環境ですが、いろいろなRubyのバージョン、Railsのバージョンがあるので、rbenvを入れて、各Rubyのgemはインストールしたときのままとしています。
（bundllerを入れているのみ）

今までは、既存のRailsプロジェクトを入れていたので、これで問題ありませんでした。

ところが、ふと、新しいRailsプロジェクトを作ろうと思うと、

```bash:command
rails new ・・・
```

が使えないではないですか。
（あたりまえですよね :sweat: ）

そこで、Railsが入っていない状態から、Railsプロジェクトを新規作成する手順をまとめました。

# 前提
以下、環境作成済み
* rbenv （Rubyのバージョン管理ツール）
* ruby  （ver 2.1.5 bundllerインストール済み）
* mysql （データベース）

rbenv、rubyのインストールについては[こちら](http://qiita.com/takaki_k/items/e46b7ae6c3afbcfec080)から

# 手順
プロジェクトディレクトリを作成して、カレントディレクトリにします。

使用するRubyのバージョンを指定します。

```bash:command
rbenv local [バージョン] 
```

`.ruby-version`ファイルが作成されます。（隠しファイルです。）

bundler用の定義ファイルを作成します。

```bash:command
bundle init 
```

以下のような`Gemfile`ファイルが作成されます。

```rb:Gemfile
# A Sample Gemfile
source "https://rubygems.org"

# gem "rails" 
```

この`Gemfile`を修正します。
コメントされている、`# gem "rails"`を以下のように変更します。

* 最新のRailsを入れたい場合

```rb:Gemfile
gem "rails" 
```

* Railsのバージョンを指定したい場合

```rb:Gemfile
gem "rails", "4.2.0"
```

Railsをインストールします。
gemファイルは、このプロジェクトのみに適用するので、`--path`オプションを指定しています。

```bash:command
bundle install --path ./vendor/bundler 
```

`vendor`フォルダ以下に、gemファイルが入ります。
`Gemfile.lock`が作成されます。
`.bundle`で、bundleの定義ファイルが作成されます。

これで、Railsがインストールされました。

最後に、Railsプロジェクトを作成します。

```bash:command
bundle exec rails new . -d=mysql -T -J --skip-bundle 
```

`-d`データベースを指定します（ここではMySQL）。
`-T`Test::Unitを組み込みません。
`-J`prototype.jsを組み込みません。
`--skip-bundle`プロジェクト作成後のbundle installをスキップします。

コマンド実行中に、`Gemfile`の上書きについて問い合わせられますので、`Y`を指定して上書きます。

以上で、Railsのプロジェクトが作成されます。
CIなどでdocker buildをしていて、ログがSending build context to Docker daemon XXX MBで埋まってしまう件の対処

CIのログの表示によって、 `LF` を解釈してくれなくてめっちゃ長大になる場合がありますよね。

![スクリーンショット 2015-02-19 15.15.54.png](https://qiita-image-store.s3.amazonaws.com/0/569/91716976-798c-509d-06f2-67ab1a3bda0b.png)

## 対応

```bash
$ docker build -t $IMAGE_NAME . | grep -v 'Sending build context'
```

`-q` オプション、なんかうまくない。もっといい方法が知りたい...
setTimeout内でjQueryの$(this)を使う場合の注意点

# 問題点

setTimeoutは、一定時間後に渡された関数を実行する関数です。
今回、このsetTimeoutに渡した関数内でjQueryの`$(this)`を使ったらエラーになりました。

```
Uncaught TypeError: Cannot call method 'toLowerCase' of undefined
```

# 解決方法

`$.proxy`をかませば問題なく動作しました。

```js:javascript
$("#bar").click(function(){
  setTimeout($.proxy(function(){
    $("#foo").load('/foo/bar', {value: $(this).val()});
  }, this), 1000);
});
```

$.proxyメソッドは、渡された関数内のthisを第二引数にすることができるというものです。

# 参考URL

- [jQuery – Be Careful About The Use of $(this) in setTimeout()](http://gaetanmasson.com/jquery-be-careful-about-the-use-of-this-in-settimeout/)
- [jQuery.proxy()](http://www.jquerystudy.info/reference/utilities/proxy.html)
wekaにPostgreSQL接続設定を追加

# 0. 環境
OS: windows7 32bit
jdk1.8, postgresql jdbc41

# 1. JDBCの取得
以下のより取得
https://jdbc.postgresql.org/download.html

今回はpostgresql-9.4-1200.jdbc41.jarを使用。

# 2. jdbcの配置・CLASSPATH設定
- 取得したjdbc(jarファイル)をC:\Program Files\Weka-3-7に配置する
- windowsのCLASSPATHに上記を追加する。

# 3. DatabaseUtils.propsの設定
- C:\Program Files\Weka-3-7にあるweka.jarをコピーしてデスクトップなど適当なフォルダに配置する。
- コピーしたweka.jarの名前をweka.zipに変更する。
- 上記を解凍し、weka/experimentフォルダのDatabaseUtils.props.potgresqlファイルをコピーしてC:\Program Files\Weka-3-7に配置する。

展開したフォルダと名前変更したzipは不要です。

以上です。
[HTML, JavaScript] tr要素やli要素全体にアンカーを貼ってクリックできるようにする

```html:sample.html

  <tr style="cursor:pointer;" data-href="/path/to/location" onclick="window.location.href=$(this).attr('data-href');">

  <li style="cursor:pointer;" data-href="/path/to/location" onclick="window.location.href=$(this).attr('data-href');">

```
jQuery依存してますが、こんな感じです。
SPSSのPostgreSQL接続設定

# 0. 環境
OS: windows7 32bit
SPSS modeler16

# 1. ODBC
下記リンクよりodbcを取得してインストール
http://www.postgresql.org/ftp/odbc/versions/msi/

今回はpsqlodbc_09_03_0300-1.zipを使用。

# 2. データ ソース(ODBC)設定
コントロール パネル\システムとセキュリティ\管理ツール
にある データソース(ODBC) からユーザーデータソースを追加します。

ユーザーDSNタブの追加ボタンからpostgresqlのドライバを追加する。

# 3. SPSSからアクセス
- 入力タブのデータベースをストリームに追加する。
- データベースの設定を開く
- データタブのデータソースより新規データベース接続の追加を選択
- データソースの一覧から追加したpostgresqlのデータソースを選択
以上です。
Rails AdminのBasic認証

rails_adminにアクセスする際にBasic認証をさせる方法

1. アクセスする際に入力していただくuser, password設定

    ``` rb
    # in config/secrets.yml
development:
  ... ... ...
  user: radmin
  password: [my_dev_password]
production:
  ... ... ...
  user: radmin
  password: [myProdPassword]
    ```

2. 認証確認追加

    ``` rb
# in config/initializers/reails_admin.rb
  config.authorize_with do
    authenticate_or_request_with_http_basic('Login required') do |username, password|
      username == Rails.application.secrets.user &&
      password == Rails.application.secrets.password
    end
  end
    ```

3. Rails再起動

4. RailsAdmin URLにアクセスするとuser, password入力画面が表示される
設定されたuser, passwordを入力したらRails Admin画面に移動する
yum-complete-transaction --cleanup-only

## 問題

```bash:
# yum install -y xxxxx
```

> There are unfinished transactions remaining. You might consider running yum-complete-transaction, or "yum-complete-transaction --cleanup-only" and "yum history redo last", first to finish them. If those don't work you'll have to try removing/installing packages by hand (maybe package-cleanup can help).
The program yum-complete-transaction is found in the yum-utils package.

という出力がでた。
ちょっと前にyumを途中で`Ctrl-C`で中断したためだ。

## 対処

```bash:
# yum install -y yum-utils
# yum-complete-transaction --cleanup-only
Cleaning up unfinished transaction journals
Cleaning up 2015-02-19.12:51.09
```

これで解決
SPSSモデル

spssモデルの備忘録

#SPSSモデル
##自動分類
##自動数値
##自動クラスタリング
##時系列
##C&R Tree
##QUEST
##CHAID
##ディシジョンリスト
##線形
##C5.0
##線形回帰
##因子分析
##ニューラルネット
##フィールド選択
##判別分析
##ロジスティック回帰
##一般化線形
##CLMM
##Cox
##SVM
##ベイズ
##SLRM
##Apriori
##Carma
##シーケンス
##K-Means
##Kohonen(knet, 自己組織化マップ)
結果を予測するのではなく、一連の入力フィールドのパターンを明らかにします。
次元分解にも使用されます。


ニューラルネットワークの一種。
##TwoStep
##異常値検査
##KNN
##R
シングルトンの抽象化クラス＆トレイトを作成する

シングルトンパターンの抽象化クラスを作成してみます。まずはシングルトンパターンのおさらいから。

> 　クラスのインスタンスはnew演算子を使って生成されます。たとえば、5回new演算子を使った場合、5つのインスタンスが生成されます。当然、1000回実行すると1000個のインスタンスが生成されます。
　しかし、インスタンスを生成するという処理は、コストがかかる処理です。オブジェクトの使いまわしをしないで毎回newするのは、大きなコストがかかってしまうことを意味します。
　また、「どうしてもインスタンスを1つしか生成したくない」といった場面も出てきます。たとえば、システムの設定を表現するクラスや、システム全体で一度読み込んだデータをキャッシュしておくクラスなどです。
　この場合、プログラミングする際に注意深くnew演算子を使うことで、1つしかインスタンスを生成させないようにすることもできます。しかし、それは「保証」されたものではありません。当然、何らかのミスや、それを知らない開発者が後からどんどんnewしていってしまうことも考えられます。
　開発者が意識しなくても、あるクラスのインスタンスが1つしか存在しないことを「保証する」ために使われるデザインパターン…それがSingletonパターンです。


```php:Singleton.php（呼び出し先）
class Singleton
{
  // 静的メソッドから呼び出せるのは静的プロパティだけ
  private static $instance;

  // privateにすることで他のクラスからnewできない
  private function __construct()
  {
  }

  // staticにすることでnewしなくてもメソッドが呼べるようにする
  public static function getInstance()
  {
   if (!self::$instance) self::$instance = new Singleton;
   return self::$instance;
  }

  // finalにすることで子クラスから上書きできないようにする
  final function __clone()
  {
   throw new \Exception('Clone is not allowed against' . get_class($this)); 
  }
}
```

```php:index.php（呼び出し元）

$singleton = Singleton::getInstance();
```

複数存在しうるEntityなどとは違って、たとえばreopsitoryなどはDBを取り扱う道具ですので、ひとつあれば十分なわけです。じゃぁ各repositoryにgetInstance()を書くかっていわれたら、抽象クラスをつくりたくなりますよね。

```php:repository.php
abstract class Repository 
{
 private static $instance = [];

 private function __construct()
 {
 } 

 public static function getInstance()
 {
   $class = get_called_class();
   if (!isset(self::$instance[$class])) self::$instance[$class] = new $class;

   return self::$instance[$class];
 }

 public final function __clone()
 {
   throw new \Exception('Clone is not allowed against' . get_class($this));
 }
}
```

テストしてみます。

```php:testRepository.php
require_once('repository.php');
class TestRepository extends Repository
{
}

$test = TestRepository::getInstance();
var_dump($test);  // object(TestRepository)[1]
```

できました。


（追記）php5.4以上では`trait`を使ったほうがスマートじゃないか、という指摘を頂いたので、

```php:repository.php
trait Repository 
{
 private static $instance = []; 

 private function __construct()
 {
 } 

 public static function getInstance()
 {
   $class = get_called_class();
   if (!isset(self::$instance[$class])) self::$instance[$class] = new $class;

   return self::$instance[$class];
 }

 public final function __clone()
 {
   throw new \Exception('Clone is not allowed against' . get_class($this));
 }
}
```

```php:testRepository.php
require_once('repository.php');

class TestRepository
{
    use Repository;
}

$test = TestRepository::getInstance();
var_dump($test);  // object(TestRepository)[1]
```

できました。
既存Veth pairの確認方法

Linux上で設定済みVeth pair (Virtual ethernet tunnel pair)を確認する方法。

`ethtool`コマンドと`ip`コマンドを組合せる。

```bash
$ sudo ethtool -S veth1
NIC statistics:
     peer_ifindex: 7

$ ip link | grep 7
7: veth0: ...
```

情報源：[How can I list which virtual ethernet pairs are running in the current linux host?](http://superuser.com/questions/618968/)
[備忘録] Apache+Railsの設定 - mod_proxy_balancer利用


```vhost.conf
<virtualhost *:80>
  ServerName domain.name
  DocumentRoot /path/to/rails/public
  ErrorLog /path/to/log-error.log
  SetEnvIf Request_URI "\.(gif)|(jpg)|(png)|(css)$" nolog
  CustomLog /path/to/log-error.log-access.log combined env=!nolog

  RewriteEngine On

  <Proxy balancer://rails>
    BalancerMember http://192.168.1.1:3000
    BalancerMember http://192.168.1.2:3000
  </Proxy>

  RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
  RewriteRule ^/(.*)$ balancer://rails%{REQUEST_URI} [P,QSA,L]

  ProxyPass / balancer://rails/
  ProxyPassReverse / balancer://rails/
  ProxyPreserveHost on

  <Proxy *>
    Order deny,allow
    Allow from all
  </Proxy>

</virtualhost>
```
Mervericksにアップデートするとhomebrewがリンク切れでrbenvが見れなくなる

## 症状
MacOSXのターミナルを使ってたら
突如rbenvが効かなくなる
もとよりhomebrewで設定しているコマンドが効かなくなる。

```lang:ターミナル
-bash: rbenv: command not found
```

## 結論
Mevericks以前にhomebrewで環境を構築して
アップデートするとlinkが切れる模様
そのためinstall済のものに対してlinkをかけ直してあげる。

```
$brew unlink rbenv
$brew link rbenv
```

## 参考

というかほぼここに乗ってたことに肉付けしただけのメモです。
先人の知恵に感謝です。

[Mavericksにアップデートしたら(?)rbenvが消えてた]
(http://qiita.com/nyamage/items/a5c6aa542c2bfe76ecc9)
[OS X Mavericks にアップデートしたら brew でいれた諸々へパスがおかしくなった]
(http://satorumpen.blogspot.jp/2014/03/os-x-mavericks-brew.html)

## 余談
homebrewのインストール済みリスト(brew list)では普通に出てくるにも関わらず
コマンドが通らないので最初はrbenvのパス誤りかと思い
bashの設定をいじり倒していました。

検索してもrbenvを消す方法などが出てきてしまったので
消さずともなんとかなるということをメモ。
Laravel5のユニークバリデーション

Laravelでのユニークバリデーションルールは、
例えばpersonsモデルのemailを例にとると、以下のようになりますね。

```php:
['email' => 'unique:persons']
```

更にupdate時は、

```php:
['email' => "unique:persons,email,$id"]
```

のようにidを指定して、このidは対象外とします。
※これをしないと更新対象データ自身も検索対象になってしまうので、
必ずユニーク違反になってしまいます。

Laravel4の場合は、
RESTful Resource Controllerであればupdateアクションの引数でidを取得できるので、
それをセットすれば問題はありません。

ところが、Laravel5のFormRequestのrulesメソッド内に記述する場合は
どうすればよいのか悩みました。

そこで色々調べた結果、現在はidを以下のように取得しています。

```php:
\Route::getCurrentRoute()->getParameter('persons')
```

※この'persons'はルーティングの{resouce}に当たる部分です。

もっと良い方法をご存知の方がいらっしゃいましたら、
是非教えていただけると嬉しいです。

~~ちなみにですが、複合フィールドにまたがるユニークバリデーションについて、~~
~~良いパッケージをみつけましたのでご紹介させていただきます。~~

~~felixkiss/uniquewith-validator~~
~~https://github.com/felixkiss/uniquewith-validator~~

[2015.03.09 追記]
上記パッケージですが、論理削除に対応していないようです。
何とも残念です…。
CocoaPodsでインストールしたライブラリのリソースが使えない時の対応


無理矢理感がある…もっと良い方法があれば教えて下さい。


```
$ vim /Users/xxx/git/xxx/Pods/Target Support Files/Pods/Pods-resources.sh
...
...
rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"

+install_resource "xxx/Resources/xxx.xib"
+install_resource "xxx/Resources/xxx.png"
...
...

```
vimのquickrunで標準入力(STDIN)を渡す

# 概要
quickrunで標準入力をした時に別画面で入力するのが面倒だった為、調べました。

# 方法
`<`で標準入力ができました。
スペースを入れては駄目です。

## ファイル指定
`:QuickRun <aaa.txt`

## 直接入力
`:QuickRun <=3`

色々試してみましたが、スペースは対応してなさそうです。

# ヘルプ
`:h quickrun-option-input`
[web](http://vim-help-jp.herokuapp.com/?query=quickrun-option-input)

# サンプルソース
```php
<?php
$a = trim(fgets(STDIN));
echo pow($a,3)."\n";
```

# 参考
https://twitter.com/__gfx__/status/432808461101842432
レガシーコード改善ガイド 第二章


## フィードバックを得ながらの作業を意識しよう
#### システム変更の方法

* 編集して祈る
	* 計画、調査、確認を注意深く進める必要がある
* 保護して変更する
	* テストで保護する =  確実なフィードバックを得る

#### 単体テストが重要
* システムの振る舞いから見て最も原始的な単位
	* 手続き型 -> 関数
	* オブジェクト指向 -> クラス
* 優れた単体テストの条件
	* 実行が速い(0.1秒では遅すぎる)
	* 問題箇所の特定がしやすい
* これらは単体テストではない
	* データベースとやりとりする
	* ネットワークを介した通信をする
	* ファイルシステムにアクセスする
	* 実行するために特別な設定が必要(環境設定ファイルの編集など)

## 上位レベルのテスト
* レガシーコードでは、どこからテストを開始すべきか
	* 変更に関係しそうな部分のテストを優先的に用意せよ

## レガシーコードの変更手順
1. 変更点を洗い出す
2. テストを書く場所を見つける
3. 依存関係を排除する
4. テストを書く
5. 変更とリファクタリングを行う
ransackでblank条件の不具合？

# 何もしてないのに壊れた

ごめんなさい。実際にはransackのバージョンアップしたら壊れた。

# 今までの仕様

`:foo_blank`を条件にできるよう、検索フォームにチェックボックスを設けていた。

## 望んでいた動作(バージョンアップ前の動作)

- チェックを入れていない場合は全部表示される
- チェックを入れたらfooが空欄のもののみ表示

## 現実の動作(バージョンアップ後)

- チェックを入れていない場合は**一件も表示されない**
- チェックを入れたらfooが空欄のもののみ表示

# どうしてこうなった

blank条件を使っているときのSQLが変。
`"hoges"."foo" != NULL`のせいで全ての条件から外れる。

```sql
SELECT  "hoges".* FROM "hoges" WHERE "hoges"."foo" IS NOT NULL AND "hoges"."foo" != NULL ORDER BY "hoges"."id" ASC LIMIT 10 OFFSET 0
```

# null条件に変更

`:foo_null`に変更したところ、望んだ動作で動くようになったのでこれでいく。
MongoDBのコレクションのドキュメントにユニークな番号を発番する方法を考えてみた


## 前提
例えば、コレクション`A`のドキュメントに`number`というユニークな連番を保持するフィールドが必要だとする。

条件として、MongoDBはReplicaSetで構成されていて、複数のアプリケーションサーバーから参照されている状態とし、write concernとフィールドのuniq設定は使えないものとする。また、ナンバリングしたデータは直ぐには必要のないデーターとする。

上記の場合、アプリケーションサーバー側で`number`フィールドのmax numberを取得し、そのアプリケーションのプログラム上で`number`をインクリメントして最新の最大`number`として保存すると、アプリケーションサーバー側が同じ`max number`を掴む可能性があるので、ユニーク値での連番が作れない可能性がでてくる。

それでも、発番をしたい場合どうすべきかを2パターン、MongoDBを使ってどうするかということが課題としてあったので考えてみた。

## パターン1 ジョブキューを使う
* 構成例

| 項目 | 説明 |
|:-----------|:------------|
| App Server | Python Tornado冗長化構成 |
| Job Server | RQ numberingキューを __1つのジョブワーカーに設定__ |
| Queue DB Server | Redis (AWS ElastiCascheを利用) |
| Backend DB Sever | MongoDB (ReplicaSet構成) |
   

```python:処理の流れ
"""
APP Servers(Python Tornado)
   ↓ ジョブをnumberingキューに追加
Redis Servers     
  ↑↓ numberingキューからジョブを取得して実行
rq worker
   ↓ DBをアップデート 
MongoDB
"""
```

__作業__

 * 既にジョブキューサーバーがあれば、キューを1つのジョブワーカーに設定
 * アプリケーションサーバー側でジョブを作成しenqueueする

__特徴__

 * キューがあれば都度実行

__課題__

 * データーは保持されるが、ワーカー1台だと、それがspof
 * 処理が増えた場合、スケールアップの対応しかできない
 * ジョブキューサーバーが対応してる言語に依存するので、汎用性は低い


## パータン2 メッセージキューを使う
* 構成例

| 項目 | 説明 |
|:-----------|:------------|
| App Server | Python Tornado冗長化構成 |
| Message Queueu | AWS SQS |
| Batch Server | EC2 Instance上で1プロセスのみ実行 |
| Backend DB Sever | MongoDB (ReplicaSet構成) |
   

```python:処理の流れ
"""
APP Servers(Python Tornado)
   ↓ キュー情報を追加 
AWS SQS
  ↑↓ キュー情報を取得してバッチプログラムで処理
Batch Server
   ↓ DBをアップデート 
MongoDB
"""
```

__作業__

 * バッチで動かすためのプログラムを書く
 * アプリケーション側にenqueue処理を追加

__特徴__

* プログラム言語の依存は低い

__課題__

 * データーは保持されるが、バッチがこけると処理が止まるという問題
 * スケールアップの対応しかできない

## まとめ
結構制約が多い中どうするか、numberingやめて_idを使えばいいじゃんとか妥協案はあるのですが、どうしてもナバリングしたい。

上記の様に考えてみるとやはりドキュメントのnumberingを一貫性を保ちながら処理していくことは結構大変。

ただ、非同期に処理をすることでなんとなくできそうだということもわかった。

あと、規模によっては、課題にある問題でnumberingがうまく動かなかった場合の復活の呪文プログラムも別途用意しておけば、実運用的には問題ないということもなんとなくわかった。

__一貫性を保った処理をしたい場合（ナンバリングしたデータは直ぐには必要のないデーターというのが前提だが）ジョブキューかメッセージキューを使う__とそれなりに対応できるかもしれない。

他に良いアイディアがあれば、教えてもらいたい。
[CakePHP 2.x]IDを連番ではない推測が難しい文字列にする

## 経緯

* IDが連番だとURLが推測しやすい形になるので、推測が難しくなるよう文字列にしたいと思った事から。

## IDを連番にする

* IDがSERIALのテーブルを用意。
* DBはPostgreSQL前提。

```sql
CREATE TABLE examples(
    id SERIAL NOT NULL PRIMARY KEY
);
```

* ExamplesController view() functionで受けるものとすると...  
1,2,3とあれば、4,5,6...にも何かありそう。

```
/examples/view/1
/examples/view/2
/examples/view/3
```

## IDを文字列にする

* IDがCHAR(36)のテーブルを用意。
* すると、CakePHPがユニークな文字列でIDを生成するようになる。  
http://book.cakephp.org/2.0/ja/getting-started/cakephp-conventions.html#id3  
http://book.cakephp.org/2.0/ja/core-utility-libraries/string.html#string

```sql
CREATE TABLE examples(
    id CHAR(36) NOT NULL PRIMARY KEY
);
```

* ExamplesController view() functionで受けるものとすると...  
推測するのが難しくなった。

```
/examples/view/54d1c05a-8c98-4e64-b8c5-5a63c0a800f9
/examples/view/54d57fb2-4204-4a01-9548-78e133c2ca43
/examples/view/54e52e8a-a57c-4406-b34c-618e33c2ca43
```
OneDriveの容量を100GB無償で追加！

Bingで検索するとポイント付与されるプログラム”Bing Rewards”にMicrosoftアカウントを登録すると、2年間限定で100GBの容量を無償で追加することができます。

https://login.live.com/oauth20_authorize.srf?client_id=000000004C12B387&scope=wl.signin%20wl.basic%20wl.emails%20wl.skydrive%20wl.onedrive_provision_quota&response_type=code&redirect_uri=https://preview.onedrive.com/callback.aspx
jersey+springでリソースクラスのユニットテスト（サービスクラスをモックで注入）

理屈はわからないが、How toのメモとして。

次のようなサービスクラスをspringで注入しているリソースクラスのユニットテストをしたい。
となると、サービスのところをモックにして注入したい。HK2で注入してるときのやり方はわかったが、それだとここの実装をかえなきゃいけないので、微妙。試行錯誤して、とりあえずできたやり方を紹介。もっと自然なやり方があればコメントなどお願いします。

```lang:HogeResource.java
@Resource
@Path("hoge")
public class HogeResource {

    @Autowired
    private HogeService service;

   /* 以下略　*/

```

下記のようなテストの基底クラスをつくる。
JerseyTestは継承しないでRuleにした方がやりやすい。（というか、そうしないとうまくいかなかった。設定かぶってる感があるが・・・）

```lang:TestBase.java
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes={TestResourceConfig.class, HogeServiceMock.class})
public class AttachementResourceTestBase {

    @Autowired
    protected HogeService mockService; 

    @Rule
    public JerseyTestResource testResource = new JerseyTestResource(new TestResourceConfig());

}

```
下記のをそのまんまつかわしていただきました。
http://qiita.com/opengl-8080/items/f90582f6e5cd9db4972b

```lang:JerseyTestResource.java
public class JerseyTestResource extends ExternalResource {

    private JerseyTest jerseyTest;

    public JerseyTestResource(final Application config) {
        this.jerseyTest = new JerseyTest() {
            @Override
            protected Application configure() {
                return config;
            }
        };
    }

    @Override
    public void before() throws Throwable {
        this.jerseyTest.setUp();
    }

    @Override
    public void after() {
        try {
            this.jerseyTest.tearDown();
        } catch (Exception e) {
            throw new RuntimeException("failed to tear down JerseyTest.", e);
        }
    }

    public JerseyTest getJerseyTest() {
        return this.jerseyTest;
    }

}
```

次のクラスで、サービスクラスに注入をモックにしている模様。あとで振る舞いを決めるために呼び出すので、static なインスタンスを注入している。（context.xmlのbeanタグに相当？？）

```lang:HogeServiceMock.java
@Configuration
public class HogeServiceMock {

    public static HogeService mockService = Mockito.mock(HogeService.class);

    @Bean
    public HogeService hogeService() {
        return mockService;
    }

}
```

テストはEnclosedランナーを使って構造化。モックはひとつのインスタンスを使いまわしているので、afterでリセットしないと、呼び出し回数がコントロールできないのに注意。

URIをたたくのは、JerseyTestのtarget()を@Ruleをつけたフィールドから取得して、そいつにさせている。

```lang:HogeResourceTest.java
@RunWith(Enclosed.class)
public class HogeResourceTest {

    @RunWith(Enclosed.class)
    public static class 失敗 {

        public static class IDが存在しない extends TestBase {

            @Before
            public void setUp() throws IOException {
                when(mockService.findById(anyInt()).thenReturn(null);
            }

            @After
            public void tearDown() {
                reset(mockService);
            }

            @Test
            public void ステータスコードはNOT_FOUND() throws IOException {
                WebTarget target = testResource.getJerseyTest().target();

               int status = target.path("hoge/123").request().get().getStatus();

               verify(mockService, times(1)).findById(123);

               assertThat(status, is(NOT_FOUND.getStatusCode()));
            }
        }

```
(随時更新)[iOS]システムテストのフレームワーク

# UI Automation

Instrumentsが持つ自動実行機能[^Instrumentsユーザガイド]

* 言語：JavaScript



# Tuneup JS (UI Automation's extension library)

# Frank

# MonkeyTalk

# KIF(Keep It Functional)

# Appium

# Calabash

# Zucchini

# 参考

[^Instrumentsユーザガイド]: [Instrumentsユーザガイド](https://developer.apple.com/jp/documentation/InstrumentsUserGuide.pdf)
githubに複数アカウントでssh接続する為の手順

# 概要

仕事用のアカウントとプライベート用のアカウントを使い分けたいけどどうするんだ？というところから調べてみました。

# 手順

基本的には [こちら](http://dev.classmethod.jp/tool/github-ssh-sub-account-setting/) の記事通りやればOK。

あとは [こちら](http://labs.opentone.co.jp/?p=4493)もしておくとcommit完璧かも。
(ただし、こちらの記事ローカルのgit configのメールアドレス設定が間違えているので気をつけてください)

> git config user.mail "nemoto2@example.com"

この部分ですが、下記のようにする必要あります。

`git config user.email "nemoto2@example.com"`

(コミットログを確認した時にメールアドレスだけ変わってなかったので焦りました。。。)
Javaだって簡単にFizzBuzz書けるもん！ ~ 匿名クラス利用

もうちょっと簡単なFizzBuzzを探ってみました。

ではコードをどうぞ。

```java
package reflect2;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

public class FizzBuzz
{
    public static interface Dummy
    {
        default CharSequence trans(int i)
        {
            return "" + i;
        }
    }

    public static void main(String[] args)
        throws Exception
    {
        new Dummy(){{
            new Dummy(){
                @Override
                public CharSequence trans(int i)
                {
                    return "FizzBuzz";
                }
            };
            new Dummy(){
                @Override
                public CharSequence trans(int i)
                {
                    return "Buzz";
                }
            };
            new Dummy(){
                @Override
                public CharSequence trans(int i)
                {
                    return "Buzz";
                }
            };
        }};
        new Dummy(){{
            new Dummy(){
                @Override
                public CharSequence trans(int i)
                {
                    return "Fizz";
                }
            };
            new Dummy(){};
            new Dummy(){};
        }};
        new Dummy(){{
            new Dummy(){
                @Override
                public CharSequence trans(int i)
                {
                    return "Fizz";
                }
            };
            new Dummy(){};
            new Dummy(){};
        }};
        new Dummy(){{
            new Dummy(){
                @Override
                public CharSequence trans(int i)
                {
                    return "Fizz";
                }
            };
            new Dummy(){};
            new Dummy(){};
        }};
        new Dummy(){{
            new Dummy(){
                @Override
                public CharSequence trans(int i)
                {
                    return "Fizz";
                }
            };
            new Dummy(){};
            new Dummy(){};
        }};

        for(int i= 1; i <= 100; ++i)
        {
            final Class<?> declaringClazz= Class.forName(FizzBuzz.class.getName() + "$" + (i % 5 + 1));
            final Class<?> clazz= Class.forName(FizzBuzz.class.getName() + "$" + (i % 5 + 1) + "$" + (i % 3 + 1));

            final Constructor<?> ctor= clazz.getDeclaredConstructor(declaringClazz);
            final Method trans= clazz.getMethod("trans", int.class);

            System.out.println(trans.invoke(ctor.newInstance(declaringClazz.newInstance()), i));
        }
    }
}
```

匿名クラスはjavacされると、ソース中の上から順に\$1、\$2のように連番で.classファイルが生成されることを利用しています。
匿名クラスをネストさせることで、FizzBuzz\$1\$2のような多重配列のようなものを作り出し、Class.forName()で匿名クラスにアクセスしています。
匿名クラスはそれぞれtrans()で返却する文字列が適当なものになっているため、順次それらを呼び出すことでFizzBuzzっています。

Javaでも簡単なFizzBuzzが書けたよ！

ということでgithubにも上げてあります。
[こちら](https://github.com/kamichidu/java-fizzbuzz/blob/master/src/main/java/reflect2/FizzBuzz.java)からどうぞ。
SNSボタンの挙動がおかしいとき

# Facebookいいねボタン

## ボタン押下時ポップアップで「このページはありません」

### 原因
開発環境で本番と同じURLを使用していたときに起こりがち。

一度ボタンを押すと、そのときのページ内容がURLとセットでFB側にキャッシュされてしまうらしい。
開発環境等の公開されていないページでボタンを押すとFB側からはそのページが見えないため、
存在しないページとしてキャッシュされてしまう。

### 対策
リリース後にFacebookデバッガーで更新する。

Facebookデバッガー：
https://developers.facebook.com/tools/debug/og/object/

## いいねの数がおかしい

### 原因
OGPタグで指定しているURLの「いいね数」を表示していると思われる。

### 対策
該当タグを修正し、Facebookデバッガーで更新。

```html:
<meta property="og:url" content="ここ">
```

## ボタンが押せない

### 原因
App IDがdevelopment modeになってるかも？

# Google+ボタン
## ボタンを押してもエラーで押せない
公開していないページのURLを指定すると押せない仕様になっているので、
開発環境でのテストは諦める。
（公開済みURLを指定すれば擬似テストは可能）

>Note: The +1 action is a public action and must be performed on a public URL. If a user attempts to +1 a URL that is not public, an error occurs.

引用元：https://developers.google.com/+/web/+1button/

## +の数がおかしい
### 原因
Facebookいいね数同様、OGPタグで指定しているURLに対するいいね数を表示していると思われる。
※修正してもしばらく反映されない...？
VCCWの日本語化

## VCCWのインストール
下記の要領でVCCWを入れた後、日本語化する。
http://qiita.com/kei4eva4/items/ed5e1c692bb95f157e9e

## 日本語化
vccw/site.ymlを作成し、下記の記述を追加する。

```
lang: ja
```


## 参考
https://firegoby.jp/archives/6109
ruby2.2.0ではメソッドの引数のデフォルト値に同じ名前の変数を使えない

ruby2.2.0からの挙動みたいですが，
メソッドの引数のデフォルト値に同じ名前の変数を使おうとするとcircular argument referenceというwaringが出ます。

```ruby:2.2.0

[3] pry(main)> class Foo
[3] pry(main)*   def foo; "abc" end
[3] pry(main)*
[3] pry(main)*   def run(foo = foo)
[3] pry(main)*     p foo
[3] pry(main)*   end
[3] pry(main)* end
(pry):4: warning: circular argument reference - foo
=> :run

[3] pry(main)> foo = 2
=> 2
[4] pry(main)> def hoge(foo=foo)
[4] pry(main)*   puts foo
[4] pry(main)* end
(pry):2: warning: circular argument reference - foo

```

2.1.2だと出ない模様

```ruby:2.1.2
[6] pry(main)> class Foo
[6] pry(main)*   def foo; "abc" end
[6] pry(main)*   def run(foo=foo)
[6] pry(main)*     puts foo
[6] pry(main)*   end
[6] pry(main)* end
=> :run
[7] pry(main)> Foo.new.run
abc
=> nil
```

というのもchefで下記エラー

warning: circular argument reference - data_bag in chef/data_bag_item.rb:161 
https://github.com/chef/chef/issues/2923
があって、
問題の部分のコードが

```ruby:data_bag_item.rb
def destroy(data_bag=data_bag, databag_item=name)
      chef_server_rest.delete_rest("data/#{data_bag}/#{databag_item}")
end
```

だったから。
rubyでもイシューであがっているみたい
そんな仕様変更されても困るって発起人は言っているけど、
リプライでは That would be tautologically nil.なのだから
こっちのほうが正しんじゃね？って反論している。

https://bugs.ruby-lang.org/issues/10314


どうなるのでしょうかね
エッジスワイプジェスチャー操作を無効化

# はじめに
iOS7以降、エッジスワイプで前の画面に戻る操作ができます。

しかし！

スワイプ途中で「やっぱ止めた」とばかりに元に戻すと
viewWillAppearなど画面表示系のメソッドが再度走り出してしまいます。

そこまで想定して実装していなかった場合
その操作を抑制するのが手っ取り早い対応だったりします。

# interactivePopGestureRecognizer.enabledを設定

navigationControllerに対して以下を設定しましょう。
iOS6以前は該当のプロパティが存在しないので存在判定も。

```objc:
    if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
        self.navigationController.interactivePopGestureRecognizer.enabled = NO;
    }
```

init部分に書いても機能しません。
viewDidLoadなどが適当でしょうか。

navigationController自体に設定していますので
どこかの画面で上記設定した場合、別の画面でも操作が無効化されています。
 
# おわりに
参考になりましたら幸いです。
phpのmove_uploaded_fileのエラーについて

macのローカルでphpを実行してるんですが、move_uploaded_file でエラーがでます。

エラー全部書きますと、
Warning: move_uploaded_file(images/1.png): failed to open stream: Permission denied in /Users/sysy/Sites/xxxxx/upload.php on line 44
Warning: move_uploaded_file(): Unable to move '/private/var/tmp/php8rRE1O' to 'images/1.png' in /Users/sysy/Sites/xxxxx/upload.php on line 44
の２つのWarningが出てます。

先日、macを移行しまして旧macの方ではエラーが出てなかったんですが、新macに移行してから出るようになりました。
パーミッションは新旧同じになってると思います。
自分で調べても原因が分かりません。どんな原因が考えられるでしょうか？
podsのプロジェクトファイルセッティングを64bit対応する方

Git管理下にPodsプロジェクトを設定していないため、Podsプロジェクトセッティングをいちいち変えなくちゃいけなかったので、こうしてみた。Pod installするたびにデフォルトに戻っちゃうので。

## Podfileに以下を追加する

```lang:Podfile
post_install do |installer|
    installer.project.build_configurations.each do |configuration|
        installer.project.build_settings(configuration.name)['ARCHS'] = '$(ARCHS_STANDARD) armv7s'
        installer.project.build_settings(configuration.name)['ONLY_ACTIVE_ARCH'] = 'NO'
        installer.project.targets.each do |target|
            target.build_configurations.each do |configuration|
                target.build_settings(configuration.name)['ARCHS'] = '$(ARCHS_STANDARD) armv7s'
                target.build_settings(configuration.name)['ONLY_ACTIVE_ARCH'] = 'NO'
            end
        end
    end
end
```
DataColumn.ExpressionでIF文

# DataColumn.Expression

DataTableに存在するデータを加工して、新たな列を追加したいことがあると思います。
その際は

````csharp
//DataTable data;
data.Columns.Add("列名", 型, "式");

//テーブルのCol1列からCol2列の値を引いた列をテーブルに追加する例 
data.Columns.Add("Col1minusCol2", typeof(double), "Col1 - Col2");
````
という書式で、DataTable.Columns.Add()の第三引数のExpressionに計算したい式を記述することで実現できます。
(集約などの計算ができるが、詳細は割愛)

では、その式中で条件分岐したい場合はどのように記述すればよいのでしょうか？

# IIF()

以下のように書けばよいようです。

````c#
// IIFの書式
"IIF(条件式, 真の場合の値, 偽の場合の値)"

//Col2列からCol1列への変化率を求める例
//Col1列が0だった場合に0除算となるので、その場合はExpression中でIF文を使って結果を0にしたい
data.Columns.Add("Col2toCol1", typeof(double), 
    "IIF(Col2 = 0, 0, (Col1 - -Col2) / Col2)");

````

このように、IFやCASEではなく、IIFを使い、THENやELSEでなく、三項演算子のような記法にしてコンマで区切ることで実現できます。
sudo しながら cat した複数行の出力をファイルにリダイレクトをする


例えば、yum のリポジトリを追加するときなど。

通常通り `cat` とヒアドキュメントでやってるコマンドを `sh -c` と `"` で 囲みます。

以下は mongodbのリポジトリを追加する例です。

```bash
sudo sh -c "cat <<EOF> /etc/yum.repos.d/mongodb.repo
[mongodb]
name=MongoDB Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64/
gpgcheck=0
enabled=0
EOF"
```

vim 好きですけど、 vimで開いて編集するのが面倒なときや、コマンド一括で実行したいときなどに使えます。
ShinobiLayer: SoftLayer Customer Portalの変更点とチケット全文検索

#はじめに
日本時間の2015/02/17にSoftLayerのCustomer Portalに変更が入ったみたいです。大した変更ではないのですが、若干の混乱もあるようなので、変更点をまとめてみました。
（2015/02/19 12:30追記。Ticketの全文検索もできるようになったみたいなので、こちらもまとめてみました）
（2015/03/27 追記。画面レイアウトが変更しましたので変更）

#1. 画面レイアウトの変更
画面の左端にWhat's newがあるので、ここを開いてみます。
![new01.jpg](https://qiita-image-store.s3.amazonaws.com/0/62127/90a109dc-2029-11e1-a049-f48d5d881a7b.jpeg)

すると、以下のような画面が出てきます。どうやら、

* **Support**メニューの位置が右に移った。
* 幾つかの項目がフッター（ページの下部）に移った。

というのが変更点のようです。
![new02.jpg](https://qiita-image-store.s3.amazonaws.com/0/62127/019887e3-f6f9-9fa1-b603-6c630540e8ca.jpeg)

#2. チケットの全文検索
もしかしたら前からできたかもしれませんが、チケットの全文検索ができるようになっています。今までは、Subjectなどでfilterすることしかできなかったので、これは非常にありがたいです。ちょっと分かりづらいのですが、ページ右上のSearch boxにキーワードを入力するか、ページ右下のSearchを選択することで全文検索画面に飛ぶことができます。

* ページ右上 <br> ![new_05_textsearch.jpg](https://qiita-image-store.s3.amazonaws.com/0/62127/d5ec63c9-7521-54ab-55bc-aa1b39d46588.jpeg)
* ページ右下 <br> ![new03_textsearch.jpg](https://qiita-image-store.s3.amazonaws.com/0/62127/fd5b0d1e-4f42-4f8e-d61f-e996147fb374.jpeg)

下図は試しにCDNという単語を検索した結果ですが、階層別になってチケットを見つけやすくなっています。
![new04_textsearch.jpg](https://qiita-image-store.s3.amazonaws.com/0/62127/2a5dbdb8-9d63-3a8a-5956-65be7716df86.jpeg)


#3. VPNアクセスはどこからできるの？
メニューから消えてしまったみたいですね。。。
--> *復活したみたいです（2015/03/13）*
![SSL-VPN.jpg](https://qiita-image-store.s3.amazonaws.com/0/62127/d2845515-01df-b5ff-3f1d-64ec634c408c.jpeg)


VPNは別途、http://www.softlayer.com/vpn-access からアクセス可能です。

# 終わりに
SoftLayerのポータルは、実は裏でこっそりと、しかもどんどん進化しています。新しい発見があったら是非教えてください！
日付のミリ秒を文字列にする

[方法: 日付および時刻の値のミリ秒部分を表示する](https://msdn.microsoft.com/ja-jp/library/bb882581.aspx)

|書式|後続のゼロ埋め|
|:--|:--|
|f|ゼロ埋めする|
|F|ゼロ埋めしない|
 
```csharp
DateTime dateValue = new DateTime(2008, 7, 16, 8, 32, 45, 180); 
Console.WriteLine(dateValue.ToString("fff"));  // 180を出力
Console.WriteLine(dateValue.ToString("FFF"));  // 18を出力
```

> WindowsCE では、DateTimeではミリ秒は取得できない。
> [System.Environment.TickCount プロパティ](https://msdn.microsoft.com/ja-jp/library/system.environment.tickcount(v=vs.90).aspx)によりミリ秒を取得する。
PHPで配列の分割 ( array_slice ) 

# 概要
配列の分割が分からなかった為、調べました。

# 方法
`array_slice`を使えばできます。

```php
<?php
$input = array("a", "b", "c", "d", "e");

$output = array_slice($input, 2);      // "c", "d", "e" を返す
echo "\n1:\n";
print_r($output);
$output = array_slice($input, -2, 1);  // "d" を返す
echo "\n2:\n";
print_r($output);
$output = array_slice($input, 0, 3);   // "a", "b", "c" を返す
echo "\n3:\n";
print_r($output);

// 配列キーの違いに注意
echo "\n4:\n";
print_r(array_slice($input, 2, -1, true));

echo "\n5:\n";
print_r(array_slice($input, 2, -1));
```
http://ideone.com/SdGuoh

# 参考
http://php.net/manual/ja/function.array-slice.php
数値型メンバーを０、参照型メンバーをnullで初期化した構造体を取得する

`default(Type)`を使う。

```csharp
struct hogehoge {
  string s;
}

struct hoge {
  int i;
  string s;
  hogehoge hh;
}

hoge h = default(hoge);
```

数値型に対しては 0、 参照型に対しては null。
構造体に対しては、 構造体の全てのメンバーに対して 0 または null で初期化したものを与える。

> [ジェネリックス](http://ufcpp.net/study/csharp/sp2_generics.html)