OmniAICreator/Qiita-1.07M huggingface dataset:
iOS9 URLスキーム戻るボタン勝手に追加すんじゃねよ

![Invalid file type: video/quicktime]()


iOS9でURLスキームで別アプリを開くとええ感じに戻るボタン追加されましたね
素晴らし機能ではありますが・・・・・

今の実装中のアプリにスキームで戻るボタンいらねーって話なんですわ

それで消そうとおもったら・・・・・

http://stackoverflow.com/questions/31871398/ios-9-hide-status-bar-back-button

![スクリーンショット 2015-10-22 12.54.48 PM.png](https://qiita-image-store.s3.amazonaws.com/0/72571/dad3b24e-6331-acb4-00cc-96b44fcb253b.png)


StackOverflowに書いてある通りに消せないらしい


iOSに新しい機能を追加すんのはいいけどよぉ
アクセスできるAPIをちゃんと用意しろやぁぁぁぁっボケぇぇぇて感じですが・・・・






今回はしゃあないのでStatsBar自体を完全に消しましょう
ステータスバーの消し方下記を参考に！

http://stackoverflow.com/questions/32965610/hide-the-status-bar-in-ios-9


ちゃんと消えてくれてよかったです(♡ >ω< ♡)


なんかstatusbar消さずに解決できる方法があればコメントよろ！
( ∩ˇωˇ∩)
【AWS】 VPC間SSH接続で躓いた話

AWSでVPC間SSH接続した時にいろいろあったのでメモ。

# 前置き
そもそも今回なぜVPC間のSSHを行おうと思ったかというと、

- 同一グループ内で複数ユーザーを作成し、それぞれが各サービスをたちあげたい。
- 同一VPC内での運用はありえない。
- サービスごとにロールを設けて複数VPC運用する。
- 同一拠点からの複数VPC接続ができないヽ(`Д´)ﾉｳﾜｧｧｧﾝ！

という流れが有り、必要になったためです。


# 準備

以下準備

- VPC Peering設定
- 各VPCでKey Pair作成
- VPC Peeringの中心となるVPCにEC2をローンチ（Public Subnet）
- 上記EC2に各VPCのKey Pair配置
- 各VPCにEC2をローンチ
- EC2にセキュリティーグループ設定

# やってみた

最初、踏み台EC2（中心となるVPCにローンチしたEC2）のPrivateIPを接続先EC2のセキュリティーグループ
に設定していたのですが、うまく行かず．．．

原因は、接続先EC2がPublic Subnetにローンチされていたからでした．．．なさけない。

というわけで、セキュリティーグループを以下に再設定

- 接続先EC2がPublic Subnetの場合、踏み台EC2のPublicIPをセキュリティーグループに追加
- 接続先EC2がPrivate Subnetの場合、踏み台EC2のPrivateIPをセキュリティーグループに追加


無事接続が可能になりました！

***
ただし、今回の場合踏み台EC2がPublic Subnetなので、ElasticIPじゃないとダメですね・・・
Private Subnetに変更してもう一回試してみます。
ActiveRecordで関連しているモデルのコレクションに対してメソッドを定義する


# Association extensions

Parent has_many childrenみたいな関係のモデルでparent.childrenに対してメソッドを定義したいことがよくあります。
たとえばchildrenの属性によって絞りこんだり(children.malesで性別が男性のchildのみを返す)、またはchildrenに関連する他のモデルを取得したり(children.schoolsでchildrenが通っている学校のコレクションを返す)など。

そんなとき、[Association extensions](http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#module-ActiveRecord::Associations::ClassMethods-label-Association+extensions)という機能を使うと上手くメソッドを定義できます。

Association extensionとは、関連として取得するモデルのコレクション(ActiveRecord_Associations_CollectionProxy)を自分が定義したメソッドやモジュールで拡張することが出来る機能のことです。

# 例題のモデル定義
以下のようなモデル定義があるとします。

```rb
class Parent < ActiveRecord::Base
  has_many :children
end

class Child < ActiveRecord::Base
  has_many :parents
  belongs_to :school
end


class School < ActiveRecord::Base
  has_many :children
end


parent = Parent.first
parent.children #=> [Child, Child, Child]
parent.children.first.school #=> School
```

# メソッドで拡張する
ではchildrenを性別が男性かどうかによってフィルタするメソッドmalesを定義して、拡張してみます。

```rb
class Parent < ActiveRecord::Base
  has_many :children do
    def males
      self.where(:gender, 'male')
    end
  end
.
.
.
end

Parent.first.children.males #=> [Child, Child]

```

上記のように定義すると以下のようにするchildrenに対して定義したmalesメソッドを呼ぶことができます。
ちなみにmalesメソッド内でのselfはchildrenになります。

# モジュールで拡張する
上記のようにメソッドで拡張することも出来ますが、childrenはSchoolモデルでも使われているため同じメソッドを重複して定義することになります。
そういうときはchildrenを拡張するモジュールを作り、そのなかでメソッドを定義すると重複を失くすことが出来ます。

```rb
module ChildrenExtension
  def males
    self.where(:gender, 'male')
  end
end

class Parent < ActiveRecord::Base
  has_many :children, -> { extending ChildrenExtension }
.
.
.
end

class School < ActiveRecord::Base
  has_many :children, -> { extending ChildrenExtension }
end


Parent.first.children.males #=> [Child, Child]
School.first.children.males #=> [Child, Child]

```
【走り書き】 (Ruby on Rails) on Windows を構築する

# はじめに
ggれば十中八九解決できてしまうくらい十分な知識がネット上に転がっているがゆえに、必要になるたびに忘れてしまう知識なので、一旦メモ書きとして走り書きしておきます。
（そういっていつも走り書き）

参考：
http://qiita.com/HirofumiYashima/items/62472fbc6fe3fdfd0dc5


# 1. とりあえず ruby をインストール
http://rubyinstaller.org/downloads/ へアクセス。
とりあえず何も考えずに最新版のx64のバイナリ(Ruby 2.2.3 (x64))を入手して、インストール。

ここはあくまで個人の趣味ですが、私はインストーラにPATHを弄られたくないので、かならず「ADD PATH」的なオプションはオフにしています。
(インストール先は C:/ruby22x64 です。)

# 2. とりあえず devkit をインストール
残念ながら素のRubyではRails関連のGemの一部をインストールできないので、それを解決するためのツールであるdevkitを入手します。
先ほどの http://rubyinstaller.org/downloads/ で入手することができます。

さっきインストールしたバージョンに対応した devkit を入手してください。
(2.2.3 x64 なら For use with Ruby 2.0 and above (x64) を入手)

# 3. devkit を適当な位置に展開 & インストール
DLしたexeを実行するとファイルが解凍されるので適当な位置に保存してあげてください。
（私はRubyのインストールディレクトリにdevkitディレクトリを作成し、そこに配置しました）

続いてコマンドプロンプトでdevkitのディレクトリへ移動し、次のコマンドを入力してください。

```
ruby dk.rb init
```

すると config.yml ができあがります。
中身を確認すると **正常であれば** インストール済みのrubyのディレクトリの一覧があるはずです。
・・・が、私の場合は何もなかったので以下の内容を追加しておきました。

```
# This configuration file contains the absolute path locations of all
#
# ...省略...
#
---

- C:/Ruby22x64
```

続いて、コマンドプロンプトで以下のコマンドを入力するとインストールができるはずです。

```
ruby dk.rb install
```

・・・が、私の場合なぜか SKIP の連続だったのでやむを得ず以下のやりとりを参考にむりやりインストールしてしまいました。
http://stackoverflow.com/questions/10862695/trying-to-install-dev-kit-for-ruby-in-windows-7-but-fails

```
ruby dk.rb install --force
```

# 4. Rails インストール
以上でrubyの基本的な仕込みは終わりましたので、次はrailsをインストールします。
といっても以下の2つのコマンドをコマンドプロンプトで入力するだけなので難しくありません。

```
install gem bundle
install gem rails
```

# 5. Rails ディレクトリ作成
さてRailsのワーキングディレクトリを作成してみましょう。
コマンドプロンプトで以下のコマンドを入力するとRails用のファイルが生成されます。
--skip-bundle はrails用のgemを自動ではインストールさせないようにするためのオプションで、複数プロジェクトを管理する場合には事実上必須のオプションです（詳しくはggってください）。

```
rails new mypage --skip-bundle
``` 

さてRailsディレクトリができあがりました。
本来であれば bundle install して必要なgemをインストールすれば終わるのですが、残念ながら現在のままでは Nokogiri がインストールできないというエラーを吐かれてしまいます。
そのため、そのセッティングを行います。

# 6. Nokogiriインストール
これどおりにがんばって！: http://qiita.com/akaneko3/items/247af28abded3b3d3617

# 7. 無事に動きました
【Chrome 46.0.2490.71】フォーム系をマウスオーバーするとアンカーした場所に飛ばされてしまう

私自身、1週間ほど前からこの現象を確認しているので、おそらく最新Chromeの問題だと思っています。
ただ、毎回必ず起こる、というものではないみたいです。

http://qiita.com/mimoe/items/0bcba94da365499e9c6b#%E3%83%8F%E3%83%BC%E3%83%88

みたいな感じで、ハッシュタグが付いていて、それがアンカーとして機能している場合、
フォーム系のもの、inputやselectなどをマウスオーバーすると、アンカーした場所に飛んでしまいます。
(きっと、問い合わせフォームのページや、CMS系のもので起きているのではないかと・・・)

ラジオボタン・チェックボックスには反応しません。
その他、ボタンやテキストも反応しない。
そのブラウザ以外のウィンドウにフォーカスされている場合、スクロールはできるが、この現象は起こらない。

いろいろ検証した結果、
ハッシュタグが付いていること・ハッシュタグを付けるための方法
この2つが原因でないことは確認できました。

また、必ずの解消方法として、「要素の検証をする」というのも確認しています。

一度要素の検証をすれば、閉じた後もこの現象は起こらなくなります。




んーわからぬ(´・ω・｀)
WindowsでのあれこれMACでやるには


# Windowsでよく使っている機能（コマンド）をMACではどうやるのかの覚書

気づいた時に加筆していきます。

## エクスプローラ
### 上のフォルダ(階層)へ

```Windows.
Alt ＋ ↑
```

```MAC.
Commond ＋ ↑
```

## エクセル
### エクセルのセル内で改行
```Windows.
Alt ＋ Enter
```
``` MAC.
Commond ＋　opt ＋ Enter
```

### エクセル表示の拡縮
``` Windows.
Ctrl ＋ マウスのホイール
```
``` MAC.
Commond ＋　Ctrl ＋ マウスのホイール
```
SlideOver & SplitView 対応 iPad アプリの画面サイズ一覧

iOS 9 で iPad に画面を分割して2つのアプリを同時にフォアグランドにするマルチタスキング機能 **Slide Over & Split View** が追加されました。また、より大きな画面の **iPad Pro（12.9インチモデル）** の登場により、iPadシリーズもiPhoneシリーズと同様に複数の論理画面サイズを持つようになりました。
※ 以下の説明では「iPad Pro」といった時には「iPad Pro（12.9インチモデル）」を指すものとします。Pro 9.7インチモデルは試してませんが、旧来のiPad Air などと同じディスプレイ解像度なので、Split等の仕様も同じと思われます。

そこで、**Slide Over & Split View** と **iPad Pro** の画面サイズ全てに対応するアプリが考慮すべき画面サイズを調べてみました。

## 画面分割と配置のパターン

まず、Slide Over & Split View における画面分割と配置のパターンは以下の図に示す A から G の7通りがあります。
<img width="213" alt="スクリーンショット 2015-10-22 12.07.01.png" src="https://qiita-image-store.s3.amazonaws.com/0/2356/f8724537-0827-2ad9-7f4b-def95670e237.png">

## 画面サイズ一覧

それぞれの画面サイズ（論理サイズ）は以下の通り。

|配置|説明|iPad or iPad mini  |iPad Pro|Horizontal SizeClass|
|--:|:----|---------:|------------:|:------------|
|A|ランドスケープ全画面|1024 x 768|1336 x 1024|.Regular|
|B|ランドスケープ SplitView 左画面|694 x 768|981 x 1024|.Regular|
|C|ランドスケープ SplitView 右画面 or SlideOver|320 x 768|375 x 1024|.Compact|
|D|ランドスケープ SplitView 左右均等分割|507 x 768|678 x 1024|**iPad**: .Compact<br /> **Pro**: .Regular|
|E|ポートレイト全画面|768 x 1024|1024 x 1336|.Regular|
|F|ポートレイト SplitView 左画面|438 x 1024|639 x 1336|.Compact|
|G|ポートレイト SplitView 右画面 or SlideOver|320 x 1024|375 x 1336|.Compact|

なので、全部で14種類の画面サイズへの対応が必要となります。
横幅のみを全部列挙すると

  `320, 375, 438, 507, 639, 678, 694, 768, 981, 1024, 1336`

の9種類となります。
なお、幅の 320 と 375 は前者が iPhone 5s までの古いiPhone, 後者は iPhone 6系と同じ幅となっております。

## まとめ
上記の通り、アホみたいにたくさんの画面サイズがありますので、固定値ベースのレイアウトはきっぱり捨てて Auto Layout で上手くやりましょう。
iOS9 HTTP通信が勝手にHTTPSに変更しやがる件について

もう秋ですね！寒くなりましたね！

Xcode7になってBaseSDK9(iOS9)になりました。
通信系のライブラリーAFNetworking/Alamofireなど便利で良く使うんですが・・・・

そいでいつも通り実装してたら・・・・

<img width="1182" alt="sample.png" src="https://qiita-image-store.s3.amazonaws.com/0/72571/319e6b21-b9aa-f45c-43a0-68e6721185aa.png">



うん！？エラー？
なぜ？いろいろ調べると

<img width="521" alt="sample.png" src="https://qiita-image-store.s3.amazonaws.com/0/72571/bbc0e91f-2560-797a-4a19-22192555e400.png">



NSAppTransportSecurity/NSAllowArbitraryLoadsを変更せなアカンらしいです。

以上( ∩ˇωˇ∩)
IPv4のローカルホストのみListenするようにする 

postgresql.conf
listen_addresses = '0.0.0.0'

http://db.just4fun.biz/PostgreSQL/PostgreSQL%E3%81%A7IPv6%E3%81%AE%E3%83%AA%E3%83%83%E3%82%B9%E3%83%B3%E3%82%92%E7%84%A1%E5%8A%B9%E3%81%AB%E3%81%97%E3%81%9F%E3%81%84%E5%A0%B4%E5%90%88%E3%81%AE%E5%AF%BE%E5%87%A6.html
SourceTreeとegitを同時に使うと便利かも。

ようやく実プロジェクトでGitを使えるようになったのでメモ。

eclipseのworkspaceフォルダをGitで管理すると考えるのではなく、Gitでクローンしたフォルダをeclipseで使うと考えるとスムーズ。

eclipseのegitプラグインはレポジトリの管理がやりにくい。
よってSourceTreeとGit bashを併用。

Gitで管理するのはbuild.gradleとソースファイルのみ。
eclipseのプロジェクト設定ファイル等は管理しない。
その都度、`gradle eclipse`で作成し、eclipse で importする。

-SourceTreeを使ってGitからプロジェクトをクローン。
-クローンしたプロジェクトのbuild.gradle を使って`gradle eclipse`でeclipseのプロジェクトを作成。
-作成したeclipseプロジェクトをeclipseにimport。
-開発開始。

SourceTreeとeclipseの両方でコミット・プッシュしたり、一方でコミットしてもう一方でプッシュといった使い方が出来る。

SourceTreeの方が複数のレポジトリ(共有サーバー上のレポジトリとgithubとgitLabを同時に使いたいとか)の管理がやりやすいので、プッシュ・プルはSourceTree。コミットはeclipseと使い分け中。
vim | 最後の行からファイルを開く方法

オプション + をつけると、ファイル末尾から開ける。

#### 例:

 `$ vim + [filename]`



<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ


# メンター受付


https://menta.work/user/5694

<!-- Update From Qiita API -->
RxとReactivePropertyを使って、WPFでUnidirection Data Flowを実現する

 

# 要約

[ブラウザ上の MVC的な分割を Node Stream API で行う](http://qiita.com/ledsun/items/dab26add15a6cf9079e5)の WPF+[Rx](https://github.com/Reactive-Extensions/Rx.NET)+[ReactiveProperty](https://reactiveproperty.codeplex.com/) 版です

# 背景

WPFで、真面目にコードビハインドとViewModelを分離して、MVVMを実現するには、INotifyPropertyChangedとICommandの実装が面倒です。
また、個人的に双方向バインディングより、Unidirectional Data Flowが好きです。

# 作戦

幸い、技術的要素は揃っています。

- イベントをRxで処理
- ViewModelからViewへの変更通知はReactivePropertyで実現
- ViewはXamlで実現

次のような処理の流れを考えます。

1. Rxでイベントを受け取る
2. Rxストリーム中でイベントを処理
3. 結果をReactivePropertyに反映
4. Viewを更新

# 作るアプリケーション
ボタンをクリックしたらカウンターの数値を加算します。

![out.gif](https://qiita-image-store.s3.amazonaws.com/0/15964/65c63179-2b10-3064-91e4-fcf2678f2f76.gif "out.gif")


# 実装

## View

TextBlockにカウンターの値をバインドします。

```xaml
<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApplication1"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <StackPanel>
        <Button x:Name="button" Content="Button"  />
        <TextBlock x:Name="textBlock" Text="{Binding Count.Value}"/>
    </StackPanel>
</Window>
```


## コードビハインド

```C#
using Reactive.Bindings;
using System;
using System.Reactive.Linq;
using System.Windows;

namespace WpfApplication1
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            // DataContextにViewModelをバインド
            var vm = new ViewModel();
            DataContext = vm;

            // イベントに処理をバインド
            Observable.FromEvent<RoutedEventHandler, RoutedEventArgs>(
                    h => (s, e) => h(e),
                    h => button.Click += h,
                    h => button.Click -= h
                )
                .Subscribe(_ =>
                {
                    // ViewModelを更新
                    vm.Count.Value++;
                });
        }
    }

    public class ViewModel
    {
        public ReactiveProperty<int> Count { get; } = new ReactiveProperty<int>();
    }
}
```

- DataContextにReactivePropertyを使ったViewModelを設定して、変更通知をバインド
- Rxの`Observable.FromEvent`を使って、ボタンクリックイベントに処理をバインド

# 感想

ModelとContorllerは分離されていません。
ですが、Subscribe内の処理をServiceクラスに分離すればなんとでもなりそうです。

JavaScriptより簡単に実装できました、WPF（とRxとReactiveProperty）すごいです。
良さげ:sushi:

# 参考
- [Rx環境の構築とRxイロハのロ - C#でプログラミングあれこれ](http://d.hatena.ne.jp/fkmt5/20130915/1379268480)
- [INotifyPropertyChanged実装のありえない面倒くささと、ReactivePropertyの信じられない素晴らしさ](http://qiita.com/ledsun/items/6f4ef754e5ae2507e531)
『...nib but the view outlet was not set』というエラーが出たとき

##xibで作業をしていると何度かつまるポイント。。。

```objective-c
...nib but the view outlet was not set
```
というエラー。

つらい笑
このエラーが出たときには、xibとコントローラーの接続が出来てません。

対処法は以下です。
###①File's OwnerのCustomClassを設定する 
こんな感じ 

![](http://f.cl.ly/items/1V1J1l3z0P123G154634/a.png)



###②OutletsのViewとviewを接続する 
こんな感じ 

![](http://f.cl.ly/items/1V1J1l3z0P123G154634/a.png)


#これで直る！

やったね！
FinderのQuicklookの機能を拡張する

#Finderでzipファイルの中身も見たい
Homebrewで[Homebrew Cask](http://caskroom.io/)を追加する
Homebrewをインストール済みでない方はまず以下の方法でダウンロードする
参考:[Homebrewのインストールの仕方](http://qiita.com/fivestarHoshi/items/8e7120c7beb04b84e718)
続いてbrew caskコマンドをつかってOSX用のソフトウェアをインストールできるようにHomebrew Caskをインストール。
**Caskをインストールする**
```$ brew install caskroom/cask/brew-cask```

**FinderのQuicklookでzipの中身もプレビューできるようにしたい！**
```$ brew cask install betterzipql```


#他にもいろいろプレビューしたい
**.md(Markdown)ファイルもプレビューしたい**
```$ brew cask install qlmarkdown```
**JSONファイルもプレビューしたい**
```$ brew cask install quicklook-json```
**拡張子がなくてもプレビュー**
```$ brew cask install qlstephen```
**画像ファイルのプレビューにサイズも表示したい**
```$ brew cask install qlimagesize```

**何度もコマンド打たずに一発で終わらせたい！**
```$ brew cask qlmarkdown quicklook-json qlstephen qlimagesize```
Rubyでのgemを使わないtwitterのbarer_tokenの取得

※タイトル変更しました。
（前タイトル：Rubyでのgemを使わないtwitterのoauth2用tokenの取得）

oauthの仕組みとrubyに慣れるため、twitterのoauth2用tokenの取得を自前で実装してみました。
検証は中途半端ですがメモがてら

#ソースコード

```
  def twitter_auth
    api_key = '0Z2...........ANu'
    api_secret = 'EG50c.................................FYGvt'
    encoded_key =  URI.encode(api_key)
    encoded_secret =  URI.encode(api_secret)
    bearer_token = encoded_key + ":" + encoded_secret
    base64_token = Base64.strict_encode64(bearer_token)

    twitter_uri = URI.parse('https://api.twitter.com/oauth2/token')
    https = Net::HTTP.new(twitter_uri.host, twitter_uri.port)
    https.use_ssl = true
    https.verify_mode =  OpenSSL::SSL::VERIFY_NONE
    req = Net::HTTP::Post.new(twitter_uri)
    req["Authorization"] = "Basic #{base64_token}"
    req.content_type = 'application/x-www-form-urlencoded;charset=UTF-8' 
    https.set_debug_output $stderr
    res = https.request(req, body = 'grant_type=client_credentials')    
    render text: res.body
  end
