OmniAICreator/Qiita-1.07M huggingface dataset:
Chromeで開いているURLをFirefoxとSafariで開くAppleScript


動作環境は OS X 10.8.5 で確認。

```applescript:firefoxで開く.scpt
tell application "Google Chrome"
	set vURL to get URL of active tab of first window
end tell

tell application "Firefox"
	open location vURL
	activate
end tell
```

```applescript:safariで開く.scpt
tell application "Google Chrome"
	set vURL to get URL of active tab of first window
end tell

tell application "Safari"
	open location vURL
	activate
end tell
```
これらを AppleScript エディタ で開いて保存。

AppleScript エディタ の 環境設定 > 一般 に「メニューバーにスクリプトを表示」チェックボックスがあるので、そこにチェックすると、各アプリケーションごとに、メニューにAppleScriptのアイコンの形をしたメニューが現れる。

そこから スクリプトフォルダを開く > Chrome スクリプトフォルダを開く を選択すると、Chrome専用のスクリプトフォルダが開くので、そこに上記スクリプトを入れておく。

これでChromeで開いているURLをいつでもFirefoxでそのまま開けるようになる。
かんたん便利。
Eclipse4.3でJUnitを使えるようにする


1.EclipseのDL
http://www.eclipse.org/downloads/ の Mac 64bit

2.DLしたEclipseフォルダをApplicationフォルダにドラッグ＆ドロップ
     Eclipse.appだけ移動させるとエラーが出るので注意

3.https://github.com/junit-team/junit/wiki/Download-and-Install にある、junit.jarとhamcrest-core.jarをDLする

4.Eclipseで一つプロジェクトを作成する

5.プロジェクトで右クリック-> Properties -> Java Build Path -> Libraries -> Add External JARs
  でjunit.jarとhamcrest-core.jarを選択

6.これでOK

参考：http://futurismo.biz/archives/844
APNSの証明書を作成するスクリプト

同じような記事がいくつかありますが、自分の環境では動かなかったので、自分の環境で動くものを公開します。
第一引数に.certファイルを、第二引数に.p12ファイルを指定してください。
第三引数に証明書を区別するためのサフィックスの文字列を入力してください。「aps_ck_<サフィックス>.pem」という名前で出力されます。

```
#!/bin/zsh

if [[ $# -ne 3 ]]; then
    echo "ArgumentError: wrong number of arguments ($# for 3)"
    echo 'arg1={certificate file name(.cer)}, arg2={key file name(.p12)}, arg3=suffix of filename.'
    exit 1
fi

openssl x509 -in $1 -inform der -out aps_cert.pem
openssl pkcs12 -nocerts -out aps_key.pem -in $2
cat aps_cert.pem aps_key.pem > aps_ck_$3.pem
rm aps_cert.pem
rm aps_key.pem
zshの履歴補完を前方一致にして引数を補完する

.zshrc

```zsh
bindkey ${key[Up]} history-beginning-search-backward
bindkey ${key[Down]} history-beginning-search-forward
```


zshにはhistory-beginning-search*という前方一致で履歴をたどる機能がある．
コレを使うと例えば

emacs [ここで補完]
>emacs hoge
>emacs fuga
>emacs ...

のように直近に編集したファイルを辿れたりするので便利．
プレフィックスを何も入れないで使うとただの直近の履歴なのでデフォルトをこちらにしても良い．
ということで上の設定．

$keyの中にはキーマップが入っているらしい
ActionBar-PullToRefresh使ってみたメモ


ListView使いたかったのサンプルコード拝借してきて、こんなかんじのかけば多分動くんじゃね程度のメモコード

##メモコード

```java

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        SampleListFragment sampleFragment = new SampleListFragment();
        if (sampleFragment != null) {
            getFragmentManager().beginTransaction()
                    .replace(android.R.id.content, sampleFragment).commit();
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    
}
```

```java
public class SampleListFragment extends ListFragment implements OnRefreshListener {

