OmniAICreator/Qiita-1.07M huggingface dataset:
Bezier Curve Editorでベジェ曲線の動きをさせる

<a href="https://www.assetstore.unity3d.com/jp/#!/content/11278" target="_blank"><img src="https://qiita-image-store.s3.amazonaws.com/0/46444/ead15454-44cc-b909-92ba-1525c7b9be43.png">

ベジェ曲線の動きを作るのにこのアセットが使いやすかったので。
ちなみに無料のアセット。

##インポートしたところ
<img src="https://qiita-image-store.s3.amazonaws.com/0/46444/ab5fcdca-9b5e-eccf-354c-5134d9b0f945.png" width="250px"/>

##こんな感じ
ギズモが表示されるので見やすいのと、閉じたカーブもできますし、ハンドルも感覚的に調節できます。
<img src="https://qiita-image-store.s3.amazonaws.com/0/46444/dce9c08f-cf5b-ee98-7ecd-b7380ae38bb6.png" width="250px"/><img src="https://qiita-image-store.s3.amazonaws.com/0/46444/62011fee-0530-8b21-d54f-295ac88c49eb.png" width="250px"/>

インスペクタはこんな感じです。色など指定できます
<img src="https://qiita-image-store.s3.amazonaws.com/0/46444/336f4cbf-1681-36b6-77d0-308cd7a0ae59.png" width="250px"/>

##シンプルに動かしてみる
シンプルにポイント2カ所のシンプルなカーブであれば

<img src="https://qiita-image-store.s3.amazonaws.com/0/46444/b5a4826c-50b5-a7a0-5dfe-8a4d10d5eb88.gif" width="250px"/>

こんな感じのソースを書いてポイントをアタッチしてあげるだけでギズモの通り動く

```csharp

using UnityEngine;
using System.Collections;

public class MoveObj : MonoBehaviour {
	public BezierPoint p1;
	public BezierPoint p2;

	private float nowTime;
	private float moveTime = 2f;

	void Start () {
		nowTime = 0;
	}

	void Update () {
		Vector3 currentPoint = BezierCurve.GetPoint(p1, p2, nowTime/moveTime);
		transform.position = currentPoint;
		
		nowTime += Time.deltaTime;
		if(nowTime > moveTime) nowTime = 0;
	}
}
```
JavaScriptで月末日を取得する


超小ネタ。
しかも、なぜこれで月末日が取得できるのか、いまいち分かっていない…。

```javascript
var m = 7;
var lastDay = new Date(2015, m + 1, 0).getDate();
console.log(lastDay); // 31
```

