OmniAICreator/Qiita-1.07M huggingface dataset:
iosでベクター画像(VectorPDF)表示

結論から言うと、すでにios(現在11)はベクター画像を独自実装の必要なく表示できる。
@2xなども必要ないし、UIImageViewで拡大してもぼやけずに表示できるので、素材の大きさ(WidthxHeight)も気にする必要はなくなった。(ただし、スライスして使用する場合は気にしなければいけないが)


> Xcode6からは、Assets Catalogにベクター画像が使用できるようになり、
ベクター画像を使うと、1つのファイルを用意するだけで、
全てのデバイスに対応できます。
かなり手間が省ける用になりました！
小さいものを大きく表示すると、ぼやけます。
今までと一緒で、拡大には弱いようです。
https://qiita.com/Yuta/items/ad02e5e93694c8add089


しかし、ios9からはAssetsCatalogのオプションに「preserve vector data」が増え、これを有効化することで、拡大縮小してもぼやけないで描画することが可能になった
> http://martiancraft.com/blog/2017/06/xcode9-assets/


でもバグっている。UIImageViewに画像をセットする場合、Autolayoutの制約で、最低３つ以上、SuperViewからのmargin指定が必要になる。
TopSpace+LeadingSpace+Width+Heightだとダメ。
TOpSpace+LeadingSpace+TraillingSpace+HeightだとOK。
> https://stackoverflow.com/questions/45622894/xcode-9-asset-catalog-preserves-vector-data-not-working
ログインシェルをbashからzshに変える時のコマンド(備忘録)

#変更の仕方

zshが入っているか確かめる
```
hoge$ zsh
```
もし入ってなかったら
```
hoge$ sudo apt install -y zsh 
```
zshの位置を確かめる。
```
hoge$ which zsh
```
ログインシェルをzshに指定
```
hoge$ chsh -s whichコマンドで出てきたパス
```
再起動を行ったあとに、「$」が「%」になっていたらzshになっている。
```
hoge%
```
AWS cognito使ってnode.jsで認証だけしてみる

2017/10/20のAWS-SDKのバージョンで動くもの。とりあえずテスト用に最短で。
テスト時にいちいちSignUpフォームやConfirmフォーム作るとかダルいので、とりあえずConfirmを認証時に一緒に行うようにしてみました。

１．npmでSDKをインストール
===
```bash
npm install aws-sdk --save
npm install amazon-cognito-identity-js --save
```

２．AWS cognitoでユーザー作成
===
AWS Cognitoのメニューから適当なユーザープールとアプリクライアント作成します。

