OmniAICreator/Qiita-1.07M huggingface dataset:
画像をアスキーアートに変換（swift実装）

スズキswiftを実装したときのメモ
UIImage（width:100px程度）を入力すると、コンソールにアスキーで出力します。

https://twitter.com/shimy_net/status/473749061053333504
![swiftart.png](https://qiita-image-store.s3.amazonaws.com/0/19485/0dae3aa3-8c3c-a600-9467-acd1fcb9202b.png)

```lang:Objective-c
- (void)printAsciiArt:(UIImage*)image
{
    CGImageRef cgImage = [image CGImage];
    CGDataProviderRef dataProvider = CGImageGetDataProvider(cgImage);
    CFDataRef data = CGDataProviderCopyData(dataProvider);
    CFMutableDataRef mData = CFDataCreateMutableCopy(0, 0, data);
    UInt8 *pixels = (UInt8*)CFDataGetBytePtr(mData);
    
    for ( int y = 0; y < image.size.height; y = y+2 )
    {
        NSString *str = @"";
        for ( int x = 0; x < image.size.width; x++ )
        {
            UInt8 *buf = pixels + y * CGImageGetBytesPerRow(cgImage) + x * 4;
            UInt8 r = *( buf + 0 );
            UInt8 g = *( buf + 1 );
            UInt8 b = *( buf + 2 );
//            UInt8 a = *( buf + 3 );
            UInt8 l = ( r + g + b ) / 3.0;
            NSString *chr;
            if ( l <= 51 )
            {
                chr = @"@";
            }
            else if ( l > 51 && l <= 102 )
            {
                chr = @"#";
            }
            else if ( l > 102 && l <= 153 )
            {
                chr = @"=";
            }
            else if ( l > 153 && l <= 204 )
            {
                chr = @"-";
            }
            else if ( l > 204 && l <= 255 )
            {
                chr = @".";
            }
            str = [NSString stringWithFormat:@"%@%@", chr, str];
        }
        printf("%s\n", [str UTF8String]);
    }
    
    CFRelease(data);
    CFRelease(mData);
}
```
Railsで開発環境と本番環境を区別したい時

Railsで開発している時にブラウザのタブたくさん開いてたら、間違えて同時に開いていた本番のページを操作してしまった。。。なんてことはRailsアルアル。

そんな時のために、ページ見たら一発で環境が区別できるようになるgem作りました。
gem入れて`config/application.rb`に１行足すだけなので意外に便利。
しかも、テーマが変えられるので、自分のサイトにあったデザインにできる！

https://github.com/dtaniwaki/rack-dev-mark

![screenshot-development.png](https://qiita-image-store.s3.amazonaws.com/0/22653/dfdc8853-fc49-2c75-7b46-fec24537958c.png)

色違い

![Screen Shot 2014-06-09 at 8.37.17 PM.png](https://qiita-image-store.s3.amazonaws.com/0/22653/b7201734-194e-d49c-a715-a3066fa6e0e4.png)
SwiftからObjective-cのコードを呼び出すときの注意点


SwiftとObjective-cでそれぞれ同じ関数名を持ったクラスがあったとする。

```SwiftCls.Swift
class  SwiftCls:NSObject  {
    func executePeroPero(target:String,Frequency frequency:Int) -> Void{
        for i in 0..frequency
        {
            NSLog("%@ぺろぺろ",target)
        }
    }
}
```

```ObjcCls.m
@implementation ObjcCls
-(void)executePeroPero:(NSString*)target Frequency:(int)frequency{
    for(int i = 0;i< frequency;i++)
    {
        NSLog(@"%@ぺろぺろ",target);
    }
}
@end
```

それぞれをSwift上からコールすると、同じ関数名なのに、Objective-cで書かれたほうがエラーになってしまう。

```hoge.Swift
var swift = SwiftCls();
swift.executePeroPero("フェイトちゃん",Frequency:3)

var objc = ObjcCls();
objc.executePeroPero("フェイトちゃん",Frequency:3)　// コンパイルエラーがおきる        
```

Objective-cで書かれた関数の、最後の引数のラベルは小文字で書かないといけないようだ。(現時点では？)
エラーが起きないようにするには以下。

```hoge.Swift
var objc = ObjcCls();
objc.executePeroPero("フェイトちゃん",frequency:3)
// フェイトちゃんぺろぺろ
// フェイトちゃんぺろぺろ
// フェイトちゃんぺろぺろ        
```
ゲームのUIデザインでよく使うPhotoshopスタイル


## 主にボタンに使用するスタイル

* Ultimate Web 2.0 Layer Styles - Free Download.
http://www.dezinerfolio.com/2008/11/19/220-amazing-free-photoshop-layer-styles

* 56 Photoshop layer styles
http://www.jay-han.com/files/jayhan-56-layer-styles.zip

* 42 Button Layer Styles
http://www.designwalker.com/img/button_layer_styles/button_layer_styles.zip

## 金属系スタイル

* Metal Text Effect
http://www.premiumpixels.com/freebies/metal-text-effect-photoshop-layer-style/
* Photoshop Metal Text Styles
http://www.graphicsfuel.com/2010/10/psd-metal-text-styles/
* Carbon Styles
http://sta.sh/02csfcb8gji9

## その他質感

* Press Photoshop Styles
http://wwcrap.deviantart.com/art/Press-Photoshop-Styles-190848969

## グラデーション

* 金属系グラデーション
Metal platinum gradient
http://roula33.deviantart.com/art/gray-metal-platinum-264676266
[MySQL] EUCから→UTF8へデータ移行メモ_φ(・・*)

文字コードの違いによるめんどうがあったので、メモあっぷ☆
(エンジニアかけだしなので、お気づきの点あれば、コメントおねがいします(> < ))


まずは、移行データが重かったのでテーブルを指定してちょっとずつエクスポート
`$ mysqldump -u username -p --database dbname —table tablename > dbname-tablename.dump`

ファイルの文字コード変換
`$ nkf -wE dbname-tablename.dump > dbname-tablename_utf8.dump`

※nkf
http://itpro.nikkeibp.co.jp/article/COLUMN/20060227/230849/

ファイル内の｢ujis｣を｢utf8｣に全て置換する。
`$ sed -e 's/ujis/utf8/g' dbname-tablename_utf8.dump > dbname-tablename_output_utf8.dump`

※sed
http://itpro.nikkeibp.co.jp/article/COLUMN/20060227/230879/


必要あればエラーになる余分な------等をvimで削除
(前のVersionが古かったのでdumpされる中にエラーコメントが入っちゃうようでした)
`$ vi dbname-tablename_output_utf8.dump`

インポート先に入る
`$ mysql -u username -p`

インポート先にutf8をセットしてデータベース作成
`mysql>CREATE DATABASE dbname DEFAULT CHARACTER SET utf8;`
`mysql>exit`

`$ mysql -u username -p dbname < dbname-tablename_output_utf8.dump`


DBをひらいて確認して文字化けしてない＆PHP等で出力して文字化けしてなかったらOK！



＋α
環境の文字コードも確認
参考：文字コードの設定(default-character-set) - オプションファイル(my.ini/my.cnf) - MySQLの使い方 
http://www.dbonline.jp/mysql/myini/index3.html



※参考
あなたと私のインナースペース - MySQLの文字コードをEUC-JPからUTF-8に変換する。
http://voicetwo.selfip.com/yashikiba/blog/item_112.html
Groovy on Androidのサンプルを動かす


Groovy 2.4でのAndroidサポートがいきなり発表されたので､とりあえずサンプルを動かしてみる｡
スライドはこちら｡

https://speakerdeck.com/melix/groovy-on-android

サンプルはこちら｡

https://github.com/melix/gr8confagenda

Groovy 2.4はSNAPSHOTなのでローカルでビルドしてMavenリポジトリにインストールする｡

```sh
git clone https://github.com/groovy/groovy-core.git
cd groovy-core/
./gradlew -PskipIndy=true install
```

それなりにかかるので待つ｡

インストールし終わったらgr8confagendaをcloneしてきて普通にAndroid Studioで取り込んで動かす｡

最高っぽい！
CreateJSで星をくるくる動かす

##星をくるくる動かす

[サンプル](http://jsdo.it/matsui_q/bxtK)

#星型を描く

```js
//書き方
//Graphicsオブジェクト.drawPolyStar(x座標, y座標, 山の半径, 頂点数, 谷の深さ, 書き始めの角度);
myGraphics.drawPolyStar(0, 0, 40, 5, 0.6, -90);
```

#色

```js
Graphics.getRGB(r, g, b, alpha);
Graphics.getRGB(color, alpha);
```

##ランダムに色をつけてみる

```js
var randomNumber = Math.floor(Math.random() * 0xFFFFFF);
var randomColor = createjs.Graphics.getRGB(randomNumber);
myGraphics.beginFill(randomColor);
```

#アニメーション
Tickerクラスを使う。

## アニメーションの処理を関数にする

```js
function rotate() {
	myShape.rotation += 5;
	stage.update();
}
```

## イベントにリスナーを加える

```js
//書き方
//Ticker.addEventListener(type, rotate);
createjs.Ticker.addEventListener("tick", rotate);
```

## FPSを返す

```js
//書き方
//Ticker.setFPS();
createjs.Ticker.setFPS(30);
```

| メソッド | 概要 |
|:-----------|:------------|
| Ticker.setFPS()      |  FPSを設定する |
| Ticker.setInterval(interval)    |  イベント間隔ミリ秒数設定する |
| Ticker.getFPS()      |  設定されたFPSを返す |
| Ticker.getInterval()      |  設定されたイベント間隔ミリ秒数返す |
SwiftでDelegateパターン

初Qiitaなんでフォーマットとか崩してたらすいません

#Swiftでのdelegateパターン

宣言

```
@objc protocol delegateName {    
    optional func delegateMethodName(name1: Int) -> Int
}
```

呼び出し元

```
let hoge = delegate?.delegateMethodName?(0)
```

呼び出される側

```
func delegateMethodName(name1: Int) -> Int{    
    return 0
}
```
WebRubyでキャンバスに描画する

# はじめに

昨日[シダを生やした](http://jsdo.it/kjunichi/mki6)際に覚えた事を忘れないようにメモ。

# Canvasに図形を描画する準備

```html
<div id="container"></div>
```

```rb
window = MrubyJs.get_root_object
container = window.call('$', '#container')
container.call("append", "<canvas id=\"cs\"></canvas>")
cs = window.call("$","#cs")
ctx = cs[0].call("getContext","2d")
```

# 図形の描画

あとは通常のHTML5と同様にCanvasに図形を描画できる

```rb
ctx.fillStyle='rgb(0, 255, 0)'
ctx.fillRect(0, 0, 256, 512)
```

# Link

- [xxuejie/webruby](https://github.com/xxuejie/webruby)
- [「プログラムでシダを描画する」一覧](http://qiita.com/qt-luigi/items/b22204c7ef73260324bd)
groovyでAndroidアプリを開発

groovyでAndroidアプリが書けるようになったらしいので早速触ってみた。

# 環境

* Android Studio 0.5.9
* Android SDK Tools 22.6.3
* Android SDK Platform-tools 19.0.2
* Android SDK Build-tools 19.1
* groovy-2.4.0-SNAPSHOT-grooid
* gradle 1.11
* gradle plugin 0.9.+

# ビルド

参考のリポジトリにはjcenter()からgroovy-2.4.0-SNAPSHOT-grooid.jarを取得していますが、not foundになっていました。

http://jcenter.bintray.com/org/codehaus/groovy/groovy-json/2.4.0-SNAPSHOT/groovy-json-2.4.0-SNAPSHOT.jar
http://jcenter.bintray.com/org/codehaus/groovy/groovy/2.4.0-SNAPSHOT/groovy-2.4.0-SNAPSHOT-grooid.jar

groovy-coreのコードをGitHubから取得してビルドします。

```
$ git clone https://github.com/groovy/groovy-core
$ cd groovy-core
$ ./gradlew clean dist

...

$ ls ./target/libs/
groovy-2.4.0-SNAPSHOT-grooid.jar        groovy-all-2.4.0-SNAPSHOT-indy.jar
groovy-2.4.0-SNAPSHOT-indy.jar          groovy-all-2.4.0-SNAPSHOT.jar
groovy-2.4.0-SNAPSHOT.jar
```

`./target/libs`以下にjarが生成されます。
`groovy-2.4.0-SNAPSHOT-grooid.jar`を`libs`に入れ`build.gradle`に*.groovyをコンパイルするtaskを追記してAndroidプロジェクトをビルドします。

```groovy
android.applicationVariants.all {
    task "groovy${name}Compile"(type: GroovyCompile) {
        source = javaCompile.source + fileTree('src/main/java').include('**/*.groovy')
        destinationDir = javaCompile.destinationDir
        classpath = javaCompile.classpath
        groovyClasspath = classpath
        sourceCompatibility = '1.6'
        targetCompatibility = '1.6'
        doFirst {
            def runtimeJars = plugins.findPlugin(com.android.build.gradle.AppPlugin).runtimeJars
            classpath = files(runtimeJars) + classpath
        }
    }
    javaCompile.dependsOn("groovy${name}Compile")
    javaCompile.enabled = false
}
```

ちなみにgradle 1.11で gradle plugin 0.9.+でないとAndroidアプリのビルドが通りませんでした。

# サンプルコード

https://github.com/epy0n0ff/groovy-android-sample

# おまけ

Javaとgroovyで書いてdebug buildしたアプリをbaksmaliにかけてsmaliにしたものです。
https://gist.github.com/epy0n0ff/ea658a4b2b879784428d

# 参考
https://github.com/melix/gr8confagenda
https://speakerdeck.com/melix/groovy-on-android
Swiftに関するメモ その3 - プロパティの監視・メソッドなど


* [
Swiftに関するメモ - 一覧](http://qiita.com/takkyun/items/f34abf857deed808c610)

https://developer.apple.com/swift/ より

[The Swift Programming Language (iBooks Store)](https://itunes.apple.com/us/book/the-swift-programming-language/id881256329?mt=11)をざっくり目を通してつらつらと。

# プロパティの監視 (`willSet` と `didSet`)

Objective-C でいうところの KVO (Key-Value-Observing) のような位置づけになるんでしょうか、プロパティに対して、`willSet` と `didSet` というオブザーバーを設定することができます。

```swift
struct SomeClass {
  var value: Int {
  willSet {
    // value がセットする前に呼ばれる
  }
  didSet {
    // value がセットされた直後に呼ばれる
  }
  }
}
```

# メソッド
## インスタンスメソッド

基本形：

```swift
class SomeClass {
  func doSomething() {
    // なんかする
  }
}
```

`class` や `struct` の中で宣言された `func`。呼び出しはインスタンスに `.` を付けて。

インスタンスメソッドの中で `self` はインスタンス自身を指します。Objective-C の `self`、JavaScript での `this` と一緒。

```swift
class SomeClass {
  var value = 0
  func doSomething() {
    self.value // value プロパティにアクセス
    // なんかする
  }
}
```

この例だと `self.value` としていますが、`self` を省略して `value` とだけ書いても (ローカルに同一な変数名などがなければ) 同じ意味になります。

ただ、コードの読みやすさを考えると、インスタンスのプロパティやメソッドにアクセスする場合には都度 `self` を付けたほうがよいと思います。

## 値渡し型のインスタンスに対する `mutating` メソッド

`struct` や `enum` などは値渡し型のオブジェクトで、通常インスタンスメソッドでインスタンスのプロパティを変更することはできません。

メソッド内でインスタンスプロパティを変更する際には、そのメソッドを `mutating` として宣言する必要があります。

```swift
struct SomeStructure {
  var value = 0
  mutating func doSomething() {
    self.value = .... // value プロパティを変えるので、mutating が必要
  }
}
```

## タイプメソッド - クラスメソッド / 静的メソッド

プロパティにタイププロパティがあるようにメソッドにもタイプメソッドがあります。

```swift
class SomeClass {
  class func doSomething() {
    // なんかする
  }
}
struct SomeStructure {
  static func doSomething() {
    // なんかする
  }
}
```

## 添字アクセス (Subscripts)

サブスクリプト (subscript) は配列などであるような `some[0]` という `[]` の添字でアクセスできるようにした仕組みです。これによってあたかも配列やディクショナリのように動作するオブジェクトを作ることができます。

```swift
class ArrayishClass {
  subscript(index: Int) {
    get {
      // arrayish[i] で呼ばれる
      return ....
    }
    set(newValue) {
      // arrayish[i] = newValue で呼ばれる
    }
  }
}
```

`get` と `set` を省略して read-only にできるのはプロパティの作法と一緒。

```swift
class ArrayishClass {
  subscript(index: Int) {
    // arrayish[i] で呼ばれる
  }
}
```
Swift で UICollectionView + AFNetworking Image あと感想

Swiftで遊んだのでqiitaに残しておきます。
たくさん遊んだ跡なので、なにか恥ずかしいものを発見しても気にしないでください…

https://github.com/kaiinui/Swift-UICollectionView-AFNetworking

含有物
-

- UICollectionView
- AFNetworking
- DAPagesContainer
- JSONKit 

![](https://raw.githubusercontent.com/kaiinui/Swift-UICollectionView-AFNetworking/master/namekoR.gif)

https://github.com/kaiinui/Swift-UICollectionView-AFNetworking

#感想

Swiftはとても素直で使いやすいです。
RubyやJSとか好きだけどObjective-Cは文法がキモい、というWebな人（自分）にはすごく入りやすいと思いました。
なにしろ型宣言をせずとも変数を使えるし、allocとか書かずにnewをすることも出来ます。@も書かなくて良し、[]たくさん書かなくていい。（個人的には@が一番嫌いだった）

気になるのは互換性だと思うので、一応書いておきます。

iOS
-

まず、SwiftはiOS7開発出来ます。
iOS8専用の新言語じゃありません。

Objective-Cとの互換性
-

Objective-Cのオブジェクトは全てSwiftから使えます。（もちろんCocoaPodsも！）
AppName-Bridging-Header.h というヘッダーファイルを作り、ここにヘッダーをインクルードしていくだけで、全 .swiftから見えるようになります。(要ビルド設定)
Objective-Cオブジェクトは、何らかのブリッジを用意するなど余分なことは一切なしで、そのままSwiftから呼ぶことが出来ます。
インターフェースは一切変わらず同じです。initの仕方だけ少し違います。

平たく言えばObjective-Cでやっていたのと同じように呼べます。

Swiftの影響と、移行の状況について。
-

Swift自体は、いままでと根本は一切変わっておらず、構文が変わっただけであると感じました。（JS=>Coffeeみたいな）
Objective-CとSwiftの互換性は半端ないです。Apple本気過ぎます。

その構文も、Objective-Cっぽさを極端に削ぎ取った、現代仕様。
先ほども書いた通り、Webの人はもの凄くiOS開発に入りやすくなったと思います。
Web言語慣れてる人なら、見慣れた感じの構文になりました。
見慣れた風の構文で書ける/読めることは重要です。

今後は、Swiftにどんどん移行していくかな、と思いました。
互換性が高いレベルで保たれているため、移行は非常にスムーズです。

Objective-Cの資産が多い事業会社は難しいでしょうが、Objective-Cのサポートがどんどん薄くなるのは明白なので、年のスパンでは移行すると思います。

個人レベルでは、今すぐ移行する価値はあるように感じました。

問題があるならば、サードパーティのドキュメントとチュートリアルがまだ充実しておらず、コピペで使えるコードがありません。
適宜Objective-CのコードをSwiftに読み替える必要があります（違うのは書き方だけなので、書き方さえSwiftにしてあげれば動く）
見方を変えれば、書き方を変えるだけで動くコードが沢山あります。新言語特有の、リファレンスが全然ない><といったことはありません。

まあ、ドキュメント/リファレンス/チュートリアルが普及するのは、3ヶ月くらいが目処かなぁと思います。
他ならぬiOS（そしてApple手動）の言語変更なので、動きは速いかと。

つらつらと書きましたが、そんな感じです。
RubyでもSTAP細胞を探したい

シダに乗り遅れたのでとりあえずRubyで
かぶってませんように
回数数えてないとレギュレーション違反かもしれないのでカウンタ追加した

```discovery.rb
atoz = ("A".."Z").to_a

counter = 0
loop do
  cell = ""
  4.times { cell += atoz.sample }
  counter += 1
  print cell+"細胞"
  if cell == "STAP"
    puts "#{counter}回目で陽性かくにん！"
    puts "よかった☆"
    break
  end
end

```
slack で join/left のメッセージを消す

最近 IRC 代替としての [Slack](https://slack.com/) 熱が高まってるので。

Slack は極めて優秀なチャットツールだが残念ながら現時点では join/left のメッセージを非表示にするオプションがない。しかし構造上ユーザが join/left した場合そのメッセージにそれぞれ join/left クラスが割り当てられることに着目してその部分だけ消すことが出来る。

ここでは [Google Chrome](http://chrome.google.com) のウェブストアで配布されている機能拡張 [Stylebot](http://stylebot.me/) を使う。Stylebot のオプションから ``Styles`` > ``Add a new style`` で以下の CSS を貼り付ける。

```css
.joined, .left {
  display: none;
}
```

URL を ``*.slack.com`` に設定して適用すれば join/left のメッセージが表示されなくなり、快適に表示できるようになる。

ちなみに [Firefox](http://www.mozilla.org/firefox/) の場合は拡張機能である [Stylish](https://addons.mozilla.org/firefox/addon/stylish/) を使い、「新しいスタイルを書く」 > 「slack.com 専用...」を選択し、以下の CSS を書いて適用すると同じように非表示に出来る。

```css
@namespace url(http://www.w3.org/1999/xhtml);

@-moz-document domain("slack.com") {

.joined, .left {
  display: none;
}

}
```
ググってすぐに出てきそうな bash cheat sheet に載ってないけど使うと便利そうだと思ったもの

bash のデフォルトのショートカットキーを憶えようと，「bash チートシート」とかでググって出てきたもの（[これ](http://d.hatena.ne.jp/chipa34/20090302/1235976120) みたいな感じの内容のもの）を自然に使う習慣が付くように，しばらく使ってみていたのですが，物足りなさを感じてきたのもあって，少し調べてみた。

基本的なカスタマイズしないでデフォルトで設定されているものだけを使う方針ですので、emacs mode での話です。
なので、Emacsen の中では当たり前のことなんですかね？？

# character-search

`<C-]>` : 前方のマッチした文字まで移動
`<M-C-]>` : 後方のマッチした文字まで移動

vim のノーマルモードの `f` みたいな感じですね。
これが知りたくて調べ始めました。

# forward/backward word

`<M-f>` : 単語単位で前方に移動
`<M-b>` : 単語単位で後方に移動

# undo

`<C-x><C-u>` : 元に戻す

redo が見つからなかったんですが、設定いじらないと無い感じですかね？

# macro

`<C-x>(` : マクロ記録開始
`<C-x>)` : マクロ記録終了
`<C-x>e` : マクロ実行

マクロ実行しようとして、`<C-x><C-e>` してしまって、$EDITOR が emacs になってて、いきなり意図せず emacs が立ち上がってビビった

# marking

`<C-@>` : マークをセットする
`<C-x><C-x>` : `<C-@>` でセットしたマークとカーソルの位置を入れ替える

# キーバインドを確認したいとき

``` sh
bind -p
```
Swift でシングルトン

__Swift 1.2 からは[もっと簡単に](http://qiita.com/1024jp/items/4ae93e5e2b3972d679af)書けるようになりました。__ (2015-04-17)



`dispatch_once` を使ったシングルトンクラスを Swift に移植する。
`static` の初期化は `dispatch_once` を勝手にやってくれるようです。
コードが短い、ステキー。

```swift
class var sharedController : FooController
{
    struct Singleton {
        static let instance = FooController()
    }
    return Singleton.instance
}
```

相当する Objective-C のコード。

```objc
+ (FooController *)sharedController
{
    static dispatch_once_t token;
    static FooController *instance = nil;
    
    dispatch_once(&token, ^{
        instance = [[FooController alloc] init];
    });
    
    return instance;
}
```

-
__追記__: @takabosoft さん @hetima さんのツッコミを受けて、Swiftのシングルトンコードを簡略化しました。`dispatch_once`はわざわざ書く必要ないようです。

-- 
- cf. [dispatch_once singleton model in swift -Stack Overflow](http://stackoverflow.com/questions/24024549/dispatch-once-singleton-model-in-swift)
vagrant上に配置したCakeプロジェクトをローカルから開発するための設定

Cakeのプロジェクトを/vagrant直下に配置してホストのPHPStromから操作しようとすると
tmpディレクトリのパーミッションを777にしろと警告が出るため下記の用に設定をする必要がある。
ゲスト側で共有フォルダのパーミッションを変更しようとしても出来ない。

```Vagrantfile:Vagrantfile
config.vm.synced_folder ".", "/vagrant/cakephp/app/tmp/",
mount_options:['dmode=777', 'fmode=777']
```
synced_folderは共有フォルダに対する設定で、
一つ目の引数:ホスト側のディレクトリ
一つ目の引数:ゲスト側のディレクトリ
mount_options:['dmode=777', 'fmode=777']のdmodeというのがディレクトリに対するパーミッション
fmodeがファイルに対するパーミッションの指定
シェルスクリプトのfor文

varがループ変数
inの後ろに${配列[@]}とするとdo～doneの中でvarを呼び出すとループ内の一時変数の値が参照できる。

```shell-session
#!/bin/bash

array=("oda" "toyotomi" "tokugawa")

for var in ${array[@]}
do
  echo $var
done
```
実行するSQLのクエリーをlaravel.log以外に吐いてみた

laravel.logに出すことなく別のLogに実行するSQLのクエリー出すという感じです。


# やったこと

## Illuminate/LogSqlの作成

まずはIllminate/Logをフォルダごとコピーして、LogSqlと名称を変更。

その後、LogSqlの中にあるLogServiceProvider.phpをLogSqlServiceProvider.phpに改名。
改名後、中身を以下のように変更。

    <?php namespace Illuminate\LogSql;

    use Monolog\Logger;
    use Illuminate\Support\ServiceProvider;

    class LogSqlServiceProvider extends ServiceProvider {

      /**
       * Indicates if loading of the provider is deferred.
       *
       * @var bool
       */
      protected $defer = true;

      /**
       * Register the service provider.
       *
       * @return void
       */
      public function register()
      {
        $logger = new Writer(
          new Logger($this->app['env']), $this->app['events']
        );

        $this->app->instance('logsql', $logger);

        // If the setup Closure has been bound in the container, we will resolve it
        // and pass in the logger instance. This allows this to defer all of the
        // logger class setup until the last possible second, improving speed.
        if (isset($this->app['logsql.setup']))
        {
          call_user_func($this->app['logsql.setup'], $logger);
        }
      }

      /**
       * Get the services provided by the provider.
       *
       * @return array
       */
      public function provides()
      {
        return array('logsql');
      }
    }


次にWriter.phpのnamespaceも変更ー。

    <?php namespace Illuminate\LogSql;


## app/config/app.phpの変更
providersとaliasesを変更します


    'providers' => array(
        'Illuminate\LogSql\LogSqlServiceProvider',
    // 省略
    'aliases' => array(
        'LogSql'            => 'Illuminate\Support\Facades\LogSql',
    // 省略

## Facadeの作成

続いて、Illuminate/Support/Facades/Log.phpをコピーしてIlluminate/Support/Facades/LogSql.phpを作成して中身を変更します。

    <?php namespace Illuminate\Support\Facades;

    /**
     * @see \Illuminate\LogSql\Writer
     */
    class LogSql extends Facade {

      /** 
       * Get the registered name of the component.
       *
       * @return string
       */
      protected static function getFacadeAccessor() { return     'logsql'; }

    }

あとは、app/start/global.phpでSQLのイベントをキャッチする仕組みとuseFilesを書けば終わりです。


    LogSql::useFiles(storage_path().'/logs/laravel_sql.log');

    Event::listen('illuminate.query', function($query, $bindings, $time, $name)
    {
        $data = compact('bindings', 'time', 'name');
        foreach ($bindings as $i => $binding)
        {
            if($binding instanceof \DateTime)
            {
                $bindings[$i] = $binding->format('\'Y-m-d H:i:s\'');
            }elseif(is_string($binding)){
                $bindings[$i] = "'$binding'";
            }
        }
        $query = str_replace(array('%', '?'), array('%%', '%s'), $query);
        $query = vsprintf($query, $bindings);
        LogSql::info($query, $data);
    });

もしエラーが出るという方はphp artisan clear-compiledしてみてください。
ファイル新規作成時にテンプレートの値を挿入する。

#概要
vimからファイルを新規作成する際に、拡張子によってその新規作成されるファイルの中身をテンプレートから自動で読みこむようにする。
サンプルとしてHTMLファイル。

#テンプレートファイルの準備
$HOME/.vim/template/html.txtを作成する。
ディレクトリがなければ作成する。

```html:$HOME/.vim/template/html.txt
<!DOCTYPE html>
<html>
<head>
<meta name="robots" content="noindex,nofollow" />
<meta charset="UTF-8">
<title>This is Template</title>

<!--** jQuery **-->
<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.11.1.min.js"></script>

<!--** Bootstrap **-->
<!-- Latest compiled and minified JavaScript -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
<!-- Optional theme -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css">

<!--** other CSS **-->
<!--<link rel="stylesheet" type="text/css" href="example.css">-->
<style type="text/css">
</style>

<!--** other JavaScript **-->
<!--<script type="text/javascript" src="example.js"></script>-->
<script type="text/javascript">
$(document).ready(function(){
    // Initial Code
});
</script>
</head>
<body>
<p>Hello World!</p>
</body>
</html>
```
# ファイル作成時に拡張子がhtmlならテンプレートを読みこむようにする。
.vimrcに下記の1行を追記する。

```vim:$HOME/.vimrc
autocmd BufNewFile *.html 0r $HOME/.vim/template/html.txt
```

これでvimからhtmlファイルを作成すると、今回用意したテンプレートの内容が自動的に挿入されるようになる。
JavaScript自分メモ

#jQueryで、特定の属性の特定の値を持つ値の取得。

```html
<!DOCTYPE html>
<html>
<head>
<meta name="robots" content="noindex,nofollow" />
<meta charset="UTF-8">
<title>This is Template</title>
<!--<link rel="stylesheet" type="text/css" href="example.css">-->
<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.11.1.min.js"></script>

<script type="text/javascript">
$(document).ready(function(){
    // クラスの場合は下記の両方OK
    // 結果は"2-Text"
    console.log($('.myclass [hoge=2]').html());
    console.log($('ul.myclass [hoge=2]').html());

    // IDの場合はこう
    // 結果は"3-Text"
    console.log($('#yourclass [hoge=3]').html());
});
</script>

<style type="text/css">
</style>
</head>
<body>
<ul class="myclass">
    <li><a hoge="1" href="Javascript:void(0)">1-Text</a></li>
    <li><a hoge="2" href="Javascript:void(0)">2-Text</a></li>
    <li><a hoge="3" href="Javascript:void(0)">3-Text</a></li>
</ul>
<ul id="yourclass">
    <li><a hoge="1" href="Javascript:void(0)">1-Text</a></li>
    <li><a hoge="2" href="Javascript:void(0)">2-Text</a></li>
    <li><a hoge="3" href="Javascript:void(0)">3-Text</a></li>
</ul>

</body>
</html>
```
Conoha で Vagrant up できない問題の解決策

Install
=======
最新の vagrant を入れる
----
```shell-session
wget https://dl.bintray.com/mitchellh/vagrant/vagrant_1.6.3_x86_64.deb
sudo dpkg -i vagrant_1.6.3_x86_64.deb
apt-get install virtualbox
```

vagrant box を入れて初期化 (Ubuntu 14.04)
----------------------------------
```shell-session
vagrant box add trusty64 https://cloud-images.ubuntu.com/vagrant/trusty/current/trusty-server-cloudimg-amd64-vagrant-disk1.box

mkdir Vagrant
vagrant init trusty64
```

vagrant up
-----------
ここで失敗

```shell-session
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Clearing any previously set forwarded ports...
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 22 => 2222 (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
The guest machine entered an invalid state while waiting for it
to boot. Valid states are 'starting, running'. The machine is in the
'poweroff' state. Please verify everything is configured
properly and try again.

If the provider you're using has a GUI that comes with it,
it is often helpful to open that and watch the machine, since the
GUI often has more helpful error messages than Vagrant can retrieve.
For example, if you're using VirtualBox, run `vagrant up` while the
VirtualBox GUI is open.
```

解決策
=====
原因究明方法
----------
1. ssh -X で conoha の vps にログインして、X を飛ばせるようにする
2. virtualbox で GUI 立ち上げ
3. GUI から Start ボタンを押して起動を試す。 たぶんここでこけてる。

原因
----
VT-X がないから失敗していた。
GUI から Setting --> System --> Acceleration --> Enable VT-X のチェックを外す

参考：
http://d.hatena.ne.jp/kitokitoki/20140511/p1
世界で戦うプログラミング~5-5,5-6

```py3:bit.py

class Bitutils():
    def bitSwapRequired(self,a,b):
        count = 0
        c = a ^ b
        while c != 0:
            if c and 1 != 0:
                count += 1
            c >>= 1
        return count
    
    def swapOddEvenBits(self,x):
        even =  (x & 0b10101010 >> 1)
        odd = (x & 0b01010101 << 1)
        return even or odd
```

偶数ビットと奇数ビットを入れ替える関数こんな簡単にできるんすね
ifameのload eventが複数回発生する


説明がむずかしいのですが、以下のようなコードがあったとします。

```javascript
$(document).ready(function () {
	$("#MyIframe").load(function () {
		alert("ifram loaded!!");
	});

	$("foo").bind("click", function () {
		$("#MyIframe").attr("src", "http://example.com");
	});
});
```

1回目のクリックはアラート表示は1回だけですが、2回目のクリックは2回、n回目のクリックはn回アラート表示が表示されます。

とりあえず以下のように変更しましたが、これが原因だよ、とか、こうしたらいいよ、というのがあれば教えてくださいませ。

```javascript
$(document).ready(function () {
	var isLoaded = false;
	$("#MyIframe").load(function () {
		if (isLoaded) {return false}
		alert("ifram loaded!!");
		isLoaded = true;
	});

	$("foo").bind("click", function () {
		$("#MyIframe").attr("src", "http://example.com");
	});
});
```
今日からはじめるGoogleAnalytics（ビューの追加、フィルタの設定）

#1. GoogleAnalyticsの話

###あなたのサイトに眠っているGoogleAnalyticsはいませんか？

**パターン1**
ディレクター：「サイトの数値とりたいからGoogleAnalyticsいれてくれない？」
エンジニア：「とりあえずanalytics.js読み込んどきゃいいんでしょ？」
ディレクター：「いれてくれたのはいいものの見にくすぎでしょ…」

**パターン2**
自称ノマド：「今日からblog頑張って書いちゃうぞ！とりあえずGoogleAnalyticsってのいれときゃいいらしいわ」
自称ノマド：「何か今日アクセス多いけどこれどうやってみるんだ…」


**GoogleAnalyticsを入れたのはいいものの、、、**

こんな放置されがちなGoogleAnalyticsさんを使いだすために
<b>はじめに設定しておくべき2つのポイント</b>を紹介します。
（気が向けばもっと紹介します笑）

#2. まずはじめにすること

##データをいじる用のビューを設定する
###なぜビューを追加するの？
GoogleAnalyticsには様々な機能が存在するのですが、
無闇に初期設定の「すべてのウェブサイトのデータ」や「すべてのモバイルアプリのデータ」をいじってしまうと、
元データが何かわからなくなってしまう恐れがあります。
特に後で説明する<b>「フィルタ」</b>かけると、<b>元データに一貫性がなくなる</b>ので、注意が必要です。

###ビューの作りかた
まず<b>「アナリティクス設定」</b>へ移ります。
![スクリーンショット_2014-06-04_22_06_43.png](https://qiita-image-store.s3.amazonaws.com/0/41622/4bf667d3-87eb-4412-9e1c-dfc06ace1ed9.png)

そこで一番右のタブを開き、<b>「新しいビューを作成」</b>をしてあげます。
![スクリーンショット_2014-06-04_22_29_57.png](https://qiita-image-store.s3.amazonaws.com/0/41622/c8f1f560-1532-4b7f-9e55-d445deaa0380.png)

ここでWebサイトの場合は「すべてのウェブサイトのデータ」、
アプリの場合は「すべてのモバイルアプリのデータ」を選択し、
ビューを新たに作成します。
![スクリーンショット 2014-06-04 22.26.52.png](https://qiita-image-store.s3.amazonaws.com/0/41622/146c7262-88ab-e863-5d69-09936cb772eb.png)

これで完成です。
ヘッダーからホームに戻ってあげると、
新しいビューが追加されたのがわかるかと思います。
![スクリーンショット_2014-06-04_22_27_05.png](https://qiita-image-store.s3.amazonaws.com/0/41622/37580a42-55f5-83e2-8b70-e2acd6e62864.png)

これからはこの成型用データを元に話を進めます。


##自分のアクセスをカウントしなくする
###フィルタって？
開発中の自分のアクセスまでカウントしてしまって、
データに信憑性がなくなっちゃうことありますよね。

![スクリーンショット_2014-06-04_22_45_42.png](https://qiita-image-store.s3.amazonaws.com/0/41622/1eb2858d-9741-e6b5-ad96-ea7d9bdc8641.png)


それを防ぐための<b>「フィルタ」</b>というものがGoogleAnalyticsにはあります。

###フィルタの設定方法
まず<b>「アナリティクス設定」</b>へ移ります。
![スクリーンショット_2014-06-04_22_06_43.png](https://qiita-image-store.s3.amazonaws.com/0/41622/4bf667d3-87eb-4412-9e1c-dfc06ace1ed9.png)


その中の<b>「すべてのフィルタ」</b>をクリック。
![スクリーンショット_2014-06-04_22_07_33.png](https://qiita-image-store.s3.amazonaws.com/0/41622/938980ce-9bf5-7f88-b441-68706b3fb999.png)

フィルタ名はお好みで設定してください。
<b>「既定のフィルタ」</b>を選び、
<b>「除外」</b>、<b>「IPアドレスからのトラフィック」</b>、<b>「等しい」</b>を選びます。
そして下のサイトで自分のIPを調べ、入力します。
（参考：http://www.cman.jp/network/support/go_access.cgi）
あとは使用可能なビューが提示されるので、
先ほど追加した<b>「成型用データ」</b>を選択してあげるだけです。

![スクリーンショット 2014-06-04 22.36.51.png](https://qiita-image-store.s3.amazonaws.com/0/41622/d86e76a0-8bf2-6c95-0ef0-b2948b189890.png)


<b>同一ネットワークの様々な機種からアクセスや、会社からのアクセスを除く場合には、
IPの4つ目のブロックに「*」（ワイルドカード）を入れてあげ、
前方一致にしてあげるとうまく除くことができます。</b>

#3. ぐろーすはっかーへの道のりはここからはじまる…！
これで一通り設定はできました。
ここからデータを煮るのも焼くのもあなた次第です。

個人的にAnalyticsってすごく使われづらい作りだと思うんですよね。
<b>仕込むのはエンジニアなのに、数値見るのは主にディレクターなので。</b>
エンジニアは仕込んだのに見ないし、ディレクターはイベント仕込みたいのにわざわざエンジニアに頼むのもなあ…みたいになっちゃって。

だからこれを見てくれた人すべてが、Analyticsなら俺にまかせろ！ってなってくれることを願って、この記事を締めたいと思います！

（気が向けば）つづく…
Node.jsでSequelizeを利用するときに不要ログを出さない設定


Node.jsでMySQL利用モジュールSequelizeを利用したときの話です。

* 公式サイト:[Sequelize](http://sequelizejs.com/)

##Sequelizeはデフォルト設定で表示されるログが尋常じゃない
SequelizeはORMが使えてかなり便利です。しかし、デフォルトでログが尋常じゃなく吐き出されてデバッグがやりにくい面もあります。

![](http://i.gyazo.com/9b3ca6a8ada7de1e5083ebb0db213095.png)

`console.log('リストAPIが取得出来ませんでした');`ってところだけをみたいのに、前後でクエリ実行していると不要なログ(↑では伏せてるけど実行SQLが全部)がコンソールに出力されてしまいます。

##少し設定するだけ
基本的にMySQLに接続するときに必要な情報は以下のもの

* 接続するデータベース名
* 接続するDBのユーザー名
* 接続するDBのパスワード
* 接続ホスト名(or IPアドレス)
* 接続ポート番号 (デフォルトの3306なら省略可能かも)

####↑これに加えてloggingの項目を追加しましょう

`loggingをfalse`にすればOKです。
何も設定しないと上記の感じでログが表示されまくります。

```db.js
var sequelize = new Sequelize(
  database, //データベース名
  user, //ユーザー名
  password, //パスワード
  {
    host: host, //ホスト名
    port: port, //ポート番号
    logging: false // ← 追記
  }
);
```

###結果
![](http://i.gyazo.com/5d4bfe5f825acd2317eb79de71b9c2ac.png)
こんな感じで、スッキリ!

##質問
このhttpリクエスト系のログも非表示にする方法って無いですか??

参考: [sequelize document](http://sequelizejs.com/docs/latest/usage)
名前解決用のコンテナ

Docker 0.11 から、--link でコンテナを指定することで、指定したコンテナが /etc/hosts に追加されるようになったため、必要になる場面がほとんどなくなってしまいましたが、他の用途で名前解決が必要な場合のために unbound 用のコンテナを作成してみました

## unbound 用のコンテナの準備

### イメージの作成

```:unbound/Dockerfile
FROM ubuntu:14.04

RUN apt-get -y update
RUN apt-get -y install aptitude
RUN aptitude -y install unbound

CMD ["-d", "-c", "/conf/unbound.conf"]

ENTRYPOINT ["unbound"]

EXPOSE 53/udp
```

```
$ docker.io build --tag hexa/unbound unbound/
```

### unbound の設定ファイルの準備

/home/ubuntu/unbound/conf に設定ファイルを用意します

```
conf
├── unbound.conf
└── unbound.conf.d
    └── local-data.conf
```

```yaml:unbound.conf
server:
        interface: 0.0.0.0
        port: 53
        access-control: 127.0.0.1/32 allow
        access-control: 172.17.0.0/16 allow
        include: "/conf/unbound.conf.d/*.conf"

forward-zone:
        name: "."
        forward-addr: 192.168.0.1
```

```yaml:local-data.conf
local-data: "www1.example.com A 192.168.0.2"
local-data: "www2.example.com A 192.168.0.3"
```

### コンテナの作成

```
$ docker.io run -d -t -P -v /home/ubuntu/unbound/conf:/conf --name unbound hexa/unbound
```

## ambassador コンテナ

せっかくなので、UDP 用の Ambassador コンテナも用意してみます

### イメージの作成

[Cross-Host linking using Ambassador Containers - Docker Documentation](http://docs.docker.io/use/ambassador_pattern_linking/) を参考にして Dockerfile を用意します

```:ambassador/Dockerfile
FROM    ubuntu:14.04

RUN apt-get -y update
RUN apt-get -y install aptitude
RUN aptitude -y install socat

CMD env | grep _UDP= | sed 's/.*_PORT_\([0-9]*\)_UDP=udp:\/\/\(.*\):\(.*\)/socat UDP-LISTEN:\1,fork,reuseaddr UDP:\2:\3 \&/' | sh && top
```

```
$ docker.io build --tag hexa/ambassador ambassador/
```

### コンテナの作成

```
$ docker.io run -d -t --link unbound:unbound --name unbound_ambassador -p 53:53/udp hexa/ambassador
```


## アプリケーション用のコンテナ

使用する際には、docker.io run を実行する際に --dns を指定します

```
$ docker.io run -i -t --rm --dns=$( ip -4 -o addr show docker0 | awk '{ print $ 4 }' | cut -f1 -d'/' ) ubuntu:latest bash -c "apt-get -y install curl && curl -X GET http://www1.example.com"
```


## 参考
- [Cross-Host linking using Ambassador Containers - Docker Documentation](http://docs.docker.io/use/ambassador_pattern_linking/)
Node.jsでCSVを一行ずつ表示

```js:readline.js
var file, fs, readline, rl;

fs = require('fs');

readline = require('readline');


file = 'csvパス';

rl = readline.createInterface({
  input: fs.createReadStream(file),
  output: null,
  terminal: false
});

rl.on('line', function(line) {
  console.log('Got line: ' + line);
});

rl.on('close', function() {
  console.log('All data processed.');
});
```

```coffeescript:readline.coffee
fs = require('fs')
readline = require('readline')

file = 'cavパス'

rl = readline.createInterface(
    input: fs.createReadStream(file)
    output: null
    terminal: false
)
rl.on 'line', (line) ->
    console.log 'Got line: ' + line
    return

rl.on 'close', ->
    console.log 'All data processed.'
    return
```
Swift メソッドの書き方覚え書き

#メソッドの書き方

###引数なし　返り値なし

```lang:1
//呼び出し
methodOne()

//メソッド
func methodOne() {
    println("")
}
```


###引数２つ　返り値１つ
第二引数をいれるときは↓みたいに書く
ないとエラーになるので、参考書間違ってるぽい

```lang:2
//呼び出し
var a = doubleParam("なまえ", day:"日付")

//これだとダメだった
var a = doubleParam("なまえ", "日付")

//メソッド
func doubleParam(name: String, day: String) -> String {
    return "\(name)\(day)"
}
```

###引数なし　返り値３つ

```lang:3
//呼び出し 配列で返るよ
var arr = tripleReturn();

func tripleReturn() -> (Int, String, Bool) {
   　return (100, "String", true)
}
```

###引数複数

```lang:4
//呼び出し
var sum = sumOf(1,3,4,5,6);
println(sum)

func sumOf(numbers: Int...) -> Int {
     //numbersは配列
     var sum = 0
     for num in numbers {
         sum += num
     }
     return sum
}
```

###nest

```lang:5
//呼び出し
var nst = nest();
println(nst)

func nest() -> Int {
    func getOne() -> Int {
        return 1
    }
    return getOne()
}
```
Playgroundの作成と出力 xcode 6 Beta

Update 2014.06.09

##Playgroundファイルを作成

XCode 6 Betaから新規作成する
1.Fileメニュー -> New -> Project
Choose a templae for your new project:
iOSまたはOS XのOtherからEmptyを選択
**(他のプロジェクトからでも作成可能です)**
<!--![Empty.png](https://qiita-image-store.s3.amazonaws.com/0/15174/4250ebd4-d858-db4c-713d-f3f0512fb440.png)-->

2.Product Name:を入力
PGExampleとします

3.Fileメニュー -> New -> File
またはProject Navigatorの下にある+ボタンで新規ファイル作成
ファイル名:Test.playgroundとします
<!--![newFile.png](https://qiita-image-store.s3.amazonaws.com/0/15174/3d0087fc-f19a-46f6-2b6e-963bf4be24c6.png)-->

4.playgroundのファイルが作成できます
<!--![pgFile.png](https://qiita-image-store.s3.amazonaws.com/0/15174/70e0cc74-deb2-e416-50cf-0279ae5ae161.png)-->

##Playgroundファイルを出力
1.Fileメニュー -> Export
任意のフォルダにplaygroundファイルを出力できます
<!--![export.png](https://qiita-image-store.s3.amazonaws.com/0/15174/a14258fa-0f78-1f7a-6684-89cae16bcd3d.png)-->
Qiita Notification Favicon 機能拡張を作りました

Qiita および Qiita:Team の通知をタブ上の Favicon で確認できる Chrome 機能拡張を作りました。

[![ChromeWebStore_Badge_v2_206x58.png](https://qiita-image-store.s3.amazonaws.com/216/4629/e35919c5-e5ad-a3dd-d045-66b114fef525.png)](https://chrome.google.com/webstore/detail/qiita-notification-favico/jjigalpnibnljelckechpdgepplebgce)

リポジトリは[こちら](https://github.com/jmblog/qiita-notification-favicon)


![screenshot_640x400.png](https://qiita-image-store.s3.amazonaws.com/216/4629/1e852d34-63cd-7bb7-a71d-817ffb2b7d6d.png)

### 技術的な話

* background.js で qiita の notification API の通信を監視し、Request があれば Favicon を更新するようになっています。
    * Event Page にしたかったけど、`chrome.webRequest` が Event Page に対応していなかった。

* Favicon の更新には、[favico.js](http://lab.ejci.net/favico.js/) を使っています。

よかったら使ってみてください。
Python 3.4 って早くなったのかなと思ったけど遅くなってた

職場の Windows 7 に入れている Python を 3.4.0 にしたら高速化した気がしたのですが気のせいでした。実行時間のテストがいけてなかったらごめんなさい。

```pycon
C:\pyworks>C:\Python34\python.exe -m runtime_test
1401870117.465672
1401870127.773703
Runtime is 10.308

C:\pyworks>C:\Python33\python.exe -m runtime_test
1401870129.476873
1401870139.385864
Runtime is 9.909

C:\pyworks>py -m runtime_test
1401870167.25
1401870175.41
Runtime is 8.167
```

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

def main():
     import time
     time1 = time.time()
     print(time1)
     process()
     time2 = time.time()
     print(time2)
     time = float(time2 - time1)
     print("Runtime is {0:.3f}".format(time))

def process():
     for d in range(1000):
          x = sum(i for i in range(100000))

if __name__ == '__main__':
     main()
```
ベーシック認証の設定方法


#1. .htaccessを設置
①ベーシック認証をかけるディレクトリに移動
②.htacccessファイルに以下を記述して保存

```.htaccess
AuthUserFile .htpasswdを保存するパス/.htpasswd
AuthGroupFile /dev/null
AuthName "Input ID and Password."
AuthType Basic
require valid-user
<Files ~ "^.(htpasswd|htaccess)$">
deny from all
</Files>
```

#2. .htpasswdの設定

①パスワードの生成
http://www.luft.co.jp/cgi/htpasswd.php

にアクセス。IDとパスを入れて変換。

②.htpasswdの生成
.htaccessに記載されたパスの場所に移動
.htpasswdを以下の情報で保存

```.htpasswd
変換された情報を入力
（例）test:vTaTkRSK8Mo

```

完了。
簡単sshログイン方法


#1.keyの作成

ターミナルで以下のコマンドで生成。

```
$ cd ~/.ssh
$ssh-keygen -t rsa -C test@example.com
```

これで

```
id_rsa		:秘密鍵
id_rsa.pub	:公開鍵
```

がそれぞれ生成される。
id_rsa.pubの情報をサーバに渡す。

#2.configの設定

sshログインを簡単にするためにconfigの設定

```
$ vim ~/.ssh/config
```

でコンフィグファイルを生成。内容は以下。

```config
Host test　//接続するサーバの名前（なんでもいい）
   HostName 000.00.0.000 //ホスト名
   User test //ユーザ名
   IdentityFile ~/.ssh/id_rsa //id_rsaが保存されてる場所
   Port 00000 //ポート番号
```

これで設定完了。

sshログインしたいときは

```
$ ssh test
```

Hostの追加はconfigを追加すればOK。
これでらくらくsshログイン。
リモートサーバ上のDBをlocalhost(MAMP)に移行する


#1.リモートサーバでdbをdump!!

リモートサーバにアクセスしたら、ホームディレクトリで

```
［ユーザ名@ホスト名］mysqldump -u ユーザ名 -pパスワード DB名 > dump.sql
```
これで、ホームディレクトリにdump.sqlが生成されます。

#2.リモートからローカルに移動

scpコマンドを使います。

参考：
http://docs.oracle.com/cd/E37932_01/html/E36612/remotehowtoaccess-55154.html

```
scp ユーザ名@ホスト名:ファイル名 移動先のディレクトリ

(例)
scp root@host.jp:dump.sql /Application/ディレクトリ名/

```

詳しいscpコマンドについては[コチラの記事]をご覧ください。
[コチラの記事]:http://qiita.com/maximum80/items/26034cf51f1ed5ce5988

#3.PhpMyAdminでDBをインポート

これは楽勝。
###①phpmyadminでDBを作成
リモートサーバと同じ名前が良いです。

###②インポート
importをクリックしてDBをインポート。

![Screen Shot 2014-06-04 at 8.40.15 PM.png](https://qiita-image-store.s3.amazonaws.com/0/6702/debdfeba-9ad1-7054-cebd-37c8378cfefe.png "Screen Shot 2014-06-04 at 8.40.15 PM.png")

以下の画面で先ほどのdump.sqlを選択してGO！！
![Screen Shot 2014-06-04 at 8.43.23 PM.png](https://qiita-image-store.s3.amazonaws.com/0/6702/cb99799c-809b-e139-b9f1-9f22a401ff42.png "Screen Shot 2014-06-04 at 8.43.23 PM.png")


GOしたあとに、

```
Import has been successfully finished, 264 queries executed. (dump.sql)
```

が表示されたらおっけー！！


#4.db.phpの設定
これはFuel.phpの場合で書きますが、
要するにDBにアクセスするためのユーザ設定がローカル設定になっているかを確認しましょう。

```
$ vim fuel/app/config/development/db.php
```
でdbの設定ファイルを開いて

```db.php
return array(
        'default' => array(
                'connection'  => array(
                        'dsn'        => 'mysql:host=localhost;dbname=dmtc',
                        'username'   => 'root',
                        'password'   => 'root',
                ),
        ),
);
```

のユーザ名、パスワードが正しいか確認してね！
これで正常に動いてくれるはず！
Vagrant ssh-configでvagrant sshを快適にする


vagrant sshコマンドでvagrantにログインするときにレスポンスが悪くていらいらしちゃってる人は、この設定すると幸せになれるかもしれません。

# Vagrantfileを編集する

下記の行を追加する
hostの番号は任意。OSが使用中のポートと被らないポート番号を指定しましょう。

```Ruby:Vagrantfile
  config.vm.network "forwarded_port", guest: 22, host: 2210
```

そしてvagrant up

```Bash:terminal
vagrant up
```

# vagrant ssh-configする

Vagrantfileが存在するディレクトリで以下のコマンドを実行。
~/.ssh/configに設定を入れる
※[myHost]部は任意の名前を入れてください

```Bash:terminal
vagrant ssh-config --host [myHost] >> ~/.ssh/config
```

出力されたconfigの内容を確認

```Bash:config
Host myHost
  HostName 127.0.0.1
  User vagrant
  Port 2210
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile {private_key_path}
  IdentitiesOnly yes
  LogLevel FATAL
  ForwardAgent yes
```

※複数のvagrantに同様の設定をしたいときは、Vagrantfileに記載したhostのポート番号を変えればいくつでも設定可能です。

vagrantディレクトリから移動し、sshコマンドでvagrantにアクセス。

```Bash:terminal
cd # ホームディレクトリに移動
ssh myHost # sshコマンドでmyHostに接続
Last login: Wed Jun  4 10:42:46 2014 from 10.0.2.2
[vagrant@localhost ~]$
```

ログインの応答がとても早くストレス無くsshできますので、お試しくださいませ。
Vagrant+Chef Centos6.4 PHP5.3.3 → 5.3.28 バージョンアップ

# 背景

サービスが稼働しているAWS上のPHPバージョンとVagrantで構築している開発環境のPHPバージョンに差異があった。
本番環境の方がバージョンが進んでおり、本番環境では利用できる関数が開発環境では意図した動きをしなかったため、開発環境のPHPをアップデートすることにした。

# 環境
## AWS
Amazon Linux
PHP 5.3.28

## 開発環境
CentOS 6.4
PHP 5.3.3

# ゴール

Chef-soloを使い、vagrant upでPHP5.3.28がインストールされたCentOSが立ち上がるようにする

# 調査

CentOS6.4のyumリポジトリにあるPHPの最新版は5.3.3であり、そのままでは5.3.28をインストールすることができない。
epalやらremiやら探してみたが、どこも5.4だったり5.5だったりで目当てのPHP5.3.28を持っているリポジトリを見つけるのに手間取ってしまった。

色々探した結果、iusリポジトリにphp53uなるパッケージを発見したので、これを使ってレシピを書く事にした。

# recipe

```Ruby:Vagrantfile
  config.vm.provision :chef_solo do |chef|
    chef.cookbooks_path = "cookbooks/site-cookbooks"
    chef.add_recipe "php"
  
    # You may also specify custom JSON attributes:
    chef.json = { 
      php53u: {
        ius_rpm_url: 'http://dl.iuscommunity.org/pub/ius/stable/CentOS/6/x86_64/ius-release-1.0-11.ius.centos6.noarch.rpm',
        ius_rpm_filename: 'ius-release-1.0-11.ius.centos6.noarch.rpm'
      },
    }
```

```Ruby:recipe/default.rb
# php53u repository導入
remote_file "/tmp/#{node['php53u']['ius_rpm_filename']}" do
  source "#{node['php53u']['ius_rpm_url']}"
  not_if { ::File.exists?("/tmp/#{node['php53u']['ius_rpm_filename']}") }
end

package node['php53u']['ius_rpm_filename'] do
  action :install
  provider Chef::Provider::Package::Rpm
  source "/tmp/#{node['php53u']['ius_rpm_filename']}"
end

# phpインストール
%w{php53u php53u-cli php53u-common php53u-dba php53u-devel php53u-mbstring php53u-mysql php53u-pdo php53u-pear php53u-pecl-apc php53u-pecl-memcache php53u-xml php53u-xmlrpc pcre-devel}.each do |p|
  package p do
    action :install
    options "--enablerepo=ius"
  end
end

```

これでさっくり終わりかと思っていたところ、iusリポジトリにはサービス内で利用していたpecl_httpのパッケージが存在しないことが発覚。
どうしようか思案したが素直にpeclコマンドで入れる事にした。

```Ruby:recipe/default.rb
execute "install pecl_http" do
  command "pecl install pecl_http-1.7.6"
  action :run
end

# pecl_http設定
template "http.ini" do
  path "/etc/php.d/http.ini"
  source "http.ini.erb"
  mode 0644
  notifies :restart, 'service[httpd]'
end
```

```Ruby:templates/default/http.ini.erb
extension=http.so
```

当初はpeclコマンドでインストールされるpecl_http-2.0.4をインストールしてみたが、http.soがうまくロードされないようでエラーになったため、[こちら](http://d.hatena.ne.jp/hateka/20140118/1390060510)を参考にpecl_http-1.7.6を導入した。

```Bash:terminal
$ vagrant up                                                                                                                                                                                                                 [20:39:53]
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'centos64'...
==> default: Matching MAC address for NAT networking...

〜中略〜

[2014-06-04T11:57:10+00:00] INFO: Chef Run complete in 852.584544316 seconds
[2014-06-04T11:57:10+00:00] INFO: Running report handlers
[2014-06-04T11:57:10+00:00] INFO: Report handlers complete
```

うまく動いた。よかったよかった。
メモ　Androidで指定アプリの使用メモリ詳細をファイル出力するコマンド

■adb shell dumpsys meminfo アプリの正式名 > 出力先フルパス

　adb shell dumpsys meminfo jp.co.bbbbb.aaaaa  > c:\memory.txt




■アプリの正式名の一覧取得

　adb shell dumpsys meminfo > c:\memory.txt


■全プロセスのメモリ
adb shell dumpsys procstats


  * バンドルアイデンティファー(Bundle Identifer) / ******:
           TOTAL: 54% (105MB-247MB-266MB/103MB-233MB-250MB over 98)
             Top: 54% (105MB-247MB-266MB/103MB-233MB-250MB over 98)
      (Last Act): 0.55% (241MB-241MB-241MB/225MB-225MB-225MB over 1)
        (Cached): 0.11% (241MB-241MB-241MB/225MB-225MB-225MB over 1)



  * ｛プロセス名｝ / ｛プロセスUID｝:
  ｛ステータス名｝: ｛A｝% (｛B｝-｛C｝-｛D｝/｛E｝-｛F｝-｛G｝ over ｛H｝)
｛A｝：対象期間当たりの動作時間割合
｛B｝：物理メモリ消費量（PSS：Proportional Set Size）最小値
｛C｝：PSS平均値
｛D｝：PSS最大値
｛E｝：専有メモリ（USS：Unique Set Size）最小値
｛F｝：USS平均値
｛G｝：USS最大値
｛H｝：サンプリング数
メモ　クラス名・メソッド名・クラス内行数の表示

Eclipseに出力するとStackTraceの行数見えないのでDebug.Logに仕込んでおこう


クラス名　this.GetType().FullName
                                            
メソッド名　System.Reflection.MethodBase.GetCurrentMethod().Name

行数  new System.Diagnostics.StackFrame(0, True).GetFileLineNumber()


まとめるとこんな感じ、colorのところのスペースは省いてください

Debug.Log("< color=red>■クラス名：< /color>" + this.GetType().FullName + "< color=yellow>メソッド名：< /color>" + System.Reflection.MethodBase.GetCurrentMethod().Name + "< color=green>行数：< /color>" + new System.Diagnostics.StackFrame(0, true).GetFileLineNumber().ToString());
【Android】移動・回転・拡縮できるView



を作ってみました。

ソースコードは [git](https://github.com/satoshinew/GestureTransformableView) に上げています。
サンプルプロジェクトとライブラリプロジェクトに分かれています。
これでスタンプ機能みたいなのが簡単に作れます。

**ただし、Android4.0以上限定です、ごめんなさい。**

まだ ImageView しかありません。
機能コピペすれば他のViewでもそのまま使えそうなので、そのうちTextViewとかも追加するつもりです。
扱いは普通の ImageView と変わりません。

##対応ジェスチャ
以下3つのジェスチャーに対応しています。
1. ドラッグ([DragGestureDetector.java](https://github.com/satoshinew/GestureTransformableView/blob/master/GestureTransformableView/src/jp/ogwork/gesturetransformableview/gesture/DragGestureDetector.java))
2. 2本指回転([RotateGestureDetector.java](https://github.com/satoshinew/GestureTransformableView/blob/master/GestureTransformableView/src/jp/ogwork/gesturetransformableview/gesture/RotateGestureDetector.java))
3. ピンチイン・ピンチアウト([PinchGestureDetector.java](https://github.com/satoshinew/GestureTransformableView/blob/master/GestureTransformableView/src/jp/ogwork/gesturetransformableview/gesture/PinchGestureDetector.java))

Android既存のジェスチャ取得機構が全くもって役に立たないので、それぞれDetectorを自作しています。

##導入
1. [ライブラリプロジェクト](https://github.com/satoshinew/GestureTransformableView/tree/master/GestureTransformableView)をインポートするか
[gesturetransformableview.jar](https://github.com/satoshinew/GestureTransformableView/tree/master/GestureTransformableViewSample/libs)を直接libsに突っ込んで下さい。
2. GestureTransformableImageViewを使うだけ！

xmlで宣言する場合は

```xml
 <jp.ogwork.gesturetransformableview.view.GestureTransformableImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/画像の名前" >
```

直接書いちゃう人は

```java:ドラッグ・回転・拡縮全部有りはデフォルトでOK
 GestureTransformableImageView gestureImageView = new GestureTransformableImageView(context);

```


##その他機能

* **拡大縮小の制限**

デフォルトでMAX270% / MIN 50% で設定されていますが、
setLimitScaleMax() / setLimitScaleMin() で設定可能です。

* **対応ジェスチャを選ぶ**

```java:ドラッグと拡縮だけで良いよ、っていう人は
 GestureTransformableImageView gestureImageView = new GestureTransformableImageView(context,
                GestureTransformableImageView.GESTURE_DRAGGABLE |
                GestureTransformableImageView.GESTURE_SCALABLE );

```
デフォルトはドラッグ・回転・拡縮すべて有効ですが、部分指定も出来ます。
上に **GestureTransformableImageView.GESTURE_ROTATABLE** も同様にOR( | )で加えれば、回転にも対応になります。
後でSwiftをはじめようと思っている人の為のブックマーク

# Swift発表！？
WWDC 2014で新しいプログラミング言語「Swift」が発表されましたね。
SwiftとObj-Cのコードが共存できる点とか、Cocoaについてもフル機能使えるとか素敵ですね。

まだ触ってないのですが、情報をなめてみた感じとても素敵だと思ったので、後で触るためにブックマークを作っておくことにしました。

# Bookmark
## 公式ページ
Swift - Apple Developer
 [Swift Programming Language - Apple Developer](https://developer.apple.com/swift/)

Welcome to Swift
[Welcome to Swift](https://developer.apple.com/library/prerelease/ios/referencelibrary/GettingStarted/LandingPage/index.html)

Using Swift with Cocoa and Objective-C 
[Using Swift with Cocoa and Objective-C: Basic Setup](https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/BuildingCocoaApps/index.html#//apple_ref/doc/uid/TP40014216)

XCode 6 beta Download
[Xcode - Downloads - Apple Developer](https://developer.apple.com/xcode/downloads/)

iBook
[iTunes - ブック - Apple Inc.「The Swift Programming Language」](https://itunes.apple.com/jp/book/swift-programming-language/id881256329?mt=11)
iBook 第二弾！
[iTunes - ブック - Apple Inc.「Using Swift with Cocoa and Objective-C」](https://itunes.apple.com/jp/book/using-swift-cocoa-objective/id888894773?mt=11&ign-mpt=uo%3D4)

## その他
[[iOS] 新言語SwiftがObjective-Cよりも良いところ - Qiita](http://qiita.com/nori0620/items/cf956fea84e82ec2aee5)

[新しいプログラミング言語 Swift ｜ Developers.IO](http://dev.classmethod.jp/smartphone/swift/)

[Swiftは○○に似ている - Qiita](http://qiita.com/irxground/items/90c992836e0e6377adb1)

[Swift vs Scala 2.11](https://raw.githubusercontent.com/densh/talks/master/swift-vs-scala-211-2014-06-03/Swift%20vs%20Scala%202.11.pdf)

[アップルの新言語「Swift」--押さえておくべき10のポイント - ZDNet Japan](http://japan.zdnet.com/business-application/sp/35048823/)

有志の方が日本後ドキュメントを作成！と思ったら、ライセンス違反かもということで停止中。。。ぜひ再開して欲しいですね！
[Swift言語 | 日本語ドキュメント](http://swift-jp.com/top)

[Swiftの学習に役立つ情報をまとめたサイト](http://www.lifehacker.jp/sp/2014/06/140609swiftlearn_swift.html?r=t.co)
[Learn Swift - Tutorials, Code Samples, References and more!](http://www.learnswift.tips/)

[The Swift Programming Language（Swift言語） をまとめる - Qiita](http://qiita.com/kiyotaman/items/052f82e9f93590b79c64?utm_content=buffera671c&utm_medium=social&utm_source=twitter.com&utm_campaign=buffer)

# Swiftのポイント
## 安全！
メモリ管理にARC使って、変数の初期化や配列のオーバーフローのチェックなど。
## モダン！
関数、クロージャ、タプル、タイプインターフェース、型推論、Genericsなど。
## パワフル！
強力なパターンマッチが使える！

```swift:sample
let size = (20, 40)
switch size {
case let (width, height) where width == height:
    println("square with sides \(width)")
case (1..10, 1..10):
    println("small rectangle")
case let (width, height):
    println("rectangle with width \(width) and height \(height)")
}
```

## インタラクティブ！
XCodeを使って、リアルタイムに実行可能！

## 高速！
あるアルゴリズムでは、PythonやObjective-Cより高速だとか。

# 感想
いろいろな言語のいいところを取り入れている感じ。
Obje-Cで煩わしかったいろいろなものから開放されるだけでなく
書いてて楽しそうだなという印象。
また面白そうなサイトがあったらアップデートしていこうと思う。

時間を作って実際にSwiftを試してみようと思う。