OmniAICreator/Qiita-1.07M huggingface dataset:
Grenning > 仕様化テスト (Characterization Test) > 仕様化テストは、チームの長期記憶としての役割も果たしてくれる

@ テスト駆動開発による組み込みプログラミング by James Grenning

> レガシーコードの問題のひとつは、そのコードが何をしているのか確信が持てないことだ。...現在の望ましい振る舞いを、テストとして記録しよう。マイケル・フェザーズはこれを「仕様化テスト (Characterization Test)」と呼んでいる。

...

> 仕様化テストは、チームの長期記憶としての役割も果たしてくれる。

振る舞いについては仕様書を別途用意することも大切だが、テストとすることでコードのアップデート時に「壊れる」状況に気付きやすくなる。
技術英語 > And suddenly, [the tensions] of 4 years [were broken] and ... / walk through the tight rope / walk a tightrope

@ LOE > September 21, 2012

http://loe.org/shows/shows.html?programID=12-P13-00038
> And suddenly, <font color=red>the tensions</font> of 4 years <font color=red>were broken</font> and ...

<hr>
関連して思い出したのは

> walk through the tight rope

しかしgoogle検索で4件しか出てこない。 2000年ころにCNN English Expressで覚えた気がする。

<hr>
walk a tightrope というイディオムがあるようだ。

> http://idioms.thefreedictionary.com/walk+a+tightrope
その改修は借金の利息を返すどころか、更なる借金をしていないだろうか

# ソフトウェア開発と技術的負債

メンバーの技術レベルや、使えるリソース、世の中の技術の進歩などで、技術的負債（負い目）が出てくるというのは、よく言われるようになりました。大雑把には借金のようなものだと、個人的にはとらえています。保守・運用のフェーズで、ソースコードに手を加える際に、その借金を減らすどころから、更に増やしていないかを、もっと注意深くなるべきなのでは。

複利でふくれあがるのでトイチの借金はヤバいくらいに、もっと敏感になれないのだろうか。

# 例えばこんなコード

新しく特殊なケースのときだけにする処理を、既存の処理にフラグを足して追加する、というのはあるでしょう。次みたいにひとつくらいなら許容できそうですし、手っ取り早くて、簡単なお仕事な気がしてきます。

```
// もとのメソッド
public void hoge() {
 ....
}

```

```
// 追加処理をするかどうかのフラグを引数に追加
public void hoge(boolean flag) {
 ...
if (flag) {
  // 追加の処理
}
 
...

}
```

こんなことを2度、3度続けると、つぎのようにネストが深くなって可読性が落ちてバグりやすくなっていきそうです。

```
public void hoge(boolean flag1, boolean flag2, boolean flag3) {

if (flag) {
  // 最初の追加処理

  if (flag3) {
      if (flag2) { 
         // 2回目の改修で検討漏れがあってその対応
      }
  } else {
     // 3回目の追加処理
　　　
  }

} else {
    if (!flag2) {
       // 2回目の追加処理
    }
 }

}
```

わざとひどく書いてますが、気が狂いそうですね･･･
オーバーロードで、使うケースを限定させるようなメソッドも追加してあればまだよいですが、そのまんまを色んなところで呼び出していたら、このメソッドがなにをするのか段々わからくなってきそうです。

```
hoge(true, false, false);

hoge(false, true, false);

hoge(false. true, true);

```


# 実装の手間をはぶくのによくやること

手軽に（何の工夫もなく）実装できてしまうということは、技術的な借金をしている可能性が高いです。次のようなことをやると、短期的には手間が省けることは多いでしょう。

* ハードコーディング
* マジックナンバー
* 手続き的な処理
* 既存のメソッドに引数追加や処理の追加
* パッケージを切らずに、新しいクラスを追加
* 新しいクラスをつくらず、既存のクラスに追加
* StringのMapを多用

要は、オブジェクト指向的な設計をしない、そのための言語機能を使わない、ということです。
こんな継ぎ接ぎを続けていくと、どんどんコードもドキュメントも変更しにくくなり、可読性も落ちていくでしょう。

これをやったら、きっとトイチやトサンで借金するようなものです。
node.jsにおけるファイルコピー(Promise使用版)

以外に簡単にはできないのでメモ。

```js
"use strict";
let fs = require('fs');
function copy(src, dest) {
  return new Promise((resolve,reject)=>{
    var r = fs.createReadStream(src)
            .on("error",(err)=>{reject(err);}),
        w = fs.createWriteStream(dest)
            .on("error",(err)=>{reject(err);})
            .on("close",()=>{resolve();});
    r.pipe(w);
  });
}
```

以上

### 参考

http://qiita.com/okunishinishi@github/items/ec5cba6602a5bb872f13
ローカルタイムで色々したい場合は NSCalendar を使用する

``EKEvent`` の ``startDate : NSDate `` などをいじっていると、GMTなのでスケジュールの時間に応じて色々やろうとすると都合が悪い。
調べるとローカル時間を元に処理をしたい倍は ``NSDate`` ではなく ``NSCalendar`` を使うそう。

```swift
let cal = NSCalendar.currentCalendar()
let components = cal.components(
    [.Year, .Month, .Day, .Hour, .Minute], // 処理に必要なものを指定する
    fromDate: startDate)
print("day=\(components.day) hour=\(components.hour)")
```

上記のやり方なら ``NSDate`` を元にローカル時間に変換して返してくれる。

## 注意点

注意点としては ``components`` の各要素 (``hour``や``day`` など)に対して加減算を行った場合、もう一度作り直さないと -5時とか -2日とか存在しない時間になってしまう。

```swift
let cal = NSCalendar.currentCalendar()
let components = cal.components(
    [.Day, .Hour], // 処理に必要なものを指定する
    fromDate: NSDate())
print("day=\(components.day) hour=\(components.hour) ") // "day=8 hour=5 \n"
components.hour = components.hour - 10
components.day = components.day - 10
print("day=\(components.day) hour=\(components.hour) ") // "day=-2 hour=-5 \n"
```

面倒だが作り直せば正常な表示になる。

```swift
let newComponents = cal.components(	[.Day, .Hour],
    fromDate: cal.dateFromComponents(components)!)

print("day=\(newComponents.day) hour=\(newComponents.hour) ") //"day=28 hour=19 \n"
```
Javascriptをつかってキーのわからない二次元配列の値を比べましょう。


こちら、一つ目の配列から勝手にキーをひろってその値を元に二つ目の配列から比べてってくれます。

think49　様からいただいたものをこちらにご紹介させていただいております。think49様、le_panda_noir様、ありがとうございました。

コメント下記のコードご確認ください。
visualize binary search



```python
import random
import math

def bs_print(elements, low, high, middle):
    """
    visulize binary search process

    """
    es = elements.copy()
    ms = es[middle]
    es.insert(high + 1, ']')
    es.insert(low, '[')
    formatted_elements = " ".join(map(lambda x: str(x), es))
    arrow = [" " * len(str(e)) for e in es]
    arrow[middle+1] = "I".center(len(arrow[middle+1]))
    formatted_arrow = " ".join(arrow)
    print("low: %d, high: %d, middle: %d, x: %d" % (low, high, middle, ms))
    print(formatted_elements)
    print(formatted_arrow)

def bsearch(l, x):
    low = 0
    high = len(l) - 1
    while low <= high:
        middle = math.ceil((low + high) / 2)
        bs_print(l, low, high, middle)
        if l[middle] == x:
            return True
        elif x > l[middle]:
            low = middle + 1
        else:
            high = middle -1
    return False

def random_elements():
    r = [random.choice([i for i in range(20)]) for r in range(41)]
    r.sort()
    return r

if bsearch(random_elements(), 6):
    print("Hit")

```


Output

```
low: 0, high: 40, middle: 20, x: 10
[ 0 0 0 1 1 1 2 3 3 3 4 5 6 8 8 8 9 10 10 10 10 10 11 11 12 12 12 12 12 13 13 14 15 15 16 16 16 17 18 19 19 ]
                                             I
low: 0, high: 19, middle: 10, x: 4
[ 0 0 0 1 1 1 2 3 3 3 4 5 6 8 8 8 9 10 10 10 ] 10 10 11 11 12 12 12 12 12 13 13 14 15 15 16 16 16 17 18 19 19
                      I
low: 11, high: 19, middle: 15, x: 8
0 0 0 1 1 1 2 3 3 3 4 [ 5 6 8 8 8 9 10 10 10 ] 10 10 11 11 12 12 12 12 12 13 13 14 15 15 16 16 16 17 18 19 19
                                I
low: 11, high: 14, middle: 13, x: 8
0 0 0 1 1 1 2 3 3 3 4 [ 5 6 8 8 ] 8 9 10 10 10 10 10 11 11 12 12 12 12 12 13 13 14 15 15 16 16 16 17 18 19 19
                            I
low: 11, high: 12, middle: 12, x: 6
0 0 0 1 1 1 2 3 3 3 4 [ 5 6 ] 8 8 8 9 10 10 10 10 10 11 11 12 12 12 12 12 13 13 14 15 15 16 16 16 17 18 19 19
                          I
Hit
```
DrawableのResource IDをURL(String)に変換する

