OmniAICreator/Qiita-1.07M huggingface dataset:
node.jsの導入

# はじめに

## node.jsってなに？

サーバサイドで動作するJavaScriptです。
大量のリクエスト処理やリアルタイム通信の
処理に優れています。
詳しくはこちらで

<http://gihyo.jp/dev/serial/01/nodejs/0001>

## node.jsの導入にあたり

**nodebrew**という、node.jsのバージョン管理ツールを利用して
インストールを行っていきます。

#### バージョン管理ツール

使用するプログラミング言語のバージョンを簡単に切り替える事が
可能になるツールです。
プロダクト毎に言語のバージョンに依存するコードが必ず存在するので、
プログラミング言語のインストールにはほぼ必須のツールです。

---

# Windows

バージョン管理ツール使うと言っておきながら使いません。
こちらからインストーラをダウンロードして使って下さい。
※バージョン管理ツールが無いわけではないですが、割愛しています。

<http://nodejs.org/>

下記コマンドでバージョン情報が表示されればOKです

```
$ node -v
```

---

# Mac, Linux

## nodebrewをインストール

詳しくは公式を参照ください

<https://github.com/hokaccha/nodebrew>

下記コマンドでインストール

```
$ curl -L git.io/nodebrew | perl - setup
```

## パスを通す

.bashrc等の設定ファイルに以下を加えてパスを通します

```
export PATH=$HOME/.nodebrew/current/bin:$PATH
```

下記コマンドでバージョン情報が表示されればOKです

```
$ nodebrew -v
```

## 最新のnode.jsを確認

下記コマンドでバージョン情報がわかります。
node.jsは2番目の数値が偶数なのが安定板、奇数なのが開発版です。
e.g. `v0.10.26` ←安定板 `v0.11.12` ←開発版

```
$ nodebrew ls-remote
```

## 安定版をインストール

```
# $ nodebrew install-binary [ver]
$ nodebrew install-binary 0.10.32
```

## 使用するnodeのバージョンに設定

```
# $ nodebrew use [ver]
$ nodebrew use v0.10.32
```

以下コマンドを実行して、バージョンが表示されればOK

```
$ node -v
```

## その他

### 使用するnode.jsのバージョンを切り替える

```
$ nodebrew use [ver]
```

### nodebrewにインストールされているnode.jsの一覧を確認する

```
$ nodebrew ls
```
iPhone、iPadのシミュレータに大量の画像を追加する方法


XCode6以上でお手軽にできます

1. シミュレータを起動して、写真アプリを開く
2. 画像をドラッグ&ドロップする
3. おわり！

