OmniAICreator/Qiita-1.07M huggingface dataset:
スクリプトでUnityのStandardシェーダーのRendering Modeを変える

メモ。

[ネタ元](http://forum.unity3d.com/threads/standard-material-shader-ignoring-setfloat-property-_mode.344557/#post-2229980)

ネタ元をコピペして、こんなクラスを作って使ってる。

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

public class BlendModeUtils : MonoBehaviour
{

    public enum Mode
    {
        Opaque,
        Cutout,
        Fade,
        Transparent,
    }


    public static void SetBlendMode(Material material, Mode blendMode)
    {
        switch (blendMode)
        {
            case Mode.Opaque:
                material.SetOverrideTag("RenderType", "");
                material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);
                material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero);
                material.SetInt("_ZWrite", 1);
                material.DisableKeyword("_ALPHATEST_ON");
                material.DisableKeyword("_ALPHABLEND_ON");
                material.DisableKeyword("_ALPHAPREMULTIPLY_ON");
                material.renderQueue = -1;
                break;
            case Mode.Cutout:
                material.SetOverrideTag("RenderType", "TransparentCutout");
                material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);
                material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero);
                material.SetInt("_ZWrite", 1);
                material.EnableKeyword("_ALPHATEST_ON");
                material.DisableKeyword("_ALPHABLEND_ON");
                material.DisableKeyword("_ALPHAPREMULTIPLY_ON");
                material.renderQueue = 2450;
                break;
            case Mode.Fade:
                material.SetOverrideTag("RenderType", "Transparent");
                material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha);
                material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);
                material.SetInt("_ZWrite", 0);
                material.DisableKeyword("_ALPHATEST_ON");
                material.EnableKeyword("_ALPHABLEND_ON");
                material.DisableKeyword("_ALPHAPREMULTIPLY_ON");
                material.renderQueue = 3000;
                break;
            case Mode.Transparent:
                material.SetOverrideTag("RenderType", "Transparent");
                material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);
                material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);
                material.SetInt("_ZWrite", 0);
                material.DisableKeyword("_ALPHATEST_ON");
                material.DisableKeyword("_ALPHABLEND_ON");
                material.EnableKeyword("_ALPHAPREMULTIPLY_ON");
                material.renderQueue = 3000;
                break;
        }
    }

}
```
[入門] Web技術とは何か #2

> 何回かにわけてWeb技術についての復習をします

# 今回は歴史の授業 （Webはどのように発展したか？）

- **#2のアジェンダ**
  - そもそもインターネットとは何か？
  - 普及したきっかけ
  - ここまでの整理とまとめ
  - HTMLをください！(#３の予告)
  
##　**そもそもインターネットは何か？**
「世界中のコンピュータを相互に接続し、通信できるようにしたネットワーク網」
ex )
`イメージは電話じゃ`
「電話というものはじゃの〜、世界中に電話網が張り巡らされていて、
　電話番号さえわかれば世界中の人に電話をかけ話をすることができるんやで」

- これはもちろん、世界中の電話が電話線でつながっているから
- 電話では、基本的にわしたちが話す音声信号しかやりとりできないが
- インターネットではデジタル化されたあらゆる情報をやりとりできるんやで
  - 電子メール、Webサイト、画像や映像の送受信などコンピュータ上で扱える様々な情報がおけまる水産!!

column )
＊最近では「惑星間インターネット」研究も進んでいて、
　将来の子供たちが月や火星などに住む頃には
　惑星間インターネットが当たり前のように使われるのである。末恐ろしい。

##　**普及のきっかけ**
今から約40年前の1969年にアメリカ国防総省が研究のために構築したネットワークが現在のインターネットの原型

- しかし、研究内容が地味でコストも高かったためそれほど普及しなかった。残念。

story )

`episode 0` **www**と**A-Mosaic**

- この２つの登場により状況が変化した
- www =「World Wide Web」
- NCSA-Mosaic = モザイク

`episode 1` wwwについて
wwwが提案されたのは1989年のことであった。

生まれたのは意外なことに素粒子物理学の研究
実験成果を全世界で共有するためのシステムがめっちゃ必要になり
ティム・バーナーズ＝リー博士が、発案／開発したのが　**www**であった。

**エロ**・バーナーズ＝リー博士は

-  研究成果を「HTML」と呼ばれる統一された形式で表現することを考えたんや
-  画期的だったのは「Hyper Text」と呼ばれる仕組みで
- ハイパーテキストでは、文章間の参照が「Hyper Link」という、コンピューターが理解できる形式になっていて
瞬時に参照先のリンクに飛べるってこっちゃ。
- この技術の登場により、テキストデータをネットワーク経由で簡単に閲覧できるようになりましたんや。

column )
*ネットワーク上でリンクされたハイパーリンクのつながりが、あたかも蜘蛛の巣のように見えることから
 World-Wide-Web(世界に広がる蜘蛛の巣)となずけられたのでござる。


`episode 2` NCSA-Mosaicについて
wwwは画期的やったんやけど、テキストオンリーの表現でしたとさ。
現在のように文字と画像を混在させて表示できるようにしたのが、イリノイ工科大学のマーク・アンドリーセン中心に開発さてた**Mosaic**という**ブラウザ**だった。

- Mosaicが開発され、無料で誰でも利用出来るように公開されたおかげで、wwwの利用は大きく広がりを見せたのであーる。
- テキストだけでなく、豊かな表現が可能になったことで一般に近い人々の興味を惹くようになったのでござる。
- HTMLはプログラミングの知識がなくても比較的簡単に記述できるから様々な人が情報をインターネット上に公開するようになったんやで
- Mosaicをベースとして改良が加えられ、発展していったのが後のIEやFIrefox

##　**ここまでの整理**

- wwwやモザイク♡(きゃー >< )の発明により、インターネット上には大量の情報が公開されるようになった
- そして、その要となっているのがWebサーバ

### WebクライエントとWebサーバの違い

Webクライエント：閲覧：リクエスト：IE,firefox,Safari,Chrome
Webサーバ：公開：レスポンス：Apache、Nginx、

##　**HTMLをください！**

クライエントがサーバ様に向かってHTMLくれ！と要求する。
ここで疑問が。。。

**どこに？**

次回、#3はここからいこう！

さらばじゃ！！！！！！！！
Iotラジオ　その６

#概要
受信プログラムは、直交復調のアルゴリズム。
R、puredata、pythonで実験した。
実際には、javascriptで書いて、jsdoに置いた。
#直交復調
信号に、sin波とcos波を乗算して、ローパスフィルターを通して、自乗の和の平方根をとる。
![iq.JPG](https://qiita-image-store.s3.amazonaws.com/0/18104/5bc1bbbd-7962-41a4-ecb8-ae506643d667.jpeg)

#写真
上から、ソース波形、変調波形、復調波形。
![](https://qiita-image-store.s3.amazonaws.com/0/18104/770f2e8e-448a-4ae7-0b5e-1418678738fd.jpeg)
#実験
R
[R](http://qiita.com/ohisama@github/items/b3baca758e2dd0258692)
puredata
[puredata](http://qiita.com/ohisama@github/items/ba73362cb085b597003f)
python
[python](http://qiita.com/ohisama@github/items/21d6a8bf93b39595f8c7)
#サンプルコード
sin波、cos波は、５０００ｈｚ。
ローパスフィルターは、１５００ｈｚ。
サンプリング周波数は、４８０００。
ゲインは、５
DC補正は、－１．０

```
var ws = new WebSocket('ws://ohijs0.paas.jp-e1.cloudn-service.com/sdr');
var ac = new (window.AudioContext || window.webkitAudioContext);
function lpf(input, samplerate, freq) {
    var q = 1.0;
    var omega = 2.0 * 3.14159265 * freq / samplerate;
    var alpha = Math.sin(omega) / (2.0 * q);
    var a0 = 1.0 + alpha;
    var a1 = -2.0 * Math.cos(omega);
    var a2 = 1.0 - alpha;
    var b0 = (1.0 - Math.cos(omega)) / 2.0;
    var b1 = 1.0 - Math.cos(omega);
    var b2 = (1.0 - Math.cos(omega)) / 2.0;
    var size = input.length;
    var output = new Float32Array(size);    
    var in1 = 0;
    var in2 = 0;
    var out1 = 0;
    var out2 = 0;
    for (var i = 0; i < size; i++)
    {
    	output[i] = b0 / a0 * input[i] + b1 / a0 * in1 + b2 / a0 * in2 - a1 / a0 * out1 - a2 / a0 * out2;
     	in2 = in1;
     	in1 = input[i];
    	out2 = out1;
    	out1 = output[i];
    }
    return output;
}
var initial_delay_sec = 0;
var scheduled_time = 0;
function playAudioStream(vam) {
    var audio_buf = ac.createBuffer(1, vam.length, ac.sampleRate);
    var audio_src = ac.createBufferSource();
    var current_time = ac.currentTime;
    var t;
    var I = new Float32Array(vam.length);
    var Q = new Float32Array(vam.length);
    var I2;
    var Q2;
    var o = new Float32Array(vam.length);
    for (t = 0; t < vam.length; t++)
    {
        I[t] = vam[t] * Math.cos(t / 48000 * 2 * Math.PI * 5000);
        Q[t] = vam[t] * Math.sin(t / 48000 * 2 * Math.PI * 5000);
    }
    I2 = lpf(I, 48000, 1500);
    Q2 = lpf(Q, 48000, 1500);
    for (t = 0; t < vam.length; t++)
    {
        o[t] = Math.sqrt(I2[t] * I2[t] + Q2[t] * Q2[t]) * 5 - 1.0;
    }
    audio_buf.getChannelData(0).set(o);
    audio_src.buffer = audio_buf;
    audio_src.connect(ac.destination);
    if (current_time < scheduled_time) 
    {
        audio_src.start(scheduled_time);
        scheduled_time += audio_buf.duration;
    }
    else
    {
        audio_src.start(current_time);
        scheduled_time = current_time + audio_buf.duration + initial_delay_sec;
    }    
}
ws.binaryType = 'arraybuffer';
ws.onopen = function() {
};
ws.onerror = function(e) {
    alert(String(e));
};
ws.onmessage = function(evt) {
    if (evt.data.constructor !== ArrayBuffer) throw 'expecting ArrayBuffer';
    playAudioStream(new Float32Array(evt.data));
};

