OmniAICreator/Qiita-1.07M huggingface dataset:
IntelliJ IDEAで未実装のtoString()メソッドを追加する

IntelliJ IDEAでtoString()が未実装のクラスに対して、toString()を追加する方法を紹介します。


その前になぜtoString()メソッドを実装した方をいいかというと。例えば、このような実装があった場合、

```java
if (debug.messageEnabled()) {
    debug.message("LoginState : " + loginState);
}
```
toString()が実装されていないと、
> 
LoginState : com.sun.identity.authentication.service.LoginState@3f184740

というように役に立たないログが出力されてしまいます。これでは、デバッグ時に参考にならないので、このクラスのフィールドの情報が出力されるようにtoString()を実装します。しかし、手入力の場合は実装漏れや誤りがあるので、自動生成した方が正確かつ簡単です。

対象のクラスを選択した状態で、Code > Generate をクリックし、その中にあるtoString選択します。
![generateToString.png](https://qiita-image-store.s3.amazonaws.com/0/43869/019b3863-aa79-d462-cc8f-6d5796d35659.png)

不要なフィールドは削除してOKボタンをクリックすると、
![gen2str.png](https://qiita-image-store.s3.amazonaws.com/0/43869/5b464d90-163a-a24b-ba4a-0b6085a20d3b.png)

以下のようなtoString()が追加されます。

```java
    @Override
    public String toString() {
        return "LoginState{" +
                "orgName='" + orgName + '\'' +
                ", receivedCallbackInfo=" + Arrays.toString(receivedCallbackInfo) +
                ", prevCallback=" + Arrays.toString(prevCallback) +
                ", submittedCallbackInfo=" + Arrays.toString(submittedCallbackInfo) +
                ", callbacksPerState=" + callbacksPerState +
    ...
                ", loginStatus=" + loginStatus +
                ", modulesInSession=" + modulesInSession +
                '}';
    }
```
上のソースコードから分かるように配列の場合は、Arrays.toString()で各要素を表示してくれたり、文字列の場合はシングルクォートで囲んでくれたりするようです。
自動生成は、toString()以外にもgetter/setterやコピーライトなどいろいろとあります。
MacにMySQLを導入する (Homebrewを使って)

### MySQLをインストール

```
brew install mysql
```

### データベースの初期化

```
$ unset TMPDIR
$ mysql_install_db --verbose --user=`whoami` --basedir="$(brew --prefix mysql)" --datadir=/usr/local/var/mysql --tmpdir=/tmp
```

### とりあえず起動と停止

```
$ mysql.server start
$ mysql.server stop
```

### ルートのパスワード変更

```
$ mysql.server start
$ mysqladmin -u root password 'new-password'
```

で、できるはずが、、、

```
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
```

なんで？

### パスワード変更で Access denied と言われた時の対処
パスワードのリセットをしちゃいます。
safeモードで起動し直し。

```
$ mysql.server stop
$ mysqld_safe --skip-grant-tables &
```

で、ログインする。

```
$ mysql -u root
mysql >
```

ログインできたらmysqlデータベースのuserテーブルを再構築しちゃう

```
mysql> use mysql;
mysql> truncate table user;
mysql> flush privileges;
mysql> grant all privileges on *.* to root@localhost identified by 'password' with grant option;
mysql> flush privileges;
mysql> quit;
```

そしてMySQLを再起動してログイン

```
$ mysql -u root -p
Enter password: password
mysql >
```

### 自動起動設定

```
$ ln -sfv /usr/local/opt/mysql/*.plist ~/Library/LaunchAgents
$ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
```

homebrew.mxcl.mysql.plist を開いてKeepAliveをNOにしておくのもいいよ。


### my.cnfの設置

http://www.karakaram.com/install-mysql56-homebrew を参考にしてみます。
node.js単体テスト入門


node.jsの単体テストはいくつか方法があるのですが今回は理解しやすそうな[mocha](http://visionmedia.github.io/mocha/,"mocha")を使います。

# mochaとは
BDDスタイルでもTDDスタイルでも使えてグローバル変数のリーク検出までしてくれるテストフレームワークです

今回は簡単なBDDテスト行ってみます


# 準備
## インストール

デプロイ時には使わないのでグローバルにインストールします

```
npm install -g mocha
```

## テスト用コード作成

express-generatorでびゃっびゃっと動くものを作るためにwebアプリ生成機をインストールしてhello-mochaアプリを作ります

WEBアプリ作成

```
npm install -g express-generator
express --css stylus hello-mocha
cd hello-mocha
npm install
```

起動確認

```
npm start
```

http://localhost:3000

```localhost：3000
Express

Welcome to Express
```

次にroutes/index.jsをいじって表示を変えてみます

```diff:routes/index.js
var express = require('express');
var router = express.Router();

+ router.hello = function(msg){return 'Hello '+ msg;};
+//本来はrouterじゃなくて別オブジェクトでやった方がよいが今回は簡単に説明したいのでという言い訳

/* GET home page. */
- router.get('/', function(req, res) {
+ router.get('/:msg', function(req, res) {
-  res.render('index', { title: 'Express' });
+  res.render('index', { title: router.hello(req.params.msg) });
});

module.exports = router;
```

http://localhost:3000/mocha

```localhost：3000/mocha
hello mocha

Welcome to hello mocha
```

`Hello mocha` と表示されたと思います。これはURLの`/mocha`部分をパラメーターにしてHelloをつけて表示をするように変更しました

確認できたら停止しましょう


停止

```キー
Ctrl+c
```

# テストしてみる
## テストを書く

先ほど作った`router.hello()`をテストしてみましょう

mochaはtestディレクトリを検知して自動実行してくれるのでtestディレクトリを作ってそこにテスト用ファイルを作成します

```
mkdir test
cd test
vi test.js #testディレクトリ以下であれば名前はなんでもよい
```

テスト作成

```test/test.js
var router = require("../routes/")
var assert = require("assert")

describe('router', function(){
  describe('get(/)', function(){
    it('Hello mocha', function(){
      var msg = 'mocha';
      assert.equal('Hello ' + msg, router.hello(msg));
    })
  })
})
```

## テスト実行

`mocha`だけでok

```
$ mocha


  router
    get(/)
      ✓ Hello mocha


  1 passing (4ms)
```

# まとめ

- 5分でできたnpmはとっても便利
- レポート機能もあるのでjenkinsと連携して単体テストの可視化をしたい
- [公式](http://visionmedia.github.io/mocha/)がわかりやすいしmocha自体シンプルなのでとっつきやすかった
- ググれば日本語のテックブログも結構多い
- yeomanと連携して高速開発もやってみたい
Spark / MLlib の K-means を Scala から利用してみる

# 元ネタ

[Spark   MLlib の K-means を Java から利用してみる - ALBERT Engineering Blog](http://tech.albert2005.co.jp/blog/2014/05/08/using-spark-and-mllib-in-java/) のScala移植版です。
とても丁寧な解説付きなので、まずはそちらをご覧ください。

# Scalaコード

変数名やデータ構造および出力フォーマットは、元ネタに合わせています。
言語以外に変更した点は、下記の通りです。

* "iris.txt"が見当たらなかったので、"iris.data"を使いました。
 * ヘッダ行ではなく空行を取り除いています。
 * http://archive.ics.uci.edu/ml/machine-learning-databases/iris/
* Sparkのバージョンを上げているため、特徴ベクトルの型がMLib独自のものになっています。
 * [Java 8 ＆ 機械学習の視点でみる Spark 1.0 リリース - ALBERT Engineering Blog](http://tech.albert2005.co.jp/blog/2014/06/06/spark-1.0/)

```scala:KMeansIris.scala
import org.apache.spark.SparkContext
import org.apache.spark.mllib.clustering.KMeans
import org.apache.spark.mllib.linalg.Vectors

object KMeansIris extends App {
  val context = new SparkContext("local", "demo")

  val data = context.
    textFile("src/main/resources/iris.data").
    filter(_.nonEmpty).
    map { s =>
      val elems = s.split(",")
      (elems.last, Vectors.dense(elems.init.map(_.toDouble)))
    }

  val k = 3 // クラスタの個数を指定します
  val maxItreations = 100 // K-means のイテレーション最大回数を指定します
  val clusters = KMeans.train(data.map(_._2), k, maxItreations)

  // 各クラスタの中心を確認する
  println("## クラスタの中心")
  clusters.clusterCenters.foreach {
    center => println(f"${center.toArray.mkString("[", ", ", "]")}%s")
  }

  // 各データがどのクラスタに分類されたのかを確認する
  println("## 各データのクラスタリング結果")
  data.foreach { tuple =>
    println(f"${tuple._2.toArray.mkString("[", ", ", "]")}%s " +
      f"(${tuple._1}%s) : cluster = ${clusters.predict(tuple._2)}%d")
  }
}
```

# 確認環境

```scala:build.properties
sbt.version=0.13.6
```

```scala:build.sbt
name := "KMeansIris"

version := "1.0"

scalaVersion := "2.10.4"

libraryDependencies ++= Seq(
  "org.apache.spark" %% "spark-core" % "1.1.0",
  "org.apache.spark" %% "spark-mllib"  % "1.1.0"
)
```
mysqlはbinlogを手動で削除すると起動しなくなる


実際にはaptitude install apacheとかしたときになぜかこれに陥ることがあるらしい。

```
MySQL manager or server PID file could not be found! ... failed!
```

```
sudo /usr/bin/mysqld_safe --user=root --skip-grant-tables &
```

で起動し(`--skip-grant-tables`はrootのパスワードを変えたいときだけ)、rootで入って

```
RESET MASTER ;
```

と打つ。この辺り、試行錯誤しているとbinlogがroot権限になったりするので、mysql権限に戻しておく。

```
sudo chown mysql:mysql -R  /usr/local/mysql/data/
```

```
sudo service mysql restart
```


http://freefielder.jp/blog/2012/03/mysql-1.html
http://d.hatena.ne.jp/tomoyamkung/20081225/1230165109
ストア運営をサポートするAPIに接続できなくなりました。

お世話になります。

YahooショッピングAPIについて質問があります。
ストア運営をサポートするAPI（プロフェッショナル出店ストア向け）
の各APIについて
2014/09/18 17:00 までは確実に接続できていたのですが
本日（2014/10/01）接続しようとしたところ

msxml3.dll エラー '80072f0c'

A certificate is required to complete client authentication

というような認証が必要のようなエラーがでて
接続できなくなってしまいました
何か仕様の変更があったのでしょうか？

・ストア運営をサポートするAPIがほぼすべて接続できないようです。
・アクセストークンは取得ページは接続できアクセストークンの取得はできます。
・テスト環境用へは接続できます。
・ストア運営をサポートするAPI以外のショッピング情報取得APIへは接続できます。
・MSXML2.ServerXMLHTTPを使用して接続していました。
問い合わせが例外を放つ原因を調べたら膝から崩れ落ちた

実行中のコードに以下のようなデータベースへの問い合わせ文があって(実際には違うけどテイストは同じ)、何故か例外を吐いてしまうので原因を調べてた。
あえて SQL シンタックスにしてません。

>SELECT 
>	DATE(created_at) as created_at_day,　
>	TIME(created_at) as created_at_time
>FROM regist_table
>WHERE id = 'XXXXXX'

原因がわかった途端、膝から崩れ落ちた気分を味わってしまったです。
MacOS XでRuby環境構築メモ

Gitが入っていること前提

### Homebrewのインストール
パッケージ管理ツール
http://brew.sh/

```
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)
```

### Homebrewでrbenvとruby-buildのインストール

```
brew update
brew install rbenv ruby-build
```

### rbenvでrubyのインストール

インストールできるものリストを表示

```
rbenv install --list
```

たとえば2.1.3をインストール

```
rbenv install 2.1.3
```

### rbenvのglobalとlocal

globalはシステム全体。localはディレクトリ単位。localで設定すると.ruby-versionというファイルが作成される。
ref#cache()の使い方

最近vim-refのsourceを作ってて、ref#cache()の使い方がわからなかったのでまとめる。

ref#cache()は基本的にListをキャッシュすることを想定している。
これは恐らく、取得したテキスト(ドキュメント)の内容を行分割したものがそのままキャッシュされることを前提としているから。

ref#cache()は渡す引数によって動作にバリエーションがある。
わかってしまうと、使いやすいインタフェイス。

### ref#cache({source-name})

{source-name}のキャッシュに対するkeys()みたいなもの。
キャッシュ済の{name}のリストを取得する。

```vim
" => []
echo ref#cache('hoge')
call ref#cache('hoge', 'fuga', [])
" => ['fuga']
echo ref#cache('hoge')
```

### ref#cache({source-name}, {name})

{source-name}のキャッシュから{name}をキーにListを取得する。
{name}というキーが存在しない場合、0が返る ([]のほうが統一感ある気がするけど) 。

```vim
" => 0
echo ref#cache('hoge', 'fuga')
call ref#cache('hoge', 'fuga', [])
" => []
echo ref#cache('hoge', 'fuga')
```

### ref#cache({source-name}, {name}, {gather})

ref#cache({source-name}, {name})と基本的には同じだが、キャッシュが存在しない場合には{gather}を評価し、その結果をキャッシュして返す。
{gather}には、以下いずれかを指定可能。

1. Listを返すFuncref

    引数に{name}を取る。
    キャッシュが存在しない場合のみ実行される。

    ```vim
    function! s:piyo(name)
        return [a:name]
    endfunction

    " => ['fuga']
    echo ref#cache('hoge', 'fuga', function('s:piyo'))
    ```

1. eval()で評価可能な文字列

    a:nameに{name}が入る。
    呼び出し元のスコープでeval()される訳ではないため、スコープに注意する必要がある。
    キャッシュが存在しない場合のみeval()される。

    ```vim
    " => ['fuga']
    echo ref#cache('hoge', 'fuga', '[a:name]')
    ```

1. call()という辞書関数を持つ辞書

    引数に{name}を取る。
    キャッシュが存在しない場合のみ実行される。

    ```vim
    let s:piyo= {}
    function! s:piyo.call(name)
        return [a:name]
    endfunction

    " => ['fuga']
    echo ref#cache('hoge', 'fuga', s:piyo)
    ```

1. List

    キャッシュが存在しない場合のみ利用される。

    ```vim
    " => ['fuga']
    echo ref#cache('hoge', 'fuga', ['fuga'])
    ```

### ref#cache({source-name}, {name}, {gather}, {update})

基本的にはref#cache({source-name}, {name}, {gather})と同じだが、{update}に0以外が与えられたときには、常にキャッシュの更新を行う。
大体以下と同じ意味。

```vim
call ref#rmcache('hoge', 'fuga')
echo ref#cache('hoge', 'fuga', [])
```
Xcodeに行の複製ショートカットを追加する

新しい環境に移行した時に、いつも検索してるので備忘として。
Marvericks, Xcode6の場合

### 1.設定ファイルを取り出す
/Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/Resources/IDETextKeyBindingSet.plist
編集にはroot権限が必要なので、一旦他の場所にコピって編集した上で、再度戻すようにしたほうがいいかも

### 2.行の複製コマンドを作る
リストの一番下にEdit(名前はなんでもOK)というDictionaryを追加。
そこにコマンド名と実行内容をkeyとvalueの対で入れることで新しいコマンドを作ることができる。
行の複製の場合、keyを _Duplicate Line_、stringを _selectLine:, copy:, moveToEndOfLine:, insertNewline:, paste:, deleteBackward:_とする。
IDETextKeyBindingSet.plistに追加した内容は以下の通り。

	<key>Edit</key>
	<dict>
		<key>Duplicate Line</key>
		<string>selectLine:, copy:, moveToEndOfLine:, insertNewline:, paste:, deleteBackward:</string>
	</dict>
修正したファイルを、管理者パスワードなどを入れつつ、元の場所に戻す。
### 3.作成したコマンドにキーボードショートカットを割り当てる
+ Xcodeを起動し、Xcode > Preference > Key Bindingsを選択する。
+ Key Binding SetプルダウンからManage Key Bindings..を選択し、下部の+ボタンからDuplicate "Default"を選んでKey Binding Setを複製する
+ リストの一番下にDuplicate Lineコマンドが表示されてるはずなので、その行の右側の空白をダブルクリックして割り当てたいショートカットを入力する。(ここではcommand+D)
+ 他のコマンドとショートカットが競合していると右側に赤いマークがつくので、違うショートカットを指定する等して競合を解消する。競合したままだとどちらのコマンドも有効にならない模様。

### IDETextKeyBindingSet.plistに使えるコマンド
[HFTextRepresenter.h](https://github.com/luisobo/Xcode-RuntimeHeaders/blob/da9698671da2b65bf10973256cb70152aa102883/HexFiend/HFTextRepresenter.h)にあるメソッドのうち、 _- (void)〜〜:(id)arg1;_の形式のものがIDETextKeyBindingSet.plistに使えそう(未確認)。



[参照元：Custom Xcode shortcuts](http://luisobo.wordpress.com/2014/01/13/custom-xcode-shortcuts/)
chef-solo(knife)でMySQLサーバ5.6をインストールする 2014年度版

# はじめに
chef-soloでVagrantなCentOSにMySQL5.6をインストールしようと思ったんですが、Berkshelfを使ったインストール手順がなかなか見つからなかったのでまとめました。

# 事前作業
以下の作業は完了済みとします。

- CentOS6系のインストール
- 対象サーバにchef-solo, またはローカルマシンにknifeインストール

# Berkshelfのインストール
1からレシピを書くのは手間なので、先人の知恵を拝借するためberkshelfを使います。
Befkshelfはchefのレシピにおけるgemとかbundlerみたいなものと思ってください。

````zsh
$ gem install berkshelf
````

# Berksfile作成
Berkshelf経由でインストールするミドルウェアを指定するため、Berksfileを書きます。
chef実行ディレクトリに移動し、Berksfileを作成します。

````zsh
$ vi Berksfile
````

mysqlレシピをBerkshelfから取得するための設定を記述します。

````text:Berksfile
source "https://supermarket.getchef.com"

cookbook "mysql"
````

berkshelfのMySQLレシピを使う場合、MySQLの構成情報をnodeオブジェクトに記述します。

````json:hogehoge_node.json
{
    "run_list": [
	"recipe[mysql::server]"
    ],
    "mysql":{
	"version":"5.6",
	"port":"3306",
	"server_root_password":"mysql0000",
	"remove_anonymous_users":true,
        "remove_test_database":true
    }
}
````
MySQLサーバをインストールする場合、`run_list`に`"recipe[mysql::server]"`を追記します。（シングルクォーテーションではなくダブルで）
さらにインストールするバージョンなどを`mysql`ハッシュで指定します。

## 指定できるパラメータ
代表的なパラメータをまとめました

* **version** MySQLのバージョン5.1～5.6が指定可能。5.7はCentOS6.5ではダメでした(2014/09現在)
*  **port** MySQLが使用するポートを指定します。
*  **server_root_password** MySQLのrootユーザーパスワード
*  **remove_anonymous_users**  アノニマスユーザーを削除するか(true or false)
*  **remove_test_database**  テストデータベースを削除するか(true or false)
他にも色々設定できますので、設定項目は[こちら](https://github.com/fnichol/chef-mysql#attributes)を参照してください。

# chef実行
nodeオブジェクトができたらberksコマンドを実行してmysqlレシピを取得します。

````zsh
$ berks  --path cookbooks
````
`berks`コマンドは`--path`で指定したディレクトリを一度削除し、再作成した上でレシピをダウンロードします。
もし自分のレシピをcookbooks配下に作ってると、容赦なく全部削除されるので、事前にsite-cookbooksなどにリネームするか、`--path`指定のディレクトリを変更しましょう。

あとはchef-soloなりknifeなりお好きなように！

# 追記

## recipeなしエラー
mysqlのレシピファイルが見つからないエラーが出る場合、`.berkhelf/cookbooks`に`mysql-6.0.4`だけができて、`mymsql-5.3.6`がない可能性があります。
Berkfileにバージョン指定を追加しましょう。

```Berkfile
cookbook "mysql", "~> 5.3.6"
```

`You must supply a name when declaring a mysql_service resource`と言われたら、ノードファイルの記述方法が変わった可能性があります。
`"service_name":"default"`を追加しましょう。

```
    "mysql":{
	"service_name":"default",
	"version":"5.5",
	"port":"3306",
	"server_root_password":"mysql0000",
	"remove_anonymous_users":true,
        "remove_test_database":true
    }
```
Swift + *.h


Swift で開発してる時、他ライブラリのヘッダーファイルを読み込む。
その読み込む `Header` ファイルに `#import <hogeframework/hogeframework.h>` とか書くけど、そのヘッダーファイル名の規則


これ

![スクリーンショット 2014-06-09 12.02.53.png](https://qiita-image-store.s3.amazonaws.com/0/1054/341b3383-ae40-313a-4ef2-7696a6bbc83b.png "スクリーンショット 2014-06-09 12.02.53.png")
Class `ViewController ` has no initializer



Swift で書いてたらこんなこと言われたのでメモ書き

## 現象

こんな感じのコード

```swift
import UIKit

class ViewController: UIViewController {
	var test:MyTestKls

	...
}
```


この場合、一行目から `Class ViewController has no initializer` と言われる。


## 原因と対処

プロパティの初期値を設定していない為、 `initializer` で初期化しろ、という文句。

こんな感じにすればいいぽい。よくわかってない。


```swift
import UIKit

class ViewController: UIViewController {
	var test:MyTestKls? = nil

	...
}
```
Selector


こんな感じ

```swift
import UIKit
class MyViewController: UIViewController {
   let myButton = UIButton(frame: CGRect(x: 0, y: 0, width: 100, height: 50))
 
   init(nibName nibNameOrNil: String!, bundle nibBundleOrNil: NSBundle!) {
      super.init(nibName: nibName, bundle: nibBundle)
      myButton.targetForAction("tappedButton:", withSender: self)
   }
 
   func tappedButton(sender: UIButton!) {
      println("tapped button")
   }
}
```
import とかメモ書き


注意: NDAの都合で非公開

何でこの文章は非公開の部分にあるんだよ、iBooksで公開してるところに書けよ…

Swift の import 文はあんまり使わない。

## ObjCとの比較

### 通常

外部プロダクトや、普通の header ファイルを読み込む時。

|            | import into Swift    | import into ObjC                      |
|-----------:|---------------------:|--------------------------------------:|
| swift Code |  No Import statement | `#import "ProductModuleName-Swift.h”`<br />`#import <ProductName/ProductModuleName-Swift.h>` |
| ObjC Code  | No import statement. <br />ObjC bridging header required | `#import "Header.h”` |

要は、swift は自動的に読み込むみたい。

### Framework の場合

さすがの swift も苦戦

```swift
import FrameWorkName
```

```objc
@import FrameworkName;
```
yumのインストール、アップデート履歴

#yumのインストール、アップデート履歴

/var/log/yum.logでインストール、アップデート履歴が見れる。
こんな感じ

Sep 08 22:45:02 Installed: pango-1.28.1-7.el6_3.x86_64
Sep 08 22:45:02 Installed: libXcomposite-0.4.3-4.el6.x86_64
Sep 08 22:45:04 Installed: gtk2-2.20.1-4.el6.x86_64
Sep 08 22:45:04 Installed: gkrellm-2.3.5-3.el6.x86_64
Sep 26 09:46:36 Updated: bash-4.1.2-15.el6_5.1.x86_64

開発から本番サーバに移行する時便利
transform-originのIE 9対応


IE9ではz軸のtransformに対応していないので注意が必要です。

例えば、transform-originで3つめのパラメータ (z軸) まで指定すると、
IE9だけtransform-originが反映されないという事態になります。

x, yの2軸だけで事足りる場合、誤ってzパラメータまで指定しないように注意しましょう。
OS X で bash のパッチが適用できない人のために (但し危険かつ無保証です）

ここ数日、GNU bash の抱える深刻な脆弱性に関してあちこちで報道されているので、IT業界関係者でよもや「知らない」という方はいないと思います。

Apple 社の OS X にも初期状態から bash が含まれているので修正パッチが早速配布されたのですが (配布の仕方が App Store じゃないとか謎ですが…)、私の環境 (OS X 10.8.5) ではダウンロードしたファイルが壊れていると言われてパッチが適用できませんでした。

パッチの内容的に非常に重要な修正ですし、パッケージの中身自体は問題なく動作している様なので以下の操作で無理矢理パッチを適用しました。

**但しこの操作は全くもって無保証です。**
**操作に不安がある方は Apple からリリースされると思われる修正版をお待ち下さい**
**操作に失敗した場合、最悪 OS が起動しなくなる危険性を含んでいます。**
**内容やリスクを理解した上で十分な注意をはらった上で実行して下さい。
ターミナルからコマンド入力に不慣れた方はくれぐれも実行しないで下さい。**

```
$ curl -O http://supportdownload.apple.com/download.info.apple.com/Apple_Support_Area/Apple_Software_Updates/Mac_OS_X/downloads/031-08417.20140929.EmOZK/BashUpdateMountainLion.dmg
$ open BashUpdateMountainLion.dmg
$ pkgutil --expand /Volumes/OS\ X\ bash\ update/BashUpdateMountainLion.pkg ~/tmp
$ sudo ditto -x --bom ~/tmp/BashUpdateMountainLion.pkg/Bom ~/tmp/BashUpdateMountainLion.pkg/Payload /
```

上記操作にて更新されるのは以下のファイルです

/bin/bash
/bin/sh
/private/etc/bashrc
/private/etc/profile
/usr/bin/bashbug
/usr/share/doc/bash/article.pdf
/usr/share/doc/bash/bash.html
/usr/share/doc/bash/bash.pdf
/usr/share/doc/bash/bashbug.pdf
/usr/share/doc/bash/bashref.html
/usr/share/doc/bash/bashref.pdf
/usr/share/doc/bash/builtins.pdf
/usr/share/doc/bash/rbash.pdf
/usr/share/doc/bash/rose94.pdf
/usr/share/info/bash.info
/usr/share/man/man1/bash.1.gz
/usr/share/man/man1/bashbug.1.gz
/usr/share/man/man1/sh.1.gz
「いいね！」ボタンの数値について

##前提
公式にはFacebookをされていない企業サイトに
はじめて「いいね！」ボタンを設置したところ、
結構な数値が最初から表示されていたため、理由を聞かれたので改めて調べたまとめ。

##結論
以下のものが加算された数値が表示されている模様。

* 「いいね！」ボタンを押された数
* 「シェア」ボタンを押された数
* 上記に付いたコメント数
* 該当URLを含む投稿
※公式にはボタンを設置していないので、
「該当URLを含む投稿数」＋「その投稿についたコメント数」だと想定。

##参考資料
* いいね!数1000を5分で自作自演する方法： いいね!数のカラクリとその見破り方 | 編集長ブログ―安田英久 | Web担当者Forum
http://web-tan.forum.impressrd.jp/e/2014/03/04/17072
* 知ってた？！Facebookの「いいね！」ボタンに表示される数値は「いいね！」された回数だけではない！ | gori.me（ゴリミー）
http://gori.me/facebook/facebook-tips/47524
* ウェブページの「いいね！」数はボタンを押した数だけじゃない！内訳を理解してウェブページを盛り上げよう｜Tips*Blog｜株式会社コプロシステム
http://www.coprosystem.co.jp/tipsblog/2014/07/08.html
EshellでJava1.6の日本語文字化け対策

Emacsを再起動したら、何故かそれまで問題なかったEshell上での"javac"や"java"コマンド出力の日本語が文字化けするようになってしまった。
（おそらくTerminalを再起動した際、javaのバージョンが切り替わってしまったと思われる。）

調べたら、JDK1.6のデフォルトのエンコーディングがSJISのため、コマンドオプションでutf-8を指定すれば良いっぽい。
参考：[MacのTerminalでjavacをした時にコンパイルエラーが文字化けするの出なおしてみた](http://mac.liveinamerica.jp/mac%E3%81%AE%E3%82%BF%E3%83%BC%E3%83%9F%E3%83%8A%E3%83%AB%E3%81%A7java%E3%81%8C%E6%96%87%E5%AD%97%E5%8C%96%E3%81%91/)

.emacsで以下のエイリアスを設定した

```elisp:.emacs
(require 'em-alias)
(add-to-list 'eshell-command-aliases-list (list "javac" "javac -J-Dfile.encoding=UTF-8 $1")
(add-to-list 'eshell-command-aliases-list (list "java" "java -Dfile.encoding=UTF-8 $1")
```

（追記）
http://d.hatena.ne.jp/snaka72/20120101/1325403702
aliasで設定するより、"JAVA_TOOL_OPTIONS"にオプションを渡す方がよいっぽい。


```bash:.bashrc
export JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF-8
```
これで、"java""javac"どちらにもオプションが渡される。

…結局Emacs関係ないです。。。
Androidでソフトウェアキーボードを表示するとViewオブジェクトがせり上がってしまう

Titaniumには素晴らしいサポートサイト( http://support.titanium-mobile.jp/ )があるので、これまでQiitaには何も投稿していませんでしたが、先日のユーザー会でこのままでは地味すぎて世間から忘れられてしまいそうだという懸念が提出されましたので、投稿してみます。

で、表題の件ですが。まあ、ありがちですよね。例えば、WebViewを表示して、戻るボタンなどのコントロール用のViewをフッタ部分に表示するとします。

```xml
<Alloy>
  <Window>
    <WebView id="webview" url="http://www.google.com/" />
    <View id="footer">
      <Button>戻る</Button>
      <Button>進む</Button>
      <Button>再読込</Button>
    </View>
  </Window>
</Alloy>
```

footerオブジェクトを画面最下部に表示したいので、tssはこんな感じでしょうか。Buttonオブジェクトは省略しますね。

```js
"#webview":{
  top: 0,
  left: 0,
  right: 0,
  bottom: 60
},
"#footer":{
  bottom: 0,
  height: 60,
  left: 0,
  right: 0
}
```

で、この状態で動作させると、一見正常に動いているような感じがします。

![webview1.png](https://qiita-image-store.s3.amazonaws.com/0/1782/8bb8df3c-6813-55cd-1cae-14bccebcd51e.png)

でも、WebView内のテキストフィールドをタップすると…

![webview2.png](https://qiita-image-store.s3.amazonaws.com/0/1782/609cc660-c108-4df3-5369-b8c9b5938c59.png)

This Is What You Want... This Is What You Get!

footerのオブジェクトがせり上がって、キーボードの上に表示されてしまっています。これは鬱陶しい。

実はこれ、footerオブジェクトがbottom: 0で指定されているのが原因です。なので、同じレイアウトを再現したければ、bottom: 0を消して、端末にあわせてWebViewの高さを調整し、footerのViewを配置すればおしまい。

おしまいですよ。

もう何にもありませんからね。

さあ帰った帰った。

ほんとだってば、あんたもしつこいね。動いたでしょ？

動かない？

あ、そう。

そうですね。WebViewの高さを指定するのって、この場合どうすればいいんでしょう。

TitaniumのAPIで画面の高さを取得するには「Ti.Platform.displayCaps.platformHeight」を利用できます。が、これ、実はAndroidの場合は値をピクセルで返すんですよね。iOSはDIPなので端末の解像度を意識しないでいいのですが、Androidだと上のtssではデフォルトのdpを指定しているため、WebViewの高さを調整しようとすると、footerのViewの高さをピクセルに換算して計算してやる必要があります。

そこで、JS側をこんな風にしてみます。72はヘッダのActionBarのPortrait時の高さなのであまり気にしないでください。

```js
function pixelToDp(px){
  return (px / (Titanium.Platform.displayCaps.dpi / 160));
}

$.index.addEventListener('open', function(e){
  var actionBarHeight = 72;
  var footerHeight = 60;
  var height = pixelToDp(Ti.Platform.displayCaps.platformHeight) - actionBarHeight - footerHeight;
  //$.webview.applyProperties({height: height}); // -> これがあると不具合が*1
  $.footer.applyProperties({top: height});
});
```

で、tssからfooterのbottom指定を消しましょう。

```js
"#footer":{
  layout: 'absolute',
  top: 0,
  height: 60,
  left: 0,
  right: 0
},
"WebView":{
  top: 0,
  left: 0,
  right: 0,
  bottom: 60
},
```

結果はこちら：

![webview3.png](https://qiita-image-store.s3.amazonaws.com/0/1782/bb91709b-42ea-be8c-495c-8a292b4112b1.png)

Qiitaって、「Q」の後ろが「U」になっていない単語にアレルギーがあるので使ってなかったのですが、結構検索とかで活用されている方もおられるようなので、これからもたまに何か書いてみます。

*1 heightを変更するとキーボードが表示されたときの挙動が変わってしまうようです。
pythonからgit diffの内容を取得する


## 経緯

gitでyamlのdiffだけ文字列で取得したくなった


## pythonからgit使う

gitpython っていうのでgitの情報をいただく
pipで入る

```
pip install gitpython
```

ドキュメントはこちら
https://pythonhosted.org/GitPython/0.3.1/reference.html


こんな感じで使えました


```python:diff.py 
# coding: utf-8

import git
from . import PATH

"""
git diff HEAD HEAD^
したときに .yamlファイルの差分だけ文字列でとりたい
"""


class Diff(object):
    """HEAD と HEAD^ の差分のdiffをyamlのだけ引いてくれる"""

    DELIMITER = "\n\n"

    def __init__(self, repo_path):
        self.repo = git.Repo(repo_path)
        self.head = self.repo.head.commit
        self.parent = self.head.parents[0]

    def yaml_diff_as_patch(self):
        yaml_diffs = [
            unicode(d.diff) for d
            in self.parent.diff(self.head, 
								create_patch=True)
			# .yamlって言う名前のファイルのみ
            if d.b_blob.name.endswith('.yaml') 
        ]
        return self.DELIMITER.join(yaml_diffs)


if __name__ == '__main__':
    obj = Diff(PATH)
    print obj.yaml_diff_as_patch()
```
自分用メモ 2


ほんとに初心者なので1から10までメモするよ。

今回は、外付けでSSD 120GBを用意しました。

とりあえずインストールする。ここで失敗したことはDVDのバージョンにしなかったこと。
DVD（CDもいいかもしれないが）じゃないとGUIで入ってくれない。

一回目のSSD直入れの時は気が付かなかったが(DVDバージョンでやったので)二回目にVirtualBoxに入れるときに違うもの使ったらさっぱりわからない状態で起動されて困った…。（触れなくはないけど）

そういえばここのインストール画面を日本語にする方法があるようなのだがわからず英語のまま使った。
もちろん設定では日本語にしたがインストール後も自分からは日本語にならなかった。
英語難しい状態なのですごい困ったがとりあえずyesを押していたように思う。


で、アップデートしてとりあえずgccをインストール。
これがないのに気が付かずVirtualBoxを入れる時にエラーに悩まされた。
ここでエラーログを見ることを覚える人間。(見なきゃね！)
その後日本語化。
;# yum groupinstall "Japanese Support"

;# vi /etc/sysconfig/i18n

;LANG="en_US.UTF-8"←LANG="ja_JP.eucJP"に変更
;SYSFONT="latarcyrheb-sun16"
(先にやったがgcc先に入れたほうが良かったと思うので。)

VirtualBoxのサイズと中のCentOSのサイズを合わせたかったのだが、
;building the main guest additions module　[失敗]
に悩まされる。(画面サイズ合わせる用)
今のところは何が原因か分からないがあまり困っていないのでスルーする。

プログラミング用のbuild-essntialがないという話なのでそれに代わるソフトウェアも探し中

chromeさんも入れた
;# wget http://chrome.richardlloyd.org.uk/install_chrome.sh
;# chmod u+x install_chrome.sh
;# ./install_chrome.sh

参考:http://kwski.net/linux/404/

ibus-mozcを入れると便利だということなので、入れましたが、正直苦労しました。
そもそもi686が分からなくて何だそれとなっていたので…(64bitだと思ってた)

とりあえずダウンロードしたもの
 (名前入れればサイト出るはず)
;protobuf-2.3.0-7.el6.i686.rpm
;ibus-mozc-1.1.717.102-2vl6.i686.rpm
;mozc-1.1.717.102-2vl6.i686.rpm
;mozc-server-1.1.717.102-2vl6.i686.rpm
;mozc-utils-gui-1.1.717.102-2vl6.i686.rpm
;tegaki-zinnia-japanese-0.3-1vl6.noarch.rpm
;zinnia-0.06-3vl6.i868.rpm

インストール

;# rpm -ivh tegaki-zinnia-japanese-0.3-1vl6.noarch.rpm
;# rpm -ivh protobuf-2.3.0-7.el6.i686.rpm
;# rpm -ivh zinnia-0.06-3vl6.i686.rpm
;# rpm -ivh mozc-server-1.1.717.102-2vl6.i686.rpm
;# rpm -ivh mozc-utils-gui-1.1.717.102-2vl6.i686.rpm
;# rpm -ivh ibus-mozc-1.1.717.102-2vl6.i686.rpm
;# rpm -ivh mozc-1.1.717.102-2vl6.i686.rpm

//順番を間違えるとどうやらインストールにエラーが出る模様。
//protobufのi686が見つからず後回しにしていたら途中でエラーが出ました。

で、再起動。右上のパネルにあるキーボードのアイコン右クリック
設定→インプットメソッド→インプットメソッドの選択→日本語→Mozc(ここで無ければ何かが足りない)
追加した後優先順位をあげておくこと。
//もう一つ設定でZenkaku+Hankakuのみにしておいても良いかもしれない。
//私は間違えて押すことも多いのでそれだけにしておいた。

参考:http://memo.poolbird.com/2014/02/centos-65-64bit-mozc-install.html

後はfirebugをFFに入れておいた。winと同じ。

今回はここまで。
【HipChat, Github】HipchatとGithubインテグレーション


# HipchatとGithubのインテグレーションの方法

※ ルームに対する権限、もしくはHipchatアカウント設定レベルの権限次第で、そもそも設定する権限がないかもしれないので、そのあたりは調査後に追記します。

## HipchatのルームにGithubインテグレーション用の設定を追加する方法 part-1

1. 下記URLへアクセス
     https://{会社名}.hipchat.com/rooms

2. Githubを連携したいルームを選択してページ遷移
3. 左カラムから「Integrations」を選択
4. 右カラムに存在する「Find New」タブを選択する
5. Integration可能なツール一覧が表示されるので、「Github for Hipchat」の「インストール」をクリック
6. Githubで認証して良いかのDialogが表示されるので、認証する
7. リポジトリの登録画面が出てくるので「ユーザ名 / リポジトリ名」を入力して「＋」ボタンを押す
8. 無事現在のチャットルームに、選択したリポジトリが連携される

+α) 試しに連携したリポジトリに適当なコミットをしてプッシュしてみましょう！
      すると下記のような投稿が自動的にチャットルームに投稿されます！

![HipChat_Github_Integration.png](https://qiita-image-store.s3.amazonaws.com/0/18615/3ad8f5ff-9bb2-a56c-a6d0-20a775cbc3ed.png "HipChat_Github_Integration.png")


## HipchatのルームにGithubインテグレーション用の設定を追加する方法 part-2

1. Macアプリの右上の「・・・」を選択して、「Integrations」を選択
2. Integration可能なツール一覧が表示されるので、「Github for Hipchat」の「インストール」をクリック
3. Githubで認証して良いかのDialogが表示されるので、認証する
4. リポジトリの登録画面が出てくるので「ユーザ名 / リポジトリ名」を入力して「＋」ボタンを押す
5. 無事現在のチャットルームに、選択したリポジトリが連携される
Swiftで+や-を使ってCGPointを計算する

タッチされた2点間の距離や方向ベクトルを計算するとき、 _CGPoint_ をベクトルとみなして次のようにできると便利です。

```swift
let a = CGPoint(x: 1, y: 2), b = CGPoint(x: -3, y: 5)
			
let sum = a + b // aとbの和
let distance = (b - a).length // a、b間の距離
let direction = (b - a).unit // a→bの方向ベクトル
```

Swiftでは _struct_ （構造体）に演算子を定義したり、 _extension_ を使ってプロパティやメソッドを追加することができます。 _CGPoint_ を次のように拡張しておくと便利です。

演算子を定義する
--------------

演算子を新たに定義する場合には、次のように、演算子の名前を持った関数を定義します。

```swift
func + (left: CGPoint, right: CGPoint) -> CGPoint {
	return CGPoint(x: left.x + right.x, y: left.y + right.y)
}
```

_-_ の場合でも同じです。

_*_ の場合は、スカラー（この場合は _CGFloat_ ）を右からかける場合と左からがあるのでオーバーロードします。

```swift
func * (left: CGPoint, right: CGFloat) -> CGPoint {
	return CGPoint(x: left.x * right, y: left.y * right)
}

func * (left: CGFloat, right: CGPoint) -> CGPoint {
	return CGPoint(x: right.x * left, y: right.y * left)
}
```

内積の計算もオーバーロードして定義します。戻り値の型が _CGFloat_ なことに注意して下さい。

```swift
func * (left: CGPoint, right: CGPoint) -> CGFloat {
	return left.x * right.x + left.y * right.y
}
```

ひき算ではなく、 _-a_ のように _-_ をつけられるようにするには、 _prefix_ キーワードを用いて演算子を定義します。

```swift
prefix func - (value: CGPoint) -> CGPoint {
	return CGPoint(x: -value.x, y: -value.y)
}
```

プロパティを追加する
-----------------

_extension_ を使えば、 _struct_ に Conputational Property を追加することができます。

次のようにして、 _CGPoint_ （をベクトルとみなした場合）の長さを得るプロパティを追加します。

```swift
extension CGPoint {
	var length: CGFloat {
		get {
			return sqrt(self.x * self.x + self.y * self.y)
		}
	}
}
```

単位ベクトルを得るプロパティも定義しておくと便利です。

```swift
extension CGPoint {
	var unit: CGPoint {
		get {
			return self * (1.0 / self.length)
		}
	}
}
```

メソッドを追加する
---------------

プロパティだけでなく、メソッドを追加することもできます。

ベクトルのなす角を計算するメソッドを追加してみましょう。ベクトルのなす角については

```math
\cos \theta = \frac{\bf{a} \cdot \bf{b}}{|\bf{a}| |\bf{b}|}
```

が成り立つので、次のようにメソッドを定義します。

```swift
extension CGPoint {
	func angleFrom(point: CGPoint) -> CGFloat {
		return acos(fmin(fmax(self * point / (self.length * point.length), -1.0), 1.0))
	}
}
```

_fmin_ や _fmax_ は、浮動小数点数の計算誤差で _1.0_ や _-1.0_ をわずかに超えてしまう場合への対処です。

GitHub
-------

せっかくなので、 [GitHubに公開しました](https://github.com/koher/CGPoint-Vector)。 CGPoint+Vector.swift をプロジェクトに追加するだけで使えます。

まとめ
------

Swiftでは _struct_ に演算子やプロパティ、メソッドを追加することができます。 _CGPoint_ をベクトルとして計算をすることは多いので、 _+_ や _-_ の演算子や、 _length_ などのプロパティを追加してみました。
bin/rails app:update の diff を vim で見る方法

## まとめ

vim じゃなくてもよい。以下では vimdiff を指定しているが、vimdiff 部分を好みの diff ツールに置き換えれば使える。

```console
$ THOR_DIFF=vimdiff bin/rails app:update
```

```console
# Rails 5 より前
$ THOR_DIFF=vimdiff rake rails:update
```

## イントロ

Rails のバージョンアップ時に `bin/rails app:update` を実行して config 周りのファイルをアップデートしますが、対象ファイルがコンフリクトした場合に以下の画面が表示されます。

```console
    conflict  config/routes.rb
Overwrite /sample_app/config/routes.rb? (enter "h" for help) [Ynaqdh]
```

この状態で d を押すと差分確認を行うことができますが、このとき diff ツールとして`diff -u`コマンドが起動されます。差分確認するだけであればこれで十分なのですが、個人的には確認と同時に編集もしたいです。調べたところ diff ツールを指定できるようなので、その方法を載せます。

## 環境変数`THOR_DIFF`を指定する

例えば以下のように`THOR_DIFF`を指定すると、diff ツールとして vimdiff を使うことができます。

```console
$ THOR_DIFF=vimdiff bin/rails app:update
```

`THOR_DIFF` には別の diff ツールを使用することもできますので、好みのものを指定することができます。

これで `bin/rails app:update` 時に差分確認しつつ必要な箇所だけのマージもできるので作業効率が上がりました。

## `THOR_DIFF`はどこから来た？

コンフリクト時に`Overwrite /sample_app/config/routes.rb? (enter "h" for help) [Ynaqdh]`と聞いてくるのは実は [Thor](https://github.com/erikhuda/thor) の機能です。これは Rails のコマンドラインツールに Thor を使っているところがあるためです。

そのため Thor 側のコードを追います。diff ツールを指定している箇所はどうも [ここ](https://github.com/erikhuda/thor/blob/067f6638f95bd000b0a92cfb45b668bca5b0efe3/lib/thor/shell/basic.rb#L337) のようです。同一行に `ENV["THOR_DIFF"]` とあるので、環境変数 THOR_DIFF を指定すれば任意の diff ツールを起動できるということを意味しています。ということで `THOR_DIFF` は thor のコードから来ています。

RAILS_DIFF というのも見えますが、とりあえずここでは THOR_DIFF を使ってみました。ちなみにどちらもドキュメントには載っていないようなのですが何ででしょうね？

## 参考リンク

[Thor](https://github.com/erikhuda/thor)
[diff 起動箇所のコード](https://github.com/erikhuda/thor/blob/067f6638f95bd000b0a92cfb45b668bca5b0efe3/lib/thor/shell/basic.rb#L337)
ボリュームを拡張できない時のSWAP領域の拡張方法

CentOSで物理サーバーを構築してもらったのですが、論理ボリュームは一つのみで、全ての物理領域が割り当ててある状態。
しかも、SWAP領域が少なくて、FTP時などSWAP不足になってしまっていました。

SWAPの拡張を行おうとしても、拡張できる領域は無いし、割り当てられているデバイスは「/」なので、アンマウントしようとしてもビジーになるので、減らすこともできません。

そこで、ファイルを用いたSWAP領域の拡張を行いました。

まず、SWAP領域となるためのファイルを作成します。

<pre>
# dd if=/dev/zero of=/swapfile bs=1G count=4
</pre>

0埋めされた4Gbyteの/swapfileが作成されます

次に、作成した/swapfileをSWAP領域として作成します。

<pre>
# mkswap /swapfile
</pre>

これで、SWAP領域の準備ができました。

後は、この領域を有効にするだけです。

<pre>
# swapon /swapfile
</pre>

freeコマンドなどで、作成した領域がSWAPとして有効であることが確認できます。

当初、ボリューム拡張できなくて戸惑ったのですが、容量に余裕があれば結構簡単に変更できました。

最後に、このままだと再起動したときにせっかく拡張した領域がマウントされないので、以下のファイルを修正します。
/etc/fstab

ここに、以下を追記します。

<pre>
/swapfile swap swap defaults 0 0
</pre>
ArchLinuxでブートローダーの再インストール(EFI)

```bash:
$ gdisk /dev/sda
Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048          206847   100.0 MiB   EF00  efi
   2          206846         4913151   2.0 GiB     8200  swap
   3         4913152        61071326   26.8 GiB    8300  /
```

の構成の場合。ArchLinuxのLiveCDから起動。

```bash:
mount /dev/sda3 /mnt
mkdir -p /mnt/boot/efi
mount /dev/sda1 /mnt/boot/efi
```

```bash:
arch-chroot /mnt /bin/bash
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=arch_grub --recheck
grub-mkconfig -o /boot/grub/grub.cfg
```

```bash:
exit
umount -a
reboot
```
【Rails】parsley-rails導入メモ

railsでparsley-railsを導入してバリデーション設定をしたときのメモ
parsley-rails：[github](https://github.com/mekishizufu/parsley-rails) / [ドキュメント](http://parsleyjs.org/)

##### Gemfile
Gemfileにparsley-railsを追加する。

```rb
gem 'parsley-rails'
```

bundle installしてparsley-railsをインストール

```
$ bundle install
```

##### app/assets/javascript/application.js
application.jsに以下を追記
エラー文を日本語表記にしたいのでparsley.i18n.ja.jsも読み込む

```js
//= require parsley
//= require parsley.i18n.ja
```

##### app/assets/stylesheet/application.css
デフォルトのCSSを利用するため、application.cssに以下を追記

```css
*= require parsley
```

##### app/views/test/new.html.slim
viewの入力フォームのところを修正

```html+smarty
= form_for :user, url: {action: :create},
  html: {'data-parsley-validate' => '', 'parsley-use-html5-constraints' => false} do |f|
  .row
    .col
      label.must 名前
      label.must （必須）
    .col
      = f.text_field :name, placeholder: "花咲　太郎",
        'data-parsley-trigger' => "change", 'required' => '', autofocus: true
  .row
    .col.title
      label 性別
    .col
      p
        = f.radio_button :gender, "Male", {'required' => ''}
        | Male
        = f.radio_button :gender, "Female"
        | Female

  button 登録
```

HTML5を使っているとform_forのところで自動的に`novalidate`が入ってしまうので、
`'parsley-use-html5-constraints' => false`で無効化させています。
Python ipaddressパッケージ メモ

## ipaddressパッケージ
<http://docs.python.jp/3/library/ipaddress.html>
Python3.3で追加。
Backportあり。

## remote_hostが「IPv4アドレス」「IPv6アドレス」「その他」のどれであるかを判別する。

※`ipaddress.ip_address()`は、入力値がunicode型でなければエラーとなるので注意。

```python:
import ipaddress

def type_of_remote_host(remote_host):
    try:
        addr = ipaddress.ip_address(unicode(address))
        if addr.version == 4:
            return 'ipv4addr'
        else:
            return 'ipv6addr'

    except ValueError:
        return 'other'

```

## IPv6アドレスの冗長形、短縮形の相互変換

```python:
import ipaddress

ipaddress.ip_address(u'2001:0db8:0000:0000:0000:0000:0000:9abc').compressed
# => u'2001:db8::9abc'

ipaddress.ip_address(u'2001:db8::9abc').exploded
# => '2001:0db8:0000:0000:0000:0000:0000:9abc'
```


## IPアドレスから逆引き用ホスト名を取得

```python:
import ipaddress

## IPv4
'.'.join(reversed('192.168.0.1'.split('.')))+'.in-addr.arpa.'
# => '1.0.168.192.in-addr.arpa.'

## IPv6
'.'.join(reversed(ipaddress.ip_address(u'2001:db8::9abc').exploded.replace(':','')))+'.ip6.arpa.'
# => 'c.b.a.9.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa.'

```
[PHP]抽象クラス

##なにか？
* 継承先クラスで、定義する必要があるメソッドを、定義のみする

##なぜ使うか？
* 定義する必要があり、実装が呼び出し先で違う時、定義を強制することができる。
* 制約できるので、コード書きながら設計している気分になれる

##サンプルコード
```php:abstract.php
<?php

abstract class Working
{
    abstract protected function where();
    abstract protected function why();
    abstract protected function how();

    public function work()
    {
    	echo $this->where($where);
    	echo $this->why($reason);
    	echo $this->how($how);
    }
}

class Person extends Working
{
	protected function where()
	{
		return '横浜で';
	}

	protected function why()
	{
		return 'お金欲しいから';
	}

	protected function how()
	{
		return '営業する';
	}
}

$bob = new Person();
$bob->work(); // 横浜でお金欲しいから営業する

```
##MORE
書いていて、これは便利なのでは、と思った。
継承元見た時に、処理フローがわかりやすい。
concurrent.futures使い方メモ

## concurrent.futures

<http://docs.python.jp/3/library/concurrent.futures.html>

Python3.2で新たに標準となったパッケージで、マルチスレッド、マルチプロセスによる並列タスク処理を簡単に実装できる。

Executorという基底クラスを継承する形でThreadPoolExecutor、ProcessPoolExecutorが実装されており、どちらを使ってもほぼ同じインタフェースで書ける。

## インストール
Python3.2では標準パッケージなのでインストールの必要無し。
2.6以上向けにBackportが提供されている。

```sh:
pip install futures
```

## サンプルコード

```python
import concurrent.futures
import hashlib

def digest(t): # 適当にCPU資源を消費するための関数
    hash = hashlib.sha256()
    for i in range(t*1000000):
        hash.update('hogehoge')
    return hash.hexdigest()

if __name__=='__main__':

    task_list = [1,1,1,2,2,3]

    # Executorオブジェクトを作成
    executor = concurrent.futures.ProcessPoolExecutor(max_workers=4)

    # Executorオブジェクトにタスクをsubmitし、同数だけfutureオブジェクトを得る。
    # タスクの実行は、submit()を呼び出した瞬間から開始される。
    futures = [executor.submit(digest,t) for t in task_list]

    # 各futureの完了を待ち、結果を取得。
    # as_completed()は、与えられたfuturesの要素を完了順にたどるイテレータを返す。
    # 完了したタスクが無い場合は、ひとつ完了するまでブロックされる。
    for future in concurrent.futures.as_completed(futures):
        print(future.result()) # digest()の戻り値が表示される。

    # すべてのタスクの完了を待ち、後始末をする。
    # 完了していないタスクがあればブロックされる。
    # (上でas_completedをすべてイテレートしているので、実際にはこの時点で完了していないタスクは無いはず。)
    executor.shutdown()
```

`ProcessPoolExecutor`を`ThreadPoolExecutor`に置き換えれば、そのままマルチプロセスでなくマルチスレッドで動作する。

## 注意点
* ProcessPoolExecutorはプロセス間通信によって実現しているため、いくつか制限がある。
  * 関数の引数および戻り値は、pickleを使ってシリアライズ可能なオブジェクトでなければならない。
  * 関数自体もプロセス間で渡せなければならない。インスタンスメソッドはだめ。ラムダ式はOK。
  * 関数の中で副作用としてグローバル変数を書き換えるなどしても、呼び元のプロセスには反映されない。

* CPythonはGlobal Interpreter Lockを実装しているので、ひとつのプロセス内で複数のスレッドがPythonコードを同時に実行することができない。上のサンプルコードのようにPythonコードをガリガリ実行するタスクの場合はThreadPoolExecutorで並列化してもほぼ逐次処理になるので、実行時間の恩恵はあまり無い。(通信待ちやIO待ちの多い処理なら効果がある。)
optional funcとenumは共存できない


protocolにoptionalな関数を加えたい場合、@objcを書き加える必要がある。

```swift:
@objc protocol Hoge {
	optional func hogehoge()
}
```

@objcがない場合、 *'optional' can only be applied to members of an @objc protocol* といったコンパイルエラーが発生する。

しかし、@objcをつけたプロトコル内部では、クラス型のみが記述できる。
したがって、structやenumは@objcプロトコル内に記述できない。

```swift:
enum Piyo {
}

@objc protocol Hoge {
	// コンパイルエラー "Method cannnot be marked @objc because the type of the parameter cannnot be represented in Objective-C"
    optional func hogehoge(piyo: Piyo)
}

```
初心者Vimmerが感動するテキストオブジェクト操作

Vim使っててこれ知らない人は人生損してますよ＞＜。

##テキストオブジェクトとは

文字・単語・行・段落・括弧で括られた範囲など、コマンド操作を適用する範囲のこと。
削除・コピー（ヤンク）などのコマンドとテキストオブジェクトでの範囲指定を組み合わせるととても便利に使える。

##オブジェクトの例

w ・・・ 単語（スペース区切り）
p ・・・ 段落（空行切り）
" ・・・ ""で括られた範囲
※その他''\[\]\(\)など括る系の記号も同様

##使用例

###di[ の使用例

[...]で囲まれた範囲の中身を削除
![スクリーンショット 2014-10-01 5.28.57.png](https://qiita-image-store.s3.amazonaws.com/0/52535/7921673a-a79b-3bef-0221-99611ca40cbb.png "スクリーンショット 2014-10-01 5.28.57.png")
di[ 入力
![スクリーンショット 2014-10-01 5.29.28.png](https://qiita-image-store.s3.amazonaws.com/0/52535/ac940cd3-cafb-64d1-e69d-e5e3e1c07d25.png "スクリーンショット 2014-10-01 5.29.28.png")

***

###da[ の使用例
[...]で囲まれた範囲全体を削除（[]含む）
![スクリーンショット 2014-10-01 5.33.32.png](https://qiita-image-store.s3.amazonaws.com/0/52535/012d2c97-9fcc-37b9-fcd2-457b847d90a1.png "スクリーンショット 2014-10-01 5.33.32.png")
da[ 入力
![スクリーンショット 2014-10-01 5.33.56.png](https://qiita-image-store.s3.amazonaws.com/0/52535/1df2d5eb-ac49-4889-8e7c-131104a57807.png "スクリーンショット 2014-10-01 5.33.56.png")

***

###di[ などは文字単位のテキストオブジェクトなので複数行でも可能

![スクリーンショット 2014-10-01 5.39.34.png](https://qiita-image-store.s3.amazonaws.com/0/52535/55637716-0c3c-adaa-dea1-9dae81072f12.png "スクリーンショット 2014-10-01 5.39.34.png")

di[ を入力

![スクリーンショット 2014-10-01 5.39.58.png](https://qiita-image-store.s3.amazonaws.com/0/52535/20e08a9f-1ddb-e653-ae1d-9b83dc3140cc.png "スクリーンショット 2014-10-01 5.39.58.png")

***

###補足

同じように、

- yi" ・・・ "..."で囲まれた範囲の中身をヤンク（コピー）
- yip ・・・ 次の空行までヤンク（コピー）
- ci" ・・・ "..."で囲まれた範囲の中身を削除＆インサート（入力）モードへ

とかできます。超便利ですね！
PerlからRedisを利用する.



RedisDBモジュールを使ってperlからRedisの操作.



## インストール
### Redisのインストール(Mac)

```
brew install redis
```

### Redisの起動

```
# server起動
$ redis-server
# cliet起動
$ redis-cli
```
それぞれの起動オプションは`--help`を付けて実行のこと.  

### perlのRedisモジュールインストール
    cpanm RedisDB

## サンプルコード
基本的な, GET/SETとパイプライン

```perl
use Data::Dumper;

use RedisDB;

my $redis = RedisDB->new(
    host => 'localhost', 
    port => 6379
);

# SET/GET
$redis->set('A', 100);
print Dumper $redis->get('A');
# > $VAR1 = '100'

$redis->mset('1', 10, '2', 20, '3', 30);

# send_commandを使ったパイプライン
my $data = [];
for my $key ( qw/1 2 3/ ) {
  # callback関数を渡せる
  $redis->send_command('GET', $key, sub {
    my ($self, $value) = @_;
    push(@$data, $value);
  });
}
# callback関数が実行されるまでblock
$redis->mainloop;

print Dumper $data;
# > $VAR1 = [
#           '10', 
#           '20', 
#           '30', 
#           ];
```

`send_command`は, callbackを渡す以外にも`get_all_replies`等で値を受け取ることができる. 

基本的なRedisのコマンドはラップされているが, 
`hgetall`メソッドの戻り値が配列だったりすることは注意.

## 参考資料
RedisDBモジュール
http://search.cpan.org/dist/RedisDB/lib/RedisDB.pm

Redisのコマンド一覧
http://redis.io/commands
AレコードとCNAMEレコードの違い


お恥ずかしながら全部Aレコードにしてました。が、ちょっと調べてみてやっとわかったのでwメモ。

## 参考URL
http://ascii.jp/elem/000/000/458/458858/
http://d.hatena.ne.jp/japanrock_pg/20090410/1239355230

## ドメイン名とIPの関係

### ドメイン名:IPアドレス = 1:n

`dig`コマンドで私のドメイン **makei.nu** を調べてみると

```
~
[pharaohkj]$ dig makei.nu
 略 
;; ANSWER SECTION:
makei.nu.		1800	IN	A	49.212.145.XX
```

makei.nu = **49.212.145.XX** とわかる。が実は

「ドメイン:IPアドレス」 は 「1:1」 ではない。`dig`で
google.comを調べてみる。

```
~
[pharaohkj]$ dig google.com
略
;; ANSWER SECTION:
google.com.		2	IN	A	173.194.117.230
google.com.		2	IN	A	173.194.117.227
google.com.		2	IN	A	173.194.117.238
google.com.		2	IN	A	173.194.117.231
google.com.		2	IN	A	173.194.117.233
google.com.		2	IN	A	173.194.117.228
google.com.		2	IN	A	173.194.117.224
google.com.		2	IN	A	173.194.117.229
google.com.		2	IN	A	173.194.117.232
google.com.		2	IN	A	173.194.117.225
google.com.		2	IN	A	173.194.117.226
```

google.com = **173.194.117.230と同.227と・・・たくさん**

つまり、 **ドメイン名:IPアドレス = 1:n**

### IPアドレス:ドメイン名 = 1:n

それじゃあその逆は？というと次は`dig`で **11ya.net** を調べてみるとVirtualHostnameベースで運用しているので、IPアドレス1つにいろんな名前がついている。

```
~
[pharaohkj]$ dig 11ya.net
略
;; ANSWER SECTION:
11ya.net.		120	IN	A	49.212.145.XX
```

これは **makei.nu** と同じIPアドレスである。
49.212.145.XX = **makei.nuと11ya.netと・・・たくさん**  
つまり、 **IPアドレス:ドメイン名 = 1:n**

## Aレコード
Aレコードはドメイン名と対応するIPアドレスを **ドメイン名:IPアドレス = 1:n** で定義する。
同じIPと別ドメイン名を並べて定義すれば **IPアドレス:ドメイン名 = 1:n** できる。

## CNAMEレコード
CNAMEレコードはすでにAレコードで定義されてるドメイン名と別名を定義する。なのでここは **ドメイン名:参照ドメイン名** を書くことで **IPアドレス:ドメイン名 = 1:n** を定義することができる。

## だから違いは

Aレコードは本来のドメイン名とIPの関係を定義。CNAMEはドメイン名と別ドメイン名をつけることができる。
Javaでサブネットマスクを計算する方法

Javaでサブネットを計算し、含まれる範囲を計算しようとした際、意外と情報が見つからなかったのでメモしておきます。

#ライブラリを用意
今回は自力で実装はせず、Apache Commonsの、「commons-net」を使います。

mavenなら下記のように読み込んでください。

```xml
<dependency>
	<groupId>commons-net</groupId>
	<artifactId>commons-net</artifactId>
	<version>3.3</version>
</dependency>
```

もしくは下記からダウンロードしてきてクラスパスを通して下さい。

http://mvnrepository.com/artifact/commons-net/commons-net/

#使い方

IPとサブネットマスクを「SubnetUtils」クラスに読み込ませた後、SubnetUtilsからサブネット情報インスタンスを取得します。
その後、サブネット情報インスタンスから、getHighAddress()というメソッドで、指定したサブネット情報の上限を取得します。

プログラム例

```java
public static void main(String args[]){
	{
		String ip = "192.168.0.1";
		String subnetMask = "255.255.0.0";
		// IPとサブネットマスクを読み込む
		SubnetUtils subnetUtils = new SubnetUtils(ip, subnetMask);
		SubnetInfo subnetInfo = subnetUtils.getInfo();

        // 計算
		System.out.println("IP : " + ip);
		System.out.println("サブネットマスク : " + subnetMask);
		System.out.println("下限 : " + subnetInfo.getLowAddress());
		System.out.println("上限 : " + subnetInfo.getHighAddress());
		System.out.println("含まれるIP数 : " + subnetInfo.getAddressCount());
		System.out.println("CIDR表記 : " + subnetInfo.getCidrSignature());
	}
	{
        // CIDR表記で読み込む
		String subnet = "192.168.0.0/16";
		SubnetUtils subnetUtils = new SubnetUtils(subnet);
		SubnetInfo subnetInfo = subnetUtils.getInfo();
		
		System.out.println("サブネット : " + subnet);
		System.out.println("下限 : " + subnetInfo.getLowAddress());
		System.out.println("上限 : " + subnetInfo.getHighAddress());
	}
}
```

出力結果

```
IP : 192.168.0.1
サブネットマスク : 255.255.0.0
下限 : 192.168.0.1
上限 : 192.168.255.254
CIDR表記 : 192.168.0.1/16
含まれるIP数 : 65534
サブネット : 192.168.0.0/16
下限 : 192.168.0.1
上限 : 192.168.255.254
```
他にも、指定したIPがそのサブネット内に含まれているかどうかなども判定出来るらしいです。

#参考情報

下記を参考にさせて頂きました。

http://hiroaki-kono.hatenablog.com/entry/2014/04/30/213435
http://mvnrepository.com/artifact/commons-net/commons-net/
http://commons.apache.org/proper/commons-net/apidocs/org/apache/commons/net/util/SubnetUtils.html
http://commons.apache.org/proper/commons-net/apidocs/org/apache/commons/net/util/SubnetUtils.SubnetInfo.html
Xcode6でAdhocの書き出しのエラー？

http://stackoverflow.com/questions/25862917/failed-to-locate-or-generate-matching-signing-assets-in-xcode-6

「Failed to locate or generate matching signing assets」

というエラーがXcode6で始めてAdhocを書き出そうとしときに出たんだけど、
Retryしたらうまく行ったりして、もんもん。
（実際は、Visit Member Centerをしてみたから、それが良かったのかも？？？）
iOS8で現在地が取れない？？場合

Xcode6にして、いざiPhone6でデバッグだ！

と思ったら、位置情報を取得するところでいつになっても取得できず。
iOS8 SDKからか、位置情報取得の前に、位置情報を使うよって言うのをリクエストするダイアログを自分で出す必要があるらしい。
あと、権限に、今までの「いつでも位置情報使える」「使えない」に加えて「起動中のみ使える」が増えたそうな。

ということで、対応方法は以下のブログより。

I'm Sei.さん、ありがとうございます。
http://im-sei.tumblr.com/post/91824653043/ios-8

```objc
if locationManager.respondsToSelector("requestWhenInUseAuthorization") {
    locationManager.requestWhenInUseAuthorization()
}
```

startUpdateLocationとかする前に呼んでね。

あ、あと、info.plistに以下のキーで、位置情報をなにに使うかの説明文を追加する必要があります。
NSLocationWhenInUseUsageDescription

これでも、実際使用する時は権限取得できたあとにstartUpdatingLocationを呼んだりする必要があるから、結構大変だよね。

```objc:サンプル

-(void)start
{
    // 位置情報サービスが使えないとき
    if ([CLLocationManager locationServicesEnabled] == NO) {
        [self locationManager:nil didFailWithError:[NSError errorWithDomain:@"LocationServices disabled" code:1 userInfo:nil]];
        return;
    }

    if ([self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) {
        switch ([CLLocationManager authorizationStatus]) {
            case kCLAuthorizationStatusNotDetermined:
                [self.locationManager requestWhenInUseAuthorization];
                break;
            case kCLAuthorizationStatusAuthorizedAlways:
            case kCLAuthorizationStatusAuthorizedWhenInUse:
                [self.locationManager startUpdatingLocation];
                break;
            case kCLAuthorizationStatusDenied:
            case kCLAuthorizationStatusRestricted:
                [self locationManager:self.locationManager didFailWithError:[NSError errorWithDomain:@"Location Authorization Denied" code:1 userInfo:nil]];
                break;
        }
    }
    // iOS7未満
    else {
        [self.locationManager startUpdatingLocation];
    }
}

-(void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status
{
    switch (status) {
        case kCLAuthorizationStatusNotDetermined:
            break;
        case kCLAuthorizationStatusAuthorizedAlways:
        case kCLAuthorizationStatusAuthorizedWhenInUse:
            [self.locationManager startUpdatingLocation];
            break;
        case kCLAuthorizationStatusDenied:
        case kCLAuthorizationStatusRestricted:
                [self locationManager:self.locationManager didFailWithError:[NSError errorWithDomain:@"Location Authorization Denied" code:1 userInfo:nil]];
            break;
    }
}

```

こんな感じ？
iOSのマルチデバイス対応　UITraitCollection

iOS8で新しく作られたUITraitCollectionについて。

・UITraitCollection というクラスを用いてデバイス種別（iPhone/iPad）やタテヨコの Size Class (Compact / Regular)をそれぞれ取得するようになった。　
→　http://ka-zoo.net/2014/09/ios8-issues-and-more/

・今まで使っていた
[[UIScreen mainScreen] bounds].size.width
[[UIScreen mainScreen] bounds].size.height
は、
iOS7 の 4 inch iPhone では方向によらず（320, 568）だが、
iOS8 では Portrait時 (320, 568)、Landscape時 (568, 320) となる。
Viewのフルスクリーン指定・判定など、方向に拠らないコードになっている場合は注意が必要。　
→同ページ

・デバイスの種類や向きなどを判定したい場合は、View Controller から取得した UITraitCollection オブジェクトと自分で生成した UITraitCollection オブジェクトを比較します。
また、UITraitCollection は5つのコンビニエンスコンストラクタから生成することができます。各プロパティを引数にセットできるほか、既存の UITraitCollection オブジェクトの配列から生成できるコンビニエンスコンストラクタもあります(Compact と Regular が混合している場合は Regular が優先的にセットされます)。
→　http://dev.classmethod.jp/references/ios8-trait-collection/
オススメのリッチなUILabel THLabel


THLabelはUILabelからの派生クラス。
なので使い方は、ほとんどUILabelと一緒。
ブラー、Shadow、ストロークテキストからグラデーションまで
標準のUILabelから進化してます。

## 環境

・iOS 4.0以降。
・ARC有効

## GitHub
https://github.com/MuscleRumble/THLabel

## ライセンス
zlib license
Unityでのプロキシ認証(認証付き) +Package関連でおまけ

#UnityからAssetStoreにアクセスしたい・・・が！

もしもプロキシを挟んでいる場合、アドレスを指定しないとアクセス出来ない。
しかし、Unityにはプロキシの設定はどこにもない。どうすればいいか。

##環境変数を設定してやる。


環境変数の設定は、コントロールパネル→システム→設定の変更→詳細設定タブ→環境変数
から行える。
新規で下の2つを追加すればいい。両方必要。

| 環境変数 | 値 |
|:-----------:|:----------------------------:|
| HTTP_proxy  |<プロキシのアドレス>:<ポート番号>|
| HTTPS_proxy |<プロキシのアドレス>:<ポート番号>|


###が・・・・・！駄目っ・・・・・！！

そんな人がいることがある。自分がまさにそれだった。
理由は、プロキシ認証にユーザ名、パスワードが必要なためである。

そんな時は、以下の設定に変えてやると行ける。

| 環境変数 | 値 |
|:-----------:|:----------------------------:|
| HTTP_proxy  |<ユーザ名>:<パスワード>@<プロキシのアドレス>:<ポート番号>|
| HTTPS_proxy |<ユーザ名>:<パスワード>@<プロキシのアドレス>:<ポート番号>|

これで可能である。
**問題は言わずもがな、パスワードとかダダ漏れ。**自分の場合はなんともないのだが、
これどうにもならないのだろうか。誰か教えてください。
この記事が原因でどんなことになっても責任はとれません・・・。

###注意
また、この設定をすると、逆にプロキシのない環境では繋がらなくなる。
面倒だが、毎回設定、解除しなくてはならない。

##UnityPackage関連でおまけ

###その１
AssetStoreからダウンロードしたPackageが欲しい・・・！という人に。
ダウンロードしたPackageは、以下のパスにある。

C:\Users\<ユーザ>\AppData\Roaming\Unity\Asset Store\[パブリッシャ名]\\[カテゴリ名?]\
AppDataは隠しフォルダなので注意。

###その２
新しいプロジェクトを作るときに、同時にPackageもインポート出来るようにする方法も紹介。

C:\Program Files (x86)\Unity\Editor\Standard Packages\
の中にPackageを突っ込んでおけば可能になる。
また、メインメニュー→Assets→Import Packageにも表示されるようになるので、
頻繁に使うPackageはここに入れておくと便利。