![Untitled2.gif](https://qiita-image-store.s3.amazonaws.com/0/30441/3ccbe531-e502-1212-2a1f-7a32c9aad9cf.gif "Untitled2.gif")


ちなみにXcode6についているシミュレータならどれでも同じ方法で追加でできます
Yokohama.pm #12 に参加して「Gazelle」について喋ったらその場でサービス投入された話

Yokohama.pm #12で時間頂いたので高速なPlack Handler/PSGI Serverである「[Gazelle](https://metacpan.org/release/Gazelle)」について喋ってきました。

atnd: https://atnd.org/events/58857
blog: http://yokohama.pm.org/2014/11/yokohamapm-12.html

自分の発表のスライドはこちらです。

<iframe src="//www.slideshare.net/slideshow/embed_code/42124794" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="//www.slideshare.net/kazeburo/gazelle-yokohamapm12" title="Gazelle - Plack Handler for performance freaks #yokohamapm" target="_blank">Gazelle - Plack Handler for performance freaks #yokohamapm</a> </strong> from <strong><a href="//www.slideshare.net/kazeburo" target="_blank">Masahiro Nagano</a></strong> </div>

内容は「Gazelleのベンチマーク」「Gazelleが速い理由」などとなっています。「Gazelleが速い理由」として

- HTTP/1.0のみサポートする事で
- XSでの実装
- picohttpparser
- accept4
- writev

などをあげました。GazelleはすでにlivedoorBlogでproductionに投入されており、1日1サーバあたり2500万requestをさばいています。

Gazelleは起動オプションや動作面でStarletと互換性があるので、導入は簡単なので、それほどサービスに高速なAppサーバが必要ないなぁというところでも気軽に試していただけたらと思います．

という、発表をしたところ、次のセッションの中で生OpsでGazelleをサービスに投入するという衝撃的な出来事があったり、yusukebeのLTでもGazelleを試してもらったり、個人的にうれしい Yokohama.pm でした。

今回の Yokohama.pm はなぜかXS成分の多くなって興味深い内容でした。運営のマコピー、参加者のみなさん、会場のカヤックさんありがとうございました！
署名したはずのAndroidアプリがadb installできないときに試してみよう

署名したはずのAndroidアプリを端末に`adb install`しようとしたらなぜかこんなエラーが出てきた・・。

```
4417 KB/s (5418973 bytes in 1.198s)
        pkg: /hoge/fuga/myapp.apk
Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]

```

[こちら](http://feather.cocolog-nifty.com/weblog/2012/10/jdk7install_par.html)の方法を試したらできるようになりました。
署名するときに`jarsigner`のオプションに`-sigalg MD5withRSA -digestalg SHA1`を付けたらよいようです。
※ 2016.08.22追記： 最新のものではオプションの指定方法が少し異なるようです。 [comment-08a24c55bd18bf125c38](http://qiita.com/hishida/items/8ab56f4780fbfaf4811f#comment-08a24c55bd18bf125c38)

あまり詳しく調べてないですが、JDK7ではこのオプションを付ける必要があるとのこと。
でも今回はインストールする端末を変えたらなぜか発生しました・・。

※ 参考にしたサイト
・ [JDK7では署名アルゴリズムが変更になっているためINSTALL_PARSE_FAILED_NO_CERTIFICATE エラーが発生してapkがインストールできない: 発火後忘失](http://feather.cocolog-nifty.com/weblog/2012/10/jdk7install_par.html)
・ [JDK7でAndroidアプリをリリースビルドする方法 — KaoriYa](http://www.kaoriya.net/blog/2012/05/10/)
mBaasから日付を条件にデータを検索する


日付での検索にやたら手間取ったので以下にメモ。
然し本当にgroup_byとかできないんだろうかmBaas……(´@ω@｀)

mBaasとは:[@nifty mobile backend](http://mb.cloud.nifty.com/)
想定する動作:今週アップデートされたデータを取得する

## 今週日曜日（週初め）の日付を取得する

```week.java
	DateTime now=DateTime.now();
	DateTime sunday=now.minusDays(now.getDayOfWeek());

	// ちなみに週末土曜日はsundayに7日足せば出てくる
	// DateTime saturday=sunday.plusDays(7);
```

## 日付型として処理するため連想配列形式に変換

```week.java
	sdf=new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss.SSS'Z'");
	
	NCMBQuery<NCMBObject> query = NCMBQuery.getQuery("data");
	
	String updateDate=sdf.format(sunday.toDate());
	
	// 連想配列の作成（JSONへの変換はNCMBQuery内で行われている気がする）
	HashMap<String,String> sundayDate=new HashMap<String, String>();
	sundayDate.put("__type", "Date");
	sundayDate.put("iso", updateDate);

	query.whereGreaterThanOrEqualTo("updateDate", sundayDate );

```

updateDateはmBaasでクラスを作成すると最初からいるやつで、データの更新の際何もしなくてもtimestampみたいに持っていてくれるカラムです。
形式がyyyy-MM-ddThh:mm:ss.SSSZとたいへんややこしいうえ、ただこの形でwhereGraterThanOrEqualToしても引っかかってくれず、条件外してデバッガ回してデータ見比べてようやくこの形に。

もっとスマートな書き方（というか正しい書式）があるのかもしれませんが、取り敢えずこれでヽ(´@ω@｀)ﾉ
SublimeText3 Plugin+Markmon+PandocでMarkdownをHTMLリアルタイムプレビューする


Sublime上でシンタックスハイライトをしてMarkdownのマークアップが上手く出来ているか確認することができますがそこはやはり人の子。HTMLで確認したい、CSSをこちらで指定したい、という欲求が生まれます。そしてHTMLで確認できるなら、リアルタイム反映をして欲しいというのが欲求の筋でしょうｗ

ここでは、SulimeText3でMarkdownをリアルタイムHTMLプレビューする方法をご紹介します。

※本記事で確認したのはMac（Yosemite）& SublimeText3です。

## Plugin
[Markmon real-time markdown preview](https://sublime.wbond.net/packages/Markmon%20real-time%20markdown%20preview)というプラグインを使います。
このプラグインを利用するのに、Markmon、Pandocをインストールが必要です。

### Markmon
まずは[Markmon](https://github.com/yyjhao/markmon)をインストールします。node.js製なので、node.jsが未インストールの方は先にインストールして下さい。（ここでは割愛します）

```bash
$ npm install -g markmon
```

ちょっとだけ公式を覗くと、コマンドラインでのmarkmonの使い方が書いてあります。
> Usage: node ./bin/markmon [filename] --port [num] --command [string] --view [string] --projectdir [path] --stylesheet [path] --help
> 
> Options:
>   --port        Port to listen to                                                 > [default: 3000]
>   --command     Command to parse markdown to html                                 > [default: "pandoc --mathjax -N -t HTML5"]
>   --view        Command to execute after the server is setup
>   --projectdir  Root directory of your project, useful for local image resources
>   --stylesheet  Path to your custom stylesheet
>   --help        Get this help message

これはわかりやすいですね。
ファイルを指定して、ローカルサーバを立ち上げてくれるようです。

### Pandoc
ちなみにこのMarkmonの動作にPandocが必要のようです。
色々インストール方法があるみたいですが、僕は[cask](http://caskroom.io/)でインストールしました。

```bash
$ brew cask install pandoc
```

さて、準備が終わりました。
これらをSublimeText3のプラグインから操作しよう、ということになります。

### SublimeText3のPlugin
[Markmon real-time markdown preview](https://sublime.wbond.net/packages/Markmon%20real-time%20markdown%20preview) をPackageインストールで導入します。
（Packageインストールのやり方はここでは割愛します。）

そしてMarkdownのファイルを開き、`Tools > markdmon > launch` を選びます。

するとブラウザが立ち上がります。そして開いているマークダウンをいじるとリロードも必要なくリアルタイム編集が可能になります！
意外と楽でいいですね。

### CSSの指定方法など
SublimeText3のメニューの、`Preferences > Package Settings > markmon > Settings - User` をみると設定ファイルが空っぽなので、[markmon公式の設定ファイル](https://github.com/yyjhao/sublime-text-markmon/blob/master/sublime-text-markmon.sublime-settings)を真似しましょう

```json
{
    //On Windows try "markmon.cmd" if you get errors.
    //If markmon is not on your path you'll need to use a full path to it
    "executable": "markmon",
    "port": 3002,
    "command": "pandoc -t HTML5 --mathjax",
    "stylesheet": null,
    "projectdir": null
}
```

設定の内容は、markmonコマンドとだいたい同じですね。
`stylesheet`あたりに自作のmarkdonwスタイルシートのパスを書きます。

### シンタックスハイライト
僕はこれで十分満足なのですが、やはりSublimeText3側でシンタックスハイライトすると更に最強感がでます。

* [MarkdownEdit](https://sublime.wbond.net/packages/MarkdownEditing)
* [Markdown Extended](https://sublime.wbond.net/packages/Markdown%20Extended)

あたりがインストールが楽でオススメです。Packageコントロールからインストールします。

### 自分のmarkdownのCSSがないならば・・！
Bootstrapのように、markdown用のCSSを検索して見つけることが出来ます。ご参考までに。

* [github-markdown-css](https://github.com/sindresorhus/github-markdown-css)
* [markdown-css-themes](http://jasonm23.github.io/markdown-css-themes/)

自作するのもいいですね！！
gitのリモートブランチを一括で整理する

git-flowを使ってるけど、コマンド使ってない人や急ぎの修正でゴミブランチが溜まるので、マージ済みやつ一回で消すやつ用意した。

<code>
git branch -r --list --merged | grep -v '*' | grep -v 'master\\|develop' | awk '{ print $1 }' | sed -e 's/origin\///' | xargs -I % git push origin :%
</code>

使用する場合は注意して下さい！
pushする前に対象テーブルが問題ないかチェックする。
<code>
git branch -r --list --merged | grep -v '*' | grep -v 'master\\|develop' | awk '{ print $1 }' | sed -e 's/origin\///'
</code>

やっと後はチームに通知
git remote prune origin
git fetch --prune
Blendarで作成したモデルをvuforiaで読み込める形式で出力する１つの方法


自分向けのメモです。


[このサイト](http://heikobehrens.net/2009/08/27/obj2opengl/)にあるobj2openglを利用して、objファイルをheaderファイルに変換する。


たぶん他に色々な方法があると思います。
インターネット詩ガイド

詩を読むことは、詩を書くことだ。詩を読むことは、詩にあるまなざしを受け継いで、ぼく自身の眼で目の前のできごとを見つめることだ。ぼくたちは自分の物語を生きながら、他人の物語と交わりながら、詩を書きつづけている。誰かの詩を受け取り、誰かへ詩を渡しつづけている。日記を書いたっていい。誰かへ送るわけでもなく手紙を書いたっていい。そんなふうに、自分が自分のために書く言葉があっていい。ひとりよがりな詩を書くことだって、ぼくのまなざしを手に入れるためにはじゅうぶんに役に立つからだ。日記を書くことは、手に入れたまなざしを、詩としてぼくの分身にして、ぼくたちの物語にさすらわせるためのひとつの方法だからだ。

詩はささやかなものだから、道ばたに落ちているようなものだから、ぼくたちの物語に溶けていて気がつかないこともある。気がつかないことのほうが多いのかもしれない。そこで、ぼくが最近これは詩なのではないか、誰かが別の誰かに向けた言葉ではなく、誰かが自身のために書いた言葉ではないか、と感じたものを紹介したい。これらの言葉が詩であるかどうかは別として、読んだときにぼくのなかではたしかに何かが巻き起こったのだ。

## 自分が書かなければおそらく誰かが書く日記

* http://darekagakaku.herokuapp.com/

> ところが車はそろそろと止まり、横を見るとウインドウが下り彼女は手を振っていた。私は「アッ」とも「オッ」ともつかぬ叫びを漏らして、ぎこちなく手を振り返した。車が通り過ぎたあとも私はひとりできちがいみたいに「アッ」など繰り返していた。
> http://darekagakaku.herokuapp.com/v/2013-03-28

## 最果タヒ

* http://booklog.jp/item/1/4898153895
* http://tahi.tumblr.com/
* http://tahi.jp/shooting/

> とうきょうのまちでは赤色がつらなるだけの夜景が見られるそうです。まだ見ていないなら夜更かしをして、オフィスの多い港区とかに行ってみてください。赤い夜景、それは故郷では見られないもの。それを目に焼き付けること、それが、きみがもしかしたら東京に、引っ越してきた理由なのかもしれない。
> http://tahi.tumblr.com/post/75888420634

## ヌケメ帽

* http://nukeme.nu/tagged/NUKEMECAPS
* http://nukeme.thebase.in/

> 動物の引退パーティー
> http://nukeme.thebase.in/items/283762

## アリかナシかの なしの です

* https://twitter.com/nasino__

> わたしのこと好きな人の好きをかき集めれば なんとか多 分一人分ぐらいに ギリギリだけど なると思うから それで人間をつくって その人とずっと一緒にいたい
> https://twitter.com/nasino__/status/507145808488054784

## BACONTXT エミネム最高の日記

* http://bacon-index.tumblr.com/TXT

> 5分後。団地棟の前の階段に座って、一人がタバコをちぎり始めたのを、横で見てると、手際よく巻紙に大麻とタバコの葉っぱを混ぜ合わせて残したタバコのフィルターと接続し、もう一人が最近のスネア連打しまくる地元のラップをケータイから流しはじめて、何なんだこれはと思いながら団地の人たちがいっぱい集まってきて、何を言ってるのか分からないけど、その人たちを一人ずつ紹介してもらって全員と握手してたら、かわいい女の子もいた。かわいかった。そして、みんなここで生活しているんだと思って、自分だけ1人ふわふわしながら朝になった。
> http://bacon-index.tumblr.com/EU05

## to

* http://to.tumblr.com/

> 撮る人、撮られる人、関係。人の、例えば日本に住む人の、心が、あそこまで戻ることがあるか。その場所に、その人(撮影者/対称)に、適した道具、カメラがある。よく消える。。僕の心がおかしくなっているのか。普通でないものを出してもいいのか。そういうがさつさに耐えられるのか。このまま、弱い光の世界が続くのか。
> http://to.tumblr.com/post/73701702622

## 内海桂子師匠

* https://twitter.com/utumikeiko

> 石原裕次郎さんは結婚前に奥様に相当な恋文を送っていたそうな。キスとか抱擁とかの熱い言葉も使われていた。私も彼からもらった文の量は相当なもので一年もたたない間に３００通も来た。それも最後の一通以外は全部米国からのもの、但し好きだどうだという文章は皆無で私からの返信は一通のみだった。
> https://twitter.com/utumikeiko/status/518770470649221123

----

この記事は Pepabo Advent Calendar 1日目の記事として、2014年11月13日にペパボの社内向け LT 大会で発表した内容を再録しました。

明日は @kenchan@github さんです。
<<error type>>ってなんなんだろう.

![スクリーンショット 2014-12-01 11.01.23.png](https://qiita-image-store.s3.amazonaws.com/0/60178/52f3f8da-ac5a-d398-15cc-409c2c131015.png)

--------------------------------------

xcodeをアップデートすると解決しました。

--------------------------------------
imgタグとか css の background とかで画像を指定しても、ブラウザで画像が表示されない場合

パーミッションがおかしいことが多かったです。
すごい単純なのですが、割りと面倒くさい件です。

```zsh
$ ll
$ ls -la
```

↑なコマンドでパーミッションを確認します。

```zsh
drwxr-xr-x  10 hoge  staff     340 12  1 13:47 ./
drwxrwxrwx   3 hoge  staff     272 12  1 10:39 ../
-rw-r--r--@  1 hoge  staff    6148 12  1 13:05 .DS_Store
-rw-r-----@  1 hoge  staff  469114 11 30 03:21 hyoujisarenai.jpg
-rw-r--r--@  1 hoge  staff  469114 11 30 03:21 hyoujisareru.jpg
```

hyoujisarenai.jpgは表示されず、hyoujisareru.jpgは表示されます。
所有者にはread,write, グループにはreadが設定されていますが、それ以外にはなんにも設定されていません。

なので、

```zsh
$ chmod 644 hyoujisarenai.jpg
```

で、表示されるようになるかと思います。

# パーミッションについて

詳しくはこちら
http://www.wakhok.ac.jp/~kanayama/summer/02/site/node194.html
（マイナー）言語の世界

1日目が空いていたので、イントロダクションやります。

# 無数の言語

プログラミング言語は[沢山あります](https://en.wikipedia.org/wiki/List_of_programming_languages)。こんなに沢山あると、初学者は何からプログラミングを学び始めたらよいのか困ってしまいますね。ですが、ある程度メジャーどころの言語というのは決まっていて、普通はそれを勉強すればいいはずです。具体的には何をやればいいのか、そういう記事はもう[Webに既にあるようです](http://thinkit.co.jp/book/2011/04/13/2083)。

# なぜ人はマイナー言語を求めるのか

マイナー言語を求める（作る、あるいは使う）動機はなんでしょうか。それこそ言語の数だけあるのかもしれません。私が考えた動機を挙げてみます。

* 好きな構文を使いたい
* 既存の言語の機能のいいとこ取りをしたい
* 新しいやり方・考え方（[プログラミングパラダイム](https://ja.wikipedia.org/wiki/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%83%91%E3%83%A9%E3%83%80%E3%82%A4%E3%83%A0)）のプログラミングを試したい
* プログラムを特殊な環境・条件で動かしたい
* 今までプログラミングに縁がなかった人にアプローチしたい
* （自分の）世界を築きたい

# マイナー言語の学び方

マイナー言語はドキュメントが極端に少ないことが多いです。ベースとなる言語がある場合には先にそちらを勉強してから取り組む、類推と想像力と勘を働かせてなんとかする、処理系のソースコードを読むといった方法が考えられます。

# （マイナー）言語

今日のメジャーなプログラミング言語も、最初は世界で限られた人間が使う、マイナーな言語だったのでしょうし、かつてメジャーだったのに、今日ではほとんど話題にならない言語もあります。（単に話題にならないからマイナーに見えるだけで、実際は今日でも多く使われているかもしれません。）マイナーじゃなくてむしろメジャーかも、と思うような言語も、このカレンダーで取り上げるは“あり”だと私は思います。

# マイナー言語 Advent Calendar 2014 はじまります

去年の[マイナー言語 Advent Calendar 2013](http://qiita.com/advent-calendar/2013/minor-language)でも、色々な言語が紹介されました。今年はどんなマイナーな言語が紹介されるのでしょうか。楽しみにしています。

2日目は @jonigata さんです。よろしくお願いします。
[小ネタ] アカウント情報に関するちょっとした注意点

# この文書はなに？

http://qiita.com/advent-calendar/2014/softlayer
http://qiita.com/advent-calendar/2014/softlayer2

に参加するのに書いたものです。是非、他のURLもご参照ください！

# SoftLayer で登録するアカウント情報について
SoftLayer では、アカウント登録時に

* 氏名
* 住所
* メールアドレス
* 電場番号

などを登録します。

# SoftLayer で割り当てられるアドレスサイズ

SoftLayerの特徴とも言えるかと思いますが、グローバルIPアドレスは直接仮想マシンのNICに割り振られます。このためか、アドレスサイズとしては、/29 が割り当てられます

# whois への反映
一般的に/29 の割り当てでは、割り当てた組織情報を whois に登録する義務があります。このため、SoftLayer では、事前に登録された

* 氏名
* 住所
* メールアドレス
* 電場番号

を whois 情報に反映させます。

# 登録情報の変更
whois への登録情報は、コントロールパネルから変更が行えます。

Network >> IP Management >> RIR Registration >> 'Add Person record' を実行し、公開情報を追加もしくは修正します。

その後、修正したい subnet の "Actions"から "Edit Registration" を実行すると、先ほど追加した Person record が選択できるようになっているので、そちらに変更します。


```
person:         Koichi KUNITAKE
address:        99-99 Shinbashi
                Minato-ku Tokyo  XXX-XXXX JP
country:        JP
phone:          +81-90-YYYY-YYYY
e-mail:         koichi@example.jp
mnt-by:         MAINT-SOFTLAYER-AP
nic-hdl:        KK1139-AP
changed:        ipadmin@softlayer.com 20140829
abuse-mailbox:  abuse@example.jp
source:         APNIC
```

上記のように、管理者のメールアドレスと、abuse 宛のメールアドレスとはわけることが可能です。実際の whois database への反映は、概ね 5〜10分もあれば反映されるようです。

# まとめ
SoftLayer では、基本的に whois にアカウント情報が公開されます。なので、なにを登録し、公開するのかには、十分注意しておきましょう。

> 内容に誤りがあったら教えて下さい！
JenkinsでGitのshallow cloneの設定


## shallow cloneとは

デプロイなど最新のソースだけを取得したい場合、`git clone`するとすべての履歴を取得するため、時間がかかるし無駄が多い。`--depth`で取得したい履歴の数を指定することで最新版のみを取得できる。

```bash
$ git clone --depth 1 git@github.com:foo/bar.git
```

## JenkinsのGitプラグインでshallow cloneの設定

JenkinsのGitプラグインも1.1.23からshallow cloneに対応している。

1. JenkinsのJOB設定画面から「ソースコード管理」->「Git」を選択
2. 「Additional Behaviours」の「追加」から「Advanced clone behaviors」を選択
3. 「Shallow clone」にチェックを入れる

![SS 2014-12-01 13.40.31.png](https://qiita-image-store.s3.amazonaws.com/0/10729/75e4f59f-8a6e-e4bf-c45b-5cb1d2147fb2.png "SS 2014-12-01 13.40.31.png")


## 参考URL

* [Git - git-clone Documentation](http://git-scm.com/docs/git-clone)
* [Git Plugin - Jenkins - Jenkins Wiki](https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin)
float で横並びさせてリストを中央揃え（センタリング）させる方法

割りと簡単です。

# html

```html
<div class="hoge">
  <ul>
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
  </ul>
</div>
```

↑こんな感じのhtmlを想定します。

# css

**position: relative;** を使います。

大枠の要素(別にdivでもpでも他でも大丈夫)から指定していきます。

```css
.hoge {
  position: relative; 
  overflow: hidden; /* 下のulのcssでリスト全体を右に50%移動しているので、その分幅が広がってしまいスクロールバーが表示されてしまいます。それを防ぐ為の設定です。 */
}

.hoge ul {
  position: relative;
  left: 50%; /* リスト全体であるul要素を右に50%移動。つまり先頭を中央に持ってくる感じです。 */
  float: left;
}

.hoge ul li {
  position: relative;
  left: -50%; /* 各リスト項目になるli要素を左に50%移動。 */
  float: left;
  list-style: none; /* 項目にぼっちを出したくない場合はこれを設定（今回はあんまり関係ないですが） */
}
```

これで終わり。

# References

http://hail2u.net/blog/webdesign/centering-floated-list.html
`parse': (<unknown>): control characters are not allowed at line 1 column 1 (Psych::SyntaxError)

自分で書きだしたYAMLを読み込もうとしたら

```
`parse': (<unknown>): control characters are not allowed at line 1 column 1 (Psych::SyntaxError)
```

なエラーが出て困った。

### 解決札

`language-pack-ja`が入ってないのが原因だったので `apt`で入れる。

自分の場合は`chef`で環境設定をしてるので `base`という名前の`cookbook`作って

```.rb
apt_package 'language-pack-ja' do
  action :install
end
```

としてます。
[iOS8] Swiftで数字の桁数をゼロ埋めする方法

swiftで表示桁数を合わせたい時に、空いている桁にゼロを埋める方法をサンプルコードを利用して説明していきます。

以下、サンプルコードと出力結果になります。
<pre class="lang:default decode:true " title="Sample.swift">


// [整数]を0埋めする：4桁指定
let d1 = NSString(format: "%04d", 1)       // -> 0001
let d2 = NSString(format: "%04d", 11)      // -> 0011  


// [少数]を0埋めする：4桁指定
let f1 = NSString(format: "%0.4f" , 0.1)   // -> 0.1000
let f2 = NSString(format: "%0.4f" , 0.11)  // -> 0.1100  



// [整数+少数]を0埋めする：8桁に揃える
// 少数点も桁数の１つして数える
let df1 = NSString(format: "%09.4f" , 1.1)      // -> 0001.1000
let df2 = NSString(format: "%09.4f" , 11.11)    // -> 0011.1100  

// マイナスも桁数の１つして数える
let df3 = NSString(format: "%010.4f" , -1.1)    // -> -0001.1000
let df4 = NSString(format: "%010.4f" , -11.11)  // -> -0011.1100  

// [整数]を0埋めする(少数は0埋めしない)：8桁指定
let df5 = NSString(format: "%010.1f" , -1.1)    // -> -0000001.1
let df6 = NSString(format: "%010.2f" , -11.11)  // -> -000011.11  



</pre>


【注意】
マイナスや、少数点も桁数に含まれるため注意しましょう。
[iOS8] Swiftで文字列を任意の文字列によって分割する方法(componentsSeparatedByString)

Swiftで文字列を任意の文字列によって分割する方法をサンプルコードを使って説明していきます。

使用する関数は、<strong>componentsSeparatedByString</strong>です。

<strong>[制約条件]</strong>
・分割に使った文字は削除される
・指定は””での一括りのみ、文字数制限なし
・先頭（もしくは末尾）の1文字目が分割対象内に存在する場合は、空の配列になる

&nbsp;
<h2>カンマ区切りで配列に格納（csvファイルなど）</h2>
<pre class="lang:swift decode:true">let str2 = "apple, orange, peach, banana"
let arr2 = str2.componentsSeparatedByString(", ")

println(arr2[0])   // apple
println(arr2[1])   // orange
println(arr2[2])   // peach
println(arr2[3])   // banana
</pre>
&nbsp;
<h2>指定文字が先頭（末尾）場合の配列は空になる</h2>
<pre class="lang:swift decode:true ">let str3 = "Hello World!"
let arr3 = str3.componentsSeparatedByString("Hello")
println(arr3[0])  // 空の配列
println(arr3[1])  // "World!"</pre>
[iOS8] Swiftで異なる型の値を持つタプル(tuple)の利用方法

<h3>タプルとは</h3>
複数の異なる型のオブジェクトを持つ事を指します。他のプログラミング言語でもタプルはありますよね。今回はswiftでのタプルの機能をサンプルコードで見ていきたいと思います。
&nbsp;
<h2>値を取得する</h2><h3>1.プロパティ</h3>
宣言した順に、0, 1...のプロパティが付与されます。そのプロパティを指定することで値を取得できます。
<pre class="lang:swift decode:true ">let tup = (1, "two")
let one = tup.0  // 1
let two = tup.1  // two

println(tup)     // 1, two
</pre>
&nbsp;
<h3>2.代入</h3>
同じ値の個数をもつ変数を宣言することで代入できます。また、「 _ 」で代入をスキップできます。
varの場合、プロパティ指定で値を入れ替えられます。
<pre class="lang:swift decode:true ">var tupp = (1, 2.3, "three", true)

let (_, two, _, four) = tupp
println(two)    // 2.3
println(four)   // true

tupp.3 = false
println(tupp)   // 1, 2.3, "three", false</pre>
&nbsp;
<h3>3.名前</h3>
タプルには名前を付加できます。名前に意味をもたせることでよりコードが見やすくなります。
<pre class="lang:swift decode:true ">let square = (width:10, height:20, name:"square")

println(square.width)    // 10
println(square.height)   // 20
println(square.name)     // "square"
println(square)          // 10, 20, square
</pre>
&nbsp;
<h2>関数への代入（letのみ,varはエラー）</h2>
<pre class="lang:swift decode:true  ">let square  = (10, 20, "square")

func printSquare(width:Int, height:Int, name:String){
    println(" \(name) : width + heght = \(width + height) ")
}

printSquare(square)     // square : width + heght = 30
</pre>
&nbsp;
[iOS8] SwiftでDictionaryの値を削除する方法（removeValueForKey）

Swiftで辞書の値を削除する方法をサンプルコードを利用して説明します。
値を削除したいだけの場合、keyにnilを代入することで削除可能です。
<pre class="lang:swift decode:true ">var dictionary    = ["one": 1, "two": 2, "three": 3]  // ["one": 1, "two": 2, "three": 3]
dictionary["one"] = nil                               // ["two": 2, "three": 3]
</pre>
削除する値を取得したい場合は、removeValueForKeyを利用します。
<pre class="lang:swift decode:true">let previousValue = dictionary.removeValueForKey("two") 
println(dictionary)      // ["three": 3]
println(previousValue)   // Optional(2)
</pre>
&nbsp;
[iOS8] Swiftで文字列を不等号を使って比較する方法

Swiftで文字列を不等号を使って比較する方法をサンプルコードを利用して説明します。
比較する文字列には3つのパターンがそれぞれ、条件が異なります。
<h2>1. 文字列だけの比較（数字を含まない）</h2>
大文字と小文字も一致しないといけません
<pre class="lang:swift decode:true">let str     = "Hello !"                 // "Hello !"
let str2    = "He" + "llo" + " " + "!"  // "Hello !"
let str3    = "he" + "llo" + " " + "!"  // "hello !"
let result  = str  == str2              // "true"
let result2 = str2 == str3              // "false"
</pre>
&nbsp;
<h2>2. 数字だけの文字列の比較</h2>
数字だけの文字の場合は数学的な比較をします。
マイナスも判定できます。
<pre class="lang:swift decode:true ">let str10   = "10"            // "10"
let str20   = "20"            // "20"
let result  = str10 &lt; str20   // true

// マイナス
let str_20  = "-20"           // "-20"
let result2 = str_20 &lt; str10  // true
</pre>
&nbsp;
<h2>3. 数字を含む文字列の比較</h2>
数字を含む文字列は、エクセルでフィルターをかけた時と同じように比較されるようです。

サンプルコードを見てみましょう。
<pre class="lang:swift decode:true">let a200   = "A 200"
let num    = "Number"
let num1   = "Number 1"
let num10  = "Number 10"
let num100 = "Number 100"
let num2   = "Number 2"

let result = a200   &lt; num    &amp;&amp;  // true
             num    &lt; num1   &amp;&amp;
             num1   &lt; num10  &amp;&amp;
             num10  &lt; num100 &amp;&amp;
             num100 &lt; num2</pre>
エクセルで整理したイメージ図です。

<img class="alignnone wp-image-565 size-full" src="http://tech.eversense.co.jp/wp/wp-content/uploads/2014/11/a158823af7745c21e8f43d4ab0cbcd5b-e1415937965950.png" alt="スクリーンショット 2014-11-10 20.10.06" width="186" height="189" />

&nbsp;
<h2> 参考までに</h2>
<h3>平仮名、カタカナ、漢字も検証しました</h3>
結論、「 数字  &lt;  アルファベット  &lt;  ひらがな  &lt;  カタカナ  &lt;  漢字 」の関係でした。

サンプルコードを記載します。
<pre class="lang:default decode:true ">let number   = "1"
let alphabet = "a"
let hiragana = "あ"
let katakana = "ア"
let kanji    = "漢字"

let result   = number   &lt; alphabet &amp;&amp;  // true
               alphabet &lt; hiragana &amp;&amp;
               hiragana &lt; katakana &amp;&amp;
               katakana &lt; kanji</pre>
[iOS8] Swiftで文字列の接頭・接尾が任意の文字列と一致しているか確認する方法

Swiftで任意の文字列の数をカウントする方法をサンプルコードを利用して説明します。
・本サンプルは配列の文字列を検索対象としています
・方法としては２通りあり、以下の関数を利用します

hasPrefix：接頭が一致 =&gt; true
hasSuffix：接尾が一致 =&gt; true

まず、検索対象となる配列 chargeを生成します。
<pre class="lang:swift decode:true">let charge = [
    "Yamada: Japanese: Monday",
    "Yamada: English:  Tuesday",
    "Yamada: Math:     Wednesday",
    "Tanaka: Japanese: Thursday",
    "Tanaka: English:  Friday"
]</pre>
&nbsp;
<h2>hasPrefix：接頭が一致</h2>
大文字、小文字も一致しないといけません  
<pre class="lang:swift decode:true">var yamada_Count      = 0 // yが大文字の"Yamada"を検索
var yamadaSmall_Count = 0 // yが小文字の"yamada"を検索

for subject in charge {
    if subject.hasPrefix("Yamada") {
        ++yamada_Count      // "3"
    }
    if subject.hasPrefix("yamada") {
        ++yamadaSmall_Count // "0"
    }
}
</pre>
先頭から１文字ずつ判定していきます  
<pre class="lang:swift decode:true">var ya_Count   = 0    // "ya"を検索
var yama_Count = 0    // "yama"を検索

for subject in charge {
    if subject.hasPrefix("Ya") {
        ++ya_Count    // "3"
    }
    if subject.hasPrefix("Yama") {
        ++yama_Count  // "3"
    }
}</pre>
&nbsp;
<h2>hasSuffix：接尾が一致</h2>
hasPrefixと同じ性質を持ち、接尾から判定していきます  
<pre class="lang:swift decode:true">var monday_Count = 0 // "Monday"を検索
var day_Count    = 0 // "day"を検索

for subject in charge {
    if subject.hasSuffix("Monday") {
        ++monday_Count  // "1"
    }
    if subject.hasSuffix("day") {
        ++day_Count     // "5"
    }
}</pre>
&nbsp;

&nbsp;
PhoneGap リンクをブラウザで開く

##概要
PhoneGapでHTMLのまま、aタグでのリンクやwindow.openでリンクをするとアプリ内で開いてしまい戻れません。
OS標準のブラウザで開けるようにします。

##コード
まず、PowerShell から以下のコマンドで、プラグインを追加します。

```
phonegap plugin add org.apache.cordova.inappbrowser
```

HTMLリンクは target を _system にすればOK。

```html:html
<a href="http://www.google.com/" target="_system">LINK</a>
```

JSの場合は、以下。

```js:js
window.open("http://www.google.com/","_system","");
```
[iOS8] Swiftで配列をソート（昇順・降順・逆さま）する方法

Swiftで配列をソートしたい時に役立つ関数を、サンプルコードを利用して説明します。
以下、３通りのソートサンプルコードです。

・昇順
<pre class="lang:swift decode:true">var arr = [3, 2, 5, 1, 4, 0] // [3,2,5,1,4,0]
arr.sort { $0 &lt; $1 }         // [0,1,2,3,4,5]</pre>
・降順
<pre class="lang:swift decode:true">var arr = [3, 2, 5, 1, 4, 0]  // [3,2,5,1,4,0]
arr.sort { $1 &lt; $0 }          // [5,4,3,2,1,0]
</pre>
・逆さま
<pre class="lang:swift decode:true">var arr = [3, 2, 5, 1, 4, 0]      // [3,2,5,1,4,0]
let reversedArray = arr.reverse() // [0,4,1,5,2,3]
</pre>
[異なる点]
昇順と降順
・配列の値を比較して整理されます。
・配列自身をソートします。

逆さま(reverse)
・key(id)によって値が入れ替えられます。
・ソートは新規の配列に入れられます。
[iOS8] Swiftで全文字列を小文字・大文字に変換する方法

Swiftで文字列を小文字・大文字に変換する方法をサンプルコードを利用して説明します。


大文字に変換：uppercaseString
<pre class="lang:swift decode:true">let str      = "ABcdefg"           // "ABcdefg"
let bigStr   = str.uppercaseString // "ABCDEFG"
</pre>
小文字に変換：lowercaseString
<pre class="lang:swift decode:true ">let str      = "ABcdefg"           // "ABcdefg"
let smallStr = str.lowercaseString // "abcdefg"</pre>
timecop 使ってみた

rspec で時間を操作したかったので [delorean](https://github.com/bebanjo/delorean) を使おうとしたけど、[timecop](https://github.com/travisjeffery/timecop) のほうが機能も多いし、GitHub の Star も 400 対 1500 だし、delorean 全然アクティブじゃないし、ってことで timecop 試してみました。

（書いてある内容は readme とほぼ一緒です。）

# 感想
timecop いいんじゃないでしょうか。delorean もそんなに使ったことあるわけじゃないのであんまり比較できないですが。そして delorean って名前のほうがいけてるけど。

freeze、scale は delorean にはない機能っぽい。scale なんかは実際に時間を進行させたうえでテストしたいときに便利。

# 機能

## travel
指定した時間に移動する。移動したあとも時間が進む。

```ruby
Time.now
=> 2014-12-01 10:46:12 +0900

# 指定した時間に移動
Timecop.travel(Time.now + 1.years)
=> 2015-12-01 10:46:23 +0900

Time.now # その後も時間が進み続ける
=> 2015-12-01 10:46:29 +0900

# もう一度 travel すると、これまでの分も累計して移動
Timecop.travel(Time.now + 1.years)
=> 2016-12-01 10:46:31 +0900

```

## freeze
指定した時間で時を止める！ザ・ワールド

```ruby
Time.now
=> 2014-12-01 10:59:17 +0900

# 今度は過去に移動して、時間を止める
Timecop.freeze(Time.now - 6.months)
=> 2014-06-01 10:59:30 +0900

# いくら時間がたっても
sleep(5)

# 時間が変わらない！
Time.now
=> 2014-06-01 10:59:30 +0900

# こちらも累計して移動できる
Timecop.freeze(Time.now - 6.months)
=> 2013-12-01 10:59:30 +0900
```

## scale
時間の進み具合を調整できる。現実に 1 秒進むごとに何秒進んだことにするかを係数で指定できる。

```ruby
# 1 秒進むごとに 60 * 60 = 3600 秒 = 1 時間進んだことにする
Timecop.scale(3600)

Time.now
=> 2014-12-01 12:54:42 +0900

# ほんの数秒で半日すすんだ！
Time.now
=> 2014-12-01 23:02:51 +0900
```

# return
timecop の影響を取り消す。

```ruby
Timecop.freeze(Time.now + 100.years)

Time.now
=> 2114-12-01 11:09:23 +0900

Timecop.return

Time.now
=> 2014-12-01 11:09:30 +0900
```

## safe_mode
ブロックの中でのみ timecop の影響が出るようにする。

```ruby
# safe mode を有効にする
Timecop.safe_mode = true

# 有効になっていることを確認
Timecop.safe_mode?
=> true

Timecop.freeze(Time.now + 100.years) do
  # 1. 時間が移動する
  Time.now # => 2114-12-01 12:47:38 +0900
  
  Timecop.freeze(Time.now + 100.years) do
    # 2. さらに移動する
    Time.now # => 2214-12-01 12:47:38 +0900
  end
  
  # 1 の段階まで時間がもどる
  Time.now # => 2114-12-01 12:47:38 +0900
end

# 元の時間に戻る
Time.now 
=> 2014-12-01 12:47:41 +0900

# ブロックなしだと例外が発生
Timecop.freeze(Time.now + 100.years)
=> Timecop::SafeModeException: Safe mode is enabled, only calls passing a block are allowed.
```

## travel、freeze の時間指定方法

- Time インスタンス
- DateTime インスタンス
- Date インスタンス
- year, month, day, hour, minute, second の個別指定
- Time.now からのオフセットを表す整数

## timecop の影響を受けるもの

- Time.now
- Date.today
- DateTime.now

# 余談

- delorean は Back to the Future から、timecop は[これ](http://ja.wikipedia.org/wiki/%E3%82%BF%E3%82%A4%E3%83%A0%E3%82%B3%E3%83%83%E3%83%97)かな？
- 前の会社で delorean に乗ってる部長さんがいた。あれたしか 500 万ぐらいするはず。
OpsWorksでBerkshelfを有効にした直後にデプロイに失敗する場合の対応

# 問題 #

AWS OpsWorksでBerkshelfを有効にした直後，
"Update Custom Recipes" などデプロイを実行すると，
時間がかかり結局失敗することがある．

# 対応 #

このときにサーバへログインして ps で確認すると，
gcc などのプロセスが動き，コンパイルが実行されていることが分かる．

コマンドラインから以下を実行して berkshelf をインストールしておくと，
正常にデプロイできるようになる．

```
# /opt/aws/opsworks/local/bin/gem install berkshelf
```
inline-blockの隙間をなくす方法

`display:inline-block`で要素を並べると余計な隙間ができてしまうので、
簡単に隙間をなくす方法を紹介します。

##親要素に`font-size:0;`を指定する

横並びにしたい`<li>`タグを1行で書いたり、`letter-spacing`を調整したりなど、
いくつかの解決方法がありましたがこの方法が一番楽でした。

`display:inline-block`の隙間問題は**テキストの改行が原因**で起こるので、
inline-blockを使った要素の**親要素に`font-size:0;`**を指定すると改善されます。

```html:html
<ul class="wrap">
	<li class="inline-block">
		テキストテキストテキストテキスト
	</li>
	<li class="inline-block">
		テキストテキストテキストテキスト
	</li>
	<li class="inline-block">
		テキストテキストテキストテキスト
	</li>
</ul>
```

```css:css
.wrap{
	font-size:0;
}
.inline-block{
	display:inline-block;
	font-size:12px; /* フォントサイズ0になっているので指定する */
}
```

このやり方だと、横並びにした`<li>`の幅を%指定していても調整がややこしくないしシンプルなのでお勧めです。
※ただし`font-size`を%指定したい場合は他の方法を推奨します（下記、参照サイトに他の解決方法が紹介されています）

※ 追記
`font-size:0;`だとfontを%指定した時にややこしいので、
`letter-spacing`で文字間を詰めて隙間をなくした方が良さそうです。

```css:css
.list { /* 親要素 */
    letter-spacing: -.4em; /* 文字間を詰めて隙間をなくす */
}

.list li { /* 子要素 */
    display: inline-block;
    letter-spacing: normal; /* 文字間を元に戻す */
}
```

【参照】
[display: inline-block の隙間を詰める方法 | Soraxism](http://soraxism.com/soraxism/blog/display-inline-block-%E3%81%AE%E9%9A%99%E9%96%93%E3%82%92%E8%A9%B0%E3%82%81%E3%82%8B%E6%96%B9%E6%B3%95 "display: inline-block の隙間を詰める方法 | Soraxism")
Cucumber + Capybara + Poltergeistを使って別タブで開くリンクのテスト

CucumberとCapybaraとPoltergeistを使ってテストをしていたときに、
別タブで開くリンク（`target="_blank"`となっているリンク)のテストで引っかかった。

# 別タブで開くリンクのクリック

`target="_blank"`となっているリンク（ボタン）を
`click_button`や`click_link`、`click_on`を使ってクリックしたところ
TimeoutErrorが発生した。

[teampoltergeist/poltergeist](https://github.com/teampoltergeist/poltergeist#mouseeventfailed-errors)を読んでみると

> If you can't figure out what's going on and just want to work around the problem so you can get on with life, consider using a DOM click event. For example, if this code is failing:
> `click_button "Save"`
> Then try:
> `find_button("Save").trigger('click')`

と書かれていたので、

```.rb
find_button("button").trigger('click')
```

のように書き換えたらタイムアウトしなくなった。

また、テストするページを別タブへ切り替える方法は`within_window`メソッドを使用して

```.rb
handle = page.driver.browser.window_handles.last
page.driver.browser.within_window(handle) do
  # 別タブ内で実行したい処理を書く
end
```

のように書く。

出来れば「タブを切り替える」操作を処理内容と切り離したいというひとは
`switch_to`メソッドを使うと良い。

Seleniumであれば、`switch_to`メソッドが使えるが、
Poltergeistの現時点のgem（1.5.1）では`switch_to`メソッドに対応していない。
[teampoltergeist/poltergeist](https://github.com/teampoltergeist/poltergeist#mouseeventfailed-errors)のmasterでは対応しているらしい。

# （おまけ）CucumberでSimple-Covを使用する

本題とは関係ないが、メモ。
Simple-Covをインストールして、`env.rb`に下記を加える。

```:features/support/env.rb
require 'simplecov'
  
SimpleCov.start
```

これでテスト実行時に、カバレッジが表示されるようになる。
Kobito の CSS で見出しに通番を振る


Kobito では、プレビューに適用する CSS を指定することができます。これを用いれば見出しに通番というか連番を入れるのは容易なのですが、いかんせん一行目の「タイトル」と「#」一つの「見出し」がどちらも「H1」要素なので、何も考えずに適用すると、タイトルにまで番号が振られてしまい、不格好です。

# 答え

「最初の H1 以外」を指定すれば OK です。

~~~~css:
h1:not(:first-of-type) {
    counter-increment: chapter;
    counter-reset: section;
    clear: right;
}

h1:not(:first-of-type):before {
    content: counter(chapter) " ";
}
~~~~

> 2016/06/18 追記: 当初は “first-child” 擬似クラスで判別をしていたのですが、数式を処理するために Kobito 2.3.6 で導入された MatJax がロードされると、body の最初の要素として hidden な自前の div エレメントを挿入するため “first-child” が効かなくなってしまったので、“first-of-type” に変更しました。
>
> 参考:
>
> * [Adding MathJax increases first element's top margin (Github themes) · Issue #305 · MacDownApp/macdown](https://github.com/MacDownApp/macdown/issues/305)
> * [:first-of-type - CSS | MDN](https://developer.mozilla.org/ja/docs/Web/CSS/:first-of-type)

## できました

![ss.png](https://qiita-image-store.s3.amazonaws.com/0/30059/709a8254-047b-e316-51b4-ce0277be584a.png "ss.png")


# 無駄に

無駄に

## 見出しを

見出しを

### つけて

### みます

# 全体

全体をご参考までに。

~~~~css:
body {
    counter-reset: chapter 0;
}

h1:not(:first-of-type) {
    counter-increment: chapter;
    counter-reset: section;
    clear: right;
}

h1:not(:first-of-type):before {
    content: "▌" counter(chapter) " ";
    color: darkred;
}

h2 {
    counter-increment: section;
    counter-reset: subsection;
    clear: right;
}

h2:before {
    content: "▌" counter(chapter) "." counter(section) " ";
    color: darkorange;
}

h3 {
    counter-increment: subsection;
    clear: right;
}

h3:before {
    content: "▌" counter(chapter) "." counter(section) "." counter(subsection) " ";
    color: #d9b9a9;
}
~~~~
VC++　DLLの呼び出しと解放

#はじめに

最近、仕事で久しぶりにVC++を使いました。
何とかなると思っていましたが、何とかなりませんでした。。。

DLLの呼び出しと解放についての備忘録を残します。

#サンプル

###DLL側
```lang:plus.cpp
extern "C" __declspec(dllexport) int plus(int x, int y)
{
    return (x + y);
}
````

#DLLの呼び出し
###呼び出し側
```lang:test.cpp
typedef int (*FUNC)(int x, int y);
  :
  :
```

まず、DLL内の関数の型を宣言します。(*FUNC)は任意の文字列でかまいません。

###DLL取得
```
HMODULE hModule = LoadLibrary((LPCSTR)lpBuffer);
if (NULL == hModule)
{
    return 1;
}
```

lpBuffer変数は、DLLのパスを指定します。

###関数アドレスの取得
```
FUNC func = (FUNC)GetProcAddress(hModule, "plus");
if (NULL == func)
{
    return 2;
}
```

###関数の実行
```
int ret;

ret = func(1, 2);
printf("答えは %d\n", ret);
```

###DLLの解放
```
FreeLibrary(hModule);
```

#おわりに

なんてことはないことなのですが、しばらく使っていないと忘れていました。
単純なことほど忘れやすいのかもしれません。
E2D3 とは

![concept_j.png](https://qiita-image-store.s3.amazonaws.com/0/60629/b72474fc-66f8-658e-c891-f72bb0e9864d.png)

皆さん，こんにちは．私は[E2D3](http://e2d3.org/)のProject Leader 五十嵐康伸です．E2D3はExcel to D3の略です．D3で作られたグラフをExcelからEditできるようにしよう，そしてそのグラフをシェアできるようにしようというPJです．

基本，有志がボランティアで運営していますが，日本マイクロソフト様からも技術そして資金的な支援も受けて継続できています（感謝！）．

始めは「現在のE2D3」を説明しようと思っていたのですが，E2D3はソースもドキュメントも可能な限り公開していますので，「過去＝なぜE2D3を作ろうと思ったか？」や「将来=E2D3の目標」，そして「E2D3で没になったアイデア」等の裏話を何回分か書いていこうと思います．（技術の話は殆ど出てきません，悪しからず）

今日は導入なので，この辺で終了です．
Evilのステートにちょっとした工夫

Evilとは?
=========

EmacsをVim化する、Emacsプラグインです。しかし、完全にVimには成りません。でも、主観的に、90%程度Vimになるでしょう。僕はそんなに、Vimを使ったことがありませんが。

# Lisperとしては、VimよりEmacs

個人的にLispを書くなら、Emacsを選択します。プラグインがEmacs Lispで書かれており、おそらく個人的な観測として、LisperはEmacsユーザの方が多い印象でした。もちろん、熱狂的なVimmerもいましたが。

僕は、最初からEmacsのユーザでした。Common Lisp用のエディタとして使っていました。なので、基本的にEmacs寄りのユーザだったと思います。

# ステート(Vimのモード)

## ステートとは?

Vimにはモード(Evilではステート)というものがあります。
(ちなみに、おそらくですが、Emacsに”モード”があり、それとバッティングするのを恐れて、Evilでは”ステート”と読んでいるとと思います)

Vimは、状態を持ち、その状態に合わせて、テキストエディタとしての機能的役割を変えて行きます。移動するモードや、文字を挿入するモードという様に。それに合わせて、適当なキーバインドが割り当てることができます。

## ステートの利点

Vimでは、ステートがあるために、キーバインドの競合が起りにくいといった利点があるでしょう。例えば、挿入ステートと、他のステートが分離されているため、普通の他のエディタなら、hjklのキーはそのまま文字が表示されますが、挿入ステート以外であれば、カーソル移動のキーバインドになるといった具合です。

一方Emacsでは、普通のカーソル移動にhjklを割り当てようとしても、hjklは文字の印字のコマンド(self-insert-command)になるため、競合します。なので、Ctrlキーを押しながら、コマンド操作が多いということだと思います。

## ステートのややこしさ、煩わしさ

### ステートの視覚的なアドバイス

一方ステートに慣れるまでが、すごくややこしいです。そもそも、エディタに状態がある自体が、凄く事をややこしくします。ユーザは今何の状態なのか?を考えながら編集しないといけないので、操作ミスが起りやすいです。ノーマルステートと思っていら、”hhhhhhhhhhhhhhh"と印字されるなんて、日常茶飯事です。

そもそも、よくよく考えたら、状態に関する視覚的なアドバイスが何も無いことが問題なのです。普通のGUIのアプリケーションならば、状態が変更されているならば、なにかしらの視覚的なアドバイスがあるはずです。

なので、状態が変更されたら、視覚的それが分かるようにしました。具体的には、カラーテーマを変更するようにしています。次のような感じです。

```el
(add-hook 'evil-normal-state-entry-hook
           '(lambda ()
            (color-theme-euphoria)))
(add-hook 'evil-insert-state-entry-hook
          '(lambda ()
             (color-theme-gray30)))
```

こうすると、次のようなスクリーンショットになります。まずは、ノーマルステートだとこうなります。
![スクリーンショット 2014-12-01 11.12.53.png](https://qiita-image-store.s3.amazonaws.com/0/31381/30e65fd4-8e86-55a6-7508-99ae61574165.png)

次は挿入ステートです

![スクリーンショット 2014-12-01 11.12.59.png](https://qiita-image-store.s3.amazonaws.com/0/31381/5a2c9728-5af1-c0ee-11e3-eba0ffa138ca.png)

# 最後に

よくよく考えたら、Evilじゃなくて、Vimの話になった感。
買ってきたWindowsマシンに1分でいつものアプリケーションを投入する

この記事は[「1分で実現できる有用な技術 Advent Calendar 2014」](http://qiita.com/advent-calendar/2014/one-minute "1分で実現できる有用な技術 Advent Calendar 2014")の2日目の記事になります。

## 概要
[chocolatey](https://chocolatey.org/)というツールを利用してWindows環境構築を省力化しましょうというものです。

## やりかた

### chocolatey のインストール

Windowsのコマンドプロンプトを起動し、以下のコマンドを貼り付けて実行します。

    @powershell -NoProfile -ExecutionPolicy unrestricted -Command "iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))" && SET PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin

### packages.config の取得

このファイルは事前に作成しておく必要がありますが、configファイルをコマンドを実行するディレクトリに取得します。
参考として私がGitHubで管理しているものは[こちら](https://github.com/chidakiyo/chocolatey/blob/master/packages.config)

### インストールの実行

    cinst packages.config

※ 注意:configファイルがあるディレクトリで実行してください。

こんなかんじでWindows環境でもお手軽に初期アプリケーションインストールの自動化ができてしまいます。

インストールの完了までだと1分超えてしまいますが、大量のWindowsPCに初期設定をしたい場合には`cinst git`と`git clone`を組み合わせるとconfigの取得で楽ができるかもしれません。


## おまけ

### chocolatey でインストールしたアプリケーションを全て最新版にアップデートする

    cup all

これだけです。`yum -y update`と似たような動作になります。
mongooseでカウンター（再掲）

（Qiitaのアカウント作成しなおしたので再掲）

mongooseでカウンターを書いてみた。

`getNextSequence('カウンター名', callback (err, counter) {...});`
こんな感じで使います。

```js:getNextSequence.js
'use strict';
var mongoose = require('mongoose');

var counterSchema = new mongoose.Schema({
        _id: String,
        seq: Number
});
mongoose.model('Counter', counterSchema);
var counter = mongoose.model('Counter');

function getNextSequence(counterName, callback) {
        counter.findOneAndUpdate(
                { _id: counterName },
                { $inc: { seq: 1 } },
                { new: true, upsert: true },
                function (err, data) {
                        if (!err)
                                callback(null, data.seq);
                        else
                                callback(err, -1);
                });
}

mongoose.connect('mongodb://localhost/test');

getNextSequence('counter1', function (err, counter) {
        err || console.log(counter);
        mongoose.disconnect();
});
```
CoffeeScriptで引数を必要としない関数の実行にdoが使えることを今さら知ったのでメモ


タイトルにあるように、CoffeeScriptで引数を必要としない関数の実行にdoが使えることを今さら知ったのでメモメモ。  
結論から言えば、関数の前にdo句を用いればいい。

```CoffeeScript
# hoge()
do hoge
```

ずっと、[オライリー本に書いてあるFunction argumentsの章](http://arcturo.github.io/library/coffeescript/02_syntax.html)のところで
> 関数に引数が最低ひとつあれば括弧を必要としないのでCoffeeScriptって美しいよね。
> でも引数が一個もない場合、関数を実行したいのか参照したいのか、CoffeeScriptはわかんないから、括弧の使用不使用の判断は注意しないといけないね。

って書いてあったので、この記述を曲解して引数がひとつもない関数は括弧付きで記述するしかないとてっきり勘違いしてた…。

同じ[オライリー本にあるPrivate variablesの章](http://arcturo.github.io/library/coffeescript/04_idioms.html)では
> do句は関数をすぐに実行するよ!
> 無名関数の即時実行なんかに便利だね！

みたいな事書いてあるのは知ってたんだけど、この文をそのまま、「無名関数の即時実行にはdoを使う」みたいに覚えてた。こんな感じの奴↓

```CoffeeScript
do ->
    console.log 'hoge'
```

これ扱えてたんだから、引数のない関数の実行まであと一歩だったはずなのに、気付くのに何年かかったか…。
swiftで２つの年月日秒の差分を取りたい


簡単にできるかと思ったけど意外と時間かかったし忘れそうなのでメモ



```swift
let start = "2000/10/09 23:58:59"
let end = "2041/10/09 00:00:00"

let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy/MM/dd HH:mm:ss"

let startDate:NSDate? = dateFormatter.dateFromString(start)
let endDate:NSDate? = dateFormatter.dateFromString(end)

let cal = NSCalendar.currentCalendar()
let calUnit:NSCalendarUnit = .CalendarUnitSecond | .CalendarUnitMinute | .CalendarUnitHour | .CalendarUnitDay | .CalendarUnitYear

let components = cal.components(calUnit, fromDate: startDate!, toDate: endDate!, options: nil)

println(components.year)   //40
println(components.day)    //364
println(components.hour)   //0
println(components.minute) //1
println(components.second) //1
```

ブログに書いてみたけどやっぱりブログが続けられないのでこっちで書き溜めたい。
AngularJSの国際化(多言語)でpoファイルを使用する

AngularJSで国際化だと標準ではangular-translateが一般的ですが、poファイルを使いたかったのでpoファイルに対応しているライブラリを探したところ、[angularjs-gettext](https://angular-gettext.rocketeer.be/)を見つけました。

# 翻訳の使い方
これはangular-translateと同じ使い方ですね。
少し違うのはpoファイルに対応するキーがない場合は以下の場合「Hello!」が表示されます。

```html:sample
<h1 translate>Hello!</h1>
```

※これはPHPのgettextと同じ仕様ですね。

# 翻訳キーの抽出
Gruntを使って翻訳キーの抽出ができます

npmでgrunt-angular-gettextをインストール

```
npm install grunt-angular-gettext --save-dev
```

grunt-angular-gettextライブラリをロード

```js:Gruntfile.js
grunt.loadNpmTasks('grunt-angular-gettext');
```

src/viewのhtmlから翻訳キーを抽出しpo/template.potに出力する

```js:Gruntfile.js
grunt.initConfig({
  nggettext_extract: {
    pot: {
      files: {
        'po/template.pot': ['src/views/*.html']
      }
    },
  },
})
```

# Gruntでのコンパイル
poファイルをGruntでコンパイルし、翻訳ファイルtranslations.jsを作成する
※ index.htmlでこのtranslations.jsをインクルードする必要があります。

```js:Gruntfile.js
grunt.initConfig({
  nggettext_compile: {
    all: {
      files: {
        'src/js/translations.js': ['po/*.po']
      }
    },
  },
})
```


参考サイト
https://angular-gettext.rocketeer.be/dev-guide/
sbt でコード生成ツールをコンパイル前に実行

IDL や O/R Mapper などソース自動生成を行うツールはコンパイル前に自動実行させておくと便利です。

例えば Java/Scala で作成された `foo.CodeGenerator` という `main()` を持つツールを sbt コンパイル前に実行させるには `Build.scala` に上記のように記述します:

```scala
import sbt._
import Keys._
import Tests._

object Build extends sbt.Build {
  lazy val mainProject = Project(
    id="myproject",
    base=file("."),
    settings = Project.defaultSettings ++ Seq(
      libraryDependencies ++= List(
        "foo.codegen" % "codegen"   % "1.0.0",
        "org.slf4j"   % "slf4j-nop" % "1.6.4"
      ),
      // sbt codeGen でマニュアル実行できるようにコマンド登録
      codeGen <<= myCodeGenTask,
      // コンパイルごとにソース自動生成タスクを実行するよう登録
      sourceGenerators in Compile <+= myCodeGenTask
    )
  )

  lazy val codeGen = TaskKey[Seq[File]]("generate my code.")
  lazy val myCodeGenTask = (sourceManaged, dependencyClasspath in Compile, runner in Compile, streams) map { (dir, cp, r, s) =>
    val outdir = (dir / "autogen").getPath
    toError(r.run("foo.CodeGenerator", cp.files, Array(outdir /* コマンドライン引数 */), s.log))
    Seq("Foo.scala", "Bar.scala").map{ fname => file(outdir + "/" + fname) }
  }
}
```

ここで Maven リポジトリ `foo.codegen:codegen:1.0.0` には `foo.CodeGenerator` が含まれているものとします。

タスクは自動生成されたファイルの一覧を返すことでそれらがコンパイル対象に含まれます。上記の例では `src_managed/autogen` の下に以下の 2 ファイルが生成されるものと仮定し:

```scala
case class Foo(x:Int)
```
```scala
case class Bar(y:String)
```

自動生成されたコードを使用するプログラムを作成して実行します。

```scala
object Hoge {
  def main(args:Array[String]):Unit = {
    println(Foo(99))
    println(Bar("hoge"))
  }
}
```

```bash
$ sbt compile run
[info] Loading project definition from <dir>/project
[info] Set current project to myproject (in build file:<dir>/)
[info] Updating {file:<dir>/}myproject...
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] Done updating.
[info] Running foo.CodeGenerator <dir>/target/scala-2.10/src_managed/autogen
[info] Compiling 3 Scala sources to <dir>/target/scala-2.10/classes...
[success] Total time: 5 s, completed 2014/12/01 9:25:18
[info] Running foo.CodeGenerator <dir>/target/scala-2.10/src_managed/autogen
[info] Running Hoge
Foo(99)
Bar(hoge)
[success] Total time: 0 s, completed 2014/12/01 9:25:18
```

`compile` と `run` とで 2 度実行されているようですがコンパイルは 1 度だけですかね。自動生成とコンパイルが成功しました。
【FileMaker】テーマの共有

さて、FileMakerはとてもスバラしく簡単に見栄えよくできます。
この見栄えは、「テーマ」のおかげなのですが、同じ会社やグループのデザインを別のグループで使いたい、また、独自テンプレートを作ってそれをベースにビジネスを展開したい、ということもあると思います。

このとき、一々以前のテーマを見ながらやっていたら効率が悪くて仕方ないですね。

なので、自分仕様のテーマを作った時にはそのテーマを自動的に使えるようにしましょう。

まずは、テーマを自作。
項目ラベルを新テーマの新スタイルにして保存します。
![1201_0.jpg](https://qiita-image-store.s3.amazonaws.com/0/60538/228379ea-1b3d-59ba-bfc0-20f4d208547b.jpeg)

この独自テーマに色々決まったパターンのスタイルを登録しておくと便利です。

では、この独自テーマを別のFMファイルに反映していきましょう。

（１）テーマを新しくするFMファイルを開いて、レイアウトモードでテーマの変更をします。
そして、「テーマのインポート」
![1201_1.jpg](https://qiita-image-store.s3.amazonaws.com/0/60538/76df173f-afa4-dc14-e0b3-b1a3501d0caa.jpeg)

（２）テンプレートとしてあるFMファイルを選択
![1201_2.jpg](https://qiita-image-store.s3.amazonaws.com/0/60538/c49bfc9b-2d2c-ac1f-e8b1-4ed1cf232f5c.jpeg)

（３）テンプレートのFMファイルに登録してあるカスタマイズしたテーマが選択できますので、チェック
![1201_3.jpg](https://qiita-image-store.s3.amazonaws.com/0/60538/0c516c8a-4622-adca-7dd3-e25da25958a2.jpeg)

（４）インポートできました♪
![1201_4.jpg](https://qiita-image-store.s3.amazonaws.com/0/60538/4718242b-3b28-06ee-9350-dbc1434ed901.jpeg)

（５）試しにテキストを選択してみると、インポートしたスタイルを選択できるようになります。
![1201_5.jpg](https://qiita-image-store.s3.amazonaws.com/0/60538/ee3cab34-fcdb-f7f2-51e4-cb3fee7d149b.jpeg)

デフォルトでレイアウトを変更してテーマを作成すると、インポート先のレイアウトは自動的に新テーマのレイアウトに変更されます。

さて、〆です。
![1201_6.png](https://qiita-image-store.s3.amazonaws.com/0/60538/db59e57c-0bea-869f-f25b-bab139b77702.png)


いちいちスタイル変更をするのは非効率なので、ぜひともプロジェクトを始める際にはテーマを作成して効率を高めましょうね。
MacでAnsibleが動かなくなった時のファーストアクション

※ Ansible Advent Calendar 2014の 7日目の記事です。それ以前に見えてたら気のせいです。

発生タイミング
---

はっきり言ってよくわかりません。
自分もアレ？こないだまできちんと動いてたのに...
っていう感じでした。

エラー文言
---

ネットで調べまくりましたが、人によってエラーは様々なようです。
自分の場合は、以下の様のものが出てました。

``` bash
# fatal: [localhost] => Traceback (most recent call last):
#   File "/usr/local/Cellar/ansible/1.7.2/lib/python2.7/site-packages/ansible-1.7.2-py2.7.egg/ansible/runner/__init__.py", line 561, in _executor
#     exec_rc = self._executor_internal(host, new_stdin)
#   File "/usr/local/Cellar/ansible/1.7.2/lib/python2.7/site-packages/ansible-1.7.2-py2.7.egg/ansible/runner/__init__.py", line 696, in _executor_internal
#     complex_args=complex_args
#   File "/usr/local/Cellar/ansible/1.7.2/lib/python2.7/site-packages/ansible-1.7.2-py2.7.egg/ansible/runner/__init__.py", line 884, in _executor_internal_inner
#     result = handler.run(conn, tmp, module_name, module_args, inject, complex_args)
#   File "/usr/local/Cellar/ansible/1.7.2/lib/python2.7/site-packages/ansible-1.7.2-py2.7.egg/ansible/runner/action_plugins/template.py", line 77, in run
#     source = utils.path_dwim_relative(inject['_original_file'], 'templates', # # source, self.runner.basedir)
#   File "/usr/local/Cellar/ansible/1.7.2/lib/python2.7/site-packages/ansible-1.7.2-py2.7.egg/ansible/utils/__init__.py", line 339, in path_dwim_relative
#     template2 = os.path.join(basedir, '..', dirname, source)
#   File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/posixpath.py", line 75, in join
#     if b.startswith('/'):
# AttributeError: 'dict' object has no attribute 'startswith'
# 
# FATAL: all hosts have already failed -- aborting
```

原因
---

調べて色々なことをしましたが、それ全部書いてると大変なので、
結論から言うと、

**sshpass が入ってなかったから！！** です。

対応
---

以下の様な感じで、pingのテストをしてみると、こんなかんじでエラーになります。

``` bash
$ ansible -i hosts 127.0.0.1 -m ping -vvv --ask-pass
SSH password: 
# <127.0.0.1> ESTABLISH CONNECTION FOR USER: username
# <127.0.0.1> REMOTE_MODULE ping
# 127.0.0.1 | FAILED => to use the 'ssh' connection type with passwords, you must  install the sshpass program
```

こうなったら、sshpassがないのが原因です。
なので、sshpassをインストールします。

前もって言うとhomebrewでは入れられません。
パッケージ探しただけでこのようなメッセージが出ます。

``` bash
$ brew search sshpass
# We won't add sshpass because it makes it too easy for novice SSH users to ruin SSH's security.
```

残念ですが、自分でmakeして入れます。

``` bash
$ curl -O -L http://downloads.sourceforge.net/project/sshpass/sshpass/1.05/sshpass-1.05.tar.gz
$ tar -zxvf sshpass-1.05.tar.gz
$ cd ./sshpass-1.05
$ ./configure
$ make
$ make install
```

入ったので、もう一回試してみます。

``` bash
$ ansible -i hosts 127.0.0.1 -m ping -vvv --ask-pass
SSH password: 
(中略)
# 127.0.0.1 | success >> {
#     "changed": false, 
#     "ping": "pong"
# }
```

こんなかんじになったら成功です。
これでまた使えるようになりました。
めでたし...
めでたし...

おまけ
---

stockoverflowとか調べてると、
ssh接続がparamikoに変わったからじゃね？的な話が出てきます。
Macの場合はこれじゃないです。
これも試してみましたが、関係ありませんでした。
ですが、Linuxサーバなどでこれと同じ事例が発生した場合は疑ったほうがいいと思います。

paramikoはpython製なので、pipで入れられます。

``` bash
$ pip install paramiko
```
【Vim】Ruby書くときにVimが重くてつらいときは


# Vimが暴走？

VimでRuby書いていると，Insert mode時にときどきCPU利用率が100%になる．
最初はneocompleteやvim-railsあたりが暴走しているのかと考えていたが，検証してみたら全然違っていた．
どうやらVimのfoldingに関する既知のIssueだったみたいだ（[very slow insert mode in classes · Issue #8 · vim-ruby/vim-ruby](https://github.com/vim-ruby/vim-ruby/issues/8)）．

具体的に言うと，`foldmethod=syntax`のときに重くなることがあるみたい．

# 対処法

## その1: foldしない

つら．

## その2: foldmethod=indent

だいぶマシ．

## その3: Insert mode時のみfoldmethod=manual

KOOL.

```vim:.vimrc
set foldenable
set foldmethod=syntax

autocmd InsertEnter * if !exists('w:last_fdm')
            \| let w:last_fdm=&foldmethod
            \| setlocal foldmethod=manual
            \| endif
autocmd InsertLeave,WinLeave * if exists('w:last_fdm')
            \| let &l:foldmethod=w:last_fdm
            \| unlet w:last_fdm
            \| endif

```

# まだ重い？

スクロールが重いとかだったら，`cursor[line|column]`が原因の可能性もある（GUIなVimは別，terminal上のVimのみ）．
カーソルが動くたびに背景書き直してるなら当たり前とも言えるかもしれない（僕の場合は背景を透過していたので余計にかも）．

# 参考URL

* [very slow insert mode in classes · Issue #8 · vim-ruby/vim-ruby](https://github.com/vim-ruby/vim-ruby/issues/8)
* [Keep folds closed while inserting text - Vim Tips Wiki](http://vim.wikia.com/wiki/Keep_folds_closed_while_inserting_text)
railsでもbowerでasset管理しつつherokuにもdeployする方法

[Bower](http://bower.io/)を導入します。

## node.js

```
$ brew upgrade node
```

## bower-rails

```
$ vim Gemfile
```

```diff
 gem 'jbuilder', '~> 2.0'
 gem 'enumerize'
 gem 'factory_girl_rails'
+gem 'bower-rails'

 group :development, :test do
   gem 'spring'
```

```
$ rails g bower_rails:initialize
```

## assetを追加

```
$ vim Bowerfile
```

なんか、いろいろ

```
asset 'reset-css'
asset 'jquery-ujs'
asset 'jquery-ui'
asset 'components-font-awesome'
```


```
$ rake bower:install
```

## herokuにあげたい場合

```
$ heroku config:set BUILDPACK_URL=https://github.com/heroku/heroku-buildpack-multi.git
```

```
$ vim .buildpacks
```

```
https://github.com/heroku/heroku-buildpack-nodejs
https://github.com/heroku/heroku-buildpack-ruby
```

heroku buttonの設置例

```
$ vim app.json
```

```diff
   "repository": "https://github.com/ppworks/furikaeri",
   "scripts": {
     "postdeploy": "bundle exec rake db:migrate && bundle exec rake db:seed"
+  },
+  "env": {
+    "BUILDPACK_URL": "https://github.com/heroku/heroku-buildpack-multi.git"
   }
 }
```