```

#はまった事
[事象]
https://api.twitter.com/oauth2/token の実行が上手く出来ない。
コーディングの過程で
リクエスト結果が
403エラー　{"errors":[{"code":99,"message":"Unable to verify your credentials","label":"authenticity_token_error"}]}
400エラー　が返ってくる。


[原因1]
リクエストヘッダ、Authorizationの値(Base64エンコーディングされてる)に\nが混ざっていた。

a)Base64エンコーディングの仕様の違いにより、リクエストヘッダの値が正しくデコードできない
当初利用していたrubyのBase64.encode(str)はRFC 2045に基づいており、1行あたりの文字数制限が存在するため、改行コードが入りうる。
一方でBase64.strict_encode64(str)はRFC 4648に基づいており、改行コードが入らない。
twitter側でのデコードの際、エンコーディングの違いにより、正しくデコードできなかった。


[原因2]
b)リクエストヘッダ内の改行コードが入ると、rubyのPOSTリクエストがおかしくなる？

・ruby
Authorizationの値に
\nが入った場合：ステータス400
誤った値の場合：ステータス403
正しい値の場合：ステータス200
が返ってくる。

・curl
Authorizationの値に
\nが入った場合：ステータス403
誤った値の場合：ステータス403
正しい値の場合：ステータス200
が返ってくる。

上記のように、rubyとcurlでは\nが入った場合のステータスが異なる。
どちらのPOSTリクエストが正しいかは不明ではあるが、
rubyの場合改行コードがリクエストヘッダに含まれると、意図しないリクエストが送出されるように思える。

この辺はhttpリクエストのキャプチャツールを使えば判りそうではあるが、今回は放置。


[混乱の元]
POSTリクエスト実装前の、Curlでの試験時、
p base64_token、ではなく
render text: base64_token で取得したtokenを利用したため、

bearer_tokenの値が
本来の、

MFo（省略）kZSQ2Zv\nT1RMS（省略）d2dA==

ではなく、

MFo（省略）kZSQ2Zv T1RMS（省略）d2dA==

(\nが半角スペースになっていたもの)を利用していた。

base64の値をデコードする際は、A–Z, a–z, 0–9 までの62文字と、記号2つ (+, /)、パディング記号(=)以外は無視されるみたいなので、半角スペースを含むtokenでは問題なくAPIを実行できていた様子。
SDWebImageをiOS9で使う(Xcode7)


## SDWebImageとは
https://github.com/rs/SDWebImage
SDWebImageというライブラリがあり、cocoapodsから導入できます

iOS開発で使えて、

```swift
imageView.sd_setImageWithURL(NSURL(string: "https://pbs.twimg.com/profile_images/648801531702083584/nqCFf1AY.png"))
```

みたいに書くだけで、画像を非同期ダウンロード＆キャッシュを行ってくれます！キャッシュ期間なども設定可能で、とても便利に利用できます。

ただ、Xcode7にしてから動かなく（画像が表示されなく）なって・・・原因はなんだろう、と思っていたら、Xcodeではなく、iOS9のATSが原因でした・・・（詳しくは後述します）

## install
cocoapodsがインストールされていない場合、[クリーンなMacOSX 10.11に開発環境を](http://qiita.com/_ha1f/items/34aec37688bdf11c49cf#cocoapods)を参考に、cocoapodsをインストール！

普通にcocoapodsで

```profile:Podfile
platform :ios, '8.0'
use_frameworks!

