OmniAICreator/Qiita-1.07M huggingface dataset:
Azure 仮想マシンV2を管理ポータルから作成する


仮想マシンV2はVisual StudioやAzure PowerShellだけでなく、
新ポータルからウィザード形式で作成することもできます。(最近まで知らなかった・・・)

# 作成方法
1. 新ポータル( https://portal.azure.com/ )を開き、新規⇒Computeをクリックし、作成したい仮想マシンを選択します。
![SnapCrab_NoName_2015-8-13_15-21-26_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/41379/d5d158f9-f308-b695-4b50-bcb97560a824.png)

2. 仮想マシンの概要タイルの左下にある「Select a deployment model」というドロップダウンを変更し、作成をクリックします。
V2を作成する場合は「Resource Manager」を選択します。
![SnapCrab_NoName_2015-8-13_15-27-51_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/41379/a494fb0f-69ef-67a9-68d3-51a3bd5f60f8.png)

3. 仮想マシン名などの基本構成を入力します。
![SnapCrab_NoName_2015-8-13_15-37-39_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/41379/31768e33-18c2-c8b4-76c9-761f01955565.png)

4. 仮想マシンのサイズを選択します。
![SnapCrab_NoName_2015-8-13_15-39-53_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/41379/cbb5ac02-597d-729d-59b0-c16a3a3056ea.png)

5. 各種オプションを設定します。
![SnapCrab_NoName_2015-8-13_15-48-41_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/41379/4c48e5e3-a1e1-ca02-5449-4430d3cef62e.png)

6. 設定結果を確認し、作成をクリックすると仮想マシンが作成されます。![SnapCrab_NoName_2015-8-13_15-50-15_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/41379/caf577e7-7e56-6758-4d2f-784806e48c34.png)

自動的に作成されたタイルをクリックすると、リソース作成状況が確認できます。
![SnapCrab_NoName_2015-8-13_15-53-19_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/41379/1e55fe76-ba2b-d612-e47e-cd048771af8d.png)


V2仮想マシンが無事に作成されました。
![SnapCrab_NoName_2015-8-13_15-57-9_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/41379/d1eeeb73-2612-cfa5-e18e-5a39706075a0.png)
僕なりの AngularJS + TypeScript のお作法ベスト?プラクティス ~ カスタムディレクティブ編

念の為前書きですが、今回の題材は、私が調べてもベストプラクティスが見つからなかった部分を題材にしておりますので、
もしもっと良い方法があった場合ご教示いただければ、という前提で書かせていただきます。

# 解決したいこと（困りごと）

1. カスタムディレクティブの可読性が悪い
2. TypeScriptでのベストプラクティスの例が少ない（or 無い）
3. classとか有効活用したい

## まず...

困り気味なソースを見てみましょう。

``` ts
angular.module('fooApp')
  .directive('fooDirective', function () {
    return: {
      restrict: 'E',
      link: function ($scope, $element, $attrs) {
        $scope.foo = 'foo';
        $scope.bar = 'bar';

        xxxx = () => {
          console.log($scope.foo, $scope.bar);
        };

        $element.on('click', function () {
          xxxx($scope.foo, $scope.bar);
        });
      }
    }
  })
;
```

上記の場合、ディレクティブが増えれば増えるほど、
複雑な処理をすればするほど可読性が悪くなってきます。
あといちいち「$scope」とか書くのめんどうくさい！

## つぎに...

改善したソースを見てみましょう。

``` ts
class FooDirective {
  restrict: string = 'E';
  controller: string = 'FooCtrl as c'
}
class FooController {
  public foo: string = 'foo';
  public bar: string = 'bar';

  // 個人的なポリシーとしてjQueryオブジェクト以外に
  // $を付けたくないので、別の名前のメンバ変数を用意しています
  scope: ng.IScope;
  attrs: any;

  constructor (
    private $element: ng.IAugmentedJQuery,
    $scope: ng.IScope,
    $attrs: any
  ) {
    this.scope = $scope;
    this.attrs = $attrs;

    this.bindEvents();
  }

  bindEvents () : void {
    this.$element.on('click', () => {
      this.xxxx();
    });
  }

  xxxx () : void {
    console.log(this.foo + this.bar);
  }
}

angular.module('fooApp')
  .controller('fooCtrl', FooController)
  .directive('fooDirective', () => new FooDirective())
;
```

ディレクティブ用のコントローラーをクラスとして明記しています。
もちろん、クラスを使っているので、継承も自由にできます。
似たようなディレクティブだけど、少し性質を変えたい時とかこの書き方だと大分いい！

ディレクティブを定義している部分を見れば、どのコントローラーと対になっているかもわかるので、
私としては一番よかった書き方になります。


## 「Controller as」の有効利用

AngularJS + TypeScriptでは、「Controller as」を使う、というお作法があります。
これはカスタムディレクティブでも有効で、
クラス内でのthisが$scopeに相当するため、可読性の向上の助けになるかと思います。

``` ts
$scope.fn = () => {
  // ...
};
```

とか書いていたものは

``` ts
public fn () : void {
  // ...
}
```

と、なんか素敵に書く事ができます。


## 最後に

私自身まだまだこの構成でプロダクトを作りはじめたばかりのため、
100%信じていただくより、いち参考資料として見ていただければ幸いです。

今後コントローラーではなくディレクティブをたくさん使ってねー
みたいな仕様になりそうなので、いそいそと書かせていただきました。

ありがとうございました！
RubyでURL、要素、ファイル名を指定させtxtに指定したURLの要素を出力するコード

```rb:scrape.rb
require 'open-uri' #URLにアクセスする為のライブラリを読み込みます。
require 'nokogiri' #Nokogiriライブラリを読み込みます。


#切り出すURLを指定します。
print "Please Input Search URL : "
url = gets.chop

charset = nil
html = open(url) do |f|
  charset = f.charset #文字種別を取得します。
  f.read #htmlを読み込み変数htmlに渡します。
end

#htmlを解析し、オブジェクト化
page = Nokogiri::HTML.parse(html, nil, charset) 

print "Please Input Search XPATH : "
xpath = gets.chop

result = page.search(xpath)

print "Please Input Filenames : "
filename = gets.chop+'.txt'

File.write(filename, result)

```
VirtualDomain-resource-agentのlibvirtによるSTONITHに注意

新しいresource-agnetのVirtualDomainを利用して、external/libvirt(reboot)を使ったfencingを行う場合に注意が必要。
これは、最近のVirtualDomainの影響で、以下の事象が起きる。

 1. VirtualDomainにてPacemaker管理のKVMゲストを起動
 2. external/libvirtを使うような故障が発生
 3. external/libvirtでdestroy後のstartに失敗して、fencingが失敗
 
現時点では、external/libvirt(off)で利用する方法しかない。

```lang:投入するCLI-file
(snip)
primitive Stonith1 stonith:external/libvirt \
  params \
    pcmk_reboot_timeout="40s" \
    pcmk_reboot_action="off" \ 
(snip)
```

原因は、VirtualDomainの制御とexternal/libvirtの連動が取れていないせい...
 1. VirtualDomainはcreateでゲストを起動
 2. external/libvirtはdestroyでゲストを停止
 3. createをdestroyしたので、virsh startはエラー
CentOS6.6(x64)にelasticsearchをインストールする

●環境
ホストOS　Windows7 64bit
ゲストOS　CentOS 6.6 x64
ハイパバイザ　VMware Player

●手順
root になる。

●javaのインストール

    yum install java
    java -version


●elasticsearchのインストール

    wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.7.1.tar.gz -O elasticsearch.tar.gz
    tar -xf elasticsearch.tar.gz
    rm elasticsearch.tar.gz
    mv elasticsearch-* elasticsearch
    cd elasticsearch/

●設定

    vi config/elasticsearch.yml
    http.port: 9200


●kuromoji

    cd ..
    ./elasticsearch/bin/plugin --install elasticsearch/elasticsearch-analysis-kuromoji/2.7.0


●起動スクリプト

    curl -L http://github.com/elasticsearch/elasticsearch-servicewrapper/tarball/master | tar -xz
    mv *servicewrapper*/service ./elasticsearch/bin/
    rm -Rf *servicewrapper*
    ./elasticsearch/bin/service/elasticsearch install

→下記のように表示される。

    Detected RHEL or Fedora:
    Installing the Elasticsearch daemon..


●起動

    /etc/init.d/elasticsearch start

●確認

    curl -X GET http://localhost:9200/
[Vista]テキストエディタで保存が出来なくなった

使用エディタ：SublimeText2

現象：編集中のファイルを上書き保存しようとしたら保存できなくなった

これが
![save.png](https://qiita-image-store.s3.amazonaws.com/0/59364/2b488a69-8839-737e-b1e0-90ee49dc3b6b.png)

こうなる
![cantsave.png](https://qiita-image-store.s3.amazonaws.com/0/59364/1c5fac69-dba8-c895-cdbc-b8d308f9c7d2.png)

＼ふええええ～～／

検索してでてきたもの：
[Unable to save -- I see no answers](https://sublimetext.com/forum/viewtopic.php?f=3&t=9240)
>なんかプロセスが掴まれてるからじゃないのー？（意訳）

ほう…

どうやらカーソルが編集中のファイルにオンになる→プレビューで内容を表示しようとして掴んじゃってるっぽい？
![process.png](https://qiita-image-store.s3.amazonaws.com/0/59364/84644d3f-4d1f-9f6c-a76c-5675bfd18240.png)

このあとプレビューを切ったのは言うまでもありませぬ。
GitHubとZenHubでAgile、できるのかな？

自分と学生さんのプロジェクト管理に、GitHubとZenHubを使っています。ZenHubはGitHub用のChrome拡張機能で、GitHubにタスクボード、estimateというストーリーポイント機能、バーンダウンチャートなどを追加できます。

詳しくは、こちらの記事が、わかりやすくて良いですね　http://dev.classmethod.jp/etc/github-discussion-sidebar/

これを使って、もう少しきっちりアジャイルなことをしてみたかったので、最近発売された「C#実践開発手法」で勉強してみました。ほかの資料も調べながら理解した範囲では、

スクラムのスプリント　-> Milestone
ユーザーストーリー -> issue (参考資料：https://confluence.atlassian.com/display/AGILE/Story）
タスク　-> issue の記載の中にマークダウンでチェックリストを作る

という感じで行えば、とりあえずアジャイルな管理ができるのかな、と思いました。

GitHubのマイルストーンは終了日のみ決めますが、ZenHubのバーンダウンチャートを使う際は、開始日も決める必要があります。スプリントは通常2週間程度らしいので、ZenHubで期間を設定するときも、そのくらいが良いのでしょう。

各issueにはEstimateを設定できます。それが、Burndownに反映されるので、スプリントの進捗を見るのに大変便利です。

アジャイルとかスクラムに詳しい方のご意見いただければ、幸いです。まだ私自身不慣れですし、学生さんにも十分浸透してませんが、今後も勉強して、効果的なプロジェクト管理を行いたいです。
VS初心者が知っておくとよかったこと

# 背景

VSに不慣れな自分が、デバッグを文をcerrやcoutに出力したのに、
今となっては対して速くもないPCなのに、即効で窓が消えてしまい、
標準出力や、エラー出力したデバッグ文が読めずに苦戦していた。

# 解決方法

getchar()を入れる！

```cpp
if (!cap.isOpened()) {
  std::cout << "bad cap";
  getchar(); // <- これ！
  return -1;
}
```

これで、入力待ちになり、無事デバッグ文が読めた。

この方法、Win32コンソールアプリでGUI表示するアプリを
作るときにしか使えないかもだが、割と、クロスプラットフォームな
開発をして、たまにしかWinを使わない自分には目から鱗ものだった。

# オチ

<blockquote class="twitter-tweet" lang="ja"><p lang="ja" dir="ltr">そりゃ、WebCamつないでなけりゃ、いくら頑張ってOpenCVを叩いてもカメラの画像が表示されるわけがないことに気づけてよかった午後のひととき。ようやく、当初の目的の為の調査がこれで完了</p>&mdash; kjunichi (@kjunichi) <a href="https://twitter.com/kjunichi/status/631705138739081216">2015, 8月 13</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

# 参考資料

- http://stackoverflow.com/questions/4749498/cant-access-webcam-with-opencv
unity > uGUI > ScrollBarの数値を読み取る > aBar.Value

```txt:動作確認
Unity 5.1.1-f on MacOS X 10.8.5
```

ScrollBarのvalueプロパティを読み取ればいい。

## code01
以下のコードでは、Scrollbar1のvalueを読み取る部分がまだこなれていない。

```MyButton.cs
using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class MyButton : MonoBehaviour {
	double getBarValue() {
		Scrollbar [] targets = Scrollbar.FindObjectsOfType<Scrollbar> ();
		foreach (Scrollbar aBar in targets) {
			if (aBar.name.Equals("Scrollbar1")) {
				return aBar.value;
			}
		}
		return -1.0;
	}

	public void ButtonClick() {
		double barVal = getBarValue ();

		if (barVal >= 0.0) {
			Debug.Log (barVal.ToString ("0.00"));
		} else {
			Debug.Log ("Scrollbar1 not found");
		}
	}
}
```

#code 02
こちらの方がScrollbar.value読み取りが多少簡易になった気がする。

```csharp
using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class MyButton : MonoBehaviour {
	double getBarValue() {
		GameObject work = GameObject.Find ("Scrollbar1");
		if (work) {
			return work.GetComponent<Scrollbar> ().value;
		}
		return -1.0;
	}

	public void ButtonClick() {
		double barVal = getBarValue ();

		if (barVal >= 0.0) {
			Debug.Log (barVal.ToString ("0.00"));
		} else {
			Debug.Log ("Scrollbar1 not found");
		}
	}
}
```

![Scene_unity_-_150813_uiScrollBar_-_PC__Mac___Linux_Standalone__Personal_.jpg](https://qiita-image-store.s3.amazonaws.com/0/32870/41f6b916-3d5d-4f6d-d61e-b415124ee289.jpeg)
【Titanium】iOSモジュール内でのaddSubViewに関して


モジュール内で作ったUIViewにaddSubViewをしようとしてハマったので共有メモ。
原因はProxy側でのメソッドの宣言方法にあった。

TiUIView側で以下のようなコードを書いたとする

```HogeView.m
-(void)testMethod:(id)args{
	UILabel *label = [[UILabel alloc] init];
	label.text = @"Hello!";
	label.frame = CGRectMake(0, 0, 200, 200);
	label.backgroundColor = [UIColor blueColor];
	label.textColor = [UIColor whiteColor];
	label.textAlignment = UITextAlignmentCenter;
	
	[self addSubview:label];
}
```

このメソッドをJavaScript側から呼ぶためにProxyに宣言する。


```HogeViewProxy.m
#import "HogeViewProxy.h"
@implementation HogeViewProxy

USE_VIEW_FOR_METHOD(void, testMethod, id);

@end
```

これ↑で、JavaScript側から呼んでも一切描画されない。正確にはaddはされているが描画されない。
いやぁ困った。本当に困った。

で、適当にGithubをあさってたら見つけた。解決策はProxy側でのメソッド宣言を変更する。

```HogeViewProxy.m
#import "HogeViewProxy.h"
#import "HogeView.h"
#import "TiUtils.h"

@implementation HogeViewProxy

-(void)testMethod:(id)args
{
    TiThreadPerformOnMainThread(^{[(HogeView*)[self view] testMethod:args];}, NO);
}

@end
```
この書き方に変更後、JavaScript側から呼んだら描画された。

USE_VIEW_FOR_METHODじゃあダメなのね・・・って話。
unity/csharp > 書式指定子 > barValの数値を1.00とする > barVal.ToString ("0.00")

```csharp
using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class MyButton : MonoBehaviour {
	double getBarValue() {
		Scrollbar [] targets = Scrollbar.FindObjectsOfType<Scrollbar> ();
		foreach (Scrollbar aBar in targets) {
			if (aBar.name.Equals("Scrollbar1")) {
				return aBar.value;
			}
		}
		return -1.0;
	}

	public void ButtonClick() {
		double barVal = getBarValue ();

		if (barVal >= 0.0) {
			Debug.Log (barVal.ToString ("0.00"));
		} else {
			Debug.Log ("Scrollbar1 not found");
		}
	}
}
```
Windowsのディスク容量を回復する方法

##クリーンアップ

Windowsの標準機能として、クリーンアップが使えます。

コンピュータ(ローカルディスクC)をプロパティで開き、全般から「ディスクのクリーンアップ」から回復できます。

##Windows Update

以下のディレクトリに移動し、そこにあるファイルを削除します。Windows Updateでダウンロードされたファイルですが、基本的に不要です。

```bash
C:\WINDOWS\SoftwareDistribution\Download
```

##sdelete.ext

VirtualBoxでは可変ストレージでイメージを作ると、どんどんとディスク領域を侵害します。したがって、本来的に使用している容量に近づけるため、ゼロスペースで埋める必要があります。

`sdelete.exe`をダウンロードしてきて、ローカルディスクCのルートディレクトリに置きます。

```bash
cd /

sdelete.ext -z
```

www.sysinternals.com

Host:

```bash
$ vboxmanage modifyhd ~/VirtualBox\ VMs/windows7/windows7.vdi --compact
```
[Perl,CPAN]LWPでhttpsにアクセスする方法

LWPにて、.pl から、httpにアクセスできる状態であっても、
httpsにアクセスしたら、下記のエラーが表示される場合。

    LWP will support https URLs if either Crypt::SSLeay or IO::Socket::SSL
    is installed. More information at
    <http://search.cpan.org/dist/libwww-perl/README.SSL>.

この場合は、下記を実施すればよい。

まずrootになる。

    perl -MCPAN -e shell

    install Crypt::SSLeay
    install IO::Socket::SSL
    install LWP::Protocol::https
    exit

    yum install perl-Net-SSLeay
    yum install perl-Crypt-SSLeay
    yum install perl-IO-Socket-SSL

この状態で、.pl から https にアクセスすれば
コンテンツが取得できる。
javaでjsonから各種ライブラリに対応するbeanを簡単に作成する方法

[前回](http://qiita.com/aono-masashi/items/a8b30d1892732e7e5f1b)xml→beanを作ったけど
json→beanのマッピングを作るのもめんどくさいので簡単に作る方法をまとめとく

# jsonschema2pojo
http://www.jsonschema2pojo.org/
![jsonchema2pojo_index.PNG](https://qiita-image-store.s3.amazonaws.com/0/88168/cce8bcfc-bbb9-dcab-2ed5-9e9848408081.png)

ちょっとしたサイズのjsonならweb上で作成できる
結構でかいorWeb上で生成するのはちょっと・・・というのであればCLIも用意されている

https://github.com/joelittlejohn/jsonschema2pojo/wiki/Getting-Started#the-command-line-interface
https://github.com/joelittlejohn/jsonschema2pojo/releases
適当にjsonschema2pojo-0.4.14.tar.gzとかをダウンロードして解凍

解凍したディレクトリに移動して
`jsonschema2pojo -s source.json -t generate_dir -T JSON`
もしくは中身はただのjarなんで
`java -jar jsonschema2pojo-cli-0.4.14.jar -s source.json -t generate_dir -T JSON`
とかでOK

結構オプションとかもあるので使いそうなものを抜粋
`-s, --source`
	元データ(必須)
`-t, --target`
	出力先(必須)
`-a, --annotation-style`
	各ライブラリ用のアノテーションを付けてくれる
	[JACKSON, JACKSON1, JACKSON2, GSON, NONE]
	Default: JACKSON
`-f, --float-numbers`
	Float型で作成
`-l, --long-integers`
	Long型で作成
`-e, --output-encoding`
	エンコード指定
	Default: UTF-8
`-p, --package`
	パッケージ名指定
`-R, --remove-old-output`
	古い出力があったら削除
	ディレクトリごと一回削除してもう一度作るっぽい
`-T, --source-type`
	スキーマorJSON選択
	普通のJSONからbean作りたいときはJSONを指定する
	Default: JSONSCHEMA
`-P, --use-primitives`
	プリムティブで作成

できたbeanが_で終わってるのは名前がかぶってるオブジェクトっぽい。
多分元データにあったりなかったりするとできるっぽいので
このへんは手動でマージするしかないか
unity > uGUI > Buttons / Files > 複数のButtonにカレントフォルダのファイル名を表示する

```txt:動作確認
Unity 5.1.1-f on MacOS X 10.8.5
```

##準備
1. UI > Buttonを作成。名前:ButtonLoad, Text:Loadにして、以下のMyButton.csを関連づけする。OnClickに MyButton.ButtonClickを関連付ける。
2. UI > Buttonを作成。名前:Button1にして、Textの名前を:Button1Textにする。
3. Button2,3,4について手順２と同様。

##code
```csharp:MyButton.cs
using UnityEngine;
using System.Collections;

using UnityEngine.UI; // for Text
using System.IO; // for Directory()

public class MyButton : MonoBehaviour {

	public Text MessageText;
	private const int kMaxButtons = 4;

	void dispFilesOnButtons(string filename, int idx) {
		if (idx > kMaxButtons) {
			return;
		}
		Text [] targets = Text.FindObjectsOfType<Text> ();
		foreach (Text targetText in targets) {
			if (targetText.name == "Button" + idx.ToString() + "Text") { // e.g. Button1Text
				targetText.text = filename;
				break;
			}
		}
	}

	public void ButtonClick() {
		string [ ] files = Directory.GetFiles (".");
		int count = 1;
		foreach (string aFile in files) {
			dispFilesOnButtons(aFile, count);
			count++;
			Debug.Log(aFile);
		}
	}

}
```

##実行の様子
![Scene_unity_-_150813_getDirectories_-_PC__Mac___Linux_Standalone__Personal_.jpg](https://qiita-image-store.s3.amazonaws.com/0/32870/7f590c05-bdb7-cfb5-5ffb-a1f2306f62ab.jpeg)

これを元にファイル選択UIを実装できるような気がする。
【Android】画像をぼかす(ブラー処理)

# はじめに

AndroidアプリでBitmapにブラー処理を行う実装方法を紹介。

例えばメニューやダイアログを開いたりする時に、表示している画面の上に磨りガラスのような
効果をつけてダイアログを表示したいというようなことがあるとする時に使える。(Etsyアプリとか)
今回はRenderScriptを使って、iOSのガラス処理みたいなことを実装。

# 実装方法

## Gradle

Gradle側でRenderScriptを使用するための記述をする

```
android {
    defaultConfig {
        renderscriptTargetApi 19
        renderscriptSupportModeEnabled true
    }
}
```


## Activity

RenderScriptとImageViewを用意

```lang:Activity
private RenderScript rs; // RenderScript
private ImageView image; // 画像をセットするImageView
```

それぞれを初期化して、画像をブラーする

```lang:Activity
try{
    rs = RenderScript.create(this);
    image = (ImageView)findViewById(R.id.picture);
    
    // 第二引数は加工する元のBitmap 
    blurProcess(image, bmp);
}catch (Exception e){
    //nop
}
```

```lang:Activity

private void blurProcess(final ImageView img, final Bitmap bmp) {
    new AsyncTask<Void, Void, Void>() {
        @Override
        protected Void doInBackground(Void... params) {
            try {
                Allocation alloc = Allocation.createFromBitmap(rs, bmp);
                ScriptIntrinsicBlur blur =
                        ScriptIntrinsicBlur.create(rs, alloc.getElement());
                blur.setRadius(15f); // ブラーする度合い
                blur.setInput(alloc);
                blur.forEach(alloc);
                alloc.copyTo(bmp); // 加工した画像をbmpに移す
            } catch (Exception e) {
                // nop
            }
            return null;
        }
        @Override
        protected void onPostExecute(Void v) {
            // 画像をセット
            img.setImageBitmap(bmp);
        }
    }.execute(null, null, null);
}

```

これだけでOK！
これでImageViewにはブラー加工された画像がセットされる
Webpackで詰まったこと

# Webpackがいろいろと辛い

この記事を書いた経緯はというと、既存のコードにテストの環境を整えようとしたところでいろいろとWebpack関連で詰まったため記事にした。

既存のコードはWebpackでビルドされていて、loaderなど依存が多かったため、テストもWebpackで解決するのが早いだろうと考えたところからはじまった。

# しばしばパッケージの解決に失敗する

Webpackでbundlingを行っていたのだが、テストの環境を導入しようとして`sinon`を利用しようとしたら、エラーが出た。

調べてみたらすでにissueに上がっており、AMD対応の部分を削除して対応したforkが上がっていた。

https://github.com/webpack/webpack/issues/304

しかし、そのforkは最新ではなかったため、fork元の最新をマージしたforkを作って対応した。

https://github.com/pnlybubbles/Sinon.JS

こんな感じにうまくbundlingできないものが多く、いちいち対応してたら非効率である。

# Browserifyとの違い

Webpackの代替策として挙げられるのがBrowserifyである。

その違いは思想にあるが、今回は詰まった点を軸にして書き連ねる。

Webpackはグローバルが扱いにくい。`expose-loader`など対応策は無くはない。そとそもグローバル汚染を避けることをbundlingの目的としていることもあり、本末転倒感あるが、テストなどでアサーションをグローバルに置きたいといったこともある。

Browserifyでは`detectGlobals`オプションで解決可能である。そもそもwebpackで解決したものをnode環境で実行するというのは方向性が違う感じはある。

また`node_modules`をbundlingせず、通常のcommonjsとしてrequireするということもwebpackでは一般的にできるわけではないようだ。browserifyでは`bundleExternal`オプションで解決できる。

webpackに`target`というオプションが存在し、nodeやatomといった選択肢がある。しかし、先述のsinonのbundlingは解決できなかった。イマイチこのオプションは把握していない。

# で

Webpackにはいろいろと問題が多いことが今回わかった。既存のコードを変更してbrowserifyへの移行を検討しようかと考えている。

今回、あまり調査せずただ結果だけを並べてWebpackはクソ的な記事を書いてしまったが、これ以上、依存パッケージの解決に失敗するごとにパッチを書くのは非効率だと感じたところもあり、Browserifyへの移行の方が今後のためにも良いと判断したためだ。
unity / dotnet > Directory.GetDirectories() / Directory.GetFiles()

```txt:動作確認
Unity 5.1.1-f on MacOS X 10.8.5
```

カレントフォルダのファイルとサブフォルダを取得する。

```csharp:MyButton.cs
using UnityEngine;
using System.Collections;

using UnityEngine.UI; // for Text
using System.IO; // for Directory()

public class MyButton : MonoBehaviour {

	public Text MessageText;

	public void ButtonClick() {
		string [ ] dirs = Directory.GetDirectories (".");
		foreach (string aDir in dirs) {
			Debug.Log(aDir);
		}

		string [ ] files = Directory.GetFiles (".");
		foreach (string aFile in files) {
			Debug.Log(aFile);
		}
	}
}
```

![Scene_unity_-_150813_getDirectories_-_PC__Mac___Linux_Standalone__Personal_.jpg](https://qiita-image-store.s3.amazonaws.com/0/32870/0b7b4e21-0c08-658f-d1f4-448961251c2a.jpeg)
GitHubで、もらったプルリクに対して自分のコミットを混ぜ込む


あるいは、1つのプルリクで共同開発というやつ。GitHubに限らないと思うし、こんなテクニック、有名すぎてどこにでも書いてあると思って調べたけど全然出てこなくて僕のググり力の低さを痛感しつつメモ書きを残すことにしました。

まず、プルリクを出してきた人のリポジトリを登録します。この例だと、hogeさんのexampleリポジトリを、hogeとして登録しています。

```
$ git remote add hoge git@github.com:hoge/example.git
```

確認します。通常はoriginとupstreamだけだと思います。そこに、追加したhogeがあります。

```
$ git remote -v
hoge	git@github.com:hoge/example.git (fetch)
hoge	git@github.com:hoge/example.git (push)
origin	git@github.com:zaru/example.git (fetch)
origin	git@github.com:zaru/example.git (push)
upstream	git@github.com:example-team/example.git (fetch)
upstream	git@github.com:example-team/example.git (push)
```

次に、プルリクをfetchで取得できるようにします。`.git/config`ファイルを直接いじるか、`config --add`コマンドで追加します。

```
$ git config --add remote.upstream.fetch '+refs/pull/*:refs/remotes/pr/*'
```

```.git/config
[core]
	repositoryformatversion = 0
	filemode = true
	bare = false
	logallrefupdates = true
	ignorecase = true
	precomposeunicode = true
[remote "origin"]
	url = git@github.com:zaru/example.git
	fetch = +refs/heads/*:refs/remotes/origin/*
[remote "upstream"]
	url = git@github.com:example-team/example.git
	fetch = +refs/heads/*:refs/remotes/upstream/*
	fetch = +refs/pull/*:refs/remotes/pr/* # ←　追加
[remote "hoge"]
	url = git@github.com:hoge/example.git
	fetch = +refs/heads/*:refs/remotes/hoge/*
```

これで、プルリクをfetchしてもってくることができました。

```
$ git fetch --all
Fetching origin
Fetching upstream
remote: Counting objects: 809, done.
remote: Total 809 (delta 565), reused 565 (delta 565), pack-reused 244
Receiving objects: 100% (809/809), 94.07 KiB | 0 bytes/s, done.
Resolving deltas: 100% (575/575), completed with 47 local objects.
From github.com:basicinc/case-store
 * [new ref]         refs/pull/10/head -> pr/10/head
 * [new ref]         refs/pull/100/head -> pr/100/head
 * [new ref]         refs/pull/101/head -> pr/101/head
 * [new ref]         refs/pull/11/head -> pr/11/head
 * [new ref]         refs/pull/12/head -> pr/12/head
```

プルリクの一覧を確認します。

```
$ git branch -a
  remotes/pr/10/head
  remotes/pr/100/head
  remotes/pr/101/head
```

修正したいプルリクをローカルにcheckoutします。

```
$ git checkout -b pr100 remotes/pr/100/head
```

あとは普通に修正してcommitします。

最後にpushをするんですが、自分のリポジトリではなく相手のリポジトリに対してpushをします。自分のブランチ名が`pr100`で、相手のブランチ名が`piyo`だとしたら、以下のようなコマンドになります。

```
$ git push hoge pr100:piyo
```

これで無事、1つのプルリクに対して複数人でコミットを混ぜ混ぜしてプルリクを育てることができます。
Oracleでデータインポート時のメモ


# 環境Aのテーブルのデータを環境Bのテーブルにコピーしたい
開発環境と本番環境等、環境とユーザーIDが異なる時のデータ移行時の手順

## エクスポート
```
exp ${TMP_DB_CONNECT} file=dmpファイル名 log=ログファイル名 statistics=none CONSTRAINTS=n GRANTS=n INDEXES=n ROWS=y tables=\(テーブル名\)
```

## インポート
```
imp ${TMP_DB_CONNECT} file=dmpファイル名 log=ログファイル名 fromuser=\(エクスポートした環境のユーザーID\) touser=\(インポートする環境のユーザーID\) rows=y data_only=y commit=y indexes=n constraints=n grants=n
```

## インポート先に既に同名のテーブルがあるので、インポートするテーブルは別名にしたいとき
dmpファイルのデータをインポート時はテーブルIDを指定出来ないのでテーブルを複数使うしかない。

1. 既存テーブルを別名のテーブルを作り、そこに退避させておく。
```
create table 新しいテーブル名1 as select * from 元のテーブル名
```

2. 既存テーブルの中身を空にする。※キー重複防止のため
```
delete from 元のテーブル名
```

3. データをインポートする。
4. インポートしたデータが入っているテーブルを別名でコピー
```
create table 新しいテーブル名2 as select * from 元のテーブル名
```
5. 確保しておいた既存データを正しいテーブルに戻す
```
delete from 元のテーブル名
insert into 元のテーブル名 select * from 新しいテーブル名1
```

6. 退避用テーブルを削除
```
drop table 新しいテーブル名1 cascade constraint purge;
```
chef でインストールした rbenv で新しいバージョンの ruby をインストールする方法

# はじめに
chef で rbenv をインストールしていたが、新たに最新のバージョンの 2.2.2 をインストールしたところ、
そんなバージョンがないよと怒られたときのメモ。
## 使用している cookbook
- [rbenv](https://github.com/fnichol/chef-rbenv)
- [chef-ruby_build](https://github.com/fnichol/chef-ruby_build)

## エラーログ
```
Mixlib::ShellOut::ShellCommandFailed
------------------------------------
Expected process to exit with [0], but received '2'
---- Begin output of "bash"  "/tmp/chef-script20150812-3205-zoqi5y" ----
STDOUT:
STDERR: ruby-build: definition not found: 2.2.2
```

# 原因

rbenv は結構前にインストールしていで、ruby-build で対応のバージョンを確認したら、
2.2.2 が表示されなかったので、ruby-build が古かったためと判明。

```bash:
$ ruby-build --definitions
1.8.6-p383
1.8.6-p420
1.8.7-p249
1.8.7-p302
1.8.7-p334
1.8.7-p352
1.8.7-p357
1.8.7-p358
1.8.7-p370
1.8.7-p371
1.8.7-p374
1.8.7-p375
1.9.1-p378
1.9.1-p430
1.9.2-p0
1.9.2-p180
1.9.2-p290
1.9.2-p318
1.9.2-p320
1.9.2-p326
1.9.3-dev
1.9.3-p0
1.9.3-p125
1.9.3-p194
1.9.3-p286
1.9.3-p327
1.9.3-p362
1.9.3-p374
1.9.3-p385
1.9.3-p392
1.9.3-p429
1.9.3-p448
1.9.3-p484
1.9.3-p545
1.9.3-p547
1.9.3-preview1
1.9.3-rc1
2.0.0-dev
2.0.0-p0
2.0.0-p195
2.0.0-p247
2.0.0-p353
2.0.0-p451
2.0.0-p481
2.0.0-preview1
2.0.0-preview2
2.0.0-rc1
2.0.0-rc2
2.1.0
2.1.0-dev
2.1.0-preview1
2.1.0-preview2
2.1.0-rc1
2.1.1
2.1.2
2.2.0-dev         <----2.2.2 がない
jruby-1.5.6
jruby-1.6.3
jruby-1.6.4
jruby-1.6.5
jruby-1.6.5.1
jruby-1.6.6
jruby-1.6.7
jruby-1.6.7.2
jruby-1.6.8
jruby-1.7.0
jruby-1.7.0-preview1
jruby-1.7.0-preview2
jruby-1.7.0-rc1
jruby-1.7.0-rc2
jruby-1.7.1
jruby-1.7.10
jruby-1.7.11
jruby-1.7.12
jruby-1.7.13
jruby-1.7.2
jruby-1.7.3
jruby-1.7.4
jruby-1.7.5
jruby-1.7.6
jruby-1.7.7
jruby-1.7.8
jruby-1.7.9
jruby-9000+graal-dev
jruby-9000-dev
maglev-1.0.0
maglev-1.1.0-dev
maglev-2.0.0-dev
mruby-1.0.0
mruby-dev
rbx-1.2.4
rbx-2.0.0
rbx-2.0.0-dev
rbx-2.0.0-rc1
rbx-2.1.0
rbx-2.1.1
rbx-2.2.0
rbx-2.2.1
rbx-2.2.10
rbx-2.2.2
rbx-2.2.3
rbx-2.2.4
rbx-2.2.5
rbx-2.2.6
rbx-2.2.7
rbx-2.2.9
ree-1.8.6-2009.06
ree-1.8.7-2009.09
ree-1.8.7-2009.10
ree-1.8.7-2010.01
ree-1.8.7-2010.02
ree-1.8.7-2011.03
ree-1.8.7-2011.12
ree-1.8.7-2012.01
ree-1.8.7-2012.02
topaz-dev
```

# 対処方法
chef で ruby-build をアップデート。
再度、流してもアップデートされなかった。
デフォルトだと、最初に入れた状態を保持するみたい。

https://github.com/fnichol/chef-ruby_build#-upgrade

node ファイルで `upgrade`を `sync` or `true` にすると実行時にアップデートしてくれるみたい。

```json:nodes/host.json
{
  "ruby_build": {
    "upgrade": "sync"
  },
  "rbenv": {
    "user_installs": [
      {
        "user": "hogehoge",
        "rubies": ["2.2.2"],
        "global": "2.2.2",
        "gems": {
          "2.2.2": [
            { "name": "bundler" }
          ]
        }
      }
    ]
  },
  "run_list": [
    "ruby_build",
    "rbenv::user"
  ]
}
```
ffmpeg + python + opencvで動画を白黒に変換する

最近、「ffmpeg + python + opencv」の組み合わせで動画から画像を取り出して色々遊んでいます。  
今回はこれらを使って、「カラーの動画を白黒変換する」というのをやってみようと思います。

## 実行環境

OS: Windows7(Cygwin)
ffmpeg: N-74313-g9c0407e
Python: 2.7.10
OpenCV: 2.4.11

## 0. 作業準備
適当に作業フォルダを作り、元になる動画ファイルを配置します。

```bash
$ mkdir bwmovie/row bwmovie/bw
$ mv movie bwmovie/
$ cd bwmovie
```

## 1. 動画から静止画像を切り出す

作業フォルダに移動してffmpegを使い動画ファイルからフレーム単位で静止画像を抽出します。

```bash
$ ffmpeg -i movie -f image2 row/%06d.jpg
```

一番最後の引数がファイル名になります。この場合、rowフォルダ内に「0詰めされた6桁の整数で取り出されたものから順番に並ぶ」ようにファイル名が付けられます。

## 2. 静止画像を白黒変換する

この変換はPython + OpenCVで行います。  
作業フォルダ直下に、以下の様なpythonコードを作ります。

```python
import cv2
import glob

paths = glob.glob('row/*')

for index,path in enumerate(paths):
        image = cv2.imread(path, 0)
        ret, th = cv2.threshold(image, 0, 255, cv2.THRESH_BINARY+cv2.THRESH_OTSU )

        cv2.imwrite('bw/%06d.jpg' % index, th)
```

このコードでやっていることは、まず`paths = glob.glob('row/*')`で、rowフォルダ配下にあるファイルを配列として取得します。  
次にこれらのファイルパスをforループで回し、`image = cv2.imread(path, 0)`でimageに格納します。この時、imreadの2つ目の引数に0を指定してグレースケールになるようにしています。
その後、`ret, th = cv2.threshold(image, 0, 255, cv2.THRESH_BINARY+cv2.THRESH_OTSU )`で画像を2値化（白黒化）し、`cv2.imwrite('bw/%06d.jpg' % index, th)`で画像bwフォルダ内に連番になるように保存します。

## 3. 静止画像をつなぎあわせて動画にする

最後に、先ほど白黒変換した画像をつなぎあわせて動画にします。

```bash
 ffmpeg -i bw/%06d.jpg video.mp4
```
iオプションのあとに元になる画像を指定し、一番最後の引数に出力ファイル名を指定します。  

## まとめ
以上で、「動画を白黒変換する」事ができます。  
ただし、この方法で出力される動画は音声がない上にビットレートを指定していないので、元の動画よりもコマ数が増えたりして若干味気ないものになります。  
キニナル方は「ffmpeg 使い方」でググってみてください。
ES6のPromiseを使ってsuperagentでapiを叩く

AJAXを使うときは、素の状態で使うよりもライブラリから使ったほうがいいです。現在のプロジェクトはReact.jsを使っていますが、DOM操作は必要ないので、足りないのはAJAXを利用するだけのライブラリが欲しいです。そこで、[superagent](https://github.com/visionmedia/superagent)がシンプルで目的に合致します。

ES6ではPromiseが使えます。非同期通信を使うときは、Promiseを使えばネストが深いコールバック嵐から解放された約束の地へ行けます。それではsuperagnetによるAJAXの非同期通信をES6のPromiseを使って利用してみます。

```js
import request from 'superagent';

function callApi(apiName) {
  return new Promise() {
    (resolve, reject) => {
      request.get("http://localhost/" + apiName)
        .end(
          (err, res) => {
            if (err) {
              reject(err);
            } else {
              resolve(JSON.parse(res.text);
            }
          }
        );
    }
  };
}

```

callApiはPromiseを返します。これを利用する側は、

```js
callApi("api1")
  .then(
    (obj) => {
      console.debug(obj);
    }
  ).catch(
    (err) => { console.error(err); }
  );
```

です。連続して呼び出す場合は、

```js
callApi("api1")
  .then(
    (obj) => {
      console.debug(obj);
      return callApi("api2");
    }
  ).then(
    (obj) => {
      console.log("api2");
      console.debug(obj);
    }
  ).catch(
    (err) => { console.error(err); }
  );
```

となります。Promiseを使わないと、

```js
callApi("api1",
  (obj) => {
    callApi("api2",
      (obj) => {
        console.info("api2");
        console.debug(obj);
      },
      (err) => {
        console.error(err);
      }
    );
   },
  (err) => {
    console.error(err);
  }
);
```

となります。コードの読みやすさは歴然と違いますよね。特にネストが深くなると、悪夢です。
unity > High or Low ゲーム > UI>Textの書き換え / 整数の乱数 / Button選択処理

```txt:動作確認
Unity 5.1.1-f on Mac OS X 10.8.5
```

##準備
1. UI > Button を作成し、ButtonHighという名前にする
2. ButtonHighに下記のMyButton.cs を関連付ける。
3. ButtonHigh > Button (Script) > On Click()にて ButtonHighを選択する。Functionは MyButton.ButtonClick を選択する。
4. UI > Text を作成し、TextResultという名前にする。Text (Script)のParagraph > Vertical Overflowを Overflowにして、テキストが長い時に表示が切れないようにする。
5. ButtonHighをDuplicateして ButtonLowという名前にする。TextをLowにする。

##code
```csharp:MyButton.cs
using UnityEngine;
using System.Collections;
using UnityEngine.UI; // for Text

public class MyButton : MonoBehaviour {
	public Text ResultText;
	public const int kThreshold = 6; // high or low compared with this

	void Judge(bool isHigh) {
		int num = Random.Range (0, 13); // integer random number
		string msg = "Number: " + num.ToString ();

		bool res;
		if (isHigh) {
			msg = msg + ">=" + kThreshold.ToString();
			res = (num >= kThreshold);
		} else {
			msg = msg + "< " + kThreshold.ToString();
			res = (num < kThreshold);
		}

		if (res) {
			msg = msg + ", You Win!";
		} else {
			msg = msg + ", You Lost!";
		}
		ResultText.text = msg;
	}

	public void ButtonClick() {
		switch (transform.name) {
		case "ButtonHigh":
			Judge(/* isHigh=*/ true);
			break;
		case "ButtonLow":
			Judge(/* isHigh=*/ false);
			break;
		default:
			break;
		}
	}
}
```

##実行の様子
![Scene_unity_-_game150813_highOrLow_-_PC__Mac___Linux_Standalone__Personal_.jpg](https://qiita-image-store.s3.amazonaws.com/0/32870/e847f33c-4f96-4802-a94f-8ed8f3204fe4.jpeg)
2進数, 10進数, 16進数を irb でわかりやすく表示する


最近主に 0~255 の 2進数 <-> 16進数を取り扱うことが増えたんだけど、頭の中ですぐ変換できないので、 irb 等でわかりやすく表示する。

適当に ~/.irbrc や ~/.pryrc に

```ruby
def ibx(i)
  [format("%#010b", i), i.to_s, format("%#04x", i)]
end
```

で定義しておいてあとは数値を引数に実行する

```
irb(main):001:0> ibx 0x3e
=> ["0b00111110", "62", "0x3e"]
irb(main):002:0> ibx 0b10111110
=> ["0b10111110", "190", "0xbe"]
irb(main):003:0> ibx 41
=> ["0b00101001", "41", "0x29"]
```
[Perl,CPAN]CentOS6.6(x64)にLWPをインストールする手順

●環境
ホストOS　Windows7 64bit
ゲストOS　CentOS 6.6 x64
ハイパバイザ　VMware Player

●手順
root になる。

    su

Perlが入っていることを確認する。

    perl -v

→ This is perl, v5.10.1 (*) built for x86_64-linux-thread-multi

下記を実行する。

    rpm -Uvh http://fr2.rpmfind.net/linux/dag/redhat/el5/en/x86_64/rpmforge/RPMS/rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm
    yum -y install libyaml-devel
    yum -y install *YAML*
    yum install cpan
    yum -y install perl-libwww-perl
    perl -MCPAN -e shell
    cpan> o conf prerequisites_policy follow
    cpan> o conf commit
    cpan> upgrade
    cpan> install YAML
    cpan> install Bundle::LWP
    cpan> install HTML::Tree
    cpan> install HTML::Format
    cpan> exit

    perl -MLWP -le "print(LWP->VERSION)"

→ バージョンが表示されたらインストールOK。
CythonでC++のstructを読む場合



C++のstrcutはclassの特殊な定義なのでcdef structではなく、cdef cppclassを使った方が良い。clangだと継承とか何もしてないstructを読むときにcdef structを使うと動かない(2015年8月現在)。

cythonのドキュメントにどこにも書いてなくて、継承したstructを読み込む場合なんかも分からなくて困る。

## 参考

- http://stackoverflow.com/questions/9781572/c-struct-inheritance-in-cython


## cdef structしちゃう場合

```hoge.h
typedef struct {
    int moke;
    double fuga;
} HogeStruct;
```


```hoge.pxd
cdef extern from "hoge.h" nogil:
    cdef struct HogeStruct:
        int fuga
        double piyo

```

```hoge.pyx

def foo():
    cdef HogeStruct bar


```

コレでやると、pyx内のstruct HogeStruct barで、```elaborated type refers to a typedef```が出てしまう。```struct HogeStruct  __pyx_v_bar;```というのが生成されるのでstructそのものの定義文と衝突する。


## cppclassを使う

特に単純にstructじゃなくてcppclassを使えば良い

```hoge.h
typedef struct {
    int moke;
    double fuga;
} HogeStruct;
```


```hoge.pxd
cdef extern from "hoge.h" nogil:
    cdef cppclass HogeStruct:
        int fuga
        double piyo

```

```hoge.pyx

def foo():
    cdef HogeStruct bar

```

それだけ。
Rubyでファイルスコープのメソッドを作る

# Rubyの問題点

## カジュアルにファイルスコープのメソッドが作れない

CやGoでは簡単にそのファイル内でのみ使用可能な関数を書くことができますが、

Rubyの場合、たとえprivateメソッドを書いたとしても、別のファイルから`__send__`等で呼ぶことができてしまいます。

これでは全てのメソッドがどのファイルからorどのライブラリから呼ばれているか、分かりません。

そのため、ちょっと処理をまとめて読みやすくしたいだけなのに公開されるAPIが増えちゃって他のライブラリに依存されちゃってという問題が起こり得ます。(僕は経験ないけど)

そんなこんなでそのファイルだけで使えるメソッドがあれば、修正範囲が限られているので、メンテナの気を楽にすることが期待できそうです。

# ご提案

ちょこっと調べたところ、Rubyでのファイルスコープが使えるのは2つあるようです。

- 一時変数
- Refinements

## 一時変数

```rb:lib.rb
sum = proc{|i, j| i + j }
p sum.call(3,5) #=> 8
```

```rb:main.rb
require './lib'
p sum.call(3,5) #=> NameError
```

簡易的にはこれでよさそうです。

しかしながらclass構造だととたんに破綻します。

```rb:lib.rb
sum = proc{|i, j| i + j }
class OpenClass
  def foo
    sum(3, 5) #=> NameError
  end
end
```

違う、そうじゃない。

## Refinements

そこでRefinementsを使ってみます。

```rb:lib.rb
class OpenClass
  module InternalMethods
    refine OpenClass do
      def bar
        puts "bar"
      end
    end
  end
  using InternalMethods

  def foo
    bar
  end
end
```

```rb:main.rb
require './lib'
OpenClass.new.foo #=> "bar"
OpenClass.new.bar #=> NameError
```

ちょっと書き方がめんどくさいですが、`lib.rb`だけで(本当はclass〜endのなかで)有効な`OpenClass#bar`というメソッドを作ることができました。

さらに、どのclassでも使えるような関数`sum`もこんな風に定義可能です。

```rb:lib.rb
module InternalMethods
  refine Object do
    def sum(i, j)
      i + j
    end
  end
end
using InternalMethods

class OpenClass
  def foo
    sum(2, 3)
  end
end
p sum(3, 5) #=> 8
```

```rb:main.rb
require './lib'

p OpenClass.new.foo #=> 5
p sum(3, 5) #=> NameError
```

これで`lib.rb`内では`sum`が外で使われることがないことが保証されているので、リファクタリング等が簡単になりそうです。

デメリットは、`InternalMethods`みたいなmoduleができてしまう、テストが書きにくい、ぐらいでしょうか。

# まとめ

いまいち使いドコロがないRefinementsのカジュアルな使い道として、ファイルスコープメソッドを作ってみるのもいいかもしれません。
Parallelsに無償アップグレード版のWindows10をクリーンインストールする手順

色々試した結果、以下手順に落ち着いたのでメモ。


# 手順
## １．Windows7/8を入れる

Windows7/8のISOを仮想CDドライブにアタッチしてWindows7/8のプロダクトキーを入れて普通にセットアップする。
※ Windows7/8でWindowsUpdateする必要はない。後で消すので時間とディスク容量の無駄

## ２．Windows7/8のライセンス認証を行う

「Windows ライセンス認証」を開いてライセンス認証を行う。必要があればインターネットや電話によるライセンス認証を行う。まぁとにかく普通にライセンス認証を完了させる。
これにより現在のParallelsの仮想ハードウェア構成の情報がマイクロソフトに登録される。

※ Windows7/8でWindowsUpdateする必要はない。とにかくハードウェア情報がライセンス認証と紐付きさえすれば良い。

## ３．Windows10をクリーンインストールする

1. 一度Windows7/8をシャットダウンしてParallelsの構成を変更する
    - ハードウェア＞ブート順序でCD/DVDをHDDより上に持ってくる
    - ハードウェア＞CD/DVDにWindows10のISOをアタッチする（[Windows10 ISO ダウンロード](http://www.microsoft.com/ja-jp/software-download/windows10ISO)）
2. Windows7/8を起動するとCDブートになるので適当なキーを押してWindows10のセットアップを開始する
    - アップグレードじゃなく新規インストールを選択する
    - インストールするパーティション選択画面が出るが既存のWindows7/8のパーティションは不要なので全部削除して空になったパーティションに新規で入れる
    - セットアップ前とセットアップ中に計2回プロダクトキーの入力を促される画面が出るが「次へ」や「後で行う」 を選んで先へ進めればOK
3. 無事インストールが完了したら「スタートメニュー＞設定＞更新とセキュリティ＞ライセンス認証」でライセンス認証されていることが確認できる
4. 一度Windows10をシャットダウンして構成を変更する
    - 一般＞の一番上にOSの種類(Windows7とか)が出てるとこをクリック＞Windows10に変更
    - ハードウェア＞ブート順序をHDDが一番最初に来るように戻す
    - ハードウェア＞CD/DVDからWindows10のISOを抜いておく
5. 最後に「MacのParallelsのメニュー＞処理＞Parallels Toolの再インストール」でParallelsToolを入れる。

以上で、全て完了です。

手際よくやれば1時間位で終わります。この時点でParallelsが食っているディスク容量は僕の環境では11GBくらいになってました。
unity > uGUI > Text > Textに文字を書く

```txt:動作確認
Unity 5.1.1-f on Mac OS X 10.8.5
```

UI > Textに文字列を書くには。

1. using UnityEngine.UI; を追加
2. public Text ResultText; にて ResultTextにUI > Textを関連づける。
3. ResultText.text = "this is result"; のようにする。

```csharp
using UnityEngine;
using System.Collections;
using UnityEngine.UI; // for Text

public class MyButton : MonoBehaviour {
	public Text ResultText;

	void Judge(bool isHigh) {
		int num = Random.Range (0, 13); // integer random number
		Debug.Log (num.ToString ());

		if (isHigh) {
			ResultText.text = "High";
		} else {
			ResultText.text = "Low";
		}
	}

	public void ButtonClick() {
		switch (transform.name) {
		case "ButtonHigh":
			Judge(/* isHigh=*/ true);
			break;
		case "ButtonLow":
			Judge(/* isHigh=*/ false);
			break;
		default:
			break;
		}
	}
}
```
Scala:複数Mainクラスから実行するものを指定したい

Mainクラスが複数あると、sbtで`run`すると候補が出てきて、その中から数字で選択しないといけません…。

```
> run
[warn] Multiple main classes detected.  Run 'show discoveredMainClasses' to see the list

Multiple main classes detected, select one to run:

 [1] playground.actor.example1.SimpleExample
 [2] playground.actor.example2.ChatModelExample
 [3] playground.actor.example3.ActorLoggingExample
 [4] playground.basic.HelloWorld
```

これが地味にめんどくさいです。

そんなときは`runMain`を使いましょう。クラス名の補完も効いて便利です。

```
> runMain playground.basic.HelloWorld
[info] Running playground.basic.HelloWorld
Hello World!!!
[success] Total time: 0 s, completed 2015/08/13 12:28:31
```
Lumenを使うときの最低限のメモ


Laravel利用者がLumenを利用するときのメモ。


###インストール

インストーラの例が多いけど、composer派なので。composerでcreate-projectする方法。

```php
composer create-project laravel/lumen test
```

###.envを使う

.envを使えるようにする。

* .env.exampleをリネームして使う
* bootstrap/app.phpのDotenv::load()をコメントイン

###Facadeを利用する

* bootstrap/app.phpのapp->withFacades()をコメントイン。

>但し、Route::とかは使えないみたい。
なんでRouteは無理して他のマイクロフレームワーク風にするんだろうか。
DBとかは\DB::で使える。
Facade無しでも$app('db')->select()とか書ける。

###Eloquentを利用する

* bootstrap/app.phpのapp->withEloquent()をコメントイン。

artisan make:modelは使えない。
ひな形としては、

```php
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Company extends Model
{
    public $timestamps = false;
}

```
という感じだろうか。ここではCompayとなっていますが、環境次第で。

###bladeを利用する

ネットの過去記事にはresourcesフォルダが無いとの記述を見つけましたが、（今は）あるみたい。
なので、Laravelと基本同じ。bladeも普通に使える。

###Controllerを使う

artisanコマンドは無い。必要に応じて手動で作る。ひな形としては下記のような感じでしょうか。

```php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;

class HogeController extends Controller
{
	public function index()
	{
		//$companies = \DB::table('companies')->get();
		//return view('index')->with('companies',$companies);
		return "hoge";
	}
}
```

###考察

Route::が使えないこと以外は、ほぼLaravelと同じ書き方ができる。

###メモ

mysqlのsocket関連のエラーは、ホスト名をIPアドレスにすれば回避できる。
MacOSXからRaspberry Piにパスワード無しで接続する

# MacOSXからRaspberry Piにパスワード無しで接続する

[Raspbianの初回起動時にやったこと](http://qiita.com/or2/items/00a2f21d83c7e70e9a97)の続き

## MacOSX側(Terminal)での作業
### 鍵を生成する
`ssh-keygen -t rsa`

```lang:result
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/admin/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /Users/admin/.ssh/id_rsa.
Your public key has been saved in /Users/admin/.ssh/id_rsa.pub.
The key fingerprint is:
--:--:--:--:--:--:--:--:--:--:--:--:--:--:--:-- admin@MACBOOKPRO.local
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|                 |
|                 |
|                 |
|                 |
|                 |
|                 |
|                 |
|                 |
+-----------------+
```

### 生成されたか確認する
`ls ~/.ssh`

```lang:result
id_rsa		id_rsa.pub	known_hosts
```
* id_rsa：生成された秘密鍵
* id_rsa.pub：生成された公開鍵

### Raspberry Piに公開鍵を転送する
`scp .ssh/id_rsa.pub pi@raspberrypi.local:`

```lang:result
pi@raspberrypi.local's password: 
id_rsa.pub                                                                                                                                 100%  400     0.4KB/s   00:00    
```

## Raspberry Piでの作業
###.sshディレクトリの有無を確認する
`ls ~/.ssh`

もし.sshディレクトリが無ければ作成する
`mkdir ~/.ssh`
`chmod 700 ~/.ssh`

### MacOSXから転送した公開鍵を認証鍵として移動する
`mv ~/id_rsa.pub ~/.ssh/authorized_keys`
`chmod 600 ~/.ssh/authorized_keys`

※複数の認証鍵を登録するときは
`cat ~/id_rsa.pub >> ~/.ssh/authorized_keys`
として、authorized_keysに追記していく

### 公開鍵認証方式が使えるように設定を変更する
`sudo nano /etc/ssh/sshd_config`

```lang:/etc/ssh/sshd_config
[Before]
PermitRootLogin yes
#AuthorizedKeysFile     %h/.ssh/authorized_keys

[After]
PermitRootLogin no
AuthorizedKeysFile     %h/.ssh/authorized_keys
```
* PermitRootLogin no：rootのログインを禁止(直接関係ないがついでに設定しておく)
* AuthorizedKeysFile     %h/.ssh/authorized_keys：認証鍵の置き場所

今回は

* RSAAuthentication    yes
* PubkeyAuthentication yes

がデフォルトで有効になっていた(コメントアウトされていなかった)が、もしコメントアウトされていたらあわせて有効にする

### sshサーバを再起動して、設定を反映する
`sudo /etc/init.d/ssh restart`

## 新規に接続してみる
`ssh pi@raspberrypi.local`
パスワードが聞かれずにログインできれば完了
unity > uGUI > Button > 押したボタンにより異なる処理

```txt:動作確認
Unity 5.1.1-f on MacOS X 10.8.5
```

複数のボタンがあり、いずれかを押した時に異なる処理をしたい。

##準備
1. Create > UI > Buttonでボタンを作成する
2. Buttonの名前をButton1とする
3. 下記のMyButton.csを作成し、Button1に関連付ける
4. Button1のButton (Script)のOn Click()にて"+"を押す。Select ObjectにてButton1を選択する。Functionは MyButton.ButtonClickを選択する。

ここまでで1つのボタンを押した時にConsoleに”3.1415"が表示されるようになっている。

続いてButton2, Button3 を追加する。

1. HierarchyのButton1を選択して、右クリック->Duplicate。Button1(1)が作成される。
2. Button1(1)の名前をButton2にして、Sceneビュー内で位置をButton1の下などに移動する。Button2 > TextもButton2にするほうがわかりやすい。
3. 1,2の手順を繰り返して、Button3を作成する。


##code

```csharp:MyButton.cs
using UnityEngine;
using System.Collections;

public class MyButton : MonoBehaviour {
	public void ButtonClick() {
		switch (transform.name) {
		case "Button1":
			Debug.Log ("3.1415");
			break;
		case "Button2":
			Debug.Log("2.7181");
			break;
		case "Button3":
			Debug.Log("6.022 x 10^23");
			break;
		default:
			break;
		}
	}
}
```

##実行の様子
![Scene_unity_-_150813_uGUI_List_-_PC__Mac___Linux_Standalone__Personal_.jpg](https://qiita-image-store.s3.amazonaws.com/0/32870/16576d67-d2e5-261f-d658-d1d50d2c4173.jpeg)
[iOS Simulator] 画面サイズの変更とショートカットキーについて

Xcodeで開発して、iOSシミュレーターを使っていたらあるとき、途端に画面サイズが変更されました。
なんでだろと思ったら、不意に触りかねない...かもしれない...ショートカットキーがふられていました。

![Screen Shot 2015-08-13 at 11.49.27.png](https://qiita-image-store.s3.amazonaws.com/0/18705/f0e95658-8985-e185-72c6-d48a697dda03.png)

これ↓

![Screen Shot 2015-08-13 at 11.49.38.png](https://qiita-image-store.s3.amazonaws.com/0/18705/84c1ce39-5022-326f-86be-ac9346a3e6be.png)

気をつければ済みそうなので、特にいじろうとはしませんが、勉強になりました。


# Reference

- [shortcut key](http://wayohoo.com/xcode/all-keyboard-shortcuts-of-ios-simulator.html)
[Swift] Storyboardを使わずに画面遷移をすると、遷移先が黒画面になるときやstoryboard doesn't contain a view controller with identifier 'って言われるとき。

iOSアプリで画面遷移を行う方法はたくさんあります。storyboardでやったり、コードでやったり。

```swift:例えば
// set next VC
let nextVC: UIViewController = FooVC()
        
// set animation
nextVC.modalTransitionStyle = UIModalTransitionStyle.PartialCurl
        
// transition
self.presentViewController(nextVC, animated: true, completion: nil)  
```

```swift:navigationありのとき
let nextVC = FooVC() as UIViewController
nextVC.modalTransitionStyle = UIModalTransitionStyle.PartialCurl
navigationController?.pushViewController(nextVC, animated: true)
```

### 遷移先画面が黒くなるとき

![Screen Shot 2015-08-13 at 11.50.26.png](https://qiita-image-store.s3.amazonaws.com/0/18705/e6f38ae8-34ec-ea28-fcf1-870b5a046f6e.png)


Storyboardでのレイアウトが反映されず、真っ黒な画面が出てしまうのは、コードでの遷移の際はStoryboardを明示しないと、コードでレイアウトを作っているものとして扱われる（いちいちstoryboardをよまない）っぽい。。。

なので、以下の様にしてやるといいです。

## storyboardでレイアウトは作成していて、遷移はコードでやろうとしたときとか、Storyboardをまたがる遷移のとき。

```swift
let storyboard = UIStoryboard(name: "STORYBOARD_NAME", bundle: nil)
let nextVC = storyboard.instantiateViewControllerWithIdentifier("STORYBOARD_ID_OF_VC_CLASS") as! UIViewController
navigationController?.pushViewController(nextVC, animated: true)
```

### エラー　storyboard doesn't contain a view controller with identifier ''

ここまでして、

```rb
storyboard doesn't contain a view controller with identifier 'foo''
```

とかエラーがでたりしたら、
それはstoryboard idの設定をミスっているのかもしれないです。

特に use storyboard idにチェックを入れていないことがあったりします。

![Screen Shot 2015-08-13 at 11.27.22.png](https://qiita-image-store.s3.amazonaws.com/0/18705/d1223920-9e85-d6ea-9297-45d9642a1108.png)



# References

- [セグエを使わない画面遷移時の次画面が黒くなる](http://ja.stackoverflow.com/questions/4383/セグエを使わない画面遷移時の次画面が黒くなる)
- [Swift Docs](https://sites.google.com/a/gclue.jp/swift-docs/ni-yinki100-ios/uikit/uiviewcontrollerde-hua-mian-qian-yisuru)
Lumenって無条件に速いの？


Lumenは早い。まあ、これは間違いないと思うのですが、結局.env読み込んだり、FacadeやEloquent読み込んだりしたら、Laravelと同じじゃないの？と思い、計測してみました。

試したのは

##テスト条件

Lumen, Laravelともにローカル環境でビルトインサーバを立ち上げ、

```bash
php artisan serve
```
abコマンドで、

```bash
ab -n 100 -c 100 htpp://localhost:8000/
```

という条件で、下記の場合のでRequest per secondの値をチェックしてみました。

* 素のLumen
* .envをloadしたLumen
* .env + ->withFacadeをコメントインしたLumen
* .env + Facade + ->withEloquentをコメントインしたLumen
* 素のLaravel

マシンは、

iMac 2009（古め）
Core i5 2.6MHz
32GB RAM
SSD

まあ、SSDなので、同型番のマシンよりは少々早いかなと。

##結果

###素のLumen

>Requests per second:    107.17 [#/sec] (mean)

早いか、遅いかはわかりませんが、まあ、１つの基準値。

###.evnをloadしたLumen

>Requests per second:    103.04 [#/sec] (mean)

まあ、処理が増えた分、少し低下

###.env + ->withFacadeをコメントインしたLumen

>Requests per second:    88.51 [#/sec] (mean)

結構下がりました。

###.env + Facade + ->withEloquentをコメントインしたLumen

ガクンときました。スピード重視ならそもそもquerybuilder使ったほうがいいのかも。

>Requests per second:    53.20 [#/sec] (mean)

###素のLaravel

>Requests per second:    15.18 [#/sec] (mean)

遅っ！。まあ、Lumenが早いということで。。。

##まとめ
まあ、突っ込みどころは多いですが、相対的には一定の参考値は得られたかなと。

開発の生産性に大きく影響する.env, Facade, Eloquentを読み込んだ場合でも、速度は低下するとはいえ、Laravelの3倍以上早い（3倍のトラフィックをこなせる）ので、Lumenを利用する意味はあるかなと。

今度はもっと実用的なコードでテストしてみたいと思います。

##参考値（追記）

その後、LumenでDBアクセスして、bladeで出力するサンプルを書いてみました。その結果は、

###Lumen + QueryBuilder

>Requests per second:    29.41 [#/sec] (mean)

少なくとも素のLaravelより早い。

###Lumen + Eloquent

>Requests per second:    25.23 [#/sec] (mean)

QueryBuilderに比べれば落ちるが、素のLaravelよりは早い。

###巣のHello World

素のPHPのHello Worldを試してみた。

>Requests per second:    11664.53 [#/sec] (mean)

うーん。1万以上。ここまで違うなら普通のAPI作るならオールドスタイルで書くのがいいのかな。
Gitについて


# 初期設定
```bash
$ git config --global user.name "skyzhao"
$ git config --global user.email "skyzhao@example.com"
# 日本語文字化け対応
$ git config --global core.quotepath false
```

# Git基本
## ポジトリ作成
```bash
#新規作成
$ git init
#既存クローン
$ git clone git_url
```
## ファイル操作
```bash
# ファイルの登録
$ git add .
$ git add fileName
$ git commit -m "comment 1 row " -m "comment2 2 row"
# ファイルの削除
* git rm <削除したいファイル>
* git rm -r <削除したいディレクトリ>
# ファイルの名前変更
* git mv fileName1 fileName2
# 変更を取り消す
* git reset --hard HEAD
```

## 無視ファイルの設定
```bash
$ touch .gitignore
$ vi .gitignore
# 無視したいフォルダ、ファイルの名前、パターンを登録
# 保存
```
## branch
```bash
# list branch
$ git branch
# add branch
$ git branch <newBranch>
# remove branch
$ git branch -d <branchName>
```

# その他
* git status
* git log
* git show <ログID前6位？>
* git config --global core.editor <エディタのパス>
【FileMaker】修正履歴を残す

これもまた、よくある事例です。
「いつどこを修正したか」の履歴を残しておきたい、というやつです。

やりたいことは、こんなこと。
![スクリーンショット 2015-08-13 11.02.43.png](https://qiita-image-store.s3.amazonaws.com/0/60538/ee0d5b45-f414-108f-e7c9-72c40dbf5a4f.png)
ポータルツールで更新履歴を同じ画面に出しています。
履歴は表に出なくてもいいけど、とにかく、「いつどこを修正したか」が残っていればOK。
複数人での運用だったら、ここに「だれが」が入ってもいいですよね。

では。

更新履歴のテーブルを作成。
![スクリーンショット 2015-08-12 11.09.55.png](https://qiita-image-store.s3.amazonaws.com/0/60538/43e7ab83-320c-3cdd-6a2d-cb91b642bcb4.png)
更新履歴idの連番は、単にデータの重複をなくすためなので、余計っちゃ余計なので、更新日と更新時間（もしくはタイムスタンプ型のフィールド）を複合主キーにしてもいいかも。

リレーションは、レイアウトidでつないでます。
![スクリーンショット 2015-08-12 11.10.05.png](https://qiita-image-store.s3.amazonaws.com/0/60538/8d963f86-60b1-0628-ebfa-1c681af44e6d.png)


レイアウトは自動保存ではなく、ボタンを押したタイミングで行うようにレイアウト仕様を設定。
![スクリーンショット 2015-08-12 10.20.50.png](https://qiita-image-store.s3.amazonaws.com/0/60538/c8825c21-d988-1beb-255c-21fe6ca4bcfe.png)
まぁ、この辺はお客さんの好みですかね。

プラス、修正前のデータを画面が表示されたタイミングであらかじめ保存しておきます。
![スクリーンショット 2015-08-13 11.10.25.png](https://qiita-image-store.s3.amazonaws.com/0/60538/858263dc-3aca-bf71-1f0d-8df742a1dff1.png)

中身はこんな感じで、グローバル変数にそれぞれの項目を保存しています。
![スクリーンショット 2015-08-17 11.58.43.png](https://qiita-image-store.s3.amazonaws.com/0/60538/0b4f60ea-90e3-446b-f3df-53d9d333168b.png)

わざわざフィールドを作成するのもなんなのでグローバル変数に入れておいたけど、この辺はこれがベストなのかなーといつも考えます。。。

レイアウトの「更新」ボタンを押したときに、修正した内容を保存して、履歴を残しています。
![スクリーンショット 2015-08-13 10.59.52.png](https://qiita-image-store.s3.amazonaws.com/0/60538/46a6a42e-057e-6a2f-0060-fcf649a1ec4f.png)
また、同じ画面にとどまって数回更新ボタンを押した際にも履歴が残るように、修正した内容をグローバル変数に保存してます。

改善するならば、履歴のテキストを作る処理（変数に編集・セット）が冗長なので、サブスクリプト化すればすっきりするかな。

では、また！
IntelliJのES6のimport文のタグジャンプができるようになった。( IntelliJ IDEA-EAP142.3926.4 )

今日、IntelliJをアップデート（IntelliJ IDEA-EAP142.3926.4）するとにアップするとES6のinport文を使ったタグジャンプができるようになった。

```
import XXXX from 'xxxxx';
```

とか

```
import { XXXX, YYYYY } from 'xxxxx';
```

とか

```
import * as types from '../xxxxx';
```


npmインストールしたものはなぜか駄目

```
import { createStore, applyMiddleware, combineReducers } from 'redux';
```
Juniper-SSG5_FirmwareUpdate(ScreenOS)

#目的
* SSG5のFirmwareをBackup/Updateする

#方法
* TFTPサーバを使用する[構築方法](http://qiita.com/digitalpeak/items/99c98032b6e4b8a74cb1)

#イメージ
![ssg5_firmware_update.jpg](https://qiita-image-store.s3.amazonaws.com/0/58788/5a292e7b-4ad3-6b79-e024-b2bbe14c748b.jpeg)
#環境
* Product Name: SSG5-ISDN
* Amazon Linux AMI release 2015.03
* tftp-server.x86_64 0:0.49-7.7.amzn1

#実行
1.[juniper.net](https://www.juniper.net/support/downloads/?p=ssg5#sw)から最新のFirmwareをダウンロードする。
2.ローカルからTFTPサーバの公開DIRにFirmwareをアップロードする。
TFTP [-i] host [GET | PUT] source [destination]

```
c:\Users\****>tftp -i ***.***.***.*** put c:\Users\****\juniper\firmware\ssg5ssg20.6.3.0r19.0
転送を正常に完了しました: 118 秒間に 13384482 バイト、113427 バイト/秒
```
3.ssg5へログインし、コンソールタイムアウトを無効化
`ssg5-isdn-> set console timeout 0`

4.バックアップ
`ssg5-isdn->save software from flash to tftp <tftpサーバIPアドレス> ssg5ssg20.6.0.0r7.0`

5.アップデート
`ssg5-isdn->save software from tftp <tftpサーバIPアドレス> ssg5ssg20.6.3.0r19.0 to flash`

6.設定反映
`ssg5-isdn->reset`

7.設定反映の確認

```
ssg5-isdn-> get sys
Software Version: 6.3.0r19.0
File Name: ssg5ssg20.6.3.0r19.0
```