OmniAICreator/Qiita-1.07M huggingface dataset:
Rubyから別のRubyのプロセスを呼ぶ


Rubyから別のRubyプロセスをsystem関数などを使って起動する方法をまとめておく。
例えば、CRubyからJRubyなど別のバージョンのRubyを呼びたい場合に使える。

ここではrubyのバージョン管理にrbenvを使っているものとする。

まず親プロセスから呼ぶときには、シェルスクリプトを作ってその中でrubyのバージョンを切り替えるようにする。
rbenvのコマンドを使ってrubyのバージョンを切り替える。
ここではサンプルとしてCRubyからJRubyを呼ぶケースを考えよう。

```sub.sh
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"
rbenv shell 'jruby-1.7.13'
ruby --version     # => jruby 1.7.13 ....
```

最初の２行はrbenvの初期化処理。
`rbenv shell` というのはそのシェルの中でのみrubyのバージョンを切り替えるコマンド。

このコマンドを呼び出すために、親プロセスの方でsystemで呼ぶ。

```parent.rb
system("sub.sh")
```

これでうまくいくように思えるのだが、親のプロセスを `bundle exec` で実行している場合に問題になることがある。
`bundle exec` で実行すると、RUBYLIB, RUBYOPT, GEM_HOME, BUNDLE\_BIN\_PATH, BUNDLE\_GEMFILE といった環境変数がセットされる。
環境変数は起動した子プロセスにも持ち越されるため、jrubyを起動していてもcrubyのgemのパスを検索しに行ってしまう。

これを防ぐには親プロセス側で、以下のように呼ぶ。

```parent.rb
Bundle.with_clean_env do
  system("sub.sh")
end
```

こうすると、BundlerでセットされたBUNDLE_...環境変数がアンセットされる。
しかしRUBYLIB, GEM_HOME だけはアンセットされない。（なんで？？）
ということでsystemで呼ぶ時にRUBYLIBとGEM_HOMEの環境変数をunsetする。

```parent.rb
Bundle.with_clean_env do
  system({'RUBYLIB'=>nil, 'GEM_HOME'=>nil}, "sub.sh")
end
```

（systemの第一引数にコマンド実行時にセットしたい環境変数をHashで渡すことができます。）
ios8からのGameCenter

ios8から実装側ではあまり変わらないが、テスト方法が異なるようです。


今まで、GameCenterのサンドボックスへのログインは、ログアウト、ログインをすることでできました。

