OmniAICreator/Qiita-1.07M huggingface dataset:
AWS EC2 インスタンスの一覧を取得するコマンド

用途 → ブラウザで　AWS 管理コンソールを開かずに、EC2 の各インスタンスの IP アドレスを確認したい。

(1) [IAM 管理コンソール](https://console.aws.amazon.com/iam/home#users) で「新規ユーザの作成」から `myproject` ユーザを作成する。（プロジェクトごとのユーザ）

(2) 「ユーザーのセキュリティ認証情報を表示」から「アクセスキー ID」と「シークレットアクセスキー」をコピーして、`~/.aws/credentials` に記載する。

```
[myproject]
aws_access_key_id = XXXXXXXX
aws_secret_access_key = XXXXXXXX
```

(3) `~/.aws/config` に以下を記載する

```
[profile myproject]
output = text
region = ap-northeast-1
```

(4) IAM 管理コンソールのユーザ一覧画面に戻って、 `myproject` ユーザを選択して、「アクセス許可」タブで「ポリシーのアタッチ」を開く。`AmazonEC2ReadOnlyAccess` を選択してポリシーをアタッチする。

(5) Terminal で以下のコマンドを叩く。

```sh
aws ec2 describe-instances --profile myproject --query 'Reservations[].Instances[].[PublicIpAddress,Tags[?Key==`Name`].Value|[0]]'
```

(6) 各 EC2 インスタンスの IP アドレスと、Name タグが一覧で出力される。

```
52.11.22.33	foo
52.44.55.66	bar
52.77.88.99	baz
```

----

（2016-07-21 追記）
`~/.aws/` 内にファイルを作らなくても、以下の手順で環境変数経由でも指定できる。

```sh
export AWS_ACCESS_KEY_ID='XXXXXXXXXXXXXXXXXXXX'
export AWS_SECRET_ACCESS_KEY='XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
aws ec2 describe-instances --region 'ap-northeast-1' --output text --query 'Reservations[].Instances[].[PublicIpAddress,Tags[?Key==`Name`].Value|[0]]'
```
AppleScript でアクセシビリティ画面を開く

# AppleScript

```applescript:Script.scpt
tell application "System Preferences"
	reveal anchor "Privacy_Accessibility" of pane id "com.apple.preference.security"
	activate
end tell
```

スクリプトを実行するとシステム環境設定のアクセシビリティ画面が開きます。
![](https://qiita-image-store.s3.amazonaws.com/0/3603/0d8ff68e-e75a-898e-bd91-9892e368cc76.png)

スクリプトエディタ.app で試すのがいいです。
![](https://qiita-image-store.s3.amazonaws.com/0/3603/760a26c1-c461-841b-d9de-38294067734f.png)

# スクリプトをアプリに組み込む

`osascript` コマンドを NSTask で実行するパターン。

```swift:NSTask
let path = "…/Script.scpt"
let task = NSTask()
task.launchPath = "/usr/bin/osascript"
task.arguments = [path]
task.launch()
```

上の Swift コードは Terminal でこのコマンドを実行するのと同じ結果になります。
`$ osascript ~/Desktop/Script.scpt `

あるいは NSAppleScript クラスで実行するパターン。（未検証だけどこんなんでよかったか？）

```swift:NSAppleScript
let path = "…/Script.scpt"
let script = NSAppleScript(contentsOfURL: NSURL(fileURLWithPath: path), error: nil)
let eventDescriptor = script?.executeAndReturnError(nil)
```
CoreOS で Docker デーモンの起動オプション DOCKER_OPTS を設定する

CoreOS は何もしなくとも自動で Docker デーモンが立ち上がりますが、たまに Docker デーモン自体の起動オプション (`DOCKER_OPTS`) を設定したい時があります。Docker デーモンへのアクセスには TLS 認証使いたいとか、overlay network を使うための下準備をしたいとかです。

そういう時は、cloud-config の `units` に __`docker.service`__ を記述することで Docker デーモンの起動時に `DOCKER_OPTS` を設定できます。
以下の例では、[etcd を利用した overlay network 構築](https://docs.docker.com/engine/userguide/networking/dockernetworks/#an-overlay-network) のオプションを指定しています。

```yaml
coreos:
  units:
    - name: etcd2.service
      command: start
    - name: docker.service # <=====
      drop-ins:
        - name: 10-cluster-config.conf
          content: |
            [Service]
            Environment="DOCKER_OPTS=--cluster-store=etcd://0.0.0.0:2379 --cluster-advertise=eth0:2375"
```

## REF
- [Customizing docker](https://coreos.com/os/docs/latest/customizing-docker.html)
MacOSとLinuxのdateコマンドの違い

Datestring↔Timestampの変換はdateコマンドでやることが多いのだが、
Linux系OSとMacOSそれぞれのbashの方言の違いにハマったのでメモ。

### GNU (e.g. Linux OS)

```
# To Timestamp
date -d "2008-10-1 12:34" +%s
# To Datestring
date --date "@1104505200"
```

### BSD (e.g. Mac OS)

```
# To Timestamp
date -r "1104505200"

# To Datestring
date -j -f "%Y-%m-%d" "2010-10-02" "+%s"
```
TutorialsPointのヘッダやサイドメニューを削除するon Chrome


TutorialsPointのオンラインIDEは，メニューが多いので画面が小さいと見づらい（左図）．
そこでヘッダ・サイドメニューを取り除く（右図）．

![スクリーンショット 2016-05-16 11.50.12.png](https://qiita-image-store.s3.amazonaws.com/0/44835/7c1b8510-6dc2-75e4-4eff-92191fd10f16.png)


# Minimalist for Everythingを使う

Chrome拡張のMinimalistをインストール．

https://chrome.google.com/webstore/detail/minimalist-for-everything/bmihblnpomgpjkfddepdpdafhhepdbek

設定

1. モジュールを追加

![スクリーンショット 2016-05-16 11.53.29.png](https://qiita-image-store.s3.amazonaws.com/0/44835/202c1875-b7b5-5a6f-d54d-2785ab639333.png)

2. オプションを追加

```css:CSSオプションに追加する項目
div.panel.layout-panel.layout-panel-north,
div.panel.layout-panel.layout-panel-west.layout-split-west,
div.panel.layout-panel.layout-panel-east.layout-split-east,
div.panel-header
{
   display: none !important;
}

div.panel.layout-panel.layout-panel-south.layout-split-south
{
    height: 30% !important;
}
```

```js:HeadJSに追加する項目
setEditorTabSize('2');
```

![スクリーンショット 2016-05-16 11.51.23.png](https://qiita-image-store.s3.amazonaws.com/0/44835/697d78d4-73c6-529a-c04e-d3ffe77be83d.png)
OSX El capitan で brew update できない時は。

rbenv をアップデートしようと思い、

```
$ brew update
```
をしたら、エラーが走った。
どうやら OSX El capitan にアップデートした時に /usr/local のパーミッションが変わるらしく sudo chown -R <admin> /usr/local が必要とのこと。

```
$ sudo chown -R root /usr/local
$ sudo brew update
```

こちらでいけた。

ちなみに chown の -R オプションは、指定したディレクトリ及び内包するファイルやディレクトリの所有権を再帰的に変更するもの。

---

[追記]
その後、mysqlを起動しようとするとエラーを吐かれた。
/usr/local の所有者を一括でrootに変えた関係なので、_mysqlに戻してあげる。

```
$ sudo mysql.server start
. ERROR! The server quit without updating PID file (/usr/local/var/mysql/*****.local.pid).

...

$ sudo chown -R _mysql:_mysql /usr/local/var/mysql
$ sudo mysql.server start
. SUCCESS!
```
cisco

ciscoについてなのですが 画像で載せたのが今やってる問題なのですが
PC１、PC2、PC3、PC4のインターフェイスに
ip add dhcpと入力しIPアドレスとサブネットマスク![DSC_0061.JPG](https://qiita-image-store.s3.amazonaws.com/0/125156/a7e20a11-5727-5b50-6f05-c103c1acbf30.jpeg)
の割り当てをしようと思ったのですが
インターフェイスが指定されておらずどうすればよいかわからず困っています。
ローカルのSparkでS3のファイルを扱う


Sparkは、デフォルトではS3のスキーマ(s3, s3n, s3a)の設定が入ってなく、クラスパスも入ってないようなので、自分で設定する必要がある。

（ただし、EMR上や既存のHadoopクラスタで動作させるときは、既に以下の設定がcore-site.xmlなどに書かれていると思うので、不要です。これはあくまでhadoopの設定をしてないローカルでの動作を想定しています。）

ローカルではhadoop-awsがクラスパスに入ってなかったので、別途追加してあげる必要がある。

```scala
import org.apache.spark.{SparkConf, SparkContext}

object Hello {
  def main(args: Array[String]): Unit = {

    val fromFile = args(0) // ex. <bucketName>/<filePath>
    val toFile = args(1) // ex. <bucketName>/<filePath>
    val conf = new SparkConf().setAppName("local")
    val sc = new SparkContext(conf)

    val accessKey = sys.env("AWS_ACCESS_KEY_ID")
    val secretKey = sys.env("AWS_SECRET_ACCESS_KEY")

    sc.hadoopConfiguration.set("fs.s3n.awsAccessKeyId", accessKey)
    sc.hadoopConfiguration.set("fs.s3n.awsSecretAccessKey", secretKey)
    sc.hadoopConfiguration.set("fs.s3n.impl", "org.apache.hadoop.fs.s3native.NativeS3FileSystem")

    sc.hadoopConfiguration.set("fs.s3a.awsAccessKeyId", accessKey)
    sc.hadoopConfiguration.set("fs.s3a.awsSecretAccessKey", secretKey)
    sc.hadoopConfiguration.set("fs.s3a.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem")

    sc.hadoopConfiguration.set("fs.s3.awsAccessKeyId", accessKey)
    sc.hadoopConfiguration.set("fs.s3.awsSecretAccessKey", secretKey)
    sc.hadoopConfiguration.set("fs.s3.impl", "org.apache.hadoop.fs.s3.S3FileSystem")

    //s3スキーマは、hadoopで使われてるものとEMRで使われてるもので挙動が違うっぽいので
    //ローカルでの使用はオススメしない。
    //val logDataS3 = sc.textFile(s"s3://$fromFile")
    //logDataS3.saveAsTextFile(s"s3://${toFile}_s3")

    val logDataS3n = sc.textFile(s"s3n://$fromFile")
    logDataS3n.saveAsTextFile(s"s3n://${toFile}_s3n")

    val logDataS3a = sc.textFile(s"s3a://$fromFile")
    logDataS3a.saveAsTextFile(s"s3a://${toFile}_s3a")
  }
}

```

実行

```
./bin/spark-submit --class com.sample.Main --master local \
--packages org.apache.hadoop:hadoop-aws:2.7.1 \
yourSparkApp-assembly-1.0.jar \
<bucket>/input/path <bucket>/output/path
```

`--packages org.apache.hadoop:hadoop-aws:2.7.1` を指定しているところが大事。
これがないとClassNotFoundになる。

（EMR上では最初からクラスパスに入ってるはずなので不要）

## 備考

・ローカルでs3nで試すと、S3にゴミファイルができてしまった。
（おそらく、Hadoopがメタな情報として置いていたのが消されずに残ってしまった。）
そもそもs3nは古いスキーマっぽく、パフォーマンスなどの面でs3aの方が良さそうなので、問題なければそちらを使うとよさそう。

・コード中のコメントに書いたが、s3スキーマはローカルで使用するのはオススメしない。

参考：
https://wiki.apache.org/hadoop/AmazonS3
[.net c#]処理時間の計測

#VisualStudio c#で処理時間の計測を行う

今さら感がありますが、時々使うけど、細かい所を忘れちゃうので備忘録メモ。
.NET Framework 2.0以降で使用可能なStopwatchクラスを使用しての処理時間計測。

参考サイト様
http://dobon.net/vb/dotnet/system/stopwatch.html
http://www.remember-the-time.xyz/2010/04/visual-studio.html

```csharp:sample
using System.Diagnostics;

//Stopwatchオブジェクトを作成する
System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();

//ストップウォッチを開始する
sw.Start();

//時間を計測したい処理を記載

//ストップウォッチを止める
sw.Stop();

//結果を表示する
Debug.WriteLine(sw.Elapsed);
```

参考サイト様では、Consoleへの出力サンプルソースが記載されていたが、
それだと表示されなかったので、出力先をDebugに変更して使用。
「出力ウィンドウ」は [表示] - [出力] にて表示。
ビルド時にJsonConverterAttributeのコンストラクタでエラーが発生する罠を回避する


## はじめに
以前から謎のエラーが発生してビルドが出来ないことがあったのですが、理由が判明したので残しておきます。

## 対象者
PCLプロジェクトでjson.netを利用している人。

## 発生事象
初回のビルド時に以下のエラーが発生する。
一度ビルドに失敗したあと、再度ビルドすれば成功する。

> 重大度レベル	コード	説明	プロジェクト	ファイル	行	抑制状態
エラー	CA0001	CA0001 : mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes への参照を解決できませんでした。				アクティブ
> エラー	CA0001	CA0001 : モジュール 'JsonConverterAttributeError.Pcl' を読み取り中に以下のエラーが発生しました: メンバー参照を解決できませんでした: [Newtonsoft.Json, Version=8.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed]Newtonsoft.Json.JsonConverterAttribute::.ctor。				アクティブ

## 発生原因
PCLプロジェクトでJsonConverterAttribute属性を利用している状態でビルドに対するコード分析を有効化することで発生する。
PCLではない場合、クラッシックデスクトップ/Windows 8/ユニバーサルなプロジェクトでは発生しない。
PCLプロジェクトでもJsonConverterAttribute属性を利用しないか、ビルドに対するコード分析を有効にしていない場合は発生しない。

というわけで、PCLプロジェクトでJsonConverterAttribute属性を利用する場合は、ビルドに対するコード分析を有効にしないことをオススメします。

今回のサンプルコードは[こちら](https://bitbucket.org/Shigezo32/uwpverification/src/260ac94eba85af60782777a9435446ee58677536/JsonConverterAttributeError/?at=master)です。
Raspberry piでRadiko（ffmpegやcronの問題）

#Raspberry piでRadiko録音の問題
Raspberry piでRadiko録音する場合、通常は[Raspberry Piでradikoの再生、録音](http://blog.muchuu.net/post/110867859055/raspberry-piでradikoの再生録音)で紹介されているようにInstallを行えば問題ないのだけど、ffmpegが現在apt-get出来ない状態（開発者同士のくだらない喧嘩が原因のようだ・・・死ねばいいのに！）にあるため、若干その部分の変更が必要となるようだ。


##ffmpegを別個Installする
ffmpegをapt-get出来ないので、自分でInstallしなければならない。
それに関しては、[Raspberry PiでRadikoを録音 1](Raspberry PiでRadikoを録音 1)で紹介されているように、apge-getでSource関連をInstallし、make、make installする。
ただし、ffmpegを個別にInstallするとcron部分で問題が発生するので、下記に書いてあるavconvをInstallすることをお奨めする。

##ffmpegの代わりにavconvを使用する
ffmpegをInstallすると後で書かれている通り、cron設定で面倒になるので、ここでavconvをffmpegの代わりとして使用する。
まずは、avconvをInstallする。

```
$ sudo apt-get install libav-tools
```

次に、radiko.shの143行目の下記の部分を修正する。

修正前

```
  ffmpeg -ss ${starting} -i "${wkdir}/${tempname}.flv" \
```

修正後

```
  avconv -ss ${starting} -i "${wkdir}/${tempname}.flv" \
```

これでffmpegの代わりにavconvが変換するようになる。また、cronで録音設定をしても問題なく、変換される。

#定期録音をする場合のcronの書き方の補足
さて、上記の方法でffmpeg等をInstallでき、さてcronを仕込む場合、若干ネットで書かれている方法だとうまく動かないようだ。
例えば下記の様に記載している例や
`0 59 * * 2 ~/radiko.sh TBS`
下記の様に記載している例があるが
`0 59 * * 2 home/[Username]/radiko.sh TBS`
しかし、これだとうまく動かないようである。

radiko.shのパスをcronで通す場合、下記の様に絶対パスで書くのが正しい（現状は）書き方である。
`0 59 * * 2 /home/[Username]/radiko.sh TBS`

ちなみにcronのログの取り方は[crontabがどうしても動かないときに確認すべき3つの点+α](http://d.hatena.ne.jp/natsumesouxx/20100313/1268479064)に書かれているように、次のように書けばいい（>>log.logは省略可）。
`コマンド >>log.log 2>>errlog.log`

##rec_radiko.shに関して
[rec_radiko.sh](https://gist.github.com/raw/3956266/0dc83895770e26a7c37104d896a150c8bb1dffbb/rec_radiko.sh)があるが、こちらはまだ検証していない。
今使っているRaspberryは動画サーバも兼務となっているので、RaspberryPiでffmpegの処理をさせるのは処理落ちの心配もあり、当面このままの予定。
標準入力の罠とか


# Questionとか
いきなりですがクイズです。
さて、以下のコードを実行した場合、どんなExceptionが起こるでしょうか。

```java:Test.java
import java.util.Scanner;
public class Test {
	public static void main(String[] args) {
		System.out.println("終了は「end」を入力");
		while(true){
			try(Scanner scan=new Scanner(System.in)){
				String line=scan.nextLine();
				if("end".equals(line))break;
				System.out.println(line);
			}
		}
	}
}
```

# Answerとか
パッと見、そもそもExceptionになりそうもないのですが、実は**致命的なミス**をしているため、何か入力するとscan.next()でExceptionが発生します。
そのExceptionは**NoSuchElementException**です。
いみわかんなーい！
ごもっとも。
そもそもNoSuchElementException自体かなりのレアExceptionで、あんまり見たことないですし。
JavaDocを見ると、nextLine()のNoSuchElementExceptionに関しては以下のように書かれています。
>NoSuchElementException - 行が見つからなかった場合

うわ、役に立たない説明！
この説明でわかったら逆に凄いですね！

# 説明とか

実際に何が起こったのかをコードを追って確認しましょう。
このプログラムはJava7で導入されたtry-with-resource構文が使用されています。
try-with-resource構文はtryブロック終了時(finally時)に暗黙的にリソースをcloseします。
ですから、このブロックをJava6風に書くと

```java
		while(true){
			Scanner scan=null;
			try{
				scan=new Scanner(System.in);
				String line=scan.nextLine();
				if("end".equals(line))break;
				System.out.println(line);
			}finally{
				scan.close();
			}
		}
```
となります。
これでわかりましたね。
try-with-resouceによる暗黙のcloseが原因で、closeされたInputStream(=System.in)に対してnextLine()を発行したせいで、エラーになったのです。


# 修正とか

このコードを直すなら

```java
		System.out.println("終了は「end」を入力");
		try(Scanner scan=new Scanner(System.in)){
			while(true){
				String line=scan.nextLine();
				if("end".equals(line))break;
				System.out.println(line);
			}
		}
```

となりますが、（これがまた恐ろしいルールですが）closeさえしなければScannerは何度生成しても構わないので

```java
		while(true){
			Scanner scan=new Scanner(System.in);
			String line=scan.nextLine();
			if("end".equals(line))break;
			System.out.println(line);
		}
```

と書いても直ります。

# 結論とか
こんなミスは普通はしないのですが、初心者さんで「リソースは必ずcloseしなきゃあかんねん」みたいな原理原則をきっちり守るとかえってエラーになる上に、そのエラーの原因がさっぱりわからなくて途方に暮れること請け合いです。
おまけにしょっぱなに正しい値(「end」という文字列）を入れるとエラーにならないため、「正しい値が入力されるまでループ」なんて処理を書かせて、正常ケースしかチェックしてないと潜在バグに気づかないという恐ろしいことが起こり、対応する人もなんでエラーになってるんだこれ、と一緒に途方に暮れたりしますので、**NoSuchElementExcepitonとかヘンテコなエラーが出たときは、この文を思い出す**と良いことがあるかも知れません。
ネットワークテクニカルコマンド

# DNS
## ドメイン名からipアドレスDNSサーバ名を表示する．
```
nslookup ドメイン名
```

# DHCP
## IPアドレスとMACアドレス対応表
```
arp -n
```

# TCPコネクション
```
netstat -nat
```
メソッドチェインでUIButtonのプロパティを設定したかった

コードで、各UIを設定している時に

```CustomView.swift

class CustomView: UIView {

    var hogeButton = UIButton()

    override init(frame: CGRect) {
        super.init(frame: frame)
        self.backgroundColor = UIColor.whiteColor()

        hogeButton.setTitle("登録", forState: .Normal)
        hogeButton.tintColor          = UIColor.whiteColor()
        hogeButton.backgroundColor    = UIColor.blueColor()
        hogeButton.imageEdgeInsets    = UIEdgeInsets(top: 0, left: -40, bottom: 0, right: 40)
        hogeButton.titleLabel!.font   = UIFont(name:"HelveticaNeue-Bold",size:17)
        hogeButton.layer.cornerRadius = 3.0
        addSubview(hogeButton)
    }

    override func layoutSubviews() {
        super.layoutSubviews()
        let maxX = self.frame.width
        let maxY = self.frame.height
        hogeButton.frame = CGRectMake(5, maxY+10, maxX/2, 40)
    }
```
メソッドチェインでプロパティの設定とか書けたら、もっとまとまりがあって便利なんじゃないかと思いました。

とりあえず、Extensionでこんな感じに作ってみました。

```UIButton+methodChain.swift
extension UIButton {
    func mc_setTitle(title: String, state: UIControlState) -> UIButton {
        self.setTitle(title, forState: state)
        return self
    }
    
    func mc_setTitleColor(titleColor: UIColor, state: UIControlState) -> UIButton {
        self.setTitleColor(titleColor, forState: state)
        return self
    }
    
    func mc_setImage(image: UIImage, state: UIControlState) -> UIButton {
        self.setImage(image, forState: state)
        return self
    }
    
    func mc_setBorder(borderColor: UIColor, borderWidth: CGFloat) -> UIButton {
        self.layer.borderColor = borderColor.CGColor
        self.layer.borderWidth = borderWidth
        return self
    }
    
    func mc_setBackgroundColor(color: UIColor) -> UIButton {
        self.backgroundColor = color
        return self
    }
}
```

で、使ってみたらこんな感じに

```CustomView.swift

class CustomView: UIView {

    var hogeButton = UIButton()

    override init(frame: CGRect) {
        super.init(frame: frame)
        self.backgroundColor = UIColor.whiteColor()

        hogeButton.mc_setTitle("ほげほげ", state: .Normal)
            .mc_setTitleColor(UIColor.blackColor(), state: .Normal)
            .mc_setImage(UIImage(named: "close")!, state: .Normal)
            .mc_setBackgroundColor(UIColor.redColor())
            .mc_setBorder(UIColor.whiteColor(), borderWidth: 2.0)
        addSubview(hogeButton)
    }

    override func layoutSubviews() {
        super.layoutSubviews()
        let maxX = self.frame.width
        let maxY = self.frame.height
        hogeButton.frame  = CGRectMake(0, 0, 200, 60)
        hogeButton.center = CGPoint(x: maxX/2, y: maxY/2)
    }
```

うーん？まとまった？
途中で、Extensionを各UI分作る気力が起きず、妥協しました。
もっとよりよい方法があったら、ご教授お願い致します。
jQuery 1.12. だと a[href^=#] ではなく a[href^="#"] って書かないとに

タイトルで大体書き終わった
「href」属性の値になるとこは引用符が要りますってことかな

jQuery 1.12.0 now requires quotes around anchors
https://github.com/jquery/jquery/issues/2829

ということらしいです
読めませんけどね英語なんて

ページ上部にヌルヌルしていく系のソースを流用するとかで発現するんじゃないかなぁ
railsでUTCで入っている時間をlocal時間で表示する

# Localタイムを設定

```rb:config/application.rb

config.time_zone = 'Tokyo'
```
とすれば、


```:変更前
Sun, 22 Jun 2014 15:08:54 UTC +00:00
```
となっていたのが

```:変更後
Sun, 22 Jun 2014 15:08:54 JST +09:00
```
となって、目的を達成出来た！

# 参考ページ

こちらの5番目
http://stackoverflow.com/questions/1386871/convert-time-from-one-time-zone-to-another-in-rails

http://api.rubyonrails.org/classes/ActiveSupport/TimeWithZone.html
CSSでラジオボタンとチェックボックスをデザインする

チェックボックスやラジオボタンをデザインする方法の1つをご紹介。

## チェックボックスをデザイン


![a.png](https://qiita-image-store.s3.amazonaws.com/0/48585/78901800-fcb0-55f2-4757-a10216880513.png)

1. `<input type="checkbox">`自体を非表示にします。
2. 非表示にしてもチェック出来るようにする為、`<input type="checkbox">`を`<label>`タグで囲います。
3. チェックボックスを表示させる為、`<input type="checkbox">`の後ろに`<span>`要素を入れます。
4. チェックボックスが、チェックされてる時、されてな時に応じて`<span>`のbefore擬似要素に対して、任意のスタイルを指定してあげます。

```html:html
<label>
  <input type="checkbox" class="checkbox" />
  <span class="checkbox-icon"></span>
  チェックボックス
</label>
```

```css:css
.checkbox {
  display: none;
}
.checkbox + .checkbox-icon {
  position: relative;
  vertical-align: middle;
}
.checkbox + .checkbox-icon:before {
  content: "\f372";
  font-family: "Ionicons";
  color: #ccc;
  font-size: 22px;
}
.checkbox:checked + .checkbox-icon:before {
  content: "\f374";
  color: #17bcdf;
}

```

## ラジオボタンをデザイン

![b.png](https://qiita-image-store.s3.amazonaws.com/0/48585/0f176c98-0981-52b9-e013-d72127d0f278.png)

上記と同じ方法でラジオボタンもデザインできます。

```html:html
<label>
  <input type="radio" name="radio" class="radio" />
  <span class="radio-icon"></span>
  ラジオボタン1
</label>    
<label>
  <input type="radio" name="radio" class="radio" />
  <span class="radio-icon"></span>
  ラジオボタン2
</label>  
```

```css:css
.radio {
  display: none;
}
.radio + .radio-icon:before {
  content: "\f3a6";
  font-family: "Ionicons";
  color: #ccc;
  font-size: 22px;
}
.radio:checked + .radio-icon:before {
  content: "\f3a7";
  color: #17bcdf;
}
```
Dockerで立てたmysqlにgolangから接続する方法 


golangからはデフォルトで入っているdbコネクタ`"database/sql"`とドライバ`"github.com/go-sql-driver/mysql"`からmysqlに接続できます。
ただ、dockerで立てたmysqlに対して、localhostへの接続がうまく行かなかったので備忘録

## 前提

dockerは先日限定ユーザにリリースされた[docker beta](https://beta.docker.com/)を使用しています。(多分boot2dockerを使っている場合はそれほど難しくないかも)
ホストOSは`OSX El Capitan`です

## 解決策

### dockerでmysqlを立ち上げる

今回は[docker-compose](https://docs.docker.com/compose/)を使用しました。

```bash:docker-compose.yml
mysql:
  image: mysql
  ports:
    - "3306:3306" # <-これがないと外からアクセス出来ない
  expose:
    - 3306
  environment:
    MYSQL_ROOT_PASSWORD: pass
    MYSQL_DATABASE: db
    MYSQL_USER: user
    MYSQL_PASSWORD: pass
```
上記を設定した後`docker-compose up -d`でmysqlサーバの設定完了


### /etc/hostsでlocalhost以外のホストを設定する

mysqlクライアントはlocalhostへの接続をしようとしたときに、ホストにあるmysql.sockを読みに行こうとしますが、dockerで立ち上げているので、そんなものは無いと怒られます。
なので、あたかもリモートサーバにアクセスしているかのように振る舞う必要があるので、暫定的にhostsにlocalhost以外の名前をわりあてました。

```bash:/etc/hosts
127.0.0.1       mysql
```
### golangに設定を記述する

上記設定が終われば後はgolangから接続するだけです。

```go:main.go
package main

import (
	"database/sql"
	_ "github.com/go-sql-driver/mysql"
)
func main() {
	dbconf := "user:pass@tcp(mysql:3306)/db"
	db, err := sql.Open("mysql", dbconf)
}
```
pymol マウス 操作

# Editing mode

![image](https://qiita-image-store.s3.amazonaws.com/0/99215/435d708f-9070-6026-f983-6bd0de0a9716.png)

Rota: Rotate angle
RotO: Rotate object
MovA: Move atom
MvAZ: Move atom in Z axis
PkAt: Pick atom
MovA: Move atom
vimのコマンドラインでの補完が使いづらい

# 動機
`:call dein#update()`を呼びだしたいけど`:call dein`で補完`<tab>`すると`call dein#_get_cache_file()`になってしまう。
`#`押せばいい話なんですけど、`<tab>`の方が楽なんで設定を調べてみました。

# 設定
```vim
set wildmode=longest:full,full
```

# 結果
`:call dein`補完`#`すると`:call dein#`と表示されるようになった。

# 参考
http://cohama.hateblo.jp/entry/20130529/1369843236
Spark on EMR(YARN)の個人的Tips

## 目的

Sparkアプリを動かしてきた中でハマったところをまとめます。
（随時追加予定）

## とりあえず動かす

Scala版のSpark Jarの最小限の構成
http://qiita.com/uryyyyyyy/items/a4524e87537e3a8bb745

Spark2.0をEMRで試す
http://qiita.com/uryyyyyyy/items/15f2e8f153aa86375227

YARN上でジョブを走らせてみる（Spark編）
http://qiita.com/uryyyyyyy/items/72624c7b1e9d021d9ee0

## Scala2.11のPre defとかでClassNotFound

Spark-assemblyのScalaバージョンと、自身が作ったSparkアプリのScalaバージョンが違う。


Scala2.11を使いたい場合は、こちらの記事を参考に、Scala2.11ビルド版の `spark.yarn.jar` を指定しましょう。

http://qiita.com/uryyyyyyy/items/e9ec40a8c748d82d4bc4

## Key毎に異なるファイルを出力したい。

参考：
http://qiita.com/uryyyyyyy/items/d49ef0ab4eb25d52c43c

## MapでSerializeエラーで怒られる

（Sparkに限らないですが、、）

mapValuesを使っている場合、それがシリアライズされてない。

こちらのissueを参照
https://issues.scala-lang.org/browse/SI-7005

（Scala2.11でもまだ治ってないぽい。）

```
hoge.mapValues().map(identity)
```

などmapを一度噛ませればいけた。

## リソースを使いまわしたい。

例えば外部コネクションなど（本来はmap/reduce処理ですべきではないのだが、、）を使いたい場合、Driver上でインスタンスを作ってしまうと、それを各ExecutorにbroadCastすることになり、Seriarizableでないと怒られたり、コネクション使いまわして変なところで怒られる危険性がある。
そこで、それぞれのExecutor上で作るようにしてあげる必要がある。

参考：
http://qiita.com/uryyyyyyy/items/d59f34ce9e9f6e98329d

## 環境変数を使いたい。

参考；
http://qiita.com/uryyyyyyy/items/d64f131619eb0e1de195

## sparkアプリ内のジョブを並列に実行する。

（map/reduce内でやるのは良くないと知りつつも）外部リソースにアクセスするなどが必要になった場合、それのIO Waitを有効に使いたいので、その間に他のJobも並列で走らせたいなどの需要がある。

参考：
http://qiita.com/uryyyyyyy/items/512e3bd0bdab7223578d

## Driverで取得したデータをbroadcastする。

Sparkのプログラミング作法として、Driverで共通データの準備とRDD、DAGの生成を行って、Executorに処理をお願いすることになる。

受け渡す方法は、sc.broadcastを使って明示的に渡すか、valで用意したデータを暗黙に渡すことも出来る。

```scala:明示Ver.
val masterData = sc.broadcast(fetchMasterData())

rdd.map(v => somelogic(v, masterData.value))
```

```scala:暗黙Ver.
val masterData = fetchMasterData()

rdd.map(v => somelogic(v, masterData))
```

## EMRからS3を操作する。

参考：
http://qiita.com/uryyyyyyy/items/19773e3263711646ceb3

### ローカルからS3を操作する。

参考：
http://qiita.com/uryyyyyyy/items/b1f7a9fea928e1003602

## Spark WebUIで色々なデータをチェックする。

TODO

## Sparkでのリトライの作法

基本的には冪等に作るべし
どうしても冪等にならなそうな場合は、影響を局所化すべし。
Sparkのリトライはプログラムからは当てにしないのが吉。

## 例外の吐かれる場所

collect forEachなどが走るタイミングで例外が吐かれる。
それまでの処理は遅延で処理される。

## ログ設定をする。

参考：
http://qiita.com/uryyyyyyy/items/0f5026ffa998c1bac9c7

## Java８対応のbootstrap

参考：
http://qiita.com/uryyyyyyy/items/e9ec40a8c748d82d4bc4

また、Stepの追加を受け入れられるようにするには一工夫必要。


## EMRのメモリ・コア割り当て

EMRでのSparkに割り当てられるメモリ・コアの上限メモ
http://qiita.com/uryyyyyyy/items/5cc7fa8957ad5953f111

## ログ調査

http://qiita.com/uryyyyyyy/items/561e44bc1a80bc47b381
Spark on EMRでS3のファイルを扱う


## 概要
Sparkで、`sc.textFile`, `rdd.saveAsTextFile`あたりは色々なサンプルに書いてありますが、他の例はあまり見なかったのでメモしておきます。

## やりかた

`Path#getFileSystem(sc.hadoopConfiguration)`を使う

ファイルの存在確認

```scala
    val path = "s3://hoge"
    val fsPath = new Path(path)
    val fsOut = fsPath.getFileSystem(sc.hadoopConfiguration)
    if (fsOut.exists(fsPath)) {
      println(s"input path found. path: $path")
    }else{
      println(s"input path not found. path: $path")
    }
```

削除。

```scala
    val path = "s3://hoge"
    val fsPath = new Path(path)
    val fsOut = fsPath.getFileSystem(sc.hadoopConfiguration)
    if (fsOut.exists(fsPath)) {
      fsOut.delete(fsPath, true)
      println(s"deleted. path: $path")
    }
```

## 注意

`sc.textFile` などもそうだが、s3を使おうと思うとHadoopクラスタに以下の設定がされていて、クラスパスも通ってる必要がある様子。(s3, s3nスキーマを使う場合)

```xml:core-site.xml
<property>
  <name>fs.s3.impl</name>
  <value>org.apache.hadoop.fs.s3.S3FileSystem</value>
</property>

<property>
  <name>fs.s3n.impl</name>
  <value>org.apache.hadoop.fs.s3native.NativeS3FileSystem</value>
</property>
```

```xml:core-site.xml
<property>
  <name>fs.s3.awsAccessKeyId</name>
  <value>some id</value>
</property>

<property>
  <name>fs.s3n.awsAccessKeyId</name>
  <value>some id</value>
</property>

<property>
  <name>fs.s3.awsSecretAccessKey</name>
  <value>some key</value>
</property>

<property>
  <name>fs.s3n.awsSecretAccessKey</name>
  <value>some key</value>
</property>
```

## TODO

- .crcファイルはどういうときに作られるんだろう。
- localのspark-submitでs3に繋ごうとするとClassNotFoundExceptionで落ちる。
  - Sparkデフォルトでは `org.apache.hadoop.fs.s3native.NativeS3FileSystem` が入ってない。
  - Jarを追加すれば普通に動きそう。
CentOS 7.2にMATEを導入する(メモ)

*CentOS 7.2に、MATEを導入した際のメモ*

#はじめに
Ubuntu 14.04上のVirtual BoxにCentOS 7.2を導入した。
CentOS 7.2では、デスクトップ環境にGNOME3が装備されているが、今ひとつ使いにくく感じるので、MATEを導入することにした。

#MATEとは
- GNOME2からフォークされたデスクトップ環境。

#導入方法
1. EPELリポジトリを追加する
`sudo yum install epel-release.noarch`

1. /etc/yum.confの設定する
`sudo gedit /etc/yum.conf`
最終行に下記を追加して、保存する
`group_package_types=default,mandatory`

1. MATEをインストールする
`sudo yum --enablerepo=epel groupinstall mate-desktop`

注)
No Presto metadata available for base
libisofs-1.2.8-4.el7.x86_64.rp FAILED 
とエラーが出る時は、
ftp://www.rpmfind.net/linux/RPM/centos/7.2.1511/x86_64/Packages/libisofs-1.2.8-4.el7.x86_64.html
からlibisofs-1.2.8-4.el7.x86_64.rpmをダウンロードして、
`rpm -ivh libisofs-1.2.8-4.el7.x86_64.rpm`
を実行後、再度MATEをインストールする。


1. 再起動する

#使い方
1. ログイン画面で、MATEを選択する
![login.png](https://qiita-image-store.s3.amazonaws.com/0/87590/73075799-7596-42f6-538e-7bfd19d21c22.png)


3. MATEのデスクトップが表示される
![MATE.png](https://qiita-image-store.s3.amazonaws.com/0/87590/019f5df6-2c11-2638-6d86-dc450449b7fe.png)

#参考
本メモを作成するにあたり、下記を参考にしました。サイトの作者に深く感謝申し上げます。
>EPELリポジトリの追加
>http://note.kurodigi.com/centos7-epel/
>MATEのインストール
>http://note.kurodigi.com/centos7-mate/
CentOS 7.2でかな漢字変換できるようにする(メモ)

*CentOS 7.2で、かな漢字変換できるようにした際のメモ*

#はじめに
Ubuntu 14.04上のVirtual BoxにCentOS 7.2を導入した。
CentOS 7.2をインストールした際、「地域と言語」の設定を「言語」を日本語、「フォーマット」を日本、「入力ソース」を日本語に設定したのだが、漢字キーを押し文字を入力しようとしても、かな漢字変換ができない。そこで、かな漢字変換できるように設定の変更を行った。

#設定変更方法
##デスクトップがGNOMEクラッシックの場合
1. 「アプリケーション」メニューから「システムツール」を選び、「設定」を選択する。
1. 「パーソナル」の項目から、「地域と言語」を選ぶ。
1. 「入力ソース」の「+」ボタンをクリックし、「入力ソースの追加」で「日本語」を選択する。
1. 「日本語（かな漢字）」を選択し、「追加ボタン」をクリックする。
1. 「地域と言語」が表示される。「入力ソース」の項目に、「日本語（かな漢字）」が追加表示されている。
1. 「地域と言語」をクローズする。
1. 適当なアプリを立ち上げ、漢字キーを押し、その後、かな漢字変換で日本語入力できるかを確認する。

#備考
デスクトップは、GNOMEクラッシックでなくてもできると思いますが、未調査です。
【初心者】\（バックスラッシュ）を簡単に入力できる設定

#\（バックスラッシュ）の入力方法

C言語などを学習していると"\n"などでバックスラッシュを入力する機会が多いと思います。私自身、C言語を学習し始めたばかりなので、**option(alt) keyを押しながら¥を押さないと\にならない**なんて、作業効率が落ちる気がして面倒だなと辟易してました。


#実はシステム環境設定で簡単に入力できる設定がある

たまたまシステム環境設定をいじっていたら驚くことにちゃんとした設定がありました……。
![スクリーンショット 2016-05-15 9.42.33.png](https://qiita-image-store.s3.amazonaws.com/0/124071/5469de79-748b-c605-2022-90699981ba2c.png)


画像のように、システム環境設定＞キーボード＞入力ソースの下部で変更可能です。

検索してもあまり出ていなかったので共有です。

※¥マークを入力するにはoption(alt)keyの入力が必要となりますのでご注意を。
Nodeプロジェクトで環境依存の設定の管理方法

Nodeプロジェクトで環境依存の設定の管理方法を紹介します。例えばDBの設定は、デプロイ環境や各ユーザの開発環境に依存するので、環境依存の設定といえるでしょう。これらの設定はコード内に埋め込まず、ユーザ各自またはデプロイスクリプトに任せるべきです。環境依存の設定をNodeプロジェクトで管理するとき、[dotenv](https://www.npmjs.com/package/dotenv)モジュールが便利です。

<i class="fa fa-code"></i> dotenvを使う
---------------------------------------

dotenvモジュールは、`.env` ファイルから `process.env` へ環境変数をロードするモジュールです。dotenvを使うと、プロジェクトのコードから独立した環境依存の設定を、ローカル単位で管理することができます。

dotenvパッケージは `npm` からインストールできます。依存モジュールがゼロなのが嬉しいです。

```sh
npm install dotenv --save
```
`.env`ファイルは、プロジェクトのルートディレクトリに配置します。

```sh:.env
DB_HOST="localhost"
DB_USER="root"
DB_PASS="s1mpl3"
```

dotenvを使って環境変数をロードするには、次のように記述します。

```javascript
// 設定を.envからロード
require('dotenv').config();

// process.envから参照可能
db.connect({
  host: process.env.DB_HOST,
  username: process.env.DB_USER,
  password: process.env.DB_PASS
});
```

<i class="fa fa-bicycle"></i> dotenvを使った運用
------------------------------------------------

`.env` ファイルは通常、リポジトリに含ませるべきではありません。そのためプロジェクトの `.gitignore` にルールを追加します。

```:.gitignore
/.env
```

また新たなプロジェクト参入者が容易に `.env` ファイルを設定できるよう、`.env` の雛形をプロジェクトに追加しておくと親切です。

```sh:.env.sample
DB_HOST="db-server.example.com"
DB_USER="db_user"
DB_PASS="db_password"
```
SparkでJobを並列に実行する


## 概要

とあるSparkアプリで、外部リソースにアクセスすることになったのだが、負荷を減らすために少しずつ処理したいというニーズが出てきた。
そこで、Sparkアプリ内の各Jobの並列実行を試してみました。

（このようにmap/reduce内で外部リソースに頻繁にアクセスするのは一般的ではないですが、重い処理に全リソースを割かれないで別の処理も並列で走らせたい、という需要はあるのではと思っています。）

## やりかた

https://spark.apache.org/docs/1.6.1/job-scheduling.html
（この情報は不十分なので調べるのが面倒でした。。。）

### schedulerPoolの設定

まずfairScheduler.xmlを用意して、どこかのパスに置いておく。

```xml
<?xml version="1.0"?>
<allocations>
  <pool name="production">
    <schedulingMode>FAIR</schedulingMode>
    <weight>1</weight>
    <minShare>2</minShare>
  </pool>
  <pool name="test">
    <schedulingMode>FIFO</schedulingMode>
    <weight>2</weight>
    <minShare>3</minShare>
  </pool>
</allocations>
```

次に、SparkContextに、modeがFAIRであることを伝える。
（これをしないとxmlを呼んでもちゃんとpoolが作られない。デフォルトではこの値はFIFOになっている。）

```Scala
conf.set("spark.scheduler.mode", "FAIR")
```

そして、先ほど用意したscheduler.xmlを読ませる。

```Scala
conf.set("spark.scheduler.allocation.file", "/your/path/spark-fairScheduler.xml")
```

**※ここでxmlをresourcesとしてJarの中に含めてしまうと、使うときにはjarから一度別のパスに取り出してからそのパスを指定しないといけない。**

```Scala
    val xml = getClass.getClassLoader.getResourceAsStream("pool.xml")
    val homeDir = System.getProperty("user.home")
    val f = new File(homeDir + "/.pool.xml")

    val in = scala.io.Source.fromInputStream(xml)
    val out = new java.io.PrintWriter(f)
    try { in.getLines().foreach(out.print) }
    finally { out.close() }
    conf.set("spark.scheduler.allocation.file", homeDir + "/.pool.xml")
```

### それぞれのpoolにJobを投入してみる。

ただJobを投入するだけだと、Jobが生成された順番でFIFOで処理されてしまうので、Futureなどを用いて別スレッドからpoolへJob投入してあげる必要があるようです。
サンプルはこんな形です。

```Scala
    val f1 = Future {
      //backend logic
      sc.setLocalProperty("spark.scheduler.pool", "backend")
      println(sc.getSchedulingMode)
      rdd.saveAsTextFile(file2)

    }
    //main logic
    sc.setLocalProperty("spark.scheduler.pool", "main")
    println(sc.getSchedulingMode)
    rdd.saveAsTextFile(file1)

    Await.ready(f1, Duration.Inf)
```

ここで大事なのは、`saveAsTextFile`のような、実際にRDDの処理が走りだすような記述を書いてあげる必要があることです。ただのmapやreduceだけだと、まだRDDの処理は始まらないのでpoolに貯められることも無いと思います。

### 動かしてみる

こんな感じになれば成功

```
[Stage 0:=>               (9 + 1) / 100][Stage 1:==>             (15 + 3) / 100]
```
この例だと、Stage0は1つのExecutorが、Stage1では３つのExecutorが処理をしていることになります。

また、SparkのWebUIからも対象のJobがどのpoolで実行されているかは見ることができます。
Zybo > Chronicles blog 13 > GPIO > interrupt > トリガタイプの設定 > XGpioPs_SetIntrTypePin() > エッジトリガ / レベルトリガ

MicroZed Chronicles リスト http://adiuvoengineering.com/?page_id=285
@ Adam Taylor blog
https://forums.xilinx.com/t5/Xcell-Daily-Blog/More-About-MicroZed-Interrupts-Adam-Taylor-s-MicroZed-Chronicles/ba-p/398357

> We also need to configure the interrupt correctly: edge triggered or level triggered and which edge or level? We configure the interrupt using this function:

```
void XGpioPs_SetIntrTypePin(XGpioPs *InstancePtr, int Pin, u8 IrqType);
```

> Where the IrqType is defined by one of the five definitions within the xgpiops.h file:

```
#define XGPIOPS_IRQ_TYPE_EDGE_RISING 0      /**< Interrupt on Rising edge */
#define XGPIOPS_IRQ_TYPE_EDGE_FALLING 1   /**< Interrupt Falling edge */
#define XGPIOPS_IRQ_TYPE_EDGE_BOTH 2        /**< Interrupt on both edges */
#define XGPIOPS_IRQ_TYPE_LEVEL_HIGH 3        /**< Interrupt on high level */
#define XGPIOPS_IRQ_TYPE_LEVEL_LOW 4         /**< Interrupt on low level */
```
Zybo > Chronicles blog 13 > GPIO > interrupt > I/O bankでの設定 / 個別ピンの設定 > XGpioPs_IntrEnable() / XGpioPs_IntrEnablePin()

MicroZed Chronicles リスト http://adiuvoengineering.com/?page_id=285
@ Adam Taylor blog
https://forums.xilinx.com/t5/Xcell-Daily-Blog/More-About-MicroZed-Interrupts-Adam-Taylor-s-MicroZed-Chronicles/ba-p/398357

> When it comes to configuring the GPIO to function as an interrupt source, we can configure either an entire I/O bank or an individual pin using functions provided within xgpiops.h. For example:
 
 
```
void XGpioPs_IntrEnable(XGpioPs *InstancePtr, u8 Bank, u32 Mask);
```

``` 
void XGpioPs_IntrEnablePin(XGpioPs *InstancePtr, int Pin);
```

namingが相変わらず悪い。XGpioPs_IntrEnable()はXGpioPs_IntrEnableBank()などであれば、ソースリーディング時にトラブルが減るのだが。
【PureData】LeapMotionでフィードバックエフェクト

#動画

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

#LeapMotionでフィードバックエフェクト
2016年5月15日に行われた
[「第12回エフェクターミニハッカソン」と「第14回Pure Dataパッチングサークル東京」共同開催](http://effectorhack.connpass.com/event/31127/?utm_campaign=event_publish_to_follower&utm_medium=twitter&utm_source=notifications)

![image](https://qiita-image-store.s3.amazonaws.com/0/96808/5f44d4b0-71f4-6bfe-1a77-3d6ffae82905.png)

で作ったものの紹介です。

![image](https://qiita-image-store.s3.amazonaws.com/0/96808/ff460589-693e-62e2-8635-b9fb7c34ab8c.png)

#パッチのダウンロード
[8tapdelayliapmotion.zip](http://chahix.ddo.jp/~chahi/pd/20160516/8tapdelayliapmotion.zip)

#遊び方
第14回Pure Dataパッチングサークル東京で作成したパッチです。
master.pdを起動します。

leapmotionのPureDataパッチを取得し
http://puredatajapan.info/?page_id=1514
leap_motion_help.pdを起動、
metroを動かします。
fingersのpositionをチェック入れます。
![image](https://qiita-image-store.s3.amazonaws.com/0/96808/532039b8-9813-e3de-b25a-d57f861e0613.png)


leapmotionをつないで、指をかざすと数値が変化します。

master.pdの
input_volumeとamplitude controls: on にすると音がでます。
![image](https://qiita-image-store.s3.amazonaws.com/0/96808/3454073b-0231-6931-8b58-7c0fe542875e.png)

8tapdelayを指の位置で操作する感じのものです。

![image](https://qiita-image-store.s3.amazonaws.com/0/96808/2e63ca8d-1d2e-0a22-c958-4c15747304c2.png)
指の位置（高さ）でディレイ時間が変化します。

#音楽のタイムストレッチみたいになる
手を近づけると短いサイクル、遠ざけると長いサイクル。
ので、質の低いグラニュラっぽい感じで音の伸び縮みが味わえます。

手を斜めにすると夢のようなディレイにつつまれます。

LOGICのDelay Designerのタイミングを指の位置で変更し続けているようなイメージ
![image](https://qiita-image-store.s3.amazonaws.com/0/96808/84761514-d0bd-e0a3-cbe4-a4f0abf281fe.png)
（ピッチシフトやレゾナンスなどフィルターみたいな効果も指の形で作れるはず）

##オーディオ入力はPDメニューから変更できます
音楽とかにかけてみたい場合などはここらへんをいじる。
![image](https://qiita-image-store.s3.amazonaws.com/0/96808/f357885d-87e6-6342-0c1a-7228767d0b5f.png)

![image](https://qiita-image-store.s3.amazonaws.com/0/96808/148cf1af-83b1-d0ba-b52a-5650fc85189d.png)
Zybo > Chronicles blog 13 > ヘッダーファイル > Xparameters.h / XGPIOS.h / Xscugic.h / Xil_exception.h > 各ヘッダーの説明

MicroZed Chronicles リスト http://adiuvoengineering.com/?page_id=285
@ Adam Taylor blog
https://forums.xilinx.com/t5/Xcell-Daily-Blog/More-About-MicroZed-Interrupts-Adam-Taylor-s-MicroZed-Chronicles/ba-p/398357


- Xparameters.h – defines processor device IDs
- XGPIOS.h – drivers for GPIO configuration and use
- Xscugic.h – drivers for GIC (General Interrupt Controller) configuration and use
- Xil_exception.h – exception functions for the ARM Cortex-A9 processor
Spark on YARNで環境変数を使いたい


## 概要

Sparkアプリでも環境変数を使いたい場合があったのでやり方をまとめておく。

## やりかた

調べた感じ、DriverとExecutorとで渡し方が違うようです。

- Driver
  - http://spark.apache.org/docs/latest/running-on-yarn.html#spark-properties
  - `spark.yarn.appMasterEnv.[EnvironmentVariableName]`
- Executor
  - http://spark.apache.org/docs/latest/configuration.html#available-properties
  - `spark.executorEnv.[EnvironmentVariableName]`


具体的な指定方法としては、

```
spark-submit <他の設定とか> \
--conf spark.yarn.appMasterEnv.AWS_ACCESS_KEY_ID="HOGE" \
--conf spark.executorEnv.AWS_ACCESS_KEY_ID="HOGE" \
<実行するJarとか引数とか>
```

という感じです。
SparkでKey毎にファイル出力をしたい



## 概要

あるSparkアプリで、RDDの出力を1ファイルでなく特定のKey毎に分けたくなった。
わかりやすい方法がなかったので、試してみた内容を記しておきます。

## 方法

まずはこちらのissueを見ます。
https://issues.apache.org/jira/browse/SPARK-3533

どうやら `saveAsTextFileByKey()` というドンピシャなAPIはなく、work aroundで対応しろとのことでした。（それでcloseされてます。）

今回は、2つ紹介されている方法のうち1つ目をやってみました。

http://stackoverflow.com/questions/23995040/write-to-multiple-outputs-by-key-spark-one-spark-job/26051042#26051042

ただ、この方法は、`.partitionBy(new HashPartitioner(num))`に重要な問題が潜んでいます。

具体的には、
**Partitionを再マッピングする際に、特定のKeyの要素が多すぎて１Partitionに乗り切らなかった場合に、複数Partition（Executor）から同一のファイルパスに対して出力され書き込みがバッティングする**です。

## 問題点を踏まえて、正しい解決法

まず、`RDDMultipleTextOutputFormat`を作成します。

```Scala
class RDDMultipleTextOutputFormat extends MultipleTextOutputFormat[Any, Any] {
  override def generateActualKey(key: Any, value: Any): Any = 
    NullWritable.get()

  override def generateFileNameForKeyValue(key: Any, value: Any, name: String): String = 
    key.asInstanceOf[String]
}
```

次に、出力対象のKey（String型になってるはず）にパーティション番号を付与します。

```Scala
val targetRDD = someRDD.mapPartitionsWithIndex((p, elms) => {
        elms.map { case (key, val) => (s"$key/$p.log", val) }
      })
```

最後に、そのRDDを出力します。

```Scala
targetRDD.saveAsHadoopFile("/your/base/path",
        classOf[String], classOf[String], classOf[RDDMultipleTextOutputFormat]
      )
```

こうすることで、普通のRDDのsaveAsTextFileと同じように、`/your/base/path/<key>/<partition番号>.log`などの形でファイルが出力されます。
異なるPartition（Executor）が同じファイルパスに出力することはないので書き込みのバッティングは起こらないはずです。
技術英語 > it [lives up to] its name / live up to someone's expectation

http://www.scientificamerican.com/podcast/episode/this-dragonfly-outmigrates-monarchs/

> It's commonly known as a "globe skimmer," and it lives up to its name, migrating between 9,000 and 11,000 miles. 

http://eow.alc.co.jp/search?q=live+up+to&ref=sa

("globe skimmer"という)名前にかなっている、という訳なのだろう。

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

> live up to someone's expectation

http://eow.alc.co.jp/search?q=live+up+to+expectation

人の期待にこたえる
SphinxのサイドバーでIEのみディレクトリが開いてしまう時の対処


## 現象
* sphinx_rtd_themeを使っている時に、サイドバーの折りたたみの親を開こうとすると、ディレクトリ一覧が表示される
* ApacheでIndexesを削除すると、403エラーになってしまう

## 原因
* Sphinxが出力するtoctreeのHTMLで、選択中のものはaタグのhref属性が空文字列（""）であるため
* FirefoxやChromeは空文字列だと、カレントページを開くが、IEはなぜか親ディレクトリを開きに行く

## 対処
Sphinx自体を修正するのが筋な気もするけど、影響範囲が測りきれなくてJavaScriptで対応。
hrefが空文字列だったら、#に書き換える。

```conf.py
def setup(app):
    app.add_javascript('custom.js')
```

```custom.js
$(function() {
  $('a[href=""]').attr('href', '#');
});
```
YARN上のSparkStreamingジョブを安全に停止する


## 目的

SparkStreamingはそれ自身では停止機能を持っていない。（常時稼働することを想定しているため）
YARN上で動かしている場合、停止リクエストを投げると止まるが、その際に停止タイミングが制御できない。（処理中に急に止まる場合もありうる）

sparkStreamingを扱う場合、トランザクション系の処理を持たないDBを使うケースが多いので、データ不整合などが容易に起こりうる。（その程度のデータ不整合を気にするようなドメインを扱うなという話もあるかもしれない。）

そこでstreamingにgraceful stopを導入する。


## やり方。

StreamingContext.stop(...)を呼びだせばいい。

in Java
http://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.streaming.api.java.JavaStreamingContext

in Scala
http://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.streaming.StreamingContext

引数は両方trueが普通だと思います。（というか、どちらかをわざわざfalseにする場面が想定できない。）

### on YARN

さて、ではYARN上で動いているアプリケーションでどうやってこれを呼ばせるか。
外からpush型で情報を受け渡すのは難しそうなので、Sparkアプリ側で対応するのがいいと思います。
方法は2つ。

- 別スレッドを立てて、定期的にあるデータを見に行き、条件を満たしていれば発火
- shutdownhookを仕込むことで、YARNへ停止命令が送られてきた時に発火


```java
//Java
Runtime.getRuntime().addShutdownHook(new ShutdownHookThread(jobManager));
```

```Scala
//Scala
sys.ShutdownHookThread.
```

## 参考

https://metabroadcast.com/blog/stop-your-spark-streaming-application-gracefully
システムの時刻を変更する

date -sで引数に指定した時刻をsetする。
指定の仕方は"月/日 時:分:秒 年" → "03/30 21:54:02 2016"

```shell-session
■ 指定した時刻に設定する
date -s "03/30 21:54:02 2016"

■ 時刻を戻す
date -s "`date +'%m'`/`date +'%d'` `date -d '30 seconds ago' +'%H:%M:%S'` `date +'%Y'`"
date -s "`date +'%m'`/`date +'%d'` `date -d '10 minutes ago' +'%H:%M'` `date +'%Y'`"

■ 時刻を進める
date -s "`date +'%m'`/`date +'%d'` `date -d '30 seconds' +'%H:%M:%S'` `date +'%Y'`"
date -s "`date +'%m'`/`date +'%d'` `date -d '10 minutes' +'%H:%M'` `date +'%Y'`"

```
CentOS6.5 複数バージョンが原因でyum updateが失敗する

#1.概要

CentOS6.5でyum updateをすると、エラーが「複製です」(日本語表示の場合)旨のエラーが発生。
その対策方法を記載します。

いくつかのまとめ記事はありますが、今回はAWKコマンドを使ってまとめて行えることがポイントです。

#2.エラーの発生

```
# yum update
読み込んだプラグイン:fastestmirror, langpacks, presto, refresh-packagekit
Loading mirror speeds from cached hostfile

(略)

問題を回避するために --skip-broken を用いることができません
** Found 3 pre-existing rpmdb problem(s), 'yum check' output follows:
glibc-2.14.90-24.fc16.4.x86_64 は glibc-2.14.90-21.x86_64 の複製です
glibc-2.14.90-24.fc16.4.x86_64 は次の要求が不足ています:  glibc-common = ('0', '2.14.90', '24.fc16.4')
liberation-fonts-common-1.07.1-3.fc16.noarch は liberation-fonts-common-1.07.1-2.fc16.noarch の複製です
#
```

RPMデータベースに複数のバージョンのパッケージが存在し、それがアップデート障害の原因になっています。実害はないので、ダブったデータを削除します。


#3.削除する

LANG=Cで実行しないと"is a duplicate"の文字列がAWKで拾えません

```
# LANG=C yum check duplicates | awk '/is a duplicate/ {print $6}' > /tmp/DUPES

# cat /tmp/DUPES
glibc-2.14.90-21.x86_64
liberation-fonts-common-1.07.1-2.fc16.noarch
# yum remove `cat /tmp/DUPES`
読み込んだプラグイン:fastestmirror, langpacks, presto, refresh-packagekit
削除処理の設定をしています
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> Package glibc.x86_64 0:2.14.90-21 will be 削除
---> Package liberation-fonts-common.noarch 0:1.07.1-2.fc16 will be 削除
--> 依存性解決を終了しました。

依存性を解決しました

==========================================================================================
 パッケージ                     アーキテクチャ
                                              バージョン            リポジトリー     容量
==========================================================================================
削除:
 glibc                          x86_64        2.14.90-21            @updates         13 M
 liberation-fonts-common        noarch        1.07.1-2.fc16         @fedora          54 k

トランザクションの要約
==========================================================================================
Remove        2 Packages

インストール済み容量: 13 M
これでいいですか? [y/N]y
パッケージをダウンロードしています:
トランザクションのチェックを実行してします。
トランザクションのテストを実行しています
トランザクションのテストを成功しました
トランザクションを実行しています
  削除中                  : liberation-fonts-common-1.07.1-2.fc16.noarch              1/2
  削除中                  : glibc-2.14.90-21.x86_64                                   2/2

削除しました:
  glibc.x86_64 0:2.14.90-21         liberation-fonts-common.noarch 0:1.07.1-2.fc16

完了しました!
#
```

#3.参照
[CentOSでyum updateが何度やっても失敗する場合の対処方法
](http://qiita.com/masahirok_jp/items/40e685bbafd5f2463992)
ページに埋め込んだGoogleMapをレスポンシブ対応させる方法


```html:html
<div class="gmap">
  <iframe src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d3240.8255202704836!2d139.76405821495072!3d35.68129798019423!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x60188bfbd89f700b%3A0x277c49ba34ed38!2z5p2x5Lqs6aeF!5e0!3m2!1sja!2sjp!4v1463330797168" frameborder="0" style="border:0" allowfullscreen></iframe>
</div>
```


```css:css
.gmap{
  width: 80%;
  margin: 0 auto;
  padding: 30px 0 56.25%;
  position: relative;
  overflow: hidden;
}

.gmap iframe,
.gmap object,
.gmap embed{
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
}
```

なお、スマホなどでGoogleMap上のスクロールを無効にしたい場合はiframeの記述の中に`style="pointer-events:none;"`を追加する。
EmacsでPythonのDocstringCommentを自動生成する

EmacsでもPyCharmとかにあるようなDocstringCommentの
自動生成機能がほしかったので関数を用意してみた。

## Demo
![bbb.gif](https://qiita-image-store.s3.amazonaws.com/0/37724/5831c05f-e83e-b9e5-2098-a6cbfc33f4f5.gif)

## 導入方法

以下のコードをinit.elに貼り付け読み込むだけ。
関数名定義の行にカーソルを置きC-c dを実行すると生成される。

```lisp
;; docstring comment
(defun python-docstring-comment()
  (interactive)
  (let* ((begin-point (point-at-bol))
         (end-point (point-at-eol))
         (function-line (buffer-substring begin-point end-point))
         (space (format "    %s" (replace-regexp-in-string "def.*" "" function-line))))
    (goto-char end-point)
    (insert "\n")
    (insert (format "%s\"\"\"\n" space))
    (when (string-match ".*(\\(.+\\)):" function-line)
      (dolist (arg (split-string (match-string 1 function-line) ","))
        (if (not (equal arg "self"))
            (insert (format "%s:param TYPE %s:\n" space (replace-regexp-in-string "^\\s-+\\|\\s-+$" "" arg))))))
    (insert (format "%s:rtype: TYPE\n" space))
    (insert (format "%s\"\"\"" space))))

(define-key python-mode-map (kbd "C-c d") 'python-docstring-comment)
```
TypeScriptでPIXI.Containerのchildrenの型が違うと怒られる

#TypeScriptは型をチェックしてくれる
当たり前です。そのために使うのですから。しかし、JavaScriptで書いたコードをTypeScriptに移行するときにはもともとそんなこと考えていなかったのでアレ？ってなったりします。特にJavaScriptで書かれたライブラリを継承しようとすると、型チェックの機能を活かすにはお世話しなくちゃいけません。
#（私が）アレってなった例
```ts
// TypeScript + Pixi.js + Pixi.d.ts

// 物理法則に従うものたちはこれを含むんだ！
interface Physical {
   // 位置
   x: number;
   y: number;
   // 速度 = (d/dt)(位置)
   vx: number;
   vy: number;
   // 加速度 = (d/dt)(速度) = (d/dt)^2 (位置)
   vvx: number;
   vvy: number;
}

class PhysicalSprite extends PIXI.Sprite implements Physical {
   // 自分のコードでいろいろする
   constructor(...) {
      super();
   }
   // いろいろ書く
   static fromImage(frameId: string): MySprite {
      return new MySprite(PIXI.Texture.fromImage(imageId))
   }
}

// Spriteを入れる容器 = Container
let slimeContainer: PIXI.Container = new PIXI.Container();

// スライムを大量出現させたい
for (let i = 0; i < 100; i++) {
   let slime: MySprite = new MySprite.fromImage("slime-chan.png"); // スプライト生成
   slimeContainer.addChild(slime); // 容器に突っ込む
}

class Physics {
   gravity: number; // 重力の強さとかこの世界の物理を決める
   constructor(gravity) {
      this.gravity = gravity;
   }
   // 物理法則に従うものたちに物理法則を適用して時間を進める
   Apply(object: Physical) {
      // vvx: 加速度, vx: 速度, x: 位置
      object.vx += object.vvx;
      object.vy += object.vvy;
      object.x += object.vx;
      object.y += object.vy;
   }
   Init(object: Physical) {
      object.vvy = this.gravity;
   }
}

let physics = new Physics();
let gravity: number = 9.8;

while(true) {
   // このループが60fpsとかで実行されているする
   for (let slime of slimeContainer.children) { // ところがここで
      physics.Init(slime);
      physics.Apply(slime);
   }
}

// slimeContainer.childrenはPIXI.Sprite[]だからslimeはPIXI.Sprite
// よってslimeはphysics.ApplyできるphysicalなものではないのでTypeScriptとしてエラー出しときますね

```

となってしまう。ぐうの音も出ないです。JavaScript的にプログラム自体の機能としてはダメなことはしてないのでコンパイルされたものは正常に動くがこれではTypeScriptを使っている意味が無い。

#解決法 - PIXI.ContainerからContainer\<T extends PIXI.DisplayObject>にする
`Container`の格納できる`children`の型を指定できるようにすれば良い。`PIXI.Container.children`は`PIXI.DisplayObject[]`らしいので、こうすれば良い。


```ts

class Container<T extends PIXI.DisplayObject> extends PIXI.Container {
   children: T[];
   constructor() {
      super();
   }
}

// slimeContainerにはこれを使う
let slimeContainer: Container<PhysicalSprite> = new Container<PhysicalSprite>;

// 以下同様
```
これで文句は言われない。が、なんか面倒くさい気がする。でもやっぱり必要だよね。
何かもっといい方法があったら誰か教えて下さい。

#補足
Genericを使うよりもchildrenに自分で拡張したDisplayObject[]を割り当てる方が簡単になる。

あと多分これは設計が悪いので真似しないように。
SNSボタンの実装方法メモ


## twitter
### URL
[公式ドキュメント](https://dev.twitter.com/web/tweet-button)
[Tweet Button Generator](https://about.twitter.com/ja/resources/buttons)

基本的に実装方法としては2種類ある。（公式見ると4種類あるが残り2つはあまり使わない）

- a要素のdata属性で実装する方法（js必要）
- a要素のhref属性に基本となるurlとクエリで実装する方法（js不要）

ジェネレーターではdata属性の方が使用されているが、href属性指定の方がオリジナルボタンを設定できるなど汎用性は高い。

### ツイートボタン
#### デフォルト（data属性で実装）
```js:js
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script>
```
twitterウィジェット用のjsの読み込み

```html:html
<a class="twitter-share-button"
  href="https://twitter.com/share"
  data-size="large"
  data-url="https://dev.twitter.com/web/tweet-button"
  data-via="twitterdev"
  data-related="twitterapi,twitter"
  data-hashtags="example,demo"
  data-text="custom share text"
  data-size="large"
  data-lang="ja"
  data-dnt="true">
Tweet
</a>
```
data属性でオプションを設定する。
各属性の意味は[公式ドキュメント](https://dev.twitter.com/web/tweet-button/parameters)を参照。
以下の点に注意。

- ツイートする内容は属性ごとに順番が決まっている
- ハッシュタグはカンマ区切りで複数指定できる
- テキストに改行を入れたい場合はdata-textの値を実際に改行させれば反映できる（html的には微妙だが）
- ただし、テキストとURLの間を改行させたいなどは厳しい？（シェアツイートでの改行自体あまりしたくない）

#### オリジナル（href属性で実装）
```html:html
<a href="https://twitter.com/share?
  url=https%3A%2F%2Fdev.twitter.com%2Fweb%2Ftweet-button&
  via=twitterdev&
  related=twitterapi%2Ctwitter&
  hashtags=example%2Cdemo&
  text=custom%20share%20text">
<img src="btn_tweet.png">
</a>
```
data属性でのオプション設定だけではなく、href属性に`https://twitter.com/share`としてそこからクエリパラメータを指定する方法でもツイートボタンは実装可能。実際は&の後の改行は取る。
これであればjsで読み込まれたツイート画像が自動で適用されるわけではないのでa要素をcssで装飾するなり、画像を使用してのオリジナルボタンにすることが可能。

```
onclick="window.open(this.href, 'tweetwindow', 'width=650, height=470, personalbar=0, toolbar=0, scrollbars=1, sizable=1'); return false;"
```
なおクリックした時に子ウインドウを出したい場合はwindow.openさせる。

### フォローボタン
#### オリジナル（href属性で実装）
```html:html
<a href="https://twitter.com/intent/follow?screen_name={TwitterのID}">Follow Twitter</a>
```
ツイートボタンと同じようにクエリで指定する。
なおTwitterウィジェット用のjsを読み込んでいなくても問題なく起動するが、読み込んでいる場合子ウインドウが開かれる。

## facebook
### URL
[公式ドキュメント](https://developers.facebook.com/docs/plugins/share-button)

### シェアボタン
#### デフォルト
基本的に公式ドキュメントに沿って実装すればよいが、JavascriptSDKだとサーバ上でしか表示を確認できないのでインラインフレームの方がよいかも？

**注意**
data-mobile_iframe属性をtrueにしているとモバイルでシェアダイアログが表示されるようになるらしい。
が、trueにしていたらうまくシェアできず、falseにすると直ったことあり。

#### オリジナル
```html:html
<a href="https://www.facebook.com/sharer/sharer.php?u=https://test.jp/">シェア</a>
```
twitterと同じようにhref属性で指定できる。uパラメータにurlを指定する

## LINE
### URL
[公式ドキュメント](https://media.line.me/howto/ja/)

### LINEで送るボタン
#### オリジナル
```
<a href="http://line.me/R/msg/text/?LINE%E3%81%A7%E9%80%81%E3%82%8B%0D%0Ahttp%3A%2F%2Fline.me%2F">
  <img src="[ボタン画像のURL]" width="[ボタン幅]" height="[ボタン高さ]" alt="LINEで送る" />
</a>
```

### LINE@で友だちになるボタン
LINE@アプリの設定＞プロフィール＞友だち追加といったところにコードがある。

## 参考URL
[SNSのシェアボタンの設置方法まとめ (サンプルコード付き)](https://syncer.jp/how-to-setting-share-button)