OmniAICreator/Qiita-1.07M huggingface dataset:
Apple Watch Complications用の複数サイズ画像変換

watchOS 2でカスタマイズ可能な時計盤Complicationsが使用可能になります。
各アプリは最大5種類のComplicationを用意できるのですが、各Complicationにアイコンサイズが指定されており、Apple Watch 38mm版と42mm版にも分かれています。

手動変換が面倒で対応しているツールも見つからないのでサクッとシェルスクリプトを書いてみました。Mac OS Xの標準コマンドで構成されているので特に必要なインストールはないかと思います。

```bash
#!/bin/bash

i=0
sizes=(44 40 38 36 32 28 24 22 20 18 16 14)

path="$1"
basename=${path##*/}
filename=${basename%.*}
iconset="${filename%.*}"_iconset

mkdir -p $iconset
while [ $i -lt ${#sizes[@]} ]; do
  newIcon=${iconset}/${filename}_${sizes[$i]}@2x.png
  sips -Z ${sizes[$i]} $path --out ./$newIcon
  : $[ i++ ]
done

```

# 使い方

1. 対象の画像(your_icon.png)と同じフォルダに、上記コードをコピペし保存したファイルを作ります(名前を例えば`convertForComplications`とします)。
2. このファイルに実行権を付与します。`chmod +x convertForComplications`
3. 実行します。`./convertForComplications your_icon.png`
4. 新しく作られたフォルダ内に12種類のサイズの画像ができているはずです。

よく使う場合はコマンドパスの通った場所に置いてもいいかもしれません。

Complicationに使える画像は透過pngで色は自由(watchOSによって塗り替えられます)、末尾に@2x.pngさえついていればどの名前でもOKです。

Complicationに使えるアイコンは横長のものもありますが、ここでは正方形のみとします。適当に拡張してください。

