OmniAICreator/Qiita-1.07M huggingface dataset:
django1.7のチュートリアルやる時につまずくこと

django1.7チュートリアルをやるのにつまったポイントまとめ
https://docs.djangoproject.com/en/1.7/intro/tutorial01/

* まず1.7は日本語翻訳されていないので元を読むしかない
* 翻訳されている1.4とはマイグレーションのやり方などが変わっているので注意

### django1.4と1.7のモデル設定の違い[未解決]

マイグレーションまでのコマンドが違うので注意。
以下は1.7でのやり方。

mysite/setting.py

```
INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'polls',
)
```

djangoへのpollsアプリケーションの追加


以下のコマンドを実行

・マイグレーションファイルの作成

```
$ python manage.py makemigrations polls
```

正常に実行されると以下のようになる

```
Migrations for 'polls':
  0001_initial.py:
    - Create model Question
    - Create model Choice
    - Add field question to choice
```

0001_initial.pyというファイルが作成され、
その中にはQuestionとChoiceのモデルが定義されている
これがマイグレーションファイル。


・マイグレーションのためのSQLの作成

```
$ python manage.py sqlmigrate polls 0001
```

これが正常に実行されると以下のように表示される

```
BEGIN;
CREATE TABLE polls_question (
    "id" serial NOT NULL PRIMARY KEY,
    "question_text" varchar(200) NOT NULL,
    "pub_date" timestamp with time zone NOT NULL
);

CREATE TABLE polls_choice (
    "id" serial NOT NULL PRIMARY KEY,
    "question_id" integer NOT NULL,
    "choice_text" varchar(200) NOT NULL,
    "votes" integer NOT NULL
);

CREATE INDEX polls_choice_7aa0f6ee ON "polls_choice" ("question_id");

ALTER TABLE "polls_choice"
  ADD CONSTRAINT polls_choice_question_id_246c99a640fbbd72_fk_polls_question_id
    FOREIGN KEY ("question_id")
    REFERENCES "polls_question" ("id")
    DEFERRABLE INITIALLY DEFERRED;
COMMIT;
```

・マイグレーションの実行
```
$ python manage.py migrate
```



### unicode設定をmodel.pyに書いても効かない[解決済]

polls/model.py

```
from django.db import models

class Question(models.Model):
    # ...
    def __str__(self):              # __unicode__ on Python 2
        return self.question_text

class Choice(models.Model):
    # ...
    def __str__(self):              # __unicode__ on Python 2
        return self.choice_text
```

こうすればインタラクティブシェルでで下記のようになるはずなのに

```
>>> Question.objects.all()
[<Question: What's up?>]
```

以下のようになってしまう

```
>>> Question.objects.all()
[<Question: Question object>]
```

補足：インタラクティブシェルで実行されたデータはそのままdbへ保存されている

**[解決方法]
model.pyを更新した後、一度インタラクティブシェルから抜けて、再度インタラクティブシェルを起動させると反映される。**


### >>> p.was_published_recently()はなにをしている？[未解決]
Rails で各処理のベンチマークを取る


Rails だと直接 Benchmark クラスを使わなくても以下のようなヘルパが用意されている。
確認した Rails のバージョンは 4.1.6。

### Controller

Controller 内で使いたい場合は以下のように書く。

```ruby
def index
   benchmark("posts#index") do
     @posts = Post.all
   end
end
```

これで該当の action を実行すると以下のようにログに引数に渡した文字列と共に処理時間が表示される。

```
posts#index (2.6ms)
```

ログレベルを変更したい場合は以下のようにする。

```
benchmark("posts#index", level: :debug) do
  @posts = Post.all
end
```

### Model

Model の場合はクラスメソッドになっている。

```
Post.benchmark("commented_post") do
  Post.joins(:comments).eager_load(:comments).all
end
```

以下のようにも書ける。

```
ActiveRecord::Base.benchmark("commented_post") do
  Post.joins(:comments).eager_load(:comments).all
end
```

### View

View の場合は他の Helper メソッド等と同じで benchmark だけでいい。

```
<% benchmark("rendering posts") do %>
  <% @posts.each do |post| %>
    <tr>
      <td><%= link_to 'Show', post %></td>
      <td><%= link_to 'Edit', edit_post_path(post) %></td>
      <td><%= link_to 'Destroy', post, method: :delete, data: { confirm: 'Are you sure?' } %></td>
    </tr>
  <% end %>
<% end %>
```

### 参考

benchmark (ActiveSupport::Benchmarkable) - APIdock
http://apidock.com/rails/ActiveSupport/Benchmarkable/benchmark

3 系用の RailsGuides だと以下の辺りに書いてあるけど 4 以降には書いて無いみたい。

3 Helper Methods
http://guides.rubyonrails.org/v3.2.19/performance_testing.html#helper-methods
【iOS, CocoaPods】CocoaPodsの導入方法


## 前提
* Macでの導入を前提としています
* Rubyのバージョンを切り替えたりすることを意識せず、デフォルトRubyを使っている前提で記述しています

