OmniAICreator/Qiita-1.07M huggingface dataset:
エイリアステンプレートいろいろ。

C++11ではエイリアステンプレートという便利なものが使うことができます。

```
template < class Ty1, class Ty2 = void >
using enable_if = std::enable_if < Ty1::value, Ty2 >;
```

すばらしい。これを使うと新たな構造体を作ることなく新たな発展形を作ることができます。

まずはヘルパ構造体をつくる。

std::true_typeとは反対のものです。いい名前が思い浮かばない。

```
template < bool > // convert from bool_value to bool_type
struct meta_bool : std::true_type {};
template <>
struct meta_bool< false > : std::false_type{};
```

trueやfalseからstd::true_typeやstd::false_typeを生成することが出来ます。
std::integral_constantから直接生成してもいいのですけれど。

まずは、論理反転です。

```
template < class Ty >
using meta_not = meta_bool < !Ty::value >;
```

エイリアステンプレートで作られたこのメタ関数は、抽象的な論理反転をします。
これは非常に便利なもので、type_traitsのメタ関数は基本的に値を受け取るものがほとんどです。
`std::enable_if < true >`　こんな感じですよね。
それを高階関数にするのはごく普通のことです。

`std::enable_if < std::is_same < void, void >::value >::type`
とするよりは、

```
template < class Ty1, class Ty2 = void >
using enable_if = std::enable_if < Ty1::value, Ty2 >;
```

というものを作り、
`enable_if < std::is_same < void, void > >::type`
とした方が圧倒的に分かりやすいのです。

しかしこうすると論理反転などの操作で困りますので、上記のメタ関数が訳に立ちます。
`std::enable_if < !std::is_same < void, void >::value >::type`
`enable_if < meta_not < std::is_same < void, void > > >::type`

うむ。
同じように、論理和とかとか。

```
//
// meta-or
template < class Ty, class... Args >
struct meta_or
  : conditional_t < Ty, std::true_type, meta_or < Args... > >
{
};
template < class Ty >
struct meta_or < Ty >
  : meta_bool < Ty::value >
{
};
```

conditional_tはさっきの高階関数の思想に基づいたstd::conditionalの拡張版です。
オリジナルのboost::conditionalはこっちだった気がするんだけどどうだったっけか……

```
//
// conditional
template < class _Test, class _Ty1, class _Ty2 >
using conditional = std::conditional < _Test::value, _Ty1, _Ty2 >;
template < class _Test, class _Ty1, class _Ty2 >
using conditional_t = typename conditional< _Test, _Ty1, _Ty2 >::type;
```

論理積は論理和と論理否定だけで作ることができます。

```
//
// meta-and
template < class... Args >
using meta_and = meta_or < meta_not < Args >... >;
```

A && B　は　!( !A || !B )　に等しいです。

わたしはなるべく継承よりエイリアステンプレートだけでメタ関数を書くようにしているのですが、
Visual Studio 2014 CTPではエイリアステンプレート周りにバグがあるようですね。
このmeta_andを書いた時、`meta_not < Args >...`で引っかかったので頭を抱えたのですが、GCCで通りましたのでよくあるVSのバグだと判断しました。
バグじゃなくて未定義動作だよ！とかご存知のかたいらっしゃったらコメント頂けると嬉しいです。
VSをお使いの方は

```
//
// meta-not
template < class A >
struct meta_not
  : meta_bool < !A::value >
{
};
```

こういうふうにした方が良いかもしれません。
他にも型操作周りにはバグが多く、VSにはこまったものですが、エディタがとても好きなのでやっぱりこまったものです。

少しだけ具体的な利用例を出しますね。
使用方法としては、SFINAEやコンセプトの条件などが主になると思います。

```
template < class Ty1, class Ty2 = void >
using enable_if_t = typename std::enable_if < Ty1::value, Ty2 >::type;

//
// 文字列だけを受け取るprint
template < class Ty,
  enable_if_t < meta_or < std::is_same < Ty, char >, std::is_same < Ty, wchar_t > > >* = nullptr >
void print( const Ty* text );
```

こんなところでしょうか。


では、この辺で。
Swiftでキーボードにボタンを追加する

Swift でキーボードにボタンを追加する方法です。
例では、フィールドを２つ Outlet 接続してあり、myField1 の編集時のキーボードの上部に`Done` ボタンを追加しています。`Done` ボタンをタップすると、myField2 の方に Success!! と表示してキーボードを消します。


import UIKit

class ViewController: UIViewController, UITextFieldDelegate {
    
    @IBOutlet weak var myField1: UITextField!   // 入力テキストフィールド
    @IBOutlet weak var myField2: UITextField!   // メッセージ表示フィールド
    

    override func viewDidLoad() {
        super.viewDidLoad()
       
        // ボタンビュー作成
        var myKeyboard = UIView(frame: CGRectMake(0, 0, 320, 40))
        myKeyboard.backgroundColor = UIColor.darkGrayColor()
        
        // Doneボタン作成
        var myButton = UIButton(frame: CGRectMake(5, 5, 80, 30))
        myButton.backgroundColor = UIColor.lightGrayColor()
        myButton.setTitle("Done", forState: UIControlState.Normal)
        myButton.addTarget(self, action: "onMyButton", forControlEvents: UIControlEvents.TouchUpInside)
        
        // ボタンをビューに追加
        myKeyboard.addSubview(myButton)
        
        // ビューをフィールドに設定
        myField1.inputAccessoryView = myKeyboard
        myField1.delegate = self
        
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

// Done ボタンタップ時に実行するメソッド
    func onMyButton () {
        myField2.text = "Success!!"
        self.view.endEditing(true )

    }
    
// リターンキーでのデリゲートメソッド
    
    func textFieldShouldReturn(textField: UITextField) -> Bool {
        self.view.endEditing(true)
        return false
    }

}`

![iOS Simulator Screen Shot 2014.11.30 15.47.16.png](https://qiita-image-store.s3.amazonaws.com/0/60473/0f0609ba-1fb8-873b-e697-505b5e867aec.png)
![iOS Simulator Screen Shot 2014.11.30 15.47.38.png](https://qiita-image-store.s3.amazonaws.com/0/60473/aad58c0f-3ed7-15d2-2889-4a58d5820348.png)
中学入試から：数字の個数

# はじめに
本記事はNabetani様がCodeIQに出題した問題 [「中学入試から：数字の個数」](http://nabetani.hatenablog.com/entry/codeiq_digicount_q1138) の回答です。

# 回答例(C++11)
Boostライブラリを使ってしまったが、実際にCodeIQ上で提出する場合、標準外のライブラリを使って良いのだろうか？

```count_number.cpp
// g++ -g -Wall -std=c++11 count_number.cpp
#include <string>
#include <vector>
#include <fstream>
#include <iostream>
#include <boost/lexical_cast.hpp>
#include <boost/algorithm/string.hpp>

using LL = long long;

LL solve(LL n, int target)
{
    LL res = 0;

    for(LL i = 1; i <= n; i *= 10) {
        const LL div = static_cast<LL>(n / (i * 10));
        const LL mod = n % (i * 10);
        if(target == 0) {
            res += ((div - 1) * i) + (i <= mod ? i : mod + 1); 
        } else {
            res += (div * i) +
                [&]() {
                    if(target * i <= mod - i) {
                        return i;
                    }   
                    if(target * i <= mod) {
                        return mod - (target * i - 1); 
                    }   
                    return 0LL;
                }();
        }   
    }   

    return res;
}

void print_result()
{
    std::ifstream ifs("./data.txt");

    if(ifs.fail()) {
        std::cerr << "Failed to read file." << std::endl;
        return;
    }

    using namespace boost;
    using namespace boost::algorithm;

    std::string line;
    std::vector<std::string> wrong_no;
    while(std::getline(ifs, line)) {
        std::vector<std::string> v1, v2;
        split(v1, line, is_any_of("\t")); split(v2, v1[1], is_any_of(","));
        const LL actual =
            solve(lexical_cast<LL>(v2[1]), lexical_cast<int>(v2[2])) -
            solve(lexical_cast<LL>(v2[0]) - 1, lexical_cast<int>(v2[2]));
        if(actual != lexical_cast<LL>(v1[2])) {
            wrong_no.push_back(v1[0]);
        }
    }

    std::cout << join(wrong_no, ",") << std::endl;
}

int main()
{
    print_result();
    return 0;
}

```

# 実装リンク集
[Nabetani様のブログ](http://nabetani.hatenablog.com/entry/2014/11/19/003242) に他の方の実装リンク集が載っています。興味のある方は見てみると良いかと思います。
パーフェクトJava ２章 文字と文字列


## 2-2 文字列の操作

### 2-2-1 Stringクラス
Stringクラスの説明。
推奨しない書き方としながら、最初は下のコードのような説明になるのは仕方がないのかな・・・

```
String s = new String("0123456789")
```

Stringオブジェクトは不変だという説明がきちんとされているけど、初学者はなかなか理解できないだろうな。特に、中身は文字配列という記述が前にあるし。

### 2-2-2 Stringクラスの使用例
サンプルコードはサポートサイトからダウンロードができる。
isEmptyメソッドで空文字の判定が可能という記述を見て、

```
if (s == null || s.isEmpty() || s.equals("")) {
}
```

という職場で見たコードを思い出したw

### 2-2-3 文字列リテラル
ここで、前節のnew String("0123456789")の書き方が推奨されない理由を説明している。
オブジェクトを生成して変数がそれを参照するという説明を最初からしているのはいい。

文字列と改行
複数行で文字列リテラルを記述するとき。コンパイル時に評価されるので実行速度の低下はない。このあたりは、コンパイルしたclassファイルをみたらよくわかる。

```
String s = "0123"
			+ "345"
```

### 2-2-4 StringBuilderクラス
変更可能文字列クラスとしてStringBuilderを紹介。
サンプルコードの注意点として、引数オブジェクトの中身を書き変えている点を指摘している。

### 2-2-5 文字列の結合
- 文字列結合の注意と効率
	- ループでの結合ではStringBUilderを使わないとパフォーマンスが低下することがある。

```
public class Main {
    static String concat(String[] array) {
        String result = "";
        for (String s : array) {
            result += s;  // +=演算で文字列結合（裏でStringBuilderオブジェクト生成コードになる）
        }
        return result;
    }