pod 'SDWebImage'
```

として、`pod install`すればOKです

ちなみに、use_frameworks!、とかくと、swift用という意味になり、ver0.36以前では必要であったブリッジファイルを記述する必要がなくなります
参考 → [Swift 対応版 CocoaPods を使う](http://qiita.com/taketin/items/8264aeebc5a626c6d48f)


## iOS9での簡単な使い方
SDWebImageの細かい使い方はほかのサイトに多くあると思いますので、割愛します。

sample -> https://github.com/ha1fha1f/SDWebImageTest

上のgitにサンプルのプロジェクトをおきました(Xcode7.1)

iOS9で動かないのはATSが原因ですので、とりあえず動かしたいのであれば、ATSを切ればよいのです・・・

すなわち、特定ドメインに対するATSを無効化するおまじない

![Info_plist.png](https://qiita-image-store.s3.amazonaws.com/0/77778/11590d4d-268c-1b36-9c51-ffc4b687acfd.png "Info_plist.png")

これをInfo.plistに記述すればOKです。
pbs.twimg.comのところは、画像を取得したい先のドメインにしておいてください。

xmlで以下を記述したほうが速いかもしれません、

```xml
<key>NSAppTransportSecurity</key>
	<dict>
		<key>NSAllowsArbitraryLoads</key>
		<false/>
		<key>NSExceptionDomains</key>
		<dict>
			<key>(ドメイン名)</key>
			<dict>
				<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
				<false/>
				<key>NSExceptionAllowsInsecureHTTPLoads</key>
				<true/>
			</dict>
		</dict>
	</dict>