## 参考
[date - Calculate last day of month in javascript - Stack Overflow](http://stackoverflow.com/questions/222309/calculate-last-day-of-month-in-javascript) ← これの1番上の回答
Reduxさわってみたのでメモ 【とりあえず動くまで】

現在業務で実装している`React`を用いたデモ的なものに`Redux`を導入してみたので、自分なりに理解したものをメモしておく。

# Reduxとは

https://github.com/rackt/redux

Fluxフレームワークの１つで、現時点(2015/9末)でもっともstar数の多いもの。ちなみに`Angular`用に`ng-redux`というのがあったりもする

# 参考サイト

http://rackt.github.io/redux/

# インストール

```
npm install --save react-redux
```

# 登場人物

## Store

- `state`をもっている
- `Action`をdispatchする
- Reduxを用いたアプリケーションでは`Store`は１つしか存在しちゃいけない

## Reducer

- `state`がどのように変更されるのかを`Action`を通して特定するもの
- 分割可能(`reducer composition`)

## Action

- `Store`に送られる情報
- `Object`型であり、`Action`を特定する`String`型の`type`プロパティを必ずもつ

## Provider

- ルートのコンポーネントを囲うもの。こうすることで、コンポーネント内で`Store`を利用できるようにする
- 内部的には`React`の`context`という機能を利用しているとのこと

### メモ

- `Provider`については、データフローの一連の流れとは関係ないものという認識。なので、`Store`等と並列に書くのは紛らわしいかもしれない。
- `Reducer`というのが`Flux`そのものの中では出てこない考えなので少し戸惑ったけれど、`Store`の役割の一部を切り出したものという認識

# 実装

まだES6を全然キャッチアップできておらず、ちょいちょい古い書き方が混ざっています（とくにモジュール化）。とはいえ逆に同じ状況の人いるかもしれないので、あえてそのままで書いてみます(汗)

## Action

```js:actions.js
var Actions = {}

Actions.UPDATE_LIST            = 'UPDATE_LIST';
Actions.DONE_ITEM              = 'DONE_ITEM';

Actions.updateList = function(list) {
 return { type: Actions.UPDATE_LIST, list };
}

Actions.doneItem = function(itemId) {
 return { type: Actions.DONE_ITEM, itemId };
}
```

## Reducer

```js:reducer.js
var Reducer = function(state = [], action) {
  switch (action.type) {
  case Actions.UPDATE_LIST:
    return { list: action.list };
  case Actions.DONE_ITEM:
    return { itemId: action.itemId };
  default:
    return state;
  }
}
```

`Action`と`Reducer`はコンポーネントとの依存はないので、そこは一切気にせずひたすら書いていく

## Store, Provier

※ `Main`がルートコンポーネント

```js:Main.js
window.store = createStore(Reducer);

React.render(
  <Provider store={store}>
    {() => <Main />}
  </Provider>,
  document.getElementById('content')
);

function mapStateToProps(state) {
  return {
    itemList: state.list
  };
}

Main = connect(mapStateToProps)(Main)
```

## dispatch

※ `ItemCell`は子コンポーネントの１つ

```js:ItemCell.js
  onClick: function() {
    var list = []; // たとえばAjax通信で取得したリストデータ
    store.dispatch(Actions.updateList(list));
  },
```

### 補足

ひっそりと`connect`という処理が入っているけれど、書き方含め（ドットチェーンで繋ぐとかならわかりやすいけど括弧が連続で繋がっていく）これが一番自分としてはわかりづらかった。
Reduxとコンポーネントを文字通り「連結する(connect)」処理には違いないけど、内部的な処理とかはまた追い追い調べたいと思う

# よくわかっていないところ

- `connect`でリスナの登録など行っているわけだけど、`store.subscribe(listener)`という書き方は基本しないという考えでいいのかな？？
- `store.dispatch()`で今回dispatchしているけれど、`bindActionCreators`を使うほうがいい？？

# 所感

- 上の「よくわかっていないところ」に書いたように、いろいろな書き方ができるような印象があって、どう書くのがいいのか迷うことがある
- 「子コンポーネントについては一切手をいれなくていい」といったふれこみをどこかで聞いた気がするのですが、そこは確かにそうだと思った

# 次の課題

- 大規模開発に備えて`Action`とか`Reducer`の分割を行う
- `Middleware`とかさわってみる
- ルーティングの処理を入れる（少し試してみたがうまくいかなかった!!）
- 今回書いたもので間違っていること・情報不足していることあれば補足する
Swiftで文字列内に変数を埋め込む


C#、Javaのstring.format的なことをSwiftでしたい場合は『\ ()』 で変数をかこうだけ。

ただ代入する変数がOptionalの場合はどの言語でも同様に注意が必要ですね。
テストを怠って②、③のような結果を人に見られたら赤面モノです。（体験談）

```swift
// ①
var c1 : Int = 3
println("この投稿は\(c1)回目の投稿です。")  //この投稿は3回目の投稿です。

// ②
var c2 : Int? = 3
println("この投稿は\(c2)回目の投稿です。")  //この投稿はOptional(3)回目の投稿です。

// ③
var c3 : Int? = nil
println("この投稿は\(c3)回目の投稿です。")  //この投稿はnil回目の投稿です。
```
CodeIgniter 3. Composer のときのディレクトリ構成がちょっといや

# 1. Composerでインストールしてみる
[codeigniter/framework](https://packagist.org/packages/codeigniter/framework)のとおりにやると、

```
$ composer require codeigniter/framework
```

```
/
├── composer.json
├── composer.lock
└── vendor
    ├── autoload.php
    ├── codeigniter
    └── composer
```
```composer.json
{
    "require": {
        "codeigniter/framework": "^3.0"
    }
}
```
これだと、index.phpが vendor/codeigniter/framework/ にいて、ここをルートにする仕様なのかな？
create-project も試してみる。

```
$ composer create-project codeigniter/framework [dir_name]
```
```
/
└── dir_name
    ├── application
    ├── composer.json
    ├── composer.lock
    ├── contributing.md
    ├── index.php
    ├── license.txt
    ├── readme.rst
    ├── system
    ├── user_guide
    └── vendor
```
これならよさそうかと思ったら、フレームワークのコアがvendorの外のsystemに入っててなんかおかしい。github のディレクトリ構成が Composer向きじゃないのかな。
Composerではなくて、[Sparks](http://getsparks.org/)なのでしょう。

# 2. require を使う方向でファイル構成変更する
まず、composer.json をそれっぽく書き足す。

```composer.json
{
    "require": {
        "php": ">=5.2.4",
        "codeigniter/framework": "^3.0"
    },
    "require-dev": {
        "mikey179/vfsStream": "1.1.*"
    }
}
```
index.phpと appricationディレクトリを頭ににコピーする。.htaccess も置いておく。

```
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
```
```
/
├── .htaccess
├── application
├── composer.json
├── composer.lock
├── index.php
└── vendor
    ├── autoload.php
    ├── codeigniter
    ├── composer
    └── mikey179
```
index.php を直す。

```index.php
$system_path = 'vendor/codeigniter/framework/system';
```
apprication/config/config.php を直す。

```config.php
//$config['composer_autoload'] = FALSE;
$config['composer_autoload'] = TRUE;
$config['composer_autoload'] = FCPATH . '/vendor/autoload.php';
```
create-project でこんな感じになってくれるといいなと思う。composer update もできるし、他のフレームワークはこういう方向よね？
[解決]/etc/suodersにサービス再起動用アカウントを追加したけど、上手くいかなかった話

#[解決]/etc/suodersにサービス再起動アカウントを追加したけど、上手くいかなかった話
ぐぐれ先生に聞いたのですが、日本語での解説がなかったので書いてみました。

`環境：CentOS-7`

rootではないユーザーに、サービス再起動権限をあげようと思って、visudoして以下の行を追加しました。

```lang:visudo
someone  ALL=(root)      NOPASSWD:/usr/bin/systemctl restart postfix.service
```
しかし、上手くいきません。。。

```lang:shell
$ sudo -u someone systemctl restart postfix.service
```
で、こんなエラーが出ます。

```lang:/var/log/message
Sep 29 12:06:08 web01 dbus-daemon: dbus[599]: [system] Rejected send message, 2 matched rules; type="method_call", sender=":1.55036" (uid=997 pid=10229 comm="/usr/bin/systemctl restart postfix.service ") interface="org.freedesktop.systemd1.
Manager" member="RestartUnit" error name="(unset)" requested_reply="0" destination="org.freedesktop.systemd1" (uid=0 pid=1 comm="/usr/lib/systemd/systemd --switched-root --system ")
Sep 29 12:06:08 web01 dbus[599]: [system] Rejected send message, 2 matched rules; type="method_call", sender=":1.55036" (uid=997 pid=10229 comm="/usr/bin/systemctl restart postfix.service ") interface="org.freedesktop.systemd1.Manager" memb
er="RestartUnit" error name="(unset)" requested_reply="0" destination="org.freedesktop.systemd1" (uid=0 pid=1 comm="/usr/lib/systemd/systemd --switched-root --system ")

```
あれこれ visudo してみましたが、どうもそこじゃなさそう。
以下のページを発見

how to allow vncserver restart ??
http://permalink.gmane.org/gmane.comp.freedesktop.dbus/15722

これをみると、system bus(dbus) のセキュリティポリシーにマッチしてないのでエラーがでるそうだ。

/etc/dbus-1/system.d/org.freedesktop.systemd1.conf
を見てみると、

```lang:/etc/dbus-1/system.d/org.freedesktop.systemd1.conf
        <policy context="default">
                <deny send_destination="org.freedesktop.systemd1"/>
```
以下の項目には確かに、
>Get
>GetAll
>GetUnit
>GetUnitByPID
>LoadUnit
>GetJob
>ListUnits
>ListUnitFiles
>GetUnitFileState
>ListJobs
>Subscribe
>Unsubscribe
>Dump
>GetDefaultTarget

はあるけど、StartUnit,RestartUnit,StopUnitはなかった。
restartだけさせたいので以下を追加(自動的に再読み込みされます)

```lang:/etc/dbus-1/system.d/org.freedesktop.systemd1.conf
                <allow send_destination="org.freedesktop.systemd1"
                       send_interface="org.freedesktop.systemd1.Manager"
                       send_member="RestartUnit"/>
```

再起動できるようになりました。

```lang:/var/log/message
Sep 29 12:43:13 web01 dbus-daemon: dbus[599]: [system] Reloaded configuration
Sep 29 12:43:13 web01 dbus[599]: [system] Reloaded configuration
Sep 29 12:43:25 web01 systemd: Starting Postfix Mail Transport Agent...
Sep 29 12:43:26 web01 systemd: Started Postfix Mail Transport Agent.
```
Rails 4.2以降: Rails+Unicorn で、publicディレクトリの中身が404になる場合の解決策 

## 状況

- public 以下すべてが 404 状態で、cssもjavascriptもfaviconも無効の場合。
- public 以下に直接ファイルを置いても、ブラウザからアクセスできない場合。

## 設定変更

Railsの設定ファイルを変更する。(Rails 4.2.3)

```rb:config/environments/production.rb
- config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present?
+ config.serve_static_files = true
```

(もともとの設定では、環境変数によって動作が変わるようになっている)

その後、unicorn を再起動しよう。

---

[Rails4.1 以前では設定値が違う](http://qiita.com/ShotaKameyama/items/85d71cb1429d119c6f0b)ようだ。(Rails 4.1.0)

```rb:config/environments/production.rb
- config.serve_static_assets = false
+ config.serve_static_assets = true
```

---

次の記事を参考にした。 
[Rails(Apache+Unicorn)で、public以下のディレクトリの中身が404になる場合の解決策](http://qiita.com/y_minowa/items/5954907bb30c2ecb43f5)

---

unicorn の設定を変えずに、ウェブサーバーに任せることも出来る。
nginx の場合はこんな感じで `location ~ ^/assets/` を書く。

```:/etc/nginx/conf.d/example.conf
server {
  listen          80;
  server_name     xxx.xxx.xxx.xxx;
  server_name     example.com;
  root /path/to/public;

  location ~ ^/assets/ {
    root   /path/to/public;
  }
}
```



<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ


# メンター受付


https://menta.work/user/5694

<!-- Update From Qiita API -->
centos6.xでnodejs4.xを利用する


# 1.問題点

先に問題点を上げておく

* centosの標準のg++のバージョンが古いのでコンパイルできない(gcc4.8以降必須)
* gcc4.8でコンパイルして作ったrpmをgcc4.8を入れていないマシンで動かすことはできる
* gcc4.8がインストールされていない環境ではnpmでモジュールをビルドできないので動かない可能性がある
* もうgccが古いのでcentos7に移行する選択肢も考えよう

# 2.リポジトリからyumでインストールする場合

## nodesourceのリポジトリからインストールする

```
curl -sL https://rpm.nodesource.com/setup_4.x | bash -
yum install -y nodejs gcc-c++ make
```

後述するnpmで問題がでるのでgccの新しいバージョンをインストールする

```
yum install -y wget
wget http://people.centos.org/tru/devtools-2/devtools-2.repo -O /etc/yum.repos.d/devtools-2.repo
yum install -y devtoolset-2-gcc devtoolset-2-gcc-c++ devtoolset-2-binutils
```

# 3.自分でrpmをビルドする場合

## ビルド環境をインストールする

### gcc4.8(devtoolsets-2)をインストール

```
curl http://people.centos.org/tru/devtools-2/devtools-2.repo > /etc/yum.repos.d/devtools-2.repo
yum install -y devtoolset-2-gcc devtoolset-2-gcc-c++ devtoolset-2-binutils
```

### ビルドに必要なツールをインストールする

```
yum install -y centos-release-SCL
yum install -y python27
yum install -y yum-utils rpmdevtools make git
```


## rpmを作成する

kazuhisyaさんがgithubで公開しているrpm作成ツールを使うのが簡単。

```
git clone -b LTS https://github.com/kazuhisya/nodejs-rpm.git
cd nodejs-rpm
yum-builddep ./nodejs.spec
scl enable python27 devtoolset-2 'make rpm'
```

※ビルドに時間が相当かかります

## rpmのインストール

```
cd ./dist/RPMS/x86_64/
yum install -y nodejs-4.1.2-1.el6.x86_64.rpm nodejs-npm-4.1.2-1.el6.x86_64.rpm
```

# 4.npmを使う場合の注意点

以下のようにインストール指定する

```
scl enable devtoolset-2 "npm install bufferutil"
```

指定しない場合のエラー

```
../src/bufferutil.cc:114: error: variable or field ‘init’ declared void
../src/bufferutil.cc:114: error: ‘Handle’ was not declared in this scope
../src/bufferutil.cc:114: error: expected primary-expression before ‘>’ token
../src/bufferutil.cc:114: error: ‘target’ was not declared in this scope
../src/bufferutil.cc:120: error: ‘init’ was not declared in this scope
../src/bufferutil.cc:120: error: too many initializers for ‘node::node_module’
In file included from ../src/bufferutil.cc:16:
../node_modules/nan/nan.h: In function ‘void Nan::SetMethod(const T&, const char*, void (*)(const Nan::FunctionCallbackInfo<v8::Value>&)) [with T = v8::Local<v8::FunctionTemplate>]’:
../src/bufferutil.cc:30:   instantiated from here
../node_modules/nan/nan.h:1829: error: ‘GetFunction’ was not declared in this scope
make: *** [Release/obj.target/bufferutil/src/bufferutil.o] エラー 1
make: ディレクトリ `/root/node_modules/bufferutil/build' から出ます
```
EC2からDockerやSSHのネットワーク接続がハングアップする場合はジャンボフレームを疑ってみる

EC2上で一部のインスタンスからdocker pullやsshをすると永久にレスポンスが帰ってこなくなるという現象に遭遇しました。
具体的な原因はわかっていないのですが、IPのジャンボフレームを無効にしたところ解決しました。
もし似た問題が起きたら試してみる価値はあると思います。

ネットワークのMTUが9001となっている場合はジャンボフレームが有効の状態です。
MTUを確認しジャンボフレームが有効である場合、MTUを1500にしてジャンボフレームを無効にします。

###MTUを確認する
```
ip link show eth0
```

###ジャンボフレームを無効にする
```
sudo ip link set dev eth0 mtu 1500
```

###参考
RedShiftのドキュメントですが、コマンドなどはここから拝借しました
http://docs.aws.amazon.com/ja_jp/redshift/latest/mgmt/connecting-drop-issues.html
Symfony2->symblog作成時に発生したエラーとその対処方法

## まえおき
[symblog](http://symblog.ganchiku.com/)は今回で3回目の作成ですが、
はじめてのエラーに遭遇したので共有まで。エラー発生要因等ははっきりせず
「とりあえず元に戻った...」という場当たり的な対応なので、その点ご了承ください。

## 環境
- VirtualBox
- CentOS7
- Symfony2.7
- PHP5.4.16

## 発生したタイミングとその事象
これまでブラウザで正常に閲覧できていたのが突然エラーに。

### エラーその1
#### エラーログ：
[Tue Sep 29 10:51:06.484138 2015] [:error] [pid 2200] [client 192.168.56.1:57311] PHP Warning:  require_once(/path/to/symblog/vendor/composer/autoload_real.php): failed to open stream: No such file or directory in / path/to/symblog/vendor/autoload.php on line 5, referer: http://000.000.000.00/symblog/web/app_dev.php

#### 推察
vendor/のアップデートで何かミスった?
前日の作業でいつも通りcomposerでアップデートとかはしたけど
気づかぬうちに何かやらかしていたのだろうか...

#### 対処したこと
1. vendor/を全削除
2. composerアップデート

```
実行コマンド
(symblogのプロジェクトルートで)
$ rm -rf vendor/*
$ php composer.phar update
```

### エラーその2
#### フロントにエラー表示
Oops! An Error Occurred
The server returned a "404 Not Found".
Something is broken. Please let us know what you were doing when this error occurred. We will fix it as soon as possible. Sorry for any inconvenience caused. 

#### 推察
こちらはvendorを全てインストールし直したことが関係しているのでしょうか?

#### 対処したこと
1. web/config.php のコメントアウトが外れていたので、改めてコメントアウト
2. web/app_dev.php ファイルが消えていたのでローカルのバックアップファイルをアップロード

```php:web/config.php
...

/*
if (isset($_SERVER['HTTP_CLIENT_IP'])
    || isset($_SERVER['HTTP_X_FORWARDED_FOR'])
    || !(in_array(@$_SERVER['REMOTE_ADDR'], array('127.0.0.1', 'fe80::1', '::1')) || php_sapi_name() === 'cli-server')
) {
    header('HTTP/1.0 403 Forbidden');
    exit('You are not allowed to access this file. Check '.basename(__FILE__).' for more information.');
}
*/

...
```

以上、フロント側でサイトが閲覧できるようになり、正常に戻りました。
なんだったんだろう...。
HTTPクライアントライブラリ Faradayを使ってみよう

# Faradayのインストール
<pre>
$gem install faraday
</pre>

#サンプル
```ruby:http_clinet.rb
reqiure 'faraday'

connection = Faraday::Connection.new(:url => 'http://localhost:3000') do | builder |
  # リクエストパラメータをURLエンコードする
  builder.use Faraday::Request::UrlEncoded
  # アダプターにNetHttpを使用する
  builder.use Faraday::Adapter::NetHttp
end

# GET http://localhost:3000/api/foo を送信
response = connection.get('/api/foo')

# PUT http://localhost:3000/api/bar を送信
# response = connection.put('/api/bar', {:bar => "barbar"})

# POST http://localhost:3000/api/baz を送信
# response = connection.post('/api/baz', {:baz => "bazbaz"})

# DELETE http://localhost:3000/api/qux を送信
# response = connection.delete('/api/qux')

p response

```
Firefoxでcodicが表示できなかった問題の解決

# <i class="fa fa-check-circle-o"></i> 結論

[codic]は**google-analytics.com**を受け入れないと表示されない。

# <i class="fa fa-cubes"></i> 問題現象
[codic - デベロッパーのためのネーミング辞書]
が、画面上部のローディング進捗バーがいっぱいになっても表示されない。
具体的な時期は[codic]が新しく(v3)なってから。

![codic.jp_2015-09-29_11-06-32.png](https://qiita-image-store.s3.amazonaws.com/0/62354/5da3b297-69f4-9d72-5685-85867d1dfb88.png)

白色が同化してると思うがこんな画面で止まる

# <i class="fa fa-cogs"></i> 動作環境・検証

## 閲覧不可

* Firefox41
  * 通信に影響しそうなアドオン
     * Disconnect
     * uBlock Origin(μ？) 1.1.1

* 上記Firefoxの表記外を含めたアドオンすべてOFF状態

## 閲覧可能

* 上記Firefoxのセーフモード
* 同PCのChrome,IE
* 別PCのFirefox


# <i class="fa fa-list"></i> 検証過程

無駄な過程も含みますが、解決に至った調査経緯

## セーフモードでの起動

アドオンが原因と見込んでセーフモードで起動すると、正常に表示された。

## アドオンの停止

一つ一つアドオンを停止していったが、すべて停止しても変化が見られなかった。
∴アドオンが原因じゃない？
アドオンをすべてONに戻して調査続行

## コンソールの差異調査

開発者ツールのコンソール画面を確認し、何かエラーが出ていないか調査
セーフモードでは出なかった表示として以下があった

>追跡からの保護機能が有効なため、"https://www.google-analytics.com/analytics.js?buster=20150915" のリソースがブロックされました。

## uBlock Originのブロックを解除

[uBlock Origin - Firefox更新情報 Wiki*]
を元に、上級者モードでブロックしたリソースを確認

![codic_ublock.png](https://qiita-image-store.s3.amazonaws.com/0/62354/326e4229-5fcf-0736-aeda-7a8548c575d6.png)

[codic]では**google-analytics.com**を許可するように設定

![codic_ublock_2.png](https://qiita-image-store.s3.amazonaws.com/0/62354/0931ad5f-1ebb-8ed2-89c6-96be523d20ca.png)

**が、まだ表示されない。**

## 保護機能調査

アドオンでのブロックは解除したが、Firefoxのデフォルト機能でまだ防がれているのではないかと仮定。
[Firefox のトラッキング保護機能 | Firefox ヘルプ]
を確認し、

>![2015-01-27-11-49-50-b3cd09.png](https://qiita-image-store.s3.amazonaws.com/0/62354/d26b581a-96f3-e83a-baed-f16f58750647.png)

盾アイコンから保護を解除すればいいと理解。

![codic_url.png](https://qiita-image-store.s3.amazonaws.com/0/62354/63f8c227-a795-a0fb-9ce5-ab1b211e31c3.png)

盾アイコンないんですけど……

特に資料が見つかったわけではないですが、他のページのURLなどを俯瞰したりした結果、
**uBlock Origin有効時かつ、https通信の場合は盾アイコンが出ない**
と仮定しました。

そこで、uBlock originを一時的にOFFにして

![codic_ublock_offpng.png](https://qiita-image-store.s3.amazonaws.com/0/62354/8cb3f3f5-9aef-738b-b2a7-7d24bc484528.png)

更新することで盾アイコンを出し

![codic_url2.png](https://qiita-image-store.s3.amazonaws.com/0/62354/04e02734-b3d3-acd5-9c44-34885ac3148f.png)

保護を切ってやれば

![codic_url3.png](https://qiita-image-store.s3.amazonaws.com/0/62354/3ea94020-ec3e-cc1c-a26f-23294e5cc9a2.png)

表示されました！

![codic.jp_2015-09-29_11-15-27.png](https://qiita-image-store.s3.amazonaws.com/0/62354/e3084c7a-17b4-049c-e161-6f047071e64a.png)

後はuBlock Originを有効にしても、uBlock Origin、Firefox両方で受け入れているため、以後も表示されます。

***

アドオン関係のトラブルにはあまり遭遇したことはなかったのですが、

* セーフモードとアドオン全OFFはまた別ということ
* アドオン有効時に想定外の場所の動作が変わること

で約4ヶ月ほど[codic]が見れない状態でした。
最初の数日は[codic]の不具合を疑い申し訳ないです。
[codic]、前バージョンと比べて凄い進化なので、早くいろいろ触ってみたいです。

~~でもできれば追跡拒否でも表示できて欲しいですで…~~

[codic]:http://codic.jp/
[codic - デベロッパーのためのネーミング辞書]:http://codic.jp/
[Firefox のトラッキング保護機能 | Firefox ヘルプ]:https://support.mozilla.org/ja/kb/tracking-protection-firefox?as=u&utm_source=inproduct
[uBlock Origin - Firefox更新情報 Wiki*]:http://wikiwiki.jp/firefox/?Ext%2Fview%2FuBlock%20Origin
リダイレクト先にDELETEではなくGETでアクセスしたい

updateやdestroyした後、特定のページにリダイレクトしたい。

```
# PATCH/PUT /samples/1
def update
  @sample.update(sample_params)
  redirect_to root_path
end

# DELETE /samples/1
def destroy
  @sample.destroy
  redirect_to root_path
end
```

この形ではupdate後はリダイレクト先にGETメソッドでアクセスするが、
destroy後はリダイレクト先にもDELETEメソッドでアクセスしてしまう。

どうやらステータスコードを設定すればいいらしい。

```
# DELETE /samples/1
def destroy
  @sample.destroy
  redirect_to root_path, :status => :see_other
end
```

GETメソッドでのアクセスを確認できた。
Node.js / npmをインストールする（for Windows）

**1.インストーラーのダウンロード**
下記サイトからインストーラーをダウンロードします。
http://nodejs.org/

Download > Windows Installer をクリックするとカレントバージョンの自身のPCに合わせたインストーラーがダウンロードされます。
明示的に、32bit版、64bit版、バイナリ版など指定したい場合は、それぞれの項目をクリックするとダウンロードが開始します。
![031.png](https://qiita-image-store.s3.amazonaws.com/0/81226/f4d3989f-b714-e58e-513f-0e8fbdfbcfe8.png)

**2.インストール**
実行します。
![image](https://qiita-image-store.s3.amazonaws.com/0/81226/d30d1e36-0b62-0aa5-70c7-f98ace44e332.png)

Nextをクリック。
![image](https://qiita-image-store.s3.amazonaws.com/0/81226/8e5b3a94-3614-a839-d9b8-ae18b91d2ad2.png)

ライセンス規約へ同意しNextをクリック。
![image](https://qiita-image-store.s3.amazonaws.com/0/81226/1687a4a7-dd8f-ea82-715b-d2eee263f7d0.png)

インストールフォルダを選択しNextをクリック。（インストール先は任意の場所でOKです）
![image](https://qiita-image-store.s3.amazonaws.com/0/81226/3f926063-c284-b628-062c-76f73eb3064f.png)

インストールするコンポーネントを選択しNextをクリック。基本デフォルトでOKです。
![image](https://qiita-image-store.s3.amazonaws.com/0/81226/3d6bccc4-19f4-8923-3db4-152005748de8.png)

Installをクリックでインストールが開始します。
![image](https://qiita-image-store.s3.amazonaws.com/0/81226/8dea0118-e75a-ded0-7291-a23b8c9d03be.png)

![image](https://qiita-image-store.s3.amazonaws.com/0/81226/79ae1d54-8d39-dd78-1641-340c9a634c2b.png)

特に問題がなければインストールが完了します。Finishをクリック。
![image](https://qiita-image-store.s3.amazonaws.com/0/81226/7dd648cf-972a-caa6-3405-9ebcedc3bf87.png)

コマンドプロンプトから下記のコマンドを実行します。
`node --version`

バージョンが表示されればインストールは成功です。
![image](https://qiita-image-store.s3.amazonaws.com/0/81226/df7603c8-078d-197e-17a8-d84c52c935c9.png)

もうひとつ、npmも同時にインストールされているはずなのでこちらもチェックします。
コマンドプロンプトから下記のコマンドを実行します。
`npm --version`

こちらも、バージョンが表示されればインストールは成功です。
![image](https://qiita-image-store.s3.amazonaws.com/0/81226/84d3dccc-f543-817e-2f9e-230f3100ad44.png)
シェルスクリプトのテストコマンドの結果値の取得


比較を行うなど便利なテストコマンド（`test`もしくは`[`）ですが、返却値を取得しようとして少しはまりました。
`if`で使うときには考えてなかったことなのでメモしておきます。

```bash
export HOGE=`[ $FUGA == $BUZZ ]`
echo $HOGE
#何も出てこない！
```

テストコマンドは返却値を返すわけではなく、終了ステータスで結果を表していました。
なので以下のようにすれば取れました。

```bash
export HOGE=`[ $FUGA == $BUZZ ]; echo $?`
echo $HOGE
#0もしくは1！
```

（`$?`は直前のコマンドの終了ステータスが入ってます。）

とりあえずは取れましたが、もう少しいい方法があるような気が…
Pythonをインストールする（for Windows）

**1.インストーラーのダウンロード**
下記サイトへアクセスし、インストーラーをダウンロードする。
https://www.python.org/

Downloads > Windows > Python3.x.xを選択。（この時点での最新は3.5.0）
![021.png](https://qiita-image-store.s3.amazonaws.com/0/81226/1615ba53-29d7-1713-2160-21d83713491e.png)

**2.インストール**
実行します。
![image](https://qiita-image-store.s3.amazonaws.com/0/81226/1058dd7c-01f1-d051-438c-a53fe11006d6.png)

これからインストールするPythonを環境変数に追加するため「Add Python3.5 to PATH」にチェックを入れ、「Install Now」をクリック。
![022.png](https://qiita-image-store.s3.amazonaws.com/0/81226/5e16f850-7c27-2ef5-3d07-836c5db9b6d7.png)

インストールが開始します。
![image](https://qiita-image-store.s3.amazonaws.com/0/81226/36807d05-5432-ba7d-6345-b30fa5c0eea9.png)

何も問題がなければインストールが完了します。Closeをクリック。
![image](https://qiita-image-store.s3.amazonaws.com/0/81226/38ca9c65-382c-f6e0-74af-1ddf81ff1064.png)

下記のコマンドを実行します。
`python --version`

バージョンが表示されればインストールは成功です。
![image](https://qiita-image-store.s3.amazonaws.com/0/81226/63ada30f-6960-fc0c-6f12-b0159a62ce27.png)
cx_freeze or PyInstaller ?

#cx_freezeまたはPyInstallerでpython programを1ディレクトリにまとめる。

##はじめに
cx_freezeや、PyInstallerは、pythonの実行環境を1つのディレクトリにまとめ、別環境への移動、実行環境の固定を容易にするツールです。
Windowsでは同様のツールとしてpy2exeが有名ですが、linuxではcx_freeze,PyInstallerが使用できます。ここではその2つでmatplotlibを使ったサンプルプログラムを変換して、比較をおこないました。

##sample program

0から99までの整数を生成しグラフを書く


```py:mat.py
import matplotlib.pyplot as plt
import numpy as np

a=np.arange(100)
plt.plot(a)
plt.show()
```

`$ python mat.py` の結果は
![gp.png](https://qiita-image-store.s3.amazonaws.com/0/23449/bad23d59-0420-1c1a-827c-1fbbf7f9b442.png)
のようなインタラクティブなグラフです。

## cx_freeze
このmat.pyを

```bash
$ cxfreeze --version
cxfreeze 4.3.4
Copyright (c) 2007-2013 Anthony Tuininga. All rights reserved.
Copyright (c) 2001-2006 Computronix Corporation. All rights reserved.

$ cxfreeze-quickstart 
Project name: mat
Version [1.0]: 
Description: 
Python file to make executable from: mat.py
Executable file name [mat]: mat
(C)onsole application, (G)UI application, or (S)ervice [C]: C
Save setup script to [setup.py]: 
Overwrite setup.py [n]? y

Setup script written to setup.py; run it as:
    python setup.py build
Run this now [n]? y
```
その後たくさんのメッセージが表示されて成功したかのように見えますが、いざ実行すると

```bash
$ ./build/exe.linux-x86_64-2.7/mat
....
ImportError: No module named backend_qt4agg
```
と不足するモジュールが指摘されます。
そこでcxfreeze-quickstartが生成した `setup.py`の

```py
buildOptions = dict(packages = [], excludes = [])
```
部分に includesの部分を追加します。

```py
buildOptions = dict(packages = [], excludes = [], 
                    includes=["matplotlib.backends.backend_qt4agg"])
```
`$python setup.py build`を実行すると`./build/exe.linux-x86_64-2.7/mat` は今度は実行できようになりました。

## PyInstaller
pyinstaller （ v.2.1.1 dev) の場合はもっと簡単です。 `$ pyinstaller mat.py`で `./dist/mat/mat`が生成され、これは問題なく動作しました。

## 比較
それならば、面倒の無いpyinstallerの方がベターかといえばそうでもないようです。両者の比較をすると

| tool | コンパイル時間 |  ディレクトリサイズ | 実行時間 | 
|:----------:|:------------:|:------------:|:------:|
| cx_freeze      |        8s |     71M     | 1.8s |
| pyinstaller     |      50s |  206M   | 1.9s |

ちなみに `$ python mat.py`を実行したときの実行時間は1.5secでした。

またpyinstallerではこのテストプログラムでは問題なくコンパイル/実行できたものの他のモジュールをimportした場合100%成功するとは限らないことがわかりました。もしimportに失敗じた場合には、メインプログラムでimportすると良いことがわかりましたが、メインプログラムにそこでは使わないモジュールをimportしておくのも不自然ですし、うっかり消去してバグの元になる可能性もあります。

## 結論 （一応）
cx_freezeは生成されるディレクトリのサイズ、生成速度、実行時間から見てpyinstallerより優れていると思われます。また不足するモジュールの追加などの管理機能もsetup.pyに一元化されておりこれもpyinstallerと比較して優れていると言えます。
DjangoのModelFormでForeignKeyフィールド未選択の見た目を変える方法

ModelFormを継承したフォームを実装する際に、ForeignKeyのフィールドにwidgetとして`forms.RadioSelect`を適用したところ、下図のように未選択のときの項目が「---------」と表示されており、UI的にちょっと変だなと思ったので、それを変更したときの方法です。

※widgetを適用せず、デフォルトの`forms.Select`の場合は「---------」でも普通そうですけど。

## デフォルトの図
![デフォルト](https://qiita-image-store.s3.amazonaws.com/0/27019/a2568b85-64a3-adcc-6ca2-0629adcc1865.png)

## 変更後の図
![変更後](https://qiita-image-store.s3.amazonaws.com/0/27019/6015b8e3-d66c-3872-673f-08583b989922.png)

## コード

### models.py

```py
# -*-coding: utf-8-*-                                                                                                                                           
from django.db import models

class Author(models.Model):
    name = models.CharField(max_length=30)

    def __unicode__(self):
        return self.name

class Article(models.Model):
    title = models.CharField(max_length=100)
    author = models.ForeignKey(Author)
```

### forms.py

```py
# -*-coding: utf-8-*-                                                                                                                                           
from django import forms
from django.forms import ModelForm
from .models import Article, Author

class ArticleForm(ModelForm):
    class Meta:
        model = Article
        fields = '__all__'

    author = forms.ModelChoiceField(
        queryset=Author.objects.all(),
        widget=forms.RadioSelect,
        empty_label='該当なし'
    )
```

## 説明

`forms.ModelChoiceField`にempty_labelで任意の文字列を渡してやればOKです。

```py
author = forms.ModelChoiceField(
    queryset=Author.objects.all(),
    widget=forms.RadioSelect,
    empty_label='該当なし'
)
```
Keen.io データ送信

keen.ioでのデータ送信
---

<https://keen.io/>

```js

var client = new Keen({
		projectId: 'xxxxxxxx',
		writeKey: 'xxxxxxxxxxxxxxxxxxx',
		protocol: "auto",
		requestType: "xhr"
	});
	
	client.addEvent("purchases", {
		ip_address: "${keen.ip}", // keenが用意したパラメーター
		user_agent: "${keen.user_agent}", // keenが用意したパラメーター
		page_url: "http://my-website.com/cool/link?source=twitter&foo=bar/#title",
		referrer: {url: "https://search-engine.com?search=analytics"},
		page: {url: "http://mysite.com/landing-page"},
		keen: {
			addons: [{ // keenが用意したadd-on 4つ
				name: "keen:ip_to_geo",
				input: {ip: "ip_address"},
				output: "ip_geo_info"
			},
			{
				name: "keen:referrer_parser",
				input: {
					referrer_url: "referrer.url",
					page_url: "page.url"
				},
				output: "referrer.info"
			},
			{
				name: "keen:url_parser",
				input: {url: "page_url"},
				output: "parsed_page_url"
			},
			{
				name: "keen:ua_parser",
				input: {ua_string: "user_agent"},
				output: "parsed_user_agent"
			}]
		},
	});
```
コマンドラインからGitを使う（for Windows）

**1.インストーラーのダウンロード**
下記のサイトから最新版のexeファイルをダウンロードします。
http://git-scm.com/

![001.png](https://qiita-image-store.s3.amazonaws.com/0/81226/b7769f2c-8845-cb02-209f-3c3903fcdae1.png)

![003.png](https://qiita-image-store.s3.amazonaws.com/0/81226/19cc2c3b-3c96-e768-aa29-732abf12e76c.png)

**2.インストール**
実行します。
![image](https://qiita-image-store.s3.amazonaws.com/0/81226/01b54c8c-f0c3-9ed5-eec6-a0710a4ca893.png)

Nextをクリック。
![image](https://qiita-image-store.s3.amazonaws.com/0/81226/2ac5c048-d908-c865-a188-7a2d76ace843.png)

Nextをクリック。
![image](https://qiita-image-store.s3.amazonaws.com/0/81226/15797b83-7d44-4046-c4ae-c580d014c372.png)

インストール先を選択しNextをクリック。
![image](https://qiita-image-store.s3.amazonaws.com/0/81226/159ae9d3-1543-033c-5745-3efde3c96a05.png)

デフォルトでOKですが、クイック起動バー、デスクトップへショートカットを作成したい場合は、「Additional icons」のそれぞれ又は全てにチェックを入れます。Nextをクリック。
![image](https://qiita-image-store.s3.amazonaws.com/0/81226/8af518b9-b872-8e04-ebb4-a9a437f1a4e6.png)

スタートメニューのフォルダー名を指定しNextをクリック。デフォルトでOKですが、変更したい場合は任意のフォルダ名を指定、作りたくない場合は「Don't create a Start Menu folder」へチェックします。
![image](https://qiita-image-store.s3.amazonaws.com/0/81226/ccc2724d-6d8d-e202-f79c-bc9656655187.png)

コマンドラインから利用したいので、「Use Git from the Windows Command Prompt」を選択し、Nextをクリック。
![image](https://qiita-image-store.s3.amazonaws.com/0/81226/fd6f9e8c-3d8f-00df-769e-b12120d31c59.png)

チェックアウト／コミット時のファイルの改行コードを、Windows形式、Unix形式でどのような組み合わせにするかを選択します。お好きな組み合わせを選択してOKです。今回は「チェックアウト：Win形式／コミット：Unix形式」を選択します。Nextをクリック。
![image](https://qiita-image-store.s3.amazonaws.com/0/81226/2e19cbfc-3aed-1d62-b7b7-99f08f9343f2.png)

ターミナルに何を利用するかを選択します。こちらもお好きなものでOKです。今回はWindowsのデフォルトコンソール（コマンドプロンプト）を選択します。Nextをクリック。
![image](https://qiita-image-store.s3.amazonaws.com/0/81226/4386ff67-a829-29bb-c99e-643ecdfd51d9.png)

ファイルシステムのキャッシュを利用する場合はチェックを入れます。今回は利用しません。Nextをクリック。
![image](https://qiita-image-store.s3.amazonaws.com/0/81226/3cefe420-5ced-ffdf-5fee-5c6d3a817ca3.png)

インストールが開始します。
![image](https://qiita-image-store.s3.amazonaws.com/0/81226/bee6c949-0279-63c8-23ce-1b454d6eccef.png)

インストールが問題なく完了すれば、図のような画面になります。Finishをクリック。
![image](https://qiita-image-store.s3.amazonaws.com/0/81226/15cd351e-096a-d1c4-0c62-8c32967ff27e.png)

コマンドプロンプトを起動し下記のコマンドを実行します。
`git --version`

バージョン表示がされればインストールが成功です。これでコマンドラインからGitを利用できるようになりました。
![image](https://qiita-image-store.s3.amazonaws.com/0/81226/b0d1ffbb-0cf0-f4ed-f0ac-8d385a26e4b6.png)
Dockerコンテナ環境を使うことでTravis CIのビルドを爆速化する


## ドキュメント

http://docs.travis-ci.com/user/migrating-from-legacy/?utm_source=legacy-notice&utm_medium=banner&utm_campaign=legacy-upgrade

## やること

`.travis.yml`に以下を足すだけです。

```.travis.yml
sudo: false
```

制約は以下２つのようです。

* Using sudo isn’t possible (right now)
* Databases don’t run off a memory disk

## 感想

Androidプロジェクトのビルドを行っていたのですが、体感的には５倍くらい早くなった気がします。すごい！
Mac/PostgreSQL gemのインストール

PostgreSQLをdmgでインストールした時に、gemでPostgreSQLのライブラリを
インストーしようと思ったら、以下のエラーがでた。

```
>gem install pg
No pg_config... trying anyway. If building fails, please try again with
 --with-pg-config=/path/to/pg_config
```

pg_configが見つからないらしい。
「--with-pg-config=/path/to/pg_config」とあるので、試してみる。

```
>gem install pg --with-pg-config=/Library/PostgreSQL/9.3/bin/pg_config
ERROR:  While executing gem ... (OptionParser::InvalidOption)
    invalid option: --with-pg-config=/Library/PostgreSQL/9.3/bin/pg_config
```

今度は、InvalidOptionとなる。
色々と調べた結果sourceからビルドした場合は、上記で上手くいくらしい。

けど、私は、dmgでインストールしたんです。
で、最終的な結果は、以下でいけました。

```
gem install pg -- --with-pg-config=/Library/PostgreSQL/9.3/bin/pg_config
```
MySQL InnoDBでのロック競合解析


#前提
MySQL5.1の場合はInnoDB pluginを有効にする必要があります。

#解析方法
information_schemaデータベースにある以下の3テーブルを利用して解析を行います。

1. INNODB_TRX<br>
現在実行中のトランザクションを表示するテーブル
2. INNODB_LOCKS<br>
ロック競合を起こしているトランザクションの情報を表示するテーブル
3. INNODB_LOCK_WAITS<br>
どのトランザクションがどのトランザクションを待たせているのかを出力するテーブル

**ロック競合を表示するSQL**

```
select t_b.trx_mysql_thread_id blocking_id,
       t_w.trx_mysql_thread_id requesting_id,
       p_b.HOST blocking_host,
       p_w.HOST requesting_host,
       l.lock_table lock_table,
       l.lock_index lock_index,
       l.lock_mode lock_mode,
       p_w.TIME seconds,
       p_b.INFO blocking_info,
       p_w.INFO requesting_info
from information_schema.INNODB_LOCK_WAITS w,
     information_schema.INNODB_LOCKS l,
     information_schema.INNODB_TRX t_b,
     information_schema.INNODB_TRX t_w,
     information_schema.PROCESSLIST p_b,
     information_schema.PROCESSLIST p_w
where w.blocking_lock_id = l.lock_id
  and w.blocking_trx_id = t_b.trx_id
  and w.requesting_trx_id = t_w.trx_id
  and t_b.trx_mysql_thread_id = p_b.ID
  and t_w.trx_mysql_thread_id = p_w.ID
order by requesting_id,
         blocking_id
\G
```

**実行結果**

```
*************************** 1. row ***************************
    blocking_id: 15
  requesting_id: 24
  blocking_host: localhost:45171
requesting_host: localhost:45180
     lock_table: `user`.`users`
     lock_index: `PRIMARY`
      lock_mode: X
        seconds: 3
  blocking_info: NULL
requesting_info: SELECT * FROM `user`.`users` WHERE id = 1 for update
1 rows in set (0.01 sec)
```

- 15のスレッドが24のスレッドを3秒待たせている。
- 15のスレッドが`user`.`users`テーブルの主キーを排他ロック（X）している。
- 15のスレッドはアイドル状態である。
- 24のスレッドはid = 1をレコードを参照（for update）しようとしている。

といった情報が読み取れます。
今どきのやり方でWebサービスを作ろう。「プロのコミュニケーション」について感想雑記

# なんぞコレ
http://forkwell.connpass.com/event/20332/
↑これの Idesaku さんの発表についての感想と雑感と気持ちとまとめ

> 内容が正しいかどうかは若干不安なので話半分で(何故ならメモは半分くらいしかなかったので)

# 「今どきのやり方でWebサービスを作ろう」
→今時のやり方→チーム開発→チーム開発に絶対必要なこと→コミュニケーション
→ただのコミュニケーションではなくて、プロとしてのコミュニケーション。

## プロとしてのコミュニケーション
最もダメなやつ 

#### **口頭では言ったけど……**
これを如何になくすかを考えたいという話。

既に時代はそれを迎えるのに準備が整ったといえる。

1. ツール
2. 作法
3. リモートワーク

## 1. ツール
メーリングリストはSlack(Idobata, ...) になり、メンションをすることで「自分が読むべきモノ」をハッキリと認識できる。
ドキュメントを置く為の場所として、Qiitaやesaが出てきて、変更差分も見れる、リビジョンを戻ることが出来る、 esa に至っては3wayMerge すらすることができる。
Githubによって「PRによる開発」が可能になった。Diffも見やすくコミットも見やすく、しかもディスクリプションを書いて、非同期に背景などを伝えつつコードレビューをすることが出来る。

しかも、それぞれの連携が可能になった。
上記は全てWebサービスであり、URLというリソースへのアクセスポイントが定義されているから、それを別のサービスに貼ったりすれば、どのサービスにいても「大本の情報」に飛ぶことが出来る。

こういったツールを使うことで、「口頭では言ったけど」を排除し、可能な限り全て何かしらの形で残しておく事が出来る様になると良いよね。
それこそ、PRにも「どうしてこうしたのか」といった背景が共有されなければ、後で見返した時にこまるのは自分自身。

## 2. 作法
オンライン上でのコミュニケーションにおいては、作法が大事。

#### **Emojiは使わなければならない** 
文字列だけのコミュニケーションでは気分を害する事が多いのは既に皆知っている。
しかし、Emojiが一つあるだけで気分を害する確率はぐっと減る。お互いにハッピーになるため、いつでも使えるEmojiを1つ2つ用意しておき、常に発射出来るようにしよう！　もはやそれは今の時代ではしなければならない事と言っても良いだろう。

#### HRT
+ Humility(謙遜)
+ Respect(尊敬)
+ Trust(信頼)

http://www.amazon.co.jp/dp/4873116309
TeamGeek という本に書いてあることらしい。
当たり前のことだけど、当たり前のことを当たり前にやること。
特にGithub時代の今は非同期にコメントやドキュメントに対して指摘をしたりする。その時にはHRTを忘れないようにしよう。

## 3. リモートワーク
`1.` も `2.` も、実は皆 **知っている** 事だし、 **やったほうがいい** と大体みんな思ってる。
**知っていても出来ない** から、みんな辛い思いをしたりする。

出来る様になるために、リモートワークをしてみよう！
隣に同僚が居ないから、説明をするためにドキュメントを丁寧に書く必要があるよね。
PRのディスクリプションを丁寧に書かないと、誰も分かってくれないよね。

「プロのコミュニケーション」を手に入れるための強制ギプスとして、リモートワークをしてみよう。


# 全体の感想
## FAQ
```
Q. 私:      リモートとSkypeで話たりするけど、それはどう思うんでしょうか？
A. Idesaku: どんどん話せばいいと思うんですよ〜　それを「文章化しておく」事ができるならですけどね。でもやっぱ最初は出来ないんで、どうにかする必要はあるんですよ
```

## 感想
純粋にリモートワークで通勤がなくなって幸せな面もあるという話だがけれど、それ以上に、コミュニケーションを上手になるための強制ギプスとしての「リモートワーク」という捉え方が新鮮だった。

確かに現在のチームメンバーのうち、唯一リモートのメンバーは一番コミュニケーションが上手だと思う。
「プロのコミュニケーションを取る必要がある」状態に強引にでも身をおいて、最初は辛いけど頑張って乗り越える事で得られるものも多いのかなと思う。

**リゾート**ワークしよう ！！！！！！！
iOS9で時計がずれる

#該当バージョン
* iOS 9.0beta
* 9.0
* 9.0.1
* 9.1beta 1

10/4追記
どうやら、9.0.2で修正された模様。

#詳細

iOS9系で時計がずれる問題が報告されています。
リストア時点ではズレなし、そこから毎日数秒ずつ時計が進むことが多い様です。
おそらく、iOSのバグだと思われますが、いつ修正が入るかわからないので対応が必要になるケースもあると思います。

タイムスタンプでユーザの不正行為を検証していたりすると問題になる可能性があります。また、ずれが大きい場合にはワンタイムパスワード認証に失敗する可能性が高いです。


#確認方法
下記のページで、サーバ側の時計とクライアントの時計の差を表示できます。
http://www.nict.go.jp/JST/JST5.html
![IMG_3472.PNG](https://qiita-image-store.s3.amazonaws.com/0/33513/e4cd5e27-7105-a30e-c32e-d9c153a46712.png)

また、標準の時計アプリの「世界時計」は秒針まで表示されます。

![IMG_3473.PNG](https://qiita-image-store.s3.amazonaws.com/0/33513/22c21f1c-7416-16fe-f8db-49db62f45b77.png)

#僕の手元で確認できている現象
##ずれはちょっとずつ増えている
3:26 PM - 28 Sep 2015の時点で、1.8秒進んでいた
9:02 PM - 28 Sep 2015の時点で、2.4秒進んでいた
9:15 AM - 29 Sep 2015の時点で、3.8秒進んでいた
1:47 PM - 29 Sep 2015の時点で、4.3秒進んでいた
7:14 AM - 30 Sep 2015の時点で、6.4秒進んでいた

上記のデータポイントから計算すると、2.8秒/日ぐらいのペースでずれが増えています。

9:49 AM - 1 Oct 2015に9.0.2をインストール。ズレなし

9.0.2の修正リストには該当する項目が見当たらず、他のサイトの情報をみても問題は解消していない模様。おそらく、ズレが0に戻っただけで、また毎日ずれていくものと思われます。

と思ったら、10/4の時点でずれなし、9.0.2で修正された模様。

##時刻を一度手動設定しても問題は解決しない
日付と時刻の自動設定をオフにすると手動で時計を設定できます。この状態で、分を修正すると秒は0にリセットされます。

この方法で時計を数分ずらし秒をリセットしてから自動設定をオンにしたところ、時計が自動設定されて同じズレが再現されました。つまり、時刻同期自体は成功しており、なぜかオフセットが発生しているようです。


#ユーザとしての回避策
9.0.2以降にアップデートする
自動設定をオフにして、当面は手動で時計を設定する。


#ネット上で言われていること
Forum上の議論
https://forums.developer.apple.com/thread/16872

* iPhone/iPadの両方で発生する
* ズレは最大数分程度 (2分早いケースが多い模様)
* ズレが日々増える人もいる（早いケースが多い模様）
* Apple Watchの有無にかかわらず発生する
* iOS 9.0beta, 9.0, 9.0.1, 9.0.2 ,9.1betaのすべてで報告あり
* Wifiのみのハードでも発生
* 携帯網をオフにしても発生
* 発生しないケースもある
* 再セットアップ直後はズレがなくなる（その後日々増えて行く）
* 4分45秒早い人もいる！
* 9.0.2で修正されているらしい
* 9.1 Beta 2で修正されているらしい？
[Jquery]Droppableの時、Draggable対象の要素を点滅させる方法

jQueryのドラッグ＆ドロップでドラッグ時にドラッグ対象を点滅させる方法をとりあえず備忘録しました。

```js
// setIntervalの実行ID
var intervalID = null;

$('ドロップ先対象要素').droppable({
  activate: function(event, ui) {
    // 引数uiがドラッグ対象要素になるので、uiに対してアニメーションをする
    intervalID = setInterval(function() {
      ui.draggable.find('td').animate(
        {backgroundColor: '点滅させたい色'}, 
        250,
        null, 
        function(){
          $(this).animate(
            {backgroundColor: '元の色'},
            250
          );
        }
      );
    },
    500);
  },
  deactivate: function(evetnt, ui) {
    clearInterval(intervalID);
  }
});
```
Docker コンテナに入るまでのコマンド, 遭遇したエラー

#Docker start ~ コンテナに入るまで コマンド一覧

###1.docker machine を起動する
　`docker-machine start [docker名]`
　※docker名は、`docker info` を叩いてNameを確認

###2.dockerの環境変数を表示
　`docker-machine env [docker名]`

###3.dockerの環境変数を読み込む
　`eval "$(docker-machine env [docker名])"`　
　または、
　`source ~/.bashrc`

###4.コンテナの中に入る
　`docker exec -it [コンテナ名] bash`



#エラーについて
##"dial unix /var/run/docker.sock: no such file or directory" 
##解決方法1
1.環境変数を確認
　`export`
　これで、DOCKER ~~がなければ、DOCKERの設定が読み込まれていない。

2.環境変数を読み込む
　`eval "$(docker-machine env [docker名])"`　
　または、
　`source ~/.bashrc`

##解決方法2
ターミナルの新しいタブで作業を行う

###原因
docker-machine start をする前、~/.bashrcは読み込まれるが、
環境変数は吐き出されない。
そのため、docker-machine start をする後、
~/.bashrc は、ターミナル起動時(タブを新規に開く)・手動で読み込む必要があった
jQueryのsibilingsの子要素はchildrenで取る

## はじめに

* `JQuery`の`siblings`の子要素の取得時にハマったので同じ問題でハマっている人がいるかもしれないので共有の意味で記事にしたもの。

## コード

```html:index.html
<!DOCTYPE html>
<html lang="ja">
    <head>
        <meta charset="UTF-8">
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
    </head>

    <body>
        <div id="div1">
            <span id="span1">hoge</span>
        </div>
        <div id="div2">
            <span id="span2">hoge</span>
        </div>

        <script type="text/javascript" src="siblings.js"></script>
    </body>
</html>
```

```js:siblings.js
$(function(){
  console.log($('div#div1').siblings('div#div2').html());
  console.log($('div#div1').siblings('div#div2').children('span#span2').html());
  console.log($('div#div1').siblings('div#div2 > span#span2').html());
});
```

* `html`の方は特に何も難しいことはしていなく、`div`の中に`span`が入ったものが2つ並んでいるだけ
* `js`の方は`div1`の兄弟要素である`div2`を取得
* その中の子要素である`span`に関して2通りの取り方を試みている（`children`と`>`）

## 結果

![スクリーンショット 2015-09-29 9.19.33.png](https://qiita-image-store.s3.amazonaws.com/0/67471/498dd851-6478-ffc3-5815-fe03e1ba1ceb.png)

## 考察

焦点となるのは以下の2つの記述

* `$('div#div1').siblings('div#div2').children('span#span2')`
* `$('div#div1').siblings('div#div2 > span#span2')`

一見どちらも「div1の兄弟要素div2の子要素span2」を取得しそうに見えるが、実は下の記述ではしない。
下の記述では「div1の兄弟要素として『div2の子要素span2』」を取得しに行こうとする。
「div2の子要素span2」は「div1の兄弟要素」ではないので取得できない。
という現象が起きている（と思う）

## まとめ

今回たまたま`siblings`でハマったことですが、恐らく`children`や`parent`等でも起きうることだと思います。
`>`と`children`の使い分けに気をつけましょう。
【Laravel5】Storageファサードでお手軽S3アップロード

# はじめに

Laravel5から、ファイルシステムとしてクラウドストレージ(S3 or Rackspace)を簡単に利用できるようになりました。
保存先に依らず同じメソッドでファイルの操作を出来るので、非常に便利ですね。

# 使用方法

まずは、S3を使用するためのパッケージを登録します。

```json:composer.json
  "require": {
	"laravel/framework": "5.0.*",
    "league/flysystem-aws-s3-v2": "~1.0"
  },
```

`$ composer update`

次に、S3の設定を記述します。.envに記述して切り替えられるようにしておくと良いでしょう。

```php:config/filesystems.php
	'disks' => [

		'local' => [
			'driver' => 'local',
			'root'   => storage_path().'/app',
		],

		's3' => [
			'driver' => 's3',
			'key'    => env('S3_ACCESS_KEY'),
			'secret' => env('S3_SECRET_KEY'),
			'region' => env('S3_REGION'),
			'bucket' => env('S3_BUCKET'),
		],
                ・・・
    ],
```
```:.env
S3_ACCESS_KEY=your-key
S3_SECRET_KEY=your-secret
S3_REGION=your-region
S3_BUCKET=your-bucket
```

設定はこれだけです！後はgetなりputなり簡単に出来ます。

```php
$disk = Storage::disk('s3');
// ファイルのアップロード
$disk->put('hoge.jpg', $contents);
// ファイルの取得
$contents = $disk->get('hoge.jpg');
// ファイルのコピー
$disk->copy('hoge.jpg', 'fuga.jpg');
// ファイルの削除
$disk->delete(['hoge.jpg', 'fuga.jpg']);
```

他にも移動やサイズ取得等いろいろ出来ます。詳しくは公式ドキュメントを参照してください。
http://laravel.com/docs/5.0/filesystem

また、league/flysystemではS3とRackspace以外のアダプタも用意されており、ServiceProviderの設定のみで簡単に利用ストレージを拡張できるようです。
https://github.com/GrahamCampbell/Laravel-Flysystem
拡張方法も公式ドキュメントに書かれていますね。
http://laravel.com/docs/5.0/filesystem#custom-filesystems
(Twitter) Bootstrapでセンタリングする方法

**1. 文字センタリング**

```html
<p class="text-center">text-center</p>
```

**2. ブロックセンタリング**

```html
<div class="center-block">
　　<div>block-center</div>
</div>
```

**3. Twitter Bootstrap 2.3.0以降**

```html
<div class="text-center">element-center</div>
```

**4. Twitter Bootstrap 2.3.0以前**

```html
<div class="row" style="text-align: center">element-center</div>
```
Gitにリリースタグを打つRakeタスク

Rakeから「年月日.その日のリリースカウント」なるリリース用のGitタグを打ちます。
Rubyは初めて触るので、もっといい方法があるかも……。

```rb
require "open3"
require "time"

task :add_release_tag do
  day = Time.now.strftime("%Y%m%d")
  ver = 0
  tag = "#{day}.#{ver}"
  while Open3.capture3("git show #{tag}")[2].exitstatus == 0
    ver += 1
    tag = "#{day}.#{ver}"
  end

  `git tag -a #{tag} -m "release tag by rake"`
  `git push #{ENV["REMOTE_REPOGITORY"]} --tags`
end
```

リリース時に行う他のタスクと纏めておくと良い感じ。

```rb
task :release => [:prepare, :deploy, :add_release_tag]
```
[Unity] 特定のオブジェクトだけ重力を変える

特定のオブジェクトのみ**重力を変更したい**と思うことがあります。
兄は普通のジャンプでいいけど、弟はふわふわしたジャンプにしたい時などですね。

重力を変更したいオブジェクトに下記スクリプトを追加して、パラメータlocalGravityに加速度を設定するだけで重力を変更することが可能です。

##スクリプト
```csharp:gravityController.cs
using UnityEngine;
using System.Collections;

public class gravityController : MonoBehaviour {

    public Vector3 localGravity;

    private Rigidbody rb;

    void Start () {
        rb = this.GetComponent<Rigidbody>();
        rb.useGravity = false;
    }

    void FixedUpdate () {
        setLocalGravity ();
    }

    void setLocalGravity(){
        rb.AddForce (localGravity, ForceMode.Acceleration);
    }

}
```
Custom URL Schemeの設定方法


info.plistに以下を設定する

- Information Property List
  - URL types
    - item 0
      + URL identifier <-- アプリケーションのBundle Identifierを指定
      - URL Schemes
        + Item 0 <--- スキーム名を指定

アプリからは以下の方法で呼び出す。

```
let url = NSURL(string: "hogehoge://")
UIApplication.sharedApplication().openURL(url!)

```
iOS罰情報


# UITableView

## UITableViewを単体で使おうとしたときに `EXC_BAD_ACCESS (code=EXC_i386_GPFLT)` で落ちる

* delegate, datasourceのスコープに注意
* プロパティとして保持しとかないとdelegate, datasourceのインスタンスが開放されちゃって変な動きするよ

http://stackoverflow.com/questions/25075646/how-can-i-programmatically-set-datasource-of-uitableview
iPadでBootstrapのnavbarをcollapseさせる

<p>レスポンシブデザインなウェブサイトの場合、スマホだけでなくタブレットに対応させることも多いです。</p>

<p>CSSフレームワークのBootstrapを使って、ナビゲーション（navbar）を導入する場合、すこし細工が必要。Bootstrapのデフォルトだと、iPadでnavbarがcollapseしてくれません。メニュー項目が多くなってくると、collapseしてくれないとレイアウト崩れが起きたりもしますよね。</p>

<p>iPadでBootstrapのnavbarをcollapseさせるには、CSSに下記のコードを追加すればOKです。</p>

```css
/* navbar collapse for iPad (bootstrap) */
@media (max-width: 991px) {
    .navbar-header {
        float: none;
    }
    .navbar-toggle {
        display: block;
    }
    .navbar-collapse {
        border-top: 1px solid transparent;
        box-shadow: inset 0 1px 0 rgba(255,255,255,0.1);
    }
    .navbar-collapse.collapse {
        display: none!important;
    }
    .navbar-nav {
        float: none!important;
        margin: 7.5px -15px;
    }
    .navbar-nav>li {
        float: none;
    }
    .navbar-nav>li>a {
        padding-top: 10px;
        padding-bottom: 10px;
    }
    .navbar-text {
        float: none;
        margin: 15px 0;
    }
    .navbar-collapse.collapse.in {
        display: block!important;
    }
    .collapsing {
        overflow: hidden!important;
    }
}
```
技術英語 > 部分否定 / 全否定 >  No version control systems made him happy.

引用: 冠詞マスター教本 by 石井隆之さん

noを用いた「全否定」と「部分否定」について

> 状況により、全否定と部分否定のどちらにも取れる場合があるので、更に注意しよう。例えば次の文は曖昧である。
> No oysters made me happy.
> 1. どの牡蠣を食べても満足しなかった [全否定]
> 2. 牡蠣がないので嬉しかった [部分否定]

どちらの意味にも取れる文は別の文章に言い換えた方がいいのだろう。

自分が言い換えるとしたら以下のようなものだろうか (間違っているかもしれない)。

- 1. Any oysters did not make me happy.
- 2a. Having had no oysters, I was happy.
- 2b. Since there was no oysters, I was happy.

<hr>
元の文章をコーディングに関連づけるとして以下を英作してみた。

No version control systems made him (Linus Torvalds) happy. So Linus decided to make his own, which was lately named as git.
任意のメーラーでMaildirを見たい場合、自前でdovecot-imapdを立ち上げると便利

## 参考

* [POP・IMAPのMaildirへの対応](http://postfix.robata.org/popimap-set.html)

## インストール

```bash:
apt-get install -y dovecot-imapd
```

## 設定

* ssl = no
* auth_mechanisms = login plain
* disable_plaintext_auth = no
* mail_location = maildir:~/Maildir

あたりが重要。以下ファイルを編集。

* /etc/dovecot/conf.d/10-ssl.conf
* /etc/dovecot/conf.d/10-mail.conf
* /etc/dovecot/conf.d/10-auth.conf


```bash:
$ doveconf -n
auth_mechanisms = login plain
auth_verbose = yes
disable_plaintext_auth = no
mail_location = maildir:~/Maildir
namespace inbox {
  inbox = yes
  location = 
  mailbox Drafts {
    special_use = \Drafts
  }
  mailbox Junk {
    special_use = \Junk
  }
  mailbox Sent {
    special_use = \Sent
  }
  mailbox "Sent Messages" {
    special_use = \Sent
  }
  mailbox Trash {
    special_use = \Trash
  }
  prefix = 
}
passdb {
  driver = pam
}
protocols = " imap"
ssl = no
ssl_cert = </etc/dovecot/dovecot.pem
ssl_key = </etc/dovecot/private/dovecot.pem
userdb {
  driver = passwd
}
```

## dovecot起動、停止

```bash:起動
sudo dovecot
```

```bash:停止
sudo killall dovecot
```

## メーラーの設定

* 接続先サーバを `127.0.0.1`にする。
* SSLなし。imapで143ポートに接続
* SMTP機能は無いです。
Objective-CでのXOR演算による暗号化

　昨今、バイナリファイルを暗号化する要件がありました。今回、簡潔かつ強力なXOR演算による暗号化を選択します。

　まず、NSDataより抽出したバイナリデータを、XOR演算のためにunsinged intにキャストしました。しかし、ARC規約に反するためエラーとなりコンパイルできません。

　そこで、C言語の関数を用いてバイナリデータの抽出しました。この場合、メモリの開放は忘れないでください。

　それでは、一連の処理の流れをソースコードにて提示します。

```objc

NSData* GetXORDecryption(NSString* path)
{
    fpos_t fsize = 0; // encrypted file size(Byte)
    int encmax = 100000; // encrypted length(Byte)
    char pattern = 0b11111111; // encryption pattern(1 Byte)
    
    // open encryted file
    FILE *file = fopen([path UTF8String], "rb");
    if (file == NULL)
    {
        return nil;
    }
    
    // get file size
    fseek(file, 0, SEEK_END);
    fgetpos(file, &fsize);
    fseek(file, 0, SEEK_SET);
    
    // get binary data
    void *data = malloc(fsize);
    fread(data, 1, fsize, file);
    
    fclose(file);
    
    // decrypt binary data (XOR calculation)
    char *ptr = (char *) data;
    
    for (int i=0; i < encmax; i++)
    {
        *ptr ^= pattern;
        ptr++;
    }
    
    // get return data
    NSData *result = [NSData dataWithBytes:data length:fsize];
    
    free(data);
    
    return result;
}
```

Hex Fiendで確認したところ、XOR演算が適用されていることが確認できます。復号化も問題ありません。

## 参照

- [複雑な演算子](http://www9.plala.or.jp/sgwr-t/c/sec14.html) - XOR演算の解説
- [uni開発ブログ](http://www.uni-labo.com/blog/2013/04/01/objective-c%E3%81%A7%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E4%B8%80%E9%83%A8%E5%88%86%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B/) - Objective-Cのサンプルコード