DrawableはそのままImageViewにセットすることができますが、Picassoを使ってネットワーク上の画像のURLとDrawableを同じようにStringとして扱いたいような場合、ResourceIDをURLのStringに変換できると便利です。

次のコードで実現できます。

```java
public static String convertUrlFromDrawableResId(Context context, int drawableResId) {
    StringBuilder sb = new StringBuilder();
    sb.append(ContentResolver.SCHEME_ANDROID_RESOURCE);
    sb.append("://");
    sb.append(context.getResources().getResourcePackageName(drawableResId));
    sb.append("/");
    sb.append(context.getResources().getResourceTypeName(drawableResId));
    sb.append("/");
    sb.append(context.getResources().getResourceEntryName(drawableResId));
    return sb.toString();
    // Uriに変換したい時は Uri.parse(sb.toString())
}
```
Prime number




```python
import math


"""
Given list of integer and find primes
"""
l = list(range(1, 101))
def is_prime(x):
    if x == 1:
        return False
    upper_limit = int(math.sqrt(x)) + 1
    for i in range(2, upper_limit):
        if x % i == 0:
            return False
    return True

primes = []
for i in l:
    if is_prime(i):
        primes.append(i)
print(primes)


"""
Given integer and find primes which are less than the integer
"""
n = 101

if n > 2:
    # it is not necessary to check all number which is less than the integer
    # create list of odd integer
    l = list(range(3, n, 2))
    # 2 is the minimum prime
    primes = [2]

    for i in l:
        f = False
        for j in primes:
            # Compare upto sqrt(i) then if there have not been any numbeer
            # which can divide i, i is prime
            if j * j > i:
                f = True
                break
            if i % j == 0:
                break
        if f:
            primes.append(i)
    print(primes)

```


ref:
http://www.geocities.jp/m_hiroi/light/python01.html#chap22
2016で遊ぶ - Perl6

