OmniAICreator/Qiita-1.07M huggingface dataset:
指摘管理表の作り方

##指摘管理表の作り方

###指摘管理表とは
システムの中で不具合や指摘事項をまとめたもの

| No | 優先度 | 区分 | チケットNo | 指摘者 | タイトル | 指摘事項 | 再現手順 | 担当 | 状態 | 完了日 |
|:--:|:-----:|:---:|:---------|:------|:------|:--------|:-------|:----:|:---:|:------|
| 1 | S | バグ | app-111 | 指摘者名 | 各画面戻る時の画面ちらつきの解消 | 戻る時の画面ちらつきがある。 | 各画面の戻るボタンを押した時 | 担当名 | 完了 | 11/1 |
| 2 | A | タスク | app-111 | 指摘者名 | 各画面戻る時の遅延 | 戻る時の画面が遅くなる。 | 各画面の戻るボタンを押した時 | 担当名 | 着手２０％ | 11/11 |
| 3 | B | 2nd対応 | 内部 | 指摘者名 | 編集画面の完了ボタンの各遷移画面に移動させる | 編集画面の完了ボタンの各遷移画面に移動させる（別紙参照） | 編集画面の完了をボタンを押した時 | 担当名 | 見積中 | １２月案件 |
| 4 | - | ー | ー | ー | ー | ー | ー | ー | ー | ー |

不具合や指摘事項
特に再現手順などの項目や状態、完了日の管理は欠かせないですね。


## 投稿情報
投稿日 2016年11月02日
更新日 2020年12月01日
8322 views

## 関連記事