```

これで無理矢理ではありますが、iOS9でもSDWebImageを使うことができます

ViewControllerのコードは、SDWebImageはUIImageViewがextensionされて実装されているので、

```swift
class ViewController: UIViewController {
    var imageView: UIImageView! = nil

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        if imageView == nil {
            imageView = UIImageView(frame: self.view.frame)
            imageView.backgroundColor = UIColor.blueColor()
            imageView.sd_setImageWithURL(NSURL(string: "https://pbs.twimg.com/profile_images/648801531702083584/nqCFf1AY.png"))
            imageView.contentMode = UIViewContentMode.ScaleAspectFit
            self.view.addSubview(imageView)
        }
    }
}
```

これだけでOKです
とても簡単ですね！
Macでファイルキャッシュがメモリを圧迫するときの対応

備忘録
OSXで挙動がおかしくなった時、ファイルキャッシュが大量にメモリを食いつぶしている可能性があります。その時、下記のコマンドでファイルキャッシュを解放できます。


```
$ sudo purge
```
変更したファイルだけrspecにかけたい，あるいはawkのパターンマッチの話


毎回ファイルを指定するのがダルくなってきたので

```sh
git status -s | awk '/_spec/ {print $2}' | xargs bundle exec rspec
```

最初は

```sh
git status -s | awk '{print $2}' | grep spec | xargs bundle exec rspec
```

とかやってたんだけど，そもそもawkだけで絞りこめるじゃんっていうだけの話でした．


というわけで，aliasにしたので，`git rspec`で変更したrspecだけ実行される．

```conf
[alias]
        rspec = !git status -s | awk '/_spec/ {print $2}' |xargs bundle exec rspec
```
Spriteを3d空間上の大きさ1にスケールする

Spriteを普通に表示すると適当な大きさになり、3D空間上の大きさとどのように対応させればよいかがよくわからなかったのでメモ。

# Code

スケールさせるコードはこんな感じ。

```csharp
// SpriteをPrefabとしてLoad
GameObject prefab = Resources.Load<GameObject> ("Prefabs/Sample");
SpriteRenderer renderer = prefab.GetComponent<SpriteRenderer>();

// 3D空間上に配置した時のサイズ
float sizeX = renderer.bounds.size.x;
float sizeY = renderer.bounds.size.y;

// 空間上で1の大きさになるようにスケールする
float scaleX = 1.0f / sizeX;
float scaleY = 1.0f / sizeY;