    private PullToRefreshLayout mPullToRefreshLayout;
  
    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view,savedInstanceState);
        ViewGroup viewGroup = (ViewGroup) view;

        mPullToRefreshLayout = new PullToRefreshLayout(viewGroup.getContext());

        ActionBarPullToRefresh.from(getActivity())
                .insertLayoutInto(viewGroup)
                .theseChildrenArePullable(android.R.id.list, android.R.id.empty)
                .listener(this)
                .setup(mPullToRefreshLayout);

    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

    }

    @Override
    public void onRefreshStarted(View view) {
       // do some stuff...
       mPullToRefreshLayout.setRefreshComplete();
    }
}
```

##ActionBar-PullToRefresh
- https://github.com/chrisbanes/ActionBar-PullToRefresh

###このへんのサンプル見ると他のviewでの実装もわかりやすくてよいかも
- https://github.com/chrisbanes/ActionBar-PullToRefresh/tree/master/samples/stock/src/uk/co/senab/actionbarpulltorefresh/samples/stock

##This is a Preview
っていうてるのでAPIはまだこれから変わる可能性あるのでちょと気をつけないと
PHPで「Notice:」のエラー表示を抑える方法

PHPは、利用しているバージョンによって次のようなエラーメッセージが表示されることがあります。

```
Notice: Undefined index: xxxx in ...
```

これは、「なにも値が設定されていない変数や配列を、利用しようとしている」という状況で発生する警告で、例えば次のようなプログラムで発生します。

```php
if ($_POST['name'] == '') {
    echo '名前が入力されていません';
}
```

これを防ぐには次のように変更します。

```php
if (isset($_POST['name']) && $_POST['name'] === '') {
...
```

ただし、この Noticeのエラーが表示されるようなったのは、PHPの最近のバージョンからだったため、サンプルプログラムやオープンソースのアプリケーションなどでは、大量の Noticeが発生する場合もあります。

そのような場合は、PHPの設定を変更することでも表示を抑えることができます。

php.iniをエディタなどで編集し、535行目付近の「error_reporting =...」という箇所を、次のように書き換えます

```
error_reporting = E_ALL & ~E_NOTICE
```

XAMPPを利用している場合、ControlPanelの「Apache」の行にある「Config」ボタンから編集することができます。

![2013-11-19_00-40-44.png](https://qiita-image-store.s3.amazonaws.com/0/3977/b3cb2261-c109-ecd4-ca58-3efc06c575db.png)

これで一時的に表示を抑えることができます。
Booleanを返す関数について

```js
function fn(value) {
  if (value === 1) {
    return true;
  } else {
    return false;
  }
}
```

もにょもにょ。

```js
function fn(value) {
  if (value === 1) {
    return true;
  }

  return false;
}
```

もにょ。

```js
function fn(value) {
  return (value === 1) ? true : false;
}
```

んー。

```js
function fn(value) {
  return (value === 1);
}
```

うん。まあ、短いから良いかというとそうでもないし、好みによるのだろうけど。
sitemap.xml

### sitemap.xmlって？
googleなどの検索エンジンに自分のサイトを網羅的にインデックスしてもらうためのファイル。基本的にはURLが羅列してあるファイルと思っていればいい。ボットはこのファイルを元にサイトを巡回することができる。

コンテンツのタイプや更新頻度などを指定することができるが、一番大事なのはsitemap.xmlを置く場所。sitemap.xml以下のドメインのURLのみがクロールされるので設置する場所に気を付ける必要がある。基本的にはルートでいいはず。

### 参考
- http://www.sitemaps.org
- https://support.google.com/webmasters/?hl=ja#topic=8476
kibanaで使えるlucene query


## ageが20かつnameが太郎(SQLのAND)
```shell-session
age:20 AND name:"太郎"
```

## ageが20かnameが太郎(SQLのOR)
```shell-session
age:20 OR name:"太郎"
```

## 正規表現
```shell-session
name:/joh?n(ath[oa]n)/
```

## ageが1か2(SQLのIN)
```shell-session
age:(1 2)
```

## ageが20ではない(SQLの!=)
```shell-session
-age:20
```

### または
```shell-session
NOT(age:20)
```

## ageが20から30の間(SQLのBETWEEN)
```shell-session
age:(20 TO 30)
```

## ageが10以上20未満
```shell-session
age:(>=10 AND < 20)
```

## dateが2012/01/01以前
```shell-session
date:[* TO 2012-01-01]
```

## dateが2012/01/01 ~ 2012/12/31の間(型がdateである必要あり)
```shell-session
date:[2012-01-01 TO 2012-12-31]
```

## 時刻まで指定
```shell-session
date:[2014-01-11T17:04:39+09:00 TO *]
```
[VBA]ダイアログでフォルダの選択を行う

Qiita初投稿。
とりあえず手始めに。
wordでマクロ組むときに必要だったのでメモ。
VBAなので勿論Excelでも動くと思われる。

```vbnet
With Application.FileDialog(msoFileDialogFolderPicker)
   .Title = "テストタイトル"
   .AllowMultiSelect = False   'フォルダを複数選択できるようにするか？
   If .Show = -1 Then
        MsgBox ".SelectedItems(1)" & "が選択されました"
    Else
        MsgBox "選択されていません。"
    End If
End With
```

## 忘備録的な

* SelectedItems(1)で選択したフォルダのディレクトリパスが取得できる。
* if~は勿論別に無くても動く。
luaのcoroutine

最近、vimの勝手スクリプトとかもluaで書いたりしていて、便利だなぁって思っています。
coroutineについてメモしておく。

# coroutineの大体
coroutineは独自のluaスタックとローカル変数を持つスレッド的な物。
スレッド的だけれど、OSに制御が有るわけではなく、制御を明け渡すならロジック自体がそれを通知しないといけない。

create()するとコルーチンが作られる。resume()で実行/復帰、コルーチン内でyield()すると制御を戻せる。この時、戻り値として値をやり取りしたりもできる。
なんか適当に機能を使いまくると、こんな感じ。

```lua:coroutine1.lua
local colo = coroutine.create(
	function( init )
		if init == nil then init = 0 end

		local i = init
		while i < 10 do
			coroutine.yield(i)
			i = i+1
		end
		assert( false )

		return -1
	end
)

repeat
	local bStat, vRet = coroutine.resume( colo, 5 )
	if bStat then
		print("->", vRet )
	else
		print("assert! -> ", vRet)
	end
until coroutine.status( colo ) == "dead"
```

```:output
->	5
->	6
->	7
->	8
->	9
->	-1
```

# coroutine.create()
> coroutine.create( fn )

create()すると、新しいコルーチンが返される。fnは関数でなければならない。
この関数fnが、コルーチンが走行中に実行される関数になる。

# coroutine.resume()
> coroutine.resume( co, ... )

resume()するとコルーチンcoの実行を開始/再開できる。coに続いて付けた値で、コルーチンの関数fnの引数と出来る。（ただしもちろん開始の時だけ）

この関数の第一戻り値では、コルーチンがアサートで死んだかどうかが返される。このとき、親のスレッドは死なないので外側からハンドリングすることができる。

```:output
assert! -> 	coroutine1.lua:4: assertion failed!
```

以降は、関数 or yield()で戻された値が第二・第三･･･と帰っていく。

# coroutine.status()
> **coroutine.status( coro )**

status()するとスレッドの状態が返される。これらの値とその状態はこんな感じ。

| 値 | 意味 |
|--------|--------|
|suspend|コルーチンは新品、もしくはyield()で停止中。resume()可能。|
|normal|アクティブだが止まっている。自分の親。|
|running|現在実行中。自分自身。|
|dead|return/assertで既に終了している。|

# coroutine.yield()
> **coroutine.yield( ... )**

コルーチンの実行を中断する。次回resume()されたときは、yieldの次の行から実行される。ここで、引数に値を与えると呼び出し元のresume()の第二戻り値以降へ返すことができる。

当然だが、resume()されるまでスタックやローカル変数は保全されている。

# coroutine.running()
> **coroutine.running()**

走行中のコルーチンを返す。つまり自分自身。

```lua:running.lua
local colo = coroutine.create(
	function( )
		print( coroutine.status(coroutine.running()))
		return -1
	end
)

repeat
	coroutine.resume( colo, 0 )
until coroutine.status( colo ) == "dead"
```

```:output
running
```

# coroutine.wrap()
> **coroutine.wrap(fn)**

wrapはcreate()のひねくれた版で、関数的に呼び出すとresumeされるコルーチンを返す。ただし、このオブジェクトはthreadオブジェクトではなくてfunctionオブジェクトなので、一切にcoroutine.*系関数が使えない。また、通常のコルーチンではエラーは分離されていたけれど、wrap()で作ったコルーチンのエラーは親へ伝播する。
使い所はなかなかだが、場合によってはすっきり書ける。

```lua:wrap.lua
local wcolo = coroutine.wrap(
	function( i )
		while true do
			i = i + coroutine.yield()
			print("->", i)
		end
	end
)

wcolo(1)
wcolo(2)
wcolo(3)
wcolo(4)
```

```:output
-> 3
-> 6
-> 10
```

再帰関数の出力を外でやる、みたいなことをやったりするのにも使える。

# 参考文献
 * [Programming in Lua : 9 - Coroutine](http://www.lua.org/pil/9.html)
 * [CoroutinesTutorial](http://lua-users.org/wiki/CoroutinesTutorial)
 * [Lua 5.2 Reference Manual](http://www.lua.org/manual/5.2/manual.html)
UITextField -webView no longer supported　問題

あまり解決していないので、お知恵を貸していただけたらと思います
http://stackoverflow.com/questions/19073960/uitextfield-webview-no-longer-supported
の議論を抄訳してみた感じです。

#エラー
UITextField -webView called. This method is no longer supported with the new text architecture

#stackoverflowでの議論

##質問者

テキストフィールドいくつかつかってるときこんなエラーがでました。
"UITextField -webView called. This method is no longer supported with the new text architecture"

誰かこれがなぜ出るか教えてくれませんか？
Xcode5と iOS7を使っています。

###質問者に対するコメント

わたしはこれをsingle view projectでストーリーボードにテキストフィールドを追加して、
シミュレーターを起動して、スクリーンキーボードを表示し、
「左」のキーを物理キーボードで押したときにみます。
同じようになりますか？他の人はどうですか？
 –  Mark Amery Oct 3 at 13:07

ええ、わたしも確かにそうです。同じことかな？
–  LanceJeffrey Oct 5 at 8:02

I'm not sure.
わからない。それに答えるには、私やあなたやこれを読んでいる他の人が
BluetoothのキーボードをiOSデバイスにつないで、
シミュレーターでやったのと同じことを繰り返して、そうしたときどうなるか見る必要がありますね。
残念ながらわたしはBluetoothのキーボードもiOSデバイスもいまは持ってないので、
持っているひとに試してもらうしかないですね。
–  Mark Amery Oct 5 at 9:36 

ともかく、そのメッセージは全く関係ないようにおもえる。
というのは、それが出たとき実際なにも中断してないようにみえるから。
だからそんなに気にしないようにしてるよ。
 Unlike saner languages and frameworks,
他の良識のある言語やフレームワークと違って、CocoaTouchは
ちょっと意味わからない警告やログを何も悪いことをしてないのに吐くことがある。
 As long as I'm sure that I'm not doing anything
わたしは考えられることは何もしてないと確信できたり、見えるところで何も起こってない限り、
しぶしぶこれらを無視することにしてるよ。（悲しくなるけどね）
 –  Mark Amery Oct 5 at 

##回答
###1 Answer

iOS7以前のiOSバージョンでは、UITextFieldやUITextViewは
フォーマットされたテキストを表示するため、UIWebViewに依存していた。
iOS7からは、フォーマットされたテキストはTextKitフレームワークを用いて描画され、
-webViewプロパティはつかわれなくなった。

#あんまりよくわかりませんでした。

投稿者へのコメントをよむと、「無視してよい」ということなのでしょうか。
回答に書いてあることもよくわかりませんし。。

わたしはwebviewとテキストフィールドを同時につかっているとき、
webviewのURLを取得してテキストフィールドに表示する段階でこのエラーがでました。
なぜ起こるのでしょう。。
belongs_to はvalidate_presence_of していいけど validate_uniqueness_ofしたらだめ

class Blog < ActiveRecord::Base
end

class Article < ActiveRecord::Base
  belongs_to :blog
  validates_presence_of  :blog
  validates_uniqueness_of  :blog
end

Describe Article do
    it { should belong_to :blog }
    it { should validate_presence_of :blog }
    it { should validate_uniqueness_of :blog } <= 落ちる
end

validate_presence_of は参照先テーブルまで見に行くけど
validate_uniqueness_of  は参照先テーブルまで見に行かないのが原因っぽい

ので
  validates_uniqueness_of  :blog_id
  it { should validate_uniqueness_of :blog_id }
に置換えるとOK
Rails4 + Slim + RSpec でプロジェクトをはじめる

Railsプロジェクトのはじめかた(with Slim, RSpec)

### プロジェクトの作成

~~~
mkdir ~/workspace/hoge_project
cd ~/workspace/hoge_project
~~~

### bundlerでRailsインストール

~~~
bundle init
vi Gemfile
~~~

+ Gemfile (railsの前のコメント取るだけ)

 ~~~ruby
 # A sample Gemfile
 source "https://rubygems.org"
 
 gem "rails"
 ~~~

+ bundle install

 ~~~
 bundle install --path vendor/bundle
 ~~~

### railsプロジェクトを作成

~~~
bundle exec rails new .
~~~

 + Overwrite Gemfile? (enter "h" for help) [Ynaqdh] ときかれたらYを押して続行

### プロジェクト全体の設定

+ .gitignore に以下を追加

 ~~~
/vendor/bundle
~~~

+ Gemfileに以下を追加

 ~~~ruby
 gem 'slim-rails'
 
 group :test do
   gem 'rspec'
   gem 'rspec-rails'
 end
 ~~~

+ config/application.rb
class Application < Rails::Application 内に以下を追加

 ~~~ruby
 (略)
 
 module HogeProject
     class Application < Rails::Application
       config.generators.template_engine = :slim
       config.generators.test_framework  = :rspec
       config.generators.stylesheets = false
       config.generators.javascripts = false
       config.generators.helper      = false
 
       (略)
     end
 end
 ~~~

+ Gemfileに追加したモジュールをインストール

  ~~~
bundle install
~~~

### コントローラを生成したときに slimファイルとspecファイルが生成されることを確認する

~~~
bundle exec rails g controller hoge index

#=> 以下のようにslimファイルとspecファイルがcreateされればOK
      create  app/controllers/hoge_controller.rb
       route  get "hoge/index"
      invoke  slim
      create    app/views/hoge
      create    app/views/hoge/index.html.slim
      invoke  rspec
      create    spec/controllers/hoge_controller_spec.rb
      create    spec/views/hoge
      create    spec/views/hoge/index.html.slim_spec.rb
      invoke  assets
      invoke    coffee
      invoke    scss
~~~
最近(2013/11/18)のspring(Railsのコマンドを高速化する方)について

*DEPRECATED:既に古いので[こっち](http://qiita.com/joker1007/items/82e88f88bd10aff2baf9)を見てください*

---

springについてとだけ書くと誤解を招きそうなので、説明的なタイトルにした。

Railsのコマンドを高速化するgemとして最近流行ってる[spring](https://github.com/jonleighton/spring "jonleighton/spring")というgemがあります。

ちょっと前にバージョンが上がって、rspecとかcucumberを呼び出すためのコマンドが別のgemに切り出されました。
そのため微妙に使いづらくなった気がします。

rspecとcucumberのためのサブコマンドは以下のgemで提供されています。

- [jonleighton/spring-commands-rspec](https://github.com/jonleighton/spring-commands-rspec "jonleighton/spring-commands-rspec")
- [jonleighton/spring-commands-cucumber](https://github.com/jonleighton/spring-commands-cucumber "jonleighton/spring-commands-cucumber")

READMEを読むとGemfileに書け、って書いてあるんですが、書くとspringもインストールされます。
ところが、spring本体のREADMEを読むと、`bundle exec`無しで利用するように作ってると書かれています。
別に`bundle exec`しても動かない事は無いのですが、若干起動が遅くなります。

なんか微妙に矛盾してる気がしてモヤっとするので、自分なりの方法考えました。

まずサブコマンドも含めて`gem install`で入れます。

```sh
% gem install spring spring-commands-rspec spring-commands-cucumber
```

それから`~/.spring.rb`を書きます。

```ruby
require 'spring-commands-rspec'
require 'spring-commands-cucumber'
```

とりあえずこれで、どこからspringを呼び出しても、rspecとcucumberのためのサブコマンドが使えます。

他にもプロジェクトディレクトリの`config/spring.rb`に書くとか、Gemfileに書いておいてBundlerでインストールされる`spring`本体はスルーするとか、やり方はあります。好きな方法を選んでください。
Ricty for Powerline を homebrew で簡単インストール

`ricty` フォントをインストールする時にちょっとオプションを追加するだけです。

```
brew tap sanemat/font
brew reinstall --powerline --vim-powerline ricty
```

`--powerline` オプションを付ければ https://github.com/Lokaltog/powerline のパッチを当てた `Ricty Regular for Powerline.ttf` などのフォントが、 `--vim-powerline` オプションを付ければ https://github.com/Lokaltog/vim-powerline のパッチを当てた `Ricty-Regular-Powerline.ttf` などのフォントが出来ます。

「[Powerline の方のパッチではなぜかうまく出来なかったので、 vim-powerline の方で行っている。](http://yuyunko.bitbucket.org/blog/html/2013/09/14/ricty_powerline_install.html)」という話があったので、両方対応しています。

ちなみに、フォントのインストールは出来ましたが、使い方はまだよくわかっていません。
端末で `ruby -e 'puts "Powerline \u{2B60 2B61 2B80 2B81}"'` で表示確認した程度です。
[MySQL] IN演算子を使ったときに指定した順序を保つ方法

WHERE句においてIN演算子を使うと、MySQLの気分によってソートされた順序で結果が返ってきます。

```sql:Query
SELECT id FROM sometable WHERE id IN (2,1)
```

```shell-session
+---------+
|      id |
+---------+
|       1 |
|       2 |
+---------+
2 rows in set (0.00 sec)
```


ここで、IN演算子に記載した順序を保ちたいときは

```sql:Query
SELECT id FROM sometable WHERE id IN (2,1) ORDER BY FIELD(id,2,1)
```

というふうに、FIELD関数を使ってソートするとうまくいきます。


```shell-session
+---------+
|      id |
+---------+
|       2 |
|       1 |
+---------+
2 rows in set (0.00 sec)
```
親要素からはみ出した子要素は、右側だけがスクロール表示される

ネガティブマージン（margin に負の値）や position: absolute; を指定した要素が、親要素からはみ出した場合に、横スクロールが奇妙な現われ方をしたので調べてみた。
まずは簡略化したコードを用意。

```html
<div id="wrap">
	<div class="left">左ブロック</div>
	<div class="right">右ブロック</div>
</div>
```

```css
#wrap {
	margin: 0 auto;
	width: 300px;
}
#wrap .left {
	margin-left: -100px;
}
#wrap .right {
	margin-right: -100px;
}
```

\#wrapの横幅は300pxなので、ブラウザのウインドウ幅が300px未満になったときに横スクロールが発生する。ところで、\#wrapには子要素のブロック要素が二つあり、それぞれ左右に100pxだけ、親要素からはみ出ている状態にある。
この場合、ウインドウ幅を小さくしていくと、どのように表示されるだろうか。



##はみ出した部分はスクロール幅に含まれるのか
結論からいうと、右側だけ含まれる。
文章だけでは分かりにくいので画像をどうぞ。
###ウインドウ幅が広いとき
![スクリーンショット 2013-11-18 6.45.32.png](https://qiita-image-store.s3.amazonaws.com/0/31785/d9c082b1-798c-9193-a5c7-e85855cb97f1.png)

###ウインドウ幅を狭くしたとき
![スクリーンショット 2013-11-18 6.55.50.png](https://qiita-image-store.s3.amazonaws.com/0/31785/9dab5dca-52cf-61e0-5d0d-fd8cb91fd9d4.png)
画面下部に横スクロールが出ている。
スクロールバーは左端に達しているので、赤いブロックの左にはみ出た部分は見えなくなっている。
一方で、右には若干スクロールさせる余地が残っており、青いブロックの右にはみ出した部分は表示される。

横幅の小さい端末で閲覧した時に、左右アンバランス（左側に寄っているよう）に配置されて見えてしまう。
このとき、window, document, 親要素の幅を取ってみた。

```js
console.log( $(window).width(), $(document).width(), $("#wrap").width());
// 400, 450, 300
```

###ウインドウ幅を親要素の幅と同じにしたとき
![スクリーンショット 2013-11-18 18.32.41.png](https://qiita-image-store.s3.amazonaws.com/0/31785/c91b7d69-322a-290d-52c0-863ef98d0f0e.png)
右側にはみ出た青い部分は全部見えるが、左側にはみ出た赤い部分は全く見えなくなる。
同じく、window, document, 親要素の幅を取ってみた。

```js
console.log( $(window).width(), $(document).width(), $("#wrap").width());
// 300, 400, 300
```

なぜか右側にはみ出た長さ分だけ、documentは親要素より大きくなっていて、
左側にはみ出た分は無視され（documentの幅に含まれない）るため、横スクロールで右側だけ見える。

#対処策
親要素のさらに外側をブロック要素で囲み、左右にはみ出た分も含めた幅をwidthに指定する。

```html
<div id="outer">
<div id="wrap">
	<div class="left">左ブロック</div>
	<div class="right">右ブロック</div>
