OmniAICreator/Qiita-1.07M huggingface dataset:
プレイリスト(m3u)を自動修正するプログラム

WMPでファイルを移動したときにプレイリスト(m3u)からファイルを見つけられないことがあるので自動修正するプログラム書いてみた。
※ファイル名が変更されている場合は見つけられません。
いくつかハマった点としては、

* fileをsjisで読み込んで文字化け(MS932で解決)
* 再帰的探索からfilePathを返すのに苦労(解決するまでnullばかり)
* ほぼ書き終わった後にnioを使う探索方法を知った

```java
public class m3uFix {
	private static String filePath;

	public static void main(String[] args) {
		String m3uFileName="G:\\20140620 - コピー.m3u";
		try{
			File file = new File(m3uFileName);
			BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file),"MS932"));
			BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file.getAbsolutePath()+"_fix.m3u"),"MS932"));
			String str;
			str=br.readLine();
			while(str != null){
				if(!str.startsWith("#") && str.length()>8){
					str=str.replace("\\", "\\\\");
					File mp3File = new File(str);
					if(!mp3File.exists()){
						System.out.print(str+"\n");
						int index=str.lastIndexOf("\\");
						String filename=str.substring(index+1);
						filePath=null;
						String fixedPath=listFiles("E:\\MP3\\",filename);
						//System.out.println(fixedPath);
						if(fixedPath!=null){
							bw.write(fixedPath+"\n");
							System.out.println(fixedPath);
						}else{
							//探索して発見できなかった場合そのまま
							str=str.replace("\\\\", "\\");
							bw.write(str+"\n");
						}

					}else{
						//mp3ファイルが存在するのでそのまま書込む
						str=str.replace("\\\\", "\\");
						bw.write(str+"\n");
					}
				}else{
					bw.write(str+"\n");
				}
				str = br.readLine();
			}
			br.close();
			bw.close();
		}catch(FileNotFoundException e){
		  System.out.println(e);
		}catch(IOException e){
		  System.out.println(e);
		}
	}

	public static String listFiles(String directoryPath,String filename){
		File dir=new File(directoryPath);
		File[] files=dir.listFiles();
		for(int i=0;i<files.length;i++){
			File file=files[i];
			if(file.isDirectory()){
				listFiles(file.getAbsolutePath(), filename);
			}
			if(filePath!=null){
				break;
			}else{
				filePath=check(filename, file);
			}
		}
		return filePath;
	}

	private static String check(String filename,File file){

		if(!filename.equals(file.getName())){
			return null;
		}
		System.out.println("発見");
		return file.getAbsolutePath();
	}

}
```

