OmniAICreator/Qiita-1.07M huggingface dataset:
Pythonのスタイルを自動で整形させるVimプラグイン


## flake8-vim

ソースコードの見た目は綺麗にしたい派、とりあえずPython書くならpep8は守っておこうぜ派です。

コーディングスタイルの統一が出来ていなかった時代のソースコードを弄るとき、あるいは書き途中のソースコードでpep8に怒られたとき、手動でそれらを整形していくのは面倒です。
面倒だと誰も守らなくなるので、IDE使うかエディタにこだわるなら自動整形プラグインを入れましょう。

なお新しいプロジェクトとかであれば保存するたびに強制的にautopep8という手段もありますが、したくないとかしたら困る場合もあるわけですね。


そこんところをよしなにやっつけてくれる、[autopep8](https://github.com/hhatto/autopep8)というモジュールが存在します。
ただし、このようなモジュールのままでは使うのが面倒なので、エディタ越しに使えるようVimのプラグインを使いましょう。
[andviro/flake8-vim](https://github.com/andviro/flake8-vim)には、flake8と一緒にautopep8用の関数も提供されています。

flake8-vimをインストールした状態で、編集したい行を選択して`:'<,'>PyFlakeAuto`を実行してみましょう。


```python
# ビフォー

def main():
    d={
            'a':111,
        'b':'cc', 
    'c': 12
    }
    if 0: print 1
    foo = 'aa'+'bb'
    return aa
```

```python
# アフター

def main():
    d = {
        'a': 111,
        'b': 'cc',
        'c': 12
    }
    if 0:
        print 1
    foo = 'aa'+'bb'
    return aa
```

というような感じです。地味に末尾スペースも削除してくれています。
下の `E226 missing whitespace around arithmetic operator [pep8]` が解消されない事に今気がついたのですが、これはもしかしたらautopep8かどっかのバグかもしんないですね。後で適当になんかしましょう。


## operatorの導入

怠惰系男子が多いvimmerにとって、`v`でわざわざ範囲選択をしてコマンドを実行するというような冗長な操作は堪え難い苦行といえます。
というわけでoperatorと有用そうなtextobjも入れておきます。

- [hachibeeDI/vim-operator-autopep8](https://github.com/hachibeeDI/vim-operator-autopep8)
- [bps/vim-textobj-python](https://github.com/bps/vim-textobj-python)

あとは適当に

```vim
map ,p <Plug>(operator-autopep8)
```

のような設定を入れておけば、先ほどの操作は`,paf`という簡潔なキーバインドで解決するわけですね。しかも関数本体が何行あっても同じ操作でいけちゃいます。
他にも、辞書リテラルのインデント崩れを直したり(`,pa{}`)と、入れてみると結構便利です。

我々はこういうエコを通じてラッコやイルカに配慮する必要があります。
IT勉強会運営について（通信回線編）

IT勉強会は数あれど、その運営ノウハウについて公開されている例はあんまりないなあ と思って書きためてみる連続エントリ第四弾。

第四弾はIT勉強会運営における勉強会回線についてです。

# まえおき

自分の活動内容については以下をご確認ください。

* [IT勉強会運営について（スケジューリング編）](qiita.com/TakamiChie/items/e4eeb39575fd25ebfd0c)

# 二つの回線

勉強会の運営では、配信用にそこそこ高速で、通信制限が緩い通信回線が必要です。

会場で用意できればそれがベストですが、そんな会場も多くないので、一つは自前で回線を用意しておくと良いかと思います。

自分が今契約できるものの中で使ったことあるのは、以下の二つ

 * [FREETEL SIM](https://www.freetel.jp/sim/)→100MB～10GBまで、通信容量によって金額が変わるSIM。イベントの回数によっては安く済ませられる。万が一の予備として買い足しても負担が少ない
 * [ぷららモバイルLTE](http://www.plala.or.jp/lte/)→3Mbpsまでしか出ない代わりに無制限使い放題のSIM。そもそもLiveshell自体が3Mbpsまでしか出せないので問題なし。ただし、イベントの回数によっては割高になることもある。


そのほか、参加者にPCやスマートフォンのユーザーが多い場合は、会場公開用の回線も用意しておくと良いかと思います（無線LANの混線を緩和する目的もあります。規模によって必要かどうか判断しましょう・・・ と、いいたいですが、正直それを判断するくらいなら用意しておいた方がいいと思います）。現在自分のイベントではとくに用意をしていません。

また、もし余裕があれば、配信用以外にスタッフの動画確認用回線などがあると、運用が楽になります。ただしこれは、なくても構いません（うちにもありません）。


動画配信用については、月あたりの動画配信回数と、一回あたりの使用容量から、適切なものを判断します。参考までに、自分が今まで通してみた感じ、2時間程度のイベントで配信＋最低限の動画監視で2GB程度です。とりあえず自分が配信に関わったり、利用するイベントの種類によって決めると良いでしょう。
また、公開用回線については、どんな回線でも良いと思います。どうしてもスピードが欲しいと言う人はどうせ止めても自前回線を持ってくるので、それほどの高速回線を手配する必要もないでしょう。ほんとうはパケットやポートの種別で制限などをしておいた方がいいのかもしれませんが、ひとまずうちでは特にやってません。

## 無線公開用の機器

モバイル回線を無線公開したり、有線LAN公開したりするには、以下のものを使用しています。

* [NECプラットフォームズ SIMロックフリー LTE モバイルルーター Aterm MR04LN ( デュアルSIM 対応 / microSIM ) PA-MR04LN](http://www.amazon.co.jp/dp/B010OXMNOS/ref=cm_sw_r_tw_dp_8P5Cwb0PY3CMR)
* [NECプラットフォームズ EX4C クレードル PA-MR04L-EX4C](http://www.amazon.co.jp/dp/B010N55W4K/ref=cm_sw_r_tw_dp_pQ5Cwb0QV3WQK)

# 次回予告

近いうちにQiitaにて公開予定

* 司会のおしごとについて

おたのしみに。
10進数、2進数、8進数のいずれで表現しても回文数になるやつ


元ネタ：
https://codeiq.jp/magazine/2013/12/3238/

"10進数の10以上で最小の値"だと
3桁の数になるんだけど、
"10進数の1000以上で最小の値"だと
大きな数になり、計算量も多くなる。

回文数が
ABCDCBA
の形と
ABCDDBCA
の形で場合分けして書いたら、うまく解けた。


```ruby:reversible.rb
#n進で表した時に回文数となっているかを判定するメソッド
#十分大きい数でも対応できるようにFixnumでなくIntegerに定義する
class Integer
  def reversible?(n)
    self.to_s(n).reverse == self.to_s(n)
  end
end
 
#2進・8進・10進のそれぞれで回文数となる数をTripleReversibleと呼ぶことにして、
#それに配列のようにアクセスできるモジュールを定義する
module TripleReversible
  extend self
  def [](nth)
    arr = []
    #10の1乗,2乗,3乗,,,とイテレートしていく
    (1..Float::INFINITY).each do |n|
      #1の位の数字が偶数の場合は、2進で1の位が0となり回文数にならない。
      #よって、1の位の数(=最初の桁の数)が奇数のもののみを調べればよい。
      [1,3,5,7,9].each do |x|
        (10**(n/2)*x).upto(10**(n/2)*(x+1)-1) do |m|
          r = n.odd? ? 
            #奇数桁数：ABCDCBAのタイプ
            (m.to_s.chop + m.to_s.reverse).to_i 
            #偶数桁数：ABCDDCBAのタイプ
          : (m.to_s      + m.to_s.reverse).to_i
          arr << r if r.reversible?(8) && r.reversible?(2) 
          return arr[nth] if arr[nth]
        end
      end
    end
  end
end
 
#puts TripleReversible[0] #-> 1
#puts TripleReversible[1] #-> 3
#puts TripleReversible[2] #-> 5
#puts TripleReversible[3] #-> 7
#puts TripleReversible[4] #-> 9
#puts TripleReversible[5] #-> 585
#puts TripleReversible[6] #-> 719848917
```
カレントディレクトリをウィンドウタイトルに表示してプロンプトを短くする

ついでにdebianのbash風なプロンプトにします。
PowerShellのプロンプトはデフォルトで

```
PS C:\User\%ユーザ名%>
```

という形で`PS %カレントディレクトリフルパス%>`で表示されますが、深い階層のディレクトリに移動するとプロンプトが長くなりすぎるのでプロンプトの表示を変更します。

```
PS > notepad $profile
```

でプロファイルスクリプトを編集します。

プロンプトを定義するには

```ps1
function prompt {
}
```

という感じで`prompt`ファンクションを書けばいいようです。

さて、希望の形に変更するには

```ps1
function prompt {
   #カレントディレクトリをウィンドウタイトルにする
   (Get-Host).UI.RawUI.WindowTitle = "Windows PowerShell " + $pwd

   #debianのbashのような感じで表示
   #カレントディレクトリを取得
   $idx = $pwd.ProviderPath.LastIndexof("\") + 1
   $cdn = $pwd.ProviderPath.Remove(0, $idx)
   #プロンプトをセット
   $env:UserName + "@" + $env:UserDomain + ":" + $cdn + "> "
}
```

という形で。
これでプロンプトは`%ユーザ名%@%ホスト名%:%カレントディレクトリ%>`の形で表示され、現在のフルパスはウィンドウタイトルに`Windows PowerShell %フルパス%`と表示されます。
Sphinxですべての目次をサイドバーに表示する

# 背景

[Sphinx](http://sphinx-doc.org/) ってデフォルトの動作（テーマ）だとサイドバーに表示される目次って、今見ているページに関連する目次のみで全体の目次は見えなくなってしまいますね。

でも、[Sphinx-Users.jp](http://sphinx-users.jp/) ではサイドバーに表示されている目次ってすべてが表示されていて、いつも同じになっているので、これと同じようなことをしようとしたときのメモです。

なお、[Sphinx](http://sphinx-doc.org/) を使い始めたばかりなので、間違いあれば指摘いただけると嬉しいです！

# 情報

本家の情報では、[どのようにすれば...](http://docs.sphinx-users.jp/faq.html#how-do-i) の 「... すべての全体の目次をサイドバーに表示できますか？」にさらっと書いてあります。

が、これでは自分には理解しきれなかったので、Sphinx-Users.jp の[ソース](https://bitbucket.org/sphinxjp/website/src) を見ました。これから得られた知識をもとにして以下を書いています。

# やり方

## 目次用テンプレートの作成

sphinxプロジェクトのソースディレクトリ（プロジェクト直下かsourceフォルダ配下）に、```_templates``` というディレクトリがあるので、この中に ```globaltoc.html``` というのを以下のような感じで作る。

```html
<div id="toc" class="sidebarRow">
<h3><a href="http://docs.sphinx-users.jp/">Sphinxリファレンス</a></h3>

<h3><a href="{{ pathto(master_doc) }}">{{ _('Table Of Contents') }}</a></h3>
{%- if sphinx_version[:3] >= '1.2' %}
{{ toctree (maxdepth=2, collapse=False, includehidden=True) }}
{% else %}
{{ toctree(maxdepth=2, collapse=False) }}
{% endif %}
</div>
```

ポイントは後半の [toctree](http://docs.sphinx-users.jp/templating.html#toctree) の部分。ここで、```collapse=False``` とすることで、全体の目次が常に表示されるようになる、ということらしい。

htmlのマークアップ部分をあとは好みで記述すれば、自分好みのサイドバーが作れる感じですね。

ちなみに、[テンプレート](http://docs.sphinx-users.jp/templating.html) に書いてあるように、[Jinja](http://jinja.pocoo.org/) というテンプレートエンジンを使っているとのこと。

また、[pathto](http://docs.sphinx-users.jp/templating.html?highlight=pathto#pathto) や [master_doc](http://docs.sphinx-users.jp/templating.html?highlight=master_doc#master_doc) についてはそれぞれのリンクを参照ください。


## conf.py の修正

目次用のテンプレートを作成したら、conf.py に以下のような記述を追加する。

```py
html_sidebars = {
    '**': ['globaltoc.html', 'relations.html', 'sourcelink.html', 'searchbox.html'],
}
```

記述方法については [html_sidebars](http://docs.sphinx-users.jp/config.html?highlight=html_sidebars#confval-html_sidebars) を参照ください。

[Sphinx-Users.jp](http://sphinx-users.jp/) では、ここにTwitterのハッシュタグを埋込むテンプレートを作って、それを読む込むようにしてありました。


あとは

```bash
make html
```

すればOKです。


------

以上となります。
変なところあればご指摘ください。
placeholderとautofocus

##ガイド表示
placeholder属性で指定した値が、入力欄に初期値として表示されます。

```html:placeholder
<form>
<input type="text" name="myname" placeholder="input your name" />
</form>
```

##フォーカス
画面を開いたタイミングでフォーカスしてくれる。

```html:autofocus
<form>
<input type="text" name="phone" autofocus />
</form>
```
「つながらない」時に確かめるチェックシート

随時更新しています。

恥ずかしながら、「なんかつながらないなー」という場面によくあたります。
都度都度調べて解決はするのですが、結構時間の無駄です。
調査としてどんな選択肢があるのか、ということを載せておきます。


#そもそも立ち上がってる？
マシンに電源は入っていますか？

#リブートしましたか？
（リブート可能な場合です）

#頭の整理のために経路を書いてみる

* グローバルIPが振ってあるマシン同士の通信でしたら単純ですが、社内の端末からなど、一旦ルータを経由する場合などが普通だと思います。

#プロトコルは何？

##HTTP,HTTPS

* ブラウザからアクセス
* curlコマンド

##SSH

* sshコマンド　

#他プロトコルでの接続はできる？

以下は条件次第です。その時の状況次第でアレンジして下さい。

* pingコマンド
* telnetコマンド
* HTTPSがダメなら、HTTPを試す（逆も）
* ...

#到達する？
* tracerouteコマンド

#名前（ドメイン）は振られている？

##名前有り

* nslookupコマンド
* digコマンド

#他マシンからは接続できる？

* LAN内の別マシンからの接続
* AWS VPC などであれば、同VPC内マシンから、同サブネットマシンから　など

#対象マシンへログイン可能な場合

##プロセスは立ち上がっている？

* ps aux | grep [探したい対象]

##ポートの開放状況

* netstat -l -p tcp

↑は一例
参照
http://www.atmarkit.co.jp/fnetwork/netcom/netstat/netstat.html
<sj:a>を使って非同期でJSPの結果を取得する

# 概要

コンテンツの一部を非同期でJSPを呼び出して取得する方法は、Struts2-jQueryプラグインを使うことで簡単に実現できます。
例えば検索画面と検索結果を別々のJSPにしておいて、検索結果は非同期で取得する、など。

以下は下地となる検索画面。呼び出し部分はsjのaタグ、検索結果はdivに反映される、と定義します。

```jsp
<sj:a button="true" id="search" name="search" 
      href="list" targets="resultList">検索</sj:a>
<div id="resultList"></div>
```

ボタンを押して取得したJSPのレスポンスは、targets属性に指定した値をidにもつ要素に格納します。
この例ではすぐ下のdivですね。

href属性に指定したパスから得られるレスポンスを格納します。
レスポンスはただのテキストでも良いですし、Actionクラスを実行するパスを指定して、その結果指定するJSPから得られるHTMLレスポンスでも問題ありません。例えば以下のようなJSPです。

```jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%@ taglib prefix="sj" uri="/struts-jquery-tags"%>
<%-- Result List --%>
<!DOCTYPE html>
<table class="table table-bordered table-striped">
	<thead>
		<tr>
			<th>id</th>
			<th>title</th>
			<th>editStatus</th>
		</tr>
	</thead>
	
	<tbody><s:iterator value="resultList" var="resultMap" status="stts">
		<tr>
			<td><s:property value="id"/></td>
			<td><s:property value="title"/></td>
			<td><s:property value="editStatus"/></td>
		</tr>
	</s:iterator></tbody>
</table>
```
CoffeeScriptで即時関数メモ


忘れがちなので、メモ。

CoffeeScriptで即時関数をつけるときのやり方


```coffeescript
do ($ = jQuery , _ = _)->

  some = (arg)->
    console.log arg
```


CoffeeScriptのコンパイル時に追加されるトップレベルの即時関数を外す場合

bare(-b、--bare)オプションをつけてコンパイルする

```bash
$ coffee -c -w -b -o . .
```

Gruntではbareオプションをtrueにする

```coffeescript:Gruntfile.coffee
coffee:
  frontDev:
    options:
      bare: true
    expand: true
    flatten: false
    cwd: 'src/js/'
    src: ['**/*.coffee']
    dest: 'public/js/'
    ext: '.js'
```

おわり
gem devise-asyncで非同期にユーザーにメールを送信する

[GitLab](https://github.com/gitlabhq/gitlabhq)で使用されているgem devise-asyncを紹介。
これはgem deviseのプラグインで、ユーザーに対してのメール送信を非同期化出来るgemです。

ちなみに対応しているキューシステムは下記。

- Resque
- Sidekiq
- Delayed::Job
- QueueClassic
- Torquebox

## 実装

[devise-async / lib / devise / async / worker.rb](https://github.com/mhfs/devise-async/blob/master/lib/devise/async/worker.rb) ここでworkerに対してenqueueを行ってます。

そして、[ devise-async / lib / devise / async / backend / base.rb](https://github.com/mhfs/devise-async/blob/master/lib/devise/async/backend/base.rb) のBaseクラスのperfomeインスタンスメソッドでメールを送信している仕組みになってます。
CakePHP2でNoticeを一部分のみ出さないようにする

使ってるプラグインがNotice地獄な感じで、頭の部分にerror_reportingで設定を変えよう試みられてたのですが、CakeさんではそれだとNoticeは出てしまう…っというわけで…
上手いこといい方法がないかなと探ってみました

まず、Configure::writeで書き込もうとしてみましたが、読み込むタイミングがプログラムにくるもっとずっと前なのでアウト。
検索したところ、皆コアソースをいじくるという方法とってたのですが、それも後々めんどくさいし、上司に怒られちゃうのでアウト。
@使うとWarningとかも死んじゃうよね？ってことでアウト。
んで、ソース読んでいったところ、最終的にset_error_handlerを使って書き込んでたので、
プラグインを呼ぶメソッドの冒頭と末尾で

<pre>
function Hoge() {
set_error_handler('ErrorHandler::handleError', E_ALL & ~E_NOTICE);

～～～～～～～～～～～～～～～～～～

$errorConfigure = Configure::read('Error');
set_error_handler($errorConfigure['handler'], $errorConfigure['level']);
}
</pre>

と入れてあげることでコアソースをいじくらずに変えることは出来ました
set_error_handlerについてもーちょい調べないとなー
AWS SDK for RubyでアップロードしたS3オブジェクトからContent-Typeヘッダが取れない

AWS SDKを使ってアップロードして、S3からDLするとContent-Typeヘッダが空になっていることがありました。
S3のマネージメントコンソール上からはimage/jpegの設定がされてるように見えたのになぜ・・・？

```sample1.rb
require "aws"
s3 = AWS::S3.new
bucket = s3.buckets["my-test-bucket"]
object = bucket.objects["obj-key"]

object.write("test text")
```

```curlした結果(一部ヘッダを省略)
$ curl -i https://s3-ap-northeast-1.amazonaws.com/my-test-bucket/obj-key
HTTP/1.0 200 Connection established

HTTP/1.1 200 OK
Date: Mon, 20 Jan 2014 00:37:31 GMT
Last-Modified: Mon, 20 Jan 2014 00:29:00 GMT
Accept-Ranges: bytes
Content-Type:
Content-Length: 9
Server: AmazonS3

test text
```

調べてみたところ、S3アップロード時にContent-Typeを指定してやる必要がありました。
S3マネージメントコンソール上でimage/jpegが設定されてるように見えるのは、プルダウンの初期値が見えてるだけで設定されているわけではありませんでした。
AWS SDK for RubyでContent-Typeヘッダを設定するには以下のような感じでやります。

```sample2.rb
require "aws"
s3 = AWS::S3.new
bucket = s3.buckets["my-test-bucket"]
object = bucket.objects["obj-key2"]

object.write("test text", content_type: "text/plain")
```

```curlした結果(一部ヘッダを省略)
$ curl -i https://s3-ap-northeast-1.amazonaws.com/my-test-bucket/obj-key2
HTTP/1.0 200 Connection established

HTTP/1.1 200 OK
Date: Mon, 20 Jan 2014 00:49:13 GMT
Last-Modified: Mon, 20 Jan 2014 00:48:50 GMT
Accept-Ranges: bytes
Content-Type: text/plain
Content-Length: 9
Server: AmazonS3

test text
```

ちなみに、既にアップロード済みのファイルにContent-Typeヘッダを付けるなら#copy_fromを使えばOKでした。

```sample3.rb
require "aws"
s3 = AWS::S3.new
bucket = s3.buckets["my-test-bucket"]
object = bucket.objects["obj-key3"]

object.exists? #=> true
object.head.to_h[:content_type] #=> ""

object.copy_from(object, content_type:"text/plain")

object.head.to_h[:content_type] #=> "text/plain"
```
gem coloredがおしゃれ

[GitLab](https://github.com/gitlabhq/gitlabhq)でも利用されているのですが、gem coloredがおしゃれな感じなので紹介。

作者はGitHubの[@defunkt](https://github.com/defunkt/colored)さんです。4年前から開発が止まってます。

止まっているから問題…という分けではなく、実装がもの凄く小さいのでもう開発する必要がないという意味で止まっています。

[defunkt / colored](https://github.com/defunkt/colored)

## 実装

[ colored / lib / colored.rb](https://github.com/defunkt/colored/blob/master/lib/colored.rb) ここを見ると分かりますが、`module Colored`を定義し`String`にincludeしています。

なので、`require 'colored'` した後はStringクラスでmodule内のインスタンスメソッドを使う事ができるようになってます。

## 機能

gemの名前の通り、`String`の出力の色をしていすることが出来る様になります。

```
  >> puts "this is red".red
 
  >> puts "this is red with a blue background (read: ugly)".red_on_blue

  >> puts "this is red with an underline".red.underline

  >> puts "this is really bold and really blue".bold.blue

  >> logger.debug "hey this is broken!".red_on_yellow     # in rails

  >> puts Color.red "This is red" # but this part is mostly untested

```
余因子展開

余因子展開による行列式の計算をする関数det。

```hs:matrix.hs
type Matrix = [[Int]]
dropAt :: Int -> [a] -> [a]
dropAt i xs = [x| (x, j) <- zip xs [0..], i /= j]
cofactor :: Int -> Int -> Matrix -> Matrix
cofactor i j m = [dropAt j v| (v, k) <- zip m [0..], i /= k]
det :: Matrix -> Int
type Matrix = [[Int]]
dropAt :: Int -> [a] -> [a]
dropAt i xs = as ++ bs where (as, _ :bs) = splitAt i xs
cofactor :: Int -> Int -> Matrix -> Matrix
cofactor i j m = [dropAt j v| (v, k) <- zip m [0..], i /= k]
det :: Matrix -> Int
det m = case m of
        [[e]] -> e
        (xs:xss) -> sum [(-1) ^ i * e * (det . cofactor 0 i) m |
	                                        (e, i) <- zip xs [0..]]


ex :: Int
ex = det [[1, 2],
          [3, 4]]
-- 1*4 - 2 * 3 = 4 - 6 = -2
```
【gnavi】位置情報をブラウザから取得し初期位置に反映するPart4

素直にテンプレートの中に組み込むことにしました

オリジナルアイコンが設定できず苦戦中

```html:map.html
<script type="text/javascript">
//現在地取得
if(navigator.geolocation){
// 現在地取得（変わる毎に更新）
navigator.geolocation.getCurrentPosition(
function(pos){//位置情報取得成功時
document.getElementById('lat').value = pos.coords.latitude;
document.getElementById('lng').value = pos.coords.longitude;
ShowGMap();
var myLatLng = new google.maps.LatLng(pos.coords.latitude, pos.coords.longitude);
// ユーザのマーカーアイコンを変更
var markerImage = new google.maps.MarkerImage(
// 画像の場所
"サイトURL/images/startposition.png",
// マーカーのサイズ
new google.maps.Size(64, 64),
// 画像の基準位置
new google.maps.Point(0, 0),
// Anchorポイント
new google.maps.Point(32, 32)
);
// 現在地のマーカー表示
var marker = new google.maps.Marker({
map:gn_map,
draggable:false,
position: myLatLng,
title: "現在地",
icon: markerImage,
optimized:false
});
},
function(error){// 位置情報取得失敗時
var message = "";
switch(error.code){
// 位置情報が取得出来ない場合
case error.POSITION_UNAVAILABLE:
message = "位置情報の取得ができませんでした。";
break;
// Geolocationの使用が許可されない場合
case error.PERMISSION_DENIED:
message = "位置情報取得の使用許可がされませんでした。";
break;
// タイムアウトした場合
case error.PERMISSION_DENIED_TIMEOUT:
message = "位置情報取得中にタイムアウトしました。";
break;
}
window.alert(message);
});
}else {
	window.alert("本ブラウザではGeolocationが使えません");
}
</script>
```

これらをmap.htmlの５３行目から入れます
CloudBeesでWebSocketを利用するTips


CloudBeesでWebSocketを利用するには、以下の設定をしておく必要があります。

    bees app:proxy:update -a APPID http_version=1.1

詳細は[CloudBeesのサイトのここ](http://developer.cloudbees.com/bin/view/RUN/WebSockets)に記載があります。
App Switcher に表示される View を差し替える補助ライブラリ MMAppSwitcher

# App Switcher に表示される View を差し替える補助ライブラリ

以前[アプリの画面を開いているアプリケーションのプレビュー画面から隠す](http://qiita.com/griffin_stewie/items/0b7c0f750a7eb62b182c "Objective-C - アプリの画面を開いているアプリケーションのプレビュー画面から隠す - Qiita [キータ]")というものを書きました。先日たまたま見つけたライブラリがこのような処理を補助するものがあったので一応ご紹介。

[MMAppSwitcher](https://github.com/vpdn/MMAppSwitcher "vpdn/MMAppSwitcher") というライブラリです。使い方的には MMAppSwitcherDataSource プロトコルを実装して App Switcher に表示して欲しい View を返す感じです。

ライブラリの内部的には `UIApplicationWillBeginSuspendAnimationNotification` という非公開な Notification をきっかけに App Switcher 用の View を表示させているようです。非公開なものなので若干審査だったり将来のバージョンアップとか大丈夫かな？って気がしますね。

こんなことをしている理由として推測するには、`applicationDidEnterBackground:` のタイミングだと

1. アプリ最前面
2. ホームボタン1回押し
3. ホーム画面が表示されたと同時にホームボタン2回押し

というような操作をされた場合には `applicationDidEnterBackground:` がまだ呼ばれていないっぽいので App Switcher 用の View を用意できないんですね。だからこのライブラリの作者は willEnterBackground 相当のタイミングを探った結果 `UIApplicationWillBeginSuspendAnimationNotification` にたどり着いたのだと思います。

僕がやったような "ほぼ期待する動作をする" アプローチをとるのか、`MMAppSwitcher` のように攻めるのかは自己責任で。

## どうでもいいけど

この「ホームボタン2回押し」で表示される機能ないし画面の Apple 的正式名称ってなんなんでしょうね？個人的に AppSwitcher って気持ち悪い。
Vagrantfileでhostnameを指定したときのメモ


## hostnameの指定

config.vm.hostname でHost名を変更できるんですが、"_" （アンダーバー）はダメな模様。
ハイフンは大丈夫でした。

### hostnameにハイフンを入れた場合….

Vagantfileで、"test_vm" と設定してみます。

- exp. config.vm.hostname = "test_vm"

すると、こんなエラーメッセージが出ました。

```
% vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
There are errors in the configuration of this machine. Please fix
the following errors and try again:

vm:
* The hostname set for the VM should only contain letters, numbers,
hyphens or dots. It cannot start with a hyphen or dot.

```
良く読むと、ちゃんと理由が書かれていますね。（最初はこの英語のメッセージに気がつきませんでした…）

ちなみに、このあたりのIssueで扱っていました。

- Disallow dot and hyphen as first character of hostnames
 - https://github.com/mitchellh/vagrant/pull/2358
goroutineがスイッチされるタイミング

goroutineがスイッチされるタイミングについて調べていました。

# 結論
Go言語で、goroutineは **必ずしも** スイッチされるわけではない。
スタックに触れないような、「for(){}」みたいなビジーループをGOMAXPROCSの指定数以上に含ませるとスイッチされなくなる。

goroutineがスイッチされる(主な)条件はこれらと思われる。
 - goroutineの関数が最適化でinline化されていない
 - スタックを操作するような処理を行った
 - (その他の契機もあるようなので「経緯」で書く)

# 経緯
処理のないビジーループが有ると、goroutineがスイッチされず処理が止まることに気づきました。
＃ 処理の中身を全部コメントアウトしてデバッグしていたら気づいた

```go:test1.go
package main

func busy() {
	for {
	}
}

func main() {
	go busy()

	go func() {
		println("hello")
	}()

	i := make(chan int)
	<-i
}

```

お行儀悪いこと甚だしいコードですが、並列処理なのにスイッチされない理由は気になります。
そういうわけで調べていると、参考に上げたStackOverflowが当たりました。これによると、

 - Goのgoroutineのスケジューラはノンプリエンプティブ（協調型マルチタスク）である
 - 主に、以下の契機でスケジューラに制御がわたり、スイッチが起こされる
  - アンバッファなチャネルへの読み書き
  - システムコール呼び出し
  - メモリアロケーション
  - time.Sleep()が呼ばれる
  - runtime.Gosched()が呼ばれる

との事でした。
そういうわけで一見落着したかと思いましたが、busy()を以下の用に書き換えて追試した所、

```go
func busy() {
	for i:=0; i<1e8; i++ {
	}
}
```

```shell-session:output
hello
fatal error: all goroutines are asleep - deadlock!
```

上手く動いてしまい、コードの期待通りデッドロック警報がでてしまいました。
<del>いやでもこれはおかしい。先と同じビジーループであって、スケジューラに拾わせに行くタイミングが存在しないからです。</del>
 **コレは誤認でした、コメント参照**

不思議に思っていたんですが、よく見るとstackoverflowの解答時期がちょっと古かったので、念の為Go 1.2のリリースノートに当たってみました。

>
**Pre-emption in the scheduler**
In prior releases, a goroutine that was looping forever could starve out other goroutines on the same thread, a serious problem when GOMAXPROCS provided only one user thread. In Go 1.2, this is partially addressed: The scheduler is invoked occasionally upon entry to a function. This means that any loop that includes a (non-inlined) function call can be pre-empted, allowing other goroutines to run on the same thread.

ビンゴ！
インライン関数になっていなければ、スイッチできるようになったらしいです。
＃ インライン関数はgcが最適化時に勝手に作る

では、本当にbusy()インライン関数化されたためにスイッチされなかったのか、gcに"-m"オプションをつけて最適化状態を確認していきます。

```shell-session
umisama-X1c{umisama}% go build -gcflags -m test1.go
# command-line-arguments
./test.go:11: can inline func·001
./test.go:11: func literal escapes to heap
./test.go:15: main make(chan int, 0) does not escape
```

11行目はprintしている関数なので、busy()はインライン化されていませんでした。
アタリが外れてしまいました。

そういうわけで、Go 1.2で入ったスケジューラ周りの変更を読みます。恐らく、リリースノートにあったスイッチに関する変更はこのコミットだと思われます。
https://code.google.com/p/go/source/detail?r=575afd15c877

diffを読むと、当該の変更は主にスタック操作時に入ったことがわかります。
「for(){}」と書くと純粋なJUMPになり、スタックを触りません。したがって、スイッチされる契機を得ることは出来なさそうです。
逆に、ループ回数を計算する場合は変数を触る->スタックを触ったため契機を得た模様。

自信は無いけど多分そんな感じ。
とりあえずスッキリした。

# 参考
http://stackoverflow.com/questions/17953269/go-routine-blocking-the-others-one
http://golang.org/doc/go1.2
https://code.google.com/p/go/issues/detail?id=543
unite-haddockでhoogleをいい感じにプレビューする

# はじめに

vimと[unite-haddock](https://github.com/eagletmt/unite-haddock)プラグインを使うとhoogleでAPIを検索してブラウザでドキュメントを開くことができます。
これはこれで便利なのですが、vimからブラウザに切り替わるので若干の使いにくさを感じていました。
そこでドキュメントもvimでプレビューする機能を作成し、無事に取り込んでもらえました。

# 操作手順

## hoogleソースを開く

コマンドラインモードで以下のコマンドを実行します。
デフォルトは部分一致検索です。

```vim
:Unite hoogle
```

完全一致検索したい場合は引数に`exact`を追加します。

```vim
:Unite hoogle:exact
```
![cmdline.png](https://qiita-image-store.s3.amazonaws.com/0/8995/af434438-4102-fa81-5001-d0e0ba18298a.png)

## APIを検索する

部分一致検索で`google`を検索してみます。

![unite.png](https://qiita-image-store.s3.amazonaws.com/0/8995/9cce018a-bd50-6788-bfc9-8e51db784e23.png)

## ドキュメントをプレビューする

ドキュメントを開きたいAPIにカーソルを移動して`p`を押すとプレビューウインドウに表示されます。
プレビューウインドウを閉じるときは`Ctrl-W Ctrl-Z`もしくは`:pclose`を実行します。

![preview.png](https://qiita-image-store.s3.amazonaws.com/0/8995/74bddc29-368a-5eec-644d-81903a2e2089.png)

## プレビューを自動表示する

unite.vimの`-auto-preview`オプションを指定すると検索結果一覧にカーソルを移動するだけでプレビューを表示することができます。

```vim
:Unite -auto-preview hoogle
```
Middleman でも部分テンプレート活用したい！

# 部分テンプレート (partial) を使いたい。

Rails では `render :partial => "template_name"` で部分テンプレートを利用できますが、
Middleman でも同様に部分テンプレート機能が使えます。
ただし、Middleman の場合は以下の方法で部分テンプレートを呼び出します。
(以下、ビューのファイル形式は HAML で説明します。)

#### 呼び出し元

`partial` メソッドでテンプレートを描画する。
(Rials の場合と同様に) 引数にテンプレートのファイル名を指定する。

```haml:source/index.html.haml
.mami-tomoe
  = partial :tiro
```

#### 呼び出し先 (部分テンプレート)

(Rials の場合と同様に) ファイル名の先頭にアンダースコアを付与する。

```haml:source/_tiro.html.haml
- 5.times do
  .special= "ティロ・フィナーレ！"
```

# 部分テンプレートに引数を渡したい。

これまた Rails の部分テンプレートと同様に、部分テンプレートに引数を渡せます。
`:locals` というオプションに任意の key, value を渡します。

```haml:source/index.html.haml
.mami-tomoe
  = partial :tiro, locals: { type: "デュエット" }
```

```haml:source/_tiro.html.haml
- 5.times do
  .special= "ティロ・#{type}！"
```

上記の例の場合、`type` を必ず指定しなければいけません。
指定しなかった場合は、変数 `type` を呼び出す際に `NameError` となります。

# 引数を省略した場合はデフォルト値を入れたい。

前述の例に `locals` で渡す値を増やしました。

```haml:source/index.html.haml
.mami-tomoe
  = partial :tiro, locals: { type: "デュエット", length: 3 }
```

```haml:source/_tiro.html.haml
- length.times do
  .special= "ティロ・#{type}！"
```

ただし、上記の例で毎回 `length` を指定するのは面倒だなぁ…。
指定しない場合はデフォルト値を入れたい。でも渡さないと `NameError` が…。
そのような時に役立つのが、部分テンプレート内での `locals` です。

```haml:source/index.html.haml
.mami-tomoe
  = partial :tiro, locals: { type: "デュエット" }
```

```haml:source/_tiro.html.haml
- legnth = locals[:length] || 5
- length.times do
  .special= "ティロ・#{type}！"
```

動いた！ ✌('ω'✌ )三✌( 'ω' )✌三( ✌'ω')✌
Draperでdecorateした元のオブジェクトを参照する

decorateしたもののメソッド(例えば`User#name`)を呼ぼうとしたら、`NoMethodError`と出てきてしまった。

#最初の方法

```rb
<% (@user.methods - Object.new.methods).each do |method| %>
  <%= method %><br>
<% end %>
```

で見ると、
`user, object, model, source`
なるものを発見。どうやらdecorateする元らしい。なので、

```rb
user.object.name
```

とすれば動くようになった。

#あとで調べると…

http://qiita.com/tachiba/items/6f0d56598de639adae1d#3-5
https://github.com/drapergem/draper#delegating-methods

を見るに、

```rb
class UserDecorator < Draper::Decorator
  delegate_all
end
```

とすればいいらしい。
【Play】PlayFramework 2.2.1 GlobalSettingsの利用の実際【Scala】


#ポイント

* 2.1.xとは記載が変わっているので注意

	[2.1.xの書き方](http://www.playframework-ja.org/documentation/2.1.5/ScalaGlobal)
	[2.2.xの書き方](http://www.playframework.com/documentation/2.2.1/ScalaGlobal)

* 開発環境ではPlayFrameworkデフォルトのエラーページが表示したい。 __本番環境でだけ、GlobalSettingsの設定が生きてほしい__←これが重要

#本番環境のGlobalSettingsの用意

```[project-name]/app/ProductionGlobal.scala

import play.api._
import play.api.mvc._
import play.api.mvc.Results._
import scala.concurrent.Future

/**
 * User: takudo
 * Date: 2014/01/19
 * Time: 22:21
 */
object ProductionGlobal extends GlobalSettings{

  /**
   * エラーページを用意します。
   */
  override def onError(request: RequestHeader, ex: Throwable) = {
    //2.1.x系とは記述が異なるので注意。
    Future.successful(InternalServerError(
      //ビューファイルは適宜自分のところに用意してください。
      views.html.error.error()
    ))
  }

  /**
   * わかり易い例としてnot found ページを用意します。
   */
  override def onHandlerNotFound(request: RequestHeader) = {
    Future.successful(NotFound(
      views.html.error.not_found()
    ))
  }

}

```

# 設定ファイルの準備

* application.confは開発用、本番用などで分ける。

例：application.confは共通設定、dev.confが開発用、prod.confが本番用とする。

```[project-name]/conf/application.conf

application.secret="xxxxxxxxxx"

```


```[project-name]/conf/dev.conf

include "application.conf"

hoge.hoge="開発環境特有の設定"

```

```[project-name]/conf/prod.conf

include "application.conf"

hoge.hoge="本番環境特有の設定"

#これが重要
application.global="ProductionGlobal" #グローバルオブジェクトのオブジェクト名を記述する。

```

#起動

##開発環境

```shell
cd /path/to/project
play debug
> run "-Dconfig.file=conf/dev.conf"
```
ブラウザで、ルート定義していないURLにアクセスして、 __デフォルトのAction not foundページが出る__ ことを確認する。


##本番環境

```shell
cd /path/to/project
play clean stage
target/unversal/stage/bin/[project-name] -Dconfig.file=conf/prod.conf
```
ブラウザで、ルート定義していないURLにアクセスして、 __自分の用意したNot foundページが出る__ ことを確認する。
postgresにおけるtemplate

postgresにおけるデータベースを作成するという動作は既存のデータベースからのコピーに他ならない。デフォルトではtemplate0とtemplate1というデータベースがあり、何も指定しないとtemplate1からのコピーになる。

### template0
あるpostgresのバージョンにおける標準のデータベースになる。基本的なオブジェクトが入っており、変更することはできない。

### template1
ユーザが変更できるテンプレートデータベースである。たとえば社内の共通ライブラリ等をこのデータベースに入れておくことで、新しく作成したデータベースにライブラリが含まれるようになる、という使い方ができる。

### 参考
http://www.postgresql.jp/document/9.3/html/manage-ag-templatedbs.html
Go言語でスライスとか文字列関係の勉強をしてみた


とても基本的なことなんだろうけど、普段自分のコードで書いたことなかったので調べてみた。適宜追加するかもしれない。

注意として、「こういう書き方がGoっぽい書き方かどうか分からない」という前提で読んで欲しい。

# []string型のスライスを一つの文字列にする

単純に文字列同士を繋げるのは+演算子で出来るので、今回は文字列を格納したスライスを一つの文字列にする方法に関してやってみた。

```join.go
package main

import (
        "fmt"
        "strings"
)

func main() {
        s := []string{"ようこそ", "世界"}
        fmt.Println(strings.Join(s, ""))
}
```

こうすれば、`ようこそ世界`と出力されるはず。

# []string型のスライスの要素をソートする

sortパッケージを用いる。

```sort_asc_1.go
package main

import (
	"fmt"
	"sort"
)

func main() {
	s := []string{"運", "いう", "ウン", "アナタ", "あなた", "うん", "言う", "イウ", "貴方"}
	sort.Strings(s)
	fmt.Println(s)
}
```

こう書くと```[あなた いう うん アナタ イウ ウン 言う 貴方 運]```と昇順に出力される。

こういう風にも書ける。

```sort_asc_2.go
package main

import (
	"fmt"
	"sort"
)

func main() {
	s := []string{"運", "いう", "ウン", "アナタ", "あなた", "うん", "言う", "イウ", "貴方"}
	
	sort.StringSlice(s).Sort()
	fmt.Println(s)
}
```

降順(文字列でもこう言うのだろうか？)の場合は下のようにするといいみたい。理由は知らない。もっと効率よくて分かりやすい書き方があるかもしれない。

```sort_desc.go
package main

import (
	"fmt"
	"sort"
)

func main() {
	s := []string{"運", "いう", "ウン", "アナタ", "あなた", "うん", "言う", "イウ", "貴方"}
	
	sort.Sort(sort.Reverse(sort.StringSlice(s)))
	fmt.Println(s)
}
```

こうすると`[運 貴方 言う ウン イウ アナタ うん いう あなた]`と出力される。ちゃんと降順になっているのがわかる。

# 疑問
スライスの要素を逆順にする関数とかメソッド(Pythonでいうreverseメソッドにあたるもの)、ないんですか？　軽く調べても見つからないんですが？
templateな引数に参照を渡す

たとえば以下のコード、期待通りには動きません。

```cpp
#include <iostream>

template<typename Function, typename T>
void do_it(Function f, T arg) { f(arg); }

int main() {
  auto twice = [](int& x) { x *= 2; };
  int n = 123;
  do_it(twice, n); // nが2倍になる...
  std::cout << n << std::endl;  
}
```

ダメなんですね、do_itの第二引数には(int&ではなく)intが渡るのでnを書き換えることができません。
`<functional>` に定義された ref, cref を通すことで 参照/const参照 を引き渡すことができます。

```cpp
#include <iostream>
#include <functional>

template<typename Function, typename T>
void do_it(Function f, T arg) { f(arg); }

int main() {
  auto twice = [](int& x) { x *= 2; };
  int n = 123;
  do_it(twice, std::ref(n)); // ← 参照を渡す!
  std::cout << n << std::endl;  
}
```
../completions/plenv.bash:16: command not found: completeの対処法

shellにログインしたときにこのようなエラーが出ることがある。

```shell-session
~/.plenv/libexec/../completions/plenv.bash:16: command not found: complete
```

## 解決方法
~/.zshrc などで下記のようにする。

```diff
-  eval "$(plenv init -)"
+  eval "$(plenv init - zsh)"
```
DialogFragment の中で使う DialogInterface.OnClickListener の取り扱い

DialogFragment で AlertDialog などを作った時、OK や Cancel 等のボタンをおした時のイベントハンドラ(`DialogInterface.OnClickListener`)の実装をどうするかという話。

1. `DialogFragment` はシステムによって破棄・復帰される可能性がある為、コンストラクタや setter を用いて `DialogInterface.OnClickListener` は渡せない
2. `DialogInterface.OnClickListener` は `Parcelable` でも `Serializable` でも無いので、`Bundle` に詰めることが出来ない

以上の事から、`DialogInterface.OnClickListener` の実装方法は以下のようになる。

- `Activity` で `DialogInterface.OnClickListener` を `implements` し、`DialogFragment#onAttach(Activity)` をオーバライドして、引数の `Activity` をキャストしてメンバ変数に保持しておく

または

- `Activity` で `DialogInterface.OnClickListener` を `implements` し、`DialogFragment#onCreateDialog(Bundle)` の実装の中で、`DialogFragment#getActivity()` で得られる `Activity` をキャストして使う

のいずれかになる。

もし `Activity` が `DialogInterface.OnClickListener` を `implements` したく無い場合は、別のフレームワークを使って対処する。

- DI コンテナ（RoboGuice や Proton など）を用い、イベントを受けた時の処理内容を持つクラスのインスタンスが `Activity` と `DialogFragment` で同じものをインジェクトされるようにすれば、`Activity` がダイアログのボタンのクリックハンドラを実装する必要がなくなり、`DialogFragment` でイベント処理を完結できる

あるいは

- イベントバスを用いることで、クリックイベントのハンドリング自体は `DialogFragment` で行い、`DialogInterface.OnClickListener` の実装で発火したイベントを `Activity` で受け取ることで、インタフェースの実装をしなくて済む

もしくは

- イベントを受けた時の処理内容を持つクラスが `Parcelable` を `implements` するようにし、`DialogFragment` の初期化時に `Activity` から `Bundle` を介して渡す

`Parcelable` を `implements` するよりは、DI コンテナやイベントバスを使うほうが何かと便利ではある。
subprocess.Popenでgit

```py:git_submodule_update.py
# vim: set fileencoding=utf-8 :
# Created:  2014-01-19
# Git submodule update within python subprocess
import os
import subprocess


GIT = "git"
SUBMODULE = "submodule"
FOREACH = "foreach"


class Git(object):
    def __init__(self):
        self._dir = ""
        pass

    @property
    def dir(self):
        return self._dir

    @dir.setter
    def dir(self, dir):
        self._dir = dir

    def submodule_update(self):
        pr = subprocess.Popen([GIT, SUBMODULE, FOREACH, 'git checkout master; git pull'],
                              cwd=os.path.dirname(self.dir),
                              stdout=subprocess.PIPE,
                              stderr=subprocess.PIPE,
                              shell=False)
        (out, error) = pr.communicate()
        return out, error

if __name__ == "__main__":
    APP_ROOT = os.path.dirname(os.path.abspath(__file__))
    dir = os.path.join(APP_ROOT, ".git")
    git = Git()
    git.dir = dir
    git.submodule_update()
```
[T.B.D.]C++で実行中に変数名を取得したい

**後日改訂予定。＃一部私情により記述削除**

C++で変数名を取得する。  
実行時に構造体などの変数名を知りたかったため。


```cpp
#include <iostream>
#include <stdio.h>
#include <string.h>

// For get variable name.
#define TO_STRING(VariableName) # VariableName
static const int MAXLENGTH = 256;

typedef struct {
    char charArray[MAXLENGTH];
} FooStructure;

typedef struct {
    int value;
    FooStructure fooSt;
    FooStructure *pFooSt;
} TestMacroStructure;

int main(int argc, char *argv[]) {
    int value = 3;

    // Get variable name
    std::string str = TO_STRING(value);

    // Display variable name.
    std::cout << str << std::endl;
    TestMacroStructure checkMacro;
    std::cout << TO_STRING( checkMacro.value) << std::endl;
    std::cout << TO_STRING( checkMacro.fooSt) << std::endl;
    std::cout << TO_STRING( checkMacro.fooSt.charArray) << std::endl;
    std::cout << TO_STRING( checkMacro.pFooSt->charArray) << std::endl;


    return 0;
} 
```

make後の出力結果は以下の通り。  

```bsh
budougumi0617@SERVER:~/> ./getVariableName
value
checkMacro.value
checkMacro.fooSt
checkMacro.fooSt.charArray
checkMacro.pFooSt->charArray
```


----------

## 参考URL
**変数名取得マクロ**  
[http://faithandbrave.hateblo.jp/entry/20071116/1195228361](http://faithandbrave.hateblo.jp/entry/20071116/1195228361)
REPL(play console)でアプリケーションのconfigを扱う

rails consoleだと、railsが設定を読み込んで起動したような状態なのですが、play consoleは本当にただscalaのREPLが起動しているだけのようです。

なので、

```Play.configuration.getString("application.langs")``` こんなコードが入ったClassを呼び出したりすると、

```scala
error: You do not have an implicit Application in scope. 
If you want to bring the current running Application into
 context, just add import play.api.Play.current
              Play.configuration.getString("application.langs")
```

こんな事になったりします。

どうやら```play.api.Play.current``` が使えるようになっていないとダメだということみたいです。

## 対処

play.core.StaticApplicationというクラスをREPL上で生成する必要があるようです。
そしてimplicitにしておく必要があるようです。

```scala:REPL
scala> import play.core.StaticApplication
import play.core.StaticApplication

scala> implicit val app = new StaticApplication(new java.io.File(".")).application
[info] play - Application started (Prod)
app: play.api.DefaultApplication = play.api.DefaultApplication@16abc450
```

なんだかめんどくさいですね。
rails newでmysql、haml、rpsecを使う

* DBでmysqlを使う、test::unitを組み込まない

```
rails new [app_name] -d mysql --skip-test-unit
```

* rspecとhamlを使う

```ruby:Gemfile
group :development, :test do
  gem 'rspec-rails', '~> 3.0.0.beta'
end

gem 'haml-rails'
```

```
bundle install
```
Railsで日本語を含むURLを扱う

/こんにちは.txt とブラウザにうつと、 /%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF.txt とリクエストが飛びます。これを Controller で /こんにちは.txt に戻すだけのことに若干ハマったのでメモしておきます。

```rb
URI.unescape(request.path)
```

上記のようにしても正しくデコードできません。これは `request.path.encoding` が `#<Encoding:ASCII-8BIT>` になっているためです。これが正しいやり方なのかどうかはわかりませんが、以下のようにするとうまくいきました。

```rb
URI.unescape(request.path.force_encoding("UTF-8"))
```
pythonでホームディレクトリの取得


よく忘れるのでメモ

```python:home_directory.py
import os
print os.environ['HOME']
```
--- 
### 追記

winにも対応するなら

```py
from os.path import expanduser
home = expanduser("~")
```

参考: https://stackoverflow.com/questions/4028904/how-to-get-the-home-directory-in-python
ComboBoxとListBoxを縦に並べたときのListBoxのちらつきを抑止する

複数の名前付きのリストから一つを選択したときにその内容を表示するために、ComboBoxとListBoxを縦に並べることがあります。このときListBoxに含まれているアイテムを選択した後に、ComboBoxをドロップダウンすると、アイテムを挿入し直したかのようなちらつきがListBoxに起こります。二回目以降のドロップダウンではこれは起こりません。

![ff59bf4e6c89b1865ef150ea877e9953.gif](https://qiita-image-store.s3.amazonaws.com/0/13667/bd4f0ca4-1583-b21d-a267-a6bdecdad812.gif)

この問題を解決する方法は、stacoverflowの[vb.net listbox flicker when selecting combobox](http://stackoverflow.com/questions/17866158/vb-net-listbox-flicker-when-selecting-combobox)の回答にあります。以下のようにListBoxからフォーカスが失われるときにUpdateを呼んでおくだけです。ComboBoxにフォーカスが移る前に一度ListBoxを描画しておくと、ComboBoxのドロップダウンでちらつきが起こるのを防げるようです。よくこんな方法を思い付いたものです。

```java
    private void listBox1_Leave(object sender, System.EventArgs e)
    {
        listBox1.Update();
    }
```
Vimでシンタックスのチェック

Vimを仕事で使っているのですがCSSのエラーに気づかずコミットして
しまうことがあったので文法ミスに気づきやすくするツールを調べました。

Syntastic: [Syntastic](https://github.com/scrooloose/syntastic "Syntastic")
をインストール。

C言語のファイルを開いて適当にエラーを書いてみるとチェックしてくれるが
CSSの場合はうまくいかない。

CSSのファイルを開いてコマンド:SyntasticInfoを実行すると下記が表示された
Syntastic: active mode enabled
Syntastic info for filetype: css
Available checker(s): 
Currently enabled checker(s): 

「Available checker」や「Currently enabled checker」がない!

色々調べると[ここ](https://github.com/scrooloose/syntastic/wiki/Syntax-Checkers "Syntax-Checkers")で紹介されているcsslintやprettycssのインストールが必要なことがわかった

npm をインストールして下記を実行してみた。
npm install -g csslint
npm install -g PrettyCSS

CSSファイルでもう一度やってみるとまだだめだ。
ここでハマってしまいましたがnpmでインストールしたものはパスを通してやらなければいけないことが
わかりました。.bash_profileに下記を追加するとうまくいきました。

export PATH="/usr/local/share/npm/bin:$PATH"
ビューのレンダリングが始まる前に特定の処理を完了させたいとき

やり方はいろいろあると思います

ひとつは、$routeProviderのresolveを使う方法

あるURLに飛ぶ前に、必ず現在のユーザの情報をhttpで取ってきて$scopeに入れたい。
入れ終わってからビューを描画したいという状況だとします

```html:index.html
<h2>demo</h2>
<div ng-app="app">
    <script type="text/ng-template" id="sample.html">
        <p>sample</p>           
        {{user}}
    </script>
    <div ng-view></div>
</div>

```

```js:app.js
angular.module('app', ['ngRoute']).
config(function($routeProvider) {
    $routeProvider.when('/', {
        templateUrl: 'sample.html',
        controller: function($scope, currentUser){
            $scope.user = currentUser;
        },
        resolve: {
            currentUser: function($q, $http) {
                deferred = $q.defer()
                $http(url: '/yourappapi/v1/current_user', method: 'GET')
                .success(function(res){
                    deferred.resolve(res.user)
                });
                return deferred.promise;
            }
        }
    });
});
```

routeProviderのresolveオプションはcontrollerにinjectionされるオブジェクトのmapです
オブジェクトはpromiseを指定することになっており、このpromiseが解決したタイミングで
controllerにinjectionされます。
このため、API経由でユーザ情報を無事に取ってこれた後にcontroller内のコードが走ります。

実際には、良く使う初期化処理である場合は
resolveの処理をserviceに追い出してやった方が見通し良いでしょう

```js:current_user_service.js
angular.module('app').factory('getCurrentUser', function($q, $http) {
    deferred = $q.defer();
    $http(url: '/yourappapi/v1/current_user', method: 'GET')
    .success(function(res) {
        deferred.resolve(res.user);
    });
    return deferred.promise;
});
```

```js
$routeProvider.when('/', {
    templateUrl: 'sample.html',
    controller: function($scope, currentUser){
        $scope.user = currentUser;
    },
    resolve: {
        currentUser: function(getCurrentUser) { return getCurrentUser; }
    }
});


```

test
MAMPでssl対応する方法

## sslの証明書(オレオレ証明書)を作成する

個人利用のsslの場合、特に今回のようなローカルのPCにMAMPなどでhttpサーバを立ち上げる場合などは、無料の自己証明書で十分です。ssl、自己証明書、オレオレ証明書などで検索すれば、たくさんのサイトが検索にかかります。ここでは作成に必要なコマンドのみをメモで残しておきます。
なお証明書は下記のフォルダに作成するものとします。

- /Applications/MAMP/conf/ssl

```bash
cd /Applications/MAMP/conf/ssl
openssl genrsa -des3 -out server.key 1024
openssl req -new -key server.key -out server.csr
openssl x509 -in server.csr -days 365 -req -signkey server.key > server.crt

cp server.key server.key.bak
openssl rsa -in server.key.bak -out server.key
```

- 最初のserver.key作成時はいろいろと質問が表示されます。Common Nameの質問だけlocalhostを入力し、その他はデフォルト(Enter)でOKです。
- 最後の2行は、証明書のパスフレーズを外すための処理です。ローカルのサーバなので、外しておいた方が便利でしょう。


## 設定ファイルを書き換える

下記の行を編集して、httpd-ssl.confが読み込まれるようにします。

```/Applications/MAMP/conf/apache/httpd.conf
Include /Applications/MAMP/conf/apache/extra/httpd-ssl.conf
```

下記の行を編集して、作成した証明書を読み込むようにします。ポート番号も443に変えます。

```/Applications/MAMP/conf/apache/httpd.conf
Listen 443
SSLCertificateFile "/Applications/MAMP/conf/ssl/server.crt"
SSLCertificateKeyFile "/Applications/MAMP/conf/ssl/server.key"
```

## /etc/sudoersの編集

上記のssl証明書作成と、設定ファイルの変更だけではMAMPを開始することができません。これはポート番号443のサービスを開始するには管理者の権限が必要なためです。
MAMPの開始では下記のスクリプトが呼ばれています。

```/Applications/MAMP/bin/startApache.sh
# /bin/sh
/Applications/MAMP/Library/bin/apachectl start
```

試しにこれを実行してみると、443のポートを使用するサービスを開始できないため、Permissionのエラーが表示されます。
そこで、上記のスクリプトで実行されている、apachectlをsudo付きで実行した場合にパスワードが入力不要にします。

※セキュリティの問題もありますので、十分に注意して自己責任でお願いします。

```bash
sudo visudo
```

> username ALL=(ALL) ALL
> username ALL=(ALL) NOPASSWD: /Applications/MAMP/library/bin/apachectl

- /etc/sudoersを編集する場合は、必ずvisudoコマンドを使用します。
- 上記の2行を追加します。usernameはMAMPを実行するユーザ名です。  

## スクリプトを書き換える

```/Applications/MAMP/bin/startApache.sh
# /bin/sh
sudo /Applications/MAMP/Library/bin/apachectl start
```

```/Applications/MAMP/bin/stopApache.sh
# /bin/sh
sudo /Applications/MAMP/Library/bin/apachectl stop 
```

上記２つのファイルにそれぞれsudoを追加します。
[Qiita]Groovyのシンタックスハイライトでバグ？

なんか見つけたけど、こういうのはどこに連絡すればいいのだろう。

```groovy:Groovyコード
def hoge = true
def fuga

if (hoge) {       // <= if 文の直前に def で変数が定義されていて、
    fuga = 'FUGA' //    行末にセミコロンやコメントがない場合、
} else {          //    if がメソッド定義と同じ青色でハイライトされてる
    fuga = 'fuga'
}

/////////////////////////////////////////////////////////////////
def method() {}   // <= メソッドは青字でハイライト

/////////////////////////////////////////////////////////////////
def hoge = true
def fuga;

if (hoge) {       // <= セミコロンがあれば緑の太字でハイライト
    fuga = 'FUGA'
} else {
    fuga = 'fuga'
}

/////////////////////////////////////////////////////////////////
def hoge = true
def fuga          // comment

if (hoge) {       // <= コメントがあれば緑の太字でハイライト
    fuga = 'FUGA'
} else {
    fuga = 'fuga'
}

/////////////////////////////////////////////////////////////////
def hoge
aaa () {}         // <= if 文以外も

def hoge;
aaa () {}
```

実害はないので困ることはないけど。
StoryBoardでUIパーツを配置できない時にチェックするべきたったひとつのポイント

ストーリーボードでUILabelなどを配置したいのに「＋」のアイコンが出ない時ありますよね？
すごく単純なことなんだけど、以下を確認してみてください。

**配置する為のViewが、置こうとしてるUIパーツの下に無い。**

これで何回も「あれ？あれ？なんで？」ってなりました。
Sidekiq を利用したメール送信の遅延処理 (Rails4)


1. redis をインストール.(homebrew 使用)

```
$ brew install redis```


2. Rails アプリケーションへの組み込み

```Gemfile
gem 'sidekiq'
```

```$ bundle install
```


3. redis 起動

```$ redis-server /usr/local/etc/redis.conf```


4. sidekiq 起動

```$ bundle exec sidekiq```

5. Rails アプリケーションの書き換え
sidekiq を インストールすることで, ActionMailer クラスに delay メソッドが追加されている．


```
# sidekiq 導入前

#UserMailer.hello.deliver# sidekiq 導入後．deliver メソッドは不要になる．

UserMailer.delay.hello```

面倒くさいけど，難しくはないって感じ． 

業務システムでメール送信→画面遷移となっているところでメール送信による遅延が気になっていたので，遅延処理の方法を探していた．
Rails4 の ActiveSupporet に Queue が導入されて，とか，rack_after_reply って gem があってとかも試したけどダメだったよ…．

*参考リンク*

[Using Sidekiq to send emails asynchronously](http://blog.remarkablelabs.com/2013/01/using-sidekiq-to-send-emails-asynchronously)

[#366 Sidekiq](http://railscasts.com/episodes/366-sidekiq?language=ja&view=asciicast)
prawn でパスワード保護した pdf を origami で開きたい、ができない

タイトルそのまんまです。prawn でパスワード保護した pdf を origami で開こうとしたら、以下のエラーが…

```
（省略）
[info ] ...Propagating types...
[info ] Warning: This document contains encrypted data!
C:/Ruby200/lib/ruby/gems/2.0.0/gems/origami-1.2.6/lib/origami/encryption.rb:118: in `decrypt': Document ID was not found or is invalid (Origami::EncryptionError)
```

Document ID が見つからない or 不正と言われるけど、prawn での PDF 生成時に何か追加情報が必要なんだろうか？？？
探したいフォルダに1秒でたどり着ける爆速ショートカット

# こんなことありませんか

    いつも使うファイルなんだけど、どこにあるかつい忘れちゃう
    探しているフォルダの階層が深くてたどり着くまでにたくさんクリックしないといけない

<b>→どんなファイルでも1秒でアクセスできるようになります！！</b>

簡単な設定さえ済ましてしまえば、あとはいくらでも登録できます。
超簡単です。まずは使用イメージをどうぞ。

(Windows限定)

#使用イメージ

たとえば、開きたいフォルダがこのような階層だったとします。

「C: \ 仕事フォルダ \ 案件1 \ 地区A \ 2014 \ お気に入り」

これをCドライブから開こうとすると・・・

Cドライブ
→「仕事フォルダ」をクリック
→「案件1」をクリック
→「地区A」をクリック
→「2014」をクリック
→「お気に入り」をクリック

こんな風に目当てのフォルダにたどり着くまでに5回以上もクリックしないといけません。
さらに、フォルダがたくさんあって迷ったりしたらさらに時間が・・・
これがよく使うファイルだと、非常に時間がもったいないですね。

これが、下のように「ファイル名を指定して実行」(Windowsボタン+Rで呼び出せます)を起動して・・・

![001](http://cdn-ak.f.st-hatena.com/images/fotolife/l/little_hands/20140117/20140117001411.jpg)

ある文字列を入れてEnterを押すと・・・

![002](http://cdn-ak.f.st-hatena.com/images/fotolife/l/little_hands/20140117/20140117002027.jpg)

開けた！！

「Win+R」→"oki"と入れて"Enter"
1秒で開けました！！

この"oki"の部分は自由に設定できるんです。
今回は"お気に入り"の頭文字をとって"oki"にしてみました。


#設定方法

設定は以下の手順です
1. ショートカット用を保存するためのフォルダを作る
2. 作ったフォルダにショートカットを作成して、使いやすい名前に変更する
3. 環境変数を設定する(ここがキモです)

順に説明していきます

1.ショートカット用を保存するためのフォルダを作る

まず、どこでもいいのでフォルダを作成します。
今回は例として、Cドライブ直下に「shortcut」フォルダを作ります。

1.1. Cドライブを開いて右クリック → 新規作成 →フォルダー
1.2. フォルダ名を"shortcut"にする
1.3. 作ったフォルダを開く

![003](http://cdn-ak.f.st-hatena.com/images/fotolife/l/little_hands/20140117/20140117002808.jpg)
2.作ったフォルダにショートカットを作成して、使いやすい名前に変更する

2.1 作成したフォルダにショートカットを作成

マウスがある位置をクリックして・・・
![004](http://cdn-ak.f.st-hatena.com/images/fotolife/l/little_hands/20140117/20140117003252.jpg)

1.で作ったフォルダまでドラッグして話すと、ショートカットができます
![005](http://cdn-ak.f.st-hatena.com/images/fotolife/l/little_hands/20140117/20140117003325.jpg)

完成
![006](http://cdn-ak.f.st-hatena.com/images/fotolife/l/little_hands/20140117/20140117003422.jpg)

「ファイル名を指定して実行」画面で呼び出しに使う文字列(ここでは"oki")にファイル名を変更
![007](http://cdn-ak.f.st-hatena.com/images/fotolife/l/little_hands/20140117/20140117003613.jpg)

さて、これでショートカットの準備はOKです

3.環境変数を設定する

まず、
Windowsボタン
→コンピューター
→システムのプロパティ(window上部左側)
→システムの詳細設定(window左側)
で「システムのプロパティ」画面を開きます

→「詳細設定」タブ
→「環境変数」ボタン
を押すと、以下の画面が出ますね

ここで上の方にある「新規」ボタン(下記画像でカーソルが乗っているボタン)をクリックしましょう
![008](http://cdn-ak.f.st-hatena.com/images/fotolife/l/little_hands/20140118/20140118232552.jpg)

ここで、
変数名："PATH"
変数値：先ほどのショートカットフォルダのパス
を入力し、「OK」をクリックします
![009](http://cdn-ak.f.st-hatena.com/images/fotolife/l/little_hands/20140118/20140118232917.jpg)

→これで設定は完了！！

あとは使用イメージの通り、
Win+Rで「ファイル名を指定して実行」を呼び出して、"oki"と入力してEnter!!
![010](http://cdn-ak.f.st-hatena.com/images/fotolife/l/little_hands/20140117/20140117001411.jpg)

これですぐに呼び出したいフォルダが開けます！

他のショートカットは、先ほどのショートカットフォルダにリンクを追加して、その都度呼び出したい名前に変更すればOK!!
あとは好きなだけ自分のよく使うフォルダへのショートカットを追加しましょう！！
フォルダだけではなく、ファイルに直接ショートカットも可能です。

#Tips

ショートカットのネーミングは、ある程度自分でネーミングルールを決めておいた方が、呼び出すときに忘れません。

例：基本は頭文字の2文字にする

    firefox → "fi"
    My Document　→ "my"
    ダウンロード → "do”

例：複合後は、それぞれの文節から1音ずつ取る

    ruby study → "rsu"
    ショートカット → "shoc"
    2月案件 基本設計書 → "2ki"
    2月案件 詳細設計書 → "2sho"

などなど。
また、ショートカットフォルダ自体にもショートカットを作成しておくと、あとで追加するときに便利です。

#まとめ

いかがでしたでしょうか。
ちょっとした設定さえすれば、あとはいくらでも応用が利く上、相当な時間短縮をすることができます。
このショートカットはWindowsで作業をする限りいつでも使えるので、ぜひともtryしてみてくださいね。
テキストメモで箇条書きを簡単に書く方法

## はじめに
* 親指シフトのキーボードは圧倒的に少ないキーストロークで入力できる
* 左親指シフト、右親指シフト、小指シフトとあるので、打てる文字がたくさんある
  * いろいろ独自に定義できる。
* 箇条書きを書きやすいようにしたい
  * 全角スペース１文字をインデントにして、行頭を ■ とか ◇ とかでメモすると自分的に分かりやすい
* オリジナルな親指シフト配列は、セミコロンが BackSpace 、］ が Esc になっている
  * 押し間違えて面倒になる
  * BackSpace 、Esc は専用のボタンがあるから冗長
* 他、よく使う記号は押しやすくしたい

## 前提。やること。
* Windows 環境で [Yamabuki](http://yamakey.seesaa.net/) を使っている。
* 親指シフト配列
* 箇条書きは下記のルール
 * ４段までのネストなら下記の順に記号を使う
　　「■」、「◇」、「➤」、「-」
 * ５段になれば、一番上に、「§」 を使う
 * 最後の箇条書きは、たまに下記も使う。「✔」、「✘」
* 他にも一部記号を増やす。▼○☆♪＾
* 矢印もいっぱい。右矢印はよく使うから多め。「↑←↓→⇒➪」
* ＠ とか ＾ とかも打てるように邪魔じゃない位置に配置
* ※ とか ×、÷ とかもまずまず使うから配置しておく。

## 嬉しいこと
* １文字＝１ストロークというパラダイムは脳が楽
* 全角スペースのインデントは必ず深さがそろうので見やすい。
  * 半角スペースのインデントは、浅すぎるし、４回押すのとか面倒
* 使うのが全角文字ばかりなので、IME切り替えコストが減る。
* どんなメモツールでも適用できる。
  * 記号も見やすいし、インデント幅で悩むことも減る
  * エディタのサポートがなくても気にならない

## 定義
```:NICOLA(文字直接入力改).yab
;NICOLA配列（文字直接入力）
;http://nicola.sunicom.co.jp/spec/kikaku.htm


[ローマ字シフト無し]
'１','２','３','４','５','６','７','８','９','０','－','―','￥'
'。','か','た','こ','さ','ら','ち','く','つ','，','、','［'
'う','し','て','け','せ','は','と','き','い','ん','：','］'
'．','ひ','す','ふ','へ','め','そ','ね','ほ','・','＼'

[ローマ字左親指シフト]
'？','／','～','「','」','°','゠','▼','○','☆','♪','＾','➜'
'ぁ','え','り','ゃ','れ','ぱ','ぢ','ぐ','づ','ぴ','↑','⇒'
'を','あ','な','ゅ','も','ば','ど','ぎ','ぽ','←','↓','→'
'ぅ','ー','ろ','や','ぃ','ぷ','ぞ','ぺ','ぼ','➪','␣'

[ローマ字右親指シフト]
'；','＠','“','《','》','′','§','■','◇','➤','-','✔','✘'
'゜','が','だ','ご','ざ','よ','に','る','ま','ぇ','×','【'
'ヴ','じ','で','げ','ぜ','み','お','の','ょ','っ','※','】'
'ゎ','び','ず','ぶ','べ','ぬ','ゆ','む','わ','ぉ','÷'


[ローマ字小指シフト]
！,”,＃,＄,％,＆,’, （,）,無,＝,～,｜
Ｑ,Ｗ,Ｅ,Ｒ,Ｔ,Ｙ,Ｕ,Ｉ,Ｏ,Ｐ,‘,｛
Ａ,Ｓ,Ｄ,Ｆ,Ｇ,Ｈ,Ｊ,Ｋ,Ｌ,＋,＊,｝
Ｚ,Ｘ,Ｃ,Ｖ,Ｂ,Ｎ,Ｍ, ＜,＞,？,＿
```