## CocoaPodsのインストール
TerminalAppを開き、下記のコマンドを入力します。
(デフォルトのRubyを使っているか、自身で導入したRubyを使っているで下記コマンドはsudoが要るかどうか変わるかもしれません。デフォルトRubyを使っている場合はsudoが必要かも）
※ Terminal用のアプリケーションとしてはiTerm2を導入しておくことを推奨
http://iterm2.com/


	$ gem install cocoapods

これだけでCocoaPodsのインストールは完了します。


## CocoaPodsのセットアップ

初めてCocoaPodsを利用する場合にはセットアップコマンドを打つ必要があります。

	$ pod setup	# CocoaPodsの初期セットアップ

## ライブラリ導入の仕方
Podfileというファイルを作成し、該当ファイルに導入したいライブラリの情報を記述します。
※ この作業はFinderからファイルを作成して、Sublime Textなどの普通のエディタでファイルを作成しても大丈夫です。

	$ cd ${project}	// プロジェクトのディレクトリに移動(左をコピペするのではなく、現在作成中のプロジェクトのPATHを各自記述して下さい)
	$ touch Podfile	// Podfileを作成します
	$ vim Podfile	// Podfileを編集します

	+ platform :ios, '8.0'

	+ pod 'AFNetworking', '~> 2.0'	// ,以降はバージョンの指定
	+ pod 'ARAnalytics', '~> 2.7'
	+ pod 'MFSideMenu'
	
## Podfileに記述したライブラリをインストールします。

	$ cd ${project}	// プロジェクトのディレクトリに移動(左をコピペするのではなく、現在作成中のプロジェクトのPATHを各自記述して下さい)
	$ pod install		// 作成したPodfileの情報を自動的に読み取ってライブラリをインストールしてくれます

## XCodeでプロジェクトを開いてインストールを確認

XCodeを開き、.xcodeprojではなく、.xcworkspaceからプロジェクトを開く。
![CocoaPods0.png](https://qiita-image-store.s3.amazonaws.com/0/18615/8fb84a6b-d90c-8dc4-d1b7-39b9710df7dc.png "CocoaPods0.png")



すると左にPodsというディレクトリが表示されているはずで、そうなっていればライブラリが利用できる状態になっているはず。

![CocoaPods.png](https://qiita-image-store.s3.amazonaws.com/0/18615/cb4ba504-fecf-9d03-239a-75fd67e194e6.png "CocoaPods.png")
WARNING: Your kernel does not support cgroup swap limit.の対処

## 参考

* [Ubuntu - Docker Documentation](https://docs.docker.com/installation/ubuntulinux/)

## dockerのログ確認すると以下ログあり

```bash:
journalctl -u docker -r
```

> WARNING: Your kernel does not support cgroup swap limit.

## 設定

```diff:/etc/default/grub
- GRUB_CMDLINE_LINUX=""
+ GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
```

```bash:設定反映
grub-mkconfig -o /boot/grub/grub.cfg
reboot
```
docker1.1.2から1.3に更新したらdockerが動かなくなったが慌てず対応した

# 更新

```bash:
pacman -Sy docker
```

# 起動

```bash:
systemctl restart docker
systemctl status -l docker
```

dockerが起動できない！！！

```bash:
$ sudo /usr/bin/docker -d
2014/10/18 19:30:52 docker daemon: 1.3.0 c78088f; execdriver: native; graphdriver:
[050b432b] +job serveapi(unix:///var/run/docker.sock)
[info] Listening for HTTP on unix (/var/run/docker.sock)
/usr/bin/docker: relocation error: /usr/bin/docker: symbol dm_task_get_info_with_deferred_remove, version Base not defined in file libdevmapper.so.1.02 with link time reference
```

```bash:システム全体を更新
pacman -Syu
```

kernelが3.15から3.17になった。

これでOS再起動すると動作するようになった。

## その他

libvirtがコンフィグをリニューアルしたため、差分を確認しマージしとく。

```bash:
diff /etc/libvirt/{qemu.conf,.pacnew}
```
iOSアプリのアイコン作成手順


iOSアプリアイコンを1024x1024pxで作成すれば、Spotlight用や設定用アイコン、iTunesConnect向けのアイコンが自動で生成されるシェルスクリプト。

## シェルスクリプトの作成
```iosappicon-gen.sh
mkdir appiconset

convert $1 -resize 58x58 appiconset/iphone_ios_5_6_spotlight_and_settings_ios5_8@2x.png
convert $1 -resize 87x87 appiconset/iphone_ios_5_6_spotlight_and_settings_ios5_8@3x.png

convert $1 -resize 80x80 appiconset/iphone_ios_7_8_spotlight@2x.png
convert $1 -resize 120x120 appiconset/iphone_ios_7_8_spotlight@3x.png

convert $1 -resize 120x120 appiconset/appicon@2x.png
convert $1 -resize 180x180 appiconset/appicon@3x.png

convert $1 -resize 29x29 appiconset/ipad_ios_5_8_settings@1x.png
convert $1 -resize 58x58 appiconset/ipad_ios_5_8_settings@2x.png

convert $1 -resize 40x40 appiconset/ipad_ios_7_8_spotlight@1x.png
convert $1 -resize 80x80 appiconset/ipad_ios_7_8_spotlight@2x.png

convert $1 -resize 76x76 appiconset/ipad_app_icon@1x.png
convert $1 -resize 152x152 appiconset/ipad_app_icon@2x.png
```

## 画像のリサイズ
1024x1024のアプリアイコンを作成し、下記のシェルスクリプトで画像のリサイズを行う。
（シェルスクリプトの実行権限を変更する必要有り）

```
$ chmod u+x iosappicon-gen.sh
$ ./iosappicon-gen.sh hoge.png
```

## 補足: 必要な画像サイズ一覧

**iPhone（Ratina、@2x）：iOS8・iOS7**

|種類|サイズ|角丸|必要度|画像名|
|--:|:--:|:--:|:--:|:--|
|ホーム画面アイコン|120*120|26px|必須|appicon@2x|
|Spotlight|80*80|18px||spotlight@2x|
|設定用|58*58|10px||settings_appicon@2x|
|ストアアイコン|1024*1024|180px|必須|iTunesArtwork@2x|

**iPhone6 Plus（Ratina HD、@3x）：iOS8**

|種類|サイズ|角丸|必要度|画像名|
|--:|:--:|:--:|:--:|:--|
|ホーム画面アイコン|180*180|39px|必須|appicon@3x|
|Spotlight|120*120|26px||spotlight@3x|
|設定用|87*87|19px||settings_appicon@3x|

## アプリの作成に参考になるサイト
- [iOS icon gallery](http://iosicongallery.com)

## 更新履歴
- 2015/02/25 iPad向けのアイコンも一括で出力するようにシェルスクリプトを編集
AngularJSで$templateCacheを使ってまとめたテンプレートJSの中のCSSファイルや画像ファイルのリンクにhashをつける



grunt-filerevを使って、CSSファイルや画像ファイルにhashがbuild時につくようにしている場合に、grunt-angular-templatesを使う場合はどうするか

generator-angularで作ったAngularJSプロジェクトのbuildタスクでは[grunt-usemin](https://github.com/yeoman/grunt-usemin)の処理中、[grunt-filerev](https://github.com/yeoman/grunt-filerev)の処理が入って、CSSファイルや画像ファイル、JSファイルにhashがつく。
要するにRailsのAssett Pipelineで処理したときによくみるあれと同様。

こんなやつ

```index.html

<link rel="stylesheet" href="styles/main.b1c3621e.css">
<script src="scripts/scripts.a241652b.js">

```

grunt-angular-templatesを入れて何も考えずに素直にタスクに組み入れると、テンプレートキャッシュの中に画像などへの参照があった場合に、当然、このhashを付与する流れに入っていないので、hashが付与されないリンクのままでbuildされ、リンク切れという事になってしまう。

↓useminでのgrunt-filerevを考慮せずタスクに追加

```Gruntfile.coffee
 #...省略...
 # 追加
 grunt.loadNpmTasks("grunt-angular-templates")

 #...省略...
   # 追加
    ngtemplates:
      gambaApp:
        cwd: "<%= yeoman.app %>"
        src: "templates/*.html"
        dest: ".tmp/scripts/templates.js"
        options:
          collapseWhitespace: true
          conservativeCollapse: true
          collapseBooleanAttributes: true
          removeCommentsFromCDATA: true
          removeOptionalTags: true
          usemin: "scripts/scripts.js"

 #...省略...

  grunt.registerTask "build", [
    "clean:dist"
    "wiredep"
    "useminPrepare"
    "ngtemplates"     #<- 追加
    "concurrent:dist"
    "autoprefixer"
    "concat"
    "ngAnnotate"
    "copy:dist"
    "cdnify"
    "cssmin"
    "uglify"
    "filerev"
    "usemin"
    "htmlmin"
  ]
```

```index.html
   <!-- build:js({.tmp,app}) scripts/scripts.js -->
   <script src="scripts/app.js"></script>
  <script src="scripts/templates.js"></script>
  <!- 追加↑ -->
```


ので、useminタスクに以下のように追加した。

```Gruntfile.coffee
  # Performs rewrites based on filerev and the useminPrepare configuration
    usemin:
      js: ["<%= yeoman.dist %>/scripts/scripts*.js"] #<- 追加
      html: ["<%= yeoman.dist %>/{,*/}*.html"]
      css: ["<%= yeoman.dist %>/styles/{,*/}*.css"]
      options:
        assetsDirs: [
          "<%= yeoman.dist %>"
          "<%= yeoman.dist %>/images"
        ]
       # patternsを追加して、画像のリンクにhashがつくようにする
        patterns:
          js: [
            [/(hogefuga\.jpg)/g, "Replacing reference to hogefuga.jpg"]
          ]
```




自分で一からGruntfileでタスクを準備していった場合は、こういった部分も考慮にいれて使うパッケージを検討、タスクの順番や構成を組むだろうが、あとから追加していこうとすると、最初から色々用意したあったタスクやnpmのパッケージとの兼ね合いで若干面倒。  
色々なnpmを使って、タスクをカスタマイズしまくるような場合はgenerator-angularなどを使用せず、面倒でも一からタスクを吟味して組んでいった方が幸せになれるかもしれない。
sphinx-autobuildで再ビルド、ブラウザの再リロードの手間を省いてSphinx文書をサクサク作成

# 概要

本稿では、Sphinxドキュメントを保存するたびに自動的にビルド、ブラウザをリロードしてくれるツール[sphinx-autobuild](https://pypi.python.org/pypi/sphinx-autobuild)を紹介し、インストール方法や使い方を簡単に説明します。sphinx-autobuildを使うことで、再ビルド、ブラウザの再リロードの手間を省いて、より楽にSphinx文書を作成できます。

# はじめに

最近Sphinxを使い始めました。手軽に文章を体系的にまとめることができ、またバージョン管理もしやすく便利に使っています。

しかし、HTML形式などでできあがったドキュメントを見るには、ビルドコマンドを実行しなければならないのが不便です。ブラウザで閲覧している場合、ページの更新も必要です。

そこで、[sphinx-autobuild](https://pypi.python.org/pypi/sphinx-autobuild)を導入しました。sphinx-autobuildには下記の機能があり、前述の手間が省けます。

* 自動ビルド機能：ソースディレクトリ内のファイルに変更があると、自動的にビルドを実行する
* 自動リロード機能：ブラウザで閲覧中のページに変更があると、ブラウザを自動的に更新する

reStructuredTextファイルを保存するだけですぐに結果を確認できるため、文書作成がさらに楽になりました。

# インストール方法

下記のコマンドでインストールします。Python 2, 3の両方に対応しています。

```shell-session
pip install sphinx-autobuild
```

2014/12/30時点の最新バージョンである0.4.0は、OS Xを含むUnix系の環境で動作します。Windowsでは、Python 2系との組み合わせでのみ正しく動作します（Python 3系では、sphinx-autobuildが利用しているlivereload 2.3.2の問題のため、自動リロード機能が正しく働きません）。

# 使い方

下記のコマンドを実行すると、ソースディレクトリ内のファイルの監視が始まります。ファイルが変更されるたびに、自動的にビルドが始まります。

```shell-session
sphinx-autobuild <ソースディレクトリ> <ビルド成果物出力ディレクトリ>
```

例えば、docsがソースディレクトリ、docs/_build/htmlがビルド成果物出力ディレクトリの場合は、下記のようになります。

```shell-session
sphinx-autobuild docs docs/_build/html
```

上記のコマンドを実行したあとで、http://127.0.0.1:8000 にアクセスすると、ビルドされたHTML文書にアクセスできます。HTML文書が変更されると、ブラウザが自動的に更新されます。なお、ホスト名やポート番号は、sphinx-autobuildのコマンドラインオプションで変更できます。

sphinx-autobuildを終了するには、Ctrl+Cを入力します。

上記コマンドを実行するシェルスクリプトやバッチファイルを作成しておくと楽です。[sphinx-autobuildのドキュメント](https://pypi.python.org/pypi/sphinx-autobuild)にあるとおり、Sphinxが生成したMakefileに下記のターゲットを追加するのもよいと思います。

```mf
livehtml:
    sphinx-autobuild -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
````
iOS 8 メモ

##Splash screen
image fileだけでなくUI document (storyboard/xib)を使用してautolayout-ableなUIを作成できる。ただしoutletに接続できないので
dynamicなUIを作ることはできない。
Image fileのサイズは
Retina HD 5.5 iPhone portrait iOS 8 - iphone 6+ : H2208 x W1242
Retina HD 4.7 iPhone portrait iOS 8 - iphone 6 : H1334 x W750
Retina HD 5.5 iPhone landscape iOS 8 - iPhone 6+ : H1242 x W2208
2x iPhone portrait iOS 7/8 - iphone 4 : H960 x W640
Retina 4 iPhone portrait iOS 7/8 - iphone 5 : H1136 x W640
1x iPhone portrait iOS 5/6 - iphone 3 : H480 x W320
2x iPhone portrait iOS 5/6 - iphone 4 : H960 x W640
Retina 4 iPhone portrait iOS 5/6 - iphone 5 : H1136 x W640

1x iPad portrait iOS 7/8 - ipad 1/2/Mini : H1024 x W768
2x iPad portrait iOS 7/8 - ipad 3/4/Air/Mini2 : H2048 x W1536
1x iPad landscape iOS 7/8 - ipad 1/2/Mini : H768 x W1024
2x iPad landscape iOS 7/8 - ipad 3/4/Air/Mini2 : H1536 x W2048
1x iPad portrait iOS 5/6 - ipad 1/2/Mini : H1024 x W768
2x iPad portrait iOS 5/6 - ipad 3/4/Air/Mini2 : H2048 x W1536
1x iPad landscape iOS 5/6 - ipad 1/2/Mini : H768 x W1024
2x iPad landscape iOS 4/6 - ipad 3/4/Air/Mini2 : H1536 x W2048
1x iPad portrait without status bar iOS 5/6 - ipad 1/2/Mini : H1004 x W768
2x iPad portrait without status bar iOS 5/6 - ipad 3/4/Air/Mini2 : H2008 x W1536
1x iPad landscape without status bar iOS 5/6 - ipad 1/2/Mini : H748 x W1024
2x iPad landscape without status bar iOS 4/6 - ipad 3/4/Air/Mini2 : H1496 x W2048
iOS8yahoo勉強会メモ

2014/10/18の勉強会のメモ


# InterfaceBuilderとコード組み合わせる
キー：IBInspectable


# XCTest
非同期、パフォーマンステストコードをかけるようになった。


# iOS8対応
- 端末回転時に、width,heightのさすものがかわった
- iOS8からの回転時に呼ばれるメソッドが違う
- UITableViewCellの左線が切れるのは、layoutMarginsの値を変更する。UIEdgeInsetsZero
- デバイストークンの処理変更
- iPadで、カメラ使うには、非同期でカメラ画面表示メソッドを呼ぶようにする
- UITabBarが表示されないかも。今までのメソッドは非推奨に。公式をみる

# iOS8 (Widget対応)
- Extentionだけでは申請できない。プロジェクトのターゲットを追加する形式
- widgetでスクロールは禁止
- widgetの高さは高すぎないようにする

- アプリ間のデータ共有可能(NSUserDefaultsとか)

# DocumentProvider
- 他のアプリからデータをひっぱることができる。
- 逆にデータを渡すこともできる
- FileProvider Extension
- open moveはコンフリクトに注意。ファイルの同時アクセスとかに注意

# Home Kit
- http://august.com/
- https://www.netatmo.com/ja-JP/product/weather- station#view2
- HMHomeは家が、１０個まで登録できる
- HMHome->HMZone->HMRoom->


# Swift で虚数
- Integerリレータブルなんちゃらで、初期化を少し簡易かできるらしい

# Swift Optional型
- nilを入れるなら、Optional<String>やImplicitylyなんちゃら
- String?は、Optional<String>の省略形
- アンラップする。!をつける
- Optional Buindingは、nilでなければアンラップ

# Scene Kit
- シェーダーとか3Dとかできる


# Swift-JSON
- SwiftでJSONを楽に。

# フラットデザイン
- 初期のiPhoneは、現実をコンピュータに
AngularJSで$templateCacheを使っている場合のテスト環境


ちなみにgenerator-angularで作成したプロジェクト。

developmentやbuildでは[grunt-angular-templates](https://github.com/ericclemmons/grunt-angular-templates)を使っているが、テストには、[karma-ng-html2js-preprocessor](https://github.com/karma-runner/karma-ng-html2js-preprocessor)を使った。


インストール

```bash
npm install karma-ng-html2js-preprocessor --save-dev
```

karma.confに設定を追加

```karma.conf.coffee

    files: [
      # ...省略...
      "app/templates/*.html"  #<- テンプレートファイルを追加
      "test/mock/**/*.coffee"
      "test/spec/**/*.coffee"
    ]

    plugins: [
      "karma-phantomjs-launcher"
      "karma-jasmine"
      "karma-coffee-preprocessor"
      "karma-spec-reporter"
      "karma-coverage"
      "karma-ng-html2js-preprocessor"  #<- 追加
    ]

    preprocessors:
      "app/templates/*.html": ["ng-html2js"] # <- 追加
      "app/scripts/*.coffee": "coffee"
      "app/scripts/*/**/*.coffee": "coverage"
      "test/**/*.coffee": "coffee"

  # 追加
    ngHtml2JsPreprocessor:
      stripPrefix: "app/"
      moduleName: "test.templates" #<- 本番とは別に任意に設定した

```

あとはtemplateCacheのテンプレートを使っている部分のテストで beforeEach module "myApp", "test.templates"とか読みこめばOK.

### 参考

* http://stackoverflow.com/questions/15214760/unit-testing-angularjs-directive-with-templateurl
コンテナに入りたい？それ docker exec でできるよ


10月14日に [Docker 1.3 がリリースされました](http://blog.docker.com/2014/10/docker-1-3-signed-images-process-injection-security-options-mac-shared-directories/)。このリリースで__指定したコンテナの中でプロセスを実行する__ための docker exec コマンドが新たに追加されたので、もはや nsinit や nsenter を使う必要はなくなりました。

例えば influxdb という名前のコンテナに入るには次のようにします。

```
docker exec -it influxdb bash
```

shell が不要なら直接コマンドを実行することもできます。

```
docker exec -it influxdb ps -ef
```

この方法を使えば、コンテナ内のファイルをリダイレクトして親ホストに保存したり、パイプで処理をつなげたりすることもできます。docker cp コマンドと比べると、プロセスの実行結果を取得できるという点で柔軟な処理ができそうです。

nsenter は jpetazzo/nsenter コンテナを使えば簡単にインストールできましたが、docker が標準対応してくれたことで事前準備が不要になり、さらに楽になりました。

#### 追記
nsenter と違って環境変数が正しく設定された状態でコマンドが実行されるようです。以下のような方法で指定した環境変数を参照することができます。素晴らしい！

* Dockerfile に `ENV` で書いた環境変数
* docker run の --link オプションにより設定される環境変数
* docker run の -e オプションにより設定される環境変数

```
docker exec -it influxdb env
```
複数のファイルに対して、特定の語を一気に置き換え


unixの便利系コマンドを、すぐ忘れちゃうのでメモ。

たとえば、つくってるサイトのプロジェクト名が変わってしまったよ！というとき。

```bash
# project_aを含むファイルを、すべてproject_bに置き換えて保存
ag -l project_a | xargs sed -i '' -e 's/project_a/project_b/g'
```

1. `ag`で、特定の語を含むファイルをリスト
  - デフォルトの挙動では、マッチしたファイル名 + マッチした箇所 を出力してくれるので、`-l`オプションつけて、ファイル名だけ吐くようにしてもらう
  - `find`でがんばってもよいんだろうけど、いまどき`ag`のほうが素直で速いでせう

2. `xargs <コマンド>`に対して、ファイルリストを入力で渡すと、渡したファイルリストをコマンドで処理してくれる

3. `sed`を使って、正規表現(`-e`で指定)でテキスト置き換えができる
  - 普通は、ファイル名を引数にとって置き換え後の内容を出力、という挙動
  - `-i <バックアップ用拡張子名>` で、置き換え後の内容を元のファイルに出力できる

`sed`の挙動は、環境によってはちょっと違うかも。

置き換えが正しくできているかどうか、`git diff`とかで確認できる状態にした上で実行しようね！
Date.parseの仕様にちょっと引っかかる

```
[31] pry(main)> d = Date.parse("2014/10/12")
=> Sun, 12 Oct 2014
[32] pry(main)> d = Date.parse("10/12")
=> Sun, 12 Oct 2014
[33] pry(main)> d = Date.parse("2014-10-12")
=> Sun, 12 Oct 2014
[34] pry(main)> d = Date.parse("10-12")
=> Fri, 10 Oct 2014
```

なんとなくやってたら最後ので10日が返ってきてるのに気付かずちょっと引っかかったのでメモ。余分な文字列として解釈されるわけですねこの場合。
QEMU でARM エミュレータ環境を作成する

## ARM エミュレータ環境はなぜ必要なのか

RaspberryPI を始めとするBareMetal やスマートフォン等に広く搭載されているプロセッサです。Core i7 などのIntel 製プロセッサとは命令セットが異なるため、ARM プロセッサ用バイナリをPCで実行することはできません。

ちょっとしたプログラムを作成し、ARM 環境での動作確認をしたい場合でも、ターゲットとなるボードがなければ実行できないのは大変不便です。

そこでQEMU という有名なエミュレータソフトウェアを用いてお手軽にARMエミュレータ 環境を作成し、簡単なプログラムを動かす方法を解説します。環境はUbuntu を想定しています。またプログラム例はC言語となります。

## ユーザーモードエミュレーションの利用

今回の方法ではユーザーモードエミュレーションというQEMU の機能を利用します。これはARM 環境を完全にエミュレートするのではなく、PC上でARMバイナリをユーザーモードで動作させ、プロセスとして起動する、というものです。QEMU というと、仮想環境のイメージ等を用意しなkればいけないイメージですが、ユーザーモードエミュレーションは以下に示すように大変簡単に実行できます。

## 環境のセットアップ

ユーザーモードエミュレーションのQEMU をインストールします。

    $ sudo apt-get install qemu-user-static 

次にARM 用のgcc をインストールします。

    $ sudo apt-get install gcc-arm-linux-gnueabi

これで環境が整いました。

## プログラムの作成とコンパイル

なんでもいいのですが、以下のような簡単なプログラムを作成します。

```c
#include <stdio.h>
int
main(int argc, char *argv[])
{
    int a = 100;

    printf("Hello,World\n");
    printf("a:%d, &a:%p\n",a,&a);

    return 0;
}
```

コンパイルします。

    $ arm-linux-gnueabi-gcc sample.c

readelf で出来上がったa.out がARM 向けバイナリであることを見てみます。

```
$ arm-linux-gnueabi-readelf -h a.out
ELF Header:
  Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 
  Class:                             ELF32
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              EXEC (Executable file)
  Machine:                           ARM
  Version:                           0x1
  Entry point address:               0x833c
  Start of program headers:          52 (bytes into file)
  Start of section headers:          4536 (bytes into file)
  Flags:                             0x5000202, has entry point, Version5 EABI, soft-float ABI
  Size of this header:               52 (bytes)
  Size of program headers:           32 (bytes)
  Number of program headers:         9
  Size of section headers:           40 (bytes)
  Number of section headers:         30
  Section header string table index: 27
```
Machine がARM になっています。

## 作成したバイナリをQEMU で実行する

実行します。`qemu-arm-static` コマンドを使いユーザーモードエミュレーションで起動します。`-L` で指定しているのはARM 向けライブラリです。これは前半で説明したインストール時に同時に導入されているはずです。

```
$ qemu-arm-static  -L /usr/arm-linux-gnueabi a.out    
Hello,World
a:100, &a:0xf6fff44c
```

## おわりに

QEMU ユーザーモードエミュレーションによるARM エミュレータ環境を解説しました。Ubuntu であれば`apt-get` のみで環境が整ってしまうお手軽さが魅力です。
AngularJSのカステムディレクティブで別のディレクティブをrequireしている場合のテストの書き方


[前の記事](http://qiita.com/katahirado/items/40546b19b4d7855d6fd0)のでいえばchildItemディレクティブのテストの書き方

コード再掲

```parentChild.coffee


"use strict"

#parent
#controller

angular.module("myApp")
.controller("ParentItemCtrl", ($scope, Child) ->
  #.......
  @removeChildItem = (childId, index)->
    Child.destroy({childId: childId}, ->
      $scope.parent.cildren.splice(index, 1)
    )
)

#parent directive

angular.module("myApp")
.directive("parentItem", ->
  restrict: "EA"
  templateUrl: "templates/parent_item.html"
  controller: "ParentItemCtrl"
  scope:
    parent: "=item"
)

#child directive

angular.module("myApp")
.directive("childItem", ($modal)->
  restrict: "EA"
  templateUrl: "templates/child_item.html"
  require: "^parentItem"
  scope:
    child: "=item"
  link: (scope, element, attrs, parentItemCtrl) ->
    scope.open = ()->
      modalInstance = $modal.open({
        templateUrl: "/remplates/modal_confirm.html"
      })

      modalInstance.result.then(->
        parentItemCtrl.removeChildItem(scope.child.id, scope.$index) 
      )
)
```


こんな感じでテストを書いた


```child_item_spec.coffee
"use strict"

describe "Directive: childItem", ->

  beforeEach module "myApp", "test.templates"

  scope = {}

  beforeEach inject ($controller, $rootScope) ->
    scope = $rootScope.$new()

  it "テンプレートに所定のデータが表示されること", inject ($compile) ->
    scope.child = {
      "id": 406
      "content": "child4"
      "created_at": "2014-09-23T11:16:23.609+09:00"
      "user":
        "id": 5018
        "profile":
          "name": "あい うえお"
    }
    element = angular.element '''<child-item item="child"></child-item>'''
    parentItemController = {
      removeChildItem: -> return
    }
    spyOn(parentItemController, "removeChildItem").andCallThrough()
    element.data("$parentItemController", parentItemController)
    element = $compile(element)(scope)
    childItemScope = element.find("child-item").scope()
    scope.$digest()
    expect(element.find(".child-user-name").text()).toEqual "あい うえお"

```


ChromeのDeveloper Toolsで確認するとわかるが、'\$' + ディレクティブの名前 + 'Controller'という名前でcontrollerを取得しているので、それにあわせてmockを用意してあげればOK.  
ちなみにディレクティブのhtmlは$templateCacheを使っていて、beforeEach module "myApp", "test.templates"の部分で、テスト用にテンプレートをJSにまとめたものを読み込んでいる。こちらについては別のエントリに書く。→[書いた](http://qiita.com/katahirado/items/0d8b6a9b51eb9cbdc9fd)

###参考
* http://stackoverflow.com/questions/19227036/testing-directives-that-require-controllers
[JavaScript] 自身がポップアップであるとき、親ウィンドウをリロードして、自身ウィンドウを閉じる方法

# やり方

私は、SNS認証をポップアップで行い、認証成功時にポップアップを閉じて、親ウィンドウ（元ウィンドウ）を閉じる、為に使いました。

ポップアップのページ（コールバックで指定したURLのページ）に以下のコードを記載するといいです。

```js
  if(window.opener) {
    window.opener.location.reload(true);
    window.close()
  }
```

# 参考

http://stackoverflow.com/questions/4491433/turn-omniauth-facebook-login-into-a-popup
[初心者メモ]NSNortificationの有効範囲？


##確かめたいこと
あるカスタムビューからの通知を、任意のビューコントローラが監視する。
このとき、そのビューコントローラのコンテンツビューがスクリーンに表示されていない場合でも通知を受け取ることができるのか？

|クラス|役割|
|---|---|
|CustomView|`@"MyNortification"`を通知センターに送る|
|MyViewController|`CustomView`をプロパティに持つビューコントローラで、</br>`@"MyNortification"`を監視している|
|AnotherViewcontroller|`CustomView`と無関係なビューコントローラで、</br>`@"MyNortification"`を監視している|

![Main_storyboard_—_Edited.png](https://qiita-image-store.s3.amazonaws.com/0/37895/4db4ea7e-4fb0-e358-6ba3-08dc77818810.png)


##手順

1. `MyViewContoller`を生成し、tap me をタップして `AnotherViewController`も生成する（それぞれが同じメッセージ通知を監視する）
2. back to first をタップして戻る（このときに意図的に`AnotherViewController`を監視解除しない）
3. `CustomView` のTouch me をタップして、通知メソッドを呼び出し結果を観察する

##わかったこと
>このとき、そのビューコントローラのコンテンツビューがスクリーンに表示されていない場合でも通知を受け取ることができるのか？

受け取れませんでした。

##サンプルコード

```objectivec:CustomView.m

//タッチされたら呼び出されるメソッド
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    NSDictionary *userInfo = @{@"message":@"Touched!"};
    
    //通知センターに通知する
    [[NSNotificationCenter defaultCenter] postNotificationName:@"MyNortification" object:nil                                               userInfo:userInfo];
    
}
```


```objectivec:MyViewController1.m、AnotherViewControllerも同じ実装
- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    //@"MyNortification"をキーとして、通知を監視する
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receiveNortificationTest:) name:@"MyNortification" object:nil];
    
}

- (void)viewDidDisappear:(BOOL)animated
{
    [super viewDidDisappear:animated];
    
    //監視を外す(ただし、AnotherViewController2.mには意図的に記載しない)
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

- (void)receiveNortificationTest:(NSNotification *)aNortification
{
    NSDictionary *message = [aNortification userInfo];

	//ULog(fmt,...)はアラートビューにログを表示させるためのマクロ
    ULog(@"%@:Receive Your Notification!:%@", NSStringFromClass([self class]), message[@"message"]); 
}
```

##番外
`addObserver:selector:name:object:`の`object`に渡すパラメータは通常`nil`としてよい。
[クラスリファレンス](https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSNotificationCenter_Class/index.html#//apple_ref/occ/instm/NSNotificationCenter/addObserver:selector:name:object:)にあるように、
	
>The object whose notifications the observer wants to receive; that is, only notifications sent by this sender are delivered to the observer.If you pass nil, the notification center doesn’t use a notification’s sender to decide whether to deliver it to the observer.

オブザーバが通知を受け取るときに、どのオブジェクトの通知かを判断するときに使われる。もし`nil`なら通知センターは通知したオブジェクトがなんであれ、オブザーバに通知する。
GitHub で公開されている他人のリポジトリ（本家）を fork した後で，自分のリポジトリを本家と同期させつづける方法

何度やっても忘れそうなのでメモしておきます．

# 方法

1. 自分の変更は master ブランチに対して行わない．作業用のブランチを master とは別に作って，以降そのブランチに対してコミット
2. Fork 元のリポジトリ（本家）を upstream という名前でローカルのリポジトリに登録
3. ローカルの master ブランチに upstream/master を pull
4. master ブランチを作業用ブランチに merge
5. 3. と 4. のくりかえし

# 具体的なコマンド

上の 2., 3. の方法を具体的なコマンドで説明します．

## 2. Fork 元のリポジトリ（本家）を upstream という名前でローカルのリポジトリに登録

`git remote` コマンドを使います．たとえば，

    $ git remote add upstream git@github.com:fpinscala/fpinscala.git


## 3. ローカルの master ブランチに upstream/master を pull

ふつうに `git pull` するだけ．

    $ git pull upstream master


# おわりに

Upstream を `git remote add` して，あとは `git pull`. これだけです．
さくらのVPSとCentOS6.5とXvfbとFirefoxでGUIなしでスクショ


やることは

1. X-Server(ざっくり言えばGUI)を入れる
1. 仮想ディスプレイ(Xvfb)を入れる
1. 仮想ディスプレイを指定してブラウザ(Firefox)を起動
1. 

さくらのVPS CentOS6.5でFirefoxがコアを吐いてNO-GUIで動かない。

```
process 24046: D-Bus library appears to be incorrectly set up; failed to read machine uuid: Failed to open "/var/lib/dbus/machine-id": そのようなファイルやディレクトリはありません
See the manual page for dbus-uuidgen to correct this issue.
  D-Bus not built with -rdynamic so unable to print a backtrace
アボートしました (コアダンプ)
```

[http://d.hatena.ne.jp/syuu1228/20081210/1228895490](http://d.hatena.ne.jp/syuu1228/20081210/1228895490)
[http://d.hatena.ne.jp/jog2038/20080226](http://d.hatena.ne.jp/jog2038/20080226)
なんか動作にはUUID的なものがいるらしい。

```
# dbus-uuidgen > /var/lib/dbus/machine-id
```

テスト

```
# Xvfb :1 &
# export DISPLAY=:1
# firefox -display :1 -remote "openurl(http://www.phalanxware.com)" &
# import -window root test.png
```

これでスクショとれたので

```
$ scp your-sakuravps.com:test.png ./
$ open test.png
```

で *www.phalanxware.com* のスクリーンショットがとれているのを確認する。
Yosemite入れたらPostgreSQLが立ち上がらなくなった


参考: http://stackoverflow.com/questions/25970132/pg-tblspc-missing-after-installation-of-os-x-yosemite-beta

```/usr/local/var/postgres``` 内のフォルダが消えたみたいですね。

```
mkdir /usr/local/var/postgres/pg_tblspc
mkdir /usr/local/var/postgres/pg_twophase
mkdir /usr/local/var/postgres/pg_stat_tmp
```

その後下記コマンドを実行するとうまく立ち上がります。

```
pg_ctl -D /usr/local/var/postgres
```
ProvisioningProfileの名前一覧を表示する。

ちょっと[前回](http://qiita.com/tamaki/items/4404e8485c71d62ab38c)とやってる事が似てます。

`xcrun`を使って`ipa`ファイルを作る際、`-embed`にプロビジョニングプロファイルの指定をしますが、この時指定する値は`*.mobileprovision`というようにファイル名を指定します。
しかしXcode上でプロビジョニングプロファイルを設定する場合はプロビジョニングプロファイルはファイル名ではなく名前が表示されている為、シェルで`xcodebuild`や`xcrun`を書く際にパラメタに間違いがないかの確認が少しめんどくさい感じがしました。みんなどうやって確かめてるんだろう？構成ユーティリティで見たりしてるんでしょうか？

試しに一覧を表示するシェルを書いてみました。

https://github.com/tamaki-shingo/iOSProvisioningProfileList.git

実行結果はこんな感じになるかと思います。
<pre>
$sh iOSProvisioningNameList.sh
 *.mobileprovision - iOS Team Provisioning Profile: com.hoge
 *.mobileprovision - iOS Team Provisioning Profile: com.hoge
 *.mobileprovision - iOS Team Provisioning Profile: jp.co.hoge
</pre>
[Rails 4.x] Deviseでconfirmable設定をして、メール確認付きのログイン認証をする際に、Omniauthの場合はメール確認をスキップする方法

データをsaveする前に、以下を追記。
私の場合は app/model/user.rbのdef self.find_for_facebook_oauth(auth, signed_in_resource=nil)の中。


```rb
user.skip_confirmation! 
```

この後にuser.save!がないと保存されないのでそこは注意。
Sublime Text3をコマンドラインから開くようにする


Sublime Text3のパッケージ内に`subl`コマンドがおいてある。

`/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl`
これにファイルを渡せばSublime Text3で開ける。
これを直接コマンドラインで叩くには

1. `~/.bash_profile` とか `~/.profile` とかに `alias` を定義する
2. パスの通っているところにシンボリックリンクを貼る
3. パスの通っているところにコピーする

この記事では２でやってみる。

基本的に自分がインストールしたコマンドは`/usr/local/bin`に置かれるので、それに倣う。

```Bash:操作例
ln -s /Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl /usr/local/bin/subl
subl
```
でSublime Textが立ち上がれば成功。

`subl`コマンドのusageはここに書いてある。
[OS X Command Line - Sublime Text 3 Documentation](https://www.sublimetext.com/docs/3/osx_command_line.html)

(実はここにセットアップ法も書いてあったので公式ドキュメントはやはり大事ですね)
ChefDKにしたらVagrant-berkshelf動かなくなった


Chefdkインストールしたらvagrant-berkshelfで動かしてるBoxが動かなくなっちゃいました。

これですね。
https://github.com/berkshelf/vagrant-berkshelf/issues/212

結論から言うと、ChefDKのパスをrbenvやらのパスよりも先に記述しとけばおｋです。

```
export PATH=/opt/chefdk/bin:$PATH
```
[Rails 4.x] Deviseでログイン後に、ログイン前にいたURLのページを表示させる方法

DeviseのControllerをカスタマイズするよりも簡単な方法です。
ただ、融通がきかない面も出てきます。(ActiveAdminはこれによりリダイレクトループが起きたので、カスタマイズしないといけません)

# やり方

以下を追記します。

```rb:app/controller/application_controller.rb

  after_filter :store_location

  # ログイン前のパスを記憶
  def store_location
    if (request.fullpath != "/users/sign_in" &&
        request.fullpath != "/users/sign_up" &&
        request.fullpath != "/users/password" &&
        request.fullpath !~ Regexp.new("\\A/users/password.*\\z") &&
        !request.xhr?)
      session[:previous_url] = request.fullpath
    end
  end

　#ログイン後のパスを指定
  def after_sign_in_path_for(resource)
    if (session[:previous_url] == root_path)
      super
    else
      session[:previous_url] || root_path
    end
  end
```
OS X 10.10 Yosemiteにアップグレードした後でgit-pullが"git-sh-setup: No such file or directory"を吐く。

今回OS X 10.10 Yosemiteにアップグレードした後でvim(NeoBundle)を使うと
__/Applications/Xcode.app/Contents/Developer/usr/libexec/git-core/git-pull: line 11: git-sh-setup: No such file or directory__
のエラーを吐いて、その対処に四苦八苦したので自分用の備忘録として。

なお、[こちらのコメント](http://qiita.com/tk23n4/items/0c178789a7d77a1f5468#comment-30834845b4cfb9ceb0bd)にてiTerm2のバージョンアップでこの問題が回避できることが分かりました。(自分の環境でも動作確認済みです)
報告をしてくださった[@xibbar](http://qiita.com/xibbar)さん、本当にありがとうございました。

## 環境
Mac OS X 10.10 Yosemite
git version 1.9.5 (Apple Git-50)
Xcode 6.1
MacVim 7.4

## エラー
Vim起動後に:NeoBundleUpdateを実行すると
__[neobundle/install] Update started: (2014/10/17 21:03:06)__
__/Users/(User名)/.vim/bundle/unite.vim__
__/Applications/Xcode.app/Contents/Developer/usr/libexec/git-core/git-pull: line 11: git-sh-setup: No such file or directory__
…
のメッセージが発生。

## 対応策
今回この問題に対処するついでにMacデフォルトのgitではなく、Homebrewのgitに移行した。
その方法については[こちら](http://qiita.com/kony/items/ec5758b72f6799f209d3)で紹介されているので割愛する。

今回の対処については以下のページを参考にした。
http://stackoverflow.com/a/24023702

1. git-pullの11,12,229,329,336行目をそれぞれ

```exec:git-pull
. /usr/local/Cellar/git/2.1.2/libexec/git-core/git-sh-setup
. /usr/local/Cellar/git/2.1.2/libexec/git-core/git-sh-i18n
. /usr/local/Cellar/git/2.1.2/libexec/git-core/git-parse-remote
eval="/usr/local/Cellar/git/2.1.2/libexec/git-core/git-rebase $diffstat $strategy_args $merge_args $rebase_args $verbosity"
eval="/usr/local/Cellar/git/2.1.2/libexec/git-core/git-merge $diffstat $no_commit $verify_signatures $edit $squash $no_ff $ff_only"
```

 に変更
2. git-rebaseの47,48行目をそれぞれ

```exec:git-rebase
. /usr/local/Cellar/git/2.1.2/libexec/git-core/git-sh-setup
. /usr/local/Cellar/git/2.1.2/libexec/git-core/git-sh-i18n

```

に変更で完了。

もしMacデフォルトのgitで対処したい方は、git-pull,git-rebaseそれぞれパス指定を
__/Applications/Xcode.app/Contents/Developer/usr/libexec/git-core/__
に変更すれば良い。
ただし、変更する行数が若干ずれている。


## 追記1(2014/10/21)
もしかしたら、同一ディレクトリにあるファイルなのでパス指定を

``` exec:git-pull
. ./git-sh-setup
```

にしてもいけるのではと思ったが、ダメだった。

## 追記3(2014/10/25)
前回の追記2(2014/10/25)でgit-pullの336行目がパス指定を間違えていると書いたが、本文対応策1.で書いたパスがそもそも間違えていたのが原因だった。

現在は本文の当該箇所を修正したものを記述している。
合わせて、紛らわしいので前回の追記2は削除した。
[Rails 4.x] DeviseのControllerをカスタマイズした時に出たエラーへの対処

deviseでコントローラーをカスタマイズしていたらエラーがいくつもでたのでその対応をメモします。

# ActionController::InvalidAuthenticityToken

以下のように書き換え。

```rb:app/controller/application_controller.rb
protect_from_forgery with: :exception
↓
protect_from_forgery with: :null_session
```

# Can't verify CSRF token authenticity

以下を追記。

```erb:app/view/*/_form.html.erb
<%= hidden_field_tag :authenticity_token, form_authenticity_token -%>
```
Turnip+Capybaraで「リストボックス（セレクトボックス、選択ボックス、selectボックス）で所定の値が選択されているか」のテストの書き方

たとえば、

```
<select id="menu_id" name="user[menu_id]">
<option value="">選択してください</option>
<option value="1" selected="selected">大人</option>
<option value="2">小人</option>
</select>
```
こういうリストボックスで、「大人」が選択された状態になっているか、というテストの書き方を、なんとかつかんだ。

.featureの方に

```
Then select "menu_id" で "大人" が選択されていること
```
stepsの方に

```
step 'select :id で :text が選択されていること' do |id, text|
  expect(page).to have_xpath("//select[@id='#{id}']/option[@selected='selected'][text()='#{text}']")
end
```

でいける。

.featureの方に

```
Then select "menu_id" で "1" が選択されていること
```

stepsの方に

```
step 'select :id で :value が選択されていること' do |id, value|
  expect(page).to have_xpath("//select[@id='#{id}']/option[@value='#{value}'][@selected='selected']")
end
```
でも良いが、後者だと、menu_idがRailsが自動発番するテーブルのIDだったりすると、環境によってテストが通らなくなったりするので、前者のほうが確実。
前者のほうが素直に読み書きできるしね。

要はxpathでこう書けば良い、という話なので、Cucumberでもいけるでしょう。

リンク先を大いに参考にさせていただきました。感謝。

XPath
http://itref.fc2web.com/xml/xpath.html
Cucumber+CapybaraでXPathを用いてセレクトボックスで選択できる値があるかどうかを調べる
http://dyo.jp/blog/archives/401
フォームの input フィールドの value 値を RSpec + Capybara でテスト
http://easyramble.com/test-form-input-fields.html
Pythonによるメール送信

## 基本
```py
# coding: UTF-8

import smtplib
from email.mime.text import MIMEText
from email.header import Header
from email import charset
from email.Utils import formatdate

# Header 付加
def create_message(from_addr,to_addr,subject,body):
    message = MIMEText(body)
    message['Subject'] = subject
    message['From'] = from_addr
    message['To'] = to_addr
    message['Date'] = formatdate()
    return message

# メール送信
def send(from_addr,to_addr, msg):
    s = smtplib.SMTP('localhost:25')    s.sendmail(from_addr, [to_addr], msg.as_string())
    s.close()
```
今更カメラ制御の基礎（STEP1:とりあえずプレビュー表示）

---
カメラ制御のサンプルは掃いて捨てるほどあるが、1つのサンプルでいろいろなことをやりすぎているので、シンプルに1つずつ見てみます。

###他のステップはこちら

[STEP1:基礎](http://qiita.com/zaburo/items/d9d07eb4d87d21308124)
[STEP2:オートフォーカスとか](http://qiita.com/zaburo/items/74813b5fb8385c040f67)
[STEP3:保存](http://qiita.com/zaburo/items/9362fdaee3bbf9bfeb42)
[STEP4:アスペクト比調整](http://qiita.com/zaburo/items/b5d3815d3ec45b0daf4f)


###はじめに

このサンプルを実行すると、Preview画面が90度ずれたりします。が、それらへの対応処理を入れると可読性が落ちるのでとりあえず無視。

###やりたいこと

とりあえずプレビュー表示する

###カメラ制御の主な流れ
・Manifestに\<uses-permission android:name="android.permission.CAMERA">\</uses-permission>を追加
・プレビュー表示用のSurfaceViewを配置（ないしはプログラムの中で生成）
・SurfaceViewを制御するためのSurfaceHolderを取得
・Callbackに3つのメソッドを実装（onCreate, onChanged, onDestroyed)

⇒onCreatedでCameraをOpen。
⇒onChangedでPreviewスタート。
⇒onDestroyedで破棄。

ポイントは、Changedが初回にも1度呼ばれること（画面が変化しなくても）。

###備考
フルスクリーンにしたり、アスペクト比を調整したりいろいろしなければならないが、流れをおさらいすること重視なので以上。

これを基本として、

・画面タッチで写真の撮影 + 保存
・AutoFocusの実装
・バーコードの読取り

などを行う。

###ソース

```MainActivity.java

import android.app.Activity;
import android.hardware.Camera;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SurfaceHolder;
import android.view.SurfaceView;


public class MyActivity extends Activity {

    private SurfaceView mySurfaceView;
    private Camera myCamera; //hardware


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);

        //SurfaceView
        mySurfaceView = (SurfaceView)findViewById(R.id.mySurfaceVIew);

        //SurfaceHolder(SVの制御に使うInterface）
        SurfaceHolder holder = mySurfaceView.getHolder();
        //コールバックを設定
        holder.addCallback(callback);

    }

    //コールバック
    private SurfaceHolder.Callback callback = new SurfaceHolder.Callback() {
        @Override
        public void surfaceCreated(SurfaceHolder surfaceHolder) {

            //CameraOpen
            myCamera = Camera.open();

            //出力をSurfaceViewに設定
            try{
                myCamera.setPreviewDisplay(surfaceHolder);
            }catch(Exception e){
                e.printStackTrace();
            }

        }

        @Override
        public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i2, int i3) {

            //プレビュースタート（Changedは最初にも1度は呼ばれる）
            myCamera.startPreview();

        }

        @Override
        public void surfaceDestroyed(SurfaceHolder surfaceHolder) {

            //片付け
            myCamera.release();
            myCamera = null;
        }
    };
}
```

いちおうXMLも。

```activity_my.xml
<FrameLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <SurfaceView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/mySurfaceVIew" />
</FrameLayout>
```
Jenkins Plugin Management in Groovy


Originally posted in http://aespinosa.github.io/blog/2014-10-17-jenkins-plugin-management-in-groovy.html

In conjuction with Habit#4 (Tend your Plugin Garden) in [1] . I want to just
have the plugins I want on my Jenkins deployment. For my use case, I don't want
to have vanilla deployed plugins like the CVS plugin.  Here is a way to disable
all plugins at the start.

```
plugins = Jenkins.instance.pluginManager.plugins
plugins.each {
  it.disable()
}
```

## Plugin Installation

Instead of having your outer config management download the .hpi/ .jpi and
wrangle with dependencies yourself, you can take advantage of Jenkin's builtin
Java calls to do exactly the same thing.  With this, you can install a plugin
from the script console.

```
Jenkins.instance.updateCenter.getPlugin("git").deploy()
```

## Enable a plugin's dependencies

In the previous section, some of the dependencies will be disabled even though
they got updated to the version required by the Git plugin because of the first
step we did to disable all plugins.  Here, we get all the plugin's dependencies,
and sub dependencies to enable all of them.

```
git = pm.getPlugin("git")

def deployPlugin(plugin) {
  if (! plugin.isEnabled() ) {
    plugin.enable()
  }
  plugin.getDependencies().each { 
    deployPlugin(pm.getPlugin(it.shortName)) 
  }
}

deployPlugin(git)
```

[1] <http://www.slideshare.net/andrewbayer/seven-habits-of-highly-effective-jenkins-users-2014-edition>
Yosemiteでインストーラがフリーズする問題の解消

Yosemiteにアップデートしたのち、AndroidStudioのためにJava6のインストールをしようとしたところ、インストールに入った瞬間にインストーラがフリーズしました。
同様にxcodeを起動しようとしてxcode componentのインストールを求められてフリーズ…。
権限がおかしいのかと思い設定.appからプライバシーを変えようと認証するもフリーズ…。

結局Security Agentのプロセスを一度killしたら全部うまく行きました。
なんだったんだ…。
情報セキュリティスペシャリスト試験の参考リンク集

情報セキュリティスペシャリスト試験を勉強するにあたり、参考にしたリンク一覧です。

* [ディレクトリトラバーサルとは 〔 パストラバーサル 〕 【 directory traversal 】 - 意味/解説/説明/定義 ： IT用語辞典](http://e-words.jp/w/E38387E382A3E383ACE382AFE38388E383AAE38388E383A9E38390E383BCE382B5E383AB.html)
* [BOF対策(C/C++)](http://qiita.com/SUZUKI_Masaya/items/44fc28fe7a5e9b8058c1)
* [情報セキュリティスペシャリストドットコム](http://www.sc-siken.com/)
* [Linuxキーワード - chroot：ITpro](http://itpro.nikkeibp.co.jp/article/Keyword/20101204/354862/)
IoT/M2Mな製品まとめ

国内外でいろいろと出てきてるので、とりあえず見つけたものをまとめてみる。

# スマートホーム製品
特に定義があるものではないけれど、インターネットやスマホに繋がって

* 制御できるもの
* 何らかの情報が見れるもの
* 家庭向け

といった特徴がある。製品に液晶が付いてるだけのものやOA機器はとりあえず除く。

## Akerun
スマートロック。製品化未定。家事代行マッチングサービスAny+Timesと連携予定。
http://akerun.com/ja/

* Bluetooth？

## IRKit
スマートリモコン。
http://getirkit.com/

* Wi-Fi
* 赤外線


## Pluto
スマートリモコン。赤外線パターンの登録がIRKitよりスマート。
https://pluto.io/

* 有線LAN
* 赤外線
* IEEE 802.15.4（独自プロトコル）


## BISTRO
ネコ顔認識カメラ付き自動給餌器。資金募集中？
http://japanese.engadget.com/2014/07/16/bistro/

* Wi-Fi
* カメラ
* ３万円弱？


## Withings Home
家庭内の環境センサーやカメラを備えた製品。赤ちゃんの泣き声などを検知できる。
http://www.withings.com/us/withings-home.html
http://japanese.engadget.com/2014/09/06/withings-home-voc/

* 有線LAN
* Wi-Fi
* Bluetooth 4.0
* カメラ
* 気温
* 湿度
* 住宅用接着剤の有機溶剤レベル判定（VOCレベル検知）
* Apple HomeKit
* 3万円弱？

## OKIDOKEYS
鍵の電子化をする製品。遠隔地からの施錠・開錠やハンズフリー、こじ開け時のアラーム機能あり。
https://www.okidokeys.com/
https://www.rakunew.com/items/67765

* Bluetooth 4.0


## Sentri
ホームセキュリティ製品。※kickstarter
https://www.kickstarter.com/projects/474570093/sentri-welcome-to-a-smarter-home
https://www.rakunew.com/items/68363?t=gadgets

* カメラ
* スピーカー
* 気温
* 湿度
* 照度センサー
* 人感センサー
* 6万弱？

## SmartThings
ホームセキュリティ製品。
http://www.smartthings.com/
http://jp.techcrunch.com/2013/12/06/20131205smartthings-new-iphone-app/
2014/08 Samsung により買収
http://itpro.nikkeibp.co.jp/atcl/news/14/081800457/

* Zigbee
* Z-Wave
* 滞在管理（iBeacon的なもの？）
* 気温
* 湿度
* スピーカー
* 開閉センサー
* 人感センサー
* 水漏れセンサー
* スイッチ制御
* 5万弱？

## Wink
ホームコントローラ？
http://www.winkapp.com/

* Wi-Fi
* Z-Wave？
* 温度
* 鍵
* 照明制御
* ブラインド開閉


# その他（少しIoTからはずれるが、今後発展しそうな製品）
## WHILL
スマホで操作可能な車椅子。
http://whill.us/

* BLE

## Moff
ジェスチャーでいろいろな音を出すおもちゃ。
http://jp.moff.mobi/

* Bluetooth
Bridging Headerが生成されないので、作った

## swiftとobjective-cを共存させようとした
いろんな記事を見ると、swiftプロジェクトで、objective-cのファイルを生成しようとすると、
bridging-headerなるファイルが生成されると。

そして、そこにobjective-cのクラスのインポート分を書けば、swiftに勝手にインポートされるという話だった。

しかし、bridging-headerが生成されることはなかった。

## bridging headerを手動で生成
プロジェクトで、bridging-headerを生成する方法を調べてみると、次のような記事を見つけた。
[手動でBridging-header.hを生成する](http://bohemianpolymorph.wordpress.com/2014/07/11/manually-adding-a-swift-bridging-header/)

これに従って、Bridging-header.hを生成すると、うまくobjective-cをswiftプロジェクトで読み込むことができた。
chroot用に/etc/{passwd,group}作成

* [SSH - sftpのみ許可する方法。ディレクトリの権限に注意!! - Qiita](http://qiita.com/tukiyo3/items/ad95abd74ce2a3185ef5)の続き。

sftp接続した時、ファイルの所有者が数字で表示される問題を解決する。

chroot環境のrootdirを `/chroot/` に設定した場合、

* /chroot/etc/passwd <-- uidの名前解決用
* /chroot/etc/group <-- gidの名前解決用

この二つがあればよい。

`sftponly`グループの名前解決だけであれば、以下コマンドでファイルを生成すれば良い。

## 生成手順

自分一人の場合はハードリンクでもいいでしょう。

```bash:sftponlyグループのGIDを確認しておく。
$ grep sftponly /etc/group
sftponly:x:1002
```

`1002`ということが分かった。

```bash:chroot環境用に生成
grep 1002 /etc/group > /chroot/etc/group
grep 1002 /etc/passwd > /chroot/etc/passwd
```

/chroot/etc/group と /chroot/etc/passwd はsftpでログインするユーザから読み込みができること。

あとはユーザを追加するたびに/chroot/etc/passwdを更新すればよい。
Swift の Dictionary で nil を扱う

# 目的

Swift には nil を扱える Optional 型があります。

これを Dictionary 型の値として使うことで、Dictionary 型で nil の値を扱えるようになります。

# 定義

値の型として Optional 型を指定します。

```swift
var dict = Dictionary<String,String?>()
```

# 値の取得

値の取得は通常どおりです。

```swift
let value:String?? = dict["a key"]
```

* Dictionary の値として定義された型 ```String?``` がさらに Optional でラップされて得られます。
* 指定したキーが存在しない場合は nil が得られます。
* 指定したキーの値が nil だった場合は Optional\<String>() が得られます。

# 値の設定

通常の値は、通常どおりの方法で設定できます。

```swift
dict["key1"] = "STRING VALUE"
```

nil を設定したい場合は Optional の nil 値を設定します。

```swift
dict["key2"] = Optional<String>()
```

**直接 nil を設定すると、指定したキーが Dictionary から消去されます。**

# キーの存在判定

通常どおりの方法で判定できます。

```swift
if let value = dict["a key"] {

}
```

* キーの値は Optional 型で得られます。
* Optional の nil が設定されている値も Dictionary 内に存在できます。
* nil を直接設定したキーは消滅しています。

***

[詳細] http://ez-net.jp/article/1C/t1D5_SZN/hZ0evGOf9-uc/
selenium-webdriverのChangelog

# 要約
selenium-webdriverの更新履歴は以下で見れる。

Ruby: https://github.com/SeleniumHQ/selenium/blob/master/rb/CHANGES
Python: https://github.com/SeleniumHQ/selenium/blob/master/py/CHANGES

# 経緯
Rubyのプロダクトでselenium-webdriverを使っています。
Firefoxがバージョンアップするたびにエラーで動かなくなり、ググると「selenium-webdriver x.y.zはFirefox Xに対応してないよ」という記事を見つけて、四苦八苦する…という体験を何度もしています。
(selenium dont work firefox などでググると色々出てきます)

[Selenium Webdriver 公式ドキュメント
](http://docs.seleniumhq.org/projects/webdriver/)にはHistoryやReleaseNote, Changelog的な更新履歴のページが
なく、現在のブラウザ対応状況がよくわかりません。

色々探していて、

[SeleniumHQ/selenium - Github](https://github.com/SeleniumHQ/selenium)

に各言語に対応したChangeファイルがあったよ。と言う話。


中身を見ると「Firefox バージョンXに対応したよ」「FirefoxのバージョンYは古いからもう対応しなくしたよ」という記述がチラチラあります。
RubyMineでHomebrewを使ってインストールしたrbenvを認識させる


Homebrewを使ってインストールしたrbenvはRubyMineに認識されません。$HOMEにあるrbenvしか認識しないっぽいです。
Homebrewでインストールしたrbenvは/usr/local/var/rbenvに入りますので、今回はシンボリックリンクを貼ることで対応しました。

```bash:
$ ln -s /usr/local/var/rbenv ~/.rbenv
```

これでオッケーです。RubyMineを再起動すると認識します。
ARSoft.Tools.Net: Xamarin.Mac/iOSで動かしてみる



# Socket is already connected


~~~csharp
		public void AssertGoogle(DnsMessage msg)
		{
			Assert.IsNotNull (msg);
			Assert.IsTrue (msg.AnswerRecords.Count > 0);
			Assert.AreEqual( 
				173,
				(msg.AnswerRecords[0] as ARecord).Address.GetAddressBytes()[0]
			);
		}
~~~

~~~ csharp

		[Test]
		public void TestResolve ()
		{
			AssertGoogle (
				DnsClient.Default.Resolve (
					"google.com", RecordType.A)
			);
		}
~~~
		
結果が返らない。ブレークポイント入れるとSocket is already connectedで例外起きている。

ので、DnsClientBase.csを修正:

~~~ csharp

private byte[] QueryByUdp(DnsClientEndpointInfo endpointInfo, byte[] messageData, int messageLength, out IPAddress responderAddress)
{
  ....
                    if( udpClient.Connected )
                        udpClient.Send(messageData);
                    else 
                        udpClient.SendTo(messageData, messageLength, SocketFlags.None, serverEndpoint);


~~~

# BeginResolve でも同じ

~~~ csharp

		[Test]
		public void TestResolveAsync()
		{
			DnsClient.Default.BeginResolve (
				"google.com", 
				ar => {
					AssertGoogle (
						DnsClient.Default.EndSendMessage (ar)
					);
				}, null);
		}
~~~

で結果がかえらないので、同様に修正:

~~~ csharp

        private void UdpBeginSend<TMessage>(DnsClientAsyncState<TMessage> state)
            where TMessage : DnsMessageBase, new()
        {
                 ....
                IAsyncResult asyncResult;
                if( state.UdpClient.Connected == true){
                    asyncResult = state.UdpClient.BeginSend(
                        state.QueryData, 0, state.QueryLength, 
                        SocketFlags.None,  UdpSendCompleted<TMessage>, state);
                }else {
                    asyncResult = state.UdpClient.BeginSendTo(
                        state.QueryData, 0, state.QueryLength, 
                        SocketFlags.None, state.UdpEndpoint, UdpSendCompleted<TMessage>, state);
                }
~~~


#  NSサーバー指定してAレコードのクエリ

~~~ csharp

		public List<System.Net.IPAddress>	ResolveAddress(
			DnsClient dns, string name, int timeout=50000 )
		{
			var msg = dns.Resolve (name);

			var addrs = msg.AnswerRecords
				.Where (a => a.RecordType == RecordType.A)
				.Select (a => ((ARecord)a).Address).ToList ();

			foreach(CNameRecord rec 
				in msg.AnswerRecords.Where( a => a.RecordType == RecordType.CName))
			{
				addrs = addrs.Concat(ResolveAddress(dns, rec.CanonicalName )).ToList();
			}

			return addrs.Distinct ().ToList ();
		}
~~~

~~~ csharp

		[Test]
		public void TestResolveByGoogle()
		{
			var google = new System.Net.IPAddress (new byte[4]{ 8, 8, 8, 8 });

			var addrs = ResolveAddress (
				            new DnsClient (google, 3000), 
				            "www.microsoft.com");

        }
~~~
複数のセレクトボックスが全て選択されているかでバリデーションするJquery

```lang:js
$(function () {
   //送信ボタンを押したときにバリデーション
   $(".submit_button").click(function(){
      if($("#selectbox_wrapper1").find('option:selected').val()=="" ||
         $("#selectbox_wrapper2").find('option:selected').val()=="" {
            alert("セレクトボックスが全て選択されていません");
            return false;
        }
   }
});
```
htmlは省略
複数のチェックボックスが全て1つ以上選択されているかでバリデーションするJquery



```lang:js
$(function () {
   //送信ボタンを押したときにバリデーション
   $(".submit_button").click(function(){
      if( $(".checkbox_wrapper1").find('input[type="checkbox"]:checked').size()==0 ||
          $(".checkbox__wrapper2").find('input[type="checkbox"]:checked').size()==0){
            alert("チェックボックスが1つ以上選択されていません");
            return false;
        }
   }
});
```
htmlは省略