OmniAICreator/Qiita-1.07M huggingface dataset:
C++関連の略語

|略語|意味|
|:--:|:---|
| ADL | Argument Dependent name Lookup |
| AFT | Abbreviated Function Template |
| BMI | Binary Module Interface |
| COW | Copy On Write |
| CRTP | Curiously Recurring Template Pattern |
| CTAD | Class Template Argument Deduction |
| ctor | constructor |
| dtor | destructor |
| EBO | Empty Base Optimization |
| ET  | Expression Template |
| GMF | Global Module Fragment |
| ICE | Internal Compiler Error |
| IIFE | Immediately-Invoked Function Expression |
| IILE | Immediately-Invoked Lambda Expression |
| lhs | left-hand side |
| NDR | No Diagnostic Required |
| NRVO | Named Return Value Optimization |
| NSDMI | Non Static Data Member Initializer |
| NTBS | Null-Terminated Byte String |
| NTTP | Non-Type Template Parameter |
| NTMBS | Null-Terminated MultiByte String |
| NVI | Non-Virtual Interface |
| ODR | One Definition Rule |
| OOTA | Out-Of-Thin-Air |
| PMR | Polymorphic Memory Resources |
| POCCA | `propagate_on_container_copy_assignment` |
| POCMA | `propagate_on_container_move_assignment` |
| POCS | `propagate_on_container_swap` |
| POD | Plain Old Data |
| POD | Point Of Definition |
| POI | Point Of Instantiation |
| RAII | Resource Acquisition Is Initialization |
| rhs | right-hand side |
| RTTI | RunTime Type Information |
| RVO | Return Value Optimization |
| SFINAE | Substitution Failure Is Not An Error |
| SSO | Small String Optimization |
| TMP | Template MetaProgramming |
| TPL | Two-Phase Lookup |
| TU  | Translation Unit |
| UB  | Undefined Behavior |
| UCN | Universal Character Name |
| UDL | User Defined Literal |

# 標準化関連
|略語|意味|
|:--:|:---|
| CD  | Committee Draft |
| CWG | Core Working Group |
| DIS | Draft International Standard |
| DR  | Defect Report |
| DTS | Draft Technical Specification |
| EWG | Evolution Working Group |
| EWGI | Evolution Working Group Incubator |
| FDIS | Final Draft International Standard |
| IS  | International Standard |
| LEWG | Library Evolution Working Group |
| LEWGI | Library Evolution Working Group Incubator |
| LWG | Library Working Group |
| NAD | Not A Defect |
| NB  | National Body |
| PDTS | Preliminary Draft Technical Specification |
| SG  | Study Group |
| TC  | Technical Corrigendum |
| TR  | Technical Report |
| TS  | Technical Specification |
| WD  | Working Draft |
| WP  | Working Paper |

# 外部リンク
- https://cppmap.github.io/articles/acronyms/
truncateメソッドの使い方

```lang:truncate.html.erb
<% msg = '<strong>Rails</strong>はRubyベースのフレームワークです。Railsに影響を受けたフレームワークには、Catalystやsymdonyなどがあります、' %>

<%= truncate(msg, length: 50) %>
<%= truncate(msg, length: 50, separator: '。') %>
<%= truncate(msg, length: 50, omission: '・・・後略・・・') %>
code
```
>(『Ruby on Rails4アプリケーション・プログラム』より抜粋)

「truncate」自体は、翻訳すると
1.頭や端を切る
2.(引用文などを)を切り縮める

注意事項→間違っても`<%== %>`で出力しないようにすること。
さんじゃらっと OSX + ruby でOpenCV

