OmniAICreator/Qiita-1.07M huggingface dataset:
【不定期更新】agコマンドのtips


#特定の単語が含まれていないファイルを調べる（ファイル名のみ出力）

``` ag search_text -L ```

> さらにファイルの拡張子でフィルタリングしたい

``` ag search_text -L *.cs ```

> 正規表現もOK

``` ag serach_text -L -G \.cs$ ```

#特定の単語が含まれているファイルを調べる（ファイル名のみ出力）

``` ag search_text -l ```
N+1問題は1+N問題


N+1というからほわっつ？ってなって、1+Nって言われると理解しやすいと思った。

このページ非常にわかりやすい。
http://www.techscore.com/blog/2012/12/25/railsライブラリ紹介-n1問題を検出する「bullet」/

上のページでいう、PrefectureとShopが一対多の関係になっているときに、Shopの方から、eachの中でshop.prefecture.name みたいにすると、shopの数だけprefecture探すSQL文が発行されることになる。

このページ（[参考](http://akasata.com/articles/103 "参考")）では、N+1問題をシンプルに、「全レコードの取得に一つ＋各レコード分だけ SQL を発行してしまう問題」と定義していて、要はただこれだけの問題だと感じた。

例えば100万レコードあったら100万回SQL発行されるのかって考えると、さすがにだれでもやばみ感じると思う。

実際にサーバー上で起きる処理の順番でいうと、1回で全件取得した後に、N回SQL発行されるということなので、1+Nなんだなあと思いながら、N+1問題って言葉使えばいいと思った。

対処方法はいくつかあるので、気が向いたら追記する。
N+1問題検知したいだけなら、bulletってgem入れるといいらしい。
Confluenceで子ページ一覧のページの作り方


#結果

![](http://i.gyazo.com/47b6f6ef3f1c1be3cdc1eccc285c5768.png)


#作り方

* 挿入 → （一番下の）その他のマクロ を選択
* 子ページを検索
* 子ページ表示を選択

#注意

* v5.0かららしい
mochaの実行対象から_付きファイル・ディレクトリを除外する

一例だが、これ:

```
$ mocha 'test/!(_)*.js' 'test/!(_)*/!(_)*.js' 'test/!(_)*/**/!(_)*.js'
```

で実行した場合、実行対象となるファイルのパターンマッチは以下の様になる。

実行される:

```
test/foo.js
test/sub/foo.js
test/sub/subsub/foo.js
test/sub/_subsub/foo.js  // _付きディレクトリ除外は直下だけ
```

実行されない:

```
test/_foo.js
test/sub/_foo.js
test/_sub/foo.js
test/sub/subsub/_foo.js  // _付きファイル除外はどこにあっても
```

補足と参考:

- mocha 側のファイルパターンマッチを有効にしたい場合は `'〜'` などのクォートが必須
- http://linuxjm.sourceforge.jp/html/GNU_bash/man1/bash.1.html
  - この中の「パス名展開」
認証付きプロキシを超えるためのプロキシを書いた

職場が認証付きプロキシを越えないと外に出ていけない環境なのだけど、ツールによって認証付きプロキシのための設定が面倒だったり、そもそも無理だったりして何かとうっとうしいので、リクエストに認証情報を付加するプロキシを書いた。
こいつをローカルで動かして、各ツールのプロキシには localhost:1080 を指定する。

squidとかでできるでしょという話もあるんだけど、squidの設定ファイル書くよりコード書くほうが楽しいし。

```go:proxy.go
package main

import (
	"encoding/base64"
	"fmt"
	"io"
	"log"
	"net"
	"net/http"
	"net/url"
)

var (
	port               = 1080
	proxyHost          = "proxy.example.com:3128"
	proxyUser          = "iwata"
	proxyPass          = "mypassword"
	proxyAuthorization = "Basic " + base64.StdEncoding.EncodeToString([]byte(proxyUser+":"+proxyPass))
)

func handleHttps(w http.ResponseWriter, r *http.Request) {
	hj, _ := w.(http.Hijacker)
	if proxyConn, err := net.Dial("tcp", proxyHost); err != nil {
		log.Fatal(err)
	} else if clientConn, _, err := hj.Hijack(); err != nil {
		proxyConn.Close()
		log.Fatal(err)
	} else {
		r.Header.Set("Proxy-Authorization", proxyAuthorization)
		r.Write(proxyConn)
		go func() {
			io.Copy(clientConn, proxyConn)
			proxyConn.Close()
		}()
		go func() {
			io.Copy(proxyConn, clientConn)
			clientConn.Close()
		}()
	}
}

func handleHttp(w http.ResponseWriter, r *http.Request) {
	hj, _ := w.(http.Hijacker)
	client := &http.Client{}
	r.RequestURI = ""
	if resp, err := client.Do(r); err != nil {
		log.Fatal(err)
	} else if conn, _, err := hj.Hijack(); err != nil {
		log.Fatal(err)
	} else {
		defer conn.Close()
		resp.Write(conn)
	}
}

func handleRequest(w http.ResponseWriter, r *http.Request) {
	log.Printf("[%s] %s", r.Method, r.URL)
	if r.Method == "CONNECT" {
		handleHttps(w, r)
	} else {
		handleHttp(w, r)
	}
}

func main() {
	proxyUrlString := fmt.Sprintf("http://%s:%s@%s", url.QueryEscape(proxyUser), url.QueryEscape(proxyPass), proxyHost)
	proxyUrl, err := url.Parse(proxyUrlString)
	if err != nil {
		log.Fatal(err)
	}
	http.DefaultTransport = &http.Transport{Proxy: http.ProxyURL(proxyUrl)}

	handler := http.HandlerFunc(handleRequest)
	listen := fmt.Sprintf("localhost:%d", port)
	log.Printf("Start serving on %s", listen)
	log.Fatal(http.ListenAndServe(listen, handler))
}
```

[Trivial HTTP Proxy in Go](http://bytbox.net/blog/2013/01/trivial-http-proxy-golang.html) という記事があるけど、今のバージョン(go 1.3)ではこのコードはちゃんと動かなかった。
ResponseWriterに直接Writeすると、ステータスコードやヘッダも全部ボディに書き込まれてしまうようで、Hijack()で生のコネクションを取り出してから書き込む必要があるっぽい。
1秒辺りの転送量を調べる

一日あたりを求めるには後は `24 * 60 * 60` して適当にMBとか表示してくれたらええんやけど、めんどくさくなりました。

```
expr `cat /sys/class/net/eth0/statistics/rx_bytes` / `cat /proc/uptime | cut -d "." -f 1`
```

意外とストックされたので追記しときますが、現在の1秒辺りの転送量ではなく起動時間から現時点までの1秒辺りの転送量の平均値です。お間違えのなきようよろしくお願いします。
[Vagrant]ActiveAdminでRails4に管理画面を作成する際に出たエラーへの対処法

開発環境
MacOS   10.10
Vagrant 1.6.3
Rails   4.1.7

### Create ActiveAdmin
rails new activeadmin

### Setting ActiveAdmin
vim Gemfile

```Gemfile
gem 'activeadmin',github: 'gregbell/active_admin'
gem 'devise’
```

```
bundle install
```
### active_adminをインストール
```
bundle exec rails g active_admin:install
```
僕の場合は、ここで

![Screen Shot 2014-11-04 at 16.34.22.png](https://qiita-image-store.s3.amazonaws.com/0/32982/8ecbf459-2d08-a6a2-2948-bbdc483f8566.png)

が表示されて、正常にインストール出来ませんでした。
そのまま
```
bundle exec rake db:migrate
```
したら、migration出来ました。
![Screen Shot 2014-11-04 at 16.43.04.png](https://qiita-image-store.s3.amazonaws.com/0/32982/5fdce9d0-88ff-1a48-bec0-9409a46ea6ac.png)
が、実際にブラウザでhttp://[localhost]:3000/adminに行くと、一時的に管理画面へのログイン画面は出てきましたが、入る以外は何も出来ませんでした。
やはりきちんとインストールしないと見れない。
ということで、

一度ややこしいと思いこのアプリ自体を削除。
今度は
![Screen Shot 2014-11-04 at 16.34.22.png](https://qiita-image-store.s3.amazonaws.com/0/32982/8ecbf459-2d08-a6a2-2948-bbdc483f8566.png)
が出た時に、もう一度
```
bundle exec rails g active_admin:install
```
としました。

すると、
![Screen Shot 2014-11-04 at 16.36.00.png](https://qiita-image-store.s3.amazonaws.com/0/32982/c52e286e-cb6a-48e2-cf2a-2bc60a8325d2.png)
というようにインストールできたと思い、
```
bundle exec rake db:migrate
```
してやりましたところ、またもや
![Screen Shot 2014-11-04 at 16.36.25.png](https://qiita-image-store.s3.amazonaws.com/0/32982/97603d89-34f3-9ef6-df1a-d86ef83b71ef.png)
が出てきました。

このことから、二回
```
bundle exec rails g active_admin:install
```
をすると、それはそれでエラーになる。
なので、最初に表示されていた
![Screen Shot 2014-11-04 at 16.34.22.png](https://qiita-image-store.s3.amazonaws.com/0/32982/8ecbf459-2d08-a6a2-2948-bbdc483f8566.png)
に対処するために、vagrantのメモリーをあげてやりました。

```Vagrantfile
config.vm.provider "virtualbox" do |vb|
  #   # Don't boot with headless mode
  #   vb.gui = true
  #
  #   # Use VBoxManage to customize the VM. For example to change memory:
    vb.customize ["modifyvm", :id, "--memory", "1024"]
  end
```
これで1G分のメモリーは確保出来ました。
```
vagrant reload
```
でVagrantを再起動。

そしてそして

もう一度やってみます。

```
bundle exec rails g active_admin:install
```
![Screen Shot 2014-11-04 at 16.54.43.png](https://qiita-image-store.s3.amazonaws.com/0/32982/7e4c25f8-794b-e87c-5470-a17ec6039165.png)

いったーーーー！
そして、
```
bundle exec rake db:migrate
```
![Screen Shot 2014-11-04 at 16.55.59.png](https://qiita-image-store.s3.amazonaws.com/0/32982/3abe661a-a75d-3c1e-f23c-630665705762.png)

いったーーーーー！

表示結果を見てみます。
http://localhost:3000/admin

![Screen Shot 2014-11-04 at 16.57.15.png](https://qiita-image-store.s3.amazonaws.com/0/32982/f3cc965e-0f41-4907-5eb3-c885f018a1b2.png)

うぇーい！！！！！！

email:admin@example.com
password:password

![Screen Shot 2014-11-04 at 17.09.37.png](https://qiita-image-store.s3.amazonaws.com/0/32982/3008b822-c50a-ee4a-8c2e-a63672585606.png)


参考になりましたか？
また、修正した方がいい場所などあればコメントで教えていただけるとありがたいです。
[appiaries] ruby から appiaries をつかってみる ヽ(ﾟｰﾟ*ヽ)(ﾉ*ﾟｰﾟ)ﾉわぁい

**※Rubyをちょー使えるというわけではありませんので、間違い等、してきしていただけるとよろこびます**

国産のmBaasの一つ appiaries がどんなものか使ってみることにしました。良かったらいろいろ活用していこうかなと思ってます。無料で10,000/月ぐらいのAPIコール、100MBのディスクサイズが提供されるプランがあります。ディスクサイズは心もとないですが、ここで parse.com と比較するなんて野暮なことはやめときますね :smile: 

料金・プラン | appiaries (アピアリーズ) - http://goo.gl/LpQpYN

↑料金プラン等の最新情報は念のためウェブでご確認ください。

# REST-API を使うよ

appiaries はドキュメントがかなり丁寧にかかれているので、うれしいです。でも、間違いもあります。エラー系とか、通常じゃない使い方というか、そういうところはドキュメントへの反映が遅れているのかもしれません。

## 残念ながら ruby のライブラリは提供されていません

gem とかあったら良かったんですが、、、最近はアプリ重視で iOS, Android 用があるのでいいと思います :+1:

### rest-client を使います

最近は、HTTP client として Faraday （ファラデー）？ を使うのが流行っているので、そうしようとも思っていたのですが、とりあえず rest-client 使います。

https://github.com/rest-client/rest-client

```rb
require 'rest_client'
```

と言う感じで使ってきます。

### ヘッダーにTOKENを仕込むよ

APIリクエストするときは appiaries から提供されているTOKENを仕込む必要があります。今回は認証無しの、TOKENのみでデータ追加、取得をしてみます。

```rb
    ret = JSON.parse RestClient::Request.execute(
      :method => :get,
      :url => uri,
      :headers => {'X-APPIARIES-TOKEN' => @appiaries_app_token}
    )
```

こんな感じでヘッダーにTOKENを仕込みます。パラメーターで渡す方法も許可されてます。

**execute を使っているのは、post, get ヘッダー埋め込む方法が良くわからなかったときの名残です。**

### バイナリファイルのアップロード

ファイル等のバイナリデータを保存することもできます。こんな感じです。簡単ですね :heartbeat: 

```rb
      ret = JSON.parse RestClient::Request.execute(
        :method => :post,
        :url => uri,
        :payload => {
          :multipart  => true,
          :_file      => File.read(filename),
          :_id        => fileid,
          :_type      => "image/jpeg",
          :_tags      => "thumbnail",
          :_filename  => filename
          },
        :headers => {'X-APPIARIES-TOKEN' => @appiaries_app_token, 'Content-Type' => 'multipart/form-data'}
      );
```

このとき、パラメーターに ?get=true を渡しています。そうすると、 json 形式でレスポンスがあるのでいろいろやりやすいです。

## デバッグとかエラーとか

かなり丁寧（主観的）にパラメーターのエラーとかを戻してくれます。rest-client の場合、エラーの場合例外をスローしてくれるので、それを適宜処理してあげる必要があります。

appiariesはパラメーター系のエラーは 422 のエラーコードを戻します。まぁ、オブジェクトIDであるところの _id に文字列制限やら文字種制限があるのはクソな仕様ではあるのですが。**他のシステムとの連携も考えてもっと柔軟な長さにして欲しいし、文字種類もいろいろ受け入れてほしい**

### ちなみに _id は20文字という制限があります！！

まじこまってます :cry:

### エラー時のbody内に詳細があるよ

rest-client 的には 422 来たら

```rb
    rescue  RestClient::UnprocessableEntity => e
      puts e.http_body
    end
```
こんな感じにすることでエラーのbodyをみることができますよ。

とりあえず以上です。
Convert dicctionary to object


###1 create object 

### BaseDao.h
```objectviec
@interface BaseDao : NSObject

- (instancetype)initWithDic:(NSDictionary *)dic;

@end


@end
```

### BaseDao.m
```objectviec
- (instancetype)initWithDic:(NSDictionary *)dic {
    return [JsonHandler setValues:dic typeObje:self];
}
```

### TestDao.h
```objectviec
#import "BaseDao.h"

@interface TestDao : BaseDao

@property(copy, nonatomic) NSString *item1;
@property(copy, nonatomic) NSString *item2;

@end
```

###2 direction▶︎object

```objectviec
@implementation GTSetDao

// dicの中に指定したkeyが存在するか確認する
+ (BOOL)isFoundKey:(NSDictionary *)dic key:(NSString *)key {
    if ([[dic allKeys] containsObject:key] == NO) {
        return NO;
    }
    
    return YES;
}

// dicから指定したデータ型に値をセットする
+ (id)setValues:(NSDictionary *)dic typeObje:(id)typeObje {
    NSEnumerator* enumDic = [dic keyEnumerator];
    for (NSString* key in enumDic) {
        
        // keyの一文字目を大文字にする
        NSString* stg = [self convertUppercaseStgForFirstStg:key];
        
        NSString* param = [NSString stringWithFormat:@"set%@:", stg];
        SEL sel = NSSelectorFromString(param);
        id arg = [dic objectForKey:key];
        
        if ([typeObje respondsToSelector:sel] == YES) {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
            [typeObje performSelector:sel withObject:arg];
#pragma clang diagnostic pop
        }
    }
    return typeObje;
}

// 文字列の一文字目を大文字にする
+ (NSString *)convertUppercaseStgForFirstStg:(NSString *)string {
    // 一文字取り出し
    unichar cf = [string characterAtIndex:0];
    
    // 変換し
    NSString* upperFirst = [[NSMutableString stringWithCharacters:&cf length:1] uppercaseString];
    
    // 一文字目と差し替える
    NSMutableString* converted = [NSMutableString stringWithString:string];
    [converted replaceCharactersInRange:NSMakeRange(0, 1) withString:upperFirst];
    
    return converted;
}
```

##3.how to use

```objectivec
    NSDictionary *dic = @{@"item1":@"item1",@"item2":@"item2"};
    
    TestDao *dao = [[TestDao alloc] initWithDic:dic];
```
ODBCからデータベースを抽出してHTMLに表示

ADOでの接続
Set objCon = Server.CreateObject("ADODB.Connection")

コネクションストリングの設定
"DSN=HiplusNeXT01-10;UID=hiplus;PWD=plushi"

コネクションオープン
objCon.Open

レコードセット
Set objRS  = Server.CreateObject("ADODB.Recordset")

レコードセットオープン（SQL発行）
objRS.Open strSQL, objCon


#参考
初めて PHP で ODBC を使ってみる
http://www.ibm.com/developerworks/jp/opensource/library/os-php-odbc/

ODBC Connect(ASP)
https://sites.google.com/site/kikineria/scripting/odbc-connect-asp
[heroku] 環境変数の操作

# 基本的な使い方

```rb
# 環境変数一覧
$ heroku config

# 環境変数名を指定して参照
$ heroku config:get ENV_VAR_NAME

# 追加 (一応addも使えます)
$ heroku config:set ENV_VAR_NAME="value"

# 削除 (一応removeも使えます)
$ heroku config:unset ENV_VAR_NAME
```

# 環境やアプリ名を指定する場合

staging環境を使っていたりすると、複数のherokuアプリを管理しているため、アプリ名の指定が必要になります。

```rb
$ heroku config:set --app "app_name"
```


* 一例として環境を指定できます。

```rb
$ heroku config:set RAILS_ENV="staging" --app "staging_app_name"
```
[Rails 4.x] Devise の Omniauth での api key などの取り扱い方法

今までは

```rb:config/initializers/devise.rb
if RAILS_ENV == "production"
  config.omniauth :facebook, "app_id", "app_secret"
else
  hogehoge ------
end
```

という感じで直書きだったものを変更します。

# config/initializers/devise.rb

config/secrets.ymlへのパスを書きます。

```rb:config/initializers/devise.rb
  config.omniauth :facebook,
                  Rails.application.secrets.facebook.app_id,
                  Rails.application.secrets.facebook.app_secret
```

# config/secrets.yml

こんな感じで。

```rb
development:
  facebook:
    app_id: <%= ENV["FACEBOOK_APP_ID"] %>
```

# 環境変数

```zsh:.your_shell.rc
# ENV VARIABLES
export HOGE_KEY_DEV="hogehoge"
```

# secret.ymlや環境変数について

[こちらを見て下さい。](http://qiita.com/tsumekoara/items/78824fc33d21a164d3a6)

[herokuの場合はこちらも](http://qiita.com/tsumekoara/items/18db3c97734f32ebdfde)
[Rails 4.x] secrets.ymlや環境変数の操作など

Rails 4.1から追加されたconfig/secrets.ymlを使いたいと思います。
しかし、[twelve factor](http://twelve-factor-ja.herokuapp.com/)では環境変数の利用を薦めているようなので、両方を組み合わせようと思います。

# secrets.yml

```erb:config/secrets.yml
development:
  hoge:
    key: <%= ENV["HOGE_KEY_DEV"] %>
production:
  hoge:
    key: <%= ENV["HOGE_KEY"] %>
```

# 環境変数

```zsh:~/.your_shell.rc
# ENV VARIABLES
## dev
export HOGE_KEY_DEV="hogehoge"
# production
export HOGE_KEY="fugafuga"
```

* [heorkuの場合はこちらもご覧下さい](http://qiita.com/tsumekoara/items/18db3c97734f32ebdfde)

# ちなみにkeyなどを作るときに乱数を作るには

[こちらをご覧下さい](http://qiita.com/tsumekoara/items/f65454105bb0e1cfbf74)
特定のページだけTabBarを非表示にする

TabBarを非表示させたいViewに遷移するときに以下のように書くとそのViewにTabBar非表示が適用される。

例：
var sample = SampleViewController(nibName:"SampleViewController",bundle:nil)
sample.hidesBottomBarWhenPushed = true

self.navigationController?.pushViewController(sample,animated:true)
[Ruby 2.x] SecureRandom を利用した乱数の生成方法

# 利用イメージ

```irb
$ irb
irb(main):001:0> require 'securerandom'
=> true
irb(main):002:0> SecureRandom.hex(64)
=> "string------------------------"
```

# SecureRandomの使い方

## base64(n=nil)

* nはbase64文字列の長さのバイト数
** 実際に出力される文字列の長さはnの4/3程度
* 生成される文字列に含まれる文字: A-Z, a-z, 0-9, “+”, “/” and “=”

```rb:使い方
p SecureRandom.base64
p SecureRandom.base64(10)
p SecureRandom.base64(12)
```

```rb:ソース
def self.base64(n=nil)
  [random_bytes(n)].pack("m*").delete("\n")
end
```

## hex(n=nil)

* nは16進数文字列の長さのバイト数
* 生成される文字列に含まれる文字: 0-9 and a-f

```rb:使い方
p SecureRandom.hex
p SecureRandom.hex(10)
```

```rb:ソース
def self.hex(n=nil)
  random_bytes(n).unpack("H*")[0]
end
```

## random_bytes(n=nil)

* nはバイナリ文字列の長さのバイト数
* 生成される文字列に含まれる文字: “x00” - “xff”

```rb:使い方
p SecureRandom.random_bytes
```

```rb:ソース
参照 => http://ruby-doc.org/stdlib-2.1.2/libdoc/securerandom/rdoc/SecureRandom.html
```

## random_number(n=0)

* nはバイナリ文字列の長さ
** n が指定された場合
*** nはinteger
*** 0 <= ::random_number < n
** n が指定されなかった場合
*** nはfloat
*** 0.0 <= ::random_number < 1.0

```rb:使い方
p SecureRandom.random_number
p SecureRandom.random_number(10000)
```

```rb:ソース
参照 => http://ruby-doc.org/stdlib-2.1.2/libdoc/securerandom/rdoc/SecureRandom.html
```

## urlsafe_base64(n=nil, padding=false)

* nはURL-safe base64文字列の長さのバイト数
** 実際に出力される文字列の長さはnの4/3程度
* 生成される文字列に含まれる文字: A-Z, a-z, 0-9, “-” and “_”
** (paddingがfalseの時は、"="も含まれる)

```rb:使い方
p SecureRandom.urlsafe_base64 #=> "U87nfSb70Ddx-IJR0ABg"
p SecureRandom.urlsafe_base64(nil, true) #=> "i0XQ-7gglIsHGV2_BNPrdQ=="
```

```rb:ソース
def self.urlsafe_base64(n=nil, padding=false)
  s = [random_bytes(n)].pack("m*")
  s.delete!("\n")
  s.tr!("+/", "-_")
  s.delete!("=") unless padding
  s
end
```

## uuid()

* v4 random UUID

```rb:使い方
p SecureRandom.uuid #=> "2d931510-d99f-494a-8c67-87feb05e1594"
```

```rb:ソース
def self.uuid
  ary = self.random_bytes(16).unpack("NnnnnN")
  ary[2] = (ary[2] & 0x0fff) | 0x4000
  ary[3] = (ary[3] & 0x3fff) | 0x8000
  "%08x-%04x-%04x-%04x-%04x%08x" % ary
end
```

# 参考

http://ruby-doc.org/stdlib-2.1.2/libdoc/securerandom/rdoc/SecureRandom.html
AngularJSに挑戦！入門 その４

#はじめに

今回は、directiveに挑戦します。
directiveは、自分でタグや属性を定義できます。

#メインビューの作成

```lang:directiveSample.html
<html>
<head>
    <meta charset="utf-8">
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.0/css/bootstrap.min.css">
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.1/angular.min.js"></script>
    <script type="text/javascript" src="directiveSample.js"></script>
    <title>directiveSample</title>
</head>
<body ng-app="directiveApp">
    <div class="container">
        <div class="jumbotron">
            <h2>directiveSample!</h2>
        </div>
        <div ng-controller="directiveCtrl">
            <header></header>
            <mymessage></mymessage>
            <select ng-model="selecter" ng-options="year for year in years"></select>
            <div footer></div>
        </div>
    </div>
</body>
</html>
```

1. `<header>`グが自分で作成したタグになります。
2. `<mymessage>`も同様です。
3. `<select>`タグの`ng-options`属性は、`label for value in array`の形式で設定します。directiveとは関係ありませんが、これを機に覚えましょう。
4. `<div footer>`は、`<div>`タグの追加した属性です。

#Javascript

```lang:directiveSample.js
var directiveApp = angular.module('directiveApp', []);

directiveApp.directive('header', [function () {
        return {
            restrict: 'E',
            templateUrl: "directiveSampleHeader.html"
        };
}]);

directiveApp.directive('mymessage', [function () {
        return {
            restrict: 'E',
            template: '<div>&lt;mymessage&gt;タグの中身です。年を選択してください。</div>'
        };
}]);

directiveApp.controller('directiveCtrl', ['$scope', function ($scope) {
    $scope.years = [2010, 2011, 2012, 2013, 2014, 2015];
    $scope.selecter = 2014;
}]);

directiveApp.directive('footer', [function () {
        return {
            restrict: 'A',
            templateUrl: "directiveSampleFooter.html"
        };
}]);
```

1. `directiveApp.directive()`がdirectiveの設定になります。リターンで戻している値によって振る舞いが変わります。
2. `directiveApp.controller()`で行っているのが`<select>`タグの`ng-options`属性の値になります。`$scope.selecter`で`selected`属性を付与しています。

#置き換えビュー

```lang:directiveSampleHeader.html
<label>Header部分になります。</label>
```

```lang:directiveSampleFooter.html
<label>Footer部分になります。</label>
```

#directiveについて

詳細な情報は、[AngularJS - Creating Custom Directives](https://docs.angularjs.org/guide/directive)を読んでください。
今回使用したものについて説明します。

1. restrict: オプションによって振る舞いが変わります。
   * A: 属性として置き換えます
   * E: タグとして置き換えます
   * C: classとして置き換えます
2. template: この文字列が代わりに表示されます。
3. templateUrl: URLのファイル内容が表示されます。

#注意事項
Webサーバーを使用して、動作確認をして分には問題ないのですが、
ローカルファイルとして使用するとアクセス拒否となり、
以下のようなエラーが発生する場合があります。
`Error: [$compile:tpload] http://errors.angularjs.org/1.3.1/$compile/tpload?p0=directiveSampleHeader.html`

IE11では、必ず発生しました。

#おわりに

置き換わりがなかなかできずに苦労しました。
原因のほとんどがIEの問題だったことは言うまでもありません。
やっぱり、Chromeとかのほうがいいとしみじみ感じました。
PDOをクラス化して使いやすくする（自分用）

PDOの汎用化
=
おおもとのPDO接続のphp

```pdo.php
<?php
class System{
  //PDO接続する関数
  function pdo($sql){
	$dsn="mysql:dbname=dbname;host=localhost;charset=utf8";
    $user="";
    $pass="";
    try{
      $pdo=new PDO($dsn,$user,$pass);
    }catch(Exception $e){
      echo 'error' .$e->getMesseage;
      die();
	}
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
    $stmt=$pdo->query($sql);
    $items=$stmt->fetchAll(PDO::FETCH_ASSOC);
    return $items;
  }
}
?>
```
上記のphpを読み込むphp

```index.php
<?php
require_once(dirname(__FILE__).'/pdo.php');
//Systemクラスの定義
$obj=new System();
$sql="SELECT * FROM shop";
//Systemクラスのpdo関数の呼び出し
$items=$obj->pdo($sql);
?>
```
あらかじめ$sql変数に使用するSQL文をセットしておく。
Systemクラスのpdo関数の呼び出しと同時に$sql変数も渡しておく。
まとめ
=
クラスを勉強し始めて1週間ちょい・・・
まだまだ分からないことのほうが多すぎる。

クラスって難しいね・・・
Yosemiteでsassのアップデートが出来なかった件


## 環境
- OSX 10.10 Yosemite
- ruby 2.1.2
- gem 最新版
- sass v3.2

## 奮闘記

### 1

こんちくしょう。
`gem update sass`してもバージョンが変わらねえ。
`sass_v3.2`がしつこく残ってる。

### 2

`gem uninstall sass` からの `gem install sass`
だめでした。

### 3
見てるPATHが違う疑惑をみつける。

`usr/local/bin`にsassの実行ファイルを見つける。→ 削除
sassがアンインストール出来た！

### 4
`gem install sass`をする。
→ インストールされたみたいだけど、使えない

`gem which sass`でインストール場所を見つける。
とんでもないところに発見
`/usr/local/Cellar/ruby/2.1.2_1/lib/ruby/gems/2.1.0/gems/sass-3.4.7/lib/sass.rb`

どこだよ。

### 5

PATHを通そうとするも不慣れなもんで挫折。
usr/local/binに無理やりコピペでなんとかなった。

## 疲れた・・・

yosemiteのせいかな？
見てるパスには要注意。
ODBCの設定から導入まで

#odbcad32の設定

C:\Windows\SysWOW64\odbcad32.exe

システムDSN＞追加

SQL Sever＞ 完了
名前とサーバ を入力

ユーザが入力するSQLSever用のログインIDとパスワードを使うにチェック
ログインID・パスワードを入力

既定のデータベースを以下のものに変更する
データベースを入力

SQLSeverのシステムメッセージを以下の言語に変更する
Japanese
[swift]Sort関数とClosure


Sort関数とClosureを使った記述方法について調べました。

## Sort関数

Sort関数は普通、次のように書く。

```
var numbers = [1,4,2,3,6,5]
// 降順のソート
// 昇順なら{〜}は省略可 sort(numbers)
sort(numbers) { $0 > $1 }
```

## Closureを使う

Closureを使うとこんな感じ。

```
var strings = ["a", "e", "d", "b", "c"]
sort(strings) {
    (str1 : String, str2 : String) -> Bool in
    return str1 > str2
}
```

引数の型や()、returnは省略できる。

```
sort(strings) { str1, str2 in str1 > str2 }
```

以下のような書き方もOKらしい。
ターゲットの配列のソート関数を定義する方法。

```
// ターゲットの配列をソートする
myArr.sort { (lhs, rhs) in return lhs.deadline < rhs.deadline }

// ターゲットの配列をソートして、別の配列へコピーする
let newArr = myArr.sorted { (lhs, rhs) in return lhs.deadline < rhs.deadline }
```

っていうか、sort() と sorted() があるんですね。。。

$n を使えば、引数も省略できる。

```
let newArr = myArr.sorted { $0.deadline < $1.deadline }
```

ちなみにAppleのサンプルに出てきたコード。
やっと解読できました。

```
// Guarantee that the segments show up in the same order.
var sortedSegmentImageNames = Array(imageToAccessibilityLabelMappings.keys)
sortedSegmentImageNames.sort { lhs, rhs in
    return lhs.localizedStandardCompare(rhs) == NSComparisonResult.OrderedAscending
}
```
IISの導入からプレビューまで

#導入方法

コントロール パネル>プログラム>プログラムと機能>
Windowsの機能の有効化または無効化
下記の項目にチェックを入れ「OK」
・インターネットインフォメーションサービス
・インターネットインフォメーションサービスのホスト可能なWebコア


コントロール パネル\すべてのコントロール パネル項目\管理ツール

上記に
「インターネット インフォメーション サービス (IIS) マネージャー」が表示される


#参考サイト
Mizushima Network Service ～Windows/日本語/無料で始める自宅サーバー～
http://mizushima.ne.jp/index.php

ドメイン取得
http://viral-community.com/other-it/ddns-mydns-2060/

Windows7　IIS7　でホームページを公開
http://hide36.k113.net/IIS7/iis7_02_http_1.html

ASPの表示設定
http://www.iis.net/learn/application-frameworks/running-classic-asp-applications-on-iis-7-and-iis-8/classic-asp-not-installed-by-default-on-iisｚ

ASPの表示設定
デバックプロパティを見るとブラウザへのエラー送信を無効→有効
http://nasunoblog.blogspot.jp/2010/05/web-iis75asp.html
GitHubで二段階認証に変更する

大事なソースコードを保護するために、GitHubは二段階認証にしておくべきです。二段階認証にする事で、パスワードが盗まれてもアカウントの不正利用を防止できます。

　
## GitHubのセキュリティ設定から二段階認証をONに


以下のURLから設定画面にアクセス
https://github.com/settings/security

![Screen Shot 0026-11-04 at 午後0.38.19.png](https://qiita-image-store.s3.amazonaws.com/0/18614/31f690ff-2cce-22dc-5a23-793fca83efbb.png)

「Set up two-factor authentication」をクリックします。





## アプリを使って認証する

こちらの画面が出てくるので、左下の「Set up using an app」をクリックします。

![Screen Shot 0026-11-04 at 午後0.39.18.png](https://qiita-image-store.s3.amazonaws.com/0/18614/c2cefae2-bb43-dacd-2346-7271450572f1.png)


※なんと、SMS認証は日本のキャリアに対応してないらしい。なのでアプリ認証一択です。

次の画面にQRコードが出てくるので、それをアプリを使って読み取ります。

## アプリをダウンロード

スマホでこちらを検索して、スマホからアプリをダウンロードしてください。
「Google Authenticator」
([iPhone](https://itunes.apple.com/jp/app/google-authenticator/id388497605?mt=8))([Android](https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2))

※ちなみにこのアプリはは他のサービスの二段階認証でも使えます（Google, YouTube, DropBox, Yahoo!など）

## アプリ内のバーコードリーダーを起動して、QRコードを読み取る
アプリを起動して「Scan Barcode」をタップすると、カメラが起動します。こちらで先ほどPC画面に表示されたQRコードを読み取ります。

## アプリの画面に出てきた6桁の数字を入力
読み取りが完了すると、アプリ画面に6桁の数字が表示されます。

![スクリーンショット 0026-11-04 午後1.42.53.png](https://qiita-image-store.s3.amazonaws.com/0/18614/00c0c186-f165-ba71-2e36-38ca26440221.png)

こちらを入力したら完了です。

## 追記：リカバリーコードをダウンロードしておく。
完了後の画面から、リカバリーコードをダウンロードしておきます。

こちらは、端末をなくした時や認証コードを受け取れない状態になった時に必要になりますので、ダウンロードしておきましょう。

![スクリーンショット 0026-11-04 午後1.07.53.png](https://qiita-image-store.s3.amazonaws.com/0/18614/dff7db4a-374c-684f-7c83-6e3fe1cf7f84.png)


## 追追記：接続方式をSSHにする必要がある。
二段階認証にするとPUSHができなくなるという問題が生じるようです。

GitHubのリポジトリへの接続方法をSSHに変更する事で正常に動かす事ができるようになります。

詳しくは以下参照。

[GitHubにSSH接続できるようにする方法](http://qiita.com/katsukii/items/9fd5bbe822904d7cdd0a)


これで完了！
UIPopoverController回転時に位置をセンタリングする

UIPopoverController表示後、iPadの向きを縦・横に変えると位置がおかしくなります。
その場合、UIPopoverControllerのdelegateに下記を実装すると、向き変更後にセンタリングされます。

```objc
- (void)popoverController:(UIPopoverController *)popoverController willRepositionPopoverToRect:(inout CGRect *)rect inView:(inout UIView *__autoreleasing *)view
{
	// popOverの位置を更新する
	*rect = CGRectMake(self.view.frame.size.width/2, self.view.frame.size.height/2, 1, 1);
}
```

※iOS7以降
GitLabインストールが簡単になった件


## はじめに
業務で使っていたGitLabのリポジトリ数が上限(10)に達したため、個人用にGitLabを構築してみることにした。
以前構築したときは、何度も躓き2,3日かかったので今回もそれぐらいかかるかなと思ったが、最近パッケージ化したらしく構築が簡単になっており、20minぐらいでインストールできたのでメモっておく。

## 環境情報

* OS: Ubuntu14.04

## Step1:GitLabインストール
[GitLabダウンロードページ](https://about.gitlab.com/downloads/ GitLab)で`Ubuntu14.04`を選択すると、インストール手順が表示されるのでその通り実施する。

### Step1-1: パッケージダウンロード
```download:debパッケージダウンロード
$ wget https://downloads-packages.s3.amazonaws.com/ubuntu-14.04/gitlab_7.4.3-omnibus.1-1_amd64.deb
```

### Step1-2: sshサーバー/postfixインストール
```apt-get:ssh/postfixインストール
$ sudo apt-get install openssh-server postfix
```

### Step1-3: GitLabインストール
```apt-get:GitLabインストール
$ sudo dpkg -i gitlab_7.4.3-omnibus.1-1_amd64.deb
```

## Step2: GitLab設定
### Step2-1: external_url編集

```file:/etc/gitlab/gitlab.rb
# Check and change the external_url to the address your users will type in their browser
external_url "${your_gitlab_fqdn}"
```

${your_gitlab_fqdn}にGitLabサーバーのFQDNを入力する。例えば`http://xxx.xxx.xxx.xxx`と入力する。

### Step2-2: 設定実行
```cmd:GitLab設定反映
$ sudo gitlab-ctl reconfigure
$ sudo gitlab-ctl status # 起動確認
run: logrotate: (pid 7263) 28s; run: log: (pid 7262) 28s
run: nginx: (pid 7252) 30s; run: log: (pid 7251) 30s
run: postgresql: (pid 7161) 44s; run: log: (pid 7160) 44s
run: redis: (pid 7078) 50s; run: log: (pid 7077) 50s
run: sidekiq: (pid 7237) 32s; run: log: (pid 7236) 32s
run: unicorn: (pid 7215) 33s; run: log: (pid 7214) 33s
$
```

## Step3: アクセスしてみる
Step2-1で設定した`external_url`にhttpでアクセスしてみる。

![gitlab_first_page.png](https://qiita-image-store.s3.amazonaws.com/0/46472/82bff83a-2428-b696-0c9e-3b2664347893.png "gitlab_first_page.png")

上記画面が表示されれば正常。
初期の管理者アカウントは、以下のユーザー名、パスワードとなる。

* Username: root
* Password: 5iveL!fe

その後パスワードの再設定画面で、パスワードを再設定した後に再ログインするとプロジェクトを作成できるようになる。
デフォルトでは10000プロジェクトを作成できるよう。

![gitlab_create_project.png](https://qiita-image-store.s3.amazonaws.com/0/46472/f124502f-6ff0-0f6f-8853-26543faa3b22.png "gitlab_create_project.png")


## おわりに
以前に比べるともの凄く簡単にGitLabをインストールできた。
同一マシン内に複数のサーバーをたてるときは依存関係などがあるので、パッケージでインストールするのは難しいかなと思うが、GitLab専用マシンとして使うならこの手順でいいかなと思った。

おしまい。
リモートブランチからローカルにチェックアウト


リモートブランチを確認する

```
git branch -r
* master
  remotes/origin/master
  remotes/origin/xxx
```

ちなみにチェックアウトしたいブランチの名前が見つからない場合はfetchしてみる

```
git fetch
```

以下リモートブランチにチェックアウトしてローカルブランチをそのブランチに切り替える方法

```
git checkout -b xxx origin/xxx
```
Java入門：第7回 配列と拡張for文

今回は配列とfor文について見て行きましょう。入門書では良く配列は箱（変数）の集まりですと説明します。次のようなイメージです。

![2014-11-04 12_50_39-.png](https://qiita-image-store.s3.amazonaws.com/0/22658/00b0c899-7fdc-4ea9-57c9-89693a549766.png)

この箱のなかに、整数であれば、例えば次のように値が入ることになります。このようなものを配列と呼びます。また各値のことを要素と呼びます。

![2014-11-04 12_51_13-.png](https://qiita-image-store.s3.amazonaws.com/0/22658/82ef4e13-b54d-5289-501c-05cfb74fe93e.png)

配列は変数と同じように名前を付けて扱うことができます。

![2014-11-04 12_51_37-.png](https://qiita-image-store.s3.amazonaws.com/0/22658/10a3bd6e-bf4c-2d80-4b0c-879a39953af3.png)

例えば、このmyArrという名前の配列の「8」が代入されているところは2箇所あります。初めの8を出力するには「どこ」という場所の情報が必要になります。Javaでは配列の要素にアクセスするために番号を使います。

![2014-11-04 12_52_03-.png](https://qiita-image-store.s3.amazonaws.com/0/22658/aa5c6e2f-3166-5ad8-0c34-b8b7e3ffed48.png)

番号は0から始まります。これら番号のことを添え字と呼びます。添字は0から始まり、要素の数-1で終わります。この場合は0-4の5つの要素があることになります。

それではこれらのイメージをJavaのコードで表現してみましょう。
配列を定義するには[]を利用します。変数と同様に型の宣言から始めます。

```java
int myArr[];
```

これだけだと、次のように配列を宣言しただけなので、次のような状態です。
![2014-11-04 12_52_51-.png](https://qiita-image-store.s3.amazonaws.com/0/22658/a154e3cb-9d4d-8c6a-cd2c-96636fcb9f80.png)

次に、配列の要素の数がいくつあるか定義します。

```java
myArr = new int[5];
```

ここで、[5]は添字の意味ではなくて、要素の数が5つであることを示します。すると次のような状態になります。これを配列の初期化といいます。

![2014-11-04 12_53_26-.png](https://qiita-image-store.s3.amazonaws.com/0/22658/bbdca585-cf27-8c99-a153-1c390798df60.png)

配列の宣言と初期化は同時に記述することができます。

```java
int myArr[] = new int[5];
```

作成した配列に値を代入するには、添字を利用して次のように記述します。

```java
myArr[0] = 8;
myArr[1] = 4;
myArr[2] = 5;
myArr[3] = 8;
myArr[4] = 2;
```

もう少し簡単に宣言とともに値を代入することができます。

```java
int myArr[] = {8,4,5,8,2};
```

値を取り出すには、次のように記述します。

```java
System.out.println("配列0番目の値＝" + myArr[0]);
```

配列のすべての値を取り出すには、for文を利用して次のように記述することができます。

```java
for(int i=0; i<5; i++) {
    System.out.println("配列" + i + "番目の値" + myArr[i]);
}
```
このとき、配列の要素の数をi<5のように記述するのですが、要素の数を間違えて、例えば6と記述すると、次のようにエラーとなってしまいます。

```java
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
at HelloWorld.main(HelloWorld.java:11)
```

このような実行時に起きるエラーのことをJavaでは例外と呼びます。例外の詳細は別途話すとして、ここでは、次のことを確認しましょう。

* 例外名：ArrayIndexOutOfBoundsException
* 発生したファイルと行数：HelloWorld.java:11

このような間違いをなくすために配列では、要素の数を取得することができるようになっています。次のように「配列名.length」と記述します。

```java
for(int i=0; i<myArr.length; i++) {
    System.out.println("配列" + i + "番目の値" + myArr[i]);
}
```

Javaのバージョン5より配列などの値の集まりに対し、値すべてを走査する機能が追加されました。これを拡張for文と読みます。拡張for文を利用することで、値をすべて走査することができます。

```java
for(int item : myArr) {
    System.out.println(item);
}
```

ここでmyArrが走査対象の配列で、各配列の要素がitemに順次格納されて出力しています。itemは通常のfor文のときの、myArr[i]に相当します。itemは変数名なのでaでもxでも構いません。

拡張for文を利用することで、よりシンプルに配列の中身を取得することができるようになります。また拡張for文は配列だけでなく、さまざまな値の集まりに対して利用することが可能です。
Safariのwebページ完全保存が凄い！



Google Chrome のWebページ完全保存をすると、
CSSで割り当てているbackground-imageがうまく反映されず、残念な感じだった。

ところが、SafariのWebアーカイブ保存はjsもcssも画像も完璧だった。

![Webアーカイブで保存](http://www.googledrive.com/host/0BzLI-t6dM1hrREdjZW9VOGp1VUU "Webアーカイブを選択する")

保存方法は、上記のように右クリック⇒ページを別名で保存⇒保存形式は、Webアーカイブを選択し、保存する

保存したものはSafariで閲覧する。

xxxxx.webarchive

というファイルが保存すると作成される。

画像ファイルはwebarchiveに含まれているようで、保存されるファイルはこの１つのファイルのみ。そこが良い所だ。

こいつをSafariで開くと見事、再現するのである。
仕事でローカル環境にしかないページを共有するのに役に立つかもしれない。
【Git】Gitをインストールしたらやっておくべき初期設定


## Gitの設定を行う

### Gitの基本ユーザの設定

	$ git config --global user.name "Daisuke Nishide"	# ユーザ名の設定
	$ git config --global user.email "d.nishide0125@gmail.com"	# メールアドレスの設定

### Git利用時のコマンドラインの色の設定

	$ git config --global color.ui auto		# git statusなどをした時の、Untracked file, staged fileなどの表示色がわかりやすくなる

Before(Untracked filesの下にある hoge というファイルが普通に白文字)
![GitConfig_01.png](https://qiita-image-store.s3.amazonaws.com/0/18615/6d3b0d4a-3977-b823-6713-6de7a02f3673.png "GitConfig_01.png")


After(Untracked filesの下にある hoge というファイルが赤文字に！！)
![GitConfig_02.png](https://qiita-image-store.s3.amazonaws.com/0/18615/bc9da1f1-85cd-34bf-f5a4-2028f47aa89b.png "GitConfig_02.png")




### Gitで利用するデフォルトエディタの設定

	$ git config --global core.editor vim	# git commitの時に自動で立ち上がるエディタの設定


## Gitの設定を確認

	$ cd	# ユーザのホームディレクトリへ移動
	$ cat .gitconfig	# ユーザのgitの設定を確認（下記のように上記で設定した内容が反映されていればOK）

	[user]
		emal = dnishide@veincarry.jp
		name = Daisuke Nishide
	[color]
		ui = auto
	[core]
		editor = vim


## まとめ

とりあえずGitを使い始める時に、そもそもGitに対する設定としてやっておくべき基本設定を４つ程紹介しました。
もっとこういう設定もしておいた方が良いよね！というのがあれば、編集リクエスト等頂けますと幸いです。
勉強会運営の事前作業一覧

#はじめに
IT界隈では有志の勉強会がよく開かれます。
IT勉強会の代表的な形式がセミナー型で、技術に関する知見を発表しあい、質問・意見を共有するものです。
セミナー型のIT勉強会を開催する時に、私が事前に行う作業の一覧を書きます。

#テーマを決める。
あなたが知りたい技術をおっしゃって下さい。それが、あなたが開く勉強会のテーマです。
最新のプログラミング言語やフレームワーク、アルゴリズム等、何でも有りです。
そして、知りたい技術が見つかったら、友人や同僚にその事を話してみて下さい。
テーマを話す事は、以下の３点からとても大事です。
・話す事で頭の中が整理され、テーマが具体的になっていきます。
・熱意を持って話せるかどうかで、自身が本当に学びたいと思っているのかを判断できます。
・話し相手の反応から、勉強会を開いた時に一緒に学んでくれる仲間が集まるかどうかもある程度推測できます。

#同じテーマの勉強会を探す。
同じテーマの勉強会を探して下さい。
最近は、MOOCやその他の学習サイトも豊富にありますので、そちらも確認してみましょう。
既に同じテーマの勉強会があるなら、そちらに参画させて頂く方が早いです。
同じテーマの勉強会がないなら、あなたが開催するほかありません！

##勉強会の一覧・検索サイト
* [IT 勉強会カレンダー](https://www.google.com/calendar/b/0/embed?src=fvijvohm91uifvd9hratehf65k@group.calendar.google.com)
* [IT勉強会カレンダー検索 - UTF-8.jp](http://utf-8.jp/tool/calsearch.html)
* [AZusaar!!](http://azusaar.appspot.com/)
* [upmeetup.info | 勉強会一覧 イベント一覧 ランキング](http://upmeetup.info/)
* [dots. [ドッツ] – IT勉強会・セミナーなどエンジニアのためのイベントカレンダー](http://eventdots.jp/)

#発表をお願いする。
勉強会で発表して欲しい方がいましたらお願いしましょう。
知り合いならば請け負って頂ける事が多いです。
そして、お願いした方々の来月以降の空き日程をお聞きし、それらの日程から勉強会開催日を決めましょう。
なお、参加者募集ページを作った後に有志の発表者を募る事もできます。
##発表者にお聞きする事
* 発表タイトル
* 発表時間
* 発表者名

#会場を用意する。
あなたがお勤めになっている企業がベストですが、事情によっては別の会場を用意する必要があります。
会場を貸して頂ける企業様は多いですが、開催の2週間前には連絡するようにしましょう。
[ → IT勉強会で利用できる会場一覧・まとめ | Doorkeeper](http://www.doorkeeper.jp/%E4%BC%9A%E5%A0%B4)

##企業様への連絡に含める事柄

###伝達事項
* 氏名
* コミュニティ名・勉強会名
* 希望日時
* 予定参加者数
* 勉強会内容
* 懇親会有無
* メールアドレス

###質問事項
* 緊急連絡先
* 飲食・飲酒の可否
* 入場時のスタッフ付き添いの必要性
* プロジェクター（+Mac向けのアダプター）・ホワイトボード・WiFiの有無
* ニコ生・UStreamの可否

#参加者募集ページを用意する。
参加者募集ページを公開するWebサービスは多くありますので、比較・検討の上で利用先を決めて下さい。

##公開サービス
* [Eventbrite - Discover Great Events or Create Your Own & Sell Tickets](https://www.eventbrite.com/)
* [ATND: イベント開催支援ツール アテンド](https://atnd.org/)
* [connpass - 人をつなぐIT勉強会・イベント支援サイト](http://connpass.com/)
* [Peatix | 簡単イベント管理、チケット販売サイト（ピーティックス）](http://peatix.com/?lang=ja)
* [こくちーず（告知's） - イベント・セミナー集客を支援する無料サービス](http://kokucheese.com/)
* [セミナー・勉強会・イベント管理ツール | Doorkeeper](http://www.doorkeeper.jp/)
* [Zusaar | 決済できるソーシャルイベントプラットフォーム](http://www.zusaar.com/)
* [PARTAKE](http://partake.in/)
* [EventRegist（イベントレジスト）｜イベレジで簡単イベント作成！](http://eventregist.com/)

なお、参加者募集ページには下記の項目を入れて下さい。

##募集ページの項目
* 勉強会名
* 主催者名・連絡先
* 勉強会の紹介文
* 参加枠の種類（ex.一般参加枠、スタッフ参加枠、発表者枠、LT登壇者枠、アンカンファレンス司会者枠）
* 定員
* 参加費
* 注意事項
* タイムテーブル
* 集合場所・集合時間
* 持ち物

#勉強会の概要を説明する資料を作る。
勉強会の始めに会の概要を説明して下さい。
その為の資料には、下記の項目を入れて下さい。
##説明項目
* 主催者の自己紹介（ex.エンジニアです。アカウントはnezuqです）
* 理念・コンセプト（ex.統計処理を万人の手に！）
* 取り扱い技術の範囲（ex.非エンジニア向けのBIツール）
* 運営方法（ex.セミナー形式です。分からない事があれば随時質問して下さい。発表途中でも構いません）
* 注意事項（ex.質問する時は柔らかい表現を心がけて下さい）

#勉強会を宣伝する。
似ているテーマの勉強会で発表させて頂き、発表の最後に勉強会開催を宣言しましょう！
とにかく、勉強会を開催したいという意思を多くの方へ伝える事が大事です。
又、Twitter/Facebook等のSNSを駆使して、勉強会を宣伝しましょう！

#リマインドメールを送る。
勉強会のリマインドメールを開催日が近くなったら送って下さい。
予定の合わなくなった方にキャンセルして貰う事で、補欠の方が参加できるようになります。

#関連ページ
* [勉強会運営で用意する物品の一覧](http://qiita.com/nezuq/items/d92df588dedb9b228938)
* [勉強会運営の当日作業一覧](http://qiita.com/nezuq/items/ccc8a47d69b726b128e4)


#備考
思いつき次第、加筆・修正していきます。

#本記事のライセンス
![by.png](https://qiita-image-store.s3.amazonaws.com/0/38787/bcf73e8f-fc46-6697-e01d-dd01947250cf.png)
Railsでパッケージ管理にBowerを使用する


RailsでBowerを利用するための方法として

bower-rails https://github.com/42dev/bower-rails
rails-assets https://rails-assets.org/

などが用意されている。

最初はbower-railsを使っていたが、.bowerrcでcwdオプションが使えない(サポートされていないのでエラーになる)ので、Herokuに上げたときに面倒くさい。

rails-assetsはまだライブラリで使えないものがあったのでパス。

というわけで、素のbowerを使う。

`Rails.root`に.bowerrcを作成する。

```
{
  "directory": "vendor/assets/bower_components"
}

```

その後、ルートで

```
bower init
```

あとは普通に

```
bower install jquery --save
```

でインストールできる。

.gitignoreに

```
/vendor/assets/bower_components
```

を追加してbower_componentsをgitの管理から外しておく。
パスを変えるのが面倒

```
{
    "cmd": ["node","$file","file_base_name"],
    "working_dir":"${project_path:${folder}}",
    "selector":"*.js"
}
```
↓
```
{
    "cmd": ["/usr/local/bin/node","$file","file_base_name"],
    "working_dir":"${project_path:${folder}}",
    "selector":"*.js"
}
```
Factory Girl の sequence でハマった

Railsプロジェクトで、RSpec+Factory Girlを使ってテストを書いていて、
ローカルでテストを走らせると問題なく通るのだけど、Travis CI上ではFが出るという不思議な現象が起きて、解決するまでに少し時間がかかったので、メモを残しておく。

例えばUserとHistoryというモデルがあって、1対Nで対応している。
テストの中で`User.joins(:histories)`のようにINNER JOINしたものを使う必要があったので、Factory Girlで以下のように書いた。

```
factory :user, class: User do
    sequence(:id) { |n| n+1000 }
    …
end

factory :history, class: History do
    sequence(:id) { |n| n }
    sequence(:user_id) { |n| n+1000 } #ここをuserのidと揃える
    …
end
```

RSpecにはこう書く。以下、Aの場所と呼ぶ。

```
before(:each) do
    100.times { create(:user) }
    100.times { create(:history) }
end
```

(今回は1対N (N>1)の状態でテストする必要はなくて、1対1でも良かったのでこういう書き方をしている。)

このAのあとで`User.joins(:histories)`をすれば`User.joins(:histories).size`は100になるはずなんだけど、0になってしまう問題が起きてFが出ていた。

原因は別の場所(以下、Bの場所と呼ぶ) で
`1000.times { create(:history) }`
をしていて、historyのuser_idがuser.idよりも1000進んでいて、INNER JOINの時に一致したidがなかったということ。

`spec_helper.rb`で`config.order = "random"`にして、順番がランダムに行われるようにしているのだけど、ローカルでrspecを走らせた時には、BよりもAの方が先に実行されたため、historyのuser_idとuser.idが一致していて、JOINが問題なくできたためテストをパスできたのだけど、
Travis CIでテストを走らせた時には(7回中7回とも)、AよりもBの方が先に実行されたため、JOINが上手くできなくてFが出ていた。

ハマった理由は3つで、

* before(:each) を使えば毎回テストの前に状態がリセットされて、今回であれば毎回idが1001から作られると思っていた。
* Rails 4.1.5から4.1.7にあげた途端に7回連続でFailしたため、(ありえない気がするけど)Railsのアップデートと何か関係があるのかと思って、そっちの方向でしばらく考えてしまった。
* 4.1.5ではTravisで成功(2回試行)、4.1.7ではローカルではテストが成功する(3回試行)のに、Travisのみで失敗する(7回試行)という脅威の運の悪さ(1/(2**12) = 0.024%)によって、Travisの環境になにか問題があるのかと考えていた。

ということで、解決方法としては

```
factory :user4join, class: User do
    sequence(:id) { |n| n+1000 }
    …
end

factory :history4join, class: History do
    sequence(:id) { |n| n }
    sequence(:user_id) { |n| n+1000 } #ここをuserのidと揃える
    …
end
```

みたいにJOINする専用のデータを作って、単に`create(:hitstoy)`するのとは分けておくのがいいんですかね。
この辺、常識なのかもしれないですけど、ハマったのでメモしておきました。
Yahoo商品登録API（editItem）のトラブル**"seller_id" is not specified**

はじめまして。今Yahoo商品登録APIを使って、Yahooに商品登録作業をやっているものです。
Yahooの関連マニュアルに従い、POSTで以下のRequestを送っていますが、

post https://circus.shopping.yahooapis.jp/ShoppingWebService/V1/editItem?item_code=testcode001&name=testitemname&path=aaaa%3Abbbb%3Acccc&price=99999&product_category=2079&sale_price=99999&seller_id=sellid

以下のレスポンスが返ってきます。

<?xml version='1.0' encoding='UTF-8' ?>
<.Error>
<.Message>"seller_id" is not specified<./Message>
<.Code>px-04001<./Code>
<./Error>


送ったパラメータ内容は必須項目です。以下となります。
seller_id=>sellid,
item_code=>testcode001,
name=>testitemname,
path=aaaa:bbbb:cccc,
price=>99999,
original_price=99999,
念のためproduct_categoryも送っています
product_category=>2079

同じURLをGETで送ると、seller_idは通りますが、
今度必須項目がないレスポンスが返ってきます。

<?xml version="1.0" encoding="UTF-8"?>
<.ResultSet>
  <.Result>
    <.Status>NG<./Status>
    <.Error>
      <.Target>item_code<./Target>
      <.Code>it-01013<./Code>
      <.Message><![CDATA[商品コードは必須です。]]><./Message>
    <./Error>
    <.Error>
      <.Target>path<./Target>
      <.Code>it-01011<./Code>
      <.Message><![CDATA[パスは必須です。]]><./Message>
    <./Error>
    <.Error>
      <.Target>name<./Target>
      <.Code>it-01012<./Code>
      <.Message><![CDATA[商品名は必須です。]]><./Message>
    <./Error>
    <.Error>
      <.Target>price<./Target>
      <.Code>it-01015<./Code>
      <.Message><![CDATA[通常販売価格は必須です。]]><./Message>
    <./Error>
  <./Result>
<./ResultSet>

**タグ内の’.’を無視してください。

こちらの投稿も拝見して
<a href="http://qiita.com/catsliving/items/ea4e1c14ce893e3e953a">[Yconnect][商品一括更新API]SellerID is not specifiedとなります。</a>
Content-Type: application/x-www-form-urlencodedを指定しましたが、同じエラーが返ってきます。

同じトラブルにあった方またはお分かりの方はいらっしゃいますでしょうか。
ご教授の程、よろしくお願いいたします。
Eclipse Luna(4.4.1) + Aptana 3にClassCastExceptionで起動時エラー

Eclipse 4.4.1(2014/11/04時点の最新)にAptana3をインストールしたら、起動時エラーが発生した。

ClassCastExceptionだそうだ
![luna+aptana.png](https://qiita-image-store.s3.amazonaws.com/0/57869/0cb1d11d-144e-9b59-fe89-df62618e56e0.png)

Rubleのスタートアップで失敗しているようだが、「[Eclipse：Start Ruble bundle managerで内部エラー（NullPointerException）](http://tech.noriakihoriuchi.com/eclipse-start-ruble-bundle-managerdenei-bu-era-nullpointerexception)」とは違う。
（ちなみに、この状態だとメニューバーのCommandが空っぽ）

（内容はよくわからないけど）関係ない内容のはずの[Docker開発環境をつくる - Emacs24とEclimからEclipseに接続するJava開発環境](http://masato.github.io/2014/10/04/docker-devenv-emacs24-eclim-java/)でもまったく同じエラーログが吐かれている。

> 
!ENTRY org.eclipse.m2e.logback.configuration 2 0 2014-10-27 15:09:41.613
!MESSAGE Exception while setting up logging:org.eclipse.osgi.internal.framework.EquinoxConfiguration$1 cannot be cast to java.lang.String
!STACK 0
java.lang.ClassCastException: org.eclipse.osgi.internal.framework.EquinoxConfiguration$1 cannot be cast to java.lang.String
	at org.eclipse.m2e.logback.configuration.LogHelper.logJavaProperties(LogHelper.java:26)
	at org.eclipse.m2e.logback.configuration.LogPlugin.loadConfiguration(LogPlugin.java:189)
	at org.eclipse.m2e.logback.configuration.LogPlugin.configureLogback(LogPlugin.java:144)
	at org.eclipse.m2e.logback.configuration.LogPlugin.access$2(LogPlugin.java:107)
	at org.eclipse.m2e.logback.configuration.LogPlugin$1.run(LogPlugin.java:62)
	at java.util.TimerThread.mainLoop(Timer.java:512)
	at java.util.TimerThread.run(Timer.java:462)

Eclipseのバージョンを4.4.0に落としてAptanaを入れ直したらエラーが起きなくなった。
4.4.1のバグかな？
UnityでUDPを送信してみる


UdpClient 使えば簡単。
とりあえずローカル環境で試したいので、ブロードキャストしてtcpdumpで見てみる。

ifconfig してブロードキャストアドレスを調べる。

```sh
$ ifconfig
...
    inet 192.168.0.0 netmask 0xffffff00 broadcast 192.168.0.255
...
```

Unity で下記スクリプトをメインカメラにでもくっつけて実行。

![attach.png](https://qiita-image-store.s3.amazonaws.com/0/20773/ecea38ba-4d71-af26-2a9f-90eb675b7079.png "attach.png")


```C#:UDPClient.cs
using UnityEngine;
using System.Net.Sockets;
using System.Text;

public class UDPClient : MonoBehaviour
{
	// broadcast address
	public string host = "192.168.0.255";
	public int port = 3333;
	private UdpClient client;

	void Start ()
	{
		client = new UdpClient();
		client.Connect(host, port);
	}

	void Update ()
	{
	}
	
	void OnGUI()
	{
		if(GUI.Button (new Rect (10,10,100,40), "Send"))
		{
			byte[] dgram = Encoding.UTF8.GetBytes("hello!");
			client.Send(dgram, dgram.Length);
		}
	}

	void OnApplicationQuit()
	{
		client.Close();
	}
}
```

Unity で設定したポートを指定して、tcpdump する。

```sh
$ sudo tcpdump port 3333
```

![play.png](https://qiita-image-store.s3.amazonaws.com/0/20773/b528005d-b039-aaa1-d994-69355417a4c7.png "play.png")

ボタン押下して、こんな感じのが返ってきたら成功

    tcpdump: data link type PKTAP
    tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
    listening on pktap, link-type PKTAP (Packet Tap), capture size 65535 bytes
    18:33:46.175988 IP 192.168.0.0.53435 > 192.168.0.255.dec-notes: UDP, length 6
[Node.js] インストール済みのパッケージ一覧を表示する


インストール済みのパッケージのリストを表示

```console
$npm ls
```

こうすると直下のやつだけ見れて便利

```console
$npm ls --depth=0
```

ちなみにグローバルのやつ見る場合は -g つける

```console
$npm ls -g
```
ALAssetsLibraryのALAssetからNSDataを作る


何度も漂流してやっと辿り着いた。　　
今となっては何故こんなに苦戦したのかはわからない。


```swift
ALAssetsLibrary().assetForURL(url,
    resultBlock: { (asset: ALAsset!) in
        // Convert from ALAsset to NSData
        var rep = asset.defaultRepresentation()
        var bufferSize = UInt(Int(rep.size()))
        var buffer = UnsafeMutablePointer<UInt8>(malloc(bufferSize))
        var buffered = rep.getBytes(buffer, fromOffset: 0, length: Int(rep.size()), error: nil)
        var data = NSData(bytesNoCopy: buffer, length: buffered, freeWhenDone: true)
    },
    failureBlock: { (error: NSError!) in
    }
)
```

٩(๑❛ᴗ❛๑)۶
指定したdir配下や、git管理下ファイルにperl -cをかます

LAMP環境でperlのモジュールをいじっていて、
あれ、どっかのモジュールがperl -c通ってないっぽいな。。。
どれが原因だ？と困ることがあったので、メモ書き程度ですがqiitaに初投稿してみます。

まずは、今いるdir配下にあるファイルに全部perl -cかける方法。
`find . -name "*.pm" | xargs -i perl -c {}`

xargsの-iオプションは、標準入力から一行読み込むたびに、コマンドを実行させるオプションです。
普通の単純なコマンドの組み合わせなのでよく使ってそうですね。

次は、perlモジュールを色々いじっていて、
さてと、addかcommitするかって時に便利なコマンド。

`git status | grep ".pm" | cut -f4 -d " " | xargs -i perl -c {}`

git statusで出てきたファイルをパースして、perl -cかけてます。
vimで保存するときに勝手にperl -cやってくれるようにしてくれてれば、こんなことしなくていいんですけど、チームで仕事をしていると人によりけりなのでなんとも。。。

そういう場合は、コミットフックにperl -cチェックをいれたいですね。
gradleでBuildTypes,flavorsを利用した時に'Duplicate class found in the file'が出る

##前置き
gradleの超ベンリ機能にBuildTypes,flavorsがあります。

* BuildTypes  
Release, Debugを切り替えることができます。

```groovy

    buildTypes {
        release {
            runProguard true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.hoge
        }
        debug {
            debuggable true  
            applicationIdSuffix = '.alpha'  
            versionNameSuffix = 'a'
        }
    }
```

* flavors  
同じアプリの別機能を実装する際に利用します。

```groovy

    productFlavors {
        //通常版
        normal {
            applicationId = 'com.tomoima.hogeApp'
        }
        //海外版
        abtest {
            applicationId = 'com.tomoima.hogeGlobalApp'
        }

    }
```


詳しくはこちら<http://vividcode.hatenablog.com/entry/android-app/build-variants>を見ると勉強になります。

##問題
BuildTypesやflavorsを使うことで,同じクラス名でソースコードを切り替えることが出来るようになります。で、切り替えたいjavaファイル(ここではMoge.java)以下のようにファイルを置くと、エラーメッセージがでます。

//debug版
src/debug/java/com/tomoima/hogeApp/Moge.java

//release版
src/release/java/com/tomoima/hogeApp/Moge.java

出るメッセージ(IDEで赤線がでます)：

"Duplicate class found src/main/java/com/tomoima/hogeApp/Moge.java"

##原因
src/main配下においてあるファイルとBuildTypesやflavors配下にあるファイル名が重なるとNGのようです。

##解決策
src/main配下にある同じMoge.javaファイルを消せばOKです。
あとは、BuildVariantでビルドしたいタイプを切り替えるか、ターミナルからgradleのオプションでビルドを切り替えることができます。
うっかり忘れるWordPressのあれこれ

#はじめに

よく忘れるWordPressの作法を記録として残します。

#関数
```
ヘッダー：                  <?php wp_head(); ?>
フッター：                  <?php wp_footer(); ?>
wordpressアドレス：         <?php echo site_url(); ?>
サイトアドレス：             <?php echo home_url(); ?>
トップページだけに表示させる：<?php if (is_home() && !is_paged()) { ?>トップページだけに表示させる<?php } ?>
個別ページだけに表示させる：  <?php if (is_single() && !is_paged()) { ?>個別エントリページだけに表示させる<?php } ?>

```

#function.phpのカスタマイズ

###indexページやgenerator(WordPressの情報)を削除したい
```
<link rel=’index’ title=’ブログ名’ href=’ブログURL’ />
<meta name=”generator” content=”WordPress 2.8.6″ />
```

###ページ上部の空白をなくしたい
`add_filter( 'show_admin_bar', '__return_false' );`

###自動整形を無効にする
```
remove_filter( 'the_content', 'wpautop' );
remove_filter( 'the_excerpt', 'wpautop' );
```

###ダッシュボードのカスタマイズ

```
// アップデート通知をOFF
add_filter('pre_site_transient_update_core', create_function('$a', "return null;"));
// フッター非表示
add_filter('admin_footer_text', '__return_false');
// サイドバーも非表示にする場合
function remove_menu() {
    // ダッシュボードの「更新」を非表示
    remove_submenu_page('index.php', 'update-core.php');
}
add_action('admin_menu', 'remove_menu');
// adminバーから不要なメニューだけを消す
function mytheme_admin_bar_render() {
    global $wp_admin_bar;
    $wp_admin_bar->remove_menu('updates');
    $wp_admin_bar->remove_menu('comments');
    if (!current_user_can( 'administrator')) {
        $wp_admin_bar->remove_menu('wp-logo');
        $wp_admin_bar->remove_menu('site-name');
    }
}
add_action( 'wp_before_admin_bar_render', 'mytheme_admin_bar_render' );
```

###メディアライブラリに登録した画像を参照する
```
<?php $upload_dir = wp_upload_dir(); ?>
<img src="<?php echo $upload_dir['baseurl']; ?>/blog-title.png" width="712" height="125" alt="スタッフブログ" />
```

###スラッグ名の取得
```
$page = get_page(get_the_ID());
$slug = $page->post_name;
```

###カテゴリ－の取得
```
$cat_now = get_the_category();
$cat_now = $cat_now[0];
/*親カテゴリーのID取得*/
$parent_id = $cat_now->category_parent;
/*現在のカテゴリーID/カテゴリー名取得*/
$now_id = $cat_now->cat_ID; /* カテゴリID */
$now_name = $cat_now->cat_name; /* カテゴリ名 */
```

###カスタムフィールドの画像URL取得
```
<?php
// 画像取得
$beforeimg = get_post_meta($post->ID, 'ba_before_image', false);
foreach($beforeimg as $val){
    $before_img = wp_get_attachment_url($val);
}
?>
<a href="<?php echo $before_img; ?>" rel="lightbox"><img src="<?php echo $before_img; ?>" alt="" /></a>
```

###投稿ページのスラッグ取得
```
<?php $slugnm=get_post_type_object( get_post_type() )->name; ?>
<?php echo $slugnm; ?>
```

###親ページのスラッグ取得
`get_the_title($post->post_parent);`

###投稿記事のアイキャッチ画像を表示する
`<?php echo get_the_post_thumbnail($post->ID, array(240,160));?>`

※array()の設定値はwidth,height

###月別アーカイブの表示
`<ul><?php wp_get_archives('type=monthly&limit=12'); ?></ul>`

###テキストエリアを改行ありで表示する
`<?php echo nl2br(get_post_meta($post->ID,'job_detail', true )); ?>`
YosemiteでApacheの(というかDocumentRootの)再設定 ※追記(11/8)


　Marvericksからyosemiteに上げて、ドキュメントルート(localhost/~username的なアクセス)の設定が上手く働いてなかったので、設定しなおしました。以前の設定ファイルを直接置いても私のところでは動かなかったのでまとめておきます。備忘録備忘録。


```/etc/apache2/httpd.conf
# about L490, comment in
# User home directories
Include /private/etc/apache2/extra/httpd-userdir.conf
```

```/etc/apache2/extra/httpd-userdir.conf
# about L16, comment in
# Control access to UserDir directories.  The following is an example
# for a site where these directories are restricted to read-only.
Include /private/etc/apache2/users/*.conf
```

```/etc/apache2/users/[username].conf
<directory "/Users/[username]/Sites/">
    Options Indexes MultiViews FollowSymlinks
    AllowOverride All
    Require all granted
</directory>
```

無駄に時間かけてしまった。

DocumentRootの設定ではなくUserDirじゃね？とのご指摘を受けました。ありがとうございます。
DocumentRootで検索する人もいそうなので、タイトルはあえてこのままにしておきます。