OmniAICreator/Qiita-1.07M huggingface dataset:
iOS8系でUITabBarControllerの遷移アニメーションをするときにFromVCがnilになる問題(未解決)


## 環境
* xcode7.1
* iphone5(iOS8.4.1)

## 問題
* UITabBarControllerDelegate
	* tabBarController(tabBarController: UITabBarController, animationControllerForTransitionFromViewController fromVC: UIViewController, toViewController toVC: UIViewController)

上記のメソッドの
> fromVC

がUIViewController型にも関わらずnilのような値(po すると ＜uninitialized＞ と出る)で渡ってくることがある。
そのまま return selfをすると、

* UIViewControllerAnimatedTransitioning
    * animateTransition(transitionContext: UIViewControllerContextTransitioning)

にて、fromVCとfromVとcontainerがcontextから取得不可能になり、どうしようもなくなる。
というわけでiOS8以下では何かしら対策をし無くてはならない。

## 対処しようとしてダメだったコード
最初はこれを対処法として書いていましたが、後に、Relaseビルド時のみアプリが落ちる問題が治っていないことが発覚したので、ダメコードとします

```swift
// タブの切替をCrossDissolveアニメーションで遷移するオリジナルTabBarControllerの例
class MyUITabBarController: UITabBarController {
    override func viewDidLoad() {
        super.viewDidLoad()
        self.delegate = self
    }
}

extension MyUITabBarController: UITabBarControllerDelegate {
    func tabBarController(tabBarController: UITabBarController, animationControllerForTransitionFromViewController fromVC: UIViewController, toViewController toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? {
        // iOS8系のバグ？で
        // fromVCが<uninitialized>という値になることがある
        // これはUIVieController?型にキャストするとnilになってくれることを確認したので、
        // nilの場合はデフォルトのアニメーションをさせるためにnilを返す
        // 追記：これをやってもなおReleaseビルド時のみ落ちる問題が直らないことが発覚したのでダメです
        return (fromVC as? UIViewController).map{ _ in self }

    }
}

// CrossDissolveアニメーションで遷移するAnimaterの例
extension MyUITabBarController: UIViewControllerAnimatedTransitioning {
    
    func transitionDuration(transitionContext: UIViewControllerContextTransitioning?) -> NSTimeInterval {
        return 0.3
    }
    
    func animateTransition(transitionContext: UIViewControllerContextTransitioning) {
        UIView.transitionFromView(
            transitionContext.viewControllerForKey(UITransitionContextFromViewControllerKey)!.view,
            toView: transitionContext.viewControllerForKey(UITransitionContextToViewControllerKey)!.view,
            duration: self.transitionDuration(transitionContext),
            options: .TransitionCrossDissolve,
            completion: { finished in
                transitionContext.completeTransition(true)
            }
        )
    }

}
```

## 備考
* Optional型じゃないのに、中身がnil(もしくはnilのようなよくわからん何か)だったら、swiftのその辺のnil面倒見てくれる機構無意味になるので、かんべんしてくれAppleさん
* iOS9で直っている(fromVCが常に正しく初期化されているっぽい)模様
* ぐぐっても全く情報がない(似ているけど別事象でその解決法は適応できない記事は何個かありました)
MySQlのサブクエリではINじゃなくてJOINを使うと早いみたい

#IN -> JOINにしたらすごく早くなりました
INだとオプティマイザがうまいことやってくれないみたい。
JOINにしたらはやくなった。
beforeは10分以上たっても返ってこなかったけど、afterは0.04sとかで返りました。

##before:
```sql
mysql> explain UPDATE table1 t1 SET t1.row1='hoge' WHERE t1.id IN (SELECT t2.number FROM table2 t2 WHERE t2.fuga = 'hoge');

| id | select_type        | table | type  | -略-  | rows    | Extra |
|  1 | PRIMARY            | m     | index | -略-  | 7613724 | Using where|
|  2 | DEPENDENT SUBQUERY | o     | ref   | -略-  | 629 | Using index condition; Using where |

```

##after:
```sql
mysql> explain UPDATE table1 as t1 INNER JOIN (SELECT t2.number FROM table2 t2 WHERE t2.fuga = "hoge") as st2 ON t1.id = st2.number
SET t1.row1 ='hoge';

| id | select_type | table      | type   | -略- | rows | Extra       |
|  1 | PRIMARY     | <derived2> | ALL    | -略- |  629 | Using where |
|  1 | PRIMARY     | m          | eq_ref | -略- |    1 | Using where |
|  2 | DERIVED     | o          | ref    | -略- |  629 | Using where |
```
##参考
http://tech.aainc.co.jp/archives/397
Android Virtual Deviceが起動しない場合の対策

# 症状　：　Android Virtual Deviceが起動しない

Android Studioで以下の様なメッセージが表示され、Android Virtual Deviceが起動しない場合があります。

> emulator: ERROR: x86 emulation currently requires hardware acceleration!
> Please ensure Intel HAXM is properly installed and usable.
> CPU acceleration status: HAX kernel module is not installed!

# 原因　：　HAXMがインストールされていない

HAXM(Intel® Hardware Accelerated Execution Manager)とは、Androidのエミュレーターの動作速度を改善させるためのエンジン。

# 対策
## 手順1　：　SDK ManagerからHAXMをインストール
1. Android SDK > SDK ToolsからHAXMを選択する
2. OKを押す
3. 自動的にダウンロード・インストールされる

## 手順2　：　BIOSでIntel Virtualization Technologyを有効に
1. BIOSの設定画面を開く
2. Advanced > Intel Virtualization Technologyを選択しEnabledにする (BIOSによってはAdvanced以外の項目にある可能性があります)
3. BIOSの設定画面を終了し、Windowsを起動する

## 手順3　：　Android Studioのプロジェクトを起動
Android Studioを起動し、Runボタンを押し、エミュレーターを指定して実行。



以上の手順で、エミュレーターが起動するはずです。
Cocos2d-JS で一部の SpriteFrame が巧く表示されない件について


# 前提

* Cocos2d-JS によって web 書き出ししたゲームである
* 実行環境は iOS 7.1 (Safari) とか Android (Chrome) とか
	* iOS 9 とかでは問題なく動作する
* TexturePacker 使って作った SpriteFrame を用いている
* 大半の画像は巧く表示される
* 画像に色を乗せたりするのも巧く動かない

# 原因

* TexturePacker で SpriteSheet を作る際に **Rotation を設定している** 場合に、発生していたようだ
* 内部的にどういう処理が行われているかは知らんけど、自動回転の処理によって回転した画像を描画すると、座標が全力でズレたりする

# 解決

* まぁ、自動ローテーションを切るのが良いよね。うん。
* コマンドラインなら `--disable-rotation` を付ければおk

# 所感

* こんな初歩的？なコトに2.5時間もドはまりしていた自分が情けないですよ。ええ。
* ケース洗い出しすればもっと早く原因見つけられていたろうに…。
Nexus7(2013) wi-fi版 6.0 Factory Imageでの書き込み備忘録

OTAで落ちてくるのを待っていられなかったので、USB接続でのイメージ書き込みを行った際の備忘録。
なおサポート対象外となるので自己責任で。

○下準備

- fastbootが必要になるので、SDKなどをインストール
- 端末に応じたイメージファイルをここから取得（※A）→https://developers.google.com/android/nexus/images

○作業開始

1. 本体の電源をオフ
1. USBに接続
1. ボリュームダウンキーを押しながら電源オン（画面上部にデカデカと「Start」と書かれた画面が出てくる）
1. コマンド：fastboot oem unlock
1. (※A)で取得したzipファイルから「flash-all.sh（またはflash-all.bat）」を実行（そのままだと中身が消えるので、最後の行にある[-w]は消しておくのが良い
2. 勝手に再起動されるので待つ
3. 興味が出たらfastboot oem lockもしておく

使い勝手はこれから適当に調べていくところ。
BibLaTeXでAPS（American Physical Society）の論文のスタイルでBibliographyを生成する方法

# 学問分野で引用のルール（または慣習）が違う！
参考文献は各学問によってのせるスタイルが結構違う。TeX文章で引用する場合、bibファイルを用意すると簡単に参考文献リストを生成してくれるBibLaTeXはとても便利なものだ。ところが、デフォルト設定だと物理の論文などで使われているスタイルと大分違う（人文系？）引用文献スタイルで出力されてしまう。

やっぱり見慣れているのもあり、
> [著者], [ジャーナル名] **[巻数]**, \[ページ数] (発行年)
> 例：
> P. Anderson, Phys. Rev. **102**, 1008 (1956) 

という形の論文のタイトルを掲載しないAPSスタイルで参考文献リストを生成したい。

BibLaTeXはいろいろカスタマイズができるとはいえ、わざわざ設定するのも大変。なんか便利なスタイルファイルがないかと思っていたら、CTANにbiblatex-physというパッケージがあり、その説明には
> The bibla­tex-phys pack­age pro­vides an im­ple­men­ta­tion of the bib­li­og­ra­phy styles of both the AIP and the APS for BibLaTeX.
> [CTAN: Package biblatex-phys](URL "https://www.ctan.org/pkg/biblatex-phys")

