OmniAICreator/Qiita-1.07M huggingface dataset:
[jQuery]hoverでfadeInさせると1pxずれる現象の対策



hoverでfadeInさせると1pxずれる現象の対策です（ちなみにChromeでした）。hoverすると1pxずれる現象自体は割とよくあるみたいで、ブラウザによって対処方法が違います。

# **Chromeの場合**
## display: inline-block; を使う
要素に display: inline-block; の記述を追加したら、マウスオーバー時にズレが発生しなくなります。
## backface-visibility: hidden; を使う
要素に backface-visibility: hidden; の記述を追加します。


* 参考：[【CSS】transitionプロパティ使用時に、Chromeブラウザで1pxずれる現象を回避する)](http://c-brains.jp/blog/wsg/14/02/03-144700.php)


# **Firefoxの場合**

## backgroundの指定を追記

以下を追記

```
background: #背景色カラー;
```

# **IEの場合**

以下を追記

```
display: inline-block;
zoom: 1;
```

* 参考：[opacityのマウスオンで画像が1pxズレるバグの解決方法](http://www.legit.co.jp/html/blog/archives/3830)

# **jQueryのfadeInを使っている場合**
僕の場合、上記のものをすべてを試してもうまく行きませんでした。条件は、

* fadeInをつかっていた。
* css的に、display:table;でないとだめな箇所で、display:inline-block;が使えなかった。
* transitionをつかっていた。
* ブラウザはChrome。

で、fadeInをつかうことで、displayに変化が起こっているのかも、とおもったので、以下のように変えてみました。

```
$(function($){
  $("xxx").hover(function(){    

    $(this).find("yyy")
      .css({'visibility':'visible'}) // displayではなくvisibilityをつかう
      .animate({opacity: 1}, 200); // visibilityを出したあとにopacityを変化
		
},function(){

    $(this).find("yyy")
      .animate({opacity: 0}, 200) // 戻すときは逆
      .css({'visibility':'hidden'});

  })
});
```

結果直りました。displayがひとつのキーっぽいです。詳しい人教えてください。
[iOS] Slide Down Refresh TableView -- UIRefreshControl

For the table view, you want to slide down the table view to refresh the data of the table view. Maybe you need to add the `UIRefreshControl` to the `TableView`.

You can use the `UIRefreshControl` like this:

```swift
func addRefreshControl() {
        refreshControl = UIRefreshControl()
        refreshControl!.addTarget(self, action: "refreshTableView", forControlEvents: UIControlEvents.ValueChanged)
        tableView.addSubview(refreshControl!)
    }
    
func refreshTableView() 
    //Somthing like tableView.reloadData()
}
```

After reload the data, maybe the refresh view will not be disappeared. Try to end the refreshing of the UIRefreshControl use the code like this:

```swift
refreshControl?.endRefreshing()
```
メソッドに任意で外部引数名を設定できる


なんとなくSwiftを使っていたら、メソッドの引数でラベルを使うやつが出てきた。

 
>presentViewController(myAlert, animated: true, completion: nil)
 
とか。
これはメソッドの定義時にラベルを設定している。

>func presentViewController(viewControllerToPresent: UIViewController, animated flag: Bool, completion: (() -> Void)?)

func(ラベル 引数名:型)という指定ができる。
func(ラベル 引数名:型)が、呼び出し時にfunc(ラベル:変数名)という形になるので知らないと混乱する。
* * *

こちらの説明がわかりやすい。
[Swiftにおける名前付き引数](http://qiita.com/south37/items/978eb8adbaff6274aff7)
* * *

公式本の「The Swift Programming Language」だと、239ページ目の「External Parameter Names」
こちらの説明もまたわかりやすい。

https://itunes.apple.com/jp/book/swift-programming-language/id881256329?mt=11

![Apple本](http://i.gyazo.com/4e5ea73a1f10b025721d57da1aaf3e41.png)
Elixir do Block

# Elixir do Block

## 概要
Elixir の do Block について。

Elixir では、ブロックを定義する際、 3 通りの記法が有ります。

## def name, do: logic
1行で記述する場合に利用する記法。
ブロックのための専用の文法が用意されているわけではなく、
do: logic の部分はただの Keyword list である。

~~~
defmodule Hoge do
  def hoge(x), do: x <> "hoge"
end

IO.puts Hoge.hoge("MeSsAgE")
~~~

* 出力

~~~
MeSsAgEhoge
~~~

## def name, do: (logic)
複数行で記述する場合。ただし、後述のシンタックスシュガーがあるため出番はない？

~~~
defmodule Hige do
  def hige(x), do: (
    y = x <> "hige"
    String.upcase(y)
  )
end

IO.puts Hige.hige("MeSsAgE")
~~~

* 出力

~~~
MESSAGEHIGE
~~~

## def name do next_line_logic end
複数行で記述する場合。 `def name, do: (logic)` のシンタックスシュガー

~~~
defmodule Hage do
  def hage(x) do
    y = x <> "hage"
    String.downcase(y)
  end
end

IO.puts Hage.hage("MeSsAgE")
~~~

* 出力

~~~
messagehage
~~~
chrome から簡単にISBN(10桁、13桁)で書籍を検索できるようにする

## こんな人に!

ISBNで書籍を検索することが多い

## 注意点
やっていることは、amazonの検索クエリを直接叩けるようにしているだけなので、amazonの仕様変更で使えなくなることもあります

# やりかた
1. chromeの検索入力部を右クリック > `検索エンジンの編集` を選ぶ
2. 検索エンジンの編集画面が出るので一番下までスクロールする
3. `検索エンジンを追加`に`amazon ISBN`(任意), `キーワード`に`isbn`(任意), `URL`に`http://amazon.jp/gp/search/?field-isbn=%s` を入れ完了を押す
4. こんな感じ![入力結果.png](https://qiita-image-store.s3.amazonaws.com/0/18789/55e0b057-6935-be29-247e-d3bc5b55aa20.png)

5. 検索入力部に`isbn`を入力しスペースを入れると、![このようになる](https://qiita-image-store.s3.amazonaws.com/0/18789/3d952f7e-b117-4887-153c-2c0cf6adf051.png)のようになる
6. 続けて検索したいISBNコードを入力する。![ISBNコードを入力](https://qiita-image-store.s3.amazonaws.com/0/18789/d9dc00ea-bb87-eeb9-7003-9ed4cd1113c1.png)
7. 下記のように検索結果が表示される

![こんな感じ](https://qiita-image-store.s3.amazonaws.com/0/18789/18128621-35f9-34ba-a644-dfa699ef6759.png)

## 使ってみた感想
10桁、13桁、ハイフン付き13桁等、どれでも検索できたので、ISBNでよく検索する人には便利なんじゃないかと思った（小並感）
Chronosでcronの代替をする (CentOS)

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

## Requirements

- JDK
- Apache Mesos

## Installation

- Mesosphereレポジトリをインストール

  ```bash
  rpm -Uvh http://repos.mesosphere.io/el/6/noarch/RPMS/mesosphere-el-repo-6-2.noarch.rpm
  ```

- Mesosをインストール

  ```bash
  yum install mesos
  ```

- JDKをインストール

  ```bash
  yum install java-1.7.0
  ```

- chronosをインストール

  ```bash
  yum install chronos
  ```

- zookeeperをインストール

  Clouderaのレポジトリをインストール。

  ```bash
  yum install http://archive.cloudera.com/cdh4/one-click-install/redhat/6/x86_64/cloudera-cdh-4-0.x86_64.rpm
  ```

  zookeeper、zookeeper-serverをインストール。

  ```bash
  yum install zookeeper zookeeper-server
  ```


- zookeeperを起動

  zookeeper初期化

  ```bash
  service zookeeper-server init 
  ```

  ```bash
  service zookeeper-server start
  ```

- mesosを起動

  ```bash
  start mesos-master
  start mesos-slave
  ```

  ジョブはスレーブプロセスで実行されるので必ずslaveも起動すること

- chronosを起動

  ```bash
  start chronos
  ```

- 動作確認

  mesosのヘルスチェック

  ```bash
  curl -i 10.0.0.1:5050/master/health
  ```

  chronos

  ```bash
  http://example.com:4400
  ```

  にアクセスし確認。


## 気になった点
- UTCのみ対応。

JSTなど別のタイムゾーンに対応する予定はないとのこと。

https://groups.google.com/forum/#!topic/chronos-scheduler/ixfkU_DDUNo

- yumレポジトリのchronos最新版でdockerコンテナを使おうとしても使えない。

```bash
 curl -L -H 'Content-Type: application/json' -X POST -d '{ "schedule": "R\/2014-10-23T17:22:00Z\/PT2M", "name": "dockerjob",   "container": {   "type": "DOCKER",   "image": "libmesos/ubuntu"  }, "cpus": "0.5", "mem": "512", "uris": [], "command": "while sleep 10; do date =u %T; done"}' localhost:4400/scheduler/iso8601
```

```bash
curl -L -X GET localhost:4400/scheduler/jobs | jq .

[
  {
    "schedule": "R/2014-10-23T08:14:17.000Z/PT1M",
    "runAsUser": "root",
    "highPriority": false,
    "uris": [],
    "errorsSinceLastSuccess": 0,
    "async": false,
    "owner": "shayashibara@trifort.jp",
    "retries": 2,
    "executorFlags": "",
    "executor": "",
    "epsilon": "PT30M",
    "command": "echo 123",
    "name": "test",
    "successCount": 46,
    "errorCount": 0,
    "lastSuccess": "2014-10-23T08:13:22.027Z",
    "lastError": "",
    "cpus": 0.1,
    "disk": 256,
    "mem": 128,
    "disabled": false
  },
  {
    "schedule": "R/2014-10-23T08:15:00.000Z/PT2M",
    "runAsUser": "root",
    "highPriority": false,
    "uris": [],
    "errorsSinceLastSuccess": 0,
    "async": false,
    "owner": "shayashibara@trifort.jp",
    "retries": 2,
    "executorFlags": "",
    "executor": "",
    "epsilon": "PT60S",
    "command": "while sleep 10; do date =u %T; done",
    "name": "dockerjob",
    "successCount": 0,
    "errorCount": 0,
    "lastSuccess": "",
    "lastError": "",
    "cpus": 0.1,
    "disk": 256,
    "mem": 128,
    "disabled": false
  }
]
```

container欄がない。

- Web UIでFontawesome用のリソースが404になってしまうためアイコンが表示されない
UIBezierPathで角丸にする


角丸をまとめてみた。

## UIBezierPathのclipを使って角丸にする

UIViewを継承したClipRoundedCornersViewというのを作ってイメージを描画しました。

```swift
import UIKit

class RoundedCornersView: UIView {

    override func drawRect(rect: CGRect) {
        UIBezierPath(roundedRect: self.bounds, cornerRadius: CGRectGetHeight(self.bounds) / 2).addClip()
        UIImage(named: "rocket")?.drawInRect(self.bounds)
    }
}
```

## UIBezierPathとUIViewのlayerを使って角丸にする

こちらもUIViewをサブクラス化して作りました。

```swift
import UIKit

class LayerRoundedCornersView: UIView {
    
    override func drawRect(rect: CGRect) {
        UIImage(named: "rocket")?.drawInRect(self.bounds)
        
        let maskPath = UIBezierPath(roundedRect: self.bounds, cornerRadius: CGRectGetWidth(self.bounds) / 2)
        let maskLayer = CAShapeLayer()
        maskLayer.path = maskPath.CGPath
        self.layer.mask = maskLayer;
    }
}
```

## UIStoryboard

今回は、UIStoryboardに置いたUIViewのクラスを指定することで画面上に表現しました。

![storyboard.png](https://qiita-image-store.s3.amazonaws.com/0/24041/52ec4e1a-c2a4-23b2-8acd-6000a3bac072.png "storyboard.png")

## 実行結果

![app2.png](https://qiita-image-store.s3.amazonaws.com/0/24041/c4b235ac-90b9-b99b-678e-f06298110ce2.png "app2.png")

## サンプルコード

- [morizotter/MZRUIBezierPathRoundedCornersSample](https://github.com/morizotter/MZRUIBezierPathRoundedCornersSample)

## 参考

- [Applying Rounded Corners - Cocoahope Articles](http://articles.cocoahope.com/blog/2013/03/06/applying-rounded-corners)
- [iOS - cornerRadiusを片側だけ効かせる（UIViewの一部だけ角丸にする） - Qiita](http://qiita.com/shu223/items/8093f8490019d432af52)
LDAPとSVNの連携

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


## Requirements

- httpd
- subversion 
- mod_dav_svn
- 証明書(不特定多数と通信するわけでなければオレオレでもOK)

## Install

必要なパッケージをインストール

```
yum install httpd subversion mod_dav_svn
```

SVNレポジトリ作成

```bash
mkdir /var/www/svn
cd /var/www/svn
svnadmin create test
```

Apacheのconfを設定

```/etc/httpd/conf.d/subversion.conf
# オレオレ証明書の場合は証明書の検証はしない
LDAPVerifyServerCert Off

<VirtualHost *:80>
ServerName "svn.trifort.jp"

SSLEngine on
SSLCertificateFile /etc/httpd/conf/example.crt
SSLCertificateKeyFile /etc/httpd/conf/example.key
<Location /repos>
   DAV svn
   SVNParentPath /var/www/svn
   SSLRequireSSL
   AuthType Basic
   AuthBasicProvider ldap
   AuthzLDAPAuthoritative off
   # 認証済みユーザ名として uid属性を設定する
   AuthLDAPRemoteUserAttribute uid
   AuthName "Auth for example.com"
   # 認証用文字列として cn を、あわせてuid属性を引っ張ってくる。
   AuthLDAPUrl ldaps://localhost/ou=People,dc=example,dc=com?uid SSL
   Require valid-user
</Location>
</VirtualHost>
<VirtualHost *:443>
ServerName "svn.trifort.jp"

SSLEngine on
SSLCertificateFile /etc/httpd/conf/example.crt
SSLCertificateKeyFile /etc/httpd/conf/example.key

<Location /repos>
   DAV svn
   SVNParentPath /var/www/svn
   SSLRequireSSL
   AuthType Basic
   AuthBasicProvider ldap
   AuthzLDAPAuthoritative off
   # 認証済みユーザ名として uid属性を設定する
   AuthLDAPRemoteUserAttribute uid
   AuthName "Auth for example.com"
   # 認証用文字列として cn を、あわせてuid属性を引っ張ってくる。
   AuthLDAPUrl ldaps://localhost/ou=People,dc=example,dc=com?uid SSL
   Require valid-user
</Location>
</VirtualHost>
```
Gradleでサブプロジェクトからライブラリを除外する



### ライブラリからライブラリを除外
```
compile('commons-configuration:commons-configuration:1.6') {
    exclude module: 'commons-digester'
    exclude module: 'commons-beanutils-core'
}
```

### サブプロジェクトからライブラリを除外
```
compile (project(':someproject')) {
    exclude group: 'org.apache.pdfbox', module: 'pdfbox'
}
```
Groupまで指定する必要があり、nameのみの指定だとエラーになります
Gradleで特定のメソッド、クラスのみテスト



## 特定のメソッドのみテスト
```bash
gradle test --tests "*HogeTest.testNewInstance" -i
```

## 特定のクラスのみテスト
```bash
gradle test --tests "*HogeTest" -i
```

## 備考
* 基本testはぐるぐる回すと思うので```export GRADLE_OPTS="-Dorg.gradle.daemon=true"```しておきましょう。
* gradle2.1でのみ確認です。
本気でランニングをはじめて3ヶ月で分かったこと

> あえて技術じゃないネタを投稿してみた

# スペック

* 30歳
* 196センチ98キロだった（3ヶ月で85キロまで減量）
* 運動は大学2年まで（主にバスケ）
* ランニングは5キロを年2回程度走るだった
* 普通の会社員（エンジニア）、勤務時間は（平均で）10:30出社22:00退社
 * 極端に忙しいと極端に暇なときがある

# ランニングを始めるきっかけ

* マラソンに行こうと先輩に誘われた（ハーフだけど）
* 消化不良に苦しんでいた、運動不足が原因だと思った
* 登山のための体力づくりとして
* ランニングブームとは無関係

# どのくらい走ってる

* 週1or2回しか走らない
* 一回あたり10K以上
 * 最近はマラソンに向けて練習中、16,7キロを走る
* キロ6分程度（10Kの場合）

# そもそもランニングって楽しいの？

``` 人それぞれだと思う ```

* 1キロ走るだけで死ぬほどつらい、膝が痛すぎて立てない、etc.. そういう人は本当にやめたほうがいい
 * 「Born To Run」って本が教えてくれたのは、ランニングは膝へのダメージが大きいので、膝を壊したくなければ走らないほうがいい。（もちろんトレードオフとして体にいいこともいっぱいある）
* 僕的には最初の5キロ走っても何も楽しくない。ただ、8キロくらいから体が慣れてきて、莫大な爽快感を得られる。
 * ただ今の限界は20キロ未満である。限界に近づくと、辛くなる。
* 走る間に脳がリラックスできる。現実とかどうでも良くなる。なぜなら、まともに思考する気力がない。たまに脳をリラックスさせ、また現実に戻るとき、やる気が湧いてくる。
* ルートを考えるのが楽しい
 * 新宿駅→調布駅まで甲州街道を沿って走る「国道20号ラン」とか、六本木ヒルズから大江戸温泉までレインボーブリッジを経由する「お台場ラン」とか、楽しいルートがいっぱいあるのでそれを考えるのが楽しい
* 大会にでるのも楽しい
 * 完走証を自慢できる
 * ギャルをナンパできる（今ランニングブームだから）
 * 場合によって地酒をただで飲み放題できる（八丈島ハーフマラソンとか）

# 走ってていいことあるの？

``` ある！ ```

* 肉体的
 * 痩せるw
 * 耐久力が上がる
* 普段あるかない道ばっかり走ってるので、あ、ここにこんな店があるんだ！みたいな発見の楽しさが味わえる
* 走ったあとのビールがうまい

# その他のアドバイス

* スマホアプリを活用する
 * runtastic, nike+, mapmyrunとかとか
 * 目標を立てるし、前月比や達成度もわかる
 * 新しいルートを走るとき結構迷子になりやすにので、アプリのGPS/地図機能がすごく役に立つ
 * 走るときの進捗もわかるので、頑張れる
* ルートをこまめに変える
 * やっぱ新しい景色を見れるのって楽しい、力になれる
 * 5つくらいのルートをローテートできるなら最高
 * 短・中・長距離のルートを用意する
* 大会に出てみる
 * 僕も出たことない（'14/11と'15/01に2回出ることを控えているが）
 * やっぱ大会を完走することが一番達成感を感じるだろう
 * 今大会いっぱいあるのでスケジュール・体力・好みに合わせて選べる

# 最後に

> https://www.runtastic.com/ja/users/peichao-yu
IntelliJ IDEAを使ってリモートデバッグ

#概要

IntelliJ IDEAを使って、Tomcat上で動作しているアプリケーションのリモートデバッグをする手順です。

gitbucketのエラーを調べている時に行った手順をまとめたので、スクリーンショットはlocalhostで動いているgitbucketのものになっています。
Scalaベースのアプリケーションに特化した話ではありません。

#環境

本手順で使用した環境は以下の通りです。

- Mac OS X 10.9.5
- jdk 1.8.0_20
- Tomcat 8.0.14
- IntelliJ 13.1.5

以下の前提で設定を行っています。設定値については適宜読み替えてください。

- jdk、Tomcat、IntelliJをインストール済み
- Tomcatのポートは8080
- JPDAのポートは8000
- Tomcatにgitbacketをデプロイ済み

#リモートデバッグする

##Tomcatの設定

$CATALINA_HOME/bin/setenv.shを作成して、以下を記述する。

```
export JPDA_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000"
```

##IntelliJ IDEAの設定

トップメニューからConfigure ➝ Preferenceを開き、左メニュー ➝ Application Serversで+ボタンを押下して、Tomcatを追加する。

当方の環境では以下のような設定になった。

![tomcat.png](https://qiita-image-store.s3.amazonaws.com/0/30691/69ec67b6-0261-f125-3359-a2c4609f6587.png)


プロジェクト画面のメニューからRun ➝ Edit Configurationを開き、+ボタンを押して、左メニュー ➝ Tomcat Server ➝ Remoteを開く。

Serverタブで以下を入力する。

| Title | Value    |
|:------|:---------|
| Name  | 任意の名前 |

以下はデフォルト表示のまま

| Title              | Value                           |
|:-------------------|:--------------------------------|
| Application Server | Tomcat 8.0.14                   |
| Open browser       | http://localhost:8080/gitbucket |
| Host               | localhost                       |
| Port               | 8080                            |


![server.png](https://qiita-image-store.s3.amazonaws.com/0/30691/8d471bff-fca3-d42a-b165-71ba15823295.png)

Startup/ConnectionタブでDebugを選択して以下を入力する。


| Title | Value |
|:------|:------|
| Port  | 8000  |


![startup.png](https://qiita-image-store.s3.amazonaws.com/0/30691/cc2142ec-e29d-2761-1996-118373862ac1.png)

Apply, OKを押下する。

##リモートデバッグ

以下のコマンドを実行してTomcatを起動する。

```
catalina.sh jpda start
```

IDEAからtomcat-remoteをデバッグ実行する。(右上のデバッグボタンを押すなど)
成功すると「Connected to server」と表示される。

![IDEA.png](https://qiita-image-store.s3.amazonaws.com/0/30691/f8398c5d-c4a2-29e8-20e7-9f2def227422.png)


ブラウザが起動して、Run configurationのOpen Browserで指定したページが開く。

![gitbucket.png](https://qiita-image-store.s3.amazonaws.com/0/30691/dda960b6-7b9b-8c2a-0d3f-3099a49442a5.png)


IDEAで任意の場所にブレークポイントを設定して、ブラウザを操作してデバッグを行う。

![debug.png](https://qiita-image-store.s3.amazonaws.com/0/30691/3574b47b-08f4-47b3-d191-d99c6eebec8b.png)
sublimeText3 でcoffee script のシンタックス ハイライト

##概要
sublimeText3 で coffee script のシンタックスハイライトをさせたかったので、その手順です。

OS: Windows 8.1 

##手順
1. [ ctrl ]+[ shift ]+[ P ] でInstall Packageを選択
2. 「 Better CoffeScript 」と入力してインストール
3. [ 表示 ]-[ シンタックス ]-[ Better CoffeeScript ]-[ CoffeeScript ] にチェック

![sublimetext3_coffee_syntax.png](https://qiita-image-store.s3.amazonaws.com/0/58126/0582c9c9-fe17-4c1c-6604-68cba2c5b534.png)

以上で、Coffee Scriptに シンタックスハイライト を適用できました。
Cacooの図をAPIで取得してAsciiDoc文書に埋め込むasciidoctor-diagram-cacooを作った

# はじめに

AsciiDocの文書内にCacooで作った図を埋め込みたい、しかもいちいちPNGにエクスポートしてローカルに保存しなくてもAPIで画像を取得して埋め込みたい、ということで
[asciidoctor-diagram]( https://github.com/asciidoctor/asciidoctor-diagram )という[asciidoctor]( https://github.com/asciidoctor/asciidoctor )のエクステンションのエクステンション[hnakamur/asciidoctor-diagram-cacoo]( https://github.com/hnakamur/asciidoctor-diagram-cacoo )を作成しました。

RubyGems.orgにも[asciidoctor-diagram-cacoo]( https://rubygems.org/gems/asciidoctor-diagram-cacoo )として公開済みですので、Gemfileに以下のように書けば利用可能です。

```
gem "asciidoctor-diagram-cacoo"
```

# サンプル文書

asciidoctor-diagram-cacooを利用したサンプル文書用のプロジェクト[hnakamur/asciidoctor-diagram-cacoo-example]( https://github.com/hnakamur/asciidoctor-diagram-cacoo-example )
も作りました。

日本語入りのPDFのサンプルは
https://hnakamur.github.io/asciidoctor-diagram-cacoo-example/sample-ja.pdf です。

# ローカルで試すための手順

## 予めRubyとJavaとVLゴシックフォントをインストール

asciidoctorはRubyで、asciidoctor-fopubはJavaで書かれていますので、事前にインストールしておいてください。

また、日本語フォントとしてVLゴシックフォントを使用しますので、[VL Gothic Font Family]( http://vlgothic.dicey.org/ )からダウンロードしてインストールしてください。GoogleのNoto Sans Japaneseフォントも使いたいのですが、asciidoctor-fopubがTrueTypeフォントはサポートしていますがOpenTypeフォントはサポートしていないので使えません。

OSXでAnsibleをお使いであれば、[hnakamur/macbook_setup]( https://github.com/hnakamur/macbook_setup )を使えばまとめてセットアップすることが出来ます（ただし、他にもいろいろセットアップされます）。

## サンプル文書のプロジェクトをgitでローカルに取得

```
git clone https://github.com/hnakamur/asciidoctor-diagram-cacoo-example
cd asciidoctor-diagram-cacoo-example
```

## APIキーの設定

事前にCacooにログインしてアカウントの設定ページのAPIキータブでAPIキーを発行して、環境変数CACOO_API_KEYに設定しておいてください。

```
export CACOO_API_KEY=_Your_Cacoo_API_Key_Here_
```

[zimbatm/direnv](https://github.com/zimbatm/direnv)をお使いの場合は、上記の内容を.envrcというファイルに保存しておいて、以下のコマンドを実行することで、.envrcのファイルが存在するディレクトリにcdしたら自動的に環境変数 `CACOO_API_KEY` が設定されます。

```
direnv allow .
```

direnvは [hnakamur/macbook_setup](https://github.com/hnakamur/macbook_setup)のプレーブックを使えば簡単にセットアップできます。


## bundlerでgemをインストール

```
bundle install --path vendor/bundle --binstubs vendor/bin
```

## PDFファイル作成

以下のコマンドを実行すると*.adocファイルに対応して*.pdfファイルが生成され、openコマンドによってプレビュー.appで*.pdfファイルを開きます。

```
bundle exec rake pdf
```

## ファイルウォッチモード

以下のコマンドを実行すると*.adocファイルを編集して保存する度に*.pdfファイルが生成されプレビュー.appで開きます。

```
bundle exec rake watch
```
hubot から、cloudbit に信号を送るサンプル


IoT なデバイス、[littleBits](http://littlebits.cc/) の [cloudbit](http://littlebits.cc/cloud) を利用して、ChatOps 的なことをやってみます。  
てことで

1. slack で何かコマンドを入れる
- hubot に処理が渡る
- hubot から cloudbit へ信号を送る

というのを試してみました。

## 準備

- slack と hubot を連携できる環境を作っておく
- cloudbit のセットアップを済ませておく  
(設定はここから → <http://control.littlebitscloud.cc/>)
- cloudbit の Device ID と AccessToken を取得しておく (cloudbit設定画面の "SETTING" メニュー内にあります)


## サンプルコード

hubot にこんな感じのコードを追加

```coffeescript
_DEVICE_ID = 'cloudbitのデバイスID'
_ACCESS_TOKEN = 'cloudbitのアクセストークン'

module.exports = (robot) ->
  robot.respond /cloudbit test/i, (msg) ->
    data = JSON.stringify
      percent: 100 # 信号の強さ
      duration_ms: 1000 # 何ミリ秒信号を送るか

    robot.http("https://api-http.littlebitscloud.cc/devices/#{_DEVICE_ID}/output")
    .header('Authorization', "Bearer #{_ACCESS_TOKEN}")
    .header('Accept', 'application/vnd.littlebits.v2+json')
    .header('Content-Type', 'application/json')
    .post(data) (err, res, body) ->
      msg.send 'ピコーン'
```

post するデータの percent や duration_ms は、信号の強さと長さの指定です。適当な数字にしときます。

## 試す

slack で

```
hubot cloudbit test
```

と入力すれば、slack 〜 hubot 経由で cloudbit に信号が送られます。

Jenkins とか New Relic から slack にアラートが流れる → cloudbit 経由で音が鳴り響く！ とかできるんじゃないかなー
[Swift][Xcode6.1]Apple LLVM 6.1 Errorの対応方法


開発中にこんなエラーが出ました。
(イメージ図です。)
![エラー例.jpg](https://qiita-image-store.s3.amazonaws.com/0/15812/950831de-9b57-9448-7d2e-c983c4ee5f5b.jpeg "エラー例.jpg")


### 解決方法

## １. xcodeを落とします
<b>cmd + Q(xcode終了のショートカットキー)</b>や
Xcode上でXcode終了を
実行します。

![スクリーンショット 2014-11-01 17.46.40.png](https://qiita-image-store.s3.amazonaws.com/0/15812/efabb349-cb8b-412e-8c68-49897f6d5b84.png "スクリーンショット 2014-11-01 17.46.40.png")



## ２. ModuleCacheを削除します
以下のコマンドを実行します。

```
rm -rf ~/Library/Developer/Xcode/DerivedData/ModuleCache/*
```

## ３. Xcodeを起動してクリーンビルド、ビルドを実行します。
<b>cmd + K(クリーンビルドのショートカットキー)</b>、
<b>cmd + B(ビルド実行のショートカットキー)</b>、
やxcode上でクリーンビルド、ビルドを実行します。

![スクリーンショット 2014-11-01 17.52.32.png](https://qiita-image-store.s3.amazonaws.com/0/15812/6eb4a49e-5ae5-8402-758e-4fbe51a4de36.png "スクリーンショット 2014-11-01 17.52.32.png")

### 注意
上記を実行してもうまく行かない場合があります。
その際は「３. Xcodeを起動してクリーンビルド、ビルドを実行する。」を再度行うか、Macの再起動などでエラーが解消されます。
func経由でinterface型にnilを入れると、nil扱いにならない。

- interfaceを実装している構造体を参照で返すfuncを作る
- そのfuncからnilを返す
- 実装している構造体参照型として受け取ると、正常にnil判定される
- interface型で受け取ると、nil判定がうまく行かず、使うともちろんpanicになる

自前でerrorを作ろうとしてたときにハマりました。interfaceに対する理解が足りないのか、~~バグなのか。。。~~

## interface型は、typeとvalueを持っていて、両方nilでないとnil判定されない

@yosssiさんにコメントで教えていただきました。ありがとうございます。
interface型は、内部的にtype, valueを持っており、nilと判定されるには、そのどちらもnilでないといけないそうです。

> https://golang.org/doc/faq#nil_error での説明 "An interface value is nil only if the inner value and type are both unset, (nil, nil)." によりますと、interface型の変数がnilと判定されるには、その内部の値と型の両方がnilである必要があるみたいですね。
> 
> 今回の例の場合は、errの内部の値がnilである一方で、型がnilでない（*MyErrorである）ために、nilと判定されていないようです。
> 
> http://play.golang.org/p/7FIqaGQ9mo

今回のケースでは、受け取る方が`*MyError`の時は、自前の構造体型なので、そのままnilが入り、ちゃんとnil判定されています。
受け取る方が、errorの場合は、interface型なので、上記に該当し、type=*MyError, value=nilという状態になり、nil判定が想定通りにいかないということです。

いただいたコメント内のGo Playgroundでreflectを使って確認されているのでわかりやすいと思います。

また、半年前ぐらいに書かれていた[絶対ハマる、不思議なnil](http://qiita.com/umisama/items/e215d49138e949d7f805)にも、詳しく載っていました。

上記のコメントにある通り、明示的にnilを返すというのが大事そうです。

私の場合、最初に変数を宣言して、最後にreturnするやり方は、コードの見通しが良くないと思っているので、エラーがない時は`return nil`といった風に返しています。ただ、複数階層funcを呼ぶコードを書いていて、以下のような直接`return OtherFunc()`をしている箇所があり、これが、type=*MyError, value=nilという状況を発生させていました。

    func TopFunc() error {
    	if something {
    		// ここで、*MyError型のnilがerrorとして返されてハマる。
    		return OtherFunc()
    	} else {
    		return nil
    	}
    }
    
    func OtherFunc() *MyError {
    	if something {
    		return nil
    	} else {
    		return &MyError{}
    	}
    }

## 環境

環境は、golang 1.3.3/MacOS 10.9.5です。
以下のGo Playgroundでも発生します。
http://play.golang.org/p/Jho3HHYTHy

    package main
    
    import (
        "fmt"
    )
    
    func NoError() error {
        return nil
    }
    
    type MyError struct {
        MyMsg string
    }
    
    func (e MyError) Error() string {
        return e.MyMsg
    }
    
    func MyErrorRef() *MyError {
        return nil
    }
    
    func main() {
        var err error
        err = nil
        if err != nil {
            fmt.Printf("1. this message does not show.\n")
        }
        
        err = NoError()
        if err != nil {
            fmt.Printf("2. this message does not show.\n")
        }
    
        myErr := MyErrorRef()
        if myErr != nil {
            fmt.Printf("3. this message does not show.\n")
        }
    
        err = MyErrorRef()
        fmt.Printf("4. err: %v, nil: %v\n", err, nil)
        if err != nil {
            fmt.Printf("5. err is nil, but 'err != nil' is true...? will be panic.\n")
            fmt.Printf("6. %s\n", err.Error())
        } else {
            fmt.Printf("7. why doesn't show this message?\n")
        }
    }
pipでlibxml/xmlversion.hエラー


pipのインストールコマンドで以下のエラーが出力された。
ちなみにMac OSX v10.9.5。

```
/private/var/folders/bv/h6xg91rd6jd1jftjqhd2tyfr0000gn/T/pip_build_lincellorio/lxml/src/lxml/includes/etree_defs.h:14:10: fatal error: 'libxml/xmlversion.h' file not found

#include "libxml/xmlversion.h"

         ^

1 error generated.
```

libxml/xmlversion.hがないらしい。。

以下のコマンドで解決した。

```
$ xcode-select --install
$ pip install lxml
```
ASP.NETのValidateRequest

ASP.NETでは、ValidateReuqestというセキュリティ機能が存在し、デフォルトでONになっている。
[ASP.NET の組み込み機能を活用し、Web 攻撃を回避する](http://msdn.microsoft.com/ja-jp/library/ms972969.aspx#securitybarriers_topic6)
>ASP.NET 1.1 では、@Page ディレクティブ上の ValidateRequest 属性がオンになっているなら、ユーザーが潜在的に危険な HTML マークアップを、クエリ文字列、クッキー、あるいはフォーム フィールドで送信していないか確認します。もしこれが検出されたなら、例外処置が実行されリクエストは中断されます。この属性はデフォルトではオンとなっており、保護されるためには何も変更すべきではありません。もし HTML マークアップの受け渡しを許可したいのなら、積極的にこれを無効化する必要があります。

このため、URLパラメータにタグが含まれていたりすると、
>System.Web.HttpRequestValidationException (0x80004005): 危険な可能性のある Request.QueryString 値がクライアント ("...") から検出されました。

と、ASP.NET側で自動的に500エラーを返してしまう。
オフにするには、web.configで

```xml
<system.web>
　　<httpRuntime requestValidationMode="2.0" />
</system.web>
```
と指定し（Modeが4だと全ページで強制ONになる）、個別のページで@Pageディレクティブを以下のように設定する必要がある。
`<@ Page validateRequest="false" %>`

無効化しない状態だと、BeginRequestより前にチェックが行われて500エラーを返してしまうので、コード側では何もできない。

当然、オフにする場合は上記のセキュリティ機能の恩恵は受けられないので、パラメータの扱いには注意すること。

## HTTPハンドラー（.ashx）の場合
HTTPハンドラでは、自動チェックは行われないが、該当の値にアクセスする際にチェックが行われ、NGだとHttpRequestValidationExceptionが投げられる。
URLパラメータにアクセスした際のチェック
http://referencesource.microsoft.com/#System.Web/xsp/system/Web/HttpRequest.cs#2116
チェックなしで値を取得したい場合は、値の扱いを自分で気をつけつつ、HttpRequest.Unvalidatedプロパティを使用する。

```csharp
var userComment = Request.Form["userInput"]; // Validated, throws error if input includes markup
 
Request.Unvalidated("userInput"); // Validation bypassed
Request.Unvalidated.Form["userInput"]; // Validation bypassed
 
Request.QueryString["userPreference"]; // Validated
Request.Unvalidated.QueryString["userPreference"]; // Validation bypassed;
```
参考
[Request Validation in ASP.NET](http://msdn.microsoft.com/en-us/library/hh882339(v=vs.110).aspx)
[HttpRequest.Unvalidated プロパティ](http://msdn.microsoft.com/query/dev11.query?appId=Dev11IDEF1&l=JA-JP&k=k(System.Web.HttpRequest.Unvalidated);k(TargetFrameworkMoniker-.NETFramework,Version%3Dv4.5);k(DevLang-csharp)&rd=true)
EmscriptenのASYNCIFYオプション

# Emscriptenでsleepが書けるようになった

emccのオプションに-s ASYNCIFY=1を指定すると、

```
emscripten_sleep(40) // 単位はms
```

が使える。
（このオプションを忘れると、ランタイムエラーで教えてはくれる）

このオプションが導入されるまでは、メインループを切り出して
関数にして、その関数へのポインタをemscripten_set_main_loopに
登録する処理が必要だった。


# 関連ツイート

<blockquote class="twitter-tweet" lang="ja"><p>”-s ASYNCIFY=1”に加えてSDL_Delayみたいなsleep読んでる箇所をemscripten_sleep()に書き換える必要があるのかぁ、さっきのライブラリの作者がemscriptenのwikiに解説書いてた <a href="http://t.co/f2MUN7XCzk">http://t.co/f2MUN7XCzk</a></p>&mdash; kjunichi (@kjunichi) <a href="https://twitter.com/kjunichi/status/506674236111327232">2014, 9月 2</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

# 関連記事

- [SLコマンドをEmscriptenでWeb化する 2014年秋編](http://abrakatabura.hatenablog.com/entry/2014/11/01/170855)
- [libiconvをemscriptenでjs化し、node.jsで使った](http://abrakatabura.hatenablog.com/entry/2015/04/18/115323)
- [jsdo.itでEmscriptenを動かすときのメモ](http://abrakatabura.hatenablog.com/entry/2014/04/17/072514)
- [slコマンドのWebGL版を作ろうとしたら](http://abrakatabura.hatenablog.com/entry/2014/04/09/071724)
- [Emscriptenでファイルを読み込む](http://abrakatabura.hatenablog.com/entry/2013/10/03/120831)
- [emscriptenでOpenGL](http://abrakatabura.hatenablog.com/entry/2013/07/20/081301)
Cacooで書いた図をSVGでエクスポートしてasciidoctorで埋め込むサンプルを作ってみた

# はじめに

Cacooで作成した図は画面のメニューからSVGでエクスポートすることが出来ます。
これをasciidoctorで文書に埋め込めば画像と違って拡大縮小してもきれいな図ができるのではと期待して試してみました。

# サンプル

ソース: https://github.com/hnakamur/asciidoctor-fopub-embed-svg-example
HTML出力: https://hnakamur.github.io/asciidoctor-fopub-embed-svg-example/class_diagram.html
PDF出力: https://hnakamur.github.io/asciidoctor-fopub-embed-svg-example/class_diagram.pdf

## 出力手順

### セットアップ

以下のコマンドでセットアップします。

```
bundle --path vendor/bundle --binstubs vendor/bin
```

また、PDF出力には[asciidoctor/asciidoctor-fopub]( https://github.com/asciidoctor/asciidoctor-fopub )を使っていますので、Javaをインストールしておいてください。

Hombrew Caskをセットアップ済みなら以下のコマンドでOKです。

```
brew cask install java
```


### HTML出力

```
bundle exec rake html
```

### PDF出力

```
bundle exec rake pdf
```

初回実行時に[asciidoctor/asciidoctor-fopub]( https://github.com/asciidoctor/asciidoctor-fopub )をクローンしてから実行するようになっています。


# 課題

## Cacooの図をSVG形式でエクスポートするのをAPIでやりたい

[図の画像を取得するAPI]( https://cacoo.com/lang/ja/api_image )ではPNG形式しか取得できないようです。SVG形式でも取得できるように[お問い合わせ]( https://cacoo.com/lang/ja/contact?ref=footer )から要望を送ってみました。

## PDFだと図の下にムダな余白ができてしまう→解決

出力されたPDFを見ると下のスクリーンショットのように図の下にムダな余白ができてしまいます。HTMLではムダな余白はできません。

![redundant_space.png](https://qiita-image-store.s3.amazonaws.com/0/3227/8ef0f47a-578a-eef7-203f-c2727f159343.png)

この問題についてはasciidoctorのフォーラムで質問してみました。

2014-11-04 追記

フォーラムで回答を頂いて解決しました。svgのルート要素に `width` と `height` 属性を追加すればOKでした。上記の例では `viewBox="75.0 34.5 441.0 265.5"` と指定されていたので、 `width="441.0" height="265.5"` を追加しました。これで図とその後のテキストの間のムダな余白は無くなりました！

![pdf_with_embedded_svg.png](https://qiita-image-store.s3.amazonaws.com/0/3227/0e85920c-3c70-eaf7-2f35-54cf31e1ae57.png)

やはりPNGの画像よりSVGで埋め込むほうが文字がくっきりして綺麗ですね！

あとはCacooがSVGで取得するAPIを用意してくれるのを期待しています。

## Cacooの図の画像取得APIでSVG形式をサポートする要望に投票お願いします！

2014-11-04 追記

Cacooの図の画像取得APIでSVG形式をサポートしてほしいとお問い合わせフォームでお願いしてみたところ、
[要望受付窓口 (匿名にて投稿可能)]( http://feedback.cacoo.com/ )にあげてくださいとの回答を頂きました。

ということで、早速要望を書きました。みなさん是非投票をお願いします！

[図の画像取得APIでSVG形式をサポートしてください！ – cacoo のカスタマーフィードバックとアイディア]( http://feedback.cacoo.com/forums/4980-general-ja/suggestions/6658457-%E5%9B%B3%E3%81%AE%E7%94%BB%E5%83%8F%E5%8F%96%E5%BE%97api%E3%81%A7svg%E5%BD%A2%E5%BC%8F%E3%82%92%E3%82%B5%E3%83%9D%E3%83%BC%E3%83%88%E3%81%97%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84 )
うっかりYosemiteにアップデートしたらVagrantが動かなくなった

# 背景
* MacOSをYosemiteにアップデート
* Vagrantで仮装マシン作成しようとするとコケる
* おわた！

# 状況
* vagrant upするとこんなログがでる

```
$ vagrant up
bash: `__BASH_FUNC<__rvm_date>()' の関数定義をインポート中にエラーが発生しました
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Resuming suspended VM...
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
The guest machine entered an invalid state while waiting for it
to boot. Valid states are 'restoring, running'. The machine is in the
'saved' state. Please verify everything is configured
properly and try again.

If the provider you're using has a GUI that comes with it,
it is often helpful to open that and watch the machine, since the
GUI often has more helpful error messages than Vagrant can retrieve.
For example, if you're using VirtualBox, run `vagrant up` while the
VirtualBox GUI is open.
```

若干Bash関係のエラーが出ているけどとりあえず無視する。
関係ありそうなのはVirtualBOXがうまく動いてなさそうなところ。

# 対応作
* VirtualBOXを最新版を再インストール。
 - インストール方法は割愛。
  - 2014/11/1現在では VirtualBox 4.3.18 for OS X

# 結果
* 動いた！

```
$ vagrant up
bash: `__BASH_FUNC<__rvm_date>()' の関数定義をインポート中にエラーが発生しました
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Resuming suspended VM...
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
    default: Warning: Connection refused. Retrying...
==> default: Machine booted and ready!
```

* vagrant status

```
$ vagrant status
bash: `__BASH_FUNC<__rvm_date>()' の関数定義をインポート中にエラーが発生しました
Current machine states:

default                   running (virtualbox)

The VM is running. To stop this VM, you can run `vagrant halt` to
shut it down forcefully, or you can run `vagrant suspend` to simply
suspend the virtual machine. In either case, to restart it again,
simply run `vagrant up`.
```

# 残った課題
~~BASHのエラーなんだろう。。。~~
rvm削除と.bashrcを修正して解決しました！
Macでgit commitが失敗する場合の対応


#検証環境
OS X 10.9.5


#状態
コミット時に以下のようなエラーメッセージが出力されコミットに失敗してしまう。

```bash
$ git commit
error: There was a problem with the editor 'vi'.
Please supply the message using either -m or -F option.
```

#対応
コミット時のエディタを指定する。
指定する際にはシンボリック・リンクの"vi"ではなく、実体の"vim"を指定する。

```bash
$ git config --global core.editor "vim"
```

#補足
今回の障害は、エディタが０以外の終了コードを返すことが原因である。
core.editorが未設定かつ、環境変数EDITORが設定されていない場合、コミット時のエディタとしてviが呼び出される。
追加インストール等をしていない状態ならば、/usr/bin/viは、/usr/bin/vimへのシンボリック・リンクになっている。
gitからの呼び出しではなく直接コマンドにより、vimを起動してファイルを編集した後の終了コードを確認すると、シンボリック・リンク経由で起動した場合のみ、終了コードが１になっている。

```bash
$ which {vi,vim}
/usr/bin/vi
/usr/bin/vim

$ ll /usr/bin/{vi,vim}
lrwxr-xr-x  1 root  wheel        3  9 29 15:29 /usr/bin/vi@ -> vim
-rwxr-xr-x  1 root  wheel  1472736  9 29 15:28 /usr/bin/vim*

$ vi code.rb
$ echo $?
1

$ vim code.rb
$ echo $?
0
```

シンボリック・リンク経由の起動を回避するため、コミット時のエディタに"vim"を指定する。

#追記２(解決)
いつの間にかツイートされてて、さらに答えが出ました。感謝。
>「vi」という名前で起動すると、vi互換動作になり、vim限定の命令が無効になってしまうのが原因。

仕様通りの動作で、vi互換になるには他の条件もあるそうです。
これで、別バージョンで同じ状態になっても、しっかり対応できそうです。

さらに「ex」だとラインエディターになるそうです。
現環境で確認したら、しっかりvimでした。

```bash
$ ls -l /usr/local/bin/ex
lrwxr-xr-x  1 stupiddog  admin  28 11  1 17:49 /usr/local/bin/ex@ -> ../Cellar/vim/7.4.488/bin/ex

$ ls -l /usr/local/Cellar/vim/7.4.488/bin/ex
lrwxr-xr-x  1 stupiddog  admin  3 11  1 17:47 /usr/local/Cellar/vim/7.4.488/bin/ex@ -> vim
```

#追記１
もっと発生の原因を特定するために`.vimrc`の内容を絞り込んだ結果、`filetype off`が原因であることが分った。
ログ出力を指定して実行した結果、エラーが発生していることが分かる。

```bash
$ /usr/bin/vi -V9vi.log code.rb
```

```:vi.log
...
Error detected while processing /usr/share/vim/vim73/ftoff.vim:
line   11:
E216: No such group or event: filetypedetect *
...
```

`autocommand`で登録されたコマンドを削除するために`au!`コマンドを実行しているが、削除対象が無いためエラーとなっている。
試しに`filetype off`より前に`filetype on`を記述しておくとエラーとならず終了コードも０となる。

また、呼び出し方としてシンボリック・リンクが問題となっているかを確認するために、適当な名前で新規にシンボリック・リンクを作成した結果、パスとして`vi`となっている場合のみ終了コードが１になってしまう事が分った。

```bash
$ cat .vimrc
filetype off

$ sudo ln -s /usr/bin/vim /usr/bin/aaa
$ /usr/bin/aaa code.rb
$ echo $?
0
$ sudo mv /usr/bin/aaa /usr/bin/vi
$ /usr/bin/vi code.rb
$ echo $?
1
```

Homebrewでインストールした`vim`ではどうなるかというと、ログ上では同じエラーが発生しているが、終了コードには影響しない。ついでにUbuntu 14.04上でも試してみたが終了コードは０である。

…OS Xに初期状態でインストールされている Vim version 7.3固有の問題のようですが、もうVim version 7.4を使用するのでここまで。
【iOS】【Swift】画像を複数枚選択するライブラリ『ELCImagePickerController』を使う



写真を複数枚選択するのは標準に無いので、ライブラリを使う。

## ELCImagePickerController


GitHub: https://github.com/B-Sides/ELCImagePickerController

## コード

```swift
import UIKit

class ViewController: UIViewController, ELCImagePickerControllerDelegate {
    

    @IBAction func addButton(sender: AnyObject) {
        self.pickImages()
    }
    
    
    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.
    }
    
    
    // 写真を選択する
    func pickImages() {
        let picker = ELCImagePickerController()
        picker.maximumImagesCount = 5  // 選択する最大枚数
        picker.imagePickerDelegate = self
        self.presentViewController(picker, animated: true, completion: nil)
    }
    
    //  写真選択時に呼び出される
    func elcImagePickerController(picker: ELCImagePickerController!, didFinishPickingMediaWithInfo info: [AnyObject]!) {
        self.dismissViewControllerAnimated(true, completion: nil)
        if (info.count == 0) {
            return
        }
        var pickedImages = NSMutableArray()
        for any in info {
            let dict = any as NSMutableDictionary
            let image = dict.objectForKey(UIImagePickerControllerOriginalImage) as UIImage
            pickedImages.addObject(image)
        }
        println(pickedImages)
    }
    
    // 写真未選択時に呼び出される
    func elcImagePickerControllerDidCancel(picker: ELCImagePickerController!) {
        self.dismissViewControllerAnimated(true, completion: nil)
    }
}
```

٩(๑❛ᴗ❛๑)۶
【iOS】【Swift】写真をその場で撮ったり選択したりする



こんな感じ

```swift
import UIKit

class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {

    @IBAction func addButton(sender: AnyObject) {
        self.pickImageFromCamera()
        self.pickImageFromLibrary()
    }
    
    
    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.
    }
    
    
    
    // 写真を撮ってそれを選択
    func pickImageFromCamera() {
        if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.Camera) {
            let controller = UIImagePickerController()
            controller.delegate = self
            controller.sourceType = UIImagePickerControllerSourceType.Camera
            self.presentViewController(controller, animated: true, completion: nil)
        }
    }
    
    // ライブラリから写真を選択する
    func pickImageFromLibrary() {
        if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.PhotoLibrary) {
            let controller = UIImagePickerController()
            controller.delegate = self
            controller.sourceType = UIImagePickerControllerSourceType.PhotoLibrary
            self.presentViewController(controller, animated: true, completion: nil)
        }
    }
    
    
    // 写真を選択した時に呼ばれる
    func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) {
        if info[UIImagePickerControllerOriginalImage] != nil {
            let image = info[UIImagePickerControllerOriginalImage] as UIImage
            println(image)
        }
        picker.dismissViewControllerAnimated(true, completion: nil)
    }
}
```

٩(๑❛ᴗ❛๑)۶
型に対して後から型クラスのインスタンス宣言を自動導出するには


型を定義する際に、 *deriving* 宣言を用いると、 Show クラスなどの型クラスに対して、
デフォルトの実装を使って自動的にインスタンス宣言を導出してくれて大変便利なのだが、

```haskell 
-- GHCi, version 7.8.3: http://www.haskell.org/ghc/  :? for help
ghci> data Hoge = Hoge Int deriving Show
ghci> :i Hoge
data Hoge = Hoge Int -- Defined at <interactive>:128:1
instance Show Hoge -- Defined at <interactive>:128:31
ghci> Hoge 3
Hoge 3
```

通常の *deriving* 宣言は、型定義時にしか使えないので、例えば、外部ライブラリで定義している型など、
手を加える事のできない型に対して、後から Show クラスを追加したい、などという時には、
いちいち自前でインスタンスの実装を記述しなければならず、大変めんどくさい。
そのような時、 GHC 拡張の *StandaloneDeriving* を使えば、型定義の後から ( もしくは定義ファイルの外部から ) 、 *deriving* 宣言をしてやることができて便利。

```haskell
{-# LANGUAGE StandaloneDeriving #-}

module Main where

data Variables = C Char | S String | I Int | Iex Integer | D Double | F Float
data VarList a = Var a [Variables]

deriving instance Show Variables
deriving instance Show a => Show (VarList a)
```

```haskell
ghci> S "hello"
S "hello"
ghci> Iex 5
Iex 5
ghci> Var "test" [S "aaa", D 5.2, C 'a']
Var "test" [S "aaa",D 5.2,C 'a']
```

# 参考にしたサイト

- [Haskell外部ライブラリの型をShowクラスのインスタンスにしてデバッグを楽にする](http://blog.kzfmix.com/entry/1349904819)

- [本物のプログラマはHaskellを使う - 第15回　Haskellでのデバッグのコツをつかむ：ITpro](http://itpro.nikkeibp.co.jp/article/COLUMN/20071204/288630/)
Intel Edison と ruby で Lチカ

ruby で Lチカさせるのやってみたかった。

# Intel Edison の GPIO
Edison に Breakout Board を装着すると色々な I/O が引き出せるようになります。
GPIO はプログラムで ON/OFF を制御することができるのでソフトウェアで外部に接続した何かを動かすには基本となります。

Breakout Board のマニュアルを見ながらそこにテスト用のコードをハンダ付けしていきます。
今回は GND, GPIOx2, I2Cの2本を選択しました。
![DSC00709.JPG](https://qiita-image-store.s3.amazonaws.com/0/50737/13adcb21-96b8-69e9-14c1-5975cfc1d8c4.jpeg)

```
J19-3 --- GND
J20-7 --- GPIO15
J18-2 --- GPIO165
J18-6 --- I2C_1 SCL
J17-8 --- I2C_1 SDA
```

ここで注意すべき点があります。
Edison で使っているのは高密度な SoC でホビー用の一般的なマイコンと異なりますので、通常のマイコン電子工作とは違って GPIO の電圧が 5V や 3.3V ではありません。Edison のポート電圧は 1.8V となっています。
また電流のドライブ能力も 3mA しかありませんので、この信号で LED を点灯させることはおろかシンク電流としての能力も期待できず LED を直接繋げるのは御法度です。

## GPIO sysfs の基本
Linux のユーザーランドから GPIO を操作する手法としてはグローバルな GPIO sysfs を用いる方法が一般的なようです。Intel のネイティブポートドライバーがあるのかどうか良くわかりません。

GPIO sysfs では GPIO デバイスが /sys/class/gpio/ の中に見えます。
この /sys/class/gpio/ にマウントされたデバイスにファイルシステムとしてアクセスすることで、GPIO の制御ができるようになります。

### ポートを GPIO として利用する
 /sys/class/gpio/ の中を覗いてもまだ gpio15 と gpio165 がいないかもしれません。
まずはポートを GPIO として使用する宣言が必要です。

使用したいポート番号をテキストで /sys/class/gpio/export に書き込みます。

```
echo '165' > /sys/class/gpio/export
echo '15' > /sys/class/gpio/export
```

これで gpio15 と gpio165 が現れます。

### ポートの方向を指定する
GPIO には in と out の二種類があります。
out は CPU からの制御で ON/OFF をピンに出力します。
in はポートにかかっている ON/OFF (を表す電圧)を CPU に読み込みます。
out では LED を光らせたりするのに対し、in ではスイッチが押されたかどうかの検知に使われます。
このポート方向の指定は gpio フォルダ内の direction で指定します。

```
echo 'out' > /sys/class/gpio/gpio15/direction
echo 'out' > /sys/class/gpio/gpio165/direction
```

今回は LED を光らすことが目的なので out しか使いません。

### ポートを ON/OFF する
以上で準備が完了しています。あとは、gpio の value に値を書き込んで制御を行ってください。

```
echo '1' > /sys/class/gpio/gpio15/value
echo '0' > /sys/class/gpio/gpio165/value
```

1を設定するとGPIOポートの電圧が 1.8V になることが計測でわかります。
まずはテスター等で確認してください。

# LEDを光らせたい
次はお待ちかねの LEDチカチカです。
## トランジスタドライバ
Edison の SoC から主力される GPIO は 電圧 1.8V、電流 3mA と微弱なモノです、これで LED を点灯させるわけにはいきませんのでトランジスタで電流電圧増幅をしてやる必要があります。

今回はこんな回路を組みました。
![LED_drive.PNG](https://qiita-image-store.s3.amazonaws.com/0/50737/7a395c27-6c5c-b965-6d2d-1681443d5681.png)

ブレッドボードなりで実装します。
![DSC00711.JPG](https://qiita-image-store.s3.amazonaws.com/0/50737/414f7577-c78a-4a05-a0ee-c19e357f8fc7.jpeg)

最初はGPIOの代わりに 5V を与えて光ることを確認してください。
次に GPIO に繋いだあと、GPIO sysfs をコマンドラインから制御して LED を ON/OFF できることを確認してください。
成功したらほとんど完成です。おめでとうございます。


# ruby でLEDチカチカ

ねんがんの るびーで Lちか が できたぞ

```ruby:ruby_led_flush.rb
def gpio_out(port)
  number = port.to_s
  if !File.exist?("/sys/class/gpio/gpio#{number}") then
    open("/sys/class/gpio/export", "w") do |fp|
      fp << number
    end
  end
  open("/sys/class/gpio/gpio#{number}/direction", "w") do |fp|
    fp << 'out'
  end
end

def led(port, sw)
  code = "0"
  if sw == true then
    code = '1'
  end
  open("/sys/class/gpio/gpio#{port}/value", "w") do |fp|
    fp << code
  end
end

# ---- main
gpio_out(15)
gpio_out(165)

t = Thread.new do
  while(1) do
    led("15", true)
    sleep(0.5)
    led("15", false)
    sleep(0.5)
  end
end

Thread.new do
  while(1) do
    led("165", true)
    sleep(0.8)
    led("165", false)
    sleep(0.8)
  end
end

t.join
```
Dartでゼロ埋めするライブラリを作ったら実は標準APIにあった話

[zero_padding](https://pub.dartlang.org/packages/zero_padding)というライブラリを作りました。GitHubのリポジトリは[こちら](github.com/laco0416/zero-padding)

## Dartにはnum.toString(format)がない
少しDartを書いたことがある方ならわかると思いますが、Dartは数値から文字列へのフォーマッティングをコアから分離しているので時折不便です。例えばこういうことが標準で出来ません。

```dart
10.toString("000") // => "010"
```

## intlパッケージを使う
じゃあどうするかというとStackOverFlowなどでは国際化用の[intl](https://pub.dartlang.org/packages/intl)というライブラリを使う方法が各所で紹介されています。上の例を実現するとこうなります。

```dart
import "package:intl/intl.dart";

void main() {
  var f = new NumberFormat("000");
  print(f.format(1)); // => 001
}
```

intlのNumberFormatは`"000.0"`とか、`"###00.0"`とか指定できて強力で便利なんですが、このフォーマッティングにロケールが影響する（ロケールを反映できる）ので、ライブラリの容量の大半をロケール用のjsonファイルが占めています。デプロイの時とか回線が細いとめっちゃ困ります。

## 作ってみた
なので、シンプルに数値の0埋めだけができるライブラリを作った結果、こういうふうに書けるようになりました。

```dart
import "package:zero_padding/zero_padding.dart";

void main() {
  print(zeroPadding(1, 3)); // => 001
}
```

## 標準APIにあった
ところがこれをpubに公開した後で気づいたんですが、Dart 1.3で`String#padLeft`という関数が追加されていまして、これで完全に互換可能でした。padLeftを使うとこう書けます。

```dart
void main() {
  print(1.toString().padLeft(3, "0")); // => 001
}
```

あれ、作る必要なかったんじゃ……

## ベンチマークで比較
もしかしたら自分の実装のほうが速いかもしれない！と思ってintl、padLeft、俺俺実装でベンチマーク取りました。

```
intl:NumberFormat(RunTime): 30.141817250162013 us.
String.padLeft(RunTime): 0.4253795927968772 us.
my code(RunTime): 5.899635402532123 us.
```

String.padLeft速い！！！！さすがDart！！！！便利なAPIがあるもんだ！！！

## 教訓
ちゃんと標準APIを調べてからライブラリを作ろう。

ちなみにzero_paddingの実装はオリジナルの実装から上のpadLeftの呼び出しに切り替えました。
sshfs メモ


参考: [sshでリモートサーバーをマウント、便利にsshfs - UNIX的なアレ](http://wadap.hatenablog.com/entry/20080603/1212506793)


# マウント

```
$ sshfs user@host:/path/to/remote ~/mount
```

# アンマウント

```
$ umount ~/mount
```
debounceの最初に実行するat_beginフラグ

[jquery-throttle-debounce](https://github.com/cowboy/jquery-throttle-debounce) の debounceは

`$.debounce(250, callback)`

と、普通に書くと連続するイベントの最後にcallbackが実行されますが

`$.debounce(250, true, callback)`

と書けば、最初に実行されます。

[デモ](http://jsdo.it/ksk1015/ml8q)
Intel Edison に ruby をインストール

Intel Edison 上で cruby のソースコードをビルドしてみました。

# Intel Edison でのソフトウェア管理
Edison のパッケージマネージャには opkg が使われています。
既に入っているソフトウェアは
`opkg update`
`opkg upgrade`
で更新されていくのかもしれませんが今のところリポジトリが空っぽな様です。

Edison用のアンオフィシャル(?)な opkg リポジトリは以下のURLです。
http://repo.opkg.net/edison/repo/

/etc/opkg/base-feeds.conf にリポジトリを追加します。

```
src/gz all http://repo.opkg.net/edison/repo/all
src/gz edison http://repo.opkg.net/edison/repo/edison
src/gz core2-32 http://repo.opkg.net/edison/repo/core2-32
```

/usr を含む / はほとんど空き容量が無いためあまりアプリはインストールできないでしょう。
取りあえず私はパッケージから nano をインストールしました。

# ruby をソースからビルドする
パッケージもありますが、ruby をソースコードからビルドしてみます。
理由としてはふたつ

* 私が見たときは opkg の ruby が 1.9 しかなかった(今は 2.1 がリリースされています)
* Edisonという極小コンピューターの上でビルドされる様子を眺めていたい

後者、重要。

/usr を含む / の空きが無いのは深刻な問題なので /home/local を作って --prefix=/home/local 等でそこにインストールするのが良いかも知れません。

wget で ruby のソースをダウンロード、展開後以下の様にコンフィグします。

`./configure --disable-install-doc --with-static-linked-ext`

ドキュメントをインストールする余裕はないので省くとして、ext をスタティックにしているのはなんだかそこで引っかかって上手くビルドできなかったからです。ちゃんと原因は調べておらず暫定対応。

コンフィグが終わったら make です。
2コアなので 3ライン並列化させてあげると効果的かもしれません。

`make -j3`
`make install`

ビルドには2時間くらいかかりますので、その間「がんばれ、がんばれ」と暖かく見守ってやってください。小さな基板の中で gcc が動いているという状況を楽しみましょう。

インストールが終わったら ruby の完成です。
mruby ではありません、フルスペックの cruby です。存分にお楽しみください。

# ※注意、やらないでください

初出時以下の様な記述がありましたが絶対に行わないでください。Edison が起動しなくなります。

```text:やっちゃだめ!!
/usr を含む / の空きが無いのは深刻な問題なので /home/local を作って /usr/local はそこへのシンボリックリンクにしてしまいましょう。
```
/home は /usr より後にマウントするため、起動途中のマウントプロセスで /usr/local/sbin を期待している部分があるとそこでまだ無い /home を参照しようとして不具合となります。

起動しなくなった場合はファームウェアの書き換えによるリカバリしかありませんので注意してください。
Tシャツ画像を自動生成する

# 概要
[mascotboyさんのTEE PARTY](http://teeparty.jp/products/list.php?mode=search&artist_id=205)の、図案や文字の組み合わせでたくさんの似たような種類のTシャツが作られているのが面白いと思いました。

これを真似して、Rubyスクリプトで図案の配置・組み合わせによる画像生成を行ってTシャツを作ることを思いつきました。画像をアップロードするだけでTシャツが販売できる[SUZURI](https://suzuri.jp/)を使って作ったTシャツは[こちら](https://suzuri.jp/oinariman)です。

# 図案

犬の顔の数が違うだけの「[2](http://teeparty.jp/pid/6116)」、「[3](http://teeparty.jp/pid/6115)」、「[4](http://teeparty.jp/pid/6114)」がありますが、同じようなことを2進数で表現することを思いつきました。

[拙作ゲーム](http://mihararyosuke.com/gesuido/ja/)のキャラクターを使って、目を開けていたら"1"、閉じていたら"0"ということにして、こんな感じ:

![0010.png](https://qiita-image-store.s3.amazonaws.com/0/2503/8262fbe7-0890-5c1c-eaf1-9ad315e9893b.png)

4つのロボットの顔で4ビット2進数を表現し、全16種類のTシャツを作りました。

# 方法

SUZURIへアップロードする素材はPNGかJPEGです。Tシャツ用画像のテンプレート(指定サイズの空画像)が用意されているので、そのサイズに収まる画像を作ってアップロードすればよいわけです。

このテンプレート画像にロボットの顔の画像を適宜配置していきます。画像合成にはImageMagickを使いました。画像を拡大したり、指定した位置に貼り付けたりできます。ループ処理とかビットの立っている桁を調べたりとかを、すべてシェルスクリプトでまかなうのには限界を感じたので、RubyでImageMagickを扱えるRMagickを利用しました。

スクリプトは以下です。([Gist](https://gist.github.com/oinariman/9d182b43104562af5630))

```rb

require 'rubygems'
require 'rmagick'

# サイズなど定数
ICON_W = 32
ICON_H = 32
SCALE = 18
Y = 32 * SCALE
GAP = (2520 - ICON_W * SCALE * 4) / 3
W = ICON_W * SCALE
H = ICON_H * SCALE

# base_imageにobj_imageをi個ずれた位置に置く
def stamp(base_image, obj_image, i)
  return base_image.composite(obj_image, Magick::NorthWestGravity, i * (W + GAP), Y, Magick::OverCompositeOp)
end

# 顔画像読み込み、拡大
robot0 = Magick::Image.read('./robot0.png').first
robot1 = Magick::Image.read('./robot1.png').first
robot0.scale!(SCALE)
robot1.scale!(SCALE)

# テンプレート画像読み込み
base = Magick::Image.read('./suzuri-template-tshirts.png').first

# 0〜15まで作る
16.times do |i|
  image = base
  # 4桁分顔を置く
  4.times do |j|
    image = stamp(image, ((i & (8 >> j)) == 0) ? robot0 : robot1, j)
  end
  image.write('./out' + i.to_s + '.png')
end
```

# おわりに

16枚の画像生成は自動化出来ましたが、SUZURIへの画像アップロードから販売開始までは手作業になるので面倒でした。Web APIがあったらいいな、と思いましたが、自動生成ゴミTシャツでサイトが埋め尽くされたりしそうですね。

今回は簡単な画像の配置の組み合わせをしただけですが、Adobeツールを使わないでできました。もっと複雑なこともできそうですね。

以上です。
Unity3DのLoadLevelAsyncとAsyncOperationで非同期ロードを待ってみる

> 本記事の内容を[はてなブログ](https://nanmo.hateblo.jp/entry/2014/11/01/000000)に転記しました。
> すぐにQiitaの記事を削除する予定はありませんが、どちらか一方だけ残すとなったらはてなブログの方を残すと思います。
> ご承知おき下さい。

なんかまとまった情報が見あたらなかったので書いておく。(Unity3D 4.3.7p3)

[Unity - Scripting API: Application.LoadLevelAsync](http://docs.unity3d.com/ScriptReference/Application.LoadLevelAsync.html)

[Unity - Scripting API: AsyncOperation.allowSceneActivation](http://docs.unity3d.com/ScriptReference/AsyncOperation-allowSceneActivation.html)

```csharp
//C#で
//どっかからコルーチンを呼ぶ
IEnumerator LoadNextLevel() {
        AsyncOperation ao = Application.LoadLevelAsync(nextLevelName);
        ao.allowSceneActivation = false;
        while( ao.progress < 0.9f ) {
        //演出などで確実に待ちを入れたい場合は ( ao.progress < 0.9f || 読み込み時間 < 確実に待たせたい時間 ) みたいな感じで判定
                yield return new WaitForEndOfFrame();
        }
        //次のレベルに遷移
        ao.allowSceneActivation = true;
        //ao.isDoneはfalseのまま
        yield return null;
}
```

ドキュメントを読んで、じゃあAsyncOperationのisDone見張ってればいいのかな？　と思ったらisDoneがいつまで待ってもtrueにならない。
progressも0.9f辺りで止まる。
しかたないのでprogressが0.9f以上になったら読み込みが終わってることにしてallowSceneActivationをtrueにする、特に問題はなさそう。
YosemiteにしたらPHPが動かなくなった。

#Yosemiteにバージョンアップしたらphpが動かなくった。

```zsh
% php -v
dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.53.dylib
  Referenced from: /usr/local/bin/php
  Reason: image not found
zsh: trace trap  php -v
```

brewでインストールしていたので、update,upgrate,reinstall,doctorしても変わらず、わからず。

調べていたら、新しいxcodeのコマンドラインツールをインストールするばいいのではないかとあった。

https://github.com/Homebrew/homebrew-php/issues/1181

https://developer.apple.com/downloads/index.action

Command Line Tools(OSX 10.10)for Xcode - Xcode6.1
をダウンロードとインストール

phpを再インストール

```zsh
%brew reinstall php54
```

使えた

```zsh
% php -v 
PHP 5.4.33 (cli) (built: Nov  1 2014 12:00:00)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2014 Zend Technologies
```

OK