    public static void main(String... args) {
    }
}
```
↓ 下の書き方で書く。

```
public class Main {
    static String concat(String[] arr) {
        StringBuilder result = new StringBuilder();
        for (String s : arr) {
            result.append(s);
        }
        return result.toString();
    }

    public static void main(String... args) {
    }
}
```

#### joinメソッド
**Java8**から登場したAPI。
- 引数が可変長引数
- 引数がコレクション（文字列のリストなど）

```
String s = String.join(",", "abc", "def", "ghi"); // 区切り文字","
System.out.println(s); //=> "abc,def,ghi" を出力
```

### 2-2-6 文字列の比較
よくある==演算子での文字列比較はダメという話。

#### StringとStringBuilderの同値比較
StringBuilderオブジェクトと同値の比較をする場合、contentEqualsメソッドを使う。このメソッドは知らなかった。

```
boolean contentEquals(CharSequence cs)
```

#### StringBuilder同士の比較
toStringしてからcontentEqualsを使う。メソッドとしてあってもいいのにと思う。

### 2-2-7 文字列の大小比較とソート処理
compareToメソッドの紹介。順序は直感とは違う場合があるので注意が必要（コラム参照）。

### 2-2-8 数値と文字列の相互変換

#### 数値の内部表現への変換
これも知らなかった。バイナリを扱うクラスのtoString()で使うとデバッグが楽になりそう。

```
String s = Integer.toHexString(-1) //=> "ffffffff"
String b = Interger.toBinaryString(-1) //=> "1111..."
```

#### 文字列から数値への変換
セキュリティホールの多くは、利用者の入力した文字列を内部値に変換するときの甘さから生じている。注意して使用すること。
valueOfメソッドよりもparse系メソッドのほうが効率が良い。

## 2-3 文字

### 2-3-1 文字とは
文字コード。Javaの世界の文字コードはUTF-16。
char型は数値ですよというお話。

### 2-3-3 文字と文字列
Javaの思想に純粋に従うと、文字は長さ1の文字列として扱うべき。
ただし、実行速度を追求すると、文字として扱う場面が出てくる。自分も文字として戦わざるを得ない状況は何回か経験している。

### 2-3-5 文字とコードポイント
Unicodeは21ビット長の範囲を文字として扱うように進化したので、コードポイントといい、16ビット長のchar型と区別している。

## 2-4 バイトと文字
ここでは特にUTF-8のバイト列を変換するときを扱っている。
java.nio.charset.StandardCharsets.UTF_8でやるとtry-catchを書かなくてよくなるというのは、昔からJavaをやっている人は意外に知らない？（昔のコードを直してないだけなのかよく見かける。）

```
String s = new String(bytes, java.nio.charset.StandardCharsets.UTF_8)
```
俺的フロントエンドエンジニア三種の神器に認定したCharlesについて 〜まとめ〜

Charles記事のまとめページです。

随時更新中です。

* [俺的フロントエンドエンジニア三種の神器に認定したCharlesについて 〜その1〜 Charlesの素敵なところ](http://qiita.com/dayoshix/items/b658389eea076b2e8ec3)
* [俺的フロントエンドエンジニア三種の神器に認定したCharlesについて 〜その2〜 インストールと設定](http://qiita.com/dayoshix/items/d02e46b033b8f7d9f471)
* [俺的フロントエンドエンジニア三種の神器に認定したCharlesについて 〜その3〜 最初に覚えたい基本的なこと](http://qiita.com/dayoshix/items/9bfce504686108545757)
* [HTTPリクエストにCharlesでブレークポイントを貼ってみる](http://qiita.com/dayoshix/items/6e0d95b0cc0ea6f392bf)
AWS EC2 Debian インスタンスの時刻設定

AWS EC2 のインスタンスの標準時間は UTC なので、日本時刻に合わせる。
まず `date` コマンドでデフォルト状況の確認。

```
$ date
Sun Nov 30 06:22:09 UTC 2014.
```

以下のコマンドを実行する。

```
$ sudo dpkg-reconfigure tzdata
```

グラフィカルなメニューが出てくるので、Asia -> Tokyo と選ぶ。

`date` コマンドを実行し、JST になっているかどうか確認。

```
$ date
Sun Nov 30 15:22:12 JST 2014
```

JST に設定できた。
SnakeYamlを用いたyaml→Map、yaml→Bean変換

## Maven Dependency
    <dependency>
      <groupId>org.yaml</groupId>
      <artifactId>snakeyaml</artifactId>
      <version>1.14</version>
    </dependency>

## String → Map
### Data
    data1: AAA
    data2:
      - aaa
      - bbb
      - ccc
    data3:
      zzz: ZZZ
      yyy: YYY
      xxx: XXX

### Code
```java
        Yaml sYaml = new Yaml();
        @SuppressWarnings("unchecked")
        Map<String, Object> yaml = (Map<String, Object>) sYaml.load(yamlString);
        
        assertThat((String) yaml.get("data1"), is("AAA"));
        
        @SuppressWarnings("unchecked")
        List<String> data2 = (List<String>) yaml.get("data2");
        assertThat(data2.get(0), is("aaa"));
        assertThat(data2.get(1), is("bbb"));
        assertThat(data2.get(2), is("ccc"));
        
        @SuppressWarnings("unchecked")
        Map<String, String> data3 = (Map<String, String>) yaml.get("data3");
        assertThat(data3.get("zzz"), is("ZZZ"));
        assertThat(data3.get("yyy"), is("YYY"));
        assertThat(data3.get("xxx"), is("XXX"));
```

## String → Bean
### Data
    !!com.YamlBean
    data1: AAA
    data2:
      - aaa
      - bbb
      - ccc
    data3:
      zzz: ZZZ
      yyy: YYY
      xxx: XXX

### Bean
```java:YamlBean.java
package com;

import java.util.List;
import java.util.Map;

public class YamlBean {

    private String data1;
    private List<String> data2;
    private Map<String, String> data3;

    public String getData1() {
        return data1;
    }

    public void setData1(String data1) {
        this.data1 = data1;
    }

    public List<String> getData2() {
        return data2;
    }

    public void setData2(List<String> data2) {
        this.data2 = data2;
    }

    public Map<String, String> getData3() {
        return data3;
    }

    public void setData3(Map<String, String> data3) {
        this.data3 = data3;
    }
}
```

### Code1
```java
        Yaml yaml = new Yaml();
        YamlBean yamlBean = (YamlBean) yaml.load(yamlString);
        
        assertThat(yamlBean.getData1(), is("AAA"));
        assertThat(yamlBean.getData2().get(0), is("aaa"));
        assertThat(yamlBean.getData2().get(1), is("bbb"));
        assertThat(yamlBean.getData2().get(2), is("ccc"));
        assertThat(yamlBean.getData3().get("zzz"), is("ZZZ"));
        assertThat(yamlBean.getData3().get("yyy"), is("YYY"));
        assertThat(yamlBean.getData3().get("xxx"), is("XXX"));
```

### Code2
こちらの書き方でも動作すると思っているのですが、
loadAsメソッドでNoSuchMethodErrorが発生しているので未確認。。。

```java
        Yaml yaml = new Yaml();
        YamlBean yamlBean = yaml.loadAs(yamlString, YamlBean.class);
        