とある。まさにAPS styleが手っ取り早く実現できるやつだ！
というわけで、添付のドキュメントを参考にTeXファイルの中で利用してみる。

# biblatex-physの導入
自分のMacTeX環境にはもともと入っていたが、もし導入されていなければ

```shell-session
$ sudo tlmgr install biblatex-phys
```

として導入する。
# プリアンブルに記述
普通BibLaTeXを利用するときにはプリアンブルに

```latex
\usepackage{biblatex}
```

と記載するが、それにオプションを追加して

```latex
\usepackage[style=phys]{biblatex}
```

とするだけ。あっけない。
これだとAIP styleなので、APS styleがよければ

```latex
\usepackage[style=phys,articletitle=false,biblabel=brackets,chaptertitle=false,pageranges=false]{biblatex}
```

あとは普段通り。こんなに簡単なら最初から見つけておけばよかった。。。

# 参考文献
[CTAN: Package biblatex-phys](URL: "https://www.ctan.org/pkg/biblatex-phys")
リファレンスなどがある。
コードポイントからの無難なUTF-8文字化


先日の[mb_strwidthの返す値が怪しかったので調べてみた](http://qiita.com/ProjectICKX/items/984571a608db89f29cfd)で調べた情報を元にmb_strimwidthの移植を進めていたのだけど、想定しがたい箇所で結果の不一致が発生した。
JSとPHPで同じコードポイントを使った場合に同じ結果にするための方法について記載。

## 参考文献
[PHP - コードポイントから UTF-8 の文字を生成する - Qiita](http://qiita.com/masakielastic/items/68f81e1b7d153ee5cc81)

## 結論
JSはString.fromCharCode()メソッドを利用し、PHPは次の関数を利用すれば、同じコードポイントから同じ文字を得られる。

```php
/**
 * 整数値で表現されたコードポイントをUTF-8文字に変換する。
 *
 * @param	int		$code_point	UTF-8文字に変換したいコードポイント
 * @return	string	コードポイントから作成したUTF-8文字
 */
function int2utf8($code_point) {
	//UTF-16コードポイント内判定
	if ($code_point < 0) {
		throw new \Exception(sprintf('%1$s is out of range UTF-16 code point (0x000000 - 0x10FFFF)', $code_point));
	}
	if (0x10FFFF < $code_point) {
		throw new \Exception(sprintf('0x%1$X is out of range UTF-16 code point (0x000000 - 0x10FFFF)', $code_point));
	}

	//サロゲートペア判定
	if (0xD800 <= $code_point && $code_point <= 0xDFFF) {
		throw new \Exception(sprintf('0x%X is in of range surrogate pair code point (0xD800 - 0xDFFF)', $code_point));
	}

	//1番目のバイトのみでchr関数が使えるケース
	if ($code_point < 0x80) {
		return chr($code_point);
	}

	//2番目のバイトを考慮する必要があるケース
	if ($code_point < 0xA0) {
		return chr(0xC0 | $code_point >> 6) . chr(0x80 | $code_point & 0x3F);
	}

	//数値実体参照表記からの変換
	return html_entity_decode('&#'. $code_point .';');
}
```

## 発端

当初は次の実装で比較を行っていたが、0x200あたりからズレが発生するようになった。

```php
<?php
$code_point = dechex(512);    //0x200
$char_code = hexdec($code_point);
?>
実行結果：<?= mb_convert_encoding(pack('H*', $char_code), 'UTF-8', 'UCS-2'); ?>：<script type="text/javascript">document.write(String.fromCharCode(<?= $char_code ?>));</script>
```
実行結果：儠：Ȁ

全然違う文字やんけ！

UTF-8においてはASCIIの範囲内はコードポイントをそのまま使えるのですが、その先にあるLatin-1の範囲の処理に考慮が必要だったというオチ。

## 検証

簡易的に次の処理で目視で検証
：の前後の文字が同じならばOK

```php
<html>
<head>
</head>
<body>

<?php
/**
 * 整数値で表現されたコードポイントをUTF-8文字に変換する。
 *
 * @param	int		$code_point	UTF-8文字に変換したいコードポイント
 * @return	string	コードポイントから作成したUTF-8文字
 */
function int2utf8($code_point) {
	//UTF-16コードポイント内判定
	if ($code_point < 0) {
		throw new \Exception(sprintf('%1$s is out of range UTF-16 code point (0x000000 - 0x10FFFF)', $code_point));
	}
	if (0x10FFFF < $code_point) {
		throw new \Exception(sprintf('0x%1$X is out of range UTF-16 code point (0x000000 - 0x10FFFF)', $code_point));
	}

	//サロゲートペア判定
	if (0xD800 <= $code_point && $code_point <= 0xDFFF) {
		throw new \Exception(sprintf('0x%X is in of range surrogate pair code point (0xD800 - 0xDFFF)', $code_point));
	}

	//1番目のバイトのみでchr関数が使えるケース
	if ($code_point < 0x80) {
		return chr($code_point);
	}

	//2番目のバイトを考慮する必要があるケース
	if ($code_point < 0xA0) {
		return chr(0xC0 | $code_point >> 6) . chr(0x80 | $code_point & 0x3F);
	}

	//数値実体参照表記からの変換
	return html_entity_decode('&#'. $code_point .';');
}
?>

<?php foreach (range(1, 512) as $char_code) { ?>
<?= int2utf8($char_code) ?>：<script type="text/javascript">document.write(String.fromCharCode(<?= $char_code ?>));</script>
<br />
<?= $char_code ?>：document.write(String.fromCharCode(<?= $char_code ?>));
<hr />
<?php } ?>

</body>
</html>
```
Rの最適化関数optimの目的関数(fr)にpar以外の引数を渡す

Rには最適化関数がいくつかありますが、optimを使っている人も多いと思います。

optimの基本的な使い方他の記事を参照いただくとして、
（例えば）http://qiita.com/HirofumiYashima/items/c2e9ff4e3e9283ec1691

実際に使ってみると目的関数（fr）に最適化対象のパラメータ（par）以外の変数を渡す方法が分からず、手間取ったのでメモしておきます。

結論から書くと、optimの引数に渡したい変数を直接書けばよいです。

※実は[optimのマニュアル](URL"https://stat.ethz.ch/R-manual/R-devel/library/stats/html/optim.html")にも書いてありました。
`... Further arguments to be passed to fn and gr.`

マニュアルの例を参考に説明します。以下の最適化問題において、

```
fr <- function(x) {   ## Rosenbrock Banana function
    x1 <- x[1]
    x2 <- x[2]
    100 * (x2 - x1 * x1)^2 + (1 - x1)^2
}
```

目的関数（fr）の変数はxだけですので、

```
> optim(c(-1.2,1), fr)
$par
[1] 1.000260 1.000506

$value
[1] 8.825241e-08
```
で実行できます。

しかし、実際に何かの分析に使うときは目的関数を次のように一般的にして、

```
fr <- function(x, a, b) {
    x1 <- x[1]
    x2 <- x[2]
    b * (x2 - x1 * x1)^2 + (a - x1)^2
}
```

データや要求に応じて適切なパラメータ（a,b）を与えて最適化したい場合もあります。

その場合、まず上記の目的関数fr(x,a,b)を定義して、optimの引数にparとなるx以外のa, bを明示的に渡します。(a, b)=(1, 100)とすると、

```
>optim(c(-1.2,1), fr, a=1, b=100)
$par
[1] 1.000260 1.000506

$value
[1] 8.825241e-08
```

となって、マニュアルの例と同じ結果になります。この例で用いられている[Rosenbrockのbanana function](URL"https://en.wikipedia.org/wiki/Rosenbrock_function")の最適解は(解析的に)x1=a, x2=a^2になりますので、(a, b)=(10, 100)とすると、

```
> optim(c(-1.2,1), fr, a=10, b=100)
$par
[1]  9.999857 99.997107

$value
[1] 1.793687e-07
```

となります。他の最適化手法（"BFGS"等）を選ぶ場合に、（必須ではありませんが）grも与えたい時はfrに合わせて定義式を書き換えます。
同一ホスト上にあるコンテナ間連携

同一ホスト上に2つのコンテナを立ち上げて、お互いを連携させてみます。
WebサーバとDBサーバを連携するようなイメージです。

今回は、今まで作ってきた下記2記事のコンテナ（Ubuntuとnginx）を元に連携を試してみました。

- [自分用のUbuntuのDockerイメージを作成](http://qiita.com/tifa2chan/items/9379a99c32abbf76916c)
- [コンテナに外部からアクセス（ポートフォワード）](http://qiita.com/tifa2chan/items/a58e34019d4f10097a4d)

最後にまたもやproxyにハマりました…

# nginxサーバのコンテナ起動

* 普通に立ち上げ

```
$ docker run --name nginx01 -d -p 8080:80 nginx
```

# Ubuntuサーバのコンテナ起動

* `link`オプションに<連携するコンテナ名>:<エイリアス>を記載

```
$ docker run --name ubuntu01 -it --link nginx01:nginx ubuntu1404
```

# 連携状況の確認

* Ubuntu側サーバにて、envコマンドで見てみると接続先サーバであるNGINX(エイリアス)の環境変数確認ができる

```
# env | grep NGINX
NGINX_PORT_443_TCP_ADDR=172.17.0.41
NGINX_ENV_NGINX_VERSION=1.9.6-1~jessie
NGINX_NAME=/ubuntu01/nginx
NGINX_PORT_80_TCP_PROTO=tcp
NGINX_PORT_80_TCP=tcp://172.17.0.41:80
NGINX_PORT_443_TCP_PORT=443
NGINX_PORT_80_TCP_PORT=80
NGINX_PORT_443_TCP=tcp://172.17.0.41:443
NGINX_PORT_443_TCP_PROTO=tcp
NGINX_PORT_80_TCP_ADDR=172.17.0.41
NGINX_PORT=tcp://172.17.0.41:80
```

* hostsでも確認ができる

```
# less /etc/hosts 
172.17.0.43     d6b904340038
127.0.0.1       localhost
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.41     nginx 03a5f77c3fdc nginx01
172.17.0.43     ubuntu01
172.17.0.43     ubuntu01.bridge
172.17.0.41     nginx01
172.17.0.41     nginx01.bridge
```

* 各サーバのIP
  - nginx ：172.17.0.41
  - Ubuntu: 172.17.0.43

* pingを飛ばしてみる

```
# ping 172.17.0.41
PING 172.17.0.41 (172.17.0.41) 56(84) bytes of data.
64 bytes from 172.17.0.41: icmp_seq=1 ttl=64 time=0.116 ms
64 bytes from 172.17.0.41: icmp_seq=2 ttl=64 time=0.115 ms
...
```

# Ubuntuサーバ側からWelcomeページを取得してみる

* コンテナ側のIPで取得できることを確認

```
# cd /tmp/
# wget http://172.17.0.41:80
--2015-11-06 02:43:23--  http://172.17.0.41/
Connecting to 172.17.0.41:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 612 [text/html]
Saving to: 'index.html.1'

100%[================================================================================>] 612         --.-K/s   in 0s      

2015-11-06 02:43:23 (47.4 MB/s) - 'index.html.1' saved [612/612]
```

# 社内proxyに引っかかる場合…

* Ubuntuサーバ側にてnginxサーバにアクセスする際に、下記のようなエラーが出た場合、no_proxy設定を行う

```
wget http://172.17.0.41:80
--2015-11-06 02:12:43--  http://172.17.0.41/
Proxy request sent, awaiting response...
```

* Ubuntuならwgetrcファイルに接続先のnginxサーバのIDを記した1行を追加

```text:/etc/wgetrc
no_proxy=172.17.0.41
```
El CapitanでVagrantを立ち上げた時にエラーが出た場合の対処

#El CapitanにしたらVagrantが動かなくなった

MacOS10.11のEl Capitanにアップデートした時に以下のエラーが出て動かなくなったので、忘れないようにメモ。


	The Berkshelf version at "/usr/local/bin/berks" is invalid.
	Vagrant Berkshelf requires ~> 3.2, but the current version is 4.0.1.
	
	Please download and install the latest version of the ChefDK from:
	
	    https://downloads.getchef.com/chef-dk
	
	and follow the installation instructions. Do not forget to add the ChefDK to
	your PATH.


環境は以下のとおり  
・MacOS 10.11 El Capitan
・Vagrant 1.7.4
・VirtualBox 5.0.8


解決できずに色々とはまってしまったが、以下で解決できた。  

　・ChefDKをインストール
　・vagrant実行フォルダに移動して、以下を入力
  
```
vagrant plugin install vagrant-berkshelf
```
  
 ・vagrant up
MacでMAMP等のPHPにパスを通す際の~/.bash_profile作成

MacのターミナルでPHP操作をする環境を構築する際に、MAMP等でインストールされたPHPにパスを通す作業が必要になる。パスの通し方についてはウェブで方法が解説されているが、ここでよく言及される「~/.bash_profile」という環境設定ファイルの編集部分でつまづいたのでメモ。

よくあるのは、「~/.bash_profile」に
「export PATH=$PATH:/Applications/MAMP/bin/php/php5.4.10/bin」を追記とか書かれているが、
環境によっては、というかおそらくもともとMac上に「~/.bash_profile」というファイルは存在しない。
なので自分で作成する必要がある。

自分のMacに「~/.bash_profile」が存在するかの確認方法は以下。

1. 
$cd とだけ打ち込んでルートディレクトリに移動

2.
$ls　-laと打ち込んで「~/.bash_profile」というファイルがあるか確認

なければ作成。

1.
$touch .bash_profile と入力

これで作成完了！

2.
$ls　-laと打ち込んで「~/.bash_profile」というファイルがあるか確認すると
できている！

続いて「.bash_profile」にパスを通したいPHPがある場所のパスを記述する。

1.　ファイル名が.で始まるファイルは隠しファイルなので、隠しファイルを表示するコマンドを入力
$ defaults write com.apple.finder AppleShowAllFiles TRUE

2.
設定を反映するためFinderのプロセスを終了
$ killall Finder

3.「.bash_profile」が置かれているディレクトリを表示
 $open /usr

4.
上記ディレクトリが表示されるので、「.bash_profile」を開いて
「export PATH=$PATH:/Applications/MAMP/bin/php/php5.4.10/bin」等、パスを通したいディレクトリを記述

5.
設定を反映させるため
$ source ~/.bash_profile
を入力して終了。ターミナル再起動でもOK
couldn't find file 'jquery.ui.dialog'エラーが出る

#### rails updateした後、以下のようなエラーが出るように

```
2015/11/06 11:32:15 [ERROR] :: エラー文言。, couldn't find file 'jquery.ui.all'
  (in /home/hoge/workspace/my_apl/app/assets/stylesheets/application.css.erb:10)
2015/11/06 11:32:15 [INFO] ::
        /home/hoge/.rbenv/versions/2.2.3/gemsets/4.0/gems/sprockets-2.12.4/lib/sprockets/context.rb:106:in `resolve'
        /home/hoge/.rbenv/versions/2.2.3/gemsets/4.0/gems/sprockets-2.12.4/lib/sprockets/context.rb:146:in `require_asset'
        /home/hoge/.rbenv/versions/2.2.3/gemsets/4.0/gems/sprockets-2.12.4/lib/sprockets/directive_processor.rb:217:in `process_require_directive'
        /home/hoge/.rbenv/versions/2.2.3/gemsets/4.0/gems/sprockets-2.12.4/lib/sprockets/directive_processor.rb:167:in `block in process_directives'
```

#### jquery-ui-railsversion 5.0から指定方法変更されたらしい。[参考](https://github.com/joliss/jquery-ui-rails#require-everything)

- 変更前

```application.js
//= require jquery.ui.dialog
```

```application.css.erb
*= require jquery.ui.dialog
```

- 変更後

```application.js
//= require jquery-ui
```

```application.css.erb
*= require jquery-ui
```
PlatformIOでmbedをオフラインビルドしSTM32 Nucleoボードでmrubyを使う

STM32 Nucleo F446REを買ったのでオフラインビルドの環境確認を兼ねてmrubyを動かしてみました。

F446REのスペック

| Freq.     | Flash    | RAM      |
|:---------:|:--------:|:--------:|
| 180 [MHz] | 512 [Kb] | 128 [Kb] |
スイッチサイエンスで1900円。
(自分はコンビニ受け取りが便利なのでAmazonで2390円で購入)

とりあえず環境準備
================
こちらを参考にさせて頂きました
[コマンドラインでArduino開発 : vim + platformio](http://qiita.com/caad1229/items/7b5fb47f034ae6e0baf2)

1. Python 2.7.Xをインストール
僕はWindows用インストーラをUniversal Extractorで展開して`.nyagos`でPATHを通すスタイル

2. setuptoolsをインストール
[setuptoolsのページ](https://pypi.python.org/pypi/setuptools)からDLしてきて`python ez_setup.py`

3. pipをインストール
`easy_install pip`

4. PlatformIOをインストール
`pip install platformio`

5. SConsをインストール
自分の環境ではpipでのインストールが上手く行かなかったのでeasy_installを使いました。
`easy_install scons`

mbed(STM32 Nucleo)プロジェクトの作成
==================================
`platform boards`で対応しているボードの一覧が確認できます。
適当にディレクトリ切って
`platform init --board nucleo_f446re`とコマンドを打つと`platformio.ini`と`lib/` `src/`が作られるので`src/`にソースファイルを追加していきます。
途中で聞かれる選択肢は、とりあえず`N` `y`で。

プロジェクト作成の初回にはコンパイラツールチェインのDLが行われるため少し時間がかかります。
コンパイラ等は
`%USERPROFILE%/.platformio/packages/toolchain-gccarmnoneeabi`
にDLされると思います。次のmrubyのビルドで使用するので
`%USERPROFILE%/.platformio/packages/toolchain-gccarmnoneeabi/bin`
にPATHを通しておきましょう。

mrubyのビルド
============
[こちらのページ](http://tana-ash.hatenablog.com/entry/2014/06/22/185144)を参考にさせて頂き、問題なくビルド完了。

上記ページのサンプル中の

```diff
- #include "test.c"
```

このインクルードは不要、のはず。

ソースコード、ライブラリの準備
==========================
#### ソースコード
[上述のページ](http://tana-ash.hatenablog.com/entry/2014/06/22/185144)のサンプルをコピペして`src/`に配置。ファイル名は何でもOK。
#### mruby関係
プロジェクトディレクトリに`scripts/`という名前でディレクトリを切り、mrubyのリンクライブラリやインクルードファイルを設置。ディレクトリ名は`scripts/`でないとダメ。
`scripts/`以下の構成は自由ですが、今回はこのようにしました。

```
├─lib
│      readme.txt
│      
├─scripts
│  └─mruby
│      ├─include
│      │  │  mrbconf.h
│      │  │  mruby.h
│      │  │  
│      │  └─mruby
│      │          array.h
~~~~~~~~~~~~ (省略) ~~~~~~~~~~~~
│      │          version.h
│      │          
│      └─lib
│              libmruby.a
│              
└─src
        main.cpp
        test.rb
```

#### platformio.iniの修正
mrubyをリンクするためのコンパイルオプションの設定と
`upload_protocol`を設定しアップロードまで一気にできるようにしておきます。

```ini:platformio.ini
[env:nucleo_f446re]
platform = ststm32
framework = mbed
board = nucleo_f446re
build_flags = -Imruby/include -Lmruby/lib -lmruby
# targets = upload
upload_protocol = stlink
```
上記のように設定しても、includeファイルとlibのサーチパスは
勝手に`scripts/mruby/include/`と`scripts/mruby/lib`となるようです。
そのためライブラリの設置は`scripts/`としています。

ビルドしてみる
============
まず`src/test.rb`のコンパイル

```bash
$ mrbc -B bytecode src/test.rb
```
続いて全体のビルド

```bash
$ platformio run
```

アップロードまで行うなら

```bash
$ platformio run --target upload
```

未解決
=====
rubyスクリプトのコンパイルまでplatformioで一気にやっちゃいたい。
`extra_script`でやろうとしたが、ファイル構成のチェックが先に行われるのか
`platformio run`1回目リンクエラー
`platformio run`2回目成功(1回目でコンパイルが済んでいて最初からファイルがあるから?)
となってしまった。何とかならないものか…
rails sコマンド実行時に「Could not find a JavaScript runtime.」とエラーが出る場合の対処法





```bash
$ rails s
/usr/local/rvm/gems/ruby-2.1.5/gems/execjs-2.6.0/lib/execjs/runtimes.rb:48:in `autodetect': Could not find a JavaScript runtime. See https://github.com/rails/execjs for a list of available runtimes. (ExecJS::RuntimeUnavailable)
        from /usr/local/rvm/gems/ruby-2.1.5/gems/execjs-2.6.0/lib/execjs.rb:5:in `<module:ExecJS>'
        from /usr/local/rvm/gems/ruby-2.1.5/gems/execjs-2.6.0/lib/execjs.rb:4:in `<top (required)>'
   (略）
        from bin/rails:4:in `require'
        from bin/rails:4:in `<main>'
```

Gemfileに``gem 'therubyracer'``という記述を追加して、``bundle update``以降の手順を同様に実行する。


JavaScriptランタイムがインストールされていないというエラーが表示された場合は、GitHubのexecjsページにあるインストール可能なランタイムを確認してください。Node.jsが特にお勧めです。

GitHub execjs
https://github.com/sstephenson/execjs

参考
http://pyoonn.hatenablog.com/entry/2014/10/17/165416

***

※追記

node.jsをインストールすれば、``therubyracer``をインストールしなくても大丈夫でした
(EC2 - Amazon Linuxの場合）

```bash
$ yum install nodejs --enablerepo=epel
```

で出来ると思います。
DesignSpark PCBをMacで


電子回路的なことがしたいと思って使えるようにしてみました。
DesignSpark PCBはRSが提供しているフリーの回路、基板エディタ。
無料ですが、アクティベーションには登録が必要です。

過去にMikuInstallerをさわったことがある程度です。
なんか足りないものがあっても入れれば動くでしょ、という推察でやってます。
個々の事柄の意味は正直あまりわかってません。
おかしなところがあればコメントよろしくおねがいします。
#Win専用なのでWineが必要
[macでwine使うならEasyWine.appがオススメ](http://qiita.com/tukiyo3/items/df9add8063a9c3a50bdc)を参考にEasyWine.appをインストール。

#DesignSpark PCBをダウンロードしてインストール->失敗
[RSのサイト](http://www.rs-online.com/designspark/electronics/eng/page/designspark-pcb-home-page)から.exeファイルをダウンロードしてEasyWineでインストールしようとしたが失敗。
ファイルは配置されているようだがエクスプローラから起動しようとするも反応なし。

#Windowsにインストールしたフォルダを持ってくる->失敗

過去記事にそうしたら動いた!的なのがあったので。
VirtualBox上のWindows10にインストールしたDesignSpark PCBのフォルダをまるごとEasyWineにコピー。
だめ。起動しない。

#vcrun2010をインストール ->起動!
[Running DesignSpark PCB 7.0 under Ubuntu 15.04](https://forum.winehq.org/viewtopic.php?f=8&t=24737)を参考に。
vcrun2010というものが必要なそうな。

homebrewでwinetricksをインストール。
EasyWineの環境を指定して vcrun2010をインストール。

```
WINEPREFIX=~/Library/Caches/Wine/prefixes/default winetricks vcrun2010
```

これでエクスプローラからDesignSpark PCBが立ち上がるようになりました。
すでにRS会員なのですが、更にいろいろ訊かれて、登録するとこんな感じに。
![スクリーンショット 2015-11-06 12.15.08.png](https://qiita-image-store.s3.amazonaws.com/0/61597/2884d834-4891-ea5b-29fc-4c6c1fc78e25.png "スクリーンショット 2015-11-06 12.15.08.png")
React.jsの開発環境をつくる

## React配布パターン
開発版は非圧縮でデバックが容易。
製品版はデバッグ情報がないため高速に動作する。
アドオンにはMixinやヘルパー関数、テストやパフォーマンスチューニングツールなど開発を補助するモジュールが含まれている。

- 開発版・アドオンなし
- 開発版・アドオンあり
- 製品版・アドオンなし
- 製品版・アドオンあり

タウンロードは[サイト](https://facebook.github.io/react/downloads.html)やnpmからダウンロードが可能。

## 環境構築してみた
勉強会でgulpはしたことがあったけど、いつのまにか動かなくなっていたので、イチからはじめてみようとやってみたけど、Chromeでは "Cross origin requests are only supported for HTTP"とかなんやかんやローカルにファイルがないと動作しないので、すぐあきらめた。

Qiitaにこれだ！というエントリーがあったので、すぐ実践。

[React.js + Babel + Browserify + gulp の環境を作ってみた](http://qiita.com/hkusu/items/e068bba0ae036b447754)
https://github.com/hkusu/react-babel-browserify-gulp-sample



**すぐできた！！ありがとうございます！！**
css3で点滅させる


チカチカ点滅するものが見当たらなかったので下記リンクを参考に作ってみた。
[CSS3: テキストをイルミネーションのように点滅させるアニメーション](http://www.fumiononaka.com/Business/html5/FN1402006.html)


```css
.blink_class{
	-webkit-animation:blink 1.0s step-end infinite alternate;
	-moz-animation:blink 1.0s step-end infinite alternate;
	animation:blink 1.0s step-end infinite alternate;
}

/* 点滅 */
@-webkit-keyframes blink{
	21%,40%,61%,80%,100% {opacity:0;}
	0%,20%,41%,60%,81%,99% {opacity:1;}
}
@-moz-keyframes blink{
	21%,40%,61%,80%,100% {opacity:0;}
	0%,20%,41%,60%,81%,99% {opacity:1;}
}
@keyframes blink{
	21%,40%,61%,80%,100% {opacity:0;}
	0%,20%,41%,60%,81%,99% {opacity:1;}
}
```

もっとゆっくり

```
@-webkit-keyframes blink{
	34%,66%,100% {opacity:0;}
	0%,33%,67%,99% {opacity:1;}
}
@-moz-keyframes blink{
	34%,66%,100% {opacity:0;}
	0%,33%,67%,99% {opacity:1;}
}
@keyframes blink{
	34%,66%,100% {opacity:0;}
	0%,33%,67%,99% {opacity:1;}
}
```
可変長構造体をmalloc()使わないで確保

ふつう定数引数でmalloc()呼ぶのは、

```c
// つまり、長さ256の配列を確保するのに
int int_array[256];
// でなく
int* int_array = (int*)malloc(256);
// なんてやるのは
```

その配列をスコープ外へreturnする場合くらいです。
ところが、スコープ内で使うだけの配列なのに定数でmalloc()を呼び出さないといけなくて悔しい思いをすることがあります。それを強いてくるのが、**可変長構造体**。

```c
struct sizable {
	size_t length;
	int contents[1];
}
```

なんていう構造を持っていて、`contents`配列の長さは1と宣言されているものの実際には`length`分だけ格納できるようにメモリ確保しておいてねという仕様になっている構造体。Win32 APIでこれがよく出てくるんですわ…。

```c
sizable* s = (sizable*)malloc(sizeof(sizable) + (256-1) * sizeof(int));
s->length = 256;

// s を使ってなんかAPIを呼び出している

free(s);
```

などという残念なコードを強いられます。ローカルスコープ内で使うためだけに定数引数のmalloc、そしてfree。これが悔しくなければCプログラマじゃない。

可変長構造体を構造体でくるめ
--
この場合、`sizable`変数のうしろに`int` 255個分のメモリが確保されていればいいのです。ならこんな構造体を用意すれば…？

```c
struct sizable_256 {
	sizable base;
	int dummy[256 - 1];
};
```

これならメモリが確保されています。そしたらこう書けばいいと。

```c
struct sizable_256 {
	sizable base;
	int dummy[256 - 1];
};

sizable_256 s{ sizable { 256 } }; // s.base.length を256に初期化している

// &s.base を使ってなんかAPIを呼び出している

// freeしなくていいよ！
```

読む人を混乱させてもいいのなら

```c
struct {
	sizable base;
	int dummy[256 - 1];
} s{ sizable { 256 } }; // s.base.length を256に初期化している
```

ローカル宣言に構造体タグ名など不要ってことでこれでも十分。
中間テーブルを用いた多対多（$_many_many）関連データの編集方法

fuelphpで作成したブログサイトのブログ記事にタグ情報をつける処理を作成するときに、編集処理にて苦戦したので、まとめておきます。


タグの仕様
・ブログ記事に複数のタグが設定できること。
・タグをクリックすると同じタグを持つブログ記事を集約できること。

使用モデル
ブログ記事のモデル（Model_Atricle)
タグモデル（Model_Tag)
中間テーブルモデル（Model_Articletags）


**Model_Atricleのリレーション設定**

中間テーブルモデル（Model_Articletags）を１対多の関係
タグモデル（Model_Tag)を多対多の関係で設定する。

```php:artcile.php
protected static $_has_many = array(
         
         'th_tag' => array(
                'key_from' => 'id',
        	'model_to' => 'Model_articletags',
        	'key_to' => 'article_id',
        	'cascade_save' => TRUE,
        	'cascade_delete' => FALSE,
         ),
);

protected static $_many_many =  array(
          
        	'tags' => array(
        		'key_from' => 'id',
        		'key_through_from' => 'article_id',
        		'table_through' => 'blogarticle_tags',
        		'key_through_to' => 'tag_id',
        		'key_to' => 'id',
        		'model_to' => 'Model_Tags',
        		'cascade_save' => TRUE,
        		'cascade_delete' => false,
        	)
        	
);
```

**Model_Articletagsのリレーション設定**

ブログ記事のモデル（Model_Atricle)を１対1の関係
タグモデル（Model_Tag)を1対1の関係で設定する。

```php:artcile.php
protected static $_belongs_to= array(
	'article' => array(
		'key_from' => 'article_id',
		'model_to' => '\Blog\Model_Blogaritcle',
		'key_to' => 'id',
		'cascade_save' => FALSE,
		'cascade_delete' => FALSE,
	),
				
	'tag' => array(
			'key_from' => 'tag_id',
			'model_to' => '\Blog\Model_Blogtags',
			'key_to' => 'id',
			'cascade_save' => FALSE,
			'cascade_delete' => FALSE,
	),
);
```
**編集処理**
タグを編集する際は、すでに設定されているタグ外されている場合があるので、
一旦設定されているタグを削除する。
但しタグモデルを削除すると、ほかの記事に設定されているタグも削除されるので、中間テーブルモデルを削除する。

```php:blogedit.php
$blog_article = Model_Aritcle::find($article_id); 

//中間タグテーブル削除.
unset($blog_article->th_tag);


//ここで一旦保存
$blog_article->save();

//送信されたタグ情報をセットする.
if(Input::post('tags')){
	foreach (Input::post('tags') as $tag_id){
		$blog_article->tags[] = Model_Tags::find($tag_id);
	}
}else{}

$blog_article->save();　//完了.

```

途中でunsetで$blog_articleのth_tag、中間テーブルモデルを解除しているのは、そのままdelete処理を行ってもsave()時に戻ってしまう為です。

$blog_articleのインスタンスには、関連データが残っているからかな。？？
MAMP PRO とPhpStormでXdebugを使ってステップ実行


# 1.MAMP PROで Xdebugを有効にする

![スクリーンショット 2015-11-03 6.17.38.png](https://qiita-image-store.s3.amazonaws.com/0/9845/172eb970-e64c-aab7-68bb-7eba8680dca1.png "スクリーンショット 2015-11-03 6.17.38.png")

# 2.PhpStormでServer設定
 ![スクリーンショット 2015-11-03 6.19.12.png](https://qiita-image-store.s3.amazonaws.com/0/9845/0e0d02a2-d54a-6ed6-77ff-1afa32317948.png "スクリーンショット 2015-11-03 6.19.12.png")

# 3.PhpSrom で Run -> Start Listening for PHP Debug Connections
![スクリーンショット 2015-11-03 6.20.25.png](https://qiita-image-store.s3.amazonaws.com/0/9845/d63729e1-bfa3-ad89-e871-3e01e2fd1821.png "スクリーンショット 2015-11-03 6.20.25.png")

PhpStorm側でブレイクポイント指定しとくと、ブラウザで実行したときにそこでストップしてくれます。
タッチデバイス判定

#タッチデバイスを判定するには？
```lang:javascript
function isTouchDevice() {
  var result = false;
  if (window.ontouchstart === null) {
    result = true;
  }  
  return result;
}

if (isTouchDevice()) {
  console.log('touch device');
} else {
  console.log('not touch device');
}
```
IntelliJ IDEA 14.5 + Spring Framework + Tomcat7 環境構築時メモ


色々ハマることが多かったのでメモ

- Windows7 (64bit)
- IntelliJ IDEA 14.5
- Spring Framework
- Tomcat7
- maven
- Eclipse-動的WEBプロジェクトの取込を想定

# IntelliJ IDEAの設定

### 起動設定の変更

`{インストールディレクトリ}`/bin/idea64.exe.vmoptions を修正

```
-Xmx2048m
-Dconsole.encoding=UTF-8
-Dfile.encoding=utf-8
```

- Xmx : 入れないと重かった
- xxxencoding : Tomcat実行時のコンソールログなどの文字化け解消


### プロジェクト取込

- importから既存のディレクトリ選択
- 基本NEXT連打で大丈夫だった

**取込後**

- プロジェクトを選択し File > Project Structure
    - Project 内の Project SDK から 利用JDKを選択

- プロジェクトを右クリックし Add Framework Support
    - mavenを追加
    - 最初はSpring Frameworkも追加していたが、`@Autowired`などでエラーを吐くようになったのでひとまず外している。

### .gitignore

以下を追加

```
{プロジェクト名}.eml
{プロジェクト名}.iml
.idea/
/target
```

### プロパティファイル(*.properties)編集設定

Settings : Editor > File Encodings
最下部にある Transparent native-to-ascii conversion にチェック

※
デフォルトだと、native2asciiの結果英字が全て大文字になる。
こちらを参考に対応する。
http://qiita.com/shiena/items/5143a81f26907475713f
(IntelliJ IDEA 12.1.0となっていましたが、14.5でもokでした)

### エディタ設定

Shift2回から Settings または File > Settings

Settings : Editor > General > Appearance
以下にチェック

- Show line numbers
- Show whitespaces

### Ctrl+spaceの補完で大文字小文字を無視する

デフォルトではJavaのアノテーションなどが正常に補完されなかったりするので、大文字小文字を無視して補完できるように設定する。

Settings : Editor > General > Code Completion

- Case sensitive completion を None に変更


### Keymapの変更

`Ctrl+w`でタブを閉じて欲しいので直す

Settings : Keymap
Main Menu > Window > Editor Tabs > Close 
(検索窓に `close` と入力すればでてくる）

選択して Add Keybord Shortcuts
`Ctrl + w`を追加

（コンフリクトした場合は、そちらの設定を解除）


### Plugins

Lambok Pluginをインストール

以下を参考にさせていただきました。
http://siosio.hatenablog.com/entry/2013/12/23/000054

### Tomcat

Settings : Build, Execution, Deployment > Application Servers

`+` をからサーバを追加
Nameはそれなりに解りやすい名前にする

### 起動設定

- Run > Edit Configrations...
    - `+` から Tomcat Server : Local を追加
    - Serverタブ - NameやHTTP Portを設定
    - Deploymentタブ - `+`から war を選択し、Application Contextを入力

## 未解決

### ファイル検索で文字化け

Shift×2 の検索時はwindowsのUIフォント(メイリオ?)になるので化けないが、Shift+Ctrl+N とかで開くファイル検索などで日本語が化ける。

Editorのフォントが適用されることが原因のようで、日本語がちゃんと使えるフォントにすると解決する。

が、日本語が使えるフォントだと見た目がアレで・・・

とりあえず今は「日本語のファイルを使うのが悪い」ということで諦めてSource Code Pro のままにしている。
Vagrantで特定のコマンドを禁止したい

VagrantでEC2のインスタンスを制御してたりするときに，カジュアルに`halt`とか`destroy`とかやられても困る(場合がある)ので．

# 準備
```shell-session
uraura@localhost $ vagrant plugin install vagrant-triggers
Installing the 'vagrant-triggers' plugin. This can take a few minutes...
Installed the plugin 'vagrant-triggers (0.5.2)'!

uraura@localhost $ vagrant plugin list
vagrant-triggers (0.5.2)
```

# 設定
```rb:Vagrantfile
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|

  config.trigger.before [:halt, :destroy] do
    error "This operation is not allowed!!"
  end

  config.vm.define "somewhere" do |node|
    ...
  end
end
```

# 実行
```shell-session
uraura@localhost $ vagrant halt
==> develop: Running triggers before halt...
==> develop: This operation is not allowed!!
Trigger failed with an error.

uraura@localhost $ vagrant destroy
==> develop: Running triggers before destroy...
==> develop: This operation is not allowed!!
Trigger failed with an error.
```

どうしても強制的に実行したいときは環境変数`VAGRANT_NO_TRIGGERS`を設定して実行すれば良い．

```shell-session
uraura@localhost $ VAGRANT_NO_TRIGGERS=1 vagrant halt
==> develop: Attempting graceful shutdown of VM...
```

# まとめ
Vagrantは基本ディレクトリ単位でVMを管理することになるので，ディレクトリ間違えてないか毎回不安になってました．
この設定を入れておけば最悪場所間違えていても止めてくれるので安心度は上がりますね．

怖いのでVirtualBox等で試してからにしよう．
El Capitanにしたらsassが動かない


sassを/usr/local/binにインストールする

http://blog.h-wd.info/2015/10/10/installing-sass-on-os-x-10-11-el-capitan/


##atomのterm2で動かない

こっちの方がいいのかもしれない。

http://qiita.com/megmogmog1965/items/accbbecfbe69827f8987


---

pathを通してやる


```bash:.bash_profileに/usr/local/binのPATHを追加
export PATH=/usr/local/bin:$PATH
```

https://github.com/f/atom-term2#faq
デジタルアート

# デジタルアートとは

デジタルアートには、完全にコンピュータで生成するもの（フラクタルを使ったものなど）から、写真を取り込むなどして元の素材を用意したもの、マウスやペンタブレットを使ってベクトル画像ソフトウェアで描いたものなどが含まれる。
また、音楽ももちろんアートの一種類なので、電子機器を用いた電子音楽もデジタルアートの一つ。あっ、でもここは画像処理班なので音楽はちょっと関係ないですかね～

# 作品例
1　
![image.png](https://qiita-image-store.s3.amazonaws.com/0/99420/9f6c5423-3595-6436-dc97-1cb95061e6cc.png)


立っていると、床の自分の周りに花が咲き、動くと散る。センサーで感知した鑑賞者の動きに応じて描かれていて、人と作品が一体となる感覚を味わうことができる。

2
![image.png](https://qiita-image-store.s3.amazonaws.com/0/99420/c46dd053-2a40-5546-b068-6420e03fcc7b.png)



これは電子音楽も絡んでくる例になってしまうが、叩くと、色が変わったり音が鳴ったりする、光のボールによるオーケストラ。一つを叩くと、周囲のボールも全部色が変わり、空間全体の色が変わる。大小さまざまなボールに触れることで、共同で空間の色を変化させながら、音楽を自由に奏でる。

3
![image.png](https://qiita-image-store.s3.amazonaws.com/0/99420/08d09f5b-0dcd-024f-1f5d-8f6e12be743c.png)



みなさんがよく知っているプロジェクションマッピングもデジタルアートの典型的な一例である。
これは松崎くんのにも上がっているので、あわせて参照してください。




# プログラミング言語
・Processing
　　　オープンソースで無料。未経験者にも理解しやすいプログラミング環境。
　　　使用例としての作品はこちらを参考に：
　　　https://www.youtube.com/watch?v=ZwGpF9hOdSQ#action=share
　　　https://www.youtube.com/watch?v=tVWAFoyIFEY#action=share

・vvvv
　　　様々な機能を持った「部品」を線で繋ぐことで、表現のアイデアを素早く形にできる「ビジュアルプログラミング」と呼ばれるスタイルの開発ができるWindowsアプリケーション。

・openFrameworks
　　　2次元/3次元の図形の描画、アニメーション、サウンドの録音・再生、動画のキャプチャ・再生、マウスやキーボードによるインタラクションなど、いろんなことができる。C++をベースにしている。

ほかにも、FORM+CODE (デザイン／アート／建築用) 、ARKAOS GrandVJ (プロジェクション・マッピング用) などがある。

# 五月祭への応用

現実的な技術、コストでどこまでできるかはまだ確かではないので、具体的な案は現時点では出せないが、上記の例1,2のように、参加者の動きに応じて、環境がはたらきかけられて変化するインタラクティブなことができたら、楽しんでもらえるかな～と思った。
まぁでも、上のprocessingのところに掲載しているようなハイクオリティな動画なら、見るだけでも感動してもらえそうな気はする...
ScalaのREPL上でクラス・トレイトの継承関係を確認する方法


以前、[日本版stackoverflowで回答した件](http://ja.stackoverflow.com/questions/1758/scala%E3%81%A7-%E7%B6%99%E6%89%BF%E9%96%A2%E4%BF%82%E3%81%AE%E7%A2%BA%E8%AA%8D%E6%96%B9%E6%B3%95/1785#1785)のメモです。

# Q.
クラスA1とそれを継承したクラスA2があったとき、

```bash
scala> class A1
defined class A1

scala> class A2 extends A1
defined class A2
```

継承関係は、以下のようにして確認が可能。

```bash
scala> val a2 = new A2
a2: A2 = A2@4c98385c

scala> a2.isInstanceOf[A1]
res1: Boolean = true
```

トレイトの場合、インスタンスが作れないのでどうするか？

```bash
scala> trait B1 { val i:Int }
defined trait B1

scala> trait B2 extends B1
defined trait B2
```

抽象メンバーを実装せず簡単に継承関係を確認する方法はないか？

# A.
Phantom Typeを使う

```bash
scala> def hoge[T<:B1] = println("hello")
hoge: [T <: B1]=> Unit
scala> hoge[B2]
hello

scala> trait B0
defined trait B0

scala> hoge[B0]
<console>:11: error: type arguments [B0] do not conform to method hoge's type parameter bounds [T <: B1]
              hoge[B0]
                  ^
```
                  
これなら特別importも必要なく、かつ、抽象メンバーを実装せずに継承の有無が確認できます。
結構いい方法だと思ったんだけどなー
Cordovaをインストールして新規アプリをcreateするまでの手順

[Cordova](https://cordova.apache.org)というものがある。
Html5+JSでスマホアプリを実装できるというよくあるやつ。インストールしてチュートリアルをしようと思ったら、新規アプリの作成でつまずいたのでメモ。

公式サイトにあるように、cordovaはnpmを使ってインストールする。

```bash
$ npm install -g cordova
```

次に、以下のコマンドを実行して新規アプリを作成する。

```bash
$ cordova create MyApp
Creating a new cordova project.
Could not find directory: /usr/local/var/nodebrew/node/v5.0.0/lib/node_modules/cordova/node_modules/cordova-lib/node_modules/cordova-app-hello-world
```

...は？？
どうやら「新規アプリケーションに必要なnodeモジュールが無いから失敗したよ（てへぺろ」と言われている。

ググッてみたら同じような症状の人がいて、解決方法も載せてくれていた。
[cordova createでcordova-app-hello-worldが無いって怒られた際の対処](http://shoutanaka.hateblo.jp/entry/2015/10/10/191429)

というわけで実践。

```bash
$ cd /usr/local/var/nodebrew/node/v5.0.0/lib/node_modules/cordova/node_modules/cordova-lib
$ ls # package.jsonがあることを確認
README.md       RELEASENOTES.md cordova-lib.js  package.json    src             templates
$ npm install
npm WARN engine xmlbuilder@2.2.1: wanted: {"node":"0.8.x || 0.10.x"} (current: {"node":"5.0.0","npm":"3.3.6"})
npm WARN prefer global coffee-script@1.10.0 should be installed with -g
npm WARN prefer global coffee-script@1.10.0 should be installed with -g
cordova-lib@5.3.3 /usr/local/var/nodebrew/node/v5.0.0/lib/node_modules/cordova/node_modules/cordova-lib
├─┬ aliasify@1.8.0
│ └─┬ browserify-transform-tools@1.3.3
│   ├─┬ falafel@1.0.1
│   │ └── acorn@0.11.0
... 
# warningが出たがerrorはなく、正常終了した

$ cd ~/workspace
$ cordova create MyApp
Creating a new cordova project.
```

うん、できた。
必要なモジュールならはじめから入れといてくれよ頼むよ...
SmartyテンプレートにJSの{}記号が含まれる際の対処法


JS RenderなどのJavaScriptテンプレートエンジンをSmartyテンプレートで使用したい際にハマったのでメモ。

Smartyのデフォルトのデリミタは{ }。
そのため、JSで{}を使用した際はSmartyと解釈されてエラーになってしまう。

囲んだ部分はそのまま出力される`{literal}{/literal}`を使用して回避する。

````
{literal}
{{:key}}
{/literal}
````
Reactで Uncaught TypeError: Cannot read property 'setState' of undefined と怒られる場合の対処法


##はじめに
Reactを使っていて少しハマったところがあったので、備忘録としてまとめました。

##開発構成
BabelでES6,JSXをトランスパイルするという構成です。

##困ったこと
stateを更新しようとしてthis.setStateを何気なく実行すると、以下のように怒られてしまいます。

```
Uncaught TypeError: Cannot read property 'setState' of undefined
```

##原因
`React.createClass()`では全てのメソッドが自動的にthisにbindingされるという仕様なんですが、
ES6におけるReact componentsではその自動bindingが採用されていないためでした。なので、さっきのthisは`undefined`となってエラーとなってしまってました。

この詳細はReactの公式ブログに記載されています。
[React v0.13.0 Beta 1 | React](http://facebook.github.io/react/blog/2015/01/27/react-v0.13.0-beta-1.html#autobinding)

> React.createClass has a built-in magic feature that bound all methods to this automatically for you. This can be a little confusing for JavaScript developers that are not used to this feature in other classes, or it can be confusing when they move from React to other classes.

##対処法
明示的にメソッドをbindingさせてあげればOKです。
先ほど紹介したReactの公式ブログでは、以下のようにconstructer内でそれを行ってます。

```
class Counter extends React.Component {
  constructor() {
    super();
    this.tick = this.tick.bind(this);
  }
  tick() {
    ...
  }
  ...
}
```

##補足
[React and ES6 - Part 3, Binding to methods of React class (ES7 included)](http://egorsmirnov.me/2015/08/16/react-and-es6-part3.html)
この記事では、アロー関数を用いた方法や、ES7の機能を用いた方法などbindingに関して色々紹介してくれてます。
WPF Imageコントロールの拡大・縮小アルゴリズム変更方法

WPFのImageコントロールを用いて画像を表示するアプリケーションを開発していたのですが、画像を拡大・縮小した際に、Frameworkのバージョンを3.5から4.0以降にあげたると画質が劣化するという問題が発生しました。

色々調べてみると、以下のことが分かりました。
1.拡大縮小のアルゴリズムはImageコントロールのVisualBitmapScalingModeプロパティで決定される
2.VisualBitmapScalingModeの値は、デフォルトでBitmapScalingMode列挙体のUnspecifiedが設定されている
3.BitmapScalingMode列挙体のUnspecifiedの値は.NET 3.5以前はFantと同等だが、4.0以降はLinear同等となる

以下はMSDNの関連情報です。
.NET Framework 3.5
https://msdn.microsoft.com/ja-jp/library/system.windows.media.bitmapscalingmode(v=vs.90).aspx
.NET Framework 4.0
https://msdn.microsoft.com/ja-jp/library/system.windows.media.bitmapscalingmode(v=vs.100).aspx

で、問題はVisualBitmapScalingModeプロパティのアクセシビリティがprotected internalな事です。
この為、普通に変更することができないため、以下のようにImageを継承したクラスを作成することで対応しました。

```csharp
    public class FantScalingImage : System.Windows.Controls.Image
    {
        protected override void OnRender(System.Windows.Media.DrawingContext dc)
        {
            this.VisualBitmapScalingMode = System.Windows.Media.BitmapScalingMode.Fant;
            base.OnRender(dc);
        }
    }
```
【Coldfusion】文字列の全角・半角を妥当な形に変換する


```ZenkakuHankakuTest.cfm
<cfset zen1 = "Ｚｅｎｋａｋｕ" />
<cfset zen2 = "ゼンカク" />
<cfset zen3 = "２０１５／１２／３１　２３：５９＠" />
<cfset han1 = "Hankaku" />
<cfset han2 = "ﾊﾝｶﾞｸ" />
<cfset han3 = "2015/12/31 23:59@" />

<cfset aNormalizer = createObject("java", "java.text.Normalizer") />

<cfoutput>
zen1を変換：#aNormalizer.normalize(zen1, createObject("java", "java.text.Normalizer$Form").valueOf("NFKC"))#<br />
zen2を変換：#aNormalizer.normalize(zen2, createObject("java", "java.text.Normalizer$Form").valueOf("NFKC"))#<br />
zen3を変換：#aNormalizer.normalize(zen3, createObject("java", "java.text.Normalizer$Form").valueOf("NFKC"))#<br />
han1を変換：#aNormalizer.normalize(han1, createObject("java", "java.text.Normalizer$Form").valueOf("NFKC"))#<br />
han2を変換：#aNormalizer.normalize(han2, createObject("java", "java.text.Normalizer$Form").valueOf("NFKC"))#<br />
han3を変換：#aNormalizer.normalize(han3, createObject("java", "java.text.Normalizer$Form").valueOf("NFKC"))#<br />
</cfoutput>

```

結果

```
zen1を変換：Zenkaku
zen2を変換：ゼンカク
zen3を変換：2015/12/31 23:59@
han1を変換：Hankaku
han2を変換：ハンガク
han3を変換：2015/12/31 23:59@

```

java.text.Normalizerを都合2回Createしなければいけないのが気付きづらい。
DelayedJobをOctopus環境で使う

:octopus: 辛い。辛いけど逃げられないので、頑張りたい。

まずは`migration`ファイルに使うシャードグループを書く。

```db/migrations/YYYYYMMDDSSSSSScreate_delayed_job.rb
class CreateDelayedJobs < ActiveRecord::Migration
  using_group :awesome_shard
  
  def self.up
    create_table :delayed_jobs, force: true do |table|
      table.integer :priorit
```

このまま`migration`をすると、テーブルは `awesome_shard`のDBに作られる。
このまま `Delayed::Job.enqueue` とか出来ない。シャード先のDBを参照するために `using(:awsome_shard_1)` みたいなScopeが挟まってない事が問題。
`bundle exec rails runner bin/delayed_job start` とかはできるけど、JobをDBから探してくるときにシャード先を参照しなくて永遠にJobを取得できない。

これを、どうにかするには、シャードグループ先のDBの一つに決め打ちで接続するようにする。

```config/initializers/delayed_job_config.rb
Delayed::Worker.destroy_failed_jobs = false

module Delayed
  class Job < ::ActiveRecord::Base
    octopus_establish_connection Octopus.config['shards']['awesome_shards']['awsome_shard_1']
  end
end
```

`octopus_establish_connection` に対して、決め打ちしたいDB先を指定してあげればそこに決め打ちで引きに行く。
これでOctopus環境下でもちゃんと動く。シャード分散したいとかはもっと工夫しなきゃダメ。
Git 初心者におすすめなサイト

バージョン管理でGitを使うことになったので調べてみた。

サルでも分かるGit入門 ～バージョン管理を使いこなそう～
http://www.backlog.jp/git-guide/
gitでググると1位にくる定番サイト。
ブランチの概念とその動きがイラストで説明されていて分かりやすい。
TortoiseGitによるGUI操作を前提にしているが、大部分はCUI操作にも通じる。

Git pullを使うべきでない３つの理由
http://dqn.sakusakutto.jp/2012/11/git_pull.html
個人的にちょっと興味をそそられた。衝突の解消は避けて通れない命題。
naming > assertXXX() > ビットを立てる

ここ数カ月の間に読んだ本で`assert`という動詞を「ビットを1にする」という意味で使っていたのをふと思い出した。

最近作ったcode snippetにて、MSBとLSBだけを1たてる、という処理の関数名を`assertOnlyMSBandLSB()`とするのはいいかもしれない、と思った。

半年後の自分が意味をすぐに分かるかは不明。
coding79 > 座標を意識する > 原点と付属原点

##内容

色々な物事について「座標」を意識しておく。

広中平祐さんの本「可変思考」に書かれている「原点」と「付属原点」という考えとも関連する。

### 例1. (幾何座標)
- ファイルコピー時 : 左から右へ

エクスプローラでフォルダ間をコピーする時、左にコピー元フォルダ、右にコピー先フォルダを置いている。
作業が中断して再開時に、「どっちからどっちへコピーしていた？」と無駄に考えなくていい。

### 例2. (幾何座標)
- 流れのある図を描くとき : 始点を図の左上に持ってくる

どこからどう流れるかを見る時に、始点を探す手間が省ける。
また、複数の図を見る時、あるものは左上から右下に流れて、他のものは右上から左下に流れる、というような混乱を防ぐ。

### 例3. (幾何座標)

１つのソースのある関数にて以下のようにしているとする。

```c
int idx;
int srcSize;
int dstMSB;
```

同じソース内の同じような関数で以下のように順番を変えない。

```c
int srcSize;
int idx;
int dstMSB;
```

２つの関数を比べて処理の抜けなどがないかのチェック時に役立つ。

### 例4. (作業の座標)
作業の座標 = 作業の流れ

原点を整理したのち、付属原点を考え、各処理の実装を作業していく。

「細かいことをしすぎている」と気づいた時は、付属原点か原点に戻るようにする。
Express 4でPOSTされたJSONを扱う


Express 3の情報は多く見つかったけど、意外とExpress 4の単純な例が見つかりにくかったのでメモ。

やりたいことは、POSTでJSONを受け取って、とりあえずオウム返しすること。

まずは、必要なライブラリをインストール。

```bash
npm install --save express      # 4.13.3
npm install --save body-parser  # 1.14.1
```

これで、Express 4.13.3が入る。
どうも、Express単体だとJSONのパースをしてくれないみたいなので、body-parserを一緒に入れる。

で、アプリケーションのコード。

```javascript
var express = require('express');
var bodyParser = require('body-parser');

var app = express();

app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());

app.post('/parrot.json', function(req, res) {
  console.log(req.body);
  res.json(req.body);
});

app.listen(3000);
```

これで、 **http://localhost:3000/parrot.json** にJSONをPOSTすると、そのまま返ってくるようになった。
wgetで日本語のWordPressを取得して展開しました。

WordPressのインストールについてWordPressの[ドキュメント](https://wpdocs.osdn.jp/WordPress_%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)を見ると英語版のインストールになっていました。

# WordPress日本語版の取得
日本語版を取得します。

```bash:WordPress日本語版の取得
wget https://ja.wordpress.org/latest-ja.tar.gz
```

# ファイルの展開

```bash:
tar -xzvf latest-ja.tar.gz 
```

# 日本語版のWordPressを取得完了
無事日本語版のWordPressが使用できるようになりました。

公式ドキュメントでは、自分のサーバーへ直接WordPressをダウンロードする手法が紹介されています。

ただ、`wget http://wordpress.org/latest.tar.gz`になっています。コチラのとおりにやると英語版のWordPressになります。日本語版が用意されているのでそちらを利用すると便利ですね(^o^)

# 参考

- https://wpdocs.osdn.jp/WordPress_%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB
- https://ja.wordpress.org/
embulk の自前ビルド

```
git clone git@github.com:embulk/embulk
```

embulk ディレクトリでビルドして実行するだけならこう

```
./gradlew classpath
bin/embulk
```

もしくは

```
./gradlew cli
java -jar pkg/embulk-{VERSION}.jar
```

作った embulk.jar をインストールしたいならこう (Mac で brew install embulk したものを挿げ替えたい場合)

```
./gradlew cli
cp pkg/embulk-{VERSION}.jar /usr/local/Cellar/embulk/0.7.4/libexec/bin/embulk
```

※ `/usr/local/Cellar/embulk/0.7.4/libexec/bin/embulk` は `/usr/local/bin/embulk` を見ると書いてある。

## 補足

ruby なコードを更新した場合？ ./gradlew clean してから改めて ./gradlew cli しないと反映されないことがあった
電子工作 > 箱 > 特濃ミルクコーヒー

UHA味覚糖の「特濃ミルクコーヒー」「特濃ミルク8.2」とういうキャンディーがある。

このキャンディーの箱が適当な大きさで、ネジなどの小物入れに使えるかもしれない。

https://www.uha-mikakuto.co.jp/catalog/candy/ca35.html

近くのキオスクで販売されている。
Officeのサポート期限 > リンク

Officeのサポート期限についてのリンク
表が見やすい。

http://www.projectgroup.info/tips/Windows/support.html

<hr>
公式を見ようとすると「このウェブページにはリダイレクトループが含まれています。ERR_TOO_MANY_REDIRECTS」となる。
http://support.microsoft.com/lifecycle/?ln=ja


<hr>
こちらが正しいリンクのようだ
https://support.microsoft.com/ja-jp/gp/lifeselect

### リンク
(追記 2018/08/24)

OSのリリース日とサポート終了日(EOL)については、下記でよく整理されています。

- [各OSのリリース日とサポート終了日を表にまとめてみた](https://qiita.com/yunano/items/4757f86f9e92bb4f503f) by @yunano 様
技術英語 > ...  have yet to consider > まだ考慮していない

@ LOE > May 11, 2012

http://loe.org/shows/shows.html?programID=12-P13-00019
> Microsoft, based in Redmond, Washington,with facilities in over 100 countries, is going carbon neutral, cutting greenhouse gases using a method most companies, and countries, <font color=red>have yet to consider: </font>

http://ejje.weblio.jp/content/have+yet+to+do
> have yet to do
なお…すべきだ, まだ…していない.

上記の文のうち、
> using a method most companies, and countries, have yet to consider:

を訳すと
「多くの会社や国がまだ検討（すら）していない方法を使って...」

<hr>

yetを使った文章に関して「...していない」とするところを「...した」とする誤訳を時々見る。
反対の意味になるので注意が必要だ。
phpのサポート期限を確認した

## その他リンク

* [Web - IEのサポート期限まとめ - Qiita](http://qiita.com/sawadays0118/items/41bab56358742fe2a646)
* [Microsoft 製品のサポート期限一覧 - Windows - Project Group](http://www.projectgroup.info/tips/Windows/support.html)
* [MySQL](https://en.wikipedia.org/wiki/MySQL#Versions)
* [PostgreSQL](https://en.wikipedia.org/wiki/PostgreSQL#Release_history)
* [Ruby](https://en.wikipedia.org/wiki/Ruby_(programming_language)#Table_of_versions)


## 参考

* [PHP - Wikipedia, the free encyclopedia](https://en.wikipedia.org/wiki/PHP#Release_history)がすごく良いまとめだった。

## サポート終了

php7.3が2018年12月6日にリリース。

* 7.3: 2021年12月
* 7.2: 2020年11月
* 7.1: 2019年12月
* 7.0: 2019年1月
* 5.6: 2018年12月
* 5.5: 2016年7月
* 5.4: 2015年9月
* 5.3: 2014年8月
* 5.2: 2011年1月
* 5.1: 2006年8月
* 5.0: 2005年9月
* 4.4: 2008年8月

## 移行ガイド

* [7.3->7.4](http://php.net/manual/ja/migration74.php)
* [7.2->7.3](http://php.net/manual/ja/migration73.php)
* [7.1->7.2](http://php.net/manual/ja/migration72.php)
* [7.0->7.1](http://php.net/manual/ja/migration71.php)
* [5.6->7.0](http://php.net/manual/ja/migration70.php)
* [5.5->5.6](http://php.net/manual/ja/migration56.php)
* [5.4->5.5](http://php.net/manual/ja/migration55.php)
* [5.3->5.4](http://php.net/manual/ja/migration54.php)
* [5.2->5.3](http://php.net/manual/ja/migration53.php)
* [5.1->5.2](http://php.net/manual/ja/migration52.php)
* [5.0->5.1](http://php.net/manual/ja/migration51.php)
* [4->5.0](http://php.net/manual/ja/migration5.php)
find 結果それぞれにパイプ・リダイレクトを含むコマンドを適用する

xargs の -I オプションを使うと簡潔に書けることを教えてもらった。
iwaim さんありがとうございます。

```sh
find . -type f | xargs -I{} sh -c "rpm2cpio {} | cpio -id"
```

---

ふと困ってしまったんだけどなんのことはなくて while read に通すだけだった。

```sh
find . -type f | while read -r file; do rpm2cpio ${file} | cpio -id; done
```

整形するとこう。

```sh
find . -type f |                    \
while read -r file;                 \
do                                  \
    rpm2cpio ${file} | cpio -id;    \
done
```

こうすると別に find である必要もない。

```sh
ls *.rpm | while read -r file; do rpm2cpio ${file} | cpio -id; done
```

割りと長いので次の内容のファイルをパスの通ったところにおいて使うと多少楽。

```sh:piped-command.sh
#!/bin/sh

while read -r arg;
do
    eval "$1";
done
```

こんな感じでたたく。

```sh
ls *.rpm | piped-command.sh 'rpm2cpio ${arg} | cpio -id'
```