しかし、iOS8から、設定アプリのGameCenterの設定で、サンドボックスをONする必要がある。![Screen Shot 2014-11-29 at 19.56.15.png](https://qiita-image-store.s3.amazonaws.com/0/24266/a3f969be-3058-76e5-f93c-98ac943677cc.png)

ここで、設定してからアプリでログイン処理してください
アプリ作成でよくある単語の英語、中国語、韓国語訳

ローカライズする時、英語はわりとサンプルが多いのですが、中国語や韓国語は感覚がわからない分ちんぷんかんぷんです。
かといって翻訳に出すほどの量でも、、、ということで色々なアプリから表現を調べてみました。
正しいかどうかは保証しませんが、ご参考程度に。

When you localize your Apps for East Asian region, you may have difficulty translating some basic words into local one.
I listed some basic words of Japanese, Chinese and Korean.


| 英語 English | 日本語 Japanese | 中国語(簡体) Chinese(zh-Hans) | 中国語(繁体) Chinese(zh-Hant)| 韓国語 Korean|
|:----:|:-----:|:-----------:|:-----------:|:------:|
|OK|はい|是|是|예|
|Cancel|キャンセル|取消|取消|취소|
|Done|完了|完成|完成|완료|
|Share|シェアする|分享|分享|공유하기|
|Take New Photo|写真を撮る|拍照|拍照|사진 촬영|
|Choose From Library|ライブラリから選択|从照片库选取|從照片庫選取|라이브러리에서 선택|
PowerShellで特定のフォルダ以下のフォルダの容量チェック

# カレントフォルダ以下の容量をチェック

* ファイル単位じゃなくフォルダ単位で容量一覧がほしい

```powershell:powershell
Get-ChildItem `
    | Select-Object Name, @{ name = "Size"; expression = { `
        [math]::round((Get-ChildItem $_.FullName -Recurse -Force `
            | Measure-Object Length -Sum `
        ).Sum /1MB ) `
} }
```

* /1MBでバイト単位のデータをMB単位に変換
* [math]::round()で小数点以下を丸める

# 追記（18/11/22）

* 任意のフォルダ配下の、一定容量を越えるフォルダやファイルのパス・容量の一覧がほしい

```powershell:powershell
function getFuckinHeavyWeightData($path) {
    $children = Get-ChildItem $path `
        | Select-Object `
            Name, `
            @{ name = "Size"; expression = { `
                [math]::round((Get-ChildItem $_.FullName -Recurse -Force `
                    | Measure-Object Length -Sum `
             ).Sum /1MB ) `
            } }, `
            FullName `
        | Where-Object {$_.Size -gt 100}


    foreach($e in $children) {
        if ($e.Size -gt 100) { # 100MB以上をチェック対象とする
            echo ($e.FullName + ',' +  $e.Size)
            if (Test-Path $e.FullName -PathType container) {
                cd $e.FullName
                getFuckinHeavyWeightData($e.FullName)
            }
        }
    }
}
$root = "C:\apps\"
getFuckinHeavyWeightData($root)
```
YosemiteのSafariのようなタイトルバーを作る


Yosemiteでは、SafariやXcodeなどの多くのアプリで、タイトルバーの本来タイトル文字列が表示される位置に直接ツールバーを配置するスタイルが採用されています。

![](https://qiita-image-store.s3.amazonaws.com/0/1866/ab7bdcee-2636-4bab-ded8-af5fa3325466.png)

Mavericks以前でもReederなどの一部のアプリではこのようなスタイルを独自に実装していましたが、Yosemiteでは標準APIを利用して簡単にこれを実現できるようになりました。


# Yosemiteスタイルツールバーの作り方

まず、従来と同じようにツールバーを作成します。

![](https://qiita-image-store.s3.amazonaws.com/0/1866/3bbcdccc-20ec-3c3a-2190-9d4b5ed866a1.png)

そして、作成したツールバーつきウインドウの`titleVisibility`プロパティに`NSWindowTitleHidden`をセットします。

```swift
// Swiftの場合
self.window.titleVisibility = .Hidden
```
```objc
// Objective-Cの場合
self.window.titleVisibility = NSWindowTitleHidden;
```

Yosemiteスタイルツールバーをもつウインドウができました。

![](https://qiita-image-store.s3.amazonaws.com/0/1866/2bf45506-cd4b-d8f0-776a-42a19b7a5530.png)
flexboxを用いた中央寄せ

ドメインが失効してしまったのでこちらで書きます＼(^o^)／

天地中央寄せでレイアウトする箇所が出てきたとき、

```css
.parent {
	position: relative;
	width: 100%;
	height: 400px;
}

.child {
	position: absolute;
	width: 300px;
	height: 200px;
	left: 50%;
	top: 50%;
	transform: translateX(-50%) translateY(-50%);
}
```
ってやるのが（IE9以降は）一番簡単だと思っていたのですが、
flexboxを用いるともっと簡単に中央寄せできることを知りました。

## flexboxによる中央寄せ

![kobito.1417253085.948391.png](https://qiita-image-store.s3.amazonaws.com/0/39134/7d68f050-d883-e914-8e6e-0ee6fa4a10e1.png "kobito.1417253085.948391.png")

```css
.parent {
	display: flex;
	width: 100%;
	height: 400px;
}

.child {
	margin: auto;
	width: 300px;
	height: 200px;
}
```

## ブラウザ対応状況

![kobito.1417253636.761631.png](https://qiita-image-store.s3.amazonaws.com/0/39134/075b8ebf-1643-aa9b-8545-0918e5419127.png "kobito.1417253636.761631.png")
<small>(caniuse参照)</small>

IEは10以降からになってしまいますが、IEとAndroidの状況によっては使えるかもしれませんね。
（なんだかんだでdisplay:table最強伝説となってしまいますが）

## 参照元

Smashing Magazineからのツイートから拝借
<blockquote class="twitter-tweet" lang="ja"><p>2. Perfect vertical alignment:&#10;.parent { display:flex; } .child { margin: auto; }</p>&mdash; Smashing Magazine (@smashingmag) <a href="https://twitter.com/smashingmag/status/538472057269669888">2014, 11月 28</a></blockquote>

また、IE10のハック的なものもツイートされていました
<blockquote class="twitter-tweet" lang="ja"><p>5. .ie10 { flex-basis: 0; }, old flexbox in IE10. It enables a flex-child to expand, which it normally should do with ‘auto’. via <a href="https://twitter.com/_munter_">@_munter_</a></p>&mdash; Smashing Magazine (@smashingmag) <a href="https://twitter.com/smashingmag/status/538472777431654400">2014, 11月 28</a></blockquote>

<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
MantleのFMDB用のラッパーライブラリについて


MantleのFMDB用のラッパーライブラリがあったので軽く調べてみたメモ。

tanis2000/MTLFMDBAdapter
https://github.com/tanis2000/MTLFMDBAdapter

## INSERT文

```objectivec
// The initial model we will write to the database
MTLFMDBMockUser *user = [[MTLFMDBMockUser alloc] init];
user.guid = @"myuniqueid";
user.name = @"John Doe";
user.age = [NSNumber numberWithInt:42];

// Create the INSERT statement
NSString *stmt = [MTLFMDBAdapter insertStatementForModel:user];

// Get the values of the record in a format we can use with FMDB
NSArray *params = [MTLFMDBAdapter columnValues:user];
// Execute our INSERT
[db executeUpdate:stmt withArgumentsInArray:params];
```

MTLFMDBAdapterクラスのinsertStatementForModel:メソッドでプロパティを文字列にしてinsert文用の文字列にし、バインドする値をMTLFMDBAdapter columnValues:メソッドで値をarrayにしてexecuteしている。

## SELECT文

```objectivec
// Read the record we've just written to the database        
NSError *error = nil;
FMResultSet *resultSet = [db executeQuery:@"select * from user"];
if ([resultSet next]) {
    resultUser = [MTLFMDBAdapter modelOfClass:MTLFMDBMockUser.class fromFMResultSet:resultSet error:&error];
}
```

selectは単純にsql文を書く必要があるがclassを渡せばマッピングしてくれる。ただしNSSetで返る。

## まとめ

メリット

- DictionaryとModelの変換のコードを書かなくていい
- SQL文を書かなくていいわけではない
 - insert, update, deleteはSQLを書かなくていい
 - selectはおそらくそのまま書いた方が早いからそうしているっぽい
 - SQLとFMDBをわかった上でならその理屈は納得できる
- FMDBの使い方が指標になるので試行錯誤しなくていい
- - FMDBを使う初期開発時なら効率的かもしれない

デメリット

- Mantle自体使うと値を渡す部分が隠蔽化してしまう
- Mantle自体使うとエンティティがMTLModelを継承しなければいけない
- 初期開発でない場合に置き換えようとするとCRUD部分に手を加えることになる




# 参考URL

モデルクラスとNSDictionaryとの相互変換を楽に行えるようにするライブラリMantleを試す 
http://safx-dev.blogspot.jp/2013/12/nsdictionarymantle.html
VBScriptのクラスでコンストラクタらしきものを使う

(追記)

類似しているものを見つけました。
default property を使う方法みたいです。

VBA/VBScriptのクラスのコンストラクタに引数を渡したい
http://qiita.com/mitaken/items/42f16c2661caa7ff0002

(追記終わり)

---

よくあるパターンだと思われる。

```vbnet
class Test
   private param
   public function init(byval arg)
       param = arg
       set init = me
   end function
end class

dim t
set t = (new Test).init(123)
```
Ubuntuでホームディレクトリの中身を英語にする

Ubuntuで日本語を選択すると、ホームディレクトリに日本語のディレクトリが作られるようです。

![Screenshot from 2014-11-29 15:48:29.png](https://qiita-image-store.s3.amazonaws.com/0/3389/b764776c-e7f6-280e-44c3-f70144c7b28b.png)

ファイルがある程度整理できるので非常にありがたいのですが、問題はCLIでアクセスする時。
OS Xのように、Finderからは日本語だけどターミナルからは英語、ではなく、コンソールから見ても日本語になっています。

**「GUIなんて邪道だ！」**派の方には関係ない話かもしれませんが、両方使っている身からするとちょっぴり不便なので解決します。

## 環境
 * Ubuntu 14.04.1 LTS
 * x86_64

## 変更する
```bash
$ LANG=C xdg-user-dirs-gtk-update
```
これを実行するとダイアログが表示されるので

![Screenshot from 2014-11-29 15:56:34.png](https://qiita-image-store.s3.amazonaws.com/0/3389/73cd2a5e-a002-b592-234d-e2fcf715c374.png)

変える場合は「Update Names」を選択。
これでディレクトリ名が英語にリネームされます。

![Screenshot from 2014-11-29 15:57:04.png](https://qiita-image-store.s3.amazonaws.com/0/3389/11ca1c50-c0f6-95d4-d3ae-752cf7395035.png)

 * 「LANG=C」のあたりが肝のようで、これをつけておくとデフォルトのロケールで実行されるようになります。
 * なぜ「ダウンロード」と「Downloads」が2つともあるのかは後ほど。

## 元に戻す
```bash
$ xdg-user-dirs-gtk-update
```
現在のロケールで、`xdg-user-dirs-gtk-update`を実行するだけ。
上記の手順と同じようにダイアログで変えていいか尋ねられるので、「変更する」を選択すると日本語に戻ります。

## 注意
ファイルがすでに入っている状態だと、リネームではなく変更後のディレクトリ名で新しくディレクトリが作られるので、中身も移動する場合は手動で移動させるしか無さそうです。
そのため、上の変更時には「ダウンロード」にすでにファイルがあったため、「ダウンロード」と変更後の「Downloads」の2つが共存している状態になってました。
react-jadeのテンプレートをプレコンパイルしてから使う

[mizchi/react-jade-precompiler](https://github.com/mizchi/react-jade-precompiler "mizchi/react-jade-precompiler")

[jadejs/react-jade](https://github.com/jadejs/react-jade "jadejs/react-jade")を使うとわかるのだけど、react-jadeのtemplateのパース処理は実は結構重い。最終的にはJSの関数になるので、その関数だけダンプしとけばいいやみたいな雑な感じで作った。Function.prototype.toString()に依存しているので、壊れるケースは多分ありそうな気がする。自分の手持ちのテンプレートだと問題はなかった。

## 使い方

template.jadeを持っているとする

```js
$ npm install -g mizchi/react-jade-precompiler 
$ react-jade-precompiler template.jade -o template.js # generate file
```

Reactのrenderに食わせてやれば動く。

```js
var tmpl = require('./template');
var React = require('react');

React.createClass(
  render: function(){
    return tmpl({foo: 1, bar: ["param"]}); //=> Generate virtual DOM 
  }
);
```

でもこの機能は本体に持ってほしいよなぁという気持ちもあり、実際壊れるケースあるの？みたいな質疑こめて、GithubにIssueを建立して今回は終了。

https://github.com/jadejs/react-jade/issues/29
Edisonをアクセスポイントに設定する

# はじめに
Intelから提供されてるYacto Linuxでの話になります。
systemdとかhostapdで検索すると詳しいことは出てくると思います。

# 設定方法
hostapdを有効にするだけでいいみたいです。
一応、configure_edisonなどで止められてるので、wpa_supplicantも止めるようにしておきます。

## 一時的にアクセスポイント化

``` 
systemctl stop wpa_supplicant 
systemctl start hostapd
```

## 起動時にアクセスポイント化

``` 
systemctl disable wpa_supplicant 
systemctl enable hostapd
```

すぐに利用したい場合は、その場でスタート。

```
systemctl start hostapd
```

## ネットワークの設定について
configure_edisonコマンドでユーザー名、パスワードを変更するときに、
hostapdまわりも変更されるようになっていて、
ネットワーク名がedisonの名前、パスワードがedisonのIDになるようです。

# おわりに
試してみた感じ、壁挟んで隣の部屋でsshしても特にラグを感じないレベルだったので、
なんかsshで入ると遅いなーって場合も効果あるんじゃないでしょうか。
検索エンジンまわりでの重要語リスト


検索エンジンの本を読んでいて、独断と偏見で重要語認定した用語（単純によく見る単語）。

## 全文検索
全文とは「全」部の「文」を意味しており、検索の対象が「テキストからなる文書の全部の文」である場合に、その文書に対して検索を行うことを全文検索と言う。
ファイル名だけ検索する「ファイル名検索」や、「単一ファイル内の文字列検索」とは異なり、文書に含まれる全文を対象とした検索という意味で使われる。

## インデックス
高速な検索が行えるように構成されたデータのこと。
インデックスを生成することをインデキシングと呼ぶ。

## トークナイズ
文書をトークンに分解すること。
一般的にトークナイズには以下の2種類がある。

- 形態素解析
- N-gram

トークナイズ処理を行うモノをトークナイザと呼ぶ。

```
■ トークナイズの例：「東京都と神奈川県」

# 形態素解析
東京/都/と/神奈川/県

# 2-gram
東京/京都/都と/と神/神奈/奈川/川県
```


## ステミング
語形の変化を取り除き、同一の単語表現に変換する処理のこと。
例えば、「run」というクエリで検索をした場合でもrunnerやrunningなどのキーワードとマッチングさせること。

- ステム = 木の幹。この場合「語幹」の意味と取れば良い。
- 語幹 = 語形変化の基礎になる部分。（「歩く」であれば「歩」、「早い」であれば「早」がそれぞれ語幹にあたる）

## ノーマライズ
日本語にすると正規化。
一定のルールに従い、データを利用しやすいように整形すること。
例えば、全角文字列を全て半角文字列に変換するような処理。ユーザが全角、半角のどちらを使っても変換処理によって引き当てることができる。
※ ノーマライズという言葉は検索の文脈以外にも多くの分野で使われているらしいので注意。

## ストップワード
自然言語を処理するにあたって、一般的であるなどの理由で処理対象外とする単語のこと。
例えば日本語の助詞「は」は非常に頻繁に利用されるが、それ自体には情報が無い。
英語では「the」や「a」、「for」などの前置詞がストップワードになることが多いようだ。


#### 参考
- 全文検索・インデックス
  - 『検索エンジン自作入門』
  - http://ja.wikipedia.org/wiki/%E5%85%A8%E6%96%87%E6%A4%9C%E7%B4%A2
- トークナイズ
  - http://www.atmarkit.co.jp/ait/articles/1111/18/news148_2.html
  - http://www.weblio.jp/wkpja/content/%E5%AD%97%E5%8F%A5%E8%A7%A3%E6%9E%90_%E3%83%88%E3%83%BC%E3%82%AF%E3%83%8A%E3%82%A4%E3%82%B6+(tokenizer)
- ストップワード
  - http://d.hatena.ne.jp/keyword/%A5%B9%A5%C8%A5%C3%A5%D7%A5%EF%A1%BC%A5%C9
  - http://www.atmarkit.co.jp/ait/articles/1111/18/news148.html
- ノーマライズ
  - http://divdesign.jp/vocabulary/yougosyu/vocabulary-25-normalize.html
  - http://ja.wikipedia.org/wiki/%E6%AD%A3%E8%A6%8F%E5%8C%96
  - http://www.atmarkit.co.jp/ait/articles/1111/18/news148.html
- ステミング
  - http://chalow.net/2008-01-20-1.html
  - http://www.mf-seo.com/glossary/?id=141
  - http://www.agaru-web.com/word/en/stemming.html
固定headerとfooterの間に、過不足なくコンテンツを表示する

よくあるチャットアプリっぽい見た目のレイアウトを作ってみたいなー、と思ってやってみたら意外と簡単にできたのでメモ。

```html:index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<header>
<h1>へっだー</h1>
</header>
<div id="contents">
</div>
<footer>
<h1>ふったー</h1>
</footer>
</body>
</html>
```

```css:style.css
*{
  margin:0;
  padding:0;
}
body{
  width:100%;
}
header{
  position:fixed;
  top:0;
  left:0;
  z-index:10;
  width:100%;
  height:50px;
}
#contents{
  padding-top:10px;
  margin-top:50px;
  height:auto;
  padding-bottom:10px;
  margin-bottom:80px;
}
footer{
  position:fixed;
  bottom:0;
  left:0;
  z-index:10;
  width:100%;
  height:80px;
}
```
ポイントは、```#contents```の```padding```や```margin```を使って、```header```や```footer```が乗って隠れることになる部分の「糊代」ならぬ「乗り代」を稼いでおくことです。

そのため、```#contents```の```margin-top```は```header```の```height```に、```margin-bottom```は```footer```の```height```に等しい値をとっています。

僕は今回marginを使って乗り代を、paddingを使って要素同士の見かけ上の間隔を取りましたが、逆でも全然OKだと思います。

###複雑なページデザインの場合
さて、上記の例は、ページが静的なデザインであり、余計な```padding```や```margin```も存在しないような場合にはそのまま適用可能ですが、そうでない複雑なページデザインの場合は上手くいかない可能性があります。（実際はこういう場面の方が多いかもしれません）

この場合、JavaScriptを用いて、要素そのもののサイズを取得したり、ページの変化を監視したりといったことが必要になってきます。

```js:main.js
$(function(){
    reviseMargin();
    function reviseMargin(){
        $("#contents").css({
            "margin-top":$("header")[0].offsetHeight + "px",
            "margin-bottom": $("footer")[0].offsetHeight + "px"
        });
    }
});
```
上記のようなプログラムを用いることで、ページの読み込みが終わった際に各要素のサイズを確認し、```margin```の値を再設定することができます。
ここで、```offsetHeight```とは、```padding```や```border```まで含めた要素自体のサイズを示しています。もし、CSSのサイズ指定に%と固定pxが入り交じっているようなレイアウトであっても、pxで値を得ることができます。

[HTMLElement.offsetHeight - Web API インターフェイス | MDN](https://developer.mozilla.org/ja/docs/Web/API/HTMLElement.offsetHeight)

もし、windowサイズの変更にも対応するようにしたいならば、```window```の```resize```イベントにコールバックを設定しておけばOKです。

```js:main.js
$(function(){
    reviseMargin();
    $(window).on("resize",reviseMargin);

    function reviseMargin(){
        $("#contents").css({
            "margin-top":$("header")[0].offsetHeight + "px",
            "margin-bottom": $("footer")[0].offsetHeight + "px"
        });
    }
});
```

##実例
下画像は、LINEアカウント乗っ取り被害により、家族から依頼されて我が家のチャット用にwebsocketで作ったアプリのスクリーンショットです。こんな感じのレイアウトができます。

![img3.png](https://qiita-image-store.s3.amazonaws.com/0/6642/e344c71d-4de4-010f-e53c-10e6f7991ec2.png)

ちなみに、アプリは「やっぱLINEでいっか」という、アカウント作り直した家族の傍若無人な一言でお蔵入りとなりました。世知辛いです。

以上です。何かの参考になれば幸いです。
Mercurial 3.2 における拡張機能について

# Mercurial 3.2 における拡張機能について

Mercurial 3.2 で拡張機能が動かないという話が Twitter でちらほら見えたので、バージョンアップをためらっていましたが、 [TokyoMercurial](https://bitbucket.org/mercurialjp/tokyomercurial/wiki/Hack10) 開催を機に TortoiseHg 3.2.1 をインストールしてみました。

* hg-git: TortoiseHg に同梱されている hg-git では特にエラーは出ませんでした。
* [hgcollapse](https://bitbucket.org/peerst/hgcollapse/overview): 動かなくなっているのでちょっと修正してみましたが、もうちょいなおさないと駄目っぽい。とりあえず自分では使っておこう。 [hokorobi/hgcollapse](https://bitbucket.org/hokorobi/hgcollapse)
* extdiff: /xxx 系のオプションをうまく扱えない。WinmergeU を使っているので、これは致命的だ。前のバージョンに戻そう。 [Bug 4463 – extdiff: extra quotation breaks WinMerge's command-line parsing](http://bz.selenic.com/show_bug.cgi?id=4463)
CoffeeScript FizzBuzz One Liner

どーん。

```coffeescript
fizzbuzz=(n)->["FizzBuzz",n,n,"Fizz",n,"Buzz","Fizz",n,n,"Fizz","Buzz",n,"Fizz",n,n][n%15]
```
https://gist.github.com/s-shin/dc96a02d821c87f77e02

既出かどうかは調べてないです。
rvm から rbenv に移行して、rails 開発環境を作る

自分向け作業メモ

#目次

- rvm の削除
- rbenv のインストール
- rails 環境構築

#rvm の削除

```bash
$ rvm seppuku
```

- 切腹!!

一部削除できないので、rm も使う

```bash
$ rm -rf ~/.rvm
```

# rbenv のインストール

## brew update


```bash
$ brew update
error: Your local changes to the following files would be overwritten by merge:
        README.md
Please, commit your changes or stash them before you can merge.
Aborting
Error: Failure while executing: git pull -q origin refs/heads/master:refs/remotes/origin/master
```

git絡みでエラーが出るので、掃除

```bash
$ cd $(brew --prefix)
$ git fetch origin
$ git reset --hard origin/master

$ brew update
```

##install rbenv

```bash
$ brew install rbenv
$ brew install ruby-build
```

## .zshrc 設定

```bash
if which rbenv > /dev/null; then eval "$(rbenv init - zsh)"; fi
```

## ruby のインストール

インストール可能な一覧の取得

```bash
$ rbenv install -l
```

インストール

```bash
$ rbenv install 2.1.5
```

インストール済一覧

```bash
$ rbenv versions
```

標準で使うruby を設定

```bash
$ rbenv global 2.1.5
```

## 欲しいバージョンがまだない場合

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

## rbenv-gem-rehash のインストール

rvm rehash を自動的にやってくれる

```bash
$ brew install rbenv-gem-rehash
```

## Bundler のインストール

```bash
$ rbenv exec gem install bundler
$ gem list --local

*** LOCAL GEMS ***

bigdecimal (1.2.4)
bundler (1.7.7)
io-console (0.4.2)
json (1.8.1)
minitest (4.7.5)
psych (2.0.5)
rake (10.1.0)
rdoc (4.1.0)
test-unit (2.1.5.0)
```

## bundle exec めんどい対策

```bash
$ brew install rbenv-binstubs
```

# rails 環境構築

適当なディレクトリを作る

## Gemfile 作成

まずは、rails を vendor/bundle にインストール

```bash
$ bundle init

$ cat Gemfile
# A sample Gemfile
source "https://rubygems.org"

gem "rails"
```

## bundle install

```bash
$ bundle install --path vendor/bundle --binstubs bundle_bin
```

```bash
rails -v
Rails 4.1.8
```

## rails new 

```bash
rails new .
```

Gemfile を上書きするか聞かれるので上書き

以上!! 

# git 初期設定

```bash
$ git init

$ echo "/vendor" >> .gitignore
$ echo "/bundle_bin" >> .gitignore

$ git add -all
$ git ci -m "First commit"
```

# 参考資料

- [Ruby - rbenv を使っているなら rbenv-gem-rehash を使おう - Qiita](http://qiita.com/riocampos/items/f0fe7217972b312c4f3a)
- [Rails開発環境の構築（rbenvでRuby導入からBundler、Rails導入まで） - Qiita](http://qiita.com/emadurandal/items/a60886152a4c99ce1017)
- [Ruby - システムのgemにrailsをインストールせずrails newする - Qiita](http://qiita.com/youcune/items/222777415f00d19cccb4)
[Ruby - bundle execを使わずに済む方法（rbenv編） - Qiita](http://qiita.com/naoty_k/items/9000280b3c3a0e74a618)
- [rbenvで最新のRubyがインストール出来ない時の対処 | 9ensanのLifeHack](http://9ensan.com/blog/programming/ruby/rbenv-plugins-ruby-build/)
MySQLコマンドのほんの一部

### カラムの順番変更
``alter table テーブル名 modify 順番を変えたいカラム名 データ型 after 既存のカラム名;``

### ファイルに記述されたSQL文を実行してデータ投入
``source ファイル名;``

### テーブルからのレコードエクスポート(カラム指定、svc形式)
``select カラム名 from テーブル名 into outfile 'ファイル名' fields terminated by ',';``

### インポート
``load data local infile 'ファイル名' ignore into table テーブル名 fields terminated by ',' (カラム名);``

### timestamp型カラムから指定時間帯のデータ検索
``select * from テーブル名 where cast(UDTIME as datetime) between "2014-11-30 10:00:00" and "2014-11-30 10:30:00" limit 10;``

### sql出力解析
``EXPLAIN SELECT * FROM テーブル名 WHERE テーブル名 NOT IN ( SELECT テーブル名
FROM テーブル名 );``

### テーブルから別テーブルへレコード挿入(1000件のデータを挿入)
``insert into テーブル名(カラム名) select カラム名 from テーブル名 limit 1000;``

### インデックス作成
``CREATE INDEX インデックス名 ON テーブル名(カラム名);``
Swiftで文字列からNSDateに変換する

もっとスマートな方法はないものか...
Stringオブジェクトを拡張するとか...

```swift

var date_string: String = "2014-12-01 10:00:00"

var date_formatter: NSDateFormatter = NSDateFormatter()
date_formatter.locale     = NSLocale(localeIdentifier: "ja")
date_formatter.dateFormat = "yyyy/MM/dd HH:mm:ss"
date_formatter.dateFromString(date_string)
```
AndroidのActionBar用アイコン…公式(Developer)からゲットできたとは！フリー＆商用OK！

なんとか〆切に間に合わせるかたちでAndroidアプリを完成させたのだが、
ActionBarにいいアイコンがなかなか見つからず、手間取った。
ところが今さきほど！
ぱんぶろさんの記事
http://www.panzee.biz/archives/3545
を見つけた。

http://developer.android.com/intl/ja/training/implementing-navigation/nav-drawer.html
↑ここの右に表示されているアイコンパックを使えばよかったのだ。。。

iOSだとボタンにアイコンを貼らなくても何とかなったが
Androidだとメニューバーはアイコンでキメておかないとブサイクだと思う。
ばんぷろさんの記事に大変感謝するとともに、みなさまにもシェア！
特定のHTMLファイルが存在するか

```java:test.java
package test;
import java.net.HttpURLConnection;
import java.net.URL;

public class Test {

	public static void main(String[] args) {
		Test test = new Test();
		test.urlCheck();
	}
	public void urlCheck() {
		String fileName = "http://XXX/XXX.htm";
		try {
			URL url = new URL(fileName);
			HttpURLConnection conn = (HttpURLConnection) url.openConnection();
			conn.setRequestMethod("GET");
			conn.connect();
			int status = conn.getResponseCode();
			if(status == 200) {
				System.out.println("success");
			}else{
				System.out.println("fail");
			}
			conn.disconnect();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
```
【ネタ】マの高度なネットストーキング

**※この記事はジョークです。(✿´ ꒳ ` )**

# 情報取得元　(° ꈊ °)✧˖°ｵﾎｯ!
- ブログ
- Twitter
- Facebook
- mixi
- その他SNS

いんたーねっと上にいっぱい情報転がってるよ₍₍ ( ๑॔˃̶◡ ˂̶๑॓)◞♡

# Webスクレイピング　(灬╹ω╹灬)┣¨ｷ┣¨ｷ*
- Jsoup

まずはブログの記事を根こそぎ抜き取るよˉ̞̭ ( ›◡ु‹ ) ˄̻ ̊
ツイートでもいいよ( ∩ˇωˇ∩)

【Webスクレイピング】
http://dev.classmethod.jp/study_meeting/web-scraping-tokyo-2nd/

【関連】
http://qiita.com/FScoward/items/ede5b4c0c98111c219bf
http://qiita.com/FScoward/items/01e3e3e0c213d322383f

# 日時の抽出　╭( ･ㅂ･)و ̑̑ ｸﾞｯ !
やっぱり情報は鮮度が命だからね！'(＜◉＞◞౪◟＜◉＞)'

# キーフレーズ抽出　(๑•﹏•)
- kuromoji
- LIBLINEAR

kuromojiで形態素解析してLIBLINEARでキーフレーズ抽出+。:.ﾟ٩(๑＞◡＜๑)۶:.｡+ﾟ
近頃どんな記事を書いているのか、どんなツイートしてるかを分析しちゃうぞっ٩(๑❛ᴗ❛๑)۶ ﾔｯﾀ～!
相手の行動パターン、趣味、好きなものが読み取れるかも(๑╹ڡ╹๑)

【関連】
http://qiita.com/FScoward/items/78597e012ffe5c281cfc

# BigQuery
データは全部BigQueryに突っ込んじゃえ！(ㆁᴗㆁ✿)
何かに使えるかも(*´﹃｀*)

【関連】
http://qiita.com/FScoward/items/d10a69f3fa94e9620ae2
http://qiita.com/FScoward/items/326479ba990c7c6d805e

# ぷらすあるふぁ (੭ ˃̣̣̥ ω˂̣̣̥)੭ु⁾⁾
毎日「仕事おわった」と律儀につぶやく人なら、勤務体系もバッチリまるわかり！(๑╹ڡ╹๑)

bye (⋈◍＞◡＜◍)。✧♡
collection_check_boxesのブロック内で任意の属性の値を使用する

投稿にカテゴリーを設定できるようにするような時、collection_check_boxesは非常に役に立つヘルパーですが、如何せん情報が少ないもので……。

このヘルパーメソッドの基本的な使い方は以下のような感じです。まあ何てことはない。

    <%= f.collection_check_boxes :category_ids, Category.all, :id, :name do |b| %>
      <% b.label { b.check_box + b.text } %>
    <% end %>

このヘルパーメソッドに渡すブロックの中で適当な属性の値を取得したい時は `b.object` プロパティを経由して直接レコードにアクセスすることが可能です。

    <%= f.collection_check_boxes :category_ids, Category.all, :id, :name do |b| %>
      <% b.label(data-color: b.object.color) { b.check_box + b.text } %>
    <% end %>
[Swift]TextFieldを使って簡単な足し算アプリを作ってみる

出て間もないSwiftに四苦八苦しながらもコツコツとアプリつくっていきたいと思います。
第一弾としてtextFieldをつかった簡単なアプリを作っていきます。

#　１：オブジェクトの配置
まず最初にSingle View Application で新規作成してView Controller を追加します。
そしてView ControllerにButton,TextField,Labelを配置していきます。![スクリーンショット 2014-11-29 15.03.50.png](https://qiita-image-store.s3.amazonaws.com/0/60753/81326228-08e1-5cbb-15a1-ec47ddbec772.png)

ButtonやLabelなどのタイトル（表示している文字：足し算する等）を適当に変えときます。
これでオブジェクトの配置は終了です。

# 2：コードの編集
次にViewController.swiftを編集していきます。

```ViewController.swift


import UIKit

class ViewController: UIViewController {

    @IBOutlet var tasizan1: UITextField!
    @IBOutlet var tasizan2: UITextField!
    @IBOutlet var result: UILabel!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

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

    @IBAction func resultButton(sender: UIButton) {
        var x1 = tasizan1.text.toInt()!
        var x2 = tasizan2.text.toInt()!
        
        var y = x1 + x2
        
        result.text = String(y)
        

    }

}


```

左のTextFieldをtasizan1,右のTextFieldをtasizan2とし、結果を表示するLabelをresultとしました。

そして、ボタンを押した時に足し算をし出力されるコードを書いていきます。

TextFieldで入力された数字はString型なので計算するためにInt型に変換する必要があります。
そこで、toInt()!を使用しx1,x2にInt型に変換した数字を代入します。

そして、yにx1+x2を代入します。

最後にyはInt型なのでString型に変換しresult.textに入れます。

これで、ボタンを押すとTextFieldに代入した数字が足し算されLabelに出力されます。

# まとめ
これだけでは、数字を何も入力していない状態(nil)の時にそのままボタンを押してしまうとエラーが置きシミュレーターが落ちてしまいます。
また、数字以外の文字も打ててしまうので文字を入力したまま足し算ボタンを押してしまってもエラーがおきてしまいます。

結構、問題があるのでこれを回避したコードをまた書いていきたいと思います。
多分コードを書いていく途中に様々な問題が出てくると思うのでその都度解決していく方向で頑張ります…
Genymotionを初めて使ってみたけど予想以上に準備が簡単＋爆速だった


ものすっごい簡単に手順をメモ。環境はMac Yosemiteです。

1. http://www.genymotion.com/ でアカウント登録
2. https://cloud.genymotion.com/page/launchpad/download/ でMac用インストーラーをダウンロード（Android Studioでも使いたかったのでIntelliJ IDEA Pluginもダウンロードしました）
3. インストーラーを開いてGenymotionとGenymotion ShellをApplicationフォルダにコピー
4. Genymotionアプリを開いて「Add」→適当な端末イメージをダウンロードする
5. ダウンロードした端末イメージを選択して「Start」しようとしたところ、VirtualBox関係のエラーが発生
6. 原因がよくわからなかったので最新版に更新( https://www.virtualbox.org/wiki/Downloads )
7. 再度「Start」→動いた！爆速！！！

一度動けばその後はsdk付属のエミュレータとして各所から使えました。これはすごい。
【数式鑑賞】イプシロンデルタ論法

# あいさつ
Qiitaが数式の組版に~~無駄に~~対応していたので書いてみた.（Qiitaパイセンすごい！）

エプシロンデルタ論法から連想された事を徒然と

# エプシロンデルタ論法

一ヶ月前までだった高校生が大学に入っていきなり突きつけられるアレ

```math
\forall _{\epsilon > 0} \: \exists _{\delta > 0} \: \forall _{x \in \Re} \: s.t \: (0 < |\:x - a\:| < \delta \: \Rightarrow \: |\:f(x) - f(a)\:| < \epsilon) 
```

（ちょっとQiitaさんの組版好みじゃないな..）

はじめて見た時は「なんかすごそう（小並感）」と胸を打たれた事を良く覚えています.

収束とか連続を理性的に定義付けられてすげ〜となります.

# 位相空間論的な文脈での連続

そしてエプシロンデルタ論法を飲み込んだ後に位相（トポロジー）というものに触れます.

トポロジーと聞いて「もしやポアンカレ予想のアレ！？」と胸を踊らせますが、なんか全然違くれちょっとガッカリしました.

参考: http://qiita.com/gogotanaka/items/6dee9aeadc83eb889739

位相空間論的な文脈で函数や写像が「連続」とはある２つの位相が同相が準同形である事を学びます.


「なんでこれを連続と呼ぶ感覚はよくわからんけど、まあそんなんね」

そして次の瞬間

「距離空間の函数や写像が連続である事を位相空間論的な文脈で考えるとイプシロンデルタ論法と対応する」（！？）

（大学を休学して１年半経ちますが、２つ距離空間の位相が同準形←→イプシロンデルタ論法

の証明は今でも出来ます.）

位相すげ〜となる. そして位相の闇と代数の光の世界に迷い込んで行くのでした.


大学のカリキュラムは良く出来てるなと思った.
dockerでWEBページのスクリーンショットを撮る

### そういうのあるだろと思ったら、ありました

https://github.com/ubermuda/docker-screenshot
https://registry.hub.docker.com/u/ubermuda/screenshot/

docker hubにアップされていますので、
docker runするだけで動きます。
中身的にはphantomjsっぽいですね

### 必要な環境

* docker

### 実行例

1行だけ！数秒で処理が終わります。

```zsh
$ docker run --rm -v $PWD:/srv ubermuda/screenshot http://www.yahoo.co.jp yahoo.png 1920px
```

(初回はdocker pullに時間がかかります)

### できたyahoo.png

![yahoo.png](https://qiita-image-store.s3.amazonaws.com/0/30715/1d18f52f-50bf-1672-a9c0-7c7d54ba124f.png)

### 問題

以下の問題が問題となりそうですが、各自がんばるしかなさそうです。
phantomjsは詳しくなく、調べてません

* httpsはうまくいかなかった
* フォント

### Flash

Flashに関しては、難しそうです
phantomjsをあきらめてブラウザを起動するとかvncをどうこうするとか考える必要がありそうです
キャリア1年未満だった僕が、社内にGitの運用を布教するために読みあさったもの ( +ちょ〜簡単に各Gitの運用方法のメリット・デメリット )

いろいろな方々とお話していると、「Gitでバージョン管理をしてみたい！」というような意見を多く聞きます。（Qiitaユーザーは「すでに使ってるよヽ(´ー｀)ノ」という方が多いとは思いますが…）

今回は、キャリア1年未満の時にgitの社内での運用についていろいろと制定していた際に、勉強した記事(+α)などを紹介したいと思います。
##読んでほしい方
* gitをチームでこれから導入しようとしている方
* とりあえずgitを使ってみて、突っ走ってしまい、意味の分からないブランチが乱立したりして、運用に困っている方
* 新入社員の方など、バージョン管理って何なんだろうと思っている方

#そもそもGitとは？基本的な使い方は？
Gitを使うと何ができるのか、それを基本的にどう動作させるのかを修得するためのサイトです。
まずは以下のサイトを読んだり触ったりしてみることからはじめました。
##概要や使い方とその解説
* [サルでもわかるGit入門 〜バージョン管理を使いこなそう〜](http://www.backlog.jp/git-guide/)
* [Gitチュートリアルとトレーニング| Atlassian](https://www.atlassian.com/ja/git/tutorial)

##Web上でチュートリアルができるサイト
* [Learn Git Branching](http://k.swd.cc/learnGitBranching-ja/)

このサイトは、ひとつひとつコマンド入力と図解をしてくれるので**とってもオススメ**です！

#Gitのフローに関して
##なぜGitのフローの統一が必要？？
gitは便利な反面、しっかりと運用をしなければ、以下の様な問題点が表出してきます。

###問題点
>* 各々の開発者が、各々自由にでブランチを切ったりして、リポジトリのブランチが乱立したりする
>* 各々の開発者が、各々自由にPush等をしたりして、現在のソースコードの状況がつかめなくなる

ルールの上でGitを利用すると、とてつもなくソースコードの管理がしやすくなります。
上記のような問題点を起こさないためにも、以下の様な記事を読んで、チームに合ったものを適用させるのが良いかと思います。

##Gitの運用方法の種類と、その解説に関する記事

* [Git ワークフローとそのチュートリアル | Atlassian](https://www.atlassian.com/ja/git/workflows)

この記事を読むだけでも、様々なGitの運用方法が分かります。

##Gitの各種運用方法のメリット、デメリットの比較に関する記事
### Git Flow vs Feature Branch Frow(GitHub Flow)な記事
* [git flowとgithub flowざっくりまとめ](http://komaken.me/blog/2013/09/09/git-flow%E3%81%A8github-flow%E3%81%96%E3%81%A3%E3%81%8F%E3%82%8A%E3%81%BE%E3%81%A8%E3%82%81/)
* [Gitブランチを使いこなすgit-flow／GitHub Flow入門](http://www.atmarkit.co.jp/ait/kw/gitflow_nyuumon.html)
* [GitHub Flow (Japanese translation)](https://gist.github.com/Gab-km/3705015)

##ちょ〜簡単に各Gitの運用方法のメリット・デメリット（個人的な意見を含む）

###〜 Git Flow 〜
>
>* [メリット]開発中（developブランチ）、バグ修正(hotfixブランチ)、リリース前(releaseブランチ)等の状況把握がしやすく、大規模開発でも管理が可能
>* [デメリット]すこしフローが複雑になっている
 
###〜 GitHub Flow (Feature Branch Flow) 〜
>
>* [メリット]手順がシンプルで、すべてが同じプロセスなので、素早く修正し、再デプロイできる。
>* [メリット]共有リポジトリにソースがあるので、手元にソースを引っ張ってきてレビューも可能（IDEとかでレビューしたい人もいると思うので。）


### 〜Forking Flow（個人リポジトリ利用)〜
>
>* [メリット]チームでの共有リポジトリをブランチの乱立で汚さない。
>* [メリット]プルリクエストの徹底により、ソースレビューをよく行う習慣がつく。
>* [デメリット]プルリクエスト時点では、共有リポジトリにソースがマージされていないので、個人リポジトリのパーミッションをわざわざ設定しないと手元にソースを引っ張ってきてレビューができない。（IDEとかでレビューしたい人もいると思うので。）

#所感
Gitはすごく便利で、使い方をチームでうまく決めてしまえば、とてつもなく便利なツールになります。フローは様々な種類がありますが、チームやビジネスの状況に合う合わないはあると思うので、いろいろ考慮しつつフローを決めるのが良いと思います。

#読んでいただいた方へ感謝
読んでいただきありがとうございます。まだ新卒で入社してキャリア１年ほどのエンジニアなので、色々とアドバイス等いただけると嬉しいです！
http://qiita.com/h0ng0yut0
Facebook SDKのkey hashがなぜかAndroid実機だけinvalid key hashになる

AndroidでのFacebookログインをつくっていて、Genymotionではうまく動いたが、実機に転送するとinvalid key hashとなる問題に遭遇していた。

どうやらパスワードに適当なを入れてたのが原因らしい。
`android`と入れたらうまくいった

```
$ keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64
Enter keystore password:  android
```

よくわからんが最初にデフォルトで作られた時のキーがそのまま使われるのだろうか？
Google Spread Sheet で独自関数を定義して使う


Spread Sheet で以下のようなレイアウトの出納帳を作った.

![2014-11-29_14_07_05.png](https://qiita-image-store.s3.amazonaws.com/289/29618/1b56f813-515b-826c-b9dc-91880fe14c76.png "2014-11-29_14_07_05.png")

その日の支出は `in 小計` と `out 小計` にまとめられ, `財布` は前日の繰越から収支と銀行残高を引いたものとなっている.
任意の日の財布状況を予測できるので便利.

収支の記述ルールは以下のようになっている.

- 収入の場合は正の数で表す
- 支出の場合は負の数で表す
- 銀行への入金/出金は頭に `B` と付ける
- どんなものを買ったかなどはメモでセルに付記する

ここで, その日ごとの `in 小計`, `out 小計` を出力するためには,

- `in 小計`: 支出記入欄の正の数のみ合計する. 銀行への入出金は除く
- `out 小計`: 支出記入欄の負の数のみ合計する. 銀行への入出金は除く

という操作が必要であり, Spread Sheet で提供されている関数を使うとだるい気がした (範囲すべてのセルに対して IF で調べたり).
そのため, 独自関数 (Custom Function) を定義して, 使うこととした.

まず`ツール` > `スクリプト エディタ...` からスクリプトエディタを立ち上げる.

![2014-11-29_14_16_35.png](https://qiita-image-store.s3.amazonaws.com/289/29618/bcf6f867-33ab-7829-9cf2-17be5eeb134b.png "2014-11-29_14_16_35.png")


以下の関数を追加して保存.

```javascript
function 入金(target_list){
  sum = 0;
  for (var i = 0; i < target_list[0].length; i++) {
    target_cell = target_list[0][i];
    if (target_cell > 0) sum += target_cell;
  }
  return sum;
}

function 出金(target_list){
  sum = 0
  for (var i = 0; i < target_list[0].length; i++) {
    target_cell = target_list[0][i];
    if (target_cell < 0) sum += target_cell;
  }
  return sum;
}
```

範囲の場合, 1 行でも 2 次元配列で渡されるので注意.

ここで定義した関数はそのまま Spread Sheet から呼び出せる.

![ 2014-11-29 14.20.22.png](https://qiita-image-store.s3.amazonaws.com/289/29618/9e833573-d6ae-fc91-4867-02346eaccd47.png " 2014-11-29 14.20.22.png")

異様に簡単にできて便利.

## References

- [GoogleAppsScript - Spreadsheetの独自関数をGASで作るよ☆ - Qiita](http://qiita.com/soundTricker/items/c9fa4470c59ef677dd5a)
- [Custom Functions in Google Sheets - Google Apps Script — Google Developers](https://developers.google.com/apps-script/guides/sheets/functions#using_a_custom_function)
Emacsでもアスキーアートが読める

こんにちはこんにちは!

みなさんも、きっとどこでもやる夫スレを読みたいですよね。特にやる夫スレを読むためだけにWindowsを起動するのは、とてもめんどくさい。

Emacsならばどの環境にもあるから、やる夫スレを読むのに利用しない手はないよね!

![](https://qiita-image-store.s3.amazonaws.com/0/4121/53a90840-b128-b14b-76ed-0d7c0a65a019.png)

> 宣伝: [やる夫達は鳥人戦隊のようです](http://yaruo.wikia.com/wiki/%E3%82%84%E3%82%8B%E5%A4%AB%E9%81%94%E3%81%AF%E9%B3%A5%E4%BA%BA%E6%88%A6%E9%9A%8A%E3%81%AE%E3%82%88%E3%81%86%E3%81%A7%E3%81%99) おもしろいよ！

AAフォントをインストール
-----------------------

* [AAを見るための環境設定-しっぽのとこ-](http://tail.s170.xrea.com/html/text/aa_promo/aa_setting/)

残念なことに、アスキーアート文化は Windows の「MS P ゴシック 16px」に強く依存します。なので、 Windows 以外の環境では綺麗に表示できません。また、現在の液晶の高密度化の流れではドットフォント相性がとても悪く、(いまさらなんだけど…) Windows でも最近の Chrome や Internet Exproler 11 でもドットフォントを利用した最適なアスキーアート表示は困難になってきてゐるようです。

さてさて、Windows 以外の OS にはもちろん MS P ゴシックなどありませんので、文字幅が互換のフォントを用意する必要があります。

[monapo](http://www.geocities.jp/ep3797/modified_fonts_01.html) とか [IPAモナーフォント](http://www.geocities.jp/ipa_mona/) とかいろいろあるんですけれど、最近は [Roy Tam](https://plus.google.com/+RoyTam/posts) さんといふ方が [モナーフォント](http://monafont.sourceforge.net/) と出水ゴシック M-16(izmg16) を合成して作ったフォントが結構良さげです。[Font Drops - RT Free Soft](https://sites.google.com/site/rtfreesoft/font-drop) にあります `mona-izmg16.7z` をインストールしてみませう。

Navi2chをインストール
--------------------

[Navi2ch](http://navi2ch.sourceforge.net/)は1999年に開発着手された、最古参に近い歴史を持つ専ブラです。[Navi2chはMELPAに登録されてる](http://melpa.org/#/navi2ch)ので、`package-install` でリポジトリの設定をすれば簡単に導入できます。パッケージマネージャーを利用しない場合は、SourceForge版ではなく、 **必ず** [naota/navi2ch](https://github.com/naota/navi2ch) のバージョンを利用してください。


`.emacs`に設定を追加する
-----------------------

ホームディレクトリの `~/.emacs.d/init.el` とかに設定を追加します。

```init.el
(require 'navi2ch)
(require 'navi2ch-mona)
(custom-set-variables
 '(navi2ch-article-use-jit t)
 '(navi2ch-article-exist-message-range nil)
 '(navi2ch-article-new-message-range nil)
 '(navi2ch-mona-enable t)
 '(navi2ch-mona-use-ipa-mona t)
 '(navi2ch-mona-ipa-mona-font-family-name "mona-izmg16"))
(navi2ch-mona-setup)
```

僕は[use-package](https://github.com/jwiegley/use-package)を使ってるので、こんなふうに書きます。

```init.el
(use-package navi2ch
  :config
  (progn
    (use-package navi2ch-mona)
    (custom-set-variables
     '(navi2ch-article-use-jit t)
     '(navi2ch-article-exist-message-range nil)
     '(navi2ch-article-new-message-range nil)
     '(navi2ch-mona-enable t)
     '(navi2ch-mona-use-ipa-mona t)
     '(navi2ch-mona-ipa-mona-font-family-name "mona-izmg16"))
    (navi2ch-mona-setup)))
```

やる夫系板を追加
---------------

やる夫系の掲示板は現在は2ちゃんねるにはないので、明示的に追加する必要があります。

ホームディレクトリの `.navi2ch/ext.txt` に、以下のような内容を保存します。


```~/.navi2ch/ext.txt
やる夫板II
http://jbbs.shitaraba.net/otaku/12973/
Yaruo-II
やる夫スレヒロイン板(新)
http://jbbs.shitaraba.net/otaku/15956/
Yaruo-heroine
小さなやる夫板
http://jbbs.shitaraba.net/otaku/14504/
Yaruo-300
やる夫板ＥＸ
http://jbbs.shitaraba.net/otaku/15257/
Yaruo-EX
やる夫系雑談・避難・投下板
http://jbbs.shitaraba.net/otaku/12368/
Yaruo-zatsudan
```

僕の `etc.txt` は https://raw.githubusercontent.com/zonuexe/dotfiles/master/.navi2ch/etc.txt にあります。

準備完了
--------

あとは `M-x navi2ch` で Navi2ch を起動して、ふつうに開くだけです! 良いやる夫生活を!

アスキーアート編集?
----------------

いやあ、ちょっと僕にはそこまでがんばれない…
FreeBSD に VirtualBox を入れて、ヘッドレスで VM を自動起動する

FreeBSD に VirtualBox を入れて、ヘッドレスで VM を自動起動する手順を書いてみました。

ヘッドレスなので X Window System は必要ありません。

VirtualBox のインストール
-------------------------
```
$ pkg install virtualbox-ose
$ vi /boot/loader.conf
vboxdrv_load="YES"
$ vi /etc/rc.conf
vboxnet_enable="YES"
```

VirtualBox VM作成
-----------------

```
$ VBoxManage createvm --name Docker
$ VBoxManage registervm ~/VirtualBox\ VMs/Docker/Docker.vbox 
$ VBoxManage modifyvm Docker --memory 10240 --acpi on --ioapic on --cpus 4 --hwvirtex on --nestedpaging on --largepages on --nic1 nat --nictype1 82540EM --nic2 bridged --bridgeadapter2 re0 --nictype2 82540EM --cableconnected1 on --boot1 none --boot2 disk --boot3 dvd --boot4 net --usb off --usbehci off

$ VBoxManage createhd --size 81920 --variant Fixed --filename ~/VirtualBox\ VMs/Docker/Docker.vdi
$ VBoxManage storagectl Docker --name SATA --add sata --portcount 5 --bootable on
$ VBoxManage storageattach Docker --storagectl SATA --port 1 --type hdd --medium ~/VirtualBox\ VMs/Docker/Docker.vdi

$ VBoxManage storageattach Docker --storagectl SATA --port 2 --type dvddrive --medium <imageファイル名>
```

* VM名は Docker
* メモリは 10240MB
* CPU は 4
* NIC は NAT と Bridged
* CentOS を想定

VM への OS のインストール
-------------------------

実際の OS のインストールには vnc での接続が必要です。

```
VBoxHeadless -s Docker
```

rc.conf に登録して VM を自動起動させる
--------------------------------------

```
$ vi /etc/rc.conf
vboxheadless_enable="YES"
vboxheadless_machines="docker"

vboxheadless_docker_name="Docker"
vboxheadless_docker_user="hoge"
vboxheadless_docker_stop="acpipowerbutton"
```

* 起動ユーザー名は hoge
Vimの言語インターフェースのバージョン確認

Vimの各スクリプト言語インターフェースのバージョンを確認する方法。
入力とそれぞれの出力例を示す。

# Lua

```
:lua print(_VERSION)
Lua 5.4
```

patch level まで表示するには、
```
:lua print(vim.lua_version)
5.4.2
```

## LuaJIT

```
:lua print(jit.version)
LuaJIT 2.1.0-alpha
```

# MzScheme (Racket)

```
:mzscheme (display (version))
6.3
```

# Perl

```
:perl VIM::Msg($^V)
v5.16.3
```

あるいは、

```
:perl VIM::Msg($])
5.016003
```

Vim 7.4.1729 以降であれば、`VIM::Msg()` の代わりに `print` も使用可能。

```
:perl print $^V
v5.22.1
```


# Python 2

```
:python import sys; print sys.version
2.7.8 (default, Jun 30 2014, 16:03:49) [MSC v.1500 32 bit (Intel)]
```

# Python 3

```
:python3 import sys; print(sys.version)
3.4.2 (v3.4.2:ab2c023a9432, Oct  6 2014, 22:15:05) [MSC v.1600 32 bit (Intel)]
```

# Python X

Vim 8.0.0251 で使えるようになった、Python 2/3 自動選択コマンド。

```
:pyx import sys; print(sys.version)
3.4.5 (default, Oct 10 2016, 14:41:48)
[GCC 5.4.0]
```

`'pyxversion'` オプションにてバージョンを選択可能。

```
:set pyx=2
:pyx import sys; print(sys.version)
2.7.12 (default, Oct 10 2016, 12:56:26)
[GCC 5.4.0]
```

# Ruby

```
:ruby print RUBY_VERSION
2.1.5
```

# Tcl

```
:tcl puts [info patchlevel]
8.5.11
```

あるいは、

```
:tcl puts $tcl_version
8.5
```

# 公式ヘルプの記載

Vim 7.4.2347以降であれば、ここに記載した方法は、英語版の公式ヘルプにも記載されています。例:

```
:help :python@en

    (略)

To see what version of Python you have:
	:python import sys
	:python print(sys.version)
```
FreeBSD で PT1/PT2(PTx) を入れて recpt1 と egpdump を使うところまでの手順

FreeBSD で PT1/PT2(PTx) を入れて recpt1 と egpdump を使うところまでの手順をまとめてみました。

```
$ pkg install ptx-kmod ab25 
$ vi /etc/rc.conf
ptx_enable="YES"
pcscd_enable="YES"
$ /usr/local/etc/rc.d/ptx start
$ /usr/local/etc/rc.d/pcscd start
$ pkg install gmake gcc autoconf automake pkgconf cmake
$ ln -s /usr/local/bin/gcc48 /usr/local/bin/gcc
$ ln -s /usr/local/bin/g++48 /usr/local/bin/g++

$ cd
$ git clone https://github.com/stz2012/libarib25.git
$ cd libarib25
$ gmake
$ gmake install

$ cd
$ fetch http://hgotoh.jp/wiki/lib/exe/fetch.php/documents/freebsd/freebsd-019-recpt1_20140521.tar.gz
$ tar zxvf freebsd-019-recpt1_20140521.tar.gz
$ cd recpt1
$ ./autogen.sh
$ gmake
$ gmake install

$ cd
$ git clone https://github.com/Piro77/epgdump.git
$ cd epgdump
$ cmake .
$ make
$ make install
```

make install などで権限がない場合は sudo なり、su するなりしてください。
Amazon Kinesis Clinet の各言語実装 (Python, Ruby, PHP)


http://aws.amazon.com/jp/kinesis/

Kinesis では、SDKの他に、Client Library (KCL)という便利なヤツが提供されてます。

KCLから Java以外の言語とやりとりするための機能(KCL MultiLangDaemon)があって、その実装として Python版が公式に提供されてます。

Pythonと同様に、他言語で実装されたものも見つけたのでリストアップしてみました。

## 公式

### Java

* Amazon Kinesis Client Library for Java
	* https://github.com/awslabs/amazon-kinesis-client

### Python 

* Amazon Kinesis Client Library for Python
	* https://github.com/awslabs/amazon-kinesis-client-python


## 非公式

### Ruby

* Amazon Kinesis Client for Ruby
	* https://github.com/everydayhero/amazon-kinesis-client-ruby

### PHP

* amazon-kinesis-client-library-php
	* https://github.com/fukuiretu/amazon-kinesis-client-library-php
	* http://qiita.com/_r_82_/items/332255514ad2c6760e81


ちなみに、どうやって、Javaと他言語がやりとりしてるのか、わかってません。
誰か教えてください。

試してみようと思いつつ、Javaがめんどくさくて腰が重い…
githubに"You are not a human."と言われたら


## 現象

githubのgistを編集していると、突然、以下のようなアラートが表示されて、プロファイルが非公開とされてしまいました。

```
One of our mostly harmless robots seems to think you are not a human.
Beacause of that, It's hidden your profile from the public. If you really are human, please contact support to have youre profile reinstated.
We promise we won't require DNA proof of your humanity.
```

gistの内容を編集することも、見ることもできなくなり、コンタクトへ連絡してみました。

```
Please reinstated my account.
I got the following message:

bla bla bla...

```

他にも同様な方がいらっしゃっるようで、数時間で復旧してくれたとのことでしたが、返事があったのは半日後ぐらいでした。

復旧したものの、またすぐにgistが編集できなくなり、その後、同じように"You are not a human."と警告されたので、再度コンタクトへ連絡してみました。

```
>Sorry about that! Sometimes our spam-detecting robots get a little overzealous and need to be reprogrammed. 
>I've reset your profile, so your repositories and gists should be available again, and you shouldn't see that message anymore.

Thank you. I cannot see that message again.
but I cannot edit my gist file. then I got the following message:

Whoops.
We seem to have missed the gist of that gist you were looking for.

what does it mean?
```

この後、返事はありませんでしたが、すぐに復旧したようで、ようやくgistの編集ができるようなりました。

また半日後ぐらいに、コンタクトから以下のような連絡があり、正式に解決しました。

```
Sorry for the continued trouble! We've whitelisted your account, so it should not be flagged again, and your Gists should be viewable once more.
```

## 原因は？

なぜ、こんなことになったのかなと考えてみると、gistを書いているときに、誤って連続して同じ内容のファイルを複数作成してしまったことが原因ではないかと思います。

ロボットがその行為をスパムと判断したんだろうと思います。たしかに、すこし過剰な（overzealous）反応なのかもですね。

whitelistに登録してくれたらしいので、これからは人間として扱ってもらえそうです。

DNA Proofも、もちろん必要ありませんでした（笑）。
iOSアプリ起動中にスリープしないようにする

AppDelegate.swiftのapplication:didFinishLaunchingWithOptions:などでUIApplicationのidleTimerDisabledにtrueを入れてやれば良い。

``` swift
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    UIApplication.sharedApplication().idleTimerDisabled = true
    return true
}
```
Edison@Debian(ubilinux)にVNCを入れる。

Edisonにはビデオ出力はありませんが、ubilinuxにするとふつーのDebianです。
まあ簡単にログインして、

必要なパッケージをインストール。今回は省メモリなfluxboxさんとtightvncserverさんを入れます。
`apt-get install fluxbox tightvncserver`

一度起動して、終了。この間にパスワード何にするか聞かれるので、細やかな8文字の障壁を設定する。
`vncserver :1`
`vncserver -kill :1`

設定ファイルを編集して、いかのようにfluxboxさんを指定する。
`nano .vnc/xstartup`

```lang:.vnc/xstartup
#!/bin/sh

xrdb $HOME/.Xresources
xsetroot -solid grey
#x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
#x-window-manager &
# Fix to make GNOME work
export XKL_XMODMAP_DISABLE=1
#/etc/X11/Xsession
amule &
fluxbox &
```
もう一回起動する。
`vncserver :1`

以上でEdisonにVNCでつなぐと画面が出てきます。

ちなみにtightvncでつないだ状態でのメモリ量

```lang:console
root@ubilinux:~# free -m
             total       used       free     shared    buffers     cached
Mem:           960        383        577          0         23        307
-/+ buffers/cache:         52        908
Swap:            0          0          0
```
まあ普通ですね。
577MBが手付かずで空いています。でもswap無しはサドンデスワールドで心臓に良くないですね。
JavaでAES256を使用できるようにする

# 概要


Javaには、Cipherという暗号化/復号化を行うクラスが用意されている。
デフォルトのままだとAESの鍵の長さは128bitしか使えない。
これは、（AESの規格を定めた）アメリカの輸出規制か何かの制限によるものらしいが、
[ここ](http://software.fujitsu.com/jp/manual/manualfiles/M090025/B1FN5943/01Z200/B5943-b-02-00.html "強い暗号化方式")によると日本ではこの制限を受けないので、
Javaのポリシーファイルを書き換えれば256bitも使える。


## JCE（Java Cryptography Extension）の無制限強度の管轄ポリシーファイルをダウンロード

バージョンによってファイルも変わるので注意。

| バージョン | ダウンロード元 | ファイル名 |
|:-----------|------------:|:------------:|
| JDK1.6 | [JCE Unlimited Strength Jurisdiction Policy Files 6](http://www.oracle.com/technetwork/jp/java/javase/downloads/jce-6-download-429243.html) | jce_policy-6.zip |
| JDK1.7 | [JCE Unlimited Strength Jurisdiction Policy Files 7](http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html) | UnlimitedJCEPolicyJDK7.zip |
| JDK1.8 | [JCE Unlimited Strength Jurisdiction Policy Files 8](http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html) | jce_policy-8.zip |


## ダウンロードしたJCE（Java Cryptography Extension）の無制限強度の管轄ポリシーファイルを差し替え

1. zipファイルの解凍
2. ファイル内に入っている「US_export_policy.jar」と「local_policy.jar」を以下の場所にコピー(既に同名ファイルが存在しているので、上書きする)

* Windows
<pre>
%JAVA_HOME%\jre\lib\security
</pre>

* Linux
<pre>
$JAVA_HOME/jre/lib/security
</pre>

あとは[ここ](http://techbooster.jpn.org/andriod/application/6629/)を参考にコーディングすればよろしいかと。

以上！
MySQLのプロシージャのサンプル

MySQLのプロシージャのサンプル。初投稿です。

```mysql:memberupdate.sql
#（既存プロシージャを）DROPしてからCREATEする事。DROPはDELEMITER外に書く事。
DROP PROCEDURE IF EXISTS memberupdate;
DELIMITER //
CREATE PROCEDURE memberupdate ()
BEGIN

  #宣言は、変数、カーソル、ハンドラの順に行う事。そうしないとエラーが出る。
  DECLARE mem_id INT;
  DECLARE mem_name VARCHAR(20);
  DECLARE mem_age INT;
  DECLARE fetch_state INT default 0;

  DECLARE cur_member CURSOR FOR 
    SELECT uid, name, age FROM member;

  #ループの終了判別にエラーハンドラを利用している。
  DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET fetch_state = 1;

  OPEN cur_member;

  #ラベル名:の後ろには半角スペースを入れる事。
  label1: REPEAT

    #MySQLのプロシージャには配列が無い。
    #だから、カーソルのループ内で、値を取り出してで更新処理を行っている。
    #一時テーブルを作る方法もあるが、結構面倒なので。
    FETCH cur_member INTO mem_id, mem_name, mem_age;
    IF NOT fetch_state THEN
      UPDATE member SET name = CONCAT(mem_name, 'さん'), age = mem_age + 1 WHERE uid = mem_id;
    END IF;
    counter=counter+1;
    IF mem_id=2 THEN

      #LEAVEで特定ラベルのループを抜ける事ができる。
      #この例では単一のループなのであまり意味が無いが、
      #入れ子でループしている場合に効果あり。
      LEAVE labl1;
    END IF;
  UNTIL fetch_state
  END REPEAT label1;

  CLOSE cur_member;

#最後のENDの後ろにセミコロンを入れない事。
END
//

#末尾DELIMITERと;の間には半角スペースを入れる事。
DELIMITER ;

```
iOSアプリのステータスバーを非表示にする

ステータスバーを表示させないアプリを作りたいとき。
起動画面と起動後の画面を個別に設定する。

# 起動画面のステータスバーを非表示にする

プロジェクト設定のTARGETS > General > Development Info > Status Bar StyleのHide during application launchのチェックを入れる。

![スクリーンショット 2014-11-29 12.21.13.png](https://qiita-image-store.s3.amazonaws.com/0/8748/09460ed8-fc72-970a-030e-ccb7cd9c23fc.png)

# 起動後のステータスバーを非表示にする

プロジェクト設定のTARGETS > Infoで＋を押して行を追加、
View controller-based status bar appearance
を選択してvalueにNOを入れる。

![スクリーンショット 2014-11-29 12.19.38.png](https://qiita-image-store.s3.amazonaws.com/0/8748/a53e8963-3fbc-74c1-956e-0e140730d71f.png)
Unity付属のMonoDevelopがあまりにも使いにくいのでむしゃくしゃしてXamarinStudioに置き換えた


## はじめに

Unity付属のMonoDevelopって使いにくいですよね。
なので、XamarinStudioに置き換えてみました。

↓こんな感じ。

![スクリーンショット 2014-11-29 11.03.20.png](https://qiita-image-store.s3.amazonaws.com/0/20722/6077849b-cb87-4c81-1e24-6436dd4c824f.png "スクリーンショット 2014-11-29 11.03.20.png")

## 手順

元々のMonoDevelop.appをMonoDevelop.org.appに名称変更しておいて、コピーしてきたXamarinStudio.appの名称をMonoDevelop.appに変更しただけ。

## 結果

Unityで適当なスクリプトをダブルクリックしてエディタを起動すると、無事XamarinStudioが起動しました。
まあ、ちょっとエラーメッセージが出ますが、そこは無視で。

とりあえず、このまま使っていこうかと思います。
CircleCI vs CodeshipCI


## 機能比較

|ポイント|Circle|Codeship|
|-------|------|--------|
|環境準備スピード|速い(travis ciより)|もっと速い|
|複数VMで並列実行|GUIで設定できる|できない|
|SSHアクセス|できる|できる|

## vm spec

|item|Circle|Codeship|
|----|------|--------|
|CPU Type|Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz|Intel(R) Xeon(R) CPU E5-2680 v2 @ 2.80GHz|
|CPU Cores|8|8|
|Memory(単位：G)|total:240/used:51/free:188|total:58/used:44/free:14|

## UnixBench測定

### Circle CI
**30分以内終わらなかったので、結果なし**

### Codeship

```bash
Benchmark Run: Fri Nov 28 2014 20:13:53 - 20:42:07
32 CPUs in system; running 1 parallel copy of tests

Dhrystone 2 using register variables       33916956.0 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                     4419.0 MWIPS (9.8 s, 7 samples)
Execl Throughput                               2832.8 lps   (29.7 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks        898613.6 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks          248292.9 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks       1925824.9 KBps  (30.0 s, 2 samples)
Pipe Throughput                             1206604.8 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                  43620.2 lps   (10.0 s, 7 samples)
Process Creation                               7923.8 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                   8295.1 lpm   (60.0 s, 2 samples)
Shell Scripts (8 concurrent)                   3156.6 lpm   (60.0 s, 2 samples)
System Call Overhead                        1042515.1 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   33916956.0   2906.3
Double-Precision Whetstone                       55.0       4419.0    803.4
Execl Throughput                                 43.0       2832.8    658.8
File Copy 1024 bufsize 2000 maxblocks          3960.0     898613.6   2269.2
File Copy 256 bufsize 500 maxblocks            1655.0     248292.9   1500.3
File Copy 4096 bufsize 8000 maxblocks          5800.0    1925824.9   3320.4
Pipe Throughput                               12440.0    1206604.8    969.9
Pipe-based Context Switching                   4000.0      43620.2    109.1
Process Creation                                126.0       7923.8    628.9
Shell Scripts (1 concurrent)                     42.4       8295.1   1956.4
Shell Scripts (8 concurrent)                      6.0       3156.6   5261.0
System Call Overhead                          15000.0    1042515.1    695.0
                                                                   ========
System Benchmarks Index Score                                        1192.6

------------------------------------------------------------------------
Benchmark Run: Fri Nov 28 2014 20:42:07 - 20:42:07
32 CPUs in system; running 32 parallel copies of tests
```
SeleniumWebdriver の Chromeを入れる

### エラー
```
`executable_path': Unable to find the chromedriver executable. Please download the server from http://chromedriver.storage.googleapis.com/index.html and place it somewhere on your PATH. More info at http://code.google.com/p/selenium/wiki/ChromeDriver. (Selenium::WebDriver::Error::WebDriverError)
```

### エラーに書かれているページに行く
http://chromedriver.storage.googleapis.com/index.html

### 最新のディレクトリに行き、OSにあったzipをダウンロード
2.9

chromedriver_mac32.zip	2014-02-01 03:43:26	4.25MB	

### 展開する
 => chromedriver

### $PATHに置く
mv ~/Downloads/chromedriver /usr/local/bin/


#### プロキシ設定
プロキシ配下めんど・・・・
https_proxyをbash_profileに記載していると、no_proxyに`127.0.0.1`を入れておかないとダメらしい。

### 使う
```rb
require 'selenium-webdriver'

driver = Selenium::WebDriver.for :chrome
driver.quit
```