OmniAICreator/Qiita-1.07M huggingface dataset:
unity > RectTransform > scriptでheight, width を設定する > .sizeDelta = new Vector2 (100.0f, 30.0f);

```txt:動作確認
Unity 5.2.0f3 on MacOS X 10.8.5
```

RectTransformのインスペクタで見られるheight, width(下図)をscriptから設定する。

![Main_unity_-_150911-textNearPanel_-_PC__Mac___Linux_Standalone__Personal__と_新規投稿_-_Qiita.jpg](https://qiita-image-store.s3.amazonaws.com/0/32870/07ba93df-ed9b-2ee9-083b-053741923d0c.jpeg)


以下で BottomLeftText (UI > Text型)のwidth=100, height=30にできる。

```
RectTransform textRect = BottomLeftText.GetComponent<RectTransform> ();
textRect.sizeDelta = new Vector2 (100.0f, 30.0f);
```

参考
[answers.unity3d](http://answers.unity3d.com/questions/775779/change-size-of-the-new-ui-rect-transform-using-scr.html)
The stream size for the streaming upload cannot be determined でググったら英語のサイトばかり出てきた　そんな時

ローカルのファイルをS3にアップロードするロジックをそのまま使って、
web上に上がっているファイルを取得してs3にアップロードするロジックを作ろうとしてちょいとつっかかった時のこと

アプリケーションエラーを見ると
The stream size for the streaming upload cannot be determined
というアプリケーションエラーが出ている
そしてググると見事に英語のページばかりが引っかかる

TOEICが極端に低くても、腹をくくって調べてみる
http://stackoverflow.com/questions/10698170/upload-external-file-to-aws-s3-bucket-using-php-sdk

create_object()で指定する引数に問題があるらしい
ローカルのファイルをS3にアップロードする実装では

```
'fileUpload' => 'ファイルのパス',
```

でOKの場所があるがどうやらこれがいけないらしい。

```
'body' => file_get_contents('http://画像のあるURL'),
```

これに書き換えて一件落着
sourcetreeで簡単 都合の悪い変更箇所だけ取り消してブランチに反映

# sourcetreeで簡単 都合の悪い変更箇所だけ取り消してブランチに反映

git push してから bitbucketで見てみると不本意な差分が出ている。
しかも変更前と変更後の記述に差異がない。
大抵こういう時は改行コードだけ変わっているのである。
これでは本来の差分がどこからどこまでなのか分かりづらかったりする。

そんな時に役に立つのがSourceTreeである。

1.対象の作業コピーを開いて、画面左側の「作業コピー」をクリック
2.右側に検索窓みたいなものがあるので、これに直したいソースの名前を入れてみる
3.対象のソースが出てきたらカーソルを載せて右クリック「選択のログを表示」をクリック→新しい画面が出てくる
4.画面左側にリビジョンが表示されるのでそれらをクリックすると、右側に差分が表示される。
5.都合の悪い変更箇所が表示されたら、その箇所を変更前の行、変更後の行をどちらも選択する。
6.「選択した行を元に戻す」というボタンが出てくるので、ソレをクリック
7.すると変更済みファイルに切り替わるので、それをINDEXにステージしてcommitしてpushすれば完了
管理からマネジメントへ

MBO：Management by objective 目標設定によるマネジメント

##なぜMBOをやるのか？

会社とメンバー間で仕事の方針／目線を一致させるために明確化（言語化）

１：各メンバーの自立行動の促進
２：各メンバーの弱み、苦手な分野の改善と明示
３：各メンバーによる評価の納得度の向上

 
##目標の明確化２パターン

１：有言実行しやすい職種（営業職など）
- 成果につながる行動が具体的にわかっている
- 目標を数値で表しやすい
- 個人成果がわかりやすい（個人プレイ　高）
    - 目標明確度　　高
    - 事後評価負担　低

 
２：不言実行しやすい職種（管理職／新規事業など）
- どうすれば成果が出るのか具体的にはまだ分からない
- 目標を数値で表しにくい
- 個人成果が分かりにくい（チームプレイ度　高）
    - 目標明確度　　低
    - 事後評価負担　高（期末に成果の説明責任が重くなる）
 
###おおよその職位別の目標設定における基準／ガイドライン
###基本的な考え方は「高い職位＝高い目標＝厳しい評価＝高い報酬」


##まとめ
###1：目標管理はＭＢＯとSelf control →（自己統制）
###2：Ｍとはマネジメントで、会社の動きとメンバーのやりたい気持ちをうまく結びつけること。
###3：そのためにＯ「オブジェクティブズ（目標）」を使って意思のすり合わせをシンプルに。
###4：チャレンジ目標はギリギリ背伸びした目標（高すぎも引くすぎもNG）
###5：自分で決めたという納得感が大切
###6：目標へのコミットを高めるためにリーダーは効果的な「動機づけ」を行う必要がある（自分で決めたから後はしっかりやりなさいでは無く、達成するためのアドバイスや支援が必要）
###7：セルフ・コントロール（自己統制）へ
webサービスの関連法規リスト


1.不正競争防止法
2.プロバイダー責任法
3.個人情報保護法
4.迷惑メール防止法（特定電子メール法）
5.特定商取引法
6.特定の事業者に関わる法規
7.薬事法／薬機法
8.景品表示法
9.著作権法
10.古物営業法
11.インターネット異性紹介事業
【質問】おすすめの医療サイトを教えてください。

質問させていただきます。
今後、医療サイトを作っていこうと考えていますが、何かおすすめのサイトはありませんか？

・yahooヘルスケア
http://medical.yahoo.co.jp/
・gooヘルスケア
http://health.goo.ne.jp/
・MEDLEY（メドレー）
http://medley.life/
・Medエッジ
https://www.mededge.jp/

この中で参考になる良いサイト、もしくは上記以外で良いサイトがあれば教えてください！
よろしくおねがいします。
etcdでconfdを使わずに設定の動的更新を行う

etcdと合わせてconfdを使うことで、コンテナ構成の変更を引き金に設定ファイルを動的に更新する事ができます。しかし、confd自体はetcdが元から備えている機能の薄いラッパーに過ぎず、そのためだけに golang 等の言語処理系を丸ごと入れるのは微妙な感じもします。
そこで、confdを使わずに以下の様なシェルスクリプトで代用することにしました。以下はnginxをロードバランサーとして起動するエントリポイントスクリプトの例です。

```bash
#!/bin/bash
ETCD=http://<etcd-name-or-ip>:2379
SERVICE=<service name>
SRC=/etc/nginx/nginx.conf.tmpl
DST=/etc/nginx/nginx.conf

gen_conf(){
  NODES=`curl -Ls $ETCD/v2/keys/$SERVICE | jq .node.nodes[].value 2>/dev/null`
  SERVERS=`
    if [ -n "$NODES" ]; then
      for N in $NODES; do
        echo "server ${N//\"/} weight=1 max_fails=3 fail_timeout=10s;"
      done
    else
      echo "server 127.0.0.1:65535; # force a 502"
    fi
  ` awk '{sub("SERVERS",ENVIRON["SERVERS"]);print}' $SRC > $DST
  cat $DST | shasum | awk '{print $1}'
}
DIGEST=`gen_conf`
echo "new $DST"
while :; do
  curl -Ls "$ETCD/v2/keys/$SERVICE?recursive=true&wait=true" >/dev/null
  NEW_DIGEST=`gen_conf`
  if [ "$DIGEST" != "$NEW_DIGEST" ]; then
    nginx -t -c $DST && nginx -s reload
    DIGEST=$NEW_DIGEST
    echo "updated $DST"
  fi
done &
nginx -t -c $DST && exec nginx -c $DST
```

やっていることは、

1. 初期テンプレートの生成とチェックサムの記録
2. curlでetcdのwait機能を使い変更を監視
3. 構成変更を引き金にテンプレートを再生性
4. チェックサムに変更があればnginxをリロード 

という感じですね。

nginx.conf.tmplの中身は

```nginx
upstream <service name> {
    SERVERS
}
```

のように置換用のマーカーを置いておきます。

etcdのJSON出力を処理するのに`jq`を使っていますが、これは[parsrj.sh](https://github.com/ShellShoccar-jpn/Parsrs/blob/master/parsrj.sh)などを使えばもっと依存関係を減らせそうです。
無名モジュール定義時は全ての定数参照に self:: が必要。

わりとめんどいし汚い感じある。Module で説明するが Class も全く同様。

```ruby
m = Module.new do
  HOGE = 1
  self::FUGA = 2
  def self.test; FUGA end
  def self.test2; self::FUGA end
end

p HOGE
=> 1
p m::HOGE
=> error
p m::FUGA
=> 2
p m::test
=> error
p m::test2
=> 2

```

潔癖症のあなたが隠蔽を完全にするためには、馬鹿馬鹿しいが以下の方法がある。

```ruby
m = Module.new do
  module self::Hoge
    FUGA = 1
    def self.test; FUGA end
  end
end
p m::Hoge::FUGA
=> 1
```
こうすると ``self::`` をつけ忘れる恐怖からあなたは解放され、かつ、 ``Hoge``モジュールには ``m`` 以外から到達不能なので隠蔽の目的は果たされる。
(module定義の所で ``self::`` 忘れるとトップレベルに ``Hoge`` が漏洩して残念なことになる)

別の馬鹿馬鹿しい方法として以下がある。

```ruby
module Hoge
  FUGA = 1
  def self.test; FUGA end
end
m = Hoge
self.class.send(:remove_const, :Hoge)

p m::Hoge::FUGA
=> 1
p Hoge::FUGA
=> error
```

まあここまで頑張ってみたところで ObjectSpace から辿れば参照できるわけで、完璧な隠蔽など不可能なのだが、そもそもなんで無名モジュールを使いたがっているかというと、隔離された名前空間で rake task を登録したいという需要があるため。
see: http://qiita.com/kuboon/items/26e90800856863c64cdc
いっそランダム文字列の module でも宣言したほうがスマートかもわからん。
z-index の値を無視して背面要素を操作可能にするCSS

装飾的な意味合いの要素を z-index を利用して前面に配置する際、ボタンなどの重要な要素が背面になりクリックなどの操作ができなくなってしまう場合があります。

**z-index の重なり順を維持したまま**背面要素の操作を可能にするには、前面要素に `pointer-events: none;` を指定します。

<p class="codepen" data-height="635" data-theme-id="18225" data-default-tab="result" data-user="shouchida" data-slug-hash="qBaRbYN" style="height: 635px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;" data-pen-title="qiita_83c48c7423ea0eb617b8">
  <span>See the Pen <a href="https://codepen.io/shouchida/pen/qBaRbYN">
  qiita_83c48c7423ea0eb617b8</a> by Sho Uchida (<a href="https://codepen.io/shouchida">@shouchida</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://production-assets.codepen.io/assets/embed/ei.js"></script>

~~~html:HTML

<div class="obj">（装飾的要素）</div>
<button type="button" class="btn">button</button>

~~~

~~~css:CSS

.obj {
  position: absolute;
  z-index: 2;
  pointer-events: none;
}

.btn {
  position: absolute;
  z-index: 1;
}

~~~

`pointer-events` プロパティのブラウザサポート状況は以下となります。
主要ブラウザすべてで問題なく利用できます。

[Can I use... | CSS pointer-events (for HTML)](http://caniuse.com/#feat=pointer-events)
libvirtでドメインのCPU使用率を計算する

[How do I calculate %CPU in my own libvirt programs?](http://people.redhat.com/~rjones/virt-top/faq.html#calccpu)

そういえばQiitaは$\\LaTeX$記法が使えるらしい。

libvirtにはドメインのCPU使用率を直接取得するメソッドが無いのだが、上記の記事によるとCPUの使用時間から使用率を計算できるようだ。以下はlibvirt-pythonの話。

ドキュメントが整備されつつある。
http://libvirt.org/docs/libvirt-appdev-guide-python/en-US/html/index.html

まずはlibvirtdに接続する。

```py
import libvirt

con = libvirt.openReadOnly()
dom0 = con.listAllDomains()[0]
```

`dom0`がドメイン。

`dom0.info()`でドメインが起動してからCPUを何秒使ったかをナノ秒単位で取得できる（$cpuTime$）。データ構造は[virDomainInfo](http://www.libvirt.org/html/libvirt-libvirt-domain.html#virDomainInfo)。5番目の値。

```py
cpuTime = dom0.info()[4]
```

これを$t$秒ごとに取得したとすると、ドメインのCPU使用率は

```math
\frac{cpuTime_{now} - cpuTime_{now-t}}{t \times nrCores \times 10^9}\times 100
```

$nrCores$はシステムの物理コア数を示し、`con.getInfo()`で取得できる（[virNodeInfo](http://www.libvirt.org/html/libvirt-libvirt-host.html#virNodeInfo)）。

コアごとのCPU使用率を知りたい場合には、`dom0.vcpus()`を使うとコアごとのCPU使用時間を取得できる（[virVcpuInfo](http://www.libvirt.org/html/libvirt-libvirt-domain.html#virVcpuInfo)）。この場合、$nrCores$は1、またはハイパースレッドが効いている場合には2である。
form入力で別サイトへのPOST

サイトAのフォームに入力した情報をサイトAとサイトBの両方にPOSTする方法。
サイトBへのログイン権限は既にある前提。

```php:form.php(@サイトA)
<?php
 if($_POST){
  /* サイトAへの登録処理 */
  //通常のフォーム処理  
  
  /* サイトBへの登録処理 */
  //register.phpはサイトBでの登録画面
  //POSTされた会員情報を登録先のPOSTに合わせて配列に格納
  $member = array('name'=>$_POST['name'],
                  'mail'=>$_POST['mail'],
				  'submit' => 1);


  //ログイン処理
  $params = array('login_mail'   => "test@example.com" ,
                  'login_passwd' => "password" ,
                  'LOGIN'        => "ログイン");

  $fp = fopen("tmp", "w"); 
  $ch = curl_init("http://www.example.com/login.php"); 
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
  curl_setopt($ch, CURLOPT_COOKIEJAR, "cookie"); 
  curl_setopt($ch, CURLOPT_POST, TRUE); 
  curl_setopt($ch, CURLOPT_POSTFIELDS, $params); 
  curl_setopt($ch, CURLOPT_WRITEHEADER, $fp); 
  curl_exec($ch); 
  fclose($fp);
  curl_close($ch); 

  //登録
  $ch = curl_init("http://www.example.com/register.php"); 
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
  curl_setopt($ch, CURLOPT_COOKIEJAR, "cookie"); 
  curl_setopt($ch, CURLOPT_COOKIEFILE, "tmp"); 
  curl_setopt($ch, CURLOPT_POSTFIELDS, $member); 
  curl_setopt($ch, CURLOPT_POST, TRUE); 
  curl_exec($ch); 
  curl_close($ch); 
  
  echo "登録が完了しました";

}else{
echo <<< EOH
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>
  <form action="" method="post">
    <div>名前<input type="text" name="name"></div>
    <div>メールアドレス<input type="text" name="mail"></div>
    <input type="submit" name="send" value="送信">
  </form>
</body>
</html>
EOH;
}
```


サイトBのregisterでの処理は本来

0. 画面を開いて画像を参照
0. 画像保存(複数枚あるが一枚ごとに保存ボタンあり)
0. その他の情報も入力して最終的な保存

という過程なのですが、2.の部分がどうしてもうまくいかなかったのでとりあえずここまでメモ。


#### 参考
[CURLのセッションを引き継ぐ方法](http://www.phppro.jp/phptips/archives/vol16/3)
[PHP cURLの色々な使い方](http://qiita.com/Shadow/items/a5f9574fadd214d7b5c8)

[シリアライズ可能なcURLのラッパークラス](http://qiita.com/mpyw/items/c65fb4ec4cef80909a47)
を使わせて頂こうとしたのだけど、私自身がクラスを上手に使えない子なのと、うちのPHPが5.2.4であるというダブルの障壁によって断念しました…orz
Eclipse Orion 9.0 環境構築〜プラグイン開発・導入

# はじめに
[Eclipse Orion](https://orionhub.org/)は、Eclipse Foundationが開発するWebベースの統合開発環境(IDE)です。
Orionサーバをダウンロードし、ローカル環境で運用することもできます。
現在はHTML, CSS, JavaScriptなど、一部の言語の開発にしか対応していませんが、
プラグインを開発・導入することで他の言語にも対応可能です。
このようにOrionは大変便利なのですが、開発者向けの日本語ドキュメントがまだ少なく、とっつきにくい印象があります。
以上のことから、調べたことを(半分メモ書きとして)書き残します。

# Orionサーバ 環境構築
[こちらのサイト](http://download.eclipse.org/orion/)から最新版をダウンロードします。

記事編集時(2015/09/11)の最新バージョンは9.0です。
解凍したら適当なディレクトリに配置します。
サーバの待ち受けポートはorion.iniで設定できます(デフォルトでは8080)

```:orion.ini
-Dorg.eclipse.equinox.http.jetty.http.port=8080
```

次に、サーバ設定ファイル(orion.conf)をorion.iniと同じディレクトリに配置します。
orion.confのテンプレートはGitHubにあります(https://github.com/eclipse/orion.client/blob/master/bundles/org.eclipse.orion.client.core/web-ide.conf)
設定項目については今回は割愛。何も書き換えなくても問題ないです。

Orionのディレクトリにあるorion.exe(Windows), orion(Linux)などを起動し、
ブラウザからhttp://localhost:8080/ にアクセス、ページが表示できることを確認します。
右上のRegisterリンクから新規アカウントを作成し、ログインできれば成功です。

# プラグインの開発・導入手順
大まかな流れは次のとおりです。

1. JavaScriptでプラグインを記述する
2. それを読み込んだHTMLファイルをWebサーバなどに配置する
3. ブラウザからOrionのページを開き、設定(歯車マーク)→PLUGINSのInstallをクリック。先ほどの作成したHTMLのURLを入力してSubmit
4. 何の問題もなければプラグインが追加されます

Webサーバを立てるのが面倒という人はGitHub Pagesでも。

本記事では1について詳しく説明します。

# Orionプラグインの開発
## JavaScriptライブラリの入手
事前準備として、[orionのディレクトリ]/org.eclipse.client.core_***.jarを展開し、中にあるweb/orionディレクトリの中身をどこかに保存してください。
これがOrionプラグイン用のJavaScriptライブラリになります。
最低限必要なplugin.jsの他にも、非同期処理のためのDeferred.jsや正規表現関係をまとめたregex.jsなどがあります。

## プラグインのソースコード
サンプルとして、エディタ上でCtrl-Shift-eを押すと、文字列"Hello, Orion!"を入力するプラグインを作ってみます。

```html:HelloOrion.html
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8" />
    <title>Hello, Orion!</title>
    <script src="plugin.js"></script>
    <script>
        var headers = {
            name: "My Plugin",
            version: "1.0",
            description: "自作のプラグインたち"
        };
        var provider = new orion.PluginProvider(headers);

        var serviceImpl = {
            run: function(text) {
                return "Hello, Orion!";
            }
        };
        var serviceProperties = {
            name: "Hello Orion plugin",
            key: ["e", true, true]    // Ctrl-Shift-e
        };
        provider.registerService("orion.edit.command", serviceImpl, serviceProperties);
        provider.connect();
    </script>
</head>
<body></body>
</html>
```

Orionプラグインのコードは、およそ次のような構成をしています。

1. プラグインに関する情報を設定したPluginProviderオブジェクトを生成する。各プラグインには1つ以上のサービス(提供する機能の最小単位)を登録できます
2. サービス(今回の例では"Hello, Orion!"の出力)の実装部分とプロパティをJSON形式で記述する。利用可能な項目はサービスのタイプによって異なります。
3. PluginProviderオブジェクトのregisterServiceメソッドを呼び出し、サービスを登録する。引数はサービスタイプ(string), 実装部分(JSON), プロパティ(JSON)
4. 登録したいサービスの数だけregisterServiceメソッドを呼び出し、登録を行う
5. 最後にPluginProviderオブジェクトのconnectメソッドを呼び出す

サービスタイプの一覧は[ここにあります(英語)](http://wiki.eclipse.org/Orion/Documentation/Developer_Guide)

あとは前述の手順に従い、Orion上でプラグインを読みこめば完了です。

複数のサービスを登録する場合、RequireJSなどを利用すると良いかもしれません。

# 参考
Orion/Server admin guide - Eclipsepedia https://wiki.eclipse.org/Orion/Server_admin_guide
Orion/Documentation/Developer Guide/Simple plugin example - Eclipsepedia http://wiki.eclipse.org/Orion/How_Tos/Writing_a_plugin
【JNI】Java VMのシグニチャーまとめ

# Java VMのシグニチャーまとめ

|JAVA Type|Signature|
|:---|:---|
|boolean|Z|
|byte|B|
|char|C|
|short|S|
|int|I|
|long|J|
|float|F|
|double|D|
|Class|先頭に"L"で後ろのパッケージ名末尾に";"<br>ex. String型 -> Ljava/lang/String;|
|Array|先頭に"["後ろにシグニチャー<br>ex. Array(int) -> [I|
Spring Boot の Jetty がバージョン情報を晒しているので止めさせたい

意外と面倒だったのでメモ。

Spring Boot のサーブレットコンテナに Jetty を使っていると、レスポンスヘッダにバッチリ Jetty のバージョンが載ってくる:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~bash
$ curl -o/dev/null -sv http://localhost:8080/foo 2>&1 | grep '^< Server:'
< Server: Jetty(9.2.11.v20150529)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

これを止めさせるには自動で Jetty サーバを作ってるロジックに、下記のような手を加える必要がある:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Config.java
@EnableAutoConfiguration
@ComponentScan(basePackageClasses = Config.class)
public class Config {
    /**
     * レスポンスヘッダ Server 付与する機能を潰す設定
     */
    @Bean
    public JettyServerCustomizer jettyServerNameSuppresser() {
        return server -> {
            Stream.of(server.getConnectors())
                    .flatMap(c -> c.getConnectionFactories().stream())
                    .flatMap(f -> (f instanceof HttpConnectionFactory) ? Stream.of((HttpConnectionFactory) f)
                            : Stream.empty())
                    .forEach(f -> f.getHttpConfiguration().setSendServerVersion(false));
        };
    }

    /**
     * デフォルトの Jetty サーバ作成クラスから、customizers でサーバに手を加える
     */
    @Bean
    public JettyEmbeddedServletContainerFactory jettyEmbeddedServletContainerFactory(
            JettyServerCustomizer[] customizers) {
        JettyEmbeddedServletContainerFactory factory = new JettyEmbeddedServletContainerFactory();
        factory.addServerCustomizers(customizers);
        return factory;
    }
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

起動してアクセスしてみる:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~bash
$ curl -o/dev/null -sv http://localhost:8080/foo 2>&1 | grep '^< Server:'
$ echo $?
1
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Server ヘッダが消えているのが分かる。

「設定ファイルでちょっと設定すればOK！！」だと思っていたのにあてが外れて、思いの外苦労した。

参考: [64. Embedded servlet containers](http://docs.spring.io/spring-boot/docs/current/reference/html/howto-embedded-servlet-containers.html)
【CSS3】Transform（変形）関連のまとめ

#**はじめに**

この記事は、HTMLとCSSの基礎知識がある方向けの内容です。
CSS3から要素の変形が指定できる、transform（トランスフォーム）プロパティが追加されました。
transformプロパティを使うことで、要素に対して移動、回転、伸縮、傾斜の変形を加えることができます。
ボタンにマウスカーソルを乗せたときに、移動したり、大きさを変えたりするのに使われるプロパティです。
jQueryやJavaScriptを使って似たようなことができますが、CSSを使う方がヌルヌル動きます。

transform（変形）には、2D（ XY 方向）と 3D（ XYZ 方向）があり、3D 表示するには複数のプロパティを指定する必要があります。
解説の都合上、プロパティは順番に説明しているため、記事の途中で 3D 表示を試しても意図した 3D 表示がされません。
検証する場合は、一読して全てのプロパティを確認してから試してみてください。
説明内でベンダープレフィックスの記述はしておりません。
検証して動作しないときは、ベンダープレフィックスの要否を確認してください。

#**transformプロパティについて**

transform（トランスフォーム）は、直訳すると変形という意味です。
変形には移動、回転、伸縮、傾斜の4つがあります。
transformプロパティの値に関数を指定することで、移動、回転、伸縮、傾斜の設定ができます。
移動、回転、伸縮は、3D（XYZ方向）による指定ができます。
transformプロパティの値に指定できる関数は下記になります。

####**transformプロパティの値に指定できる関数**

|No|関数|読み方|変形効果|2D（XY方向）|3D（XYZ方向）|
|:--|:--|:--|:--|:--|:--|
|01|translate|トランスレイト|移動|○|○|
|02|rotate|ローテート|回転|○|○|
|03|scale|スケール|伸縮|○|○|
|04|skew|スキュー|傾斜|○|－|

上述している通り、transformプロパティの値に関数を指定することで、変形の設定ができます。
移動や回転など複数指定するときは、記述の仕方に注意する必要があります。
最初にtransformの記述の仕方について確認した後に各関数について見ていきましょう。

##**記述の仕方について**

transformはプロパティですので、複数記述すると最後のtransformプロパティのみ反映されます。
例えば、移動と回転を指定するときは、transformプロパティを複数記述せずに、値に続けて記述してください。
値に複数記述するときは、半角スペースを空けて続けて記述してください。

####**正しい記述**

```css
セレクタ名 {
	transform:translateX(20px) translateY(20px) rotate(40deg);
}
```

####**誤った記述**

```css
セレクタ名 {
	transform:translateX(20px);
	transform:translateY(20px);
	transform:rotate(40deg);
}
```

同じプロパティを複数記述したときは、上書きされるため、最後に記載した rotate(40deg) のみ反映されます。


<ins>また、値に記述する順番も重要で、記述順に変形します。</ins>
例えば、値に「移動・回転・伸縮・傾斜」の順番に指定したときと、逆に「傾斜・伸縮・回転・移動」の順番で指定したときは実行結果が異なる場合があります。
意図した結果にならないときは、順番も確認してください。

# 続きは Zenn で閲覧できます。

今まで無料で公開しておりましたが、記事を有料化しました。

- [【CSS3】transform（変形）関連のまとめ](https://zenn.dev/7968/books/e95d9d5a9a2852)

2021 年 7 月 19 日　300 円

※ 調べて記事にまとめるのに 100 時間前後を費やしています。
※ 知識を得ること以外に時間短縮にもなるので、300 円以上の価値はあると思います。
※ 最初に購入した方々が損をしないように、値上げすることはあっても、値下げはしません。

# 他の CSS 関連の記事も Zenn で購入できます。

下記の記事も調べて記事にまとめるのに 100 時間前後を費やしているので、300 円以上の価値はあると思います。
ご興味のある方は、是非ご覧ください。

2021 年 7 月 19 日　各 300 円

- [【CSS3】transition（変化）関連のまとめ](https://zenn.dev/7968/books/aaf830b1b0cf4a)
- [【CSS3】@keyframes と animation 関連のまとめ](https://zenn.dev/7968/books/14896406b4a8ac)
C#のオーバーロードについて

慣れている方にはあたりまえのことが書いてあると思いますが、動的型付け言語ばかりやってきた私としては謎だったので、色々実験してみました。

下記のようなクラスを作って試しました。

```c#
using System;


namespace OverloadTest : SomeInterface
{
  class Overload
  {
    public void Foo(string value)
    {
      Console.WriteLine("Called string method");
    }

    public void Foo(object value)
    {
      Console.WriteLine("Called object method");
    }

    public void Foo(Overload value)
    {
      Console.WriteLine("Called Overload method");
    }

    public void Foo(SomeInterface value)
    {
      Console.WriteLine("Called SomeInterface method");
    }

    public void Foo(Generic<Overload> value)
    {
      Console.WriteLine("Call Generics<Overload> method");
    }
  }
}
```

### その変数の中に入っている実体の型がなんなのか？ではなく、変数の型がなんのか？で呼ばれるものが決まる。

```c#
var ov = new Overload();

string foo = "aaaa";
object bar = "aaaa";

ov.Foo(foo); // Called string method
ov.Foo(bar); // Called object method
```

### literalを渡すとその型が呼ばれる

```c#
ov.Foo("aaaa"); // Called string method
```

### interfaceとclassはclassが優先される

```c#
ov.Foo(new Overload()); // Called Overload method
```

### オーバーロードが存在しない場合、一番近い親クラスのメソッドが呼ばれる

```c#
//OverloadChildはOverloadを継承したクラス
ov.Foo(new OverloadChild()); // Called Overload method
```

### GenericClassの&lt;T&gt;は暗黙の型変換はされない

```c#
ov.Foo(new Generic<OverloadChild>()); // Called object method
```

`public void Foo(Generic<Overload> value)`は呼ばれません。`Generic<Overload>`でまとめて一つの型ということですね。

### コンパイルエラーCS0121について

「次のメソッドまたはプロパティ間で呼び出しが不適切です」というエラーメッセージですが、VBだと「次のメソッドまたはプロパティ間で呼び出しがあいまいです」と出らしいですが、ソッチのほうがわかりやすいですね。

`SomeInterface`をインプリメントするクラスをOverloadChildに変更すると、このエラーが出ます。メソッドの型が合わなかった時、メソッドを探して暗黙の型変換をしますが、どちらにしていいかわからないからですね。

暗黙の型変換をしない場合、InterfaceよりClassが優先なんだから、型変換時もclassを優先しても良さそうだけど・・・なんかマズイシチュエーションがあるんでしょうね。おそらく。
aタグで画面遷移させない方法

aタグを使って画面遷移させないときに、

```
href="#"
```

とかってやりますよね。
でも、こう書くとクリックしたときにスクロールが画面の最上部にいってしまいます。
そんなウザさを解消する一番（多分）簡単な方法がこちら↓

```
<a href="javascript:void(0)" onClick="hogeFunction();return false;">hogehoge</a>
```
連想配列をfor ... inするときに最後の要素だけ処理を変えたい。

# 連想配列をfor ... inするときに最後の要素だけ処理を変えたい。

- 連想配列をカンマでつないで見ようっと。…というとき単純にfor...inでループにしてカンマを足してると末尾までカンマがついてダサい！
- perlでいうところの join(",",＠array) みたいにしたい！
- ...ということで書きました。
- for (var i = 0 ; i < obj.length ; i++) の時は添字が最後かどうか見ますが、連想配列ではObject.key(obj).pop()で最後の要素を見つけました。

# サンプルソース

```js:sample.js
function join1(delimiter, object) {
	var ret = '';
	for (var k in object) {
		ret += '{"' + k + '":"' + object[k] + '"}' + delimiter;
	}
	return ret;
}

function join2(delimiter, object) {
	var ret = '';
	var lastkey = Object.keys(object).pop();
	for (var k in object) {
		ret += '{"' + k + '":"' + object[k] + '"}' + (lastkey !== k ? delimiter : '');
	}
	return ret;
}

var langs = {
	'en': 'English',
	'ja': '日本語',
	'zh-CN': '简体中文',
	'zh-TW': '傳統中文',
	'ko': '한국',
	'de': 'Deutsch', //最後に余分なカンマ付き
};

console.log('## 末尾に余分なデリミタがつく☠');
console.log(join1(",", langs));

console.log('## つかない♡');
console.log(join2(",", langs));
```

# 実行結果

```shell-session
>node sample.js
## 末尾に余分なデリミタがつく☠
{"en":"English"},{"ja":"日本語"},{"zh-CN":"简体中文"},{"zh-TW":"傳統中文"},{"ko":"한국"},{"de":"Deutsch"},
## つかない♡
{"en":"English"},{"ja":"日本語"},{"zh-CN":"简体中文"},{"zh-TW":"傳統中文"},{"ko":"한국"},{"de":"Deutsch"}

>
```
Swiftでビジュアルプログラミング



SwiftでProcessingみたいにスケッチやりたかったのですが、やり方かがまったく
わからなかったので、簡易なものですが作ってみました。
(そもそも、みなさんSwiftでどうやってるんですか？)

ちなみに
OpenGLESはSwiftではまだ対応しきれてないようです。orz(これつかえればそもそも問題ないはず)
Metalは情報なさすぎて挫折。
CoreAnimationとか全然わからないし、Tween系？の実装ばかりなのでこれも外す。
SpriteKitもCAとおなじで使いづらかったので却下

コードはこちらにあります。
https://github.com/SuguruSasaki/SwiftProcessing


### 仕組み
CoreGraphicsにBezierPathというクラスがあったので、これを利用しています。
CALayerの存在がまだよくわからなかったので、UIViewの中にBezierPathで描画しています。

### 使い方
今回は、下記の画像のようにドットを描画して動かしてみます。
![スクリーンショット-2015-09-11-16.47.16.png](https://qiita-image-store.s3.amazonaws.com/0/15535/11db1aa9-2d3d-4301-243c-be1f574720f5.png "スクリーンショット-2015-09-11-16.47.16.png")


### フレーム処理を実装する
ProcessingやOpenFrameworksのupdate/drawのように一定間隔で呼び出しをして欲しいので、
ViewController内に"EnterFrameBeacon"インスタンスを作ります。

```Swift
self._beacon = EnterFrameBeacon()
self._beacon.initialize(fps: 60.0)		// FPS設定
self._beacon.addEventListener(self)		// Delegate設定
```

EnterFrameBeaconはinitializeで設定したフレームレートで通知してきます。
通知を受け取るために、addEventListenerでリスナー登録します。

通知を受け取るためには、ViewControllerにEnterFrameDelegateプロトコルを設定します。

```Swift
class ViewController: UIViewController, EnterFrameDelegate{
```

次にupdateメソッドを実装します。

```Swift
func update {

}
```

これで通知を受け取ることができます。


### Canvasを作る
描画エリアを作成します。CanvasAppクラスを継承したサブクラスを作成します。
今回はMyCanvasとします。init、update、drawを追加します。

```Swift
required init(coder aDecoder: NSCoder) {
  super.init(coder: aDecoder)
}
    
override init(frame: CGRect, clearColor: UIColor) {
  super.init(frame: frame, clearColor: clearColor)
}

override update(){

}

override draw(){

}
```
update/draw内にあれこれコードを書いて試すことができます。

### ドットを表示する。
とりあえず、何か動かしてみたいので、ドットを作って表示します。
MyCanvasのinit内でParticleを作ります。 Particleは座標管理をするだけです。

```Swift
for var i = 0; i < 200; ++i {
  var px: CGFloat = Math.randomBetweenNumbers(0.0, secondNum: self.frame.width)
  var py: CGFloat = Math.randomBetweenNumbers(0.0, secondNum: self.frame.height)
  var p: Particle = Particle(center: CGPointMake(px, py))
            
  var vx: CGFloat = Math.randomBetweenNumbers(-5.0, secondNum: 5.0)
  var vy: CGFloat = Math.randomBetweenNumbers(-5.0, secondNum: 5.0)
  p.setVelocity(vx, y: vy)
  self._particles.append(p)
}
```


draw内でドットを描きます。

```Swift
 var max = self._particles.count
 for var i = 0; i < max; ++i {
   var p: Particle = self._particles[i] as Particle
   DrawCircle.draw(p, radius: CGFloat(3.0), strokeColor: UIColor.redColor(), fillColor: UIColor.redColor())
 }
```

これで完了です。

あとは、githubのコードを参考にしてください。
他に良いやり方知ってる人いたら教えてください！
Oracle：指定時間内のどの処理でどれだけIOが発生したのかを確認するSQL

ん～。いまいちまだ怪しい感じですがメモ的に…。

EE（Enterprises Edition）のみで利用可能な方法ですが。
**v$active_session_history** を利用して、指定した時間帯においてどの処理（セッションID、SQL ID別）でどれだけのIOが発生したのかを集計するSQLを考えてみました。

```sql
SELECT
    SESSION_ID,
    users.USERNAME,
    ash.SQL_ID,
    sqltext.COMMAND_TYPE,
    to_char(min(sample_time),'yyyy/mm/dd hh24:mi:ss') as sample_time_min,
    to_char(max(sample_time),'yyyy/mm/dd hh24:mi:ss') as sample_time_max,
    sum(DELTA_READ_IO_REQUESTS) as READ_IO_REQUESTS,
    sum(DELTA_WRITE_IO_REQUESTS) as WRITE_IO_REQUESTS,
    sum(DELTA_READ_IO_BYTES) as READ_IO_BYTES,
    sum(DELTA_WRITE_IO_BYTES) as WRITE_IO_BYTES,
    sum(DELTA_INTERCONNECT_IO_BYTES) as INTERCONNECT_IO_BYTES
FROM
    v$active_session_history ash
    left join v$SQLTEXT sqltext on(ash.SQL_ID=sqltext.SQL_ID)
    left join dba_users users on(ash.user_id=users.user_id)
WHERE
    sample_time >= to_timestamp('201509111600','YYYYMMDDHH24MI') AND
    sample_time <= to_timestamp('201509111700','YYYYMMDDHH24MI') AND
    session_type='FOREGROUND'
GROUP BY
    SESSION_ID,
    users.USERNAME,
    ash.SQL_ID,
    sqltext.COMMAND_TYPE
ORDER BY
    SESSION_ID,
    ash.SQL_ID
```

おまｗ　それ違うぞｗ　というアドバイスぜひ頂けるとありがたいです。
【GrowthPush】Android版SDKの1.1.4がミスってる件

# GrowthPushのAndroid版SDK1.1.4がミスってる件
下記で配布されているGrowthPushのAndroid版SDK ver1.1.4がビルド時にミスってる。
https://github.com/SIROK/growthpush-android/releases/tag/1.1.4

`.jar` ファイルを生成する時に要らんもんまで入れたらしい。

JARファイルはただのZIPファイルなので手動で `.zip` に書き換えて展開してみると、

- bin/
- com/
- META-INF/

の3つが出てくる。が、 `bin/` 以下が丸っと要らない。

# ホンモノのJARファイルの在処
`bin/` は要らないと言ったが、生成(ミス)時に入れ子のようになっており、本当に必要なJARファイルは以下のパスにある。

`growthpush.jar(.zip)/bin/growthpush-android.jar`

こいつを `growthpush.jar` にリネームしてプロジェクトに取り込めば良い。
XenServer上にZabbix-agentインストール

忘備録

今回は既に動作しているXenServer6.5のホスト上に
Zabbix-agnetを動作させるまでの手順

【前提条件】
既にXenServerとZabbix-Serverが設定されている事。
XenServerのホスト名は仮にxen-server01とする。
Zabbix-ServerのIPは仮に192.168.100.100とする。

【Zabbix-agent】
sshでXenServerに入り、以下のコマンドを実行。
<pre>
rpm -ihv http://repo.zabbix.com/zabbix/2.4/rhel/5/x86_64/zabbix-release-2.4-1.el5.noarch.rpm
</pre>
Zabbix-agnetインストール
<pre>
yum install zabbix-agent --disablerepo=citrix,base,epel
</pre>

コンフィグ設定
vi /etc/zabbix/zabbix_agnetd.conf
<pre>
85行目：Zabbix サーバーを指定
Server=192.168.100.100

126行目：Zabbix サーバーを指定
ServerActive=192.168.100.100

137行目：自身のホスト名を指定
Hostname=xen-server01
</pre>

Zabbix-agent起動
<pre>
service zabbix-agent start
chkconfig zabbix-agent on
</pre>

XenServerのPort解放
Zabbixはデフォルトの設定ですと、10050で通信をするので
XenServer側のPortを開けてやる必要があります。
（外向けの環境の場合はNW管理者と相談の上実施するように）
vi/etc/sysconfig/iptables
<pre>
-A RH-Firewall-1-INPUT -m conntrack --ctstate NEW -m tcp -p tcp --dport 10050 -j ACCEPT　　←追加
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT
</pre>
iptables再起動
/etc/init.d/iptables restart

【Zabbix-Server】
XenServerのホストを追加
「Zabbixで監視対象ホストを追加」と同様の手順になります。
環境変数を別ファイルにまとめて定義する

実行時に環境変数を切り替えたいので、別ファイルに抜き出すバッチファイルを作成してみた。

# 1. loadenv.bat 作成

以下の内容で、`loadenv.bat` を作成する。

```bat
@for /f "delims=" %%i in (%1) do @( call :_check %%i )
@set __x=
@exit /b 0

:_check
  @set __x=%*
  @if not "%__x:~0,1%" == "#" ( call :_set %* )
@exit /b 0

:_set
  @set %*
@exit /b 0
```

# 2. 環境変数定義ファイルを作成する

以下のフォーマットで環境変数定義ファイルを作成する。
拡張子はなんでもいい。

```env.txt
# シャープを付けるとコメントが書ける
hoge=fuga

# この値は設定されない
#foo=bar

# 値にはスペースが含まれていてもいい
abc=a b c
```

# 3. 実行する

`loadenv.bat` をカレントディレクトリかパスが通っている場所に配置し、呼び出す。

```bat
call loadenv env.txt
```

# 4. 確認する

```bat
(loadenv 後)

> echo %hoge%
fuga

> echo %foo%
%foo%

> echo %abc%
a b c
```

# 5. まとめ

設定をバッチファイルに直書きしなくてもいいし、コメントも使えて便利！！
scala syntactic sugar？

全部同じ行動をします。

```
def sample:Action[AnyContent] = {
  val result = Ok("Hello")
  val action = Action(result)
  return action
}
```

```
def sample1:Action[AnyContent] = {
  val action = Action(Ok("Hello"))
  return action
}
```

アクションを直接生成

```
def sample2:Action[AnyContent] = {
  return Action(Ok("Hello"))
}

```

scalaはreturnかかなくていい

```
def sample3:Action[AnyContent] = {
  Action(Ok("Hello"))
}
```
scalaは戻り値を型推論する

```
def sample4 = {
  Action(Ok("Hello"))
}
```

scalaはメソッドが１行ならカッコもいらない

```
def sample5 = Action(Ok("Hello"))
```

scalaは引数のカッコを中括弧にできる

```
def sample6 = Action{Ok("Hello")}
```

中括弧の中身は複数行かける

```
def sample7 = Action{
  Ok("Hello")
}
```
LabVIEW Tips: cRIO-906x(NI LinuxRT)用のC/C++開発時のメモ

# cRIO-906x(NI LinuxRT)用のC/C++開発時のメモ

## toolchainについての情報
LabVIEW 2014 NI LinuxRT toolchainについての情報はこちら
https://decibel.ni.com/content/docs/DOC-39252

cRIO-9068などのCPU がARM搭載cRIOを前提にARM用のtoolchainの説明になります。(Atom搭載cRIOの場合はx64用を使います。)
"GNU C & C++ Compilers for ARMv7 Linux (Windows host) 2014"から 2014Eclipse.exe をダウンロードします。

Eclipseの動作用にJavaが必要です。私はJRE7を使用しました。
ちなみに2014Eclipse.exeに含まれているEclipseはKeplerです。

## チュートリアル
Eclipseでクロスコンパイル＆リモートデバッグするための手順はこちら
http://www.ni.com/tutorial/14625/ja/

ちなみに RaspberryPiのWindowsクロスコンパイル環境をEclipseで構築する時もだいたい同じ感じになります。こちらはネットにたくさんの情報があります。
LinuxやC/C++クロスコンパイルに不慣れな方は、いきなりcRIOで試すより、RaspberryPiでちょっと肩ならししてからの方がいいかもしれません。RaspberryPiは気軽に入手できますから。

## Eclipse設定(Windows用)

### プロジェクト開始時に聞かれる、prefixとpathの情報

ARM用のツールチェインの場合は、以下のようになります。

prefix: arm-nilrt-linux-gnueabi-

path Win7 32bit:
C:\Program Files\National Instruments\Eclipse\14.0\arm\sysroots\i686-nilrtsdk-mingw32\usr\bin\armv7a-vfp-neon-nilrt-linux-gnueabi

path Win7 64bit:
C:\Program Files (x86)\National Instruments\Eclipse\14.0\arm\sysroots\i686-nilrtsdk-mingw32\usr\bin\armv7a-vfp-neon-nilrt-linux-gnueabi

上記は、LabVIEW 2014用で、2015になったら、また新しいtoolchainが公開されるかもしれません。その時はprefixやpathが変わる可能性があります。
activatorプロジェクトをIntelliJ14で開く方法

「Open」を開く。

![Welcome_to_IntelliJ_IDEA.png](https://qiita-image-store.s3.amazonaws.com/0/889/940d117c-da7e-526d-7218-da8658a47d8c.png)

`build.sbt`があるディレクトリを選択して「Choose」を押す。

![Screenshot_2015_09_11_15_04.png](https://qiita-image-store.s3.amazonaws.com/0/889/d5498004-33d5-4a78-7842-62bfa894766e.png)

* Use auto-import に✔
* Download source and docsに✔
* Project SDKを1.8にする
* LauncherはCustomを選びactivator-launcher-*.*.*.jarを選択する

![Import_Project_from_SBT.png](https://qiita-image-store.s3.amazonaws.com/0/889/ef7eee26-fb4b-1683-5f06-7b868a72ff21.png)
Bootstrap v4 - Getting started編 -

この記事では実際にBootstrapを導入して、使用できるところまでを追っていきます。

# Bootstrapをはじめる
Bootstrapを始めるためには、jQueryとBootstrapの提供するJSファイルとCSSファイル、この3つを読み込む必要がある。
## 簡単に始める（CDNの利用）
[CDN](http://www.cdnetworks.co.jp/about/)を利用すれば、わざわざダウンロードする必要もなく簡単。

```html

<!DOCTYPE html>
<html lang="en">
  <head>
    <!-- Required meta tags always come first -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta http-equiv="x-ua-compatible" content="ie=edge">

    <!-- Bootstrap CSS -->
    <link rel="stylesheet" href="https://cdn.rawgit.com/twbs/bootstrap/v4-dev/dist/css/bootstrap.css">
  </head>
  <body>
    <h1>Hello, world!</h1>

    <!-- jQuery first, then Bootstrap JS. -->
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
    <script src="https://cdn.rawgit.com/twbs/bootstrap/v4-dev/dist/js/bootstrap.js"></script>
  </body>
</html>
```

このコードはBootstrapのdocumentから引っ張ってきたもの。
ポイントとしては

- HTML5による記述
- Internet Explorerは最新版でのみ[^3]
- viewportを使ってレスポンシブに対応
- box-sizingはborder-boxで指定
- Normalize.css実装済み

## ダウンロードする
### Bootstrapの公式ページから
ダウンロードは以下から
[Bootstrap/getting-started/download](http://v4-alpha.getbootstrap.com/getting-started/download/)

Bootstrap v4からは~~CSSでも~~LessでもなくSassで配布されている。
利用するにはGruntの環境が必要に。がんばりましょう。

```
2015/09/11 追記
v3ではLessが配布されていたのですが、v4からはSassに以降したということです。
CSSはすでにGruntでビルト済みのものがdistフォルダに入っています!!
```

### パッケージマネージャーを使う
以下に対応。

- Bower
`bower install bootstrap`
- npm `npm install bootstrap`
- Meteor `meteor add twbs:bootstrap`
- Composer `composer require twbs/bootstrap`

### カスタムビルド
Bootstrapの中でも使いたいものだけダウンロードすることができる。
v4ではまだ準備中っぽいのでまた今度更新します。

# ちょっとしたカスタマイズ
以下の値は`_variables.scss`の42-62行目あたりを書き換えてGruntで再コンパイルすることで、カスタマイズが簡単にできる。

| variable | default | Description |
|:--|:-------:|:--|
|`$spacer`|1rem|デフォルトのspacerの値|
|`$enable-flex`|false|float, display:tableとdisplay:flexの切り替え[^2]|
|`$enable-rounded`|true|border-radiusを定義しておく|
|`$enable-shadows`|false|box-shadowを定義しておく|
|`$enable-gradients`|false|背景グラデーションを定義しておく|
|`$enable-transitions`|true|transition効果を定義しておく|
|`$enable-hover-media-query`|false|タッチデバイスの時はhover要素を無効化にする[^1]|

[^1]: タッチデバイスに関する:hoverや:focusに関する記述は[ここ](http://v4-alpha.getbootstrap.com/getting-started/browsers-devices/#sticky-hoverfocus-on-mobile)に

[^2]: flexへの対応はv4での目玉っぽいです。flexboxをベースとしたグリッドシステムやコンポーネントが用意されているそうな。

[^3]: v4ではIE8をサポート外としました。なのでピクセルではなくremやemといった単位が使われています。

カスタマイズオプションや、カスタマイズ性そのものは、v4で強化されたっぽいのでたくさん試していきたいな！
iOS 9からAPNsデバイストークンがアプリインストールの度に変わるようになったようです


iOSのAPNSデバイストークンの変更タイミングは不定で、APNsデバイストークンのハンドリング(通知サーバーへのデバイストークン伝達など)は、アプリが起動される度に毎回行うことが推奨されています。

とはいえ、観測・実験ベースで、変更タイミングが大体分かっていて、この記事など参考になります(iOS 8までの挙動)。

- [iOS7でのAPNSデバイストークンに関する挙動について - ゆれくるコール開発日誌](http://rcsc.hatenablog.com/entry/2013/10/25/190902)
- [iOS7でプッシュ通知のデバイストークンに大きな変更 | 三度の飯とエレクトロン](http://blog.katty.in/4162)

iOS 7にアップデートのタイミングで変わるようですが、iOS 8・9へのアップデートのタイミングで変わるかは把握していません。

繰り返しになりますが、下記のように変更タイミングは**不定**と明記されているので、ロジック自体はそれに頼らずに組むべきです。

> Never cache device tokens in your app; instead, get them from the system when you need them. APNs issues a new device token to your app when certain events happen. The device token is guaranteed to be different, for example, when a user restores a device from a backup, when the user installs your app on a new device, and when the user reinstalls the operating system. Fetching the token, rather than relying on a cache, ensures that you have the current device token needed for your provider to communicate with APNs. When you attempt to fetch a device token but it has not changed, the fetch method returns quickly.
> [Local and Remote Notification Programming Guide: Configuring Remote Notification Support](https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/HandlingRemoteNotifications.html#//apple_ref/doc/uid/TP40008194-CH6-SW1)

具体的には、以下の処理が基本です。

1. アプリが起動される度に、通知が許可されていれば毎回[registerForRemoteNotifications](https://developer.apple.com/documentation/uikit/uiapplication/1623078-registerforremotenotifications)メソッドを呼ぶ
2. デバイストークン取得タイミングで[application:didRegisterForRemoteNotificationsWithDeviceToken:](https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1622958-application)が呼ばれる
  - このメソッドが呼ばれる度にそのデバイストークンを用いて適切にハンドリング
  - 仮にアプリ起動中に変更されても再度呼ばれる(このパターンは今まで観測したことないですが)

---

上記踏まえた上で、実際問題iOS 9以降のデバイストークンがどのように変わるのか、観測ベースで説明します。

## iOS 9からはAPNsデバイストークンがアプリインストールの度に変わる模様

iOS 9からはアプリをインストールし直す度に、`UIApplication`のこのメソッドを初めて呼んだタイミングで通知確認ダイアログが表示されるようになりました。

```swift
public func registerUserNotificationSettings(notificationSettings: UIUserNotificationSettings)
```

![Untitled.png](https://qiita-image-store.s3.amazonaws.com/0/19398/13dfb8a8-03c7-01de-39a9-56d694f7216d.png "Untitled.png")


さらに、こちらに渡される`deviceToken`も変わることを確認しています。

```swift
func application(application: UIApplication!, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData!)
```

## これによる影響は？

基本的には、開発しやすくなると思っています。

今まで、通知確認ダイアログを再表示するには、端末をリセットしたり、時間ズラして再表示させる技など、使う必要があって面倒でした。

参考: [iphone - Reset push notification settings for app - Stack Overflow](http://stackoverflow.com/questions/2438400/reset-push-notification-settings-for-app)


さらに、デバイストークンが変わるような状態を再現となると、冒頭に書いたとおりさらに大変になります。

シミュレーターの場合は、簡単に端末リセットが出来るのでダイアログを出すことまでは簡単ですが、そもそも通知はシミュレーターには届かなかったりで一貫した確認が出来ませんし、最終的には実機での確認もしたいところですし。

それらの苦労が無くなり、アプリを再インストールするだけで再現出来るようになるので、かなり捗るかと思っています。

気になることとしては、今までよりもデバイストークンの変更頻度が増えて無効なデバイストークンの増加ペースが上がるので、そのあたりの処理をこれまでよりきちんとしていかないと良くないと思います。
MySQLのSQLをtokenizeするRubyの正規表現

mysqldumpしたSQLをparseするための自分メモ

```rb
sql = <<__SQL__
CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `email` varchar(11) NOT NULL,
  `created_at` datetime DEFAULT NULL,
  `updated_at` datetime DEFAULT NULL,
  `restaurant_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `index_users_on_email` (`email`),
) ENGINE=InnoDB AUTO_INCREMENT=1000 DEFAULT CHARSET=utf8;
__SQL__
p sql.scan(/(?:''|(?:'.*?[^']'(?!'))|`.*?`|-?\d+(?:\.\d+)?|\w+|\S)/m)
```
Expressで非同期処理中の例外をハンドリングする

# 概要

Express (Node.js) を用いたアプリケーションを構築する場合、HTTP リクエストを受け取った直後にレスポンスを返し、その後非同期でリクエストに応じた処理を実行したいケースがあります。

```lang:Node.js
var request = require('request');

router.post('/create', function(req, res, next) {
  res.send({message: 'OK'});

  // send data to API gateway (async)
  request.post({
    url: '{API_GATEWAY}',
    form: JSON.stringify(req.body),
    timeout: 3000
  }, function(error, response, body) {
    // call an undefined method
    undefinedMethod();
  };
});

```

上記例の場合、`/create` をリクエストすると `API_GATEWAY` への API コールが非同期で実行され、レスポンス受信時に例外をスローしています。
ただし、例外ハンドラを設定していたとしても、非同期処理で発生した例外は捕捉されない点を留意する必要があります (例外が捕捉できない理由は [JavaScriptと非同期のエラー処理](http://techblog.yahoo.co.jp/programming/javascript_error/) が詳しい)。

非同期処理で例外が発生すると、サーバプロセスはその時点で落ちてしまいます。

```lang:server_log
ReferenceError: undefinedMethod is not defined
```

# 対策

非同期コードを `try/catch` で囲う対策もありますが、ナンセンスな気もするので、ここでは Express domain ミドルウェアを使った対策を紹介します。
Express domain は Node 0.8 から導入された domain モジュールに依存します。domain モジュールの概要については [クラスメソッドの記事](http://dev.classmethod.jp/server-side/domain/) が分かりやすいです。

初めに [express-domain-middleware](https://github.com/brianc/node-domain-middleware) を Express のプロジェクトにインストールします。

```lang:shell
$ npm install express-domain-middleware --save
npm WARN package.json nodejs@1.0.0 No description
npm WARN package.json nodejs@1.0.0 No repository field.
npm WARN package.json nodejs@1.0.0 No README data
npm WARN package.json domain@0.0.1 domain is also the name of a node core module.
npm WARN package.json crypto@0.0.3 crypto is also the name of a node core module.
express-domain-middleware@0.1.0 node_modules/express-domain-middleware
```

次に `app.js` を開き、ミドルウェアを登録します。ついでにエラーハンドラの設定も記載しておきます。

```lang:Node.js
var domain = require('express-domain-middleware');

var app = express();
app.use(domain);

...

// exception handlers
app.use(function(err, req, res, next) {
  logger.error.fatal(err);
});
```

それでは先ほどの `/create` メソッドを再度実行してみましょう。
今度はサーバプロセスが落ちることなく、非同期処理で起きた例外が捕捉されていることが分かるかと思います。

```lang:application_log
[2015-09-11 14:21:14.157] [FATAL] error - { [ReferenceError: undefinedMethod is not defined]
  domain:
   { domain: null,
     _events: { error: [Function] },
     _maxListeners: undefined,
     members: [ [Object], [Object] ],
     id: 1441948872626 },
  domainThrown: true }
ReferenceError: undefinedMethod is not defined
...
```
Herokuが、Private Spacesとして東京リージョンに対応しました！


<blockquote class="twitter-tweet" lang="en"><p lang="ja" dir="ltr">日本の皆さんお待たせしました！ <a href="https://twitter.com/hashtag/herokujp?src=hash">#herokujp</a> <a href="https://t.co/cuktvBCpNv">https://t.co/cuktvBCpNv</a></p>&mdash; Heroku JP (@herokujp) <a href="https://twitter.com/herokujp/status/641966702985539584">September 10, 2015</a></blockquote> <script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

[Heroku | Introducing Heroku Private Spaces: Private PaaS, delivered as-a-Service](https://blog.heroku.com/archives/2015/9/10/heroku_private_spaces_private_paas_delivered_as_a_service)

> Even better, this isolation architecture also allows for more geographic control; Spaces can be deployed in Frankfurt, Germany, Tokyo, Japan, or in the United States in either Virginia or Oregon, with more regions to be added in the future.


### Tokyo, Japan :tada: 

Herokuはお手軽に使えて良いサービスだと思いますが、おそらく、東京リージョンが無くてレスポンスタイムが不利なことが一番のネックだったと思います。
解消されて良かったですね(　´･‿･｀)

【追記】
> Available today in public beta, Private Spaces is powered by Heroku Dogwood

まだbetaで、productionでは使わない方が良い模様ですʕ ·ᴥ·ʔ

---

2012年の記事ですが、ご参考に:

- [\[Heroku\] Amazon EC2 北米リージョンで動いるので、日本からのレスポンスタイムは300msぐらい | CodeNote.net](http://codenote.net/heroku/618.html)
4K解像度ハンドセット端末の発表されたけど、まだAndroid APIはxxxxhdpiに対応していない（追記あり）


社内外でiOS9の対応が盛り上がっていますが、そういえばAndroidでも（Android 6.0以外で）結構大きなニュースがあったなあと思いだしたので共有します。
ある意味では、Android 6.0よりも深刻な気はしています。

## 5.5インチで4K（3840 x 2160）解像度端末の発表

[Xperia Z5 Premium / Z5 / Z5 Compact 詳細比較。解像度とメモリの差に注意 - Engadget Japanese](http://japanese.engadget.com/2015/09/02/xperia-z5-premium-z5-z5-compact/)

一週間前の9/3に、Xperia Z5が発表されました。
今回のXperia Z5は３機種発表されており、その１つの「Xperia Z5 Premium」は世界初の「４Ｋ解像度のハンドセット端末」となります。
 
### ディスプレイ関連情報（dpiは手計算）

|項目       |Z5 Premium |Z5 |Z5 Compact|
|:---------|:-----------|:---|:--|
|画面サイズ  |5.5インチ             |5.2インチ      |4.6インチ     |
|解像度     |3840 x 2160          |1920 x 1080   |1280 x 720   |
|dpi       |801dpi(**xxxxhdpi**)|424dpi(xxhdpi)|319dpi(xhdpi)|

~~ご覧のとおり、Z5 Premiumでは既存のカテゴリ分類の最大である「xxxhdpi（480〜640dpi）」を遥かに上回っているため、新規カテゴリの「xxxxhdpi」に割り当てられることになるかと思われます。~~

**（追記）実際には、動画や画像などのメディア表示は４Ｋ表示で行い、アプリ関連はFullHD（1920x1080）解像度として認識＋表示されるようです。画面上ではアップコンバートされたような形で表示されるかと思います。**

**[世界初4Kスマホ Xperia Z5 Premium、実はほとんどフルHD表示。写真＆動画のみ4K - Engadget Japanese](http://japanese.engadget.com/2015/09/15/4k-xperia-z5-premium-hd-4k/)**

**とはいえ、5.5インチで4K表示が可能なディスプレイが登場していることは事実ですので、以下は「実際に現行のAPIでアプリも４Ｋ解像度表示されたらどうなるか」という体で読んでいただければと思います。（追記終わり）**

とはいえ、実際にxxxxhdpiがすでにAndroid API側で認識されているかというと、そういうわけでもないようです。

### まだOS側ではxxxxhdpiを想定していない？

[DisplayMetrics | Android Developers](http://developer.android.com/intl/ja/reference/android/util/DisplayMetrics.html)

こちらがその名のとおり、DisplayMetrics関連のクラスになりますが、カテゴリ分けに使っている（と思われる）定数には、DENSITY_XXXXHIGHがありません。DENSITY_XXXHIGHまでのようです。

よく見るとコメントでも「xxxhdpiが入るのは4KのTVとかだから！」みたいなことが書いてあるので、本家もまだ2K解像度のハンドセット端末がうじゃうじゃ出てきている現実を直視できていないのかもしれません。

[tools/aapt/AaptConfig.cpp - platform/frameworks/base - Git at Google](https://android.googlesource.com/platform/frameworks/base/+/android-5.1.1_r18/tools/aapt/AaptConfig.cpp)

実際のリソース部分のディレクトリ分けをしているのはこの部分？っぽいですが、5.1.1の時点ではまだこちらも対応はされていないようです。（6.0はまだ公開されていないようなので、もしかしたら既に対応済みかもしれません。）
 
## 結論

上記の内容から、おそらく慌ててxxxxhdpiのリソースフォルダとリソースを用意しても、OS側で読み込んでくれない可能性はあります。が、このへんは端末（メーカー側）で対応している可能性もありますし、今後AOSPレベルで対応されることは間違いないでしょう。

こうなると、現状でAndroidのdpカテゴリは、ldpi〜xxxxhdpiで7種類になってしまいました。アプリ側は当然、画像リソースの管理をさらに考えたデザインを必要に迫られることになるでしょうし、「ハンドセットで4K解像度」の時点で、アプリ以外にも画像リソースを提供するAPIやWebデザインでも、これを踏まえた考慮が必要になってくることになるでしょう。

Z5 Premiumの国内販売は決まっていませんが、これを皮切りに他のメーカーでも4K解像度端末が販売されていくことは間違いありません。国内初の2K解像度端末「isai FL」が発売されて1年で他のメーカーからも2K解像度端末が発売されるようになっています。

そのことも踏まえ、今後のアプリやWebサイトのデザインは十分気をつけましょう。いつか自身の首を締めることになります。

## おまけ（おさらい）

1dpあたりのpx数はこうなります。
ハンドセットは4〜6インチぐらいの端末を想定して書いています。

|dp|px|備考|
|:--|:--|:--|
|ldpi    |0.75px||
|mdpi    |1px   |10インチHD端末|
|hdpi    |1.5px |7インチHD端末、10インチFHD端末|
|xhdpi   |2px   |HDハンドセット端末、7インチFHD端末、10インチ2K端末|
|xxhdpi  |3px   |FHDハンドセット端末、7インチ2K端末、10インチ4K端末|
|xxxhdpi |4px   |2Kハンドセット端末、7インチ4K端末|
|xxxxhdpi|6px   |4Kハンドセット端末|

**（追記）本文中にも記載していますが、Xperia Z5 Premiumではメディア（動画・画像）のみ４Ｋ表示ということでした。深くお詫び申し上げます。**
Ascend Mate7(Huawei端末)でlogcatを表示できるようにする


##問題点
Ascend Mate7を含むHuawei端末では初期状態では開発時のアプリのlogがlogcatに表示されない。

##解決策
隠しメニューからLogの表示設定ができる。

1. 隠しメニューの表示方法
「電話」アプリを起動して「\*#\*#2846579#\*#\*」を入力

1. Logの表示設定をONにする
「ProjectMenu」
　　　↓
「Background setting」
　　　↓
「Log setting」
　　　↓
「LOG on」に変更
React.js Meetup #2に行ってきました

※なぜか限定公開になっていたので公開


React.jsの勉強熱を上げるためにReact.js Meetupに行ってきました。

イベントページはこちら
http://eventdots.jp/event/568979
http://reactjs-meetup.connpass.com/event/19504/

会場について
===

最近オープンしたdots.が会場でした。
初めて行きましたがかなり広くて、中央ステージ（に使えるひな壇）に正対して聴講者用のひな壇がある構成が良い感じでした。
あと、ソファー席？がたくさんあってセミナー会場というよりもラウンジという表現の方が似合う感じ。

講演について
===

当日の資料はこちら
http://reactjs-meetup.connpass.com/event/19504/presentation/

React v0.14について(@koba04さん)
---

https://speakerdeck.com/koba04/reactjs-v0-dot-14-changes

v0.14はまだBETA3で近日中にRC版が出るはず。

v0.14で使えるようになる機能、使えるようになるけどまだこれからな機能などの紹介。
詳しくは発表資料参照。

今まで使われていたreact-toolsがdeprecatedになり、babelが使われるようになりました。
（v0.14から、というわけではなく現時点でもbabelでやるのがいいらしい）

v0.15はそれほど間をおかずにリリース予定。

Flowtypeについて(@kelemen_viktorさん)
---

Viktor KelemenさんはFacebookの中の人。
flowtypeというfacebook製のシンタックスシュガーのようなツールの紹介。

JavaScriptにおける型がない、とかNullチェックめんどいとか、を解決するツール。MicrosoftのTypeScriptに近いっぽい。

Babelを買収したので、BabelとFlowtypeの親和性を高めてES2016にもコミットしていくことで標準化を目指す、みたいなことを言っていた。

ちなみにLT枠で発表していた @teppeisさんに「いうても型チェックツールだし、サードパーティライブラリとの互換性にも課題あるけどな」と斬られていました。

Introduction to Redux(@axrossさん)
---

https://speakerdeck.com/axross/introduction-to-redux

Gunosyの中の人に最近なったらしい。
React(view)と併せて使うFlux(Controller) FrameworkのReduxの紹介。

Fluxの中でも各オブジェクトの「状態管理」に重きを置いたフレームワーク。

1. ツリー構造で表現された各状態Stateに対してReducerという層を用意する。
2. 画面(view)からイベントを受け取ると全Reducerに通知される。
3. Reducerは自分が反応する必要があるかどうか判断。条件に合致すればStateを更新する。
4. 画面(view)は状態ツリーを定期的に読みに行き、変更点があれば差分を更新する。
このあたりはいわゆるVirtualDOMの特徴

なお、2でのイベント通知内容に対してMiddlewareという層で通知の操作が可能（ロギング、バリデーション、認証……など）

別にReactと併せて使うことは必須ではない。AngularJS用のng-reduxもある。

Reactやフロントエンドの文脈の中だけではなく、アプリケーションの根源的な課題である「状態の管理」を解決しようとしている。

LTについて
===

LT枠では「ReactComponentのコンストラクタを追いかけて」というタイトルで話をされたFringe81の@jshosomiti (JSほそ道)さんのスライドが面白かったです。
React(というよりjsx)のReactElementをごにょごにょしてHTMLElementにしていくところを、ソースを読み解くことで初学者に正しく説明できるようにする、というテーマでした。
詳細はスライドにて。
https://speakerdeck.com/hosomichi/reactcomponentfalsekonsutorakutawozhui-ikakete
古いアプリの ghc-7.8 、 ghc-7.10 系への対応

先月、 [ghc-7.6.x 系でビルドしていたアプリ](https://github.com/perl6/Pugs.hs) を ghc-7.10.x でビルドできるようにしたので、忘れないうちに何をやったかメモっておく。

## Typeableのdriving

https://github.com/perl6/Pugs.hs/commit/2a0b74224f18947d3ee8392dfe81a87131a0bf73

`Typeable` が `PolyKinds` でいい感じになったり手でインスタンス作るの禁じられたりしたので自動で導出できるように手直し。

## Type role の追加

https://github.com/perl6/Pugs.hs/commit/009d0ed328ea30b931cce8f6dd8d53c6aafcbd27

`GADTs` とか使ってると type role が `nominal` に推論されることがあるのだけど、デフォルトだと `data` の role は `representational` なので特に `*.hs-boot` ファイルを作った時にギャップが生じる。ので、明示。

## functional dependencies のバグ修正の影響

https://github.com/perl6/Pugs.hs/commit/130bde7be682e456a818a7b4fbb0c9c3b39c5bac

ghcのバージョンが上がるとバグ修正されることがあって、いいことなんだけど、それによってバグをうまく突いてビルドできていたコードが通らなくなることがある。

ということで、functional dependenc[iesと`instance`に矛盾があった部分が落ちるようになったので修正。

## Functor-Applicative-Monad Proposal

https://github.com/perl6/Pugs.hs/commit/4dfa98c9aaaa7d3f63729292d51f777b795870ae

これはghc-7.10.x向けの有名なやつ。 `Monad` が `Functor` と `Applicative` 継承するようになったので、 `instance` 定義をサボってたやつは定義する必要ある。パフォーマンス考えないのであれば自明な定義をするだけでO.K.。

## Prelude に Foldable 入った

https://github.com/perl6/Pugs.hs/commit/ab31c77c091a6eaa399f5e647e91990f9180b0da

これも ghc-7.10.x 向け。 `Prelude` のリスト向けの関数とかが `Foldable` で定義されるようになったので型が非決定的になる部分が出てきたのを明示。

## hashtablesへの移行

https://github.com/perl6/Pugs.hs/commit/5c98448313a434abe87788ec986ddefd378472ef

`Data.Hashtable` が deprecated になったので、 [https://hackage.haskell.org/package/hashtables](hashtables) へ移行。実体が `type` になったりしたので `ghc` に言われるままに equality constraints を追加したり。

## stackへの対応

https://github.com/perl6/Pugs.hs/commit/51aec5182c43c0b98a33f62ae121d87d1b2a134c

今時だと [stack](https://github.com/commercialhaskell/stack) に対応しておいた方が喜ばれる。特に複数パッケージにまたがってビルドしなきゃいけない実行ファイルのリポジトリとか。
CakePHP2で開発時もNoticeなどをログファイルに保存したい

# CakePHP2で開発時もNoticeなどをログファイルに保存したい

## 前提

* CakePHP2系はdebugが0でないときはNoticeなどは画面への表示のみでログファイルには出力されない
* 開発時はログファイルをTail系ツールでチェックするようにしたい
* ExceptionNotifierErrorHandlerを設定すればメールが飛んでくるが、そもそも開発時にExceptionNotifierErrorHandlerは使いたくない(メールボックスがあふれる恐れあり)

## 変更内容

### app/Lib/Error/AppErrorHandler.php
```php
<?php

App::uses('ErrorHandler', 'Error');
App::uses('CakeLog', 'Log');

class AppErrorHandler extends ErrorHandler {
    /**
     * デバッグ時でもログファイルに出力する
     */
    public static function handleError($code, $description, $file = null, $line = null, $context = null) {
        $result = parent::handleError($code, $description, $file, $line, $context);
        $debug = Configure::read('debug');
        if($debug) {
            if(error_reporting() !== 0) {
                $errorConfig = Configure::read('Error');
                list($error, $log) = self::mapErrorCode($code);
                if($log !== LOG_ERR) {
                    $message = $error . ' (' . $code . '): ' . $description . ' in [' . $file . ', line ' . $line . ']';
                    if (!empty($errorConfig['trace'])) {
                        $trace = Debugger::trace(array('start' => 1, 'format' => 'log'));
                        $message .= "\nTrace:\n" . $trace . "\n";
                    }
                    CakeLog::write($log, $message);
                }
            }
        }
        return $result;
    }
}
```

### app/Config/bootstrap.php
```
// 以下を追加
App::uses('AppErrorHandler', 'Lib/Error');
Configure::write('Error.handler', 'AppErrorHandler::handleError');
```

## 備考

* 本番環境ではExceptionNotifierErrorHandlerを使いたい場合は環境変数などをチェックして切り替えたりする必要があります