OmniAICreator/Qiita-1.07M huggingface dataset:
スマホでMapを開く便利なURL (iOS,Android共通)

#スマホでは使いにくい、WEB版『Google Maps』
スマホのブラウザでGoogle Mapsを表示すると、

* 地図領域が狭い
* 不可解なメニュー群

に辟易する方も多いと思います。
しかし、AndroidやらiOSやらに対応するURLを書こうと思うと、
**テンプレートやJavascriptでif文書いたり**と、ビミョーに面倒です。


# iOSとAndroidで使える共通のURL
で、以下のURLを使うと、AndroidとiPhoneの両方で、
いい感じの遷移ができるようです。

```html:緯度経度で
http://maps.apple.com/?q=51.507269,-0.127695
```

```html:住所で
http://maps.apple.com/?q=%E6%9D%B1%E4%BA%AC%E9%83%BD%E5%8D%83%E4%BB%A3%E7%94%B0%E5%8C%BA%E5%8D%83%E4%BB%A3%E7%94%B0%EF%BC%91%E2%88%92%EF%BC%91
```

1. ブラウザが開く
2. マップアプリへの遷移が促される

**むむー、理想とまでは行かないまでも、求めていた結果に近い！！**

# どの程度の端末で使えるのか？
試された方は、ぜひフィードバックください！

# 素朴な疑問
気を利かせたのがAppleなのかGoogleなのかは、気になる所ですね！
いずれにしても、Good Jobな感じです。