OSX + ruby でOpenCVを使ってみます。
[ruby-opencv](https://github.com/ruby-opencv/ruby-opencv)を使います

# OpenCV のインストール
`brew search opencv`
`brew tap homebrew/science`
`brew info opencv`
`brew install opencv`

# gemのインストール
`gem install ruby-opencv`

# サンプルプログラム
* 参考 [ruby-opencv](https://github.com/ruby-opencv/ruby-opencv)


```ruby:show.rb
require 'opencv'
include OpenCV

if ARGV.size == 0
  puts "Usage: ruby #{__FILE__} ImageToLoadAndDisplay"
  exit
end

image = nil
begin
  image = CvMat.load(ARGV[0], CV_LOAD_IMAGE_COLOR) # Read the file.
rescue
  puts 'Could not open or find the image.'
  exit
end

window = GUI::Window.new('Display window') # Create a window for display.
window.show(image) # Show our image inside it.
GUI::wait_key # Wait for a keystroke in the window.
```

ほんで
`ruby show.rb ***.jpg`
とかやると、ただ画像が表示されるだけですが動作します
GCE環境でのVM初期構築時 /パーティションサイズ拡張手順

以前は色々手順を踏まないとダメだったが、2015年2月くらいから
ワンコマンドでサクッとできるようになったようなのでまとめた。
## コマンド

200GBのDiskサイズで構築コマンド例。

```
gcloud compute instances create <VMインスタンス名> \
--zone asia-east1-a \
--machine-type n1-standard-1 \
--network default \
--boot-disk-device-name <ディスク(VMインスタンス)名> \
--boot-disk-size 200GB \
--image debian-7 \
```

## 結果
`/`が200GBになっていることが確認できた。

```
$ df
Filesystem                                             1K-blocks   Used Available Use% Mounted on
rootfs                                                 206422712 583996 195355596   1% /
udev                                                       10240      0     10240   0% /dev
tmpfs                                                     380364    140    380224   1% /run
/dev/disk/by-uuid/abe15085-81af-4533-9c6e-b8ffd6779b91 206422712 583996 195355596   1% /
tmpfs                                                       5120      0      5120   0% /run/lock
tmpfs                                                     760720      0    760720   0% /run/shm
```

##補足
200GB以下でディスクを掘ると「I/Oのパフォーマンス良くないよ」とのこと。
ディスクサイズでread/writeのパフォーマンス変わるみたい。(未検証)

```
WARNING: You have selected a disk size of under [200GB]. This may result in poor I/O performance. For more information, see: https://developers.google.com/compute/docs/disks#pdperformance.
```
google mapが表示されない

事象
---
google maps apiで、地図を表示しようとしたところ、表示されない。

環境
---
mac OS X Yosemite 10.10.3
firefox 37.0.2

表示されないソースは以下
---
```
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>GoogleMap</title>
    <script src="http://maps.google.com/maps/api/js?sensor=true&language=ja"></script>
    <style>
        #map{
            height: 100%;
            width: 100%;
        }
    </style>
</head>
<body>
    <div id="map"></div>
    <script>
        var latlng = new google.maps.LatLng(35.66, 139.69);
        var options = {
            zoom: 15,
            center: latlng,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        var map = new google.maps.Map(document.getElementById('map'), options);

    </script>
</body>
</html>
```

原因
---
[api公式ドキュメント](https://developers.google.com/maps/documentation/javascript/tutorial?hl=ja)

引用
>ウェブ アプリケーション内で実際の DOCTYPE を宣言することをおすすめします。上に示した例では、次のようなシンプルな HTML5 DOCTYPE を使用してアプリケーションを HTML5 として宣言しています:

><!DOCTYPE html>

>最新のブラウザは、この DOCTYPE で宣言したコンテンツを「標準モード」でレンダリングするため、各種ブラウザの規格に準拠したアプリケーションにすることができます。また、DOCTYPE は適切にグレードを下げるように設計されているため、これを認識できないブラウザでは単に無視され、その場合コンテンツは「互換モード」で表示されます。

>互換モードで機能する CSS が、標準モードではうまく表示されないこともありますので注意してください。たとえば、パーセンテージに基づくサイズは必ず親ブロック要素から派生させる必要がありますが、その祖先にサイズが指定されていないものがあると、子のサイズは 0 x 0 ピクセルと見なされてしまいます。そのため、上の例には次のような \<style> 宣言が含まれています:

>
```
<style type="text/css">
  html { height: 100% }
  body { height: 100%; margin: 0; padding: 0 }
  #map_canvas { height: 100% }
</style>
```

>この CSS 宣言により、地図コンテナ \<div>（名前は map_canvas）の高さを HTML ボディの 100% にすることが宣言されています。なお、\<body> や <html> のパーセンテージも具体的に宣言する必要がありますので注意してください。


解決したソース
---
公式ドキュメント注意点を参考にcssを調整します。

```
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>GoogleMap</title>
    <script src="http://maps.google.com/maps/api/js?sensor=true&language=ja"></script>
    <style>
        html { height: 100% }
        body { height: 100%; margin: 0; padding: 0 }
        #map { height: 100% }
    </style>
</head>
<body>
    <div id="map"></div>
    <script>
        var latlng = new google.maps.LatLng(35.66, 139.69);
        var options = {
            zoom: 15,
            center: latlng,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        var map = new google.maps.Map(document.getElementById('map'), options);

    </script>
</body>
</html>
```


good luck!
Oracle コンポーネント構成確認


## 内容
インスタンス作成時に設定したコンポーネント構成を確認する。

## 手順
DBA_REGISTRYビューで確認する。

```sql:
SELECT COMP_NAME,VERSION,STATUS FROM DBA_REGISTRY ORDER BY 1;
```    

## 例

### コンポーネントを全て選択した場合

▼ dbcaにて、以下の通りに設定。
![oracleコンポーネント 全選択1.png](https://qiita-image-store.s3.amazonaws.com/0/63331/9a934417-143c-50a9-6a2f-0a460580b7e9.png "oracleコンポーネント 全選択1.png")

![oracleコンポーネント 全選択2.png](https://qiita-image-store.s3.amazonaws.com/0/63331/a9f15557-3d8f-1397-7efc-06fd7d1d6921.png "oracleコンポーネント 全選択2.png")

▼ SQL*Plusで確認

```sql:
SQL> SELECT COMP_NAME,VERSION,STATUS FROM DBA_REGISTRY ORDER BY 1;

COMP_NAME                                VERSION      STATUS
---------------------------------------- ------------ -------
JServer JAVA Virtual Machine             11.2.0.4.0   VALID
OLAP Analytic Workspace                  11.2.0.4.0   VALID
OLAP Catalog                             11.2.0.4.0   VALID
OWB                                      11.2.0.4.0   VALID
Oracle Application Express               3.2.1.00.12  VALID
Oracle Database Catalog Views            11.2.0.4.0   VALID
Oracle Database Java Packages            11.2.0.4.0   VALID
Oracle Database Packages and Types       11.2.0.4.0   VALID
Oracle Database Vault                    11.2.0.4.0   VALID
Oracle Enterprise Manager                11.2.0.4.0   VALID
Oracle Expression Filter                 11.2.0.4.0   VALID
Oracle Label Security                    11.2.0.4.0   VALID
Oracle Multimedia                        11.2.0.4.0   VALID
Oracle OLAP API                          11.2.0.4.0   VALID
Oracle Rules Manager                     11.2.0.4.0   VALID
Oracle Text                              11.2.0.4.0   VALID
Oracle Workspace Manager                 11.2.0.4.0   VALID
Oracle XDK                               11.2.0.4.0   VALID
Oracle XML Database                      11.2.0.4.0   VALID
Spatial                                  11.2.0.4.0   VALID
```


### コンポーネントを全て未選択にした場合

▼ dbcaにて、以下の通りに設定。

![oracleコンポーネント 全未選択1.png](https://qiita-image-store.s3.amazonaws.com/0/63331/430cb7f0-af66-d6b3-d9fd-97bf18c366eb.png "oracleコンポーネント 全未選択1.png")

![oracleコンポーネント 全未選択2.png](https://qiita-image-store.s3.amazonaws.com/0/63331/c1370eee-2eac-2595-029d-50315449447b.png "oracleコンポーネント 全未選択2.png")


▼ SQL*Plusで確認

```sql:
SQL> SELECT COMP_NAME,VERSION,STATUS FROM DBA_REGISTRY ORDER BY 1;

COMP_NAME                                VERSION      STATUS
---------------------------------------- ------------ -------
Oracle Database Catalog Views            11.2.0.4.0   VALID
Oracle Database Packages and Types       11.2.0.4.0   VALID
Oracle Workspace Manager                 11.2.0.4.0   VALID
```

以上。
Swift「Parse」を使ってDB連携をしてみた。



![スクリーンショット_2015-04-29_午後4_27_36.png](https://qiita-image-store.s3.amazonaws.com/0/41892/7ba9e64d-ef60-22e5-62f4-1990d7c3a69d.png "スクリーンショット_2015-04-29_午後4_27_36.png")

#Parse

ParseとはMBaaS(Mobile Backend as a Service)のことで、
サーバー側で行うDB操作、Push通知などの機能を提供してくれます。

Parseについての詳しい説明、メリット等は
[個人のスマホアプリ開発者がParseを使うべき15の理由](http://qiita.com/kyproject/items/b9891aa7bb596b958d7e)が分かりやすいです。

Parseは様々な機能を持ち合わせていますが、
今回はDB連携ということでDataという機能について紹介していきます。

# 導入方法

## Sign Up

SignUpから登録します。


## プロジェクトを作る

Create appを押下後、
Data->Mobile->iOS->Swift->NewProjectを選択します。

※初回作成時の説明になります。
基本的にはParse上で表示されるフローに従ってください。

![スクリーンショット_2015-04-29_午後5_48_34.png](https://qiita-image-store.s3.amazonaws.com/0/41892/ca085c2d-52ef-ca05-7914-c4f833d0cd98.png "スクリーンショット_2015-04-29_午後5_48_34.png")


### ①Test用のXcodeプロジェクトをダウンロードします。

parse-starter-project***というプロジェクトをダウンロードできるので、それをXcodeで開きます。


### ②ApplicationIdとclientKey追加

AppDelegate.swiftに下記のコードを追加。

```swift
Parse.setApplicationId("[ApplicationId]",clientKey:"[clientKey]")
```

### ③Runします。

Runした後、
ParseのDashBoard上の画面にある「Test」ボタンを押します。
成功していれば、その旨のメッセージが表示されます。

ここまで5分ほどでできました！

# データの扱い方

Parseと連携することができたので、
あとは実際に任意のデータを保存したり、検索したり、削除する方法をみていきます。


## データの保存方法

下記のclassNameにテーブル名を指定します。

`.saveInBackgroundWithBlock`で保存時に
指定したテーブル名が存在すればそのテーブルを取得し、
存在しなければ新しいテーブルを作成します。

下記は`name`カラムに`Araki`、`age`カラムに`22`を保存する例です。

```swift
let testObject = PFObject(className: "TestObject")

testObject["name"] = "Araki"
testObject["age"] = 22

// バックグラウンドでデータをsave
testObject.saveInBackgroundWithBlock { (success: Bool, error: NSError?) -> Void in
            
	if success {
   		println("Object has been saved.")
    }

}
```

## 保存したデータの確認方法

「Parse」のDashBoardで確認します。

上部メニューの「Core」タブを選択するとDBの情報を見ることができます。
左のメニューの「Role」、「User」、「TestObject」が存在するテーブルです。

さきほど作成した「TestObject」を選択すると
上で保存したデータを確認できると思います。

![スクリーンショット 2015-04-29 午後10.47.48.png](https://qiita-image-store.s3.amazonaws.com/0/41892/c7246007-8721-d764-aecc-266b2fbdbbd8.png "スクリーンショット 2015-04-29 午後10.47.48.png")


## データの取得方法

`PFQuery(className: "TestObject")`で
取得したいテーブル名を`className`に指定します。

`.whereKey`や`.orderByAscending`で
取得方法をqueryに指定してデータを取得します。


```swift
var query: PFQuery = PFQuery(className: "TestObject")
query.whereKey("name", containsString: "Araki")
query.orderByAscending("createdAt")
             
// バックグラウンドでデータを取得
query.findObjectsInBackgroundWithBlock { (objects, error) -> Void in
	for object in (objects as! [PFObject]) {
                
		if(error == nil){
			println(object.objectForKey("name"))
       	}
    }
}
```

## データの削除方法

上と同じ方法でデータを取得し、
`object.delete()`で削除します。

```swift
var query: PFQuery = PFQuery(className: "TestObject")
query.whereKey("name", containsString: "Araki")
query.orderByAscending("createdAt")
             
// バックグラウンドでデータを取得
query.findObjectsInBackgroundWithBlock { (objects, error) -> Void in
	for object in (objects as! [PFObject]) {
                
		if(error == nil){
			object.delete() // 削除
			println(object.objectForKey("name"))
       	}
    }
}
```
Switch, SwitchCompatでOnClickListenerを使わないほうが良い理由

```xml:activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

  <Switch
      android:id="@+id/sw"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"/>

  <android.support.v7.widget.SwitchCompat
      android:id="@+id/swc"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"/>

</LinearLayout>
```

### やっちゃいがちな書き方

```java:SomeActivity.java
switch.setOnClickListener(new OnClickListener() {
  void onClick(View view) {
    if (((Switch) view).isChecked()) {
      // ...
    } else {
      // ...
    }
  }
});
```

### OnClickListenerの呼び出し有無とUIの状態の関係

| 操作       | OnClickListener | Viewの状態(checked/unchecked) |
|:-----------|:----------------:|:------------:|
| クリック    | 呼ばれる（当然）  | 変わる   |
| フリック（左右にシュッとやるやつ）    | **呼ばれない**   | **変わる**   |

### 結論

`Switch`のchecked/unchecked状態を`View.OnClickListener`でハンドリングしていると、
**ユーザがフリックでスイッチ切り替えを行った場合**に不整合が発生します。
なので`Switch`を使う時は`CompoundButton.OnCheckedChangeListener`を使うほうがよいとおもいます。

### 私見

OnCheckedChangeListener登録した状態でsetChecked呼ぶと（呼ばれてほしくない）コールバック呼ばれちゃうじゃん
↓
よしOnClickListener使おう

このパターンでやらかすことが多い気がする
VBAHaskellの紹介　その2　（合成関数）

（この記事ははてなブログ　http://mmyymmdd.hatenablog.com/ の再掲です）
2015-04-11
##続いて関数合成について。
VBAでももちろん関数を合成して計算することはできるが、関数型言語のように合成関数自体を変数に入れたり関数から出力したりすることはできない。
例えば  `Log(0.1 + Abs(x-5))`という計算を多数のxに対して行う場合、普通はこの式を埋め込んだユーザー定義関数を作る。
しかしVBAでもラムダ式もしくはファンクタのようなものを作れれば便利だし、ぜひともそれを[前回](http://qiita.com/mmYYmmdd/items/c731edf943acc0a0ebe9)紹介した **mapF** に渡せるようにしたい。そうしないとライブラリに渡すためのヘルパ関数をその都度作るハメになるからだ。

**そこでパーツを適当に組み合わせてファンクタを作れるようにした。**
**` a = p_log(p_plus(0.1, p_abs(p_minus(, 5))))`**
これはC++風に書くと下式に相当する。
　　`auto  a = [](auto x) { return Log(0.1 + Abs(x-5)); }`
Haskellだとこう（？）
　　`a = \x -> log(0.1 + abs(x-5))`
パーツである p_log, p_plus, p_abs, p_minus はあらかじめ用意 [^1] してあり、それぞれはVBA上の関数（のポインタ的なもの）である。

このa に対して、**`mapF(a, iota(1, 10))`** とか **`applyFun(4, a)`** といった式で実際に計算させることができる。

 残念ながら表現力には限界があって、演算子を組み合わせてもっと自然にこう書くことはできない。
　　**`a = p_log(0.1 + p_abs(p_minus(, 5)))`**　　⇐　ダメ
 
[VBAHaskellの紹介 その3 （FizzBuzz）](http://qiita.com/mmYYmmdd/items/93040f07121d95898161)
[VBAHaskellの紹介 その1 （最初はmapF）](http://qiita.com/mmYYmmdd/items/c731edf943acc0a0ebe9)

[^1]: [Haskell_2_stdFunモジュール](https://github.com/mYmd/VBA/blob/master/Haskell_2_stdFun.bas)で定義
cocos2d-xプロジェクトにUnityAdsを導入する(iOS編)

UnityAdsというUnity公式の広告SDKがあるのですが
ゲームに特化したビデオ広告ということでとても魅力的です。
のでcocos2d-xのゲームに導入してみました。

UnityAdsに統合ガイドがあるのですがcocos2d-x向けではなく、
下記の通りにやっても動作しなかったので統合ガイドの補足メモです。
※UnityAdsでのアカウント、ゲーム登録はすでに行っている前提です
http://unityads.jp/help/documentation-for-publishers/integration-guide-for-ios
##1. ダウンロード
http://unityads.jp/help/documentation-for-publishers/downloads
ガイドの通り、gitHubからインストールします

##2. framework, bundleの導入
UnityAds.bundleは必ずプロジェクトに追加します。
(Resourcesとしてbundleがないと実行時エラーとなります)

![スクリーンショット 2015-04-29 23.53.17.png](https://qiita-image-store.s3.amazonaws.com/0/19692/7e59d033-9ba6-32a8-90c1-f840531f10f1.png)


Linked framework and Librariesに以下設定します。
統合ガイドとは違いiOS7以降でもAdSupportは必須のようです。
また、SystemConfiguration, CoreTelephony, CoreMediaも必須のようなので追加しました。
StoreKitも必須ですがcocos標準プロジェクトで追加されているので説明を省きます

![スクリーンショット 2015-04-29 23.07.30.png](https://qiita-image-store.s3.amazonaws.com/0/19692/1fa06e64-e6cb-13c4-59a2-9840b1ac1e17.png)

## 3. コード修正
統合ガイドではAppDelegateの修正とありますがcocosではAppControllerの修正となります。
(なぜここかというと広告表示までにUnityAdsにUIViewControllerを渡さないといけないからです..)
AppController.hはimport追加とUnityAdsDelegate追加

```AppController.h

#import <UIKit/UIKit.h>

//UnityAds
#import <UnityAds/UnityAds.h>

@class RootViewController;

@interface AppController : NSObject <UIApplicationDelegate, UnityAdsDelegate> {
	UIWindow *window;
}

@property(nonatomic, readonly) RootViewController* viewController;

@end

```

AppController.mmでは以下を行います。cocos2d-x 3.5でのソースとなります。
- _viewController設定後にstartWithGameIdの呼び出し
- unityAdsVideoCompletedの追加

```AppController.mm
:
    // Use RootViewController manage CCEAGLView 
    _viewController = [[RootViewController alloc] initWithNibName:nil bundle:nil];
    _viewController.wantsFullScreenLayout = YES;
    _viewController.view = eaglView;

	//Unity Ads
//	[[UnityAds sharedInstance] setTestMode:YES];
//	[[UnityAds sharedInstance] setDebugMode:YES];
	[[UnityAds sharedInstance] startWithGameId:@"[GameID]" andViewController:_viewController];
	[[UnityAds sharedInstance] setDelegate:self];
:
}

//Unity Ads
- (void)unityAdsVideoCompleted:(NSString *)rewardItemKey skipped:(BOOL)skipped
{
	//callback
}

```

## 4. Bridge作成

bridgeを作成して動画広告を表示させたいときに呼ぶと最低限の導入完了です。
統合ガイドではcanShowAdsの判別ですが
英語版ドキュメントではcanShowとcanShowAdsを判別したのでそちらに合わせました。

```UnityAdsBridge.h
#pragma once

class UnityAdsBridge
{
public:
	static void show();
	static void hide();
};
```

``` UnityAdsBridge.mm
#include "UnityAdsBridge.h"
#import <UnityAds/UnityAds.h>

void UnityAdsBridge::show()
{
	if ([[UnityAds sharedInstance] canShow] && [[UnityAds sharedInstance] canShowAds]) {
		[[UnityAds sharedInstance] show];
	} else {
		//cannot show
	}
}

void UnityAdsBridge::hide()
{
	[[UnityAds sharedInstance] hide];
}
```

## その他
- アプリ新規登録直後の数時間はstart時にサーバエラーとなり広告が表示されませんでした。
- 動画広告なのでUnityAds#show()時にはBGMをoffにします
- 実機はもちろん、iOS Simulatorでも広告のテストが可能でした(ありがたい)
特定の文字列で始まる受け取りアドレスを作るには

たまに見かける、`1tumfABCE...`のような特定の文字列が入った受け取りアドレスを作成するには、[vanitygen](https://en.bitcoin.it/wiki/Vanitygen)を使います。
`git clone`して`make`するだけですが、Dockerイメージ作ったのであげときます。

↓のようにして使います。

```
docker run -it quay.io/tumf/vanitygen  ./vanitygen 1tumf
```
Pythonで関数型プログラミング Project Euler 1


[Problem 1](https://projecteuler.net/problem=1)

> # [「3と5の倍数」](http://odz.sakura.ne.jp/projecteuler/index.php?Problem%201)
> 10未満の自然数のうち, 3 もしくは 5 の倍数になっているものは 3, 5, 6, 9 の4つがあり, これらの合計は 23 になる.
> 
> 同じようにして, 1000 未満の 3 か 5 の倍数になっている数字の合計を求めよ.

## リスト内包表記
リスト内包表記を使うと関数型に近い記述をすることができます。

```python3:リスト内包表記
multiplesOf3or5 = [n for n in range(1, 1000) if n % 3 == 0 or n % 5 == 0]
answer = sum(multiplesOf3or5)
print(answer)

```

## 関数型
filter関数でより関数型っぽく書くと、

```python3:関数型
def isMultipleOf3or5(n):
    return n % 3 == 0 or n % 5 == 0

multiplesOf3or5 = filter(isMultipleOf3or5, range(1, 1000))
answer = sum(multiplesOf3or5)
print(answer)
```
Pythonでは関数名がそのまま関数オブジェクトとなるので、filter関数の第1引数には関数名を書くだけでOKです。
C#のデリゲートなんかと比べるとはるかに簡単で直感的ですね。

## ラムダ式
関数をラムダ式に置き換えることもできます。
Pythonではラムダ式は
lambda [引数1], [引数2] : [式]
という書き方をします。
（引数は2つしか書いていませんが、もちろん3つ以上でもOKです。）

```python3:ラムダ式
multiplesOf3or5 = filter(lambda n: n % 3 == 0 or n % 5 == 0, range(1, 1000))
answer = sum(multiplesOf3or5)
print(answer)
```

ラムダ式を使うとリスト内包表記に近い形になりますね。
この場合は、ラムダ式よりはリスト内表表記の方が直感的に分かりやすい気がします。
Atomのパッケージにスニペット機能を追加する方法

# [パッケージ新規作成](http://qiita.com/t-hiroyoshi/items/6c69463319ea76324aec)で作成したAtomパッケージにスニペット機能を追加する
## 新規作成されたパッケージの構成

`Generate Package`で生成されたパッケージの雛形の構成は下記のようになっています。このままではスニペット用のフォルダは存在していません。ちなみにこれらのフォルダやファイルはそれぞれざっくり言うと下記の様な役割を持っています。

この他にスニペットを登録可能な`snippets`や文法を定義してシンタックスハイライト可能な`grammars`が追加可能です。

```
test-package
├── CHANGELOG.md　　　　　  　-- チェンジログ
├── LICENSE.md　　　　　　    -- ライセンス
├── README.md                -- 説明書
├── keymaps/                 -- パッッケージのキーマップ
├── lib/                     -- その他多くの機能
├── menus/                   -- メニュー表示系
├── package.json             -- パッケージの情報
├── spec/                    -- パッケージのテスト
└── styles/                  -- パッケージのスタイルシート
```

## スニペットの作成

スニペットについて書いているファイルは`snippets`内に置く必要があるのでフォルダを作りその中にjsonまたはcson形式でスニペットを書いていきます。
今回はcsonでやってみたいと思うので`foo.cson`を作成した`snippets`内に作ります。

```
test-package
├── CHANGELOG.md
├── LICENSE.md
├── README.md
├── keymaps
├── lib
├── menus
├── package.json
├── snippets                  　　　-- 各自作成する
│   └──foo.cson もしくは foo.json   -- ここに色々書く
├── spec
└── styles
```

作成した`foo.cson`には以下のように登録したいスニペットを書いていきます。今回は3種類のスニペットを登録します。

```foo.cson
'.source.gfm':
  'foo' :
    'prefix' : 'bar'
    'body' : 'baz'
  'link url' :
    'prefix' : 'url'
    'body' : '[${1: title}](${2: URL})'
  'code box' :
    'prefix' : 'code'
    'body' : """
      ```
      ${1: code}
      ```
    """
```

`.source.gfm`はスニペットを有効にするセレクタを指定していて今回はMarkdownを指定しています。

`foo`はスニペット名を意味していて`bar`はスニペットを展開する時に使用するキー、`baz`は展開される本文を意味しています。

スニペット本文内に`${1: tittle}`や`${2: URL}`と埋め込むことでtabによるカーソル移動の順番も設定できます。

スニペット本文は複数行展開にも対応していて本文を`"""`で囲むことにより展開可能になります。

Atomを再起動すればこれらのスニペットが有効になっていると思います、手軽に実装できるので是非試してみてください。
heroku上のGoでRedis To Goを使う

# はじめに

今回の内容は、heroku上でGoを実行する際にアドオンのRedisを使う方法の説明になります。

ちなみにheroku上でGoを動かす説明は、[こちら](http://deeeet.com/writing/2014/04/23/martini/)などが参考になるかと思います。

# herokuの環境変数

`REDISTOGO_URL`です。

この環境変数から取得できる値は以下のような内容になります。

`redis://redistogo:<password>@xxxxxx.redistogo.com:11068/`

# 手順

今回Redisのアクセスに以下のライブラリを使います。

http://godoc.org/gopkg.in/redis.v2

環境変数から取得した内容を`redis.Options`に詰め替える必要があるため以下のようになります。

```go:redis.go
package example

import (
	"fmt"
	"net/url"
	"os"

	"gopkg.in/redis.v2"
)

func redisExample() {
	addr, password := getHerokuRedisAddr()
	client := redis.NewTCPClient(&redis.Options{
		Addr: addr,
		Password: password,
	})
	defer client.Close()

	// redisへアクセス（適当なコード）
	fmt.Println(client.Get("hoge").Result())
}

// local実行用に環境変数がないときは`localhost:6379`を返します
func getHerokuRedisAddr() (addr string, password string) {
	addr = "localhost:6379"
	password = ""

	redisURL := os.Getenv("REDISTOGO_URL")
	if redisURL == "" {
		return
	}

	redisInfo, err := url.Parse(redisURL)
	if err != nil {
		return
	}
	
	addr = redisInfo.Host
	if redisInfo.User != nil {
		password, _ = redisInfo.User.Password()
	}
	return
}
```

一応、ローカル環境でも動くようにしています。
PHP7調査(26)無名クラスの導入

PHP7から無名クラスがサポートされました。次のような文法で、クラス定義なしでオブジェクトが生成できます。

```php
<?php
$obj = new class(/* コンストラクタ引数 */) {
    /* クラス本体 */
};
```

通常のクラス定義と同様に`extends`や`implements`なども書くことができます。

この構文は`new`まで必須です。newなしで無名クラスが第1級オブジェクトになりそうに見えますが、現時点ではそのような記述はできません。無名クラスのインスタンスを作ることだけが可能です。

# ユースケース

RFCによれば次のような状況で便利なのでは？とのことでした。

* テスト用のモックオブジェクトで、その場限りでインターフェースを実装する状況。
* そのクラスを外部に公開したくないような場合
  * オブジェクトメソッドが呼ばれたりするのは構わないが、継承して使われるのがイヤな場合…？
* 自明な実装でオートローダーを叩きたくない
  * 1クラス1ファイルというルールで運用している場合、1ファイル増えてしまうのが悲しいこともありそう

そうでなくても、最近のオシャレなライブラリは「このインターフェース実装したオブジェクトを引数に渡してね」といったものが珍しくないため、使いどころは多いように思います。

# 実行例

あまり実用性はありませんが、他の言語と同様にオブジェクトを連想配列のように扱うこともできます。

```php
<?php
$obj = new class { public $foo = 3; public $bar = 4; };
var_dump($obj->foo); // int(3)
var_dump($obj->bar); // int(4)
```

# 感想など

仕方ないことですが、各種エディタ類がPHP7に対応するまで、この構文を使うとインデントが崩れまくります。

# 参照

[PHP RFC: Anonymous Classes](https://wiki.php.net/rfc/anonymous_classes)
Visual Studio2013のトレースポイント機能を使用してメソッドの引数・戻り値をデバッガに出力する

#Visual Studio2013のトレースポイントについて
Visual Studio2013のデバッガには、ブレークポイントに似た機能としてトレースポイントという機能があります。
トレースポイントは、プログラムの指定したコード行にてトレースを出力するという、所謂「printfデバッグ」を実現する機能となります。
トレースポイントを使用することにより、ソースコードを変更せずにメソッドの引数・戻り値をデバッガに出力させることが可能となります。

## トレースポイントで出力するメッセージの仕様
トレースポイントで出力するメッセージは、下記のキーワード及び中括弧記号で変数や式を指定可能となります。

| キーワード  | 説明            |
|:----------|------------------|
| $ADDRESS | 現在の命令          |
| $CALLER | 呼び出し元関数名    |
| $CALLSTACK | 呼び出し履歴     |
| $FUNCTION | 現在の関数名|
| $PID | プロセスID |
| $PNAME | プロセス名 |
| $TID | スレッドID |
| $TNAME | スレッド名 |
| $TICK | CPUのティック数 |
| $FILEPOS | 現在のファイルの位置 |

## トレースポイントの使用方法
下記のプログラムに対してトレースポイントを使用し、Addメソッドの引数・戻り値をデバッガに出力させます。

```csharp:Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(Add(1, 2));
        }

        static int Add(int lhs, int rhs)
        {
            var ret = lhs + rhs;
            return ret;
        }
    }
}
```

* 18行目の「var ret = lhs + rhs;」及び19行目の「return ret;」に対してF9キーでブレークポイントを追加し、「ヒット時」の設定を行います。なお、$CALLSTACKキーワードでは、呼び出し元メソッドの行番号が出力されないため、StackTraceクラスを使用してスタックトレースを出力するようにしています。

| 名前  | ヒット時に出力するメッセージ                                                                             |
|:----------|:-----------------------------------------------------------------------|
| Program.cs、18行13文字 | {System.DateTime.Now.ToString()}	[開始]	\$FUNCTION	$TID	lhs={lhs} rhs={rhs}	{new System.Diagnostics.StackTrace(true).ToString().Replace("\r\n", null)}|
| Program.cs、19行13文字 | {System.DateTime.Now.ToString()}	[終了]	\$FUNCTION	$TID	ret={ret}	{new System.Diagnostics.StackTrace(true).ToString().Replace("\r\n", null)}|

![ブレークポイント.png](https://qiita-image-store.s3.amazonaws.com/0/76826/8afb10ea-6f56-3cef-4521-6af9008f8dc9.png)
![ブレークポイントのヒット時.png](https://qiita-image-store.s3.amazonaws.com/0/76826/710c29b2-a1b3-ec12-ee83-0394f16d0c03.png)

* F5キーを押下してプログラムをデバッグ実行し、出力ウィンドウにAddメソッドの引数・戻り値が出力されていることを確認します。

![トレース結果.png](https://qiita-image-store.s3.amazonaws.com/0/76826/85851a1f-6d04-cdc2-5351-5fd4b596ac8f.png)
![トレース結果Excel.png](https://qiita-image-store.s3.amazonaws.com/0/76826/ffed1eca-02c1-e4d6-4238-2a25a6915152.png)

## 参考資料
ブレークポイントとトレースポイントの使用
https://msdn.microsoft.com/ja-jp/library/5557y8b4.aspx
Spring Web MVC WebApplicationContext で特別扱いされる Bean

[/spring/docs/4.1.x/spring-framework-reference/html/mvc.html#mvc-webappctx-special-beans-tbl](http://docs.spring.io/spring/docs/4.1.x/spring-framework-reference/html/mvc.html#mvc-webappctx-special-beans-tbl)

の翻訳です

```
16.2.1 Special Bean Types In the WebApplicationContext
Table 16.1. Special bean types in the WebApplicationContext
```

| Bean type  | Explanation|
|:-----------|:-----------|
| HandlerMapping|リクエストをハンドラに結びつけるために利用。また、事前・事後処理を handler interceptors として挟み込むこともできる。最もよく利用される実装はアノテーションベース。<br />Maps incoming requests to handlers and a list of pre- and post-processors (handler interceptors) based on some criteria the details of which vary by HandlerMapping implementation. The most popular implementation supports annotated controllers but other implementations exists as well.|
|HandlerAdapter|DispatcherServlet が HandlerMapping により map されたメソッドを呼び出すことを助けるアダプタ。<br />Helps the DispatcherServlet to invoke a handler mapped to a request regardless of the handler is actually invoked. For example, invoking an annotated controller requires resolving various annotations. Thus the main purpose of a HandlerAdapter is to shield the DispatcherServlet from such details.|
|HandlerExceptionResolver|例外をビューにマップしたり、更に複雑な処理を行う<br />Maps exceptions to views also allowing for more complex exception handling code.|
|ViewResolver|論理的な（文字列表現の）ビュー名を実際のビューにマップする<br />Resolves logical String-based view names to actual View types.|
|LocaleResolver & LocaleContextResolver|クライアントのアクセスから、ロケールを決定する。ContextResolver はタイムゾーンも決定する<br />Resolves the locale a client is using and possibly their time zone, in order to be able to offer internationalized views|
|ThemeResolver|テーマを解決する<br />Resolves themes your web application can use, for example, to offer personalized layouts|
|MultipartResolver|マルチパートリクエスト（HTML form からの file アップロード）をよしなに扱う<br />Parses multi-part requests for example to support processing file uploads from HTML forms.|
|FlashMapManager|HTTP redirect を挟んでデータを保存する FlashMap を扱う。実装は大抵 Session に依存している。<br />Stores and retrieves the "input" and the "output" FlashMap that can be used to pass attributes from one request to another, usually across a redirect.|
map,reduce,rangeを自分で書いてみる

JavaScriptの練習。ふつうの函数型プログラミングの入門書とか読むと割と最初の方に出てくるやつ。あるいは再帰プログラミング入門。実行時のコストは度外視。

## range

[区間 (数学) - Wikipedia](http://ja.wikipedia.org/wiki/%E5%8C%BA%E9%96%93_(%E6%95%B0%E5%AD%A6))

Pythonの[range](https://docs.python.org/3/library/stdtypes.html#range)みたいに、`max - 1`までを含むことにした。左閉半開区間の整数を要素とする集合を配列として返す、みたいな感じかしら。

```js
function range(min, max){
    var r = function(n, ary){
        return (n < max)
            ? r(n + 1, ary.concat(n))
            : ary
            ;
    };
    return r(min, []);
}
```

```js
range(1, 10)
// [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
range(10, 1)
// []
```

めんどくさいので`min > max`だったらエラー吐くとか逆にするとかはしてない。

## reduce

[高階関数#fold - Wikipedia](http://ja.wikipedia.org/wiki/%E9%AB%98%E9%9A%8E%E9%96%A2%E6%95%B0#fold)

`fold`とか`inject`とも呼ばれる。用途を一言で表すと「集計」。

```js
function reduce(func, ini, ary){
    var r = function(a, acc){
        return (a.length > 0)
            ? r(a.slice(1), func(acc, a[0]))
            : acc
            ;
    };
    return r(ary, ini);
}
```

```js
var add = function(a, b){ return a + b; };
reduce(add, 0, range(1, 11))
// 55
```

## map

[高階関数#map - Wikipedia](http://ja.wikipedia.org/wiki/%E9%AB%98%E9%9A%8E%E9%96%A2%E6%95%B0#map)

`map`は`reduce`があればかんたんに実装できる。

```js
function map(func, ary){
    var m = function(acc, a){
        return acc.concat(func(a));
    };
    return reduce(m, [], ary);
}
```

## unfold

[高階関数#unfold - Wikipedia](http://ja.wikipedia.org/wiki/%E9%AB%98%E9%9A%8E%E9%96%A2%E6%95%B0#unfold)

さっきWikipediaの記事で知ったんだけど、`range`はこれ使って書き直せそうですね。

```js
function unfold(cond, func, update, seed){
    var u = function(acc, a){
        return cond(a)
            ? u(acc.concat(func(a)), update(a))
            : acc
            ;
    };
    return u([], seed);
}

function range2(min, max){
    return unfold(
        function(n){ return n < max; },
        function(a){ return a; },
        function(a){ return a + 1; },
        min
    );
}
```

## あとがき

ふだんPHPを使ってると、JavaScriptには(内部実装のことはさておいて)「ふつうの配列」があることに心癒されますね
PlayFrameworkが使用しているJavaライブラリ群

macのHomebrewでplayをインストールした場合、以下のフォルダにJavaライブラリがダウンロードされる


```
/usr/local/Cellar/typesafe-activator/1.2.10/libexec/repository/
```

1.2.10は可変

```
(master)$ ls -1 /usr/local/Cellar/typesafe-activator/1.2.10/libexec/repository/
ls -1 /usr/local/Cellar/typesafe-activator/1.2.10/libexec/repository/
antlr
aopalliance
cglib
ch.qos.logback
com.amazonaws
com.beust
com.fasterxml
com.fasterxml.jackson.core
com.github.mpeltonen
com.google.code.findbugs
com.google.guava
com.google.inject
com.google.javascript
com.google.protobuf
com.h2database
com.jcraft
com.jolbox
com.ning
com.novocode
com.typesafe
com.typesafe.activator
com.typesafe.akka
com.typesafe.netty
com.typesafe.play
com.typesafe.play.extras
com.typesafe.sbt
com.typesafe.sbteclipse
com.typesafe.sbtrc
com.typesafe.slick
com.typesafe.trace
commons-codec
commons-collections
commons-io
commons-logging
dom4j
eu.medsea.mimeutil
io.apigee.trireme
io.netty
io.spray
jakarta-regexp
javax.annotation
javax.enterprise
javax.inject
javax.transaction
javax.validation
jline
joda-time
junit
net.contentobjects.jnotify
net.java.dev.jna
net.sf.ehcache
net.sourceforge.cssparser
net.sourceforge.htmlunit
net.sourceforge.nekohtml
oauth.signpost
org.antlr
org.apache.ant
org.apache.commons
org.apache.httpcomponents
org.apache.ivy
org.apache.lucene
org.apache.maven
org.apache.tomcat
org.aspectj
org.avaje.ebeanorm
org.beanshell
org.bouncycastle
org.codehaus.jackson
org.codehaus.plexus
org.easymock
org.easytesting
org.eclipse.aether
org.eclipse.jetty
org.eclipse.sisu
org.fluentlenium
org.fusesource.hawtjni
org.fusesource.jansi
org.fusesource.leveldbjni
org.hamcrest
org.hibernate
org.hibernate.javax.persistence
org.iq80.leveldb
org.javassist
org.jboss.logging
org.jmock
org.joda
org.json
org.jvnet.mimepull
org.mockito
org.mozilla
org.objenesis
org.ow2.asm
org.parboiled
org.pegdown
org.reflections
org.scala-lang
org.scala-lang.modules
org.scala-sbt
org.scala-sbt.ivy
org.scala-stm
org.scala-tools.sbinary
org.scala-tools.testing
org.scalacheck
org.scalamacros
org.scalatest
org.scalaz
org.seleniumhq.selenium
org.slf4j
org.sonatype.plexus
org.sonatype.sisu
org.specs2
org.springframework
org.testng
org.tukaani
org.uncommons.maths
org.vafer
org.w3c.css
org.webbitserver
org.webjars
org.yaml
tyrex
xalan
xerces
xml-apis
```
SonarQubeドキュメント和訳 Setup and Upgrade

SonarQube(http://www.sonarqube.org/ )のドキュメントを翻訳しています。

こちらはSonarSource社の提供する下記のページの翻訳です。
http://docs.sonarqube.org/display/SONAR/Setup+and+Upgrade

---

SonarQubeを簡単に試してみるためには下記のチュートリアルに従ってください。
本番用のインスタンスをインストールするには[インストールガイド](http://docs.sonarqube.org/display/SONAR/Installing)に従ってください。
SonarQubeのインスタンスをアップグレードするには、[アップグレードガイド](http://docs.sonarqube.org/display/SONAR/Upgrading)と関連するリリースノートを読んでください。

#2分間ではじめるには 
1. SonarQubeのディストリビューションを[ダウンロード](http://www.sonarsource.org/downloads/)し解凍します(たとえば"C:\sonarqube"もしくは"/etc/sonarqube")

2. SonarQubeのサーバを起動します：
<pre>
\#Windowsでの実行:
C:\sonarqube\bin\windows-x86-xx\StartSonar.bat
\#その他のOSでの実行:
/etc/sonarqube/bin/[OS]/sonar.sh console
</pre>

3. SonarQube Runnerを[ダウンロード](http://www.sonarsource.org/downloads/)して解凍します。(たとえば、"C:\sonar-runner" もしくは "/etc/sonar-runner")

4.サンプルプロジェクトを[ダウンロード](https://github.com/SonarSource/sonar-examples/archive/master.zip)し、解凍します。 (たとえば、"C:\sonar-examples"もしくは"/etc/sonar-examples")

5.プロジェクトを解析します。
<pre>
\#Windowsの場合:
cd C:\sonar-examples\projects\languages\java\sonar-runner\java-sonar-runner-simple
C:\sonar-runner\bin\sonar-runner.bat
 
\#その他のOSの場合:
cd /etc/sonar-examples/projects/languages/java/sonar-runner/java-sonar-runner-simple
/etc/sonar-runner/bin/sonar-runner
</pre>

6.http://localhost:9000 で結果を確認します(デフォルトのシステム管理者の認証情報はadmin/adminです)。

---
※こちらの翻訳の元のページとその著作権表示は下記の通りです
http://docs.sonarqube.org/display/SONAR/Requirements
© 2008-2014, SonarSource S.A, Switzerland.
【アルゴリズム】Discounted Cumulative Gain（DCG）の理論

**Discounted Cumulative Gain**というものが有ります．
その説明を，自分用のメモも兼ねて解説します．

# Discounted Cumulative Gainとは？
**Discounted Cumulative Gain（通称DCG）**とは，順位を含めて正解データのランキングをどれだけ再現できるのかの評価の指標を表しています．
要は，「*推薦，検索などでランキングされたデータがどれだけ適切か*」を示すものです．

# 一般式
![aa.png](https://qiita-image-store.s3.amazonaws.com/0/63338/ed3cd692-eed2-21ea-b5fe-822d17433fe7.png)
DCGp：p番目までのDCGを求めます
reli：i位までの検索結果が正解のときの利得スコア（利益スコアについては後述）

を表します．

# DCGの計算例
![aaa.png](https://qiita-image-store.s3.amazonaws.com/0/63338/b91f4145-32ff-012a-ab21-0cddea82da09.png)
上の表は，ある検索システムA,Bでのランキングの結果と仮定します．
その結果から，上位4件までのAとBのDCGを求めてみます．


## Aの計算
![スクリーンショット 2015-04-29 19.21.07.png](https://qiita-image-store.s3.amazonaws.com/0/63338/3bb713a9-6e3b-d7b1-27ec-0764ab0c0522.png)

計算は以上のようになります．
計算には，「正解（◯）」の値のみを利用し，不正解（☓）の値は利用しません．
利得スコアは，基本的に自由に与えてもらって構いませんが，1位が一番大きな値になるようにします．

上記の式の，詳しい内容としては以下の図を見てください．

![ans.png](https://qiita-image-store.s3.amazonaws.com/0/63338/6f5b82ce-4707-948b-d978-d1e5c5216322.png)



## Bの計算
上記の「Aの計算」と同様に計算を行います．
![スクリーンショット 2015-04-29 19.32.36.png](https://qiita-image-store.s3.amazonaws.com/0/63338/a70ec4f2-872e-090a-9335-ee8f3eb20541.png)

Bは，1番目のランキングは不正解のため，reliの値は省略されています．



##計算結果
**A ≒ 5.77**
**B ≒ 1.27**
A > B より，Aの方が良い結果が得られていることが分かります．
謎: OS X の Preview.app が複数起動する

マウスで高速に 4 回ファイルをクリックしたら、なんと Preview.app が 2 つ起動してしまった……。

![nazo.png](https://qiita-image-store.s3.amazonaws.com/0/25886/879c7068-16e5-532f-295d-a734ad699f8c.png)


コマンドでも再現できるはずと思い、適当な画像ファイルを開くように引数をとって ```&``` でバックグラウンド起動してみた。

```shell-session
$ open test.png & open test.png
```

とコマンドを実行すると、多重起動が再現した。

さらに 4 つで試してみた

```shell-session
$ open test.png & open test.png & open test.png & open test.png
```

![nazo2.png](https://qiita-image-store.s3.amazonaws.com/0/25886/bcd521e2-6107-1624-d267-8a220a69f7d8.png)

# man を読んでも分からなかった

open コマンドの動作はこれで正しいのかもしれないと思い、 man を読むことにした。

```shell-session
$ man open
```

にも書いてあるとおり、わざと多重起動したい場合には ```-n``` オプションをつける。
いつの間にか付けなくても、タイミングによって多重起動しうるものになっている。
昔はこのような動作ではなく、 ```-n``` オプションがあるとき **のみ** 多重起動していたという記憶だった。
（今は手持ちのマシンに Snow Leopard 等がないので確かめようがない）

同じことを Safari で行っても再現した。
Google Chrome では 2 つ起動したあと、片方は勝手に終了した。

うーん、謎。
アプリケーションの排他制御が漏れやすくなってるんじゃなければ良いんだけど。
iOS向けコードジェネレータまとめ

（他に知っているものがあれば修正リクエストください！）


##Replia
psdからObjective-C/Swift等のコードを出力してくれる。有料
http://www.replia.io/

##Flux
アニメーションエディター
xcodeのプロジェクトを吐いてくれる
http://www.nthstate.com/

##PaintCode
おなじみのdrawrectエディター
PaintCodeで作った図形のコードをObjective-C/Swift等のコードを出力してくれる。有料
http://www.paintcodeapp.com/

##LaneKit
railsのような構文でモデルをObjective-C
https://github.com/larryaasen/LaneKit


##objective-c-generator-class
名前の通りObjective-Cのクラス構造をGUI上で作り出力する
https://itunes.apple.com/jp/app/objective-c-generator-class/id616753863?mt=12

##rdotm
androidのようにアセット（リソース）をクラス的に管理するクラスを吐き出す。
個人的に利用したことがあって、Androidからの移植案件でお世話になった。
https://github.com/ksoichiro/rdotm

##objc-generators
LaneKitのようにrails記法でモデルを吐かせる。ぱっと見LaneKitの方がヨサゲ
https://github.com/shairontoledo/objc-generators

##Paw
REST API開発ツール。
クライアント側のコードをSwiftやObjCで出力出来る。３０日間トライアル有り
https://luckymarmot.com/paw

##Objective-C to Swift Online Converter
オンライン上でObj-CのコードをSwiftに変えるすごいやつだよ。（ご察
http://objectivec2swift.net/#/about

##BezierCode
PaintCode同様、drawrectエディター
http://www.beziercode.com/

##QuartzCode
アニメーションを作ったObj-C/Swiftで吐いてくれる。
http://www.quartzcodeapp.com/

##ColorSnapper
画面上の色を拾ってUIColorで出力してくれる
http://www.colorsnapper.com/

##Core Animater
アニメーションをGUIで作ってObjCとSwiftで吐いてくれるやつ
http://www.coreanimator.com/#animatecode

##JSONExport
Jsonからクラスコードを生成する
https://github.com/Ahmed-Ali/JSONExport

##Xamarin(!)
Xamarinはネイティブコードを叩くパッケージファイルを出力するためネイティブコードを直接吐いてくれるわけではない（と思うので）注意
http://xamarin.com/platform

##rubymotion(!)
Xamarin同様、LLVM のバイトコードにコンパイルするので注意
http://www.rubymotion.com/

##SwiftGen
画像、Storyboard、UIColor、Localizable.stringsに対応するenumを自動生成し、タイプセーフにロードできるようにする.
自分で作成したカスタムテンプレートも使用できる.
https://github.com/AliSoftware/SwiftGen
UITapGestureRecognizerのTapがUITableViewのTapを邪魔する

UITableViewの中でUITapGestureRecognizerを使っていたのですが、

`- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath` が反応しなかったのでメモ。

### NGだったコード

```objc
// SampleTableViewController.m
- (void)viewDidLoad
{
    [super viewDidLoad];

    /**
    * これだと didSelectRowAtIndexPath: が反応しない
    */
    UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tableViewDidTap:)];
    [self.tableView addGestureRecognizer:tapGesture];
}
```

### 動いたコード

```objc
/**
 * SampleTableViewController.h 
 */
@interface SampleTableViewController : UIViewController <UITableViewDelegate, UIGestureRecognizerDelegate>

// ~~~~~~~~~~~~~~~~~~~~~~~~

/**
 * SampleTableViewController.m
 */
- (void)viewDidLoad
{
    [super viewDidLoad];

    UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tableViewDidTap:)];
    tapGesture.delegate = self; // これを追加
    [self.tableView addGestureRecognizer:tapGesture];
}

# pragma mark - UITapGestureRecognizer Delegate

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
  // UITapGestureが受け取っていい(= tableViewDidTap: が実行されていい)場合に YESを返す
  return [self canReceiveTouch];
}
```
Atomの設定を共有・移行するときはsync-settingsがオススメ

Atomの設定を複数のマシンで共有したり、新しく買った別のマシンに移行するときは、sync-settingsというpackageを使うのがオススメです。

[sync-settings](https://atom.io/packages/sync-settings)

使い方は、↑のリンク先にあるとおりです。Githubのアカウントがあれば使えます。

**init scriptやkeymap, スニペット、自分でインストールしたpackageを複数マシンで共有できます。Atom自体の設定も共有できます。便利！**


## なぜsync-settingがいいのか
自分は最初 `.atom`をDropboxに入れて、シンボリックリンクを貼る方法を試しました。しかしキャッシュファイルなど頻繁に更新されるファイルも共有され、Dropboxの同期が頻繁に走ってしまいました。また、packageやそれが依存しているnode_moduleなど大量のファイルが`.atom`に入っているため、アップロードに時間がかかりました。

`.atom`ではなく必要なファイルのみ共有することも考えましたが、keymap.csonやinit.coffeeなど複数あるので、１つ１つ対応するのはめんどうです。

別の方法として、[atom.io上でpackageにstarをつけておき、`apm starred -i`でインストールする方法](http://qiita.com/st44100/items/e9202cc9c8fb361e1175)もありますが、これだとinit scriptやkeymapまでは共有できません。

いろいろググっていたら、[Syncing settings & packages between machines - features - Atom Discussion](https://discuss.atom.io/t/syncing-settings-packages-between-machines/1385)を見つけ、sync-settingsの存在を知り、実際につかってみたらすんなり設定を共有できました。

今のところ手動で設定をアップロード／ダウンロードする必要があります。将来的には自動で同期できるようにするとのことです。
Mac上のdockerでVMWareのネイティブフォルダシェアが実現した話

ちょっとタイトルが意味不明になってますが。
docker-machine経由でVMWare Fusion上にdocker環境を用意することで、VMWareのネイティブフォルダシェアが実現したようです。

これによって、[Mac上のNFSをasync書き込み許可してVagrantを爆速にする](http://qiita.com/zchee/items/b365919ad6a75cdd4c04)のような小細工を使わなくても、普通のMac上のファイルを触るのとほぼ同じ速度でdockerを扱えます。
…分かりやすくどう表現したらいいか思い当たりませんが、とりあえず今までのboot2docker on Macよりめっちゃ速くなるってことです。

語弊があるのは承知ですが、Linux上でdockerを動作させるのと遜色ない速度で動くのはちょっとした革命じゃないでしょうか?

# いままで
Macでdockerを起動させるためのboot2dockerは、Virtualbox独自のシェアフォルダ機能でファイル同期をしているんですが、これがかなり遅かった。
そこで、なんとかnfsを使って高速化させようと、Vagrantを経由し、boot2docker自体をも改変して実現するForkがGitHubでもちらほら見かけました。

ただ、docker自体のアップデートに追従しないといけないので、保守が超面倒。
やっぱりリリースされた瞬間からスムースに新しいバージョン使いたいですよね。

# Docker社謹製のdocker-machine
そうこうしてるうちに、最近になってDocker三種の神器とも言われるmachine,compose,swarmが発表されました。

その中のmachine。
機能としては、様々なプラットフォーム(AWS･DigitalOcean･GCE･Virtualboxなど)に一発でdocker環境を構築するものです。

# VMWare対応
https://github.com/docker/machine/releases/tag/v0.1.0
そのmachineにも、二ヶ月ぐらい前にかなりのプラットフォームが追加され、そこにVMWareを見かけて試したものの、この時はまだVMWare独自のシェアフォルダ機能には対応していませんでした。
ようはVagrantでvmware_fusionをプロバイダとして起動してるのとあんま変わらない。ので遅かったのです。

# 夢のShared folder support for VMware Fusion
2015-04-20に、VMWare社に勤務(? Organizationsではあるようです)している[frapposelli](https://github.com/frapposelli)氏がdocker 1.6.0対応と共にShared folder support for VMware Fusionをコミット、docker-machineにマージされました。
https://github.com/docker/machine/commit/25583edbb384e7d95088d074a6c3b1d16fbfe580

早速試してみたところ、いままでのboot2dockerを大きく上回る速度でdocker pullしてくれました！

# ということで
VMWareをお持ちであれば、すぐにでもdocker-machineに切り替えましょう。

# ちなみに
- 失礼しました。Fabio Rapposelli氏はVMWareのCTOのようでした。
- docker-machineもローカル環境用にはboot2docker forkを使用しています
- なので元のboot2docker forkを保守してくれるかにかかっています
- Parallels Desktopは[いま進行中](https://github.com/docker/machine/pull/939)のようです。動きはするがshared folderに対応するまでmachineにはマージしない模様
- boot2dockerも、cliは[docker-machineに移譲するつもり](https://github.com/boot2docker/boot2docker-cli#pending-deprecation)のよう
- boot2dockerがdocker organizationsに吸収される日もあるのかも…
[Android] Fabricを使って開発中のアプリを配布してみる

Fabric使ってリリース前のアプリをユーザーテスト向けに配布する機会があったので備忘録代わりに残しておきます。開発環境はAndroid Studio 1.1.0です。

### Fabricって何
- Twitterが開発しているモバイル開発向けプラットフォーム。サイトは[こちら](https://get.fabric.io)。CrashReportの収集やリリース前アプリの配布など色々便利なことができます。無料で使えます。

## 準備

### アカウントの登録
- 何はともあれアカウント登録します。Fabricのページを開いてGet Started with Fabricから名前とメアドを入力して登録します。

![スクリーンショット 2015-04-29 18.03.30.png](https://qiita-image-store.s3.amazonaws.com/0/25841/29dec2d8-46f6-4b70-983a-5a47b3edb204.png)

- しばらく待つとActivate用のリンクが載ったメールが届くのでクリックして登録を完了します。メアド入力してからこのメールが届くまで微妙に時間がかかったので気長に待ちます。（たまたまかな？）
- 終わると下のイメージのメールが届くので Get Started with Fabricをクリックします。

![スクリーンショット 2015-04-29 18.10.40.png](https://qiita-image-store.s3.amazonaws.com/0/25841/a0a14a1d-8713-d618-6b75-ae74c1fa32ba.png)

### Fabric Pluginのインストール
- IDEに合わせたFabric用のツールをダウンロードします。今回はAndroid StudioなのでDroid君を選択。Plugin用のjarファイル群のダウンロードが始まるので終わるまで待ちます。

![スクリーンショット 2015-04-29 18.14.39.png](https://qiita-image-store.s3.amazonaws.com/0/25841/9d769e52-ba2d-c212-58d1-3159b3a051c5.png)

- 以降は画面の案内通りにAndroidStudioを開いてPreferences → Plugins を開き、Install plugin from diskからダウンロードしたzipを選択すれば完了です。
- AndroidStudioを再起動してFabricのアイコンが表示されていればOKです。

![スクリーンショット 2015-04-29 18.20.11.png](https://qiita-image-store.s3.amazonaws.com/0/25841/a1f0df9c-0852-6d62-29cc-79055b1a0148.png)

## アプリの配布

### Fabricにアプリを登録
- Android Studioで配りたいアプリのプロジェクトを開いて、おもむろにFabricのアイコンをクリックします。認証を求められるので登録したアカウントでログインします。
- そのまま進んでいくと以下の画面が表示されるのでCrashlyticsのinstallを選択します。

![スクリーンショット 2015-04-29 18.28.22.png](https://qiita-image-store.s3.amazonaws.com/0/25841/7083f42a-61d1-58b1-8089-6b325ea4a986.png)

- Fabricを使えるようにするためのコードが表示されるので、修正箇所を確認した後にApplyを選択します。

- 選択後、確認した内容がコードに反映されてGradleのBuildが走ります。終わったらその状態でビルドしてアプリを一回、起動します。起動完了後、ブラウザからFabricのコンソールを開き、アプリが登録されていれば完了です。

### アプリの配布
- Android Studioに戻りFabricを開きます。シェアアイコンのメニューがあるので選択します。

![スクリーンショット 2015-04-29 18.41.18.png](https://qiita-image-store.s3.amazonaws.com/0/25841/0b76aa6b-4437-6e27-4937-1bcd1802b200.png)

- 右下にuploadボタンがあるので、そこからまきたいapkを選択します。
- Release Noteを書いてDistributeを選択でアップロード完了です。

![スクリーンショット 2015-04-29 18.50.29.png](https://qiita-image-store.s3.amazonaws.com/0/25841/910f5243-c0e7-691f-09a7-328ead9e9376.png)

- ここまで来たら準備完了です。ブラウザからFabricのコンソールを開きShare Links → Create New から配布用のリンクが作成できます。
![スクリーンショット 2015-04-29 18.54.34.png](https://qiita-image-store.s3.amazonaws.com/0/25841/7fa0b5f9-620a-d6f1-f304-43425cb34348.png)

- 後はテスターにこのリンクを教えてあげれば、さきほどアップロードしたapkがダウンロードできるようになります。インストール時に提供元不明のアプリのインストールの許可を求められるのでテスト期間中は受け入れてください。
変数をどのように扱うか？：COBOLでチェックインタープリタ

#変数をどのように扱うか？
##課題：具体的な変数名のままだと汎用的なチェックインタープリタにならない
例えば、次のようなIF文によるチェック条件があったとします。「**従業員レコード．住所．郵便番号**」の部分が変数名です。

字句解析と構文解析は、チェックインタープリタの対象外にしたので、この様な変数をチェックインタープリタにどんな形で与えて、どのように扱えばよいか？

```
例：
IF　従業員レコード．住所．郵便番号 = "100-****"
THEN
　メッセージ出力 "住所は東京都千代田区"
END-IF
```

**従業員レコード．住所．郵便番号**は、従業員レコードの6桁目から8桁に相当する。
しかし、チェックインタープリタは「従業員ファイル」だけでなく、どんなファイルでも扱えるように、もっと汎用的にしたい。

##従業員レコードを抽象化してみる
従業員レコードを抽象化して考えると、単なる入力レコード(一本の紐、String)で、この「**入力レコードの6桁目から8桁**」というのが、チェックインタープリタで扱う変数となる。

チェックインタープリタの外部仕様として、入力は3つで出力は1つと定義する(厳密には入力は4つで、その1つはチェック条件ファイルなので、カウントには入れない)。
```
抽象化後：
IF　IN1.6-8 = "100-****"
THEN
　PUT OUT.1 "住所は東京都千代田区"
END-IF
```
![IMG_20150425_0001_NEW.jpg](https://qiita-image-store.s3.amazonaws.com/0/76786/557e8829-bf58-2b0d-21bb-a8dd63157c49.jpeg)
BigQuery で row-level permission を利用する方法（その１）

2015/4/16 に [BigQuery で row-level permission が導入された](http://qiita.com/hakobera/items/61a0decfe6946813b240#%E8%A1%8C%E3%83%AC%E3%83%99%E3%83%AB%E3%81%AE%E3%83%91%E3%83%BC%E3%83%9F%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3)と発表がありましたが、使い方が一向にドキュメントとしてでてこなくて、モヤモヤしていましたが、中の人である Jordan さんが、Stack Overflow で使い方を解説している記事をみつけたので、試してみました。

ちなみに row-level permission と言いますが、View を使っているため、行と合わせて列単位でも制限を書けることができます。

## 元記事

- [How do I use row-level permissions in BigQuery?](http://stackoverflow.com/questions/29682618/how-do-i-use-row-level-permissions-in-bigquery)
- [How do I give different users access to different rows without creating separate views in BigQuery?](http://stackoverflow.com/questions/29683423/how-do-i-give-different-users-access-to-different-rows-without-creating-separate)

元記事が2つあるので、Qiita でも2つに分けます。この記事では1番目の記事について解説します。2つ目はまた後日。

## 単純に公開する行を制限したい場合

1. 元データを含む private データセット、テーブルを作る。その際に、フィルタリング用の列を作っておく
2. 1 で作ったテーブルを参照する View を public なデータセットに作成する
3. private データセットを 2 で作成した View 経由でアクセスできるようにする
4. public データセットを公開したいユーザ／グループに共有する

### 1. 元データを含む private データセット、テーブルを作る。その際に、フィルタリング用の列を作っておく

こんな感じのテーブルを作ります。`is_secret` が行の権限フィルタリング用の項目です。（この作業中に、WebUI のスキーマ指定のUIが進化していることに気が付きました。）

![スクリーンショット 2015-04-29 18.33.18.png](https://qiita-image-store.s3.amazonaws.com/0/25774/10408c39-fed0-4147-11aa-f979d1f3eea6.png)

データはこんな感じで入れておきます。

| customer:string | id:integer | hidden_value:string | is_secret:boolean |
|-----------------|------------|--------------|-------------------|
| c001            | 1          | A            | false             |
| c002            | 2          | B            | true              |
| c003            | 3          | C            | false             |

これが private データセットの customer テーブルとして保存されているとします。

### 2. 1で作ったテーブルを参照するビューを public なデータセットに作成する

上記のテーブルに対して、公開対象とする列、行を含むように View を作ります。


```SQL
SELECT
  customer,
  id
FROM
  [private.customer]
WHERE
  is_secret = false
```

これを public データセットの public_customer ビューとして保存します。

![スクリーンショット 2015-04-29 18.36.00.png](https://qiita-image-store.s3.amazonaws.com/0/25774/1f782f0b-043d-9372-ffc5-395852c6435e.png)

### 3. private データセットを 2 で作成した View 経由でアクセスできるようにする

このまま public データセットを共有しても、View は見えるのですが、権限エラーで SELECT できません。これを解消するために、private データセットを 2 で作成した View 経由でアクセスできるようにする設定をします。

まず、private データセットを選択し、"Share dataset" を選択

![スクリーンショット 2015-04-29 18.38.20.png](https://qiita-image-store.s3.amazonaws.com/0/25774/55e74644-c25a-79a2-d13a-5b89dea3410e.png)

次に "Add people" 欄で、種別として、"Authorized View" を選び、テキストボックス欄に View 名を `project_id:dataset_id.table_id` 形式で入れます。

![スクリーンショット 2015-04-29 18.44.57.png](https://qiita-image-store.s3.amazonaws.com/0/25774/0e3372f3-4f98-e014-d897-c2b3ff5b0eda.png)

以下のように設定されていればOKです。

![スクリーンショット 2015-04-29 18.49.11.png](https://qiita-image-store.s3.amazonaws.com/0/25774/2f2782c5-4793-4c9b-e540-bed35e1e70e7.png)

### 4. public データセットを公開したいユーザ／グループに共有する

あとは public データセットを公開したいユーザ／グループに共有するだけで完了です。アカウントを切り替えて、SELECT できることを確認しましょう。

![スクリーンショット 2015-04-29 18.52.05.png](https://qiita-image-store.s3.amazonaws.com/0/25774/6d4bcc1c-bd38-92ef-33cc-f6ccada75798.png)

以上です。