OmniAICreator/Qiita-1.07M huggingface dataset:
Slackを使ってPodcastを録ってる話

# What is this?
この記事は [YAP(achimon)C::Asia Hachioji 2016 mid in Shinagawa](http://yapcasia8oji-2016mid.hachiojipm.org) のLT原稿です。

---

#伝えたいこと3つ
### 1. Podcastを配信するのは簡単です
### 2. Slackで楽にリモート収録できます
### 3. Podcast をはじめませんか？
---
#好きなPodcast
* [Rebuild.fm](https://rebuild.fm)
* [wada.fm](http://www.wada.fm)
* [だんごゆっけの平和な話](http://dandy.fm)

---
#配信しているPodcast
* [Iwata-san Podcast](http://iwata-san.jpn.org "link")
* 故・岩田聡さん(任天堂前社長)について語る
* DJ: [めぐめ](https://twitter.com/megume_wakame "めぐめ")さん, 自分

![megume](http://iwata-san.jpn.org/wp-content/uploads/2016/01/HAA_0096-150x150.jpg) ![masaki](http://iwata-san.jpn.org/wp-content/uploads/2016/01/HAA_0001-150x150.jpg)

---
<img width="780" alt="スクリーンショット 2016-07-02 12.25.26.png" src="https://qiita-image-store.s3.amazonaws.com/0/56701/ff06f0cd-0ba3-2b4f-e9dd-1f5d532c37a2.png">


---
#Podcastをはじめたきっかけ
##### * [Yusukebe](https://twitter.com/yusukebe)さんのYAPC Asia トーク
[Podcastを支える技術、エンジニアのためのWebメディア、そしてCPAN](http://www.slideshare.net/yusukebe/podcastwebcpan)
##### * 以来、ずっと配信テーマを探していた
##### * 2015年秋めぐめさんにTwitterで会った
→　この人と、Podcastをやりたいと思った:flower_playing_cards:

---
#たどりついた配信方法
### 1. Wordpressプラグインを知る
### 2. いくつかの記事を読んで学ぶ
### 3. 仕組みができ、2016年1月配信開始
Skypeで繋ぐ、Audacityで録る、Wordpressで配信

---
#Slackでのネタ管理に至るまで
### 1. Skypeはテキストやりとりが辛い:tired_face:
### 2. Shownotes を効率よくまとめたい
### 3. Slack!!　 :raised_hands:
---
<img width="500" alt="スクリーンショット 2016-07-02 11.48.48.png" src="https://qiita-image-store.s3.amazonaws.com/0/56701/d09bfc5b-2324-d4a4-7e00-00c006943375.png">

---
#Slackで音声を録るまで
### Skypeの音質がときどき悪い　:cold_sweat:
### Slackに通話機能ロンチされた　:telephone_receiver:
### 1対1で使うなら無料

---
<img width="500" alt="スクリーンショット 2016-07-02 11.50.20.png" src="https://qiita-image-store.s3.amazonaws.com/0/56701/ab83be7d-6945-949a-46f1-b6e2f4c005dd.png">


---
#SlackでPodcastを録る感想
### 1. Shownotes まとめ: 便利
### 2. 接続: 安定
### 3. 音質: 充分
おまけ: iftttを使って配信完了したら通知 :blush:

---
#最後に
### DJの皆様、ありがとうございます!!
### めぐめさん、ありがとうございます!!
→対面で会う日は来るのか…!? :sweat_smile:
#### 今後も細々と岩田さんの魅力を伝えたい!!
[#IwatasanPodcast](https://twitter.com/hashtag/iwatasanpodcast)

---
![iwatter-e3-2015-twitter-mii.jpg](https://qiita-image-store.s3.amazonaws.com/0/56701/eaed9d2f-9a91-dc3d-34d0-3b218d0d66b5.jpeg)


---

## Let’s start a podcast!!

---
#時間あまれば自己紹介
### Masaki :dolphin: [@startselect](https://twitter.com/startselect)
エンジニアではない。営業など。

[Startup Weekend Yokohama](https://swyokohama.doorkeeper.jp)
→ 週末54時間で起業体験するコミュニティ!!
[Morning Project Samurai](https://mpsamurai.doorkeeper.jp) 
→ Pythonで画像処理, Deep Learningの勉強会
EpgTimer(abt8WG版)の録画予約一覧の番組名ソートから[新]とか【アニメ】とかを取り除こうとして諦めた話

EpgTimerで予約一覧の番組名でソートすると、こんな残念な事になってしまう。
![imgTemp-2016-07-02-12-02-25.png](https://qiita-image-store.s3.amazonaws.com/0/5825/9a1d5a77-c7f8-dffd-785a-065901a4f6e1.png)
修正しようと思ったけどやめた。どこを修正すればいいかの目星はついたので、メモ。

GridViewSorter.csの291行目。ここにブレークポイントを打ってソートを実行させるといい。
[EDCB/GridViewSorter.cs at 49f307c90e836afdf37281e20fc634b5c763b121 · abt8WG/EDCB](https://github.com/abt8WG/EDCB/blob/49f307c90e836afdf37281e20fc634b5c763b121/EpgTimer/EpgTimer/Common/GridViewSorter.cs#L291)
![imgTemp-2016-07-02-12-04-46.png](https://qiita-image-store.s3.amazonaws.com/0/5825/3c4574d1-50bf-5ba6-939c-e0b13309dc0a.png)
ここのsrtKey引数はソートする列の名前で、番組名の時は"EventName"という値が入っている。
EventNameって値は、ReserveItemクラスのEventNameプロパティを読むという意味。だから、ReserveItemにEventNameSortみたいなプロパティを追加して、strKey引数がEventNameの時はif分でEventNameSortに差し替えてやればOKって訳！

呼出履歴はこんな感じ。もっと処理を追いかけたかったら上へ上へ戻って、適当な所で再度ブレークしてみるといい。
![imgTemp-2016-07-02-12-07-46.png](https://qiita-image-store.s3.amazonaws.com/0/5825/c434809f-83c6-eedf-dfa5-a54686085074.png)


で、なんでやめたのかって言うと、あまりコードをgithub版から違う物にしたくないって気持ちと、予約状況欄でソートすれば望んでる事が実現出来ると気がついたから。
![imgTemp-2016-07-02-12-09-30.png](https://qiita-image-store.s3.amazonaws.com/0/5825/2378d29c-6289-ed7b-a64b-5d54ec3ea82e.png)
`rails console` のようなコンソールをrails以外で実現する方法

`rails console` 、便利です。でもRailsを使った開発の時にしか使えない、、、そんなことはありません。自作できます

まずはコード
----------

```rb:Rakefile
require "pry" # required `gem install pry`

desc "Open console w/ Pry"
task :console do
  Pry.start Pry.toplevel_binding
end
```

このあとは `rake console` で pry が立ち上がります

実例
----

[Sequel](http://sequel.jeremyevans.net/)というORMがありますので、それを使ってみます

```rb:your_lib.rb
require "sequel" # required `gem install sequel sqlite3`
DB = Sequel.sqlite # in-memory DB
DB.create_table :items do
  primary_key :id
  String :name
  Float :price
end
class Item < Sequel::Model ; end
```

```rb:Rakefile
require_relative "your_lib"
require "pry"

desc "Open console w/ Pry"
task :console do
  Pry.start Pry.toplevel_binding
end
```

これで `your_lib` を読み込んだ状態の pry console が立ち上がります

### 動作確認 ###

```rb
$ rake console
[1] pry(main)> Item.create(name:"item1", price:100)
=> #<Item @values={:id=>1, :name=>"item1", :price=>100.0}>
[2] pry(main)> Item.create(name:"item2", price:200)
=> #<Item @values={:id=>2, :name=>"item2", :price=>200.0}>
[3] pry(main)> Item.where{price > 150}.all
=> [#<Item @values={:id=>2, :name=>"item2", :price=>200.0}>]
```

あとがき
-------

CLIツール系の開発には結構役立つとおもいますぜ
CFBundleVersionをReleaseビルドの時だけ更新

タイトルの通り。
よくアーカイブする時にわすれるので。
会社でも調べたけど、家でもう一回調べたので忘れないように備忘録。

### Run Scriptに追加

下の方だとビルド終わってから更新になって意味がないので、私はTarget Dependenciesの直後に追加してます
Edit SchemeのArchiveのPre-actionsでやろうとしたけど上手くできなかったのでBuild Phasesに追加してます 

```bash
if [[ ${CONFIGURATION} == "Release" ]]; then
    buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "${PRODUCT_SETTINGS_PATH}")
    buildNumber=$(($buildNumber + 1))
    /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${PRODUCT_SETTINGS_PATH}"
    echo "[UpdateBuildNumber Release] CFBundleVersion Increment ${buildNumber}"
else
    buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "${PRODUCT_SETTINGS_PATH}")
    echo "[UpdateBuildNumber Debug] CFBundleVersion Not Increment ${buildNumber}"
fi
```

echoはなくてもOK
ビルドログで確認できるように出力しているだけです

Debug

![Debug.png](https://qiita-image-store.s3.amazonaws.com/0/30834/937452c9-4daa-74f8-c0f4-b178cba99d3c.png)

Release

![Release.png](https://qiita-image-store.s3.amazonaws.com/0/30834/2f322708-58c8-27ed-2ce9-b457f3ef8871.png)
XcodeのPlaygroundと同じことをC#でやってみる@YAP(achimon)C

## 自己紹介

田淵義人＠[エクセルソフト](http://www.xlsoft.com/jp)
Xamarin コミュニティエバンジェリスト

Twitter: [@ytabuchi](https://twitter.com/ytabuchi)
facebook: [ytabuchi.xlsoft](https://www.facebook.com/ytabuchi.xlsoft)
Blog: [Xamarin 日本語情報](http://ytabuchi.hatenablog.com)

---

## REPL (Read-eval-print loop)

---

## Xcode Playground (Swift)

<img width="900" alt="スクリーンショット 2016-07-01 17.24.39.png" src="https://qiita-image-store.s3.amazonaws.com/0/32453/07a9a154-920e-4242-6f54-ba7d8ce07c57.png">

---

## C# Interactive

- Visual Studio 2015
- [csi.exeコマンド登場！ C#スクリプト（.csx）やREPLを動かそう - Build Insider](http://www.buildinsider.net/language/csharpscript/01)

<img width="900" alt="Screenshot_Surface_2016-06-22 11_58_21.png" src="https://qiita-image-store.s3.amazonaws.com/0/32453/1d2b4c8c-fbc9-6190-87d5-6dac1880659f.png">

---

## MacでC＃ 

---

## Xamarin Workbooks

- [ダウンロード](https://developer.xamarin.com/guides/cross-platform/workbooks/install/)
- [Xamarin Workbooksを使用するには？（REPL＆リッチテキスト編） - Build Insider](http://www.buildinsider.net/mobile/xamarintips/0066)
- [Xamarin Workbooks で Xamarin.Forms のコードを書きたい - Xamarin 日本語情報](http://ytabuchi.hatenablog.com/entry/2016/05/21/173000)

<img width="900" alt="スクリーンショット 2016-06-22 12.14.48.png" src="https://qiita-image-store.s3.amazonaws.com/0/32453/2db4742e-f1d3-37d0-668b-c4323bd44df1.png">

---

## Demo

[デモの Workbook ファイル](https://gist.github.com/ytabuchi/de7c8d7ba0f9368cf3d805299e233c4a)


---

## Japan Xamarin User Group (JXUG)

- ジェイザク
- 2014/2 発足
- Xamarin/C# に特化した勉強会
- 最低 3か月に一度は開催

---

## http://jxug.org

---

## ご清聴ありがとうございます
「PowerShellでカンタンに勤務時間を割り出す方法」を自分用に魔改造

元記事：[PowerShellでカンタンに勤務時間を割り出す方法 - Qiita ](http://qiita.com/ShikaTech/items/ea2310eba66709bab400)

勤怠管理は会社ごとに微妙に違う気がするので、結局自分で魔改造することになるんじゃないかと思った。

# コード（原型がほぼない）

```.ps1
# powershell -NoProfile -ExecutionPolicy RemoteSigned .\oreGWT.ps1 2016 05
# powershell -NoProfile -ExecutionPolicy RemoteSigned .\oreGWT.ps1 2016 05 -MakeEven

Param
(
    [Parameter(Mandatory=$True,HelpMessage="対象年を指定してください。")]
    [ValidateRange(0001,9999)]
    [int] $Year,

    [Parameter(Mandatory=$True,HelpMessage="対象月を指定してください。")]
    [ValidateRange(01,12)]
    [int] $Month,

    [ValidateRange(01,31)]
    [int] $Day = 01,

    [ValidateRange(00,23)]
    [int] $Hour = 04,

    [ValidateRange(00,59)]
    [int] $Minute = 00,

    [ValidateRange(00,59)]
    [int] $Second = 00,

    [string[]] $LogName = @('System', 'Application'), #, 'Security'),

    [string] $Delimiter = ',',

    [switch] $MakeEven
)
 
Set-StrictMode -Version Latest
$ErrorActionPreference = 'Stop'

# 主処理
filter main
{
    $yyyyMM = '{0:0000}/{1:00}' -f $Year, $Month
    $dd     = '{0:00}' -f $Day
    $HHmmss = '{0:00}:{1:00}:{2:00}' -f $Hour, $Minute, $Second

    # イベントログの取得開始日時を指定
    $after = try   {Get-Date "${yyyyMM}/${dd} ${HHmmss}"}
             catch {Get-Date "${yyyyMM}/01 ${HHmmss}" | %{$_.AddMonths(1).AddDays(-1)}} # 月末日

    # ヘッダ出力
    @(
        '#起動日時',
        '#終了日時',
        '#経過時間',
        '#経過時間-休憩(1H)'
    ) -join $Delimiter

    # ShortDate ごとに明細を出力
    $LogName |
        ForEach-Object {Get-EventLog -LogName $_ -After $after -Before $after.AddMonths(1)} | # 一ヶ月分のイベントログ
        Select-Object -ExpandProperty TimeWritten | # 書込日時
        Group-Object -Property {Get-ShortDate $_} | # ShortDate ごとに集約
        Sort-Object Name | # ShortDate で並び替え
        ForEach-Object {New-Record $_.Group} # 明細出力
}

# 時刻補正後に日付の文字列を取得
filter Get-ShortDate ($date)
    {$date.AddHours(- $Hour).AddMinutes(- $Minute).AddSeconds(- $Second).ToShortDateString()}

# 新たな明細を作成
filter New-Record ($group)
{
    $min, $max = Get-MinMaxDate $group
            
    if ($MakeEven)
    {
        $min = Get-EvenDate $min
        $max = Get-EvenDate $max
    }

    @(
        (Get-Date $min -Format 'yyyy/MM/dd HH:mm:ss'),
        (Get-Date $max -Format 'yyyy/MM/dd HH:mm:ss'),
        ($max - $min),
        ($max - $min.AddHours(1)) # 休憩一時間
    ) -join $Delimiter
}

# 最小日時と最大日時を取得
filter Get-MinMaxDate ($times)
{
    # $times | Measure-Object -Maximum -Minimum | %{$_.Minimum, $_.Maximum}

    $min = Get-Date '9999/12/31 23:59:59'
    $max = Get-Date '0001/01/01 00:00:00'

    foreach ($t in $times)
    {
        if ($t -lt $min) {$min = $t}
        if ($t -gt $max) {$max = $t}
    }

    $min, $max
}

# 単位分への切り捨て、切り上げ
filter Get-EvenDate ($date, $unitMinute = 15)
{
    $zero = Get-Date $date -Format 'yyyy/MM/dd HH:00:00' | Get-Date
    $near = $zero

    0..[math]::Floor(60 / $unitMinute) |
        ForEach-Object {$_ * $unitMinute} |
        ForEach-Object {$zero.AddMinutes($_)} |
        Where-Object {($date - $_).Duration() -le ($date - $near).Duration()} |
        ForEach-Object {$near = $_}

    $near
}

main

```
API GatewayをCognito(Unauth)でNode.jsからリクエストしてみた


API Gateway、Cognito、IAMの設定はクラスメソッドさんの[『Amazon API Gateway の API を Cognito で認証して呼び出す』](http://dev.classmethod.jp/cloud/aws/api-gateway-cognito-auth/)を参考にしてください

# 検証バージョン
* Node.js 0.10.41
* npm
	* aws-sdk 2.4.4
	* aws4 1.41

# ソースコード
AWSのregion、CognitoのIdentityPoolId、API Gatewayのhostname、pathは環境に応じて変更してください

```javascript
var https = require('https')
  , aws4 = require('aws4')
  , AWS = require('aws-sdk')
  , region = 'ap-northeast-1'
  ;

var cognitoOptions = {
  IdentityPoolId: 'YOUR_COGNITO_IDENTITY_POOL_ID'
};
var httpOptions = {
  service: 'execute-api',
  region: region,
  hostname: 'YOUR_API_ID.execute-api.ap-northeast-1.amazonaws.com',
  path: '/prod/resorucePath',
  method: 'GET'
};

getCredentials(cognitoOptions, function (error, credentials) {
  request(httpOptions, credentials, function (error, body) {
    console.log('body: ', body);
  });
});

function getCredentials(options, done) {
  AWS.config.region = region;
  var cognitoidentity = new AWS.CognitoIdentity();
  cognitoidentity.getId(options, function (err, objectHavingIdentityId) {
    if (err) return done(err);
    cognitoidentity.getCredentialsForIdentity(objectHavingIdentityId, function (err, data) {
      if (err) return done(err);
      var credentials = {
        accessKeyId: data.Credentials.AccessKeyId,
        secretAccessKey: data.Credentials.SecretKey,
        sessionToken: data.Credentials.SessionToken
      };
      done(null, credentials);
    });
  });
}

function request(options, credentials, done) {
  var signedOptions = aws4.sign(options, credentials);
  var req = https.request(signedOptions, function (res) {
    var body = '';
    console.log('statusCode: ', res.statusCode);
    console.log('headers: ', res.headers);
    res.setEncoding('utf8');
    res.on('data', function (chunk) {
      body += chunk;
    });
    res.on('end', function (res) {
      done(null, body);
    });
  });
  req.on('error', function (error) {
    done(error);
  });
  req.end();
}
```

# 実行結果

```bash
statusCode:  200
headers:  { 'content-type': 'application/json',
  'content-length': '6',
  connection: 'keep-alive',
  date: 'Sat, 02 Jul 2016 00:42:07 GMT',
  'access-control-allow-origin': '*',
  'x-amzn-requestid': 'cd98a1d5-3fed-11e6-b0fe-e73602f4978c',
  'x-cache': 'Miss from cloudfront',
  via: '1.1 7f150809b0d3f0320b40d49f5756b015.cloudfront.net (CloudFront)',
  'x-amz-cf-id': 'CEebYad9DSFzmLrsPKwxLyCaGhgSXr4z4VniqNr9oJzVcXo9DuFzrQ==' }
body:  "hoge"
```

# 参考資料
* [Amazon API Gateway の API を Cognito で認証して呼び出す](http://dev.classmethod.jp/cloud/aws/api-gateway-cognito-auth/)
* [AWS IoTのMQTT over WebSocketをCognito（Unauth）で認証して使ってみた](http://dev.classmethod.jp/cloud/aws/aws-iot-mqtt-over-websocket-cognito-identity-unatuh/)
* https://github.com/mhart/aws4/issues/16
Safariでキーボードショートカットが無効化される


WEBサービスではよくキーボードショートカットが実装されていると思うのですが、いつも動いているのに、「このマシンでは動かない」とか「前まで動いていたのに動かなくなった」ということがありました。

実際は **SafariとApple謹製日本語入力の組み合わせのときのみ動作がおかしい** ということを発見しました。

Google IMEやATOKの組み合わせでは、ひとつのキーを押したときの、"Keydown"と"Keyup"の値が同じです。これが通常の動作だと思います。

ところが、SafariとApple謹製日本語入力の組み合わせでは、JavaScriptの"Keydown"が 229 に固定され、何を押したかは"Keyup"のみが教えてくれます。

Appleには情報提供済みですが、運営サービスでMacユーザーからキーボードショートカットが動かないという話があったりしたら、この話を思い出してもらえるといいかもしれません。

(そのうち改修されると思うので、この情報自体の賞味期限はとても短いものだと期待しています)
UnixユーザのためのWindowsコマンドライン超入門（その1）

きっかけはこのツイート
>![tweet1.PNG](https://qiita-image-store.s3.amazonaws.com/0/32767/1e77e5f5-320f-aa0b-dce8-438df83591c3.png)

もうすぐBash on Windowsも使えるようになるからこういう悩みは減ると予測しています。でもWin10が使えない場合とか、他にもいろいろなケースが今後もありうると思うので、軽く「それ、Windowsでもできるよ」を共有しておこうかなと思います。

PowerShellはかなり強力でなんでもできるんですが、入力文字数が多すぎてコマンドをぱっと見て理解しにくくなっちゃってるのが悲しい(※個人の主観です)ので、ここでは主にCMDでやる方法を書きます。CMDも意外とやれること多いんですよ。

## ファイルを日付順/逆順に表示

まずは引用元ツイートの`ls -ltr`から。

```
C> dir /o-d
```

結構簡単です。
日付順に見たいときは`-`を抜けばOK。

```
C> dir /od
```

一番基本の`dir`コマンドは確かに地味で`ls`には見劣りしますが、そこまで馬鹿にしたものでもないんです。`--color`に相当するのがないのが悲しいところですが。

## ファイル一覧を`ls`っぽく表示

普通に`dir`を実行すると`ls -l`と似た表示になります。
![dir1.PNG](https://qiita-image-store.s3.amazonaws.com/0/32767/5c416982-f6ea-feb6-6460-a5c12f0c0f65.png)

これを`ls`に似た表示にしたければ`dir /d`とします。
![dir2.PNG](https://qiita-image-store.s3.amazonaws.com/0/32767/88cce646-dd86-9094-eb4f-e9b5232d3f47.png)

いちいち`/d`オプションをつけなくても常にこの表示にしたければ環境変数`DIRCMD`を設定しておきます。

```
C> set DIRCMD=/d
```

## あるディレクトリ以下にあるファイルを探したい(`find`相当)

Unixだとこんな感じでやりますよね。

```
$ find /home/abc -name hoge.txt -print
```

alias登録してる人も多いと思います。同じことをWindowsでやるには、やっぱり`dir`を使います。

```
C> dir /s \home\abc\hoge.txt
```

これで`\home\abc`の中のどこかにある`hoge.txt`を探してくれます。`/s`オプションは後ろに置いても構いません。

```
C> dir \home\abc\hoge.txt /s
```

どっちも同じです。パス名を指定せずにファイル名だけを指定した場合はカレントディレクトリ以下を検索します。ファイル名にはワイルドカードを使えますが、ディレクトリ名には使えません。

```
C> dir \home\*.txt /s
```

これで`\home`以下の拡張子`txt`のファイルを全て表示します。

## スクリプト処理用にファイル名だけを表示したい

`ls -1`に相当する機能です。これは`/b`オプションです。

```
dir/b \home\*.txt
```

余談ですが`dir`と`/`の間は空白を明けなくても動きます。なので上のサンプルはtypoではないです。
この結果を`for`(たぶんまた今度書きます)に食わせれば`xargs`っぽい処理ができます。

## カレントディレクトリからExplorerを起動する

最後はコマンドラインと言っていいのか微妙ですが便利なのでよく使う機能を紹介します。カレントディレクトリをエクスプローラで開きたい場合はこうします。

```
C> start.
```

`.`の代わりにディレクトリを指定すれば、エクスプローラがそのディレクトリを開きます。
`start`に続く文字が`\`(つまり絶対パス)か`.`か`..`の場合はスペースいりません。あってももちろん構いませんが、ストロークを1回減らせます。

## `dir /help`してみてね

いかがでしょうか。しょぼいと思われがちな`dir`ですが、使いようではいろいろできるんですよ。他にもオプションがあるので、気が向いた方は`dir /help`してみてください。
unity > Quaternionの値(x,y,z,w)をCubeに適用する

```txt:動作確認
Unity 5.3.5-f1 on OS X El Capitan
```

Quaternionの値(x,y,z,w)をCubeに対して設定する方法の整理。

1. Cubeを作成
  - Name:Cube
  - Scale > X:3 とした
2. Main CameraにScriptを設定
  - QuatCS.cs

以下コード

```QuatCS.cs
using UnityEngine;
using System.Collections;

public class QuatCS : MonoBehaviour {

	void Start () {
		GameObject cube = GameObject.Find("Cube");
		Quaternion qtn = new Quaternion (0.04f, 0.37f, 0.17f, 0.91f);
		cube.transform.eulerAngles = qtn.eulerAngles;	
	}
	
	void Update () {
	}
}
```

結果

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/02476dcc-1d21-657e-aeeb-95df90f39ddd.png)
技術英語 > Nathie Katzoff > I got into it out of an interest in craft. / Out of curiosity

Master Craftsman, Nathie Katzoff | HUMAN
https://www.youtube.com/watch?v=m3yVCHj3jA8&list=PL_MJualihC5AxdlHgVUROYKbNAaPJ5PE4&index=61
木工技術者の動画。字幕がしっかり付いている。
(04:28-)

> I didn't get into this out of an interest in capitalism. <font color=red>I got into it out of an interest in craft</font>.

上記の意味がよくわらかなかったため、[stackexchange](http://english.stackexchange.com/questions/334789/meaning-of-out-of-an-interest?noredirect=1#comment766116_334789)にて質問した。

以下の組合せのようだ。

- get into
  - http://ejje.weblio.jp/content/get+into
- out of an interest

上記の文では「capitalismに興味があってこれを始めたのではない。craftに興味があってこれを始めた。」というような訳になるようだ。

<hr>
関連して思い出したのは

Out of curiosity, 
http://eow.alc.co.jp/search?q=out+of+curiosity
> 〔質問する動機などが〕好奇心から
gmaps.jsで地図を表示する(googlemapsAPI keyが要求されるようになってからの対処)

gmaps.jsを使って地図表示する際に以下のコードが例で挙げられる。

```html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="utf-8">
    <title>gmapsサンプル</title>
    <style>
        @charset "utf-8";
        #map {
            height: 400px;
            background: #58B;
        }
    </style>
    <script src="http://maps.google.com/maps/api/js?sensor=true&.js"></script>
    <script src="https://rawgit.com/HPNeo/gmaps/master/gmaps.js"></script>
    <script>
        window.onload = function(){
            var map = new GMaps({
                div: "#map",
                lat: 35.710285,
                lng: 139.77714,
                zoom: 15,
            });
        };
    </script>
</head>
<body>
    <div id="map"></div>
</body>
</html>
```

ただ、2016年6月22日以降、googlemapsAPIが要求されるようになってしまい、
サーバーからアクセスする場合はAPI keyがないとアクセス出来ない感じになってしまっている。

そこで、こちらのページからAPI keyを取得。
https://developers.google.com/maps/documentation/javascript/get-api-key?hl=ja

その上で以下の部分を、

```html
<script src="http://maps.google.com/maps/api/js?sensor=true&.js"></script>
```

以下のように変えると見事地図表示成功！

```html
<script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY"></script>
```
Azure Data warehouse トランザクションの制約

# トランザクションの制約

* トランザクションを入れ子にできない
* トランザクション サイズがDWUによって決まる
* セーブ ポイントは使用できない
* 分散トランザクションも不可

入れ子にできないのは痛い (つ ;)

詳細は以下
https://azure.microsoft.com/ja-jp/documentation/articles/sql-data-warehouse-develop-transactions/
Eclipseのテキストエディタの色設定が思い通りにいかない人へ

例)
![image](https://qiita-image-store.s3.amazonaws.com/0/64462/a93ff744-41f7-bbca-7974-08d6a15222a4.png)
※画像はイメージです
#### Eclipseの色設定で、以下のような思いをした人が対象
* **色々な所に色の設定するところ**があってイラつく
* **変更したのに反映されてない** 文字の色と背景の設定の往復を際限なく繰り返したあげく、納得のいかない設定で妥協してる
* **設定したのにリセットされた**。とか

(下記説明で "PHP"と書いてある箇所は適宜読み替えて下さい)

#### **いくつか法則をみつけました**
* [ 一般 > 外観 > 色とテーマ ] を使うと、その後 [ PHP > エディター > 構文の色の指定 ]　等で色の変更をしても反映されない。(**テーマをメインにして、背景色だけ変えるとかできんくさい**)
* [ 一般 > エディター > テキスト・エディター ]をいじると（チェックボックス含む）、**せっかくつくった [ PHP > エディター > 構文の色の設定 ] の設定が消える**ので**下の順番を守る**


#### **順番**
1. [ 一般 > 外観 > テーマ/色およびフォント・テーマ ]で**全体の外観を設定**する
![image](https://qiita-image-store.s3.amazonaws.com/0/64462/ae085f66-eb14-e018-8fde-d808c97075a3.png)
2. [ 一般 > エディター > テキスト・エディター]で**エディタの背景色などを設定**。
![image](https://qiita-image-store.s3.amazonaws.com/0/64462/8887b504-b851-5344-e5d9-cfa25c90558c.png)
3. [ 一般 > 外観 > 色とフォント]で**フォントを設定**（ココの設定は後々でも再設定可能です）。
![image](https://qiita-image-store.s3.amazonaws.com/0/64462/c6df3175-da14-750d-741d-35af8b222934.png)
4. この段階で [ PHP > エディター > 構文の色の指定 ]で **シンタックスごとの文字の色とかを設定**。
![image](https://qiita-image-store.s3.amazonaws.com/0/64462/3ad26ec5-2f01-1703-6804-7301f7520f6f.png)
5. ここでおしまい。**もうこれ以上いじらない**。

以上です。
archでpy-faster-rcnn

py-faster-rcnnをarchで動かしたい。
https://github.com/rbgirshick/py-faster-rcnn

基本的には以下の記事でうまくいく。
https://medicineyeh.wordpress.com/2016/01/19/how-to-build-nvidia-caffe-deep-learning-on-arch-linux/

一点だけ注意が必要で、それはcuDNNのバージョンで4を使わないとうまくビルドできない。
繰り返す。CUDNNのバージョンは4だ。~~以下のIssueに言及がある。~~
~~https://github.com/rbgirshick/py-faster-rcnn/issues/48~~

Issueを改めて見たら上記の言及はv3ではうまく動くが、v4rcではビルドできないというものだった。
現時点でv4の正式リリースでビルドが通り、うまく動くことを確認している。
herokuにデプロイできないです

最近初めてruby on railsでgitをつかってherokuにデプロイしようとしている初心者です。
git push heroku masterとやると 
`! [remote rejected] master -> master (pre-receive hook declined)`
というふうにエラーを吐きます。原因は上にsqliteが対応してないよ、とあったので
`bundle exec gem uninstall sqlite3`
とやってgemfileのsqlite部分もコメントアウトしました。またdatebase.ymlもadapterをpg、datebaseも~.pgに変更しました。
これでいけるだろうと思ってgit push heroku masterをするとまたまた同じエラーを吐きました。誰か原因というか対処法ご存知の方教えてください。

以下bundle list
  * actionmailer (4.2.2)
  * actionpack (4.2.2)
  * actionview (4.2.2)
  * activejob (4.2.2)
  * activemodel (4.2.2)
  * activerecord (4.2.2)
  * activesupport (4.2.2)
  * arel (6.0.3)
  * builder (3.2.2)
  * bundler (1.12.5)
  * coffee-rails (4.1.0)
  * coffee-script (2.4.1)
  * coffee-script-source (1.10.0)
  * concurrent-ruby (1.0.2)
  * erubis (2.7.0)
  * execjs (2.7.0)
  * globalid (0.3.6)
  * i18n (0.7.0)
  * jbuilder (2.2.3)
  * jquery-rails (4.0.3)
  * json (1.8.3)
  * loofah (2.0.3)
  * mail (2.6.4)
  * mime-types (3.1)
  * mime-types-data (3.2016.0521)
  * mini_portile2 (2.1.0)
  * minitest (5.9.0)
  * multi_json (1.12.1)
  * nokogiri (1.6.8)
  * pg (0.17.1)
  * pkg-config (1.1.7)
  * rack (1.6.4)
  * rack-test (0.6.3)
  * rails (4.2.2)
  * rails-deprecated_sanitizer (1.0.3)
  * rails-dom-testing (1.0.7)
  * rails-html-sanitizer (1.0.3)
  * rails_12factor (0.0.2)
  * rails_serve_static_assets (0.0.5)
  * rails_stdout_logging (0.0.5)
  * railties (4.2.2)
  * rake (11.2.2)
  * rdoc (4.2.2)
  * sass (3.4.22)
  * sass-rails (5.0.2)
  * sdoc (0.4.1)
  * sprockets (3.6.2)
  * sprockets-rails (3.1.1)
  * thor (0.19.1)
  * thread_safe (0.3.5)
  * tilt (1.4.1)
  * turbolinks (2.3.0)
  * tzinfo (1.2.2)
  * uglifier (2.5.3)
Xcode7.3.1 デバッグ時にアセンブリコードからソースコードへ表示を切り替える方法

XcodeでRanすると、エラーがアセンブリコードで表示されていて、エラーの場所が分からない場合。設定した記憶はなくて、初期設定から英数字の羅列（0x10530a350とか、movq、%rbpなど）だったので困っていました。アセンブリコードからソースコードへ表示を切り替えたい方は、参考にしてください。

**アセンブリコードでエラーの場所が分からない**
![スクリーンショット 2016-07-02 1.42.51.png](https://qiita-image-store.s3.amazonaws.com/0/123611/3b3ced8a-d5e2-6ce1-fc2e-0a29d316dfc5.png)

**ソースコードを表示するために、Xcodeの設定する場所**
![スクリーンショット 2016-07-02 1.41.47.png](https://qiita-image-store.s3.amazonaws.com/0/123611/7304e224-bb86-4a3a-1290-cefbb3ad263f.png)

この、Always Show Disassembly のチェックを外す
これで、問題解決です :smile: 

**参考**
[Xcode4.1 デバッグ時のアセンブリ表示からの脱出](http://cocoadays.blogspot.jp/2011/08/xcode41.html)
こんな記事もあったのですが、Xcode4.1だとバージョンが古いので、設定の場所が違います。
古いrailsアプリをdockerに封じ込める alpineで

# はじめに

Dockerfile晒す

``` Dockerfile
FROM gliderlabs/alpine:latest

ENV BUILD_PACKAGES bash wget curl tar make gcc alpine-sdk zlib zlib-dev readline 
ENV GEM_PACKAGES openssl openssl-dev libxml2-dev libxslt-dev mysql mariadb-dev imagemagick imagemagick-dev imagemagick-c++ ruby-rmagick

RUN apk update && \
    apk upgrade && \
    apk --no-cache add tzdata \
    $BUILD_PACKAGES $GEM_PACKAGES && \
  cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime && \
  apk del tzdata 

# build ruby
RUN wget -q -O ruby-1.8.7-p374.tar.gz http://cache.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p374.tar.gz && \
    tar -zxvf ruby-1.8.7-p374.tar.gz && \
    rm ruby-1.8.7-p374.tar.gz

WORKDIR ruby-1.8.7-p374
RUN ./configure --with-openssl-dir=/usr/bin
RUN make
RUN make install

# install rubygems
WORKDIR /
RUN wget http://production.cf.rubygems.org/rubygems/rubygems-1.3.7.tgz && \
    tar -zxvf rubygems-1.3.7.tgz && \
    rm rubygems-1.3.7.tgz
WORKDIR rubygems-1.3.7
RUN ruby setup.rb

# install bundler
RUN gem install bundler

WORKDIR /app
COPY Gemfile /app/

# bundle install
RUN bundle install
COPY . /home/app
```

# 何がしたかったのか

古のrailsアプリの開発に関わることになったので、docker化できるか試してみたかった 
(docker歴6ヶ月、ruby/rails歴0ヶ月)

# 環境

* ruby 1.8.7
* gem 1.3.7
* rails 2.3.5

# ポイント aka はまりポイント

* rubyをソースからmakeするために必要だったパッケージは$BUILD_PACKAGESにまとめた
* rubyを./configureするときに--with-openssl-dirオプションでopensslのディレクトリを指定しないと、"bundle install"するときに https://rubygems.org などhttpsサイトから取得できない
* かといってGemfileのほうでhttpsをhttpにしてもinstallが進まないので解決にはならない
* gem周りでインストール必要だったパッケージは$GEM_PACKAGESにまとめた("mysql"gemだったら mysql, mariadb-devとか、"rmagick"gem だったら imagemagickとimagemagick-devとか)
* rmagick 2.13.1はimagemagickとimagemagick-dev入れてもinstall失敗するので2.13.2に上げた

# TODO

* このままだとroot実行になりセキュリティ的によろしくないのでadduserしてUSER指定したほうがよい
* 今は特定のバージョンしか使っていないが、今後段階的にバージョンを上げる、等のケースを想定するとrvmやらrbenvなどバージョン切り替えられるイメージを作ったほうがよいのかも
* その他passengerとかミドルウェア周りのコンテナは未対応

# docker-compose

こんな感じでdocker-compose定義しておけば、これまでVMや開発用のDBサーバーに依存してた開発環境が全部ローカルで完結するようになった

``` docker-compose.yml
version: '2'
services:
    rails:
        build:
            context: /path/to/
            dockerfile: DockerfileName
        ports:
            - "3000:3000"
        depends_on:
            - db 
        networks:
            - app
            - datastore
    db:
        image: mysql:5.6
        ports:
            - "3306:3306"
        environment:
            - TZ=JST-9
            - MYSQL_USER=required
            - MYSQL_PASSWORD=required
            - MYSQL_ROOT_PASSWORD=required
            - MYSQL_DATABASE=required
        volumes:
            - /path/to/mysql/dump/:/docker-entrypoint-initdb.d/
            - /path/to/mysql/conf/:/etc/mysql/conf.d
        privileged: true
        networks:
            - datastore
networks:
    app:
    datastore:
```

便利
node-twitterでuser streamを扱う

## node-twitterとは
```
npm install twitter
```  
で取ってこれるやつ  
nodejsでtwitter api叩ける感じ

## streaming apiを使う
https://www.npmjs.com/package/twitter では  

```
var stream = client.stream('statuses/filter', {track: 'javascript'});
stream.on('data', function(tweet) {
  console.log(tweet.text);
});
 
stream.on('error', function(error) {
  throw error;
});
 
// You can also get the stream in a callback if you prefer. 
client.stream('statuses/filter', {track: 'javascript'}, function(stream) {
  stream.on('data', function(tweet) {
    console.log(tweet.text);
  });
 
  stream.on('error', function(error) {
    throw error;
  });
});
```
と書いてありました。
私がしたいのは自身のタイムラインの取得でした。
それっぽい単語で探しても自分がしたこととは異なっていました。

## client.streamの引数に文字列userを入れてみる
twitterのdeveroperにuser streamのEndPoitに

```
GET user
```
と書いてあったので上記のコードを以下のように変更すると

```
var stream = client.stream('user',function (stream) {
 stream.on('data',function (tweet) {
   console.log(tweet.text)
 })

  stream.on('error',function (e) {
    console.log(e)
  })
})
```
動きました。

## 終わりに
英語が読めれば悩まなくてよかったかもしれないですね。
ほろ酔いで書いたかつ、分からないことも多いのでアドバイスとかあったらください。。。
node-twitterの詳しいことは<a href="https://www.npmjs.com/package/twitter">こちら</a>
macで利用している開発ツールの説明付きメモ


最近新しいmacを使う機会があり、ツール類の導入を行ったので次回用のメモ
ツールの説明も簡単ですが付帯します。
ちなみに、自分はフロントエンドエンジニアです。

随時更新します。

## エディタ・IDE
### IntelliJ Ultimate
冒頭でフロントエンドエンジニアという言葉を使っておきながらのIntelliJです。
欲張りました。

強力なコード補完・解析機能が魅力です。（ジャンプ機能やリファクタ機能など他も色々）
コードのクオリティ・コーディングスピードを引き上げてくれます。
豚に真珠感は否めませんが、試用・購入する価値は十分にあると思いました。

ただ現状、細かい設定や機能を使いこなそうとすると、英語や雰囲気を読む必要に迫られます。
他力本願ですが、利用者が増えて和書が出版されてくれると嬉しいです。
（個人出版の電子書籍ならあるかも）

間違えてIntelliJ CE(コミュニティエディション)をダウンロードしてしまい、NodeJSなどのpluginがインストールできない事態に見舞われましたが、そういう事でした。。
（CEは無料だけど利用出来る機能が限定される）

[IntelliJの使い方](http://qiita.com/takap235711/items/9683e253aac35e7a9774)についても、随時更新しています。

### SublimeText3
マークアップと簡単な文書の編集に利用しています。
サクサクと気持ちよく記述出来ます。
利用者も多く、プラグインも充実しているので、やりたい事は大抵実現出来ると思います。
(プラグインが増えるにつれて動作が重くなったり、落ちる確率が高くなったりしますが)

## Git
### Tower
有料ですが、SourceTreeより明らかにサクサクです。
ちなみに自分は、fetch,pull,pushなどの通信を伴う重たい操作はコマンドラインで行い、コミット時の差分確認はTowerで行っています。
あと、スタッシュした差分やコミット履歴の確認もTowerです。
（差分の確認は、やはりGUIが最強だと思います）

## ショートカット便利系
### iTerm
画面分割・固定や出し隠しなど、ショートカットが簡単に設定出来る。
（ショートカット以外にもメリットは沢山あります）
一度利用したら、Terminalに戻れません。

### Alfred
計算機やWeb検索、ディレクトリ・ファイル検索などが可能です。
スポットライトでも変わらない気がしてきました。

### Karabiner
英字配列キーボードでは、`ctrl + space or cmd + space`で英字・かな変換を行うのがデフォルトですが、このツールを利用すると、「左cmdで英字、右cmdでかな」というようなショートカットを設定出来ます。

### Clipmenu
クリップボートの履歴や定型文を呼び出せませす。
IDEでも出来ますが、エディタ外でも使いたい場面は多々あるので重宝しています。
無料ですが、有料でも使いたい位、便利です。

## メモ系
Evernote、kobito、Gistbox(gist, codepen)を使い分けています。

### Evernote
タグやノートブックなど、カテゴリー分けが高機能だと思います。
そのため、議事録や記事のクリップ、ぱっと思い浮かんだアイディアなど、比較的断片的で整理されていない系のメモに利用しています。
SNS連携やプラグインなども充実しているため、スピーディに情報をメモできます。
あと、公開範囲を設定した共有も簡単に出来る。

### kobito
知識を体系化したい系のメモに利用しています。
Qiitaで閲覧する際には、目次や関連記事などが表示されてくれるので、リファレンス的に利用する場合に便利です。
公開すれば誰かしらの役に立つ可能性があるため、一石二鳥です。
公開出来ない属性のメモは限定公開にして、自分専用のメモにすれば問題ありません。
Evernoteみたいに、カテゴリー分けの種類が増えてくれたら嬉しいかも知れません。

### Gistbox
コード（スニペット）はgistで管理しています。
Gistboxはgistをラベルでカテゴリー分けして、整理し易くするためのツールです。
単体では利用せず、下記のような流れで利用しています。
`codepenでコードを書く -> gistに公開 -> Gistboxで整理・閲覧`
codepenはオンラインエディタなのでもはやmac関係ないですが..
ちなみに、この方法だと間接的にcodepenのコードを管理している状態になるので、ブログに埋め込むcodepenのコードを探す際に便利です。

## PDFリーダー
### skim
Kindleを購入した流れで発見しました。
PDFを目次付きで表示出来たり、メモを書き込めたり、特定位置をブックマーク出来たりします。
最強の読書環境を模索中です。
（手足のように電子書籍の情報を管理・アクセスしたい）

## Chrome拡張機能
### Awesome Screenshot
ブラウザ内のスクリーンショットを取れます。
スクロールしたり、特定範囲にしたり出来るので便利。
（もっと便利なやつありそうですが）

### HTML5 Strage Manager All in One
localstrage, sessionstrage, cookie, indexedDBの内容確認と編集・追加が可能。
DeveloperToolでも確認出来るけど、Resourcesタブに切り替えたくない時に有効。
あと見やすい。
C言語を始めようのインストール＆設定

## **編集記録**
**1017/07/12**
どうやら、この記事で取り扱っているBorland C++ Compiler - 無料版のダウンロードがサイトからできなくなっているようです。
現在、安全なダウンロード先を探していますので、分かりしたい投稿を更新します。

## 概要
今回はC言語をはじめようというC言語を学習する環境を作るのに簡単に構築できるプログラムです。
コンパイルはBorlandのC++コンパイラを使用しているので、別途そのC++コンパイラのインストールと設定が必要です。


## 各種プログラムのダウンロード
- [C言語を始めよう](http://forest.watch.impress.co.jp/library/software/cwohajimeyou)
- [Borland C++ Compiler - 無料版](https://www.embarcadero.com/free-tools/ccompiler/start-for-free/)


## 設定方法
C言語を始めようについてはファイルをダウンロード後、そのまま実行してインストールしてください。
Borland C++ Compilerについては、ダウンロード前にembarcaderoに登録する必要があります。登録後、入力したメールアドレス宛にダウンロードリンクとzipファイルを解凍するためのパスワードが書かれたメールが届きます。


## Borland C++ Compilerのインストール
ダウンロードしたファイルを展開すると、いくらかファイルがあると思いますが、インストールするのはfreecommandlinetools2ですので、そのファイル名のexeファイルをインストールしてください。


## C言語を始めようとBorland C++ Compilerの連携
C言語を始めようでBorlandのC++ Compilerを使用してコンパイルできるようにします。
まず、インストールしたC言語をはじめようを起動させます。
次にビルドメニューのBorland C++の設定をクリックします。
すると、コンパイラの設定というウィンドウが表示され、BCC32.EXEのパスを指定するテキストフィールドがありますので、そこに先ほどインストールしたBorland C++ CompilerのBCC32.EXEのパスを指定します。
おそらく、Borlandをインストールする際に初期設定のままインストールしたのならば、以下のようなパスを指定する必要があります。

```
    C:\borland\bcc55\Bin\bcc32.exe
```

このパスを指定したのなら、そのしたにある『bcc32.cfgとilink32.cfgを作成する』をクリックしてエラーがでなければ完了です。


## 最後に
C言語をはじめようの具体的な使用方法については、別稿で示しますが、コンパイルはビルドメニューの下にある『!』マークをクリックするとコンパイルされ、作成したプログラムが実行されます。
swiftのdequeuereusablecellwithidentifierでカスタムセルを読んだ時に エラーが出た場合の対処法

カスタムセルをswiftで利用したところハマったので忘れないうちに残しておきます。

dequeuereusablecellwithidentifierでカスタムセルを読んだ時に
exc_bad_instruction
のエラーが出た場合の対処法

以下のようにoptional型にする。

```
var cell: UITableViewCell? = tableView.dequeueReusableCellWithIdentifier(cellId) as? UITableViewCell

if cell == nil {
  cell = UITableViewCell(style: .Subtitle, reuseIdentifier: cellId)
}
```


optional型のカスタムセルに対して、
アンラップのas?でnilを入れるようにしないといけない。

ここでoptionalにしなかったりしたりすると落ちました。

http://stackoverflow.com/questions/24718135/exc-bad-instruction-breakpoint-when-starting-app-xcode
Amazon EC2で停止中のインスタンスをpecoで絞り込んで起動する

Amazon EC2で停止中（stopped）のインスタンスを起動するときにインスタンスIDの取得が面倒くさかったので、Nameタグの値を使ってpecoで絞りこめるようにした。

## ワンライナー

```shell-session
$ aws ec2 describe-instances \
    --filters 'Name=instance-state-name,Values=stopped' \
    --query 'Reservations[].Instances[].{InstanceId:InstanceId,Name:Tags[?Key==`Name`].Value|[0]}' \
    --output text \
  | peco \
  | cut -f1 \
  | xargs -n 1 -I{} aws ec2 start-instances --instance-ids {}
```

見やすさのために改行した。まあ、ワンライナーで都度実行するんじゃなくて、適当な関数にすればいいと思う。

## Zsh用設定

キーバインドはお好みで。

```zsh:~/.zshrc
function ec2_start_instance(){
  local target_instance=$(
    aws ec2 describe-instances \
      --filters 'Name=instance-state-name,Values=stopped' \
      --query 'Reservations[].Instances[].{InstanceId:InstanceId,Name:Tags[?Key==`Name`].Value|[0]}' \
      --output text \
    | peco --query "$LBUFFER" \
    | cut -f1 )
  if [ -n "${target_instance}" ];then
    BUFFER="aws ec2 start-instances --instance-ids ${target_instance}"
    zle accept-line
  fi
  zle clear-screen
}

zle -N ec2_start_instance
bindkey '^[' ec2_start_instance

```
鼓勵業主積極參與

最近參與了一些外包性質的開發專案，看到了一些事情，也間接驗證了許多自己的想法，也有整理出一些我覺得比較好的改善方式。

## 積極參與開發的過程

在現在的專案執行方式，一直鼓勵團隊的成員能夠透明化地溝通。

業主當然也不例外。

我認為業主理所當然的是團隊的一員。專案的負責人（在很多專案可能是位 PM ）應當是有責任幫忙把業主拉近一點。

為什麼要這樣做呢？

- 可以比較對當下的產出容易的得到即時的回饋
- 當在開發過程中發現問題時，業主能夠即時的反應，並調整目前的商業決策

## 參與

首先，溝通管道順暢很重要。

和業主之間要有很方便（尤其是要對業主來說）、很容易上手的溝通工具。比較不會讓業主有排斥心理。

再來，專案負責人要規劃比較短週期的 review 計畫。

在近年來， Growth 領域中有被提到：「一個很大的成功、是由許多小成功累積而成」縮短發布的週期，不只可以讓業主可以感受到他們期望的產品正在漸漸的完成；也可以讓他們可以在最快的時間內，發現可能不如他們預期的產出。

## 結語

這篇大致上就先寫這樣。

溝通是一直以來，參與的團隊中普遍缺少的東西。這邊的溝通是指同一個團隊中，不同專業間的交換意見。

在外包案中常常會看到，執行的團隊對業主隱藏風險，或是業主沒有把可能的變因告訴執行的團隊。

這樣的情況也沒有絕對的誰對誰錯，但是當過程之中有充分的溝通，可能就有辦法探索出很多潛在的問題、雙方可能就可以讓產出往更好的結果前進。
Node.js：GETパラメータでJSONを送信する

※「≈≈≈」は省略を表す

# バージョン

```
$ node -v
v6.2.1
```
```
$ cat package.json
{
  ≈≈≈
  "dependencies": {
    "request": "~2.72.0",
  }
}
```

# GETパラメータでJSONを送信する
```
var request = require('request');
var options = {
  uri: "http://example.com/test",
  headers: {
    "Content-type": "application/json",
  },
  qs: {
    "key1": "param1",
    "key2": "param2"
  },
  json: true
};
request.get(options, function(error, response, body){});
```
PostgreSQLコマンドチートシート

よく使うPostgreSQLで利用可能なコマンドのチートシートです。
環境：psql (PostgreSQL) 9.5.0

##端末上で使うコマンド
####サーバの起動
`$ pg_ctl start -D /usr/local/var/postgres`

####サーバの終了
`$ pg_ctl stop -D /usr/local/var/postgres`

####サーバが起動しているかの確認
`$ ps aux | grep postgres`

####データベース接続
`$ psql -d database -U user -h host`

* -d: データベース名(未指定だと、ログインユーザー名のデータベースに接続する)
* -U: ユーザ名(未指定だと、ログインユーザー名になる)
* -h: ホスト名(未指定だと、localhostになる)

####データベース一覧表示
`$ psql -l`

####PostgreSqlバージョン表示
`$ psql -V`

####PostgreSqlに関するヘルプ
`$ psql -help`


##psql上で使うコマンド
postgresの部分には接続中のDB名が入る。

####psqlの終了
`postgres=# \q`

####ユーザ一覧を表示
`postgres=# \du`

####データベース一覧を表示
`postgres=# \l`

####他のデータベースに接続
`postgres=# \c dbname`

####データベース作成
`postgres=# create database dbname;`

####接続中のデータベースの情報を表示
`postgres=# \conninfo`

####テーブル一覧を表示
`postgres=# \z`

####テーブル定義を確認
`postgres=# \d tablename`
*tablename*には任意のテーブル名を入れる。

####カレントディレクトリ変更
`postgres=# \cd directory`
カレントディレクトリをdirectoryに変更する。

####CSV形式のファイルをテーブルに挿入
`postgres=# \copy tablename from filename DELIMITER AS ','`

####ファイルからコマンドを実行
`postgres=# \i filename.sql`
ファイルから入力を読み取り、実行する。

####コマンドラインの履歴の表示
`postgres=# \s`
\sの後にファイル名を入力すると、そのファイル名に結果を出力する。

####'\'に関するヘルプの表示
`postgres=# \?`

####シェル上のコマンドを使いたい場合
`postgres=# \! command`
*command*の部分にlsやpwdを入れるとpsql上でもシェル上のコマンドが実行できる。



##参考
* [pg_ctl - PostgreSQL 9.2.4文書](https://www.postgresql.jp/document/9.2/html/app-pg-ctl.html)
* [psql - PostgreSQL 9.2.4文書](https://www.postgresql.jp/document/9.2/html/app-psql.html)
* [PostgreSql コマンドの覚え書き](http://qiita.com/mm36/items/1801573a478cb2865242)

こちらのサイトを参考に書かせていただきました。ありがとうございましたm(_ _)m
WordPressをdinghyで起動するdocker-composeファイル

WordPressコンテナをdinghyで起動するためのdocker-composeファイルです。

```yaml
wordpress:
  image: wordpress
  links:
    - db:mysql
  environment:
    - VIRTUAL_HOST=wordpress.docker

db:
  image: mariadb
  environment:
    MYSQL_ROOT_PASSWORD: example
```
UINavigationControllerのpopViewControllerAnimatedがやたら長い



以下のように書くと処理が長くなる場合がある。

```やたら長い
self.navigationController?.popViewControllerAnimated(true)
```

原因はわからないが、main threadで行うようにdispatchしてあげれば解決した

```高速！
dispatch_async(dispatch_get_main_queue(), {
   self.navigationController?.popViewControllerAnimated(true)
})
```

日本語の記事がなかったので初心者はハマりそうなのでシェア。
EAGLEの自作ライブラリでライブラリに説明文（Description）をつけたい

#EAGLEライブラリの説明文とは
EAGLEライブラリの説明文とは，EAGLEのコントロールパネルでライブラリ一覧を見たときのDescriptionの列に表示されている文字列のことです．
![eagle1.PNG](https://qiita-image-store.s3.amazonaws.com/0/131996/307d2bfe-1cea-3632-bd58-1584840e653c.png)  
自分で作ったライブラリにもどのような部品が含まれているか，だれが作ったかなどを書いておきたいですよね．

#説明文の追加・編集の仕方
1. ライブラリであるlbrファイルをEAGLEで開く．ダブルクリックで開いてもいいですし，Control Panel の File/Open/Library から開いても大丈夫です.
2. ライブラリを開いたら，下のスクショのように Library/Description と開きます．
![eagle2.PNG](https://qiita-image-store.s3.amazonaws.com/0/131996/91098b11-183e-f5b1-ac00-e128d2a5f345.png)  
そしたら，小さいウィンドウが表示されるのでウィンドウ下部のテキストボックスに説明文を記述します．
プレビューは上部のテキストビューで見られます．
3. 説明文を書き終わったらOKを押して編集を終了し，保存して完成です．
パケットトレースにTCPヘッダ情報を表示する

ネットワークシミュレータns-2の話です。

パケットトレースファイルに、TCPのヘッダ情報（シーケンス番号やACK番号など）が記載されると便利。

# 表示方法

そういうときは、以下のようにシナリオファイルに以下の1行を追加すればOK

```tcl:シナリオファイル
# ↓ポイント
Trace set show_tcphdr_ 1; # trace-all shows tcp headers(default: 0)

set nf [open out.ns w]
$ns trace-all $nf

proc finish {} {
    global ns
    $ns flush-trace
    close $nf
    exit 0
}
```

# 変更前出力

```
r 1.000089 0 1 tcp 40 ------- 0 2.1 1.256 0 2
r 1.000166 0 1 tcp 40 ------- 0 2.1 1.256 1 4
r 1.00019 0 1 tcp 1500 ------- 0 2.1 1.256 1 5
r 1.000202 0 1 tcp 1500 ------- 0 2.1 1.256 1461 6
r 1.00029 0 1 tcp 1500 ------- 0 2.1 1.256 2921 9
r 1.000314 0 1 tcp 1500 ------- 0 2.1 1.256 4381 10
r 1.000326 0 1 tcp 1500 ------- 0 2.1 1.256 5841 12
```

# 変更後出力

```
osada@share1% grep 'r.*0\ 1\ tcp' out.ns
r 1.000089 0 1 tcp 40 ------- 0 2.1 1.256 0 2 -1 0xa 40 0
r 1.000166 0 1 tcp 40 ------- 0 2.1 1.256 1 4 1 0x10 40 0
r 1.00019 0 1 tcp 1500 ------- 0 2.1 1.256 1 5 1 0x10 40 0
r 1.000202 0 1 tcp 1500 ------- 0 2.1 1.256 1461 6 1 0x10 40 0
r 1.00029 0 1 tcp 1500 ------- 0 2.1 1.256 2921 9 1 0x10 40 0
r 1.000314 0 1 tcp 1500 ------- 0 2.1 1.256 4381 10 1 0x10 40 0
r 1.000326 0 1 tcp 1500 ------- 0 2.1 1.256 5841 12 1 0x10 40 0
```

シーケンス番号だけでなく、確認応答番号が見えて、ありがたい。

# 読み方

'-----'（フラグ）のあとから順番に、
* フロー番号：iph->flowid()
* 送信元ノード番号.ポート番号：src_nodeaddr.src_portaddr
* 送信先ノード番号.ポート番号：dst_nodeaddr.dst_portaddr
* シーケンス番号：seqno
* UID：th->uid()
* ACK番号：tcph->ackno()
* フラグ情報：tcph->flags()
* ヘッダ長：tcph->hlen()
* SA（SelectiveACK?）長：tcph->sa_length()

フラグは以下。OR演算した結果が入っている。例えば"0xa = TH_SYN | TH_PUSH"

```
#define TH_FIN  0x01        /* FIN: closing a connection */
#define TH_SYN  0x02        /* SYN: starting a connection */
#define TH_PUSH 0x08        /* PUSH: used here to "deliver" data */
#define TH_ACK  0x10        /* ACK: ack number is valid */
#define TH_ECE  0x40        /* ECE: CE echo flag */
#define TH_CWR  0x80        /* CWR: congestion window reduced */
```

# 実行環境

* ns-2.35
インストール方法: http://qiita.com/osada/items/133afdbba68c388ab818
Adafruit 1.8" SPI display のライブラリを読む

SPI 接続のLCDを使いたいので、ライブラリ Adafruit_ST7735 のソースコードを読んで使い方を調べてみました。

CからAPIを使いたい的な観点から調査しました。

# まとめ
* ライブラリはC++のクラスとして実装
* Adafruit_ST7735クラスはAdafruit_GFXの派生クラスとなっており、ST7735特有の処理のみを実装している。
* Adafruit_GFXから呼ばれるのは
fillScreen(),drawPixel(),fillRect(),setRotation(),  です。
* LCDライブラリとしては、点、矩形の描画APIを用意すれば良い。
* ビットマップ描画、斜め線の描画、フォント描画などは、点描画のAPIを使ってAdafruit_GFXで実装されている。
* ST7735の描画コマンドは、矩形選択と色設定を使う。

# 調査対象
* Adafruit-ST7735-Library
 * https://github.com/adafruit/Adafruit-ST7735-Library
* LCD
 * 1.8" Color TFT LCD display with MicroSD Card Breakout - ST7735R
 * https://www.adafruit.com/product/358


# APIリスト
* Adafruit_ST7735クラスはAdafruit_GFXの派生クラス
* コンストラクタ
 * Adafruit_ST7735(int8_t CS, int8_t RS, int8_t SID, int8_t SCLK, int8_t RST = -1);
 * Adafruit_ST7735(int8_t CS, int8_t RS, int8_t RST = -1); 
* メソッド
 * initR(uint8_t options = INITR_GREENTAB), // for ST7735R
 * setAddrWindow(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1),
 * pushColor(uint16_t color),
 * fillScreen(uint16_t color),
 * drawPixel(int16_t x, int16_t y, uint16_t color),
 * drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color),
 * drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color),
 * fillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color),
 * setRotation(uint8_t r),
 * invertDisplay(boolean i);
 *  uint16_t Color565(uint8_t r, uint8_t g, uint8_t b);

以下で各APIの説明をする。

# Adafruit_ST7735()
* ピンの情報を設定してクラスを生成

# initR()
* 初期化用のコマンドをSPIで送信して初期化する。
* optionsでLCDコントローラのタイプを指定可能。液晶保護シートに緑のタブが付いていたら、GREENTAB、黒のタブが付いていたらBLACKTABを指定する。

# setAddrWindow()
* x0, y0, x1, y1 で矩形を設定
* ST7735_CASETコマンドとST7735_RASETで設定
* Adafruit_GFXからは呼ばれない。

# pushColor()
* setAddrWindow()で指定した後で、その領域を色colorで描画
* 色の値はColor565()で取得
* Adafruit_GFXからは呼ばれない。

# fillScreen()
* 画面全体を色colorに描画
* fillRectを呼んでいる。

```cpp
void Adafruit_ST7735::fillScreen(uint16_t color) {
  fillRect(0, 0,  _width, _height, color);
}
```

# drawFastVLine
* 座標 x, y に高さh、色colorの線を描画
* Adafruit_GFXからは呼ばれない。

# drawFastHLine
* 座標 x,y に幅w、色colorの線を描画
* Adafruit_GFXからは呼ばれない。

# fillRect
* 座標x0, y0, x1, y1 で色colorの矩形領域を描画

# setRotation
*  画面を回転 　0,1,2,3はそれぞれ0, 90, 180, 240度回転

# invertDisplay
* 画像を反転
* Adafruit_GFXからは呼ばれない。

# 色の値
* R, G, Bから16bitの色の値を取得

斜めの線を描画するメソッドdrawLine()、などその他のメソッドはAdafruit_GFXで定義されている。

# 参考
* ST7735R の仕様書も読んだ方が良いです。 10 Command にコマンドの説明があります。
 * https://cdn-shop.adafruit.com/datasheets/ST7735R_V0.2.pdf
* tutorial
 * https://learn.adafruit.com/1-8-tft-display
* Adafruit_GFX 
 * https://github.com/adafruit/Adafruit-GFX-Library
Emailを有効なメールアドレスか判断するvalidation

モデルファイルに以下を追加

```ruby:user.rb
VALID_EMAIL_FORMAT = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
validate :email, format: { with:VALID_EMAIL_FORMAT }
```

これで
moziretsu@moziretsu.moziretsu
と言った一般的なemailのフォーマットに乗っとたメールアドレス以外無効になるようになります。
「SwiftでKotlinのapplyっぽいもの」を参考に・・・

役に立つかどうかよくわからないTipsシリーズ

あるきっかけで、このQiita記事を紹介していただきました
[SwiftでKotlinのapplyっぽいものを使いたい](http://qiita.com/tsumuchan/items/e4913c9583d00d9bea7d)

その内容によると

```swift
protocol ApplyProtocol {}

extension ApplyProtocol {
    func apply(closure: (this: Self) -> Void) -> Self {
        closure(this: self)
        return self
    }
}

extension NSObject: ApplyProtocol {}
```

```swift
addSubview(UILabel().apply { this in
    this.frame = CGRectMake(0, 0, 100, 100)
    this.text = "swift"
    this.textColor = UIColor.cyanColor()
})
```

Kotlinって使ったことなかった人間なので「なるほどー、良い感じ」と
思って記事を読ませていただきました
(投稿者の方に拍手)

ただ、ちょっとだけ遊びでいじってみたくなりました

上のコードだと例えば `UIViewController` の `view`に 
`UILabel` を配置した上で、メンバ変数として持たせたい時に
こんな感じで書くことになるかなぁと

```swift
class ViewController: UIViewController {
    
    private var label: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
        
        self.label = UILabel().apply { this in
            this.frame = CGRectMake(0, 0, 100, 100)
            this.text = "swift"
            this.textColor = UIColor.cyanColor()
            self.view.addSubview(this)
        }
    }
}
```

これでも全然いいと思うのですが、
そもそも短くしたかったソースコードが、減っていない感じになってしまいました

そこで「`UIView` の `extension` を咬ませて、シンプルにできないだろうか?」と
試行錯誤してみてこのようになりました

```swift
// == 参考記事の実装 ==

protocol ApplyProtocol {}

extension ApplyProtocol {
    func apply(closure: (this: Self) -> Void) -> Self {
        closure(this: self)
        return self
    }
}

extension NSObject: ApplyProtocol {}

// == 下記を追加 ==

extension UIView {
    
    func addSubview<T: ApplyProtocol where T: UIView>(view: T, apply applyClosure: (this: T) -> Void) -> T {
        let ret = view.apply(applyClosure)
        self.addSubview(ret)
        return ret
    }
}
```

既存の `addSubview`に オーバロードするような形で
apply内容を書き増しさせることができる・・・という感じです

で、コントローラ側の実装はこうなりました

```swift

class ViewController: UIViewController {
    
    private var label: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
        
        self.label = self.view.addSubview(UILabel()) { this in
            this.frame = CGRectMake(0, 0, 100, 100)
            this.text = "swift"
            this.textColor = UIColor.cyanColor()
        }
    }
}
```

シンプルに・・・なったと個人的には思いましたが、、
うーん、好みかもしれません
CocoaPodsでインストールできるオリジナルライブラリを作成する(4)

#目次

[CocoaPodsでインストールできるオリジナルライブラリを作成する(1)](http://qiita.com/nakau1/items/ec8117d789c4fb2d697a)
[CocoaPodsでインストールできるオリジナルライブラリを作成する(2)](http://qiita.com/nakau1/items/cc22985e2aad15ca02ff)
[CocoaPodsでインストールできるオリジナルライブラリを作成する(3)](http://qiita.com/nakau1/items/c3ea1d60fa81bbd87890)
[CocoaPodsでインストールできるオリジナルライブラリを作成する(4)](http://qiita.com/nakau1/items/15e7187d422cbf8ffb7e)

> 注意
> 
> この話を書く上の例として、
> 自作ライブラリの名前として `"NeroBlu"` という名前をつけています
> 
> これは自分の屋号から取ってきた名前なので、ただの「サンプル名」としてご認識ください
> 名前は各自でご自由につけなおしてくださいね

#まえがき

長く書いてきましたが、そろそろ息切れ・・・

自作のクラスがすべて自製でまかなえれば
そんな素敵なことはないんですが
中には誰かの作ったクラス・ライブラリを絡ませて実現することもあるでしょう
いや、むしろ汎用的なことは優秀なライブラリを使うことで安全に生きていきたい

この回では、そんなライブラリonライブラリなことをやる方法を書きます

#他のライブラリを導入

[CocoaPodsでインストールできるオリジナルライブラリを作成する(1)](http://qiita.com/nakau1/items/ec8117d789c4fb2d697a) で作った
自作ライブラリ作成用のプロジェクトもまた `Podfile` が存在しているかと思います
(自作ライブラリを使う側のプロジェクトじゃないですよ?)

そこに、swiftでJSONを扱うならお馴染みの`SwiftyJSON`を入れてみます

```
use_frameworks!

pod 'SwiftyJSON'
```

`pod install`して使える状態にします

さて、ライブラリには次のような実装をします

```String+Echo.swift
import UIKit
import SwiftyJSON

public extension String {
    
    public func echo() {
        
        let json = JSON.parse(self)
        print(json["text"].stringValue)
    }
}

```

なんのこっちゃなメソッド内容ですが
とりあえずこの extension は SwiftyJSON に依存するようになりました

## podspecを書き換える

```NeroBlu.podspec
Pod::Spec.new do |s|
  s.name         = "NeroBluTemp"
  s.version      = "1.2.0"
  s.summary      = "NeroBlu iOS Core Library."
  s.description  = ""
  s.frameworks   = "Foundation", "UIKit"
  s.source       = { :git => "https://github.com/nakau1/NeroBlu" }
  s.source_files = "NeroBlu/*"
  s.dependency 'SwiftyJSON'
end
```
(※ここではバージョンも書き換えてますが、これは別に気にしなくていいです)

前回から比べて
`s.dependency`というものを足しました

これで、このライブラリは `SwiftyJSON` に依存しますよ、と示すことができます

ちなみに、さらに依存するライブラリを増やす場合は

```rb
  s.dependency 'SwiftyJSON'
  s.dependency 'Alamofire'
  s.dependency 'SDWebImage'
```

みたいな感じで増やしていくようです

ここまでを `git push` します

## 実行してみる

自作ライブラリを使う側で `pod install` を実行してみてください

```
-> Installing NeroBluTemp (1.2.0)
-> Installing SwiftyJSON (2.3.2)
```

`NeroBluTemp`のインストールと同時に、`SwiftyJSON`のインストールも行われました
使う側の `Podfile` に `SwiftyJSON` のことは何も書かなくても
ライブラリ側が「`SwiftyJSON`を使うからよろしくね」って感じで勝手に入れてくれるわけですね

さて、インストールが終わったら
次のように実装してみます

```ViewController.swift
import UIKit
import NeroBluTemp

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        "{\"text\":\"Hello\"}".echo()
    }
}
```

`echo()` メソッドは、ライブラリ側で、 `SwiftyJSON` の仕組みを使って
JSON文字列から`text`キーを抜き取ってコンソール出力するという実装に差し替えました

使う側は `SwiftyJSON` のことは何も気にせずとも

```
Hello
```
と出力されたかと思います