        assertThat(yamlBean.getData1(), is("AAA"));
        assertThat(yamlBean.getData2().get(0), is("aaa"));
        assertThat(yamlBean.getData2().get(1), is("bbb"));
        assertThat(yamlBean.getData2().get(2), is("ccc"));
        assertThat(yamlBean.getData3().get("zzz"), is("ZZZ"));
        assertThat(yamlBean.getData3().get("yyy"), is("YYY"));
        assertThat(yamlBean.getData3().get("xxx"), is("XXX"));
```
Spring Boot ガイドブック

# Spring Boot ガイドブック

このガイドブックはこれから記載していくSpring Bootに関する記事のリンク先を集約したものです。
Spring Bootのことで探しものがあればこのページをご活用ください。

なお、このガイドブックは Spring Boot 1.1.9 を前提にしています。

## 1. 概要編

### 1.1. 特徴

## 2. 構築編

### 2.1. 環境構築

#### 2.1.1. ビルド環境

##### 2.1.1.1. [Mavenを使ってビルド環境を構築する](http://qiita.com/skinoshita/items/b2c48659b977b26b1eec)

##### 2.1.1.2. Gradleを使ってビルド環境を構築する

### 2.2. アプリケーション構築

#### 2.2.1. 簡易アプリケーション

#### 2.2.2. MVCアプリケーション

#### 2.2.3. RESTful Webサービス
Google BigQuery のスキーマ定義を指定しやすくする

## ロード時にスキーマ定義も一緒に送るスタイル
Google BiqQueryには、データのロード時にスキーマ定義も一緒に設定する。ただしコマンドラインが長くなって読みづらい。

```
$ bq load --project_id=[プロジェクトID] [データセット名].[テーブル名]  [ファイル名] title:string,asin:string,isbn:string,page:string,publisher:string,author:string,price:integer,genre:string,desc:string,pupbdate:string

```
jsonで指定する方法もあるが、それはそれでおおげさ。

## 複数行に分割すると幸せになれる
こんな感じ。bashにおいて行末のバックスラッシュは次の行に継続するという印だからそれを利用。

```
$ bq load --project_id=[プロジェクトID] [データセット名].[テーブル名]  [ファイル名] \
title:string,\
isbn:string,\
page:string,\
publisher:string,\
author:string,\
price:integer,\
genre:string,\
desc:string,\
pupbdate:string
```
これならエクセルベースで作っているインターフェイス定義から生成しやすい。
Scala関連のイベント

# 内容
Scala関連の有名な国内外イベントメモ。

# 動機
Scalaは非常に挑戦的な言語です。
2003年に登場した言語ですが、初期はメジャーバージョンが半年程度で更新。
今でも1年程度でメジャーバージョンのバージョンアップが行われています。
またメジャーバージョンが変わるとバイナリ互換が消える当たりからも挑戦的な言語であることが伺えます。
後方互換性を維持したままの無理な改修よりも、後方互換性を捨てることで行える抜本的な改修を選択したということでしょうか。そこら辺は想像の域ですが。

そのようなScalaだからこそ、常に最新の情報をキャッチアップしておいたほうが良さそうなので、役に立ちそうなカンファレンス等を備忘録代わりにメモ。

# イベント一覧 
大体、我らがMartin Odersky教授が登壇

* [Scala Workshop](http://lampwww.epfl.ch/~hmiller/scala2014/)

* [Scala Days]
(http://scaladays.org/)

* [Scala eXchange]
(https://skillsmatter.com/conferences/1948-scala-exchange-2014)
2014年は12月8，9日にロンドンで開催

* [Scala io]
(http://scala.io/)

* [Scala Matsuri]
(http://scalamatsuri.org/)
日本開催。

# 終わりに
Scala eXchangeがすごい面白そう……。
UIApplication.applicationIconBadgeNumber は、値の反映に遅延があるっぽい


ホーム画面に数字のバッチを表示する時は、UIApplication.applicationIconBadgeNumber を使用しますが、今回はそちら関する小ネタです。

### 実験ソースコード

for文でループさせて、applicationIconBadgeNumberに値を設定し、その後すぐに値を参照しています。

``` Swift
let application = UIApplication.sharedApplication()

application.applicationIconBadgeNumber = 0

// badge numberを増やす
for var i = 0; i < 10; i++ {
    application.applicationIconBadgeNumber = i
    
    // i と badge numberは一致するはず...
    println("i=\(i) bn=\(application.applicationIconBadgeNumber)")
}
```
実行すると、以下のようになります。

```
// 実行結果ログ
i=0 bn=0
i=1 bn=0
i=2 bn=1
...
i=9 bn=8
```

本来ならiの値とapplicationIconBadgeNumberの値は一致するはずですが、なぜかapplicationIconBadgeNumberの値が少なくなっています。

### 試しにsleepを入れると...
ここで、applicationIconBadgeNumberに値を設定した直後に1秒のsleepを入れてみます。

``` Swift
for var i = 0; i < 10; i++ {
    application.applicationIconBadgeNumber = i
    
	// sleepを入れてみる...
	sleep(1)

    // i と badge numberは一致するはず...
    println("i=\(i) bn=\(application.applicationIconBadgeNumber)")
}
```

```
// 実行結果
i=0 bn=0
i=1 bn=1
i=2 bn=2
...
i=9 bn=9
```

そうすると、意図通りに値が表示されます。

### 結論

ご覧のように、applicationIconBadgeNumberは、値を入れてもすぐには反映されない場合があるようです。

あまりこういう使い方をする人はいないと思いますが、知っておいたほうが良いかもですね。
nkfで入力エンコードを明示する

## コマンド例
```
nkf --ic=CP932 --oc=UTF-8 [input file] > [output file]
```
【意味】入力ファイルはWinodowsのSJIS（それがCP932）で、UTF8に変換して出力しないさいよ。

## 説明
nkfのサンプルの大半が、入力エンコードを自動判定に頼ってる。ただし自動判定は失敗することもありえるので、明示的に入力エンコードを指定する。SJISだと幾つかパターンがあるので、CP932とさらに絞り込んだ形で明示する。これなら、nkfを使ったことがない人でも、コマンドをみただけで理解ができる。
Arduino UNOでATTiny開発してるときに書き込めない！AVR壊れた！？その前に

# あれ？！

ATTiny13AやATTiny85など8ピンAVRはArduinoがあれば簡単に開発できて、とても便利です。

[Arduinoで、小っちゃいIC（ATTiny）を使う方法](http://qiita.com/tadfmac/items/bf5a657add0e9a4b7b77)

でもですね。ときどき、

![あれ?](http://img.dfm.lrv.jp/attinyrecovery/error.png)
**見たくないエラー画面！**

> avrdude: stk500_recv(): programmer is not responding

こんな表示が出て、書き込めなくなることがあります。

> 実は私はこれのせいで、ATTinyを何個も捨てました。

というわけで、もう少し悪あがきしてみることにしました。

# 確認してみるとこと

壊れた！？と思う前に。

## 1. 逆に刺してない？

8ピンAVRって、VCCとGNDが対角線になってるので、逆に刺すとAVRが超熱くなります。

![ATTiny13A](http://img.dfm.lrv.jp/attinyrecovery/tiny13a.png)

これで壊すことが良くあります。

凄い反応速度で電源を切ってAVRを刺し直してください！
刺し直して、普通に書き込めたら、まだ壊れてなかったということにしましょうw

## 2. 接触不良？

ICソケットや、ブレッドボードを使ってて、何度も抜いたりさしたりしてると、
そのうち接触が悪くなってるかもしれません。

配線を見直して、再チャレンジ！

## 3. なんどやってもダメだけど？ →ヒューズリセットを試してみよう

何度も確認してもダメだ！
という状況になったら、ヒューズリセットを試してみましょう。

ちょっとした回路を作る必要がありますが、簡単なので、この機に１つ作っておくと良いと思います。

ヒューズリセットの回路とArduino用のスケッチは下記サイトに公開されています。

[参考サイト：Wayne's Tinkering Page / ATTiny Fuse Reset](https://sites.google.com/site/wayneholder/attiny-fuse-reset)

### ATTinyの接続方法

基本的には上記サイトの回路図の通りやれば出来ます。何点か補足。

- 12V電源は、Arduinoに刺さる12VのACアダプタを利用すると楽です。ACアダプタで12V 供給する場合、Arduino UNOのVinにR5を繋ぐようにしてください。
- トランジスタ2N3904は2SC1815でもできますが、ECBの順番が変わるので配線の際は注意してください。

### スケッチをArduino UNOへロード

配線できたら、サイトに載ってるスケッチを適当な名前で保存して、Arduino UNOに書き込みます。

### 接続

下記のように接続しましょう。今回はACアダプタを使う前提で。

1. Arduino UNOとATTinyを接続。
2. USBケーブルでArduino UNOとPCを接続
3. ACアダプタでArduino UNOと電源を接続

### フューズリセットの実行

いよいよ、フューズリセットを実行します。

まず、Arduino IDEのシリアルモニタを起動します。

![シリアルモニタの起動](http://img.dfm.lrv.jp/attinyrecovery/serial.png)

起動すると、こんな画面ですね。

![シリアルモニタ](http://img.dfm.lrv.jp/attinyrecovery/mon.png)

> ボーレートは、19200 に合わせてください。

シリアルモニタ画面で、適当な文字を1文字（何でも良いw）入力して、**送信** ボタンを押してください。
下記のような画面が出ると成功です。

![結果](http://img.dfm.lrv.jp/attinyrecovery/res.png)

2行目がフューズ書き換え前、3行目が書き換え後です。

## Arduino IDEで普通に書き込みできたら成功

フューズの書き換えが終わったら、配線を変えてATTinyにブートローダーを書き込んでみましょう。
やり方は、[Arduinoで、小っちゃいIC（ATTiny）を使う方法](http://qiita.com/tadfmac/items/bf5a657add0e9a4b7b77) を見てください。

うまく書けたら、AVRの救出成功！

## それでも治らないときは。。。わからないw 誰か教えてください！

残念ながら、フューズを書き換えても、やっぱり冒頭のエラーが出ることがあります。
これ、他にも何か試す方法があるかもしれませんが、、、、判らないので、これは壊れたことにしています。

> その状態のATTinyは現状捨てています。。。

誰か他にも試した方が良いことをご存知の方は是非教えてください！
よろしくお願いします〜！
Git 作業における commit と push の頻度について

## 注意
この記事は、2014年に投稿されたものです。
時代は変わっても運用におけるベースは大きくは変わっていませんが、投稿としては古い内容ですのでご注意下さい。
未だにストックなど多くいただきますので注意事項として、追記させていだきます。

## 以下本文です。
はい、今更かもしれませんが。俺としてはGitを扱う上で結構重要だと思っている **commitやpushの頻度** について書きたいと思います。はじめに断っておきますが技術的なテクとかの話ではないです。ほとんどが **言われてみれば当たり前じゃん** 程度の内容だと思って下さい。

ですが、**flowとか運用方法** とか **gitを使いこなすちょっとしたテク** なんかより重要だと思っているのは俺だけでしょうか...？

## どの単位でコミットしたりプッシュしていますか？
みなさん、どのような単位でコミットしたりするようにしていますか？未だに **適当にやってる** みたいな人がいますが、決まったルールがない場合や一人で運用しているリポジトリなどの場合は確実に **単位や頻度** というものは意識してGitを使ったほうがいいです。誰よりも自分のために。

## 俺の例
### コミットの最大粒度は1タスク
自分の場合、会社ではPivotalTrackerを使っているので基本的には **Storyと呼ばれるタスク単位** が最大の粒度になると考えています。コミットをそれ以上大きなものにしてしまうと、良いことなんてなにもないと思っているからです。

### たとえタスクが途中でもキリが良ければ即コミット
**サブタスク単位** とか **本日の作業終了時** など、キリが良いタイミングがあればガツガツコミットしていきましょう。

頻度は高ければ高いほど正義だと思って下さい。

注意点としてはコミットコメントが適当になることですが、コミットコメントルールがない場合でも、コメントで容易に内容が差別できる程度のコメントは書くようにしましょう。

*最悪 rebase -i などでコミット整理するのもありですが、個人的にはあまり使わないです。ここらへんは個人的な好みの話なので、みなさんチームや個人で模索していただけると良いと思いますが個人的には、整理するなら squash marge派です。

### コミットしたらプッシュしとこう
プッシュは簡単です。**commitしたらpushする** だけです。
極端な言い方すると。

```
git commit -m 'hoge'; git pull; git push origin :branch
```

毎回これだけでも、OKですね。もう何も考えずプッシュしまくりましょう。

コミットしたからにはプッシュしない理由なんてありません。たとえ途中のコードだとしても、リファクタ予定のコードだとしても、プッシュしましょう。

**途中のコードが見られるの恥ずかしい** なんてナンセンスです、ガツガツ見てもらいましょう。

もちろん、あとあと修正してから

```
git push -f origin :branch
```

なんてしないでくださいねｗ

## なぜ、細かい単位での頻度を推奨するのか
あくまで個人的な考え方ですが、そうする理由をリストで簡単に説明します。なぜかは考えてみてくださいｗ

### コミットの頻度を細かくする理由
- 自身の見積もり精度やタスク管理能力向上
- 複数タスクが混在したコミットは悪
- コミットとタグの相性UP
- Pivotalなどの外部サービスとの連携が容易
- 履歴を参照する際のコスト低下(log, reset, bisect, rebase時など）
- 自分や他人がみてもcommit内容の把握が容易

### プッシュの頻度を細かくする理由
- 大きなコンフリクト発生頻度低下
- git pull の頻度も自然と上昇
- チーム間での状況共有が容易
- コードは即他人に晒すという意識向上

### デメリットはないの？
特にないと思います。敢えていうなら「手間のコスト」ですが、そもそも大したコストじゃないですし、得られるメリットと比べるとROIは高い思うのは私だけでしょうか？

あとは人によっては、「コミットは整理してからPUSHしたい」などもあると思いますが、整理欲高いとPUSHタイミングが遅れがちになるので個人的にはすきじゃないです（なんどもいいますが、ここは好みの話です。）

## なぜ、頻度を意識することが重要だと思うのか
### Gitが何を期待しているのか考えてみる
実は、これは自分なりに導き出した答えというよりは「Gitが期待しているであろう使い方」を考えた結果の使い方なんです。

なぜそう考えるかというと、「ちょっと変わった使い方」とか「無理すればこういう風にも使える」みたいな使い方は、なるべくやめたほうがいいと考えているからですね。

### ツールの使い方・考え方
ちょっと脱線しますが、Gitというのはツールです、自分やチームのために便利なツールがあるから利用しているんですよね？

で、Gitに限らずツールには「期待された使われ方」があります。もちろん「期待以上の使い方」を発見することもあるでしょうが、基本的には「間違った使い方をしてツールのせいにする」ほうが多いと思うので、「期待された使い方」をまずは実践することをオススメします。

なぜなら、それがツールの一番パフォーマンスを発揮するための近道だからです。

そういった点に意識を向けてみると、Gitの他のコマンドとの相性などを考えて使えるので、とっても自然に使いこなすことができるようになると思いますよ。

## 余談
### 他のコマンドの考え方も整理してみよう
今回は、コミットとプッシュのみに焦点を絞りましたが、ぜひ以下なども再検討してみてください。

- git commit時のオプション
- git merge時のオプション
- git rebaseの使用頻度
- コミットメッセージ
- git tagの使い方

根本的な考え方が整理できていると自分やプロジェクトにあったコマンドの利用方法が見えてくると思います。

### 実は、はじめてAdventCalendarつくりました。
はい、今年は書く気満々だったので、我先にとGitを作成させていただきました。現時点でほとんどのCalendarが埋まっているのをみてホッとしていますｗ

実は会社では **Gitおじさん** と呼ばれていまして・・・ｗ
一応会社では、Gitのことならこじてぃにみたいな立場でやらせていただいてます。

デザイナーさんにGit浸透させることにも成功したりして、「もっと広めるべきですよ！」みたいなことも言われたので、自分が出来る範囲でアウトプットしていければと思っていたりもします。

このAdventCalendarの人気っぷりに、「まだまだ、Gitを学習する需要がある」とわかったので、AdventCalendarが終わっても何らかのアウトプットしていければと思います。

とりあえず、この **Git AdventCalendar** も3回書く予定なので、そちらもよろしくお願いしますｗ

## ご意見あればぜひコメントください。
- 俺はこういう理由でこうやっているよ

みたいなご意見とか参考例などあればぜひ教えてください。
bash 操作を快適にするショートカット集

## bash のショートカットをまとめる


| 操作      | 説明 |
|:---------| :----------|
| Ctrl + a | 行頭に移動する |
| Ctrl + e | 行末に移動する |
| Ctrl + b | 1 文字前へ |
| Ctrl + f | 1 文字後ろへ |
| Ctrl + p | 前の履歴を表示する |
| Ctrl + n | 次の履歴を表示する |
| Ctrl + u | カーソルより前を削除する, 削除した文字列はコピーされる |
| Ctrl + y | コピーした文字列をペーストする |
| Ctrl + d | 1 文字削除する (Delete) |
| Ctrl + h | 1 文字削除する (Backspace) |


* カーソル移動系はデフォルトの設定が Emacs モードになっているため、Emacs と同じ
* Vi モードにしたい場合は、下記コマンドを入力する

```bash
$ set -o vi
```

* Emacs モード(デフォルト)に戻したい場合は、下記コマンドを入力する

```bash
$ set -o emacs
```

* Vi モードの時は、以下のとおり
    * 操作前に Esc を押す必要がある
    * 文字入力の前には、a か i を押す必要がある
 
| 操作  | 説明 |
|:-----| :----------|
| 0    | 行頭に移動する |
| $    | 行末に移動する |
| h    | 1 文字前へ |
| l    | 1 文字後ろへ |
| k    | 前の履歴を表示する |
| j    | 次の履歴を表示する |
| dd   | 1 行削除する, 削除した文字列はコピーされる |
| p    | コピーした文字列をペーストする |
| x    | 1 文字削除する (Delete) |
| X    | 1 文字削除する (Backspace) |
HDD/SSD/USBを物理フォーマット(low level フォーマット)する方法(Windows)

# HDD/SSD/USBを物理フォーマット(low level フォーマット)する方法

(あまり技術的なエントリではありません)
USBメモリに直接ubuntuのISOをdumpして起動ディスクを作成したところ
Windowsで再度データ保存用として使うとした時に、64GBあるはずの領域がefi分の2MBしか見えなくなっていた。
これを元に戻すために物理フォーマットを行ったときのメモ。

## 利用したツール

Buffalo の「Disk Formatter」(Windowsのみ)
http://buffalo.jp/download/driver/hd/format.html

HDD等の大容量のものだとものすごく遅いらしい。
進捗率の表示がないので、実際にやってみてもあとどのくらい時間がかかるか分からない。
実はマニュアルに記載されていないが、**進捗率と推定残り時間はAltで表示できる。**
正直このメモを残す理由は、上の一行のためである。
Altで推定残り時間を確認して許容範囲なら待っても良いだろう。
ちなみに参考として、USB3.0の64GBの物理フォーマットで2時間かかった。


## 他のツール

後から知ったが、
HDDGURU の「HDD LLF Low Level Format Tool」(Windowsのみ)
http://hddguru.com/software/HDD-LLF-Low-Level-Format-Tool/

が上のDisk Formatterに比べて５倍くらい速いらしい。
SurfaceViewを重ねて描画する

Viewの重ね描きはaddContentViewで簡単にできるけど、SurfaceViewをオーバーレイしたい場合は一手間必要っぽいのでメモ。

```java:OvlView.java
public class OvlView extends SurfaceView implements SurfaceHolder.Callback{
    private SurfaceHolder holder;