</div>
</div>
```

```css
#outer {
	margin: 0 auto;
	width: 500px;
}
```

はみ出る長さを後で変えるかもしれない、というときは、
この要素の幅も変更しなければいけないので、やや気持ち悪い。


#仕様か
以下のブラウザで同じ挙動を確認。（いずれもOS X）
- Google Chrome
- Safari
- Firefox

一見奇妙な挙動なので戸惑うが、主要ブラウザで同じところを見ると仕様なのだろうと思われる。
推測に過ぎないが、テキストが長くて親要素を突き出してしまうケースを想定して、
右側にはみ出た分だけはdocumentの幅に含めるようにしたのではないだろうか。
（右から左へ記述する言語を無視していることになるが）

W3Cの文書までは確認できていない。
Mac初心者(it's Me!)に送る備忘録

### Mac 操作での備忘録 BEST4選 (Lion)

4選って少なくない？って言われても気にしないし、
今更Lion？って言われても気にしない！

なぜならまだ開発で使ってるのがLionだから!

お目汚しになるかもしれませんが、ディスられると泣くのでご注意ください。

#### locate が使えなくて 「うほ」ってなる
locate するためのデータベース化がされてないとびっくりする。
普通にLinux感覚でupdatedbとか打つと「そんなんねーよ！」って怒られる。

そうゆうときはこれだ！

```
sudo /usr/libexec/locate.updatedb
```

**はい! できた!**

#### finder でLibraryを表示させたり非表示にしたりして「うほ」ってする。
finderでの移動の時に意外と使いたいのが ~/Library これを表示させたり非表示にしたりする。

finderで見せたいとき

```
chflags nohidden ~/Library/
```

finder で見せたくないとき

```
chflags hidden ~/Library/
```

**はい! 見えた!**

#### MacでTimeマシン使ってるとローカルバックアップがでかくなって「うほ」ってなる。
なんかいつの間にか容量圧迫してね？何だこの  /Volumes/MobileBackups/Backups.backupdb って
あぁ スナップショットね。
いずれは消えるんだろうけど気持ち悪いから消す。

```
sudo tmutil disablelocal && sudo tmutil enablelocal
```

**はい! 消えた!**

#### iTerm2 でLinux感覚で Alt+. で直前の引数を持ってきて「ウホ」る。
1. iTerm2のpreferenceを開く（Command+「、」）

2. 「Keys」を開く

3. 「+Esc」にチェックを入れる (Left でも Rightでも好きな方で)

4. 「Command+Alt+.」で直前の引数を見る。

**はい!素敵!**

#### date がLinuxと違って「うほぅ」って切なくなる。
﻿Linux だと

```
date -d "1 days ago +%Y/%m/%d"
```

で昨日のを取れるがmacだとそれが出来ない。
gnuじゃないからね！

```
date -v-1d +%Y/%m/%d
```

でだす事が出来る

でも、小生はgnu date が使いたいから

```
brew install coreutils
```

**はい！ gnu date 入った！**
CSS の優先順位を無謀に調べてみた

初めましての方は初めまして。
そうでない方がいたらいいなと思いますが、はじめまして。

CSS は一つの要素に複数の定義が適用されることがありますが、そこには優先順位があります。
その順位は、 W3C によって定められています。
http://www.w3.org/TR/CSS21/cascade.html
これによると、 ```<p id=first class='second third'>something</p>``` みたいなコードがあるとすると、まず `#first` な定義が適用され、次に `.second` と `.third` が適用され、最後に `p` が適用されます。
その優先順位は優先度の高い数字から順に連結することで得られ、例えば `#first` なら 0100 、 `.second p.third` なら 0021 のようになるようです。
ここまでは少し検索すれば出てきます。
ところで、この優先順位、なんだか逆転できそうな気がします。
具体的には以下のコードです。

