OmniAICreator/Qiita-1.07M huggingface dataset:
UniRx:入門解説

ちょっとずつ書いていく予定です。
Rxについての解説ではなく、あくまでUniRxの解説です。
間違い/Typoを発見したらコメントください＞＜
UniRxに幸あれ！

```ここで使われる用語
- データ => ストリームに流れるデータ
- 回収   => データが来たら後続に流さず、キープしちゃうよ
- 流れ   => ストリームが発火してから各関数がどのように動くかを書くよ
```

```テンプレ
##
- 引数        : 
- url         : 
- 一言で言うと :

流れ
1.
```

##Sample
- 引数        : TimeSpan
- url         : http://rxmarbles.com/#sample
- 一言で言うと :データを何時間毎に流すか決める関数

流れ
1. 内部で引数に指定された時間までのタイマーをセットするよ
2. ストリームを監視し、データが来たら回収するよ
3. 引数に指定された時間が来るまでひたすら2をやるよ
4. (引数に指定された時間が経過してから)2で貯めたデータの中で```最新のデータ```を後続に流すよ
5. 1からやり直すよ

```lang:サンプル
this.UpdateAsObservable ().Where (_ => Input.GetMouseButtonDown (0))
	.Select (x => 1)
	.Scan ((a, b) => a + b)
	.Sample (TimeSpan.FromSeconds (1))
	.Subscribe (x => Debug.Log ("累計" + x + "click!とはやるな•••ッ!!"));
```

##SampleFrame
- 引数        : int
- url         : 
- 一言で言うと :データを何フレーム毎に流すか決める関数

流れ
1. Sampleと同じ

```lang:サンプル
this.UpdateAsObservable ().Where (_ => Input.GetMouseButtonDown (0))
	.Select (x => 1)
	.Scan ((a, b) => a + b)
	.SampleFrame (30)
	.Subscribe (x => Debug.Log ("累計" + x + "click!とはやるな•••ッ!!"));
```
UniRx: Take,TakeWhile,TakeUntilの違い

##UniRx: Take,TakeWhile,TakeUntilの違い

###+Take(int count)
```lang:Takeの場合
		Observable.Timer (TimeSpan.FromSeconds (1), TimeSpan.FromSeconds (1))
			.Take (2)
			.Subscribe (x => Debug.Log (x), () => Debug.Log ("end"));
```
Takeは```何回データを流すか```を決めるための関数。
int型の引数で```何回```を指定できる
Takeに指定した数がSubscribeまで流れ終わった瞬間にストリームが終了しOnComlateが流れる。






---
###+TakeUntil(T,TOther)
```lang:TakeUntilの場合
		Observable.Timer (TimeSpan.FromSeconds (1), TimeSpan.FromSeconds (1))
			.TakeUntil (this.UpdateAsObservable ().Where (_ => Input.GetMouseButton (0)))
			.Subscribe (x => Debug.Log (x), () => Debug.Log ("end"));
```
TakeUntilは```どのストリームAにデータが流れるまで、このストリームBにデータを流すか```を決めるための関数。
引数に別のストリームを指定することで```いつまで```を指定できる
引数に渡したストリームAにOnNextが呼ばれた時に、こののストリームBが終了しOnCompleteが呼ばれる。






---
###+TakeWhile(Func<T,bool>)
```lang:TakeWhileの場合
		Observable.Timer (TimeSpan.FromSeconds (1), TimeSpan.FromSeconds (1))
			.TakeWhile (count => count < 2)
			.Subscribe (x => Debug.Log (x), () => Debug.Log ("end"));
```
TakeWhileは```いつまでデータを流すか```を決めるための関数。
Func<T,bool>型の引数で```ストリームに流れたデータに対し、通過させるべきかどうか```を指定できる。
TakeWhileにfalseを返した時点でストリームが終了しOnComlateが流れる。

##内容に間違い等がありましたらコメントください＞＜
ユークリッドの互除法　実装

[AOJ ALDS1_1_B](http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ALDS1_1_B)で最大公約数を求める問題が出た。
最大公約数を求める有名なアルゴリズムとしてユークリッドの互除法というものがある。
#ユークリッドの互除法とは
非負整数`a`,`b`について、その最大公約数を`gcd(a,b)`とする。

`a ≥ b`であるとき、`gcd(a,b) = gcd(b,a%b)`である。
(`a%b`は`a`を`b`で割った時の剰余)

これを用いて、次のようにして最大公約数を求めることができる。
1.　`a%b`を計算する。
2.　`a%b`が`0`ならば`b`を最大公約数として出力して終了する。
3.　`a`に`b`を代入し、`b`に`a%b`を代入したうえで、1 に戻る。

#実装
これを関数`unsigned euclidean_gcd(unsigned a,unsigned b)`として実装した。
ただし、`a`と`b`はともに0ではないものとする。
引数はどちらが大きくても問題ないように実装する。

##最初に書いた実装
```cpp
unsigned euclidean_gcd(unsigned a, unsigned b) {
  while(1) {
    if(a < b) swap(a, b);
    if(!b) break;
    a %= b;
  }
  return a;
}
```
2つの変数`x`,`y`を交換する操作を`swap(x,y)`とした。
求めたいものは求まるのだが、アルゴリズムがはっきり見えないし、無限ループがあらわになっていて好きになれない。

##より好みな実装
```cpp
unsigned euclidean_gcd(unsigned a, unsigned b) {
  if(a < b) return euclidean_gcd(b, a);
  unsigned r;
  while ((r=a%b)) {
    a = b;
    b = r;
  }
  return b;
}
```
アルゴリズム通りで、あらわな無限ループもない。
*追記(2018/7/23) まともに動かないコードを乗せていたことに今更気づいたので修正。ついでに`swap`を使わないようにした。*
縞模様のhr（repeating-linear-gradient）

# 普通の<hr>では厭だ！
`<hr>`が縞模様になります。
https://jsfiddle.net/lovalotta/a7fjx2y2/

