OmniAICreator/Qiita-1.07M huggingface dataset:
RailsアプリへのGoogleAnalyticsの導入手順

導入自体はかなり簡単だったのでさっくりまとめ

## 手順

### トラッキングID発行
* http://www.google.com/intl/ja_jp/analytics/ にアクセス
* Googleアカウントでログイン
* 申し込みフォームがあるので申し込み
	* WebアプリのURLや名前を埋めて申し込む。
	* 既にサイトを作ってデプロイしておく必要がある。
* トラッキングIDが発行される。これをWebアプリに埋め込むことでGoogle Analyticsが動作する。

### タグ埋め込み
* [google-analytics-rails](https://github.com/bgarret/google-analytics-rails)というgemを使うのが楽なのでこれをGemfileに記載する。

  ``` Gemfile
gem 'google-analytics-rails'
```

* トラッキングIDを設定値に記載する。

  ``` config/environments/production.rb
# トラッキングIDを記載
GA.tracker = "UA-xxxxxx-x"
```

* `application.html.haml`のhead内にタグ挿入処理を記載する。

  ``` app/views/layout/application.html.haml
    = analytics_init if Rails.env.production?
```

* (※erb利用の場合はこちら↓)

  ``` app/views/layout/application.html.erb
    <%= analytics_init if Rails.env.production? %>
```

  

* デプロイしてできあがり！


## 動作確認
* トラッキング組み込み確認
	* Google Analyticsの「アナリティクス設定」の「トラッキング情報」にステータスが表示されるが、そこが`ステータス: トラッキングがインストールされています`になっていれば設置完了。
* レポート確認
	* GoogleAnalyticsの「レポート」から状況が確認できる。「リアルタイム」のレポートはアクセス内容がほぼ即時反映されるので、サイトにアクセス後このレポートにアクセス結果が反映されればOK。
tmuxアタッチスクリプト

tmux を使っていて、気が付くとセッションが残っている事がある。
職場の踏み台サーバで「tmuxが4つも居ますよ」なんて言われると恥ずかしい。

そんなあなたに、むしろ私に、

```sh:tmux-attach.sh
#! /bin/sh
IFS='\n'
sessions=$(tmux list-sessions)
if [ $? -eq 0 ]
then
    numsessions=`echo $sessions | wc -l | sed -e 's/ //g'`
    echo numsessions: $numsessions
    if [ $numsessions -eq 1 ]
    then 
        echo $sessions
        echo attach
        exec tmux attach
    else
        echo there are $numsessions sessions found.
        echo which session do you want to attach ?
        echo $sessions
        read select
        exec tmux attach-session -t $select
    fi
else
    echo there are no sessions. start a new session.
    exec tmux
fi
```
セッションがあったらあったで、どれにする？って聞いてくれるので意図的に複数動かしても大丈夫。

あとは、ひとつのssh-agentでtmuxの中のシェル全部を賄う方法がほしい。
XenServer6.5でvGPUしようと失敗した一例

XenCenterでGPUタブが出てたので使えるかと思ったけどダメだった例
----
ハードウェア環境：Dell Studio Slim 540s
・Core 2 Quad9400
・Intel G45チップセット（VT-d非対応）
・GMA X4500HD（オンボード/vGPU対応）

搭載されているIntel G45チップセットはIntel VTに対応かつ、オンボードのVGA　GMA X4500HDもvGPUに対応しています。
しかし、Intel G45チップセットなMB(システムボード)はVT-dに対応していないのでvGPUは使用できませんでした。

残念です。

ちなみにvGPUで使っていたVMをvGPU非対応のホストに移行したらエラーで起動しなくて焦ります。VMのプロパティでGPUを使用しないにすると無事に立ち上がりますのでご安心を。

----
参考：Intel 6シリーズのVT-d対応マザー一覧
http://blog.livedoor.jp/kokoten/archives/50862734.html
vagrant　コマンド殴り書き

vagrant　コマンド殴り書き

vagrant -v   vagrantのバージョンを確認

vagrant box add precise32 http://files.vagrantup.com/precise32.box
(vagrant box add 任意の名前 addするboxのurl)
boxを追加

vagrant box list   すでに作成されたboxを一覧表示
9章　履歴データの問題点


"世界は履歴データであふれている"
"多くのスロークエリは履歴の扱いに失敗しているもの"

# Tシャツを売るサイトの例

```Tshirt
id
name 
price
is_valid_at  →　有効になる時刻(陳列時)
is_invalid_at → 非有効になる時刻(売り切れなど)
```

みたいなテーブルがあったとして、

```
Tshirt.where(is_valid_at < Times.now, is_invalid_at > Times.now ).name
```

こういうクエリを打つ時があるとおもいますが、
時間によって、集合の状態が変わることはリレーショナルモデルに想定されていない。　
が、現実は違う。(商品は売り切れる。)


# テーブルを分割しなさい。

TshirtVariant 
TshirtInvariant
テーブルに分けるべき。


## メリット
1 理論的にリレーションを守りなさい
2 where(valid_at < Times.now, invalid_at > Times.now)を永遠に打つ必要はなくなる。
3 B+木の検索アルゴリズムはlogに比例
4 ほとんどのクエリは、現在のvariantのテーブルに集中するのでキャッシュヒット率が高い。
データベース ≠ スプレッドシート

管理ツールでデータベース[^1]を開くと、ちょうどスプレッドシートのように縦横に並んだものが出てきます。ただし、その性格はスプレッドシートとはまったくの別物です。

# 構造のないスプレッドシートと、構造のあるデータベース
スプレッドシートはただ二次元的にセルが広がっているだけのもので、どこにどんなデータを置こうが、縦置きにしようが横置きにしようが問題ありませんし、極端な例としては、セルを正方形にしてレイアウトに使う、「[Excel方眼紙](https://ja.wikipedia.org/wiki/Excel%E6%96%B9%E7%9C%BC%E7%B4%99)」なんていうことすらできてしまいます。

それに対して、データベースはスキーマでどのような**属性**が入るかを定義して、その属性を束ねた**組**が多数集まっているものです。ここで**属性**、**組**と書きましたが、ふつうには「列」「行」と呼ばれることが多く、実際そういう感じで表組みして表示されることもあります。とはいえ、属性と組は本質的に違うもので、行と列を入れ替える、なんていう操作はデータベースの表に対しては意味をなしません。

# 「列」の順序
表組みにする以上は、列に順序ができてしまいます。ただし、概念上は**組**は**属性**の「集合」であって、順序を持つものではありません。SQLで`SELECT`を行う際には、取得したものには順番が付いてしまいますが、

```sql:row-order
-- その1
SELECT id, name FROM users
-- その2
SELECT name, id FROM users
```
のように、列名をきっちり書けばどうとでもできてしまいます。定義上の「順番」は、列名を省略して`*`で取得した時の順序、程度の意味しかありません。

# 「行」の順序
もともとのデータベース全体も、そこから`SELECT`で抽出したものも、**組**の「集合」であって、本質的には順序性を持ちません。そのまま抽出すると、どのような順序で取れるかは不定となります。

`SELECT`時に`ORDER BY`で順序を指定することもできますが、これは[このマニュアルにもある](http://itdoc.hitachi.co.jp/manuals/3000/30003F5600/EEXR0039.HTM)ように、データ自体に対する操作ではなく、そのデータを抽出するための、**カーソル**への操作です。


[^1]: くどくなるので省略しますが、SQLで操作するような、リレーショナルデータベースを前提として話を進めます。
Eclipse のあのショートカットキー(Android Studio移行者向け)

Eclipse から Android Studio へ移行した時に、ショートカットキーで戸惑ったのでメモ。

実行(Run)
--------
Shift + F10

デバッグ(Debug)
--------------
Shift + F9

名前変更(Rename)
---------------
Shift + F6


インポートの編成(Organize Imports)
--------------------------------
Eclipse だとショートカットキーを押して必要なパッケージをインポートしていたけど、Android Studio では、自動でインポートしてくれる。便利！

設定方法
1. `File` -> `Settings...` -> `Editor` -> `General` -> `Auto Import`を開く
2. `Optimize imports on the fly` にチェック　
3. 最後に `OK` をクリック
MAに向けてTwilioと楽天トラベル空室検索APIを使ってアプリを作りたい


Mashup Awardsでまともに開発できるようになりたいなと思っていたので

WebAPIを叩くアプリを作ってみた。



アプリの概要は以下

・楽天トラベル空室検索APIを使い、現在地近くのホテル空室情報を取得する

,・予約ボタン的なものを押したら、予約したことにして、そのデータを宿泊履歴としてサーバーに保存

・履歴更新と同時にTwilioAPIを叩いて電話をかける



ちなみに上記のアプリには「社畜が深夜残業をする際のホテル泊をサポート」する目的で作った(気分だけでもMAらしさを出すために)、宿泊履歴を保存しているのは、一週間に宿泊した回数が多かった時に、お叱りをしてもらうためだ。電話をかけるのは家族への連絡として捉えている。そんなストーリーを背負っているが、ここでは特に気にせずに技術的な話をしていきたい。



まずJSを使って自分のブラウザからAPIを叩けるようにする

その前に楽天トラベル空室検索APIを使うには楽天WebServiceへのログインとアプリIDの発行が必要なのでそれは下記から

http://webservice.rakuten.co.jp/

仕様は下記から

http://webservice.rakuten.co.jp/api/vacanthotelsearch/

ではさっそくできたコードの方

```
function rakutentravelUrl() {
  var rakutentravelApi ="https://app.rakuten.co.jp/services/api/Travel/VacantHotelSearch/20131024";
  var rakutentravelKey =
  “********";
  var queri = rakutentravelApi + "?applicationId=" + rakutentravelKey +
  "&checkinDate=" + "2015-07-01" +
  "&checkoutDate=" + "2015-07-08" +
  "&latitude=" + lat +
  "&longitude=" + lng +
  "&searchRadius=" + RANGE + 
  "&datumType=" + MAXHIT;
  // XMLHttpRequest オブジェクトを作成
  xhr.open("GET",queri,true);
  xhr.send();
  // 出力テスト
  console.log(queri);
}
```

今度はスマホアプリから叩く方法を書こうと思う
Intel EdisonをMacにUSB接続したときに反応しないときの対処


Intel Edisonトラブル話です。
![](http://i.gyazo.com/86c61005c7e212adc40fe8a0dc404afb.png)

## EdsionがMacから認識されなくなりました。

ファームウェアのアップデートでそうなったのかどうなのか...

![](http://i.gyazo.com/9ed4574a90c2c04f96d421e301c636ed.png)

こんな感じです。

### 復元したくて調べてみると出てくる情報

* [インテル® Edisonの初期化とファームアップデート（Mac）](http://edison-lab.jp/flash/mac/)
* [15: Intel Edison上のOSが起動しなくなった / rootパスワードを忘れた時には](http://dev.classmethod.jp/hardware/15-intel-edison-recovery/)
* [Intel Edison Moduleのパスワードが不明な際の初期化方法](http://kei-sakaki.jp/2014/11/02/intel-edison-module-unknown-password-init-setting/)

とか色々あるんですけど、まずはUSBは認識されていることが前提の話です。

`cd /Volumes/Edison`でEdisonのディレクトリに行って...みたいなことをよく書いてますが、

```mac
$ cd /Volumes/Edison
cd: no such file or directory: /Volumes/Edison
```

こんな感じでそれすらできない状態でした。

## 解決方法は2つ目のマイクロUSBケーブルとcuコマンド

(どこのサイトで見たか忘れたのですが...)

**マイクロUSBを2本使います。**

Breakout Boardを使っているのですが、2本目をもう一方の差し込み口に刺し、Macと繋げましょう。

![](http://i.gyazo.com/691b04eea1ff6e53d97d0f42b559d141.png)

ターミナルから以下を入力して`タブ`を押します。

```mac
$ sudo cu -s 115200 -l /dev/cu.
```

こんな感じでBluetoothやUSB接続しているデバイスの接続口(シリアルポート)が表示されます。

```mac
$ sudo cu -s 115200 -l /dev/cu.
cu.Bluetooth-Incoming-Port%  cu.n0bisuke-WirelessiAP%
cu.Bluetooth-Modem%          cu.usbserial-A502F2QQ%
cu.Sphero-RRY-AMP-SPP%
```

`cu.usbserial-A502F2QQ`がEdisonが繋がっているポートです。
環境によって違うので似たような名前のものを探してみてください。

* ちなみにusb1本の場合は`cu.usbserial-`的なものは表示されていません。

```1本の場合
$ sudo cu -s 115200 -l /dev/cu.
cu.Bluetooth-Incoming-Port%  cu.n0bisuke-WirelessiAP%
cu.Bluetooth-Modem%          cu.Sphero-RRY-AMP-SPP%
```

タブで候補を見つけたら`cuコマンド`を実行しましょう。
[cuコマンド](http://www-01.ibm.com/support/knowledgecenter/ssw_aix_53/com.ibm.aix.cmds/doc/aixcmds1/cu.htm?lang=ja)って初めて使いました。ちなみにroot権限じゃないとおこられます。

```mac
$ sudo cu -s 115200 -l /dev/cu.usbserial-A502F2QQ
Password: (Macの管理パスワード)
Connected.

Poky (Yocto Project Reference Distro) 1.6.1 n0bisuke ttyMFD2

n0bisuke login: root (Edisonのユーザー名...特に設定してない場合はrootを指定)
Password: (Edisonのパスワード...特に設定してない場合は入力なし)
root@n0bisuke:~#
```

ログインできました！

## 無事にログイン出来たのでWebに繋げてみます

ここからは他のサイトでも書いているので冗長かもしれませんが...

`configure_edison --setup`でEdisonの設定ができるのでWifiに繋げましょう。

```edison
# configure_edison --setup

・
・
(途中省略。対話インターフェイス通りに進めてwifi接続します)
・
・
Done. Please connect your laptop or PC to the same network as this device and go to http://192.168.11.57 or http://n0bisuke.local in your browser
```

これでネットに接続できたのでMacのブラウザから`http://192.168.11.57`にアクセスするとデバイスインフォメーションが見れます。ここまでくると安心です。

![](http://i.gyazo.com/06c177ac12623dc959ded6f11ef038e9.png)

SSHでも接続できます。

```mac
$ ssh root@192.168.11.57
```

あとは色々とパッケージいれたり[Milkcocoa](https://mlkcca.com/)と繋いだり！
好きなようにできますね！

困った方の参考になれば幸いです :+1:
iOSのカスタムキーボードでフルアクセスの許可状態を取得

iOS8.3からフルアクセスの許可状態取得の方法が微妙に変わったのでメモ。


```objc:isOpenAccessGranted
+ (BOOL)isOpenAccessGranted
{
    return (BOOL)[UIPasteboard generalPasteboard];
}
```


iOS8.3以前はファイルマネージャを使う手法があったが、8.3からその手法が使えなくなった。
こちらの方が短く書けてわかりやすいと思った(小並感)。


参考:http://stackoverflow.com/questions/25472388/how-to-check-the-allow-full-access-is-enabled-in-ios-8
Chrome44,45におけるPush Notificationの仕様変更(BREAKING CHANGE)

Chrome Canary版で[bpush](https://bpush.net/)を動かしてみたら動かず。。。
原因を探るとPush APIで破壊的変更があったようで。
これらはChrome44でDeprecatedになりChrome45では削除されるようです。

##PushSubscription.subscriptionIdの廃止
このプロパティでGCMでPUSH通知するためのIDを取得できるのですが廃止されます。
替わりに PushSubscription.endpoint を使う必要があります。
URL形式の文字列ですがendpointなのでsubscriptionIdに相当する文字列を含んでいます。

こんな感じで。
```js
var subscriptionId = subscription.endpoint.split("/").pop();
```

##PushManager.subscribe({options})でuserVisibleOnly:trueが必須となった
これまではオプションを指定しないでも動いてくれていたのですが、userVisibleOnly:true が必須となったようです。

```js
serviceWorker.pushManager.subscribe({userVisibleOnly:true}).then(onSuccess, onError);
```

こんな公式文書も用意してくれています。
https://docs.google.com/document/d/13VxFdLJbMwxHrvnpDm8RXnU41W2ZlcP0mdWWe9zXQT8/edit?pli=1#heading=h.1lvfa4613jof
Pre Render

# Pre Render

pre-browsing シリーズの最後。

後ろに隠しタブを実際に立ち上げて、 pre-fetch した結果をレンダリングするイメージ 。

実際に location が変わった場合は、その結果を前に持ってくるだけなので、最速で遷移することができる。

# API

```html
<link rel="prerender" href="://example.com">
```

# page visibility の考慮

ただし、この場合はブラウザ上で実際に CSS の適用や JS の実行なども含めて動くので 注意が必要。
例えば、ユーザが見ていないのに video の再生が始まったり(音は出るんだろうか？)、 実際にはアクセスしていないのに Analytics に情報を飛ばしたりしてしまう可能性があ るので、それがまずい場合は、 page visibility API などを用いて場合分けする必要が ある。


# range をつける

prefetch もそうだけど、例えば prefetch をしている最中にその画面に遷移してしまっ た場合どうするかという問題がある。

これはブラウザによって違う。

基本的には一旦中止されるので、 prefetch レベルが終わってればレンダリングだけやり直すことになりそう。
prefetch が中断している場合は、 range に対応していればブラウザが途中から取得し直すということが可能になる。

問題はそういうことが可能なコンテンツなのかということだ。
基本的には静的コンテンツとの相性が良いということがわかる。
Prefetch

# Prefetch

Prebrowsing シリーズ

次に表示するリソースが、高い確度でわかっている場合は、 prefetch という手段がある。

しかし、 prefetch の並列度(ff は一度に一つ、 chrome は 10 並列)や、走るタイミング(firefox は onload 後、chrome/opera は現在のページを取得中でも TCP を奪ってまでやる。)など仕様が若干曖昧なところがある。

## API

```html
<link rel="prefetch" href="http://example.com/">
```

## キャンセル時

prefetch 中に画面遷移すると、 prefetch はキャンセルされる。すると遷移(遷移のために)にもう一度やらないといけない。

この無駄を減らすには、 "Accept-Ranges: bytes" ヘッダが考えられる。

ブラウザが途中からの取得を可能にする。

steve 御大いわく

> It's best to prefetch the most important resources in the page: scripts, stylesheets, and fonts. Only prefetch resources that are cacheable - which means that you probably should avoid prefetching HTML responses.
> ベストなのは、 prefetch は重要なリソース(js, css, font etc)のみに行う。
キャンセル可能なもののみ行う。つまり HTML にはやらない。
Effective C# 4.0に対するunityのための解題

Unityのためのベストプラクティス集としては、
[Unity開発に関する50のTips　〜ベストプラクティス〜](http://warapuri.tumblr.com/post/28972633000/unity-50-tips)
といったものが有名だろう。
これはUnity全体に関するTipsである。
またUnityのスクリプト言語であるc#に絞った場合、c#言語自体のTipsとしては、
"Effective C# 4.0"、"More Effective C#"が有名だろう。
しかしEffective C# 4.0はc#言語自体のTipsでありUnityのスクリプト言語であるところのc#とは若干異なる部分もあるので(c#のバージョン自体も異なるのだが、その部分は今回は除外する)、その点について思いついたことを書き連ねてみた。

以下にEffective C#のトピック。

##1.publicメンバの代わりに常にプロパティを使用する
　UnityではUnityがシリアライズ可能な型を持つフィールドは、public指定、または適切なアトリビュート指定をすることによってシリアライズがおこなわれ、Inspecter上での編集が可能になる。
　フィールドに対してpublic指定を使わないというEffective C#のプクティスに従うなら、それでもUnityのシリアライズはおこないたいだろうから、追加の指定が必要だ。
　下に示すのはシリアライズをおこないInspecterに表示("Test"として)し、かつクラス外からは読み出しのみ可能なプロパティ"Test"。

```csharp:
    [SerializeField]
    bool m_Test = false;
    public bool Test {get {return m_Test;}}
```
　このような指定によって、プロパティ"Test"はUnityのInspecterからか同一クラス上からしか書き換えすることはできなくなるため、プログラムのバグ等によって不用意に破壊されることは無くなる。

　また以下のようにアトリビュート指定を変更すればシリアライズはおこなわれるが、Inspecterには表示されない。

```csharp:
    [SerializeField,HideInInspector]
    bool m_Test = false;
    public bool Test {get {return m_Test;}}
```
　これは同一クラス上からしか書き換えすることはできない。
　このようにUnityのフィールドはプログラムへの公開レベルに加えて、シリアライズするかどうか、UnityエディタのInspecterへの公開レベルを別途制御可能である。


##2.constよりもreadonlyを使用する
　c#にはコンパイル時定数であるconstと、実行時定数であるreadonlyがある。
　readonlyはコンストラクター、スタティックコンストラクター実行時には初期化可能である。

```csharp:
　readonly List<int> a=new List<int>();
```
　このように初期化されたフィールド"a"はreadonlyなため、実行中、決してnullになることは無いためnullをチェックする必要が無い(しかしリスト"a"自体は自由に書き換えて使用できる。readonlyなのはフィールド"a"なのであってそのポインタによって指し示されたリスト"a"は書き換え可能だからだ)。
　ただしUnityではreadonlyなフィールドは決してUnityシリアライズされないため、意識せずに使用していると思ったような挙動にならないことがある。
　またUnityEditor上では実行中でもホットリローディングによって、フィールドに対してコンストラクターが実行され初期化がおこなわれる可能性がある。
　このためreadonlyなリストの中身は破壊されてしまい継続実行することはできなくなる。

##6.さまざまな同値性メソッドの関係を把握する
[object.ReferenceEquals(someObject, null) の方が someObject == null より早い…が、盲目的に使うのは危険](http://tsubakit1.hateblo.jp/entry/2015/05/28/014440)
にあるようにUnityは同値性メソッドは同値性メソッドを上書いているようだ。

##12.割り当て演算子よりもメンバ初期化子を使用すること
自動実装プロパティでは使えない。
しかしそもそも、Unityでは自動実装プロパティを使うよりも、明示的にバッキングストアを書いて、それをインスペクターに反映すべき。

なお、

```csharp:
int Test;
int test;
int _test;
int m_test;
```
いすれもがUnity Inspector上ではTestの表記となる。

##13.staticメンバは適切に初期化する
Unityではstaticメンバはシリアライズされないため、あまりうまく活用できない。
staticメンバはシングルトンのinstance内でのみ使う変数、readonlyな値型などにだけ使うのが好ましく、残りはUnityシングルトンのフィールドとして定義して、プロパティをstaticとして公開すべきたろう。

##20.値型は不変かつアトミックにすること
バッキングストアをreadonlyにしてコンストラクタで初期化をおこなう方法が紹介されているが。
UnityはreadonlyをInspectorに表示できないので、前述のプロパティとしてgetのみを定義する方法がいいだろう(ただし、これだとInspecterには表示できるが、同一クラス内からなら書き換えも可能になってしまうが)。

##33.親クラスの変更に応じる場合のみnew演算子を使用すること
　UnityにおいてはAwake()、StartUp()、Update()関数を再定義するためにはnewを使うといいだろう。

```csharp:
new void Awake(){
    base.Awake();
}
```
　newを使わないと、基底クラスを書き換えてvirtual宣言を追加してやる必要があるし、これらの関数はユーザーが直接呼び出すこともないからEffective C#にあるような意図しない結果になることも無いからた。
財務分析はまずこれを見よう！危ない企業がすぐわかるGC注記とは

はじめに
=====================================================
財務分析と、色々な指標を適当に並べて企業評価をする人がしばしばいるが、違う。そうじゃない。といつも思います。
意外と知られていないですが、「継続企業の前提に関する注記」、略称でGC注記（GC：Going Concern）といわれるものが日本の財務諸表には存在します(簿記一級にもでてきません)。
端的にいえば、「１年以内に倒産する可能性が高い企業」を表すものです。

アナリストや取引先は、財務諸表数値が良くても、この注記がつくと取引相手などは相当危ない企業と考えて取引をひきあげたり、撤退することも考えられています。
そのため、解析モデルにもダミー変数として入れるべき指標として取り上げました。

GC注記について
====================================================

GC注記とは
---------------------------------------------------
正式には、「企業が将来にわたって事業活動を継続するとの前提」のことで、これを省略して「継続企業の前提」といいます
さらに、海外ではGoing Concernと言われることから、「GC注記」とも言われます。
つまりなんなのか端的にいえば、「１年以内に倒産する可能性が高い企業」と表す注記のことで、記載は権利ではなく、義務です。
「なぜ将来にわたってが１年以内って話になってんだ！」と反論する人がいれば、それは会計基準に「合理的な期間（少なくとも貸借対照表日の翌日から1年間）にわたり企業が事業活動を継続できるかどうか」とされているからです。

実際GC注記がつくと、上場企業でおよそ10％程の確率で１年以内に倒産します。
ちなみにGC注記のみで倒産確率を見積もると、財務諸表の数値情報のみで分析して取得した倒産確率より精度が高いという研究結果もあります。

GC注記制定
---------------------------------------------------
平成14年の監査基準の改定時に、「企業が将来にわたって事業活動を継続するとの前提について，監査人が検討することに対する社会の期待が存在する。」と考えられて追加されました
※平成15年3月1日以後の財務諸表に記載義務があります

財務諸表での記載のされ方
---------------------------------------------------
財務諸表上は、「継続企業の前提に関する注記」といったページに、「１年以内に倒産する理由は事象、対応策、原因」などが書かれています。

興味がある方は詳細を以下などで見て欲しい。
<http://www.gtjapan.or.jp/monthly_report/2009-05-vol-04.html>

2015年3月のGC注記の効果
---------------------------------------------------
2015年3月のGC注記記載企業は上場企業で25社あり、2014年9月より3社減少している。
減少した3社のうち1社は倒産。また、3月に注記が新たに入った1社は5月末をもって上場廃止になっています。
このことからもGC注記の効力が絶大であることは見てとれます。


GC注記を解析にいれるべき理由
----------------------------------------------------
GC注記は、その企業が現在存続する可能性を見積もっている。ただ、それ以上にも重要なことが、持ちこたえることができる企業もGC注記がついたことで、取引先や株主、銀行などの利害関係者の信頼性を減少させることにあります。
それら定性的な観点を財務分析にて評価するためにも解析にはGC注記の観点も入れておくべきだと考えています。
※ただし、多重共線性には注意が必要

GC注記の分析トレンド
====================================================

諸外国での分析への応用
----------------------------------------------------
アメリカでは1990 年代前半に起きた BCCI 事件などの企業破綻を受けて，継続企業の前提に対応する監査基準が制定されている。
それもあってか、1990年よりロジットモデルにGC注記を説明変数に組み込む分析があります。例えば以下。
* Hopwood,W.,J.McKeown and J.Mutchler,(1989),”A Test of the Incremental Explanatory Power of Opinions Qualified for Consistency and Uncertainty, ”, Accounting REview,Vol.64,No.1,January,28-48
* Raghunandan, K. and K. R. Subramanyam(2003), ”Market Information and Predictive Accu-racy of the Going Concern Opinion, ”, working paper, Florida International University

日本での分析
----------------------------------------------------
GC 監査に倒産予測を利用する逆の発想から GC 監査の必要性を問う内容である GC 監査と倒産予測に関するサーベイといったものはあるが，実際にヒストリカルデータを利用した分析はありません（学士論文は除く）

倒産分析やるならロジスティック回帰分析
----------------------------------------------------
以下、参考にしてください。
※ちなみにGC注記のような、「ある・なし」はリスクファクターをダミー変数で表し、あるなら１、ないなら０のように評価するのが一般的です。
<http://qiita.com/NaoyaOura/items/6ad5142b0306476d9293>
こどもとはじめるIchigoJam (2) 


## 「めぢからゲーム」を改造する

『こどもパソコンIchigoJamではじめるプログラミング』（その２）「めぢからゲームをかいぞうせよ」に掲載されているプログラムリストにちょっとだけコードを追加した。このめぢからゲーム、数字の早押しゲームで結構楽しい。もうちょっと味付けしようと思えば、やっぱり効果音。圧電スピーカを取り付けてやれば音付きのゲームになって、もっと燃えるでしょ？ゲームが終了するときにはメロディがあるといいよね。

![めぢからゲーム（改）ソースコード](http://cl.ly/image/2R3g3b0X3V1H/%E3%82%81%E3%81%A1%E3%82%99%E3%81%8B%E3%82%89%E3%82%B1%E3%82%99%E3%83%BC%E3%83%A0%EF%BC%88%E6%94%B9%EF%BC%89%E3%82%BD%E3%83%BC%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%88%E3%82%99.jpg)

うん、やっぱり音がある方が楽しいね。

## MMLは改造のきっかけになる？

改造、といっても、BASICを初めて触るこどもには、どこから手をつけて良いのかわからないはず。たぶん、とっかかり易いのは最後の一行、MMLの改造。

CDEFGABCがドレミファソラシド。C4はドの四分音符、C4.とすると、ドの付点四分音符。などとマニュアルに掲載されたMMLの一覧表を説明してあげれば、ソプラノ笛を吹く小学生ならもう大丈夫。試行錯誤を繰り返しながら、楽しいエンディングテーマをひねり出すことでしょう。

こどもには、先ずノーマルの「めぢからゲーム」を楽しんでもらい、その後にこの（改）を与えて違いを探し、改造入力してもらいましょう。正解のキーを押せば圧電スピーカから音が出ますし、終了したらメロディーが。しばらく遊んでくれることでしょう。

飽きてくる少し前に、おもむろに改造の方法を紹介するのです。あるいは「どうしてさっきのプログラムと違って音が出るの？」と質問してくればしめたもの。マニアックに解説しても聞く耳を持つでしょう。
nw.jsのglobalオブジェクトはページ間で共有される。

これを知った時はちょっと驚いた。当たり前かもしれないけども。

## どういうことか

globalオブジェクトにプロパティを定義すると、ページ遷移してもその内容は維持されているということ。つまりページ間で情報共有するのにcookieやローカルストレージを使わなくてもよい。ただ永続性はないので注意すること。アプリを閉じれば当然プロパティは消える。

## 例えば

a.htmlでa.jsが読み込まれ、実行されるとする。このコードはb.htmlに遷移する。

```js:a.js
global.data=1;

window.location.href = 'b.html';

```

b.htmlでb.jsが読み込まれるとすると

```js:b.js

// 1と表示される。
console.log(global.data);

```

以上、これだけ。ページ遷移間で状態を維持するのもとても簡単にできるね。
UITableViewやUICollectionViewのセクションをenumで管理

UITableViewやUICollectionViewのセクションはViewController内にenumとして定義しましょう。
セクション数の取得等に、count, arrayを定義しておくと非常に便利です。

```swift
    enum Section : Int {
        case Header
        case Bill
        case Payment
        
        static let count:Int = {
            return array.count
        }()
        
        static let array:[Section] = {
            var sections = [] as [Section]
            var i = 0
            while(true){
                if let s = Section(rawValue: i++){
                    sections.append(s)
                }
                else{
                    break
                }
            }
            return sections
        }()
    }
```
[覚書]Sophos UTM 9.3 インストール Enterprise tool kit

UTM 9.3のインストール時にEnterprize tool kit(有償ライセンス)も同時にインストールするか選択がある。
選択しないと、インストール後の起動の際にgrubファイルが見つけれなくて起動できない現象が発生する。
Node.js + Express4でセッションを使いたい

Node.js + Express4でセッションを使うときをMySQLを使いたい。
以下個人的なメモ。 MySQLはインストール済みが前提

こちらのサイトを参考にしました。
https://github.com/expressjs/session
https://github.com/nlf/connect-mysql
http://qiita.com/zaru/items/68b4f64c1f0d10b6a27e


・インストール
$ npm install express-session
$ npm installconnect-mysql


・packaeg.jsonに追記
・読み込み。
var session = require('express-session');

var MySQLStore = require('connect-mysql')(session),
	options = {
		secret: 'hoge',
		config: {
			host: "***",
			database: "***",
			user: "***",
			password: "***"
		}
	};


app.use(session({
	store: new MySQLStore(options),
	secret: 'hoge'
}));
sails.jsでjs/cssのキャッシュ対策をする

# はじめに
js/cssのキャッシュ対策にはQuery Stringを付けると良いらしい。
http://wisdomtrees.net/?p=10

でもSails.jsはデフォルトでGruntが組み込まれていて、特定ディレクトリ以下のjs/cssが勝手にLayout.ejsに読み込まれたり、Production環境ではconcatやらminifyを勝手にやってくれる。便利なんだけどGruntよく分からんWeb初心者には難しい。

# 実装
というわけでSails.js(0.11.x)でjs/cssのキャッシュ対策の方法。修正するファイルは3つ。

``` js:/tasks/config/uglify.js
// jsの難読化をするGruntタスク
module.exports = function(grunt) {
  
  var version = require('../../package.json').version;

	grunt.config.set('uglify', {
		dist: {
			src: ['.tmp/public/concat/production.js'],
			dest: '.tmp/public/min/production-' + version + '.min.js'
		}
	});

	grunt.loadNpmTasks('grunt-contrib-uglify');
};
```

``` js:/tasks/config/cssmin.js
// cssのminifyをするGruntタスク
module.exports = function(grunt) {

  var version = require('../../package.json').version;

	grunt.config.set('cssmin', {
		dist: {
			src: ['.tmp/public/concat/production.css'],
			dest: '.tmp/public/min/production-' + version + '.min.css'
		}
	});

	grunt.loadNpmTasks('grunt-contrib-cssmin');
};
```

``` js:/tasks/config/sails-linker.js
// HTML(Layout.ejs)にcss/jsのリンクを書き込むGruntタスク
module.exports = function(grunt) {
  
  var version = require('../../package.json').version;
  var minJsFile = '.tmp/public/min/production.min.js?version=' + version;
  var minCssFile = '.tmp/public/min/production.min.css?version=' + version;


  // 以下長いので省略。次の2つの文字列を全置換で置き換える
  // '.tmp/public/min/production.min.js' => minJsFile
  // '.tmp/public/min/production.min.css' => minCssFile
};
```

これだけ。

# ポイント
## Query Stringじゃないの？
`sails-linker.js`でejsに書き込んでいる部分がファイル名指定になっているので、Query Stringだと上手く読み込まれなかった(たぶん)。どうせ自動でファイルが生成されるんだからファイル名自体が変動してもまあ良いかと思う。

## require('../../package.json')
これでプロジェクトのPackage.jsonに書かれたバージョン番号を読み出し、js/cssファイル名に付加している。例にある通り日付でもいいんだけど、意味合い的には日付が変わった時ではなくアプリケーションに更新があった時にキャッシュクリアしたい訳だからこっちの方が好き。ただしPackage.jsonのバージョンはちゃんと更新すること。
6章 ドメイン設計戦略


# ドメイン設計戦略
ドメインとは属性の有限集合の事。　
例えば、intだったら1~2**30 - 1まで。

# IDとは？
物体や概念をあらわすもの。
IDは全単射である。1対1
個体だけでなく、個体の集合の概念をidとしてとることもある。

# id = ナチュラルキーとサロゲートキー　

## ナチュラルキー(自然キー)
普通のキー

## サロゲートキー(代理キー)
自然キーが存在しない時に、IDとして使うもの。
railsはここらへんの哲学に反する側面があるらしい。
emailとか一意のものを自然キーにすればいいのに、必ずIDがあるとか？
→変更可能はだめ。
ios app実機テスト環境構築

# ステップ1: iOS Developer Programに登録
# ステップ2: 証明書の発行
http://r-dimension.xsrv.jp/classes_j/ios_test/

# ステップ3: Xcode設定
まず，preference>Accountsで自分のIDが正常に登録されているか見る．

# ステップ4: プロファイル登録
作成したプロファイルを任意のプロジェクトの
1) Build Settings>All>Code Signing>Provisioning Profileで選ぶ．
2) Info>Bundle identifierでプロジェクト名を設定する．
Amazon APIによる食品データの取得 (Python)

# 概要
Amazonのapiを用いて，食品データを取得する (python)．

# ステップ1: Amazon APIを使えるようにする
Amazon APIを使えるようにして、ある程度使い方を覚える。
参考URL
http://www.ajaxtower.jp/ecs/

# ステップ2: タイムスタンプ
クエリにタイムスタンプを加える．
フォーマットは以下，
```
import time
Time = time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime())
url_qs.append(("Timestamp", [Time]))
url_qs = sorted(url_qs)
```

# ステップ3: Signature生成
まず，amazonからもらった秘密キーを使って，sha-256規格でハッシュを生成する．
```
import hmac, hashlib
hmac_digest = hmac.new(array['secret_key'], req, hashlib.sha256).digest()
```
生成されたハッシュをbase64にエンコードし，クオートすればsinatureの完成
```
import base64
base64_encoded = base64.b64encode(hmac_digest) # base64
signature = urllib2.quote(base64_encoded)
```

# ステップ4: xmlをパースして抽出
```
from pyquery import PyQuery as pq
from lxml import etree

a = pq(etree.fromstring(test), parser='xml')
        f = a('ns|Feature', namespaces={"ns":"http://webservices.amazon.com/AWSECommerceService/2011-08-01"}).text())
```
原材料は，Featureに格納されている
定期支払と遅延連鎖支払いの連携実装

PayPalの定期支払と遅延連鎖支払いの連携実装についてのまとめです。

実現したい支払い例
・有料会員に対して毎月1,000円の会費の徴収を行う（受け取り者Xとする）
・徴収した月会費を2者(A:700円/B:300円)で分配する

3つの方法があります。
①AdaptivePaymentsのPreapproval Paymentと遅延連鎖支払の組み合わせ
Preapproval Paymentsを利用するには、Chained PaymentsのようにAPP IDに権限追加の審査が発生します。

Preapproval Paymentsのについては下記参照。
https://developer.paypal.com/webapps/developer/docs/classic/adaptive-payments/ht_ap-basicPreapproval-curl-etc/

遅延連鎖支払については下記参照。
https://developer.paypal.com/docs/classic/adaptive-payments/ht_ap-delayedChainedPayment-curl-etc/

Xは支払者からpreapprovalKeyを取得し、KeyをつかってPay APIを実行して毎月1000円の定期支払を実現します。
この時、actionTypeをPAY_PRIMARYに指定することで、ExecutePayment APIを使ってA、Bに遅延連鎖支払を行います。
この一連の支払いで各者に発生する手数料です。

・X：1000円を受け取る手数料は、取り分が0なので発生しません。= 0円
・A：700円を受け取る手数料（3.6%+40円） = 65円
・B：300円を受け取る手数料（3.6%+40円） = 50円
※X＝Aの場合、Xは700円の受け取り手数料を1000円受け取り時に徴収されます。= 65円

②ExpressCheckoutのRecurringPaymentsとPayout APIの組み合わせ
Xは、ExpressCheckoutのRecurringPaymentsで毎月の1,000円を徴収します。

次に、Payout APIでAに700円、Bに300円を送金します。
この一連の支払いで各者に発生する手数料です。

・X：1,000円を受け取るときの手数料（3.6%+40円）＋700円/300円の送金手数料（上限120円までの2%) = 96円
・A：送金受け取りだけなので手数料なし = 0円
・B：送金受け取りだけなので手数料なし = 0円
※X＝Aの場合、送金手数料は300円分のみになります。= 82円
※Payoutの手数料について(現時点ではMassPayと同様の料率になります）

https://www.paypal.com/jp/webapps/mpp/ua/useragreement-full
※Payoutの詳細は下記ページを参照。

https://developer.paypal.com/docs/api/#payouts
※Payout APIで送金する資金は残高の範囲に限られます。

③ExpressCheckoutのRecurringPaymentsとPay API(Implicit)の組み合わせ
XはExpressCheckoutのRecurringPaymentsで毎月1,000円を徴収し、
そしてPay API(Implicit)でAに700円、Bに300円を決済として支払います。

Implicit Paymentsの詳細は、下記のページのImplicit Paymentsのところを参照。
https://developer.paypal.com/webapps/developer/docs/classic/api/adaptive-payments/Pay_API_Operation/

この一連の支払いで各者に発生する手数料です。

・X：1,000円を受け取るときの手数料（3.6%+40円） = 76円
・A：700円を受け取る手数料（3.6%+40円） = 65円
・B：300円を受け取る手数料（3.6%+40円） = 50円
※X＝Aの場合、Xは1000円を受け取る手数料だけです。= 76円

④手数料の考察

1000円を受け取る側Xから見た時の手数料は高い順に
②＞③＞①
となります。（X=Aの場合も同様）

分割払いを受ける側Bから見た時は、
①=③＞②
となります。

ただし、①はfeepayerパラメータをつかって、Xに手数料を集めることもできるので、
その場合Xにとっては、
①＞②＞③
となり、

Bにとっては、
③＞①＝②
となります。
Postfixのキューが詰まった時の対処

Postfixのメールのキューが滞留して対処する必要があったのでメモ。

# イベント
メールマガジンの配信を行っていたが、送信先の都合で滞留してしまった。

# 対処の流れ
* キューの状態を調べる
* 再配送を試みる→だめ
* キューをホルド(削除はしない。バウンスさせるのもあり)
* 報告書を書くためにキューの送信元送信先を調べる。

## キューの実体ファイルのパス

<pre>
# ls /var/spool/postfix/
active  bounce  corrupt  defer  deferred  flush  hold  incoming  maildrop  pid  private  public  saved  trace
</pre>

##　キューの内容を確認する方法
正直パースしにくいので、使い道が限られる。より良い方法は後述

<pre>
$ postqueue -p  

--------------------
22E7C42D14    4075 Wed Jul  1 10:06:45  info@hoge.com
(delivery temporarily suspended: lost connection with hogehoge while sending end of data -- message may be sent more than once)
                                         fugafuga@example.com
--------------------
</pre>

## キューの再配送を試す。

キューの再配送は自動で行われるが、だんだんと間隔が長くなるので、強制的に再配送を試したくなるので以下のようにする。

* キューを指定して送信する場合
<pre>
$ postqueue -i ${queueId}
</pre>
* 全部再配送
<pre>
$ postqueue -f
</pre>

## キューをホルドする方法
deferredのみを固める場合は以下のようにする。

<pre>
$ sudo postsuper -h ALL deferred
</pre>

## キューに入っているメールの内容を確認する方法

一応どんな内容のメールなのかをみておいたほうが良いだろう。

<pre>
$ postcat -q ${queueId}
ex) $ postcat -q 22E7C42D14
</pre>

## キューの内容を確認する方法(２)

postqueue -pがパースしにくいので、postcatを使ったワンライナーを作成

<pre>
$ for qid in $(ls /var/spool/postfix/hold/); do postcat -q $qid | grep '^sender: \|^recipient: ' | xargs echo -n; echo;  done > /home/sci01436/holdedlist.txt

--------------------
sender: info@hoge.com recipient: fugafuga@example.com
--------------------
</pre>

送信元と送信先を並べて出力できる。手軽。postqueue -pは不要だと思う。キューIDだけ返すコマンドにしたほうが良かったのでは？

## 監視

おまけ

以下の様なシェルをZabbix等から呼び出せば滞留したメールを検知できる。

<pre>
#!/bin/bash
# postqueueからもっとも古いキューの到着日時を返す
# フォーマットエラー、ファイル不在などあれば-1を返す

function error(){
    /bin/echo -1
    exit 1
}

function queue_arrival_time(){
  qid=$1
  date -d "`/usr/sbin/postcat -q $qid | /bin/grep 'message_arrival_time:' | /bin/sed 's|^message_arrival_time: \(.*\)$|\1|g'`" '+%s'
}

now=$(/bin/date '+%s')
oldest_arrival_time=$now

qpaths=$(/bin/find /var/spool/postfix/deferred -type f) || error

for qpath in $qpaths
do
  qid=`/bin/basename $qpath`
  arrival_time=$(queue_arrival_time $qid) || error
  if [ $arrival_time -lt $oldest_arrival_time ]; then
    oldest_arrival_time=$arrival_time
  fi
done
echo `/usr/bin/expr $now - $oldest_arrival_time`
</pre>
【備忘録】Objective-CでCMPedometerで日別に歩数を取得してみた

初めての投稿です。
swiftはかじってはいますが、いまいち分かっていないので
今回は、Objective-cで最近話題のCMPedometerをいじってみたいと思います。

まずは、前日の日付を取得

```
NSDate* backDate = [NSDate dateWithTimeIntervalSinceNow:-i*24*60*60];
```

次に取得する日別で日付を取得

```
NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];    // 日付だけ取得できるフォーマットで情報を抽出。
NSString* backDateString = [dateFormatter stringFromDate:backDate];
[dateFormatter setDateFormat:@"yyyy-MM-dd hh:mm:ss"];   // 時間を含めたフォーマットで日付を設定する。
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]];
NSDate* startDate = [dateFormatter dateFromString:[NSString stringWithFormat:@"%@ 00:00:00", backDateString]]; // 前日の0:00:00のNSDateが完成。
NSLog(@"%d日前のstart日付：%@",i,startDate);
NSDate* endDate = [dateFormatter dateFromString:[NSString stringWithFormat:@"%@ 23:59:59", backDateString]]; // 前日の23:59:59のNSDateが完成。
NSLog(@"%d日前のend日付：%@",i,endDate);
```

そして、取得

```
CMPedometer *pedometer = [[CMPedometer alloc]init];
[pedometer queryPedometerDataFromDate:startDate toDate:endDate withHandler:^(CMPedometerData *pedometerData, NSError *error){
        // step数の取得
        NSNumber *step = pedometerData.numberOfSteps;
        NSLog(@"%d日前:step = %@", i,step);
        [mstr appendFormat:@"%d日前:step = %@\n", i,step];
        if (error) {
                NSLog(@"%d日前:error = %@", i,error);
         }
}];
```

しかし、、、
取得した値は全部null
こんなエラーが出た
`Error Domain=CMErrorDomain Code=103 "The operation couldn’t be completed. (CMErrorDomain error 103.)"`
調べたところデータがないと出るらしい。。本当か？
https://hirooka.pro/?p=4739
とりあえず、歩数カウントをしたままで
日付更新を待って再度いじってみよう
PHPUnit_Extensions_Selenium2TestCase での各種HTML操作

## リンクをクリック

サンプルHTML

```html
<a href="">link_text</a>
```

テストケース

```php
$this->byXPath("//a[text() = 'link_text']")->click();
```

## ボタンクリック

サンプルHTML

```html
<input type="button" value="button_text" id="button_id" >
```

テストケース

```php
$this->byXPath("//input[@value = 'button_text']")->click();
```
```php
$this->byCssSelector("#button_id")->click();
```

## テキストボックスに入力

サンプルHTML

```html
<input type="text" name="text_name" >
```

テストケース

```php
$this->byName('text_name')->value($user);
```

## セレクトボックスから選択

サンプルHTML

```html
<select name="select_name">
<option value="option_value1" >option_text1
<option value="option_value2" >option_text2
</select>
```

テストケース

```php
$this->select($this->byName("select_name"))->selectOptionByValue("option_value2");
```

## ラジオボタンから選択

サンプルHTML

```html
<input type="radio" name="radio_name1" value="radio_value1" >radio_text1
<input type="radio" name="radio_name2" value="radio_value2" >radio_text2
```

テストケース

```php
$this->byXPath("//input[@value = 'radio_value1']")->click();
```

## フォームのsubmit

サンプルHTML

```html
<form action="#" method="post">
<input type="submit" value="submit_value">
</form>
```

テストケース

```php
$this->byCssSelector("form")->submit();
```

## TODO
徐々に追加予定
ラップが薄すぎて辛い
Brackets × "スニペット管理" で爆速コーディングを実現する

こちらの記事ではBracketsのエクステンションを用いてスニペット管理を行い、コーディングを効率化する方法をご紹介いたします。

* 基本的な使い方はこちら→[Bracketsの機能紹介、使い方解説](http://qiita.com/assialiholic/items/c8137321c7599a168b16)
* その他の便利エクステンション集はこちら→ [Brackets おすすめエクステンション集・解説](http://qiita.com/assialiholic/items/c7962f804cdb21a49327)

# 使用するエクステンション
[Brackets Snippets (by edc)](https://github.com/chuyik/brackets-snippets)
デフォルトでスニペットが豊富に用意されており、スニペット展開後のカーソル位置等も細かく調整できます。
また既存のスニペットの編集や新規追加も容易に行うことができ、設定ファイルをインポート/エクスポートすることにより他環境にも設定を引き継ぐことが出来ます。

# デモ

![demo.gif](https://qiita-image-store.s3.amazonaws.com/0/48404/faec906d-84d1-49fb-e7c4-9ca044edb4b9.gif)


# 基本的な使い方

## 起動
インストールが完了するとツールバーに電球のアイコンが追加され、こちらをクリックすると下部にスニペット管理画面が表示されます。

![01.png](https://qiita-image-store.s3.amazonaws.com/0/48404/2c629c5b-4cbc-8ec7-abcd-78233e0bf637.png)


## スニペットを展開する
管理画面の左部に一覧表示されているものが、使用可能なスニペットです。色背景に白文字で記述されているものがショートカットで、ファイル中でこちらを入力しTabを押すことでスニペットが展開されます。

![02.png](https://qiita-image-store.s3.amazonaws.com/0/48404/22c05d9c-4111-c075-5935-ce7d3e68f6b6.png)

スニペット展開後にTabを押すと、今度は次の編集ポイントへ移動することが出来ます。
上記のデモでもこの機能を使用しており、実際に試してみれば何となく挙動はわかるかと思いますが、管理画面のスニペットを選択することで詳しく確認、または挙動の編集をすることが出来ます。（記号の読み方は[後述](#%E3%82%AB%E3%83%BC%E3%82%BD%E3%83%AB%E4%BD%8D%E7%BD%AE%E3%82%92%E5%88%B6%E5%BE%A1%E3%81%99%E3%82%8B)します）

※ショートカットは大文字で一覧表示されていますが、入力する際は小文字で入力してください。
※スニペットそれぞれにスコープが設定されており、一致する拡張子のファイル内でないとスニペットの展開は出来ません。（この機能によりスニペットの住み分けが実現されています）



## ライブラリから既存のスニペットを追加する
初期状態ではJavaScriptのスニペットしか登録されていませんが、Libraryより予め作成されているスニペットを一覧に追加することが出来ます。
HTML・CSS・JavaScript・PHPが用意されています。
![03.png](https://qiita-image-store.s3.amazonaws.com/0/48404/29584c71-ee44-16d2-d70c-1a688ca49829.png)

![04.png](https://qiita-image-store.s3.amazonaws.com/0/48404/965540fd-2dc0-6657-7a84-076953561845.png)



# オリジナルのスニペットを作成する
予め用意されているものだけでなく、自分でスニペットを作成し追加することも出来ます。

## 登録方法
スニペットを登録するには、左上の「New+」ボタンを押下し、

* Trigger（ショートカットを呼び出すトリガー）
* Description（概要－省略可）
* Scope（スニペットを呼び出したい言語－Anyを選択するとどの拡張子でも呼び出せます）

を入力、下部の「Text」欄にスニペットを記述していきます。
入力が終わったら「Save」または「Save and Create」を押下し、スニペットの登録を完了します。

![05.png](https://qiita-image-store.s3.amazonaws.com/0/48404/f9ebc69d-bef7-6cc8-9676-915d8e8f41ef.png)


## カーソル位置を制御する
スニペット作成時に決められた記法で記述することで、展開後のカーソルの位置・移動を制御することが出来ます。
記法も特に難しくはなく、展開後にカーソルを置きたい場所に`${1}`と入力するだけです。
その後に`${2}`、`${3}`……と数字を増やしていくことによりTabを押下した際、順にカーソルを任意の位置に移動させることが出来ます。

![07.png](https://qiita-image-store.s3.amazonaws.com/0/48404/e1ba3e06-c301-99fe-f092-5c6db738792f.png)

また画像のように`${1:任意の文字列}`とすることにより、展開時にその文字列を選択状態にすることが出来ます。
（カーソル制御の使用感は変わりませんが、「ここ何を入れるんだっけ……」を解消するガイダンスとして使うということでしょうか）

## 複数箇所を同時編集出来るようにする
デモのconsole.logのように、複数箇所を同時に編集出来るよう設定することも可能です。
こちらも上記の「カーソル位置を制御する」の記法が分かれば簡単で、同時に編集したい箇所に同じ番号を記述するだけです。

![08.png](https://qiita-image-store.s3.amazonaws.com/0/48404/eeb88b3f-26c0-b45a-0603-1eff30c64159.png)

<br>
<br>

以上、簡単ですがスニペット管理のエクステンションを用いてコーディングを効率化する方法のご紹介でした。
とても気軽に扱えるものながら、使い込めば込むほどコーディングの強力なお供になってくれると思います。
ぜひ、オリジナルにカスタマイズして快適なBracketsライフをお送りください！
はじめたとはいうものの・・・・

#みなさん、大ピンチです。。。。
全然進みません。。。

ここで状況をお伝えします。

今はドットインストールのAWS講座の第五回　仮想サーバーに接続してみよう！！
をやっています。

そこで　コマンドを入力するところで　```mv./Downloads/Taguchi.pem.''
と打つところがあります。　
私はTaguchi のところを　Takahiro という自分のDownloads フォルダの中にある
ファイル名を打ち込んだのですが、帰ってくるのはいつも


**No such a file or directory**  

???????　えーーーーーー

（すいません、ド素人なもので）

ということでkakipo さんからのアドバイスより　stack over flowへ！！！！

英語は得意な私（TOEIC 960) は英語のほうでいろいろ探しで見たら
すぐに発見！！！
[title]http://stackoverflow.com/questions/1454629/aws-ssh-access-permission-denied-publickey-issue 
　はははは　そうか。私はubuntu を利用していたからか・・・・
（Windowsをふだんつかっているので　VMware player と　ubuntu で linuxを毎回立ち上げてから
ターミナルにコマンド打ってます！！）

すぐさまコピペ！！　し・か・し

出てきたのは・・・**debug1: No more authentication methods to try.
Permission denied (publickey,gssapi-keyex,gssapi-with-mic)**.

えーーーーーーーーー
じゃあ　どうすればよいですか？？？？？？？？？？？？？

と、途方に暮れている。

皆様のお力が必要です。どうかおらにちからをわけてくれ。。。。。（笑）

未熟者を助けてやってください
Oracle から DoctrineORM の Schema-Tools を使うと Primary Key が無いって言われる時 

### 原因

PrimaryKey の CONSTRAINT_NAME と INDEX_NAME が異なる場合は、 プライマリーキーを見つけられないらしい。

以下で検索可能

```sql
SELECT * FROM USER_CONSTRAINTS WHERE TABLE_NAME = '<TABLE_NAME>' AND CONSTRAINT_NAME <> INDEX_NAME;
```

### 解決方法

一旦削除して作成し直せばOK

```sql
ALTER TABLE <TABLE_NAME> DROP PRIMARY KEY;
DROP INDEX <INDEX_NAME>; -- Primary Key の INDEX NAME
ALTER TABLE <TABLE_NAME> ADD PRIMARY KEY (<COLUMN>);
```
SwiftでAsset CatalogをType Safeに使う補助ツールを作りました

## 前置き
WWDC'15の [Swift in Practice](https://developer.apple.com/videos/wwdc/2015/?id=411)  にて、Type SafeにAsset Catalogの画像を使う方法が紹介されており、これは是非実践したいな〜と。
具体的には、SwiftでUIImageを使う際にモヤっとする下記の内容を解決する方法です。

- Asset CatalogのID文字列をアプリ固有のEnum型にマッピング
- non-failableなイニシャライザ（UIImage(imageNamed:)はfailableですよね）

```swift:UIImageExtension
extension UIImage {
    enum AssetIdentifier: String {
        case Isabella = "Isabella"
        case William  = "William"
        case Olivia   = "Olivia"
    ￼}

    convenience init!(assetIdentifier: AssetIdentifier) {
        self.init(named: assetIdentifier.rawValue)
 }
}
```

```swift:利用例
let olivia = UIImage(assetIdentifier: .Olivia)
```

上記のようにAsset CatalogのIDをEnum型にマッピングするのは素晴らしいです。
しかし、Asset Catalogに画像が追加される度に手作業でEnumの値を更新するのは、人為的ミスが発生しやすく苦行になりかねません。

## 作ったツール
そこでAsset Catalogから上記のようなEnum, イニシャライザが実装されたUIImageのextensionを生成するツールを作りました。

> **Misen**
> https://github.com/tasanobu/Misen

### 使い方
- 1. ファイルのパーミッションを変更

```chmod +x misen.swift```

- 2. ```misen.swift```を実行
 - ```path``` :  Asset Catalogのパス 
 - ```exportPath``` :  出力するUIImage extensionファイルのパス（ファイル名込み）

```
./misen.swift -path PATH -exportPath OUTPUT_FILE_PATH

```

### 利用例
下記のAsset CatalogからUIImage extensionファイルを作る例です。

![asset-catalog.png](https://qiita-image-store.s3.amazonaws.com/0/31069/cbffba77-0e8d-9e26-7dcf-a50287af7437.png)

- 次のコマンドを実行します。

```
./misen.swift -path ./Misen.xcassets -exportPath ./UIImageExtension.swift
```

- コマンド実行後、指定したパスに下記のようなファイルが生成されます。

```swift:UIImageExtension.swift
extension UIImage {

    convenience init!(assetName: AssetName) {
        self.init(named: assetName.rawValue)
    }

    enum AssetName: String {
        case Camera = "Camera"
        case Home = "Home"
        case Mail = "Mail"
    }
}
```

- コード上での使い方は非常に簡単です。

```
let camera = UIImage(assetName: .Camera)
let home   = UIImage(assetName: .Home)
let mail   = UIImage(assetName: .Mail)
```

## まとめ
もしよろしければ是非お使い下さい。
ご意見、ご要望などあれば、可能な限り対応しようと考えておりますので、Issueなりプルリクエストなり頂けると幸いです。

> **Misen**
> https://github.com/tasanobu/Misen
a-blog 投稿記事のライトボックス

a-blogで記事を投稿する際に、画像ユニットでライトボックスが出たり出なかったりという事態があった。
原因は、画像ユニットでアップする画像が、

- 画像サイズがそのままになっている
- 画像ユニットで設定している画像サイズより小さい画像をアップする

以上の条件が当てはまると、ライトボックスが出ない（画像ユニットにリンクが貼られない）ようです。

そんな仕様なんか気にせずに、投稿者がライトボックスを用いるかコントロールできるようにしてみた。

**割りと突貫工事なので、信頼性は欠けると思います。**

privateフォルダにあるconfig.system.yamlを追記する。

```yaml:config.system.yaml
# column_image_attr :
# column_image_attr_label :
column_image_attr : [' lb', ' lbNo']
column_image_attr_label : [ライトボックス, ライトボックスいらない]
```

これで画像ユニットで属性という項目が追加され、そこでライトボックスの制御ができるようになる。
column_image_attrの値で、空白を入れているのは、クラスを追加することを想定しているため。

```html:include/main/unit.html
<!-- 画像 -->
<img class="columnImage{attr}" src="%{ROOT_DIR}{path}" alt="{alt}" width="{x}" height="{y}" />
```

{attr}を追加することで、属性の値を取得できる。


```js
$('.lb').each(function(){
	//画像ユニットで拡大リンク貼るを選択している場合、リンクタグを追加
	var parent = $(this).parent('a').length;
	var linkUrl = $(this).attr('src');
	var imgHtml = $(this).get(0).outerHTML;
	var imgHtmlSet = '<a href="'+linkUrl+'" class="over "rel="prettyPhoto[]">'+imgHtml+'</a>';
	if(!parent){ //a-blogですでに拡大画像やリンクURLが存在している場合以外、以下の処理を行う
		$(this).replaceWith(imgHtmlSet);
	}
});	

$('.lbNo').each(function(){
	//画像ユニットで拡大リンク貼らないを選択している場合、リンクタグを削除
	var parent = $(this).parent('a').length;
	if(!parent){ //a-blogですでに拡大画像やリンクURLが存在している場合以外、以下の処理を行う
		$(this).parent('a').unwrap();
	}
});	
```
jsで画像にlbImgがあればリンクをはり、lbNoImgならリンクを外す処理をjavascriptで無理やり制御。

これで多分OKのはず。

参考：http://www.arataman.com/category-4/entry-738.html
あるコミットで変更したファイルだけの一覧を出力する

```bash
git diff-tree --no-commit-id --name-only -r HEAD
```

または

```bash
git show --pretty="format:" --name-only HEAD
```

### 背景

あるコミット（今回の場合 `HEAD`）の中で命名した変数名を変更したいと思ったが、その変数がいたるところでヒットしたため、単純な置換だとうまくいかなかった。

そこで、変更したファイルだけを取り出して、その範囲内で置換処理を実行した。

```bash:HEADで変更したファイルに含まれるfooをbarに置換する
git diff-tree --no-commit-id --name-only -r HEAD \
  | xargs git grep -l foo \
  | xargs sed -i '' -e 's/foo/bar/g'
```

### 参考

- [Gitリポジトリ内の特定の語を全て置換する - Qiita
](http://qiita.com/yuku_t/items/2e088d5cab803cb6b1ee)
- [git show - List all the files for a commit in Git - Stack Overflow](http://stackoverflow.com/questions/424071/list-all-the-files-for-a-commit-in-git)
hover 時にスプライト画像を CSS だけでフェードイン／アウトさせる方法

## 課題
- ~~ロード時にもアニメーションしてしまう。~~ とりあえず解決。代わりに以下の問題が発生。
- ロード時にアニメーションして見えるのを防ぐために、ロード時の初回アニメーション中は要素が非表示になる。


## 更新履歴
- クロスフェードに対応。ついでに記述を整理。（2016/8/1）


## CSS の場合

```css
div {
  position: relative;
  animation: delayView 0.2s linear;
}
div,
div::before,
div::after {
  width: 100px;
  height: 100px;
  background: url("../images/img.png") no-repeat;
}
div,
div:hover::before {
  background-position: 0px 0px;
}
div::before,
div::after {
  content: '';
  display: block;
  opacity: 0;
  position: absolute;
  top: 0;
  left: 0;
}
div::after {
  background-position: 0px -100px;
  animation: fadeOut 0.2s linear;
}
div:hover {
  background: none;
}
div:hover::before {
  opacity: 0;
  animation: fadeOut 0.2s linear;
}
div:hover::after {
  opacity: 1;
  animation: fadeIn 0.2s linear;
}

@keyframes delayView {
  0% {
    opacity: 0;
  }
  99% {
    opacity: 0;
  }
  100% {
    opacity: 1;
  }
}

@keyframes fadeIn {
  0% {
    opacity: 0;
  }
  100% {
    opacity: 1;
  }
}

@keyframes fadeOut {
  0% {
    opacity: 1;
  }
  100% {
    opacity: 0;
  }
}
```

## stylus + sprite の場合

```stylus
sprite-animate-hover(image, duration = .2, suffix = { before: '-off', after: '-on' })
  position relative
  animation delayView (duration)s linear
  &::before, &::after
    content ''
    display block
    opacity 0
    absolute top 0 left 0
  &, &::before
    sprite(image + suffix.before + '.png')
  &::after
    sprite(image + suffix.after + '.png')
    animation fadeOut (duration)s linear
  &:hover
    background none
    &::before
      opacity 0
      animation fadeOut (duration)s linear
    &::after
      opacity 1
      animation fadeIn (duration)s linear

@keyframes delayView
  0%
    opacity 0
  99%
    opacity 0
  100%
    opacity 1

@keyframes fadeIn
  0%
    opacity 0
  100%
    opacity 1

@keyframes fadeOut
  0%
    opacity 1
  100%
    opacity 0
```

sprite mixins はファイル名で呼び出すやつ。
僕は [gulp-stylus-sprites](https://www.npmjs.com/package/gulp-stylus-sprites) 使ってる。
MacでGLUT+OGL＃4

 
記述の動機
GLUT+OGLがMacではサクッと環境構築できることを知りました。
使わない手はないので、少しづつまとめていきます。
今回は3D描画です。参考にしているサイトをわすれてしまいました。


``` 3d.cpp
#include <GLUT/glut.h>

//----------- プロトタイプ宣言 --------------//
void display();
void reshape(int w, int h);
void timer(int value);
void LIGHT_INIT();

//------------- OpenGLの初期設定 ------------------//
void GLUT_INIT()
{
        glutInitDisplayMode(GLUT_RGBA| GLUT_DOUBLE | GLUT_DEPTH); //ダブルバッファ、Zバッファ
        glutInitWindowSize(640,480);
        glutCreateWindow("glut Primitive");
}

void GLUT_CALL_FUNC()
{
        glutDisplayFunc(display);
        glutReshapeFunc(reshape);
        glutTimerFunc(0,timer,17);
}

void MY_INIT()
{
        //glClearColor(1.0, 1.0, 1.0, 1.0);
        glClearColor(0.0, 0.0, 0.0, 1.0);
        LIGHT_INIT();
        glEnable(GL_NORMALIZE);//法線の有効化
        glEnable(GL_DEPTH_TEST);//ZバッファON
}

//光源の設定
void LIGHT_INIT()
{
        float Light0Pos[]={1,1,1,0}; //光源の位置
        glLightfv(GL_LIGHT0, GL_POSITION, Light0Pos);//位置だけ設定(あとはデフォルト)

        glEnable(GL_LIGHTING);//光源の有効化
        glEnable(GL_LIGHT0);
}


//------------- メイン関数 ----------------//
int main(int argc, char **argv)
{
        glutInit(&argc,argv);

        GLUT_INIT();
        GLUT_CALL_FUNC();
        MY_INIT();

        glutMainLoop();

        return 0;
}

//------------ ここからコールバック関数 ------------------//
void display()
{
        static int r = 0;
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

        glPushMatrix();   //行列退避
        glRotated(double(r), 0.0, 1.0, 0.0); //[2].回転
        //glutSolidCube(1.0);
        //glutWireCone(1.0, 2.0, 30, 30);
        //glutSolidSphere(1.0,50,50);
        //glutSolidTorus(0.3,0.5,30,30);
        glutWireTeapot(1.0);
        glPopMatrix(); //行列を戻す


        glutSwapBuffers();

        if(++r > 360){
                r= 0;
        }
}

void reshape(int w, int h)
{
        glViewport(0, 0, w, h);

        glMatrixMode(GL_PROJECTION); //行列モード切替
        glLoadIdentity();  //行列初期化
        gluPerspective(30.0, (double)w / (double)h, 1.0, 100.0);
    
        glMatrixMode(GL_MODELVIEW); //行列モード切替
        glLoadIdentity();
        gluLookAt(3.0, 4.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
}

void timer(int t)
{
        glutPostRedisplay();
        glutTimerFunc(t,timer,17); //タイマー関数
}
```

```コンパイルコマンド
g++ -o 3d.out 3d.cpp -framework GLUT -framework OpenGL
```
ティーポット。簡単ですね。
![スクリーンショット 2015-07-01 18.43.14.png](https://qiita-image-store.s3.amazonaws.com/0/33317/86cb8b31-7749-7245-fb8e-6b87cbaa9f26.png "スクリーンショット 2015-07-01 18.43.14.png")
Facebook/Twitterに対応したURLの共有Intentを作成する方法



先日、[弊社(heathrow, Inc)](http://heathrow.co.jp/)の自社サービス[FAVRICA - あらゆるファッション通販サイトをまとめて検索](https://favrica.net/)の[Android版](https://play.google.com/store/apps/details?id=net.favrica.android&hl=ja)を無事リリースすることが出来ました。

公開を記念して、開発で得たノウハウなどをまとめて公開しております.
[FAVRICA Android版公開記念、いろんなノウハウ公開 - Qiita](http://qiita.com/unosk/items/c89dba8291e7f8fc1f8c)

---


よくある、Webページをタイトル+URLで共有したい場合
Facebook/Twitterに対応するには少しだけ工夫が必要になります.


**通常のよくあるコード**

```
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_SUBJECT, subject);
intent.putExtra(Intent.EXTRA_TEXT, subject + " " + url);
startActivity(intent);
```

**でもこれだと**

- Facebookの場合、`EXTRA_TEXT`にURL以外が含まれるとだめ
- Twitterの場合、ハッシュタグつけたいかも
- もしかしたらLineの場合は、○○したい
- etc

**アプリごと個別に設定できるとうれしい**

## 解決策
いろいろ調べてみると`Chooser`ってのをつかってゴニョゴニョすればいいことがわかった.

でも、いろんな記事ためしてみるとうまくいかないやつが多い

- 並び順がかわる
- 表示タイトルが変わる

試行錯誤の上、上記問題点を解決した **決定版** ができたと思うのでこの際、共有しちゃいます.

```
String textDefault = subject + " " + url;
String textTwitter = subject + " " + url + " #favrica";
String chooserTitle = "共有";

Intent baseIntent = new Intent(Intent.ACTION_SEND);
baseIntent.setType("text/plain");
baseIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
baseIntent.putExtra(Intent.EXTRA_TEXT, textDefault);

PackageManager pm = context.getPackageManager();
List<ResolveInfo> resolveInfoList = pm.queryIntentActivities(baseIntent, PackageManager.MATCH_DEFAULT_ONLY);

if (resolveInfoList.isEmpty()) {
    context.startActivity(Intent.createChooser(baseIntent, chooserTitle));
} else {
    List<LabeledIntent> shareIntentList = new ArrayList<>();
    Collections.sort(resolveInfoList, new ResolveInfo.DisplayNameComparator(context.getPackageManager()));
    for (ResolveInfo resolveInfo : resolveInfoList) {
        Intent shareIntent = new Intent(baseIntent);

        String packageName = resolveInfo.activityInfo.packageName;
        switch (packageName) {
            // Facebook公式アプリの場合
            case "com.facebook.katana":
                shareIntent.putExtra(Intent.EXTRA_TEXT, url);
                break;
            // Twitter公式アプリの場合
            case "com.twitter.android":
                shareIntent.putExtra(Intent.EXTRA_TEXT, textTwitter);
                break;
            // その他Lineなど個別設定あれば追加
        }

        // これがないと一覧表示時のラベルが変になる
        shareIntent.setClassName(packageName, resolveInfo.activityInfo.name);
        shareIntentList.add(
                new LabeledIntent(shareIntent, packageName, resolveInfo.loadLabel(pm), resolveInfo.icon));
    }

    // ここでリストの最後のものをとってこないと、並び順が変になる
    Intent chooserIntent = Intent.createChooser(shareIntentList.remove(shareIntentList.size() - 1), chooserTitle);
    chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, shareIntentList.toArray(new LabeledIntent[shareIntentList.size()]));
    context.startActivity(chooserIntent);
}
```