    //コンストラクタ
    public OvlView(Context context) {
        super(context);

        holder = this.getHolder();
        holder.addCallback(this);

        //ビューの背景を透過させる
        getHolder().setFormat(PixelFormat.TRANSLUCENT);
        //最前面に描画する
        setZOrderOnTop(true);
    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        Canvas canvas = holder.lockCanvas();

        //カンバスの背景を透明に（これじゃだめ）
        //canvas.drawColor(Color.TRANSPARENT);

        //描画例（円を描く）
        Paint p = new Paint();
        p.setARGB(255, 255, 0, 0);
        p.setStyle(Paint.Style.STROKE);
        canvas.drawCircle(300, 300, 300, p);

        holder.unlockCanvasAndPost(canvas);
    }
```
まずは、カンバスへの描画時に背景を「Color.TRANSPARENT」で透明にしようとしたが、これは効果なし。
＜＜＜
（2014/12/2追記）
SurfaceViewの場合、カンバスの塗りつぶしを行わずに描画を重ねていくと古い描画が残ってしまうためアニメーションの場合（まあわざわざSurfaceView使うんだからアニメーション目的だよな、、）は上記は必要！
描画用メソッドの最初のほうで、以下の処理を行うべし。

```java
canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
```
＞＞＞

解決策は、
setFormat(PixelFormat.TRANSLUCENT);
で、透過が実現され（translucentは半透明の意味なのがちょっと謎、、）、
setZOrderOnTop(true);
で、OvlViewを最前面に描画する（奥行き（z）軸のトップすなわち最前面にViewを割りこませるというイメージ？）。

注意点は、上記の処理をコンストラクタ呼び出し時点で行うこと。
最初、surfaceCreatedなどの描画時でおこなっていたら上手くいかなかった。

あとは、重ねられるビューにaddContentViewしてやれば完成。

```java:MainActivity.java
public class MainActivity extends Activity {
    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

