OmniAICreator/Qiita-1.07M huggingface dataset:
Font Awesome で Qiitaロゴっぽいアイコンを表現


[Font Awesome](http://fortawesome.github.io/Font-Awesome/)を利用すると、WEBサイトでアイコンっぽいフォントを使うことができ、非デザイナだと割と重宝します。

いま登録されているアイコンの種類 ⇒ http://fortawesome.github.io/Font-Awesome/icons/

一番かんたんに利用を始める方法は、次のようにCDNから読み込めばいいです。

```html
<link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
```

この中の「Brand Icons」カテゴリには、Facebook や Twitterなど主要なインターネットサービスのアイコンがあります。

- HTML

	```html
	<i class="fa fa-github"></i>
	<i class="fa fa-twitter"></i>
	<i class="fa fa-facebook"></i>
	<i class="fa fa-youtube"></i>
	<i class="fa fa-android"></i>
	<i class="fa fa-apple"></i>
	<i class="fa fa-google-plus"></i>
	```

- 結果

	![スクリーンショット 2014-05-11 22.26.37.png](https://qiita-image-store.s3.amazonaws.com/0/35733/4e32686b-323c-c39a-99ff-21cd9d23d924.png "スクリーンショット 2014-05-11 22.26.37.png")

ただ、Qiitaのアイコンはさすがに無かったので、２つのアイコンを重ねあわせて、それっぽいアイコンを表現してみました。

- HTML

	```html
    <span class="fa-stack" style="color:#4cb10d">
        <i class="fa fa-square fa-stack-2x"></i>
        <i class="fa fa-search fa-stack-1x fa-inverse fa-2x"></i>
    </span>
	```

- 結果

	![スクリーンショット 2014-05-11 22.20.04.png](https://qiita-image-store.s3.amazonaws.com/0/35733/6c86ea2e-3543-a5b3-7d40-bed3a4cacc78.png "スクリーンショット 2014-05-11 22.20.04.png")

	`fa-square` という文字色 `#4cb10d` のアイコンの上に、`fa-search`(虫眼鏡)のアイコンを文字色反転＆大きさ２倍にして、重ねあわせています。

## 補足

重ね合わせたアイコンのフォントは、他の重ね合わせてないフォントより大きくなってしまいます。
ですので、`font` タグでサイズを調整するか、もしくは他のアイコンも重ね合わせでの記法（上には何も被せない）をすると、同じような大きさになります。

- HTML

	```html
	<span class="fa-stack" style="color:#4cb10d">
	    <i class="fa fa-square fa-stack-2x"></i>
	    <i class="fa fa-search fa-stack-1x fa-inverse fa-2x"></i>
	</span>
	<span class="fa-stack" style="color:blue">
	    <i class="fa fa-facebook-square fa-stack-2x"></i>
	</span>
	<span class="fa-stack" style="color:red">
	    <i class="fa fa-google-plus-square fa-stack-2x"></i>
	</span>
	```

- 結果

	![スクリーンショット 2014-05-12 14.20.34.png](https://qiita-image-store.s3.amazonaws.com/0/35733/5b112adc-f8a0-737d-1492-1ff0fd3f69cb.png "スクリーンショット 2014-05-12 14.20.34.png")


	※実際には Facebook、Googleプラスの公式アイコンの色味は違うと思います。
マイAtomチートシート

# ファイル操作
* cmd + t: 開く
* cmd + b: 開いているファイルの一覧から選択
* cmd + shift + b: gitでコミットしてないファイルを一覧から選択
* cmd + \\: TreeViewをトグル
* ctrl + 0: TreeViewにフォーカス
* cmd + t: 最後に閉じたタブを復元

# バッファ操作
* cmd + f: バッファ内を検索
* cmd + Shift + f: プロジェクト内を検索
* opt + cmd + →: タブを右に移動
* opt + cmd + ←: タブを右に移動
* cmd + Shift + ]: タブを右に移動
* cmd + Shift + [: タブを左に移動
* cmd + F2: ブックマーク(トグル)
* f2: 次のブックマークへジャンプ
* cmd + r: シンボルを検索
* tab: スニペットを展開

# その他
* cmd + shift + p: コマンドを実行。Install Packagesと入力するとパッケージのインストールできたり。

# 設定ファイルの場所
~/.atomに保存されてるので、このディレクトリ以下のファイルをDropboxとかに入れておくと違うマシンと設定を共有できる

# 参考
* [GitHub 製エディタ Atom リファレンス - Qiita](http://qiita.com/spesnova/items/d3096d062d70e7385e9d)* [atom-cheat-sheet - Qiita](http://qiita.com/_wats/items/a3d09b677a717385e36b)
* [Atomエディタで使って気に入ったpackageとか - Qiita](http://qiita.com/horimislime/items/72de9580125151ac6af0)
FreeBSDのpkgコマンドで未インストールのパッケージの一行情報を知る方法

FreeBSD-10には、pkgという新しいパッケージ管理システムが導入されています。(Debianのaptとかの類です。)

インストールされていないパッケージがどういうものか一行レベルで良いので知りたいケースがあります。
例えば、ドキュメント作成ツールのsphinxをインストールしようとしますが、pkg searchすると、以下のようにpy27-sphinxとsphinx3があり、どちらがドキュメント作成ツールなのかわかりません。

```
eria@eria-thinkpad:~ % pkg search sphinx
libsphinxclient-2.0.9
pecl-sphinx-1.3.0
pocketsphinx-0.8
py27-sphinx-1.2.2
py27-sphinxcontrib-adadomain-0.1_2
py27-sphinxcontrib-bitbucket-1.0
py27-sphinxcontrib-httpdomain-1.2.1
sphinx3-0.8_1
sphinxbase-0.8
sphinxsearch-2.1.8
sphinxsearch-devel-2.2.1,1
```

未インストールのpkgの一行情報を知りたい場合は、「pkg rquery "%c" パッケージ名」を実行します。

```
eria@eria-thinkpad:~ % pkg rquery "%c" py27-sphinx
Python documentation generator

eria@eria-thinkpad:~ % pkg rquery "%c" sphinx3
Speech recognition system
```

これでpy27-sphinxのほうがドキュメント作成ツールだということがわかりました。
pkg rqueryのあとの"%c"は「query pattern」というものです。
%cはComment of the matched packageです。
これを要するにprintfの引数のような感覚で指定すればよいわけです。

```
pkg rquery "%c:%v" sphinx3
Speech recognition system:0.8_1
```

query patternについては他にも色々指定ができます。
man pkg-rquery でどうぞ。(pkgとrqueryの間のハイフンを忘れずに！)
Androidアプリで画面にふわっとメッセージを表示する方法

**Androidアプリで画面にふわっとメッセージを表示する方法**
--------------------------------------------------------------------

androidで以下のようにふわっとメッセージを表示する機能をtoast(トースト)を使用して実装してみる。
![無題.png](https://qiita-image-store.s3.amazonaws.com/0/41775/db169ec0-e707-2f13-7813-b7758892886c.png)

使いどころとしては保存ボタン等を押下したときに「保存しました」などの簡易メッセージを表示するときに役に立つのでメモ。

**■実装方法**
=====================================================================
onCreateメソッド内等に以下を追記することで実装可能。

```java
// イメージビュー(これを設定すると画像を表示できる）
ImageView iv1 = new ImageView(context);
iv1.setImageResource( R.drawable.ic_launcher_template3 );

// メッセージビュー（ここでメッセージを設定）
TextView tv = new TextView(context);
tv.setTextSize(20.0f);
tv.setTextColor(Color.WHITE);
tv.setText( "おすきなメッセージを記述" );

// リニアレイアウト上に、作成したビューを並べる
LinearLayout ll = new LinearLayout(context);
ll.setOrientation( LinearLayout.HORIZONTAL );
ll.setGravity( Gravity.CENTER );
ll.addView(iv1);
ll.addView(tv);

// トーストを作成し、今作ったビューをセットする
Toast toast = new Toast(context);
toast.setView(ll);
toast.setGravity( Gravity.CENTER, 0, 0 );
toast.setDuration(Toast.LENGTH_LONG);

View v = toast.getView();
v.setBackgroundColor(Color.rgb(30, 30, 30));

//ここで表示
toast.show();
```

上記記述でtoast.show()を実行した時点でメッセージが表示される。

以上、参考まで。

---
[簡単家計簿 Androidアプリ](https://play.google.com/store/apps/details?id=jp.example.keepingbook.app&hl=ja)
rsyncでファイルをwindowsに持ってくるときの注意点

WindowsとLinuxのパーミッションは「混ぜるな危険！」の代表例な気がしますが、ファイルのやりとりをしてると無視するわけにも行かないし困ったもんです。

## rsync でファイルを持ってくる

自分はNHKのラジオ講座をVPS上で自動的にダウンロードしてそれをたまに`rsync`で持ってくるということをしてるんですが、何故か今回パーミッションエラーで開けなくなってました。

今までは何もせずに開けた気がするんですが、`rsync`を変えたり他にも色々変えたらからかも知れません。

## 対策

コマンドを 
```shell-session
rsync sakura:~/nhklang/spanish/* .
```

から、こんなのに変えました。

```shell-session
rsync --perms --chmod=a=rw,Da+x sakura:~/nhklang/spanish/* .
```

はい、とてもめんどくさいし、こんなのは覚えておけません。

## nyaosで alias 登録

なので`alias`を`nyaos`のスクリプトに入れときましょう。

```lua:~/.nyaos
# rsync
alias rsync="rsync --perms --chmod=a=rw,Da+x"
```

これで長いオプションを打たずに使うことができます。

デフォルトでは`~/.nyaos`は読み込まれないので`_nya`ファイルに読み込むように書いときましょう。
【Rails4】 passengerのruby2.0.0からruby2.1.1へのバージョンアップ


0.準備段階としてrvmを使って、ruby2.1.1をインストールしておく。


1.システムにインストールしてある古いpassengerを削除

```bash
gem uninstall passenger
```

2.なんか聞かれるので、一応消しておく。

```
in addition to the gem? [Yn] Y
```

3.クリーンアップ

```bash
gem cleanup passenger
```

4.
ここで、

```rb
ruby '2.1.1'
```
とGemfileに記述してある、アプリケーションのディレクトリに移動しておく




5.新しいpassengerをインストール

```bash
gem install passenger
```

6.インストローラを実行

```bash
passenger-install-apache2-module
```

7.設定ファイルの変更情報をメモっておいて、設定を変更して、Webサーバを再起動

```
--------------------------------------------
Almost there!

Please edit your Apache configuration file, and add these lines:

   LoadModule passenger_module /usr/local/rvm/gems/ruby-2.1.1/gems/passenger-4.0.42/buildout/apache2/mod_passenger.so
   <IfModule mod_passenger.c>
     PassengerRoot /usr/local/rvm/gems/ruby-2.1.1/gems/passenger-4.0.42
     PassengerDefaultRuby /usr/local/rvm/gems/ruby-2.1.1/wrappers/ruby
   </IfModule>

After you restart Apache, you are ready to deploy any number of web
applications on Apache, with a minimum amount of configuration!

Press ENTER to continue.


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

Deploying a web application: an example

Suppose you have a web application in /somewhere. Add a virtual host to your
Apache configuration file and set its DocumentRoot to /somewhere/public:

   <VirtualHost *:80>
      ServerName www.yourhost.com
      # !!! Be sure to point DocumentRoot to 'public'!
      DocumentRoot /somewhere/public
      <Directory /somewhere/public>
         # This relaxes Apache security settings.
         AllowOverride all
         # MultiViews must be turned off.
         Options -MultiViews
         # Uncomment this if you're on Apache >= 2.4:
         #Require all granted
      </Directory>
   </VirtualHost>
```
FontAwesome で動的にアイコン化 in Qt

自分含めて [FontAwesome](http://fortawesome.github.io/Font-Awesome/) などのアイコンフォントを使ってアイコンを書き出したいという需要があると思うので。

```cpp
// iconSize と fontPointSize は適当に設定している
const QChar iconType = 0xf000; // css/font-awesome.css に定義がある。ここでは .icon-glass と同じ
const int iconSize = 52;
const int fontPointSize = 42;

// フォントをインストールする
int fontID = QFontDatabase::addApplicationFont("/path/to/font-awesome.ttf");

// QPixmap を生成して透明にしておく
QPixmap pixmap(iconSize, iconSize);
pixmap.fill(Qt::transparent);

// QFont で FontAwesome を指定し、QPainter 使って QPixmap にアイコンを書き出す
QPainter painter(&pixmap);
QFont font("FontAwesome", fontPointSize);
painter.setFont(font);
painter.setRenderingHint(QPainter::AntiAliasing);
painter.drawText(pixmap.rect(), iconType, QTextOption(Qt::AlignVCenter|Qt::AlignHCenter));

// QPixmap から QIcon に変換
QIcon icon(pixmap);

// ... icon を使ってゴニョゴニョする

// 終わったら removeApplicationFont で削除
QFontDatabase::removeApplicationFont(fontID)
```

FontAwesome を使用していてより柔軟性を求めるなら [QtAwesome](https://github.com/gamecreature/QtAwesome/) を使ったほうが良いかもしれません。
【Linux】スワップ領域の作成




**swap領域の作成**

以下のコマンドで、swap領域を拡張することが出来る。


```bash
dd if=/dev/zero of=/swap bs=1M count=1024
mkswap /swap
swapon /swap
```

ddコマンドで指定サイズの空のファイルを作成(ここでは1024MB)
mkswapコマンドで、作成したファイルをスワップ領域として使用できるようにする
swaponコマンドでスワップ領域を有効にする

この場合は、1G作成していますが、2Gにしたい場合は

```bash
dd if=/dev/zero of=/swap bs=1M count=2048
```
とcountを倍にしてあげるといいと思います。


**起動時に自動でスワップを有効にする**

```bash
$ sudo vi /etc/fstab
---
# 下記を追加
/swapfile none swap sw 0 0
````

※参考
Amazon EC2 t1.micro インスタンスでswapを使用する
http://oh-sky.hatenablog.com/entry/2013/05/18/104416
PHPのnoticeerrorとか吐き出させる。

PHPのエラーの吐き具合を高めるために
デバック用のソースの一番上にでも

```php
<?php

error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', 'On');

?>
```

と、書き込んでおくと普段は無視されるような警告も表示されるようになる。
ノーアラートを目指すなら一つの目安になるので必要。


追記：

```php
error_reporting(-1);
```

コメントにも有りますが、このような方法で
前述のものと同じ働きをさせることが出来そうです。
Pelican のサイトマップの作り方


Pelican での Web サイトのサイトマップの作り方です。  
  
まずは、サイトマップ用の jinja テンプレートを用意します。  

**sitemap.html**

```xml
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">

{% for article in articles %}
  <url>
    <loc>{{ SITEURL }}/{{ article.url }}</loc>
    <priority>0.8</priority>
  </url>

  {% for translation in article.translations %}
  <url>
    <loc>{{ SITEURL }}/{{ translation.url }}</loc>
    <priority>0.8</priority>
  </url>
  {% endfor %}
{% endfor %}

{% for page in pages %}
  <url>
    <loc>{{ SITEURL }}/{{ page.url }}</loc>
    <priority>1.0</priority>
  </url>

  {% for translation in page.translations %}
  <url>
    <loc>{{ SITEURL }}/{{ translation.url }}</loc>
    <priority>1.0</priority>
  </url>
  {% endfor %}
{% endfor %}

</urlset>
```

テンプレートは、他の HTML テンプレートと同じように、使っているテーマの templates ディレクトリに置きます。  
  
次に、設定ファイルに以下の設定を追加します。  

```text
DIRECT_TEMPLATES = ('index', 'tags', 'categories', 'archives', 'sitemap')

上記の設定後に HTML を生成すると、sitemap.xml が生成されるようになります。
pelicanconf と publishconf

Pelican の設定ファイルには、pelicanconf.py の他に、publishconf.py というものがあります。  
  
このファイルの違いは以下です。  

* pelicanconf.py  
  HTMLファイルを生成するたびに必ず読み込まれる設定  
  開発、投稿テスト用
* publishconf.py  
  `make publish` を実行した時のみ読み込まれる設定  
  公開用

例えば、Pelican の設定には、SITEURL という項目がありますが、投稿の表示確認テストや、テーマをいじっている際には、SITEURL は空っぽの方が都合が良いでしょう。  
もし実際の公開先 URL を指定していた場合、生成される HTML が公開先にリンクされてしまいます。  
  
一方、公開する場合には、SITEURL には実際の URL が入っていたほうが都合がよいです。例えば、SITEURL が空だと、サイトマップを生成したときに、サイトマップ内の URL が正しい URL を指さない問題が起きます。  
  
また、ローカル環境でのテスト中に、Google Analytics がグチャグチャになってしまうのを避ける、などの目的にも有用です。  
  
公開する場合にのみ必要な設定は publishconf.py に記載し、公開するときだけ `make publish` を行うようにするとよいでしょう。
Herokuで<?php phpinfo();


**同内容の記事を[Tumblr](http://yutaono.tumblr.com/post/85408125193/heroku)で、コードは[github](https://github.com/yutaono/heroku_phpinfo)で公開しています。**


2014年4月29日にHerokuがPHPを公式にサポートを始めたので触ってみました。
phpinfo();を実行するためにした手順は以下の通りです。適当なディレクトリ内で行ってください。

まず、エディタ等でindex.phpと、依存関係を宣言するためのcomposer.jsonを作成します。

```index.php
<?php
	phpinfo();
```

```composer.json
{
    "require": {
        "php": "~5.5.0"
    }
}
```

Herokuにデプロイする際に、現状では```"~5.5.0"```という緩い設定だと警告が出ますが、無視できるそうです。

gitの初期化からherokuへのプッシュまでを以下のように行います。

```
$ git init
$ git add index.php composer.json
$ git commit -m 'initial commit'
$ heroku create
$ git push heroku master
```

これで```$heroku open```や```$ heroku create```した際に表示されるurlにアクセスすることで動作が確認できます。


## 参考リンク
- [Heroku | Introducing the new PHP on Heroku](https://blog.heroku.com/archives/2014/4/29/introducing_the_new_php_on_heroku)
- [Heroku PHP Support | Heroku Dev Center](https://devcenter.heroku.com/articles/php-support)
Rでニュートンラフソン法を実装

[これなら分かる最適化数学](http://www.amazon.co.jp/dp/4320017862) 3.2 に記載の通り、ニュートンラフソン法（ニュートン法）を用いて、関数に最大値・最小値を取らせる変数の値を求めます。

## 1変数の場合

![OPT3.NewtonRaphson1D.png](https://qiita-image-store.s3.amazonaws.com/0/12670/0fcb60f9-da86-49a5-e980-43f9b81895f5.png)

```r
frame()
par(mfcol=c(1, 1))
par(mar=c(2, 2, 1, 0.1))
par(mgp=c(1, 0.2, 0))
xrange <- c(-3, 3)
yrange <- c(-1, 1)
f <- function(x) { cos(x) }
dx <- function(x) { -sin(x) }
dxdx <- function(x) { -cos(x) }
newton <- function(x0, f, df, d2f) {
	
	x <- x0
	eps <- 1e-6
	i <- 1
	# 解の移動量が十分小さくなるまで繰り返す。
	repeat {
		oldx <- x
		x <- x - df(x) / d2f(x)
		lines(c(oldx, x), c(i - 1, i) * 0.05 - 0.5, type="o", col=2)
		cat("i=", i, "x=" , x, "f(x)=", f(x), "df(x)=", df(x), "\n")
		if (abs(x - oldx) < eps) {
			break
		}
		i <- i + 1
	}
	x
}

curve(f, xlim=range(xrange), ylim=range(yrange))
newton(-1, f, dx, dxdx)
```

## 多変数の場合

![OPT4.NewtonRaphson2D.png](https://qiita-image-store.s3.amazonaws.com/0/12670/b0049210-80c9-51d5-bf92-6af8dfc20b8c.png)

```r
frame()
par(mfcol=c(1, 2))
par(mar=c(2, 2, 1, 0.1))
par(mgp=c(1, 0.2, 0))

newton <- function(x0, f, df, dxdx, dxdy, dydx, dydy) {
	
	x <- x0
	eps <- 1e-12
	i <- 1
	repeat {
		oldx <- x
		# 勾配∇fを求める。
		gradientf <- c(dx(x), dy(x))
		# ヘッセ行列Hを求める。
		H <- matrix(c(dxdx(x), dxdy(x), dydx(x), dydy(x)), 2, byrow=T)
		# HΔx=-∇fを解き、Δx=-H^-1 ∇fを求める。
		deltax <- solve(H, -gradientf)
		x <- x + deltax
		xy <- cbind(oldx, x)
		lines(xy[1, ], xy[2, ], type="o", col=1)
		cat("i=", i, "x=" , x, "f(x)=", f(x), "df(x)=", df(x), "\n")
		# ||Δx||^2 が十分小さくなるまで繰り返す。
		if (sum(deltax * deltax) < eps) {
			break
		}
		i <- i + 1
	}
	x
}

draw <- function() {
	xgrid <- seq(-3, 3, 0.1)
	ygrid <- seq(-3, 3, 0.1)
	zgrid <- outer(xgrid, ygrid, Vectorize(function(x, y){ f(c(x, y)) }))
	image(xgrid, ygrid, zgrid, xlim=range(xgrid), ylim=range(ygrid), xlab="x[1]", ylab="x[2]", main="f(x)", col=rainbow(450)[256:1])
	contour(xgrid, ygrid, zgrid, xlim=range(xgrid), ylim=range(ygrid), add=T)
	newton(c(1, 0.5), f, dx, dxdx, dxdy, dydx, dydy)
}

f <- function(x){ -x[1] ^ 2 - 4 * x[2] ^ 2 + 5 * x[1] }
dx <- function(x){ -2 * x[1] + 5 }
dy <- function(x){ - 8 * x[2] }
dxdx <- function(x){ -2 }
dxdy <- function(x){ 0 }
dydx <- function(x){ 0 }
dydy <- function(x){ -8 }
draw()

f <- function(x){ cos(x[1]) + cos(x[2]) }
dx <- function(x){ -sin(x[1]) }
dy <- function(x){ -sin(x[2]) }
dxdx <- function(x){ -cos(x[1]) }
dxdy <- function(x){ 0 }
dydx <- function(x){ 0 }
dydy <- function(x){ -cos(x[2]) }
draw()

# f <- function(x){ x[1] ^ 3 + x[2] ^ 3 - 9 * x[1] * x[2] + 27 }
# dx <- function(x){ 3 * x[1] ^ 2 - 9 * x[2] }
# dy <- function(x){ 3 * x[2] ^ 2 - 9 * x[1] }
# dxdx <- function(x){ 6 * x[1] }
# dxdy <- function(x){ -9 }
# dydx <- function(x){ -9 }
# dydy <- function(x){ 6 * x[2] }
# draw()
```
UItableViewで編集モードにしつつタップも有効にする

![IMG_5267.PNG](https://qiita-image-store.s3.amazonaws.com/0/24979/f14c13e0-75ad-5b45-ba28-2685138433bb.png)
このようなUI（あんまりよろしくないですが）は、見ての通りUItableviewに

```objc
[self.tableView setEditing:YES animated:YES];
```

されているのですが、これをすると困ったことに

```objc
tableView: didSelectRowAtIndexPath:
```

が呼ばれなくなります。…ので要するにタップ出来なくなります。
当初、UITapGestureRecognizerで強制的に呼んでいたのですがそうすると今度はデリートボタンの反応がとても悪くなります。
どうすりゃええんやーと思ってリファレンス読み直したらちゃんと

```objc
self.tableView.allowsSelectionDuringEditing=YES;
```

っていうのがありました（汗
ってオチです
【論文つらい】descriptionで見出しの後ろに改行


TeXで見出し付きリスト（`description`環境）の見出しの後に改行したい．そんなときにどうするか．
TeXのコードと[**Pandoc拡張マークダウン**](http://sky-y.github.io/site-pandoc-jp/users-guide/)によるコードを掲載しておきます．

Markdownで論文が書けるって素敵だよね！！！！！！！！！！！！（つらい

# 普通のdescription

普通にやるとこうなる．

![通常のdescription](https://qiita-image-store.s3.amazonaws.com/0/14845/a9a806f1-6016-01f4-bc7a-08a95801676d.png "通常のdescription")

```tex:description.tex
\begin{description}
\item[明石工業高等専門学校]
明石工業高等専門学校（あかしこうぎょうこうとうせんもんがっこう，英称:Akashi
National College of Technology）は，
兵庫県明石市にある日本の国立高等専門学校である．1962年に設置された．略称は明石高専．
\item[奈良工業高等専門学校]
奈良工業高等専門学校（ならこうぎょうこうとうせんもんがっこう，英語:Nara
National College of Technology, NNCT）は，
奈良県大和郡山市にある日本の国立高等専門学校である．1964年に設置された．略称は奈良高専．
\item[舞鶴工業高等専門学校]
舞鶴工業高等専門学校（まいづるこうぎょうこうとうせんもんがっこう，英称:Maizuru
National College of Technology, MNCT）は，
京都府舞鶴市にある日本の国立高等専門学校である．1965年に設置された．略称は舞鶴高専．
\end{description}

```

```markdown:description.md
明石工業高等専門学校
:   明石工業高等専門学校（あかしこうぎょうこうとうせんもんがっこう，英称:Akashi National College of Technology）は，
    兵庫県明石市にある日本の国立高等専門学校である．1962年に設置された．略称は明石高専．
奈良工業高等専門学校
:   奈良工業高等専門学校（ならこうぎょうこうとうせんもんがっこう，英語:Nara National College of Technology, NNCT）は，
    奈良県大和郡山市にある日本の国立高等専門学校である．1964年に設置された．略称は奈良高専．
舞鶴工業高等専門学校
:   舞鶴工業高等専門学校（まいづるこうぎょうこうとうせんもんがっこう，英称:Maizuru National College of Technology, MNCT）は，
    京都府舞鶴市にある日本の国立高等専門学校である．1965年に設置された．略称は舞鶴高専．
```

# 見出しの後に改行をいれたdescription

単純に見出しの直後にスペース（`~`）と改行（`\\`）を入れるだけでOK．
Pandoc拡張マークダウンではスペースをエスケープしてあげれば（`\`+半角スペース）`~`と解釈される．
また，改行もエスケープしてあげれば（行末に`\`）`\\`と解釈してくれる．

![見出しの後に改行をいれたdescription](https://qiita-image-store.s3.amazonaws.com/0/14845/f312f705-3c1d-83fa-1292-b7d541c4a683.png "見出しの中に改行をいれたdescription")

```tex:description.tex
\begin{description}
\item[明石工業高等専門学校]~\\
明石工業高等専門学校（あかしこうぎょうこうとうせんもんがっこう，英称:Akashi
National College of Technology）は，
兵庫県明石市にある日本の国立高等専門学校である．1962年に設置された．略称は明石高専．
\item[奈良工業高等専門学校]~\\
奈良工業高等専門学校（ならこうぎょうこうとうせんもんがっこう，英語:Nara
National College of Technology, NNCT）は，
奈良県大和郡山市にある日本の国立高等専門学校である．1964年に設置された．略称は奈良高専．
\item[舞鶴工業高等専門学校]~\\
舞鶴工業高等専門学校（まいづるこうぎょうこうとうせんもんがっこう，英称:Maizuru
National College of Technology, MNCT）は，
京都府舞鶴市にある日本の国立高等専門学校である．1965年に設置された．略称は舞鶴高専．
\end{description}

```

```markdown:description.md
明石工業高等専門学校
:   \ \
    明石工業高等専門学校（あかしこうぎょうこうとうせんもんがっこう，英称:Akashi National College of Technology）は，
    兵庫県明石市にある日本の国立高等専門学校である．1962年に設置された．略称は明石高専．
奈良工業高等専門学校
:   \ \
    奈良工業高等専門学校（ならこうぎょうこうとうせんもんがっこう，英語:Nara National College of Technology, NNCT）は，
    奈良県大和郡山市にある日本の国立高等専門学校である．1964年に設置された．略称は奈良高専．
舞鶴工業高等専門学校
:   \ \
    舞鶴工業高等専門学校（まいづるこうぎょうこうとうせんもんがっこう，英称:Maizuru National College of Technology, MNCT）は，
    京都府舞鶴市にある日本の国立高等専門学校である．1965年に設置された．略称は舞鶴高専．
```
【rubyで微分】僕の微分への愛が生んでしまった、gem 'dydx'.  

皆さん、rubyをいじっていると微分したくなる事、よくありますよね？

…

## rubyで微分！？（；゜０゜）他でやれよ（；゜０゜）

今にもそんな怒号が聞こえてきそうですが、作ってしまいました。

まだ作り込みが少し足りませんが、早漏なので公開してしまいました。

（割と普通になんでも微分出来ます。絶賛contributorさん募集中です。）

http://rubygems.org/gems/dydx
https://github.com/gogotanaka/dydx

見てもらうのが一番早いと思うのでこんな感じです。↓

```
( d/dx(x ^ 2) ).to_s
=> "( 2 * x )"

# 以下to_sを省略

d/dx(e ^ x)
=> "( e ^ x )"

d/dz(log(z))
=> "( 1 / z )"

d/dx(x ^ n)
=> "( n * ( x ^ ( n - 1 ) ) )"

```

グローバル変数に関数を格納すればdy/dxみたいにも出来る

```
$y = cos(x)
dy/dx
=> "( - sin( x ) )"

$x = a * ( (t ^ 2) / 2 )
dx/dt
=> "( a * t )"

d/dt(dx/dt) # これはそのうち　(d/dt)^2(x) とも書けるようにする.
=>"a"

```

メソッドチェーンも出来る

```
((x ^ 2) * y).d(x)
=> "( ( 2 * x ) * y )"

((x ^ 2) * y).d(x).d(y)
=> "( 2 * x )"
```

こんな感じです。式が長くなると約分だったり因数をまとめるのがうまくいかなかったりするかもです。

（ここはもっと抽象代数的な手法でなんとかしたいと思っています。）

## そろそろ微分したくなってきましたか？

使い方です。

一番手っ取り早いのはgem install してirbでrequireしましょう。
（こんなクソgem 管理下に入れたくないわーて場合はよしなに）

```gem install dydx ```

```irb ```

```require 'dydx' ```

とdydxをrequireした後に、

```include Dydx ```　すれば、そこには微分の世界が広がっています。


## いや冷静にこのgem、誰得なの
…

割とぐうの音も出ませんが、マジレスすると、

微分も大事ですが代数的構造をrubyなりプログラミング言語内でうまく扱えたら、

絶対いいと思うんです。

例えば、群構造や環構造をプログラミング上で思い通りに扱えたらどうでしょう。

なんとステキではないでしょうか。

有名なところでいうとルービックキューブの郡構造を簡単に規定できからルービックキューブの解を簡単に出せたりしますね。

僕のdydx gemの中では代数思考プログラミングの示唆しか与えらていませんが、このgemを育てていく過程でこのあたりがもっと発達すれば夢、広がリングですよね。

まああと、微積分が完璧に扱えれば絶対便利です（流行の統計解析とかにいいかも）

ふぅ。

お後がよろしいようで。ノシ
cygwin で ftp がなんか変だと思ったら

# 現象

Cygwin 上で ftp コマンドが動作しない。なぜ？

# 調査

とりあえずそのコマンドがどこのどいつか確認する。

```shell-session
$ which ftp
```

`/cygdrive/c/windows/system32/ftp` とかいう結果が帰ってきたら、言うまでもなく Windows の ftp.exe が呼ばれているので善処する。

# 原因

* 私の場合、mintty の起動オプションにログインシェルをつけ忘れてたためだった。
* ほかにありそうなのは、Cygwin の ftp コマンドが単にインストールされてなかったとか。ちなみに、Cygwin の ftp コマンドは inetutils パッケージに入っている。
set-goal-column の解除


Emacsを使っていて、ふとした拍子に行移動した時のカラム位置が固定されてしまうことがある。
通常カーソルを下に移動するとき、カラム位置はそのままのはずだが、カーソルが行先頭に戻ってしまうなど。


これはset-goal-columnを実行したから。

	set-goal-column (C-x C-n)

タイプミスなどで C-x の後に C-n を押してしまったため。

解除するには、

	C-u C-x C-n

で、goal-columnを無効にする。
gitコマンドの基本的な使い方

今更感漂うが、自分用に。

#リポジトリの作成/複製
##リポジトリの作成
カレントディレクトリに.gitファイルを作成する。gitのリポジトリを新しく作る時用。

```
> git init
```

##リポジトリの複製
複製する場合は`git clone`を使う。githubから持ってくる場合はこっち。
ローカルでのディレクトリ名を指定したい場合は、ディレクトリ名を引数で渡す。

```bash
> git clone <gitのURL> [ディレクトリ名]
```

最新リビジョンのみ取得したい場合、--depthを用いて指定する。
リビジョンを指定しないと過去の履歴を全て取得するので時間がかかる。

```
> git clone --depth 1 <gitのURL> [ディレクトリ名]
```



#コミット

`git add`を実行した後に、`git commit`を実行する。
`git commit`実行時にメッセージオプションを付けない場合はエディタが開いてめんどくさいので、つけたほうが楽。

```
#コミットするファイルを追加
> git add [ファイル1] [ファイル2] ･･･

# 一括で登録する時
> git add [-A | -u | .]

#gitへのコミット
> git commit [-a] [-m "コミットメッセージ"]
```
- `git add -A` 新規作成/変更/削除されたファイル全てを追加(AllのA)
- `git add -u` 変更/削除されたファイルを追加。新規作成は対象外。(updateのu)
- `git add .` 新規作成/変更されたファイルを追加。削除は対象外。

間違ってコミットした場合は、git resetで取り消せる。
オプションが--softの場合は作業ツリーがそのままだが、--hardだと作業ツリーも削除される。
対象をHEAD^とすると直前に行ったコミットが取り消される

```bash
> git reset [--soft | --hard] [対象]

#使用例
> git reset --hard HEAD^

#再コミット
> git commit [-a] -c ORIG_HEAD
```

#プッシュ
##外部リポジトリにローカルリポジトリの内容を送信

```bash
> git push <送信先リポジトリURL> <送信するブランチ>:<送信先ブランチ>

#送信例
> git push -u https://github.com/wwacky/~~~ master:master
```

master = デフォルトのブランチ名 (svnでのtrunk)

送信先リポジトリURLは、短縮名をつけることもできる。
以下の例だとgit@github.com:wwacky/~~~にoriginという短縮名をつけている

```bash
> git remote add <短縮名> <gitリポジトリのURL>

#使用例
> git remote add origin git@github.com:wwacky/~~~
> git push -u origin master
```

#変更点の確認

作業の変更一覧を確認したい場合は`git status`を使う。
差分を表示したい場合は`git diff`を使う。

```bash
#変更が加えられたファイル一覧の表示
> git status

#変更点の表示
> git diff <ファイル名>
```

#ブランチ

##ブランチの確認

`git branch`コマンドを使うと、存在するブランチを表示できる。
あんまり調べてないけど、-aオプション付けた方が情報がリッチ。

```bash
> git branch
* master
  feature_branch_a

> git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/feature_branch_a
  remotes/origin/master
```

branchが出てこない時は、`git fetch`を使って最新状態にして確認したほうがいい。

##チェックアウトをリモートの別のブランチに切り替える

`git checkout`コマンドを実行する際に、ブランチを指定する。
やり方は2パターンあるけど、-bオプションを使うほうが楽。
ブランチ名の確認は上記の`git branch -a`を使うといい。
ローカルブランチ名はなんでもいいと思うけど、リモートのブランチ名と合わせた方が分かりやすいと思う。


```bash
# ブランチの切り替え。-bオプションを付けるとcheckoutも一緒にやる
> git checkout [-b] <ローカルでのブランチ名> <リモートでのブランチ名>

# 使用例(-bオプションあり)
> git checkout -b feature_branch_a origin/feature_branch_a

# 使用例(-bオプションなし)
> git checkout feature_branch_a origin/feature_branch_a
> git checkout feature_branch_a 
```
MacでParallellaのSDKをビルドする

# はじめに
公式ではParallellaのSDKはUbuntuでのビルドが推奨されてますが、Macでもビルドできたという情報があったのでチャレンジしてみました。
が、今のところ一部のビルドが正しく行えなかったのであくまでメモ書きとして…

# 環境
OSはOS X Mavericks(10.9.2)です。また、ビルドの都合でgccを使用するためHomebrewでインストールを行います。

# 前準備

MacではXcodeに付属しているLLVMでビルドが行われますが、そのままだとビルドに失敗してしまいます。そこでHomebrewを使いgccをインストールすることにします。
またlibelfとcoreutilsも使用するので、併せてインストールします。

```sh:gccのインストール
$ brew install gcc48 coreutils libelf
$ export CC=/usr/local/bin/gcc-4.8
$ export CXX=/usr/local/bin/g++-4.8
$ wget http://opensource.apple.com/source/dtrace/dtrace-48/sys/elf.h?txt -O /usr/local/include/elf.h
$ wget http://opensource.apple.com/source/dtrace/dtrace-48/sys/elftypes.h?txt -O /usr/local/include/elftypes.h
```

# ビルド

```sh:
$ mkdir ~/parallella
$ cd ~/parallella
$ git clone https://github.com/adapteva/epiphany-sdk.git
$ git clone https://github.com/adapteva/epiphany-libs.git
```

次にtoolchainのビルドを行います。

```sh:toolchainのビルド
$ ./epiphany-sdk/download-toolchain.sh
$ cd epiphany-sdk
$ ./build-toolchain.sh
```

次にSDKのビルドですが、以下の通り書き換えが必要になります。
・epiphany-hal.cのE_REG_LINK_MODE_CFGをE_REG_LINKCFGへ置換する(定数の書き換え忘れくさい)
・build-sdk.shのcpをgcpへ、lnをglnへ置換する(coreutilsの方を使用するため)
・build-libs.shの154行目ぐらいにあるbuild-loaderをコメントアウトする(リンクに失敗するため)

```sh:SDKのビルド
$ mkdir -p ../esdk.5.13.09.10/tools/e-gnu.armv7l/
$ mv -A ../INSTALL/* ../esdk.5.13.09.10/tools/e-gnu.armv7l/
$ echo "/usr/local/bin/gcc-4.8 -D __linux__ \$@" > gcc
$ echo "/usr/local/bin/g++-4.8 -D __linux__ \$@" > g++
$ chmod +x ./gcc ./g++
$ PATH=`pwd`:$PATH ./build-sdk.sh
```

#参考

http://www.parallella.org/forums/viewtopic.php?t=966
http://forums.parallella.org/viewtopic.php?t=206
https://github.com/adapteva/epiphany-sdk/wiki/Building-on-Mac
GitのMy設定

# Gitプロトコル設定
`git://`できるようにする。

```
git config --global url."https://".insteadOf git://
```

# カラーとか予測とかブランチ名を表示とか
```
cd
mkdir bin
cd bin
wget --no-check-certificate https://raw.github.com/git/git/master/contrib/completion/git-completion.bash
wget --no-check-certificate https://raw.github.com/git/git/master/contrib/completion/git-prompt.sh
chmod 755 git-completion.bash
chmod 755 git-prompt.sh
echo "source ~/bin/git-prompt.sh" >> ~/.bash_profile
echo "source ~/bin/git-completion.bash" >> ~/.bash_profile
# ~/.bash_profileに下記を追記
export PS1='\[\033[32m\]\u@\h\[\033[00m\]:\[\033[34m\]\w\[\033[31m\]$(__git_ps1)\[\033[00m\]\$ '
exec $SHELL -l
git config --global color.ui true
```

# エイリアス
```
git config --global color.ui true
git config --global alias.co checkout
git config --global alias.st status
git config --global alias.difff "diff --color-words"
git config --global alias.pr "fetch --prune"
git config --global alias.fe fetch
git config --global alias.brd "branch -D"
git config --global alias.diffn "diff --name-only"
git config --global alias.diffc "diff --cached"
git config --global url.https://.insteadof git://
git config --global merge.tool p4merge
git config --global mergetool.keepbackup false
git config --global mergetool.p4merge.path p4merge
git config --global mergetool.p4merge.keeptemporaries false
git config --global mergetool.p4merge.trustexitcode false
git config --global pager.log "diff-highlight | less"
git config --global pager.show "diff-highlight | less"
git config --global pager.diff "diff-highlight | less"
```
CentOS6.3にRuby on Rails開発の準備をする


# インストール系
rootじゃなくて、開発するユーザでやる。sudoできること。

## rbenv
```
git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
exec $SHELL  -l
```

追記：ここで入れるgemはこれがおすすめらしい・・・こんどやってみよう。
[rbenv を使っているなら rbenv-gem-rehash を使おう](http://qiita.com/riocampos/items/f0fe7217972b312c4f3a)
## openssl
ないと言われたので。

```
sudo yum install -y openssl-devel
```

## ruby-build

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

## ruby
バージョンは2.0.0-p451。
最初のインストールコマンドで時間かかる。

```
rbenv install -v 2.0.0-p451
rbenv rehash
rbenv global 2.0.0-p451
```

## bundler
```
rbenv exec gem install bundler
exec $SHELL  -l
```

## rails
バージョンは4.0.0。
時間かかる。

```
gem install rails -v 4.0.0
```

## sqlite3
```
sudo yum install -y sqlite-devel
gem install sqlite3 -v '1.3.9'
```

# bundle installと闘う
※編集中。以下はbundle installしたときに出たエラーのとおりにinstallしたり、対応したもの。

```
※編集中
sudo yum install -y gcc gcc-c++ zlib zlib-devel tk-devel tcl-devel sqlite-devel ncurses-devel gdbm-devel readline-devel bzip2-devel db4-devel openssl-devel
exec $SHELL -l

gem install 'rb-readline'
gem install 'execjs'
gem install libv8 -v '3.3.10.4' -- --with-system-v8
gem install therubyracer -v '0.10.2' -- --with-v8-dir
```
上記バージョンの組み合わせは→[libv8とtherubyracer入らない問題にわたしもハマったメモ](http://inoao.hatenablog.com/entry/2014/03/27/183523)参照。
インストールしたものはGemFileに書いておく。

## libv8インストール時のいろんなエラー
libv8をインストールするときいろいろエラーに見舞われ、
Pythonのバージョンが古いのかも？(Python6.6？)と思った
ので2.7.5にする。
・・・が、結局何が原因だったかわからない。

### Pythonのバージョンアップ（2.6.6 → 2.7.5）

#### 2.7.5を取得
```
※編集中
sudo yum install -y zlib zlib-devel tk-devel tcl-devel sqlite-devel ncurses-devel gdbm-devel readline-devel bzip2-devel db4-devel openssl-devel
cd /tmp
wget http://python.org/ftp/python/2.7.5/Python-2.7.5.tgz -noなんとか
tar zxvf Python-2.7.5.tgz
cd Python-2.7.5
./configure --with-threads --enable-shared
make
sudo make altinstall
sudo ln -s /usr/local/lib/libpython2.7.so.1.0 /lib/
```
#### デフォルト2.7.5に設定
```
sudo ln -s /usr/local/lib/libpython2.7.so /usr/lib
sudo ln -s /usr/local/lib/libpython2.7.so.1.0 /usr/lib
sudo /sbin/ldconfig -v
sudo ln -s /usr/local/bin/python2.7 /usr/local/bin/python
sudo visudo

 # 下記のように書き換え（`/usr/local/bin:`を追加）
Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin
↓
Defaults    secure_path = /usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

exec $SHELL -l
```
kibanaの検索条件をgetパラメータで操作する



kibanaの検索条件ですが、社内などで使っているとあっという間に検索条件がいっぱいになってしまいます。

以下の方法で検索条件をquery stringで指定できます。

## 検索ボックスに{{ARGS.query || '*'}}と記入して保存
![kibana](https://camo.githubusercontent.com/058cd5d8173b179cd88f942118e06018909aa54b/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313235303338372f313038323737362f62643839646664382d313538642d313165332d383165312d3635346161636533633361352e706e67 "kibana")

* 今回は「my_get」という検索条件名で保存。
* ページをリロードしてしまうと変数が展開されてしまうので、入力してそのままダッシュボード保存する。

## query=~を指定して保存した検索条件にアクセス
```bash
open 'http://localhost/kibana/index.html#/dashboard/elasticsearch/my_get?query=user_name:toyama%20AND%20user_id:1'
```

* 検索条件を`query=user_name:toyama AND user_id:1`と指定しています。
* query stringなのでencodeして渡す。
* queryというパラメータがなければ「*」が検索条件になる

## 備考
* アプリケーションからパラメータを指定してkibanaにアクセスさせる、といった用途に使える！
カラーミーショップのデザイン・テンプレートで楽するための方法 (ソースコードの重複を減らす)

[カラーミーショップ](http://shop-pro.jp)のデザイン・テンプレートの保守や拡張を楽するための方法。
基本的な考え方は、[Smarty](http://www.smarty.net/) やカラーミーショップの機能を活用し、ソースコードの重複を減らすというものです。

カラーミーショップや Smarty は使い始めて間もないため、ミスや改善したほうが良い部分があれば、コメントお願いします。

フリーページの活用
----------------
フリーページは多くの場合、付加的なページ作成に用いられますが、外部テンプレートとして利用することもできます。

例えば、以下のようなフリーページを作ります。フリーページの番号は適宜読み替えてください。

```smarty:フリーページ1
<ul class="products">
  <{foreach from=$product_array item=product}>
    <li>
      <a href="<{$product.link_url}>"><{$product.name}></a>
    </li>
  <{/foreach}>
</ul>
```

このフリーページを、以下のように別のページから呼び出します。

```smarty:商品一覧
<{assign var="my_tpl" value=$file_name|regex_replace:"/\/(.*?)\\.tpl/":""}>
<h1>商品一覧</h1>
<{include file="$my_tpl/free1.tpl" product_array=$productlist}>
```

### 活用のためのポイント

1. フリーページ呼び出し元のソースコードの先頭に `<{assign var="my_tpl" value=$file_name|regex_replace:"/\/(.*?)\\.tpl/":""}>` を書き、呼び出し元で `<{include file="$my_tpl/..."}>` と書くこと

2. `{include}` は、値を呼び出し先に渡せるということ (覚えておくと幸せになれること)

---

1. 同じ1番目のフリーページでも、フリーページのファイル名は、テンプレートごとに変わります。
   テンプレートの追加順によって、`file:1/free1.tpl` や `file:2/free1.tpl` のように変化します。

   `<{assign var="my_tpl" value=$file_name|regex_replace:"/\/(.*?)\\.tpl/":""}>`
   と書くことで、`file:1` や `file:2` の部分を取り出すことが出来ます。

   取り出したファイル名を `{include file=}` に利用することで、
   バックアップ等の目的でテンプレートをコピーした場合でも、テンプレートが正しく作用されます。

2. `<{include file="$my_tpl/free1.tpl" product_array=$productlist}>` で、
   `$productlist` の値を、`free1.tpl` へ `$product_array` として渡すことが出来ます。
   
   これによって、おすすめ商品や新着商品の表示対応も `product_array` に渡す値を変えるだけで可能になります。
即売会サービスを作ろう９(TaskQueue編)


##フィールドマップ
ようやくフィールドマップが作れるのですが、サーバとクライアントのやりとりの詳細が未定だったので今回決めます。
![b56ed26c-077f-e39c-2582-51bc29f48cab.jpeg](https://qiita-image-store.s3.amazonaws.com/0/2029/3459f095-c56c-6b25-42da-d4e84158637f.jpeg "b56ed26c-077f-e39c-2582-51bc29f48cab.jpeg")

このスクリーンショットを見るに
クライアントが要求することは

* マップ情報下さい

にたいして、サーバは

* この会場は(w,h)の大きさである
* マス(a,b)にxxxサークルがある
* マス(c,d)にyyyサークルがある
* マス(e,f)にzzzサークルがある
* マス(g,h)にサークルはない（机があるだけ）

	:
	:

サークル情報は、サークルid,サークルカットのurlがわかればなんとかなりそうです。
マスは１次元で管理すると取り回しが楽そうです。
会場を歩くキャラクタはドラクエの村人のようにランダムで歩行させます。


## サークルの配置場所を決めるロジックについて

配置場所の決定は、サークルメニューより出店状態にした瞬間に起こります。
現状は予め候補を決めておいて、その中からランダムに取得するようにします。

配置場所は以下のようなマス目で赤・黒の色を塗ったところになります。
![map.jpg](https://qiita-image-store.s3.amazonaws.com/0/2029/04712047-ec8a-4799-5c8e-783367da20f4.jpeg "map.jpg")

サークルが出店するときは DataStoreに１出店場所/1エンティティで予め作成しておいて、まだ出店していない場所を検索するようにすると良さそうです

予め作成する方法ですが、以下のようにハードコーディングします。
https://gist.github.com/nagai/3788f27b94d5321abb7f
サークルスペースを作るのにエンティティの書き込み量が多く時間が掛かりそうだったので
TaskQueueを使って並列化しました。またこのapiはサービス管理者以外は必要ないので、

```app.yam
- url: /admin/api/event/.*
  login: admin
  secure: always
  script: controller.admin.api.event.app
```

と管理者権限でログインが必要にしています。

そんなわけで本日のブランチはこちら
https://github.com/nagai/freemarket/tree/20140511

次回はクライアント側にサークル入場・退場処理とフィールドマップのレンダリングを作ります。
Verilator で Verilog コード入門.


漢なら FPGA ですね!
Verilator を使うと Verilog コードを C/C++ に変換してシミュレーションしてれるので試してみましょう.

## シミュレータセットアップ

http://www.veripool.org

verilator を入れます. ubuntu なら apt-get で入ります.

```
$ sudo apt-get install verilator
```

## シミュレーションしてみる

Verilator のドキュメント

http://www.veripool.org/ftp/verilator_doc.pdf

を参考にして簡単な入門コードを書いてみます.

```
$ cat our.v 
module our;
	initial begin $display("Hello World"); $finish; end
endmodule
```

our はなにやら表示するモジュールのようです.

```
$ cat sim_main.cpp 
#include "Vour.h"
#include "verilated.h"

int main(int argc, char **argv, char **env) {
  Verilated::commandArgs(argc, argv);
  Vour* top = new Vour;
  while (!Verilated::gotFinish()) { top->eval(); }
  delete top;
  exit(0);
}
```

Verilator が吐いた C/C++ コードを回してシミュレーションさせる C++ コードです.

Verilator でコードを吐いてみます.

```
$ verilator -Wall --cc our.v --exe sim_main.cpp
```

obj_dir ディレクトリが出来て一式そこにコードが生成されます. Make してシミュレーション実行バイナリを作ります.

```
$ cd obj_dir
$ make -f Vour.mk Vour
$ ./Vour
Hello World
- our.v:2: Verilog $finish
```

Cool! Verilog コードのシミュレーションに成功しました.

これで実 FPGA ボードがなくてもまずはいろいろ試していけそうですね!
push segue と NavigationController メモ


push segue は NavigationController とともに利用する。
※ まだそれ以外の利用をしたことがないので、高度な使い方もあるのかもしれません。

### NavigationController の追加
Storyboard 上で、ViewController を選択（下にあるバーを選択すると楽）して、メニューから以下を実行。
Editor | Embed In | Navigation Controller

### Storyboard で push segue を利用する
今まで modal segue で繋いでいた segue を push にしてみる。
すると、自動的に移動先の画面から back できるようになっている。

### コードで書く push segue の移動と戻り

進む
[navigationController pushViewController:destinationViewController animated:YES]

戻る（単に戻るだけ）
[navigationController popViewControllerAnimated:YES];



戻る際のデータの受け渡しなどが必要な場合、以下のいずれかを行う。（あくまで一例)

  - performSegueWithIdentifier メソッドで unwindSegue を呼び出す  
  - 独自 delegate protocol を使ってデータをやりとりした後に、popViewControllerAnimated を呼び出す


### 参考資料
[iOS]Storyboardで始めるiPhoneアプリ開発 #1 – pushセグエを使う
http://dev.classmethod.jp/smartphone/iphone/introduction-to-storyboarding/

segue の基本
http://qiita.com/mag4n/items/ea7058b35bd7ca99a9e5

segue による画面遷移メモ
http://qiita.com/qt6hy/items/2021ec57617f3425dea0
railsで複数チェックボックスの値を使って検索する

Rails 4.0.3です。
railsで複数チェックボックスの値を使ってテーブルの検索するには、check_boxタグのmultipleオプションを利用します。

例)性別判定
gender.html.haml

```haml
= form_for @search_form, url: hoge_path, remote: true, html: {method: :get} do |f|
  %table
    %tr
      %th 性別 :
      %td
        = f.check_box :gender, {multiple: true}, 'male',nil
        男性
        = f.check_box :gender, {multiple: true}, 'female',nil
        女性
        = f.check_box :gender, {multiple: true},'empty',nil
        データなし 
```

実行結果

```html
<input id="search_form_gender_male" name="search_form[gender][]" type="checkbox" value="male" />
男性
<input id="search_form_gender_female" name="search_form[gender][]" type="checkbox" value="female" />
女性
<input id="search_form_gender_empty" name="search_form[gender][]" type="checkbox" value="empty" />
データなし
```

* multipleオプションはrails doc <http://railsdoc.com/references/check_box>には載ってませんが、使えます。
* multipleオプションを使うことで、genderの結果が配列で渡されます。
* 男性、女性にチェックを入れた場合以下のように値が取れます。
 "search_form"=>{"gender"=>["male", "female"]}  


* 最後のnilはhidden 0をなくすためのものです。
* この値をコントローラー経由でモデル側でscopeで受け取って処理します
gender_controller.rb

```rb
(中略)
@search_form =  SearchForm.new params[:search_form]
@results = Gender.search(:gender =>@search_form.gender)
```

Gender.rb

```rb
(中略)
scope :by_gender, lambda {|gender| where(gender: gender)}
def self.search(params={})
    profile_result = profile_result.by_gender(params[:gender])
    return profile_result
end
```


参考:
<http://apidock.com/rails/ActionView/Helpers/FormHelper/check_box>
Capistrano3で`#<RuntimeError: ☺scp: /tmp/foo/git-ssh.sh: Permission denied`への対処法

色々やってたらこんなエラーで困る。

```
The deploy has failed with an error: #<RuntimeError: ☺scp: /tmp/foo/git-ssh.sh: Permission denied
```

## 解決作

別ユーザーが既に`/tmp`にそういうディレクトリ作っちゃってたので起きたエラーなので、一度サーバーにログインして `$ rm -rf /tmp/foo` で解決

## 参考

https://github.com/capistrano/capistrano/issues/687

## それから
このエラーはデプロイユーザーを変更したので起こってます。
なので、あとデプロイ先も全部削除しとかないと権限不足でエラーになります。はい。
Ubuntu 14.04のFirefoxにJava,Flashプラグインをインストール

Java
==========

[Java download](http://java.com/ja/download/linux_manual.jsp?locale=ja) `Linux x64 * ファイルサイズ: 44.7 MB` をダウンロード

```bash:/usr/lib/mozilla/plugins/libnpjp2.so
$ tar xzf jre-7u55-linux-x64.tar.gz
$ sudo mv jre1.7.0_55 /opt
$ sudo ln -s /opt/jre1.7.0_55/lib/amd64/libnpjp2.so /usr/lib/mozilla/plugins/
```

Flash
==========

[Flash Player download](http://get.adobe.com/jp/flashplayer/?promoid=BPCKX)

`その他のLinux用.tar.gzファイル`から`libflashplayer.so`を
`/usr/lib/mozilla/plugins/`にコピー


あとはFirefoxを立ち上げて動作確認すれば良い。
sshで"Bad packet length 976894522. Disconnecting: Packet corrupt"が出て接続できない場合

sshで"Bad packet length 976894522. Disconnecting: Packet corrupt"が出て接続できない現象に遭遇。

Ubuntu 14.04, ArchLinuxで発生を確認。

```bash:.ssh/config失敗例
Host *
    PermitLocalCommand yes
    # クリップボードでファイル編集用に標準出力。
    LocalCommand echo \# ~/.ssh/memo/%h; test -r $_ && more $_ && echo
```

としているが、LocalCommandの実行をしなければ接続できることがわかった。


```bash:.ssh/config成功例
Host *
    #PermitLocalCommand yes
    # クリップボードでファイル編集用に標準出力。
    #LocalCommand echo \# ~/.ssh/memo/%h; test -r $_ && more $_ && echo
```
NodeとRubyとPythonでスクレイピング


スクレイピングやってみようと思って Node、Ruby、Python でそれぞれ調べてみた。
google.co.jp のタイトルをとってくるという内容で試してみる。

![scraping.png](https://qiita-image-store.s3.amazonaws.com/0/20773/6b063402-fc23-3b0d-73cc-ea4c3fc19c39.png "scraping.png")

Nodeでやってみる
-------------------
[request](https://www.npmjs.org/package/request) でページをとってきて、jQuery的なセレクタが使える [cheerio](https://www.npmjs.org/package/cheerio) でパースして要素を探索という流れでやってみる。

まずターミナルからモジュールをインストール。

````
$ npm install request cheerio
````

適当にファイルつくって実装。

````ruby:scrape.js
var request = require('request'),
    cheerio = require('cheerio');

var url = 'http://google.co.jp';

request(url, function (error, response, body)
{
    if (!error && response.statusCode === 200)
    {
        var $ = cheerio.load(body),
            title = $('title').text();
        console.log(title);
    }
});
````

実行してみる。
>$ node scrape.js
>Google

cheerio は要素取得だけじゃなくて $.addClass とか $.append とかjQueryの一部のメソッドが実装されてるので、DOMをぐいぐい操作するようなケースによさそう。

Rubyでやってみる
-------------------
ぐぐったら [Nokogiri](http://nokogiri.org/) てのが真っ先にでてきた。これがデファクトぽい。
open-uri でページとってきて、Nokogiri でパースしてみる。

````
$ gem install nokogiri
````

open-uri は標準添付なので Nokogiri をインストール。
適当にファイルをつくる。

````ruby:scrape.rb
require 'open-uri'
require 'nokogiri'

url = 'http://www.google.co.jp/'
html = open(url)
doc = Nokogiri::HTML.parse(html)

puts doc.css('title').text
````

HTML.parse で返ってきたオブジェクトは XPath か CSS、またはその両方でも探索できるみたい。CSSセレクタは手軽でいいな。

実行してみる。

>$ ruby scrape.rb
>"Google"

さくっとやるにはとってもよさげ。

Pythonでやってみる
-------------------
最初に [Scrapy](http://scrapy.org/) てのをみつけたのだけど、ちょっと大きめのライブラリなので、もうちょいカジュアルな [BeautifulSoup](http://www.crummy.com/software/BeautifulSoup/) で試してみる。
標準の HTMLParser もあるみたいだけど、BeautifulSoup はいろいろよしなにやってくれるらしい。

インストールは pip ではだめだったので easy_install で入れた。

````
$ easy_install BeautifulSoup
````

urllib でページをとってきて、BeautifulSoup でパースという流れ。

````python:scrape.py
import urllib
import BeautifulSoup

url = 'http://www.google.co.jp/'
html = urllib.urlopen(url).read()
soup = BeautifulSoup.BeautifulSoup(html)

print soup.find('title').string
````

実行してみる。

>$ python scrape.py
>Google

Scrapy(Python)でやってみる
-------------------
[Scrapy](http://scrapy.org/) はクローラーとスクレイピングがセットになったライブラリみたい。
ちょっとだけ試したのでメモ。

````
$ pip install scrapy
`````

[ドキュメント](http://doc.scrapy.org/en/latest/)のチュートリアルをさっと流し読みしてみる。
まず scrapy でプロジェクトテンプレートをつくる。

````
$ scrapy startproject hello
````

spiders 直下にファイルをつくって、クローラーとスクレイピング処理を記述していく。

````python:hello/hello/spiders/scrape.py
from scrapy.spider import Spider
from scrapy.selector import Selector

class HelloSpider(Spider):
    name = "hello"
    allowed_domains = ["google.co.jp"]
    start_urls = ["http://www.google.co.jp/"]

    def parse(self, response):
        sel = Selector(response)
        title = sel.css('title::text').extract()
        print title
````

要素取得には XPath か CSS セレクタが使える。
で、これをターミナルから実行してみる。

````
$ scrapy crawl hello
````

出力結果

> [u'Google']

クローラーもセットになってるので、がっつり作るにはよさそう。
逆引きReactiveCocoa: UITextFieldに入力された値をインクリメンタルサーチする

テキストフィールドに入力された値からインクリメンタルサーチを行いたい場合というのはよくある要件ではないでしょうか。そのようなパターンを __[ReactiveCocoa](https://github.com/ReactiveCocoa/ReactiveCocoa)__ では以下のように実装することができます。

```objc
[[[[[textField.rac_textSignal
    filter:^BOOL(NSString *text) {
        return text.length > 0;
    }]
    throttle:0.5]
    map:^(NSString *text) {
        return [[APIClient sharedClient] fetchSearchResultWithQuery:text];
    }]
    switchToLatest]
    subscribeNext:^(id JSON) {
        NSLog(@"Search result: %@", JSON);
    }];
```

1. `-filter:`で空文字を除外する。
2. `-throttle:`で、入力が一定時間止まった場合にだけテキストの変化を検知するようにする。
3. `-map:`で実際に検索処理を実施・結果を通知する`RACSignal`を返す（これは適宜実装）。
4. `-switchToLatest`で、検索処理が複数回行われる場合に直前の検索処理をキャンセルする。

という流れになります。
google docsにコマンドでアップロードしたい！googleコマンドラインツール


# 概要

Googleのサービスをコマンドラインから操作しよう！

* 'picasa'
* 'blogger'
* 'youtube'
* 'docs'
* 'contacts'
* 'calendar'
* 'finance'

# 参考URL

[公式](https://code.google.com/p/googlecl/wiki/Install)


# インストール

## うまく動かないやーつ

### うまく動かないやーつインストール 

```tex:command
$ sudo pip install googlecl
```

`google docs list`
を実行すると、エラーが出ちゃう。

```エラー
Traceback (most recent call last):
  File "/usr/local/bin/google", line 849, in <module>
    main()
  File "/usr/local/bin/google", line 835, in main
    run_once(options, args)
  File "/usr/local/bin/google", line 540, in run_once
    options.config)
  File "/usr/local/bin/google", line 373, in import_service
    service_module = import_at_runtime('googlecl.' + service + '.client')
  File "/usr/local/bin/google", line 332, in import_at_runtime
    return __import__(module, globals(), fromlist=['0'])
  File "/Library/Python/2.7/site-packages/googlecl/docs/client.py", line 47, in <module>
    googlecl.client.BaseClientCL):
  File "/Library/Python/2.7/site-packages/googlecl/docs/client.py", line 55, in DocsClientCL
    DOCLIST_FEED_URI = gdata.docs.client.DOCLIST_FEED_URI
AttributeError: 'module' object has no attribute 'DOCLIST_FEED_URI'
```

このURLに書いてある内容のエラーだった

https://code.google.com/p/googlecl/issues/detail?id=449

### うまく動かないやーつアンインストール

```
$ sudo pip uninstall googlecl
```

## うまく動くやーつ

### インストール

```
$ sudo pip install http://googlecl.googlecode.com/svn/trunk/
```

```
$ google docs list
```

↓

```
Please specify user: （アカウント）
```

↓

ブラウザが起動する

↓



![googlecl001.png](https://qiita-image-store.s3.amazonaws.com/0/17518/98c662cd-9c28-39d3-fe23-fc2953f4f2b4.png "googlecl001.png")

---

![googlecl002.png](https://qiita-image-store.s3.amazonaws.com/0/17518/4be09cd6-85fc-5542-4e29-82435066c66f.png "googlecl002.png")


↓

```
Please enter the verification code on the success page:（前の画面で表示されたやーつ）
```


# 操作

## 対話形式

```
$ google
> help
Welcome to the Google CL tool!
  Commands are broken into several parts: 
    service, task, options, and arguments.
  For example, in the command
      "> picasa post --title "My Cat Photos" photos/cats/*"
  the service is "picasa", the task is "post", the single
  option is a title of "My Cat Photos", and the argument is the 
  path to the photos.

  The available services are 
'help', 'picasa', 'blogger', 'youtube', 'docs', 'contacts', 'calendar', 'finance'
  Enter "> help <service>" for more information on a service.
  Or, just "quit" to quit.
> quit
$ 
```

## docs upload

```
$ google docs upload work.txt 
Loading work.txt
Upload success! Direct link: https://docs.google.com/a/realworld.jp/document/d/xxxxxxxxxxx/edit?usp=docslist_api
$ 
```

# 問題点（google docs upload）

「-f FOLDER, --folder=FOLDER」が効かない。
[参考](https://code.google.com/p/googlecl/wiki/ExampleScripts#upload)

`Also note that --folder is currently broken;`
割り込みについて


1CPU と複数の入出力装置があるシステムにおいて OS がローレベルで割り込みをどのように処理しているかの概要について整理メモ。
  
まず、各種デバイスのクラスは割り込みベクトル（interrupt vector）と呼ばれるメモリ領域（下位アドレスのことが多い）に配置される。
このベクトルには割り込みハンドラを引き当てるためのアドレスが格納されている。

ここでユーザプログラムが走っている時に、入出力装置からの割り込みが入ったと仮定する。
まず現在のプログラムカウンタや PSW などが CPU によってカレントスタックに積まれる。
その後、CPU はプログラムカウンタを割り込みベクトルで引き当てたアドレスに変更する。  
ここまではハードウェアによってドライブされる。
以後は割り込みハンドラに入る。  

全てのハンドラは、スタックにつまれた情報と割り込み前のプロセスのレジスタ内容を保存することから始まる。
保存先は通常はプロセステーブル内のエントリとなる。
その後、スタックポインタをハンドラが用いる一時スタックに変更する。

このようなレジスタ内容の保存やスタックポインタの設定処理は C のような高級言語ではかけないので、アセンブリで記述する。
割り込み原因に限らず、このルーチンは絶対に共通するので、全部の割り込みで同じコードになる。

割り込みプロセス処理終了時には C で記述された手続きを呼び出して、その割り込み処理に関する残りの処理を実施する。
この時に割り込み前のプロセスを実行可能状態（ready）にさせ、次に実行するプロセスを決めるためにスケジューラが呼ばれることが多い。
その後は再びアセンブリにもどって、次に実行するプロセスのレジスタ内容・メモリマッピングを復元してそれを実行する。  

実際の処理はシステムによっていくらか異なるが、典型的な例を次に示す。  

1. CPU がスタックポインタや PSW などをスタック領域につむ
2. ハードウェアは新たなプログラムカウンタを割り込みベクトルからロードする。
3. アセンブリで書かれた手続きがレジスタ内容を保存する
4. 同様にアセンブリが新たなスタックを設定する（スタックポインタ変更）
5. C 言語で書かれた割り込みサービス手続きが実行される
6. スケジューラが次に実行するプロセスを決定する
7. C で記述されたサービス手続きからアセンブリに戻る
8. アセンブリ手続きが running となったプロセスを起動する
`bundle exec`って毎回打つのめんどくさい人のための設定

Railsで何度も何度も`bundle exec`って打つのがめんどくさいので、現在のディレクトリに`Gemfile`があったら頭に`bundle exec`をつけて実行するスクリプトを使うと便利です。

## 具体例(Windowsでnyaosを使ってる場合)

```lua
rake{
    if exist "Gemfile" then
        bundle exec rake %*
    else
        cmd /c rake %*
    endif
}

cap{
    if exist "Gemfile" then
        bundle exec cap %*
    else
        cmd /c cap %*
    endif
}


guard{
    if exist "Gemfile" then
        bundle exec guard %*
    else
        cmd /c guard %*
    endif
}


rspec{
    if exist "Gemfile" then
        bundle exec rspec %*
    else
        cmd /c rspec %*
    endif
}
```
一括で定義する方法がわからなかったので愚直に何度も書きました。

## Unix系のOSでbashを使ってる場合

```bash
for func in guard rspec rake cap; do
        eval "
        ${func}() {
                local foo=(command ${func})
                [ -e 'Gemfile' ] && foo=(bundle exec ${func})
                \"\${foo[@]}\" \"\$@\"
        }
        "
done
```

## 参考


いつものように教えてもらったものばかりです。

<a href="http://qa.atmarkit.co.jp/q/3665">bash スクリプトから nyaos のスクリプトへの変換 - QA@IT</a>

<a href="http://unix.stackexchange.com/questions/120528/how-to-define-similar-bash-function-at-once">How to define similar bash function at once - Unix &amp; Linux Stack Exchange</a>
逆引きReactiveCocoa: NSNotificationのシグナルを終了させる

[__ReactiveCocoa__](https://github.com/ReactiveCocoa/ReactiveCocoa)には`NSNotification`の通知を`RACSignal`化するサポートがあり、

```objc
[[[NSNotificationCenter defaultCenter]
	rac_addObserverForName:UIApplicationDidEnterBackgroundNotification object:nil]
	subscribeNext:^(NSNotification *note) {
		// do something
	}];
```

という形で通知をシグナルの`next`として受け取ることができます。

しかしこれには一点注意しなければならないことがあります。というのも、`-rac_addObserverForName:object:`で得られるシグナルは`completed`になることがない無限のシグナル (Infinite Signal) であり、その一方で通知のオブサーバー登録の解除はシグナルが終了した時にしかされないため、上記のようなコードだとオブサーバー登録が解除されないままになってしまいます。

通常、ViewControllerでオブサーバー登録・解除を行う場合、以下のようなパターンになると思いますが、

```objc
- (void)viewWillAppear:(BOOL)animated {
	[super viewWillAppear:animated];
	[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(someMethod:) name:name object:nil];
}

- (void)viewWillDisappear:(BOOL)animated {
	[super viewWillDisappear:animated];
	[[NSNotificationCenter defaultCenter] removeObserver:self];
}
```

それと同じことをする場合は下記のようなコードになります。

```objc
- (void)viewWillAppear:(BOOL)animated {
	[super viewWillAppear:animated];
	[[[[NSNotificationCenter defaultCenter]
		rac_addObserverForName:name object:nil]
		takeUntil:[self rac_signalForSelector:@selector(viewWillDisappear:)]]
		subscribeNext:^(NSNotification *note) {
			// do something
	}];
}
```

`-takeUntil:`に対して`[self rac_signalForSelector:@selector(viewWillDisappear:)]`とメソッド呼び出しに対応するシグナルを作用させることで、特定タイミングで元のシグナルを終了させ、結果的にオブサーバー登録が解除されるようになります。