OmniAICreator/Qiita-1.07M huggingface dataset:
LoganSquare - Square Moshi - Gsonの単純な比較


### TL;DR

```
http://jsonplaceholder.typicode.com/users/1
```

のレスポンスを5000回変換する時間の比較

![device-2015-06-17-174052_1.png](https://qiita-image-store.s3.amazonaws.com/0/36601/fe0c6ce9-4af9-3652-fb2e-ecf8ad5e5e5d.png "device-2015-06-17-174052_1.png")


###LoganSquare

```
https://github.com/bluelinelabs/LoganSquare
```

###Square Moshi (まだ完成していない)

```
https://github.com/square/moshi
```

###Gson

```
https://github.com/google/gson
```

###Source code

```
https://github.com/eneim/MoshiGson
```

###テスト環境

Google Nexus 7 2013 model, Android 5.1.1
[awk] exit文でawkの実行処理を終了

awkでは、exit文を使うと、処理の途中でもawkを終了させることができます。

# 例

```
$ cat test.txt
1
2
3
4
5
```

```
$ awk '{
    print $1;
    if ($1 == 3) exit;
}' test.txt
1
2
3
```
4, 5は出力されていません。


# 注意
なお、exit文を実行しても、ENDブロックは実行されるので注意してください。

```
$ awk '{
    print $1;
    if ($1 == 3) exit;
}
END {
    print "実行されます！";
}' test.txt
1
2
3
実行されます！
```
Polymer-Starter-KitをHerokuで動かすのにやったこと

Polymer-Starter-Kit を Herokuにデプロイした時の作業メモ

**Polymer-Starter-Kit**
https://developers.google.com/web/tools/polymer-starter-kit/

###package.json
* devDependencies を dependenciesに変更
* dependenciesに "bower”: "^1.4.1" を追加
* scriptsを追加

```javascript:package.json
"scripts": {
    "postinstall": "bower install",
    "start": "gulp serve"
 }
```

###gulpfile.js 

```javascript:gulpfile.js
gulp.task('serve', ['styles', 'elements', 'images'], function() {
  browserSync({
    //...省略
    server: {
      baseDir: ['.tmp', 'app'],

      routes: {
        '/bower_components': 'bower_components'
      }
    },
    //いか２行を追加
    port: process.env.PORT || 3000,
    Host: process. env. HOST || ‘localhost'
  });
//..省略
```

###herokuに環境変数追加
`$ heroku config:set HOST=0.0.0.0`
sinatraとrmagickで画像にテキストを合成する簡単なサンプル

#やってみた


フォーム送信されたテキストをImageMagickで吹き出し画像と合成するための簡単なサンプルを作りました。
ImageMagickとrmagickのインストールが必要です。

```rb
# encoding: utf-8
require 'sinatra'
require 'rmagick'

class App < Sinatra::Base

  get '/' do
    slim :index
  end
    
  post '/' do
    message = params['message']
    image = Magick::ImageList.new('public/image.png')
    draw = Magick::Draw.new
    draw.annotate(image, 0, 0, 50, 100, message) do
      self.font = 'public/logotype.otf'
      self.fill = '#333333'
      self.align = Magick::LeftAlign
      self.stroke = 'transparent'
      self.pointsize = 30
      self.text_antialias = true
      self.kerning = 1
    end
    image.write('public/temp.png')
    slim :index
  end
  
end
```

#結果
![skitch.png](https://qiita-image-store.s3.amazonaws.com/0/4887/7c9433d3-e5c6-f2aa-f593-1cf44de5c03a.png)
【iOS】TestFlight利用までの手順

##前提
iOS Developerのライセンス取得済み
※実機テストはxcode7から可能になったようですが、TestFlightの利用は無理ですよね。さすがに。
Xcode6.3

##選択肢
現在はAppleが提供しているTestFlightを採用しました。
DeployGateも検討したんですが、UDIDを取得する必要があり一手間掛かったので断念。
概要としては

###・TestFlight
審査の手順をするのならばどうせする手順でほとんど利用可能。
テスターのAppleID（メール）がわかればiTunesConnectで登録してテストができる。
iOS8じゃないとインストールできないようなので、状況によってはDeployGateを使うことになるかも・・・・

###・DeployGate
DeployGate：https://deploygate.com/
テスターのUDIDを取得して再度ProvisioningProfileを編集して設定してサーバにアップロードし直さないといけない。
サイトのインターフェースはわかりやすい。好み。
自分のテスト端末が複数台あって何回もプロビジョニングプロファイルを設定しなおさなくてもいいのであれば
僕はこっちの方が好み。
AdHocでプロビジョニングプロファイルを作成している必要あり。
今回はいろんな人の端末でテストする必要があるので不採用。


##TestFlight導入まで
そもそもアップルのサーバにアップロードするのが初めてで、そこが一番時間がかかりました。
すでにアプリのリリース経験がある人は[こっち](http://qiita.com/annaok/items/9e803fbb03391cf1b388)が参考になりました。

###・設定
プロビジョニングプロファイルが実機テスト用に設定されていれば特になにも変更していない気がします。
うまくいかない場合は再作成してダウンロードしてダブルクリックすれば適応されている？
もしくはXcode → PreferencesのAccountsタブの右下のViewDetailsから変えられると思います。
まぁこの辺りはよくわかりません！
※アップロードする際にも変更可能

メニューバーのProduct → Scheme → Edit SchemeのArchiveがRelease
![image](https://qiita-image-store.s3.amazonaws.com/0/69919/06de7902-6b68-adbf-2810-06270da0e037.png)


###・アイコンをいろんなサイズで設定
アップロードする時にエラーになったのでアイコンの設定をします。
機能テストしたいだけなのでなんでもいいから設定したかったんですが、結局欲しいサイズを網羅したものが見つかりませんでした。
なので自分で作成。
Macのプレビューでもサイズ指定で拡大縮小可能です。
　プレビューを開いて　ツール → サイズの調整

面倒だったのでこちらのツールを利用しました。
[iOS8対応！全アイコンサイズ、@3x、@2x、通常画像サイズを一括生成する画像変換アプリPrepoが便利]
(http://niwatako.tips/20141012/article149.html)
いろいろなサイズのアイコンを一気に作ってくれるツールです。

info.plistに設定が必要と書いてますが、僕の環境ではImages.xcassetsのAppIconに６種類のサイズをドロップすることで
うまくいきました。


###・アップロードまで
XcodeのProduct → Archive
作成が終わるとWindow → Organizerの画面が開かれます。
あとはSubmit to Store...でサーバにアップロード

初回アップロードの場合はiTunesConnectに登録が促されると思うので、促されたリンクからログイン。


###・TestFlight設定
1.アプリのTestFlightを有効
アップロードができれば、iTunesConnectのマイApp画面のプレリリースタブ、ビルドタブより
画面右上からTestFlightベータテストをオンにすることが可能。

2.ベータテスターを追加
マイAPPのページからユーザと役割のページに移動。
最初は
TestFlightベータ版テスターの内部テスタータブより
AppleIDの横のチェックボックスをチェックして右上の保存をクリック
※一つのIDで１０台までテストが可能です。なので社内のテスト端末が１０台以下ならば、一人テスターがいれば十分です。
　テスターは２５人までなので実質２５０台まで追加できます。
複数テスターを登録する場合はiTunesConnectユーザタブのユーザ（x）の横にあるプラスボタンからユーザを追加することができます。
そして同じようにTestFlightベータテスターとしてチェックをつけて保存してください。

3.アプリのテスターとして招待
マイAppのページに移動
プレリリースの内部テスタータブよりAppleIDの横のチェックをつけて右上の招待ボタンを押す。
![image](https://qiita-image-store.s3.amazonaws.com/0/69919/5b707e31-d749-aa00-cdd3-fb346d3c5d7a.png)
招待を押すことでAppleIDのメールアドレスにTestFlightのインストールURLが送られる。
あとはこれをインストールしたい端末に転送してインストール。


##テストアプリのバージョンアップ
設定を変更せずに再度Archiveを作成してアップロードしようとするとエラーになります。
アプリのビルドバージョンを一つ上げればアップロードできました。
![image](https://qiita-image-store.s3.amazonaws.com/0/69919/7cea6ad8-4e05-c261-efa3-137901aa2f2b.png)
ナビゲーションバーでプロジェクトを選択して、TARGETSのIdentitiyのところです。

アップロード後サーバで何かしらの処理をしており、５分程度インストール端末にプッシュ通知が届きました。
そしてTestFlightからアプリのアップロードができます。
http://qiita.com/eggmobile/items/0c4af08af94649f43774

##参考Link
http://qiita.com/annaok/items/9e803fbb03391cf1b388
http://www.toyship.org/archives/1868
[Backbone] Google Charts Quick Start を組み込む

### Google Charts を Backbone に組み込んでみる。
[Google Charts](https://developers.google.com/chart/interactive/docs/quick_start)

### Backbone.View
```coffeescript:view.coffee
###*
# class doc
###
  el: "#graph_area"

  ###*
  # Backbone.View.initialize()
  ###
  initialize: ->
    @listenTo @model, "change:graph_option", @render

    # Load the Visualization API and the piechart package.
    google.load "visualization", "1.0", "packages": ["corechart"]

    # Set a callback to run when the Google Visualization API is loaded.
    google.setOnLoadCallback @drawChart.bind @


  ###*
  # Backbone.View.render()
  ###
  render: ->
    # Instantiate and draw our chart, passing in some options
    chart = new google.visualization.PieChart @$el.get 0
    chart.draw @model.get("graph_data"), @model.get("graph_option")


  ###*
  # Callback that creates and populates a data table,
  # instantiates the pie chart, passes in the data and
  # draws it.
  ###
  drawChart: ->
    data = new google.visualization.DataTable()
    # Create the data table.
    data.addColumn "string", "Toping"
    data.addColumn "number", "Slices"
    data.addRows [
      ["Mushrooms", 3]
      ["Onions",    1]
      ["Olives",    1]
      ["Zucchini",  1]
      ["Pepperoni", 2]
    ]

    # Set chart options
    @model.set
      graph_data: data
      graph_option:
        "title":  "How Much Pizza I Ate Last Night"
        "width":  400
        "height": 300
```

### Backbone.Model
```coffeescript:model.js
###*
# class doc
###
class ModelBase extends Backbone.Model
  defaults:
    webroot: "/"

###*
# class doc
###
class GraphModel extends ModelBase
  defaults: ->
    _.defaults {}, _.result ModelBase.prototype, "defaults"
    @set
      graph_data:   {}
      graph_option: {}
```



### 初期設定用
```coffeescript:default.coffee
mGraph = new GraphModel
vGraph = new GraphView model:mGraph
```

### HTMLの準備

```jade:sample.jade
- var styles = ["bootstrap.min.css"]
- var scripts = ["jquery.min.js","lodash.min.js","backbone-min.js","https://www.google.com/jsapi","model.js","view.js","default.js"]

doctype html
html(lang="ja")
  head
    meta(charset="utf-8")
    meta(name="viewport" content="width=device-width, initial-scale=1")
    title Google Charts
    each style in styles
      link(rel="stylesheet" href=style)
  body
    div.container
      h3.page-header Graph
      div.col-xs-12#graph_area

    each script in scripts
      script(src=script)
```

以上！
WWDC2015で自分が聞いた質問まとめ

# Xcode

### XcodeのAsset Catalog どうやって画像をローカライズするのですか、
ローカライズ項目がないっぽいのでapple エンジニアいろいろいじっててでき
ないと気づきほかの３人メーバを連れてきて、いろいろ話したあとAsset Catalog
画像ローカライズできないのはバグですって伝えられた。。

### Xcode7 のUI test機能hybridアプリでも使えますか？
使えるはず。使えないならバグ。 -> かっこいい..

### XcodeなぜBDD test framework作らないですか？
質問聞いたアプリエンジニアちょっとBDDがわからなかったので、
bddのwikiと自分が書いたbddを見せて、bddの書き方のほうが読み
やすいよって伝えた。そして彼はXcodeチームはエンジニアがほしい
機能を募集?してますよ、ちゃんとした理由とか書けば受理されるかも
しれない。あとその機能がほしい人が多ければ、受理されやすい。

### 
# WatchKit

### MusicアプリみたいなAirplay 機能どうやって作る？
現状そういうAPIはない。reportしてください。

# Swift

### Swift2.0のError Handling,なぜfuncのthrowにはどういうerrorを返すか定義できないのですか？
javaのexceptionの話し混ざりながらとかいろいろ話したけど、
自分英語が下手でうまく理解できないかった。。><

### Swiftのoptionalの値有無判定いろんな書き方があるけど、どれがおすすめですか? 僕としてoptional本質はenumなので.Noneでチェックしたほうがいい 
code:

```
let someOptional: Int? = 42
if someOptional != nil{}
if someOptional != .None{}
if let _ = someOptional{}
```

!= nilでチェックしたほうがいい。swiftのoptionalはenumとはいえ
、結構特殊なenumですし、言語使ってる人側としてnilのほうが直観的。
追加質問でなんでhasValue()みたいなfunc作らないですがって聞いたら、
今も三つ判定手法あるのに、またfunc作ったとしてもだれも使わない、
ややこしくなるだけ。 -> ご、ごめんなさい><

### Swift official style guideみたいなものはありますか
Swiftチームリーダの人が自分と他の同僚前からちょっと書いたのだが、いろな事情でなしになった。
現状そういうものはない。-> 自分とってちょっと残念

### Class extensionで failable initializerどう作る？
完成Code:

```
private protocol NSDateType {
    typealias Selfy
    static func build(iso8601String: String) -> Selfy?
}
private extension NSDateType where Selfy == Self {
    init?(iso8601String: String) {
        let r = Self.build(iso8601String)
        if r == nil {return nil }
        self = r!
    }
}
 extension NSDate : NSDateType {
    static func build(iso8601String: String) -> NSDate? {
        let dateFormatter = NSDateFormatter()
        dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
        dateFormatter.locale = NSLocale(localeIdentifier: "en_US_POSIX")
        return dateFormatter.dateFromString(iso8601String)
    }

}
let date = NSDate(iso8601String: "2010-08-31T23:04:26.000Z")
```

protocol extension使ってコンバイラを騙して、通らせという裏手。。　
これ使えるけど、難しすぎるので、reportしたほうがいいよって言われた。

# デザイン
## Apple Watch
### paging使ってそれぞれのページ違うコンテンツ表示しても大丈夫ですか
Ok
### iOSアプリみたいにlistから詳細表示より最初は詳細画面を表示して、menuでリスト表示したほうがいいと自分は思ってて、なぜというとApple Watch画面Loadingが遅いので、これでユーザーが早くコンテンツを見せれる。このアプローチはどうですか？

コンテンツによる。menuはforce touchでしか表示されないので、
気づきにくい。あとLoading遅い問題、watchOS2で解消される。
リスト数が少ないならpaging使ったほうがいい、多い場合は素直にtable.

### どうしたらHamburger menuを消滅できます?
1. ユーザーにとってどうでもいい項目を削除。項目できる限り絞る
2. 優先度高い５つの項目をtabにする. 最後のtab More使ってもいいが、できる限りMore tabは使わないように。
3. 残りの優先度低い項目をページに分散する。-> App Storeのおすすめページを例に説明した。
WindowsのC#でキーをリアルタイムに取得する方法

イベントではなく、WINAPIを使用してキーを取得する方法です。
ゲームのメインループなどの中で使用します。

```csharp
namespace Hoge
{
    public class Fuga
    {
        // DLLをインポートする必要がある
        [System.Runtime.InteropServices.DllImport("user32.dll")]
        private static extern short GetKeyState(int nVirtKey);

        // キーの押しっぱなしを取得する
        public static bool IsKeyPress(System.Windows.Forms.Keys keyCode)
        {
            // GetKeyStateは最上位ビットが1か否かでキー投下の有無を取得できる
            return GetKeyState((int)keyCode) < 0;
        }
    }
}

```

##注意点
GetKeyStateの戻り値はshort型(符号あり16bit)で、キー投下の判定は最上位ビットが立っているか否かで取得をする。
サイトによっては、戻り値をint型にしていたりキー投下判定が最下位ビットで行ったりしているため、注意が必要である。
【Unity】Android実機でParseが動かない場合の対処法

解決にかなりの時間をくってしまったので備忘メモ。
(※2015/06/17時点 Unity5.0.2f1での情報です)

Unity Editor上だとParseと通信出来ていたのに、Android実機だとParseと通信出来ず下記のようなエラーが発生しました。

```
I/Unity(5080): MissingMethodException: Method not found: 'Default constructor not found...ctor() of Parse.PlatformHooks'.
I/Unity(5080):   at System.Activator.CreateInstance (System.Type type, Boolean nonPublic) [0x00000] in <filename unknown>:0 
I/Unity(5080):   at System.Activator.CreateInstance (System.Type type) [0x00000] in <filename unknown>:0 
I/Unity(5080):   at Parse.ParseClient..cctor () [0x00000] in <filename unknown>:0 
I/Unity(5080): Rethrow as TypeInitializationException: An exception was thrown by the type initializer for Parse.ParseClient
I/Unity(5080):   at Parse.ParseInitializeBehaviour.Initialize () [0x00000] in <filename unknown>:0 
I/Unity(5080):   at Parse.ParseInitializeBehaviour.Awake () [0x00000] in <filename unknown>:0 
```

Stripping Levelが臭いかも？と思ったのでAndroidの
Player Settings→Other Settings→Stripping Levelを「Disabled」に変更してみたところ、エラーが変化。

```
I/Unity(6634): AndroidJavaException: java.lang.ClassNotFoundException: com.parse.ParsePushUnityHelper
I/Unity(6634):   at UnityEngine.AndroidJNISafe.CheckException () [0x00000] in <filename unknown>:0 
I/Unity(6634):   at UnityEngine.AndroidJNISafe.CallStaticObjectMethod (IntPtr clazz, IntPtr methodID, UnityEngine.jvalue[] args) [0x00000] in <filename unknown>:0 
I/Unity(6634):   at UnityEngine.AndroidJavaObject._CallStatic[AndroidJavaObject] (System.String methodName, System.Object[] args) [0x00000] in <filename unknown>:0 
I/Unity(6634):   at UnityEngine.AndroidJavaObject.CallStatic[AndroidJavaObject] (System.String methodName, System.Object[] args) [0x00000] in <filename unknown>:0 
I/Unity(6634):   at UnityEngine.AndroidJavaObject.FindClass (System.String name) [0x00000] in <filename unknown>:0 
I/Unity(6634):   at UnityEngine.AndroidJavaClass._AndroidJavaClass (System.String className) [0x00000] in <filename unknown>:0 
I/Unity(6634):   at UnityEngine.AndroidJavaClass..ctor (System.String className) [0x00000] in <filename unknown>:0 
I/Unity(6634):   at System.Reflection.MonoCMethod.Invoke (System.Object obj, BindingFlags invokeAttr, S
```

ClassNotFoundExceptionて。。PUSH通知周りのClassが足りんらしいです。
Parse公式のUnityのBlank Projectをベースにいじってるのに何故こんなエラーが出るんだろう、と散々調べまわった結果が↓。


# [解決策] Asset StoreからParseのAssetを入れよう
結論、コレだけ。

Parse公式サイトからUnityのBlank Projectが落とせますが、現時点(v1.5.2)ではこれをベースに進めようとするとマルチプラットフォーム対応でハマります。
（Android実機で前述の問題が出てしまいます）

ParseのAssetはその辺も考えて作られているようなので、素直にこちらを使うのが吉。
もちろん無料です。

## Assetを入れた後にやること
Assetを入れたらPlugins/Android/AndroidManifest.xml開いて下記の記述を探します。

```
<activity android:name=".UnityPlayerActivity">
```

このままだとActivityが見つからずエラーになるので、

```
<activity android:name="com.unity3d.player.UnityPlayerActivity">
```

に変更します。これで万事OK。
ちなみに、このあとStripping Levelを「Use micro mscorlib」に戻してもちゃんと動きました。
Swiftでテキスト内リンク&テキストタップ検出

#Swiftでテキスト内リンク&テキストタップ検出

指定したテキスト内にリンクを設定したいことがあります。
@you_matz #swiftなどをリンクとして埋め込みたい場合
そしてそのリンクをタップした際に別の画面に遷移させるなど。
		
##実現方法
###①UITextViewのプロパティの設定

```swift

textView.userInteractionEnabled = true
textView.editable = false

// tapでテキストのポジション検出可能とするため
textView.selectable = true

// 行間レイアウト用
// textView.layoutManager.delegate = self
```

###②テキスト内リンク範囲指定

```swift
let text = "Swiftでテキスト内リンク&テキストタップ検出"
let linkText = "リンク"
let nsTex = text as NSString
let link = text.rangeOfString(linkText)
let attributedString = NSMutableAttributedString(string: text)

// リンク位置範囲生成 startからlength
range = NSMakeRange(distance(text.startIndex, link!.startIndex), distance(link!.startIndex, link!.endIndex))
```


###③textviewに指定した色、カラー、下線を指定後、代入

```swift
// テキスト全体文字色
attributedString.addAttribute(NSForegroundColorAttributeName, value: UIColor.whiteColor(), range: NSMakeRange(0, nsTex.length))

// リンクカラー
attributedString.addAttribute(NSForegroundColorAttributeName, value: UIColor.blueColor(), range: range)

// リンク下線
attributedString.addAttribute(NSUnderlineStyleAttributeName, value: NSUnderlineStyle.StyleSingle.rawValue, range: range)
// 属性を代入
textView.attributedText = attributedString
```

###④textViewにgesture追加

```swift
// gesture追加
let tap = UITapGestureRecognizer(target: self, action: "tapText:")
textView.addGestureRecognizer(tap)
```


###⑤tap時の動作

```swift
func tapText(tap: UITapGestureRecognizer) {
    
    // タップされた座標をもとに最寄りの文字列の位置を取得
    let location = tap.locationInView(textView)
    let textPosition = textView.closestPositionToPoint(location)
    
    // テキストの先頭とタップした文字の距離をNSIntegerで取得
    let selectedPosition = firstTextView.offsetFromPosition(firstTextView.beginningOfDocument, toPosition: textPosition!)
    
    // タップした文字がリンク文字のrangeに含まれるか判定
    if NSLocationInRange(selectedPosition, range) {
        
        // リンクタップ時の処理
        // let webVC = WebViewController()
        // self.presentViewController(webVC, animated: true, completion: nil)    
    }
}
```

##参考
NSAttributedStringを使ってリンク文字を作る（Objective-C）
https://gist.github.com/yoshimin/858d14751fc1c00807d2

UITextView でタップ可能なリンクをカスタマイズする
http://kishikawakatsumi.hatenablog.com/entry/20130605/1370370925
[小ネタ]実はRubyのブロック引数受け取りにキーワード引数が使える

今更ながらブロック引数の受け取りにキーワード引数が使える事に気付いた。
よくよく考えるとブロック引数の受け取りはメソッドの引数受け取りと同じ処理してるんだから、メソッドの定義で使えるものは基本的に使えるはずで、至極当たり前の事といえばその通りなのだが……。
(自分は今日意識するまで気付いてなかった……)

だからこんな感じで書ける。

```rb
[23] pry(main)> [{hoge: "fuga", foo: "bar"}].each do |hoge:, foo:|
[23] pry(main)*   puts hoge
[23] pry(main)*   puts foo
[23] pry(main)* end
fuga
bar
```

もしくはこんな感じ。

```rb
[24] pry(main)> [{hoge: "fuga", foo: "bar"}].each do |hoge:, **|
[24] pry(main)*   puts hoge
[24] pry(main)* end
fuga
```

言語的に何も問題無いはずだが、余り見ないので、こういうスタイルで書いていいものかは迷う所。
もうRuby書いてて長いけど、時々こういう発見があるのがRubyっぽいなあという感じがする。

ちなみに、キーワード引数の仕様はRubyのバージョンに依存するのでお手持ちのRubyをご確認ください。
Phalconでのリレーションについて

## 基本的なリレーションの設定方法
PhalconでJOINを使いたい時にはModelのinitialize()内で、hasOne,hasMany,belongsToなどを使います。

```php:model/Prefectures.php
    public function initialize()
    {
        // 地方を親に持つのでbelongsTo
        $this->belongsTo('region_id', 'Regions', 'id');
        // 子に市区町村を持つのでhasMany
        $this->hasMany('id', 'Towns', 'prefecture_id');
        // 都道府県の詳細は1対1なのでhasOne
        $this->hasOne('id', 'PrefectureDetails', 'prefecture_id');
    }
```

ですが、initialize()で実行しているので、JOINしなくてもいい時にも必ずJOINをしてしまい、DBに負荷をかけてしまうのではないかと気になったので調べてみました。

# 調査開始
findFirstした時とhasMany先を取得する時にどのようなSQLが発行されているか見てみます。
以下ざっくりしたソースです。

## 調査用ソース
```php:model/Regions.php
class Regions extends \Phalcon\Mvc\Model
{
    :
    :
    public function initialize()
    {
        $this->hasMany('id', 'Prefectures', 'region_id');
    }
}
```

```php:TestController.php
    public function test()
    {
        $region = Regions::findFirst(1); // ・・・①地方取得

        sleep(10); // 確認をしやすくするためにwaitを入れる

        $prefectures = $region->prefectures; // ・・・②都道府県取得
    }
```

# 調査結果
結果として①地方取得で以下のみが実行されました。
（実際はDESCRIBEや、*ではなくカラムが指定されたりしていますが、説明のために端折ってます）

```sql
SELECT * FROM regions;
```

そして②都道府県取得で以下が発行されました。

```sql
SELECT * FROM prefectures WHERE region_id=1;
```

# まとめ
リレーションの設定をしたからといって、取得しに行かなければクエリが発行されることはないので、設定して損することはなさそうです。
むしろ、リレーションを明示するために積極的に書くべきだと思います。

ただし、この挙動を理解していないと、データ取得にタイムラグがあるので意図しない結果が返ってくることもあるかもしれません。
ちゃんと JOINして全部取得する方法はPHQLなんですかねー？
そのうち調べておきたいと思います。
[Elixir+Trot]テンプレートをレンダリングするだけの簡単なお仕事

#目的
Trotフレームワークでテンプレートのレンダリング機能を利用する。

#実行環境
OS： Windows8.1
Erlang： Eshell V6.4, OTP-Version 17.5
Elixir： v1.0.4
Trot Framework： v0.5

#始める前に
[前回の記事](http://qiita.com/darui_kara/items/1629278b4e0aad6ebdf4)の続きになります。追記＆追加する形で実施します。

eexとhamlのテンプレートをレンダリングします。
コード追加もそんなにないので簡単です。

#参考文献
https://github.com/hexedpackets/trot

#目次
1. テンプレートをレンダリングするだけの簡単なお仕事
2. まとめ

##1. テンプレートをレンダリングするだけの簡単なお仕事

まずは、テンプレート用のディレクトリを作成します。

```
>cd プロジェクトディレクトリ
>mkdir priv
>cd priv
>mkdir templates
>cd templates
```

/priv/templatesディレクトリへ以下の名称の二つファイルを作成して下さい。
名称1： `template.html.eex`
名称2： `template.html.haml`

ファイルの内容は以下の通り。

priv/templates/template.html.haml

```html:template.html.eex
<html>
  <head>
    <title>EEx Template</title>
  </head>
  
  <body>
    <h1>EEx Template</h1>
    <p><%= @message %></p>
  </body>
</html>
```

priv/templates/template.html.eex

```haml:template.html.haml
%html
	%head
		%title Haml Template
		
	%body
		%h1 Haml Template
		%p <%= @message %>
```

テンプレートの内容は説明をするまでもないと思いますが、
一点だけ、`<%= %>`でElixirのコードを埋め込んでいます。

lib/trot_sample/router.exを開き、以下の通り編集します。

```ex:router.ex
defmodule TrotSample.Router do
  use Trot.Router
  use Trot.Template
 
  get "/", do: 200
 
  get "/hello" do
    "Hello Trot!!"
  end
 
  get "/hello/haml" do
    render_template("template.html.haml", [message: "Hello Haml"])
  end
 
  get "/hello/eex" do
    render_template("template.html.eex", [message: "Hello EEx"])
  end
 
  import_routes Trot.NotFound
end
```

ルーティング先を定義して、`render_template`でテンプレートファイルを指定しています。
第二引数には、送っているパラメータが記述されていますね。

第二引数で複数のパラメータを送るのはまだやっていないので何とも分かりません。

Tips：
`@template_root`の記述を使えば、
テンプレートを置くディレクトリを変更することもできるみたいです。
例) `@template_root "templates/root"`

デフォルトは`priv/templates`に設定されていました。
(Trotのソースコードに記述有)

##2. まとめ
TrotのREADMEに説明があり大した内容の記事ではありませんが、
お役に立ったら嬉しいです。

ちょっとばかり疑問なのですが、
何故かHamlテンプレートに"!!!"のDOCTYPEを追加する記述をすると、
ArgumentErrorが発生してテンプレートがレンダリングされません。
calliopeの方で何か起こっているのでしょうか・・・

こういった小さい事の積み重ねで行きたいですね～
ベイビーステップでいいです(笑)
EC2 Windowsインスタンスに22番ポートでRDP接続するためのUserData

通常のRDPポート（3389）ではなく、22番ポートなど別のポートでRDP接続したい場合のUserDataです。

レジストリの変更でポートが変えられる(https://support.microsoft.com/en-us/kb/306759) ようなので、試しに実行してみたところうまく動作しました。同時にWindows Firewallの設定も必要になるため、TCP22番ポートを開ける設定を一緒に行います。

EC2起動時の詳細設定でUserDataの部分に張り付けて、起動させます。１度目の起動は3389ポートになりますので、起動後に再起動すると22番ポートで接続できるようになります（セキュリティグループの設定も3389から22に変更してください）。

```
<powershell>
Set-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" -name "PortNumber" -value "22"
if (-not(Get-NetFirewallRule | where Name -eq Open-Port-22))
{
    New-NetFirewallRule `
        -Name Open-Port-22 `
        -DisplayName Open-Port-22 `
        -Description "Open-Port-22" `
        -Enabled True `
        -Profile Any `
        -Direction Inbound `
        -Action Allow `
        -EdgeTraversalPolicy Block `
        -LooseSourceMapping $False `
        -LocalOnlyMapping $False `
        -OverrideBlockRules $False `
        -Program Any `
        -LocalAddress Any `
        -RemoteAddress Any `
        -Protocol TCP `
        -LocalPort 22 `
        -RemotePort Any `
        -LocalUser Any `
        -RemoteUser Any 
}
else
{
        Write-Verbose "Open-Port-22 exits."
}
</powershell>
```
動作確認はWindows 2012 R2のAMIで行っています。またスクリプトの書き方はこちら(http://tech.guitarrapc.com/entry/2013/07/08/210724) を参考にさせていただきました。ありがとうございます。
Laravelのartisanコマンドをどこからでも実行できるalias

gitのrootにあるartisanコマンドを実行するだけのalias

```bash:.bashrc
alias ar='php `git rev-parse --show-toplevel`/artisan'
```

fishだと

```fish:fish.load
alias ar 'php (git rev-parse --show-toplevel)/artisan'
```
ShinobiLayer: SoftLayer Object Storageのupload性能を測ってみた！

2015/12/05更新
再度、最新の環境で計測しました。が、計測時のCPUをメモるのを忘れてた。。。確か12/3分はCPUボトルネックになっていた気がします。

#はじめに
SoftLayerのObject Storageの性能を教えて欲しい！っていう質問が来たので、ちょっと計ってみました。Object Stroageはマルチテナントのストレージなので必ずしもこのとおりの性能が出るとは限りませんし、性能値を保障するものではありません。あくまで参考値としてご利用いただければ幸いです。なお、SoftLayer Object Storageについては、過去に以下にも記事を書きましたので、必要に応じてご参照ください。

* [Cyberduck(GUI)を使ったSoftLayer Object Storageへのアクセス方法](http://qiita.com/testnin2/items/1868f9f5775ae06afc26)
* [python-swiftclientを使ったSoftLayer Object Storageへのアクセス方法](http://qiita.com/testnin2/items/c588da9c1658a2f176a8)
* [sftpを使ったSoftLayer Object Storageへの簡易アクセス方法](http://qiita.com/testnin2/items/64f934f61bcaf7ac2572)
* [SoftLayer Object Storageの制約](http://qiita.com/testnin2/items/5511c493a1499112dfa3)

# 計測日: 2015/6/17（水）の16:00頃
- TOK02の仮想サーバーから、TOK02のObject Storageへ、private NW経由でupload
    - 仮想サーバーはCentOS6.6を利用
    - 仮想サーバーのport speedは1Gbps
- Object Storageは5GB以上のファイルは配置できないので、python swiftを使って10GBのファイルを100MBずつに分割してuploadしてみる。この際
    - データ整合性を可能な限り保障するためにSLO形式を選択
    - 特にオプションは付けていないので、10並列（--object-threadsおよび--segment-threadsのデフォルト値は10）

## テスト結果

```text:テスト結果
# dd if=/dev/zero of=10GB bs=1G count=10
# ls -l 10GB
-rw-r--r-- 1 root root 10737418240 Jun 17 01:57 10GB
# time swift upload shinobilayer -S 104857600 10GB --use-slo
（途中略）

real    2m54.831s
user    1m45.880s
sys     0m48.073s

# time swift upload shinobilayer -S 104857600 10GB_2 --use-slo
（途中略）

real    2m53.844s
user    1m45.595s
sys     0m47.885s
```
58.6MB/sec～58.9MB/sec ぐらい？？？


# 計測日: 2015/12/03（木）の17:00頃
- TOK02の仮想サーバーから、TOK02のObject Storageへ、private NW経由でupload
    - 仮想サーバーはCentOS Linux release 7.1.1503 (Core)を利用
    - 仮想サーバーのport speedは1Gbps
- Object Storageは5GB以上のファイルは配置できないので、python swiftを使って10GBのファイルを100MBずつに分割してuploadしてみる。この際
    - データ整合性を可能な限り保障するためにSLO形式を選択
    - 特にオプションは付けていないので、10並列（--object-threadsおよび--segment-threadsのデフォルト値は10）

## テスト結果
```text:テスト結果
# dd if=/dev/zero of=10GB bs=1G count=10
# ls -l 10GB
-rw-r--r-- 1 root root 10737418240 Jun 17 01:57 10GB
# time swift upload shinobilayer -S 104857600 10GB --use-slo
（途中略）

real    1m24.629s
user    1m45.349s
sys     0m41.221s

# time swift upload shinobilayer -S 104857600 10GB_2 --use-slo
（途中略）

real    1m23.316s
user    1m47.584s
sys     0m46.172s
```

121.0MB/sec ぐらい？？？
[Elixir+Trot] Trot-Frameworkを使って"Hello Trot!!"するだけの簡単なお仕事・・・

#目的

Trotフレームワークを利用しHello Trot!!を表示する。

#実施環境

OS： Windows8.1
Erlang： Eshell V6.4 OTP v17.5
Elixir： v1.0.4
Trot Framework： v0.5

#始める前に

Trotフレームワークを試してみます。

簡単にTrotの紹介をします。
Rubyで開発されたSinatraのような記述ができる、Elixir版のSinatraみたいなものです。
なので、ソースコード自体も少なくWebの勉強や書き捨てにちょうど良いと思います。
非常に小さいので、マイクロフレームワークと紹介されていました。

さて、説明はこんなところでやっていきましょう。

#目次

1. プロジェクト作成
2. コンフィグ設定
3. router作成
4. まとめ

#参考文献

https://github.com/hexedpackets/trot

##1. プロジェクト作成

以下の通りプロジェクトを作成しました。

```
>cd プロジェクト作成ディレクトリ
>mix new trot_sample (以降、プロジェクト名はtrot_sampleとする)
>mix test
```

mix.exsを開き、以下の通り編集して下さい。

```ex:mix.exs
defmodule TrotSample.Mixfile do
  use Mix.Project
 
  def project do
    [app: :trot_sample,
     version: "0.0.1",
     elixir: "~> 1.0",
     build_embedded: Mix.env == :prod,
     start_permanent: Mix.env == :prod,
     deps: deps]
  end
 
  # Configuration for the OTP application
  #
  # Type `mix help compile.app` for more information
  def application do
    [applications: [:logger, :trot]]
  end
 
  # Dependencies can be Hex packages:
  #
  #   {:mydep, "~> 0.3.0"}
  #
  # Or git/path repositories:
  #
  #   {:mydep, git: "https://github.com/elixir-lang/mydep.git", tag: "0.1.0"}
  #
  # Type `mix help deps` for more examples and options
  defp deps do
    [
      {:trot, github: "hexedpackets/trot"}
    ]
  end
end
```

依存関係を解決します。

```
>mix deps.get
>mix deps.compile
```

##2. コンフィグ設定
/config/config.exsを開き、以下の2行を追加して下さい。

```
config :trot, :port, 4000
config :trot, :router, TrotSample.Router
```

##3. router作成
/libのディレクトリへ以下の名称でディレクトリを追加して下さい
ディレクトリ： `trot_sample`

/libにあったファイル(trot_sample.ex)は上記の作成したディレクトリへ移動して下さい。
また、以下のようにリネームして下さい。
リネーム： `trot_sample.ex` → `router.ex`

/lib/trot_sample/router.exを開き以下の通りソースコードを記述して下さい。

```ex:router.ex
defmodule TrotSample.Router do
  use Trot.Router
 
  get "/", do: 200
 
  get "/hello" do
    "Hello Trot!!"
  end
 
  import_routes Trot.NotFound
end
```

では、実行しましょう。
`>iex -S mix`

以下の二つのURLへアクセスしてみて下さい。
URL1： `http://localhost:4000`
結果1： 画面には何も表示されない。

URL2: `http://localhost:4000/hello`
結果2： テキストのみで"Hello Trot!!"と表示される。

また、コマンドプロンプトを確認してみるとログが出ています。

```
iex(1)>
18:59:41.065 [info]  GET /
iex(1)>
18:59:41.069 [info]  Sent 200 in 4ms
iex(1)>
18:59:46.036 [info]  GET /hello
iex(1)>
18:59:46.036 [info]  Sent 200 in 0ﾂｵs
```

Tips：
configの設定を行わないと、
どんなページを開いてもデフォルトのNotFoundルータが、not foundと表示しています。

##4. まとめ
これだけで実行できます。
簡単ですね！確かにSinatraっぽいです。

一応、レンダリングテンプレートを利用して表示する方法もやりましたので、
[次の記事](http://qiita.com/darui_kara/items/111a82b3052c85ba5934)でアップしたいと思います。

余談なんですが、
Formの入力値を取得する方法とかがさっぱり分からないです。
どなたか知っている方がいましたらご教授頂けると嬉しいです～

以上で終わりです。
【iOS】nend（AppBank）のアイコン広告がApp Store Review Guidelinesに抵触→中止に

本日、AppBank社からメールが配信された。
私は広告にnendを使用しているのだが、この広告について再三物言いがついて
<a href="http://qiita.com/BlueRoyInc/items/677bd48715599178efed" target="_blank">3回もレビューを落とされ、特急審査を通した話を以前掲載</a>した。

メールから引用すると（斜字太字部分）
<i><b>AppBank Networkでは、『アイコン型広告がApp Store Review Guidelinesに抵触する』と判断し、 同規約に準拠するべく、2015年6月17日11時（日本時間）をもってアイコン型広告配信機能のあるSDK（iOS版）の配布を終了致しました。</i></b>

<i><b>Apple社のガイドラインに準拠したSDK（iOS版）は、メディアパートナー管理画面よりダウンロード頂けます。</i></b>

<i><b>お手数おかけ致しますが、iOSアプリのアップデートや新規アプリのリリースを予定されている場合は、メディアパートナー管理画面よりダウンロード頂ける最新SDKを導入してください。</i></b>

とのこと。
こりゃ、<b>3回レビューを落とされても仕方がない！！</b>

みなさま、お互いガイドライン抵触には気をつけたいところ…。
現在執筆中のものは、この新しいSDKをつけて提出することにする。

＝
【応援よろしくお願いいたします】
現役調剤薬局薬剤師の私が手がけた最新作「<a href="http://blueroy.jimdo.com/%E6%BC%A2%E6%96%B9%E3%82%B9%E3%82%AF%E3%83%A9%E3%83%B3%E3%83%96%E3%83%AB/" target="_blank">漢方スクランブル</a>」大絶賛配信中！
iOS向け無償アプリ。
調剤薬局で薬剤師が漢方を揃えてくる作業を想定した練習アプリ。
薬学実習生・ルーキー薬剤師の自習にオススメ！
それ以外の方も…ちょっと変わった数合わせゲームをお楽しみくください☆
Haste FFI


Haste は 2 パターンの FFI をサポートします。

#### foreign import ccall を用いた FFI

```Haskell
foreign import ccall jsQuerySelectorAll :: Elem -> JSString -> IO (Ptr [Elem])
```

この場合、以下の様な jsQuerySelectorAll 関数を持つ .js を定義し、事前に読み込んでおく必要があります。

```JavaScript
function jsQuerySelectorAll(elem, query) {
    var els = [0], nl; 

    if (!elem || typeof elem.querySelectorAll !== 'function') {
        return els;
    }   

    nl = elem.querySelectorAll(query);

    for (var i = nl.length-1; i >= 0; --i) {
        els = [1, nl[i], els];
    }   

    return els;
}
```

#### Haste 独自 FFI

```Haskell
clicked :: Selector -> (MouseEvent -> IO ()) -> IO ()
clicked = ffi "(function(sel, f){$(sel).click(f);})"
```

Haste 独自の ffi 関数に、文字列で JavaScript を渡します。引数は 5 つまでサポートしているようです。
Haste 関連ライブラリ


2015 年 6 月に [Hackage を haste で検索した結果](https://hackage.haskell.org/packages/search?terms=haste)をまとめたものです。

### [haste-perch](https://hackage.haskell.org/package/haste-perch)

Haste ベースの DOM ツリー操作ライブラリです。

Haste は Haste.DOM で低レベル DOM API を提供しているのですが、Haste.Perch は HTML のよく使用する要素と属性が定義されており、例えば ```newElem "br"``` の代わりに ```br``` と書くことができます。

### [haste-markup](https://hackage.haskell.org/package/haste-markup)

Haskell の blaze-markup と blaze-html の Haste バインディングです。特に bytestring と text に依存する機能は削除され、Text は JSString に置き換えられています。

### [hplayground](https://hackage.haskell.org/package/hplayground)

GUI ライブラリです。UI は HPlayGround と Perch で定義し、コマンドライン的に振る舞いを追加していくという特徴があります。以下は http://tryplayg.herokuapp.com/try/todo.hs/edit からの部分引用です。

```Haskell
todo ::  Widget ()
todo = do
      section ! id "todoapp" $ do
        nelem "header" ! id "header"
        section ! id "main" $ do
          ul ! id "todo-list"  $ noHtml

        footer ! id "footer"  $ do
          span ! id "todo-count" $ noHtml
          ul ! id "filters" $ noHtml
          span ! id "clear-holder" $ noHtml

      footer ! id "info" $ do
        p "Double-click to edit a todo"
        p $ do
           toElem "Created by "
           a ! href "http://twitter.com/agocorona" $ "Alberto G. Corona"
           p $ do
              toElem "Part of "
              a ! href "http://todomvc.com" $ "TodoMVC"

     ++> header                       --             ++> add HTML to a widget
     **> toggleAll
     **> filters all
     **> itemsLeft
     **> showClearCompleted           --             **> is the *> applicative operator
```

前半で id 付きの要素を定義し、後半でコマンドラインっぽく関数を呼び出し、id 付き要素の振る舞いを追加しています。

### [react-haskell](https://hackage.haskell.org/package/react-haskell)

Haskell の React バインディングです。

以下、https://hackage.haskell.org/package/react-haskell のサンプルコードです。

```Haskell
 -- We're creating a class with JSString state
 data Example
 instance ReactKey Example where
     type ClassState Example = JSString
     type AnimationState Example = ()
     type Signal Example = JSString

 -- updating to the new state without animation
 transition :: JSString -> JSString -> (JSString, [AnimConfig Example])
 transition oldState signal = (signal, [])

 view :: JSString -> React Example ()
 view str = div_ [ class_ "container" ] $ do
     input_ [ value_ str, onChange (Just . targetValue) ]

 main :: IO ()
 main = withElem "id" $ \elem ->
     render elem =<< createClass view transition "" () []
```
Haste 開発環境構築


Mac 上に Haste 開発環境を構築する手順の覚書です。

### GHC 7.8.4 のインストール

2015 年 6 月現在、Mac の HomeBrew でリリースされている GHC は 7.10.1 ですが、Haste 0.5 でサポートしている GHC は 7.8 以上 7.10 未満です。7.10.1 では、インストール時にエラーが発生します。

ひとつ前の GHC をインストールする必要がありますが、簡単なのは [Downloads for OS X](https://www.haskell.org/downloads/osx) から ghc-7.8.4-r0.zip をダウンロードし、/Applications などに展開し、パスを通すことです。特に GHC 7.10.1 が必要ではない場合、[Homebrew-versionsで特定バージョン指定してインストールする](http://blog.cyclogy.com/2014/02/08/homebrew-versions/) などを参考に、古いバージョンを入れてみるのも良いかもしれません。

### Haste のインストール

今回は作業用のディレクトリを作成し、環境を汚さないようにインストールします。

```bash
$ mkdir haste
$ cd haste
$ cabal sandbox init
$ cabal update
$ cabal install cabal-install
$ export PATH=$PATH:.cabal-sandbox/bin
$ cabal install haste-compiler
$ haste-boot
```

```cabal install cabal-install``` でインストールした 最新の cabal を使用しないと、haste-boot でエラーが発生します。

### Haste で Hello World

以下の Haskell コードと HTML を用意します。

```hello.hs
module Main
  ( main
  ) where

import Haste
import Haste.DOM

main :: IO ()
main = do
  [h1] <- elemsByQS documentBody "h1"
  setProp h1 "innerHTML" "hello world"
```

```hello.html
<!DOCTYPE html>
<html>
<body>
<h1></h1>
<script src="hello.js"></script>
</body>
</html>
```

以下のようにコンパイルします。

```bash
$ hastec hello.hs
```

ブラウザを開いて確認します。

![](https://qiita-image-store.s3.amazonaws.com/0/31613/82bb291f-fb4b-bf67-c948-b8938a5dfaac.png)
ファイル作成時に途中のディレクトリが存在しなくても作成してくれるメソッド

あるファイルを作成したいといった場合に、素直にtouchなんかでファイルを作成したくても途中のディレクトリが存在しないためエラーになってしまうということがあったりします。
なので、パスに含まれるディレクトリの存在をチェックし、無ければ合わせてそのディレクトリも作成するメソッドを作ってみました。

ファイルまたはディレクトリの両方を作成できますが、ディレクトリを作成したい場合は引数のパスの最後に/をつける必要があります。
/path/to/barならbarファイルができますが、/path/to/bar/ならbarディレクトリを作成します。

```php
function createFile($file)
{
    // ファイルが既に存在する場合
    if (!empty($file) && is_readable($file)) {
        return true;
    } else {
        // 最後がスラッシュで終わる場合
        if (substr($file, -1) === '/') {
            return mkdir($file, 0777, true);
        } else {
            $path = pathinfo($file);
            // ディレクトリがあればファイルだけ作成、無ければディレクトリ＋ファイルを作成
            return is_readable($path['dirname']) ? touch($file) : (mkdir($path['dirname'], 0777, true) && touch($file));
        }
    }
}
```
goでLチカの練習　その３

go-statemachineを使って見ました。

```
package main
import (
	"fmt"
	"time"
	"github.com/dpapathanasiou/go-statemachine"
)
func A(val0 interface{}) (nextState string, nextVal interface{}) {
	val := val0
	nextState = "yellow"
	nextVal = val
	time.Sleep(500 * time.Millisecond)
	fmt.Println("green on")
	time.Sleep(500 * time.Millisecond)
	fmt.Println("green off")
	return
}
func B(val0 interface{}) (nextState string, nextVal interface{}) {
	val := val0
	nextState = "red"
	nextVal = val
	time.Sleep(500 * time.Millisecond)
	fmt.Println("yellow on")
	time.Sleep(500 * time.Millisecond)
	fmt.Println("yellow off")
	return
}
func C(val0 interface{}) (nextState string, nextVal interface{}) {
	val := val0
	nextState = "green"
	nextVal = val
	time.Sleep(500 * time.Millisecond)
	fmt.Println("red on")
	time.Sleep(500 * time.Millisecond)
	fmt.Println("red off")
	return
}
func main() {
	m := statemachine.Machine{map[string] statemachine.Handler {}, "green", map[string] bool {}}
	m.AddState("green", A)
	m.AddState("yellow", B)
	m.AddState("red", C)
	m.AddEndState("out")
	m.Execute(1.0)
	fmt.Println("ok")
}
```
Mac OS XにLaravel5.1に必要なPHP5.5.9ともろもろをインストール

自分が最低限必要だと思うものだけをインストールしました。

1. MySQL database
2. php55-mcrypt
3. php55-mbstring
4. php55-mysql
5. php55-openssl

上記のものをMac OS Xにインストールする時の過程を記録したいと思います。

### Step 1 : MySQL データベース

https://dev.mysql.com/downloads/mysql/ からDMG Archiveをダウンロードしました。

そのご、インストーラーの指示に従ってインストールを行いました。

![スクリーンショット 2015-06-17 午後1.43.01.png](https://qiita-image-store.s3.amazonaws.com/0/60849/741d6038-f4de-d29e-f4ce-384a31886bf7.png)

しかし、環境変数の設定を行ってくれませんでしたので、次のようにsymbolic linkを作りました。

```
ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql
```

インストールが完了したらmysqlサーバーを起動しました。システム環境設定からMySQLを選択し、サーバーを起動しました。

![あ.png](https://qiita-image-store.s3.amazonaws.com/0/60849/2a64525a-7fde-8fad-debd-5376239f4353.png)


### Step 2 : MacPortsのインストール

MacPortsというmac os xにオープンソースアプリケーションをダウンロードしたり、コンパイルしたりするアプリケーションです。今回はそれを使って簡単にphpとそれらのextensionをインストールしました（ググッたらportを使うことがすごい勧められたのでこの方法でやりました）。

https://www.macports.org/install.php

HPのinstructionに従いましたが、yosemiteの場合はXCodeをさえインストールすればxcode command line toolsのインストールは不要になります。

### Step 3 : PHPと拡張子をインストール

MacPortsをインストールしたら、次のコマンドでPHPと拡張をインストール

```
sudo port install php55-mbstring php55-mcrypt php55-mysql
```

インストールしたら、次のようにconfigurationを行いました。

![スクリーンショット 2015-06-17 午前10.24.46.png](https://qiita-image-store.s3.amazonaws.com/0/60849/30c19ab5-320a-0692-45d1-2558572e075b.png)

![スクリーンショット 2015-06-17 午前10.25.18.png](https://qiita-image-store.s3.amazonaws.com/0/60849/258d1ce9-e1fb-23cb-abbe-7a2ab9da8936.png)

まず、/opt/local/etc/php55.php.ini-developmentを/opt/local/etc/php55.php.iniに名前変更しました。そして、`mysqladmin variables`でsocketのパスを確認します。私の場合は`/tmp/mysql.sock`にありました。

 php.iniを開いて、上記に書いてある３項目を/tmp/mysql.sockに格納します。
Cake3 自分用メモ(Controllerに直接SQLを書く方法)

Controllerに直接SQLを書く方法

```
<?php
namespace App¥Controller

use Cake\Datasource\ConnectionManager;

class HogeController extends AppController
{
    public function index()
    {
         $conn = ConnectionManager::get('default');
         $results = $conn->query('SELECT * FROM articles')->fetchAll('assoc');

```

参考
http://book.cakephp.org/3.0/en/orm/database-basics.html
YiiのActiveFormサブミットを確認ダイアログ付きにするjQueryプラグイン

Yii で削除リンクなどに使われるあの「本当に実行しますか」の確認ダイアログを通常のフォームサブミットにも使いたいので jQuery プラグインを書きました。Yii 2.0.* 専用です。

```js:confirm-before-submit.js
(function($) {
    $.fn.confirmBeforeSubmit = function(options) {
        options = $.extend({
            message: "本当に実行しますか。"
        }, options);

        this.each(function() {
            var $button = $(this);
            var $form = $button.closest('form');

            var confirmed = false;
            var message = options.message;

            $button.on('click', function (event) {
                confirmed = false;
            });
            $form.on('beforeSubmit', function () {
                if (!confirmed) {
                    var data = $form.data('yiiActiveForm');
                    yii.confirm(message, function () {
                        setTimeout(function(){
                            confirmed = true;
                            data.validated = true;
                            $form.submit();
                        }, 1);
                    });
                    //data.validated = false;
                    return false;
                } else {
                    return true;
                }
            });
        });
    };
})(jQuery);
```

使い方

```php
<div class="form-group">
    <?= Html::submitButton($model->isNewRecord ? '作成する' : '保存する', [
        'class' => $model->isNewRecord ?
            'btn btn-success submit' :
            'btn btn-primary submit',
    ]) ?>
</div>
<?php if ($model->isNewRecord) {
    $this->registerJs(
"jQuery('.forum-form form .submit').confirmBeforeSubmit({
    message: 'なにか作成しようとしています。本当によろしいですか?'
});"
    );
} ?>
```

「作成する」ボタンをクリックすると:

![confirm-before-submit.png](https://qiita-image-store.s3.amazonaws.com/0/11525/50902b42-8033-34b3-b3b9-772733e9e6f9.png)

[Yii2の削除確認ダイアログをかっこ良くする](http://qiita.com/tanakahisateru/items/be28b7bed4566ce8fa99) と合わせて使うと効果的ですね。
Dreamweaver CC 2015のJavaScriptの警告が鬱陶しい場合

アプリケーション > Adobe Dreamweaver CC 2015 > configuration > JS.jshintrc

上のファイルを開いて21行目の

    "strict"        : true,     

これをfalseにすれば良いっぽい。


2015年6月19日追記

上に書いたようなことをせずとも、アプリケーションのメニューから
**環境設定＞構文チェック＞JS＞変更を編集及び適用**
で同じファイルをいじれました。
教えてくださった方、ありがとうございます！
Yahooショッピングのプロダクトカテゴリの更新更新の事前通知について

Yahoo デベロッパーネットワーク様

Yahooショッピングのプロダクトカテゴリに関しまして質問がございます。

カテゴリ変更のご連絡(PDFの配布など)が、2014年で止まっているように見えますが、現在でも変更される場合の事前連絡等はまだございますでしょうか？
連絡等がない場合、変更されることを事前に確認するにはどのような手段がありますでしょうか？

以上、ご回答の程よろしくお願いいたします。
Yahooショッピングのプロダクトカテゴリの更新タイミングについて

Yahoo デベロッパーネットワーク様

Yahooショッピングのプロダクトカテゴリに関しまして質問がございます。

プロダクトカテゴリの更新の頻度と時期について何かルールなどはありますでしょうか。
ございましたらご教授いただけると幸いです。
例）「3ヶ月おきでの更新」など…

以上、ご回答の程よろしくお願いいたします。
Yahooショッピングのプロダクトカテゴリの整合性について

Yahoo デベロッパーネットワーク様

Yahooショッピングのプロダクトカテゴリに関しまして質問がございます。

特定のカテゴリIDを用いてカテゴリID取得APIを実行した場合のカテゴリ階層と、YahooストアクリエイターProのプロダクトカテゴリの設定の際の検索で取得したカテゴリ階層で、差分があるように見受けられます。

例(カテゴリID：1576)
カテゴリID取得API
　⇒ベビー、キッズ、マタニティ > キッズ用品 > バッグ(子どもバッグ) > その他
YahooストアクリエイターPro
　⇒レディースファッション > バッグ > ショルダーバッグ > その他

上記の事象のため、Yahooショッピングでの売り上げの分析のために、YahooショッピングAPIを用いてデータを取得すると求めているカテゴリの売り上げとして集計ができない状態です。

同じカテゴリIDで取得できる階層に違いがあるのはなぜなのでしょうか。

また、それぞれの方法で取得した階層が仕様通りの場合、YahooストアクリエイターProと同一のプロダクトカテゴリのデータを、APIで取得するにはどのようにすればよろしいのでしょうか？

以上、ご回答の程よろしくお願いいたします。
systemdの.serviceファイルで、実行ユーザーを指定する

なんだかすぐに見つからなかったので、
自分用に書いておく。

実行時のユーザ、グループは、
Serviceセクションに
User=ユーザ
Group=グループ
で指定できる。

```
[Unit]
Description=My Daemon

[Service]
ExecStart=/myhome/scripts/run.sh
ExecStop=/bin/kill ${MAINPID}
Restart=always
Type=forking
User=myuser
Group=mygroup

[Install]
WantedBy=multi-user.target
```
Qiitaで特定のユーザーの記事を検索する

自分の書いた記事から絞り込んで調べたかった。検索猿人にGoogleを使ってるひと向けです＞＜

1. ユーザーのページを開く<br>![Open User's page](https://qiita-image-store.s3.amazonaws.com/0/4121/9f355a9c-7ace-87fe-a4da-2d9525907473.png)
2. ブラウザの検索の先頭に`site:`、その後に検索キーワードを入力する<br> ![スクリーンショット 2015-06-17 午後2.56.19.png](https://qiita-image-store.s3.amazonaws.com/0/4121/b80eab89-f331-6e15-35a0-ecb406da555a.png)
3. 検索できる！<br>![スクリーンショット 2015-06-17 午後2.57.10.png](https://qiita-image-store.s3.amazonaws.com/0/4121/8deb965f-9da8-12fe-01b9-5a64ca4beeaf.png)
gitでいつ誰が作ったブランチなのかを知る方法

放置していたレポジトリによく分からないブランチがあったときに、誰がいつ作ったものかが知りたくて色々と調べたら、[Find out git branch creator](http://stackoverflow.com/questions/12055198/find-out-git-branch-creator)にその方法が書いてありました。以下のような方法で取得することができます。

コマンド実行：

```bash
$ git for-each-ref --format='%(committerdate) %09 %(authorname) %09 %(refname)' | sort -k5n -k2M -k3n -k4n
```

結果：

```
Mon Jul 15 15:45:10 2013 +0800 	 Cheng Zhao 	 refs/tags/v0.1.0
Wed Jul 17 10:57:25 2013 +0800 	 Cheng Zhao 	 refs/tags/v0.1.1
Thu Jul 18 18:37:40 2013 +0800 	 Cheng Zhao 	 refs/tags/v0.1.2
Thu Jul 18 19:21:25 2013 +0800 	 Cheng Zhao 	 refs/tags/v0.1.3
Tue Jul 23 11:59:07 2013 +0800 	 Cheng Zhao 	 refs/tags/v0.1.4
Tue Jul 23 15:29:56 2013 +0800 	 Cheng Zhao 	 refs/tags/v0.1.5
Fri Jul 26 16:40:29 2013 +0800 	 Cheng Zhao 	 refs/tags/v0.1.6
Fri Jul 26 19:52:47 2013 +0800 	 Cheng Zhao 	 refs/tags/v0.1.7
Mon Jul 29 20:50:03 2013 +0800 	 Cheng Zhao 	 refs/tags/v0.1.8
...
```
heroku toolbeltがインストールできない gpgエラー

# 0 環境
- ubuntu 14.04 64 bit

下記のインストールコマンド実行中に

```shell-session

wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh

```

以下の様なエラーが出た場合、

```shell-session

E: GPG エラー: http://toolbelt.heroku.com ./ InRelease: クリアサインされたファイルが有効ではなく、'NODATA' を得ました (認証にネットワークが必要?)

```

# 1 対処
/etc/apt/sources.list.d/heroku.listのhttpをhttpsに変更する。

# 2 参考
http://stackoverflow.com/questions/19194283/heroku-toolbelt-ppa-update-check-failing
CentOS7 PROXY設定いろいろ（逐次追加）

Proxyに阻まれる都度メモしていきます。
proxyのアドレスは`http://proxy.yourhost:8080`としています。ユーザー名、パスワードが必要なときは`http://username:password@proxy.yourhost:8080`としてください。

##yum

```text:/etc/yum.conf
proxy=http://proxy.yourhost:8080
proxy_username=user
proxy_password=pass
```

##apt-get
updateのときに、キャッシュ使わないようにNo-Cache設定したほうが良いらしい。

```text:/etc/apt/apt.conf
Acquire::http::proxy "http://proxy.yourhost:8080/";
Acquire::https::proxy "http://proxy.yourhost:8080/";
Acquire::http::No-Cache "true";
Acquire::https::No-Cache "true";
```

##curl
```
curl -x http://proxy.yourhost:8080 -L http://targeturl
```

設定ファイルを作成する場合

```text:.curlrc
proxy = http://proxy.yourhost.8080/
```

##npm
```
npm config set proxy http://proxy.yourhost:8080
npm config set https-http://proxy proxy.yourhost:8080
```

`sudo npm install -g hogehoge`をするときは`-g` でproxyを設定する

```
npm config -g proxy http://proxy.yourhost:8080
npm config -g https-proxy http://proxy proxy.yourhost:8080
```

##cf

```
export HTTP_PROXY=http://proxy.yourhost:8080
```

#git

```
git config --global http.proxy http://proxy.yourhost:8080
```

#ruby gem
環境変数を使う

```
export HTTP_PROXY=http://proxy.yourhost:8080
```

またはパラメータ`-p`を使用する

```
gem install pkgs -p http://proxy.yourhost:8080
```

#python pip

パラメータ`--proxy`を使用する。

```
pip --proxy=http://proxy.yourhost:8080
```
基本文法（繰り返し処理）

##繰り返し処理
繰り返しには`for`と`while`、`do while`がある。

|繰り返し構文|説明|
|---|---|
|for|繰り返しの回数があらかじめ決まっている場合（配列の繰り返し）におすすめ|
|while|繰り返し回数があらかじめ決められない場合におすすめ|
|do while|必ず最初の1回は繰り返し処理を実行させたい場合に利用|

##for
`for`は条件が真の間だけ与えられた文の実行を繰り返すというループを記述するための文である。

###構文

```
for( 初期化式; 条件式; 増減式 ){
    //繰り返し処理
}
```

##while
`while`文は`()`の条件が`true`であり続ける間ループする。
※間違えると無限ループになるので要注意。

```js
var i = 0;
while ( i < 10 ) {
    document.write( i + '<br/>' ) ;
    i ++ ; // これをいれないと無限にループする
}
```

###do while
`do while`は少なくとも1回は実行され、`()`の条件が`true`であり続ける間ループする。

```js
do {
   i += 1;
   document.write(i);
} while (i < 5);
```

###break（処理の中断）
`for`や`while`は条件が`true`の間繰り返し処理するが、途中で中断することもできる。
中断したい箇所で`break`を入れると中断する。

```js
var mnt = new Array("富士山","白根山","奥穂高岳","間ノ岳","槍ヶ岳");
for(var i=0 ; i < mnt.length; i++){
    document.write( mnt[i] + '</br>');
    if(mnt[i] == "間ノ岳"){
        break; // 繰り返し処理を中断
    }
}
```

###continue（次の処理に移動）
繰り返し処理の中で`continue`を指定すると、それいこうの処理は実行せずに次の繰り返し処理に移動する。
`for`、`while`、`do while`、`for if`の中でしか使用することはできない。
Atomを使って感じた、やっぱりSublime Textが良い理由


GitHub社の内製アプリとして、フリーで公開されているAtomエディタ。
長いことSublime Textの評価版を使ってきて、
そろそろライセンスを購入しようかと思ったときにその情報を得て、
乗り換えるつもりで使ってみたときの評価メモ。

## Atomの優れている点

* 日本語との親和性がSublime Textより高い
  - Windows版のインライン入力・変換
  - Shift-JIS,EUC-JPエンコーディングへの対応
* gitとの連携機能がデフォルトである
* Markdown(GFM)の入力・プレビューに標準対応

GitHub社謹製ということもあり、デフォルトでもGitHubとの親和性は抜群。
もちろん、パッケージでさらに拡張することもできます。

Markdownについては、Sublime Textでゴニョゴニョするには
色々なパッケージを駆使してようやく到達できるところだったりするので、
標準で対応かつChromiumベースを活かしたライブプレビューが出来るのは
Atomの大きな強みに感じました。

## Atomの良くない点

* 起動が遅い、プチフリーズ頻発、メモリ食いすぎ
* フォント周りの設定が弱い

Atomは決して軽くないエディタです。
スペックの低いPCで使うには厳しいです。
低スペックPCでAtom使うくらいなら多少重くてもIDE使った方がマシです。

私の場合、職場の低スペックPCで重いIDEを使うのにウンザリして
それなりに軽いエディタとしてSublime Textを使っていたので、
その経験をして「IDEの方がマシ」というのは、そういうことです。

ただしこれはあくまでクソスペックPCで動作させる前提がある上での個人の感想です。
それなりのスペック（SSDと8GB RAM程度）のPCであれば重さもそれほど気にならないですし、
今後のアップデートで改善される気配もあるらしいので、
今後もSublime Textの良きライバルなんじゃないかと思います。

## 他と比較してわかった、Sublime Textの評価している点

* マルチプラットフォーム ⇒ 自宅のMacでも職場のWindowsでも使える
* 設定ファイルがJSON（テキスト） ⇒ 設定情報が共有しやすい
* クソスペックPCでもそれなりに動く ⇒ 職場で使うには超重要事項
* パッケージによる拡張性 ⇒ 環境に合わせてチューニング可能
* ライセンスが個人に紐付く ⇒ 個人利用であれば商用でも利用OKは助かる

## と、いうわけで

いかに自分にとってSublime Textが使いやすいエディタなのかを
Atomへの乗り換えを検討したことによって逆に再認識させられました。
Sublime Textのライセンス買いました。
Android端末で、YouTubeのパラメータ「controls=0」を設定した際の落とし穴


Youtube APIのパラメータの１つであるcontrolsは、
動画の再生ボタンや音量ボタン、シークバー等を表示するかしないかを設定できるものである。

このパラメータに0を設定することで、それらのUIを非表示にすることができ、
動画だけをシンプルに見せたい場合などに有用である。

しかし、Androidでこれを使うといくつかのバグがある。
まず、動画上をタップしたときに再生・停止を切り替えられる機能がYouTubeにはあるが、
これが効かなくなる。
標準UIも非表示の状態であるため、 **動画を再生すると停止させる手段がなくなってしまう**ことになる。

そしてさらに、いくつかの端末において動画がなぜかフレーム内に一回り小さいサイズで表示されるというバグも確認されている。

これらのことより、Android端末の場合はYouTubeパラメータのcontrolsを0にするのは避けたほうが良い。
デベロッパーネットワークトップ > 開発のヒント > エラーメッセージおよびコード　について

エラーメッセージおよびコード
で以下の様に返るとなっていますが、

array(
    'Error' =>  array(
        'Message' => '(error message)'
    )
);
   

以下のように返って来る場合もあります、

array (
  'Message' => 'サーバがメンテナンス中です。,
  'Detail' => '',
  'Code'=> 'ed-00002'
);

一貫性がなく適当で辛いです、、、
JAXA Open APIの使い方

# JAXA Open APIの使い方

下記URLからAPIの使用申請を行います。
個人的な利用に関しては無料で使用できます。
http://www.satnavi.jaxa.jp/jaxa_api_competition/

### リクエストURL

```
https://joa.epi.bz/api/[A][B]
```

- **A: 物理量指定文字列（以下参照）**
- **B: all（全て） もしくは avg（平均値）**

###### 例：
```
https://joa.epi.bz/api/prcavg
```


### リクエストパラメータ

| パラメータ | フォーマット | 必須項目 | 説明 |
|----------|------------|:-------:|-----|
| lat      | 数値        | ○      | 緯度（度）-90.0 から＋90.0 |
| lon      | 数値        | ○      | 経度（度）-180.0 から+180.0 |
| date     | 文字列      | ○      | 日付（YYYY-MM-dd） |
| format   | 文字列      |        | XML(defaut)、JSON、JSONP が選択可能 |
| token    | 文字列      | ○      | 申し込み後、JAXA から配布される文字列 |
| range    | 数値        |        | データ取得範囲の指定。0.1(度)以上の値を設定できる。デフォルトは 0.1 |
| callback | 文字列      |        | JSONPを使用する際のコールバック関数名を指定できます。デフォルトは“callback” |

### 物理量一覧

| 物理量    | 指定文字列 | レスポンス形式 | 数値の例[単位] |
|----------|-----|-----|------------------|
| 日降水量  | prc | 数値 | 1.500[mm/day] |
| 海面水温  | sst | 数値 | 23.840[℃] |
| 海上風速  | ssw | 数値 | 10.94[m/s] |
| 土壌水分量 | smc | 数値 | 40.800[%] |
| 積雪深    | snd | 数値 | 26.400[cm] |

- 物理量+allの場合は、複数の地点の物理量を全て返します。
- 物理量+avgの場合は、複数の地点の物理量の平均値を返します。

***

### メモ

- avg（平均値）を求める場合はrangeパラメータが必要。

***

### sample:指定地点の物理量（日降水量）を調べる場合

###### URL

https://joa.epi.bz/api/prcavg?token=[TOKEN]&date=2012-08-01&lat=30.2&lon=130.5&range=1.0

##### Description

2012年8月1日の北緯30.2度、東経130.5度付近の一日当たりの日降水量（prc）を調べるためのリクエストの例です。

***

### sample:指定範囲の物理量（日降水量）をすべてJSONにて取得する場合

###### URL

https://joa.epi.bz/api/prcall?token=[TOKEN]&date=2012-08-01&lat=30.2&lon=130.5&range=1.0&format=JSON

##### Description

2012年8月1日の北緯30.2度、東経130.5度を中心として、北緯29.1度~31.2度、東経129.5度~131.5度の間の観測点の日降水量をJSON形式で全て調べるためのリクエストの例です。

***

### sample:指定範囲の物理量（海面温度）をすべてJSONPにて取得する場合

###### URL

https://joa.epi.bz/api/prcall?token=[TOKEN]&date=2012-08-01&lon=130.0&lat=40.0&format=jsonp&callback=joa_callback

##### Description

2012年8月1日の北緯40.0度、東経130.0度を中心として、北緯39.9度~40.1度、東経139.9度~140.5度の間の観測点の海面温度をJSONP形式で全て調べるためのリクエストの例です。コールバック関数名は“joa_callback”と指定しています。

***

### sample:積雪深を検索したが、指定した範囲に有効な物理量が無かった場合

###### URL

https://joa.epi.bz/api/sndall?token=[TOKEN]&date=2012-08-01&lon=130.0&lat=40.0

##### Description

2012年8月1日の北緯40.0度、東経130.0度を中心として、北緯39.9度~40.1度、東経139.9度~140.5度の間の観測点の積雪深を調べています。しかし海の上なので、雪は積もっていません。

***

詳しくは公式のドキュメントをご覧下さい。
http://www.satnavi.jaxa.jp/jaxa_api_competition/file/how_to_use.pdf