OmniAICreator/Qiita-1.07M huggingface dataset:
PoltergeistでE2Eテストを行う時、JSでrefererはとれるのか


# 結論
とれなかったです（2015年2月23日現在 poltergeist 1.6.0）

こうすればとれるよなどありましたらコメントいただけると嬉しいです、、

# 試したこと

## poltergesitのsessionにrefererを追加してみる
UserAgent

```
page.driver.headers = { referer: 'http://www.google.co.jp/' }
page.driver.headers
=> {:referer=>"http://www.google.co.jp/"}
```

```
visit root_path
evaluate_script('document.referrer')
=> ""
```

とれない…。

## JSで referrerを書き換えてみた

```
evaluate_script("window.document.__defineGetter__('referrer', function () { return http://www.google.co.jp/'; });")
evaluate_script('document.referrer')
=> ""
```

```
evaluate_script('Object.defineProperty(document, "referrer", {get : function(){ return "http://www.google.co.jp/"; });')
evaluate_script('document.referrer')
=> ""
```

とれない…。

参考URL：[Try to overwrite window.document.referrer from within phantomjs / onInitialized](https://gist.github.com/papoms/3481673)

## cookieもUAもとれるのに…

```
page.driver.set_cookie('hoge', 'fuga')
evaluate_script('document.cookie')
```

UserAgentもheaderに追加すれば正しくとれる…

```
evaluate_script('window.navigator.userAgent')
=> "Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A403 Safari/8536.25"
```


(´；ω；｀)ｳｯ…
quickrun.vimで、javaを実行する方法

# 概要
javaの実行で詰まったのでメモ

# 環境
[gvim - kaoriya](http://www.kaoriya.net/news/2015/02/04/)
[jdk](http://www.oracle.com/technetwork/java/javase/downloads/index.html)

javacが必要なのでJDKをインストールして、javacのパスを通します。

まず文字化け対策をします。ただsjisのエンコードを設定*1しているだけです。

**\*1**
`:h quickrun-module-hook/output_encode`

```vim
" .vimrc
NeoBundle 'thinca/vim-quickrun'
if neobundle#tap('vim-quickrun') "{{{
                \ 'java' : {
                \ 'hook/output_encode/enable' : 1,
                \ 'hook/output_encode/encoding' : 'sjis',
                \ }
endif "}}}
```


次に実行するファイルですが、無名ファイルで実行するとエラーが発生するので、名前を付けて`:QuickRun`を実行します。

```java
// Hajimete.java
public class Hajimete {
    public static void main(String[] args){
        System.out.println("Hello, world.");
    }
}
```

すると

```
# output
Hello, world.
```

が出力されます。
Support Library v7 の ActionBarActivity を Android 4.1以下のLG端末で使うときの注意



# 概要

LG端末でだけ謎のクラッシュレポートが届いていたので調べた結果をメモ。
結論としては、LGの4.1以下端末に向けた回避コードが必要orz

なお、手元には該当の端末が無いため未検証。


# クラッシュレポート

こんなレポートが送られてくる。

```
java.lang.NullPointerException
    at com.android.internal.policy.impl.PhoneWindow.onKeyUpPanel(PhoneWindow.java:987)
    at com.android.internal.policy.impl.PhoneWindow.onKeyUp(PhoneWindow.java:1686)
    at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:2097)
    at android.view.ViewRootImpl.deliverKeyEventPostIme(ViewRootImpl.java:3618)
    at android.view.ViewRootImpl.handleImeFinishedEvent(ViewRootImpl.java:3588)
    at android.view.ViewRootImpl$ViewRootHandler.handleMessage(ViewRootImpl.java:2834)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:4849)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
    at dalvik.system.NativeStart.main(Native Method)
```

うん、自分の書いたコードに関する部分は全くないね。。。


# 原因と回避策

回避策はこの[スレッドで議論](https://code.google.com/p/android/issues/detail?id=78154)されてた。
原因はLGカスタマイズAndroidのバグとのこと（[参考](http://developer.lge.com/community/forums/RetrieveForumContent.dev?detailContsId=FC29190703)） ~~死ねばいいのに~~。


`onKeyUp`と`onKeyDown`をオーバーライドしてLG端末かつAPIレベル16以下で判定して回避処理を入れる。

```java
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
     if ((keyCode == KeyEvent.KEYCODE_MENU) &&
	      (Build.VERSION.SDK_INT <= 16) &&
	      (Build.MANUFACTURER.compareTo("LGE") == 0)) {
	   return true;
    }
    return super.onKeyDown(keyCode, event);
}

@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
    if ((keyCode == KeyEvent.KEYCODE_MENU) &&
	         (Build.VERSION.SDK_INT <= 16) &&
	         (Build.MANUFACTURER.compareTo("LGE") == 0)) {
	   openOptionsMenu();
     return true;
    }
    return super.onKeyUp(keyCode, event);
}
```

# 雑感

ただこれ、クラッシュレポート見てもどのActivityで起きてるかわからんのよね。
全部のActivityに入れるしか無いのか...
ActiveAdminのtable_forに渡したcollectionが勝手にdecorateされるようにする

## シチュエーション

showでhas_many関係にある子要素のテーブル表示する時なんかに。

## 実装

```rb
module TableDecoration
  def build(obj, *attrs)
    ActiveDecorator::Decorator.instance.decorate(obj)
    super(obj, *attrs)
  end
end
 
module ActiveAdmin
  module Views
    class TableFor < Arbre::HTML::Table
      prepend TableDecoration
    end
  end
end
```

## 余談

もともとはalias_method_chainを使った実装を試していたのですが、メソッド名が変わる影響か、TableFor#build内で呼ぶsuperが機能しておらず、prependを使った方法に切り替えています。エラーにはならず、ただtrの中にtdがrenderされなかっただけで、詳細な理由は調査しきれていないです。
Android studioでプロジェクトのimportに失敗した時のやり直し方

https://twitter.com/__gfx__/status/484570905293488128


プロジェクトを開こうとして、適当にOKボタンを押すと、ちゃんと読み込まれなくて、直し方がわからなかったが、上記のツイートをみて解決。



1. 読み込みに失敗したプロジェクトに移動
2. `*.iml`のファイルと`.idea/`のディレクトリを削除
3. 再度import
4. プロジェクト直下の`build.gradle`を選択
5. ちゃん読み込まれるはず。

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



```
{sdkインストールしたパス}/samples/android-21/connectivity/bluetooth/BluetoothChat
```
sdkのサンプルを動かそうとして、失敗したのだった。

具体的には以下

#### 1. 読み込みに失敗したプロジェクトに移動

```
cd {sdkインストールしたパス}/samples/android-21/connectivity/bluetooth/BluetoothChat
```

#### 2. `*.iml`のファイルと`.idea/`のディレクトリを削除

```
rm -rf .idea
```

あれ、`*.iml`的なファイル消さなかった。

#### 3. 再度import ＆ プロジェクト直下の`build.gradle`を選択

再度開く
File→Open→該当のフォルダ指定

Import Project from Gradeの画面でGrade projectを変更するのがポイント。


`bluetooth/BluetoothChat/build.gradle`




これで開けばちゃんとプロジェクトを開けるはず！
Java 代替言語が普及しないこれだけの理由

#1. はじめに

国内でシステム開発に使用される言語では、Java が最もメジャーでしょう。でも、Java っていろいろ決まりごとが多く面倒な言語でもあります。

それに気づいた海外の開発者たちが、便利な「Java 代替言語」を開発・利用可能になっています。にもかかわらず、国内では海外に比べ、あまり使われているようには見えません。その理由を考えてみました。

※ 違う考えの方もおいでだと思います。もしよければコメントしてください。

#2. Java 代替言語とは

ここでいう「Java 代替言語」とは、JVM 上で動作し、Java より簡単な文法を持ち、Java のクラスライブラリがそのまま利用できるような「簡易言語」を指します。

具体的には、Groovy, Scala, jRuby, Jython, ... 等です。

#3. 理由
##実績がない

業務系アプリなどは、設計や開発思想が非常に保守的なので、訳の分からないものは使わない。まず、実績や信頼性が大事ということです。

##人がいない

アベノミクス以降、それまで凍結されていたプロジェクトが動き出したり、企業の収益が上がって新たな開発案件も増えています。結果として、人手不足が慢性化して有能な人材が集まりにくくなっています。

ましてや、マイナーな言語などできる人は少なく、開発要員を集めるのは困難です。

##Java で十分

「今まで Java でやってきたし、ノウハウやライブラリも蓄積されている。」、「今さら、他の言語など使うとかえってトラブルだけ。」、「目の前のことで精いっぱい。あえてそんなもの使う必要はない」。

##知らない

「そういうのがあるのは聞いたことあるけど、具体的にどんなものか知らない」、「どんなものか調査する時間も人もいない」、「確かに簡単にプログラムが書けそうだが、上の人や顧客を納得させるほど説明できない」

 

[原文はこちら ..](http://bonk.red/show.php?id=15)
リンクや引用は原文にお願いします。
input analog mic output LED

```as3
const int SENSOR = A0;
const int LED = 13;

int val = 0;
int max = 0;

void setup() {
  Serial.begin(9600);
  pinMode(SENSOR, INPUT);
  pinMode(LED, OUTPUT);
}

void loop() {
  val = analogRead(SENSOR);

  if (val > max) {
    max = val;
  }
  
  String space = " ";
  Serial.println(max + space + val);

  if (val > 10) {
    digitalWrite(LED, HIGH);
  } else {
    digitalWrite(LED, LOW);
  }
  delay(20);
}
```
mtaをsendmailからpostfixに切り替える

CentOS5.11 にて確認。

```bash:確認
# ls -l /etc/alternatives/|grep mta
lrwxrwxrwx 1 root root 27  2月 20 10:45 mta -> /usr/sbin/sendmail.sendmail
lrwxrwxrwx 1 root root 41  2月 20 10:45 mta-aliasesman -> /usr/share/man/man5/aliases.sendmail.5.gz
lrwxrwxrwx 1 root root 23  2月 20 10:45 mta-mailq -> /usr/bin/mailq.sendmail
lrwxrwxrwx 1 root root 39  2月 20 10:45 mta-mailqman -> /usr/share/man/man1/mailq.sendmail.1.gz
lrwxrwxrwx 1 root root 28  2月 20 10:45 mta-newaliases -> /usr/bin/newaliases.sendmail
lrwxrwxrwx 1 root root 44  2月 20 10:45 mta-newaliasesman -> /usr/share/man/man1/newaliases.sendmail.1.gz
lrwxrwxrwx 1 root root 24  2月 20 10:45 mta-pam -> /etc/pam.d/smtp.sendmail
lrwxrwxrwx 1 root root 23  2月 20 10:45 mta-rmail -> /usr/bin/rmail.sendmail
lrwxrwxrwx 1 root root 26  2月 20 10:45 mta-sendmail -> /usr/lib/sendmail.sendmail
lrwxrwxrwx 1 root root 42  2月 20 10:45 mta-sendmailman -> /usr/share/man/man8/sendmail.sendmail.8.gz
```

```bash:切り替え
# /usr/sbin/alternatives --set mta /usr/sbin/sendmail.postfix
```


```bash:確認
# ls -l /etc/alternatives/|grep mta
lrwxrwxrwx 1 root root 26  2月 23 06:15 mta -> /usr/sbin/sendmail.postfix
lrwxrwxrwx 1 root root 40  2月 23 06:15 mta-aliasesman -> /usr/share/man/man5/aliases.postfix.5.gz
lrwxrwxrwx 1 root root 22  2月 23 06:15 mta-mailq -> /usr/bin/mailq.postfix
lrwxrwxrwx 1 root root 38  2月 23 06:15 mta-mailqman -> /usr/share/man/man1/mailq.postfix.1.gz
lrwxrwxrwx 1 root root 27  2月 23 06:15 mta-newaliases -> /usr/bin/newaliases.postfix
lrwxrwxrwx 1 root root 43  2月 23 06:15 mta-newaliasesman -> /usr/share/man/man1/newaliases.postfix.1.gz
lrwxrwxrwx 1 root root 23  2月 23 06:15 mta-pam -> /etc/pam.d/smtp.postfix
lrwxrwxrwx 1 root root 22  2月 23 06:15 mta-rmail -> /usr/bin/rmail.postfix
lrwxrwxrwx 1 root root 25  2月 23 06:15 mta-sendmail -> /usr/lib/sendmail.postfix
lrwxrwxrwx 1 root root 41  2月 23 06:15 mta-sendmailman -> /usr/share/man/man1/sendmail.postfix.1.gz
```
Rubyでクラスの属性をうまく継承する


# Goal

* 抽象クラスを定義して、クラスの属性とメソッドをサブクラスに継承させたい
* サブクラスから抽象クラスの属性を上書きできるようにしたい
* サブクラスでクラス属性を上書きしなかった場合、抽象クラスで定義された属性をデフォルトで使用したい
* デザインパターン苦手科目ですが、(たぶん)テンプレートメソッドパターンと同じことができます

# Code

```rb
class AbstractModel

  @primary_key  = nil
  @table_name   = 'abstract'
  @storage      = 'file'

  class << self
    attr_accessor :primary_key, :table_name, :storage

    def inherited(klass)
      klass.primary_key = @primary_key
      klass.table_name  = @table_name
      klass.storage     = @storage
    end
  end

  def print_primary_key
    p self.class.primary_key
  end

  def print_table_name
    p self.class.table_name
  end
end

class Person < AbstractModel
  @primary_key  = 'person_id'
  @table_name   = 'persons'

  def print_storage
    p self.class.storage
  end
end

class Sport < AbstractModel
  @primary_key  = 'sport_id'
  @table_name   = 'sports'

  def print_storage
    p self.class.storage
  end
end

##
## クラスメソッドからクラスの属性が取得できることを確認
##
p AbstractModel.primary_key
  # nil
p Person.primary_key
  # "person_id"
p Sport.primary_key
  # "sport_id"

abs     = AbstractModel.new
person  = Person.new
sport   = Sport.new

##
## 親クラスから継承されたインスタンスメソッドが使えること
## インスタンスメソッドからも自分のクラスの属性が取得できることを確認
##
abs.print_table_name
  # "abstract"
person.print_table_name
  # "persons"
sport.print_table_name
  # "sports"

##
## サブクラスで上書きしていない属性にアクセスすると親クラスの値がデフォルトになっていることを確認
##
person.print_storage
  # "file"
sport.print_storage
  # "file"

```

親クラス(AbstractModel)で定義されたクラスインスタンス変数はサブクラス(Person, Sport)に継承されないが、クラスメソッドは継承される.
これはつまり、クラスインスタンス変数に対してattr_accessorを指定してやるとクラスインスタンス変数への入出力がメソッド化されるため、サブクラスに受け継ぐことができる(Person, Sportに対してprimary_key、primary_key=などのメソッドがよべる)ようになる.
けれども、これらの継承されたクラスメソッドが読み書きするのはサブクラス(Person, Sport)のクラスインスタンス変数なので、親クラス(AbstractModel)の属性をデフォルトとして使いたいならばinheritedを使うなどしてサブクラスのクラスインスタンス変数にコピーする必要がある.

また、インスタンスメソッドからクラスインスタンス変数を使うときには、メソッドのレシーバのクラスインスタンス変数に確実にアクセスできるようself.classをつけてよびだす.

もっとスマートな方法あれば教えて下さい.

# References

以下の記事参考にさせていただきました.
http://qiita.com/a-suenami/items/bca7deefbe4ce9db103f

# Environment

```
% uname -a
Linux *** 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

% ruby -v
ruby 2.1.1p76 (2014-02-24 revision 45161) [x86_64-linux]

% cat /etc/issue
CentOS release 6.5 (Final)
Kernel \r on an \m
```
「Python でデコレートされているメソッドを取得する方法」をやってみた

元ネタ: [Python でデコレートされているメソッドを取得する方法](http://d.hatena.ne.jp/heavenshell/20150222/1424619377)

元ブログでは *inspect* モジュールで調べていますが、こういうのは *ast* モジュールを使うと便利ですね。

```py3:find_decorator.py 
# -*- coding: utf-8 -*-
import ast

source = """
class Sample(object):

    @foo_decorator2
    @foo_decorator1
    def foo(self):
        pass

    @bar_decorator
    def bar(self):
        pass

    def baz(self):
        pass

@hoge_decorator2
@hoge_decorator1
def hoge(x):
    pass

def fuga(x):
    pass
"""

class FindDecorator(ast.NodeVisitor):
    def visit_FunctionDef(self, node):
        decorators = node.decorator_list
        if decorators:
            print('decorated: {}'.format(node.name))
            for name in decorators:
                print('decorator: {}'.format(name.id))
            print('-' * 32)
        return node

FindDecorator().visit(ast.parse(source))
```

こんな感じ。

```bash
$ python find_decorator.py 
decorated: foo
decorator: foo_decorator2
decorator: foo_decorator1
--------------------------------
decorated: bar
decorator: bar_decorator
--------------------------------
decorated: hoge
decorator: hoge_decorator2
decorator: hoge_decorator1
--------------------------------
```

追記:
[*inspect.getsource*](http://docs.python.jp/3.4/library/inspect.html#inspect.getsource) を使って、モジュールのソースコードを動的に取得することもできました。

```py3:3.4
# -*- coding: utf-8 -*-
import ast
import inspect
import sys

def foo_decorator2(func): pass
def foo_decorator1(func): pass
def bar_decorator(func): pass
def hoge_decorator2(func): pass
def hoge_decorator1(func): pass

class Sample(object):

    @foo_decorator2
    @foo_decorator1
    def foo(self):
        pass

    @bar_decorator
    def bar(self):
        pass

    def baz(self):
        pass

@hoge_decorator2
@hoge_decorator1
def hoge(x):
    pass

def fuga(x):
    pass

class FindDecorator(ast.NodeVisitor):
    def visit_FunctionDef(self, node):
        decorators = node.decorator_list
        if decorators:
            print('decorated: {}'.format(node.name))
            for name in decorators:
                print('decorator: {}'.format(name.id))
            print('-' * 32)
        return node

module = sys.modules[__name__]
source = inspect.getsource(module)
FindDecorator().visit(ast.parse(source))
```

*inspect.getsource* の引数に渡したオブジェクトのソースコードを取得できる。ここではモジュールそのものを渡しているけど、クラスや関数なども渡すことができる。
enchant.jsとtmlib.jsを使ったゲーム作成フレームワーク「enforce」チュートリアル動画（１）

# enforceでゲームを作るためのチュートリアル動画
enforceで新規ゲームプロジェクトを作成し、簡単な動きを作る動画を作成しました。
ちょっと画質が悪くてターミナルの操作やソースが見づらいのですが、心の目で見てください（汗）

[チュートリアル動画（１）](http://youtu.be/GS35xIIf9DY)
enchant.jsとtmlib.jsの動作速度比較

# enforceを作ったゲームの、enchantとtmlibでの速度比較
パソコンでゲームを作っているとあまり感じないが、スマートフォンは毎年発売されるモデルの性能差がかなりある。
大ヒットしたGoogleのリファレンス端末「nexus5」でさえも、iPhone6に比べると性能がだいぶ劣る。
そんな感じで、enforceを使い60fpsでゲームを作ってみると、tmlibとenchantにおいてスマートフォンでの動作にかなりの差が出た。
結果を言ってしまうと、オブジェクトが増えてもtmlibはコンスタントに速度が稼げている。
30fpsならそこそこ動くが、60fpsではenchantはもうゲームにならない。
enforceでのtmlibの扱いは、当たり判定の問題があったり、box2dが使えなかったり、スマートフォンでマルチタッチに対応してなかったり、iPhoneで音が鳴らないなど（結構あるな…）の問題ありサブ的な扱いだったが、当たり判定の問題は完全に解決し、box2dを使う時だけenchantを使い、マルチタッチに関しては作者のファイさんが対応してくれるっぽいので、今githubにあるenforceのデフォルトスプライトライブラリは、tmlibになっている。
音の問題はちょっと厄介そうだけど…。

[enchantと、tmlibの速度比較動画](http://youtu.be/aHjaVZ3iPVc)
Googlemapにホットペッパー情報を表示する方法

まずは[リクルートWEBサービス](http://webservice.recruit.co.jp/)　から会員登録してAPIキーを取得。
ほいで、[APIリファレンス](http://webservice.recruit.co.jp/hotpepper/reference.html)からURLを取得。
URLはこんなかんじ。
http://webservice.recruit.co.jp/hotpepper/gourmet/v1/?key=[APIキー]&[エリア等の絞り込み]
実際JSで使うときはうしろに `&format=jsonp&callback=?"` をつける

ちなみにホットペッパーのクレジット表示が必須なので下記から取得。
[クレジット]
(http://webservice.recruit.co.jp/hotpepper/guideline.html)

サンプルは以下。

```html
<div id="gmap"></div>

<a href="http://webservice.recruit.co.jp/"><img src="http://webservice.recruit.co.jp/banner/hotpepper-s.gif" alt="ホットペッパー Webサービス" width="135" height="17" border="0" title="ホットペッパー Webサービス"></a>

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=true"></script>
<script type="text/javascript" src="js/map.js"></script>
```


```js

// GoogleMapを生成して表示
google.maps.event.addDomListener(window, "load", function(){
	var map = document.getElementById("gmap");
	var options = {
		zoom: 14,
		center: new google.maps.LatLng(34.702485, 135.495951)
	};
	mapObj = new google.maps.Map(map, options);
});


var currentInfoWin = null;

// 店舗情報を取得
function getRamenShop() {
	console.log( "getRamenShop()" );

	// ホットペッパーAPI
	var url ="http://webservice.recruit.co.jp/hotpepper/gourmet/v1/?key=APIキー&middle_area=Y300,Y305,Y310&genre=G013&format=jsonp&callback=?";
	// ホットペッパーAPIを呼び出す
	$.getJSON(url, {"url":url}).then(
		//成功時の処理
		function(data){
			disp(data);
		},
		//失敗時の処理
		function(){
			alert("Error");
		}
	);
}

// GoogleMapに表示
function disp(resultJSON) {
	// マーカー画像を作成
	var markerImg = new google.maps.MarkerImage(
		"http://画像ファイルURL.png"
	);
	// JSONの店舗情報分だけ繰り返し処理
	$(resultJSON.results.shop).each(function() {

		// 緯度経度情報を取得
		var lating = new google.maps.LatLng(this.lat, this.lng);

		// マーカーを設定
		var markerObj = new google.maps.Marker({
			position: lating,
			map: mapObj,
			icon: markerImg
		});

		// 情報ウィンドウのHTML作成
		var html = "<div class='infoWindow'>"
					+ "<div class='infoWindow-logo'>"
					+ "<img src='" + this.logo_image + "'>"
					+ "</div>"
					+ "<div class='infoWindow-txt'>"
					+ "<p>" + this.name + "</p>"
					+ "<p>" + this.address + "</p>"
					+"</div>"

		// 情報ウィンドウを作成
		var infoWin = new google.maps.InfoWindow({maxWidth:300});
		infoWin.setContent(html);

		// マーカーをクリックしたら情報ウィンドウを表示
		google.maps.event.addListener(markerObj, 'click', function(){
			if(currentInfoWin){
				currentInfoWin.close();
			}
			infoWin.open(mapObj, markerObj);
			currentInfoWin = infoWin;
		});
	});

}

window.onload = function() {
  getRamenShop();
}
```
virt-installでエラーになる時

### 事象
virt-installでVMの作成やインポートをしようとすると以下のエラーが出る

```
# virt-install --name centos6.5 --vcpus 1 --ram 1024 --disk path=/tmp/qemu/centos6.5.img,size=10,sparse=true --network network:default --graphics vnc --cdrom /tmp/CentOS-7.0-1406-x86_64-DVD.iso 

Starting install...
Creating storage file centos6.5 |  10 GB     00:00     
ERROR    内部エラー console ログ出力の読み込み中にプロセスが終了しました: char device redirected to /dev/pts/7
2015-02-22T09:03:05.388038Z qemu-kvm: -drive file=/tmp/CentOS-7.0-1406-x86_64-DVD.iso,if=none,media=cdrom,id=drive-ide0-1-0,readonly=on,format=raw: could not open disk image /tmp/CentOS-7.0-1406-x86_64-DVD.iso: Permission denied

Domain installation does not appear to have been successful.
If it was, you can restart your domain by running:
  virsh --connect qemu:///system start centos6.5
otherwise, please restart your installation.
```

### 対処策

仮想ディスクやイメージファイルの所有権をqemuにする。

```
# chown qemu:qemu /tmp/CentOS-7.0-1406-x86_64-DVD.iso
```
KVM環境で、OpenvSwitchでゲストVMを外部ネットワークと接続するメモ

## 目的
仮想ネットワーク周りの学習のため、KVM環境で、OpenvSwitchでゲストVMを外部ネットワークと接続する（下図）環境を構築したので、その手順メモ。

## 最終イメージ
![ScreenClip.png](https://qiita-image-store.s3.amazonaws.com/0/50690/d13630b3-1ea8-4ea5-0fd7-3bb672f4b04d.png)

##　前提条件
* ホストはCentOS6.6(64bit)インストール済み
* ゲストVMのOSインストールメディアをダウンロード済

## 手順

### KVMのインストール
```
# yum -y install qemu-kvm qemu-kvm-tools
```

### ゲストVMの作成
割愛：libvirtで管理出来るように作成（virt-install等）。

### OpenvSwitchのインストール
#### 事前準備
`# yum -y install wget gcc make automake rpm-build redhat-rpm-config openssl-devel kernel-devel libtool`

LinuxBridgeが存在していたら削除

```
# lsmod | grep bridge
(bridgeがあったら)
# rmmod bridge
```

#### OpenvSwitchのインストール

```
# cd
# wget http://openvswitch.org/releases/openvswitch-2.3.1.tar.gz
# cp openvswitch-2.3.1.tar.gz ~/rpmbuild/SOURCES/
# tar zxvf openvswitch-2.3.1.tar.gz
# cd openvswitch-2.3.1
# cp rhel/openvswitch-kmod.files ~/rpmbuild/SOURCES/
# rpmbuild -bb rhel/openvswitch.spec
# rpmbuild -bb rhel/openvswitch-kmod-rhel6.spec
# cd ~/rpmbuild/RPMS/x86_64/
# yum -y install openvswitch-2.3.1-1.x86_64.rpm kmod-openvswitch-2.3.1-1.el6.x86_64.rpm
```
#### OpenvSwitchの起動、確認

```
# /etc/init.d/openvswitch start
# ovs-vsctl show
fba905c9-89dd-4ca5-8ba6-c873771c3fed
    ovs_version: "2.3.1"
```

### 仮想ブリッジの追加

```
# ovs-vsctl add-br ovsbr0
# ovs-vsctl add-port ovsbr0 eth0
# ovs-vsctl show
fba905c9-89dd-4ca5-8ba6-c873771c3fed
    Bridge "ovsbr0"
        Port "ovsbr0"
            Interface "ovsbr0"
                type: internal
        Port "eth0"
            Interface "eth0"
    ovs_version: "2.3.1"
```

### IPアドレスの設定

```
# ifconfig eth0 0.0.0.0
# ifconfig ovsbr0 192.168.0.3/24
```

### 仮想マシンの設定

```
# virsh shutdown gutestos
# virsh edit guestos
(例)
 <interface type='bridge'>
      <mac address='52:54:00:68:bf:42'/>
      <source bridge='ovsbr0'/>
      <virtualport type='openvswitch'>![ScreenClip.png](https://qiita-image-store.s3.amazonaws.com/0/50690/522b846f-fef9-e62c-1aa3-5823e1c6491e.png)

      </virtualport>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
# virsh start guestos
```

### 仮想ネットワークの確認
以下の例ではvnet1インタフェースが作成されている

```
# ovs-vsctl show
fba905c9-89dd-4ca5-8ba6-c873771c3fed
    Bridge "ovsbr0"
        Port "ovsbr0"
            Interface "ovsbr0"
                type: internal
        Port "vnet1"
            Interface "vnet1"
        Port "eth0"
            Interface "eth0"
    ovs_version: "2.3.1"
```

### ゲストVMの設定
IPアドレスの設定（割愛）

以上。

## 参考
KVM環境でLinux標準ブリッジの代わりにOpen vSwitchを利用する - 揮発性メモリ搭載エンジニアの日記 http://knqyf263.hatenablog.com/entry/2013/12/30/220214

KVMからbr0(ブリッジインターフェイス)が選択できないけど何故か解決した件 - qphoney記 http://qphoney.hatenadiary.com/entry/2011/12/01/184534

CentOS 6.4 に Open vSwitch 2.0.0 をインストールする | CUBE SUGAR STORAGE http://momijiame.tumblr.com/post/68058348274/centos-6-4-open-vswitch-2-0-0
RailsでI18nを使ってViewに表示する文字列を一元管理する


国際化対応のためのgemであるi18nを使って、Viewに表示される文字列を共通化、一元管理するTipsです。Railsに精通している方なら、基本かも知れませんがメモとして残しておきます。

## i18nで使用する言語を設定する

application.rbに使用する言語を設定します。

```rb:config/application.rb
class Application < Rails::Application
  config.i18n.default_locale = :ja
end
```

## Viewに埋め込む言語ファイルをconfig/localesに追加する

続いて、localesディレクトリ配下にViewで使用する文字列の定義ファイルをYAML形式で作ります。ここでは、contentsモデルがあるとしてViewで使用する文字列を書いていきます。

```yaml:config/locales/ja.yml
ja:
  contents:
    show:
      name: 'コンテンツ詳細'      
    index:
      list_name 'コンテンツ一覧'
    new:
      name: 'コンテンツ名'
      description: '内容'
      holder: '担当: %{name}'
```

このとき、contents viewのそれぞれのアクションに相当するカタチで記述しておくと、どの画面で使用するかがわかり、後述するLazy lookupも使えるので便利です。

## View側でlocales内のファイルを呼び出す

contents配下のViewファイルからymlファイルを呼び出します。

### 普通の記法

```rb:app/views/contents/show.html.erb
<div>
  <%= t contents.show.name # 'コンテンツ詳細' %>
</div>
```

```rb:app/views/contents/index.html.erb
<div>
  <%= t contents.index.list_name # 'コンテンツ一覧' %>
</div>
```

```rb:app/views/contents/new.html.erb
<div>
  <%= t contents.new.name # 'コンテンツ名' %>
  <%= t contents.new.description # '内容' %>
  <%= t contents.new.holder, name: '@kentana20' # '担当: @kentana20' %>
</div>
```

### lazy lookup記法

これでも十分便利なのですが、yaml内がview#actionのカタチでキレイに定義されている場合、以下の記法でも同じ結果となります。

```rb:app/views/contents/show.html.erb
<div>
  <%= t '.name' # 'コンテンツ詳細' %>
</div>
```

```rb:app/views/contents/index.html.erb
<div>
  <%= t '.list_name' # 'コンテンツ一覧' %>
</div>
```

```rb:app/views/contents/new.html.erb
<div>
  <%= t '.name' # 'コンテンツ名' %>
  <%= t '.description' # '内容' %>
  <%= t '.holder', name: '@kentana20' # '担当: @kentana20' %>
</div>
```

あちこちに記述していた ```contents.action``` が消えてかなりスッキリしていますね。

---

共通的に使う文言もここで管理できるので、非常に便利ですね :smiley:
Viewに文言を配置しないだけで、だいぶスッキリ記述できますし、文言の一元管理ができることもメリットです。

---

# 参考

- http://guides.rubyonrails.org/i18n.html
JAVA robot を使ったMouse Move

マウスを動かしたいと思った時にJavaのRobotがあったのでコードを描いてみた。
外部のファイルから呼び出したい時は
MouseMove hog = new MouseMove();
hog.move(横,縦,カーソルの速さ);で呼び出せばよい。


```lang:MouseMove.java
import java.awt.*;
import java.awt.event.*;
import java.util.*;

class MouseMove {
	public static void main(String[] args) {
		//move(100,100,1);
	}

	static void move(int moW,int moH,int moD){
		Robot r;
		try {
			r = new Robot();
		}
		catch (AWTException e) {
			e.printStackTrace();
			return;
		}
		PointerInfo pI = MouseInfo.getPointerInfo();
		Point point = pI.getLocation();
		
			int i = (int)point.getX();
			int h = (int)point.getY();
		// move
		while (!(i == moW && h == moH)) {
			if (i < moW){
				i++;
			}else if (i > moW) {
				i--;
			}
			if (h < moH){
				h++;
			}else if (h > moH) {
				h--;
			}
			r.mouseMove(i,h);
			r.delay(moD);
		}
	}
}

```

しかしRobot r;からtry catrhを voidから外に書けないものだろうか…
Rails + Grape + Swaggerで簡単APIドキュメント

Grape + SwaggerでAPI実装からドキュメント作成まで簡単にできてしまいます！

# 画面イメージ

![swagger.png](https://qiita-image-store.s3.amazonaws.com/0/51849/f8b8d575-ab5b-cf56-66b3-52d14ddd6e8f.png)

# 準備

```bash
rails new grape-swagger
cd grape-swagger
rails g scaffold user
rake db:migrate RAILS_ENV=development
```

# 設定

## 修正ファイル

```rb:Gemfile
gem 'grape', '~> 0.6.1'
gem 'grape-entity', '~> 0.4.0'
gem 'grape-swagger', '~> 0.7.2'
gem 'grape-swagger-rails'
```

### ルーティング

```rb:config/routes.rb
mount API::Root => '/'
mount GrapeSwaggerRails::Engine => '/docs'
```

### lib以下を自動で読み込み

```rb:config/application.rb
config.autoload_paths += %W(#{config.root}/lib)
```

## 新規作成ファイル

```rb:config/initializers/grape_swagger_rails.rb
GrapeSwaggerRails.options.url      = "swagger_doc.json"
GrapeSwaggerRails.options.app_name = 'GrapeSwagger'
GrapeSwaggerRails.options.app_url  = '/'
```

```rb:lib/api.rb
require 'grape'

module API
  class Root < Grape::API
    default_format :json

    mount API::Users => '/users'

    add_swagger_documentation(
      base_path: "/",
      hide_documentation_path: true
    )
  end
end
```

```rb:lib/api/users.rb
module API
  class Users < Grape::API

    desc 'get all users'
    get "all" do
      present User.all, with: API::Entities::User
    end

  end
end
```

```rb:lib/api/entities/user.rb
module API
  module Entities
    class User < Grape::Entity
      expose :name
    end
  end
end
```

# サーバー起動

- `bundle install`, `rails s`して`localhost:3000/docs`へアクセスすると冒頭の画面が表示されます

# サンプル

- https://github.com/rneuo/grape-swagger
型コンストラクタの意味２

学習の素材は、
[すごいHaskellたのしく学ぼう!](http://www.amazon.co.jp/すごいHaskellたのしく学ぼう-Miran-Lipovača/dp/4274068854)

> この表記は、私見・感想です。

以前に投稿した、[型コンストラクタの意味](http://qiita.com/rooooomania/items/e9d29c27abfe2aa9d8c6)に対する、別教材からの自己解決記事にもなっています。


## 型コンストラクタと関数との類似点
次の点で、型コンストラクタと関数では類似点がある。

* 部分適用ができる
* いずれは具体型になる（関数が値を引数にとって値を生み出すように）

> だから、関数の引数としてある関数を加工（部分適用）するように、型クラスのインスタンスの型引数として、ある型を加工（部分適用）することができる。

## 型の種類とは
型とは、値について何らかの推論をするために付いているラベルのようなもの。また型にもラベルが付いている。このラベルのことを種類( kind )と呼ぶ。

|用語|意味|例|
|---|---|---|
|`*`|具体型を表す記号。型引数をとらない型のこと。値に付けられる型は、`*` つまり具体型だけである。|`Int`|
|`* -> *`|一つの具体型をとって具体型を返す型コンストラクタ|`Maybe`|
|`* -> * -> *`|二つの具体型をとって具体型を返す型コンストラクタ|`Either`|

例えば `isUpper` は `Char -> Bool` 型であり、`isUpper 'A'` は`Bool` 型である。どちらも具体型なので、型の種類( kind )は `*` となる。

>**値の型** と **型の種類** とは、捉え方に違いがあることに注意する。型の種類は、多相型なのか（そして型引数はいくつか）、具体型なのか、がポイント。ちなみに、値の型はすべて具体型でなくてはならない。

型コンストラクタも（関数と同様に）カリー化されているので、部分適用できる。

```hs:型コンストラクタが部分適用されている様子
Prelude Data.Char> :k Either
Either :: * -> * -> *
Prelude Data.Char> :k Either Int
Either Int :: * -> *
Prelude Data.Char> :k Either Int String
Either Int String :: *
```

他の例として、 **Functor** クラスを見てみると、この型クラスのインスタンスになるためには、`* -> *` の種類の型コンストラクタでなくてはならないことがわかる。



```hs:Functorクラス宣言
class Functor f where
  fmap :: (a -> b) -> f a -> f b
```


ここで、 `f a` は関数の型宣言にて値の型として使われていることから具体型でなくてはならない。つまり、`f` は型引数を一つとることで具体型となる型コンストラクタであることが導ける。
Windows(64bit)でのODBC設定

Windows7(64bit)でODBC設定にハマったのでメモ。

32bit用ODBC ： C:\Windows\SysWOW64\odbcad32.exe
64bit用ODBC ： C:\Windows\System32\odbcad32.exe

フォルダ名と32bit/64bitが逆になっててややこしい。
[Wikipedia](http://ja.wikipedia.org/wiki/WOW64)によると、
>SysWOW64フォルダには32ビットのバイナリが用意されている。

とのことらしい。
vue.jsでjQuery UI Sortableを使う

ググって見つけたコードが動いてなかったので直してみた。
コンポーネントでDOMの変更をモデルに反映させる。

```html
<div id="ex-sortable">
  <ul v-component="v-sortable" v-with="model: list"></ul>
</div>

<template id="sort-template">
  <li v-repeat="model">{{$value}}</li>
</template>
```

```js
Vue.component('v-sortable', {
  template: "#sort-template",
  ready: function() {
    var self = this;
    $(this.$el).sortable({
      opacity: 0.6,
      start: function(e, ui) {
        ui.item.data('from', ui.item.index());
      },
      update: function(e, ui) {
        var from = ui.item.data('from'),
            to = ui.item.index();
        self.model.splice(to, 0, self.model.splice(from, 1)[0]);
      }
    });
  }
});

new Vue({
  el: '#ex-sortable',
  data: {
    list: ['Item 1', 'Item 2', 'Item 3', 'Item 4']   
  }
});
```

http://jsfiddle.net/ykrhr/maLhtwr6/

ドラッグ開始時に、uiオブジェクトに移動前のインデックスを保存し、
完了後にそれを取得して、モデルも後追いで位置を入れ替える。
readyではなくcreatedだと要素が描画されていないためsortableが有効にならない点に注意。

## 2つのリスト間を相互に移動させる場合

```html
<div id="ex-sortable">
  <div>
    <ul class="sortable" v-component="v-sortable" v-with="model: list1"></ul>
    <pre>{{list1 | json}}</pre>
  </div>
  <div>
    <ul class="sortable" v-component="v-sortable" v-with="model: list2"></ul>
    <pre>{{list2 | json}}</pre>
  </div>
</div>

<template id="sort-template">
  <li v-repeat="model">{{$value}}</li>
</template>
```

```js
var moving;

Vue.component('v-sortable', {
  template: "#sort-template",
  ready: function() {
    var self = this;
    $(this.$el).sortable({
      opacity: 0.6,
      connectWith: '.sortable',
      start: function(e, ui) {
        ui.item.data('from', ui.item.index());
      },
      update: function(e, ui) {
        var from = ui.item.data('from'),
            to = ui.item.index();
        if (this !== ui.item.parent()[0]) { // move from
          moving = self.model.splice(from, 1)[0];
        } else if (from < 0) { // move to
          self.model.splice(to, 0, moving);
        } else { // same
          self.model.splice(to, 0, self.model.splice(from, 1)[0]);
        }
      },
      receive: function(e, ui) {
        ui.item.data('from', -1);
      }
    });
  }
});

new Vue({
  el: '#ex-sortable',
  data: {
    list1: ['Item 1', 'Item 2', 'Item 3'],
    list2: ['Item 4', 'Item 5', 'Item 6', 'Item 7']
  }
});
```

http://jsfiddle.net/ykrhr/5v876ktq/

別のリストへの移動の場合はupdateコールバックが2回走るため、
インデックスのかわりに-1をセットして移動先を判別できるようにした。
移動中のアイテムを保持するのにグローバル変数を使っているのは、
コンポーネント間でデータを共有するうまい方法がわからなかったため。
イベントを使えばもっとすっきり書けるかもしれない。
Scoped CSS


JavaScriptの激変は、CSSコーダー(?)にとっても対岸の火事ではありません。むしろ、変態的な職人的な方法論を捨て去らなきゃならないのは、CSSも同じ。

それはともかく、Scoped CSSについて整理しつつメモしてみます。※2015年初頭の状況として

## なにこれ?

Scoped CSSはDOMの中に`<style scoped>`タグを配置すると、そのDOMの内側にだけに限定されるCSSが書けるというものです。アイデア自体はしばらく前から存在するものの、Firefoxにのみ実装され、[Chromeについては実装が止まって](https://groups.google.com/a/chromium.org/forum/#!topic/blink-dev/R1x18ZLS5qQ)います。経緯を追うと、Web ComponentsのShadow DOMのCSSが`scoped`相当になるため「重複機能」と判断され、ペンディングになっている気配です。(ChromeとしてはWeb Componentsの仕様固めが優先)


- 仕様: [whatwg.org](https://html.spec.whatwg.org/multipage/semantics.html#attr-style-scoped)
- ブラウザ対応状況: [Can I use?](http://caniuse.com/#feat=style-scoped)
- [Mozilla Developer Network](https://developer.mozilla.org/en-US/docs/Web/CSS/:scope)


## なにが嬉しいのか

- コンポーネントのCSS記述が簡潔になる
- CSSをコンポーネント内に書くことの効率性
- [OOCSS](http://oocss.org/)や[BEM](https://en.bem.info/method/)とさようなら〜

それだからこそ、Web Componentsに取り込まれているわけですが、対応できればAngularやReactでもCSSを書くのが楽になります。Web Componentsにさっさと昇華するのか、Scoped CSSとして日の目を見るのかはさておき、考え方自体は今後のCSSで標準になるでしょう。真面目な話、CSSの方法論がどんがらがっしゃんする寸前の2015年です。

[SMACSS](https://smacss.com/)使いなら、(CSSの)モジュールに分けていたはずですが、それぞれのコンポーネント内に記述を移し、`base`や`theme`だけメインのCSSに残せばOK。移行はそれほど難しくないはず。BEMな人なら「__」の前(ブロック)を書く必要がなくなるといえば通じるでしょうか?


## Polyfills

ブラウザ対応が限られる一方、案外Polyfillは充実しています。

- [Vanilla JavaScript polyfill for scoped style](https://github.com/PM5544/scoped-polyfill)
- [jQuery Scoped CSS plugin](https://github.com/thingsinjars/jQuery-Scoped-CSS-plugin)
- [Polymer: Handling scoped styles](https://www.polymer-project.org/docs/polymer/styling.html#handling-scoped-styles)

### Polymerの場合

Shadow DOMのPolyfillの一部として、Scopedが使えるようになっています。

```html
<polymer-element name="x-foo">
   <template>
     <style>
       div { ... }
       :host { ... }
     </style>
   ...
```

は、下記のように解釈されます。`:host`がタグ名に置き換わります。

```html
<polymer-element name="x-foo">
   <template>
     <style>
       x-foo div { ... }
       x-foo { ... }
     </style>
   ...
```

### Riot.jsに提案中 (2015年2月現在)

ほぼ、Polymerと同じですが、Mozillaにしたがって`:scope`を使っています。

```html
<my-tag>

  <h3>{ opts.title }</h3>

  <style scoped>
    :scope { display: block; border: 2px }
    h3 { color: blue }
  </style>

</my-tag>
```

は、下記のように解釈されます。

```html
<my-tag>

  <h3>{ opts.title }</h3>

  <style>
    my-tag { display: block; border: 2px }
    my-tag h3 { color: blue }
  </style>

</my-tag>
```

※追記 2015/2/25: [プルリクエスト](https://github.com/muut/riotjs/pull/430)送りました。
※追記 2015/2/27: マージされました。

![Riot 2.0](https://qiita-image-store.s3.amazonaws.com/0/1858/e05cb9d6-050f-df21-600c-eb2825d571c9.png "Riot 2.0 | A React- like UI library.png")
[v2.0.12 - With scoped CSS support...](https://muut.com/riotjs/release-notes.html#2-0-12-em-mar-2-2015-em-)


## 結語

オブジェクト指向CSSとか、CSSに無茶な要求が多い昨今、問題の多くはCSSがDOMから遠すぎるところにありました。その点、Scoped CSSを使うと、「DOMにスタイルをベタ書き」するのに近いことができます。コンポーネントとの組み合わせが最強ですね。

水平分業が進みすぎたWeb界隈に、垂直統合の嵐が吹き荒れてますが、CSSから考えるときはScoped CSSがその最初の一手になりそうです。
GoでResqueを利用する

ResqueをGoで利用したかったので調べた。幾つか参考になるサイトがあったが補足が必要だったので併せて記述する

# 参考にしたサイト
* [goworker](https://github.com/benmanns/goworker)
* [golang で redis を使った job worker](http://blog.livedoor.jp/sonots/archives/40192348.html)
* [go-resque](https://github.com/kavu/go-resque)

# はじめに
GoでResqueを扱うのにgoworkerがあるが、これはworkerの実装に特化していてenqueueする機能がない。そのため、GoでEnqueueする方法として、go-resque packageを利用する。

参考にしたサイトで詰まったのはqueueのnamespaceで、そこら辺について補足する形でまとめる

# 設定
redis

* hostはlocalhost
* ポートは6379

queueのnamespace(ここの指定が微妙に異なる)

* redis:queue:{namespace}

# Enqueue
[go-resque](https://github.com/kavu/go-resque)こちらを参考に

```go
package main

import (
	"github.com/kavu/go-resque" // Import this package
	_ "github.com/kavu/go-resque/godis" // Use godis driver
	"github.com/simonz05/godis/redis" // Import godis package
)

func main() {
	client := redis.New("tcp:127.0.0.1:6379", 0, "") // Godis redis client
	enqueuer := resque.NewRedisEnqueuer("godis", client)

	enqueuer.Enqueue("resque:queue:default", "MyClass", 1, 2, "woot")
}
```

## Queueに入れる
`go run enqueue.go` を実行すると Redisの`resque:queue:default` に追加される


# Dequeue

```go
package main

import (
	"fmt"

	"github.com/benmanns/goworker"
)

func myFunc(queue string, args ...interface{}) error {
	fmt.Printf("From %s, %v\n", queue, args)
	return nil
}

func init() {
	goworker.Register("MyClass", myFunc)
}

func main() {
	if err := goworker.Work(); err != nil {
		fmt.Println("Error:", err)
	}
}
```

## Queueから取り出す
`go run dequeue.go -queues=default -concurrency=1`
concurrencyは任意で変更したら良い。queueのnamespaceはenqueue時と異なり実行時の引数で設定することでflagによって処理される。

# ハマりポイント
resqueのnamespaceは`resque:queue:`が先頭につくが、enqueueのpackageはデフォルトで設定されないのでこの辺ミスるとハマる。というかハマった。

#まとめ
enqueueとdequeueでpackageが異なるのでnamespaceに気をつけましょう。
超初心者　Android 画面遷移

画面遷移
【参考】http://androidguide.nomaki.jp/html/otherui/explicitintent.html

ボタンを配置し遷移先を作成した後は
レイアウトの設定とボタンクリックでサブ画面を起動します。
他の画面(Activity)を起動する場合にはIntentを使用

【引用】

public class ExplicitIntentSampleActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Button btnDisp = (Button)findViewById(R.id.btnDisp);
        btnDisp.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                // Sub 画面を起動
                Intent intent = new Intent();
                intent.setClassName("jp.sample", "jp.sample.SubActivity");
                startActivity(intent);
            }
        });
    }
}




ButtonではなくImageViewで画面遷移の設定を行う時は以下のようにButtonを変える。
ImageView btnDisp = (ImageView) findViewById(R.id.btnDisp);
plistファイルを変更・削除したらcfprefsdを実行


OS10.9からplistファイルを変更・削除した場合、そのままでは変更が反映されません。

(Station TV LEがBS放送を認識しなくなり、plistを捨てて再設定すればなんとかなると思ったけどなんともならず、物理的な接続が怪しいのでは？とアンテナ線まで疑うことになりました)

plistファイルの変更や削除を行ったら、
~~~
$ sudo killall cfprefsd
~~~
を実行すること。でないと、plistが更新・再生成されません。  


例えば、TimeMachineの更新時間を3600秒(1時間)から10800秒(3時間)に変更します。  
まずはvimで書き換え  

~~~
$ sudo vim /System/Library/LaunchDaemons/com.apple.backupd-auto.plist 
<key>Interval</key>
<integer>10800</integer>
~~~

cfprefedを確認  

~~~
$ ps awux |grep cfprefsd
hogehoge        50641   0.5  0.0  2452228    692 s003  S+   11:29PM   0:00.00 grep cfprefsd
hogehoge          224   0.0  0.1  2480268  14516   ??  S    土10AM   0:12.10 /usr/sbin/cfprefsd agent
root              105   0.0  0.1  2483816  15556   ??  Ss   土10AM   0:11.86 /usr/sbin/cfprefsd daemon
~~~
224とか105とか出てますね。  


ここでcfprefsdをkillallします。-HUPとか付けなくても自動的に上がってきます。

~~~
$ sudo killall cfprefsd
~~~



ここで再度cfprefedを確認。  

~~~
$ ps awux |grep cfprefsd
hogehoge        50661   0.0  0.0  2450180    676 s003  S+   11:29PM   0:00.00 grep cfprefsd
hogehoge        50659   0.0  0.0  2462740   1444   ??  S    11:29PM   0:00.01 /usr/sbin/cfprefsd agent
root            50658   0.0  0.0  2462604   1072   ??  Ss   11:29PM   0:00.00 /usr/sbin/cfprefsd daemon
~~~

プロセスIDが50658とか50659に変わっています。  
TimeMachineの設定自体はOSを再起動しないと反映されないので、再起動が必要です。

ちなみに、Qiita初投稿ネタです。  
facebookだと過去の投稿検索できないし(できるらしいがわからん)、私のようなとりあたまはすぐに忘れるので、ググって出てきてくれるQiitaに備考録的に書いていきます。
HomeBrewでsbclをinstallした時の覚書

 以前は普通にinstallできたのに最近のsbclのFormulaファルに問題があってinstallできない。はじめはまーいいかってほっておいたんだけど、なんか最近気になって治すことにした。

## どの辺がもんだいか？

 まず、`brew install sbcl`するとrubyがエラーを吐く。これは、以下のところでエラーになる。

``` sbcl.rb
79      # Remove non-ASCII values from environment as they cause build failure
s
80      # More information: http://bugs.gentoo.org/show_bug.cgi?id=174702
81      ENV.delete_if do |key, value|
82        value =~ /[\x80-\xff]/n
84      end
```

エラーの内容としては

> ncompatible encoding regexp match (ASCII-8BIT regexp with UTF-8 string) (Encoding::CompatibilityError)

こんな感じ。ま、用は正規表現で１６進コードを書いているようなのでこの辺が問題ということらしい。
　で、コメントを読むと環境変数にnon-ASCIIな値が入っているとsbclを作るときにエラーになるということらしい。なので、この82行目をなんとかすればよさそう。

## 解決方法

　問題の箇所はnon-ASCIIかどうかを判定しているだけなので、これと同じことができればいい。rubyには `ascii_only?` というメソッドがあるのでこれで代用することにした。

 ```
ENV.delete_if fo |key, value|
	value =~ /[¥x80-¥xff]/n
end
```

こうなっているところを

```
ENV.delete_if fo |key, value|
	false == value.ascii_only?
end
```

と、するだけ。
これで一応インストールはできるようになった。

## 注意

 ネットで探してみたけど、僕と同じエラーが出てHomebrewをつかってのインストールができないといった問題の人を見つけられなかった。なので、僕だけの問題なのかもw。
CentOS 6 でも /etc/sysctl.d/ は使える（ipv6 無効化とか）

CentOS 6 で ipv6 を無効にするときは /etc/sysctl.conf に下記を追記します。

*/etc/sysctl.conf*

```sh
# ipv6 disable
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
```

[FAQ/CentOS6 - CentOS Wiki](http://wiki.centos.org/FAQ/CentOS6#head-d47139912868bcb9d754441ecb6a8a10d41781df "FAQ/CentOS6 - CentOS Wiki")

一方、CentOS 7 なら /etc/sysctl.d/ というディレクトリがあるので、sysctl.conf を変更せずに、/etc/sysctl.d/ に変更分のファイルを作成する方が良いでしょう。

と、思ったら CentOS 6 でも /etc/sysctl.d/ は有効でした。

[CentOS • View topic - [RESOLVED] Is /etc/sysctl.d/ supported in CentOS 6?](https://www.centos.org/forums/viewtopic.php?t=5657 "CentOS • View topic - [RESOLVED] Is /etc/sysctl.d/ supported in CentOS 6?")

```console
$ grep -A 10 apply_sysctl /etc/init.d/functions
apply_sysctl() {
    sysctl -e -p /etc/sysctl.conf >/dev/null 2>&1
    for file in /etc/sysctl.d/* ; do
        is_ignored_file "$file" && continue
        test -f "$file" && sysctl -e -p "$file" >/dev/null 2>&1
    done
}
```

というわけで、CentOS 6 でも /etc/sysctl.d/ に変更分だけ追加でファイルを作成する方が良いでしょう。

*/etc/sysctl.d/ipv6-disable.conf*

```sh
# ipv6 disable
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
```
2015年度 全国の PHP カンファレンス のまとめ

# 2015年度 全国の PHP カンファレンス のまとめ

## PHPカンファレンス関西
開催日 : 5月30日(土)
開催場所 : ブリーゼプラザ（http://www.breeze-plaza.com/)
https://twitter.com/phpcon_kansai/
https://www.facebook.com/pcon.kansai/
http://conference.kphpug.jp/
 
## PHPカンファレンス福岡
開催日 : 6月27日(土)
開催場所 : 博多駅周辺
https://twitter.com/phpcon_fukuoka/

## PHPカンファレンス
開催日 : 10月3日(土)
開催場所 : 東京都大田区南蒲田1-20-20 大田区産業プラザ
https://twitter.com/phpcon/
https://www.facebook.com/pcon.japan/
http://phpcon.php.gr.jp/
Flask サイト構築備忘録 

##ディレクトリ構成
基本構成は以下で、appの下の\__init__.pyに初期動作を書きこむ。

>root/
┣run.py
┣app/
　┣\__init__.py
　┣config.py
　┣module1/
　　┣\__init__.py
　　┣models.py
　　┣controllers.py
　　┣forms.py
　┣templates/
　┣static/


```py:run.py
from app import create_app

if __name__ == "__main__":
    app = create_app()
    app.run()
```

```py:app/__init__.pyy
from flask import Flask
from flask_debugtoolbar import DebugToolbarExtension
from flask.ext.sqlalchemy import SQLAlchemy # Import SQLAlchemy
from flask.ext.mongoengine import MongoEngine # Import Mongoengine
from flask.ext.admin import Admin
from app import config

# app setup
db = SQLAlchemy()
mongodb = MongoEngine()
admin = Admin()
toolbar = DebugToolbarExtension()

def create_app():

    app = Flask()
    app.config.config_from_object(config)

    #Initializing
    db.init_app(app)
    mongodb.init_app(app)
    admin.init_app(app)
    toolbar.init_app(app)

   # Import a module
    from app.module1.controllers import mod_app

    # Register blueprint(s)
    app.register_blueprint(mod_app)

    # Build the database:
    # This will create the database file using SQLAlchemy
    db.create_all()

    return app
```

こんな感じでしておけば、各モジュールで、url_prefixを指定しておき、register_bluepointで登録でいける。
configはファイルのままでもOKだが、windowsなどの場合"../"は微妙なので、importしてからオブジェクトで読ますのがいいと思う。
templatesやsataticはどこでもいいが、appの下がスマート。
[*Rails*] GoogleMapの見た目をオシャレにしたい

# はじめに
マップのデザインをデフォルトから変えれないのかなと調べたら便利なものがあるみたいなのでメモ。
gmaps4railsの導入自体は[*[*Rails*] 指定座標のGoogleMapを表示させたい*](http://qiita.com/cigalecigales/items/bfdaa07a7fa29a4175cb)参照。

# 手順
### 1. マップデザイン選び
[*SNAZZY MAPS*](https://snazzymaps.com/)から好みに合ったマップデザインを選ぶ。

### 2. デザインをコピー
気に入ったデザインが見つかったら左下付近の**Copy**をクリックしてコピー。

![スクリーンショット 2015-02-22 21.50.04.png](https://qiita-image-store.s3.amazonaws.com/0/48912/c442661b-ee7a-1d92-0eb2-d27c6a2e7205.png)

### 3. viewの編集
**mapStyle**のところにさっきコピーしたものを貼り付ける。

```app/views/map/index.html.erb
<script src="//maps.google.com/maps/api/js?v=3.13&amp;sensor=false&amp;libraries=geometry" type="text/javascript"></script>
<script src='//google-maps-utility-library-v3.googlecode.com/svn/tags/markerclustererplus/2.0.14/src/markerclusterer_packed.js' type='text/javascript'></script>

<div style='width: 800px;'>
  <div id="map" style='width: 800px; height: 400px;'></div>
</div>

<script type="text/javascript">

	mapStyle = //使用したいSTYLEを貼り付ける
	
	handler = Gmaps.build('Google');
    handler.buildMap({ provider: {styles: mapStyle}, internal: {id: 'map'}}, function(){
      markers = handler.addMarkers(<%=raw @hash.to_json %>);
      handler.bounds.extendWith(markers);
      handler.fitMapToBounds();
    });
</script>
```

### 4. デザインの確認
デフォルト。
![スクリーンショット 2015-02-22 21.47.01.png](https://qiita-image-store.s3.amazonaws.com/0/48912/8908a3a4-2705-7468-4f3e-6eebacfef7e4.png)

デザイン適用後。
マップデザインがおしゃれに！
![スクリーンショット 2015-02-22 21.49.45.png](https://qiita-image-store.s3.amazonaws.com/0/48912/0126a951-2b6a-77fd-7841-542f56073eed.png)
量について

$\newcommand{\X}{\mathrm{X}}\newcommand{\kg}{\mathrm{kg}}\newcommand{\m}{\mathrm{m}}\newcommand{\s}{\mathrm{s}}\newcommand{\K}{\mathrm{K}}\newcommand{\J}{\mathrm{J}}\newcommand{\N}{\mathrm{N}}\newcommand{\A}{\mathrm{A}}\newcommand{\b}{\mathrm{b}}\newcommand{\B}{\mathrm{B}}\newcommand{\Ki}{\mathrm{Ki}}\newcommand{\Mi}{\mathrm{Mi}}\newcommand{\Gi}{\mathrm{Gi}}$

# 次元の除去
物理量や情報量を単位抜きで扱いたい．[数について](http://qiita.com/etale/items/26c7d4836e6e836fa525)の対数表示を利用すれば十分実用的だと思われるし，古典物理学や量子力学を具体的な数値として量的に把握することができるような気がする．

$4 \pi G = c = \varepsilon_0 = \mu_0 = k = h/2 \pi i = 1$とする．

普通は$\hbar = h/2\pi = 1$とするが，それでは次元が退化しすぎる感じだし，
$pq - qp = h/2\pi i$だけ見ても，$h = 2\pi i$とみなしたくなる．

これらの量を慣用の単位系で表して
$c = 299792458\ \m\ \s^{-1} = 1$
$h = 6.626070040 \times 10^{-34}\ \kg\ \m^2 \s^{-1} = 2 \pi i$
$G = 6.67408 \times 10^{-11}\ \kg^{-1} \m^3 \s^{-2} = 1/4\pi$
とすれば，$\mathbb{C}$で解いて
$\kg =  18.908488.125\ \X = \exp(18.908488 + 2\pi i \times 0.125)$
$\m  =  78.844871.125\ \X$
$\s  =  98.363472.125\ \X$
となる．ついでに
$k = 1.3806488 \times 10^{-23} \J\ \K^{-1} = 1$
$\mu_0 = 4\pi \times 10^{-7}\ \N\ \A^{-2} = 1$
とすれば，
$\K  = -72.765617.125\ \X$
$\A  = -56.280327 \ \X$
となる．また，
$\b = \log 2 = 0.693147 = -0.366513\ \X$
$\B = \log 2^8 = 8 \log 2 = 1.712929\ \X$
$\Ki\B = 2^{10}\ \B = 8.644400\ \X$
$\Mi\B = 2^{20}\ \B = 15.575872\ \X$
$\Gi\B = 2^{30}\ \B = 22.507344\ \X$
などとなる．
ニフティクラウドmobile backendでファイルストアからデータを取得する

ニフティクラウドmobile backendに保存したデータを取得する方法が、[SDKガイド](http://mb.cloud.nifty.com/doc/sdkguide/android/datastore.html)だけでは分からなかったのでまとめてみます。

## オブジェクトIDを指定して取得

データを一意に識別できるオブジェクトIDから取得する場合は下記のようになります。

```java
NCMBQuery<NCMBObject> query = NCMBQuery.getQuery("GameScore");
query.getInBackground("オブジェクトID", new GetCallback<NCMBObject>() {
    @Override
    public void done(NCMBObject gameScore, NCMBException e) {
        if (e != null) {
            // エラー
            return;
        }
        // 処理
    }
});
```

## 検索条件を指定して取得

ある値を持つデータを取得する場合は下記のようになります。

```java
NCMBQuery<NCMBObject> query = NCMBQuery.getQuery("GameScore");
query.whereEqualTo("検索対象の列", "値");
// List<NCMBObject> gameScores = query.find(); // 同期取得する場合
query.findInBackground(new FindCallback<NCMBObject>() { // 非同期取得する場合
    @Override
    public void done(List<NCMBObject> gameScores, NCMBException e) {
        if(e != null) {
            // エラー
            return;
        }
        // 処理
    }
});
```

データを1件だけ取得する場合は、find()の代わりにgetFirst()を使用します。

検索条件としては、他にもwhereLessThan()やwhereContainedIn()等があります。

詳しくは、[クエリの使い方](http://mb.cloud.nifty.com/doc/sdkguide/android/query.html#/Android/)をご参照ください。
Mac OS X の File System を復旧する


> マジで、HFS+はたぶん最悪のファイルシステムだな。クソすぎるぜ。
> http://cpplover.blogspot.jp/2015/01/blog-post_14.html

## 概要

Disk Utility.app で Verify Disk すると次のようなエラーが出る場合に復旧する手法。

```
Error: This disk needs to be repaired using the Recovery HD. Restart your computer, holding down the Command key and the R key until you see the Apple logo. When the OS X Utilities window appears, choose Disk Utility.
```

## Step 1

筐体ブート時に Command + R を押しているとリカバリモードでブートしてくるので Disk Utility を選択して Repair Disk してリブート。

## Step 2

リカバリモードでうまく直らない場合は、同様に Command + S でシングルユーザモードでブートさせる。

プロンプトがでたら fsck をかけてリブート

```
# fsck -fy
# reboot
```

## Step 3

これでも直らない場合は高確率で物理不良なので Apple Store に持って行く。
maximaのplotの軸の目盛りを調整

例えば、x軸を0.1間隔で表示してほしいとかそういう場合の指定の仕方。  

```
plot2d(f(x),[x,0,1],[gnuplot_preamble, "set xtics 0.1"])
```

横軸ならxtics、縦軸ならyticsを設定する。これはf(x)の変数名がxだろうがnだろうがxticsとyticsで固定。というかこれは多分gnuplotの設定なんじゃないかな。  


### 追記  
普通にplot2d自体のオプションでいけるようだ。  

```
plot2d(f(x),[x,0,1],[xtics,0.1])
```
Vagant初体験

今まで使ったことなかったんすけど、[@masuidrive](http://qiita.com/masuidrive)さんの[React + (Javascript || CoffeeScript) + Bower スタータキット @masuidrive](http://qiita.com/masuidrive/items/f3ed865ef60565068bdb)を試したくて。

[Vagant公式](https://www.vagrantup.com/)

## Vagrant?
簡単な設定で好きな構成の仮想マシンを構築する設定作業を自動化することができる！
VirtualBox, VMwareを使いまーす

## 導入

### ダウンロード
ここから[ダウンロード](https://www.vagrantup.com/downloads.html)

#### VirtualBox
[ダウンロード](https://www.virtualbox.org/wiki/Downloads)

### Boxファイル

[OSイメージ？つくりたい環境をここから頂いてきました](http://www.vagrantbox.es/)

### 用意できたらvagrantコマンドをトントンする

```
$ vagrant box add centos56 http://www.lyricalsoftware.com/downloads/centos65.box
$ vagrant init centos56
$ vagrant up && vagrant ssh
```

これで起動するはずー。


## 基本操作

* VM 起動

```
$ vagrant up
```

* SSH 接続

```
$ vagrant ssh
```

* ステータス確認

```
$ vagrant status
```

* 一時停止

```
$ vagrant suspend
```

* リロード

```
$ vagrant reload
```

* VM 停止

```
$ vagrant halt
```

* VM 削除

```
$ vagrant destroy
```
Enumerator::Lazyを使ってFizzBuzz

FizzBuzz流行っているようだったので、、、
lazyを知った時に使い方を覚えたくて、FizzBuzzに応用してみた事があります。
その時のコードにキャッシュ機能を追加したバージョンを載っけてみます。
変態度は0。

```rb
class FizzBuzz
  def initialize(n)
    @fizzbuzz = (1..n).lazy.map{ |i| fizzbuzz i }
    @cache = []
  end

  def first(n = 1, cache: true)
    return @fizzbuzz.first n unless cache
    add_cache n
    @cache.first n
  end

  def at(n, cache: true)
    return if n > @fizzbuzz.size
    add_cache n if cache
    fizzbuzz n
  end

  def to_s
    @cache.join(',')
  end

  private

  def add_cache(n)
    if n > @cache.size
      @cache.concat @fizzbuzz.drop(@cache.size).first n - @cache.size
    end
  end

  def fizzbuzz(i)
    {0 => i, i%3 => 'Fizz', i%5 => 'Buzz', i%15 => 'FizzBuzz'}[0]
  end
end

fizzbuzz = FizzBuzz.new 15
p fizzbuzz.first 10 # => [1, 2, "Fizz", 4, "Buzz", "Fizz", 7, 8, "Fizz", "Buzz"]
p fizzbuzz.at 15    # => "FizzBuzz"
p fizzbuzz.at 20    # => nil
puts fizzbuzz       # => 1,2,Fizz,4,Buzz,Fizz,7,8,Fizz,Buzz,11,Fizz,13,14,FizzBuzz

fizzbuzz = FizzBuzz.new 15_000
p fizzbuzz.first 10, cache: false   # => [1, 2, "Fizz", 4, "Buzz", "Fizz", 7, 8, "Fizz", "Buzz"]
p fizzbuzz.at 15_000, cache: false  # => "FizzBuzz"
puts fizzbuzz                       # =>
```
[Unity4.6.3f1][Xcode6.1.1]You are using Unity iPhone Basic. You are not allowed to remove the Unity splash screen from your gameと怒られるようになった時


4.6.3にしたら急にご機嫌斜めです。

```
2015-02-22 20:34:00.542 appname[8916:4103258] -> registered mono modules 0x100fbdca0
-> applicationDidFinishLaunching()
You are using Unity iPhone Basic. You are not allowed to remove the Unity splash screen from your game
```

こんな感じでスプラッシュ画面を表示するところで落ちるようになってしまいました。

##対処
下記３つのファイルをDelete -> Remove Referencesで削除

- LaunchScreenImage-Landscape.png
- LaunchScreenImage-Portrait.png
- LaunchScreen.xib

![kobito.1424604494.637978.png](https://qiita-image-store.s3.amazonaws.com/0/25416/acc9861e-fea5-e085-ac0f-7e73acaa466e.png "kobito.1424604494.637978.png")

その後、Targetの「Unity-iPhone」を選択し「Info」タブを選択。「Custom iOS Target Properties」の中にある「UILaunchStoryboardName~iphone」キーを削除。