OmniAICreator/Qiita-1.07M huggingface dataset:
Composer install したらgit submodule化してしまった

***
###状況
gitで管理しているレポジトリをgithubにプッシュした際に、webhookを利用して、開発サーバーにソースをアップ（開発サーバーからpull）している。
gitpullは正常に行われているのに、開発サーバーで一部モジュール(今回は cebe/markdown)が読み込めていない。
githubを見てみると、対象のモジュールのフォルダのみがアップされていない。
***
###調査
Composer でPHPのモジュールをインストールした際に、モジュールにgitで管理されているモジュールが含まれていた為、submodule扱いとなり、コチラの意図通りにgit管理出来なくなってしまったとアテをつけて調査。

######試しに直接 `git add` してみる

```Bash
$ git submodule deinit vendor/cebe/markdown/

No submodule mapping found in .gitmodules for path 'vendor/cebe/markdown'
```

・・・出来ない。

######サブモジュールの削除？

```
$ git submodule deinit vendor/cebe/markdown/

No submodule mapping found in .gitmodules for path 'vendor/cebe/markdown'
```

これもムリ。


######submoduleのキャッシュがあるらしい。クリアを試す。

```
$ git rm --cached vendor/cebe/markdown/

error: the following file has staged content different from both the
file and the HEAD:
    vendor/cebe/markdown
(use -f to force removal)
```
手応えあり・・？

***
###対策
まずは上記のエラーメッセージの導きに従い、-f　オプションを付けてみる
######`git rm --cached -f`

```
$ git rm --cached -f vendor/cebe/markdown/
rm 'vendor/cebe/markdown'
```

エラーなし。

######念のため `submodule deinit`

```
$ git submodule deinit vendor/cebe/markdown/

error: pathspec 'vendor/cebe/markdown/' did not match any file(s) known to git.
Did you forget to 'git add'?
```

`git add` してないよって言われる。

######`git add` してからやってみる

```
$ git add vendor/cebe/markdown/
$ git submodule deinit vendor/cebe/markdown/
```

一応エラーは出ない。

これで `$ git status` してみると、無事に`add`されてる！


実際にはsubmodule化している訳ではないので、submoduleのキャッシュをクリアするのがキーだったぽい。（たぶん）
Knockout.js使ってるとHTML5の属性が効かない場合はexntederを使おう


extenderを使えばいいことがわかったのでタイトルを変えた。

# 起きたこと

```html
<input type="number" name="foo" min="0" data-bind="textInput: foo">
```

マイナスを入力できないようにしたかったため、`min="0"`を設定していたのだが、実際にはマイナスにできてしまった…。たぶんmax属性を使っても上限を突破するようなことが起きるんじゃないだろうか。

# 対処方法

コメントで教えていただいたのだが、入力値の強制などはextenderで対応したほうがいいということだったため、再実装してみた。たしかにこのほうが汎用的でよさそう。

## コメントをいただいた後に実装した方法

```coffeescript:coffeescript
# 整数を強制するko拡張を定義
ko.extenders.integer = (target, bool) ->
  return target unless bool
  result = ko.pureComputed(
    read: target,
    write: (new_value) ->
      current = target()
      value_to_write = parseInt(new_value, 10)
      value_to_write = 0 if isNaN(value_to_write) || value_to_write < 0
      if current isnt value_to_write
        # 値が変わっていたら反映
        target(value_to_write)
      else if current isnt new_value
        # currentが100、new_valueが0100などが渡されると
        # value_to_writeは100になるので値は変わらないが、
        # 何もしないと0100のままになるので通知を行う必要がある
        target.notifySubscribers(new_value)
  ).extend(notify: 'always')
  result(target())
  result
```

これを定義しておいて、observableに拡張を反映します。

```coffeescript:coffeescript
class FooViewModel
  constructor: ->
    @foo = ko.observable(0).extend(integer: true)
```


## 最初に実装した方法（よくない方法）

※こちらはログとして残しているだけなので参考にしないように…。

`data-bind="event: {change: check}"`を使って、値が変わったタイミングでチェックさせようかと思ったけれど、このためにわざわざメソッド作るのはどーなんだ？と思っていたところ、`subscribe`で監視してはどうか？という意見をもらったのでそうした。

新しい値を数値に変換して、数値じゃない場合やマイナスの場合は0にしてしまうようにした。

```coffeescript:coffeescript
class FooViewModel
  constructor: ->
    self = this
    @foo = ko.observable(0)
    @foo.subscribe (new_value) ->
      new_value = parseInt(new_value, 10)
      new_value = 0 if !$.isNumeric(new_value) || new_value < 0
      self.foo(new_value)
```

以上です。
ESXi 5.1以降上にESXi 5.1を構築する（Nested ESXi）

# 概要

ESXi 5.1以降の上に、仮想マシンでESXi 5.1を構築する（Nested ESXi）する時は、仮想マシンハードウェアバージョンを9以降にし、OSバージョンとして`VMware ESXi 5.x`を選択する。また仮想マシン上へのESXi構築時、インストーラとして物理マシンのハードウェアベンダーによるカスタムイメージを使用するときは、`SMBIOS.reflecthost`に`TRUE`を設定しておく。

# 詳細

## 仮想マシンの作成

以下の構成で、仮想マシンを作成する。

<table>
<tr><th>設定項目</th><th>設定内容</th></tr>
<tr><td>構成</td><td>カスタム</td></tr>
<tr><td>仮想マシンのバージョン構成</td><td>vSphere 5.1（仮想マシンハードウェアバージョン9）</td></tr>
<tr><td>ゲストOS</td><td>Linux</td></tr>
<tr><td>ゲストOSのバージョン</td><td>Red Hat Linux 4 (64bit)</td></tr>
<tr><td>CPU数</td><td>2（1ソケット×2コアでも2ソケット×1コアでも可）</td></tr>
<tr><td>メモリ</td><td>2GB</td></tr>
<tr><td>ネットワークアダプタ</td><td>E1000（初期値）</td></tr>
<tr><td>SCSIコントローラ</td><td>LSI Logic SAS（初期値）</td></tr>
<tr><td>ディスクサイズ</td><td>5.2GB（起動領域1GB、スクラッチ領域4GBを確保する場合）</td></tr>
</table>

## ゲストOSのバージョン等の修正

vSphere Web Clientで、作成された仮想マシンに対して、以下の設定変更を行う。

1. 「設定の編集」画面を開き、「仮想マシンオプション」タブを表示する。
2. 「一般オプション」の「ゲストOS」を`その他`、「ゲストOSのバージョン」を`VMware ESXi 5.x`に変更
3. 「起動オプション」の「次回仮想マシンの起動時に、強制的にEFIセットアップ画面に入る」を有効化
4. ESXiインストーラとして、ベンダカスタムイメージを使用する場合は、詳細の「構成パラメータ」から「構成の編集」を開き、`SMBIOS.reflecthost`に`TRUE`を設定しておく（※通常はVMware社の純正イメージを使うので、この設定は必要ない）。
5. [OK]を押下して、で仮想マシンの設定の編集画面を終了する。
6. 再度「設定の編集」画面を開き、「仮想ハードウェア」タブを表示する。
7. 「CPU」の「ハードウェア仮想化」を有効にする
8. [OK]を押下して、で仮想マシンの設定の編集画面を終了する。

## インストールの開始

インストールを開始する。

1. 仮想マシンをパワーオンする
2. BIOS画面で、起動デバイスにCD-ROMが入っていることを確認する
3. BIOS画面表示状態で、ESXiインストーラ（媒体またはISOイメージ）をマウントする
4. BIOS画面を終了する

以降は物理マシン上でのインストールと同様に、インストールを進める。

# 参照

ESXi on ESXi（Nested ESXi）に関する基本情報は、以下を参考にした。