            //オーバーレイビューの追加
            ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
            addContentView(new OvlView(this), params);
        }
}
```
ただ、この手法では通常のビューの重ね描きのように無制限にレイヤー数を重ねられるわけではなく、3枚程度が限度らしい（聞いただけで未確認）。
パーフェクトJava １章 Javaの概要


## Javaの概要
Javaについてつらつらと特徴を説明しています。知っている人は飛ばせるところ。

### 特徴
- オブジェクト指向プログラミング言語
- 静的型づけ
- JVM
- GC
- デザインパターン
- 安全性

## 設計と抽象化
抽象化は大切だよねというお話。オブジェクト指向は技法や考え方であり魔法や原則ではないという記述は重要。このあたりの考え方はこの本（[オブジェクト指向でなぜつくるのか―知っておきたいプログラミング、UML、設計の基礎知識―](http://www.amazon.co.jp/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%E3%81%A7%E3%81%AA%E3%81%9C%E3%81%A4%E3%81%8F%E3%82%8B%E3%81%AE%E3%81%8B%E2%80%95%E7%9F%A5%E3%81%A3%E3%81%A6%E3%81%8A%E3%81%8D%E3%81%9F%E3%81%84%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%80%81UML%E3%80%81%E8%A8%AD%E8%A8%88%E3%81%AE%E5%9F%BA%E7%A4%8E%E7%9F%A5%E8%AD%98%E2%80%95-%E5%B9%B3%E6%BE%A4-%E7%AB%A0/dp/4822281957)）が役に立っている気がする。
パーフェクトJava 改訂2版を読んでみる

https://gihyo.jp/book/2014/978-4-7741-6685-8

## 目的
Java8を勉強したいというのが１番の目的。
それならばJava8だけをとりあげた本を勉強しても良かったのだけれど、どうせなら包括的に勉強し直してみたいと思い、ちょうど発売したばかりだったこの本を選んでみた。（かなり積読状態だったけど・・・）

この本の執筆思想は[著者のページ](http://dev.ariel-networks.com/wp/archives/4416)に書かれています。

## 目次
この[書評](http://d.hatena.ne.jp/torutk/20141112/p1)にもあるように目次構成に特徴がある本だと思います。

つらつらとそれぞれの章ごとにでも読書メモを残していこうと思います。

Part1 Java ~ overview
・[1章 Javaの概要](http://qiita.com/Tiy_Kt/items/50ad65277249c9930535)


Part2 Java言語基礎
・[2章 文字と文字列](http://qiita.com/Tiy_Kt/items/f5614861da4f0f047c4e)
・[3章 数値1](http://qiita.com/Tiy_Kt/items/8cb48c7ab83c2191d400)
・[4章 変数とオブジェクト](http://qiita.com/Tiy_Kt/items/5dd0d9d9d70d298ab88c)
・[5章 クラス](http://qiita.com/Tiy_Kt/items/5e41be78e738e69cb6d2)
・6章 コレクションと配列
・7章 インターフェース
・8章 ラムダ式とストリーム処理
・9章 文,式,演算子
・10章 Javaプログラムの実行と制御構造


Part3 Java言語発展
・11章 数値2
・12章 パッケージ
・13章 列挙型と定数と不変型
・14章 例外処理
・15章 ジェネリック型
・16章 ファイルとネットワーク
・17章 スレッド
・18章 リフレクション
・19章 アノテーション


Part4 JavaFX
・20章 JavaFX概論
・21章 JavaFXとグラフィックス
・22章 JavaFXと対話処理
・23章 JavaFXと並行処理
・24章 JavaFXユーザインターフェース

## サポートサイト
Java EEの記述がなくなっていると驚いていたら、[サポートサイト](http://gihyo.jp/book/2014/978-4-7741-6685-8/support)からダウンロードできるみたい。
Macの読み上げ機能を使って、英語のドキュメントを読む

エンジニアであれば英語の技術書を読みたいことが度々あると思いますが、どうしても英語に対して尻込みをすることは多いと思います。

そこで、iBooksで開いたepubのドキュメントを、Macの読み上げ機能で読ませてみました。

MACの読み上げ機能に英語のドキュエントを読ませてみた
https://vimeo.com/113179119

思ったより流暢に読んでくれているので、英語のドキュメントに対する毛嫌いが少しは改善しそうです。

#### 設定方法
設定は、システム環境設定=>音声入力と読み上げ=>テキスト読み上げで設定のページに行きます。

#### 英語の音声のダウンロード,
デフォルトでは日本語のKyokoしかいませんが、英語の声をダウンロードする必要があります。
システムの声のドロップボックスをクリックして、カスタマイズを選択してください。
英語の声が幾つもありますが、僕は英語(アメリカ女性) Samanthaを使っています。

あと、キーを押したときに選択しているテキストを読み上げるをオンにしておくと、とっても便利なので設定しておくと良いかと思います。
ClearScriptとmarked.jsを使って.NETでGFMライクなMarkdownパーサーを手軽に作成する方法

.NETでMarkdownエディタを作る場合、HTMLに変換する部分にはMarkdownSharpやMarkdownDeepをNuGetで取得して使うのが一番手っ取り早いと思います。
ただ、これらのライブラリだと[GitHub Flavored Markdown(GFM)](https://help.github.com/articles/github-flavored-markdown/)の記法に対応しきれません。
特にバッククオートを使ったコード部分の記述には、先に挙げた二つは対応してないです。

JavaScript界隈ではGFMに対応したライブラリが結構あるなぁ、ということで、その中でもよさげな[marked.js](https://github.com/chjj/marked)を.NETから使ってみようと思います。

## ClearScriptとmarked.jsをNuGetで取得する
[ClearScript](https://clearscript.codeplex.com/)を使うと、JavaScriptのAPIを.NETからたたくことができます。
ClearScriptの概要については[こちら](http://msdn.microsoft.com/ja-jp/magazine/dn781353.aspx)の記事が詳しいです。

NuGetから、JavaScriptEngine.V8とmarked.jsを取得します。

```
PM> Install-Package JavaScriptEngineSwitcher.V8
PM> Install-Package marked
```

marked.jsはScriptsフォルダ以下に配置されます。
marked.jsのプロパティで、ビルドアクションを「埋め込まれたリソース」に変更します。

![markedjsproperty.png](https://qiita-image-store.s3.amazonaws.com/0/18730/94ed9a42-4c9a-9089-cd89-5a68247fa309.png)

## Markdownパーサーを実装する

```csharp
public class MarkdownParser : IDisposable
{
    private IJsEngine _jsEngine;
    private bool _disposed;