```html
<style>
span span span span span span span span span span.p{color: red;}
.p .p .p .p .p .p .p .p .p .p{color: blue;}
.q{font-style:italic;}
.r{font-style:normal;}
</style>
<span class=p>
<span class=p>
<span class=p>
<span class=p>
<span class=p>
<span class=p>
<span class=p>
<span class=p>
<span class=p>
<span class='p q r'>
test
</span>
</span>
</span>
</span>
</span>
</span>
</span>
</span>
</span>
</span>
```

これで、赤が 00110 の優先度、青が 00100 の優先度になって逆転するんじゃないかと。
実際にコピーして表示してみましょう。
どうですか？


当然、青でした。
が、よくよく考えると、ここは 16 進数なのではなかろうか？
具体的には以下のコードなら繰り上がりが発生するのではないか？

```html
<style>
span span span span span span span span span span span span span span span span.p{color: red;}
.p .p .p .p .p .p .p .p .p .p .p .p .p .p .p .p{color: blue;}
.q{font-style:italic;}
.r{font-style:normal;}
</style>
<span class=p>
<span class=p>
<span class=p>
<span class=p>
<span class=p>
<span class=p>
<span class=p>
<span class=p>
<span class=p>
<span class=p>
<span class=p>
<span class=p>
<span class=p>
<span class=p>
<span class=p>
<span class='p q r'>
test
</span>
</span>
</span>
</span>
</span>
</span>
</span>
</span>
</span>
</span>
</span>
</span>
</span>
</span>
</span>
</span>
```

数えるのも嫌になりますが、 `span` が 16 個のはずです。
これをコピーしてみて下さい。
どうですか？


当然、青ですよね。
もしかしたら、 2^16 個くらい書けば繰り上がるかもしれません。
符号付き整数で管理していれば、　2^15 でいけるでしょう。
もっとも、 1PB ものファイル容量になりますし、メモリはもっとひどいことになりそうです。

ともかく、これでもし 10 階層もネストした HTML を管理することになっても安心です。
そんな HTML になっていること自体、問題があるような気もしますけど。

ついでに class 指定の順番で優先度に変化があるか見てみましたが、やはり style の指定順で適用されるようです。
HTML 側のコードの順番に悩まなくて済みますね。
JPEG ファイルをファイルの最大サイズを指定してリサイズする

カレントディレクトリ以下の 1MB より大きい JPEG ファイルを探して、画像の幅を 1600px に変換し、1MB 以内にリサイズする。
JPEG ファイルの拡張子が jpg と決まっているなら、find と mogrify を使って下のようなコマンドで実現できる。

```bash
find . -type f -size +1M -name "*.jpg" -print0 | xargs -0 mogrify -geometry 1600 -define jpeg:extent=1mb
```
gitでパーミッションで差分がでまくったときに直す方法

git cloneをして git statusしてみると、なぜか大量に差分がでてくるときがあります。
内容を見てみると、cloneしたときにパーミッションが644から755に変わっていて差分がでていました。
そういうときは、以下のようにしてパーミッションを変更すると便利です。

```
git ls-files --modified | xargs chmod 644
```


ls-filesにはオプションとして、以下が設定できます。

```
--[cached|deleted|others|ignored|stage|unmerged|killed|modified]
```
Install Zabbix 1.8.18

CentOSに、Zabbix 1.8.18(2013/10/8 Stable)をインストールする。
公式サイトは一部古いため、新規に手順書を記述しました。

参考: http://www.zabbix.jp/documents/installation/install-rpm

### Install Zabbix Module

```shell-session
$ sudo yum install zabbix zabbix-agent zabbix-server zabbix-server-mysql zabbix-web zabbix-web-mysql
```

### Edit MySQL Config

````shell-session
$ vi /etc/my.cnf
```

my.cnf

```vim
[mysqld]
default-character-set=utf8
skip-character-set-client-handshake
```

### Login to MySQL CLI

````shell-session
$ mysql -uroot
mysql> create database zabbix CHARACTER SET=utf8
```

### Start MySQL

````shell-session
$ sudo service mysqld start
```

### Insert init Data

````shell-session
$ mysql -uroot zabbix < /usr/share/doc/zabbix-server-mysql-1.8.18/create/schema/mysql.sql
$ mysql -uroot zabbix < /usr/share/doc/zabbix-server-mysql-1.8.18/create/data/data.sql
$ mysql -uroot zabbix < /usr/share/doc/zabbix-server-mysql-1.8.18/create/data/images_mysql.sql
```

### Edit php.ini

### Backup php.ini

````shell-session
$ sudo cp -ip /etc/php.ini /etc/php.ini.bk
```

### Edit php.ini

````shell-session
$ sudo vi /etc/php.ini 
```

### Diff Config File

