OmniAICreator/Qiita-1.07M huggingface dataset:
VALUE-DOMAIN（バリュードメイン）のDNS設定反映時間

ドメイン販売の老舗、VALUE-DOMAIN（バリュードメイン）は、ドメインの取得と共に、「無料ネームサーバー」が提供されていて人気がありますね。

個人向けかと思いきや、

* DNSの教育をしなくてもなんとなくで使えてしまう
* 管理コストがかかる自社DNSサーバが不要
* バリュードメインが落ちてDNS障害が発生しても「バリュードメインが落ちているんでサーセン」で済むのが良い

などなど、*そういう企業*でも使われているようですね。私もたまげた。

さて、VALUE-DOMAINの無料ネームサーバーは、DNS設定の反映に30〜1時間を要するとされているのですが、実際にどのぐらいで反映されるか知っておきたいと思います。

# 無料ネームサーバーとは

取得したドメインで実際にDNSの情報を提供するDNSサーバのアウトソーシングの形態の一つで、設定を間違えにくいよう、重要な設定は隠蔽され、代表的なDNSレコードの設定ができるようになっているものです。

VALUE-DOMAINでは、前世紀から、ブラウザ上でDNS設定の変更ができるWebインタフェースを擁し、人気を博してきました。

# VALUE-DOMAINのDNS設定の反映時間は？

今回は、VALUE-DOMAINのサイトで「VALUE-DOMAIN独自のネームサーバー（国内）」と称されている無料ネームサーバーを使って2016年5月8日に測定をした結果を書きます。なんか嫌な予感がする人もいるかもしれませんが、ご想像のとおり、無料ネームサーバーが複数あるようです。こまったね。

## 新規にレコードを追加した場合

* Webインタフェースからns1.value-domain.com への反映: 最短16分〜最長32分（実測値）
* ns1.value-domain.comから他のDNSへの反映： 0秒（他のDNS側にネガティブキャッシュがない場合）
* ns1.value-domain.comに反映前にクエリ出してしまった場合：ネガティブキャッシュとしてSOAレコードのTTL 2560秒（43分）

よって、**最短16分〜最悪1時間15分**

## 既存レコードを変更した場合

* Webインタフェースからns1.value-domain.com への反映: 最短16分〜最長32分（実測値）
* ns1.value-domain.comから他のDNSへの反映： TTLのデフォルト1200秒（20分）

よって、最短16分〜50分ぐらい TTL変更している人はそれも加味すること

# VALUE-DOMAINでの設定反映の仕組みは？

**16分ごと**に、無料ネームサーバーへの設定反映プロセスと、ユーザ設定の取り込みプロセスが動いているようです。

* Webインタフェースで更新した直後にユーザ設定の取り込みプロセスに取り込まれると、16分後にDNS設定に反映される
* 運が悪いと、16分ぐらいあとにユーザ設定の取り込みプロセスに取り込まれ、その16分後にDNS設定に反映されるので約30分後

となっているような挙動を示します。

ちなみに、ちゃんとしたDNSサーバは、たいていは即時でDNS設定を更新します。

## SOAレコードに入っているシリアル値ってDNS設定の更新時刻のUNIX時間じゃね？

今気づいた

シリアル値をUNIX時間とみなすと確かに15分前後のぶんだけ進んでいるけれども数値が一定ではないですね。実測値の16分と微妙に違う

あとシリアル値をUNIX時間とみなして時刻にした時間が5〜6分古いので、生成された情報を5〜6分遅らせて出しているような感じがするね。

ひとんちのシステムの仕組みを推測するの間違っていると恥ずかしいけど、しょうがないよね。

# 新規レコードの追加がやけに遅く感じる件

VALUE-DOMAINの仕組みでは、16〜32分以内はVALUE-DOMAINの無料ネームサーバーに反映されません。

まだVALUE-DOMAINの無料ネームサーバーに反映されていない状態で自組織のDNSサーバからVALUE-DOMAINのDNSサーバにリクエストを出すと、そのドメインは存在していないため、自組織のDNSサーバは、SOAレコードのTTL 2560秒をネガティブキャッシュのTTLとして採用しますので、そこから43分間は自組織のDNSサーバはVALUE-DOMAINの無料ネームサーバーに問い合わせしません（仕様では）。

つまり、VALUE-DOMAINで更新後、VALUE-DOMAINの無料ネームサーバーで反映がされるまえに、ブラウザでドメインを入力してアクセスを試行すると、かえって自分から見た時のDNS設定の反映は遅くなります。

せっかちさんは損をします。

なお、VALUE-DOMAINの無料ネームサーバーは簡易DNSサーバなので、SOAレコードの編集はできないのでした。

## 浸透？

到達性が時間を要素とした関数で表されるのだから浸透と言ってもいい気がするが言うと怖い人が来るのでダメ
Arukas で Ghost ブログを3分（くらい）で起動

## 追記 