![スクリーンショット 2015-07-05 20.01.07.png](https://qiita-image-store.s3.amazonaws.com/0/84193/213591ba-b2cf-1d28-8551-b418b583a291.png)


# ブラウザ制限がある
Android 4〜4.3までは`-webkit-repeating-linear-gradient`を使う必要があります。Android 2.3は残念ながら対象外です。

Safariは6.xぐらいのだと`-webkit-`が必要になるので、Android対応と同じやりかたで間に合います。


# なんかレンダリングが汚い
スクリーンショットはMac+Chromeだったんですが、なにやら縞模様が均一でない。Firefoxで見た時もムラがあったので、あまり美しくない気がする。どうしても虎柄にしたいときとか、そういうときに使うのが良さそう。
Railsで開発しているなら使用するべきSPAに特化したライブラリ(Cape js)

・インタラクティブなサイトを作りたい！
・シングルページなアプリケーションに特化したサイトを作りたい！
等の要望が昨今高まっていますがRailsで開発していてJQeuryを使用して開発するとコード量が長くなってハードなコードディングになってしまったり、テストがめんどくさかったりします。かといってAngularやBackboneを使用するのは敷居が高そうな気がしたり、学習のコストがかかりそうな気がする。

学習のコストが低く、仮想DOMに特化したライブラリでRailsで開発しやすいものはないだろうか？
そんな疑問に答えてくれそうな？？？ライブラリを紹介します。


![Capejs](https://camo.githubusercontent.com/dd19f30b2530c2c82ef00b48ada0a34e0774f102/68747470733a2f2f63646e2e7261776769742e636f6d2f6f6961782f636170656a732f6d61737465722f646f632f6c6f676f2f636170656a732e737667)

[Capejs](http://github.com/oiax/capejs)は今はやりのシングルページアプリケーションに特化したライブラリです、Virtual Domを使って実装されているためとても軽量にサクサク動きます。

RailsやReactやRiotに影響を受けていてRailsでおなじみのRESTfulなURLやform_for, fields_forなどが使えます。


##特徴的な点

・Virtual Dom
・Markup builder
・Form manipulation
・Data stores
・Router

**Virtual Dom**はDomの差分を読み込んでページ読み込みを早くしてくれます。
[Matt-Esch](https://github.com/Matt-Esch/virtual-dom)のVirtual Domを使用しているみたいです

**Markup builder**を使用すればHTMLタグを簡潔に生成できる

```js
//es6で書いてます
//capejsを使用すればネストした形で分かりやすい形でHTMLコードがかける
b.table(b => {
 b.tr(b => {
   b.th('')
     b.th('名前')
   })
   b.tr(b => {
     b.td('')
     b.td('hoge')
   })
 })

//下記のHTMLコードが生成されます

//<table>
//  <tr>
//    <th>名前</th>
//  </tr>
//　<tr>
//    <td>hoge</td>
//  </tr>
//</table>
```

**Form manipulation**はRailsライクなformが生成できます。

[本ドキュメント](http://oiax.github.io/capejs/api/markup_builder/#form-for)からの抜粋ですが


```js
render: function(m) {
  m.formFor('user', function(m) {
    m.textField('name');
    m.checkBox('privileged');
  })
  // The above code generates the following HTML tags
  //   <form name="user">
  //     <input type="text" name="user.name"
  //       id="user-field-name">
  //     <input type="hidden" name="user.privileged"
  //       value="0">
  //     <input type="checkbox" name="user.privileged"
  //       id="user-field-privileged" value="1">
  //   </form>
}
```

**Data stores**はデータの流れを管理する。

[本ドキュメントから抜粋](http://oiax.github.io/capejs/api/data_store/)

```js
var CounterStore = Cape.createDataStoreClass({
  init: function() {
    this.counter = 0;
  },
  increment: function() {
    this.counter++;
    this.propagate();
  }
});

var cs = new CounterStore();
// cs.counter === 0

```




**Route**は

```js

var router = new Cape.Router();
router.draw(function(m) {
  m.namespace('admin', function(m) {
    m.many('articles');
  })
})
```

のように書くと


|       Hash pattern     | Container      |    Component   | Namespace | Resource | Action |
|:-----------------------|---------------:|:--------------:|:---------:|:--------:|:------:|
|admin/articles          | Admin.Articles | List           | admin     | articles | index  |
|admin/articles/:id      | Admin.Articles | Item           | admin     | articles | show   |
|admin/articles/new      | Admin.Articles | Form           | admin     | articles | new    |
|admin/articles/:id/edit | Admin.Articles | Form           | admin     | articles | edit   |

ルートが生成されます。


**ビルドを動かす手間**やHTMLタブを直接埋め込んで書く必要は無い
Rails側は簡単なAPIにとどめておき、Capejs側でガシガシ開発するスタイル



詳しいところは下記のサイトのご参照下さい。
・[Capejs](http://github.com/oiax/capejs)
・[Document](http://oiax.github.io/capejs/)
・[Cape.JS 入門](http://www.oiax.jp/rails/capejs_primer.html)
Cocos2d-x 縦モニター方法

まず　![QQ270705-1@2x.png](https://qiita-image-store.s3.amazonaws.com/0/85191/500cd364-a02b-5434-405c-95d66022fd43.png)
そして　OPEN THE RootViewController.MM 
Find this void 【
```- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return UIInterfaceOrientationIsPortrait( interfaceOrientation );
}```
**UIInterfaceOrientationIsPortrait( interfaceOrientation )** <---keyPoint
 
// For ios6, use supportedInterfaceOrientations & shouldAutorotate instead
```- (NSUInteger) supportedInterfaceOrientations{
#ifdef __IPHONE_6_0
    return UIInterfaceOrientationMaskPortrait;
#endif
}```
**UIInterfaceOrientationMaskPortrait** <---keyPoint
```- (BOOL) shouldAutorotate {
    return NO;
}```
**NO** <---keyPoint
】
そして　縦モニターは完成しました〜
c++ builder > リファクタリング > 名前の変更 > バグってるっぽい


```txt:動作確認
C++ Builder XE4
```

メニューに
リファクタリング > 名前の変更
という機能がある。

使ってみたが、一部のファイルの関数名変更に失敗した。

XXX_SetProp(true, 0.5)
という関数を
XXX_SetLeftProp(true, 0.5)
にしようとリファクタリングしたが、一部のファイルで
XXX_SetLeftPropue,0.5
になった。
Arduino互換ボード「Pro Micro」の情報まとめ

会社の同僚からArduino 互換ボードの「Pro Micro 5V/16MHz」のクローン（eBayなどでは「Leonardo Pro Micro」などと呼ばれていたりします）をもらったので、色々調べてみました。

そもそもこの「Pro Micro」はArduino公式の商品紹介ページには掲載されていません。これはArduino界隈では大きいベンダーの一つであるSparkFun Electronics社が設計・販売しているArduino互換ボードなのですが、Arduinoを名乗らずに販売しているようです。

- [Pro Micro - 5V/16MHz - DEV-12640 - SparkFun Electronics](https://www.sparkfun.com/products/12640)

このPro MicroはArduino Pro Miniに似たサイズのボードでありながら、マイコンにATmega32U4を採用し、USBコネクタ（mini-B）も備えています。同じくATmega32U4を搭載しているArduino LeonardoやArduino Microと比べてもサイズが小さく、それでいて互換品が安価に入手できるので、USBキーボードやUSBマウスとしてふるまうデバイスを実現するのに最適なモデルだといえるでしょう。

## 使い始めるときの注意点

Pro Microを初めて使うときは、下記どちらかのページの「Installing the Arduino Addon」の通り、このハードウェアの情報をArduino IDEに教えてやる必要があります。ちょっと面倒ですね。

- [Pro Micro & Fio v3 Hookup Guide - Installing: Windows](https://learn.sparkfun.com/tutorials/pro-micro--fio-v3-hookup-guide#installing-windows)
- [Pro Micro & Fio v3 Hookup Guide - Installing: Mac & Linux](https://learn.sparkfun.com/tutorials/pro-micro--fio-v3-hookup-guide#installing-mac--linux)

私の環境（MacOSX）では`$HOME/Documents/Arduino/hardware/`を新規作成し、その下に`sparkfun`フォルダを配置しました。これでボードとして「SparkFun Pro Micro 5V/16MHz」が選択できるようになります。

## ADコンバータまわりの注意点

* `analogReference(INTERNAL)`の基準電圧は2.56V
  * Arduinoのマニュアルには載っていないが、[ATmega32U4のデータシート](http://www.atmel.com/images/atmel-7766-8-bit-avr-atmega16u4-32u4_datasheet.pdf)から判断
  * データシート上は2.40Vから2.80Vの間ということになっている
  * 自分で測定した印象としては2.50Vくらい。
* AREFピンがどこにも出ていないので、任意の基準電圧を入力することができない
  * ポータビリティ無しでいいなら2ピンのアナログ値の差を取り出すことは出来そう、データシート参照

## その他の注意点

13番ピンはどこにも接続されていない（LEDが接続されていないだけでなく、そもそもピンとして存在しない）ため、サンプルスケッチの「Blink」は動きません。


## Pro Microクローンを安く買う

オリジナルのPro MicroをSparkFunから買うと19ドルくらいしますが、下記のどこかでクローンを買えば送料込みで1個あたり4.5ドルから6ドルくらいで入手できそうです。

- http://www.banggood.com/
- http://www.aliexpress.com/
- http://www.ebay.com/

キーワードとしては「atmega32u4」「atmega32u4 pro micro」「leonardo pro micro」などが有効です。また、「2pcs」「3pcs」「5pcs」などの検索語を追加することで安いセットが見つかりやすくなります。

とはいえ、海外サイトでのお買い物になるので、必ずPayPal払いにするなどの注意が必要でしょう。詳しくは体験者のブログ記事などをググってください。
Clean Code Tips


#About
- 素早くコードを読むため
- 綺麗なコードを書くため

に参考にしたサイトの個人的なメモ

#Site
>プログラミングで変数名や関数名のネーミングに迷ったときに便利なカンニングペーパーまとめ
> http://nelog.jp/programming-words

命名規則に関するTips。特によく使われる英単語のあたりは理解しておくと捗る。


>あなたは全部知っていますか？プログラミングの業界用語30選
>http://postd.cc/new-programming-jargon/

stackover flowで話題になった業界用語集。有名な反面教師もあるため是非参考に。


>ソフトウェアエンジニアを目指す人へのコードに関するアドバイス | キャリア・働き方 | POSTD 
>http://postd.cc/coding-advice-for-aspiring-software-engineers/
sakura に入れてるやつの configure オプション


```
./configure --prefix=/usr/local/etc/nginx --sbin-path=/usr/local/sbin/nginx --conf-path=/usr/local/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-mail --with-mail_ssl_module --with-file-aio --with-cc-opt='-O2 -g -m64 -mtune=generic' --with-http_stub_status_module
```
システム監視の設計まとめ

どうやら仕事で説明する必要が出てきたので、備忘録的に知っている事をまとめてみる。
即興、オレオレなので違和感のあるところはごめんなさい。


# 監視でできること
## エージェントレス監視
サーバやサービスの外側からアクセスをして、その動作状況を確認します。基本的にクライアントアクセスを模すため、**成否とレスポンスタイム**が得られる結果。**外部ネットワークから行うと、サービス全体の死活判断。内部ネットワークから行うと、個別のサーバ（サービス）の死活判断**に使えます。
  
### よく使うエージェントレス監視
上位サービスが落ちると下位サービスも落ちるので、下位サービスをきっちり拾っておけば上位サービス分も拾えますが、切り分けに時間を要しやすくなるので、一通り取るのがお勧め。

|名称|概要|対応コスト|備考|
|-----------|----|---|-----|
|ICMP監視|Ping等によりノードの死活を判断する|低||
|TCP監視|TCP Portがオープンしているかを判断する|低||
|DNS監視|対象FQDNを正しく名前解決できるかを判断する|中||
|DB監視|DBに所定の方法で接続して、意図したクエリ結果を返しているかを判断する|中～高|利用する監視システムで対応していないと厄介|
|HTTP監視|Webアクセスをして、意図したレスポンス（時間含む）を返しているかを判断する|中～高|認証がある等、操作が複雑になると厄介|


## エージェント監視
サーバにインストールされたエージェントを通じて動作状況を確認する。代表的なのはSNMPやJMX等で、得られるのは取得項目に対応した値。ものによっては成否だったり、数値だったり、文字列だったり何でも。グラフ化される事も多い。また、エージェントからDB接続等をすれば外形監視も出来たりする。

### よく使うエージェント監視
挙げるとキリがないので、代表的なものを。サーバに何か入れてる時点で、基本的には頑張れば何でも取れるので、あくまで目安程度に。（例えばSNMPで全てを強引に取りに行くこともできる。面倒だけれど）

|名称|代表的なエージェント|概要|対応コスト|備考|
|----|-------------|----|---------|----|
|リソース使用状況監視|SNMP|CPU, MEM等のリソースの使用状況を取得する|低|性能監視の鉄板|
|OS状況監視|SNMP|ホスト名やカーネルのバージョン、uptime等|中|予期せぬ障害で意外と役立つ|
|プロセス監視|Zabbix|プロセスの起動状況を取得する|中||
|Javaプロセス監視|JMX|JavaのヒープやGCの発生状況を取得する|高||
|レプリケーション監視|Zabbix|レプリケーションの遅延や、そもそものデータずれ等を監視する|高|内容により要スクリプト|
|ログ監視|Zabbix|ログを取得し、特定文字列の出現状況などを判断する|高||

# 監視対象の考え方
基本的にはフルコースでやって、なおかつ見る人のスキルが高ければ、一通りの場面に対応できる。とはいえ、それでは元も子もないですね。

## 最も重要なのは？
**ユーザアクセスを模した監視**。Webサービスの場合なら、内部的にRDBを使っていようが、KVSを使っていようが、HTTP監視ということになる。コレがしっかりしていると、障害対応やメンテナンス後の回復確認の信頼度が上がるし、そもそもこれが無くて「サービス落ちてるんだけど…」とユーザに言われるのは、究極的に恥ずかしい。

とはいえ難しいところもあって、例えばシャーディングしているシステムの場合だと、特定シャードのみの障害ということもありえる。そういった場合は、他の監視を併用する必要があるので、過信は禁物。

## 次に重要なのは？
**実際に障害対応するのはサーバやシステムサービス単位なので、それ単位で監視**する。MySQLを使っていれば、サービス自体もそうですが、レプリケーション等も使っている場合には監視が必要。基本的には、**監視内容と障害対応手順が紐付く形**になるはず。

## その他は？
システムの改善や原因調査などに必要になるので、**自分たちがそういった作業をするときに必要になる項目**を取得しましょう。例えば、JavaアプリケーションでGCログを見たりしているのであれば、JMXで一通り取得してしまう等。個人的にはdstat愛好家なので、`dstat -f`に相当するものは入っていて欲しかったり。
その逆、極論、`w`してLoad Average見るくらいしか出来ないのであれば、それしか採らなくていいと思う。活用出来ない値を採るのは無駄なので。というわけで、チームの技術力に合わせた値を。ZabbixやMuninみたいなテンプレに頼らず取得できるようなものが、実際に役に立つ値でしょう。

# まとめ
だいぶ長くなったので、まとめる

1. 外部ネットワークからの監視は確実に！
2. 内部ネットワークからの監視は、定型（想定した）障害対応オペレーション毎に漏れなく
3. リソース等の監視は、自分たちの使える値を漏れなく、手間かけ過ぎず

## 参考
今の監視が足りなかったらここいらを使おう

### エージェントレス監視
Pingdom
https://www.pingdom.com/
Uptime Robot
https://uptimerobot.com/

### エージェント監視
Mackerel
https://mackerel.io/ja/
Sensu
https://sensuapp.org/
Zabbix
http://www.zabbix.com/jp/
Icinga（Nagios派の方へ）
https://www.icinga.org/
あるコマンドが存在するか確かめるRubyスクリプト


whichr gem 使ってます。

```
gem install whichr
```

```ruby
module Util
  module_function

  def exist_command?(command)
    !(RubyWhich.new.which(command).empty?)
  end
end


Util.exist_command? 'ls' #=> true (Windowsならfalse)
```
c言語 > FLT_EPSILON > #include <float.h>

float変数の等値比較を避ける例

http://www.bohyoh.com/CandCPP/C/Library/FLT_EPSILON.html

```c
#include <float.h>

if (fabs(val1 - val2) < FLT_EPSILON) {
   // Error: val1 == val2
   return; // などのエラー処理
}
```

検索用キーワード

- FLT_EPS
c++ builder XE4, 10.2 Tokyo > TeeChart > MinorTickCount > MajorTickCount間の個数を設定する

```txt:動作環境
C++ builder XE4
    TeeChart Lite v2013.08.130414
RAD Studio 10.2 Tokyo Update 2 (追記 2018/01/10)
    TeeChart v2016.17.160129 32bit VCL
```

TeeChartでMinorTickCountの設定がある。
これはMajorTickCountの間に表示したいMinorTickの数を指定する [(SO)](http://stackoverflow.com/questions/12841979/how-to-set-ticks-between-ticks-in-teecchart)。

majorTickIncrement と minorTickIncrement が与えられている場合

```
Chart1->LeftAxis->MinorTickCount = majorTickIncrement / minorTickIncrement - 1;
```
さくらインターネットでPython外部モジュールを使う

さくらインターネットでPythonを動かせるようになったら外部モジュールも動かしたいところ。ということでやってみた作業を全部書いておこうかと思いまして。必要ない作業もあるかもしれませんが、そこらはわかりません。考えられ得るすべてをやってみた感じ。

ホームディレクトリの.cshrcに以下を追加

```
setenv PYTHONPATH ~/lib/python
```

SSHでログインして、

```
% mkdir -p ~/.local/lib/python2.7
```

インストールしたいモジュールはwww直下にtmpとかを作ってその中へ。
例としてRequests-OAuthlibをインスコしてみる。

```
% cd www
% cd tmp
% cd requests-oauthlib-master
% python setup.py install --user
```

で、CGIで動かすPythonスクリプト本体のヘッダにおまじないを書く。

```
#!/usr/local/bin/python
# -*- coding: utf-8 -*-
import sys, codecs
sys.stdout = codecs.getwriter("utf-8")(sys.stdout)
from requests_oauthlib import OAuth1Session
import json
import cgi

print "Content-Type: text/html\n"
```

これでさくらのレンタルサーバーでもTwitterクライアントが作れるようになりましたとさ。めでたしめでたし・・・。

でもまだbottle動かないの・・・。
Volumio 1.55 for Raspberry Pi 1 B+

RaspberryPi 1 B+にVolumio 1.55をinstallしているが苦戦中。

NASは baffaloのもの。192.168.1.7。
他のclientではguestで接続できている。
VolumioからはこのNASがマウントできない。

mount -t cifsの問題のようだ。

Volumioに
ssh root@192.168.1.105
で接続。passwordは volumio 

apt-get update
apt-get upgrade
かなり時間がかかる
apt-get cifs-utils

mount -t cifs -o ro,sec=ntlm,username=***  //192.168.1.7/share /mnt/NAS/baffalo

これでマウントできた。


PlaybackのAudio OutputをDACにして
自作のPM1704DACにUSB接続。
SystemのI2S driverをHifiberry+にすると音が出る。
ブラウザ上で充電割合を知る（Chrome限定ぽい？）

`navigator.getBattery`でバッテリー状態が取得できました。MacのChromeと、Android 5の標準ブラウザで動作確認。Safariだと`navigator.getBattery`が`undefined`になるようで、デスクトップPCだと常に`level=1`（100%）になる模様。

```html:html
<div>Battery is <span id="battery"></span>%</div>
```

```js:js
var n = navigator;

if (!n.getBattery) {
    set('unknown');
} else {
    n.getBattery().then(function(b){
        set((b.level*100)|0);
    });
}

function set(x){
    document.getElementById('battery').innerHTML = x;
}
```

https://jsfiddle.net/lovalotta/vvn8cary/
dateコマンドを使ってプログラムの実行時間を計測する

# unix時間の取得

```
$ date +%s
1436081057
```

# プログラムの実行時間を計測する

dateコマンドを使うことで、プログラムの実行時間を計測することができます。

```bash
#!/bin/bash
TIME1=`date +%s`
sleep 3
TIME2=`date +%s`
DURATION=`expr ${TIME2} - ${TIME1}`
echo "It took ${DURATION} sec."
```

これを実行すると、"It took 3 sec."と出力されます。
練習寫個簡單的 Block


碰到 ruby 裡面的 `do ... end` 這種程式碼片段，其中可以用 `|x|` 這樣用兩個  pipeline 的方式，傳入值。

例如

使用 ruby iterator - `each` 這個方法

``` ruby 
[1, 2, 3].each do |item|
	puts item
end
```

`each` 這個迭代器，就可以依序把陣列裡每個元素抓取出來，並透過 `item` 這個區域變數傳出來。

*能這樣傳，就和 Objective-C 幾乎天天在用的 block 是一樣的囉*

因為也被問到他到底怎麼傳出來的，所以就自己來寫一個 block 看看。

# 特性

- 一個 method 只能有一個 block ，而且是在 method 的最後面。
- **並非物件** - 他只是一個程式碼片段，
- 在原本的 method scope 中，用 `yeild` 把 block 的內容執行出來

# 來寫 method

## 定義  method

因此先來定義一個  method

``` ruby
def my_method_with_block
  yeild
end
```

這時候執行這個  method

```ruby
my_method_with_block do
end
```

這時候當然不會有什麼事情發生，下一步來傳入參數


## 從 method 傳入參數

現在來傳入一個字串，接著再執行 method 的時候，在  `do ... end` 裡面，把字串接到之後，再印出來。


``` ruby
def my_method_with_block
  yield "In the Block"
end

my_method_with_block do |string|
  puts string
end
```

執行後，就會印出 "In the Block" 字串

block 中 pipeline 中間的變數名稱則可以自由命名。

## 回傳值到 method

現在可以把值傳出去，那也可以把運算過後的結果，回傳回到 method 裡

``` ruby
def my_method_with_block
  new_value = yield 1
  puts new_value
end

my_method_with_block do |value|
  value + 1
end
```

執行完之後，結果就會印出 `2`

### 過程
1. 從 method 裡面傳個值 `1` 出來
2. 在 `do ... end` scope 裡面用 value 把這個參數接住
3. 對 value + 1 ，因為是在 scope 裡面的最後一行會自動回傳
4. 在 method 裡面，用 new_value 把值接下來並印出來

# 傳值的數量

最後就是傳值的數量，

在 `do ... end` 裡的 `|value|` 裡面可以放多個參數，如果取得的參數的數量，超過 method 傳進 `do ... end` 的數量，其餘的值就都會是 nil ；少於則沒有關係。

``` ruby
def my_method_with_block
  yield 1
end

my_method_with_block do |value1, value2|
  p value1
  p value2
end
```

這時候的輸出就會是

``` text
1
nil 
```

# More Information

[Ruby Blocks](http://www.tutorialspoint.com/ruby/ruby_blocks.htm)
[What Is the Difference Between a Block, a Proc, and a Lambda in Ruby?](http://awaxman11.github.io/blog/2013/08/05/what-is-the-difference-between-a-block/)
3x5の数字フォントをCSSだけで表現する

# ゲームのデバッグ表示用にドットフォントが欲しい
次の画像のようなものをCSSだけで実現します。

![スクリーンショット 2015-07-05 15.45.52.png](https://qiita-image-store.s3.amazonaws.com/0/84193/d9aaac9d-c74b-0fde-e6c2-26ae4df479dc.png)

コードはjsfiddleに置いておきました。
https://jsfiddle.net/lovalotta/gpy48vmr/

Firefoxは`zoom`を使えないため、`transform`でフォントサイズを変えてるんですが、いまいちうまいやり方が思いつきませんでした。


# 使い方
`<span data-digit="5"></span>`てすると`5`がでてきます。`color`で文字色（デフォルト黄色）を、`background-color`で背景色（デフォルト黒色）を変更できます。
Git core.editorにおけるエンコード指定の問題と解決

<!--
Title: Git core.editorにおけるエンコード指定の問題と解決
-->

# 問題点

Gitの`core.editor`の設定で、次のようにエンコード指定を含む設定がよく紹介されています。

```sh
[core]
    # UTF-8のエンコード指定を含むvimの設定例。
    editor = vim --nofork -c 'set fenc=utf-8' +1
```

このようにエンコード指定する主な目的は、コミットメッセージのエンコードにUTF-8を強制したいということだと思います。しかしこのように指定すると、`core.editor`によって開かれるあらゆるファイルの初期エンコードがUTF-8になり、問題が発生することがあります。

## 問題が発生する例

例えばSJISのファイル'foo.bat'において、変更点の一部だけでインデックスを更新するためにハンクを手動編集し、起動したエディタで何も変更せずに保存終了すると、次のようにエラーが発生します。

```sh
$ git add -p foo.bat
(略)
Stage this hunk [y,n,q,a,d,/,e,?]? e
error: patch failed: foo.bat:1
error: hoge.bat: patch does not apply
Your edited hunk does not apply. Edit again (saying "no" discards!) [y/n]?
```

これはエンコードがUTF-8のまま保存終了すると発生するようで、SJISに変更して保存終了するとエラーは発生せずに編集したハンクが適用されます。

# 実現したいこと

* コミットメッセージの編集時にはエンコードUTF-8を指定する。
* その他のファイルの編集時にはエンコード指定しない。(エディタの自動解釈に任せる。)

# 実現方法

`core.editor`にスクリプトを指定し、編集対象のファイルによってエディタの起動オプションを変更してエディタを起動すると良さそうです。

実際にそのような処理をするシェルスクリプトを作成しました ([sencom](https://github.com/takuyais/sencom))。
壁紙に標語を載せる

#動機
[google tasksからタスクリスト壁紙を作成する](http://qiita.com/sanyaitiya/items/9b4aef611039fae5d784)にて，Macの壁紙に予定表を貼ろうとしましたが難しかった，という話がありました．
運用してみた結果，予定表より標語や心構えを書いたほうが捗りそうだということと，Windowsでやりたいという要求が*私から*出たため，対応しました．

#環境の準備
##chocolatey
「[Windowsソフトを管理！パッケージ管理システムChocolateyでインストール、アップデートを簡単にする](http://millkeyweb.com/win-chocolatey/)」を参考にしてChocolateyをインストールします．homebrewのwindows版みたいなやつです．

##wkhtmltoimageとpandocの導入
`choco install wkhtmltopdf`と`choco install pandoc`で入ります．
wkhtmltoimageはwkhtmltopdfに含まれています．
パスが通っていない場合が有るので，その場合は「[環境変数の設定 - Windows8の使い方](http://pc-karuma.net/windows-8-environment-variables/)」を参考にして環境変数PATHにwkhtmltoimage.exeとpandoc.exeが含まれるフォルダを登録しておきます．

#文章作成
Markdownの編集にはHaroopadが良いのではないかと思います．
以下の様な文章が作成できます．

![uid000002_201104222351266ed5690b.jpg](https://qiita-image-store.s3.amazonaws.com/0/46551/218fb68c-c1c3-5f8e-1fbf-0d0e19f958ab.jpeg)

左が文章，右がMarkdownの適用後です．
いい感じに編集できます．

#壁紙作成
1.お好みのCSSを用意します．githubのマークダウンなら`git clone https://gist.github.com/2554919.git`
2.`pandoc -s <作成したマークダウン> -c <お好みのCSS> -o <出力先(html)>`
3.`wkhtmltoimage --width <画面横解像度> --height <画面縦解像度> <画像化するhtml> <出力画像名(jpg)>`

つまり以下のようなbatファイルを作成すれば，ダブルクリックで壁紙が生成されます．

```makeImage.bat
pandoc -s <作成したマークダウン> -c <お好みのCSS> -o <出力先(html)>
wkhtmltoimage --width <画面横解像度> --height <画面縦解像度> <画像化するhtml> <出力画像名(jpg)>
```
これでgithubのマークダウンを適用した場合，結果はこのようになります

![wallpaper.jpg](https://qiita-image-store.s3.amazonaws.com/0/46551/27472df8-efd4-e150-7047-82bf440b8ae0.jpeg)

#見た目を良くする
目標は達成しましたが，`あまりテンションが上がらない`ので以下の画像を背景にしてみます．

![wall1.jpg](https://qiita-image-store.s3.amazonaws.com/0/46551/28aff95e-103e-eacd-e667-eccd662dddf7.jpeg)

まずcssを編集します．まずbodyに`background-image: url("<背景画像パス>")`を加えることで，背景を指定します．
結果は以下です．
![wallpaper.jpg](https://qiita-image-store.s3.amazonaws.com/0/46551/62861aea-c9ad-e99b-18e6-55e48493a4af.jpeg)

*背景も文字も黒くて見えねえ！！！！！！！*

というわけで文字の見えをhtml+CSSで指定していきます．
まず，pandocの実行オプションに`--section-divs`を加えます．makeImage.batは以下のようになります．

```makeImage.bat
pandoc --section-divs -s <作成したマークダウン> -c <お好みのCSS> -o <出力先(html)>
wkhtmltoimage --width <画面横解像度> --height <画面縦解像度> <画像化するhtml> <出力画像名(jpg)>
```

これにより，Markdown上での#ごとにまとめられる`<div class="level1">`が生成されます．
あとは`.level1`の設定をCSSでしてやれば良いです．以下のものをcssに付け加えました．

```
.level1 {
  background-color: rgba(255, 255, 255, 0.8);
  border-radius: 30px;
  margin: 20px;
  padding: 10px 40px;
}
```

結果は以下です．
![wallpaper.jpg](https://qiita-image-store.s3.amazonaws.com/0/46551/77ea379a-e23e-6964-14fb-6d18d62f879b.jpeg)

まあまあ良い感じになったかと思います．
htmlで色々とできるので，*君だけの最強の壁紙を作ろう！！！！！！*
Java基礎メモ


# クラス,フィールド,メソッド
## クラス
データ(メンバ)と処理(メソッド)をまとめたもの

## フィールド
  * クラスがもつデータ
  * クラスの中に定義されたデータ(変数)下のコードでは,int型変数のiとString型変数のstr

## メソッド
  * 処理
  * SampleClass.javaの例では,`multiInt`と`printStr`
  * メソッドの型は返り値の型
  * `printStr`のように返り値を持たないメソッドもある
  
``` メソッドの定義
メソッドの型 メソッド名(引数のデータの型 引数名){
	処理;
	return 戻り値;
}
```

### メンバ
  * メソッドとフィールドを合わせてクラスのメンバと呼ぶ

## 例
``` Java:SampleClass.java
Class A{ //<== 'A'：クラス名

	//フィールド
	int i;		
	String str;

	//メソッド
	int multiInt(int j){
		return i * j;
	}

	void printStr(){
		System.out.println(str);
	}

}
```

### オーバーロード
* 同じクラス内に同じ名前で引数や戻り値が異なるメソッドを持つことができる

#### 例
``` Java:オーバーロード例

class A{
	int i;
	String str;
	
	//メソッド
    int multiInt(int j){
        return i * j;
    }

    //メソッド
    int multiInt(float f){
        return (int)(i * f);
    }


}
```

```Java:メソッドの呼び出し
int i = ols.multiInt(5);
int f = ols.multiInt(5.5f);
```
Docker で 「Couldn't read ca cert The filename, directory name, or volume label syntax is incorrect.」っていわれたら

:black_small_square: **現象**

windows で 
```
docker run hello-world
```
をした際に下記のメッセージが表示された。

```
Couldn't read ca cert The filename, directory name, or volume label syntax is incorrect.
```

:black_small_square: **対処法**

実は
```boot2docker up ```
時に下記のメッセージが表示されています。

```
To connect the Docker client to the Docker daemon, please set:
    export DOCKER_HOST=tcp://xxx.xxx.xx.xxx:xxxx
    export DOCKER_CERT_PATH=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    export DOCKER_TLS_VERIFY=1
```

っていわれているからそのとおりやりましょう

```
export DOCKER_HOST=tcp://xxx.xxx.xx.xxx:xxxx
export DOCKER_CERT_PATH=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
export DOCKER_TLS_VERIFY=1
```
色々な git stash


git stash コマンドを個人的によく使っていますが、オプションなどを忘れてしまいがちなので、備忘録として残しておきます。

:black_square_button: **スタッシュする**

```
git stash 
git stash save
```

:black_square_button: **メッセージをつけてスタッシュする**

```
git stash save "message"
```

:black_square_button: **スタッシュしたリストを表示**

```
git stash list 
```

:black_square_button: **N番目にスタッシュしたファイルの一覧を表示**

```
git stash show stash@{N}

```

:black_square_button: **N番目にスタッシュしたファイルの変更差分を表示**

```
git stash show -p stash@{N}
```

:black_square_button: **スタッシュを適用し、適用したスタッシュを削除する**

```
git stash pop # 最新のスタッシュを適用し、削除 
git stash pop stash@{N} # N番目のスタッシュを適用し、削除
```

:black_square_button: **スタッシュは適用し、適用したスタッシュを残す**

```
git stash apply # 最新のスタッシュを適用し、残す
git stash apply stash@{N} # N番目のスタッシュを適用し、残す
```

:black_square_button: **N番目のスタッシュを削除する**

```
git stash drop # 最新のスタッシュを削除
git stash drop stash@{N} # N番目のスタッシュを削除
```

:black_square_button: **unstage ファイルを全てスタッシュ**

```
git stash -k
```

:black_square_button: **untrackファイルも含めて全てスタッシュ**

```
git stash -u
```

:black_square_button: **スタッシュを全削除する**

```
git stash clear
```
Sprockets4を使ってRailsアプリケーションのJavaScriptをBabelで書く


sprockets-es6 を使う方法（http://magazine.rubyist.net/?0050-ECMAScript2015 ）ではなくて
sprockets-railsの4系を使ってみたかったので試した記録です。

とはいえまだ開発中なので

[Add support for Sprockets 4.x. by Andreis13 · Pull Request #259 · rails/sprockets-rails](https://github.com/rails/sprockets-rails/pull/259 "Add support for Sprockets 4.x. by Andreis13 · Pull Request #259 · rails/sprockets-rails")

のブランチを使いました。

アプリケーションを用意します。Railsは5系を使いました。

```
$ git clone https://github.com/rails/rails
$ ./rails/railties/exe/rails -v
Rails 5.0.0.alpha
$ ./rails/railties/exe/rails new myapp
```

Gemfileを書き換えます

```ruby:Gemfile（抜粋）
source 'https://rubygems.org'

gem 'babel-transpiler'
gem 'sprockets', git: 'https://github.com/rails/sprockets.git'
gem 'sprockets-rails', git: 'https://github.com/Andreis13/sprockets-rails.git', branch: 'sprockets-4'

gem 'arel', git: 'https://github.com/rails/arel.git'
gem 'rails', git: 'https://github.com/rails/rails.git'
```

sass-rails はこれからRails5対応するのかな？ 有効にしていると依存関係の都合でまだ使えないので無効にします。
ついでに予期せぬ事態が起きそうなので turbolinks も外します（というより途中動かない原因がよくわからなくて試しに外してみました）。

```ruby:Gemfile（抜粋）
# gem 'sass-rails', '~> 5.0'
# gem 'turbolinks'
```

適当にページ作ってみます

```
./bin/rails generate scaffold book title:text
```

`app/assets/javascripts/` 以下に `*.es6` という名前でES6(2015)のコードを書きます。
なんでもよかったので前述のるびま記事のコードを一部拝借しました。

```character.es6
'use strict';

class Character {
    constructor(x, y) {
        this.x = x;
        this.y = y;
        this.health_ = 100;
    }
    attack(character) {
        this.x += 10;
        character.x -= 10;
        character.health_ -= 10;
    }
    get health() {
        return this.health_;
    }
}
```

モジュールのロードはES6式ではなくSprockets式で……

```book.es6
//= require character

let c1 = new Character(0, 0);
let c2 = new Character(0, 0);
c1.attack(c2);

console.log('C1: ', c1);
console.log('C2: ', c2);
```

`rails s` して ‘http://localhost:3000/books‘ を開きます

![kobito.1436075488.763925.png](https://qiita-image-store.s3.amazonaws.com/0/229/bf62b4f5-fb16-5579-4986-33837aa9f006.png "kobito.1436075488.763925.png")

動いていそう。

（`books-source*.es6` の中身はなぜか空？）

動かした過程でいろいろいじったのを記憶をもとにメモ

```ruby:config/initializers/assets.rb
Rails.application.config.assets.precompile += %w( application.css )
Rails.application.config.assets.precompile += %w( application.js )
```

```html:application.html.erb
  <%= stylesheet_link_tag    'application', media: 'all' %>
  <%= javascript_include_tag 'application' %>
```
XCTestでAFNetwokingで実装した非同期通信のテストのときにNSNotificationを利用する


忘れないようにメモとして記録。

##テストするクラスにNSNotificationを通知する準備をする

**HTTPRequest.h**

```
#import <Foundation/Foundation.h>

/*
 HTTPRequestFinishedNotification
 通信終了時に発行される通知名
*/
extern NSString *const HTTPRequestFinishedNotification;

@interface HTTPRequest : NSObject

- (void)load:(void (^)(id result))completionHandler failureHandler:(void (^)(NSError *error))failureHandler;

@end
```

**HTTPRequest.m**

```
#import "HTTPRequest.h"
#import <AFNetworking.h>

NSString *const HTTPRequestFinishedNotification = @"HTTPRequestFinishedNotification";

@implementation HTTPRequest

- (void)load:(void (^)(id result))completionHandler failureHandler:(void (^)(NSError *error))failureHandler
{
    self.completionHandler = completionHandler;
    self.failureHandler = failureHandler;
    self.path = @"http://wwww.hogehoge.com/test.xml";
    
    AFHTTPRequestOperationManager *manager = [[AppManager sharedManager] HTTPRequestOperationManager];
    manager.responseSerializer = [AFXMLParserResponseSerializer serializer];
    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/xml", @"text/xml", nil];
    [manager GET:self.path parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
        [nc postNotificationName:HTTPRequestFinishedNotification  object:nil];
        self.completionHandler(responseObject);
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
        [nc postNotificationName:HTTPRequestFinishedNotification  object:nil];
        self.failureHandler(error);
    }];

}

@end
```

##テストクラスのメソッドでNSNotificationの通知を受け取ってテストを実行する

**SampleTest.m**

```
- (void)testHTTPRequest
{
    HTTPRequest *request = [[HTTPRequest alloc] init];

    XCTestExpectation *exp = [self expectationForNotification:HTTPRequestFinishedNotification
                                                       object:nil
                                                      handler:^BOOL(NSNotification * __nonnull notification)
                              {
                                  NSLog(@"%s, notification %@", __func__, notification);
                                  [exp fulfill];
                                  return true;
                              }];
    
    [request load:^(id result) {
        XCTAssertNotNil(result);
    } failureHandler:^(NSError *error) {
        XCTFail();
    }];

    [self waitForExpectationsWithTimeout:3 handler:nil];
}
```

こんな感じで実装すればNSNotificationを利用して、通信の完了通知を受けてから、テストを実行することができる（という理解であってる？）

非同期通信のテストってややこしい。
AtomのemmetパッケージにCakePHPのh()関数スニペットを登録する

CakePHPのViewを書いているとよく使う

```
<?php echo h($hoge); ?>
```

これをAtomのemmetパッケージにスニペットとして登録してみます

## emmetの設定画面

emmetの設定画面から

![スクリーンショット 2015-07-05 14.13.49.png](https://qiita-image-store.s3.amazonaws.com/0/26917/622fd5da-bfe0-195f-0fb8-2650fbb28c39.png "スクリーンショット 2015-07-05 14.13.49.png")


Extensions Pathを一応確認。念のため

## 設定ファイルを編集

Atomの設定画面からOpen Config Folderを押す

![スクリーンショット 2015-07-05 14.10.42.png](https://qiita-image-store.s3.amazonaws.com/0/26917/18702aff-1ae1-a653-d59b-d306d83c3624.png "スクリーンショット 2015-07-05 14.10.42.png")


snippets.jsonを編集します

```
{
  "variables": {
    "lang": "ja",
    "locale": "ja-JP"
  },
  "php": {
    "extends": "html",
    "snippets": {
      "eh": "<?php echo h(|); ?>"
    }
  }
}
```

"php"以下の部分を追記

これで、eh（勝手に命名）スニペットが使えるようになります

## 動作確認

![CLDEfk3Ssy.gif](https://qiita-image-store.s3.amazonaws.com/0/26917/d36f5ff1-3183-0993-c196-f80a1c072cc7.gif "CLDEfk3Ssy.gif")

typoを少しでも減らせると楽なので、覚えきれなくならない程度に活用していきたいです。
postgreSQL9.4インストール（on centos6.6 + vagrant）

##　目的
SQLで分析をしたく・・・
またredshiftも使う予定のため。。。ローカルはpostgreで。

## インストール手順

古いの削除

```
$ sudo service postgresql stop
$ sudo yum remove postgresql postgresql-libs postgresql-server
```

してから、

```
$ sudo yum install -y http://yum.postgresql.org/9.4/redhat/rhel-6-x86_64/pgdg-centos94-9.4-1.noarch.rpm

$ sudo yum install -y postgresql-devel postgresql94-server postgresql94-contrib
$ sudo service postgresql-9.4 initdb
$ sudo service postgresql-9.4 start
$ sudo chkconfig postgresql-9.4 on
$ ln -s /usr/pgsql-9.4/bin/psql /usr/bin/psql # 自分の場合なぜかパスが通らなかったので。（必要に応じて）
$ sudo ln -s /usr/pgsql-9.4/bin/postgres /usr/bin/postgres
```

## postgreSQLにユーザー追加

```
$ sudo su - postgres
postgre $ createuser --superuser [追加したいユーザー名]
postgre $ exit
$ psql -l
(テーブル一覧表示)
```
[ConoHa API] JavaScriptからConoHa APIを使う

## JavaScriptからversionにアクセス

早速JavaScriptから[version](https://www.conoha.jp/docs/identity-get_version_detail.html)にアクセスしてみます。スクリプトは以下の様な感じにしました。


```html
<script>
var url = "https://identity.tyo1.conoha.io/v2.0";
var type = "GET";

var access = function() {
    $.ajax({
      url: url,
      type: type,
      success: function(data) {
        $('#output').text(JSON.stringify(data));
      },
      error: function() {
        console.log('$.ajax error');
      }
    });
}

$(function(){
  access(); 
});
</script>
```

$.ajaxにURLとアクセスコマンドを入れて、成功時と失敗時のコールバック関数を登録しています。成功時にはHTML内のid='output'というdivタグに受け取ったデータを書き込みます。


Chromeを開いて、バージョンよ来い！と願うも以下のエラーが発生。

```
XMLHttpRequest cannot load https://identity.tyo1.conoha.io/v2.0. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.
```

これはAPIのドメインとアクセスしようとしているHTMLのドメインが異なることから発生するエラーです。Chromeがセキュリティーのためにそういうアクセスを禁止している訳ですね。


## JSONPでアクセス

この場合、JSONPでアクセスするとだいたい大丈夫です。早速JSONPにしてみましょう。

```js
var url = "https://identity.tyo1.conoha.io/v2.0?callback=?";
var type = "GET";

var access = function() {
    $.ajax({
      url: url,
      type: type,
      dataType: 'jsonp',
      success: function(data) {
        $('#output').text(JSON.stringify(data));
      },
      error: function() {
        console.log('$.ajax error');
      }
    });
}
```

```
Uncaught SyntaxError: Unexpected token :
```

うーん、サーバ側がJSONPに対応していないようです。。。


## 回避策

最終的にはPhoneGapからAPIを呼びますが、その際'Access-Control-Allow-Origin' エラーは発生しません。なので、当面Chrome上で問題回避できればそれで良いわけです。

幸い、以下のパラメータを付けてChromeを起動すると今回のエラーが発生しなくなります（セキュリティーが下がってしまいますが）。

```sh
--disable-web-security
```

Macではターミナルから以下のように起動します。

```sh
open -a Google\ Chrome --args --disable-web-security
```

これでJSONのコードでアクセスすると…

```json
{"version":{"status":"stable","updated":"2015-05-12T09:00:00Z","media-types":[{"base":"application/json"},{"base":"application/xml"}],"id":"v2.0","links":[{"href":"https://identity.tyo1.conoha.io/v2.0/","rel":"self"},{"href":"https://www.conoha.jp/docs/","type":"text/html","rel":"describedby"}]}}
```


キタっ


これで安心してJavaScriptからAPIを使用できます。次はトークンの発行とVM情報の取得を行います。


今回のコードは[GitHub](https://github.com/OttyLab/ConoHa_sample)においてあります。
bundle install パーミッションエラーの対応

通常ユーザで`bundle install`するときに、パーミッションがないよって怒られる場合があります。

これは、システムディレクトリにgemをインストールしようとしているので、パーミッションでエラーが出るのです。

それを回避する方法が

```bash
bundle install --path vendor/bundle
```

です。

```bash:.bundle/config

BUNDLE_PATH: vendor/bundle
BUNDLE_DISABLE_SHARED_GEMS: '1' #システムにインストールしたgemは使わない設定
```
という設定をしておくことでもOKなようです。


***

参考URL
http://cortyuming.hateblo.jp/entry/20140401/p2
Githubのプルリクでインデント部分の差分を表示させない方法

# インデント部分の差分表示をさせない方法
プルリクのページに行くと
`https://xxx/xxx/xxx/pull/25/`
のようなURLになっていると思います。このURLに`files?w=1`を付け足します。
`https://xxx/xxx/xxx/pull/25/files?w=1`
すると、インデント部分の差分表示を自動的に消してくれます。
これで純粋にコードの削除、追加部分だけを目で追える形になります！
Linux - ユーザをグループに追加する


# Linux - ユーザをグループに追加する

```bash
# ダメ（追加ではない）
sudo usermod -G apache username
```
この方法だと、既に設定されていた他のグループの設定が全部飛んでしまいます。
これは「追加」というコマンドではなく、「指定されたグループに設定(user **mod** )」するというコマンドです。

なので、このやり方でやる場合は

```bash
# 抜けがあると大変なのでおすすめしない
sudo usermod -G group1,group2,...,newgroup username
```
のような形で指定しないといけません。

追加するには

```bash
sudo gpasswd -a username group # の形です
# 例
sudo gpasswd -a username apache
```
という形で指定する必要があります。

---
参考URL
[usermod -G でユーザに新しいサブグループを追加してはいけない](http://d.hatena.ne.jp/thegoodbadugly/20130116/1358316032)
[Swift]文字列のが特定の文字から始まってるかチェックする

特定の文字から始まってる文字のみ制御したい場合があるかと思います。
そうした場合、以下のようにバリデートすることができます。

```
var frenchToast = "フレンチトースト"
var frenchDressing = "フレンチドレッシング"
if (frenchToast.hasPrefix("フレンチ")) {
	println("フランス的な食べ物のひとつです")
}

if (frenchDressing.hasPrefix("フレンチ")) {
	println("フランス的な食べ物のひとつです")
}
```
このように、`hasPrefix()`を使います。

ちなみに、最後が特定の文字で終わってる文字で制御したい場合は以下のように書きます。

```
var yamaGirl = "山ガール"
var moriGirl = "森ガール"
if (yamaGirl.hasSuffix("ガール")) {
	println("日本の、ある趣味をする女子を象徴したもののひとつです")
}

if (moriGirl.hasSuffix("ガール")) {
	println("日本の、ある趣味をする女子を象徴したもののひとつです")
}
```
Rails - 通貨フォーマットの扱い



**ドルの通貨フォーマットに変換**

```erb
<%= number_to_currency(123456789) %>
```
→ $123,456,789.00



**小数点5つまで表示**

```erb
<%= number_to_currency(123456789, :precision => 5) %>
```
→ $123,456,789.00000



**小数点をスペースで区切る**

```erb
<%= number_to_currency(123456789, :separator => " ") %>
```
→ $123,456,789 00



**桁区切りをスペース**

```erb
<%= number_to_currency(123456789, :delimiter => " ") %>
```
→ $123 456 789.00



**通過単位を「￥」**

```erb
<%= number_to_currency(123456789, :unit => "￥") %>
```
→ ￥123,456,789.00



**通過単位を「JPY」**

```erb
<%= number_to_currency(123456789, :unit => "JPY") %>
```
→ 123,456,789.00JPY
**※　この場合は、後ろにつくので注意**



**通貨単位を後ろ**

```erb
<%= number_to_currency(123456789, :format => "%u%n", :unit => "￥") %>
```
→ 123,456,789.00円
**ここでの「%u」はunitの略、また「%n」はnumberの略**
入れ替えれば、順番も逆になる


**マイナスのフォーマット**

```erb
<%= number_to_currency(-123456789, :negative_format => "%u-%n") %>
```
→ $-123,456,789.00



**円のロケールを設定**

```yaml
# config/locales/jp/yml
jp:
  number:
    currency:
      format:
        unit: "円"
        format: "%n%u"
        negative_format: "-%n%u"
        precision: 0
```

```erb
<%= number_to_currency(123456789, :locale => 'jp') %>
```
→ 123,456,789円


***

**参考URL**
http://railsdoc.com/references/number_to_currency
[Swift]値がnilかどうかで異なる値を返す


```
var nilValue:String? = nil
var result = nilValue ?? "This is nil"
```

Swiftは基本的にnilが値になる変数を宣言することができませんが、変数の後に?をつけることで、nilを許可することができます。（オプショナル型）
nilが利用出来るため、上記のように「nil演算子（ x ?? 返したい値）」が可能となります。
Javaでファイルを読み込んで任意のファイル形式に出力する

# 最初におまけ
GithugGistでコード公開しました！
Javaを書いたことがある人はコードを見れば、ほぼ理解できると思います。
*コピペでも動くと思います
https://gist.github.com/TsujiTakuya55/b261bd7e56e3c3005d91

# ファイルを読み込む
javaには`Fileクラス`というクラスがあり、このクラスがFileを管理してくれます。
自分のパソコンの中にあるファイルを読み込みたい場合は
`File file = new File("/home/xxx.csv");`
などでファイルを読み込めます。

# ファイルの中の文字列を読み込む
<pre>BufferedReader br = new BufferedReader(new FileReader(file));
str = br.readLine();</pre>
このような書き方でファイルの中の文字列を読み込むことができます。
1つ1つ説明していくと
`BufferedReaderクラス`はファイルの読み書きを行うクラスです
`new FileReader(変数名)`←読み込むファイルの変数名を書く
`readLineメソッド`は文字列を1行ずつ読み込むメソッドです。
なので正確に言うと、
「ファイルを読み込んで、その中に書いてある文字列を1行ずつ読み込んでいる」
という処理になります。



# ファイルの出力
読み込んで自分の任意の形に書き換えたファイルを出力させます。
`FileOutputStream OutPutFile = new FileOutputStream("/home/xxx.csv");`
macのatom上でTypeScriptのlinterを使う


ちょっくらTypeScriptでも勉強するかと思ってlinter-tslintを入れた。環境はOS X 10.10.4。
公式に書いてあることをそのままやっただけ。

# 前提
以下は既にインストールされているものとする。
* node
* atom

# 各種インストール
atomのlintツールは、Linterとatom-lintの二つがある。
今回は見た目がかっこいいという理由で、Linterでの導入手順を示す。

まず、Linterとlinter-tslintをインストールする。
atomエディタ上からでも、コマンドラインからでもよい。
コマンドラインからだと、以下のような感じ。

```
$ apm install linter
$ apm install linter-tslint
```

あと、tslintのバイナリが必要なので、```$ npm install -g tslint```でインストールする。

# パスを通す
atom上のlinter-tslintのSetting画面で、```$ which tslint```で表示されたパスを入力。
![Kobito.DKKPNN.png](https://qiita-image-store.s3.amazonaws.com/0/28464/17ed6843-36c5-14e6-ee16-f11c4285f394.png "Kobito.DKKPNN.png")

![Kobito.uL86cW.png](https://qiita-image-store.s3.amazonaws.com/0/28464/ed107ca4-5486-4511-53d9-b4b6db9c0546.png "Kobito.uL86cW.png")


一度atomを終了して再度立ち上げると、tslintがatom上で動作するようになる。

# 注意点
## nvm+zsh環境
nvm+zsh環境の場合は、nvmのロード処理を.zshrcではなく.zshenvに記述しなければならない。nvm公式のシェルスクリプトでは、.zshrcに以下のような記述が追加される。

```
export NVM_DIR="/Users/username/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"  # This loads nvm
```

これを、コメントアウトし、.zshenvに同様の内容を記述すればOK.

## nodeのversion
nodeの0.12系では、適切なパスをlinter-tslintに設定してもnot foundになる。
自分はnvmを使っていたので、0.10系を利用するように変更すると解決した。

```
$ nvm install 0.10
```

# 参考
[linter-tslint](https://atom.io/packages/linter-tslint)
[AtomのLinter](http://rochefort.hatenablog.com/entry/2014/08/02/080200330)
Nagios4.1.0rc1 + CentOS6.6 + apache

#Nagiosのインストールから監視を始めるまでのあれこれ
※面倒臭いから全部rootアカウントでやってるけど良い子は真似しちゃダメだぞ！

## What's Nagios
→ [Nagios](https://www.nagios.org/)

## 準備
- アカウント作成

```
# useradd -d /usr/local/nagios nagios
# chmod 755 /usr/local/nagios
# groupadd nagcmd
# usermod -a -G nagcmd nagios
```

- ライブラリ

```
# yum install -y yum install wget httpd php gcc glibc glibc-common gd gd-devel make net-snmp openssl openssl-devel
``` 

## install
- コア

```
# wget http://sourceforge.net/projects/nagios/files/nagios-4.x/nagios-4.1.0/nagios-4.1.0rc1.tar.gz/download?use_mirror=jaist
# tar xf download\?use_mirror\=jaist
# ls 
 download\?use_mirror\=jaist       nagios-4.1.0rc1/
# cd nagios-4.1.0rc1/
# ./configure --with-command-group=nagcmd
# make all                      
# make install                  
# make install-init             
# make install-commandmode      
# make install-config           
# make install-webconf  
```
- プラグイン

```
# wget http://nagios-plugins.org/download/nagios-plugins-2.0.3.tar.gz
# tar xf nagios-plugins-2.0.3.tar.gz
# cd nagios-plugins-2.0.3
# ./configure --with-nagios-user=nagios --with-nagios-group=nagios --with-openssl
# make 
# make install        
```

## エラーチェック(設定とかに間違いがないか)
`$ /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg`

## 起動(+自動起動)
```
# /etc/init.d/nagios start
# chkconfig nagios on
```


***
## その他
- WebUIでInternalServerErrorが出る
 - SELinuxを切ってみる->[こことか参考](http://rfs.jp/server/security/selinux01.html)

```
# getenforce        
Enable
# setenforce 0        
# getenforce
Permissive

# /etc/init.d/nagios restart
```


- WebUIから外部コマンドを使おうとしてCould not stat() command file '/usr/local/nagios/var/が出る
  - 例えば : Web画面からアラート通知のON/OFFを切り替えたり…
  - Disable notifications for this service -> commit -> Error!
  - [ここを参考にしてみる](http://support.nagios.com/forum/viewtopic.php?f=7&t=27662)

```
# ls -l /usr/local/nagios/var/rw/
合計 0
prw-rw----. 1 nagios nagcmd 0  7月  4 20:36 2015 nagios.cmd
srw-rw----. 1 nagios nagcmd 0  7月  4 20:33 2015 nagios.qh
# ls -l /usr/local/nagios/var/ | grep rw
```
とかいろいろと調べるけど結局は

```
# usermod -G nagios nagios
# usermod -G nagcmd apache
```
っぽい。

```
grep nag /etc/group
nagios:x:501:
nagcmd:x:502:nagios,apache
```
こーなってれば多分大丈夫。
node.jsの管理をnodebrewに変更

#はじめに
nodebrewでnode.jsをインストールすると任意のバージョンのNode.jsを簡単にインストールでき、バージョンの切り替えも超ラクみたい！まーそんなに困ってるわけじゃないけどラクできるなら勉強がてら入れなおしてみようと思いました。

#homebrewのnodeをuninstall
↑なんかルー語っぽくないですか？w
どうでもいいですか？w
はじめにnodeパッケージがあれば削除しておきます。

`$ brew uninstall node`

これで、僕の寒いギャグと一緒にnodeパッケージを闇に葬りました。

#nodebrewをインストール
~~nodebrewはhomebrewのパッケージになっているのでbrew installで入れました。~~
~~`$ brew install nodebrew`~~

~~他にもよく見るインストール方法が下記です。~~
~~どちらの方がいいんでしょうか？ってか何が違うの？~~
~~「俺、知っているよ」って方いらっしゃいましたらご教授願います。~~

[ここ](https://github.com/hokaccha/nodebrew)を見ながら言われるがまま一行だけ入力してみるとなされるがままにインストール開始
`$ curl -L git.io/nodebrew | perl - setup`

```lang:なされるがまま状態
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:02 --:--:--     0
100 22610  100 22610    0     0   9145      0  0:00:02  0:00:02 --:--:--  9145
fetching nodebrew...
install nodebrew in $HOME/.nodebrew

========================================
Add path:

export PATH=$HOME/.nodebrew/current/bin:$PATH
========================================
```
最後に「パスぐらいは自分で通しなさいよね！この〇〇野郎」と言われてる気がしたので
設定ファイルに怒られる前に下記を追加しときました。

上記2種のインストール方法共通ですので必ずパスは通しておきましょう。

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


#node.jsをインストール
準備は出来たので早速node.jsをインストールしていきましょう
しょうもない事ばっかり言って疲れてきたのでここからはスピードUPしていきますね・・・

`$ nodebrew ls-remote`

して

`$ nodebrew install-binary v0.12.6`
(記事作成時点の最新バージョンです)

今回はバージョンを確認してインストールしましたが他にもインストール方法はあります。

```lang:
$ nodebrew install-binary stable    # stableバージョンをインストール
$ nodebrew install-binary latest    # 最新バージョンをインストール
$ nodebrew install-binary v0.12.x   # v0.12系の最新バージョンをインストール
$ nodebrew install-binary 0.12.2    # vを省略できる
```

node.jsのバージョンを指定する

`$ nodebrew use v0.12.6`

バージョンの確認

`$ node -v`

と

`$ npm -v`

で

バージョンが表示されれば無事完了です。
以上で今後node.jsでバージョンが違っても困ることは無いはず・・・
今は、インストール時にちらちら見えたio.jsが気になってます。

以上、それでは良い週末を！
SimpleHTTPServerでmime typeを追加、文字コードを指定

## 参考

* [e'x-pres's: Python Simple HTTP Server with SVG image type](http://gotmetoo.blogspot.jp/2013/07/python-simple-http-server-with-svg.html)

## `.md`を`text/plain`でmime登録

```py:httpsrv.py
#!/usr/bin/python
import SimpleHTTPServer
import SocketServer
import mimetypes

PORT = 8000

Handler = SimpleHTTPServer.SimpleHTTPRequestHandler

Handler.extensions_map['.md']='text/plain;charset=UTF-8'
httpd = SocketServer.TCPServer(("", PORT), Handler)

print "serving at port", PORT
httpd.serve_forever()
```

> Handler.extensions_map['.md']='text/plain;charset=UTF-8'

が重要

## 起動

```bash:
python httpsrv.py
```
電子回路 > FET > ノーマリ・オン / ノーマリ・オフ

引用: ダイオード・トランジスタ回路入門 by 岡山 努さん

5章のまとめの抜粋

> (1) 電解効果トランジスタはG-S間電圧によって制御される電流源として動作します。
> (2) J-FETは高抵抗信号源の低ノイズ増幅や電圧制御可変抵抗として用います。
> (3) J-FETはふつうノーマリ・オンのデプレッション形FETです。
> (4) パワーMOS-FETはふつうノーマリ・オフのエンハンスメント形FETです。

上記のJ-FETとパワーMOS-FETの違いで気をつけないといけないこと

5.2.1 MOS-FETの基礎
> エンハンスメント形であることは電力素子においては大変重要な特性です。もし電力用素子がJ-FETのように起動時にオンとなるデプレッション形であれば、大電力を扱うD-S間電圧が立ち上がる前に、制御電圧であるG-S間電圧を確定しておく必要があります。オフ時には主電源がオフになるまで制御電圧の喪失は許されません。

故障モードがショートかオープンかと同様に、こういう素子の特性を把握しておかないと、実運用の時にトラブルのもとになるのだろう。
VBAHaskellの紹介 その20（有理数の計算）

　とあるブログ記事でVBA（というかコンピュータ一般）で小数演算が正確にできないことについて書かれているのを読んだ。
　表したい数値が無理数だと話は別だが、分数ならば有理数をあらわす型を作って数として表現し、正確な計算ができるように演算を定義する、というのはよくある。そこでVBAでも有理数を扱うサンプル的なプログラムを作ってみた。あえてデータ構造をクラス化せず、以下のような単純な配列で分子と分母を保持して、関数主体で実装した。
　分子 → 配列の最初の要素
　分母 → 配列の2番目の要素
　符号 → 分子に付ける
　分母と分子は互いに素なLong値（make_ratio関数で作成した場合）
　（LongLongにしてもいいけど・・・）

```vbnet
'有理数の生成
Function make_ratio(ByRef a As Variant, ByRef b As Variant) As Variant
    Dim gcd As Long:    gcd = getGcd(a, b)
    make_ratio = VBA.Array(Sgn(a * b) * (Abs(a) \ gcd), Abs(b) \ gcd)
End Function

    '最大公約数
    Public Function getGcd(ByVal a As Long, ByVal b As Long) As Long
        If a = 0 Then
            getGcd = 1
        ElseIf b = 0 Then
            getGcd = Abs(a)
        Else
            getGcd = getGcd(b, Abs(a) Mod Abs(b))
        End If
    End Function
```
`make_ratio` を含め、以下の関数を作った。[^1]
	
|   関数      |    内容   |        |
|:----------------|:-------- |:-------- |
|make_ratio    |有理数の生成      ||
|ratio2double|Doubleに変換||
|ratio2str|文字列に変換||
|ratio_plus    |有理数の加算||
|ratio_negate|有理数の符号変更||
|ratio_minus|有理数の減算||
|ratio_mult|有理数の乗算||
|ratio_pow|有理数のベキ乗||
|ratio_divide     |有理数の除算||
|ratio_sgn     |有理数の符号||
|ratio_abs     |有理数の絶対値||
|ratio_equal|有理数の比較  (a = b)||
|ratio_not_equal|有理数の比較  (a <> b)||
|ratio_less|有理数の比較  (a < b)||
|ratio_less_equal|有理数の比較  (a <= b)||
|ratio_greater|有理数の比較  (a > b)||
|ratio_greater_equal|有理数の比較  (a >= b)||

元の記事では、1から0.001を千回引いても0にならないことから話が始まっていたので、それがどうなるか確認してみる。

```vbnet
r1=make_ratio(1,1)       ' 1/1
r2=make_ratio(1, 1000)   ' 1/1000
' 1から1/1000を1000回引いた結果
printM repeat_while(r1, p_true, p_ratio_minus(,r2), 1000)
  0  1000                ' 0/1000
' 1から1/1000を1003回引いた過程を配列に入れる
m = generate_while(r1, p_true, p_ratio_minus(,r2), 1003)
' その各要素をDoubleに変換する
d = mapF(p_ratio2double, m)
' 先頭6要素を確認
printM d,6
  1  0.999  0.998  0.997  0.996  0.995
' 末尾6要素を確認
printM d,-6
  0.002  0.001  0  -0.001  -0.002  -0.003
```
問題はなさそうだ。
比較演算があるのでソートもできる。[^2]

```vbnet
' 分子の列（-20～20 のランダム整数10個）
nums = mapF(p_getCLng,mapF(p_rnd(,20), repeat(-20, 10)))
' 分母の列（1～20 のランダム整数10個）
dens = mapF(p_getCLng,mapF(p_rnd(,20), repeat(1, 10)))
' zipWithに分子の列、分母の列を与えて有理数列を作れる
m = zipWith(p_make_ratio, nums, dens)
' 表示してみる（ratio2str関数で文字列化）
printM mapF(p_ratio2str, m)
  4/3  -5/7  11/18  -5/17  -8/1  17/11  5/18  5/9  -3/14  -16/11
' 比較演算として ratio_less を使ってソート
m2 = subV(m, sortIndex_pred(m, p_ratio_less))  
' ソート後の有理数列を表示してみる
printM mapF(p_ratio2str, m2)
  -8/1  -16/11  -5/7  -5/17  -3/14  5/18  5/9  11/18  4/3  17/11
```

正確性はいいのだが、以下の点で不満だ。
・遅い（計算のたびに通分計算が入る）
・オーバーフローが心配（ベキ乗とかで問題になりそう。LongLongにしても同じことだ。）
・Haskell関係ない（）

***
[VBAHaskellの紹介 その19（ParamArrayとswapVariant）](http://qiita.com/mmYYmmdd/items/97c1580e0e71e15df176)
[VBAHaskellの紹介 その1（最初はmapF）](http://qiita.com/mmYYmmdd/items/c731edf943acc0a0ebe9)
ソース https://github.com/mYmd/VBA

[^1]: [misc_ratioモジュール](https://github.com/mYmd/VBA/blob/master/misc_ratio.bas)
[^2]: [VBAHaskellの紹介　その8　（ソート関連）](http://qiita.com/mmYYmmdd/items/dd047d6af8e486465840)参照