OmniAICreator/Qiita-1.07M huggingface dataset:
photon server SDK + photon SDK Cocos2d-x( iOS SDK ) v4.0.0.5 でデモを動かす

## photon Server SDK を動かす

こちらのサイトを参考にさせて頂いております。
[複数台構成でのPhoton Serverのインストール](Photon Official Blog":http://blog.photoncloud.jp/server-loadbalancing-install/)

0. ダウンロード<br>
[Download Photon Server SDKs](Exit Games: Multiplayer Game Backends and Services":https://www.exitgames.com/en/OnPremise/Download) から、photon server SDKをダウンロード
0. exeをダブルクリックしてインストール
0. Controllerの起動<br>
exeを実行すると、deployというフォルダが作成され、その中にphoton server sdk一式が入っています。<br>
その中にbin_Win32などのフォルダがあるので、自分の環境に合わせて選択し、PhotonControl.exeをダブルクリック<br>
すると、タスクトレイに輪っかのようなphotonのアイコンが表示されます。
0. Defaultを起動して動作チェック<br>
アイコンをクリックするとメニューが出るので、<br>
Default -> Start as application をクリック<br>
しばらく待ってから、Default -> Run Testclient(Default) をクリック<br>
コマンドプロンプトが表示され、つながっている感じのログが出たら成功です。
0. Photon serverの停止
Default -> Stop application をクリック<br>
0. ログをしっかり確認する<br>
Open Logs をクリックすると、BareTailが起動しログの確認をすることができます。<br>
状況確認するために必要になるので、起動しておいて損はないと思います。<br>
存在するログファイルの更新はしますが、新しく追加されたログは表示しませんので、<br>
足りないなーと思ったら、photonを動かしてから、Open Logsをクリックすると良いかと思います。
0. LoadBalancingを動かす前に、ポートの開放<br>
手元に、すぐ書ける資料が無いので、一旦割愛。<br>
(windows firewallでしたら、photonのグループ設定をonにするだけで良いはずです。)
0. game1、game2の設定<br>
photon server のロードバランス機能が初期設定されているので、それを利用します<br>
今回は、1台のマシンでmaster,game1,game2を動かします。<br>
deploy/Loadbalancing/GameServer1(or 2)/bin/Photo.LoadBalancing.dll.config
を開き、<br>
MasterIPAddress、PublicIPAddressで、127.0.0.1となっている部分を、自分のマシンのIPに書き換えて保存<br>
0. LoadBalancingを起動して確認<br>
タスクトレイアイコン -> LoadBalancing(MyCloud) -> Start as application をクリック
しばらく待ってから(または、BareTailでログを見て、サーバの起動が確認できてから)
タスクトレイアイコン -> LoadBalancing(MyCloud) -> Run Testclient(LoadBalancing) をクリック<br>
Debugの時と同じく、コマンドプロンプトが表示され、テストが実行されます。<br>
いろいろログが出て、最後の行にこんなかんじのログが出ていればOKです<br>
<Br>
MASTER: GameLIst event received. Currently: 5 Games visible<br>
[3052] Started game HOST_NAME(3052)5 with 3 clients

## Photon SDK Cocos2dx-x v4.0.0.5 で先ほどのLoadBalancingに接続する

### ダウンロード

[Download Photon Server SDKs](Exit Games: Multiplayer Game Backends and Services":https://www.exitgames.com/en/OnPremise/Download)
iOS SDK v4.0.0.5 をダウンロードしました。

### Demoを動かす

xcodeのインストールや設定は割愛します

0. ダウンロードしたファイルを解凍
0. Photon-iOS-Sdk_v4-0-0-5/Demos/demo_loadBalancing/iPhone/demo_iPhone_loadbalancing_cpp.xcodeproj をダブルクリック
0. URLの設定<br>
109行目辺りの mLoadBalancingClient.connect();は、<br>
このままでは、本家のサーバにつないでしまいますので、以下の様に書き換え。<br>
mLoadBalancingClient.connect(L"YOUR_HOST_ID", ExitGames::LoadBalancing::ServerType::MASTER_SERVER);
0. 実行<br>
これで実行すると先ほど設定したサーバとやりとりをして、部屋を作ったり、入ったりすることができます。

### トラブルシュート

0. エラーコード 1039, 1040, 1023 がでる<br>
原因はホストに繋ぐことができていないエラーです。<br>
だいたい以下の問題でした。<br>
・IPが間違っている(ipのみで、ポートやhttpはいりません)<br>
・サーバ側のファイアウォールは解除されていない<br>
・photonserverは起動していない<br>
・ネームサーバにつないでしまっている<br>
　connectで、ipを指定しますが、defaultでは、ネームサーバにつないでしまいます。<br>
　ExitGames::LoadBalancing::ServerType::MASTER_SERVER を指定しましょう。
TitaniumでiPhone実行時に画面が小さくなってしまう問題への対処

最初は正常だったのに、開発途中で何故か縦幅が小さくなってしまい、上下に黒いエリアが出来てしまった。

どうも、対象のスプラッシュスクリーン画像を消してしまったのが問題のようで、 `Default-568h@2x.png` を作りなおして配置したら戻った。

Alloyを使ってなかったからか、バージョンが古かったからか、iOSのバージョンが上がったからかは解らないが、前は無くても動いてた気がする。
iOS Safari で iframe を配置したページに戻ると初回しか onpageshow が発生しない

iOS Safari などのブラウザで戻るボタンやスワイプなどの操作を使ってページを戻った場合、表示にはキャッシュが使用されます。

参考：[戻るボタンが押された際、ページのJavaScriptを途中の状態から実行させない方法 » nmi.jp](http://nmi.jp/archives/273)

このとき、例えば2重押下防止のためにボタンを `disabled` にしてたり画面全体に `div` を広げてたりした場合、その状態まで復元されてしまい困ります。そんなときには `onpageshow` というイベントを使用することでページの表示を検知して元の状態に戻すのが定石です。

ところが、ページ遷移 ⇒ 戻る(A) ⇒ ページ遷移 ⇒ 戻る(B) と操作したときに (A) では `onpageshow` が発生するのに (B) では発生しない、という現象に遭遇しました。

以下が再現できるミニマムコードです。iOS 8.2 (Apple Watch 発表直後の最新バージョン)で確認しています。

```a.html
<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
    <body>
        <a href="b.html">aaaaaaaa</a>
        <script>
            window.onpageshow = function() {
                alert('onpageshow');
            };
        </script>
        <iframe></iframe>
    </body>
</html>
```

b.html の中身は何でもいいです。
条件は `iframe` 要素が置かれていること。
これによって 2 回目の戻る以降では `onpageshow` が呼ばれなくなります。

解決方法は……

* `iframe` を置かない
* `onpageshow` で `document.location.reload()` を呼んで再読み込みする

くらいしかわかっていません。

情報お持ちの方はコメントください。
【Compass】 mixin、変数などの便利な記述

# mixin、変数などの便利な記述

## 変数などの呼び出し方

// 変数

```
$_defaultColor: #555555;

↓

html {
  color: $_defaultColor;
}
```

// mixin


```
@mixin buttonBgBlackAndWhiteGradient {
  @include background-image(linear-gradient(#fafbfb, #fafbfb 10%, #f7f7f9 43%, #ebebeb 72%, #f3f1f1));
}

↓

body {
  @include buttonBgBlackAndWhiteGradient;

}
```

/import

```
@import 'partial-general/bg';
```

// 実際のファイル名は、 _bg.scss。なんだけど、_ と .scss は省ける。




## グラデーション

グラデーションを簡単にするmixinです。
明るい色から暗い色へ上下に変化する。
グラデの明るい色と暗い色の2つを指定するのはとても面倒なので、
暗い色の1色だけを()内で指定して、明るい色はlightenで指定します。

指定した色をどのくらい明るくするかパーセントで記述すれば1色だけの指定で済むので便利。
逆にdarkenを使用して明るい色をどのくらい暗くするかを指定するのでもOK。
一番最初にbackground-colorを指定しているのはグラデが使えないIE用の指定になる。

```
@mixin gradient-top-lighten($color:#E8E8E8, $lighten:7%){
background-color: $color;
@include background-image(linear-gradient(lighten($color, $lighten) 0%, $color 100%));
}
```

```
.selecta {
@include gradient-top-lighten(#EEE, 3%);
}
```

## フォントサイズ

相対指定の％やemを使用する場合、
親要素を継承しないCSS3のrem指定使ったフォントサイズを指定するためのmixin。
※IE8以下では使用できないのでpx指定も記述する必要がある。


```
@mixin font-size($size, $base: 16) {
font-size: $size + px;
font-size: ($size / $base) * 1rem;
}

```

```
.selecta {
@include font-size(14);
}
```

## 角丸

border-radiusはmixinで指定しなくてもincludeできるが、
数字を指定する時に(3px)などとpxを指定する必要があったので()内でpxを省いて数字だけ入力できるmixin。
※50%というようなパーセント指定をしたい場合はこのmixinを使わない！

```
@mixin border-radius($radius) {
-moz-border-radius: $radius + px;
-webkit-border-radius: $radius + px;
-o-border-radius: $radius + px;
-ms-border-radius: $radius + px;
border-radius: $radius + px;
}
```

```
.selecta {
@include border-radius(3);
}
```

## 変数

主にカラーなどを指定
カラーの指定は各自でカラーコードを入れておく。

```
$black:#333;
$white:#FFF;
$gray:#666;
$green:#4C9020;
$blue:#0467AF;
$pink:#DF5291;
$yellow:#E1930F;
$orange:#D5530A;
```

```
.selecta {
color: $gray;
}
```
変数や関数の名前がいつの間にか分かりにくくなる問題

**TL;DR**: 変数や関数を追加するときは、周りにある他の変数や関数の名前を修正すべきでないか検討せよ

-----

いきなりですが問題です。あるソフトウェアモジュールに以下の三つの関数があります。

- show
- showWithSlideAnimation
- showWithoutAnimation

画面をスライドさせながら出現させるにはどの関数を使用すれば良いでせうか? 関数の名前だけを見て答へてください。

はい、その通り。showWithSlideAnimation が正解です。

では、画面をアニメーションなしで出現させたい場合はどの関数が良いでせうか?

はい、showWithoutAnimation が正解ですね。

今度は、画面を回転させながら出現させたいとします。適する関数はあるでせうか?

ブーーーッ! 残念、正解は「どの関数も適さないので新しく関数を実装する必要がある」でした。

これで最後です。画面をフェードイン効果で出現させたい場合はどの関数がよいでせう?

なんと、今度は show が正解でした!

-----

理不尽な問題だと感じましたか? もし、フェードイン効果を持つ関数が show ではなく showWithFadeAnimation などと命名してあれば、きっと誰もが全問正解できたでせう。実際のところこの様な分かりにくい名前の関数群 (あるいは変数群) は長い間メンテナンスされてきた歴史あるコードの中にしばしば登場します。バージョン管理システムの履歴を辿ると、例へば以下の様な経緯が露呈します。

1. 始めは、画面の表示の仕方について仕様書に厳密な指示がなかった。とにかく画面を表示させることだけ指示されたので、表示処理を行ふ関数を一つ作った。このとき関数を単純に show と命名した。
1. 実装を完了し動作させてみたところ、画面の出現の仕方が味気ないとの意見が聞かれた。仕様が変更され、画面が出現する際にフェードイン効果を適用することとなった。これに伴って show 関数の内部実装もフェードイン効果を適用するコードに変更された。
1. 数箇月後、客から新しい画面を追加して欲しいとの要望が来た。しかし新しい画面の表示にはフェードイン効果ではなくスライドアニメーションを使用して欲しいとのこと。show 関数を流用することができないので、新しく showWithSlideAnimation 関数が追加された。
1. さらにその後、別な画面を追加して欲しいとの要望。今度はアニメーションなしで表示する様にとのこと。show 関数も showWithSlideAnimation 関数も流用できないので、新たに showWithoutAnimation 関数が作られた。

単に仕様書の内容を実装する観点では、上記の各項目ごとになされてきた関数の追加・変更の仕方はごく自然に見えます。ところが、最終的な全体の結果を見てみると、show 関数だけが他の二つの関数と異なって分かりにくい名前を持つ様になってしまいました。どうしてでせうか。

そもそもの誤りは、showWithSlideAnimation 関数を追加した時に show 関数を改名しなかったことです。show と showWithSlideAnimation の二関数は、(実装された挙動が対照的であるにも拘らず) 明らかに命名が対照的ではありません。この時点で、 show 関数は showWithFadeAnimation などと改名されるべきでした。

この様な名前の非対称性の問題は、コーディングやコードレビューにおいてしばしば見逃されます。コーダーもレビューアーも新しく追加する機能だけに気を取られて、新しいものと既存のものを併せたコード全体の整合性に目を向けないからです。

この問題を機械的に解決する方法は、私には思ひ浮かびません。コーダーやレビューアーが都度気を付けるしかないでせう。

**まとめ:**

- 関数の中にローカル変数を追加するとき、他の変数の名前を再検討せよ
- モジュール (クラス、インターフェース、etc.) の中に関数 (メソッド) を追加するとき、他の関数の名前を再検討せよ
- モジュールを追加するとき、同じ名前空間にある他のモジュールの名前を再検討せよ
JerseyでMessageBodyProviderNotFoundExceptionが出ちゃった時。にProvider作らず楽に解決する


おそらくこちらと同じケースだと思うのですが、
[Jerseyで、MessageBodyProviderNotFoundExceptionが出ちゃった時。](http://qiita.com/ukiuni@github/items/
b2e9d4ed2bebefb1bf0a)

@Produces(MediaType.APPLICATION_JSON)とか指定したところにアクセスすると "MessageBodyWriter not found for media type=application/json" って出てしまう症状でしょうか。

もちろんProviderを作ってもよいのですが、「それすらめんどくさい！」っていう人は以下のようにMOXyとJacksonを組み合わせてしまうのが楽です。具体的には jersey-media-moxy と jersey-media-json-jackson を突っ込みます。

gradleだとこんな感じです。

```build.bradle
dependencies {
 ...
 
    compile('org.glassfish.jersey.media:jersey-media-moxy:2.17')
    compile('org.glassfish.jersey.media:jersey-media-json-jackson:2.17')
}
```

私の場合はMyBatis Generatorで自動生成したentityを突っ込んだらこれでコケてました。
GASで無名関数を実行する


GoogleAppsScriptをCoffeeScriptで書くときのバッドノウハウ

# 実行する関数を選びたい。

空のスクリプト作って・・・

![無題のプロジェクト.png](https://qiita-image-store.s3.amazonaws.com/0/18700/4d71e0fc-a8da-69d1-e60a-384bd09cd0f9.png "無題のプロジェクト.png")

CoffeeScript書いて・・・

``` hoge.coffee
@func1 = () ->
  Logger.log "func1 called!"

@func2 = () ->
  Logger.log "func2 called!"

```

コンパイルして貼っつける。

![無題のプロジェクト.png](https://qiita-image-store.s3.amazonaws.com/0/18700/f4d3e8b9-d43b-b50d-a73e-3abdc8d96640.png "無題のプロジェクト.png")

myFunctionしか選べない・・・。

![無題のプロジェクト.png](https://qiita-image-store.s3.amazonaws.com/0/18700/1737ccf9-b77b-c016-f33d-318c87aa97fa.png "無題のプロジェクト.png")

# 実行関数を強引に選ぶ

ダミーの関数を作ってしまえば選べるようになる。

```
function func1(){};
function func2(){};
```

![無題のプロジェクト.png](https://qiita-image-store.s3.amazonaws.com/0/18700/c0c41c27-1c9e-8252-04f6-c8ac1d29ebce.png "無題のプロジェクト.png")

ダミー関数消しても使える。

![無題のプロジェクト.png](https://qiita-image-store.s3.amazonaws.com/0/18700/06baf87a-484d-539f-c7e2-d8f16af1d0f5.png "無題のプロジェクト.png")

実行も出来る。


なぜかは不明・・・。
x10でのファイルIO

x10でのファイル読み込み・書き出しの方法について解説する。

## ファイル読み込み

### 各行ごとに読み込む

Rubyで言う所の `File.open("hoge.txt").each do ... ` という処理をすることを考える。
x10.io.Fileクラスを使用する。
各行ずつ読み込むサンプルは以下の通り。

```x10
import x10.io.Console;
import x10.io.File;

class FileIO {

  public static def main(args:Rail[String]): void {
    val input = new File("test.txt");
    for( line in input.lines() ) {
      Console.OUT.println(line);
    }
  }
}
```

FileクラスはRubyでいうところのFileオブジェクトに近い。（IOオブジェクトではなく）
ファイルやディレクトリのパスのハンドル、絶対パスの取得やディレクトリの作成などファイル操作をメインにするクラス。
しかし `bytes()` または `lines()` というメソッドも提供されており、簡単なファイル読み込みはこのメソッドで行える。

バイナリファイルを読む場合など`FileReader`オブジェクトを使いたい場合には `openRead()` という `FileReader` オブジェクトを返すメソッドを使う。

## CSVの数字列をパースする

以下のようなCSVファイルの数字列をパースするケースを考える。

```data.txt
1.0,2.1,3.5,4.7
5.2,6.4,8.0,2.0
```

方針は、各行ずつ読んで、空白で区切り、数値に変換する。

```FileRead2.x10
import x10.io.Console;
import x10.io.File;

class FileRead2 {

  public static def main(args:Rail[String]): void {
    val input = new File("data.csv");
    val reader = input.openRead();
    var sum:Double = 0.0;
    for( line in reader.lines() ) {
      val a: Rail[String] = line.split(",");
      for( word in a ) {
        val d = Double.parse(word);
        Console.OUT.println(d);
        sum += d;
      }
    }

    Console.OUT.println(sum);
  }
}

```

## ファイル書き出し

Fileオブジェクトの `printer()`メソッドでPrinterオブジェクトを取り出す。
appendしたい場合には引数にtrueを指定する。 `printer(true)` 

```
import x10.io.Console;
import x10.io.File;

class FileWrite1 {

  public static def main(args:Rail[String]): void {
    val out = new File("foo.txt");
    val p = out.printer();
    p.println("foo");
    p.println("bar");

    p.printf("%s-%ld-%.3lf\n", "baz", 15, 0.1234);
  }
}
```
c++ builder XE4 > Host byte orderとnetwork byte orderの変換

動作確認

    C++ Builder XE4

Host byte orderの変数をnetwork byte orderに変換したり、その反対の変換をしたい。

# winsock利用

    #inlcude <winsock.h>
    ...
    short ival = 314;
    ival = htons(ival);
    
これで、ivalをHost byte orderからnetwork byte orderにshort型で変換する。


#IdGlobal.hpp利用

    #include <IdGlobal.hpp>
    ...
    short sval = 314;
    sval = LittleEndianToHost(sval);

反対には`HostToLittleEndian()`を使う。

# TIdStack::HostToNetwork()利用

こちらの方法もあるようだが、どういうコードを書けばいいかよくわかっていない。
RailsでMVCを意識してシンプルにCSV出力

# 概要
何番煎じかわかりませんが、Rails で CSV を出力する方法です。

MVC を意識した、できるだけシンプルな実装を心がけました。
さっくり簡単に実装できるように情報をまとめております。

# 参考
- [Rails4になってcsvが出力しやすくなった](http://qiita.com/retosu/items/5bda7bd5a55c20fc89c0)
- [railsでcsv出力する時はviewで整形したほうがわかりやすくない？](http://qiita.com/ichi_s/items/eddf29d62ac09f6f9133)

# 実装
「ユーザ一覧画面に、CSV 出力ボタンを設置」というケースを実装してみます。

## Model
CSV 出力というのはあくまで「出力」であるので、Model への変更は不要です。

## View
CSV 出力用のテンプレートを作成します。
ここに CSV 出力処理を記述していきます。

```ruby:app/views/users/index.csv.ruby
require 'csv'

CSV.generate do |csv|
  csv_column_names = %w(Firstname Lastname Email)
  csv << csv_column_names
  @users.each do |user|
    csv_column_values = [
      user.firstname,
      user.lastname,
      user.email
    ]
    csv << csv_column_values
  end
end
```

### ボタンの設置
ボタンは以下のように設置しました。ボタンの整形に Bootstrap を使っています。

```ruby:app/views/users/index.html.erb
<%= link_to "CSV出力", users_path(format: :csv), class: "btn btn-primary" %>
```

## Controller
format ごとに処理が必要でなければ、特に変更はありません。

```ruby:app/controllers/users_controller.rb
class UsersController < ApplicationController
  def index
    @users = User.all
    
    # format ごとに処理が必要であれば行う
    # respond_to do |format|
    #   format.html { /* html用処理 */ }
    #   format.csv { /* csv用処理 */ }
    # end
  end
end
```

### ファイル名指定
必要に応じて Controller で出力するファイル名を指定できます。

```ruby
respond_to do |format|
  format.csv do
    send_data render_to_string, filename: "hoge.csv", type: :csv
  end
end
```

なんと、これだけで動きます。超簡単！

# まとめ
シンプルな CSV 出力機能は以下の3ステップで実装できます。

1. View に CSV フォーマットへのリンクを追加する。
2. テンプレートに`xxx.csv.ruby`を追加する。
3. 追加した CSV テンプレートに出力処理を書く。

とってもらくちん！
Node.jsでつくるIoT - Part3: OctobluのMeshblu

[Octoblu](http://octoblu.com/)は2014年に設立されたIoT事業者です。同じ年の12月には[Citrixに買収](http://thenewstack.io/citrix-acquires-octoblu-the-drone-networking-company-formerly-known-as-skynet/)されています。IoTプラットフォームの[Meshblu](http://developer.octoblu.com/)では、コネクテッドデバイスと人やWebサービスをリアルタイム通信でつなぐためのプラットフォームと周辺技術の開発をオープンソースで行っています。ソースコードはMITライセンスで[GitHub](https://github.com/octoblu)に公開されています。また、このプラットフォームを使ったサービスも現在[ベータ版](https://app.octoblu.com/invitation/request)で提供を開始しています。


## Pub/Subのマルチプロトコル対応

以前Skynetと呼ばれていたOctobluのプラットフォームはMeshbluに名称変更されました。Meshbluは[Ponte](https://eclipse.org/ponte/)と同じように、HTTP、WebSpocket、MQTT、CoAPといったマルチプロトコルに対応したブローカーを実装しています。MQTTブローカーは[Mosca](https://github.com/mcollina/mosca)なので馴染み深いです。異なるプロトコル同士でPub/Subができると、curlでpublishしてMQTT.jsでsubscribeするとかコネクテッドデバイスとのメッセージ交換が楽しくなります。

## データストア

コネクテッドデバイスのセンサーデータをRedisやMongoDBにストアするAPIもあります。簡単なREST APIのクエリ文字列使って最新の5件を取得したり、期間指定もできます。ストリームにも対応しているのでビジュアライゼーションに重宝しそうです。

## デバイス/ノードの識別

デバイスやWebサービスのノードはuuidとtokenで識別されます。登録済みのデバイスやオーナーに指定したデバイス間でのみメッセージの送受信ができます。MQTTのトピック名の扱いがちょっと特殊なので戸惑いますが、異なるプロトコルでメッセージを交換するためのよく考えられた仕様だと思います。

## Node.js/JavaScriptのSDK

Node.jsやJavaScriptのライブラリが充実しています。[Cylon.jsのアダプタ](http://cylonjs.com/documentation/platforms/skynet/)を使うと簡単にコネクテッドデバイスからセンサーデータを収集したり、イベント駆動なアプリを動かすことができます。ロジックの多くはクラウド上でNode.jsで実装したいので、コネクテッドデバイスからセンサーデータを取得するためのコードを[Cylon.js](http://cylonjs.com/)や[Johnny-Five](https://github.com/rwaldron/johnny-five)で書けると便利です。

ただし、以前のSkynetのパッケージ名が残っていたり、複数あるライブラリによってプロパティ名が異なっていたり、最初は少し混乱します。過渡期みたいなのでもう少しすれば整理されると思います。

## コミュニティ

[hackster.io](http://www.hackster.io/octoblu)に[コミュニティページ](http://www.hackster.io/octoblu)があるのでコネクテッドデバイスとクラウドを連携したサンプルをいろいろ試すことができます。
【PHPMyAdmin】PHPMyAdminのインストール(PHP5.3系, MySQL5.1系のバージョン)


## 前提

* CentOSデフォルトyumでのLAMP環境を想定しています(PHP 5.1.73, MySQL5.1.73)


## PHPMyAdminウェブサイト
【オフィシャルページ】
http://www.phpmyadmin.net/home_page/index.php

【ダウンロードページ】
http://www.phpmyadmin.net/home_page/downloads.php


## PHPMyAdminをインストールするサーバへ接続

	$ cd [Vagrantサーバを構築しているディレクトリ]
	$ vagrant ssh		# サーバへSSHで接続

## PHPMyAdminをダウンロードしてインストール

	$ su - 		# rootユーザに変更
	# cd /opt	# /optディレクトリに移動
	# wget http://downloads.sourceforge.net/project/phpmyadmin/phpMyAdmin/4.0.10.9/phpMyAdmin-4.0.10.9-all-languages.tar.gz?r=http%3A%2F%2Fwww.phpmyadmin.net%2Fhome_page%2Fdownloads.php&ts=1426563492&use_mirror=jaist	# PHPMyAdminのファイルをダウンロード(ダウンロードプロセスが走ります)
	# mv phpMyAdmin-4.0.10.9-all-languages.tar.gz\?r\=http\:%2F%2Fwww.phpmyadmin.net%2Fhome_page%2Fdownloads.php  phpMyAdmin.tar.gz		# なんかおかしな名前でダウンロードされる時があるので、その場合はファイル名を変更
	# tar zxvf phpMyAdmin.tar.gz		# 圧縮ファイルを解凍
	# ls	# 解凍後のファイルの状態を確認
	chef  phpMyAdmin-4.0.10.9-all-languages  phpMyAdmin.tar.gz
	# mv phpMyAdmin-4.0.10.9-all-languages /var/www/html/phpMyAdmin		# 解凍したPHPMyAdminのディレクトリをApacheの配下に移動
	
	
## ブラウザからサーバにアクセスしてPHPMyAdminが動作していることを確認
下記のような画面が表示されるようになっていればPHPMyAdminが正常に動いています！

![PHPMyAdmin_01.png](https://qiita-image-store.s3.amazonaws.com/0/18615/1ae6ff09-9abc-eaec-c277-8425fbd254d2.png "PHPMyAdmin_01.png")
Heroku Cedar stack を Cedar-10 から Cedar-14 にアップグレード

#はじめに
以前から使っている Heroku app （ここでは `my-app` という名前にしておきます）のところへいつも通り push したとき、末尾にメッセージが出ました。アップグレードしろと。

```bash
 !   Cedar-10 will reach end-of-life on November 4th, 2015.
 !   Upgrade to Cedar-14 at your earliest convenience.
 !   For more information, check out the following Dev Center article:
 !   https://devcenter.heroku.com/articles/cedar-14-migration
```

期限までまだ半年以上あるけれども、気付いたときにアップグレード出来るようにメモしておきます。
なお、このメモは簡易作業です。詳細に丁寧に作業を行うならば、メッセージにも含まれているリンク先
[Migrating to the Celadon Cedar-14 Stack | Heroku Dev Center](https://devcenter.heroku.com/articles/cedar-14-migration)
に従って行ってください。

#事前確認
```bash
$ heroku stack
=== my-app Available Stacks
  bamboo-mri-1.9.2
  bamboo-ree-1.8.7
  cedar-14
* cedar-10
```
Cedar-10 ですね。

#作業開始
##Cedar-14にセットする
```bash
$ heroku stack:set cedar-14
Stack set. Next release on my-app will use cedar-14.
Run `git push heroku master` to create a new release on cedar-14.
```
一つの git に対して Heroku app が複数ある場合には `heroku stack:set cedar-14 -a my-app` のように名前を指定してください。

##空コミットする
```bash
$ git commit -m "update to cedar-14" --allow-empty
[master 5c8e2f9] update to cedar-14
```

##pushする
```bash
$ git push heroku master
Fetching repository, done.
Counting objects: 1, done.
Writing objects: 100% (1/1), 185 bytes | 0 bytes/s, done.
Total 1 (delta 0), reused 0 (delta 0)

-----> Ruby app detected
-----> Compiling Ruby
-----> Using Ruby version: ruby-2.1.5
-----> Installing dependencies using 1.7.12
       Purging Cache. Changing stack from cedar to cedar-14
       Running: bundle install --without development:test --path vendor/bundle --binstubs vendor/bundle/bin -j4 --deployment
　：
       Using bundler 1.7.12
　：
-----> Launching... done, v000
       https://my-app.herokuapp.com/ deployed to Heroku

To git@heroku.com:my-app.git
   22b3075..5c8e2f9  master -> master
```
作業は以上です。

#事後確認
```bash
$ heroku stack
=== my-app Available Stacks
  bamboo-mri-1.9.2
  bamboo-ree-1.8.7
  cedar-10
* cedar-14
```
Cedar-14 にアップグレード出来ています。

#参考
- [Heroku | Cedar-14 now Generally Available](https://blog.heroku.com/archives/2014/11/4/cedar_14_now_generally_available)
- [手持ちの heroku アプリケーションを cedar-14 スタックにマイグレートした - HsbtDiary(2014-11-06)](http://www.hsbt.org/diary/20141106.html#p01)
jQueryで複数要素の"共通する親要素"を取得する小物

セレクタで指定した要素を全て含む共通の親要素を取得したかったので作ってみた。

```js:こちらが関数
var getSameParent = function (selector) {
	var base, temp, parent, els = $(selector);

	if (!els.length) {
		return;
	} else if(1 === els.length) {
		return els.first().parent();
	}

	els.each(function(i) {
		var e = $(this);
		if (0 === i) {
			base = e;
			parent = e.parent().get(0);
		} else {
			temp = e.parents().has(els.eq(i - 1)).first().get(0);
			if (parent !== temp) {
				parent = e.parents().has(base).first().get(0);
			}
		}
	});

	return $(parent);
};
```

例えば以下のようなヤラシイHTMLがあったとして、`<div id="parent">` を取得したい。
というかそこにバリデーションエラーとかを [append()](http://api.jquery.com/append/) したい場合などに。

```html:サンプルHTML
<div id="parent">

	<label><input type="checkbox" name="checkItem[]" value="1">項目1</label>

	<div>
		<label><input type="checkbox" name="checkItem[]" value="2">項目2</label>
	</div>

	<div>
		<div>
			<label><input type="checkbox" name="checkItem[]" value="3">項目3</label>
		</div>
	</div>
</div>

<script>
// 以下で <div id="parent"> が取得できる
var parent = getSameParent('input[name^="checkItem"]');
</script>
```

少し動作が重そう・・・？

ちなみにjQueryプラグイン化するとこんな感じ。

```js:jQueryプラグイン版
(function ($) {
	'use strict';
	if (!$) return;

	$.fn.sameParent = function() {
		var base, temp, parent, els = this;

		if (!els.length) {
			return;
		} else if(1 === els.length) {
			return els.first().parent();
		}

		els.each(function(i) {
			var e = $(this);
			if (0 === i) {
				base = e;
				parent = e.parent().get(0);
			} else {
				temp = e.parents().has(els.eq(i - 1)).first().get(0);
				if (parent !== temp) {
					parent = e.parents().has(base).first().get(0);
				}
			}
		});

		return $(parent);
	};
})(window.jQuery);

/* 使い方はこう
var parent = $('input[name^="checkItem"]').sameParent();
*/
```
Lightning ComponentにJS/CSSをインポートする<ltng:require>

Lightning ComponentにJS/CSSをどうやってインポートするか問題が昨年末勃発しましたが、本家がJS/CSSをインポーするタグをいつのまにか提供し始めていました。
早速ですが、簡単なサンプルで試してみました。

### ソースコード
```html:SampleCmp.cmp
<aura:component implements="force:appHostable">
  <ltng:require styles="/resource/bootstrap" />
  <h1>カードレイアウト</h1> 
  <div class="card">
    <div class="card-heading">ぶちすごい株式会社</div>
    <div class="card-detail">ぶちすごい株式会社はぶちすごい製品やサービスを提供する企業じゃけーよー覚えときんさい</div>
  </div>
</aura:component>
```

### スクリーンショット
![スクリーンショット](https://qiita-image-store.s3.amazonaws.com/0/33258/7b9ac7ca-0ec1-a078-940c-74cae6baca17.png)

### ドキュメント
ドキュメントはauradocsから参照できました。
https://login.salesforce.com/auradocs/reference.app#reference?descriptor=ltng:require&defType=component

StackExchangeでは、まだプロトだと書いてあるので、まだ参考程度と考えておいたほうがよさそうです。
* [How to use jQuery (or any JS lib) in initial post rendering of Lightning Components](http://salesforce.stackexchange.com/questions/54106/how-to-use-jquery-or-any-js-lib-in-initial-post-rendering-of-lightning-compone/69109#69109)

### まとめ
\<ltng:require\>でLightning ComponentにJS/CSSを読み込めることを確認できました。
これで一定の解になっていればいいのですが、コンポーネント内に閉じた実装にはできなさそうな感じです。
さて、今後どうなっていくんでしょうか？
CasperJSでサイトのスマホ画面を連続キャプチャする

#はじめに
先日、[サイトの特定情報をCSVに出力するスクリプト](http://qiita.com/nekoneko-wanwan/items/f2280e89dd5aea580b36)を書きました。
今回はスマホ（に限らずですが）画面のキャプチャを連続でできるようなJavaScriptを書いてみました。
こんな簡単に実装できるなんてCasperJSはすごい


##使い道
* スマホ対応しているかどうかざっと画面で確認ができる
* どのようにスマホ対応しているか（レスポンシブかUAでページ変更しているのか）、スクリプトを一部変更することで簡単に確認ができる
* PC画面と比較することで、デバイスによる見せ方の違いがすぐに分かる
* スクリプト上でUAやViewportの変更もできるので、ちょっとした修正で様々なケースに対応できる


#ファイル構成
```
root/─┬─capture.js（実行するスクリプト）
      │
      └─files/─┬─img/xxx.png（自動出力）
               └─src.json（読み込むURLソース）
```

なお必要なパッケージ、キャプチャしたいページのURLを記述したJSONファイルは[前回記事](http://qiita.com/nekoneko-wanwan/items/f2280e89dd5aea580b36)のものと同じです


#実行するJavaScriptファイルを作成
```capture.js
var json   = require('./files/src.json');  // URLが配列形式で記載されたファイルを読み込む
var casper = require('casper').create();


/* スマホ用の設定を行うかどうか */
/* コマンド時の引数で判断する */
var isSmartPhone = (function() {
    return (casper.cli.get(0) === 'sp') ? true: false;
})();


/** 
 * casperのループ実行
 * @param {array}  json: URLを設定した配列
 * @param {object} self: Casperオブジェクト
 * @param {stings} link: 処理している現在のURL
 */
casper.start().each(json, function(self, link) {

    /* ページタイトルの定義 */
    var title;

    /* スマホ有効時の、UAとviewportの設定 */
    if (isSmartPhone) {
        /* UA, Viewportを変更削除することで様々なケースに対応可能 */
        self.userAgent('Mozilla/5.0 (iPhone; CPU iPhone OS 7_0 like Mac OS X; en-us) AppleWebKit/537.51.1 ' + '(KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53')
            .viewport(320, 480);
    } else {
        self.viewport(1280, 1000);
    }

    /* 連続実行 */
    self
        /* 指定urlを開く */
        .thenOpen(link, function () {
            /* ページタイトルの取得 */
            title = this.getTitle();
        })

        /* キャプチャ画像の背景を白色に（デフォルトだと透過pngとなる） */
        .thenEvaluate(function() {
            document.body.bgColor = 'white';
        }, 'setBackGround')

        /* キャプチャ（ページタイトル名をファイル名とする） */
        .then(function() {
            this.echo('Capturing... ' + title);
            this.capture('./files/img/' + title + '.png');
        })
    ;

});

casper.run();
```

#実行する
* sp を指定すると、スマホ用に設定したUAやViewportを使うようになります
* 画像の保存先はスマホ用で分けていないので、ファイル名が同じ場合そのままでは上書きされることにご注意ください

```
$ cd root/
$ casperjs capture.js sp
```
__~Fin~__

#おわりに
同じようにTablet用の設定を追加すれば、さくっと色々なデバイスでの確認が可能です。
また前回書き忘れましたが、URLにはBasic認証のID/PWを含めることもできるため、制限付きのサイトでも手軽にキャプチャ・データ取得ができるかと思います。`http://userName:password@example.jp`
.NETのJSONシリアライザの速度比較

C#で使いやすいJSON形式のシリアライザを探していたので、いくつか試してみるついでに速度検証をしてみました。

## 比較するシリアライザ

今回試すシリアライザは以下の4つです。

・DataContractJsonSerializer(.NET Framework標準)
　→ http://msdn.microsoft.com/ja-jp/library/system.runtime.serialization.json.datacontractjsonserializer%28v=vs.110%29.aspx

・Json.NET(↑以外では割と一般的でNuGetでも2番目に出てくる)
　→ http://james.newtonking.com/json

・ServiceStack.Text.JsonSerializer(SeriveStackライブラリ付属のシリアライザ)
　→ https://github.com/ServiceStackV3/mythz_blog/blob/master/pages/344.md

(JavaScriptSerializerなんてものは最初からなかったんだ…。)

## 計測方法

計測は2パターン行います。

一つはシリアライズ/デシリアライズするオブジェクトに型が明確な場合、もう一つは型が不明確、というか匿名型です。

まずはシリアライズを100回(初回はオーバーヘッドがかかったため実際は99回)行い、その合計、平均、最大、最小時間を計測します。

次にシリアライズしたJSONを元の型にデシリアライズする処理を100回繰り返し、その合計、平均、最大、最小時間を計測します。

ただし、匿名型の方はデシリアライズしても意味がないのでシリアライズのみを計測します。

今回検証に使用する型は以下のクラスです。

```csharp
public class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
    public BloodType BloodType { get; set; }
    public DateTime BirthDate { get; set; }
    public int[] FirendIds { get; set; }
}

public enum BloodType
{
    A = 1,
    B = 2,
    AB = 3,
    O = 4
}
```

## 計測結果

計測結果は以下の通りです。
(数値の単位は秒)

### 型が明確

・シリアライズ

![image](https://qiita-image-store.s3.amazonaws.com/0/51653/50f9bd97-f985-bdd1-95bf-0ced8e9b2216.png)

・デシリアライズ

![image](https://qiita-image-store.s3.amazonaws.com/0/51653/0c60a6e7-b2c6-c998-603f-9e353cadeb45.png)

### 匿名型

・シリアライズ

![image](https://qiita-image-store.s3.amazonaws.com/0/51653/0787b48c-0ff0-cf1b-1e70-dc9d106a8e69.png)

DatraContractJsonSerializerが『-』となっているのは匿名型のシリアライズに対応していないためです。

## シリアライズされたデータ

シリアライズだれたデータは以下のようになりました。

### DataContractJsonSerializer

```json
{"BirthDate":"\/Date(946652400000+0900)\/","BloodType":1,"FirendIds":[2,3,4],"Id":1,"Name":"Taro"}
```

### Json.NET

```json
{"Id":1,"Name":"Taro","BloodType":1,"BirthDate":"2000-01-01T00:00:00","FirendIds":[2,3,4]}
```

### ServiceStack.Text.JsonSerializer

```json
{"Id":1,"Name":"Taro","BloodType":"A","BirthDate":"\/Date(946652400000-0000)\/","FirendIds":[2,3,4]}
```

## 備考

使ってみた諸々の所感をまとめてみます。

### DataContractJsonSerializer

・シリアライズの速度はそこそこなのにデシリアライズが遅く、使い勝手が悪い。
・匿名型をシリアライズができない。

### Json.NET

・速度もそこそこ出てて、使い勝手は良い方。
・ある程度何でもできるので安定して使える。
(ASP.NET Web APIの標準実装にもなっている。)

### ServiceStack.Text.JsonSerializer

・今回試してみた中では一番速い。
・ServiceStackの最新バージョンが有償とのことなので、ネックとなるのはこの辺か。
RxJs takeUntil and takeWhile

`takeUntil` in RxJava:

```java
Observable<T> takeUntil(final Func1<? super T, Boolean> stopPredicate) {}
```

For example:

```java
Observable.range(1, 10).takeUntil(i -> i > 5);
```

But `takeUntil` in RxJs:

```js
.takeUntil(Observable); // It's connectable Observable not stopPredicate
```

Immediately, I just wrote `takeWhile()` for rx.js

rx.js:

```js
  observableProto.takeWhile = function(whileFunc) {
      var source = this;
      return new AnonymousObservable(function(observer) {
        return source.subscribe(function(o) {
          if (whileFunc(o)) {
            observer.onNext(o);
          } else {     
            observer.onCompleted();
          }            
        }, function(e) {
          observer.onError(e);
        }, function() {
          observer.onCompleted();
        });            
      });              
  }; 
```

After, I found rx.js already has `takeWhile()`, sad..
Underscore.jsで解いてみた：これが10分でできない人は自分がかなりプログラミングができないというつらい事実を認識しましょう。

[これが10分でできない人は自分がかなりプログラミングができないというつらい事実を認識しましょう。](http://qiita.com/hisui@github/items/b47c411437d60440a605)

Underscore.jsで解いてみました。

```js
var distributeCards = function(num, cards){
  // カードを人数で分配する
  var distributed = _(cards).groupBy(function(card, index){
    return (index % num);
  });
  // 分配したカードの最小枚数を調べる
  var min_number = _(distributed).chain()
      .map(function(cards){
        return cards.length;
      })
      .min()
      .value();
  // 最小枚数で出力する
  return _(distributed).map(function(cards){
    return _(cards).first(min_number);
  });
};

distributeCards(3, ['SA', 'S2', 'S3', 'S4', 'S5', 'S6', 'S7', 'S8', 'S9', 'S10', 'SJ', 'SQ', 'SK']); 
// [['SA', 'S4', 'S7', 'S10'], ['S2', 'S5', 'S8', 'SJ'], ['S3', 'S6', 'S9', 'SQ']]
```

問題読んで設計するのに2分くらい、コード書いて動くまでが8分。

### あとがき

戻り値は配列とか書いてるのに、入力値は分からんとか、仕様が適当すぎじゃね？（[解いてみた：これが10分でできない人は自分がかなりプログラミングができないというつらい事実を認識しましょう。](http://qiita.com/cof/items/8d39bacd75dbf6937bbf)にならって配列にしました）

これで、「10分でできない人は・・・」とか上から目線すぎる。「こんな適当な仕様でも10分でプログラミングできて欲しい（主にPMやSEには）」くらいが妥当だよね。
暗号化された Application Data を復号する

暗号化された Application Data を Wireshark で復号するためには 2 つの方法があります。

一つはよく知られている Wireshark に秘密鍵を指定する方法、もう一つは Premaster Secret または Master Secret を指定する方法です。

後者の方法では、鍵交換に DH や ECDH を選択した場合でも復号可能です。

今回は、後者の方法で、WebRTC の data channel の中身を確認してみます。


## SSLKEYLOGFILE 環境変数

SSLKEYLOGFILE 環境変数に Premaster Secret や Master Secret, Client Random を出力するファイルを指定した後に、下記のように Firefox を立ち上げます。

```
$ export SSLKEYLOGFILE=/tmp/sslkeylog.log
$ open /Applications/Firefox.app/
```

SSLKEYLOGFILE 環境変数で指定したファイルには、DTLS 通信時に Client Random と Master Secret が出力されます。

```text:/tmp/sslkeylog.log
CLIENT_RANDOM dbc21d5193ef6e7b86f366b80a1c0f46558e17eaa8aef6e6b2b8a63e33992537 3d6bac539f19f05a4a6f86fcaa46964ae0079aaaf0e096cac116a453c3a379fa7fb60744a95ab6cc6855111d5dbadcf9
```


## Wireshark の設定

秘密鍵を指定する場合と同様に、[Preferences] -> [Protocols] -> [DTLS] を選択します。

[(Pre)-Master-Secret log filename] に SSLKEYLOGFILE に設定したファイルを指定します。

![スクリーンショット 2015-03-17 10.18.48.png](https://qiita-image-store.s3.amazonaws.com/0/36202/1ea695c1-b0cc-d4dd-eb81-6841de8be6bc.png)


## 復号

WebRTC の data channel の場合は動的にポートが決まるため、dtls でフィルタをかけて、パケットの取得を開始します。

![スクリーンショット 2015-03-16 22.53.21.png](https://qiita-image-store.s3.amazonaws.com/0/36202/1a77f8b1-a081-cf3a-b8ad-dbd4f81e2219.png)

Decrypted DTLS data に、送信したメッセージ（JSON）が復号されて表示されます。


## 参考

- [NSS Key Log Format - Mozilla | MDN](https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/Key_Log_Format)
- [Decrypting TLS Browser Traffic With Wireshark &#8211; The Easy Way! | Jim Shaver](https://jimshaver.net/2015/02/11/decrypting-tls-browser-traffic-with-wireshark-the-easy-way/)
WebIDEにOpen Web Boardを認識させる方法

KDDIさんがOpen Web BoardというFirefoxOSが乗ったボードを提供しているのですが
WebIDEに認識させるのにちょっとつまづいたので、雑にメモを残します。

要るもの
---
・PC(Mac)
・HDMI対応のディスプレイ
・USBマウス
・Open Web Board
・それらを繋げるケーブル(Open Web Boardについてくるはず)

方法
---
1.PCのターミナルを開く(まだOpen Web Boardはつなげなくてよい)
2./homeにある、".android/adb_usb.ini"ファイルをテキストエディタで開く(ターミナルを開いたら多分homeを見ているはず)
3.一番下に行を足して"0x2207"と記入
4.上書き保存して閉じる
5. adb kill-server と adb devices を実行
6.Open Web BoardをPCと繋げる。Open Web Boardにはディスプレイとマウスを繋げておくこと
7.Open Web Boardの設定画面を開き、「開発者」メニュー⇒「Remote　Debugging」を選び、「無効」⇒「ADBと開発者ツール」に変更(これでWebIDEに認識される)
8.Firefoxブラウザを立ち上げ、WebIDEを立ち上げる
9.右上のランタイムを選択、から"rk3066"を選択(PCに繋いだ時点で電源ONになるので、認識されるまでちょっとラグがあります。adb devicesで確かめてみるとよい)
10.ディスプレイ上に「デバッグ許可を求められています」のダイアログが出るので、OKをクリックする
11.WebIDEでちゃんと認識される

---
以上です。
USBハブがあると便利です。
オブジェクトの親子関係のまとめ - Unity

オブジェクトの親子関係をスクリプトから操作する方法をまとめてみました。

# オブジェクトを取得する

## 子オブジェクト → 親オブジェクト

子オブジェクトのスクリプトから親オブジェクトを取得します。

```
using UnityEngine;
using System.Collections;

public class ChildScript : MonoBehaviour {

	private GameObject _parent;

	void Start(){

		//親オブジェクトを取得
		_parent = transform.root.gameObject;

		Debug.Log ("Parent:" + _parent.name);

	}
}
```

## 親オブジェクト → 子オブジェクト
```
using UnityEngine;
using System.Collections;

public class ParentScript : MonoBehaviour {

	private GameObject _child;

	// Use this for initialization
	void Start () {
		_child = transform.FindChild ("Child").gameObject;

		Debug.Log("Child is:" + _child.name);
	}
}
```

## 親 → 子オブジェクト（複数）
```
using UnityEngine;
using System.Collections;

public class ParentChildrenScript : MonoBehaviour {

	// Use this for initialization
	void Start () {
		int count = 0;
		foreach (Transform child in transform)
		{
			//child is your child transform

			Debug.Log ("Child[" + count + "]:" + child.name);
			count++;
		}
	
	}
}
```

# 親子関係を構築・解除する

## 親オブジェクトを指定する
親オブジェクトを指定することで、親子関係になる方法です。

子オブジェクトのtransform.parentに親にしたいオブジェクトのtransformを代入します。

```
Child.transform.parent = Parent.transform;
```

### 実行前
WannaBeParentとWannaBeChildには親子関係がありません
![unity2015-03-17_10_30_53.png](https://qiita-image-store.s3.amazonaws.com/0/67320/10b205ab-83c0-5ad1-e56b-28878c59c5e6.png)

```
using UnityEngine;
using System.Collections;

public class WannaBeChild : MonoBehaviour {

	void Start () {
		transform.parent = GameObject.Find("WannaBeParent").transform;
	}

}
```
### 実行後
親子関係になったことが確認できます。

![unity2015-03-17_10_31_03.png](https://qiita-image-store.s3.amazonaws.com/0/67320/87fe8e9a-0a00-048a-bb9f-ea890735ee61.png)

## 親オブジェクトを解除する
子オブジェクトから親オブジェクトを解除するにはtransform.parentをnullにすることで親子関係を解除します。

```
ChildObject.transform.parent = null;
```

## 子オブジェクトを一括で解除する
親オブジェクトから子オブジェクトの全てを解除する場合、DetachChildren()を使用すれば一括で解除できます。

```
RootObject.transform.DetachChildren();
```

## 子オブジェクトが存在するか判定する
子オブジェクトが存在するかどうかを判定するには、IsChildOf()を使用します。

例として、Parent1（子あり）とParentNoChild（子なし）のオブジェクトを作成します。

![unity2015-03-17_10_17_03.png](https://qiita-image-store.s3.amazonaws.com/0/67320/a39fbac6-6e84-f76d-6bb9-f6af0df92747.png)

```
using UnityEngine;
using System.Collections;

public class ExistChildScript : MonoBehaviour {

	void Start () {
		Debug.Log ("name:" + gameObject.name);

		if (GameObject.Find ("Child").transform.IsChildOf (transform)) {
			Debug.Log ("true");
		} else {
			Debug.Log ("false");
		}
	}
}
```

実行すると、Parent1はtrue、ParentNoChildはfalseになることが確認できます。
![unity2015-03-17 10.22.40.png](https://qiita-image-store.s3.amazonaws.com/0/67320/48e5cbdd-18ef-55ca-4665-4177fa8edc3e.png)

## 子オブジェクトの数を取得する
childCountは子オブジェクトの数を取得することができます

```
using UnityEngine;
using System.Collections;

// 親オブジェクトにAddComponent
public class ChildCountScript : MonoBehaviour {

	void Start () {
		int count = transform.childCount;
		Debug.Log ("Count=" + count);
	}
}
```

## ソースコード
ソースコードで見たい場合は以下からダウンロードしてください。
[ParentChild - Github](https://github.com/kawai-hiroyuki/UnityExample)

## 参考サイト

[【Unity初心者向け】オブジェクトの親子関係を操作する](http://bribser.co.jp/blog/transformparent/)
C#でExcel Creatorを使ってみる

C#でExcel Creatorを使うことになったので、
メモとして使い方を随時書いていこうと思う。

ちなみに公開使用しているのはExcel Creator8.0
Excel Creatorは実行環境にExcelが無くてOKみたいです。


#Excelファイルを読み込んで編集する
```csharp
xlsxCreator.OpenBook("Excelの保存先", "読み込みたいExcelファイル");
//なんか処理
xlsxCreator.CloseBook(true);//閉じる
```

#シートの選択と名前の変更
```csharp
xlsxCreator.SheetNo = 0;
xlsxCreator.SheetName = "シート名";
```

#セルに値を入れる
```csharp
//Pos(x, y)でセルの位置を指定
xlsxCreator.Pos(0, 0).Str = "値";

//Pos(x, y, x2, y2)でセルを結合して値をいれられる
xlsxCreator.Pos(0, 0, 1, 1).Str = "値";
```

# 画像の挿入
```csharp
xlsxCreator.Pos(0, 0, 4, 4).Drawing.AddImage("画像のパス");
```

# ASP.NETでExcelファイルをダウンロード
```csharp
long offset = 0;
long size = new FileInfo("Excelファイルのパス").Length;
Response.Clear();
Response.ContentEncoding = System.Text.Encoding.GetEncoding("shift-jis");
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AppendHeader("content-disposition", "attachment; filename=ファイル名");
Response.WriteFile(filePaht, offset, size);
Response.End();
```
Laravel5スタートメモ

マニュアル見ればわかるけど、コンパクトに見たい時用
参考：[Laravel5公式](http://laravel.com/docs/5.0/installation)

##composer導入（ある場合は省略）
``` 
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer

vim ~/.bash_profile

#パスを通す
export PATH=~/.composer/vendor/bin:$PATH

source ~/.bash_profile
```

##composerでLaravelインストール〜起動
```
composer global require "laravel/installer=~1.1"

cd #larabelを設置したいパス
laravel new dir_name
cd dir_name
sudo chmod -R 777 app/storage

# 起動
php artisan serve
>Laravel development server started on http://localhost:8000/
```
##よく使いそうなコマンド
```
#キャッシュクリア
php artisan cache:clear

#マイグレーションテーブル作成
php artisan migrate:install
#マイグレーション反映
php artisan migrate
Xcode5.1 でアプリのアップデートを申請しようとするとバリデーションが通らない

下記エラーで怒られる。

```
The bundle is invalid. New apps and updates submitted to the App Store must be built with public
```

最新版のXcodeでビルドしないといけないらしい。
Xcode5.1.1にアップデートし、再度アーカイブを作成して申請すれば無事通りましたとさ。
ということで初申請完了。
roadworkerでRoute53のPrivate DNSの名前解決を自動化するテンプレ


## テンプレート
```ruby:Routefile
# -*- mode: ruby -*-
# vi: set ft=ruby :
vpc_id = "vpc-xxxxxxxx"
region = "ap-northeast-1"
zone = "route53.local."
hosted_zone zone do
  vpc region, vpc_id

  AWS::EC2.new(region: region).vpcs[vpc_id].instances.each {|instance|
    next if instance.tags.Name == nil
    next if instance.tags.Name.empty?
    rrset "#{instance.tags.Name}.#{zone}", "A" do
      ttl 60
      resource_records instance.private_ip_address
    end
  }

  AWS::RDS.new(region: region).instances.to_a.each do |instance|
    rrset "#{instance.db_instance_identifier}.#{zone}", "CNAME" do
      ttl 60
      resource_records(
        instance.endpoint_address
      )
    end
  end

  AWS::ElastiCache.new(region: region).client.describe_cache_clusters[:cache_clusters].each do |cluster|
    rrset "#{cluster[:cache_cluster_id]}.#{zone}", "CNAME" do
      ttl 60
      resource_records(
        cluster[:configuration_endpoint][:address]
      )
    end
  end

  AWS::Redshift.new(region: region).client.describe_clusters[:clusters].each do |cluster|
    rrset "#{cluster[:cluster_identifier]}.#{zone}", "CNAME" do
      ttl 60
      resource_records(
        cluster[:endpoint][:address]
      )
    end
  end
end
```

## 適用
```bash
bundle exec roadwork -a -f Routefile --target-zone "route53.local"
```

あとはこれをCIで回すとか
【Compass】Compassのmixinを使ってCSSスプライト画像を作る

# PC用

Compassプロジェクトに対象のフォルダを記載
例）"ディレクトリ名/*.png"
素材画像をPNG形式で作成しフォルダに入れる

```
@mixin sprite-btn($_sprites, $_symbol) {
	background: sprite($_sprites, $_symbol) no-repeat;
	display: block;
	@include inline-block;
	@include sprite-dimensions($_sprites, $_symbol);
}

$_sprites: sprite-map("ディレクトリ名/*.png", $spacing: 10px);
```

書き方

```
.hoge a {
　@include sprite-btn($_sprites, *画像名*);
}
```

書き出し結果

```
.hoge a {
  background: url('../img/*スプライト画像名*.png') 0 0 no-repeat;
  display: block;
  display: inline-block;
  vertical-align: middle;
  *vertical-align: auto;
  *zoom: 1;
  *display: inline;
  height: 41px;
  width: 132px;
  left: 298px;
  top: 310px;
}
```

# スマホ用（Retina対応）

Compassプロジェクトに対象のフォルダを記載
例）"ディレクトリ名/*.png"
素材画像をPNG形式で作成しフォルダに入れる
ここまではPCと一緒

```
@mixin sprite-btn($_sprites, $_symbol) {
	$pos-y: round(nth(sprite-position($_sprites, $_symbol), 2) / 2);
	background: $_sprites 0 $pos-y no-repeat;
	display: block;
	@include background-size(ceil(image-width(sprite-path($_sprites)) / 2) ceil(image-height(sprite-path($_sprites)) / 2));
	@include inline-block;
	width: round(image-width(sprite-file($_sprites, $_symbol)) / 2);
	height: round(image-height(sprite-file($_sprites, $_symbol)) / 2);
}

$_sprites: sprite-map("ディレクトリ名/*.png", $spacing: 10px);
```

書き方

```
.hoge a {
　@include sprite-btn($_sprites, *画像名*);
}
```

書き出し結果

```
.hoge a {
  background: url('../img/*スプライト画像名*.png') 0 0 no-repeat;
  display: block;
  -moz-background-size: 53px 160px;
  -o-background-size: 53px 160px;
  -webkit-background-size: 53px 160px;
  background-size: 53px 160px;
  display: inline-block;
  vertical-align: middle;
  *vertical-align: auto;
  *zoom: 1;
  *display: inline;
  width: 53px;
  height: 23px;
}
```

**※何か間違いがあれば指摘してください。**
一行で二つのクラスをtoggleする

二つのクラスをつけたり、けしたりする

```js
$(#sample).toggleClass('open', $(#sample).hasClass('close'))
          .toggleClass('close', !$(#sample).hasClass('open'));
```

上に書いた方がデフォ値になる

```js
$(#sample).toggleClass('open', $(#sample).hasClass('close'))
          .toggleClass('close', $(#sample).hasClass('open'));
```

これだと動かない
bind9でaliasIPを使用したいとき奴

# 社内のローカルDNSで、マスターサーバのIPをaliasIPに指定したい時に困ったマン

masterのaliasIPを指定して、slaveを作成したけど
masterでrndc reloadしてもslaveに反映されないマン

よく見たら当たり前なんだけど、ハマったのでメモ

## 状況

### masterのIP
```bash 
eth0　　　10.10.10.1
eth0:0　　10.10.10.2                                                                      
```

### masterのconf //抜粋
```bash
// kakeru.local の正引きの設定                         
zone "kakeru.local" {                                  
        // Master DNS Serverであることを明示           
        type master;                                   
        // ファイル名                                  
        file "/zone/kakeru.local.zone";                
        notify explicit;                                                     
        also-notify { 10.10.10.3; 10.10.10.4; };  //slaveは２台   
};                                                     
```

### slaveのconf
```bash
zone "kakeru.local" IN {
     type slave;
     masters { 10.10.10.2; }; //aliasIPをmasterのIPに指定
     file "/zone/kakeru.local.slave.db";
};
```

### Slaveでのerror内容
```bash
$ cat /var/log/messages 
Mar 17 00:19:00 internal-ns04 named[23513]: client 10.10.10.1#41716: received notify for zone 'kakeru.local'
Mar 17 00:19:00 internal-ns04 named[23513]: zone kakeru.local/IN: refused notify from non-master: 10.10.10.1#41716
Mar 17 00:19:00 internal-ns04 named[23513]: client 10.10.10.1#41716: received notify for zone 'ca.local'
Mar 17 00:19:00 internal-ns04 named[23513]: zone ca.local/IN: refused notify from non-master: 10.10.10.1#41716
```

non-masterって怒られる

---

## 何すればいいか

そもそも、

```bash
Mar 17 00:19:00 internal-ns04 named[23513]: client 10.10.10.1
```

slaveで指定した、masterのIPからnotifyが飛んでいない。
ので、masterが名乗るnotifyのIPを指定してやる。


```bash
zone "kakeru.local" {                                  
        // Master DNS Serverであることを明示           
        type master;                                   
        // ファイル名                                  
        file "/zone/kakeru.local.zone";                
        notify explicit;  
        notify-source 10.10.10.2;  ←これ！！！！！！！！！！                                                 
        also-notify { 10.10.10.3; 10.10.10.4; };    
};  
```
master設定変更してからの、serial reload。

Slaveのlogを見ると、

```bash
Mar 17 00:34:06 internal-ns04 named[23629]: client 10.10.10.2#15661: received notify for zone 'kakeru.local'
Mar 17 00:34:06 internal-ns04 named[23629]: zone kakeru.local/IN: Transfer started.
Mar 17 00:34:06 internal-ns04 named[23629]: transfer of 'kakeru.local/IN' from 10.10.10.2#53: connected using 10.10.10.4#36733
Mar 17 00:34:06 internal-ns04 named[23629]: zone kakeru.local/IN: transferred serial 2015031701
Mar 17 00:34:06 internal-ns04 named[23629]: transfer of 'kakeru.local/IN' from 10.10.10.2#53: Transfer completed: 1 messages, 29 records, 838 bytes, 0.001 secs (838000 bytes/sec)
```

transferでけた


参考URL
http://ftp.isc.org/isc/bind9/cur/9.9/doc/arm/Bv9ARM.ch06.html


おわり
sublime text > フォルダをプロジェクトに入れる > sublimetext .

動作確認

    CentOS 6.5

フォルダをプロジェクトに入れる方法

    $cd WorkFolder
    $sublimetext .

これでWorkFolder配下のファイル一覧が左側に表示される。

やっていることは[File]-[Open Folder]と同じことだが、自分にとってはこれが早いと感じた。
2015-03-17 c++ builder XE4 > TreeViewの利用

動作確認

    RadStudio  XE4

ツリー構造で項目を表示したい時にTTreeViewを使う。

    Test1
       |--Test2

のような構造を作りたい時は、以下のようにすればよさそう。

```cpp:Button1Click()
TreeView1->Items->Add(NULL, L"Test1");
TTreeNode *pItem1 = TreeView1->Items->Item[0];
TreeView1->Items->AddChild(pItem1, L"Test2");
```

[参考情報](http://members.jcom.home.ne.jp/komina/wiki/4243422F5472656556696577.html)
WordPressでThe following plugins might cause (xml sitemaps) issues with Yoast WordPress SEO: Google XML Sitemapsと表示される問題の解決方法

WordPressの管理画面でXMLサイトマップについてエラーがでてしましました。

```bash:WordPressの管理画面のエラー
The following plugins might cause (xml sitemaps) issues with Yoast WordPress SEO: Google XML Sitemaps
```

<img width="400" src="https://qiita-image-store.s3.amazonaws.com/0/1624/88cfc0c0-9d10-9816-f97a-73c7e8612dd7.png" />

YoastWordPressSEOプラグインの管理画面へ行きます。

<img width="400" src="https://qiita-image-store.s3.amazonaws.com/0/1624/cc5167e8-bfba-9648-1efd-27378bd01d08.png" />
上記にある **XMLサイトマップの機能を有効にするには、このチェックボックスをオンにします。**というチェックボックスのチェックを外します。

<img width="400" src="https://qiita-image-store.s3.amazonaws.com/0/1624/bf7594c2-92dd-8c96-c184-bba3beaabcc5.png" />
設定を保存するとエラーが消えているはずです。

<img width="400" src="https://qiita-image-store.s3.amazonaws.com/0/1624/a1c22a3a-93ca-730f-0941-acd98278c10f.png" />
このエラーはGoogle XML SitemapsとYoastWordPressSEOを併用していると生じた問題だったおもいます(☝ ՞ਊ ՞)

# 参考
http://wpcrux.com/guides/yoast-seo-xml-sitemap-conflict/
ubuntu14.04にmodxをインストールする


インストールログです。

#### まずはapache2と関連モジュールのactivation.

```
$ sudo apt-get install apache2
$ sudo apt-get install libapache2-mod-proxy-http
$ sudo a2enmod proxy
$ sudo a2enmod proxy_html
$ sudo a2enmod proxy_http
$ sudo a2enmod rewrite
$ sudo apache2ctl restart
```

#### mysqlとphp5関連

```
$ sudo apt-get install php5 php5-gd libapache2-mod-php5 php5-mcrypt
$ sudo apt-get install mysql-server
# 途中パスワード入力
```

#### mysqlのセットアップ

```
$ mysql -u root -p
mysql> GRANT ALL PRIVILEGES ON *.* TO ユーザー名@localhost IDENTIFIED BY 'パスワード' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;
```

#### modxのインストール

データのインストールと展開とパーミッションの設定

```
$ cd /var/www
$ wget http://modx.jp/?dl=evo.zip
$ mv ***.evo.zip evo.zip
$ sudo unzip evo.zip
$ sudo mv evo modx
$ sudo chown -R www-data.www-data modx
$ cd modx
$ mv sample.htaccess .htaccess
```

apacheの設定ファイルを書く

```
$ cd /etc/apache2/sites-available
$ sudo emacs modx.conf
# 編集内容は以下を参照
$ sudo a2ensite modx
$ sudo apache2ctl restart
```

```modx.conf
Alias /modx /var/www/modx
<Directory /var/www/modx/ >
Options +FollowSymLinks
AllowOverride All
order allow,deny
allow from all
</Directory>
```

#### アプリ内の設定

以下にアクセスして、編集をしていく。

* http://my.domain/modx

途中、データベースを作るので、さきほど作ったデータベースの【ユーザ名】と【パスワード】を入力して、画面を進めればインストール終了。なお、my.domainには、localhostまたはレンタルサーバに割り当てられているドメイン、IPアドレスを入れること。
Laravel5 で laravel-ide-helpe してて PhpStorm `php artisan ide-helper:meta`すると良いかも

# Laravel5 で laravel-ide-helpe 使ってて PhpStorm も使うなら `php artisan ide-helper:meta`すると良いかも

laravel-ide-helpe を入れて `php artisan ide-helper:meta` すると、 PhpStorm のコード補完がより素敵になるかもしれない。(まだちゃんと確認できてないけど。。)

https://github.com/barryvdh/laravel-ide-helper#new-phpstorm-meta-for-container-instances

IoC Container を通して、 code competition (コード補完？)出来るっぽい。

## タグとは違うけど、Laravel4 のケース

まだ、laravel4 の環境もあると思うので、最初に。

laravel4 の場合は(たぶん)「composer require barryvdh/laravel-ide-helper ~1.11」です。1.11 を明示的に composer.json で指定するか、左記コマンドで。

で、 laravel4 の場合、この投稿はあまり意味が無いはずなので、ここから先は読まなくても良いかも。

## Laravel5 ならば

先にも書いたのですが、 IoC Container を通して、 code competition (コード補完？)出来るっぽいのです。(英語力自信ないです。。。間違ってたらスミマセン。。)

なので、 PhpStorm を使ってるなら、 `php artisan laravel-ide-helper:meta` で出力してみようかと。

### barryvdh/laravel-ide-helper を入れる

基本的には `composer require barryvdh/laravel-ide-helper` で良いはず。

詳細は、 https://github.com/barryvdh/laravel-ide-helper にて。

env 気にしないなら、

> After updating composer, add the ServiceProvider to the providers array in config/app.php

と、あるとおり、 `./config/app.php` の`providers` 配列に `Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider'` を追加すれば動くはず。

個人的には、 ide-helpler は env が local でしか使わないものだと考えるので `composer require barryvdh/laravel-ide-helper --dev`の方が良いかなと、思ってます。

もし、「--dev」とした場合は、`./app/Providers/AppServiceProvider.php` にて、 `register` メソッド内で、以下の様な記述が良いのでは。(ただし、まだ L5 のコードをちゃんと読んでないから自信ないですが…)

```./app/Providers/AppServiceProvider.php
		if ($this->app->environment() == 'local') {
			$this->app->register('Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider');

		}
```

これで、 `php artisan ide-helper:meta` とすれば、(config 変更してなければ)  `./.phpstorm.meta.php` が出来上がるはず。

あとは快適にコードを書くだけ。

### `php artisan ide-helper:meta` したら FatalException が起きた

もし、`php artisan ide-helper:meta` で FatalException が出る場合は、

> https://github.com/barryvdh/laravel-ide-helper#new-phpstorm-meta-for-container-instances の引用表記部分にもある通りに修正するよ良い。

で、具体的な方法としては、たぶん、以下のはず。

- ./config/filesystems.php の 's3' を削除・コメントアウト等する
- ./config/app.php  の 'Illuminate\Redis\RedisServiceProvider' 並びに "'Redis'     => 'Illuminate\Support\Facades\Redis'," をコメントアウトすると良いかも。
- ただし、 `league/flysystem-aws-s3-v2` 及び `predis/predis` を使わない場合(S3, Redis 使わないならって意味合いで理解して良いかな)のみ。
- もし、 S3 とか、 Session やら pub/sub で Redis 使うなら、 Composer から 入れてやれば問題ないはず。

ちなみに、s3, predis を入れるなら、

```
$ composer require league/flysystem-aws-s3-v2
$ composer require predis/predis
```

で良いはず。

※(ざっと確認しただけなので、正確なところはまだ確認してません。もし、間違いがあったらすみません。また、ご指摘頂けると幸いです。)