    public MarkdownParser(IJsEngine jsEngine)
    {
        if (jsEngine == null) throw new ArgumentNullException("jsEngine");

        _jsEngine = jsEngine;
        _jsEngine.ExecuteResource("既定の名前空間.Scripts.marked.js", GetType());
    }

    public string Transform(string markdown)
    {
        return _jsEngine.CallFunction<string>("marked", markdown);
    }

    public void Dispose()
    {
        if (_disposed) return;
        _disposed = true;

        if (_jsEngine == null) return;
        _jsEngine.Dispose();
        _jsEngine = null;
    }
}
```

`_jsEngine.ExecuteResource("既定の名前空間.Scripts.marked.js", GetType());`

コンストラクタのこの部分で、JavaScriptエンジンにJavaScriptを読み込ませます。
埋め込まれたリソースへのパスは、プロジェクトの既定の名前空間＋相対パスなので、適宜変更。

```csharp
public string Transform(string markdown)
{
    return _jsEngine.CallFunction<string>("marked", markdown);
}
```

あとは、CallFunction<T>メソッドに、marked.jsの関数と、変換対象のMarkdownテキストを渡してあげるだけです。
パーサーの実装はこれだけ。

## 実行する
コンソールアプリで以下のようなコードを実行すると

```csharp
class Program
{
    static void Main()
    {
        const string markdown = @"
    ```cs
    public class Foo
    {
        public string Bar { get; set; }

        public string Buz()
        {
            return Bar;
        }
    }
    ```
";

        var parser = new MarkdownParser(new V8JsEngine());

        var html = parser.Transform(markdown);

        Console.WriteLine(html);
        Console.ReadLine();
    }
}
```

![markdownparserconsole.png](https://qiita-image-store.s3.amazonaws.com/0/18730/2dca7669-63d2-6592-b2c5-9329a7e7375c.png)

ちゃんとHTMLに変換されました。
※const string markdown以下の部分については、記事上で「\```」をうまく表現できなかったので、前にスペースを設けてますが、コード上はスペースなしできちんと変換されます。

## サンプルコード
[GitHub](https://github.com/mad4-red/GFMParserSample.Net)に[highlight.js](https://highlightjs.org/)を使ってシンタックスハイライトも行うようなサンプルをあげてます。
Chefまわりのツールまとめ

ちょっと調べたのでまとめる。

* vagrant-wrapper
    * vagrantはもともとgemだったが今はプラットフォームごとにインストーラが提供されている。
    * vagrant-wrapperはそこらへんの橋渡ししてくれるgem。
    * gem経由で古いvagrantが入っていても、vagrant-wrapperが入ってると専用インストーラでインストールした新しいvagrantが呼び出せるとかそんな感じ。
* berkshelf
    * chefのrecipe依存関係解決してくれるgem。bundler的なもの。
    * Berksfileってファイルに依存するレシピを書いてberks installしたらそのレシピをダウンロードしてくれる。
        * Gemfile的なもの。
    * chefのrecipeのmetadata.rbにも依存関係書くけど、Berksfileにmetadataって記述するとmetadata.rbの依存関係を見てダウンロードしてくれる。ので、二重管理にならない。
* chefspec
    * chefのテスト出来るgem。
    * vm立てたりせず論理的に正しいことを確認するだけなので速い
* serverspec
    * インフラの状態を確認できるテストツール。gem。
* test-kitchen
    * chefのテスト出来るgem
    * chefspecと違ってvm立てて実際実行して状態確認する。
        * その分遅い
    * vagrantとかserverspecとかと組み合わせて使う
* foodcritic
    * chefのlint的gem
* chef-zero
    * インメモリの簡易chefサーバ。gem。
* chefdk
    * 上記berkshelf, chefspec, serverspec, test-kitchen, foodcritic, chef-zero, その他もろもろ入った開発キット。
* vagrant-berkshelf
    * vagrant plugin。
    * vagrantでchefのレシピを実行するとき、Berksfileに記述されている、そのレシピが依存してるレシピを自動的にインストールしてくれる。
RailsのビューでCoffeeScriptからCoffeeScriptをrenderする方法

アイテムを投票する機能を実装するとして、ビューの構成が以下のようになっているとする。

```
/app
  /views
    /votes
      create.js.coffee
      destroy.js.coffee
```

ここで、`create.js.coffee`と`destroy.js.coffee`を共通化して`_update.js.coffee`でDRYしたい場合、以下のようにバッククォートで`render`できる。

```coffeescript:create.js.coffee
`<%= raw render 'votes/update' %>`
```

## 参考

- https://coderwall.com/p/i62phq/how-to-render-coffeescript-partial-inside-coffeescript-template
- http://memo.sappari.org/coffeescript/coffeescript-langref#TOC-JavaScript-
Sublime Text 3 で汚い HTML を編集するときに便利なプラグイン

# フロントエンドの悩み
フロントエンドの仕事をしていると、誰が書いたのか分からないまともにインデントもされていない、更には文法まで間違っている汚い HTML に手を加えなければならない場面は往々にしてあると思います（？）

それでもブラウザは表示してしまうので、書いた本人は気付いていないか、表示されれば良いと思っているのでしょう。

インデントが無い HTML は、大体入れ子構造も間違っていることが多いです。文法が間違っているとエディタで開始タグと終了タグがハイライトされないので、非常に編集しにくくて困ります。

# エディタで解決
[HTML-CSS-JS Prettify](https://sublime.wbond.net/packages/HTML-CSS-JS%20Prettify) と [Sublime​Linter-html-tidy](https://sublime.wbond.net/packages/SublimeLinter-html-tidy) を使って、汚い HTML と決別できます！

## HTML-CSS-JS Prettify
HTML, CSS, JS のコードを整形するプラグインです。

HTML-CSS-JS Prettify は Node.js が必要なので先に導入して下さい。
UNIX/Linux なら [nodebrew](https://github.com/hokaccha/nodebrew) で入れると楽です。

## Sublime​Linter-html-tidy
SublimteLinter の HTML tidy インターフェースで、 HTML の文法上の間違いを見つけるプラグインです。

文法が間違っていると、当然ながら HTML を整形できないので修正する必要がありますが、分量のある HTML から間違っている箇所を人力で探すのは苦痛なので自動化しましょう。

[SublimeLinter](https://sublime.wbond.net/packages/SublimeLinter) と [HTML tidy](http://tidy.sourceforge.net/) が必要です。

後者は、 Mac であれば Homebrew から

```
brew install homebrew/dupes/tidy --HEAD
```

で入ります。

# 最後に
そもそも汚い HTML を書くと不幸になるので、 [validator](https://html5.validator.nu/) くらい通しましょう。

# 参考
* [SublimeText3でHTML5の構文チェック](http://qiita.com/maccotsan/items/eebd7aa5932b74b48eff)
boot2docker上のコンテナに別ホストからアクセスする


boot2dockerはvirtualbox上のproxy vm上のlinux上でdockerコンテナが動作している。
デフォルト(？)だとこのproxy vmがhost onlyのネットワーク設定になっているため、別ホスト上からdockerコンテナにアクセスできない。
テスト目的でアクセスしたいと思っていたところ、以下の手順でアクセスできるようになったのでメモ。

1. boot2dockerを止める

2. VirtualBoxのGUIを開く

3. 設定 -> ネットワークの画面を開く

4. アダプター 3を有効にする

5. 割り当てをブリッジアダプターにする

6. OKボタンを押下して設定を保存

7. boot2dockerを起動

8. boot2docker ssh 

9. ifconfigで3つめのNIC(eth2)のipアドレスを把握

10. 9.で調べたIPに他のホストからアクセス

※セキュリティ的な影響があるので、あくまでテスト目的で使用
※単純にhost onlyをブリッジにするとboot2docke upが動かなくなるらしい？ので別NICを追加するような形をとっているらしい

Bridged networking support #160
https://github.com/boot2docker/boot2docker/issues/160
WindowsにPythonをインストール + pip + virtualenv

開発を環境をしていると、インストールされているライブラリの差異に悩まされることが度々あります。
さらに言うと、Python2.x系とPython3.x系が並行するかもしれないので virtualenv で環境を管理するようにします。

# Python
##インストール
1. インストーラーの入手
[Python](https://www.python.org/downloads/)のサイトから、Windows用のPythonバイナリ(Python 2.7.x)をダウンロードする
2. インストーラーをダブルクリックして実行
3. Next<br>
![03.png](https://qiita-image-store.s3.amazonaws.com/0/42170/02349642-4587-1a28-fea7-498c61eac4c9.png)
4. インストール先を指定してNext<br>
![04.png](https://qiita-image-store.s3.amazonaws.com/0/42170/5a452d01-037e-d110-46a6-d5dc47d5c36e.png)
5. Next<br>
![05.png](https://qiita-image-store.s3.amazonaws.com/0/42170/c8b1e2e1-4b02-96fb-79f0-fa2944e2b394.png)
6. インストール<br>
![06.png](https://qiita-image-store.s3.amazonaws.com/0/42170/5d0a8fd4-b4c2-28f0-269c-a8a790aa00e1.png)
7. Finish<br>
![07.png](https://qiita-image-store.s3.amazonaws.com/0/42170/649ccdd7-18af-3f0d-6efd-bcbbbeb9dc48.png)

## Python実行 batファイルの作成
pythonを実行するための環境変数を登録するバッチファイルを作成する。
pythonの実行は、このバッチファイルをダブルクリックしてコマンドプロンプトを起動する。

```bat:python27.bat
@echo off
::: 実行前の準備
set EXEC_DIR=%~dp0

::: python
PATH=C:\usr\local\bin\Python27;C:\usr\local\bin\Python27\Scripts;%PATH%

cd %EXEC_DIR%
PROMPT #$S

%ComSpec%
```

## pipインストール
1. [get-pip.py](https://bootstrap.pypa.io/get-pip.py)を名前を付けて保存
1. get-pip.pyを実行

```bat
# python get-pip.py
```

実行が終わったらget-pip.pyは必要ないので削除

## virtualenvインストール

```bat
# pip install virtualenv
```

### virtualenvの使い方

```
Usage: python -m virtualenv ${仮想環境を作りたいフォルダ}
```

「hoge」という仮想環境を作成して、起動・終了

仮想環境の作成(Python2.7)

```bat
# python -m virtualenv --python=C:\usr\local\bin\Python27\python.exe hoge
Already using interpreter C:\usr\local\bin\Python27\python.exe
New python executable in hoge\Scripts\python.exe
Installing setuptools, pip...done.

#
```

仮想環境の起動

```bat
# hoge\Scripts\activate
(hoge) #
```

仮想環境の終了

```bat
(hoge) # hoge\Scripts\deactivate
#
```
Dockerコンテナとして起動しているUbuntu(Linux)でip系のコマンドが実行できない時の対処

Dockerコンテナで起動したUbuntuでrootユーザーにも関わらず，

```
root@8ff52cd458e2:/# ip netns add host
mount --make-shared /var/run/netns failed: Permission denied
```

```
root@8ff52cd458e2:/# ip link add veth0 type veth peer name veth1 
RTNETLINK answers: Operation not permitted
```

みたいな事を言われるとき

docker runのオプション***--privileged***を付与すると権限が与えられる．

```
docker run --privileged ...
```
OpenCV+Python で動画に偽ティルトシフトエフェクトをつける

ソースは
https://github.com/osoken/tiltshift_effector

`.mov` などの動画ファイルに、偽ティルトシフトエフェクトを掛けるPythonスクリプト。
`Numpy`, `Scipy`, `OpenCV`, `Pillow` を使用した。Python 2.7 向け。

原理は単純で、オリジナルの画像と、ぼけた画像をマスクしながら合成するというだけのもの。
オリジナル
![orig.png](https://qiita-image-store.s3.amazonaws.com/0/51853/f161ce13-1c8e-dada-2cd9-650f18a2387a.png)

マスク
![mask.png](https://qiita-image-store.s3.amazonaws.com/0/51853/bd4902df-b282-aedb-44b9-466de214298a.png)

ぼけた画像
![blur.png](https://qiita-image-store.s3.amazonaws.com/0/51853/1439e02d-e5c6-99a4-46a8-1895a1521de4.png)

合成後
![out.png](https://qiita-image-store.s3.amazonaws.com/0/51853/b7b6c5f8-d2ec-1106-7b51-05b395a2f627.png)

※わかりやすいように、かなり強めに掛けています。

マスクを生成する関数。

```
def gen_mask(sz, t, tc, c, bc):
  bounds = (0,limit_value(int(sz[1]*t),0,sz[1]),limit_value(int(sz[1]*(t+tc)),0,sz[1]),limit_value(int(sz[1]*(t+tc+c)),0,sz[1]),limit_value(int(sz[1]*(t+tc+c+bc)),0,sz[1]),sz[1]);
  mask = np.array(Image.new('L', sz));
  mask[bounds[0]:bounds[1],:] = 255;
  for i in range(bounds[1],bounds[2]):
    mask[i,:] = 255 - int(255.0/float( bounds[2] - bounds[1] ) * float(i - bounds[1]));
  mask[bounds[3]:bounds[2],:] = 0;
  for i in range(bounds[3],bounds[4]):
    mask[i,:] = int(255.0/float( bounds[4] - bounds[3] ) * float(i - bounds[3]));
  mask[bounds[4]:bounds[5],:] = 255;
  mask = Image.fromarray(mask);
  return mask;
```

`sz`は`(width,height)`のタプル。`t`,`tc`,`c`,`bc`は`0.0`から`1.0`の数値で、`t`は上部の白い領域、`c`は真ん中の黒い領域、`tc`は`t`と`c`の間、`bc`は`c`と下の白い領域の間のグラデーションの幅を、全体を`1.0`とした割合で表現します。

ぼけた画像を生成するのは、`scipy`に入っている`gaussian_filter`をそのまま使いました。

```
def gen_blurred_image(image, blur_factor):
  if blur_factor == 0:
    return image;
  im = np.array(image);
  return Image.fromarray(ndimage.gaussian_filter(im, sigma=[blur_factor, blur_factor, 0]));
```

変数`image`が`PIL`の`Image`型で、フィルタ掛けるためだけに`numpy.array`型に変換してすぐに戻しているのが無駄っぽいですが、他の操作との兼ね合いでこうなっています…。`blur_factor`はぼかしの強さで、浮動小数で与えます。

マスクと、ぼけた画像を生成したら、`PIL`の`paste`関数で合成します。

```
def paste_image(base, layer, mask):
  im = base;
  im.paste(layer, mask = mask);
  return im;
```

ここまで準備ができれば後は動画を開いて毎フレーム同じ処理を掛けていくだけです。

```
  cap = cv2.VideoCapture('input.mov');
  orig_size = (int(cap.get(cv2.cv.CV_CAP_PROP_FRAME_WIDTH)),int(cap.get(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT)));
  out = cv2.VideoWriter('output.mov', cv2.cv.CV_FOURCC('m','p','4','v'), int(cap.get(cv2.cv.CV_CAP_PROP_FPS)), orig_size);
  mask = gen_mask(orig_size, 0.4, 0.15, 0.05, 0.1);
  while cap.isOpened():
    ret,im_orig = cap.read();
    if ret == True:
      im = Image.fromarray(im_orig);
      im_blur = gen_blurred_image(im, 2.0);
      im = np.array(paste_image(im, im_blur, mask));
      cv2.imshow('view', im);
      out.write(im);
      key = cv2.waitKey(1);
      if key == 27:
        break;
    else:
      break;