// objectを空間上に生成しスケールさせる
GameObject obj = Instantiate(prefab, Vector3.zero, Quaternion.identity) as GameObject;
obj.transform.localScale = new Vector3(scaleX, scaleY, 1.0f);
```

SpriteRendererのBoundsで配置した時のサイズを取得して、それを元に1の大きさになるようにscale値を決めている。

# 余談: Pixels Per Unit

<img width="331" alt="pixelperunit.png" src="https://qiita-image-store.s3.amazonaws.com/0/15000/9f908695-3a99-bb4a-932a-26a0de5047a8.png">

SpriteはInspectorのPixels Per Unitという単位で3D空間上の大きさと対応する。
デフォルトだと100なっている。
例えば600x600 pixelのSpriteを3D空間上に配置すると、先ほどのBoundsは6x6の大きさとなるわけだ。
Atomエディタ設定

Atom Editor Tips
====

## Overview
　今までEmEditorを使っていたけれど、Free版だと機能制限が有り、
開発用に何か別のエディタが無いかと探していたら行き着いた。
設定のメモを個々に残すことにする

## Installation
* 下記より、インストーラパッケージを取得し実行
 - https://atom.io/

## Settings
* File -> Settings
 - 設定タブが開かれるので適当に選ぶ

## Package Install
* 便利なパッケージ一覧
 - markdown-preview
 - japanese-wrap
 - file-type-icons

## Other
* Program Files にインストールフォルダが作られない
 - ファイルの関連づけも推奨されないようだ
 - Verが代わる毎にインストールフォルダが代わるらしい

## Author
Qiita > スパムがひどい > どんな対策ができるだろうか

Qiitaにて「すべての投稿」にざっと目を通して面白そうな記事をストックするのだが、今日見たところ、最新の項目において30以上のスパム記事が投稿されていて、非常に見づらい。

スパムの特長として
- Stream, Live, vs などのタイトルがついている
- TV, watch などの文字が記事内に書かれている
- livestreamと思われる先のリンクがある
- 意味不明のtagがついている
- 1時間以内に４つなど複数の投稿がある (投稿が少ない場合もある)
などいくつかの特長がある。

全部が全部フィルタリングが無理でも、上記の３つ程度の条件に合致したユーザについては以下のような対応をすることで、多くのスパムを排除できる（公には見えない）のではないかと思う。
1. 記事を(強制的に)限定公開にする
2. さらなる投稿を禁止する
3. スパム制限にした旨を記事に記載する (「この記事は１年以上前に最終更新しました」という表記に近いものでいい。「この記事はスパムと思われるため限定公開にしました」）
4. スパム制限解除するには、運営に連絡させる
Thunderbird, Libre Office5 Draw 操作テクニック

## Thunderbird (メーラー)

### 表示フォントを固定長に変更

* Latin のフォントを固定長にするとよい。

![font.png](https://qiita-image-store.s3.amazonaws.com/0/25728/3696d555-7a58-e75f-98cc-b9e018005462.png)

### キーバインド

* `f` : 次のメール
* `b` : 前のメール
* `n` : 未読に移動
* `s` : starをつける
* `F5` : 新着確認
* `ctrl n` : 新規メール作成
* `ctrl shift r` : 全員に返信
* `ctrl l` : 転送
* `ctrl f` : ページ内検索
* `ctrl shift k` : フォルダのメッセージを絞り込む
* `[` : 戻る
* `]` : 進む

### `j`の入力を無効にする

* [keyconfig - Thunderbirdのショートカットを設定できるアドオン - マイチキンハート](http://www.my-chicken-heart.com/2014/08/keyconfig-thunderbird.html)を入れて無効化する。
* `j` : 迷惑メールに設定
![スクリーンショット_2015-10-22_08-00-05.png](https://qiita-image-store.s3.amazonaws.com/0/25728/184008c2-50af-6825-b4f1-5212cbb1fea7.png)

### HTMLメールの作成

* [ThunderbirdでHTMLメールとプレーンテキスト形式の切り替え方法 （送信メール） - モバイル通信とIT技術をコツコツ勉強するブログ](http://computer-technology.hateblo.jp/entry/20131217/p1)

* shiftキーを押しながら`作成`

---

## Libre Office5 Draw 

* visioの変わり。
* xubuntuだと`libreoffice-draw`を入れる。

### インフラ屋向けアイコンを追加

* [VRT Network Equipment | Apache OpenOffice Extensions](http://extensions.openoffice.org/en/project/vrt-network-equipment)

### マウスとの合わせ技

* 縦横幅を保ったままの画像のリサイズは`shiftキー押しながらマウスで縮める`
* shift押しながら矢印を引くと45度、90度になる。
    * 一度引いた線を45度、90度に変更することはできない様子

### キーボード・ショートカット

* `ctrl +` : 前面に移動
* `ctrl -` : 背面に移動
* `ctrl shift G` : グループ化
* `ctrl shift alt G` : グループ化解除

### 印刷テクニック

* 画面に入り切っていない図形も印刷範囲に入れたい場合、
  * 全選択してグループ化し、shift押しながらリサイズ
  * その後グループ化解除


## AWSシンプルアイコン

* [AWS シンプルアイコン - AWS アーキテクチャーセンター | アマゾン ウェブ サービス（AWS 日本語）](https://aws.amazon.com/jp/architecture/icons/)
技術英語 > I'm aware of that, Commander. / detour

@ Star Trek Voyager > JETREL

艦長からの大幅な船のコース変更の指示に関連した会話
Chakotayが副長で、Janewayが艦長。

> [Chakotay] That's a siginificant detour, Captain.
> [Janeway] <font color=red>I'm aware of that</font>, Commander.

「認識した上での」指示をしているという時などに使う。

<hr>
detour は時々Voyagerで出てくる。

http://ejje.weblio.jp/content/detour
> 回り道，迂回路.
OpenSSL コマンドメモ

## そもそも
管理しているサーバが多ければ使用頻度も多いのだが、
対象が多ければ多いで、更新日付を揃える運用に持って行くため、
結局、数えるほどしか使わない。
従って、メモを残しておくことにする。

openssl -h でわかるだろ、とツッコミは禁止。
なぜなら、自分でも毎回そう思っている・・・・。

## KEY Gen
<pre>
 $ openssl genrsa 2048 > mfapola.key  
</pre>

## CSR Gen
<pre>
 $ openssl req -new -key mfapola.key > mfapola.csr  
 $ openssl req -nodes -newkey rsa:2048 -sha1 -keyout mydomain.key -out mydomain.csr  
</pre>

## Sign CRT
<pre>
 $ openssl x509 -req -days 3650 -signkey mfapola.key < mfapola.csr > mfapola.crt  
</pre>

## Change type SSL cert from pkcs12(.pfx) to CER(PEM)
<pre>
 $ conv to pkcs12 from cer/crt  
 $ openssl pkcs12 -export -out test.pfx -inkey mfapola.key -in mfapola.crt  
</pre>



## Other
<pre>
 $ openssl x509 -noout -text -in <CRT>  
 $ openssl x509 -noout -issuer -subject -dates -modulus -in <CRT>  
 $ openssl req -noout -text -in <CSR>  
 $ openssl req -noout -subject -modulus -in <CSR>  
 $ openssl rsa -noout -text -in <KEY>  
 $ openssl rsa -noout -modulus -in <KEY>  
</pre>

## 怠惰チェック
 * それぞれopenssl的md5を取得して一致していれば適合
<pre>
server.key
    $ openssl rsa -noout -modulus -in server.key | openssl md5
    $ openssl req -noout -modulus -in server.csr | openssl md5
    $ openssl x509 -noout -modulus -in server.crt | openssl md5

    $ openssl s_server -accept 10443 -cert server.crt -key server.key -CAfile chain.crt -WWW 
</pre>
【iOS】UITableViewのEditボタンを日本語（編集）に変える方法


UITableViewのcellの編集をする際は、`Edit`ボタンを押すと編集することができる。
そこで、`Edit`ボタンを英語ではなく日本語の`編集`ボタンにしたくて調べてもなかなか出てこなかったので紹介します。

初期状態では、以下のように`Edit`ボタンは英語だと思います。

![01.png](https://qiita-image-store.s3.amazonaws.com/0/75221/074ffb32-4cc5-5d25-5478-e8169f6d368e.png "01.png")



## ①
まずはここをクリック！
![02.png](https://qiita-image-store.s3.amazonaws.com/0/75221/31c8aa75-86f3-e950-8153-0f53c808475b.png "02.png")


## ②
TARGETSのプロジェクト名をクリックして、`[info]`を選択
![03.png](https://qiita-image-store.s3.amazonaws.com/0/75221/c266712a-b84c-360c-8054-f5ce782fee1d.png "03.png")

## ③
[Localization native development region]の値選択をクリック！
![04.png](https://qiita-image-store.s3.amazonaws.com/0/75221/1033775f-89db-cded-f90d-c2841d26ffbb.png "04.png")

## ④
値が`en`になっていると思いますが、`Japan`に変更します。
![05.png](https://qiita-image-store.s3.amazonaws.com/0/75221/5aed2ce1-eef5-2428-0ef4-6f3d089bd5d1.png "05.png")

## ⑤
Runして`Edit`が`編集`になっていることを確認
![06.png](https://qiita-image-store.s3.amazonaws.com/0/75221/f495a2f2-b25f-882f-1a57-2221cdcf44c4.png "06.png")



これで無事、`Edit`を日本語の`編集`に変更することができましたね。
OpenCVでマスク画像を用いて透明部分を作る

OpenCV 2.4.11で実装しています。
マスク画像を用意し、マスク画像の黒部分をソース画像の透明部分としています。
なお、imshowでは透過部分の表示には対応していないため、透過であることを確認するために画像で書き出しています。

````
#include <cv.h>
#include <highgui.h>

int main(int argc, char** argv)
{
    cv::Mat image = cv::imread("image.jpg");
    cv::imshow("image", image);
    std::vector<cv::Mat> channels;
    cv::split(image, channels);
    cv::Mat mask = cv::imread("mask.jpg", 0);
    channels.push_back(mask);
    cv::Mat new_image;
    cv::merge(channels, new_image);

    cv::imshow("new image", new_image);
    cv::imwrite("new.png", new_image);
    cv::waitKey(0);
}
````
OpenCVで黒ピクセルを透過にする

OpenCV 2.4.11で実装しています。
黒（0, 0, 0）のピクセルを透過にするには次のコードで実現可能です。
3チャネルのcv::Matを4チャネルに拡張し、4チャネル目（アルファチャネル）に0を書き込むことで透過にしています。
R, G, Bがそれぞれ0の時が黒であるので、R+G+B=0の時にアルファチャネルを0にしています。
なお、imshowでは透過部分の表示には対応していないため、透過であることを確認するために画像で書き出しています。

````
#include <cv.h>
#include <highgui.h>

int main(int argc, char** argv)
{
	cv::Mat source = cv::imread("image.png");
	cv::Mat alpha_image = cv::Mat(source.size(), CV_8UC3);
	cv::cvtColor(source, alpha_image, CV_RGB2RGBA);
	cv::imshow("original", source);
	cv::imshow("image", alpha_image);
	for (int y = 0; y < alpha_image.rows; ++y) {
		for (int x = 0; x < alpha_image.cols; ++x) {
			cv::Vec4b px = alpha_image.at<cv::Vec4b>(x, y);
			if (px[0] + px[1] + px[2] == 0) {
				px[3] = 0;
				alpha_image.at<cv::Vec4b>(x, y) = px;
			}
		}
	}
	cv::imwrite("new.png", alpha_image);
	cv::waitKey(0);
}
````
SVG要素で超お手軽に読み込み中アイコンを置く


- **読み込み中を示すインジゲーターアイコン ([Throbber](https://en.wikipedia.org/wiki/Throbber)) を置きたい**
- かといって画像置きたくない
- ライブラリも使いたくない
- CSSもいじりたくない

なんとも我が侭で物ぐさな人 (私) のためにこさえた、
HTMLにSVG要素をコピペするだけで超お手軽にできる読み込み中アイコン。

![Throbber](https://qiita-image-store.s3.amazonaws.com/0/70467/ecf5665e-f20d-9eb7-759a-d6e457838bfc.gif)

## SVG要素

以下のHTMLをコピペするといきなり動きます。*(ただしモダンブラウザに限る)*

### 3/4円弧バージョン

```html
<svg width="100px" height="100px" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
	<path d="M94,50 a44,44,0,1,1,-44,-44" stroke="#369" fill="none" stroke-width="12">
        <animateTransform attributeName="transform" type="rotate" dur="1s" from="0,50,50" to="360,50,50" repeatCount="indefinite" />
	</path>
</svg>
```

### 1/2円弧バージョン

```html
<svg width="100px" height="100px" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
	<path d="M94,50 a44,44,0,0,0,-88,0" stroke="#369" fill="none" stroke-width="12">
        <animateTransform attributeName="transform" type="rotate" dur="1s" from="0,50,50" to="360,50,50" repeatCount="indefinite" />
	</path>
</svg>
```

### 実際の動作を見る

https://jsfiddle.net/94jnmmx7/

### カスタマイズ

- `svg` 要素
    - `width` と `height` で大きさが自由自在に指定できます。  
    - ~~視力検査のような~~ GIFのThrobberは上から `100px`, `50px`, `32px`, `16px`  
　
- `path` 要素
    - `stroke` 属性 で好きな色を指定。
    - `stroke-width` で太さを指定。太くするとはみ出るので viewBox も上手く広げてください。  
　
- `animationTransform` 要素
    - `dur` 属性で回転速度を制御

### 使用用途

私は『追加のHTML要素を書く量が少ない ＆ それっぽい読み込み中アイコンができる』ので、Throbberの仮置きや、使用用途が限定されたシステムに使ってます。

もうちょっとデザインの凝ったSVG読み込み中アイコンが欲しいなら、以下などがオススメ。

> SVG Loading icons
> http://codepen.io/aurer/pen/jEGbA
include、extend、ActiveSupport::Concernざっくりまとめ

# これはなに？

最近はお遊びコードじゃなくて、ちゃんとしたコードを読んで勉強しています。ももぞのです。

コードリーディングをしていて、ふとなんじゃこりゃと思ったコードのまとめです。

ただのメモ書きなので、めっちゃざっくりです。

# class << self

特異クラス方式のクラスメソッド定義で使う。
一気に何個でもクラスメソッドが定義できる。

```rb:
class User
  class << self
    def class_method1
    end
    def class_method2
    end
  end