```
[JavaScript]オブジェクトとプロパティを扱う

##オブジェクトと配列でツリー構造や多次元配列を実現
`Object()`, `Array()`, `Function()` オブジェクトはほかのオブジェクトを格納することもできる。以下のようにオブジェクトツリーを生成できる。

```js
var object1 = {
  object1_1: {
    object1_1_1: {foo: 'bar'},
    object1_1_2: {}
  },
  object1_2: {
    object1_2_1: {},
    object1_2_2: {}
  }
}

console.log(object1.object1_1.object1_1_1.foo);  //出力: 'bar'


// Array()オブジェクトで、オブジェクトツリーを表現する場合
var myArray = [[[]]];

//Function()を使ったカプセル化の例。中身は空である。
var myFunction = function() {

    var myFunction = function() {

        var myFunction = function() {

        };
    };
};

```

##ブラケット記法でオブジェクトのプロパティにアクセスする
プロパティを設定したりアクセスする場合、以下のようにドット記法が用いられることが多かった。

```js
var cody = new Object();

cody.living = true;
cody.age = 33;
cody.gender = 'male';

console.log(cody.age); //出力: 33
```
これをブラケット記法で記述する場合は以下のように記述。

```js
var cody = new Object();

cody['living'] = true;
cody['age'] = 33;
cody['gender'] = 'male';

console.log(cody['age']); //出力: 33
```

###ブラケット記法の強み
変数を使ってオブジェクトのプロパティ名を指定することができる

```js
var foobarObject = {property1:'a',property2:'b',property3:'c'};

for(var i = 1; i <= 3; i++){
console.log(foobarObject['property' + String(i)]);
}//出力：a b c

