OmniAICreator/Qiita-1.07M huggingface dataset:
Testlinkのインストール

AWS EC2に Testlink 1.9.12 をインストールしました。

## アカウント
まっさらサーバーなので、このあたりの準備をして。
http://qiita.com/dahugani/items/e1fc5c212bf6a7365f8f

## LAMPインストール
http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/install-LAMP.html

```
sudo yum update -y
sudo yum groupinstall -y "Web Server" "MySQL Database" "PHP Support"
sudo yum install -y php-mysql
sudo service httpd start
sudo service mysqld start
```

## Testlinkのインストール

こちら、参考にさせて頂きました。
http://qiita.com/oh_rusty_nail/items/0c5b4678aa601a2dd96b

インストール画面にアクセスして使用許諾に同意したところで、Failedが4つ。

- PHP version Failed! - You are running on PHP 5.3.29, and TestLink requires PHP 5.4.0 or greater. This is fatal problem. You must upgrade it.
- Checking if /var/www/html/testlink-1.9.12/gui/templates_c directory is writable (by user used to run webserver process)	Failed!
- Checking if /var/testlink/logs/ directory exists [S]	Failed!
- Checking if /var/testlink/upload_area/ directory exists [S]	Failed!

### PHPを入れ直す

http://qiita.com/oh_rusty_nail/items/1fc11ec11152bfe30c45

httpdを起動しなおしてからもいちどインストールページにアクセスすると、PHPのエラーは消えました。よしよし。

### ディレクトリ関係

user used to run webserver process が誰かは、こちらで確認して。

```/etc/httpd/conf/httpd.conf
User apache
Group apache
```

指定のディレクトリを作成。書き込み権限の与え方はどうするのが適切かよくわからなかったのですが、とりあえず所有者を変えたらOKでした。

```
sudo mkdir /var/testlink
sudo mkdir /var/testlink/logs
sudo mkdir /var/testlink/upload_area
sudo chown apache:apache /var/www/html/testlink-1.9.12/gui/templates_c
sudo chown apache:apache /var/testlink/logs
sudo chown apache:apache /var/testlink/upload_area
```

### ログインできるようになったけど

Continueを押せるようになったので、押して、DBの設定を入力すると、DB作成もやってくれます。

これでTestlinkにadminでログインできるようになりました。
でも、なんか config_check.txt を確認してくださいという警告が画面上に表示されてます。中身は。。。

- インストールディレクトリを削除してください!
- 'admin' アカウントのパスワードをデフォルトのものから変更してください!
- Emailに関する以下のパラメータを確認してください
- GD PHP拡張が使用できません。グラフが機能しません

### インストールディレクトリの削除

インストールディレクトリは最初に解凍したパス配下の「install」らしいので。

```
sudo rm -rf /var/www/html/testlink-1.9.12/install
```

### 管理者パスワードの変更

これは、Testlinkの画面から出来ます。

### メールの設定

設定ファイル /var/www/html/testlink-1.9.12/config.inc.php の該当箇所を設定します。
項目を入力しておけば、実際にメールを送受信出来なくても警告は消えました。

### GDのインストール

php.ini のありかは以下のコマンドで探せました。

```
php -i | grep php.ini

```

でも、php.ini に php_gd2.dll は見当たらないので、インストールが必要な模様。
yumであっさり入りました。

```
sudo yum -y install php54-gd
sudo service httpd restart
```

## おしまい

もうちょっと苦労するかと思いましたが、思いのほかさっくりとインストールできました。
優秀なインストーラーと情報提供してくだっている方々に感謝です。
Ｐａｔｈオブジェクトでのファイルの探索



```scala

import java.nio.file._

// ファイルを探索する
def walkFiles(path:Path) {
	val visitor = new SimpleFileVisitor[Path] {
		override 
		def preVisitDirectory(
			dir:Path
		,	attr:BasicFileAttributes
		): 	FileVisitResult = {
			println(dir)
			FileVisitResult.CONTINUE
		}
		override 
		def visitFile(
			file:Path
		,	attr:BasicFileAttributes
		):	FileVisitResult = {
			println(file)
			FileVisitResult.CONTINUE
		}
	}
	Files.walkFileTree(path, visitor);
}
// Zip内のファイルを列挙
walkFiles(zipFs.getPath("/"))

```
<値型>と<参照型>、<値渡し>と<参照渡し>について実行例を出す（C編）