  out.release();
  cap.release();
  cv2.destroyAllWindows();
```

リポジトリに置いてあるヴァージョンでは入力オプションの処理などをやっているため、行数が嵩んでいますが、本質的にはこんなもんかと。あと、画質や彩度などの調整もしています。ループの最後の`key == 27`は`esc`で途中終了です。
MAMPでのSSL設定 ローカル開発環境でもhttpsでアクセスできるようにする


※バージョンによって多少パス等違うかも

　
/Applications/MAMP/conf/apache/httpd.conf

コメントアウトしてhttpd-ssl.confを読み込む

```httpd.conf
# Secure (SSL/TLS) connections
Include /Applications/MAMP/conf/apache/extra/httpd-ssl.conf
```

　
  
   

/Applications/MAMP/conf/apache/extra/httpd-ssl.conf   


```httpd-ssl.conf
SSLCertificateFile "/Applications/MAMP/conf/apache/ssl/localhost.crt"

SSLCertificateKeyFile "/Applications/MAMP/conf/apache/ssl/localhost.key"
```

　

/Applications/MAMP/conf/apache/extra/httpd-vhosts.conf

```httpd-vhosts.conf
NameVirtualHost *:443

<VirtualHost *:443>
    ServerAdmin admin@localhost
    DocumentRoot "/Documents/localhost"
    ServerName localhost