```

## `delete` 演算子でプロパティを消去
以下のように `delete` 演算子を使うとプロパティを消去できる。

```js
var foo = {bar: 'bar'};
delete foo.bar;
console.log(foo.bar); //出力:undefined
```

## リファレンス
開眼！JavaScript(第２章) (https://www.oreilly.co.jp/books/9784873116211/)
https接続でpushしたときのRPC failedエラーの対処法

https接続でプッシュしたときに

```:エラー
RPC failed; curl 55 Send failure: Connection was aborted
```

といった感じのエラーが出て、プッシュできなかった。その対処法をメモする。

#実行環境
・Windows 10
・SourceTree 1.9.6.1を使用
・gitlabを使用

#対処法
ココを参考にした
[https経由でgit cloneしたら「error: RPC failed; result=18, HTTP code = 200iB」的な怒られ方をした時の話](http://tadasy.hateblo.jp/entry/20130918/1379509506)


SourceTreeの画面の右上にある**ターミナル**をクリックして、コマンドラインを出す。
そして、参考リンク通りに

```:コマンド
git config --global http.postBuffer 524288000
```

を入力すれば解決した。
プログラミングはこうやって勉強しろ

# はじめに
これから勉強をはじめるという初心者やなかなかしっくりとくる勉強方法が見つからないといった人に向けてプログラミングを勉強する際の心構えのようなものを紹介していく。特に初心者の人などは独学のやり方がわからない人が多くて挫折しやすいので参考になればと思います。
# 暗記はするな
ここは多くの初心者が誤解しやすいのだが、プログラミングはテストとは違い調べながらするものであるから暗記する必要は全くなく、そもそも技術の進歩の早いこの業界では暗記したところで使えなくなるのがオチだ。そもそも量が膨大すぎて覚えることはできない。一流のエンジニアですら全く何も見ずにコーティングすることは不可能に近いのである。
# 理解をして検索できる状態にする
例えば、Rubyでたとえると配列から要素を全て取り出すメソッドとしてeachというものが用意されているが、これをeach =　配列から要素を全て取り出すと覚えるのではなく、配列というものが何なのかを理解し、Rubyには配列を取り出すメソッドがあるということが分かっていればもしeachというメソッドを忘れても「配列 要素取り出す　ruby」と検索することで目的ものを見つけることができる。
# 終わりに
筆者は現在進行形で学習中なので発見があれば随時更新していく予定です。
Iotラジオ　その５

#概要
配信プログラムは、jsfiddleに置いた。
webrtcが、jsdoで動かないため。
オーディオカードのマイク入力をwebsocketに投げる。
#写真
![](http://jsrun.it/assets/I/t/S/S/ItSSt)
#サンプルコード
```
var ws = new WebSocket("ws://ohijs0.paas.jp-e1.cloudn-service.com/pub");
ws.binaryType = "arraybuffer";
ws.onopen = function(e) {
};
ws.onerror = function(e) {
    alert("err");
    alert(e.msg); 
};
var ac = new AudioContext();
var sampleRate = ac.sampleRate;
var node = ac.createScriptProcessor(4096, 2, 2);
navigator.getMedia = (navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia);
function onStream(stream) {
    var source = ac.createMediaStreamSource(stream);
    node.onaudioprocess = function(e) {
        ws.send(new Float32Array(e.inputBuffer.getChannelData(0)));
    }
    source.connect(node);
    node.connect(ac.destination);
}
function onStreamFailed(err) {
    alert('エラー: ' + err);
}
if (navigator.getMedia) 
{
    var prop = {
        video: false,
        audio: true,
        toString: function() {
            return 'audio';
        }
    };
    navigator.getMedia(prop, onStream, onStreamFailed);
} 
else 
{
    alert('エラー: getUserMediaがサポートされていません');
}
```
[入門] Web技術とは何か #1

> 何回かにわけてWeb技術についての基礎を復習します
\#2のリンク：http://qiita.com/murphy-warugaki/items/6dc96e4759b71e79f8b9

# \#1は【Webアプリケーションとは何か？】について

- **#1のアジェンダ**
  - デスクトップアプリケーション(またはスタンドアローン型)
  - Webアプリケーション
  - それぞれの処理について

##　**デスクトップアプリケーション**
みんなが普段使っているワープロや計算ソフトなどのこと
ex )

- word
- excel

property )

- 主な処理は、手元のPC上で行われる
- 画面は、OSも機能を利用して表示される
- アプリケーションをPCへインストールする必要がある

##　**Webアプリケーション**
HPのような受動的なものではなく、ユーザーが能動的に使えるもの
ex )

- 電車の時刻検索サービス：
「出発時と目的地を入力して最適な乗り換え経路を検索する」

property )

- 主な処理は、手元のPCではなくサーバ上で行われる
- 画面は、HTMLなどで構成され、Webブラウザ上で表示される
- アプリケーションをPCへインストールする必要がない

##　**主な処理とは**
`ここで言う「主な処理」とは「計算処理」／「経路の検索」のこと。`

- これらはデスクトップアプリケーションでは、みんなの手元のPCが担当していた。
- しかし、Webアプリケーションでは「サーバ」と呼ばれるコンピューターが担当している。

###次の授業
> \#2のリンク：http://qiita.com/murphy-warugaki/items/6dc96e4759b71e79f8b9
Git の使い方 (with SourceTree)

* プロジェクトは GitHub にホスティングされているものとする

# リポジトリを作成する

![WS000039.JPG](https://qiita-image-store.s3.amazonaws.com/0/28936/e3b0230a-677f-0830-bb32-e6e55c37fb5e.jpeg)

* ブラウザで [GitHub](https://github.com/) を開き、画面右上の `+` ボタンから `New repository` をクリック

![WS000038.JPG](https://qiita-image-store.s3.amazonaws.com/0/28936/6edf820d-5c53-a6c0-02e0-950b8b64a7b6.jpeg)

* リポジトリの設定をして `Create repository` でリポジトリの新規作成

| 項目                                     | 内容 |
|:-----------------------------------------|:-------|
| Owner                                    | リポジトリの所有者となるユーザーもしくはグループ |
| Repository name                          | リポジトリの名前 |
| Description                              | リポジトリの説明（省略可） |
| Public, Private                          | リポジトリを公開するかどうか。`Public` だと誰でも見ることができ、`Private` だと指定した人しか見ることが出来ない。有料プランでないと `Private` は選択できない。社内用のソースコードなどは `Private` |
| Initialize this repository with a README | `README.md` というファイル作成してリポジトリを処理化するかどうか。チェックを入れておくと自動で `master` ブランチが生成され `README.md` ファイルが保存される。チェックを入れない場合ブランチ数 0 このリポジトリになる。 |
| Add .gitignore None                      | 一般的な `.gitignore` を追加するかどうか。 |
| Add a license None                       | 一般的なライセンス文を追加するか。 |


# リポジトリをローカル環境に Clone する

![WS000024.JPG](https://qiita-image-store.s3.amazonaws.com/0/28936/cc2bf585-208b-3080-9980-54068a0bb168.jpeg)

* GitHub にあるリポジトリのページを開き、左上にある `Clone or download` ボタンをクリック
* `Clone with SSH` のテキストボックスの `git@` から始まる URL をコピー

![WS000025 - コピー.JPG](https://qiita-image-store.s3.amazonaws.com/0/28936/c256e672-fa30-3164-c173-d1948ac8ad6f.jpeg)

* SourceTree のツールバーの左端に有る `新規作成 / クローンを作成する` をクリック
* `リポジトリをクローン / 追加 / 作成` ダイアログの `リポジトリをクローン` タブを選択


# 更新

![WS000029.JPG](https://qiita-image-store.s3.amazonaws.com/0/28936/7555eef4-0290-101b-b09d-694aa3877f52.jpeg)

* 画面左側のブックマークを右クリックしてリポジトリのフォルダをエクスプローラーで開く
* ソースコードを書く


# Commit

![WS000034.JPG](https://qiita-image-store.s3.amazonaws.com/0/28936/0b115c7b-5b41-9648-0f1a-d319a4e99a35.jpeg)

* ツールバー左側の `コミット` をクリック
* 画面中央左側で、コミットに含めるファイルを選択
    * `Stage` で選択
    * `Unstage` で選択解除
* 画面中央下側にコミットログを書く

# Push

![WS000035 - コピー - コピー.JPG](https://qiita-image-store.s3.amazonaws.com/0/28936/4e5e658b-3df4-4a49-f392-62e5b501f424.jpeg)

* ツールバーの左側にある `プッシュ` をクリック

![WS000036.JPG](https://qiita-image-store.s3.amazonaws.com/0/28936/c7b02ea4-d6cf-74e9-1e85-7819ed770869.jpeg)

* 出てきたダイアログから条件を選択してプッシュ

| 項目               | 詳細 |
|:-------------------|:------|
| プッシュ先          | プッシュを行うリモートリポジトリを選択する |
| プッシュするブランチ | 『対象』にチェックの入ったローカルブランチはプッシュされる。リモートブランチ側にはリモートリポジトリのどのブランチにプッシュするかを選ぶ。 |
| 全てのタグをプッシュ | タグをプッシュするかどうか |
Iotラジオ　その４

#概要
サーバープログラムは、node-red。
websocketを中継する。
#写真
![](http://jsrun.it/assets/2/a/A/B/2aABQ)
#サンプルコード
```
[{"id":"d606308c.687da","type":"websocket-listener","path":"/sdr","wholemsg":"false"},{"id":"6a1c6987.bd5b28","type":"websocket-listener","path":"/pub","wholemsg":"false"},{"id":"85774ff5.90ca6","type":"websocket in","name":"","server":"6a1c6987.bd5b28","client":"","x":210,"y":229,"z":"61d62fef.19ac6","wires":[["fa8b3abb.4c3a68"]]},{"id":"f9d733f6.c3acb","type":"websocket out","name":"","server":"d606308c.687da","client":"","x":574,"y":189,"z":"61d62fef.19ac6","wires":[]},{"id":"fa8b3abb.4c3a68","type":"function","name":"delete _session","func":"delete msg._session;\nreturn msg;","outputs":1,"x":372,"y":162,"z":"61d62fef.19ac6","wires":[["f9d733f6.c3acb","10e42814.1717f8"]]},{"id":"10e42814.1717f8","type":"debug","name":"","active":true,"console":"false","complete":"false","x":570,"y":262,"z":"61d62fef.19ac6","wires":[]}]
```
スマートメーターを毎日検針

[mrubyでスマートメーター](http://qiita.com/yamori813/items/f0dfedf31b2b51e658f9)を試して以下のような事を考えつきました。

スマートメーターから拾える値にメータの値があります。メータの値は、積算電力量計測値(0xE0)と積算電力量単位(0xE1)によりわかります。

![スクリーンショット（2016-08-22 11.02.36）.png](https://qiita-image-store.s3.amazonaws.com/0/104066/b0e1f905-392c-cc79-38ae-b41e2612bfaa.png)

これが毎月入っている検針票の「指示数」になります。

![検針.png](https://qiita-image-store.s3.amazonaws.com/0/104066/c27ccd1f-27c8-5370-597b-8bec2d606ade.png)

積算電力量計測値が3000(int)で積算電力量単位が0x01あればメータ値は300.0となります。

毎日0時などにcronから起動したスクリプトで取得します。

前日が300.0で当日が310.0だったとします。

全国平均の電気代は1kWhで22円くらいという事なので

(310.0 - 300.0) x 22円 = 220円

となります。

これを毎日[メールでお知らせ](http://qiita.com/yamori813/items/0af8e50d5ca3937b49f5)するような仕組みはどうでしょうか？このような情報はなんらかのPUSHな方法で伝えるのが良い気がします。

```
Subject: 昨日の電気使用量