~~残念ながら [Arukasのβサービス終了のお知らせ](https://arukas.io/updates/notice_concerning_termination_of_beta_service/) が出ました。正式公開は未定、とのことです。~~（2017/07/28）

Arukasのβサービスが再開しました。この記事は以前のβ版をもとに書いていますので、現在と仕様の違う部分があるかもしれません。（2018/03/06）

-----

さくらインターネットさんの Docker ホスティングサービス「[Arukas](https://arukas.io/)」を早速試してみました。下記は、2016/05/08 時点のファーストインプレションです。

- GitHub アカウントでサインアップしたら 2 ステップ後にコントロールパネルが表示されてた。簡単。
- Docker Hub に上がっているイメージを手軽にデプロイできる。

倍速再生になっておりますが、スクリーンキャストを上げておきました。ご覧いただくと、イメージがつかみやすいと思います。

[Arukas で Ghost ブログを 3 分（くらい）で作る | YouTube](https://youtu.be/Ist6P4vX3j0)
（1 分 47 秒）

## ごく簡単な感想

動画では、新規サインアップではなく、既に作成したアカウントでログインしているので、すぐコントロールパネルに入っていますが、サインアップも簡単でした。

今回試しに起動している [Ghost](https://ghost.org/) は Node.js ベースのシンプルなブロギングツールです。ブログとして使うには軽量でよいツールなのですが、Node.js ベースであるために、専門知識があまり必要ない、安価なホスティングは少ないのが現状です。まだ Arukas はベータ段階なので、安定的に使うにはもう少し様子を見るべきでしょうが、選択肢が増えるのは素直にうれしいです。

複数のコンテナを立ち上げて使うようなユースケースよりは、手早く単一の Docker コンテナを立ち上げて公開しておきたいようなときにとても便利かもしれません（おそらく Arukas も Docker Compose に追々対応するとは思うのですが）。

ちなみに、Arukas で起動したアプリケーションは、停止させるとデータも消去されます。データの永続化は別途手段を講じる必要があります。

## ご参考にどうぞ

- [Arukas.io CLI、まだ β なのに便利だった - Qiita](Arukas.io CLI、まだ β なのに便利だった)
- [Qiita の arukas.io タグ](http://qiita.com/tags/arukas.io)
情報サービスについての考察

# 導入
ITはInformation Technologyの略で「情報技術」の略である。
情報を利用したサービスがたくさんあるが、情報の整理・分類の部分をサービスとして押し出しているものは少ないように思える。
データ自体はサービスの内部的にはDB上に整理・分類されているはずだが、
利用者側では検索・抽出時にその一部に触れられるだけである。

もっと利用者にとっての「整理・分類」に目を向けるべきではないかと思う。
情報技術という割には、その点について技術が全然使われてない気がする。

# ストック機能・はてなブックマーク
Qiitaにはストック機能がある。
気に入った記事を自身のページに留めておく機能だ。

ストック機能は、その名の通り記事をストックするための機能であり、
用意されている機能としてはそれがほぼ全てである。

が、利用者としては「ストックしてはい終わり」の機能ではない。
何のためのストックかといえば、「再度閲覧するため」である。
ストックするだけして、再度見ないのであればまったく意味がない。

ストック記事として一覧化されたリンクをクリックして、再度閲覧してこそ意味がある。
再度読む気がなければ、ストックしない方がマシだと個人的には考えている。

はてなブックマークも同じだ。ブックマークして終わりではなく、内容を読んでこそ意味がある。
再度読む必要がなく、一度消費して終わるような記事なら、ブックマークしておく価値はあまりない。

ストックが役に立つ瞬間は、それが必要な時に「そういえばこの処理に使えそうな記事があったな」と思い出して、
ストック一覧から記事を取り出した時だ。
そういう意味では、利用者側が（記事内容を忘れていたとしても）ストックしたことを覚えていないと意味がない、とも言える。

# 再度閲覧させるための工夫「通知」
Qiitaで記事をストックすると、ストックした記事が更新された時に通知が飛んでくる。
この通知機能のおかげで、少なくとも更新があった記事については自分がストックしている事を把握できるようになっている。
また、通知のリンクからも記事に移動できるようになっている。
ここは良い点と言える。

# 検索はできるが分類できない
さて、導入部で言及した「整理・分類」についてはどうだろう。
ストック一覧には確かにリスト化されているし、検索も可能である。

が、利用者側で整理・分類について介入できない。

- カテゴリー分け
- ラベル付け
- フォルダ分け

のような機能が用意されていない。
他のブックマーク系サービスもそうなのだが、「溜め込むだけ溜め込める」のだが、
その後の整理・分類については非常におざなりだと思う。

「再度閲覧する」ためには、溜め込んだ後の整理整頓こそ肝だと思うのだが、
文字列検索できればいい、という状況である。

自分にとっての分類分けをしたいという欲求が叶わないのだ。

# というわけで
今後は「ストックできる」だけではなく、「利用者独自の整理・分類ができる」方式になっていくべきだし、
そういうサービスを作れば受けると思う。

# ていうかそもそも
コンピュータのファイル整理方法について、
フォルダ方式とタグ機能がまともに使えるようになるのはいつなんですかね……

- タグ分類による仮想フォルダの生成
- フォルダにもタグ付け
- タグのリストから1クリックで抽出・整理

この辺ができるフリーソフトが全然見当たらない…。
normalizrを使ったreduxプロジェクト

# 背景
reduxとnormalizr使ってます、という話を勉強会でした時に、いまいち実装イメージが思い浮かばないというフィードバックをもらったので、TODOアプリで例を作ってみた。

ソースはこちら：https://github.com/hokuma/redux-normalizr-todo

# TL;DR
- APIのレスポンスでリソースがネストしている時に効果的
- entities（ローカルDB）とresult(データの集合)でreducerを分ける
- entitiesはImmutable.Record使う（おまけ）

# 題材
よくあるTODOアプリだとリソースはTODOしか出てこない。リソースが一つしかなければそもそもReact単体でやったら、という話になるので、TODOを実行する人をアサインできる機能を持ったTODOアプリを題材にした。

# 書くこと
reducerの切り方、normalizrの使い方、entityの持ち方。

# 書かないこと
action周り。

# リソース
扱うリソースは以下の通り。

```/todos.json
{
  "todos":[
    {
      "todo":{
        "id":1,
        "body":"ticket #1",
        "status":1,
        "userId": 1,
        "user":{
          "id":1,
          "name":"john"
        }
      }
    }
  ]
}
```

```/users.json
{
  "users":[
    {
      "user":{
        "id":1,
        "name":"john",
        "status":1
      }
    }
  ]
}
```

クライアント側での描画待ちを減らしたい、などの理由で一つのAPIレスポンス内でリソースがネストするようなケースは実際あるだろう。

# normalizr
https://github.com/gaearon/normalizr

リンク先を見ればわかるが、ネストしたjsonをentityとresultに分解してくれるライブラリ。

entityはデータの実体で、データベースの１レコードに相当すると考えれば良い。resultは意味を持ったデータの集合だが、実データは持たずentityへの参照のみを持つ。この辺は説明よりもリンク先の例を見た方がわかりやすい。

実体とそれへの参照に分けるところがポイントになる。

```
One Fact in One Place
```

をクライアント側でもやる感じ。

# reducer
entitiy用、result用のreducerを作る。entity用はユーザ用、TODO用とそれぞれネストしていく。result用も同様で、ユーザ一覧、TODO一覧用とネストする。

 - entitiy用のreducerはクライアント側のテーブル操作を行うreducer
 - result用のreducerはアプリとして見せたい情報のまとまり（ユーザ一覧、TODO一覧）操作を行うreducer

と見ることができる。

## entities
`entities/`以下にそれぞれのリソースごとに定義する。

アクションごとに適用するデータ処理を定義する。データ取得系では、基本的にはサーバから受け取った値を最新の値とみなし、既存データを更新 or なければローカルのstoteに追加する。これをまとめて`merge`処理として実装する。

状態更新系では、例えば`finish`のような状態変化の操作を定義し、対象のtodoの`status`を更新する。

## result
`entities/`以外のreducerは、基本的にはresultを処理するreducerとなる。

取得したデータ or 追加したデータのentityIdをリストへマージするのが主な役割。`finish`のようなentityそのものを変える処理は扱わない（entityのreducerで処理する）。

# Immutable.js
entity、resultどちらもImmutable.jsで管理する。

オブジェクトや集合を扱うためのAPIが豊富で、かつ実行結果が新しいオブジェクトになるのでデータ更新の副作用に起因するバグを減らせる。

データ型がすでにいくつか定義されており、使いようによってはなかなか便利。例えば、resultで`OrderedSet`を使っている。`Set`なので同一の値は勝手にユニークが取られ、さらに`Ordered`、つまり追加した順番を保持してくれるので、一覧表示のためのデータを管理するのに都合が良い。

## Immutable.Record
Immutable.Recordを使って、Immutableのインスタンスをクラスのインスタンスっぽく使うこともできる。できることは以下の３つ。

- 取りうる属性とdefault値を定義できる
- 属性名でアクセスできる（`get`を使わなくて良い）
- 任意のgetterを定義できる

特に２つ目と３つ目のおかげで、Immutable.jsを使いつつも普通のオブジェクトっぽく使えるので、Component内からのアクセスが簡潔になる。
gnuplotでストリームデータをプロットする

`gnuplot`でストリームデータ（パイプなど）をプロットしたいと思ったが，案外面倒だったので方法とモジュール．

# ストリームデータのプロット方法
ストリームデータのプロット方法を見ると，`pause`，`reread`の組み合わせなどが載っている（[ここ](http://hiroohongo.sblo.jp/article/174930701.html?1460805147)など）．ただ，どれも基本的にpollingで追加データをプロットしているので，更新間隔は必要に応じて変える必要がある．

一方，ファイルの変更を監視する(e.g., `inotify`)しようとすると，`gnuplot`上では動かないので，`reread`は使えない（と思う)．すなわち，`gnuplot`でpollingに頼らずストリームデータをプロットするには，

1. ファイルや`stdin`の変更を監視する．
2. 変更されたら一時ファイルにその変更を反映する．
3. `gnuplot`上で，`replot`または，`plot ...`をすることでプロットを更新する．

という3つの処理を行う必要がある．

# npmモジュール ([sgnuplot](https://www.npmjs.com/package/gnuplot-streaming))
上記処理は案外面倒だったので，npmのモジュールにまとめて公開した（使い方はREADME参照）．`inotify`があればシェルスクリプトでも書ける程度の内容だが，エコシステムがなく管理が難しいと感じたためnpmにした．
また，logrotate等は考慮していないが，長期間の可視化をするためのものではないので，問題はないのではないかと思う．

時間がかかる計算のログを確認したい時に，`tail -F`よりは見やすいツールとして使えるのではと期待（使ってはいない）．
Macの標準日本語入力（ことえり、JapaneseIM）がバグったら

# 症状

Mavericks (OS X v10.9) まで「ことえり」と呼ばれていた[^1]、Macの標準日本語入力。
[^1]: Yosemite (OS X v10.10) 以降は「JapaneseIM」というらしいのだけど、呼びにくいから今でも「ことえり」って呼んでる

ある時から[^2]変換候補リストが出なくなってしまってとても不便に。

[^2]: El Capitanにアップデートしたときだと思う

![2016-05-08 17.15.25 ことえりの変換候補リスト.png](https://qiita-image-store.s3.amazonaws.com/0/112663/3f6344f8-e0d8-6e47-0601-d8c24cd16b14.png)

# 解決方法

以下の2ファイルを削除して再起動で無事復活。

```shell-session
$HOME/Library/Preferences/com.apple.JapaneseAnalysis
$HOME/Library/Preferences/com.apple.inputmethod.Kotoeri.plist
```

**実行する際は、バックアップをとって自己責任で！**

# 余談

「変換候補リストが出ない」以外にも、
そもそも日本語入力ができないとか、ローマ字入力がおかしいとか、etc

標準日本語入力絡みでバグったときは
以下のファイルをゴミ箱に放り込んで再起動で治ることが多い様子。

```
$HOME/Library/Dictionaries/ユーザ辞書
$HOME/Library/Preferences/ByHost/com.apple.HIToolbox.8x-4x-4x-4x-12x.plist 
$HOME/Library/Preferences/com.apple.inputmethod.Kotoeri.plist
$HOME/Library/Preferences/com.apple.JapaneseAnalysis
$HOME/Library/Preferences/com.apple.KotoeriPreferences.plist
$HOME/Library/Preferences/com.apple.KotoeriWordRegister.plist
```

**実行する際は、バックアップをとって自己責任で！**

# 参考

* [漢字の変換候補が出ません | Apple サポートコミュニティ](https://discussionsjapan.apple.com/thread/10092186)
* [Mac OSX El Capitanで日本語入力が出来なくなった件 | Apple サポートコミュニティ](https://discussionsjapan.apple.com/thread/10168573)
* [ことえりでローマ字入力する際の異常について | Apple サポートコミュニティ]( https://discussionsjapan.apple.com/message/100546000#100546000)
css flexbox

http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html

http://www.sketchingwithcss.com/samplechapter/cheatsheet.html

http://flexboxgrid.com/

https://www.w3.org/html/ig/zh/css-flex-1/

http://www.w3cplus.com/css3/css3-flexbox-layout.html

```html
<!DOCTYPE html>
<html>
<head>
	<title>test</title>
	<style>
	  .item {
	    width: 100px;
	    height: 100px;
	    background-color: red;
	    margin-rights: 20px;
	  }

	  #box {
	    display: -webkit-flex;
	    display: flex;
	    flex-wrap: wrap;
	    flex-direction: row;
	    justify-content: flex-end;
	    width: 500px;
	    height: 400px;
	    background: blue;
	  }

	  #one {
	  	background: black;
	  }

	  #main {
	  	display: flex;
	  	justify-content: center;
	  	width: 500px;
	  	height: 200px;
	  	background: yellow;
	  }
	</style>
</head>
<body>

<div id="box">
  <div id="one" class="item">
  </div>
  <div id="two" class="item">
  </div>
  <div id="three" class="item">
  </div>
  <div id="main">
    <div id="one" class="item">
    </div>
    <div id="two" class="item">
    </div>
    <div id="three" class="item">
    </div>
  </div>
  <div id="one" class="item">
  </div>
  <div id="two" class="item">
  </div>
  <div id="three" class="item">
  </div>
</div>

</body>
</html>
```
Taskwarriorを試してみた

Linuxで作業を続けているとわざわざブラウザ開いてタスク確認するのも面倒くさい，ターミナル上でタスクを管理できる何かないかなと思ってググったらTaskwarriorなるものがあったので試してみました.とりあえずメモ代わりにﾊﾞｧｰｯと書きます．本家のサイトは[こちら](http://taskwarrior.org/)．

##インストール
```
$ sudo apt-get install task
```

これだけで完了です.

##実際に使ってみる

それでは試していきましょう．ここでは適当にいくつかタスク内容を入れてみます.

##タスクを追加する
```
$ task add [タスク名]
```

で追加可能です．例えば,

```
$ task add Taskwarriorを使ってみる
Created task 1.
```

これでタスクを一つ追加出来ました.またオプションでタスクに詳細な情報を付与できます．

```
$ task add project:Study pri:L due:today タスクの情報を追加する
```
projectでタスクが属するプロジェクトの指定，priはタスクの優先度(H:High M:Middle L:Low),dueはタスクの期日となります.dueはtodayで今日,日時を指定したい場合は5/8/2016のように月日と年を記述すれば可能になります．

##タスクを確認する
登録されているタスクの情報を確認したい時は，

```
$ task list
ID Proj  Pri Due        Age Description            
 2 Study L   5/8/2016   5s  タスクの情報を追加する 
 1                      8m  Taskwarriorを使ってみる

2 tasks
```
とすることで確認できます.

##タスクを完了させる
タスクが完了して閉じたい場合は,

```
$ task 2 done
```
といった感じでIDを指定することで完了できます．タスクのIDはtask listで確認しましょう.

##おまけ
###カレンダー表示

```
$ task calender
```
カレンダー形式でタスクの期日を確認．これいいですね.
![Screenshot from 2016-05-08 17:40:44.png](https://qiita-image-store.s3.amazonaws.com/0/60952/4e325f2a-5caa-c90b-5c27-a4f49bffe3db.png)

###プロジェクトの進捗を知る

```
$ task summary
```
プロジェクト毎に進捗状況をグラフで表示.パーセンテージで出るのかっこいい．
![Screenshot from 2016-05-08 17:42:58.png](https://qiita-image-store.s3.amazonaws.com/0/60952/d725244f-7acb-36b3-c841-d1ccafab69cb.png)

##おわりに
色々試している段階ですが,自分用に使うには十分かな,と思いました．上手いことつかえこなせばいい感じに管理できそうです.また複数PCでタスクを共有するといったことも可能らしいのでその気になれば複数人でタスク管理出来るのでしょうか.試してみてまた追記して見ようと思います．

##参考
[Taskwarrior - CLI（コマンドライン）ベースのスマートなタスク管理・GTD ユーティリティ](http://netbuffalo.doorblog.jp/archives/4533962.html)
MSYS2 Shell を起動すると cmd.exe も立ち上がってしまう

## 状況

1. MSYS2 をインストーラからインストール
2. スタートメニューから MSYS2 Shell を起動すると、**cmd.exeが一瞬起動し、終了した後。msys_shell.batが起動する**
3. `pacman -Syuu` などでパッケージをアップデート
4. スタートメニューから MSYS2 Shell を起動すると、**cmd.exeが終了しない**

## 環境

* Windows7
* インストーラ
  * msys2-x86_64-20160205.exe

## 原因

スタートメニューに登録されている MSYS2 Shell のリンクは以下になっています。

```
C:\Windows\System32\cmd.exe /A /Q /K C:\msys64\msys2_shell.bat
```

cmd.exe の各オプションの意味は以下の通りです。

|オプション|意味|
|:-:|:-:|
|`/A`|出力をANSIで|
|`/Q`|エコーがOFFの状態でプロンプトを起動|
|`/K <command>`|<command> で指定した内容を実行。**引き続きcmd.exeを表示**|
|`/C <command>`|<command> で指定した内容を実行。**cmd.exeは終了**|

## 解決策

そのため以下のように`/K`オプションではなく`/C`オプションを指定してやるとcmd.exeは終了します。

```
C:\Windows\System32\cmd.exe /A /Q /C C:\msys64\msys2_shell.bat
```

## 未解決の謎

* なぜ `msys2_shell.bat` ではなくこのようなショートカットがスタートメニューに登録されているのか？
* なぜ pacman でパッケージをアップデートする前は `/K` オプションにもかかわらず cmd.exe が終了していたのか？

## 既に試したこと

`$ pacman -V` の結果が `4.2.1.6187` だった場合、`pacman -Syuu` ではなく `update-core` と `pacman -Suu` の実行の組み合わせでアップデートするべきだった[^1]みたいなのですが、やり直してみたところそれが原因ではないようでした

[^1]: [https://sourceforge.net/p/msys2/wiki/MSYS2%20installation/]
linuxでtidal

linuxでライブコーディングできないかといろいろ探してみたらtidalというのがあるのが分かったので
環境をセットアップしてみました.

osはkonaLinux3.0です

基本的にここのとおりです
http://tidalcycles.org/getting_started.html#tidal-on-linux

必要なものをインストール
sudo apt-get install build-essential libsndfile1-dev libsamplerate0-dev liblo-dev libjack-jackd2-dev qjackctl jackd git

dirtのインストール（サンプラーのようです。）
git clone --recursive https://github.com/tidalcycles/Dirt.git
cd Dirt
make clean; make

haskellのインストール

sudo apt-get install haskell-platform

tidalのインストール

cabal update
cabal install tidal

とやってもうまくインストールされませんでした。注意書きに強制的に・・みたいなことが書いてあってので
下記のとおり変更

cabal install --force-reinstall tidal

こんどは、asoundのCライブラリが無いからPortmidiがビルドできないのでインストールできないとでたので

sudo apt-get install libasound2-dev libesd0

でライブラリをインストール。

tidalはエディタからhaskellを呼び出して・・みたいな動きらしいのでエディターの設定
超初心者ながらvimを使っているのでvimで設定します

tidal用のプラグインをダウンロード
https://github.com/munshkr/vim-tidal

.vimrcにNeoBundle "/munshkr/vim-tidal"を付け加えて
vimを立ち上げてインストール。

※どうでもいいのですが、僕の環境ではdirtが大文字でDirtでした。このvimtidalはdirtのパスが”~/dirt”に
　なっています。どちらをあわせてもいいと思いますがvimtidalの方を変更しました

~/.vim/bundle/vim-tidal/bin/tidalvimの最初のほうにある
DIRT_PATH="~/dirt"なのをDIRT_PATH="~/Dirt"に変更

cd ~/.vim/bundle/vim-tidal
sudo make install

tmuxのインストール

sudo apt-get install tmux


音が鳴るか確かめる

tidalvimで自動的に立ち上がります（jackを起動しなくてもいいみたいです）


d1 $ sound "db"と打って、その行にカーソルを置いて￥とSを同時に押すと
ドラムの音が鳴り出します（やったー）

キーバインドは.vimrcの設定でやればいいのかなぁと思います
Query DSL in Elasticsearch

# Queries と Filters
Elasticsearch で検索を実行する方法として、Queries（クエリ）と Filters（フィルター）の2種類が用意されています。

最新版では、クエリとフィルタがマージされました。任意のクエリ句は現在、「クエリーコンテキスト」でクエリとして、フィルターコンテキスト」でフィルタとして使用することができます

# Query DSL
Elasticsearchは、クエリを定義するJSONに基づいて、完全なクエリDSLを提供する

## Leaf query clauses
* match
* term
* range

    * 特定のフィールドに特定の値を検索できる
    * 単独で使用することができる

## Compound query clauses
複合クエリ

### Query context
* クエリは全文検索用に利用する。
* 関連性のスコアに依存する結果を得たい時に利用する。

### Filter context
* フィルターはキャッシュされ、たいしてメモリも使わない。
* 他のクエリが同じフィルターを利用する場合は爆速である。
* term, terms, prefix, range などのフィルターはデフォルトでキャッシュされ、同じフィルターが複数の異なるクエリで利用されるようなケースで推奨される。”age higher than 10″ のような range フィルターのケースなど。
* 他の geo, scripts などのフィルターはフィールド値とともにメモリーにロードされ、デフォルトではキャッシュされない。これらのフィルターは元々速いし、キャッシュするのに単に実行するより余計な処理が必要なため。
* 残りの and, not, or などのフィルターは他のフィルターを操作するので、基本的にキャッシュされない。
* 全てのフィルターは _cache 要素と _cache_key 要素を指定して明示的にキャッシュを操作できる。大きなフィルター作成時などに便利

### ref
* [elasticsearchとSQL対比しながら理解](http://qiita.com/kieaiaarh/items/5ea4e8a188bd9814000d)
AVFoundationを使うアプリを起動してもバックグラウンドの音源が停止しないようにする

#はじめに#
アプリの中で効果音を鳴らすべくAVFoundationを使っている場合に、バックグラウンドで音楽を再生したままにしたいときは、どうするか。

AppDelegateでAVFoundationのAVAudioSessionでカテゴリの設定をすることで実現できます。

標準では、AVAudioSessionCategorySoloAmbientが指定されているので、アプリを起動するときに別アプリで音源を再生していると、再生が停止してしまいます。

そこで、AVAudioSessionCategoryAmbientを明示的に指定します。これによって、重畳的に再生できるようになります。

#Swiftのコード#

Swiftのコードはこちらの記事の通りです。**.aiffでも動作しました。**
[【Swift】バックグランドの音楽とアプリ内の効果音(AVfoundation)を同時に再生する](http://qiita.com/taka000826/items/2188f8f20e31af11efce)


#Objective-Cのコード#
そのまま書き換えれば良いです。

```objc:AppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    //バックグラウンドでの音の再生を許可
    AVAudioSession* audioSession = [AVAudioSession sharedInstance];
    [audioSession setCategory:AVAudioSessionCategoryAmbient error:nil];

}
```


#.cafと.aiffの比較#

aiff(Audio Interchange File Format)は、音声ファイルの形式です。

caf(Core Audio File)は、iOSでよく使われる音声ファイルの形式です。aiffの制約を乗り越えるために設計された形式です。

.aiffのファイルの拡張子を.cafに変換すると、.cafとして使えます。その逆は、変換処理を行う必要があります。
[Core Audio Format](https://en.wikipedia.org/wiki/Core_Audio_Format)
【UE4】マチネで動画書き出す時、テクスチャとかフォリッジとか読み込み間に合わなくなる時の対応法

タイトル長いけどタイトルのとおり。

LevelBPでLevel読み込み後にマチネをPlayで解決。

![fccd945cd3670b4f36e000de001ca09c.png](https://qiita-image-store.s3.amazonaws.com/0/102588/ca175af5-1122-598b-7598-0700dd4ff513.png)

頭数フレぱかるのもこれで解決出来るので多分読み込みの問題だったのかな。

---
追記
Should Block on Loadのチェックも入れるとより確実だよとの[ゆういちさん(@nullpodesu)](https://twitter.com/nullpodesu/status/729210200603824128)からのアドバイス。
THX!!

レベルストリーミングとかの参考
http://historia.co.jp/archives/4153
Ｗｉｎｄｏｗｓショートカットキーまとめ

**Ｗｉｎｄｏｗｓのショートカットキーのまとめ記事**

ほぼほぼ個人用になります。
随時更新～～

業務効率を爆上げするChromeのショートカットキー5選 - ITmedia PC USER http://www.itmedia.co.jp/pcuser/articles/1605/06/news019.html @itm_pcuserさんから
出力の最後の改行が不要な場合のフィルタコマンド

通常は標準出力の末尾に改行文字が付いていて都合が良いのですが、時には不要だと思うことがあります。

例えば、一行のみしか返さないと分かっているコマンドをクリップボードなどに確保するとき。

```shell-session
$ find . -name sagashimono.txt | head -n 1 | pbcopy
```

とすると、Mac OS X の `pbcopy` コマンドにより、現在のディレクトリからの `sagashimono.txt` のパスがクリップボードに格納されます。Windows では `clip`、X.org 環境では `xclip` などが同様のコマンドです。

とはいえ、`find` コマンドには各行の最後に当然ながら改行文字が付いていて、クリップボードに格納される文字にも末尾に改行文字が付いています。ターミナル内で扱う場合は改行文字は空白類文字の一つとしてほどよく無視されるので気にならないのですが、クリップボードに格納するときには除去して欲しい時もあります。コピーした「一行のデータ」に改行文字が入っていると、一行を入力するためのインプットボックスへペーストを行った場合におかしな挙動になったりすることもあります。

このような、標準出力の末尾の改行があれば除去するというコマンドは存在するのかもしれませんが、例えば多くの環境にプリインストールされている Perl でコンパクトに書くことができます。

```pl:chomp
#!/usr/bin/perl

use strict;
use warnings;

while (<>) {
    chomp if eof;
    print;
}
```

上記のような Perl プログラムを実行権限付きでパスの通った場所に保存しておくことで、これをパイプでつなぐことで末尾の改行があればそれを除去することができます。

```shell-session
$ find . -name sagashimono.txt | head -n 1 | chomp | pbcopy
```
c++ builder > 10秒ごとの処理を数回だけ実行する > 実装方法の検討

```txt:動作確認
C++ Builder XE4
```

## やろうとしていたこと

- ある条件で処理を開始する
- 開始後は処理を10秒ごとに数回(例: 3回)実行する
- 数回実行後にループをやめる(停止またはSuspend)

## 実装方法

以下を思いついた

- スレッド
  - void StartProcess(): 開始フラグを立てる
  - Execute()内でフラグが立っている場合に10秒Sleepしながら処理を行う
- フォーム
  - void StartProcess(): Timerを開始
  - Timer(10秒Interval)にて処理を行う

## 利点と欠点

- スレッド
  - 利点: 処理のPriorityを設定できる
  - 利点: 一つのソースを用いて複数のInstantiateが可能 (ソースの流用性が高い)
  - 欠点: スレッドをInstantiateする別のもの(フォームなど)が必要
  - 欠点: スレッドのpublic関数を呼べるのはInstantiateした側のみ (あるいはそのポインタを渡す必要あり)
  - 欠点: TMemoへの表示など、UIと親和性は低い (Synchronizeを使うか、別フォーム側の描画処理の実装が必要)
- フォーム
  - 利点: ヘッダーをincludeすることで複数の場所(例: フォーム)からpublic関数を呼べる
  - 利点: TMemoへの表示など、UIと親和性が高い
  - 欠点: Priorityは固定
  - 欠点: フォーム(UI)と処理がくっついているため、ソースの流用性は高くない (処理の切り出しが別途必要)


フォームでの実装としたところ、その機能の見通しは良かった。
3プロジェクトでそれぞれ、1,1,2の実装とした。2の実装があるプロジェクトでは同じようなフォームが２つできたので、将来的に変更する場合に複数同時変更となる点はｘ。
FactoryGirlのbuildとbuild_stubbedって何が違うの？

違いに迷ったのでまとめました。

テストデータ

```ruby:factories/users.rb
FactoryGirl.define do
  factory :user do
    name '太郎'
    email 'taro@exampla.com'
  end
end
```

```ruby:factories/articles.rb
FactoryGirl.define do
  factory :article do
    title 'タイトル'
    body '本文'
    user
  end
end
```
Userは複数のArticleを所持しています。
Articleは一つのUserを所持しています。


### buildしたときの挙動
```ruby:pry-console
pry> article = FactoryGirl.build(:article)
  id: nil,
  title: 'タイトル',
  body: '本文',
  user_id: 1
pry> User.last
  id: 1,
  name: '太郎'
  email: 'taro@example.com'
pry> article.user
  id: 1,
  name: '太郎'
  email: 'taro@example.com'
pry> article.user == User.last
=> true
```
idがnilのテストデータが生成されます。saveは行われていません。
しかし、アソシエーション先のUserを作成しています。

### build_stubbedしたときの挙動
```ruby:pry-console
pry> article = FactoryGirl.build_stubbed(:article)
  id: 1001,
  title: 'タイトル',
  body: '本文'
  user_id: 1001
pry> User.last
=> []
pry> article.user
  id: 1001,
  name: '太郎'
  email: 'taro@example.com'
pry> article.user == User.last
=> false
```
idが付与された状態で生成されます。同じくsaveは行われていません。
こちらでは、アソシエーション先のUserのインスタンスは生成されていますが、保存はされていません。

### 使い分け
|                                | build | build_stubbed |
|:-------------------------------|:-----:|:-------------:|
| DBに保存                        | しない |     しない     |
| アソシエーション先をDBに保存       |  する  |     しない     |
| アソシエーション先をインスタンス生成 |  する  |      する     |
| idを生成                        | しない |      する     |
簡単にまとめるとこんな感じでしょうか。
実際にDBに保存されたデータがテストに必要なときは、create OR buildを使い、余計なI/Oを避けるために、必要のないときはbuild_stubbedを使うというのがベストだと思います。

@shuhei さんにコメント頂き、修正しました。ありがとうございます。
Google スプレッド シートでWebスクレイピング

GoogleスプレッドシートでWebスクレイピングしてみた。

このBlogを参考にさせていただきました。
http://kaniku.seesaa.net/article/212479636.html
http://qiita.com/ktmg/items/d53440c913e20f8bb34c

経済レポート.comの新規記事の掲載元リンクを直接取得したいと考え作成しました。
経済レポートは非常に良いサイトなのですが、RSSで提供していただいているリンクが
全て経済レポートサイト内のページになっている為、掲載元にアクセスするのが面倒くさい
その為、スプレッドシートにタイトルと直リンクをRSSから自動取得できる様にしてみました。

手順は次の通りです。Xpathの理解が追いついてませんが、なんとか完成！

１）GoogleスプレッドシートにRSSを取り込む

``
=importFeed("http://www3.keizaireport.com/rss/node_1.xml")
``

２）RSSの記事リストから元記事のURLを取得する為、HTMLをスクレイピングします。
取得したリンクは経済レポート.comのページになる為、その中から元記事のURLリンクを取得

スクレピングにはHTMLから該当行をXpathで取得する必要がある為

http://qiita.com/ktmg/items/d53440c913e20f8bb34c

の記事を参考しました。

GoogleスプレッドシートのｉｍｐｏｒｔＸＭＬ機能で取り込むXpathを取得する為
Chromeの検証機能を活用しXpathリンクをCOPYXpathにて取得

取得箇所は次のHTML
``
<a href="/jump.php?RID=275091&amp;key=9096" target="_blank" class="bb">ICTで育むボランティア・レガシー：＜実践＞公共インフラ関連ビジネス- オリンピック・パラリンピック</a>
``

COPYXpathで取得されたリンクは次のものになった。

``
//*[@id="bk_form"]/h1/a
``

３）Xpathを取得し、GoogleスプレドシートのimportXMLで処理できる様に変更する。
先に取得したXpathでは、リンクとして認識しない為、Googleスプレッドシートで認識する
様に加工する。

``
//*[@id="bk_form"]/h1/a
``

加工内容は”を’へ変更する

``
//*[@id="bk_form"]/h1/a
``

↓”だとスプレッドシートで認識しない為、'へ変更する。

``
//*[@id='bk_form']/h1/a
``

４）取得したXpathが正常に取得できているかテスト
GoogleスプレッドシートのimportXMLへ入れてテストを実施
Googleスプレッドシートのセルに次の関数を入力

``
=importXML("http://www3.keizaireport.com/report.php/RID/275091/","//*[@id='bk_form']/h1/a")
``

※テストはわかりやすい様に固定リンクでテストを実施し、Xpathの取得テストをする。

▼次の文字列が取得される。
海外 経済指標予測とイベント予定（2016年5月８日～5月15日）

５）リンク先のURLを取得する為、href部分を取得する様、/@hrefをxpathの後ろに追加
@hrefをXpathの部分に追加

``
=importXML("http://www3.keizaireport.com/report.php/RID/275091/","//*[@id='bk_form']/h1/a/@href")
``

@hrefを指定すると以下のURLが取得

/jump.php?RID=275091&key=9096

なお、@の後ろをtargetにすると、_blankが表示される。

６）相対パスでURLが記載されている為、GoogleスプレッドシートのCONACTENATE関数を使いリンク先のURLを生成し直す

``
=CONCATENATE("http://www3.keizaireport.com",importXML("http://www3.keizaireport.com/report.php/RID/275091/","//*[@id='bk_form']/h1/a/@href"))
``

http://www3.keizaireport.com/jump.php?RID=275091&key=9096

綺麗にURLが生成される。

とりあえず[こんな](https://docs.google.com/spreadsheets/d/1axqi6dikRFefg0F315mPnvwmhvhICIK-1X3Xp2lL77U/edit?usp=sharing)感じで完成！
複数行が関係している事を解りやすくする工夫（なのだと思う）

> これは面白いとおもった事を書いた記事なので、「正しい事」ではありません（今時ならコーディング規約に違反しそう）。多くの場合、無駄な工夫などせず普通が一番ですね！

PHPにはPerlみたいなお手軽ブロックスコープはない（と思う）のだけれど、以下のようなコードを見かけることがある。

```php
<?php
{   // Do Foo
    $foo = getFoo();

    doHoge($foo);
}

{   // Do bar
    $bar = getBar();
}
```

これは以下のように書いた時と差は無い（と、思うんだけどそこまでの自信はない。皆さまご存じの通り（？）、Perlではちゃんと意味や意義がある）。

```php
<?php
// Do Foo
$foo = getFoo();

doHoge($foo);

// Do bar
$bar = getBar();
```

これは「ここからここまでがこの処理」という風にコードを読みやすくする為だと思う。現実によくある二つ目のようなコードは「"Do Foo"コメントが"doHoge()"にかかるのか？」みたいなのが解りづらいことはしばしばある。（そのようなコメントの書きかたが悪い、というのはさておき）

それを回避するために「// End of Do Foo」みたいな事書いてるコードも（希に）あったりするが、この`{〜}`を使う手法はそれよりはスタイリッシュ…なのだろうか。


同様に、PHPではないけど、どうしても行数が増えるHTMLとかだとしばしば以下みたいな努力がなされる事が多いですね。（個人的にはIDEのお世話になっているので、やらないけど）

```html
<div id='hoge'>
  MANY LINES HERE..
</div><!-- /hoge -->
```

***

思考停止しながらつらつらとながーーーく手続きを書いて、適当にコメントをさしこんでいくと、前述の通り「これってどこまでがこのコメントの範囲なの？」ってなりやすいので、まあその回避のために`{〜}`をつかう人もいるのかなと思った。

放っておくと無限に行がふえやすい、ルーターとか定義のコードとかではよいのかな…。

とはいえPHPはHTMLじゃないので「関数なりメソッドなりに切り出さない設計が悪いんだ！」といわれればまあそうかもですね。けれど、絶対に１箇所からしか参照されない手続きを関数を切り出すのもどうなのかと思う事もあるのが人情だとおもうし、こういう工夫が好きな人もいそうだなとおもった。(なお、残念ながらPHPStormでは`{〜}`のフォールディングはできないようだ)


こういうの、多分私なら２回くらい使ってみてその後は忘れてしまう系の工夫ですが、メモしておきます。
プログラムの写経（vim編）

>##追記:2017/07/22
>>今だと，[Neovim](https://neovim.io/)をインストールすれば，vimshellが必要ないです．つまりdeniteも入れなくてできますね．多分．
>>:terminalコマンドでそのまま open sample.htmlでひらけます．
>>ぜひ卒論，レポートなどでご活用ください．


プログラムを写経するのにまずはシンタックスが色付きじゃなきゃ駄目だし、行数が無いと使えないということで調べていった結果、自分の今のベストの方法を書いていく。一応mac用に書いてますが、少しの変更でwindowsでもlinuxでも応用可能です。

まず、vim で適当なサイトからコピーしてきたソースコードをコピペして開く
（もとからサンプルコードがあればそれを開いても勿論大丈夫でございます！)

```bash:terminnal画面にて
vim Sample.java
```

<img width="811" alt="vimsample.png" src="https://qiita-image-store.s3.amazonaws.com/0/33329/32f4d6e6-0450-5043-587d-cf1625f7cbde.png">

このようなサンプルコード開いたとします。

esc　でノーマルモードに入ります。

###①まずはソースコードをhtmlにする

```vim:vim 
:TOhtml "コードをhtml化
:w! sample.html "ファイル名(sample.html)で保存
```

:wqでとじてopen sample.htmlでもいいのですが、めんどくさいのでVimShellで開きましょう。まずは以下を参考してdein.vim をいれましょう！

.vimrcの先頭に以下を追加

```vim:.vimrc
"dein.vimの設定

let s:dein_dir = expand('~/.cache/dein')
let g:rc_dir = expand('~/.vim/rc')
" dein.vim 本体
let s:dein_repo_dir = s:dein_dir . '/repos/github.com/Shougo/dein.vim'

" dein.vim がなければ github から落としてくる
if &runtimepath !~# '/dein.vim'
  if !isdirectory(s:dein_repo_dir)
    execute '!git clone https://github.com/Shougo/dein.vim' s:dein_repo_dir
  endif
  execute 'set runtimepath^=' . fnamemodify(s:dein_repo_dir, ':p')
endif

" 設定開始
if dein#load_state(s:dein_dir)
  call dein#begin(s:dein_dir)

  " プラグインリストを収めた TOML ファイル
  let s:toml      = g:rc_dir . '/dein.toml'
  let s:lazy_toml = g:rc_dir . '/dein_lazy.toml'

  " TOML を読み込み、キャッシュしておく
  call dein#load_toml(s:toml,      {'lazy': 0})
  call dein#load_toml(s:lazy_toml, {'lazy': 1})

  " 設定終了
  call dein#end()
  call dein#save_state()
endif

" もし、未インストールものものがあったらインストール
if dein#check_install()
  call dein#install()
endif
```

dein.vimを用いて追加しましょう！tomlを使用します。

```toml:dein.toml
[[plugins]]
repo = 'Shougo/vimshell.vim'

[[plugins]]
repo = 'Shougo/vimproc.vim'
hook_post_update = '''
  if dein#util#_is_windows() 
    let cmd = 'tools\\update-dll-mingw'
  elseif dein#util#_is_cygwin()
    let cmd = 'make -f make_mac.mak'
  elseif executable('gmake')
    let cmd = 'gmake'
  else
    let cmd = 'make'
  endif
  let g:dein#plugin.build = cmd
  '''
```

>参考
>・NeoBundle から dein.vim に乗り換えたら爆速だった話
>http://qiita.com/delphinus35/items/00ff2c0ba972c6e41542
>
>・dein.vimを使ってみる
>http://qiita.com/yoza/items/2f8bd33a18225754f346

これでdein.vimの導入とVimShellの導入終わりました。


これでdein.vimを閉じてもう一度dein.vimを開くと自動でインストールされるはずです。
**バージョンが低いvimだとdein.vimが動作しない場合があるので、うまくいかない場合は最新のvimを利用してみてください。**

あとは①の段階にもどってノーマルモードに入って

```vim:ノーマルモードのvimにて
:VimShell
```
<img width="812" alt="スクリーンショット 2016-05-08 14.30.14.png" src="https://qiita-image-store.s3.amazonaws.com/0/33329/de11ad81-16ef-24a5-e87b-da4f09411eef.png">

このようにopenコマンドで開けば
<img width="766" alt="スクリーンショット 2016-05-08 14.30.25.png" src="https://qiita-image-store.s3.amazonaws.com/0/33329/8c991f46-e61d-1ca2-5bb8-9529c2f0f504.png">

ブラウザに立ち上がるのでこれでLet's SYAKYOU TIMEです！

これを印刷するなどして写経してください。

ポイントとしては
・コードのシンタックス（色がついてhtmlが出力される)
・行数が表示される
・インデントなどしっかり反映される
などです。


もっと楽にするにはvimプラグインを書くぐらいかと思います。
:hardcopyというコマンドで印刷することもできますが、私の端末では上手く動きませんでした。:TOhtmlは多分昔のvimでも今のvimでも安定して動くかと思います。

次はvimプラグインの記事を投稿できるように勉強します。。。。
coreserverでFuelPHPを使うとInternal Server Errorになる時の対処法

さくらVPSでのサイト運用がめんどくさくなり、coreserverに戻ってみると、FuelPHPを利用したサイトでInternal Server Errorが表示されてしまい、悩みに悩みまくった。

## 調査

public_htmlに入れた.htaccessをリネームすると、ひとまずトップページ(hogehoge.com/index.php/)は表示できたので、.htaccessが怪しい。

各設定項目を削って動作確認していくと、以下の記述があるとInternal Server Errorとなることがわかった。

```
Options +FollowSymLinks -Indexes
```

## 解決編

[コアサーバーApache／PHPのバージョンアップ](http://www.coreserver.jp/info/20140604.html)

> セキュリティ上の理由より、「Options ALL」を禁止としました。制御できるオプションは、ExecCGI, Includes, MultiViews, Indexes に限らせていただきます。

これかー！じゃあ大人しくコメントアウトしますか…。
（じゃあシンボリックリンクは使えなくなるのか…？
SPARC (Solaris) マシンのデータ完全消去

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6361/585a8837-98f6-5e50-f9eb-3a2c42493d94.png)

# ディスクを確認

```console
$ df

$ cat /etc/vfstab
```


# PROMモニタへ移行

```console
# init 0
```

でシステム停止する.
(Sunキーボードは「Stopキー + a」でもPROMモニタへ移行できる.)
そうすると, okプロンプトになる.

```
ok
```


# CDブート

CDドライブにSolarisのインストールメディアを挿入する.
okプロンプトから,

```
ok boot cdrom -s
```

により, シングルユーザでCDブートする.


# フォーマット

起動後, 以下のようにディスクを`format`する.

```console
# format
Specify disk (enter its number): X
format> analyze
analyze> purge
```


# 参考

- [How do I remove sensitive information from a disk?](http://www.oracle.com/technetwork/server-storage/solaris/overview/purge-135585.html)
- [Sun/ディスク消去法](http://alfa.homelinux.org/pukiwiki/index.php?cmd=read&page=Sun%2F%E3%83%87%E3%82%A3%E3%82%B9%E3%82%AF%E6%B6%88%E5%8E%BB%E6%B3%95)
Photoshopの一番下のレイヤーのみ表示|非表示をトグルするJavaScript


色調補正のやり過ぎを防ぐには、簡単な操作で補正前｜補正後を切り替えられるようにすると良い
表示したままにしておきたいレイヤーの目玉マークをOption(Alt）+クリックすることで、これ以外のレイヤーを全て非表示にし、もう一度Option+クリックすると、 **表示・非表示含めて** 元の状態に戻す

単に「背景」レイヤーがある状態であれば、背景レイヤーをOpt+クリックするアクションで対応できた。
背景以外のレイヤー、スマートオブジェクトや透過させたレイヤー、レイヤーグループの場合はアクションに組み込めなかった。

▼こんなふうに使います。
Javascriptで、一番下のレイヤー以外の表示・非表示をトグルする https://youtu.be/aHHWfBBmM8s

これをショートカットキーでトグルするために下のJavascriptをアクションに登録する

```Javascript:補正用表示トグル.jsx
#target PHOTOSHOP
try{
var idShw = charIDToTypeID( "Shw " );
var desc75 = new ActionDescriptor();
var idnull = charIDToTypeID( "null" );
var list42 = new ActionList();
var ref68 = new ActionReference(); 
var tgtLayerkind = activeDocument.layers[activeDocument.layers.length-1]
	if(tgtLayerkind.isBackgroundLayer){
		var idLyr = charIDToTypeID( "Lyr " );
		var idBckg = charIDToTypeID( "Bckg" );
		ref68.putProperty( idLyr, idBckg );
	} else {
		ref68.putIndex( charIDToTypeID("Lyr "), tgtLayerkind.itemIndex );
	}
list42.putReference( ref68 );
desc75.putList( idnull, list42 );
var idTglO = charIDToTypeID( "TglO" );
desc75.putBoolean( idTglO, true );
executeAction( idShw, desc75, DialogModes.NO );
} catch(e){};
```

ESTKからバイナリ形式（jsxbin）で書き出しておくと良い
「ファイル」＞「スクリプト」＞「参照」からこのjsxbinを呼び出すアクションを作り、ショートカットキーを登録しておく。

* 「背景」レイヤーがあるときは、背景レイヤーを対象にする
* 「背景」レイヤーが無いときは、一番下のレイヤーを対象にする。スマートオブジェクトでもOK
* 一番下がレイヤーグループの場合、一番下のレイヤーグループを対象にする
* 一番下のレイヤーグループが入れ子の場合、親のレイヤーグループを対象にする

（動作確認はCC2015）
なんとかMapの違いを簡単にメモ

Mapインターフェースの実装がいろいろあってどの実装がどういう特徴だったかを簡単にメモ

## EnumMap
keyにEnum型を指定できる。

## HashMap
普遍的なMapの実装

## ConcurrentHashMap
スレッドセーフなHashMap

## HashTable
古いJavaのためのものに残っている。
HashMapとはkey値にnullを許容しないぐらいの違い。

## IdentityHashMap
key値の比較に==を用いる（同一インスタンスであること）Map実装。

## LinkedHashMap
順序保証がある（挿入順）Map実装

## TreeMap
決められた順番でkeyを保持する。
（無指定の時、KeyはComparableインターフェースを実装する必要がある。）

## ConcurrentSkipListMap
スレッドセーフなTreeMap

## WeakHashMap
keyへの参照がなくなった時、valueも削除されるHashMap

***

参考元
https://docs.oracle.com/javase/jp/7/api/java/util/Map.html
(Swift) OSXでペアリング済みのBluetoothデバイスを列挙する

Bluetoothを使う場合は、

* IOBluetooth
* CoreBluetooth

のうち、どちらかをimportする必要があるようです。
ここではIOBluetoothの方の機能を使っています。

```swift
import Cocoa
import IOBluetooth

class ViewController: NSViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        for i in IOBluetoothDevice.pairedDevices() {
            let device = i as! IOBluetoothDevice
            print("device: ", device.name)
        }
    }

}
```

##参考リンク
http://stackoverflow.com/questions/11756464/mac-to-bluetooth-device-file-transfer-simple-example
WiFi繋いだり切ったりコマンドラインで

弱いWiFiを優先してつかんでイライラするときのおまじない。

```bat:切る
DOS>netsh wlan disconnect
インターフェイス "Wi-Fi" の切断要求が正常に完了しました。
DOS>
```

```bat:繋ぐ
DOS>netsh wlan connect 000000EARTH
接続要求が正常に完了しました。
DOS>
```
GitHubでやり取りするときに使いたい英語表現集

OSSにコントリビュートしたいとき、英語で目的や前提、共感、工夫などを言葉を尽くして伝えられると、Issueは解決しやすいし、PRはマージされる率が高いと思う。というわけで、最近GitHub Issueを読んでいて、個人的にためになった言い回しをここにまとめていきます。

> Sorry for the latency here -- I've had some personal matters that have been keeping me busy.
> https://github.com/kubernetes/kubernetes/issues/23104#issuecomment-199950473

訳: 遅れてごめんなさい。個人的な色々で忙しくて・・。

普通はexecuse me/sorry for being late (in replying)/a delayed responseと言うと思ってたんだけど、latencyという単語を使うあたりがなんだかエンジニアっぽい。

> One thing that comes to mind is that we probably need to set expectations about whether <S> will when <SVO>.
> https://github.com/kubernetes/kubernetes/issues/23104#issuecomment-199950736

訳: 一つ気がついたことを話すと、私達はSがSVOかどうかについて前提を定めておいたほうがいい気がします。

議論の前提が実は定まってない時に使えそうなフレーズ。to mindはto my mindとしても良い気がした。

> I think that's avoidable
> https://github.com/kubernetes/kubernetes/issues/23104#issuecomment-199986374

訳: それは避けられると思う。

何らかの制約がある前提で何かができないと言われた時、やり方によってはできるということを示したいときに使えそうなフレーズ。

> At the very least it would be really nice to have every N ○○ed(動詞過去形)
> https://github.com/kubernetes/kubernetes/issues/23104#issuecomment-201121647

訳: 最低限、すべてのNが○○になってると素晴らしいと思う。

何かをもれなくとある状態にしておくとうれしいよ、ということを言いたい時に使えそう。

> SGTM
> https://github.com/kubernetes/kubernetes/issues/23104#issuecomment-199936281

Seems good to meの略みたい。LGTMはよくみるけど、SGTMはめずらしい。

> PTAL at the 2nd commit.
> https://github.com/coreos/coreos-kubernetes/pull/449#issuecomment-220187516

PTALはPlease take another look(もう一度見ていただけますか)の略みたい。これで「2つ目のコミットをもう一度見ていただけますか/レビューしていただけますか」。
R言語でDB接続（MySQL)から取得までメモ

###R言語でDB接続（MySQL)から取得まで

```R
# ライブラリの読み込み 
library("RMySQL")

# RStudioの場合 packagesのパネルからチェックを入れれば自動で読み込まれる
library("RMySQL", lib.loc="/usr/local/Cellar/r/3.2.2/R.framework/Versions/3.2/Resources/library")

# MySQLドライバ
md <- dbDriver("MySQL")

# DB接続
dbconnector <- dbConnect(md, dbname="<DB名>", user="<user>", password="<password>",  host="<host>") 


# dbGetQuery、dbSendQueryの違い
# クエリ実行 結果をデータセットに保管
data <- dbGetQuery(dbconnector, "select * from sample_table")

# MySQLResult形式で保管
sqlResult <- dbSendQuery(dbconnector, "select * from sample_table")

# MySQLResultからデータセット保管
data <- fetch(sqlResult)


# 破棄する
dbDisconnect(dbconnector)


```
jQuery 練習問題

<img src="https://qiita-image-store.s3.amazonaws.com/0/20635/b280a62c-757d-316d-9c52-c0543d804790.jpeg" width="auto" height="300px">


##練習問題
1.headerを1秒後hideで消す
2.headerを1秒後showで表示
3.btn_3のボタンをダブルクリックでfooterに文字を入れる
4.btn_4をクリックしたらid="result"に対して点滅するように記述
　追加:"id="resultの下に文字を追加する
5.btn_5をクリックするとliの文字を赤とフォントを10px
6.btn_6をクリックするとliの四角を角丸に変更
7.btn_7をクリックするとliの背景をskyblueに変更
8.btn_8をクリックするとliの背景をgrayにし、クリックをoffにする

```lang:1
function hideHeater{
  $("header").hide(1000);
}   
```

```lang:2
function hideHeater{
  $("header").show(1000);
}   
```

```lang:3
$("#btn_3").on("dblclick", function(){
  $("footer").text("文字を入れた");
});
```

```lang:4
$("#btn_4").on("click", function(){
  $("#result").fadeOut(1000).fadeIn(1000);
  $("result").append("<di>文字</div>");
});
```

```lang:5
$("#btn_5").on("click", function(){
  $("li").css( "color","red").css("fontSize", "15px");
});
```

```lang:6
$("#btn_6").on("click", function(){
  $("li").css("border-radius","10px");
});
```

```lang:7
$("#btn_7").on("click", function(){
  $("li").css("background-color","skyblue");
});
```

```lang:8
$("#btn_8").on("click", function(){
  $("li").css("background-color","gray");
  $("#btn_8").off("click");
});
```
さくらサーバーでRewriteが動かない問題


` http://path/gallery.php ` を
` http://path/gallery ` で表示したい。

ローカルでは動くのに、さくらのサーバーに上げた時だけ.htaccessが動かなかったので ` MultiviewsMatch Any ` を追加した。

それを含めて以下のような.htaccessを作成

```
# さくらサーバー専用の対策
MultiviewsMatch Any
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [L]
```


> 参考
[さくらサーバーのマルチドメイン環境下でmodRewriteが動かない場合の原因と対処法](http://denshis.com/archive/%E3%81%95%E3%81%8F%E3%82%89%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%81%AE%E3%83%9E%E3%83%AB%E3%83%81%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E7%92%B0%E5%A2%83%E4%B8%8B%E3%81%A7modrewrite%E3%81%8C%E5%8B%95/)

<br>

今回は必要なかった`RewriteBase /`
http://q.hatena.ne.jp/1165927535

` RewriteCond %{REQUEST_FILENAME} !-d ` の意味は
フォルダ（-d）がある場合は、直後の処理のリライトルールを適用しない
http://nandani.sakura.ne.jp/web_all/server/15/

` RewriteCond ` は、` RewriteRule ` を実行するための条件を定義
http://weblabo.oscasierra.net/apache-rewritecond-base/
http://web.tvbok.com/web/server/rewritecond_rewriterule.html
【Excel VBA】セルの内容をテキストファイルに出力するサンプル


エクセルと同じパスに「yyyymmdd.txt」のファイル名で
テキストファイルを作成し、エクセルの内容を出力するVBAのサンプルです。

```vbnet:VBA
Sub MakeText()
    '変数を定義します
    Dim FSO As Object
    Dim lStr As String

    '変数に値を代入します
    bookName = ThisWorkbook.Name
    'シート名を設定します
    sheetName = "XXX"
    Workbooks(bookName).Activate
    Sheets(sheetName).Select

    'オブジェクトを作ります
    Set FSO = CreateObject("Scripting.FileSystemObject")
    tTime = Left(Replace(Now(), "/", ""), 8)
    
    With FSO.CreateTextFile(ThisWorkbook.Path & "¥" & tTime & ".txt")
            lStr = Cells(X, Y).Value
            .writeline lStr
        .Close
    End With
    Set FSO = Nothing
End Sub
```

基本となる形ですので、シート名、ファイル名、出力するセルなどをカスタマイズして使いましょう。
JavaScript 関数の練習問題

![js.png](https://qiita-image-store.s3.amazonaws.com/0/20635/edf7113a-603b-1283-f806-11a30c262dcf.png)


##練習問題
1.アラート”OK”を表示する関数を作ろう
2.一つの文字を関数に渡し、その文字をアラートで表示
3.２つの数字を関数に渡し、たし算した結果をalertで表示
4.３つの数字を関数に渡し、たし算した結果をalertで表示
5.関数に"id名"と"色名"を渡し"p"要素の背景を変える
6-1.現在--年--月--日をリターンして結果をアラートする


```lang:1
function ok_alert(){
    alert("ok");
}
ok_alert();
```

```lang:2
function sum(n1){
    alert(n1);
}    
sum("一文字");
```

```lang:3
function two(one,two){
    var sumTwo = one + two;
    alert(sumTwo);
}    
two(1,2);
```

```lang:4
function three(one, two, three){
    var sumThree = one + two + three;
    alert(sumThree);
}
addTh(1,2,3);     
```

```lang:5
function idColor(id,color){
    document.querySelector(id).style.backgroundColor = color;
}
idColor("div", "red");
```

```lang:6
function nowTime(){
    var now   = new Date();
    var year  = now.getFullYear();
    var month = now.getMonth()+1;
    var date  = now.getDate();
    var time = "現在"+year+"年"+month+"月"+date+"日";
    alert(time);
}   
nowTime();
```
JavaScript おみくじ

![js.png](https://qiita-image-store.s3.amazonaws.com/0/20635/bb20394e-4093-e23f-bd9a-b0447d507ba7.png)


##JavaScript勉強メモ。
**4点を意識して写経なり**
*- 動くアプリを作る*
*- 書いたコードを理解*
*- 機能またはデザインを追加*
*- 成果物は、ネット上にあげる*


```lang:html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    
    <style>
        body{
            background: white;
            text-align: center;
            font-size: 100px;
            color:#fff;
        }
        #result{
            margin: 30px auto;
            width: 500px;
            height: 400px;
            border-radius: 50px;
            line-height: 180px;
            color:black;
            font-size: 100px;
            font-weight: bold;
            background-color: greenyellow;
            box-shadow: 0, 2px, 10px rgba(0,0,0,0.3);
            background-color: aqua
        }
        #btn{
            margin: 20 px;
            width: 500px;
            padding: 50px;
            border-radius: 5px;
            background: orange;
            box-shadow: 0 4px 0 #FFD700;
            cursor: pointer;
            font-size:50px;
        }
        
    </style>
    
</head>

<body>
    <div id= "result"></div>
    <form>
      <input type = "button" value="スタート" onclick="omikuji()" id="btn">
    </form>
    <div class="anime"></div>
<script>
    
    var count = 0;
    var countup = function(){
　　  alert("今日も1日に頑張りましょう！");
     location.href = "http://www.youtube.com/v/S86ppy4jdxg?autoplay=1";
    }
    
    
    
    function omikuji(){
        document.getElementById("result").innerHTML = "大吉";
        var num = Math.floor(Math.random()*5+1 );
        if(num==1){
            document.querySelector("#result").innerHTML = "大吉";
            document.querySelector("#result").style.backgroundColor = "yellow";
            document.querySelector(".anime").innerHTML="./matu.jpg";
            setTimeout(countup, 1000);
            
        }else if(num==2){
            document.querySelector("#result").innerHTML = "中吉";
            document.querySelector("#result").style.backgroundColor = "pink";
            setTimeout(countup, 1000);
       
        }else if(num==3){
            document.querySelector("#result").innerHTML = "小吉";
            document.querySelector("#result").style.backgroundColor = "red";
            setTimeout(countup, 1000);

        }else if(num==4){
            document.querySelector("#result").innerHTML = "凶";
            document.querySelector("#result").style.backgroundColor = "green";
            setTimeout(countup, 1000);

        }else if(num==5){
            document.querySelector("#result").innerHTML = "大凶";
            document.querySelector("#result").style.backgroundColor = "red";
            setTimeout(countup, 1000);

        }
    }
     
</script>

</body>
</html>
```
JavaScript/jQuery じゃんけんゲーム 

<img src="https://qiita-image-store.s3.amazonaws.com/0/20635/91b0963f-aa6e-4646-5650-55153bd8f19a.jpeg" width="auto" height="500px">

##JavaScript勉強メモ。
**4点を意識して写経なり**
*- 動くアプリを作る*
*- 書いたコードを理解*
*- 機能またはデザインを追加*
*- 成果物は、ネット上にあげる*


```lang:html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<script src="js/jquery-2.1.3.min.js"></script>
<link rel="stylesheet" href="css/sample.css">
<title>じゃんけん</title>
<script>
$(document).ready(function(){
     //ここからJSを記述Start!!!
    
    
    
    $("#gu_btn").on("click", function(){
        var humanGu = 1;
        var comp = Math.floor(Math.random()*3+1 );
    
    if(comp == 1 ){
        $("#pc").text("グー")
        $("#result").text("あいこです")
    }else if(comp == 2 ){
        $("#pc").text("チョキ")
        $("#result").text("勝ちです")     
    }else if(comp == 3 ){
        $("#pc").text("パー")
        $("#result").text("負けです")
    }
});
    
    $("#cho_btn").on("click", function(){
        var humaCho = 2;
        var comp = Math.floor(Math.random()*3+1 );
        
    if( comp == 1 ){
        $("#pc").text("グー")
        $("#result").text("負けです")
    }else if( comp == 2 ){
        $("#pc").text("チョキ")
        $("#result").text("あいこです")
    }else if( comp == 3 ){
        $("#pc").text("パー")
        $("#result").text("あいこです")
    }
});
    $("#par_btn").on("click", function(){
        var humaPar = 3;
        var comp = Math.floor(Math.random()*3+1 );
    if(comp==1){
        $("#pc").text("グー")
        $("#result").text("勝ちです")
    }else if(comp==2){
        $("#pc").text("チョキ")
        $("#result").text("負けdす")
    }else if(comp==3){
        $("#pc").text("パー")
        $("#result").text("あいこです")
    }
 });
    
});
    
</script>
</head>
<body>

<header>
  <h1>じゃんけん</h1>
</header>

<main>
  <ul>
    <li id="gu_btn">グー</li>
    <li id="cho_btn">チョキ</li>
    <li id="par_btn">パー</li>
  </ul>
  <div id="pc">コンピュータの出した手（表示領域）</div>
  <div id="result">勝ち負け引き分け（表示領域）</div>
</main>


<footer></footer>
</body>
</html>
```
JavaScript 日付計算

![js.png](https://qiita-image-store.s3.amazonaws.com/0/20635/abb1342e-1af9-aa70-045b-d35dd483b573.png "js")

##JavaScript勉強メモ。
**4点を意識して写経なり**
*- 動くアプリを作る*
*- 書いたコードを理解*
*- 機能またはデザインを追加*
*- 成果物は、ネット上にあげる*


```lang:html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>日付計算</title>
</head>
<body>
    <h1>日付計算の練習</h1>
    <p>誕生日<input type="text" id="birthday" value="1984-12-05"></p>
    <p><input type="button" value="計算！" onclick="getAge()";></p>
    <p>生まれてから<span id="dayPast">???</span>日経過していて、だいたい<span id = age>???</span>です。</p>
    
    <script>
        function getAge(){
            //入力値の取得
            var birthday = document.getElementById("birthday").value.split("-");;
            
            //日付オブジェクトの作成（配列に値を入れる）
            var d1 = new Date(birthday[0], birthday[1]-1, birthday[2]);
            var d2 = new Date();
            
            //日数、年齢の計算(日付：現在から生まれた年を引く)
            var diff = d2.getTime() - d1.getTime();
            var dayPast = Math.floor(diff/(1000*60*60*24));
            var age = Math.floor(dayPast / 365.25);
            
            //結果の表示
            document.getElementById("dayPast").innerHTML = dayPast;
            document.getElementById("age").innerHTML = age;        
        }
    </script>

</body>
</html>
```
JavaScript 割り勘計算

![js.png](https://qiita-image-store.s3.amazonaws.com/0/20635/abb1342e-1af9-aa70-045b-d35dd483b573.png "js")

##JavaScript勉強メモ。
**4点を意識して写経なり**
*- 動くアプリを作る*
*- 書いたコードを理解*
*- 機能またはデザインを追加*
*- 成果物は、ネット上にあげる*


```lang:html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>割り算電卓</title>
    <style>
        body{
            font-size: 16px;
            text-align: center;
            font-family: Arial, sans-serif;
        }
        
        h1{
            font-size: 24px;
        }
        
        input[type="text"]{
            padding: 8px;
            margin: 3px;
            border: 1px solid #ddd;
            border-radius: 3px;
            width: 120px;
            font-weight: bold;
            font-size: 18px;
            text-align: right;
        }
        #btn{
            margin: 30px auto;
            width: 180px;
            border-radius: 5px;
            box-shadow: 0 4px 0 #e91b0c;
            background: #f44336;
            color: #fff;
            cursor: pointer;
            padding: 7px;
        }
        
        #btn:hover{
            opacity: 0.8;
        }
        
    </style>
</head>
<body>
    <h1>割り勘電卓</h1>
    <p>金額　<input type="text" value="0" id="price"></p>
    <p>人数　<input type="text" value="0" id="num"></p>
    <div id="btn">計算する</div>
    <p id="result"></p>
    
    <script>
        (function(){
            
         //データ取得（変数入れ）
         var priceForm = document.getElementById("price");
         var numForm = document.getElementById("num");
         var btn = document.getElementById("btn");
         var result = document.getElementById("result");
         var x1,x2,y1,y2;
         var unit = 100;    
         
         //データ取得（アクション）    
         priceForm.addEventListener("click", function(){
             this.select();
         });
         numForm.addEventListener("click", function(){
             this.select();
         });
         btn.addEventListener("click", function(){
             var price = priceForm.value;
             var num = numForm.value;
             
             
             //入力値の正誤の分岐処理
             if(price.match(/^[1-9][0-9]*$/) && num.match(/^[1-9][0-9]*$/)){
                 
                 //入力値の割り切れ、余りの分岐処理
                 if(price % num === 0){
                     result.innerHTML = "一人" + (price/num) + "円です";
                 }else{
                     
                     //足りない、余りの計算
                     x1 = Math.floor(price /num/ unit) * unit;
                     y1 = price - (x1 * num);
                     x2 = Math.ceil(price /num/ unit) * unit;
                     y2 = Math.abs(price - (x2 * num));
            　　　　  
                     //足りない、余りの計算の表示
                     result.innerHTML = "一人" +x1+ "円だと" +y1+ "円足りません<br>" + "一人" +x2+ "円だと" +y2+ "円余ります";
                 }
                 
             }else{
                 result.innerHTML = "入力された値に誤りがあります。";
             }
             
         }); 
    })();
    </script>
    </body>
</html>
```
FuelPHP + Git初期設定

## FuelPHPプロジェクトを作成
```Bash
oil create ProjectName
cd ProjectName
```

## FuelPHPモジュール内にある、Git管理下のコンポーネントを全て削除
```Bash
rm -rf .git .gitmodules *.md docs fuel/core fuel/packages
```

## 新たにGit管理開始
```Bash
git init
```

## コンポーネントをサブモジュールとして管理
```Bash
git submodule add git://github.com/fuel/core.git fuel/core
git submodule add git://github.com/fuel/oil.git fuel/packages/oil
git submodule add git://github.com/fuel/auth.git fuel/packages/auth
git submodule add git://github.com/fuel/parser.git fuel/packages/parser
git submodule add git://github.com/fuel/orm.git fuel/packages/orm
git submodule add git://github.com/fuel/email.git fuel/packages/email

```

## サブモジュールのチェックアウト
```Base
git submodule foreach 'git checkout 1.7/master'
git submodule foreach 'git checkout 1.8/master'
git submodule foreach 'git checkout 1.9/master'
```

## ローカルにコミット
```Bash
git add .
git commit -m "initial commit"
```

## プッシュ
```Bash
git remote add origin [リポジトリURL]
git push -u origin master
```