````shell-session
$ diff /etc/php.ini /etc/php.ini.bk
440c440
< max_execution_time = 300     
---
> max_execution_time = 30     
449c449
< max_input_time = 300
---
> max_input_time = 60
729c729
< post_max_size = 16M
---
> post_max_size = 8M
946c946
< date.timezone =Asia/Tokyo
---
> ;date.timezone =
```

### Start Apache

```
$ sudo service httpd start
```

Check Zabbix Server Config

```
/etc/zabbix/zabbix_server.conf
```

### Start Zabbix-Server

```
$ sudo service zabbix-server start
```

Check status

```
$ sudo service zabbix-server status
zabbix_server_mysql (pid 619800) is running...
```

### Start Zabbix Agent

Check Zabbis Agent Config

```
/etc/zabbix/zabbix_agentd.conf
```

```
$ sudo service zabbix-agent start
```

Check status

```
$ sudo service zabbix-agent status
zabbix_agentd (pid 620255 620254 620253 620252 620251 620248) is running...
```

### Login to Zabbix

```
http://192.168.121.138/zabbix/
```

Login to Default Account

```
Login name: Admin
Password: zabbix
```

### Trouble shooting

Check Zabbix Server Log

```
/var/log/zabbix/zabbix_server.log
```

Check Zabbix Agent Log

```
/var/log/zabbix/zabbix_agentd.log 
```
GooglePlusの「plusones」からRSS生成する方法

GooglePlus使ってますか？
僕はあまり使ってないんですが(^^;
Gunosyのお気に入りを何とかストックできないかと思っていたのですが、GooglePlusを利用するのが良さそうかなぁと、まずはGooglePlusをRSS化する方法を探しました。

今回は[FEED43](http://feed43.com/)を使います。
+1ではなく「投稿」の場合は [GooglePlusの「投稿」からRSS生成する方法](http://qiita.com/typista/items/ed23dc2db23bdb506561)になります。

①[Create your own feed](http://feed43.com/feed.html?action=new)をクリック
②AddressにRSS生成したいGooglePlusoneのURLを入力し「Reload」ボタンを押します。Encodingはデフォルトでutf8なので、未入力でOKです。
　＊私の場合は、https://plus.google.com/+MakotoKizuka/plusones
③STEP2の `Item (repeatable) Search Pattern*:` に

```
<td class="lMa qxc"><div class="sxc fa-U9c"><a href="{%}" title="{%}" class="Axc">{%}</a>
```

を入力し「Extract」ボタンを押します。

④STEP3の `Item Title Template*:` に ```{%3}``` を入力、 `Item Link Template*:` に ```{%1}``` を入力し「Preview」ボタンを押します。
⑤RSS完成
magit で git mv

M-x magit-[TAB] で mv も rename も出ねーぜ．ということでググってみた．

M-x vc-rename-file でいけるようだ．どうせ rm と add してるだけだからdiredでいじれとか，: で git mv すればいい，という説もあり．

http://stackoverflow.com/questions/17610365/how-to-use-git-mv-from-magit
「異星の電光掲示板」をsedで(横へな15)

「[異星の電光掲示板](http://nabetani.sakura.ne.jp/hena/ord15elebubo/)」をやってみました。他の実装は [第15回オフラインリアルタイムどう書くの問題](http://qiita.com/Nabetani/items/cba03c96d1ea55f6e861) から辿れます。

「あれ、これ置換だけでできるんじゃね？」と思ったのでsedで書いてみました。

```rb:elebubo.sed
# 16進数→2進数
s/0/0000/g
s/1/0001/g
s/2/0010/g
s/3/0011/g
s/4/0100/g
s/5/0101/g
s/6/0110/g
s/7/0111/g
s/8/1000/g
s/9/1001/g
s/a/1010/g
s/b/1011/g
s/c/1100/g
s/d/1101/g
s/e/1110/g
s/f/1111/g

# 前半(上段)の1を2に置換
:LOOP
s/1\(.*\)\//2\1\//
t LOOP

# 前半(上段)と後半(下段)のビットを並べる
s/$/:/
:LOOP2
s/^\(.\)\(.*\)\/\(.\)\(.*\):\(.*\)/\2\/\4:\5\1\3/
t LOOP2

# 文字に置換
s/202120/T/g
s/210121/U/g
s/212021/N/g
s/012120/S/g
s/202101/Z/g
s/2101/L/g
s/2120/R/g
s/0121/J/g

# ごみ掃除
s/[0:\/]//g
```
``__slots__``を使ってメモリを節約

知らなかったのでメモ。

Pythonではデフォルトではオブジェクトのインスタンスの属性はdictを使って保存している。
この保存の仕方では、実行中に新たな属性を動的に設定できたりして良い。

だけど、少数の固定な属性を持つ小さなクラスを扱うときにはdictはメモリの無駄。
こういう時は``__slots__``に属性の名前を記述することでメモリを節約したほうが良い。

```python
class Image(object):
    __slots__ = ['id', 'caption', 'url']

    def __init__(self, id, caption, url):
        self.id = id
        self.caption = caption
        self.url = url
        self._setup()

        # ... other methods ...
```

## 参考
+ http://tech.oyster.com/save-ram-with-python-slots/
+ http://docs.python.jp/2.4/ref/slots.html
Grape で共通のネームスペースを切る

`namespace` のブロックの中で `mount` すればよい。

`version` に `twitter/v1` のようなパスを書いても同じ URL が得られるが、 routes を表示したときに :version にまとめられてしまってわかりづらいので明示的に namespace を切ったほうがよい。

```app.rb
require 'grape'

module Twitter
  module API
    class V1 < Grape::API
      version 'v1'
      format :json
    end
  end
end

module Twitter
  module API
    class V1 < Grape::API
      class Users < Grape::API
        get '/users' do
          { users: 1 }
        end
      end
    end
  end
end

module Twitter
  module API
    class V1 < Grape::API
      class PublicApi < Grape::API
        get '/pub' do
          { pub: 1 }
        end
      end
    end
  end
end

module Twitter
  module API
    class V1 < Grape::API
      class PrivateApi < Grape::API
        get '/priv' do
          { priv: 1 }
        end
      end
    end
  end
end

module Twitter
  module API
    class V1 < Grape::API
      namespace :v1 do
        mount Twitter::API::V1::Users

        namespace :public do
          mount Twitter::API::V1::PublicApi
        end

        namespace :private do
          mount Twitter::API::V1::PrivateApi
        end
      end
    end
  end
end
```

```Rakefile.rb
require './app'

task :routes do
  Twitter::API::V1.routes.each do |r|
    method = r.route_method.ljust(10)
    path   = r.route_path
    puts "     #{method} #{path}"
  end
end
```

```
$ rake routes
     GET        /:version/v1/users(.:format)
     GET        /:version/v1/public/pub(.:format)
     GET        /:version/v1/private/priv(.:format)