昨日は10.0kWhの使用で220円でした。一昨日よりも20円増えています。
```

通知であればインターネットに出さずにM2Mなメソッドでも良いのかもしれません。より正確な電力単価は契約先により変わり、また毎月違ったり計算式が複雑だったりするので電力供給会社にWebAPI提供してもらい解決するのが良いのかもしれません。

毎日の電気代がわかればクーラー使いすぎたなとか、思ったりして節約するようになるのではないでしょうか。

電気の消費は気温による変動が大きいので、前月と比べてもあまり適正ではないと思います。また東京電力の検針票には前年同月比が記載されていますが、前年とも生活形態が変わったりして、これも比較として的確ではない事もあるのではないでしょうか。このように日々の利用状況を知れるのが省エネに効果的なのではないでしょうか。

スマートメーターはソーラーパネルなどを使って売電の契約を行っている場合の数字もとれるようです。

私の自宅のスマートメータは整数5桁の小数点以下1桁なので、当日が前日より小さくなったときは100000から前日分を引いて当日分を足す事になりますが、これ決めうちで大丈夫なのかな？

これを動かすためのラズパイのようなコンピュータは数Wの消費電力なので月の電気料金は50円にもならないでしょう。しかしこれだけのために連続運転するのもなんか無駄な気がして、実際作ってみるかは検討中です。(我が家では無線ルータも使用しないときは電源を落としています)

省エネするためにより多くの電力を使ってしまうと全く意味がありません。

あと、電力自由化で「使えば使うだけお得」みたいな広告をしている会社がありますが、いかながものですかね。

節電に興味がある人と無い人、またある人には経済的な理由による人、環境問題による人の三種類があるのかと思います。無い人への啓発活動、ある人には金銭的メリットや数値で状況を伝えられる仕組みが普及していく必要があると思います。

電力供給側の思惑として、平均使用量とピーク使用量の差が少なくなるような、料金体系を提示しているように思われます。これはピークに対応するためのコストを減らすためだと思います。一般家庭においては契約アンペアを下げられれば、いろいろ複雑な仕組みを考えなくても良いような気がします。

一般家庭でピークを下げるには同時に複数の大量消費をさけるという事があるかと思います。例えば電子レンジや炊飯器を使っているときには、他の機器をできるだけ使わないとか、いつ動かしても良い機器は直列に利用していくとか考えられます。今のところ人間が意識してやっていくしかありませんが、機器同士が連携して勝手にやってくれる仕組みが作れれば良いのかなと思います。

電力供給側としては使用量が減ると売り上げも減り利益も減る訳で、会社としてはあまり節電してほしくないというのが本音かもしれません。しかしピークに関しては低く抑えてコスト削減したいはずなので、ピークを下げることにより全体の使用量も減るという流れが良いのかもしれません。
ミッキーマウスで目のトレーニング

~~~~

<!DOCTYPE HTML>
<html>
	<head>
		<title>Eye Training Micky Mouse ^^</title>
		<script id="clientEventHandlersJS" language="javascript">
<!--

function Push1(){

xx = document.myFORM.second.value;
yy = parseInt(xx);
myVal1 = Math.floor(Math.random()*900);
myVal2 = Math.floor(Math.random()*300);
document.micky.hspace = myVal1;
document.micky.vspace = myVal2;
timerID = window.setTimeout("Push1()", 1000*yy);

}




//-->
		</script>
	</head>
	<body bgcolor = "gray">

<p><a href = "http://www.skyscanner.net/news/articles/2009/11/003456-celebrate-asterixs-birthday-with-10-comics-and-cartoons-from-around-the-world.html" target = "_blank">Link Source:</a></p>
		<FORM style="Z-INDEX: 0" name="myFORM">
			<INPUT id="Button1" onclick="Push1()" value="start" type="button" name="start"> <INPUT id="Button2" onclick="clearTimeout(timerID)" value="stop" type="button" name="stop">
			<INPUT style="Z-INDEX: 0" id="Text1" size="10" name="second"> <FONT face="MS UI Gothic">
				<DIV style="WIDTH: 70px; DISPLAY: inline; HEIGHT: 15px" ms_positioning="FlowLayout">second</DIV>
				<INPUT id="Button3" value = "skyblue" onclick="document.bgColor='skyblue'" type="button">
				<INPUT id="Button4" value = "yellowgreen" onclick="document.bgColor='yellowgreen'" type="button">
				<INPUT id="Button5" value = "gray" onclick="document.bgColor='gray'" type="button">
                                <INPUT id="Button6" value = "black" onclick="document.bgColor='black'" type="button">
			<P><IMG id="IMG1" name="micky" alt="" src="http://www.onlyonehappy.com/Mickey.png">
			</P>

		</FORM>
	</body>
</html>
~~~~

ミッキーマウスが 動きます。
それで、目のトレーニング ^^
Androidでジャイロスコープが利用可能かをアプリ内で判定する

AndroidManifest.xmlに`<uses-feature android:name="android.hardware.sensor.gyroscope" android:required="true"/>`と指定しておくとGoogle Playストアの機能で勝手に非対応端末ではアプリを表示させないようにしてくれます。しかしジャイロスコープの機能がアプリの動作に必須でなければ、アプリのインストールはさせたい場合があります。

そうすると今度はアプリ内で実行時にジャイロスコープが利用可能かを判定してメッセージを出したりUIを切り替えたりしたくなるわけですが、それはこのようにして判別できます。

```java
SensorManager sensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);

if (sensor != null) {
  // ジャイロスコープが利用可能
} else {
  // ジャイロスコープは利用不可
}
```
簡単なメンテナンスページの作成

一時的にページにアクセスしてほしくない場合に使用します。一番最初に呼ばれる場所に入れて表示できないようにします。

```php
<?php

// 自分のグローバルIPを入れる
if($_SERVER["REMOTE_ADDR"] != '216.58.197.14'){
  echo 'メンテナンスの為、サービスがご利用頂けません。';
  die;
}
```
archlinux

http://www.wikihow.com/Install-Arch-Linux

http://www.muktware.io/how-to-install-kdes-plasma-5-on-arch-linux/

https://wiki.archlinux.org/index.php/KDE_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)

http://www.cs.columbia.edu/~jae/4118-LAST/arch-setup-2015-1.html

https://wiki.archlinux.org/index.php/VirtualBox

http://askubuntu.com/questions/573596/unable-to-install-guest-additions-cd-image-on-virtual-box

https://forum.kde.org/viewtopic.php?f=289&t=127281

https://bbs.archlinuxcn.org/viewtopic.php?id=381

https://www.quora.com/How-can-I-reinstall-the-boot-loader-in-Arch-Linux

http://www.linuxdeveloper.space/install-windows-after-linux/

http://askubuntu.com/questions/129058/how-to-install-windows-7-after-ubuntu-and-dual-boot

http://askubuntu.com/questions/139328/gparted-will-not-let-my-edit-and-do-changes-to-my-partitions

http://askubuntu.com/questions/607700/install-windows-7-after-ubuntu-on-gpt/607734
Iotラジオ　その３

#概要
スーパーヘテロダインの中間周波数（４５５ｋｈｚ）に合わせるため、
arduino unoで周波数カウンタを作った。
シリアルでモニタする。１１５２００ボー。
D11を使う。
#写真
![](http://jsrun.it/assets/C/D/P/1/CDP1r)
#サンプルコード
```
#include "FreqCounter.h"

unsigned long frq;
int cnt;
int pinLed = 13;
void setup()
{
	pinMode(pinLed, OUTPUT);
	Serial.begin(115200);
	Serial.println("Frequency Counter");
}
void loop()
{
	FreqCounter::f_comp = 10;
	FreqCounter::start(100);
	while (FreqCounter::f_ready == 0)
	frq = FreqCounter::f_freq / 100;
	Serial.print(cnt++);
	Serial.print("  kHz: ");
	Serial.println(frq);
	delay(20);
	digitalWrite(pinLed, !digitalRead(pinLed));
}
```
Iotラジオ　その２

#概要
ハードウェアを説明します。
チューナーから、信号を取り出します。
ノートパソコンのマイク入力に接続します。
arduinoは、発振器の周波数モニタと５Vを供給しています。
発信器は、455khzにポテンショメータで固定します。
#写真
![](http://jsrun.it/assets/C/D/P/1/CDP1r)
#回路図
部品は、IC、2個のみです。
LTC1799は、発信機モジュール。
74HC4066は、アナログスイッチです。
![](http://jsrun.it/assets/G/S/F/m/GSFmD)
#回路図２
チューナーには、SANYOのICがついていました。
９番ピンから、IF信号を取り出します。
![la1247.JPG](https://qiita-image-store.s3.amazonaws.com/0/18104/9175f4fa-84ab-28da-fca5-8bff3fa8bddf.jpeg)
Baltoでの配信を自動化してガンガンフィードバックもらう

ガンガンフィードバックもらって、より良いアプリをつくるために、Baltoを使ってアプリのテスト配信を行ってます。スクショつきで簡単にフィードバックが送れるので便利です。

**[Balto \- Feedback tool for Web iOS Android apps](https://www.balto.io/)**

ただ、毎回XcodeでArchiveして、ブラウザでbalto開いてipaアップロードするのはめんどうです。コードの規模が大きくなってくるとアーカイブに１０分以上かかって、作業中断されるのはつらい。

なので、developにマージしたら自動で配信されるようにしてみました。


# やり方
## 1. Bitriseに登録する
![image](https://qiita-image-store.s3.amazonaws.com/0/12352/cc5fdbbb-f254-8695-cd6d-cd3dff259b5a.png)
https://www.bitrise.io

※メンバー２人以内、ビルド回数月200回以下であれば無料で使えます。

bitriseの使い方は、以下のページも参考になります。

- [iOS用のCIサービスBitriseを使ってみた \- Qiita](http://qiita.com/keygx/items/ab6149476f43ec51eb5c)
- [Bitrise,fastlane,CrashlyticsでiOSアプリのテスト配布を自動化する \- LCL 開発者ブログ](http://techblog.lclco.com/entry/2016/05/09/192230)

## 2. 必要なファイルをアップロードする
- workflowのページを開いて、左側のサイドバーから Code signing & Files を選択
- provisioning profile と code signing identity をあげる

※間違ったファイルアップロードするとハマるので注意


## 3. Xcodeの設定を確認
- schemeがsharedになっていて、リポジトリにcommit&pushされていること
- projectとtargetの両方で、code signing identity と provisioning profileが正しく設定されていること

![image](https://qiita-image-store.s3.amazonaws.com/0/12352/2d6eaeba-dc8e-06f1-3896-b49f1b5cd24c.png)


## 4. Workflowを編集する
### Xcode Archive を編集
Use deprecated ipa export method? を yes に。

※ これをnoにしたまま、 Export options path を設定するのも試したが、自分の環境・設定ではうまくいきませんでした。何かミスってたのかも。。

※ Force code signing with Identity と Force code signing with Provisioning Profile を使うと、cocopaodsでインストールしたライブラリのcode signでエラーがでるため利用しませんでした。cocoapods使ってなければ、これらを利用した方が楽かもしれません。

### Deploy to Balto を Xcode Archiveのあとに追加
![image](https://qiita-image-store.s3.amazonaws.com/0/12352/315faee4-3896-1d1d-03c9-033e990b03fb.png)

```bash
#!/bin/bash
# fail if any commands fails
set -e
# debug log
set -x