end
```
# self.method

１つだけクラスメソッドを定義するときに使う。

```rb
class User
  def self.method
  end
end
```
# def hoge.method_name; end

特異メソッド。
hogeオブジェクトに対してのみ特定のメソッドを持たせるときに使う。

# include

ざっくり表現：インスタンスメソッド読み込み

ClassにModuleを読み込み。いわゆるMix-in。
モジュールにモジュールをincludeすることもできる。
includedメソッドが中で呼ばれるらしい。

ちなみにこれだけだとクラスメソッドは別途指定しないと読み込めない。

# extend

ざっくり表現：クラスメソッド読み込み

>
extendメソッドは、オブジェクトの特異クラスにモジュールを取り込み、モジュールのメソッドを特異メソッドとして使えるようにします。

クラスメソッドを定義するのと同じことか。

# extend ActiveSupport::Concern

ナウいサービスでよく見るやつ。（いうてそんなに最近でもないか...
モジュールを読み込んだときにインスタンスメソッドもクラスメソッドも両方読み込める。


# included do~end

extend ActiveSupport::Concernとセットで使われることが多い。
このブロック内にメソッドを定義しておくと、モジュールがincludeされた**あとに**にそのメソッドが動作する。

```rb
module UserDelegatable 
  extend ActiveSupport::Concern
  included do
    def notificate
      p "includeされました"
    end
  end
end
```
  







# 参考

[特異クラス・特異メソッド・メソッドの種類 Ruby - Qiita](http://qiita.com/ToruFukui/items/95117f418dec590ebbc8)

[Rubyのincludeとextendについて - QA@IT](http://qa.atmarkit.co.jp/q/2388)

[ClassMethodsについて - CubicLouve](http://spring-mt.tumblr.com/post/22319617613/classmethods%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)

[» Rails: includeされた時にクラスメソッドとインスタンスメソッドを同時に追加する頻出パターン TECHSCORE BLOG](http://www.techscore.com/blog/2013/03/01/rails-include%e3%81%95%e3%82%8c%e3%81%9f%e6%99%82%e3%81%ab%e3%82%af%e3%83%a9%e3%82%b9%e3%83%a1%e3%82%bd%e3%83%83%e3%83%89%e3%81%a8%e3%82%a4%e3%83%b3%e3%82%b9%e3%82%bf%e3%83%b3%e3%82%b9%e3%83%a1/)
バイト指定のテキストファイルのつくりかた

小ネタです。とある案件で、バイト指定のjsファイル(たとえば10MBとか)を作成したくてちょっと調べたのでそのメモ。
具体的にいうと、ベースとなるjsファイルがあって、それをサイズだけ水増しすることが目的です。
手順は以下の通りです。
1. ベースとなるjsファイルを作成 (sample.js)
2. 100MBくらいのコメントアウトされただけのテキストファイルを作成 (comment.txt)
3. head -c でバイト指定して comment.txt から抜き出し (commentXXMB.txt)[^1]

```
$ head -c 10485760 comment.txt > comment10MB.txt
```

4. cat コマンドで sample.js と comentXXMB.txt をつなげて index.js を作成

```
$ cat sample.js comment10MB.txt > index.js
```

という感じです。ホントに正確にサイズ指定する場合は、sample.jsのバイト数をheadの-cオプションで指定する値から差し引いてください。あとは、tail で正しくコメントアウトされているか確認しておけばOKでしょう。

[^1]: 10485760 Byte (=1024*1024*10)
Parse.comでPUSH通知(PhoneGap Build,iOS)メモ

# はじめに
以下の続き的メモ。
*PhoneGap Buildでionicを使う準備メモ*
http://qiita.com/xylitol45@github/items/1b296ef3fc9b3d43f877

mBaaSとして、Parse.com( https://www.parse.com/ )を利用し、PUSH通知ができるようにする。
手元にiPhoneしかないので、iOSで試す。

# 準備
このへんを見ながらPUSH通知用のAppIDやら証明書を準備。

*iOSでプッシュ通知を実装する方法の超詳細まとめ*
http://www.lancork.net/2013/08/how-to-ios-push-first/
http://www.lancork.net/2013/08/how-to-ios-push-second/

ちなみにAWS SNSの場合、`CertificateSigningRequest.certSigningRequest`の通称の日本語はNGのようなのだが、Parse.comは大丈夫だった。

*Push通知がコマンドラインからは送れるのにAWS SNSにp12ファイルが設定出来ない場合*
http://qiita.com/soramugi/items/3fdce462e4b28a5022da

# PhoneGap Build
## 署名キー
署名書キーを登録。

- 開発用証明書を書き出したp12ファイル(パスワードあり)
- Push Notificationsと紐付けられているプロビジョニングプロファイル

## PushPlugin
サードパーティプラグインのPushPluginを利用する。
*PhoneGap Build の PushPlugin*
https://build.phonegap.com/plugins/3960

`config.xml`に以下を追加する。

```xml:config.xml
    <!-- pushplugin追加 -->
    <gap:plugin name="com.phonegap.plugins.pushplugin" />
    <!-- アクセス許可サイト -->    
    <access origin="*"/>
```

# Parse.com
このへんを見ながら。
*Parse.comを使ったiOSデバイスへのプッシュ通知[導入編]*
http://www.riaxdnp.jp/?p=6650

*Settings* => *Push* => *Apple Push Certificates* で、PUSH通知証明書をp12ファイル(パスワードなし)で書き出したものを登録。


# JavaScript修正
このへんを見ながら`app.js`を修正する。
*phonegap-build/PushPlugin*
https://github.com/phonegap-build/PushPlugin/blob/a172e19/README.md

アプリ起動時にrunメソッドが実行され、Parse.comにトークンを登録する。

```js:app.js
"use strict";

//PUSH通知受信
var onMyNotificationAPN = function(event) {
    if ( event.alert ) {
    	alert("my notification " + event.alert);
    }
};

angular.module('myApp', ['ionic','ngCordova','myApp.controllers'])

.factory('shared',['$http','$cordovaDevice',function($http,$cordovaDevice){
	var _o = {
	    // トークン取得、Parse.com登録
		notifyRegisetr:function(){
	    	if ($cordovaDevice.getPlatform() == 'iOS') {
	    		_o.notifyRegisterForiOS();
	    	}
		},
		// for iOS
    	notifyRegisterForiOS: function() {
    		var pushNotification = window.plugins.pushNotification;
    		//alert('notifyRegisterForiOS');
    		pushNotification.register(
				function(token){
					console.log("token:"+token);
					// REST APIを利用し、Parse.com へトークン登録
					$http({
						'method':'POST',
						'url':'https://api.parse.com/1/installations',
						'headers':{
							"X-Parse-Application-Id":"[Application Id]",
							"X-Parse-REST-API-Key": "[REST API Key]" 
						},
						'data':{
					        "deviceType": "ios",
					        "deviceToken": token,
					        "channels": [""]
					      }
					});
				},
				function(err){
					// トークン取得失敗
					// console.log("error:"+err);
				},
				{
					"badge":"true",
				    "sound":"true",
				    "alert":"true",
				    "ecb": "onMyNotificationAPN"
 				}
    		);
    	}
	};
	return _o;
}])

.run(['shared','$cordovaStatusbar',function(shared,$cordovaStatusbar) {	
	ionic.Platform.ready(function(){
	    $cordovaStatusbar.overlaysWebView(true);

    	shared.notifyRegisterForiOS();
 	 });
}])
;
```

# Parse.comでPUSH通知
*Push* => *Send a push* で登録済み端末へPUSH通知を送る。
なお、登録端末は *Core* => *Data* => *Installation* で確認可能。
CSSのみで幅可変のヘッダ固定テーブルを実装

テーブルのヘッダを固定して中身をスクロールさせたいって事、めちゃくちゃあると思います。
当然既にいろんな対策が練られています。
方法としては、大きく分けてCSSのみで実装する方法と、JQueryでプラグインなどを用いて実装する方法があります。
（参考：<http://webnonotes.com/css/table-header/>）
しかし、CSSだけで実装する方法では、幅を固定しなければいけないというデメリットがあります。

でも…
**CSSだけで幅可変のヘッダ固定テーブル、作りたくない？**
と思ったのでやってみました。

# 解決法

結論から言うと、calc()とpaddingを利用します。
まずはテーブルを用意。

```html:HTML
<table class="table-header-fixed">
    <thead>
        <tr>
            <th>#</th><th>ヘッダ2</th><th>ヘッダ3</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>1</td><td>データ</td><td>データデータデータ</td>
        </tr>
            ~~~中略~~~
        <tr>
            <td>12</td><td>データ</td><td>データデータデータ</td>
        </tr>
    </tbody>