ユーザープール　※チェックを全部外しておくと楽
---
![image.png](https://qiita-image-store.s3.amazonaws.com/0/140718/b8cbb425-3313-200d-8ac8-dada613f77b2.png)

アプリクライアント　※クライアントシークレットはいらない
---
![image.png](https://qiita-image-store.s3.amazonaws.com/0/140718/53a08fd6-4f26-7a84-e1d0-360b83e0e37e.png)

ただしちょっと問題というか、ステータスのところがFORCE_CHANGE_PASSWORDとなっていて、ユーザー登録が完了していない状態です(Confirmが必要)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/140718/7a171eb0-aff4-1d51-60df-50096098ba72.png)

これはメールを送ってもConfirm画面に遷移できるわけでもなく、自分でConfirm画面を用意せねばなりません。テストしたいだけなので、ここを飛ばす(仮パスワードでそのままConfirmを行う)ようにプログラムします。

３．パスワードComplete付き認証プログラム
===
```js:auth.js
var aws_cognito = require('amazon-cognito-identity-js');

// ユーザープール設定
var user_pool = new aws_cognito.CognitoUserPool({
	UserPoolId : 'AWS Cognitoで作ったユーザープールのプールID',
	ClientId : 'AWS Cognitoで作ったアプリクライアントID'
});

// ユーザー決定
const cognito_user = new aws_cognito.CognitoUser({
	Username: 'ユーザー名',
	Pool: user_pool,
});

// パスワードの設定
const authentication_details = new aws_cognito.AuthenticationDetails({
	Password: 'パスワード',
});

// ユーザープール／ユーザー／パスワードを使って認証
cognito_user.authenticateUser(authentication_details, {
	// 成功時
	onSuccess(result){
		// 認証完了トークンを取得。以降はこのトークンで認証済み確認
		console.log(result.getAccessToken().getJwtToken());
	},
	onFailure(err){
		console.error(err);
	},

	// ####################################################################################
	// 初回認証時はパスワードの変更が要求されるので、仮パスワードと同じパスワードを再設定する
	newPasswordRequired(user_attributes, required_attributes){
		cognito_user.completeNewPasswordChallenge(authentication_details.password, user_attributes, this);
	},
	// ####################################################################################
});
```

設定する時はUsername/Passwordですが、拾う時はusername/passwordと小文字になるところがちょとイヤラシイですね(´・ω・｀)


おまけ
===
アクセストークン検証
---
・ライブラリを入れる

```bash
npm install jsonwebtoken --save
```

・ライブラリを読み込む

```js
var jwt = require('jsonwebtoken');
```

・トークンを分解

```js
var decoded = jwt.decode(access_token, {complete: true});
console.log(decoded);
```
検証方法は[AWSのマニュアル](http://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/amazon-cognito-user-pools-using-tokens-with-identity-providers.html#amazon-cognito-identity-user-pools-using-id-and-access-tokens-in-web-api)辺りを参考に

トークン更新
---
・RefreshToken保存(有効期限３０日)

```js
// RefreshToken文字列を取得
refresh_token_str = result.getRefreshToken().getToken();
```

・Token更新

```js
// RefreshToken文字列からRefreshTokenオブジェクトへ
refresh_token = new aws_cognito.CognitoRefreshToken({RefreshToken: "保存しておいたRefreshToken文字列"});

// 更新
cognito_user.refreshSession(refresh_token, (err, result)=>{
	// 新しいAccessTokenが取得できる
	var access_token = result.getAccessToken().getJwtToken();

	// RefreshTokenの更新とかも
	...
});
```
UITestで要素が見つからないときは、親要素のAccessibilityをチェック

UITest xcode how to find element.

app.buttonsやapp.staticTextsで要素が見つけられないときの話。
私の場合、StackViewの中のUIButtonを見つけることができなかった。
解決したのでメモ。

- A. 見つけたい要素のAccessibilityがEnableになっている必要がある
- B. 見つけたい要素の親要素(すべての祖先含み)のAccessibilityはEnableになっていてはだめ

Bが問題で、例えばStackViewはAccessibilityの項目がないが、AccessibilityはEnableになっているみたいだ。なので下記のように無効化する必要がある。

<img width="264" alt="スクリーンショット 2017-10-20 02.04.51.png" src="https://qiita-image-store.s3.amazonaws.com/0/7772/92a03340-16ba-96f4-4454-8b1bdad522af.png">

このUserDefined Runtime Attributesのところにて、以下のように設定する。

Key Path | Type | Value |
-------- | ---- | ----- |
isAccessibilityElement | Boolean | false


### 参考
https://stackoverflow.com/questions/32801267/ui-testing-xcode-7-cant-access-element-within-subview
API Blueprint(aglio)で、生成されたSchemaのarrayにitemsがない

# tl;dr

`array`にしたプロパティに`fixed-type`オプションをつける。

```diff
- + books: (array[Book])
+ + books: (array[Book], fixed-type) 
```

公式にしっかり書いてありますね。無駄にGithubとか調べてしまった。。

# 何が起きたの？
API BlueprintでAPIドキュメントを作成していたときに、どうにも`array`の中身がドキュメント化されない事が気持ち悪くなったので調べてみた。

例えば。次のドキュメントだとこのように変換される。

```:input.apib
+ Response 200 (application/json)
    + Attributes
        + books (array[object])
            + (object)
                + name: ほんのなまえ (string, required) - 書籍名
                + cost: 50 (number, required) - 価格
```

```json:Body
{
  "books": [
    {
      "name": "ほんのなまえ",
      "cost": 50
    }
  ]
}
```
```json:Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "books": {
      "type": "array"
    }
  }
}
```

Bodyはまぁ良いが、Schemaはあまり意味をなさなくなってしまう（折角`input.apib`で定義した意味が・・・）ので、ここにitemsプロパティをどうにか入れられないかという話。

答えは前にも書いたとおり、`array`にしたプロパティに`fixed-type`をつける。

```diff:input.apib
 + Response 200 (application/json)
     + Attributes
-        + books (array[object])
+        + books (array[object], fixed-type)
             + (object)
                 + name: ほんのなまえ (string, required) - 書籍名
                 + cost: 50 (number, required) - 価格
```
```json:Body
{
  "books": [
    {
      "name": "ほんのなまえ",
      "cost": 50
    }
  ]
}
```
```json:Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "books": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "書籍名"
          },
          "cost": {
            "type": "number",
            "description": "価格"
          }
        },
        "required": [
          "name",
          "cost"
        ]
      }
    }
  }
}
```

ちゃんと出力されるようになりました。

# 参考URL
[4.3 Nested Member Type - MSON Specification | API Blueprint](https://apiblueprint.org/documentation/mson/specification.html#43-nested-member-types)
[Arrays in JSONSchema do not contain \`items\` field · Issue #243 · danielgtaylor/aglio - Github](https://github.com/danielgtaylor/aglio/issues/243)

Githubのissuesを見てから、公式資料に載っているのを見つけました。
それにしても、なんでデフォルトではないんでしょうか。皆さんそんなに気にならないのかな。。
UE4のMac版でGit LFSが使えない

MacOSにおいてbrewとかでインストールした場合、Git LFSは``/usr/local/bin/git-lfs``にインストールされるが、UE4は``/usr/bin/git-lfs``しか読まないようなので、ここにシンボリックリンクを貼ると使えるようになる。以下のコマンドを実行する。

``sudo ln -s /usr/local/bin/git-lfs /usr/bin``

また、gitも``/usr/bin``にないとおかしくなるようなので以下も実行する。

``sudo ln -s /usr/local/bin/git /usr/bin``

以上
大学生の僕がゼロからWebエンジニアになった話 - 2年生 -

[大学生の僕がゼロからWebエンジニアになった話 - 1年生 -](https://qiita.com/uenoryo/items/c80925269e0e0dca0fd1)の続きになります。

高校時代まで陸上選手だった僕が
大学時代に勉強してエンジニアになるまでの話です。(ほとんど思い出話です)

## 大学2年生

僕は大学１年生でプログラミングに出会い、 **Visual Basic** に触れ、
**HTML/CSS** そして **JavaScript** を学び、遊んでいました。

さらに、春休みにはWebを離れ、本屋で見つけた **Java** で動くゲーム作りの
書籍を購入し、サンプルコードを打ち込みながらゲームを作っていました。

そこで、初めて**オブジェクト指向**というものに出会います。

授業で少し聞いたことがあるような言葉で、その本の内容では
何を言っているのかさっぱりわかりません。

YouTubeで解説動画を見たり、入門サイトで調べたりしましたが、
理解できた！という感覚は程遠いものでした。

しかし、色々なサイトや、Javaで作ったゲームのソースコードと睨めっこしているうちに、
処理の流れや、どこで何をしているのかをある程度把握できました。

そして、（そのゲームはシューティングゲームだったのですが、）
自分でサンプルコードにあった敵キャラのクラスのファイルをコピーし、
適当に値を書き換え、敵キャラを召喚している部分で作ったものを差し替えてみました。

**「おぉぉぉ敵がめっちゃ変に動くようになったww」**

一人で部屋でにやにやしていた記憶があります。
それから、自分でクラスを追加しては差し替えたり、もっと大胆に改造してみたり、
「さては、これがオブジェクト指向なんだな？？」と勝手に思って夢中で遊んでいました。笑

***

2年生が始まり、次なる疑問が浮かびました。
YouTubeみたいなサイトってどーやって作るんだろう？？

1年生のころに **HTML/CSS/JavaScript** には触れたものの、
「動画の分だけHTMLファイル作ってるのかな？？」
「ログインしたり、検索したりするにはどうやってんのかな？？」
と、わからないことだらけでした。

そういった疑問を持ったまま、手探りで情報を集めていくと、
まもなく **PHP** そして、**データベース、MySQL**に出会いました。

本屋にものすごく簡単そうな
「PHPでショッピングサイトを作ってみよう！」 みたいな本があったので、
購入し、作ってみました。

そして、その一冊でかなりイメージが膨らみました。

**「これ使ったら何でもできるじゃん！！w」**

PHPとMySQLでデータベースを操作し、1年生で習ったHTMLに
データを埋め込む。
HTMLで準備したフォームからデータを入力してデータベースに突っ込む。

これしかできませんでしたが、僕はかなり調子に乗っていたと思います。
その後自力で、「動画のランキングサービス」を構築しました。
（もちろんフレームワークも使わないPHPのフルスクラッチ）

見返せば地獄のようなコードですが、かなり経験は濃いものでした。
いいね！のように画面を切り替えずにDBを更新するために、
ajaxを使ってみたり、初めてのことが盛りだくさんだったからです。

動画をアップロード機能実装時、ファイルサイズ制限のエラーに悩み、
黒い画面から恐る恐る`php.ini`を触りに行った思い出もあります。

でも、その経験は当時の僕に大きな自信を与えました。

頑張って調べれば解決できないことはないと思っていましたし、
うまくいかない時が何時間も続いても、夢中になって調べていたので
作るのが好きだったんだと思います。

***

とにかく当時の僕は、一人でプログラミングをしていました。
もちろん他の人と一緒に大学の授業を受けることはありましたが、
学校の課題に対して、自分だけ変なものを作って提出したり、
自分で本を見て作ってみたり、ほとんど趣味みたいな感じでした。

2年生も終わりが近づき、自分でサービスを作る感覚を経験して
自信を持った僕は、次の疑問を持ちます。

「プロの人たちは、現場でどんな風に開発をしているんだろう？？」

そして僕は春休みからある会社を訪ね、面接を受けました。
僕は初めて開発の現場を経験することになります。

***

次回、3年生にて
僕は自分の無能さを知ります。。
Dockerで立ち上げたMySQLにログインすると日本語が文字化け

# TL;DR

DockerでRailsとDBのコンテナを作成しWebアプリケーションを作成してたところ
ブラウザ上では日本語が文字化けしないがdbコンテナの中に入ってmysqlにログインすると `????` に文字化けしている現象に遭遇した。

# 対象読者 or 前提条件 or 環境

- DockerでMySQLコンテナを使用するマルチバイトなひと

## まずは調査

「Docker mysql 文字化け」でぐぐってみるとどうやら `character_set_server=utf8` でないと発生するという記事が大量にヒットする。
[Docker公式イメージのMySQLで文字コードを指定する](https://qiita.com/neko-neko/items/de8ea13bbad32140de87)のエントリを参考に過去にdocker-compose.ymlには対応を実装していたのでどうやらこれが問題ではなかった。

そもそもなにが原因で文字化けしてるのかがわからなかったので調べてみた。

```bash
$ mysql 
mysql> status;
--------------
mysql  Ver 14.14 Distrib 5.7.19, for Linux (x86_64) using  EditLine wrapper
Server characterset:	utf8
Db     characterset:	utf8
Client characterset:	latin1
Conn.  characterset:	latin1
```

となっていた。
この逆パターン(Server&DBがlatin1、Client&Connがutf8)はあったがこの状態を解決する記事は結局見つけられなかった。
ただ原因はclientとconnが問題で、だからこそターミナルでmysqlにログインしたときだけ日本語が文字化けしていたのだということがわかった。

## 問題解決

さて問題はどうやってこのlatin1をutf8に変更するか？だがいろいろ調べた結果どうやらコマンドでは変更することができないらしいという結論に達した。
ではどうするか？となったときに対処方法は最早1つしか思いつかなかった、つまり`my.cnf`を`/etc/mysql/conf.d/`以下にマウントするのだ。

実は`/etc/mysql/my.cnf`があってこの`my.cnf`内では`/etc/mysql/conf.d/*`以下のcnfファイルを参照する記述がある。
よって以下の内容になるように`my.cnf`をマウントすることで設定を上書きしてもらうという寸法である。

```my.cnf
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci

[client]
default-character-set=utf8
```

そしてこの状態を`docker-compose.yml`に以下のように指定したところ上手くマウントされMySQLにログインしても文字化けしなくなった。

```docker-compose.yml
version: '2'
services:
  db:
    image: mysql:5.7
    command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci
    volumes:
      - ./data:/var/lib/mysql
      - ./my.cnf:/etc/mysql/conf.d/my.cnf
    environment:
      MYSQL_DATABASE: [データベース名]
      MYSQL_USER: [DBユーザ]
      MYSQL_PASSWORD: [DBパスワード]
      MYSQL_ROOT_PASSWORD: [ルートパスワード]
  web:
    build: .
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/www/[サービス名]
    ports:
      - '3000:3000'
    depends_on:
      - db
  redis:
    image: redis:latest
    ports:
      - "6379:6379"
    command: redis-server --appendonly yes
```

本来はDockerfileに切り出してそちらで`COPY`か`ADD`するのが多分いちばんスマートというか問題がない。
スマホアプリのバージョン番号の扱いについて


## メジャーバージョンアップ
* 1.0.0 -> 2.0.0
* 見た目や操作性に影響を及ぼすような大きな変更の時

## マイナーバージョンアップ
* 1.0.0 -> 1.1.0
* 細かな機能向上などの時

## リビジョンアップ
* 1.0.0 -> 1.0.1
* 細かなバグ修正の時

## IOSとAndroidを別々でリリースした時にバージョン番号が異なるけどAPIのバージョンはどうするか？

* api開発に失敗しないための情報収集まとめ - Qiita https://qiita.com/taiyop/items/78d3a0614be9be77ce41

* IOSとAndroidで共通のバージョンを内部で持っておき、固定値でAPIのバージョンを渡すようにする
* それによりアプリをアップデートしていない人でも、各バージョンのAPIレスポンスが返される
* 3のパラメータ形式が一般的なのかな？

## 疑問
* APIの変更履歴ってAPIバージョン毎に後で追えるようにみんなドキュメント化してるのかな？
App StoreにApple IDでサインインする時の確認コードの入力方法

OSをアップグレードしたかったので、App Storeから入手しようとしてApple IDの二段階認証を求められる。

1. Apple IDのパスワードを入力
2. 他デバイスに確認コードが送信される
3. 「パスワードにつづいて」確認コードを入力　← ここすごくわかりづらい気がする:poop:

つまりこういうこと。
パスワードが「PASS1234word」
確認コードが「123456」
の時、

```
PASS1234word123456
```

と入力する。

確認コードを入力するフォームが出るものと思い込んでずいぶん悩みました。
入力したパスワードをそのままに、お尻にくっつけて確認コードを入力するという意味でした。
Ubuntu 17.10(Wayland)でJetBrains Toolbox Appが動かない場合の対処法

> Caught in a crash loop: comp-bpf failure in syscall 0281
> https://youtrack.jetbrains.com/issue/ALL-2017#comment=27-2457334

# 原因
Chromiumのsandboxを使っているのが原因のようだ。

# 対策
環境変数の `QTWEBENGINE_DISABLE_SANDBOX` を `true` にするといいらしい。

```bash
echo 'export QTWEBENGINE_DISABLE_SANDBOX=true' > ~/.toolboxrc
```

として、 `jetbrains-toolbox` を動かせばうまくいった(๑˃̵ᴗ˂̵)
tableのtd要素クリック時の処理を書く時につまづいたこと

Tableのtd要素をクリックした際の処理を書く時に詰まったことを共有します。
下記にNGパターンとOKパターンを記載します。

■HTMLは下記のような普通のTable

```HTML:index.html
      <table id="tehuda1">
        <thead>
          <tr>
            <th colspan="5">Player1の手札</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td id="tehuda1-1"></td>
            <td id="tehuda1-2"></td>
            <td id="tehuda1-3"></td>
            <td id="tehuda1-4"></td>
            <td id="tehuda1-5"></td>
          </tr>
        </tbody>
      </table>
```

■Tableのtd要素をクリックした際の処理。
下記の場合、tdクリック時の処理は呼ばれず。。。

```Javascript:Logic.js(NGパターン)
//TODO(要調査):下記だとtableのtdクリック時の処理は呼ばれない。なぜ？？
$('#tehuda1 td').on('click', function(){
  console.log('hoge');
});
```

しかし、下記だとtdクリック時の処理は呼ばれた。

```Javascript:Logic.js(OKパターン)
//TODO(要調査):この書き方だとtableのtdクリック時の処理が呼ばれる。
$(document).on('click', '#tehuda1 td', function() {
  console.log('hoge');
});
```

なぜNGになったかは調査中。
※ご存知の方がいればコメントいただければ幸いです!
ちょっとずつ読むドメイン駆動設計 第ニ部 モデル駆動設計の構成要素 第七章 言語を使用する:応用例1

# 応用例が面白い！

構成要素をすべて紹介したうえで、第七章はその応用例の提示となります。
設計・実装の順番やリファクタリングをしたり、新機能を追加したりと結構ありそうなプロジェクトっぽい感じで面白いし参考になりました。

## ユビキタス言語の整理

貨物輸送システムの例でまずは、用語の整理。見てきたとおり、用語集を作るとかそんなではなく、ドメインの知識を体系化したモデルを書きながらの整理となっています。

気になったのは、[貨物]と[顧客]の関連。
[顧客]にはさまざまな役割がいます。「荷送人」「荷受人」「支払人」など。
なので、[貨物]と[顧客]の関連は「多対多」なのですが、[顧客]の役割を限定することで、多対1に絞っている。詳しくは[こちら](https://qiita.com/YasuhiroKimesawa/items/71eab6a497599eaa38fa)。

## ドメインを隔離する：アプリケーションの導入

ここで、アプリケーション層について、検討しておく。
アプリケーション層だけ、結構初期に検討するんだと思いました。

考えなしに設計すると、単純に集約の名前をそのままサービス名として使用するような感じになってしまうが、ここでアプリケーションのことを独立して考えることで、もっと業務の言葉をつかったサービス名が思い浮かびそう。

> 深く分析しなくても、ユーザーレベルのアプリケーション機能を識別して・・・(第二部第七章より)

まずは、軽くでもアプリケーションの機能を考える。

例では、追跡問い合わせ、予約アプリケーション、イベント記録アプリケーションが出てきている。

## エンティティと値オブジェクトを区別する

ここは、もう見てきたとおりです。追跡したい同一性があるかどうかや、値かどうかを区別していきます。

明日も続きを読んでいきます。
エンジニアがSketchでデザイン模写を行う時の手順1


### テンプレート用のアートボードを作る
* 作業用のスペース
* ショートカットはa
* サイズを指定しておく

### Webギャラリーから模写したいサイトを探す
* https://io3000.com/
* http://muuuuu.org/
* http://bm.straightline.jp/
* http://bm.wonderboxstudio.com/

### キャプチャ画像を貼る
* Bitmapというのが画像
* 画像とアートボードのサイズを揃える

* キャプチャに便利な拡張
	* ウェブページ全体をスクリーンショット - FireShot - Chrome ウェブストア https://chrome.google.com/webstore/detail/take-webpage-screenshots/mcbpblocgmgfnpjjppndjkmgjaogfceg?hl=ja

	* Window Resizer - Chrome ウェブストア https://chrome.google.com/webstore/detail/window-resizer/kkelicaakdanhinjdeammmilcgefonfh?hl=ja

### ガイドを引く
* ctrl + Rでガイドモードになる
* 縦横でガイドを引ける
* ガイドを端っこまで持っていくと消せる
Sequel ProでローカルのMySQLに接続しようとすると'NSPlaceholderString initWithString'というエラーが出る

MacからSequel Proでローカルのmysqlサーバにログインしようとすると
エラーが出て、Detailをクリックすると、以下のように表示される。

```bash
NSInvalidArgumentException

*** -[NSPlaceholderString initWithString:]: nil argument

(
    0   CoreFoundation                      0x00007fff8e42503c __exceptionPreprocess + 172
    1   libobjc.A.dylib                     0x00007fff99e4076e objc_exception_throw + 43
    2   CoreFoundation                      0x00007fff8e424eed +[NSException raise:format:] + 205
    3   Foundation                          0x00007fff908182dc -[NSPlaceholderString initWithString:] + 102
    4   Sequel Pro                          0x000000010002e6a9 -[SPDatabaseDocument setConnection:] + 384
    5   Foundation                          0x00007fff9086bd00 __NSThreadPerformPerform + 293
    6   CoreFoundation                      0x00007fff8e341a01 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
    7   CoreFoundation                      0x00007fff8e333b8d __CFRunLoopDoSources0 + 269
    8   CoreFoundation                      0x00007fff8e3331bf __CFRunLoopRun + 927
    9   CoreFoundation                      0x00007fff8e332bd8 CFRunLoopRunSpecific + 296
    10  HIToolbox                           0x00007fff91e8356f RunCurrentEventLoopInMode + 235
    11  HIToolbox                           0x00007fff91e832ea ReceiveNextEventCommon + 431
    12  HIToolbox                           0x00007fff91e8312b _BlockUntilNextEventMatchingListInModeWithFilter + 71
    13  AppKit                              0x00007fff927469bb _DPSNextEvent + 978
    14  AppKit                              0x00007fff92745f68 -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 346
    15  AppKit                              0x00007fff9273bbf3 -[NSApplication run] + 594
    16  AppKit                              0x00007fff926b8354 NSApplicationMain + 1832
    17  Sequel Pro                          0x0000000100001994 start + 52
    18  ???                                 0x0000000000000002 0x0 + 2
)
```

[Sequel Proのバグ](https://github.com/sequelpro/sequelpro/issues/2302)でした。
mysqlをアップグレードすると直ります。

```bash:mysqlをアップグレード
$ mysql_upgrade -u root -p
$ sudo mysql.server restart
```
Pythonの関数の引数にデフォルト値を含む時の引数の順序

Pythonで関数を定義する時に、default値を与えることがしばしばあると思います。

以下のように仮に引数a,bを引き取ってその和を返す関数を考えることにします。

```python:Python
def hoge(a,b):
    return a + b
```

この時引数aのdefault値をa=1としたいと考えて以下のように関数を定義します。

```python:Python
def hoge(a=1,b):
    return a + b
```
すると

```python:Error
SyntaxError: non-default argument follows default argument
```
とデフォルト値を取らない引数がデフォルト値を取る引数の後になってるよとお叱りを受けます。
そこで以下のように引数の順序をお叱りの通り直すとちゃんと定義できます。

```python:Python
def hoge(b,a=1):
    return a + b
```

ただそれだけの話です。
（おそらく処理系の話的なものだと思うけれど、実際のところどうなのだろう？）
Azure Machine LearningのExecute Python Script モジュールは pyodbc.connectをサポートしていない？

Azure MLの実行速度が遅いので、試しに Pythonスクリプトの実行内で SQL Database から読み込みをやろうとしたところ
エラーで止まる。

```:python
    DB_SERVER = 'your server'
    DB_NAME = 'your database name'
    DB_USERNAME = 'username'
    DB_PASSWORD = 'password'
    #DB_DRIVER= '{ODBC Driver 13 for SQL Server}'
    DB_DRIVER= '{SQL Server}'
    #DB_DRIVER= '{SQL Server Native Client 11.0}'
    CONNECTION_STRINGS = 'DRIVER='+DB_DRIVER+';PORT=1433;SERVER='+DB_SERVER+';PORT=1443;DATABASE='+DB_NAME+';UID='+DB_USERNAME+';PWD='+DB_PASSWORD
```

エラーはこのような感じ。

```:ERROR
pyodbc.Error: ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0) (SQLDriverConnect)')
```

恒例のstackoverflowで調査していたところ気にある記述が。
https://stackoverflow.com/questions/35682879/what-is-the-name-of-the-driver-to-connect-to-azure-sql-database-from-pyodbc-in-a

```
So currently it it impossible to connect to SQL server from “execute python script” module in Azure-ML. 
If you like to change it, please vote here'
```

Python ScriptからODBC接続できるようにするために、こちらから投票をお願いします！
Enable odbc connection from "Excute python script" module
https://feedback.azure.com/forums/257792-machine-learning/suggestions/12589266-enable-odbc-connection-from-excute-python-script
goで関数内に定義した構造体をインタフェースで戻してフィールドを表示してみたメモ

関数内に構造体を定義してインタフェースで戻してフィールドと値を出力した時のメモです。

```go
package main

import (
	"fmt"
	"reflect"
)

// 自己紹介関数
func selfIntroduction() (i interface{}) {
	// 個人情報構造体
	type personalInfomation struct {
		Name   string
		LiveIn string
		Job    string
	}
	r := new(personalInfomation)
	r.Name = "sky_jokerxx"
	r.LiveIn = "Tokyo"
	r.Job = "office worker"
	return r
}

func main() {
	r := selfIntroduction()
	v := reflect.Indirect(reflect.ValueOf(r))
	t := v.Type()
	for i := 0; i < t.NumField(); i++ {
		fmt.Println(t.Field(i).Name + ": " + v.Field(i).String())
	}
}
```

# 参考

https://qiita.com/hironobu_s/items/6af7dd739b7aa9453dd5
windowsでcakephpのバッチを非同期実行する方法

# 前提
- app/Console/command/MyTestShell.php作成済み
- MyTestShell.phpのmainメソッドに処理を実装

# 経緯
- cakephpで非同期処理を実行する必要があった
- サーバはLinuxだが、ローカルがwindowsだった

# コントローラの実装

```php:TestsController.php
// 初期作業ディレクトリ
$cwd = ROOT . '/app';

$d = [0 => 'pipe', 'r'];

// コマンド
$cmd = ROOT . '/Console/cake my_test main';                                                                                                                                                                                                                                                                                

$p = proc_open($cmd, $d, $pipes, $cwd);

if (is_resource($p)) {
   fwrite($pips[0], $str);
   fclose($pips[0]);
   proc_close($p);
}
```

# 最後に
設定の問題かもしれませんが、
popenで組んだところ、ディレクトリがappではなくエラーになりました。
そのため、proc_openで実装したところ、処理が実行されました。

他にもこんなやり方があるよ、
そのやり方はよくないよ
などあれば、ぜひ教えて頂けると助かります。
let's split keyboardにキーマップを書き込む(mac)

自分の手に合うカッコいいキーボードがほしくなったことありませんか。
自作キーボードが流行っていたので早速作ってみました。
組み立ては他の方のブログやQiitaで何とかなったのですが、キーボードにカスタマイズしたキーマップを書き込むところで躓いたので参考にしてもらえればと思います。

今回組み立てたのはlet's split keyboard(通称レツプリ）と呼ばれている左右分離格子配列型のキーボードです。
ちなみにこの記事は組み立てたレツプリで書いています（慣れていなくてミスタイプばっかり。。。)

![DMK0wTrVQAIGkb_ (1).jpg](https://qiita-image-store.s3.amazonaws.com/0/189994/fcebd760-3518-f544-26c6-274101e81188.jpeg)



# レツプリにカスタマイズしたキーマップを書き込んでみる
レツプリの特徴のひとつでキーマップをカスタマイズできます。
Enterキーを親指あたりにもってきたりとか色々できちゃいます。
まずはデフォルトで用意されているキーマップをレツプリに書き込んでみます。

書き込むファームウェアやキーマップファイルが揃っているプロジェクトをクローンします

```
git clone git@github.com:qmk/qmk_firmware.git
cd qmk_firmware
```

次にファームウェアを書き込むためにAVR環境を用意します。Homebrewが入っているmacで

```
brew tap osx-cross/avr
brew install avr-gcc
brew install avrdude
```
このときruby2.3で実行してくれと警告が表示されたらrbenvを使ってruby2.3を用意してください。
次にキーマップ用のファイルを用意します。まずはデフォルトで用意してくれているものをコピーして書き込むところまでやってみます。

```
cp -r keyboards/lets_split/keymaps/default/ keyboards/lets_split/keymaps/sample
make lets_split-rev2-sample-avrdude
```
コンパイルログが流れ終わると

```
Detecting Pro Micro port, reset your Pro Micro now......
```

と表示されるのでリセットスイッチを押してください。
無事に押せると書き込みが始まります。ちなみにこの時左右のキーボードを繋いでおいて大丈夫です。
一度の書き込みで左右のキーマップが書き込まれます。
無事に全てのキーが反応すれば成功です。ダメだった場合はツイッターの自作キーボード界隈の人に相談するのがいいかもしれません。

keyboards/lets_split/keymaps/sample/keymap.cをカスタマイズして再度同じコマンドを実行すればキーが変更されます。
キーマップファイルを見てもらえればどんな感じに変更したらいいか分かると思うので説明は割愛します。（私もよく分かっていない）
java8のお勉強(Streamを使ったファイル読み込みとか)

ソースだけ自分メモで貼っとく。

```
import java.io.BufferedWriter;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.FileSystem;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardOpenOption;
import java.util.stream.Stream;

/**
 * Streamを使ったファイル読み込みのお勉強
 * @author komikcomik
 *
 */
public class FilesLinesTest {

	public static void main(String[] args) {

		FileSystem fs = FileSystems.getDefault();
		Path inputPath = fs.getPath("resouces/test.txt");

		/* ファイルの読み込み */
		try (Stream<String> stream = Files.lines(inputPath, StandardCharsets.UTF_8)) {
			stream.forEach(System.out::println);
		} catch (IOException e) {
			// TODO 自動生成された catch ブロック
			e.printStackTrace();
		}

		/* ファイルの書き込み */
		Path outputPath = fs.getPath("resouces/output.txt");
		try (BufferedWriter bw = Files.newBufferedWriter(outputPath, StandardCharsets.UTF_8, StandardOpenOption.CREATE)) {
			bw.write("あああああ\n");
			bw.write("いいいいい\n");
			bw.write("ううううう\n");
		} catch (IOException e) {
			// TODO 自動生成された catch ブロック
			e.printStackTrace();
		}
	}
}
```
女子大生、kaggleでmedicalデータを分析をする

#kaggleでmedicalデータを使って分析しましょう！

今回kaggleで使ったデータはこちらです。
https://www.kaggle.com/osmi/mental-health-in-tech-survey/data

#働き方にも関係するデータ

Kernels を見ると様々な面白い解析がなされていますね

個人的にこのデータ結果は面白かったです。
https://www.kaggle.com/ekim01/predictors-of-mental-health-illness


![image.png](https://qiita-image-store.s3.amazonaws.com/0/183256/3ba59f04-fe4b-53a3-1b64-9bcce059e749.png)

企業規模とtech企業であるかどうかが精神的な健康にどう影響しているかのグラフのようです。
一つのデータをとっても様々なアプローチがあるみたいですね、ぜひ医療関係の方も機械学習を使って気になるデータを分析してみたらいかがでしょうか！

#仮想通貨を持っている方必見
ちなみに関係ないですが仮想通貨投資をされている方は下記サイトはかなりいいのではないでしょうか。18歳の方に教えてもらう大学生…
＞cryptwat.ch
Vanilla JavaScriptでのイベント発火、ほか

JavaScriptで書いていた複雑な部分をフレームワークで運用する形としていくと、jQueryの必要性がどんどん減ってきます。そこで、既存のjQueryコードも[Vanilla JS](http://vanilla-js.com/)で書き直すこととしていったのですが、イベント処理まわりではjQueryに慣れた観点からすれば、意外なことが多かったです。

なお、「イベントを`addEventListener`でセットする」というのは、当たり前すぎるので省略します。

# 「イベントハンドラ」と「デフォルト処理」の区別

jQueryの場合、`.focus()`とすれば「フォーカスを当てる処理」と「イベントハンドラ」の両方が動きます。それに対して、JavaScriptでは、この2つの操作は**別個に行う必要があります**（ただし、`.click()`だけは例外で、実際にクリックしたときと同様に「イベントハンドラ」→「クリックしたことによる動作」と進んでいきます）。

まずはシンプルなデフォルト処理の方を考えますが、実を言えば「デフォルトで何かが起きる」イベントはそんなに多くありません。jQueryにあるようなもので言えば、`click`、`focus`、`blur`、`submit`程度です。

# イベントハンドラを動かす方法

コードからイベントハンドラを動かしたい場合、jQueryでは`.trigger`だけで済みますが、本来のJavaScriptでは「イベントの作成」と「イベントの送信」という2つのプロセスを経なければいけません。

## イベントの作成

最初に注意事項ですが、マウスやキーボードのイベントでは、専用のイベントオブジェクトが本来は存在して、マウスの座標や押されたキーなどを送信しています。`keydown`などの名前で汎用のイベントを作成した場合にもイベントハンドラが動くことは動きますが、それらの追加データはもちろん存在しませんので、データが必要なハンドラの場合はエラーとなります。`target`などはすべてのイベントオブジェクトに共通しますので、汎用のものでも問題なく動作します。

まずは、IE 9でも使えるやり方から紹介します。こちらでは`create`してから`init`する必要があります。

```js
// 汎用のイベントを作成
var ev = document.createEvent('HTMLEvents');

// 初期化
// bubbles: バブリングするかどうか
// cancelable：イベントのデフォルトをキャンセルできるかどうか
ev.initEvent('イベント名', bubbles, cancelable);
```

最近のブラウザ（IEは11でもアウト）では、`Event`がコンストラクタとなっていて、そのまま`new Event`一発で済むようになっています。ただし、`new Event('イベント名')`とだけしてしまうと、「`bubbles = false`（**バブリングしない**）、`cancelable = false`（`preventDefault`不可）」のイベントとなります。バブリングや`preventDefault`を使いたい場合は、第2引数に指定して`new Event('イベント名', {bubbles: true, cancelable: true})`のような指定が必要となります。

# イベントの配信

イベントオブジェクトができたら、あとは配信です。`element.dispatchEvent(ev)`のようにすることで、イベントが動き始めます。

もちろん手動で起こしたイベントにデフォルト操作は存在しませんが、`dispatchEvent`の返り値は「イベント中で`preventDefault`されれば`false`、されなければ`true`」なので、自作のイベントでも後続処理をどうするかの制御に`preventDefault`を使うことができます。
論理削除と物理削除とは

#論理削除とは
実際にはデータを削除せずに、削除されたと見なすフラッグと呼ばれるカラムを設定することでユーザーには削除しているかのように振る舞うことができることをさします。

例えばtweetsテーブルというものがあった時に、
そのテーブルにdeleted_flagというboolean型のカラムを追加しておきます。
この状態のときdeleted_flagカラムのデフォルト値はnullです。
こうすることによって、ユーザーにtweetの削除ボタンが押された時にdeleted_flagに1という値がセットすることで、その削除されたツイートとして扱うことができるのです。

#物理削除
実際にSQLでDeleteされることをさし、データベースからも削除されます。そのため復元したり削除されたデータを参照することはできません。

#論理削除のメリット
先ほどの例でも伝えたとうり、削除したかのように振る舞うだけなのですぐにデータの復元を実現が可能となります。また物理削除に比べても処理速度が早いことがメリットです。

#論理削除のデメリット
・データベースにNUllというデータを作りたくない。(これはどうにかしたら解決可能だとは思いますが)
・where句での絞り込み検索を行うときにフラッグの条件を追加する必要がある。
[ノート]『PHP Cookbook 』を読む(CH01.文字列)

文字列


1.文字列の一部の位置を探す

```php
strpos($str,$sub) 
```
結果があるとき、返却値がindex,結果がなければ、返却値がfalse

2.文字列の一部を抽出

```php
substr($str,$start,$length)
```
\$lengthがないとき、末尾までのサブ文字列が返却される。
\$lengthが超えるとき、末尾までのサブ文字列が返却される。
\$startが負数の場合、末尾から数えて第$start番目から抽出する。

3.文字列の一部を替える

```php
substr_replace($old_string,$new_string,$start)
substr_replace($old_string,$new_string,$start,$length)
```
4.サブ文字列は初めて出現するところを調べる

```php
strstr($haystack,$needle,$before_needle)
```

5.文字列を反転する

```php
strrev($string)
```
6.ランダンムに値を生成

```php
mt_rand($min,$max)
```

7.英文・英単語を大文字にする

冒頭の文字を大文字にする：

```php
ucfirst($str)
```
各単語の初めての文字を大文字にする：


```php
ucwords($str)
```

8.文字を大文字・小文字にする
全てを大文字にする：

```php
strtoupper($str)
```
全てを小文字にする: 

```php
strtolower($str)
```

9.空白を取り除く
冒頭と末尾の空白を取り除く：

```php
trim($str)
```
末尾の空白を取り除く：

```php
rtrim($str)
```
冒頭の空白を取り除く:

```php
ltrim($str)
```

10.csv ファイルを操作
配列からCSV line に：

```php
fputcsv($handle,$fields)
```

CSVを読み取る：

```php
fgetcsv()
```

11.文字列を配列に分解する　

```php
explode($delimiter,$string )
preg_split($pattern,$subject)
```

12.文字数を指定して改行する

```php
wordwrap($string,$num)
```
jQuery UI Datepicker に休日と休日名のツールチップを表示させる

#jQuery UI Datepicker に休日（赤色にする）と休日名のツールチップを表示させる

先に結論（こんな感じになります）
https://jsfiddle.net/4h2b29yk/1/

CSS

```css
.saturday a {
  color: blue !important;
}
.holiday a {
  color: red !important;
}
```

JavaScript

```js
// tooltip and holiday saturday class  
$(function() {
  $("#datepicker").datepicker({
    beforeShowDay: function(date) {
      var holidayName = Holiday.getHolidayName(date);
      if (holidayName){
        return [true, "holiday", holidayName];// 第2引数でクラス追加　第3引数でツールチップ
      }
      if(date.getDay() === 0) {// 日曜日にもholidayクラス
        return [true, "holiday"];
      }
      if(date.getDay() === 6) {// 土曜日にsaturdayクラス
        return [true, "saturday"];
      }
      return [true, ""];
    }
  });
});
```

休日判定には
https://qiita.com/horikeso/items/16da8bce3fbbee87aa45
を使用しました。

参考
http://api.jqueryui.com/datepicker/#option-beforeShowDay
raspberry pi zero 比較

|Raspberry Pi 1 Model B	(rev.2)|Pi Zero|Pi Zero W|
|---|---|---|
|[jpg](https://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:Front_of_Raspberry_Pi.jpg)|[jpg](https://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:RPi_Zero.jpeg)|[jpg](https://en.wikipedia.org/wiki/File:Raspberry-Pi-Zero-FL.jpg)|
|$35  |$5  |$10  |
|ARM1176JZF-S|←|←|
|シングルコア|←|←|
|700 MHz|1.0 GHz|←|
|ARMv6|←|←|
|512 MB|←|←|
|SDカード / MMC|microSDカード|←|
|LAN9512|-|-|
|-|-|Broadcom BCM43143|
|USB 2ポート|1(micro)USB |←|
|GPIO 26 ピン|GPIO 40 ピン|←|
|3.5 W|0.5-0.9 W|0.5-1.2 W|
|85.60 mm × 56.5 mm|65 mm × 30 mm|←|←|
|2011/12|2015/2|2017/2|
|unixbench 80|110|←|
cakephp3 bakeを使わないでMVCファイルを生成する


cakephp3

bakeは使わないでファイルを生成
大文字小文字、単数複数ついつい忘れがちなので書き留める

#Model

まずは下記ファイルを生成する。(テーブル作成済みであることが前提)

テーブルをTestsとして作成していたとしたら、、
(テーブル名は必ず複数系)

ファイル名はTestsTable.phpとする
※一文字目は必ず大文字
※複数形でテーブルを作成しているので当然だがファイル名も複数形


```app/src/Model/Table/テーブル名Table.php
<?php

namespace App\Model\Table;

use Cake\ORM\Table;

class UsersTable extends Table
{
    public function initialize(array $config)
    {
        $this->addBehavior('Timestamp');
    }
}
```

namespace名前空間は決まりきっている。
useでこのファイルで使うクラスの呼び出し
extendsで、呼び出してあるクラス(Table)を利用する

initializeで、
$this->addBehavior('Timestamp');をすることで、
データベースが更新されたときに、
自動でcreatedとmodifiedを更新してくれる


#View

テーブル名でディレクトリを作成するところからやる必要がある。
例 Tests
※ここでも大文字と複数形にすることを忘れずに

```app/src/Template/テーブル名/index.ctp
<h1>cakephp3サンプル</h1>

<section>
<p>サンプルです</p>
</section>
```

このファイルには```<body>```タグ内を書く

#Controller

```/app/src/Controller/TestsController.php
<?php

namespace App\Controller;

class TestsController extends AppController
{
  public function index()
  {
    $tests = $this->Tests->find('all');
    $this->set(compact('tests'));
  }
}
```

cakeのURLの決まりとして、
```/(controller)/(action)/(options)```
となっているので、
この場合、/tests/indexになる
次期バージョンのDockerに統合される「Kubernetes」って何だ？となったのでちょっとだけ調べてみた

## 背景
朝通勤途中にTwitterを眺めていたら、こんなニュースを見つけた。
Publickey
[次バージョンのDocker for Win/Macでは、ローカルにKubernetes環境も自動構築。DockerCon Europe 2017](http://www.publickey1.jp/blog/17/docker_for_winmackubenetesdockercon_europe_2017.html)

Dockerはよく使っている。docker-compose便利。
はて、Kubernetes？🤔 となった。

## 調べてみた

### まずは「Kubernetes」でググってみる

検索結果トップにはわかりやすそうなものがいくつかあった。
クーベルネイテス、と読むらしい。

日本語で分かりやすく解説している記事
https://ubiteku.oinker.me/2017/02/21/docker-and-kubernetes-intro/
ハンズオン的なQiita記事
https://qiita.com/mihirat/items/ebb0833d50c882398b0f
公式
https://kubernetes.io/
Github
https://github.com/kubernetes/kubernetes

公式には以下の記載があった
> Kubernetes is an open-source system for automating deployment, scaling, and management of containerized applications.

Kubernetesは、コンテナ化されたアプリケーションの導入、スケーリング、および管理を自動化するためのオープンソースシステムです。

### 今のところの理解
Dockerはサービスや機能をコンテナ単位で容易に仮想化、構築できる。
しかし、コンテナ(サービス)が増えるにつれ、それぞれの連携を管理、維持することが煩雑になり難しくなる。

この多数のコンテナで構成される一塊のサービスをあたかも一台の実行環境のように扱えるようにするのが**Kubernetes**である。

次期バージョンでDockerに統合されるのであればいずれ使うことになるかもしれないので近々ちょっと触ってみる予定。
【初心者のプログラミング】はじめまして

#概要

###初心者がプログラミングにどのくらいハマっていくのか

それを客観視するための記録である。

筆者は熟練者では決してないので、初心者の「ため」のプログラミングではないことに注意してほしい。

#自己紹介

8月4日にプログラミングを始めた、
漠然とした思い付きで。

主に[ドットインストール](https://dotinstall.com/)を用いて学習している。
(アカウントは、https://dotinstall.com/users/h_launch)

在職中で、それとはまるで関係のない職場で働いている。
21歳である。

9月18日からは[Ruby on Rails Tutorial](https://railstutorial.jp/?version=5.1)を進めている。
現在、[第6章の途中](https://railstutorial.jp/chapters/modeling_users?version=5.1#sec-user_validations)まで終えている。
(1ヶ月でこれだけとは、大変遅い気がする。)
サンプルアプリが完成したら、披露したい。

#目的

「コンピュータ」を操れるようになりたい。
それを用いて他己分析を行い、周囲を見渡し、
その時そこにある需要を見つけ出し、何かを供給していきたい。

それから、その時点の真理を知りたい。
SPA を Azure Functions Proxy を使って公開する

Angular 4 + Material Design で、SPA を作成した。これを Blob にアップロードして見た。

* [SPA を Blob Storage にあげて、Azure Functions をバックエンドにしてみる。](https://qiita.com/TsuyoshiUshio@github/items/e6df17eaf2324841e331)

折角なので、Azure Function の Proxy を使って、URL を blob の URL じゃないようにしたいと考えた。そしたら、次のような記事があった。

* [Azure Functions SPA](https://blog.stephencleary.com/2017/08/azure-functions-spa.html)
* [Work with Azure Functions Proxies (preview)](https://docs.microsoft.com/en-us/azure/azure-functions/functions-proxies)
* [Azure Function Proxies samples](https://azure.microsoft.com/en-us/resources/samples/functions-proxies/)

簡単にできそうだ。

# Azure Functions を設定しても動かなかった理由

自分で同じようにやって見たが、なぜか全く動かない。ルーティングしない。とても悩んだが理由は簡単だった。Azure Functions 2.0 (Preview)では現在のところ、思ったように動かない雰囲気。少なくともやりたかったことは動かない様子。解決策は簡単で、Azure Functions 1.0 (GAのもの) を使えば、上記の記事の通りの設定でうまくいった。



# 設定の詳細

実際にルーティングしたいサイトは、

```
http://xxxx.blob.core.windows.net/web/index.html
http://xxxx.blob.core.windows.net/web/asset/xxx.png
http://xxxx.blob.core.windows.net/web/dashboard
```

みたいな感じだったりする。 このような設定にしたい場合は、下記のようにすると良い。

<img width="1113" alt="Screen Shot 2017-10-19 at 9.54.54 PM.png" src="https://qiita-image-store.s3.amazonaws.com/0/3470/a3fd3327-8663-ad14-9e8e-65a49c9e97fe.png">

ポイントは、変数になる箇所に、例えば、`{*url}` みたいなのを書いて、バックエンドの方にも、それを引き継いだ `{url}` みたいなのを書くとそこがワイルドカードになる。

# TODO 

今日は、Azure Functions 2.0 では、　Proxyがうまく動かないのが、わからなかったので、時間を使ってしまった。次にしたいところは次のこと。

* ユーザー認証
* カスタムドメイン
* Continuous Delivery
* index.html を単なる `/` にしたい

など！
iPhoneのシェイクモーションを取得する

iPhoneの動作検知について、少し勉強しています。
今回は、「iPhoneを振る」という動作の検知に関して備忘録を残します。

##やること
シェイク動作の開始と終わりを検知する、のみです。
ライブラリのインストールなどは特に必要なく、下記のメソッドで取得できるみたいでした。


##実装

```
// シェイクモーションの開始を検知
- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event {

    if (event.type == UIEventTypeMotion && event.subtype == UIEventSubtypeMotionShake) {

        NSLog(@"シェイクが開始されました。");

    }
}

// シェイクモーションの完了を検知
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event {

    if (event.type == UIEventTypeMotion && event.subtype == UIEventSubtypeMotionShake) {

        NSLog(@"シェイクが終わりました。");

    }
}

// シェイクが開始されたのに、完了しなかった場合に呼ばれるようです。
- (void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event {

    if (event.type == UIEventTypeMotion && event.subtype == UIEventSubtypeMotionShake) {

        NSLog(@"シェイクがキャンセルされました。");

    }
}

```

##デバック時
基本は実機で試せばいいと思いますが、シュミレーターでもデバックできるみたいです。
Hardware → ShekeGesture

##まとめ
モーション系の実装はデバックが楽しかったりするので、他のものも試して行く予定です。
Custom Vision Serviceで生け花判定してみよう。その２

## STEP3

各項目７～８枚ずつ画像を入れた後、Trainボタンを押して学習させてみます。
![all image.png](https://qiita-image-store.s3.amazonaws.com/0/208331/e8933b90-eb1d-33e4-68cd-8e6bd524a970.png)

途中で画像を追加したい場合は、Add some images!で画像を追加できます。
![add image.png](https://qiita-image-store.s3.amazonaws.com/0/208331/b845ac82-1ac8-3e95-f81b-06c1a7553548.png)


## STEP4
学習後のPerformanceを見てみます。
![performance overview.png](https://qiita-image-store.s3.amazonaws.com/0/208331/6925fae7-787d-65b4-92ed-b30ec5b0e9a1.png)

PrecisionとRecallのパーセンテージ、また各項目ごとのパーセンテージが出ました。
Precisionは適合率、Recallは再現率といい、この２つの数値は相反しやすいものとなります。
Precisionでより精度の高い結果がでた場合、Recallでは網羅率を高く、できるだけ取りこぼしがないように広く結果を出しているため、数値が低くなります。

項目ごとのパーセンテージを見てみると、面白い結果になりました。
自由花のPrecision、Recallはいずれも80％を超えており、かなりの確率でこれは自由花だと判定されたことになります。
立花を見てみると、Precisionが66％と低く、Recallが83％と高い数値が出ています。また生花ではPrecisionが66％、Recallが50％と双方があまり高くない結果になりました。

この数値から考えられるインサイトは以下があげられます。
１．自由花の花型は判定しやすい。形に特徴があるからでしょうか？
２．立花と生花の花型は判定しにくい。判定に迷っている。立花は生花の発展形なので基本の形が似ているからかもしれません。

## STEP5 
ここで、Iteration Historyを見て、どの画像がエラー判定されたのか見てみます。赤枠で囲われたのが、エラー判定された画像です。
![iteratoin history.png](https://qiita-image-store.s3.amazonaws.com/0/208331/771756ef-d87b-baac-4aa8-8455233dea9e.png)

少し詳細を見てみます。

本来は生花ですが、立花と判定されたようです。
![example 1.png](https://qiita-image-store.s3.amazonaws.com/0/208331/18addbdd-151f-d70d-a1d1-a2b4a9840eb5.png)

こちらは立花ですが、立花、自由花、両方と判定されました。
![example 2.png](https://qiita-image-store.s3.amazonaws.com/0/208331/38a346a5-9029-4198-1ad5-79848949d9c4.png)

こちらは自由花ですが、自由花、立花、生花、どれとも判定されませんでした。
![example 3.png](https://qiita-image-store.s3.amazonaws.com/0/208331/a244e866-091b-2566-67a5-7eaa064c7996.png)

このように、明らかに異なる花型を項目ごとに分けて学習させても、何枚かはエラー判定されてしまうことから、生け花を判定するのは難しいのだということがわかりました。

次回はより精度高く判定できるよう、より多くの画像を使って判定していきたいと思います。
rubyにおける変数、定数

# 変数

## ローカル変数

### ローカル変数の範囲

ローカル変数は局所変数とも呼ばれて最も範囲の狭い変数です。トップレベルの場合はそのプログラムの終わりまでですが基本的にはクラスやメソッドの範囲内です。下記がローカル変数の範囲。

* ブロック内
* メソッド定義
* クラス定義
* モジュール定義
* トップレベルの場合、プログラムの範囲内

### ローカル変数の記法

小文字ではじめて単語と単語の間は_で区切る。

## グローバル変数

$ではじまる変数でプログラムのどこからでも参照できます。

# 定数

変化しない値を定義する際に使うものですべて大文字アルファベットで命名します。
Cygwin gcc のパスを通す方法

## はじめに
学校でなぜかCygwin+gccの使用を強いられたものの, クラスの大多数がbashを通してcygdrive経由でコンパイルしていて大変そうだったので, 説明がてらQiitaに記事を上げてみる.
~~(探せば絶対どっかにあるだろうけど)~~

## パスを通すと何がいいか
- いちいちbashを立ち上げなくていい!
- ディレクトリの移動(cd)しなくていい!(方法は後述)
- エクスプローラのアドレスバーからコピーしたパスをそのまま使える!
- etc...

## 環境
- Windows
- Cygwin 2.4.2
- gcc 5.4.0

※Windows7以降であればほぼ同じ方法で通せると思われます。
Cygwinは`C:\cygwin\bin`にあるものとします。適宜ご自分のCygwinのパス(インストールした場所の中の`\bin`)に読み替えてください。
また、外付けHDD/SSDにインストールしてあるものについては対象としていません。(そもそもできないと思う)

##手順
1. エクスプローラを開く
2. 左に表示されているフォルダツリーから**PC**(あるいは**コンピュータ**)を右クリック
3. 出てくるメニューからプロパティ(一番下)を選択

![right_crick.png](https://qiita-image-store.s3.amazonaws.com/0/145501/19ff091d-b00d-1345-2113-3565f01cd4af.png)
4. 選択後でてくるウィンドウで, システムの詳細設定(左上4つめ)を選択
![system.png](https://qiita-image-store.s3.amazonaws.com/0/145501/86b26aac-725d-50c3-77f5-461e69ca1d2f.png)
5. 出てくる**システムのプロパティ**ウィンドウで, **環境変数**を選択
![property.png](https://qiita-image-store.s3.amazonaws.com/0/145501/70d36ff7-d14d-7ae3-f01f-ad0c5df757a2.png)
6. 出てくる**環境変数**ウィンドウで, **システム環境変数**内の**Path**を選択
![path_10.png](https://qiita-image-store.s3.amazonaws.com/0/145501/c0e8d260-e699-7a90-d719-3aa6982fa106.png)
7. **Path**を選択した状態で**編集**ボタンをクリック
![path.PNG](https://qiita-image-store.s3.amazonaws.com/0/145501/32ce4d87-0b9c-c5bb-73a2-58525f6b6741.png)

ここから先はWindowsのバージョンによって変わります
[Windows8.1以前](#windows81%E4%BB%A5%E5%89%8D)
[Windows10以降](#windows10%E4%BB%A5%E9%99%8D)

## Windows8.1以前
1. 出てくる**システム変数の編集**ウィンドウで, **変数値**の一番最後に以下(Cygwinのパス)を追記
(画像では最後から二つめにありますが最後に入れてください)

```:Cygwin
;C:￥cygwin￥bin
```
最初のセミコロンを**忘れずに!!**  忘れると最悪Windowsが死にます。
![path_8.png](https://qiita-image-store.s3.amazonaws.com/0/145501/236bdf76-5b6f-e57c-c09a-f9d834c8117b.png)
2. OKを押してウィンドウを閉じる
3. Windowsキー+Xキーを押して出てくるメニューで,コマンドプロンプトを開く
![winx_8.png](https://qiita-image-store.s3.amazonaws.com/0/145501/62b5b6e2-cafa-7c74-a103-8e6c614f9425.png)
4. `gcc -v`と打って, 以下のように出れば成功!!
![gcc-v.png](https://qiita-image-store.s3.amazonaws.com/0/145501/75f05d1c-b63c-aeae-1070-f7017fe0464d.png)


## Windows10以降
1. 出てくる**環境変数名の編集**ウィンドウで, **新規**ボタンをクリック
![pathedit_10.png](https://qiita-image-store.s3.amazonaws.com/0/145501/e6f27aec-e61a-3333-a929-4ab058f38909.png)
2. 出てくる文字入力フォームに以下(Cygwinのパス)を追記

```:Cygwin
C:￥cygwin￥bin
```
![pathediting_10.png](https://qiita-image-store.s3.amazonaws.com/0/145501/b7d732d8-2c07-c074-7c65-0d84e7cf09d6.png)
3. Enterキーを押したのち, OKを押してウィンドウを閉じる
4. Windowsキー+Xキーを押して出てくるメニューで, PowerShellを開く
![winx_10.png](https://qiita-image-store.s3.amazonaws.com/0/145501/063fb5bb-6ecc-4262-5f8a-3017a27cc73c.png)
5. `gcc -v`と打って, 以下のように出れば成功!!
![gcc-v.png](https://qiita-image-store.s3.amazonaws.com/0/145501/94a003df-14c9-41d7-bfff-f1880352d786.png)

## cdしなくて済む方法
上で述べたcdしなくて済む方法について。

1. コンパイルしたい .cファイルのあるディレクトリをエクスプローラで開く
2. エクスプローラで**何も選択しないでShiftを押しながら**右クリック
3. 出てくるメニューで**Powershellウィンドウをここに開く**をクリック(8.1以前の場合はPowershellでなくコマンドプロンプト)
![shiftright.png](https://qiita-image-store.s3.amazonaws.com/0/145501/d2c27ec6-ab5c-1673-fb50-4582fd43dd75.png)

4.するとすでにcdした後のPowerShell(コマンドプロンプト)が開くのでそこで`gcc -o 出力ファイル 入力ファイル`

エディタのterminalプラグインからも行けるよ。

## 終わりに
これでだいぶ楽になると思うんだけどなぁ。
なんか分かんなければコメントetcで。
Database/SQL

## テーブルの列規約
- Primary Key
    - 「Not Null」 + 「Unique」 にチェック入れたのと同じ意味
- 「UN」 マイナスの値はいれちゃダメ

## データの追加
- 「INSERT」文でデータを追加
- 「VALUES」 大量のデータを追加できる

### データを更新
- 「UPDATE」文でデータを更新

### データの削除
- 「DELETE」 文でデータを削除
- 「WHERE」文をつけないと、全データが削除される
- 「TRUNCATE」 はデーブルを完全に削除する。

### トランザクション
- TRANSACTION
- 目的に関する複数の処理を一つの処理としてまとめて扱う単位
Custom Vision Serviceで生け花判定してみよう。その１

# はじめに
Cognitive ServiceとMachine Learningの勉強の一環で、Custom Vision Serviceを使って画像判定をしてみたいと思います。
題材は生け花を選びました。

今回は自身が生けた生け花の写真を使って判定していきたいと思います。
ちなみに現在生け花の流派は145流派あると言われていますが、その中で私が習っている生け花は池坊流という流派となります。

今日は、Custom Vision Serviceで、何枚かのサンプル画像を使って学習させてみました。
以下判定までの流れとなります。

## STEP1
まずCustom Vision Serviceを立ち上げ、New Projectを作ります。
こちらのサイトの”はじめる”ボタンから始めます。
[Custom Vision Service](https://azure.microsoft.com/ja-jp/services/cognitive-services/custom-vision-service/)
![Custom Vision Service.png](https://qiita-image-store.s3.amazonaws.com/0/208331/90cc6827-be29-c1ff-0135-8a1d9a2f70b4.png)

![projects.png](https://qiita-image-store.s3.amazonaws.com/0/208331/8c5a2462-c227-64e8-f69f-866a98921f06.png)

プロジェクト名、説明を入れて、Domainsを選択します。
今回のプロジェクトでは、Food、Landmarkなどどれにも当てはまらないので、Generalを選択します。選択後、Create Projectを押します。

![new project.png](https://qiita-image-store.s3.amazonaws.com/0/208331/7479f35d-e62e-786c-e863-357e0d1005a0.png)

## STEP2
プロジェクト完成後は、項目ごとに分けて画像を入れていきます。
今回は、池坊の生け花の花型で有名な３つの型に分けて、それぞれ画像をいれていきました。
ここで入れる画像の質が、今後の学習精度につながりますので、適切な画像を入れる必要があります。

今回は自由化(Free Style)、立花(Rikka)、生花(Shoka)と３つの花型ごとに、それぞれの画像をいれました。

![free style.png](https://qiita-image-store.s3.amazonaws.com/0/208331/1ece92cd-1680-b656-8ca6-71558a074c6f.png)
![rikka.png](https://qiita-image-store.s3.amazonaws.com/0/208331/8be8b797-fa2c-68d5-3b20-8b8ec83ebb02.png)

これで学習の準備が整いました。その２へ続きます。
Pythonによる数値計算入門-Part1

# Pythonによる数値計算について　
　数値計算を勉強し始めたので普段使いできる程度の数学と物理を記録として残しておこうと思います。数値計算系の記事ではPython3、numpy、scipy、matplotlibは既にインストール済みである事を前提として書いてます。まだインストールしていない場合は適切なサイトを見つけてくれればと思います。
　なお今後は微分方程式とか出てきますが、これらも既に習得済みである事を前提として書いているので、適切な教科書を読んでいただければと思います。おそらくそんなに高度な数学は使わないでしょう。僕自身は物理系ですので、そちらとも絡めていけたらと考えています。

# 導入 
　何かの問題を解こうとする際、あまりにも数式が複雑で直感的な理解ができなかったり、あるいは解かなければならない数式が膨大である場合に、それらを自分一人で解く事は骨が折れます。そこで、そのような課題を解決するために開発されたのが計算機であり、これがコンピュータの原型となります。コンピュータアーキテクチャの説明やコンピュータの歴史と起源については冗長ですし専門家でもないので避けますが、要はコンピュータの本職は計算であり、人間よりも圧倒的に早く計算を行う能力があります。なので、この道具を使わない手はない、という事になります。
　じゃあ何でもかんでも数式を入れれば答えを出してくれるのかと言うとそんなことはありません。実は、人間が数式を解くのとコンピュータが数値計算を行うのには決定的な違いがあります。例として、次の積分を解くことにしましょう。

```math
S = \int_{0}^{1}x dx
```
人間がこの積分の答えを求めようとすると、高校生のとき習ったようにxの二乗の形を思い浮かべて、定義域を代入した値の差から積分を求めるでしょう。人間は定理や公式など便利でスマートな道具を持っています。それらを使えば簡単に問題を解くことができるのです。しかし、コンピュータはそれらを知りません。そこで、コンピュータはこの積分を解くために定義域を細かく分割し、分割した定義域にその定義域における値域の平均値をかけることで小さい台形の面積を求めて、それを分割した分だけ足しあわせます。これはいわゆる区分求積法と呼ばれる計算方法です。コンピュータは人間のように便利な道具を知らない代わりに、ちょっとだけ泥臭く強引な方法を使うことで答えを求めるのです。おそらく人間がこの方法を使って答えを導くにはかなり手間がかかるでしょう。定義域の分割数が100程度であればなんとかなるかもしれませんが、この答えをより正確に求めるために定義域の分割数を10000程度にすると途端に面倒になるので、人間には難しいです。
　このように人間とコンピュータでは問題の解を求める方法が少しだけ異なります。人間は簡単な数式(手計算で求められるような方程式を解析的と言うと思いますが)の答えを直接的に求めることが得意です。一方、コンピュータは複雑で直感的に解くことのできない問題や膨大なデータが絡む計算であっても少々強引に、かつ高速に解いてしまいます。
　以下に数値計算の(おそらく)初歩的で(おそらく)基本的な思考プロセスをまとめました。

1. 数値計算の手法(区分求積法、ニュートン法など)で解く事のできる数式を用意する。
2. 定義域を設定する。
3. 数値計算の手法を用いて、定義域のデータを渡してその定義域に対応する値域のデータを出力する。
4. 数値計算の結果として得られた値域のデータを保存する。
5. 定義域と得られた値域のデータから、結果を可視化する。

1.から3.までは既に説明しましたが、これは歴史的に見てもC言語やFortranで散々行われてきたものです。Pythonが本領を発揮するのは5.についてです。Pythonにはmatplotlibという強力なライブラリーによってpylabというモジュールが用意されています。pylabは柔軟性の高いグラフを作ることができるので、数値計算の結果をきれいに出力することができます。今後の数値計算の記事では先ほどの数値計算の手法と、得られた結果のpylabによる可視化が主なテーマになると思います。
僕がUnityを初めて気がついたこと[1]

僕がUnityを初めてから気がついたことをメモしていきます。

前回：[僕がUnityを初めて気がついたこと[0]]()

# C#には演算子のオーバーロードがない
訳あって演算子のオーバーロードの仕方を検索したけどC#の演算子のオーバーロードないやんけ！

結構ショックでした。

# Cameraクラスを作ったときの対処法
自分でCameraクラスを作ったのですが、Unityで用意されているCameraクラスと名前が重なってしまいました。
こういうときはUnityの`Camera`を`UnityEngine.Camera`に変えてあげればうまくいきました。

# Cameraの背景色
背景色はCameraで変えれる。
`Camera`コンポーネントをインスペクターで`Clear Flags`で`Solid Color`を選択。
そしたら`Background`で色を変えればOK

スクリプトで操作したい場合は、

```Camera.cs
public class Camera : MonoBehaviour{
    void Start(){
        GetComponent<UnityEngine.Camera>().backgroundColor = Color.red;
    }
}
```

# 重力をスクリプトから変更
スクリプトから重力を変えるには以下のようにする。

```GameManager.cs
public class Camera : MonoBehaviour{
    void Awake(){
        Physics.gravity = new Vector3(0,-1,0);
    }
}
```
Excelでセルをコピーする時に末尾の改行をコピーしない



```
#IfWinActive,ahk_class XLMAIN
^c::
SendInput,{F2}
SendInput,+{Home}
SendInput,^{Insert}
ClipWait
SendInput,{Esc}
return
#IfWinActive
```
こんな感じで無理矢理

- Ctrl+Cを押した時に
- F2キーを押してセル編集モード
- Shift押しながらHomeで全選択
- Ctrl+Insertで選択部分をコピーして
- Escで抜ける

ってやる力技。

複数行選択時にCtrl+Cするとピヨるので、その場合は右クリックからコピーとかやってるんだけど、いい方法ないかな。
October CMS プラグイン実装テク：LinuxコマンドのSTDOUTをリアルタイムで取得する

OctoberCMSのコマンドからLinuxコマンドを使っていると、処理時間が長いときなど、リアルタイムでLinuxコマンドの出力をコンソールに表示したいことがあります。

「[OctoberCMSプラグイン作成Tips：Linuxコマンドを実行する](https://qiita.com/pikanji/items/c29bcd7b4b599873594a)」で使っていた `Process#getOutput` メソッドだと、処理が終わった後にSTDOUTの出力を取得することになります。

そこで `Process#run` メソッドに関数を渡してやることで、（ほぼ）コマンド出力のたびに呼び出されたびに任意の処理をさせることができます。
下記の例だと、OctoberCMSのコマンド実装クラスでLinuxコマンドのSTDOUT出力をそのままコンソールに出力しています。

```php
$process->run(function ($type, $buf) {
    $this->output->write($buf);
});
```

参考：[Getting real-time Process Output](https://symfony.com/doc/current/components/process.html#getting-real-time-process-output)
accounting-jsって何？

# accounting.js
通貨、通貨フォーマットを提供してくれるライブラリ。

使い方は読みこむだけ。

```html
<script src="path/to/accounting.js"></script>

<script type="text/javascript">
	// Library ready to use:
	accounting.formatMoney(5318008);
</script>
```



###できること
- カスタム出力形式
- 数値の解析/非フォーマット
- 簡単なローカライゼーション
- スプレッドシート形式の列書式設定（行の記号と小数点以下の桁数の設定）

# ライブラリメソッドの一部
### `formatMoney()` - 任意の数値を通貨にフォーマットする

```js
  //デフォルトの使用法：
 accounting.formatMoney(12345678);  // $ 12,345,678.00

 //ヨーロッパの書式設定（カスタムシンボルとセパレータ）では、optionsオブジェクトを第2パラメータとして使用することもできます。
 accounting.formatMoney(4999.99, "€", 2, "。", "、");  // 4.999,99ユーロ

 //負の値は正式にフォーマットできます：
 accounting.formatMoney(-500000, "£", 0);  //£500,000

 //単純な `format`文字列はシンボルの位置を制御します（％v = value、％s = symbol）：
 accounting.formatMoney(5318008, {symbol: "GBP", 形式: "％v％s"});  // 5,318,008.00 GBP 
```

###formatNumber（） - カスタム精度とローカライズで数値をフォーマットする
1000の位で「,」を入れたいなら、これを使えばOK

```js
accounting.formatNumber(5318008);  // 5,318,008
accounting.formatNumber(9876543.21, 3, "");  // 9 876 543.210 
```



###具体的な使い方
```js
    import accounting from 'accounting-js'

//標準的な使用法とパラメータ（文字列を返す）
accounting.formatMoney(number,[symbol = "$"],[precision = 2],[thousand = ","],[decimal = "."],[format = "%s%v"])

//第2のパラメータはオブジェクトにできる
accounting.formatMoney(number, [options])

// options.currencyに一致する利用可能なオプション
var options = {
	symbol : "$",
	decimal : ".",
	thousand: ",",
	precision : 2,
	format: "%s%v"
};

// 使用例:
accounting.formatMoney(12345678); // $12,345,678.00
accounting.formatMoney(4999.99, "€", 2, ".", ","); // €4.999,99
accounting.formatMoney(-500000, "£ ", 0); // £ -500,000

// optionsオブジェクトを使用した使用例
accounting.formatMoney(5318008, {
	symbol: "GBP",
	precision: 0,
	thousand: "·",
	format: {
		pos : "%s %v",
		neg : "%s (%v)",
		zero: "%s  --"
	}
});

// 値の配列を再帰的にフォーマット
accounting.formatMoney([123, 456, [78, 9]], "$", 0); // ["$123", "$456", ["$78", "$9"]]

```

簡単に遊んでみた感じをgithubに。
[acctountingで実験](https://github.com/ma-yamada/sample-vue-webpack)

=======

```js
//便利な書き方１
accounting.formatMoney([123, 456, [78, 9]], "$", 0); // ["$123", "$456", ["$78", "$9"]]


//便利な書き方２
accounting.formatMoney(number, [options])

var options = {
	symbol : "$",
	decimal : ".",
	thousand: ",",
	precision : 2,
	format: "%s%v"
};

//便利な書き方3
accounting.formatNumber(9876543); // 9,876,543
```


`accounting.formatNumber だけで乗り切れそうな感じはした。



参考
[accounting.jsのドキュメント](http://openexchangerates.github.io/accounting.js/)
PostgreSQLでは以上、以下（=>、=<）が使えない！？

# PostgreSQLでは以上、以下（=>、=<）が使えない！？

研修中に新人から「PostgreSQLで以上、以下が使えません」と質問がありました。
もちろんPostgreSQLで使えるのですが、こういうところで引っ掛かるんですね、ということで今回Qiitaの記事にしてみました。
なお、「[新人に悲観ロックによる排他制御を体験してもらう](https://qiita.com/5zm/items/cc33fa9f591892222153)」という記事も書いています。興味があればこちらも参照いただければと思います。


* 「以上」を抽出条件とするSQL

```sql:以上のSQL
SELECT * FROM customer
WHERE customer_birth => to_date('2017/01/01', 'yyyy/MM/dd')
```

```console:エラーになります
ERROR:  演算子が存在しません: date => date
LINE 2: WHERE customer_birth => to_date('2017/01/01', 'yyyy/MM/dd')
                             ^
HINT:  指定名称、指定引数型に合う演算子がありません。明示的な型キャストが必要かもしれません

********** エラー **********

ERROR: 演算子が存在しません: date => date
SQLステート:42883
ヒント:指定名称、指定引数型に合う演算子がありません。明示的な型キャストが必要かもしれません
文字:45
```

* 「以下」を抽出条件とするSQL

```sql:以下のSQL
SELECT * FROM customer
WHERE customer_birth =< to_date('2017/01/01', 'yyyy/MM/dd')
```

```console:エラーになります
ERROR:  演算子が存在しません: date =< date
LINE 2: WHERE customer_birth =< to_date('2017/01/01', 'yyyy/MM/dd')
                             ^
HINT:  指定名称、指定引数型に合う演算子がありません。明示的な型キャストが必要かもしれません

********** エラー **********

ERROR: 演算子が存在しません: date =< date
SQLステート:42883
ヒント:指定名称、指定引数型に合う演算子がありません。明示的な型キャストが必要かもしれません
文字:45
```


# PostgreSQLにおける「以上」「以下」の正しい書き方

**PostgreSQLでは以上は「`>=`」、以下は「`<=`」を利用します。**
**等号（`=`）が後で、不等号（`>、<`）が前になるので注意しましょう。**

* 「以上」を抽出条件とするSQL

```sql:正しい以上のSQL
SELECT * FROM customer
WHERE customer_birth >= to_date('2017/01/01', 'yyyy/MM/dd')
```

* 「以下」を抽出条件とするSQL

```sql:正しい以下のSQL
SELECT * FROM customer
WHERE customer_birth <= to_date('2017/01/01', 'yyyy/MM/dd')
```