OmniAICreator/Qiita-1.07M huggingface dataset:
smallbasicでosilloscope

# 概要
　smallbasicでarduino unoを使ってosilloscopeを作った。
# 写真
![osillo.JPG](https://qiita-image-store.s3.amazonaws.com/0/18104/22fef458-55d3-1f9b-ecf5-a688a4343b36.jpeg)

# サンプルコード１
```
yCenter = 300
y = 0
x = 0
SetupWindow()
InitVariables()
Class1.OpenPort("COM5", 9600)
Loop:
  Cur = Class1.RXByte()
  x = x + 1
  If x > 800 Then
    x = 0
  endif
  y = 400 - Cur
  Shapes.Move(Dot[x], x, y)
Goto Loop
Sub SetupWindow
  GraphicsWindow.Width = 800
  GraphicsWindow.Height = 600
  GraphicsWindow.BackgroundColor = "Black"
  GraphicsWindow.Title = "Osilloscope"
  GraphicsWindow.Show()
EndSub
Sub InitVariables
  GraphicsWindow.PenColor = "orange"
  GraphicsWindow.BrushColor = "orange"
  For x = 0 To 800 Step 2
    Dot[x] = Shapes.AddEllipse(4, 4)
    Shapes.Move(Dot[x], x, yCenter)
  EndFor
EndSub
```
# サンプルコード２
```
void setup()
{
	Serial.begin(9600);
}
void loop()
{
	int val = analogRead(A0);
	Serial.write((val >> 8) & 0xff);
}
```
RSSで取得したpubDateをNSDateFormatterで変換（Swift）

		
##
ロケールが日本語の時に上手く日付を取得できなかったので、残しておく。
`Wed, 04 Nov 2015 15:02:11 +0000`
上記のような書式の日付を
`11月04日(水)`
に変更します。


```swift
        // string = "Wed, 04 Nov 2015 15:02:11 +0000"
        let identifier = NSLocale.currentLocale().localeIdentifier
        
        if identifier == "ja_JP" {
            let dateFormatter = NSDateFormatter()
            // 書式が変わらない固定ロケールで一度値を取得
            dateFormatter.locale = NSLocale(localeIdentifier: "en_US_POSIX")
            dateFormatter.dateFormat = "EEE, dd MMM yyyy HH:mm:ss ZZZZ"
            let r_date = dateFormatter.dateFromString(string!)
            
            if let d = r_date {
		         // ロケールを日本語にして曜日を取得
                dateFormatter.locale = NSLocale(localeIdentifier: "ja_JP") 
                dateFormatter.dateFormat = "MM月dd日(E)"
                tmpEntry.addObject(dateFormatter.stringFromDate(d))
            }
        }
        // 日本語以外
        else{

        }
```

localeIdentifierを一度en_US_POSIXにするのがポイント。


##参考
NSDateFormatterの使い方まとめ
http://qiita.com/gonsee/items/d3fb641914d2ca45e858

Swiftで現在日時を取得し、独自のフォーマットで出力する方法
http://qiita.com/cotrpepe/items/261833c465af5d70f867
JAVA Integer.intValue() / Integer.valueOf() / AutoBoxing / AutoUnboxing

#ラッパークラスへの変換
##■valueOf(Integerに変換したいintの変数)
int を Integerに変換

```java
int ii = 15;
		Integer ii2 = Integer.valueOf(ii);
		System.out.println(ii2);
```

■実行結果
15

■例② int を Integerに変換
```java
		int bb2 = Integer.valueOf("50");
		System.out.println(bb2);
```

■例② 実行結果
50
#基本データ型への変換
##■intValue(intに変換したいIntegerの変数)
Integerをintに変換

```java
		int ii = 15;
		Integer ii2 = Integer.valueOf(ii);
		System.out.println(ii2);
		int ii3 = ii2.intValue();// Integer型をint型に変換
		System.out.println(ii3);
```

■実行結果
15
15

#ラッパークラス型と基本データ型との間で代入を行う式を記述すると、自動的にvalueOf()や～value()による型変換が行われる
##■AutoBoxingとAutoUnboxing

```java
		int i = 20;
		Integer i2 = i; // intをIntegerに自動変換
		int i3 = i2; // Integerをintに自動変換
		System.out.println(i3);
```

■実行結果
20
日本人が間違いやすいコーディング上の英語


コードレビューしていく中で、コードのレビューというよりは英語のレビューをしている時があって、日本人が特に間違えやすいと思われるポイントをいくつかまとめておきたいと思います。

下記はrubyのコードをサンプルにしています。特にrubyはコードを英文として読めるように書けるというのをこだわっているのでより英語表現を意識した書き方をしたいですね。

# 自動詞と他動詞

日本語の自動詞と他動詞は、"を"をつけるかどうかの問題で動詞の問題ではないので、日本人は自動詞や他動詞の意識が低いようです。英語では使い方をしっかりしないと意味のわからないメソッドが完成します。

```
# 自動詞
@user.run_to(@shop) # 走る

# 他動詞
@user.run(@shop) # 経営する
```

# 動詞->目的語の語順

日本語の語順が目的語+動詞（xxをyyする）なので目的語を先に書く人が多いです。基本は動詞を先に書くよう意識しましょう。

```
# bad
@user.attributes_update(params[:user])

# good
@user.update_attributes(params[:user])
```

# 「~している」は「~ing」だけじゃない

日本語で「~している」という表現は広い意味があります。~ingが表すのはその**瞬間に**動作している場合です。「run（走る）」などの**動作動詞**ではなく**状態動詞**の「持っている（have）」や、**完了形**の「(ずっと)ログインしている（have logged in）」も日本語で「~している」と書くので注意が必要です。

- その瞬間「~している」: **ing形**
- 期間中ずっと「~している」: **完了形**
- 状態としての「~している」: **現在形**

# 引数を動詞や前置詞の目的語として使う

英語の基本は5文型(SV、SVC、SVO、SVOO、SVOC)です。インスタンスのメソッドであれば動詞が基本となるので、それに合わせて引数は目的語として使うのに相性がいいです。また、前置詞を伴って前置詞の目的語としても使います。

```
# 引数が動詞の目的語
@user.invite(@friend)

# 引数が前置詞の目的語
@user.go_to(@shop)
```

# 疑問形（後ろに?をつける）メソッドにbe動詞は入れない

**注意: ruby以外のケースは補足を確認してください**

日本語の疑問文は最後に「か？」を入れるだけので、英語のような主語と動詞が入れ替わる文法に慣れていません。

```
# bad 
@user.is_admin?
```

としてしまうと、The user is admin?と言っているようで英語的ではありません。Is the user admin?が正しい疑問形です。 

```
# good
@user.admin?
```

の方が英語的ですし、スマートですね。

**補足**

Ruby以外の言語はif文は疑問形ではなく肯定文として考えるのがいいと思います。その場合はisを伴う方が正しいです。

```
# If the user is admin, then ~
if user.is_admin
```

# 受動態、進行形の疑問形メソッドもbe動詞は入れない

同じルールで疑問形のメソッドにおいて受動態、進行形のbe動詞も入れません。

```
# Is the user running?
@user.running?

# Is the user changed?
@user.changed?
```


# aとtheの使い分け

メソッドにaやtheが入ることはあまりないですが、コメントやspecの説明に文章を入れる際には正式な文章を書くことになります。aやtheは学校では「ある」とか「それ」とかおまけ的な習い方をする事が多いのでaやtheの忘れ、用途間違いが非常に多いようです。

オブジェクト指向言語においてインスタンスを生成したらそれは基本的に数えられる可算名詞です。何かしら冠詞をつけましょう。基本原則は下記だと思ってください。

- aはなんでもいい1つのもの
- theは特定できるそれ

以下のものはtheを使って説明します。

```
# ID指定で取得したインスタンス
user = User.find(id)

# 定義した特定のメソッド
my_method()

# 特定のPath
redirect_to "/users"
```

ここにaを使ってしまうと、なんでもいいからあるインスタンスの事を指していたり、なんでもいいからあるPathにリダイレクトしなさいだのといった説明になってしまいます。特定のIDを持つインスタンス、URLを持つものはちゃんとtheを使って表現しましょう。

# 三単現のs

三単現のsも日本語にない概念なので無視して書く人が非常に多いです。逆にしっかりしていると非常にクリアな文章に見えます。

```
it "returns with status 200"
```

# of多用問題

日本語でも「の」を多用する問題がありますが、英語でもそのままofで繋げて非常にぶつぶつ切れた読みにくい文章になるケースがあります。"名詞+名詞"や"名詞's 名詞"の形式に置き換えるだけでぐっと自然になります。

- a user of admin -> an admin user
- items of the user -> the user's items


# 時間にはat、日付にはon

前置詞の表現が時間と日付で違います。at the time, on the dayとなります。時間のatはその瞬間の **地点** を表すのに対して、日付のonはすこし平らな **台の上** に乗っているイメージになります。

```
# 作成日時を保存
user.created_at # Time

# 作成日を保存
post.created_on # Date
```
# registという単語は存在しない

日本人には(？)なぜかregistという単語が存在すると思っている人が多いですが、そんな単語は存在していません。意外と間違いだと気づいていない人が多いのでリストアップしておきました。

# 最後に

随時追加していきたいのでみなさんからの英語Tipsも教えてもらえると幸いです。
ActiveRecordのfindは委譲しているのにsumはしてない.....

[Rails - ActiveRecordの処理の委譲方法が多彩すぎる - Qiita](http://qiita.com/shingo-nakanishi/items/df54ada0ae1254bcda17)

AciveRecordのfindはブロックが与えられた時は to_aして委譲してるのに

```
    def find(*args)
      if block_given?
        to_a.find(*args) { |*block_args| yield(*block_args) }
      else
        find_with_ids(*args)
      end
    end
```

sumはしてない

```
    def sum(*)
      calculate :sum, nil
    end
```
他人の出しているPull Requestを自分のブランチとして取り込む

## 動機

他人の出しているPull Requestについて、自分のブランチとして実験・修正したい、ということがありました。具体的には下記のような状況です。

* 本体GitHubリポジトリ
    * Aさんがforkしたリポジトリ
        * Pull Requestが出ているブランチ（←これを自分のリポジトリに取り込みたい！）
    * 自分がforkしたリポジトリ


自分が本体からforkしていない状態であれば、単にAさんのリポジトリをforkするだけで問題のブランチも手に入りますが、残念ながら自分は既にfork済みで、かつ何度かPull Requestを送っているので自分のリポジトリを消すわけにもいきません。

また、問題のブランチがTravis CIでのテストに通るかどうかに興味があったので、手元にPull Requestのコピーを作るだけでなく、自分のブランチとしてGitHubにpushして、自分のTravis CIアカウントで動作確認したい、という状況でした。

## 手順

以下、下記のような状況だとします。

* Aさんリポジトリ：`ssh://git@github.com:A-san/Spoon-Knife.git`
    * Pull Requestが出ているブランチ名：`new-feature`
* 私のリポジトリ：`ssh://git@github.com:hnw/Spoon-Knife.git`

私は次のようにして`new-feature`ブランチを自分のリポジトリに持ってきました。

```
$ git checkout master
$ git checkout -b new-feature
$ git remote add A-san ssh://git@github.com:A-san/Spoon-Knife.git
$ git pull A-san new-feature
$ git push origin new-feature
```

自分のHEADとAさんがブランチを切ったときのHEADがズレているとpullのタイミングでマージコミットができますが、今回は気にしないことにします。

これで手元の`new-feature`ブランチを修正してpushすればTravis CIでの動作確認ができるというわけです。

## もっといい手があると思う！

Git魔術師の方々ならどうするか、教えてほしいです！
複数条件で除外　rubyワンライナー

テキストファイルから，○○○を含み×××を含む行を除外したかった．

できるだけ後から見てもすっきりわかる方法をと思ってたどり着いた方法．

AAAを含む行　が　BBBを含んでいなければ除外したい
このファイルから特定の行を除外したい

```
$ cat oneline.txt 
AAA BBB
AAA
BBB
CCC
AAA CCC
BBB CCC
```

AAA があって　BBBを含まなければ除外

```
$ ruby -ne 'print $_ unless  (/AAA/ =~ $_) &&  not(/BBB/ =~ $_) ' oneline.txt 
AAA BBB
BBB
CCC
BBB CCC
```

if にすれば，除外した行が表示される

```
$ ruby -ne 'print $_ if  (/AAA/ =~ $_) &&  not(/BBB/ =~ $_) ' oneline.txt 
AAA
AAA CCC
```
Xcode 7 で iOS 9 の実機iPhoneを認識させようとすると unavailable と言われた解決方法

XcodeにiPhoneの実機を認識さえようとしたところ、エラがーでて実機が認識されなくなりました。

# 実機が認識されません
ケーブルでiPhoneをMacに接続したものの認識されません。
**IneligibleDe Devices**と言われます。

<img width="212" alt="スクリーンショット 2015-11-12 15.26.02.png" src="https://qiita-image-store.s3.amazonaws.com/0/1624/daf3e576-56a8-bb63-e046-ee530f0d3b09.png">

# Xcodeをアップデートする
現在のXcodeのバージョンは`Xcode 7.0.1`だったのでアップデートをしました。

アップデートで`Xcode 7.1.1`になりました。

# 再度実機が認識されるか確認
こんどは実機が認識されました(☝ ՞ਊ ՞)


# 参考
http://stackoverflow.com/questions/32542036/xcode-7-with-ios-9-device-error-device-unavailable-could-not-find-a-developer
Arduino IDEをHiDPIのディスプレイで動かす

# きっかけ
Macbook Pro(retina)でVMWare Fusion上の仮想Windows10を動かし、その中でArduinoを使おうと思ったら画面がめちゃくちゃ小さい。
これでは使えないので起動時の設定を変えられないか調べた。
<img width="240" alt="設定前.png" src="https://qiita-image-store.s3.amazonaws.com/0/85460/36a5f318-1c16-b595-d16b-762f562aa28f.png">

# やりたいこと
- デフォルトのウインドウサイズを大きくしたい
- エディタのフォントも大きくしたい。


# 手順
環境設定画面によると、以下に設定ファイルが格納されているらしい。
`C:\Users\Windows8\AppData\Roaming\Arduino15\preferences.txt`
以下の値に変更。
- `editor.font=Monospaced,plain,28`
- `editor.window.height.default=1200`
- `editor.window.height.min=580`
- `editor.window.width.default=1000`
- `editor.window.width.min=800`

#結果
設定後
<img width="250" alt="設定後.png" src="https://qiita-image-store.s3.amazonaws.com/0/85460/1fc11318-b703-8b47-8805-4f5862ad21dd.png">

行番号や、タブの文字など一部の文字はサイズ変更できなかった。

#補足
IDEが使っているSwing自体がHiDPIをうまくサポートできていないとの情報あり。
Arduino IDE window really small on High DPI Dispay?
http://forum.arduino.cc/index.php?topic=263838.0
nilの可能性があるオブジェクトに便利なtryメソッド

オブジェクトがnilの時NoMethodErrorが返ってくるので、nilチェックが必要になる。その対応にActiveSupportのtryを使うと便利です。

```
hoge_name = hoge ? hoge.name : 'hoge'
# try使うと
hoge_name = hoge.try(:name) || 'hoge'


@hoge = Hoge.all
hoge_id = @hoge.id if @hoge
# try使うと
hoge_id = @hoge.try(:id)


# view(slim)の場合
div
 = "名前: #{@hoge.name unless @hoge.nil?}"
# try使うと
div
 = "名前: #{@user.try(:name)}"
```

引数も使えるみたいです。

参考
http://apidock.com/rails/Object/try
アットマーク(@)を含む名前のファイルをSubversionで扱う方法 

ファイル名の末尾に@を付けます。

通常は下記のようにエラーとなりますが:

```shell-session
% svn add aaa@bbb.txt
svn: E200009: 'aaa@bbb.txt': a peg revision is not allowed here
```

ファイル名の末尾に@を付けると、末尾の@は無視されて`aaa@bbb.txt`というファイル名として認識されます：

```shell-session
% svn add aaa@bbb.txt@
A         aaa@bbb.txt
```

## 参考

- [svn - How to escape @ characters in Subversion managed file names? - Stack Overflow](http://stackoverflow.com/questions/757435/how-to-escape-characters-in-subversion-managed-file-names "svn - How to escape @ characters in Subversion managed file names? - Stack Overflow")
Unity&iOSで、Missing Push Notificationと言われるときの対応メモ


## Missing Push Notification Entitlement

Unityで作ったアプリをAppleの審査にだしたら、次のような内容のメールが来た。

>Missing Push Notification Entitlement - Your app appears to include API used to register with the Apple Push Notification service, but the app signature's entitlements do not include the "aps-environment" entitlement. If your app uses the Apple Push Notification service, make sure your App ID is enabled for Push Notification in the Provisioning Portal, and resubmit after signing your app with a Distribution provisioning profile that includes the "aps-environment" entitlement. See "Provisioning and Development" in the Local and Push Notification Programming Guide for more information. If your app does not use the Apple Push Notification service, no action is required. You may remove the API from future submissions to stop this warning. If you use a third-party framework, you may need to contact the developer for information on removing the API.


どうやら、アプリにPush Notification関係のコードが含まれているから、ちゃんと設定しろ（Profileとか？）ということらしい。

## 対策

UnityAppController.mmに含まれる、以下の３つのメソッドをコメントアウトしてやれば良いらしい。

```application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo```
```application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken```
```application:(UIApplication*)application didFailToRegisterForRemoteNotificationsWithError:(NSError*)error```

![スクリーンショット 2015-11-13 9.47.43.png](https://qiita-image-store.s3.amazonaws.com/0/20722/ed217144-183b-9e0d-e3d7-48c5151523a9.png "スクリーンショット 2015-11-13 9.47.43.png")


## 参考URL

[【Unity】Missing Push Notification Entitlement Unity iOSアプリ申請アップロード時のエラー対応](http://blog.77jp.net/missing-push-notification-entitlement-ios)
helper typeを利用して、ModuleのRSpecの書き方をまとめてみました

## はじめに

Railsのアプリの１つの機能としていくつかのサイトを巡回するクローラーを開発しており、

- HTTPクライアントの機能を利用してサイトにアクセスする機能
- （全部ではないけど）HTMLの要素をスクレイピングする機能

あたりは共通化できそうなのでそこだけモジュール化しようと思って実装を進めていきたのですが、肝心のモジュールに対するRSpecの書き方を知らなかったので、調べたことをまとめておきました

app/workers配下にクローラーを配置して利用することを想定してディレクトリ構成はこのようになります

```
app/workers
├── core_worker.rb
├── crawler
│   ├── searchable.rb
│   ├── site_a.rb
│   ├── site_b.rb
│   └── site_c.rb
```

ちなみに想定するクローラーの処理としてはこんな感じをイメージしてます

- 定期的ににcore_worker.rbが実行される
  - １日１回とか
- core_workerがsite_a.rb、site_b.rb、site_c.rbのそれぞれのクラスの初期化＆クローリングを実行
- クローリングする時に、site_a.rb、site_b.rb、site_c.rbそれぞれで共通利用する処理をsearchable.rbにまとめる


### 手元の開発環境

- Mac OS X 10.8.5
- Ruby 2.2.2
  - rbenv利用してインストール
- Rails 4.2
- rspec 3.3.0


## モジュールに対するRSpecはいくつかアプローチがありそう

最初は[Rails4のconcernsなmoduleのテストをrspecで書く方法](http://qiita.com/tq_jappy/items/ed56b0f4a20500252461)の情報にいきついたのですが、その後StackOverflowの[Testing modules in rspec](http://stackoverflow.com/questions/1542945/testing-modules-in-rspec)を見てたら参考になる書き方が紹介されてました。

ダミーとなるクラスでそのモジュールをincludeするようなやり方などいくつか紹介されてるのですが、個人的には

```ruby
describe SomeModule, type: :helper do
  # 省略
end
```
というhelper typeを利用した書き方が理解しやすく、[Helper spec](https://www.relishapp.com/rspec/rspec-rails/v/3-3/docs/helper-specs/helper-spec)の情報と合わせて読んだらイメージした形で書けたのでこの方針でいくことにしました

## 実際にどういう形になったのか？

まず、RSpecの方ですが、spec/workers/crawler/searchable_spec.rbというファイルを作って以下のように書きました。

```ruby
require 'rest-client'
require 'nokogiri'
describe Crawler::Searchable, type: :helper do
  describe '#page_source' do
    let(:valid_url) { 'http://qiita.com' }
    let(:invalid_url) { 'http://test' }
    context '存在するサイトのURLを指定した場合' do
      it 'スクレイピングの結果が得られる' do
        doc = helper.page_source(valid_url)
        expect(doc.present?).to eq true
      end
    end
    context '存在しないサイトのURLを指定した場合' do
      it 'falseが返る' do
        doc = helper.page_source(invalid_url)
        expect(doc.present?).to eq false
      end
    end
  end
end
```

上記のRSpecにパスするようにapp/workers/crawler/searchable.rbをこのように実装しました。

```ruby
module Crawler
  module Searchable
    def page_source(url)
      return false if url.empty?
      begin
        return RestClient.get(url)
      rescue => e
        return false
      end
    end
  end
end
```

RSpecの実行結果も貼っておきます

```sh
./bin/rspec spec/workers/crawler/searchable_spec.rb
Crawler::Searchable
  #page_source
    存在するサイトのURLを指定した場合
      スクレイピングの結果が得られる
    存在しないサイトのURLを指定した場合
      falseが返る

Finished in 0.2259 seconds (files took 4.12 seconds to load)
2 examples, 0 failures
```

※本文の内容と直接関連がないですが、RSpecの実行結果がドキュメント形式で表示されるように.rspecを以下のようにしてます。
ここの記述内容がほかの人に理解しやすい形になっているかどうか気にすることで、describe/contextの使い分けが妥当かどうか気づけるからです。

```
--color
--require spec_helper
--format documentation
```
ユーザー入力を受け付けるモジュールのテストには必ずタブ・改行こみのテキストを

表題通り、ユーザー入力を受け付けるモジュールのテストには必ずタブ・改行こみのテキストを渡す必要があります。
あぶり出せる不具合として

- 正規表現としてテキスト先頭・テキスト末尾を表現するのに誤って`^`, `$`を使っている（これらは行頭・行末。正しくは`\A`, `\Z`）
- 簡易シリアライズとしてタブや改行を区切りに文字列を連結しただけの表現を生成しており、その際にエスケープを忘れている
- 制御文字をはじく際の条件を単に `< 0x20` と記述してしまっており、改行やタブまではじいている

などがあります。
懺悔投稿。
Atomメモ


# Atomを使ってのメモ

エディタAtomを使ってのメモを書く

##通常

ファイルなんでも検索
`command + "P"`

パッケージ検索
`command + shift + "P"`


##パッケージ

### ProjectManager

プロジェクトをかえたいとき
`command + ctrl + "P"`

### treeview

プロジェクト内でファイル名を検索したいとき

ショートカットキー
`command + "P"`

ツリー表示されたファイルやディレクトリのパスをコピーしたい時

ショートカットキー
`shift + ctrl + "C"`
S3でDeleteMarkerの付いたファイルを取得する

S3のVersioningを有効にしていると，`aws s3 rm`とかやっても実体は削除されておらず，削除済みという目印(DeleteMarker)が付いた状態になります．

この状態で当該ファイルを取ろうとしても

```shell-session
uraura@rosemary$ aws s3api get-object --bucket target-bucket --key db.dump.gz ./db.dump.gz

A client error (NoSuchKey) occurred when calling the GetObject operation: The specified key does not exist.
```
と，悲しい思いをします．(まぁ**削除した**んだから当然ですね．．．)

そこで，DeleteMarkersの付いてないバージョンを調べます．

```shell-session
uraura@rosemary$ aws s3api list-object-versions --bucket target-bucket --prefix db.dump.gz
{
    "DeleteMarkers": [
        {
            "Owner": {
                "DisplayName": "admin",
                "ID": "87428fc522803d31065e7bce3cf03fe475096631e5e07bbd7a0fde60c4cf25c7"
            },
            "IsLatest": true,
            "VersionId": "uZALiONs1lXzsJBvjv.jgnLSdBrHfCox",
            "Key": "db.dump.gz",
            "LastModified": "2015-10-30T17:55:38.000Z"
        }
    ],
    "CommonPrefixes": [],
    "Versions": [
        {
            "LastModified": "2015-09-30T17:55:30.000Z",
            "VersionId": "b8O0kCjQYrPvtMNXTGRayqRe.U11dxzx",
            "ETag": "\"712fe04afa2e31dee3583dc6586bf74a-11\"",
            "StorageClass": "STANDARD",
            "Key": "db.dump.gz",
            "Owner": {
                "DisplayName": "admin",
                "ID": "87428fc522803d31065e7bce3cf03fe475096631e5e07bbd7a0fde60c4cf25c7"
            },
            "IsLatest": false,
            "Size": 80885743
        }
    ]
}
```

この場合は`"VersionId": "b8O0kCjQYrPvtMNXTGRayqRe.U11dxzx"`でよさそうですのでバージョンまで指定して呼びだしてやりましょう．

```shell-session
uraura@rosemary$ aws s3api get-object --bucket target-bucket --key db.dump.gz --version-id b8O0kCjQYrPvtMNXTGRayqRe.U11dxzx ./db.dump.gz
{
    "AcceptRanges": "bytes",
    "ContentType": "binary/octet-stream",
    "LastModified": "Wed, 30 Sep 2015 17:55:30 GMT",
    "ContentLength": 80885743,
    "VersionId": "b8O0kCjQYrPvtMNXTGRayqRe.U11dxzx",
    "ETag": "\"712fe04afa2e31dee3583dc6586bf74a-11\"",
    "Metadata": {}
}
```

# まとめ
`aws s3api`ってあんまり使ってなかったけど便利やん
Railsのlink_toの引数の形がまたまた多彩すぎる

実際にデバッグポイントで動かしながら確認してるわけではなく、ソースを追ってるだけなので、間違いがあるかもだけれども。

[ActionView::Helpers::UrlHelper](http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html)

> link_to(body, url, html_options = {})
>  # url is a String; you can use URL helpers like
>  # posts_path
>
>link_to(body, url_options = {}, html_options = {})
>  # url_options, except :method, is passed to url_for
>
>link_to(options = {}, html_options = {}) do
>  # name
>end
>
>link_to(url, html_options = {}) do
>  # name
>end

つまり`link_to`の呼び出し方が

```
link_to(body, url, html_options = {})
link_to(body, url_options = {}, html_options = {})
link_to(options = {}, html_options = {}) do end
link_to(url, html_options = {}) do end
```
こんだけあって ハッシュが受け取れるところはキーに何が渡せるかも認識してないといけないわけで....

該当部分ソース（`link_to`の中身）

```rb
def link_to(name = nil, options = nil, html_options = nil, &block)
  html_options, options, name = options, name, block if block_given?
  options ||= {}

  html_options = convert_options_to_data_attributes(options, html_options)

  url = url_for(options)
  html_options['href'] ||= url

  content_tag(:a, name || url, html_options, &block)
end
```

###1行目

```
html_options, options, name = options, name, block if block_given?
```

うお！出た！ブロック来た時とそうでないときの場合分け！
参考：[Rails - ActiveRecordの処理の委譲方法が多彩すぎる - Qiita](http://qiita.com/shingo-nakanishi/items/df54ada0ae1254bcda17)
**引数の中身を持ち直している（入れなおしている）！！？？**
**持ち直している相手は引数だったやつだよ！？　こんなのありなのか！**


###ブロックなしのときに第2引数が urlとurl_options = {}の2パターン
ブロックなしのときに第2引数に受け取る形が2パターンある。

```rb
html_options = convert_options_to_data_attributes(options, html_options)
```
で頑張っているのだろうか（中はまだ読んでない）。

自分なら第2引数のところは常に以下の形のHashを受け取るようにするけど、

```
{
 url: ........
 options: { ..... }
}
```

optionsのときにHashの入れ子が一段深くなってしまうのを避けたということなのだろうか？？


### えーとえーとこれはオーバーロードぽいやつなのか？
メソッドの呼び出しから見てJavaのオーバーロードぽいことを実現しているようなのだが、実現方法は引数を中で素早く入れなおすという方法という結論でよいだろうか。（なんだよ素早くって）
bcb6 > AnsiString関連のメモリリーク


BCB6のメモリリーク関連
http://www.tek-tips.com/viewthread.cfm?qid=1384862

```
   for(j = 0; j < hmax; j++)
    {
        MyString strTest2 = "test";
        strTest2 += MyString("Random test: ") + "test3";
        //OutputDebugString(IntToStr(j).c_str());
    }
```

において、MyStringの宣言がfor()内にある時におかしくなるような記載があった。

XE4や最近のバージョンの振舞は未整理。
SecKeyRawSign and SecKeyRawVerify in Swift


## SecKeyRawSign and SecKeyRawVerify in Swift
RSAの公開鍵／秘密鍵を作成した[前回のエントリー](http://qiita.com/Shirade/items/bb7e0f2e6ffb507ffeef)の後に署名に挑戦しました．その実装も複雑で時間がかかったため公開します．


## Crypto.swift
```swift:Crypto.swift
import Foundation
import CoreFoundation
import Security

class Crypto {
    func test() {
        let string: String = "sample text to be encrypted and decrypted"
        let keyPair: (publicKey: SecKey?, privateKey: SecKey?) = generateKeyPair()
        let signature: NSData? = signString(string, privateKey: keyPair.privateKey!)
        let result: Bool = verifyString(string, signature: signature!, publicKey: keyPair.publicKey!)
        print(result)
    }
    
    func generateKeyPair () -> (publicKey: SecKey?, privateKey: SecKey?) {
        let parameters: [String: AnyObject] = [
            kSecAttrKeyType as String: kSecAttrKeyTypeRSA,
            kSecAttrKeySizeInBits as String: 2048
        ]
        var publicKey: SecKey?
        var privateKey: SecKey?
        let osStatus: OSStatus = SecKeyGeneratePair(parameters, &publicKey, &privateKey)
        switch osStatus {
        case noErr:
            return (publicKey, privateKey)
        default:
            return (nil, nil)
        }
    }
    
    func signString(string: String, privateKey: SecKey) -> NSData? {
        let digest = NSMutableData(length: Int(CC_SHA256_DIGEST_LENGTH))!
        let stringData: NSData = string.dataUsingEncoding(NSUTF8StringEncoding)!
        CC_SHA256(stringData.bytes, CC_LONG(stringData.length), UnsafeMutablePointer<UInt8>(digest.mutableBytes))
        let signedData: NSMutableData = NSMutableData(length: SecKeyGetBlockSize(privateKey))!
        var signedDataLength: Int = signedData.length
        
        let err: OSStatus = SecKeyRawSign(
            privateKey,
            SecPadding.PKCS1SHA256,
            UnsafePointer<UInt8>(digest.bytes),
            digest.length,
            UnsafeMutablePointer<UInt8>(signedData.mutableBytes),
            &signedDataLength
        )
        
        switch err {
        case noErr:
            return signedData
        default:
            return nil
        }
        
    }
    
    func verifyString(string: String, signature: NSData, publicKey: SecKey) -> Bool {
        let digest = NSMutableData(length: Int(CC_SHA256_DIGEST_LENGTH))!
        let stringData: NSData = string.dataUsingEncoding(NSUTF8StringEncoding)!
        CC_SHA256(stringData.bytes, CC_LONG(stringData.length), UnsafeMutablePointer<UInt8>(digest.mutableBytes))
        
        let err: OSStatus = SecKeyRawVerify(
            publicKey,
            SecPadding.PKCS1SHA256,
            UnsafePointer<UInt8>(digest.bytes),
            digest.length,
            UnsafeMutablePointer<UInt8>(signature.bytes),
            signature.length
        )
        
        switch err {
        case noErr:
            return true
        default:
            return false
        }
    }
}

```

## 使い方
Objective-Cのライブラリを利用しているため，Playgroundでは動きません．  
Brigding Header内でCommonCryptoをインポートしてください．

```objective-c:Crypto-Bridging-Header.h
#import <CommonCrypto/CommonCrypto.h>
```
Apache Drill Meetup Tokyo #2 の巻


## Ted's talk

完全英語トークでした。
スライドは日本語なのでスライド参照ｗ

RDBによる管理者が支配するスキーマからアプリケーションが支配するスキーマレスな非RDBに移行する。
これらはアジリティを上げてくれる。
即時分析により即断可能なビジネスを実現する。

Drillが動的なスキーマディスカバリをサポートする。
Drillは SQL on Everything を可能にする

いろんなデータ型の扱いができる。

データソースをまたいだクエリも可能。

Prestoとどう違うんだろう…

ディレクトリは暗黙的なパーティション！
これいいな。

アメリカンスタイルは随時質問する！

RDBのSQLサポートってどうなってるのか？
→ 完全にはまだだけど、オープンソースコミュニティがどんどん上げてってくれ

セキュリティは？
細かいアクセス制御あり。

REST APIのドキュメントなくてツラい→ML投げてくれ
Contributeよろしく！！！！

## Apache Drill を業務利用してみる（までの道のり）

Future Architect 須田さん

プロダクト選定を通じて思ったところ
顧客業務導入…！

業務導入はもうちょい先の話。
それに向けてのアクションの話。

Hiveかわいそうの巻ｗｗｗ

Drillは最新バージョンでRDBMSもやれる。

DWHの分析用にアーカイブDB(RDBMS)に入れて使ってるシステムの話。
業務の都合上、過去データの抽出依頼が別部署から頻繁に発生している。
アーカイブにアクセスして分析してた。
リプレースが近いのでHadoopクラスタ導入に向けて動いている。

SQL on Hadoop

それどんだけ枯れてるの？って言われる

ユーザー視点でのポイント３つ

- ☆操作性（SQLはけっこういける）
- ☆秘伝のたれ化したものを使いたい
- 運用はシンプルに扱いたい

ユーザーにとってどれだけ使いやすいかを重視

当時Prestoが不安があって外された。
残ったのはDrill、HAWQ

Oracleは高いから外した…

HAWQの説明

- 最近OSS化
- ほぼポスグレ
- 意外とダークホース

Drillは日本語の扱いがハマりポイントらしい。
1.2で一人前になった感

スキーマ宣言する以上管理するマスタが必要になる。
そうするとマスタのプロセスも冗長化どうにかしないと…→台数がどんどん増える。

DrillはZookeeperがよしなにやってくれるしマスタもなくていい感じ。

- SQL使える
- マスタレスだから障害ポイント少ない
- 完全OSS
- 将来性 Drillのコンセプトは他にはなさそう

不満な点

- YARNのリソース管理対象だけど、メモリだけ
- CPUリソースは別になってる

よかったポイント

- オンメモリで処理できなかった場合に極端だけど、けっこう安定してた

導入が始まる
今後の検討課題

- エンドユーザーが使ってみてどうなのか
- パフォーマンスチューニング…
- 認証認可をどうしようか、設計をがんばる必要がある

機会があれば実践編を！
乞うご期待！

Drill Explorerがかっこいい
非開発者以外のユーザーに馴染むかどうかと言われれば微妙かもしれん

どんなユーザーに価値がありそうか？
Drillはある程度SQL使えて分析を自分でできる人に向いてる。
HAWQはぽすぐれ。取っつきやすい。ちょっとSQL知ってる人でも扱える。導入ハードルは低い。

## 日本語を扱ってみる

MapR 梅川さん

全く触ったことない人がどうやって使ってデータ分析するかの話

_UTF16つけるとうまくいく
ロケールは`ja_JP.UTF08`

## Apache Drillで見るTwitterの世界

サイバーエージェント 渡部さん

2013年のTwitter APIのデータを使ってユーザーのツイート数とかから色々読み解いてみた話
CircleCIでプライベートなファイルを暗号化してレポジトリ管理する

手順忘れるので忘備録。
CircleCIでビルド時に必要なキーなどを書いたプライベートなファイルを安全に管理したい時は、ファイルを暗号化してレポジトリに含むとよいです。

#ファイルの暗号化
opensslを利用して暗号化します。暗号化方式は色々ありますが、[TravisCI](http://docs.travis-ci.com/user/encrypting-files/)のドキュメントでも利用されている `aes-256-cbc` を利用します。

ここではdir配下にあるprivate_propertiesを暗号化します。

```bash
$ openssl aes-256-cbc -e -in dir/private_properties -out encryptedProperties
```

上記でやるとpassword入力を求められますが、macでは入力がうまくいかないことがあるようです(ありました)。その場合はpasswordを書いたファイル(ここではpassword.txt)を用意し、

```bash
$ openssl aes-256-cbc -e -in dir/private_properties -out encryptedProperties -pass file:./password.txt

```
と実行してあげればencryptedPropertiesという暗号化ファイルができます。
このファイルをレポジトリにcommitします。

#CircleCI側で復号のためのキー設定
- CircleCIのコンソールの右上にあるProject Settingsを押下します。

- Environment variablesを押下して、復号するために必要なキー(先ほどpasswordで設定した値)をEnvironment variableとして入力してあげます。
ここでは仮に NAMEをDECRYPT_KEYとします。
![Screen Shot 2015-11-12 at 14.44.42.png](https://qiita-image-store.s3.amazonaws.com/0/39433/e51e2fed-139f-ed5a-1641-73b9f76466e7.png "Screen Shot 2015-11-12 at 14.44.42.png")


#circle.ymlに復号処理を設定
CircleCIでプライベートファイルが必要になる直前で復号してあげる処理を追加します。例えばtestでプライベートファイルが必要な場合、

```yaml:circle.yml
test:
  pre:
    - openssl aes-256-cbc -k $DECRYPT_KEY -d -in encrypted.properties -out dir/private_properties
```

これでCircleCIにcommit, pushしてあげると、CircleCI上でプライベートファイルを使ってビルドができます。
python > #ifdefはない > 別の対応方法 > __debug__使用の是非

```test.py
#ifdef MACRO

print "debug..."

#endif
```

のようなコードを書いて、場合によっては非表示にしたい。

http://stackoverflow.com/questions/12524570/how-do-you-implement-ifdef-in-python
を見ていると、pythonにはプリプロセッサーはないようだ。

代わりに`__debug__`を使う方法を提案している人もいるが、それに対して反対している人もいる。
技術英語 > one of the strongest [lines of evidence] that there are chemical obesogens is ... / decisive factor

@ LOE > June 1, 2012

http://loe.org/shows/shows.html?programID=12-P13-00022

> Well, one of the strongest <font color=red>lines of evidence</font> that there are chemical obesogens is that

<hr>
lines of
http://eow.alc.co.jp/search?q=lines+of

> lines of magnetic flux
磁束線

「lines of」をつけることでevidenceがいくつもあるイメージになるのだろうか。

<hr>
strongestから関連して思い出したのは

http://eow.alc.co.jp/search?q=decisive+factor
> decisive factor
> 決め手、決定的要因［因子］
index.html を gzip 圧縮して Apache に設置

Apache に設置するコンテンツを gzip 圧縮することで、どのくらい負荷が軽くなるものか試してみた。今回は index.html を圧縮してみたが、当然JSやCSS等もイケる(※)。実験サーバ環境は諸事情により非公開。

※画像もgzip圧縮できなくもないが、既に画像フォーマットそのもので圧縮がかかっているので意味が無い。テキスト形式のファイルのみ圧縮をかけるのが一般的。

## 測定に用いるコマンド
```bash
$ ab -n 100 -c 10 -H "Accept-Encoding: gzip,deflate" http://xxxx/
```
リクエスト数100、同時接続数10。圧縮コンテンツを受け付けることをサーバに伝えるため、Accept-Encoding ヘッダを付与する。

## 圧縮前
### ファイル構成
- web_folder
    - index.html … 1MBのテキスト (とりあえず円周率100万桁)
    - .htaccess

### .htaccess
```:.htaccess
DirectoryIndex index.html
```

### 測定結果
```bash
$ ab -n 100 -c 10 -H "Accept-Encoding: gzip,deflate" http://xxxx/
Time taken for tests:   9.524 seconds
Total transferred:      112207900 bytes
```

## リアルタイム圧縮
コンテンツはそのまま設置するだけなので楽。Apacheが圧縮責務を負うため、ややCPU負荷が上がる。

### ファイル構成
- web_folder
    - index.html … Apacheが勝手に圧縮してくれるため、設置するファイルは無加工.
    - .htaccess

### httpd.conf
```text:httpd.conf
# 以下2行が必要.
LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so
```

### .htaccess
```:.htaccess
DirectoryIndex index.html

SetOutputFilter DEFLATE
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png|ico)$ no-gzip dont-vary
Header append Vary User-Agent env=!dont-vary
```

### 測定結果
```bash
$ ab -n 100 -c 10 -H "Accept-Encoding: gzip,deflate" http://xxxx/
Time taken for tests:   5.616 seconds
Total transferred:      54302600 bytes
```

円周率というランダムなコンテンツのため、それほど圧縮率は良くない。容量が半分になる程度。総時間も半分近くになった。

## 事前圧縮
コンテンツをあらかじめ圧縮しておくことでApacheの圧縮責務がなくなるため、負荷は当然軽くなる。

### ファイル構成
- web_folder
    - index.html.gz … あらかじめ gzip コマンドで圧縮しておく.
    - .htaccess

### htaccess.conf
```text:htaccess.conf
# 普通は既に有効になってるはずだが、一応これが必要.
LoadModule rewrite_module modules/mod_rewrite.so
```

### .htaccess
```:.htaccess
DirectoryIndex index.html.gz

RewriteEngine on
RewriteCond %{HTTP:Accept-Encoding} gzip
RewriteCond %{REQUEST_FILENAME}\.gz -s
RewriteRule .+ %{REQUEST_URI}.gz

<FilesMatch "\.html\.gz$">
    ForceType text/html
    AddEncoding x-gzip .gz
</FilesMatch>
```

### 測定結果
```bash
$ ab -n 100 -c 10 -H "Accept-Encoding: gzip,deflate" http://xxxx/
Time taken for tests:   4.731 seconds
Total transferred:      54302800 bytes
```

リアルタイム圧縮に比べると圧縮フェーズが無いため当然軽い。

## 以上
CPU負荷値を計測していないので雑だが、処理時間を見る限り、リアルタイム圧縮でも割とイケるな、という印象。活用していきたい。
ファイル数が極少数の場合は事前圧縮も活用していきたい。
formのselectでデータベースから動的に選択肢を生成

```options_from_collection_for_select``` を使用すれば、formタグのselectの選択肢をデータベースから動的に生成することができる

## form_forでの例
```
f.select :job_id, options_from_collection_for_select(Hoge.all, :id, :name)
```

## form_tagでの例
```
select_tag 'personnel[job_id]', options_from_collection_for_select(Hoge.all, :id, :name)
```
Qiitaに1件も投稿していない時の画像アップロード容量の上限は月間2MBまで

# 画像のアップロードでエラー

Qiitaに初めて投稿しようと思い、下書きに画像6,7枚上げたら
>the image size Monthly limit exceeded: Publishing to Qiita expands your monthly capacity

とか言われた。

どうやらデフォルトの画像アップロード容量の上限は月間2MBまでで、1件でも投稿すると100MBに拡張される仕様らしい。

> QiitaやKobitoを使っているけれど、もっとたくさん画像をアップロードしたいという方はいませんか？
このたび、初めてQiitaに投稿するとアップロード可能な容量が月間2MBから100MBまでアップされるようになりました :)
※すでにQiitaに1件以上投稿したことがある方は、今日から無条件に100MBアップします。
> https://blog.qiita.com/75674629515-2/


画像アップロードの主な仕様、制限は以下のとおり（2024年8月時点）。

> 月に合計100MBまで、単体で10MBまでの画像ファイルをアップロードすることが可能です。月の制限を超えてしまった場合は翌月1日までお待ちいただくか、当月にアップロードされた不要な画像ファイルの削除を行っていただくと、削除容量分が復活します。

> サイズに制限はありませんが、記事の横幅最大になる目安は横幅約800pxです。
> 
> アップロード可能な画像は、gif , jpeg , png , tiff です。apng等、その他はサポート外のため正しく表示されない場合があります。
> 
> アップロードされた画像は、自動的に順次最適化が行われます。
> https://help.qiita.com/ja/articles/qiita-image-upload


# 参考
- [初めてQiitaに投稿すると1ヶ月の画像アップロード制限が2MB→100MBにアップします](http://blog.qiita.com/post/75674629515/image-capacity-expansion)
- [画像のアップロード・削除方法 | Qiita ヘルプ](https://help.qiita.com/ja/articles/qiita-image-upload)
GroovyのProxy設定方法まとめ

Groovyで@Grabアノテーション使う場合のProxy設定まとめ。
ぐぐっても断片情報ばっかりだったので共有します。

# 概要
２種類の設定が必要。

1. Grape
1. Maven

# Grape用設定
## 設定先
起動スクリプトに書く。
OSによってファイル名違うので注意。

```:sh
~/.groovy/startup
```

```:windows
~/.groovy/preinit.bat
```

なお、~/.groovy/GrapeConfig は結局使いませんでした。
https://github.com/apache/incubator-groovy/blob/master/src/resources/groovy/grape/defaultGrapeConfig.xml

## 環境変数
- bash

```bash:~/.groovy/startup
export JAVA_OPTS="-DproxyHost=your_proxy -DproxyPort=8080"
```
- windows

```~/.groovy/preinit.bat
set JAVA_OPTS=-DproxyHost=your_proxy -DproxyPort=8080
```

参考：
http://nave-kazu.hatenablog.com/entry/2015/04/02/181917
http://nobeans.hatenablog.com/entry/20090413/1239607977

# Maven用設定
maven専用の設定ファイルにはHTTPまたはHTTPSの片方しか書けない。
(厳密には2つ書いても片方しか有効にできない。)
そのため、片方を環境変数化する。

参考：
http://takezoe.hatenablog.com/entry/20110102/p2

## HTTPのプロキシ設定
設定ファイルに書く。
このファイルが無い場合は作成する。

```xml:~/.m2/setting.xml
<settings>
  <proxies>
    <proxy>
      <active>true</active>
      <protocol>http</protocol>
      <host>your_proxy</host>
      <port>8080</port>
    </proxy>
  </proxies>
</settings>
```

## HTTPSのプロキシ設定
Grapeと同じで、Groovyの起動スクリプトに環境変数として書く。

- bash

```bash:~/.groovy/startup
export MAVEN_OPTS="-Dhttps.proxyHost=your_proxy -Dhttps.proxyPort=8080"
```
- windows

```~/.groovy/preinit.bat
set MAVEN_OPTS=-Dhttps.proxyHost=your_proxy -Dhttps.proxyPort=8080
```

これにて設定完了。

# 付録
## Grabのエラーが出る場合
jarのダウンロードに失敗した場合が多い。
キャッシュをクリアし、再ダウンロードすると直る。

```bash
rm -Rf ~/.m2/repository/*
rm -Rf ~/.groovy/grapes/*
```

※厳密には、エラーになっているライブラリ配下のみ消せば良い。

## 特定のライブラリをインストールする
デバッグ出しつつダウンロードする例。
どこでつっかえているか割り出す時に使った。

```bash
grape -d install org.codehaus.groovy.modules.http-builder http-builder 0.7.2
```
swiftでSettingAppを開く方法


## 実行環境
* Xcode7.1

## SettingAppを開く方法

iOS9から使えるようになったextension,ContentBlockerを取り入れようとしたら、アプリからiPhone,iPadの設定アプリを開きたくなりました。
いろいろ調べると、UIApplicationクラスで定義されている```UIApplicationOpenSettingsURLString```という定数を使うとアプリから設定アプリを呼び出せるらしい。
UIButtonがあるとして、タップして設定アプリを開かせたいなら以下のコードを書けばいい。
iOS8以上からつかえるとのこと。

```swift
@IBAction func gotoSettingApp(sender: AnyObject) {
        UIApplication.sharedApplication().openURL(NSURL(string: UIApplicationOpenSettingsURLString)!)
}
```

app-settings:というスキームでURLを作っても設定アプリを開けました。

```swift
@IBAction func gotoSettingApp(sender: AnyObject) {
        let url = NSURL(string: "app-settings:")
        UIApplication.sharedApplication().openURL(url!)
}
```

## StackOverFlowで言われていたけど動かなったスキーム

iOS5.0までは使えて、iOS5.1から使えなくなったスキームがiOS9から復活したようなことをStackOverFlowの以下の記事でかかれていましたが、私の環境では動かなかったです。
残念。これができれば、ダイレクトに各設定ページにいけるのでとってもありがたいのですが。。

*  [iOS Launching Settings -> Restrictions URL Scheme.](http://stackoverflow.com/questions/8246070/ios-launching-settings-restrictions-url-scheme)



```swift
@IBAction func gotoSettingApp(sender: AnyObject) {
        let url = NSURL(string: "prefs:root=General")
        UIApplication.sharedApplication().openURL(url!)//うごかない。。
}
```


「```"prefs:root=General"```でうごくよ！」っていう方がいれば教えていただけると助かりますm(_ _)m

## 2015/12/15追記

prefsで設定アプリを開く方法がわかりました。


**URL Scheme**を設定しなければいけないようです。


Target -> Info -> URLTypes ->URL Schemes に prefs を設定すればprefsスキームで設定が開くようになるそうです。

![スクリーンショット 2015-12-15 14.44.54.png](https://qiita-image-store.s3.amazonaws.com/0/31587/9c25467b-30a9-3486-f8cb-df3b3871cfe8.png "スクリーンショット 2015-12-15 14.44.54.png")



これで設定アプリがprefsで開けるようになります。



## 参考
* [iOS Launching Settings -> Restrictions URL Scheme.](http://stackoverflow.com/questions/8246070/ios-launching-settings-restrictions-url-scheme)
* [is it possible to open Settings App using openURL?](http://stackoverflow.com/questions/1090373/is-it-possible-to-open-settings-app-using-openurl)
* [設定アプリの各画面に一発で遷移するURLスキームを使ってSafariの検索エンジン設定画面を開いてみる](http://qiita.com/tochiba/items/2794dd1c9d2523276e61)
gulp-ectで「Failed to load template」とエラーが出て怒られる時の対処

#前置き
他のテンプレートエンジンと比べて爆速だというect。
使いやすさもなかなかですが、長らく更新されていないのがちょっと残念ですね。

ectをgulpで使える「gulp-ect」もありますが、最初に困ることがあったのでメモします。
**nodeとかnpmとかよく分かってないけど、とりあえず動くようにしたい人向けです。**



#現象
以下のようにテンプレートを継承しているファイルがあります。

```js
<% extend 'layout.ect' %>
```
これがgulpfileで設定しているルートに置かれている場合は正常に動作するけど、
ディレクトリを作り、その下に置くと以下のようなエラーが出て怒られる。

```
Error gulp-ect: Failed to load template /path.../
Error gulp-ect: must start with number, buffer, array or string
```
テンプレートの読み込みに失敗しているようです。

※エラーメッセージの出し方は以下を参考にさせていただきました。
[フロント開発のテンプレートエンジンECTをGulpでビルドする際にエラー詳細を出してマシにする](http://qiita.com/n0bisuke/items/0a39d35af7f00e72954b)



#対処
node-module/gulp-ect 内の index.jsに１行変更を加えます。
26行目辺り

```js
var fileName = gutil.replaceExtension(path.basename(file.path), "");
```
これを

```js
var fileName = gutil.replaceExtension(file.path.split(filePath)[1], "");
```
と変更します。



#原因とやったこと
正直私もイマイチわかっていませんが、、、
上の記述でファイルネームを設定し、**ルートパス + ファイルネーム**の組み合わせで
出力するファイルを見にいくっぽいです。（ルートパスは別に設定されています）
で、既存の記述はファイルネームのみを設定します。

　```/root/page1.ect```　という構造だったら　```page1```　を設定。

でもこれだと　```/root/dir/page2.ect```　という構造でも　```page2```　になってしまう。
結果、　```/root/page2.ect```　というパスで見に行ってしまい、エラーで怒れらている。（ような気がします）

それなら　```dir/page2```　にできればいいんじゃないの？ということで行ったのが上の変更です。

これで思った通りエラーはなくなり、更にディレクトリ構造を保ったまたdestすることが出来ました。
（ディレクトリ構造を保つようになったのはたまたま。狙ってません。でもラッキー♪）

がっつりデバッグしてないので詳細はわかっていませんが、最初に述べたように
とりあえず動かしたい方向けです。
Ubuntu14.04にcuda 7.5をインストール

cudaというnvidiaのGPU演算コード開発ツールキットをUbuntu14.04にインストールする方法をまとめてみました。はまりポイントがあったので参考にしてもらえればと思います。

# Linuxを用意
まず、nvidiaのGPUが搭載されているUbuntu14.04を調達します。手元にnvidiaのGPUが搭載されたパソコンを持っていなくても、AWS EC2で簡単にcuda環境を作ることができます。

という事でまずはAWS EC2のインスタンスの準備から。

## AWS EC2のインスタンス(g2.2xlarge)
AWSにはGPUが使えるEC2インスタンスとしてg2.2xlargeとg2.8xlargeが存在します。インスタンスタイプはあとからAMI経由でいくらでも変更できるので、最初は安価なg2.2xlargeを選択します。

![ec2instance.png](https://qiita-image-store.s3.amazonaws.com/0/38013/c0057464-6af4-392f-de45-0d639cf5ad07.png)

## Ubuntu14.04の最低限の設定をすませる
こんなところでしょうか。

```lang:bash
$ sudo passwd ubuntu
$ sudo aptitude update
$ sudo locale-gen ja_JP.UTF-8
$ sudo ln -sf /usr/share/zoneinfo/Japan /etc/localtime
$ sudo aptitude -y full-upgrade
$ sudo aptitude install -y build-essential cmake
```

# 最新版のドライバにアップデート
nvidiaのグラフィックドライバをインストールします。

## デフォルトのグラフィックドライバを停止
停止せずにnvidiaドライバをインストールしようとすると大はまりします。nouveauというドライバが使われていると思います。急がずまずこれをブラックリストにいれます。nouveau用のmodprobeのブラックリストファイルを次の内容で作って下さい。

```/etc/modprobe.d/blacklist-nouveau.conf
blacklist nouveau
blacklist lbm-nouveau
options nouveau modeset=0
alias nouveau off
alias lbm-nouveau off
```

```/etc/modprobe.d/nouveau-kms.conf
options nouveau modeset=0
```

```lang:bash
$ sudo update-initramfs -u
$ sudo reboot
```

再起動をお忘れなく。

##nvidiaのグラフィックドライバをいれて再起動。
nvidiaの[ドライバダウンロードサイト](http://www.nvidia.co.jp/Download/index.aspx?lang=jp)からダウンロード。[.](http://jp.download.nvidia.com/XFree86/Linux-x86_64/352.55/NVIDIA-Linux-x86_64-352.55.run)

- 製品タイプ: **GRID**
- 製品シリーズ: **GRID Series**
- 製品ファミリー: **GRID K520**
- オペレーティングシステム: **Linux 64-bit**
- 言語: **Japanese**

```lang:bash
$ sudo aptitude install -y linux-image-extra-virtual linux-source linux-headers-`uname -r`
$ wget http://上記ドライバ.run
$ sudo sh NVIDIA-Linux-x86_64-352.55.run -a --disable-nouveau
$ sudo reboot
```

一度インストールに失敗するがnouveauを使わない設定ができるので再起動する。そうすると次は成功する。インストール中にkernelをコンパイルするらしく、linux-sourceやlinux-headerをインストールしておかないとうまく行かない。

```lang:bash
$ sudo sh NVIDIA-Linux-x86_64-352.55.run -a
$ sudo reboot
```

##確認

エラーが出なければドライバはok

```lang:bash
$ sudo modprobe nvidia
```

# cuda toolkitをインストール

## ダウンロード
[cudaダウンロードサイト](https://developer.nvidia.com/cuda-downloads)からダウンロード。[.](http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1404/x86_64/cuda-repo-ubuntu1404_7.5-18_amd64.deb)

- Operating System: **Linux**
- Architecture: **x86_64**
- Distribution: **Ubuntu**
- Version: **14.04**
- Installer Type: **deb(network)**

## インストール

インストール後、また再起動が必要です。

```lang:bash
$ wget http://上記repositoryファイル.deb
$ sudo dpkg -i cuda-repo-ubuntu1404_7.5-18_amd64.deb
$ sudo aptitude update
$ sudo aptitude install -y cuda
$ sudo reboot
```

## 確認

```lang:bash
$ /usr/local/cuda-7.5/bin/cuda-install-samples .
$ cd NVIDIA_CUDA-7.5_Samples/1_Utilities/deviceQuery/
$ make
$ ./deviceQuery
```

下記のようにGPUの情報が表示されればインストール完了

![installed.png](https://qiita-image-store.s3.amazonaws.com/0/38013/06136874-8683-9a69-70ca-4a5876b3dc8f.png)

おつかれさまでした！

#参考
- http://tleyden.github.io/blog/2014/10/25/cuda-6-dot-5-on-aws-gpu-instance-running-ubuntu-14-dot-04/
UITableViewControllerにUIViewを位置固定して貼る方法

# 概要
UIViewControllerにUITableViewと広告バナーを貼るのは至極簡単なのですが
UITableViewControllerに広告バナーを貼るのはかなり遠回りをしなければならなかったので
どうしてもUITableViewControllerでバナー入りの画面を作りたい！という方の為に方法を書きます。

# やりたかったこと
UITableViewControllerの下に広告バナーを差し込みたかった。
UITableViewのスクロールは広告バナーの上までにしたい。

# 何が面倒だったか
- ベースがUIViewではなくUITableViewなので`self.view addSubView`をするとスクロールにUIViewが追従してしまう
- 広告バナーの上までをスクロール領域にする
- UITableViewにaddSubViewするとUIViewに罫線が入ってしまう

などなど…これら全てをクリアしなければなりませんでした。
どうやって回避したか1つずつ書いていきます。

# `self.view addSubView`をするとスクロールにUIViewが追従してしまう
UITableViewのframeがViewDidAppear以外で変えれないので
これはもうaddSubViewする以外に方法がなかったです。なのでまずはaddSubViewします。
そのあと、UIScrollViewのscrollViewDidScrollでスクロール量に合わせて位置を固定するように座標を書くことで回避できました。

```
- (void)scrollViewDidScroll:(UIScrollView *)s {
   adView.frame = CGRectMake(adView.x + s.contentOffset.x,
                             adView.y + s.contentOffset.y,
                             adView.width,
                             adView.height);
}
```

これでひとまず固定が出来ます。

# 広告バナーの上までをスクロール領域にする
これはaddSubViewしてしまうとなると、UITableViewのcontentInsetをいじるしかありません。

```
- (void)viewDidLoad {
 tableView.contentInset = UIEdgeInsetsMake(0.f, 0.f, adView.height, 0.f);
 tableView.scrollIndicatorInsets = UIEdgeInsetsMake(0.f, 0.f, adView.height, 0.f);
}
```

こんな感じでバナー分上にあげてあげればそこまでしかスクロールしないようになります。
UIEdgeInsetsは3番目が高さになるので注意です。

# UITableViewにaddSubViewするとUIViewに罫線が入ってしまう
これはちょっとなぜこの現象が起きるかわからなかったのですが、
UIViewのalphaを変えても色をつけてもUITableViewの罫線がUIViewが透けているかのように
スクロールにあわせて動いていってしまいました。

UIViewの階層を確認するとUITableViewと同じレイヤーにいることがわかったので
zPositionを使い一段上にすることで固定することができるようになりました。

```
- (void)viewWillAppear:(BOOL)animated {
 [super viewWillAppear:animated];
 self.adView.layer.zPosition = 1; // ここで階層を1つ上に
}
```

これでスクロールにも追従しないし、スクロールもちょうどいい位置で止まるし、
罫線も透けないで完璧です！

# その他はまりどころ
UITableViewControllerのself.viewの高さはtoolbarやstatusBarの高さが考慮されます。
バナーをぴったりの位置に貼る時にはここを注意してください。

# いろいろやったけども本当に面倒だった
UITableViewControllerを使うぐらいならUITableViewを使って
単純にUITableViewの大きさを縮めた方が絶対に楽です。。
理由があってこの方法を使うのであれば、ぜひ参考にしてみてください！
purrrでdoせず楽をする

@uri のこの記事、`do()`の使い方がまとまっていてとてもいいです。

`do()`の使い方がよくわからなくて、doしますか！？ ダーッ！しますか！？みたいに頭が混乱していても、元気があれば何でもできそうな気さえしてきます。

[dplyrでdoして楽をする - Qiita](http://qiita.com/uri/items/27f1497778b4385acb25)

ということで特に文句をつけるところはないですが、最後の例をpurrrで書くとこう、というのをいちおう書き残しておきます。

```r
library(purrr)

iris %>%
  split(.$Species) %>%
  map2(., names(.), ~ ggplot(.x, aes(Sepal.Length, Petal.Length)) + geom_point() + ggtitle(.y))
```

今のところ、値とキーの両方にアクセスする便利な方法は用意されていないので、`map2(., names(.), ~ f(.x, .y))`のような書き方をすることになります。将来的にはもうちょっとわかりやすい書き方ができるようになってほしいところ。

---

追記:

今は`imap()`という関数があるのでこれを使いましょう。

```r
library(purrr)

iris %>%
  split(.$Species) %>%
  imap(~ ggplot(.x, aes(Sepal.Length, Petal.Length)) + geom_point() + ggtitle(.y))
```
Electronの型定義ファイルのエラーを荒業でなんとかする

# 追記
Electronのv0.35からAPIが大幅に変更され、このような問題は発生しなくなりました

***

ElectronアプリをTypeScriptで書いてると
`error TS2300: Duplicate identifier 'export='`というエラーがよく出ます。メインプロセスとレンダラプロセスの両方にipcという名前のモジュールがあるのが原因です。つらいのでなんとかしたいと思います。
# はじめに
まず、dtsmでインストールした型定義ファイルを`bundle.d.ts`から使わずに`renderer.d.ts`や`main.d.ts`に分けて、どちらか一方を参照するようにします。

```ts:main.d.ts
/// <reference path="./github-electron/github-electron-main.d.ts"/>
```

```ts:renderer.d.ts
/// <reference path="./github-electron/github-electron-renderer.d.ts"/>
```

この状態でプロジェクトを使ってコンパイル(`tsc -p`)するとやはり例のエラーがでます。
レンダラプロセスとメインプロセスでプロジェクトを分けてもよかったのですが、今回は型定義ファイルをちょっといじってipc-mainとipc-rendererというローカルモジュールを作成して解決しました。
# 型定義ファイルの変更
Electronの型定義ファイルをなんらかの方法でプロジェクトのディレクトリに落としてきます。その後、

```ts:github-electron-main.d.ts
declare module 'ipc' {
	var ipc: NodeJS.EventEmitter;
	export = ipc;
}
```

```ts:github-electron-renderer.d.ts
declare module 'ipc' {
	var inProcess: GitHubElectron.InProcess;
	export = inProcess;
}
```

と書かれている部分を編集して

```ts:github-electron-main.d.ts
declare module 'ipc-main' {
	var ipc: NodeJS.EventEmitter;
	export = ipc;
}
```

```ts:github-electron-renderer.d.ts
declare module 'ipc-renderer' {
	var inProcess: GitHubElectron.InProcess;
	export = inProcess;
}
```

とします。

# ローカルモジュールの作成
詳しくは [npm 2.0.0でローカルモジュールを使ってrequire('../../../')を回避する](http://efcl.info/2014/10/04/npm2-local-module/) を参考にしてください。(ちょっと古い記事ですがv3.4.0でもこの通り動きました)
適当なディレクトリを作りその中にipc-main、ipc-rendererという名前のディレクトリを作成し、それぞれのディレクトリの中に適切にjsファイルとpackage.jsonを作成します。

```js:ipc-main/ipc-main.js
if (process.type !== "browser") {
    throw new Error("This module can only load from main process");
}
module.exports = require("ipc");
```

```js:ipc-renderer/ipc-renderer.js
if (process.type !== "renderer") {
    throw new Error("This module can only load from renderer process");
}
module.exports = require("ipc");
```

あとは`npm install --save hoge/ipc-main hoge/ipc-renderer`を実行(モジュールを作成したパスに合わせてhogeの部分は変更してください)するだけで完成です。
# 使用例

```ts:app.ts
/// <reference path="../typings/main.d.ts"/>
import ipc = require("ipc-main");
// あるいは
import * as ipc from "ipc-main";
```

```ts:view.ts
import ipc = require("ipc-renderer");
// あるいは
import * as ipc from "ipc-renderer";
```
TCPとUDPの違い

わかっているようでちゃんとわかっていないTCPとUDPの違いについて。
備忘として整理。

#1)TCPとUDPの違い
　
●　TCPでは1パケット（1500バイト）に対し、1ACKを返す。ただ実際にはスライディングウィンドウの機能により、ウィンドウサイズ分をまとめてACKを返すので、4～5パケットで1つのACKを返しているのが実際であろう。これに対し、UDPではACKをまったく返さない。だからTCP/IPのオーバヘッドが少ない。
●　TCPはコネクション型、UDPはコネクションレス型←これが理解できれば以下も理解できるはず。
●　TCPではマルチキャストやユニキャストは使用できない。DHCPやRIPもUDP。



#2)TCPの特徴
　
● TCPはスリーハンドシェイク
● ラウンドトリップ時間が長くなるので、ウィンドウサイズを調整する
● フロー制御で送信するデータ量を調整
● 少しずつウィンドウサイズを大きくするアルゴリズムをスロースタートという⇨輻輳回避



#3)UDPの特徴
　
● 厳密さが求められない転送、パケット量が小さい転送に向く
● ヘッダにパケット長がある
● シーケンス番号がなく、代わりにチェックサムでデータが破壊されていないことを確認する。


#まとめ
TCP ⇒ 正確。遅い。Web通信など厳密な通信が求められるものが得意。
UDP ⇒ ちょっといいかげん。早い。動画転送などが得意。

おしまい。
Vagrantの共有ディレクトリ設定

Vagrantfileで共有ディレクトリ設定を行うのにつまづいたのでメモ。

#環境
Windows 7 Professional
Vagrant 1.7.4
Packer 0.8.6

#Vagrantfile
ただの勘違いかもしれませんが、

    config.vm.synced_folder "C:/vagrant", "/vagrant"

だけではうまく共有してくれないようなので検索しまして解決。

PC上のC:/vagrantと共有する場合。
以下のようにすると、PC側で作成したファイルやフォルダは、vagrantユーザー、vagrantグループでサーバ側に作成されます。

    config.vm.synced_folder "C:/vagrant", "/vagrant", :owner => "vagrant", :group => "vagrant", :mount_options => ['dmode=755', 'fmode=644']

この設定は複数書けるので、ディレクトリごとにユーザーわけて共有することもできるはず。
Houdini VEX Editorのインストール


https://github.com/paulwinex/pw_Houdini_VEX_Editor

いつのまにか Houdini VEX Editor なるものが出ていた。たしかにデフォルトのエディタはダメとまでは言わないけど十分に使いやすいとは言えなかったので喜んで導入。ただ、インストールがちょっとわかりにくい所があったのでメモ

---

[ダウンロードのページ](https://github.com/paulwinex/pw_Houdini_VEX_Editor/releases) からzipをおとしてきて展開

できた pw_VEX_Editor フォルダをどこかパスが通った所に置けと言う。`C:\Users\USERNAME\houdini15.0\scripts\python` 等とかってREADMEに書いてあったので従ってそこに置く

`pw_VEX_Editor\python_panels\vexeditor.pypanel` は別個でコピーしないといけないのかな。とりあえず `C:\Users\USERNAME\houdini15.0\python_panels` にコピーする。フォルダがなかった場合は作る

ツールバーの `Window > Python Panel Editor` を開いてドロップダウンを開いてみるとVEX Editorは読み込まれているのがわかる。どうやって開くかわからなかったのでアレコレしてみた所 `Window > Python Panel Editor` ウィンドウの Pane Menu タブの中、左の Available Interface リストから右の Toolbar Menu Entries に VEX Editor を移動すればよさそうだった。そうすると Scene View とか Network View とかのタブの右クリックで VEX Editor が出る

が、開くとpythonのエラーが出る。[hqt](https://github.com/paulwinex/hqt) ってライブラリがないっぽい事を言われたのでなんとなく探してインストールする。 `hqt.py` を `C:\Users\USERNAME\houdini15.0\scripts\python` にコピー、再起動、VEX Editorタブ開く で動いた。めでたし

### TODO:
Python Panelとhqtはなんか気になるのでそのうち調べること
SonarQube + Eclipseの注意点

次のこと書けていませんが・・・先にこれを書いておかねば！ということで。

SonarQubeのメトリクス計測の機能がEclipseのプラグインでも提供されています。
もちろんこのプラグインを使用してメトリクス計測できるのですが、
以下の点だけ注意が必要です。

## 注意点
* EclipseプラグインのSonar解析の保存先DBについては、ただいまH2しかサポートしてません！
　Eclipseのプラグインで品質取ったらH2に結果を放り込むしかないです。

たまにですが、Eclipseプラグインで実行させた結果をMySQLに書かせるとエラーになります。
どうしたら書けますか？と質問されることがあるので書いておきました。
Windows のターミナルのフォントを好みのものにして、素敵な端末生活を送る。


# 素敵じゃない端末生活

**シンボルが表示されない (Ricty だと ・ になる)**

![ricty.png](https://qiita-image-store.s3.amazonaws.com/0/97187/943eabf3-64f2-e932-18e3-e219fd61887a.png)

**フォントに納得がいかない**

![msgoth.png](https://qiita-image-store.s3.amazonaws.com/0/97187/008e7ddb-2a85-e42b-5bf9-b5125d5b3014.png)

# 素敵な端末生活

**望み通りに表示され、納得のいくフォントを使えている**

![inconsolata.png](https://qiita-image-store.s3.amazonaws.com/0/97187/4c5b6c1d-acc7-358d-4cbc-55a69ece95a1.png)

画像は Inconsolata + Ricty + Segoe UI Symbol です。

# 素敵な端末生活を送るには?

参考した記事はこちら↓

[WindowsでInconsolataを日本語フォントのように(リンク)改良](http://www.progresslog.net/windows-font-inconsolata-meiryoke-rink)

この記事は Inconsolata と MeiryoKe なのですが、**パッチあてたりめんどくさそうだし、私は Ricty 満足。**

なので、、、Ricty をそのまま使うレジストリ設定にしました。



```reg:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\FontLink\SystemLink\Inconsolata
RictyDiminished-Regular.ttf
SEGUISYM.TTF,Segoe UI Symbol
```

# あなた好みの端末にするには?

同じ階層にあるレジストリを見るていくと `FontLink\SystemLink` に置かれるレジストリの"データ"は「１行に１フォント」という書式で、１行には

```registry
フォントファイル名, フォント名, なんか引数
```

という風に書かれている**っぽくて、**
また、フォント名と引数は書かなくても大丈夫**っぽい**です。
※勘なので間違っている可能性あり。

つまり、欧文フォント(今回の場合 Inconsolata)を `SystemLink` 書き、日本語フォントやシンボルが含まれたフォントを"データ"に追加していくことで、好きなフォントセットができるということです！

また、"データ"に書く*フォントファイル名*は１つ下の階層にある `Fonts` を参照すると書きやすかったです。

![fonts.png](https://qiita-image-store.s3.amazonaws.com/0/97187/5865f59e-ffc7-fe6e-0b59-d40120d02d4c.png)

`Fonts` 以下のレジストリの"データ"を*フォントファイル名*として書く感じです！


あとは、、、

気になるフォントファイルを Fonts から探す
↓
Inconsolata の「データ」に書く
↓
サインアウト
↓
サインイン
↓
確認
↓
(ループ)

で、あなた好みの端末に１歩近づけるでしょう！

# 参考

Font のダウンロードは以下からやりました。

- Inconsolata: http://levien.com/type/myfonts/inconsolata.html
- Ricty: https://github.com/yascentur/Ricty