こんばんは :whale2: 
[2016で遊ぶ](http://qiita.com/to4iki/items/f6631674dd3678b38d46)をPerl6でやってみます。

## 2016 = 1+2+3+4+...+63

```pl
use v6;

say ( 1 .. 63 ).reduce(*+*);

say [+] 1 .. 63;
```

## 2016 = 2⁵+2⁶+2⁷+2⁸+2⁹+2¹⁰

```pl
use v6;

say [+] ( 5 .. 10 ).map:{ 2 ** $_ };

say [+] 2 <<**>> ( 5 .. 10 );
```


## 2016 = 3³+4³+5³+6³+7³+8³+9³

```pl
use v6;

say [+] ( 3 .. 9 ).map:{ $_ ** 3 };

say [+] ( 3 .. 9 ) «**» 3;

say map(-> $x {$x³}, (3..9)).sum;

say map({$_³}, (3..9)).sum;

(3..9)».&{.³}.sum.say;
```

## 結論
すこし楽しい:camel:

# あわせて読みたい

| 言語 | リンク | 
|:-----------:|:------------|
| Ruby | [元ネタ](https://twitter.com/sugyan/status/684766202149773312) |
| Swift | [2016で遊ぶ](http://qiita.com/to4iki/items/f6631674dd3678b38d46) |
| Python | [2016で遊ぶ - Python](http://qiita.com/Tsutomu-KKE@github/items/697a0f60600320457c31) |
| Vim script | [2016で遊ぶ - Vim script](http://qiita.com/mattn/items/465e1776369752dc8b9c) |

# 参考や注釈

* [Day 6: Going Into Hyperspace - 
Perl 6 Advent Calendar 2009](https://perl6advent.wordpress.com/2009/12/06/day-6-going-into-hyperspace/)
* [Hyper Operators - Perl 6 Maven](http://perl6maven.com/tutorial/perl6-hyper-operators)
* [Perl6の累乗の書き方 - Qiita](http://qiita.com/B73W56H84/items/c7088b9de6fc409b68f7)
* [Perl6入門](http://ja.perl6intro.com/)
Konashi OTAFUツールをSwiftで作ってみた

# はじめに
Swiftはあんまり関係ないですけど。mm辛いので手を出してみたら、やっぱりCocoaは手のかかる子だったという……慣れればもっとうまく書けるのだろうか。それはさておき、昨年末に色々と調査してたKoshian/Konashiについて休暇が終わる前にまとめておこう……と、そういうわけです。

# Konashi OTAFU
KoshianとKonashiについては[過去の記事](http://qiita.com/toyoshim/items/4dc7ec9dc0345b258804)を参考にして下さい。要は1,000円で入手できるBLEモジュールで、Bluetooth経由でファームウェアの書き換えができる事になってます。が、ツール等も特に提供されておらず、[仕様も謎](http://qiita.com/toyoshim/items/1661c68296e5c2184a5f)で使いこなすのに苦戦していた、というのが前回までのあらすじ。

今回、仕様とバグっぽい挙動が明らかになり、なんとかワークアラウンド込みでWindowsやOS Xからファームを書き換える事に成功したため、せっかくなのできちっとしたアプリとしてまとめてみました。

# こんなの
![スクリーンショット](https://qiita-image-store.s3.amazonaws.com/0/12843/5138220d-5968-79b4-0144-a13fc0e56aaa.png)
どどーん！なんとGUI。
CUIで非同期とか新境地で嫌だっただけなんですが。とりあえずBroadcom社のツール程度の事はできます。

一式[GitHubにて公開](https://github.com/toyoshim/KonashiOTAFU)してます。

# 苦労した点
## サービスの取得
どうやらKonashi OTAFUのサービス、キャラクタリスティクスはともにファーム書き込み時に決定するランダムなUUIDを用いているようです。なので探すのが面倒。とりあえずキャラクタリスティクスを2つ持つサービスを探してnotificationサポートしてるほうがControl Point、もう一方がDataみたいな雑な判定してます。

## Notificationが取れない
KonashiのバグでKonashi OTAFU側のControl PointからのNotificationが、Broadcom OTAFU側のControl Pointから届きます（ややこしい）。Client Configurationしてない状態で届くため、OS Xが正しく通知を配送してくれません。Client Configurationをしようと思ってもBroadcom OTAFU側のサービスがハリボテなので、Configurationしようとするとエラーが返ってきます。

という、結構悩ましい問題。いったいiOS版のKonashi.jsがどんな仕組みで動いているのか非常に気になるところですが。とりあえず通知をチェックせずに、データの取りこぼしだけ気をつけてガンガン書き込んでいけば最後にCRC32が一致したところでファームが更新される模様。今まで何十回も書いてきたけどCRC不一致は一度も起きてないし、起きたら起きたで更新されないだけなので、実用上はあまり問題ないかな、と思います。

ちなみにWindowsだとコールバック登録しておけばNotificationの設定しなくても通知が配送されるみたいで、きちんと結果チェック付きで動きました。挙動は気持ち悪いですが。

# おわりに
とりあえずBLEについて理解深めたいなぁ、と思って入手したKoshian。おかげでBLEにはだいぶ親しみが持てました。が、無駄にWin/Mac/AndroidのBluetooth APIに詳しくなってしまいました。挙句の果てにはSwiftまで……。本当はWeb Bluetooth使ってWebからファームを書き換えたいなぁ、とか思ってただけだったんですけどね。趣味だから出来る究極の遠回り。
railsでfontやcssが404になる

#railsでfontやcssが404になる
##現象
設定は正しいはずなのに、デプロイしてもfontやCSSが404エラーになることがある
###任意の場所に実際のファイルはあるが、参照のパスが間違っている
ソース上のsrcのパスが間違っている、ハッシュ化されていない
###任意の場所に実際のファイルが存在しない
ソース上のsrcは正しいが、実態にそのファイルが存在しない、ファイル名がハッシュ化、されていない
##原因
###任意の場所に実際のファイルはあるが、参照のパスが間違っている
そもそものファイルの指定の仕方が違う
1.cssやfontの想定しているパスの確認
2.cssの中でfontや別のcssを呼び出している時

###任意の場所に実際のファイルが存在しない
gemとrailsの相性がよくない時に度々起こる

##解決方法
###任意の場所に実際のファイルはあるが、参照のパスが間違っている
1.cssやfontの想定しているパスの確認
2.cssの中でfontや別のcssを呼び出している時
http://qiita.com/wadako111/items/03bc00d914e62243a511
※最悪ハッシュ化させないという手もある。
###任意の場所に実際のファイルが存在しない
以下のgemとそのバージョンに注意する
gem 'sass-rails'
gem 'font-awesome-rails'
gem 'font-awesome-sass'
gem 'sprocket-rails'
=> Rails.application.assets
※このコマンドでうまくいくまで繰り返す
本番環境のcurrent内で
RAILS_ENV=production bundle exec rake assets:clean 
RAILS_ENV=production bundle exec rake assets:clobber
RAILS_ENV=production bundle exec rake assets:precompile
を実行してからローカルでunicorn再起動
bundle exec cap production deploy:restart
※実際にどのバージョンでエラーが出たことがあるか情報をいただければと思います。
http://qiita.com/wadako111/items/03bc00d914e62243a511
Git for Windows付属のGit GUIを日本語化する方法

## Git GUIについて
[Git for Windows](https://git-scm.com/downloads)には、シンプルで使いやすいGUIクライアント「Git GUI」が付属しています。[Source Tree](https://www.sourcetreeapp.com/)や[Git Extensions](http://gitextensions.github.io/)に比べると機能は少ないですが、画面がごちゃごちゃしていない分、Git初心者には理解しやすいのではないでしょうか。

## 日本語表示の対応状況
Git for Windows Ver.1.9.5付属の「Git GUI」では、普通にインストールするだけでUIが日本語で表示されていました。しかし現在(2016/1/8時点)の公式バイナリであるVer.2.7.0をそのままインストールしても、残念ながらGit GUIの画面表示は全て英語になってしまいます。どうやら、Ver.2.x.xのバイナリには、多言語表示用のメッセージ定義ファイルが同梱されていないようです。（理由は不明です。調べれば分かるのでしょうが...）

そこでVer.1.9.5付属のメッセージ定義ファイルを使って、Ver.2.x.xのUIを日本語化してみました。手順は以下の通りです。既にGit for Windows 2.x.xがインストール済みであるとします。

## 日本語化手順
1. Ver.1.9.5のポータブル版を入手します。
    [Git-1.9.5-preview20150319](https://github.com/msysgit/msysgit/releases/tag/Git-1.9.5-preview20150319)の下の方にある「PortableGit-1.9.5-preview20150319.7z」をダウンロードします。

2. ダウンロードした7zファイルを展開して`\share\git-gui\lib\msgs\`から日本語メッセージ定義ファイルである`ja.msg`を取り出します。

3. `C:\Program Files\Git\mingw64\share\git-gui\lib`に`msgs`フォルダを作成し、その中に2.で取得した`ja.msg`を配置します。(※Gitをデフォルト以外の場所にインストールした場合はパスが異なります。)

以上。
スタートメニューなどからGit GUIを起動すれば、表示が日本語になります。

※定義ファイル自体が長らく更新されていないようで、一部に英語表示が残ってしまいます。ただ使ってみている限り動作には支障はなさそうです。
川柳判定プログラム

#川柳判定
お題を提出してそれに対する川柳を募集する、みたいなTwitter botでも作ろうかと思い、川柳を判定するプログラムを作りました。

##実装
- Python2.7
- [Yahoo!Japanテキスト解析api ルビ振り](http://developer.yahoo.co.jp/webapi/jlp/furigana/v1/furigana.html)

Yahooのテキスト解析apiでルビ振りがあったので、その返り値の文字数を読み数としました。

1. 文字列をスペースで分割
2. それぞれurllib2でURIエンコード
3. urlopenでYahoo!apiにGETリクエストを送信
3. 返ってきたXMLをxmltodictでパースし、ディクショナリに
4. Furiganaの長さを音数とする
5. 5音7音5音になっているか判定

```senryu.py
# -*- coding: utf-8 -*-
import urllib2
import xmltodict

def yomilen(string):
  urlstr = urllib2.quote(string.encode("utf-8"))
  response = urllib2.urlopen('http://jlp.yahooapis.jp/FuriganaService/V1/furigana?appid=yourappid&sentence='+urlstr).read()
  jres = xmltodict.parse(response)
  yomigana = ""
  if isinstance(jres["ResultSet"]["Result"]["WordList"]["Word"], list):
    for result in jres["ResultSet"]["Result"]["WordList"]["Word"]:
      yomigana = yomigana + result["Furigana"]
  else:
    yomigana = jres["ResultSet"]["Result"]["WordList"]["Word"]["Furigana"]
  length = len(yomigana)
  return length

def senryu(string):
  strs = string.split(" ")
  if len(strs) == 3:
    if yomilen(strs[0]) == 5:
      if yomilen(strs[1]) == 7:
        if yomilen(strs[2]) == 5:
          print u"川柳です"
          return True
        else:
          print u"3句目が5音ではありません"
          return False
      else:
        print u"2句目が7音ではありません"
        return False
    else:
      print u"1句目が5音ではありません"
      return False
  else:
    print u"575ではありません"
    return False
```

###実行結果

```
In [1]: senryu(u'鳴かぬなら 殺してしまえ 時鳥')
川柳です
Out[1]: True
```

##課題
- 字余が判定できない
- 拗音（ゃ、ゅ、ょ）も一音として数えられてしまう
OnionOmegaでハード開発入門〜その１〜開封

# OnionOmegaの開封〜セットアップ
新しい事を始める意欲が湧いたので、大分前に届いていたけど開封すらしていなかったOnionOmegaを開封しました。
## OnionOmegaとは？
[Omega - Onion (official)](https://onion.io/omega/)
>Omega is an invention platform for the Internet of Things. It comes WiFi-enabled and supports most of the popular languages such as Python and Node.JS. Omega makes hardware prototyping as easy as creating and installing software apps.

つまり、Web開発者でも簡単にIoT開発ができるプラットフォームでPython/Node.js/PHP/Rubyを使って開発することができます。

[Kickstarter](https://www.kickstarter.com/projects/onion/onion-omega-invention-platform-for-the-internet-of)で見かけて何やら面白そうだったので買ってみました。
現在は既に受付は終了しておりオフィシャルサイトから購入できます。
[Omega Store](https://store.onion.io/)


開発元の[Onion](https://onion.io/omega/)のサイトではこれを使ってロボットアーム動かしたりするプロジェクトが公開されています。

- [デモページ](https://onion.io/livelab)

ちなみに[Arduino](https://www.arduino.cc/)互換とのことです。

## まずは開封
- 想像していたよりもしっかりしていてオシャレな紫色の箱。洗練されたイメージです。
![IMG_0279.JPG](https://qiita-image-store.s3.amazonaws.com/0/24991/daef927f-0b7e-7547-7a1b-bd96da136232.jpeg)

- 開けてみる
![IMG_0274.JPG](https://qiita-image-store.s3.amazonaws.com/0/24991/81ed88da-3f0b-ff64-3d53-52ad39a22fb5.jpeg)

- 箱から取り出してみた。実際にはちゃんと包装されて入っていました。
![IMG_0275.JPG](https://qiita-image-store.s3.amazonaws.com/0/24991/29485307-19e6-aea0-479c-18935f378a4d.jpeg)

## セットアップ
早速セットアップして開発の準備を行います。
オフィシャルにセットアップ手順がちゃんとあるのでそれを参考に行いました。
ざっと２０分程度。

[Get-Started](https://wiki.onion.io/Get-Started)

ここまでで実際Omegaのコンソールを操作できます。
あとは作っていくだけ。

## 次回から
作りたいものはざっくり自分の中にあったりするので
それを次回から作っていきたいと思います。
Homebrewで入れたOpenCVをQtで使おうとしたらハマった話


# 状況
**Homebrew**経由でインストールした **OpenCV**をゴリゴリ使って書いたプログラムを、せっかくだしGUI化しようと思い[**Qt**](http://www.qt.io/)をダウンロード。 **Qt Creator**を立ちあげ、`Qt-Test.pro`を書いていざ`Run`！ってところで次のような実行時エラーが発生しました。

```
dyld: Symbol not found: __cg_jpeg_resync_to_restart
  Referenced from: /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO
  Expected in: /usr/local/lib/libJPEG.dylib
 in /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO
プログラムが突然終了しました。
```

# 環境
* MacOSX El Capitan 10.11.2
* Qt 5.5.1
* Qt Creator 3.6.0(Clang6.1 64ビット)
* Homebrew 0.9.5

`Qt-Test.pro`ファイルは次のような感じです。

```Qt-Test.pro
TEMPLATE = app
TARGET = Qt-Test
INCLUDEPATH += .

INCLUDEPATH += /usr/local/include
LIBS += -L/usr/local/lib -lopencv_highgui -lopencv_core -lopencv_imgproc

HEADERS += mainwindow.h
FORMS += mainwindow.ui
SOURCES += main.cpp mainwindow.cpp
```

# 対処法1(しかし未解決)
エラーで検索をかけると、[こちら](http://toshitanian.hatenablog.com/entry/2013/10/15/213013)のサイトを発見。どうも **Homebrew**で入れた`libJPEG.dylib`には`__cg_jpeg_resync_to_restart`という関数が定義されていないらしい。 ~~そもそもなんでこれインストールしたっけな~~

ならばこいつをアンインストールしようと`brew uninstall jpeg`(もしくは`brew uninstall libjpeg`)を実行し、もう一度`Run`するも今度は次のようなエラーが・・・

```
dyld: Library not loaded: /usr/local/lib/libjpeg.8.dylib
  Referenced from: /usr/local/lib/libTIFF.dylib
  Reason: image not found
プログラムが突然終了しました。
```

そりゃ見つからないよね…

# 対処法2
本来ならば`/System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libJPEG.dylyb`をロードすべきところを`Qt-Test.pro`に書いた`LIBS += -L/usr/local/lib`のせいでこちらのディレクトリを先に走査してしまい、 **Homebrew**経由でインストールした`libJPEG.dylib`をロードしてしまっているのがそもそもの問題なので、`libJEPG.dylyb`等は純正(?)のものを使用できるようにしたい。

そこで、 **Homebrew**経由でインストールしたライブラリ等へのシンボリックリンクが一括して格納されてある`/usr/local/lib`ではなく、生のディレクトリを読みに行くように`Qt-Test.pro`を書き換えることにしました。下記の`LIBS += -L/usr/local/Cellar/opencv/2.4.12/lib`がそれに該当します。

```Qt-Test.pro
TEMPLATE = app
TARGET = Qt-Test
INCLUDEPATH += .

INCLUDEPATH += /usr/local/include
LIBS += -L/usr/local/Cellar/opencv/2.4.12/lib -lopencv_highgui -lopencv_core -lopencv_imgproc

HEADERS += mainwindow.h
FORMS += mainwindow.ui
SOURCES += main.cpp mainwindow.cpp
```

これで初めのエラーはなくなり、無事、`Run`できました。

# 結論
**Qt** で **Homebrew**経由でインストールしたライブラリ等を使用する際は、`.pro`ファイルには`/usr/loca/lib`でなく各ライブラリが格納されている生のディレクトリを`LIBS`に与えた方がいい(かもしれない)。

# 参考サイト
[としたにあんの左脳](http://toshitanian.hatenablog.com/entry/2013/10/15/213013)
java play Flamework テンプレートの呼び出し方法

play2.4にて
あるviewから他のviewを呼び出して使う時の方法 :octocat: 
忘れないようにメモ :pencil2: 

##同一ディレクトリ内からmenu.scala.htmlを呼び出す場合
引数なしの場合`@menu()`でOK。
引数がない場合もmenu.scala.htmlの頭には空の`@()`をつける。

引数がある場合には`@menu(引数)`で呼び出せる。

##別のディレクトリからmenu.scala.htmlを呼び出す場合
`@views.html.user.menu()`のようにフルパスで呼び出す。

##補足
###BaseScalaTemplate(play.twirl.api.HtmlFormat$@...)と表示される場合 
@記号が勝手にどこからどこまでがscalaスクリプトか
判断してしまったために起きる現象らしい。
###どう判断しているのか？
- ホワイトスペースがあるとそこでscalaスクリプトは終わりと判断される。
- @()の範囲はscalaスクリプトと判断する。
- ()内にHTMLタグは書けない。
[Play Framework 2徹底入門](https://play.google.com/store/books/details/%E5%8E%9F%E4%B8%80%E6%B5%A9_Play_Framework_2%E5%BE%B9%E5%BA%95%E5%85%A5%E9%96%80?id=gQRkAgAAQBAJ&hl=ja)より
Ruby 当たり前のtrue/false

# 基本中の基本のtrue/false
trueとfalseなんて基本中の基本だけど、立ち止まってメモしておきます。
ちゃんと理解しておけば少しだけ綺麗にコードが書けそう。

# Rubyのtrue/false

## ここで問題

次のうち「ok」と出力されるのはどれでしょう？

1.

```rb
puts "ok" unless 0 
```

2.

``` rb
puts "ok" unless 1
```

3.

```rb
puts "ok" unless nil
```

4.

```rb
puts "ok" unless "false"
```

## Rubyのtrue/falseって…

以下のURLにいろいろな言語のtrue/falseが掲載されています。
[各言語におけるtrue/falseまとめ](http://blog.mirakui.com/entry/20090604/truefalse)

いろんな言語があるけど、その中でRubyのtrue/falseはなんてシンプルなこと！
「false」と「nil」だけが ```false``` であとは全部 ```true```！

つまり、以下の条件分岐があったとして、

```rb
if hoge
  puts "trueだよ！"
else
  puts "falseだよ！"
end
```

```hoge = false```, ```hoge = nil``` のときは「falseだよ！」が出力され、それ以外はぜーんぶ「trueだよ！」が出力される。

## 問題の答え
答えは「3番」です！簡単でしたか？
unless文を使っているので条件に「nil」か「false」のときだけ「ok」が出力されます。4番の```"false"```は文字列ですのでご注意を。

# コードも綺麗に書けるよね

こんな感じで書かれていたら

```rb
if !@article.nil?
  puts "記事があるよ！"
end
```

書き直したくなりますね！

```rb
if @article
  puts "記事があるよ！"
end
```

Rubyのtrue/false簡単かつ基本なので覚えておかなきゃですね！
Windows 7上でOpenCV 3.1で人物を検出してみた

![res2.PNG](https://qiita-image-store.s3.amazonaws.com/0/105738/7ba4285f-49b4-3d4d-c5af-a4e246b9ea29.png)

#動作環境
Windows 7 Home 64bit
OpenCV 3.1.0
Visual Studio 2013

#はじめに
これまでなぜかCascadeDetectorに存在していたHOG検出器は削除され、使用不可となった。
（ソースは整理されていなく、いくつ残骸が残っている。Type指定でHOGをはねている。また[dataフォルダー](https://github.com/Itseez/opencv/blob/3.1.0/data/hogcascades/hogcascade_pedestrians.xml)には、hogcascade_pedestrianの辞書が残ったままである。）
変わりに、OpenCV 3.1でようやくHOGの説明が設けられた。

##使い方
ファイルの読み込み、GRAYへの変換、領域の表示は省略

    cv::HOGDescriptor hog;
    hog.setSVMDetector(hog.getDefaultPeopleDetector());
    std::vector< cv::Rect > locations;
    hog.detectMultiScale(gray, locations);

以上で検出できる。また、detectMultiScaleのパラメータがいくつか省略されており、きちんと書くと

    hog.detectMultiScale(gray, locations, 0, cv::Size(), cv::Size(), 1.05, 2, false);

となる。
DefaultPeopleDetectorの辞書は、INRIAのデータで作成されたもので、2.4のころからなぜかソースに辞書データがハードコーディングされている。画像のサイズは、64x128と大きめである。
冒頭の画像は、デフォルト辞書でアニメの人を検出した結果である。アニメだから検出精度がいまひとつではなく、人でも検出精度はかわらない。

##小さい辞書
また、代わりの辞書としてDaimlerPeopleDetectorも提供されており、こちらの画像のおおきさは、48x96で、使用方法は以下の用である。

    hog.winSize = cv::Size(48, 96);
    hog.setSVMDetector(hog.getDaimlerPeopleDetector()));

Daimler辞書での検出結果、デフォルトに比べで検出枠が増えているが誤検出が多い。

![res1.PNG](https://qiita-image-store.s3.amazonaws.com/0/105738/a6aaea37-561f-1bcb-3220-c1f2380a6802.png)


##オリジナル辞書作成
さらに、3.1からは、辞書の作成方法もサポートされるようになり、
```
opencv31\sources\samples\cpp\train_HOG.cpp
```
を使用すれば自分で辞書を作成することができる。

**注意**
リリースモードでは、なぜか落ちるのでdebugで使用している。ubuntuで確認してみる
【R】dplyrで連番を追加する

`{dplyr}`で連番を追加する方法。
何かもっといい方法が有るような気がする… -> 解決しました。

```r
iris %>%
  group_by(Species) %>%
  mutate(add_one = 1, num = cumsum(add_one)) %>%
  select(-(add_one)) %>%
  print(n = 51)  # 確認のため

```

@hoxo_m さんより`dplyr::row_number`を教えてもらいました。
ありがとうございます！

```r
iris %>%
  group_by(Species) %>%
  mutate(num = row_number()) %>%
  print(n = 51) # 確認のため

```
git commit時に英語でメッセージ書くためのヒントを表示する

## はじめに
英語力をあげるために、コミットメッセージを英語で書こうとしても実践するのはなかなか難しいものです。

[GitHubで使われている実用英語コメント集 - Qiita](http://qiita.com/shi_chicken/items/a5f922a3ef3aa58a1839) のような記事を読んでもコミットするときには忘れています。

そこで、git commit時に表示されるコメントに、英語でメッセージを書くためのヒントを表示してみました。

## 完成イメージ
![image](https://qiita-image-store.s3.amazonaws.com/0/12352/5ed39d9c-f7fb-2a02-20db-d7fec85bc32c.png)


## やり方

### `~/.gitmessage.txt` を作成

```~/.gitmessage.txt


# fix, add, changeといった事実ではなく、このcommitで実現する要件や仕様を書きましょう。（リファクタなどは除く）
# 
# 例文）
# - Fix typo in docs
# - Remove unused code
# - Remove use of deprecated method
# - Update Modernizr to v1.6
# - Make it possible to have IDs per request
# - Make sure to reset default_url_options（必ずリセットする）
# - Don't use "assert_not_nil"
# - Allow the user to drag faster
# - Remove methods to avoid warnings.
```

### commit.template に設定

`git config --global commit.template ~/.gitmessage.txt`


これで、`git commit`時に英語で書くためのヒントが表示されます！ 例文は [GitHubで使われている実用英語コメント集 - Qiita](http://qiita.com/shi_chicken/items/a5f922a3ef3aa58a1839) からピックアップしました。

英語以外にも良いコミットメッセージを書くためのヒントも表示できます。例文の上に書いたのは、[Git - 提言: コミットメッセージの一行目には要求仕様を書け - Qiita](http://qiita.com/magicant/items/882b5142c4d5064933bc) を参考にしています。


## おわりに
英語力アップしたいけど、言うは易し行うは難しなので、小さいところから英語を書きやすくする環境を整えていきましょう！
Swift 2でビット演算子|を使うとエラーになる場合

以下のコードはSwift 2ではエラーとなります。

```swift:example1.swift
let view = UIView()
view.autoresizingMask = .FlexibleTopMargin | .FlexibleBottomMargin
```

`Type of expression is ambiguous without more context`


これはSwift 1.2では`RawOptionSetType`だったものがSwift 2.0で`OptionSetType`に変わったためです。
`RawOptionSetType`ではビット演算が可能です。

[Swift Standard Library Reference  OptionSetType Protocol Reference](https://developer.apple.com/library/ios/documentation/Swift/Reference/Swift_OptionSetType_Protocol/index.html)

Swift 2では以下のように記述します。

```swift:example2.swift
let view = UIView()
view.autoresizingMask = [.FlexibleTopMargin, .FlexibleBottomMargin]
```
Windows下でmake.exeを使うとき、sh.exeが動作してしまう問題


__http://www.equation.com/servlet/equation.cmd?fa=make で配布されているGNU Makeでは解決できるようですが、MinGWのGNU Makeで試したところ上手く作動しないようです。__

Windows下でmakeを使うときに、cmdではなくsh.exeが動いてしまう問題があります。

#問題の発生するMakefile

下のような内容のMakefileが存在するとします。

```mf:Makefile
test: Makefile
	IF NOT EXIST test ( mkdir test )
```

Makefileの内容は、testディレクトリがなければtestディレクトリを作り、存在していれば作らない、といったものです。
見て分かる通り、バッチスクリプト的なコマンドプロンプトの構文がMakefile内に含まれており、Windowsのコマンドプロンプトにコマンドを投げる前提で書かれています。

このMakefileが存在するディレクトリで以下のようなコマンドを打ちます。
``make test``

通常であれば、ディレクトリ下にtestディレクトリが作成される、もしくは既に存在していれば何もしません。
しかし、次のようなエラーが表示されることがあります。

```
sh.exe : -c : line 0: syntax error near unexpected token `(' 
sh.exe : -c : line 0: 'IF NOT EXIST test ( mkdir test )' 
```

これはMakefile内に書かれているコマンドをsh.exeが解釈できないため、発生しているエラーです。

#問題の根幹
おそらく、問題が発生する原因はmake.exeがコマンドを実行するシェルを指定するときに、sh.exeを優先した結果だと考えられます。
解決方法としては、sh.exeへのpathを消すことで、make.exeにsh.exeを発見させない方法が考えられますが、環境によっては別の問題が発生してしまいます。

#Makefileでシェルの指定
pathの設定を変更しなくても、Makefileにシェルの指定する文を1行加えるだけで解決します。
次が修正したMakefileになります。

```mf:Makefile
SHELL=cmd

test: Makefile
	IF NOT EXIST test ( mkdir test )
```

SHELL=cmdと1行加えることで、コマンドプロンプトが指定され問題なく動作するようになります。
Rails enumについてまとめておく

# Railsにおけるenumの使い方

## enumのカラムのカラム追加


### integer
```rb
class AddStatusToArticles < ActiveRecord::Migration
  def change
    add_column :articles, :status, :integer, default: 0
    add_index :articles, :status # 必要に応じて
  end
end
```

### boolean

```rb
class AddStatusToArticles < ActiveRecord::Migration
  def change
    add_column :articles, :status, :boolean, default: false
    add_index :articles, :status # 必要に応じて
  end
end
```

## Modelへの定義

### integer

```rb
class Article < ActiveRecord::Base
  enum status: { draft: 0, published: 1 }
end
```

### boolean

```rb
class Article < ActiveRecord::Base
  enum status: { draft: false, published: true }
end
```

### 配列での定義 (integer)

```rb
class Article < ActiveRecord::Base
  enum status: [:draft, :published]
end
```

DBの値は要素番号と同じになる。ただし、適当に要素を追加するとDBの値と齟齬が生じてしまうため注意。

## enumのメソッド

### integer (hash定義)

```rb
article = Article.new(status: :draft)
# article = Article.new(status: 0) これでもいける

article.status # => draft
article.draft? # => true
article.published? # => false

article.published! # statusをpublishedに変更

Article.statuses # => { draft: 0, published: 1 }
# article = Article.new(status: Article.statuses[:draft]) のように使える

Article.published
# publishedの検索が出来る。
# Article.where(status: :published) でも。

```

### boolean

integerとほぼ一緒。

```rb
article = Article.new(status: :draft)
# article = Article.new(status: false) これでもいける

article.status # => draft
article.draft? # => true
article.published? # => false

article.published! # statusをpublishedに変更

Article.statuses # => { draft: false, published: true }
# article = Article.new(status: Article.statuses[:draft]) のように使える

Article.published
# publishedの検索が出来る。
# Article.where(status: :published) でも。

```

## 参考
↓まとめてあった。
[いまさらながらRails4.1から導入されたEnumが便利なのでまとめてみた](http://ruby-rails.hatenadiary.com/entry/20150710/1436461745)
uGUIでボタンなどを押しこんでいるとき処理を行う

下図のImageというものを押し込むもとのします。
Hierarchy
![hiercky.PNG](https://qiita-image-store.s3.amazonaws.com/0/17192/1f55e69a-305b-48e2-e5fe-b5c3b89f609a.png)

Game
![gameimg.PNG](https://qiita-image-store.s3.amazonaws.com/0/17192/761f6309-8305-9384-ce4a-7312245c03fb.png)

Long Pushというスクリプトを作成&アタッチ → Event Triggerをアッタチ → Add New Event TypeでPointer EnterとPointer Upを追加 → それぞれLong Pushで定義したメソッドを入れる
Inspector
![InspectorSample.PNG](https://qiita-image-store.s3.amazonaws.com/0/17192/63a0af1d-a9d7-31c4-3cc4-d8e1f17b4017.png)

```csharp:LongPush.cs
using UnityEngine;

public class LongPush : MonoBehaviour
{
	public GameObject image;
	// 押し込んでいる間はtrue.
	private bool now;

	void Start()
	{
		now = false;
	}
	
	void Update()
	{
		if (now)
		{
			Debug.Log("現在押し込んでいます");
		}
	}

	// 押したとき実行される.
	public void PointerDown()
	{
		now = true;
	}

	// 離したとき実行される.
	public void PointerUp()
	{
		now = false;
	}
}
```

UniRexとやらを使うともっとエレガントに実装できるらしい。しかしよくわかっていないので勉強せねば!!
values and literals in terms of computer science

#経緯
[講義](http://www-inst.eecs.berkeley.edu/~cs61a/sp14/slides/02_1pp.pdf)で`literals`と`values`の区別について教わったので備忘録として。[stackoverflow](http://stackoverflow.com/questions/18970938/difference-between-values-and-literals)の説明が分かりやすかったのでこちらを参考にしてみる。実際の質問は[ここ](http://www-inst.eecs.berkeley.edu/~cs61b/fa13/lectures/lect8-2x2.pdf)（ひとつ上のクラス）を参考に回答しているので要所要所掻い摘んで。

#目次

- `literal`と`value`
- それぞれの違い

##`literal`と`value`
[wiki](https://en.wikipedia.org/wiki/Literal)によるとコンピューターサイエンスにおける`literal`とは

>a notation for representing a value within programming language source code

ザックリ言うと`assignment statement`（i.g. x = 1）において`=`の右にくるもの（勿論全てではない）。

[stackoverflow](http://stackoverflow.com/questions/485119/what-does-the-word-literal-mean)で見つけた例は以下のとおり：

>
Examples:

>
"hey" (a string)
false (a boolean)
3.14 (a real number)
\[1,2,3] (a list of numbers)
(x) => x*x (a function)
/^1?\$|^(11+?)\1+$/ (a regexp)

>
Some things that are not literals:

>
std::cout (an identifier)
foo = 0; (a statement)
1+2 (an expression)

別の[stackoverflow](http://stackoverflow.com/questions/18970938/difference-between-values-and-literals)での解答では

>
a literal is kind of container, so it'll be better to compare between values and containers.

`literals`を入れ物として考えたほうが分かりやすいと。

例えば`int x = 1`という式において、一般的に`x`は`container`、`1`は`value`として扱われるが、厳密には`1`にも`value`に加えて`container`としての要素が含まれている。その要素を`literal`と呼ぶ。つまり`1`には`value`としての`1`と`literal`としての`1`がある。`int x = 1`というコードを書く上で、`1`という`literal`を書くことによって我々が`1`の`value`を示している。`value`には直接アクセスできないので`literal`という`container`を介して`1`という`value`にアクセスしていると考えても良い。

よって以下の引用が成り立つ：

>
A literal is a container that can be translated directly to a value without looking at it's surrounding - for example 1 can be translated directly to the number one. x can not be translated to a value in such a way, since it's a variable and we don't know what it holds unless we look at the surrounding code.

一応[wiki](https://en.wikipedia.org/wiki/Value_(computer_science))による`value`の定義：

>
In computer science, a value is an expression which cannot be evaluated any further (a normal form).[1] The members of a type are the values of that type.[2] For example, the expression 1 + 2 is not a value as it can be reduced to the expression 3. This expression cannot be reduced any further (and is a member of the type Nat) and therefore is a value.

##それぞれの違い

講義によるそれぞれの違いの定義付けは

![Screen Shot 2016-01-07 at 6.47.45 AM.png](https://qiita-image-store.s3.amazonaws.com/0/87666/40b2bdfe-662c-101a-5161-41c0acd7f85a.png)


言語によっても定義が変わってくるので一般的な解釈はこれくらいで。
Kallithea を試してみる

#はじめに
諸事情で，Git と　Mercurial の両方をホスティングできる良さげなサーバアプリはないものか?と探していたら，Kallithea っていうのがあるよと教えてもらったので，試してみた．
試すための手順なので，実運用するならもっと真面目にあれこれ設定したほうがいいと思う．

なお，この記事はメモ的に書いてるので，だいぶ書き方が雑になると思います．

# 動作環境
Debian(Docker Container) on Debian (VM) on Ubuntu 14.04

Docker のインストールまでは省略
# 参考URL
本家サイト 
https://kallithea-scm.org/

GitとMercurialに対応のリポジトリ管理ツール「Kallithea」 - ファーエンドテクノロジー株式会社 - http://goo.gl/lmjQwc

#手順
Kallithea を動かすための Docker コンテナを起動します．
最終的に， Kallithea を 5000 番ポートでアクセスできるようにしたいので， 5000番ポートをフォワーディングするようにします．

```
# docker run --name=test1 -dit -p 5000:5000 debian /bin/bash
# docker-enter test1
```

これで，コンテナで動いている Debian に入りました．
これ以降はコンテナ内の Debian での操作になります．

以下のコマンドで Kallithea のインストールをします．

```
# apt-get install python-dev
# apt-get install git
# apt-get install python-pip

# easy_install pip
# pip install kallithea
```

Kallithea を動かすために必要なファイルを準備します．

```
# mkdir -p /var/lib/kallithea/repos
# cd /var/lib/kallithea
# paster make-config Kallithea kallithea.ini
# paster setup-db kallithea.ini
```

`# paster setup-db kallithea.ini` でいくつか対話的に質問がでます．
質問は

1. admin ユーザのユーザ名
2. admin ユーザのパスワード
3. admin ユーザのとメールアドレス
4. リポジトリを置くディレクトリ

を指定するためのものだったと思います．
もしかしたら，他にも何かあったかもしれません．
4 のディレクトリは，`/var/lib/kallithea/repos` を指定してみました．

真面目に動かすなら，このディレクトリはデータボリュームにしておいたほうがいいんだと思います，たぶん．

また，コマンド名から察するに， DB のセットアップをしていると思うんですが，これの実態もデータボリュームにしたほうがいいんだと思います．
どこに作られるのかはわかりませんが...




次に，設定ファイルを少し変更します．
コンテナの外からアクセスするために必要な変更です．
`/var/lib/kallithea/kallithea.ini` を以下のように変更します．

``` diff
--- kallithea.ini.backup        2016-01-07 14:06:42.844000000 +0000
+++ kallithea.ini       2016-01-07 09:44:01.428000000 +0000
@@ -158,7 +158,7 @@
 #cheaper-step = 1

 ## COMMON ##
-host = 127.0.0.1
+host = 0.0.0.0
 port = 5000

 ## middleware for hosting the WSGI application under a URL prefix
```

最後に，以下のコマンドを実行して，サーバを起動します．

```
# paster serve kallithea.ini start
```

あとは，ブラウザから Docker ホストの 5000 番ポート (=コンテナの 5000 番ポートにフォワーディング) にアクセスすると，それっぽい Web UI が見えるかと思います．

ぱっと見た目が Github や GitLab などとだいぶ違いますが， Web UI をしばらくポチポチしてたらなんとなくわかるんじゃないかと思います．
Web UI の解説はなしで (スクショ貼るのめんどうなので...)

# おわりに
とりあえず，Kallithea が動くところまではこれでできるはずです，たぶん．
真面目に使うなら，もう少し色々設定したほうがいいと思います．
設定はきっと，kallithea.ini をいじればいいんじゃないかと思いますが，そんなにいじってないのでよくわかりません．
Cordova(PhoneGap)でアプリ開発する時のlocalhost指定についての注意点


Rails等でサーバーサイド、Cordova(PhoneGap)でクライアントサイドのアプリを開発する時、localhost(127.0.0.1)を指定してデバッグする時の注意点です。
確認したCordovaのバージョンは、"5.4.1" です。


```
$ cordova create <foldername> <uri> <AppName>
```

のように雛形を作成し、自動的に生成されたindex.htmlのmeta情報まま、locaohostにアクセスしようとしても、正常にアクセスできません。
CSPポリシーが設定されていないためのようです。
（APIを使用してサーバーからjsonデータを取得する様なソフトの開発でデバッグしようすると、その前に躓くことになってしまいます）

このような現象に遭遇した時は、自動生成されたindex.htmlに対して、以下のようにconnect-srcでlocalhostとポートの設定を追加すると、正常にアクセスできるようになります。

編集元

```html
<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *">
```

編集後（例）

```html
<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *; connect-src http://localhost:3000">
```
$rootScopeを$watchしてたら困ったことメモ

##はじめに
$rootScopeに入れたプロパティを監視して、変更があったら◯◯したい場合がありました。
普通に``$rootScope.$watch``で問題ないかと思っていたのですが、少し困ったことがあったのでメモしておきます。

##困ったこと

例えば下記のような場合、$rootScope.myNameの変更を監視して、変更があったらalertを表示させます。

```
var app = angular.module('App', []);

app.controller('HogeCtrl', ['$rootScope', '$scope', function($rootScope, $scope) {

  $rootScope.myName = '太郎';

  $rootScope.$watch('myName', function() {  
    alert($rootScope.myName); 
  });

}]);
```

こちらで、問題なく動作するのですが、
なんらかの理由で``HogeCtrl``がもう一度実行された場合に問題が起こります。

###問題
何が問題かというと、$rootScope.myNameの変更があった場合、alertが２回表示されるようになります。

###原因
原因としては、``$rootScope.$watch``が実行される度に、rootScopeの$$watchersに監視対象が追加されていきます。
対象（myName）がすでに登録済みでも追加される為、myNameに変更があった場合、追加された監視対象分処理が実行されていたようです。
※正しい表現かが怪しいです。

当たり前の動作なのかもしれませんが、私は監視対象が同じ場合は上書きされるのかと思い込んでいました。

<a href="http://codepen.io/satofaction/pen/eJvXOw?editors=101" target="_blank">サンプル</a>

##対応方法

rootScopeをwatchするのはやめて、下記のようにしました。
$watchの第一引数をプロパティ名ではなく、rootScopeのプロパティを返す関数に変更しました。

これで、コントローラーが2回実行されてもalertが2回おきることはなくなりました。

```
var app = angular.module('App', []);

app.controller('HogeCtrl', ['$scope', function($scope) {

  $rootScope.myName = '太郎';

  $scope.$watch(function(){return $rootScope.myName;}, function() {  
    alert($rootScope.myName); 
  });

}]);
```
IoT×車×ビッグデータ － IoT入門勉強会に参加した

# 勉強会の基本情報

* 【日　時】2016年01月07日 19:30~21:00
* 【会　場】レバレジーズ本社 ( 渋谷ヒカリエ17F )
* 【参加費】無料
* 【主　催】レバレジーズ株式会社
* 【申し込み】http://eventdots.jp/event/576837

# 概要
* 株式会社スマートドライブは、自作DriveOnという製品が紹介された
    * https://www.smartdrive.co.jp
* DriveOnとは
    * 車にデバイスを装着してスマートフォンで簡単に運転スキルを診断できるIoTサービス
    * 中国のテンセント会社も、同様なサービスを開発した
    * http://map.qq.com/lubao/hezi/
* 勉強会目的
    * 自社プロダクト「DriveOn」開発の実体験を引き合いに、
IoTサービスを提供する際の企画からプロトタイピング、製品化までの開発秘話、
そして、IoTを如何にビッグデータに結び付けていくかという考え方の基礎を解説すること

# 内容

## 自作PC感覚で作る iOS×電子工作のはじめかた
### 発表者
 * 堀口 祐樹

### 説明
* 構成
    * マイコン
    * バス
    * 周辺モジュール
* モジュールの探し方
    * https://www.sparkfun.com
    * https://www.adafruit.com 
* 動作確認
    * ツール：LightBlue
* iOSアプリ
    * scan
    * advertise
    * read
    * notification

## プロトタイピングから量産化できるまで

### 発表者
* 村山 嗣

### 量産までの流れ

* 量産品は、プロトタイプとの違い
    * 製造コストが重要
    * 一つのミスで大きな損失 
    * 部材選択の重要性
* 製品企画
* プロトタイプ開発
* 量産開発
* 量産後

## ドライブデータ

### 発表者
* 吉岡 誠

### 説明
* ドライブデータとは
    * 出発地~目的地の間で次のデータを作成する
    * 移動距離、速度、急加速急减速の検知、アイドリング時間など
    * ドライブことのデータを生成して、運転診断を行う
* データのアップロード
    * デバイス、スマホ、それぞれ別々のタイミングでサーバーへアップ
    * 問題：時系列のデータがアップロードされる保証がない
* データの生成
    * http(post)でデータアップロード
    * rawデータをDBへ保存
    * queueへデータ登録
    * worker処理
    * 解析処理実行
    * 結果をDBへ保存


# 感想
* iOS×電子工作の内容が面白いなので、試したい
* ハードウェアの開発と量産化が難しいことは、分かった
* 時系列のデータがアップロードされる保証がないことが分かって、対応案を調査したい
Ruby AWS SDK v2 でS3の署名付きURLを発行する

`Aws::S3::Presigner`を使います。

## 基本

```rb
s3 = Aws::S3::Client.new
signer = Aws::S3::Presigner.new(client: s3)
signer.presigned_url(:get_object, 
                     bucket: 'your-bucket',
                     key: 'path/to/object')
```

## URLの有効期限を設定する

たとえば、購入者に向けてダウンロード用URLを発行する場合、不正利用を防ぐためにごく短期間のURLを作りたい。

そういったときは`expires_in`で指定できる。

以下、30秒だけアクセス可能なURLの例

```rb
signer.presigned_url(:get_object, 
                     bucket: 'your-bucket',
                     key: 'path/to/object', 
                     expires_in: 30)
```

## HTTPSにしたい

`secure: true`を指定する。

```rb
signer.presigned_url(:get_object, 
                     bucket: 'your-bucket',
                     key: 'path/to/object', 
                     secure: true)
```

## Content-Typeを指定する

たとえば、S3のファイルを直接ブラウザで開くのではなく、ダウンロードさせたいとき`application/force-download`を設定する。

S3では`response-content-type`をリクエストパラメータに追加して署名すれば良いみたい。

参考: 
http://docs.aws.amazon.com/ja_jp/AmazonS3/latest/API/RESTObjectGET.html

サンプルが見つからず苦労したものの、コードを読むと単に以下のようにすればよいようだった。

```rb
signer.presigned_url(:get_object, 
                     bucket: 'your-bucket',
                     key: 'path/to/object', 
                     response_content_type: 'application/force-download')
```

## ダウンロードファイル名を指定したい（Content-Disposition）

Content-Typeの時と同様に、`response_content_disposition`を指定する。

```rb
signer.presigned_url(:get_object, 
                     bucket: 'your-bucket',
                     key: 'path/to/object', 
                     response_content_disposition: 'attachment; filename=Downloadfile.pdf')
```
boto3でS3のファイルを操作

##環境
- mac os x 10.10.5
- python 3.5.0
- pip 7.1.2

##準備
boto3インストール

```shell-session

$pip install boto3
```

credentials設定(e.g. ~/.aws/credentials)

```
[default]
aws_access_key_id = YOUR_KEY
aws_secret_access_key = YOUR_SECRET
```

地域設定 (e.g. ~/.aws/config):

```
[default]
region=eu-central-1
```

##アップロード

```py3

import boto3

s3_client = boto3.client('s3')

# Upload the file to S3
s3_client.upload_file('test.txt', 'bucket-name', 'test-remote.txt')
```

##情報取得

```py3

import boto3

s3 = boto3.resource('s3')
bucket = s3.Bucket('bucket-name')

for object in bucket.objects.all():
    print(object.key)

```

##古いファイルを削除

```py3

import boto3
import datetime as dt

s3 = boto3.resource('s3')
retention_period = 100

bucket = s3.Bucket('bucket-name')

# check each file if it is expired or not
for object in bucket.objects.all():
    gap = dt.datetime.now(dt.timezone.utc) - object.last_modified

    if gap.days > retention_period:
        object.delete()
```

随時追加していきます。
alignを使った数式のあるTeXファイルにlatexdiffを使うと数式でエラー

#背景
latexdiffは2つのTeXのソースファイルの差分を取って，色付してくれる便利なツール。これ使って\begin{align}...\end{align}で書いた数式のあるファイルの差分を取ろうとするとエラーが出ました。

#状況
どんなエラーが出たかというと[こちらの記事](http://qiita.com/kshramt/items/a9c259eaad25af81d9e9)にあるエラーと同じく，

```
! Limit controls must follow a math operator.
```

上記のようなエラーメッセージでした。上のリンクの記事の通りにやってもまだエラーが出たのさらに修正しました。

#latexdiffのコマンドの修正
latexdiffはMacPortsでインストールしたものですが，/opt/local/binにあるlatexdiffのコマンドはシェルになっているので，これを直接編集します。

結論から書くと，以下のように修正しました。

```
my $ARRENV='(?:aligned|align|array|[pbvBV]?matrix|smallmatrix|cases|split)';
```

参考記事の変更にさらに"align"を追加した格好です。

これだと\begin{align}で書いた数式の変更は反映されなくなるのですが，TeXのコンパイルがまともに処理できるほうがいいので，このように修正しました。
zshでvim+Tabでエラーになる時の対処法

もしかしたら重複記事があるのかもしれませんが、備忘録として投稿

## 問題

```sh
vim 
```

⇡でtabで補完しようとすると

```sh
_arguments:451: _vim_files: function definition file not found
```
と出て補完ができない。
450とか他の数値の場合もあるようです。

## 解決策

```sh
rm ~/.zcompdump
exec $SHELL -l
```

これで直ります。

私の場合は後ろに[.zcompdump-ユーザー名]という感じのファイルが生成されていて、それも消す必要がありました。

## 追記（16/05/07）

より詳しい解説を見つけました。
[zshで"autoload -Uz compinit && compinit -u"を実行すると"compinit:473: bad floating point constant"のエラーが出る](http://qiita.com/laiso/items/da529d23c71e5dcf8f98)

## 追記(16/11/02)

zplug入れてる場合は以下の場合もあるようです

```sh
rm ~/.zplug/zcompdump
exec $SHELL -l
```

[<zsh> zsh + vim <tab> で補完されない、、場合。](http://nekoyukimmm.hatenablog.com/entry/2016/03/12/112041)
[MySQL]テーブルの中身をSQLで出力＆読み込み


# 概要
MySQLを運用していると専用のバックアップツールによるバックアップ＆リストアではなく、
単純にテーブルの中身をSQL取り出しとして全てを取り出し、活用したい時がある。



#テーブルの中身をSQLで出力

出力されたSQLにはcreate tableも入っている。

```linux:command
mysqldump -u{user} -p -h{hostname} -a {database} {table1} {table2}...複数指定可能 > export.sql
```


#SQLからテーブルを作成
テーブルが存在していなくても、そのまま読み込むことが可能。

```linux:command
mysql -u{user} -p {database} < export.sql
```


#関連リンク
http://www.risewill.co.jp/blog/archives/195
CakePHP3でCakeShellを作ってみる

# CakePHP3でCakeShellを作ってみる


## 1. Shellファイルを作成する

```
 app/src/Shell/HogeShell.php
```

## 2. Shellファイルを作成する

```
<?php
namespace App\Shell;

use Cake\Console\Shell;

class HogeShell extends Shell {

    /**
     * Shellだよー
     */
    public function main() {
        $this->out('開始');
        // 何かしらの処理
        $this->out('終了');
    }
}
```

## 3. 動かす

```
$ ./bin/cake Hoge
```

## 4. 結果

![無題.png](https://qiita-image-store.s3.amazonaws.com/0/25290/386f6328-b635-3620-1bbf-8ebb5260ced6.png)
brew tapとは


## brew tap
`brew tap`コマンドは、Homebrewが管理・更新・インストールするフォーミュラのリストに、公式以外のリポジトリ（サードパーティリポジトリ）を追加するためのものです。デフォルトではGitHub上のリポジトリが想定されていますが、必ずしもGitHubに限りません。

* 引数を指定せずに`brew tap`とすると、現在tapされているすべてのリポジトリが表示されます。  
  例:
  ```console
  $ brew tap
  homebrew/cask
  homebrew/core
  petere/postgresql
  ```

* `brew tap <user>/<repo>`は、`https://github.com/<user>/homebrew-<repo>`のリポジトリを`$(brew --repository)/Library/Taps`に浅いクローンを作成します。その後、Homebrewはこれらのフォーミュラを[homebrew/core](https://github.com/Homebrew/homebrew-core)の公式リポジトリと同様に扱えるようになり、`brew [un]install`でインストールやアンインストールが可能、また`brew update`で自動更新されます。

* `brew tap <user>/<repo> <URL>`は、指定された_URL_からリポジトリの浅いクローンを作成します。1引数版と異なり、_URL_はGitHubである必要はなく、HTTPである必要もありません。ただし、GitHub以外のtapでは自動更新を有効にするために、`brew tap --force-auto-update <user>/<repo>`の実行が必要です。

* （`--full`を付与すると完全なコピーが作成されます。）

* `brew tap --repair`は、シンボリックリンクベースからディレクトリベースの構造へフォーミュラを移行します。（通常は一度だけ実行すれば十分です。）

* `brew untap user/repo [user/repo ...]`で指定したtapを削除できます。複数のtapも同時に削除可能です。

## リポジトリの命名規則と想定

GitHubでは、リポジトリ名は`homebrew-何か`とする必要があります（接頭辞「homebrew-」は必須）。ただし、コマンドラインで`brew tap`を使用する際は、`brew tap username/foobar`のように「homebrew-」を省略してもかまいません。Homebrewは必要に応じて自動的に「homebrew-」を補完します。

## フォーミュラの名前が重複している場合

あなたのtapに、[homebrew/core](https://github.com/Homebrew/homebrew-core)にも存在するフォーミュラが含まれていても問題ありませんが、あなたのバージョンをインストールする際は、`<user>/<repo>/<formula>`のように完全修飾名を指定する必要があります。

`brew install foo`を実行すると、Homebrewは以下の順序でフォーミュラを検索します:

* 公式（core）のフォーミュラ
* その他のtap

特定のtapからインストールする場合は、完全修飾名を使用してください。  
例:
```sh
brew install vim                   # homebrew/coreからインストール
brew install username/repo/vim       # カスタムtapからインストール
```

そのため、カスタマイズしたフォーミュラは、インストールを容易にするために新しい名前を付けることが推奨されます。

# 参考

https://github.com/Homebrew/brew/blob/master/docs/Taps.md
Qiita > プロフィール？が新しくなった > Itemsの機能 > クリックした項目が集計から除外される

ユーザ名をクリックした所で表示されるプロフィールが新しくなったようだ。

Contributions, Followers, Itemsなどクリックすることで、それぞれのグラフが見られる。

## Itemsで気づいた機能

~~右側の項目名をクリックすると、その項目が灰色になりOthersに含まれるようだ。~~

~~以下の例では３つほどクリックしてOthersに入れた状態。　~~

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/2c95586a-9480-4c7f-2354-884657907e84.png)

(訂正 2016/01/08)
@mdstoy さんにコメントいただいたように、Othersに含まれるのでなく集計から除外されるようでした。
Railsでデータベースを利用しないアプリケーションをデプロイするためにやったこと


## 背景

データベースを利用しないアプリケーションをわざわざRailsで実装したくなる時もあると思います。
僕の場合は、バックエンドにはAPI用の別アプリケーションを使用して、react-railsを用いたフロントエンドのみのRailsアプリケーションをデプロイする必要が出たので、そのときの作業を記録します。

## 環境

* Rails = 4.2.5
* capistrano ~> 3.1

## 手順

1. GemfileからDBアダプタgemの削除
2. config/application.rbのrequire設定の変更
3. config以下のactive_recordを使用している設定の削除
4. test_helperのactive_recordに依存している処理の削除
5. capistranoタスクからmigration処理の削除

### 1. GemfileからDBアダプタgemの削除

```ruby:Gemfile

gem 'mysql2' # Remove this line
gem 'sqlite3' # Remove this line
gem 'pg' # Remove this line

```

### 2. config/application.rbのrequire設定の変更

`rails/all`をrequireする行があるのでこれを削除して、代わりに以下の行を足す。

```ruby:config/application.rb

# require 'rails/all' # Remove this line

# Add below
%w(
  action_controller
  action_view
  action_mailer
  active_job
  rails/test_unit
  sprockets
).each do |framework|
  begin
    require "#{framework}/railtie"
  rescue LoadError
  end
end
```

#### 補足

`require 'rails/all'`では railties/lib/rails/all.rbの以下の行が実行される

```ruby:rails/all.rb
require "rails"

%w(
  active_record
  action_controller
  action_view
  action_mailer
  active_job
  rails/test_unit
  sprockets
).each do |framework|
  begin
    require "#{framework}/railtie"
  rescue LoadError
  end
end
```

このactive_recordをrequireする処理を除いたのが上で行ったこと。

### 3. config以下のactive_recordを使用している設定の解除

#### config/application.rb

```ruby:config/application.rb
module YourApp
  class Application < Rails::Application
    config.active_record.raise_in_transactional_callbacks = true # <= Remove this line
  end
end
```

#### config/environments/{environment}.rb

```ruby:config/environments/{environment}.rb
Rails.application.configure do
  config.active_record.dump_schema_after_migration = false # <= Remove this line
end
```

### 4. test_helperのactive_recordに依存している処理の削除

```ruby:test/test_helper.rb

class ActiveSupport::TestCase
  fixtures :all # <= Remove this line
end
```

### 5. capistranoタスクからmigration処理の削除

```ruby:config/deploy.rb

Rake::Task['deploy:migrate'].clear # Add this line


```

以上でデータベースに接続しないRailsアプリケーションをデプロイできるようになりました。
Android Studioでバージョン管理下に置かないもの

置かないもの（.gitignore）
-
```
*.iml
.gradle
/local.properties
/.idea/workspace.xml
/.idea/libraries
.DS_Store
/build
/captures

*.apk
*.ap_
*.dex
*.class
bin/
gen/
local.properties
.classpath
.project
proguard/
*.ipr
*.iws
app/build/

.idea/*.xml

!.idea/gradle.xml
!.idea/runConfigurations/*.xml
```

ひとこと
-
「置 」がゲシュタルト崩壊してきた

参考
-
http://gihyo.jp/dev/serial/01/android_studio/0034?page=1
http://android.benigumo.com/20130621/android-studio-%E3%81%A7-gitignore-%E3%81%AF%E3%81%A9%E3%81%86%E6%9B%B8%E3%81%84%E3%81%A8%E3%81%8F%E3%81%AE%E3%81%8C%E3%81%84%E3%81%84%E3%81%AE%E3%81%8B%E3%83%BC/
Homebrewで古いバージョンをインストールする

例えばMySQL5.6をインストールしたいのに普通にHomebrewからインストールすると5.7が入ってしまったりするときがあります。
昔はデフォルトで入っているHomebrew-versionsを使えば入れることができたのですが、現行のものには入っていないため、手動でリポジトリを加える必要があります。

```
$ brew update
$ brew tap homebrew/versions
$ brew search mysql
```

` mysql56 ` というのが見つかるかと思います。

```
$ brew install homebrew/versions/mysql56
$ mysql --version
```

5.6系が入っていたら完了です。
Windows環境でGPUコンピューティングをはじめてみる

#資料目的

 - 初期状態のWindowsパソコンに対して、GPUの設定を行う
 - そもそも、GPUとかCUDAとかが何なのかを学ぶ

#環境

 - OS:Windows 10 64bit　ノートパソコン
 - Geforce970 MX
 
#GPUとは
このページが役に経ちました。以下は簡単にまとめている部分が多いです。http://www.gdep.jp/page/view/248

>GPUとはGraphics Processing Unit の略称で、その名の通りPCやワークステーションにおいて画像処理を担当する主要な部品の一つです。高速のVRAM（ビデオメモリ；グラフィックボード上のGPU専用メモリ）と接続され、グラフィクスシェーディングに特化したプロセッサが多く集まった構造を持っています。一つ一つのプロセッサの構造は単純なためその機能はCPUに比べて限定されたものですが、大量のデータを複数のプロセッサで同時かつ並列処理することができます。
 
要は、

- 画像処理を行うためのもの
- 高速のVRAMを接続（ビデオメモリ；グラフィックボード上のGPU専用メモリ）
- 並列処理が得意 


#GPUメーカーと種類
主要なメーカーは、最近ではほとんどがNvidiaとAMDとのこと。ただし、Nvidiaの方が名前を聞く気がします。理由としては

>NVIDIA社がCPUの進化に対抗して汎用計算に対応したGPUを開発し、その統合開発環境としてCUDA（後述）を配信したことで、GPUコンピューティングがより普及するようになりました。

NvidiaのGPUの種類は以下。※値段は適当です。。シリーズの中でも種類や発売時期でかなり値段が変わりますので、ご参考程度に見てください。

- GeForceシリーズ
    - コンシューマ向け
    - DirextXに最適化
    - 3Dゲームにむいている
    - GPUのチップ開発はNvidia、グラボはOEM
    - 価格：TitanXで、18万ほど。
- Quadroシリーズ
    - OpenGLに最適化
    - 3DCG作成やCADなどを利用
    - 計算速度や正確さが求められる
    - （上記とのトレードオフで）ゲームは苦手
    - Nvidiaが認めた会社だけがグラボを作れる。
    - 価格：6000シリーズだと50万ほど？？
- Teslaシリーズ
    - グラボから映像出力機能を除いたもの
    - GPUコンピューティングに最適
    - 高い計算精度が求められるCAE、金融などの分野で利用
    - メモリがたくさん
    - 価格：K80で80万程度？？

#CUDAについて
GPUと同じように良く聞く単語、CUDA。

>CUDA（クーダ）とはCompute Unified Device Archtectureの略称で、半導体メーカーNVIDIA社が提供するGPUコンピューティング向けの統合開発環境です。

- 無料 
- プログラム記述、コンパイラ、ライブラリ、デバッガなどから構成
- C言語ベース

##CUDA対応の環境（2016/01/07現在）
http://docs.nvidia.com/cuda/cuda-installation-guide-microsoft-windows/index.html#axzz3wYtOj4ny

- 最新版:7.5
- Windows 7以降（10も対応）
- Visual Studio community 2013