OmniAICreator/Qiita-1.07M huggingface dataset:
tdタグにbackground-colorがセットされているとtrのbackground-colorが効かなく見えるのを解決する

最近ハマったのでメモ。

特定のtrタグにbackground-colorを付与しようとしたら効かない。試しにtdタグに付与してみると効く。

どうやら、下位のtdタグにbackground-colorがセットされていると、親のtrタグへbackground-colorをセットしても、 ~~無効になるようだ~~ tdのbackground-colorが優先されて、trのbackground-colorが見えなくなる。（追記：無効になるわけではなかったので修正しました。）

なお、以下の例でjQueryを使っているのは、既存のWebアプリ側でHTMLが構築されていて、後から操作するしかなかったため。

## background-colorが効かないパターン

```html
<style type="text/css">
#bg td {
  background-color: gray;
}
</style>
<script>
$(document).ready(function () {
  // trタグに対して一括でbackground-color指定
  $('tr').css('background-color', 'red');
});
</script>
<table>
  <!-- こっちにはbackground-colorが効かない -->
  <tr id="bg">
    <td>A</td>
    <td>B</td>
  </tr>
  <!-- こっちにはbackground-colorが効く -->
  <tr>
    <td>A</td>
    <td>B</td>
  </tr>
</table>
```

## background-colorが効かせるパターン
これを解決するには、tdタグのbackground-colorをtransparentにしてしまえば良い。

```html
<style type="text/css">
#bg td {
  background-color: gray;
}
</style>
<script>
$(document).ready(function () {
  // tdタグのbackground-colorを無効にする
  $('td').css('background-color', 'transparent');
  // trタグに対して一括でbackground-color指定
  $('tr').css('background-color', 'red');
});
</script>
<table>
  <tr id="bg">
    <td>A</td>
    <td>B</td>
  </tr>
  <tr>
    <td>A</td>
    <td>B</td>
  </tr>
</table>
```
AlfredでSlackのチャンネルを開く

