OmniAICreator/Qiita-1.07M huggingface dataset:
ES2015 generatorを使ってコウコウセイをコーコーセーにする

# 問題設定
㌍ や ㍍ などの組み文字を使って、特定の文字列が実現可能かどうか調べる
[組み文字変換さん](http://www.koizuka.jp/kumimoji) が楽しい。

そんな上記サービスでは、

```
クリリンノコトカア -> クリリンノコトカー
```

というゆらぎ?をサポートしている。

しかしこのゆらぎ、変換できる場所がNあると、
 2^Nものパターンを考えなくてはならない。

```
例：コウコウセイ
-> コウコウセイ
-> コウコウセー
-> コーコウセー
-> コーコーセー
-> コウコーセー
-> コーコウセイ
-> コーコーセイ
-> コウコーセイ
```

こういう、再帰っぽく分岐していく問題に対して、generatorが有効だ。
generatorは無数のパターンを必要に応じて生成するので効率がよい。

# コウコウセイ のサンプル

まず、簡単のため、下記のように変換ルールを定義しておく。

```js
const rules = [
  // [from, to]
    ['コウ', 'コー'],
    ['セイ', 'セー'],
]
```

## generator 使わないと...

generatorを使わないでコウコウセイ問題を解こうとすると、こうなった。

```js
function convert(str, rules, pos = 0) {

    let results = []
    results.push(str)

    for (let i = 0; i < rules.length; i++) {

        const [from, to] = rules[i]

        pos = str.indexOf(from, pos)

        while (pos !== -1) {
            let converted = str.slice(0, pos) + to + str.slice(pos + from.length)
            results = results.concat(convert(converted, rules.slice(i), pos + 1))
            pos = str.indexOf(from, pos + 1)
        }
    }
    return results
}
console.log(convert('コウコウセイ', rules))
```

ロジックは多少難解だ。
convertメソッドは、変換したい文字列のほか、

- どこまでのルールを適用したか
- 文字列のどの部分にルールを適用したか

という、ループの内部状態を再帰で複製していくというものだ。


## generator 使う

ではgeneratorを使って解いてみよう。

```js
function* convert(str, rules, pos = 0) {

    yield str

    for (let i = 0; i < rules.length; i++) {

        const [from, to] = rules[i]

        pos = str.indexOf(from, pos)

        while (pos !== -1) {
            let converted = str.slice(0, pos) + to + str.slice(pos + from.length)
            yield* convert(converted, rules.slice(i), pos + 1)
            pos = str.indexOf(from, pos + 1)
        }
    }
}
```
なんと実は、**ほとんど変わらない**のだ！

結果に格納する部分が
`results.push(str)` から `yield str` になり、
結果をつなぎ合わせる部分が
`results.concat()` から `yield*` になり、
戻り値のreturnをやめただけだ。

## 利用の仕方にメリット
だから、まあgeneratorは、定義で楽できるわけではない感じだ。

しかし、利用の柔軟さが売りだ。
ではさきほどのgeneratorを利用してみよう。

```js
const gen = convert('コウコウセイ', rules)

while (true) {
    const {done, value} = gen.next()
    if (done) break
    console.log(value)
}
```

`gen.next().value`で、目的の文字列を順に取得可能だ。
全計算結果を待たずに利用できる。無駄がない！

と思うけど`while(true)`なんて嫌だ、lintもflowも怒ってくる、という人のために、
衝撃的に便利なアクセス方法を。

```js
const iter = convert('コウコウセイ', rules)

for (const str of iter) {
    console.log(value)
}
```

`for of` でいけた！
こっちのほうが断然オススメですね！


# 動的計画法に便利
generatorは、このように状態を複製しながら処理を進めていく際に、
途中経過を返すことができる。
そのため、「みつかったら終了」系の探索系の処理に向いていそうだ。
Zybo > AXI4 IP peripheral > VHDLで作成 > Tools > Project Settings > Target LanguageをVHDLに変更

http://qiita.com/7of9/items/34d6282426ee777ae639
にてAXI4 IP peripheral を作成したが、作成したIPのhdlフォルダを見ると拡張子が`.v`だった。VerilogHDLになっている。

VHDLの学習を始めたのでVHDLで作ろうとした。

AXI4 IP peripheral を作成する前にVivadoにて Tools > Project Settingsを選択し、Generalの項目でTarget language:をVHDLに切り替えた。

その後でAXI4 IP peripheral を作成すると拡張子が.vhdになった。

VHDLとVerilogHDLはどちらがいいかわからないが、しばらくはVHDLで行こうと思う。
CSSパラパラアニメを複数background-imageで作る

# はじめに

CSSでパラパラアニメを作ろうと思い立ちまして、そこでググって作り方調べたりしますと、だいたいCSSスプライトを使った方法に行き当たります。こういうのですね。

[CSSスプライトとstepsを使ってアニメーション画像を作ろう](http://www.webcreatorbox.com/tech/css-sprite-steps/)

でも、めんどくさいんですよ。CSSスプライト。ひとコマ修正が入っても全体つなぎ直しですよ。つなぐときに1ピクセルずれてたらまたやりなおしですよ。うがー！
ふつーのセル画のように、ひとコマ=1ファイルなら、作成も修正もやりやすいじゃないですか。デザイナーさんから素材もらってすぐ実装できるじゃないですか。フォトショ開いてちまちまずらしたり、あーだこーだパラメータいじってgrunt使ってつないだりする必要ないじゃないですか。
というわけで作ってみます。

# 実装

素材を用意します。
[ぴぽや倉庫](http://piposozai.wiki.fc2.com/)さんからお借りいたしました。ありがとうございます。

![スクリーンショット 2016-06-04 15.06.17.png](https://qiita-image-store.s3.amazonaws.com/0/21634/74f74875-f46c-fb6f-ca4a-83b73eb5785a.png)

(配布されている素材は一枚画像なので、同サイズで切り分けています。なんか本末転倒ですが)

箱としてはこんな感じ。

```html
<div class="frame">
  <div id="cell" class="cell"></div>
</div>
```

この `<div id="cell"></div>` 内に画像素材を縦に並べる要領で、複数配置します。`animation-timing-function` に `steps()` を指定して、CSSアニメーションで縦にスライドさせていけば、アニメーションになるわけですね。その辺の理屈は上のリンク先と一緒です。

そしてできたCSSは以下のとおり。

```css
.frame {
  width: 240px;
  height: 240px;
  overflow: hidden;
  cursor: pointer;
}
.cell {
  width: 100%;
  height: 2000%;
  background-color: transparent;
  background-repeat: no-repeat;
  background-image: url(01.png),url(02.png),url(03.png),url(04.png),url(05.png),url(06.png),url(07.png),url(08.png),url(09.png),url(10.png),url(11.png),url(12.png),url(13.png),url(14.png),url(15.png),url(16.png),url(17.png),url(18.png),url(19.png),url(20.png);
  background-position: 0 0, 0 240px, 0 480px, 0 720px, 0 960px, 0 1200px, 0 1440px, 0 1680px, 0 1920px, 0 2160px, 0 2400px, 0 2640px, 0 2880px, 0 3120px, 0 3360px, 0 3600px, 0 3840px, 0 4080px, 0 4320px, 0 4560px;
  animation-name: parapara;
  animation-duration: 1s;
  animation-iteration-count: 1;
  animation-timing-function: steps(20);
}
@keyframes parapara {
  0% {
    transform: translateY(0);
  }
  100% {
    transform: translateY(-100%);
  }
}
```

![159wup.gif](https://qiita-image-store.s3.amazonaws.com/0/21634/7dc7b633-555d-ba1d-2498-6fbd3b42415c.gif)

動きましたよー！

http://codepen.io/kobaatsu/pen/MyNpdG

# stylusで作成

上のCSSをベタで書くのは面倒すぎますので、実際はstylusを使って書いています。
セルのサイズと画像ファイルを配列で指定すれば `background-image` `background-position`　が自動的に埋まるという寸法です。

```stylus
w = 240
h = 240
// 画像ファイルを配列（スペース区切り）で指定
cells = '01.png' '02.png' ...

bgis = ()
for i in cells
  push(bgis, url(i))

bgps = ()
for p in 0...length(cells)
  push(bgps, unquote('0 '+(p * h)+'px'))

.wrap
  margin 20px

.frame
  width w px
  height h px
  overflow hidden
  cursor pointer

.cell
  width 100%
  height (100 * length(cells))%
  background-color transparent
  background-repeat no-repeat
  background-image unquote(join(',', bgis))
  background-position unquote(join(',', bgps))
  animation-name parapara
  animation-duration 1s
  animation-iteration-count 1
  animation-timing-function steps(length(cells))
   
@keyframes parapara
  0%
    transform translateY(0)
  100%
    transform translateY(-100%)
```

イテレーション万歳。
XcodeでERROR ITMS-90635: "Invalid Mach-O Format"

XcodeのOrganizerで「Upload to App Store」を選択してアプリをアップロードしようとしたら、次のようなエラーが出て失敗してしまいました。

> ERROR ITMS-90635: "Invalid Mach-O Format. The Mach-O in bundle "MyApp.app/Frameworks/SDWebImage.framework" isn’t consistent with the Mach-O in the main bundle. The main bundle Mach-O contains armv7(machine code) and arm64(machine code), while the nested bundle Mach-O contains armv7(bitcode) and arm64(bitcode). Verify that all of the targets for a platform have a consistent value for the ENABLE_BITCODE build setting."

調べた結果、Bitcodeを無効にしたアプリでは、Cocoapodsの各Frameworkも同じくBitcodeを無効にする必要があるとのことです。

Podfileに次のコードを埋め込んでおくと、`pod install`時にBitcodeを無効にしてくれます。

```rb:
post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['ENABLE_BITCODE'] = 'NO'
    end
  end
end
```
引用: http://stackoverflow.com/questions/37613550/xcode-error-itms-90635-invalid-mach-o-in-bundle-submitting-to-app-store

---
### 2016/06/19 追記

iTunes Connectへのアップロード時に「Include Bitcode」のチェックを外せばよいそうです。
http://stackoverflow.com/a/37624641/3958295

@tomoyuki28jp さんに教えていただきました。ありがとうございます。
Zybo / Zynq > Pmod > コネクタ > 4IO Pins / 8IO Pins / 電源電圧(5.0V / 3.3V)

```txt:基板
Degilent ZYBO
```

ZYBOと外のIC実装基板とやり取りする時にPmodというコネクタ経由になるのだろう。

コネクタの情報を探して以下を見つけた。
http://www.embedded.com/print/4376526

以下のようなIO使用例がある

- 4IO Pins
- 8IO Pins

電源は3.3Vと出ているが 
http://e-trees.jp/index.php/products/exstick/pmod%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/
によると以下の記載もあるので、要確認。

> 電源電圧は、5.0Vと3.3Vの2通りがあります。
nimデータベース操作(PostgreSQL)

# 概要
nimのデータベース操作をコツコツと。
sqliteとほぼ変わりません。
## 以下メモ
### # 基本操作
```nim
import db_postgres
block:
  let db = open("127.0.0.1:5432","nim","nim","sample")
  let ddl = @[
    sql"""drop table work""",
    sql"""create table work (id integer,name varchar(50) not null)"""
  ]
  defer:
    echo "db closed"
    db.close()
  # DDLを実行
  for cmd in ddl :
    discard db.tryExec(cmd)
  # レコードを挿入
  db.exec(sql"BEGIN")
  db.exec(sql"insert into work values(?,?)",1,"Mr.スポック" )
  db.exec(sql"insert into work values(?,?)",["2","Mr.ビーン"] )
  db.exec(sql"insert into work values(?,?)",@["3","Mr.サタン"] )
  db.exec(sql"COMMIT")
  # セレクトする
  for x in db.fastRows(sql"select id,name from work order by id desc") :
    echo x
```
```
(stdout)
@[3, Mr.サタン]
@[2, Mr.ビーン]
@[1, Mr.スポック]
db closed
```
### # 基本操作(serialを追加)
```nim
import db_postgres
block:
  let db = open("127.0.0.1:5432","nim","nim","sample")
  let ddl = @[
    sql"""drop table work""",
    sql"""create table work (id serial,name varchar(50) not null,primary key(id))"""
  ]
  defer:
    echo "db closed"
    db.close()
  # DDLを実行
  for cmd in ddl :
    discard db.tryExec(cmd)
  # レコードを挿入
  db.exec(sql"BEGIN")
  # 追加したれコードに自動採番された値を取り出す
  echo "追加されたID=",db.tryInsertID(sql"insert into work(name) values(?)","Mr.スポック" )
  echo "追加されたID=",db.tryInsertID(sql"insert into work(name) values(?)","Mr.ビーン" )
  echo "追加されたID=",db.tryInsertID(sql"insert into work(name) values(?)","Mr.サタン" )
  echo "更新された行=",db.execAffectedRows(sql"update work set name=? where id=?","Mr.ホームズ",3)
  db.exec(sql"COMMIT")
  # セレクトする
  for x in db.fastRows(sql"select id,name from work order by id") :
    echo x
```
```
(stdout)
追加されたID=1
追加されたID=2
追加されたID=3
更新された行=1
@[1, Mr.スポック]
@[2, Mr.ビーン]
@[3, Mr.ホームズ]
db closed
```
### # イテレータ+プリペアドステートメント
```nim
import db_postgres
block:
  let db = open("127.0.0.1:5432","nim","nim","sample")
  defer:
    echo "db closed"
    db.close()
  # プリペアドステートメント
  let preparedSql = db.prepare("select1",sql"select id,name from work order by id",0)
  # 爆速セレクトただしぶっ壊れやすいので、すべて取り出すときに利用してね的な事がドキュメントに書いてありました
  for x in db.fastRows(preparedSql) :
    echo "fastRows=>",x[0],"/",x[1]
  # 動きはfastRowsと一緒だけど遅いです。でも安全。
  for x in db.rows(preparedSql) :
    echo "rows=>",x[0],"/",x[1]
  # instantRowsだが、インデクスで取れない・・・バグ？
  for x in db.instantRows(preparedSql) :
    echo "instantRows=>",x.len
  # こちらはイテレータではなく、すべての行を取り出す
  for x in db.getAllRows(preparedSql) :
    echo "getAllRows=>",x[0],"/",x[1]
```
```
(stdout)
fastRows=>1/Mr.スポック
fastRows=>2/Mr.ビーン
fastRows=>3/Mr.ホームズ
rows=>1/Mr.スポック
rows=>2/Mr.ビーン
rows=>3/Mr.ホームズ
instantRows=>2
instantRows=>2
instantRows=>2
getAllRows=>1/Mr.スポック
getAllRows=>2/Mr.ビーン
getAllRows=>3/Mr.ホームズ
db closed
```
Zybo > AXI4 peripheral作成からXSDKでのテストまで

```txt:動作確認
Vivado 2015.4 on Windows 8.1 pro
```

関連 https://forums.xilinx.com/t5/Xcell-Daily-Blog/The-Zynq-PS-PL-Part-Three-Adam-Taylor-s-MicroZed-Chronicles-Part/ba-p/425154

## Vivadoでの作業 > IPの作成

http://qiita.com/7of9/items/9e46cb1f83a9c6935780
の流れに従いIPを作ってみた。

- Display name: myip_v1.0
- IP location: 160604ip_repo

## XSDKでの作業

### Repository追加

関連 http://qiita.com/7of9/items/710614ec6d0d15ab11ed

RepositoriesにVivadoで作成したIPを追加 (160604ip_repo)。

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/d80b7a5c-d863-6600-9450-0b5716b26767.png)

### xparameter.h

XSDKにて作成したBSPのxparameters.hにてMYIPで検索すると以下が見つかった。

```
/******************************************************************/

/* Definitions for driver MYIP */
#define XPAR_MYIP_NUM_INSTANCES 1

/* Definitions for peripheral MYIP_0 */
#define XPAR_MYIP_0_DEVICE_ID 0
#define XPAR_MYIP_0_S00_AXI_BASEADDR 0xFFFFFFFF
#define XPAR_MYIP_0_S00_AXI_HIGHADDR 0x00000000
```

### myip_selftest.c

BSP > ps7_cortexa9_0 > libsrc > myip_v1_0 > srcに myip_selftest.cというファイルがある。
中身を見るとテスト用の関数が用意されている。

```myip_selftest.c
XStatus MYIP_Reg_SelfTest(void * baseaddr_p)
{
	u32 baseaddr;
	int write_loop_index;
	int read_loop_index;
	int Index;

	baseaddr = (u32) baseaddr_p;

	xil_printf("******************************\n\r");
	xil_printf("* User Peripheral Self Test\n\r");
	xil_printf("******************************\n\n\r");

	/*
	 * Write to user logic slave module register(s) and read back
	 */
	xil_printf("User logic slave module test...\n\r");

	for (write_loop_index = 0 ; write_loop_index < 4; write_loop_index++)
	  MYIP_mWriteReg (baseaddr, write_loop_index*4, (write_loop_index+1)*READ_WRITE_MUL_FACTOR);
	for (read_loop_index = 0 ; read_loop_index < 4; read_loop_index++)
	  if ( MYIP_mReadReg (baseaddr, read_loop_index*4) != (read_loop_index+1)*READ_WRITE_MUL_FACTOR){
	    xil_printf ("Error reading register value at address %x\n", (int)baseaddr + read_loop_index*4);
	    return XST_FAILURE;
	  }

	xil_printf("   - slave register write/read passed\n\n\r");

	return XST_SUCCESS;
}
```

### application

New > Application Projectにて以下の実装をした。

- xparameters.hとmyip.hのincludeを追加。
- MYIP_Reg_SelfTest(XPAR_MYIP_0_S00_AXI_BASEADDR);を使用
  - baseaddr_pはxparameters.hに定義されているXPAR_MYIP_0_S00_AXI_BASEADDRを指定 (正解かは不明)

```helloworld.c
#include <stdio.h>
#include "platform.h"
#include <xparameters.h>
#include <myip.h>

void print(char *str);

int main()
{
    init_platform();

    print("Hello World\n\r");

    XStatus sts;

    sts = MYIP_Reg_SelfTest(XPAR_MYIP_0_S00_AXI_BASEADDR);
    if (sts == XST_SUCCESS) {
    	print("MYIP selftest OK\r\n");
    } else {
    	print("MYIP selftest NG\r\n");
    }

    cleanup_platform();
    return 0;
}
```

実行すると一応動いているが、詳細を理解できていない。

```
Hello World
******************************
* User Peripheral Self Test
******************************

User logic slave module test...
   - slave register write/read passed

MYIP selftest OK
```
めざせpythonライブラリマスター （19）riemann

#【ライブラリ説明】
　詳しいことは分からないが、リーマンのゼータ関数に関係

#【プログラム】
```py:riemann.py
# -*- coding: utf-8 -*-

from riemann import function, graph

print function.riemann_zeta_function(s=2)
# 1.64493406685
graph.main()
```
<img width="543" alt="riemann.png" src="https://qiita-image-store.s3.amazonaws.com/0/121997/ef5e9bfd-944e-758a-6507-1344cae09360.png">

#【参考サイト】
　[pypi](https://pypi.python.org/pypi/riemann/0.0.2)
めざせpythonライブラリマスター （18）requests

#【ライブラリ説明】
　HTTP解析ができる

#【プログラム】
```py:requests.py
# -*- coding: utf-8 -*-

import requests

r = requests.get('http://qiita.com/')
print r.status_code
# 200
 
print r.headers['content-type']
# text/html; charset=utf-8
 
print r.encoding
# utf-8

print r.text.encode('utf-8')
# <!DOCTYPE html><html...
```

#【参考サイト】
　[pypi](https://pypi.python.org/pypi/requests/2.9.1)
emacsでgoogle-translateとmicrosoft-translatorで同時に翻訳する

"[Emacsで英和辞書や和英辞書をすぐに引けるようにしたい　を改良](http://qiita.com/styzo/items/72197ad6717eb9266315)"の設定と"[macsでMicrosoft Translatorを作ってみた　を改良](http://qiita.com/styzo/items/a17bda8f3dc141eb3322)"の設定を使ってmicrosoft-translatorとgoogle-translateを順番に起動するだけ。

```el
(defun google-microsoft-translate (arg)
  (interactive "p")
  (setq arg (microsoft-translator--get-string arg))
  (microsoft-translator-auto-translate arg)
  (google-translate-enja-or-jaen arg))

(push '("*Google Translate*") popwin:special-display-config)
(push '("*Microsoft Translator*") popwin:special-display-config)

(global-set-key (kbd "C-M-g") 'google-microsoft-translate)
```

`C-M-g`で起動。
C-u でパラグラフ
C-u C-u で単語
C-u C-u C-u でキーボードから単語や文を入力
引数なしでセンテンス
リージョンを指定していればそのリージョン

両バッファを同時に表示するのはpopwinに依存。

![google-microsoft-translate.png](https://qiita-image-store.s3.amazonaws.com/0/40128/82942662-7f9b-d35b-c205-ce68999ac6da.png)

参考:
http://togetter.com/li/954187
PowerShell で xpath 使って [cs|vb]proj ファイル読み書きしたい時

昔の C# や VB.NET のプロジェクトが沢山あり、最新の .NET Framework にマイグレーションしたい時、プロジェクトファイルの PropertyGroup や ItemGroup の設定値を更新する移行用のスクリプト書きたくなりますよね。

で、こんな感じで普通に xpath を指定して要素を取得しようとしてもちゃんと取れません。

```ps1
$proj = [xml]Get-Content Target.csproj

$nodes = $proj.SelectNodes("//ItemGroup/Reference[contains(./@Include , 'System')]")

foreach($node in $nodes) { Write-Host $node.Include }

```

xpath に MSBuild のスキーマ情報を埋め込む必要があります。XmlNamespaceManager を使って MSBuild の namespace オブジェクトを生成し、SelectNodes の第2引数に渡すようにします。そして xpath には追加した namespace の prefix を付けます。

```ps1
$proj = [xml]Get-Content Target.csproj

$ns = New-Object Xml.XmlNamespaceManager $proj.NameTable
$ns.AddNamespace("msb", "http://schemas.microsoft.com/developer/msbuild/2003")

$nodes = $proj.SelectNodes("//msb:ItemGroup/msb:Reference[contains(./@Include , 'System')]", $ns)

foreach($node in $nodes) { Write-Host $node.Include }

```

出力結果

```
System
System.Core
System.Xml.Linq
System.Data.DataSetExtensions
System.Data
System.Deployment
System.Drawing
System.Net.Http
System.Windows.Forms
System.Xml
```

ちゃんと取れました。
めざせpythonライブラリマスター （17）rangeparser

#【ライブラリ説明】
　自由に数値の範囲リスト作成
　
#【準備】
　python2.7ではインストールできなかったので、python3.5で動かしました。
#

#【プログラム】
```py:rangeparser.py
# -*- coding: utf-8 -*-

from rangeparser import RangeParser

parser = RangeParser()

print(parser.parse('10,20,30'))
# [10, 20, 30]

print(parser.parse('1-10'))
# [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

print(parser.parse('10,20,30,40-45'))
# [10, 20, 30, 40, 41, 42, 43, 44, 45]
```

#【参考サイト】
　[pypi](https://pypi.python.org/pypi/RangeParser/0.1.3)
Zynq > TTC > Link > low level example > Prescaler値の設定

関連 http://qiita.com/7of9/items/b8a1b1ae3b33dcc50312

TTCのPrescaler関連でサンプルコードを探していて以下を見つけた。
https://github.com/Xilinx/embeddedsw/blob/master/XilinxProcessorIPLib/drivers/ttcps/examples/xttcps_low_level_example.c

XTtcPs_WriteReg()にてTTCのレジストリを直接書き換えている。

Zyboで実行したところ、`Successfully ran TTC Lowleve Example Test`にはなった。
Jenkinsで古いビルドの破棄を一括で設定する

古いビルドの破棄って設定しておかないとたまりまくって大変なことになりますよね。
でもこれってGlobalな設定がないのでちょっと不便…
でも全部のビルド回って…一個一個設定…とかやってられないですよね。

そんなあなたにこちらConfiguration Slicing Plugin
https://wiki.jenkins-ci.org/display/JENKINS/Configuration+Slicing+Plugin

これを入れると管理画面にConfiguration Slicingというページが増えているので
Discard Old Builds Slicer - Days to keep builds を選択

最初こんな感じになっているので(Disable)と書いてある奴が設定していないやつです。
![スクリーンショット 2016-06-04 14.18.47.png](https://qiita-image-store.s3.amazonaws.com/0/77177/e1b82233-64cc-9497-299c-32af53908a57.png)

これをこうしてやると10日に設定されます。
![スクリーンショット 2016-06-04 14.20.15.png](https://qiita-image-store.s3.amazonaws.com/0/77177/fc62a99e-3b18-4260-a382-4b5b2ac46914.png)
ほかにもいろいろ設定あるのでいろいろできます。
IE6で c:\a.js が無くてもscript errorにさせない

## ダメだった書き方

```html
<script src="c:\a.js"></script>
<script src="c:/a.js"></script>
<script src="file://a.js"></script>
<script src="file://c/a.js"></script>
<script src="file://c:/a.js"></script>
```

* IE11だと読めたりするが、IE6だと`script error`になったりした。`:`記号が使えない様子。
* `c:\a.js`が存在するときはエラーが出ないが、存在しない場合、`script error`になった。(IE6)

## 良かった書き方

```html:
<script src="file:///a.js"></script>
```

* IE6でもエラーなく行けた。
JenkinsでUnityのバージョンをパラメータとして指定する

#UnityのバージョンをJenkins上で指定したい
Unityであるバージョンでは動くけど別バージョンだと動かないっていう需要はあると思います。
そんな時にUnityのバージョンを指定してビルドしたいなーってことがあると思うのでそのやり方について

（ちなみにこの方法UnityじゃなくてもほかのGlobal Tool Configurationとかでインストールパス設定するやつ(mavenとか)でもたぶんいけます試してないけど）

#前提
Unityのプラグイン入れておいてください。

#Unityの設定
Unityのインストールパスをこんな感じで設定します。

![スクリーンショット 2016-06-04 14.04.25.png](https://qiita-image-store.s3.amazonaws.com/0/77177/fca34f33-73dd-81bc-1a07-3736cbc47417.png)

でジョブ側はこんな感じでパラメータ設定してあげればおしまいです。（ほかの環境変数を作成する方法でも構いません。）
![スクリーンショット 2016-06-04 14.09.57.png](https://qiita-image-store.s3.amazonaws.com/0/77177/f6736163-ac57-6928-623c-43fc1955fe39.png)


UnityはCustomVersionを指定してくださいね。
Android 5.1 RCをVMware Playerで動かして解像度を変えてみる

# はじめに
Android × VMwareの手順はググると結構出るんですが、だいたい4.4向けでイェスマンでOK！な手順が出てきます。
5.1をインストールしようとしたらいろいろなところで引っかかったので、備忘録として残すことにしました。

## 引っかかったこと
* Androidのインストール後の起動でError 17とか出る！
* Androidのコンソールでipconfigがない！IPわからない！
* 解像度変更するには最初の画面でa押せってあるけど5.1？はaじゃない！

## 用意するもの
VMwarePlayerとAndroidのiso。これはぐーぐるせんせーに聞くと回答がそこそこもらえるのでリンクだけ。
[VMwarePlayer](https://my.vmware.com/jp/web/vmware/free#desktop_end_user_computing/vmware_player/7_0|PLAYER-714|product_downloads)
[iso](http://www.android-x86.org/download)

# 手順
画像はないのでフィーリングで読んでください。

## 用意したPlayerをインストール
日本語設定でインストール。

## Playerで新規仮想マシンを作成
作成時に仮想マシンの設定をいじります。環境にもよるので参考まで。

* インストーラディスクイメージファイルに用意したisoを割当
* ハードウェアをカスタマイズから以下変更
 * **メモリ** が256MBなので **1GB** に変更
 * プロセッサのコア数を環境に合わせて変更する(4コアあったので2コア振りました。)
 * 新規CD/DVDに用意したisoを割当(起動用)

## Android OSをインストール
作成した仮想マシンを起動したら4つくらいのメニューが出るので **Installation - Install Android-x86 to harddisk** を選びます。

黒い画面の後、3つくらいのメニューが出るので **Create/Modify partitions** を選びます

「Do you want to use GPT?」とか聞かれますが、特に大きなHDD使うわけでも無いので**No**を選びます。

次の画面で以下を実施します。

* New → Primary → (サイズはデフォルトで良いので)Enter！
* Bootableを選択し、Flagsの下がBootになっていることを確認！
* writeを実行！
 * yesと打ってEnter！
* Quit！

一つ前の画面に戻るので今度は **sda ～** となっている最初の項目を選びます。
以下順に

* Please select a filesystem to format sdaは **ext3**
* You chose…は **Yes**
 * この後フォーマットが流れます
* Do you want to install boot loader GRUB ? は **Yes**
* Do you want to install EFI GRUB" ?は **Yes**
* Do you want to format the boot partition /dev/sda1 ?は **No**
 * ここをYesにすると、起動時にデュアルブートあるあるらしいエラーが出ます。
* 最後に/systemを読み書き可能にするか聞かれますが個人的に使うなら **Yes**にしておくと後々めんどくさくないので良いです(適当)

上記がすべて終わるとインストールが始まります。
プログレスバーがいっぱいになったら起動か再起動か聞かれます。 **Reboot** で。


## 解像度を変える
再起動で黒い画面に4つほど選択肢がある画面が出ます。キーボードの **e** を押してください。

kernel ～を選んで同じく **e** を押してください。

半角スペースを打ってvga=～を付与します。vgaの値はvga=askで調べるのが一般的みたいですが、ここまでの作業でコマンドを打つタイミングが無かったのでググッて適当に割り当てます。→[参考](http://hellokitty68.main.jp/wiki/Linux_kernel/vga)
(日本語キーボード使っている場合、=は^を打てば入力できます。)
設定を記載してEnter押下すると前の画面に戻ります。 **b** で起動してください。

私の環境ではvga=0x351を入れましたが、まず同じ値を打つ人は居ない気がします。
### 本当は解像度変更の設定を保存して起動時に一発で立ち上げたい
ここに記載した手順は毎回やる必要があります。どこかに設定持ってるファイルがありそうですが疲れたので又の機会に探します。。

## adbでつなぐ
adb コマンドの使い方はググッてなんとかします。
これを書いているタイミングではSDK単体でダウンロードできなかったため、AndroidStudioのインストーラでStudio＋SDKのインストールを行いました。正直そこそこ大きいので使わないのであればStudioは入れないほうが良いです。単品SDKを頑張って探してください。

* Androidのアプリ一覧を開くと **端末エミュレータ**があるので開きます。
* netstatを叩いてそれっぽいIPを確認します。
* adbコマンドで確認したIPにconnectします。
 * adb connect ＜それっぽいIP＞

これでadbコマンドが通る様になります。

## 入れたいapkをadbコマンドでインストール
connectした時点でAndroidStudioとかではボタン一発なんですが、単品apkを入れたい場合はadb install <apkのパス>でインストールしてください。

# 最後に
利用しているのはVMwareなので、一般的にVMwareを使う時のノウハウが適用できるらしいです。快適な環境を目指す場合はそれらを適用するようにすると良いです。
めざせpythonライブラリマスター （16）byteplay

#【ライブラリ説明】
　バイトコードをいじれます。

#【プログラム】
```py:byteplay.py
# -*- coding: utf-8 -*-

from byteplay import Code
from pprint import pprint

def f(a, b):
    print (a, b)

f(3, 5)
# (3, 5)

c = Code.from_code(f.func_code)
pprint(c.code)
'''
[(SetLineno, 7),
 (LOAD_FAST, 'a'),
 (LOAD_FAST, 'b'),
 (BUILD_TUPLE, 2),
 (PRINT_ITEM, None),
 (PRINT_NEWLINE, None),
 (LOAD_CONST, None),
 (RETURN_VALUE, None)]
'''
```

#【問題】
　バイトコードを操作したいために
　`c.code[3:3] = [(ROT_TWO, None)]`
　をプログラムに追加したが、
　`NameError: name 'ROT_TWO' is not defined`
　とエラーが出てしまう・・・

#【参考サイト】
　[pypi](https://pypi.python.org/pypi/byteplay/0.2)
electron-packager コマンドでの Use of const in strict mode. エラー 

## TL;DR
`node`のバージョン上げましょう。

## ことのはじまり

この前職場のWindowsでElectronしてみたのだけれど、OS X用の`.app`が上手くパッケージ化出来ているかの確認までは行えていませんでした。
復習の意味も含めて家でもちょこっとElectronしてみようと思い、iMacちゃんで簡単なアプリを記述して`electron-packager`コマンドを打ったらこんなエラーが……

```zsh
$ electron-packager src test --platform=darwin,win32 --arch=x64 --version=1.2.1
/usr/local/lib/node_modules/electron-packager/common.js:3
const asar = require('asar')
^^^^^
SyntaxError: Use of const in strict mode.
    at exports.runInThisContext (vm.js:73:16)
    at Module._compile (module.js:443:25)
    at Object.Module._extensions..js (module.js:478:10)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Module.require (module.js:365:17)
    at require (module.js:384:17)
    at Object.<anonymous> (/usr/local/lib/node_modules/electron-packager/cli.js:5:14)
    at Module._compile (module.js:460:26)
    at Object.Module._extensions..js (module.js:478:10)
```

むむっ、なんじゃあこりゃあ。
`electron-packager`のGitHubでissue探してもそれらしい報告はない。
でもこんなエラー出たら報告されるよなぁ……何かがおかしい。

じゃあ! いっちょGitHubで初めてのissue報告にチャレンジしてみよう!
と思ってissueを書いていると「使ってるバージョン書いてね。」とあったので調べてみる。

```zsh
$ electron-packager -v
/usr/local/lib/node_modules/electron-packager/common.js:3
const asar = require('asar')
^^^^^
SyntaxError: Use of const in strict mode.
    at exports.runInThisContext (vm.js:73:16)
    at Module._compile (module.js:443:25)
    at Object.Module._extensions..js (module.js:478:10)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Module.require (module.js:365:17)
    at require (module.js:384:17)
    at Object.<anonymous> (/usr/local/lib/node_modules/electron-packager/cli.js:5:14)
    at Module._compile (module.js:460:26)
    at Object.Module._extensions..js (module.js:478:10
```

あいーたたた。バージョンも見られないってもう`electron-packager`の何も出来ないじゃん!!

## そして解決へ

そういえばずっと昔にNode入れてからバージョン上げてなかったけれどもしかしてそれが原因かも。とバージョン繋がりでふと思い、バージョンアップを試しました。

取りあえず今のバージョンを確認

```zsh
$ node -v
v0.12.7
```

化石かよ……

アップデートには`n`コマンドを入れる必要があるみたいなのでインストール

```zsh
$ npm install -g n
/usr/local/bin/n -> /usr/local/lib/node_modules/n/bin/n
n@2.1.0 /usr/local/lib/node_modules/n
```

アップデート

```zsh
$ n stable

     install : node-v6.2.1
       mkdir : /usr/local/n/versions/node/6.2.1
       fetch : https://nodejs.org/dist/v6.2.1/node-v6.2.1-darwin-x64.tar.gz
######################################################################## 100.0%
   installed : v6.2.1
```

確認

```zsh
$ node -v
v6.2.1
```

そのまま`electron-packager`を試す

```zsh
$ electron-packager src test --platform=darwin,win32 --arch=x64 --version=1.2.1
Packaging app for platform darwin x64 using electron v1.2.1
Downloading electron-v1.2.1-win32-x64.zip
[============================================>] 100.0% of 52.44 MB (2.76 MB/s)
Packaging app for platform win32 x64 using electron v1.2.1
Wrote new apps to:
/Users/shy_azusa/Program/electron/test/test-darwin-x64
/Users/shy_azusa/Program/electron/test/test-win32-x64
>>> elapsed time 29s
```

出来た!!

## さいごに

普段から使うツールでもそうでなくっても、キチンとバージョンは上げておこう……と思いました。

それと、`electron-packager`のバージョン確認コマンドは`$ electron-packager -v`じゃなかったです…… :innocent: 
調べてみたけれど結局わからずでした…… :disappointed:
herokuでロックかけて限定公開する

herokuへデプロイするリポジトリを準備後

```
heroku create
git push heroku PUSH_BRANCH:master
heroku config:set USER=USER_NAME
heroku config:set PASS=PASSWORD
```

で設定できる

以下を元に作成すればよし
https://github.com/nulltask/heroku-static-provider
めざせpythonライブラリマスター （15）brute

#【ライブラリ説明】
　数字(01234...)
　アルファベット(大文字、小文字両方とも)
　シンボル (!#$...)
　　のすべての組み合わせの文字列を作成できます。

#【プログラム】
```py:brute.py
# -*- coding: utf-8 -*-

from brute import brute

# lengthには作成する文字列の長さを指定
# 指定しない場合は長さ３の文字列になる
for s in brute(length=1):
    print s
```

#【参考サイト】
　[pypi](https://pypi.python.org/pypi/brute/0.0.2)
　[github](https://github.com/rdegges/brute)
【Analytics】コンテンツグループでウェブサイトのユーザーの行動を見える化する方法

このページでは、Analyticsの機能にあるコンテンツグループを使用し、ユーザーの行動フローを見やすく可視化する方法について説明しています。

#目的

ウェブサイト、メディアのユーザーの行動分析の際に、コンテンツ数の多い巨大なサイトの行動フロー分析はとても大変です。
個別記事やカテゴリページのUIの改善を行っても、ページが沢山あると見る数値は膨大になります。

そこでコンテンツグループ機能を用いて、ページ種類別にグルーピングし、個別記事、カテゴリページ、タグページ単位などで数値を分析出来るようにします。
また、この項目を設定することで行動フローもかなり分かりやすく見えるようになります。

![スクリーンショット 2016-06-04 13.13.49.jpg](https://qiita-image-store.s3.amazonaws.com/0/50485/6daa9638-d09f-c6d5-5be5-6ed513d8f150.jpeg)


#やり方

##設定をする

ビュー→アナリティクス設定→コンテンツグループ

![スクリーンショット 2016-06-04 13.07.34.jpg](https://qiita-image-store.s3.amazonaws.com/0/50485/3a4acaa8-3d28-b8d0-22c2-4a4d3a20d003.jpeg)

![スクリーンショット 2016-06-04 13.14.33.jpg](https://qiita-image-store.s3.amazonaws.com/0/50485/265286de-dd1f-9316-75ac-fd8d211c13f0.jpeg)

新しいコンテンツグループを作成



###項目をサイトに合わせてを入力

![スクリーンショット 2016-06-04 13.15.32.jpg](https://qiita-image-store.s3.amazonaws.com/0/50485/d45c8df0-c40a-037f-66fc-66f9de62f57a.jpeg)

名前は何でも大丈夫です。
今回は**「ページ種類別」**としておきましょう。

コンテンツグループの作成方法は3通りあります。

1.ページにコードを埋め込む
2.条件で抽出する
3.ページURLやタイトルで抽出する

今回は一番わかりやすい3番で進めていきます。

![スクリーンショット 2016-06-04 13.18.36.jpg](https://qiita-image-store.s3.amazonaws.com/0/50485/a34d38c2-91ac-04b0-685a-82722374b427.jpeg)

ルールの定義を使用するグループをクリックすると展開されます。
デフォルトではスクリーン名となっていますが、今回はウェブサイトが対象なので**ページ**に変更します

![スクリーンショット 2016-06-04 13.19.47.jpg](https://qiita-image-store.s3.amazonaws.com/0/50485/f69f937c-4461-6701-515d-d2a30a655f07.jpeg)

うちのサイトでは「example.com/」がトップページだったので、スラッシュ完全一致でTOPページと定義します

![スクリーンショット 2016-06-04 13.22.28.jpg](https://qiita-image-store.s3.amazonaws.com/0/50485/a48c1902-472d-a0f1-a65d-b29244d89a01.jpeg)

個別ページでは共通して最後に「.html」が付いていたのでこのように定義。
正規表現も使うことができます。

**※この部分はサイトごとにかなり違う部分になります
必ず自分のサイトでどのページがどんなURL構成になっているのか規則性を見つけて入力して下さい**

![スクリーンショット 2016-06-04 13.08.27.jpg](https://qiita-image-store.s3.amazonaws.com/0/50485/0b1acfb0-7f58-70bd-43f4-c3cfb9ebb7c7.jpeg)

これで定義セットは完了です。
「すぐに数値確認を！」と行きたいところですが、残念ながら**セットした次の日**からの数値しかグルーピングして計測してくれません。
僕はここで詰まりました。

定義セットが上手く行っている事を祈りながら寝ましょう。

##次の日に確認

行動→サマリーを開くと項目が増えています。

![スクリーンショット 2016-06-04 13.26.10.jpg](https://qiita-image-store.s3.amazonaws.com/0/50485/3a55d006-d6eb-a641-d76b-6357d655665c.jpeg)

しっかり計測されていますね！
グループをクリックすると詳細の内訳も見ることが出来ます。

##活用方法

行動→行動フローでディメンションを参照元にする。
どこからサイトに流入し、どこへ流れていったか把握しやすい

![スクリーンショット 2016-06-04 13.13.49.jpg](https://qiita-image-store.s3.amazonaws.com/0/50485/6daa9638-d09f-c6d5-5be5-6ed513d8f150.jpeg)

コンテンツグループはディメンションとしても活用できます。

![スクリーンショット 2016-06-04 13.30.13.jpg](https://qiita-image-store.s3.amazonaws.com/0/50485/fe323f48-c333-308f-0928-1c21cdc8a011.jpeg)

どの年代、どの性別、どのデバイスでどのページが見られていて…
といった分析データとして活用できます。

#おわりに

最後まで見て頂いてありがとうございました。
普段はウェブやメディア制作に関わるお仕事でSEOやGoogle Analyticsを使用した分析を担当しています。

この記事がお役に立ちましたら
是非シェアをお願いします╭( ・ㅂ・)و ̑̑
bashのショートカットキー

Macのターミナルで使用できるショートカットが便利です。ただよく忘れるのでメモしておきます。

# 移動

| ショートカット | 動き |
|:-:|:-:|
| Ctrl + a  | カーソルが行の先頭に移動 |
| Ctrl + e  | カーソルが行の最後に移動 |
| Ctrl + b | カーソルが1文字左へ戻る  |
| Ctrl + f | カーソルが1文字右へ進む  |

# 削除

| ショートカット | 動き |
|:-:|:-:|
| Ctrl + d  | カーソルの右を削除 |
| Ctrl + h  | カーソルの左を削除 | 

# コピーアンドペースト

| ショートカット | 動き |
|:-:|:-:|
| Ctrl + u  | 行の先頭からカーソルまでをカット |
| Ctrl + k  | カーソルから行末までをカット |
| Ctrl + y  | ペースト | 

# 画面

| ショートカット | 動き |
|:-:|:-:|
| Ctrl + l  | 画面をクリア（改行連打が不要に） |


# 履歴

| ショートカット | 動き |
|:-:|:-:|
| Ctrl + p  | コマンド履歴の一個過去に進む |
| Ctrl + n  | コマンド履歴の一個最近に進む |
| Ctrl + r  | 履歴を検索 |


# 追記
MacのTerminalにデフォルトで入っているreadlineプログラムの機能でこのショートカットが使用できるようです。bashでなくても、例えばWindowsでもreadlineを使っているシェルが入っていたらこのショートカットが使えるかもしれませんし、もし異なるシェルが入っている場合は使えないかもしれません。

# 参考
Wikiに書いてあります。
https://en.wikipedia.org/wiki/Control_key
めざせpythonライブラリマスター （14）pyknon

#【ライブラリ説明】
　プログラムで音楽を作れます。
　今回はチューリップの最初の部分をコーディングしてみました。

#【プログラム】
```py:pyknon.py
# -*- coding: utf-8 -*-

from pyknon.genmidi import Midi
from pyknon.music import NoteSeq

# 音階？を設定
notes1 = NoteSeq("C D E")
notes2 = NoteSeq("C D E")
notes3 = NoteSeq("G E D C D E D")

# テンポを指定してMidiインスタンス生成
midi = Midi(tempo=90)
# 音が鳴る時間を指定してnotes1～3をつなげる
midi.seq_notes(notes1)
midi.seq_notes(notes2, time=4)
midi.seq_notes(notes3, time=8)

# ファイル書き込み
midi.write("demo.mid")
```

#【感想】
　これは素晴らしいし、面白い！

#【参考サイト】
　[pypi](https://pypi.python.org/pypi/pyknon/1.2)
　[github](http://kroger.github.io/pyknon/)
　[document的なもの](https://s3.amazonaws.com/musicforgeeksandnerds.com/Pyknon+from+Music+for+Geeks+and+Nerds.pdf)
　[MIDIのノートナンバーと周波数との対応表](http://www.asahi-net.or.jp/~HB9T-KTD/music/Japan/Research/DTM/freq_map.html)
WSHでJScriptとVBScriptを共存させてみる

## はじめに

私の勤務先は大手SIerなのですが、ほかの同業他社さんに漏れずWindows＋Excelで実施する非効率な手仕事が多いです。少しでも効率化するために、自動化できる作業はちまちまとお手製スクリプトを組んでいるので、少しずつ公開していきたいと思います。

## 日付付きフォルダの作成
日ごとの作業を整理するのに、下記のように `{YYYYMMDD 日付}_{作業内容}` のフォーマットで日付と作業内容を付けたフォルダを作成することが多々あります。

* 20160601_hogehoge手順書作成中
* 20160702_fugafuga作業準備

フォルダを作成し、フォルダを開いて作業を開始するまでに、毎回下記の6ステップがかかるのが面倒になってきたので、WSH(Windows Script Host)を使って自動化してみました。

* 右クリック
* 新規作成にマウスオーバー
* フォルダーをクリック
* 日付を入力
* 作業内容を入力
* 作成したフォルダをダブルクリック

## スクリプト全容
当初JScriptだけで実現可能かと思いましたが、JScriptではInputBoxを使用できないため、一部VBScriptの関数を使用することにしました。

JScriptだけであれば、コード書いて `hogehoge.js`として保存すれば動くのですが、JScriptとVBScriptを共存させるには、下記のようにXML形式の WSF(Windows Script File) として記述し、`hogehoge.wsf` として保存する必要があるようです。

別個のscriptタグで囲んでしまえば、JScript、VBScriptの関数を相互に利用することができます。

```html:createWorkFolder.wsf
<job id="createWorkFolder">

<!-- インプットボックス表示用関数定義 ============================= -->
<script language="VBScript">
  Function vbInputBox(strprompt)
      vbInputBox = InputBox(strprompt)
  End Function
</script>

<!-- スクリプト本体  ============================================ -->
<script language="JScript">

  // 日付に続く文字列を、VBScriptのInputBoxを使用して取得
  var str = vbInputBox("日付に続く文字列を入力してください");
  // 空の場合には、スクリプトを終了
  if( typeof(str) == "undefined" ) {
      WScript.Quit();
  }
 
  // YYYYMMDD形式の日付を取得
  var today = new Date();
  var yyyymmdd = today.getYear() +format2d(today.getMonth()+1) +format2d(today.getDate());
 
  // フォルダ名を生成
  var folderName = yyyymmdd +"_" +str;
 
  // FSOによりフォルダを作成
  var fso = new ActiveXObject("Scripting.FileSystemObject");

  if (!fso.FolderExists(folderName)) {
      // 同名フォルダが存在しなければ、フォルダを作成
      try {
          fso.CreateFolder(folderName);
      } catch (e) {
          WScript.Echo("予期せぬエラーが発生しました");
          WScript.Quit();
      }

  } else {
      // 同名フォルダが存在すれば、メッセージを表示してスクリプト終了
      WScript.Echo("同名フォルダが存在します");
      WScript.Quit();
  }
 
  // 0.5秒ほど待機（ちょっと待たないと、フォルダがちゃんと開かないらしい）
  WScript.Sleep(500);

  // フォルダをオープン
  new ActiveXObject("Shell.Application").Open(folderName);
 
  // 数字を0パディングして2桁で返す関数 -------------------------------- 
  function format2d(intValue) {
      if (intValue < 10) {
          return ("0" + intValue);
      } else {
          return (""  + intValue);
      }
  } // -------------------------------------------------------------

</script>
<!-- ========================================================== -->

</job>
```

## 使い方
上記コードをコピペして `hogehoge.wsf` というファイル名で保存し、あとは生成したファイルをダブルクリックをするだけです。

ダブルクリックするとインプットボックスが開くので、日付に続く文字列を入力すれば、スクリプトど同じ場所に新規フォルダが生成され、エクスプローラで開くところまで自動的に動作します。

![sample.png](https://qiita-image-store.s3.amazonaws.com/0/111801/01ac63e7-a095-928d-c2a1-713c334b7fa7.png)

![sample2.png](https://qiita-image-store.s3.amazonaws.com/0/111801/a8878c9a-ee11-4bed-148b-51caf60ba12d.png)


これで6ステップ操作が省略できました！
AGAL入門 #1 : レジスタの種別

AGAL勉強中です。メモがてらまとめをAGAL入門というタイトルで投稿していってみます。入門と言いつついいつつ、すでに自分が知っている基礎知識はすっ飛ばすため(Stage3Dの仕組みとかシェーダーの仕組みとか)悪しからず。

#おおまかな分類
一覧表は最後に紹介する外部リンク先をみてもらうとして、ここでは、いくつかの視点でグループ化してまとめます。

##使う場所別

頂点シェーダーで使う： `vt` `va` `vc` `op`
フラグメントシェーダーで使う： `ft` `fc` `fs` `oc`
共用： `v`  _(両シェーダーの値受け渡し用途です。)_

##入出力別

書きこみ用： `op` `oc` _(各シェーダーの演算結果を収めるものです)_
読み出し用： `vc` `fc` `va` `fs`
読み書き可能： `vt` `ft` `v`

##各レジスタ数
AGALバージョンで異なります。

* AGAL1
　`va0`~`va7` `vc0`~`vc127` `fc0`~`fc27` `vt0`~`vt7` `ft0`~`ft7` `v0`~`v7` `fs0`~`fs7`

* AGAL2
　`va0`~`va7` `vc0`~**`vc249`** `fc0`~**`fc63`** `vt0`~**`vt25`** `ft0`~**`ft25`** `v0`~**`v9`** `fs0`~**`fs15`**

* AGAL3
　`va0`~**`va15`** `vc0`~**`vc249`** **`fc0`~`fc199`** `vt0`~`vt25` `ft0`~**`ft25`** `v0`~`v9` `fs0`~`fs15`

AGAL1の厳しさが光ります。太字は１つ前のバージョンから向上した箇所。`op`と`oc`はどこでも１つだけです。（お尻に数字も付けないで使う。) `vc`および`fc`に余裕があるので積極的に使いたいところですが、MeshStyle側ではあまり有効活用できないか。

#ActionScriptからの設定
読み出し用AGALレジスタはActionscriptから値を設定します。大きな意味では変数と取れそうです。

* Context3D.setVertexBufferAt() 

　`va`の設定に使います。 頂点ごとの設定値です。
　リファレンスページ：[setVertexBufferAt](http://help.adobe.com/ja_JP/FlashPlatform/reference/actionscript/3/flash/display3D/Context3D.html#setVertexBufferAt())

* Context3D.setProgramConstantsFromVector() 
* Context3D.setProgramConstantsFromMatrix() 
* Context3D.setProgramConstantsFromByteArray() 

　`vc` `fc`の設定に使います。 シェーダ全体の定数です。
　リファレンスページ：[setProgramConstantsFromVector](http://help.adobe.com/ja_JP/FlashPlatform/reference/actionscript/3/flash/display3D/Context3D.html#setProgramConstantsFromVector())　[setProgramConstantsFromMatrix](http://help.adobe.com/ja_JP/FlashPlatform/reference/actionscript/3/flash/display3D/Context3D.html#setProgramConstantsFromMatrix())　[setProgramConstantsFromByteArray](http://help.adobe.com/ja_JP/FlashPlatform/reference/actionscript/3/flash/display3D/Context3D.html#setProgramConstantsFromByteArray())

* Context3D.setTextureAt() 

　`fs`の設定に使います。テクスチャーの参照です。
　リファレンスページ：[setTextureAt](http://help.adobe.com/ja_JP/FlashPlatform/reference/actionscript/3/flash/display3D/Context3D.html#setTextureAt())

#注意点

* 定数(`vc`と`fc`)は演算の引数に２つ同時にとれない。定数同士の演算をしたい場合は一度`vt`や`ft`に値をコピーしてからそちらを引数にして演算する。

# 参考ページ
AGAL bytecode format(公式) http://help.adobe.com/en_US/as3/dev/WSd6a006f2eb1dc31e-310b95831324724ec56-8000.html
AGAL入門:レジスタの種類(英語) http://jacksondunstan.com/articles/1661
こちらにレジスタの一覧表があります。後者の記事の関連記事４つを読むだけでAGALに詳しくなれます。

#まとめ
以上です。AGALは日本語の情報が少ないので、こんなメモ程度でも誰かの参考になれば幸い。
vmで起動したサーバへ接続できない

###問題
vm上にcentos7をいれてapacheを起動させ、ホストOSから８０番ポートへアクセス出来ない

```
curl 192.168.33.10
curl: (7) Failed to connect to 192.168.33.10 port 80: Connection refused
```
curlでゲストOSにつなげると80番ポートが開いてないとでてくるので、firewallまわりのポートの設定が怪しいと想い調べる
http://superuser.com/questions/914652/connection-refused-for-port-80-in-virtualbox-but-only-for-centos-vm

こちらによるとcentos7の設定でfirewallがデフォルトでonになっていたのでoffにすればよいとのことだが、全部offにするのは良くないので
80portだけあける設定を行う

```
sudo lokkit -s http
```
これで８０番ポートが開いて接続可能になる
Tessel2でLチカを試す


Tessel2のLチカを試してみます。

![](https://i.gyazo.com/f1b832c5c9e7794384a119796cdd9c8a.png)

[Tessel2のCLIコマンドインストールとエラー回避](http://qiita.com/n0bisuke/items/ccecd6644ea87db44a69)の話もありましたが、最近のNode.js v6だと特にエラーは出なかったです。

Hello World的な感じでTessel2でLチカしてみます。

ちなみにTessel2はまだ技摘が通ってないので **日本国内での利用はシールドルームや電波暗室を利用しましょう。**
> [DMM.make AKIBA](https://akiba.dmm-make.com/)のシールドルーム使わせてもいました。 https://www.instagram.com/p/BGLk55xkjg1/

```bash
$ t2 init
Initializing tessel repository...
Created package.json.
Wrote 'Hello World' to index.
```

ディレクトリ内にindex.jsとpacket.jsonが生成されます。

```bash
$ ls
index.js     package.json
```

```index.js
// Import the interface to Tessel hardware
var tessel = require('tessel');

// Turn one of the LEDs on to start.
tessel.led[2].on();

// Blink!
setInterval(function () {
  tessel.led[2].toggle();
  tessel.led[3].toggle();
}, 100);

console.log("I'm blinking! (Press CTRL + C to stop)");
```

0.1秒おきにチカチカします(はやいw)

```bash
$ t2 run index.js
INFO Looking for your Tessel...
INFO Connected to n0bisuke.
INFO Building project.
INFO Writing project to RAM on n0bisuke (3.072 kB)...
INFO Deployed.
INFO Running index.js...
I'm blinking! (Press CTRL + C to stop)
```

## ES2015に書き換え

ES2015でもいけました。こんな感じです。

```index.js
'use strict'

const tessel = require('tessel');
tessel.led[2].on();

setInterval(() => {
  tessel.led[1].toggle();
  tessel.led[2].toggle();
  tessel.led[3].toggle();
}, 1000);
```

デフォルトだと1,2,3の三つのLEDが使えるみたいです。

![](https://i.gyazo.com/e8dc9eeee5c971c2fb03568d4eece2d4.gif)

ちなみに4はエラーになりました笑

```bash
省略
・
・
・
  tessel.led[4].toggle();
               ^

TypeError: Cannot read property 'toggle' of undefined
    at null._repeat (/tmp/remote-script/index.js:10:16)
    at wrapper [as _onTimeout] (timers.js:264:19)
    at Timer.listOnTimeout (timers.js:92:15)
```
Core Data の「Lightweightマイグレーション」と「カスタムマイグレーション」は混ぜられない

記事の内容はこちらを参照してください。
https://mishimay.github.io/1f64cfa2453ccbfe0312/
<!--

調べたことのまとめです。
実際に試していなので確認はできていません。


# 前提
Core Data のマイグレーションには大きく分けて2種類ある。

- Lightweightマイグレーション
  - データモデル (`*.xcdatamodeld`) を変更するだけで良い
  - iCloudの Core Data はLightweightマイグレーションしかできない
- カスタムマイグレーション
  - Mapping Model が必要

# 問題
- Lightweightマイグレーションとカスタムマイグレーションで設定が異なり、この2つを同時に行うことができない
  - `addPersistentStoreWithType:configuration:URL:options:` の `options` の設定
      - Lightweightマイグレーションでは `NSInferMappingModelAutomaticallyOption: true` を指定する
      - カスタムマイグレーションでは指定しない
- カスタムマイグレーションだけでやろうとすると Mapping Model が大量に必要になる
  - たとえばデータモデルが1, 2, 3とあるとき、Mapping Model は 1> 2、 2 -> 3 に加えて 1 -> 3 も必要

# 解決方法
**Progressive Migration** と呼ばれる方法がある。

- Mapping Model を使って 1 -> 2、 2 -> 3 と順番にマイグレーションしていく
- 前のバージョンから次のバージョンへのマイグレーションだけを考えればいい
- 最新のバージョンまでマイグレーションを繰り返すので遅い
- 本来はLightweightで済むマイグレーションも Mapping Model が必要？
- サンプルコードなど詳しくは [Custom Core Data Migrations · objc.io](https://www.objc.io/issues/4-core-data/core-data-migration/) を参照

# 最後に
- Lightweightだけで事足りるならLightweightだけのほうが楽
- マイグレーションは難しい問題なので、できるだけマイグレーションしなくて済むように将来の拡張性を考えた余裕のある設計にしよう


# 参考
- [Custom Core Data Migrations · objc.io](https://www.objc.io/issues/4-core-data/core-data-migration/)
- [iphone - NSEntityMigrationPolicy subclass methods not being called - Stack Overflow](http://stackoverflow.com/questions/3651805/nsentitymigrationpolicy-subclass-methods-not-being-called)
- [Migration and iCloud](https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/CoreDataVersioning/vmCloud/vmCloud.html#//apple_ref/doc/uid/TP40004399-CH9-SW1)


-->
WordPress メモ

WordPressのちょっとしたTipsメモ（追記予定）

#特定のユーザーのみにコンテンツを表示したい場合
例えば、ログインユーザーや、特定のユーザーのみにあるコンテンツを表示したい場合、以下のようにする。

```
<?php if ( $user_login ) : ?>
閲覧制限しているコンテンツ
<?php endif; ?>
```

上記の場合は、ログインしているユーザーのみにあるコンテンツを表示したい場合に使用される。
上記以外でも以下のような関数が利用できる。

- $user_level
- $user_ID
- $user_email
- $user_url (ユーザーのプロフィールに入力したWebサイト)
- $user_pass_md5 (ユーザーパスワードのmd5ハッシュ -- 復元することがほぼ不可能なエンコード形式ですが、入力されたパスワードが実際のユーザパスワードと同じものかを比較するときに役立ちます）
- $display_name (ユーザー設定ページで「ブログ上の表示名」として指定されているユーザ名）

例えば、ログインユーザーのみに特定のカテゴリーリスト（カテゴリーリストはcat指定されると基本的にはログインユーザー以外でも表示出来てしまう）を表示したい場合などに利用できる。


#WordPressの管理者メールを複数登録したい場合
faction.phpに以下のコードを記入する。

```
add_filter( 'wpmem_notify_addr', 'my_admin_email' );
function my_admin_email( $email ) {

// single email example
$email = 'notify@mydomain.com';

// multiple emails example
// $email = 'notify1@mydomain.com, notify2@mydomain.com';

// take the default and append a second address to it example:
// $email = $email . ', notify2@mydomain.com';

// return the result
return $email;
}
```

`// $email = $email . ', notify2@mydomain.com';`部分に複数のメールを登録する場合、コンマ区切りで記入する。
使い方としては、クライアントのWordPressを監理してる場合など、クライアント側のアドレスと自分のアドレスを併用できる。

#RSSをカテゴリー毎に分けたい場合
WordPressのRSSに関しては、標準でもRSS機能があるので、普通はあまり意識せずに使用できる。
ただし、カテゴリーが多い場合、ただRSSをはき出すだけだと、かなり混在したものをはき出すようになるので、あまり見栄えの良いモノではない。
その場合、カテゴリー毎にRSSをはき出すようにすれば、特定のカテゴリーのみを見たいユーザに取っては、非常に使いやすいモノになる。
設定はそれほど難しいわけでなく、単にRSSの文字列最後にカテゴリーIDを振ってあげれば良いだけである。
例えば、

```
http://hogehoge.com/?feed=rss2
```

とあった場合、URLの最後に`&cat=CategoryID`を付けてあげれば良いだけである。
上記のURLの場合は、

```
http://hogehoge.com/?feed=rss2&cat=CategoryID
```

これでRSSフィードが特定のカテゴリーを吐くようになる。

#カテゴリー毎に投稿ページを変えたい
カテゴリー毎に投稿ページを変えたい場合が多々ある。
特に日本語、英語の混合ページなどはそれに当たるだろう。
その場合、single.phpに条件分岐を付けて行う方法もあるが、以下をfunction.phpに追加すると割と便利になる。

```
add_filter('single_template', create_function('$t', 'foreach( (array) get_the_category() as $cat ) { if ( file_exists(TEMPLATEPATH . "/single-{$cat->term_id}.php") ) return TEMPLATEPATH . "/single-{$cat->term_id}.php"; } return $t;' ));
```

この関数を入れて、各カテゴリー毎にsingle.phpを追加すればいい。
たとえば、カテゴリーIDが1の場合、`single-1.php1`と追加すれば分岐される。

問題点としては、カテゴリーが多くなった場合、各カテゴリー毎にsingle.phpを作らないとならないので、single.phpがたくさん作成されて見通しが悪くなる場合がある。
その場合、出来るのであれば各カテゴリーを子にして大きな括りである親を作れば、基本親のカテゴリーIDに含まれる様になるので、管理は楽になる。この辺はそのサイト自体の設計にも関係してくるので、設計段階からキチンと作ることが望ましいだろう。
めざせpythonライブラリマスター （13）easydev

#【ライブラリ説明】
　プログラムの進捗度と実行時間を計測

#【プログラム】
```py:easydev.py
# -*- coding: utf-8 -*-

from easydev import Progress
pb = Progress(10)
for i in range(1,10+1):
    x = []
    for j in xrange(1000000):
        x.append(j)
    pb.animate(i)
```

#【結果】
```text:result
[---              10%                  ] 1 of 10 complete in 0.2 sec 
[-------          20%                  ] 2 of 10 complete in 0.5 sec 
[-----------      30%                  ] 3 of 10 complete in 0.7 sec 
[---------------  40%                  ] 4 of 10 complete in 1.0 sec 
[-----------------50%                  ] 5 of 10 complete in 1.2 sec 
[-----------------60%--                ] 6 of 10 complete in 1.5 sec 
[-----------------70%------            ] 7 of 10 complete in 1.7 sec 
[-----------------80%----------        ] 8 of 10 complete in 1.9 sec 
[-----------------90%--------------    ] 9 of 10 complete in 2.2 sec 
[-----------------100%-----------------] 10 of 10 complete in 2.5 sec
```

#【参考サイト】
　[pypi](https://pypi.python.org/pypi/easydev/0.9.4)
　[github](https://github.com/cokelaer/easydev)
　[document](https://pythonhosted.org/easydev/index.html)
Pythonで簡単なモメンタム投資モデルを作る

250日ルックバックでモメンタムがゼロを超えたら買い、逆にゼロを下回ったら売ります。

```python
# -*- coding: utf-8 -*-
import pandas_datareader.data as web
from datetime import datetime
import talib as ta
import matplotlib.pyplot as plt
import pandas as pd

# make plots inline
%matplotlib inline
```


```python
# setting parameters
ticker = 'SPY'
sd = datetime(2001,  1,  1)
ed = datetime(2015, 12, 31)
period = 250
```


```python
# getting price data
d = web.DataReader(ticker, 'yahoo', sd, ed)
d.sort_index(ascending=True, inplace=True)

# calcurating momentum
momentum = ta.MOM(d['Adj Close'].values, period)
```


```python
# initialize
maxcnt = d['Adj Close'].count()
cash = [None for row in range(maxcnt)]
position = [None for row in range(maxcnt)]
asset = [None for row in range(maxcnt)]

cash[0] = 10000
position[0] = 0

# simulation
for i, (index, row) in enumerate(d.iterrows()):
    if i > 0:
        cash[i] = cash[i-1]
        position[i] = position[i-1]

        if momentum[i] > 0 and momentum[i-1] < 0:
            # open(buy)
            amount = cash[i] // row['Adj Close']
            position[i] += amount
            cash[i] -= amount * row['Adj Close']
            
        elif momentum[i] < 0 and momentum[i-1] > 0:
            # close(sell)
            cash[i] += position[i] * row['Adj Close']
            position[i] = 0

    asset[i] = cash[i] + position[i] * row['Adj Close']

d['asset'] = asset
```


```python
# plot result
d2 = pd.DataFrame()
d2['Stock'] = d['Adj Close']/d['Adj Close'][0]*100
d2['Performance'] = asset/asset[0]*100

d2.plot()
plt.show()

```

![output_4_0.png](https://qiita-image-store.s3.amazonaws.com/0/89639/17c69ee4-fef3-21ed-11dc-4a3cb72a4ed0.png)
Angular CLIで3分でAngular 2 Hello Worldする。


Angular 2 の投稿を二つ[こちら](http://qiita.com/kitfactory/items/829a711a594850a2ef70)、[こちら](http://qiita.com/kitfactory/items/1440df30f695530cbc44)ほどしましたが、[Angular CLI](https://cli.angular.io/)を使えば、もっと何も考えないで済むことが分かったので、Angular CLIでHello Worldをしてみましょう。


### Angular CLIのインストール

```
> npm install -g angular-cli

```

### watchmanのインストール

ファイルの更新を検知したい場合、watchmanをインストールしておきましょう。

```
> brew install watchman

```

### アプリの作成

```
> ng new myapp //myappはアプリ名です

> cd myapp
```

### アプリを動かす

```
> ng serve

```

![Kobito.HjnlJ3.png](https://qiita-image-store.s3.amazonaws.com/0/35954/0d3fb176-8247-aac9-17d3-5523ba04c088.png "Kobito.HjnlJ3.png")

なお、Angular CLIを使えば、雛形の作成も便利に行えます。その辺はまた別稿で。
WPFのある生活（４日目）


何かやりたいことがあったとして、それを支援する体制や環境がなくとも嘆くのは早い。たとえVisualStudioが無くとも、知恵と工夫を凝らせば、意外と何とかなるものだ。苦労も多いが、達成感もひとしおである。クソゲーをひたすらやり込んだ、あの頃のように。

エディタがメモ帳で、入力補助が無くとも、問題集を解いていると思えば良い。問題を数多く解くことで身につくものもある。

新たなスキルを身につけたいと思ったら、まずは「習慣にする」というのが第一歩。今日もちまちまとWebのサンプルを解読するのであった。


# リソース

画面の構成でよく使うものをまとめるっぽい。
`xxx`の箇所には、ウィンドウやボタンが入る。
`~~~`の箇所には、アクセスする際のキーワードを入れる。

```xml:基本構文
<xxx.Resources>
  <Style x:Key="~~~"/>
    <Setter Property="プロパティ名" Value="設定する値（色名とか）"/>
  </Style>
</xxx.Resources>
```


```xml:アクセス方法
<Button Style="{StaticResource Red}"/>
```


```xaml:MainWindow.xaml
<Window x:Class="WpfApplication11.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApplication11"
        mc:Ignorable="d"
        Title="MainWindow" Height="100" Width="300">

    <Window.Resources>
        <Style x:Key="Red" TargetType="Button">
            <Setter Property="Background" Value="Red"/>
            <Setter Property="Foreground" Value="Snow"/>
        </Style>
        <Style x:Key="Yellow" TargetType="Button">
            <Setter Property="Background" Value="Yellow"/>
            <Setter Property="Foreground" Value="Black"/>
        </Style>
        <Style x:Key="Green" TargetType="Button">
            <Setter Property="Background" Value="Green"/>
            <Setter Property="Foreground" Value="Black"/>
        </Style>
    </Window.Resources>

    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="3*"/>
            <ColumnDefinition Width="3*"/>
            <ColumnDefinition Width="3*"/>
        </Grid.ColumnDefinitions>
        <Button Style="{StaticResource Red}" Grid.Column="0" Content="Red"/>
        <Button Style="{StaticResource Yellow}" Grid.Column="1" Content="Yellow"/>
        <Button Style="{StaticResource Green}" Grid.Column="2" Content="Green"/>
    </Grid>
</Window>
```
[メモ] ESXi 6.0 での Neted VM (GuestVM: Windows 10x64でHyper-Vを動かす)

\# 簡単にメモ。Hyper-Vの動作はあとで追記予定 

## 環境

- 物理マシン: CPU E5-2650 v2 (?)
- VM Host: ESXi 6.0 update 2
- VM Guest: Windows 10 x64

## 設定
###VM Host (ESXi)
1. SSHでHOSTにログイン
2. `/etc/vmware/config` に `vhv.enable = "true"` を追加

    ```shell-session
[root@localhost:~] cat /etc/vmware/config
libdir = "/usr/lib/vmware"
authd.proxy.nfc = "vmware-hostd:ha-nfc"
authd.proxy.nfcssl = "vmware-hostd:ha-nfcssl"
authd.proxy.vpxa-nfcssl = "vmware-vpxa:vpxa-nfcssl"
authd.proxy.vpxa-nfc = "vmware-vpxa:vpxa-nfc"
authd.fullpath = "/sbin/authd"
vhv.enable = "true"
```
3. 再起動

### VM Guest設定
1. http://\<ESXiのIPアドレス\>/ui/ にアクセス 
2. 設定を変更するVMのとこで、右クリック=>Edit settingsで設定を開く
    a. [Virtual Hardware]タブ
CPU > 
    - Hardware virtualization: [v] チェックを入れる
    - CPU/MMU Virtualization: `Hardware CPU and MMU`を選択

    b. [VM Options]タブ
Advanced > Configuration Parameters > [Edit Configuration...]で、以下の項目を追加
    - `hypervisor.cpuid.v0` : `false`
    - `vhv.enable`: `true`

3. 電源オン