参考：[Java ディレクトリから再帰的にファイルを検索](http://chat-messenger.net/blog-entry-55.html)
お使いいただく場合は
String m3uFileName="G:\20140620 - コピー.m3u";
String fixedPath=listFiles("E:\MP3\",filename);
以上2行を自分の環境に合わせて変更してください。
Imagick + Memcacheで簡易サムネイルキャッシュを作ってみる


## 環境
 * CentOS 7.X
 * Imagick
  * ImageMagick
 * Memcached

この構成でやるときに、いつも名前で混乱する。

 1. ImageMagickは、サーバーにインストールするライブラリ
 1. Imagickは、ImageMagickをPHPから使うときのラッパーライブラリ
 1. Memcachedは、キャッシュサーバー
 1. memcacheは、PHPのライブラリだけど、memcachedというライブラリもある……

## インストール
 * Memcachedインストール

```bash:Memcached
# yum install memcached
# systemctl enable memcached.service
# systemctl start memcached.service
```

* memcacheインストール

```bash:memcache
# yum -y install php-pecl-memcache

# yum install php-pear
# yum install php-devel
```

* ImageMagickインストール

```bash:ImageMagick
# yum install ImageMagick*
```

* Imagickインストール

```bash:Imagick
# pecl install Imagick
# php -i | grep Imagick
```


## サンプルコード
```php:image-proxy.php
<?php
/**
 * 画像サムネイル＆キャッシュ
 * @use 
 * http://{your_domain}/scripts/image-proxy.php?url=http://upload.wikimedia.org/wikipedia/commons/2/2a/2008_ZB_Viper_SRT-10_blue.jpg
 */
define('THUMB_WIDTH',	160);
define('THUMB_QUARITY', 80);

$url = $_GET['url'];

$imagick = new Imagick();

// URLをキーとして画像を保存
$memcached = new Memcached();
if ($memcached) {
    $memcached->setOption(Memcached::OPT_BINARY_PROTOCOL, true);
	
    $memcached->addServer('127.0.0.1', 11211);
	
	$blob = $memcached->get($url);
	if ($blob) {
		// キャッシュあり
		trigger_error("Stored Cache : YES");
		$imagick->readimageblob($blob);
	} else {
		// キャッシュなし
		trigger_error("Stored Cache : NO");
		$handle = fopen($url, 'rb');
		$imagick->readImageFile($handle);
		$imagick->resizeImage(THUMB_WIDTH, 0, 0, 0);
		$imagick->setImageFormat('jpeg');
		$imagick->setImageCompressionQuality(THUMB_QUARITY);
		// キャッシュセット
	    if (!$memcached->set($url, $imagick->getimageblob())) {
	    	trigger_error("Could not set Blob."); //  サーバーが落ちている
	    }
	}
}

// 出力
header("Content-Type: image/jpeg");
exit($imagick->getImageBlob());
?>
```
この後、最新の環境（Laravel + GD + Intervention Image）で作りそうな雰囲気なので、PearとかPeclの全盛期に書いた旧版を載せてみる。
Appアナリティクスのデータをcsv形式でダウンロードして閲覧する方法

# 前書き

Appアナリティクスのデータをcsvでダウンロードできたら便利だよなーと思ってできるのか調べてみたところ、[公式のFAQ](https://itunespartner.apple.com/en/apps/faq/App%20Analytics_Data#76361695)にこのように書いてあったのでできるようです。

```
Can I export data from App Analytics?
Yes. To do so, go to the Metrics pane in App Analytics and click the share button below the chart.
Your data will be exported in CSV format. You can also export data from the Sources pane.
```

今回は実際にダウンロードしてデータを閲覧するまでの流れを説明しようと思います。
Appアナリティクス自体のことについては[iTunes ConnectのApp Analyticsを使ってみた](http://qiita.com/koogawa/items/0a681469899bafb40f3e)の記事が詳しいと思います。

# 手順

## csvデータをダウンロードする

### Appアナリティクスを表示する

iTunesConnectの下記のアイコンをクリックします。
![AppAnalytics.png](https://qiita-image-store.s3.amazonaws.com/0/100736/83e7187c-6e64-87ec-93ef-1eeaf56b70ee.png)

### アプリを選択する

アプリの一覧が出てくると思うので、その中から自分が今回csvをダウンロードしたいアプリをクリックします。

### csvをダウンロードする

公式に書かれている通り、メトリクスタブかソースタブからダウンロードできます。

<img width="386" alt="スクリーンショット 2016-02-08 10.17.04.png" src="https://qiita-image-store.s3.amazonaws.com/0/100736/75f823d8-e324-034f-e60a-2681b943f9e0.png">

メトリクスタブの場合はこのような表示が、
<img width="203" alt="スクリーンショット 2016-02-08 9.40.48.png" src="https://qiita-image-store.s3.amazonaws.com/0/100736/5fde9753-a7d2-8813-38e5-931a9659e1bb.png">
ソースタブの場合はこのような表示が上の方にされているはずです。
<img width="211" alt="スクリーンショット 2016-02-08 9.41.01.png" src="https://qiita-image-store.s3.amazonaws.com/0/100736/cc947c53-9934-8109-b341-ecc8b6284315.png">
いずれも、右端のボタンをクリックすればcsv形式のデータがダウンロードできます。

で、この時にダウンロードされるデータの内容なのですが、左ペインで選択している項目のデータがダウンロードされるようです。
例えばメトリクスタブでインストール数を選択しているとします。
<img width="189" alt="スクリーンショット 2016-02-08 10.16.03.png" src="https://qiita-image-store.s3.amazonaws.com/0/100736/0dc097f6-0256-d874-d160-cb733a3c3b06.png">
この状態でダウンロードを行うと、インストール数のみのデータがダウンロードされます。

## 文字コードを直す

上記の操作ですぐにデータを見られるかと思ったら文字化けしていて見られませんでした。
<img width="387" alt="スクリーンショット 2016-02-08 9.44.22.png" src="https://qiita-image-store.s3.amazonaws.com/0/100736/85a219af-86c9-2fbb-3447-46be168e319d.png">
ので、エンコーディングを直します。
以下の方法は基本的にはMac版のExcelを元に書いていますが、Numbersの場合はテキストファイルウィザードの手順がないだけで、同じような操作で解決できるようです。

### csv形式で保存する

テキストエディタでcsvファイルを開いて複製します。この時、エンコーディングはUnicode(UTF-16)にします。
<img width="516" alt="スクリーンショット 2016-02-08 9.55.55.png" src="https://qiita-image-store.s3.amazonaws.com/0/100736/8ba5b03a-5028-e748-3b88-9eacf06c8684.png">

### csvファイルを開く

Excelの「ファイルを開く」から上記のcsvを開きます。
もしくは既に開いているExcelファイルにデータを挿入したい場合はデータタブの「テキスト」を選択します。
<img width="1280" alt="スクリーンショット 2016-02-08 10.01.09.png" src="https://qiita-image-store.s3.amazonaws.com/0/100736/e077a87c-ed24-a335-5d2b-a2f5a6e3d800.png">

### テキストファイルウィザードの設定

1ページ目は特に何も変更をせずに「次へ」をクリックします。
<img width="670" alt="スクリーンショット 2016-02-08 10.12.11.png" src="https://qiita-image-store.s3.amazonaws.com/0/100736/1a5fde33-0d7f-0cd9-4241-7de5058a37d4.png">

2ページ目は区切り文字の「コンマ」にチェックを入れて「完了」ボタンをクリックしてください。
<img width="670" alt="スクリーンショット 2016-02-08 10.12.19.png" src="https://qiita-image-store.s3.amazonaws.com/0/100736/e0b276c0-79ac-4912-9359-d33ee6fe07c1.png">

これで無事に文字化けしていないデータを閲覧することができます。
<img width="218" alt="スクリーンショット 2016-02-08 10.13.54.png" src="https://qiita-image-store.s3.amazonaws.com/0/100736/db23769a-b8c5-9ce1-4d04-c6b8914d2ef4.png">
rgb分解 結合 

いつも忘れてしまう。RGB色の分解/結合 

##rgb分解
```
var r = rgb >> 16 & 0xFF;
var g = rgb >> 8 & 0xFF;
var b = rgb & 0xFF;
```

##rgb結合
```
var rgb = (r << 16 | g << 8 | b);
```
windows8.1でユーザーフォルダ名を変える

# 前置き
windows8.1で最初にユーザーを作るときに、そのままユーザーフォルダが全角でどっかーんしてしまい、その後誤作動が起きるソフトのインストール位置を変えたりして対処してきました。しかし、Google App EngineのSDKでtempファイルのパスに全角が入ると動かないということが起こり、環境変数TEMPを変えるのもなぁと思って思い切ってユーザーフォルダ名を変えました。
結論から言うと意外と簡単でした。ずっとめんどくさいだろうなぁと遠ざけていたのはなんだったのかという…

# 手順
0. 変えたいユーザーは予めローカルユーザーに切り替えたほうがいいかもです
1. まず、Administrator権限のあるユーザーを作る(ここでは`adminuser`とします)
2. 再起動して`adminuser`にログイン
3. 変えたいユーザーのユーザーフォルダをリネーム
4. `Win`+`R`から`regedit`と入力してレジストリエディターを開く
5. `HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList`の中の変えたいユーザーフォルダのパスが入っているものを書き換える(`S-1-5-**`のどれかの中の`ProfileImagePath`です)
5. ローカルユーザーに切り替えた場合は再度紐づけ
6. ログアウトして変えたユーザーにログインして確認(紐づけた場合は表示が元のままかもしれませんが、クリックしてパスを見るとしっかり変わってると思います)
7. またレジストリエディターを開いて`Ctrl`+`F`でそのフォルダを検索しつつ適当に置き換え(おそらく置き換えなくても問題は出ませんが、のちのち使用時に再度設定することになると思います、IMEのカスタム辞書や拡張子の関連付けのプログラムなど)

# 環境
Windows8.1 

# 参考
* [user-folder-name](http://hrn25.sakura.ne.jp/win/user-folder-name/user-folder-name.html)
* [WINDOWS8 で出来てしまった日本語名ユーザフォルダをリネームした話 | dp-lab.log](http://dp-lab.org/blog/?p=470)
Raspberry Pi > Link > GPIOのUARTを使う > やってみた

Raspberry PiのGPIOにはUARTのピンがあるが、使用するためには設定を変更することになるようだ。

http://nanicananica.blog.fc2.com/blog-entry-14.html
にあるように、/boot/cmdline.txtの修正と/etc/inittabの修正が必要となる。


pythonの実装例
http://chicklab.blog84.fc2.com/blog-entry-46.html
/dev/ttyAMA0 を使う。

<hr>
## やってみた

```txt:動作環境
Raspberry Pi2 + raspbian
Windows7 Pro + FTDI adapter
```

/boot/cmdline.txtを以下のようにした。

```/boot/cmdline.txt
dwc_otg.lpm_enable=0 rpitestmode=1 console=tty1 root=/dev/mmcblk0p7 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
```

/etc/inittab は見つからないので、何もしていない。

Pi2のGPIOを以下と接続
http://www.akafugu.jp/ja/posts/products/ftdi-adapter/

- Pi2:GND --> FTDI:GND
- Pi2:TXD0(GPIO14) --> FTDI:RXD
- Pi2:RXD0(GPIO15) --> FTDI:TXT

[GPIO @ element14](https://www.element14.com/community/docs/DOC-73950/l/raspberry-pi-2-model-b-gpio-40-pin-block-pinout)

上記のFTDI adapterはWindows7に接続しておく。Windows7側でTera Termを起動して、9600bpsにしておく。

Pi2側で以下を実行

```
$ echo "test\r\n" > /dev/ttyAMA0
```

Windows7側で`test\r\n`が表示された。
Sambaのビルド手順

# 概要
Sambaをソースからビルドする手順メモ。

詳細は公式wikiに記載がある。

Build Samba from source - SambaWiki
https://wiki.samba.org/index.php/Build_Samba_from_source


# 環境
debian8 (jessie)


# ビルド手順
## 依存パッケージインストール
Operating system requirements/Dependencies - Libraries and programs - SambaWiki
https://wiki.samba.org/index.php/Operating_system_requirements/Dependencies_-_Libraries_and_programs#Debian_.2F_Ubuntu

```bash:install_package.sh
#!/bin/sh

apt-get install acl attr autoconf bison build-essential \
  debhelper dnsutils docbook-xml docbook-xsl flex gdb krb5-user \
  libacl1-dev libaio-dev libattr1-dev libblkid-dev libbsd-dev \
  libcap-dev libcups2-dev libgnutls28-dev libjson-perl \
  libldap2-dev libncurses5-dev libpam0g-dev libparse-yapp-perl \
  libpopt-dev libreadline-dev perl perl-modules pkg-config \
  python-all-dev python-dev python-dnspython python-crypto \
  xsltproc zlib1g-dev
```

>Note: libgnutls-dev has been replace by libgnutls28-dev on Debian 8 Jessie and Ubuntu >=14.04

上記に当てはまるため、書き換えている。

```
 ./install_package.sh
```

## configure
https://wiki.samba.org/index.php/Build_Samba_from_source#configure

AD/DC機能は不要なので無効にしてconfigure

```console
$ cd <path to samba source>
$ ./configure --without-ad-dc
Checking for program gcc or cc           : /usr/bin/gcc
Checking for program cpp                 : /usr/bin/cpp
Checking for program ar                  : /usr/bin/ar
...
Checking configure summary                                                                      : ok
Checking compiler for PIE support                                                               : yes
'configure' finished successfully (54.800s)
```

## make
```console
$ make -j2
WAF_MAKE=1 python ./buildtools/bin/waf build
Waf: Entering directory `/home/tmp/samba-samba-4.1.0/bin'
        Selected embedded Heimdal build
...
[3538/3538] Generating manpages/winbind_krb5_locator.7
Note: Writing pam_winbind.conf.5
Note: Writing winbind_krb5_locator.7
Waf: Leaving directory `/home/tmp/samba-samba-4.1.0/bin'
'build' finished successfully (4m53.623s)
```
AngularJS と UI Bootstrapを使ってみた

最初は日付選択のカレンダーがほしいなと探していて、
辿りついたのがAngularJS と UI Bootstrapになりました！
公式が英語なのと、サンプルがいろいろ混ざってたので
今回はポップアップ時のみ、ぬきだしでサンプルメモを残していきます。

## 導入方法

##### AngularJS
```
npm install angular@1.4.8-rc.2
npm install angular-animate@1.4.8-rc.2
```

##### UI Bootstrap
```
npm install angular-ui-bootstrap
```

##### Bootstrap
```
npm install bootstrap
```

## 使用方法
今回はラベルに表示しています。
html側の表記は以下のとおり、jade使ってます。

```jade:jade
doctype html
html(ng-app='angluer.bootstrap')
 head
   title= title
   link(rel='stylesheet', href='/javascripts/lib/bootstrap/dist/css/bootstrap.min.css')
   script(src='/javascripts/lib/angular/angular.min.js')
   script(src='/javascripts/lib/angular-animate/angular-animate.min.js')
   script(src='/javascripts/lib/angular-ui-bootstrap/dist/ui-bootstrap-tpls.js')
   script(src='/javascripts/script.js')
 body
  div.form-group(ng-controller='Datepicker as dt')
    h3.control-label 誕生日検索：{{dt.date | date : 'yyyy/MM/dd'}}
     i.glyphicon.glyphicon-calendar(uib-datepicker-popup ng-model="dt.date" is-open="dt.popup.opened" min-date="dt.minDate" max-date="dt.maxDate" datepicker-options="dt.dateOptions" ng-required="true" close-text="Close" ng-click="dt.open()")
  hr
```
 
 コントローラは以下のとおりです。
 
```javascript:script.js
var angboot = angular.module('angluer.bootstrap', ['ngAnimate', 'ui.bootstrap']);

angboot.controller('Datepicker', function () {
        this.date = new Date(); //デフォルト日付
        this.maxDate = new Date(2100,12, 31); //最大日付
        this.minDate = new Date(1900,1,1); //最小日付
        this.format = 'yyyy/MM/dd' //日付フォーマット

        this.popup = {
            opened: false
        };

        this.dateOptions = {
            formatYear: 'yyyy', //カレンダーの年の表示フォーマット
            startingDay: 1 //カレンダー初期日付
        };

        this.open = function() {
            this.popup.opened = true;
        };

});
```

ハマったのは```var angboot = angular.module('angluer.bootstrap', ['ngAnimate', 'ui.bootstrap']);```のポイントで
取り込みモジュール名'ui.bootstrap'とスクリプト内での名称を一致させると、
動作しないというところでした。

失敗例：
```
var angboot = angular.module('ui.bootstrap', ['ngAnimate', 'ui.bootstrap']);
```

とりあえず、最新のangular.jsでも上記のコードは動作することまでは確認できました。
MB102を使い、安価に1$で 5V/3.3V を作ってブレッドボードで利用する


プロトタイピング時に利用しているボード以外から時々 5V/3.3V が欲しくなるけど、レギュレータ通すのが面倒くさい。

そんなときは MB102 という、5Vと3.3Vレギュレータを搭載した、ブレッドボードの左右の列に直接させる機器を使うと便利。

![20160214-DSC04836.jpg](https://qiita-image-store.s3.amazonaws.com/0/5330/e410c3e6-46bf-9ad0-0408-18191994bab1.jpeg "20160214-DSC04836.jpg")

入力は DC アダプタ経由(6.5-12V) か USB Type-A (なぜType-A…。これが micro USB Type-B なら使い勝手だいぶ良いのにな)。

レギュレータICはAX1117(DCアダプタ経由を5Vへ降圧)とAMS1117(5V -> 3.3V)。実測でDC12入力で、4.99Vと3.29Vだった。また電流はデータシート上では 800mA 出力できる。

出力はブレッドボードへの出力ピンは 3.3V/5V/OFF をジャンパで設定でき、左右別に設定できる。また真ん中左のピンで、直接3.3V/5V を取り出して使える。また電源オンオフボタンもあり。

ebay.com で[送料込み 0.99$](http://www.ebay.com/itm/MB102-Breadboard-Power-Supply-Module-3-3V-5V-For-Arduino-Solderless-Breadboard-/170886733144?hash=item27c9a49d58:g:yaIAAOSwFTRTqTCT)という価格なので、1個ぐらい持っておくと便利。
jadeで共通レイアウトを使いつつ、ページに個別のclassをつける。

#はじめに
ページごとに個別 class をつけて、その class で css や js の処理を分岐することが多々あります。
jadeを使っていると共通のテンプレートは利用できるのですが、html や body に個別 class をつけるのってどうすればいいんだろうと思ったのでそのメモです。

#やり方

共通レイアウト

```jade:_defaultLayout.jade

doctype html
block init
	- var pageTitle = 'サンプルページ';
	- var htmlClass = '';

//- htmlにhtmlを付与する場合
html(lang='ja', prefix='og: http://ogp.me/ns#', class= htmlClass)
	head
		meta(charset='UTF-8')
		meta(http-equiv='X-UA-Compatible', content='IE=edge')
		meta(name='viewport',content='width=device-width, initial-scale=1')
		meta(name='description',content='')
		meta(name='author',content='')
		link(rel='icon',href='/favicon.ico')
		title= pageTitle
		link(type='text/css', rel='stylesheet', href='/css/style.css')
		block additional-css
		!= '\n<!--[if lt IE 9]>\n\t\t\t'
			script(src='https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js')
		!= '\n\t\t\t'
			script(src='https://oss.maxcdn.com/respond/1.4.2/respond.min.js')
		!= '\n\t\t<![endif]-->\n'
		block afterhead
	body#top
		block main

```

そして、この共通テンプレートを呼び出すファイルを下記のように設定

```jade:index.jade

extends _defaultLayout

block append init
	//- ページタイトルの設定
	- pageTitle = 'インデックスページ';
	
	//- ページclassの設定
	//- このページに特定のclassを付与できる。
	- pageClass = 'indexPage';

block main
	h1 これでページにclassがつくよ。

```

その後、コンパイルすると見事 class が付与されてます。

```html:index.html

<!DOCTYPE html>
<html lang="ja" prefix="og: http://ogp.me/ns#" class="indexPage">
	<head>
		<meta charset="UTF-8">
		<meta http-equiv="X-UA-Compatible" content="IE=edge">
		<meta name="viewport" content="width=device-width, initial-scale=1">
		<meta name="description" content="">
		<meta name="author" content="">
		<link rel="icon" href="/favicon.ico">
		<title>インデックスページ</title>
		<link type="text/css" rel="stylesheet" href="/css/style.css">
		<!--[if lt IE 9]>
			<script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
			<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
		<![endif]-->
	</head>
	<body id="top">
		<h1>これでページにclassがつくよ。</h1>
	</body>
</html>
```

変数を block init に定義して append で変数の値を上書きし、それを共通テンプレートにはめるというやり方で無事できました。
Raspberry Pi > 3.3V駆動なのだろうか? > GPIOは3.3Vで入れること

Raspberry Pi2とESP8266間でUART通信をしようとしていた。

http://chicklab.blog84.fc2.com/blog-entry-46.html
> GPIOピンを使った通信
...
> ＊RaspberryPiに接続するUSB－シリアル変換ICは3.3Vのものを使ってください。
　5Vのものを使用すると、RaspberryPiが破損する可能性があります。

GPIOは5Vと思っていたが、実は3.3Vだったようだ。

[e-ark](http://www.e-ark.jp/2013/02/02/raspberry-pi-%E3%81%A8-arduino-%E3%82%92%E3%82%B7%E3%83%AA%E3%82%A2%E3%83%AB%E9%80%9A%E4%BF%A1%E3%81%A7%E3%81%A4%E3%81%AA%E3%81%90-%E3%81%AE%E3%81%A4%E3%81%A5%E3%81%8D%EF%BC%89/)
> Raspberry Pi は 3.3V 駆動。多くの Arduino は 5V駆動。

駆動が3.3Vという記載がある。ただ、その第一次ソースにはまだたどり着いていない。

https://www.adafruit.com/pdfs/raspberrypi2modelb.pdf
には

> Power Micro USB socket 5V, 2A

とあるが、内部回路で3.3Vにしているということか。


http://www.soramimi.jp/raspberrypi/rs232c/
> Raspberry Piは3.3V動作ですので、5Vの信号を3.3Vに落としてRaspberry Piに入れるべきです

http://nanicananica.blog.fc2.com/blog-entry-14.html
> Raspberry Pi系の電圧は3.3Vで、PCのシリアルとはそのままでは接続できません。


GPIOの等価回路を見つけた
http://www.mosaic-industries.com/embedded-systems/microcontroller-projects/raspberry-pi/gpio-pin-electrical-specifications


電圧については議論も見つけた (まだ詳しくは読んでいない)
https://www.element14.com/community/thread/43127/l/raspberry-pi-2-5-v-power-supply-notes?displayFullThread=true
VimでcsvからMarkdownのテーブルを生成するプラグインを作った


最近勉強会に行ったときのメモだったり仕事だったりで`Markdown`を書く機会が多かったので作ってみた。

## How To
+ ほぼ[git](https://github.com/suzuki-hoge/table-converter)のReadmeに書いた
+ 公式に則ったVimプラグインの形にしていないのは、単なる好み
 + あとまぁ`API`も同梱だし
 + 導入が面倒なのは反省点

## どんなときに使うか
### 新しくテーブルを組むとき
+ とりあえずエディタ上で`csv`形式で書いて、`ToMarkdown`する
 + `ShowMarkdown`でプレビューを繰り返し、最後に`ToMarkdown`する
 + いきなり`markdown`で書いて何かに投稿したら`|`の数がずれていて`<table>`にならない！とかを防げる
 + 縦揃えとか`:--`とかが不要だし、区切り文字も`|`よりは`,`の方が楽かも？
+ 予め何らかの表計算ソフトで`csv`を作っておいてから`AppendMarkdownFromFile`で変換しつつ展開する
 + ある程度大きいテーブルの場合はこちらが便利
 + 当然Vimのファイルパスのタブ補完も出来る

### 既存のテーブルを編集するとき
+ 縦が揃っていないテーブルを整形する
 + `ToCsv`をして`ToMarkdown`をすると縦が揃う
+ `WriteCsvToFile`で`csv`ファイルを生成し、表計算ソフトで編集したら`AppendMarkdownFromFile`を行う
 + エディタで編集するのが辛い場合向け
 + こちらも当然ディレクトリのタブ補完が出来る

### コマンドラインツール
+ 自分の使っているエディタやツールから呼びたいとき
+ Vimは使わないけど、ってとき
 + `csv`を`markdown`にして、ファイルにリダイレクト書き込みをしたり

## 未対応事項（対応予定なし）
+ 選択範囲に`` ` ``を含む場合に変換エラーが起きる
+ 選択範囲に`"`を含む場合に変換エラーが起きる
+ 選択範囲に`,`を含む場合に`ToMarkdown`を実行すると`csv`のカラムが増える

## おまけ
### vimで横線を引く
`r`は一文字だけ置き換えるコマンドだが、範囲選択をしていると全てに適用される

<img src="https://qiita-image-store.s3.amazonaws.com/0/113398/ab321a9d-f204-04f3-5851-cc42b7ff0005.gif" width="400px">

1. 一番長い行を線を引きたい行に複製する
+ 行選択`<Shift-v>`をして`r-`
+ あとは`:`や`|`にしたい所にカーソルをあわせて`r:`等

### vimで縦線を引く
矩形選択からの挿入で縦に文字を書くことが出来る

<img src="https://qiita-image-store.s3.amazonaws.com/0/113398/9fb70873-afba-6228-7ab1-4525a9c5e850.gif" width="400px">

1. 矩形選択`<Ctrl-v>`をして`I`で挿入モードにする
+ 入力したら`<ESC>`
+ 複数行に反映される

### vimで縦に消す
矩形選択から削除も出来る

<img src="https://qiita-image-store.s3.amazonaws.com/0/113398/7f8603e1-427b-5091-8962-408502b508c8.gif" width="400px">

1. 矩形選択`<Ctrl-v>`をする
+ `x`や`d`で削除する

ちなみに`x`等で削除せず`c`等で挿入モードに入れば全行まとめて編集できる

## おわりに
実はおまけの方を知っていれば割と`Vim`だけでもイケる、矩形選択を使いこなすと本当に便利。
あと.gif作って載せるのすごい楽しいｗ

ぜひ使ってみてください！！！
Tips: 非アクティブなWindowの最初のマウスイベントを感知する

タイトルの文章だとちょっとわかりにくいと思うので、困ってたことと解決策を書きます。

# 困っていた状況
1. 自分のOSXアプリを起動中、他のアプリがアクティブになっている状態で、自分のアプリにマウスイベント（例：クリック）を加える
2. 最初のマウスイベントでは自分のアプリがアクティブになるけど、Viewのイベントは発生しない。
3. 以降のマウスイベントではViewのイベントは発生する。

ウィンドウが非アクティブな状態でもマウスのファーストタッチでイベント発生する方法ないかなーと思っていたら簡単に解決できる方法がありました。

# 解決策
マウスイベントを受け取りたいNSViewのサブクラスに```acceptsFirstMouse:```メソッドを実装し、戻り値を```true```にする。

# サンプル
## 作ったもの
```acceptsFirstMouse:``` の戻り値が ```true``` / ```false``` なSampleViewをそれぞれ作ります。
各Viewは```mouseDown:```イベントを受け取るとアラートを表示します。

## ソース
```swift:sample.swift
import Cocoa

class ViewController: NSViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let view = SampleView(frame: CGRectMake(100,100,100,100))
        let view2 = SampleView2(frame: CGRectMake(250,100,100,100))
        self.view.addSubview(view)
        self.view.addSubview(view2)
    }
}

class SampleView: NSView {
    override func drawRect(dirtyRect: NSRect) {
        super.drawRect(dirtyRect)
        NSColor.redColor().set()
        NSRectFill(dirtyRect)
    }
    
    override func mouseDown(theEvent: NSEvent) {
        let alert = NSAlert()
        
        alert.messageText = "alert!"
        alert.runModal()
    }
    
    override func acceptsFirstMouse(theEvent: NSEvent?) -> Bool {
        return true
    }
}

class SampleView2: NSView {
    override func drawRect(dirtyRect: NSRect) {
        super.drawRect(dirtyRect)
        NSColor.blueColor().set()
        NSRectFill(dirtyRect)
    }
    
    override func mouseDown(theEvent: NSEvent) {
        let alert = NSAlert()
        
        alert.messageText = "alert!"
        alert.runModal()
    }
    
    override func acceptsFirstMouse(theEvent: NSEvent?) -> Bool {
        return false
    }
}
```

## 結果
SampleView（赤いView）は非アクティブな状態でもクリックするとアラートが表示されます。
SampleView2（青いView）は非アクティブな状態からクリックするとアラートが表示されません。
アクティブになった状態でクリックするとアラートが表示されます。
昇圧して高電圧(DC140V~)を作る


主に nixie 管を使う時に、140V~ の直流電圧でドライブさせる必要があって、高電圧を作りたい。

# 電子工作で一般的なIC

ICのMC34063A(やコンパチIC)は DIP タイプのチップがあり、安価で昇圧・降圧・反転ができるスイッチングレギュレータICとして、広く一般的に使われてる模様。

[スイッチング・レギュレータ（２）](http://www.piclist.com/images/www/hobby_elec/ckt23.htm)でMC34063Aを使ったスイッチングレギュレータICの挙動や、何故コイルが必要なのか等々の解説がされている。

日本語のデータシートとしては、新日本無線が出しているMC34063Aのセカンドソース版 NJM2360/A を参考にすると良い。

- http://www.njr.co.jp/products/semicon/PDF/application_notes/NJM2360_A_APP_J.pdf

# キットを買う

初心者がちゃんと設計し電源を作るには大変…。というわけでキットがいくつかある。

## ニキシー管専用電源を使う

ニキシー管専門ショップ、nixie-tube.com ではニキシー管専用電源キットとして、MC34063AP を使った電源を取り扱ってる。

- http://nixie-tube.com/shop/4_28.html

DC12VからDC140~200Vという nixie 管では丁度良い電圧を出力でき、またマイコン用に 5V の出力もあり、基板も小型で取り回しがしやすい。

![20151012-DSC04518-2.jpg](https://qiita-image-store.s3.amazonaws.com/0/5330/d417ebc8-db4b-cb0a-468b-56d4f2204aea.jpeg "20151012-DSC04518-2.jpg")


キットは2000円で、完成品も3000円で売っている。

## aitendo の高電圧出力キットを使う

aitendo では AKIT-150V34063 という電源キットを取り扱っている。

- http://www.aitendo.com/product/6872

チップは ST-Microelectronics のコンパチIC、063EC を使っていて、入力はDC8-12V、出力は入力12V時に 126V~382V となってる。お値段600円。基板図も Web に公開されてるので、購入せずとも回路図もおこせる。

![20160214-DSC04840.jpg](https://qiita-image-store.s3.amazonaws.com/0/5330/bf3bd40b-0ec8-d704-9a25-eeafbaced341.jpeg "20160214-DSC04840.jpg")

(写真のクリップはFETの簡易ヒートシンク代わり)

実際に手元の物は、12V入力時、125V~465Vの出力となった(コンデンサの耐圧値400Vを超えてしまうので、超えない範囲で使おう…)。

![20160214-DSC04838.jpg](https://qiita-image-store.s3.amazonaws.com/0/5330/9ea8b186-2b56-48c8-b3f9-5f84583f66da.jpeg "20160214-DSC04838.jpg")


なお AKIT-150V34063 は以前のバージョンの版と、現行(2016 2月2日~)版両方持ってるけど、現行版は基板の印刷などがだいぶ解りやすくなっていて簡単に作れると思う。
Unity3D-簡単なゲームを作りながら学ぼう④

# ミサイル作成

>まずはメニュのGameObject→3DObject->Capsuleを選択します。SceenにCapsuleが追加されます。
Scaleと軸を調整してミサイル見たいな形にしましょう。
>次はAssetsフォルダにMaterialsフォルダを作ってマウス右クリックします。
Create->Materialを選択します。
>Materialが追加されたので色を変更して見ましょう。変更が終わったら先ほど追加したCapsuleにドラック＆ドロップしたらミサイルの色が変更されます。

![41.PNG](https://qiita-image-store.s3.amazonaws.com/0/108475/939038fa-1198-dad8-5d9f-cd08996c8c8f.png)


![43.PNG](https://qiita-image-store.s3.amazonaws.com/0/108475/9d388a63-2db8-9a21-558b-b74081f7074b.png)

>これでミサイルができたのでHierarchyからAssets・Prefebsにドラック＆ドロップします。
PrefebsにPlayerとミサイルが保存されてますね。
>これでミサイル作成完了。

# ミサイルを飛行機とつなぐ
Asset/Scriptsに移動して新しいスクリプトを追加します。shootMissileで保存して、Playerにドラック＆ドロップ、MoveとShoot Missileスクリプトが追加されているはずです。。
>以下の画面参照
![44.PNG](https://qiita-image-store.s3.amazonaws.com/0/108475/47bd5a94-743d-bed7-80f7-c8030b81d655.png)

>ShootMissileスクリプトに変数を追加します。保存してUnity3Dに戻ります。

```ShootMissile

using UnityEngine;
public class shootMissile : MonoBehaviour {

    public GameObject missile;  //Inspectorから設定できる

	// Use this for initialization
	void Start () {
	
	}
	
	// Update is called once per frame
	void Update () {
	
	}
}

```

>先ほどはなかった属性が追加されてますね。Missile Noneなので何にも参照してません。
>None(Game Object)にAssets/Prefebsに保存したミサイルをドラック＆ドロップします。
![45.PNG](https://qiita-image-store.s3.amazonaws.com/0/108475/1848e9c1-9600-2b79-a734-4c5663a89cbe.png)

>Missileが追加されました。これで飛行機とミサイルがつながりました。
![46.PNG](https://qiita-image-store.s3.amazonaws.com/0/108475/7d7ef8fc-a54a-2e21-2b68-b97454366bc4.png)

次回はスペースキーでミサイル発射できるようにします。
EclipseでWTPを使ったアプリケーションサーバを準備する

# Eclipse+WTPを使ったWebアプリケーション開発

EclipseにはWTP(WebToolsPlatform)と呼ばれるパッケージがあり、EclipseからJava用のさまざまなWebアプリケーションサーバを管理できます。

WTPを使った場合、インストールしているアプリケーションサーバの設定をEclipse側で管理…具体的にはEclipseの1プロジェクトとして管理するため、設定ファイルや搭載するアプリケーションは、インストールしているWebアプリケーションサーバとは別の場所で行います。

例えば、インストールしてあるTomcatの設定ファイルを直接修正せず、Eclipse内で設定ファイルをコピーして、そこで実行します。

## Pleiades All in one Eclipse 4.5での設定例

まず、画面右上にあるパースペクティブの選択をし、JavaEEを選択します。

![ee_setup_02.png](https://qiita-image-store.s3.amazonaws.com/0/13268/e3244f1a-5829-215e-9e31-424f1229be0d.png)

JavaEEパースペクティブを選ぶと、レイアウトが代わります。

画面左側ペインにて右クリックをしてメニューを開き、[新規＞その他] を選びます。

![ee_setup_03.png](https://qiita-image-store.s3.amazonaws.com/0/13268/85d490c0-2583-4da6-06ff-5f13523d577e.png)

画面中央にウィザードが開きますので、スクロールバーを下に動かし、「サーバ＞サーバ」を選びます。

![ee_setup_04.png](https://qiita-image-store.s3.amazonaws.com/0/13268/624920de-f016-8706-d3d3-3f16ff892bac.png)

最後に、サーバとして使うアプリケーションサーバを選びます。以下の例はTomcat8と使う例です。

![ee_setup_05.png](https://qiita-image-store.s3.amazonaws.com/0/13268/aa87b4d2-6960-0923-c09a-4e098b81c545.png)

サーバを1つ選び、[完了]を押すと、セットアップが完了です。
Mac ネットにつながらなくなる。「ホストを解決しています…」.etc..と出る

# 現象

- MacのChromeで「ホストを解決しています...」と出てネットに繋がらなくなる
- safariでも同じMACならつながらない。
- Windowsは通常通りネットが繋がる。
- iPhoneでもたまにDNSエラーが発生してつながらない時がある。
- ルーター・モデムの異常は見られない
- ルーターログにはDHCPでエラーが出てた
- wifiのみエラーが出る

# 環境

− OS X El Capitan Ver 10.11.1
- iPhone 5s & 6
- Windows 10 Serface pro 3

# 対処

- システム環境設定
    - `→`ネットワーク
        - `→`Wi-Fiを選択し、詳細...をクリック
            - `→`DNSのタブをクリック
                - `→`DNSサーバー側の欄に`＋`ボタンより、DNSサーバーのIPを入力する

```
ここでのDNSサーバーアドレスはルーターのアドレスとGooglePublicDNSを入力しました。
例）
ローカルIP：192.168.XXX.XXX (Xは各環境［ルーター等で調べてください。］)
GoogleDNS：8.8.8.8
```


```

Macの場合、　WindowsとIPやDNSの設定が異なるので注意
また、移動による、複数のWi-Fiへの接続やEthernetへの接続、
その他ドメインの参加やActive Directoryなどのフォレストへの参加による
独自の規格やルール環境下でのIP変更、DNS変更により障害の範囲は考慮していません。

```

```
iPhoneなども同様の方法で対応できます。
```
GitHubに複数アカウントを作ってもいいのか

GitHubで複数アカウントを作ってもいいのかを調べたところ、利用規約にこんな一文を見つけました。

> One person or legal entity may not maintain more than one free account, and one machine user account that is used exclusively for performing automated tasks.
>
> （引用元：[GitHub Terms of Service - User Documentation](https://help.github.com/articles/github-terms-of-service/)）


以下、拙訳。

> いち個人や法人は1つより多くの無料アカウントを維持することはできません。また、自動化タスクの実行のみに使えるマシンユーザーアカウントも1つより多く持つことはできません。

ちょっと意外な気もしますが、個人がGitHubに無料アカウントを2アカウント以上作成すると厳密には利用規約違反になるようです。とはいえ、現実には個人用と仕事用で複数アカウントを持っているユーザーは多数いるはずですし、GitHubも認識していないわけがないので、よほど悪質でなければ黙認している状況だと思われます。
Amazon EC2にChainer(v1.6.1)をインストールするには3行必要

**この記事は2016年2月14日時点での内容です。**

本当は自分が書くべき内容ではない気もしますが、他にも困っている人がいるかもしれないので、シェアしておきます。
#TL;DR


```
$ sudo pip install -U setuptools
$ sudo pip install numpy==1.10.4
$ sudo CUDA_PATH=/opt/nvidia/cuda pip install chainer
```

#経緯
急遽AWS環境でchainerを使うことになったので、[この記事](http://qiita.com/RyotaKatoh/items/989c914ad5be123352f1)を参考にAmazon Linux AMI with NVIDIA GRID GPU Driverのインスタンスを起動し、[この記事(Amazon EC2のGPUインスタンスにChainer v1.6を１行で入れる)](http://qiita.com/unnonouno/items/78ca98cf4911b5135c6f)を参考にインストールしてみました。

しかし下記のようなエラーが発生してしまいました。![original_スクリーンショット 2016-02-13 09.11.17.png](https://qiita-image-store.s3.amazonaws.com/0/51852/4ac8aa3f-fba9-1b41-5631-3baba5c2146a.png "original_スクリーンショット 2016-02-13 09.11.17.png") 
AttributeError: 'module' object has no attribute 'core'というエラーは見たことがなく、ググってもそれらしきエラーは見当たらないので途方に暮れていてると、例の記事の作者であり、chainerのデベロッパーである@unnonounoさんが助けてくれました。

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr"><a href="https://twitter.com/mottodora">@mottodora</a> げ、numpy1.11のベータが何故かインストールされてて、インターフェスが変わったぽい（？）　pipyのアップロード失敗したのかな？</p>&mdash; Yuya Unno (@unnonouno) <a href="https://twitter.com/unnonouno/status/698305855981129728">2016, 2月 13</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>


<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr"><a href="https://twitter.com/mottodora">@mottodora</a> 手動でpip uninstall numpy &amp;&amp; pip install numpy==1.10.4してから、pip install chainer --no-cacheでどうでしょう？</p>&mdash; Yuya Unno (@unnonouno) <a href="https://twitter.com/unnonouno/status/698305933869391872">2016, 2月 13</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

あとは自分で色々試してみた結果、setuptoolsをアップデートしないとnumpyをインストールすることができず、chainerもインストールできないことが分かったので、以下のような3行に落ち着きました。

```
$ sudo pip install -U setuptools
$ sudo pip install numpy==1.10.4
$ sudo CUDA_PATH=/opt/nvidia/cuda pip install chainer
```


これでなんとか期限に間に合いそうです。@unnonounoさんありがとうございました。
GitLab(Docker版)の設定でSignin enabledのチェック外しを元に戻す手順

GitLab(Docker版)構築した際、設定で誤ってSignin enabledのチェック外してログイン画面でログインできない状態に陥ってしまったことがありました。その時に行った復旧手順を記しておきます。
ってか、なんでサインインさせない設定あるんだろう・・・

【設定画面】
![Docker設定.png](https://qiita-image-store.s3.amazonaws.com/0/61752/6672d836-05cf-4a21-db6c-6c5f110be502.png)

【ログイン画面】
![gitlab_login01.png](https://qiita-image-store.s3.amazonaws.com/0/61752/2d69fbb3-bd1e-fd1b-0f8b-c1fc6a3f0e07.png)

#前提
本手順は、DockerのGitLab([sameersbn/docker-gitlab](https://github.com/sameersbn/docker-gitlab))で構築している前提としていますが、Dockerコマンドを除けばDockerを使わずに構築した際にも使える手順かと思います。

こんなカンジで稼働しているとします。
![GitLabProcess.png](https://qiita-image-store.s3.amazonaws.com/0/61752/95d9036a-85f1-4473-65c1-093631321a03.png)

#復旧手順
####**1.GitLabコンテナ内に接続**
`docker exec -it <GitLabコンテナ名 or GitLabコンテナID> bash`
（※docker attachコマンドが使えないので上記コマンド実行。詳細を知りたい方は[こちらを参照](https://unicorn.limited/jp/item/347)。）

####**2.GitLabのrailsコンソール起動(GitLabコンテナ内)**
`cd /home/git/gitlab`
`sudo -u git -H bundle exec rails console production`
（※他のサイトではよく「sudo gitlab-rails console」を使えと記載されているが、DockerのGitLabではgitlab-railsが存在しないので上記コマンドを利用。）
【実行結果】
![gitlab_rails_console.png](https://qiita-image-store.s3.amazonaws.com/0/61752/a28d6d2e-86b8-6267-3993-9115a2664e6c.png)

####**3.railsコンソール内でSignin enabledを設定&コンソールから抜ける(GitLabコンテナ内)**
`ApplicationSetting.last.update_attributes(signin_enabled: true)`
`exit`
【実行結果】
![rails_console_result.png](https://qiita-image-store.s3.amazonaws.com/0/61752/810b4243-8559-038d-a318-02122f291dcb.png)

####**4.GitLabコンテナから抜ける(GitLabコンテナ内)**
`exit`

####**5.GitLabコンテナ再起動**
`docker restart <GitLabコンテナ名 or GitLabコンテナID>`

上記手順後にGitLabのログイン画面にアクセスするとログインできるようになっているはず。
【ログイン画面】
![gitlab_login02.png](https://qiita-image-store.s3.amazonaws.com/0/61752/b001d4ab-2a83-c758-8af4-1768144959f2.png)

以上。
Pythonでリストの要素が全て同じか確かめる


誤った情報を公開し続けるのは気が引けたので、書き直しました。
いただいた指摘を反映しつつ、数通りのやり方を書いてみました。

## 実装
### 先頭要素を他要素とぶつけて判断する
```Python
def map_all(es):
    return all([e == es[0] for e in es[1:]]) if es else False
```

### 重複要素を削除した時の要素数で判断する
```Python
def set_list(es):
    return len(list(set(es))) == 1
```
+ `es`がリストのリストだと実行時エラーになってしまう
 + `TypeError: unhashable type: 'list'`

### 先頭要素を他要素とぶつけて判断する（再帰）
```Python
def recursive(es):
    return _rec(es, es[0], True) if es else False

def _rec(es, head, acc):
    return _rec(es[1:], head, acc and head == es[0]) if es else acc
```
+ 前回の`reduce`でやろうとした事を無理矢理書いてみた
+ 末尾再帰は面倒なのでしていない

### 先頭要素を複製して比べて判断する
```Python
def multi_diff(es):
    return es == [es[0]] * len(es) if es else False
```
+ テスト中に思いついた

## テスト
前回はあまりにも適当だったので、今回はある程度テストしました...

```Python
def tests(expected, elements):
    assert map_all(elements) == expected
    assert set_list(elements) == expected
    assert recursive(elements) == expected
    assert multi_diff(elements) == expected

T, F, N = True, False, None

tests(True, [-1])
tests(True, [0])
tests(True, [1])
tests(True, [2])
tests(True, ['T'])
tests(True, [T])
tests(True, [N])

tests(True, [-1, -1])
tests(True, [0, 0])
tests(True, [1, 1])
tests(True, [2, 2])
tests(True, ['T', 'T'])
tests(True, [T, T])
tests(True, [F, F])
tests(True, [N, N])

tests(True, [-1, -1, -1])
tests(True, [0, 0, 0])
tests(True, [1, 1, 1])
tests(True, [2, 2, 2])
tests(True, ['T', 'T', 'T'])
tests(True, [T, T, T])
tests(True, [F, F, F])
tests(True, [N, N, N])


tests(False, [])

tests(False, [0, 1])
tests(False, [1, 0])
tests(False, [0, 2])
tests(False, [1, 2])
tests(False, ['T', 'F'])
tests(False, ['F', 'T'])
tests(False, [T, F])
tests(False, [F, T])
tests(False, [T, N])
tests(False, [N, F])
tests(False, [N, 0])
tests(False, [0, N])

tests(False, [0, 0, 1])
tests(False, [0, 1, 0])
tests(False, [T, F, F])
tests(False, [F, T, F])
tests(False, [F, F, T])
tests(False, [F, T, T])
tests(False, [T, F, T])
tests(False, [T, T, F])
tests(False, [T, T, N])


tests(True, [[]])
tests(True, [[], []])
tests(True, [[], [], []])
tests(True, [[5]])
tests(True, [[5], [5]])
tests(True, [[5], [5], [5]])

tests(False, [[],  [5]])
tests(False, [[3], [5]])
tests(False, [[3], [3, 3]])
```

## おわりに
前回前回と言っているのは[これ](http://qiita.com/suzuki-hoge/items/ffaec673ccfbd2079a29)、あー恥ずかしい...
CSSで矢印アイコン付きのリストを作る

[サンプル](http://www.pc-weblog.com/sample/btn/list.html)

##html
```qiita.html
<ul class="cursor">
    <li><a href="#">リスト01</a></li>
    <li><a href="#">リスト02</a></li>
    <li><a href="#">リスト03</a></li>
    <li><a href="#">リスト04</a></li>
</ul>
```

##css
```qiita.css
body {
    margin: 0;
    padding: 0;
    -webkit-text-size-adjust: 100%;
    text-size-adjust: 100%;
}

/*　基本プロパティ　*/
ul.cursor {
    margin: 0;
    padding: 0;
}

ul.cursor li {
    width: 100%;
    margin: 0;
    padding: 0;
    list-style-type: none;
    border-bottom: 1px solid #D5D5D5;
    background: #FFF;
}

ul.cursor li:nth-child(odd) {
    background: #F6F6F6;
}

ul.cursor li a {
    position: relative;
    margin: 0;
    padding: 10px 30px 10px 10px;
    color: #333;
    display: block;
    overflow: hidden;
    text-decoration: none;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/*　アイコン　*/
ul.cursor li a:before,
ul.cursor li a:after {
    content: "";
    position: absolute;
    top: 50%;
}

ul.cursor li a:before {
    right: 11px;
    width: 18px;
    height: 18px;
    margin: -9px 0 0;
    background: #999;
    -webkit-border-radius: 20px;
    border-radius: 20px;
}

ul.cursor li a:after {
    right: 17px;
    width: 5px;
    height: 5px;
    margin-top: -4px;
    border-top: solid 3px #FFF;
    border-right: solid 3px #FFF;
    -webkit-transform: rotate(45deg);
    transform: rotate(45deg);
}
```
ansibleのroute53モジュールで指定するalias_hosted_zone_idは固定値だよ


# 概要
ansibleでs3の独自ドメインwebsite公開をしようとして、Management Consoleでやっていたら素直にできるんだけど、ansibleで自動化しようとしたら `alias_hosted_zone_id` ってどっから取ってくるんだよと小一時間悩んでいた。


# 結論
公式ページに書いてあったわ。

http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region

Asia Pacific (Tokyo)は `Z2M4EHUR26P7ZW`。
他リージョンも上記ページ内に書いてある。

ELBなどではユーザごとに作るからIDを自分で取ってくるというのはわかるけれど
Route53のDNSは自分で作れるものじゃないから
IDは固定に決まってるじゃん、と問題が解決した後に気がついた。

# playbook

こんな感じになった。

```
- name: "create bucket {{ bucket_name }}"
  s3: bucket="{{ bucket_name }}" region="ap-northeast-1" mode="create" permission="public-read"

- name: "setup bucket {{ bucket_name }}"
  s3_bucket:
    name:   "{{ bucket_name }}"
    region: "ap-northeast-1" 
    policy: |
      {   
        "Version":"2012-10-17",
        "Statement":[{
            "Sid":"AddPerm",
            "Effect":"Allow",
            "Principal": "*",
            "Action":["s3:GetObject"],
            "Resource":[
              "arn:aws:s3:::{{ bucket_name }}/*"
            ]   
        }]  
      }   

- name: "static web setting {{ bucket_name }}"
  command: "aws s3 website s3://{{ bucket_name }} --index-document index.html --error-document error.html"

- name: "dns setting: {{ bucket_name }}"
  route53:
    command: create
    zone:    "mogemoge.com."
    type:    "A" 
    record:  "site.mogemoge.com."
    value:   "s3-website-ap-northeast-1.amazonaws.com."
    alias:   yes 
    # Asia Tokyo's hosted zone id.
    # see http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region
    alias_hosted_zone_id: Z2M4EHUR26P7ZW
```


# 参照
詳しいセットアップ方法は丁寧に書いてある下記サイトをご参照。

  * http://qiita.com/tcsh/items/1293024421399e8c4cba
  * http://iga-ninja.hatenablog.com/entry/2015/02/14/155009
TensorFlowでTypeErrorが出て頭を抱えた

TypeError: DataType float32 for attr 'T' not in list of allowed values: int32, int64
　こんなエラー．

　原因は，わかってみれば何てことはない．
　行列の行数や列数に，少数を指定しようとしてしまっていた．

　私の場合は，tf.truncated_normalの第一引数 _shape_ に渡すPython arrayに IMAGE_SIZE/4 という数式を入れておいたのだが，この割り算の結果が少数になっていたため，エラーが出ていた．int()で囲って解決．

　TensorFlowは，intとfloatの間のcastを非明示的にはしてくれないので，他にも例えば，tf.scalar_summaryで学習途中の数値を後でグラフ化するために保存しておく場合でも，intの場合は事前にtf.castでfloatにキャストしておかなければいけなかったりする．
Let’s Encryptを利用して無料で証明書を発行する

## 環境
CentOS: 6.7 （Sakura VPS）
Nginx: 1.8.1
Python: 2.6.6 → 2.7.11 ※2.7系の最新バージョン：2016/02/11現在
※Python 2.6.6のままだと正常にインストールできないので、Updateする

## Pyenvのインストール

```shell-session:ターミナル
git clone git@github.com:yyuu/pyenv.git ~/.pyenv
```

## Pyenvの設定

```shell-session:~/.bash_profile
if [ -e "$HOME/.pyenv" ]; then
  export PYENV_ROOT="$HOME/.pyenv"
  export PATH="$PYENV_ROOT/bin:$PATH"
  eval "$(pyenv init -)"
fi
```

## Python 2.7.11 インストール

```shell-session:ターミナル
pyenv install 2.7.11
```

## デフォルトのPythonを2.7.11に設定
```shell-session:ターミナル
pyenv global 2.7.11
```

## サービスの停止
NginxやApacheを起動している場合、いったん停止させる。

```shell-session:ターミナル
sudo service nginx stop
```

## iptablesの設定
80番ポート、443番ポートが解放されていることを確認する。
解放されていない場合は、解放し、サービスを再起動する。

```shell-session:/etc/sysconfig/iptables
（省略）
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
（省略）
```

```shell-session:ターミナル
sudo service iptables restart
```

## Let's Encryptのインストール

```shell-session:ターミナル
git clone https://github.com/letsencrypt/letsencrypt
```

## Let's Encryptの実行環境確認
以下のコマンドを実行することで、必要なものがない場合、自動で色々インストールしてくれる。

```shell-session:ターミナル
cd letsencrypt/
./letsencrypt-auto --help
```

## Let's Encryptを実行し、証明書を発行
管理者のメールアドレスを「--email」の後にセットし、発行したい証明書のドメインを「-d」の後に指定する（複数選択可能）。そして、コマンドを実行すると証明書が発行される。

```shell-session:ターミナル
./letsencrypt-auto certonly --standalone --email your_email_address@gmail.com -d localhost.com -d www.localhost.com
```

途中、Let's Encryptの利用規約画面が表示され、同意が求められます。利用規約に同意できる場合、Agree（同意）を選択してください（もちろん同意しないと使用できません）。

発行された証明書のシンボリックリンクは、以下のディレクトリ内に存在する。
「/etc/letsencrypt/live/www.localhost.com/」
「/etc/letsencrypt/live/localhost.com/」

## NginxのSSL設定
Nginxの場合は、以下のように設定することで、https接続ができるようになる。

```nginx:/etc/nginx/nginx.conf

# 〜省略〜

server {
    listen 443;
    server_name www.localhost.com;
    ssl on;
    ssl_certificate     /etc/letsencrypt/live/www.localhost.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/www.localhost.com/privkey.pem;
    root /var/www/html;

    # 〜省略〜

}
```

## httpをhttpsにリダイレクトさせる設定

```diff:/etc/nginx/nginx.conf

# 〜省略〜

+server {
+    listen       80;
+    server_name  www.localhost.com;
+    return 301 https://$host$request_uri;
+}
server {
    listen 443;
    server_name www.localhost.com;
    ssl on;
    ssl_certificate     /etc/letsencrypt/live/www.localhost.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/www.localhost.com/privkey.pem;
    root /var/www/html;

    # 〜省略〜

}
```
CoffeeScriptでPromiseを使ったときにハマった

Atomのプラグインを書こうとして，CoffeeScriptを書いていたら`Promise`の使用中にハマった．
もう既に誰かが踏んだ地雷な気がするし，Qiitaに記事があると思ったが，見つからなかったのでメモがてら残しておく．

# やりたい事とコード
CoffeeScriptを使って，次のような`Promise`の使用をしたかった．

1. `then`の引数関数内で，メンバへのアクセスをする
2. `then`の引数関数内で，`resolve`，`reject`を使う

`then`内で，非同期APIの結果の例外処理(JSON，DOMのパースなど)をして，さらに，成功時はメンバへアクセスして処理をするような感じで，例えば，次のようなコード（`Promise`の必要がないコードだが，例という事で）

```CoffeeScript
class Class
  n: 2

  func: ->
    new Promise(
      (resolve) -> resolve(10)
    ).then(
      (value) ->
        if value is 0
          reject("value is 0")
        else
          resolve(value * @n)
    ).then((value) -> console.log(value + " #result"))
```

が，これを動かすと，`@n`が`undefined`となり（CoffeeScriptの仕様への自分の理解が正しければ当然），**コンソールには`NaN #result`が表示**されてしまう．

こういうcallbackを簡単にかくために，CoffeeScriptには`=>`という記法があるので，これを使うと次のように書ける．

```CoffeeScript
class Class
  n: 2

  func: ->
    new Promise(
      (resolve) -> resolve(10)
    ).then(
      (value) =>
        if value is 0
          reject("value is 0")
        else
          resolve(value * @n)
    ).then((value) -> console.log(value + " #result"))
```

しかし，今度は`Uncaught (in promise) ReferenceError: resolve is not defined`というエラーメッセージが表示される．
あまりちゃんと調べていないが，`resolve`は，`this.resolve`の意味であり，`=>`によって`this`の動きが変わっているのだろう．

# 実験
どういうふうに書けば適切な動作をするのかを調べるべく，書き方を思いつく限り試して見た所，次のような結果になった．結局，`new Promise`を使って記述するのが今回の場合は最善なのかな．

## 上手く動くコード
```coffeescript
then((value) -> value)
then((value) => value * @n)
then((value) => new Promise((resolve, reject) => resolve(value * @n))
```

## メンバにアクセス出来ずに変な動作をするコード
```coffeescript
then((value) -> value * @n)
```
## ReferenceErrorが起こるコード
```coffeescript
(value) => resolve(value * @n)
```

# 最後に
他にもっと簡単な解決策があれば教えて頂けると嬉しいです．CoffeeScriptは触り始めたばっかりなので．
[Too many authentication failures for ec2-user]で、EC2にSSH接続出来無い場合の解決方法


CIS Amazon Linuxを使う機会があったので、早速いつも通りにSSHしようとしたら・・・

```
ssh -i ~/.ssh/aws.pem ec2-user@xxx.xxx.xxx.xxx                                                                       

The authenticity of host 'xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx)' can't be established.

(省略)

If you are not an authorized user of this system or do not consent to continued
monitoring, disconnect at this time.
Received disconnect from xxx.xxx.xxx.xxx: 2: Too many authentication failures for ec2-user
Disconnected from xxx.xxx.xxx.xxx
```

ってなってしまった。

このような場合になった時は、

```
ssh -o IdentitiesOnly=yes -i ~/.ssh/aws.pem  -l ec2-user xxx.xxx.xxx.xxx                                             

This is a private computer system which is restricted to authorized individuals.

Actual or attempted unauthorized use of this computer system will result in
criminal and/or civil prosecution.

We reserve the right to view, monitor and record activity on the system without
notice or permission. Any information obtained by monitoring, reviewing or
recording is subject to review by law enforcement organizations in connection
with the investigation or prosecution of possible criminal activity on this system.

If you are not an authorized user of this system or do not consent to continued
monitoring, disconnect at this time.

       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-ami/2015.03-release-notes/
25 package(s) needed for security, out of 102 available
Run "sudo yum update" to apply all updates.
Amazon Linux version 2015.09 is available.
[ec2-user@ip-10-0-0-170 ~]$
```

で接続できる。
ポイントは```-o IdentitiesOnly=yes -l ec2-user xxx.xxx.xxx.xxx```ってなったところ。
【問題提議】Enumは、解釈できないrawValueに対応するCaseを作るべきかOptionalを使うべきか

# バックストーリー

## 問題

ある日、あなたのチームに、iOSアプリがクラッシュする！というバグ報告が押し寄せました。
どうやら新規実装された「武内P」というキャラクターが問題のようです。

ソースを確認してみます。

```response.json
{
    id: 346,
    name: "武内P",
    type: 3
}
```

```swift
class Idol {
    enum Type: Int {
        case Cute
        case Cool
        case Passion
    }
    let id: Int
    let name: String
    let type: Type

    init(json: JSON) {
        id = json["id"].stringValue
        name = json["name"].stringValue
        type = Type(rawValue: json["type"].intValue)!
    }
}
```

原因がわかりました。 `Idol.Type` のrawValueは0〜2の3パターンを想定しているのに、実際のresponseには `3` が入ってきています。
サーバチームに確認したところ、この「武内P」は、新しいtypeを持つキャラクターなのだそうです。
Typeは3パターンで決めうちだと聞いてたのに増えるなんて！　と愚痴りつつも、あなたは取り急ぎPull Requestを出しました。

```diff
    enum Type: Int {
        case Cute
        case Cool
        case Passion
+       case Producer
    }
```

Enumのcaseをひとつ増やして、これで一安心…と思ったら、チームメンバーからレビューがつきました。

## ふたつの解答

Oさんのレビュー。

>O:
これだとダメ。また新しいTypeが実装された途端、再びクラッシュするから。
>
```swift
type = Type(rawValue: json["type"].intValue)!
```
のforced unwrapをなくして、このクラスの `type` プロパティはOptionalに変えよう。
解釈できない状態はnilで表現すべき。

そこに、チームメンバーのFさんから横レスがつきました。

>F:
えー？
外からtypeを参照するときいちいち `if let` でunwrapするの面倒じゃない？
それよりさー、新しいcase `Type.None` を追加して、
>
```swift
type = Type(rawValue: json["type"].intValue) ?? .None
```
って書けば一番楽だと思うな

## ふたつの立場の立脚点

ここからは二人の論戦が続きます。

O「 `Type.None` ？　解釈できないだけで存在してるのに？」

F「ネーミングの問題ー？　じゃあ `Type.Unrecognized` にしよう」

O「命名の問題じゃない。
　`Type.Unrecognized` のrawValueは？　5だよね。
　レスポンスの値がたとえば7でもそのcaseになると…値が乖離しちゃう」

F「それ、気にするとこー？
　…まーぶっちゃけstringで返してほしかった的なとこはあるよねー…って話はおいといて。
　rawValueが問題なら、`enum Type: Int` の `Int` を削ってから `init(id:Int)` みたくイニシャライザを用意すればOK?」

O「そういうことじゃなくて。
　実際は `Unrecognized` なんてTypeはないんでしょ。
　存在する状態と存在しない状態が別れる場合、**Swiftに言語仕様としてOptionalが用意されてるのだから、Optionalを使うべき**ってこと」

F「うーん…
　実運用上、解釈できないTypeなんて異常値でしょー？
　そのためにプロパティをOptionalにしたら、アプリ全体でunwrapの手間が増えちゃうじゃん。めんどくさくなーい？
　Typeが解釈できないってのも、列挙できるひとつの状態だよ。そもそもOptional型だって所詮 `Some` と `None` のEnumなんだし。
　言葉を返すけど、列挙できる場合、**Swiftに言語仕様として列挙子が用意されてるのだから、列挙子を使うべき**じゃないかなー」

OさんとFさんは、視点が違うだけで、どちらももっともらしいことを言っているように見えます。

# さて、あなたはどう考えますか？ 

このエントリに結論はありません。
コメント等、お待ちしています。
複数ファイルアップロードで、アップロード前に画像とファイル名を表示させるサンプル

<img width="476" alt="スクリーンショット 2016-02-14 14.05.20.png" src="https://qiita-image-store.s3.amazonaws.com/0/45822/ccb01e17-f8c8-1554-ba5e-eb1ba0a2aa50.png">

上の絵のように、ファイルを選択したタイミングで画面にサムネイルとファイル名を表示させます。
jQueryを使わずJavaScriptだけで書いているので、少々長いです。。

```html
<input multiple="multiple" name="article_attachments[image_file_name][]" type="file" id="article_image_file_name">
<output id="list"></output>
```

```html
<script>
  document.getElementById('article_image_file_name').onchange = function(event){
    initializeFiles();

    var files = event.target.files;

    for (var i = 0, f; f = files[i]; i++) {
      var reader = new FileReader;
      reader.readAsDataURL(f);

      reader.onload = (function(theFile) {
        return function (e) {
          var div = document.createElement('div');
          div.className = 'reader_file';
          div.innerHTML = '<div class="reader_title">' + encodeURIComponent(theFile.name) + '</div>';
          div.innerHTML += '<img class="reader_image" src="' + e.target.result + '" />';
          document.getElementById('list').insertBefore(div, null);
        }
      })(f);
    }
  };

  function initializeFiles() {
    document.getElementById('list').innerHTML = '';
  }
</script>
```

```scss:custom.scss
.reader_file {
  float: left;
  padding: 10px;
  width: 20%;
}
.reader_image {
  width: 80%;
}
.reader_title {
}
```

以上です。ありがとうございます。
jsのグラフライブラリ52選 その1

# JavaScriptでグラフを描くために
javascriptでグラフを描くときに、やはりライブラリを使用しないといろいろ苦労する。ので、当然、ライブラリを使うことになろうと思います。

しかしながら、意外にもグラフライブラリは数も多く、

* そもそもどんなライブラリが存在するのか
* ライセンス形態は？有料？無料？
* 描けるグラフの種類は？
* あわよくば、アニメーションとかしちゃう？

など、使うまでの道のりもちょっと面倒です。

しかし、そんな時に有用なサイトがありました。

[JavaScript graphs](http://www.jsgraphs.com/)

書きたいグラフ、商用利用できるのかどうか、などを選択するだけで、選択肢が絞り込めます。そんな感じで、いくつか選んで触ってみたので、その感想を書きたいと思います。

# graphライブラリを触ってみた。
基本的には、個人で触るので、無料で使えるものだけを触ってみました。一度に書くのは面倒なので、少しずつ書くことにします。

## [Canvasjs](http://canvasjs.com/)
### 良かった点
#### デザイン
[Canvasjs](http://canvasjs.com/)を選んだ理由は、ズバリかっこよさです。フラットデザインでシンプル、そしてデフォルトの色使いがくどくない、ところがミソでした。
細かいチューニングもできて、グラフのアニメーションもできました。
#### 軽量さ
グラフ描画が軽かった！
他のライブラリだと、ライセンスのこともあるのでしょうか、裏で通信したりしているようです。そのため、描画が重たいものも珍しくなかったです。

### 微妙な点
#### ライセンス
個人的には、ライセンスでした。ライセンスは[Creative Commons Attribution-NonCommercial 3.0 ](http://creativecommons.org/licenses/by-nc/3.0/deed.en_US)となっています。詳細は、リンク先を読んでもらうとして、Canvasjsの公式サイト（2016/2/14時点）には、
* a non-profit
* student or an educational institute
なら無料で使えると明言されています。
アファリエイトは微妙ですね。そして、（製品やサービスへ組み込まないにしても）企業で使ってみるのもほぼ黒いグレーだな・・・というのが残念ポイントでした。

#### バグ
bootstrapと組み合わせて使っていた時、floatシステムの中で回りこみさせつつグラフが描画できないというバグがあったのです。
バグの内容は、以下です。

```js:jquery.canvasjs.min.js:261:0
IndexSizeError: Index or size is negative or greater than the allowed amount
```

どうやらググってみると、canvasjsというよりcanvasのバグのような気がしますが、いずれにしろ、グラフ描画できなかったのは事実です。グラフが描きたいだけで、どうしてもこのライブラリである必要もないので、このライブラリを使うことをやめることにしました。

今日はここまで。

#### 2016/2/18追記
上記のバグかも、と書いた内容ですが、回避策がありました。
どうやら、グラフを描画するためのpx数を算出するロジックで、widthを明示しておかないと、0の計算が発生するようです。これが原因で、グラフの描画ができなかったようです。

ので、cssでwidthを明示しておいてあげると、グラフの描画ができるようになりました。
Cocoaの機能を使ってWi-FiのON/OFFを切り替えるAppleScriptハンドラ



* 切り替えに成功すると`true`、失敗すると`false`が返る


```AppleScript:switchWiFi.scpt
use framework "CoreWLAN"

--Wi-Fi ON
my switchWiFi(true)

--Wi-Fi OFF
my switchWiFi(false)

on switchWiFi(onOrOff as boolean)
	--require framework: CoreWLAN
	current application's CWInterface's interface()'s setPower:onOrOff |error|:(missing value)
end switchWiFi
```


## 更新履歴

* 2016-02-13: CoreWLANフレームワークを使って作成