[Alfred-Slack-Channels](https://github.com/akira-hamada/Alfred-Slack-Channels)

皆さんは[Slack](http://slack.com)でどのようにチャンネル間を移動していますか?
`command+k`? `option+↑↓`? `/open CHANNEL_NAME`?

上記の方法はいずれも `Slackを開く` -> `チャンネル移動` という2ステップを踏まなければいけません。しかし、どんなアプリを開いている時でも特定のチャンネルを一発で開くことが出来ます。そう、[Alfred](http://www.alfredapp.com/)ならね。

![screenshot whole](https://raw.githubusercontent.com/akira-hamada/Alfred-Slack-Channels/master/screenshot_whole.png)  
![screenshot incremental](https://raw.githubusercontent.com/akira-hamada/Alfred-Slack-Channels/master/screenshot_incremental.png)

## 変更点(2015-03-10)

- チャンネル一覧を`slack`ではなく`s`で開くよう変更 (workflow設定画面から変更可)
- チャンネル一覧にトピックを表示するよう実装
- TODOに複数チーム対応を追加

## 依存環境

Alfredで様々なスクリプトなどを実行、インポートするための[PowerPack](http://www.alfredapp.com/powerpack/)が必要です。これがない人は今すぐ買いましょう。使ってないならかなり損してます。本当に。

[Alfred PowerPack](http://www.alfredapp.com/powerpack/)

## 導入手順

以下のように、Workflowをダウンロードして、SlackのAPI Tokenを設定するだけ。

1. [Alfred-Slack-Channels](https://github.com/akira-hamada/Alfred-Slack-Channels/blob/master/Slack-Channels.alfredworkflow?raw=true)をダウンロードし、ダブルクリック
2. `update slack channels YOUR_SLACK_API_TOKEN`とAlfredでタイプして、Slackの[API Token](https://api.slack.com/)を設定して下さい。`YOUR_SLACK_API_TOKEN`の部分に入力すべきTokenは[Slack APIドキュメント](https://api.slack.com/web#authentication)のAuthenticationセクションにあります。
3. あとはAlfredで`s`とタイプするだけ。絞込み検索もできます。

チャンネル一覧はキャッシュしてるので、チャンネル名を変更したり、チャンネルが増減した時はまた`update slack channels YOUR_SLACK_API_TOKEN`して下さい

## 実装方法

最初の`update slack channels`でAPIを叩いてチャンネル一覧をキャッシュし(ruby)、選択されたチャンネル名をapplescriptでSlackの入力欄に自動入力しているだけ。
AppleScriptでかなり強引にやっているので、この辺は要改善(PR歓迎)

## TODO

- 複数チーム対応
- チャンネル切り替え処理の改善
- チャンネル一覧キャッシュ更新の自動化

AlfredのWorkFlowを一般公開するのは初めてなので、不具合や手順の抜けがあればお気軽にコメント下さい。

[Alfred-Slack-Channels](https://github.com/akira-hamada/Alfred-Slack-Channels)
FastladderをHerokuで動かしてNewRelicからcrawlerを定期的に起動させる


[livedoor Reader 終了に寄せて: Fastladder オープンソース版は GitHub で開発継続中です](http://blog.kyanny.me/entry/2014/10/03/011303)

https://github.com/fastladder/fastladder

どうせ長らく放置なんでしょ、と思ってたらRails最新版に追従してくれててありがたい限りでした。

HerokuにデプロイするボタンがあるのでHerokuで動かすところまでは一瞬。

## Basic認証をかける

全世界に公開するものではないので、RackのミドルウェアでBasic認証をかけた。

`config/environments/production.rb` の一番下あたりにこれを追加して、

```ruby
  config.middleware.use '::Rack::Auth::Basic' do |u, p|
    [u, p] == [ENV['HTTP_USER'], ENV['HTTP_PASSWORD']]
  end
```

Herokuの環境変数設定で `HTTP_USER` と `HTTP_PASSWORD` という環境変数をセットする。

## crawlerを起動する

これだけだとまだクローラーのプロセスが動いていない（Procfileにはcrawlerというプロセス定義があるけど、Herokuのがデフォで動かしてくれるのはworkerのため）。

crawlerを常時起動してしまうとwebとcrawlerで2プロセスになってお金がかかってしまうので、process-schedulerというのでこんなふうに夜の1時間だけクローラーをまわしていた。ギリギリ月々750 Dyno Hoursにおさまるらしい。

![Process_Scheduler.png](https://qiita-image-store.s3.amazonaws.com/0/5978/dc21f371-9d2a-e873-9c1d-d34118a4ef5d.png "Process_Scheduler.png")

自分の利用頻度的にはこれで十分なのだけど、この方法は結局やめることにした。（後述）

## NewRelicで監視

Herokuは1時間アクセスが無いとウェブのプロセスがスリープさせられてしまうので、NewRelicのAvailability Monitoringという機能を使って定期的にリクエストを飛ばすことにした。[元ネタ](http://stackoverflow.com/questions/5480337/easy-way-to-prevent-heroku-idling)

* https://addons.heroku.com/newrelic ここからNewRelicのStarkという無料のやつを追加し、
* 説明に従ってAPIキーの入った `config/newrelic.yml` と `newrelic_rpm` gemを `git add` し、
* NewRelicのサイドバーのAvailability monitoringというところから監視するURLを設定する

これで指定したURLに30秒に1回ぐらいリクエストしてくれるので、スリープにならなくなる。

![Fettuccine_-_New_Relic.png](https://qiita-image-store.s3.amazonaws.com/0/5978/ff3679a6-b89d-d6cc-96ce-3a8ae25f0747.png "Fettuccine_-_New_Relic.png")

NewRelicは401 Authentication Requiredでも落ちてないと判断するらしい。

## せっかくなのでNewRelicからリクエストされるたびにクローラーを走らせる

これで24時間クローラーを動かすことができる。

クローラーの実体は `lib/fastladder/crawler.rb` にあるけど、10秒ぐらいだけクロールして死んでくれるオプションが無いみたいなので、こんなメソッドを作り、

```lib/fastladder/crawler.rb
    def run_with_timeout(timeout)
      @interval = 0
      start = Time.now
      finish = false
      until finish
        finish = run_loop
        break if Time.now - start >= timeout
      end
    end
```

Railsのルーティングを追加するのが面倒だったので、Rack Middlewareを作って、

```./app/middleware/crawl.rb
class Crawl
  def initialize(app, opts = {})
    @app
    @opts = opts
  end

  def call(env)
    request = Rack::Request.new(env)
    if request.path != @opts[:path]
      return @app.call(env)
    end

    Fastladder::Crawler.new(@opts[:logger]).run_with_timeout(@opts[:timeout])

    [200, {}, ["ok"]]
  end
end
```

`config/environments/production.rb` のBasic認証を追加したところのすぐ上にこれを書いた。

```config/environments/production.rb
  config.middleware.use 'Crawl', {timeout: 10, path: '/my_secret_crawl_url', logger: Logger.new(STDOUT)}
```

Basic認証より前じゃないとだめ。

最後にNewRelicの画面でリクエストしてもらうURLを変えておく。

![Availability_Settings_-_New_Relic.png](https://qiita-image-store.s3.amazonaws.com/0/5978/7ae66f42-55f6-83de-f2f8-eddd22bf62df.png "Availability_Settings_-_New_Relic.png")

## HerokuでFastladderを無料で使えるか

実際のところ、厳しそう。

Postgresの無料枠が1万行までで、DBのほとんどが記事レコードなので、200アイテムx50フィードぐらいでいっぱいになる。月9ドル払って100万行プランにするのが妥当ではないかと思う。

ちなみに古いアイテムを削除するコードは無いみたいなので（特殊ケースを除く）、気が向いたら各フィード200アイテムより前のものを消せばよいかもしれない。
Sencha TouchでDateTimeピッカーを使う


Sencha TouchにはDatePickerはあるけどDatetimePickerがない。


▼ DatePicker
![Ext_field_DatePicker_Example___Sencha_Try 2.png](https://qiita-image-store.s3.amazonaws.com/0/19083/5fb51931-7958-79ed-8500-9536b6cc2050.png "Ext_field_DatePicker_Example___Sencha_Try 2.png")


[Sencha market](https://market.sencha.com/extensions/datetimepicker)にDateTimePickerがあるけどメンテナンスされておらず、DateTimePickerフィールド内でキャンセルボタンを押すとリロードするまで日時を選べないバグが残っている。

参照：[Sencha Touch: Problems with Date Time Picker](http://blog.152.org/2013/12/sencha-touch-date-time-picker.html)

# datetimepickerv2を組み込む

このバグを解消したものがGitHubにある[senchatouch-datetimepickerv2](https://github.com/tomalex0/senchatouch-datetimepickerv2)を使う。

GitHubからダウンロードして解凍したzipの中身の```senchatouch-datetimepickerv2-master/ux```フォルダの中の```DateTime.js```と```DateTimePicker.js```を下記フォルダに入れる。

*Sencha Architectで作ったプロジェクト構成の例）*

1. ```DateTime.js```をプロジェクトフォルダ内の```touch/src/ux/picker```フォルダ（pickerフォルダがなければ作る）の中に、

2.```DateTimePicker.js```をプロジェクトフォルダ内の```touch/src/ux/field```フォルダ（fieldフォルダがなければ作る）の中に、

それぞれコピーする。

# viewでdatetimepicerv2を読み込む
表示したviewの中でrequiresの中で **Ext.ux.field.DateTimePicker** を読み込ませたら、他のフォームアイテムと同じようにitemsオプションで定義して表示できる。

```datetimepickerの定義
{
    xtype: `datetimepickerfield`,
    name: 'recorded',
    label: 'Record Date&Time`,
	 value: new Date(),
},
```

▼ DateTimePickerフィールド
![Datetimepicker_Sencha_Component__Forms_—_Sencha_Market.png](https://qiita-image-store.s3.amazonaws.com/0/19083/0c5924d7-0a62-6035-caf1-dfd9b1cbda9e.png "Datetimepicker_Sencha_Component__Forms_—_Sencha_Market.png")


まだ日本語にローカライズする方法までは調べてないけど英語表記で構わなければこれで日時選択のpickerが表示されるようになる。
Gvizで二分木データ構造の図を作成する


### gvizをインストール

```
$ gem install gviz
```

### ソースコード

```graph.rb
# coding: utf-8

require 'gviz'

gv = Gviz.new

gv.add %i(two three) => :one
gv.add %i(five six) => :two
gv.add %i(seven eight) => :three
gv.add %i(nine ten) => :five
gv.add %i(eleven twelve) => :six
gv.add %i(thirteen fourteen) => :seven
gv.add %i(fifteen sixteen) => :eight

gv.save :sample, :png
```

### 出力結果

![sample.png](https://qiita-image-store.s3.amazonaws.com/0/34365/7f6227a3-8717-a5bf-197c-83fb4e417989.png "sample.png")
Pie Chartで曜日別ツイート数のカラフルな円グラフを描画


### 曜日別ツイート数を円グラフで描画

<p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/r/ryosy383/20141008/20141008035030.png" alt="f:id:ryosy383:20141008035030p:plain" title="f:id:ryosy383:20141008035030p:plain" class="hatena-fotolife" itemprop="image"></span></p>

### HTMLソース

* 参考リンク

https://developers.google.com/chart/interactive/docs/gallery/piechart



```html
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <script type="text/javascript" src="https://www.google.com/jsapi"></script>
    <script type="text/javascript">
      google.load("visualization", "1", {packages:["corechart"]});
      google.setOnLoadCallback(drawChart);
      function drawChart() {

        var data = google.visualization.arrayToDataTable([
          ['曜日','ツイート数'],
          ['月',   1],
          ['火',   2],
          ['水',   1],
          ['木',   4],
          ['金',   3],
          ['土',   8],
          ['日',   11]
        ]);

        var options = {
          title: '曜日別Tweet数'
        };

        var chart = new google.visualization.PieChart(document.getElementById('piechart'));

        chart.draw(data, options);
      }
    </script>
  </head>
  <body>
    <div id="piechart" style="width: 900px; height: 500px;"></div>
  </body>
</html>
```
PhantomJS のラッパー Nightmare を試してみる


話題らしいので Nightmare を弄ってみる

## インストール

```
npm install nightmare
```

## サンプルコード (+ キャプチャ)
公式のサンプルに画面キャプチャを付け足してみた

### Nightmare

```example_nightmare.js
var Nightmare = require('nightmare');

new Nightmare()
  .goto('http://yahoo.com')
  .type('input[title="Search"]', 'github nightmare')
  .click('.searchsubmit')
  .screenshot('yahoo.png')
  .run();
```

### CasperJS

ちなみに [CasperJS](http://casperjs.org/) で書くとこんな感じ

```example_casper.js
var casper = require('casper').create();

casper.start('http://google.fr/', function() {
    this.fill('form[action="/search"]', { q: 'casperjs' }, true);
});

casper.then(function() {
  this.capture('google.png');
});

casper.run();

```



## 実行

```
$ node sample_nightmare.js
```

### キャプチャ画像

背景透明になる（サイズ大きいので縮小した）

![yahoo.png](https://qiita-image-store.s3.amazonaws.com/0/41656/9442cd13-08f2-4f6d-7fda-53cdd5da5134.png "yahoo.png")


## API

- .goto(url)
- .back()
- .refresh()
- .url(cb)
- .click(selector)
- .type(selector, text)
- .upload(selector, path)
- .evaluate(fn, cb, [arg1, arg2,...])
- .wait()
- .wait(ms)
- .wait(selector)
- .wait(fn, value, [delay])
- .screenshot(path)
- .useragent(useragent)
- .viewport(width, height)
- .use(plugin)
- .run(cb)

## プラグイン

[nightmare-swiftly](https://github.com/segmentio/nightmare-swiftly) をインストールすると下記が使える模様

- .login(email, password)
- .task(instructions, uploads, callback)
- .state(callback)
- .wait(state, callback)
- .download(taskUrl, path)
- .approve(taskUrl)



## 感想
CasperJS にある Testing みたいの無いっぽい。
試してないけどプラグインが上手く使えればいい感じかも。

## 参考
- http://www.nightmarejs.org
- https://github.com/segmentio/nightmare
- http://casperjs.org/
ThymeleafのTemplateEngineオブジェクト

Thymeleafについて何か書こっかなと思ったので、TemplateEngineオブジェクトについて書いてみます。初Qiita!

# Javadoc

Thymeleafって結構コーディング規約とかしっかりしてて、ソース読んでて楽しいです。Javadocもしっかり書かれているので、今日はこのJavadocを見ていこうと思います。

[TemplateEngine (thymeleaf 2.1.3.RELEASE API)](http://www.thymeleaf.org/apidocs/thymeleaf/2.1.3.RELEASE/org/thymeleaf/TemplateEngine.html)

# テンプレートエンジンの初期化

デフォルトコンストラクタで生成します。インスタンスの生成と初期化はコストが高いのでテンプレート処理の度に生成するんじゃなくて、1インスタンスだけ作って処理した方がいいよ。って。

```java
final TemplateEngine templateEngine = new TemplateEngine();
```

# 設定

TemplateEngineのインスタンスに色々と設定をするのですが以下のものが設定できます。
テンプレートリゾルバーは必須で、それ以外は任意です。

* (必須)テンプレートリゾルバー
* (任意)ダイアレクト
* (任意)メッセージリゾルバー
* (任意)テンプレートモードハンドラー
* (任意)キャッシュマネージャ

簡単にそれぞれについて説明しますね。

## テンプレートリゾルバー

テンプレートを解決するためのオブジェクトです。たとえば `ClassLoaderTemplateResolver` は `ClassLoader#getResourceAsStream(String)` でテンプレートを取得、`FileTemplateResolver` はファイルから、`ServletContextTemplateResolve` はサーブレットコンテキストのルートから解決って感じですね。

## ダイアレクト

ダイアレクトというのは、テンプレートを処理するための一連のDOMプロセッサーと式のパーサーのセットのことです。Thymeleafではスタンダードダイアレクトと呼ばれるコアライブラリを提供していて、これがデフォルトです。SpEL式を使えるSpring用ダイアレクトも別途提供されています。

## メッセージリゾルバー

多言語対応のための外部化メッセージを解決するためのオブジェクトです(ちなみに外部化メッセージは`#{...}`という構文で使います)。デフォルトのスタンダードメッセージリゾルバーはテンプレート名を元にメッセージファイル名を決定します。

例えば `/WEB-INF/templates/home.html` というテンプレートに対しては、テンプレートと同じフォルダ内の同じ名前のファイルにロケール情報を表す文字列を付けて拡張子が`.properties`のファイルの中からメッセージを探します。次のようになります:

* /WEB-INF/templates/home_ll_CC-vv.properties
* /WEB-INF/templates/home_ll_CC.properties
* /WEB-INF/templates/home_ll.properties
* /WEB-INF/templates/home.properties
* (default messages, if they exist)

("ll" = language, "CC" = country, "vv" = variant)

## テンプレートモードハンドラー

Thymeleafはデフォルトで XML, VALIDXML, XHTML, VALIDXHTML, HTML5, LEGACYHTML5 の6つのテンプレートモードに対応しています。

## キャッシュマネージャ

テンプレートやフラグメント、メッセージや式などのキャッシュをコントロールするオブジェクトです。デフォルトではスタンダードキャッシュマネージャが設定されています。

## 実際どんな風に使ってる？

個人的にはこんな感じで使ってます。

* (必須)テンプレートリゾルバー
 * `ServletContextTemplateResolver` にPrefixやSuffix、テンプレートキャッシュの設定をして使ってる。
 * キャッシュは開発時にはリアルタイム反映したいのでOFFにしてます。
* (任意)ダイアレクト
 * デフォルトのまま特に触らず。
* (任意)メッセージリゾルバー
 * デフォルトのまま特に触らず。
* (任意)テンプレートモードハンドラー
 * デフォルトのまま特に触らずに、モードはHTML5を指定。
* (任意)キャッシュマネージャ
 * デフォルトのまま特に触らず。

# テンプレート処理

処理は2つ

1. コンテキストオブジェクトの用意
2. テンプレート処理の実行

です。

## コンテキストオブジェクトの用意

コンテキストは、テンプレートに渡すための変数マップをもったオブジェクトですね。Webアプリ用には `WebContext` というコンテキストクラスが用意されていてこれを使うと、テンプレートから `HttpServletRequest` や `ServletContext` や `HttpSession` にアクセスできます。

テンプレートに渡したいオブジェクトを、このコンテキストに詰めます。

```java
final IContext ctx = new WebContext(request, servletContext);
ctx.setVariable("allItems", items);
```

## テンプレート処理の実行

テンプレート名とコンテキストオブジェクトを渡して、Writerを指定すればOKです。

```java
templateEngine.process("mytemplate", ctx, httpServletResponse.getWriter());
```

テンプレート名を元に、テンプレートリゾルバーがテンプレートを見つけて、指定したダイアレクトでテンプレートを処理してくれます。

こんなとこかな。
Ruby | Object#respond_to? と NotImplementedError とC言語実装・Ruby実装部の呼び出しの挙動差異

# Ruby | Object#respond_to? と NotImplementedError とC言語実装・Ruby実装部の呼び出しの挙動差異

## 概要
Object#respond_to? と NotImplementedError とC言語実装・Ruby実装部の呼び出しの挙動差異について

## 経緯
るりまの下記ページを見ながら respond_to? の挙動を確認していました。

http://docs.ruby-lang.org/ja/2.1.0/method/Object/i/respond_to=3f.html
**※2014/10/14追記。修正内容がマージされたため、現在は記述の不足がありません**

下記のような、一文があったので NotImplementedError を返却する Template Method パターンを作成して
動作確認しました。

~~~
Windows での Process.fork や GNU/Linux での File.lchmod の ような NotImplementedError が発生する場合は false を返します。
メソッドが定義されていない場合は、Object#respond_to_missing? を呼 び出してその結果を返します。
~~~

動作確認の結果・・・常に真が返却されてきます。
あれ？と思い、さらに情報を調べてみました。

## respond_to? への NotImplementedError 対応の経緯
下記のやりとりを見つけました。

http://comments.gmane.org/gmane.comp.lang.ruby.devel/12261

最終的にC言語実装部のみの対応となったようです。
るりまのドキュメントからはそこが読み取れなかったため、私が勘違いしたようです。
早速確認してみます。

### サンプルコード

C言語実装部のメソッドで NotImplementedError が発生している `File.lchmod` に対して `respond_to?` は偽を返却し、
Ruby実装部のメソッドで NotImplementedError が発生している `NotImplTemplateMethod#template_method` に対して `respond_to?` は真を
返却していることがわかりました。

~~~ruby
module Template
  def main
    start
    template_method
    finish
  end

  def start
    puts "start"
  end

  def template_method
    raise NotImplementedError.new
  end

  def finish
    puts "finish"
  end
end

class ImplTemplateMethod
  include Template
  def template_method
    "implement template_method"
  end
end

class NotImplTemplateMethod
  include Template

  # not implement template_method
end

puts ImplTemplateMethod.new.respond_to?(:template_method) # => true
# NotImplementedError が発生しているが、Ruby実装部のため真を返却
puts NotImplTemplateMethod.new.respond_to?(:template_method) # => true
# GNU/Linux で実行
puts File.respond_to?(:lchmod)         # => false
~~~

### 出力
~~~
true
true
false
~~~

## るりまへプルリク
以前るりまにインデント崩れを修正するプルリクを送った時の手順でプルリクを送ってみることにします。

[Rubyリファレンスマニュアル「るりま」の誤字などを見つけた時の貢献フロー](http://qiita.com/tbpgr/items/2072a9a743918b8cfb34)

で、作成したプルリクは以下。

https://github.com/rurema/doctree/pull/137

## 参照
http://docs.ruby-lang.org/ja/2.1.0/method/Object/i/respond_to=3f.html
#mozaicfm ep11 High Performance Browser Networking

## HPBN at #mozaicfm

11/4(火) に Google で開催される ["ハイパフォーマンスブラウザネットワーキング ミートアップ"](http://googledevjp.blogspot.jp/2014/10/blog-post.html) では、著者である Google Developer Advocate の Ilya Grigorik を迎え、キーノートとトークセッションをお願いする予定です。

HPBN は、 Web に関わるネットワークの技術を十分に網羅しており、専門性も高く内容が濃い書籍で、この書籍をテーマとした輪読会も各所で開催されています。

今回は、このトークセッションを mozaic.fm の公開収録の形で実施させていただき、いつもの様に、彼自身の話や、書籍 HPBN の話、最近のブラウザネットワーキング事情についてのアップデートを聞くとともに、みなさんから事前に募集した質問を紹介したいと思います。

そこで、今回もここで Ilya への質問を募集します。
(録音の状態によっては、Podcast公開が無い場合があります。)

## 質問募集

質問は、この Qiita のコメント欄にお願いします。
事前にここに頂いた質問は、当日のトークの中でピックアップして本人に聞きます。

- 質問は 1tweet 以内 でおさめてください。短く簡潔なほど採用しやすいです。
- 締め切りは、イベント開始までです。
- 質問は日本語でも構いません
- 採用されるかは運次第というか、ベストエフォートです。

## Rough Note

- About Ilya
 - position
 - expertise
 - interest topic
- About HPBN
 - motivation
 - highlight
- About Update
 - update after HPBN
 - ORTC
 - HTTP2
 - Security
 - etc
- About Future
 - what is the change in near future.
 - which part should be improbe more.
 - how you think about future HPBN.

## Links

- [HPBN](http://chimera.labs.oreilly.com/books/1230000000545)
- [翻訳書籍](http://www.oreilly.co.jp/books/9784873116761/)
VagrantでAnsibleを使ってみる



## ProvisioningにAnsibleを使う

* 詳細は公式ドキュメントを確認する
  * [Vagrant Docs - Provisioning - Ansible](https://docs.vagrantup.com/v2/provisioning/ansible.html)

```
config.vm.provision "ansible" do |ansible|
    ansible.playbook = "playbook.yml"
end
```


## サンプル

```:Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
    config.vm.box = "chef/centos-7.0"
    config.vm.network :private_network, ip: "192.168.99.2"
    config.vm.provision "ansible" do |ansible|
        ansible.playbook = "playbook.yml"
    end
end
```

```:playbook.yml
---
- hosts: all
  sudo: yes
  vars:
    username: hoge
  tasks:
    - name: add a new user
      user: name={{username}} state=present
```


## 参考

* [Vagrant Docs - Provisioning - Ansible](https://docs.vagrantup.com/v2/provisioning/ansible.html)
Ruby | 日付フォルダ生成用 CLI ツール defoker gem の定形出力ルール設定にコールバックを追加 (ver 0.0.6) #ruby #defoker

# Ruby | 日付フォルダ生成用 CLI ツール defoker gem の定形出力ルール設定にコールバックを追加 (ver 0.0.6) #ruby #defoker
## 概要
日付フォルダ生成用 CLI ツール defoker gem の定形出力ルール設定にコールバックを追加します。

## defoker gem って何？,定形出力ルール設定って何？という方は

まずはこちらを御覧ください。  

* [Ruby | 日付フォルダ生成用 CLI ツール defoker gem を作成した](http://qiita.com/tbpgr/items/64bbb45e08a94a721b98)
* [Ruby | 日付フォルダ生成用 CLI ツール defoker gem に内部 DSL による定形出力ルール設定機能を追加 (ver 0.0.5)](http://qiita.com/tbpgr/items/f040429d1156fd100b64)

## 追加仕様の想定されるユースケースの一例
現状、 defoker gem は日付フォーマットのフォルダを作成するだけです。
各フォルダを作成する際に、フォルダ内にテンプレートを作成しておきたい、という要件があったとします。

例えば、下記のような構成で日々フォルダを作成したい場合。（hige, hoge, hage の部分は可変の名前）

~~~
$ tree
┣ 20141006_hige
┃ ┣ template.rb
┃ ┗ template.txt
┣ 20141007_hoge
┃ ┣ template.rb
┃ ┗ template.txt
┗ 20141008_hage
  ┣ template.rb
  ┗ template.txt
~~~

template.txt, template.rb はこの構成での作業で利用するテンプレートです。

## 追加仕様
* Defokerfile に callback を追加する
* callback は lambda(proc) を記述して、自由に処理を記述できる
* callback はディレクトリ作成直後に呼び出されます
* callback はパラメータとして dir 変数を持ちます。 dir は String でディレクトリ名です
* Defokerfile 内では Ruby のコードを自由に利用できるので、お好みの処理をフックとして作成してください

## 「定形出力ルール」 + callback を試してみる
仕様は、「追加仕様の想定されるユースケース」をそのまま利用します

### Defokerfile

~~~ruby
type :today
base '' 
callback ->(dir) {
  puts dir
  File.open("#{dir}/template.txt", 'w:utf-8') { |e|e.puts "template for #{dir}" }
  File.open("#{dir}/template.rb'" 'w:utf-8') { |e|e.puts "puts '#{dir}'" }
}
~~~

### 試行

~~~
# execute at 20141006
$ defoker rule -a hige
"20141006_hige"
# execute at 20141007
$ defoker rule -a hoge
"20141007_hoge"
# execute at 20141008
$ defoker rule -a hage
"20141008_hage"
$ tree
┣ 20141006_hige
┃ ┣ template.rb
┃ ┗ template.txt
┣ 20141007_hoge
┃ ┣ template.rb
┃ ┗ template.txt
┗ 20141008_hage
  ┣ template.rb
  ┗ template.txt
~~~

## 参照
* [Ruby | 日付フォルダ生成用 CLI ツール defoker gem を作成した](http://qiita.com/tbpgr/items/64bbb45e08a94a721b98)
* [Ruby | 日付フォルダ生成用 CLI ツール defoker gem に内部 DSL による定形出力ルール設定機能を追加 (ver 0.0.5)](http://qiita.com/tbpgr/items/f040429d1156fd100b64)
* [Defoker GitHub](https://github.com/tbpgr/defoker)
* [Defoker RubyGems](http://rubygems.org/gems/defoker)
iOSアプリ開発:半透明の画像を表示

※個人で管理しているHPに引っ越ししました。
リンク切れ等考慮して本ページは残しておきますが、今後は[HP](https://kittenkitten.net/2014/10/08/ios_dev_image_alpha/)のほうで更新します。

最初は適当に塗り潰した画像を使っていて、その後背景透明の画像を使おうとするケースがある…かもしれません。(自分はそうでした)
意外と、一部抜けのある画像を使おうとした時に分からなくなってしまう為メモしておきます。

# 画像を用意する。

Gimpと言うツールで用意していて、その手順を記載しています。

### 画像の用意の仕方。
* ファイル->新しい画像->
キャンバスサイズ：好きなサイズを指定してください。
※ただし、PG側で用意する際か、ここで用意する画像サイズを縦、横それぞれ2のべき乗にする必要があります。
　Androidアプリは大丈夫だったと記憶していますが、iOSアプリではエラーとなってしまうため注意。

* 詳細設定
塗りつぶし色：透明にする。
※これをやらないと、デフォルト設定だと背景真っ白となってしまいます。
コメント：中身を空にする。

### 画像編集について。
キャンバスが出来たと思うので、後は好きなように絵を描いてください。
もし、文字を表示したい場合は注意が必要です。

* ツールボックス - パターンウィンドウから文字描画を選択
* キャンバスを選択
* 描画したい文字列を記入
半角英数字なら入力出来ると思いますが、全角だと何故か入力出来ません。

* 別の手でやるため、文字列を削除。
すると、ヒストグラム - レイヤーウィンドウに、新たな文字用のレイヤーが追加されていると思います。
* テキストエディタ等で、描画したい文字列を入力しコピー。
* キャンバスの先ほど選択した部分を再度選択し、右クリック、貼り付け。
すると、コピーした文字列が表示されると思います。
お好みで、フォントとサイズ等を変更してください。

### 画像保存について。
完成したら、ファイル保存しましょう。

* Gimp形式で保存。
※後で編集する場合、レイヤー単位でいじれるため保存したほうが良い。
ファイル->保存->お好きな所で保存してください。(*.xcf)

* PNG形式で保存。
※Xcodeプロジェクトで実際に使用するファイル。
ファイル->エクスポート
　作成日時を保存：チェック外す
　コメントを保存：チェックを外す
　エクスポート->お好きな所で保存してください。(*.png)

# Xcodeプロジェクト準備。

既にOpenGLで描画出来る所まで用意してある事前提で記述します。

* Xcodeプロジェクト以下に、先ほど保存したPNG画像をコピペ。
* Xcode上で、コピペしたPNG画像のあるディレクトリを右クリック->Add Files to "プロジェクト名"で選択。

# プログラム対応。
* プログラムのPNGファイルを読み込む部分対応。

* プログラムの描画部分をアルファブレンド対応。
せっかく画像を用意しても、描画方法をしっかり指定していないと背景は透明ではなく白となってしまいます。

```lang:
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);	// アルファブレンド
glEnable(GL_BLEND);	// 混合の有効化

〜描画〜

glDisable(GL_BLEND);	// 混合の無効化
```

何か間違い等あれば教えて頂ければ助かります。

# 更新履歴。

14/10/13 19:17　更新
画像の用意の仕方。の、キャンバスサイズに注意書きを追加しました。
Android 4.4系でフルスクリーン表示を行うときのコード

Android 4.4以上においてナビゲーションバーやステータスバー(いわゆるシステムバー)を非表示にしたい時のコードメモ

```Java:sample.java
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);
        View decor = this.getWindow().getDecorView();
        decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION  | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_IMMERSIVE);
    }
```
Oracle.ManagedDataAccess.Clientの使い方のメモ

###環境変数
ORACLE_HOMEがあるといいかも

###アプリ側
``` app.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.data>
    <DbProviderFactories>
      <clear />
      <add name="ODP.NET, Managed Driver" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET, Managed Driver" type="Oracle.ManagedDataAccess.Client.OracleClientFactory,               Oracle.ManagedDataAccess, Version=4.121.1.0,               Culture=neutral, PublicKeyToken=89b483f429c47342" />
    </DbProviderFactories>
  </system.data>
  <oracle.manageddataaccess.client>
    <version number="*">
      <settings>
        <setting name="TNS_ADMIN" value="%ORACLE_HOME%/network/admin" />
      </settings>
      <edmMappings>
        <edmMapping dataType="number">
          <add name="bool" precision="1" />
          <add name="byte" precision="2" />
          <add name="int16" precision="5" />
        </edmMapping>
      </edmMappings>
    </version>
  </oracle.manageddataaccess.client>
</configuration>
```

### 配布時
tnsnames.oraをTNS_ADMINか%ORACLE_HOME%/network/adminかexeファイルと同じ階層におく
CarrierWave+MiniMagickでFloatDomainError: Infinity


carrierwave (0.10.0)
mini_magick (3.8.1)

メモ書きです。
根っこが深くて大変でした。

# FloatDomainError: Infinity が発生している理由

FloatDomainError: Infinity #1378
https://github.com/carrierwaveuploader/carrierwave/issues/1378

該当箇所
https://github.com/carrierwaveuploader/carrierwave/blob/master/lib/carrierwave/processing/mini_magick.rb#L177-197

画像の大きさが0のときに飛んじゃいます。
だけど、問題になったのは、画像が十分な大きさ（縦横）を持っている時に発生したからです。

このissueでは、もっと説明的な例外を投げるべきだ！とおっしゃっています。その通りですね笑

# ::MiniMagick::Image

CarrierWaveでは`::MiniMagick::Image`を通してImageMagickのコマンドを実行しているので、手打ちしてみるとこんな感じです。

```
image = ::MiniMagick::Image.new(current_path)
=> #<MiniMagick::Image:0x007fecdf008240
 @path=
  "/hogehoge/r100_9758679aaa3927799fb84f90740f0cb2e91f61a4c287e69bf949a7b65e7e1b7a.png",
 @tempfile=nil>

image[:dimensions]
=> [0, 0, 0, 1, 0, 0, 0, 0, 0, 0]
```

情報が全くとれていません。

直打ちで`identify`すると、

```
identify /hogehoge/r100_9758679aaa3927799fb84f90740f0cb2e91f61a4c287e69bf949a7b65e7e1b7a.png

/hogehoge/r100_9758679aaa3927799fb84f90740f0cb2e91f61a4c287e69bf949a7b65e7e1b7a.png PNG 1436x320 1436x320+0+0 8-bit sRGB 543KB 0.000u 0:00.000
```

ちゃんとでますね。

さて、デバッガーで実行時のコンテキストから`::MiniMagick::Image`の`run_command`を実行すると...

```
run_command( 'identify', '-format', MiniMagick::Utilities.windows? ? '"%w %h\n"' : '%w %h\n', path)
=> "sh: rvm_debug: line 1: syntax error: unexpected end of file\nsh: error importing function definition for `rvm_debug'\n1436 320\n"
```

**RVMおまえか！！！！**

コードの通りメソッドチェーンを実行すると確かに例の不思議な配列に。

```
run_command( 'identify', '-format', MiniMagick::Utilities.windows? ? '"%w %h\n"' : '%w %h\n', path).split("\n")[0].split.map { |v| v.to_i }
=> [0, 0, 0, 1, 0, 0, 0, 0, 0, 0]
```

いやこれ、このコードもひどいっしょ...

RVMがなぜこーなったかについては深堀りできていないんだけど、Shellshock関係あり？

ShellShock update issue temporarily affecting Slurm jobs and software modules
https://rc.fas.harvard.edu/shellshock-update-issue-temporarily-affecting-slurm-jobs-software-modules/

bashのパッチによって関数定義がどう変わるか、どうRVMに対して影響があるかは勉強してないので分かりません。

# 解決策

たまたま、MiniMagickが大幅リファクタリングをしていたみたいで、`mini_magick`の`4.0.0rc`でなおりました。
`identify`の実行後の解析が悪いっちゃ悪いからね。

これまたもし`bash`が原因だったとしたら、そのバージョンによって挙動変わるんでもう大変ですよ...
Elixir Structs

# Elixir Structs

## 概要
Elixir の Structs について。

### サンプルコード

~~~elixir
defmodule Person do
  defstruct name: 'unknown', age: 0
end

defmodule Hoge do
  require Person

  def hoge do
    default_person = %Person{}
    tanaka = %Person{name: 'tanaka', age: 24}
  
    Hoge.print_person(default_person)
    Hoge.print_person(tanaka)
  end

  def print_person(person) do
    IO.inspect person
    IO.puts person.name
    IO.inspect person.age
  end
end

Hoge.hoge
~~~

## 出力

~~~bash
%Person{age: 0, name: 'unknown'}
unknown
0
%Person{age: 24, name: 'tanaka'}
tanaka
24
~~~

## 参照
* http://elixir-lang.org/docs/stable/elixir/Kernel.html#defstruct/1
* http://elixir-lang.org/getting_started/15.html
Emacs24.3にOrg 8.x.xをインストールしてExportとかしようとしたら 「Invalid Function org-with-silent-modifications」とか言われる件


## 言われる件

以下の条件で発生しました。他の条件でも発生するかどうかは不明。

- OS X 10.9.5
- Emacs 24.3 (Homebrewでインストール)
- Org 8.2.8 (ELPAからインストール)

これでOrgの文書をMarkdownにエクスポートしようとしたら(org-mdexport-to-markdown)、タイトルのエラーが発生しました。

ググると、Orgのパッケージを一回消してもう1回インストールすると治ったとかが書いてあるけど、何回インストールし直しても改善なし。

## 解決した件

リリースノートに書いてありました。ELPAの問題だそうです。
そうだったんですか。結構有名なんですね。

> when updating through ELPA (either from GNU ELPA or from Org ELPA), you have to install Org's ELPA package in a session where no Org function has been called already.

なので、Emacsを起動後、Orgの関数を何も呼ばない状態でOrgをインストールする必要があるようです。

とりあえずinit.elとかのOrg関連の設定を消して、Emacsの起動後、もちろん*.orgのファイルを開いたりしない状態で再度インストールしたら改善しました。

そもそもEmacs 24.4をインストールしたほうが良かったかもしれません。
引き算　Out-of-Range and Overflow Handling

参考
11.2.6 Out-of-Range and Overflow Handling
http://dev.mysql.com/doc/refman/5.5/en/out-of-range-and-overflow.html

BIGINT UNSIGNED value is out of rangeとかいうエラーが出たり出なかったりで困ってるとかいう話がふときたのでここにつらつらと書いておく

こんなテーブルがあるとする

```
| test  | CREATE TABLE `test` (
  `col1` int(10) unsigned NOT NULL DEFAULT '0',
  `col2` bigint(20) unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY (`col1`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
```

こんなデータが入っていたとする

```
mysql> select * from test;
+------+------+
| col1 | col2 |
+------+------+
|    1 |    3 |
+------+------+
1 row in set (0.00 sec)
```

こんなクエリが流れてるとする

```
mysql> update test set col2 = IF(col2 - 4 < 0, 0 , col2 - 4) where col1 = 1;
```

やりたいことはわかる。col2を何らかの数で引きたいけど負になる場合は0を入れとくと。
しかしこれは以下のようなエラーが出る

```
ERROR 1690 (22003): BIGINT UNSIGNED value is out of range in '(`test`.`test`.`col2` - 4)'
```

マニュアルには、片方がunsignedの場合、引き算の結果はunsignedになると書かれている。
そしてMySQL5.5.5以前では、結果が負になるときmaximum integer valueになる。
MySQL5.5.5以降では、エラーになる（ERROR 1690 (22003): BIGINT UNSIGNED value is out of range）と書かれている。

以下のようなクエリならOK

```
update test set col2 = IF(col2 < 4, 0 , col2 - 4) where col1 = 1;

update test set col2 = col2 - IF(col2 < 4, col2 , 4) where col1 = 1;
```
Javascriptで正規分布

平均付近に集中するような値の分布を「正規分布」といいます。
「ガウス分布」ともいいます。
Javascriptには一様分布させるためのMath.randomというメソッドは存在していますが、正規分布用のメソッドは用意されていません。

そこで [ボックス＝ミュラー法](http://ja.wikipedia.org/wiki/%E3%83%9C%E3%83%83%E3%82%AF%E3%82%B9%EF%BC%9D%E3%83%9F%E3%83%A5%E3%83%A9%E3%83%BC%E6%B3%95 "ボックス＝ミュラー法")と呼ばれるアルゴリズムを用います。
>一様分布に従う確率変数から標準ガウス分布に従う確率変数を生成させる手法。

だそうです。

## sample code

```
// mean 平均
// sd 標準僅差
function normalDistribution(sd,mean){
	var x = Math.random();
	var y = Math.random();
	
	var z1 = Math.sqrt(-2*Math.log(x))*Math.cos(2 * Math.PI  * y);
	var z2 = Math.sqrt(-2*Math.log(x))*Math.sin(2 * Math.PI  * y);

	return {z1:sd+z1*mean,z2:sd+z2*mean};
}


```
Xamarin StudioのD言語アドオンで生成されるソリューションがビルドできない

以下のエラー

```
ビルド中: myapp (Debug)
Performing main compilation...
Current dictionary: /Users/ore/tmp/myapp/myapp
dmd -debug -gc "main.d"   "-odobj/Debug" "-of/Users/ore/tmp/myapp/myapp/bin/Debug/myapp" -w -vcolumns

---------------------- 完了 ----------------------

ビルドに失敗しました。. ApplicationName='dmd', CommandLine='-debug -gc "main.d"   "-odobj/Debug" "-of/Users/ore/tmp/myapp/myapp/bin/Debug/myapp" -w -vcolumns', CurrentDirectory='/Users/ore/tmp/myapp/myapp', Native error= Cannot find the specified file
ビルド: エラー 1件, 警告 0件
```

2.066以上じゃないと`-vcolumns`オプションが効かないよう。
Homebrew経由でインストールしたdmd 2.065 だとダメだった。
http://dlang.org/download.html からインストーラーをダウンロードできる。

```
$ brew uninstall dmd
$ which dmd
/usr/bin/dmd
```
Windows環境でAtom

## インストール
### Windows Installer を使ってインストールする場合
- <https://atom.io/> から Windows Installer をダウンロードして実行。

### chocolatey を使ってインストールする場合
- PowerShellスクリプトの[実行セキュリティ・ポリシー](http://www.atmarkit.co.jp/fwin2k/win2ktips/1023ps1sec/ps1sec.html)が  `RemoteSigned` になっていること。
- [chocolatey](https://chocolatey.org/) が入っていなければインストール。
- PowerShellで `cinst atom` を実行。

## フォントの変更
1. File > Settings を開く。
2. Themes > Choose a Theme の your stylesheet をクリック。
3. styles.less が開かれるので、以下通り変更して保存。

```less
@font-family-p: "メイリオ";
@font-family-m: "MS Gothic";

.tree-view {
  font-family: @font-family-p;
}

// style the background and foreground colors on the atom-text-editor-element
// itself
atom-text-editor {
    font-family: @font-family-m;
}

// To style other content in the text editor's shadow DOM, use the ::shadow
// expression
atom-text-editor::shadow .cursor {

}

.vertical {
  font-family: @font-family-p;
}

.tooltip {
  font-family: @font-family-p;
}

.markdown-preview {
  font-family: @font-family-p;

  h1, h2, h3, h4, h5, h6 {
    font-family: @font-family-p;
  }

  code, tt, atom-text-editor {
    font-family: @font-family-m;
  }
}
```

`与` や `化` 等が日本の字形で表示されれば問題ない。

## 各種設定
1. File > Settings を開く。
2. Settings > Editor Settings で必要な項目にチェックを入れる。
  - Show Invisibles (空白や改行等の不可視文字の表示)
  - Soft Wrap (自動折り返し)

## パッケージの導入
### プロキシの設定（必要なら）
`C:\Users\<ユーザー名>\.atom\.apmrc`ファイルを追加し、プロキシ設定を記述。

```
proxy = http://...
```

or

```
https-proxy = https//...
```

### パッケージのインストール
1. File > Settings を開く。
2. Install > Install Packages で対象のパッケージを検索してInstall。

または、
PowerShellで `apm install <パッケージ名>` を実行。

### おすすめパッケージ
- japanese-wrap (日本語折り返し)
- file-icons (ファイルアイコン表示)

[その他のパッケージ…](https://atom.io/packages)

## 使い方
### 既存ファイルの編集
対象ファイルの右クリックメニューで「Open with Atom」を選択。

### キーバインド（一部）
- `Ctrl-S` : 上書保存
- `Ctrl-\` : Tree View の表示/非表示
- `Ctrl+,` : Settings の表示
- `Ctrl-Shift-M` : Markdown Preview の表示・非表示

### 注意点
atomはバージョン毎に異なるフォルダへ格納されるので、以下の点に注意が必要。

- 拡張子に関連付けない方がよい。バージョンアップの度に関連付けし直さないと、古いバージョンへ紐付けられたままになってしまう。
- 同様に、タスクバーへピン止めしない方がよい。
- 同様に、手動でショートカットを作成しない方がよい。
30秒で読める超基本的なcssの書き方

**以下の100の部分を赤に変えたい場合のcssの良い書き方**

```html
<p id="amep"><span>100</span>円</p>
```

**[ダメな例]** 
**html**

```html
<p id="amep"><span id="red">100</span>円</p>
```

**css**

```css
#red{
 color:red;
}
```

**[良い例]**
**css**

```css
#amep span{
 color:red;
}
```

このようにできるだけタグで指定してあげた方が良いです。
値の書き換え(ref, ref-set)

# 値の書き換え方
と言いつつも本当は
>変更不可なオブジェクトへの変更可能な参照 
(プログラミングClojure第２版 p113 より引用)

を作るということ。

ちょっと何言ってるかわかんないです。

簡単に言うと、さも値を書き換えたかのように振る舞わせることが出来るということ？

# ソースコード
```clj:tmp.clj
(def var (ref "FScoward"))

(str @var)

(dosync (ref-set var "Takagaki Ayahi"))

(str @var)
```
# 結果
![スクリーンショット 2014-10-07 22.11.19.png](https://qiita-image-store.s3.amazonaws.com/0/39243/a8762b88-d701-75d7-2c6e-9fb7075ab51a.png)

明日（10月8日）は[高垣彩陽](http://www.takagakiayahi.com/)さんの新曲発売ですね！
iBeaconを使用前に設定しとくこと


iBeaconだけではないと思いますが、位置情報使ったアプリを作るときに、まずやっとく設定があり、ぐぐっても出てこなかったので残しておきます。(ここには書いてあります[CLLocationManager](https://developer.apple.com/library/ios/documentation/CoreLocation/Reference/CLLocationManager_Class/index.html#//apple_ref/occ/cl/CLLocationManager))

## やること

##### 2014/10/08修正

[135yshr](http://qiita.com/135yshr)さんに教えていただいたブログでようやっと理解できたので、修正しました。

info.plistに「NSLocationWhenInUseUsageDescription」か、「NSLocationAlwaysUsageDescription」を入れます。TypeはString、Valueは説明文。

![kobito.1412767032.650530.png](https://qiita-image-store.s3.amazonaws.com/0/15786/05d33eb0-651d-22fa-8677-457954659708.png "kobito.1412767032.650530.png")

設定すると、アプリ起動時に出てくる位置情報取得の確認ポップや、設定画面の位置情報に下のように出てくる。

* NSLocationWhenInUseUsageDescription: このApp使用中のみ許可
* NSLocationAlwaysUsageDescription: 常に許可

Appの説明に、Valueに設定した説明文が表示されます。やたー

![kobito.1412767488.534724.png](https://qiita-image-store.s3.amazonaws.com/0/15786/e9c7e09f-330c-f495-2ca0-5744589cb709.png "kobito.1412767488.534724.png")


info.plistの設定はいつも適当なので、ちゃんと調べたいです。。。
jQueryのoffset()を使う際の注意


cssのzoomプロパティを使用した状態で、jQueryのoffsetメソッドを使用すると正しい値を取得することができない。
一方で、ネイティブのoffsetTopを使用すれば、cssにzoomを使用していても正しい値を取得することができる。
従って以下のようにコードを書き換えると良い。

jQuery:

```
var target = $( '#target' ).offset().top;
```

↓

Native JavaScript:

```
var target = $( '#target' ).get( 0 ).offsetTop
```
Varnish 3用のVMODを4に対応させる

ごめん、メモ書きです。

## Varnish3用のVMODを4に対応させる方法

http://lassekarstensen.wordpress.com/2013/12/19/converting-a-varnish-3-0-vmod-to-4-0/

によると、

- varnishapi.pcとvarnish.m4を適切な場所に配置して
- https://gist.github.com/lkarsten/8039861 にある通り、vmod_policy.cを修正してやる

とVarnish4用にVMODをmakeできるようになるとのこと。

なお、vmod_policy.c とは下記のことのようです。

```
ex. vmod_ratelimitの場合
${https://github.com/tobixen/libvmod-ratelimit/archive/master.zipを展開したパス}/src/vmod_ratelimit.c
```

なぜ"ようです"なんて曖昧な表現をしているかというと、自分で試せていないから。
申し訳ない。


## どのVMODがどのバージョンに対応してるのさ？？
は
https://www.varnish-cache.org/vmods
こちらで検索してみてね。
Emacs Lisp のテストカバレッジを Coveralls.io に登録できる undercover.el

## 経緯

日常的に Emacs Lisp を TDD で開発してる方は多いと思いますが、その場合やはりカバレッジも気になってしまう世の中だと思います。しかしこれまでは Ruby で言えば [coveralls-ruby](https://github.com/lemurheavy/coveralls-ruby) 、GoLang であれば [goveralls](https://github.com/mattn/goveralls) があっても Emacs Lisp 用の Coveralls.io ライブラリはありませんでした。

ですが本日 **undercover.el** と呼ばれる、Emacs Lisp 用 Coveralls.io ライブラリを発見したので、実際に使ってみた報告を致します。

## 導入

[sviridov/undercover.el](https://github.com/sviridov/undercover.el)

既存のテストコードに手を加える量はほとんどなく、

```diff
+(require 'undercover)
+(undercover "foobar.el") ;; カバレッジ取りたいファイルを指定(ワイルドカードでもOK)

 (require 'foobar)         ;; 上記の undercover の **後に** require
```

これくらいです。

**注意**

もしテストランナーとして `ert-runner` を使っていない方は、そちらに乗り換える必要があるかもしれません。(深くコードを追っていませんが、`ert-runner` で実行される前提のコードがいくつかありました)

## 結果

拙作である [json-reformat.el](https://github.com/gongo/json-reformat) で動かしてみました。

- [gongo/json-reformat | Coveralls - Test Coverage History & Statistics](https://coveralls.io/r/gongo/json-reformat)
- [gongo/json-reformat | Build #41 | Coveralls - Test Coverage History & Statistics](https://coveralls.io/builds/1303425)

[![スクリーンショット 2014-10-07 21.58.09.png](https://qiita-image-store.s3.amazonaws.com/0/6635/5f15a3ac-84fa-c0e7-f5b8-e523fb4f59cf.png)](https://coveralls.io/files/309102011)

しっかり動いてくれた模様です。便利！

## まとめ

まだ出来立てのライブラリなので今後いろいろ変わっていくと思いますが、今後とも期待です。

Refs:

- [undercover.el で Emacs Lisp のテストも Coveralls.io に登録するぞ！ - Thanks Driven Life](http://gongo.hatenablog.com/entry/2014/10/07/213249)
treeコマンドのインストール

必要なパッケージのインストール

```
$ sudo yum install gcc
```

インストール

```
$ wget ftp://mama.indstate.edu/linux/tree/tree-1.6.0.tgz
$ tar zxvf tree-1.6.0.tgz 
$ cd tree-1.6.0
$ make 
$ sudo make install
```

確認

```
$ tree --version                                 
tree v1.6.0 (c) 1996 - 2011 by Steve Baker, Thomas Moore, Francesc Rocher, Kyosuke Tokoro 
```

よく使うオプション
-a ・・・ 隠しファイルも含めた全てのファイルを表示
-d ・・・ ディレクトリのみを表示
-L level ・・・ 指定した階層の深さ(level)まで表示する
メタファーで理解するSwift -optional-


私はSwift（あるいは他の言語でも良いが）のoptionalについて説明するときに、"みかん箱のメタファー"を使う。

みかん箱（:Option[Orange]）なので、中に入っているものは「みかん」（:Orange）なのだけれど、
中に本当に「みかん」が入っているかは開けてみる（unwrapする）まで分からない。

「みかん」（:Orange）は食べられるけど、「みかん箱」（:Option[Orange]）は（当然ながら）食べられない。
だから我々は「みかん」が入っていた場合だけ、食べることにした。

```swift
if let orange = orangeBox {
    orange.eat() // うっまーーーーい！
}
```

＃イラスト募集です！
macのネイティブクライアントでvpn(PPTP)で繋がらない、すぐに切断されてしまう場合


mtu値がデフォルト値（自分の環境では1500）だと
高いケースがあるので下げる。

```bash
sudo /sbin/ifconfig en0 mtu 1300
```

自分の場合はこれでOKでした。

http://secure.switchkonnect.com/knowledgebase/35/Frequent-disconnects-Unable-to-browse---PPTP-MTU-Issue---MacOSX.html
Raspberry Piに mosquitto をインストール


sudo aptget install mosquitto だけで OK でした

``` bash:結果
pi@raspberrypi ~ $ sudo apt-get install mosquitto
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following NEW packages will be installed:
  mosquitto
0 upgraded, 1 newly installed, 0 to remove and 23 not upgraded.
Need to get 64.3 kB of archives.
After this operation, 180 kB of additional disk space will be used.
Get:1 http://mirrordirector.raspbian.org/raspbian/ wheezy/main mosquitto armhf 0.15-2 [64.3 kB]
Fetched 64.3 kB in 1s (41.6 kB/s)
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
	LANGUAGE = (unset),
	LC_ALL = (unset),
	LANG = "ja_JP.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
Selecting previously unselected package mosquitto.
(Reading database ... 93832 files and directories currently installed.)
Unpacking mosquitto (from .../mosquitto_0.15-2_armhf.deb) ...
Processing triggers for man-db ...
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
Setting up mosquitto (0.15-2) ...
insserv: warning: script 'uv4l_uvc' missing LSB tags and overrides
[ ok ] Starting Mosquitto message broker: mosquitto.
pi@raspberrypi ~ $ 
```

しかし、これにはクライアント(mosquitto_sub, mosquitto_pub) が含まれていませんでした！

そこで、ソースからビルド、以下を参考にさせていただきました
http://flyerback.blogspot.jp/2014_04_01_archive.html

```bash:
sudo apt-get install libwrap0-dev libssl-dev
wget http://mosquitto.org/files/source/mosquitto-1.3.4.tar.gz
tar zxf mosquitto-1.3.4.tar.gz 
cd mosquitto-1.3.4/
make
```
しかし、ares.h がない、というエラーになるのでこれもインストールして再度 make

```bash:
sudo apt-get install libc-ares-dev
make
sudo make install
sudo ldconfig
```

これで、mosquito_sub も mosquito_pub もできました
Django事始め その4


`Python3`&`Django`&`MySQL`が連携できたのでDBマイグレーションを挑戦してみる。

##開発環境
PC: MacOS X 10.9.4
Python3.4.1
Django1.7


##サーバの起動

```python3
$ python3 manage.py runserver
```

サーバを起動すると、Djangoの画面が表示されるようになった。
[http://localhost:8000/](http://localhost:8000)

![スクリーンショット 2014-10-07 21.05.50.png](https://qiita-image-store.s3.amazonaws.com/0/3184/4ac66bd9-7849-aecd-4e53-14faf17bbe28.png "スクリーンショット 2014-10-07 21.05.50.png")

##DjangoでのDBマイグレーション

マイグレートすると、Django管理画面に必要なテーブル群が作成される。

```python3
$ python3 manage.py migrate
```


##管理画面の表示

[http://localhost:8000/admin](http://localhost:8000/admin)

![スクリーンショット 2014-10-07 20.55.26.png](https://qiita-image-store.s3.amazonaws.com/0/3184/5ec89e6c-c889-7e80-82c7-1f656efa495d.png "スクリーンショット 2014-10-07 20.55.26.png")



しかし、ユーザを作成していないので当然ログインできない。
そこで、スーパーユーザを作成する。

##スーパーユーザの作成

```python3
$ python3 manage.py createsuperuser

```

![スクリーンショット 2014-10-07 20.26.33.png](https://qiita-image-store.s3.amazonaws.com/0/3184/421eb5d2-b990-5a36-18d4-eda4c5481deb.png "スクリーンショット 2014-10-07 20.26.33.png")

スーパーユーザでログインしてDBの中を覗いてみると、ちゃんとユーザが作成されている。

![スクリーンショット 2014-10-07 20.55.06.png](https://qiita-image-store.s3.amazonaws.com/0/3184/51193021-ec0e-55a8-8398-a8f403ecdc53.png "スクリーンショット 2014-10-07 20.55.06.png")
UITextFiled(xib)でUITextBorderStyleRoundedRectのまま高さを変更する

該当のxibを "Open As"-> "Source Code".で開いてtextFieldで検索かけてhightを変更

```
<rect key="frame" x="10" y="20" width="300" height="30"/>
↓
<rect key="frame" x="10" y="20" width="300" height="40"/>
```

実際変わるけどこの方法で良いのだろうか…
第23回 AWS User Group - Japan 東京勉強会のメモ

## 第23回 AWS User Group - Japan 東京勉強会

Jeff Barr
1st Evangelist for AWS

AWS Blog: http://aws.amazon.com/jp/blogs/aws/

## Jeffの好きなAWSのサービス
### 2004

* SQS
(Simple Queue Service)
多くのサービスのベースになっている
数のコンポーネント間の疎結合を保ち、バッチ処理等の冗長性・拡張性を確保するために必要不可欠なサービス

http://qiita.com/inokappa/items/cfd523f19593dcad1de6

http://dev.classmethod.jp/cloud/aws/sns-topic-should-be-placed-behind-sqs-queue/

* Mechanical Turk

http://aws.amazon.com/jp/mturk/

### 2006

* S3 (Simple Storage Service)
* EC2 (Elastic Compute Cloud)

インスタンスのタイプを増やしていって・・・
リージョンの概念ができはじめた
エコシステム

### 2007

* FPS (Flexible Payment Service)

### 2008

* EBS (Elastic Block Storage)

中ですごい複雑なことをしているので、
最近は安定して使えるようになって進歩がすごいな

### 2009

* RDS (Relational Database Service)

日本はRDSが大好き
どこの国のリージョンより
日本でRDSが使われている

### 2010

* Route53

DNS Server
自分でドメインを買ってできる
最近はお名前.com使わなくても
ドメインもRoute53で、できる

### 2011

* Tokyo Region

クラウドが日本に上陸

### 2012

* Redshift

http://aws.amazon.com/jp/redshift/

http://gihyo.jp/dev/serial/01/redshift

http://www.slideshare.net/AmazonWebServicesJapan/amazon-redshift

### 2013

* WorkSpaces

http://aws.amazon.com/jp/workspaces/

### 2014

* Mobile Services

http://aws.amazon.com/jp/mobile/
Net::HTTP のタイムアウトは Timeout::Error で拾える

当たり前の事かも知れないのでコード読んでて、なんでってなったのでメモ書き

## サンプル

```rb
require 'net/http'

begin
  http = Net::HTTP.new('http://example.com', 80)
  http.open_timeout = 5 # タイムアウト系のエラーが出るのを期待
  http.read_timeout = 10

  res = http.request(Net::HTTP::Get.new('/'))

  # たぶんレスポンスで分岐して処理をする

rescue Timeout::Error
  # timeout error
rescue => e
  # other error
end
```

## Net::HTTP のエラー

[Net::HTTP](http://ruby-doc.org/stdlib-2.0/libdoc/net/http/rdoc/Net/HTTP.html) を眺めていると、それぞれのタイムアウト設定の説明には以下のように記載されています。

> __open_timeout__
If the HTTP object cannot open a connection in this many seconds, it raises a Net::OpenTimeout exception. 

> __read_timeout__
If the HTTP object cannot read data in this many seconds, it raises a Net::ReadTimeout exception. The default value is 60 seconds.

なので、例外としてはそれぞれを補足するのかなぁと思っていました。

## Timeout::Error のサブクラスだった

ということでした。

[Class: Net::ReadTimeout](http://yard.ruby-doc.org/stdlib-2.1.0/Net/ReadTimeout.html)

> Inherits:Timeout::Error

なるほどでした。なんか `timeout` を使った時に出るものなのかと思ってました。
How to access a web app on vagrant by an android device(non-root)

androidからvagrant上のアプリにアクセスするのは、ちょっと面倒。
なぜなら、androidで`/etc/hosts`を変更するのはroot権限が必要だからだ。

そこで、ホストマシンにBIND（DNSサーバ）をセットアップして、androidからそのDNSサーバを利用する方法を試してみた。

# How to

* BIND(DNSサーバ)をホストマシンにインストール
* androidで使うDNSを変更
    * ルータのDNS情報を変更、もしくはandroidからDNS変更
        * 参考：[AndroidでDNSを設定する方法｜携帯総合研究所](http://mobilelaby.com/blog-entry-5530.html)
iPhoneの画面解像度・アスペクト比一覧表


メディアクエリーで指定する際などに困った＆いちいち調べるのも飽きたのでまとめ。

## iPhone

|バージョン   |画面解像度 |アスペクト比|デバイスピクセル比|
|-------------|-----------|------------|------------------|
|iPhone 3 系  |320×480   |2:3         |1                 |
|iPhone 4 系  |320×480   |2:3         |2                 |
|iPhone 5 系  |320×568   |40:71       |2                 |
|iPhone 6     |375×667   |375/667     |2                 |
|iPhone 6 plus|414×736   |9:16        |3                 |


## iPad

|バージョン   |画面解像度 |アスペクト比|デバイスピクセル比|
|-------------|-----------|------------|------------------|
|iPad 1       |768×1024  |3:4         |1                 |
|iPad 2       |768×1024  |3:4         |1                 |
|iPad mini 1  |768×1024  |3:4         |1                 |
|iPad 3 以降  |768×1024  |3:4         |2                 |


## 雑感

iPhone 6 plus の登場で、iOS の画面解像度界隈もいよいよカオスな様相を呈してきましたね。ここではスルーしていますが、6 plus は画像の比率が @3× だとか。制作者は泣いていますよ？

その点、iPad シリーズは全て 768×1024 (3:4)。古き良き時代を思い出し、思わず喜びと美しさを感じてしまう数値ですね。この美しい世界が失われないことを願ってやみません。

Android 端末？なにそれおいしいの？


## 追記（2014-10-08）

- アスペクト比でメディアクエリーを指定する場合のために、数値を横×縦にした上で iPhone 5 系と iPhone 6 のアスペクト比を正確な数値にしました。
- ついでに欲が出てデバイスピクセル比も追加。そうしたら iPad 枠も必要になってしまったので追加。
- max-height とかも一応欲しいかな？などと思ったものの、どんどん項目が増えて収集つかなくなりそうなので、参考リンクを最後に追加。


## 参考

- [EZ-NET: iPhone や iPad の画面サイズ早見表 : iPhone プログラミング](http://program.station.ez-net.jp/special/handbook/objective-c/iphone/ui/layout.asp)  
ステータスバーやツールバーのサイズもありました。助かります。
Enumerable#sample_by_rate というメソッドでサンプリングするのはどうか

2014-10-14 02:00 追記

GitHub および RubyGems.org に `sample_by_rate` として公開しました。
https://github.com/yuya-takeyama/sample_by_rate
https://rubygems.org/gems/sample_by_rate

---

Ruby でデータのサンプリングといえば `Array#sample` というメソッドがあります。

```rb
(1..10).to_a.sample 3
# => [6, 1, 7]
```

もちろん結果は毎回異なります。

`Enumerable` ではなく `Array` のメソッドなので `to_a` が必要です。

この場合は `to_a` で解決することができましたが、以下のような場合は問題になります。

* データがとても大きい (`to_a` 時に多くのメモリを必要とする)
* 要素数がわからない (`Array#sample` の実装は、要素数がわかることを前提としているようです)
* 要素数が無限 (そもそも `to_a` ができない)

これは、`Array#sample` が「指定要素数分ランダムに取得する」という実装になっていることによる問題です。
これに対して、例えば「指定した確率で要素を yield する」というものであれば、要素数のわからない `Enumerable` や、`Enumerator::Lazy` による無限リストに対しても問題なく使えるでしょう。

# というわけで作ってみた

```rb
module Enumerable
  def sample_by_rate(rate)
    return enum_for(__method__, rate) unless block_given?

    each {|n| yield n if rand < rate }
  end
end
```

## 使い方

以下は 1 から 1000 万までの数列を、10% にサンプリングして出力する例です。

```rb
(1..10000000).sample_by_rate(0.1) do |n|
  puts n
end
```

実行して行数をカウントすると、だいたい 10% ぐらいの数になっているのがわかります。

```
$ ruby sample.rb | wc -l
1001584
```

なかなか便利だと思うので gem にして公開するつもりです。
より良いメソッド名とかあればコメントいただけると幸いです。
StartSSL+haproxyで無料でSSL対応サイトを作るのメモ


[無料のSSL証明書StartSSLを活用する](http://qiita.com/inokappa/items/9da6c90e1c569aa6c017)
http://qiita.com/k-shogo/items/870b6d3939dd08da2de4


[超私的 Undocumented HAProxy Vol.1 〜SSL サーバー証明書の設置〜](http://qiita.com/inokappa/items/9da6c90e1c569aa6c017)
http://qiita.com/inokappa/items/9da6c90e1c569aa6c017

　
上記を参考にStartSSLで手続きをします。
で、もろもろのファイルを揃えたら、証明書を作ります。

```
cat startssl.crt ca.pem sub.class1.server.ca.pem startssl.key > hogehoge.com.pem
```

作った証明書を適当に配置

```
cp -p hogehoge.com.pem /etc/haproxy/ssl/.
```

で、haproxy.cfgに設定を追加

```haproxy.cfg
frontend all_ssl
    # 受け入れる接続元
    bind 0.0.0.0:443 ssl crt /etc/haproxy/ssl/hogehoge.com.pem
```

で、haproxyを再起動して、httpsでアクセスできたら成功です。
Emacs の設定 for Google C/C++ コーディング スタイル

表題の通り。
こちらからダウンロード可能。
http://google-styleguide.googlecode.com/svn/trunk/google-c-style.el

設定はこんな感じらしい。

```el
(add-hook 'c-mode-common-hook 'google-set-c-style)
```

興味を持たれた方は使ってみるといいだろう。