# write your script here
curl -F "package=@${BITRISE_IPA_PATH}" -F "project_token=${BALTO_PROJECT_TOKEN}" -F "user_token=${BALTO_USER_TOKEN}" -F "release_note=${BITRISE_GIT_MESSAGE}" https://balto-api.herokuapp.com/api/v2/builds/upload
```

※ tokenは自分で環境変数に設定すること

※ 参考：[APIを利用してipa/apkファイルをアップロードする \- Balto JA](http://balto-ja.helpscoutdocs.com/article/58-upload-ipa-apk-via-api)


## 5. developにマージされたら自動配信
Bitriseの「Code」タブでWebhookのURLを取得し、Github/Bitbucketに設定しましょう。

defaultだとpushしたらすべてbuildがはしってしまうので、Workflow Editor の Triggers でフィルタリングする必要があります。developだけにする場合はこんな感じ。

![image](https://qiita-image-store.s3.amazonaws.com/0/12352/17290f4a-ebb6-48a2-2617-e8fa639791d9.png)

※ Should pull request ... の部分はpull-req出したタイミングでビルドしたい場合にチェックいれるっぽいです。たぶん。


## 6. build & 配信
![image](https://qiita-image-store.s3.amazonaws.com/0/12352/e456609b-9c41-79cf-2b01-2058c2297374.png)

あとはボタン押すだけ。

良い感じにログが出るので、もしうまくいかなかったらそれ見て直しましょう。


以上です！ :tada:
Amazon Lambda で1分毎の定期実行処理を行う

# はじめに

Amazon Lambda は AWS で提供されているサービスの一つで
任意の関数を実行時間に応じて課金する形で実行できるサービスです。
今後サーバレスアーキテクチャの時代がくればかなり重要な立ち位置となるサービスです。

この Amazon Lambda は実行のトリガーとして様々な要素を利用可能です。
* 明示的な呼び出し
* S3にファイルが置かれた
* SNSを受け取った
* 定期間隔(Cloud Watch Events)
などです。

今回はこの定期間隔で1分毎に Lambda を実行するお話です。

# 何が問題なの？

Cloud Watch Events に */1 * * * * って書けばいいだけじゃないの？
と思う方もいるかもしれません。
しかし、Lambda は少々癖があり、実行間隔は最低5分に設定されており、それ以下の実行間隔を指定してもバリデーションで弾かれてしまいます。

# どうするの？

結論から言うと5分毎に実行するトリガーを1分ずつずらして5個並べます。

# 手順

まずは適当に Lambda を用意します。

作成した Lambda の Events を選択します。

Add Events を選択し、Scheduled Event を選択します。

適当に名前をつけて、実行間隔に cron 
を指定します。

0-55/5 * ? * * * を指定して登録します。

1-56/5 * ? * * *
2-57/5 * ? * * *
3-58/5 * ? * * *
4-59/5 * ? * * *

を並べれば完成です。

このように1分毎に Lambda が実行されるようになりました。
Ansibleでユーザのパスワードを設定する

Ansibleでユーザの作成時、パスワードを設定する際、ハッシュ化したものを登録する必要がある。

##方法

まず対象のサーバの中で以下のスクリプトを実行する。
ハッシュによって得られる値は各サーバに依存するため、必ずユーザを作成するサーバで実行する。

```shell-session
python -c 'import crypt; print crypt.crypt("パスワード", "$1$mysalt$")'
```

得られた値を以下のように設定する。

```yaml
- name: add trans user
  become: yes
  user: name=ユーザ名 password=得られた値 state=present
```

##参考サイト
http://qiita.com/okataitai/items/ad02dbbcbe710ba56589
ubuntu16.04のlxdでlxdeを動かし日本語入力

```
lxd init
lxc launch ubuntu:16.04

lxc list
lxc exec コンテナ名 /bin/bash
```

## コンテナ内の作業

* fcitx-mozcでは日本語入力できなかった・・・。

```
apt install lxde fcitx-mozc xrdp fonts-takao

dpkg-reconfigure tzdata