    SSLEngine on
    SSLCertificateFile /Applications/MAMP/conf/apache/ssl/localhost.crt
    SSLCertificateKeyFile /Applications/MAMP/conf/apache/ssl/localhost.key

</VirtualHost>
```
　

###うまくいかない時に

MAMPのコンパネで起動すると何が原因かわからないので、
下記コマンドでエラーが有る場合わかりやすい（sudo必要）

```shell
/Applications/MAMP/Library/bin/apachectl start
/Applications/MAMP/Library/bin/apachectl stop
```
コピペで貼った数列を棒グラフ化する

ソースと動作はこちらで確認できます。
http://bl.ocks.org/osoken/f8eb76f7d2dd810a847c

![f8eb76f7d2dd810a847c.png](https://qiita-image-store.s3.amazonaws.com/0/51853/5686c2e6-6647-d4ef-101f-fbfa317547e4.png)

左上にあるテキストフィールドに数列を貼ると、すぐ下のグラフエリアにグラフが表示されます。
ちょっとデータを確認したいとき用。

基本的には`input`タグに下記のようなイベントを仕込んで、描画関数に投げるだけです。
例えば入力フィールドの文字列をスペースで値を区切って、それぞれ数値にキャストするのは次のようになります。

```
d3.select('input').on('keyup',function()
{
  var data_ = d3.select(this)
    .property('value')
    .split(' ')
    .map(function(d){return {value:((isNaN(d))?void 0:+d),text:d};});
  update_graph(data_);
});
```

描画関数`update_graph()`は、データを受け取ってそれを棒グラフ化します。詳細は割愛しますが、`exit`セレクションで不要な要素を消し、`enter`セレクションで高さ0の状態で追加して、適切な高さまで`transition`させています。

実際にちょっと使ってみて、数字が全角だったりダブルクオートが入っていたりすると使えないのが不便だったので、リンク先のサンプルソースでは、入力全角半角変換、ダブルクオートのトリムなども行っています。
中途半端なパースになっていますが、あくまでプレビュー用と割り切っています。
djangoで1ファイルだけのhello worldアプリケーションを作る

（これはローカルでの確認用ですプロダクション環境では使わないようにしてください）

## djangoはプロジェクトを作らないと確認できない?

flaskやpyramidなど幾つかのweb frameworkでは1ファイルでアプリケーションを作る事が出来ました。これがちょっとした確認をする際には便利でした。

ところで、djangoはフルスタックフレームワークなせいなのか、密結合で重い気がしました。具体的には以下の手順を踏まないとちょっとした確認ができないと思っていました。

1. プロジェクト作成
2. 設定ファイルを更新
3. 該当箇所の追加(views.pyやurls.pyなど)

このプロジェクトを作成しなければいけないというのが何だかだるいなーと思ったりしてました。

## djangoでのonefile hello world

色々いじってみたところ1ファイルでhello worldのアプリケーションを作る事が出来ました。

ポイントは幾つかあります。

- viewのdispatchはsettingsのROOT_URLCONFを起点に読み込まれる。
- pythonで直接実行したファイルは`"__main__"`モジュールとして読み込まれる。これは`__name__`で参照できる
- settings.configure()で設定を直接追加できる。
- execute_from_command_line()を使うとmanage.pyを使ったかのようにコマンドを利用する事ができる。

こんな感じでhello worldアプリケーションが作れます。

```py3
# -*- coding:utf-8 -*-
# hello.py

import sys
from django.conf.urls import url, patterns
from django.http import HttpResponse


def index(request):
    import random
    return HttpResponse('Hello World. random={}\n'.format(random.random()))


urlpatterns = patterns(
    "",
    url(r'^$', index),
)


if __name__ == "__main__":
    from django.core.management import execute_from_command_line
    from django.conf import settings

    settings.configure(
        ALLOWED_HOSTS=["*"],
        DEBUG=True,
        ROOT_URLCONF=__name__,
        MIDDLEWARE_CLASSES=(
            'django.middleware.common.CommonMiddleware',
        )
    )
    # using this via 'python server-example.py runserver'
    execute_from_command_line(sys.argv)
```

### 実行方法

普通にpythonで実行する感じです。

```bash
$ python hello.py runserver
Performing system checks...

System check identified no issues (0 silenced).
November 30, 2014 - 08:16:31
Django version 1.7.1, using settings None
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
```

curlでアクセスしてみた結果。

```bash
$ curl http://localhost:8000
Hello World. random=0.2760814709302729
$ curl http://localhost:8000
Hello World. random=0.3586777782575409
$ curl http://localhost:8000
Hello World. random=0.08597643541076005
$ curl http://localhost:8000
Hello World. random=0.1478560402662984
```


### 最後に

hello worldに必要な設定だけを追加しているので他の事をしたい場合にはもう少し設定を足したりする必要があります。
「Go Conference 2014 Autumn」直前、2014/11/29 時点 Go 言語の状況の確認・まとめ


2014/11/30 に開催される [Go Conference 2014 Autumn](https://github.com/GoCon/GoCon/blob/master/2014autumn.rst) に参加するにあたり、Go言語の現状についてざっくりと確認

## Go言語について

* [公式サイト](http://golang.org)
* [Go (プログラミング言語) - Wikipedia](http://ja.wikipedia.org/wiki/Go_(プログラミング言語))

### 最新バージョン

```bash
$ go version
go version go1.3.3 darwin/amd64
```


## Google での Go言語検索

### [Go](https://www.google.co.jp/search?q=go) - (約 578,000 件)
### [golang](https://www.google.co.jp/search?q=golang) - (約 729,000 件)
### [Go言語](https://www.google.co.jp/search?q=go言語) - (約 102,000 件)

### 気になった記事いくつか

* [EmacsでのGo言語編集環境](http://unknownplace.org/archives/golang-editing-with-emacs.html)
* [golangのWebフレームワーク、revelの機能紹介](http://tdoc.info/blog/2014/08/22/revel.html)
* [GolangのWebアプリケーションフレームワークBeegoを試す](http://misfrog.com/blog/beego-getting-started/)


## Qiita での Go言語タグ

### [Go](http://qiita.com/tags/go) - (700 件)
### [golang](http://qiita.com/tags/golang) - (183 件)
### [Go言語](http://qiita.com/tags/go言語) - (21 件)

### 気になった記事いくつか

* [go.mobile を使った Android 開発のまとめ](http://qiita.com/hkurokawa/items/9315162c61830befc547)
* [Goの公式dockerイメージを使ってみた](http://qiita.com/jpshadowapps/items/e5de997d70fb8ecae7da)
* [ATOMでGolangの環境設定](http://qiita.com/abe00makoto/items/b7b27254a43d50b7aba2)


## Qiita での Goにも関連しそうなタグ

### [GAE](http://qiita.com/tags/gae) - (84 件)
### [GoogleAppEngine](http://qiita.com/tags/googleappengine) - (42 件)
### [GoogleCloudPlatform](http://qiita.com/tags/googlecloudplatform) - (55 件)

### 気になった記事いくつか

* [Google App Engine/GoのアプリをIntelliJ IDEAを使って開発する環境を構築する方法](http://qiita.com/grapswiz/items/fac71cadc6616317bb70)
* [Docker、IBM、Microsoft、RedHatがGoogleのコンテナ管理フレームワークKubernetesにこぞって開発参加する理由](http://qiita.com/kazunori279/items/ebe8ea24601e606f8048)
* [Google Container Engine (GKE)を触る](http://qiita.com/soundTricker/items/46b7a7fa87925ea6146a)


## はてなブックマークでの Go言語タグ検索
(タグ検索なのに、タイトルに含まれるものもヒットしている気がする)

### [Go](http://b.hatena.ne.jp/search/tag?q=Go) - (約 2,373 件)
### [golang](http://b.hatena.ne.jp/search/tag?q=golang) - (約 2,150 件)
### [Go言語](http://b.hatena.ne.jp/search/tag?q=Go言語) - (約 201 件)
Spring Boot + Gradle + IntelliJ IDEAの環境に + Spring Loaded

# 目的
Spring Boot、Gradle、Intellij IDEAの環境は開発しやすいが実行結果を確認する場合に何度も`gradle bootRun`を叩いて再起動する必要がある。

そこでSpring Loadedを導入して一度`gradle bootRun`でアプリを起動させることで、ソースの変更結果を`gradle bootRun`を何度も叩かず反映させられるようにする。

# 環境

* Gradle 2.1
* intelliJ IDEA 14
* Spring Boot 1.1.9
* Spring loaded 1.2.1

# 手順

## 1. build.gradle作成

以下がテンプレート

``` build.gradle
buildscript {
    repositories {
        mavenLocal()
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:1.1.9.RELEASE")
        classpath("org.springframework:springloaded:1.2.1.RELEASE")
    }
}

apply plugin: 'idea'
apply plugin: 'spring-boot'

idea {
    module {
        inheritOutputDirs = false
        outputDir = file("$buildDir/classes/main/")
    }
}

repositories {
    mavenLocal()
    mavenCentral()
}

dependencies {
    compile("org.springframework.boot:spring-boot-starter-web:1.1.9.RELEASE")

}
```

`idea`ブロックの設定はIntelliJ IDEAがコンパイルしたファイル群を配置する先をGradleがコンパイルしたファイルを配置する先に合わせるための記述。

## 2. IntelliJ IDEAの自動コンパイル設定

筆者のIntelliJ IDEAはデフォルトで自動コンパイルとなっていなかった。
（デフォルトでコンパイルされないのか、過去に設定を変えたのか覚えていない…）

自動コンパイルを有効化させる。

#### 自動コンパイル有効化手順

 1. ⌘.でPreferencesを開く
 2. Build,Execution,Deployment -> Compiler を開く
 3. Make project automaticallyをチェック
 4. Applyをクリック

検索キーワード:`Make project automatically`

# 結果
`gradle bootRun`でアプリ実行後に変更を加えたソースはブラウザの画面をリロードすることで、ソースの変更結果が反映される。

# 参考

* [Configuring Spring Loaded for use with Gradle and IntelliJ](http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#howto-reload-java-classes-without-restarting "Configuring Spring Loaded for use with Gradle and IntelliJ")