OmniAICreator/Qiita-1.07M huggingface dataset:
OS XでGDBを使う（ためにコード署名をする）

Mac OS Xでの標準デバッガはlldbになりましたが、GDBを使いたいこともあるかと思います。

そのような場合、HomebrewやMacPortsでインストールすることができます。が、最近のOS Xではそのまま起動しようとすると以下の様なエラーが出て、実行できない場合があります。

```gdb
(gdb) run
Starting program: /Users/maki/tmp/a.out 
Unable to find Mach task port for process-id 910: (os/kern) failure (0x5).
 (please check gdb is codesigned - see taskgated(8))
```

これはメッセージの通り、gdbコマンドがcodesignされていないのが原因です。GDBにコード署名する必要があります。

## コード署名の仕方

### 証明書の作成

まず、「キーチェーンアクセス」を開きます。

```sh
$open -a "Keychain Access.app"
```


「キーチェーンアクセス」メニューの「証明書アシスタント」から「証明書を作成...」を選択します。

![「証明書を作成...」を選択](https://qiita-image-store.s3.amazonaws.com/0/4293/1e0f069f-d1a5-a453-4f9a-1ad3f2701906.png)


名前を適当につけ（ここではgdb-certにしています）、「自己署名ルート」「コード署名」を選択し、「デフォルトを無効化」にチェックを入れます。

![証明書を作成](https://qiita-image-store.s3.amazonaws.com/0/4293/b0dfbd5c-8d9d-48c2-f37e-b530f01e276c.png)


「続ける」ボタンを押すと警告が出ますが、そのまま進みます。

![警告は無視する](https://qiita-image-store.s3.amazonaws.com/0/4293/6c439729-5863-b411-3aa3-cebc64c0602f.png)

そのまま「続ける」を押して進めます。拡張鍵用途選択領域では「コード署名」にチェックを入れます。

![「コード署名」を選択](https://qiita-image-store.s3.amazonaws.com/0/4293/5a87b03a-12d5-e3d9-7793-716dcc113ee5.png)


証明書の場所を指定では「システム」を選択します。

![システムを指定](https://qiita-image-store.s3.amazonaws.com/0/4293/4e50d150-a3be-2661-ab6d-ce2dc81143e8.png)


これでコード署名用の自己署名証明書が作られます。「完了」ボタンを押します。

![証明書](https://qiita-image-store.s3.amazonaws.com/0/4293/d84c5334-5f86-95a2-8b8f-0e5656bf9935.png)


### 証明書の信頼設定の変更

さらに、作成された証明書をダブルクリックで開いて、「信頼」を開き、コード署名のところを「常に信頼」にします。

![常に信頼を選択](https://qiita-image-store.s3.amazonaws.com/0/4293/6d8d6fd3-9e6e-ea09-3758-aaa0b9579139.png)


### taskgatedの再起動

ここで証明書を閉じて、キーチェーンアクセスを終了します。そして、taskgatedをいったん終了させて、再起動させます。


### GDBへのコード署名

最後に、GDBにコード署名します。MacPortsのGDBはggdbになっているのに注意。

```
$ sudo codesign -s gdb-cert /opt/local/bin/ggdb
```

Homebrewなら、

```
$ sudo codesign -s gdb-cert /usr/local/bin/gdb
```

になるはずです。


これで、OS XでもGDBが使えるようになります。

## 参考
- https://sourceware.org/gdb/wiki/BuildingOnDarwin
- http://wiki.lazarus.freepascal.org/GDB_on_OS_X_Mavericks_and_Xcode_5
アプリの旧バージョンで設定したものをgetPreferences()で取得できない問題

開発中のアプリをバージョンアップテストしたら、なぜか同じkeyで設定したStringが帰ってこなくなりました。
ユーザ情報をpreferencesに保存しているため、空のユーザ情報が帰ってきて、これは困りました。

調べた結果、原因は下記の2点でした：

* getSharedPreferences()ではなくgetPreferences()を使った
* Activityのパッケージを変えた

### getPrerences()の挙動 ###
getPreferences()の中身はgetSharedPreferences()を呼び出していて、パラメータのnameにgetLocalClassName()の値を埋めています。ただし、そのまま埋めているのではなく、getPackageName()の値と比較しています。もし前方一致していれば、class nameをそのまま埋めるんですが、一致しない場合は、package prefixを残してフルネームで渡してしまいます。

**しかし、getPackageName()の戻り値はActivityのpackage nameではなく、アプリのpackage nameでした。**

昔のバージョンは普通にアプリのpackage = Activityのpackageでやってきたので、パラメータnameはActivityでした。そして、今回は諸事情によりActivityのpackageを変更したら、nameにActivityのフルネームを渡してしまいました。

### Solution ###
```java
getPreferences(mode)
```
のところを明示的に

```java
getSharedPreferences("MyActivity", mode)
```
に変えただけ
Yet Another Org-mode Presentation Script

## 紹介
org-mode からプレゼンを出力する手段は過去にもいろいろとありました。

* org-html5presentation をつかう
* ox-latex から beamer, ないし ox-beamer
* ox-html から org-info を使う

etc, etc.

ただ、html5presentationは、環境依存かもしれませんがスライドがズレる。
beamerは latex style をいじるのがめんどうくさい(cssよりは面倒)

org-info はカスタマイズの自由度が少ない。
いえ、やろうと思えば出来るんですが、癖があり、また機能が足りない。
癖というのは、スライドの遷移に innerHTML のコピペをつかっているので、
javascriptで登録したハンドラなどが消えてしまう点です。
機能面は、たとえば任意の章立てへのジャンプはありますが、
普通のプレゼンにはある「リストの折りたたみ」ができない点など。

あと、org-infoで一番むかつくのはあれですね、ソースが異様に長いところですね。
https://github.com/SebastianRose/org-info-js
なんなの2000行って。 抽象度高いクラスタの人間を殺す気か(怒)(違)
まあ、jqueryなど外部ライブラリに依存していないので、長くなるのは仕方ないのかもしれませんが。
しかし、これでは誰も手を付けられませんね。

まあそういうことで、いままでは org-info 付きで生成されたhtmlを
うまくスタイルシートでごまかしてプレゼンをやってきたのですが、
ついに我慢できなくなり、半日ぐらいで自作しました。
リポジトリはここにあります。
https://github.com/guicho271828/another-org-info

一応、プレゼンに必要な機能、つまり

* 次のスライドへ移動、またはリスト展開 n
* 履歴機能 (pは、「一つ前のスライドにもどる」という意味です)
* 任意セクション移動 s

は実装してあります。残る機能は 現在スライドNo./全体スライド数 の表示とかですかね。

## 使い方

1. リポジトリを git clone でコピーしてください。こうすれば、ついでに自動でバージョン管理がセットアップされるので
    うれしいですね。ただ、できれば branch を分けてから編集したほうがいいかも。
2. presen.org を編集して、org-mode の通常の html export を行なってください。1セクションが1スライドです。
    リストは展開されます。
3. それだけです。 必要な設定は presen.org の中にすでに書いてあります。

## 拡張方法

コードはだれでも理解しやすいよう短く単純に書いたので、jsがわかる人ならたぶん誰でも拡張できます。
ただし、一応 コードがどういう順で書かれているかは書いておきます。

1. CSS 関連や セクション関連のヘルパー関数。 80行目当たりまで
2. スライドをあらわすクラス `Slide`。 グローバル変数 `slide`.
3. onload 関数の実装。
4. キーバインド。

キーバインドの拡張方法ですが、 `keyManager` のハッシュに、
打ち込まれる文字の名前(nやp,s)をキーにして関数を代入してください。
たとえばこんな感じです。

```js
keyManager.p = function(){
    console.log(slide.level);
    slide = slide.prev();
    slide.show();
};
```

いずれ複数キーストロークにも対応させるつもり。 << やりました。
vimでsequential-command.el の <C-a> <C-e>の機能を実現したい。

Emacs使っていた頃につかっていた sequential-command.el （の `<C-a>`と`<C-e>`のみ）みたいなこと出来ないかな？と、vimrcを頑張ってみた。
いろいろ拙いし考慮漏れもあるような気がするけどとりあえず出来たので書いてみる。

※車輪が再開発されている可能性は否めない

```vim:.vimrc(一部）
"ローテート {{{
function! s:save_pos()
	let b:cur_pos = getpos('.')
endfunction
autocmd WinEnter,BufRead * call <SID>save_pos()

nnoremap h h:<C-u>call <SID>save_pos()<CR>
nnoremap j j:<C-u>call <SID>save_pos()<CR>
nnoremap k k:<C-u>call <SID>save_pos()<CR>
nnoremap l l:<C-u>call <SID>save_pos()<CR>
nnoremap b b:<C-u>call <SID>save_pos()<CR>
nnoremap <C-b> <C-b>:<C-u>call <SID>save_pos()<CR>
nnoremap <C-f> <C-f>:<C-u>call <SID>save_pos()<CR>

function! s:rotate_in_buffer(r)
	let pos_f= getpos('.')
	if pos_f == [b:cur_pos[0],1,1,b:cur_pos[0]]
		call setpos('.',b:cur_pos)
		return
	endif
	
	execute a:r ? "normal! ^" : "normal! $"

	let pos_s= getpos('.')

	if pos_f == pos_s
		execute a:r ? "normal! 0" : "normal! G$"
		let pos_t = getpos('.')
		if pos_s == pos_t
			if a:r
				execute "normal! gg^"
			else
				call setpos('.',b:cur_pos)
			endif
		endif
	elseif a:r && pos_s[1] == b:cur_pos[1] && pos_f[2] < pos_s[2]
		execute "normal! gg^"
	endif
endfunction

nnoremap <silent><C-a> :<C-u>call <SID>rotate_in_buffer(1)<CR>
nnoremap <silent><C-e> :<C-u>call <SID>rotate_in_buffer(0)<CR>

"}}}
```

`<C-a>`を上書いてしまっていいのかは謎い。
htmlで外部ファイルを読み込む順番

htmlから外部ファイル(jsやcss)を読み込む場合、順番を工夫すると読み込む速度が早くなる。具体的にはcssとjsをまとめて、cssを先に読み込ませる。なぜこれで早くなるかというと、jsは１つのファイルで読み込み&実行を行なわないと次へ進まないから。jsが一つ一つ処理するのに対してcssは並列に読み込まれるので読み込み速度を早くできる。faviconとかも同じ理屈でいいのかな。
カジュアルなCSV操作ライブラリ OrangeSignal CSV

CSVの読み書きは様々な形式があり、JavaでCSVを扱うのはなかなか面倒なものです。
おそらく、新規案件の度にCsvUtilのような名称のクラスを作成し直しているのではないでしょうか?

そこでおすすめしたいのが、 OrangeSignal.com.より配布されているライブラリ OrangeSignal CSV です。
http://orangesignal.sourceforge.jp/csv/

CSV形式情報(区切り文字、囲み文字、エスケープ文字等)をCsvConfigクラスで設定するだけで、様々な形式のCSVファイルを簡単に操作することができます。


```java:CsvUtil.java

    /**
     * <PRE>
     * コンフィグ情報を読込、リスト形式で返却する
     * <PRE>
     * @param コンフィグ情報 CSVファイル名
     * @return コンフィグ情報
     * @throws IOException
     */
    public static List<ConfigInformation> loadConfigInformation(String fileName)
            throws IOException
    {
        CsvConfig config = new CsvConfig();
        config.setIgnoreEmptyLines(true); // 空行を無視

        File file = new File(fileName);
        return Csv.load(file, config, new ColumnNameMappingBeanListHandler<ConfigInformation>(ConfigInformation.class));
    }
```
Marionette.jsまとめ その3 CompositeView, Layout, Region

[Marionette.jsまとめ その1 Application, Controller, AppRouter](http://qiita.com/tohashi/items/6fdb16367e39afa41d8c)
[Marionette.jsまとめ その2 View, ItemView, CollectionView](http://qiita.com/tohashi/items/85475b2dbbea164179e5)
[Marionette.jsまとめ その3 CompositeView, Layout, Region](http://qiita.com/tohashi/items/b5d1bac3f32d324527ce)

## Marionette.CompositeView

`Marionette.CollectionView`を拡張したオブジェクトです。
`CollectionView`と違い、テンプレートを設定する事ができます。

#### itemViewContainer

itemViewのコンテナとなる要素をjQueryセレクタで指定します。

```js
var FooItemView = Marionette.ItemView.extend({
    template: '#itemTemplate'
});
var FooCompositeView = Marionette.CompositeView.extend({
    el: '#main',
    itemView: FooItemView,
    itemViewContainer: '#fooList',
    template: '#listTemplate'
});
```

```html
<section id="main"></section>

<script type="text/html" id="itemTemplate">
    <li><%- name %></li>
</script>

<script type="text/html" id="listTemplate">
    <h1>Item List</h1>
    <ul id="fooList"></ul>
</script>
```

#### render

```js:レンダリング
var compositeView = new FooCompositeView({
    collection: new Backbone.Collection([
        {name: 'foo'},
        {name: 'bar'},
        {name: 'baz'}
    ])
});
compositeView.render();
```

```html:結果
<section id="main">
    <h1>Item List</h1>
    <ul id="fooList">
        <li>foo</li>
        <li>bar</li>
        <li>baz</li>
    </ul>
</section>
```

## Marionette.Layout

`Marionette.ItemView`を拡張したオブジェクトです。
`MarionetteApplication`同様に`Region`を配下に持つ事ができます。

#### regions, addRegions

Regionを定義・追加します。

```js
var FooLayout = Marionette.Layout.extend({
    template: '#layoutTemplate',
    regions: {
        'foo': '#foo',
        'bar': '#bar'
    }
});
var fooLayout = new FooLayout();

fooLayout.addRegions({
    'baz': '#baz'
});
```

## Marionette.Region

DOMとそれに関連するViewを管理するオブジェクトです。
主に`Marionette.Application`,`Marionette.Layout`のインスタンスの子要素として
定義されます。

```js
var App = new Marionette.Application();

App.addRegions({
    'main': '#main'
});
```

#### show

引数として渡されたViewインスタンスの`render`を呼び、
生成物を自身の`el`内に表示します。
`el`内に既にDOMがあった場合は置き換えられます。
表示中のViewインスタンスは`currentView`として保持されます。

```js
App.module('View', function(View, App) {
    View.FooItem = Marionette.ItemView.extend({
        tagName:  'div',
        template: '#itemTemplate'
    });
});

App.addInitializer(function() {
    App.main.show(new App.View.FooItem({
        model: new Backbone.Model({name: 'foo'})
    }));
});
```

```html
<section id="main"></section>

<script type="text/html" id="itemTemplate">
    <p><%- name %></p>
</script>
```

```js
App.start();
```

```html:結果
<section id="main">
    <div>
        <p>foo</p>
    </div>
</section>
```

#### close

`currentView`の`close`メソッドを呼び出しと
インスタンスへの参照の削除を行います。

```
App.main.close();

App.main.currentView;
// => undefined;
```

```html:結果
<section id="main"></section>
```

## 最後に

まとめは以上となります。
ここで列挙したのは一部の機能だけなので、より詳細な情報は[公式ドキュメント](https://github.com/marionettejs/backbone.marionette/tree/master/docs)、
実際にMarionette.jsを使用して作られたアプリケーションは[TodoMVC](http://todomvc.com/labs/architecture-examples/backbone_marionette/)などが参考になるかと思います。
間違いなどありましたらコメント欄でご指摘いただけると嬉しいです。
Open-uriの認証とリダイレクト


にゃんぱすー

Open-uri による認証と問題点
==============

Open-uri を使用する場合、`open` に `:http_basic_authentication` オプションでユーザ名とパスワードを与えることで認証付のURLにアクセスすることができる。

```ruby
fh = open(
  uri,
  :http_basic_authentication => [user, password],
)
```

その際、アクセス先がリダイレクト (3xx) のステータスを返し、リダイレクト先URLが認証を要求する場合には、常に "401 Unauthorized" の例外 (OpenURI::HTTPError) が発生する。これは同一の認証情報でアクセス可能な場合でも同様である。

原因
====

open-uri ではリダイレクトが行われた場合には、無条件で `:http_basic_authentication` を削除しているため。(Perl の LWP とは動作が異なる。)

```ruby:open-uri.rb
if redirect
  ...
  if options.include? :http_basic_authentication
    # send authentication only for the URI directly specified.
    options = options.dup
    options.delete :http_basic_authentication
  end
```

解決策
=====

リダイレクトされる可能性のあるURIに認証情報を渡す場合は、リダイレクトを無効化 (`:redirect => false`) した上で、自前でリダイレクトを処理する必要がある。

※ `redirectable?` は必要に応じて修正すること。

```ruby
require "open-uri"

def redirectable?(orig_uri, new_uri)
  orig_uri.scheme == new_uri.scheme and
  orig_uri.host == new_uri.host and
  orig_uri.port == new_uri.port
end

uri = URI("http://www.example.com/")
user = "fate"
password = "nanoha"
max_redirects = 10
num_redirects = 0

begin
  fh = open(
    uri,
    :http_basic_authentication => [user, password],
    :redirect => false
  )
rescue OpenURI::HTTPRedirect => redirect
  num_redirects += 1

  if num_redirects <= max_redirects and redirectable?(uri, redirect.uri)
    uri = redirect.uri
    retry
  else
    raise redirect
  end
end
```
Windows環境のEmacsでマークダウンモード(markdown-mode.el)

Windows環境でマークダウン記法のファイルをEmacsで編集したい!という方へ。
Cygwinは使いません。

参考：
[emacsでMarkdownを書く | Kwappa研究開発室](http://randd.kwappa.net/2011/05/31/312)
[Emacsでmarkdown-modeを使用する - kurobaraのブログ](http://moonstruckdrops.github.io/blog/2013/03/24/markdown-mode/)

### ■[公式ページ](http://jblevins.org/projects/markdown-mode/)からmarkdown-mode.elをダウンロード

### ■markdown-mode.elをロードパスの通ったところに置く。

### ■markdown-modeのバイトコンパイル
`M-x byte-compile-file`でmarkdown-mode.elを選択

### ■emacsの設定ファイルに以下を追記

```el
;; markdown-mode
(autoload 'markdown-mode "markdown-mode"
"Major mode for editing Markdown files" t)
(add-to-list 'auto-mode-alist '("\\.txt\\'" . markdown-mode))
(add-to-list 'auto-mode-alist '("\\.markdown\\'" . markdown-mode))
(add-to-list 'auto-mode-alist '("\\.md\\'" . markdown-mode))
```

これで、`.txt`, `.markdown`, `.md` の拡張子のファイルが
markdown-modeで開かれるように。
この時点では色分けされますが、まだhtmlへの変換は出来ません。以降で設定を行います。

### ■Perlのインストール
[strawberryperl](http://strawberryperl.com/)からPerlをダウンロード、インストール。(私のだとStrawberry Perl 5.18.1.1 (32bit) )
割りと時間がかかる。

### ■Markdown.plのダウンロード

[公式ページ](http://daringfireball.net/projects/markdown/)からmarkdown.plをダウンロード(Markdown 1.0.1となっているリンクから。2013/11/24現在の場合)

解凍して、Markdown.plをperlのパスが通った場所に置く。
(私は、`C:\strawberry\perl\site\bin`に置きました。)

### ■emacsの設定ファイルに以下を追記。

```lisp
;; markdownのコマンドのパス追加
(setq markdown-command "perl C:/strawberry/perl/site/bin/Markdown.pl")
```
Markdown.plのパスをコピペして、"\"を”/”に変更するといいです。

### ■実行してみる
.mdのファイルをemacsで開き、markdown-modeになっているか確認。
さらに、C-c C-c p でhtmlをプレビューできることを確認。

perlのコマンドが見つからない、と怒られたら、一度ログオフして再実行。
permission denied と出てきたら、Markdown.plのパスが正しいか確認。
ブロック内でselfを使うと「Capturing self strongly in this block is likely to lead to a retain cycle」と出る場合には


ブロックの外でまず

```
    __unsafe_unretained typeof(self) weakSelf = self;
```
と宣言して、 ブロック内ではweakSelfを用いる


###Reference
http://stackoverflow.com/questions/14556605/capturing-self-strongly-in-this-block-is-likely-to-lead-to-a-retain-cycle
MervericksへのHomebrew+Apacheインストール

初めての投稿のため、テストを兼ねてメモを残す。

Homebrewのインストールは、他の方々が詳しく書いているので割愛。

##Homebrew準備
まずは下記のformuraをtapすることでinstallできるようにする。

```
# OSXで提供されているソフトウェアのformura
brew tap homebrew/dupes
```

dupesの中のhttpdをインストールする

##Apacheインストール
```
# httpdのインストール
brew install httpd
```
```
# インストール済み一覧を表示（httpdが表示されるはず）
brew list
```

homebrewのインストール先は基本的に
/usr/local/Cellar以下
となる。

以上でインストールは終了だが、念のため下記でバージョンと設定ファイルパスを取得。

##Apacheインストール確認
```
# apachectlのバージョン表示
apachectl -v
```
=> 初期提供のapache(2.2.24)が表示される

```
# apacheの設定ファイルパス取得
apachectl -V | grep SERVER_CONFIG
```
=> /private/etc/apache2/〜が表示される

環境変数の設定が初期値では、/user/local/Cellar/httpd/2.2.26/sbinを読みにいかないため、デフォルトのapachectlを使用してしまう。
環境変数に新しいapacheを使用させるようにする。

##使用Apacheの変更
~/以下に、.bash_profileを作成（初期では存在しなかった）し、下記を入力する。

```
# PATHに追加したいパスを記述し、最後に元々の環境変数（$PATH）を継承する感じ？
export PATH = /usr/local/Cellar/httpd/2.2.26/sbin:$PATH
```
これでターミナルを再起動すれば、インストールしたapacheの起動ができる。

```
apachectl -v
```
=>apache 2.2.26が表示される

```
apachectl -V | grep SERVER_CONFIG
```
=> /usr/local/etc/apache2/httpd.confが表示される。

また、Macでのhostsファイルは
/etc/hosts
に存在する。
初期値は以下。

```
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1	localhost
255.255.255.255	broadcasthost
::1             localhost
fe80::1%lo0	localhost
```

こういうファイルって、どのタイプでハイライトさせたらいいんだろう？
PlayFramework2.2.0 でSassを使用する

PlayFrameworkでSassを使おうとして時間を浪費したのでメモ。。。
Sbtもあまり理解できていない状態でやると色々捗らないですね。

#環境
MacOS X (10.9)なので、Windowsの場合は分かりません。

#やりたいこと
タイトルの通り、PlayFrameworkでSassを利用する
※Eclipseとの連携は？という疑問を持つ人もいるかもしれませんが、
　sbtとplay-sass、sassだけで完結します。


#手順
##Sassを導入する
最終的にはPlayFramework向けのプラグインを利用するのですが、
その前にSass本体が必要となります。

$ sudo gem install sass
※3.2.12が入りました。

##play-sass（PlayFramewor向けプラグイン）を導入する
[Github:play-sass](https://github.com/jlitola/play-sass)

###まずは、プラグインの設定を行います。

```scala:{yourProjectName}/project/plugins.sbt
//以下を追記

resolvers += "Sonatype OSS Releases" at "https://oss.sonatype.org/content/repositories/releases"

addSbtPlugin("net.litola" % "play-sass" % "0.3.0")
```

###次に、プロジェクトのビルド設定を行います
ここで理解しておらず嵌りました。
以下のコメントを参考に設定する必要があります。

```scala:{yourProjectName}/project/plugins.sbt
// 使用するにあたって、importを宣言するのですが、
// 理解している人には当然なのかもしれませんが、
// 行頭で宣言する必要があります。
// ググると2.0,2.1系や1.x系の設定例ばかり出ているので注意が必要です。
import net.litola.SassPlugin

// 他の設定は私的な設定なので無視してください。
// --- ここから
name := "Inco"

version := "1.0-SNAPSHOT"

libraryDependencies ++= Seq(
  jdbc,
  anorm,
  cache
)     

libraryDependencies += "org.scalatest" % "scalatest_2.10" % "2.0.RC3" % "test"

libraryDependencies += "org.scalaz" %% "scalaz-core" % "6.0.3" // scalazを有効にしてます
// --- ここまで

// これも追加
play.Project.playScalaSettings ++ SassPlugin.sassSettings
```

##Sassを使ってみる
正直、Sassもこれから勉強なので詳しくないのですが、
例えば、
main.scss としてファイルを作ると、ビルドによって
main.min.css と main.css
が作成されます。

適当にsassを作成
※asstesに置くのはルールだと思ってください。

// scala:{yourProjectName}/assets/stylesheet/main.scss
// ではなく、
// scala:{yourProjectName}/app/assets/stylesheet/main.scss
// とのご指摘を受けました。（未確認）
```scala:{yourProjectName}/assets/stylesheet/main.scss
a{
     font-weight: bold;
     &:hover{
          text-decoration: none;
     }
}
```

###htlm上でcss（scss）を呼び出します

```scala:
<!-- こんな感じ -->
<link rel="stylesheet" media="screen" href="@routes.Assets.at("stylesheets/main.css")">
```

###画面アクセス時に、以下のパスへcssが展開されます
※プロダクションモードだと最初から展開してくれるかは未調査

```scala:{yourProjectName}/target/scala-2.10/resource_managed/main/public/stylesheet/main.css
// scss->cssに展開されている
a {
  font-weight: bold; }
a:hover {
  text-decoration: none; }
```
第16回オフラインリアルタイムどう書くの参考問題＋


オフラインでリアルタイムに「どう書く」をやるイベント
http://atnd.org/events/45016
をやります。

現時点では、まだまだ空きがありますので是非。
で。

今回の参考問題は「L被覆」という名前で、
http://nabetani.sakura.ne.jp/hena/ord16lcove/
です。

当日出す問題の難易度と分量はこれを目安に考えると良いと思います。
とはいえ、これよりは若干簡単にすると思います。

参加予定の方は、何分で解けたとかいう情報を付けてくださると、本番用の問題の参考になりますのでできればお願いします。

ちなみに。
本番用の問題はこれから考えます。

それと。先日 CodeIQ に出した問題(テトロミノ＋ビンゴ！)も公開されています。
　CodeIQ : https://codeiq.jp/ace/nabetani_takenori/q524
　問題  : http://nabetani.sakura.ne.jp/codeiq/tetromino_bingo/
　解題と解説 : http://nabetani.hatenablog.com/entry/codeiq_tetromino_bingo
　解答リンク集 : http://nabetani.hatenablog.com/entries/2013/11/23

実装ができた方はこちらのコメント欄からリンクを張っていただくと見つけやすくて助かります。
Virtuoso 7とHtmlPivotalViewerをUbuntu 64bitにインストール

[こちら](http://virtuoso.openlinksw.com/dataspace/doc/dav/wiki/Main/VOSMake#Introduction)の手順にしたがって、Virtuoso 7とHtmlPivotalViewerをUbuntu 12.04 LTS 64bitにインストールしたメモ。

githubからvirtuoso-opensourceをgit cloneし、stable7ブランチに切り替えておく。

```
$ git checkout stable/7
```

# 依存パッケージのインストール
```
$ sudo apt-get install libssl-dev
$ sudo apt-get install autoconf automake bison flex gawk gperf libtool
$ ./autogen.sh
```

# configure
`isql`の名前が衝突する可能性があるとのことで、注意書きにしたがって`isql-v`とリネームする設定でconfigureを実行した。

```
$ CFLAGS="-O2 -m64"
$ export CFLAGS
$ ./configure --program-transform-name="s/isql/isql-v/"
...
Virtuoso Open Source Edition (Column Store) 7.0.0 configuration summary
=======================================================================

Installation variables
  layout                  default
  prefix                  /usr/local/virtuoso-opensource
  exec_prefix             ${prefix}

Installation paths
  programs                ${exec_prefix}/bin
  include files           ${prefix}/include
  libraries               ${exec_prefix}/lib
  manual pages            ${datarootdir}/man
  vad packages            ${datarootdir}/virtuoso/vad
  database                ${prefix}/var/lib/virtuoso/db
  hosting                 ${exec_prefix}/lib/virtuoso/hosting

Options
  BUILD_OPTS               xml ssl imsg pldebug pthreads
```

# ビルドとインストール
```
$ make
... (10分くらい)
$ make check
... (20分くらい)
```
make checkは[8902 passed, 6 failed](https://gist.github.com/ikuo/7623255)だった。
致命的でないように見えたので、中の人にメールを送った上でインストール続行。

```
$ sudo make install
```

# サーバの起動
```
$ export VIRTUOSO_HOME=/usr/local/virtuoso-opensource
$ export PATH=$PATH:$VIRTUOSO_HOME/bin
$ cd $VIRTUOSO_HOME/var/lib/virtuoso/db/
$ sudo $VIRTUOSO_HOME/bin/virtuoso-t -f
...
13:34:50 Server online at 1111 (pid 29590)
```

# 動作確認
```
$ isql-v
OpenLink Interactive SQL (Virtuoso), version 0.9849b.
Type HELP; for help and EXIT; to exit.
SQL>
```
コンソールが無事に立ち上り、 http://localhost:8890/conductor にもアクセス、ログインできた。

# HtmlPivotalViewerのセットアップと動作確認
[前回中断](http://qiita.com/ikuo@github/items/4681e52cf3112144f146#1-5)した、HtmlPivotalViewerのセットアップをやってみる。

前回失敗したsparql_cxml_dav.vadのインストールが、今回は通った。

```
SQL> vad_install('/tmp/sparql_cxml_dav.vad');
...
00000         Installation of "sparql_cxml" is complete.
```

http://localhost:8890/HtmlPivotViewer にアクセスし、右上のeditを押して現れる"Dynamic Collection"に、手順にあったサンプルデータ（ドイツで行われたイベントのデータ?）を入れてみる。

Query Service Endpoint フィールド

```
http://linkeddata.uriburner.com/sparql
```

Query Text フィールド

```sql
describe ?s from <http://www.meetup.com/Frankfurt-Semantic-Web-Meetup/members/> where {?s a foaf:Person} limit 2000
```

右下の"View"ボタンを押すと、サンプルデータにある人の顔がたくさん表示された。

左のサイドペインでファセット表示や条件の絞り込みがあって、例えば `opl:locality`プロパティが `Frankfurt` のデータが30件あることが分かり、チェックすると右側の画像が絞り込まれる。

## qrcode? image_magick?
[手順](http://virtuoso.openlinksw.com/dataspace/doc/dav/wiki/Main/VirtVisualizeWithHtmlPivotViewer)どおり、virtuoso.iniに下の2行を追加してサーバを再起動すると、HtmlPivotalViewerへのレスポンスが500になってしまった。

```
Load6=plain, im
Load7=plain, qrcode
```

また、エンドポイントを http://localhost:8890/sparql にしてローカルのデータをとろうとしても500が返ってくる。HtmlPivotalViewerについては一旦この辺で追うのをやめよう。
ライフゲーム

## はじめに

ライフゲームについて書きます。なんだか申し訳ない気持ちでいっぱいなのはなぜなんでしょう。。。

## 経緯

メモを整理していたところ、ライフゲームの実装メモを見つけました。今回はライフゲームについて書きたいと思います。

これは2009年1月ごろに実装したものです。当時の私はWindows XPを使っていました。プログラミングに不慣れで、開発環境を構築することもむずかしかったと記憶しています。

そのため、Excel 2003のマクロで実装しました。この理由はExcel 2003を使うと、むずかしそうなGUIの実装を省略できそうだと見込んだことと、Excelのマクロなら開発環境を構築する必要がなかったからです。つまり、お手軽だったからです。

きっかけは[戸田盛和](http://ja.wikipedia.org/wiki/%E6%88%B8%E7%94%B0%E7%9B%9B%E5%92%8C)さんの「ソリトン，カオス，フラクタル」です。この本にライフゲームのことが書かれてあり、これなら実装できるかもしれないと思ったからです。

## 仕様

[ライフゲーム](http://ja.wikipedia.org/wiki/%E3%83%A9%E3%82%A4%E3%83%95%E3%82%B2%E3%83%BC%E3%83%A0)を参照しました。これを自分なりに意訳すると次のようになりました。

* 碁盤のような格子があり、一つの格子をセルとみなす。
* 各セルには「生」と「死」の2つの状態がある。
* 各セルのまわりには8つのセルがある。（ムーア近傍）
* あるセルの次のステップ（世代）の状態は、ムーア近傍によって決定される。
* 初期状態のみでその後の状態が決定される。

状態遷移のルールは次のようになります。

* 誕生: 死んでいるセルに隣接する生きたセルがちょうど3つあれば、次の世代が誕生する。
* 生存: 生きているセルに隣接する生きたセルが2つか3つならば、次の世代でも生存する。
* 過疎: 生きているセルに隣接する生きたセルが1つ以下ならば、過疎により死滅する。
* 過密: 生きているセルに隣接する生きたセルが4つ以上ならば、過密により死滅する。

## 実装

この仕様を実装すると、次のような実装になりました。ポイントは生きたセルが2と3のときです。

``` lifegame.vba
' マクロオプションでショートカットキーを設定することを推奨します。
' 条件付き書式の設定を推奨します。
' 次のようなパターンの場合、有限個のパターンが周期的にあらわれます。

' 0 0 0 0 0 0 0 0
' 0 0 0 0 1 0 0 0 
' 0 0 0 1 0 0 0 0
' 0 0 1 0 0 0 0 0
' 0 0 0 1 0 0 0 0
' 0 0 0 0 1 0 0 0
' 0 0 0 0 0 0 0 0

Sub lifegame()

  ' set table size
  Dim l As Integer

  l = 30

  ReDim table(l + 2, l + 2) As Integer
  ReDim dummytable(l, l) As Integer

  ' set upper left
  Dim xs As Integer
  Dim ys As Integer

  xs = 2
  ys = 2

  ' copy a cell value on worksheet to an element of table variable
  For i = 1 to l
    For j = 1 to l
      table(i, j) = Cells(ys + i - 1, xs + j - 1).Value
    Next
  Next

  ' set boundary condition
  table(0, 0) = 0
  table(0, l + 1) = 0
  table(l + 1, 0) = 0
  table(l + 1, l + 1) = 0

  For i = 1 to l
    table(i, 0) = 0
    table(i, l + 1) = 0
  Next

  For j = 1 to l
    table(0, j) = 0
    table(l + 1, j) = 0
  Next

  ' here is logic in this program.
  ' relate table(i, j) to dummytable(i-1, j-1)
  For i = 1 to l
    For j = 1 to l
      dummytable(i - 1, j - 1) = table(i - 1, j - 1) _
                               + table(i    , j - 1) _
                               + table(i + 1, j - 1) _
                               + table(i - 1, j) _
                               + table(i + 1, j) _
                               + table(i - 1, j + 1) _
                               + table(i    , j + 1) _
                               + table(i + 1, j + 1)
    Next
  Next

  ' classify the result of evaluation
  For i = 1 to l
    For j = 1 to l
    Select Case dummytable(i - 1, j - 1)
      Case 2
        dummytable(i - 1, j - 1) = table(i, j)
      Case 3
        dummytable(i - 1, j - 1) = 1
      Case Else
        dummytable(i - 1, j - 1) = 0
      End Select
    Next
  Next

  ' copy a result of classification to a cell value on worksheet
  For i = 1 to l
    For j = 1 to l
      Cells(ys + i - 1, xs + j - 1) = dummytable(i - 1, j - 1)
    Next
  Next
  
End Sub
```

## 実行環境

* Windows XP
* Excel 2003
Terminalからファイル名を指定してBracketsを開く

Sublime Textの`subl`コマンドのように、Terminalからディレクトリ名やファイル名を指定してBracketsを開く`brackets`コマンドをつくりました。

```zsh:/usr/local/bin/brackets
killall Brackets > /dev/null 2>&1

if [ -d "$1" ]; then
  TARGET=$(cd "$1"; pwd)
elif [ -e "$1" ]; then
  TARGET=$(cd "$(dirname "$1")"; pwd)/$(basename "$1")
fi

if [ -n "$TARGET" ]; then
  open -a Brackets --args "$TARGET"
fi
```

このシェルスクリプトを __/usr/local/bin/brackets__ 辺りに置けば、

```zsh
$ brackets .         # カレントディレクトリをBracketsで開く
$ brackets js/app.js # app.jsを開く
```

といった感じで使えるようになります。
ブラウザに世界時間を一覧で表示してくれるFoxClocks


[FoxClocks](http://foxclocks.org/)

普段からFirefoxに積んで愛用しているのですが、どこかのタイミングで設定が初期に戻ってしまったいたのでメモ。

- 時間の設定→書式の記号列: `<mon2>-<d2> <24h2>:<m>`
- 位置と表示形式→表示: `FoxClocksアイコン(カーソルを乗せると時間を表示)`
バンディットアルゴリズムまとめ

## 背景
### 継続的なテスト
- メリット：常に変化する環境の中で、最適な組み合わせを問うことができる。
	- はたしてハロウィーンの時のロゴとクリスマスの時のロゴが同じで果たしていいのか？
- デメリット：テスト期間は、ある程度収益を犠牲にすることになる。
	- 黄と紫の組み合わせのような、ひどいアイデアも出さなければならない（もちろん、結果的にわかるものだが）

### 探求と活用のトレードオフ
- 探求
	- 収益は犠牲になるかもしれないが、新しいアイデアを試す。
- 活用
	- 他にもっと良いアイデアがあるかもしれないが、現時点で最善のものを出す。

## 手法
### 概観
- 試したいアイデアをスロットマシンの腕とみなす。
	- 素晴らしい腕は、高い確率で収益をもたらす。
	- 事前知識はない。
- できるだけ少ない試行で優秀な腕を見つけ出し、得られる収益を最大にしたい。
- アルゴリズムのシステムの要素
	- 腕を引く
	- 学習する
- 外界とのインタラクションを通じて、報酬を最大化するエージェント。
- 学習する方法は基本的に加重平均
- 腕を引く方法について様々な手法が提案されている

### シミュレーション
- 5 台の腕を用意する
- それぞれ 0.1, 0.1, 0.1, 0.1, 0.3 の確率で報酬 1 を得ることができる。
- それ以外は報酬 0

### 手法１：e-greedy
- 確率 e で「探求」を行う。確率 (1-e) で「活用」を行う。
- すなわち、確率 e でランダムに腕を選び、確率 (1-e) で今までの中最善とわかっている腕を選ぶ。
- 「何も考えずに、ある一定の確率でベンチ選手にチャンスを与える」

#### 結果
- 探求する確率 e を大きくすればするほど、すぐに最適手が見つかるため、立ち上がりが早い。
- しかし、その後も懲りなく探求をし続けてしまうため、平衡状態に陥った後は e が小さい時に負けてしまう。

### 手法２：softmax
- 明らかに悪い腕についても、同じようにチャンスを与える必要があるのか？
- 惜しい腕には多めに、明らかに悪い腕には少なめにチャンスを与える方が、全体の収益を向上できるのではないか。
- そこで、温度パラメタ$T$を導入し、$n$個の腕のうち腕$i$が選ばれる確率$p_i$を以下のように定義する。 ただし、$v_i$は腕$i$によって得ることができる報酬の期待値。
- 「チャンスを与えた時の成績に応じて、起用を調整していく」

```math
p_i = \frac{\exp(v_i / T)}{\sum_i\exp(v_i/T)}
```
- $T\to\inf$の時$p_i\to1/n$となり、ランダムに選択することに相当する。
- $T\to 0$の時、$p(argmax(v_i))\to1$

#### 結果
- e-greedy よりも早く立ち上がるようになった。

### 手法２．５：アニールする softmax
- 温度をだんだんと下げていく
- 「ペナント後半になると、あまりスタメンを変えないようにする」

### 手法３：UCB
- ある腕に対する確信度合いを考えることで、たまたま否定的な経験を繰り返してしまったことで見誤るリスクを減らす。
- 確信度合いは、今までその腕をどれだけ試したかである。
- 「好奇心」項を導入して確信度合いが低いものを積極的に試していき、確信度高く成績の悪い腕を排除していく。
- 「新人は積極的に起用する」

#### 結果
- まあまあの成績

## まとめ
- 新しいアイデアを腕と見立てて、実験をしつつ収益を最大化するための手法について説明した。
- エージェントっぽい
	- ただ、自分で出す水準を操作するエージェントであり、出す因子を操作するエージェントではない。
- 後半の２つは、与えるパラメタが減るから良いという説明だったが、本当にそうかなと思った。
	- UCB だって、ボーナス項にパラメタがあるじゃん
	- アニール具合もパラメタじゃん
- スプリットテスト vs バンディットアルゴリズムというより、スプリットテストの戦略を考えるのがバンディットアルゴリズム。
- 複数変数がある場合は、その組み合わせを腕とする。



### 残る問題
- 普通、ウェブサイトで実験したいものは一つではない。
- ロゴだけではなく、テキストやフォント、色々なものを試したい。
- バンディットアルゴリズムでは、それぞれを組み合わせとして腕とすることを提唱しているが、実際はそれだけで組み合わせ爆発を起こしてしまう。
- 因子にも、確信度の概念を拡張することは出来ないか。
- 一つメタなバンディットアルゴリズムを作ることは出来ないか。


## 参考文献
- バンディットアルゴリズムによる最適化手法
John Myles White　著、福嶋雅子、株式会社トップスタジオ　訳
https://support.google.com/analytics/answer/2844870?hl=ja&ref_topic=2844866
Tmux notes


## Installation

Usally `brew install tmux` should work but not for me.

### Installing libevent
[Read this blog for more details](http://www.cloudspace.com/blog/2009/01/13/installing-libevent-on-mac-osx/)
I tried to install tmux but I had error messages for iibevent which I installed through homebrew. So I first [downloaded libevent](http://libevent.org/).

```terminal
$ cd Downloads\libevent-2.0.21-stable
$ ./configure && make
$ sudo make install
```
### Installing tmux
[Read this for more details](http://sourceforge.net/p/tmux/tmux-code/ci/master/tree/README#l16)

Then I downloaded [tmux](http://tmux.sourceforge.net/).

```terminal
$ cd ..
$ cd tmux-1.8
$ ./configure && make
$ sudo make install
```

## How to use it
[Basic Usage](https://www.digitalocean.com/community/articles/how-to-install-and-use-tmux-on-ubuntu-12-10--2)

```terminal
# start tmux
$ tmux
# or give the session a name, with -s <session_name>
$ tmux new -s rubyvim
```
### Controlling Panes

```keyboard
# Split into two panes.
Ctrl-b %

# Split the pane horizontally
Ctrl-b "

# Switch to the next pane
Ctrl-b o

# To cycle through the panes, use up, down, left or right key
Ctrl-b Up

# Cycle through layouts
Ctrl-b space

# Kill a pane
exit
# or
Ctrl-b x

```

### Windows

```keyboard
# To create a new window:
Ctrl-b c

# To move to the next window in the index:
Ctrl-b n

# To move backwards in the index:
Ctrl-b p

# To move to nth window, n = 1, 2, 3 etc
Ctrl-b n

# name widnow
Ctrl-b ,

# Find a window
Ctrl-b f
# and type a name

# Kill window
Ctrl-b &

```
```terminal
# split windows with commands
$ tmux split-window

```

### Session

```keyboard
# To go back to the normal terminal screen, you need to detach it from a session. 
Ctrl-b d

# To go back to the session you need to re-attach to a session
tmux attach -t [session name]

# View active sessions:
tmux list-sessions
# or shorthand
$ tmux ls

# A list of all command keys is accessible with:
Ctrl-b ?

# kill a session
$ tmux ls
0: 1 windows (created Sat Aug 17 00:03:56 2013) [80x23]
2: 1 windows (created Sat Aug 24 16:47:58 2013) [120x34]

$ tmux kill-session -t 2

$ tmux ls
0: 1 windows (created Sat Aug 17 00:03:56 2013) [80x23]

```

## Command mode

```tmux

# enter command mode
Ctrl-b :

# then create a new window
new-window -n console

# create a new window with starting a top program
new-window -n processes "top"

# quit the program
q
```


## tmux.sh

```tmux.sh
#!/bin/sh
tmux new-session -d -s sample_app

tmux new-window -t sample_app:2 -n 'server' 'bundle exec rails server'

tmux new-window -t sample_app:3 -n 'vim' 'vi'

tmux attach -t sample_app

```







## Resources
[Manual](http://www.openbsd.org/cgi-bin/man.cgi?query=tmux&sektion=1)

[tmux book](http://goo.gl/n7UL6n)

[Tmux](https://wiki.archlinux.org/index.php/tmux)

[tmux shortcuts & cheatsheet]
(https://gist.github.com/MohamedAlaa/2961058)

[A tmux Crash Course](http://robots.thoughtbot.com/a-tmux-crash-course)

[LA Ruby Conference 2013](http://www.confreaks.com/videos/2291-larubyconf2013-impressive-ruby-productivity-with-vim-and-tmux)

[Chris Humt's tmux configuration](http://goo.gl/98M56)
sinatra boilerplate

なんで `sinatra new` みたいなコマンド無いんだろう。

```rb:app.rb
get '/' do
  if @something_goes_wrong
    halt 400, "oops"
  end
  'hello world'
end
```

```rb:config.ru
require 'bundler'
Bundler.require
$stdout.sync = true # https://devcenter.heroku.com/articles/getting-started-with-ruby#logging               
require './app'
run Sinatra::Application
```

```rb:Gemfile
source "https://rubygems.org"
gem "sinatra"
```

ローカルで実行するときは `rackup` や `shotgun`

heroku にデプロイする場合は

```
git init
git add app.rb config.ru Gemfile Gemfile.lock
git commit -m 'initial commit'
heroku create your-app-name
git push heroku master
heroku open
```
ブラウザ上でファイル管理ができるPydio(旧名: AjaXplorer)を使ってみた

[公式サイト](http://pyd.io)、[プラグイン一覧](http://pyd.io/plugins/)
Dropboxのブラウザ版みたいな感じ。
使い勝手はいまいちだが、apacheのファイル一覧表示機能を使っている人には良いと思います。
mp3のストリーミング再生に対応している。

準備
----------

* [pydio.zip](http://jaist.dl.sourceforge.net/project/ajaxplorer/pydio/stable-channel/6.4.1/pydio-core-6.4.1.zip)
を解凍し、pydio/data/以下の権限を777にする。

パッケージは以下があればよい。(ubuntu)

* libapache2-mod-php5
* php5-gd
* php5-mcrypt

ファイルアップロードの上限を変更
----------

ファイルのアップロード上限はデフォルトで2MBなので増やしておく。
/etc/php5/apache2/php.ini の以下設定を変更し apache 再起動。

* memory_limit
* post_max_size
* upload_max_filesize

また、Pydioの設定からアップロード上限を変更しておく必要がある。

* php 5.3.4 から post_max_size = 0 にしても上限を[無効にできなくなった](http://php.net/manual/ja/ini.core.php)様子
* [Topic: Defult Max size for upload | Pydio](https://pydio.com/forum/f/topic/defult-max-size-for-upload/)

> Settings->Core Config->Uploaders Options

![limt.png](https://qiita-image-store.s3.amazonaws.com/0/25728/3015b650-5771-fe22-92ca-008d8227cea2.png)

2097152 = 2MB。

0 に設定すると上限がなくなる。


## output_bufferingを無効にする

パフォーマンス向上のために
/etc/php5/apache2/php.ini の以下設定を変更し apache 再起動。
* output_buffering = Off

ログインのパスワード設定
-----------
* パスワードレベルが`week`と表示されている場合はインストールボタンを押せないので注意。
* chromeだと画像が出ないことがある。その場合はsafariを使えば良い。
Pitfall in CoffeeScript

(CoffeeScript version 1.6.3)

```failure.coffee
markdown += 'Title: '+ this.title +'\n'
```

is compiled into

```failure.js
markdown += 'Title: ' + this.title(+'\n');
```

On the other hand

```success.coffee
markdown += 'Title: ' + this.title + '\n'
```

is compiled into

```success.js
markdown += 'Title: ' + this.title + '\n';
```

hmm…

See also: [CoffeeScript: less typing, bad readability | Manuel Cerón](http://ceronman.com/2012/09/17/coffeescript-less-typing-bad-readability/)
パッケージにアンダースコアが入っていた場合にJNI関連でハマったのでメモ

JNIでJavaコードからC++コードを呼びだそうとした時にちょっとハマったのでメモ。
通常、JNIでは以下のように指定してネイティブメソッドを呼び出す。

```java:Hoge.java
package com.test.foo;

class Hoge {
    private native void nativeMethod(final int param);
}
```

```cpp:Java_com_test_foo_Hoge.cpp
JNIEXPORT void Java_com_test_foo_Hoge_nativeMethod(jint param) {
}
```

## ハマった箇所
パッケージ名にアンダースコアが入った場合に、

```java:Hoge.java
package com.test.foo_bar;

class Hoge {
    private native void nativeMethod(final int param);
}
```

```cpp:Java_com_test_foo_bar_Hoge.cpp
JNIEXPORT void Java_com_test_foo_bar_Hoge_nativeMethod(jint param) {
}
```

とすると、ネイティブメソッドが見つからないという内容のリンクエラーが発生する。
一時間ほど悩んだ末に、下記のページを見つけた。

[Invoking JNI functions in Android package name containing underscore](http://stackoverflow.com/questions/16069209/invoking-jni-functions-in-android-package-name-containing-underscore)

C++側でメソッドを定義する場合はアンダースコアの後に1を付ける必要があるらしい。

```java:Hoge.java
package com.test.foo_bar;

class Hoge {
    private native void nativeMethod(final int param);
}
```

```cpp:Java_com_test_foo_bar_Hoge.cpp
JNIEXPORT void Java_com_test_foo_1bar_Hoge_nativeMethod(jint param) {
}
```

これでOK。

そういえば、"_"の事をアンダースコアじゃなくてアンダーバーって言う事が多いけど、和製英語らしいね。
highlight-symbolをsmartrepを使ってキー消費を抑えながらバインドする


Vimの'*'に相当するやつ。色々試行錯誤の結果としてやっといい感じになってきた。後はsmartrepが起動キーと一緒に特定のコマンドを実行出来るようになればなぁ。M-sの一回目からhighlight-symbol-nextに割り当てたい。

- M-s連打で次のシンボルに移動
- M-s h でハイライトのON/OFF
- M-s n N …でシンボルの前後に移動
- M-s j kで関数内スコープでシンボルを前後に移動
- M-s r でシンボルを置換

```el
(require 'highlight-symbol)

(global-unset-key (kbd "M-s"))

(smartrep-define-key global-map "M-s"
  '(("M-s"        . 'highlight-symbol-next)
    ("h"          . 'highlight-symbol-at-point)
    ("n"          . 'highlight-symbol-next)
    ("p"          . 'highlight-symbol-prev)
    ("N"          . 'highlight-symbol-prev)
    ("l"          . 'highlight-symbol-list-all)
    ("a"          . 'highlight-symbol-remove-all)
    ("o"          . 'highlight-symbol-occur)
    ("j"          . 'highlight-symbol-next-in-defun)
    ("k"          . 'highlight-symbol-prev-in-defun)
    ("r"          . 'highlight-symbol-query-replace)))
```
GoogleAppsScriptメモ：クライアント側Javascriptとの併用

スクリプトエディタから新規作成でHTMLファイルを作ったらそれを読み込むことが可能
#### しかもそこには<script>タグも埋め込むことができる。 ####

HTMLを使う方法は二つ

```js
//普通にHTMLを使うだけの場合
function doGet(){
   var html = HtmlService.createHtmlOutputFromFile('htmlFileName');   //拡張子は不要
   return html;
}
```

```js
//HTML側にもサーバーサイド側の処理を書きたい場合
function doGet(){
   var temp = HtmlService.createTemplateFromFile('TemplateFileName').evaluate();
   return temp;
}
```

後者の場合、サーバーサイド側のスクリプトはこう書く

```html
<?
   var app = UiApp.getActiveApplication();
   ..........etc
?>
```

ただし、サーバーサイド側のスクリプトとクライアント側のスクリプトとで変数を渡し合ったりとかは今のところできないでいる。やり方はありそうな気がするのだが・・・・・・
argparse その1

とりあえず使ってみた

```py
import argparse

parser = argparse.ArgumentParser(description="hoge")
args = parser.add_argument("-d","--dir",default="./")
args = parser.parse_args()

print args.dir
```

http://docs.python.jp/2.7/library/argparse.html#module-argparse の説明見ても高機能過ぎてなんのことか分からなかったけど、とりあえず動いた。

add_argumentで"-d","--dir"とか書くと、そのオプションを指定できるようになって、デフォルト値も指定できると。で、parse_argsしたらsys.argvから取ってきた結果をオブジェクト的な感じで返してくれる。namespaceオブジェクトとやらが何なのか分からなかったけど、こういう使い方でよいっぽい。
CentOS6.4にLaravelをインストールする

Laravelで遊ぶためにインストールしようとしたら結構苦労したので
あの「You have arrived.」を見るまでにしたことをメモ。

必要なものインストール
yum -y install php php-mcrypt php-mbstring libmcrypt libmcrypt-devel libxml2 libxml2-devel openssl openssl-devel httpd httpd-devel

composerをインストール
curl -sS https://getcomposer.org/installer | php -- --install-dir=/bin

phpのバージョンアップ
cd /tmp/
wget http://jp1.php.net/get/php-5.5.6.tar.gz/from/this/mirror
tar xzvf php-5.5.6.tar.gz
cd php-5.5.6
./configure --with-apxs2=/usr/sbin/apxs --with-openssl --with-mcrypt
make
make test
make install

laravelをインストールする
cd /var/www/html
composer.phar create-project laravel/laravel laravel

storageディレクトリの権限を変更
cd laravel
chmod 777 -R app/storage/




--追記--
久しぶりにやったらmcryptがyumでインストール出来なかったので以下のとおりソースからインストール
wget http://elders.princeton.edu/data/puias/unsupported/6/x86_64/libmcrypt-2.5.8-9.puias6.x86_64.rpm
wget http://elders.princeton.edu/data/puias/unsupported/6/x86_64/libmcrypt-devel-2.5.8-9.puias6.x86_64.rpm
rpm -ivh libmcrypt-2.5.8-9.puias6.x86_64.rpm
rpm -ivh libmcrypt-devel-2.5.8-9.puias6.x86_64.rpm
通知センターをTerminal.appから使ってみる


ターミナルで時間のかかるスクリプトを実行していたとき、終わったらいい感じに音が出る、とかエラーが出ても音が出る、とかならないかなぁと思っていろいろ調べておりました。

そしたら、いろいろ方法はあるみたいなのですが、[terminal-notifier](https://github.com/alloy/terminal-notifier)というのがありました。
[Homebrew](http://brew.sh/)でインストールできます。

    brew install terminal-notifier

って感じで。

    terminal-notifier -message 'Hello, world!'

ってやってみると、
メッセージを表示できます。

    terminal-notifier -title ほげ -message "End of day" -group tokyo -open http://google.com

こうすると、開いた時に開くリンクのURLも指定できたり、

    terminal-notifier -message TEST -title TITLE -subtitle SUBTITLE -sound Submarine

これで、デフォルトのサウンドも鳴らせます。

おもしろかった。
gitでremoteの情報を書き換える方法

GUIのGitHub for Macを使ってgit remote add したときに、https で addされていたらしく、gh-pagesへterminalでdeployしようとした際にdeployできなかった時の対応方法。
remote の情報を書き換える。

```
$ git remote set-url origin git@github.com:userid/repogitory-name
```
この後にdeployの処理をして、gh-pagesへdeploy出来た。
Titaniumがjdk1.7のエラーで起動できない場合の対処法


##jdk1.6を入れたいけど入れれない

愛用のMacbook Air (13-inch, Mid2012)にOSX 10.9 Mavericksをクリーンインストールしました。

- [OS X 10.9 Mavericks のインストールメディアを作る - blog.niw.at](http://blog.niw.at/post/64820661489)



色々環境設定しつつ、Titaniumも入れねばとダウンロード。

- [Titanium Mobile Application Development | Appcelerator Inc.](http://www.appcelerator.com/?p=6806)



Titaniumの起動前にjavaがちゃんと入ってるか確認。

```bash
$ java -version
java version "1.7.0_45"
Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode)
```
※javaが入ってなかった場合、java7を入れますか？みたいな画面が出るのでそのままインストールする。



そしてTitaniumを起動したら以下のようなエラー画面が出ました。

![22740fc82de04e16ad22c3365cc08dbd.png](https://qiita-image-store.s3.amazonaws.com/0/12542/0ad6790a-5249-e31f-b42d-015986db49e4.png "22740fc82de04e16ad22c3365cc08dbd.png")

OK押しても当然起動せずそのまま終了。

なんじゃこれ。



ググってみるとjdk1.7とは相性が悪い模様。

- [java - How do I run Eclipse using Oracle's new 1.7 JDK for the Mac? - Stack Overflow](http://stackoverflow.com/questions/10352715/how-do-i-run-eclipse-using-oracles-new-1-7-jdk-for-the-mac)

全部しっかりとは読んでないですが、日本語化するときみたいにiniファイルで指定して解決とかじゃなさそうだったので、早々に諦めて前バージョンのjdk1.6(java 6)を探して入れることに。



でも公式ではもうダウンロードできないんですね…。

- [Java 6の最新バージョンはどこで入手できますか。](http://java.com/ja/download/faq/java_6.xml)

 > 現在、Java 6のアップデートは一般には提供されていません。オラクル社では、Javaサポートを購入したユーザー、またはJava 6が必要なOracle製品を所有するユーザーのみにJava 6のアップデートを提供しています。

orz...

##Eclipseを入れたら解決した

そういえばEclipseのプラグインとしてTitaniumを入れる方法があったなーと思い出して、ダメ元でそれを試すことに。

- [既存のEclipseにTitanium Studioを追加する | MEDIA Street](http://media.st/blog/2011/05/eclipse-titanium-studio/)

eclipseの公式サイトからEclipse Standard 4.3.1 Mac OS X 64bitをダウンロードしてきます。

- [Eclipse Downloads](http://www.eclipse.org/downloads/)



インストール後、Eclipseを起動したら以下のような画面が。

![36705f3750f497cfdf6388265c39acd9.png](https://qiita-image-store.s3.amazonaws.com/0/12542/29e43b9d-2c94-af4f-6d28-4e95552adfe0.png "36705f3750f497cfdf6388265c39acd9.png")

あれ？これでjdk1.6入って解決じゃね？と思いながらインストールボタンを押して先へ進む。



Java SE 6 ランタイムのインストール後、Eclipseが無事に起動するのを確認してすぐに終了。

そのままの流れでTitaniumを起動したら普通に起動しました。



根本的な解決になってない気がするけど、無事に動いたので一応OKということで…。

※Eclipseは
邪魔だったので
削除しました。ありがとう。ありがとう。
テトロミノビンゴをRubyで解く

問題はこちら
http://nabetani.sakura.ne.jp/codeiq/tetromino_bingo/

```rb
require 'open-uri'
DATA_URI = 'http://nabetani.sakura.ne.jp/codeiq/tetromino_bingo/data.txt'

def find_num_pos(num, board)
  board.each_with_index{|row, y|
    row.each_with_index{|cell, x|
      return [y, x] if cell == num
    }
  }
  nil
end

def check_tetro(board, holes)
  holes_cur = holes
  holes_new = nil
  holes_next = holes 
  begin
    holes_new = holes_next
    holes_next = []
    holes_new.each {|y, x|
      [[1,0],[0,1],[-1,0],[0,-1]].each {|dy, dx|
        ny, nx = y + dy, x + dx
        next unless board[ny][nx].nil?
        nyx = [ny, nx]
        next if holes_cur.include?(nyx)
        next if holes_next.include?(nyx)
        holes_next << nyx
      }
    }
    holes_cur += holes_next
  end while(!holes_next.empty?)
  holes_cur.size == 4 ? holes_cur : nil
end

def adjust_pos(holes)
  y_min = holes.map(&:first).min
  x_min = holes.map(&:last).min
  holes.map{|y, x| [y - y_min, x - x_min]}.sort
end

def rotate(holes)
  adjust_pos(holes.map{|y, x| [-x, y]})
end

def judge_tetro_char(holes)
  tetros = {
    [[0,0],[1,0],[2,0],[3,0]] => 'I',
    [[0,0],[1,0],[2,0],[2,1]] => 'L',
    [[0,0],[0,1],[1,0],[1,1]] => 'O',
    [[0,0],[1,0],[1,1],[2,1]] => 'S',
    [[0,0],[1,0],[1,1],[2,0]] => 'T',
  }
  mirror_holes = holes.map{|y, x| [-y, x]}
  4.times{
    holes = rotate(holes)
    return tetros[holes] if tetros[holes]
    mirror_holes = rotate(mirror_holes)
    return tetros[mirror_holes] if tetros[mirror_holes]
  }
  "-"
end

def solve(nums, q)
  board = [[0]*7] + q.split('/').map{|e| [0] + e.split(',').map(&:to_i) + [0]} + [[0]*7]

  nums.each{|num|
    y, x = find_num_pos(num, board)
    if x
      board[y][x] = nil
      holes = check_tetro(board, [[y, x]])
      return judge_tetro_char(holes) if holes
    end
  }
  "-"
end

#header, *data = DATA.readlines
header, *data = open(DATA_URI).readlines

nums = header.chop.split(',').map(&:to_i)
sums = Hash.new(0)
data.each_with_index do |line, i|
  q,a = line.chop.split(/\s+/)
  ans = solve(nums, q)
  if a
    print i.to_s + "\t" + ans
    puts ans == a ? ' o' : ' x'
  end
  sums[ans] += 1 unless ans == '-'
end
p sums
__END__
74,72,90,23,68,36,35,41,67,18,1,89,39,80,47,10,45,40,26,91,6,98,73,53,44,24,52,63,46,59,28,92,13,94,66,49,3,87,64,4,88,76,96,9,29,85,42,82,25,51,86,19,83,14,77,78,58,62,81,22,93,15,2,20,33,57,37,48,38,34,79,17,65,60,11,31,27,5,69,32,95,99,50,16,70,75,12,7,56,21,97,30,8,61,55,84,54,71,43
93,84,33,81,79/18,36,13,89,92/46,34,55,78,63/32,59,49,88,11/3,45,60,56,20	S
74,72,90,23,68/36,35,41,67,18/1,89,39,80,47/10,45,40,26,91/6,98,73,53,44	I
11,31,69,27,5/32,95,99,50,43/16,70,75,84,30/12,7,56,54,8/21,97,71,61,55	L
```
Ruby2.0でgemを全てアンインストールする


```bash
gem uninstall -axI `gem list --no-versions`
ERROR:  While executing gem ... (Gem::InstallError)
    gem "test-unit" cannot be uninstalled because it is a default gem
```

って怒られてできなかったからメモ

```bash
gem uninstall -axI `gem list --no-versions | egrep -v 'test-unit|rdoc|bigdecimal|io-console|json|minitest|psych|rake'`
```

## 参考
> [Uninstall all installed (non-default) gems.](https://gist.github.com/hectcastro/9473714)
【iOS】UIImageとNSString(Base64)の相互変換

iOS7からは、Base64変換が非常に簡単になっています。

・UIImageからBase64型のNSStringへの変換

```objc
NSData* jpgData = [[NSData alloc] initWithData:UIImageJPEGRepresentation(image, 1.0f)];
NSString* jpg64Str = [jpgData base64EncodedStringWithOptions:NSDataBase64Encoding76CharacterLineLength];
```


・Base64型のNSStringからUIImageへの変換

```objc
NSString* jpgStr = [_post objectForKey:@"thumbnailPhoto"];
NSData *jpgData = [[NSData alloc] initWithBase64EncodedString:jpgStr
                                                          options:NSDataBase64DecodingIgnoreUnknownCharacters];

UIImage* image = [UIImage imageWithData:jpgData];
```
いやー、楽ですねw
【iOS】UIImageをリサイズする

 UIイメージをリサイズするカテゴリメソッドを作成しました。

```objc
+ (UIImage *)resizedImage:(UIImage *)image width:(CGFloat)width height:(CGFloat)height
{
	if (UIGraphicsBeginImageContextWithOptions != NULL) {
		UIGraphicsBeginImageContextWithOptions(CGSizeMake(width, height), NO, [[UIScreen mainScreen] scale]);
	} else {
		UIGraphicsBeginImageContext(CGSizeMake(width, height));
	}
    
	CGContextRef context = UIGraphicsGetCurrentContext();
	CGContextSetInterpolationQuality(context, kCGInterpolationHigh);
    
	[image drawInRect:CGRectMake(0.0, 0.0, width, height)];
    
	UIImage *resizedImage = UIGraphicsGetImageFromCurrentImageContext();
    
	UIGraphicsEndImageContext();
    
	return resizedImage;
}
```
【iOS】UIColorからRGBA要素を取得する

UIcolorからRGBA要素を取得するカテゴリメソッドを作成しました。
標準UIの色を調べるときとかに使っています。

```objc
- (NSDictionary*)rgba
{
    CGFloat red;
    CGFloat green;
    CGFloat blue;
    CGFloat alpha;

    [self getRed:&amp;red green:&amp;green blue:&amp;blue alpha:&amp;alpha];

    NSDictionary *rgbaDic = @{@"red":[NSNumber numberWithFloat:red],
                              @"green":[NSNumber numberWithFloat:green],
                              @"blue":[NSNumber numberWithFloat:blue],
                              @"alpha":[NSNumber numberWithFloat:alpha]
                              };

    return rgbaDic;
}
```
【iOS】CustomViewでxibファイルを読込む

現在のiOS開発ではStoryboardで画面遷移等も出来るようになって、かなり便利になっています。
開発者には、Storyboardやxibを全く使わないという人が多いみたいですが、
とりあえず、雰囲気だけみてみたい。とかCustomViewをxibでレイアウトしたい。という人は結構多いみたいです。
私の場合は、ソースコードを出来るだけ減らしたい。と考えているタイプなので
Storuboardやxibファイルは積極的に使っています。

なので、UIViewのクラスメソッドとしてxibファイルを読込むメソッドを作りました。
※クラス名と同名のxibファイルが用意されていることが前提です。 

```objc
+ (id)loadFromNib
{
    LOG_FUNC;
    
    NSString *nibName = NSStringFromClass([self class]);
    UINib *nib = [UINib nibWithNibName:nibName bundle:nil];
    NSArray* arr = [nib instantiateWithOwner:nil options:nil];
    
    EditorFuncView* view = [arr objectAtIndex:0];
    view.backgroundColor = [UIColor colorWithWhite:1.0f alpha:0.85f];//背景色
    return [arr objectAtIndex:0];
}
```
【iOS】シングルトンクラスを作成する

アプリ内の様々なクラスから利用したいインスタンスがある場合、シングルトンにすると便利です。
 
```objc
//--------------------------------------------------
#pragma mark - LifeCycle
//--------------------------------------------------
+ (TakesManager*)sharedInstance {
    static TakesManager* sharedSingleton;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedSingleton = [[TakesManager alloc]
                           initSharedInstance];
    });
    return sharedSingleton;
}

- (id)initSharedInstance {
    self = [super init];
    if (self) {
        // 初期化処理
    }
    return self;
}

- (id)init {
    [self doesNotRecognizeSelector:_cmd];
    return nil;
}
```
【iOS】HexからUIColorを生成する

UIColorはRGBA等から生成するメソッドはありますが
HexからUIColorを生成する関数は用意されていません。

デザイナーさんとやり取りしていたりするとHexで指定が来たりとか
Webサービスから色を拾ってくるときにHexの方が便利だったりすることが多々あります。

だったらHexからUIColorを生成する関数を作っちゃおう。ということで。

UIColorのカテゴリメソッドを追加します。
『#』を除いた6桁のHex文字列を渡します。

```objc
+ (UIColor*)colorWithHexString:(NSString *)hex alpha:(CGFloat)a {
    NSScanner *colorScanner = [NSScanner scannerWithString:hex];
    unsigned int color;
    if (![colorScanner scanHexInt:&amp;color]) return nil;
    CGFloat r = ((color &amp; 0xFF0000) &gt;&gt; 16)/255.0f;
    CGFloat g = ((color &amp; 0x00FF00) &gt;&gt; 8) /255.0f;
    CGFloat b =  (color &amp; 0x0000FF) /255.0f;
    return [UIColor colorWithRed:r green:g blue:b alpha:a];
}
```
【iOS】ログを出力するマクロを定義する

プログラム内にNSLogを書くと、リリース時に何かと面倒です。
デバッグログ用のマクロを作っておくと便利ですね。

 
```objc
#ifdef DEBUG
#define LOG(...) NSLog(__VA_ARGS__)
#define LOG_PRINTF(FORMAT, ...) printf("%s\n", [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]);
#define LOG_FUNC NSLog(@"%s", __func__)
#define LOG_METHOD_AND_ABORT LOG_METHOD; abort()
#else
#define LOG(...)
#define LOG_PRINTF(FORMAT, ...)
#define LOG_FUNC
#define LOG_METHOD_AND_ABORT
#endif
```
【Android】アプリのバージョン名とバージョン番号を取得する

```java
	/**
	 * バージョンコードを取得する
	 *
	 * @param context
	 * @return
	 */
	public static int getVersionCode(Context context){
	    PackageManager pm = context.getPackageManager();
	    int versionCode = 0;
	    try{
	        PackageInfo packageInfo = pm.getPackageInfo(context.getPackageName(), 0);
	        versionCode = packageInfo.versionCode;
	    }catch(NameNotFoundException e){
	        e.printStackTrace();
	    }
	    return versionCode;
	}

	/**
	 * バージョン名を取得する
	 *
	 * @param context
	 * @return
	 */
	public static String getVersionName(Context context){
	    PackageManager pm = context.getPackageManager();
	    String versionName = "";
	    try{
	        PackageInfo packageInfo = pm.getPackageInfo(context.getPackageName(), 0);
	        versionName = packageInfo.versionName;
	    }catch(NameNotFoundException e){
	        e.printStackTrace();
	    }
	    return versionName;
```
【Android】WebViewでJavaScriptを有効にする

WebViewでJavaScriptを有効にする場合、以下の様に設定します。

```java
//JavaScriptを有効にする
mWebView.getSettings().setJavaScriptEnabled(true);
```

上記で警告が出る場合は以下のように、@SuppressLintを追加します。

```java
@SuppressLint("SetJavaScriptEnabled")
```

ただ、このままだとapk化したときに、JavaScript側で「関数が見つからないよー。」みたいなエラーが出るので、JavaScriptから呼び出されるJavaの関数を暗号化しないように設定します。

```java
-keep class jp.co.sample.BrowserActivity {
*;
}
```

上記では、クラス単位で暗号化をOFFにしてますが、本来なら関数単位で設定した方がよいのかもしれません。