OmniAICreator/Qiita-1.07M huggingface dataset:
WordPressのフィードでInput is not proper UTF-8, indicate encoding !が出た時の対応

## wordpressのフィードのエラー
WordPressで、フィードにエラーが出ることがあります。

> This page contains the following errors:
>
>error on line 30 at column 25: Input is not proper UTF-8, indicate encoding !
>Bytes: 0x0B 0xE3 0x82 0xAA
>Below is a rendering of the page up to the first error.

わけわかんないエラーですが、0x0Bが入ってるよと言っているので、垂直タブだってことが分かります。そして丹念に指定された行を見て、コピーしてエディタにペーストすれば、おかしな制御記号が入ってることもわかります。あとは、記事を編集して不正な文字を取り除けばオッケー。

だけど、その対応って普通の人は結構難しい。0Bが垂直タブだなんて知らないし、制御記号とか見えないし。「垂直タブが入らないように気をつけて下さい」ってアナウンスも厳しい。

## ということで無理やり改造

本当はプラグインとして「足す」のがお行儀がいいんだけど、面倒なのでWordPressのコードを直接書き換えちゃう。

```php:functions.php
function do_feed() {
  global $wp_query;

  $feed = get_query_var( 'feed' );
  // Remove the pad, if present.
  $feed = preg_replace( '/^_+/', '', $feed );

  if ( $feed == '' || $feed == 'feed' )
    $feed = get_default_feed();
    $hook = 'do_feed_' . $feed;
    if ( !has_action($hook) ) {
      $message = sprintf( __( 'ERROR: %s is not a valid feed template.' ), esc_html($feed));
      wp_die( $message, '', array( 'response' => 404 ) );
    }
    ob_start("feed_callback"); //追加
    do_action( $hook, $wp_query->is_comment_feed );
    ob_end_flush(); //追加
}
//コールバックを追加
function feed_callback($buffer){
  return (str_replace("\x0B", "", $buffer));	
}
```
「追加」ってコメントしているところだけ修正しています。

do_feedでフィードを出力しているので、ob_startとob_end_flushではさんで出力をバッファリングする。出力する直前のコールバックで、出力バッファの中から、垂直タブを取り除く、ということをしています。垂直タブの他にもRSSとしてエラーになりそうな文字があったら、その子たちも削除する処理を加える感じで。
[Objective-C] 簡易的なFuture/Promiseの仕組みを実装してみる


Objective-Cで実装をしていると、通常のメッセージ送信とblock、さらにはCの関数呼び出しなど色々な呼び出し方法が存在してだんだん頭が混乱してきますね。

今回はタイトル通りPromiseをObjCで実装しつつ、property経由でメソッドチェーンを実現するやつをやってみました。
主に頭を整理する目的なので実用性や再利用性は完全無視ですｗ

とりあえず動くものを、という感じで作りました。
ただ、これを整備していけばそれなりに使えるものになるんじゃないかな、とも思ってます。
（まぁ実際の案件だったらPromiseKit使えって話だと思いますが）