</table>
```
何の変哲もないテーブルです。
次にCSS。

```CSS:CSS
.table-header-fixed {
	width: 60%;
	min-width: calc(19em + 17px); /* カラム最小幅合計値+スクロールバーの幅+1px（誤差吸収用） */
	height: 300px;
	overflow-y: scroll;
    border-collapse: collapse;
}

.table-header-fixed thead,
.table-header-fixed tbody,
.table-header-fixed tr,
.table-header-fixed th,
.table-header-fixed td {
	    display: block;
}

.table-header-fixed thead {
    width: calc(100% - 16px); /* 100% - スクロールバーの幅 */
}

.table-header-fixed tbody {
	height: calc(100% - 2em); /* 100% - ヘッダの高さ */
    overflow-y: scroll;
}

.table-header-fixed tr:after { /* clearfix */
	content: "";
	clear: both;
	display: block;
}

.table-header-fixed th,
.table-header-fixed td {
    float: left;
    height: 2em;
    line-height: 2em;
    overflow: hidden;
	padding: 0 calc((100% - 19em)/6); /* (100% - カラム最小幅合計値)/(カラム数*2) */
    border-bottom: 1px solid #CCC;
	box-sizing: content-box;
}

.table-header-fixed th:first-child,
.table-header-fixed td:first-child{
    width: 3em;    /* カラム1の最小幅 */
    text-align: right;
}
.table-header-fixed th:nth-child(2),
.table-header-fixed td:nth-child(2){
    width: 6em;    /* カラム2の最小幅 */
}
.table-header-fixed th:nth-child(3),
.table-header-fixed td:nth-child(3){
    width: 10em;    /* カラム3の最小幅 */
}
```

[JSFiddleによるサンプル](https://jsfiddle.net/7omcj6wy/1/)

各カラムのwidthには最小値(min-width)を入れます。
可変分はpaddingで調整するという具合です。
widthに直接足しても良かったのですが、カラム数が増えると全てのカラムに対して書くのが面倒だと思ったのでpaddingで処理しました。
Sassなどを使っているなら関数で処理してやると良いかもしれません。
table自体がカラムのwidthの合計値以下になるとレイアウトが崩れるので、min-widthで指定してやります。
ブラウザによってcalc()で誤差が出る場合があるので、1px分余分に確保しておきます。

# 問題点
- calc()対応のブラウザが前提（[対応ブラウザ表](http://caniuse.com/#feat=calc)）
- 結局各カラムにwidthを指定する必要はある
- 計算が手間

もっと手軽にスマートにできたらいいんですけどねえ。
Xcode7,iOS9でHTTP-POSTリクエストする

iOS9でHTTP-POSTリクエストするサンプルが見当たらなかったのでまとめます．

## 環境
- Xcode 7.0.1
- iOS 9.0(13A340)

## やりたかったこと
とりあえず試しにBODYとかには何も入れずに，POSTリクエストするだけして，帰ってきたものを表示するだけ．

```Swift:ViewController.swift
import UIKit
class ViewController: UIViewController {
    @IBOutlet weak var text: UITextView!

    @IBAction func POST(sender: UIButton) {
        var str:String = ""
        
        // URLの設定
        let url = NSURL(string: "https://sample.com")
        
        // セッションの生成
        let conf = NSURLSessionConfiguration.defaultSessionConfiguration()
        let session = NSURLSession(configuration: conf)
        
        // リクエストの生成
        let req = NSMutableURLRequest(URL: url!)
        req.HTTPMethod = "POST"
        
        // タスクの生成
        let task = session.dataTaskWithRequest(req, completionHandler: {
            (data, resp, err) in
            if(err == nil){
                str = String(data: data!, encoding: NSUTF8StringEncoding)!
            } else {
                str = String(err)
            }
            
            dispatch_async(dispatch_get_main_queue(), {
                // メインスレッドで処理する内容
                self.text.text = str
            })
        })
        // タスク実行
        task.resume()
    }
    

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.conf    
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

}
```


セッション作って，リクエスト作って，URL入れてってところはiOS8とかと同じようなのですが，
どうやらセッションの使い方，というかタスクの作り方がiOS9だと違うようです．

```
        // タスクの生成
        let task = session.dataTaskWithRequest(req, completionHandler: {
            (data, resp, err) in
            if(err == nil){
                str = String(data: data!, encoding: NSUTF8StringEncoding)!
            } else {
                str = String(err)
            }
            
            dispatch_async(dispatch_get_main_queue(), {
                // メインスレッドで処理する内容
                self.text.text = str
            })
        })
        // タスク実行
        task.resume()
```

あと，POST先のサーバーはHTTPSでないとATSに止められてしまうので，根本的に「HTTPSしか使わない」．それができない場合はplistで設定する必要があります．
How to install Crystal on OSX El Capitan


Due to the rootless feature, [original pkg](https://github.com/manastech/crystal/releases) installation would be incomplete.

Of course, homebrew users should use `brew`, but **this is not an option for MacPorts (or Fink) users.**

## Using darwin-x86_64.tar.gz
- Extract tar.gz into /opt/crystal
- Link /opt/crystal/bin/crystal and /opt/crystal/embedded/bin/shards to /usr/local/bin.

## Using pkg
- You need to modify the pkg to symlink safely.

1. Prepare [updatepkgscripts.rb](https://github.com/cielavenir/updatecontrol).
2. Paste following to crystal-update.rb.
3. Call `crystal-update.rb updatepkgscripts.rb crystal.pkg`.
4. Now you can install the pkg safely.

```crystal-update.rb
#!/usr/bin/ruby
#usage: crystal-update.rb updatepkgscripts.rb crystal.pkg

require 'tmpdir'
Dir.mktmpdir{|tmp|
	system('"'+ARGV[0]+'" -x "'+ARGV[1]+'" crystal-core.pkg/Scripts "'+tmp+'"')
	File.open(tmp+'/postinstall','wb'){|f|
		f.write DATA.read
	}
	system('"'+ARGV[0]+'" -u "'+ARGV[1]+'" crystal-core.pkg/Scripts "'+tmp+'"')
}

__END__
#!/bin/bash
#
# Perform necessary crystal setup steps
# after package is installed.
#

PROGNAME=$(basename $0)

function error_exit
{
  echo "${PROGNAME}: ${1:-"Unknown Error"}" 1>&2
  exit 1
}

INSTALL_PATH=/usr
if [ `uname` = "Darwin" -a `uname -r|cut -f1 -d.` -ge 15 ]; then
  INSTALL_PATH=/usr/local
fi

ln -nfs /opt/crystal/bin/crystal ${INSTALL_PATH}/bin/crystal
ln -nfs /opt/crystal/embedded/bin/shards ${INSTALL_PATH}/bin/shards

exit 0
```

## Appendix
- origin: https://github.com/manastech/omnibus-crystal/pull/7
Modifying package control


Basically, software packages should be used as-is, but you might need to modify control scripts to force dependency or change install-hook.
For that purpose, I have created scripts named `updatecontrol` for dpkg control.tar.gz and `updatepkgscripts` for OSX pkg inside.pkg/Scripts.

It looks like that OSX doesn't have a feature like dpkg-deb -b (to extract control.tar.gz), so `updatepkgscripts` has the capability to extract any Scripts or Payload.

https://github.com/cielavenir/updatecontrol

Note: practical example is here: http://qiita.com/cielavenir/items/c11a1e6a81c8316d05a6
inputタグのtypeにtextとかhiddenを複数指定したらどっちが優先されるの？

## はじめに

`input`タグの`type`属性に複数の値を指定したらどうなるか気になったので検証してみた。

## ソースコード

```html:index.html
<!DOCTYPE html>
<html lang="ja">
    <head>
        <meta charset="UTF-8">
    </head>

    <body>
        <form method="post" action='sample.php'>
            <input  type='text'     name='sample1' value="text"><br>
            <input  type='hidden'   name='sample2' value="hidden"><br>
            <input  type='password' name='sample3' value="password"><br>
            <input  type='url'      name='sample4' value="http://url.url"><br>

            <!-- ここからミックス -->
            <input  type='text hidden'   name='sample5'  value="text hidden"><br>
            <input  type='hidden text'   name='sample6'  value="hidden text"><br>
            <input  type='text password' name='sample7'  value="text passowrd"><br>
            <input  type='password text' name='sample8'  value="password text"><br>
            <input  type='text url'      name='sample9'  value="text url"><br>
            <input  type='url text'      name='sample10' value="url text"><br>
            <input  type='hidden hidden' name='sample11' value="hidden hidden"><br>
            <input  type='text hidden passowrd url' name='sample12' value="text hidden password url"><br>

            <button type='submit'>送信</button><br>
        </form>
    </body>