locale-gen ja_JP.UTF-8
update-locale LANG=ja_JP.UTF-8
```

## ubuntuアカウントをxrdpで接続できるようにする

```
passwd ubuntu
```

## xrdp日本語キーマップ

* これをしないとUSキーマップのままだった。

```
cd /etc/xrdp
wget http://www.mail-archive.com/xrdp-devel@lists.sourceforge.net/msg00263/km-e0010411.ini
mv km-e0010411.ini km-0411.ini 
chmod 644 km-0411.ini
ln -s km-0411.ini km-e0010411.ini
ln -s km-0411.ini km-e0200411.ini
ln -s km-0411.ini km-e0210411.ini
```


```diff:/home/ubuntu/.config/lxsession/LXDE/autostart
+ @ibus-daemon -d
```

```bash:接続できることを確認
rdesktop -g 1366x960 -u ubuntu 10.0.3.66
```
SwiftでNavigation Controllerを使う


##概要
+ Navigation Controllerを始めて使う

##環境
+ Xcode：7.3
+ Swift 2.2

##使用するオブジェクト
+ Navigation Controller
+ View Contoller
+ Button

##やること
+ view Controllerで画面を作成
+ First画面→ボタン押下→Second画面へ
+ Second画面→NavigationControllerde戻る

##手順
1. プロジェクト作成
2. UIパーツを配置
2−1. ObjectLibraryからNavigationControllerとButtonを配置
2−2. SecondViewControllerという名前にする
2-3. ButtonはMyButtonとする
3. SecondViewControllerとクラスを関連付ける
3-1. クラスオブジェクトを選択
3-2. UtilityAreaの左から３番目Identity Inspectorを選択
3−3. いちばん上のクラスにSecondViewContollerを選択
4. NavigationControllerを配置
4-1. Editor→Embed in→Navigation Controllerを押下
4−2.　初期画面の前にNavigationControllerが入っているはず

##メモ
隠したい時1ha
viewDidLoad()にHidden設定をすれば🆗

```
    override func viewDidLoad() {
        super.viewDidLoad()
        self.navigationController?.setNavigationBarHidden(true,animated:false)
```
ITサービスマネージャー　H26午後2－2

#始めに
ＩＴサービスマネージャーの午後２の論文についてあれこれ書いてみようと思います
対象のシステムは[生命保険会社のシステム](http://qiita.com/triple4649/items/56d2b450f2b8b68bdfe5)をベースにしています

#問題文の解析
![ITサービスマネージャー午後2-2.png](https://qiita-image-store.s3.amazonaws.com/0/136860/895f9f9b-128f-d69f-defb-def01abbf65e.png)

#更新履歴
- 2016年8月23日
問題文の解析を更新
Virtualbox5のlubuntuで、モニタサイズを変更すると解像度も変わるようにする(分毎)

## 目的

Virtualbox5のlubuntuで、モニタサイズを変更すると解像度も変わるようにしたい。
ubuntu16.04をインストールしてみても同じく解像度が自動で変わらなかった
(まれに変わってくれることがある)。

ユーザアカウントは`vboxsf`グループに入れているし、最新のGuestAdditionsも入れている。


## 方法

`xrandr`を実行するだけで適切に解像度が変わることを発見。

```bash:crontab
# m h  dom mon dow   command
MAILTO=""
* * * * * DISPLAY=:0 xrandr
```

解決した。
30秒毎にチェックして欲しい場合はsleep入れてまた実行すればよいでしょう。
技術英語 > Standardized prefixes add [precision] to several areas of naming that tend to be [imprecise].

@ Code Complete (No. 9525 / 36077)

> Standardized prefixes add <font color=red>precision</font> to several areas of naming that tend to be <font color=red>imprecise</font>.

precision: 名詞
http://ejje.weblio.jp/content/precision

imprecise: 形容詞
http://ejje.weblio.jp/content/imprecise

imprecision: 名詞
http://ejje.weblio.jp/content/imprecision

<hr>
関連

http://qiita.com/7of9/items/6004035e053d89c50634
> the Pacific Wren hears <font color=red>as a precise sequence of sounds</font>
はじめようMySQL（第一回）

# この記事について
連載です(>_<)b
Linux(Manjaro&Ubuntu)でのSQLサーバの構築に始まりCLI/GUIクライアントの設定、加えてPython、C++APIの利用法を軽く紹介します。（てんこもりだね。）
第一回目はMySQLのインストール方法について書きます。
Manjaro、Ubunut以外の他のディストリに関してはコマンドを置き換えるだけで(pacmanとか？)行けると思います。Windows、macに関してはここでは取り扱いません。あしからず。

# MariaDBのインストールとセットアップ

## Manjaroでのインストール方法
インストールはpacmanからいけます。

```
sudo pacman -Syyu
sudo pacman -S mariadb
```

うまくインストールできたかどうかは下のコマンドで確認できます。

```
sudo sysctl mysqld # mariadbを起動
mysql -u root -p
```

このコマンドはrootユーザ(-uオプション)でパスワード認証(-p)してローカルのsqlサーバにログインすることを意味しています。
インストールがうまくいったことを確認したら、セキュリティの設定を行います。
セキュリティ関連の設定を自動的に行ってくれるスクリプトmysql_secure_installationを実行します。

```
sudo mysql_secure_installation
```

スクリプト実行中にいろいろ質問されます。とりあえずYesと答えておきましょう。

mysqldをサーバのサービスに登録します。

```
sudo sysctl enable mysqld
```

サーバを再起動してサービスが起動しているか確認しましょう。（確認は大事）
サービスが正常に起動できたかは以下のコマンドで確認できます。

```
journalctl |grep sql
```
## Debian系Linuxでのインストール（ubuntu、Linux mint、etc...）
Debian系のLinuxではレポジトリが用意されています。
用意されたレポジトリを使うにはバージョンを正しくしる必要があります。
サーバマシン上で以下のコマンドを実行します。
```
cat /etc/lsb-release
```

このコマンドはインストールされ。ているディストリのバージョンを示します。
出力の一例は以下に示します。

```
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.1 LTS"
```

xenialのubuntuが動いていることがわかります。
[このサイト](https://downloads.mariadb.org/mariadb/repositories/#mirror=yamagata-university&distro=Ubuntu&distro_release=xenial--ubuntu_xenial&version=10.1)にアクセスしてこれらの情報とレポジトリのミラー、インストールするmariadbのミラーを入力します。
すると、ページの下部にインストールに必要なコマンドが表示されます。
後はこれらを端末で実行してみます。
私のubuntu(xenial)では以下のコマンドを実行すると最新の安定版のmariadbが入ります。

```
udo apt-get install software-properties-common
sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
sudo add-apt-repository 'deb [arch=amd64,i386,ppc64el] http://ftp.yz.yamagata-u.ac.jp/pub/dbms/mariadb/repo/10.1/ubuntu xenial main'
```
このコマンドはレポジトリを追加しています。

```
sudo apt update
sudo apt install mariadb-server
```

ローカルのソフトウェア情報を更新してmariadbをインストールしています。

忘れずにセキュリティの設定を行いましょう。
manjaroの時と同様にセキュリティ設定スクリプトを実行します。

```
sudo mysql_secure_installation
```
インストールし終わったらmariadbを起動します。

```
sudo sysctl start mariadb
```

きちんとインストールできたかを確認しましょう。
manjaroのときと同様に

```
mysql -u root -p
```
これで正常に起動できればOK。
UnityのSpritePackerで2048以上のサイズの画像を使う方法について


[スプライトパッカー](http://docs.unity3d.com/ja/current/Manual/SpritePacker.html)

UnityのSpritePackerはマニュアルに「デフォルトの最大アトラスサイズは 2048x2048 です」とある通り、2048を超える画像を扱えず、超えてしまっている画像にPackingTagを設定してPackを行おうとすると下記のエラーが発生します。

※テスト用に作成した4096x4096の画像(sample_4096)にPackingTag("hoge")を付けてPackを行った際に出力されたもの。
![bbb.png](https://qiita-image-store.s3.amazonaws.com/0/80207/2b4f7361-8382-e3cb-3e97-e8e6107892ad.png)


こちらですが、CustomPackingPolicyを作成し、最大アトラスサイズを変更することで拡張可能みたいだったので下記に手順を纏めます。


### CustomPackerPolicyの作成

先ず最初にカスタム用のPackerPolicyクラスを作成します。

一からIPackerPolicyを継承したクラスを作成して作ることも可能ですが、今回はUnityマニュアルの[スプライトパッカー](http://docs.unity3d.com/ja/current/Manual/SpritePacker.html)の下の方にあるDefaultPackerPolicyのソースをEditor以下に作成したソースファイルに丸コピし、これを基にして手を加えていきたいと思います。

※丸コピしたらDefaultPackerPolicySampleが追加されます。IPackerPolicyを継承したクラス名が表示名になる模様。
![aaa.jpg](https://qiita-image-store.s3.amazonaws.com/0/80207/518b5b56-b522-a9ad-87ab-4eac6d12e595.jpeg)

作成したら70行目ぐらいにあるforeach内のentry.settings.maxWidthとentry.settings.maxHeightに設定したい最大サイズを代入します。

```csharp
// 変更前
//entry.settings.maxWidth = 2048;
//entry.settings.maxHeight = 2048;            
// 変更後(最大サイズを4096x4096にする場合)
entry.settings.maxWidth = 4096;
entry.settings.maxHeight = 4096;            
```

上記の変更を加えたら、PackerPolicyに追加したカスタムポリシーを設定してPackをする事で最大4096のAtlasが作成可能です。

![ccc.jpg](https://qiita-image-store.s3.amazonaws.com/0/80207/df58fbe2-99dd-99f3-244c-f80bff7fda8d.jpeg)


### その他

上記のDefaultPackerPolicyは大まかに纏めると内部で下記の処理を行っているみたいです。

* PackingTagが設定されているTextureの設定情報を取得し、Entryクラスに情報を保持してListに確保
* EntryのListをPackingTag名でグループ化し、更に設定情報でグループ化
* 最後に上記で割り出したグループに応じてAtlasを作成

真ん中の「設定情報でグループ化」の処理を逆手に取る方法として、70行目ぐらいにあるforeachの中のEntryを保持している箇所を決まった形式で設定する様に書き換える事で「同じPackingTagが設定されている物はTexture毎の設定関係無しに決まったフォーマットのAtlasを作成」「AtlasについてはGenerate Mip MapsはTexture毎の設定を無視して必ずfalse」と言った形にする事も可能かと思われます。
「Android Studio」・「Android SDK」・「JDK」インストール手順

# 「Android Studio」と「Android SDK」と「JDK」をインストールする手順

こんにちは、mucunです。

今回は、Androidアプリの開発に必要な、
「Android Studio」と「Android SDK」のインストール手順についてまとめます。
先に言っときますと、結構時間がかかります、、、
これを見た方が最短ルートでインストールできるように、きちんとまとめたいと思います。

尚、この手順は、「Windows 10（64bit）」OSでのインストール手順となります。

## 「Android Studio」のインストール

先ずは、「Android Studio」のインストールソフトをダウンロードします。
（ダウンロード元：https://developer.android.com/studio/index.html?hl=ja ）
<img width="600" src="https://qiita-image-store.s3.amazonaws.com/0/126499/9858d0f3-93c8-e2b7-417d-f16d5a5314bc.png">
（※ダウンロード重いです、、、）

ダウンロードが完了したら、exeファイルを実行します。
<img width="390" src="https://qiita-image-store.s3.amazonaws.com/0/126499/d3b6a163-626b-3044-0d98-ed80616d14b0.png">

基本的に、「Next」を押していけば良いのですが、
「Android SDK Instration Location」だけは、気を付けた方が良いです。
SDKを沢山インストールする人は、容量に余裕のあるHDDなどに保存した方が良いです。
（自分のPCは「容量カツカツのSSD＆容量余裕のHDD」なので、保存先をHDDに変更）
<img width="390" src="https://qiita-image-store.s3.amazonaws.com/0/126499/9128ca40-e8f9-e092-e39b-a7c666785382.png">

インストール開始
<img width="390" src="https://qiita-image-store.s3.amazonaws.com/0/126499/3db27fc8-fab0-1579-f5b6-01df0ef74c6c.png">
（※インストールもまあまあ時間かかります、、、）

## 「Android SDK」のインストール

インストールが完了したら、「Android Studio」を起動します。
<img width="600" src="https://qiita-image-store.s3.amazonaws.com/0/126499/4a15a6fd-192c-d42d-0623-e039bb53d68a.png">

SDKをインストールのために、上部メニュー「SDK Manager」ボタンを押します。
<img width="600" src="https://qiita-image-store.s3.amazonaws.com/0/126499/06208754-6eaa-b4d9-e9f6-2896425fc193.png">

「SDK Manager」を開いたら、
先ず「SDK Platforms」タブのSDKは全てインストールしちゃいましょう。
これが足りないことで、「ionic2」でエラー発生することがあるので、
とりあえず全部インストールしてしまいます。
<img width="600" src="https://qiita-image-store.s3.amazonaws.com/0/126499/fd65c796-20d7-7fc2-47c4-1e86fdcb36c9.png">

「SDK Tools」タブのSDKは、
正直なところ、何を入れれば良いのか把握し切れてません、、、すいません、、、
私の環境でうまく動くに至った際のインストール状況が下記です。
煩雑で申し訳ないのですが、下記を入れてもらえれば問題なく動くと思います。
<img width="600" src="https://qiita-image-store.s3.amazonaws.com/0/126499/9585bc98-fe6a-b3a3-aae9-217edf5c0bea.png">
・Android SDK Build Tools
・Android Auto API Simulators
・Android Auto Desktop Head Unit emulator, rev 1.1
・Android SDK Platform-Tools 24.0.1
・Android SDK Tools 25.2 rc1
・Android Support Library, rev 23.2.1
・Documentation for Android SDK
・GPU Debugging tools, rev 1.0.3
・GPU Debugging tools, rev 3.1
・Google Play APK Expansion Library, rev 3
・Google Play Billing Library, rev 5
・Google USB Driver, rev 11
・Google Web Driver, rev 2
・Intel x86 Emulator Accelerator (HAXM installer), rev 6.0.3

##「JDK」のインストール

最後に、「Java SE Development Kit 8」をインストールします。
（ダウンロード元：http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html ）
<img width="600" src="https://qiita-image-store.s3.amazonaws.com/0/126499/5a96c6f2-ec5c-ee7b-16de-307fd246a09f.png">
（※「Java SE Development Kit 8uXXX(最新版)」の
　　「Windows x64：jdk-8uXXX(最新版)-windows-x64.exe」をインストールして下さい）

以上が、インストール手順となります。
かなり、駆け足で書いてしまいました。

今回の記事は、ここまでとなります。
拙い記事でしたが、ここまで読んで下さった方感謝です。orz...
【12ステップで作る 組込みOS自作入門】①Hello Worldを出力するまでメモ

# 前提
- Windows 10, 64bit, Vaio Pro mk2
- USB/シリアル
    - iBUFFALO USBシリアルケーブル(USBtypeA to D-sub9ピン) https://www.amazon.co.jp/dp/B007SI18YO/ref=pe_1807052_198774502_tnp_email_dp_1
- VMWare
- ゲストOS 
    - 以下で提供されているVM(CentOS)
    - 12ステップで作る 組込みOS自作入門 http://kozos.jp/books/makeos/#vmimage

# 手順
## 書き込み手順
ディップスイッチを以下の通りセット
![IMG_2433.JPG](https://qiita-image-store.s3.amazonaws.com/0/50690/719a1d04-9d0d-d15d-7a3e-f48e3cc758bc.jpeg)

- ダウンロードしたVMをVMWareにインポートする
    - 既にソースは `/home/user/os_book` に入っている
    - ビルドしたプログラムも入っている
- WindowsでフラッシュROMに書き込むため、以下のページから `kz-h8write` をダウンロードする
    - H8/3069F writer for KOZOS https://osdn.jp/projects/kz-h8write/
    - Linuxから書き込みたいところだけど、どうやっても上手く行かなかった・・
- 書き込む `kzload.mot` をWindowsの適当な場所に配置し、以下のように実行する
    - 上手く行かなかったら、実行前にボードの電源をON/OFFするかリセットボタンでリセットすると上手くいくことがある

```
>kz_h8write.exe -3069 -f20 kzload.mot COM5
=================================================
 H8/3069F Flash Writer for KOZOS (Version 0.2.1)
 Copyright(C) 2011-2012 Shinichiro Nakamura
=================================================
Bitrate sequence: Done.
Inquiry device: Done.
Select device: Done.
Inquiry clock mode: Done.
Select clock mode: Done.
Select bitrate: Done.
Waiting for erase done:...
Programming:.....
Program: Done.
Complete.
```

## フラッシュROMからの起動手順
- 電源をOFFする
- ディップスイッチを以下のように切り替える
- TeraTermでCOMポートに接続する
- 電源をONする

![IMG_2434.JPG](https://qiita-image-store.s3.amazonaws.com/0/50690/afdddea2-f18c-691f-7569-b9b2cd218877.jpeg)

## Tips

USBをVM側に接続（逆もしかり）する場合は、以下のページを参考に、VMWare右上のUSBアイコンを右クリックし、「接続（ホストから切断）」ボタンを押下。
FPGAで遊ぶ [WMware]USB to シリアル変換ケーブル認識方法 http://bobgosso.blog13.fc2.com/blog-entry-263.html

# 関連リンク等
12ステップで作る 組込みOS自作入門 http://kozos.jp/books/makeos/
Open H8 writer http://mes.osdn.jp/h8/writer-j.html


<div class="amazlet-box" style="margin-bottom:0px;"><div class="amazlet-image" style="float:left;margin:0px 12px 1px 0px;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4877832394/kuredev-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/51HYm-LUi3L._SL160_.jpg" alt="12ステップで作る組込みOS自作入門" style="border: none;" /></a></div><div class="amazlet-info" style="line-height:120%; margin-bottom: 10px"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4877832394/kuredev-22/ref=nosim/" name="amazletlink" target="_blank">12ステップで作る組込みOS自作入門</a><div class="amazlet-powered-date" style="font-size:80%;margin-top:5px;line-height:120%">posted with <a href="http://www.amazlet.com/" title="amazlet" target="_blank">amazlet</a> at 16.08.21</div></div><div class="amazlet-detail">坂井 弘亮 <br />カットシステム <br />売り上げランキング: 38,961<br /></div><div class="amazlet-sub-info" style="float: left;"><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4877832394/kuredev-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jpで詳細を見る</a></div></div></div><div class="amazlet-footer" style="clear: left"></div></div>
AutodeskMAYAにpip, numpy をインストールする方法

結構ハマってしまったのでメモしておきます。
個人用MAYAの設定方法ですので、管理者権限のないマシンではおそらく通用しません。
Mac OSXでも今回の記事と同様に実行したところ動作しましたので、Macユーザーの方にも有益な情報なのではないかと思います。

##使用環境
- Windows10
- Autodesk MAYA 2015 及び 2016
- Python2.7 (mayapy)

##pipのインストール

mayapyには標準で get-pip.py は同梱されていないため、手動でダウンロードする必要があります。
[こちら](https://bootstrap.pypa.io/get-pip.py)から get-pip.py を適当な場所にダウンロードします。(2016/08/22現在)

コマンドプロンプトをあらかじめ管理者権限で開いておき、
カレントディレクトリを mayapy が格納されている C:/Program Files/Autodesk/Maya2016/bin に変更します。
(インストール先がデフォルトでない場合は異なります)

```shell-session
$ cd "C:/Program Files/Autodesk/Maya2016/bin"
```

次に、get-pip.py を実行します。

```shell-session
$ mayapy "(get-pip.pyへのパス)/get-pip.py"
```

ここで、pipのインストールが開始されます。
ところが、うまくインストールできる場合とできない場合があるようです。
うまくできた方は、コマンドプロンプトはそのままに、これ以降の記事を読み飛ばし、Numpyの設定へと移ってください。

うまくダウンロードできなかった方は、以下のようなエラーが赤字で表示されていませんか？

```shell-session
UnicodeDecodeError: 'ascii' codec can't decode byte 0x8d in position 1: ordinal not in range(128)
```

これはいずれかのディレクトリまたは管理者名に日本語が含まれていることに起因するエラーのようです。
これを防ぐために、mayapy の site-packages フォルダ内に設定のカスタマイズを行うスクリプトを配置します。
マイコンピュータから **C:/Program Files/Autodesk/Maya2016/Python/Lib/site-packages** に移動し、
"**sitecustomize.py**"というファイルを作成し、以下のスクリプトを記述してください。

```py:sitecustomize.py
import sys
sys.setdefaultencoding("cp932")
```

そして再び先程の get-pip.py を実行するとうまくインストールができるはずです。

##Numpyのインストール
pipがインストールできていれば、あとは簡単です。
管理者権限で開いたままのコマンドプロンプトに以下を記述します。
プロンプトを閉じてしまった方はカレントディレクトリをmayapyがあるフォルダに設定しなおしてください。

```shell-session
$ mayapy -m pip install --upgrade numpy
```

これでインストール完了です。
お疲れ様でした。

Mac版は気が向いたら書きます。
とりあえずRiot.jsを触ってみたいなら

# とりあえずRiotjsを触ってみたい
Riotjsを始めるにあたり、動作を確認するための環境を用意しました。
とりあえずRiotjsを触ってみたいという場合に使います。

## 手順

### node.jsのインストール

nodebrewをインストールする

```
curl -L git.io/nodebrew | perl - setup
```


pathを通す

```
export PATH=$HOME/.nodebrew/current/bin:$PATH
```

読み込む（以下はbashの場合）

```
source ~/.bashrc
```

node.jsのバージョン一覧を確認する

```
nodebrew ls-remote
```

欲しいバージョンのnode.jsをインストールする（以下は例）

```
nodebrew install-binary v6.4.0
```

インストールしたnode.jsを使用する

```
nodebrew use v6.4.0
```

### npmを最新のバージョンにアップデートする

```
npm update -g npm
```

### 動作環境の用意
好きなディレクトリに移動する

リポジトリをcloneする

```
git clone git@github.com:hirokisan/sample-riot.git
```

移動する

```
cd sample-riot
```

パッケージをインストールする

```
npm install
```

サーバーを立ち上げる

```
npm start
```


## 準備完了

あとは、好きに使います。

- ソースを見て動作を理解する
- ドキュメントを見ていろいろ試す
- など

## リファレンス
[nodebrew](https://github.com/hokaccha/nodebrew)
[npm update](https://docs.npmjs.com/cli/update)
[sample-riot](https://github.com/hirokisan/sample-riot)
[riotjs guide](http://riotjs.com/guide/)
[webpack](https://webpack.github.io/)
[npmとwebpackで作るRiot.js](http://shigekitakeguchi.github.io/2016/06/24/1.html)
Facebook CTF(fbctf)をインストールしてみる

```
   __               _                 _     _____ _______ ______
  / _|             | |               | |   / ____|__   __|  ____|
 | |_ __ _  ___ ___| |__   ___   ___ | | _| |       | |  | |__
 |  _/ _' |/ __/ _ \  _ \ / _ \ / _ \| |/ / |       | |  |  __|
 | || (_| | (_|  __/ |_) | (_) | (_) |   <| |____   | |  | |
 |_| \__,_|\___\___|_.__/ \___/ \___/|_|\_\\_____|  |_|  |_|
```

最近は国内でもCTFを運営するケースが最近増えています．手軽にCTFを建てることができるプラットフォームとして以前から[Facebook CTFがOSSになっていた](https://www.facebook.com/notes/facebook-ctf/facebook-ctf-is-now-open-source/525464774322241/)ことは知っていたのですが，実際に導入するとどうなるかが分からなかったのでやってみました．

# 導入
公式ではUbuntu 16.04のみをサポートしています．Ubuntu 16.10ではインストールできません．
一式インストールされてしまうので，すでにサーバなどをローンチしている環境では行わない方が無難です．

```
sudo apt-get update
sudo apt-get install git
git clone https://github.com/facebook/fbctf
cd fbctf
./extra/provision.sh -m prod -s $PWD
```

```
[+] Adding default admin user
[+] The password for admin is: [hash]
```

この[hash]の中にパスワードがあるので，忘れないようにメモしておくとよいです．

```
Success!
\033[0;32m [+] fbctf deployment is complete! Ready in https://[IPアドレス] \033[0m
```

自分のIPアドレスに行くとなんかかっこいい画面が出ます．インストール後はオレオレ証明書が導入されているためブラウザの警告が出ます．公式でもLet's Encryptなどを利用することが推奨されているので導入してもよいかもしれません．
![Facebook CTF.png](https://qiita-image-store.s3.amazonaws.com/0/11191/65433c3e-95aa-e666-af29-7694fae2755a.png)

# 遊んでみる
LOGINから，adminと与えられたパスワードでログインできます．
admin権限では，Quiz/Flag/Base/Categoryなどの編集ができます．
Categoryを編集して，Flagに適用されるカテゴリの編集ができます．
![Facebook CTF   Admin_.png](https://qiita-image-store.s3.amazonaws.com/0/11191/62eb6d48-dcd7-d9af-32a9-f1096a7993c3.png)


## Flag
Flagの編集では，問題が属する国(Country)やカテゴリ，ヒントやそのペナルティなど細かいところまで編集できます．添付ファイルやリンクも追加できるため普通にCTFとして運営できるぐらい便利です．
![Facebook CTF   Admin.png](https://qiita-image-store.s3.amazonaws.com/0/11191/3a9451cb-0dfe-9d4b-04f0-bd52ae2e3159.png)

## プレイしてみる
実際にゲームを開始する際は，管理画面の```BEGIN GAME```をクリックすればゲームがスタートします．タイマーなどもあるのでそれらを利用することもできます．

今回は例としてFlagの問題を追加してみました．実際にNorwayに問題が追加されているのがわかります．
![Facebook CTF   Gameboard.png](https://qiita-image-store.s3.amazonaws.com/0/11191/97c562f4-ccce-8ffd-55f9-7d4b443a1efe.png)

解答画面では，このように表示されます．
![Facebook CTF   Gameboard2.png](https://qiita-image-store.s3.amazonaws.com/0/11191/56302d1a-d70d-ba16-3741-50b0778fc229.png)

手軽にかっこいいCTFが作ってみたいときはよいかもしれません．

# 参考
- [fbctfでCTFして遊んでみる準備 - Technically, technophobic.](http://notchained.hatenablog.com/entry/2016/05/15/193938)
MackerelでDockerコンテナの起動状態を監視する

Mackerel公式のDockerのプラグイン([mackerel-plugin-docker](https://github.com/mackerelio/mackerel-agent-plugins/tree/master/mackerel-plugin-docker))ではコンテナが起動しているかどうかの情報は取得できません。
そこで、自分でプラグインを作ってみました。
https://github.com/ABCanG/mackerel-plugin-docker-state

ここでは[mackerel-agent](https://hub.docker.com/r/mackerel/mackerel-agent/)イメージを使った方法を紹介します。

## 準備
設定用ディレクトリを用意し、[mackerel-plugin-docker-state](https://github.com/ABCanG/mackerel-plugin-docker-state)を配置します。

```bash
$ mkdir -p /etc/mackerel-agent/conf.d
$ cd /etc/mackerel-agent/conf.d
$ curl https://raw.githubusercontent.com/ABCanG/mackerel-plugin-docker-state/master/mackerel-plugin-docker-state -o /etc/mackerel-agent/conf.d/mackerel-plugin-docker-state
$ chmod +x /etc/mackerel-agent/conf.d/mackerel-plugin-docker-state
```

さらに以下のような設定ファイルを用意します。

```text:/etc/mackerel-agent/conf.d/docker-state.conf
[plugin.metrics.docker-state]
command = "/etc/mackerel-agent/conf.d/mackerel-plugin-docker-state"
```

`mackerel-plugin-docker-state`と`docker-state.conf`があればOKです

```bash
$ ls /etc/mackerel-agent/conf.d
mackerel-plugin-docker-state  docker-state.conf
```

## 起動
Dockerでmackerel-agentを起動します。
`/etc/mackerel-agent/conf.d`にディレクトリがマウントされるようにします。
また、`include`を指定して設定ファイルが読み込まれるようにします。

```bash
docker run -h `hostname` \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /var/lib/mackerel-agent/:/var/lib/mackerel-agent/ \
  -e 'apikey=<APIKEY>' \
  -e 'enable_docker_plugin=true' \
  -v /etc/mackerel-agent/conf.d:/etc/mackerel-agent/conf.d:ro \
  -e 'include=/etc/mackerel-agent/conf.d/*.conf' \
  --name mackerel-agent \
  -d \
  mackerel/mackerel-agent
```

すると、Mackerelの画面にDocker Running Stateと書かれたグラフが追加されていると思います。
グラフの表示方法を変えると下の画像ように表示されるようになります。

![スクリーンショット 2016-08-21 23.40.46.png](https://qiita-image-store.s3.amazonaws.com/0/36232/f175e180-1c5d-3a7a-5d61-0cf74af4db02.png)

コンテナが起動していない時は`0`に、している時は`1`になるので、コンテナをモニターすることでコンテナが終了したら通知することができます。

## mackerel-plugin-docker-stateの仕組み
mackerel-plugin-docker-stateはdockerコマンドが使える環境でないと利用できません。
シェルスクリプトとして動作し、`docker ps`コマンドを実行した結果を整形しています。
mackerel-agentイメージではdockerコマンドが利用できるため、mackerel-plugin-docker-stateを使うことができます。

## おわりに
Mackerelのプラグインを結構簡単に作ることができて驚きました。
Mackerel公式のDockerのプラグインではコンテナの起動状態を取得することができませんでしたが、自分で作ったプラグインを使うことで、コンテナの起動状態を監視できるようになりました。

datadogのようにMackerelでもコンテナの起動状態を取得できる機能がほしいなと思ってた人に使ってもらえるとうれしいです。

## 参考

* [» docker psでコンテナリストを表示・取得する](http://unskilled.site/docker-ps%E3%81%A7%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E3%83%AA%E3%82%B9%E3%83%88%E3%82%92%E8%A1%A8%E7%A4%BA%E3%83%BB%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B/)
* [ホストのカスタムメトリックを投稿する - Mackerel ヘルプ](https://mackerel.io/ja/docs/entry/advanced/custom-metrics)
* [Dockerをモニタリングする - Mackerel ヘルプ](https://mackerel.io/ja/docs/entry/advanced/docker)