OmniAICreator/Qiita-1.07M huggingface dataset:
ソーシャル上でシェアされている数が一発でわかるRubyGem「social_counter」が便利

## いつ使えるの？
あるWebサイトがTwitter、Facebook、はてなブックマークなどのソーシャルメディア上で、 __どれくらいシェアされているか__ を知りたい時に使えます。


## 公式リポジトリ
https://github.com/keitarou/social_counter

## social_counterをインストール

```ruby:Gemfile
  gem 'social_counter'
```

`$ bndle install --path vendor/bundle`

で gem をインストールする。

## スクリプト（調べたいURLを引数でもらう）

```ruby:social_count.rb
require 'social_counter'

# 引数でもらう
url = ARGV[0]
@sc = SocialCounter.new(url)
p "タイトル：#{@sc.title}"
p "Twitter：#{@sc.twitter_count}"
p "Facebook：#{@sc.facebook_count}"
p "Hatena：#{@sc.hatena_count}"
p "Pocket：#{@sc.pocket_count}"
p "Google：#{@sc.google_count}"

```

`$ bundle exec ruby social_count.rb http://mossmoss.com/`

調べたいURLを引数で渡して実行する。

## 実行結果

```
"タイトル：もすもすもすもす"
"Twitter：2300"
"Facebook：8338"
"Hatena：422"
"Pocket：501"
"Google：62"
```

## 調べられるSNS一覧

Twitter
Facebook
Hatena Bookmark
Google Plus
Pocket
Linkedin
Delicious
Pinterest
Reddit


便利ですね。
[SyncStitch]an example of divergence.

traceは等価(`(trace SPEC SYS)`)だが、
発散する(`(divergence SYS)`が失敗する)例。


```scm:Definitions
(define-event ok)
(define-event ng)

(define-event ping)

(define-channel rch (x) '((ping)))
(define-channel sch (x) '((ok) (ng)))
(define-channel cch (x) '((ok)))
```

```scm:SPEC
(define-process SPEC (! ping (! ok SPEC)))
```

```scm:Sender
(define-process Sender
	(! ping (! rch ('ping) Try)))

(define-process Try
  (? sch (x)
	 (if (eqv? x 'ok)
		 (! ok Sender)
		 Try)))
```

```scm:Receiver
(define-process Receiver
  (? rch (x) (! cch ('ok) Receiver)))
```

```scm:RandomChannel
(define-process RandomChannel
  (? cch (x) (ndc ReplyOK ReplyNG)))

(define-process ReplyOK (! sch ('ok) RandomChannel))
(define-process ReplyNG (! sch ('ng) RandomChannel))
```

```scm:SYS
(define-process SYS
  (hide
	  (list rch sch cch)
	  (par '() Sender Receiver RandomChannel)))
```
１ヶ月間に自分がコミットしたgit logを出す方法

```
git log --since=4.weeks --author=yanai --reverse --no-merges --format="%s%n%b"
```

教えてもらったものだけども。

```
git log --until=2014-1-5 --since=2013-12-01 --author=yanap -p app/models/
```
CodeIgniter2.1.4でFacebook認証をしたときのログアウトバグ


Faecbook認証でログインしていて、ログアウトしようとした際に`auth/logout`を呼び出してログアウト処理をしたところ、
上手くSessionの情報が消えてくれず焦ったのでメモ


```Auth.php
//ログアウト
function logout() {
	$this->session->sess_destroy(); //セッション削除
	redirect('index/', 'location'); //ログアウト後にトップページへ
}
```

facebookSDKの中身を確認したところ、destroySession()というメソッドが含まれていたのでこれを使ったらうまくいきました

```Auth.php
//ログアウト
function logout() {
	$this->session->sess_destroy(); //セッション削除
	$this->facebook->destroySession(); //Facebook認証のセッションを削除
	redirect('index/', 'location'); //ログアウト後にトップページへ
}
```
GoogleAppEngineで無料でサイトを公開する（自分用備忘録）

こちらのページ（Google App Engineを使って無料でサイトを立ち上げる方法 - EC studio 技術ブログ http://bit.ly/1jIheMB）
を参考に自分でやっていたが、最近の仕様変更で上記ページの方法ではDeployが行えなくなった。

そのため、現在の最新版向けにメモしておく。
なおこのメモは上記ページと同時に見ることを想定して書く

GoogleAppEngineのアカウント取得、SDKのインストール、Python（3.x.xではなく2.x.x）をインストールするところまでは上記ページを参考に。

その後、デスクトップのショートカットからGoogle App Engine Launcherを起動。
ここでlogを見ろみたいなエラーが出たら、
『C:\Users\ユーザー名\Google』内の『google_appengine_launcher.ini』を確認。
記述に“[0]”や、“[1]”のようなものがあれば削除。

次に上記ページにあるとおりアプリケーションを登録するのだが、
ここでWindows8以降を使っていて、ユーザー名が2バイト文字の場合、うまく動かない場合があるので、
作業フォルダをローカルディスク直下などに指定する。

ためしにdeployしてみて動作することを確認する。
『You can close this window now.』と表示されたら閉じてもいい。

ここからGoogle App Engineでサイトを立ち上げるための作業に入る

まず先ほどアプリケーションを登録した時に指定した作業フォルダ内に『htdocs』フォルダを作成する。
index.htmlなどはこの中にすべて入れる。

次に同フォルダ内の『app.yaml』をメモ帳などで開くとこのようになっている。（“*****”には自分で決めたアプリケーションの名前が入る）

```lang:app.yaml
application: *****
version: 1
runtime: python27
api_version: 1
threadsafe: yes

handlers:
- url: /favicon\.ico
  static_files: favicon.ico
  upload: favicon\.ico

- url: .*
  script: main.app

libraries:
- name: webapp2
  version: "2.5.2"
```

このハンドラ（handlers）以下をこのように書き換える。

```lang:app.yaml
application: *****
version: 1
runtime: python27
api_version: 1
threadsafe: yes

handlers:
- url: (.*)/
  static_files: htdocs\1/index.html
  upload: htdocs(.*)/index.html
 
- url: /(.*)
  static_files: htdocs/\1
  upload: htdocs/(.*)
```

これで上記ページと同じ状態を構築できた。あとはdeployしてみて、htdocs/index.htmlが表示されるか確認して、
表示されれば成功。



なお、2つ以上のアプリケーションを登録した際、
SDKの終了時にエラー、もしくは起動時にアプリケーションが1つしか表示されないなどの不具合が生じた場合、
『C:\Users\ユーザー名\Google』内の『google_appengine_projects.ini』の記述が何らかの理由で正しくない可能性が高い。
中身を見てみて、“[0]”や“[1]”が複数あったりする場合は、それを下から順番に[0],[1]...のように書き換えてやると、正しくSDKで表示できる。
ubuntu13.04でufwの設定

$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

$ sudo ufw default DENY
Default incoming policy changed to 'deny'
(be sure to update your rules accordingly)

$ sudo sudo ufw allow 22/tcp
Rule added
Rule added (v6)

$ sudo ufw allow 80/tcp
Rule added
Rule added (v6)

$ sudo ufw allow 443/tcp
Rule added
Rule added (v6)

$ sudo ufw limit ssh
Rule added
Rule added (v6)

$ sudo ufw logging low
Logging enabled

$ sudo ufw app list
Available applications:
  OpenSSH
シンプルなWebサーバ+LivereloadだけのGruntfile


* 本当にHTML配るだけのウェブサーバたてたい
* Pythonとかのワンライナーだと微妙に心もとない
* 将来的に複雑なビルドも拡張できたらいいな

というかんじの`Gruntfile.coffee`スニペット。Yeoman使うほどじゃないとき用。

`generator-webapp`で生成したプロジェクトの`Gruntfile.js`から余分な部分を除去しただけ。

