OmniAICreator/Qiita-1.07M huggingface dataset:
MacのTimeMachineでバックアップされなくなった時にやったこと


2014年からTimeMachineを使い続け、バックアップ時にエラーは発生しないけど「最新のバックアップ」の日付が更新されないという不具合が発生しました。

OSはOS X El Capitanです。

#やったこと

## 1.TimeMachineのファイルを削除
外付けHDDにバックアップをとっていましたが、容量が少なくなってきていたのでTimeMachineのファイルを削除することに。
**※今までのバックアップが全て削除されますので注意。**

> ディスクユーティリティを起動 > 該当のHDDを選択 > 消去 > 消去ボタン

でHDDを初期化できます。
![kobito.1456884916.874270.png](https://qiita-image-store.s3.amazonaws.com/0/27793/c22beddb-8b06-dd75-50a0-dc04fba88cc9.png "kobito.1456884916.874270.png")

## 2.TimeMachineの設定ファイルを削除
「1.TimeMachine」のファイルを削除だけでは解決しなかったのでTimeMachineの設定ファイルも削除することにしました。

OS X El Capitanではシステムファイルの変更はroot権限を持ったユーザーでも「Operation not permitted」というエラーがでてしまいます。El Capitanで追加されたRootlessという機能らしいです。

以下の方法でRootlessをオフにします。(**一応危険な行為だ思いますので自己責任でお願いします**)


> 1. Macをリカバリモードで起動(command + r を押しながらMacを起動)
> 2. ユーティリティ > ターミナル
> 3. csrutil disable コマンドを実行
> 4. 再起動


**参考**

> OS X 10.11 El Capitanのシステム保護機能「Rootless」を無効にするcsrutilコマンドの使い方。 - http://applech2.com/archives/46435268.html
> Mac OS X El CapiptanでSIPを無効化する - http://qiita.com/zaburo/items/c650cda45c858fe856a9

再起動後、以下のコマンドでTimeMachineの設定ファイルを削除します(**一応危険な行為だ思いますので自己責任でお願いします**)

> 1. ターミナルを起動
> 2. su で管理者権限に切り替える
> 3. rm /Library/Preferences/com.apple.TimeMachine.plist
> 4. Macを再起動する


これでTimeMachineが完全に初期化され、バックアップが作成できました。
Linuxで、ファイル名、ディレクトリ名を一括で置換する方法

ファイル名の一括置換
`for f in $(find . -name "検索したい名前(正規表現で)" -type f); do mv "$f" "${f//変えるもと/変えるさき}"; done;`

ディレクトリ名の一括置換
`for f in $(find . -name "検索したい名前(正規表現で)" -type d); do mv "$f" "${f//変えるもと/変えるさき}"; done;`
コマンド初心者ならfishを使うと結構助かります。

<p>どうも、ちゃちゃまる(<a href="">@chachmaru</a>)です。</p>

<h1>CLI、kernel、shell、きつい</h1>

<p>いやきついっすよ、CLI。</p>

<p>CLIってコマンド・ライン・インターフェースのことなんですけど、いつも慣れ親しんでるMacのGUIとは違ってわかりにくい。文字だけしかない。<strong>でもカッコいい</strong>。</p>

<p>僕は今<a href="">LIG</a>(http://liginc.co.jp)で見習いデザインエンジニアをやってるのですが、やはり要所要所でコマンドを使うことがあります。なので、カッコつけたいので（あと自分の勉強にもなるので）コマンド初心者の僕がコマンド初心者の皆さんに向けて色々語っていきます。</p>

<h2>kernelとは</h2>

<p>「カーネル」と読みます。OSの核を成すソフトウェアで、動いてるアプリケーションの管理やハードウェア（キーボードやマウスなど）とアプリケーションのリンク、メモリの割り当てなど、とにかく中心的な存在。一言で言うと、<strong>ソフトウェアとハードウェアの架け橋</strong>。しかしこいつ、実はユーザーと直接コミュニケーションをすることが出来ないコミュ障なやつなんです。</p>

<h2>shellとは</h2>

<p>ここでshell（シェル）が登場。kernelとユーザーの仲介役をしてくれます。ユーザーの命令をshellが聞き取り、kernelが分かるように噛み砕いて、kernelに命令をするのが一般的な流れです。</p>

<h2>つまり、コマンド=shellコマンド</h2>

<p>そもそもコマンドってなんなんだ？って僕は疑問に思っていたのですが、やっと分かりました。shellコマンドのことをコマンドって言うんです。kernelへの命令はshellが行ってくれるため、僕たちユーザーがすべきことは<strong>shellに要望を伝えること</strong>です。</p>

<h2>shellの種類</h2>

<p>実はshellっていうのは一般名称みたいなもので、色々な種類があります。Terminalを起動するとデフォルトではbashというshellが立ち上がります。</p>

<h2>bash</h2>

<p>bashは多くのUNIX系OS（MacもUNIX系）で使われるshellで、最近使われるような機能は実装されています。でも僕、bashあんま好きじゃないです。なぜなら、初心者だから。オートサジェスチョン欲しい。コマンドとかパラメータとかに色ついて欲しい。</p>

<h1>そこでfish</h1>

<p>そんな中僕が気に入ったのは、<a href="https://fishshell.com/">fish</a>というshell。キャッチコピーは「a command line shell for the 90s」。直訳で「90年代のコマンドラインシェル」。なんか一見古そうですが、個人的に結構ありがたい機能が結構あります。勝手に「90年代生まれのためのコマンドラインシェル」と読み替えてます。</p>

<h2>fishのいいところ</h2>

<ul>
	<li>補完機能：コマンドを入力すると入力履歴から補完してくれます</li>
	<li>リアルタイムエラー判定：存在しないコマンドやディレクトリの場合、文字が赤くなります</li>
	<li>色付け機能：コマンド、パラメータ、コメント、エラーなど、それぞれ色の指定ができます</li>
	<li>GUIの設定画面：設定がGUIでできます（後述）</li>
</ul>

<h2>インストール手順</h2>

<ol>
	<li>ターミナルを起動。</li>
	<li>まだの人はHomebrewをインストール。<code>/usr/bin/ruby -e &quot;$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)&quot;</code>をターミナルに貼り付けてEnterを押すだけ。</li>
	<li><code>brew install fish</code>でfishをインストール。</li>
	<li>bash（デフォルト）の状態で<code>fish</code>とうつとfishが立ち上がる。</li>
</ol>

<p>fishをデフォルトにしたい場合、</p>

<ol>
	<li><code>echo &quot;/usr/local/bin/fish&quot; | sudo tee -a /etc/shells</code>と入れ、Macのパスワードを入力。この時パスワードの文字数を表す●は表示されないので注意。</li>
	<li><code>chsh -s /usr/local/bin/fish</code>と入れ、またパスワード。</li>
	<li>ターミナルを再起動して、最初からfishになっていれば成功。</li>
</ol>

<h2>fishの設定</h2>

<p>さきほど、fishはGUIで設定ができると言ったのですが、正確にはブラウザで設定します。</p>

<p><code>fish_config</code>と入れると、ブラウザが立ち上がります。ここで色の設定などができます。</p>

<p>以上です。ではまた！</p>
「App Store に接続できません」から戻らない

# 問題

Mac OS X をアップデートしようとしても「 AppStore に接続できません」が表示されるようになり、ソフトウェア・アップデートできなくなった。いつからかははっきりしない El Capitan にアップデートしてからのような気がする。

# 解決策

1. 「Spotlight」などから「キーチェーンアクセス」(Keychain Access.app) を起動する。
2. 「VeriSign Class 5 Public Primary Certification Authority - G5」が「この証明書は不明な機関によって署名されています」と表示されるので、それを削除 (完全削除でいいのか分からないので、書き出しておいたほうが良いかも……)。
3. App Store を再読込

理由は分からないが証明書が不正な状態になっていたようだ。
【覚書】2〜3名でちょっとした資料を管理したいときのGit Repoの作り方

```lang:/bin/sh
# groupadd gitusers # 適当なグループ作成
# usermod -G gitusers user_account # 対象のuser全員をgroupに追加
# mkdir /path/to/project.git
# chgrp -R gitusers /path/to/project.git
# cd /path/to/project.git
# git --bare init --shared

$ git clone ssh://host/path/to/project.git # ssh login出来る人だけアクセス可能
```
ref: http://nksg.org/archives/109
もし、--sharedを付け忘れたり、groupの書き込み権限付与に失敗して、rwできない場合は以下

```lang:/bin/sh
# chgrp -R gitusers /path/to/project.git
# cd /path/to/project.git
# git config core.sharedRepository group
# chmod -R g+w HEAD
# chmod -R g+w config
# chmod -R g+w description
# chmod -R g+ws hooks
# chmod -R g+ws info
# chmod -R g+ws objects
# chmod -R g+ws refs
```
ref: http://d.hatena.ne.jp/kuma8/20110115/1295100616

MAC OS上にshared repo作るときは、

1. システム環境設定→ユーザとグループ  
2. +ボタンを押して、ユーザとグループを必要に応じて作成  
3. 作成したグループを選択し、メンバーを追加(チェックボックス)  
(コマンドラインでは、dsclというコマンドがあるにはあるがGUIからやった方が無難)  
ref: http://d.hatena.ne.jp/ksaito11/20110508/1304756757
4. システム環境設定→共有
5. リモートログインを選択し、許可するユーザをチェック  
ここで許可されたユーザだけsshできるようになる
6. 後は、同じようにgit shared repoを作る

以上
サーバーサイドの処理を5倍高速化(WordPress)

簡単にサーバーサイドの処理を約5倍高速化する方法の手順のみを記載します。
詳しい説明とより高速化を追求する場合は、以下のサイトを参照してください。
参考サイト：http://www.atmarkit.co.jp/ait/articles/1508/07/news024.html

実験環境：CentOS6.7, Apache2.2.15, PHP5.3.3, MySQL5.1.73 

#APCのインストール
APCのインストールに必要なモジュールをインストール
>yum install php-devel php-pear gcc -y

APCをインストール。質問は全てEnterですすめる。
> pecl install apc

上記のAPCインストールによって[pcre.h no such file or directory]といったエラーが出た場合、
以下をインストール
> yum install pcre-devel

#PHPアクセラレータ「OPcache」,KVSの「APCu」を導入
「OPcache」,「APCu」をインストール
> pecl install zendopcache-7.0.5
> pecl install apcu-4.0.10

各エクステンションの最新バージョンおよびPHPの対応バージョンは以下のサイトで確認
OPcache　→https://pecl.php.net/package/ZendOpcache
APCu　→https://pecl.php.net/package/APCu

/etc/php.d/apc.iniとして以下を保存
>[opcache]
>zend_extension = /usr/lib64/php/modules/opcache.so
>opcache.enable = 1
>opcache.enable_cli = 1
>opcache.memory_consumption = 128
>opcache.interned_strings_buffer = 8
>opcache.max_accelerated_files = 4000
>opcache.blacklist_filename = /etc/php.d/opcache*.blacklist
>[apcu]
>extension = apcu.so
>apc.enabled = 1
>apc.enable_cli = 1
>apc.shm_size = 64M
>apc.mmap_file_mask = /tmp/apc.XXXXXX

Apache再起動
> service httpd restart

#DBの設定を調整しDB処理の高速化
/etc/my.cnfを編集
>[mysqld]
>innodb_buffer_pool_size = 512M
>query_cache_size = 64M

値の目安：
innodb_buffer_pool_sizeはDBサイズの120%以上
query_cache_sizeはDBサイズの10%以上

#翻訳アクセラレータプラグイン「001 Prime Strategy Translate Accelerator」の導入
wordpressのプラグインの新規追加より「001 Prime Strategy Translate Accelerator」をインストール
導入したプラグインの設定より、
・「キャッシュを有効」にチェック
・キャッシュタイプは「APC」を選択
・サイトに表示される翻訳された文章「翻訳を停止」を選択
・ログイン/サインアップ画面の翻訳「キャッシュを使用」を選択
・管理画面の翻訳「キャッシュを使用」を選択
Slackのリマインダーを削除する

## 方法
1. `/remind list`で現在登録中のリマインド一覧表示
2. 削除したいリマインドを選択する<br>

![スクリーンショット 2016-03-02 10.42.34.png](https://qiita-image-store.s3.amazonaws.com/0/50319/b574dbb7-98ad-c409-24e5-9a72edc73bce.png "スクリーンショット 2016-03-02 10.42.34.png")


以上！

不要なリマインドはどんどん消しましょう。
mocha/supertest でAPIテストを始める 


メモ。もうちょっと使いこなしてから加筆したい所。

## 導入

````kuroi_gamen
$ npm install supertest should --save-dev
````

test/api_test.jsを作成

````test/api_test.js
var request = require('supertest');


describe("hoge",function(){
    this.timeout(2000)
    var agent = request.agent("http://hogeapp.app/") 

    it('send api', function (done) {
        agent
        .get('/debug')
        .set('Accept', 'application/json')
        .expect(function(res){
            res.status.should.equal(404);
        }).end(function(err,res){
            if(err){
                throw err;
            }
            done();
        });
    });
})
````

argent 変数の単位でセッションやクッキーが保持される。

実行時には以下のコマンドを叩く。

````kuroi_gamen
$ mocha test/api_test.js --requrie should
````

### レスポンスの検証

`expect`に渡すのコールバックの第一引数ではレスポンスオブジェクトが取得できます。

`res.status` でステータスコード、`res.body`でボディのJSONが取得できます。

ステータスコードの検証

````
res.status.should.equal(200);
````

レスポンス型の検証

````
res.type.should.equal("application/json");
````

プロパティの存在チェック

````
res.body.should.hasOwnProperty("status")
````

プロパティの値チェック

````
res.body.status.should.equal("OK");
````

プロパティが配列であることのチェック

````
res.body.item_list.should.be.Array();
````

その他shouldの使い方については、
http://shouldjs.github.io/
を参考にすると良いです。

## テスト時のデバッグ

テストのコマンドは長くなりがちなのでMakefileなどに記述しておきます。
デバッグのためにnode-inspectorなどを使用するならなおさら。

````:Makefile
.PHONY: test
test:
	open http://127.0.0.1:8080/?port=5858 &
	mocha test/api_test.js --require should --debug-brk
````

`--debug-brk`オプションで最初にブレイクポイントが自動で付与され、カスタムのブレイクポイントを張る猶予が与えられる。

openコマンドを挟んで自動でデバッグ窓が開くようにしておくと便利です。


## テスト設計
 
### コード管理

- 設定を注入するモジュール
- APIの発行に関するモジュール
- シナリオのモジュール(正常系・異常系)

### APIの発行に関するモジュール

APIの発行に関する処理と、正常系のexpectをモジュールにまとめておく。

シナリオごとにAPIを自由に組み合わせて使用できるので、様々なシナリオの検証を記述する際に苦になりにくい。

- argent は引数で受け取れるようにする。
- APIの発行と、正常系・異常系のexpectは分けておく。

次のシナリオに渡すための、レスポンスの加工とかまでやりだすとめんどいのでシンプルなexpectに留める。

デバッグ時にブレイクポイントを張る事を考えるなら共通のend用クロージャを作っておくのも良い。
複数の箇所にブレイクポイントを張る手間が省けて楽。

### 課題

- describe/itの明確な粒度設計
- テスト実行の手間。コマンド長い。requireくらいはソースの中で書けない？
- codeception みたいにもうちょっとカジュアルにデバッグしたい。inspectorは便利だけど窓が開くのは面倒に思う。
QtTestLib

#何のこと?
Qt環境でテストを書くときに使えるQtのテストフレームワークについてです。

ちょっとやってみたところ、参照できる情報が古かったのか自分の環境だけ違うのか、そのままでは動かなかったので覚書程度に書きます。

違ったのはソースの最後にmocファイルのincludeを書くところ。

細かい使い方は本家へ行ってどうぞ。

```ruby:testest.pro
#
# testest
#
# test lib test
#

QT += testlib

HEADERS += testestest.h

SOURCES += testestest.cpp

```

```cpp:testest.h
#ifndef __TESTESTEST_H__
# define __TESTESTEST_H__

#include <QtTest/QtTest>

class TestQString: public QObject
{
    Q_OBJECT
private slots:
    void toUpper();
};

#endif  // __TESTESTEST_H__
```

```cpp:testest.cpp
#include "testestest.h"

void TestQString::toUpper()
{
    QString str = "Hello";

    QVERIFY(str.toUpper() == "HELLO");
    QVERIFY(str.toUpper() != "hello");

    QCOMPARE(str.toUpper(), QString("HELLO"));
    QCOMPARE(str.toUpper(), QString("hello"));  // <-- コレはテストの条件が間違っているのでここでエラーになる。
}

 QTEST_MAIN(TestQString)
 #include "moc_testestest.cpp"  // <-- 自分の環境ではコレでした。
```

```text:console
$ qmake testest.pro

$ nmake
(略)

$ debug\testest.exe
********* Start testing of TestQString *********
Config: Using QTest library 4.8.4, Qt 4.8.4
PASS   : TestQString::initTestCase()
FAIL!  : TestQString::toUpper() Compared values are not the same
   Actual (str.toUpper()): HELLO
   Expected (QString("hello")): hello
.\testestest.cpp(11) : failure location
PASS   : TestQString::cleanupTestCase()
Totals: 2 passed, 1 failed, 0 skipped
********* Finished testing of TestQString *********
```

#環境
* Visual C++ 2012 Express Edition
* Qt 4.8
* Windows 8.1

#参照
http://elisp.net/qt-doc-ja_JP/qtestlib-tutorial.html
http://www.off-soft.net/ja/develop/qt/qt1-10.html
http://doc.qt.io/qt-4.8/qtestlib-manual.html
【トラブル】NetBeansのインストーラが作成する不正なレジストリ値のため、chocolateyのアンインストール操作が失敗する

# 現象

chocolateyでなんらかのアプリをアンインストールしようとしたり、PowerShellで `Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*` なんて操作をすると、 `Specified cast is not valid.` というメッセージとともに例外が発生します。

```ps1:
PS C:\Windows\system32> Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\* | Format-Table -Aut
oSize

DisplayName DisplayVers DisplayIcon InstallLoca UninstallSt    NoModify    NoRepair EstimatedSi VersionMajo VersionMino
            ion                     tion        ring                                         ze           r           r
----------- ----------- ----------- ----------- -----------    --------    -------- ----------- ----------- -----------
7-Zip 15... 15.14       C:\Progr... C:\Progr... C:\Progr...           1           1        4843          15          14

Firefox ... 41.0a2      C:\Progr... C:\Progr... "C:\Prog...           1           1       98662
Git vers... 2.7.1       C:\Progr... C:\Progr... "C:\Prog...           1           1      189124
Microsof... 1.1.40219   C:\Windo... C:\Progr... C:\Progr...                               22174           1           1
Microsof...
Microsof...             "C:\Prog...             "C:\Prog...
Microsof...             C:\Windo... C:\Windo... C:\Windo...                               88724           2           0
Microsof... 10.0.50903  msiexec.exe C:\Progr... C:\Progr...           0                   10805           4
Get-ItemProperty : Specified cast is not valid.
At line:1 char:1
+ Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Unin ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Get-ItemProperty], InvalidCastException
    + FullyQualifiedErrorId : System.InvalidCastException,Microsoft.PowerShell.Commands.GetItemPropertyCommand
```


同じ問題に遭遇してるひと → https://github.com/PSAppDeployToolkit/PSAppDeployToolkit/issues/102


# 原因

NetBeansインストーラが作成する不正なDWORD値を読み込めないのが原因です。

バグ報告 → https://netbeans.org/bugzilla/show_bug.cgi?id=251538


# 回避策

NetBeansをアンインストールします。
ElectronインストールからHello worldまで


## Electronって何
* GitHub社が開発
* HTML,CSS,JavaScriptでネイティブアプリが作れるオープンソースフレームワーク
* クロスプラットフォーム対応(Mac, Linux, Windows)
* Node.jsとChromiumで動いている
* AtomとかSlackとかkobitoとか 

## Electronの準備
ElectronはNode.jsで動いてるので、まずはPCにNode.jsの実行環境を作る必要があります。
Node環境の構築はこちら[MacにNode.js環境を作る(nodebrew)](http://qiita.com/saekis/items/d580d1c2ae4f32a6ae99)

では早速アプリを作っていきます

### ディレクトリ作成

```sh
$ mkdir electron-app
$ cd electron-app
```

### package.json作成
```sh
$ npm init
```

色々聞かれて作られた`package.json`ファイル

```json:package.json
{
  "name": "electron-app",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "saekis",
  "license": "MIT"
}
```

実行とかアーカイプ用とかに一部を修正

```json:package.json
"scripts": {
  "test": "echo \"Error: no test specified\" && exit 1"
},
```

↓

```json:package.json
"scripts": {
  "start": "node_modules/.bin/electron .",
  "build": "node build.js"
},
```

### Electron用モジュールをインストール
```sh
$ npm --save-dev install electron-prebuilt
$ npm --save-dev install electron-packager
```

## Hello world

jsファイルとhtmlファイルを作る

```javascript:index.js
'use strict';

// アプリケーションをコントロールするモジュール
var app = require('app');
// ウィンドウを作成するモジュール
var BrowserWindow = require('browser-window');
// 起動URL
var currentURL = 'file://' + __dirname + '/index.html';
// クラッジュレポーター
require('crash-reporter').start();
// メインウィンドウはGCされないようにグローバル宣言
var mainWindow = null;
// 全てのウィンドウが閉じたら終了
app.on('window-all-closed', function() {
  if (process.platform != 'darwin') {
    app.quit();
  }
});
// Electronの初期化完了後に実行
app.on('ready', function() {
  mainWindow = new BrowserWindow({width: 800, height: 600});
  mainWindow.loadUrl(currentURL);
  mainWindow.toggleDevTools();
  // ウィンドウが閉じられたらアプリも終了
  mainWindow.on('closed', function() {
    mainWindow = null;
  });
});
```

```html:index.html
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Electron</title>
  </head>
  <body>
    <p>Hello, world!</p>
  </body>
</html>
```

```sh
$ npm run start
```

![Electron_と_1__Electron_Helper.png](https://qiita-image-store.s3.amazonaws.com/0/57806/4c863e46-75ea-335d-507a-448551c0f781.png "Electron_と_1__Electron_Helper.png")

簡単！
中国のRailsエンジニアの年収事情

GYAOの玉利です。

社内ではRailsエンジニアは超レアキャラのため窓際でほそぼそとベトナム人とRails開発してますが、窓際から空を見てると、ときたま汚い空だけれど活気のある北京に帰りたくなります。もしくは香港に暮らして深センに働きにいく生活を選んでれば。。。と。日本に戻ったことをかなり後悔してます。

左は棒餃子　右は麻豆腐という、緑豆おからを発酵させて羊の油で炒めたもの。これがビールのアテとして異常にうまいんです。日本では空輸してる超高級店でしか食べられませんが、北京だと所詮はおから炒めなので200円程度の庶民の味方。

<img width="240" alt="スクリーンショット 2016-03-01 22.32.50.png" src="https://qiita-image-store.s3.amazonaws.com/0/113049/569a75b4-7e45-c4b4-b4db-fe61fd536eb2.png">


久しぶりに、中国のエンジニアの懐事情を探ってみました。中国にもQiita的なものがあって、Rubyのエンジニアはだいたいここを見てるみたいです。

https://ruby-china.org

# これが中国のRubyエンジニアの求人(2016)

社内の友人より「業種よろ」と言われたので追記してます。

### 北京　投資機構のインターネット金融部門　中関村エリア
[北京] 天星资本招聘 Ruby 开发工程师，做互联网产品和研究
https://ruby-china.org/topics/29098

北京天星资本招聘 Ruby 开发工程师。工作地点为海淀黄庄丹棱 SOHO 。

新三板最大的投资机构的互联网部门，做互联网金融的各个方向，包括企业服务、路演、众筹等诸多领域。目前互联网部门60多人。

10~18K，年终奖2~4个月，好的话5~6，2015年年终奖平均3.6个月。
**(20-40万円/月、 年収15.6ヶ月。大体300-600万円)**

### 北京　ニュースアプリ
[北京] 好奇心日报 招聘 Ruby 工程师 (工程师 2 名，月薪 15k-35k)
https://ruby-china.org/topics/28988

**(30-70万円 ボーナスなしだとしても360-840万円)**

### 深セン(ドローンで有名なDJI)　たぶん南山科学技術区
[深圳] DJI 大疆创新 Q1 招聘 Ruby 工程师 3 名 (saberma 内推 15-30k + 全员持股)
https://ruby-china.org/topics/28995

月薪 15-30k　年终 5~8 个月的奖金
**(30-60万円/月　年収17-20ヶ月　大体550-1100万円)**

見てて、具合悪くなってきました。おそらく日本のWebエンジニアはほとんどこんなにもらえてません。もうちょいがんばります。

### 上海  教育プラットフォーム
[上海] 中美团队股票期权别墅办公 (上海) 资深前端 ( full stack) 招聘 月薪 20K-50K
https://ruby-china.org/topics/28932
Quesbook （考谱）是一个“靠谱”的定制化教育平台，利用智能的 adaptive 算法，为每一名用户定制最合适的练习、教学视频和私教

薪资 20K-50K 同时招聘实习生
**(40-100万円/月　年収480-1,200万円)**

### 上海　教育プラットフォーム
[上海][张江高科] Ruby 研发工程师 (初级、中级、高级)
https://ruby-china.org/topics/29164
资深服务端软件工程师（Ruby） 20K-30K/Month
**(40-60万円/月　年収480-720万円)**

### 北京　企業向けSaaS

[北京] [西直门] Udesk 诚邀 Ruby 工程师 & Ruby 技术经理 10 - 40k
https://ruby-china.org/topics/28984

月薪10k - 40k
**(20-80万円　年収240-960万円)**

深センすげー、という感じですが、深センは不動産もバブル再加速中なのです。

経済系ニュースによると、２月の不動産価格は前月比5%上昇、前年同月比で55%上昇になっています。給料高くても、全部ローンに消える感じです。

逆にマンションを２部屋かっておけば、２年すると一個タダになる勢いです。


# 落胆

中国人の元部下には「Rails覚えておきなさい」と話したのですが、なんか日本と給与相場逆転が起こってる感じです。さすがに人口の多い国は、同じ仕事をやっても儲かり方が違います。とほほ。

すくなくとも、コスト的に中国にオフショアするのはすでにありえないですね。日本より高コストになります。ベトナムであれば、いろいろ乗っけても1/3程度のコストなのでまだまだオフショアのメリットはありそうです。すでに鼻が利く人はミャンマーでオフショアを始めてますが。
【VS Community 2015】Visual C# 拡張機能 作成メモ

# はじめに
Visual Studio Community 2015 でVisualC#拡張機能を作成し、
コマンドを作成して実行するところまでやってみました.

バージョン情報
Microsoft Visual Studio Community 2015
Version 14.0.24720.00 Update 1
Microsoft .NET Framework
Version 4.6.01055

# プロジェクトの作成
スタートページから"新しいプロジェクト..."を選択
![image](https://qiita-image-store.s3.amazonaws.com/0/44288/f5116c11-4fb6-7076-c6bd-aa11dae7860b.png)
<br>

テンプレート -> Visual C# -> Extensibility -> VSIX Project を選択
![image](https://qiita-image-store.s3.amazonaws.com/0/44288/b639638d-1aa7-5567-e21e-82771d45f070.png)
<br>

OKをクリックすると以下の画面が出てきます.
![image](https://qiita-image-store.s3.amazonaws.com/0/44288/b0481768-75a9-db3c-9747-81b354cddac2.png)

# コマンドを作成してみる
ソリューションエクスプローラー上で右クリック
追加(D) -> 新しい項目(W) を選択
![image](https://qiita-image-store.s3.amazonaws.com/0/44288/49b87ec0-aa34-9b17-a58e-8befbe03315c.png)
<br>

Extensibility -> Custom Commandを選択して、追加をクリック。 コマンド名は"Command1"としておきます.
![image](https://qiita-image-store.s3.amazonaws.com/0/44288/3190aab0-61fd-487f-2924-1665b61169f9.png)
<br>

ソリューションエクスプローラー上にファイルが作成されます
![image](https://qiita-image-store.s3.amazonaws.com/0/44288/c81fdca7-685f-e871-136a-3e8731b24a48.png)
<br>

この状態でデバッグ(F5)を実行すると,仮想的なVisualStudio(実験的なインスタンス)が立ち上がります.
![image](https://qiita-image-store.s3.amazonaws.com/0/44288/2f2f431d-988f-3a42-e663-9c84e5ef5fc6.png)

# コマンドを実行してみる
ツール -> Invoke Command1 を選択
![image](https://qiita-image-store.s3.amazonaws.com/0/44288/fd3f18ff-ed49-e871-0bae-58931c47dcd3.png)

先ほど作成した Command1 が実行されます
![image](https://qiita-image-store.s3.amazonaws.com/0/44288/720336d8-7870-0e7f-fd52-f48fa427a922.png)

ソースコードを追ってみると、Command1.csのこの部分のコードが実行されているみたいです.
![image](https://qiita-image-store.s3.amazonaws.com/0/44288/5bebfa2b-f8cf-4578-656d-1f347ce03c29.png)


# 参考
Visual Studio 拡張機能の作り方
http://www.slideshare.net/bonprosoft/visual-studio-51944492

Visual Studioをあなた好みにしてみよう
https://buchizo.wordpress.com/2012/12/02/visual-studio%E3%82%92%E3%81%82%E3%81%AA%E3%81%9F%E5%A5%BD%E3%81%BF%E3%81%AB%E3%81%97%E3%81%A6%E3%81%BF%E3%82%88%E3%81%86/
はじめてのdatadog

https://www.datadoghq.com/ は、非常に柔軟なモニタリングサービスです。全体傾向を見ることも、タグを使って詳細な分析を行うこともできるのが大きなメリットだと思います。

本記事では、 **datadogのアカウントはあるけれど自分でデータを登録したことはない人** を対象に、基本的な用語の解説と curl を使ったメトリクス送信方法を説明します。

# 基本用語

## Metrics

サーバなどから送られてくる情報。 Key, Value, Tag の3種類のデータがペアになっています。

| field | 型の制限 |
|:--|:--|
| Key | ドット区切り / 大文字小文字を区別しない / 記号は `_` のみ可 |
| Value | type によって 32bit float / 64bit integer になる |
| Tag | 文字列の配列 |

## Event

GitHub等の外部サービスとDataDogを連携させると、Eventでコミット履歴などが記録されていく。自分でAPI経由でイベント登録することも可能。

（デプロイした時刻をイベントで記録しておくと、後から分析に使いやすいのでおすすめ）

本記事では省略します。

## Monitor

監視設定。Metricsの値を監視し、しきい値を超えた/下回った場合にメールやSlackに通知を飛ばす。一定時間後に復旧していない場合にリマインダ的に通知を繰り返す設定もある（便利）。

# shellからメトリクスを送ってみる

## シンプルな例

```bash
#!/bin/sh

currenttime=$(date +%s)
curl  -X POST -H "Content-type: application/json" \
-d "{ \"series\" :
         [{\"metric\":\"test.metric\",
          \"points\":[[$currenttime, 20]],
          \"type\":\"gauge\",
          \"tags\":[\"environment:test\"]}
        ]
    }" \
'https://app.datadoghq.com/api/v1/series?api_key=<your datadog key>'
```

 - メトリクス名: `test.metric`
 - 現在時刻のメトリクス値は 20
 - メトリクスの種別は gauge (→値は 32bit float になる)
 - `environment` というタグ名の値が `test` 

## 複数のメトリクスを同時に送る

```bash
#!/bin/sh

currenttime=$(date +%s)
curl  -X POST -H "Content-type: application/json" \
-d "{ \"series\" :
         [{\"metric\":\"test.metric\",
          \"points\":[[$currenttime, 20]],
          \"type\":\"gauge\",
          \"tags\":[\"environment:test\"]},
         {\"metric\":\"test.metric2\",
          \"points\":[[$currenttime, 20]],
          \"type\":\"gauge\",
          \"tags\":[\"environment:test\", \"hostname:example.com\"]}
        ]
    }" \
'https://app.datadoghq.com/api/v1/series?api_key=<your datadog key>'
```

 - series には配列を渡すことができます
 - `tags` にも配列を渡すことができ、 `"tag_name:tag_value"` の形式で、複数のタグを同時に指定可能です

# gauge と counter の違い

`counter` は、「レート(一定時間あたりの件数)を扱うためのデータ型」と API Reference に記載があります。つまり、「アクセス件数」「処理件数」を counter 型で記録しておき、「1分あたりの処理件数」を確認することができます。 (なので、記録されるデータ型も整数 64bit integer で問題無い、ということになります)

対して `gauge` は、整数では表現できない「処理時間」などの記録に適しています。多くの場合は `gauge` を利用していれば問題無いと思います。 (なので、typeのデフォルト値はgaugeなんだと思う)

# 参考

 - http://docs.datadoghq.com/ja/api/
    - 上部メニューの2段目に言語を選ぶ欄があります。APIのデータ構造を見やすい Shell を選んで一読しておくのがおすすめです。
複雑怪奇なJavaの名称とバージョン番号を整理する

複雑なJavaの名称とバージョン番号の変遷を辿ります。ちょっとした雑学です。
# 名称とバージョン番号

| 名称 | コードネーム | リリース日 | 主な仕様追加 |
|:--|:--|:--:|:--|
| JDK 1.0 | | 1996年1月23日 |  |
| JDK 1.1 | | 1997年2月19日 | 国際化対応<BR>内部クラス<BR>JDBC API<BR>Java RMI |
| J2SE 1.2 | Playground | 1998年12月8日 | コレクションフレームワーク<BR>リフレクション<BR>JITコンパイラ |
| J2SE 1.3 | Kestrel | 2000年5月8日 | HotSpot JVM<BR>JNDI<BR>JPDA |
| J2SE 1.4 | Merlin | 2002年2月6日 | assert<BR>NIO<BR>正規表現<BR>JDBC 3.0<BR>JAXP<BR>Java Web Start |
| J2SE 5.0 | Tiger | 2004年9月30日 | ジェネリック型(総称型)<BR>拡張for文<BR>オートボクシング・アンボクシング<BR>staticインポート<BR>列挙型(enum)<BR>可変引数<BR>アノテーション |
| Java SE 6 | Mustang | 2006年12月11日 | JDBC 4.0<BR>JAXP 1.4 |
| Java SE 7 | Dolphin | 2011年7月28日 | 例外の再スロー<BR>例外のマルチキャッチ<BR>try-with-resources文<BR>switchに文字列<BR>ダイヤモンド演算子<BR>NIO 2<BR>JDBC 4.1<BR>JavaFX 2.0 |
| Java SE 8 | コードネーム廃止 | 2014年3月18日 | ラムダ式<BR>Stream<BR>型アノテーション<BR>メソッド・コンストラクタ参照<BR>インタフェースのデフォルトメソッド<BR>New Date API<BR>Optional型<BR>JavaFX 8 |
| Java SE 9 |  | 2017年3月23日(予定) | Project Jigsaw(モジュール化)<BR>JShell(REPL) |


# 環境
- JRE(Java Runtime Environment、Java実行環境)
バイトコード(classファイル)を実行するための環境。
標準クラスライブラリやJava VM(JVM、Java仮想マシン)を含む。

- JDK(Java Development Kit、Java開発キット)
JREに加え、開発者向けのツール(コンパイラやデバッガなど)を含む。

# エディション
J2SE 1.2から3つのエディションに分かれた。
- J2SE(5以前)、Java SE(6以降、Standard Edition)
汎用用途向けで、標準的なAPIのみを含む。

- J2ME、Java ME(Micro Edition)
携帯端末などの限られたリソースしか持たないデバイス向け。

- J2EE(1.2 - 1.4)、Java EE(5以降、Enterprise Edition)
大規模サーバ環境向けで、EJBやServlet、JSPなどのサーバ用APIを含む。
AD2 > reference manual > 0.1% resistors and 1% capacitors in all the critical analog signal paths < To minimize these effects, the design uses:

```txt:ツール
Analog Discovery 2 (以下AD2)
```

AD2のリファレンスマニュアルを読んでいる。

https://reference.digilentinc.com/analog_discovery_2:refmanual#calibration_memory

`4. Calibration Memory
 
>- 0.1% resistors and 1% capacitors in all the critical analog signal paths

~~この0.1%や1%というのは何のことなのか未消化。~~

~~オーム？~~
~~ファラッド？~~

<hr>

> To minimize these effects, the design uses:
- 0.1% resistors and 1% capacitors in all the critical analog signal paths
- ...

という文章があったので、おそらく、AD2基板上の抵抗の0.1%を、コンデンサの1%を Calibration に使うということなのだろう。

> A set of measurements is used to identify all the DC errors (Gain, Offset) of each analog stage. Correction (Calibration) parameters are computed and stored in the Calibration Memory,...
nativefierをDockerコンテナー化する

nativefierを使いやすくするため、Dockerコンテナー化します。

# nativefierとは

WebページをElectronでラップしてデスクトップ・アプリケーション化するアプリです。

[jiahaog/nativefier: Wrap any web page natively without even thinking, across Windows, OSX and Linux](https://github.com/jiahaog/nativefier)

# なぜDockerコンテナー化するのか？

nativefierはNode.js(npm)を必要としますが、Node.jsが無い環境でも使用したいため、Dockerコンテナー化します。

(Dockerが入っているならNode.jsくらい入っているとは思いますが…)

# 使い方

ビルドしたイメージをDocker Hubで公開しています。以下のように実行できます。

```
docker run -v {出力先}:/mnt/dest u6kapps/nativefier {nativefierオプション} /mnt/dest
```

* `{出力先}`には、ローカルPCの出力先フォルダを指定します。
    * マウント先に`/mnt/dest`を指定していますが、`nativefier`がここに出力します。
* `{nativefierオプション}`には、nativefierに渡すオプションを列挙します。
    * `ENTRYPOINT`で`nativefier`を起動するため、指定したオプションが渡ります。
    * nativefierに渡すオプションは、[jiahaog/nativefier](https://github.com/jiahaog/nativefier)を確認すること。

例えば、Windows向けのGoogle Calendarアプリを出力する場合は、以下のように実行します。

```
docker run -v /c/Users/xxx/Downloads:/mnt/dest u6kapps/nativefier -n "Google Calendar" -p win32 --honest "https://calendar.google.com" /mnt/dest
```

# 備考

* GitHubでコードを公開しています。
    * [u6k/nativefier-docker](https://github.com/u6k/nativefier-docker)
* Docker Hubでイメージを公開しています。
    * [u6kapps/nativefier](https://hub.docker.com/r/u6kapps/nativefier/)
* Windowsで実行する場合はDocker MachineでDockerホストを構築して、その中でコンテナー実行すると思いますが、共有フォルダに出力しないと消えるので、注意です。
* `nativefier`がダウンロードしたElectronはコンテナー実行後に消えますので、毎回、ダウンロードされます。
技術英語 > It was specifically [left out] when the Clean Water Act was passed and ... / Leave it to the expert.

@ LOE > December 28, 2012
http://loe.org/shows/shows.html?programID=12-P13-00052
> Well it was left out. It was specifically <font color=red>left out</font> when the Clean Water Act was passed and ...

http://eow.alc.co.jp/search?q=leave+out&ref=sa
> ～を除外する

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

http://qiita.com/7of9/items/613aa9bb7153f1e573d9
> Leave it to the expert.
AWS S3でweb hostingする方法

# はじめに
s3は汎用的なストレージサービスです。
公式サイト: http://amzn.to/1oN8hro

様々な用途で利用する事ができます。
今回紹介するのは、s3の少し特殊な使い方でweb hostingで静的なサイトを立ち上げる方法です。

# AWS s3のバケットの設定
## バケット作成
東京リージョンに適当な名前で素のs3バケットを一つ作成します。
## 権限設定
- 「アクセス権限」->「バケットポリシーの追加」を開く。  
<img width="765" alt="S3_Management_Console.png" src="https://qiita-image-store.s3.amazonaws.com/0/14929/c5ad66f6-74fb-47dd-5f7c-9715e61b8bdb.png">

- AWS Policy Generatorを開く。  
<img width="653" alt="S3_Management_Console.png" src="https://qiita-image-store.s3.amazonaws.com/0/14929/6534ac0b-d78d-dff7-be3c-301bdd5c58a5.png">

- 以下の通りに入力し、「Add Statement」->「Generate Policy」して表示されたポリシー設定のjsonをコピーする。
    - Select Type of Policy: S3 Buchet Policy
    - Effect: Allow
    - Principal: *
    - Actions: GetObject
    - Amazon Resource Name(ARN): arn:aws:s3:::[buchet_name]/*

- バケットポリシーエディターにjson貼り付けて「保存」

## web hosting設定
- 適当にhello world!とか書いてファイル名`index.html`にしてアップロードする。
- バケットの設定で、「静的ウェブサイトホスティング」->「ウェブサイトのホスティングを有効にする」にチェックを入れ、インデックスドキュメントに`index.html`と入力し、「保存」
<img width="749" alt="S3_Management_Console.png" src="https://qiita-image-store.s3.amazonaws.com/0/14929/c6e35174-5c4c-7399-766c-3b18beb8e343.png">

- エンドポイントにアクセスして動作確認  
![S3_Management_Console.png](https://qiita-image-store.s3.amazonaws.com/0/14929/74618bfa-0146-8403-d08e-f7e8bd1140b9.png)

- 保存した`index.html`の内容が表示されればok.
<img width="255" alt="jekyll-auto-deploy-test_s3-website-ap-northeast-1_amazonaws_com.png" src="https://qiita-image-store.s3.amazonaws.com/0/14929/6c65b4ab-f542-5e09-88ca-d0ede25c04fc.png">
ScotchBox2.0にfuelPHPをインストールするまで

Windows7(Windows7 Professional 64bit)にScotchBox2.0を構築し、fuelPHPの開発環境をさくっと構築しました。

参考にしたのは以下の記事です。
・[ラクして環境構築するためのScotch-Boxが2.0になってかなり進化してた](http://qiita.com/naru0504/items/560a150943d2251e1ae8?1.5)
・
(1)まずはじめに、vagrantとvirtualboxをインストール。これは説明省略。
https://www.vagrantup.com/
https://www.virtualbox.org/

(2)次に、各種開発環境が予めセットアップされているScotchBox2.0をインストール。

```
git clone git@github.com:scotch-io/scotch-box.git my_scotch
cd my_scotch
vagrant up
```

(3)ホストOSから、teratermでvagrantに接続。id/passはvagrat/vagrant

![a.png](https://qiita-image-store.s3.amazonaws.com/0/1660/5adc3356-7d2a-199d-ae4d-5ce4d616abab.png)

![b.png](https://qiita-image-store.s3.amazonaws.com/0/1660/46ffe105-c41c-b11b-49eb-0e418786ac55.png)

(4) fuelPHPをインストール
まずoilコマンドというのをインストールしてプロジェクトを作成しました。

```
$ curl get.fuelphp.com/oil | sh
$ oil create helloworld
```

途中、githubのダウンロード量の上限にひっかかるため、githubのアカウントが必要になりました。エラーメッセージ中のURLをクリックしてtokenを生成し、入力するだけでクリアできました。ダウンロードは遅く数分かかりました。

デフォルトでapacheのルートのパスは/var/www/public/ でしたので、これを/home/vagrant/apache_root/に変更しました。
設定ファイル/etc/apache2/confや、/etc/apache2/site-availableあたりを書き換えて

```
$ mkdir /home/vagrant/apache_root
$ ln -s /home/vagrant/helloworld/public /home/vagrant/apache_root/helloworld
$ sudo service apache2 restart
```
![d.png](https://qiita-image-store.s3.amazonaws.com/0/1660/771101ee-f7f3-cc8e-c424-5e6678ffa520.png)


うむ。極めて少ない作業量で何もかも簡単にインストールされている。

fuelPHPのインストール作業もvagrantfileに記述できるのかもしれないけど、そこまで徹底しなくとも。私はfuelPHPの開発にすぐにとりかかりたいだけなのだ。
[Python]PythonでOpenCVを使う (Image Filtering編)


# Image Filtering

#### [blur](http://docs.opencv.org/3.0-last-rst/modules/imgproc/doc/filtering.html#blur)
cv2.blur(src, ksize[, dst[, anchor[, borderType]]]) 

#### [GaussianBlur](http://docs.opencv.org/3.0-last-rst/modules/imgproc/doc/filtering.html#gaussianblur)
cv2.GaussianBlur(src, ksize, sigmaX[, dst[, sigmaY[, borderType]]])

#### [medianBlur](http://docs.opencv.org/3.0-last-rst/modules/imgproc/doc/filtering.html#medianblur)
cv2.medianBlur(src, ksize[, dst]) 

#### [bilateralFilter](http://docs.opencv.org/3.0-last-rst/modules/imgproc/doc/filtering.html#bilateralfilter)
cv2.bilateralFilter(src, d, sigmaColor, sigmaSpace[, dst[, borderType]])


![filter.png](https://qiita-image-store.s3.amazonaws.com/0/100523/41f309fc-b7a4-abc4-6a3e-f148600dccb8.png)

```python
import cv2
import matplotlib.pyplot as plt
import numpy as np

I = cv2.imread('./data/SIDBA/Lenna.bmp')

# blur
Ib = cv2.blur(I, ksize=(5,5))
# Gaussian
Ig = cv2.GaussianBlur(I, ksize=(5,5),sigmaX=2)
# median
Im = cv2.medianBlur(I, ksize=5)
# bilateral
Ibi = cv2.bilateralFilter(I, d=5, sigmaColor=5, sigmaSpace=2)

fig, axes = plt.subplots(nrows=2, ncols=3, figsize=(15,10))

axes[0,0].imshow(cv2.cvtColor(I, cv2.COLOR_BGR2RGB))
axes[0,0].set_title('original')
axes[0,0].set(adjustable='box-forced',aspect='equal')
axes[0,0].get_xaxis().set_visible(False)
axes[0,0].get_yaxis().set_visible(False)

axes[0,1].imshow(cv2.cvtColor(Ib, cv2.COLOR_BGR2RGB))
axes[0,1].set_title('blur')
axes[0,1].set(adjustable='box-forced',aspect='equal')
axes[0,1].get_xaxis().set_visible(False)
axes[0,1].get_yaxis().set_visible(False)

axes[0,2].imshow(cv2.cvtColor(Ig, cv2.COLOR_BGR2RGB))
axes[0,2].set_title('GaussianBlur')
axes[0,2].set(adjustable='box-forced',aspect='equal')
axes[0,2].get_xaxis().set_visible(False)
axes[0,2].get_yaxis().set_visible(False)

axes[1,0].imshow(cv2.cvtColor(Im, cv2.COLOR_BGR2RGB))
axes[1,0].set_title('medianBlur')
axes[1,0].set(adjustable='box-forced',aspect='equal')
axes[1,0].get_xaxis().set_visible(False)
axes[1,0].get_yaxis().set_visible(False)

axes[1,1].imshow(cv2.cvtColor(Ibi, cv2.COLOR_BGR2RGB))
axes[1,1].set_title('bilateralFilter')
axes[1,1].set(adjustable='box-forced',aspect='equal')
axes[1,1].get_xaxis().set_visible(False)
axes[1,1].get_yaxis().set_visible(False)

fig.delaxes(axes[1,2])
fig.show()
```
Spring BootでOracleのシーケンスを取得する


通常は`@SequenceGenerator`を使って取得・バインドするのが普通なんだと思うが、
プレフィックスやチェックデジットなどをつけたかった。
SQLを発行してシーケンスを取得すれば出来そう！
...と思って挑んでみたものの1日詰まったのでまとめておく。

## 動作環境

* Java 8
* Spring Boot 1.3.2
* JdbcTemplate

## IDを生成する`IdGenerator`

http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-using-jdbc-template

これを元に`IdGenerator`クラスを作ってみた。
`@Component`をつけることで`@Autowired`をつけたクラスをDIしてくれるので忘れると動かない。

```java:src/main/java/com/example/util/IdGenerator.java
package com.example.util;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;

@Component
public class IdGenerator {

	@Autowired
	JdbcTemplate jdbcTemplate;
	
	public long generateId() {
		long seq = this.jdbcTemplate.queryForObject("SELECT HOGE_SEQ.NEXT_VAL FROM DUAL", Long.class);
		
		// ...チェックデジットの計算などする... //
		
		return seq;
	}
	
}
```

## `IdGenerator`を使う

先ほど作った`IdGenerator`を使う時には自分でインスタンスを作るのではなく、`@Autowired`をつけてDIするように定義する。
そうしないと`JdbcTemplate`のインスタンスがセットされず、呼び出し時に`NullPointerException`が発生する。

※全然気が付かずにこれで1日はまった...

```java:src/main/java/com/example/welcome/WelcomeController.java
@Controller
public class WelcomeController {

	@Autowired
	IdGenerator idGenerator;
	
	// ... //
	
	@RequestMapping(value="/hello", method=RequestMethod.POST)
    public String hello(@Valid Member member, BindingResult bindingResult)
    {
        if (bindingResult.hasErrors())
        {
            return "welcome";
        }
        
        model.setAttribute('id', idGenerator.generateId());

        return "hello";
    }
}
```
ライブラリを使ったc++高速化

C++でコードを書いていて、高速化したいときに使うライブラリをまとめました。

# [tcmalloc](http://goog-perftools.sourceforge.net/doc/tcmalloc.html), [jemalloc](http://www.canonware.com/jemalloc/), [nedmalloc](http://www.nedprod.com/programs/portable/nedmalloc/)
`malloc`の置き換えによる高速化です。
以下のように実行することで、`malloc`が置き換えられて実行されます。

```
LD_PRELOAD=/usr/lib/libtcmalloc.so ./exefile
```

実行ファイルによるかもしれませんが、`tcmalloc`が1番良い気がします。

2019/6/26追記
Microsoftから新たに[mimalloc](https://github.com/microsoft/mimalloc)がリリースされました。
試してませんがメモリ、パフォーマンスが更に良くなっているみたいですね。

# [google::dense_hash_map](https://google-sparsehash.googlecode.com/svn/trunk/doc/dense_hash_map.html)
`tcmalloc`に引き続いてgoogleのライブラリになりますが、Hash Mapを使う際の高速化です。[ここ](http://incise.org/hash-table-benchmarks.html)で様々なHash Mapを用いた際のベンチマークテストの結果があるのですが、実行時間ではかなり速いです。
コンストラクタ呼び出し後に`empty_key`をセットする必要があり、無効なキーを作りづらいときは使いづらいです。

# [boost::fast_pool_allocator](http://www.boost.org/doc/libs/1_60_0/libs/pool/doc/html/boost/fast_pool_allocator.html)
Allocatorをメモリプールを用いたものにして高速化する方法です。

```cpp
std::vector<int, boost::fast_pool_allocator<int> > v;
```

# [OpenMP](http://openmp.org/wp/)
解説されているリンク

* http://tech.ckme.co.jp/openmp.shtml
* http://www.cc.u-tokyo.ac.jp/support/kosyu/03/kosyu-openmp_c.pdf
* http://www.nag-j.co.jp/openMP/

# SIMD
[Intrinsic命令](https://software.intel.com/sites/landingpage/IntrinsicsGuide/)とか使う方法もありますが、用途に合わせてSIMD対応のライブラリを使うと楽です。

* [eigen](http://eigen.tuxfamily.org/index.php?title=Main_Page) 行列演算ライブラリ
* [Boost.SIMD](https://github.com/jfalcou/nt2/tree/master/modules/boost/simd) SIMD命令の抽象化
* [libsimdpp](https://github.com/p12tic/libsimdpp)
* [Vc](https://github.com/VcDevel/Vc)
[Python]PythonでOpenCVを使う (基本編)

# インストール(Anaconda)
Anacondaで２０１６年２月現在最新のOpenCV3.1をインストールするには、下記のサイトから取ってくるようにする。

```sh
conda install --channel https://conda.anaconda.org/menpo opencv3
```
importしてバージョンを確認。

```py
In [1]: import cv2

In [2]: print cv2.__version__
3.1.0
```
# 画像を読み込む
cv2.imreadで画像を読み込む。このとき画像はBGRになっている。
このままmatplotlibで表示しようとすると色がおかしくなるので注意が必要。

sckit kimageやscipyで画像を読み込むとRGBになる。

読み込んだ画像のタイプは、numpy arrayになっている。

```py
In [5]: I = cv2.imread('Lenna.bmp')

In [6]: I = cv2.imread('lena512color.tiff')

In [7]: type(I)
Out[7]: numpy.ndarray
```

## PILの場合

```py
In [8]: from PIL import Image

In [9]: I = Image.open('Lenna.bmp')

In [10]: type(I)
Out[10]: PIL.BmpImagePlugin.BmpImageFile
```

## Sckit Imageの場合

```py
In [11]: from skimage import io

In [12]: I = io.imread('Lenna.bmp')

In [13]: type(I)
Out[13]: numpy.ndarray

In [14]: Icv = cv2.imread('Lenna.bmp')

In [15]: print Icv[0,0,:]
[125 137 226]

In [16]: print I[0,0,:]
[226 137 125]
```

## Scypiの場合

```py
In [17]: from scipy import misc

In [18]: I = misc.imread('Lenna.bmp')

In [19]: type(I)
Out[19]: numpy.ndarray

In [20]: print I[0,0,:]
[226 137 125]
```

## matplotlibの場合

```py
In [21]: from matplotlib import image

In [22]: I = image.imread('Lenna.bmp')

In [23]: type(I)
Out[23]: numpy.ndarray

In [24]: print I[0,0,:]
[226 137 125]
```
# 画像を保存する

opencvで画像を保存する場合は、imwriteを使用する。

imwrite(filename, img[, params])


```py
In [26]: cv2.imwrite('output.png', I)
Out[26]: True
```
ただし、OpenCVで保存する場合は、Interleaved形式で、BGRの順番に色が並んでいないといけない。
そのまま保存すると下記のようになる。

![output.png](https://qiita-image-store.s3.amazonaws.com/0/100523/09eb4a45-ab49-d597-894d-f61892b079be.png)

# 画像を表示する
画像の表示は、imshowを使う。

imshow(winname, mat)


```py
import cv2

I = cv2.imread('./data/SIDBA/Lenna.bmp')

cv2.namedWindow('window')
cv2.imshow('window', I)
cv2.waitKey(0)
cv2.destroyAllWindows()
```

ただし、これをinteractiveなipythonでやるとipythonが死亡する。

ipythonでやる場合は、下記のようにstartWindowThreadを最初に実行するとよい。

```py
In [7]: I = cv2.imread('./data/SIDBA/Lenna.bmp')

In [8]: cv2.startWindowThread()
Out[8]: 1

In [9]: cv2.namedWindow('window')

In [10]: cv2.imshow('window', I)

In [11]: cv2.waitKey(0)
Out[11]: 10

In [12]: cv2.destroyAllWindows()
```

ただ画像を表示させたい場合は、特別な理由が無い限りmatplotlibを使った方が楽。

```py
In [12]: import matplotlib.pyplot as plt
    ...: import cv2
    ...: 
    ...: I = cv2.imread('./data/SIDBA/Lenna.bmp')
    ...: 
    ...: plt.imshow(cv2.cvtColor(I, cv2.COLOR_BGR2RGB))
    ...: plt.show()
```
![範囲を選択_036.png](https://qiita-image-store.s3.amazonaws.com/0/100523/981ce5cb-dfad-4583-cfa4-dc8a3b5b1071.png)

# 色変換
opencvで画像を読み込んだ場合は、画像がBGRになっているので、matplotlibで表示するにはRGBに変換する必要がある。
このようなときにはcvtColorを使う。

```python
import numpy as np
import cv2
import matplotlib.pyplot as plt

I = cv2.imread('./data/SIDBA/Lenna.bmp')

J = cv2.cvtColor(I, cv2.COLOR_BGR2RGB)

plt.imshow(J)
plt.show()
```
高専３年生がprocessingを用いて宇宙を作った話（移動・回転可能、ソースコード付き）

# Processing で宇宙を表現してみた

はじめまして、現役高専生です（３年）
機械系の学科に所属していますが、プログラミングにも少し興味があり、
今回Processingを使って作った宇宙みたいなものを公開してみました。

## こだわったところ
宇宙内での移動や回転をキーボードからできるようにしました。
- WSAD で前後左右
- JK で上下
- QE で視野の回転



参考にしたのは以下のリンクです。
http://p5aholic.hatenablog.com/entry/2015/06/15/194250
http://qiita.com/satoshi_imanishi/items/8dd218bfbad3f28789ab

以下のgithubのリンクにソースコードをのせておきます。
https://github.com/bashitwo/work.git
webpackを使ってsassをコンパイルできるようにしよう！


## 背景

なぜかこれのやり方に関する記事が簡単にみつからず、”じゃあいいよ俺書くよ！”ってことでメモ。
（こんだけ記事がないと何か根本的に俺は間違っているのだろうかと内心ビクついてるので、何かお気付きの方いらっしゃいましたら容赦なくツッコミ下さい。）

元々はフロントのes6をコンパイルするためにwebpackを導入してみたので、sassもwebpackで処理できればいいなと。
あ、あとjsとcssは別ファイルに出力したいという要件を前提にやってます。特に明確な理由があるわけじゃないけど、気持ちの問題で^^

## 環境

node 0.12.10
webpack 1.12.14

## 手順

ここを参考に[SEPARATE CSS BUNDLE](http://webpack.github.io/docs/stylesheets.html#separate-css-bundle)

#### 必要なライブラリをインストール
```
npm install style-loader css-loader sass-loader extract-text-webpack-plugin --save
```

#### webpack設定ファイルを編集
```webpack.config.js
const path = require('path');
const ExtractTextPlugin = require('extract-text-webpack-plugin');

module.exports = [{
  entry: {
    bundle: './src/app.js'
  },
  output: {
    path: path.join(__dirname, 'public'),
    filename: '[name].js'
  },
  module: {
    loaders: [
      {
        loader: 'babel',
        exclude: /node_modules/,
        test: /\.js[x]?$/,
        query: {
          cacheDirectory: true,
          presets: ['react', 'es2015']
        }
      }
    ]
  }
}, {
  entry: {
    style: './src/stylesheets/main.js'
  },
  output: {
    path: path.join(__dirname, 'public/css'),
    filename: '[name].css'
  },
  module: {
    loaders: [
      {
        test: /\.css$/,
        loader: ExtractTextPlugin.extract("style-loader", "css-loader")
      },
      {
        test: /\.scss$/,
        loader: ExtractTextPlugin.extract("style-loader", "css-loader!sass-loader")
      }
    ]
  },
  plugins: [
        new ExtractTextPlugin("[name].css")
    ]
}];
```

#### ビルド！
```
webpack
```

終わり。
手順だけ見ると結構簡単ですね。
（まあすんなり出来るはずもなく以下のように悪戦苦闘しました。ご参考までに。）


## 手順にたどり着くまでに出会ったエラー達

#### 1 Entry module みつからねーZO!
```
ERROR in Entry module not found: Error: Cannot resolve 'file' or 'directory' ./src/stylesheets in /path/to/current/dir
```
設定項目のentryをあまり理解せずにcss置くディレクトリにしたら発生。
普通にentrypointとなるjsファイル(中身はrequire('./main.scss')だけ)を置いて、指定してやったら治った。

#### 2 module ねーZO!
```
Error: Cannot resolve module 'style-loader'
```
style-loaderをインストールしてなかった。。。手順通りやればここには出会わないはず。

#### 3 Promise 定義されてねーZO!
```
ReferenceError: Promise is not defined
```
nodeのバージョンが古いと出現するらしい。
v0.12.10にアップ。


#### 4 nodeバージョン変わってんじゃねーかYO!
```
ERROR in The `libsass` binding was not found in
This usually happens because your node version has changed.
    Run `npm rebuild node-sass` to build the binding for your current node version.
```

はい、さーせん。npm rebuild node-sass流して解決。
Haxeの@:callableメタデータを雑に理解した。

# @:callableとは
[issue](https://github.com/HaxeFoundation/haxe/issues/3218)によると
Haxe3.2から追加されたメタデータで、abstractを呼び出し可能にできるみたいです。
ユニットテストを見ていると、

```hx
@:callable
abstract A<T>(T) from T {}

class Main {
  public static function main() {
    var func:A<Int->Int> = function(x:Int) return x * 2;
    func()
  }
}

```
のように使うみたいです。
ただ、これだけだと普通のクロージャを呼び出すのと変わりように思えますが、ちょっとトリッキーなことができます。

# 演算子をオーバーロードする
下のような書き方をすると、演算子をオーバーロードすることができます。
呼び出し演算子はオーバーロードできないみたいですね。

```hx

@:callable
abstract TestFunc(haxe.Constraints.Function) from haxe.Constraints.Function {
    @:op(A * B) public function multiply(right:Int) {
        return 2 * right;
    }

}


class Main {

    public static function main() {
        var a:TestFunc = function() {
            return "Hello!";
        };
        trace(a * 10); // 20
        a(); // Hello"
    }

}

```

あと、`@:arrayAccess`メタデータを使えば配列っぽくアクセスすることもできるみたいです。

演算子がオーバーロードできたから何が嬉しいんだ、みたいなところはまだわかってないのですが、
とりあえず`@:callable`の使い方を雑に理解した話でした。

どなたか良い活用法を知っているからがいらっしゃれば教えてください...
【UE4】C++でInterfaceを使う方法

# C++インターフェース

```cpp:SampleInterface.h
// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "SampleInterface.generated.h"


UINTERFACE(Blueprintable)
class USampleInterface : public UInterface
{
	GENERATED_UINTERFACE_BODY()
};


/**
 * サンプルインターフェース
 */
class ISampleInterface {

	GENERATED_IINTERFACE_BODY()

public: // 非const版

	UFUNCTION(BlueprintNativeEvent, BlueprintCallable, Category = "Sample")
	void Sample();
	UFUNCTION(BlueprintNativeEvent, BlueprintCallable, Category = "Sample")
	void SampleArg(int32 Value);
	UFUNCTION(BlueprintNativeEvent, BlueprintCallable, Category = "Sample")
	int32 SampleResult();
	UFUNCTION(BlueprintNativeEvent, BlueprintCallable, Category = "Sample")
	int32 SampleArgResult(int32 Value);

public: // const版
	UFUNCTION(BlueprintNativeEvent, BlueprintCallable, Category = "Sample")
	void SampleConst() const;
	UFUNCTION(BlueprintNativeEvent, BlueprintCallable, Category = "Sample")
	void SampleArgConst(int32 Value) const;
	UFUNCTION(BlueprintNativeEvent, BlueprintCallable, Category = "Sample")
	int32 SampleConstResult() const;
	UFUNCTION(BlueprintNativeEvent, BlueprintCallable, Category = "Sample")
	int32 SampleArgConstResult(int32 Value) const;

};
```

# ブループリント側に実装

**クラスの詳細**->**詳細パネル**->インターフェースの実装を選んでください。
![image](https://qiita-image-store.s3.amazonaws.com/0/66029/fad3dfab-d6d5-731d-e2a0-de28a4384bf4.png)


## どこに実装するか  

| 戻り値\const |     非const版     |  const版  |
|:------------|:------------------|:----------|
|  戻り値無し  | イベントグラフに実装| 関数側に実装 |
|  戻り値有り  | 関数側に実装 | 関数側に実装 |

## 実装方法  

* イベントグラフ  
**イベントを追加**->_**C++で書いたイベント名**_を選択してください。
![image](https://qiita-image-store.s3.amazonaws.com/0/66029/8aa06f98-5238-0bde-685e-043dc9c7347a.png)

* 関数側
自動的にマイブループリントの欄にインターフェースが追加されるのでそちらに実装を書いてください
![image](https://qiita-image-store.s3.amazonaws.com/0/66029/7c0bd8c4-dcc3-8614-e997-67b4a640cd00.png)

## C++での使い方

* インターフェースを実行

```cpp
UObject* Object;

if (Object->GetClass()->ImplementsInterface(USampleCppInterface::StaticClass()))
{
	ISampleCppInterface::Execute_Sample(Object);
}
```

* インターフェースを実装しているActorすべてに関数を実行  

```cpp
TArray<AActor*> OutActors;

// インターフェース取得
UGameplayStatics::GetAllActorsWithInterface(this->GetWorld(), USampleCppInterface::StaticClass(), OutActors);

// インターフェースを持っている対象すべての実行を行う
for (AActor* Actor : OutActors)
{
	ISampleCppInterface::Execute_Sample(Actor);
}
```
slick.jsでjavascriptの読み込みが終わるまで縦並びになってしまう。

タイトルみたいなことが起こってしまって、たくさんの画像で画面が埋まってしまってました。

とりあえず**簡単な解決方法**

```
<div class="your-class">
  <div>your content</div>
  <div>your content</div>
  <div>your content</div>
</div>
```

これを

```
<div class="your-class">
  <div class="slick-slide">your content</div>
  <div class="slick-slide">your content</div>
  <div class="slick-slide">your content</div>
</div>
```

みたいに**`slick-slide`をつけてあげる**と、とりあえず縦並びになるのを防げます。

もし**読み込みが遅くて画像が縦並びになってしまう**といった現象に、こういった対応をしてみてはいかがでしょうか。

---
### 追記(2018.07.09)
この方法に**バグが見つかりました。**
`asNavFor`を使って連携させるとき挙動がおかしくなります。
ですので、その際はクラス名`slick-slide`を使わない対応をしてください。

詳しくはこちらの記事で ( https://qiita.com/yoshiiiiie/items/2deaf0d3b7d8271d6e38 )
Python[Django] de Webサービスを公開するまで [環境構築編]

#Pythonを利用して、webを公開するまでの手順まとめ

## 投稿理由
Djangoの日本語解説が古くて、チュートリアルの途中でつまづいたから、インストールからメモがてら、投稿してます。

## 実行環境
★ローカル環境
MacBook Pro (13-inch, Mid 2012)
プロセッサ: 2.5 GHz Intel Core i5
メモリ: 4 GB 1600 MHz DDR3

★使用予定言語
Python
Django
JavaScript

---

## Pythonを選んだ理由
ただ、慣れ親しんだ言語だから。

## Django
前々から気になっていたから。

---

## さっそく、インストール

Macには、既にPythonが実装されているので、[Django](https://www.djangoproject.com/)のインストール(構築)を公式サイトの手順で行います。
Windowsの方は、[Python](https://www.python.org/downloads/windows/)からインストール設定してください。
**※なお、今後の解説予定は、Python2.7で進行予定です。**
**※[pip](https://pip.pypa.io/en/stable/installing/)を使用して、インストール。**

```lang:ターミナル
$ pip install Django==1.9.2
...
..
.
$ python -c "import django; print(django.get_version())"
1.9.2
```

## That’s it!
That’s it – you can now [move onto the tutorial](https://docs.djangoproject.com/en/1.9/intro/tutorial01/).

簡単でしたね。それでは、チュートリアルへ進みましょう。

Next...
----
次は、チュートリアル編をストックします。
Raspberry Pi のACT LEDを点灯させるC++プログラム


ただの，メモです．

```cpp
#include <fcntl.h> //for O_RDWR
#include <unistd.h> //for open, close

int main(int argc, char** args) {
    /*O_RDWR は読み書きどちらも許可するモード*/
    /*PWR LEDを点灯させるときは，led1に変更する*/
    int trigger = open("/sys/class/leds/led0/trigger"      , O_RDWR); 
    int bright  = open("/sys/class/leds/led0/brightness", O_RDWR); 
    
    //初期化的なの
    write(trigger, (char*) "none", 4); //3rd arg is the size of 2nd arg
    
    //ACT点灯
    write(bright, (char*) "1", 1);
    //3秒休止
    sleep(3);
    //ACT消灯
    write(bright, (char*) "0", 1);
    
    //終了処理的なの
    write(trigger, (char*) "mmc0", 4); //メモリアクセスでACT点滅に戻す
    
    close(bright);
    close(trigger);
}
```
Ubuntu 14.04 LTS 開発環境構築ログ #03

前記事：[Ubuntu 14.04 LTS 開発環境構築ログ #02](http://qiita.com/cazborg/items/fbbe2d64e7e63369caa5 "#02")

# 鍵交換方式でSSH接続するための準備
## 秘密鍵＆公開鍵のペアを作成

```
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/cazborg/.ssh/id_rsa): <Enter>
Created directory '/home/cazborg/.ssh'.
Enter passphrase (empty for no passphrase): <パスフレーズ + Enter>
Enter same passphrase again: <パスフレーズ + Enter>
$
```

## 公開鍵の内容を ``~/.ssh/authorized_keys`` に追加
```
$ cd ~/.ssh
$ cat id_rsa.pub >> authorized_keys
```

## 秘密鍵``(~/.ssh/id_rsa)``を作業用PCにSCP
TeraTerm の [ファイル]-[SSH SCP...] でダウンロード。
以後は秘密鍵を使用してSSH接続。

# SSHD の設定を変更
root ユーザで SSH 接続できないよう設定を変更し、sshd を再起動

```
$ sudo cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config.20160309
$ sudoedit /etc/ssh/sshd_config
$ cd /etc/ssh
$ diff -u sshd_config sshd_config.20160309
--- sshd_config 2016-03-09 00:59:48.000000000 +0900
+++ sshd_config.20160309        2014-09-04 17:24:13.000000000 +0900
@@ -25,7 +25,7 @@

 # Authentication:
 LoginGraceTime 120
-PermitRootLogin no
+PermitRootLogin yes
 StrictModes yes

 RSAAuthentication yes
$
$ sudo service ssh restart
```
Swift タップした位置にUIImageView(画像)を追加

タップした位置にUIImageViewを追加する方法とコードメモです。
この例はもぐらのpng画像です。

完成図
<img width="150" alt="kanseizu.png" src="https://qiita-image-store.s3.amazonaws.com/0/76843/91143581-c8eb-dca4-cdd1-7a24c0a5f75e.png">

#1. 画像を登録する

![mogura.jpg](https://qiita-image-store.s3.amazonaws.com/0/76843/4d2e8a6c-0ade-3e98-d7e8-85eaaf9c5980.jpeg)


#2. TapGestureRecognizerを追加。

viewにTapGestureRecognizerを追加。
アイコンが追加されるのでそれをソースにAction接続。
この例ではNameはaddImageにしてます。

<img width="259" alt="TapGestureRecognizer.png" src="https://qiita-image-store.s3.amazonaws.com/0/76843/6c3ebfdc-74b3-67e0-d5c7-2cecd6a4e121.png">

![addimge.jpg](https://qiita-image-store.s3.amazonaws.com/0/76843/867f26e5-4eec-4f4b-4a0a-ccf1a405671c.jpeg)

#3. コードを書く

```swift:addImage
import UIKit

class ViewController: UIViewController {

    // ビューがタップされたら実行
    @IBAction func addImage(sender: UITapGestureRecognizer) {
        
        // UIImageView(もぐら画像)作成
        let mogura = UIImageView(image: UIImage(named: "mogura"))  /* named:"画像名" */
        
        // UIImageViewの中心座標をタップされた位置に設定
        mogura.center = sender.locationInView(self.view)
        
        // UIImageView(もぐら画像)を追加
        self.view.addSubview(mogura)
    }
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }


}
```