---
## 利用イメージ
![IMG_1917.jpg](https://qiita-image-store.s3.amazonaws.com/0/50037/39d8d12a-efdd-3093-e963-8e83e280365b.jpeg)

![Screenshot_2014-07-28-15-39-12.png](https://qiita-image-store.s3.amazonaws.com/0/50037/04a56d10-d433-ae8e-8834-11444781fcba.png)
画像データを刺しゅうデータに変換する


# 概要

- イラレで作成した画像データを刺しゅうデータに変換した際の手順のメモです。

- 使ったソフト・機材
	+ brotherの刺繍データ作成ソフト[「刺しゅうPRO NEXT」]
(http://www.brother.co.jp/product/hsm/embropc/shishu_pro_next/)
	+ ジャノメミシン[「Hyper Craft 900」](http://www.janome.co.jp/products/sewing_machine/shisyu/hc900.html)


- 以下の手順は、とりあえずうまく行った例なので、もっといい方法があるかもしれません。

# 手順

##1. 画像作成ソフト（イラレ等）での作業
**画像データを「刺しゅうPRO NEXT」で読み込めるファイル形式に書き出します**

- ファイル形式はbmp,gif,tif,jpg,eps...などでOK。
- epsの場合ベクトルデータではなくプレビュー情報を読み込むらしいので、プレビューありで保存する必要がありそう
- **解像度高め(300ppiなど）で書き出す。**でないと、手順2の「輪郭データステージ」で大きく輪郭が崩れます。

##2. 刺しゅうPRO NEXT「デザインセンター」での作業
**手順1で作成したファイルを読み込んで、刺しゅうデータを作成します**

- 「原画ステージ」→「輪郭線画ステージ」→「輪郭データステージ」→「縫い方設定ステージ」の順で設定していきます。
- 詳細な設定手順は[ここの説明](http://osumibrotherweblog.blogspot.jp/2012/04/pro-next_07.html)がわかりやすいです。
- 各ステージの設定例
	- 原画ステージ： **「境界線」にのみチェックを入れる。プレビューをみながら色数を減らす。**
	- 輪郭線画ステージ： **デフォルト**
	- 輪郭データステージ： **崩れた部分を線ツール等で修正**
（輪郭が大幅に崩れる場合は手順１の解像度をチェック）
	- 縫い方設定ステージ： **色を設定する。輪郭線を縫いたくない場合は「ツール【線（部分）】」で線を削除（もしくは線縫いオフ）する。**

- 刺しゅうは元データより間隔が狭くなるため、輪郭線は縫わないほうがイメージに近い刺しゅうになるかと思います。

- 設定して保存すると、「.pelファイル」（輪郭線画データ）、「.pemファイル」（輪郭データ）が生成されます。

##3.刺しゅうPRO NEXT「レイアウトセンター」での作業
**手順2で作成したデータをミシンに合わせたデータに変換します**

- デザインセンターで「レイアウトセンターへ」のボタンをクリックすると、手順2で作成したデータがレイアウトセンターに転送されます。

- ファイルメニューから「データ書き出し...」を選択し、ジャノメミシン用ファイル形式の「.jef」で書き出します。

##4.ミシンでの作業

**手順3で書き出した.jefファイルをミシンにコピーします**

- USBメモリ等を使ってPCからミシンにデータをコピーします。
- 初めて使うUSBメモリの場合、ミシンとデータをやりとりするためのフォルダを作ります。フォルダは、ミシンにUSBメモリを接続すると自動生成されます（生成されない場合はミシンの電源ON/OFFしてみる）。
- 「EMB」およびその下に「Embf」という名前のフォルダが生成されます。
- **PCから「Embf」フォルダ内に.jefファイルをコピー**し、USBメモリをミシンに接続します。
- ミシンを刺しゅうモードにして、フォルダアイコンをタッチすると、保存した.jefファイルがみえるはずです。選択して、データ転送完了です。
iOSのApp Iconのサイズ・指定方法

全体像が見えていなかったため、調べてメモしておきます。どのサイズをどの環境で用意する必要があり、それがどうやって指定されるかまとめておきます。
間違いがある場合はご指摘ください。

# アイコンタイプ、デバイス、OS毎のサイズ
以下のサイズでアイコンを作成する(Retina, 非Retina)。Retinaはファイル名に@x2をつける。 RetinaはiPhone4以降で使用。

+ Home Screen (iPhone, iPod Touch) [iOS7~] 
 + 120 x 120, 60 x 60
+ Home Screen (iPhone, iPod Touch) [~iOS6]
 + 114 x 114, 57 x 57
+ Home Screen (iPad) [iOS7~]
 + 152 x 152, 76 x 76
+ Home Screen (iPad) [~iOS6] 
 + 154 x 154, 77 x 77
+ Spotlight (iPhone, iPod Touch, iPad) [iOS7~]
 + 80 x 80, 40 x 40
+ Setting (iPhone, iPod Touch, iPad) [iOS7~]
 + 58 x 58, 29 x 29
+ Spotlight & Setting (iPhone, iPod Touch) [~iOS6]
 + 58 x 58, 29 x 29 
+ Spotlight & Setting (iPad) [~iOS6]
 + 100 x 100, 50 x 50 
+ App Store
 + 1024 x 1024, 512 x 512

# アイコン画像の指定方法
Info.plistへ以下の項目を追加して、アイコンのファイルリストを入れる

+ CFBundleIconFile
 + iPhone OS 3.1.3でこれがあった場合は優先して参照される。57 x 57のアイコンが指定できる。
+ CFBundleIconFiles
 + iOS 3.2以降で、対応サイズのアイコンファイルがそれぞれ参照される。
+ CFBundleIcons>CFBundlePrimaryIcon>CFBundleIconFiles
 + iOS 5.0以降でこれがあった場合は優先的に使われる。対応サイズのアイコンファイルがそれぞれ参照される。

iPhone OS 3.1.3より前では、パッケージ内に以下の名前で直接ファイルを置く

+ Icon.png
 + 57x57サイズのアイコンがこの名前で参照される。その他 Icon-72.png(iPad Home Screen) Icon-Small.png(iPhone Spotlight&Setting), Icon-Small-50.png(iPad Spotlight&Setting) を指定

# 参考資料
+ [Core Foundation Keys](https://developer.apple.com/library/mac/documentation/general/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html)
+ [App-Related Resources](https://developer.apple.com/library/ios/documentation/iphone/conceptual/iphoneosprogrammingguide/App-RelatedResources/App-RelatedResources.html)
+ [App Icon](https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/MobileHIG/AppIcons.html#//apple_ref/doc/uid/TP40006556-CH19-SW1)
imgタグ以外にopacityかけても、IEじゃ動かないとき

どうもハスレイアウトがfalseのせいらしいので、zoomを追加するといいみたいです。

```css
selecter:hover {
    opacity:0.7;
    filter: alpha(opacity=70);
    -moz-opacity:0.7;
    box-shadow: #000 0 0 0; /* firefox bugfix */
    zoom: 1; /* IE bugfix */
}
```

参考：http://blog1.erp2py.com/2011/04/cssopacityie.html
Ansibleメモ

sshログインの際にパスワード認証を必要とする場合
ansible-playbookの実行時に-kオプション(--ask-pass)をつけるのを忘れるので、-kオプションなしでも対話式に入力出来るようにしたメモ

- vars_promptを使って対話式に入力をする

```sh:site.yml
- hosts: all
  gather_facts: no
  remote_user: root
  sudo: False
  vars_prompt:
    - name: "ansible_ssh_pass"
      prompt: "Enter Root User Password"
      private: yes

  roles:
    - common
```

実行してみる。

```sh:実行結果
$ ansible-playbook -i stage site.yml
Enter Root User Password:

PLAY [all] ********************************************************************

TASK: [common | User add] 
- 以下省略 -
```

-kオプションなしに上手く動いた。
eclipseでプロジェクトごとに文字コードを設定する方法

ネットのサンプルコードが文字化けして困ったのでいろいろやってみた結果。
文字コードを設定出来る箇所が複数あり、わかりづらかったのでメモしておく。
①ワークスペースごとの設定
②コンテンツ・タイプごとの設定
③プロジェクトごとの設定

##①ワークスペースごとの設定
当該ワークスペースの文字コードはここで設定する。
[ウィンドウ] → [設定]からの「一般」 > 「ワークスペース」
![2014-07-28_1407.png](https://qiita-image-store.s3.amazonaws.com/0/48758/81aa3414-feec-34e9-e09a-1c967f32770b.png)
##②コンテンツ・タイプごとの設定
ここでは「.javaのファイルはMS932で扱う」など、ファイルのタイプごとに設定が可能。ここの設定は、次の<b>「③プロジェクトごとの設定」に勝る</b>模様。ここでハマった。
[ウィンドウ] → [設定]からの「一般」 > 「コンテンツ・タイプ」
![2014-07-28_1417.png](https://qiita-image-store.s3.amazonaws.com/0/48758/cac6886e-4b0d-54b3-73d4-3db17e2cb4db.png)
##③プロジェクトごとの設定
[プロジェクト] → [プロパティー]からの「リソース」
![2014-07-28_1420.png](https://qiita-image-store.s3.amazonaws.com/0/48758/a7c10d52-d021-f0c7-f906-befdd8d91078.png)

#まとめ
・「①ワークスペースごとの設定」で基本的に採用する文字コードを設定
・「③プロジェクトごとの設定」で随時プロジェクトごとに基本設定をオーバーライド
という姿勢でいいと思われる。
その際、「②コンテンツ・タイプごとの設定」が何にも勝るようなので、注意すること。
全部のせRequireJSっぽいWebpackを使ってみた。


自分のお守りしているプロジェクトがいい加減だるだるになってきてモジュール管理しないとしないと死んじゃう!! みたいな状況になってきた。

RequireJSを導入しようとしていたはずが、何故か気がついたらWebPackを試していた… その間の記憶は全くない。

# [Webpack](http://webpack.github.io)って何?

RequireJSと同じく、モジュール管理/バンドル化をしてくれるツール

* AMD(RequireJSのやつ), CommonJS形式両対応
* Jade、CoffeeScriptのローダーもある
* コード分割(Code Spliting) ... 非同期でモジュールを読み込む機能
* WatchしたりUglifyもしてくれる(Gruntとかぶってる)

Browserifyとの比較記事を見かけたがBrowserify使ったこと無いので良し悪しは分からず...

# 導入

npmからインストールする。gruntで使いたいので、`grunt-webpack`も。
`coffee-loader`はWebpackでcoffeeから読み込むためのプラグイン　
(ちゃんとメモってなかったので間違ってたらごめんなさい)

```sh
$ npm install --save-dev webpack grunt-webpack coffee-loader
```

## Gruntfile


Plugin使いたいのと、ファイルパス周りが特殊なので上の方でrequire

```Gruntfile.coffee
path = require('path')
webpack = require('webpack')
```

タスク設定はこんな感じ
結構無理やりGruntから使えるようにしているようで、設定をoptionsに書き、Grunt的なfilesセクションは無視される。

(追記: 現在は、multitask化されているので、このままでは動きません。コメント参照)


```Gruntfile.coffee
webpack:
  options:

    # 進捗どうですか
    progress: true

	# entryは複数書けるらしい。
    entry:
      bundle: 'entry.coffee'

	# .coffee拡張子のスクリプトは`coffee-loader`で読むように指定
    module:
      loaders: [
        { test: /\.coffee$/, loader: 'coffee-loader' }
      ],

    # output先を指定。 [name]などは適宜置換される [参照](http://webpack.github.io/docs/configuration.html#output-filename)
    output:
      path: path.join(__dirname, "www/static/js/")
      publicPath: 'www/static/js/'
      filename: '[name].js'
      chunkFilename: '[chunkhash].js'

    # ファイル名解決のための設定
    resolve:
      # 'src/coffee'にコードを入れているので、指定
      root: path.join(__dirname, 'src/coffee')

      # 探索するモジュール用ディレクトリを指定。デフォルトではbower_componentsは入っていない。 `moduleDirectories`とtypoしてて小一時間ハマった
      modulesDirectories: ['node_modules', 'bower_components']

	  # .coffeeを省略できるようにする
      extensions: ['', '.coffee', '.webpack.js', '.web.js', '.js']


    # お便利プラグイン
    plugins: [
      # bowerのモジュールを読めるようにするために
      new webpack.ResolverPlugin([
        new webpack.ResolverPlugin.DirectoryDescriptionFilePlugin('bower.json', ['main'])
      ]),

      # 指定のモジュールを予めグローバル変数としておく(後述)
      new webpack.ProvidePlugin
        $: 'jquery'
        _: 'underscore'
        Backbone: 'backbone'
    ]
```

```src/coffee/entry.coffee
AppRouter = Backbone.Router.extend
  routes:
    'home': 'home'

  home: ->
    require('pages/home').initialize()

new AppRouter();
Backbone.history.start {pushState: true}
```

```src/coffee/pages/home.coffee
module.exports =
  initialize: ->
    console.log('homeだよー')
```

extensionsで.coffeeをしているので、require('pages/home')で`pages/home.coffee`を読むようになる。

# 外部モジュール

bowerで管理しているコンポーネントを読めるように、`resolve`と、`webpack.ResolverPlugin.DirectoryDescriptionFilePlugin`を設定する。
それだけだと

```test.coffee
$ = require('jquery')
```
みたいな形で読み込むことになり面倒なので、上記を勝手に行うProviderPluginを導入している。

# 感想

最初はまったか？と思ったが、resolveまわりが頭に入ってきたらなんとかなった気がしてきた。Gruntとかぶってる点が多いのが気になる(小並感)


# TODO
非同期読み込みを試す



# 参考
http://webpack.github.io/docs/configuration.html#resolve
https://github.com/webpack/webpack-with-common-libs
http://ameblo.jp/ca-1pixel/entry-11884453208.html
mapを利用して早く編集する

# 英単語の補完
ATOKなどのIMEを使用すると、タイポした時にある程度直してくれるが
変換確定の度にEnterが必要で入力速度が少し遅くなる。
そこで、IMEを使わずに適当な辞書を頼りに簡単に補完できるようにする。

```
set dictionary=/usr/share/dict/words
inoremap ] <C-x><C-k><C-p>
inoremap [ []<LEFT>
```

今回利用したのはlookコマンドで利用される組込みの辞書。
']'で補完を初める。それ自体を打ちこみたいときには、
'['のペアとして入力するか、\<C-v>から入力する。
\<C-@>に当てるのも、おそらく有力。


" C-^で打ち込んだばかりの単語を大文字にする。主に行頭で辞書引いてきた直後に使う。
```
inoremap <C-^> <Esc>b~gi
```


なぜ'^'なのかといいますと、日本語キーボードでは'~'と'^'が
同じ位置にあるからです。Shiftキーを省略しています。



# インサートモード中に保存する

```
inoremap <C-x><C-s> <ESC>:<C-u>w<CR>a
```

Emacs式のキーバインドです。スペルチェックのキーバインドでありますが、
保存するほうが頻度が多いのでリスクリターンは取れていると思われます。
*追記:: 最新のパッチにより日本語を除外してチェックスペルができるようになりました(set spelllang=en,cjk)
有用性が上がっているので、保存は"vim-scripts/vim-auto-save"などで自動化し、:Gitした方が良さそうです。*



# change_mode(insert => command)
```
inoremap <C-c> <Esc>:
```

ノーマルモード中に、80i*と入力し、\<C-c>で抜けると自動で'*'が入力されない。
もっぱら\<C-[>や"jj"にマップして抜けるので、活用しやすい場所。



# visual mode => :norm something
```
vnoremap g: :norm<Space>
```

ヴィジュアルモードからのショートカットの一例です。
各行に同じ処理をするときにタイプ数を減らすことができます。



# Qでそのバッファを削除する
```
nnoremap Q :bdelete
```

Exモードはとても使用頻度が少ないので
キーバインドは適当に差し替えます。
\<CR>を入れていないので誤爆しても大丈夫です。
Android Studio で手動で署名付きapkをビルドする


最近 eclipse から Android Studio に乗り換えてつまづきまくりなのでメモしておきます。
あんまりAndroid Stuido関係無いです。
署名まわりはGUI任せだとトラブルシュートするとき困るんで、手動でやりたいんです。


## 署名無しapkをビルドする
Android Studio で署名付きのビルド手順は判りますけど、署名無しのやり方判らないっす。
CLIというかgradleで。

```
./gradlew build
```

出来たapkはこんなPATHになります。
build/outputs/apk/MyApp-release-unsigned.apk


## debugビルドは問題無いのにlintがエラーで上記ビルドが通らない場合

ちゃんと治す時間が無い場合やそもそも治す必要が無い場合は、build.gradle の android{}の中に以下を追記して回避します。

```
android {
	...
    lintOptions {
        abortOnError false
    }
}
```


## SHA1withRSAで署名する
/usr/bin/jarsigner -sigalg SHA1withRSA -digestalg SHA1 -keystore my-key-store -storepass mypassword -signedjar build/MyApp_signed.apk build/outputs/apk/MyApp-release-unsigned.apk mykeystorename

## アラインを設定する
zipalign -v 4 build/MyApp_signed.apk build/MyApp_signed_aligned.apk
SublimeText+jshint+nodebrewで動かなかった話

# 現象
Sublime Text 3のパッケージ、SublimeLinter-jshintを使っていて、急に動かなくなった（原因はあった）ので、その解消方法を共有。

# 環境
- __Mac__
- Sublime Text 3
  - SublimeLinter
  - SublimeLinter-jshint
- Homebrew
- zsh by homebrew
- oh-my-zsh
- __nodebrew__ by homebrew
- node by nodebrew
- jshint by nodebrew

# 動かなくなるまで
gulpなどいじっていて、npm周りを触っていたところ、急にSublime Text 3のjshintが動かなくなった。
これがないとJavaScript初心者には辛い。。。

Sublime Text 3のパッケージ全部消しても、環境にあげたもの全て再インストールしても直らない。
最後にはOS再インストールしたのに直らない。。。

試しに入れたSublimeLinter-html-tidyは動いたので、（`tidy`は入れてた）nodeかnpm周りのエラーと断定。
ちなhtml-tidyは厳しすぎて消しました。

# 原因究明まで
同じころに、nodeのバージョン管理マネージャーの`nodebrew`を入れたので、たぶんそれが原因かな。。。と薄々思いながら、Google dig。

http://www.sublimelinter.com/en/latest/troubleshooting.html#the-linter-doesnt-work

ここに、困ったらSublimeTextのコンソール開けと言ってたので、開いてみると
`SublimeLinter: WARNING: jshint deactivated, cannot locate 'jshint'`
jshintねぇよとおっしゃっておる。

確かに`npm install -g jshint`でグローバルに入れてるのに。。。

ターミナルからもjshintコマンドは使える。何故。

# 原因
nodebrewでnodeのバージョン管理と、npmのパッケージを管理していたためでした。

`nodebrew`は、npmグローバルインストールしても自動で`~/.nodebrew`に振ってくれるありがたいものです。
`nvm`などと同じようなものですが、`nvm`は`bash`最適化されているので、`zsh`使いは`nodebrew`がベターな模様。

nodebrewはインストール時に、`.zshrc`か`.bashrc`にパスを通せと言われるので、
`export PATH=$HOME/.nodebrew/current/bin:$PATH`
を`.zshrc`に追記します。
つまり、`/usr/`以下に`node`や`npm`を入れるのではなく、`~/.nodebrew/current/bin/`で一元管理されてるということ。


これでターミナルからはパスが通るのですが、SublimeLinterには通らない模様。

https://github.com/SublimeLinter/SublimeLinter-jshint#linter-installation

> If you are using `nvm` and `zsh`, ensure that the line to load `nvm` is in `.zshenv` and not `.zshrc`.

`nvm`と`zsh`を使っている場合、`nvm`は`.zshenv`は読むけど`.zshrc`は読まないとという意味っぽい。

`.zshenv`に
`export PATH=$HOME/.nodebrew/current/bin:$PATH`
を追記。


動いた！

# 結果
パッケージ管理系は大変使いやすく、有り難いものですが、パスの通し方には気をつけましょうというお話でした。
解明に1日かかった。。。
他の`node.js`を使っているSublimeTextのパッケージでも、デフォルトでは大体`/usr/local/bin`あたりを探すので、注意が必要です。

# ちな

## jslint

https://github.com/devdoc/SublimeLinter-jslint#linter-installation

> If you are using `zsh` and `oh-my-zsh`, do not load the `nvm` plugin for `oh-my-zsh`.

jslintだとさらに注意書きが増え、`oh-my-zsh`の`nvm`プラグインは読まないらしい。
jshintにも影響があるかどうかは`nvm`使ってないので未調査です。

## HTML-CSS-Prettify

こちらも`node.js`を使っているので、パス指定をしなければいけません。
`Preferences > Package Settings > HTML/CSS/JS Prettify > set node path`
の8行目を、
`"osx": "$HOME/.nodebrew/current/bin/node"`
に変更。
:help を引くときのちょっとしたTIPS

Vim でヘルプを引くには、 `:help` を使うのが一般的だと思います。

Vimのヘルプは、細かいところまでドキュメントがあり、`:help`があればほとんどが事足りてしまうため、大変便利なのですが、`filter`や`index`、 `history` など、関数やコマンド、オプションの中には、キーワードが重複していて、検索しづらいものがあります。
このとき、`:help`で引く単語に、関係する記号を含める事により、目的とするヘルプを素早く指定することができます。

例えば:

### ヘルプファイルを引く場合

末尾に `.txt` をつけます

例) `:help index.txt`

### 関数を引く場合

末尾に `(` をつけます

例) `:help index(`

### exコマンドを引く場合

先頭に `:` をつけます

例) `:help :index`

### オプションを引く場合

先頭または末尾に `'` をつけます

例)

- `:help 'history` 
- `:help history'`

オプションの場合、先頭に `'` をつければ `historyほげほげ` といったオプションが絞り込めますし、
末尾に `'` をつければ `ほげほげhistory` といったオプションを絞り込むことができます。
FreeBSDでproxy配下でもpkgを使えるようにするために、rootの.cshrcの設定変更をする

FreeBSDでproxy配下でもpkgが使えるようにするため、rootの.cshrcに下記の設定を加えます。

```csh:/root/.cshrc
~省略~
setenv HTTP_PROXY "[user]:[passwd]@proxy.example.com:[port_num]"
setenv HTTPS_PROXY "[user]:[passwd]@proxy.example.com:[port_num]"
```

ここで指定する[user],[passwd],[port_num]はproxyを抜けるための認証で与える情報です。それぞれユーザ名、パスワード、ポート番号です。proxy.example.comはproxyのFQDNです。環境に合わせて適宜読み替えてください。
スマホでdivスクロールを滑らかに

#divタグのスクロールがぎこちない・・・

サイズ指定のdivタグを使って、コンテンツをスクロールさせて表示したいと思ったのだけれど、
**慣性スクロール(指を話した後もスクロールしている状態)が働かない。。**

最近のスマホUXでは、少しレアなケースですが、使いたいシチュエーションもあるかもしれません。
そんな訳で投稿しておきます。

#対象のdivに、一行のCSSを追加するだけ

```css
div.target-class{
  -webkit-overflow-scrolling: touch;
}
```
上記を追加するだけで、スクロールが滑らかになります。
Rails の Router で new を別の action に転送する

Child というリソースに対して、 `/children/new` の他に `/parents/1/children/new` のような Parent が決まった状態の新規作成ページを作りたいというケースです。

- ページ内の要素も他の変わるので、controller の処理を分けたい。
- action 内で `params` を見て分岐するのが嫌なので、別の action にしたい。`parent_new` とします。
- URL は `/parents/1/children/new` にしたい。
- URL Helper は `new_parent_child_path(parent)` にしたい。

まず、`config/routes.rb` を見やすくするため `match` とかではなく `resources` の中に書きたいです。

```rb
resources :parents do
  resources :children only: [] do
    # ここに何か書く
  end
end

resources :children
```

## collection

新規作成ページの場合 Child の id は決まっていないので `collection`？

```rb
collection do
  get :new, to: 'children/parent_new', as: 'new'
end
```

これが一番惜しいのですが、URL Helper が `new_parent_children_path` になってしまいます。`

## member

では、`member` でしょうか？

```rb
member do
  get :new, to: 'children/parent_new', as: 'new'
end
```

これだと URL Helper が `new_parent_child_path` になるのですが、URL が `/parents/:parent_id/children/:id/new` になってしまい、役に立ちません。

## new

よく考えてみると new は非常に特殊です。個別の ID は指定しないのに、名前は単数系にしたいのです。

これは Rails がうまくやってるに違いないと思い、[resources のソース](https://github.com/rails/rails/blob/9b15828b5c347395b42066a588c88e5eb4e72279/actionpack/lib/action_dispatch/routing/mapper.rb)を見たところ、`new` というメソッドがありました。

```rb
new do
  get :new, to: 'children/parent_new'
end
```

これならうまくいきますし、`as` オプションもいりません。めでたしめでたし。
Hubotで定期タスクを動かす


Hubot上でcronを動かした時のメモ。
毎日、10時に朝会の連絡をするcronを設定してみます。

## 準備

node-cronが必要なのでインストールする。

```bash
% npm install cron --save
```

node-cronの[ドキュメント](https://github.com/ncb000gt/node-cron)によると次のような記法になるみたいです。

```javascript
var CronJob = require('cron').CronJob;
new CronJob('* * * * * *', function(), null, true, "Timezone");
```

Timezoneは指定しなくても問題ないが、使う場合は`time`モジュールが必要とのこと。

```bash
% npm install time --save
```

※ Herokuであれば環境変数の指定でTimezoneを変更できるので、そちらで指定してもいいっぽい。

```bash
% heroku config:add TZ=Asia/Tokyo
```

## スクリプト作成

node-cronの[ドキュメント](https://github.com/ncb000gt/node-cron)を参考に、coffeescriptを書く。

```javascript:cron.coffee
cron = require('cron').CronJob
 
module.exports = (robot) ->
  new cron '0 0 10 * * 1-5', () =>
    robot.send {room: "#general"}, "朝会だお"
  , null, true, "Asia/Tokyo"
```
pipでUnicodeDecodeErrorが発生した際の対処法

Windowsで`pip install`を実行すると、UnicodeDecodeErrorが発生して怒られることがある。

Windowsの場合エンコードが明示されていない際にasciiで読み込もうとするから？と思われるが、そんな時は以下方法で対処できる。

* 環境変数`PYTHONIOENCODING`に`utf_8`を設定する。

これでうまくいくはず。

[参考：UnicodeDecodeError from pip ](https://bitbucket.org/hpk42/tox/pull-request/5/fix-issue-10-unicodedecodeerror-from-pip/diff)
CentOS 6.4 から Windows共有フォルダをマウント

ここの通りにやったらできました。
http://sememo.blue-robin.jp/?p=485

> 調べるとsmbmount は CentOS 5 から消えてしまったらしい。

```bash
$ mkdir /home/hoxom/share
$ sudo mount -t cifs -o user=hoxom,password=**** //[ipaddress]/share /home/hoxom/share
```

ただし、これだとマウントポイントのオーナーが root になってしまう。
これを自分のユーザにしたい場合は、下記のように行う。

```bash
$ mkdir /home/hoxom/share
$ sudo mount -t cifs -o uid=$(id -u),gid=$(id -g),user=hoxom,password=**** //[ipaddress]/share /home/hoxom/share
```

### 参考
[CentOS 5.4 から Windows共有フォルダをマウント](http://sememo.blue-robin.jp/?p=485)
[sudo mount したときに、ログインユーザーでのパーミッションをつける](http://d.hatena.ne.jp/i_k_b/20110203/1296725898)
MySQL 行数固定のデータを生成

メモ

```sql
SELECT 
	w.*
FROM 
	(SELECT @row_id := @row_id +1 as row_id, w.* FROM works w ) w
RIGHT JOIN (
	SELECT 1 row_id 
UNION ALL
	SELECT 2 row_id 
UNION ALL
	SELECT 3 row_id 
UNION ALL
	SELECT 4 row_id 
UNION ALL
	SELECT 5 row_id 
) x ON w.row_id = x.row_id;
```

もっといい方法があるかもしれない
メンバー関数ポインタと配列を使って、メンバー関数を番号で指定して呼び出す方法

備忘録ですが、せっかく記事にするので体裁を整えて記述したいと思います。
#はじめに（事例）#
公開クラスの関数に、番号を指定することで挙動を変えたいのですが、どのように書けばよいのでしょうか？
#コード#
```cpp

#include <iostream>
#include <memory>

// 実務クラスのプライベートメンバー関数を番号で指定して呼び出したい。
// 参考書の通りに書くと、プライベート非staticメンバー関数・・・

using ub4 = unsigned int;

// 外部に公開して利用するクラス
class A {
public: // クラスの外で using を使いたいので public にしている。
    class impl; // 実務クラスの宣言
private:
    std::unique_ptr<impl> pim;
public:
    A();
    ~A();
public:
    void func_call( ub4 fn_num );
};

// メンバー関数ポインタへの型を宣言
using a_fn_ptr_t = void ( A::impl:: * )();

// 実務クラス
class A::impl {
    static constexpr ub4 pf_num = 4; // 定数で配列の要素数を指定
    static a_fn_ptr_t func_ar[ pf_num ];
public:
    impl();
    ~impl();
public:
    void func_call( ub4 fn_num );
private:
    void func_00();
    void func_01();
    void func_02();
    void func_03();
};

// 配列にメンバー関数ポインタを入れる
a_fn_ptr_t A::impl::func_ar[] = {
    &A::impl::func_00,
    &A::impl::func_01,
    &A::impl::func_02,
    &A::impl::func_03
};

A::A() :
    pim ( new impl() )
{}

A::~A()
{}

void A::func_call( ub4 fn_num )
{
    pim->func_call( fn_num );
}

A::impl::impl()  { printf("A::impl::impl() \n");}
A::impl::~impl() { printf("A::impl::~impl()\n");}


void A::impl::func_call( ub4 fn_num )
{
    if( fn_num >= pf_num ) return; // 申し訳程度のチェック
    ( this->*( func_ar[ fn_num ] ) )(); // 配列に入っているメンバー関数を呼び出し。
}

// 何らかの実務関数
void A::impl::func_00() { printf("A::impl::func_00()\n"); }
void A::impl::func_01() { printf("A::impl::func_01()\n"); }
void A::impl::func_02() { printf("A::impl::func_02()\n"); }
void A::impl::func_03() { printf("A::impl::func_03()\n"); }


// 実際に使えるかテストしてみる。
int main()
{
    A a;
    a.func_call( 0 );
    a.func_call( 1 );
    a.func_call( 2 );
    a.func_call( 3 );
    a.func_call( 4 );
    a.func_call( 5 );
    a.func_call( 6 );

    return 0;
}

```

##結果##

```txt


Start

A::impl::impl() 
A::impl::func_00()
A::impl::func_01()
A::impl::func_02()
A::impl::func_03()
A::impl::~impl()

0

Finish

```

#参照#

Wandboxにて確認させて頂きました。
http://melpon.org/wandbox/permlink/bqi7Pu16WuetcmJ9

C++11参考書:関数呼び出し（Function call）
http://ezoeryou.github.io/cpp-book/C++11-Syntax-and-Feature.xhtml#expr.call

C++11参考書:メンバーへのポインター演算子（Pointer-to-member operators）
http://ezoeryou.github.io/cpp-book/C++11-Syntax-and-Feature.xhtml#expr.mptr.oper

C++11参考書:非staticメンバー関数（Nonstatic member functions）
http://ezoeryou.github.io/cpp-book/C++11-Syntax-and-Feature.xhtml#class.mfct.non-static

#その他#
コードの色付けが無いとさっぱり分からないです。
ちなみに私の環境
``windows7 64bit``
``Microsoft Visual Studio Express 2013 for Windows Desktop``
では、以下のように表示させています。

![sample_code.jpg.jpg](https://qiita-image-store.s3.amazonaws.com/0/48760/59ff9bd4-021e-edba-b255-c3f0e2e3ee59.jpeg)

色が赤くなるほどなんかヤバイ感じ、気を付けなきゃいけない感じが出るようにしているのですが、これはそのうち別記事に書こうかなと思います。

あと
``非staticメンバー関数`` 　という記述の仕方は最初とまどいますね。
一般人の私にとっては　 ``普通のメンバー関数``　と記述したいところです。


以上です。

何か指摘事項がございましたら、お気軽にコメントお願いしまーす。
【Selenium】Firefoxのキャッシュを無効にしてエラーを未然に防ぐ

# はじめに
* テストがある日急にコケ始めていてなんでだろうと調べていると、javascriptのコードが取得できていないことが原因だと判明しました
* Jenkinsを使って複数のスレーブマシンでテストを実行していて現象はどのマシンも同じでした
* ブラウザを立ち上げて目視で見てみると、確かにscript部分が効いていない模様
* そこで、キャッシュを全消去してみると、期待通りにscript部分が効いてテストも通るようになりました
* Seleniumに関わらず、古いキャッシュが残っていて最新のfaviconやcssが取得できていないためページが期待通りに表示されないということはたまにあるでしょう
* まさに今回のケースはそれでした

# やること
* せっかくSeleniumを使っているのに再発する度に手動でキャッシュクリアなんてのは嫌なので対策を！
* ドライバーの設定を書いているところに以下のようにキャッシュを使わない設定を書く
 * この設定を入れたかといってテストの実行速度が著しく遅くなるということはなかったです

```rb:features/support/capybara_drivers.rb
...
CAPYBARA_DRIVERS.each do |driver|
  Capybara.register_driver driver[:key] do |app|
    client = Selenium::WebDriver::Remote::Http::Default.new
    client.timeout = 100 
    opts = {browser: driver[:browser], http_client: client}
    opts[:profile] = Selenium::WebDriver::Firefox::Profile.new
    # キャッシュを使わない設定
    opts[:profile]['browser.cache.disk.enable'] = false
    opts[:profile]['browser.cache.memory.enable'] = false
    opts[:profile]['browser.cache.offline.enable'] = false
    opts[:profile]['network.http.use-cache'] = false
...
```

# 効果確認
* 自前のアプリケーションに対して、簡単なアクセスをするテストを書いてみてサーバログを確認してみた
* キャッシュを無効にした場合は「200 OK」なのに対して、有効にした場合は「304 Not Modified」が所々で出ていることを確認

#### HTTPステータスコード304について
* ブラウザ側では304を受け取ると、ブラウザ内のキャッシュに残っているコンテンツを使ってWebページを表示する

## 参考
* https://code.google.com/p/selenium/issues/detail?id=40
* http://stackoverflow.com/questions/16895606/firefox-selenium-webdriver-does-not-load-jquery-from-google-api

# ～ただの宣伝～
* [全国のSeleniumer必読](http://qiita.com/oh_rusty_nail/items/b8ba525d31ea7c522856)
* Selenium, SauceLabs, Travis, Jenkinsに関するノウハウ書いているのでよかったら参考にしてみてください
『ドットインストール』と『runstant』って実は相性良いんじゃね？って話

あぁ, 罪だ... 気づいてしまった...
『[ドットインストール](http://dotinstall.com)』と『[runstant](http://phi-jp.github.io/runstant/release/alpha/)』の相性の良さに...

先日, 公開した [runstant](http://qiita.com/phi/items/e7fe30156c43a7690c1a) ですがこれは HTML, CSS, JavaScript を編集, 実行できます.
[ドットインストール](http://dotinstall.com)にあるWeb系のレッスンは, 大抵この３つを扱えれば事足ります.
そしてなんといってもどちらもログイン不要で使うことが出来ます!!

これは組み合わせて使うしかないでしょ!

今までにこれほど気軽にプログラミングを実行しながら学べる環境があったでしょうか？
いやなかったです!(あったらコメントください!)



これはもう, ごはん×明太子, 牛乳×バームクーヘン, 風呂上がり×ガリガリ君,
夏×TUBE, 原田社長×ベネッセ以来の革命かもしれない...

ってことでどう使うかまとめてみました. 参考になれば幸いです.
試しに作ってみた AngularJS のサンプルもたくさんあるよ♪

※[ドットインストール](http://dotinstall.com)の人気にあやかって [runstant](http://phi-jp.github.io/runstant/release/alpha/) の知名度を上げようなんて
そんな打算的なエントリーでは決してないです! 多分...w


## 学習の流れ

通常のフローは

1. [dotinstall](http://dotinstall.com/lessons)を開く
2. ローカルでエディタを開く
3. 動画を再生
4. エディタで編集
5. ファイルを保存
6. ドラッグ&ドロップでブラウザ上でファイルを開く(２回目以降は更新)
7. 実行結果を確認
8. 3~7 を繰り返す

これが [runstant](http://phi-jp.github.io/runstant/release/alpha/) を使うことでこうなります.

1. [dotinstall](http://dotinstall.com/lessons) を開く(tab1)
2. [runstant](http://phi-jp.github.io/runstant/release/alpha/) を開く(tab2)
3. [dotinstall](http://dotinstall.com/lessons) で動画を見ながら(tab1)
4. [runstant](http://phi-jp.github.io/runstant/release/alpha/) でコーディング&実行(tab2)
5. 3, 4 を延々と繰り返す

効率が上がるのはもちろんですが, 学習を始める際のハードルが
劇的に下がっているのがわかるかと思います! なによりWeb完結してます!!

ちなみに Chrome だと `Command+Option+左右キー` で
タブ移動できるから作業しやすいよ♪

## AngularJS のレッスンやってみた

まぁ口だけで便利だよといっても説得力ないと思うので,
AngularJS のレッスンを一通りやってみました♪

- #01 AngularJSとは何か？
- [#02 はじめてのAngularJS](http://goo.gl/qKS1rJ)
- [#03 コントローラーを使ってみよう](http://goo.gl/UT0vHy)
- [#04 フィルターを使ってみよう](http://goo.gl/lKQDuv)
- [#05 ループで使えるフィルター](http://goo.gl/WuZNcc)
- [#06 ループで使える便利な命令](http://goo.gl/cRUHhM)
- [#07 コントローラーのネストとイベント](http://goo.gl/d3sFqb)
- [#08 フォームの基本を学ぼう](http://goo.gl/WXzLaR)
- [#09 エラーメッセージを表示する](http://goo.gl/Rs3id0)
- [#10 フォーム部品を設置しよう (1)](http://goo.gl/m25kS8)
- [#11 フォーム部品を設置しよう (2)](http://goo.gl/LPcZo0)
- [#12 フォーム部品を設置しよう (3)](http://goo.gl/aEBRXc)


## 所感

もともと AngularJS 使えるってのはありますが, きちっと動画を見ながら
すべて自分でコードを書きました.

Web 完結で, だいたい1時間ちょっとで一通りの
レッスンを終えることができました!!

runstant の, データを hash に保存する仕組みのおかげでレッスンごとにファイルを
保存したり, ドラッグ&ドロップでファイルを開いたりといった面倒なことをしなくて済みました.

また, fork 的な役割も果たすので, 前回のレッスンを引き継いで作業することが
できたので手間が省けてよかったです.

っとまぁ runstant を自画自賛しまくっているわけですが,
これはすべてドットインストールありきの話です!

なのでドットインストールで学習するときに runstant を
頭の片隅に置いてもらえれば嬉しいなぁというお話でした!


----


こんな感じで作業できるなら chromebook も
ありかなぁとか思ってきてます.

便利な時代になったものですねぇ.
っとプログラミング歴の浅い若輩者が言っております.
golang 学習メモ: 初めてのフォーム


POST も GET も `http.Request.FormValue(key)` で値が取得出来るみたい。

```go
package main

import (
	"fmt"
	"html"
	"net/http"
)

func Serve(w http.ResponseWriter, r *http.Request) {
	title := html.EscapeString(r.URL.Path[1:])
	value_post := r.FormValue("value_post")
	value_get := r.FormValue("value_get")
	// header.Get("value_get")
	output := `
<html>
	<head>
		<title>` + title + `</title>
	</head>
	<body>
		<form action=? method=post>
			<input type=text name=value_post value=` + html.EscapeString(value_post) + `>
			<input type=submit name=submit value=送信>
		</form>
		<ul>
			<li>あたなが POST したのは→ ` + html.EscapeString(value_post) + `</li>
			<li>あたなが GET したのは→ ` + html.EscapeString(value_get) + `</li>
		</ul>
	</body>
</html>
`
	fmt.Fprintf(w, "%s", output)
}

func main() {
	http.HandleFunc("/", Serve)
	http.ListenAndServe(":8080", nil)
}
```
NullObjectパターン

いきなりGOF外のデザインパターン
けど、よく使いそうな感じだったのでメモ
[プログラムデザインのためのパターン言語](http://www.amazon.co.jp/dp/4797314397) が初出

## どんなパータン?

よくあるこんな書き方

```ruby
obj.method() if obj
```

あるオブジェクトが nil でなければ、メソッドを呼び出す
こういうパターンが頻出する場合、obj に **nil の代わりに何もしないメソッドを持つオブジェクト** を格納しておく

インターフェースだけ持って、何もしないオブジェクトを用意することで、
そのオブジェクトを使う側は、オブジェクトが生成されなかった場合を気にする必要がなくなる
 → オブジェクトの状態を意識する必要が無い
 → 結合度が下がる

## 実装例

Factoryパターンとの組み合わせで、インスタンスの生成が行えない場合、NullObject を返す

```ruby
module Animal
  class Cat
    def sound
      puts 'meow'
    end
  end

  class Dog
    def sound
      puts 'wow'
    end
  end

  class NilAnimal # NullObject
    def sound
    end
  end

  def self.create(type)
    Animal.const_get(type.to_s.capitalize).new rescue NilAnimal.new
  end
end

[:cat, :dog, :llama].map do |type|
  Animal.create(type)
end.each(&:sound)
```

これにより、Animal.create を使う側は、Animal.create が nil を返す場合を意識する必要がなくなる 

- 今回ならば、```each(&:sound)``` の所を、```each{|animal| animal.sound if animal } ``` と書かなくて済む


### リファクタリング案

NullObject は、複数生成する必要はないので、Singleton にする場合が多い

```rb
require 'Singleton'

module Animal
...
  class NilAnimal
    include Singleton
    def sound
    end
  end

  def self.create(type)
    Animal.const_get(type.to_s.capitalize).new rescue NilAnimal.instance
  end
end
```

### リファクタリング案2

個人的には、汎用の NilObject class を1つ作っちゃっても良いと思ってる

- Animal class に無いメソッドを呼ばれるのが困る場合は、別途 Animal::NilAnimal を作るべき


```ruby
require 'Singleton'

class NilObject < BasicObject
  include ::Singleton
  def method_missing(*args) # どんなメソッドが呼ばれても、nil を返す
  end

  def respond_to_missing?(*args)
    true
  end
end

module Animal
  class Cat
    def sound
      puts 'meow'
    end
  end

  class Dog
    def sound
      puts 'wow'
    end
  end

  def self.create(type)
    Animal.const_get(type.to_s.capitalize).new rescue NilObject.instance
  end
end

[:cat, :dog, :llama].map do |type|
  Animal.create(type)
end.each(&:sound)
```

## Rails4 以降なら Object#try が使える

```ruby
require "rubygems"
require "active_support/core_ext"

module Animal
  class Cat
    def sound
      puts 'meow'
    end
  end

  class Dog
    def sound
      puts 'wow'
    end
  end

  def self.create(type)
    Animal.const_get(type.to_s.capitalize).new rescue nil
  end
end

[:cat, :dog, :llama].map do |type|
  Animal.create(type).try(:sound)
end
```

Object#try は、第一引数を public_send して、結果が取れればその結果を、
NoMethodError ならば、nil を返すメソッド
ただし、Rails 3.x までは、NoMethodError を返すので注意

- [Object#try](http://api.rubyonrails.org/classes/Object.html#method-i-try)

## 参考

```
基本的に使へるなら使ふべきパターン。特に、「if 文で null かどうか判定して null でなければメソッドを呼び出す」の様なパターンがいくつもある場合は設計が怪しいので null object パターンを真剣に検討した方が良い。
```
- [デザインパターンの話 - Qiita](http://qiita.com/magicant/items/64685c41fdb85d03c33b)
- [Null Object pattern - Wikipedia, the free encyclopedia](http://en.wikipedia.org/wiki/Null_Object_pattern#Ruby)
- [第1回 NullObjectパターン | Think IT（シンクイット）](http://thinkit.co.jp/article/926/1)
- [instance method BasicObject#method_missing](http://docs.ruby-lang.org/ja/2.1.0/method/BasicObject/i/method_missing.html)
CSS で縦方向に中央寄せ

http://css-tricks.com/centering-in-the-unknown/

結論から言えば

```css
.outer {
  display: table;
}
.inner {
  display: table-cell;
  vertical-align: middle;
}
```

```html
<div class="outer">
  <div class="inner">somethings</div>
</div>
```

とすることで縦方向に中央寄せが可能です。

![スクリーンショット 2014-07-25 17.35.43.png](https://qiita-image-store.s3.amazonaws.com/893/19168/b920f05f-5714-776c-16a2-184d93e78b73.png)
ngrok を使ってスマホから localhost にアクセスできるようにする

スマホ用の API を開発していると、いちいちデプロイしてスマホから試して…みたいなフローが発生するときがあります。
iOS のエミュレータ経由なら `localhost` にアクセス出来ますが、Genymotion だとアクセス出来なかったり。
iOS でも実機でテストしたいときに困りますよね。

この問題を解決する ngrok が鼻血出るほど素晴らしかったので共有します。

そこで ngrok
---

![](https://ngrok.com/static/img/overview.png)

http://ngrok.com/

ngrok は `localhost` をイイ感じに外部からアクセス出来るようにするサービスです。

### つかいかた

仕組みはさておきざっと使い方。基本は次のコマンドです。

`ngrok 3000`

すると、`https://32kja8s7f.ngrok.com/` みたいなランダムに振られるURLから`localhost:3000` にアクセスすることができます。（固定のサブドメインを振ることもできます。）

![ngrok.png](https://qiita-image-store.s3.amazonaws.com/0/19168/082a77f2-8081-2d29-7d58-b5b270b6f8b9.png)

（アクセス履歴も一目瞭然）

`localhost` で動いていても全く関係なく外部からアクセスができます。

もちろん、 iOS 実機や Android, Genymotion などからもアクセスができます。

開発に便利ですね。

どうぞお試しください。

https://ngrok.com/
Missing icon file. The bundle does not contain an app icon for iPhone.


OrganizerのValidationで初めて見たエラーだったので対応をまとめてみました。

### 環境
- Xcode 5.1
- iOS 7.0以降

### 警告
```
Missing icon file. The bundle does not contain an app icon for iPhone / iPad Touch of exactly ’120x120′ pixels, in .png format for iOS versions >= 7.0.
```

### 解決策
TARGESTS > Generalを選択し、App Icons で Asset Catalog を有効にすればOKです。ただし、該当のサイズの画像があることが前提です。（今回の直接的な原因は、途中で何故かAsset Catalogの設定が外れてしまっていたことでした。。）

Asset Catalogを利用していない場合は、以下のサイトが参考になると思います。
[「Missing recommended icon file ～」エラーの対処法。](http://www.bhnt.co.jp/blog/雑記/社員：cobra/「missing-recommended-icon-file-～」エラーの対処法%E3%80%82/)



これでOrganizerのValidationに引っかからなくなりました。
Storyboard file 'Main~iphone.storyboardc' was not found.

OrganizerのValidationで初めて見たエラーだったので対応をまとめてみました。（本当に正しいかどうかは未検証です。）

### 環境
- Xcode 5.1
- iOS 7.0以降

### 警告
![スクリーンショット 2014-07-28 3.54.08.png](https://qiita-image-store.s3.amazonaws.com/0/38822/4f9eaff3-8dbb-9185-1e8d-b54dcbbac8ae.png)
```
Storyboard file 'Main~iphone.storyboardc' was not found. Please ensure the specified file is include in the bundle with any required device modifiers appended to the filename.
```
```
Storyboard file 'Main~ipad.storyboardc' was not found. Please ensure the specified file is include in the bundle with any required device modifiers appended to the filename.
```

### 解決策 1
~~TARGESTS > Generalを選択し、Main Interfaceに設定されている「Main」の文字列を削除する~~
これは間違いでした。orz

### 解決策 2
TARGESTS > Infoを選択し、Main storyboard file base nameの項目を削除![スクリーンショット 2014-07-28 4.22.21.png](https://qiita-image-store.s3.amazonaws.com/0/38822/9d199540-0563-2ee3-3de6-4398020bde91.png)

### 解決策 3
~~info.plistから直接コードを削除~~

```
git diff info.plist
-   <key>UIMainStoryboardFile</key>
-   <string>Main</string>
```

これでとりあえずOrganizerのValidationに引っかからなくなりました。
IntelliJ IDEAで既存のGoをプロジェクトとしてimportする手順

# はじめに
IntelliJがおかしいのかちょっとよくわからないんですが、毎回手作業が発生しています。
（新規プロジェクト作成時は問題ないです）

Go language (google.org) support pluginは、version `0.9.15.3`です。

https://github.com/go-lang-plugin-org/go-lang-idea-plugin


## Importする既存Goのディレクトリ構成

```
hoge
  |- main.go
```

# Import Project

`Create project`を選択して次へ。（ここでGoがない時点でダメなのか・・・

![スクリーンショット 2014-07-28 1.26.46.png](https://qiita-image-store.s3.amazonaws.com/931/48471/7890e7d8-54d5-ad21-bbb6-919383f3b72d.png)

次へ

![スクリーンショット 2014-07-28 1.26.50.png](https://qiita-image-store.s3.amazonaws.com/931/48471/622fa980-2cb2-40f8-560b-32c9747060e1.png)

次へ

![スクリーンショット 2014-07-28 1.26.56.png](https://qiita-image-store.s3.amazonaws.com/931/48471/9200daed-dfb0-1fe8-b890-e18720718f1d.png)


# Import後

## .imlのmodule type=GO_MODULEにする

残念なことにWEB_MODULEになるのでGO_MODULEにしてreload

![スクリーンショット 2014-07-28 1.27.32.png](https://qiita-image-store.s3.amazonaws.com/931/48471/b70b84ba-d0ef-37da-19f7-2867f1663c6c.png)

## Project配下をsourceにする

![スクリーンショット 2014-07-28 1.27.10.png](https://qiita-image-store.s3.amazonaws.com/931/48471/9faa0b12-811f-dcc9-fb70-879357e341fd.png)

## External LibrariesにGoを設定

![スクリーンショット 2014-07-28 1.31.35.png](https://qiita-image-store.s3.amazonaws.com/931/48471/053ee485-e409-9fb9-5ac0-4645200279c6.png)

↓

![スクリーンショット 2014-07-28 1.31.42.png](https://qiita-image-store.s3.amazonaws.com/931/48471/79ac8ca0-90e9-301e-619f-1d363305974d.png)


# おわり

![スクリーンショット 2014-07-28 1.32.18.png](https://qiita-image-store.s3.amazonaws.com/931/48471/1cd1e603-9bb5-b98c-4595-1473a8023fff.png)

# ※2014/09/06追記

開発中の最新版プラグインを使えば問題ないみたいです。

https://github.com/go-lang-plugin-org/go-lang-idea-plugin

最新版のjarは[こちら](https://www.dropbox.com/sh/kzcmavr2cmqqdqw/j8wjp8SdNH)からDLできます。（バージョン`0.9.16-dev`）

`Import Project`選択時に`Go`が選択できるようになっています。

![スクリーンショット 2014-09-06 13.27.42.png](https://qiita-image-store.s3.amazonaws.com/0/40887/ff2441c0-33cb-1c4e-1d13-027bca7e8d0b.png)

他にもずっと`0.9.13.5`を使ってて色々不具合でてるなー思ってたのが、改善されているので、最新版を使うことをオススメします。
【Docker】UbuntuでCentOS5のchroot環境を構築する

Dockerのbase boxを自作したいと思ったので、調べてみたところ、rinseを使うのが一番良さそう。
因みに、Official imageがないCentOS5をbase box化しようと思う。

# rootfsの作成
```
sudo aptitude install rinse
sudo rinse --directory=${HOME}/centos --distribution=centos-5 --arc=amd64

sudo chroot ${HOME}/centos /bin/bash

sudo rm -rf dev
sudo mkdir -m 755 dev
(
	cd dev
	sudo ln -sf /proc/self/fd ./
	sudo mkdir -m 755 pts
	sudo mkdir -m 1777 shm
	sudo mknod -m 600 console c 5 1
	sudo mknod -m 600 initctl p
	sudo mknod -m 666 full c 1 7
	sudo mknod -m 666 null c 1 3
	sudo mknod -m 666 ptmx c 5 2
	sudo mknod -m 666 random c 1 8
	sudo mknod -m 666 tty c 5 0
	sudo mknod -m 666 tty0 c 4 0
	sudo mknod -m 666 urandom c 1 9
	sudo mknod -m 666 zero c 1 5
)

echo 'NETWORKING=yes' | sudo tee /etc/sysconfig/network > /dev/null
exit
```

# dockerへの追加

```
cd $HOME/centos
sudo tar --numeric-owner -c . | sudo docker import - localhost/centos:5.10
```

# 実行

```
docker run -i -t localhost/centos:5.10 "/bin/echo" success
```
Codeforces #257 div.1 A

# 概要

http://codeforces.com/contest/449/problem/A

[一昨日](http://qiita.com/esplo77/items/f1c6f3e5b34c0980ba4f)、[昨日](http://qiita.com/esplo77/items/792a88c0ae66e5295e33)に引き続いて解いていきます。
ようやくC問題ですね。
この問題、分割数も求めれば実際にチョコレートを割るときに使えるかも…？

# 問題

n*mのチョコレートをk回割りたい。
割るときは、よくある溝に沿って割らないといけない。
一番小さいチョコが最大の大きさになるように割った時、その大きさを求めよ。

```math
1 \leq n,m \leq 10^9 \\
1 \leq k \leq 2 \cdot 10^9
```

# アルゴリズム

n,m,kがいつも通りでかいので、O(n)では間に合いませんね。
面積が$10^18$あるチョコレート、見てみたい。単位がわからんけど。
ということは、全部の割るパターンを網羅はできないです。
Div.2 A問題なら全探索もありですが、これは生憎Div.1 A問題ですね。

こういう時は、実際に割って考えてみましょう。


さて、適当に割ってみると、どうも縦と横、両方向から割るのはダメそうです。
縦なら縦、横なら横だけで割ると大きくできそうです。
割る回数が多い時は、しょうがなく両方向から割る感じですね。

長い辺を割るか、短い辺を割るかは場合によって違いそうです。
例えば、4×3を割るとき、k=1なら4の辺を割ると6になって最大ですが、k=2なら3の辺を割った場合が4で最大です。
ここに法則を求めるのは難しそうなので、両方求めて大きい方を採用します。
オーダー的には変化しないので問題ないでしょう。

なお、$(n-1)+(m-1) < k$なら割る回数が多すぎて、割ることができません。
こういう場合は-1を返して終わります。

まとめると、

1. 割る回数が多過ぎたら-1

1. 両方の辺を割らないといけない時は、単方向から割り切って、残りの回数でもう一方向から割る

1. それ以外の時は、縦横それぞれの方向で割った結果を比較

というシンプルな処理で実現できそうです。
これをコードに落とします。

# 解答

Scalaっぽさはありません。
関数型感出せるんかな、こういう処理…。

```scala
import scala.math.BigInt

object Main extends App {
  val sc = new java.util.Scanner(System.in)
  val n,m,k = sc.nextInt

  def solve( n: BigInt, m: BigInt, k: BigInt ): BigInt = {

    if( k == 0 )
      n * m
    else if( (n-1) + (m-1) < k )
      -1
    else {
      val shortSide = n.min(m)
      val longSide = n.max(m)

      // 両方の辺を割らないといけない場合
      if( longSide < (k+1) ) {
        solve(1, m, (k + 1) - n).max(
          solve(n, 1, (k + 1) - m)
        )
      }
      // 片方向からだけ割って、大きい方を採用
      else {
        val nCut = ( n / (k+1) ) * m
        val mCut = ( m / (k+1) ) * n
        nCut.max(mCut)
      }
    }
  }

  println( solve( n, m, k ) )
}
```

# 結果
Time: 218 ms
Memoy: 0 KB
バッチファイルからPowershellでVagrant SSHする

cmd.exeでのVagrant sshはつらいが、Powershellの.psファイルを実行するまでの諸々を理解するのも面倒…とお嘆きの方に。
DOSバッチファイルからvagrant sshだけをPowershellで起動する方法があります。

```lang:vagrant_ps_ssh.bat
@SET P="C:\Path\to"
cd %P%
@vagrant up
start powershell -Command "cd %P% ; vagrant ssh"
@exit
```

start powershellで別ウィンドウ起動しています。

改善点模索中
----
vagrant(VirtualBox)とPowershellの問題のような気もしていますが、たまにvagrant ssh中でvimを使い始めた時に、
* 表示内容の部分欠落している
* キーボードの入力が画面にフィードバックされない
等の不具合が起きる場合があります。

Powershellを再起動して対応していますが、何とかならないのかな…。
VisualforceでGoogle Chartを動かしてみる

![スクリーンショット 2014-07-28 1.06.45.png](https://qiita-image-store.s3.amazonaws.com/0/8407/c324ee76-cdd6-66a2-8671-10aaca79e3e9.png)

Quick Startのページにサンプルコードがあります。htmlタグをapex:pageタグに変更するだけで問題なく動作します。円グラフ以外のサンプルはChart Galleryのページで確認できます。

Google Charts - Quick Start
https://google-developers.appspot.com/chart/interactive/docs/quick_start

Google Charts - Chart Gallery
https://developers.google.com/chart/interactive/docs/gallery?hl=ja

##サンプル

```
<apex:page >
  <head>
    <!--Load the AJAX API-->
    <script type="text/javascript" src="https://www.google.com/jsapi"></script>
    <script type="text/javascript">

      // Load the Visualization API and the piechart package.
      google.load('visualization', '1.0', {'packages':['corechart']});

      // Set a callback to run when the Google Visualization API is loaded.
      google.setOnLoadCallback(drawChart);

      // Callback that creates and populates a data table,
      // instantiates the pie chart, passes in the data and
      // draws it.
      function drawChart() {

        // Create the data table.
        var data = new google.visualization.DataTable();
        data.addColumn('string', 'Topping');
        data.addColumn('number', 'Slices');
        data.addRows([
          ['Mushrooms', 3],
          ['Onions', 1],
          ['Olives', 1],
          ['Zucchini', 1],
          ['Pepperoni', 2]
        ]);

        // Set chart options
        var options = {'title':'How Much Pizza I Ate Last Night',
                       'width':400,
                       'height':300};

        // Instantiate and draw our chart, passing in some options.
        var chart = new google.visualization.PieChart(document.getElementById('chart_div'));
        chart.draw(data, options);
      }
    </script>
  </head>

  <body>
    <!--Div that will hold the pie chart-->
    <div id="chart_div"></div>
  </body>
</apex:page>
```
git-gutter+ でシンボリックリンクを開いたときのエラーを修正

前回の git commit からの差分をファイル編集中に確認できる git-gutter+ という Elisp があります。

git-gutter+ については以下をどうぞ。

[前回の git commit からの差分をファイル編集中も常に確認できる git-gutter+] (http://qiita.com/akisute3@github/items/89efc60d53c2cf49a67d)

さて、本題に入ります。

`(global-git-gutter+-mode t)` にしていると、シンボリックリンクを開くときに

```
git-gutter+-process-diff: Wrong number of arguments: nil, 0
```

というエラーが発生する場合があります。

どうやら git-gutter+-process-diff の引数がシンボリックリンクの時にエラーが発生するらしいので、以下の advice で引数のリンクを実名に変えてやりましょう。

```el
(defadvice git-gutter+-process-diff (before git-gutter+-process-diff-advice activate)
  (ad-set-arg 0 (file-truename (ad-get-arg 0))))
```

とりあえず、私は .emacs にこのコードを書いたら、シンボリックリンクを開いたときのエラーが発生しなくなりました。

同じ問題に直面した人がいれば一度試してみてください。
前回の git commit からの差分をファイル編集中も常に確認できる git-gutter+

Git でコミットする前に普通は git diff を使用しますよね。

git diff しなくても、開いているバッファのどの行を追加/ 削除/ 編集したかを表示してくれるのが [git-gutter+] (https://github.com/nonsequitur/git-gutter-plus) です。

git-gutter+ を使うと、こんな感じでバッファの左端にマークが付きます。

![git-gutter+] (https://raw.githubusercontent.com/nonsequitur/git-gutter-plus/master/images/git-gutter-main.png "git-gutter+")

ちなみに + が付いていない git-gutter というものもあるのですが、違いは git-gutter の作者である syohex さんが説明してくださっているのでそちらをどうぞ。

[git-gutter と git-gutter+ の違い] (http://d.hatena.ne.jp/syohex/20131002/1380724469)

## インストール

git-gutter+ は MELPA からインストールできるので、`M-x list-package` で git-gutter+ を選択するなり、`M-x package-install git-gutter+` でインストールしましょう。

MELPA を導入していない人は [git-gutter+.el] (https://raw.githubusercontent.com/nonsequitur/git-gutter-plus/master/git-gutter+.el) をロードパスの通ったところに配置すれば OK です。

設定はこんな感じ。

```emacs-lisp
(require 'git-gutter+)
(global-git-gutter+-mode t)
```

MELPA でインストールした人は `require` の行がなくても動きます。

これで、 git で管理しているファイルを編集してセーブすると上のスクリーンショットのようにマークが付きます。
opencsvのカスタマイズ

opencsv.jar のnullと空文字列の扱い、日付型を扱うなどのカスタマイズが微妙だったのでforkしてみました。

[GitHub:jca02266/opencsv](https://github.com/jca02266/opencsv/tree/use-property-editor)

```java:test.java
    @Test
    public void testDate() {
        String s = "" +
                "\"2014-1-1\"\n" +
                "\"\"\n";

        ColumnPositionMappingStrategy<MockBean> strat = new ColumnPositionMappingStrategy<MockBean>();
        strat.setType(MockBean.class);

        strat.setColumnMapping("date");

        CsvToBean<MockBean> csv = new CsvToBean<MockBean>();

        csv.putPropertyEditor(Date.class, new MyDateEditor("yyyy-MM-dd"));

        List<MockBean> list = csv.parse(strat, new StringReader(s));
        assertThat(list, is(notNullValue()));
        assertThat(list.size(), is(2));

        assertThat(list.get(0).getDate(), is(new Date(2014-1900,1-1,1)));
        assertThat(list.get(1).getDate(), is(nullValue()));
    }
```

`MyDateEditor` クラスを用意して追加することで、Date型と文字列の相互変換を可能にします。
空文字列の扱いなどもこのクラスで行います。
標準の型についても独自の`IntegerEditor`クラスなどを用意することで空文字列をnullとして読み込めるようにしています。これを独自のクラスに差し替えることも可能です。

Editorクラスは、以下のように[PropertyEditorSupport](http://docs.oracle.com/javase/jp/6/api/java/beans/PropertyEditorSupport.html)を継承することで比較的簡単に作れます。

```java:MyDateEditor.java
package au.com.bytecode.opencsv.bean;

import java.beans.PropertyEditorSupport;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class MyDateEditor extends PropertyEditorSupport {
    private String format;

    MyDateEditor(String formatString) {
        super();
        format = formatString;
    }

    @Override
    public String getAsText() {
        Date date = ((Date)getValue());
        if (date == null) {
            // null to empty string
            return "";
        }
        else {
            return new SimpleDateFormat(format).format(date);
        }
    }

    @Override
    public void setAsText(String text) throws IllegalArgumentException {
        Date date;
        if (text.isEmpty()) {
            // empty string to null
            setValue(null);
            return;
        }

        try {
            date = new SimpleDateFormat(format).parse(text);
        } catch (ParseException e) {
            throw new IllegalArgumentException(String.format("Cannot parse \"%s\" to Date object", text), e);
        }
        setValue(date);
    }
```
--volumes-fromを使ってハマったこと


以下のような感じで--volumes-fromを使ってデータボリュームコンテナからボリュームをマウントすると/dataの所有者がrootになってしまう(自分の環境だけ？)。

```bash
$ sudo docker run -d -v /data --name data busybox
$ sudo docker run -d --volumes-from data --name web <your image>
```

/dataに書き込むプロセスがroot以外のユーザ権限だと当然Access Deniedでエラーになる。
自分の場合はpassengerでwebアプリを動かしていてroot以外のユーザで動いていたので、ファイルを書き込もうとしてエラーとなりハマった。
Dockerのイメージをビルドする際に何かこれを解決する方法があるのか探してみたけど結局方法は見つからず。

最終的にはデータボリューム使うコンテナー(上記の例だとwebコンテナー)の起動時に所有権を変更するスクリプトを実行するようにして解決。
自分はphusion/passenger-ruby19というDockerイメージをベースにしているので以下で起動時にスクリプト実行してくれる。

```
RUN mkdir -p /etc/my_init.d
ADD init_perm.sh /etc/my_init.d/init_perm.sh 
RUN chmod u+x /etc/my_init.d/init_perm.sh
```

Running scripts during container startup
https://github.com/phusion/passenger-docker#running_startup_scripts
Swiftで「呼び出された回数を返す関数」をつくろう！

## Swiftで「呼び出された回数を返す関数」をつくろう！

今回はSwiftで呼び出された回数を返す関数を定義してみようと思います！<br>
クロージャを使えば簡単に実装することができますよ^^

```swift
import UIKit

func counter() -> (Void -> Void) {
  var count = 1
  return {
    println(count)
    count++
  }
}

let f = counter()

f()   // 1
f()   // 2
f()   // 3
```

やってることは、まず呼び出し回数を表示して+1する関数を返すcounterという関数を定義しています。counter関数内のローカル変数countは、次にf()を呼び出したときにも消えずに保持されています。クロージャを使うと状態を保持する関数が作れるので便利ですね♪

お疲れさまでした！！


## ブログやってます♪
[その時凡人が動いた](http://alex23drum.hatenablog.com)
FLEXをSwiftで使ってみる


## FLEXって？

Flipboardがリリースした、デバッグ用のライブラリです。
詳しくは、下記を参照してください。

* [FLEX: FlipboardがiOSデバッグツールをオープンソースで提供](http://wazanova.jp/items/1424)
* [Flipboard/FLEX](https://github.com/Flipboard/FLEX)


## インストール方法


CocoaPodsでインストール出来るので、Podfileの作成を行います。

```Podfile
platform :ios, '8.0'
pod "FLEX"
```

pod installでFLEXのインストールを行います。
（Objective-Cでも、SwiftでもCocoaPodsの使い方は基本的に変わりはありません。）

SwiftからPodsを利用するためには、Bridging-Header.hの作成が必要になるので、適当なObjctive-Cのクラスファイルを追加して作成し、Bridging-Header.hをXCodeでBridging-Header.hを自動生成します。
Bridging-Header.hの中で、FLEXManagerをimportします。

```Bridging-Header.h
#import "FLEXManager.h"

```

## 使い方

使いやすいように、StoryBoardでNavigation ControllerをEmbed inしたのちに、コードでNavigation Barにボタンを追加してActionを実装します。


```
	// Bar Button Itemを追加した後に、IBActionとして呼び出せるようにします。
    override func viewDidLoad() {
        super.viewDidLoad()
        self.setupNavigationItems()
    }

	
	// Bar Button Itemを追加
    func setupNavigationItems() {
        var rightButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Action, target: self, action: "onFlexBuntton")
        self.navigationItem.rightBarButtonItem = rightButton
    }
    
	// Actionとして、FLEXを表示する
    func onFlexBuntton() {
        FLEXManager.sharedManager().showExplorer()
    }
```

StoryBoardでBar Button Itemを追加した後に、IBActionとして呼び出しても問題ありません。

## 感想

CocoaPodsでインストール出来るので非常に簡単に利用することができます。
NSUserDefaultsの編集や、Viewの操作など基本的な機能は簡単に利用できました。
クラスの名前などはSwiftのクラスではなく、mangled nameになってしまっているのでちょっと分かりづらいですが、TODO扱い（Swift runtime introspection (swift classes, swift objects on the heap, etc.)）になっていますのでいずれSwiftのクラス名などが利用できるようになるかと思われますが、現時点でもデバッグには非常に便利です。
Webサーバ上でコマンドを実行して結果を表示する

セキュリティ的には微妙だけど、ひとつコマンドを打つためだけにSSHするのが面倒なので、よくサーバに内緒で仕込んでる。サンプルはlsだが、makeだって動いちゃう。

途中で`\x0a`が出現すると`<BR>`に置き換えて出力を見やすくしてるのがポイント。

```py
#!/usr/bin/env python

import sys
from subprocess import Popen, PIPE

print "Content-Type: text/html\n\n"

p = Popen(["ls","-al"], stdout=PIPE)
while 1:
  c = p.stdout.read(1)
  if not c:
    break
  if c == bytes("\x0a"):
    print "<br>"
  sys.stdout.write(c)

```
Androidアプリのバックアップとリストア

使いながら、データを内部に蓄積するようなアプリを開発していると、テストのために新規インストールしたり、アップデートしたりとするときに、アプリの状態をバックアップ/リストアできればいいのにと思ったので調べたら adb コマンドで簡単に出来ることがわかったのでメモしておく。

## バックアップコマンド
`adb backup example.com`
これだけ、(「example.com」はアプリのパッケージ名)
ただ、いくつかのオプションをつけないと役にたたない。
以下、よく使うもの
### オプション
**-f**
バックアップファイル名の指定、これがないとカレントディレクトリに「backup.ab」で保存される。
**-apk|-noapk**
バックアップに apk を含めるかどうか。デフォルトは -noapk 
今回はアプリをアンインストールしてからの復元をしているので -apk が必須

オプションは他にもあるがつかってるのはこれくらい。
以下、オプションをつけたコマンドの例
`adb backup -f hogehoge.ab -apk example.com`

実行すると、端末側がバックアップ確認画面に切り替わる。
バックアップファイルにパスワードをつけたり出来るが、そっちは見れば分かると思う。

## リストアコマンド
`adb restore hogehoge.ab`
これだけ、（「hogehoge.ab」はバックアップファイル）

実行すると、端末側がリストア確認画面に切り替わる。
こっちも見れば分かると思う。
java.lang.UnsupportedClassVersionErrorでEclipse Lunaのjdkを1.7にした

普段と違うマシンで開発する際にEclipse Lunaを新しく入れてやってたら
`java.lang.UnsupportedClassVersionError`が出た。

調べてみると、開発環境のEclipse Lunaのコンパイラは1.8で、実行環境はjdk1.7だった。
というわけで以下MacでEclipse Lunaのjdkを1.7にした手順

#jdkインストール
[Oracleのページ](http://www.oracle.com/technetwork/java/javase/downloads/index.html)からjdk1.7をダウンロードして解凍、インストール

#eclipseの設定
Eclipse->環境設定->installed JREsに行き「Add」->「Standard VM」
JRE homeに
`$ /usr/libexec/java_home -V
Matching Java Virtual Machines (2):
    1.8.0, x86_64:	"Java SE 8"	/Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home
    1.7.0_65, x86_64:	"Java SE 7"	/Library/Java/JavaVirtualMachines/jdk1.7.0_65.jdk/Contents/Home`
で出てくるjdk1.7へのパスをコピー
Finishすると、「Installed JREs」に今追加したJREがあるのでデフォルトで使う場合チェックを入れる

Eclipse->環境設定->CompilerでCompiler compliance levelを1.7に設定