ちなみに[こちらの記事](http://qiita.com/mokemokechicken/items/72cf7bd25033d3aa0104)を少し参考にさせてもらいました。


## メソッドチェーンを実現するためのプロパティ

今回の実装の肝はなんと言ってもBlocksを返すプロパティです。
ちなみに定義部分はこんな感じ。


```objc:header
@import Foundation;

/**
 *  簡易Promiseを実現するクラス
 */
@interface Promise : NSObject

/**
 *  Promiseクラス生成時に自身を返すためのblock
 */
typedef void (^PromiseBlock)(Promise *promise);

/**
 *  `then` property評価時に返されるblockの定義
 */
typedef Promise* (^PromiseThenBlock)();

/**
 *  `done`メソッド実行時に実行されるハンドラの定義
 */
typedef Promise* (^PromiseDoneBlock)();

/**
 *  `done`メソッド実行時に実行されるハンドラを保持する
 *
 *  本当は配列など複数`then`が呼ばれてもいいようにすべきだが、
 *  とりあえず動くものを作るので気にしない。
 */
@property (nonatomic, copy) PromiseDoneBlock doneBlock;

/**
 *  評価の際に`PromiseThenBlock`を返して、
 *  メソッドチェーン風に記述できるように準備する
 */
@property (nonatomic, copy) PromiseThenBlock then;

/**
 *  イニシャライザ
 *
 *  @param block 引数として受け取ったblockを初期化時に実行し、自身をblockの引数として実行する
 */
- (instancetype)initWithHandler:(PromiseBlock)block;

/**
 *  処理完了
 */
- (void)done;

@end
```


```objc:implementation
#import "Promise.h"

@implementation Promise

/**
 *  イニシャライザ
 */
- (instancetype)initWithHandler:(PromiseBlock)block
{
    self = [super init];
    if (self) {
        //
    }
    if (block) {
        block(self);
    }
    return self;
}


/**
 *  `then` property
 *
 *  @return blockを返し、メソッドチェーン風の記述を可能にする。
 */
- (PromiseThenBlock)then
{
    PromiseThenBlock block = ^Promise* (PromiseDoneBlock block) {
        self.doneBlock = block;
        return self;
    };
    return block;
}


/**
 *  完了処理
 */
- (void)done
{
    if (self.doneBlock) {
        self.doneBlock();
    }
}

@end
```


### thenプロパティ

`then`を実行すると、内部的にblocksを生成しそれを返します。
そのため、メソッドチェーン風に記述できるようになります。

```objc
- (PromiseThenBlock)then
{
    PromiseThenBlock block = ^Promise* (PromiseDoneBlock block) {
        self.doneBlock = block;
        return self;
    };
    return block;
}
```


## 使い方サンプル

使い方はこんなイメージになります。
*（引数にblock渡して・・という部分は実はいらないかも・・）*

```objc:client-header
@import Foundation;

#import "Promise.h"

@interface Client : NSObject
- (Promise *)work;
@end
```

```objc:client-implementation
#import "Client.h"

@implementation Client
- (Promise *)work
{
    Promise *promise = [[Promise alloc] initWithHandler:^(Promise *promise){
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            [promise done];
        });
    }];
    return promise;
}
@end
```

### 実行

```objc:perform
self.client = [[Client alloc] init];
[self.client work].then(^{
	NSLog(@"complete!!!!!!!!!!!!!!!");
});
```


このプロパティの仕組み自体は色々なところで使えそうですね。
Unity4からUnity5への移行で困った事

# Unity4のプロジェクトをUnity5に移行した時の変更点とかをつらつらと纏めてみる。
試してみたのは、
*Unity4.6.3f0*　→　*Unity5.0.0p1*
へプロジェクトファイルごとの変更(バージョンが変わると別のも出てくるかも・・・)
Unity5への移行時に最初に出てくる、APIのアップデートとかは済の状態。


#  良くなったこと
あんまり困った困った言っても、
なんなので、最初にちょっと良かったことを。
(自分の弄った範囲以内の事なので、GIとかは割愛）

## デフォルトでスカイボックスが設定されている
スカイボックスの設定は
Window＞Lightingで開かれるウィンドウ内に移動してた。

## ネイティブのコードとの連携がちょっと楽になった
Editor上でネイティブのコードを選択すると、インスペクタ上で、
・どのプラットフォームのプラグインか？
・使用するフレームワークは？
・コンパイル時のフラグは？
などなど
色々設定できるようになった。
(とりあえず、iOSで試していたが、いちいちフレームワークを追加しなくてもよくなったのが便利！)
※でも、ARCになったので、MRCのコードを使う時は、コンパイルフラグの設定が必要になったのね・・・


- - -
# 困った、困っている事
で、ここからが本題の困ったこと

## FBXインポート時のScaleFactorが変わってる
今でFBXをインポートした時、ScaleFactorは0.01だったのが1になっている。
(今までのがおかしいと思ってたのが、元に戻ったともいう)
ただ、そこを変えられてしまっては、新しくモデルを追加する時に、スケールが合わなくなっている。
これは、頑張ってスケールを合わせていくしかないかな・・・

## RigidbodyのsleepVelocityが無くなっている。(sleepAngularVelocityも同様)
これからは、sleepThresholdを使えって事らしい。
今までと使い勝手が変わって、thresholdは、エネルギー(？)で見るらしいよ。
http://docs.unity3d.com/ScriptReference/Physics-sleepVelocity.html

## ↑の影響なのか、ログを出すと動いて、ログを出さないと動かなかったり・・・
バグ？？？

## コライダーのトリガー設定が、Is Triggerのチェックだけでは動かない
一緒に、Convexにもチェックを入れないと動かないみたい。

## Shader名も変更された
Diffuseとか色々、Standerdってシェーダーに統一された？
シェーダーは、直接文字列で指定しなきゃいけなかったとこが多いからメンドクサイな・・・

## AudioClipに3DSoundが無くなった
AudioSourceのSpatial Blendって項目にお引っ越ししたみたい。

## TerrainColliderにIsTriggerが無くなってた
現在捜索中(無くなった？？？)

## TerrainのSettingsにPhysocMaterialが居なくなってた
TerrainColliderの方にお引っ越し

AudioClipに3DSoundが無くなった
AudioSourceのSpatial Blendって項目にお引っ越ししたみたい。


## Mecanimに「Entry」と「Exit」が追加されてる

最初のモーションと、終了時のモーションかな？？？


## AssetBundleは作り直し
まぁ、これは3→4の時もあったし予想通りかな。

【AssetBundleで超重要そうな参考URL！】
http://docs.unity3d.com/500/Documentation/Manual/BuildingAssetBundles5x.html


### AssetBundleの作り方(概要)
インスペクタの下の方に、「AssetBundle」って項目が増えていて、
そこを設定してから、BuildPipeline.BuildAssetBundlesを呼び出すことで、
AssetBundleが作られるみたい。

### AssetBundleの読み方(概要)
今までと同じ感じで、
WWWクラスのLoadFromCacheOrDownloadとかを使って読み込めるみたい。
ただ、
AssetBundleManifestは、なぜか読み込めない・・・
どうやって読み込むんだ・・・？？？
普通に、ファイルとして読み込むのかな・・・？？？
パーサーを1から作るわけではないだろうに・・・




---
他にもあれば、随時追加していく予定・・・
（追加は少ないとうれしいな^^;
コメントをすべて消し去る


シンタックスハイライトをしてくれる`font-lock`を元にバッファ内のコメントをすべて削除します。


```el
(defun my-kill-all-comments ()
  (interactive)
  (mapc (lambda ($face-name)
          (let ($ranges $beg ($pos 1))
            (setq $pos 1)
            (while $pos
              (setq $beg (text-property-any $pos (point-max) 'face $face-name))
              (if $beg
                  (progn
                    (setq $pos (next-single-property-change $beg 'face))
                    (setq $ranges (cons (cons $beg (or $pos (point-max))) $ranges)))
                (setq $pos nil)))
            (mapc (lambda ($r)
                    (delete-region (car $r) (cdr $r)))
                  $ranges)))
        '(font-lock-comment-face font-lock-comment-delimiter-face)))
```

適切なメジャーモードで、コメント部分に`font-lock`がかかるようバッファをスクロールしてから`M-x my-kill-all-comments`で消せます。
MackerelでRDSの情報をサービスメトリクスを使って取得する

Mackerelでは、RDSの情報を取得するためのプラグインが提供されていますが、それを使うとサーバメトリクスとして実行しているサーバに紐付いて情報が表示されます。
それになんかすごく違和感を感じたので、サービスメトリクスとしてAWSのAPIを叩いてデータを取得するスクリプトを作りました。

個人的に工夫した点は以下のとおり：
* CloudwatchのAPIも使って、残りだけじゃなくてディスクサイズも見れるように
* やっぱパーセントでも見たいなーと思って、パーセントのデータも送信
* RDS複数あったら面倒なので引数でRDSのidentity?を指定
* 無料枠で引っかかるの嫌なのでデータ容量関連だけ送る
位です。コレをいじれば全部のデータもMackerelで見れるようになります。
※エラーハンドリングをしていないのはご愛嬌ということで…。

```ruby:get_rds_data.rb
#!/usr/bin/env ruby

require 'aws-sdk'
require 'mackerel/client'

ACCESS_KEY = ''   # AWS ACCESS KEY
SECRET_KEY = ''   # AWS SECRET KEY
RDS_REGION = ''   # RDS Region(ex:ap-northeast-1)
MACKEREL_KEY = '' # Mackerel API KEY

base_url = "https://mackerel.io/api/v0/services/"
rds_name = ARVG[0]
service_name = "RDS"
end_time = Time.now
start_time = end_time - 300

# RDS
rds = Aws::RDS::Client.new(
  region: RDS_REGION,
  access_key_id: ACCESS_KEY,
  secret_access_key: SECRET_KEY
)

resp = rds.describe_db_instances(
  db_instance_identifier: rds_name
)
total = resp[:db_instances][0][:allocated_storage] * 1024 * 1024 * 1024

# CloudWatch
cw = Aws::CloudWatch::Client.new(
  region: RDS_REGION,
  access_key_id: ACCESS_KEY,
  secret_access_key: SECRET_KEY
)
free = cw.get_metric_statistics(
  namespace: 'AWS/RDS',
  metric_name: 'FreeStorageSpace',
  statistics: ['Minimum'],
  dimensions:  [
    { name: "DBInstanceIdentifier", value: rds_name }
  ],
  period: 60,
  start_time: start_time,
  end_time: end_time
)[:datapoints][0][:minimum].to_i

used = total - free
free_p = sprintf("%.4f", free/total.to_f).to_f*100
used_p = sprintf("%.2f", 100-free_p.to_f)

# Create metrics data
metrics =  [
  {'name' => "#{rds_name}.Disk.Used", 'time' => end_time.to_i, 'value' => used },
  {'name' => "#{rds_name}.Disk.Free", 'time' => end_time.to_i, 'value' => free },
  {'name' => "#{rds_name}.DiskPercent.Used", 'time' =>end_time.to_i, 'value' => used_p.to_f },
  {'name' => "#{rds_name}.DiskPercent.Free", 'time' =>end_time.to_i, 'value' => free_p.to_f }
]

# send to Mackerel
@mackerel = Mackerel::Client.new(:mackerel_api_key => MACKEREL_KEY)
ret = @mackerel.post_service_metrics(service_name, metrics)

```
というファイルを適当に置いて、

```:mackerel-agent.conf
[plugin.metrics.rds]
command = "/path/to/ruby /path/to/get_rds_data.rb <RDS_NAME>"
```
と設定ファイルに書けば、サービスメトリクスとして管理画面から見れるようになります。

公式プラグインもサービスメトリクスで送信できるといいな！
Capistrano 3とaws-sdk 2でELB配下にあるインスタンスへデプロイする奴

## 概要
私はAWSへCapistrano 3を使ってCircle CIで自動デプロイしています。
サーバが1台の時はCapistranoの設定ファイルにデプロイ先のサーバIP直書きでも良いのですが（良いのか？）、ここでAutoScalingに対応してELB配下にあるインスタンス全部へ自動デプロイしたいとなりました。（ちなみにインスタンスの立ち上げからの自動デプロイは[BootStrapパターン](http://dev.classmethod.jp/cloud/auto-scaling-deploy-userdata-capistrano/)を使用しています）
Gemやらあるかなと思ったのですが、現在のCapistrano 3およびaws-sdk 2に対応していて鉄板なものが見つからず、社内制手工業で依存が少なく安心して使えるものを書きました。

##実際の方法
### Gemの設定
2015/03/18現時点で最新のaws-sdk 2系を使います。

```rb:Gemfile
group :development do
  gem 'aws-sdk'
end
```

### aws-sdkのrequire
そしてちょっとハマりどころなのですが、aws-sdk 2で定義されているメソッドがcapistrano 3で定義されているメソッドとコンフリクトしてエラーが出るので、それを回避するために以下をCapfile冒頭に加えます。（[capistrano3とaws-sdk v2を組み合わせるとDefinitionErrorにハマった話](http://qiita.com/paty-fakename/items/e97b17a141b757226d12)に助けられました、ありがとうございます ( _ _)）

```rb:Capfile
require 'aws-sdk'
Aws::EC2::Resource
```

### 環境変数の設定
で、aws-sdkを使うために以下の環境変数を設定してあげます。

```
AWS_ACCESS_KEY_ID=your_access_key
AWS_SECRET_ACCESS_KEY=your_secret_access_key
AWS_REGION=ap-northeast-1 (this is for tokyo region)
```

### デプロイ時、ELB配下にあるインスタンスをデプロイ先に設定するコードを追加
最後に任意のdeploy設定ファイルに以下を加え完成です。Capistranoの設定ファイルは言語内DSLなので、こういう作業も楽ちんです。以下のSampleLoadBalancerNameは目的のロードバランサの名前に置き換えてください。環境変数にしてしまうのも良いと思います。

ここではInService状態のインスタンスにのみデプロイするようにしています。

```rb:config/deploy/production.rb
elasticloadbalancing = Aws::ElasticLoadBalancing::Client.new
instance_states = elasticloadbalancing.describe_instance_health(load_balancer_name: 'SampleLoadBalancerName').instance_states

target_instance_ids = []
instance_states.each do |instance_state|
  target_instance_ids.push instance_state.instance_id if instance_state.state == 'InService'
end

ec2 = Aws::EC2::Client.new
response = ec2.describe_instances instance_ids: target_instance_ids
ip_addresses = response.reservations.map {|r| r.instances.map {|i| i.public_ip_address } }.flatten

ip_addresses.each do |ip|
  server ip.to_s, user: 'deploy', roles: %w{web app db}
end
```

これはいわゆる以下の代わりです。

```rb:config/deploy/production.rb
server 'under-elb-server1.com', user: 'deploy', roles: %w{web app db}
server 'under-elb-server2.com', user: 'deploy', roles: %w{web app db}
server 'under-elb-server3.com', user: 'deploy', roles: %w{web app db}
...
```

### サーバとの認証についてワンポイント
最後にもう一つ。今回予期できない複数のホストへデプロイするので公開鍵認証で躓く場合があります。設定で秘密鍵の場所を指定してあげると良いかもしれません。

```rb:config/deploy/production.rb
if ENV['DEPLOY_ORIGIN'] == 'local'
  set :ssh_options, {
    keys: %w(~/.ssh/hogehoge/id_rsa),
    auth_methods: %w(publickey)
  }
end
```

ENVで分岐させてるのは、Circle CIでは指定してあげなくても何故か上手くいき（誰か教えて頂けると嬉しいです）、なおかつそれ以前にキーの場所が分からなかったからです。

こちらからは以上です。
wrkでhttpのベンチマークをするメモ

[参考]
http://memo.yomukaku.net/entries/kYIVkXx

*1.インストール*

```shell-session
cd /usr/local/src
git clone https://github.com/wg/wrk.git
cd wrk
make
cp wrk /usr/local/bin/wrk
```

*2.試験方法*

`wrk --version`
`wrk -t 4 -c 100 -d 10 https://hogehoge.com`

*結果*
```shell-session
Running 10s test @ https://hogehoge.com
  4 threads and 100 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     2.02s     1.41s    3.87s    49.30%
    Req/Sec    10.23      3.20    21.00     65.12%
  398 requests in 10.00s, 6.09MB read
  Socket errors: connect 0, read 0, write 0, timeout 161
```
GroovyからSSH接続してサーバへコマンド発行する

たまに、Groovy(Java)から別のサーバにSSH経由でコマンド発行したい時があります。
相手がREST API持ってたり、JavaのAPI持っていれば、そちらでアクセスするんだけど、相手がコマンド発行しかないような場合。
今回は、別サーバのMailmanとやり取りしたいというケース。

JavaベースでSSH接続するライブラリーは色々あるんだけど、今回は [ganymed-ssh2](https://code.google.com/p/ganymed-ssh-2/) を使ってみた。

```groovy
@Grab('ch.ethz.ganymed:ganymed-ssh2:262')

import ch.ethz.ssh2.Connection
import java.nio.charset.Charset

def con = new Connection("接続先IPアドレス", 22) // 接続ポート変える場合は、第2引数を変える
con.connect()

def result = con.authenticateWithPassword("ユーザ", "パスワード")
if (!result) {
    println "connect failed"
    return
}

// コマンド実行用メソッド
def exec(con, cmd) {
    def session = con.openSession()
    session.execCommand(cmd)
    def ret = session.stdout.text
    session.close()
    ret
}

def MM_DIR = "/usr/lib/mailman/bin"

// MLリスト取得（リスト名だけが欲しいためtailとsedをかませる
println exec(con, "${MM_DIR}/list_lists | tail -n +2 | sed -e 's/ -.*//g' -e 's/^ *//g'")

// MLに追加するメンバーアドレス
def list = ["aaa@aaa.com", "bbb@bbb.com", "ccc@ccc.com"]

// ヒアドキュメントにGStringを埋め込む
println exec(con, """${MM_DIR}/add_members -r - test-ml << _EOT
${list.join('\n')}
_EOT""")

con.close()
```
UIApplicationのNotificationや、applicationDidBecomeActiveの呼ばれる順番

# UIApplicationのNotificationや、applicationDidBecomeActiveの呼ばれる順番

最近swift勉強しています。

放置ゲーとか作ってみたいなと思って、アクティブになった時にcallするメソッドなどいろいろ見てたんですが、似てるのがすでにAppDelegateにあるので、結局どっちなの？ってことで呼ばれる順番とか調べてみました。


上から順番に呼ばれてます。

| アプリが起動した際に呼ばれる順番 |
| ------------ |
| **UIApplicationDidFinishLaunchingNotification** |
| **applicationDidBecomeActive()** |
| **UIApplicationDidBecomeActiveNotification** |


| アクティブ状態からバックグラウンドへ移動する際に呼ばれる順番 |
| ------------ |
| **applicationWillResignActive()** |
| **UIApplicationWillResignActiveNotification** |
| **applicationDidEnterBackground()** |
| **UIApplicationDidEnterBackgroundNotification** |



| バックグラウンドからアクティブになる際に呼ばれる順番 |
| ------------ |
| **applicationWillEnterForeground()** |
| **UIApplicationWillEnterForegroundNotification** |
| **applicationDidBecomeActive()** |
| **UIApplicationDidBecomeActiveNotification** |


Notification系は全てviewDidLoad()内で定義しています。

まだまだ素人なんで、それぞれの使い分けが解ってないです。

よかったら教えて下さい(´・ω・｀)
Pentaho Data IntegrationでGoogle BigQueryに接続

## 目的
- BigQueryのデータをPentaho Data Integration（PDI）で取り込む
- Google アナリティクスプレミアム（GAP）によるBigQueryエクスポートを想定しているが、他の用途にも応用できる（と思う）。

## 参考
- [BigQuery エクスポート - アナリティクス ヘルプ](https://support.google.com/analytics/topic/3416089?hl=ja)
- [Google BigQuery - Pentaho Data Integration - Pentaho Wiki](http://wiki.pentaho.com/display/EAI/Google+BigQuery)
- [JDBCURL - starschema-bigquery-jdbc - JDBC URL settings - Starschema BigQuery JDBC Driver - Google Project Hosting](https://code.google.com/p/starschema-bigquery-jdbc/wiki/JDBCURL)
- [Python - GAE SDKのdev_appserverで、サービスアカウントのP12キーを使う - Qiita](http://qiita.com/MiCHiLU/items/03034d966902e55a15f7)

## 作業手順
### GAP - BigQueryエクスポートのテスト環境を構築
下記に従ってBigQueryプロジェクトを作成し、GAのサンプルデータを準備する
- [BigQuery サンプル データセットを利用する - アナリティクス ヘルプ](https://support.google.com/analytics/answer/3416091?hl=ja)

### 認証情報の準備
[Google Developer Console](https://console.developers.google.com/project)にてサービスアカウントを作成して認証ファイルをダウンロードしておく
-- [JDBCURL - starschema-bigquery-jdbc - JDBC URL settings - Starschema BigQuery JDBC Driver - Google Project Hosting](https://code.google.com/p/starschema-bigquery-jdbc/wiki/JDBCURL)

### PDIコミュニティ版のダウンロード

- 事前にJavaをインストールしておく。
- [Data Integration | Pentaho Community](http://community.pentaho.com/projects/data-integration/)からプラットフォームにあったバージョンをダウンロードして解凍

### 追加クラスのインストール
[ダウンロードページ](https://code.google.com/p/starschema-bigquery-jdbc/downloads/list)から次のファイルをダウンロード

#### bqjdbc-1.4-standalone.jar
- PDIのlibディレクトリに入れる（libextだと動かなかった）

#### dependencies_for_kettle.zip
- 解凍したファイルをPDIの「data-integration\libswt\win32（もしくはwin64）」に入れる

## データコネクションの準備

### 新しいデータソースの追加
![image](https://qiita-image-store.s3.amazonaws.com/0/64819/faa0e7cf-1402-40bc-7008-0e911432a8de.png)
### コネクションを新規作成
![image](https://qiita-image-store.s3.amazonaws.com/0/64819/7497050c-21e7-c7ec-366c-a84cfadf09eb.png)
### データベース接続の設定
![image](https://qiita-image-store.s3.amazonaws.com/0/64819/47b568a5-e571-2f4f-dcd5-3b5ebcbf8f33.png)

| フィールド | 設定値 |
|:-----------|:-----------|
| 接続名 | 任意 |
| 接続タイプ | Generic database |
| Custom Connection URL| jdbc:BQDriver:**<<プロジェクトIDをURLデコード>>**?withServiceAccount=true |
| Custom Driver Class name | net.starschema.clouddb.jdbc.BQDriver |
| ユーザ名 | サービスアカウントのメールアドレス（クライアントIDではない）|
| パスワード | ダウンロードしたキーファイルへのパス（日本語を含まない方が吉）|

## クエリーの実行
- データを取得したいSQLを指定してプレビューを実行
xattrを取り除く

ターミナルでls -lahコマンドを叩くと@マークが付いているファイルが存在する時がある。

これはメタデータらしい。

## メタデータの内容確認
```
$xattr [file_name]
```

## メタデータの削除
```
$xattr -d [meta_name] [file_name]
```
meta_nameは上記の内容確認で出て来たものです。

誰かのお役に立てば。
Macで"rails s"したときの"http://localhost:3000"の"3000"を入力しなくても良いようにするコマンド

MacでRails開発するときは"rails s"しますね

```bash
bundle exec rails s
#=> Booting WEBrick
#=> Rails 4.2.0 application starting in development on #http://localhost:3000
#=> Run `rails server -h` for more startup options
#=> Ctrl-C to shutdown server
#[2015-03-18 17:30:22] INFO  WEBrick 1.3.1
#[2015-03-18 17:30:22] INFO  ruby 2.1.5 (2014-11-13) [x86_64-darwin13.0]
#[2015-03-18 17:30:22] INFO  WEBrick::HTTPServer#start: pid=93815 port=3000
```

起動すると" http://localhost:3000 "にアクセスしてくださいと言われます。が、
普通に" http://localhost/ "で開発したい。
"rails s -p 80"じゃめんどくさい

##素敵なコマンド
```bash
sudo ipfw add 100 fwd 127.0.0.1,3000 tcp from any to me 80
```

これで" http://localhost/ "のアクセスを" http://localhost:3000 "にアクセスしたときと同じようにアクセスできます。

##apacheとかtomcatのときは8000とか8080とか変えて上げるだけで素敵
```bash
sudo ipfw add 100 fwd 127.0.0.1,8000 tcp from any to me 80
```
```bash
sudo ipfw add 100 fwd 127.0.0.1,8080 tcp from any to me 80
```
jqueryを使った値の取得、操作一覧

つい忘れやすい項目をメモ

###値の取得

```js
var hoge = $("#huga").val();//指定した要素が持つvalue値を取得
var hoge = $("#huga").text();//指定した要素が持つ全てのテキストを取得
```

###クラス

```js
$("#huga").removeClass("class");//除去
$("#huga").addClass("class");//追加
```

###スクロール

```js
$("#huga").scrollTop();//位置取得
$("#huga").scrollTop(scrl);//位置の設定
```

###活性非活性

```js

$("#huga").attr("disabled", "disabled");//非活性化
$("#huga").removeAttr( "disabled" );//活性化
$("#huga").is( ":disabled" );//活性非活性の判定

```
###ラジオボタン

```js

$("#huga").attr("checked", true);//選択
$("#huga").prop('checked');//true:選択されている

```
###JSON文字列

```js

var huga_str = JSON.stringify(hoge_array);//エンコード
var hoge_array = JSON.parse(huga_str);//デコード

```
###要素の選択

```js

$("div").slice(0, 5);//要素集合から指定範囲のものを返す。ex)0~5

```
###配列

```js

huga_arry = jQuery.unique(hoge_arry);//配列の重複を削除

```

###正規表現

```js

var regex = new RegExp(文字列 ,フラグ);//文字列をフラグに沿った正規表現へ

```
###要素の指定

```js

$("#huga").parent();//hugaの親要素
```
awk > 1列目以外を表示する > awk '{$1=""; print}'

動作環境

    CentOS 6.5

awkにて1列目だけ非表示にしたい時

```
$echo "1 2 3 4 5" | awk '{$1=""; print}'
2 3 4 5
```

[参考](http://d.hatena.ne.jp/chia1220jp/20110426/1303784073)
JavaScriptとPHPの論理値の比較

下記の投稿で論理値の確認をしましたが、似たような項目を表にしておきます。
他の言語についてもご存知の方いらっしゃいましたら、後学の為にも編集リクエストもらえたらなんて都合のいいこと考えています :smirk: 

* [JavaScriptの論理値・論理否定](http://qiita.com/hrdaya/items/d3ce0d6270ab4d0deaeb)
* [PHPの論理値・論理否定・isset()・empty()の比較](http://qiita.com/hrdaya/items/2682ea4fe4699c417785)

|調べた値|JavaScript|PHP|備考|
|:-----------|:------------:|:------------:|:-----------|
|Boolean（true）|**true**|**true**||
|Boolean（false）|false|false||
|数値（0）|false|false||
|数値（1）|**true**|**true**||
|数値（NaN(非数値)）|false|**true**|PHPは`is_nan()`と同値となる|
|数値（0==null）|false|**true**||
|文字列（0）|**true**|false||
|文字列（1）|**true**|**true**||
|空の文字列|false|false||
|半角スペース|**true**|**true**||
|NULL|false|false||
|未定義の変数$a|false|false||
|未定義の変数$a == null|**true**|**true**||
|未定義の変数$a === null|false|**true**||
|未定義の変数$a === undefined|**true**| - |PHPに`undefined`はない|
|空の配列|**true**|false||
|値を返さない関数|false|false||
|0を返す関数|false|false||
|1を返す関数|**true**|**true**||
|関数オブジェクト|**true**|**true**||
チャート、グラフを書くのに良さそうなJavascriptライブラリ6選


Javascriptのライブラリはたくさんあるけれど、いろんな統計分析結果を表示するのに良さそうなライブラリは意外と限られてます。
そんな図/グラフ描画用Javascriptライブラリを画像とともにまとめておきました。

## [NVD3.js](http://nvd3.org/)

ライセンス: Apache 2.0

[D3.js](http://d3js.org/)で作られたチャート描画用ライブラリ。グニュグニュ動いてカッコいいが複雑なものを使うとバグを踏んだりする。git hub管理されているのでパッチを投げるのは比較的簡単。

[![nvd3.png](https://qiita-image-store.s3.amazonaws.com/0/6664/d25d9c3a-7f44-4fe6-f67a-a510659785b1.png "nvd3.png")](http://nvd3.org/examples/index.html)


## [Vis.js](http://visjs.org/)

ライセンス: Apache 2.0 / MIT

グラフ理論的なグラフを描くのが主眼のライブラリだが、棒グラフ、折れ線グラフなどは描ける。パイチャートは描けない。

[![visjs.png](https://qiita-image-store.s3.amazonaws.com/0/6664/01c4095e-3fcd-d966-a2f0-63f4a89f4948.png "visjs.png")](http://visjs.org/)

## [Google Charts](https://developers.google.com/chart/)

ライセンス: completely free

言わずと知れたGoogle先生のライブラリ。使いやすいが、見慣れているせいか少しダサく感じるのが欠点。GeoChartが書けるのが良い。

[![google_chart.png](https://qiita-image-store.s3.amazonaws.com/0/6664/a4ee1f4a-d2c5-e7cc-cf3d-b8f3fc96422c.png "google_chart.png")
](https://developers.google.com/chart/interactive/docs/gallery)

実はもっと複雑なのも書ける
https://developers.google.com/chart/interactive/docs/more_charts

## [Chart.js](http://www.chartjs.org/docs/)

ライセンス: MIT

シンプルなライブラリ

[![Chartjs.png](https://qiita-image-store.s3.amazonaws.com/0/6664/7dd57fc5-cc8b-bffb-f6ab-35d6548644da.png "Chartjs.png")](http://www.chartjs.org/docs/)


## [HighChart.js](http://www.highcharts.com/)


ライセンス: Creative Commons 3.0 (個人利用では無料)
https://shop.highsoft.com/highcharts.html

めちゃくちゃ高いけれど、よく出来ているライブラリ。

[![Highcharts demos.png](https://qiita-image-store.s3.amazonaws.com/0/6664/c0bc30b3-861b-19a4-dae1-4f4e9bb79bfb.png "Highcharts demos.png")](http://www.highcharts.com/demo)


## [CanvasJS](http://canvasjs.com/)

ライセンス: Creative Commons 3.0 (個人利用では無料)
http://canvasjs.com/license-canvasjs/

HighChartより見劣りはするけれど、基本的なグラフは揃っていて現実的な価格帯のライブラリ。

[![canvasjs.png](https://qiita-image-store.s3.amazonaws.com/0/6664/4792208e-6572-442d-481d-1c4aa98cf085.png "canvasjs.png")](http://canvasjs.com/html5-javascript-column-chart/)
CircleCIで任意のprivateリポジトリをcloneする

自動的にCircleCIがいい感じに調整してくれるのでGitHubのprivateリポジトリをCircleCIでテストするのは簡単ですが、テスト過程で他のprivateリポジトリをcloneするにはちょっとした工夫が必要になります。

## CircleCIにuser keyを登録する

まずCircleCIの "Project settings" > "Checkout SSH keys" に行きます。

![image](https://qiita-image-store.s3.amazonaws.com/0/153/76d04065-3172-a2fd-13bf-e5a69cadf684.png)

みたいなのがあるので、ボタンをクリックします。するとGitHubのOAuthページが表示され公開鍵への書き込み権限を要求されるので許可します。

これによりあなたのGitHubアカウントに新しい公開鍵が設定され、それに対応する秘密鍵がCircleCI上に登録されます。なので、あなたがアクセス権限を持つGitHub上のPrivateリポジトリにはこの時点で全てこのCircleCIのプロジェクトからはアクセスできるようになります。

## GitHub外のPrivateリポジトリにアクセスできるようにする

GitHub以外のサービスや自分でホストしているPrivateリポジトリにアクセスできるようにするには、今回GitHubに登録された公開鍵を入手し、それを各種サービスに登録していく必要があります。

GitHubはユーザページのURLの末尾に .keys をつけるとそのユーザの公開鍵を表示する機能があるのでそれを使うと簡単に公開鍵を入手することができます。

https://github.com/USERNAME.keys

その中で恐らく一番下にある公開鍵がCircleCIによって追加されたものなので、この公開鍵を登録すればCircleCIからそのリポジトリにアクセスできるようになります。
SpringBootでチャットアプリを作る

DynamoDB(Local)とwebsocketを軽く触ってみたので、今度はSpringBootでチャットアプリのサンプルを作ってみます。

### 環境
---
 * windows7
 * eclipse Luna
 * java8(1.8.0_25)
 * dynamodb_local_latest
 * spring-boot(1.2.2)

### windows版DynamoDBLocalのインストールと起動確認
---
1. http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Tools.DynamoDBLocal.html より「zip」版をダウンロードする
2. 任意のフォルダで解凍する(私はC:¥直下にdynamodbフォルダを作成し、そこに解凍しました)
3. コマンドプロンプトを起動し、上記フォルダに移動する
4. 以下のコマンドを実行

```bash
java -Djava.library.path=.¥DynamoDBLocal_lib -jar DynamoDBLocal.jar
```
※ctrl+cで終了できます

### テーブル構成
---
今回は以下のようなテーブル構成にします

chatテーブル

| 名称 | 型 | 構造 | 用途 |
|:---|:---|:---|:---|
| `room_id` | N(Numeric) | HASH | |
| `commented_datetime`| S(Srting) | RANGE | |
| `user_name` | S(String) |-| ユーザ名称 |
| `message` | S(String) |-| 文章 |

1. 上記「room_id」「commented_datetime」はcreate tableを行うときに必要
2. 「user_name」「message」はcreate table時には必要無いが、データを登録するときに使う

### ソース
---
ソースはGitHubにありますので参考にしてください。
https://github.com/duke-gonorego/WebsocketChatSample
※これ以降DynamoDBLocalへの操作はソースを利用して説明します。

### テーブルの作成、初期データ登録
---
ソース内のテストクラスを使ってテーブルを作成します

```java:DynamoDBAPITest.java
@Ignore
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
public class DynamoDBAPITest {
```
※テスト実施前にIgnoreを外してください

作成します

```java:DynamoDBAPITest.java
	@Test
	public void createTableTest() throws Exception {
		dynamoDBAPI.createTable();
	}
```
※上記メソッドのテスト実行をしてください。

テーブルが作成されたか確認します

```java:DynamoDBAPITest.java
	@Test
	public void getTableInformationTest(){
		dynamoDBAPI.getTableInformation();
	}
```
※コンソールログにテーブル構成が出力されます

データ登録

```java:DynamoDBAPITest.java
	@Test
	public void putTest() {
		
		for (int i = 0; i < 10; i++) {
			ChatItem chatItem = new ChatItem();
			chatItem.setUserName("test" + String.valueOf(i));
			chatItem.setMessage("hogehogehoge" + String.valueOf(i));
			dynamoDBAPI.put(chatItem);
		}
	}
```

データ確認

```java:DynamoDBAPITest.java
	@Test
	public void getAllTest(){
		
		System.out.println(dynamoDBAPI.getAll());
	}
```
※データ登録が上手くいっていればコンソールログにselect結果が出力されます

### SpringBoot起動
---
※その前に「DynamoDBAPITest.java」の@Ignoreを再度つけてください

1. ~~~.jarを作成する
2. 「Run As」⇒「Java Application」⇒「Appliation - com.websockettest」選択して起動

### ブラウザで確認
---

1. http://localhost:8000/login にアクセス
2. user1/password1 を入力してログイン
3. 事前にデータを登録している場合はデータが画面に表示されます
4. 「connect」ボタンを押してからメッセージを入力し、sendmessageボタンをクリックします
5. 入力したメッセージが表示されます(このメッセージはwebsocket経由でリクエストし、レスポンスされたメッセージです)
6. 画面をリロードしても入力したメッセージが表示されます(このメッセージはDynamoDBLocalに先ほど登録されたメッセージを取得し、表示しています)

### メモ
---
 * SpringSecurityを使った理由：ログインユーザのメッセージをユーザ名称とともにDynamoDBLocalに登録するとき、認証の為だけにDBを用意するのが面倒だったので。。
 * リクエストされたメッセージを受けるcontroller(MessageController)でSpringSecurityで認証されたユーザ名を取得する方法が不明だった。。(のでChatControllerで無理矢理thymeleafに渡すというお寒いやり方に。。)
 * とりあえずDynamoDBLocalにメッセージ保存/取得、websocketでメッセージのやりとりを確認したかっただけなので、それだけの実装しかしていません。。
たった2行で簡易画像Proxyサーバを作る

DocumentRootにphpファイルを一個置いて、

```php:proxy.php
<?php
header("Content-type:image/png");
echo (file_get_contents("https://" . substr($_SERVER['PATH_INFO'],1)));
```

下記のようなURLにアクセスしてみると、あーら不思議、Googlのロゴが表示されます！！

http://localhost/proxy.php/www.google.co.jp/images/srpr/logo11w.png

![google](https://www.google.co.jp/images/srpr/logo11w.png)

* あくまで簡易実装なので、大規模環境ではNginxやApacheのレイヤでやるのがいいと思います。
* この例ではHTTP 4xx,5xxのエラーをハンドリングできてないので、ちゃんとやるならやったほうがいいでしょう
* Content-typeを動的に決定するようにすれば画像以外にも対応できます。
Symbol.all_symbols.include?は常に真を返すこととその回避策

## 現象

```rb
Symbol.all_symbols.include? :hogefugafoobar
# => true
```

!?
これではシンボルが実行環境に存在するかどうか確認できない…

## 理由
`include?`の引数が評価されるタイミングで引数のシンボルが実行環境に登録されてしまうようです。

【追記】
正確には、スクリプトの構文解析のタイミングでシンボルテーブルにシンボルが追加されるようです。
【追記終わり】

## 回避策

【追記】
以下の方法はirbでのみ有効です。
【追記終わり】

シンボルが評価された時点で実行環境に登録されることは回避できないので、配列を`freeze`することで回避します。

```rb
symbols = Symbol.all_symbols.freeze
symbols.include? :hogefugahogefuga
# => false
```

【追記】
以下の方法は通常のスクリプトでも有効です。

シンボルとして構文解析させてはダメなので、直前まで文字列として評価されるような方法であればうまくいきます。例えば、

```rb
# 文字列をto_sym
Symbol.all_symbols,include? 'hogefoo'.to_sym
# => false

# 文字列をeval
eval 'Symbol.all_symbols,include? :foofoobarbar'
# => false
```
【追記終わり】

やったね！
linux > バイナリファイル内のASCII文字を抽出 > strings [ファイル] 

動作確認

    CentOS 6.5

偶然[こちら](http://d.hatena.ne.jp/moroto1122/20090716/1247732408)で見つけた方法。

オプションなしでは4文字以上のASCII文字の部分を表示してくれる。

```    
$ strings sample.bin
...
Undefined error status
         (((((                  
AAAAAA
BBBBBB
EEEIII
...
`
CakePHP 環境別設定ファイルの切り替えについて

##はじめに
bootstrap.phpにドメインによって設定を切り替わる処理を記載していたのですが、
リリース事故が起きそうな気がしたので、色々試してみて、下記をアレンジした方法に落ち着きました。

参照：[CakePHPで開発環境と本番環境の切り替え](http://www.b-prep.com/blog/?p=1255)
app/Config/Env/以下に環境判別用のファイルを作成して、読み込む設定ファイルを切り替えます。
（開発環境は設定しなくてOK!）

##組んでみる
*下記のファイルを作成*
・環境確認用：app/Config/Env/[CAKE_ENV] （空ファイルでOK）
・環境別設定ファイル：app/Config/[CAKE_ENV]/envConfig.php
・環境別DBファイル：app/Config/[CAKE_ENV]/database.php（app/Config/database.php.defaultのフォーマットでOK）

```php:app/Config/bootstrap.php
<?php
require_once(APP . DS . 'Lib' . DS . 'Env.php');
Env::loadEnv();
Env::loadConfig();
```
```php:app/Config/database.php
<?php
require_once Configure::read('CAKE_ENV') . DS . basename(__FILE__);
```
```php:app/Lib/Env.php
<?php
Class Env {
	const DEV = 'Development';
	const STG = 'Staging';
	const PRO = 'Production';

	// デフォルト開発環境
	static function loadEnv() {
		$envList = array(self::PRO, self::STG, self::DEV);
		foreach ($envList as $env) {
			if (is_file(APP . 'Config' . DS . 'Env' . DS . $env)) {
				break;
			}
		}
		Configure::write('CAKE_ENV', $env);
	}

	static function loadConfig() {
		$envPath = APP . 'Config' . DS . Configure::read('CAKE_ENV') . DS . 'envConfig.php';
		if (is_file($envPath)) {
			include_once $envPath;
		}
		else {
			echo 'file is not found ' . $envPath;
			exit;
		}
	}
}
```

##最後に
app/Config/Envをコミットしなければ、設定ファイル切り替えによる事故はない！（はず）
開発環境ではapp/Config/Envを設定しなくても良いので、コミットしてしまうこともなさそうです。
Hash クラスのメソッドを類似グループ分け

個人的なイメージです。
Hash クラスのメソッドの全てではありません。念のため。

要素取得: `[]`/`fetch`/`key`/`values_at`/`shift`
要素挿入: `[]=`(`store`)/`merge`/`merge!`(`update`)
デフォルト値: `default`/`default=`/`default_proc`
要素を削除する（返値注意）: `delete`/`clear`
条件に従い要素を削除する（返値注意）: `delete_if`/`reject!`/`keep_if`/`select!`
条件を満たす要素を抜き出したハッシュ: `select`/`reject`（`find_all`は`select`と異なり配列）
キーと値を入れ替えたハッシュ: `invert`
全キー/全値の配列: `keys`/`values`
ソートした配列: `sort`
平滑化した配列: `flatten`
キー/値を持つペアの配列: `assoc`/`rassoc`
要素それぞれ: `each`(`each_pair`)/`each_key`/`each_value`
存在確認: `include?`(`member?`)(`key?`)(`has_key?`)/`value?`(`has_value?`)
変換: `to_s`(`inspect`)/`to_a`/`to_h`/`to_hash`
比較: `==`(`===`)(`eql?`)/`equal?`
浅い複製: `dup`/`clone`
数量: `size`(`length`)/`empty?`

これらに加えて [Enumerable モジュールのメソッド](http://qiita.com/riocampos/items/a0527e4e654a4021e0dc) も。

参考：[class Hash](http://rurema.clear-code.com/2.2.0/class/Hash.html)

関連：

- [Ruby - Enumerable モジュールのメソッドを類似グループ分け - Qiita](http://qiita.com/riocampos/items/a0527e4e654a4021e0dc)
- [Ruby - Array クラスのメソッドを類似グループ分け - Qiita](http://qiita.com/riocampos/items/6fdc5ce90eda53e18228)
- [Ruby - String クラスのメソッドを類似グループ分け - Qiita](http://qiita.com/riocampos/items/b678e1a535470dc614cf)
JavaScript で +0 と -0 を判別する

[データ型(JavaScript) - MSDN](https://msdn.microsoft.com/ja-jp/library/ie/7wkd9z69%28v=vs.94%29.aspx)

> 正の 0 および負の 0。 JavaScript では、正のゼロと負のゼロが区別されます。

と、言いつつ +0 と -0 は区別されていないように見えますが、

```js
+0 === -0; // true
```

内部では区別されていて [浮動小数点](http://ja.wikipedia.org/wiki/%E6%B5%AE%E5%8B%95%E5%B0%8F%E6%95%B0%E7%82%B9%E6%95%B0) の符号部をチェックすることで判別可能で、

```js
function isNegativeZero(x) {
  return x === 0 && new Uint8Array(new Float32Array([ x ]).buffer)[3] === 128;
}

function isPositiveZero(x) {
  return x === 0 && new Uint8Array(new Float32Array([ x ]).buffer)[3] === 0;
}
```

```js
isNegativeZero(+0); // false
isNegativeZero(-0); // true
isPositiveZero(+0); // true
isPositiveZero(-0); // false
```

テストで雑に deepEqual したときにエラーで弾かれる場合があります。

```js
assert.deepEqual(new Float32Array([ +0 ]), new Float32Array([ -0 ]));
// ↑ テストに失敗する
```
Androidのlintチェックの基本

# チェック方法

下記コマンドを実行するだけ

```
$ ./gradlew check
```

実行結果は `$buildDir/outputs/lint-results.html` に出力される。

```
:app:lint
Wrote HTML report to file:/Users/mattak/project/sample/app/build/outputs/lint-results.html
Wrote XML report to /Users/mattak/project/sample/app/build/outputs/lint-results.xml
:app:preCompileDebugUnitTestJava
```

# lintのオプション設定

何かエラーが出てcheck taskが失敗することは多々ある。
利用しているライブラリの都合でlintチェックが失敗しており、対応が行えない項目などがあるかもしれない。
そのようなと場合には、lintOptionsを設定して回避することができる。

## 例: okhttpの Invalid package reference in library

例えば [okhttpのissue#896](https://github.com/square/okhttp/issues/896) で報告されているようなケースを除外する。

![okio_lint_error.png](https://qiita-image-store.s3.amazonaws.com/0/15000/cec34c7d-d63d-fa1e-c90d-f54482f3c1f2.png)

1) build.gradleにlintOptionsのlintConfigファイルを指定する。

```groovy:build.gradle
android {
    lintOptions {
        lintConfig file('lint.xml')
    }
}
```

2) lint.xmlで指定のパッケージを除外する

```xml:lint.xml
<?xml version="1.0" encoding="UTF-8"?>
<lint>
    <issue id="InvalidPackage">
        <ignore regexp="okio-1.0.1.jar" />
    </issue>
</lint>
```

これでbuildすれば lint checkが通るようになる。

# lint optionsの詳細

より詳しくは下記を参照

- [Improving Your Code with lint](http://developer.android.com/tools/debugging/improving-w-lint.html)
IT企業の公開してるプログラミング教材とかまとめ

#プログラミング教材

## mixi
* [AndroidTraining](http://mixi-inc.github.io/AndroidTraining/)
* [iOSTraining](https://github.com/mixi-inc/iOSTraining/wiki)

## Hatena
* [はてな教科書](https://github.com/hatena/Hatena-Textbook)
 - Perl、Plack、JS、iOSなど

## Kayac
* [2013年技術部新卒研修](https://github.com/kayac/newbie-training)
 - Perl、Chef、MySQLなど

## ZIGExN
* [Webスクレイピングを用いたデータ検索クローラ構築入門](https://github.com/ZIGExN/ruby-trailning/wiki/Web%E3%82%B9%E3%82%AF%E3%83%AC%E3%82%A4%E3%83%94%E3%83%B3%E3%82%B0%E3%82%92%E7%94%A8%E3%81%84%E3%81%9F%E3%83%87%E3%83%BC%E3%82%BF%E6%A4%9C%E7%B4%A2%E3%82%AF%E3%83%AD%E3%83%BC%E3%83%A9%E6%A7%8B%E7%AF%89%E5%85%A5%E9%96%80)
 - Rubyでの説明です

## Gree
* [Haskell-Tutorial](https://github.com/gree/haskell-tutorial/wiki)

## Dwango
* [Scala研修テキスト](http://dwango.github.io/scala_text/)

# ガイドライン

## mixi
* [スマホアプリ品質ガイドライン](http://mixi-inc.github.io/guidelines/qa/smartphone/guideline.html)

## Cookpad
* [Rubyコーディング規準](https://github.com/cookpad/styleguide/blob/master/ruby.ja.md)
* [Objective-Cコーディング基準](https://github.com/cookpad/styleguide/blob/master/objective-c.ja.md)
* [Javaコーディング規約](https://github.com/cookpad/styleguide/blob/master/java.ja.md)

## GMOペパボ
* [pepabo.github.io](http://pepabo.github.io/)
 - GMOペパボの技術文書など
 - AltJSや、JSフレームワークについての解説あり

# あとがき
探し方が悪かったのか、思いの外あんまり見付からなかったので、他に参考になりそうな教材などあればコメントお待ちしてます。
python-twitterで任意の文字列をツイート

raw_inputで任意の文字列を受け取りTwitterへ投稿するだけのスクリプト。
エラーの時はエラー返したほうがいいのかと思いながらまぁいいかとか。

python-twitterを使用しました。

```python:tweetform.py

#!/usr/bin/env python
import twitter
import sys, codecs
sys.stdout = codecs.getwriter("utf-8")(sys.stdout)

CONSUMER_KEY = "****************************"
CONSUMER_SECRET = "****************************"
ACCESS_TOKEN_KEY = "****************************"
ACCESS_TOKEN_SECRET = "****************************"
 
api = twitter.Api(consumer_key=CONSUMER_KEY,
                  consumer_secret=CONSUMER_SECRET,
                  access_token_key=ACCESS_TOKEN_KEY,
                  access_token_secret=ACCESS_TOKEN_SECRET)
                  
msg = raw_input("message in:")
                  
status = api.PostUpdate(msg)
print "TweetSuccess: " + status.text

```

cgiserverモジュールをローカルで走らせて、ブラウザ上でツイートするものは以下。

```python:tweetlocaform.py

#!/usr/bin/env python
import cgi
import twitter
import sys, codecs
sys.stdout = codecs.getwriter("utf-8")(sys.stdout)

print "Content-Type: text/html\n"

print """
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<form method="post" action="tweetwebform.py">
<textarea maxlength="140" rows="4" cols="35" name="message"></textarea>
<input type="submit" name="submit" value="SEND">
</form>
"""

form = cgi.FieldStorage()
message = form.getvalue("message","")


CONSUMER_KEY = "**************************"
CONSUMER_SECRET = "**************************"
ACCESS_TOKEN_KEY = "**************************"
ACCESS_TOKEN_SECRET = "**************************"
 
api = twitter.Api(consumer_key=CONSUMER_KEY,
                  consumer_secret=CONSUMER_SECRET,
                  access_token_key=ACCESS_TOKEN_KEY,
                  access_token_secret=ACCESS_TOKEN_SECRET)  
	
                  
status = api.PostUpdate(message)
print "TweetSuccess: " + status.text

print "</body></html>"

```
Gradle がディスクを圧迫するので光の彼方へ消え去ってもらう

手元で幾つかのプロジェクトをビルドしまくっていると、ゴミキャッシュが溜まっていきます。ライブラリのアップデート、Gradle Wrapper 自体のアップデート、これらによって古いものは堆積していきますが、特に Gradle Wrapper に関しては一つのバージョンだけでもかなりの容量を食います。1.8 から 2.2 くらいまでためていると、実に 6~7GB ほどの容量を食います。

なんとかして Gradle のゴミを光の彼方へ消し去りたいのですが、それらしきコマンドは見つかりません。

というわけで、そんなときは以下のようにアグレッシブな行動で解決します。

```
$ rm -rf ~/.gradle
```

これによって何か深刻な問題があるかというと、キャッシュが消えるのでその分ビルド時間が長くなる以外には無いようです。

ちなみに、Android Studio のキャッシュもそれなりに容量を食います。3GB ほど。ディスクが足りなくなったら是非キャッシュを消してみてください。
RailsでHeroku の DB(Postgres) にローカルや外部サーバーなどからアクセスする方法


# HerokuのPostgresの情報を見つける

```rb
$ heroku pg:info --app appname
=== HEROKU_POSTGRESQL_HOGE_URL (DATABASE_URL)
Plan:        Hobby-dev
Status:      Available
Connections: 1/20
PG Version:  9.3.6
Created:     2014-01-01 01:00 UTC
Data Size:   0.1 MB
Tables:      1
Rows:        1/10000 (In compliance)
Fork/Follow: Unsupported
Rollback:    Unsupported
```

```rb
$ heroku pg:credentials HEROKU_POSTGRESQL_HOGE --app appname
Connection info string:
   "dbname=db host=host port=port user=user password=password sslmode=require"
Connection URL:
    postgres://hogehoge~~~~
```

この情報を使っていきます。

# pryで試してみます

```rb
Frame number: 0/6
[1] pry(main)> require 'pg'
true
[2] pry(main)> require 'active_record'
false
[3] pry(main)> ActiveRecord::Base.establish_connection(
[3] pry(main)*   adapter:  'postgresql',
[3] pry(main)*   host:     'host',
[3] pry(main)*   database: 'db',
[3] pry(main)*   port:     port,
[3] pry(main)*   username: 'user',
[3] pry(main)*   password: 'password',
[3] pry(main)*   sslmode:  'require'
[3] pry(main)* )
#<ActiveRecord::ConnectionAdapters::ConnectionPool:0x007f287aaba640
　・
　・
　・

[4] pry(main)> ActiveRecord::Base.connection.execute("SELECT version()").first
   (226.5ms)  SELECT version()
{
    "version" => "PostgreSQL 9.3.6 on x86_64-unknown-linux-gnu, compiled by gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3, 64-bit"
}

# 生SQLを使う版
[5] pry(main)> ActiveRecord::Base.connection.execute("SELECT * from hoges;").first
   (525.7ms)  SELECT * from product_comments;
{
                             "id" => "1",
                               .
                               .
                               .
}

# ActiveRecordを使う版
[6] pry(main)> Hoge.first
{
                             "id" => "1",
                               .
                               .
                               .
}
```

# コードでは

```
  def get_data_from_heroku_pg
    require 'pg'
    require 'active_record' # 必要あれば

    # Change the following to reflect your database settings
    ActiveRecord::Base.establish_connection(
      adapter:  'postgresql',
      host:     'host',
      database: 'db',
      port:     port,
      username: 'user',
      password: 'password',
      sslmode:  'require'
    )

　　・
　　・
　　・
```

# References

http://stackoverflow.com/questions/11709560/is-it-possible-to-directly-connect-to-a-heroku-database-from-localhost
Excelショートカットメモ：セルの背景色を「塗りつぶしなし」にする

Excel単純作業を少しでもマウス無しで。

一行ずつ作業をして、どこまで行ったかわかりづらいから、
色を付けておいて、作業が終わった時に色を変えたい。
そんな時は・・・・。

# ショートカット
Alt,H,H,N


-----
pipでローカルにGitクローンしたパッケージをインストールする手順

# 概要

pip コマンドでリモートの PyPI (Python Package Index) からではなく, ローカルにクローンした Git リポジトリからパッケージをインストールする方法についてのメモ書きです。

次の環境を想定していますが, Linux 環境でも同様に操作できると思います。

* MacOSX (Version 10.9.5)
* Python 3.4.2

## 動機

ある程度の規模のアプリケーションを Python で書いていると, pip でインストールしたパッケージに変更を加えたいことがあると思います。そのときに直接コードを書き換えると変更を元に戻すのが困難だし, 変更を上流に還元することが困難です。

ローカルにクローンした Git (ないし Mercurial) のリポジトリを Python パッケージとみなして pip でインストールすることができれば, この問題を解決することができます。

## 手順

適当なパスに Python パッケージをクローンします。ここでは Django を /tmp の下にクローンしてみます。

```
cd /tmp && git clone git@github.com:django/django.git
```

`$HOME` の下に適当な Virtualenv を作ります。Python 2.x を使っている方は pyvenv を virtualenv に置き換えて読んでください。

```
pyvenv ~/dummy-project
source ~/dummy-project/bin/activate
```

先ほどクローンした Django を pip でインストールします。

```
pip install -e /tmp/django
```

さて, ここでインストールされた Django の `django-admin.py` がどうなっているか確認してみましょう。

```
cat ~/dummy-project/bin/django-admin.py
#!/Users/aeas44/dummy-project/bin/python3.4
# EASY-INSTALL-DEV-SCRIPT: 'Django==1.9.dev20150318000307','django-admin.py'
__requires__ = 'Django==1.9.dev20150318000307'
import sys
from pkg_resources import require
require('Django==1.9.dev20150318000307')
del require
__file__ = '/private/tmp/django/django/bin/django-admin.py'
if sys.version_info < (3, 0):
    execfile(__file__)
else:
    exec(compile(open(__file__).read(), __file__, 'exec'))
```

注目すべきは `__file__ = '/private/tmp/django/django/bin/django-admin.py'` の行です。MacOSX では `/tmp` は `/private/tmp` にシンボリックリンクされているので, これは先ほど `/tmp` にクローンした Django が実態となっていることを意味しています。

`/tmp` にクローンしたリポジトリを編集することで, 再インストールすることなく変更がプロジェクトに反映されます。必要があれば, 変更をコミットし, 上流に還元することも可能です。
h2 を intellij idea の Database Windowから眺められなくてはまってた

# Pathはフルパスに
「./target」とかにしたら、ideaの実行パスなのか、どこかわからない所で.dbが作られてるっぽい

# Driverのバージョンは合わせる

手元のIDEA(14.0.2)のEmbeddedなdriverが 1.3.175。指定してたのが、1.4.184
生成されるファイルが

* 1.3.175は $dbName$.h2.db
* 1.4.184は $dbName$.mv.db

なので、どうあっても読みこんでくれない。


# ;AUTO_SERVER=TRUE

Databaseにつけておくと複数プロセスからも見れる
弊害がわかってないので油断は禁物


参考にしました。
http://qiita.com/seratch@github/items/fe2e9b7666389c431283
Array クラスのメソッドを類似グループ分け

個人的なイメージです。

要素取得: `slice`(`[]`)/`slice!`/`at`(`[]`)/`fetch`/`first`/`last`/`values_at`/`sample`（`slice!`の返値注意）
要素の位置を取得: `index`(`find_index`)/`rindex`
配列先頭での処理: `shift`/`unshift`
配列末尾での処理: `pop`/`push`/`concat`/`<<`/`+`
要素挿入: `insert`/`[]=`
要素置き換え: `fill`/`replace`
条件に従い要素を削除: `delete_if`/`keep_if`
条件に従い要素を削除（返値注意）: `reject!`/`select!`
要素削除: `clear`/`-`
要素削除: `delete`/`delete_at`（`delete`の返値注意）
`nil`除去: `compact`/`compact!`（`compact!`の返値注意）
重複削除: `uniq`/`uniq!`（`uniq!`の返値注意）
要素順入れ替え: `reverse`/`reverse!`/`rotate`/`rotate!`/`shuffle`/`shuffle!`/`sort`/`sort!`/`sort_by`/`sort_by!`
要素を元に配列を作り置き換える: `map!`(`collect!`)
組み合わせて配列を作る: `zip`
平滑化: `flatten`/`flatten!`（`flatten!`の返値注意）
変換: `join`/`to_s`(`inspect`)/`pack`/`to_a`/`to_ary`/`to_h`/`*`
要素それぞれ: `each`/`each_index`/`reverse_each`
浅い複製: `dup`/`clone`
数量: `size`(`length`)/`empty?`
比較: `<=>`/`==`/`eql?`
順列・組み合わせ: `permutation`/`repeated_permutation`/`combination`/`repeated_combination`
行列演算: `transpose`
集合演算: `&`/`|`/`product`
Hash的配列（配列の配列）の要素を一つ返す: `assoc`/`rassoc`
ソート済み配列を二分探索: `bsearch`

これらに加えて [Enumerable モジュールのメソッド](http://qiita.com/riocampos/items/a0527e4e654a4021e0dc) も。

参考：[class Array](http://rurema.clear-code.com/2.2.0/class/Array.html)

関連：

- [Ruby - Enumerable モジュールのメソッドを類似グループ分け - Qiita](http://qiita.com/riocampos/items/a0527e4e654a4021e0dc)
- [Ruby - Hash クラスのメソッドを類似グループ分け - Qiita](http://qiita.com/riocampos/items/46cf01b1753ef8a1d081)
- [Ruby - String クラスのメソッドを類似グループ分け - Qiita](http://qiita.com/riocampos/items/b678e1a535470dc614cf)
新デザインになった Qiita:Team をより見やすくする Chrome 拡張を作りました

どもです！仕事では Confluence と esa.io と Qiita:Team が入り乱れる環境でドキュメントを書きなぐっています。さて、このたび Qiita:Team 先生のデザインが刷新されましてモダンな雰囲気になって嬉しい半面、ちょっと横幅が狭めで横に長いタイプのテーブルが読みにくくなったりしておりました。

とりあえず自分用にさっくり CustomCSS でやっちゃおうかなとおもったんですが、それなりに需要を感じたので Chrome Extension にして配布してしまうことにしました。

https://chrome.google.com/webstore/detail/lean-qiita-team/cmmapiojknfnhfjcmjlbbklkookmgbhm

インストールしますと

![s1.png](https://qiita-image-store.s3.amazonaws.com/0/25679/f3557132-e1c1-9d7a-b6e0-c3493226ccf2.png)

という感じで記事に画面を割いて表示することができるようになります。また、サイドバーは

![s2.png](https://qiita-image-store.s3.amazonaws.com/0/25679/afdcb8ae-682b-188b-7cc8-9859801580ae.png)

ヘッダらへんのボタンにしれっとトグル用のボタンをぶっこんで表示/非表示を切り替えられるようにしました。あとトップページもちょっと横幅が広くなるようにしました。

とりあえずこんだけなんですが、キーボードショートカットなんかもあるといいのかな、などと考えているので気が向いたらつくります。コードはいつもどおり Github に公開しているのでなんでもどうぞー。

https://github.com/e-jigsaw/lean-qiita-team

ではでは。
RailsのモデルをER図で出力する


[rails-erd](https://github.com/voormedia/rails-erd)

# 実行環境

|Enviroment|Version|
|----|----|
|OSX|10.9.4|
|Rails|4.2.0|


# rails-erdをインストールする

## 追記

```bash
$ vi ./Gemfile
```

```ruby:Gemfile
group :development do
	gem 'rails-erd'
end
```

## インストール

```
$ bundle install
```

## 依存関係のライブラリをインストールする

```bash
$ brew install graphviz
```


# ER図を作成し、表示する

```bash
$ bundle exec erd --open
```

`--open`オプションで自動的に`erd.pdf`を開く

出力結果

```bash
Loading application in 'phoenix'...
Generating entity-relationship diagram for 10 models...
Warning: Ignoring invalid association :resource on ActiveAdmin::Comment (polymorphic interface Resource does not exist)
Warning: Ignoring invalid association :author on ActiveAdmin::Comment (polymorphic interface Author does not exist)
Diagram saved to 'erd.pdf'.
```
UICollectionViewFlowLayoutの拡張

UICollectionViewFlowLayoutを使っていると、微妙に不満がたまってきます。

* Sticky Header/Footerができない
* Itemを真ん中寄せにできない
* Item領域の背景色を変更できない

ちょっと時間がとれたので、この辺の不満を解消したBTKCollectionViewFlowLayoutを作成しました。
[BTKCollectionViewFlowLayout on GitHub](http://github.com/tomohisaota/BTKCollectionViewFlowLayout)

下記のキャプチャを見れば、何ができるか大体わかると思います。
また、キャプチャをとったテスト用UI自体も一緒にコミットしているので、興味がある人はビルドして実行してみてください。

## Supplemental Viewの追加
UICollectionViewFlowLayoutは標準でHeader(青)と、Footer(黄)をサポートしています。
これらに、アイテム領域の背景となるBody(緑)と、Header/Body/Footer全体の後ろに配置されるBackground(白)を追加してました。アイテム部分だけ背景色を変えたい等のデザイン上の要望に簡単に対応できます。
![iOS Simulator Screen Shot 2015.03.18 14.40.29.png](https://qiita-image-store.s3.amazonaws.com/0/33513/ba47aabb-0466-aa79-5a44-dbe2f42d96ca.png)

## Item表示位置の変更
###横(Left) + 縦(Center)
![iOS Simulator Screen Shot 2015.03.18 14.40.31.png](https://qiita-image-store.s3.amazonaws.com/0/33513/5c9f078a-65c7-50ee-c689-b81de5bc0a45.png)

###横(Center) + 縦(Center)
![iOS Simulator Screen Shot 2015.03.18 14.40.32.png](https://qiita-image-store.s3.amazonaws.com/0/33513/bbab6dde-9c80-09e5-3435-98704ce2e300.png)

###横(Right) + 縦(Center)
![iOS Simulator Screen Shot 2015.03.18 14.40.33.png](https://qiita-image-store.s3.amazonaws.com/0/33513/2b587072-cc20-e0d3-0a06-43c8f56fa797.png)

###横(Right) + 縦(Top)
![iOS Simulator Screen Shot 2015.03.18 14.40.38.png](https://qiita-image-store.s3.amazonaws.com/0/33513/5822c87d-858e-7db0-6d56-78d8cc0ad175.png)

###横(Right) + 縦(Bottom)
![iOS Simulator Screen Shot 2015.03.18 14.40.39.png](https://qiita-image-store.s3.amazonaws.com/0/33513/3931df89-bfb0-88e1-cfde-1de5edd78167.png)

###スティッキーヘッダ
注：挙動を見やすくするために、UICollectionViewにcontentInsetを設定しています。
![iOS Simulator Screen Shot 2015.03.18 15.05.42.png](https://qiita-image-store.s3.amazonaws.com/0/33513/08d8cce6-0851-8f78-b184-483909de58a3.png)

###スティッキーフッタ
注：挙動を見やすくするために、UICollectionViewにcontentInsetを設定しています。
![iOS Simulator Screen Shot 2015.03.18 15.05.50.png](https://qiita-image-store.s3.amazonaws.com/0/33513/95ce20bb-c0e4-1d01-c999-53b9c140827b.png)

## インストール方法
Podsに登録済みなので、さくさくインストールできるはずです。

```text
pod 'BTKCollectionViewFlowLayout'
```
iAdのバナー表示の２つの方法


iOS7 以降iAd のバナー表示は1行の記述だけで表示できるようになりました。

	self.canDisplayBannerAds = true
	
しかし、このステートメントによるバナー表示では、バナー表示位置が画面最下部となる上、バナー表示によってその他のUI部品の位置が影響を受ける場合があります。下の例では広告の有無によって下部にある灰色のボタンの位置がずれます。
図１　バナー表示
![IMG_0244.jpg](https://qiita-image-store.s3.amazonaws.com/0/60473/cf7bd349-1b89-2c31-7225-d760535b850e.jpeg "IMG_0244.jpg")

図２　バナー非表示
![IMG_0245.jpg](https://qiita-image-store.s3.amazonaws.com/0/60473/60063e2a-d9b3-5d37-ed39-c6e83fdf6841.jpeg "IMG_0245.jpg")

このバナー表示で画面の移動を防ぐためには、他のUI部品のレイアウト設定の際に画面の下部との間のConstraint を使わないようにするか、UI部品の位置をプログラムで設定する必要があります。

        self.centerBanner.delegate = self
        self.centerBanner.hidden = true

一方、storyboard のライブラリあるいは、コードでADBannerView を置いてそこにバナー表示をさせる方法もあります。

この場合には、広告の取得の有無によってDelegate でこのBannerView のhidden プロパティで表示を制御します。
こうすると、少し面倒ですが、画面表示は影響を受けなくなります。
下の例では広告表示の有無にかかわらずボタンの位置は変わりません。
図３　バナー表示
![IMG_0242.jpg](https://qiita-image-store.s3.amazonaws.com/0/60473/8a3854c1-0ed4-e5aa-22fd-7577fc9f017c.jpeg "IMG_0242.jpg")

図４　バナー非表示
![IMG_0243.jpg](https://qiita-image-store.s3.amazonaws.com/0/60473/eb7376e5-fae9-76c7-5dae-e3558d0e0ab3.jpeg "IMG_0243.jpg")

この場合には、storyboardでADBannerView を配置して、表示するビューコントローラクラスにリンクして、上記の２行のコードと、Delegate メソッドの実装が必要です。

例

import UIKit
import iAd

class ViewController: UIViewController, ADBannerViewDelegate {
    @IBOutlet weak var centerBanner: ADBannerView!

    override func viewDidLoad() {
        super.viewDidLoad()
        self.centerBanner.delegate = self
        self.centerBanner.hidden = true
        
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    
    func bannerViewDidLoadAd(banner: ADBannerView!) {
        self.centerBanner?.hidden = false
    }
    
    func bannerViewActionShouldBegin(banner: ADBannerView!, willLeaveApplication willLeave: Bool) -> Bool {
        return willLeave
    }
    
    func bannerView(banner: ADBannerView!, didFailToReceiveAdWithError error: NSError!) {
        self.centerBanner?.hidden = true
    }
  
    @IBAction func myButton(sender: UIButton) {
        if self.centerBanner.hidden {
            self.centerBanner.hidden = false
        } else {
            self.centerBanner.hidden = true
        }
    }

}