OmniAICreator/Qiita-1.07M huggingface dataset:
UTAUからADX2LEに変換するUTAU2ADX2を作ってみた

#UTAUの音をUnityで出してみたい

と、ふと思った。

#動画

[![IMAGE ALT TEXT HERE](http://img.youtube.com/vi/E7cyICzhzQ0/0.jpg)](http://www.youtube.com/watch?v=E7cyICzhzQ0)

#ダウンロード (Unityパッケージ)はこちら
[utau2adx2le.unitypackage](http://chahix.ddo.jp/~chahi/unity/20160509UTAU2ADX2/utau2adx2le.unitypackage)
https://github.com/tatmos/UTAU2ADX2LE

使い方は上の動画を参考に。

#参考にしたもの
[歌声合成ツールUTAU @ ウィキ](http://www10.atwiki.jp/utau2008/)
[重音テト・オフィシャルサイト](http://kasaneteto.jp/)
[ぱむぱみゅ配布サイト](http://pam6pom4.web.fc2.com/)

#いろいろ

波形ファイルのままだと
音程がおかしい→frqファイルの基本周波数で補正する
ループじゃないoto.iniファイルでループにしてみる

音程はPitchで変えてもらえばいいかなぁといった感じ。


##frqファイル
![image](https://qiita-image-store.s3.amazonaws.com/0/96808/7d8b4743-be67-1de4-fb2e-90572493eb32.png)

UTAUのfrqファイルには周波数が時間分入っているみたい。

周波数っぽいので、音程に変換するには・・・

'''
static public float Ftom(float freq)
{
   return (69f + (1f/.057762265f) * Mathf.Log(freq/440f));
}
'''
これで、近いMIDINoteNoが得られる

これをベースのキーとして
ずれてる分をcent値として
1200cent * 端数を引けばいい感じかな。

##oto.iniファイルには

http://www10.atwiki.jp/utau2008/pages/20.html

UTAUのoto.iniはテキストで
```
_あ.wav=あ,24,56,73,5,20
_あ.wav=- あ,24,56,73,5,20
_あ.wav=* あ,78,100,73,50,100
```

みたいに、一つの波形で複数の設定があるみたい。
とりあえず無印だけとりだす。

24 左ブランク
56 オーバーラップ
73 先行発声
5 固定範囲  ループ開始位置
20 右ブランク　　ループ終了位置

と5msec~20msecをループにすればよさそう

#ループがとれているわけではない
msecという単位での範囲指定なので、おそらくきっちりループではない。
ので、簡易でクロスフェードループする波形を生成する。

本来のループ区間の後ろを次のループ開始の部分とオーバーラップさせて少しクロスフェードするとかかなぁ。

#残った課題

- とりあえず音程を正しくして読み込めた。
- 歌わせるにはどうするか・・・
- ループをなんとかしたい
人を憎まずとも、コードを憎みすぎてもよくない

# 「コードを憎んで、人を憎まず」、と言うけれども

この言葉を最近見かけたのが、この記事のきっかけです。コードレビューをする際の心構えとして良く言われるようになってきたと思います。書いたコードがひどくても、それを書いた人が人間的に悪いわけではない、コードとそれを書いた人を適度に切り離そうということです。基本的には、僕も賛成です。

現実問題として、仕事ではつっこみどころ満載のソースを相手にすることが多く、苛立ちや不満などの感情が出てくるのは避けられないです。それを、書いた人にそのままぶつけるのはナンセンスですが、どこに持っていけばよいのでしょうか。

# コードへの憎しみを募らせすぎるとどうなるのか？

言葉どおり、コードにそれらの憎しみをぶつけていきましょう。そうすると、憎しみのもとになるコードを、レビューでふせぎつつ、リファクタリングをして憎めないコードにしていくことに精を出すことでしょう。

そのこと自体は建設的な行為です。しかし、サービス終了やコードのメンテナンスを放棄でもしない限りは、新しいコードや変更は加え続けられるものです。そのため、コードレビューもリファクタリングも、終わりがない作業ともいえます。つまり、コードへの憎しみに、終わりが見えなくなってきます。

# 憎しみの炎に焼かれる無間地獄へ

リファクタリングのスキルがあがってくると、かつて自分が直した部分も憎しみ出すようになってきて、憎みたくなるコードが増えてくるという、悪循環に突入し、より終わりが見えなくなります。

大抵は、ここまで行く前に気持ちがもたなくなるでしょうが、半端に耐性やガッツがあると、ここまでこじらせてしまうかもしれません...

もっとこじらせると、コードを生み出す人間の存在自体を否定するようになり、RPGのラスボスみたいな思想にとりつかれるかもしれません。

# 一体どうすればいいのか？

少なくとも、目の前の敵を憎しみに任せてただ倒すだけのようなことはしては、だめです。

コードでもそれを書いた人でもなく、問題を生み出している背後に目を向けるべきかもしれません。
それは、安直なコードを書いてしまう心の弱さなのか、そういったものを助長する環境なのか、やすきに流れてしまう人の弱さなのか...
オフライン環境でeclipseプラグインをインストールする

背景
----

あとで書く。

環境
----


```ps1
$APPSDIR='C:\Users\Public\apps'
```


内容
----

インターネットに接続できる環境でeclipseにプラグインのミラーを取得するための引数を渡して実行する。

```ps1
$cmd = "$APPSDIR\pleiades\eclipse\eclipse.exe"
$applications = @"
org.eclipse.equinox.p2.metadata.repository.mirrorApplication
org.eclipse.equinox.p2.artifact.repository.mirrorApplication
"@ -split "`r*`n"

@"
EclEmma,http://update.eclemma.org/
Spock,http://www.jspresso.org/external/updates-snapshot/e44
Gradle,http://www.nodeclipse.org/updates/gradle-ide-pack/
GlassFish,http://download.oracle.com/otn_software/oepe/mars/
"@ -split "`r*`n" | %{
    $name, $src = $_ -split ","
    $dst = "C:\Users\Public\Downloads\eclipse-plugin\$name"
    md -fo $dst
    $applications | %{
        $param = "-verbose","-application $_","-source $src","-destination $dst"
        start $cmd $param -Work (split-path $cmd) -Wait
    }
}
```
AzureでLinux VMをリソースマネージャから作成する方法


# 背景

Azure上で仮想マシン（以下VM）を作成する際、従来までの「クラシック」方式と
「リソースマネージャ」方式（以下RM方式）の2つが選べるようになっています。

クラシック方式とRM方式では、作成方法も、
VMのリソース群も、設定方法も異なります。
そのため、今までクラシック方式でVMを作成していた人は、
RM方式でVMを作成しようとすると戸惑うことが予想されます。
（私は戸惑いました）

AzureでVMを作るのはその高額さ故なのか、
あまり巷に情報がないという欠点があったりします。

というわけで、RM方式でのVMの作成方法、作成されるリソースや
設定方法についてまとめました。


なおUbuntuであることに深い意味はありません。
VMの作成自体はCentOSでも変わりませんが、
AzureのおすすめVMはUbuntuですぐ出てきたというだけの理由です。


# VMの作成方法

今回のVM作成はポータル上で行います。
そのうちAzure Powershellから作れるかも試してみたい。

大まかに以下の流れで作成できます。

1. ポータル初期画面左上、「＋　新規」からMARKETPLACEを開く
2. Virtual Machines -> 任意のLinux VMイメージを選択
3. 「デプロイ モデルの選択」でリソースマネージャーを選択して「作成」
4. 「基本」タブ、必要事項を入力
    - サブスクリプションやリソースグループに関しての説明は割愛します。
    - 需要ありそうなら記事書きます
5. 「サイズ」タブ、仮想マシンのサイズ（＝性能）を選択 
6. 「設定」タブ、基本的には特にいじらずそのままでOK
    - 複数台構成などしたい場合はここで設定することも可能
7. 「概要」タブ、問題がなければ「OK」ボタンでマシンを作成

# 作成されるリソースについて

作成したVMに関係するリソースは同じリソースグループ内に配置されます。

- 仮想マシン
- ネットワークインターフェィス
- ネットワークセキュリティグループ
- パブリックIPアドレス
- 仮想ネットワーク
- ストレージアカウント

## 仮想マシン
仮想マシンはVM本体であり、CPUやメモリ、ディスクの状態を監視したり、
サイズ、IPアドレスやDNS名など、仮想マシンを総合的に管理できます。

## ネットワークインターフェイス
RM方式では、VMにIPアドレスやDNS名が割り当てられるというよりは、
このネットワークインターフェイスにIPとDNS名が割り当てられます。

ネットワークインターフェースはクラシックでは無かったリソースです。
クラシックの時に存在していたもので同様のものが何か、今一つピンときませんが、
クラシックではVMそのものにこのインターフェースが含まれていた…
というイメージかもしれません。

## ネットワークセキュリティグループ
通信を許可するポートやサービスを設定するためのものです。
ファイアウォール的なものだと思えばいいかと思います。

これまたクラシックでは無かったもの…と見せかけて、
今クラシックのVMを見たら設定 -> 全般の中にありました。
前からあったかは不明ですが、少なくとも以前はこれを使わず、
同じく設定 -> 全般 -> エンドポイントを使っていました。

## パブリックIPアドレス
所謂グローバルIPアドレス？
外部からのアクセスに使われるIPアドレスです。
クラシックの時は勝手にDNS名が割り当てられてましたが、
RM方式ではこのIPアドレスに対して手動でDNS名を割り当てないといけません。

このIPアドレスを前述のネットワークインターフェイスに関連付け、
外部からネットワーク、VMにアクセスできるようにします。

## 仮想ネットワーク
同名のものはクラシックの時からありました。
基本機能はそんなに変わらない気がするけど…

とりあえずネットワークインターフェイスを接続したりします。
1台構成だと基本的に気にしないのであんまり分かりません、ごめんなさい。


## ストレージアカウント
これまた同名のものはクラシックでも存在していました。
パッと見基本機能は変わっていない気がします。

同一ストレージアカウント内に複数のディスクを作って接続したりできますが、
これまたあまり弄ったことのない機能なのでこれから勉強します…


# おわりに
今回はひとまずVMの作成方法と作成されるリソースについて書きました。
次回は実際の設定方法として、主にDNS名設定と
ネットワークセキュリティグループの設定を見ていこうと思います。
rails4でremote=trueを使わずにAjax通信し、レスポンスは.erbで処理する方法

## リクエスト部分
```hoge.js
$.ajax({
      //リクエストのタイプを指定
      type: "GET",
      //コントローラー/アクション
      url: "movies/search",
      //datatypeはjavascriptに
      dataType: "script",
      //ajax通信で送るパラメータ
      data: {
        search: "comedy"
      }
    });
```

## コントローラー部分

```movies_controller.rb
def search
  @movies = Movie.where("title like + '%#{params[:search]}%'").order('RAND()').take(24)
  respond_to do |format|
    # search.js.erbがレンダリングされる。
    format.js
  end
end
```

## erb部分

```search.js.erb
$('#movie-search').html("<%= j render partial: 'search_result', locals: { movies: @movies } %>");

```

## 最後に
自分への勉強のために書いてみました。
個人的に、jbuilderを使うと非常に簡単にjsonの設計ができるという印象があります。

最近、Netflixの映画レビューサイト[WhatchaSee](https://whatcha-see.herokuapp.com/)の運営を始めました。
また、場所で起こす目覚ましアプリ[MapMe](https://play.google.com/store/apps/details?id=com.takusemba.mapme&hl=jp)もリリースしているので、ぜひ使ってみてください。
Objective-CからSwiftに移行した際のポイント


# 概要

今回自分のアプリの機能拡張をSwiftで行った時に、生じたポイントについてまとめます。

## SwiftとObjective-Cの共存の際のポイント

### SwiftでObjective-Cのクラスを参照する

**Objective-C bridge headerを使用する。**
プロジェクトにSwiftのコードを追加すると、<プロジェクト名>-Bridge-Header.hが追加されるので、参照したクラスのヘッダーをimportする。

```Objective-C
//
//  Use this file to import your target's public headers that you would like to expose to Swift.
//

#import "Location.h"

```

### Objective-CからSwiftのクラスを参照する。

**<プロジェクト名>-Swift.hをインポートする**
Xcode上のインスペクタには表示されてませんが、Swiftを参照するためのヘッダーが自動的に用意されるので、インポートすればOK。
下記のサンプルは私のプロジェクトの一部です。

```Objective-C
#import "MapViewController.h"
#import "AtMiyakojima-Swift.h" //Swiftのクラス呼び出し用
```

### enum

Cのenumではなく、Objecttive-CでNS_ENUMを使う。
Swiftで定義したenumはObjective-Cでは使えないっぽい。[参考](https://developer.apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html#//apple_ref/doc/uid/TP40014216-CH10-XID_85)

正直、これについてはenumを使う意味をあまり見いだせなかった。
互いの publicな定数を引用すればよいかと思ったり。
知識として、記述。

## 文法の違い

### isKindOfClass

Objective-Cのクラスチェックは

```Objective-C
if([object isKindOfClass:[MyClass class]])
{
  //ToDo...
}
```

と記述するが、Swiftでの推奨例は

```Swift
if object is MyClass
{
  //ToDo...
}
```

となる。

## その他

### Xcodeでリファクタリングができない

Xcode7.3.1でもObjective-Cしか対応してなかった。
残念

# まとめ
まだピュアSwiftでアプリを作ったことがないので、色々とハマりどころはありそうですが、まだ完全にSwiftへの移行ができるわけでもないので（Unityプロジェクトなど）当面は共存の道を探っていくのがよさそうです。
平凡なスキルのエンジニアになろう（１）

# エンジニアってなんだろう？

と、突然思い立ったので、今までの経験も踏まえて色々と考えてみたいと思います。※僕自身はソフトウェアエンジニアです。
エンジニア目指している学生さんとか、エンジニアとして社会人になった方とかの目にとまってもらえたらいいな～くらいの記事になっていく予定です。
なので、自分なりの生き方とか成長の仕方とかが確立されている方は回れ右（ブラウザバック）でお願いします。
エンジニア同士の解決しない主張がぶつかるとお互い良い思いしないですし...ねぇ。

無駄話しも多くなるだろうから何回に分かれるかわからないですが、自分の備忘録も兼ねて。

# 生い立ち的なアレ

とは言っても、どんなやつが書いてるのかわからないと共感も何もないので、簡潔に身バレしない程度に自己紹介でもしておきましょう。

| Q | A |
|:-----------|:------------|
|初めて触った言語は？|HTMLです。ただし、それがHTMLであるということは当初知りませんでした。てっきりC言語的なものだと信じていましたｗ|
|初めて作ったものは？|ドット絵書いて載せるだけのホームページです。|
|どんな学校出たか？|某大学のネットワークコンテンツを扱う的な学科です。|
|どんな仕事をしているのか？|最初は大きな企業とかの下請けの下請けをしていました。よく二次請け・三次請けと言われる仕事です。3年ほど勤めた後に昨今何かと話題のソーシャルゲーム開発をしています。|

# エンジニアという職業になってみて

「で、エンジニアって何すれば良いの？」

社会人になって一年目。
最初に思ったことはこの一言でした。

趣味でWebコンテンツ作ったこともあるし、
学業で他言語の習得や卒業研究のために制作もしたことがあるけれど、
要は何すればお給料くれるん？

この質問は誰に投げかけて良いものかわからず、悶々と持ち続けていました。
言われたことをやっていれば良いといわれたけど、言われた通りに動くと不思議なもので、
人間は興味ない（もしくは目的が持てない）ものを目の前にすると、ぶっちゃけ眠たくなるのです。
最初の会社はコレだったので、毎日睡魔と闘っていました。
今思えば眠たい原因は"興味の無さ"だったのですが、当時は何で眠たくなるのか本当にわかりませんでした。

---------

# 原因を明確にする

で、3年体験してみて漸くわかったことですが、改めて仕事に興味が無いということがわかりました。
じゃあ、どんなところが興味の無さを引き立てたのでしょうか？
当時を振り返って考えてみました。

## 仲間がいなかった

まず、所属した会社は数十人程度の小さな会社であったのですが、主な仕事が他企業への常駐勤務だったため数チームに分かれていました。
そこから更に数人に分割された後、常駐先へ派遣されます。[^1]
不運なことに僕は一人で派遣されたので、先輩も何もあったもんじゃありませんでした。
派遣先では他の企業の方が指揮をとってくれるのですが、プロジェクトが終わればバイバイするので次のプロジェクトではまた別の人になることが多いです。
そのためまた最初から人間関係を構築することが億劫でした。（元々そんなに愛想を振りまくのが好きじゃなかったのも災い。。。）

## 作っているシステムの説明ができない

言われたことをやるということは、言われたことしかやらないケースが殆どになります。
僕のような平凡エンジニアには尚更。
そのため日々の作業はなんとかできるのですが、なんで作る必要があるのかはまったく見えていませんでした。
自分が興味のないRPGのレベル上げの作業だけをやっている気分。
いとも簡単に眠くなりますよね。
よくわからん専門用語も多いのに、先輩もいないから質問の仕方を学べることもなく、ひたすら無口で作業をする日々が続きました。

## 正解がわからない

作っているときにある程度の範囲をまとめて任されることが多いのですが、、、
作りますよ？頑張りましたよ？
会社での研修[^2]も全部やりきったから、初心者本に書かれていることは大体やれるようになりましたよ？
でもこれがレビュー（有識者のチェック）を受けると

>「まぁ、いいんじゃない？」
>「じゃあそれで」
>「わるくはない」
>「仕様満たしているならいいよ」

とか言われるんですよ。
自信つけるためにも、「良い」か「悪い」かハッキリ言ってほしい瞬間もあったのですが、
責任を逃れたいがためか、結構曖昧に濁されることも多々ありました。
ある程度なれた今であれば良いのですが、新人の頃にこれをやられると右も左もわからなくなってしまうことが多いと思います。

## 自分の価値がわからない

こういう仕事の仕方をしていると、自分の価値を図るモノサシに乏しくなります。
きっと探せば数キロ以上を図れる有能な人もいるかも知れませんが、当時の自分は15cm定規くらいのイメージでした。
15cmを超えた範囲は「わからない」で統一。
そのため、自分は何に強くて何に弱いか、どこを目指しているのかが全部ひっくるめて「わからない」でした。

---

# 仕事が面白くなかった原因は

というわけで僕の場合、興味が無かった理由は一重に"職種"ではなく"業務内容"であったことがわかりました。
今考えると当時の会社の方々にはご迷惑をおかけいたしましたが、上記理由により挽回もできそうに無かったので転職を決意しました。

この決意が、僕を「平凡なスキルのエンジニア」へと導いたのだと、今は思っています。

![tobeContinued.gif](https://qiita-image-store.s3.amazonaws.com/0/80680/bbb43270-24c5-7220-a7ec-af9a26d88fea.gif)


[^1]: 要は所属している会社とは別の会社で業務をすること。僕の場合は朝から帰りまで勤務しているため、プロジェクトが終わるまで自分の会社に行くことは基本ありませんでした。

[^2]: 分厚い参考書渡されて「これできるようになっといて」って身もふたも無いやつでしたが...
命名に困ったら


コーディングすると命名にはいつも困る。
私の長年の友は[英辞郎](http://www.alc.co.jp/)さんだが、たまーにうまくいかない時がある。

#すてきなサービス
[codic](https://codic.jp/) 
ネーミングを生成してくれるとか本当に嬉しい。

こちらの使い方については[寝ログ｜関数や変数のネーミングに悩んだら「codic」に日本語名を入力するとある程度解決するかも](http://nelog.jp/codic)が詳しい。

次のプロジェクトには活用する予定なのでメモ。
PHP で var_dumpのフォーマット

複数のvar_dumpを出力させてどこに書き込んだか分からなくなった、なんてことないだろうか？ (俺だけ？)

で、var_dump でデバッグしたいとき、こんな感じのフォーマットで設定しておく。

```php
/**
 * 下記のフォーマットで書くと出力はこうなる
 * ExecFile: 呼び出したファイル名(行数)
 * Function: 呼び出した関数名
 * 値
 */
var_dump('ExecFile: '.basename(__FILE__).'('.__LINE__.')', 'FUNCTION: '.__FUNCTION__, variable);
// var_dump は引数をカンマ区切りで無制限に渡せる。
```

Sublime Text 3 のSnippetは下記設定例。
"var" を入力すると上記のスニペットが展開できるようになる。

```xml:var_dump.sublime-snippet
<snippet>
    <content><![CDATA[var_dump('ExecFile: '.basename(__FILE__).'('.__LINE__.')', 'FUNCTION: '.__FUNCTION__, ${1:variable});]]></content>
    <tabTrigger>var</tabTrigger>
    <scope>source.php</scope>
    <description>var_dump Debug</description>
</snippet>
```
NCMBとMONACAを使ってアプリ開発（roleのレコードを見る/roleにuserを追加する）

#ロールでのUser追加操作にハマった。
初投稿ですが、ハマったことをメモします。

##一番ハマったのはaddRoleの仕方
新規でRole作った際のサンプルはあるのですが、すでにRoleがあってすでにいるUserをどうやったら追加できるかわからなかった。
[role.jsの説明](http://qiita.com/drafts/b70efeb9c12bae16420b/edit)
とりあえず上記を見つつ、他の人の記事も見てようやく今のログインユーザーで登録する方法はわかった。


- DataStoreと大体同じ。fetchAllとかでとってきて、updateでいい
- だけど、roleクラスはクラスを指定しないでいい(常にRoleだから、Userも同じ)
- newは新規登録じゃないのでいらない
- addUserは「Userクラス」を入れる。userNameだけじゃダメ！！

サンプルソースは以下のとおり。

###roleのレコードを見る
```
function showRolesList(){
    ncmb.Role.fetchAll()
             .then(function(results){
                if (results.length == 0 ){
		            alert("roleがないです");
		        } else {
                    alert(results.length);
                    for (i = 0; i < results.length; i++){
                        alert(results[i].get("roleName"));
                    }
		        }
              })
              .catch(function(err){
                  alert(err);
              });
}
```
###roleにUserを足す
```
//Roleにログイン中のCurrentUserを追加登録する
function addRoleTest(){
    var currentUser = ncmb.User.getCurrentUser();
    ncmb.Role.equalTo("roleName", "test")
             .fetchAll()
             .then(function(results){
            	if (results.length == 0 ){
		            alert("roleがないです");
		        } else {
            	    alert(results.length);
            	    alert(results[0].get("roleName"));
            	    var r = results[0]
                	r.addUser(currentUser)
                     .update()
                     .then(function(results){
                        alert("OK")
                     })
                     .catch(function(err){
                        alert(err);
                     });
		        }
             })
             .catch(function(err){
                alert(err);
             })
}


```

いやーつまりました。解決した。
ついついaddUser(userName)ってしちゃうけど、addUser(userクラスのレコード)じゃないとダメ。
Mac の Finderでドットから始めるファイルを表示する方法

MacのFinderで . から始めるファイルの表示方法をメモります。

ターミナルで、以下の二つのコマンドを入力すれば、 . から始めるファイルが表示されるようになります。

```
defaults write com.apple.finder AppleShowAllFiles true
killall Finder
```

これを元の設定 ( . から始まるファイルを非表示にする ) に戻す時は以下の二つのコマンドを実行すればOKです。

```
defaults write com.apple.finder AppleShowAllFiles false
killall Finder
```

以上です。
ionicでInAppBrowserを起動して特定のURLで閉じる


下準備として

- npmがインストールされている
- bowerがインストールされている
- ionicがインストールされている



今回使うプラグインはこれ
[cordova-plugin-inappbrowser](https://github.com/apache/cordova-plugin-inappbrowser)



んなわけでおもむろにアプリを書き始めます。

```
ionic start myApp tabs #適当に変えて下さい

bower install ngCordova #ngCordovaのインストール
cordova plugin add cordova-plugin-inappbrowser #プラグインのインストール 
```


www/index.html

```
#/ng-cordova.jsの読み込み
<script src="cordova.js"></script>
<script src="lib/ngCordova/dist/ng-cordova.js"></script> 
```



www/js/app.js(controllerでもOK)

```
#下記のようにngCordovaを追加
angular.module('starter', ["ngCordova"])
```



適当なビューにリンクを作る

```
<a ng-click="login()">ログイン</a>   
```


コントローラー

```
.controller('DashCtrl', function($scope, $cordovaInAppBrowser) {
  $scope.login = function(){
    var ref = cordova.InAppBrowser.open('URL', '_blank', 'location=no');
    ref.addEventListener('loadstart', function(event) {
        if(event.url == "別のURL"){
          ref.close(); #閉じる
        }
    });
  };
})
```
TPL Dataflow を用いて最大並列数を制限した非同期 foreach を実行する

`Palallel.ForEach` には `Func<T, Task>` を渡せるオーバーロードが存在しないため、内部で非同期メソッドを呼び出す場合は困ってしまう。~~`Result` とれって？~~

```csharp
Parallel.ForEach(Enumerable.Range(0, 10), new ParallelOptions { MaxDegreeOfParallelism = 3 },
                 async i => // async void になるから完了を待機しない！
{
    Console.WriteLine(await httpClient.GetStringAsync($"http://sample.com/?hoge={i}"));
});
```

同時実行数の制御が不要で、比較的少量のシーケンスに対して非同期処理して待機するだけなら `Select` して `Task.WhenAll` で事足りるのですが、同時実行数を制御したくなってくると `SemaphoreSlim` で独自に色々やらないといけなくなってきたりで面倒（この辺りは記事最後のリンク記事を参照）。

ということで TPL Dataflow を使うとスマートに解決できるらしいけど、いつも書き方を忘れてしまうのでメモ。

NuGet から Microsoft.Tpl.Dataflow をインストール。

```
Install-Package Microsoft.Tpl.Dataflow
```

`using System.Threading.Tasks.Dataflow;` して以下の様なコードを書く。

```csharp
public static class ParallelEx
{
    public static async Task ForEachAsync<T>(this IEnumerable<T> source, Func<T, Task> action, int maxDegreeOfParallelism)
    {
        var block = new ActionBlock<T>(action, new ExecutionDataflowBlockOptions
        {
            MaxDegreeOfParallelism = maxDegreeOfParallelism,
        });

        foreach (var item in source)
        {
            await block.SendAsync(item);
        }

        block.Complete(); // これ以上は Send しないよ、的なメッセージ

        await block.Completion; // 完了を待機
    }
}
```

`CancellationToken` を使うとか `TaskScheduler` を指定するとかお好みで。私は情弱なのでよくわかりません。
`ExecutionDataflowBlockOptions` ごと受け取れるようにしておくと無難かもしれない。

こうしておくと、呼び出し側で以下のように呼び出せる。

```csharp
await Enumerable.Range(0, 10).ForEachAsync(async i =>
{
    Console.WriteLine(await httpClient.GetStringAsync($"http://sample.com/?hoge={i}"));

}, maxDegreeOfParallelism: 3);
```

----

関係あるかもしれない記事

* [非同期時代のLINQ](http://neue.cc/2013/12/04_435.html)
* [ForEachAsync - 非同期の列挙の方法 Part2](http://neue.cc/2014/03/14_448.html)
* [小ネタ：重いSelectを何とかしてみたい](http://qiita.com/NetSeed/items/052b5aee3941c2f7ae28)
Slackのカスタム絵文字を全てダウンロードする

#前提/環境

- Node.js
- Windows（Linux系でもパスを読み替えれば多分おｋ）
- 画像保存用に「image」ディレクトリをあらかじめ作成しておく

#手順

##必要パッケージインストール
```
# npm install slack-node
# npm install request
# npm install fs
```

##画像保存（スクリプト実行）
```javascript:sample.js
var Slack = require('slack-node');
var request = require('request');
var fs = require('fs');

apiToken = "<apitoken>";
slack = new Slack(apiToken);

slack.api("emoji.list", function (err, response) {
    for(key in response.emoji){
        url = response.emoji[key];
        //エイリアスは無視
        if(url.match(/alias/)){
            continue;
        }
        request
        .get(url)
        .on('response', function (res) {
        })
        .pipe(fs.createWriteStream('image\\'+key+'.png'));
    }
});
```

#参考
[NodeJS] requestモジュールを使って、サーバーから画像ファイルをダウンロードする - YoheiM .NET http://www.yoheim.net/blog.php?q=20150104
今更：1 時間以内に解けなければプログラマ失格問題 5 を elisp で解いてみた

[JavaScript バージョン](http://qiita.com/t-suwa/items/ec7ad2c72e0b97104b00)と、[C++ バージョン](http://qiita.com/t-suwa/items/dff92b634205a6215d54)ができたので、elisp でも書いてみた。

```el
(defun calc-inner (exp tmp sum)
  (if (null exp)
      (+ sum tmp)
    (let ((op (nth 0 exp))
          (val (nth 1 exp))
          (rest (nthcdr 2 exp)))
      (pcase op
        ((or `+ `-)
             (calc-inner rest (funcall op val) (+ sum tmp)))
        (t (let ((sign (if (> tmp 0) 1 -1)))
             (calc-inner rest (+ (* tmp 10)
                                 (* sign val)) sum)))))))

(defun calc (exp)
  (calc-inner (cdr exp) (car exp) 0))

(defun dump (exp)
  (mapconcat (lambda (term)
               (pcase term
                 ((or `+ `-)
                  (format " %s " term))
                 (`nil "")
                 (t (number-to-string term)))) exp ""))

(defun gen (src &optional acc)
  (if (eq (length src) 1)
      (princ (reverse (cons (car src) acc)))
    (dolist (op '(+ - nil))
      (gen (cdr src)
           (cons op (cons (car src) acc))))))

(with-temp-buffer
  (let ((print-length nil)
        (standard-output (current-buffer))
        (standard-input (current-buffer))
        (numbers (number-sequence 1 9))
        result)
    (gen numbers)
    (goto-char (point-min))
    (while (not (eobp))
      (let ((exp (read)))
        (when (eq (calc exp) 100)
          (push (dump exp) result))))
    result))
```

Emacs ならやっぱりバッファだよなーということで、安直に一時バッファを使って式の生成と評価を行っている。基本的なロジックはどれも一緒だけど、elisp だとだいぶリラックスした雰囲気を感じるのは気のせいかしら。
JDKをインストール(OS:CentOS6.7 IED:Eclipse Mars)

#概要

Eclipse MarsのデフォルトのJREは下記の通り。
java-1.7.0-openjdk-1.7.0.79.x86_64

Java8の機能を使いたかったのでJDK1.8をインストールした。

##JDKをダウンロード

```
wget http://download.oracle.com/otn-pub/java/jdk/8u72-b15/jdk-8u72-linux-x64.tar.gz?AuthParam=xxxxx
```
GUIでLisence Agreementに同意しないとダウンロードできない。
xxxxxは(多分)乱数でダウンロード毎に違う英数字が割り当てられる。


##名前を変更する
```
mv jdk-8u72-linux-x64.tar.gz\?AuthParam\=xxxxx jdk-8u72-linux-x64.tar.gz
```


##展開する
```
tar zxvf jdk-8u72-linux-x64.tar.gz
```
./configureを実行しようとしたがエラーになった。
コンパイルは必要ないです。

##移動する
[~/ダウンロード]に展開したので、Eclipseの既定のディレクトリに移動した。
既定のディレクトリは下記の手順で調べられる

1. Project>Properties>Java Build Path>[Libraries]タブ内の[Edit]をクリック
1. Edit Libraries>[Installed JREs]をクリック
1. Installed JREsの[Edit]をクリック
1. Edit JREの[JRE home]に既定のJREの保存場所が表示される

後付けだが、下記のコマンドでもいいかもしれない
```
find / -type d -name jre
```

```
mv ~/ダウンロード/jdk-8u72 /usr/lib/jvm

```

#Eclipseに設定する
「移動する」で示したとおりにリンクをたどり、

1. Installed JREsの[Add]をクリック
1. Add JRE>Installed JRE Types:で[Standard VM]を選択し[Next]をクリック
1. Add JRE>JRE Definitionが表示されるので下記のとおり設定する
1. JRE home:/usr/lib/jvm/jdk-8u72
1. JRE name:jdk1.8.0_72

Java8が利用できるようになりました。
CSVファイルの特定列を形態素解析して行毎に出現単語数を数えるスクリプト

タイトル通りのスクリプトです。

```rb

require 'natto'
require 'csv'

if ARGV[0].nil?
  p "usage: ruby mecab.rb [filename]"
  exit
end

words_by_line = {}
CSV.open(ARGV[0], 'r') do |lines|
  mecab = Natto::MeCab.new
  lines.each_with_index do |line, index|
    words = []
    # 改行や句読点を削除
    body = line[1].gsub(/(\r\n|\r|\n|\f|、|。)/,"")
    mecab.parse(body) do |noun|
      words << noun.surface ? noun.surface : "-"
    end
    words_by_line[index] = words
  end
end

word_counts_by_line = {}
words_by_line.each_with_index do |line, index|
  word_count = []
  words_by_line[index].uniq.map do |word|
    word.gsub!(/(暴言１|暴言２)/, "ピー")
    word_count[word_count.size] = ["#{word}", "#{words_by_line[index].grep(word).count}"] if word
  end
  word_counts_by_line[index] = word_count
end

CSV.open('output.csv', 'wb') do |csv|
  word_counts_by_line.each_with_index do |line, index|
    csv << word_counts_by_line[index].sort_by { |word_and_count| word_and_count[1].to_i }.reverse
  end
end


```

こんなデータで使う事を想定して作りました。

```csv
"挨拶メール","本日はお日柄もよくうんたらかんたら"
"アポメール","先日ご紹介させて頂きました弊社のawesome製品について一度ご説明の機会を（ｒｙ"
"御礼メール","本日はご説明のお時間を頂きありがとうございました。もしご不明点等（ｒｙ"
```

こうなります。

```csv
"[""たら"", ""2""]","[""よく"", ""1""]","["""", ""1""]","[""うん"", ""1""]","[""かん"", ""1""]","[""も"", ""1""]","[""日柄"", ""1""]","[""お"", ""1""]","[""は"", ""1""]","[""本日"", ""1""]"
"[""の"", ""2""]","[""ご"", ""2""]","["""", ""1""]","[""を"", ""1""]","[""機会"", ""1""]","[""説明"", ""1""]","[""一度"", ""1""]","[""について"", ""1""]","[""製品"", ""1""]","[""awesome"", ""1""]","[""（"", ""1""]","[""弊社"", ""1""]","[""た"", ""1""]","[""まし"", ""1""]","[""頂き"", ""1""]","[""て"", ""1""]","[""せ"", ""1""]","[""さ"", ""1""]","[""紹介"", ""1""]","[""ｒｙ"", ""1""]","[""先日"", ""1""]"
"[""ご"", ""2""]","[""ござい"", ""1""]","[""（"", ""1""]","[""等"", ""1""]","[""点"", ""1""]","[""不明"", ""1""]","[""もし"", ""1""]","[""た"", ""1""]","[""まし"", ""1""]","[""ｒｙ"", ""1""]","[""ありがとう"", ""1""]","[""頂き"", ""1""]","[""を"", ""1""]","[""時間"", ""1""]","[""お"", ""1""]","[""の"", ""1""]","[""説明"", ""1""]","["""", ""1""]","[""は"", ""1""]","[""本日"", ""1""]"
```

辞書をちゃんとメンテナスしてやったらもう少しマシな精度になるかもです。
Emacsの起動速度を上げる

このGWは、自分のEmacsを磨くことに費やしておりました。

Emacsは、御存知のとおり非常にカスタマイズ性の高いエディタです。
しかし、「ぼくのさいきょうのえでぃた」を作ろうとして無闇矢鱈にカスタマイズしたり、パッケージを追加したりして、Emacsを膨らませすぎると起動時間が非常に遅くなります。

私のEmacsも非常に起動時間が遅くなっておりました。
けれども「Emacsは一度起動したら起動しっぱなしにしておくもの」であるため、あまり気になるものではありませんでした。

しかし、最近になってパソコンを付けっぱなしにしておく癖は如何なものかと考えるようになり、頻繁に再起動するようになりました。
そうなると、Emacsの起動時間が気になるようになります。

そこで、このGWを機にEmacsの起動時間を改善しようとしました。

## はじめに

自分のEmacsにおける問題

1. バイトコンパイルとしているものとしていないものがある。
2. 起動時に全てのパッケージを読み込んでいた。
3. 使わないパッケージすら読み込んでいる。

これらが最初に上げられました。

## 全てのelファイルをバイトコンパイルしていない問題
これはいちいち、変更を加える度にバイトコンパイルをするのが面倒だったことが理由です。
しかし、バイトコンパイルをしなければ、読み込み時間は遅くなります。
そこで、自動コンパイルすることを考えたのですが、既にパッケージになっていました。
それは、るびきちさんが作ったパッケージ「[auto-async-byte-compile](https://www.emacswiki.org/emacs/AutoAsyncByteCompile)」です。
これは、自動的に非同期的に編集したelをバイトコンパイルしてくれるというスグレモノだそうです。
これを導入することで、ひとまずはこの問題は解決できました。

## 起動時に全てのパッケージを読み込んでいた。
これは私の知識不足が原因でした。
これまで、EmacsLispのパッケージを読み込むときは以下のようにしていました。

```el
(require 'package-name)
(パッケージの利用)
```

全てのパッケージをこのように書いていたのです。
これによって、起動の時点で全てのパッケージがロードされてしまったのです。
つまり、これが起動が遅くなる原因の一つになったといえます。
そこで、一度にパッケージを読み込まない方法を調べました。
すると***autoload***という関数と***eval-after-load***という関数を知りました。
この項でしゃ、autoloadに関する説明を行います。
autoloadとは以下のように使います。

```el
(autoload 'packge-function "package-name" nil t)
```

先ほどの ***require*** は、ただそのファイルをロードする関数です。
しかし、 ***autoload*** は最初の引数に関数名のシンボルを置き、次の引数に読み込みたいファイル名を入れます。それ以降の引数については、[ここ](http://www.gnu.org/savannah-checkouts/gnu/emacs/manual/html_node/elisp/Autoload.html)を読んでください。
これはシンボルにした関数やマクロ ***'package-function*** を最初に定義されたことにしておき、その関数の実行時にそのパッケージ ***"package-name"*** をロードするというものです。
※注意点は、パッケージ名 ***"package-name"*** は文字列でないと型が違うと怒られます。
これによって、起動時の時点でいらないパッケージを読み込まずに済みます。

この関数は、あるパッケージを使う際にそのパッケージで最初に使う関数が実行されるまで読み込まないようにするために使えます。

以下はその例です。

```el
(autoload 'enh-ruby-mode "enh-ruby-mode"
  "Major mode for ruby files" t)
```

これは、 ***enh-ruby-mode*** が実際に呼び出されるまでこのパッケージがロードされないことを意味します。

つまり、Rubyのファイルを開くまでパッケージがロードされません。

### 使わないパッケージすら読み込んでいた。

先ほど紹介した ***eval-after-load*** というものの説明です。

この関数は以下のように使います。

```el
(eval-after-load 'filename '(様々な処理))
```
これは最初の引数 ***'filename*** の名前のファイルが読み込まれた後に、その次の引数 ***'(様々な処理)*** の処理がロードされるという関数です。

この関数は、あるファイルが読みまれるまで読み込む必要のないパッケージロードしないようにしたり、関数を実行しないようにしたりするために使えます。

以下はその例です。

```el
(eval-after-load 'enh-ruby-mode '(require 'rubocop))
```

これは、 ***enh-ruby-mode*** が実行されるまで rubocopパッケージをロードしないことを意味しています。
つまり、rubyファイルを開いて初めてrubocopパッケージが読み込まれます。

二つ目の引数である”後に実行したい処理”を複数行書く場合は、 ***progn*** に包んで書いていたようです。
しかし、今は以下の様な書き方があり、簡単に複数行に渡る処理が書けます。


```el
(with-eval-after-load 'filename
  (様々な処理1)
  (様々な処理2)
  ...
  (様々な処理n))
```

ということだそうです。

### 最後に
間違ってる所があったら指摘お願いします……。
今更：1 時間以内に解けなければプログラマ失格問題 5 をテンプレートメタプログラミングで解いてみた

[JavaScript バージョン](http://qiita.com/t-suwa/items/ec7ad2c72e0b97104b00)ができたので、昔取った杵柄よろしく、C++ でも書いてみた。多分、コンパイル時に全て計算できているはず。

```cpp
#include <iostream>
#include <tuple>

void dump_inner(int term) {
  switch (term) {
  case '+':
  case '-':
    std::cout << " " << static_cast<char>(term) << " ";
    break;

  case '#':
    break;

  default:
    std::cout << term;
    break;
  }
}

template <typename Tuple, int N>
struct tuple_dumper {
  static void dump(const Tuple& exp) {
    tuple_dumper<Tuple, N-1>::dump(exp);
    dump_inner(std::get<N-1>(exp));
  }
};

template <typename Tuple>
struct tuple_dumper<Tuple, 1> {
  static void dump(const Tuple& exp) {
    dump_inner(std::get<0>(exp));
  }
};

template <typename Tuple, int N>
struct calc_inner {
  static std::tuple<int, int> calc(const Tuple& exp) {
    std::tuple<int, int> ret = calc_inner<Tuple, N-2>::calc(exp);

    auto tmp = std::get<0>(ret);
    auto sum = std::get<1>(ret);
    auto op = std::get<N-2>(exp);
    auto val = std::get<N-1>(exp);

    if (op == '+') return std::make_tuple(+val, sum + tmp);
    if (op == '-') return std::make_tuple(-val, sum + tmp);

    auto sign = (tmp > 0) ? 1 : -1;

    return std::make_tuple(tmp * 10 + sign * val, sum);
  }
};

template <typename Tuple>
struct calc_inner<Tuple, 1> {
  static std::tuple<int, int> calc(const Tuple& exp) {
    auto sum = std::get<0>(exp);

    return std::make_tuple(sum, 0);
  };
};

template <typename Tuple>
int calc(const Tuple& exp) {
  std::tuple<int, int> ret = calc_inner<Tuple, std::tuple_size<Tuple>::value>::calc(exp);

  return std::get<0>(ret) + std::get<1>(ret);
}

template <typename Tuple,
          typename T>
void solve(const Tuple& result, const T& head) {
  auto exp = std::tuple_cat(result, std::make_tuple(head));

  if (calc(exp) == 100) {
    tuple_dumper<decltype(exp), std::tuple_size<decltype(exp)>::value>::dump(exp);
    std::cout << std::endl;
  }
}

template <typename Tuple,
          typename T,
          typename ... Types>
void solve(const Tuple& result, const T& head, Types ... rest) {
  for (auto op: { '+', '-', '#' }) {
    solve(std::tuple_cat(result, std::make_tuple(head, op)), rest ...);
  }
}

int main() {
  solve(std::make_tuple(), 1, 2, 3, 4, 5, 6, 7, 8, 9);
}
```

書いてはみたものの、まあ、なんというか、なんの役にも立たないという気がする。再利用性もないしなぁ。

普通の再帰なら引数でなんとかできるところを、テンプレートメタプログラミングの再帰は戻り値で工夫しないといけないところがあり、ちょっと苦労した。

でも、Tuple の柔軟さはやはり素晴らしい。今のところ仕事で使う場面はないけど、いつか使える職場が見つかるといいなぁ。
「listen EACCES 0.0.0.0:443」というエラーが出るとき

`node app.js`
と、nodeサーバーを立ち上げようとすると、
`listen EACCES 0.0.0.0:xxx`
というエラーが出るときがあります。

サーバー立ち上げ時に小さいポート番号を指定すると、このエラーが発生します。
一般的には、管理者権限を持っていない場合では、1024番以下のポート番号にてサーバーをlistenすることはできないとのことですので、

`sudo node app.js`

と、管理者権限で実行するようにしましょう。
RASPBIAN JESSIEで/etc/rc.localを動作させる方法

久しぶりにRaspberry Piを使い始めました。
自分自身(Raspberry Pi)のIPアドレスをTwitterに通知させる仕組みを入れようとしたところ、/etc/rc.localに通知の命令をちゃんと書いていても通知されませんでした。が、とってもあっけない方法で解決できたのでここにメモしておきます。

piでログインしている状況であるとして、
```sudo raspi-config```
した上で
"Wait for Network at Boot" -> " Slow Wait for network connection before completing boot"
して
 ```sudo reboot```
で解決でした。


実はここに載っていました。
https://www.raspberrypi.org/forums/viewtopic.php?f=66&t=122207

この方法を見付けるまで、私は他のブログ記事等に振り回されてしまったので、私と同じようなことに巻き込まれることなく解決できることを祈ってます!
いろいろな駆動開発

いろいろなxx駆動開発があるので、ちょっとメモしておこうかと。
どれもざくっとした内容でしか書いていませんけど。。。

# テスト駆動開発 (Test Driven Developmen; TDD)

テストファーストに基づく設計手法で、軽快なフィードバック、きれいで動くコードを作ろうという開発プロセスです。ユニットテストを使ったテスト技法といった程度に見られていますけど、本当はシステムテストも含んだ開発全般を含んでいます。

# ビヘイビア駆動開発 (Behavior Driven Development; BDD)

TDDがテストという言葉が先行してしまったので、改めて提唱されたのが振舞駆動開発。システムに期待されている「振る舞い」や「制約条件」を上位レベルからテストしようという開発手法です。JBehaveやxSpecといった自然言語で実装できるフレームワークが登場しています。

# 品質特性駆動型設計 (Attribute Driven Design; ADD)
品質特性を基にモジュール分割を再帰的に行う開発プロセスです。品質要求もシナリオとして記述し、機能要求や制約と一緒にアーキテクチャーに落とし込んでいきます。アーキテクチャトレードオフ分析方法(Architecture Trade-off Analysis Method; ATAM) というに品質要求に関する判断/選択/決定の結果を評価する手法と一緒に用いられるようです。

# ユーザ機能駆動開発 (Feature-Driven Development; FDD)

ユーザーには価値を提供しなければなりません。概念モデルからユーザーに提供する価値を抽出し、インクリメンタルな開発を行う手法。

# ドメイン駆動設計 (Domain-driven design; DDD)

ドメインとはシステムが対象とする業務知識や適応範囲です。ユーザー視点の言葉で分析までしていても、システム都合で設計の構造を決めてしまいがちです。分析と設計の間に致命的な亀裂があるようでは開発はままになりません。レイヤーとコンテキスト定義によりモデルと設計に一貫性をもたらします。

# モデル駆動開発 (Model Driven Development; MDD)

設計とアーキテクチャがそれぞれ独立して変更するための開発手法。ドメイン固有言語(domain-specific languag; DSL)を使ってシステムに依存しない設計を行い、プラットフォームに特化したモデルに変換する。

# ユースケース駆動開発 (use case driven development; UCDD)

システムに関わるアクターを識別し、アクターの振舞をユースケースとして定義します。ユースケースを実現するためにロバストネス分析を行い、システム設計に落とし込んでいきます。

# 証明駆動開発 (Proof Driven Development; PDD)

証明によってプログラムが期待通りの性質を有しているかを確かめながら開発していきます。数学的な観点ですね。Coq/Gallinaといった定理証明支援系言語を使ってテストを行います。


PDDは、ほにゃらら駆動開発を調べていたら出てきました。
全然知らないですね。
Ubuntu:ACPIエラー

# 発生事象
インストールしたばかりのUbuntuで、SSDの使用量が50GB程度から突如100GB以上になり、その後も増加し続けた。
`df`コマンドを使用して容量を圧迫しているファイルを調査すると、`/var/log/syslog`と`/var/log/kern.log`が50GB近い容量を専有していることがわかった。ファイルの中身を確認すると、以下のエラーが繰り返し表示されていた。

```
May  8 21:31:49 XXX kernel: [  753.644060] ACPI Exception: AE_NOT_FOUND, while evaluating GPE method [_L6F] (20150930/evgpe-592)
May  8 21:31:49 XXX kernel: [  753.667910] ACPI Error: [PGRT] Namespace lookup failure, AE_NOT_FOUND (20150930/psargs-359)
May  8 21:31:49 XXX kernel: [  753.667929] ACPI Error: Method parse/execution failed [\_GPE._L6F] (Node ffff8808558df320), AE_NOT_FOUND (20150930/psparse-542)
```

# 原因
詳しい原因はわからなかったが、どうもAsRock マザーボードの Z170シリーズのBIOSバグとの説が有力らしい。（未確定情報）

# 対策
Ubuntuの起動時に`GPEL6`の割り込みをdisableに設定するようにする。
まず、以下のコマンドで起動シェルスを開く。

```shell-session
sudo vim /etc/rc.local
```
ファイルに`echo ....`のコマンドを追記する。

```shell-session
echo "disable" > /sys/firmware/acpi/interrupts/gpe6F
exit 0
```
最後にPCを再起動するとlogの増殖が止まっていることが確認できる。

要するに、ファームウェアの割り込み設定を無理やり変更して、ログを吐かないようにする荒技。

他に影響ないか心配だが。。。
これしか解がない。

# 参考
http://jhshi.me/2015/11/14/acpi-error-method-parseexecution-failed-_gpe_l6f/index.html
http://blue-red.ddo.jp/~ao/wiki/wiki.cgi?page=Linux+%A4%CE%A5%AB%A1%BC%A5%CD%A5%EB%B5%AF%C6%B0%A5%AA%A5%D6%A5%B7%A5%E7%A5%F3
https://wiki.ubuntu.com/DebuggingACPI
VCCWでVagrantを立ち上げた時に最初からWordPressテスト記事データが入った状態であってほしいなら

※このページは、VCCWの設定が済んだ後の話です。

VCCWは、インストールしたところに「site.yml」というファイルをコピーしてきて、
それを書き換えることで、vagrant立ち上げる前からWordPressの設定することができる。

▼以下「Customizing」欄 参照
http://vccw.cc#h2-4

イカが標準。

```site.yml
#
# Theme unit testing
#
theme_unit_test: false
theme_unit_test_uri: https://wpcom-themes.svn.automattic.com/demo/theme-unit-test-data.xml
# theme_unit_test_uri: https://raw.githubusercontent.com/jawordpressorg/theme-test-data-ja/master/wordpress-theme-test-date-ja.xml
```

上記の falseをtrueにして

```書き換え後のsite.yml
#
# Theme unit testing
#
theme_unit_test: true
theme_unit_test_uri: https://wpcom-themes.svn.automattic.com/demo/theme-unit-test-data.xml
# theme_unit_test_uri: https://raw.githubusercontent.com/jawordpressorg/theme-test-data-ja/master/wordpress-theme-test-date-ja.xml
```

として、「vagrant up」のコマンド叩けば、
テストデータが入った状態でWordPressの開発環境ができる。

ちなみに、イカのようにすると、日本語のテストデータが入ったWordPressにすることが可能。

```さらに書き換え後のsite.yml
#
# Theme unit testing
#
theme_unit_test: true
# theme_unit_test_uri: https://wpcom-themes.svn.automattic.com/demo/theme-unit-test-data.xml
theme_unit_test_uri: https://raw.githubusercontent.com/jawordpressorg/theme-test-data-ja/master/wordpress-theme-test-date-ja.xml
```

ちなみに、「site.yml」では、
管理画面で設定するWordPressサイト名や、サイトの説明、ログインパスワードなども変更可能とのこと。
設定ファイルなどをホームディレクトリ以外に置きたい

素人の備忘録。

# 動機
Windowsのホームディレクトリに設定ファイルやログファイルを置くソフトウェアがある。
一方、管理者の都合なのか知らないが、ホームディレクトリがとんでもないところに設定されている職場が存在する。
別の場所を指定したい。ただしホームディレクトリは変えずに。
あくまで自分用のメモなので間違っているかもしれないし、役に立たないかもしれない。

# 解決策
## Emacs
`.emacs.d`ディレクトリを置く場所を変更する。
レジストリ`HKEY_CURRENT_USER\SOFTWARE\GNU\Emacs\HOME`でディレクトリを指定し、その下に`.emacs.d`を作成する。
[参考](http://tamatamablog.blog.so-net.ne.jp/2010-02-10)

## Python
### pip
`--log`オプションで出力されるログファイルのパスを指定する。
ディレクトリではなくログファイルのファイル名まで指定することに注意。

### IPython
環境変数`IPYTHONDIR`でディレクトリを指定する。

### Matplotlib
環境変数`MPLCONFIGDIR`でディレクトリを指定する。

## R
0. 環境変数`R_ENVIRON_USER`で`.Renviron`ファイルのパスを指定する。
0. `.Renviron`内で以下の変数を記述し、ディレクトリまたは`.Rprofile`ファイルのパスを指定する。
    * `R_USER=任意のディレクトリ`
    * `R_PROFILE_USER=R_USERのパス/.Rprofile`

## TeX
### TeX Live
デフォルトではホームディレクトリに`.texlive(年数)`なるディレクトリが作成されるので、これをまず任意のディレクトリへコピーする。
`%TEXMFROOT%/texmf.cnf`を開き、以下のようにディレクトリを指定

```texmf.cnf
TEXMFHOME = (任意のディレクトリ)/.texlive(年数)/texmf
TEXMFVAR = (任意のディレクトリ)/.texlive(年数)/texmf-var
TEXMFCONFIG = (任意のディレクトリ)/.texlive(年数)/texmf-config
```

### latexmk
`-r`オプションで`.latexmkrc`へのパスを指定する。

## Maxima
デフォルトではホームディレクトリに一時ファイルが作成される。
環境変数`maxima_tempdir`でディレクトリを指定する。
[参考](http://maxima.sourceforge.net/docs/manual/maxima_32.html#maxima_005ftempdir)

思いつき次第追記予定。
chef clientについてのメモ


chefの理解を深める為に調べたことをツラツラと書く。

### bootstrapの実行の流れ

knife bootstrapを実行時の処理の流れ

1. workstationから対象ノードにsshしbootstrapスクリプトを実行
	- https://github.com/chef/chef/blob/master/lib/chef/knife/bootstrap/templates/chef-full.erb
2. chef-clientのinstall scriptをchefのサーバから取得
3. chef-clientのinstall
4. chef-clientを実行しchef serverに登録
5. run-listがある場合はrun listを実行

https://docs.chef.io/chef_client.html#bootstrap-operations

### chef-validator

nodeをchef serverに登録時に使用する認証の仕組み。workstationに保存されている秘密鍵をbootstrap処理時にnodeに保存し、その秘密鍵をchef serverとの認証に使用する。登録後は不要となるので削除していい。

https://docs.chef.io/chef_client.html#chef-validator

chef serverへのnode登録に必要となる情報はvalidatorの名前と秘密鍵。

https://github.com/chef/chef/blob/master/lib/chef/api_client/registration.rb#L150-L156

chef 12以降であればvalidatorの名前はデフォルトはORGNAME-validator (ORGNAMEはorganization名によって変化)。

https://getchef.zendesk.com/hc/en-us/articles/203821644-What-do-all-these-public-and-private-keys-do-


validatorは複数登録可能で、knifeからもchef serverのWeb UI上からも追加可能。

https://docs.chef.io/server_manage_clients.html#chef-validator-keys
http://www.mattstratton.io/creating-multiple-validator-keys-in-chef/
http://stackoverflow.com/questions/24788920/chef-clients-and-validators


### chef-clientの実行の流れ

https://docs.chef.io/chef_client.html#the-chef-client-title-run

### chefで利用される鍵

chef-client, knife, chef-validatorでそれぞれchef-serverへのアクセスに専用の秘密鍵を利用する。

https://docs.chef.io/chef_private_keys.html#how-keys-are-used

Nodeにはchef-clientのための秘密鍵及びchef-validatorの秘密鍵が保存される。chef-clientの秘密鍵はbootstrap処理時にchef serverにより生成されたものを利用する。chef-validatorの秘密鍵はknifeを実行したworkstation上のものが保存される。

Workstation上にはknifeで利用する秘密鍵がchef-repo毎に保存されている。

https://docs.chef.io/chef_private_keys.html#where-are-keys-stored

https://github.com/chef/chef/blob/master/lib/chef/knife/bootstrap/templates/chef-full.erb#L191-L196

https://getchef.zendesk.com/hc/en-us/articles/203821644-What-do-all-these-public-and-private-keys-do-


### Chef server上での鍵管理操作

https://docs.chef.io/server_manage_clients.html

### 設定ファイル

#### knife.rb

項目|説明|例
---|---|---|
log_level| ログレベル |:info|
log_location| ログファイルの場所 |STDOUT <br> /var/path/to/log|
node_name|Chef serverの認証に使う名前又はknifeを実行しているホスト名|"nyamage"|
client_key|chef serverへのアクセスの際の認証に使用する秘密鍵 |/Users/nyamage/.chef/nyamage.pem|
validation_client_name|chef server登録時に使うvalidation clientの名前|chef-validator|
validation_key|chef clientのchef serverへの登録に使用する秘密鍵|/etc/chef-server/chef-validator.pem|
chef_server_url| chef serverのURL |https://chef.example.com|
syntax_check_cache_path| cookbookに保存されているどのrubyファイルがシンタックスチェック済みかを保存する場所を指定 |/Users/nyamage/.chef/syntax_check_cache|

[Reference-Config Files-knife.rb](https://docs.chef.io/config_rb_knife.html)
Visual Studio Code の表示言語を英語に戻した

## はじめに

Visual Studio Code が 1.0 になって、表示言語が日本語にも対応しました。

参考 [Visual Studio Code 1.0 Release](https://code.visualstudio.com/blogs/2016/04/14/vscode-1.0)

メニューやメッセージが日本語になったのは嬉しいけれど、他の開発環境、例えば Intel XDK とかが英語表示のままなので、これだけ日本語表示になっても違和感ありです。
そこで従来の英語表示に戻したいと思います。

参考 [Visual Studio Code Display Language (Locale)](https://code.visualstudio.com/docs/customization/locales)

## コマンドラインスイッチを使う

Visual Studio Code をコマンドラインから起動するとき、```--locale``` スイッチを使用できます。

```
code . --locale=en
```

ただ自分はコマンドラインから起動していないのでこれは使えません。

## locale.json を使う

Visual Studio Code を起動してから、以下の手順で設定を変更します。

[F1] キーでコマンドパレットを表示する。
「Configure Language」とタイプしてコマンド実行する。
locale.json ファイルが作成されてエディタに表示される。

```js
{
	// VSCode の表示言語を定義します。
	"locale":"en-US"
}
```

上記の通り編集して保存する。
Visual Studio Code を再起動する。
BASIC

### Going back basic.
SD Timesの記事
http://sdtimes.com/sd-times-blog-going-back-basic/

その昔、ベージックという言語がありました
ビルゲイツが初めてパソコンに移植した、ベーシック

Basicというのは、基礎、基本、という意味で、
get back to the basic. 基本に戻ろうという、言葉遊び
### こちらのノア少年(7歳)、なんとベーシックを学んでます！
http://www.nicolasbize.com/blog/30-years-later-qbasic-is-still-the-best/

思えば、私が初めてN88-BASICでゲームを書いたのが、10歳でした
BASICマガジンという雑誌もありましたね^^

```
10 PRINT “OH NO, WHAT ARE YOU DOING?!!!”
20 GOTO 10
```
Basic言語のシンタックスハイライトがないorz

### このパパが子供にベージックを選んだ理由は、シンプルであること

- 手続型言語なので、クラス、メソッドなど、オブジェクト指向を学ばなくて良い
- npmとか、ライブラリをインストールする手間がない
- XcodeのストーリーボードのようなGUIツールを覚える必要がない
- @$*{{}}等の特殊記号を乱用していない

逆に機能が限定されていることで、小さな子供にも理解できる
また、ベーシック言語の命令は、PRINT, GOTO といった簡単な英語で記述できる

### コメントの反応は、

- Rubyや、Pythonの方が、もっとシンプルだよ!
- Minecraft Blocks などのブロック言語の方が、プログラミングのコンセプトを学ぶのに良いのでは？
- QBasicのブルー画面をまた見るとは思わなかったよ！

### ノアくんのハンドライティング
http://nicolasbize.com/blog/images/noah_2.jpg

とても微笑ましい^^ かわいい。
f5 is to start the game.
programmingのスペルが間違ってたり。。。

現在のプログラミングは、IDEの手助けがないと非常に難しい

こちら、ブラウザ上でベーシックプログラミングが体験できます
http://www.quitebasic.com/

```
GOTO 2370
```
そっか、行番号がいるんだったー 難しいよっ！
PhantomJsでAzure旧ポータルにログイン

# やりたいこと
旧Azureポータルのサイトで、定期的にクライドサービスの負荷状況を監視したいのです。
毎回手動でスクリーンショットを撮影しているのですが疲れました。

バッチコマンドをタスクスケジューラで動かして撮影を自動化したらいいでしょうか？

## ちょっとした疑問点
- わざわざバッチコマンドを定期的に動かしているのを、Azureのサービスを使って何かする方法はあるんでしょうか？あればそれを使いたいです😔
- 定期的にスクリーンショット撮影なんかしないで、過去の負荷状況をいつでも取り出せる方法はあるんでしょうか？あればそれをつかいたいです😔


# 便利そうなツール
## PhantomJS
ググったところ、PhantomJSというツールがあり、javascriptで書かれた操作をGUIなしで行えるようでした。
これを使うことにしました。

## 作ったもの
ログインから目的のクラウドサービスに遷移するまでをJavaScriptで操作するのは難しかったのですが・・。
→ [Javascript](https://github.com/ssashir06/AzurePortalScreenShot/blob/master/_LibAzure.js)

## 苦労した点
deferredみたいに、順番をまって処理をしたいのですが、うまくできなかったため、then()とかstart()の関数を用意しています。

# 最後に
さてQiitaに投稿するか・・。
え～！CasperJSって何それ便利そう！！
終わり。

# リンク
[githubに置いたスクリプト](https://github.com/ssashir06/AzurePortalScreenShot)
カメラを使って顔認識 with opencv3 + python2.7

#【環境】
・windows8.1
・surface pro2

#【準備】
・Anacondaのインストール(python2.7)
  https://www.continuum.io/downloads
　上記のサイトから自分の環境に合ったAnacondaをインストールします。

・OpenCVのインストール
　http://opencv.blog.jp/python/ver3_install
　上記サイトを参考にOpenCVをインストールします。
　なお、「cv2.pyd」ファイルは
　「C:\Users\nobu\Anaconda2\Lib\site-packages\Anaconda2\Lib\site-packages」
　に、コピーしてください（このパスは私の環境におけるものなので、皆さんの環境に合わせてください）。
　※以降、私の環境での説明になりますので、自分の環境に対応させてください。

・カスケードファイルのコピー
　OpenCVのインストールフォルダに「opencv\build\etc\haarcascades」があります。
　そのフォルダにある「haarcascade_frontalface_alt.xml」というファイルを
　「C:\Users\nobu\Documents\Python Scripts」にコピーしてください。
　
　ちなみに、おおざっぱに言うとカスケードファイルというのは物体を検出するための設定ファイルです。
　参考URL：http://www.pro-s.co.jp/engineerblog/opencv/post_6202.html

#【手順】
①Anacondaのインストール時に一緒にインストールされたSpyder(pythonのIDE)を開きます。
②「File」→「New file...」を選択して、新しいファイルを開きます。
②以下のコードをコピペします。

```py:camera_face_rec.py
# -*- coding: UTF-8 -*-
 
import cv2
import os

cascade_path = "haarcascade_frontalface_alt.xml"

#カスケード分類器の特徴量を取得する
cascade = cv2.CascadeClassifier(cascade_path) 
 
# カメラからキャプチャー
cap = cv2.VideoCapture(0)
 
color = (255, 255, 255) #白 
 
while(True):
 
    # 動画ストリームからフレームを取得
    ret, frame = cap.read()

    #物体認識（顔認識）の実行
    facerect = cascade.detectMultiScale(frame, scaleFactor=1.2, minNeighbors=2, minSize=(10, 10))
    
    for rect in facerect:
		#検出した顔を囲む矩形の作成
		cv2.rectangle(frame, tuple(rect[0:2]),tuple(rect[0:2] + rect[2:4]), color, thickness=2)
 
     # 表示
    cv2.imshow("Show FLAME Image", frame) 
 
    # qを押したら終了。
    k = cv2.waitKey(1)
    if k == ord('q'):
        break
 
cap.release()
cv2.destroyAllWindows()
```

③spyder右側にある「IPython console」タブを開いた状態で「F5」キーを押します。
　そうすると、デフォルトで設定されているカメラが起動して人物の顔を映すと
　次のリンク先の動画のようになります(動画の埋め込みの仕方が分からなかったので、リンク張りました)。
　「q」キーを押すとプログラムが終了します。

　　　<a href="https://t.co/gEZY3Jd4Co">pic.twitter.com/gEZY3Jd4Co</a>


#【感想】
・認識されない顔もあるため、もっと正確に認識できればいいなと思いました。
・機械学習と組み合わせれば何か面白いものが出来上がると思います。

#【参考サイト】
・Python3 OpenCV3で(MacBookAirのカメラで)フレーム差分
http://blog.umentu.work/%E3%80%90%E5%8B%95%E7%94%BB%E3%81%82%E3%82%8A%E3%80%91python3-opencv3%E3%81%A7macbookair%E3%81%AE%E3%82%AB%E3%83%A1%E3%83%A9%E3%81%A7%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E5%B7%AE%E5%88%86/

・Getting Started with Videos
http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_gui/py_video_display/py_video_display.html#display-video
LINE BOT作りに使えるスタンプ参照表

LINEのBOTを作っている時に、スタンプの参照表が必要になったので作りました。Google DocsのURL共有ですが、お使いください。※スタンプのID一覧自体はLINE developersからダウンロードできますが、画像がついていなかったので作りました。

https://docs.google.com/spreadsheets/d/1rm1G2S38yfdwG94FWYuOWe02CgbAR3gqlmGHYxMc63U/edit?usp=sharing

![スクショ 2016-05-08 20.24.19.png](https://qiita-image-store.s3.amazonaws.com/0/18165/5647c2ff-9f48-9a2c-717f-9daf475c4668.png)
Elm の諸概念を他の言語で表してみる

**この記事を書いた直後の 5/10 に Elm 0.17 がリリースされ `Signal` や `Effects` などはなくなってしまいました！**

ゴールデンウィークは Elm について調べ、ちょっとしたコードを書いてみました。独特の用語が多くて混乱したので、他の言語の似た概念に当てはめてみます。

これだけ読んでもわからないと思うので、詳しい内容は以下のドキュメントを参照してください。これらを読んでいて混乱してきたら見てもらうとちょうど良いと思います。

- [The Elm Architecture](https://github.com/evancz/elm-architecture-tutorial)
- [Elm Tutorial](http://www.elm-tutorial.org/)
- [Elm Docs](http://elm-lang.org/docs)

## Signal まわり

最近 Angular がらみで RxJS を使うようになったので、Rx 用語と対応させてみます。

- `Signal`: `Observable`。データがどんどんやってくる出口。
- `Address`: `Observer`。データをどんどん投げ込める入り口。
- `Mailbox`: `Subject`。上 2 つのセット。`Address` に投げ込んだものが `Signal` から出てきます。

`main` の型は `Signal Html` となっており、Elm アプリは変わりゆく `Html` をどんどん描画してゆくものだとわかります。

## Effects まわり

似た概念が多く、最初混乱しました。

- `Result x a`: Haskell の `Either`。失敗する可能性のある処理の「結果」（成功か失敗かはパターンマッチするとわかります）
- `Task x a`: JavaScript の `Promise`。失敗する可能性のある非同期処理。
- `Effects a`: 抽象化された `Task`。なにもしない、一つの `Task`、複数の `Task` を表せる。型を見るとわかる通り、成功しようがエラーだろうが結果の型は同じです。通常 `Task` をもろもろ実行してから、最終的に `Action` を返して `update` へ戻すという形で使われます。
- `port`: JavaScript 側との出入り口。型は `Signal a`。実装を指定すると Elm -> JavaScript、しないと  JavaScript -> Elm。

## 関数適用・合成関連

最初はギョッとしましたが、矢印の順番に関数が適用されていくので慣れてみるとわかりやすいですね。

- `<| : (a -> b) -> a -> b`: Haskell の `$`。
- `|> : a -> (a -> b) -> b`: `<|` の逆。オブジェクト志向っぽく書ける。Elixir や EcmaScript Stage 0 のパイプ演算子。
- `<< : (b -> c) -> (a -> b) -> a -> c`: Haskell の `.`。
- `>> : (a -> b) -> (b -> c) -> a -> c`: `>>` と逆の関数合成。

## 感想

- The Elm Architecture に従って子から親を参照しないようにすると、モジュールをまたぐ `Action` を出しにくいなーと思いました。`Action` はグローバルに定義しちゃってどこからでも呼べるようにするのがいいのかな？
- ボイラープレートを書かないで済ます方法を知りたいです。
- 文法は Haskell っぽいけど、正格評価だし、モナドを使ってどうこうもないし、型クラスもないしで Haskell でフロントエンドを書いて楽しめる、というわけではないなと思いました。
AndroidManifest.xmlにAPIキーを書いたコードをGitHubにコミットしないために


#はじめに
個人開発なんかでAPIのチュートリアルなんかにしたがってコードを書いていると、利用するためのAPIキーをAndroidManifest.xmlに書くことがあるのですが、そのコードをつい何も考えずGitHub上に上げてしまいがちです。

AWSですが、[こんな記事](http://qiita.com/mochizukikotaro/items/a0e98ff0063a77e7b694)も見かけたので、APIキーは安易にGitHub上にコミットしていいものではなさそうですね。
かと言って、そこだけ手書きで毎回書き換えるという運用もしたくはありません。

(なお現状は[GitHubで検索](https://github.com/search?utf8=%E2%9C%93&q=com.google.android.geo.API_KEY+values&type=Code&ref=searchresults)(GoogleMapsAPIキーの例)してみると、ベタ書きされていたり、良くてもstrings.xmlにベタ書きされたものが多くある模様)

そこで今回は、どうにかしてAPIキーをコミットせずコードに反映させるかを調べてみました。

## 開発環境
* OS X 10.9.5
* AndroidStudio 2.0

##やること
* ※APIキーだと反映されているかの確認が色々面倒…
* 同じくManifestに記載して確認が簡単なMainActivity.javaのlabelの文字列をコミットせずに反映させる。

##やったこと
ManifestManagerのmanifestPlaceHoldersを利用して、設定したい値を環境変数から取得します。

* ManifestManagerの利用
* build.gradleの値を環境変数から取得
* 環境変数の設定
* デバッグAPKをインストールして確認

###ManifestManagerの利用
manifestPlaceHoldersでは${}で囲って変数を埋め込みます。

```xml:AndroidManifest.xml
        <activity
            android:name=".MainActivity"
            android:label="${label}"
            android:theme="@style/AppTheme.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>

                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
```

###build.gradleの値を環境変数から取得
manifestPlaceholdersに先ほどManifest側で埋め込んだ変数を定義していく。
今回はLABELという環境変数を参照させる。

※ベタ書きでも動くがそれだと本末転倒なので更に環境変数を参照するようにする。


```gradle:app/build.gradle
    buildTypes {
        debug {
            minifyEnabled false
            signingConfig signingConfigs.debug
            //manifestPlaceholders = [label: "testlabel"] #ベタ書きの例、これでも動くが...
            manifestPlaceholders = [label: System.getenv("LABEL")]
        }
    }
```

###環境変数の設定
ターミナル上でlaunchctlを使って設定してく。

```bash
#LABELという環境変数に"testlabel"を設定する
$ launchctl setenv LABEL testlabel

#設定されていることを確認する
$ launchctl getenv LABEL
testlabel
```

###デバッグAPKをインストールして確認
設定したら反映のためにAndroidStudioを再起動して、作成したデバッグapkを入れてみる。

無事に「testlabel」がlabelに反映されました。
![image](https://qiita-image-store.s3.amazonaws.com/0/68671/c8171d49-4384-3201-d4ac-e5486a2d0a26.png)



##おわりに
複数人や複数デバイスで開発する際などは環境変数を揃えないといけないのが面倒な気がします。
これが正しい方法かどうか分からないので、もっといい方法をご存知の方はぜひ教えて下さい。

##参考
初心者がAWSでミスって不正利用されて$6,000請求、泣きそうになったお話。 - Qiita : http://qiita.com/mochizukikotaro/items/a0e98ff0063a77e7b694

Manifest Merger - Android Studio Project Site : http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger#TOC-Placeholder-support

Android Studio(Gradle)でapkファイルを作成する時にstorePassword/keyAlias/keyPasswordの指定方法をいくつか検証してみた。 - Qiita : http://qiita.com/shiraji/items/8f55b5295094487ce71a

AndroidStudioに環境変数を渡す - Qiita : http://qiita.com/tmiyamon/items/ed660dff7846f5ec95d3
メモ Xcode7.3でopenframeworks0.9.3がビルドできない

#Xcode7.3でopenframeworks0.9.3がビルドできない

##エラー
10.10のsdkがないみたいなエラー


##対応
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Info.plist

内の

MinimumSDKVersionを10.11から10.10にする（必要なsdkに合わせる）。

あとは
[Xcode７にアップデートしたら、openFrameworks関連のプロジェクトがビルドできない問題](http://qiita.com/totepo18/items/d92de308d027ef86c9aa)を参照。


[参考にしたページ](https://forums.developer.apple.com/thread/43381)
[MySQL]サブクエリの結果を別テーブルにinsertする時に、ハマったこと

サブクエリで取得した結果を、別のテーブルに挿入するときにハマったこと。

Qiitaに投稿するには稚拙すぎるかもと思いましたが、自分のためにも投稿して記録しておきます・・・。

# ハマったこと

weathers テーブルの weather カラムに、 days テーブルから取得した weather カラムを挿入する。

```sql:正しいクエリ文
insert into weathers (weather) select distinct weather from days;
```

---

```sql:間違ったクエリ文
insert into weathers (weather) values (select distinct weather from days);
```
```:エラーメッセージ
You have an error in your SQL syntax;
check the manual that 
corresponds to your MySQL server version 
for the right syntax to use near 
'select distinct weather from days)' at line 1
```
# まとめ

サブクエリで取得した結果をつっこむSQL文には、__Values__はいらない。