プリプロセッサの例として[grunt-typescript](https://github.com/k-maru/grunt-typescript)のタスクを入れる（[TypeScript](http://www.typescriptlang.org/)で遊ぼうとしたとき作ったので）。

`package.json`

```json
{
  "name": "greeter",
  "version": "0.0.0",
  "description": "",
  "main": "greeter.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "cu39",
  "license": "MIT",
  "devDependencies": {
    "grunt": "^0.4.4",
    "grunt-concurrent": "^0.5.0",
    "grunt-contrib-connect": "^0.7.1",
    "grunt-contrib-watch": "^0.6.1",
    "grunt-typescript": "^0.3.0",
    "load-grunt-tasks": "^0.4.0",
    "time-grunt": "^0.3.1"
  }
}
```

`Gruntfile.coffee`

```coffeescript
'use strict'

# # Globbing (元のコメントを翻訳)
# パフォーマンスを上げるため1階層下だけにマッチさせている:
# 'test/spec/{,*/}*.js'
# すべてのサブフォルダに再帰的にマッチさせたいならこちらを使う:
# 'test/spec/**/*.js'

module.exports = (grunt) ->

  # Show elapsed time after tasks run
  require('time-grunt') grunt

  # Load all Grunt tasks
  require('load-grunt-tasks') grunt

  grunt.initConfig

    # Project settings
    config:
      # Configurable paths
      app: '.'
      css: '<%= config.app %>/.'
      ts:  '<%= config.app %>/.'
      js:  '<%= config.app %>/.'

    # grunt-contrib-watch
    watch:
      typescript:
        files: ['<%= config.ts %>/{,*/}*.ts']
        tasks: ['typescript:server']
      livereload:
        options:
          livereload: '<%= connect.options.livereload %>'
        files: [
          '<%= config.app %>/{,*/}*.html'
          '<%= config.css %>/{,*/}*.css'
          '<%= config.js %>/{,*/}*.js'
        ]

    # grunt-typescript
    typescript:
      options: {}
      server:
        src: ['<%= config.ts %>/**/*.ts']
        dest: '<%= config.js %>/greeter.js'
        optionj:
          module: 'amd'
          target: 'es5'

    # grunt-contrib-connect
    connect:
      options:
        port: 9000
        livereload: 35729
        # change this to '0.0.0.0' to access the server from outside
        hostname: 'localhost'
      livereload:
        options:
          open: true
          base: ['<%= config.app %>']

    # grunt-concurrent
    concurrent:
      server: [
        'typescript:server'
      ]
  # end of grunt.initConfig

  # register tasks
  grunt.registerTask 'serve', ->
    grunt.task.run [
      'concurrent:server'
      'connect:livereload'
      'watch'
    ]

  grunt.registerTask 'default', ['serve']
```
クロス集計とカイ二乗検定

次のようなシナリオを想定します。

```
関東圏内を中心としたチェーン店 D フランチャイズでは都市ごとの店舗で複数の商品を扱っています。このたび、市場に投入した新商品 A と B について、人気の 2 店舗での販売状況を調べることになりました。
```

## クロス集計表を作成する

本番システム運用チームの協力を得て販売管理システムから 2 店舗の新商品の販売ログデータを入手することができました。これはその架空の販売管理システムのログデータの一部です。並列分散システムから出力したもので、実際にはタブ区切りのテキストデータとなっているものとします。

| 店舗 | 売上 |
|:--:|:--:|
| 店舗 1 | 商品 A |
| 店舗 2 | 商品 A |
| 店舗 2 | 商品 B |
| 店舗 1 | 商品 A |
| 店舗 1 | 商品 B |
| 店舗 1 | 商品 B |
| 店舗 2 | 商品 A |
| 店舗 1 | 商品 A |

クロス集計表は離散変数同士の関連を検討する際に用いられます。 [pandas](http://pandas.pydata.org/) を利用するとクロス集計をいとも簡単におこなうことができます。

```py3
import pandas as pd

# タブ区切りのテキストデータを読み込む
data = pd.read_csv("data.txt", sep="\t")

# クロス集計をする
crossed = pd.crosstab(data.A, data.B)
#=>
#           A    B
#store_1  435  165
#store_2  265  135
```

クロス集計表ができました。

2 つの変数の関連において、どちらかの変数が、もうひとつの変数の原因となっている場合に、原因となる側の変数を **独立変数 (independent variable)** 、もう一方の結果となる変数を **従属変数 (dependent variable)** と言います。これは 2 変数の間に因果関係があると考えられるときに生じます。つまりクロス集計表で提示されるのは、原則として独立変数の側を基準とした各カテゴリーの値です。

科学研究の多くは、突き詰めればこのように複数の変数の因果関係を確かめたり、探したりするといったことに行き着く場合が多々あります。厳密な意味で 2 つの変数が因果関係があると言い切るためには、変数 A と変数 B が次の 3 つの条件を満たす必要があります。

1. 変数 A が変数 B より先に発生している (時間先行性)
2. 変数 A と変数 B が共変関係にある (相関性)
3. 変数 A と変数 B が疑似相関ではない (非疑似相関性)

## カイ二乗検定をおこなう

2 つの離散変数にまったく関連が無い、つまりは変数の値の一方が変化しても他方の変数の分布が変化しない状態のことを統計用語で **独立 (independence)** と言います。

独立という状態におけるそれぞれのセルの度数を **期待度数 (expected frequency)** と言い次式で表されます。

```math
F_{ij} = \frac {n_i × n_j} n
```

さて今回の新商品 A と B について、店舗ごとの売上の差異は無いのでしょうか。小集団で標本誤差が未知の場合は検定統計量として t 値を、確率分布としては t 検定を用います。それに対してクロス集計表の仮説検定では通常[カイ二乗分布](http://ja.wikipedia.org/wiki/%E3%82%AB%E3%82%A4%E4%BA%8C%E4%B9%97%E5%88%86%E5%B8%83)を用います。

[以前に説明した](http://qiita.com/ynakayama/items/344dbf562a66a2aa760e)内容に基づき、帰無仮説は次のようになります。

| 仮説 | 説明 |
|:--|:--|
| 帰無仮説 | 母集団において 2 つの変数は独立に分布し、関連していない |
| 対立仮説 | 母集団において 2 つの変数は独立に分布しておらず、関連している |

カイ二乗分布は自由度によってその曲線が大きく変化します。その値は、自由度 = (行数 - 1) × (列数 -1) で求まります。有意水準 α は 5% とします。

| 店舗 | 商品 A | 商品 B |
|:--:|:--:|:--:|
| 店舗 1  | 435 | 165 |
| 店舗 2  | 265 | 135 |

このクロス集計表に対してカイ二乗検定をおこないます。

SciPy で行列に対するカイ二乗検定の関数が見つからなかったという[ブログ記事](http://d.hatena.ne.jp/tanihito/20101030/1288943347
)もありますが、これは [stats.chi2_contingency](http://docs.scipy.org/doc/scipy-0.13.0/reference/generated/scipy.stats.chi2_contingency.html) 関数でおこなうことができます。自力で実装する必要はありません。

```py3
import scipy as sp
import scipy.stats

x2, p, dof, expected = sp.stats.chi2_contingency(crossed)

print("カイ二乗値は %(x2)s" %locals() )
print("確率は %(p)s" %locals() )
print("自由度は %(dof)s" %locals() )
print( expected )

if p < 0.05:
    print("有意な差があります")
else:
    print("有意な差がありません")

#=>
# カイ二乗値は 4.17162698413
# 確率は 0.041106308266
# 自由度は 1
# [[ 420.  280.]
#  [ 180.  120.]]
# 有意な差があります
```

店舗 1 のほうが商品 B の売上の割合が小さいことが 95% の信頼度で言えることがわかりました。

## 参考

カイ二乗検定をはじめとする検定については以下のサイトがとても参考になります。ぜひとも参考にしてみてください。

ハンバーガー統計学にようこそ！
http://kogolab.chillout.jp/elearn/hamburger/index.html
session_start()→POST遷移→戻る→有効期限切れ を防ぐ

session_start() → POST遷移 → history.back 等で戻ると「有効期限切れ」って出てしまうのは、session_start()時に以下ヘッダが勝手に出力されてクライアントキャッシュが無効になってしまうため。

```text:
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache

```

なので、session_start()直後に以下ヘッダを吐いてあげればOK。

```php:
<?php
session_start();
header('Expires: -1');
header('Cache-Control:');
header('Pragma:');
// 以下処理
```
[SyncStitch]trace

traceの一番単純な例、ということで。

```scm:Definitions
(define-event on)
(define-event off)

(define-channel switch-ch (x) '((0)))
```

```scm:SPEC
(define-process SPEC (! on (! off SPEC)))
```

```scm:SwitchPress
(define-process SwitchPress
  (! switch-ch (0) SwitchPress))
```

```scm:ToggleSwitch
(define-process SwitchOff
  (? switch-ch (x) (! on SwitchOn)))
(define-process SwitchOn
  (? switch-ch (x) (! off SwitchOff)))
```

```scm:SYS
(define-process SYS
  (hpar (list switch-ch) SwitchPress SwitchOff))
```
gitでリモートレポジトリのブランチを持ってくる


##持ってくるだけの場合

```bash:
$ git branch new-branch origin/new-branch
```

##持ってきてブランチ移動する

```bash:
$ git checkout -b new-branch origin/new-branch
```

[参考サイト1](http://blog.inouetakuya.info/entry/20120826/1345979787)

[参考サイト2](http://qiita.com/YusukeSuzuki@github/items/3bd5752783fd2c2f8805)
TiShadow ExpressでシンプルにTiShadowの恩恵を受ける

#TiShadowとは
Server通じてシミュレータや実機のTitanium環境をリアルタイム更新してくれたりする仕組み。
ファイルを保存するだけでアプリが最新になって再起動したりするよ。
詳しくはググって。

#TiShadow Expressとは
TiShadowの恩恵を超簡単に得ることが出来る仕組み

TiShadowは中でサーバとしてnode.jsのexpressを利用していますけど、それとは関係ないです。

TiShadow凄く便利そうだなーとは思いつつ
良くも悪くも割と慣れたエンジニア向けで共同作業の人に導入は割と面倒だなぁと思っていました。

```shell-session
tishadow express
```
するだけでTitanium環境が用意されていれば超簡単にTiShadowの恩恵を受けることが出来るようになっていたのでメモしておきます。

#通常のTiShadowの利用方法

* TiShadowサーバーの起動(tishadow server)
* TiShadowアプリの生成(tishadow app)
* TiShadowアプリに依存モジュールを移動
* TiShadowアプリの起動(tishadow run)
* TiShadowアプリ上でサーバへの接続

などが必要でした
appifyでも軽減出来ますがexpressはそれを含んでもっと楽にしてくれるため説明を省きます。

#TiShadow Expressを利用すると
```shell-session
tishadow express
```
を実行するとtitanium buildコマンドに --shadowというオプションが利用できるようになります。

これを利用することで
tishadow appifyとtishadow server, tishadow @ run --updateを同時に利用するような効果を得ることが出来ます。

コマンドラインからのシミュレータの起動に--shadowを付けるだけで簡単にTiShadowの恩恵を得ることが出来ます。

もちろん実機にビルドする際も-h,-pでtishadow serverを指定することで利用することが可能です！

これであればtitaniumが使える環境であれば誰でも非常に簡単にTiShadowの恩恵を受けることが可能なのでとってもおすすめです。

#トラブルメモ
## --shadowを付けてビルド出来ない。
私が遭遇したのはtishadowがローカルインストールされてたのが原因でした。
```shell-session
sudo npm install -g tishadow
```
でインストールし直したところ無事利用可能になりました。
expressじゃない通常の使い方でのTiShadowの機能は利用できたんですけどexpressではビルド出来ませんでした。
問題の原因までおいかけてないです。
tmuxでコマンドの結果を一時的なpaneで表示する


2014/11/12追記 : 現在は以下を使ってます

```bash
function s(){
    if [ $# -eq 0 ]; then
        cat > /tmp/tmux.tmp && tmux split-window "less /tmp/tmux.tmp"
    else
        REATTACH_TO_USER_NAMESPACE=`whence reattach-to-user-namespace`
        tmux split-window "$REATTACH_TO_USER_NAMESPACE $*"
    fi
}
function v(){
    if [ $# -eq 0 ]; then
        cat > /tmp/tmux.tmp && tmux split-window -h "less /tmp/tmux.tmp"
    else
        REATTACH_TO_USER_NAMESPACE=`whence reattach-to-user-namespace`
        tmux split-window -h "$REATTACH_TO_USER_NAMESPACE $*"
    fi
}
```


## 概要
man/less/grepなどの結果を見ながら作業したい場合に、出力結果を分割したpaneで表示するようにしました。

```bash
s(){
    if [ $# -eq 0 ]; then
        cat > /tmp/tmux.tmp && tmux split-window -h "less /tmp/tmux.tmp"
    else
        tmux split-window -h "$*"
    fi
}
```

## 使い方
### 一時paneでコマンドを実行する
```
$ s less path/to/file
```
### コマンドの出力結果を一時paneで表示する
```
$ grep hoge path/to/file | s
```
[SyncStitch]Deadlock

ものすごく簡単な例が欲しい、というわけで。

```scm:Deadlockの例
; Definitions
(define-channel rch (x) '((0) (1)))
(define-channel sch (x) '((0) (1)))

; Receiver
(define-process Receiver
  (? rch (x) (= x 0) (! sch (0) Receiver)))

; Sender : Deadlockの例1 SenderもReceiverもメッセージ受信待ち
(define-process Sender
  (? sch (x) (= x 0) (! rch (0) Sender)))

; Sender : Deadlockの例2 Receriverは0を送信するが、Senderは1が来るまで待ち
(define-process Sender
  (! rch (0) (? sch (x) (= x 1) Sender)))

; SYS
(define-process SYS
  (par (list rch sch) Receiver Sender))
```
Xamarin でビルドを自動化するには Business 版以上が必要でしたが今は無料でできます

## 追記 2016/04/12

[Xamarin が Microsoft に買収され](http://qiita.com/amay077/items/6e5c40abe0c21fc79e6a)、無償で使えるようになったことで、BUSINESS版でなくても ``xbuild`` が使えるようになりました、やったね！

----
Xamarin でも、リリース用アプリのビルド→署名→テストとか、自動化したいじゃないですか。

Win/Visual Studio の場合は ``msbuild``、Mac/Xamarin Studio の場合は ``xbuild`` でそれが可能との情報を得て試してみたところ、、、


```sh:
$ xbuild HogeAppAndroid.csproj 

XBuild Engine Version 3.2.6.0
Mono, Version 3.2.6.0
Copyright (C) Marek Sieradzki 2005-2008, Novell 2008-2011.

Build started 2014/04/04 13:13:59.
__________________________________________________
Project "...HogeAppAndroid/HogeAppAndroid/HogeAppAndroid.csproj" (default target(s)):
	Target _SetLatestTargetFrameworkVersion:
: error XA9008: Building from the command-line requires a Business License.
	Task "ResolveSdks" execution -- FAILED
	Done building target "_SetLatestTargetFrameworkVersion" in project "...HogeAppAndroid/HogeAppAndroid/HogeAppAndroid.csproj".-- FAILED
Done building project "...HogeAppAndroid/HogeAppAndroid/HogeAppAndroid.csproj".-- FAILED
```


**“Building from the command-line requires a Business License.”**

だそうです。

Starter Edition, Indie Edition では、コマンドラインからのビルドは許可されていないようです。

* [Store - Xamarin](https://store.xamarin.com/)

の比較表ではちょっと分からなかったな。。。

Win/Visual Studio な人は自動的に Business Edition 以上だから問題ないのですが、個人だから Business版買えないよ、Starter/Indie だけど (なんちゃって)CI とかやりたいよ、という人はあきらめるしかないみたいです。

…手動でやります。
RubyMotionを選んで後悔しないか調べた

エイプリルフールネタに騙されました(http://blog.rubymotion.com/post/81380803900/rubymotion-raises-millions-becomes-free-introduces)


## 特徴
- 今は有料　約2万円
- MacRubyベース
- Railsエンジニアか否かで評価がまったく違うのでiPhoneエンジニアの使用感は話半分に。


## いいところ

- ライブラリ構造を知れるのでObj-Cへの前段階として良い
- RubyMotionもくもく会というコミュニティがある

- RubyMine対応 ([http://www.jetbrains.com/ruby/](http://www.jetbrains.com/ruby/))
- emacs対応([http://d.hatena.ne.jp/naoya/20130322/1363921458](http://d.hatena.ne.jp/naoya/20130322/1363921458))
- vimもsublimeも
- atomもね ([https://atom.io/packages/RubyMotion](https://atom.io/packages/RubyMotion))
- Rubyなのでモチベーション上がる
- objc/xcodeもMVC推奨なので、RubyMotionもMVC。なのでrailsっぽいディレクトリ構造。
- gemが使える、Railsの資産が使える
- RailsのようにCUIで操作できる
- gitも今まで通り
- cocoapodsというiOS外部ライブラリ群もwrapしているので車輪の再開発しなくていい

## 悪いところ
- HipByte社と命運を共にする
- コードそのものの可読性は上がるけど、人材が少ないのでトータル保守性下がりそう。リスキー。
- 2万円、とりあえず始めるには高いかなあ
- iOS最新ライブラリは時間差対応(iOS8はWWDCは6月？)
- ハマりどころがいろいろある([http://rochefort.hatenablog.com/entry/2013/05/06/115001](http://rochefort.hatenablog.com/entry/2013/05/06/115001))
よく使うinformation_schemaのテーブルまとめ

よく使うテーブルのメモ(後で整理する)
テーブルの中身については見ればわかるので割愛。

### tables、columns
名前の通りテーブルやカラムの情報がおさめられている。
主にカラムのリネーム時などに影響範囲の調査でお世話になる。
あとは桁数がそろっているか等。
シェルスクリプトから呼び出して利用することもしばしば

### processlist
show processlistと基本的には同じ。
ただし、where句が使えるので、host等で抽出できるのが便利。

### statistics
インデックス情報が登録されている。
↑の2つと合わせて開発環境、本番環境で違いがないか調べたりする時に便利。

### referential_constraints
外部キー制約情報が登録されている。
どのデータを消すとどこに影響があるかがわかるので便利。
Yahoo!ニュースのRSSをブログパーツ的にHTMLに貼る

[yahooニュースのRSSのITを自分のサイトでフィードAPIとして利用したいです。 それ... - Yahoo!知恵袋](http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12126837127)
こちらの質問に対する回答です。


まず、Yahoo!ニュースはカテゴリごとにRSSを配信しているので、適当にどれかを選びます。
[Yahoo!ニュース - RSS](http://headlines.yahoo.co.jp/rss/list)


例えば、「IT・科学」カテゴリの最新記事全件はこちらのURLです。
http://headlines.yahoo.co.jp/rss/all-c_sci.xml

RSSをHTML化して貼付けるにも色々なやり方があると思いますが、「爆速YQL」で書くとしたらこんな感じでしょうか。ただ単にRSSのタイトルとリンクを表示しています。
data-urlのところに表示したいRSSのURLを書きます。

```html+jinja
<script src="http://i.yimg.jp/images/yjdn/js/bakusoku-yql-v1-min.js"
  data-url="http://headlines.yahoo.co.jp/rss/all-c_sci.xml"
  data-yqltable="feed"
>
<ul>
{{#query.results.item}}
<li><a href="{{link}}">{{title}}</a></li>
{{/query.results.item}}
</ul>
</script>
```

テンプレートを工夫したり、件数を調整することも可能です。
詳しくは
[XMLのWebAPIを爆速で使いこなせるフレームワーク - Yahoo! JAPAN Tech Blog](http://techblog.yahoo.co.jp/programming/bakusoku-yql/)
をご覧ください。古い記事ですが、一応今でも有効です。
mogeneratorを使ってみる


mogeneratorについては、[Qiita - Mogenerator + MagicalRecordでCoreData入門](http://qiita.com/key/items/35569f334528e225531e 'Mogenerator + MagicalRecordでCoreData入門')に詳しく書いてあります。

## mogeneratorのインストール

```
$ brew install mogenerator
```

## xcdatamodeldファイルの作成

Xcodeの`New File`で追加。
エンティティとか追加（クラスを指定を忘れないように）。

## Modelの作成

```
$ mogenerator -m ./path/to/Model.xcdatamodeld/Model.xcdatamodel/ -O ./path/to/model --template-var arc=true
```

##参照
* [MogeneratorとMagicalRecordでCoreDataを使ってみる](http://rikei-webmemo.hateblo.jp/entry/2014/02/24/221757 'MogeneratorとMagicalRecordでCoreDataを使ってみる')
* [Qiita - Mogenerator + MagicalRecordでCoreData入門](http://qiita.com/key/items/35569f334528e225531e 'Mogenerator + MagicalRecordでCoreData入門')
Emacs 23 の shell-mode で git プロンプトのパスワード入力が隠されない件 への workaround （追記： Emacs25 対応）

# 症状

Emacs 23 の ```*shell*``` バッファにて、 git パスワードを入れようとすると、中身出てた。

> $ git push
> Username for 'https://github.com':y2q-actionman
> Password for 'https://y2q-actionman@github.com':ウワーここで入力した文字そのまま出るじゃん!

orz...

# 原因

Emacs 23 の shell-mode で、各行がパスワード入力を促すものかどうかを判定する関数は、 ```comint-watch-for-password-prompt``` である。そして、この関数の行う判定とは、各行について「 ```comint-password-prompt-regexp``` で指定された正規表現にマッチするかどうか」である。

この ```comint-password-prompt-regexp``` に初期状態で設定されている正規表現では、git のパスワード入力のプロンプトにはマッチせず、そのためパスワード入力ではないと判定されてしまったため、我々は自らの内腑を曝けだす凄惨な所業を目撃するに至ったのであった。

```comint-password-prompt-regexp``` の初期状態の正規表現は、パスワードを尋ねるっぽい文字列の後に ``for`` があった場合、 **``for`` のあとに空白以外を置かずに ``:`` が続く** ことを要求しているため、 git のようにURI が挟まってしまうと、それに含まれる ``:`` のためにマッチしなくなっ てしまうのである。

# 対策

_``for`` のあとにどんな文字があっても、一個 ``:`` があったら、まあそれでいいんじゃない？_ という雑な基準にしてみることで対策してみた。

```el
;; workaround for git prompt, because it contains URL
(add-hook 'shell-mode-hook
          #'(lambda ()
              (setq comint-password-prompt-regexp
                    (replace-regexp-in-string "for \\[\\^:\\]\\+" "for .+"
                                              comint-password-prompt-regexp t t))))
```

# (追記) Emacs２５での対処

上の設定をしても、 Emacs 25 だと再び出るようになってしまっていたので見てみたら、 ```comint-password-prompt-regexp``` が変わっていて、  ``for`` の後に来る文字は ``:`` のみではなく ``:：៖`` の三つに変わっていた。

というわけでもっと基準を緩くして、 _``for`` ってあったらいいんじゃない？_ という雑なマッチにしてみて試用中。

```el
(add-hook 'shell-mode-hook
          #'(lambda ()
              (setq comint-password-prompt-regexp
                    (replace-regexp-in-string "for \\[\\^.+?\\]\\+" "for .+"
                                              comint-password-prompt-regexp t t))))
```

# References
[Shell Mode - GNU Emacs Manual](https://www.gnu.org/software/emacs/manual/html_node/emacs/Shell-Mode.html)
jQueryで要素名を取得する

たまに、使う。


```html:sample
<inupt id="hello" type="text" />
<inupt class="hoge" type="text" />


<select class="hoge">
	<option>aaa</option>
</select>
```


```js
console.log( $("#hello").prop("tagName") );	
> "INPUT"

console.log( $(".hoge").prop("tagName")	);
> "INPUT" //先頭しか取れない
	
console.log( $(".hoge").get(0).tagName );
> "INPUT"
console.log( $(".hoge").get(1).tagName );
> "SELECT"


/*
 * 下記は、冗長な書き方になっていると指摘いただきました。
 * 詳しくはコメント欄を参照ください
 */

//eachで回す 
$(".hoge").each(function(){ 
	console.log( $(this).prop("tagName") ); 
});
> "INPUT"
> "SELECT"


//mapで集める
var tagNameArray = $(".hoge").map(function(){
	return $(this).prop("tagName"); 
});
console.log( tagNameArray );
> ["INPUT", "SELECT"]

```
Keynote: 発表者ノートの文字サイズを変更する方法と不具合


![Blank_Skitch_Document.png](https://qiita-image-store.s3.amazonaws.com/0/889/79d21191-3291-af65-5c0e-8d3f2ddc9f1e.png "Blank_Skitch_Document.png")


# 書式バーのところで文字サイズが変更できる

![Untitled.png](https://qiita-image-store.s3.amazonaws.com/0/889/97c3f838-fe01-fe67-4cab-8c378aa7a2bd.png "Untitled.png")

# 印刷ウィンドウを出すと変更できなくなってしまう

印刷ウィンドウを一度出すと、発表者ノートの文字サイズが変更できなくなってしまう。おそらくバグ。

![Untitled.png](https://qiita-image-store.s3.amazonaws.com/0/889/d5982836-2574-3cf6-accd-82e089ede0e5.png "Untitled.png")

こうなるとKeynoteを一旦終了しないと解消できない様子。
tmuxのstatus lineにprefix keyを表示する方法

みなさま、お疲れ様です。

tmuxがインストールされた環境が複数あって、それぞれにPrefix Keyを変えている場合、
「あれ？　今接続しているサーバのPrefix Keyってなんだっけ？」と悩むことがあるはずですね。
私はしょっちゅう悩んでいます。

そこで、次のような手をとりました。

コマンドでPrefix keyを確認する方法
tmux show-options で、現在設定されているオプションの内容が確認できます。

```Command
$ tmux show-options -g prefix
prefix C-]
```

ステータスとして常時表示させる方法
キー2つの組み合わせすら覚えられないかわいそうな頭の持ち主には、そんなコマンドは覚えられないのです。
そこで、tmuxをたちあげたら常時Prefix Keyを表示させる方法が必要でした。
.tmux.confでは#(COMMAND)とすることで、シェルでCOMMANDを実行した結果を表示させることができます。

```.tmux.conf
set-option -g status-right '#(tmux show-options -g prefix)'
```

このように設定しておくと、常時ステータスラインの右側にtmux show-optionsの結果を表示させることができます。
![スクリーンショット 2014-03-19 17.17.14.png](https://qiita-image-store.s3.amazonaws.com/0/39912/6dca0b2f-7b81-329b-a3e4-73fee0d6a403.png)
こんな感じ（実際の私の環境ではPrefixの隣に、日時を表示させています）。
これでPrefix Keyがわからなくなることはありませんね！

孫接続の表示はどうなる？
![スクリーンショット 2014-03-24 11.02.36.png]
(https://qiita-image-store.s3.amazonaws.com/0/39912/3159b127-abbb-326a-8358-8bdd2cf80481.png)
こうなります。

（Raspbianでは）何も表示されないみたいだけど？
tmuxのバージョンが1.6以前だと、特定のoptionだけを表示させることができません。
その場合は、

```Command
$ tmux show-options -g | grep prefix
```

```.tmux.conf
set-option -g status-right '#(tmux show-options -g | grep prefix)'
```

とすればよいでしょう。
スタイルガイドを作ろう[kalei編]

# そもそもスタイルガイドとは
*  サイトに定義されているスタイルの一覧やコーディング規約ドキュメント化したもの
*  マークダウン記法でコメントを書くと、いい感じに自動生成してくれるツールがいくつかある。

# スタイルガイドを作るメリット

*  「あれのクラス名なんだっけなー」とか「このサイト、他にどんなクラス作ってたっけな―」ってときにいちいちCSS全部読んだり探さなくていい。
*  CSSの設計でイケてないところを発見できる。  
（命名規則のルールが崩壊してる、同じデザインなのに他の箇所で再利用ができないクラスの発見など）

# スタイルガイドのツール

*  [KSS · Knyle Style Sheets](http://warpspire.com/kss/)  
Ruby上で動く。
Github 自体にも使わてるのがこれ。  
サーバーモード付き。
*  [StyleDocco](http://jacobrask.github.io/styledocco/)  
node.jsが必要。敷居はKSSより低く、cd コマンドくらいを知っていれば、なんとかなる。  
※ただ、最近（2014年4月現在）のChromeでみるとプレビュー機能がうまくきいてないみたい。詳しくは下記参照  
[StyledoccoがChromeでiframe部分見えねーよ!という場合の当座の解決法](http://qiita.com/Layzie/items/7ab61e872480db9a1554)
*  [Kalei Styleguide] (http://kaleistyleguide.com/)  
RubyとかNode.jsとかいらないので、環境を整えなくても結構だれでも使える。  
ただscssは対応していない(lessは対応)。


# kaleiでスタイルガイドを作る
1.[github](https://github.com/thomasdavis/kaleistyleguide)からファイルをゲットする。
2.サーバにあげて確認。うまく動いてたらOK
3.css/styles.css　をいじる。  
styles.cssがスタイルガイドのトップ画面になる。  
  
ファイル名変えたかったらjs/viws/config.js に書かれているstyle.cssの箇所を変更。
    
新しくCSSを追加したい場合は@importでファイルを読み込むだけで左メニューに追加される。
（ちなみに、相対パスで違う階層のやつを読み込むと左メニューのフォントが赤色になる。）  
下記2つはスタイルガイドのデザイン用に必要。

```css
@import url("theme.css");
@import url("highlight/styles/googlecode.css");
```

CSSはimportしてもいいしコメント外に直書きしてもOK
（何か理由が無い限りは、直書きするより開発用の環境にぶちこんで、該当のCSSを相対パスで設定した方がいいと思うけど）
ドキュメントはコメント内（/* ～ */）にマークダウン記法でかいていく。

仮画像を置きたい場合は [PLACEHOLD.IT](http://placehold.it/)を使うと、サイズも分って便利。

例：
<img src="http://placehold.it/350x150">

```html
<img src="http://placehold.it/350x150">
```


また、左メニューの表示が気に入らない場合はtemplates/style/menu.html を修正。
個人的には、theme.css　とかは表示したくないのでここで無理やり消したり。

# スタイルガイド作成での注意
というよりはそもそものCSSの書き方の話。
スタイルガイド作成の上で過度な親要素からの指定がしてあると面倒。

```
body #main .nav li a {
　　color: #333;
}
```

流石にbodyからの指定は無いにしても、
あまり親要素で指定すると他での流用がしづらかったり、
その分CSSファイルも重くなるので、
なるべくクラス名を付けて短く指定してあげるようにするべきかと...

スタイルガイドを作ってみるとモジュールについても色々考えさせられるので、(順序としては逆だけど)プロジェクトと同時進行で作っていくといいかも。（余裕があればの話だけど。）

たまに命名規則で英語のスペル違いや、わかりづらいクラス名、足りない要素とか出てきたりするから。
【Android】OutOfMemoryと戦う【OOM】


# ＼ OutOfMemoryが出たぞー！ ／

どうする？

1.　 **画像の息の根を止める**
2.　 **メンバー変数は全て息の根を止める**
3.　 **それでもダメならLargeHeap**

基本的には1と2までで大丈夫だと思います。
LargeHeapまで行く場合は、絶対的に画像などの読み込み量が多い時ぐらいにした方が良いと思います。

##1. 画像の息の根を止める

* Bitmapを使う場合

```java:

    Bitmap bitmap;

    private void releaseBitmap() {
        if (bitmap != null) {
            bitmap.recycle();
            bitmap = null;
        }
    }

```


* ImageView(ImageButton含む)を扱う場合

```java

    ImageView imageView;

    private void releaseImageView(){
        if(imageView != null){
            // src に画像を設定した場合はこっち
            imageView.setImageDrawable(null);
            // background に画像を設定した場合はこっち
            imageView.setBackgroundDrawable(null);
        }
    }

```

**ImageButton**も同様にやっておきましょう。
忘れがちな事は、backgroundに設定している画像をsetImageDrawable(null) では潰せないことです。
どうせ解放するので、常に両方やっちゃっても構わないと思います。

（ちなみに、Fragment の場合、タイミングは **onDetach()** でやることをオススメします。以前、onViewDestroyed() でやったら、popBackStack 時のアニメーション前に解放されておかしな挙動になりました。）

##2. メンバー変数は全て息の根を止める

それでも何か漏れていたら、とにかくreleaseしてnullで潰していきましょう。

classによって解放の仕方は異なるので、乱暴にnull埋めするだけだとNGの場合があるので気をつけて下さい。

例えば **ListView** の場合は

```java
    ListView listView;
    ArrayAdapter<String> arrayAdapter;

    private void releaseView() {
        if (listView != null) {
            listView.setAdapter(null);
            listView = null;
        }

        if (arrayAdapter != null) {
            arrayAdapter.clear();
            arrayAdapter = null;
        }
    }
```
こんな感じ。
画像を使ったListViewとかだと、漏れるとシャレにならない場合があります。

##3.それでもダメならLargeHeap

**4系以降のみです（kacchan6@githubさん、ご指摘ありがとうございます。）**

どうしても画像が多くて、setContentView()でlayout読み込む時点でOutOfMemory を吐いてしまう様なレベルの場合は、これでヒープの使用量を増やしてしまうのも手でしょう。
ただし、機種によっては増えないシロモノもいるようなので、最終手段くらいに考えたほうが良いです。

```xml:AndroidManifest.xml

    <application
        android:name="jp.ogwork.sample.HogeApplication"
        android:label="@string/app_name"
        android:icon="@drawable/icon"
        android:largeHeap="true" >
    ....

```

**android:largeHeap="true"**
を一行添えてあげるだけです。簡単。

以上です。
UNIXコマンドメモ：ファイル内容をクリップボードに

参考：http://macwiki.sourceforge.jp/wiki/index.php/OSX%E3%81%AE%E5%9B%BA%E6%9C%89%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89#pbcopy.2C_pbpaste_.E2.80.A6_.E3.82.B3.E3.83.94.E3.83.BC.E3.81.A8.E3.83.9A.E3.83.BC.E3.82.B9.E3.83.88.E3.82.92.E3.82.B3.E3.83.9E.E3.83.B3.E3.83.89.E3.81.8B.E3.82.89

自分はQiitaに投稿する際プロジェクトのファイルの中身をそのままごっそり記事に貼付けることが結構あるのですが、その度に

1. ```cat [filename]```で中身を表示。
2. 出力された内容をマウスで範囲選択してから"Cmd+C"でコピー。
3. 投稿用のテキストエリアに"Cmd+V"で貼付ける。

というようなやり方をして面倒くさかったので、コマンドからクリップボードに保存する方法を調べてみました。

どうやら **pbcopy** というコマンドで実現できるようです。

###### 例

```
cat [filename] | pbcopy
```

### 実行しても一見何も起こりませんが、ペーストするとちゃんと内容をコピーできていることが分かります。

**grep** などと組み合わせればもっと柔軟に使いこなせそうですね。
コードレビューのやり方

# コードレビュー

コードレビューについてのメモ

## コードレビューについて

### メリット

悪い兆候のあるコードに対する抑止力になり、「動けばよい」という妥協を封じ込める
教育的な効果
コードを共有することで、一人が死んでも大丈夫的な効果
コミュニケーション的な効果

###デメリット

コードレビューに対するコスト

### 悪い兆候

コピー＆ペーストのコード(=>変更に弱くなる)
1つの関数やメソッドが長過ぎるコード(=>見通しが悪く、バグを生みやすい)
テストコードが存在しなかったり、通らないコード(=>保守性が低まる)

### レビューの心得

コミットを綺麗にする

```
git rebase -i HEAD~3 // とかでコミットを綺麗にしてpushするとか
```

バグはレビュアでもコミッタの責任でもなくチームの責任なので、思ったことをコメントする
違う人がレビュアでも気になったら、横やりでコメントする
ピアレビュー = 同僚などフラットな間柄で互いにレビューしあう

### レビューの手法

* [インスペクション](http://thinkit.co.jp/article/866/1)

上記みたいな詳細な説明が見つけられなかったので、以下は

http://masasuzu.github.io/document/book/PeerReview/chapter03.html

みてください。

* チームレビュー

* ウォークスルー

* ペアレビュー

* パスアラウンド

* アドホックレビュー

## 参考URL

* [レビューのススメ](https://gist.github.com/voluntas/73efe2f36ac1513c02a8)

## 書籍

* [リーダブルコード](http://www.oreilly.co.jp/books/9784873115658/)

* [ピアレビュー](http://www.amazon.co.jp/%E3%83%94%E3%82%A2%E3%83%AC%E3%83%93%E3%83%A5%E3%83%BC%E2%80%95%E9%AB%98%E5%93%81%E8%B3%AA%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E9%96%8B%E7%99%BA%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AB-Karl-E-Wiegers/dp/489100388X)

## レビューツール

### diffコメント型

Rietveld
Gerrit Code Review
Review Board
Barkeep

### 統合型

Gitlab
RhodeCode
Phabricator
GitHub
Bitbucket
Chromium
Lhaz
自然に:w<Enter>する癖がつく前に設定すべきだった.vimrc


[Vim-users.jp - Hack #36: バッファを自動的に保存する](http://vim-users.jp/2009/07/hack36/)

```vim:.vimrc
set autowrite

autocmd CursorHold *  wall
autocmd CursorHoldI *  wall
```
gitbook試してみた

# gitbook

http://www.gitbook.io/

# サンプルリポジトリ

https://github.com/onigra/gitbook-sample

`clone`して`gitbook serve`すれば動きます

# gitbookのインストール

```sh
$ npm install gitbook -g
```

# 作り方

1. プロジェクトのルートに`README.md`、`SUMMARY.md`を作る
2. ディレクトリを作成し、その中にも`README.md`を作る
3. ディレクトリの中にmarkdownのファイルを置く
4. SUMMARY.mdにこんな感じで書く

```
* [docs](docs/README.md)
  * [first](docs/first.md)
  * [second](docs/second.md)
  * [third](docs/third.md)
```

5. build

```sh
$ gitbook build
```

6. サーバ起動

```sh
$ gitbook serve
tarting build ...
Successfuly built !

Starting server ...
Serving book on http://localhost:4000

Press CTRL+C to quit ...
```

7. http://localhost:4000 にアクセス

![sample.png](https://qiita-image-store.s3.amazonaws.com/0/15187/0fc87078-894f-6c6b-f72f-5c93828f61ff.png)
あるgemに依存しているgemを一覧する方法


##例えば：nokogiri gemを使っている gemってどれだっけ？

↓
```$ gem dependency nokogiri --reverse-dependencies
```

```terminal:自分の環境の場合
Gem nokogiri-1.6.1
  hoe (~> 3.7, development)
  hoe-bundler (>= 1.1, development)
  hoe-debugging (>= 1.0.3, development)
  hoe-gemspec (>= 1.0, development)
  hoe-git (>= 1.4, development)
  mini_portile (~> 0.5.0)
  minitest (~> 2.2.2, development)
  racc (>= 1.4.6, development)
  rake (>= 0.9, development)
  rake-compiler (~> 0.8.0, development)
  rdoc (~> 4.0, development)
  rexical (>= 1.0.5, development)
  Used by
    akami-1.2.1 (nokogiri (>= 0))
    aws-sdk-1.36.0 (nokogiri (>= 1.4.4))
    aws-sdk-1.35.0 (nokogiri (>= 1.4.4))
    capybara-2.1.0 (nokogiri (>= 1.3.3))
    fog-1.21.0 (nokogiri (>= 1.5.11, ~> 1.5))
    haml-4.0.3 (nokogiri (>= 0, development))
    mechanize-2.7.3 (nokogiri (~> 1.4))
    nori-1.1.5 (nokogiri (>= 1.4.0, development))
    savon-0.9.5 (nokogiri (>= 1.4.0))
    tilt-1.4.1 (nokogiri (>= 0, development))
    turnout-0.2.5 (nokogiri (~> 1.3))
    wasabi-1.0.0 (nokogiri (>= 1.4.0))
    webrobots-0.1.1 (nokogiri (>= 1.4.4, development))
    winrm-1.1.3 (nokogiri (~> 1.5))
    xpath-2.0.0 (nokogiri (~> 1.3))
```

ずらずらっと出てきましたが、Used by 以下を見てください。
個人的には、
__nokogiriを使っているakamiを使っているsavonを使っているwinrmを使っているridleyを使っているberkshelf__を入れていたので、面白かったです..

http://stackoverflow.com/questions/15079090/how-do-i-find-out-which-gem-has-a-specific-dependency
Chatworkにホームページの内容を投稿するための整形


勢いで書いただけです。

```
javascript:var%20d=document;
var%20tx=d.selection?d.selection.createRange().text:d.getSelection();
var%20title=document.title;
var%20subw=window.open().document;
var%20link=location.href;
subw.writeln('<textarea%20rows=3%20cols=40>[info][title]'+title+'\n'+link+'[/title]'+tx+'[/info]</textarea>');
```

改行は省いて下さいね。
gradle-ssh-pluginを使ってGradleからSSHする

GradleでSSHを使ってサーバへデプロイだとかサーバの再起動をするのに、これまでAntのsshexecを使っていた。
最近、[gradle-ssh-plugin](https://github.com/int128/gradle-ssh-plugin)を知ったので、使い方をメモ。

ユースケースとしてはこんな形。

- jarをビルドした後に、jarをVagrantで動いてるVMにコピー
- VMにコピーしたファイルをTomcat向けの場所に移動
- VMのTomcatを再起動

```groovy
// gradle-ssh-pluginを使うための設定
buildscript {
	repositories {
		mavenCentral()
	}
	dependencies {
		classpath 'org.hidetake:gradle-ssh-plugin:0.2.7'
	}
}
  
apply plugin: 'ssh'

// SSH先のサーバ情報
remotes {
	vagrant {
		host = '192.168.33.10'
		user = 'vagrant'
		password = 'vagrant'
	}
}

// アップロード→Tomcat再起動タスク
task uploadAndRestartTomcat(type: SshTask) {
  // サーバ側のアップロード先ディレクトリ
  def uploadDir = '/home/vagrant/'
  // jarを作ったローカルのファイルパス
  def localFile = file("${project.buildDir.name}/libs/${project.jarName}").path
  // Tomcat上のjar置き場
  def tomcatLibDir = '/usr/local/tomcat/webapps/hoge-web/WEB-INF/lib'

  // SSHでやること
  session(remotes.vagrant) {
    // ファイルを置く
    put(localFile, uploadDir)
    // サーバ上でファイルを移動する
    execute("sudo cp ${uploadDir}/${project.jarName} ${tomcatLibDir}")
    // Tomcatを再起動
    execute("sudo service jsvc restart")
  }
}
```
Ubuntu 12.04.4 LTSにrbenvを利用しRubyとRuby on Railsをインストール


https://www.ruby-lang.org/en/installation/


https://github.com/sstephenson/rbenv


```

$ sudo apt-get install git

$ sudo apt-get install build-essential

$ sudo apt-get install libssl-dev

$ sudo apt-get install libsqlite3-dev

$ sudo apt-get install nodejs

$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv

$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile

$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile

```

シェルを再起動

```

$ type rbenv

```

ruby-buildをインストール

https://github.com/sstephenson/ruby-build#readme

```

$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

```


Rubyインストール

```

$ rbenv install -l

$ rbenv install 2.1.2

※数値だけの行の最大の値が最新なのでそれを入れる

$ rbenv rehash

$ rbenv global 2.1.2
※インストールしたバージョンを指定

$ gem i bundler


```


Railsインストール

```

$ gem i rails
$ gem i spring

```


postgresqlインストール

```

$ sudo apt-get install postgresql

※DBはインストール後に起動している。postgresqlを停止する場合
$ sudo service postgresql stop


```
【PCトラブル】httpsのサイトに繋がらなくなった

トラブル解決がてらにメモ  
昨日急にググれなくなった  
  
どうやらhttpsのサイトにのみ入れない  
＝グーグルはhttpsなので、gmailにも入れない。  
  
「何らかの現象で、干渉しているためアクセスできなません」  
「新しい接続先を追加した場合、時間をおいてから～」  
こんな内容が出ていたと思います。  
  
接続先を変更してもつなげない  
セキュリティソフトの原因？  
  
当日はヤフーのアドレス直打ちで、検索をかけて対応  
他の判断で、運用することができるようになったのは  
ちょっと成長したのかもしれません。  
  
日と接続先が変われば見れるだろうと思ってましたが  
そんなに甘くなかった。  
同じ現象。  
  
そして解決しました。  
  
PCの時計を見てみると日付が1っヶ月前  
日付を本日付になおすと、無事接続できるようになりました。
こんなことでも繋げなくなるんですね・・・。  
  
何かのお役に立てれば幸いです。
JScriptでHTTPSアクセス

## はじめに

「[JScriptでHTTPアクセス](http://qiita.com/tnakagawa/items/3bce99d49b1aa3fc9a72)」という投稿をしましたが、HTTPSについて何にも触れてなかったなと思い、
ほとんど追記レベルですが、投稿します。

## HTTPS

通常、HTTPSアクセスする場合は、URLを「http://」から「https://」に変えれば良いのですが
実際に使うときに困るのが開発環境など、自己署名（通称、オレオレ署名）を利用している場合です。
このようなサーバにアクセスすると「この証明機関は、無効か正しくありません」とエラーが出てしまいます。

これを回避する方法として、「ServerXMLHTTP」では「setOption」メソッドで、
SSLの認証レベルを変更可能となっています。

サンプルコードでは、認証に関する全てのサーバエラーを無視しています。

```js
try {
    // 「ServerXMLHTTP」オブジェクト生成
    var http = new ActiveXObject("Msxml2.ServerXMLHTTP");
    // 要求初期化
    http.open("GET", "https://xxx.xxx.xxx.xxx/yyyyy", false);
    // オプション設定
    // SXH_OPTION_IGNORE_SERVER_SSL_CERT_ERROR_FLAGS : 2
    // SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS : 13056
    http.setOption(2, 13056);
    // 要求
    http.send();
    // 応答結果表示
    WScript.Echo(http.status + ":" + http.statusText);
    WScript.Echo(http.getAllResponseHeaders());
    WScript.Echo(http.responseText);
} catch (e) {
    // エラーの場合
    WScript.Echo("Error(" + (e.number & 0xFFFF) + "):" + e.message);
}
```
TeraTermの設定でSSH転送

IP制限かかっていて、支社からはDBがあるサーバーにアクセスできない　(；´ロ｀)困ったなぁ・・・
そんな時教えてもらった方法

①本社のサーバーにTera Term使用しSSH接続
②設定メニューから「SSH転送」を選択
③「SSHポート転送」画面が表示されるので、「追加」をクリック
④ローカルのポートになんでもいいので、「888」と入力
⑤リモート側ホストに、確認したいDBが入っているサーバーのアドレスを
　入力＆接続したいポートを入力

以上で設定OK!!
あとはブラウザーを立ち上げて
https://localhost:
のあとに④で設定した「888」と入力。
Pingを打ったらIPv6を返しやがって…IPv4アドレスを教えてほしいんですが…

WindowsのTIPSです。

Pingを打ったらIPv6を返されて困りました。
***
C:\Users\TearTheSky>ping My-DevelPC
My-DevelPC [e780::oppi:4983:601b:21d7%15]に ping を送信しています 32 バイトのデータ:
***  
  
IPv4アドレスがほしい時は -4 のオプションを付けます。
***
C:\Users\TearTheSky>ping My-DevelPC -4
My-DevelPC [192.168.192.168]に ping を送信しています 32 バイトのデータ:
***
cronの実行時間微調整, @reboot

## @reboot

* busybox の crond では `@reboot`指定が効かないので注意


## 実行時間微調整

[ShellScript - cronを2分,7分,12分...みたいな半端なタイミングで動かす - Qiita](http://qiita.com/yudoufu/items/2aecba975f9267af6f19)を参考にやってみたところcronが綺麗になってよかった。

しかしこの仕組みを知らない人がみたらわからんだろうなぁ

```bash:15,16,17分に実行し、後は17+5分おき
15,16,17-59/5 * * * * date >> ~/test.txt
```

```bash:test.txt
2014年  4月  4日 金曜日 09:15:01 JST
2014年  4月  4日 金曜日 09:16:01 JST
2014年  4月  4日 金曜日 09:17:01 JST
2014年  4月  4日 金曜日 09:22:01 JST
2014年  4月  4日 金曜日 09:27:01 JST
2014年  4月  4日 金曜日 09:32:01 JST
...
```

```bash:0〜4分ずらす例
0-59/5 * * * * date >> ~/0.txt
1-59/5 * * * * date >> ~/1.txt
2-59/5 * * * * date >> ~/2.txt
3-59/5 * * * * date >> ~/3.txt
4-59/5 * * * * date >> ~/4.txt
```

cronでsudoができない場合
============

`sudo: sorry, you must have a tty to run sudo`と出るときは
`/etc/sudoers`の設定が原因。

```diff:
- Defaults    requiretty
+ #Defaults    requiretty
```
Yahoo! 知恵袋（q11126934051）

「Yahoo! 知恵袋」の以下の質問を解いてみました。

http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11126934051

```bat:q11126934051.bat
@echo off

set SELF=%~n0

setlocal
  set SOURCE=E:
  set TARGET=.\BACKUP
  
  echo WScript.Echo MsgBox^("Do you want to make backup copy of this file?" ^& vbCrLf ^& vbCrLf ^& WScript.Arguments^(0^), vbYesNo^) > .\%SELF%.vbs
  
  for %%i in (A B C) do (
    call :choice "%SOURCE%\%%i" && (
      call :backup "%SOURCE%\%%i" "%TARGET%\%%i" && (
        echo [  OK  ] %SOURCE%\%%i to %TARGET%\%%i\
      ) || (
        echo [  NG  ] %SOURCE%\%%i to %TARGET%\%%i\
      )
    ) || (
        echo [ SKIP ] %SOURCE%\%%i to %TARGET%\%%i\
    )
  )
  
  del .\%SELF%.vbs > NUL
endlocal
goto :EOF

:choice
setlocal
  for /f "tokens=*" %%i in ('cscript //nologo %SELF%.vbs "%~1"') do (set i=%%i)
  
  :: vbYes: 6, vbNo: 7
  if %i% equ 7 (exit /b 1)
  
  exit /b 0
endlocal
goto :EOF

:backup
setlocal enabledelayedexpansion
  set SOURCE=%~1
  set TARGET=%~2
  
  if "%SOURCE%" == "" (
    echo %SELF%: insufficient argument: #1 >&2
    exit /b 1
  )
  if "%TARGET%" == "" (
    echo %SELF%: insufficient argument: #2 >&2
    exit /b 1
  )
  
  if not exist "%SOURCE%" (
    echo %SELF%: file not found: %SOURCE% >&2
    exit /b 1
  )
  
  if not exist "%TARGET%\" (
    md "%TARGET%"
    if !ERRORLEVEL! neq 0 (
      echo %SELF%: failed to create directory: %TARGET% >&2
      exit /b 1
    )
  )
  
  copy "%SOURCE%" "%TARGET%" > NUL
  if %ERRORLEVEL% neq 0 (
    echo %SELF%: failed to copy file: %SOURCE% >&2
    exit /b 1
  )
  
  exit /b 0
endlocal
goto :EOF
```

実行すると

```
E:\>tree /f E:\
フォルダ パスの一覧:  ボリューム XXXXXXXX
ボリューム シリアル番号は XXXX-XXXX です
E:\
    A
    B


C:\temp>q11126934051.bat
[  OK  ] E:\A to .\BACKUP\A\
[ SKIP ] E:\B to .\BACKUP\B\
q11126934051: file not found: E:\C
[  NG  ] E:\C to .\BACKUP\C\


C:\temp>tree /f .\BACKUP
フォルダ パスの一覧:  ボリューム ローカル ディスク
ボリューム シリアル番号は XXXX-XXXX です
C:\temp\BACKUP
└─A
        A
```

なお、ファイルをコピーする前に以下のようなダイアログが表示されます。

![q11126934051.png](https://qiita-image-store.s3.amazonaws.com/0/29814/0b796424-4861-5975-6406-3f78d422a1a3.png)
iOS6/7対応、角丸のRを意識してアイコン設定

#はじめに
iOS7のデバイスでホーム画面を見ると、アイコン角丸のRにあっていないデザインを作成したアプリを見つけることがあります。
##どのように表示されるのか
アイコンの角丸Rにあわせて線を引いているアイコンなどが分かりやすく
既にいろいろ研究されている方のサイトを紹介します。

StaccalのアイコンiOS7対応 (前編)
http://gndo.blogspot.jp/2013/09/staccalios7.html

iOS7で追加されたアイコンサイズ・角丸の半径について
http://hocosoft.com/memo/ios7対応/ios7で追加されたアイコンサイズ・角丸の半径につ/

#対策
iOS6用とiOS7のRはちがうことを意識して画像を分ける必要があります。
※pixelベースです

|表示される画面| iOS6(iPhone)| iOS7(iPhone)| iOS6(iPad)| iOS7(iPad)|
|:-----------|:------------:|:------------:|:------------:|:------------:|
|ホーム | 57,114|120 | 72,144|76,152 |
|スポットライト| 29,58 |80| 50,100 |40,80|
|設定画面用| 29,58 |iOS6(iPhone)と共通| 29,58 |iOS6(iPad)と共通|

書いてて気づきましたが、設定画面用は・・・
#アイコンを作る
##角丸Rにこだわる場合
 1. 角丸Rに関わらないデザイン画像を作成
 2. OSバージョンにあわせて角丸Rに関係する枠などのデザインを当てる。この場合二種類
 3. サイズ調整

設定画面用の画像は角丸R必要か疑問が残ります。
##角丸Rにこだわらない場合

###テンプレートを使用する
http://appicontemplate.com/ios7

こちらのpsdで作成しました。
![スクリーンショット 2014-04-03 9.09.26.png](https://qiita-image-store.s3.amazonaws.com/0/12362/d0c9b120-2503-8fc3-7d78-246c2fd7ebbf.png)

effect、カラー（グラデーション）も含めバリエーションがあり
psdの編集箇所もデザインだけ、サイトイメージも同時にできます。
付属するatnファイルで角Rなし、ありのActionを実行して
必要サイズ全パターン作成してくれます

![スクリーンショット 2014-04-03 9.11.54.png](https://qiita-image-store.s3.amazonaws.com/0/12362/c3692af6-f26f-78bb-173f-d8d6c37cb430.png)

###Webサービス
モックとか仕様確認レベルのアイコンであればこちらとか
※角丸対応まではしているかは別途確認
http://makeappicon.com

#Xcode
##AssetCatalogに画像を追加
![スクリーンショット 2014-04-03 9.20.59.png](https://qiita-image-store.s3.amazonaws.com/0/12362/53e991a8-6085-7d78-c42e-f9a7274d4a8d.png)

###同じような画像でサイズ違うアイコンを指定すると
![スクリーンショット 2014-04-03 9.18.48.png](https://qiita-image-store.s3.amazonaws.com/0/12362/8f97a513-f764-340a-0e62-7783f1706ba2.png)

ワーニングにあがっています。下記アイコンの@2xが76pixelでした。
![スクリーンショット 2014-04-03 9.29.12.png](https://qiita-image-store.s3.amazonaws.com/0/12362/7cf74ea9-0f96-f671-b154-ca6a2f704bba.png)

#確認
実機での確認をしましょう。
シミュレーターでの確認だと背景色が黒しか選べないので
明るめの背景にかえて気づく、ようなことがあります。
#参考URL
appicontemplate.com
http://appicontemplate.com

iOS Rounded Rect Script for Photoshop
http://blog.mikeswanson.com/iosroundedrect

StaccalのアイコンiOS7対応 (前編)
http://gndo.blogspot.jp/2013/09/staccalios7.html

iOS7で追加されたアイコンサイズ・角丸の半径について
http://hocosoft.com/memo/ios7対応/ios7で追加されたアイコンサイズ・角丸の半径につ/

iOS7用自動アイコン生成(XCode5対応)配布開始しました。[for Mac]
http://www.choplayer.com/choyajuu4s/mac-os-x用action-scriptautomator-script配布ページスクリプト追加しました/
#さいごに
アイコンのデザインはアプリの寿命を左右する要素として高く、デザイナーのこだわりも強い部分のため、忘れずに対応する必要があります。
角丸R、3pxの拡大が気になるのは微細なアイコンや、色のコントラストがはっきりしたものなどで、グラデーションを使っているものは割とごまかせている気がします。

そして、設定画面のアイコンについては小さいからなのか適当な感じが・・・、設定画面用だけアイコンを変更した角丸Rにあわせたアイコンのアプリを提出してみたいです。
MacにRMagickをインストールする


##手順

###ImageMagickをインストールする

```
$ brew link libtool
$ brew install imagemagick
```

###RMagickをインストールする

```
$ gem install rmagick
```

###上記でエラーが出た場合

```
checking for stdint.h... yes
checking for sys/types.h... yes
checking for wand/MagickWand.h... no

Can't install RMagick 2.13.2. Can't find MagickWand.h.
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.
```
このようなエラーが出た時は、PKG_CONFIG_PATHが間違っているようなので自分の環境のPATHを与えてあげればOK



```
PKG_CONFIG_PATH=/usr/local/Cellar/imagemagick/6.8.7-7/lib/pkgconfig/ gem install rmagick
```


##参考
[rmagick 2.13.2 のインストール時のエラーの解決法 - $ cat /var/log/shin](http://shin.hateblo.jp/entry/2013/02/24/192854)
【Linux】タイムゾーン(Timezone)の変更


# タイムゾーン変更手順

以下はすべてrootで実行します。

**1. 現在の確認**
タイムゾーンはUTCになっている。

```
# date
Thu May 31 16:25:06 UTC 2012

# strings /etc/localtime
TZif2
TZif2
UTC0
```

**2. タイムゾーンを変更**

```bash
### オリジナルをバックアップ
cp /etc/localtime /etc/localtime.org

### タイムゾーンファイルの変更
ln -sf  /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
```

※この時点でタイムゾーンが即座に変わります
以下、再起動時にタイムゾーンがUTCに戻らないための対応をします。


**3. "/etc/sysconfig/clock"を編集する**

システムファイルを編集しますので、バックアップしたい場合はしておきましょう。

```bash
# 一応、バックアップを取ります
cp /etc/sysconfig/clock /etc/sysconfig/clock.org
```

viなどのエディタで編集。

```bash:/etc/sysconfig/clock
ZONE="Asia/Tokyo"
```
に変更。

```bash:/etc/sysconfig/clock
UTC=true
```
となっているので

```bash:/etc/sysconfig/clock
UTC=false
```
としておきましょう。
これをしないと再起動時にUTCに戻ってしまいます。


**4. 再起動**

再起動してもUTCに戻らないことを確認するため、
```reboot```コマンドや```init 6```コマンドで再起動します。
（しなくても大丈夫です。JSTに変更されています。）

**5. 確認**

```bash
### 確認
strings /etc/localtime

TZif2
TZif2
JST-9
```

JSTになっていればOK。

```bash
date

Fri Jun  1 01:27:56 JST 2012
```

# まとめ

以下はすべてrootで実行します。

```bash
# 一応、バックアップを取ります
cp /etc/sysconfig/clock /etc/sysconfig/clock.org

# viなどで編集してもよし
echo -e 'ZONE="Asia/Tokyo"\nUTC=false' > /etc/sysconfig/clock

# 一応、バックアップを取ります
cp /etc/localtime /etc/localtime.org

# timezoneファイル差し替え
ln -sf  /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
```

これで再起動しなくても即座に反映されます。

心配な場合は、確認するためのコマンドを挟んでもいいと思います。

```bash
# 変更前、表示
date
strings /etc/localtime

# 一応、バックアップを取ります
cp /etc/sysconfig/clock /etc/sysconfig/clock.org

# viなどで編集してもよし
echo -e 'ZONE="Asia/Tokyo"\nUTC=false' > /etc/sysconfig/clock

# 一応、バックアップを取ります
cp /etc/localtime /etc/localtime.org

# timezoneファイル差し替え
ln -sf  /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

# 変更後、表示
date
strings /etc/localtime
```
文字列からNetwork.PortIDを作る方法


相当に悩んだNetwork.PortIDの作り方。

```
import Network

…
let port = PortNumber $ fromIntegral (read "1000" :: Int)

```

``` fromIntegral ```と``` :: Int ```がポイントのようです。
``` PortID ```のデータコンストラクタである``` PortNumber ```は型が分かりにくい！

Haskellの数値周りの型は難しいです。

型が厳密なのはHaskell最大の美点ですが、それに悩まされることが多いのも事実。
Xcode で見ているドキュメントを共有する

=================================

Xcode でドキュメントを見ているとき、

* メモとして残しておきたい
* 同僚や仲間と共有したい
* ブログや Twitter に投稿したい

という場面はないでしょうか？　そんなとき、Xcode で見ているドキュメントに対応する、オンラインドキュメントの URL が取得できると便利です。

ドキュメントブラウザの共有機能で URL を取得する
----------------------------------------

この記事を書いている時点で、直接これができる機能は搭載されていないと思うのですが、ドキュメントブラウザの共有メニューにメール／メッセージで共有する項目があるので、これが使えます。

![Screen Shot 2014-04-04 at 2.38.36.jpg](https://qiita-image-store.s3.amazonaws.com/0/12784/a1900e25-7ff1-3095-ac8b-4d39cc70ea66.jpeg "Screen Shot 2014-04-04 at 2.38.36.jpg")

メール／メッセージで共有するメニューを選ぶと、あらかじめ URL が入力された状態で投稿画面が開くので、そのまま送信してもいいですし、URL をコピーすれば、他の場所で使うことができます。

![Screen Shot 2014-04-04 at 2.38.47.jpg](https://qiita-image-store.s3.amazonaws.com/0/12784/01248bd6-eb73-6e7e-9714-4e3f225ebf6b.jpeg "Screen Shot 2014-04-04 at 2.38.47.jpg")

* [xcdoc://?url=developer.apple.com/library/etc/redirect/xcode/devtools/36ad5d/releasenotes/ObjectiveC/ModernizationObjC/AdoptingModernObjective-C/AdoptingModernObjective-C.html](xcdoc://?url=developer.apple.com/library/etc/redirect/xcode/devtools/36ad5d/releasenotes/ObjectiveC/ModernizationObjC/AdoptingModernObjective-C/AdoptingModernObjective-C.html)（「Adopting Modern Objective-C」）


### 落とし穴

1. この URL は `xcdoc` スキームの URL となっています。これのいいところは、URL を開いたマシンに Xcode がインストールされていて、該当するドキュメントがローカルにダウンロードされている場合、 **ローカルのドキュメントが直接 Xcode で開く** …はずなのですが、今のところ動作が安定していないように見えるので、現実的には「2」に書いた回避方法をお勧めします。

2. カスタムスキームを使っているため、サービスやアプリによっては、入力が弾かれてしまったり、リンクとして表示されない可能性があります。その場合、 **`xcdoc://?url=` 部分を `https://` に置き換える** か、サービスによっては **単に `xcdoc://?url=` 部分を削除** すれば、普通のウェブページの URL として認識されると思います。

3. ドキュメント内の特定のセクションを指定して共有することはできません。（同じ共有メニューの「Open in Safari.app」では、URL にフラグメントが付加されるので、Xcode で見ていたセクションがそのまま表示されます）

個人的な希望
----------

* やはり特定のセクションを指定して共有したい
* [Dash](http://kapeli.com/dash) を使っているので、そちらでも同じことがしたい
* 共有画面を介さず、直接 URL を取得したい

このあたりの機能は欲しいと思っているので、僕の方でも機能リクエストを送ったり、何か作ってみたりすると思いますが、この記事を読んでくれた方にやっていただいても嬉しいです（おい）