OmniAICreator/Qiita-1.07M huggingface dataset:
Visual Studio 2013 > Link > Includeパス / Libraryパス / .libの設定 > cuDNN用設定

```txt:動作環境
Windows 8.1 pro (64bit)
Visual Studio Community 2013 (以下VS)
```

Chainerに使うcuDNNをNVIDIAから取得した。
それをVSで使えるようにする設定。

取得したファイルは

> cuDNN v5.1 for CUDA 7.5

インストール方法として以下の記載があった。

> WINDOWS
>
>    Add <installpath> to the PATH environment variable.
>
>    In your Visual Studio project properties, add <installpath> to the Include Directories 
>    and Library Directories lists and add cudnn.lib to Linker->Input->Additional Dependencies.

VSの設定(Includeパス / Libraryパス / .libの設定)については以下のサイトが参考になった。
http://imagingsolution.blog107.fc2.com/blog-entry-231.html

`C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\cuDNN_v5.1`というフォルダを作り、そこにcuDNNのファイル(bin, include, lib)をコピーして、上記リンク先を参考にVSの設定をした。

そして、以下のincludeをつけてビルドして問題ないことを確認した。

```
#include "cudnn.h"
```


TODO: 環境変数の設定
技術英語 > Space permitting

@ youtubeの[CUDA Programming Basics Part II](https://www.youtube.com/watch?v=G5-iI1ogDW4&list=PL_MJualihC5A3REXN1CnuIlImC_o9YqnH&index=2)

11:42頃にてSpace permittingが使われている。
「空間が開いていれば」というような使い方をする。

11:23頃から
> The amount of shared memory can be specified either at compile time or at kernel launch, and is accessible by all threads in the same thread block.

11:32頃から
> The lifetime of shared memory is that of the thread block. Unqualified variables in device code are placed into registers <font color=red>space permitting</font>, or stored into the local memory.

関連 Weather permitting, 
http://qiita.com/7of9/items/30b8c0036dcfadd6f85b
nginx `location ~` 正規表現でマッチした部分文字列を回収して使う方法

# 方法

```nginx
location ~ ^/packages/(?<author>[a-z]+)/(?<name>[a-z]+)/?$
{
  proxy_pass http://127.0.0.1:5984/packages/_design/main/_view/main?key="$author/$name";
}
```

1. `(?<symbol_name>regex_pattern)` で hit させ、
2. `$symbol_name` 変数で取り出せる。

-----

# だそく

- とあるサーバーシステムでバックエンドに CouchDB を置いて nginx からリバースプロクシーして一部の機能はほぼ直接一般公開、一部の機能は別に認証システムを経由、といった実装を行う事になり、表向きにはユーザー（アプリケーション）フレンドリーなURLで使用しやすいよう nginx の regex パターンでバックエンドにクエリーする目的で使用する機会があった。
    - ちなみにそのような運用では当然ながら `if ( $request_method !~ ^(GET) )` など併用して意図しないユーザーからの DELETE や PUT や POST を防止したり、クエリーをプロクシー段階で破棄するなどのわりと器用な記述も nginx では手間なく簡単にできて便利。

# 参考

- [stackoverflow - variable capture in Nginx location matching](http://stackoverflow.com/questions/13706658/variable-capture-in-nginx-location-matching)
一からvim(俺得)


PCが変わるたびにvimの設定をするのが面倒なので、
完全に俺得なvimの設定をまとめる

```
"-------------------------
"settings for find
set wrapscan
set hlsearch


"-------------------------
"settings for highlight
set showmatch


"-------------------------
"settings for footer(command line, status line, ...)

"command line settings
set cmdheight=1

"status line settings
set showcmd
set laststatus=2
set statusline+=%<%F
set statusline+=%r
set statusline+=%h
set statusline+=%w
set statusline+=[%{&fileformat}]
set statusline+=[%{has('multi_byte')&&\&fileencoding!=''?&fileencoding:&encoding}]
set statusline+=%y
set statusline+=%=
set statusline+=%{exists('*SkkGetModeStr')?SkkGetModeStr():''}
set statusline+=[%{col('.')-1}=ASCII=%B,HEX=%c]
set statusline+=[C=%c/%{col('$')-1}]
set statusline+=[L=%l/%L]
set statusline+=[%p%%]


"-------------------------
"settings for virtual box
set virtualedit=block


"-------------------------
"settings for indent
set autoindent
set smartindent
set tabstop=4
set shiftwidth=4
set expandtab


"-------------------------
"settings for keybindings

"keybindings like emacs
noremap! <C-A> <Home>
noremap! <C-B> <Left>
noremap! <C-D> <Delete>
noremap! <C-H> <Left><Delete>
noremap! <C-E> <End>
noremap! <C-F> <Right>
noremap! <C-N> <Down>
noremap! <C-P> <Up>

noremap <C-A> <Home>
noremap <C-B> <Left>
noremap <C-D> <Delete>
noremap <C-H> <Left><Delete>
noremap <C-E> <End>
noremap <C-F> <Right>
noremap <C-N> <Down>
noremap <C-P> <Up>

"quick ESC on insert mode
inoremap <C-C> <ESC>

"off to highlight on pressing ESC
nmap <ESC><ESC> :noh<CR>


"------------------------
"settings for GUI

"can use wildmenu
set whichwrap=b,s,[,],<,>
set wildmenu

"can use clipboard
set clipboard+=unnamed

"can use mouse
if has ("mouse")
    set mouse=a
    set guioptions+=a
    set ttymouse=xterm2
endif


"-----------------------
"settings for completion
set wildmode=list,full

"----------------------
"settings for Unicode
set ambiwidth=double


"-----------------------
"settings for history
set history=50


"-----------------------
"other settings

"visible TAB,EOL,...
set list
set listchars=tab:»-,trail:-,eol:↲,extends:»,precedes:«,nbsp:%

"show ruler
set ruler

"show line number
set number

"show cursor line
set cursorline

"show title
set title

"can edit multiple files
set hidden

"can remove line head on pressing backspace key
set backspace=indent,eol,start
```
Gomobileで作ったAARをばらしてShared LibraryだけをUnityで動かしてみた


昨日投稿した「[GomobileからAARを作ってUnityで動かしてみた](http://qiita.com/otmb/items/da5df727aa30283c4278)」からShared Libraryだけで動くよね？ということでやってみた。

## 前回作ったライブラリ

```go:hoge.go
package hoge 

func GetInt() int {
    return 10
}
```

```
$ gomobile bind -target=android .
```

```

$ unzip -Z1 hoge.aar 
AndroidManifest.xml
proguard.txt
classes.jar
jni/armeabi-v7a/libgojni.so
jni/arm64-v8a/libgojni.so
jni/x86/libgojni.so
jni/x86_64/libgojni.so
R.txt
res/
```

## 今回の対応

libgojni.soの中身を見る。
Java_go_hoge_Hoge_getIntが使えそうだ。

```
$ nm libgojni.so | grep -i getint 
0000000000195760 T Java_go_hoge_Hoge_getInt
00000000001353e0 t _/var/folders/9b/3xn807qd3y9955mt2qwl58mc0000gn/T/gomobile-work-060054096/gomobile_bind._cgoexpwrap_6a40b88305f8_proxyhoge__GetInt
0000000000230b68 d _/var/folders/9b/3xn807qd3y9955mt2qwl58mc0000gn/T/gomobile-work-060054096/gomobile_bind._cgoexpwrap_6a40b88305f8_proxyhoge__GetInt.f
00000000001353a0 T _cgoexp_6a40b88305f8_proxyhoge__GetInt
0000000000195540 T proxyhoge__GetInt
```

### hoge.aarのjni配下をUnityに配置する

hoge.aarを解凍して、下記二つをUnityの`Assets/Plugins/Android/libs`に配置する。
`x86_64`と`arm64-v8a`はビルド時に拒否られた。何か設定必要？

* Plugins/Android/libs/armeabi-v7a/libgojni.so
* Plugins/Android/libs/x86/libgojni.so

気持ちrenameしてみる。
libgojni.so -> libhoge.so

### Unityの処理

前回と同じく加算する処理を書いた。

```
using UnityEngine;
using System.Runtime.InteropServices;

public class ButtonTest : MonoBehaviour {

	int gnum = 0;

	[DllImport("hoge")]
	private static extern int Java_go_hoge_Hoge_getInt();

	public void TestClick()
	{
		int num = Java_go_hoge_Hoge_getInt();
		Debug.Log(num);
		gnum += num;
	}

	void OnGUI(){
		GUI.Label (new Rect (0, 0, 100, 30), gnum.ToString());
	}
}
```

## 感想

すごい簡単に使えるようになった。
prefixがうざいので何かいい方法ないのかな？
他は毎回実機にインストールが面倒くさいので、開発時はMac用のShared Libraryを作って置くのが良さそう。

## 小ネタ: Shared Libraryの容量大きい

```
% du
3.4M	./arm64-v8a
2.5M	./armeabi-v7a
2.4M	./x86
3.4M	./x86_64
 12M	.
```
リモートブランチから特定のコミットだけを取得する


概要
---

2015年にリリースされた Git 2.5 からリポジトリの設定を変更することで特定のコミットだけを取得できるようになりました。詳細な解説は stackoverflow の[回答](http://stackoverflow.com/a/30701724/531320)をご参照ください。練習として Git のテストケース ([t/t5516-fetch-push.sh](https://github.com/git/git/blob/68ee628932c2196742b77d2961c5e16360734a62/t/t5516-fetch-push.sh#L1123-L1176)) を手で実行してみました。

テストのリポジトリをつくる
----------------------

リポジトリをつくり、`uploadpack.allowtipsha1inwant` を有効にします。

```bash
git init testrepo
cd testrepo
git config uploadpack.allowtipsha1inwant true
```

コミットの履歴をつくってみましょう。

```bash
git commit --allow-empty -m foo
git commit --allow-empty -m bar
git commit --allow-empty -m baz
```

コミットのハッシュを調べて変数 `$SHA1` に記録しておきます。次のコマンドでは最新のコミットから1つ前のコミットのハッシュを取得します。

```bash
SHA1=$(git rev-parse HEAD^1)
```

.git のパスを指定することもできます。

```bash
SHA1=$(git --git-dir=testrepo/.git rev-parse HEAD^1)
```

shallow リポジトリをつくる
-----------------------

```bash
git init shallow
cd shallow
git --git-dir=../testrepo/.git config uploadpack.allowreachablesha1inwant true
```

fetch してみましょう。`$SHA1` は取り込みたいコミットのハッシュです。

```bash
git fetch --depth=1 ../testrepo/.git $SHA1
```

コミットされた内容を調べてみましょう。

```bash
git cat-file commit $SHA1
```

今度は merge してみましょう。

```bash
git merge $SHA1
```

ログを調べてみましょう。1つのコミットしか存在しないはずです。

```bash
git log
```


コミットのハッシュを調べる
----------------------

一番単純な方法は `git log` ですが、ハッシュ以外の情報は不要なので、ハッシュだけを求めるためのコマンドを使ってみましょう。

まずは最新のコミットのハッシュを求めてみます。

```bash
git rev-parse HEAD
```

短縮形を求めてみましょう。

```bash
git rev-parse --short HEAD
```

ブランチの名前を指定して調べることもできます。

```bash
git rev-parse master
```

1つ前のコミットのハッシュを調べてみましょう。

```bash
git rev-parse HEAD~1
```

ハッシュのリストを求めてみましょう。

```bash
git rev-list HEAD
```

数を制限することができます。

```bash
git rev-list HEAD -n 2
```
在庫表示 OR 売り切れ を正規表現一発でスクレイピングする

需要があるのかわからないけど書きますｗ
タイトルの付け方次第かなぁ……。

ショッピングサイトから、**在庫があればその数。無ければ 0** をスクレイピングしたい場合。
単純に、在庫があれば「在庫 12」、無ければ「在庫 0」と言う表示があればいいけど、意外と無くて、例えば「SOLD OUT」という表示になってしまう、というケース。

```php
preg_match( '/在庫 ([0-9]+)|(SOLD OUT)/' , $src, $match );

$stock = $match[1];
```

後ろのSOLD OUTにも()をつけるのがポイントです。
こうすると、```$match[1]``` には在庫数、```$match[2]``` にはSOLD OUTを入れようとしてくれて、実際に「SOLD OUT」になったときに、```$match[1]``` には '' を返してきます。（これがないと、SOLD OUT時には[1]インデックスが無い！とエラーになります。）

以上おわり。
React 再入門

#はじめに
勉強会用の資料です。
これからReactを触ってみようとしている人、最近しばらくやってなくて忘れちゃったみたいな人向けの内容になっています。
要するに超初心者向けです。

---

#Reactとは？
* Facebook製 JavaScript UIライブラリ<br>（≠フレームワーク）
* フレームワークのView部分を担当
* ES2015（ES6）で記述する
* アニメーションはあまり得意でない<br>→ jQueryを併用

---

#コンポーネント指向
* コンポーネント＝UIを構成する部品
* コンポーネントを組み合わせてページを構築
* prop(定数)とstate(状態)を使って動的に構築

---

<img width="819" alt="スクリーンショット 2016-09-10 23.39.49.png" src="https://qiita-image-store.s3.amazonaws.com/0/69864/27a886b8-157d-cb26-a80c-2822d45516cb.png">
赤いとこがコンポーネント

---

#公開されているコンポーネント

Material UI（今日使うやつ）
http://www.material-ui.com/

react-toolbox
http://react-toolbox.com/

---

#JSX
JavaScriptの中にXMLを記述するもの。
(DeNAとかPhotoshopのとは別もの)
通常はプリコンパイルが必要

```jsx
render() {
  return (
    <div className="sample">こんな感じ</div>
  );
}
```

---

#Virtual DOM
> 仮想DOMとは世界を革命する力であり、このjQueryのDOM操作で汚れきったフロントエンドを救う救世主なのです。
(mizchi)


【参考】なぜ仮想DOMという概念が俺達の魂を震えさせるのか
http://goo.gl/QxfXRg

---

<img width="686" alt="スクリーンショット 2016-09-11 0.06.07.png" src="https://qiita-image-store.s3.amazonaws.com/0/69864/20f78aa4-9304-3290-6238-ae59946db9bc.png">

---

#メリット
簡単でパフォーマンスが良い(Virtual DOM)
【参考】リアルなDOMは遅い、仮想DOM（React.js）は速い
http://steps.dodgson.org/b/2014/12/11/why-is-real-dom-slow/
規模が大きくなっても管理しやすい

---

#環境構築
* node.js
* npm
* webpack
* babel

---

#node.js
コマンドラインで動くJavaScript
http://nodejs.jp/

---

#npm
node.jsのパッケージ管理ツール
`package.json`で管理

```json
{
  "dependencies": {
    "material-ui": "^0.15.3",
    "react": "^15.3.0",
    "react-dom": "^15.3.0",
  },
}
```

---

#webpack
jsとかを依存関係解決しつつ結合したり<br>分割したりしてくれる
`webpack.config.js`に設定を記述

```js
module.exports = {
  entry: __dirname + "/src/App.js",
  output: {
    path: __dirname + "/dist",
    filename: "sample.js"
  },
  module: {
    loaders: [{
      test: /\.js$/,
      loader: "babel",
      query: {
        presets: ["react", "es2015", "stage-0"]
      }
    }]
  }
};
```

---

#babel
ES2015をコンパイルしてES5に変換してくれる
https://html5experts.jp/kyo_ago/16979/

---

#JavascriptFatigue
でもいろいろ設定めんどくさい！

---

##`create-react-app`

---

#create-react-app
最近Facebookがリリースしたコマンド
これ一発でReactを動かすのに必要な環境を自動で構築してくれる

```
$ npm install -g create-react-app
$ create-react-app sample
$ cd sample
$ npm start
```

この後こんな感じになればビルド成功

```
> react-router-sample@0.0.1 start /Users/takanori/Documents/sample_project/React/react-router-sample
> react-scripts start
Starting the development server...
Compiled successfully!

The app is running at:

  http://localhost:3000/

Note that the development build is not optimized.
To create a production build, use npm run build.
```

---

![FireShot Capture 3 - React App - http___localhost_3000_.png](https://qiita-image-store.s3.amazonaws.com/0/69864/4fa6451e-6e46-53cf-3c44-48f6ce5cb65e.png)


---

#実際に編集してみよう
編集するファイル

```
├── index.html
├── favicon.ico
├── package.json
├── src
│   ├── App.js（←ここ）
│   ├── index.js
│   ├── App.css（←ここ）
│   ├── index.css
│   └── logo.svg
```

---

#おわり

---

#付録

---

#create-react-appの中身
* webpack
* webpack-dev-server
* html-webpack-plugin
* style-loader
* Babel (ES6/ES2015)
* Autoprefixer
* ESLint

カスタマイズが必要なときは下記コマンドを実行

```
npm run eject
```
[Memo]AndroidでOpenframeworksを動かした時のLog出し

## Logは大事
OpenframeworksのcppファイルからLogCatにLogを流したい時は

```C++:main.cpp
int main(){
	ofSetupOpenGL(1024,768, OF_WINDOW);			// <-------- setup the GL context
	ofSetLogLevel(OF_LOG_NOTICE);


	// this kicks off the running of my app
	// can be OF_WINDOW or OF_FULLSCREEN
	// pass in width and height too:
	ofRunApp( new ofApp() );
	return 0;
}
```

``` c++:ofApp.cpp
#include "ofxFft.h"

/**
 * 略
**/

void ofApp::update(){
ofLogNotice("ofApp") << "String"<<int;
}
```
Haskellで文字列っぽい型同士を結合する演算子が欲しい。その１(未解決)

Haskellで文字列っぽい型同士を結合する演算子`+++`が欲しい。左辺、右辺、返り値の関係は下表のようになって欲しい。

| 左辺 ＼ 右辺 | String | Lazy.Text | Text | Lazy.ByteString | ByteString |
| --- | --- | --- | --- | --- | --- | 
| **String** | String | Lazy.Text | Text | Lazy.ByteString | ByteString |
| **Lazy.Text** || Lazy.Text | Text | Lazy.ByteString | ByteString |
| **Text** ||| Text | Lazy.ByteString | ByteString |
| **Lazy.ByteString** |||| Lazy.ByteString | ByteString |
| **ByteString** ||||| ByteString |

そういう型クラス`FlexibleAppendable`を作ってみる
 
```hs
{-# LANGUAGE FlexibleInstances    #-}
{-# LANGUAGE TypeSynonymInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE FunctionalDependencies #-}
module FlexibleAppendable where

import           Data.Monoid
import           Data.String
import qualified Data.ByteString.Char8 as CB

class (IsString l, IsString r, IsString a) => FlexibleAppendable l r a | l r -> a where
  (+++) :: l -> r -> a

instance FlexibleAppendable String String String where
  (+++) l r = l ++ r

instance FlexibleAppendable String CB.ByteString CB.ByteString where
  (+++) l r = CB.pack l <> r
  
-- 以下似たようなものがえんえん続く
```

動かしてみる

```hs
s :: String
s = "Hello, "

bs :: CB.ByteString
bs = CB.pack "World !"

main = CB.putStrLn $ s +++ bs
```

実行結果

```shell-session
Hello, World
```

きっちり動く。しかし、OverloadedStrings拡張を有効にしていると動かない

```hs
{-# LANGUAGE OverloadedStrings #-}

main = CB.putStrLn $ "Hello, " +++ bs
```

エラーメッセージはこちら

```
No instance for (IsString l0) arising from the literal ‘"Hello, "’
The type variable ‘l0’ is ambiguous
Note: there are several potential instances:
  instance IsString aeson-0.11.2.0:Data.Aeson.Types.Internal.Value
    -- Defined in ‘aeson-0.11.2.0:Data.Aeson.Types.Internal’
  instance IsString CB.ByteString
    -- Defined in ‘Data.ByteString.Internal’
  instance IsString Data.ByteString.Lazy.Internal.ByteString
    -- Defined in ‘Data.ByteString.Lazy.Internal’
  ...plus 8 others
In the first argument of ‘(+++)’, namely ‘"Hello, "’
In the second argument of ‘($)’, namely ‘"Hello, " +++ bs’
In the expression: CB.putStrLn $ "Hello, " +++ bs
```

OverloadedStringsはできれば有効にしておきたいため、これではいまいち。

進展があったら「その2」を投稿します。

進展があったので「その2」を投稿しました→ http://qiita.com/saturday06/items/310721929cacf83fa648
【メモ】WordPress x ドメインキング


目的：ブログ、モック置き場、ポートフォリオ、SNSもすべて連携して、自分の情報のハブになるようなサイトをつくっておきたい

## ドメインキング初期設定

（※レンサバもってない状態ならロリポップかな）

[ドメインキングでWordPressを使う](https://www.out48.com/archives/639/)

[ドメインキングのレンタルサーバーにWordPressをインストールする](http://hostingstock.net/article/domainking_jp/installing-wordpress/)

## URL

独自ドメインのルート直下にWPのファイルを置いてしまうのがはやいが、ダメなら以下のような感じで。
[WordPress を専用ディレクトリに配置する](http://wpdocs.osdn.jp/WordPress_%E3%82%92%E5%B0%82%E7%94%A8%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%81%AB%E9%85%8D%E7%BD%AE%E3%81%99%E3%82%8B)


|URL|例|
|---|---|
|WordPress アドレス|http://独自ドメイン/wordpress/|
|サイトアドレス|http://独自ドメイン/|


500 errorがでたら・・・
http://sugutsukaeru.jp/support/3/
http://designhack.slashlab.net/note-for-500-internal-server-error-in-wordpress/
http://massy02.com/wordpress-fatal-error/
^ pluginsをリネームしたら原因が特定できた

WordPressアドレスを変えてしまった場合は・・・
http://www.nishi2002.com/4207.html



## パーマリンク設定

サブディレクトリを切って整理する

`/%category%/%postname%/`
以下のようにカテゴリー名を変える可能性がない場合に使う
（postnameは必ず英語）

http://sample.com/profile/ -> 固定ページ
http://sample.com/work/ -> 固定ページ
http://sample.com/mock/ -> カテゴリー（投稿）
http://sample.com/blog/ -> カテゴリー（投稿）
http://sample.com/contact/ -> 固定ページ

mockとblogは記事を無制限に追加したいので投稿ページ

> 参考
[WordPressのパーマリンク設定](http://wp.myafi.net/wordpress-permalink/)
[投稿ページを固定ページに置きたい](https://ja.wordpress.org/support/topic/%E6%8A%95%E7%A8%BF%E3%83%9A%E3%83%BC%E3%82%B8%E3%82%92%E5%9B%BA%E5%AE%9A%E3%83%9A%E3%83%BC%E3%82%B8%E3%81%AB%E7%BD%AE%E3%81%8D%E3%81%9F%E3%81%84/)

## バックアップ

[BackWPup](https://ja.wordpress.org/plugins/backwpup/)

ローカルに保存
Backups -> ファイルにカーソルを合わせてDownload

## セキュリティ

WPとテーマ・プラグインのバージョンを常に最新にする

SiteGuard WP Plugin
Wordfence セキュリティー

## プラグイン

jetpack
Contact Form 7
WP Multibyte Patch

ALL in One SEO
[SEOの知識](https://googlewebmastercentral-ja.blogspot.jp/)




「続きを読む」の設定
[WordPressで記事の抜粋「続きを読む」を設定するプラグイン｢Auto Limit Posts Reloaded」](http://sandrockmtm.wp-x.jp/wordpress/plugins-3)
[自動でmoreタグ挿入出来て便利！WordPressプラグイン「Auto Limit Posts Reloaded」](http://athomegeek.com/auto-limit-posts-reloaded/)


メンテナンス中を表示したいとき
[WP Maintenance Mode](https://srd.wordpress.org/plugins/wp-maintenance-mode/)


> 参考
[小さなお店&会社の WordPress超入門 ―初めてでも安心! 思いどおりのホームページを作ろう!](https://www.amazon.co.jp/%E5%B0%8F%E3%81%95%E3%81%AA%E3%81%8A%E5%BA%97-%E4%BC%9A%E7%A4%BE%E3%81%AE-WordPress%E8%B6%85%E5%85%A5%E9%96%80-%E2%80%95%E5%88%9D%E3%82%81%E3%81%A6%E3%81%A7%E3%82%82%E5%AE%89%E5%BF%83-%E6%80%9D%E3%81%84%E3%81%A9%E3%81%8A%E3%82%8A%E3%81%AE%E3%83%9B%E3%83%BC%E3%83%A0%E3%83%9A%E3%83%BC%E3%82%B8%E3%82%92%E4%BD%9C%E3%82%8D%E3%81%86/dp/4774182184/ref=sr_1_7?ie=UTF8&qid=1473205413&sr=8-7&keywords=wordpress)
[自社のブランド力を上げる! オウンドメディア制作・運用ガイド](https://www.amazon.co.jp/%E8%87%AA%E7%A4%BE%E3%81%AE%E3%83%96%E3%83%A9%E3%83%B3%E3%83%89%E5%8A%9B%E3%82%92%E4%B8%8A%E3%81%92%E3%82%8B-%E3%82%AA%E3%82%A6%E3%83%B3%E3%83%89%E3%83%A1%E3%83%87%E3%82%A3%E3%82%A2%E5%88%B6%E4%BD%9C%E3%83%BB%E9%81%8B%E7%94%A8%E3%82%AC%E3%82%A4%E3%83%89-%E6%B7%B1%E8%B0%B7-%E6%AD%A9/dp/4798144177/ref=sr_1_1?ie=UTF8&qid=1473526420&sr=8-1&keywords=wordpress%E3%80%80%E3%81%8A%E3%81%86%E3%82%93%E3%81%A9)
Railsの.whereに渡せるもの

RailsのActiveRecordで条件を絞るメソッドといえば`.where`ですが、いったいどれだけの形式の値を渡せるのでしょうか。

なお、手元にあったという理由でRails 4.2.7.1で検証を行っています。

# `where`の定義場所と、処理の流れ

まずは、ActiveRecord内部での`where`の処理を追いかけてみることにします。

`where`自体は`ActiveRecord::Relation`のメソッドですが、実体は`include`元の`ActiveRecord::QueryMethods`にあります。どのように処理が進むのか、流れを辿ってみました。

0. 引数がハッシュだった場合、（必要なら）JOIN先の`references`をセットしておく
1. `build_where`で条件を整えておく
2. `where_values`に整えたものを追加

`where`を実行した段階ではここまでですが、実際に取り出す段となると、以下のように処理が動いて、クエリが走ります。

0. `ActiveRecord::Relation#load`でリレーションのロードを起動する
1. `ActiveRecord::Relation#exec_queries`でクエリの処理を開始する
2. `ActiveRecord::QueryMethods#build_arel`で、今までに積み重なった`where_values`をArelに起こす
3. `find_by_sql`でクエリを投げる
4. Eager load関係の処理

ということで、各所でどのような処理が行われるか追いかけていく必要があります。

# `String`、`Array`
これらの場合は、与えられたパラメータが`ActiveRecord::Sanitization::ClassMethods#sanitize_sql_array`に渡ります（1つ、あるいは複数の文字列を配列で渡しても、まとめて配列で渡す形となります）。そして、以下のどれかのパターンで引数をエスケープして代入する処理が行われます。なお、1番目に来たパターン自体には**何もエスケープが入りません**ので、むやみに変数代入したりしてしまわないように気をつけましょう。

* `:name`形式で埋めたものを、2番めに渡したハッシュの同じキーに入った値で置き換え
* `?`の入った箇所を、後に続く配列の値で順に置き換え
* `'%s'`のような文字列を入れておいて、`sprintf`で置き換え（※単純な文字列置換で、クオートされないので要注意）

なお、上2つの場合、`ActiveRecord::Relation`を渡すとSQLに変換して埋め込む、なんて機能もあるようです（うまく使わないとややこしそうですが）。

# `Hash`
引数にハッシュを渡すと、`ActiveRecord::PredicateBuilder.build_from_hash`が呼び出されて、キーごとに処理が進んでいきます。ハッシュの値の型によって、どんな処理になるかが違ってきます。

* スカラー値…完全一致（`nil`も`IS NULL`に変換）
* モデルオブジェクト…`id`の一致
* `Range`オブジェクト…範囲検索（なお、`..`は`BETWEEN`に変換されますが、`...`もきちんと不等号で再現してくれます）
* `ActiveRecord::Relation`…指定された列（指定がなければ主キーの列）を`SELECT`した結果をサブクエリにした`IN`クエリ
* 配列…配列の要素によって、
 * スカラー値…`nil`以外全部まとめて`IN`（`nil`は別途で`IS NULL`にしてくれる）
 * モデルオブジェクト…`id`の一致
 * `Range`オブジェクト…範囲検索
* ハッシュ…JOINしたテーブルへの条件（ハッシュの中身は親のハッシュと同様）

# その他（Arelノード）

`build_where`では、これまでに挙げなかった型の変数が来てもそのまま通すようになっていますが、あとで`build_arel`してエラーにならないもの、ということで、事実上はArelノードに限られます。
CentOS7にsambaをインストールして使えるようにするまで

サーバ上で下記を実行する。

    yum install samba samba-client samba-common -y

    cd /etc/samba/

smb.conf を編集する。

    [global]
    workgroup = WORKGROUP
    server string = Samba Server %v
    netbios name = centos7
    security = user
    map to guest = bad user
    dns proxy = no

    [Share]
    path = /共有したい任意のディレクトリ/
    browsable =yes
    writable = yes
    guest ok = yes
    read only = no

共有フォルダの権限を変更する。

    chmod -R 0777 /共有したい任意のディレクトリ
    chown -R nobody:nobody /共有したい任意のディレクトリ

立ち上げる。

	systemctl enable smb.service
	systemctl enable nmb.service
	systemctl restart smb.service
	systemctl restart nmb.service

Windows側から、サーバのIPアドレス指定で、共有フォルダにアクセスできればOK。
なお、アクセスできない場合は、SELinuxとファイアウォールを疑う。

```
setenforce 0
firewall-cmd --permanent --zone=public --add-service=samba
firewall-cmd --reload
```
RailsでViewを表示しようとしたらArgumentError: key must be 32 bytes

Railsを触ってみようと思い、RubyとRailsをインストールしてみた。
どうせなら最新版で、と思い得意気に触り始めた矢先に遭遇したエラー。

#環境
Mac OS X El Capitan 10.11.4
Ruby 2.4.0dev
Rails 5.0.0.1

#手順
1. 任意のディレクトリで`rails new hoge`でプロジェクトを作る。  
2. `cd hoge`で作成したプロジェクトディレクトリに移動する。
3. `rails generate controller hello index`な感じでcontrollerとviewを作成する。 
4. `rails s`サーバーを起動し、`localhost:3000/hello`にアクセスすると表題のエラーが発生。

まだ１行もコーディングしてないのに`ArgumentError`って言われましても。。。

#原因
エラーメッセージで検索すると[githubのissues](https://github.com/rails/rails/issues/25448)がヒットした。
Ruby2.4.0にアップグレードしたらエラーが出るようになったって事ですか。

#対応
自前で32bitの秘密鍵を作るのが正しいお手前なのだろうが
RubyのVersionにこだわりがある訳ではないので
`rbenv local 2.2.4`
前に入れて放置していたVersionに切り替えたところ想定通り画面が表示された。
HHKB Professional 2 Type-S(無刻印)の感想


amazonで購入

https://www.amazon.co.jp/PFU-Hacking-Keyboard-Professional2-%E7%99%BD%EF%BC%8F%E7%84%A1%E5%88%BB%E5%8D%B0%EF%BC%88%E8%8B%B1%E8%AA%9E%E9%85%8D%E5%88%97%EF%BC%89/dp/B008GXT6SK/ref=sr_1_12?s=computers&ie=UTF8&qid=1473519953&sr=1-12&keywords=hhkb


![KIMG0144.JPG](https://qiita-image-store.s3.amazonaws.com/0/132627/d206f472-76f6-0a97-cc07-b1902530996f.jpeg "KIMG0144.JPG")

以下は個人的な感想

# 無刻印について

なかなか渋い

ただ、パスワードを打つときなんかはちょっと怖いという感じ

表示される文字は「*」だし、
キーボードには何も書いてないしで、
「67」あたりは結構不安になる

それ以外は特に不便しない

# 十字キーがないことについて

HHKBでは十字キーを打つ場合は、

- ↑: fn+[
- ↓: fn+/
- →: fn+'
- ←: fn+;

という感じに打たないといけなくて、
emacsライクな移動ができないブラウザ上のクソエディタとか触ってると
結構発狂したくなる

ただある程度触ってると慣れてくるので、
今ではあまり気にしなくなった

# タイピング心地について

これはさすがに評判があるだけあって、
それなりに心地よい

また、心地よいのもそうだが、
タイピングを一日中やっていてもそう疲れない

これは個人的な感覚だが、
前回のProfessional 2よりも少しだけ
こちらの方が疲れにくくなっている気がする

# タイピング音について

Type-Sの前のProfessional2は
割とうるさい印象が強かったが、
今回のはかなり静かになっている

擬音で例えるなら

Professional 2は
ゴトゴト
Professional 2 Type-Sは
コトコト

みたいな感じ

これは完全に分かれるだろうけど、
音は個人的にはProfessional 2のがよかったかな

でも本当静かになった

# 滑り止めについて

一応底にゴムがあってそれが滑り止めになってる

![KIMG0145.JPG](https://qiita-image-store.s3.amazonaws.com/0/132627/13a33218-744e-a741-4837-296976c7b7e5.jpeg "KIMG0145.JPG")

どっかの記事で滑り止めがあんまり効かないなんてことを
見聞きしたような気がしたんだけど、
個人的には全然気にならなかった

# 価格について

シンプルなキーボードで３万ってだいぶ高いと思ったけど、
自分に「これはいいものだから」と毎日言い聞かせながら使ってる

でもやっぱり３万はべらぼうに高いっすw

# まとめ

価格は高いけど、やっぱりいいもの

普段触っているとなかなか気づけないけど、
不意に他人のPCを触る時に「気持ち悪！」ってなっちゃう

割と前のProfessional2と違うところも多いから
現状HHKBを使っている人も
Type-Sはオススメできるかな
[JAWS-UG CLI] SES:#8 Incoming用ドメインの削除




前提条件
========


SESへの権限
-----------

SESに対してフル権限があること。


AWS CLI
-------

以下のバージョンで動作確認済

* AWS CLI 1.10.63

```bash:コマンド:
aws --version
```

```text:結果(例):
      aws-cli/1.10.63 Python/2.7.11 Darwin/15.6.0 botocore/1.4.53
```

バージョンが古い場合は最新版に更新しましょう。

```bash:コマンド:
sudo -H pip install -U awscli
```


0. 準備
=======


0.1. リージョンの決定
---------------------

```bash:変数の設定
export AWS_DEFAULT_REGION='us-west-2'
```


0.2. 変数の確認
---------------

プロファイルが想定のものになっていることを確認します。

```bash:変数の確認:
aws configure list
```

```text:結果(例):
            Name                    Value             Type    Location
            ----                    -----             ----    --------
         profile       sesFull-prjz-mbp13        env    AWS_DEFAULT_PROFILE
      access_key     ****************XXXX shared-credentials-file
      secret_key     ****************XXXX shared-credentials-file
          region        us-west-2        env    AWS_DEFAULT_REGION
```


0.3. ドメインの決定
-------------------

```bash:変数の設定:
SES_IDENTITY='example.jp'
```


1. 事前作業
===========

削除する前にかならず、削除対象の確認をしてください。

```bash:コマンド:
aws ses list-identities \
        --query "Identities[?contains(@, \`${SES_IDENTITY}\`)]"
```

```json:結果(例):
      [
        "example.jp"
      ]
```


2. Identityの削除
=================

```bash:変数の確認:
cat << ETX

        SES_IDENTITY: ${SES_IDENTITY}

ETX
```

```bash:コマンド:
aws ses delete-identity \
        --identity ${SES_IDENTITY}
```

```text:結果(例):
      (戻り値なし)
```


3. 事後作業
===========


3.1. Identityの確認
-------------------

```bash:コマンド:
aws ses list-identities \
        --query "Identities[?contains(@, \`${SES_IDENTITY}\`)]"
```

```json:結果(例):
      []
```


3.2. DNSからの削除
------------------

TXTレコード例:

      echo "_amazonses.${SES_IDENTITY}. 3600 IN TXT \"${SES_TOKEN_VERIFY}\""

MXレコード例:

      echo "${SES_IDENTITY}. 3600 IN MX 10 inbound-smtp.${AWS_DEFAULT_REGION}.amazonaws.com."

```bash:コマンド:
dig txt _amazonses.${SES_IDENTITY}. | grep ^_amazonses
```

```text:結果(例)
      (戻り値なし)
```

```bash:コマンド:
dig mx ${SES_IDENTITY}. | grep MX | grep ^${SES_IDENTITY}
```

```text:結果(例)
      (戻り値なし)
```


完了
====
Sageで独自の対象を定義する方法

## 注意

適当に調べたので，間違っているところがあるかもしれない．

# TL;DR

[SageあるいはSageMath](http://www.sagemath.org/ "SageMath - Open-Source Mathematical Software System")とは，Pythonを拡張して実装された計算代数システムの一つで，Mathematicaのフリー版代替を目指して様々なオープンソースソフトウェアとして公開されている計算代数ライブラリを統合した開発環境でもある．

# 対象の構造と独自の定義

数学で扱われる対象の構造は，プログラミング言語で扱う型の構造(例えば継承と派生．これ以外にも色々と構造があったりするので，十分複雑だけれども…)よりも複雑なので，これを取り扱うためにSageでは独自の型変換機構(cercion system)を実装している．

そのため，独自に新しい対象を定義したい場合は，この実装のルールに従って定義すると，型変換機構の恩恵を受けることができる．
SageはPythonの拡張なので，もちろんPython言語として実装してもよい．この場合はSageの型変換機構の恩恵を受けることはできない．

## ParentとElement

簡単に言って，全ての対象は基本的にElementクラスから派生したクラスのインスタンスとして扱われる．
また，集合や群，体など，型の概念に対応する何らかの集合があり，この集合から要素を取り出す(生成する)といった場合には，Parentクラスの派生クラスとElementクラスの派生クラスを関連付けることで，この関係を実装する．
Sageでは，一定のルールに従ってコードを記述することにより，Sageにおける型変換機構を利用しつつ独自の対象を実装することができる．

## Category

TODO: 未調査．

# サンプルコード

* [サンプルコード](https://gist.github.com/tell/ce221859440994a62234f1038eaa5b85)を適当に書いてみた．

# 参考文献

* [How to implement new algebraic structures in Sage — Thematic Tutorials v7.3](http://doc.sagemath.org/html/en/thematic_tutorials/coercion_and_categories.html#coercion-and-categories "How to implement new algebraic structures in Sage — Thematic Tutorials v7.3")
* [Coercion — Sage Reference Manual v7.3: Coercion](http://doc.sagemath.org/html/en/reference/coercion/index.html "Coercion — Sage Reference Manual v7.3: Coercion")
Google Play MusicでNow Playingするブックマークレットを書いた

大分雑ですが，コピペしてブックマークに登録してお使いください．

```js
javascript:void(
  window.open(
    'https://twitter.com/intent/tweet?text='
    + encodeURIComponent("【Now Playing】 "
    + document.getElementById("playerSongInfo").textContent.trim())
    + '&hashtags=NowPlaying',
    '_blank',
    'left=20,top=20,width=500,height=500,toolbar=1,resizable=0'));
```
@RequestBodyと@Validの両方を利用時に"The request sent by the client was syntactically incorrect"が出る

残業続きで眠いです……。誤字脱字は勘弁してね(´・ω・`)

クライアントからPOSTされたJSONを受け取って、JSONを返すようなコントローラの開発中、POSTされるJSONを何かしらのBeanにマッピングさせ、かつBeanValidationを機能させたいとします。


```java
@Controller
public HogeController {

    @RequestMapping(path="/hoge", 
                    method=RequestMethod.POST,
                    consumes=MediaType.APPLICATION_JSON_VALUE)
    @ResponseBody
    public Map<String, String> hoge(@RequestBody @Valid JsonBean jsonBean)
        // do something
    }
}

```
このとき`JsonBean`に設定されたBean Validatorが機能して、JSONがBeanにマッピングされない場合、そのメソッドの中(上記の例では`hoge`メソッドの中)には入っていきません。つまりクライアント側にはJSONが返されず、次のようなエラーメッセージを持ったHTMLが返されてしまうのです。

```
Error 400 The request sent by the client was syntactically incorrect
```

対処法としては__`MethodArgumentNotValidException`を受けるExceptionHandlerを設定する__ことです。

```java

@Controller
public HogeController {

    @RequestMapping(path="/hoge", 
                    method=RequestMethod.POST,
                    consumes=MediaType.APPLICATION_JSON_VALUE)
    @ResponseBody
    public Map<String, String> hoge(@RequestBody @Valid JsonBean jsonBean)
        // do something
    }

    @ExceptionHandler(MethodArgumentNotValidException.class)
    @ResponseBody
    public Map<String, String> hogeHandler(MethodArgumentNotValidException e){
        // do something
    }
}
```

こうすることにより、POSTされたJSONがBeanにマッピングされない場合は、`MethodArgumentNotValidException`を受けるExceptionHandler(上記の例では`hogeHandler`)が実行されます。つまりマッピングされない場合にクライアントに返したいJSONをこのExceptionHandlerの戻り値にしてやればよいということになります。
View に Ripple をつける

## 現象
ViewHolder の layout にある RelativeLayout に Ripple がつかなかったので、対処法

## 対処法

android:foreground を使う

```java
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:foreground="?android:attr/selectableItemBackground"
    android:background="@color/white" />
```
ボタン電池駆動のセンサー類をコンセントから給電して動かす

#電池駆動のセンサーやビーコンを電池交換不要にしたい

- *電池式のセンサーを据え置きの環境センサーとして使いたいけど、電池が切れる...*
- *ビーコンを使ってやりたいことがあるけど、定期的に電池を交換する必要があってめんどい...*
- *開発に使ってるセンサーの電池交換がめんどい...ってか開発中に電池切れるのマジ勘弁！*


だったら、**コンセントから給電できるようにすればいいんじゃね？**
というわけで、よくあるコイン電池駆動のセンサー機器にコンセントから給電できるようにするツールを自作してみました。

#注意と自己責任のお願い
この記事を参考にしてセンサー類の故障・事故等が起きたとしても責任は負えませんので、予めご了承願います。
特に、ACアダプタを購入する際は、出力電圧の間違いに注意してください。
使ってみる前に、製作した機器の出力電圧と電池の出力電圧が一致することと出力の極性を、テスターできちんと確認するようにしてください。

#前提
この記事では、コイン電池**「CR2032」**で動作する機器を対象に作っています。

####CR2032の概要
- 電圧：3V
- 寸法：Φ20.0×3.2mm

####CR2032を使う機器の例
- [センサータグ](http://www.tij.co.jp/tool/jp/cc2650stk)
- [RadBeacon Dot](http://store.radiusnetworks.com/collections/all/products/radbeacon-dot)    等々

#材料

全て電子部品のお店（秋月電子等）とホームセンターで揃います。
1セットあたりおよそ¥1,500です。

- 3V出力のACアダプター（例：http://akizukidenshi.com/catalog/g/gM-00023/）
- DCジャック付ケーブル（例：http://akizukidenshi.com/catalog/g/gC-06566/）
- Φ20×3mm寸法のゴム製防振パッド（例：https://hands.net/goods/4953237700167/）
- 0.1mm厚のステンレス板（例：https://hands.net/goods/4940372024951/）
- 両面テープ

#作り方
1. DCジャック付ケーブルのビニール被覆を先端5mmだけ取り除き、導線を露出させる。
2. 防振パッドの面に収まるサイズのステンレス板を、2枚分切り出す。
3. DCジャック付ケーブルの導線（プラスとマイナス）を、2で切り出したステンレス板にそれぞれ密着させる。
4. 3の状態のステンレス板を、両面テープで防振パッドの各面に貼り付ける。
5. DCジャック付ケーブルとACアダプターを接続する。

**以上。**

完成形は↓の写真の通りです。
![100v_to_cr2032_overview.png](https://qiita-image-store.s3.amazonaws.com/0/140394/93584f5f-4dfb-b18e-4a6a-113df7b2d056.png)

電池の代わりになる部分は↓のような形になります。
ケーブルに白いラインが入っている方がプラス、そうでない方がマイナスです。
![100v_to_cr2032_up.png](https://qiita-image-store.s3.amazonaws.com/0/140394/42cf61f1-c28f-cd1c-d641-fbb4dda72b3f.png)

#使ってみる

防振パッドをコイン電池の代わりに挿すだけで使えます。
試しに、センサータグに入れて計測情報をタブレットに表示させてみました。

![100v_to_cr2032_output.png](https://qiita-image-store.s3.amazonaws.com/0/140394/ef83ae62-ff9b-33ee-a384-e1051abc397b.png)

コンセントからの給電で問題なく動いています。

#他の規格の電池もコンセントから給電できるようにする
出力電圧の違うACアダプタに変えたり防振パッドの寸法を変えたりするだけで、その他の電池規格に合うものも作れます。
脱電池をしたい方は、ぜひお試しください。
Ubuntuで公式にサポートされていないパッケージXXXを追加してインストールする方法

たとえばxxx=gitの場合
ppa gitでググる
んで
https://launchpad.net/~git-core/+archive/ubuntu/ppa
みたいなウェブページで追加するべきパッケージ？みたいなのを知り
以下のコマンドを実行

```
sudo add-apt-repository ppa:git-core/ppa
sudo apt-get update
sudo apt-get install git
```
ServersMan(VPS)CnetOS7(64bit)に格安SSL証明書をインストールする

https://www.ssl-store.jp/ で
RapidSSL 3年 RapidSSL 3年(ファイル認証専用)　を購入。

Apache + OpenSSL でのCSR生成を行なう。
まずはOpenSSLのバージョン確認。

    openssl version

擬似乱数を作成する。
  
    cd /usr/bin/
    ./openssl md5 * > rand.dat

作成した擬似乱数ファイル（rand.dat）から、秘密鍵を作成する。

    openssl genrsa -rand rand.dat -des3 2048 > 2016key.pem

任意のパスフレーズを求められるので入力。忘れないように注意する。

作成した秘密鍵ファイルからCSRを生成する。

    openssl req -new -key 2016key.pem -out 2016csr.pem

```
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:Tokyo
Locality Name (eg, city) [Default City]:Shinjuku-Ku
Organization Name (eg, company) [Default Company Ltd]:hoge.com
Organizational Unit Name (eg, section) []:hoge.com
Common Name (eg, your name or your server's hostname) []:hoge.com
Email Address []:mail@hoge.com
```
生成されたCSRを確認する。

    cat 2016csr.pem

    -----BEGIN CERTIFICATE REQUEST-----
    hogehogehogehogehogehogehogehoge
    -----END CERTIFICATE REQUEST-----

SSLストアの管理画面から、アクティベートを実行する。CSRを貼り付ける。確認ボタンを押す。
「以下の内容でSSLサーバ証明書が発行されます。宜しければ申込みを確定させてください。」と表示されるので
内容を確認し、問題なければ「申し込みを確定する」ボタンを押す。

しばらく待つと、「【SSLストア】今後の流れ」というメールが届く。
さらに数十分待つと、「【SSLストア】認証ファイル発行のご案内」というメールが届く。
メールの内容にしたがい、管理画面から認証ファイルをダウンロードして、サーバにアップし、httpでアクセスできるようにする。
認証が通ったら、証明書が発行されるので、サーバにアップする。httpsでアクセスして情報が確認できれば完了。



* サーバへ証明書を設置する手順

サーバ上の任意の場所に、
任意の名前.crtというテキストファイルを作成して、
証明書を貼り付ける。

同様に、サーバ上の任意の場所に、
任意の名前.ca.crtというテキストファイルを作成して、
中間CA証明書を貼り付ける。

ssl.confが無い場合は下記を実行。

    yum -y install mod_ssl

ssl.confを編集する。

    vi /etc/httpd/conf.d/ssl.conf

ServerName に、ドメインを指定する。
下記すべて、フルパスで指定する。

    SSLCertificateFile に 任意の名前.crt を指定する。（証明書）
    SSLCertificateChainFile 任意の名前.ca.crt を指定する。（中間CA証明書）
    SSLCertificateKeyFile に、秘密鍵.key.pem を指定する。

httpdを再起動する。問題なく起動することを確認する。
サイトに https でアクセスできればOK。
deeplearnig4j libraryを使ったapplicationをmac osx上で動作させるには


- scalaでアプリを作成
- dl4jはscalaで使う



nd4jの native library関連のjarでビルドエラーがでる場合は、

下記をlibにいれてしまう。 for sbt 

```
nd4j-native-0.5.0-macosx-x86_64.jar
nd4j-native-0.5.0-linux-ppc64le.jar   
nd4j-native-0.5.0-windows-x86_64.jar
nd4j-native-0.5.0-linux-x86_64.jar    
nd4j-native-0.5.0.jar
```

build.sbtは

```build.sbt
import sbt.Keys._

name := "deep_music"

version := "1.0"

classpathTypes += "maven-plugin"

javacOptions ++= Seq("-source", "1.8", "-target", "1.8", "-Xlint")

scalaVersion := "2.11.8"

libraryDependencies += "de.sciss" %% "scalamidi" % "0.2.0"
libraryDependencies += "junit" % "junit" % "4.12"
libraryDependencies += "org.deeplearning4j" % "deeplearning4j-core" % "0.5.0"
libraryDependencies += "org.scala-graph" % "graph-core_2.11" % "1.11.1"

libraryDependencies += "org.nd4j" % "nd4j-backends" % "0.5.0"
libraryDependencies += "org.nd4j" % "nd4j" % "0.5.0"
libraryDependencies += "org.nd4j" % "nd4j-api-parent" % "0.5.0"
libraryDependencies += "org.nd4j" % "nd4j-api" % "0.5.0"
libraryDependencies += "org.nd4j" % "nd4j-backend-impls" % "0.5.0"
libraryDependencies += "org.nd4j" % "nd4j-native" % "0.5.0" classifier "" classifier "macosx-x86_64"
libraryDependencies += "org.nd4j" % "nd4j-buffer" % "0.5.0"
libraryDependencies += "org.nd4j" % "nd4j-common" % "0.5.0"
libraryDependencies += "org.nd4j" % "nd4j-context" % "0.5.0"
libraryDependencies += "org.nd4j" % "nd4s_2.11" % "0.5.0"
import sbt.Keys._

name := "deep_music"

version := "1.0"

classpathTypes += "maven-plugin"

javacOptions ++= Seq("-source", "1.8", "-target", "1.8", "-Xlint")

scalaVersion := "2.11.8"

libraryDependencies += "de.sciss" %% "scalamidi" % "0.2.0"
libraryDependencies += "junit" % "junit" % "4.12"
libraryDependencies += "org.deeplearning4j" % "deeplearning4j-core" % "0.5.0"
libraryDependencies += "org.scala-graph" % "graph-core_2.11" % "1.11.1"

libraryDependencies += "org.nd4j" % "nd4j-backends" % "0.5.0"
libraryDependencies += "org.nd4j" % "nd4j" % "0.5.0"
libraryDependencies += "org.nd4j" % "nd4j-api-parent" % "0.5.0"
libraryDependencies += "org.nd4j" % "nd4j-api" % "0.5.0"
libraryDependencies += "org.nd4j" % "nd4j-backend-impls" % "0.5.0"
libraryDependencies += "org.nd4j" % "nd4j-native" % "0.5.0" classifier "" classifier "macosx-x86_64"
libraryDependencies += "org.nd4j" % "nd4j-buffer" % "0.5.0"
libraryDependencies += "org.nd4j" % "nd4j-common" % "0.5.0"
libraryDependencies += "org.nd4j" % "nd4j-context" % "0.5.0"
libraryDependencies += "org.nd4j" % "nd4s_2.11" % "0.5.0"
libraryDependencies += "org.nd4j" % "nd4j-native-platform" % "0.5.0"

```
MGUとかSGUといったLSTMの派生版をTensorFlowで実装

以下の記事に書いた通り。
http://tam5917.hatenablog.com/entry/2016/09/09/205514

LSTMの構造を簡略化したネットワークアーキテクチャが最近提案されているので、さくっとTFで実装したということ。
内容はリンク先の論文を読めば誰でも分かる。
WooCommerceのrest api 設定メモ

独自に受注データを作成する必要が出たので、英語ドキュメントと格闘しながら調べた経過のメモ（翻訳を捉え間違えてたらスマソ。。）


※前提となる環境は、woocommerceは導入済み&日本語化済みの体で--

1.管理画面メニューより「WooCommerce」-「設定(settings)」を選択
2.WooCommerce設定画面から、「API」タブを選択
3.タブのすぐ下に「設定｜キー/アプリ｜Webフック」というリンクが表示されてるはずなので、「キー/アプリ」をクリック
4.「キー詳細」への入力
　**説明**：任意の文字列。ただし何かしら入力しないとキー作成してくれなかった。
　**ユーザー**：デフォルトで自ユーザーが入力済みになってる、特に変更しない。
　**許可**：「Read/Write」を選択。
5.追加ボタン押下

すると、
Consumer Key、Consumer Secret、QRコードが画面上に生成される。
Unity - シェイクジェスチャー(振る)

#前書き#
先日、スマホゲームを扱う際の「振る」という動作について調べていたところ読みやすい記事が少なかったため解説します。
アセット等は使わずC#でゴリゴリいきます。
例によって例のごとく**かなり初心者向きです。**

#方針#
どのように「振る」アクションを検知していくか について解説します。

(1) 毎フレームごとにベクトル(加速度,傾き とも記述される)を検知し、Vector3型の変数に代入しておきます。

(2) 現フレームと１つ前のフレームの内積を計算します。
※内積についてわからない方は数学の分野となりますので軽く調べてみてください。内積がわかれば十分です。

(3) 内積の値によって判別します。
1. 内積の値が正の場合
 二つのベクトルのなす角が90°より小さいので同じ方向に動いています。
2. 内積の値が負の場合
 二つのベクトルのなす角が90°より大きいので逆の方向に動いています。

#スクリプト解説#



    private Vector3 Acceleration;
    private Vector3 preAcceleration;
    float DotProduct;
    public static int ShakeCount;

まずは変数から
Acceleration : 現フレームのベクトルを代入します。
preAcceleration : 1つ前のフレームのベクトルを代入します。
DotProduct : ベクトルの内積を代入します。
ShakeCount : 今回は振る動作の検知結果として振った回数をカウントします。


    void ShakeCheck()
    {
        preAcceleration = Acceleration;
        Acceleration = Input.acceleration;
        DotProduct = Vector3.Dot(Acceleration, preAcceleration);
        if (DotProduct < 0)
        {
            ShakeCount++;
        }
    }

1行目でpreAccelerationにAccelerationの値を代入します。
2行目でAccelerationに現フレームでのベクトルを代入します。
この1行目と２行目を入れ替えてしまうとちゃんと動かないので注意して下さい
3行目で内積を計算しています。
4-7行目で現フレームと前フレームが逆方向に動いているときにShakeCountを増やす記述をしています。

以上で解説は終了です。

#最後に#
今回はシェイクジェスチャー、「振る」という動作について解説しました。
よろしければ使ってやってください。
9/10　今日の学習内容〜アクション・コールバックについて学習〜

###今日の学習内容
***
今日も引き続き、コントローラについて（特にアクション・コールバックについて）学んでいきました。

アクション・コールバックを使うことで、アクションが実行される前後に決まった処理を行うことができるそうです( ´ ▽ ` )ﾉ

アクション・コールバックの種類は``before_action``、``after_action``、``around_action``があるようですが、ここでは``before_action``についてご紹介していきたいと思います。

ちなみに``before_action``は、アクション実行前に実行されるものですね。

####実際に利用してみる
***
さて、今回も[cloud9](https://ide.c9.io/)で練習していきたいと思います。

早速、新しいアクションとアクション・コールバックの設定を作成しましょう( ´ ▽ ` )ﾉ

``lesson_controller.rb``の中に、新しいアクション``practice6``を作ります。
ついでにアクション・コールバックの設定もしてみましょう( ´ ▽ ` )ﾉ

下の画像を参考にしてください( ´ ▽ ` )ﾉ
少し、文章が入りますけど笑
以下、画像の解説です。

2行目の``before_action :set_message,only: :practice6``によって、``practice6``だけの前にこコールバック名``set_message``を実行することができるようになります。
この時、コールバック名とアクション名が重ならないようにする必要がありますので、ご注意ください(ｰ ｰ;)

続けて、コールバック名と同じ名前のプライベートメソッドを作成していきます。（29行目からです）
ここでは、インスタンス変数``@message``に``How are you?``をセットしています。
``practice6``が表示されるときに、インスタンス変数``@message``が表示されるので、うまくいけば``How are you?``と表示されるはずです(^◇^;)

![スクリーンショット 2016-09-10 21.56.00.png](https://qiita-image-store.s3.amazonaws.com/0/137880/6907e065-1510-d871-0068-69c74ec3a7ac.png)


では、確認するため、ターミナルに``rails s -b $IP -p $PORT``と打ち込みサーバを起動します。↓

![スクリーンショット 2016-09-10 18.19.58.png](https://qiita-image-store.s3.amazonaws.com/0/137880/68fef458-6233-c7e1-f625-330551b8a3e4.png)

サーバの起動がすみましたら、リンクをクリックしてページに飛んでみましょう(^◇^;)
このままでは、トップページ移動するだけなので、URL欄に``/lesson/practice6``を付け加えましょう。
Enterキーを押すと、付け加えた後のページに移動します。↓

![スクリーンショット 2016-09-10 18.20.18.png](https://qiita-image-store.s3.amazonaws.com/0/137880/610b21f7-ccf3-3652-8088-19eec1b6dff3.png)

うまくいきましたε-(´∀｀; )

Railsサーバを起動するコマンドを打つ前に、アプリケーションのディレクトリに移動することを忘れないでくださいね。
何度やっても私は忘れています笑

cloud9では、まず、ワークスペースのディレクトリに移動するということを頭の隅っこのほうにでも留めておいてくださいm(__)m

###あとがき
***
今日も[改訂3版RubyOnRails](https://www.amazon.co.jp/dp/4844338153)で学習を進めていきました( ´ ▽ ` )ﾉ
毎日、少しづつですが、楽しみながら学習していけているので、順調だな、と感じます笑
今、私と同じようにRailsを学習し始めている方は、きっと楽しみながら学習されているのではないかと思われます(￣▽￣)
お互いに楽しみながら技術を身につけていきましょう！
記事の中でよくわからないことがあれば、気軽に話しかけてくださいね( ´ ▽ ` )ﾉ
私も、分からないなりに一緒に調べて解決したいと思います( ^ω^ )

ここまで読んでくださり、ありがとうございましたm(__)m

###参考にさせていただいたサイトなど
***
- [改訂3版RubyOnRails](https://www.amazon.co.jp/dp/4844338153)
- [cloud9](https://ide.c9.io/)
Ubuntu 16.04にCUDA7.5+cuDNN4+TensorFlowのDockerイメージを作成する

# 背景
[Ubuntuアップデートしたらログインできなくなった(nvidia GPU使用)](http://may46onez.hatenablog.com/entry/2016/02/26/020208)
のような症状にハマって、上記サイトやそのリンク先に書いてあるようなことを色々やるも改善しないのでUbuntuを再インストールした。CUDAとcuDNNのバージョンの呪いから開放されるためにDockerを導入したい。

# 構成
- OS：Ubuntu 16.04
- GPU：GeForce GTX TITAN X
- ドライバ：nvidia-361

# Dockerのインストール
https://docs.docker.com/engine/installation/linux/ubuntulinux/
に従ってインストール：

```sh:
$ sudo apt-get update
$ sudo apt-get install apt-transport-https ca-certificates
$ sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
$ sudo sh -c "echo 'deb https://apt.dockerproject.org/repo ubuntu-xenial main' > /etc/apt/sources.list.d/docker.list"
$ sudo apt-get update
$ sudo apt-get install linux-image-extra-$(uname -r) linux-image-extra-virtual
$ sudo apt-get update
$ sudo apt-get install docker-engine
$ sudo service docker start
$ sudo docker run hello-world
```

# NVIDIA Dockerのインストール
https://github.com/NVIDIA/nvidia-docker#quick-start
に従ってインストール：

```sh:
# Install nvidia-docker and nvidia-docker-plugin
$ wget -P /tmp https://github.com/NVIDIA/nvidia-docker/releases/download/v1.0.0-rc.3/nvidia-docker_1.0.0.rc.3-1_amd64.deb
$ sudo dpkg -i /tmp/nvidia-docker*.deb && rm /tmp/nvidia-docker*.deb

# Test nvidia-smi
$ sudo nvidia-docker run --rm nvidia/cuda nvidia-smi
```

# TensorFlowのDockerイメージを作成
http://blog.engineer.adways.net/archives/49085521.html
こちらを参考に、Dockerファイルを作成。
上記のサイトでは、```nvidia/cuda:7.5-cudnn4-devel```をベースにしていたが、GPUを使いたいので```nvidia/cuda:7.5-cudnn4-devel```をベースに変更する。この場合、上記サイトに記載の```libcudnn.so```のシンボリックリンクは最初からあるので不要。

```sh:Dockerfile
FROM nvidia/cuda:7.5-cudnn4-devel

RUN apt-get update
RUN apt-get install -y --no-install-recommends python-pip python-dev build-essential git
RUN pip install --upgrade https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow-0.9.0-cp27-none-linux_x86_64.whl

# コンテナ容量節約のため
RUN rm -rf /var/lib/apt/lists/*

ENV LD_LIBRARY_PATH /usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH

ENTRYPOINT ["/bin/bash"]
```

上記を```Dockerfile```という名前で保存して、保存したフォルダで下記のようにビルドしてイメージを作成する。

```sh:
$ sudo nvidia-docker build -t cuda:7.5-cudnn4-devel-tf0.9 .
```

イメージができたら、必要なデータセットとかのパスをマウントしながら起動してサンプルが動けばOK。

```sh:
$ sudo nvidia-docker run -it -v ~:/share:rw cuda:7.5-cudnn4-devel-tf0.9
```

しかし、下記を見る限りリポジトリには、Ubuntu 16.04向けはCUDA8.0RC+cuDNN5.1の組み合わせしかないようなので、Ubuntu 14.04向けのコンテナをベースにしてしまっていて、Ubuntu 14.04のパッケージを持ってきているように見える。
https://github.com/NVIDIA/nvidia-docker

まぁNVIDIAの人が大丈夫って言っているからいいか…
https://github.com/NVIDIA/nvidia-docker/issues/81
> And yes, having a 16.04 host with 14.04 containers should work just fine.
golangのdefer内で設定した戻り値は直接指定した戻り値よりも優先される

### 名前付けされた戻り値

```go
package main

func MascotName()(name string){//戻り値はnameで
	name = "gopher"
	return
}

func main(){
	fmt.Println(MascotName())
}
```
goでは関数宣言の時点で戻り値に名前を付けることが出来ます。
その場合、戻り値は指定する必要がなくなりますが、指定することも可能です。
下記のようにすることでgopher君は本来の名前を上書きされsuper gopher君となります。

```go
package main

func MascotName()(name string){
	name = "gopher"
	return "super gopher"//こちらの方が優先度は上
}

func main(){
	fmt.Println(MascotName())
}
```

しかし更に上書きするトリックがあります。

```go
package main

func MascotName()(name string){
	defer func(){
		name = "玉しゃぶりアジアンネズミ"//こちらの優先度は最強クラス
	}()
	name = "gopher"
	return "super gopher"
}

func main(){
	fmt.Println(MascotName())
}
```
deferによって、名前付けされた戻り値を上書きすることで、
super gopher君は玉しゃぶりアジアンネズミ君になります。
TravisCI 上で Electron のアプリをビルドする

# TL;DR
- wine を入れる
- electron-packager を使って各OSのパッケージを作る
- https://docs.travis-ci.com/user/deployment からパッケージをアップロードしたいものに合わせて設定を書く

---

今回は、タグをつけたら Github Release にリリース作って、ビルドしたアプリのファイルをアップロードする

```yaml:.travis.yml
before_deploy:
  - sudo add-apt-repository ppa:ubuntu-wine/ppa -y
  - sudo apt-get update -q
  - sudo apt-get install -y wine1.7
  - npm run package
deploy:
  provider: releases
  api_key:
    secure: 'xxxxxxxxx'
  file:
    - build/Release/app-darwin-x64.zip
    - build/Release/app-win32-x64.zip
  on:
    repo: [username]/[reponame]
    tags: true
```

- `deploy` のところの設定は https://docs.travis-ci.com/user/deployment/releases を見る
- `before_deploy`の１〜３行目は、Windows版のパッケージングに必要な wine を入れてる。
- ４行目は、`electron-packager` を使って、 Windows / OSX 両方のアプリをパッケージングして、zipにしている。
- `electron-packager` の使い方とかは公式のドキュメント見たり、ググったりすると良い。 https://github.com/electron-userland/electron-packager
コマンドのみでJDKをインストール


## Env
- OSX 10.11.3

## Ref
http://qiita.com/hajimeni/items/67d9e9b0d169bf68d1c9

## How to

```
# ダウンロード
$ wget -P ~/Downloads --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u102-b14/jdk-8u102-macosx-x64.dmg
...
# マウント
$ hdiutil mount jdk-8u102-macosx-x64.dmg
...
# パッケージインストール
$ sudo installer -pkg /Volumes/JDK\ 8\ Update\ 102/JDK\ 8\ Update\ 102.pkg -target /
...
# アンマウント
$ umount /Volumes/JDK\ 8\ Update\ 102
# パスを通す
$ echo "export JAVA_HOME=`/usr/libexec/java_home -v 1.8`" >> ~/.zshrc
$ echo 'export PATH=$PATH:$JAVA_HOME/bin' >> ~/.zshrc
$ . ~/.zshrc
Qiitaの◯◯.jsタグの表記ゆれと最も使われているタグ一覧

(.+).jsの表記ゆれが凄まじいことになっていたので撲滅すべく記事にしました。

※投稿数やフォロー数は記事執筆時の情報です。状況が変わっていた場合は編集リクエストをいただけると確認後、採用いたします。

# JavaScript本体

## Node.js

**node.js**が推奨される。

|表記|投稿数|フォロー数|
|:-:|:---:|:------:|
|[node](http://qiita.com/tags/Node)| 121 | 226 |
|[nodejs](http://qiita.com/tags/nodejs)| 190 | 140 |
|[node.js](http://qiita.com/tags/node.js)| **3295** | **9485** |

# フロントエンドのJavaScriptフレームワーク

## Angular

**AngularJS**が推奨される。

|表記|投稿数|フォロー数|
|:-:|:---:|:------:|
|[angular](http://qiita.com/tags/Angular)|78|240|
|[AngularJS](http://qiita.com/tags/AngularJS)|**1100**|**1379**|
|[angular.js](http://qiita.com/tags/Angular.js)|27|20|


## React.js

**reactjs**が推奨される。

|表記|投稿数|フォロー数|
|:-:|:---:|:------:|
|[react](http://qiita.com/tags/React)|305|645|
|[reactjs](http://qiita.com/tags/ReactJS)|**723**|**848**|
|[react.js](http://qiita.com/tags/React.js)|125|179|


## Vue.js

**vue.js**が推奨される。

|表記|投稿数|フォロー数|
|:-:|:---:|:------:|
|[vue](http://qiita.com/tags/Vue)|-|-|
|[vuejs](http://qiita.com/tags/Vuejs)|-|-|
|[vue.js](http://qiita.com/tags/Vue.js)|**169**|**354**|

## Riot.js

**riot**が推奨される。

|表記|投稿数|フォロー数|
|:-:|:---:|:------:|
|[riot](http://qiita.com/tags/Riot)|**84**|**261**|
|[riotjs](http://qiita.com/tags/Riotjs)|1|1|
|[riot.js](http://qiita.com/tags/Riot.js)|31|54|

## Mithril.js

**Mithril.js**が推奨される。

|表記|投稿数|フォロー数|
|:-:|:---:|:------:|
|[mithril](http://qiita.com/tags/mithril)|1|7|
|[mithriljs](http://qiita.com/tags/mithriljs)|-|-|
|[mithril.js](http://qiita.com/tags/mithril.js)|**59**| **124** |

# 編集リクエスト募集中

ひとまずフロントを
ServersMan(VPS)CentOS7(64bit)にLaravel5をインストールする

前提：LAMP環境構築済みであること。httpdが起動していること。

root権限で接続する。

composerをインストール

    curl -sS https://getcomposer.org/installer | php

下記のように表示される。

	Downloading 1.2.0...

	Composer successfully installed to: /root/composer.phar
	Use it: php composer.phar
	Some settings on your machine may cause stability issues with Composer.
	If you encounter issues, try to change the following:

	The xdebug extension is loaded, this can slow down Composer a little.
	Disabling it when using Composer is recommended.

移動させる。

    mv composer.phar /usr/local/bin/composer

必要に応じて下記インストールする。

    yum -y install zip
    yum -y install unzip

Laravelインストール。

    composer global require "laravel/installer=~1.1"

下記のように表示される。

	Changed current directory to /root/.config/composer
	You are running composer with xdebug enabled. This has a major impact on runtime performance. See https://getcomposer.org/xdebug
	Do not run Composer as root/super user! See https://getcomposer.org/root for details
	./composer.json has been created
	Loading composer repositories with package information
	Updating dependencies (including require-dev)
	  - Installing symfony/process (v3.1.4)
	    Downloading: 100%

	  - Installing symfony/polyfill-mbstring (v1.2.0)
	    Downloading: 100%

	  - Installing symfony/console (v3.1.4)
	    Downloading: 100%

	  - Installing guzzlehttp/promises (1.2.0)
	    Downloading: 100%

	  - Installing psr/http-message (1.0.1)
	    Downloading: 100%

	  - Installing guzzlehttp/psr7 (1.3.1)
	    Downloading: 100%

	  - Installing guzzlehttp/guzzle (6.2.1)
	    Downloading: 100%

	  - Installing laravel/installer (v1.3.4)
	    Downloading: 100%

	symfony/console suggests installing symfony/event-dispatcher ()
	symfony/console suggests installing psr/log (For using the console logger)
	Writing lock file
	Generating autoload files

任意のディレクトリでlaravelコマンドを実行する。

    /root/.config/composer/vendor/bin/laravel new hoge

hogeというディレクトリが作成される。
その中に public というディレクトリが出来るので、DocumentRootに設定してhttpでアクセスできれば成功。
パーミッションの開け忘れに注意。
Rのパッケージigraphのメモ

###グラフの作り方
***
- make_graph
- make_empty_graph
- make_ring
- make_full_graph
- make_bipartite_graph
- graph_from_edgelist
- graph_from_data_frame
- graph_from_literal

####使用例
```r
g <- make_graph(c(1,2,1,3,2,4))
```
引数は辺を指定する。例では、1->2,1->3,2->4の辺を追加するという意味になる。

```r
eg <- make_empty_graph(5)
eg2 <- eg + edge(1,2,1,3) + edge(2,4)
```
頂点5個、辺0個のグラフを作り、辺を追加している。

```r
zac <- make_graph('zachary')
```
文字列を指定して特定のデータからグラフを作ることも可能。例は空手クラブのメンバーの関係らしい。

###コミュニティの検出
***
- cluster_edge_betweenness
- cluster_walktrap
- cluster_spinglass
- cluster_leading_eigen
- cluster_fast_greedy
- cluster_infomap
- cluster_louvain
- cluster_optimal

####communitiesオブジェクト
***
 上記のコミュニティ検出関数が返すオブジェクト

 - membership 各頂点が属しているコミュニティ
 - length コミュニティの数
 - sizes 各コミュニティの大きさ

###頂点、辺の取得
***
- V
- E
- adjacent_vertices
- incident_edges 頂点を指定して、接している辺を取得する
- ends 辺を指定して、両端の頂点を取得する
- neighbors

###距離とか
***
- max_flow
- min_cut
- distances
- mean_distance
- all_shortest_paths
- page_rank
- betweenness
- closeness
- similarity
- laplacian
- max_bipartite_match
- mst

参考
[公式](http://igraph.org/r/doc/aaa-igraph-package.html)
[関数一覧](http://igraph.org/r/doc/)