OmniAICreator/Qiita-1.07M huggingface dataset:
url_forにてnamespaceの異なるコントローラーのアクションをURLをフルパスで指定する方法

ユーザ側から管理画面へのURLをフルパスで表示したいのだが、
意外とハマったので、備忘録としてメモ。

routes.rb

```ruby
scope :admin do
  resources :inquiries, only: [:show]
end
```

管理画面へのroutes

```bash
# rake routes | grep inquiries
admin_inquiry_path	GET	/admin/inquiries/:id(.:format)	admin/inquiries#show
```

ユーザ側で表示するには、下記でOK

```ruby
<%= url_for(admin_inquiry_path @id, host: 'localhost', only_path: false, protocol: :http, port: (Rails.env.development? ? 3000 : nil)) %>
```

[参考URL]
[http://stackoverflow.com/questions/20057910/rails-url-for-behaving-differently-when-using-namespace-based-on-current-cont]()
[http://apidock.com/rails/ActionController/Base/url_for]()
静的リソースの読み込み方


Winter'15時点でできる静的リソースの読み込み方を説明します。12/4の[a_kuratani](http://qiita.com/a_kuratani)さんの記事にもろかぶりしました・・・。3/4くらい同じです。いや、4/5ほど・・・。


## 0.準備

以下の構成で静的リソースを登録します。

### 静的リソース
静的リソース名：adventResource
以下の構成でSalesforceにアップロードします。

```
staticResource
	-js
		-jquery-2.1.1.min.js
	-style
		-bootstrap.min.css

```
[Jquery](http://jquery.com) [BootStrapSF1](http://developer.salesforcefoundation.org/bootstrap-sf1)



## 1.appで静的リソースを読み込む場合
### ソースの構成
・AdventCalendarApp.app

通常通りのリソースの読込です。現時点では$Resourceは使えません。

### 
```AdventCalendarApp.app
<aura:application>
    <link href="/resource/adventResource/staticResource/style/bootstrap.min.css " rel="stylesheet"/>
    <script src="/resource/adventResource/staticResource/js/jquery-2.1.1.min.js"/>
</aura:application>
```

## 2.cmpで静的リソースを読み込む場合（これだとうまく動かない）
素直にcmpに、\<script>タグを記述すると・・・
保存時にエラーが発生して、スクリプトタグが埋め込めない。

```
FIELD_INTEGITY_EXCEPTION
Failed to save undefined: markup://TLP:AdventCalendarCmp:3,83: script tags only allowed in templates:
```

## 3.上記2のWorkAround
上記2の方法だと、エラーが発生してjavascriptが読み込めないので、コsンポーネントのinit時に、動的に\<script>タグを埋込み、埋め込みが完了後、イベントを発生させる。


### ソースの構成
・AdventCalendarApp.app
・AdventCalendarCmp.cmp
・AdventCalendarCmpController.js
・JsLoaded.evt



```AdventCalendarCmp.cmp
<aura:component>
    <aura:handler name="init" value="{!this}" action="{!c.doInit}" />
    <aura:handler event="TLP:JsLoaded" action="{!c.doOnload}"/>
	<link href="/resource/adventResource/staticResource/style/bootstrap.min.css " rel="stylesheet"/>
</aura:component>
```

```JsLoaded.evt
<aura:event type="APPLICATION" description="This event is fired when Jquery is loaded" />
```


```AdventCalendarCmpController.js
({
	doInit : function(component, event, helper) {
        	var head = document.getElementsByTagName('head')[0];
            var script = document.createElement('script');
            script.src = '/resource/adventResource/staticResource/js/jquery-2.1.1.min.js';
            script.type = 'text/javascript';
            script.id = "script_" + component.getGlobalId();
            script.onload = function scriptLoaded(){
                var evt = $A.get("e.TLP:JsLoaded");
		        evt.fire();
            };
        head.appendChild(script);
	},
    
    doOnload : function(component, event, helper){
        $(document).ready(function(){
        	console.log('Jqueryが読み込まれました');    
        });
    }
})
```
これでコンポーネントでjavascriptを読み込むことが可能になるため、Salesforce1アプリケーションに、コンポーネントを組み込むことができるようになります。
（かなり強引なやり方なので、今後にSalesforceの機能追加に期待です。）

注意点）１つのアプリケーション内で複数のコンポーネントを読み込む際には、重複してリソースを読み込まないように注意すること。

参考）より高度なRequireJsを使った、静的リソースの取得にはこちらもどうぞ
[Appirioテックブログ RequireJSを用いたLightningコンポーネントの読み込み](http://appirio.co.jp/category/tech-blog/2014/12/requirejs-for-lightning-component/)
[Appirioテックブログ JavaScriptエンジニアのためのLightning コンポーネント開発ガイド](http://appirio.co.jp/category/tech-blog/2014/12/lightning-guide-for-javascript-engineers/)
Swiftのif文の条件部は、BooleanType準拠の値しか受け付けない模様


そろそろネタが尽き気味のtotottiです。

ネタに困っていたところ、ありがたいことに「Advent Calendar執筆のためにもくもく会しましょう！」とお誘いを受けまして、今日も続けることが出来ました。

## Swiftの条件式のエラー

もくもく会にのこのこ出席すると、「C言語のコードをSwiftに移植したら、ビルドが通らない」という相談を受けました。以下に、単純化したコードを記載します。

``` Swift
let value1 = 0b00000001
let value2 = 0b00000010

// error Type 'Int' does not conform to protocol 'BooleanType'
if value1 & value2 {
    println("something")
}

```

C言語だと普通のビルドできると思うのですが、Swiftだとダメなようです。

エラーメッセージによると、原因はビット演算「value1 & value2」の結果(Int型)が、BooleanTypeプロトコルに対応していないためのようです。

例えば、以下のように書き直すと動作します。

``` Swift
// 修正案
if value1 & value2 == 0 {
    println("something")
}
```

修正案の場合は、ビット演算の結果(Int型)と0(Int型)を比較演算子で比較した結果として、BooleanTypeプロトコルに対応した値が返るので、ビルドが通るんですね。

### Swiftのif文の条件は、C言語系とは違うっぽい

C言語(Objective-C)は、たとえば下記のようなif文も書けます。

```
// C言語ならok
if ( value1 & value2 ) {
   NSLog("TRUE")
}

// C言語ならこういうのもok
if ( 0 ) {
   NSLog("TRUE")
} else {
   NSLog("FALSE")
}
```

こういうのに慣れていると、Swiftのif文を使うときにちょっと引っかかるかもしれませんね。

### BooleanTypeとは

どうやら「Swiftのif文の条件部は、BooleanTypeに対応してないとダメ」というのがわかったので、では公式のドキュメントで裏を取ろうと思って探したんですが、見つかりませんでした。。(知ってたら教えて下さい)

そのかわり、詳しい解説がQiitaの記事で上がっていましたので、詳しくはこちらを御覧ください。β版時代の記事なので、BooleanTypeではなくLogicValueなんですが、詳しく載っています。

[Xcode - Swiftで条件式にOptional型が渡せる仕組みを調べた - Qiita](http://qiita.com/takabosoft/items/51416286a9f59e6c93e5)
Unsigned APKをSigned APKにする

自社で開発をしていない場合、ソースではなくapkだけ渡される場合がある。
ソースがないからEclipseやantからsigned apkを作ることはできないので、Java SEに付属している **jarsigner** というツールを使う。


```bash
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore /path/to/keystore /path/to/unsigned.apk keystorealias
```

このコマンドだとunsigned.apkがそのまま署名されたAPKになる。
署名前のAPKを残したい場合は-signedjarを指定する。

```bash
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore /path/to/keystore -signedjar /path/to/signed.apk /path/to/unsigned.apk keystorealias
```

## 参考

* [Signing Your App Manually | Android Developers](http://developer.android.com/tools/publishing/app-signing.html#signing-manually)


## おまけ：証明書の作成

証明書の作成には **keytool** というコマンドを使う。
これもJava SEに付属している。

```bash
keytool -genkeypair -alias "keystorealias" -keyalg RSA -keysize 2048 -keystore /dest/to/keystore -validity 365
```

validityオプションは有効期限までの日数なので、必要な期間分の日数を入れる。
はじめてのCSS設計

少し前からBEMやSMCASSなどのCSS設計などを知り、なるほどこういう方法があるのかと、苦戦しながら実践していました。
そんな中@hiloki@githubさんが自前で[FLOCSS](https://github.com/hiloki/flocss)というCSS設計思想をGithubで公開していたので、
自分もこういうの作ってみたい！と思いたち、
稚拙ながら設計を考えてみました。

OOCSS,SUIT,SMACSS,FLOCSSあたりを参考にしています。

# CSSのカテゴライズ
1. Base
1. Component
1. Unit
	- layout
	- pack
1. Asset
	- utility
	- assist

CSSをこのように分割します。


## Base
SMACSSのBaseにあたるものです。

## Component

ページを構成するパーツのすべてです。
再利用しやすいよう、親に依存せず、Component単独でスタイルを維持できるように設計します。
Componentは自分自身の見た目のみを司り、位置関係に関しては、後述するUnitクラスがすべて受け持つようになります。

#### 命名規則
- ComponentName
- ComponentName--skinName_[n]
- ComponentName-descendentName_[n]

Componentはskeletonとskinに分けて記述します。

`ComponentName`がスケルトンになり、そのComponentに形作るための必要最低限のスタイルを司り、
`ComponentName--skinName`が、そのComponentのskin（modifier）のスタイル司っています。
また、Componentを作るモジュール群に関しては、`ComponentName-descendentName`で記述します。

Componentの子要素にはすべてクラス名でスタイル当てていきます。(構造とスタイルの分離のため)
親コンポーネントによって、子コンポーネントの形が変わる場合には親コンポーネントと同じskinNameを付与し対応します。

例を示します。

```html
<div class="Island Island--notify">
  <div class="Island-head">
    <h3 class="Heading Heading--h3"></h3>
  </div>

  <div class="Island-body">
    <ul class="LinkList LinkList--notify">
      <li class="LinkList-item"></li>
    </ul>
  </div>
</div>
```

セマンティックに名前を付けられない場合、またはパターンがあるものに関しては、コンポーネント名(または、skinName,descendentName)の最後に`_[value]`を追加し対応します。

```html
<a href="#" class="TextLink TextLink_1"></a>
```


## Unit

Unitにはページで一つだけしか使えないLayoutクラスと、汎用的に使えるPackクラスが存在します。

先述したように、
Componentは、そのComponentがどのような見た目をしているかだけを司り、
そして、その親のUnitが、そのComponent(またはComponent群)が、どのような位置関係にあるかを司ります。

これによって、Componentがどの位置にあるかについては全く関与しないで、自分自身の見た目だけを司ることができます。


#### Layout
ページに唯一のUnitとしてはプリフィックスとしてl-をつけます(Layout)
LayoutはSMACSSでいうThemeの役割も担っており、ページごとにオリジナルなComponentにしたい場合のフックに利用します。


```css
.l-header {}
.l-sidebarRight {}
.l-specialPage {}
```


#### Pack
汎用的に使えるUnitとしてプリフィックスとしてp-をつけます(Pack)

```css
.p-container {}
.p-streamCard {}
```

## Asset

Assetはグローバルに使えるUtilityクラスと、コンポーネントを補助するAssistクラスが存在します。

#### Utility
marginやpadding、そしてclearfixなどグローバルに使える、単一のスタイルが付与されたクラスがここに分類されます。
プリフィックスとして`u-`をつけます。
スタイルには明示的に`!important `を付与します。

```css
.u-mb10 {}
.u-clearFix {}
```

#### Assist
Assistクラスは必ずコンComponentとセットで利用します。
必ずCSSは**Componentとの結合セレクタで定義**します。

```css
.has-border {}
.has-header {}
```

タブがアクティブ、非アクティブやモーダルが、表示、非表示など**コンポーネントの状態を示すとき**は`is-`を使います

```css
.is-hidden {}
.is-error {}
.is-active {}

.Tab-button.is-active {}
```

ボーダーがある場合、ない場合やアイコンをある場合、ない場合など**コンポーネントのパーツを拡張したり、修飾する場合**は`has-`を使います

```css
.has-border {}
.has-header {}
.has-icon {}

.Panel.has-header {}
```

skinとほぼ同じ役割のように見えますが、クラス属性が冗長になるのを防ぐために、モジュールの追加(パネルのヘッダ)やグローバルなモジュール(枠線など)の場合は`has-`を使います。

```html
<div class="Panel Panel--primary has-header"></div>
```

以上です。

## 不満な所
- 制約が多くて覚えにくい(致命的)
- の割に、複雑なUIを形成する際に詰まりそう


## そして
心安らかに、拡張していけるようになりたい。

あとは、とにかくプロジェクトメンバーとの思想の共有と、コードレビューを徹底する。

作ってみて思ったのですが、
設計はメンバーで徹底する事が大事なので、もう少し、軽めに分かりやすくシンプルにするのが、寿命が長い設計のためには必要だなと思いました。

はじめて、こういうものを作ってみましたが、
これから、自分の成長とともにアップデートしていきたいなと思います。
Python の for 文で readlines() を使うな！

ついさっき、自分が昔書いたコードを見直していた時に、

```py3:
try:
    with log_path.open(encoding='utf-8') as log_file:
        for line in log_file.readlines():
            ...
```

のようなコードをあちこちで書いていたことに気がつきました。

Python (注：バージョン2.4以降）のファイルハンドルはイテレーターですので、上記のコードの

```py3:
        for line in log_file.readlines():
```

の行は、

```py3:
        for line in log_file:
```
と書くべきですね。

`enumerate()` と組み合わせる場合も、

```py3:
        for line_number, line in enumerate(log_file.readlines(), 1):
```

ではなく、

```py3:
	for line_number, line in enumerate(log_file, 1):
```

と書いて問題ありません。

もし何らかの事情でどうしても `readlines()` メソッドを使ってファイルを一気に読み込みたい場合は、`for` 文に `readlines()` を書くのではなく、

```py3:
log_lines = []
try:
    with log_path.open(encoding='utf-8') as log_file:
        log_lines = log_file.readlines()
except IOError:
    pass
	
for line in log_lines:
    ...
```

のように書くべきだと思います。

`with` ブロックがやたらと長いコードをたまに見かけますが、開いたファイルは必要がなければとっとと閉じるべきですし、`with` ブロックにスコープはありませんので、不要な処理をだらだら書かずにとっとと抜けましょうということですね。

以上、自分のコードのダメさ加減にかなりヘコんだので、自戒を込めた書いた Tips でした。
git commit の後に自動で git ftp push する


deploy 何それおいしいの？

漢は黙って **FTP** !!

という環境なので、 `git-ftp` 様々なんですが、


```bash

$ git commit -am 'some comment'
$ git ftp push

```

が2度手間で面倒くさくなってきたので、`git commit` の後に `git ftp push` させる為に、`post-commit` を使ってコマンドを実行するようにした。

`git-ftp` については[こちら](http://git-ftp.github.io/git-ftp/)


`.git/hooks/` 内に、 `post-commit` を作成。

```shell:post-commit

exec git ftp push --user %Username% --passwd %Password% ftp://%path_to_folder%

```

これだけ。

`hook` については[こちら](http://git-scm.com/book/ja/v1/Git-%E3%81%AE%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%9E%E3%82%A4%E3%82%BA-Git-%E3%83%95%E3%83%83%E3%82%AF)
Underscore.js に each_with_index を mixin する

Qiita 初投稿です。

# each_with_index とは
Ruby には each_with_index というメソッドがあります。 
each に似ていますが、イテレータにインデクスも渡すところが異なります。

```rb
%w(foo bar baz).each_with_index {|s,i| puts "#{i}:#{s}"}
```

上のコードを実行すると以下のようになります。

```
0:foo
1:bar
2:baz
```

# Underscore.js に mixin してみる
Underscore.js には each_with_index が無いようなので mixin してみました。
(※ vzvu3k6k さんからご指摘いただきました。each に渡すイテレータは第二引数で インデクスが取れるそうです。これは each_with_index と同様の動作です)

以下、コーディングは CoffeeScript でしています。

```coffeescript
_.mixin
  each_with_index : (list, iterator) ->
      _(list.length).times (i) -> iterator list[i], i
      list
```

試してみます。

```coffeescript
_.each_with_index ["foo","bar","baz"], (s,i) -> console.log i + ":" + s
```

コンソールに以下のように出力されました。

```
0:foo
1:bar
2:baz
```

うまくいったようです。
macでテキスト置換をsedで行う

sedのテキスト置換後のファイルの上書きではまった箇所があるのでメモ。

sedでテキスト置換する時は-iオプションでこんな感じで書く
```bash
sed -i -e "s/置換したい文字列/置換後の文字列/g" [置換するファイル]
```
ただ、上記のコマンドを使ってmacのターミナルで置換すると痛い目を見る。

macの場合
```
$ echo hoge > hoge.txt; sed -i -e "s/hoge/fuga/g" hoge.txt; cat hoge.txt; ls -l | grep hoge
fuga
-rw-r--r--    1 louis  Users      5 Dec  5 19:30 hoge.txt
-rw-r--r--    1 louis  Users      5 Dec  5 19:30 hoge.txt-e
$ cat hoge.txt-e 
hoge
```
-eを語尾につけたファイルをバックアップとして作成してくれている。

sed -iのオプションとして''空文字を指定してやると回避出来る
```
echo hoge > hoge.txt; sed -i '' -e "s/hoge/fuga/g" hoge.txt; cat hoge.txt; ls -l | grep hoge
fuga
-rw-r--r--    1 louis  Users      5 Dec  5 19:39 hoge.txt
```
ただ、-iのオプションとして渡す時に半角スペースを入れないとご丁寧に-eを語尾につけたファイルをバックアップとして作成してくれる。

linuxのsedの場合は-iの後に''を指定する必要は無いけど、もしつけた場合は-iとオプションの間に半角スペースを入れては行けない。
Swift でアラートを出す（修正）


12月2日に Swift でアラートを出す方法を投稿しましたが、Qiita のnakazy さんからここで使った UIAlertView は非推奨になっているとのご指摘をいただきました。
Class Reference を確認したところ確かに deprecated（非推奨）になっていました。そこで　nakazy さんの教えに従って UIAlertController を使うように変更してみました。UIAlertView の時には Delegate プロトコルなどが必要でしたが、 UIAlertController ではその必要はなさそうです。

最も簡単なエラーメッセージでOKボタンタップで戻るというレベルのアラートだと

               let myAlert = UIAlertController(title: "Data", message: "Invalid Data", preferredStyle: .Alert)
                let defaultAction = UIAlertAction(title: "OK", style: .Default, handler: nil)
                myAlert.addAction(defaultAction)
                
                presentViewController(myAlert, animated: true, completion: nil)

となります。

例では、テキストフィールドへの入力キーボードの上部に Done のボタンをつけ、このボタンをタップすると、データを調べてデータが防いであると、エラーアラートを表示しています。
あらかじめ２つのテキストフィールドをストーリーボードに置いて ViewController クラスにリンクしてあります。

class ViewController: UIViewController, UITextFieldDelegate  {
    
    @IBOutlet weak var myField1: UITextField!   // 入力テキストフィールド
    @IBOutlet weak var myField2: UITextField!   // メッセージ表示フィールド
    

    override func viewDidLoad() {
        super.viewDidLoad()
        
        // ボタンビュー作成
        var myKeyboard = UIView(frame: CGRectMake(0, 0, 320, 40))
        myKeyboard.backgroundColor = UIColor.darkGrayColor()
        
        // Doneボタン作成
        var myButton = UIButton(frame: CGRectMake(5, 5, 80, 30))
        myButton.backgroundColor = UIColor.lightGrayColor()
        myButton.setTitle("Done", forState: UIControlState.Normal)
        myButton.addTarget(self, action: "onMyButton", forControlEvents: UIControlEvents.TouchUpInside)
        
        // ボタンをビューに追加
        myKeyboard.addSubview(myButton)
        
        // ビューをフィールドに設定
        myField1.inputAccessoryView = myKeyboard
        myField1.delegate = self
        myField2.inputAccessoryView = myKeyboard
        myField2.delegate = self
        
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        
    }

    // Done ボタンタップ時に実行するメソッド
    func onMyButton () {
        if myField1.editing {
            var tmpValue: Double = NSString(string: myField1.text).doubleValue
            if tmpValue <= 0 {
                let myAlert = UIAlertController(title: "Data", message: "Invalid Data", preferredStyle: .Alert)
                let defaultAction = UIAlertAction(title: "OK", style: .Default, handler: nil)
                myAlert.addAction(defaultAction)
                
                presentViewController(myAlert, animated: true, completion: nil)
                
            } else {
                self.view.endEditing(true )
            }
            
        } else {
            myField1.text = "Not Editing"
        }
        if myField2.editing {
            myField2.text = "Editing"
        } else {
            myField2.text = "Not Editing"
        }
    self.view.endEditing(true )
    }
    
    
    // リターンキーでのデリゲートメソッド
    func textFieldShouldReturn(textField: UITextField) -> Bool {
        self.view.endEditing( true )
        return false
    }

}
PivotalのMulti-Project Workspaceが便利すぎる理由


Pivotal便利ですよね。シンプルな昨日のみを提供しているだけでありますが、アジャイル開発をよりスマートに行うためにはうってつけのタスク管理だと思います。

今日は、今実際に使ってみてとてもオススメしたい「 **Multi-Project Workspace** 」というbeta機能の紹介になります。Pivotal興味ある人とか、使っているけどMulti-Project Workspaceは使ってない人などの参考になれば幸いです。

`※現時点で、AdventCalendarには2つの投稿しか予定されていませんが、負けじと投稿したいと思います。笑`

## 紹介する内容
おそらく本来はその名の通り「複数のプロジェクト」を管理しやすくするためのものですが、今回紹介する方法は少しトリッキーな使い方です。

「 **ひとつのプロジェクトだけど、メンバーのタイプ毎にプロジェクトを分けてMulti-Project Workspaceで管理する** 」

という内容を紹介します。

## この記事の対象
- Pivotal使ったことある / Pivotal興味ある人

## 伝えたいこと
- Multi-Project Workspace機能を使ってみたら、プロジェクト管理がとても楽になった。

## Multi-Project Workspaceとは？
簡単に説明すると、「複数のProjectを１つの画面で管理できる」というものです。そのままですねｗ

## オススメしたい開発メンバー構成
以下のようなチーム体制で開発しているかたには特にオススメしたいです。
- 少人数制の開発チーム
- アジャイル形式(Pivotal使うなら当たり前ですが）

## 実際に、どうやって使っているか
では、実際例で紹介します。

今は、「emosi」というiOSアプリ開発チームに所属しているので、実際にどうやって使っているか紹介したいと思います。

![スクリーンショット 2014-12-05 19.03.41.png](https://qiita-image-store.s3.amazonaws.com/0/11726/57a3db75-b21d-089d-8baf-2932c06b213c.png "スクリーンショット 2014-12-05 19.03.41.png")

### EMOSI_DESIGN プロジェクト
デザイナーが担当になるタスクを管理するプロジェクトになります。

- スタイルガイド
- モック作成
- バナー作成
- ペーパープロトタイプ

みたいな、見積もり精度を向上させたいけどなかなかうまくいかないってなりがちなタスクもちゃんとタスク化して管理できるので、デザインタスクなどを別プロジェクトにするのはオススメです。

### EMOSI_APP プロジェクト
ネイティブ側のエンジニアが担当するタスクを管理するプロジェクトになります。

- スタイルガイド組み込み
- アニメーション実装
- モック実装
- テスト

など、こちらもサーバーサイドとはコンテキストが違うタスクも区別しておけるので「ネイティブ」と「サーバーサイド」は分けることをオススメします。

### EMOSI プロジェクト
サーバーサイド側のエンジニアが担当するタスクを管理するプロジェクトになります。

- CI環境構築
- インフラ周りタスク
- アプリやAPIの実装
- Webの組み込み

など、サーバーサイドメインのタスクを管理するプロジェクトです。EMOSI_SERVERみたいな名称にしていない理由は以下にかいているIcebox的な部分などが関係してきます。

### Icebox（EMOSIプロジェクトのものを使用）
EMOSIプロジェクトのIceboxを使用しています。それぞれのIceboxを使用しない理由は以下になります。

- Iceboxは施策案などタスク化・Story化していない整理していないものが多い
- イテレーションMTGのタスク作成時にIceboxが１つのほうが割り振りが簡単
- Iceboxのためだけに別Projectを作成するのはナンセンスなのでメインプロジェクトを１つきめてそのIceboxを使う
- 最低4ウィンドウに収まるので、画面の収まりがいい。

## Multi-Project Workspaceを使う理由
### メリット
- VELOCITYが各人でのものになり、明示化されモチベーションや見積もり精度向上に一役かっている
- プロジェクトとしては別で作成しているが、Multi-Project Workspaceを使うことで、まるでひとつのプロジェクトを管理しているかのような感覚でタスク移動や管理が可能になる
- プロジェクト毎に設定が可能になるので、無理にチームで同じ設定にする必要がない。
- Slackなどの連携をProject単位で切り分けれるのでオススメ

### デメリット
- Pivotalが期待している使い方とは違う可能性がある

でもそれくらい。メリットが大きすぎるので継続して使っています。

## ぜひ試してみてください。
どうでしたか？Pivotal試したことのある方なら便利具合が伝わると思います。

まだ使ったことない方はぜひ無料期間を利用してためしてみてください。

## 次回AdventCalendarは19日ｗ
- 現時点では、@muo_jp さんで 「ゆるく実用してる話書きます」だそうです。お楽しみに。
MetroUIcssを使ってみる


MetroUIcssはwindows8のメトロUIのようなUIを実現する。（別にこれである必要は無い）

## 導入

ひとまず、[公式ページ](http://metroui.org.ua/)。


bowerでも使って必要なものをDL。

- jquery
- jqueryui
- metro-ui-css


## 使い方

twitter-bootstrapみたいにgrid-systemやレスポンシブなことができる。（レスポンシブの方は微妙かもしれない）

grid-systemは`.grid`の内部で有効で、その中で、`.span4`などを書くことでtwitter-bootstrap同様のgrid-systemが使える。
D3.js セレクションへのバインド

enterにより矩形やtext描画を繰り返していると、要素がなくなってしまうことがある。
実際は無くなっているのではなくDOM上で要素の\__data__プロパティが重複しているためである。

整理のため以下のようにサンプルを作ってみる。
（キー：\__data__に設定する値とする）

実験1：
キー指定なし、同一配列、同一セレクション

※元のソース

```js
var svg = d3.select("#result")
    .append("svg")
    .attr("width", 500) 
    .attr("height", 500) 
    .style("background-color", "#EEE"); 
var rectArray = [300,200,50,100];

svg.selectAll("rect")
    .data(rectArray)
    .enter()
    .append("rect")
    .attr("x", 50) 
    .attr("y", function(d, index) { return index * 40 + 20; })
    .attr("width", function(d) { return d; })
    .attr("height", 20)
    .attr("fill", "cyan");

// 2回目のenterによるデータバインド
svg.selectAll("rect")
    .data(rectArray)
    .enter()
    .append("rect")
    .attr("x", 50) 
    .attr("y", function(d, index) { return index * 40 + 220; })
    .attr("width", function(d) { return d; })
    .attr("height", 20)
    .attr("fill", "cyan");

```
結果：
2回目のenterでは当然ながらすでに要素があるため処理されない。


実験2：
キー指定なし、同一配列、異なるセレクション
※元のソースの変更箇所

```js
// 2回目のenterによるデータバインド
svg.selectAll("rect.Btype") // セレクションを変更
    .data(rectArrayB)
```
結果：
セレクションが異なるため別な要素として出力される。
しかし、DOM上にはBtypeというプロパティは存在しない。
あくまでセレクションのgroup名がrect.Btypeということになる。


実験3：
キー指定あり、同一配列、同一セレクション
※元のソースの変更箇所

```js
// 2回目のenterによるデータバインド
svg.selectAll("rect")
    .data(rectArray, function(d){return d;})
```
結果：
rectArrayのvalueをそのままキーにしているため、
1回目の\__data__プロパティと重複し、実験1と同様の結果である。


実験3：
キー指定あり、異なる配列、同一セレクション

```js
var rectArrayB = [90,70,50,40];

// 2回目のenterによるデータバインド
svg.selectAll("rect")
    .data(rectArrayB, function(d){return d;})
```
結果：
rectArrayBを新規キーとして扱うが、3番目の値が重複しているため、
新たに追加されるのは3つのrect要素である。

ここでfunction(d){return d;}の役割を知る必要がある。
次のようにしてみる。

```js
var rectArrayB = [90,70,50,40];

// 2回目のenterによるデータバインド
svg.selectAll("rect")
    .data(rectArrayB, function(d){console.log(d); return d;})
```

consoleを見れば一目瞭然だが、1回目のenterの値も出力されている。
どうやら\__data__プロパティの再配置が行われているようである。
しかし、return d+1;などとしてもプロパティの値は変わらないため、
再配置というよりは単にキーの再マッチングというべきか。




参考
http://ja.d3js.info/mike/selection/
http://knowledgestockpile.blogspot.jp/2012/01/understanding-selectall-data-enter.html?m=1
重いTableViewを開く時に体感速度を上げる小ネタ


[Titanium Advent Calendar 2014](http://qiita.com/advent-calendar/2014/titanium) 5日目の記事です。

## はじめに

久々ですが、またTitaniumを使い始めました。
ずいぶん使い勝手が良くなって安定性も向上しておりびっくりしています。

iOSとAndroidの両方への対応がほぼ必須となった現在、Titaniumは非常に有力な選択肢だと思っています。
特にスマートフォンをクライアントと捉える、サーバーサイド主体のWebアプリとの相性は抜群ですね。

わたしはちょっと細かいですが、アプリの質が上がったかなと思える小ネタを紹介します。

## 使えるならListViewを使う

Titaniumでコレクションを扱うUIコンポーネントとして、長い間TableViewが利用されてきましたが、SDK 3.1.0からパフォーマンスや使い勝手が改善されたListViewが登場し、問題はかなり改善されました。

ListViewはテンプレートを事前に定義しておき、そこにデータをバインドすることで高速にUIを構築することが出来ます。
そのため現在では通常ListViewを使うことによって性能の改善が行えます。
しかしListViewはTableViewと異なってRowを動的に書き換えるなどの動作を行うことは出来ません。

そこで、重いTableViewが含まれたWindowを開くときの体感速度を上げる方法です。

## Windowを開いてからTableViewRowを生成する

Alloyフレームワークを使った時の一例です。

```xml
<Alloy>
    <Window id="window">
        <TableView id="table" onClick="openItem">
            <TableViewRow>
                <ActivityIndicator id="indicator" />
            </TableViewRow>
        </TableView>
     </Window>
</Alloy>

```

```javascript
var jsonData = [
    {
        text: 'text1'
    },
    {
        text: 'text2'
    }
];

function createTableData(data) {
    var tableData = [];

    _.each(data, function(v, i) {
        var row = Ti.UI.createTableViewRow({
            rowIndex: i,
            json: v
        });

        var textLabel = Ti.UI.createLabel({
            text: v.text,
        });

        row.add(textLabel);

        // 他にも要素をTableViewRowに追加するなど

        tableData.push(row);
    });

    return tableData;
}

function openItem(e) {
    var item = e.rowData;
    alert(item.json.text);
}

// テーブルの生成を遅延させてウィンドウのOpenを高速化
setTimeout(function() {
    $.table.data = createTableData(jsonData);
}, 100);
```

## 最後のsetTimeoutが肝

最初にViewとなるXMLでTableViewを作成し、RowにActivityIndicatorを入れておきます。
これでRowの1つ目にインジケータが表示されます。
次にTableViewRowを作成する処理は関数化しておき、最後にsetTimeoutで100ms遅延させてから呼び出してTableViewにdataをセットします。

普通はWindowをopenしたとき、TableViewRowが生成されるのを待ってからWindowが開かれるので、タップしてから数秒の待ち時間が発生してしまいます。

しかしsetTimeoutで遅延させることで、まずWindowはタップされたら即時openし、重いTableViewの場合は生成されるまでインジケータが回るので体感速度が大幅に上がって気持ちサクサクになります。

私が調べたところ、iOSではsetTimeoutのウェイト時間は0でもOKでしたがAndroidでは100ms必要でした。

どうしても、重いTableViewを扱わなければならないシーンに出くわしたら思い出して見て下さいね。

## 次は

明日は @ganezasan さんです。よろしくお願いします！
SQLAlchemyを使ってOracleのデータをSQLiteにコピー (試作)

OracleのデータをSQLiteにコピーしていじりかったところにSQLAlchemyがあったので金槌の法則で使ってみました。

SQLAlchemyの0.9.8で試しています。

```python
import re

from sqlalchemy import create_engine
from sqlalchemy.ext.automap import automap_base
from sqlalchemy.dialects.sqlite.base import SQLiteDDLCompiler, SQLiteTypeCompiler

class Oracle2SQLiteTypeCompiler(SQLiteTypeCompiler):
    '''とりいそぎ必要だったカラムだけ考える'''
    def visit_DOUBLE_PRECISION(self, type_):
        pass
    def visit_INTERVAL(self, type_):
        pass
    def visit_LONG(self, type_):
        pass
    def visit_NUMBER(self, type_, **kw):
        return self.visit_NUMERIC(type_)
    def visit_NVARCHAR2(self, type_):
        return self.visit_NVARCHAR(type_)
    def visit_RAW(self, type_):
        pass
    def visit_ROWID(self, type_):
        pass
    def visit_VARCHAR2(self, type_):
        return self.visit_VARCHAR(type_)

TODATE_REGEXP = re.compile("to_date\('([^']+)'")

class Oracle2SQLiteDDLCompiler(SQLiteDDLCompiler):
    '''とりいそぎ必要だったカラムだけ考える'''
    def get_column_default_string(self, column):
        default_clause = super().get_column_default_string(column)
        if default_clause is None:
            return default_clause
        default_clause_lower = default_clause.lower()
        if 'sysdate' in default_clause_lower:
            return 'current_date'
        m = TODATE_REGEXP.match(default_clause_lower)
        if m:
            return "'%s'" % m.group(1)
        return default_clause

from_engine = create_engine('oracle://FROM_DB_USER:PASSWORD@HSOT:PORT/SID')
to_engine = create_engine('sqlite:///to_db.db')

to_engine.dialect.type_compiler = Oracle2SQLiteTypeCompiler(to_engine.dialect)
to_engine.dialect.ddl_compiler = Oracle2SQLiteDDLCompiler

base = automap_base()
base.prepare(from_engine, reflect=True)

table = base.metadata.tables['db_table_name']
table.create(to_engine)

data = from_engine.execute(table.select()).fetchall()
to_engine.execute(table.insert(), data)

```
Ubuntu 14.10 に gurobi 6.0.0 をインストールする

##まえがき

大学の研究でUbuntuにgurobiをインストールする機会があったので，その手順を公開することにしました．
公式リファレンスがしっかりしてるので簡単にインストールできるとは思いますが，日本語による情報が少なかったので少し手間取りました．

##インストール手順
###アカウント登録
まずは，アカウントの登録が必要です．
と言っても，学生であるかの判断にメールアドレスを用いるわけではないのでgmailでも問題ありません．
登録後に送られてくるメールのURLにアクセスしてパスワードを設定しましょう．

###ダウンロード
gurobiのHP内の
Home >Download >Gurobi Optimizer
からLinux64バージョンをダウンロードしましょう．
現在の最新バージョンが6.0.0なので，ダウンロードファイルは
*gurobi6.0.0_linux64.tar.gz*
になると思います．

###インストール
ダウンロードした*gurobi6.0.0_linux64.tar.gz* を/opt直下に移動します.
その後はファイルを解凍して，pythonさんにお願いしてセットアップをしてもらいます．
(Ubuntuはデフォルトでpythonがインストールされていたと思います．多分．）

```
$ sudo mv gurobi6.0.0_linux64.tar.gz /opt
$ sudo tar xvfz /opt/gurobi6.0.0_linux64.tar.gz /opt
$ sudo python /opt/gurobi600/linux64/setup.py install
```

###環境変数の設定
環境変数がどうにも苦手な私です．
（前に設定をミスってコマンドが何も使えなくなる恐怖を味わって以来，どうもトラウマです．笑）

bashを使っている人は~/.bashrc，zshを使っている人は~/.zshrc，cshを（以下略）
自分の使っているシェルのシェルのrcの末尾に以下の３行の文を叩き込んで下さい．

```
$ export GUROBI_HOME="/opt/gurobi600/linux64"
$ export PATH="${PATH}:${GUROBI_HOME}/bin"
$ export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${GUROBI_HOME}/lib"
```
そしてシェルの再起動，これでほとんど設定は終わりました．

###ライセンスの取得
また，gurobiのHPに戻ります．
Home >Download >Licenses >Free Academic 
に移動します．
２つのチェックボックスにチェックを入れて，*Request License*を行います．
アカデミックじゃない方も適当に頑張ってください．

すると
*grbgetkey* \*\*\*\*\*\*\*-\*\*\*\*-\*\*\*\*-\*\*\*\*-\*\*\*\*\*\*\*\*\*\*\*\**
このような形式で，ライセンスキーが発行されます．
このコマンドをホームディレクトリにて実行，これでインストール終了です！

```
$ cd ~
$ grbgetkey *******-****-****-****-************
```
###テスト
gurobiには専用シェルが存在するので，それを起動することでインストールできたかのチェックが出来ます．
```
$ gurobi.sh
```
と入力することで，以下の様な出力がありましたでしょうか？

```
Python 2.7.8 (default, Oct 28 2014, 12:34:31)
[GCC 4.2.4 (Ubuntu 4.2.4-1ubuntu4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.

Gurobi Interactive Shell (linux64), Version 6.0.0
Copyright (c) 2014, Gurobi Optimization, Inc.
Type "help()" for help

gurobi>
```

##あとがき
お疲れ様でした，
私は公式リファレンスだけでは理解ができず，英語サイトからインストール方法を引っ張ってくるハメになってしまいました…
慣れればサクサクと環境構築できるようになるのかもしれませんね，精進します．
他の最適化ライブラリも試してみたいと思ってるので，情報が少ない場合は同じように投下したいと思います．
再帰とジェネレータの組み合わせ

※この投稿はQiitaのテストです。

再帰とジェネレータを組み合わせることでシンプルな構造で再帰を表現できる場合がある。

#正規表現の再帰
正規表現で再帰的な括弧の対応を取るのは困難。PHPやRubyでは正規表現に専用の構文があるがPythonにはない。
再帰関数を使うことでかなり簡単に括弧の対応が取れる。

```py3
import re
prog = re.compile(r"\((.+)\)")

def rec_search(s):
    "丸括弧を再帰的に取得してリストで返す"
    match = prog.search(s)
    r = []
    if match:
        r.append(match)
        for i in rec_search(match.group(1)):
            r.append(i)
    return r
```

リストを作成して呼び出し元に返すようにしている。ちょっと見た目が汚い。

#ジェネレータと組み合わせる

```py3
import re
prog = re.compile(r"\((.+)\)")

def recsearch(s):
    "丸括弧を再帰的に取得してイテレートする"
    match = prog.search(s)
    if match:
        yield match
        for i in rec_search(match.group(1)):
            yield i
```

相当シンプルになった。値を`yield`したらその値を捨ててしまって良いので簡単になる。
注意するとこは`rec_search`はジェネレータなので呼び出し元に返すように`yield`すること。そうしないとなにもしない関数呼び出しが発生して終了してしまう。

##実行結果

```py3
>>> for i in rec_search("(1 + (1 + 2))"):
	print(i)

<_sre.SRE_Match object; span=(0, 13), match='(1 + (1 + 2))'>
<_sre.SRE_Match object; span=(4, 11), match='(1 + 2)'>
```

#yield fromでさらにシンプルにする
python3.3で登場した。`yield from`で指定したジェネレータ関数を実行して結果が全て返るまで呼び出し元で待つ。
上記の関数の`yiled from`使用版。

```py3
import re
prog = re.compile(r"\((.+)\)")

def rec_search(s):
    "丸括弧を再帰的に取得してイテレートする"
    match = prog.search(s)
    if match:
        yield match
        yield from rec_search(match.group(1))
```

さらに短くシンプルになった。
#ファイル名を再帰で取得する

```py3
import os

def iter(dirctory):
    "directory以下全てのファイルをイテレートする"
    d = os.listdir(dirctory)
    if d:
        for f in (os.path.join(dirctory, f) for f in d):
            if os.path.isfile(f):
                yield f
            elif os.path.isdir(f):
                yield from iter(f):
```

`os.listdir`関数だけ使って再帰的に取得する例。
ファイルかフォルダかを判定してフォルダならもう一度再帰呼び出しをしている。

#おわり
最近再帰を覚えていろいろとやってみた。
正規表現は構文解析使った方がいいしファイル名の取得は`pathlib.Path().glob`で出来るのであんまし実用性はない…。
Sqlite.Net: 結果  のメッセージ:	System.DllNotFoundException : DLL ”sqlite3”を読み込めません:指定されたモジュールが見つかりません。 (HRESULT からの例外:0x8007007E)


# 現象

- Xamarin Mac でうごいているプロジェクト
- Visual Studio Community 2013 で表題のメッセージでエラー
- PCLなので

```
var sqlite = new SQLite.Net.Platform.Generic.SQLitePlatformGeneric ();
```

- 要するに sqlite3.dll のロードに失敗している

# 対応

- https://www.sqlite.org/download.html
- "Precompiled Binaries for Windows"
- sqlite-dll-win32-x86-3080702.zip　(とか) をダウンロード
- 解凍
- sqlite3.dll をコピー

	32bit版OSの場合は「C:¥Windows¥System32」
	
	64bit版OSの場合は「C:¥Windows¥SysWOW64」
SwiftでiPhoneとiPadを判別する

UIDeviceクラスのUIUserInterfaceIdiomを使います。

```swift

enum UIUserInterfaceIdiom : Int {
    case Unspecified

    case Phone // iPhone and iPod
    case Pad // iPad
}
```
このような定義があるので、判別は下記のようにかけます。


```swift
if UIDevice.currentDevice().userInterfaceIdiom == .Phone {
    println("iPhone")
}else if UIDevice.currentDevice().userInterfaceIdiom == .Pad{
    println("iPad")
}else{
    println("Unspecified")
}
```


公式リファレンス：UIDevice
https://developer.apple.com/library/ios/documentation/Uikit/reference/UIDevice_Class/index.html#//apple_ref/c/tdef/UIUserInterfaceIdiom
CodePro AnalytiXを使ってネストが深いメソッドや類似コードを発見して、ざくざくリファクタリングしよう

EclipseのCodePro AnalytiXというプラグインがあります。

できることは

1. パフォーマンスや保守性などに問題がある個所を発見
2. 各種メトリクス計測
3. 類似コード検索

リファクタリングしたい箇所をざくざく発見して
リファクタリングしたい欲求を高めることができたので紹介します。
他にも

* テストコードの自動生成
* 依存関係の図示
* スペルチェック

といった機能があるらしいです。

# パフォーマンスなどに問題がある個所を教えてもらう
プラグインをインストールしたら、
プロジェクト右クリック -> CodePro Tools -> Audit Code
で実行できます。
結果は

![audit-code.png](https://qiita-image-store.s3.amazonaws.com/0/44676/274aaea5-8b71-1e43-17d2-5a7ccebe93fa.png)


というように表示されます。モザイク部分はファイル名です。
上の画像の左半分は、指摘事項と、対応箇所です。
右半分は、なぜそんな指摘をするのかの理由の説明になっています。

* 長さが1のStringはcharにしよう
* try-catchのcatch節で何もしていない
* 不要なcastがある
* 配列をコピーするときには`System#arraycopy()`を使おう

といったことを指摘されています。

指摘ルールのプリセットも用意されています。
「Effective Java」というルールでは、「Effective Java」という書籍で挙げられている原則を守っているかどうかのチェックができます。
「Effective Java」は読んだことがあるのにもかかわらず、自分で指摘事項に気が付かないところが結構あったので、軽くショックを受けました。

ルールは、設定画面から自分で設定することもできます。
![audit-code-rule-edit.png](https://qiita-image-store.s3.amazonaws.com/0/44676/77ac310d-1af4-d012-737e-66c81415d6f8.png)


# 各種メトリクス計測
プロジェクト右クリック-> CodePro Tools -> Compute Metrics
![metrics.png](https://qiita-image-store.s3.amazonaws.com/0/44676/543b9b4c-b831-3fb9-a132-9164eca7fb82.png)
という具合に結果がわかります。
上の例では

* パッケージやクラスごとのネストの深さの平均
* サイクロマチック複雑度
* パッケージやクラスごとのメソッド数・フィールド数・メソッドの引数の数の平均・合計

などがわかります。
上の例だと、パッケージごとのフィールドの数の平均を見ています。
プロジェクトの平均が3.48ですが、特定のクラスのフィールドの数が19で、平均を押し上げていることがわかりました。
特定のクラスだけ突出しているのは、ちょっと怪しいですよね。
いわゆるServiceなど、ステートレスに保ちたいクラスがステートの制限を受けて汚れていくのを発見できたりします。

30個くらいの測定項目を、それぞれ、測定ON/OFFできます。

やたらと引数が多いメソッドを発見したり、やたらと行数が長いメソッドを発見したりできます。

# 類似コード検索
プロジェクト右クリック-> CodePro Tools -> Find Similar Code
似ているコードを探し出して、diffを取って見せてくれます。
似ているコードはこのように比較して見ることができます。
![similar-code.png](https://qiita-image-store.s3.amazonaws.com/0/44676/a2bab47b-bb5e-9987-693f-4f456bcf52a2.png)
あとで共通化しようとして忘れていたコードを、発見できたりします。

# インストール方法
普通のプラグインと同じです。
かつてはある企業が開発して有償で販売していたそうです。
今では、Googleが無償で配布しています。
[公式サイトの説明はここです](https://developers.google.com/java-dev-tools/download-codepro?hl=ja)。
実は開発が停止しているようですが Eclipse Luna では便利に使えています。
Windowsに入れたboot2dockerに同一ネットワーク上の別のPCからアクセスしたい



1. SSHの鍵の場所やSSHのポート番号を確認。

	```sh
	boot2docker config
	```
1. VirtualBoxを起動し、boot2dockerを動かしているVMの設定を変更
	設定 > ネットワーク > ポートフォワーディング
	
	デフォルトでは`127.0.0.1`からのみアクセスできるようになってるので空欄に。
1. (1)の鍵を別のPCへ持って行って
	
	```sh
	ssh -i ${boot2dockerの鍵} -p ${boot2dockerのポート} docker@${WindowsのIP}
	```
	
で、いけた。

※FWがある場合は別途そっちも開けてあげないといけないかもしれない。
【Swift】乱数を発生させfor文で任意数を配列に追加

#乱数を発生させfor文で任意数を配列に追加

##コード
```
// 空の配列を宣言
var Array: [Int] = []

for (var i = 0; i < 10; i++) {

	//乱数を生成
	var rand = Int(arc4random_uniform(UInt32(10)))

	//乱数を配列に格納
	Array.append(rand)
}

//配列を表示
println(Array)
```

##結果
```
[6, 8, 1, 0, 5, 4, 0, 3, 3, 9]

```

##メモ
```
arc4randomの戻り値がUInt32なので最大数値の値も合わせる必要があった。

```


##参考
[Swift] 乱数取得でキャストにハマったのでメモ(arc4random)
http://qiita.com/m-tsuchiya/items/37c0c1b52f0dd70e190d
動作中のDockerコンテナとホストでファイルをやりとりしたい

## 2016/12/05追記
`docker cp`がどっちもイケるようになったのでこの記事の情報量は0です

## 動作中のコンテナ内からファイルを持ってくるには

```sh
docker cp ${container_id}:${file_path} ${host_path}
```

## 動作中のコンテナ内へファイルを持っていくには

```sh
docker exec -i ${container_id} /bin/bash -c 'cat >file' <file
```

これである程度なんとかなる。

っていうのを [Copying files from host to docker container](http://stackoverflow.com/questions/22907231/copying-files-from-host-to-docker-container) で発見したのであった。
html：pdfの特定ページを指定して表示する。から始まり様々なオプションを指定して表示する。

実は様々なオプションが用意されている。
pdfをリンク表示する際に、クエリストリングで指定する。


　●初期表示ページと表示方法を指定した例

```html
<iframe style="height:80%; width:80%" src="http://sample/テスト.pdf#page=62&pagemode=none"></iframe>
```



　●特定の場所へのリンクを作成する方法

http://helpx.adobe.com/jp/acrobat/kb/226119.html



　●多くのパラメータが載っている公式ドキュメント

http://partners.adobe.com/public/developer/en/acrobat/PDFOpenParameters.pdf
フォルダのコンテキストメニューから「管理者モードのコマンドプロンプト」を開く

エクスプローラでフォルダを選択した状態から、[Shift]+右クリックでコンテキストメニューに「コマンドウィンドウをここで開く」が追加される。選択したフォルダをカレントフォルダにした状態でコマンドプロンプトを開ける。コマンドラインで作業をしたい場合に便利。

コマンドプロンプトを管理者モードで開きたい場合は、以下の手順でコンテキストメニューにさらに追加できる。
注意：レジストリの変更は自己責任で

レジストリエディタを使って、「 HKEY_CLASSES_ROOT\Directory\shell\cmd 」をhoge.regとかのファイル名でエクスポートする。
エクスポートしたhoge.regをメモ帳で開くと以下のようになっているはず。（中身はUnicodeテキスト）

``` 
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\shell\cmd]
@="@shell32.dll,-8506"
"Extended"=""
"NoWorkingDirectory"=""

[HKEY_CLASSES_ROOT\Directory\shell\cmd\command]
@="cmd.exe /s /k pushd \"%V\""
```
これを以下のように修正する。

```
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\shell\runas]
@="コマンド ウィンドウを管理者として開く"
"Extended"=""
"NoWorkingDirectory"=""

[HKEY_CLASSES_ROOT\Directory\shell\runas\command]
@="cmd.exe /s /k pushd \"%V\""
```
* キー中の``` cmd ```を``` runas ```に修正（２箇所）
* ``` @shell32.dll,-8506 ```の部分を``` コマンド ウィンドウを管理者として開く ```に修正（この文字列がメニューに表示される）

修正後のhoge.regをダブルクリックするとレジストリに登録され、[Shift]+右クリックのコンテキストメニューから管理者モードのコマンドプロンプトを開けるようになる。
ImageViewでcontentDescription警告


# 概要
AndroidStudioでlayoutを編集中にcontentDescriptionが無いと警告がでた。

# 警告の意味
contentDescriptionはアクセシビリティに関する属性で、Android4.0で追加された 「Explore-by-touch mode」が有効な場合、ユーザがタッチした要素のcontentDescriptionにセットされた説明文が読み上げられる。

# 対処方法
警告なので特に何もしなくても問題はない。Lollipopでは「Explore-by-touch mode」を見つけられなかった。

# 参考
* http://techbooster.jpn.org/andriod/ui/10250/
Could not open buildscript class cache for settingsと表示された場合の対処方法


# 概要
AndroidStudioでビルドを行った際に「Could not open buildscript class cache for settings」と表示されてビルドが失敗した。

# 対処方法
再起動で直った。Gradleのビルドを途中で止めた時からエラーが発生したので、AndroidStudioがGradleのプロセスの終了を上手く出来なかったのが原因だと思われる。
jQuery：あるDOM要素の祖先に特定のDOM要素があることを調べる。

jQueryオブジェクトのclosest("セレクタ")メソッドで、特定の親要素を取得することが可能。
よって、以下のように使用する。

```js:使用方法
if($("あるDOM要素のセレクタ").closest("特定の親DOM要素のセレクタ").length > 0){
 alert('親DOM要素に特定のものが存在します！');
}
```

```js:例
if($("#childElement").closest(".SpecialParent").length > 0){
 alert('SpecialParent発見');
}
```
composer.lockはバージョン管理した方がいいよ

タイトルの通り、composer.lockはバージョン管理するのが中の人もオススメです。これはComposerのドキュメント「[Basic usage](https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file)」に書いてあります。


フレームワークやライブラリの場合はまた考え方が別になることもあると思いますが、複数人で開発してデプロイするようなアプリケーションの場合はバージョン管理した方がいいと思います。
std::tupleに要素を追加する

std::tupleはテンプレートメタプログラミングにおいて型リストとしての側面があります。
可変長テンプレート引数をそのままtypedefすることは出来ないので、std::tupleにくるんであげるわけですね。

tupleの要素数はstd::tuple_sizeで、N番目の要素はstd::tuple_elementで得ることができます。

そこで、型の操作として比較的ありがちなものとして、型の追加をするtuple_addを考えてみました。

```
//
// tupleに型を追加する
template < class... >
struct tuple_add {};
template < class... Tuple, class... Args >
struct tuple_add < std::tuple < Tuple... >, Args... >
{
  using type = std::tuple < Tuple..., Args... >;
};
//
// 2項のtupleの合成
template < class... Tuple1, class... Tuple2 >
struct tuple_add <
  std::tuple < Tuple1... >, 
  std::tuple < Tuple2... > >
{
  using type = std::tuple < Tuple1..., Tuple2... >;
};
template < class... Args >
using tuple_add_t = typename tuple_add < Ty >::type;
```

第一引数にstd::tupleが来て特殊化される前提になっています。第二引数以降の型は全てtupleに追加されます。また、第二引数もstd::tupleだった場合はその要素を合成します。
std::tupleでなくても型リストとみなせれば全て合成できるようにしようかとも思ったのですが、それだと意図しない合成が起こる可能性があったので、合成したいものは個別に特殊化を書くべきということにしました。
また、その関係でtuple_addでは二項に限定されてしまっています。ラッパをかけば解決しますが、そんなにじゃんじゃか合成することは少ないしネストすれば済むしでそんなに困りません。

```
using t1 = std::tuple < char, short >;
using t2 = add_tuple_t < t1, int, long >;
// t2 is std::tuple < char, short, int, long >
using t3 = add_tuple_t < t1, t2 >; // ながい
using t4 = add_tuple_t < add_tuple_t < t1, t2 >, t3 >; // とてもながい
```

こんな感じです。
ここまで書いて思いましたが、追加と合成はわけたほうがよかったかもしれません。
ではではでは。
Should Component Update? React isn't very fast by default.

*This was originally posted as a gist and shared with people in ReactDC here: https://gist.github.com/kimagure/79b0aed0d90641726b91*

The default behavior of React is actually not very fast.

This is especially the case when you have a list or table with lots of elements to represent data.  Most of the data may not be changing, but the portions that do will need to get data passed down from the parent. But since the parent needs to render all the siblings of the changed element, having React reuse `render()` results on the siblings that haven't changed is very useful.

Good React Components are functions of only their props and state, and in those cases you will inevitably end up going through the same `render()` calls which are unnecessary and they provide the same output.

Luckily, with `shouldComponentUpdate`, you can make React skip wasteful extra `render()` calls. By comparing your components' previous and current props/state, you can tell React to skip computation of entire trees' worth of elements and cut down and cost.

But how do you do a performant comparison between props and state? Doing a true deep comparison between the previous and current props/state might take just as long as it does to just call `render()` again on the component. This is when using immutable data can help.

If we can just do comparisons of object references, that's going to be a lot faster than trying to do deep compares. But this does require discipline on your part -- you're not longer allowed to change values when you do this. Instead, every time you make a change, you need to invalidate the object reference by assigning a new object to replace the old object.

I hope you'll find this interactive demo a good introduction to using `shouldComponentUpdate` and immutable data. Once you feel comfortable with the ideas presented here, try using the provided modules in React:

* React.addons.update (react/lib/update) -- immutability helper for making controlled changes to a data structure
* React.addons.PureRenderMixin (react/lib/ReactComponentWithPureRenderMixin) -- mixin for doing shallow data comparisons with `shouldComponentUpdate` for rendering "pure" components


## Demo:

http://jsbin.com/cobiyi/1/edit?js,output


## References:

https://facebook.github.io/react/docs/pure-render-mixin.html
https://facebook.github.io/react/docs/update.html
[iOS] Swiftで文字列から任意の文字列を取得・残す方法

文字列から文字列を取得するには大きく２つやり方があります。

・取得元から範囲を指定して、新たに変数へ代入する方法
・取得元から不要な文字列を削除し、任意の文字列を残す方法
&nbsp;
##1 取得元の文字列は不変##
####・先頭からの取得範囲を指定 ####
関数：substringToIndex（from: String.Index）

```
let str = "Hello World!"

(str as NSString).substringToIndex(5)             // Hello
str.substringToIndex(advance(str.startIndex, 5))  // Hello
"Hello World!".substringToIndex(5)                // Hello
```
&nbsp;
###・スタート地点を指定しそれ以降を全て取得
関数：substringFromIndex(to: String.Index)

```
let str2 = "Hello World!"

(str2 as NSString).substringFromIndex(5)              // World!
str2.substringFromIndex(advance(str2.startIndex, 5))  // World!
"Hello World!".substringFromIndex(5)                  // World!
```
&nbsp;
###・先頭からの取得範囲を指定
関数：substringWithRange(range: NSRange)

```
let str    = "Hello World!"

let getStr = (str as NSString).substringWithRange(NSRange(location: 5, length: 7))  // World!
"Hello World!".substringWithRange(NSRange(location: 5, length: 7))                  // World!
```
&nbsp;
##2 一文字だけ取得
###・頭文字
```
let str = "Hello, World!"
str[str.startIndex]  // "H"
```
&nbsp;
###・任意の場所
```
let str = "Hello, World!"
str[advance(str.startIndex, 5)]  // "."
```


##3 取得元の文字列を変える ##
・指定範囲を削除 = 必要なものを残す

```
// String型
var str = "Hello World!"
str.removeRange(str.startIndex..<advance(str.startIndex, 5))  // str = " World!"

//MutableString型
let str:NSMutableString = "Hello World!"                     
str.deleteCharactersInRange(NSRange(location: 0,length: 5))     // str = " World!"
```
&nbsp;

####※こちらの記事を参考にさせていただきました####
String.substring〜の使い方
http://qiita.com/takmaru/items/2442ad5eb0f76815e1b3  
[Swift]Stringから1文字目を取り出す方法メモ
http://qiita.com/iKichiemon/items/4736110a80dab10177ea
[socket] send()でシグナルが出されて困った件

久しぶりに小ネタです。

Windowsでの Socket(WSOCK系)はバークレーソケットな仕様なので、あまり手を加えずにLinuxやらその他に移植ができますが、ちょっとした落とし穴にハマったので、備忘録ついでに。

WindowsのあるコードからLinuxに移植したプロセスを動かしていると、切断テストをしたときに、時々なんか落ちるという事態に遭遇。。。

Windowsで同じようなプログラムを組んでもちゃんとsend()からエラーが帰ってきてしかるべき処理ができているのになぁ…といった具合でした。



で、よくよく調べてみると、send関数はこちらがsendの最中に相手側からの不意な切断があった場合にSIGPIPEが発生するということが判明。

man send をよくみたらこんなことがかいてありました。。

```console:
フラグ引き数
 flags 引き数は、以下のフラグの (0 個以上の) ビット単位の論理和を とったものを指定する。
（略）

MSG_NOSIGNAL (Linux 2.2 以降)
 ストリーム指向のソケットで相手側が接続を切断した時に、エラーとして SIGPIPE を送信しないように要求する。この場合でも EPIPE は返される。
```

あー、やっぱりmanはちゃんと見なきゃいけないなぁと思った次第。

対処法としては、sendのflags引数に`MSG_NOSIGNAL`を追加するか、`signal(SIGPIPE,ハンドラ)`とかやって、ハンドラ関数で適切に処理することぐらいですね。。

`MSG_NOSIGNAL`を設定しても途中で送信切断が帰ってきたらエラー普通に戻ってきますので、良さそうな感じではあります。


ちなみに、Windows Socket(WSOCK系)には当然こんなものはないので、移植には注意ということでした。
amazon product advertising api python

アフリィエイトサイトを作ってみようと思い、amazonの商品検索apiをpythonで叩いてみました。

他のapiと異なり、オフィシャルの情報が読む気になれない。。。

なので、似たような方に少しでも役に立てばとメモ程度ですが、書いておきます。

```lang:python
from bottlenose import api
from bs4 import BeautifulSoup
def getAmazon(kwd):
    AMAZON_ACCESS_KEY_ID="AMAZON_ACCESS_KEY_ID"
    AMAZON_SECRET_KEY="AMAZON_SECRET_KEY"
    AMAZON_ASSOC_TAG="AMAZON_ASSOC_TAG"
    SEARCH_INDEX = "All"

    amazon = api.Amazon(AMAZON_ACCESS_KEY_ID, AMAZON_SECRET_KEY, AMAZON_ASSOC_TAG, Region="JP")
        datas = []
        if not datas or nocache:
            response = amazon.ItemSearch(SearchIndex=SEARCH_INDEX, Keywords=kwd, ItemPage=1, ResponseGroup="Large")
            soup = BeautifulSoup(response)
            datas = soup.findAll('item')

        print "アマゾン件数", len(datas)

```

ソートを設定して、データを取得したかったのですが、指定するとなぜか戻りが０件になってしまいました。。

上記を使用して、作ったサイトです。
http://doggy-shop.jp/
[iOS] Swiftで文字列の長さを取得する

playground上での表記です。
利用できる関数は３つあります。

##1. utf16Count ##
・処理速度：最速
・絵文字　：1に対して,~~2と計算~~1,2,4など絵文字によって変化

```
"⏩".utf16Count      // 1 
"?".utf16Count      // 2
"123".utf16Count    // 3
"ABC".utf16Count    // 3
"あいう".utf16Count  // 3
```
![スクリーンショット 2014-12-17 16.50.31.png](https://qiita-image-store.s3.amazonaws.com/0/61148/3d6d1b8b-8a7e-d2da-a17c-e84247ee3a6b.png)



##2. countElements ##
・処理速度：2番目に早い
・絵文字　：1に対して1と計算

```
countElements("?")      // 1
countElements("?")      // 1
countElements("123")    // 3
countElements("ABC")    // 3
countElements("あいう")  // 3
```

##3. lengthOfBytesUsingEncoding ##
特徴
・処理速度：最も遅い
・平仮名と絵文字が読み込めない => 0

```
"?".lengthOfBytesUsingEncoding(NSStringEncoding.allZeros)      // 0
"?".lengthOfBytesUsingEncoding(NSStringEncoding.allZeros)      // 0
"123".lengthOfBytesUsingEncoding(NSStringEncoding.allZeros)    // 3
"ABC".lengthOfBytesUsingEncoding(NSStringEncoding.allZeros)    // 3
"あいう".lengthOfBytesUsingEncoding(NSStringEncoding.allZeros)  // 0
```
&nbsp;
Rubyの配列からシンボルキーのハッシュを作る方法

ArrayをHash化する方法は有名ですが、キー(添え字)を文字列として合体させる方法を多く見かけます。
しかしキーをSymbolする方法はあまり見かけないので、試してみました。

## 一般的なユースケース

その1：transposeを使う

```ruby
keys = ["suzuki", "itou", "yamada"]
values = [87, 76, 69]
key_value_pairs = [keys, values].transpose
h = Hash[*key_value_pairs.flatten]
```

この実行結果は次の通りです。

```ruby
key_value_pairs = [keys, values].transpose
=> [["suzuki", 87], ["itou", 76], ["yamada", 69]]

h = Hash[*key_value_pairs.flatten]
=> {"suzuki"=>87, "itou"=>76, "yamada"=>69}
```

その2：collectとzipを使う

```ruby
keys = ["suzuki", "itou", "yamada"]
values = [87, 76, 69]
h = Hash[keys.collect.zip(values)]
```

この実行結果は上記と同様ですが次の通りです。

```ruby
h = Hash[keys.collect.zip(values)]
=> {"suzuki"=>87, "itou"=>76, "yamada"=>69}
```

## キーをシンボル化してハッシュを作る

その1。違いはkeysの中身だけです。

```ruby
keys = [:suzuki, :itou, :yamada]
values = [87, 76, 69]
key_value_pairs = [keys, values].transpose
h = Hash[*key_value_pairs.flatten]
```

この実行結果は次の通りです。

```ruby
key_value_pairs = [keys, values].transpose
=> [[:suzuki, 87], [:itou, 76], [:yamada, 69]]

h = Hash[*key_value_pairs.flatten]
=> {:suzuki=>87, :itou=>76, :yamada=>69}
```

その2。keysは文字列ではあるが、それをSymbol化しつつハッシュを作る例は次の通りです。

```ruby
keys = ["suzuki", "itou", "yamada"]
values = [87, 76, 69]
key_value_pairs = [keys.collect(&:to_sym), values].transpose
h = Hash[*key_value_pairs.flatten]

# zipを用いるとより短く書けます
# keys = ["suzuki", "itou", "yamada"]
# values = [87, 76, 69]
# Hash[keys.collect(&:to_sym).zip(values)]
```

この実行結果は次の通りです。

```ruby
key_value_pairs = [keys.collect(&:to_sym), values].transpose
=> [[:suzuki, 87], [:itou, 76], [:yamada, 69]]

h = Hash[*key_value_pairs.flatten]
=> {:suzuki=>87, :itou=>76, :yamada=>69}
```

同様にCSVデータのような2次元配列に対しても適用できます。

```ruby
header = [:id, :score]
records = [1, 12], [2, 23], [3, 34]
records.each do |row|
  p Hash[*[header, row].transpose.flatten]
  # 次のようにも記述できます。
  # p [header, row].transpose.to_h
end
```

この実行結果は次の通りです。スッキリしましたね〜。

```ruby
{:id=>1, :score=>12}
{:id=>2, :score=>23}
{:id=>3, :score=>34}
```

なお、Symbolは便利ですがGCまわりの事にもケアしながら利用できると良さそうです！

## 参考サイト

http://www.rubylife.jp/ini/hash_class/index7.html
[iOS8] Swiftで文字列と数値の型変換する方法

Swiftで文字列と数値の相互変換する方法をサンプルコードを利用して説明します。
・数値 --&gt; String
・String --&gt; 数値


<h2>数値 --&gt; String</h2>
<pre class="lang:default decode:true">let num  = -1.23
let str  = num.description // "-1.23"
</pre>
String(num)でも文字列化はできますが、少数やマイナス値にはエラーになるため、descriptionを利用します。

その他、数値の型の変換は型名（）で変換可能です。
<pre class="lang:default decode:true ">let num = 123
float_t(num)   // 123.0
double_t(num)  // 123.0
</pre>&nbsp;<h2>String --&gt; 数値</h2><pre class="lang:default decode:true">let str = "123"
let intFromStr   = str.toInt()! + 1  // 124
let intFromOpStr = str.toInt()       // Optional(123)
</pre>
toString()に対して「！」を付けない場合は、optional型に変換されます。
&nbsp;
コマンドライン文字列をリストに変換する

やりたいこと
----------

```el
(shell-split-string "abc  'def   dee'") => '("abc" "def   dee")
```




実装
----


```el
(defun shell-split-string (str)
  "Split string STR into a list of strings by shell."
  (let ((emacs-bin (concat invocation-directory
                           invocation-name)))
    (cdr (read (shell-command-to-string (concat emacs-bin
                                                " -Q --batch --eval '(prin1 command-line-args-left)' -- "
                                                str
                                                " 2>/dev/null"))))))
```

もっといい方法を募集します。
Android Lのプレビュー版のファクトリーイメージで起きた事

#AndroidLのプレビュー版のファクトリーイメージで起きた事
メモっておく。
一度、手元のNexsus５が全部Lのプレビュー版になっちゃいまして。
１台直したら、そっちは他にいってしまい。

##カメラのIntent連携で強制終了

自分のアプリから

```
intent.setAction("android.media.action.IMAGE_CAPTURE");
```
を設定してカメラを起動するとある時から突然カメラ側でExceptionを起こすようになった。

##SwitchボタンのPaddingが効かない
白い背景色が描画されてしまい、ボタンの周りに枠ができ、一緒に移動してしまう。

##アニメーションによって描画がチラツク
処理が最適じゃなかったというのもあるが、Nexsus5のAndroid L プレビュー版焼いた方だけ！

#Android LoliPopのファクトリーイメージに焼き直したらどうなったか
全部直りました！
ありがとうございました！

#結論
ミーハー(死後)は、まじ怖い。
次は１台は正規イメージを死守する。