</html>
```

```php:sample.php
<?php
echo('<pre>');
var_dump($_POST);
echo('</pre>');
```

## 結果

### 画面
![スクリーンショット 2015-10-22 0.51.22.png](https://qiita-image-store.s3.amazonaws.com/0/67471/1ee013fe-992c-007e-379d-5be1f0cdd33e.png)

### ポスト値
![スクリーンショット 2015-10-22 0.51.36.png](https://qiita-image-store.s3.amazonaws.com/0/67471/50a57247-0e1c-1490-f513-4ab6eff7891f.png)

## 考察

* `text hidden`が画面に表示されているので`hidden`は効いていない
* 先頭に指定されているものが反映されるのか？と思い`hidden text`にするも`hidden`は効かず
* `password`の方も同様で`password`属性が効いていない（入力欄のものが●●●のような伏せ字になっていない）
* 上記の状態で送信が行えるので`url`属性も効いていない

## 結論

### `type`に複数の属性は指定できない

考えて見れば当たり前のことで`type='hidden'`は用意されているが`type='hidden url'`は用意されていないので、無効な属性と判断されデフォルト値になる。
`input`の`type`のデフォルト値は`text`なので組み合わせて指定したものは全て`text`としての挙動を示してることが分かる。
納得納得:smile:

## 参考

type属性一覧はこちらを参照した。
> http://honttoni.blog74.fc2.com/blog-entry-138.html
node.jsことはじめ

超入門のメモ書き
nodeの環境を整えるまで

# nvmインストール

```bash
$ git clone https://github.com/creationix/nvm.git ~/.nvm
$ source ~/.nvm/nvm.sh
```

nvmをターミナル起動時に使えるようにする
.bash_profileに以下を追加する

```shell-session:.bash_profile
if [[ -s ~/.nvm/nvm.sh ]];
 then source ~/.nvm/nvm.sh
fi
```

# nodeインストール
nvmでnodeのバージョン一覧を見る

```bash:
$ nvm ls-remote
```

インストール

```bash:
$ nvm install 0.12.7
```

デフォルトのバージョンを指定

```bash:
$ nvm alias default v0.12.7
```

# mongoDBインストール
まずはHomeBrewをインストール
http://brew.sh/index_ja.html

```
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
```

```bash:
$ brew update
$ brew install mongodb

// 結果
> ==> Caveats
> To have launchd start mongodb at login:
>   ln -sfv /usr/local/opt/mongodb/*.plist ~/Library/LaunchAgents
> Then to load mongodb now:
>   launchctl load > ~/Library/LaunchAgents/homebrew.mxcl.mongodb.plist
> Or, if you don't want/need launchctl, you can just run:
>   mongod --config /usr/local/etc/mongod.conf
> ==> Summary

```

言われるままに以下を実行

```bash:
$ ln -sfv /usr/local/opt/mongodb/*.plist ~/Library/LaunchAgents
$ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mongodb.plist
```

mongoとうってエラーが出なければ成功

# Socket.ioインストール
使用したいディレクトリ上にて以下を実行すれば、node_modules/socket.ioができる

```bash:
$ npm install socket.io
```

参考サイト
http://liginc.co.jp/web/programming/node-js/85318
Rails上でOmniAuthを使う時のredirect_uriの設定

サーバの構成を変えてからなぜかOmniAuth認証ができなくなったので調べてみたら、

https://github.com/intridea/omniauth/blob/c3e3aa5bbfb589db1ebed40324c7eea2e3153f8c/lib/omniauth/strategy.rb

```rb
def full_host
  case OmniAuth.config.full_host
  when String
    OmniAuth.config.full_host
  when Proc
    OmniAuth.config.full_host.call(env)
  else
    # in Rack 1.3.x, request.url explodes if scheme is nil
    if request.scheme && request.url.match(URI::ABS_URI)
      uri = URI.parse(request.url.gsub(/\?.*$/, ''))
      uri.path = ''
      # sometimes the url is actually showing http inside rails because the
      # other layers (like nginx) have handled the ssl termination.
      uri.scheme = 'https' if ssl? # rubocop:disable BlockNesting
      uri.to_s
    else ''
    end
  end
end

def callback_url
  full_host + script_name + callback_path + query_string
end
```

ここのfull_hostが'http://backend' になってしまっているせいで、http://backend/auth/facebook/callback みたいなurlにリダイレクトされてしまうのが原因だった。

Railsのレイヤーで設定してしまった方がいいだろうということで、
config/environments/production.rb

```rb
Rails.application.config.middleware.use OmniAuth::Builder do
  configure do |config|
    config.full_host = "https://サイトのurl"
  end

  #ここにOmniAuthの設定
end
```

としたらなおった。
docker-machineでローカルのdocker環境を作成する


# はじめに

[公式サイト](https://docs.docker.com/machine/get-started/)にはdocker-machine + local VMで環境を作成する方法が書いてあるが，ローカルがLinuxの場合は必ずしもVMを使う必要がないので直接ローカル環境を作成した。

# 手順
## 1. docker-machineのインストール
[公式の手順](https://docs.docker.com/machine/install-machine/#on-linux)を参考にdocker-machineをローカルにインストールする。（2015年10月現在）

```shell
$ curl -L https://github.com/docker/machine/releases/download/v0.4.0/docker-machine_linux-amd64 > /usr/local/bin/docker-machine
$ chmod +x /usr/local/bin/docker-machine
$ docker-machine -v
machine version 0.4.0
```

ちなみにリンク先の手順では，最初に **docker 1.7.1以上をインストールする** となっているが，docker-machineがdocker環境を整備するのでdockerはインストールしておく必要はない。
ちなみにインストールされるのはdocker公式のバイナリ。

## 2. ssh鍵を登録する

前述したとおりdocker-machineがdocker環境整備をおこなうためroot権限が必要となる。かつ対象のホストにssh接続をおこなうため公開鍵を```/root/.ssh/authorized_keys```などに追記しておく。

## 3. docker-machineで環境構築をおこなう

準備がととのったら docker-machine で環境構築をおこなう

```shell
$ docker-machine create -d generic --generic-ip-address 127.0.0.1 local
Importing SSH key...
To see how to connect Docker to this machine, run: docker-machine env local
```

これで設定完了です。状態の確認は ```docker-machine ls```。

```shell
$ docker-machine ls
NAME    ACTIVE   DRIVER    STATE     URL                    SWARM
local   *        generic   Running   tcp://127.0.0.1:2376 
```

## 4. dockerをつかう

ローカルのdockerを操作するために環境情報を確認は ```docker-machine env local```。

```shell
$ docker-machine env local
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://127.0.0.1:2376"
export DOCKER_CERT_PATH="/home/vagrant/.docker/machine/machines/local"
export DOCKER_MACHINE_NAME="local"
# Run this command to configure your shell: 
# eval "$(docker-machine env local)"
```

これで，dockerを使えるようになる。またsudoをつける必要もない。

# まとめ

docker-machineを利用してdockerのローカル環境を構築した。
dockerを操作する際にいちいちsudoをなくて良いため，単純にdockerをインストールするよりも便利だと思う。

# 参考
http://pocketstudio.jp/log3/2015/07/01/docker-machine-0-3-generic-driver-and-scp/
Pythonで簡単なアニメーションを描いてみる

# デモ
![output.gif](https://qiita-image-store.s3.amazonaws.com/0/40987/8d2c546f-17d2-c84c-7254-e33e9d90350f.gif)

# 方法
ここではPythonのグラフ描画ライブラリ[matplotlib](http://matplotlib.org/)の`animation.ArtistAnimation`関数を使います。流れとしては描画データの配列（`ims`）を用意し、その配列を`animation.ArtistAnimation`関数の第2引数に渡すことでアニメーションを描画しています。

```py:demo.py
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation

fig = plt.figure()
x = np.arange(0, 10, 0.1)

ims = []
for a in range(50):
    y = np.sin(x - a)
    im = plt.plot(x, y, "r")
    ims.append(im)
    
ani = animation.ArtistAnimation(fig, ims)
plt.show()
```
↓を加えるとアニメーションをgif形式で保存できます。

```py
ani.save("hoge.gif")
```

# 参考
pythonで散布図アニメーションを試してみた
http://cflat-inc.hatenablog.com/entry/2014/03/17/214719