【About】(http://qiita.com/sunstripe) - サンストライプ

---

## 制作チーム：サンストライプ

[![sunstripe_logo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80600/322f2d60-f19d-af9e-2b6f-7290ca546848.png)](http://sunstripe.main.jp/)
http://sunstripe.main.jp/

(月１WEBコンテンツをリリースして便利な世の中を作っていくぞ！！ボランティアプログラマー/デザイナー/イラストレーター/その他クリエイター声優募集中！!)

### 地域情報 THEメディア
THE メディア 地域活性化をテーマに様々なリリース情報も含め、記事をお届けしてます！！
https://the.themedia.jp/

### ゼロからはじめる演劇ワークショップ
多様化の時代に向けて他者理解を鍛える

https://workshop.themedia.jp/

### プログラミングワークショップ・ウェブ塾の開講！！！
様々なテーマでプログラミングに囚われずに取り組んでいきます。
詳しくはこちら　↓　↓　↓　↓　↓　↓　↓　↓
[プログラミングサロン 月１だけのプログラミング学習塾](https://workshop.themedia.jp/posts/7057553?fbclid=IwAR32CfRQ7RvDOhvuogoSwqxDLMOU7Jvuzljlnx-TMc27qBPX1BnWsfLcBR8
)

### 協力応援 / 支援者の集い
## チーム：サンストライプ
#### プログラミングラボ
https://twitter.com/sunstripe2011

一緒にポートフォリオを作りませんか？現場の体験やそれぞれの立場から年齢関係なく作品を作りたい方々と一緒にチームを作って、作品を作っています。現場に行きたい人には、職場紹介や職場の体験や悩み相談なども受けております。
様々な職種からプログラミングの知識を得たい、デザインの知識を得たい、データーベースの知識を得たいという人が集まっております。
週１のミーティングにそれぞれの近況と作業報告して、たまにリモート飲み会などをしております！！

興味がある方は、DMに話しかけてみてください。

## トラストヒューマン
http://trusthuman.co.jp/
私たちは何よりも信頼､人と考えてます｡

｢コンサルティング｣と｢クリエイティブ｣の両角度から｢人材戦略パートナー｣としてトータル的にサポートします！！

キャリア教育事業
広域学習支援プラットフォーム『のびのび日和』
https://slc-lab.amebaownd.com/
【テクニカルトピック】10月25日号

■無料で使える日本語ウェブフォント9種類をGoogleが公開中
http://gigazine.net/news/20161020-google-fonts-japanese-early-access/
Googleが日本語フォント9種類をウェブフォントとして試験的に無料公開しています。
まだ試験的に公開されている状態ですが、今後活用できそうです。

■CSSベンダープレフィックス-webkit-を今この瞬間に辞める為のAutoprefixerの導入とお薦め設定
http://qiita.com/tonkotsuboy_com/items/377913c51b1ac00deffe
必要なベンダープレフィックスのみを付与する為のツール Autoprefixer の記事です。
適切なベンダープレフィックスを自動で付与してくれるので便利です。

■インターネットを蝕む大規模DDoS攻撃
http://jp.techcrunch.com/2016/10/23/20161022how-massive-ddos-attacks-are-undermining-the-internet/
この記事を読むとDDos攻撃の仕組みがわかるようになります。また、最近監視カメラのようなiOT端末を導入する人や企業が多いが、iOTへのセキュリティ対策をとる人が少ないため、iOTを通じた攻撃の穴が大きいです。

■Content is not king: 5 ways to get traffic to your blog
https://www.techinasia.com/talk/top-5-ways-startups-traffic-blog
自分のサイトのPVをあげるために、サイトの内容も重要ですが、それだけでなく、他の有効な方法もこの記事で紹介されます

■映像がTシャツに貼り付いてる!? 非剛体の表面上に投影可能な技術「ダイナミックプロジェクションマッピング」
http://www.gizmodo.jp/2016/10/dynamic-projection-mapping.html
高速プロジェクター「DynaFlash」と非剛体の変形をトラッキングする「Deformable Dot Cluster Marker」という2つの技術を合わせることで、ダイナミックプロジェクションマッピングを可能にしています。
プロジェクトマッピングもここまで来たかと感じさせられる動画です。

■iPhone7で利用できるApple Payでは、Suica以外のICカードも利用できる？パスモやICOCAの定期券をiPhoneで使いたい方に。
http://cards.hateblo.jp/entry/applepay-pasmo-icoca/
Apple PayとはクレジットカードやSuicaカードをアプリ内に登録することで、店頭での買い物や駅改札の通過時に端末をかざして支払いができるというもの。
Apple PayでSuica以外の交通系ICカードが利用可能になるかどうかについて結論からいうとしばらく無理だそうです。

■【商用可】国が用意した、日本観光促進のためのハイクオリティのフリー素材「PHOTO METI」
http://design-develop.net/design/stocky.html
このサイトでは、美しい日本の情景がスライドショーで再生され、掲載されている写真はすべて、日本の観光促進のために利用できるフリー素材となっています。

■Can I Do?
http://caniuse.com/
ブラウザが各APIに対する対応状況をリストしている一覧サイトです。
【テクニカルトピック】10月18日号

■iOSのシェア、全体の4分の1まで減少 - 9月OSシェア(モバイル)
http://news.mynavi.jp/news/2016/10/06/066/
　依然として、Androidのシェアが伸び続け、iOSのシェアが、減少しています。
最新の9月では、Androidが、69.18%。iOSが25.02%のシェアとなっています。今後はAndroidファーストの開発も増えてくるかもしれません。

■WordPressとIFTTTの連携でIoTについて語る準備をしよう
https://www.webprofessional.jp/integrating-wordpress-with-the-internet-of-things/
　Wordpressの機能の一つである「WP REST API」、を活用しIoTのフィールドでも利用することはできないか。という記事です。

■楽して便利！Webアイコンフォント『Font Awesome』の使い方と活用 Tips
https://h2ham.net/font-awasome
アイコンを Webフォント として利用できるFont Awesomeの記事です。
簡単なアイコンなら画像を作成せずこれで対応できるのは便利だなと思います。

■ご利用環境チェックツール
http://mysys-check.com/
OS・ブラウザ・JSやCookieが有効か無効かなど、利用環境の情報を表示するツールです。メールで情報を送れたりPDFにできたりします。
クライアントの利用環境を確認してもらう際にこのツールにアクセスしてもらうだけで、知りたい情報がだいたいわかるかと思います。

■15 SEO Best Practices for Structuring URLs
https://moz.com/blog/15-seo-best-practices-for-structuring-urls
良いSEOのためのURLの書き方。ディレクターとして、SEOの知識も必要だと思い、この記事を読むといいです

■REST API設計者のための有名APIのURL例
http://qiita.com/yu1ro/items/f366ded721f03ae91d96?utm_source=Qiita%E3%83%8B%E3%83%A5%E3%83%BC%E3%82%B9&utm_campaign=c322b3aaff-Qiita_newsletter_229_10_12_2016&utm_medium=email&utm_term=0_e44feaa081-c322b3aaff-33077297
REST APIの構築方法の参考資料にはおすすめです

■間違いから学ぶSPFレコードの正しい書き方
http://salt.iajapan.org/wpmu/anti_spam/admin/operation/information/spf_i01/
迷惑メールとならないようにDNSに対してSPFレコードを設定しますが、このサイトが一番参考になりわかりやすかったです。
SPFレコードの許可しているIPを確認するにはこのサイトが見やすかったです
（https://dmarcian.com/spf-survey/cross-clinic.com）

■黒魔術（JavaScript）まとめ
http://qiita.com/suetake/items/425684ac278c7cf8c30c?utm_source=Qiita%E3%83%8B%E3%83%A5%E3%83%BC%E3%82%B9&utm_campaign=0469a094d2-Qiita_newsletter_229_10_12_2016&utm_medium=email&utm_term=0_e44feaa081-0469a094d2-32919589
今までに見かけた奇々怪々なJavaScriptコードのまとめです。
JavaScriptに興味がある人は見るとなるほどと思います。
commons-lang3 v3.5でのDateUtils#parseDateの動作変更

commons-lang3のバージョンを3.4から3.5に上げたところ、日付のパースに失敗する問題が発生した。以下のようなコードでバージョン3.4と3.5の差異を確認できる。


実験用コード

```DateUtilsTest.java
package sample;

import org.apache.commons.lang3.time.DateFormatUtils;
import org.apache.commons.lang3.time.DateUtils;

import java.text.ParseException;
import java.util.Date;

public class DateUtilsTest {
    private static String pattern = DateFormatUtils.ISO_DATETIME_TIME_ZONE_FORMAT.getPattern();// yyyy-MM-dd'T'HH:mm:ssZZ
    private static Date parse(String str) {
        try {
            return DateUtils.parseDate(str, pattern);
        } catch (ParseException e) {
            return null;
        }
    }

    public static void main(String[] args) throws ParseException {
        System.out.println(parse("2016-11-02T14:30:00+09:00"));
        System.out.println(parse("2016-11-02T14:30:00Z"));
        System.out.println(parse("2016-11-02T14:30:00+0900"));
        System.out.println(parse("2016-11-02T14:30:00JST"));
        System.out.println(parse("2016-11-02T14:30:00 JST"));
        System.out.println(parse("2016-11-02T14:30:00"));
    }
}
```

commons-lang3 v3.4での結果

```
Wed Nov 02 14:30:00 JST 2016
null
Wed Nov 02 14:30:00 JST 2016
Wed Nov 02 14:30:00 JST 2016
Wed Nov 02 14:30:00 JST 2016
null
```

commons-lang3 v3.5, v3.6での結果

```
Wed Nov 02 14:30:00 JST 2016
Wed Nov 02 23:30:00 JST 2016
null
null
null
null
```
[Swift] AmazonSNSでpush通知をする時にCognitoを使わない方法

AmazonのドキュメントではcredentialsProviderを作るのにCognitoを使う方法で書かれています。
push通知しか使わない予定なので、無駄な管理と場合によっては料金が発生するのもイヤなので、Cognitoを使わない方法を探しました。
が、Objective-Cでは見つかるものの、Swiftに書き直せばと思ったらメソッドが無かったり・・・
Swiftでの方法を見つけるのが困難だったので載せておきます。

サンプルだとこんな感じになってます。

```
let credentialsProvider = AWSCognitoCredentialsProvider(regionType: .USEast1, identityPoolId: "YOUR_IDENTITY_POOL_ID")
let configuration = AWSServiceConfiguration(region: .USEast1, credentialsProvider: credentialsProvider)

AWSServiceManager.defaultServiceManager().defaultServiceConfiguration = configuration
```



上の部分をアクセスキー、シークレットキーを使う場合は下のようにします。

```
let aKey = "アクセスキー"
let sKey = "シークレットキー"
let credentialsProvider = AWSStaticCredentialsProvider.init(accessKey: aKey, secretKey: sKey)
let configuration = AWSServiceConfiguration(region: .USEast1, credentialsProvider: credentialsProvider)
AWSServiceManager.defaultServiceManager().defaultServiceConfiguration = configuration
```

ここの部分以外はサンプルと同じ方法で問題ないようです。

※.USEast1 の部分も東京なら「.APNortheast1」なので、お気をつけくださいませ
open-junk-file.elで、新しくウィンドウを開かないようにする

小ネタ。

ファイルを開くために用いる関数を変更する。デフォルトは`find-file-other-window`になっているので、下記のようにする。

```lisp:init.el
(setq open-junk-file-find-file-function 'find-file)
```

参考：
https://www.emacswiki.org/emacs/open-junk-file.el
Prefixを除いた文字列を取得する

「 http://example.com 」という文字列から「http://」を取り除いて「example.com」だけを取得したい場合は以下のように書けば良さそう。

```swift
// Prefixを除いた文字列を返す
var str = "http://example.com"
if let range = str.range(of: "http://") {
    str.removeSubrange(range)
    //=> "example.com"
}
```
テスト駆動開発でwatchdog(watchmedo)を使う

テスト駆動開発には、保存時にテストを自動で実行するということがマストだと思います。また、ちょろっとスクリプト書いた時も、保存時に自動実行してくれたら捗るなぁと思いませんか？

そんなときに、watchdog(watchmedo)です！！
（各種のOSには、監視用APIコマンドが用意されていますが、マルチOSで同じ手順にしたいという方におすすめです。）

<font color="Red"><b>追記</b></font>:2016/11/07
掲載しているコマンドは、[Git for Windows](https://git-for-windows.github.io/)に付いてくる、MINGW32のターミナルでテストしていたのですが、コマンドプロンプトだと動かないと連絡がありました。おそらく、shellが動かないのが原因かと思います。（調べてないです。すみません。）

<font color="Red"><b>追記</b></font>：2016-12-14
なぜか家のPCだけ、2重実行されていたのでオプションコマンドを見直しました。--waitではだめで、-Wのオプションが2重実行防止用でした。また、更新イベントだけに絞るようにした`[ "${watch_event_type}" == "modified" ] && echo hoge`の記述も要らないようなので、記事から消しました。

### install
---
LinuxMintやMacなど、開発しやすいOSを使っている方は、瞬殺なので下記を見て、雰囲気インストールしてください。Windowsは基本ハマるので、Windowsユーザ向けに書きます。

### python install
---

Pythonが必要なので、ダウンロードします。
2系、3系どちらでも良いですが、32bit or 64bitに注意です。

トップページにあるダウンロードだと32bitが落ちてくるので、64bitの方は、[こちらのダウンロード一覧](https://www.python.org/downloads/windows/)から落としましょう。

#### install時のフォルダに注意！！
install時のフォルダですが、必ずCドライブ直下に保存してください。デフォルトの`C:\Program Files (x86)`だと、path解決か何かで問題が出て、まともに動作しません。。。

```bash
# ここにインストールしました
C:\python35-64
```

### pip install watchdog
---
pythonには、モジュール管理ソフトで「pip」というものが同梱されているので、そちらを使ってインストールします。

1. ~~コマンドプロンプト~~　**MINGW32** を起動します。
1. `python -m pip install --upgrade pip --force-reinstall`
1. `pip install watchdog`

2番目の手順は、pipのアップグレードなのでスキップしても大丈夫です。

### 使い方
---

```bash
watchmedo shell-command -W --recursive --pattern '*.php;*.txt' --command 'echo test'　監視フォルダ（指定しないとカレントディレクトリ）
```

- shell-command:　シェルコマンド実行時に指定。他にもlogとかあります。
- W:　大文字でW。コマンドが実行されている間に発生したイベントは無視する（同時発生イベント無視設定）
- recursive:　再帰的に指定フォルダ配下を見に行く
- pattern:　監視するファイルを設定（上記では、拡張子がphpとtxtのもの）
- command:　実行するコマンド。~~上記の例では、更新イベントだけに絞ってechoしています。（windowsでvim使うと、保存と同時に3つイベントが飛びました。。。Netbeansも2つ飛びました。。。）~~

#### PHPUnitを動かす場合

```bash
cd 監視対象のフォルダ
watchmedo shell-command -W --recursive --pattern '*.php' --command 'プロジェクトフルパス/vendor/bin/phpunit フルパス/tests/'
```

プロジェクトフォルダに移動後なら、監視対象のフォルダ指定が省けるのと、phpunitで色が付きます。（逆になぜ監視対象フォルダを指定すると色が付かないのでしょうね？）

### 後記
---

インストールがちょい面倒ですが、快適なコーディングライフをエンジョイしてください。
Cisco JPOSへの問い合わせ方法

以下のような項目で困ったら、[Cisco JPOS](http://www.cisco.com/web/JP/partners/tools/helponline/index.html)に問い合わせを行うことができます。（※アカウントが必要）

(基本的に購入前の検討)
- シスコ製品の技術情報
- シスコソリューションの情報
- 技術情報ページや資料のご案内
- オーダー型番に関する情報

## 例

ここでは、Webでケースオープンしてみます。

![image](https://qiita-image-store.s3.amazonaws.com/0/105131/e97bc095-92c4-5f7c-58d6-3f4bb945bbe3.png)

IDや名前、連絡先を記入して、アーキテクチャを選択します。

![image](https://qiita-image-store.s3.amazonaws.com/0/105131/0e35c600-b1a4-9acf-ba49-401671934a27.png)

![image](https://qiita-image-store.s3.amazonaws.com/0/105131/6e54dc8e-03a2-4cf5-35ad-a28977df2dc8.png)


こんな感じ。

しばらくすると、問い合わせ時に指定したアドレス宛にメールが来ます。
その後、メールでやり取りが可能になります。

以上。
WindowsのVagrant/VirtualBox上のCentOSにホストマシン以外からSSH

管理者権限でコマンドプロンプトを起動し、以下を実行

```
netsh advfirewall firewall add rule name="＜適当な名前＞" dir=in action=allow protocol=TCP localport=2222
```

Vagrantfileに以下を指定 (private_networkにしている前提)

```
xxx.vm.network :forwarded_port, guest: 22, guest_ip: "0.0.0.0", host: 2222, host_ip: "127.0.0.1", id: "ssh"
```

`guest_ip: "0.0.0.0"`がないと127.0.0.1にバインドされるので他マシンからはつながらない
ADDA > about this tag

This tag ("ADDA") will be used to collect information related to ADDA.
ADDA - light scattering simulator based on the discrete dipole approximation

https://github.com/adda-team/adda/

One of the code, I would like to contribute to speed up. (The other is `T-matrix method for clusters of spheres` written in Fortran).

The code is written in C.
The code is used to numerically simulate the light scattering by particles, which can take shapes of any kind, using dipole placement.
js コメントの書き方一覧

基本系

```js
/**
*タイトル（概要説明）
*@param {引数のタイプ} _引数名 部位
*@return {型}　objectの詳細 {}
*/
```
※param型　一覧 {Number} {String} {Array}{Object}{Boolean}


オブジェクト変数

```js
hogehoge = {
    id:"", //ステージID
    name:""//自分の名前
}
```
[JavaScript] Math.log2は安易に使ってはいけない

# `Math.log2`を安易に使うと起きる問題
`Math.log2(x)`は2を底とする`x`の対数を求める関数であり、ES2015で新規に追加された関数の一つである。
この関数の具体的な利用シチュエーションを安易に考えると、次のようなものが挙げられるだろう。

```javascript
// ある数xが2の累乗数（1, 2, 4, 8, ...）であるかどうかを判定する
function isPowerOf2(x) {
  return x >= 1 && Number.isInteger(Math.log2(x));
}

// ある正整数xを2進数で表記するのに何桁必要かを調べる
function calcNumberOfDigits(x) {
  return Math.floor(Math.log2(x)) + 1;
}
```

ところが、これらのコードは次のような場合にうまく動かない。

```javascript
// Math.log2が未実装の環境でbabel-polyfillのpolyfillを使う場合に再現する
isPowerOf2(Math.pow(2, 29)) // => false（本当はtrueであってほしい）

// こちらは自分が確認した範囲ではどんな環境でも再現する
calcNumberOfDigits(Math.pow(2, 53) - 1) // => 54（本当は53であってほしい）
```

# 問題の原因
何故望ましくない挙動になってしまうのかというと、浮動小数点数の丸め誤差が関係している。

babel-polyfillの`Math.log2(x)`は`Math.log(x) / Math.LN2`として定義されている。
`Math.log(x)`の丸め誤差と除算結果の丸め誤差によって、2の累乗数判定のコードは正しく動かない。

$\log_2(2^{53}-1)$は53よりもほんのわずかに小さい。
そのわずかな差は倍精度浮動小数点数では表現できないので、`Math.log2(Math.pow(2, 53) - 1)`は53に丸められ、桁数カウントのコードは正しく動かない。

このように、これらのコードは浮動小数点数の丸め誤差を発生させるため、2の累乗数付近の入力値では望ましくない挙動になってしまうのである。

# 問題に対する解決策
計算誤差にシビアなケースでは安易に`Math.log2`を使うのは避けるべきだと言うことができる。
では、上記のコードをうまく動作させるにはどうすればいいのだろうか？
解決策としては、以下のような、`Math.log2`を使わない実装が考えられる。

次のようなヘルパー関数を用意する。

```javascript
function helper(x) {
  if (!(Number.isFinite(x) && x !== 0)) return x;

  let f, e;
  if (Math.abs(x) >= 1) {
    for (f = Math.abs(x), e = 0; f >= 2; f /= 2, ++e);
  } else { // 0 < Math.abs(x) < 1
    for (f = Math.abs(x), e = 0; f < 1; f *= 2, --e);
  }
  return {sign: x > 0 ? 1 : -1, fraction: f, exponent: e};
}
```

0でない有限の数について、正確に
$x = \mathrm{sign} \times \mathrm{fraction} \times 2^\mathrm{exponent}$（ただし$\mathrm{sign} \in \\{1, -1\\},\,1 \leq \mathrm{fraction} \lt 2,\,\mathrm{exponent} \in \mathbb{Z}$）となるようにしている。
浮動小数点数に2をかけたり割ったりする操作は（基本的に）計算誤差を発生させないのでこのようなことができる。

このヘルパー関数を使うことで、2の累乗数判定や桁数カウントが正確にできるようになる。

```javascript
// ある数xが2の累乗数であるかどうかを判定する
function isPowerOf2(x) {
  const value = helper(x);
  return typeof(value) === "object" && value.sign === 1 && value.fraction === 1 && value.exponent >= 0;
}

// ある正整数xを2進数で表記するのに何桁必要かを調べる
function calcNumberOfDigits(x) {
  return helper(x).exponent + 1;
}
```

```javascript
isPowerOf2(Math.pow(2, 29)) // => true
calcNumberOfDigits(Math.pow(2, 53) - 1) // => 53
```

# まとめ
**`Math.log2`を使っていいのは、`Math.log2`の結果が丸められても大丈夫な場合だけである。**
それ以外の場合、`Math.log2`を使ったコードは、浮動小数点数の丸め誤差のせいで、2の累乗数付近の値でバグることが多い。
本当にそのコードで大丈夫か確認しておこう。
うっかりMac OS SierraにアップデートしてKarabinerが使えなくなって後悔している人へ

# ご注意！
```
現在（2016/11/13）のKarabiner-Elements 0.90.64では、以下の（キーボードが英語配列として認識される）問題は解決しています。
作者の方、ご対応ありがとうございました。
```

# ここからは、過去の記録の読み物としてお読みください。
はい。私です。

Appleの初物は何が何でも避けるべし。という格言に従い、Mac OS Sierraにアップデートするのを控えていた私ですが、つい先日10.12.1がリリースされたということで、Mac OS Sierraにアップデートしたら…。

見事に落とし穴にハマりました。
それは、Macで外付けキーボードを使っている人御用達[Karabiner](https://pqrs.org/osx/karabiner/)がMac OS Sierraでは動かないという落とし穴に。

![スクリーンショット 2016-10-26 23.40.05.png](https://qiita-image-store.s3.amazonaws.com/0/145575/c614c277-88e8-3ecf-f670-f4d49901dab6.png)

本当はMac用の外付けキーボードを使いたいけれど、まともなキーボードが発売されていないので、仕方なくWindows用キーボードを接続してCommand, Option, Fnキーなどをリマップして使うのに、Karabierは無くてはならないソフトだったわけです[^1]。
[^1]: FILCOさんお願いします。Mac用のmajestouchキーボード発売してください…。
それが使えないなんて…。

#救世主登場
ありがたいことに、後継（暫定？）となるMac OS Sierra対応版を作って頂いているとのことで、早速[Karabiner-Elements](https://github.com/tekezo/Karabiner-Elements)をインストールします。

## ダウンロード
ちょっと見つけづらいですが、dmgファイルはこの部分からダウンロードできます。
![スクリーンショット 2016-10-26 23.43.50.png](https://qiita-image-store.s3.amazonaws.com/0/145575/376add9d-e2d0-0106-8f7b-bea40351bfe5.png)

# しかし、更なる落とし穴が…
Sierraに対応していない**Karabiner と Seilはアンインストールしてから**Karabinerをインストールして、起動をするダイアログボックスが出てきてキーのリマップを設定します。
一通り設定が終わってこれで元の環境に戻れると思ったら…。

なんと、キー配列が**英語配列として認識されてしまう**という新たな問題が発生。
Karabiner-Elementsを終了すると元の日本語配列で認識がされるようになりますので、残念ながらKarabiner-Elementsの問題のようです。

GitHub上の[Issue](https://github.com/tekezo/Karabiner-Elements/issues/278)によると

- v0.90.47, v0.90.48 は動かない。
- v0.90.46 は動く。

とのこと。

# ということで
一旦最新版をアンインストールして[v0.90.46](https://pqrs.org/osx/karabiner/files/Karabiner-Elements-0.90.46.dmg)をインストール。
このバージョンは設定画面ががありませんので、設定ファイルを直接記述する必要があります。

最後に参考として私が使ってる設定ファイルと、その場合のキー配列を貼っておきます。

```json:~/.karabiner.d/configuration/karabiner.json
{
  "profiles" : [
    {
      "selected" : true,
      "simple_modifications" : {
        "japanese_pc_nfer" : "left_command",
        "japanese_pc_xfer" : "right_command",
        "left_option" : "left_command",
        "caps_lock" : "left_control",
        "left_command" : "left_option",
        "application" : "fn",
        "japanese_pc_katakana" : "right_command",
        "right_option" : "right_command"
      },
      "fn_function_keys" : {
        "f12" : "volume_up",
        "f9" : "vk_consumer_next",
        "f5" : "vk_consumer_illumination_down",
        "f10" : "mute",
        "f1" : "vk_consumer_brightness_down",
        "f6" : "vk_consumer_illumination_up",
        "f2" : "vk_consumer_brightness_up",
        "f7" : "vk_consumer_previous",
        "f11" : "volume_down",
        "f3" : "vk_mission_control",
        "f8" : "vk_consumer_play",
        "f4" : "vk_launchpad"
      },
      "name" : "Default profile"
    }
  ]
}
```

![IMG_2092.jpg](https://qiita-image-store.s3.amazonaws.com/0/145575/d0941e50-f236-6255-5e38-86ca78a5908b.jpeg)
PostgreSQLでのデータベース作成方法&削除方法

# PostgreSQLでのデータベース作成方法&削除方法

## 目的
* PostgreSQLで新規データベース(DB)の作成、削除、(確認)ができる

## 実行環境
* PostgreSQL 9.4
* Windows 7

## 事前準備
* PostgreSQLがインストール済み
* PostgreSQLが起動済み

## DBの作成方法
### 1. PostgreSQLへのログイン
コマンドプロンプト等を起動し、インストールしたPostgreSQLのディレクトリのbinまで移動します
コマンド例：```cd C:\Program Files\PostgreSQL\9.4\bin```

ユーザーを指定してPostgreSQLにログインします(今回は「postgres」というユーザーで入ります)
コマンド：```psql -U <ユーザー名>```

コマンド例：```psql -U postgres```

## 2. DBの作成
下記コマンドで作成する
コマンド：```create database <データベース名>;```

作成コマンド例：```create database test_database;```

![createdb.png](https://qiita-image-store.s3.amazonaws.com/0/139291/f5661ced-1b60-af5e-91fb-706b091cac7d.png)


## DB削除方法
作成方法と同じくログインした後、
下記コマンドで削除したいDB名を指定する
コマンド：```drop database <データベース名>;```

削除コマンド例：```drop database test_database;```

![dropdb.png](https://qiita-image-store.s3.amazonaws.com/0/139291/609acf55-c940-2f25-dde1-8c2ea393981d.png)


## 確認
DBの一覧は下記コマンドで確認できる

コマンド：```SELECT * FROM pg_database;```
Trelloでプロジェクト管理はこれで完璧！なAgile Scrum Trello Extension


はこです。こんにちわ。

今日は、私の知る中でもっとも効率的に(無料かつクラウドで)タスク管理を行えるツール [Agile SCRUM for Trello boards](https://chrome.google.com/webstore/detail/agile-scrum-for-trello-bo/njmflagahgdhopbcdilgahjlfiecakpe) について語りたいと思います。





![private | Trello 2016-11-01 19-15-03.png](https://qiita-image-store.s3.amazonaws.com/0/34573/57eb1b1d-15ef-50d8-04be-175354d94228.png "private | Trello 2016-11-01 19-15-03.png")





### タスク管理ツールいろいろ

世の中にはたくさんタスク管理ツールがあります。でも、それぞれに利点や欠点がありますね…。

* BackLog: 1ヶ月は無料。日本語に完全対応しているのは、人によっては大助かり。
* JIRA: アトラシアンが好きな人のためのBackLog
* FogBugs: だいたいおんなじ？日本で使ってる会社見たこと無い
* RedMine,Trac: 自前サーバでやりたい人。rubyかpythonの差。
* GitHub Issue: みんなだいすき。
* ---- ↑↑↑ここまでBTS(バグ追跡システム）寄り↑↑↑ ----
* ホワイトボード&付箋: 好きに書けるので便利。最強。
* Trello: 正直タスク管理としては低機能…。ホワイトボード&付箋貼る、のデジタル版。いつまでも無料で良い。
* GitHub Project: 2016/09/15からの目玉機能。Trelloをさらにシンプルにした感じ


というわけで、Trello は **完全無料、でもちょっと機能が足りない** って感じです。
（いちおうTrelloの有料プランもあります）


### [Agile SCRUM for Trello boards](https://chrome.google.com/webstore/detail/agile-scrum-for-trello-bo/njmflagahgdhopbcdilgahjlfiecakpe) の機能

Trello上に、Chrome拡張機能として実装するタイプの、アジャイル・スクラム向けプロジェクト管理ツール、です！

* ストーリーポイント: Trelloのカードがどれくらいの重さか表示
* 進捗測定: タスクがどれくらい進行し、完了にどれくらいかかるかを教えてくれる
* タグ/カテゴリー/ラベル: Group Cards into tags, User Stories or projects, these are colored automagically to save you time.
* プログレスバー: スプリントの進捗度をカードとリストの背景色でわかりやすく可視化
* ヘッダーセパレーター: Use header separators to group cards inside lists.
* 自動フォントサイズ: 大きなストーリーポイントを持つカードのフォントが、大きく。ひと目で大きなタスクが分かるように。

![private | Trello 2016-11-01 14-30-47.png](https://qiita-image-store.s3.amazonaws.com/0/34573/0f904e67-d667-ab43-b0b1-84cfa0a3d675.png "private | Trello 2016-11-01 14-30-47.png")


### 使い方
すべて、Trelloのカードのタイトルに、以下の書式で入力するだけです！
とてもシンプル！

```text:
# タグ
[Controller] 地図画面を作成
# タグは2つ並べることも可能
[UI][Post] 新しい画面で検索する

# タグは大文字で始める。下の例は小文字開始のためタグにならない
[controller] 地図画面を作成



# ストーリーポイント
# (完了度/全体)で記述する
[Controller] 地図画面を作成 (11/12)
# 微妙なときは小数点以下の表記も可能
[Model] 住宅物件を作成 (7.4/8)
# 以下の例はどちらも未着手のストーリーポイントと解釈される
[Model] 割引クーポンを作成(0/6)
[Model] 割引クーポンを作成(6)



# ヘッダーセパレーター
*** 年末までに達成 ***
*** ビジネス目標 ***
*** 社会奉仕のために ***
# Trelloのリストの中でさらに区切りたい！というのにいつでも使える。日本語OK
```


リスト全体のプログレスバーは、個々のタスクのストーリーポイントの完了度で



### 感想

* 無料
* そこそこ便利
	* Trelloのタグは使いづらいので便利
	* Trelloじゃ工数見積・ストーリーポイント等なかったので便利
	* 進捗状況まで見えてすごく便利
* 微妙
	* カンバン方式（BackLog/ToDo/Doing/DoneとかにTrelloリストを分ける式)と進捗プログレスバーが相性いまいち
	* タグ検索はTrelloのフィルタ機能


ガントチャートのChrome拡張機能とかもあるので( [Elegantt:Trello](https://elegantt.com/) )お金ないときはTrello + Chrome拡張でプロジェクト管理できますね！
Heroku Redis / Heroku Postgres メンテンナンスの仕組み 


Herokuで　Redis / Postgres を運用していると、定期的にメンテナンスを求められることがあるのでそのあたりのメモ。

## メンテナンスの影響について

メンテナンスは大抵元と変わりなく動作することが多いが、メンテナンスの前後で以下のような現象が生じることがある。

- DB/Redis の接続情報が変わることがある？
- DBについてはバックアップのスケジューラ設定が飛ぶことがある？

まれに…というレベルのものなので、障害なのか、どうなのかわからないが、接続情報に関しては変わった瞬間障害になるレベルなので、しっかり環境変数からパースするようにしておきたい。

## スケジューラの設定について

`Premium`以上のプランでは、メンテナンスを指定の曜日・時間で行うよう設定することが可能なので、コレを利用しておくと休日にメンテが走って…といったトラブルを未然に防ぐことが出来る模様。

## Heroku Postgres の設定

メンテナンス情報を参照する

````
$ heroku pg:info
Plan:           Standard 4
Status:         Available
Data Size:      26.1 MB
...
Maintenance:    required by 2014-02-01 00:00:00 +0000
````

メンテナンス時間を設定する。

````
$ heroku pg:maintenance:window DATABASE "Sunday 14:30"
````

https://devcenter.heroku.com/articles/heroku-postgres-maintenance



### メンテナンスコマンドについて


````
$ heroku pg:maintenance -h
Usage: heroku pg:maintenance <info|run|window> <DATABASE>

 manage maintenance for <DATABASE>
 info               # show current maintenance information
 run                # start maintenance
   -f, --force      #   run pg:maintenance without entering application maintenance mode
 window="<window>"  # set weekly UTC maintenance window for DATABASE
                     # eg: `heroku pg:maintenance window="Sunday 14:30"`
````

DATABASE の項目にはDATABASE名が入る。デフォルトは`DATABASE`

Config に入ってくる `xxxxx_URL` の`xxxxx`の部分がDATABASE名になるので、

例えば `HEROKU_POSTGRESQL_GREEN_URL` などの Config が入っている場合には

````
$ heroku pg:info HEROKU_POSTGRESQL_GREEN
````

としてやれば良い

## Heroku Redis の設定

メンテナンス情報を参照する。

````
$ heroku redis:info
=== redis-softly-4514 (REDIS_URL)
Plan:               Premium 7
Status:             available
...
Maintenance:        required by 2016-02-01 00:00:00 +0000
````

メンテナンス時間を設定する。

````
$ heroku redis:maintenance --window="Sunday 14:30"
````

https://devcenter.heroku.com/articles/heroku-redis-maintenance

ドキュメントでは plugin のインストールが必要と書かれているが、現在はcoreに組み込まれている様なので不要っぽい。

postgres と違って `window`がoptionとなっており`--`が必要。

ナゼこういう仕様なのかはわからないが、合わせて作業していると詰んだりするので注意。
awkを使った、SQLのin句用パーツの組み立て

# やりたいこと
動的に生成されたID一覧があって、それをSQLのIN句のパーツとして使いたい。


```target_id_list.txt
10001
10002
10003
10004
10005
```

```target_id_list_string.txt
a0001
a0002
a0003
a0004
a0005
```

これを id in(10001,10002,10003,10004,10005) みたいな感じにしたい。
特に、IDが文字列の場合はシングルクォートで囲ったりしたい。
さらに、Redshiftに対してunloadするクエリにも使いたい。

エクセルやテキストエディタに貼り付けて置換をするとソウルジェムが少し淀むので、コマンドで、主にLinux上で完結できる方向にしたい。

# 地味に襲ってくる課題
1. 普通にループすると最初or最後にカンマが付いてしまうので除去が必要
2. 中身が文字列だと、シングルクォートが必要
3. Redshiftにunloadとして投げる場合にシングルクォートにエスケープが必要


# 解決ステップ

## "1. 普通にループすると最初or最後にカンマが付いてしまうので除去が必要" への対処


awk先生お願いします！

```
[sample@test tmp]$ awk '{ if(NR==1){print " " $1 }else{print "," $1 } }' target_id_list.txt
 10001
,10002
,10003
,10004
,10005
```

2行目以降はカンマをつける、という処理。
NRで行数の判定が出来るので、比較的きれいに書ける。


## "2. 中身が文字列だと、シングルクォートが必要" への対処



```
[sample@test tmp]$ awk '{ if(NR==1){print " \047" $1 "\047" }else{print ",\047" $1 "\047"} }' target_id_list_string.txt
 'a0001'
,'a0002'
,'a0003'
,'a0004'
,'a0005'

```

awkでは、シングルクォートは\047で表現可能（初見殺し）。
※参考 
http://gauc.no-ip.org/awk-users-jp/blis.cgi/DoukakuAWK_080


## "3. Redshiftにunloadとして投げる場合にシングルクォートにエスケープが必要" への対処

```
[sample@test tmp]$ awk '{ if(NR==1){print " \\\047" $1 "\\\047" }else{print ",\\\047" $1 "\\\047"} }' target_id_list_string.txt
 \'a0001\'
,\'a0002\'
,\'a0003\'
,\'a0004\'
,\'a0005\'
```

Redshiftでunloadをする場合、シングルクォートは\でエスケープが必要となるため、上記に加えさらに\\\\ を追加して \\\\\\047 とする。




## 余談
上記の文章をQiitaの記事としては以下の通りとなる。

```
上記に加えさらに\\\\ を追加して \\\\\\047 とする。
```

以上、エスケープ祭り会場からお送りしました。
地域経済分析システム（RESAS：リーサス） API を使ってみる（１）

### 地域経済分析システム（RESAS：リーサス） API  とは

[地域経済分析システム（RESAS：リーサス）](https://resas.go.jp)のAPIがつい最近（2016年11月1日）公開されました。  

* [RESAS API](https://opendata.resas-portal.go.jp/)

API を使うには、

* API-KEY を取得  上記URLから取得してください。
* API-KEY を設定して、ほしいデータをGETします。

(例) python でのコード例です。都道府県のコード一覧をとってきます。api-key の部分は入れ替えてください。json で戻ってきます。[python は、jupyter notebook で簡単につかえますので、windows の方も試してみましょう。](http://qiita.com/zanjibar/items/6c33693474390db31e34)

```
import requests,json
def get_resas(key,url):
    x = json.loads(requests.get('https://opendata.resas-portal.go.jp/' + url, 
                 headers={'X-API-KEY':key}).text)
    return(x['message'],x['result'])
get_resas('ここにAPI-KEY','api/v1-rc.1/prefectures')
```

戻り値は、こんな感じ

```
(None,
 [{'prefCode': 1, 'prefName': '北海道'},
  {'prefCode': 2, 'prefName': '青森県'},
  {'prefCode': 3, 'prefName': '岩手県'},
  {'prefCode': 4, 'prefName': '宮城県'},
```
開発環境マシンに書いておきたいdockerコマンドのalias

最低限よく使うものを。。
dockerと打つはずがにdockrrとかなってイライラする方におススメ

```bash
$ vi .bashrc or .bash_profile
```

```bash
# 追記する

# 実行中のコンテナ表示
alias dp='docker ps'
# docker起動
alias dcu='docker-compose up -d'
# docker停止
alias dcd='docker-compose down'

# dockerコンテナを指定してコンテナ内に入る
function de() {
    docker exec -it $1 bash
}
```

```bash
$ source .bashrc or .bash_profile
```

__使用例__

```bash
$ dp

CONTAINER ID        IMAGE                       COMMAND                  CREATED             STATUS              PORTS                         NAMES
6b97f719eb06        dockernginxproxyphp_nginx   "nginx -g 'daemon off"   46 minutes ago      Up 46 minutes       0.0.0.0:80->80/tcp, 443/tcp   dockernginxproxyphp_nginx_1
349b875fb013        dockernginxproxyphp_php56   "php-fpm"                46 minutes ago      Up 46 minutes       9000/tcp                      dockernginxproxyphp_php56_1
df26128b6e2d        dockernginxproxyphp_mysql   "docker-entrypoint.sh"   46 minutes ago      Up 46 minutes       0.0.0.0:3306->3306/tcp        dockernginxproxyphp_mysql_1

# php-fpmコンテナに入る
$ de 349
root@349b875fb013:/var/www/html# 
```
pg_dump と pg_restore を並列で実行して高速化する

# pg_dump, pg_restore 実行時のパラメータ

`-j` パラメータを指定する

```
 -j, --jobs=NUM 　　              use this many parallel jobs to dump
```
https://www.postgresql.org/docs/9.5/static/app-pgdump.html
https://www.postgresql.org/docs/9.5/static/app-pgrestore.html

## pg_dump の場合

```
$ pg_dump -j -v NUMBER_OF_PARALLEL_JOBS -Fd -U POSTGRES_USER -h POSTGRES_HOST -d DB_NAME -f OUTPUT_DIRECTORY
```
- `-Fd` (directory output) と一緒にしか使えない。`-Fc` 等は不可。
- streaming replication をしているslaveサーバに対しては以下のエラーが出て実行できず、primaryサーバでのみ実行可能だった。

```
pg_dump: [archiver (db)] query failed: ERROR:  cannot assign TransactionIds during recovery
pg_dump: [archiver (db)] query was: SELECT pg_catalog.pg_export_snapshot()
```
- 自分が試した範囲では、並列数を増やすとほぼ線形に時間が短縮され、DBと同じコア数のサーバでpg_dumpを走らせ、`NUMBER_OF_PARALLEL_JOBS`をコア数に合わせた時が最速だった。
- ただし、１プロセスで１テーブルを順々にdumpしているようで、最も大きなテーブルのdumpに必要な時間にひきづられて、そこからは時間が短縮できなくなった
- (要ソース/ドキュメント確認) 並列で動かした時は実行時間を最小にするため、大きなテーブルを最初に処理している。並列で無い時はテーブル名のアルファベット順。pg_restoreの処理される順番はdumpと一緒になるので、pg_restoreを並列で実行する場合はpg_dumpも並列で行うほうが望ましいっぽい

## pg_restore の場合

```
$ pg_restore -j NUMBER_OF_PARALLEL_JOBS -Fd -U POSTGRES_USER -h POSTGRES_HOST -d DB_NAME --format=directory DUMP_FILE_DIRECTORY
```

- こちらは`NUMBER_OF_PARALLEL_JOBS`を増やしてもpg_dumpほどの性能向上は見られず。restrictionのチェック等の関係で並列に走らせれる箇所が限られているっぽい。
- データ量が多いが、制約が少ないデータベースであれば、大きな向上があるのかもしれない。(未確認)
- (要ソース/ドキュメント確認) pg_dumpを並列で行わなかった場合、pg_restoreを並列にしても、テーブル名のアルファベット順でrestoreが行われたので、最後にheavyなテーブルが来た場合は少しオーバーヘッドが生まれる可能性がある。

# Postgresql本体のparameter設定
`maintenance_work_mem`, `checkpoint_segments`, `checkpoint_timeout` パラメータの見直し、autovacuumのdisableなどを行っておく。 サーバのスペック等に依存するので、自分で色々と試してみるべし。restoreが終わったらパラメータを元に戻すのを忘れずに。また、RDS独自のconfigとして、RDSのmulti-AZを無効にすることや、EBSのIOPSに関する箇所が影響(gp2を使う場合はdiskサイズによって、IOPSが変わり、また初期クレジットがあるので、diskサイズによってはクレジットがある状態でpg_restoreをした方が速い)します。
参考：
https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/PostgreSQL.Procedural.Importing.html
http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html
ioドメインの障害を受けて、サイト運営者として何をしておけば良いか考えた

2016/10/28にioドメインで障害が発生したことを受けて、運営しているサービスで今後どうすべきかを考えてみた。
長くなってしまったので結論だけ書くと、ccTLDではなくて、gTLDを使いましょうということです。

## 弊社のサービス運用状況
.comで運用しているサービスが1つ、.ioで運用しているサービスが2つ、合計3サービス運用中。
DNS周りは全サービスRoute53を使って運用している。

## 当日何があったか？
[詳しくはこちらの方の記事をどうぞ。](http://qiita.com/MasahitoShinoda/items/40cd312fabc6db604b39)

簡単障害の内容を言うと.ioの一部のネームサーバーにおいてDNS名前解決に失敗しており、該当ドメインのサービスにアクセスができないことが発生していた。
※あくまで一部のネームサーバーなので、完全にioサービスがダウンしていたわけではなく、アクセスする度に正しい結果が返ってくることもあった。

今回比較的大きな問題になったのは.ioで運用してるサービスで尚且つサブドメインで運用しているサービス。
運良く（？）メインドメイン（example.io的な）に関して影響が小さかったのはRoute53のNSレコードのTTLが比較的長く設定されていたためだったと思う。

## 何故大きな問題になったか？
（※便宜的にexample.ioというドメインを使いますが、本来は別のサービスですw）

現象としては、example.ioはアクセスできたが、api.example.ioにはアクセスできなくなった。
理由としてはTTLの時間がネックになっていたと思われる。

具体的には、このサブドメインはRoute53のAレコードのAliasで設定されていた。
このAliasで設定したものはTTLが設定ができずにデフォルトでTTL60秒が設定される。
簡単に言えば60秒毎に名前解決を行おうとする。その時に名前解決が出来ずにエラーになっていた。

逆にメインドメイン（example.io）で大きな問題にならなかったのはこのTTLが長く、キャッシュが使われており、問題となったネームサーバーに名前解決をする頻度が少なかったからだと思われる。

## 対処方法は何を考えたか？
- iPhoneアプリで使ってるAPI先を複数用意して切り替えられるようにする
→申請が必要なため早急に修正-デプロイというフローを取ることができなかったため対応はしないことにした。

- 該当のサブドメインのレコードにTTLを設定する
→AliasだとTTLの設定ができず断念

## 当日の対応と今後について
そうこうしていたら復旧してきたので今回に関しては特別何か対応はしていない。
そして今回の問題に関して、AWSに相談してみた結果、以下のような回答を頂いた。

- そもそもccTLDよりgTLDを使いましょう。何故ならgTLDはICANNとの契約上、SLA100%保証している。
- AliasだとTTLが設定できないから、やるならCNAME使ってTTL設定しましょう。但し今回みたいに参照時に問題発生してたら意味ないよ。[AliasとCNAMEの違いはこちらとかを参考に。](http://dev.classmethod.jp/cloud/aws/amazon-route-53-alias-records/)


## 今回学んだこと
- 今まであまり気にしてなかったccTLDとgTLDの差
- CNAMEとAliasの差
- サービス運用という観点だと、ccTLDよりもgTLDで運用した方が良さそう（かっこいいから、最近の流行りだからって理由でccTLDを使わないほうがよさそう・・）
ペーストした時にスタイルが崩れるのが腹立たしい


たとえばブラウザからテキストをコピーしてメールに貼るとか、エディタからコードをコピーしてEvernoteに貼るとか、人類は死ぬまでコピーアンドペーストをしなければならない。しかしペーストした時にスタイルが崩れてバックグラウンドカラーがそのまま残ったり、フォントが変わったり、フォントサイズが変わったりするのは許せないので「paste and match style」をショートカットキーに設定して幸福を実現します。OS X 10.9.5 でやってますが、OS X ならだいたいどれでもできるはず。ジョニーが OS X を改悪し続けているのでそのうち使えなくなるかもしれない。あと日本語環境で使ってる人は多分ショートカットに設定する名前が違うけどそれは自分で調べてください。

System Preferences の Keyboard を開きます。

![Screenshot 2016-11-02 11.25.02.png](https://qiita-image-store.s3.amazonaws.com/0/400/4ade297f-0463-20b3-f14a-ff797733beb7.png "Screenshot 2016-11-02 11.25.02.png")

App Shortcuts を設定します。

![Screenshot 2016-11-02 11.26.32.png](https://qiita-image-store.s3.amazonaws.com/0/400/f20f26ae-4d87-97ce-54d5-bdec4eccd78c.png "Screenshot 2016-11-02 11.26.32.png")

こんな感じに設定すると使いやすいのではないかな。普段の ⌘+C を押すように、ちょっと親指を寝かせてオプションキーも押しながらペーストするとばっちりです。gifとか貼るのめんどいから自分で試してほしい。

![Screenshot 2016-11-02 11.27.19.png](https://qiita-image-store.s3.amazonaws.com/0/400/a1bdca8b-40af-143d-72a8-e59b93b15ae9.png "Screenshot 2016-11-02 11.27.19.png")

これで生産性アゲアゲですがブラウザ上で編集する Google documents とかだと認識してくれないのが腹立たしい。仕方ないので手元のエディタで編集してから docs に貼り付けるのが吉。
Mailgunからメールきた(2016/11/2付)


## 内容
2016/11/2に

```件名
Mailgun Service Changes: Domain Verification Changes for New and Existing Mailgun Domains
```
というメールが来た。


要は未確認のドメインとサンドボックスのドメインがないか確認してほしいという中身だった。

今回は特に自分が変更することはなかったが、何かの参考に書き残しておく。



## 抄訳

**2016/11/1から**

- この日付より後に作成されたドメインはメールの送受信のためにDKIMとSPFレコードを使用した確認が必要です。


**2016/12/1から**

- 作成日時にかかわらず全てのドメインはメールの送受信が利用し続けられるように確認が必要です。

- 全ての`mailgun.org`のサブドメインは`sandbox domains`として扱われます。
※sandbox domain は認可された最大5件の受信者のみにメールが送れるドメインです。

今回の変更が影響するかどうかは下記ステップを進めて判断してください。


**未確認のドメインの確認**
1. Mailgun にログインし、`Domains`タブを押します。
2. オレンジの`unverified`の状態になっているドメインがあれば選択します。
3. `Domain Verification & DNS`セクションで赤く`warning`が表示されている箇所を確認してください。
4. `DNS Records for Sending`に書かれている全てのレコードを自分が利用しているDNSプロバイダーの管理画面から入力してください。有名どころのプロバイダーに対しては[ガイド](https://help.mailgun.com/hc/en-us/articles/202052074-How-do-I-verify-my-domain-)があります。
5. レコードを追加したら`Check DNS Records Now`ボタンを押します。Mailgunが新しいレコードを解決するのにキャッシュによって最大24時間かかります。
6. 一度確認が成功するとドメインが`verified`状態に変わります。


**サンドボックスドメインの確認**
1. Mailgun にログインします。
2. トップページの`Sandbox Domains`の表示がある箇所でドメインがあるかを確認します。
3. 自分のアプリがそのドメインでメールの送受信をしていないか確認します。もし利用している場合は`Sending Domains`セクションで`Add New Domain`ボタンを押して新しくドメインを作成します。
アジャイル勘違い集

# アジャイル勘違い集

## Q.アジャイルだから計画立てないんだよね？
:thought_balloon:違います。プロジェクトの進行とともに計画を変更していきます。

## Q.アジャイルってドキュメントいらないんだよね？
:thought_balloon:違います。動作するソフトウェア＞包括的なドキュメントという概念があるだけです。
http://agilemanifesto.org/iso/ja/manifesto.html

## Q.アジャイルってウォーターフォールより早く終わるんだよね？
:thought_balloon:**終わる**の定義次第で変わってきます。それはウォーターフォールもアジャイルで開発しても変わらないはずです。

## Q.アジャイルってウォーターフォールよりコストがかからないんだよね？
:thought_balloon:**終わる**の定義次第で変わってきます。白物家電型の開発であれば、ウォーターフォールでもアジャイルでも変わらないと思います。ただ、Webサービスを提供するのであれば、終わりはないと思います。

## Q.アジャイルって仕様変更は自由なんだよね？
:thought_balloon:完全に自由ではありません。原則として、スプリントやイテレーションの最中に変更はしないことをオススメします。

## Q.アジャイルだからプロジェクトの掛け持ちってできるよね？
:thought_balloon:掛け持ちはオススメしません。頭の切り替えによるオーバーヘッドにより、生産性が著しく落ちます。プロジェクトの優先度を決める文化を定着させ、専任チームを組むことをオススメします。

## Q.アジャイルって、一人でやってもいいの？
:thought_balloon:プラクティスやマインドの部分を実践していくのは非常に良いことだと思います。ぜひ体験談を聞いてみたいです。
Development targetをiOS10にしてしまえば3.5インチサイズを気にしなくてもいい・・・よくなかった（愚痴）

iOS10がiPhone4sをサポート対象から外したので、3.5インチサイズを気にしなくてもいいな！！
ラッキーと思いながら開発をしていたんですが、iPadで表示してみたら3.5インチサイズで表示されるじゃないか・・・。なんてこった。
ユニバーサルアプリにしろってことなのか・・・
JavaScriptでDateオブジェクトを作るのに頑張った話

## はじめに

JavaScriptで日時とかを扱う際は、基本的にDateのオブジェクトでやり取りすると思います。

ところで、とあるAPIのレスポンスで、こんなのが返されてきました。

```
{
    date: '20161101',
    time: '123456'
}
```

泣きたくなりました。:innocent:

## 頑張ってみた

[JavaScript の Date は罠が多すぎる](http://qiita.com/labocho/items/5fbaa0491b67221419b4 "JavaScript の Date は罠が多すぎる")

上記を参考にいろいろ調べてみた結果、こうなりました。

```
let date = '20161101';
let time = '123456';

let jsTime = new Date(
    Number(date.slice(0, 4)),
    Number(date.slice(4, 6)) - 1,
    Number(date.slice(6, 8)),
    Number(time.slice(0, 2)),
    Number(time.slice(2, 4)),
    Number(time.slice(4, 6))
);
console.log(jsTime);
// 2016-11-01T03:34:56.000Z
```

JavaScriptの世界だと、月は0から始まるらしいです。
泣きたくなりました:innocent:

## Moment.jsを使う

JavaScriptのDateは貧弱だったので、どうにかできないかぐぐったところ、[Moment.js](http://momentjs.com/ "Moment.js")というライブラリがありました。

```
let date = '20161101';
let time = '123456';

let momentTime = moment(date + time, "YYYYMMDDHHmmss").toISOString();

console.log(momentTime);
// 2016-11-01T03:34:56.000Z
```

いい感じで戦えそうです:tada:

## まとめ

もしAPIのレスポンスに日時を入れることがあれば、JavaScriptのことを思いやって[ISO 8601](https://ja.wikipedia.org/wiki/ISO_8601 "ISO 8601")に従いましょう。

```
{
    dateTime: '2016-11-01T03:34:56.000Z' // 2016-11-01T12:34:56+09:00 でも大丈夫
}
```

```
let dateTime = '2016-11-01T03:34:56.000Z'
let jsTime = new Date(dateTime); // そのまま入る！！！
console.log(jsTime);
// 2016-11-01T03:34:56.000Z
```
Sublimetext |  サイドバーをキーボードで操作する

# 操作方法

`Ctrl + 0` でサイドバーにフォーカスを移す。

- `上下` : カーソル移動
- `右` : フォルダを開く
- `左` : フォルダを閉じる、または上の階層に移動する
- `Enter` : ファイルを開く

(Sublime歴1年半ではじめて知った)

# 環境

- Mac OSX El Capitan
- Sublimetext Stable Build 3216

# 参考

- http://stackoverflow.com/questions/15178358/how-to-use-sidebar-with-the-keyboard-in-sublime-text-2-and-3








<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
ReactのStateless Functional Componentsの書き方


# 前口上

Reactコンポーネントの書き方には幾つかあります。状態を持たないコンポーネントは`Stateless Functional Components`で書くと、実装の中身を見なくても状態を持たないことを明示できます。なかなか良い書き方ですが、書き方を忘れるので記録を残します。SFCと書くと湘南藤沢キャンパスを思い起こさせる点もちょっと面白いです。

# プロパティがない場合
外部から値をうけとらない、固定値を表示するコンポーネントは簡単です。
`render`相当の関数を定義します。

```jsx
const Hello = function() {
  return <div>Hello SFC</div>
}
```

アロー関数を使えば

```jsx
const Hello = () => <div>Hello SFC</div>
```

と書けます。カジュアルにコンポーネントを作れる点が好きです。

# プロパティがある場合
コンポーネントで`props`を使う場合は、関数の引数でDestructuringして受け取ります。

```jsx
const Hello = ({name}) => <div>Hello {name}</div>
```

https://jsfiddle.net/uqwtwuz1/3/


## プロパティの型定義をするには
コンポーネント関数に`propTypes`プロパティや`defaultProps`プロパティを定義します。

```jsx
Hello.propTypes = {
  name: React.PropTypes.string
}

Hello.defaultProps = {
  name: 'SFC'
}
```


# 参考
- [【React】コンポーネントをシンプルに書くためのStateless Functional Componentsについて | mae's blog](http://mae.chab.in/archives/2854)
- [Stateless な React Component の記法をまとめてみた - Qiita](http://qiita.com/kotaroito/items/e36ebac185b6b1d8538d)
自分なりのWordPressの修正・改造方法のやり方

WordPressを触り始めて２、３ヶ月経過して、いろんな人から「あんな機能いれてほしい」「こんな機能があったらいいな」と要望を頂き、それに沿う形で実装をしてきて自分なりのWordPressのいじり方が確立してきたので共有したいなと思います。

###例：welcartの受注リスト詳細画面の管理者メモの下にフリーテキスト項目を追加
1. 何かをしたい画面のHTML要素をデベロッパーツールなどで調べる。
2. 要素のidもしくはclassをWordPress全体から調べる（管理者メモのinput要素のclass「order_memo」を検索）
3. 該当要素を出力している関数を見つける（usces_order_memo_form_detail_top関数にて管理者メモ要素を出力している）
4. 該当関数をさらに全検索にかける
5. add_actionやadd_filterしている部分を見つける

```php:default_filters.php
add_action('usces_action_order_edit_form_detail_top', 'usces_order_memo_form_detail_top', 10, 2 );）
```

6. functions.phpに機能追加したいことを実装する

例

```php:functions.php
// フリーテキスト項目のinput要素を出力
add_action('usces_action_order_edit_form_detail_top', 'my_usces_action_order_edit_form_detail_top', 10, 2 );
function my_usces_action_order_edit_form_detail_top($data, $csod_meta) {
	global $usces;
	$order_freetext = '';
	if( !empty($data['ID']) ){
		$order_freetext = $usces->get_order_meta_value('order_freetext', $data['ID']);
	}

	$res = '<tr>
				<td class="label border">フリーテキスト</td>
				<td colspan="5" class="col1 border memo">
					<textarea name="order_freetext" class="order_memo">'.esc_html($order_freetext).'</textarea>
				</td>
			</tr>';
	echo $res;
}
// フリーテキストの更新処理
add_action('usces_action_update_orderdata', 'my_second_usces_action_update_orderdata', 10, 5);
function my_second_usces_action_update_orderdata($new_orderdata, $old_status, $old_orderdata, $new_cart, $old_cart) {
	global $usces;
	if( isset($_POST['order_freetext'])) {
        // filter_inputにてPOST値をチェック
		$text = (string)filter_input(INPUT_POST, 'order_freetext');
		$usces->set_order_meta_value('order_freetext', $text, $new_orderdata->ID);
	}
}
```

とまあ、こんな感じの考え方で私はWordPress、Welcartを改造しまくっています。
例として受注リストにフリーテキスト項目を追加するを書きましたが、今後時間があれば他に実装したことも共有していきたいと思います。
.NETCoreプロジェクトでビルドやxunitテストをgitlab-ciでやる


# 概要

[Visual Studio Team Services](https://www.visualstudio.com/ja/vso/)を使えばすぐにCIできる環境が手に入るのに、という声はさておき。
GitLabが好きな私は、GitLabでやる方法を探したくなったというわけ。

.NETCoreの[Unit Testing using dotnet test Sample](https://github.com/dotnet/docs/tree/master/samples/core/getting-started/unit-testing-using-dotnet-test)を題材に、これをビルドしたりテストするのをGitLab上でやることを目指します。

.gitlab-ci.ymlの書き方をメインにご覧ください。

# 対象物の取得

[Unit Testing using dotnet test Sample](https://github.com/dotnet/docs/tree/master/samples/core/getting-started/unit-testing-using-dotnet-test)

ビルド、テストする対象が必要なので、こちらをcloneして、テストされるプロジェクト、テストプロジェクトを取得します。

# gitlab-ci

次に、ビルド、テストする処理を書いた.gitlab-ci.ymlファイルを作成し、GitLabレポジトリにコミットしましょう。

[Building Docker Images for .NET Core Applications](https://docs.microsoft.com/en-us/dotnet/articles/core/docker/building-net-docker-images)によると、build scenariosにはsdkがついたイメージを使うと良いようなので、[microsoft/dotnet:sdk](https://hub.docker.com/r/microsoft/dotnet/)イメージを使うことにしました。

ビルドステージでは、ビルドを。テストステージでは、PrimeService.Testsでテストを実行するという２つのジョブ構成です。

テストプロジェクトの方をビルドすると、テストされる側のプロジェクト（ここではPrimeServiceプロジェクト）もビルドされるので、テストの方だけビルドする例としました。

```yaml
image: microsoft/dotnet:sdk
stages:
  - build
  - test
job1:
  stage: build
  script:
    - dotnet restore
    - cd test/PrimeService.Tests
    - dotnet build
  only:
    - master
  tags:
    - docker
    
job2:
  stage: test
  script:
    - dotnet restore
    - cd test/PrimeService.Tests
    - dotnet test
  only:
    - master
  tags:
    - docker
```


# commit & push

後はリポジトリ側で変更があると、勝手にCIが走るので、Pipelineから実行結果を確認できます。

## Pipelineでの概要表示

![Pipelines dotnet core test · GitLab.png](https://qiita-image-store.s3.amazonaws.com/0/111676/3959dcf4-9cfb-547f-fffa-df2df94c17b9.png)

## Pilelineの詳細表示

![Pipelines dotnet core test · GitLab2.png](https://qiita-image-store.s3.amazonaws.com/0/111676/7f16bed1-2cef-410a-7969-bd82d179362e.png)
Submoduleを含んだGitリポジトリをHerokuにアップしようとして（Push rejected, submodule install failed）

Herokuにgit submoduleを含んだリポジトリをプッシュしようとしたら下記のようなエラーが出た。

```
remote: Git submodules detected, installing:
remote: Submodule '***' (***) registered for path '***'
remote: Cloning into '***'...
remote: Host key verification failed.
remote: fatal: Could not read from remote repository.
remote: 
remote: Please make sure you have the correct access rights
remote: and the repository exists.
remote: Clone of '***.git' into submodule path 'public/themes/misoca' failed
remote: 
remote: !	Push rejected, submodule install failed
remote: 
To https://***
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'https://***'
```

## 解決方法

参考URLにあるようにリポジトリのルートにある`.gitsubmodule`を編集してリポジトリの指定の仕方を`git:`ではなく`git://`の形式にしてやれば良い。


>Change all public submodule URLs (if any) from using the ssh transport URLs to readonly git transport URLs (i.e., from git@github.com:yaniv-aknin/public-project to git://github.com/yaniv-aknin/public-project

## 参考

[git - Heroku push rejected, Submodule install failed - Stack Overflow](http://stackoverflow.com/questions/13362288/heroku-push-rejected-submodule-install-failed)
kubectl で OpenID Connect ID トークンをリフレッシュする

## はじめに

Kubernetes クラスタの認証に OpenID Connect ID トークンを利用するとき、kubectl からクラスタを操作するには、ID トークンを kubeconfig ファイルのユーザエントリ `token` として設定します。

```
kubectl config set-credentials admin --token=bearer_token
```

このとき、設定した ID トークンの有効期限が切れると認証に失敗してしまいます。一般的に ID トークンの有効期限が切れたら、リフレッシュトークンを使い ID トークンをリフレッシュする必要があり、ユーザエントリで `token` を使っているとリフレッシュした ID トークンを改めて kubeconfig ファイルに設定し直す必要がありました。
この問題は、kubeconfig ファイルのユーザエントリに `token` ではなく、OpenID Connect のトークンリフレッシュのフローを実行してくれる `auth-provider=oidc` を利用することで解決します。

## --auth-provider=oidc

`kubectl config set-credentials` のヘルプにちょろっとしか記述されていませんが、kubeconfig ファイルのユーザエントリに auth-provider という機能が存在します。auth-provider はクラスタへリクエストするときに、認証部分の処理を認証プロバイダに委譲できる機能です。v1.4.4 時点で Google Cloud Platform と OpenID Connect が提供されており、OpenID Connect の場合は以下のように設定します。

```yaml
# Enable the OpenID Connect auth provider for the "cluster-admin" entry with additional args
kubectl config set-credentials cluster-admin --auth-provider=oidc --auth-provider-arg=client-id=foo --auth-provider-arg=client-secret=bar
```

上記の例は `kubectl config set-credentials` のヘルプの出力なんですが、必須のパラメータであろう Issuer URL などの値を設定する方法はドキュメントに存在しないので今のところソースコードをみるしかありません。

- https://github.com/kubernetes/kubernetes/blob/release-1.4/plugin/pkg/client/auth/oidc/oidc.go

キー名 | 概要
--- | ---
idp-issuer-url | Identity Provider Issuer URL
client-id | クライアント ID
client-secret | クライアントシークレット
idp-certificate-authority | Identity Provider の CA 証明書ファイルのパス
idp-certificate-authority-data | base64 エンコードされた Identity Provider の CA 証明書のデータ
extra-scopes | 追加で取得する属性情報 (デフォルト: openid, email, profile)
id-token | ID トークン
refresh-token | リフレッシュトークン

これらのキーを `--auth-provider-arg` に適切に設定することで ID トークンの有効期限が切れていても kubectl がリフレッシュトークンを使い ID トークンをリフレッシュしてくれます。

## まとめ

Kubernetes の認証に OpenID Connect ID トークンを使っているなら、ID トークンをリフレッシュするために `--auth-provider=oidc` を使いましょう。

- [Kubernetes \- kubectl config set\-credentials](http://kubernetes.io/docs/user-guide/kubectl/kubectl_config_set-credentials/)
- [Kubernetes \- Authenticating Across Clusters with kubeconfig](http://kubernetes.io/docs/user-guide/kubeconfig-file/)
- [Kubernetes \- Authenticating](http://kubernetes.io/docs/admin/authentication/#openid-connect-tokens)
- [Kubernetes の認証と dex \- Qiita](http://qiita.com/superbrothers/items/1822dbc5fc94e1ab5295)
CakePHP-Observerパターン使い方

#Observerパターンとは
簡単に説明するとプログラム内のオブジェクトの状態を観察するようなプログラムで使われるDesignパターン。

以下のイメージのように、イベントを発生させる部分、そのイベントを観察してイベントに対して処理を行うリスナーで構成されます。

![f0e5b8d7-a64d-41c7-1b75-66c44dc7d421.png](https://qiita-image-store.s3.amazonaws.com/0/108475/5d2c911f-6353-9ef0-52f1-0a41abee9a76.png)


詳細は以下を参照してください。
https://ja.wikipedia.org/wiki/Observer_%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3

今回はCakeEventを利用したObserverパターン実装してみます。
参考：
http://andy-carter.com/blog/events-in-cakephp-2-using-the-observer-pattern




##以下のコードを見てみましょう。
ユーザー情報を保存して成功だったらメールを送るコードです。


```lang:
if($this->User->save($this->data)) {
  $this->Email->send('saved');
}
```

このコードを単純にControllerでロジックを実装して、EmailUtilityをつくって実装するコードですがこれを
Observerパターンで実装してみます。

#①Raise Event : モデルにイベントを発生させるコードを追加します
App-Model-User.php

```lang:User.php

<?php
App::uses('AppModel', 'Model');
App::uses('CakeEvent', 'Event');

class User extends AppModel {

    public function afterSave($created, $options = array()) {
        parent::afterSave($created, $options);
        if ($created === true) {
            // アカウントが追加されるとEvent発生
            $Event = new CakeEvent('Model.User.created', $this, array(
                'title' => 'アカウント追加',　　　　　　　//メールタイトル設定
                'content' => 'アカウントが追加されました。'　//メール内容設定
            ));
            $this->getEventManager()->dispatch($Event);
        }
    }
}
```

#②イベントリスナー追加
app/Lib/UserListener.php追加

```lang:UserListener.php
<?php

App::uses('CakeEventListener', 'Event');
App::uses('CakeEmail', 'Network/Email');

class UserListener implements CakeEventListener {

    public function implementedEvents() {
        return array(
            'Model.User.created' => 'sendConfirmationEmail',
        );
    }

    public function sendConfirmationEmail(CakeEvent $Event) {
        $email = new CakeEmail('gmail');                            　// gmail設定
        $email->from( array( '送信メールアドレス' => 'Sender'));   　　// 送信元
        $email->to( '相手のメールアドレス');                          　// 送信先
        $email->subject( $Event->data['title']);                  // メールタイトル
        $email->send($Event->data['content']);　　　　　　　　　　　// メール内容
        return;
    }
}
```
# ※gmailでメール送信したい場合、以下の設定が必要
app/Config/email.php

```lang:email.php
    public $gmail = array(
        'host' => 'ssl://smtp.gmail.com',
        'port' => 465,
        'username' => 'gmailアカウント', // ユーザ名
        'password' => 'パスワード',           // パスワード
        'transport' => 'Smtp',

    );
```
これだとエラーが発生します。
「SMTP Error: 534 5.7.14 https://support.google.com/mail/bin/answer.py?answer=78754 ~~ - gsmtp」
gmail側の設定で、安全性の低いアプリがアカウントにアクセスするのを許可するという設定を有効にしないといけないです。
設定方法は以下
https://support.google.com/accounts/answer/6010255?hl=ja


#③リスナー設定
app/Config/events.php追加

```lang:events.php
<?php
App::uses('CakeEventManager', 'Event');
App::uses('UserListener', 'Lib/Event');
CakeEventManager::instance()->attach(new UserListener());
```

#④bootstrap.phpに以下の内容追加
```lang:bootstrap.php
require_once APP . 'Config' . DS . 'events.php';
```

これでユーザーを登録すると自動的に登録完了メールがgmailで送られます。