```
knife-solo0.4.0で、元のfile_cache_pathの対応

# まとめ
**knife-solo(0.4.0)で、以下に３つの方法で元のfile_cache_pathを指定できる**
* デフォルトで、~/chef-solo
* knife solo cookを実行する時に、--provisioning-pathで指定できる
* .chef/knife.rbに、knife[:provisioning_path] = '/XXX'のように指摘できる

- - -
# 問題
__元のfile_cache_pathようなパスを指定しない場合は、各リポジトリを並行として実行すると、被ることがあった__

# 調査
### 生成と転送されたファイル
```shell
[chef-solo]$ ls -l
合計 36
drwxrwxr-x 3 ec2-user ec2-user 4096 11月 15 06:39 2013 cookbooks-1
drwxrwxr-x 3 ec2-user ec2-user 4096 11月 15 06:39 2013 cookbooks-2
drwxrwxr-x 3 ec2-user ec2-user 4096 11月 15 06:39 2013 cookbooks-3
drwxrwxr-x 2 ec2-user ec2-user 4096 11月 15 06:39 2013 data_bags
-rw-rw-r-- 1 ec2-user ec2-user 1001 11月 15 06:39 2013 dna.json
drwxrwxr-x 2 ec2-user ec2-user 4096 11月 15 06:39 2013 environments
drwxrwxr-x 2 ec2-user ec2-user 4096 11月 15 06:39 2013 nodes
drwxrwxr-x 2 ec2-user ec2-user 4096 11月 15 06:39 2013 roles
-rw------- 1 ec2-user ec2-user  750 11月 15 06:39 2013 solo.rb
```

### デフォルトで、~/chef-soloに指定する
* knife-soloを実行して、/home/ec2-user/chef-solo/下に、cookbooksと作成したsolo.rbなどファイルを置いた

### --provisioning-pathで、file_cache_pathを指定できる
```shell
$ bundle exec knife solo cook -V -F sshconfig --provisioning-path /home/ec2-user/chef_tmp ec2-XXXXXX.ap-southeast-1.compute.amazonaws.com
```

### .chef/knife.rbに指定する
```ruby
+   knife[:provisioning_path] = '/tmp/chef-solo-test'
```
knife-solo(0.4.0)の多重起動防止

# まとめ
* **knife-solo(0.4.0)は、pidで多重起動防いでるんので、安心(^v^)**
* **同時に走らせる場合は、先に走らせるchefの終了を待って、実行続く**
* メリット: 同時に、２つ以上のknife-soloを走らせることができる
- - -

# 多重起動防止用pidファイル
```shell
# view /var/chef/cache/chef-client-running.pid
24275
```

# 調査
```shell:knife-solo_1 
Running Chef...
[2013-11-15T07:59:57+00:00] INFO: Forking chef instance to converge...^M
[2013-11-15T07:59:57+00:00] DEBUG: Fork successful. Waiting for new chef pid: 24275^M
[2013-11-15T07:59:57+00:00] DEBUG: Forked instance now converging^M
[2013-11-15T07:59:57+00:00] WARN: Chef client 24272 is running, will wait for it to finish and then run.^M
Starting Chef Client, version 11.8.0^[[0m^M
[2013-11-15T08:00:04+00:00] INFO: *** Chef 11.8.0 ***^M
[2013-11-15T08:00:04+00:00] INFO: Chef-client pid: 24275^M
......
```

```shell:knife-solo_2
Running Chef...
[2013-11-15T07:59:56+00:00] INFO: Forking chef instance to converge...^M
[2013-11-15T07:59:56+00:00] DEBUG: Fork successful. Waiting for new chef pid: 24272^M
[2013-11-15T07:59:56+00:00] DEBUG: Forked instance now converging^M
Starting Chef Client, version 11.8.0^[[0m^M
[2013-11-15T07:59:57+00:00] INFO: *** Chef 11.8.0 ***^M
[2013-11-15T07:59:57+00:00] INFO: Chef-client pid: 24272^M
```

### 説明
* pidで多重起動防いでいる
* Chef client 24272の終了を待っていた
* Chef client 24272が終わって、Chef client 24275の実行が続く
iPhoneでプロキシサーバーの例外設定をする


結論から言ってしまうと出来ません。

そこで.pacファイルを使用します。
.pacファイルはProxy auto-configと言ってプロキシ設定を自動で行うための設定ファイルです。

下記のような.pacファイルを作成し、アクセスできる場所へ配置します。
※もちろんプロキシ設定前なのでプロキシを経由せずにアクセス出来る場所である必要があります。

```
function FindProxyForURL(url, host)
{
  //Access images directly
  if (host == "image.xxxxxx.co.jp") return "DIRECT";
  if (host == "thumbnail.xxxxxx.co.jp") return "DIRECT";
  
  //For everything else use stg proxy
  return "PROXY [プロキシサーバー]";
}
```

あとはiPhoneのWi-Fi設定の「HTTPプロキシ」のところで「自動」を選択して.pacファイルを配置したアドレスを入力すればOKです。
fs.existsはオワコン？

ある日、node.js ver.0.10のドキュメントを読んでいたのですが。

http://nodejs.jp/nodejs.org_ja/docs/v0.10/api/fs.html#fs_fs_exists_path_callback より

```text:quote
fs.exists() は時代錯誤で、存在する理由は歴史的経緯だけです。 あなたのコードでこれを使うべき理由があってはいけません。

とりわけ、ファイルをオープンする前に存在をチェックするのは、 あなたのコードを競合条件に対して脆弱にするアンチパターンです: fs.exists() と fs.open() の間に別のプロセスがファイルを 削除するかもしれません。 単純にファイルをオープンして、それが存在しない時はエラーを処理してください。
```

いつの間にか`fs.exists`は使うべきでない、と追記されていました。
自身のコードでも結構使ってたような……というわけで自身で書いたコードで`fs.exists`を使用している箇所を修正したのでした。

- [mktemp - 0a0f267](https://github.com/sasaplus1/mktemp/commit/0a0f26754705e9bf1b8ccea0985b9c2dfb8eda41)

```js
fs.exists(filepath, function(exists) {
  if (exists) {
    // 存在した場合
  } else {
    // 存在していない場合
  }
});
```

```js
fs.open(filepath, 'ax+', 384 /*=0600*/, function(err, fd) {
  if (err) {
    // 存在していない場合
    // 行いたい処理によって
    // (err.code === 'EEXISTS') && ...
    // など、エラー内容を見ると良いかも
  }

  // 存在した場合

  fd && fs.close(fd, function(err) {
  });
});
```

大体こんな感じになるでしょうか。

---

ちなみに、`err.errno`は非推奨のプロパティで、`err.code`を使った方が良いようです。知らなかった……

- https://github.com/joyent/node/issues/2211#issuecomment-2896181
SRM146 div2 250


##問題文概略
1~6の目が出るサイコロを5回投げる。
出た目がポイントとなり、目が被ったらその目の数を足しあわせてポイントとする。
ポイントの最大値を求めよ。
例）
1,2,3,5,6 →ポイントは6
1,4,4,3,5 →ポイントは4+4=8

## 書いたコード

```
public class YahtzeeScore {
    public int maxPoints(int[] toss) {
    	//どの目が何回出たかを入れる配列
    	int a[]=new int[6];
    	//ポイント
    	int max=0;
    	//どの目が何回出たかを配列に入れる
    	for(int i=0; i<toss.length; i++) {
    		a[toss[i]-1]++;
    	}
    	//上の配列から最大点数を計算
    	for (int k=0; k<6; k++){
    		if(max<a[k]*(k+1) == true) {
    			max = a[k]*(k+1);
    		}
    	}
    	return max;
    }
}
```
RoboVMでxibを使う方法

#はじめに
画面レイアウトをコードで記述するのは大変です。そこでInterfaceBuilderで作ったレイアウトをRoboVMから使ってみます。
参考にしたのはこちらです。
http://blog.robovm.org/2013/02/robovm-interface-builder-integration.html

#Viewを作成
Xcode5でViewを作成します。
この時、storyboardではなくxib形式で作成します。
メニューのFile-New-File..でファイルを新規作成します。
Choose a template for your new file: というダイアログが出たら、左側で-iOS-UserInterfaceを選択し、右側のViewを選んでNextを押します。
ファイル名を入力して出来上がり。

#部品を配置
作ったxibファイルに部品を配置します。
#
#クラスを作成
UIViewControllerを継承したクラスを作成し、配置した部品を関連付けます。

#xibファイルをコンパイル
ibtoolコマンドでxibファイルをコンパイルし、nib形式のファイルを作成します。

```
ibtool --errors --warnings --notices --output-format human-readable-text --compile TestViewController.nib MyFourthApp/TestViewController.xib
```

#mikumikustudio-gdxプロジェクトにコピー
出来たnibファイルをプロジェクトにコピーします。

```
cp TestViewController.xib mikumikustudio-gdx/ios/src/main/resources
```

#JavaでTestViewControllerクラスを作成する。

```java
@CustomClass("TestViewController")
public class TestViewController extends UIViewController{
    UILabel label;
    public TestViewController() {
        super("TestViewController", null);
    }
    private void sayHello(UIButton button) {
        label.setText("Hello!!");
    }

    @SuppressWarnings("unused")
    @Callback
    @BindSelector("click:")
    private static void sayHello(TestViewController self, Selector sel, UIButton button) {
        self.sayHello(button);
    }
    @SuppressWarnings("unused")
    @Callback
    @BindSelector("setLabel:")
    @TypeEncoding("v@:@")
    private static void setLabel(TestViewController self, Selector sel, UILabel label) {
        self.label = label;
    }
    @SuppressWarnings("unused")
    @Callback
    @BindSelector("label")
    private static UILabel getLabel(TestViewController self, Selector sel) {
        return self.label;
    }
}
```

この例ではUILabel１個とUIButton１個を配置しています。
UIButtonが押されたらUILabelにHello!!とセットしています。
@CustomClassアノテーションでObjective CのTestViewControllerクラスを自動生成しています。

注意点としては、propertyのメソッドに@TypeEncoding("v@:@")を付ける事です。
関連スレッド: https://groups.google.com/d/msg/robovm/aYVfjS2Y32s/3RS7drHQ0I0J

#終わりに
RoboVMからxibファイルを使う方法を解説しました。
プロパティの作成など、ちょっと面倒くさいのが難点です。
ただこれは単純作業ですので将来的にはxibからJavaのクラスを自動生成するようにすれば解決出来るかもしれません。実際、RoboVMに標準で付いているcocoatouchのラッパークラスは雛形を自動生成して作っているようです。
RoboVMでUIを作る方法としては他にJavaFXを使う方法もあります。こちらはiOS以外でも動きますので、もしかするとこちらの方が良いかもしれません。
ソフトバンクの請求書を取得

```ruby:softbank.rb:
#!/usr/bin/env ruby
#coding: utf-8
require 'rubygems' if RUBY_VERSION.to_f < 1.9
require 'pp'


module BillScraper

	class MySoftbank
		attr_accessor :m
		def initialize( id=nil, password=nil )
			require 'mechanize'
			@m = Mechanize.new
			@@id = id
			@@password = password
		end
		def go_to_top
			m.get "https://my.softbank.jp/msb/d/top"
		end

		def login(id=nil,password=nil)
			id ||= @@id
			password ||= @@password
			m.get 'https://my.softbank.jp/msb/d/top'
			m.submit m.page.forms[0], m.page.forms[0].buttons[0]
			m.page.forms[0].fields[0].value= id
			m.page.forms[0].fields[1].value= password
			m.page.forms[0].submit
		end
		def latest_meisai
			@m.page.links_with( :text=>"ご請求書(内訳)の確認").first.click
			#リダイレクト・クッションページ
			@m.page.forms[0].submit
			#請求内訳
			year_month =  @m.page.search('form p.current span').text.strip #取得可能な請求書

			#一括請求
			button = @m.page.forms[0].buttons_with( :name=> "doPrintSbmAll").first
			form   = @m.page.forms[0]
			@m.submit form, button
			return { "file_name"=>"ソフトバンク請求書-#{year_month}.pdf", "body"=>m.page.body}
		end
		def latest_meisai_for_this_number
			@m.page.links_with( :text=>"ご請求書(内訳)の確認").first.click
			#リダイレクト・クッションページ
			@m.page.forms[0].submit
			#請求内訳
			year_month =  @m.page.search('form p.current span').text.strip #取得可能な請求書

			#一括請求
			#button = @m.page.forms[0].buttons_with( :name=> "doPrintMsn").first   #電話番号
			button = @m.page.forms[0].buttons_with( :name=> "doPrintSbmAll").first
			form   = @m.page.forms[0]
			@m.submit form, button
			return { "file_name"=>"ソフトバンク請求書-#{year_month}.pdf", "body"=>m.page.body}
		end
	end

end

if $0 == __FILE__ then

# my_soft_bank = BillScraper::MySoftbank.new "0809999999","password"
# my_soft_bank.login
# ret = my_soft_bank.latest_meisai_for_this_number
# open(ret["file_name"], "w"){|f| f.print ret["body"] }

```

##エントリはこっち。
http://takuya-1st.hatenablog.jp/entry/2013/11/18/042215
auの請求書を取得

au の請求書をログインしてPDFで取得します。

```au.rb
#!/usr/bin/env ruby
#coding:utf-8
$KCODE = 'u'        if  RUBY_VERSION.to_f < 1.9
require 'rubygems'  if RUBY_VERSION.to_f < 1.9


module BillScraper

  #########################
  ##　サポートIDでログインが前提
  ## main_phone_number は ハイフン区切り必須
  ## out_path = BillScraper::au_current_month("takuyaXXXX", "password", "090-xXXX-9876" ,"1234");
  ##                                          ↑サポートID
  ##  au IDでのログインは電話番号がコロコロ変わる古事記には不要です。
  ##
  def au_current_month( id, password, main_phone_number ,  passcode )
    #pdftk は必須
    BillScraper::check_pdftk_exists?


    #クラスにするまでもないので、手続き型で行きます。

    #mechanize 初期化
    require "mechanize"
    m = Mechanize.new
    m.user_agent_alias = 'Windows IE 7'

    #ログインページ開く
    m.get "https://cs.kddi.com/support/login.html"
    #ログイン
    m.page.forms[1].field_with(:name=>"UserID").value  = id
    m.page.forms[1].field_with(:name=>"Password").value = password
    m.page.forms[1].submit

    #ページ遷移（ページを順番にたどる必要がある時に必須)
    # m.page.forms_with( :name=>/menu/i).first.fields_with(:id=>/selMenuKind/i).first.value= 'au_seikyu_seikyusho'
    # m.page.forms_with( :name=>/menu/i).first.submit


    #　料金表示されるメニューを表示する。

    m.page.forms_with(:name=>"selectTelAndServiceForm").first.fields_with( :name=>/menu/i).first.value = 1
    m.page.forms_with(:name=>"selectTelAndServiceForm").first.submit

    # 主回線の電話番号を選択
    fn = m.page.search("//td[text()='#{main_phone_number}']").first.parent().search("form").attr('name').to_s
    m.page.forms_with( :name => /#{fn}/).first.submit

    # 主回線の電話番号のパスコードを入れる
    m.page.forms.first.field_with(:name=>"auServicePassword").value = passcode
    m.page.forms.first.submit

    #ページ遷移
    m.page.body = m.page.body.toutf8   unless RUBY_VERSION.to_f < 1.9 # エンコード関連
    m.page.forms.first.submit

    #ページ遷移
    m.page.body = m.page.body.toutf8    unless RUBY_VERSION.to_f < 1.9 # エンコード関連

    # PDFを保存する。
    #   1:料金概要
    #   2:料金詳細 内訳
    #   最後に、概要＋詳細　▶　一枚PDFへ合成
    name = m.page.search("p.seikyu.mb10").text.strip.gsub(/\s+/, "")
    m.page.form_with( :name=>/download/i).submit
    gaiyou_path = "au-概要#{name}.pdf"
    m.page.save gaiyou_path


    m.back()
    m.page.form_with(:name => /details/).submit
    #m.page.body = m.page.body.toutf8



    m.page.form_with(:name => /pdf/).field_with(:name => "K2300A").value = 1
    m.page.form_with(:name => /pdf/).submit
    utiwake_path = "au-内訳#{name}.pdf"
    m.page.save utiwake_path


    out_path = "au-#{name}.pdf"

    `pdftk "#{gaiyou_path}"  "#{utiwake_path}" cat output "#{out_path}" `

    File.unlink gaiyou_path
    File.unlink utiwake_path

    return out_path
  end
  module_function :au_current_month

end
```
dokku で root ドメインをデプロイする

dokku 便利だね。Digital Ocian に Ubuntu 入れて、Docker & dokku で自分だけの Heroku ライクな環境でサービスを作るのは良いものだ。

そこで、いよいよサービスインという場面ドメインをあてる作業を行う。
まず、Digital Ocean の IP へ DNS を切り替えておく。

例えば、example.com としよう。
dev.example.com と、example.com のデプロイを説明。
だが、ルートドメインがうまくいかない事があったので、こちらで解決。


## サブドメイン (dev.example.com) をデプロイする
```bash
$ git remote add dev-hoge dokku@example.com:dev
$ git push dev-hoge master
:
:
remote: -----> Application deployed:
remote:           http://dev.example.com
```


## ルートドメイン (example.com) をデプロイする
```bash
$ git remote add hoge dokku@example.com:example.com
$ git push hoge master
:
:
remote: -----> Application deployed:
remote:           http://example.com
```

## 注目すべきは remote add の場面
```bash
$ git remote add hoge dokku@[ルートドメイン]:[ルートドメイン]
```

では、よいサービスインを！
FacebookChatAPIを利用してRailsからMessageを送る方法

##使うGem
使うGemは`facebook_chat`(https://github.com/tkengo/facebook_chat)

```Gemfile
gem facebook_chat　　　//一行追加
```

##facebookアプリの権限追加
FacebookDeveloprsにいってアプリの設定を変更
左のメニューの`設定>権限`で`xmpp_login`を追加する。

![スクリーンショット 2013-11-18 2.30.02.png](https://qiita-image-store.s3.amazonaws.com/0/9061/2776173f-5977-32a2-a127-1c339c78b44f.png "スクリーンショット 2013-11-18 2.30.02.png")

##設定
下記のファイルを追加

```config/initializers/facebook_chat.rb
require 'facebook_chat'

FacebookChat::Client.configure do |config|
  config.api_key = "544248735657544"
  config.host = "chat.facebook.com"
end
```

ログインで使ってる設定ファイルに`xmpp_login`を追加する。

```config/environments/development.rb
  Devise.setup do |config|
    config.omniauth :facebook, 'App ID', 'App Secret', :scope => 'xmpp_login', :display => 'popup'
  end
```

##送信するコード

```
access_token = '****' # message sender's facebook access token
cilent = FacebookChat::Client.new(access_token)

to = '1000000000' # facebook user id you want to send a message
client.send(to, "hey, what's up?")
```

##注意
facebookのドキュメントに書いてあります。URLはユーザーが入力したのでしかダメらしいのでアプリの招待などに使うのはちょっと厳しそう。

![スクリーンショット 2013-11-18 2.42.25.png](https://qiita-image-store.s3.amazonaws.com/0/9061/05b2d984-a109-9e1a-eb7c-7ac8b981dc9b.png "スクリーンショット 2013-11-18 2.42.25.png")

結構、削除されることが多いです(汗

##参考
facebookChatAPI: https://developers.facebook.com/docs/chat/
facebook_chat作者のブログ: http://tkengo.github.io/blog/2013/10/23/send-chat-message-to-facebook/
PDOで明らかなエラー時に例外を投げてくれない時

##明らかな構文ミスでもPDOExceptionを投げてくれない場合
###PDOのエラーモードを、例外を投げてくれるように予め設定しておく
```php
<?php

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
```

**※具体的なモード内容**

- [エラーおよびエラー処理](http://www.php.net/manual/ja/pdo.error-handling.php)


**※そもそもMySQL側で変換されてる場合はエラーにもならないのでその点も注意**

- [MySQLの自動変換が厄介な時の設定](http://qiita.com/yukix/items/c9ad1e38bb98b7c924f3)
Goとmavericksの面倒を解決する


gozmq使おうと思ったら、

```sh:
$ go get github.com/alecthomas/gozmq
# github.com/alecthomas/gozmq
clang: error: argument unused during compilation: '-fno-eliminate-unused-debug-types'
```
と怒られた。

色々試行錯誤してたんだけども、mavericks+Xcode5だとgcc周りが面倒なことになってて、goの1.1.2だと上手く動かない模様。

uninstallしたり色々試してみたんだけれども、この問題、goの1.2だと解決しているようなので、クリティカルなシステムで使ってないとかであれば

```sh:
$ brew uninstall go
$ brew install go --devel
$ go get github.com/alecthomas/gozmq
```

というズボラな解決法でなんとかなる。
同テーブルのサブクエリで値をUPDATEする

##同テーブルのとあるカラムの最大+1の値で違うレコードを更新
###エラー
```mysql
UPDATE hoge_tbl SET val1 = (SELECT MAX(val1)+1 FROM hoge_tbl) WHERE val2 = 10;
```
###エラー無し
```mysql
UPDATE hoge_tbl, (SELECT MAX(val1)+1 AS MAX FROM hoge_tbl) A set val1 = A.MAX WHERE val2 = 10;
```
OS X の ls コマンド結果を色付きで見やすくする

ホームディレクトリ直下に `.bash_profile` というファイルを作成して、alias を作成します。
（既に存在する場合は追記）

```bash
$ vim ~/.bash_profile
```

```bash:~/.bash_profile
alias ls='ls -GF'
```

`.bash_profile` 編集後、 `source` コマンドで設定を読み直すと、ls コマンド結果がカラー表示されるようになります。

```bash
$ source ~/.bash_profile
```
同テーブルをサブクエリとして参照した場合のFROM句無しのINSERT

##値のバインドとサブクエリのみで直接のFROM句は無し
```mysql
INSERT INTO hoge_tbl (val1, val2, val3, val4) SELECT 1, 'hoge', 'hogehoge', (SELECT MAX(`val4`) FROM hoge_tbl WHERE val1 = 2);
```
upxをビルドする。

UPXという実行ファイル圧縮環境がある。
諸般の事情でこれをビルドする機会があったのだが、今後もビルドするかもしれないので、とりあえずメモ。

# 普通のビルド
ここらへんを用意する。
## Ubuntu 12.04
ちなみに、同じ手順でcygwinでもやったけどできた。
cygwinはdev環境が全てインストールされた状態。

## UCL 1.0.3
圧縮解凍ライブラリ。
ここで入手する(http://www.oberhumer.com/opensource/ucl/download/)

```:ubuntu
./configure
make install
```

## zlib
zlibも使うオプションがあって、ビルドには必要なので用意する。
ubuntuだとaptから入手できたけど、cygwinの場合はサイトから落としてきてmakeしないといけなかった。(http://www.zlib.net/)

```:ubuntu
apt-get install zlib1g-dev
```

## UPX 3.91(source code)
これが本体。
ここで入手する(http://upx.sourceforge.net/#downloadupx)

```:ubuntu
make all
```

# スタブのビルド
先の分で普通にビルドできるが、stub(パック済みEXEにつく解凍プログラム)はビルドされていない。これはビルド済みバイナリ相当のモノがsrc/stubに配置されていて、基本的に操作不要になっている。
ただし、stubに改造を加える場合(src/stub/src/*)はこれらもビルドと変換をしなければならない。
＃ ちなみに、perlとpythonも必要になる。

## UPX-TOOLS
クロスコンパイラ環境的な何からしい。他環境向けstubもビルドされるので、そこら辺に対して対応するためのもの。
ここで入手する(http://sourceforge.net/projects/upx/files/upx-tools/20130920/)

READMEを読むと古いバージョンを落とすようにURLが書かれているが、しれっと新しいバージョンが置いてある。どうもこちらが正解っぽい。
解凍してパスの通った所にディレクトリごとコピーする。あまりずっと使うものじゃないので、適当な場所に落として一時的にPATHを変えるのが良いか。これでsrc/stubの下で

```:ubuntu
make all
```

ちなみに、stubのビルドは今の所cygwinでは上手くいっていない。
たぶんWin版だけMakefileから切り出すとか、工夫しないといけないんじゃないかと思う。
MySQLの自動変換が厄介な時の設定

##状況
親切なのか不親切なのか、カラムの型と異なったデータを挿入してもそれとなく丸めたり切ったりしてwarningを吐きつつもinsertやupdateに成功しちゃったりしてて困っている。

##例えば
tinyintにそれ以上の値を入れたら丸めてくれたり、サイズ以上の文字列を入れるとその分カットして入れてくれたり・・・

##対策
上記のようなものに関しては、

```mysql
SET SESSION sql_mode='TRADITIONAL';
```

こんな感じでsql_modeを設定することで厳密にエラーとしてみてくれるようになります。
環境に応じて、SESSIONでなくGLOBALにしたり、cnfに書いたりすれば良いかと思います。
型チェックを厳格にするのはこれでいいと思いますが、他にも色々と細かく制御可能なので、
詳しくは
[4.2.6. SQL モード](http://dev.mysql.com/doc/refman/5.1/ja/server-sql-mode.html)
ココらへんを。
XcodeのCreated byとCopyrightの日付を英語表記にする

日本語環境のXcodeで自動生成されるファイルヘッダ

```objc
//
//  AppDelegate.h
//  SampleApp
//
//  Created by Yusuke Watanabe on 2013/11/18.
//  Copyright (c) 2013年 Yusuke Watanabe. All rights reserved.
//
```

Copyrightの「年」が目立つ。

日付を英語表記（ここではアメリカ式）に変更するには、
システム言語を英語に変更するか、AppleLocaleオプションを付けてXcodeを起動する。

```bash
/Applications/Xcode.app/Contents/MacOS/Xcode -AppleLocale "en_US"
```

```objc
//
//  AppDelegate.h
//  SampleApp
//
//  Created by Yusuke Watanabe on 11/18/13.
//  Copyright (c) 2013 Yusuke Watanabe. All rights reserved.
//
```

ちなみにen_GBだとこんな感じ。

```objc
//  Created by Yusuke Watanabe on 18/11/2013.
```
Wordpress のカスタム投稿で 404 Not found が出る場合

カスタム投稿タイプのページが 404 Not found になった場合は、
flush_rewrite_rules( false ); を入れると解消できるようです。

参考：http://lab.webarton.com/archives/180

Custom post type UI を利用している場合は、
Custom post type UI で追加したカスタム投稿を
一旦編集状態にして保存し直すことでなおったりするようです。
GCSのFileをImageServiceで扱う


GAEには画像を編集することができる[ImageService](https://developers.google.com/appengine/docs/java/images/)があります。
そのImageServiceでGCSのFileを扱うやり方の記事です。

GCSの操作などについては、以下を参照してください。

* [GAEでGCSのファイルを扱う](http://qiita.com/sinmetal/items/20fc9ae601161291b16e)
* [GAE/jでファイルを扱う Part1](http://qiita.com/sinmetal/items/6ed7ec012af030f3e8fa)
* [GAE/jでファイルを扱う Part2](http://qiita.com/sinmetal/items/7d2617001494cd204255)

# ImageServiceを利用した画像のURLを発行
GCSにあるファイルをImageServiceで扱うためには、ServingUrlOptionsにwithGoogleStorageFileNameを指定します。
その時に、以下のようにGCSのFilePathを指定します。

```
/gs/{{your gcs bucket name}}/{{file name}}
```

```Java
public class ImageController extends Controller {

	@Override
	protected Navigation run() throws Exception {
		// "/gs/{{your gcs bucket name}}/{{file name}}"
		final String fileName = asString("fileName");

		ImagesService imagesService = ImagesServiceFactory.getImagesService();
		ServingUrlOptions options = ServingUrlOptions.Builder.withGoogleStorageFileName(fileName);
		String imageUrl = imagesService.getServingUrl(options);
		response.getWriter().write(imageUrl);

		return null;
	}
}
```

# ImageServiceを利用した場合の注意点
## キャッシュ
ImageService.getServingUrl()を利用した場合、Serverにキャッシュがあるような動きをします。
例えば、GCSのファイルを差し替えても、丸一日ぐらいは更新されません。
キャッシュを削除する術もないので、すぐにファイルを更新したい場合は、GCSにファイルを新しく保存して、再度ImageSErvice.getServingUrl()を実行し、URLごと差し替えてしまう必要があります。

GCSのファイルへの参照はあるようで、ImageServiceを利用してResizeなどを行っている場合は、キャッシュが効かずに、最新のファイルをResizeして返してきます。

# ImageServiceを使うかどうか
Blobstoreに保存したファイルを、ImageSerivice.getServingUrl()で読み込んだ場合、課金対象になっていなかったので、お金を節約したい時に便利でした。
GCSを利用した場合、どうなるのかは試してないので、今のところ謎です。

もし、そこに課金が発生するなら、Resizeなどをしない限り、ImageServiceを使う利点は無いのかもしれません。
GCSのファイルを直接読んだ方が良いですね。
キャッシュがあるので、たぶん課金は無いんじゃないかなとは思っているのだけど。

#Github
https://github.com/sinmetal/gcs-client-library-sample/blob/master/src/main/java/org/sinmetal/gcsexample/controller/ImageController.java