- [__<値型>と<参照型>、<値渡し>と<参照渡し>がそろってる言語で実行例を出す__](http://qiita.com/irxground/items/5b37a1643fb521cf057b)（C#）
- [__<値型>と<参照型>、<値渡し>と<参照渡し>がそろってる言語で実行例を出す（Swift編）__](http://qiita.com/koher/items/79fa03a472349a123ae8)
- [__<値型>と<参照型>、<値渡し>と<参照渡し>について実行例を出す（PHP編）__](http://qiita.com/mpyw/items/bd38da57837d35214aae)

__C言語に参照渡し（≠参照の値渡し）はない__ ですが、Cで同様のコードを表現してみました。参照渡しが裏でやっているのはこういうことだと理解しています。

## 実行コード

```c
#include <stdio.h>
#include <stdlib.h>

typedef struct { int value; } ValWrap;
typedef ValWrap * RefWrap;

void swapAndEditValVal(ValWrap left, ValWrap right) {
	ValWrap tmp = left;
	left = right;
	right = tmp;
	tmp.value *= 100;
}

void swapAndEditRefVal(RefWrap left, RefWrap right) {
	RefWrap tmp = left;
	left = right;
	right = tmp;
	tmp->value *= 100;
}

void swapAndEditValRef(ValWrap *left, ValWrap *right) {
	ValWrap tmp = *left;
	*left = *right;
	*right = tmp;
	tmp.value *= 100;
}

void swapAndEditRefRef(RefWrap *left, RefWrap *right) {
	RefWrap tmp = *left;
	*left = *right;
	*right = tmp;
	tmp->value *= 100;
}

int main(int argc, const char * argv[]) {
	{
		printf("値の値渡し\n");
		ValWrap left;
		left.value = 1;
		ValWrap right;
		right.value = 2;
		swapAndEditValVal(left, right);
		printf("%d, %d\n", left.value, right.value);
	}
	{
		printf("ポインタの値渡し≒参照の値渡し\n");
		RefWrap left = malloc(sizeof(ValWrap));
		left->value = 1;
		RefWrap right = malloc(sizeof(ValWrap));
		right->value = 2;
		swapAndEditRefVal(left, right);
		printf("%d, %d\n", left->value, right->value);
		free(left);
		free(right);
	}
	{
		printf("値の参照渡しのようなもの（ポインタの値渡しを使って参照渡しの挙動を実装）\n");
		ValWrap left;
		left.value = 1;
		ValWrap right;
		right.value = 2;
		swapAndEditValRef(&left, &right);
		printf("%d, %d\n", left.value, right.value);
	}
	{
		printf("参照の参照渡しのようなもの（前の二つの組み合わせで参照の参照渡しの挙動を実装）\n");
		RefWrap left = malloc(sizeof(ValWrap));
		left->value = 1;
		RefWrap right = malloc(sizeof(ValWrap));
		right->value = 2;
		swapAndEditRefRef(&left, &right);
		printf("%d, %d\n", left->value, right->value);
		free(left);
		free(right);
	}
	
    return 0;
}
```

## 実行結果

```
値の値渡し
1, 2
ポインタの値渡し≒参照の値渡し
100, 2
値の参照渡しのようなもの（ポインタの値渡しを使って参照渡しの挙動を実装）
2, 1
参照の参照渡しのようなもの（前の二つの組み合わせで参照の参照渡しの挙動を実装）
2, 100
```

## 雑感

Wikipediaの[引数](http://ja.wikipedia.org/wiki/%E5%BC%95%E6%95%B0)を読むと、 __ポインタ渡し__ と __ポインタの値渡し__ という言葉が出てきて両方同じ意味を表してるっぽいですが、ポインタ渡しという言葉は紛らわしいので良くないと思います。 __参照渡し ≠ 参照の値渡し__ なのに、 __ポインタ渡し = ポインタの値渡し__ というのはどう考えてもややこしいです。
[HTML5]ドラッグ&ドロップを実装するのに参考になった記事まとめ


# **概要**

HTML5のネイティブドラッグ&ドロップのいろいろを実装するのに参考になった記事を紹介します。

# **コレ見ればできる系**

* <a href="http://www.techscore.com/blog/2012/11/12/html5-%E3%81%AE-file-api-%E3%81%A7%E3%83%89%E3%83%A9%E3%83%83%E3%82%B0%EF%BC%86%E3%83%89%E3%83%AD%E3%83%83%E3%83%97%E3%81%99%E3%82%8B/" target="_blakn">HTML5 の File API でドラッグ＆ドロップする</a>
* <a href="http://www.html5rocks.com/ja/tutorials/dnd/basics/" target="_blakn">ネイティブ HTML5 ドラッグ＆ドロップ</a>

# **ちょっと詳しく系**

* <a href="http://dresscording.com/blog/html5/drag_drop.html" target="_blakn">HTML5 Drag and dropを実装してみよう</a>
* <a href="http://www.htmq.com/dnd/" target="_blakn">HTMLクイックリファレンス｜ドラッグ＆ドロップ</a>

# **propについて**

ファイル操作をするのにjQueryのpropが役に立ちます。ただ、アップロードするFilelistの操作をJavascriptですることはセキュリティ上できないのでご注意ください。

* <a href="http://qiita.com/kbyay_/items/7a7ce9547f29b34a63b1" target="_blakn">jQueryにおけるattrとpropの違いと使いドコロまとめ
</a>
* <a href="http://stackoverflow.com/questions/5632629/how-to-change-the-file-inputs-filelist" target="_blakn">how to change the file input's filelist</a>
ZIPファイル内のファイルを取り出すサンプル

Scala-Replでゴニョニョしたものをまとめただけ

```scala
import java.nio.file._
import java.nio.file.attribute._

type hmss = java.util.HashMap[String,String]

// ローカル用のファイルシステム
val fs = FileSystems.getDefault()

// URI用のファイルシステム
def getUriFileSystem(uriPath:String , env:hmss = new hmss) : FileSystem = {
	val uri = java.net.URI.create(uriPath)
	FileSystems.newFileSystem(uri,env)
}

// ZIPファイルを取得
val zipFs = getUriFileSystem("jar:file:/path/to/zip")

// コピー元(ZIP内のファイル)のPathオブジェクトを取得
val pathSrc = zipFs.getPath("sample/index.html")

// コピー先のPathオブジェクトを取得
val pathDst = fs.getPath("/path/to/local")

// ファイルをコピーする(第３引数以降は可変)
Files.copy(
	pathSrc
,	pathDst
,	StandardCopyOption.REPLACE_EXISTING , StandardCopyOption.COPY_ATTRIBUTES
//  オプションは以下の3種類
//	ATOMIC_MOVE		原子的なファイルシステム操作としてファイルを移動します。
//	COPY_ATTRIBUTES		属性を新しいファイルにコピーします。
//	REPLACE_EXISTING	ファイルが存在する場合は既存のファイルを置換します。
)
```
Authコンポーネントのパスワードのハッシュ値をコマンドで生成する


CakePHPにはユーザー認証を実装するための便利なコンポーネントがあります.

[認証 — CakePHP Cookbook 2.x ドキュメント](http://book.cakephp.org/2.0/ja/core-libraries/components/authentication.html)

ちょっとCakePHPで試したいことがあったりして
とりあえず認証を実装して、適当なパスワードでユーザーを作って・・・ってやってると
翌日に「あれ？パスワードなんだっけ？passじゃないんだっけ？」ってなることありませんか・・・？

そんな時はコマンドでハッシュを生成してDBの値を上書きしちゃうのもまた一興です.

```app/Console/Command/GenPasswordShell.php
<?php
App::uses('SimplePasswordHasher', 'Controller/Component/Auth');

class GenPasswordShell extends AppShell {
    public function main() {
        $passwordHasher = new SimplePasswordHasher();
        $this->out($passwordHasher->hash($this->args[0]));
    }
}
```

```shell
$ ./app/Console/cake gen_password foo

Welcome to CakePHP v2.4.10 Console
---------------------------------------------------------------
App : app
Path: /Users/hoge/cake/app/
---------------------------------------------------------------

c61bf4fc7e757757ce027b9f91801618abaa2f6b

```
persistentDataPath, temporaryCachePath を Explorer/Finder で開く




エディタ拡張とかで、以下のように書いておくと、素早くそれらのフォルダを開くことが出来て便利。

```sample.cs
EditorGUILayout.LabelField("Finder/Explorerで開く:", EditorStyles.boldLabel);
if (GUILayout.Button("persistentDataPath")) {
	OpenInFileBrowser.Open (Application.persistentDataPath);
}
if (GUILayout.Button("temporaryCachePath")) {
	OpenInFileBrowser.Open (Application.temporaryCachePath);
}
if (GUILayout.Button("dataPath")) {
	OpenInFileBrowser.Open (Application.dataPath);
}
```

OpenInFileBrowser クラスは以下のページからプロジェクトの適当な場所に組み込んでおく。
[OpenInFileBrowser - Unify Community Wiki](http://wiki.unity3d.com/index.php/OpenInFileBrowser)
【ダメだ〜】iOS8のLocalNotificationで位置情報をフックする

気づいたらNitificationに位置情報が追加されたので、いろいろ試してみたけどダメだ！
前々領域観測してくれない。

設定等もけっこう見直してるがダメだ・・・


```
    class func setNotification(center:CLLocationCoordinate2D, title:String, id:String)
    {        
        //NSLog("set notification:%f,%f - %@",center.latitude,center.longitude, id)
        var locNotification:UILocalNotification = UILocalNotification()
        locNotification.regionTriggersOnce = true
        locNotification.alertBody=title
        locNotification.userInfo = ["id":id];
        locNotification.category = "custom"
        locNotification.region = CLCircularRegion(circularRegionWithCenter: center, radius: 100.0, identifier: "delete")
        UIApplication.sharedApplication().scheduleLocalNotification(locNotification)
    }

```

結局、locationManagerをバックグラウンドで動かして領域観測している・・・
Ruby on Rails でタイムゾーンをJSTにする


###やりたいこと

- RoRでJSTのタイムゾーンを利用する
- DBへ値を保存する際にもJSTを利用する


###設定
config/application.rbへ追記

- 表示のタイムゾーンをJSTに変更する

```application.rb
config.time_zone = 'Tokyo'
```

- DB保存時にタイムゾーンをJSTに変更

```application.rb
config.active_record.default_timezone = :local
```

###参考サイト
[Ruby on RailsでタイムゾーンにJSTを使用する方法](http://d.hatena.ne.jp/iriya_0624/20130429/1367244830)
Haskellで空間を実装してみた

[Haskellの実験メモ](http://qiita.com/7shi/items/b6cbb7df2dd969c84f49)です。

空間について勉強したらHaskellで実装してみたくなりました。

※ 遊びなので厳密さは考慮していません。Vectorとか名前が微妙ですが、割り切っています。

* 型クラスのインスタンスに型シノニムを使えるようにするため`FlexibleInstances`拡張を使用しています。
* 空間の拡張を型クラスの継承で表現しています。

```hs
{-# LANGUAGE FlexibleInstances #-}

class VectorSpace a where
    (@+) :: a -> a -> a
    (@*) :: Double -> a -> a

class VectorSpace a => NormedSpace a where
    norm :: a -> Double

class NormedSpace a => UnitarySpace a where
    innerProduct :: a -> a -> Double

type Vector = (Double, Double)

instance VectorSpace Vector where
    (x1, y1) @+ (x2, y2) = (x1 + x2, y1 + y2)
    a @* (x, y) = (a * x, a * y)

instance NormedSpace Vector where
    norm (x, y) = sqrt (x ^ 2 + y ^ 2)

instance UnitarySpace Vector where
    innerProduct (x1, y1) (x2, y2) = x1 * x2 + y1 * y2

print2 a b = do
    putStr a
    print b

main = do
    let a = (1.0, 2.0) :: Vector
        b = (3.0, 4.0) :: Vector
    print2 "a = " a
    print2 "b = " b
    print2 "a @+ b = " $ a @+ b
    print2 "3 @* a = " $ 3 @* a
    print2 "3 @* b = " $ 3 @* b
    print2 "norm a = " $ norm a
    print2 "norm b = " $ norm b
    print2 "innerProduct a b = " $ innerProduct a b
```
```text:実行結果
a = (1.0,2.0)
b = (3.0,4.0)
a @+ b = (4.0,6.0)
3 @* a = (3.0,6.0)
3 @* b = (9.0,12.0)
norm a = 2.23606797749979
norm b = 5.0
innerProduct a b = 11.0
```

# 参考

* Wikipedia
    * [ベクトル空間](http://ja.wikipedia.org/wiki/%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%E7%A9%BA%E9%96%93)
    * [ノルム線型空間](http://ja.wikipedia.org/wiki/%E3%83%8E%E3%83%AB%E3%83%A0%E7%B7%9A%E5%9E%8B%E7%A9%BA%E9%96%93)
    * [計量ベクトル空間](http://ja.wikipedia.org/wiki/%E8%A8%88%E9%87%8F%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%E7%A9%BA%E9%96%93)
* [型クラス - ウォークスルー Haskell](http://walk.wgag.net/haskell/typeclass.html)
* [Haskellで関数のオーバーロード](http://qiita.com/7shi/items/17a1567a635af17fc83f)
[メモ書き] Atomのアイコンをイケメンにする

# Atomのアイコンをイケメンにする

Atomのアイコンといえばこれですよね、


![images.jpeg](https://qiita-image-store.s3.amazonaws.com/0/30440/c9fa9cdb-2baa-169c-21da-33fe4d3277bf.jpeg)


うーむ.

僕のはこれです（どやあ）

![Screenshot 2014-11-07 17.30.04.png](https://qiita-image-store.s3.amazonaws.com/0/30440/2341b9b6-0b83-6d52-7c74-b466c6c3527e.png)


# 手順

## 1. アイコンをインストール
https://github.com/edwardloveall/atom-replacement-icon/raw/master/atom.icns

僕はコレを使いました. もっと好きなのがあればそちらを

## 2. 元のアイコンを消して新しいのを設置

> mv hoge/fuga.icns ~/Applications/Atom.app/Contents/Resources/atom.icns

`hoge/fuga.icns`が#1で持ってきたやつ.

## 3. PCを再起動
これは必要なのか分かりませんが僕は再起動したら変わりました.
gpg でエントロピーが足りないと表示されるときとパスフレーズを空にしたいとき

# gpg でエントロピーが足りないと表示されるとき
ちょっと仕事で gpg を使ったときにはまったメモ、昔つかったので余裕ぶっこいていたら少しはまりましたｗ
下記のようなメッセージが表示された場合、エントロピーから乱数値を取得するのですがエントロピーが枯渇している場合は、キーボードやらマウスやらを動かしていれば割とすぐに溜まるのですがvmはそういうのがないので、topコマンドを使ったり[mailコマンド](http://www.tempest.jp/linux/fedora/documents/text414.html)使って・・・みたいな記事を見ますがちょっとアレなのでその対処法です。

```
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
```

## Haveged（乱数発生器） をインストール
パッケージHaveged をインストールします。yum コマンド使ってね。
> [How to Setup Additional Entropy for Cloud Servers Using Haveged](https://www.digitalocean.com/community/tutorials/how-to-setup-additional-entropy-for-cloud-servers-using-haveged)

```
# yum install -y haveged
# chkconfig haveged on
# /etc/init.d/haveged start
```

# パスフレーズを空にしたいとき
割とあるのがgpgで暗号化をするけどパスフレーズは空にしてシステム連携するとかあったりします（どのみちパスフレーズをシェルとかで埋め込むので意味ないので）。で、そのgpgでパスフレーズを空にする方法です。
Linux版だと ```gpg --gen-key``` でパスフレーズを空に指定できますが、windows版の [gpg4win](パスフレーズ) は鍵ペア作成時にパスフレーズを空を指定できません。
そんな場合は、 ```gpg --edit-key``` を使います。

```
$ gpg --edit-key
Command> passwd
```

で、空のパスフレーズを指定するだけ。結構ウザいぐらいに本当？？本当に？って聞いてくるけどねｗ

# そのた

> [gen-key, list-sigs](http://onami.apache.org/committers/gpg-keys.html)
> [GnuPG インストール](http://www.nina.jp/server/windows/gpg/gpg_windows.html)
(覚え書き) col redmine1.2→redmine1.4

2013/03/27 ごろの作業

# redmine1.4.7を用意

redmine 1.x の最終版は1.4.7なのでこちらをredmine 1.2が入っているサーバにインストールする。
http://rubyforge.org/frs/?group_id=1850 にアクセスして1.4系の最新版をダウンロード
(今なら http://www.redmine.org/releases/1.x/ からダウンロード)

```bash
$ wget http://rubyforge.org/frs/download.php/76718/redmine-1.4.7.tar.gz
$ tar xzvf redmine-1.4.7.tar.gz
$ sudo mv redmine-1.4.7 /var/www
```

続いてバージョンアップするためにファイルをコピー

```bash
$ sudo cp /var/www/redmine-1.2.2/db/redmine.db /var/www/redmine-1.4.7/db/
$ sudo cp /var/www/redmine-1.2.2/config/database.yml /var/www/redmine-1.4.7/config
$ sudo cp /var/www/redmine-1.2.2/config/configuration.yml /var/www/redmine-1.4.7/config
$ sudo cp -arf /var/www/redmine-1.2.2/public/themes  /var/www/redmine-1.4.7/public
$ sudo cp -arf /var/www/redmine-1.2.2/files /var/www/redmine-1.4.7
```

# redmine1.4.7にアップデート

これで運が良ければ動くはず・・・ですが無理でした。このあたりから面倒なので全部 root で作業します。

```bash
# cd /var/www/redmine-1.4.7
# rake generate_session_store
```

buldle install を実行しなさい、とエラーが出ます。これ以降もredmineのバージョンを上げるたびにエラーが出るような気がします。ここはおとなしくbundleを実行します。

```bash
# bundle install --without development test
```

結構ちょこちょこあれがない、これがないとエラーが出た気がしますが適当にgemやらyumやらで対応。
（結構大変だったような）
後から知ったのですが --path vendor/bundler をつけることでrailsがこちらにはいってくれるっぽくて、多重環境にはおすすめらしいのですが後の祭り。
bundleが正常に終了したら再度

```bash
# rake generate_session_store
# rake db:migrate RAILS_ENV="production"
```

pluginはどうせrails2系では動かない、とかあるだろうから（あった）入れない。
これで1.4.7系のDBができました。
Atomとapmを本腰入れて使い始める

## あいさつ
今年の2月くらいにインビテーションを頂いて興味はあったが

なんだかんだ放置してたAtomちゃん.

ちゃんと使い始めたら結構よかった.

備忘録程度ですがお役に立てればと思います.

## apmとは

[https://github.com/atom/apm](https://github.com/atom/apm)

`Atom`のパッケージ管理ぽいのがあったのでこれを使う.
(`Node`の`npm`に由来してるらし）

## brew cask で Atomを入れる

OS X を使っている僕は`brew cask`で入れましたが、[公式サイト](https://atom.io/)から落とすなり皆さんよしなに.

    echo 'cask install atom' >> ~/.Brewfile
    brew bundle ~/.Brewfile

## Atomをシェルから立ち上げるように

OS Xを使ってる場合は

    ln -s /Applications/Atom.app/Contents/MacOS/Atom /usr/local/bin/atom

これで

    atom '作業したいディレクトリ'

でいい感じに

## apmを使う
パッケージ管理の`apm`はatomのインストールと同時に入ってるぽい

    which apm
    => /usr/local/bin/apm

居た.

パッケージ達をガシガシ入れてみよう.

パッケージの検索は

`apm search hogehoge`か

ここ[https://atom.io/packages](https://atom.io/packages)で出来るぽい.

## apmのパッケージをbundlerとかbrewfile的な感じで管理したい

環境構築をし直す時とかに便利！

    apm list -bi > atomfile

`atomfile`にインストールされてるパッケージがdumpされるので

    apm install --packages-file atomfile

でまとめてインストール！


## 触感
変更のあったファイル、ディレクトリ、行は色づけしてくれたり（画像オレンジ、緑部分）
![Screenshot 2014-11-07 14.58.32.png](https://qiita-image-store.s3.amazonaws.com/0/30440/7893d077-d081-6ad6-a505-ddfe2a1ddabb.png)

言語、ブランチ情報もデフォで表示してくれる（右のリス的なのはシラン）
![Screenshot 2014-11-07 14.59.15.png](https://qiita-image-store.s3.amazonaws.com/0/30440/d9a88400-329f-8e23-2ff6-604cfdc053c7.png)

画面分割とかシンタックスハイライトなどconfigファイルで設定してた様な機能は大体そろってる感じ.

Markdownのプレビューとかもデフォで入ってる.

## configとかは

`~/.atom`以下に置かれるファイル達でキーバインや細かい設定をするっぽい.

### みんな大好きstack overflow

stack overflowをエディタ内で検索してコードの張り付けとかしてくれるパッケージ

https://atom.io/packages/ask-stack

とりあえず試しにコレを入れてみます.


> apm install ask-stack

![Screenshot 2014-11-07 15.50.55.png](https://qiita-image-store.s3.amazonaws.com/0/30440/4956d7e1-6a07-ee14-c2b2-b298dfd95fff.png)

おおなんか無駄に緑のチェックが出てきてテンションアガル.

使い方は大体パッケージのREADMEやHPに書いてある.

いざ使ってみると..

![kusobenri](http://i.gyazo.com/0daadb101e234839334a80ef8cf2b1c0.gif)


便利だし楽しい.

まあこんな感じで色々パッケージ入れられますよと

暫くatom使ってみたいと思います.

今のところvimはサーバーに籠って作業する時に用に成り下がりそうな位には楽しんでます.


## 気に入ったパッケージ
いいなと思ったモノ達

### file-icons

https://atom.io/packages/file-icons

アイコンをおしゃれにしてくれる.


![Screenshot 2014-11-07 17.06.08.png](https://qiita-image-store.s3.amazonaws.com/0/30440/bf21f80b-19a2-4a68-d751-2f31b32ac14e.png)


### script

https://atom.io/packages/script

開いてるファイルや選択したコードを実行してくれる（！）

![Screenshot 2014-11-07 17.18.03.png](https://qiita-image-store.s3.amazonaws.com/0/30440/782b3f06-fff5-355d-9e6e-93491ab9ff84.png)


便利

### Term2

https://atom.io/packages/term2

ターミナルをAtomのタブで開ける.

シェルの設定とか環境変数は引き継がれてるっぽい.

![Screenshot 2014-11-07 17.13.14.png](https://qiita-image-store.s3.amazonaws.com/0/30440/be99efab-e907-d018-42d2-907836838660.png)


### regex-railroad-diagram

https://atom.io/packages/regex-railroad-diagram

正規表現を図示してくれる、楽しい

![Screenshot 2014-11-08 14.28.49.png](https://qiita-image-store.s3.amazonaws.com/0/30440/0f85550d-54c6-e0d9-b9e3-648e265bc10a.png)
GitBucketをOSX Yosemiteにインストールしてみた

## GitBucketとはなんぞ
GitHubを使いたいけど社内の予算ないし、そもそもセキュリティポリシー上、外部にデータ置けないし。だったらGitlabいれてみようかみたいな感じだけど、導入めんどい...
だがしかし、お手軽にローカルネットワーク上にGitHubのクローンを置けると聞いたのでやってみる。


## 前提

- Homebrewは導入済み
- MarvericksからYosemiteにバージョンアップしていた

## 環境
- Macbook Pro mid2014
- OSX 10.10（Marvericksからバージョンアップ済み）
- Java1.6.0_65
- Homebrew 0.9.5

ということで、今回はローカルにインストールします。

---
## インストール
OSXの場合、Homebrewでインストールできます。
なければこちら。[Homebrew公式](http://brew.sh/index_ja.html)

```
$ brew install gitbucket
```

すると、

```
Note: When using launchctl the port will be 8080.

To have launchd start gitbucket at login:
    ln -sfv /usr/local/opt/gitbucket/*.plist ~/Library/LaunchAgents
Then to load gitbucket now:
    launchctl load ~/Library/LaunchAgents/homebrew.mxcl.gitbucket.plist
Or, if you don't want/need launchctl, you can just run:
    java -jar /usr/local/opt/gitbucket/libexec/gitbucket.war
==> Summary
/usr/local/Cellar/gitbucket/2.4.1: 3 files, 49M, built in 2 seconds
```

こんなメッセージがでますので、このとおりにコマンド入れましょう

```
$ ln -sfv /usr/local/opt/gitbucket/*.plist ~/Library/LaunchAgents
```
と

```
$ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.gitbucket.plist
```

そして起動しているはずなので

```
http://localhost:8080
```
にアクセス。

すると、ここで503エラー。ふむ。
じゃあ手動で起動してみる。

```
$ java -jar /usr/local/opt/gitbucket/libexec/gitbucket.war
```

...変わらない。そもそも起動していない様子。

そこでログを見てみましょう。

その中で、

```
java.lang.UnsupportedClassVersionError: org/scalatra/servlet/ScalatraListener : Unsupported major.minor version 51.0
```
こんなのを発見。

ん？？？
もしかしてjavaのバージョンが悪い？？
そういえば、Marvericksに入ってたjavaってYosemiteにアップグレードしたらそのまま引き継がれてるのかなと思い、javaのバージョンを確認。

```
$ java -version
java version "1.6.0_65"
```

oh...これってMavericksのママってやつか？
じゃあ[最新のJDK入れてみましょう。](http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html)

ということで、

```
$ java -version
java version "1.8.0_25"
```


もう一度起動させたら起動した！
![スクリーンショット 2014-11-08 2.55.26.png](https://qiita-image-store.s3.amazonaws.com/0/30278/bc8fd036-1d13-2c06-d8e1-b48098f0e3be.png)

そしてリポジトリも作れました。
![スクリーンショット 2014-11-08 8.29.54.png](https://qiita-image-store.s3.amazonaws.com/0/30278/d39fc576-e496-9ec7-1a07-6301b604bc25.png)


こんな感じでローカルに環境を構築できました。
HSRPの設定

> 冗長化にVRRP設定を用いる場合は`10.1.1.167`に設定してください。

と連絡が来て設定することに。

## Linuxからコンソール接続

```bash:
screen /dev/ttyS0 9600
```

## 実機確認

```bash:
#show vrrp
        ^
% Invalid input detected at '^' marker.
```

* そのようなコマンドはないと言われる。

```bash:
(config)#int Vlan 10
(config-if)#v?
vrf  vtp
```

* やはり無い。

# HSRPを使う

* 3700系や3600系は冗長化プロトコルにVRRPではなくHSRPが用意されていることがわかった。

HSRPの設定は以下を参考にした。
[HSRP（Hot Standby Routing Protocol） - ネットワークエンジニアを目指して](http://www.itbook.info/network/hsrp.html)

## 確認


```bash:通常Active機
#show standby brief
                     P indicates configured to preempt.
                     |
Interface   Grp  Pri P State   Active          Standby         Virtual IP
Vl100       0    105 P Active  local           10.1.1.165      10.1.1.167
Vl110       0    105 P Active  local           192.168.100.5   192.168.100.7
```


```bash:通常Standby機
#show standby brief
                     P indicates configured to preempt.
                     |
Interface   Grp  Pri P State   Active          Standby         Virtual IP
Vl100       0    100 P Standby 10.1.1.166      local           10.1.1.167
Vl110       0    100 P Standby 192.168.100.6   local           192.168.100.7
```

## 切り戻り

参考: [HSRP（プリエンプト その2 preemptコマンド） CCNP実機で学ぶ](http://atnetwork.info/ccnp2/hsrp09.html)

初期値ではActiveルータが復旧時、自動切り戻りしないが、
`preempt`を設定しておくとPriorityが他より数値が高ければ自動切り戻りする。

Priorityは初期値100
Yosemiteでエディタ上のスクロール設定を切る


またyosemite関連の備忘録。
なんかスクロールでエディタ操作できるようになってる！
そんな設定emacsに入れたっけ…？ってなったけど、どうやらviでも効く。聞いた話だとlessでも効くらしい。
い、いらない……。エディタなりlessなりのページ送り使うし……。
ってことでこれを切る方法。
terminalのPreferences>Profiles>Keyvoard>Scroll alternate screen。

![Screen Shot 2014-11-08 at 7.27.58 AM.png](https://qiita-image-store.s3.amazonaws.com/0/28491/19243d0d-f2d4-018d-3821-a42a84e174ac.png "Screen Shot 2014-11-08 at 7.27.58 AM.png")

このチェックボックスからチェックを外せばおｋ。
Yosemiteの日本語IMで日本語入力のときにスペースキーで半角スペースを入力する

日本語入力だとデフォルトのスペースは全角スペース。半角スペースを入力するには`Shift+Space`を押す必要がある。入れ替える設定も見当たらない。

けど、http://qiita.com/rinopo/items/43331315ebcecd60f461 をみてたら、

```
/System/Library/Input Methods/JapaneseIM.app/Contents/Resources/KeySetting_Default.plist
```

にJapanese IMの設定があるとのこと。眺めてみたら、いちばん上に設定があるじゃないですか。

```
sudo vim /System/Library/Input\ Methods/JapaneseIM.app/Contents/Resources/KeySetting_Default.plist
```

```xml
                        <key>&apos; &apos;</key>
                        <dict>
                                <key>command</key>
                                <string>direct_input</string>
                                <key>character</key>
                                <string> </string>
                        </dict>
                        <key>shift+&apos; &apos;</key>
                        <dict>
                                <key>command</key>
                                <string>direct_input</string>
                                <key>character</key>
                                <string>　</string>
                        </dict>
```

ブラウザでみてもわかりにくいけど、こんな感じで`Space`と`Shift+Space`のキーバインドを入れ替えて、再ログインか再起動。

望んでいた動作になりました。わーい
SwiftでJavascriptの正規表現リテラルっぽいものを実装してみた。

Swiftでコードを書き始めて10日程。
日も浅いしあまり偉そうな事を言えないけど、個人的にSwiftは気に入っています。
色々な言語の良いトコ取りをしたと言われているだけに、コードを書くと分かりますが、うまく言えないけど謎の既視感があります。
なので簡単にコード書けて学習コストはかなり低いはず。
伊達にモダンな言語を謳ってませんね。

####ここから本題。
ある理由でちょっとした文字列操作をしたくて正規表現を使う必要が出てきました。
当然モダンなSwiftさんの事なんだから、JavascriptやRubyのように、正規表現リテラル使えるんじゃネ？と思いついた訳です。
正規表現リテラルと言えば、スラッシュで囲むアレ。

```js:Javascript

if ("abcd1234".match(/\d+/)) {
    console.log("match!!");
}

```

とか

```rb:Ruby
if /\d+/ =~ "abcd1234" then
   print("match!!")
end
```

です。
(Rubyのコードほとんど書いた事ないですが。。。)

しかし残念な事に、Swiftには正規表現リテラルが使えない。
となると、NSRegularExpressionクラスを使うしかないのですが、このクラス、使いやすいとは言い難くてObjective-Cの時との様な冗長的なコードを書くはめになります。

それだとなんだか負けた気がするので、Swiftの機能の1つである演算子の定義を駆使して、
それっぽいものを実装しちゃいました。

コードはGitHubに置きました。
https://github.com/doitchusan/RegexLiteral

##使い方
抽出

```swift
/* 書き方1 */
var results1 = "abcd1234".match(/"\d"/) /* results1 == ["1"] */

/* 書き方2 */
var results2 = "abcd1234" ~ /"\d"/ /* results2 == ["1"] */
```

判定

```swift
/* Javascriptっぽい */
var isMatch1 = "abcd1234".isMatch(/"abcd\d{4}"/) /* isMatch1 == true */

/* Rubyっぽい書き方も */
var isMatch2 = "abcd1234" =~ /"abcd\d{4}"/ /* isMatch2 == true */
```

オプションの指定

```swift
/* g:複数マッチ */
var results1 = "abcd1234".match(/"\d"/.g) /* results1 == ["1", "2", "3", "4"] */

/* i:大文字・小文字を無視 */
var results2 = "abcd1234".match(/"A|B|C|D"/.i) /* results2 == ["a"] */

/* オプションの組み合わせもOK */
var results3 = "abcd1234".match(/"A|B|C|D"/.g.i) /* results3 == ["a", "b", "c", "d"] */

```

ちょっとした処理ならサクッと書けて便利。

上でも述べましたが、演算子の定義を利用して実装しています。
というかそもそも演算子定義の活用方法間違えている気もしますが、とりあえずスラッシュで囲む事は実現出来たから満足(ぇ

将来的にSwiftも正規表現リテラルが書けるようになると良いですね。
挿入ソートを再帰で実装してみる

前回のやつの再帰バージョン。

```js:isort-mk2.js
function insert(x, xs) {
  if(xs.length <= 0) {
    return [x];
  }
  var y = xs.shift();
  if (x < y) {
    return [x].concat([y].concat(xs));
  } else {
    return [y].concat(insert(x, xs));
  }
}

function isort(xs) {
  if (xs.length <= 0) return xs;
  var x = xs.shift();
  return insert(x, isort(xs));
}
console.log(isort([4,3,5,2,1]));
```

### 追記

直しました。
QuickでNSDictionaryの中身をテストしたい時にコンパイルエラーが出たので調べてみた

SwiftでSpec風なテストが書けるQuick(Nimble)のMatcherを使う時にコンパイルエラーになってしまったので調べたメモ。
Quickについては[ここ](http://qiita.com/susieyy/items/56457922d3d6bbee21ef)とかで

### 初めに書いたの:

```swift
class HogeSpec: QuickSpec {
  let dic = NSMutableDictionary()
  dic.setValue("hoge", forKey("name"))

  it("nameのキーで何か文字列が入ってるのを確認したい") {
    expect(dic["name"]).to(beAKindOf(NSString.self)) 
    // ↑ コンパイルエラー: Could not find member 'to'
  }
}
```

なんでコンパイルエラーになるのか調べてみた。

### [`beAKindOf`の宣言を見てみた](https://github.com/Quick/Nimble/blob/master/Nimble/Matchers/BeAKindOf.swift#L3)

```swift
public func beAKindOf(expectedClass: AnyClass) -> MatcherFunc<NSObject>
```

型パラメータが`NSObject`のMatcherFuncを返してる。

### [`to`の宣言を見てみた](https://github.com/Quick/Nimble/blob/master/Nimble/Expectation.swift#L10)

```swift
public struct Expectation<T> {
    // 中略
    public func to<U where U: Matcher, U.ValueType == T>(matcher: U) 
```

型パラメータの制約(where)で、`U.ValueType`、つまりmatcherの型パラメータが、`T`と同じじゃないとダメ。
※`Expectation`は expect(...) で返されるやつ

`NSDictionary`は`AnyObject!`を返すので、`T(AnyObject)` が `U.ValueType(NSObject)` と違うのでこの型の組み合わせだと to は呼べない。

じゃあ`NSObject`にキャストしてやればいいじゃん。

### 書き換えた:

```swift
class HogeSpec: QuickSpec {
  let dic = NSMutableDictionary()
  dic.setValue("hoge", forKey("name"))

  it("nameのキーで何か文字列が入ってるのを確認したい") {
    expect(dic["name"] as NSObject!).to(beAKindOf(NSString.self)) 
  }
}
```

なんで`AnyObject`じゃなくて`NSObject`になってるのかと思ったけどObjective-Cからでも使えるようにかな？
JavaからC言語で書かれた処理を呼ぶ。(JNA)

# はじめに
JavaからC言語で書かれた処理を呼ぶ必要が出てきたため、調べたことをメモしておきます。
昔の知識でJNI(Java Native Interface)を使うものだと思っていたけれど、
最近ではJNA(Java Native Access)という便利なクラスライブラリがあって、
驚くほど簡単に呼び出せます。

# JNAライブラリの入手

以下のWebサイトからダウンロードできます。
https://github.com/twall/jna#download

* jna.jar


# サンプルコード1 (静的にマッピング)

C言語の標準ライブラリであるprintfを呼び出すサンプルです。(上記サイトを参考)
まず、呼び出したい関数をinterfaceで定義しておきます。
このインタフェースをNative#loadLibrary()メソッドにかけるとあら不思議、
ライブラリ関数を呼ぶインスタンスが生成されます。

```HelloWorld.java
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Platform;

public class HelloWorld {
	public interface CLibrary extends Library {
		CLibrary INSTANCE = (CLibrary) Native.loadLibrary(
			Platform.isWindows() ? "msvcrt" : "c",
			CLibrary.class);

		void printf(String format, Object... args);
	}

	public static void main(String[] args) {
		CLibrary.INSTANCE.printf("Hello, World\n");
	}
}
````

# サンプルコード2(動的にマッピング)

呼び出したいライブラリや関数がパラメータなどで渡され、動的に決まる場合はどうしたらいいの？
今回、実装したい処理はまさにこのケースだったので、あらかじめinterfaceを定義できないし、
javax.tools.JavaCompilerを使ってinterfaceを動的に生成して・・・という検証用コードを
思わず書いてしまったのですが、実はそんなに頑張らなくても簡単にできました。

```HelloWorld.java
import com.sun.jna.Function;
import com.sun.jna.Platform;

public class HelloWorld {
	public static void main(String[] args) {
		String libraryName  = Platform.isWindows() ? "msvcrt" : "c";
		String functionName = "printf";

		// Function
		Function function = Function.getFunction(
			libraryName,
			functionName,
			Function.C_CONVENTION);

		// Invoke
		function.invoke(new Object[]{"Hello, world\n"});
	}
}
```
ghq | Cygwin64 環境に ghq をインストール

# ghq | Cygwin64 環境に ghq をインストール
## 概要
Cygwin64 環境に ghq をインストールします。
ghq の導入記事はたくさんあるけど、 Qiita 内を「 ghq cygwin」 で検索したら1件もなかったのでメモを残す。

## ghq とは？
motemen さん製の リモートリポジトリ管理ツール。
golang の go get のようにリモートリポジトリを管理する手段を提供する。
go get の詳細については golang の [公式ドキュメント](https://golang.org/cmd/go/) 参照。

## 手順
* ghq の [GitHub releases ページ](https://github.com/motemen/ghq/releases) から必要なバイナリの圧縮ファイルを取得
  今回は [Windows の 64 bit 版](https://github.com/motemen/ghq/releases/download/v0.5/ghq_windows_amd64.zip) をチョイス
* zip を解凍
* `%cygwin64 root%/bin` に、 ghq.exe をコピー

## 疎通確認

~~~
$ ghq
NAME:
   ghq - Manage GitHub repository clones

USAGE:
   ghq [global options] command [command options] [arguments...]

VERSION:
   v0.5 (master)

AUTHOR:
  motemen - <motemen@gmail.com>

COMMANDS:
   get          Clone/sync with a remote repository
   list         List local repositories
   look         Look into a local repository
   import       Bulk get repositories from stdin
   root         Show repositories' root
   help, h      Shows a list of commands or help for one command

GLOBAL OPTIONS:
   --help, -h           show help
   --version, -v        print the version

# ghq get はデフォルトでホームディレクトリ配下に .ghq ディレクトリを作成し、
# そこにリポジトリを clone します
$ ghq get https://github.com/tbpgr/aun.git
     clone https://github.com/tbpgr/aun.git -> path\to\your\user dir\.ghq/github.com/tbpgr/aun
       git clone https://github.com/tbpgr/aun.git path\to\your\user dir\.ghq/github.com/tbpgr/aun
Cloning into 'path\to\your\user dir\.ghq/github.com/tbpgr/aun'...
remote: Counting objects: 75, done.
remote: Total 75 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (75/75), done.

$ path\to\your\user dir\.ghq/
$ tree
.
┗ github.com
    ┗ tbpgr
        ┗ aun
            ┣ aun.gemspec
            ┣ bin
            ┃ ┗ aun
            ┣ Gemfile
            ┣ images
            ┃ ┗ aun.gif
            ┣ lib
            ┃ ┣ aun
            ┃ ┃ ┣ default_messages.rb
            ┃ ┃ ┣ definition_manager.rb
            ┃ ┃ ┣ finder.rb
            ┃ ┃ ┣ message.rb
            ┃ ┃ ┣ message_formatter.rb
            ┃ ┃ ┗ version.rb
            ┃ ┗ aun_core.rb
            ┣ LICENSE.txt
            ┣ Rakefile
            ┣ README.md
            ┣ rubocop-todo.yml
            ┗ spec
                ┣ aun
                ┃ ┣ finder_spec.rb
                ┃ ┣ message_formatter_spec.rb
                ┃ ┗ message_spec.rb
                ┗ spec_helper.rb
~~~

## 参照
[ghq GitHub](https://github.com/motemen/ghq)
JScriptでUTF-8文字列をBase64エンコード

Jenkins に JScript & REST API でビルドを作成などするときに、Basic Authentication のために Base64 エンコードしたかったです。

以下のサイトを参考にさせていただきました。

"JavaScriptでファイルの書き込みをUTF-8で行う(htaまたは、wsh用)"
http://d.hatena.ne.jp/sukesam/20070922/1190400851

"バッチで，BASE64のエンコード＋デコードする方法　（WSH/JScriptで，バイナリのファイルをテキスト符号化）"
http://d.hatena.ne.jp/language_and_engineering/20101022/p1

```js
function base64encode(text) {
    var stream = WScript.CreateObject("ADODB.Stream");
    var dom = WScript.CreateObject("MSXML2.DOMDocument.6.0");
    var element;

    stream.Type = 2; // adTypeText = 2
    stream.Charset = "UTF-8";
    stream.Open();
    stream.WriteText(text);
    stream.Position = 0;
    stream.Type = 1; // adTypeBinary = 1
    stream.Position = 3; // BOM スキップ

    element = dom.createElement("element");
    element.dataType = "bin.base64";
    element.nodeTypedValue = stream.Read();

    stream.Close();

    return element.text.replace(/\n/g, "");
}
```
Elixir Module の内部実装

# Elixir Module の内部実装

## 概要
Elixir の Module の内部実装について

## Namespace
Elixir の モジュールは内部的にはただの Atom です。
Hoge モジュールを作成すると、内部的には Elixir.Hoge という atom になります。

~~~
defmodule Hoge do
end
IO.inspect Elixir.Hoge
IO.inspect is_atom(Hoge)
IO.inspect is_atom(Elixir.Hoge)

defmodule Upper do
  def upper(text) do
    String.upcase(text)
  end
end

IO.inspect Upper.upper("hOgE")
IO.inspect :"Elixir.Upper".upper("hOgE")
~~~

* 出力

~~~
Hoge
true
true
"HOGE"
"HOGE"
~~~
kivyベースのiOSアプリにCrashlyticsKitを組み込むまで

※ソースを読んで咀嚼した内容で書いてます

PythonでiOS/Androidアプリを開発できるフレームワークに、[Kivy](http://kivy.org) があります。
個人的に気に入ってちょくちょく触っているのですが、せっかくなのでクラッシュレポート解析サービスのCrashlyticsを組み込んで、クラッシュ時の情報を収集できるように取っ掛かりを進めてみました。

### 前提

* buildozerを使って、kivyの最小構成Pythonを用意する。
* そのままbuildozerでipaファイルを作成できることを確認するまで進める。
* 途中の準備構築はスキップ（あとで書くかも）

ここまでを簡単に書く

``` bash
$ (いろいろインストールなどをする)
$ pip install buildozer
$ mkdir kivyapp
$ cd kivyapp
$ buildozer init
$ buildozer iOS debug
IPA kivyapp-0.0.1.ipa available in the bin directory
```

## 何が面倒か

### CrashlyticsKitの組み込みかたおさらい
CrashlyticsKitの組み込み自体は至極簡単で、main内で呼ばれるApplicationDelegateクラスがあれば、メソッドdidFinishLaunchingWithOptionsの中に ``[Fabric with:@[CrashlyticsKit]];`` を突っ込むだけでOKです。
※Fabricから始めればチュートリアルが出て非常に親切なので、こっちだけなら非常に簡単です。

### Kivy-iosのmain()
kivy-ios上にあるmain()関数を定義しているソースのテンプレートが[こちら](https://github.com/kivy/kivy-ios/blob/master/tools/templates/main.m)。
通常のiOSアプリと違って、UIApplicationMainが呼ばれていません。
処理をトレースしてみると、[こっち](https://github.com/kivy/kivy-ios/blob/master/src/SDL/src/video/uikit/SDL_uikitappdelegate.m)で呼ばれているようでした。
Delegateクラスは同じソース内のSDLUIKitDelegateで定義されていたので、処理を差し込むのが面倒そう。


## どうしたか

https://gist.github.com/attakei/9c6e887b2662742228c2

これらのソースを差し込みました。すごいゴリ押し。

``` objective-c
// .h file
@interface SDLUIKitDelegate (KivyAppDelegate)
 
@end

// .m file
@implementation SDLUIKitDelegate (KivyAppDelegate)
 
+ (NSString *)getAppDelegateClassName
{
    return @"KivyAppDelegate";
}
 
@end
```

こっちの実装でSDLUIKitDelegateのカテゴリ機能で呼ばれるべきDelegateクラスを無理やり書き換え、

``` objective-c
// .h file
@interface KivyAppDelegate: SDLUIKitDelegate
 
@end

// .m file
@implementation KivyAppDelegate

-(void)postFinishLaunch
{
    [Fabric with:@[CrashlyticsKit]];
    
    // call superclass method.(continue to run as kivy)
    [super postFinishLaunch];
}

@end
```

こっちで、SDLUIKitDelegateを継承したKivyAppDelegateでpostFinishLaunch()をオーバーライドしてCrashlyticsKit呼び出しを差し込む。（なお、SDLUIKitDelegate自体のpostFinishLaunchにKivyのメイン動作があるので、必ずオーバーライドメソッドで呼ぶ）


これで、どうにかCrashlytics側にアプリを登録できた。
[Swift] 指定したURLの画像を表示する。

ググりながらコピペプログラミングしていたけど、仕様変更（？）とかで躓いたのでメモ。


まずはローカル画像表示。

```lang:ViewController.swift
// UIImageViewを作成する.
        let myImageView: UIImageView = UIImageView(frame: CGRectMake(0,0,100,120))
        
        // 表示する画像を設定する.
        let myImage = UIImage(named: "logo.png")
        
        // 画像をUIImageViewに設定する.
        myImageView.image = myImage
        
        // 画像の表示する座標を指定する.
        myImageView.layer.position = CGPoint(x: self.view.bounds.width/2, y: 200.0)
        
        // UIImageViewをViewに追加する.
        self.view.addSubview(myImageView)
```

>https://sites.google.com/a/gclue.jp/swift-docs/ni-yinki100-ios/uikit/005-uiimageviewde-hua-xiangwo-biao-shi



難なくクリア、ここからが本番。




URLからUIImageを生成すべく

>http://swift-salaryman.com/uiimage.php

こちらをコピペしてみたものの動かず…。


調べてみると、仕様変更（？）が入った模様。
* NSURL.URLWithString→NSURL(string:
* NSData.dataWithContentsOfURL→NSData(contentsOfURL:
でいけるようなので、その他なんやら修正して以下で行けた。

```lang:ViewController.swift
// URLを指定したUIImageの生成例
        let url = NSURL(string: "http://www.ex.co.jp/ex.png");
        var err: NSError?;
        var imageData :NSData = NSData(contentsOfURL: url!,options: NSDataReadingOptions.DataReadingMappedIfSafe, error: &err)!;
        var img = UIImage(data:imageData);
        
        //それをselfのUIViewへ追加する場合は、
        //UIImageViewに追加してからselfへaddSubviewする
        let iv:UIImageView = UIImageView(image:img);
        iv.frame = CGRectMake(0, 0, 120, 120);
        self.view.addSubview(iv);
        
        // 画像の表示する座標を指定する.
        iv.layer.position = CGPoint(x: self.view.bounds.width/2, y: 200.0)

```
iOS 8 で Back Button が消えてくれない

iOS 7 以前に作っていたアプリを iOS 8 で動かしたとき、消したはずの Back Button (戻るボタン)がなぜか表示されていたことがありました。

|iOS 7|iOS 8|
|:---:|:---:|
|![ios7.jpg](https://qiita-image-store.s3.amazonaws.com/0/2082/a7afdba1-a119-5192-ab3f-b7827552045e.jpeg) |![ios8.jpg](https://qiita-image-store.s3.amazonaws.com/0/2082/914d26ac-cca4-9f27-f197-a3ab612eccb8.jpeg)|

どうやら `self.navigationItem.leftBarButtonItem =` よりも前に `self.navigationItem.hidesBackButton =` を持ってきていると、iOS 8 では Back Button が表示されるようです。
`setHidesBackButton:` を `setLeftBarButtonItem:` よりも後ろで実行すれば OK です。

```objc
UIBarButtonItem *settingItem;
settingItem = [[UIBarButtonItem alloc] initWithTitle:@"Setting"
                                               style:UIBarButtonItemStyleBordered
                                              target:self
                                              action:@selector(onSettingItem:)];
[self.navigationItem setLeftBarButtonItem:settingItem];

[self.navigationItem setHidesBackButton:YES];
```
NICのリンク速度を調べる

ちょっと気になって調べたメモ

# 普通に思いつくのはethtool

```bash
# ethtool ens3
        Speed: 1000Mb/s
```
はい、特に問題ありません。簡単ですね。
※sakuraVPSの仮想なのでens3になってます。

# ethtoolが使えなかったら・・・？

```bash
# dmesg | grep "Link is Up"
[    8.724177] e1000: ens3 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX
```
dmesgから読めばいいですね。

# ethtoolは何を読んでるの？

```bash
$ rpm -qf `which ethtool`
ethtool-3.8-4.el7_0.x86_64
$ wget http://vault.centos.org/7.0.1406/os/Source/SPackages/ethtool-3.8-3.el7.src.rpm
$ rpm2cpio ../ethtool-3.8-3.el7.src.rpm | cpio -idv
$ tar xvf ethtool-3.8.tar.xz
$ cd ethtool-3.8
$ view ethtool.c
```

```c:ethtool.c
static int dump_ecmd(struct ethtool_cmd *ep)

        fprintf(stdout, "       Speed: ");
        speed = ethtool_cmd_speed(ep);
        if (speed == 0 || speed == (u16)(-1) || speed == (u32)(-1))
                fprintf(stdout, "Unknown!\n");
        else
                fprintf(stdout, "%uMb/s\n", speed);
```
表示から探すとこの辺ですね

```c:ethtool-copy.h
static __inline__ __u32 ethtool_cmd_speed(const struct ethtool_cmd *ep)
{
        return (ep->speed_hi << 16) | ep->speed;
}
```
変換してるだけ。

```c:ethtool.c
static int do_gset(struct cmd_context *ctx)
{

        err = send_ioctl(ctx, &ecmd);
        if (err == 0) {
                err = dump_ecmd(&ecmd);


int send_ioctl(struct cmd_context *ctx, void *cmd)
{
        ctx->ifr.ifr_data = cmd;
        return ioctl(ctx->fd, SIOCETHTOOL, &ctx->ifr);
}
```
ここですね。ioctlで取得してるのですね。
IntelliJ IDEA 14.0で日本語メソッドのコンパイルを通す

おことわり( ﾟωﾟ )：メソッド名を日本語で書くことの是非は本題から外れるためコメントでの言及などはご遠慮ください。


## 環境
Windows7 64bit
IntelliJ IDEA 14.0
JDK 1.8

## 問題の概要
IntelliJ IDEAのバージョン14.0がリリースされていました。（気付かなかった）

私も早速インストールして既存のプロジェクトで新機能を試そうとしたのですが、ユニットテスト用の日本語メソッド名を含むクラスがコンパイルエラーとなってしまいました。

なんでかなーといろいろ調べた結果、[リプライ](https://twitter.com/masanobuimai/status/530719760061714432)を頂き、コンパイル時のエンコードの設定をいじることで解決しました。[いまいまさのぶ](https://twitter.com/masanobuimai)さん、ありがとうございました。以下が解決方法です。どちらもやってることは同じです。

## やること
コンパイル時のエンコーディングを指定する

## やりかた1
GUIを使ってエンコーディングを指定

1. File→Settingsメニューを開く。
2. 左メニューリストからEditor→File Encodingsを開く。
3. Project EncodingをIDE Encodingと合わせる。

例：両方にUTF-8を設定。

## やりかた2
コンパイラに渡すコマンドラインパラメータで指定

1. File→Settingsメニューを開く。
2. 左メニューリストからBuild, Execution, Deployment→Compiler→Java Compilerを開く。
3. 下部のJavac OptionsのAdditional command line parametersに以下の内容を追記。

> -encoding \<ENCODE\>

例：`-encoding UTF-8`

おわり。

## 余談
今まで使っていたIntelliJ IDEA 13.1.4では特にそういった問題は発生したことがなかったので困惑しましたが、冷静にエラーを読んで考えればエンコードの問題っぽい感じバリバリではありました･･････。英語圏のソフトウェアだし仕方ないね。

WindowsでUTF-8を扱うとこういう問題がぼろんぼろん出るそうなので気を付けましょう。ね。

この記事が同じ問題で躓いた方の助けになれば幸いです。
<値型>と<参照型>、<値渡し>と<参照渡し>がそろってる言語で実行例を出す（Swift編）

[__<値型>と<参照型>、<値渡し>と<参照渡し>がそろってる言語で実行例を出す__](http://qiita.com/irxground/items/5b37a1643fb521cf057b)

> これで値の値渡しと値の参照渡しと参照の値渡しと参照の参照渡しの違いが分かっただろう

上記の投稿が単純明快ですばらしかったのでSwiftでも書いてみました。百の言葉で説明するより一つの実例の方がわかりやすいですね。

下記の四つの「実行結果」を見て、

- 値型
- 参照型

とは何か、

- 値の値渡し
- 参照の値渡し
- 値の参照渡し
- 参照の参照渡し

の違いは何かを理解できているかチェックしてみて下さい。

__※ [C言語版も作った](http://qiita.com/koher/items/7999a6331a385ec74672)のでよかったらどうぞ。__

## 実行コード

```swift
struct ValWrap { var value: Int = 0 }
class RefWrap { var value: Int = 0 }

func swapAndEdit(var left: ValWrap, var right: ValWrap) {
	var tmp = left
	left = right
	right = tmp
	tmp.value *= 100
}

func swapAndEdit(var left: RefWrap, var right: RefWrap) {
	var tmp = left
	left = right
	right = tmp
	tmp.value *= 100
}

func swapAndEdit(inout left: ValWrap, inout right: ValWrap ) {
	var tmp = left
	left = right
	right = tmp
	tmp.value *= 100
}

func swapAndEdit(inout left: RefWrap, inout right: RefWrap) {
	var tmp = left
	left = right
	right = tmp
	tmp.value *= 100
}

if true {
	println("値の値渡し")
	var left = ValWrap()
	left.value = 1
	var right = ValWrap()
	right.value = 2
	swapAndEdit(left, right)
	println("\(left.value), \(right.value)")
}

if true {
	println("参照の値渡し")
	var left = RefWrap()
	left.value = 1
	var right = RefWrap()
	right.value = 2
	swapAndEdit(left, right)
	println("\(left.value), \(right.value)")
}

if true {
	println("値の参照渡し")
	var left = ValWrap()
	left.value = 1
	var right = ValWrap()
	right.value = 2
	swapAndEdit(&left, &right)
	println("\(left.value), \(right.value)")
}

if true {
	println("参照の参照渡し")
	var left = RefWrap()
	left.value = 1
	var right = RefWrap()
	right.value = 2
	swapAndEdit(&left, &right)
	println("\(left.value), \(right.value)")
}
```

_ValWrap_ や _RefWrap_ は元記事からそのまま使ってますが、それぞれ _value_ を _Val_ （値型）で _Wrap_ したもの、 _value_ を _Ref_ （参照型）で _Wrap_ したものという意味だと思います（値をラップ、参照をラップではないです）。

## 実行結果

```
値の値渡し
1, 2
参照の値渡し
100, 2
値の参照渡し
2, 1
参照の参照渡し
2, 100
```
ディレクトリ内の構造を雛形で初期生成する dirtmpl


https://github.com/kumatch/dirtmpl

ずいぶん前に作ったやつで、特に何も言ってなかったコマンドラインツール。

Node モジュールとかを細かい単位で作っていたりすると、そのモジュールのためのディレクトリを作ったたと毎回必要なファイルやディレクトリをどっかから持ってきては書き換える、みたいなことが多かったので、雛形（テンプレート）ベースでディレクトリ内の構造を作り出せるようなものを作った。

Install
---

Node で実装しているので、npm で導入。CLI なので -g オプション付きで。

```
$ npm install -g dirtmpl
```

使い方
---

まずは任意のディレクトリ内で、雛形として登録したいディレクトリの内容を作る。

```
$ mkdir path/to/dir
$ mkdir path/to/dir/src
$ mkdir path/to/dir/test
$ touch path/to/dir/README.md
$ touch path/to/dir/.gitignore
```

上記のは適当なサンプル。例えば README.md, .gitignore などはファイルを作成した上で必要なことを書いておく。

続いて、`dirtmpl add <name>` コマンドを使って、このディレクトリの内容を登録する。 &lt;name&gt; の部分で任意の名前を付与。

```
$ dirtmpl add mysrc path/to/dir
```

あとは、好きなディレクトリで `dirtmpl build <name>` コマンドを実行すると、そのディレクトリで雛形通りのファイル群が作られる。

```
$ cd path/to/src/foomodule
$ dirtmpl build mysrc .
```

自分の場合は、自分にとって必要なディレクトリ構造を持った npm, composer などの汎用的な雛形や、その仕事内でだけ必要になる雛形などを登録して使っている。


備考
---

ディレクトリの雛形は、通常は `$HOME/.config/dirtmpl` というディレクトリパス以下にそのまま展開される。コマンド実行時に `--configDir` オプションでディレクトリパスを指定すると、雛形のあるディレクトリを指定することができる。
CentOS-7.0 で Pandocのインストール

## はじめに

以下にインスパイアされて、CentOS-7.0で試してみたところ、ちょっとうまく行かなかったのでメモ。

- [Pandoc で github 風 CSS を使った standalone な html を生成](http://qiita.com/griffin_stewie/items/95026360fdfca1bd8e33)

あと、以下も参考にさせていただきました。

- [多様なフォーマットに対応！ドキュメント変換ツールPandocを知ろう](http://qiita.com/sky_y/items/80bcd0f353ef5b8980ee)
## 環境

- Vagrant
- [opscode/bento](https://github.com/opscode/bento)のCentOS-7.0 Box

## インストール

面倒なのでyumでepelで。

```bash
$ sudo yum install -y epel-release
$ sudo yum install -y pandoc
```

画像のパスを改変済みのgithub.cssをダウンロード

```bash
$ mkdir ~/.pandoc
$ cd ~/.pandoc
$ wget https://gist.githubusercontent.com/griffin-stewie/9755783/raw/1b8b3bf2f5364908dda36d0c1d8e9e0b21cbb84e/github.css
```

Pandoc公式サイトのREADMEを使ってテストしてみるとエラー

```bash
$ wget http://johnmacfarlane.net/pandoc/demo/README -O input.md
$ pandoc input.md -s --self-contained -t html5 -c github.css -o test.html
Fetching https://raw.githubusercontent.com/gollum/gollum/master/lib/gollum/public/gollum/images/para.png...
pandoc: Failed to retrieve https://raw.githubusercontent.com/gollum/gollum/master/lib/gollum/public/gollum/images/para.png
user error (https not supported)
```

調べてみたところどうもEPELのパッケージの問題っぽいのだけど、HTTPSでファイルがフェッチできないのが原因なのであれば、ローカルで完結させてしまえばよいのではないかということで。

github.cssで読み出されている画像を~/.pandocにダウンロード

```bash
$ cd ~/.pandoc
$ wget https://raw.githubusercontent.com/gollum/gollum/master/lib/gollum/public/gollum/images/para.png
$ wget https://raw.githubusercontent.com/gollum/gollum/master/lib/gollum/public/gollum/images/dirty-shade.png
```

github.css内のパスを以下のように変更

```github.css
   background: url("para.png") no-repeat 10px center;
```
```github.css
   background: transparent url("dirty-shade.png") repeat-x 0 0;
```

再度実行。今度はエラーなく終了。

```
$ pandoc input.md -s --self-contained -t html5 -c github.css -o test.html
```

生成されたHTMLも特に問題ないように見えます。

![pandoc.png](https://qiita-image-store.s3.amazonaws.com/0/20351/7095af44-1bae-3c8f-609d-a01d3bab8158.png)

## 最後に

根本的な解決にはなってませんし、Haskell Platform でインストールすればいいだけなのかもしれませんが、~/.pandocをdotfileリポジトリでまるっと管理してしまえば、それほど更新することもないでしょうしお手軽でいいかなと思ってます。
Org-beamer で ditaa が EPS を出力するように設定する

Org-beamer で図を書くときの定番と言えば ditaa ですが，ditaa は PNG で図を出力するので，PDF に埋め込んだときに解像度の点で残念なことになってしまいます．しかし，ditaa のアドオンに ditaa EPS というものがあり，これを使えば ditaa 形式のテキストを EPS に出力できるので，PDF にしても美しい図を出力することができます．

# ditaa EPS の入手

[SourceForge](http://sourceforge.net/projects/ditaa-addons/files/DitaaEps/) から最新版 (記事執筆時点で 0.2) を入手します．Zip アーカイブを展開し，

-   `DitaaEps.jar`
-   `ditaa0_6b.jar`

の 2 ファイルを同じフォルダにコピーします．

# ob-ditaa で常に EPS を吐く設定

ob-ditaa の設定は完了いる，すなわち，PNG で ditaa を出力して org-beamer に埋め込める設定が完了している，という前提で話を進めます．まず，さきほど用意した DitaaEps.jar を `org-ditaa-eps-jar-path` に設定します．

    (setq org-ditaa-eps-jar-path "path/to/DitaaEps.jar")

そして，PNG ではなく EPS を吐くように， `org-babel-default-header-args:ditaa` に `(:eps . t)` を追加します．

    (add-to-list 'org-babel-default-header-args:ditaa '(:eps . t))

なんと，設定はこれだけです．あとは ditaa が生成するファイルの拡張子を `.eps` に設定して， `C-c C-e l P` (`org-beamer-export-to-pdf`) などで，Ditta が埋め込まれた Org ファイルを PDF に変換してください．

# おわりに

もっと大変かと思ったら，意外とあっさり設定できたのでメモしておきます．先人の知恵は偉大です．
Pythonでちょっとひとてまで独自ソートの実装


## 通常のソート
pythonでListをソートしたい場合、下記のようにsort()関数を使うと簡単にソートしてくれる

```python
>>> l = ['B', 'C', 'A']
>>> l.sort()
>>> print l
['A', 'B', 'C']
```

しかし、`.file`などのドットを含むファイルリストのソートなどを行うと下記のようにドットを含むファイルが先に並んでしまう。

```python
>>> files = ['file01', 'file02', '.file04', 'file03']
>>> files.sort()
>>> print files
['.file04', 'file01', 'file02', 'file03']
```

## lambda式を使った独自ソート
たとえば、lsコマンドの出力のようにドットを含まない部分でソートしたい場合lambda式を使い下記のようにすると実現できる。

```python
>>> files = ['file01', 'file02', '.file04', 'file03']
>>> sortKey = lambda f: f if not f.startswith('.') else f[1:]
>>> files.sort(key=sortKey)
>>> print files
['file01', 'file02', 'file03', '.file04']
```

sortKeyでソートのためのkeyの生成方法を指定している。
具体的にはソートの対象を`f`として渡し、`f.startswith('.')`で先頭にドットがある場合は2文字目からを切り出してkeyとしている。

## その他の応用
たとえば次のようにすることでファイルのサイズでリストをソートーすることもできる

```python
>>> import os
>>> files = ['file01', 'file02', '.file04', 'file03']
>>> sortKey = lambda f: os.state(f).st_size
>>> files.sort(key=sortKey)