OmniAICreator/Qiita-1.07M huggingface dataset:
pg_upgradeによるPostgreSQLバージョンアップ時の勘所

開発環境のMacOS Xのバージョンを上げたらPostgresが強制バージョンアップして起動しなくなった。

```
FATAL:  database files are incompatible with server
DETAIL:  The data directory was initialized by PostgreSQL version 9.4, which is not compatible with this version 9.5.5.
```
対処の基本はこれらの記事に従えばよい。

[homebrewで PostgreSQL 9.3へバージョンアップ方法](http://qiita.com/blueplanet/items/58e511daa02b5684ec1d)
[PostgreSQL9.4 から PostgreSQL9.5 に pg_upgrade する](http://qiita.com/gishi_yama/items/6d723fbe43308f3b20c3)


が、ところどころにハマりポイントがあって時間を蒸発させられるので備忘録を記載する。なお筆者の環境では旧バージョンが9.4、アプデ時に適用されたバージョンが9.5で、試行錯誤中にupgradeをかけて9.6が入ったので、Yosemite10.10.5下での9.4→9.6の移行作業について記載する。

### パスが通っているコマンドのバージョン
自分の場合は以下を参考に、`pg_upgrade`をするために9.4をインストールし直した。
[Homebrewで旧バージョンをインストールする方法(brew verionsはもう使えない)](http://qiita.com/honeniq/items/778cc08d2db78e6774d8)

このとき、パッケージのコンフリクトにより、unlinkを求められるので、素直に従った。

```
$ brew install postgresql94
==> Installing postgresql94 from homebrew/versions
Error: Cannot install homebrew/versions/postgresql94 because conflicting formulae are installed.

  postgresql: because Differing versions of the same formula.

Please `brew unlink postgresql` before continuing.

Unlinking removes a formula's symlinks from /usr/local. You can
link the formula again after the install finishes. You can --force this
install, but the build may fail or cause obscure side-effects in the
resulting software.
$ brew unlink postgresql
Unlinking /usr/local/Cellar/postgresql/9.6.1... 375 symlinks removed
```

そうすると、`/user/local/bin`にあるシンボリックリンクが9.4を指してしまうので、pg_upgradeのコマンドが上手く働かないといったことが発生した。
そのため多少脳筋だが、もう1回`brew unlink`して9.6をインストールし直し、シンボリックリンクを作り直した。コマンドのバージョン確認は`psql -V`が手っ取り早い。

### 環境変数と自動起動ファイルのパス
参考にしたリンクを見るとわかるが、新バージョンのデータディレクトリを別に作るということは環境変数の`PGDATA`と自動起動ファイル`~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist`指す向きを変更してやる必要がある。自分の場合は毎回それをやると絶対に管理できなくなる気がしたので、データ移行後にデータディレクトリを改名したが、その結果以下のパーミッション問題が発生した。

### postgresディレクトリのパーミッション
移行が完了して起動後、コマンドが通ったのに待てど暮せどデータベースにアクセスできない。確認したところpidファイルが作成されてないので起動までいけていない。そういうときにログを確認するとパーミッションのエラーが出ていることがある。

```
$ tail postgres/server.log 
FATAL:  data directory "/usr/local/var/postgres" has group or world access
DETAIL:  Permissions should be u=rwx (0700).
```

今回のように、移行先フォルダを動かすだのなんだのしているといつの間にかパーミッションが変わっている事があるので要求されている通りに`chmod 700 postgres`と言った具合に設定し直さないといけない。この場合のshouldは[RFC](https://www.ipa.go.jp/security/rfc/RFC2119JA.html)と同様に「する必要がある」という強いニュアンスだと解釈すべきなのだろう。
pepper　パッケージファイルとして出力する

#パッケージファイルとして出力する

まずはじめに必要なのはマニフェストファイル（manifest.xml）の定義です。
manifest.xmlは初めに自動でつくられるので内容を埋めていきます。
あとはアイコンを用意すれば準備はおっけーです。

#パッケージファイル作成
メニューバーから「ファイル」＞「パッケージをビルド...」を選択し、出力先とファイル名を指定して保存するとパッケージファイルが生成されます。

#さて、最後にpepper君の頭の中にぶちこむ！
Choregraphe からpepper君に接続して、右下のロボアプリ一覧のインストールアイコンのプルダウンを開き、「パッケージを選択してインストール」を選択して、生成したパッケージファイルを「オープン」すると完了！！のはずが！！！！

**インストール中にエラーが発生しました：パッケージのインストールに失敗しました。**

あはは、でもインストールできてるっぽいです。タブレットに表示されています。
Azure-cli で list コマンドが遅いときは location を指定してみる

# 概要

```
azure vm image list-publishers
```

このようなコマンドがおそかった。
結果が返ってきて欲しかったので、どうすればよいのか調べた

# 結論

次のような感じで、ロケーションを指定すると速く返ってくることがある。

```
azure vm image list-publishers -l japaneast
```

なども同様

```
azure vm image list-offers
```

##　参考、リージョンで利用できる、vm size の一覧を出す

```
azure vm sizes --location japaneast
```

出力結果がかなりよかった。
アタッチできるディスクの数もみれるのがよかった。
あと、アタッチできるディスクの１つあたりのサイズもでていてよい。

```
+ Listing virtual machine sizes available in the location "japaneast"          
data:    Name                    CPU Cores  Memory (MB)  Max data-disks  Max data-disk Size (MB)  Max OS-disk Size (MB)
data:    ----------------------  ---------  -----------  --------------  -----------------------  ---------------------
data:    Standard_A0             1          768          1               20480                    1047552              
data:    Standard_A1             1          1792         2               71680                    1047552              
data:    Standard_A2             2          3584         4               138240                   1047552              
```
Evernote や OneNote の代わりに DEVONthink

ノートアプリの定番として、Evernote がありました。最近だと、OneNote が使えます。Mac でも Windows でも Webでも、という形でマルチプラットフォームで使えて素晴らしいのですが、それぞれ弱点があります。

筆者は、今回のEvernoteの騒ぎの前から、他のアプリへの移行を進めていたのですが、今回、Evernoteを完全廃止し、OneNoteと併用する形で、DEVONthinkに移行しました。

Evernoteの代わりに、DEVONthinkを使うのは、特定の筋には強くオススメでききるので、ここでは、経緯と利点欠点について、ざっくりと、まとめておきたいと思います。

## 筆者のノートテークアプリの使い方

基本的に、ノートというよりは、Web Clipperのストレージとして使っている側面が強くて、80% がWebのクリッピング、15%が、メールなどでやってきたファイルとか、スキャンしたドキュメントをファイルする場所、あと 5% がメモという感じです。

デバイスとしては、Mac複数台、iPad と iPhone と AppleWatch を常時使っている感じで、AppleWatchはともかく、他のデバイスは適切に同期していないと困ります。

## Evernote の強みと弱み

Evernote の強みは、どこでも使えること、1年単位の支払いで、ほぼ無制限に使える事に尽きるとおもいます。
また、同期が、ほぼ安定していることも良い点です。

一方、弱点は、個人的な理由でありますが、運営組織に対する信頼感の低下と、技術力という点の以前からの不安です。

信頼感については、ここ暫くで起こった事と、かつて起こった、収益性の確保からの様々な動きなどから来る総合的なものです。すくなくとも、lock-in されている状態は危険だと思っていました。

技術的には、　最近は落ち着いたけれど、WebClipperの動作が不安定だったこと、ある時期に、技術的な問題で同期が失敗する時間が継続して起こっていたこと（これは、サポートとやりとりして、最終的には解決）等です。

## OneNote の強みと弱み

OneNote の強さは、同じく（今や）マルチプラットフォームになっこと、iPad のノートテークアプリとして、ペンも使えて便利なのは特筆に値します。

弱点は、4点。一つ目は、OneDriveに依存してるためか、同期が不安定かつ遅いこと。いつまで同期がかかるのか、さっぱり読めません。
二つ目は、Webのクリッピングで、クリップ後にテキスト選択できないのが痛いこと、iOS でクリップすると、スマホでのページサイズでクリップされてしまうこと、クリップフォーマットが他に無いことです。三つめの弱点は、一つ目と関係しますが、数百程度のエントリを作っただけで、ちっとも同期されなくなる点です。4つめの弱点は、ノートブック単位での管理で、ノートブックが多くなったり、ノートブック内のタブが多くなったりした場合に、非常に使い勝手が悪い点です。

## DEVONthink

一ヶ月ほど前に、DEVONthink の使い方についてのebookが出ていることに気づき、これを使うのもありかなということで、検討を始めました。昔から、何度かトライしようかと思いつつ、それなりの値段するので躊躇してました。試しに使ってみたところ、すくなくとも Web Clip するには最高で、Evernote も OneNote (Evernote経由)もファイルをインポートできるので、最終的にコレに乗り換えました。

使い出して、まだ一月弱なので、使いこなしているとはとても言えない状態ですが、利点と思ったところを列挙します

- Safari, Chrome, Firefox 用のextensionがあって、WebArchive 形式、URL、テキスト等、様々な方式でクリップできる
- Print ダイアログから、直接PDFを作ってインポートできる
- Bookmarklet を使い、DEVONthink に PDF 生成させてクリップすることもできる
- Import機能が充実している。インストールされて同期されているEvernoteから、丸ごとファイルをインポートできる
- OCR 機能があり、ScanSnapから直接突っ込める。ただし、OCRは日本語サポートなし（残念）
- データベースを複数作れる。データベース毎に同期設定が可能
- データベース内に、階層フォルダを作れる。それと別にタグを付けられる。
- 中にあるファイルには、メタ情報がついている。たとえば、ダウンロードしたファイルをDEVONthinkに突っ込むと、参照もとのURLがメタデータとして入る
- 同期はDropbox, Box, CloudMe, WebDAVサーバ、iCloud 等から選べる。私はDropbox経由。トランザクションの過程をDropbox上に作り、DEVONthink自身がDropboxと直接通信し、同期する。Dropbox で同期されたファイルを直接いじることはないので、同期ポイントを Dropboxクライアントでは同期しないように設定することで、編集するたびに、Dropboxが同期するメッセージでイライラすることがない
- フォルダをインデックス対象とすることができる（中身をコピーしないで済む）。 私の場合は、OmniOutlinerをメモにつかっているので、このファイルを入れているフォルダをインデックスしてます。便利
- AppleScript で、Scriptableで、色々なスクリプトが提供されている。たとえば、iOSデバイスではURLをクリップしておき、Macで同期後にバッチでPDF変換とかが可能かつスクリプトが予め用意されている
- Mail.app のエクステンションを入れると、Mail.appから、メールあるいはメールボックス単位で、インポートできる。インポートは、メールメッセージとして内部では扱われる（コレ故に、Mail.appを再び使うハメに）
- インポートが安定している。Evernote -> DEVONthink は、とても安定動作しますが、一つづつノートを出力してインポートしているらしく、結構処理がシンドイです。なので、2000ノートぐらいづつインポートするのが無難に思いました。ただ、放置しておけば終わります。
OneNoteからは、一旦Evernoteにしてもってくるしかありません。Windows版のEvernoteにはOneNoteからのインポート機能があるので、それを使います。このためだけに別にアカウントを一つ掘って、一ヶ月分600円だけ課金してファイル移行しました。前のEvernote->OneNoteの地獄と考えると大変安定していて素晴らしい

欠点と思ったところ

- ＭａcとiOSのみで、Windows、Web で使えない
- 同期は完全だが、iOSデバイスでの同期がちょっと時間かかるので鬱陶しい
- お値段
- ノートテークアプリとして考えると、少々貧弱かもしれない（機能は充分あるのだけど）
- 暗号化機能が弱い

使い方については、別途まとめようとおもいますが、上記見てメリットあると思ったら、試しに使ってみると良いでしょう。
Macユーザで、かつ、Macと心中する覚悟があるなら、試す価値はあります。
BluemixのLanguage Translatorで日本語の翻訳機能を試してみた

#前置き

Bluemixで利用できるWatson APIの中で、翻訳の機能を持つ「Language Translator」というAPIがあります。

日本語は言語判別機能のみの提供でしたが、**いつの間にか<font color="red">日本語 -> 英語</font>、及び<font color="red">英語 -> 日本語</font>の翻訳に対応していました。**

こちらの機能を確認していきたいと思います。

#提供開始

まず、日本語の提供に関してはDocument上に正式に記載はありません。
![lt1.png](https://qiita-image-store.s3.amazonaws.com/0/103277/61ecb6f6-a157-e26a-42ab-fd8dc83eb4b3.png)

しかしAPIでmodelを取得すると、

```
curl -u "{username}":"{password}" "https://gateway.watsonplatform.net/language-translation/api/v2/models"
```

```
…

{
      "model_id": "en-ja",
      "source": "en",
      "target": "ja",
      "base_model_id": "",
      "domain": "news",
      "customizable": true,
      "default_model": true,
      "owner": "",
      "status": "available",
      "name": "",
      "train_log": null
    },

…

 {
      "model_id": "ja-en",
      "source": "ja",
      "target": "en",
      "base_model_id": "",
      "domain": "news",
      "customizable": true,
      "default_model": true,
      "owner": "",
      "status": "available",
      "name": "",
      "train_log": null
    },

…
```

日本語翻訳ができるようになっています！！

#翻訳機能の確認

今回はBluemixのサービスである[Watson Machine Learning](https://console.ng.bluemix.net/catalog/services/ibm-watson-machine-learning/)の説明文である以下の文章を日本語に翻訳してみました。

>IBM Watson Machine Learning is a full-service Bluemix offering that makes it easy for developers and data scientists to work together to integrate predictive capabilities with their applications. Built on IBM's proven SPSS analytics platform, Machine Learning allows you to develop applications that make smarter decisions, solve tough problems, and improve user outcomes.

結果はこちらです。

>IBMワトソンの機械学習を簡単に開発者やデータ科学者はアプリケーションで予測機能を統合するために一緒に作業できるようになりBluemixサービス・オファリングです。  SPSSの分析プラットフォーム「機械学習」、よりスマートな意思決定を行うアプリケーションを開発するには、難しい問題を解決可能にする実績あるIBMの上に構築し、ユーザー結果を改善します。

なるほど…
ちなみにGoogle翻訳だとこうです。

>IBM Watson Machine Learningは、開発者とデータ・サイエンティストが協力して予測機能をアプリケーションと容易に統合できるフル・サービスのBluemix製品です。 IBMの実証済みのSPSS分析プラットフォーム上に構築されたMachine Learningを使用すると、賢明な意思決定、厳しい問題の解決、ユーザー成果の向上を実現するアプリケーションを開発できます。

これはすごい。よく翻訳できています。

Watsonの方はまだトレーニングをする必要がありそうです。

#Node-REDでの利用

また、Bluemixで利用可能な開発ツールである[Node-RED](https://nodered.org/)上でも日本語は利用できるようになっています。
![lt3.png](https://qiita-image-store.s3.amazonaws.com/0/103277/999b9863-afd6-a228-e272-4aec570adfba.png)



これにより、様々なアプリケーションにシームレスに統合できますね！


ということで、以前作成した[多言語チャット](http://qiita.com/ytada/items/ecb5f90d4d90305f2d0e)に日本語を組み込んでみました。
![lt2.png](https://qiita-image-store.s3.amazonaws.com/0/103277/a8845e7d-f413-0867-f11d-4b8dffa14092.png)

簡単な会話程度なら問題なく翻訳できているようです。

#モデルのトレーニング

Watsonに欠かせない要素であるトレーニング。
もちろんこのLanguage Translatorでも言語の翻訳モデルをトレーニングすることが可能です。

例えば各企業の専門用語などをトレーニングすれば、業界や業種に特化した翻訳モデルの作成をすることができます。

これはまた別の機会に試してみたいと思います。

#まとめ

Watsonの翻訳機能で念願の日本語翻訳機能が利用できるようになりました。まだまだトレーニングの必要がありそうですが、今後のアップデートに期待しています！
Cognos Report Authoring 逆引き辞典 - 目次一覧

###Cognos BI report Authoringを学習するための自習用教材となります。

Cognos BIの初級者～中級者向けの内容となります。

本当にCognos BIの初心者という方は、事前にこちらを実施して頂くと良いと思います。

**Cognos 10 BI の自己学習教材**
http://qiita.com/shinyama/items/24169ef2391b0e8dd21a


###以下、Cognos Report Authoring 逆引き辞典 の 目次一覧となります。

###**A.基本編**

**A1 レポートのレイアウトを整える**
http://qiita.com/shinyama/items/56c7a6a8ae9d8b17b4c1

**A2 表のサイズをピクセル単位で調整したい**
http://qiita.com/shinyama/items/6a957bef35cc9ff826ef

**A3 新しいグラフタイプでグラフを作成したい**
http://qiita.com/shinyama/items/e86d677f47a2e9bb720d

**A4 レポートに画像を表示させたい**
http://qiita.com/shinyama/items/21190a417b2c4f0ab177

**A5 条件に応じて書式を変更したい①**
http://qiita.com/shinyama/items/f38f1aef8629fdde85a5

**A6 条件に応じて書式を変更したい②**
http://qiita.com/shinyama/items/77c6dbdbe03a7e30c1ce

**A7 レポートを再実行せず動的にフィルタリングしたい**
http://qiita.com/shinyama/items/028aff53e891c494735e

**A8 別ページにフィルタリング条件を指定してレポートを作成したい**
http://qiita.com/shinyama/items/f2be4a6d4587b1f42243

**A9 当月のデータのみを表示する**
http://qiita.com/shinyama/items/05fe576afc249d011000

**A10 レポート実行時にプロンプトの値を固定したい**
http://qiita.com/shinyama/items/cea2f2e20633290a27f8

**A11 1つのレポートから別のレポートへドリルスルーする**
http://qiita.com/shinyama/items/deec58f315a2d24a1594

**A12 レポート内の別の領域へのリンク（ブックマーク）を利用したい**
http://qiita.com/shinyama/items/bc45538d7c45c71ff561

**A13 リストにリストの行ごとの値で変化するグラフを挿入する(マスター/詳細)**
http://qiita.com/shinyama/items/9198e1504447dff2470a



###**B.応用編**
**B1 画面を遷移せずにグラフやリスト表示の切替を行う**
http://qiita.com/shinyama/items/dfe83252edcb522625b7

**B2 チャートのX軸/Y軸の項目を動的に変更したい**
http://qiita.com/shinyama/items/674a939643536553e43d

**B3 動的に表示する画像を選択する**
http://qiita.com/shinyama/items/851687807978aec7ac16

**B4 レポートに動画を埋め込む**
http://qiita.com/shinyama/items/4a83926c5c0fea01ad88

**B5 Cognosと地図情報であるGoogleMapを連携する**
http://qiita.com/shinyama/items/2853965927dd8d3ab481

**B6 複数のグラフを重ねて表示する**
http://qiita.com/shinyama/items/cf7c10e190ebfa534cb9

**B7 コメントリストにレポート実行画面からコメントを追記する**
http://qiita.com/shinyama/items/ccc7826a0bea943644df


###**C.ポータル画面**
**C1 「ようこそ」ページのヘッダーに表示される文字列を変更する**
http://qiita.com/shinyama/items/a06dd0ad0cc1f65cf518

**C2 Cognos Connectionや、Cognos Viewer のヘッダーに表示される文字列を変更する**
http://qiita.com/shinyama/items/fe8aba85f7bd796fb4af

**C3 様々なコンポーネントを入れたページ（ダッシュボード）を作成する**
http://qiita.com/shinyama/items/5f26bd0d5f5153dc6b1e


###**D.レポート実行**
**D1 ユーザー属性毎にレポートを分割して保存する**
http://qiita.com/shinyama/items/c0d82855741514e53127

**D2 国別、商品ライン別など複数のキーでレポートを分割して保存する**
http://qiita.com/shinyama/items/e238a9109664eea81e9d

**D3 オフラインでも、プロンプト選択などができインタラクティブに変更できるレポートを作成する**
http://qiita.com/shinyama/items/fddfc9b34c9ce3d5fd25

**D4 作成したレポートをメールで送信する**
http://qiita.com/shinyama/items/7575078165cceba3ba15

**D5 レポートをローカルに保存したい**
http://qiita.com/shinyama/items/0c25576d0d351eeb4958
mo.jsのinstall アニメーション起動

いろいろなモーションを作れるJSライブラリ、[mo · js](http://mojs.io/)をinstallして使用してみました。

## Install
GitHubの[リポジトリ](https://github.com/legomushroom/mojs)や`npm bower cdn`などでinstallできます。

## ドキュメント
[readme.md](https://github.com/legomushroom/mojs/blob/master/api/readme.md)
[チュートリアル](http://mojs.io/tutorials/shape/)

## 描画する
[チュートリアル](http://mojs.io/tutorials/shape/)を参考に進めていきます。
基本的には`new mojs.xxx({ 設定 })`で描画できました。

```sample.js
const shape = new mojs.Shape({
  shape: 'circle',
  isShowStart: true
});
```
![スクリーンショット 2016-12-13 17.54.26.png](https://qiita-image-store.s3.amazonaws.com/0/145420/df8a577b-b8bf-ff64-9c28-0a1f092ba75f.png)

また設定部分の値を`{初期値 : 終了値}`で指定した後に`play()`などを行うとアニメーションが起動します。

```sample.js
const shape = new mojs.Shape({
  shape: 'circle',
  isShowStart: true,
  x: { 0 : 200 },
  duration: 1000,
  repeat: 999
}).play();
```

![sample.gif](https://qiita-image-store.s3.amazonaws.com/0/145420/bc2a934d-ab50-cdf9-08b1-cc90467c8860.gif)

他にもアニメーションに合わせて`onStart` `onUpdate`なども使用出来ます。

```sample.js
let count = 0;

const shape = new mojs.Shape({
  shape: 'circle',
  isShowStart:  true,
  x: { 0 : 200 },
  duration: 1000,
  repeat: 999,
  onRepeatComplete () {
  	count += 1;
    if (2 > count) return;
    shape
      .tune({
        fill: 'cyan'
      })
      .replay();
  },
}).play();
```

![sample.gif](https://qiita-image-store.s3.amazonaws.com/0/145420/b2836d9f-9b39-d552-e7e6-3e25a3a426e7.gif)

また他にもhtml要素などもアニメーションすることができます。

![sample2.gif](https://qiita-image-store.s3.amazonaws.com/0/145420/c23fb52d-24a7-9b5a-b764-049a72b4c786.gif)

```sample.html
<div id="block">Block</div>
<div id="block2">Block2</div>
<div id="block3">Block3</div>
```

```sample.js
const PROPERTIES = {
  y: { 0 : 100 },
  scale: { 0 : 25 },
  display: 'block'
};

const block = new mojs.Html({
  el: '#block',
  y: PROPERTIES.y,
  scale: PROPERTIES.scale,
  display: PROPERTIES.display,
  duration: 4000,
  onComplete () {
  	block.stop();
  	block2.play();
  }
}).play();

const block2 = new mojs.Html({
  el: '#block2',
  y: PROPERTIES.y,
  scale: PROPERTIES.scale,
  display: PROPERTIES.display,
  duration: 4000,
  onComplete () {
  	block2.stop();
  	block3.play();
  }
});

const block3 = new mojs.Html({
  el: '#block3',
  y: PROPERTIES.y,
  scale: PROPERTIES.scale,
  display: PROPERTIES.display,
  duration: 4000
});
```
数値の取得


デモ：http://codepen.io/mo4_9/pen/LbgBdz

```javascript
// 最大値と最小値を返す
function getMaxMin(...nums) {
    return [Math.max(...nums), Math.min(...nums)];
}

// 任意の範囲で乱数を返す
function getRandom(max, min = 0, isInt = true) {
    let result = ( Math.random() * ( ( max + 1 ) - min ) ) + min;
    result = (isInt) ? Math.floor( result ) : result;
    return result;
}
```

```javascript
const [ max, min ] = getMaxMin(1, -3, 10, 25, -10)
// const [ max, min ] = getMaxMin(...[1, -3, 10, 25, -10]) // 配列で渡したい場合
console.log(max, min)

// max, min, 整数かどうか
const rnd = getRandom(100, 50, false)
console.log(rnd)
```
Wordpressのメディアアップロード時に、タイトルだけではなく代替テキストにもファイル名を入れる方法

意外と簡単だった…。

```php
add_filter( 'wp_prepare_attachment_for_js', 'update_prepared_attachment_response' );
function update_prepared_attachment_response( $response, $attachment, $meta )
{
  if (empty($response['alt'])) $response['alt'] = $response['title'];
  return $response;
}
```
EclipseからOracleDBにServiceNameで接続する

# はじめに
EclipseでDBに繋いでEntityクラスを生成しようとしてORA-12514が出て詰まったことに端を発します。
自分の上手く行かなかったケースで上手く行くようになっただけなので、一般的な対処方法かは検証していません。

# 結論
Oracle Database Toolsを入れれば幸せになれるよ。
このツールはEclipse DTPのプラグイン（ドライバ？）です。

# 標準のEclipse DTPでも行けない？
行ける場合と行けない場合があります。

## DTPだけ行ける場合
SIDを使っている場合だと思う。接続文字列がこんな感じ。
`jdbc:oracle:thin:@server:1521:xe`

## DTPだけだといけない場合
Service nameを使っている場合だと思う。接続文字列はこんな感じ。
`jdbc:oracle:thin:@//server:1521/serviceName`

# 対処方法
1. Eclipse market placeでキーワード「oracle database」などと入力して、Oracle Database Toolsをインストールする。
2. ビューの「データソースエクスプローラ」を表示する。
3. 「データベース接続」を右クリして「新規」を選ぶ。
4. Oracleデータベース接続を選んで、「次へ」ボタンをクリックする。
5. ラジオボタンで「SID」が選択状態になっているのを「サービス名」に変える。
6. あとは適宜設定を記述しよう。

# 感想
OracleさんもEclipse DTPに協力してくれれば良いのに...

# 参考資料
[Oracle関連で詰まったところいろいろ - 総天然色頁](http://d.hatena.ne.jp/kamataro/20080604/1212583433)
[ORA-12505 - 解決!ORACLE!](http://www.noguopin.com/oracle/index.php?ORA-12505)
[EclipseでOracle DB開発 - Oracle DB Plugin for Eclipse DTP - S/N Ratio (by SATO Naoki)](http://d.hatena.ne.jp/satonaoki/20070622/p2)
Anacondaでpythonをinstallした結果

pythonを習得しようと意気込んで初めてanacondaというものを使いました。

* * *
* 
環境：windows7 64bit


~~コマンドプロンプトでpythonは問題なく動くことを確認したので、~~
~~次の章numpyのimportに進んだのですが、~~
~~importのところでエラーが出て進めず。~~

~~最後の行で~~
~~ImportError:No module named '_ctypes'~~
~~と出ています。~~
~~不可解。。。~~

後日再インストールしたところ動きました。
何だったんだ。

とりあえず、変なエラーでした。

***
後日Macでanacondaを使用してpythonの3.5をinstallしてみました。
ターミナルで

```pyhton:test.py
import numpy
```


を実行したところエラー無し・・・

何が違うんだろう
とりあえずMacで勉強を進めることにしてみます。
bootstrap-select の色を好きな色にカスタマイズ + 年月日を一行で表現

年月日をSelectで選ぶHTMLを書くのに、bootstrap-selectを使ってカスタマイズしようとしたら意外と苦労したので、参考までに。

select-bootstrap >> https://silviomoreto.github.io/bootstrap-select/

特に色を変えるとか考えずにサンプルを参考にして、簡単に書いてみる。
（いちおうbootstrapのグリッドシステムも使ってみる）

```html
<form id="fortuneForm">

<div class="container">
  <div class="row">
    <div class="col-xs-12 col-sm-3 col-sm-offset-1 text-center">
    <select class="selectpicker form-inline" name="year">
        <option value="2016">2016</option>
        ...略...
        <option value="1949">1949</option>
      </select>
     年
    </div>
    
    <div class="col-xs-12 col-sm-3 text-center">
      <select class="selectpicker form-inline" name="month">
         <option value="1">1</option>
         ...略...
         <option value="12">12</option>
      </select>
      月
    </div>

    <div class="col-xs-12 col-sm-3 text-center">
      <select class="selectpicker form-inline" name="day">
          <option value="1">1</option>
          ...略...
          <option value="31">31</option>
      </select>
      日
    </div>
    
    <div class="col-xs-12 col-sm-2 button">    
       <button type="submit" class="btn btn-default">Go!</button>
    </div>
  </div>
</div>

</form>
```

「form-inline」クラスを使うとselectの隣に文字が並びます。。。一応。。。
結果こんなかんじ。

![スクリーンショット 2016-12-08 18.16.10.png](https://qiita-image-store.s3.amazonaws.com/0/142995/4ae7292c-44f0-c546-ec7f-981a06b51671.png)

まぁ見た目はこれでもいいですが、どうにも暗い。。。
カーソルがあわせると灰色とか。。。

というわけで、色を変えます。

```html
.btn-default {
	border: 2px solid #f0828d;
}

.btn-default:hover,
.btn-default:active,
.btn-default:focus,
.btn-default.active:hover,
.btn-default.active:active,
.btn-default.active:focus,
.open > .dropdown-toggle.btn-default {
	border: 2px solid #f0828d !important;
	background-color: #FFF !important;
}

.btn-default[type=submit],
.btn-default[type=submit]:hover {
	border: 2px solid #f0828d !important;
	background-color: #f0828d !important;
	color: #FFF;
	box-shadow: 2px 2px 3px 1px #666;
	-moz-box-shadow: 2px 2px 3px 1px #666;
	-webkit-box-shadow: 2px 2px 3px 1px #666;
}

.btn-default[type=submit]:active,
.btn-default[type=submit]:focus {
	border: 2px solid #bc4e59;
	background-color: #bc4e59;
	color: #FFF;
	box-shadow: none;
	-moz-box-shadow: none;
	-webkit-box-shadow: none;
}
```

selectのborderをピンクに、もちろん選択中も。
あと、ボタンに影をつけて、押すと影が消える仕様にしました。

![スクリーンショット 2016-12-08 18.44.20.png](https://qiita-image-store.s3.amazonaws.com/0/142995/94b9838d-b301-39e1-d2b7-7c151f9abe76.png)

いいかんじです！可愛くなった！

あと、幅が狭くなると文字が改行される問題が出ているので、
selectの幅を変えます。


```html
.bootstrap-select {
	width: 85% !important;
}
```

といったかんじです。
たかだか、色とレスポンシブに対応させたかっただけなのに、けっこう時間を要してしまいました。
でも、一回作っておくと今後使えそうです。（生年月日選択するページなんてほとんどないけど）
Cognos Report Authoring 逆引き辞典 A13 リストにリストの行ごとの値で変化するグラフを挿入する(マスター/詳細)

![A13.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/14270971-61eb-2aff-f596-2b73a22da1d2.png)

■詳細手順
http://www.slideshare.net/ShinsukeYamamoto/cognos-reportauthoring-a13masterdetail

**Cognos Report Authoring 逆引き辞典 - 目次一覧**
http://qiita.com/shinyama/items/756cb4a40d31f6cee9f8
Cognos Report Authoring 逆引き辞典 A12 レポート内の別の領域へのリンク（ブックマーク）を利用したい

![A12.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/d6445df6-29ad-faaf-fb8a-07417ea15a8a.png)

■詳細手順
http://www.slideshare.net/ShinsukeYamamoto/cognos-reportauthoring-a12bookmark

**Cognos Report Authoring 逆引き辞典 - 目次一覧**
http://qiita.com/shinyama/items/756cb4a40d31f6cee9f8
Cognos Report Authoring 逆引き辞典 A11 1つのレポートから別のレポートへドリルスルーする

![A11.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/a7892c13-55ef-42e9-1683-6d81f4088d71.png)

■詳細手順
http://www.slideshare.net/ShinsukeYamamoto/cognos-reportauthoring-a11drillthrough

**Cognos Report Authoring 逆引き辞典 - 目次一覧**
http://qiita.com/shinyama/items/756cb4a40d31f6cee9f8
Cognos Report Authoring 逆引き辞典 A10 レポート実行時にプロンプトの値を固定したい

![A10.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/f12ab964-e2a1-64f3-2055-d8c36093e857.png)

■詳細手順
http://www.slideshare.net/ShinsukeYamamoto/cognos-reportauthoring-a10promptfix

**Cognos Report Authoring 逆引き辞典 - 目次一覧**
http://qiita.com/shinyama/items/756cb4a40d31f6cee9f8
iPhoneアプリでATS(App Transport Security)の制限に引っかかって解決するまでのメモ


# 不具合が発生したversion
ios 10.1系

# 不具合の現象
* iphoneのネイティブアプリからHTTPSのURLを叩き外部サイトを参照とした時に下記のようなキャプチャのエラーとなってしまった
* 少し前はなんとも無くURLを開けていたのに😨


## キャプチャ
<img width="375" alt="60d77c16-c217-11e6-82df-b055dc9922f3.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/106937/5063d9e6-7637-290d-ae20-b2b098e3dca4.jpeg">


# デバッグ
* まずはこのエラー文言でググった`An SSL error has occurred`とかで
* そうするとApple社のATSという情報が色々とヒットしてきた
* 実機でiPhoneアプリから色々とURLを叩いて検証した
* OpenSSLが入ってネットにつながってるサーバ上で`openssl`の`s_client`を使って上記のエラーにならないURL、エラーになるURLを叩いてみて差分を見てみた
  * 参考)http://qiita.com/greymd/items/68b0c40044a88171235a
* SSL/TLSのバージョンが怪しいかもって勘づいた
* そうだとするとATS関連かもとさらに思い始めた

# 原因
* 簡単に言うとApple社のATS(App Transport Security)の設定が起因していた
  * TLSのバージョンが低かったのが原因
  * WWDCでATSが必須になるって情報あったなーっと
  * 公式はこのあたり
    * https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40016240

## なぜ今頃に不具合が出てきたか
* 2016年末にApp Storeに公開するアプリにはATSが必須になってるっぽい。だから今ごろこの問題が出てきた


# 解決にむけて
## まず、ATSの主な要件は？
- TLSのバージョンが1.2 以上
- SHA256 以上のフィンガープリント
- 2048 ビット以上のRSAキー、もしくは 256 ビット以上の Elliptic-Curve
- 暗号スイート (暗号アルゴリズムの組み合わせ) 多すぎて書けない

参考）http://sehermitage.web.fc2.com/crypto/ssl_suite.html

**開こうとしたURLのサーバのSSLまわりの設定を上記の要件を満たす事が必要**

で開こうとしたURLは管理下のサーバでよく調べて見たらAWSのELBを使ってた

## 解決へ
ELBにはこのあたりの設定が簡単にできる
http://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/classic/elb-security-policy-table.html

AWSは概ね最新のSSLのセキュリティポリシーを適用を推奨しているが、対応するブラウザするブラウザとかちょっと確認しておいたほうが良いかなと思った

GAとかのログからユーザが主に使ってるブラウザと照らし合わせるとかして



# まとめ
* AWSのELBは立ち上げたときにSSLのセキュリティポリシーを決めると思うが、その後しばらく運用していくと設定を見直す事を忘れてしまう...何かアラートとかくれるとありがたい😅
* これに限らず設定が古くなってる可能性があるかも？みたいなチェックする仕組み必要かもと思った
* まぁでも早く解決できた良かった😀
Cognos Report Authoring 逆引き辞典 A9 当月のデータのみを表示する

![A9.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/5bd5081f-bb0a-f2db-c6bb-ee1302c5b6c5.png)

■詳細手順
http://www.slideshare.net/ShinsukeYamamoto/cognos-reportauthoring-a9currentmonth

**Cognos Report Authoring 逆引き辞典 - 目次一覧**
http://qiita.com/shinyama/items/756cb4a40d31f6cee9f8
Cognos Report Authoring 逆引き辞典 A8 別ページにフィルタリング条件を指定してレポートを作成したい

![A8.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/0b2c9f8a-52ed-6d43-6fa3-f33d11df9487.png)

■詳細手順
http://www.slideshare.net/ShinsukeYamamoto/cognos-reportauthoring-a8prompt

**Cognos Report Authoring 逆引き辞典 - 目次一覧**
http://qiita.com/shinyama/items/756cb4a40d31f6cee9f8
裏GETWILD'89（復号編）


GetWild Advent Calendar 2016 の 4日目に [！！！！げっ！げっえんたー！！！！げっ！げっげっ！！！！げっげっげっ！ ！！！！げっげっげっえんたー！！！！げっ！わいーげっ！！！！げっ！えんたー！！！！！げっ！げっ！ ！！！！！わいーげっえんたー！！！！！えんたーわいー！！！！！！えんた ーわいーげっ](http://qiita.com/If_I_were_boxp/items/7417060501232d777b88) という記事が投稿されていた。
このタイトルおよび本文は任意の文字列を `！` , `げっ` , `わいー` , `えんたー` に置き換えたものだけど、面白そうだったのでrubyで復号してみた。

と言っても単純で、逆のことをするだけ。

```ruby
input = "！えんたー！！げっげっ！えんたー！えんたー！！げっわいーえんたーわいーわいー！わいーわいー！げっわいー！げっ！えんたーわいーわいー！わいーえんたー！えんたー！！げっわいーえんたーえんたー"

binaries = input.gsub("！", "00").gsub("げっ", "01").gsub("わいー", "10").gsub("えんたー", "11").gsub(" ", "")
binaries.each_char.each_slice(16).
  map { |chars| chars.join("").to_i(2) }.
  map { |chars| chars.chr("UTF-8") }.
  join
```

* それぞれの単語をビット列に見立てた文字に置換
* 16文字(2バイト)毎に区切り、数値変換(文字コード)
* UTF-8に変換

※ 厳密にはスペースの扱いで元の文字列と同一にはできていないけど、まあ文意は分かるということで。
Cognos Report Authoring 逆引き辞典 A7 レポートを再実行せず動的にフィルタリングしたい

![A7.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/d8b426e4-8470-ffdd-cea2-6e8ce9fe2e9f.png)

■詳細手順
http://www.slideshare.net/ShinsukeYamamoto/cognos-reportauthoring-a7dynamicfilter

**Cognos Report Authoring 逆引き辞典 - 目次一覧**
http://qiita.com/shinyama/items/756cb4a40d31f6cee9f8
Cognos Report Authoring 逆引き辞典 A6 条件に応じて書式を変更したい②

![A6.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/a79ad190-b976-54b1-4b1b-3aac533c96c4.png)

■詳細手順
http://www.slideshare.net/ShinsukeYamamoto/cognos-reportauthoring-a6condition2

**Cognos Report Authoring 逆引き辞典 - 目次一覧**
http://qiita.com/shinyama/items/756cb4a40d31f6cee9f8
New RelicのAPMでPythonアプリを監視する（Flask編）

# はじめに
New RelicのAPMでPythonアプリを監視してみます。Pythonはフレームワークが多種多様で、Webでの公開手法も幅が広いのですが、まずはなるべくシンプルな形でNew RelicとPythonアプリの連携方法をご紹介したいと思います。今回はFlaskで作った単純なアプリにNew Relicのコードを埋め込んで監視画面に表示させるまでの流れを確認します。

# 環境

CentOS 7
Python 2.7.5(default)
New Relicのアカウントがあることが前提です。LICENSE-KEYは適宜読み替えてください。

# New Relic APMのセットアップ
## Python Agentのインストール
[公式](https://docs.newrelic.com/docs/agents/python-agent/installation-configuration/python-agent-installation
)の手順に沿ってインストールします。

私の環境の例。若干古いので[最新版はこちら](https://download.newrelic.com/python_agent/release/)。

```
# wget https://download.newrelic.com/python_agent/release/newrelic-2.8.0.7.tar.gz
# tar xvzf newrelic-2.8.0.7.tar.gz
# cd newrelic-2.8.0.7
# python setup.py install
```

ちょっと試すだけならこちらが楽です。あまり手間は変わらないかもしれませんね・・・。

```
pip install newrelic
or
easy_install newrelic
```

## コンフィグ（newrelic.ini）生成
任意の場所で以下のコマンドを実行するとコンフィグができます。コンフィグファイルは移動しても問題ありません。

```
newrelic-admin generate-config LICENSE-KEY newrelic.ini
```

## コンフィグの修正
コンフィグの中身を修正します。アプリ名を"New Relic Hello!"に変えてみました。これはNew Relicの画面上でのアプリ名になります。コメントを外してlogが出力できるようにしました。修正したポイントのみ以下に抜粋します。

```
app_name = New Relic Hello!
log_file = /tmp/newrelic-python-agent.log
```

## Python Agentの動作確認
以下のコマンドでPython Agentが実行可能かどうかを確認します。

```
newrelic-admin validate-config newrelic.ini
```

数秒後、APMの画面に"Python Agent Test"という名前で表示されます。何回実行しても問題ありません。今後の過程でトラブルシュートの切り分けに使えます。

![01.jpg](https://qiita-image-store.s3.amazonaws.com/0/150932/b938cd80-bb39-5c8e-3294-a755f3ed366c.jpeg)


# Flaskのセットアップ
## Flaskのインストール（[参照](http://a2c.bitbucket.org/flask/)）

```
# easy_install Flask
```

## アプリ作成
New Relic Hello!と表示するだけのアプリ。

```
# cat flask_hello.py
import newrelic.agent
newrelic.agent.initialize('/root/newrelic-2.8.0.7/newrelic.ini')
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return "New Relic Hello!"

if __name__ == '__main__':
    app.run(host='0.0.0.0')
#
```

上の2行がNew Relic用の埋め込みコードです。newrelic.iniの場所を指定します。

```
import newrelic.agent
newrelic.agent.initialize('/root/newrelic-2.8.0.7/newrelic.ini')
```

# 動作確認
ターミナルを二つ開きます。

## ターミナル1
以下を実行します。"0.0.0.0"はこのネットワークのこのホストを表す特殊なIPアドレスです。コード上でポート番号を指定しないと実行時に5000番であがります。

```
# python flask_hello.py
 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
```

## ターミナル2
以下を実行。127.0.0.1ではなく自サーバのアドレスを指定してもOK。

```
# curl http://127.0.0.1:5000
New Relic Hello!
```

watchコマンドで1秒おきのアクセスを見立てることができます。

```
watch -n 1 "curl http://127.0.0.1:5000"
```

開発環境であればアプリの実行をsupevisorでデーモン化してみるのもよいかもしれません。あるいはApacheやNginxと連携させるか。手間との相談といったところです。

## New Relicの画面
"New Relic Hello!"であがってきました。

![02.jpg](https://qiita-image-store.s3.amazonaws.com/0/150932/5c13cd45-0a4d-e90b-32f5-ccc3fc9eaf96.jpeg)

New Relic hello!だけを表示するアプリですが、関数名やWSGIの情報なんかも見えることがわかります。

![03.jpg](https://qiita-image-store.s3.amazonaws.com/0/150932/d7ef881b-df5c-b083-8020-84f474c1ccc3.jpeg)


以上
Cognos Report Authoring 逆引き辞典 A5 条件に応じて書式を変更したい①

![A5.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/6d51fb64-aa0d-47be-4ae6-6ec1e9357724.png)

■詳細手順
http://www.slideshare.net/ShinsukeYamamoto/cognos-reportauthoring-a5condition1

**Cognos Report Authoring 逆引き辞典 - 目次一覧**
http://qiita.com/shinyama/items/756cb4a40d31f6cee9f8
Cognos Report Authoring 逆引き辞典 A4 レポートに画像を表示させたい

![A4.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/9c17da11-5466-7531-cad0-f742b03ea329.png)

■詳細手順
http://www.slideshare.net/ShinsukeYamamoto/cognos-reportauthoring-a4image

**Cognos Report Authoring 逆引き辞典 - 目次一覧**
http://qiita.com/shinyama/items/756cb4a40d31f6cee9f8
Cognos Report Authoring 逆引き辞典 A3 新しいグラフタイプでグラフを作成したい

![A3.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/4eb56a98-65f0-f947-408b-27a5b1cc0eb7.png)

■詳細手順
http://www.slideshare.net/ShinsukeYamamoto/cognos-reportauthoring-a3newchart

**Cognos Report Authoring 逆引き辞典 - 目次一覧**
http://qiita.com/shinyama/items/756cb4a40d31f6cee9f8
しばらくjQueryを触っていない時に見返す用メモ

しばらく触っていないとjQueryをどんな感じで書いていたか忘れてしまうので、
思い出しやすいように少しメモをしておきます。

#読み込み
###ダウンロードしない場合
このコードをheaderにかく。

```html
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
```

### ダウンロードする場合
[Download jQuery | jQuery](http://jquery.com/download/)でダウンロードをし、
scriptタグで読み込む。


#コード例
クリックでサイドバーにanimateクラスをつけたり取り除いたりするときのコード。

```html
<script>
  $(function(){
    $(".button").on("click", function(){
      if($(".sidebar").hasClass("animate")){
        $(".sidebar").removeClass("animate")
      }
      else{
        $(".sidebar").addClass("animate")
      }
    });
  });
</script>
```

#参考サイト
[jQueryってなに？超初心者向け入門講座 - ウェブ企画ラボ](https://webkikaku.co.jp/blog/webdesign/jquery_start/)
どうなるbind operator proposal

# bind operator proposalとは?
ECMAScriptへの新しい文法の提案の1つ。

- `obj::func()`と書けば`func.call(obj)`になる
- `::obj.method` と書けば `obj.method.bind(obj)`になる

という新しい文法を提案している。

[babelですでに実装されており](https://babeljs.io/docs/plugins/transform-function-bind/)、熱烈なサポーターもいるが、
TC39 stageは未だに0。 (TC39のstageについてはazuさんの[ECMAScriptとは何か？](https://azu.github.io/slide-what-is-ecmascript/slide/12.html)に詳しい)

もう一方の期待の新星 async/await が着々とstageを上げているなか、何故bind operator proposalは一向に進まないのか。
本記事は主に、その理由として挙げられている下記のgithub issuesの流れをまとめたものである。

- [What's keeping this from Stage 1 - issue#24 proposal-bind-operator](https://github.com/tc39/proposal-bind-operator/issues/24)
- [Why is this still stage 0? - issue#35 proposal-bind-operator](https://github.com/tc39/proposal-bind-operator/issues/35)

# bind operator proposalが進まない理由
紐解いていくと、2つの課題があった。

1. TC39のメンバーで推進役がいない
1. 2つの別な機能が別々な問題を抱えている

## 推進役 = champion の不在
各提案には**champion**と呼ばれる、TC39のmemberで、この提案を推し進める代表的存在が必要なのだという。
この提案にもchampionはいたが、彼はすでにTC39のmemberとしては働いていなかった。
今年7月に、別なmemberが「私がchampionになります」という発言をして盛り上がりを見せたが、それっきり出番がないような状況だ。

## 2つの別な機能を1つで提案している
実はこの提案は、2つの別な機能の提案になっている。

1. `obj::func()`と書けば`func.call(obj)`になる機能
2. `::obj.method` と書けば `obj.method.bind(obj)`になる機能

issue内では、1を**infix notation**と表現し、2を**prefix notation**と表現していたが、それぞれが別な課題を抱えていた。

## infix notationの動的thisの変更は混乱を招く
infix notationは、thisを、敢えて、動的に変える、という操作だ。
これは混乱のもとになるのではないか。

ES2015では、古来からJSに存在した「thisが変わるってどういうこと？」問題に取り組み、thisを束縛する関数定義の文法を作ったのだが、
このinfix notationは、その方針に逆行しまいか、ということである。


## prefix notationは見た目がよくない
prefix notationが解決するのは、

```js
arr.forEach(...args => console.log(...args))
```

を、

```js
arr.forEach(::console.log)
```

にすることだ。(実際にはconsole.logはthisがなくても動作するようになってきているようだが)

Reactなどで下位のコンポーネントにthisを束縛した状態でメソッドを渡したい場合にも有効だ。

しかし、他のプログラミング言語で、`::`から始まる構文がない(あったらコメントよろしく)ため、
見た目がよくなく感じるのだろう。

## 別で提案するのがよいのか
infix notationとprefix notationは、待ちわびている層が違う印象がある。
[RxJS勢はinfix notationを待ちわびている](http://reactivex.io/rxjs/manual/installation.html)。
underscoreやlodashのようなutility系も、この文法が取り入れられたら、thisをベースにするものに置き換えられていくだろう。

一方prefix notationは、「あったら便利だよね」「v8はbindに比べて最適化できる余地がありそう」といった程度で、そこまで急ぐ理由も見えない、という印象がある。
ただ多くのイベント駆動型ライブラリ、もちろんReactでも、小さな幸せを手に入れることができる。
個人的にはredux sagaのSVO記法(主語、動詞、目的語の順に引数に入れて関数呼び出しを宣言的に書くもの)などが今後増えるときに、より便利になるのではないかと思う。

このように、解決したい課題も違うし、抱えている問題も違うので、分けてしまえばいいのではという意見があった。

しかし、分けたら分けたで、2人のchampionが必要になり、自体は混迷を極めている...。

# ファンとして
infix operatorは劇薬的だ。魅力的だが、乱暴な使い方が怖い。
1人で楽しむ分には最高だが、チームだと「このthisはどこに使われる想定なん？」となる。
だから、`filter`や`map`など、汎用の処理群でのみ使われる世界になるように、
利用側が行儀よくしている必要がありそうだ。

prefix operatorは、最適化のカギになってくれという期待がある。

例えばReactで、

```js
<SomeComponent onClick={::this.sendSomething} />
```

これがしたいが、これは(軽微だが)パフォーマンス問題がある。
コンストラクタで一度だけbindするのが筋だということだ。
でも、**「bind関数じゃなくて文法なので、最適化でパフォーマンス問題を解決してくれる」**的な
未来を期待している。

来年からは、ファンはやきもきしているだけでなく、もっと態度で示していけるよう、
コミュニティを盛り上げられればと思う。
ターミナルでファイル名に含まれるスペースをアンダーバーにまとめて置換

`find`コマンドと`rename`コマンドを使って、現在のディレクトリから下の階層にあるファイルやディレクトリで、ファイル名やディレクトリ名に含まれるスペースをアンダーバーにまとめて置換する方法。

```bash
find . -depth -name "* *" -execdir rename 's/ /_/g' "{}" \;
```

`rename`コマンドはデフォルトでMacには入ってないのでHomebrewでインストールする。

```bash
brew install rename
```

####参考
http://stackoverflow.com/questions/2709458/bash-script-to-replace-spaces-in-file-names
http://qiita.com/shuhei/items/cf1ddf373d1f83d5d667
C++の乱数ライブラリが使いにくい話

# はじめに
この記事は[初心者C++er Advent Calendar 2016](http://www.adventar.org/calendars/1691#list-2016-12-07)の14日目の記事です。

C++のライブラリってすごく機能がいっぱいあるように思うんですけど、なんか汎用的すぎたり、痒いところに手が届かなかったりするんですよね。
今回はそんな話をしたいと思います。


# 真の乱数

`<random>`ヘッダの話をします。
乱数ってよく使いますよね。

でもパソくんはサイコロを振る事ができません。計算をすることしかできないのです。
まあ、そこで現在の時刻とかCPUの温度とかを使ってランダムっぽい数値を引っ張ってきます。

それをやってくれるのは

`std::random_device`というやつである。

これはクラスなので

```
std::random_device rd{};

std::cout << rd() << std::endl;
```

のようにして、いちいちオブジェクトを作ったりして使う。

`random_device`クラスの`operator()`を呼び出すと乱数を得ることができる。

### 備考（C++がチョットできる人向け）

この`std::random_device`というクラスはコピーもムーブもできない。
したがって`std::vector<std::uint32_t>`をgenerateを使って乱数で埋めたい場合次のようになる。

```cpp
std::random_device rd{};

std::vector<std::uint32_t> vec(10);

std::generate( vec.begin(), vec.end(), std::ref(rd) );
```

`std::ref(rd)`のようになります。
`std::ref`は`<functional>`にあったと思います。

# 疑似乱数

いちいち真の乱数を引っ張ってくるのはコストであるため、最初乱数（初期シード）から乱数っぽい値を計算してくれるアルゴリズム的なものがあります。
それを**擬似乱数**と呼びます。

これらには種類がいろいろとありまして、

- minstd_rand0
- minstd_rand
- mt19937
- mt19937_64
- ranlux24_base
- ranlux48_base
- ranlux24
- ranlux48
- knuth_b
- default_random_engine

と、これだけあります。

`std::mt19937`を使っとけばだいたい問題がナイと思います（適当


# seed と seed_seq

擬似乱数を使う場合、

```
std::mt19937 mt;

std::cout << mt() << std::endl;
```

のようにすれば擬似乱数が得られる。
しかしこの場合はプログラムの実行をするたびに同じ値が表示される。

擬似乱数には初期値として初期シードと呼ばれる乱数を与えなければならない。

```cpp
std::random_device rd;

std::mt19937 mt(rd());

std::cout << mt() << std::endl;
```

が正しい。

さて、C++には`std::seed_seq`なるクラスが用意されていてこれで擬似乱数生成器クラスを初期化できる。

`std::seed_seq`はイテレータのペアをとる。

```cpp
std::random_device rd{};

std::vector<std::uint32_t> vec(10);

std::generate( vec.begin(), vec.end(), std::ref(rd) );

std::mt19937 mt(std::seed_seq(vec.begin(), vec.end()));
```

とやってやるのだ。

# Distribution

最後に、ディストリビューションについてでさ。

ランダムな整数って使いにくい、1~6とかが使いやすい。
そう思うのは当たり前である。

それを実現するのが`distribution`達である。

##一様分布乱数
整数のやつ。
`std::uniform_int_distribution<IntType>`

`IntType`には好きな整数型を指定する。

```
std::mt19937 mt{ std::random_device{}() };

std::uniform_int_distribution<int> dist(1, 6);

for ( int i = 0 ; i != 10 ; ++i )
  std::cout << dist(mt) << std::endl;
```

使い方はご覧の通りである。

`dist(1, 6)`とすれば1~6になる。
呼び出すときには、擬似乱数生成エンジンを渡す。

浮動小数点のやつ。
`std::uniform_real_distribution<RealType>`
もあるよ。
使い方は一緒。

分布乱数は他にもたくさんあります。
ベルヌーイ分布・正規分布・ポワソン分布・標本分布などがあります。

# 乱数まとめ

- 擬似乱数生成エンジンを使う（mt19937でおｋ）

- エンジンを真の乱数で初期化する（std::random_deviceを使おう）

- 分布乱数を使うときは分布乱数クラスを使う。エンジンを渡して呼び出す。


面倒くさい、1~6の乱数を得るためにやることが多すぎだ(´・_・｀)
Swift Subscript関連でSegmentation faultによるビルドエラー

Xcode 8.2, Swift 2.3, RealmSwift 1.1 のプロジェクトで、 xcodebuild Release build をすると以下の Segmentation fault が出ました。

```
1.	While type-checking 'a-method-name' at /path-to-workspace/a-swift-file.swift:48:5
2.	While type-checking expression at [/path-to-workspace/a-swift-file.swift:53:36 - line:53:74] RangeText="json["entry"] as? [[String: AnyObject]]"
3.	/path-to-workspace/build/RealmSwift.framework/Headers/RealmSwift-Swift.h:256:1: importing 'RealmSwiftObject::objectForKeyedSubscript:'

<unknown>:0: error: unable to execute command: Segmentation fault: 11
<unknown>:0: error: compile command failed due to signal (use -v to see invocation)
** BUILD FAILED **
```

Xcodeでのデバッグビルドでは問題なく、IDEでのwarning等もない、リリースビルド時もなぜか無事ビルドが通ることもある、という状況で困り果てていたのですが、以下のように修正することで解決しました。

修正前

```swift
let json = try NSJSONSerialization.JSONObjectWithData(data, options: .AllowFragments)
if let entry = json["entry"] as? [[String: AnyObject]] {
```

修正後

```swift
let json = try NSJSONSerialization.JSONObjectWithData(data, options: .AllowFragments)
if let json = json as? NSDictionary, entry = json["entry"] as? [[String: AnyObject]] {
```

修正の内容は、JSONObjectWithDataの戻り値を、 `AnyObject` から `NSDictionary` にキャストしているだけ。JSONObjectWithData() の戻り値は Objective-C の `id` 型 なので、あまりよく考えずに Objective-C 脳のまま Key-Value Coding していまっていました。

型推論まわりで（？） RealmSwiftとの組み合わせにより（？） Swift Compilerが死んでいるのかな？AnyObject って subscript は定義されていような気がするけど、なんでデバッグビルドでコンパイルエラーにならないんだろう。
SELinux起動時のユーザディレクトリ公開


SELinux有効時にラベルを再設定する方法として、以下の方法を見つけました。

```
# restorecon /home/ユーザディレクトリ/public_html
# restorecon -R /home/ユーザディレクトリ/public_html
```

ラベルを
system_u:object_r:httpd_user_content_t
に設定できるとありました。

restoreconコマンドは「ファイル、ディレクトリにデフォルトコンテキストを反映する」と説明があって、
そもそも自分で作ったpublic_htmlの“デフォルト”ってなに？と思いました。

```
# chcon unconfined_u:object_r:httpd_user_content_t /home/ユーザディレクトリ/public_html -R
```

とセキュリティコンテキストを設定するのであれば分かりますけど・・・

とかなり長いことモヤモヤしていましたが、
「標準のセキュリティコンテキスト定義ファイル」なるモノがあるらしい。


/etc/selinux/targeted/contexts/files/file_contexts.homedirs

の中に下記の行を見つけてやっとすっきりしました。

```
/home/[^/]*/((www)|(web)|(public_html))(/.+)? unconfined_u:object_r:httpd_user_content_t:s0
```
　


restorecon コマンドに -v　や　-F オプションがついている例があって、ここでも
気になってしまったがman restoreconでわかりました。

       -v     show changes in file labels.
       -F     Force  reset
でした。


いままで、なにげなく、/home/ユーザディレクトリ/public_html
を作っていたけど、public_htmlじゃなくてdocumentなんてしちゃったら
動かないよ！
【ゲリラアドカレ】UE4ゲーム実装　進捗報告 8日目(ノベルパート)

【非公式】某会社設立記念ゲリラ Advent Calendar 2016 16日目の記事です。

FlashゲームをUE4で再実装するゲリラアドカレです。

バトルのロジック作りが結構難しくなってきたため、息抜きでノベルパートを作りました。
出来る部分を実装してしまいましょう。

・注意
許可を取ってないので通常業務の空いた時間を利用して作成するため、作成中のゲーム、及びアドカレは完成保証がなければ、ゲーム自体もリリースされる保証も皆無なので、あんまり期待しないでください。

#ノベルパート

オリジナルのノベルパートです。
![ノベルパート.png](https://qiita-image-store.s3.amazonaws.com/0/104377/cfc0096b-6ec0-fef6-460d-1ce6fb72efda.png)

よく見る形式のノベル画面ですね。
これをUE4で再現します。

#UE4でノベル作り

早速ノベルパートを作ります。
実は５月に[【第５回UE4ぷちコン】UE4初心者がUnrealEngineでノベルゲームを作ってみた](http://qiita.com/YuukiOgino/items/7922e178d27d21e0257f)で、アドベンチャーっぽいものをUE4上で作成しています。

時間もないのでこれをそのまま転用して、一部ソースを改造していきたいと思います。

#ノベル実装

基本的には[【第５回UE4ぷちコン】UE4初心者がUnrealEngineでノベルゲームを作ってみた](http://qiita.com/YuukiOgino/items/7922e178d27d21e0257f)と同じです。

違うのは構造体を一つ一つ変数に持たなくするようにしたので、少しノードがすっきりしました。

・NovelPlayerControler

左クリックしたときにシナリオを進めます。
![image](https://qiita-image-store.s3.amazonaws.com/0/104377/c094b5d9-9708-47db-246b-2faaa1a28920.png)

立ち絵の状態を変更します。
![image](https://qiita-image-store.s3.amazonaws.com/0/104377/34d5898f-85f5-0f98-cd4a-f85a7aeffbf3.png)

・NovelUI

デザインです。
![image](https://qiita-image-store.s3.amazonaws.com/0/104377/d86e4982-016e-8912-fef2-a00e9b9ff26d.png)
ノベルゲームでよくある、改行のアイコンを固定の場所に表示するようにしました。

選択肢の処理ですが、今回のゲームでは使用しないと思います。
![image](https://qiita-image-store.s3.amazonaws.com/0/104377/a1d54c30-eb0f-13b9-93ce-63af325c934f.png)

本文を表示する処理です。
![image](https://qiita-image-store.s3.amazonaws.com/0/104377/15bbefc4-4ce4-424e-6c43-234be10b15ed.png)

キャラクター名を表示する処理です。
![image](https://qiita-image-store.s3.amazonaws.com/0/104377/bdfef697-aa3b-c2be-1a21-93ac66fc0f0a.png)

選択肢のボタンラベルです。
![image](https://qiita-image-store.s3.amazonaws.com/0/104377/57954663-d869-dc2b-8548-b64e04ce208d.png)

選択肢を表示するかの判定処理です

![image](https://qiita-image-store.s3.amazonaws.com/0/104377/286781f5-7cbc-f145-6b51-ae7a270d8156.png)

シナリオジャンプ処理ですが、出来ているかはテストしてないのでわかりません。
いったんアップします。
![image](https://qiita-image-store.s3.amazonaws.com/0/104377/d6b61b8b-3ddd-9330-02a8-8a81ae69168c.png)

・レベルブループリント
![image](https://qiita-image-store.s3.amazonaws.com/0/104377/2f13da58-8bb0-9765-6fb6-95ec3d21420f.png)

・構造体

![image](https://qiita-image-store.s3.amazonaws.com/0/104377/80aeea98-6570-cbba-cf7a-ef0717be3acc.png)

・データベース

![image](https://qiita-image-store.s3.amazonaws.com/0/104377/869c9c82-767d-d49f-dd6a-8329fbadfb0b.png)

#ノベルパート完成

これでノベルパートが出来ました。

<a href="http://oginoyuki.wp.xdomain.jp/wp-content/uploads/2016/12/anim.gif"><img src="http://oginoyuki.wp.xdomain.jp/wp-content/uploads/2016/12/anim-300x169.gif" alt="" width="1273" height="716" class="alignnone size-medium wp-image-125" /></a>

事前に作ってあったのである程度であれば簡単に出来てしまいました。
息抜きが終わったので、バトルの実装に戻ります。
横向き、回転時にonDestroy()させない （Android）

マニフェストに以下を追加する。
android:configChanges="orientation|screenSize"

```xml:AndroidManifest.xml

.....

<activity
    android:name=".activities.MainActivity"
    android:configChanges="orientation|screenSize">
    <intent-filter>
        <action android:name="android.intent.action.MAIN"/>

        <category android:name="android.intent.category.LAUNCHER"/>
    </intent-filter>
</activity>

.....
```
Lombokにvarが追加されました。


Lombok v1.16.12 で var が追加されました。final じゃない val ですね。

[Lombok Changelog](https://projectlombok.org/changelog.html)

> Lombok Changelog
> v1.16.12 (December 5th, 2016)
> FEATURE: var is the mutable sister of val. For now experimental, and opt-in using ALLOW in the flagUsage configuration key. Thanks for the contribution, Bulgakov Alexander.
> ...

[Lombok EXPERIMENTAL - @var](https://projectlombok.org/features/experimental/var.html)

この機能は非常に議論を呼ぶものであり、[JEP 286](http://openjdk.java.net/jeps/286)が適用されれば要らなくなるため、実験的な機能として実装されたとのこと。

## 設定方法

### 共通
プロジェクトルートの lombok.config ファイルに以下を追記 (ファイルが無ければ作る)

```lombok.config
lombok.var.flagUsage = ALLOW
```

### Eclipseの場合

通常通りlombokのjarファイルを実行してEclipseにインストールする。

※保存時に不要importを除去する設定になっている場合、 `import lombok.experimental.var;` が消えてしまうことが多いです。どうしたものか？ (marsで確認)

### Intellij IDEAの場合

まだ[プラグイン](https://github.com/mplushnikov/lombok-intellij-plugin)が対応しておらず、使えませんでした。

→ [issue登録](https://github.com/mplushnikov/lombok-intellij-plugin/issues/322)したら対応してくれました。次期バージョン(0.14)のリリースを待ちましょう。

## 使用方法

Javaのコード内で lombok.experimental.var をインポートし、ローカル変数定義時の型の代わりに使用する。

```Sample.java
package sample;

import lombok.experimental.var;

public class Sample {
    public static void main(String[] args) {
        var hoge = "hoge";
        System.out.println(hoge);
        hoge = "ほげ";// finalじゃないので再代入可
        System.out.println(hoge);
    }
}
```
USB3.0対応SDカードリーダ速度比較


http://qiita.com/miminashi/items/b68cc0d55df1b176086c の続き。

# MR3-C008BK

http://www2.elecom.co.jp/products/MR3-C008BK.html

SanDiskの48MB/sと80MB/sのmicroSDカードでそれぞれ試してみたがどちらも500KB/sくらいしか出ない。まともに計測するのを諦めた。
Macが悪いのかな・・・
middlemanでマークダウン記法を使うテスト

#ことの発端
自社管理のmiddlemanブログでPR記事っぽいものを書くことがたまにある。
この更新管理を効率良くサクッと書けないかと悩んだ結果、記事部分をMarkdown記法で書ければ楽だし、デザインがブレることもなさそうじゃね？？
という結論に至った。

#書けるようになるまでの手順
どうやればMarkdown記法に変えるか知らなかったので、調べた結果を書き綴ります。

##gemの追加
middlemanにはKramdownというエンジンが入っているみたいですが、世間的にgithubと同じ記法ができるredcarpetというものに変えるのがツウらしい。

```ruby:Gemfile.rb
gem 'redcarpet'
```

```ruby:config.rb
set :markdown, :tables => true, :autolink => true, :gh_blockcode => true, :fenced_code_blocks => true, :with_toc_data => true, :smartypants => true
set :markdown_engine, :redcarpet
```

で、あとはbundle install


##マークダウンで書きたいファイルの用意
hogehoge.md.erb

といった感じのファイルネームにする。
ちなみにhogehoge.md.hamlは動きません（笑）
理由はmarkdown記法の見出しとhamlのID属性で「#」がぶるかるからっぽい。

記法については

```HTML:sample.md
# H1見出し

* リスト1
  *リスト1-2 
* リスト2

> 引用（blockquote）

テーブル|midashi2|midashi3
youso1|youso2|youso3

[リンクテキスト](飛び先URL)
![ALTテキスト](画像パス)
※画像パスはmiddlemanで設定した画像フォルダが効きます

リンク付き画像は
[![ALTテキスト](画像パス)](飛び先URL)
でいける模様

```

他にも色々あるから必要ならば適当に調べてね！w

#まとめ
とりあえずmarkdownで書けるファイルを用意することができた。
あとはこれをどう組み込めば日々の更新管理が楽になるかを考えねばwww

articleが格納されているファイルに専用layoutを当て込んで、記事部分だけpartialで＊＊＊.mdを引っ張るのがいいかなぁ？
Google BigQuery Standard SQLで_TABLE_SUFFIXを使う時の注意点


Standard SQLで_TABLE_SUFFIXを使うと、Legacy SQLのTABLE_DATE_RANGEと同等の処理を書きことができて便利ですね。

https://cloud.google.com/bigquery/docs/querying-wildcard-tables

ですが、この_TABLE_SUFFIX擬似列はSELECT句に書くことはできません。
そのため、下のようなクエリはエラーになってしまいます。

```SQL
SELECT title, _TABLE_SUFFIX FROM `sample_dataset.sample_table_*`
```

_TABLE_PARTITION擬似列はSELECT句に書くことができるため、このようなケースではDate-Partitioned Tableを利用する方が良さそうです。
EclipseのJavaエディタで変数とかがハイライトされなくなったら

Eclipseでクラス、メソッド、変数とかをクリックしたときに、そこを強調表示してくれるやつが時々勝手にOFFられる。
自分だけかと思ったら結構みんな起こるみたいで、ググると結構下の手順が出てくる。

**日本語メニュー**
[ウィンドウ]－[設定]－[Java]－[エディタ]－[エディタ出現箇所のマーク]－[現行ファイルの選択されたエレメントの出現箇所にマークをつける]

これでもちろんOK。なんですが、割と日本語化されたメニューの手順ばかりなので、とある事情で日本語化プラグイン入れられなかったり、「ワタシニホンゴワカリマセーン」という人のために。

**英語メニュー**
[Window]－[Preferences]－[Java]－[Editor]－[Mark Occurrences]－[Mark Occurrences of the selected element in the current file.]
Railsチュートリアルをやってみる 第１章

# 概要
Railsを使う必要性が出てきたので、Railsチュートリアルやってみようと思っています。
そこで、何か成果を残したいと思い、Qiitaでまとめて行きたいと思います。
Railsチュートリアルの４版です。
昔、Railsを少し触ったことあがあるので環境設定の項目は省きます。
それでは頑張ってきます！

# Bundler
アプリケーションの依存ライブラリの管理するやつですね。
Railsを起動するときに自動で実行されます。(`bundle install`のコマンド)
どのライブライのどのバージョンを使うかは`/Gemfile`にかかれています。

### Gemfile
```rb
gem 'sqlite3'
```
のように記述するとsqlite3の最新バージョンを常にとってきます。

```rb
gem 'coffee-rails', '~> 4.0.0'
```
このように記述すると4.0.xの最新バージョンがインストールされます。（4.1.０以上はインストールされない）
基本的にこの記述か固定バージョンをつかうのかなと思いました。

```rb
...
gem 'jbuilder',     '2.4.1'

group :development, :test do
  gem 'sqlite3', '1.3.11'
  gem 'byebug',  '9.0.0', platform: :mri
end

group :development do
  gem 'web-console',           '3.1.1'
  gem 'listen',                '3.0.8'
  gem 'spring',                '1.7.2'
  gem 'spring-watcher-listen', '2.0.0'
end
```
このようにテスト環境や開発環境だけで使うものを指定したりすることもできます。

# rails server
`rails server -b IP -p PORT`
上記のコマンドでipアドレスとport番号を指定して起動することができます。
指定しないとlocalhost:3000で起動されます。

# Hello World
"Hello World!"を表示するように変更します。
まずはコントローラを変更します。
app/controllers/application_controller.rbを

```rb
class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception

  # 追加
  def hello
    render html: "Hello World!"
  end
end
```
に変更します。
やっていることは"Hello World!"をhtml形式で返すよっていうことです。
次に、localhost:3000/（root）にアクセスされたときに、追加したhelloという関数を呼び出すように変更します。
これは、config/routs.rbを変更します。

```rb
Rails.application.routes.draw do
  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
  #追加
  root 'application#hello'
end
```
rootにアクセスが来た場合にapplicationコントローラのhelloの関数を呼び出しますということを表します。
これでlocalhost:3000/にアクセスすると"Hello World!"が表示されます！

# 終わりに
git,MVCの説明は既知のことだったので、読み飛ばしました。
また、デプロイも今は必要ないので必要なってから読み返したいと思います。
以外とサクッといけました！
GmailでHTMLメールの画像が荒れる現象

![WS000000.png](https://qiita-image-store.s3.amazonaws.com/0/73196/ce493684-67f8-2033-2a1e-ba73828f0828.png)


HTMLメールなどで画像サイズの値をピクセルで指定しており、かつ、スタイルシートでサイズ指定された値のほうが大きい場合に画像が荒れる。
（小さい画像を大きくしたかのような乱れかたをする。上の左側の画像）

```html:上の左側の画像
<img src="TENMUSU_LEFT.png" style="width: 400px;" alt="ABC" width="100"> 
```


タグの値がスタイルシートより大きいか、％指定なら問題なく表示される。

```html:上の右側の画像
<img src="TENMUSU_RIGHT.png" style="width: 400px;" alt="ABC" width="100%"> 
```

Gmailでのみ確認できた不具合だったのですが、Gmailで軽快な動作をさせるためにの仕様で、はじめにHTMLタグの指定サイズで画像を圧縮して書出して表示し、その後スタイルシートを適用しているのではないかと思われます。