Complicationに使用可能なサイズはこちらが参考になります。
:link: [watchOS 2 Complicationsチートシート](http://note.meta-glamour.com/2015/08/05/watchos-2-complications-cheet-sheet/)
gollumのMarkdownでPHPのコードをSyntax highlightingする

# gollumとは？：gitベースのWiki
コマンド一発でローカルサーバをたててWikiが編集できます。文書は全てMarkdownで記述でき、そのまま保存されるので利用をやめたくなっても移行が簡単だと思います。

公式ページ：[gollum/gollum](https://github.com/gollum/gollum)

# 問題：PHPのコードがSyntax highlightingされない
gollumにおいて、以下の様なPHPコードのmarkdown（GitHubスタイル）による記述はハイライトされません。



    ```php
    class SimpleClass
    {
        public $var = 'a default value';

        public function displayVar() {
            echo $this->var;
        }
    }
    ```


# 解決策：文頭に`<?php`をつける

    ```php // この行は必須です
    <?php // この行が追加されました
 
    class SimpleClass
    {
        public $var = 'a default value';

        public function displayVar() {
            echo $this->var;
        }
    }
    ```

`<?php`をつけるとちゃんとハイライトされます。Qiitaと若干勝手が違うのでハマりました。


# 原因：Rougeの仕様です
## 前提知識：gollumのSyntax highlightingはRougeが使われている
> There are a variety of languages/markups to use and they depend on which syntax highlighter is currently used in Gollum:

> - Rouge
	- **This is the default, unless Python and Pygments is installed in your system. Then, Pygments have more priority.**
	- Language list for Rouge.
- Pygments
	- Requires Python 2.5+ (2.7.x is recommended).
	- /Language list for Pygments.

> [Home · gollum/gollum Wiki](https://github.com/gollum/gollum/wiki#code-blocks)
（強調は引用者による）

Pythonがインストールされておらず、ターミナルで`gem list | grep  pygments`してPygmentsがインストールされていなければRougeがデフォルト。

> Rouge is a pure-ruby syntax highlighter
[jneen/rouge](https://github.com/jneen/rouge)

## 原因特定の手段：Rougeの挙動を確認したら問題が再現出来た
[Rougeの公式ページ](http://rouge.jneen.net/)でブラウザで挙動を確認したところ`<?php`をつけたときのみハイライトされました。つまり仕様です。
belongsToManyで取得した結果からpivotテーブルの情報を除外する方法


## 状況
下記のCafeとMenuの2つのModelがあります。

```php:Cafe.php
class Cafe extends Eloquent
{
	protected $table = 'cafes';
	
	public function menus() 
	{
		return $this->belongsToMany('Menu', 'cafe_menus');
	}
}
```

```php:Menu.php
class Menu extends Eloquent
{
	protected $table = 'menus';

	public function cafes()
	{   
		return $this->belongsToMany('Cafe', 'cafe_menus');
	} 
}
```

下記のControllerのように値を取得すると、、

```php:CafeController.php
...
$cafe = Cafe::find($id);
$menus = $cafe->menus()->select('menus.id as id', 'name')->get();
...
```

不要なpivotテーブルの情報が含まれています。。

```js:結果
menus: [
{
	id: 229,
	name: "トースト",
	pivot: {
		cafe_id: 673,
		menu_id: 229
	}
},
...
```

## 対応
先ほどの2つのテーブルにhiddenプロパティを設定してあげます。

```php:Cafe.php
class Cafe extends Eloquent
{
	protected $hidden = array('pivot');
...
```

```php:Menu.php
class Menu extends Eloquent
{
	protected $hidden = array('pivot');
...
```

今回の場合はMenuのModelに記載するだけで動作はするようですが、両方に記述しておくとよいでしょう。

```js:結果
menus: [
{
	id: 229,
	name: "トースト"
},
...
```

## 参考
http://stackoverflow.com/questions/26474201/laravel-belongstomany-exclude-pivot-table
2015-09-08 unity > time > string型の日時をSystem.DateTime型に変換する > private System.DateTime curDt = System.DateTime.Parse("2015/09/08 12:30:45");

```txt:動作確認
Unity 5.1.2-f1 on MacOS X 10.8.5
```

参考
http://dobon.net/vb/dotnet/string/datetimeparse.html

```csharp
private System.DateTime curDt;
...
curDt = System.DateTime.Parse("2015/09/08 12:30:45");
```

これで任意の日時をSystem.DateTime型に変換できる。
Intellij IDEAで実行可能なjarを作る方法

## 環境
- OS X 10.9.5
- Intellij IDEA 14.1.4 

## ソースコード

以下の「hello, world」と表示するプログラムを実行可能なjarにします

```java:Main.java
/**
 * Created by nwtgck on 2015/09/08.
 */
public class Main {
    public static void main(String[] args) {
        System.out.println("hello, world");
    }
}

```

## 手順

### 1. ツールバーのFile>Project Structureをクリックします

![スクリーンショット 2015-09-08 午後8.15.46.png](https://qiita-image-store.s3.amazonaws.com/0/84451/c0e4eda2-62a5-6ae8-bfb5-d3ee737379c6.png)

### 2. Artifactsをクリックし、[+]を押してJAR>From modules with dependencies...をクリックします

![スクリーンショット 2015-09-08 午後8.17.27.png](https://qiita-image-store.s3.amazonaws.com/0/84451/0a44034b-c68e-2bb4-4203-e4e1bd3c8152.png)


### 3. 以下の画面のMain Class:の右のボタン[...] を押します

![スクリーンショット 2015-09-08 午後8.24.02.png](https://qiita-image-store.s3.amazonaws.com/0/84451/819e649c-61c8-1c09-dc4d-dfd5c3e744b1.png)

### 4. メインのクラスはMain.javaなのでMainを選択して[OK]を押します

![スクリーンショット 2015-09-08 午後8.17.48.png](https://qiita-image-store.s3.amazonaws.com/0/84451/a5497eaa-2cd6-27c2-4404-6ff03677b342.png)

### 5. 以下の画面になるので[OK]を押します
![スクリーンショット 2015-09-08 午後8.18.06.png](https://qiita-image-store.s3.amazonaws.com/0/84451/d65fad3c-52cc-c653-37f8-fe83fecc0709.png)

### 6. 以下の画面になるので、また[OK]を押します

![スクリーンショット 2015-09-08 午後8.18.17.png](https://qiita-image-store.s3.amazonaws.com/0/84451/7ce2d610-8bd6-7992-0a0e-3d3d8eb61ba8.png)

### 7. ツールバーのBuild>Build Artifacts...をクリックします

![スクリーンショット 2015-09-08 午後8.19.11.png](https://qiita-image-store.s3.amazonaws.com/0/84451/1549c2af-fc80-9110-ff24-5de3a6882bf3.png)


### 8. 画面中央に出てくる以下のBuildボタンをクリックすれば、完成です

![スクリーンショット 2015-09-08 午後8.19.25.png](https://qiita-image-store.s3.amazonaws.com/0/84451/4a3d02c6-f3a8-b910-7158-bb2041262534.png)


## jarを実行する

「プロジェクトが保存されているディレクトリ/out/artifacts/Hello_World_Jar_jar/」に行き、java -jarで実行します

```sh
$ cd /Users/nwtgck/IdeaProjects/Hello\ World\ Jar/out/artifacts/Hello_World_Jar_jar/
$ java -jar Hello\ World\ Jar.jar 
hello, world
```

## 参考
- https://www.jetbrains.com/idea/help/packaging-a-module-into-a-jar-file.html
- https://www.jetbrains.com/idea/help/configuring-artifacts.html
raspberry pi 2 の HDMI に chromium を全画面で表示する


raspberry pi 2 で何らかのデータを視覚化するときに、chromium のレンダラーを使いたい。ふつうの Web レンダリングできるのでお手軽。割と簡単だった。

chrome (chromium) には単一のアプリを全画面で使うためのキオスクモードがあるので、それを使う。

必要なパッケージを入れる。

```
$ sudo apt-get install chromium x11-xserver-utils unclutter
```

次は ~/.config/autostart に以下を追加。

```
@xset s off
@xset -dpms
@xset s noblank
@chromium --noerrdialogs --disable-translate --kiosk --incognitoe "$URL"
```

X を起動する。

```
$ URL="http://localhost:9292/" startx
```

これで全画面で表示できるように。

あとは適当にデータを http 経由で流して描画すれば OK。なお 1080p の液晶に繋いでもちょっと解像度があわなかったので [Raspberry Piのディスプレイの解像度を設定する](http://blog.livedoor.jp/victory7com/archives/23971362.html) を参考にしつつ、/boot/config.txt の hdmi 周りを弄ってぴったりに。

1080p の解像度で Canvas でアニメーションさせるのはさすがに辛いけど、グラフの更新ぐらいなら問題なく行える。

なお raspbian OS 現在標準の wheezy の chronium は 22 でかなり古く、jessie に上げることによって chronium 45 を入れられれば良いんだけど、[いまの所うまく入れられないみたい](https://www.raspberrypi.org/forums/viewtopic.php?t=109309&p=751381)。
Vagrantで仮想環境構築する

#インストール
最初に、仮想環境を動かすためにVirtualBoxを下記URLよりインストールします。
https://www.virtualbox.org/

次にVagrantを下記URLよりインストールします。
https://www.vagrantup.com/

ご自身の環境のものをインストールしてください。

Vagrantがインストールできたかは、
`vagrant -v`
で確認します。
下記のようにバージョンが表示されれば、インストールは成功です。
`Vagrant 1.7.4`


#仮想環境のテンプレートを取得
次に、仮想環境のテンプレート(box)を取得します。
下記URLの表から使用したい環境を選びます。
http://www.vagrantbox.es/

次のコマンドを実行し、テンプレート(box)を取得します。
`vagrant box add test https://github.com/tommy-muehle/puppet-vagrant-boxes/releases/download/1.0.0/centos-6.6-x86_64.box`
取得したboxは
`vagrant box list`
で確認することができます。

#仮想環境を起動
次に仮想環境を起動させます。
`mkdir hoge`
`cd hoge`
`vagrant init test`
これでhogeディレクトリの中にVagrantfileというものが作成されます。
仮想環境のいろいろな設定が記述されています。

次のコマンドを実行すると、仮想環境が起動します。
`vagrant up`
VirtualBoxで起動されているか確認しましょう。

次のコマンドで仮想環境に接続することができます。
`vagrant ssh`

#まとめ
VirtualBoxとVagrantをインストールして、簡単なコマンドを実行するだけで仮想環境が作れちゃいます。
PostgreSQLの基本的なコマンド


PostgreSQLの基本コマンドをメモ。
参考:[ドットインストール](http://dotinstall.com/lessons/basic_postgresql) 他
（注:少しずつ追加していきます）

# 起動
サービスの起動
`postgres -D /usr/local/var/postgres`

# ターミナルを起動
デフォルトのデータベースに接続
`psql -d postgres`

データベースを指定して接続
`psql -d データベース名`

データベースとユーザを指定して接続
`psql -d データベース名 -U ユーザ名`

# データベース
データベース一覧の表示
`\l`

データベースの選択
`\c データベース名`

# テーブル
テーブル一覧の表示
`\dt;` 

テーブル構造の表示
`\d テーブル名;` 

テーブル内のデータを一覧
`select * from テーブル名;`

指定したカラムの内容を小さい順に表示
`select * from テーブル名 order by カラム;`

指定したカラムの内容を大きい順に表示
`select * from テーブル名 order by カラム desc;`

表示数指定
`select * from テーブル名 limit 数;`

表示の開始位置指定
`select * from テーブル名 offset 数;`

カラム内の任意の文字を表示
`select  distinct カラム名 from テーブル名;`

カラム内の合計値
`select sum(カラム名) from テーブル名;`

カラム内の最大値
`select max(カラム名) from テーブル名;`

カラム内の最小値
`select min(カラム名) from テーブル名;`

カラム内の平均値
`select avg(カラム名) from テーブル名;`

データの更新
`update テーブル名 set 更新内容;`

データの削除
`delete from テーブル名 where 条件;`

テーブルのオーナーの変更
`alter table テーブル名 owner to オーナー名;`

##関数
文字数
`select  length(カラム名)  from テーブル名;`

文字列連結
`select concat(文字列, 文字列, ...) from テーブル名;`

##テーブル構造の変更

カラムの追加
`alter table テーブル名 add カラム名 データ型;`

カラムの削除
`alter table テーブル名 drop カラム名;`

カラム名の変更
`alter table テーブル名 rename カラム名 to 新カラム名;`

カラムのデータ型を変更する
`alter table テーブル名 alter カラム名 type データ型;`

##インデックス

インデックス追加
`create index インデックス名 on テーブル名(カラム名);`

インデックス削除
`drop index インデックス名;`

##view
viewの作成
`create view ビュー名 as viewに指定するコマンド;`

view一覧の確認
`\dv;`

viewの使用方法
`select * from ビュー名;`

viewの削除
`drop view ビュー名;`

#外部ファイルの読み込み
SQL文を外部ファイルに書いて実行する時に使う
`\i ファイル名`
MySQLのNULLと空値でハマる

#たとえば
- MySQL 5.6
- hoge varchar(2) NULL可
- 100件のレコードのうち、10件がNULL、90件が"AA"

#ハマる
- `select count(1) from tablename where hoge is null`　：　10件
→ わかる
- `select count(1) from tablename where hoge is not null`　：　90件
→ わかる
- `select count(1) from tablename where hoge = 'AA'`　：　90件
→ わかる
- `select count(1) from tablename where hoge = ''`　：　0件
→ わかる
- `select count(1) from tablename where hoge != ''`　：　90件
→ ！！！！

#言い訳
`''`自体がクソコードなわけですが、`= ''`と`!= ''`が「逆」を意味しないのはいろいろと怖い
NERDTreeのインストール方法

NERDTreeというのはvim上で、ファイル構造を木構造で表示し、別ディレクトリに移動して開いたりすることができるプラグインです。（画像参照( ^ω^ )y）
[terminal.png](https://qiita-image-store.s3.amazonaws.com/0/33329/8b2eba78-1f81-6c9f-0512-7a3c5016fac7.png)

古い記事のやり方でインストールしようとしても上手くいかなかったので公式の[サイト](https://github.com/scrooloose/nerdtree)を見てみるとpathogen.vimを入れると上手く入ると書かれていたのでその通りにしてみた。

**まず、pathogen.vimを入れる為に以下をターミナルで実行する。**

```
mkdir -p ~/.vim/autoload ~/.vim/bundle && \
curl -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim
```

**次に.vimrcに以下を追加する**

```~/.vimrc
execute pathogen#infect()
```
***ここまで上手くいけばあとはNERDTree自体のインストールだけ( ´ ▽ ` )ﾉ***

```
cd ~/.vim/bundle
git clone https://github.com/scrooloose/nerdtree.git
```

これで終了です。

お好みによって隠しファイルを表示したり、キーマップで実行したいと思うので
隠しファイルは.vimrcに

```~/.vimrc
"隠しファイルをデフォルトで表示
let NERDTreeShowHidden = 1
"キーマップ。（ctrl+nで起動できるように）
map <C-n> :NERDTreeToggle<CR>
```
NERDTreeはqで閉じることができます。
他コマンドは公式サイトを参照。
centos7にblackmagicdesign Decklink 4K SDIをセットアップする

○centOS7セットアップ

CentOS-7-x86_64-DVD-1503-01.isoをダウンロード（４Gくらい）

win7機でUNetbootinを使って起動USBディスク作成

インストールできず。ブート画面がおかしい

別のISOファイルを使用
CentOS-7-x86_64-LiveGNOME-1503.iso


○blackmagicdesign Decklink 4K SDIセットアップ

centOSだとDKMSが必要とのことなので、EPELから
dkms-2.2.0.3-30.git.7c3e7c5.el7.noarch.rpmをダウンロード
（centOS機をネットワークにつなげないので、、別PCで・・）

sudo yum install dkms-2.2.0.3-30.git.7c3e7c5.el7.noarch.rpmで
インストール

blackmagicdesignのサイトから、

Blackmagic_Desktop_Video_Linux_10.5.gzを別PCで（win機）ダウンロード

解凍してrpm/X86_64にある
desktopvideo-10.5-a17.x86_64.rpm
desktopvideo-gui-10.5-a17.x86_64.rpm
mediaexpress-3.4.1-a2.x86_64.rpm
をそれぞれyumでインストール

rebootで認識するとreadmeに書いてあったが認識せず。。。

ネットワークに繋いでみて、sudo yum updateやったらなぜだか認識した。
（特に何も落としてなかったみたいだけど）

次回はffmpegからdecklinkを使えるようにする
Vagrantの初期設定、コマンド、スナップショットの設定

## 前提条件

Vagrant と VirtualBoxをインストールしておくこと。

## Boxの追加

以下のサイトで使用したいOSを探す

http://www.vagrantbox.es/

今回はcentos6.6とdebian8.1を準備してみる。

```bash:centos6.6を追加
$ vagrant box add centos66 https://github.com/tommy-muehle/puppet-vagrant-boxes/releases/download/1.0.0/centos-6.6-x86_64.box
```

```bash:Debian8.1を追加
$ vagrant box add debian81 https://dl.dropboxusercontent.com/u/3523744/boxes/debian-8.1-amd64-lxc-puppet/debian-8.1-lxc-puppet.box 
```

## 仮想マシンをインストール

```bash
$ mkdir centos66
$ cd centos66
$ vagrant init centos66
```

## Vagrant ファイルの編集

```bash:Vagrant
Vagrant.configure(2) do |config|
  config.vm.box = "centos66"
  # ローカルネットワーク内で接続するために下記の一行を追加
  config.vm.network "public_network"
end
```

注）ネットワーク環境によってはpublic_networkを設定すると外部接続がうまくいかない可能性があります。その場合は上記記述は必要ありません。


## コマンド

| コマンド | 機能 |
| ---- | ---- |
| vagrant up | 仮想サーバの起動 |
| vagrant halt | 仮想サーバの停止 |
| vagrant status | 仮想マシンの起動状態を確認 |
| vagrant ssh | 仮想サーバにログイン |
| vagrant destroy | 仮想マシンを破棄（初期化） |

## スナップショットを取れるようにプラグインを入れる。


まずはプラグインをインストール。

```bash
$ vagrant plugin install vagrant-vbox-snapshot
```

使い方は以下のコマンドを参照。

| コマンド | 機能 |
| ---- | ---- |
| vagrant snapshot list | スナップショット一覧 |
| vagrant snapshot take  *[snapshot_name]* | スナップショットを撮る |
| vagrant snapshot go *[snapshot_name]* | スナップショットへ戻る（ロールバック） |
| vagrant snapshot delete *[snapshot_name]* | スナップショットを削除 |
証明書の残りの有効な日数をとる

おしえてもらったのでメモっときます。

```
export UTIME=$(date +%s);
echo \(""`date --date "\`openssl s_client -connect hoge.com:443 < /dev/null 2>/dev/null| openssl x509 -text|grep "Not After"|awk '{print $4" "$5" "$6" "$8" "$7}'\`" +%s`" - ${UTIME}) / 86400"|bc
```

ELBに入ってるやつとnginxで終端してるやつでとり方が違うかんじになりそうかな。
監視はzabbixなのでlocalからagent.confに書いてとるかsenderでなげるかまあ、この感じだとつながりさえすればどっからでも取れそうなので色々やりようがありそう。

参考
http://qiita.com/ma3ki/items/302205c0402c3746c9ff
Shortcuts to Move Faster in Bash Command Line

# Basic moves

Move back one character. Ctrl + b
Move forward one character. Ctrl + f
Delete current character. Ctrl + d
Delete previous character. Backspace
Undo. Ctrl + -

# Moving faster

Move to the start of line. Ctrl + a
Move to the end of line. Ctrl + e
Move forward a word. Meta + f (a word contains alphabets and digits, no symbols)
Move backward a word. Meta + b
Clear the screen. Ctrl + l

>What is Meta? Meta is your Alt key, normally. For Mac OSX user, you need to enable it yourself. Open Terminal > Preferences > Settings > Keyboard, and enable Use option as meta key. Meta key, by convention, is used for operations on word.

# Cut and paste (‘Kill and yank’ for old schoolers)

Cut from cursor to the end of line. Ctrl + k
Cut from cursor to the end of word. Meta + d
Cut from cursor to the start of word. Meta + Backspace
Cut from cursor to previous whitespace. Ctrl + w
Paste the last cut text. Ctrl + y
Loop through and paste previously cut text. Meta + y (use it after Ctrl + y)
Loop through and paste the last argument of previous commands. Meta + .

# Search the command history

Search as you type. Ctrl + r and type the search term; Repeat Ctrl + r to loop through results.
Search the last remembered search term. Ctrl + r twice.
End the search at current history entry. Ctrl + j
Cancel the search and restore original line. Ctrl + g
Ruby on RailsでDeviseを用いてセキュアな認証機能を作る


## 課題

ログイン認証の際にRuby on RailsのDeviseを使っている。
セキュリティ強化のために複数回ログイン失敗した際にアカウントのロックを行いたい。
（今回はUsersテーブルの変更を意図して行っている。）

## 対応

```
①ログイン対象のテーブルにカラムを追加する。
②モデルの内容を変更する。
③Deviseの設定を変更する。
```

① ログイン対象のテーブルにカラムを追加する。

```
 rails g migration AddLockableColumsToUsers failed_attempts:integer unlock_token:string locked_at:datetime
```

faliled_attemptsに default: 0, null: false　を追加
migration fileは以下のようになる。

```
 1 class AddLockableColumsToUsers < ActiveRecord::Migration
 2   def change
 3     add_column :users, :failed_attempts, :integer, default: 0, null: false                                                                                                    
 4     add_column :users, :unlock_token, :string
 5     add_column :users, :locked_at, :datetime
 6   end
 7 end
```

② モデルの内容を変更する。

対象のモデルのdeviseの設定にlockableの内容を追記する

app/models/xxx.rb

```
devise :database_authenticatble,xxxxxxxxxxxxxx, xxxxx...., :lockable
```

③ Deviseの設定を変更する。

config/initializers/devise.rb に以下の設定を追加

```
 config.lock_strategy = :failed_attempts # 一定回数ログインミスでロック
 config.unlock_strategy = :time          # ロック解除条件は時間経過のみ
 config.maximum_attempts = 5             # 5回連続ミスでロック
 config.unlock_in = 1.hour               # 1時間ロック継続
 config.last_attempt_warning = false     # 残りミス回数1の時に無警告
```

これで複数回ログインに失敗した際にアカウントをロックすることが可能となります。

他にも設定が色々あるので以下を参照

http://www.rubydoc.info/github/plataformatec/devise/master/Devise/Models/Lockable
cocos2d-jsでブラウザのタブを切り替えて戻った時に効果音の末尾が一斉に鳴る問題の対策

cocos2d-jsのhtml5版で、ブラウザのタブを切り替えて戻った時に効果音の末尾が一斉に鳴る問題の対策の一例。
これはhtml5版でのみ起こる問題だと思われる（cocos2d-js ver3.6.1で確認）。
以下のようにFWにコードを書き加えるとなおる。
無論、切り替える前に鳴らしていたSEはぜんぶ消えるが、しょうがない。

```js:\frameworks\cocos2d-html5\cocos2d\audio\CCAudio.js(1043行あたり。ほぼ末尾にある)
    cc.eventManager.addCustomListener(cc.game.EVENT_HIDE, function () {
        cc.audioEngine._pausePlaying();
+       cc.audioEngine.stopAllEffects();
    });
```
CGImageRefに対する操作をしていて回転で困ったら見るもの

CGImageRefに対する操作をしていて回転で困ったらこれを見ましょう。

http://stackoverflow.com/questions/5427656/ios-uiimagepickercontroller-result-image-orientation-after-upload/5427890#5427890

基本的にiOSはCGImageRefをUIImageでラップしていますが、CGImageレイヤーではorientationの情報を持ちません。そのため、UIImageOrientationUp以外の場合、CGImageレイヤーで操作をすると画像の回転方向がおかしなことになる場合があります。

上記stackoverflowのanswerはUIImageOrientationUp以外のorientationの画像を、CGImageレイヤーからUIImageOrientationUpの方向に修正してくれるコードです。

修正済みのUIImageを使えば、CGImageレイヤーでも正しく動作するはずです。
UIScrollViewのzoomで困ったら見るもの

UIScrollViewのzoomに困ったらとりあえずこれらを見ましょう。

* [PhotoScroller]( https://developer.apple.com/library/ios/samplecode/PhotoScroller/Introduction/Intro.html)
* [Technical Note TN2154 UIScrollView And Autolayout](https://developer.apple.com/library/ios/technotes/tn2154/_index.html)

Pagingに関してはUIPageViewControllerやUICollectionView使えば、UIScrollViewを使わなくても済むので、そちらを使ったほうが良いです。

UIScrollViewのzoomでAutoLayoutを使う場合、Mixed Approachの方がうまくいくと思います。
zoom用途で使いたい場合、異なるサイズのコンテンンツを表示したいケースが多いと思うので、Pure Auto Layout Approachを使うのはしんどいです。
UIScrollView自体の位置、サイズだけAutoLayoutで設定して、UIScrollView内のsubViewたちはframeベースで操作をすると色々詰まなくて良いと思います。
線形回帰の単回帰をPHPで実装


線形回帰の単回帰をPHPで実装してみた。

例のxとyの間に、`y=a+bx+e`というモデルで示せる関係を持てば、ある程度のxとyのペアの配列から、最小二乗分析によって最小二乗モデルを計算することができる。つまり、条件付き期待値を`y=A+Bx`として表示できる。

コードは下の通りである。

	/**
	* Copyright 2015 Sinri Edogawa.
	*/
	class LinearRegression
	{
		private $xs;
		private $ys;
		private $element_count;

		private $a;
		private $b;
		
		function __construct()
		{
			$this->xs=array();
			$this->ys=array();
			$this->element_count=0;
		}

		public function addElement($x,$y){
			$this->xs[]=$x;
			$this->ys[]=$y;
			$this->element_count+=1;
		}

		//y=a+bx
		public function getConstBase(){
			return $this->a;
		}
		public function getParamFactor(){
			return $this->b;
		}

		public function computeLR(){
			if($this->element_count<=0)return false;
			if($this->element_count!=count($this->xs) || $this->element_count!=count($this->ys))return false;
			$x_sum=0;
			$y_sum=0;
			for ($i=0; $i < $this->element_count; $i++) { 
				$x_sum+=$this->xs[$i];
				$y_sum+=$this->ys[$i];
			}
			$x_ave=1.0*$x_sum/$this->element_count;
			$y_ave=1.0*$y_sum/$this->element_count;

			$up=0;
			$down=0;

			for ($i=0; $i < $this->element_count; $i++) { 
				$up+=($this->xs[$i]-$x_ave)*($this->ys[$i]-$y_ave);
				$down+=($this->xs[$i]-$x_ave)*($this->xs[$i]-$x_ave);
			}	
			if($down==0)return false;
			$this->b=$up/$down;
			$this->a=$y_ave-$x_ave*$this->b;
			return true;
		}
	}
	
以下は使用例である。

	$LR=new LinearRegression();
	
	//xとyのペアを繰り返して記録する
	$LR->addElement($x,$y);
	
	$lr_done=$LR->computeLR();
	if($lr_done){
		echo "y=".$LR->getConstBase()."+".$LR->getParamFactor()."x";
	}else{
		echo "FAILED";
	}
「“Xcode-beta”を検証中...」を回避する

[Appleデベロッパサイト](https://developer.apple.com)からXcode（ベータ版含む）のディスクイメージをダウンロードし起動すると、以下のダイアログが出て、起動に時間がかかる。

![Verifying_Xcode-beta.png](https://qiita-image-store.s3.amazonaws.com/0/37213/bd2425aa-4f9e-1707-9efd-26d50984442d.png)

![Gatekeeper.png](https://qiita-image-store.s3.amazonaws.com/0/37213/c0c3f525-8582-28c2-a00e-d47fdaaf3c02.png)

これは[Gatekeeper](https://support.apple.com/ja-jp/HT202491)による検証だが、アプリが確実に安全で信頼できる場合は、下記コマンドで`com.apple.quarantine`拡張属性を削除することにより、[Gatekeeper](https://support.apple.com/ja-jp/HT202491)による検証を回避することができる。

```shell-session
$ xattr -dr com.apple.quarantine path/to/Xcode-beta.app
```

なお、App Store経由でインストールする場合、`com.apple.quarantine`拡張属性は付与されず、ユーザ／グループが`root`/`wheel`となる。これに合わせるには下記コマンドを実行する。

```shell-session
$ sudo chown -R root:wheel path/to/Xcode-beta.app
```
Macで左クリックが効かなくなったら試してみること。


# 左クリックができない？
MacMiniを使用していたところ、ある日突然マウスでの左クリックができなくなった。
トラックパッドも使用していたが、トラックパッドでも左クリックがうまくいかないということだった。

# 解決方法を探してみる。
http://ameblo.jp/kyouhagokigenda/entry-11438899613.html
この辺りを参考にしてみるも、そもそも左クリックできないのに、どうやって
「そこでシステム環境設定のマウスのパネルより，右クリックを「主」に変更。」
を変更できるのかわからず挫折。

# 他の方法を試して見る。
Option+Command+R+P　→　変化なし
セーフブート　→　変化なし
悲しくなってきた・・・。

# どうやったら解決できたのか？
https://support.apple.com/ja-jp/HT201295
これを見ながらSMCリセットをしたら、トラックパッドから左クリックができるようになった！！

この状態で、他の解決方法にもあった、アクセス権の修復も行ったところ、マウスからの左クリックもできるようになった！！

# 最後に
大変でした。
CakePHP3のHttp ClientでSSL通信する場合に使用されるCA証明書について

CakePHP3で他のサーバーと通信する場合、Http Clientを使うと簡単にできます。

参考：[Cookbook 3.x - Http Client](http://book.cakephp.org/3.0/en/core-libraries/httpclient.html)

```php
use Cake\Network\Http\Client;

$http = new Client();
$response = $http->post(
    'http://extra.example.com/api/1',
    [
        'title' => 'hoge',
        'code' => '12345'
    ]
);
```

通信先のURLがhttpsならSSLで通信できますが、この時デフォルトでは、CA証明書ファイルとして`vendor/cakephp/cakephp/config/cacert.pem`が使われます。
これを変更したい場合は、`get()`や`post()`の第3引数の`ssl_cafile`オプションで指定します。

```php
use Cake\Network\Http\Client;

$http = new Client();
$response = $http->post(
    'http://extra.example.com/api/1',
    [
        'title' => 'hoge',
        'code' => '12345'
    ],
    [
        'ssl_cafile' => '/etc/pki/tls/certs/ca-bundle.crt'
    ]
);
```

サーバーの証明書を更新して、コマンドラインでcurlはできるのにCakePHPのエラーが消えなくて、だいぶ悩みました…。
Slackをオープンコミュニティチャットにする

Slackは本来招待式のチャットサービスなんですが、招待部分を自動化することでオープンコミュニティチャットとして使うことができます。メールアドレスを用意してもらうのが若干面倒ですが、そこさえ超えてもらえばとてもかんたん！
Slack Invite Automationを申し訳程度に日本語化し、ちょっと機能を追加しましたのでそれを使ってください。

# サンプル #
私が作った雑談チャットへのリンクです。これと同じように作ります。ここに来てもらってもいいんですよ :blush: 
[http://samezi-but.com/zdnj.html](http://samezi-but.com/zdnj.html)

# 作り方 #
1. まずはじめに、自分が管理権限を持っているSlack TeamとHerokuアカウントを用意します。ここではSlack Teamがすでに作られているものとし、解説はいたしません。


2. 以下のアドレスにアクセスし、自分のTeamのトークンをCreateボタンをクリックして作成し、メモしておきます。
[https://api.slack.com/web#auth](https://api.slack.com/web#auth)
3. 以下のアドレスにアクセスし、Deploy To Heroku アイコンをクリックします。
[https://github.com/samezi-but/slack-invite-automation](https://github.com/samezi-but/slack-invite-automation)
4. Herokuに遷移すると思います。設定しなければいけない項目を以下に示します。
 - App Name (optional) ：アドレスに組み込まれるので設定すべきです。
 - COMMUNITY_NAME：コミュニティの名称を設定します（日本語でOK）。
 - DESCRIPTION：コミュニティの解説を設定しましょう（日本語でOK）。
 - SLACK_URL：あなたのSlack teamのURLを設定します。
 - SLACK_TOKEN：先ほど取得したトークンを設定します。
5. 一番下のDeploy To Freeボタンをクリックします。
6. 完成！

# さいごに #
大事なことなので当コミュニティの招待URLをもう一度貼ります。あなたもぜひオープンコミュニティチャットを開設しましょう。
[http://samezi-but.com/zdnj.html](http://samezi-but.com/zdnj.html)
(追記：ルール追加に伴いサイト構成を変えました）
windows 8.1がよくわからない > フォルダの共有設定 > パスワード保護の共有を有効にする、という項目がそもそもない

Windows 8.1にてフォルダ共有を使用としてました。

「パスワード保護の共有を有効にする」という項目を設定しないといけないのですが、そもそもそういう設定が表示されない。

以下にある画像では「パスワード保護の共有を有効にする」という表記が見られる。
http://blogs.yahoo.co.jp/kita_hatu_2011/2359673.html

一方で、こちらのWindows 8.1 Proにおいて「128ビット暗号化を使用してファイル共有の....」という項目の下にはそういう設定箇所が見つかりません。

何かの条件があわないと表示されないのでしょうか?

<hr>
(追記 2015/09/09)
Windows7 Proでも表示されていない。

昨年の12月にセットアップしたPC (Win7Pro)では表示されていた気がする。

どの設定が関係するのか?

<hr>
(追記 2015/09/09)

以下に解決策を記載しました。
http://qiita.com/7of9/items/773c60d51ad72e11971a
ArgumentError: Index name 'index_hoge_on_fuga' on table 'hoge' is too long; the limit is 64 characters　の解決法



```ruby
class CreateHoge < ActiveRecord::Migration
  def change
    create_table :hoges do |t|
      # t.references :fuga_id, index: true
      t.references :fuga_id , index: { name: 'piyopiyo' }
    end
    add_foreign_key :hoges, :fuga
  end
end
```

下のように、

```
, index: { name: 'piyopiyo'}
```

つけたら解決。
Ubuntu 15.04 を GRUBメニューから CUI で起動する方法(防備録)


## 背景
Ubuntu を 14.10 から 15.04 にアップグレードした際、いろいろとアップグレードに失敗したらしく、再起動したらログイン画面でログインしたはずが、すぐにログイン画面に戻されるというトラブルに会いました。
原因はネットワークインターフェースの設定ファイル(/etc/network/interfaces)の eth0 の項目が何故か消えて無くなっていて、ネットワークが死んでいた事でした。
GUIだと何が起きてるのかさっぱり判らなかったので Ubuntu を CUI で起動したのですが、ちょっと手順が面倒くさかったので忘れないようにここに残しておきます。

## 手順1

再起動して grub メニューを起動します。

![ubuntu-change-cui-1.jpg](https://qiita-image-store.s3.amazonaws.com/0/24981/f6ae66cb-6912-7aff-4905-71f29d55ac71.jpeg)

## 手順2
Ubuntu の項目を編集します。
上の図のUbuntuを選んで E を押します。
linux の項目を探し出します。

![ubuntu-change-cui-2.jpg](https://qiita-image-store.s3.amazonaws.com/0/24981/941bd3ce-55c0-f8aa-b862-aef94cbbc109.jpeg)

## 手順3

Linux の項目に systemd.unit=multi-user.target を追加します。

![ubuntu-change-cui-3.jpg](https://qiita-image-store.s3.amazonaws.com/0/24981/c7d3244d-7fd3-dc9d-88a0-329a5a0b67c8.jpeg)

## 手順4

Ctrl-X を押してブートすると、CUI で起動します。

## おまけ

今回はそもそもログイン出来ない状態だったので GRUB から直接 CUI で起動しましたが、ログイン出来る状態ならば

````
$ sudo systemctl set-default multi-user.target
````

で出来るようになります。
mod_rewriteで特定のドメインへのアクセス制御

# 概要
例えばさくらのレンタルサーバーにドメインを追加して、
xxx.sakura.ne.jp/wp/へもyyy.com/へもアクセスができる状態の場合、
xxx.sakura.ne.jp/wp/へのアクセスは封じるかyyy.com/へリダイレクトをかけることが望ましい。
なのでこうする。

# 実践
~~~lang:/home/user/www/.htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

#### xxx.sakura.ne.jpとしてアクセスされた場合
RewriteCond %{http_host} xxx.sakura.ne.jp

#### wp/〜のへのアクセスはhttp://yyy.com/〜へリダイレクトする　②
RewriteRule ^wp/(.*) http://yyy.com/$1 [R=301,L]

#### それ以外のディレクトリ宛は410 Goneを返す　③
RewriteRule .* - [G]
</IfModule>

~~~

他にもドメインを追加している場合は②を複製すればよし、
ただ、リダイレクトかけるよりも最初からアクセスできないようにしたほうがすっきりするので大抵の場合は②を使わずに③のみで運用してます
初心者がMVCモデルを自己解釈してみた。

#初心者がMVCモデル軽くまとめた。
　PHP歴1ヶ月の私がMVCモデルを理解するために自分なりの解釈をまとめてみた。
MVCモデルを書いてみたが、レビューしたとき、MVCモデルになっていなかった。
自分のMVCモデルは、以下のような状態になってしまった。

**ビューは書類（フォーム）を書く手伝い（処理）**

**コントローラは、モデルとビューにユーザーの
要望を答えるように勝手に動けとしか命令しない人（コンストラクタオンリー）**

**モデルは、仕事全般をする苦労人。（肥大化）**

になってしまっていた。
まったくもってMVCモデルになっていなかった。
ってことでもう一度おさらいしてみたのでちょっとまとめる。


##コントローラには、
ToDoリストを書く
その際、処理が必要だったらモデルに頼む
終わったらビューに頼む

##モデルには、
コントローラに頼まれた処理を実行してデータを返す。
function tasizan()
{
　　\$c = \$a + \$b;
　　return $c;　　　　//返す値
}

##ビューには、フォームタグなどを書く
ユーザーにこの書類（フォーム等）に書いてくださいっていう受付。
その書類をコントローラに渡す（インプットタグ等）
それとコントローラから受け取った書類（処理済みデータ）をユーザーに見せるだけ。

##パソコンに例えるなら？
ユーザーに見えているのはビュー、入力先はコントローラ、処理はモデル

パソコンで例えるなら
モニタがビュー
キーボードがコントローラ
CPUなどがモデル（基本ユーザーに見られない）


##会話っぽくまとめると
　コントローラ「ユーザーきたからビューさん、記入用書類作ってユーザーに見せてあげてー」
　ビュー「はいはーい、ユーザーから記入済み書類もらってきたよー」
　コントローラ「ｆｍｆｍ，なるほど。この処理は難しいな･･･。」
　コントローラ「モデルくん、この処理してくれないかな」
　モデル「オッケー！終わったらデータ返すね！っていってる間に処理終わったよ！はいこれ、データ」
　コントローラ「よし、じゃあビューさん、処理が終わったからこのデータをユーザーに提出してくれないかな」
　ビュー「はーい、じゃあ書類にデータまとめて出力しておきますね！」

ユーザー「amaz◯nぽちー」カチッカチッ

##最後に
こんな感じで私は解釈しましたけど、他の方はどうなんでしょうかね。
それと自分はプログラムとか初めてなんですが間違っているとかありましたら教えて下さい。
泣いて喜びます。

　ps.Qiitaでマークダウン記法を初めて知りました。
sed 中級者への道

## 区切り文字は何でもよい。
文字を置換するとき、一般的には"/(スラッシュ)"を区切り文字にすることが多い。

`sed 's/old/new/' <old_file >new_file`

ただし、ファイルパスなど"/(スラッシュ)"を含む文字を置換したい場合は、スラッシュを区切り文字にしていると、いちいちエスケープしなくてはならず、読みづらい。

`sed 's/\/usr\/local\/bin/\/common\/bin/' <old_file >new_file`

sedは"s"の次の文字を区切り文字にしてくれるため、以下のように書くことが可能になる。

`sed 's_/usr/local/bin_/common/bin_' <old_file >new_file`

`sed 's:/usr/local/bin:/common/bin:' <old_file >new_file`


## "&"でマッチした文字列を表現する。
マッチした文字列を置換後も出力したい場合がある。その時は、置換後の表現で"&"を使うと、マッチした文字列を出力してくれる。

例：a-zを使った単語をカッコつきで出力する。
`sed 's/[a-z]*/(&)/' <old_file >new_file`

例：数字部分を2度出力する。
`sed 's/[0-9]*/& &/' <old_file >new_file`


## "\\(数字)"でマッチした文字列を表現する。
カッコ付きでマッチさせた文字列を"\\(数字1-9)"で使用することができる。（なんのこっちゃ）

例：各行の先頭の単語だけ出力したい。
`sed 's/\([a-z]*\).*/\1/' <old_file >new_file`

> ちょっと解説
> 正規表現ではカッコ"()"を使うとマッチングした文字をグルーピングすることができる。
> そのグルーピングした部分が、\1 に対応する。
> sedでは、"()"はエスケープさせないと文字のカッコと認識されてしまうのでエスケープしておいて、
> その中に含まれる [a-z]* が \1 に対応することになる。

例：2つの単語の順序を入れ替えたい。
`sed 's/\([a-z]*\) \([a-z]*\)/\2 \1/' <old_file >new_file`

> 2つめのカッコは \2 に対応する。

例：同じ単語が続けて出力されている場合、1つを削除する。
`sed 's/\([a-z]*\) \1/\1/' <old_file >new_file`

> "\\(数字)"はマッチング文字列としても使える。

例：先頭の文字の並び順を入れ替える。（abcをcbaにする）
`sed 's/^\(.\)\(.\)\(.\)/\3\2\1/' <old_file >new_file`


## マッチした行の次の行を置換する。

「N」で次の行も読み込んで、置換ができる。

例：「target」にマッチした行の次の行も読み込んで、置換する。
`sed '/target/N;s/old/new/' <old_file >new_file`

例：「target」にマッチした行の次の行も読み込んで、改行を削除する。
`sed '/target/N;s/\n//' <old_file >new_file`


---

随時追加予定です。

[参考](http://www.grymoire.com/Unix/sed.html)
[memo] git

Commit の融合は rebase -i で簡単にできる。 Commit の分割は大変。

git rebase -i で行を削除して得られる結果は、 revert ？ それとも reset ？ -> revert です。

git revert A は「A 『を』打ち消す」、 git reset B は「B　『に』 戻る」あるいは「B より後を取り消す」。わかりづらい。

git add -p で hunk に色をつけるにはどうすれば良い？

git checkout で branch の切り替えも編集結果の棄却もできるのは不可解だが、何かの思想があるのか。

git push :`<remote branch>` で `<remote branch>` を削除できる。まじかよ……。超わかりにくい。 push していないし、 : という記号と削除という機能の対応も見えにくい。

「branch A の HEAD」とかの commit hash を取得する方法はないか？
[SiteCatalyst] JSファイルと干渉しポップアップブロックが発動

スマホブラウザのポップアップブロックにやられて詰んでいます。

HTML の a 要素に target="_blank" をつけた場合に、
スマートフォンでポップアップブロック機能が動作し、
ブラウザによっては、タップしてもページが開かないという現象が発生しています。

target="_blank" をつけずに同一ウインドウでの遷移であれば、
ポップアップブロックされません。
また、target="_blank" をつけた状態でも、サイトカタリストのタグを含むJSファイルを読み込まなければ、
ポップアップブロックされずにページが開けます。

このことからJSファイルが原因なのかと推測していますが、
どなたか同様の事象から抜けだしたかたはいませんでしょうか。

何卒よろしくお願いいたします。
直書きphp で Unix日付の小数点以下をとるには

お仕事で、wordpressが吐き出してるunix日付と同じ数字を、スクラッチなphpで出すことになった。
こういうの。

```
1234567899.9999
```

phpでただこうやってやると

```
echo time()
```

結果は

```
1234567899
```

しか取れないので、

```
list($micro, $unixtime) = explode(" ", microtime());
$unixtime = $unixtime + $micro;
echo $unixtime;
```

ってやった。
そんだけです。
VirtuosoでコマンドラインからSPARQLを実行する

##はじめに
Virtuosoドキュメントなさすぎ

##やりたいこと
SPARQLをコマンドラインから動かしたい

##やること
コマンドラインから動かす

##使ってるもの
AMIで配布されているVirtuosoを使ってます。
http://amiage.com/ja/apps/virtuoso-open-source-edition-ja/


##やったこと

##isqlを立ち上げる
AMI版Virtuosoは素のままだとフルパスで呼び出す必要があります。

	 $ /opt/virtuoso-opensource/bin/isql
	 SQL> sparql select * from <http://localhost:8890/sparql> where {?a ?b ?c} limit 3;

で、その結果はこんな感じ。

|a|b|c|
|:--|:--|:--|
|LONG VARCHAR|LONGVARCHAR|LONG VARCHAR
|http://localhost:8890/sparql|http://www.w3.org/1999/02/22-rdf-syntax-ns#type|http://www.w3.org/ns/sparql-service-description#Service|
|http://localhost:8890/sparql|http://www.w3.org/ns/sparql-service-description#endpoint|http://localhost:8890/sparql|
|http://localhost:8890/sparql|http://www.w3.org/ns/sparql-service-description#feature|http://www.w3.org/ns/sparql-service-description#UnionDefaultGraph|


RDFなので戻り値は基本的にトリプルです。

SPARQLでパラメータを３つ指定したから３つなだけでトリプル云々は無関係でしたorz

「ブラウザからSPARQL叩けばいいやん」って話にも思えるかもしれませんがまぁ知っておいて損はしませんしね。

jq使いたい場合はwgetあたりでエンドポイントをAPIのようにぶん殴ったほうがよさそうです（適当）
ggplot2で同一グラフに2変数の折れ線グラフを描きたい

**2016/04/12追記: ggplot2 v2.1.0にて動作を確認しました**

## Q
このようなデータが手元にあります:


```r
test_data <- data.frame(
var0 = 100 + c(0, cumsum(runif(49, -20, 20))),
var1 = 150 + c(0, cumsum(runif(49, -10, 10))),
date = seq.Date(as.Date("2002-01-01"), by="1 month", length.out=100))
```

この時系列変数`var0`と`var1`の両方共を、`date`をx軸にして`ggplot2`でどうやったら描けますか? できれば`var0`と`var1`の色を変えて、さらに凡例も付けれたら嬉しいです。

## A
もし変数が少ないのであれば、マニュアルで別々に作成ビルドアップできますよ:


```r
library(ggplot2)
ggplot(test_data, aes(date)) +
  geom_line(aes(y = var0, colour = "var0")) +
  geom_line(aes(y = var1, colour = "var1"))
```

![OK_example1.R-1.png](https://qiita-image-store.s3.amazonaws.com/0/35118/1ed9dbb3-a7b6-38da-ac54-53ea5df78b67.png)


一般的なアプローチとしては、`tidyr`パッケージを利用してデータを縦型(long format)に変換していく方法があります:


```r
library(tidyr)
library(ggplot2)

test_data_long <- tidyr::gather(test_data, key="variable", value = value, -date) # 縦型に変換

head(test_data_long, 6)

ggplot(data=test_data_long, aes(x=date, y=value, colour=variable)) +
  geom_line()
```


|date      |   variable|        value|
|-----------|  ---------|  ----------:|
|2002-01-01|   var0     |   100.00000|
|2002-02-01|   var0     |    95.11673|
|2002-03-01|   var0     |    80.26050|
|2002-04-01|   var0     |    67.80293|
|2002-05-01|   var0     |    49.52975|
|2002-06-01|   var0     |    43.69161|

![OK_example2a.R-1.png](https://qiita-image-store.s3.amazonaws.com/0/35118/97f59977-1e32-54b1-d059-fea289d02bc8.png)


データを縦型のデータに変換し、`var0`と`var1`を分けるための変数で色分けを指定すればこのようになります。

## 参考
この記事は、StackOverflowに投稿された以下の記事をベースに、コードを一部改変して翻訳して作成しました:
- [r - Plotting two variables as lines using ggplot2 on the same graph - Stack Overflow](http://stackoverflow.com/questions/3777174/plotting-two-variables-as-lines-using-ggplot2-on-the-same-graph)

関連ドキュメント:
- [geom_line. ggplot2 0.9.3.1](http://docs.ggplot2.org/current/geom_line.html)
Django1.8 + Jinja2 + hamlish-jinja で Haml生活を送る (Python3)


Django で Hamるには、HamlPy とかがあるんだけどPython3多分対応してない。
というかPython3だとあんまり選択肢なさそうで、わりと枯れている hamlish-jinja がよさげだと思いました。

hamlish-jinja は、あくまでも、haml-ish syntax とのことで、Hamlではないんですけど、使って見た感じ、Pythonic でかなり幸せになれると思いました。学習コストもほぼ0だと思う！
https://github.com/Pitmairen/hamlish-jinja

でまあ、そのためにはテンプレエンジンにJinja2 つかわないといけないんだけど、まあ、そのために変えるってのもなんかやな話なんですけど、純粋にJinja2のほうが好きだし、別にHamlのためとかじゃないし、神社とか仏閣とか好きだし、と言い聞かせて変えます。

以下使うためにやったこと。

## Jinja2使う
http://qiita.com/ryu22e/items/e50f8a3fbd6fe836c1b4
1.8 からテンプレ周りの設定方法がかなり変わってる！！！！ あとJinja2が簡単に導入できるらしい！！！！！
でも、細かいことやろうとするとけっこうしんどいので、結局いつもどおり `pip django-jinja` するとかなり楽にできます。設定方法も詳しい。match_regex とかで、URLによってどのバックエンド使うか切り替えたりできる。のでこれでいいとおもう。
http://niwinz.github.io/django-jinja/

## hamlish-jinja 入れる

```zsh
pip install hamlish-jinja
```

で、ぼくのsetting.py はこうなった。

```py
from django_jinja.builtins import DEFAULT_EXTENSIONS
from hamlish_jinja import HamlishExtension

TEMPLATES = [ 
    {   
        "BACKEND": "django_jinja.backend.Jinja2",
        'DIRS': [], 
        'APP_DIRS': True,
        'OPTIONS': {
            'match_regex': r"^(?!admin/).*",
            'match_extension': ".haml",
            'extensions': DEFAULT_EXTENSIONS + [HamlishExtension]
        },  
    },  
    {   
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [], 
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],  
        },
    },
]
```

これで、 いつものテンプレートディレクトリに XXX.haml を置いて、view で XXX.haml とか指定すると普通にうごきます。

```haml
%html
  %head
    %meta charset='utf-8'
    %meta name='viewport' content='width=device-width'
    %meta name='format-detection' content='telephone=no'
    %meta name='description' content={{description}}
    %meta name='keywords' content={{keywords}}
    %title << {{title}}
    %script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js' 
 ```
 
 いいね。

ただ一点 hamlish-jinja 単体には、先にjinjaテンプレートにコンパイルしとくとかの仕組みが一切ないので、多分このままだと本番投入きつい。
そこで、 jinja2 自体のキャッシュ機構を使うことにします。 jinjaのバイトコードでキャッシュしておけば、hamlがーみたいなのは関係なくなる。はず。

こうなりました。

```py
from jinja2 import FileSystemBytecodeCache
...
...
TEMPLATES = [
    {
        "BACKEND": "django_jinja.backend.Jinja2",
        'DIRS': [],            
        'APP_DIRS': True,      
        'OPTIONS': {           
            'match_regex': r"^(?!admin/).*",
            'match_extension': ".haml", 
            'extensions': DEFAULT_EXTENSIONS + [HamlishExtension],
            'bytecode_cache': FileSystemBytecodeCache(directory=os.path.join(BASE_DIR, 'project/cache'), pattern='%s.cache'),
        },
    },
 ...
```

指定したcache ディレクトリにファイルが適宜たまってく。hamlを更新したときだけファイルのタイムスタンプが更新されるので、よさげです。

おしまい。
VirtualBox 5.0.xでフルスクリーン時にミニツールバーを非表示にする方法

# ミニツールバーを非表示にする方法
VirtualBox 4.xまでは[こちらの記事](http://qiita.com/ironsand/items/406dad008f6ba2aacbe9)を参照。

VirtualBox 5.0.x系ではUIが変更された。以下の方法で設定可能。

ミニツールバーの「仮想マシン」→ 「設定」から
![minitoolbar01.png](https://qiita-image-store.s3.amazonaws.com/0/39743/5d10fce5-44a7-9e1d-d52c-427c6446969b.png)

「ユーザーインターフェース」→ 「フルスクリーン/シームレスモード時に表示」のチェックを外す。
![minitoolbar02.png](https://qiita-image-store.s3.amazonaws.com/0/39743/6aed195f-fc99-39db-8ce0-7b0e29cf54c0.png)

これでVM再起動すればOK。
Beamerで配布資料に入れないスライドを作ろうとしてハマった話


大した話じゃないけどググってもそれっぽい情報を見つけられなかったのでメモ．

Beamerでプレゼン資料を作ってて，配布用の資料に入れないスライドを作りたかった．
以下のプログラムについて考える．

```latex
\documentclass[11pt, dvipdfmx]{beamer}

\title{Presentation}
\author{eqs}
\date{\today}

\begin{document}
	\begin{frame}
		\maketitle
	\end{frame}
	\begin{frame}\frametitle{自己紹介}
		\begin{itemize}
			\item 名前 : eqs
			\item 所属 : ＊＊＊＊
		\end{itemize}
	\end{frame}
	\begin{frame}\frametitle{Eulerの公式}
		\[
			e^{i\theta} = \cos\theta + i\sin\theta
		\]
	\end{frame}
\end{document}
```

1行目の`documentclass`のところに`handout`を次のように
追加すれば，コンパイルの際にソースを配布資料とみて
コンパイルしてくれる．

```latex
\documentclass[11pt, dvipdfmx, handout]{beamer}
```

試しに`自己紹介`のスライドを配布資料から消してみる．
[StackExchangeにあった質問](http://tex.stackexchange.com/questions/35027/how-to-exclude-certain-slides-from-handout)によると，次のように`\begin{frame}`の後ろに`<handout:0>`という記述を足せばいいようだ．

```latex
\begin{frame}<handout:0>\frametitle{自己紹介}
	\begin{itemize}
		\item 名前 : eqs
		\item 所属 : ＊＊＊＊
	\end{itemize}
\end{frame}
```

じゃあframeにオプション`[t]`とか`[fragile]`とかついてるときはどうすんのという話．
オプション`[t]`の後ろに`<handout:0>`を突っ込んでみた．

```latex
\begin{frame}[t]<handout:0>\frametitle{自己紹介}
	\begin{itemize}
		\item 名前 : eqs
		\item 所属 : ＊＊＊＊
	\end{itemize}
\end{frame}
```

結果がこれ．(背景が白なのでちょっと見づらい)

![3.png](https://qiita-image-store.s3.amazonaws.com/0/83161/902427cc-e0de-98f8-3c74-ad209efb532d.png)

明らかにおかしいスライドが出てきてる．ここが自分がハマった箇所．

`<handout:0>`をオプションの前に置いたら直った．

```latex
\begin{frame}<handout:0>[t]\frametitle{自己紹介}
	\begin{itemize}
		\item 名前 : eqs
		\item 所属 : ＊＊＊＊
	\end{itemize}
\end{frame}
```
VirtuosoにVADをインストールする

##はじめに
Virtuosoドキュメントなさすぎ

##やりたいこと
Virtuosoに追加機能を設定したい

##やること
VADをVirtuosoに追加する

##使ってるもの
AMIで配布されているVirtuosoを使ってます。
http://amiage.com/ja/apps/virtuoso-open-source-edition-ja/


##やったこと
###VADをDLする
使いたいVADファイルをDLします。
あとでscpを使ったアップロードがあるので、ディレクトリ指定がめんどくない場所に置いておきましょう。

###EC2にアップロードする
scpでとりあえずアップします。

	$ scp -i ~/.ssh/virtuoso.pem ~/develop/virtuoso/cartridges_dav.vad ec2-user@xx.xxx.xxx.xx:/opt/virtuoso-opensource/share/virtuoso/vad/

が、このままやると「権限ねーから」って怒られる。

それもそのはずで「/opt/virtuoso-opensource/share/virtuoso/vad/」はvirtuosoがオーナーになっている。

なので一時的にオーナーを変えておこう。

	% ssh  -i ~/.ssh/virtuoso.pem ec2-user@xx.xxx.xxx.xx
	$ sudo su -
	# chown ec2-user:ec2-user /opt/virtuoso-opensource/share/virtuoso/vad/
	# exit
	$ exit
	% scp -i ~/.ssh/virtuoso.pem ~/develop/virtuoso/cartridges_dav.vad ec2-user@xx.xxx.xxx.xx:/opt/virtuoso-opensource/share/virtuoso/vad/
	% ssh  -i ~/.ssh/virtuoso.pem ec2-user@xx.xxx.xxx.xx
	$ sudo su -
	# chown virtuoso:virtuoso /opt/virtuoso-opensource/share/virtuoso/vad/cartridges_dav.vad

chownとscpは別窓でやったほうが楽だけど、説明するのが面倒なので１画面版。
最終的にこうなってたら問題ない（はず）

	# ls -la /opt/virtuoso-opensource/share/virtuoso/
	total 16
	drwxr-xr-x 4 virtuoso virtuoso 4096 Feb 11  2015 .
	drwxr-xr-x 3 virtuoso virtuoso 4096 Feb 11  2015 ..
	drwxr-xr-x 2 virtuoso virtuoso 4096 Feb 11  2015 doc
	drwxr-xr-x 2 virtuoso virtuoso 4096 Sep  8 05:48 vad
	
###Virtuosoにインストールする
インストールはisqlというものを使って行います。
ちなみにAMI版デフォルトだとフルパスで実行する必要がありますので要注意。

	# /opt/virtuoso-opensource/bin/isql
	SQL> vad_install('/opt/virtuoso-opensource/share/virtuoso/vad/cartridges_dav.vad');

	*** Error 28000: [Virtuoso Driver]CL034: Bad login
	at line 1 of Top-Level:
	vad_install('/opt/virtuoso-opensource/share/virtuoso/vad/cartridges_dav.vad')

エラー表示が出てますが、「おめーログインしてねーだろ」っぽい様子でdbaのパスワードを要求されます。


	Enter password for dba :


AMI版のデフォルトパスワードはEC2のインスタンスIDなので、素のままな人はそれを入れましょう。
問題なければ以下のような表示でインストールが完了したことが表示されます。

	Connected to OpenLink Virtuoso
	Driver: 07.10.3207 OpenLink Virtuoso ODBC Driver
	SQL_STATE     SQL_MESSAGE
	LONG VARCHAR  VARCHAR
	_______________________________________________________________________________

	00000         No errors detected
	00000         Installation of "Linked Data Cartridges" is complete.
	00000         Now making a final checkpoint.
	00000         Final checkpoint is made.
	00000         SUCCESS
	BLOB 0 chars  

	6 Rows. -- 78605 msec.
	
今回はここまで。
Knockout.jsで動的に生成したhtmlに対してbindingする


Knockout.jsで、Ajaxで取得したhtmlに対してbindingしたい場合がありました。
うまくいったのでメモを残しておきます。

## どうしてそんなことをしたくなったのか？

新規作成と編集のフォームを作りたかったのだけれど、Railsのモデルが複雑に絡んだformをKnockout.jsで制御するのはちょっと難しかったため（Knockout.jsを介してのformの投稿先、methodの変更などは面倒かなと…）、なるべくRailsの世界で完結するようにしたかったので動的にformを取ってくることにしました。

しかし、フォームの簡易的な検証機能はKnockout.jsを使いたい、という感じです。

## 簡単にはできない

シンプルに`$.get`でformを取得してしまえば成立するかと思いましたが、これだとbindingは有効になりませんでした。

```html
<div id="form-memo" data-binding="with: formMemoViewModel">
</div>
```

```coffee:formを取ってくる処理
$.get Routes.new_memo_path(), (data) ->
  $('#form-memo').html(data)
```

```coffee:ViewModelをバインドする処理
class @FormMemoViewModel
  constructor: ->
    # なんらかの処理

$ ->
  window.appViewModel = {
    formMemoViewModel: new FormMemoViewModel()
  }
  ko.applyBindings(window.appViewModel)
```

流石に再bindingする必要がありそうです…。

## カスタムバインディングを作る

ググったら、ヒントがありました。
[Stack Overflow: knockout data-bind on dynamically generated elements](http://stackoverflow.com/questions/11066732/knockout-data-bind-on-dynamically-generated-elements)

上記URLの一番下に書かれていたバインディングを作ればよさそうです。
要は、htmlを反映したタイミングで`ko.applyBindingsToDescendants`を実行して現在のBindingContextに追加する感じなのですが、それをobservableに反映したタイミングで行うものです。

CoffeeScriptで書き直したのが以下になります。

```coffee:html_with_binding.js.coffee
ko.bindingHandlers.htmlWithBinding = {
  init: ->
    controlsDescendantBindings: true
  update: (element, valueAccessor, allBindings, viewModel, bindingContext) ->
    element.innerHTML = ko.utils.unwrapObservable(valueAccessor())
    ko.applyBindingsToDescendants(bindingContext, element)
}
```

## 使ってみる

htmlにはAjaxで取得したhtmlを入れるobservable(formHtml)をカスタムバインディング付きで定義します。

```html
<div id="form-memo" data-binding="with: formMemoViewModel">
  <div data-bind="htmlWithBinding: formHtml"></div>
</div>
```

formを取得する処理では、取得したhtmlをobservableに入れます。HTMLに直では入れません。

```coffee:formを取ってくる処理
$.get Routes.new_memo_path(), (data) ->
  window.app_view_model.formMemoViewModel.formHtml(data)
```

```coffee:ViewModelをバインドする処理
class @FormMemoViewModel
  constructor: ->
    @formHtml = ko.observable()
    # なんらかの処理

$ ->
  window.appViewModel = {
    formMemoViewModel: new FormMemoViewModel()
  }
  ko.applyBindings(window.appViewModel)
```

このようにしたところ、Ajaxで取得したhtmlに対してもKnockout.jsのbindが有効になりました。よかったよかった。
【プラグイン】配送伝票番号

###「配送伝票番号」プラグインを作ってみました。
ver3.0.3で検証済みです。
ソースはGithubにupしてます。使い方などはGithhubで。
[https://github.com/ohtacky/ECCUBE3-ShipNumber](https://github.com/ohtacky/ECCUBE3-ShipNumber)

###機能
***
メインの内容としてはおおまかに以下の3つ。

- 受注情報から配送伝票番号の登録、修正。
- メールテンプレート(発送メール)の追加。
- 発送メールへ登録した配送伝票番号の表示。


###機能詳細
#####受注情報から配送伝票番号の登録、修正
***
受注情報から配送伝票番号の登録、修正。
受注管理から配送伝票番号を登録するのに、まずはMigrationファイルへ受注番号と配送伝票番号を紐づける為のテーブルを用意。
テーブルに紐づく、Entity・Repository・doctrineファイルを用意。
最後にRepositoryをServiceProviderに登録します。ここまでで、DB側の記述はOKです。

次に管理画面の表示側を書いていきます。
まず、Formを定義し、ServiceProviderに登録します。
管理画面の受注の編集画面にアクセスされたら呼び出されるように、event.ymlにイベントを記述します。
その後、イベントで呼び出され、登録の処理や画面の描画等のfunctionを定義し、必要に応じてtwigファイルを準備すればOK。

#####メールテンプレート(発送メール)の追加。
***
メールテンプレートに発送メール用のテンプレートを追加したい。
新規でテーブルを作れるのはわかっていたが、既存のテーブルへも下記でデータを追加することが出来た。
インストール時に実行される。
プラグインをアンインストールしてもテンプレートは残る。

```Migrations/version***.php
    public function postUp(Schema $schema)
    {

        $app = new \Eccube\Application();
        $app->boot();

===中略===

        $insert = "INSERT INTO dtb_mail_template(
                            creator_id, name, file_name, subject, header, footer, del_flg, create_date, update_date)
                    VALUES ('$creatorId', '$name', '$fileName', '$subject', '$header', '$footer', '$delFlg', '$datetime', '$datetime'
                            );";
        $this->connection->executeUpdate($insert);
    }
```

#####発送メールへの配送伝票番号追加とメール送信。
***
今回の山場。一通ずつ送信と一括送信で処理が異なる。

一通ずつ送信は簡単。メール送信の確認画面が描画される前に処理を挟み込む。
`eccube.event.render.admin_order_mail.before:
    - [mailShipNumber, NORMAL]`
描画前のデータを捕まえて配送伝票番号を追記し、ECCUBE本体の処理に渡す。
確認画面に伝票番号が表示され、あとは送信ボタンを押せばOK。

一括送信はちょっとハマりました。。。
本体の一括送信処理が送信ボタンを押した後にループを回して毎度本文をセットし送信。
本体に直接記入すれば、毎度本文をセットする段階で配送伝票番号を取得し追記してあげれば済むが、プラグインの場合は処理の前後、描画の前後にしかフックポイントが無い為、どうしたものか。。。

なので、ちょっと強引ですが、本体のメール送信処理を全てプラグイン側でやる事に。
本体の処理の始まる前に
`eccube.event.controller.admin_order_mail_all.before:`
毎度本文をセットするタイミングで配送伝票番号を追記し、メール送信処理。
メール送信が終わったら、そこで処理を終了させ、本体のメール送信処理をスキップ。
これで実装できました。
MySQL(innoDB)のREPEATABLE_READのselect for update結果


# はじめに
MySQL(innoDB)のISOLATION=REPEATABLE_READの場合、selectの結果はそのトランザクションでの初回クエリ発行段階のDBのスナップショットとなる。同時並行する他のトランザクションのコミット（update、insert）の結果がselectで見えることは基本的にはない。

# 通常のselectとselect for updateの結果の差異
通常selectではトランザクション内でスナップショットの結果を返すがfor updateの結果はそうはならない。
REPEATABLE_READさん？？


```SQL

-- トランザクション開始
BEGIN;

-- 適当なクエリを叩く
-- このトランザクションでは、この段階のスナップショットが使われる

mysql> SELECT * FROM hoge_count WHERE id = 1;
+-----+-------------+
|  id | issue_times |
+-----+-------------+
|   1 |           6 |
+-----+-------------+
1 row in set (0.00 sec)

-- ！！ここで別トランザクションでissue_timesを7にupdateしcommit！！

-- select for update -> 最新のが取れる
mysql> SELECT * FROM hoge_count WHERE id = 1 for update;
+-----+-------------+
|  id | issue_times |
+-----+-------------+
|   1 |           7 |
+-----+-------------+
1 row in set (0.00 sec)

-- 通常のselect -> スナップショットの値が取れる
mysql> SELECT * FROM hoge_count WHERE id = 1;
+-----+-------------+
|  id | issue_times |
+-----+-------------+
|   1 |           6 |
+-----+-------------+
1 row in set (0.00 sec)


```

# まとめ
なんでなんだろう・・MySQLのREPEATABLE_READの場合はファジーリードは起きない想定であると思うのだが、よくわからず。わかったら追記予定。
個人的にはこの仕様で助かります。
Swiftで現在時刻との差分を時分秒形式で取得する

storyboardで動作確認済み

```swift
let start = NSDate()
sleep(1)
let cal = NSCalendar.currentCalendar()
let calUnit:NSCalendarUnit = .CalendarUnitSecond | .CalendarUnitMinute | .CalendarUnitHour

let diff = cal.components(calUnit, fromDate: start, toDate: NSDate(), options: nil)
println(NSString(format: "%02d:%02d:%02d", diff.hour, diff.minute, diff.second))
# "00:00:01"
```
jquery的offset在zoom时的问题


当zoom时，jquery的offset无法获得正确的值。

解决方法是，使用原生的offsetTop。
即，

jQuery:

```
var top = $("#something").offset().top;
```

↓

Native JavaScript: 

```
var top = document.getElementById("something").offsetTop;
```

[demo](http://codepen.io/dichao/pen/EVjmym?editors=101)地址
RubyのCSV読み込みでskip_blanks: trueしても空行を除外してくれない場合の対応

```
CSV.foreach('data.csv' skip_lines: /^(?:,\s*)+$/) do |row|
  # do something
end
```

こんな感じで```skip_lines: /^(?:,\s*)+$/```とすると上手くいったメモ
Electronを実行するとdefault_app.jsが動く場合に疑ってみるポイント。


[Electronの公式チュートリアル](https://github.com/atom/electron/blob/master/docs/tutorial/quick-start.md) を見ながらHello Worldを作ってみたのですが、以下のようなエラーダイアログが表示されました。

```
A JavaScript error occurred in the main process

Uncaught Exception:
SyntaxError: missing ) after argument list
    at exports.runInThisContext (vm.js:53:16)
    at Module._compile (module.js:413:25)
    at Object.Module._extensions..js (module.js:448:10)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Object.<anonymous> (/Users/foo/.nvm/v0.12.4/lib/node_modules/electron-prebuilt/dist/Electron.app/Contents/Resources/default_app/main.js:235:23)
    at Module._compile (module.js:430:26)
    at Object.Module._extensions..js (module.js:448:10)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
```

スタックトレースを見て気になったのは、electron-prebuiltのdefault_app/main.jsが実行されていることでした。
そこで、package.jsonのmain(エントリポイント)の指定が間違っているのかと思い、色々試してみたのですが、エラーは変わりませんでした。

下記の該当箇所を見ても `SyntaxError: missing ) after argument list` は関係なさそうです。

```js:default_app/main.js#235
require('module')._load(packagePath, module, true);
```

ぐぐっても原因＆解決策を見つけられなかったので、とりあえずパッケージングして作成されたアプリを起動してみました。
すると、自分が書いたmain.jsのスタックトレースが表示されました。
エントリポイントに指定したファイルでエラーがあった場合には、それをElectron本体がキャッチして代わりにdefault_app/main.jsを実行するようになっているのかもしれません。

ちなみにエラー自体は

```
- app.on('ready', fnction() {
+ app.on('ready', function() {
```

というしょうもないものでした。。。
clone-min機能

# clone-minパラメータ(cloneリソースでの最小構成クローン数の指定)

Pacemaker1.1.14(予定)から追加される機能で、最小clone数を指定可能なパラメータで、設定されたcloneリソースの最小起動数によって、依存するリソースの起動・停止を制御することが可能です。

以下のような設定の場合、

```
### clone ###
clone cloneTest \
        resDummy \
        meta \
               clone-max="2" \
               clone-min="2" \
               clone-node-max="1" \
               notify="true"
primitive resDummy \
(snip)
primitive resTest \
(snip)
colocation rsc_colocation-1 INFINITY: resTest  cloneTest 
order rsc_order-1 INFINITY: cloneTest resTest symmetrical=false
#clone-min数に依存するリソースとのorderの記載が必須です。
(snip)
```

クラスタを構成するノード数が２ノード以上になって、cloneTestリソース数が２つ以上にならない限り、resTestは起動しません。
また、クラスタを構成するノード数が減少して、cloneTestリソースが２を下回ると、restTestは停止します。

Cloneリソースでは現在うまく機能するようですが、Master/Saveではうまく動かないようです。

使い所は不明ですが、そのようなリソースを使う必要が有る場合には、今まではlocationなどの制約を駆使する必要があった為、有用な機能だと思われます。