* [Running Nested VMs | VMware Communities](https://communities.vmware.com/docs/DOC-8970)

ESXi 5.1のインストールに関しては、以下を参考にした。

* [vSphere 5.1 Update 1 - vSphere のインストールとセットアップガイド](http://pubs.vmware.com/vsphere-51/topic/com.vmware.ICbase/PDF/vsphere-esxi-vcenter-server-511-installation-setup-guide.pdf) - 仮想マシンサイズは本ドキュメントののハードウェア要件に合わせた。

HP社カスタムイメージ版ESXiを使用するための、`SMBIOS.reflecthost`の設定については、以下を参考にした。

* [Microsoft Windows ServerライセンスFAQ(HP社ドキュメント)](http://h50146.www5.hp.com/products/servers/proliant/whitepaper/wp109_0911/pdfs/4AA2-7877ENW.pdf) > 41項
* [ゲストOSにHPのOEM windows2008をインストールする方法 | VMware Communities](https://communities.vmware.com/message/2046384#2046384)

----

本ページ内容は筆者が参照の便のためにある時点でまとめた個人的なメモです。内容を保証するものではなく、また筆者の所属組織等とは一切かかわりがありません。
TemplateHaskellで生成されるコードを確認する

例えば、`q`というアクションが生成するコードを確認したいなら、ghci上で以下のようにする。

```haskell
>>> :set -XTemplateHaskell
>>> :m + Language.Haskell.TH
>>> putStrLn $(stringE . pprint =<< q)
```

ただし、

```haskell
q :: Ppr v => Q v
```

参考: http://stackoverflow.com/questions/16690925/template-haskell-reify-in-ghci
Effective C++ (3rd) > 33項 > 定義の検索 (ローカル、Derived、Base、グローバル)

引用: Effective C++ 第3版

> すると、コンパイラは、ここで使われているmf2の定義を見つけなければなりません。...まずローカルスコープ...Derivedのスコープを探します。...Baseのスコープを探します。...それでもなければ、グローバルスコープにまで進められます。

検索したらこういうのを見つけた
[How to access a global variable within a local scope in C++]
(http://stackoverflow.com/questions/20458720/how-to-access-a-global-variable-within-a-local-scope-in-c)

> Don't do that...
> ...
> You should be using ::x in order to access global variable in local scope.
van_de_Hulst > typo > 3.21 > 1 / l2

Kindle No.868 > last paragraphs of 3.21

Kindle version (typo)
> If the disturbance at a very large distance... we find that the intensity decreases as

```math
1 / ^{l2}
```

printed book (correct)

```math
1 / l^{2}
```
van_de_Hulst > typo > 3.21 > AP = l

Kindle No. 830 > AP = l in the sentence

Kindle version (typo) @ 3rd paragraph of 3.21
> Figure 3b shows ... By Fresnes's use of Huygens' principle we determine the disturbance at P, where 

```math
AP = ^l.
```

printed book(correct)

```math
AP = l.
```
Elastic IPを使ってPublic IPを固定化する


# 手順（たった3ステップ）
1. EC2ダッシュボードのサイドメニューにある「Elastic IPs」をクリック.
2. 「新しいアドレスの割り当て(Allocate New Address)」クリック. Elastic IPを確保する。確保先は[VPC]を選択
3. 「アドレスの関連付け(Associate Address)」をクリック. 割当先に割り当てたいインスタンスを選択.

※「再関連付け(Allow Reassociation)」は、既にElastic IPがインスタンスにセットされていた場合に、
置き換えるか、エラーにするかの設定。基本、チェックをつける必要はない。

以上で完了です。 

![スクリーンショット_2015-05-22_7_00_07.png](https://qiita-image-store.s3.amazonaws.com/0/27590/7a720f2b-2208-2729-7976-b11da44610c9.png)
![スクリーンショット_2015-05-22_7_00_46.png](https://qiita-image-store.s3.amazonaws.com/0/27590/c0510d60-1485-4154-90a7-7cc7e7a9cb8c.png)
行末に特定の文字列を追加するマクロ

```VBScript
'-------------------------------------------------------------------------------
'コメントの追加
'
' CopyRight Naoshi Ide 2015-
'-------------------------------------------------------------------------------
Call Main

Sub Main()

	Dim buffer, texts

	SuffixStr = InputBox("行末に追加するコメントを記入してください", "memo")
	If SuffixStr = "" Then
		Exit Sub
	End If

	'選択したテキストを取得する
	buffer = Editor.GetSelectedString()

	texts = Split(buffer, vbCrLf)

	'行ごとに処理を行う
	For Each line in texts
		tmpBuffer = SetPrefix("//", line)
		tmpBuffer = SetBlank(tmpBuffer, 78)
		tmpBuffer = SetSuffix(tmpBuffer, SuffixStr)
		output = output + tmpBuffer + vbCrLf
	Next

	Editor.InsText(output)
End Sub


Function GetStrWidth(str)
'	//半角文字を削除する
	Dim re
	Set re = new RegExp
	re.Pattern = "[\u0001-\u00FF]"
	re.Global = True
	delHalfWidth = re.Replace(str, "")
	strWidth = Len(delHalfWidth) * 2 + Len(str) - Len(delHalfWidth)
	GetStrWidth = strWidth
End Function

'末尾が指定桁数になるように空白文字を追加する
Function SetBlank(str, length)
	strLen = GetStrWidth(str)
	ln = length - strLen
	tmpBuffer = str
	For Cnt = 0 To ln
		tmpBuffer = tmpBuffer + " "
	Next
	SetBlank = tmpBuffer
End Function

'行頭にコメントを追加する
Function SetPrefix(PrefixStr, str)
	SetPrefix = PrefixStr + str
End Function

'末尾に文字列を追加する
Function SetSuffix(line, SuffixStr)
	SetSuffix = line + SuffixStr
End Function
```
技術英語 > あらゆるレベルで > Check your PHP code [at every level] with unit tests

http://www.ibm.com/developerworks/library/os-php-unit/

> Check your PHP code <font color=red>at every level</font> with unit tests

http://eow.alc.co.jp/search?q=at+every+level
> at every level
> あらゆるレベルで

https://jobs.github.com/positions/524810a6-f745-11e3-8a69-cf126fa8abb9
> We'd love to have someone to help build software to address performance <font color=red>at every level</font> of the software stack
gitのbranch選択をpecoで楽にする。

# なにが嬉しいのか？

* gitのbranchを楽に選択できる。
* checkout, push, pullなどが楽にできる。

git checkoutをpecoで行うpecoの関数はあったのですが、
汎用的にしたいよなーと思いましたのでbranchのみを選択するスクリプトを書きました。

# ソース

```zsh:.zshrc
function peco-branch () {
    local branch=$(git branch -a | peco | tr -d ' ' | tr -d '*')
    if [ -n "$branch" ]; then
      if [ -n "$LBUFFER" ]; then
        local new_left="${LBUFFER%\ } $branch"
      else
        local new_left="$branch"
      fi
      BUFFER=${new_left}${RBUFFER}
      CURSOR=${#new_left}
    fi
}
zle -N peco-branch
bindkey '^xb' peco-branch # C-x b でブランチ選択
```
iOSでシンタックスハイライトを実現するならICTextViewを使うのがおすすめ


![sytax-highlight](http://cdn-ak.f.st-hatena.com/images/fotolife/t/tuto0621/20150517/20150517175305.png)
元ネタ:[iOSアプリにRubyのシンタックスハイライトを組み込んだ](http://ongaeshi.hatenablog.com/entry/builtin-ruby-syntax-hight-to-ios)


- iOS7以降で使えるTextKitを使うとUITextViewを柔軟にカスタマイズすることができる
- シンタックスハイライトの実装方法は以下の記事がおすすめ
  - [Getting to Know TextKit - iOS 7 - objc.io issue #5](http://www.objc.io/issue-5/getting-to-know-textkit.html)
  - もしくは[ofruby-ios](https://github.com/ongaeshi/ofruby-ios)の`RubyHighlightingTextStorage.m`と`EditViewController.mm`を読む
- 表向きはこれで上手くいくはずなのだけど現状UITextViewにはたくさんのバグが埋まっていてまともに動かない
  - カーソルを一番下にスクロールしても画面が追従してくれなかったり
  - なのでインターネット上にたくさんの独自UITextView実装がある
- いくつか試した感じ[ICTextView](https://github.com/Exile90/ICTextView)がおすすめ
  - ただしテキストが小さい時に一番上までカーソルを持っていくと画面がカパカパするバグがある(困る)

もしバグの修正方法を知っている人がいましたら教えていただけると大変助かります:bow:
backboneの基礎の基礎 第2回[サーバからデータ取得]

今回はサーバサイドからデータを取得します。

前回から変更があるのは**TeamCollection.js**と**TeamAboutView.js**の2ファイル。

まずはまとまったデータを取得するTeamCollection.js。

```js
var app = app || {};

app.TeamCollection = Backbone.Collection.extend ({
	url : '/xxxxx/xxxxx'
});
```
urlプロパティを追加します。
collectionのfetchを行うとデータを取得するのですが、この**url**にリクエストを送ります。

サーバからのレスポンスとして下記のJSONデータをもらう。

```json
[
	{
		'name' : '山田太朗',
		'birthday' : ''1981年3月1日',
		'position' : 'ゴレイロ'
	},
	{
		'name' : '山田次郎',
		'birthday' : ''1981年4月1日',
		'position' : 'フィクソ'
	}

]
```

次はTeamAboutView.js。

前回はべた書きしていたメンバーのプロフィール情報をサーバサイドからもらうので、
そのように変更。

```js

var app = app || {};

app.TeamAboutView = Backbone.View.extend ({
	el : '#about',
	
	aboutTemplate : _.template($('#about-template').html()),
	
	collection : '',
	
	initialize : function() {
		// 通常データはRESTでサーバサイドから取得するが、
		// 今は固定の値を入れる。
		this.collection = new app.TeamCollection();
		
		// データを取得する。
		this.collection.fetch();
		
		// データ取得後に、画面を描画する。
		this.listenTo(this.collection, 'sync' , this.render);
	},
	
	render : function() {
		var that = this;
		
		// コレクションに入っているデータ件数分、メンバーを表示する。
		this.collection.each(function(model){
			that.$el.append(that.aboutTemplate(model.toJSON()));
		});
	},
});

```

collectionのfetchを使うとデータを取得します。(urlに対してリクエストを発生)
そして、listenToメソッドでsyncイベントを監視して、画面を描画(this.render)します。
どーいう事かというと、listenToはbackboneのメソッドでイベントを監視するメソッド。
collectionに対して追加や削除を監視したり、modelの値が変更されたりなどいろいろなメソッドを監視する際に使用します。
そして、今回監視対象としているsyncイベントは正しくデータを取得(同期)した際に発生するイベントです。

正常にデータを取得できたら、renderメソッドで取得したメンバープロフィール分、ぐるぐる回して出力しております。

これでサーバサイドからデータを取得し、そのデータで画面描画します。

簡単だーと思うと思いますが、慣れるまで結構何度もはまりました。。。

こんな感じで書いちゃう事がおおく

```js

		// データを取得する。
		this.collection.fetch();
		
		// データ取得後に、画面を描画する。
		this.render();
```

画面に何も出ん！！！なんでやー！！といらいらします。
console.logでthis.collectionを出力するとちゃんとjsonデータが出力されるのに！！となり、ますますいらいらするという負のスパイラル。

javascriptは基本非同期なので(fetchメソッドもそう)、サーバからの応答は待ちません！
リクエストを発生した時点で次のthis.render()にうつり、まだデータを取得していない状態のcollectionをぐるぐる回そうとし、
この時点では0件なので画面に描画されない。。。
console.logで出力するとオブジェクトは最後の値が出力されるのか？？(仕様なのか？？)、サーバからの取得したデータが出力されちゃいます。

普通に考えれば当たり前なんですが、わりとはまります。。。何度も。

まぁ、簡単ですが以上で、サーバサイドからデータを取得し、それを描画するサンプルです。
[ソースはここにあります](https://github.com/naka4A6/backbone_2)(クライアント側のみ)
動かす場合は、サーバサイドはjsonデータを返却するものを作成し(githubの**サーバからJSONレスポンス.json**参照)、**TeamCollection.js**のurlを変更して下さい。

それでは。
次回以降もbackboneの基本的な事を書く予定。その後はタイトルとそれるけどrequire.jsやmarionette.jsも書いていこーと思っとります。、
Cocos2dx：プロジェクトのリネーム方法

今回は、プロジェクトのリネーム方法です。

・Windows eclipse環境
・Android版開発

が前提です。

最初につけた、com.sample.hogehoge といったプロジェクト名は、往々にして
「別のプロジェクト名、com.sample.fugafugaにしたい」という要望が出てきます。

しかしeclipse上だけhogehogeを変えても、プロジェクト名は変わりません
（Javaのpackage名などは自動で変えてくれるのですが…）。
ここは手動で変える必要があります。

この作業は一歩間違えると二度とビルドできなくなるくらいのダメージになるので、
慎重に行きたいところだと思いますが、今回はその手順です。

eclipse上でcocos2dxのprojectsフォルダの中のプロジェクトフォルダ名も変えようと思うと、
ワークスペースの設定なども変えないといけなくなるので、一番わかりやすく、簡単な方法で行きます。

ではいきます。

１・projectsの中の、リネームしたいプロジェクト、（今回はcom.sample.hogehogeにします）の
フォルダhogehogeをコピーします。
バックアップも兼ねてのコピーです。コピーしたフォルダ名はfugafugaとします。

２・fugafuga/proj.android に移動します。
後ほど、eclipseで「既存のプロジェクトを読み込む」をするわけですが、
その読み込みのための情報はすべてこのフォルダの中にあります。

３・各所のhogehogeをfugafugaに変更していく
以下のhogehogeをすべてfugafugaにしていきます。
エディタの置換ですべて変えていきましょう。

・AndroidManifest.xml
・build.xml
・build_native.sh
・.project

・src/com/sample/hogehoge/hogehoge.java
これは、
src/com/sample/fugafuga/fugafuga.java
にします。

・fugafuga.javaの中にあるhogehogeもすべてfugafugaにします。

同様に、

・bin/classes/com/sample/hogehoge/
も
bin/classes/com/sample/fugafuga/
にします。

・gen/com/sample/hogehoge/
も
gen/com/sample/fugafuga/
にします。

・gen/com/sample/fugafuga/BuildConfig.java
の中にもhogehogeがあるのでこれも変えます。
（bin,genの中は自動生成されるのかもですが、一応）

以下も存在する場合があるようです。
・bin/AndroidManifest.xml
このマニフェストの中も置換で変えましょう。

変更は以上です。

４・既存のプロジェクトとして読み込みます。
あとはeclipseを開きツリーペインの右クリックから、
import > Android > Existing Android Code Into WorkSpace
を選んで、Root Directoryのフォルダ選択から先ほどのproject内のfugafugaフォルダを選択します。

それで無事インポートは終了です。
リネームされていることを確認して下さい。


この作業は、プロジェクトが完成して、次のプロジェクトに移行しようとした際に、
前のプロジェクトのクラス構成を再度使いたいときにも有効です。

メインとなる処理だけごっそり削除して、あとはそこから変えていけば、大幅な時間短縮になるでしょう。

ということで参考まで。
Good luck!
Fluent Bitを試してみる。

Fluent Bitを試してみる。
---

## 概要

FluentBitは、センサなどの組み込み機器向けのデータコレクタで、Fluentdより軽量なようなので、試してみる。
今回は、同梱の標準プラグインを利用して、CPUの情報をFluentdに対して送信する。
という超簡単な動作確認を行った。


## Fluent bitとは

http://fluentbit.io

```
FluentBit is an open source specialized data collector tool for Embedded Linux. It provide built-in metrics and general purpose output interfaces for centralized collectors such as Fluentd.
```

FluentBitは組み込みLinux用のオープンソースの特殊なデータ収集ツールです。
これは、 Fluentdとして、集中のコレクターのための組込みメトリックと汎用出力インターフェースを提供します。

## 構成図

```
  ------------------------------------------------
 | Amazon EC2                                     |
 |                                                |
 |  2.----------  CPUinfo   1.----------------    |
 | | fluent-bit |--------->| docker container |   |
 |  ------------           |                  |   |
 |                         | tagomori/fluentd |   |
 |                          ------------------    | 
 |                                                |                                                 
  ------------------------------------------------
```

## 手順

### 1.データ集約用のfluentdをセットアップ

```#!/bin/bash
# install dependency packages
sudo yum install git docker -y
# start docker service
sudo service docker start
# make log-directory
mkdir /var/log/fluentd
# start fluentd
docker run -d -p 24224:24224 -v /var/log/fluentd:/fluend/log tagomori/fluentd
```

### 2.fluent-bitのセットアップ

```#!/bin/bash
# install dependency packages
sudo yum install git cmake gcc gcc-c++ zlib-devel -y
# clone fluent-bit
git clone https://github.com/fluent/fluent-bit.git
# build
cd fluent-bit/build/
cmake ..
make
# Flush CPU usage to a Fluentd service
fluent-bit -i cpu -o fluentd://localhost:24224
```

### 3.ログの確認

※ホントは、Host側に出力されたLocalファイルをtailするつもりだったが、dockerのローカルボリュームマウントに失敗したので、docker execで確認。

```#!/bin/bash
# tail fluend.log
docker exec lonely_hypatia tail -f /fluentd/log/data.log
```

以下のように、CPUの情報がリアルタイムに転送されて来ていることが分かる。

```
20150521T151321+0000	fluent_bit.cpu	{"cpu":6.0}
20150521T151322+0000	fluent_bit.cpu	{"cpu":1.0}
20150521T151323+0000	fluent_bit.cpu	{"cpu":0.0}
20150521T151324+0000	fluent_bit.cpu	{"cpu":0.0}
20150521T151325+0000	fluent_bit.cpu	{"cpu":0.0}
20150521T151326+0000	fluent_bit.cpu	{"cpu":0.0}
20150521T151327+0000	fluent_bit.cpu	{"cpu":1.0}
20150521T151328+0000	fluent_bit.cpu	{"cpu":0.0}
```

## 所感

すでに、リアルタイムなデータ収集ツールとしては、デファクトスタンダードとなっているFluentdの組み込みLinux版ということで、今後市場の拡大が期待されるIoTの分野において、Fluentdと同様にデータ収集ツールとして不動の地位を獲得するものと期待できる。
２月にリリースされた、Fluentdのバッチ版OSSであるEmbulkのリリース直後と同様に、現時点ではPluginが充実していないが、今後のPluginの拡充状況次第で、一気に流行ると思われる。
bower-railsでRailsのフロントエンド開発を少し幸せにする

今回は`bower-rails`のDSL版を使ってフロントエンドのパッケージ管理を幸せにしようと思います。

# そもそもBowerって何?
- Webのフロントエンド(css/js等)のパッケージ管理ツール
- Railsに依存することなく管理ができる
- `*-rails`みたいにバージョンアップごとに管理する必要がなくなる

# 検証環境
- OS X Yosemite 10.10.4
- Ruby 2.2.2
- Rails 4.2.1
- node 0.12.2
- npm 2.7.5

# 準備
## Git
- bower-railsで利用するパッケージ についてはgitで管理しないので`.gitignore`に下記を挿入する

```.gitignore
vendor/assets/bower_components
```

## Node.js
- `brew install node`で`node.js`をインストール
- `npm install -g bower`でbowerをインストール

## RubyGems
- `Gemfile`に以下を追加

```rb:Gemfile
group :development, :test do
  
   gem 'bower-rails'
end
```

`rails new`した際に生成される`jquery-rails`についても後から`bower-rails`でインストールするので削除してもOK

- `bundle install --path=vendor/bundle`で当該gemをインストール

# bower-railsでパッケージのインストール
今回はDSLを使う

- `rails g bower_rails:initialize`で`Bowerfile`を生成
- `Bowerfile`に使用したいパッケージを以下のように記述する

	※ 先ほど`jquery-rails`を削除した場合は`jquery-ujs`を`Bowerfile`に記述しないと`jquery-ujs`がない状態なので色々動かなくなるよ

```rb:Bowerfile
asset 'jquery-ujs'
asset 'bootstrap-sass'
asset 'fontawesome'
```

- `rake bower:install`を実行して`Bowerfile`内のものを`vendor/assets/bower_components`にインストール

# bower-ralisでインストールしたパッケージの有効化

- `vendor/assets/bower_components`以下のパスを記述すること
- `require`するコンポーネント名は小文字でなければいけないっぽい


```js:app/assets/javascripts/application.js
//= require jquery
//= require jquery-ujs
//
//= require bootstrap-sass
//  ...
//= require_tree .
```

```css:app/assets/stylesheets/application.css
/*
 *= require bootstrap-sass
 *= require fontawesome
 *
 *= require_tree .
 *= require_self
 */
```

- 有効化されなかったりエラーが出る場合は`bower_components`以下のPATHを確認してみてください

# DSLを使いこなす
`bower-rails`のDSLを使いこなすことで以下のようなことが可能になります。

- assets pathの指定
- 指定URLのリポジトリの使用
- 指定したバージョンの設定
- リポジトリ内のファイルの指定

詳しくは以下を参考にしてください。
[bower-rails - Ruby DSL configuration](https://github.com/rharriso/bower-rails#ruby-dsl-configuration)

# サンプル
GitHubにサンプルをpushしたので参考程度に。
[bower-rails-dsl](https://github.com/MasahiroSakoda/bower-rails-dsl)

# 参考
- [bower(本家)](https://github.com/bower/bower)
- [bower-rails](https://github.com/rharriso/bower-rails)
- [bower-rails - Ruby DSL configuration](https://github.com/rharriso/bower-rails#ruby-dsl-configuration)
Pandocローカルでのビルドからテスト実行まで

Pandoc開発環境を整えるまでの備忘録。

Haskell環境構築。時間かかる。CabalはHaskellのパッケージマネージャーにあたる。

```shell-session

$ brew install ghc cabal-install
$ cabal update
$ cabal install cabal-install
```

git clone

```shell-session
$ git clone git://github.com/jgm/pandoc.git
$ cd pandoc
$ git submodule update --init
```

cabal-sandboxを利用し、Pandoc専用のcabal環境を用意する(依存関係で悩まないようにするためなので必須ではない)。

それなりに時間がかかる。

```shell-session

$ cabal sandbox init
$ make deps
```

テストを実行する。

```shell-session

$ cabal configure --enable-tests
$ cabal build
$ cabal test
Preprocessing library pandoc-1.14.0.4...
In-place registering pandoc-1.14.0.4...
Preprocessing test suite 'test-pandoc' for pandoc-1.14.0.4...
Running 1 test suites...
Test suite test-pandoc: RUNNING...
Test suite test-pandoc: PASS
Test suite logged to: dist/test/pandoc-1.14.0.4-test-pandoc.log
1 of 1 test suites (1 of 1 test cases) passed.
```
screenコマンドの要点

linuxサーバーにSSHログインして何か作業をしていて、突然通信が途絶えたり、PCの電源が落ちたりすると、実行中の処理が中断されてしまいますが、**screen**を使うとそういう不安から開放されます。

詳細は[man](http://linuxjm.sourceforge.jp/html/GNU_screen/man1/screen.1.html)に書いてあるので、ここでは最低限覚えておくといい事だけを書きます。

## 用語

| 語句 | 意味 |
| ---- | ---- |
| セッション | `screen`が作る仮想端末。1つのセッションの実体は1つのscreenプロセス。 |
| ウインドウ | セッション内での仮想的なウインドウ。1セッションに複数作って、切り替える事ができる。ウインドウの実体はscreenプロセスの子プロセスとして動作するシェル。 |
| デタッチ | セッションから切断すること。デタッチしてもセッションは生き続ける。 |
| アタッチ | デタッチしたセッションに再接続すること |

## 基本的な操作
新しいセッションを作る。

``` .bash
$ screen
```

セッションからデタッチする

``` .bash
# Ctrlを押しながらa、その後d(Ctrlは離して)
Ctrl-a d
# またはCtrlを押しながらa、その後d(Ctrlは押したまま)
Ctrl-a Ctrl-d
```

既に存在するセッションを一覧表示

```
$ screen -ls

#すると、こんなのが表示される。
There are screens on:
	16472.pts-1.1hz	(Detached)
	17496.pts-1.1hz	(Detached)
# 数字はpid。アタッチするときに使う。
```

他のだれもアタッチしてないセッションにアタッチ

``` .bash
$ screen -r <pid>
# もし、セッションが1つしかないなら
$ screen -r
# でもOK
```

セッション内で新しいウインドウを作る

``` .bash
Ctrl-a c
# または
Ctrl-a Ctrl-c
```

直前に表示していたウインドウに切り替える

``` .bash
Ctrl-a Ctrl-a
```

次のウインドウに切り替える

```
Ctrl-a n
# または
Ctrl-a Ctrl-n
```

前のウインドウに切り替える

```
Ctrl-a p
# または
Ctrl-a Ctrl-p
```

セッション内のウインドウを一覧表示する。
一覧では`j`,`k`キーで表示するウインドウを選択出来る。

``` .bash
Ctrl-a "
```

現在のウインドウに名前をつける

``` .bash
Ctrl-a A
```

現在のウインドウを閉じる

``` .bash
Ctrl-a k
```


他の誰かにアタッチしてるセッションを横取り

``` .bash
$ screen -d -r <pid>
```

## コマンド
`Ctrl-:`と入力するとコマンドを受け付けるモードに入ります。
コマンドによってscreenの挙動を変更することができます。

http://www.gnu.org/software/screen/manual/screen.html#Commands
rubyのヒアドキュメントは <<~ でほぼOK説

もはやrubyのヒアドキュメントは`<<~`でほぼOKじゃなかろうか。

```.ruby
def what_to_buy
  onion = "たまねぎ"
  text = <<~EOS
    買うものリスト:
      * にんじん
      * #{onion}
      * スパイス
        + ターメリック
        + クミン
        + コリアンダー
  EOS
  puts text
end
```

結果

```
買うものリスト:
  * にんじん
  * たまねぎ
  * スパイス
    + ターメリック
    + クミン
    + コリアンダー
```

`<<~`には以下の特徴があります。

* 区切り文字(ここでは`EOS`)をインデントして書けるので美しい
* 共通インデントは削る。(上では全ての行に4つ以上スペースが有るので、全行の先頭4スペースを削る)
* `#{onion}`の様に式展開する


稀に`<<~`では駄目な場合も有るので一応他の書き方も。

| 書式 | 説明 |
| ---- | ---- |
| `<<EOS 〜 EOS` | **式展開される**。終端のEOSは**必ず行頭に書く**。 |
| `<<'EOS' 〜 EOS` | **式展開されない**。終端のEOSは**必ず行頭に書く**。|
| `<<-EOS 〜 EOS` | **式展開される**。終端のEOSを**インデントできる**。 |
| `<<-'EOS' 〜 EOS` | **式展開されない**。終端のEOSを**インデントできる**。 |


※ 上記4つはどれも`<<~`が持つ**`共通インデントを削る`**という効果は有りません。
rubyでインスタンスメソッドの処理をクラスメソッドに委譲する

rubyでクラスメソッドに実装されている処理を、そのクラスのインスタンスメソッドをコールした時も実行したいことってよく有ります。
コードで書くとこういうことがしたいんです。

```rb
class Hoge
	def self.echo(msg)
		puts msg
	end
	
	def foo
		echo('foo was called') # これがしたいけどエラーになる
		Hoge.echo('foo was called') # これはエラーにならないけど、「Hoge」と書くのが面倒
	end
end
```

これを実現するには**Forwardable**モジュールを使います。

```rb
require 'forwardable'
class Hoge
	extend Forwardable
	
	def self.echo(msg)
		puts msg
	end

	def_delegators self, :echo

	def foo
		echo('foo was called')
	end
end
```

委譲したいクラスメソッドが複数ある場合は、以下のように好きなだけ`def_delegators`の引数に渡せばいいです。

```rb
def_delegators self, :echo, :some_method, :another_method
```

### 少し高度な話
サブクラスでは(スーパークラスではなく)サブクラスのクラスメソッドに委譲したい場合、サブクラスでも`def_delegators`をコールします。

```rb
require 'forwardable'
class Hoge
	extend Forwardable
	
	def self.echo(msg)
		puts msg
	end

	def_delegators self, :echo

	def foo
		echo('foo was called')
	end
end

class HogeChild < Hoge
	def self.echo(msg)
		puts "#{msg} by HogeChild"
	end
	def_delegators self, :echo # これが無いとHogeChild#echoをコールした時にHoge.echoがコールされる
end
```
PHPのerror_logと同じことをrubyでやる方法

PHPの**error_log**関数は手軽にログを出力するのに便利ですね。
さて、PHPの経験が有る人がrubyを学習すると必ず出くわす疑問が、
「rubyでerror_log関数と同じことをするにはどうするのが一番簡単なの？」
です。

その答えはこちらです。

``` .ruby
open("hogehoge.log", "a") { |f| f << "hogehoge" }
```

なんかややこしいですね。

rubyではログ出力をする場合は**Logger**クラスを使う方が正攻法ですので、そちらをオススメします。
NSURLRequestのキャッシュを無効にする方法

**NSURLRequest**や**NSMutableURLRequest**を特にオプションを指定せずに使うと、サーバーからのレスポンスをキャッシュしてしまいます。
キャッシュを無効にするには以下の様に**cachePolicy**に**NSURLRequestReloadIgnoringLocalCacheData**を指定します。

``` .objectivec
NSURLRequest *request = [NSURLRequest requestWithURL:baseURL
    cachePolicy:NSURLRequestReloadIgnoringLocalCacheData
    timeoutInterval:10];
```

cachePolicyに指定できるオプションは以下のいずれかです。

| 値 | 効果 |
| --- | ----- |
| NSURLRequestUseProtocolCachePolicy | デフォルト。キャッシュが有り、それがまだ有効ならそれを使う。そうでなければサーバーから取得する。 |
| NSURLRequestReloadIgnoringLocalCacheData | キャッシュを使用せず常にサーバーにリクエストする。 |
| NSURLRequestReturnCacheDataElseLoad | キャッシュデータがどれだけ古かろうが、キャッシュが有ればそれを使う。キャッシュがない場合だけサーバーにリクエストする。 |
| NSURLRequestReturnCacheDataDontLoad | キャッシュが有ればそれを使う。キャッシュがなければサーバーにリクエストすることなく失敗する。 |
topコマンドで覚えておくと便利なテクニック

# 起動後に使える便利なキー

linuxのtopコマンドはそのままでも十分役に立ちますが、以下のキーを覚えておくと格段に便利になります。

| キー | 説明 |
| ---- | ------ |
| h | ヘルプ画面を表示 |
| q | 終了 |
| 1 | CPUコア毎の使用率の表示切替 |
| z | 色付き表示の切替 |
| x | ソート列のハイライト表示切替 |
| shift + > | ソート列を右に移動 |
| shift + < | ソート列を左に移動 |
| c | COMMAND欄の表示内容を切り替え|

上記のキーの中でも、特にハイライト表示とソートの組み合わせは非常に見やすいのでお勧めです。
topを立ち上げて、`z`と`x`を押す（同時ではなく、別々に押す）とどの行でソートされているか分かるようになります。
その状態で`shift + >`や`shift + <`を押すとソート列を移動出来ます。

cを使ったCOMMANDの表示切替も便利です。
初期状態では以下のように実行しているプログラム名の一覧がでますが、

```
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
32506 root      20   0  237m  98m    0 S  0.0 20.0   1:08.63 bundle
32656 root      20   0  228m  98m    0 S  0.0 20.0  13:11.63 bundle
19333 root      20   0  581m  36m    0 S  0.0  7.5   7:35.42 dockerd
```

`c`を押すと以下の様に実行コマンドをオプション付きで表示します。。

```
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
32506 root      20   0  237m  98m    0 S  0.0 20.0   1:08.64 puma 3.11.4 (tcp://0.0.0.0:3000) [app]
32656 root      20   0  228m  98m    0 S  0.0 20.0  13:11.67 sidekiq 5.1.3 app [0 of 5 busy]
19333 root      20   0  581m  36m    0 S  0.0  7.5   7:35.44 /usr/bin/dockerd --default-ulimit nofile=1024:4096
```
よく使うdateコマンドのオプションと使用例

現在時刻(システムクロック)を表示

```
date
```

フォーマット指定して時刻を表示

```
date +'%Y-%m-%d %H:%M:%S'
```

時刻(システムクロック)をセット

```
date -s '2020-12-31 11:22:33'
```

よく使うフォーマット指定子

| 指定子 | 説明 | 
| -------- | ----- |
| %Y | 年(西暦4桁) |
| %y | 年(西暦の下2桁) |
| %m | 月(01〜12) |
| %d | 日(01〜31) |
| %H | 時(00〜23) |
| %M | 分(00〜59) |
| %S | 秒(00〜59) |
| %s | 1970-01-01 00:00:00 UTC からの秒数 |
| %w | 曜日番号(日曜が0) |
| %z | +0900形式のタイムゾーン |
| %Z | 英字表記のタイムゾーン(JSTなど) |

#### おまけ

ハードウェアクロックをシステムクロックで上書きする

```
hwclock --systohc
```

システムクロックをハードウェアクロックで上書きする

```
hwclock --hctosys
```
MacでGLUT+OGL＃2

 
記述の動機
GLUT+OGLがMacではサクッと環境構築できることを知りました。
使わない手はないので、少しづつまとめていきます。

```cpp:point.cpp
#include <GLUT/glut.h>

#define WIDTH 640
#define HEIGHT 480

void Point(int x,int y,float size){
	glPointSize(size);
	glBegin(GL_POINTS);
	glVertex2i(x , y);
	glEnd();
}
void display(void)
{
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
	glColor4f(0.0f,0.0f,1.0f,1.0f);
	Point(50,50,2.0);
	glColor4f(0.0f,1.0f,0.0f,1.0f);
	Point(400,400,5.0);
	glFlush();
}
void Init(){
	glClearColor(0.0, 0.0, 0.0, 0.0);
	glOrtho(0, WIDTH, HEIGHT, 0, -1, 1);
}
int main(int argc, char *argv[])
{
	glutInitWindowPosition(100, 100);
	glutInitWindowSize(WIDTH, HEIGHT);
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_RGBA);
	glutCreateWindow("Draw Points");
	glutDisplayFunc(display);
	Init();
	glutMainLoop();
	return 0;
}
```

```コンパイルコマンド
g++ -o point.out point.cpp -framework GLUT -framework OpenGL
```
点の描画。簡単ですね。
![スクリーンショット 2015-06-10 23.43.41.png](https://qiita-image-store.s3.amazonaws.com/0/33317/55098fe8-1aae-e2d5-8e80-54b0464a0253.png "スクリーンショット 2015-06-10 23.43.41.png")
DDMSやAndroid Studioを使わずにCUIでAndroid端末のスクリーンショットを撮る


Android SDK内に`screenshot2`というコマンドが含まれているので基本的にはそれを呼び出すだけでOKです。

```bash
$ screenshot2 out.png
```

自分は何枚も連続で撮ったりすることも多いので、コマンド実行を簡易化するために`.bash_profile`で以下のaliasを作成しています。
ポイントは撮影時間をファイル名に付けているところです。

```bash
# Android
alias screenshot='FILENAME=`date +"%Y%m%d_%I%m%S"`.png && screenshot2 $FILENAME && open $FILENAME'
```

これで準備完了です。
実行時は以下のようにコマンドを打つだけです。
かんたん！！

```bash
$ screenshot
```
ハートビーツさんのNginxの記事が素晴らしすぎるのでリンク集を作りました

株式会社ハートビーツさんのNginx連載記事が神資料だったので勝手にリンク集を作りました。

## Nginx連載シリース

[nginx連載1回目:nginxの紹介](http://heartbeats.jp/hbblog/2012/01/nginx01.html)
[nginx連載2回目:nginxのインストール ](http://heartbeats.jp/hbblog/2012/02/nginx02.html)
[nginx連載3回目:nginxの設定、その1](http://heartbeats.jp/hbblog/2012/02/nginx03.html)
[nginx連載4回目:nginxの設定、その2](http://heartbeats.jp/hbblog/2012/04/nginx04.html)
[nginx連載5回目:nginxの設定、その3](http://heartbeats.jp/hbblog/2012/04/nginx05.html)
[nginx連載6回目:nginxの設定、その4 - TLS/SSLの設定](http://heartbeats.jp/hbblog/2012/06/nginx06.html)

## その他のNginx記事 

[Nginx ユーザ会 #0 に行ってきました！](http://heartbeats.jp/hbblog/2014/06/nginx-ug-jp-0.html)
[CentOSにmainlinのnginxをyumでインストール](http://heartbeats.jp/hbblog/2014/06/centosmainlinnginxyum.html)
[nginxをdockerで動かす時のTips 3選](http://heartbeats.jp/hbblog/2014/07/3-tips-for-nginx-on-docker.html)
[nginxパッケージの選び方@CentOS6、Ubuntu14.04](http://heartbeats.jp/hbblog/2014/07/nginxconfigure.html)
[mod_rewriteをnginxに移植するコツはifを使わないコト！](http://heartbeats.jp/hbblog/2014/12/mod-rewritenginxif.html)

## Slideshare

http://www.slideshare.net/ttkzw/nginx-primer

## よた話：どうやってリンク集を作ったのか？

手動で作ったら負けだと思って自動で生成しました。

まず、当該ブログの「Nginxカテゴリ」のページ (http://heartbeats.jp/hbblog/nginx/) を開いたところ、ここにはリンクが全部ありませんでした。

そこで作戦を変えて、Google検索結果をスクレーピングできないか検討しました。

Google検索で "site:heartbeats.jp/hbblog/ nginx" のようにすると、サイト内検索ができます。

https://www.google.co.jp/search?q=site%3Aheartbeats.jp%2Fhbblog%2F+nginx

デフォルトでは検索結果が10件しか表示されないので、検索設定画面から

* 「インスタント検索の結果は表示しない」を選択
* ページあたりの表示件数を20件に変更

こうすると1画面でNginxの全記事を表示できるようになりました。

つぎに、この画面から記事件名とURLを抽出しようと考えました。
ところがGoogleの検索結果画面ではjQueryが使われていないので(当たり前)、簡単にスクレーピングできそうにありませんでした。

そこで、

* jQueryのソースコードをダウンロード http://code.jquery.com/jquery-2.1.4.js
* ソースコードをまるごとクリップボードにコピー
* GoogleChromeのデベロッパーツールを開いて、jQueryソースコードをコピー

これでGoogleのサイトでもjQueryが使えるようになりました。

あとは、下記のようにDOM走査するワンライナーを書いてしてリンク集を生成しました。

```
$('li.g').each(function(ix, elm){ var a = $(elm).find('h3.r a');console.log("[" +  a.text() + "](" + a.attr('href') + ")" )});
```

(作業し始めたらスクレーピングそのものに熱中しだしてNginxそっちのけになっていたのは内緒です)

# 謝辞
ハートビーツさん++です！
素晴らしい記事をありがとうございます。
PHPで８王妃問題

#PHPで８王妃問題

```php:eightQueen

$queen = new Queen();
$queen->set(0);
echo '答えは全部で' . $queen->getCount() . '個です。';

```

```php:Queen

Class Queen {
    private $answer;
    private $checkRowArray;
    private $checkRightdiagonalArray;
    private $checkLeftdiagonalArray;
    private $count;
    
    public function __construct() {
        $this->checkRowArray           = array_fill(0, 8, false);
        $this->checkRightdiagonalArray = array_fill(0, 16, false); 
        $this->checkLeftdiagonalArray  = array_fill(0, 16, false);
        $this->count=0;
    }
    
    public function display() {
        for ($i = 0; $i < 8; $i++) {
            echo $this->answer[$i];
        }
        echo '<br>';
    }
    
    public function set($row) {
        for ($column = 0; $column < 8; $column++) {
            if ($this->checkRowArray[$column] == false 
                    && $this->checkRightdiagonalArray[$row + $column] == false 
                    && $this->checkLeftdiagonalArray[$row - $column + 7] == false )
            {
                //クィーンをおける時
                $this->answer[$row] = $column;
                if ($row == 7) {
                    $this->count++;
                    self::display();
                }
                else {
                    $this->checkRowArray[$column]                      = true;
                    $this->checkRightdiagonalArray[$row + $column]     = true;
                    $this->checkLeftdiagonalArray[$row - $column + 7]  = true;
                    self::set($row + 1); //次の行
                    
                    //最後初期化
                    $this->checkRowArray[$column]                      = false;
                    $this->checkRightdiagonalArray[$row + $column]     = false;
                    $this->checkLeftdiagonalArray[$row - $column + 7]  = false;
                }
            }
        }
    }
    
    public function getCount() {
        return $this->count;
    }
}

```



参考書籍
明解 Javaによるアルゴリズムとデータ構造
jQueryの基本 〜いじる要素の指定〜


爆速でマスターするため、専門的なことはハショってます！
はい！覚え書きです！

# いじる要素(DOM要素)の指定方法

## idとかclassで指定

下記のようなhtmlの場合

```
  <ul id="main">
    <li>0</li>
    <li class="item">1</li>
    <li class="item">2</li>
    <li>
      3
      <ul id="sub">
        <li>3-0</li>
        <li>3-1</li>
        <li class="item">3-2</li>
        <li class="item">3-3</li>
      </ul>
    </li>
  </ul>
```
こんな感じで指定できます。

```
//id指定
    $('#sub').css('color','red');
//class指定
    $('.item').css('color','red'); 
```


## idとかclassに記号を加えたもの

// > 直下の子要素
// , 複数の要素
// + 隣接する要素

```
// > 直下の子要素
	$('#main > .item').css('color','red');
```
```
// , 複数の要素
	$('p, .item').css('color', 'red');
```
```
// + 隣接要素(この場合.itemの横の.itemのテキストが赤くなる)
	$('.item + .item').css('color', 'red');
```

## フィルタを使う

```
//eqフィルタ
    //番号で指定した要素を指定できる(※0からカウントが始まる)
    $('#sub > li:eq(3)').css('color', 'red');
```
```
//:gt() greater than（指定した数字より大きい物を選択）
//:lt() less than (指定した数字より小さい物を選択)
    $('#sub > li:gt(0)').css('color', 'red');
    $('#main > li:lt(2)').css('color', 'blue');
    ※以上、以下ではないので注意
```
```
// :even 偶数
// :odd 奇数
    $('#sub > li:even').css('color', 'red');
    $('#main > li:odd').css('color', 'blue');
```
```
// :contains
//('pならp要素の中のものを指定する
//<p>ちょめhoge</p>なら「ちょめ」でも「hoge」でもOK')
    $('#sub > li:contains("hoge")').css('font-weight', 'bold');
```

# メソッドを使ったいじる要素(DOM要素)の指定

```
//parent(), children() 親要素と子要素
    $('#sub').parent().css('color', 'red');
    //※この場合#subの親要素のみではなく、#sub自身も含む
    
    $('#sub').children().css('color', 'red');
    //※この場合#subの子要素のみではなく、#sub自身も含む
```

```
// next()　１つ次の要素
    $('#sub li:eq(2)').next().css('color', 'red');
    
// prev()　1つ前の要素
	$('#sub li:eq(2)').prev().css('color', 'red');
    
```

# 属性で指定

```
   // 属性による指定とは？
    /* 例
      <a href="http://google.com">google</a>
      があったとしたら「a要素の　href属性が　http://google.comのもの」を指定する。
      ということ。
    */
    
    $('a[href="http://google.com"]').css('background-color', 'red');
   
```
```
// href="http://google.com"のイコール部分は判定なのでほかにもいくつかある。
    // =
    // != 否定
    $('a[href!="http://google.com"]').css('background-color', 'red');
    
    // *= 〜が含まれる (先頭はアスタリスク)
    $('a[href*="dotinstall"]').css('background-color', 'green');
    
    // $= 〜で終わる
    $('a[href$="com"]').css('font-weight', 'bold');
    
    // ^= 〜で始まる
    $('a[href^="v"]').css('text-decoration', 'underline');

```
jQueryの基本


爆速でマスターするため、専門的なことはハショってます！
はい！覚え書きです！

# 基本のポイント

https://jquery.com/download/

・最新のブラウザしか使わない場合はver2.X系を使えばよい
※大体は古いブラウザも使うので1.X系を使う
・最近はbodyの閉じタグ直前が多い。
・scriptは必ずjqueryのscriptを読み込ませた後にscriptを書くこと
・仕事で使う場合はダウンロードして使用するのが安全！


# 初めの書き方

```
$(document).ready(function () {

	//ここに処理を記述する
});
```

省略形があるのでそちらを使うのが一般的

```
$(function () {
	//ここに処理を記述する
});
```

# 基本文法
```
// こんなhtmlがあったら
<p>ここの文字色がかわる</p>
```
```
// スクリプトはこんな感じ
  <script src="http://code.jquery.com/jquery-1.11.3.min.js"></script>
  <script type="text/javascript">
　// $(document).ready(function (){
  $(function () {

    //pタグの文字色を変更する
     $('p').css('color','red');
  });
  </script>
```

## 注意点
* 文末のセミコロンは忘れずに。
Oracleの内部文字セットがSJISの場合、Javaから文字化けさせずに接続するにはorai18n.jarも必要だとようやく分かったお話

泣きたくなるほどハマり時間を浪費してしまったので、この悲劇を繰り返さないために。

## 背景
とあるJavaのWebアプリを仮想環境へと移行したら動かなくなっていた、というものについて調査。
見てみるとOS,Java,Webサーバがすべて旧環境と異なるという状態だった。
エラーとしては、”？？？”という文字列をパースできません、と言う内容だった。
この時点で文字コード関連だという判断はできていたが、どこが原因箇所かは最後になるまで分からなかった。

## 原因だったもの
Oracleの内部キャラセットがSJIS(EUCも？)の場合は、文字化けを起こさずに接続するために
JDBCだけでなく**orai18n.jar**というjarファイルが必要(使用するOJDBCと同じバージョン)。
これが足りなかった。
これを配置した後再起動すると正常に動作するようになった。
知っていれば真っ先に確認し対応できた問題。いわゆる「知ってりゃ5分で解決できる問題」

## やったこと

* Javaのバージョンを同じに
* Webサーバのバージョンを同じにしようとしたがセキュリティの関係で断念
* JVMのオプションのLANGとかDfileencodingとかも色々変更
* NLS_LANGを色々変更
* ソースの文字コード、View側の表示文字コード、いろんなとこの文字コードを確認
* どうやっても解決しないので頭を抱えてうぐぐと唸る

結果的に解決までほぼ丸2日かかってしまった。

## 勉強になったこと

* **orai18n.jar**、超重要。

* 文字コード問題は本当に原因箇所となりえるものが多くてつらい。

* 基礎知識足りてない。これはOracleにある程度詳しければ知識として得られていたはず。
OracleBronze(Bronzeしか持ってないんです。。)の資格が泣いている。
MacでGLUT+OGL＃1

 
記述の動機
GLUT+OGLがMacではサクッと環境構築できることを知りました。
使わない手はないので、少しづつまとめていきます。

```cpp:01.cpp
#include <GLUT/glut.h>

#define WIDTH 640
#define HEIGHT 480

void display(void)
{
	glClear(GL_COLOR_BUFFER_BIT);
	glFlush();
}

void init(void)
{
	glClearColor(0.0, 0.0, 0.0, 1.0);
}


int main(int argc, char *argv[])
{
	glutInitWindowPosition(100, 100);
	glutInitWindowSize(WIDTH, HEIGHT);
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_RGBA);
	glutCreateWindow("GLUT+OGL Sample");
	glutDisplayFunc(display);
	init();
	glutMainLoop();
	return 0;
}
```

```コンパイルコマンド
g++ -o 01.out 01.cpp -framework GLUT -framework OpenGL
あらら、バージョンが上がって結構なワーニングがでちゃう。
少し乱暴だが、-w を追加します。
g++ -o 01.out 01.cpp -framework GLUT -framework OpenGL -w
はい、ワーニングは抑制されました。
あっさりと画面が出来ました。
```
![スクリーンショット 2015-06-10 23.28.31.png](https://qiita-image-store.s3.amazonaws.com/0/33317/640a17e3-54ce-39dc-46b4-85d844beae02.png "スクリーンショット 2015-06-10 23.28.31.png")
RailsでJSアセット内でURLヘルパーを使えるようにする技

例えば、Rails開発で、**app/assets/javascripts/hoge.js**ファイル内に、APIのURLを埋め込みたいとする。そのURLを直に書いてもいいけど、URLヘルパーを使って書きたいなぁと思ったらこうする。

**config/initializers/assets.rb**に以下を追加する。

```rb
Sprockets::Context.send :include, Rails.application.routes.url_helpers
```

そして、**app/assets/javascripts/hoge.js**は**app/assets/javascripts/hoge.js.erb**に名前変更する。

そして、そのjsファイル内に

```rb
<%= hogehoge_url %>
```
もちろん、**hogehoge_url**が解決できるよう**routes.rb**は設定済みとする。

URLヘルパー以外にも自分で作った便利なモジュールなんかもincludeすれば、幸せになれるかもしれない。
アイコンフォントのつくりかた

デザイン会社からpsdだけ納品されてて、人出も足りないしエンジニアが自分でアイコン抜き出さないといけない、折角だしアイコンフォントにしよう、なんてことありますよね？

「実はPhotoshopろくに触ったことないんだけど、どうしよう」とか思ってたら意外と簡単にできたので、やり方を共有します。

## アセット抽出

まずはPhotoshop CCを使って、アイコンにしたい部分をsvgとして抽出します。

* アイコンにしたいレイヤーを選択
 * レイヤーにまとまっていない場合は、事前にグループ化しておく
* ファイル -> アセット抽出を選択
* 別窓でファイルタイプをsvgに変更する
* 抽出ボタンを押して、後は画面に従って適当な場所に保存する

## アイコンフォント化

今回は[Icomoon](https://icomoon.io/app/)を使います。簡単な編集ができたり、フリーなアイコンが選べたり、色々便利です。

* Import Iconsを押して先ほど抽出したsvgファイルを選択する
* Edit（画面上にあるえんぴつのやつ）を押してからインポートしたアイコンを選択して、大きさなどを調整
 * 調整した後にsvgでエクスポートしてとっておくと、後々便利かも
* Select状態にしてフォント化したいアイコンを選択し、画面下にあるGenerate Fontを押す
* 後ほどクラス名になる部分を変更できるのでやっておく
* Downloadを押すとzipをダウンロードできる

## ソースコードに反映

* ダウンロードしたzipを解凍し、fontsファイル以下すべてとstyle.cssを配置する
* style.cssの中身は、fontのファイルパスを調整したり、使いやすいように変更しちゃってもOK

ちなみに、zipの中身をそのままApacheなどが動いている社内サーバとかに配置しておくと、メンバーがいつでも見れるチートシートになって便利だと思います！

## まとめ

ということで、わかってしまえば簡単な作業なので、Photoshop初心者な自分みたいな方のお役に立てれば幸いです。
React Nativeチュートリアル


React Nativeをはじめるときにみるとよいリンクをまとめました。

* <a href="https://facebook.github.io/react-native/" target="_blank">React Native | A framework for building native apps using React</a>

# 概要
* <a href="http://qiita.com/naoya@github/items/ecda4d3089902dcbea53" target="_blank">React Native ファーストインプレッション - Qiita</a>



# チュートリアル
* <a href="https://facebook.github.io/react-native/docs/tutorial.html#content" target="_blank">React Native 公式 Tutorial</a>
    * ListViewをつくりながら基本的なことを学ぶ。
* <a href="https://github.com/facebook/react-native/tree/master/Examples/Movies" target="_blank">react-native/Examples/Movies</a>
    * 公式チュートリアルでやったこと＋αができるアプリ例。完成させたListviewに、ナビゲーションや検索、無限スクロールなどをつけるまでができる。
* <a href="http://www.raywenderlich.com/99473/introducing-react-native-building-apps-javascript" target="_blank">Introducing React Native: Building Apps with JavaScript</a>
    * 公式チュートリアルと技術的には同じようなことを、別アプリでつくる記事。



# Flux

* <a href="http://shoheik.hatenablog.com/entry/2015/05/03/180435" target="_blank">React NativeでFluxを使う - Debuginfo</a>
    * 具体的なフォルダ構成が設計されており参考になる。
* <a href="https://moneyforward.com/engineers_blog/2015/03/30/flux-todo/" target="_blank">ReactとReactNativeでFluxなTODOを実装してみた話 | マネーフォワード エンジニアブログ</a>
    * 導入にはよい記事。
* <a href="http://qiita.com/susieyy/items/aa8ad519cc62dd7ae592" target="_blank">ReactNativeのサンプルを集めてみました - Qiita</a>
    * Fluxでないものも含まれるが、React Nativeとして参考になる構成のソースが掲載してある。
* <a href="https://github.com/przeor/React-Native-example-FLUX-starter-kit-for-ios" target="_blank">przeor/React-Native-example-FLUX-starter-kit-for-ios</a> 
    * WIPなReact Native+Flux Starter Kit。
Railsのアセットのプリコンパイル対象の追加と除外方法

## デフォルトのコンパイル対象

Railsではアセットのプリコンパイルを行うために以下のRakeタスクを実行します。

```rb
rake assets:precompile
```

これによって**app/assets**ディレクトリの中のファイルの内、**.js**と**.css**ファイル以外の全てのファイルがコンパイルされます。ただし、**application.js**と**application.css**はコンパイルされます。
このようになっているのは**application.js**や**application.css**からインクルードされるだけのファイルがコンパイルされることを防ぐためです。

## コンパイル対象の追加
**hogehoge.coffee**をコンパイル対象に追加して**hogehoge.js**を生成したい場合は**config/initializers/assets.rb**に以下の行を追加します。

```rb
Rails.application.config.assets.precompile << 'hogehoge.js'
```

**hogehoge.coffee**ではなく、**hogehoge.js**を追加していることに注意して下さい。

**fugafuga.scss**をコンパイルして**fugafuga.css**を生成したい場合も同様に

```rb
Rails.application.config.assets.precompile << 'fugafuga.css'
```
とします。

## コンパイル対象の除外

時々、**app/assets**ディレクトリの中に**.json**や**.html**などの拡張子を持つファイルを置きたくなることがあります(それが良いどうかは置いといて)。
そして、それらをプリコンパイル対象から外したい場合には以下の様に**config/initializers/assets.rb**に記述します。

```rb
# .js .css .html .jsonファイルはコンパイルしないようにする
precompile_target = lambda do |filename, path|
  puts filename
  path =~ /app\/assets/ && !%w(.js .css .html .json).include?(File.extname(filename))
end
Rails.application.config.assets.precompile = [
  precompile_target,
  /(?:\/|\\|\A)application\.(css|js)$/
]
```

コンパイル対象を追加したい場合は、この下にさきほど紹介したコードを書きます。

## 参考(デフォルトの挙動の実装)
**config.assets.precompile**のデフォルト値は以下の様に実装されています。

sprockets-rails-2.2.4/lib/sprockets/railtie.rb:60

```rb
LOOSE_APP_ASSETS = lambda do |filename, path|
  path =~ /app\/assets/ && !%w(.js .css).include?(File.extname(filename))
end
```

sprockets-rails-2.2.4/lib/sprockets/railtie.rb:75

```rb
config.assets.precompile = [LOOSE_APP_ASSETS, /(?:\/|\\|\A)application\.(css|js)$/]
```
Sphinx+PlantUML+Browser-Syncでサクサクドキュメント開発


タイトルまんまなんだけど。

SphinxとPlantUMLとGulpとBrowser-Syncでドキュメントをサクサク書けるようにしてみた。
https://github.com/sonodar/sphinx-plantuml-browsersync

Windowsでも可。npmやpipのインストールでコケる場合はMSBuildにパスを通す必要があるかも。

以下、各要素の概要。

### Sphinx

reStructureTextというMarkdownみたいな記法でドキュメントを生成するコマンドラインツール。Python製。

### PlantUML

独自の記法(DSL)で記載したテキストをUMLの図に変換するコマンドラインツール。Java製。

### Browser-Sync

HTMLファイル等の変更をリアルタイムにブラウザに反映させるNode.js製のライブラリ。

上記とGulpのファイル変更検知機能(watch)と併せて利用することでドキュメントを編集した内容がブラウザに即時反映されるようにしている。
Bit演算チートシート

## 追記
これも参照すればいいと思うよ
[すばらしいビット](
http://postd.cc/awesome-bits/?utm_content=buffer269d0&utm_medium=social&utm_source=twitter.com&utm_campaign=buffer)
(原本: https://github.com/keon/awesome-bits)

---
あの、アレ、なんだっけ？

(俺こんなのも知ってるぜ、という方は教えていただけれると喜びます)
#and[&] , or[|]
二項演算
両ビットが立っていたら真

```
 > 1011 0100
 > 1001 1010
[&]1001 0000
```

どちらかのビットが立っていたら真

```
 > 1011 0100
 > 1001 1010
[|]1011 1110
```
#xor[^]
両ビットが食い違ってたら真
割と有益

```
 > 1011 0100
 > 1001 1010
[^]0010 1110
```

#not[~]
単項演算。bitを反転する

```
 > 1011 0100
[~]0100 1011
```

#shift[<<][>>]
左辺のbitを右辺分だけずらす。
`(1011 0100) << 2`
`1101 0000`
`(1011 0100) >> 2`
`0010 1101`
左辺が負の場合、ちょっとよくないだろう
(`(-1)>>9`の結果が何になるかご存知であろうか。あるコンパイラだと-1になる。この動作は未定義である([本の虫：シフト演算子](http://ezoeryou.github.io/cpp-book/C++11-Syntax-and-Feature.xhtml#expr.shift)))
`x<<n`は`x*2^n`と(マイナスとかオーバーフローとか考えなければ)同意義である。しかも早い
`x>>n`は`x/2^n`と(マイナスとかオーバーフローとか考えなければ)同意義である。しかも早い


#単項プラス[+x]
特に何もおこらない。identityな関数である。右辺値にするのに役立つかもしれない
`+x → x`

#単項マイナス[-x]
signedな数は 0~(n-1)のn個と(-1)~nのn個でできている
対応を取っていくと(0,-1) (1,-2) (2,-3)……(n-1,-n)のような具合になる
そして片方の数をビット反転させるともう片方の数になる
3) 0011 → -4)1100
-nの結果はn-1の反転 つまり`~(n-1)`となる

#加算[a+b]
[加算器](http://ja.wikipedia.org/wiki/%E5%8A%A0%E7%AE%97%E5%99%A8)でググれ
xorとかandとかorで実装できるらしい。ただの２進数の筆算な気がしなくもない。詳しい人募集
#減算[a-b]
a+bの桁あふれを切ったものと等しいらしい
`9-8 = 1 = 9+8 = 17 = 1(mod 16)`
すごいね。詳しい人募集
#乗算
[乗算器]{http://ja.wikipedia.org/wiki/%E4%B9%97%E7%AE%97%E5%99%A8}でググれ
だんだん複雑になってくる。あなたはだんだんビット演算を使いたくなってきましたね？
（一般に過剰な最適化は避けるべきである。疲れるし、割とコンパイラが頑張ってくれるからだ）
詳しい人募集
#剰余算
詳しい人募集




#応用されるBit演算
ビット演算は様々なところで活躍したり悪用されたりしています。報告者募集


##オタマジャクシ[-~][~-]
>単項マイナス[-x]
>bitとしてみると -nの結果はn-1の反転 つまり`~(n-1)`となる

マイナスとnotを用いることでn-1やn+1を書くことができる
`~-n`は `~~(n-1)` `n-1`と等しい
`~-n == n-1`
`-~(k-1)`は`- -k` `k` `k-1=n`より `-~n`→`n+1`
`-~n == n+1`
コードゴルフなどで用いられる
`(n+1)*2`:7文字`-~n*2`：５文字

##乱数(xorshift)
http://ja.wikipedia.org/wiki/Xorshift
そういう乱数生成アルゴリズムがある。早いらしい

##整数のswap
xorを用いてswapすることができる
```
(a:1011,b:0010)
a ^= b;//(1001,0010)
b ^= a;//(1001,1011)
a ^= b;//(0010,1011)
```
やってることは

```
a=(a^b)^(a^b^b)
b=(a^b)^b
```
である
テンポラリがいらない分ちょっと早いらしい。が、aとbが同じ変数だとバグる

```
(a:1011)
a^=a;(0000)
a^=a;(0000)
a^=a;(0000)
```

##バイトニックソートの一部計算 ( n+c*(n/c mod 2?-1:1) :  c=pow(2,k))
`c==pow(2,k)==(1<<k)`

```
n/c mod 2 
 -> n/(1<<k) mod 2
 -> n>>k mod2
 -> nのk bit目(以下n[k])
n+c*(n/c mod 2?-1:1)
 ->n+c*(n[k]?-1:1)
 ->n[k]?n-c:n+c
 ->nのk bit目をxor
 ->n^(1<<k)
```

バイトニックソートでこの計算を使う場面がある

##あたり判定(モートン順序)
http://marupeke296.com/COL_2D_No8_QuadTree.html
自身がどの空間に属すかを判定するのに用いることができる


##JavaSsript:Floorとして扱う
http://naoyashiga.hatenablog.com/entry/2013/10/29/184914
開発言語の生産性と言う雑談に意味を持たせるとするなら

#とりあえず、Redisに首突っ込んだらぶつかった感じ
lua、面白そうだ。自分で書くなら moonscript だと思うけど。そう言えば、どこぞの時代、どこぞの部署でソフトにLua組み込んだという話は聞いた。あー、懐かしい、変なところで旧知に再会した気分。

内部的に全部連想配列だぜひゃっはー、という言語仕様は、その言葉だけ聞くとPHPみたいだけど、もっとずっと素朴で実直。関数を変数に放り込んだり、即時関数や無名関数を使ったりできるところはJavascriptみたいな感じだけど、速いってことは、実装の方向性は違うんだろうか。関数オブジェクトとゆーか、ジャンプテーブルっぽい実装なのかなー。

と、luaの言語仕様は良いんだ。シンプルで分かりやすいのは知ってる。3日書けば慣れるのも知ってる。そしてnginxとredisで風が吹くかな、と思ったらそうでもない、という残念な状態も知ってる……。

#本題も雑談なのだ
知恵袋で「生産性が高い、つまり簡単に早くWebシステムを作れるプログラミング言語と言えば、どういうものがあるでしょうか？」という質問があり、なぜか、「速いWebシステムを作れるプログラミング言語」を答えている回答がベストアンサーになっていた。2013年のやりとりだ。

元質問も切実さがない感じだから、たぶん、興味本位で答えは何でも良いんだろうけど、客観的な証拠が云々より、目的に応じた解の必要性を説いた方が情報としての価値は高い気がするんだよな。でかいパラメータはとにかく「人件費・設備投資・開発期間の長さによる機会損失」だ。ゲームとかSNSとかみたいに当たり外れが大きいんなら、「単位期間あたりの試行回数」がKSFだ。人件費は時間に比例してかかる。設備投資はAWSとかでスタートから変動費化できるが、人件費を変動費化するのは、それなりのビジネスの規模が確立してからしかできない。

2000UUしか抱えられないサーバしか作れなくても、50人が月間10000円使ってくれるサービスになったら、とりあえずスタートアップとしては滑走路を走れる。手弁当で耐える時期だ。大金は手元になくても、既にファンはいる。それが志になる。でもエンジンふかして開発している間に12ヶ月かかったら、たぶんどこかで決断の時が来る。苦渋の決断だ。

別にベンチャーだけじゃない。社内プレゼンを通すにしたって、体験できるデモがあるかどうかで全く確度は変わるだろう。それに、WEBシステムが全て商材というわけじゃない。社内用のツールをWEBシステムとして作ることで、付加価値が増大する可能性もある。豊富なモジュールを手軽に使えるPHPなんかはそういうところで生産性が高くなりうるし、Windowsマシンばっかりの環境だったら、Visualなんちゃら以外の生産性がゼロ（他に選択肢がない）かもしれない。進歩的な会社だったら、そういうところでRoRとかNodeとかで遊ばしてくれるかも知れない。

例の回答者は「設備投資」しか見ていない。それしか公知の客観データがないからね。でも、それじゃ、何も見えないよね。開発規模が巨大にならざるを得ない状況なら、Javaの生産性がそれ以外の選択肢に比べて高くなるケースもあるだろう。多分、規模に対する工数の増加オーダーは低いのだ。いわゆるコードのセキュリティが高い、というのはそういうことだ。しかし、増加オーダーは低くても絶対値は大きい。めんどくさいけど、めちゃめちゃにはなりにくいっていう感じ。

試行錯誤を繰り返す開発モデルには、楽に習得できて楽に書ける言語が欠かせない。規模に応じた工数がたとえ指数オーダーだとしても、規模の小さい時の生産性が重要なケースもあるのだ。

まあ、答えをはっきりさせることも大事だ。2015年の今、元記事の質問に答えるとするなら、「状況によって違うけど、敢えて絞るなら、Ruby、Javascript、PHP、Visual C#」って答えた後で、上に書いたような繰り言を書くだろう。

言語の話なのにベンチマークより金勘定の話が大事って言われたら、多分元発言の人は嫌な顔をすると思うけど、でもね、「生産性」ってそーゆーもんだと思うな。
Automatic Web Content Extraction by Combination of Learning and Grouping

読んだ論文の備忘録として記事にまとめてみる。
最初は「Automatic Web Content Extraction by Combination of Learning and Grouping」（WWW 2015）をざっくりまとめる。

#解決する問題と提案手法
WebページのDOMから本文抽出することが目的。提案手法は2段階の処理。
1.最初はDOMの場所、画面内でのエリア、フォント、テキスト、リンクなどを特徴量にロジスティック回帰でDOMの各要素の本文っぽさの確率を付与
2.第2段階はDOMが隣り合ってる、画面内でつながっているかなどでDOMの要素をグルーピングする

手法自体はシンプルだけど、うまく組み合わせて性能出てるから通ったのかな。