OmniAICreator/Qiita-1.07M huggingface dataset:
Oracle表領域とユーザーの操作

**環境**

- Oracle Database XE 11.2

参照
[OS X で Vagrant な Ubuntu に Oracle XE をインストール](http://qiita.com/usutani/items/549533825065ae9ca043)
[OS X Mavericks に Oracle Client と ruby-oci8 をインストール](http://qiita.com/usutani/items/e9a55051c61457989ddd)

# 表領域
確認

```sql
SELECT TABLESPACE_NAME, STATUS, BIGFILE FROM DBA_TABLESPACES;
SELECT FILE_NAME FROM DBA_DATA_FILES;

-- 表領域の使用量
SELECT
  D.TABLESPACE_NAME,
  MB, 
  AVAIL,
  ROUND((1 - (AVAIL / MB)) * 100) "USE%"
FROM
  (SELECT TABLESPACE_NAME, ROUND(SUM(BYTES) / (1024 * 1024)) MB
FROM DBA_DATA_FILES GROUP BY TABLESPACE_NAME) D,
  (SELECT TABLESPACE_NAME, ROUND(SUM(BYTES) / (1024 * 1024)) AVAIL
FROM DBA_FREE_SPACE GROUP BY TABLESPACE_NAME) F
WHERE D.TABLESPACE_NAME=F.TABLESPACE_NAME;
```

作成
スモール・ファイル表領域'FOO'を100Mで作成する。

```sql
CREATE TABLESPACE FOO 
  DATAFILE '/u01/app/oracle/oradata/XE/foo.dbf' SIZE 100M
  SEGMENT SPACE MANAGEMENT AUTO;
```

削除

```sql
DROP TABLESPACE FOO
INCLUDING CONTENTS AND DATAFILES;
```

# ユーザー

確認

```sql
SELECT * FROM ALL_USERS;
SELECT USERNAME FROM DBA_USERS;
-- デフォルト表領域
SELECT USERNAME, DEFAULT_TABLESPACE FROM USER_USERS;
-- ユーザー'FOO_USER'の表領域を確認する
SELECT USERNAME, DEFAULT_TABLESPACE FROM DBA_USERS WHERE USERNAME='FOO_USER';
```

作成
表領域'FOO'にユーザー'FOO_UESR'をパスワード'FOO_PASS'で作成する。

```sql
CREATE USER FOO_USER IDENTIFIED BY FOO_PASS
DEFAULT TABLESPACE FOO;

-- DBAロールを割り当てる
GRANT DBA TO FOO_USER;
-- サイズ無制限の権限を付与する
GRANT UNLIMITED TABLESPACE TO FOO_USER;
-- 接続権限を付与する
GRANT CONNECT TO FOO_USER;
exit

sqlplus FOO_USER/FOO_PASS@xe
```
localのnugetパッケージを設定する

visual studio を使っていて、ビルド済のlibを使ってもらいたい、けど公式にアップしたくないできないという場合に、ローカルのパッケージソースを指定できる。
vs2015で確認。
## 普通のローカルパッケージソース設定の方法
[ツール]→[オプション]からオプションダイアログ表示
一覧から[NuGetパッケージマネージャー]を選択、英語(nuget package manager)かもしれない。
![image](https://qiita-image-store.s3.amazonaws.com/0/27926/34b822b2-6d08-a584-bace-ddb51eabd080.png)
- 名前
  識別用の名前。
- ソース
  ローカルの .nupkg ファイルがあるディレクトリ。

ここで設定したファイルは、イカの場所にある。
%APPDATA%NuGet\NuGet.Config
## ソリューション毎に指定する
この辺りからイレギュラーな方法。  
1. slnを作成する。
2. slnがあるフォルダに[.nuget]フォルダを作成する。
(例のごとく、"."から始まる名前はエクスプローラでは作れないので、cmd辺りで適当にmkdirする)
![image](https://qiita-image-store.s3.amazonaws.com/0/27926/2dad383c-acd7-728f-5f07-243b7136b162.png)  
3. そこに、"%APPDATA%NuGet\NuGet.Config" のnuget.config ファイルをコピーする。
4. コピーした ".nuget\NuGetConfig" ファイルを編集。
<packageSources>タグの<add>タグの中にパッケージソースを追加します。
１つのvalueに１つのソースが追加できます。
value にはローカルのフォルダが指定できます。
相対パスを指定すると、".nuget\"フォルダからの相対になるようです。
![image](https://qiita-image-store.s3.amazonaws.com/0/27926/5b47d026-4fce-a71e-3774-49011b4b118c.png)
5. slnファイルを開く
  5. 1. ソリューションに[.nuget]という名前でソリューションフォルダを追加する。
  5. 2. そこに、先ほどコピーした".nuget\NuGetConfig"ファイルを追加する。
  5. 3. sln を保存して、vsを開きなおす。
    （念のため）
![image](https://qiita-image-store.s3.amazonaws.com/0/27926/d3fd493e-dd58-8ebc-38bd-ebcf0ee28030.png)
6. slnを開きなおし、Nugetパッケージ管理を開くと、パッケージソースに先ほど編集した Nuget.Config ファイルの内容が反映されている。
この状態で[ツール]→[オプション]のオプションダイアログからパッケージソースを編集すると、".nuget\NuGetConfig" ファイルが編集されるようです。ただし、相対パスはどうオプションダイアログで入力を試みたら、有効なパスを指定してくださいと怒られたので、ファイルを直接編集必須かも。

相対パスに設定してから、 git にローカルnugetのnupkgを強制追加すれば、PC移動して開発も楽。Nugetパッケージの復元で、ここで指定したローカルのパッケージソースが参照されるようになります。


###感想文
イレギュラーな設定をしている感満載だったので、みんなで共有できる場所に配置するのが正攻法なんだろうなと思います。

以前のバージョンのvisual studioでnuget.configファイルが存在、restore 機能が搭載されたころに、このファイルが不要になったというアナウンスがあった気がする。この書き方はその古い書き方を再利用して、nuget.configの設定を上書きしているんだろうなぁ。という想像です。古い機能ということは将来のvisual studioでなくなるかもしれないので少し怖いです。

packages フォルダ以下を丸ごとgitに強制追加する方法もあるのだけれど、同フォルダの中身を見れば分る通り、*.nupkgファイルとその展開ファイルが存在していて、重複しているのが気に入らなかった。
GitHub の commit 履歴からパスワードファイル等だけを消す方法

## 簡単だけど、忘れない様にメモ

GitHubに変更をかけて、ユーザーIDとパスワードを保存したファイルをうっかり、追加して、コミット、プッシュしてしまうと、git rm しても、コミット履歴に、ファイルの内容が公開されて残ってしまう。

```
$ git add --all
$ git commit -m "update"
$ git push
```

こんな時は、filter-branch で履歴から削除できる。 この例では account.json とうファイル名を指定して、履歴から削除している

```
$ git filter-branch -f --index-filter 'git rm --ignore-unmatch account.json' HEAD
Rewrite 84d228747d1435eb37f538b56f1825b92074bf71 (23/23)
WARNING: Ref 'refs/heads/master' is unchanged
```

GitHubのマスターを削除するために、プッシュして、コミット履歴からの削除完了

```
$ git push --force origin master
Username for 'https://github.com': takara9
Password for 'https://takara9@github.com': 
```


## 参考にしたリンク
- [Git の履歴からファイルを完全に削除する – git filter-branch](http://easyramble.com/git-filter-branch.html)
- [6.4 Git のさまざまなツール - 歴史の書き換え] (https://git-scm.com/book/ja/v1/Git-%E3%81%AE%E3%81%95%E3%81%BE%E3%81%96%E3%81%BE%E3%81%AA%E3%83%84%E3%83%BC%E3%83%AB-%E6%AD%B4%E5%8F%B2%E3%81%AE%E6%9B%B8%E3%81%8D%E6%8F%9B%E3%81%88)
[AndroidStudio]runがうんともすんとも言わない時の対処

##やりたい事
USBで繋いでいる実機で実行したい

##確認した事
- スマホ側はデバッグモードで繋いでいるか（充電専用のケーブルだとできません）
- PCはスマホをマウントできているか（コンピューターの接続状況を見て、必要ならケーブル抜き差し）

##それでもできない場合
「adb_usb.ini」ファイルを書き換える

###場所
windows7かVISTAの場合
「コンピュータ」
->「OS(C:)」
->「ユーザー（またはUsers）」
->PCのユーザー名
->「.android」

###書き換える内容
空白行を削除して上書き保存

※参考にさせていただきました
MacのAndroidStudioでrunするとcrashする問題の解決
http://qiita.com/higehiki/items/521af33a6892545979e1

##確認
AndroidStudioを再起動してrun

##感想
「昨日までできてたのに～」ということはままありますし、急いでいるときこそエラーが出るような気がします。
そんな時は一息ついて対処法を探りましょう。
cocos2d-xでスクリーンショットをとってシェアする機能を実装する

#背景
シェア機能は以前から実装していたのだけれど、固定のイメージだけだった。
用意しても数個という感じだったのだけれど、やっぱりゲームのリアルな感じをシェアできた方が、よいに決まっている。
ユーザにもシェアしてるぞーという感じを体験させてあげられるので、できるようにするために調べてこの記事を書こうと思う。

ちなみに寄稿しようと思ったきっかけはこの記事なのでよければ。
[【レビュ学】人気アプリ「俺の校長3D」を分析し面白さを盗む！](http://blog.tadamatuapps.com/2015/10/3d.html)

#cocos2d-xでスクリーンショットをとる
```lang:ScreenShot.cpp
// スクリーンショットを取得し、ツイートする
void screenShot() {
    
    // スクリーンショットのテクスチャを取得する
    Size size = Director::getInstance()->getWinSize();
    RenderTexture* texture = RenderTexture::create((int)size.width, (int)size.height);
    texture->setPosition(Point(size.width/2, size.height/2));
    texture->begin();
    Director::getInstance()->getRunningScene()->visit();
    texture->end();
    
    // 取得したテクスチャを保存する
    texture->saveToFile("screenshot.png", Image::Format::PNG, true, [&](RenderTexture* rt, const std::string& path) {
        // 保存完了のコールバック処理
        // ツイートをする
        NativeCodeLauncher::postTwitter("ツイート内容", "http://blog.tadamatuapps.com/",path.c_str());
    });
}
```

ツイートの実装は別記事に委ねるが、これでcocos2d-xでゲーム中などのスクリーンショットをとって、ツイートができるようになった。
参考：
[iOSアプリにソーシャル機能を組み込む【実践編】](http://blog.tadamatuapps.com/2015/07/ios.html)
[LINE,Twitterに投稿する機能をつける(Android)](http://devalon.biz/androidde/)


ちなみに、スクリーンショットのタイミングと、ツイートのタイミングをずらす場合は、次のように実装すればよい。

```
// 取得したテクスチャを保存する
texture->saveToFile("screenshot.png", Image::Format::PNG);

// パスを取得し、ツイートをする
std::string path = FileUtils::getInstance()->getWritablePath().append("screenshot.png");
NativeCodeLauncher::postTwitter("ツイート内容", "http://blog.tadamatuapps.com/", path.c_str());

```

パシャという音もあればよいかもしれませんね。


お試しあれ。
伝える系の英語とnote, notice, notification…の使い分け

## はじめに

「コメントを書く」「言及を行う」「情報を述べる」「説明を書く」あたりの英語（主に名詞）が混同するので、まとめました。

特に、

```css
<div class="note"></div>
<div class="notice"></div>
<div class="notification"></div>
```

あたりはいつも悩むので、note系とそれ以外でまとめました。

これ系の命名ガイドラインみたいなのがあるかもしれませんが、
使用頻度、結論は筆者のセンスによる独断なので、
「これもよく使う」「いや、こういう用途でははこの命名が鉄板」、とかがあれば教えてください。

## 本題

### 響きに“note”を含んでいるもの

※「使用頻度」はHTMLのクラス名としてよく見かけた記憶がある、程度です

| 英語 | 意味 | 使用頻度 | 補足 |
|:-----------|:-----------|:-----------|:-----------|
| note | 記録、ノート、__書き込み__ | ○ | フォーマル。伝える気はあまりない |
| notice | __通知__、警告 | ◎ | カジュアル。伝える気がある |
| notification | __通知__ | ○ |  |
| notify | 知らせる、通知する | × | 動詞 |
| notation | 表記法、表示法、記法、記譜法 | × |  |
| annotation | __注釈__ | △ |
| notion | 概念 | × |  |

### その他通知、コメントっぽいもの

| 英語 | 意味 | 使用頻度 | 補足 |
|:-----------|:-----------|:-----------|:-----------|
| memo | 手控え、__覚え書き__ | ○ |  |
| memorandum | __覚え書き__、備忘録、メモ | × |  |
| memoranda | 報告書、意見書、__覚書__ | × | memorandum の複数形 |
| text | 教科書、__本文__ | ◎ | とりあえず本文っぽい要素につける |
| description | 記述、描写、__説明__ | ◎ | meta文言の決まり文句でもあり、本文クラスにもよく使ってる |
| comment | 論評、解説、説明 | ○ | コメントアウトとの使い分けに注意 |
| caution | 用心、__注意__、警戒、警告 | ○ | 「※」が付くものには最適かも |
| warning | __警告__、注意 | ○ |  |
| alert | 警報 | △ |  |
| attention | 注意、注目 | △ |  |
| remark | 注目、関心 ／ 意見、見解、所見 | △ |  |
| acknowledgement | __謝辞__、受け取りの通知[証明]、領収書、礼状 | × | 論文の謝辞 |
| mark | 記録をつくること、しるしをつけること、目印を置くこと | △ |  |
| ad | 広告 | △ | 広告（略語） |
| advertising | 広告、広告業 | × | 広告 |
| advertisement | 広告 | △ | 広告 |
| point out | 指摘する | △ |  |
| commentary | 注釈、解説、注解書、コンメンタール | × |  |
| supplementation | 補足、補遺、増補、付録、付記 | × |  |
| explanation | 説明、釈明 | × |  |
| appendix | 付録、__追加__、補遺 | ○ | 基本、付録の意味でのみ（論文の付録セクションとしては一般的） |

## よく書くHTML（偏見）

```html
<aside class="appendix">
  <h1 class="heading">追加資料</h1>
  <p class="warning">警告: あくまでも自己責任でお願いします！</p>
  <p class="description">本章では追加の資料を記載します。</p>
  <p class="notification">これは2015年10月4日に書かれた記事です。<br>古くなっている可能性があるのでご注意ください。</p>
  <div class="content">
    <p>ここが本題。サンプルサンプル。</p>
    <p class="comment"><small>（もっと完璧な説明を書きたい…。）</small></p>
  </div>
  <p class="notice"><small>※これはサンプルです</small></p>
</aside>
```

## まとめ

他を調べきれてないので早急な結論ではありますが、
「伝えたい」という要素のクラスにはnotice、
「参考程度の情報」という要素のクラスにはnote
が最適だと思います。

## 参考・転載元

[ことのはの散策 in 情報，工学，諸々: 2014年1月](http://kieshan.cocolog-nifty.com/kotonoha/2014/01/index.html)
[notation: 表記法，表示法，記法](http://lise-sophia.net/kktm/Essay/notation.htm)
レンタルサーバーにgitを入れてみた

# レンタルサーバーにgitを入れてみた
## 前提条件
レンタルサーバーでシェルへのアクセスができること

## 準備
gettextとgitのアーカイブを入手してアップロードしておく
[http://ftp.gnu.org/pub/gnu/gettext/gettext-0.19.1.tar.gz](http://ftp.gnu.org/pub/gnu/gettext/gettext-0.19.1.tar.gz)
[https://github.com/git/git/archive/master.zip](https://github.com/git/git/archive/master.zip)
今回は~/tmpディレクトリにアップロードしました

## gettextのインストール
今回は~/optディレクトリにインストールすることにする

```shell-session:shell
cd ~/tmp
wget http://ftp.gnu.org/pub/gnu/gettext/gettext-0.19.1.tar.gz
tar xvf gettext-0.19.1.tar.gz
cd gettext-0.19.1
./configure -prefix=$HOME/opt
make
make install
```

## パスを通す

```shell-session:shell
export PATH=~/opt/bin:$PATH
```
必要に応じて.bashrcに追加しておく

## gitのインストール
今回は~/optディレクトリにインストールすることにする

```shell-session:shell
cd ~/tmp
unzip git-master.zip
cd git-master
make configure
./configure --prefix=$HOME/opt
make all
make install
```

## インストールできたら
```shell-session:shell
git --version
```
インストールしたgitのバージョンを確認してみる
es7 async/await

es7のasync/awaitのシンプルな例

```js
var sleep = (delay) => {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve();
    }, delay);
  });
};

var threeWiseMonkeys = async () => {
  await sleep(1000);
  console.log('see no evil');
  await sleep(2000);
  console.log('hear no evil');
  await sleep(3000);
  console.log('speak no evil');
}

threeWiseMonkeys();
```

また、sleepは下記のようにも書ける

```js
var sleep = delay => new Promise( resolve => setTimeout(resolve, delay) );
```
Visual Studio 2015でQt5.5を使う


Qtはもうすぐ発表するversion5.1.1でWindows10とVS2015に対応する予定らしいけどそこまで待てなかったので、自分でgitからソースを取得してbuildしてみた。結構めんどくさかったので記録しておく。
基本的には[ココ](http://relog.xii.jp/mt5r/2012/08/qt5-windows.html
)に書いてあることをそのままなのであしからず。

## 必要環境
まず、Qt5.5.1[^1]をビルドするには以下の環境は必要になる。

* [ActivePerl](http://www.activestate.com/activeperl) ($\geqq version 5.12$)
* [ActivePython](http://www.activestate.com/activepython) ($\geqq version 2.7$)
* [git](https://git-for-windows.github.io/)
* Windows SDK ($\geqq for~windows 7$)
* Visual Studio 2015 Community

これらをすべてインストールする。(画面の指示に従ってればとりあえずok) 
## ソースコードの取得
とりあえず、Qtのソースコードを取得する。

```cmd
cd to_download_directory
git clone git://gitorious.org/qt/qt5.git qt5
```

Qtのgitはperlのスクリプトを呼ばないと初期化されないので下のコマンドで必要なソースコードを追加取得する(こっちのほうが上よりも実行時間が長い)

```cmd
cd qt5_directory
perl init-repository
```

## 必要な環境変数の指定
ビルドやconfigureに必要な環境変数を指定していく

```cmd
CALL "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x86
set QTDIR=qt5_directory
set PATH=%QTDIR%\bin;%PATH%
set QMAKESPEC=win32-msvc2015
```

## ビルド
```cmd
configure -developer-build -opensource -nomake examples -nomake tests -opengl desktop -prefix "c:\qt\qt5.0.0b" -confrim-license
nmake
```
nmakeだとbuild時間が長いため、Qtが別で作っている[jom](https://wiki.qt.io/Jom)を使ったほうが短時間でbuildすることができる。
どちらにせよ時間がかかるので寝る前なり出かける前なりにどうぞ

## インストール
```cmd
nmake install
```

## Visual Studio 2015用のAdd-inの追加
Visual StudioでQtをプログラミングするためにはAdd-inを追加する必要がある。これを追加するためにはツールバーからツール>拡張機能と更新プログラムの画面でQt用のAdd-inを選択する。

![Qt_add-in.png](https://qiita-image-store.s3.amazonaws.com/0/68948/46975645-7153-1d66-5e9d-ce8aee3d23c9.png)

インストールしたらツールバーにQT5のボタンができてるはずなので、"Qt Options"を選択し、"Qt Versions"にインストールパスを指定する。

![qt_option.png](https://qiita-image-store.s3.amazonaws.com/0/68948/7f4fd749-adc2-271d-a17e-9e8a8623e503.png)

これで完了。

## プロジェクトの新規作成
Add-inを追加するとnew ProjectにQt用の項目が追加される。

![new_project.png](https://qiita-image-store.s3.amazonaws.com/0/68948/32a60921-abd9-9b33-ab8d-64433971a4f5.png)

あとはQt Createrと一緒なのでおいおい勉強していく。

## 参考
* 理ろぐ様 (http://relog.xii.jp/mt5r/2012/08/qt5-windows.html)
* http://www.bogotobogo.com/Qt/Qt5_Visual_Studio_Add_in.php

[^1]: 現在(2015/10/04)のgitの開発バージョンは5.6であるが。
ドメイン知識を計画作りにどう使うか

# 結論
ドメイン知識のある人というのは、気象予報士みたいなものだと思っている
ドメイン知識は持っているだけでは役に立たない。 
どう使うか。気象予報士のように使う。
 
# 気象予報士はなにをする？
気象予報士は天気図を見て、未来の事象である明日の天気や気温を予測する。
これは、明日の事象に影響する変数要素や数式を理解しているからだ

# 気象予報士のように使う、とは？
ある特定の、未来の事象を変数要素や数式で予測できること。
また、天気予報に含まれる要素(気温、天気、降雨確率、降雨量)のように「事象を表す要素として何を発表すればいいか」を無数の要素のなかかから選択できること。

`未来の事象を数式で予想できること`
`数式に必要な変数要素がわかること`
`事象を表す少数の要素を選択できること`
この３つが重要

昔大規模イベントの分析を行ったことがあって、イベントを表す要素として「推定参加者数、推定売上、１行説明」を入れた。これで読んだ人が大体わかるだろう、っていう要素がこの３つ。
推定に当たってはいずれも私が担当した分野では公式発表されないことが多い数値だが、いくつかの要素がわかればこれは簡単に推定できる。
例えば参加者数は消防法のからみで推定できる(詳細は秘密)。

# 事象を予測できると何がいい？
現実味のある企画書が書ける。
企画書には２種類ある。
現実性のある「プラン」と数字に現実味のない、極彩色の妄想である「ドリーム」だ。
後者は企画者の脳内にある現実歪曲空間でだけ通じる法則に基づいて作られている。

# ドリームの何がまずい
ドリームだと判明しなければそのままサービス開発してしまい、３年たって赤字垂れ流しで撤退判断みたいな目にあう。
(2013年くらいのソシャゲやそのあとの新規事業でよくありましたね)

OSSのコミッタークラスが素晴らしい技術開発したプロダクトでも、現実味のない企画にもとづいて作られれば、それは「すごい技術で作られたガラクタ」にすぎない。
(うっ、心当たりが・・・)
開発し始めた当初は「ソシャゲでぶいぶい言わせた俺たちが作るんだからヒット余裕っしょ」という砂糖に蜂蜜かけたような甘い目論見は、３年間パッとしない現実の前に押しつぶされる。

# ドリームをやめるには
ドリームの検出は役員チェックあたりで検出されることが多いが、役員チェックの前に企画のコストがかかっていることを考えると、企画者自身の目で「これドリームなんじゃね」っていう判断をすることが望ましい。
そのために企画者がドリーミーな企画書を書かないことが必要。

ドリーミーな企画書を書かないために、企画者自身のドメイン理解が必要だと思っている
Google API Client for python でのService Account OAuthとAPIの使い方

# 0. はじめに

Google API Client for pythonでのOAuthとAPIの使い方について。
今回はService Accountでの認証で、APIはCalendarを対象とします。

Google公式の認証についての解説ページ。
[Using OAuth 2.0 for Server to Server Applications](https://developers.google.com/api-client-library/python/auth/service-accounts?hl=ja)

# 1. 下準備

## Google API Clientの取得

こちらを使います。
[google/google-api-python-client](https://github.com/google/google-api-python-client)

pipでインストールします。

```
$ pip install --upgrade google-api-python-client
```

## Google Developers Console

まず、Google Developers ConsoleでService Accountを作成します。

1. プロジェクトを作成
2. [APIと認証]→[API]でCalendarを有効化 ※OAuth同意画面の設定を行っておく
3. [APIと認証]→[認証情報]→[認証情報を追加]→[サービスアカウント]→[p12]で作成し「~.p12]ファイルを保管しておく ※JSONでも可

## 管理コンソール

[管理コンソール](https://admin.google.com/)でAPIの権限設定を行います。

※サービスアカウント毎に設定を行わないとAPIを使った際に以下のようなエラーが発生しますので必ず設定してください。

```
oauth2client.client.AccessTokenRefreshError: access_denied: Requested client not authorized.
```

1. [セキュリティ]→[もっと見る]→[詳細設定]→[APIクライアントアクセスを管理する]
2. [クライアント名]にDevelopers Consoleで作成した「クライアントID」（.apps.googleusercontent.com）を入力 ※メールアドレスではないので注意
3. [1 つ以上の API の範囲]に「https://www.googleapis.com/auth/calendar,https://www.googleapis.com/auth/calendar.readonly」を入力
4. [承認]を押下

# 2. モジュールの作成

```py:google_auth.py

import json

from httplib2 import Http

from oauth2client.client import SignedJwtAssertionCredentials
from googleapiclient.discovery import build

# サービスアカウントのメールアドレス
client_email = '999-xxx@developer.gserviceaccount.com'

# p12版の認証
fileName = "./project.p12"

with open(fileName, 'rb') as f:
    private_key = f.read()

credentials = SignedJwtAssertionCredentials(client_email, private_key,
        'https://www.googleapis.com/auth/calendar https://www.googleapis.com/auth/calendar.readonly'
    ,sub='info@example.com')

# json版の認証
#fileName = "./project.json"
#json_key = json.load(open(fileName))

#credentials = SignedJwtAssertionCredentials(json_key['client_email'], json_key['private_key'],
#   'https://www.googleapis.com/auth/calendar https://www.googleapis.com/auth/calendar.readonly'
#    ,sub='info@example.com')


http = Http()
credentials.authorize(http)

# Calendar API
from apiclient.discovery import build

calendar_service = build('calendar', 'v3', http=http)

calendar_list = calendar_service.calendarList().get(calendarId='info@example.com').execute()

print calendar_list['summary']

```

実行結果）

```
info@example.com
```

注意事項）

1. SignedJwtAssertionCredentialsの引数にsub='メールアドレス'を設定しないと、以下のエラーが出てAPIにアクセスできません。

```
googleapiclient.errors.HttpError: <HttpError 404 when requesting https://www.googleapis.com/calendar/v3/users/me/calendarList/info%40example.com?alt=json returned "Not Found">
```

## 参考URL
1. https://developers.google.com/api-client-library/python/auth/service-accounts?hl=ja

2. http://stackoverflow.com/questions/21407985/google-calendar-api-404-on-calendar-service-account

3. http://kb.cloudiway.com/errorunauthorized_client-descriptionunauthorized-client-or-scope-in-request-uri/


以上。
Beego Error handingする

##1:controllersフォルダの下に下記のファイルを作成する

404と500とデータベースerrorを定義する

```app/controllers/error.go
package controllers

import (
    "github.com/astaxie/beego"
)

type ErrorController struct {
    beego.Controller
}

func (c *ErrorController) Error404() {
    c.Data["content"] = "page not found"
    c.TplNames = "404.tpl"
}

func (c *ErrorController) Error500() {
    c.Data["content"] = "server error"
    c.TplNames = "500.tpl"
}

func (c *ErrorController) ErrorDb() {
    c.Data["content"] = "database is now down"
    c.TplNames = "dberror.tpl"
}
```

##2:router.goに下記を追加する

```routers/router.go
package routers

import (
    "github.com/app/controllers"
    "github.com/astaxie/beego"
)

func init() {
    beego.ErrorController(&controllers.ErrorController{})
    beego.Router("/", &controllers.MainController{})
}

```

##3:viewsフォルダに500.tpl, 404.tpl, dberror.tplを作成
PR-400KIでDNSルーティング設定をする方法


# come25136の環境
ルーターのIPアドレス:192.168.1.1
DNSサーバーのIPアドレス:192.168.1.5

# 設定
ルーターにアクセスする(ここで使う画像はすべてchromeの画面をキャプチャしたものです)
![キャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/71322/e105e794-8ff0-3955-b9a5-597466edc62b.png)

設定しているユーザー名とパスワードを入力(デフォルトだとユーザー名:user パスワード:user のはず)
![キャプチャ2.PNG](https://qiita-image-store.s3.amazonaws.com/0/71322/2a9f20ae-ed21-712c-19ad-e1383e4f00f4.png)

詳細設定(①)をクリックした後にDNS設定(②)をクリック
![キャプチャ3.png](https://qiita-image-store.s3.amazonaws.com/0/71322/340f30da-1972-895f-afb0-f714c56b75ec.png)

エントリ番号 1 をクリック (空いてる番号ならどれでもいいです)
![キャプチャ4.png](https://qiita-image-store.s3.amazonaws.com/0/71322/a6c4a4ad-05d5-5815-e291-0100b68c888f.png)

ドメイン名に使用したいドメイン名を入力(各自変更してください)
プライマリDNSサーバアドレスにDNSサーバーのIPアドレスを入力(こちらも各自変更してください)
**※ここではDNSサーバーのIPアドレスをIPv4射影アドレスに変換したものを入力しています**
セカンダリDNSサーバーアドレスには何も入力せずに設定ボタンをクリック
![キャプチャ5.PNG](https://qiita-image-store.s3.amazonaws.com/0/71322/bcbb682d-fd15-6632-714f-1ddf1dda2700.png)

# 作業完了
これでアクセス出来ない場合は
コマンドプロントで↓のコマンドを執行してみてください(Windowsの場合)

```text
ipconfig /flushdns
```

# DNSサーバーの建て方(yubaxpさんの記事です)
[http://qiita.com/yubaxp/items/d7e33957238051a9c441](http://qiita.com/yubaxp/items/d7e33957238051a9c441)
ごく短いメソッドチェーンの仕組みと遊び

メソッドチェーンの仕組みを今までスルーしていたんですが、関数でthisを返し、そのthisを利用するとできるんですね。

ここでいうthisとは、いわゆるwindowオブジェクトです。なので環境依存ですね。（ブラウザでは動くと思います）

```js:メソッドチェーンの仕組み

var base = function(){
  console.log("base");
  return this;
};

var chain = function(){
  console.log("chain");
  return this;
};

//base chain chain chain
base().chain().chain().chain();

```

base()はthis（windowオブジェクト）を返して、this.chain()を実行、chainはさらにthisを返して、this.chain()

thisのグローバル空間はどこか？というのも、最近の環境によって色々あると思う（node.js , webview, electronなど）ので掘り下げたいテーマですね。

そうしたら、ムーアの法則を作ってみます。（1年で2倍とします）

```js:ムーアの法則
var entry = function(num){
  this.num = num;
  console.log("entry",this.num);
  return this;
};

var moore = function(){
  this.num *= 2;
  console.log(this.num);
  return this;
};

//entry 2 , 4 , 8 , 16 , 32
entry(2).moore().moore().moore().moore();

//32 グローバル（this.num）に変数が汚染
console.log(num);
```

ここでいうthisというのはwindowオブジェクトですから、グローバルなんですね。ということでどんどんグローバルに変数が入っていってしまいます。なので、本当はメソッドチェーンはクラスを作って使うのが良いようです。それか使うなら、命名を特殊にして名前が競合しないようにとかですかね。

もうちょっと遊んでみましょう。
顔に見えますか？

```js:0_0

var $_$ = function(){
  return this;
};

var _0_0 = function(){
  return this;
};

$_$("0_0")._0_0("$_$");

```

混乱を誘うコードを書いてみましょう（あえてシンタックスなし）

```

var _ = function(){return this};
_(")_(")._(")(");
```
Otto dev sshしてからhostのMysqlへの接続

#Ottoを試してた時
MacOS X上にあるMariaDBへの接続したいなーっと思って。
HostのIPってどうやるのか調べてて、これでいけた。

```bash
netstat -rn | grep "^0.0.0.0 " | cut -d " " -f10
```
それをRailsのconfig/database.ymlに入れてみて、

```yaml
development:
  <<: *default
  database: hoge_development
  host: 出てきたIP
```

これでOtto上から接続できた
Three.jsで繰り返しの背景を使う方法

Three.jsで繰り返しの背景を使おうとしたのですが、

空間内で立方体でカメラを囲むようにして、背景に設置せよ。

みたいな解決しかなかった。


案外とベーシックに、背景を空間とは関係なし繰り返す方法は、

Three.jsを透過させる
renderer = new THREE.WebGLRenderer({ alpha: true });

クリアカラーで消す、２つめの引数が0
renderer.setClearColor( 0x000000, 0 );

で透けるので、
canvasの対象に背景を設置、cssで設定。

で繰り返し背景が使えた。

ただ、透過って処理が重いイメージがあるので、
ご利用は自己責任でお願いします
iOSのopensslライブラリをビルドする手順


以下の条件でopensslフレームワークを生成します。

+ Xcode: 7.0
+ Mac OS: 10.10.5 Yosemite 
+ OpenSSL version: 1.0.2d


## 1. 現在のOpenSSLバージョンを確認
```
$ openssl version -a

OpenSSL 0.9.8zg 14 July 2015
....
```

## 2. OpenSSLをHomebrewでアップデート
```
$ brew update
$ brew install openssl
$ brew link --force openssl
```

シェルを再起動後バージョンを再度確認します。

```
$ openssl version -a
OpenSSL 1.0.2d 9 Jul 2015
...
```

## 3. 変換プログラムを入手
[x2on/OpenSSL-for-iPhone](https://github.com/x2on/OpenSSL-for-iPhone)

上記リンクからZIPをダウンロードします。
解凍したフォルダへ移動し以下のコマンドを実行してビルドします。

`./build-libssl.sh`

しばらく待てば完成。

フレームワーク化するには以下のコマンドを実行し、生成されたopenssl.frameworkを各自のプロジェクトへ取り込みます。

`./create-openssl-framework.sh`

Xcode7.0ではフレームワークを追加しても、Build SettingsのFramework Search Pathが自動で追加されないので手動で追加したパスを記載する必要があるので注意が必要です。

## ビルドエラーが出た場合の対処
```
clang: warning: no such sysroot directory: '/Library/Developer/CommandLineTools/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk'
In file included from cryptlib.c:117:
./cryptlib.h:62:11: fatal error: 'stdlib.h' file not found
# include <stdlib.h>
          ^
1 error generated.
make[1]: *** [cryptlib.o] Error 1
make: *** [build_crypto] Error 1
```

上記のようなエラーでビルドできない場合は次のコマンドを実行します。

`$ sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer`

`Xcode.app`の名称を(Xcode7.app等)変更している場合は
`$ sudo xcode-select -switch /Applications/Xcode7.app/Contents/Developer`

先ほど解凍したフォルダを削除し、再度zipから解凍、そのフォルダへ移動して以下を再度実行すると通るかと思います。

`$ ./build-libssl.sh` 


## おわり

[Cocoapods](https://cocoapods.org/?q=openssl)にもあったかな？
csharp > 静的コンストラクタ > クラスのメンバーを初めて利用した際に呼ばれる

引用: 即効入門 C#プログラミング すぐに現場で使える知識 by 中 博俊さんら
5.3 クラスのメンバー

> 静的コンストラクタ
コンストラクタにstatic修飾子を付けた場合（静的コンストラクター）クラスのメンバーを初めて利用した際に呼ばれる初期化コードになります。

http://ideone.com/BpM2BM

```sample.cs
using System;

public class CSample
{
	public CSample() {
		Console.WriteLine("instance ctor");
	}
	static CSample() {
		Console.WriteLine("static ctor");
	}
}

public class Test
{
	public static void Main()
	{
		CSample insA = new CSample();
		CSample insB = new CSample();
		CSample insC = new CSample();
	}
}
```

```txt:結果
static ctor
instance ctor
instance ctor
instance ctor
```

なお、`static CSample() {`は`public static CSample() {`のように書くと`prog.cs(8,16): error CS0515: CSample.CSample()': static constructor cannot have an access modifier`と怒られた。
csharp > 自動実装プロパティ/バッキングフィールド > public int CustomerID { get; set; } で指定するプロパティ / ...で生成されるフィールド


```csharp
class Customer 
{
   ...
   public int CustomerID { get; set; }
   ...
```

上記のように指定するプロパティを「自動実装プロパティ」と呼ぶようだ。

https://msdn.microsoft.com/ja-jp/library/bb384054.aspx

また、自動実装プロパティで生成されるフィールド(~~上記ではCustomerIDのこと？~~）のことを「バッキングフィールド (backing field)」と呼ぶようだ。

backing fieldについては @zakuro9715 さんのコメントを参照ください。
技術英語 > Seems we've developed a new problem while you were gone. / develop a liking for 

@ Star Trek Voyager > CATHEXIS

問題の調査から戻ったトム・パリスに対してJaneway艦長が言った言葉

> Seems we've developed a new problem while you were gone.

新しい問題が生じた、というのに対して「develop」を使うのが面白い。

Seemsとなっているが、It seems ...なのだろう。


<hr>
developつながりでは

http://ejje.weblio.jp/content/liking+to
> conceive [develop] a liking for…

2012年に放送していたトラッドジャパンという番組で司会者が[develop a liking]というのを使っていた記憶がある。

developを使うことで「好き」の気持ちが強くなっていく、というニュアンスになるのだと思う。

関連したものとしては、developing countries (発展途上国：発展していく国々）。
ES6のPromiseでPromise.resolve(Promise.resolve(1)).then(fn)を実行するとfnの実引数には1が渡る

タイトルの通りなんですが、初め1でfullfillされるPromiseが渡ってくる、と思ってはまりました。[MDNの`Promise.resolve(value)`](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Promise/resolve)の説明にもちゃんと書いてありますね。
> 引数で与えられた値で完了されたPromise オブジェクトを返します。値が成功なら (すなわちthen メソッドを持っている)、返されるプロミスは成功に従い、その最終的な状態を採用します。さもなければ、返されるプロミスはその値で失敗にされます。

`new Promise((res) => { new Promise((r) => { r(1); }); })`もおそらく一緒で、node4で実行したら1が返りました。

[DefinitelyTyped/es6-promise.d.ts](https://github.com/borisyankov/DefinitelyTyped/blob/master/es6-promise/es6-promise.d.ts) だと直和型を使って`Promise<R>`型に対して、
```
 then<U>(onFulfilled?: (value: R) => U | Thenable<U>, onRejected?: (error: any) => U | Thenable<U>): Promise<U>;
```
のように書いてあります。thenの定義を載せましたが、他も同様に直和型です。`onFullfilled?`が`R`を受け取って`Thenable<U>`を返す関数だと、`then`が返すインスタンスの型は、`Promise<Promise<U>>`型ではなく、`Promise<U>`型なんですね。
DjangoのAdmin(管理サイト)で画像を表示する方法

Djangoの管理サイトにて「一覧画面に画像が表示できたら、作業効率がいいのにな」ということがあったのですが、調べたところとても簡単にできたのでTipsとして記録しておきます。

Qiitaにはやや簡単な情報ばかりまとめていて少し恐縮ではありますが、DjangoについてはGoogle検索をしてもStack Overflowで埋め尽くされていることが多く日本語でヒットする情報が少ないので、誰かの役に立つかもと思い投稿している次第です。

なお、本稿については動作確認をDjango1.8で行っています。

## やりたい事

![イメージ図](https://qiita-image-store.s3.amazonaws.com/0/27019/18bbaff3-91ef-5b2b-3fc1-8aae93fda3d2.png)

## 書き方

拙著の[DjangoのAdmin(管理サイト)でManyToManyFieldを使いたいときの方法](http://qiita.com/masutaro/items/502b6e92de7d99939741)の続きとして書きます。

以下のように、models.pyの中に画像のファイルパスを返す任意の名前のメソッド(`admin_og_image`)を定義して、`allow_tags = True`としてやります。

### models.py
```diff
@@ -11,9 +11,18 @@ class Article(models.Model):
     title = models.CharField(max_length=100)
     author = models.ForeignKey(Author, blank=True, null=True)
     meta = models.ManyToManyField('Tag')
-
+    og_image = models.ImageField(default='')
+    
     def __unicode__(self):
         return self.title
+    
+    def admin_og_image(self):
+        if self.og_image:
+            return '<img src="{}" style="width:100px;height:auto;">'.format(self.og_image)
+        else:
+            return 'no image'
+        
+    admin_og_image.allow_tags = True
```

そして、admin.pyの`list_display`に該当のメソッド名を追加すれば完了です。

### admin.py
```diff
@@ -3,7 +3,7 @@ from django.contrib import admin
 from .models import Author, Article, Tag
 
 class ArticleAdmin(admin.ModelAdmin):
-    list_display = ('title', 'author', '_meta')
+    list_display = ('title', 'author', '_meta', 'admin_og_image')
```

## 補足

なお、admin.pyのみで完結する書き方も可能で、その場合は以下のように書いてやればOKです。

### models.py
```diff
@@ -11,9 +11,18 @@ class Article(models.Model):
     title = models.CharField(max_length=100)
     author = models.ForeignKey(Author, blank=True, null=True)
     meta = models.ManyToManyField('Tag')
-
+    og_image = models.ImageField(default='')
+    
```

### admin.py
```diff
@@ -3,11 +3,19 @@ from django.contrib import admin
 from .models import Author, Article, Tag
 
 class ArticleAdmin(admin.ModelAdmin):
-    list_display = ('title', 'author', '_meta')
+    list_display = ('title', 'author', '_meta', 'admin_og_image')
 
     def _meta(self, row):
         return ','.join([x.name for x in row.meta.all()])
 
+    def admin_og_image(self, row):
+        if row.og_image:
+            return '<img src="{}" style="width:100px;height:auto;">'.format(row.og_image)
+        else:
+            return 'no image'
+        
+    admin_og_image.allow_tags = True
+    
```
情報処理技術者が知っているべき知識や道具について考えてみた

# 理論編
情報処理技術者試験の目次を参考に考えてみる
## 情報理論
* 情報量
* N進数
* 絶対値表現・補数表現
* 浮動小数点数
* 誤差
* ビット演算
* オートマトン

## データ構造
* 配列
* ハッシュ
* リスト
* ツリー
* グラフ

## アルゴリズム
* 整列
* 探索
* 文字列
* 計算幾何
* グラフ
* 機械学習

## ハードウェア
* 入力装置:キーボード, マウス, スキャナー, マイク
* 出力装置:ディプレイ, プリンタ, イヤホン, スピーカー
* 記憶装置:レジスタ, キャッシュ, メモリ, HDD, SSD
* 演算装置:ALU
* 制御装置:CPU

## ソフトウェア
* オペレーティングシステム
* アプリケーション

## データベース
## ネットワーク
## セキュリティ


# 実践編
各種類のエンジニアでどんなスキルが必要なのかを考えてみる

## エンジニア共通
* Git
* Markdown

## インフラエンジニア
* Linux
* Bash
* MySQL
* Oracle
* MariaDB
* Redis 
* AeroSpike
* CouchBase
* HBase
* Cassandra
* Riak
* MongoDB
* Hadoop
* Docker
* Vagrant
* Packer
* Chef
* Puppet
* Ansible
* Capistrano
* Apache
* Nginx
* AWS
* Zabbix
* Nagios
* Sensu

## サーバーエンジニア
* マシン語
* アセンブリ言語
* C
* C++
* Java
* PHP
* Go
* Scala
* Node
* D
* Lisp
* Perl
* Python
* Ruby

## フロントエンジニア
* HTML
* CSS
* JavaScript
* AngularJS
* ReactJS
* EmberJS
* BackboneJs
* CommonJS
* Ajax
* jQuery
* Spry
* JSON
* XML

## ネイティブエンジニア
* Java
* Kotlin
* Objective-C
* Swift
* Cocos2d-x
* Unity
AVAudioPlayerNodeで特定の箇所から再生

AudioEngineを使った音声再生をやっていて、
再生、停止とかはサンプルとかで色々わかったんだけど
スライダーで移動した際に特定の箇所から再生する方法がわからなかったんですが
最初は[AVAudioPlayerNode](https://developer.apple.com/library/prerelease/ios/documentation/AVFoundation/Reference/AVAudioPlayerNode_Class/index.html)のリファレンス見てて[
- playAtTime:](https://developer.apple.com/library/prerelease/ios/documentation/AVFoundation/Reference/AVAudioPlayerNode_Class/index.html#//apple_ref/occ/instm/AVAudioPlayerNode/playAtTime:)かなって思ったんですが、これも関係はありそうだったんですが、結局は[purpleblues/PBAudioPlayer](https://github.com/purpleblues/PBAudioPlayer)に答えがありました。
てかAudioEngineベースでプレイヤー作る人はこの人のやつをカスタムすればいいと思います。

```objc:PBAudioPlayer.m
        // ↓ここが重要
        [_playerNode scheduleSegment:_currentAudioFile
                       startingFrame:time * _currentAudioFile.fileFormat.sampleRate
                          frameCount:_currentAudioFile.length - time * _currentAudioFile.fileFormat.sampleRate
                              atTime:nil
                   completionHandler:nil];
```

scheduleSegmentでした
確かに時間パラメータに入ってるし。。。。
これリファレンスだと説明書きがないし。
あとAppleのリファレンスって他の言語に比べてすごいわかりづらいと思うのは俺だけだろうか見ててさっぱりわからんし、サンプルも微妙なものが多いし、どうやって調べたらいいのか正直わからん！
Linux Mint で Command + Tab を使ってウインドウを切り替える。


HHKB の Commandキー(Muhenkan keycode: 102) を Alt_Lに割り当てる。

```
$ vim ~/.xmodmap
! keycode 102 Muhenkan
keycode 102 = Alt_L
```
メニュー ->　設定　-> キーボード -> 一般 -> 開かれたウインドウを循環
キーボード割り当てで　Command + Tab　を押す。

# 設定を反映
```
$ xmodmap ~/.Xmodmap
```
起動時に自動で設定
![Screenshot_from_2015-10-09 01:37:54.png](https://qiita-image-store.s3.amazonaws.com/0/95474/16c7b8b8-f422-561d-2510-186228bd16ad.png)
El Capitan の日本語入力で DvorakJP

OS X El Capitan の日本語入力で DvorakJP 配列を使うためにやったこと。

1. System Integrity Protection を無効にする。
2. DvorakJP ローマ字変換テーブルを作る。
3. `RomajiRule_Default.txt` を書き換える。
4. System Integrity Protection を有効にもどす。


## System Integrity Protection を無効にする。

ローマ字変換テーブルは `/System/Library/Input Methods/JapaneseIM.app/Contents/Resources/RomajiRule_Default.txt` にあるので、El Capitan から搭載された System Integrity Protection を無効にしないと書き換えられない。

やり方はこのへん。`csrutil` コマンドを使う。
> OS X 10.11 El Capitanのシステム保護機能「Rootless」を無効にするcsrutilコマンドの使い方。
> http://applech2.com/archives/46435268.html


## El Capitan 用の DvorakJP ローマ字変換テーブルを作る。

Google 日本語入力用の変換テーブルをコンバートして作る。
https://github.com/yuzuemon/google-japanese-input-romaji-table
これの `dvorakjp-edited.txt` を [Python で](https://gist.github.com/Saqoosha/494315111b8e2bc19ea5#file-convert-py)適当に変換。もとのテーブル `RomajiRule_Default.txt` にないやつだけ書き出してる。

出力されたやつを適当に編集してできあがったのが↓こちら。
https://gist.github.com/Saqoosha/494315111b8e2bc19ea5#file-romajirule_default-txt

`# 無効` ってなってる行は、一応エントリはあるけど機能しないやつ。どうもキー入力が直接渡ってきてるわけじゃないっぽくて、記号類がすでに全角になってたりするので `',.;` あたりのが含まれてるパターンが使えない。


## `RomajiRule_Default.txt` を書き換える。

一応もとのやつをバックアップとった上で書き換える。

```bash
cd /System/Library/Input\ Methods/JapaneseIM.app/Contents/Resources
cp RomajiRule_Default.txt RomajiRule_Default_org.txt
cp ~/Desktop/RomajiRule_Default.txt .
```

書き換えただけでは有効にならないので OS 再起動。（`killall -HUP JapaneseIM` でも新しいテーブルで起動し直してくれるのだけど、すでに起動してるアプリで日本語入力できなくなったりするので OS ごと再起動しちゃうのがよいたぶん。）

## System Integrity Protection を有効にもどす。

せっかく防御機能がついてるので戻しておきましょう。


## El Capitan の日本語入力のローマ字変換テーブルのフォーマット

- TSV
- # 以降はコメントあつかい。
- 1 カラム目、入力。
- 2 カラム目、変換後。
- 3 カラム目。変換後の文字数分、数字がならぶ。カンマ区切り。変化後が 1 文字ならいらない。
  - 変換後の文字それぞれが、もとの入力の何文字文からできてるか？みたいな？
  - マイナスになってるやつの意味がわからない。
  - 数があってなかったり不正なフォーマットだと日本語入力そのものが落ちる。


いろいろやってみたときの結果。

```
cnp  きゅう 2,1,1 # x: 落ちる
cnp  きゅう 2,1,0 # x: "cんゅ"
cnp  きゅう -2,1,0  # x: 落ちる
cnp  きゅう -1,2,0  # x: 落ちる
cnp  きゅう -0,2,1  # x: "cんう"
cnp  きゅう 0,1,2 # x: "ゅんp"
cnp  きゅう -0,1,2  # x: "ゅんp"
cnp  きゅう 0,-1,2  # x: 落ちる
cnp  きゅう 1,2,0 # x: "きんp"
cnp  きゅう -1,2,0  # x: 落ちる
cnp  きゅう -0,1,1  # x: 落ちる
cnp  きゅう -1,1,1  # x: 落ちる
cnp  きゅう 1,1,1 # x: きゅp
cnp  きゅう 0,0,3 # o: "きゅう" 1 word
cnp  きゅう 0,0,-3  # o: "きゅう" 1 word
cnp  きゅう 0,3,0 # x: "きゅ|う"
cnp  きゅう 0,-3,0  # x: きゅう -> ゅ
cnp  きゅう 3,0,0 # x: "き|ゅう"
cnp  きゅう -3,0,0  # x: バックスペースで削除できない
```
Railsでloggerを使用してログ出力

Railsではloggerを使用することで、コントローラー、モデル、ビューなどからログを出力することができます。


## 使い方
ソースコード内に下記を書く

```
logger.ログレベル(値)
```

 developmentで実行した場合log/development.logのログファイルに出力されます。

## ログレベル
|ログレベル|説明|
|---|---|
|unknown|不明なエラー|
|fatal|致命的なエラー|
|error|エラー|
|warn|警告|
|info|通知|
|debug|デバック情報|


## ログ出力のログレベルを設定
* 設定ファイル
  * config/development.rb
  * config/test.rb
  * config/production.rb

```
config.log_level = :error
```

設定したログレベルより低いログは出力されない。
fatal > error > warn > info > debug

上記の設定をしていた場合は、warn,info,debugが出力されない。


## 参考
http://railsdoc.com/references/logger
http://ruby-rails.hatenadiary.com/entry/20150110/1420863998
Excel「名前」メニューは「数式」リボンにある+ドロップダウンボックス作成手順

「名前」機能を使いたい時は意外と多いのだけど、

- いつも直感的に「データ」リボンを探しに行ってしまい見つからない
- 「ホーム」かな、「挿入」かな、とたどって
- 結局 **「数式」リボンで見つかる**

この遠回りを無くすためのメモ。

ついでに、定義済みの「名前」を利用してドロップダウンボックスでの選択入力を可能にする手順と合わせて（Excel 2010で確認）

### 名前の定義

- リボン [数式] を開き、中ほどの [名前の管理] をクリック

![image01.jpg](https://qiita-image-store.s3.amazonaws.com/0/12779/6f564857-ea18-2089-8115-094e1da51cb5.jpeg)

- 「名前」を定義したいセル群を選択し、新しい「名前」を定義
- 下例）セル範囲 A2:A4 に「りんご一覧」という「名前」を定義

![image03.jpg](https://qiita-image-store.s3.amazonaws.com/0/12779/a7a788c0-96aa-9773-7365-628303b19c7c.jpeg)

### 定義済み「名前」を利用したドロップダウンボックスの設定
- ドロップダウンボックスにしたいセルを選択
- リボン [データ] を開き、[データの入力規則] をクリック

![image02.jpg](https://qiita-image-store.s3.amazonaws.com/0/12779/e05af19e-0759-9820-e444-31cccf888b15.jpeg)

- 「入力値の種類」に「リスト」を選択
- 「元の値」に `=りんご一覧` と入力（定義した名前をそのまま入力）

![image04.jpg](https://qiita-image-store.s3.amazonaws.com/0/12779/8d5cccdc-a81e-4e5c-c87c-c8bca289eb6c.jpeg)

- 選択したセルへの入力が、「りんご一覧」から選択できるようになった

![image05.jpg](https://qiita-image-store.s3.amazonaws.com/0/12779/6bac0cb4-954d-3453-7b07-34b667cf6ac7.jpeg)
openframeworks0.8.4でofxCvを使う場合の注意点

ちょっとはまったのでメモ。

2015年10月3日時点でofxCvのmasterをダウンロードすると、
openframewroks v0.8.4では動かない。
masterがv0.9.0以降に向けて書かれているため。

v0.8.4で動かすにはv0.8.4のタグからダウンロードしなくてはならない。

https://github.com/kylemcdonald/ofxCv/releases

からv0.8.4をダウンロードして使うと動作します。

そろそろv0.9がスタンダードになってきたということでしょうか。

公式はいつv0.9になるのかな？
OS X シェルやプログラミング言語のバージョン出力用シェルスクリプト

バージョン出力用各コマンドを実行し、まとめてMarkdown形式に書き出すシェルスクリプト

```bash
# 実行例
./show_versions.sh > show_versions.md 2>&1
# バージョン表示コマンドの出力先：たいてい標準出力ながら、一部（clangなど）は標準エラー出力。2>&1 ですべて同ファイルに出力
```

```bash:show_versions.sh
echo '### Xcode'
    echo '```console'
    xcode-select --version
    echo '```'
echo '### シェル'
    echo '#### bash'
        echo '```console'
        bash --version
        echo '```'
    echo '#### tcsh'
        echo '```console'
        tcsh  --version
        echo '```'
    echo '#### zsh'
        echo '```console'
        zsh  --version
        echo '```'
echo '### 言語'
    echo '#### Python'
        echo '```console'
        python -V
        echo '```'
    echo '#### Ruby'
        echo '```console'
        ruby --version
        echo '```'
    echo '#### Swift'
        echo '```console'
        swift --version
        echo '```'
    echo '#### Perl'
        echo '```console'
        perl -v
        echo '```'
    echo '#### PHP'
        echo '```console'
        php --version
        echo '```'
    echo '#### Java'
        echo '```console'
        which java
        java --version
        echo '```'
echo '### バージョン管理やコンパイラ'
    echo '#### git'
        echo '```console'
        git --version
        echo '```'
    echo '#### subversion'
        echo '```console'
        svn --version
        echo '```'
    echo '#### ssh'
        echo '```console'
        ssh -V
        echo '```'
    echo '#### clang'
        echo '```console'
        clang -v
        echo '```'
    echo '#### gcc'
        echo '```console'
        gcc -v
        echo '```'
    echo '#### g++'
        echo '```console'
        g++ -v
        echo '```'
```
electronのwebview.executeJavaScriptで書くjavascriptを見やすくしてみた

electronのwebviewでは、
[executeJavaScript](https://github.com/atom/electron/blob/master/docs/api/web-view-tag.md#webviewexecutejavascriptcode-usergesture)があり、webview先でjavascriptを走らせることができる。
通常の使い方だと、こんな感じに、文字列を書かざるおえない。

```js
var webview = document.getElementById('mainWebview');

webview.executeJavaScript("alert(\"hogehoge\");");
```

これだと、以下の問題があって管理しづらい

* 文字列一色でシンタックスハイライトが効かない
* ヒアドキュメントのテクニックを使わないかぎり複数行かけない
* 文字列ゆえにダブルクォートなどが書きづらい

この問題を解決してみた（微妙に苦労したので書いておく）。

こういう形で書けば見やすくなった

```js
var webview = document.getElementById('mainWebview');

webview.executeJavaScript(
  (function(){
    alert("hogehoge");
  }).
  toString().replace(/function\s*\(\)\{/, "").
　replace(/}$/,"").trim()
);
```

functionオブジェクトは、toStringメソッドがあり、これを呼び出せばコードの内容含めて文字列で出力してくれるようなので、これを用いた。

あとは"function(){"と最後の"}"と余分な空白除去してあげれば、webviewで動くjavascriptコードにはなるという寸法

これで複数行のコードをwebviewで実行させるときでも一安心
AWS Device Farm で androidTest(Espresso, etc.) が実行できる

## 動機

現在各種 CI サービスが Android のテストに対応するようになり、CI サービス上で androidTest を実行する方法も共有されている。しかし、ARM エミュレータ（Android SDK がデフォルトで立ち上げるあのもっさりしたエミュレータ）なので Espresso で Activity の挙動についてテストした場合、実機や Genymotion と比べてタイムアウトが発生しやすいという問題がある。

前回の [DigitalOcean に Android x86 Atom エミュレータを飼う](http://qiita.com/Misumi_Rize/items/08128c796302076be2ee)と ADB の接続をプロキシする方法で、CI が実行する Activity のテストをタイムアウトさせないようにすることを考えた。だがここで一旦原点に立ち返り、実機を従量課金でテストターゲットとして利用できるサービスを CI に組み込めないか検討する。

## AWS Device Farm とは

紹介記事は適当にググってほしい。平たく言えば実機を従量課金で借りられるサービス。

標準提供の Fuzz テスト（所謂モンキーテスト）を試してみた系やスクリーンショットを撮ってみた系の記事は多いが、注目するべきは Instrumentation Test(androidTest) が実行できることである。

つまりすでに Espresso などを使って Activity のテストを書いていた場合、Device Farm の利用を今までの Android アプリ開発フローに組み込めるということである。さらに言えば AWS 提供サービスなので他のサービスと同様に API が提供されており、aws-cli による操作も可能である。

このような視点に基けば、端末の種類の少なさは特に問題でもなく、**Instrumentation Test を自動で、かつ確実に実行できる基盤として有用である**と言える。リファレンス機の Nexus 5 が提供されているので、端末はこれだけでも良いかもしれない。Appium や DSL での E2E テストを各種端末で実行できるという類似サービスもあるが、それらとはカバー範囲が異なるというのが私見である。

もちろん Android 端末細分化や端末ごとの特殊な状況という問題は残るが、今回解決する問題とはレイヤーが異なるのでここでは置いておく。

## AWS Device Farm の各リソースのざっくりとした説明

* Project: 文字通り Project である。全く違うアプリをテストしても、テスト履歴が混ざってしまう程度の問題にしかならない。
* Upload: テスト対象のアプリ、テストコードの入ったアーカイブ、テスト用データの入ったアーカイブなどのファイル情報。そのファイルがどういったものかはこちらで指定する必要が有る。
* Device Pool: テストを実行する端末の集合。
* Run: 実際のテスト実行。Upload されたアプリのうちどれを対象に、Upload されたテストコードの入ったアーカイブのうちどれで、どの Device Pool 上でテストするかを指定することで、テストが実行される。

## 作業

画面の詳細は他の AWS サービスほど複雑ではないので省略。まずはテスト対象となる Android アプリとテストコードを作る。

https://github.com/MisumiRize/HackerNews-Android

サンプルというほどのものでもないが、HackerNews の上位 30 件をリストで出すアプリと、初回読み込みの結果がちゃんと 30 個の View として存在するかを確認するテストを作った。

```bash
$ ./gradlew assembleAndroidTest
```

コマンドを実行すると、通常 Android Studio から端末やエミュレータにインストールされる .apk ファイルと、テスト実行時にインストールされる .apk ファイルが生成される。

```bash
$ tree app/build/outputs/apk
app/build/outputs/apk
├── app-debug-androidTest-unaligned.apk
├── app-debug-unaligned.apk
├── app-debug.apk
└── app-release-unsigned.apk
```

このうち、テスト対象として app-debug.apk を、app-debug-androidTest-unaligned.apk をテストコードとして AWS Device Farm にアップロードする。

注意するべきは Configure Test のステップで Instrumentation を選択しておくこと。これはドキュメントを読めばすぐにわかる。

また、一度作った Project は削除できないという大変男らしい仕様になっているので、この点も要注意である（サポートに問い合わせれば削除してもらえるらしい）。

さらに注意点があり、テストコードは仮に JUnit4, Espresso を使う構成（AndroidInstrumentationTest2 を継承しない、`@Test` アノテーションを使う）にしていても、**テストクラス名を Test で終わるようにして、テストメソッド名が
 test からはじまるように（JUnit3 方式）しないと、Device Farm 側でテストとして認識してくれない**（しかし TestCase を継承する必要はない）。Device Farm 側のテストランナーが独自なのかもしれないが、この情報はフォーラムにしか書かれていなかったので難儀した。

あとはどの Device Pool を使うか、端末ごとの環境設定を済ませると、テストが実行される。単純に androidTest を実行するだけであれば、特に細かい設定を変更するようなことはない。

## 所感

これまで Android の UI テスト（結合テスト）を CI することは、種々の制約による障壁が存在した。

* 実機を USB 接続するなら Jenkins の面倒を見る必要がある
* 実機の場合、テスト毎にクリーンな環境を作らなければならない
* 何より実機を購入するためのコストがかかる
* CI サービスのエミュレータではタイムアウトが発生する

特に CI のために実機を用意することは個人開発者レベルではコスト的に難しかったので、比較的少額でテストを自動実行できるサービスが出現したということはありがたい。

ただ現時点では、テスト実行をスケジュールしてから完了まで一時間程度待つことがあったり、テストの完了を通知する仕組みがなかったり、まだ粗削りなサービスだと思われる。

また、すでに稼働していて、テストの資産がある程度存在するプロジェクトに CI 要素として組み込んだとき、予期しないタイムアウトが発生しないか、テスト実行時間が現実的かなど、他にも考慮する点はある。
デザイナ用gitツールFolioレビュー

![スクリーンショット 2015-10-03 21.37.49.png](https://qiita-image-store.s3.amazonaws.com/0/95460/94fa765c-0e87-447c-4ba9-69acb24ce794.png)

<h1>動機</h1>
webやUnityなどのプロジェクトでgitを使用していて、
バージョン管理の便利さは実感しています。

普段使っているSourceTreeは大変便利なツールなのですが、
aiファイル（イラストレーター）等のデザインデーターが表示できない問題がありました。
（pngやjpgは表示できます）

デザイナ向けのバージョン管理を謳ったツールが登場したので早速使ってみました。
検証時間は１時間です。

ダウンロードページは[こちら](http://folioformac.com/)

<h1>わかったこと</h1>

・ai,psd,sketchのデザインデーター、その他jpg,png等の画像データーの表示が可能。
・上記ファイル以外は、対象外。扱う対象にすらできない。もちろん３Dデーターもダメ。
・初めてのバージョン管理にオススメ。gitの難しさはうまく隠蔽されている。
　→コミットがとてもお手軽！
・ファイルごとのコミットログが表示される。
　→SourceTreeはコミットを基準に閲覧できるが、
　デザイン作業はファイルごとのバージョンが確認できたほうが便利。

![スクリーンショット 2015-10-03 22.04.38.png](https://qiita-image-store.s3.amazonaws.com/0/95460/d72cdd26-32d3-38c2-ba54-fd04f07ff3b2.png)


・コミットのみ対応。プッシュ不可。共有作業ができない・・・
　→SourceTreeにはプッシュの表示が…　結局併用する必要がある？

![スクリーンショット 2015-10-03 22.05.23.png](https://qiita-image-store.s3.amazonaws.com/0/95460/0a4154a2-a4dd-bdb5-0310-13c7fac65fd2.png)

・すでにgit管理されているプロジェクトを選択したらデザインデーターのみ１階層で表示される。
　→SourceTree等と併用して使用可能。
　→ただしプロジェクトが大きいと、アプリが落ちてしまう現象が多発！

![スクリーンショット 2015-10-03 22.00.44.png](https://qiita-image-store.s3.amazonaws.com/0/95460/859ed55b-140e-0931-23eb-8df04198cc2f.png)

・helpが貧弱。
・ファイルを開くアプリを設定できない。→結局ファインダーを開く。
・サムネイルの大きさの調整ができない。

<h1>結論</h1>

・SourceTree等のツールとは別物と考えたほうがよい。
・今までバージョン管理を使ったことがない、単独で作業しているデザイナさんには使えるかも？
・まだまだ発展中のツールという印象、しばらく様子見が良さそう。
（３９ユーロのツールにしては機能が限定的すぎる）
　→HPではブラウザーの代わりに、と謳っているが扱えるファイルが限定的すぎて使えない印象。
el capitanでmenu extraをクリックするAppleScriptが動かなくなった


## 神
* [メニューエクストラを確実に操作するGUIスクリプティング - ザリガニが見ていた...。](http://d.hatena.ne.jp/zariganitosh/20100119/1263886959)
	* Bluetoothテザリングの自動接続に利用していた

## 悪魔
* el capitanにアップデートしたら、Bluetoothまではクリックできるけどそこから先が進まない

## 検証
### 元のコード
```AppleScript
click_menu_extra("bluetooth/myiPhone/ネットワークへ接続")

on split(sourceText, separator)
	if sourceText = "" then return {}
	set oldDelimiters to AppleScript's text item delimiters
	set AppleScript's text item delimiters to {separator}
	set theList to text items of sourceText
	set AppleScript's text item delimiters to oldDelimiters
	return theList
end split
on number_from(str)
	try
		str as number
	on error
		str
	end try
end number_from
on click_menu_extra(menu_path)
	if menu_path is "" then
		error "menu_path が入力されていません。"
	end if
	set mp to split(menu_path, "/")
	tell application "System Events"
		tell process "SystemUIServer"
			set frontmost to true
			click (menu bar 1's first menu bar item whose attribute "AXDescription"'s value is (mp's item 1))
			repeat with i from 2 to mp's length
				click (result's menu 1's menu item (my number_from(mp's item i)))
			end repeat
			delay 0.1 --連続してメニューを操作する時、ひと呼吸必要
		end tell
	end tell
end click_menu_extra
```

-> 「error "menu 1 of missing value を取り出すことはできません。" number -1728 from «class menE» 1 of missing value」のエラー。

該当箇所は`click (result's menu 1's menu item (my number_from(mp's item i)))`

### 原因
メニューエクストラの一覧は取得できる。

```AppleScript
tell application "System Events"
	tell process "SystemUIServer"
		get value of attribute "AXDescription" of every UI element of menu bar 1 --'s menu bar item 2
	end tell
end tell
```
->{"AppleScript", "bluetooth", "Wi-Fi、信号なし。", "text input", "バッテリー： 残り：62% ", "時計"}

Bluetoothの中身が取得できない。

```AppleScript
tell application "System Events"
	tell process "SystemUIServer"
		get value of attribute "AXDescription" of every UI element of menu bar 1's menu bar item 2
	end tell
end tell
```
->{}

```AppleScript
tell application "System Events"
	tell process "SystemUIServer"
		get every UI element of menu bar 1's menu bar item 2
	end tell
end tell
```
->{}

#### 関係ある？

> How can I reposition Fantastical's menu icon in my menu bar?
> **OS X El Capitan blocks menu extras** so we are unable to offer a solution for this. 

[Flexibits | Fantastical 2 for Mac | FAQ](http://flexibits.com/fantastical/faq)

## 代替案
### Wi-Fiテザリング？
親機（iPhone）のWi-Fiを常時オンにしたくないので。
### コマンドラインでBluetoothテザリング有効化？
できないっぽい。以前にも必死に探したが見つからなかった。
### ショートカットキーを送る？
ショートカットの「ステータスメニューを操作対象にする」から操作できるので、`keystroke`/`key code`コマンドでやってやれなくはない。
というか、Bluetoothメニューをクリックして以降を`keystroke`/`key code`でやればいいっちゃいい。

```AppleScript
tell application "System Events"
	click menu bar item 2 of menu bar 1 of application process "SystemUIServer"
	keystroke "m"
	delay 0.1
	key code 124
	delay 0.1
	key code 36
end tell
```
いちおう動いたが、`keystroke`が始まるまでがえらく遅い。もう手で打ったほうがええわいってくらい。
なお、「ステータスメニューを操作対象にする」のショートカット（デフォルトでは^F8）を送るところから始めると、アクティブなアプリにむなしく`keystroke`が送られる事態が多発。

## 誰かいい知恵あったら教えてください
たのむ
データベースのスキーマとLaravelのマイグレーション　多対多の関係について

# はじめに
DBの多対多の関係について。
Laravelフレームワークについても少し話します。

# 多対多の関係　対照表とはそもそも...

多対多の関係では対照表というものが必要になります。
そもそも対照表とは、下記の図のarticle_tagsにあたるものです。

![qiita1.png](https://qiita-image-store.s3.amazonaws.com/0/93753/1ac73abf-aa87-bd87-9af3-fcdcb1a61230.png)

<br>
なぜ対照表というものを用意しなけばいけないのか、ということを考えたことはあるでしょうか。
答えはDBの冗長性を排除するためです。

対照表がなかった場合、それぞれのテーブルに関係のあるテーブルのIDをもたせなければいけなくなります。
下記の図のように、できないことはないです。


![qiita2.png](https://qiita-image-store.s3.amazonaws.com/0/93753/399b6085-0756-e9b1-847c-8fe8161d8739.png)

<br>
しかし、よく考えてみてください。もしもタグをもたないarticlesのレコードがあったとしましょう。
articlesテーブルのtag_idにはnullがをいれても良いですが、**そもそもその列は不要ですよね。**
つまり、冗長と言えます。
それを回避するために対照表というものが必要というわけです。




##簡単に対照表を作れるLaravelのマイグレーション
Laravelフレームワークでも、勿論対照表を簡単に作成できます。

php artisan make:migration create_articles_table --create="articles"
php artisan make:migration create_tags_table --create="tags"

などとコマンドを打ちます。その後、database/migrations/2015-10-03-xxxxx_create_articles_table.phpのup()関数内を、

```lang:2015-10-03-xxxxx_create_articles_table.php
public function up()
{
    Schema::create('article' , function(Blueprint $table){
        $table->increments('id');
        $table->string('name');
        $table->string('body');
    });
}
```

と記述。
database/migrations/2015-10-03-xxxxx_create_tags_table.phpのup()関数内を、

```lang:2015-10-03-xxxxx_create_tags_table.php
public function up()
{
    Schema::create('tags' , function(Blueprint $table){
        $table->increments('id');
        $table->string('name');
        $table->string('body');
    });
    Schema::create('article_tags',function(Blueprint $table)
    {
        $table->integer('article_id')->unsigned()->index();
        $table->foreign('article_id')->references('id')->on('article')->onDelete('cascade');
        $table->integer('tag_id')->unsigned()->index();
        $table->timestamps();

    });        
}
```

と記述し、php artisan migrateコマンドを打つとテーブルが作成されます。
暗号化したファイルをgit diffする

Gitで管理しているファイルを暗号化しておきたい場合があるが,
`git diff`してももちろん以下のように中身は出力されない.

```console
$ git diff
Binary files a/foo.gpg and b/foo.gpg differ
```

中身を見たいのであれば, 以下のように設定が必要.
例として, ここでは, __GnuPG__ を使う.

まず, 以下のように, 復号化する[フィルタ](https://git-scm.com/docs/git-diff#Documentation/git-diff.txt-diffltdrivergttextconv)を設定する. [^1]

[^1]: `-o`は出力ファイルを指定するオプションで, 指定先の`-`は標準出力という意味なので,
      `-o-`で復号化内容を標準出力に出力ということになる.


```console
$ git config --global diff.gpg.textconv 'gpg -o-'
```

そうすると, `~/.gitconfig`に以下のような行が追加されている.

```~/.gitconfig
[diff "gpg"]
textconv = gpg -o-
```

このフィルタを`*.gpg`に適用したい場合は, [`.gitattributes`](https://git-scm.com/docs/gitattributes#_performing_text_diffs_of_binary_files)に以下の行を追加する.

```:.gitattributes
*.gpg diff=gpg
```

以上の設定をした上で, `git diff`をすると, `*.gpg`のファイルに変更があるときに限り,
以下のように2回パスフレーズの入力を求められる. [^2]

[^2]: これはそれぞれ変更前と後のファイルを復号化するパスフレーズ入力に対応している.

```console
$ git diff
Enter passphrase:
Enter passphrase:
```

パスフレーズを入力すると,  復号化され, `git diff`で見ることができる.

`git grep`も[`--textconv`](https://git-scm.com/docs/git-grep#Documentation/git-grep.txt---textconv)オプションを付けると, パスフレーズの入力を求められ, 見ることができる.

```console
$ git grep --textconv WORD
Enter passphrase:
```


# 参考

https://git-scm.com/docs/gitattributes#_performing_text_diffs_of_binary_files

http://qiita.com/skkzsh/items/bf873227bd8184b26bcf

http://qiita.com/skkzsh/items/6b8c3eea4395a9c87d76
LiveCDからインストールしたCentos7で日本語入力を有効にする

---

新しく買ったサーバにCentosをインストールした時に、DVD-Writerを持っていなかったため、USBにLive-CD.isoを入れてインストールしたところ、日本語入力ソースとなる「日本語(Kana Kanji)」が見つからなかった。  

以下のライブラリをインストールする

```
yum install ibus-kkc
```
　  
再起動して「設定」→「地域と言語」→「＋ボタン」(入力ソース)と辿って、「日本語」を選択するといくつか表示される日本語入力ソースの中にKana Kanjiが追加されている。
用 Git 把本地的非 master 分支推到遠端的 master 分支


假如我現在有個 develop 的分支在本地端，我想要把 develop 分支上的變更推到遠端的 master 分之上，這樣就好：

``` shell
git push origin develop:master
```

## 格式

``` shell
git push <remote> <local branch name>:<remote branch to push into>
```

## 進階

### 不指定 branch ，只要 push 當前的位置就好

的話，就只要把 local branch 換成 `HEAD` 即可：

``` shell
git push origin HEAD:master
```

### 注意！

在冒號前面不打東西的話，就會把遠端上的 branch 刪掉，所以操作上要小心：

``` shell
git push origin :master
```

就會跳出像下面的訊息：

``` text
To git@github.com:vc7/something.git
 - [deleted]         master
```

就會把遠端的 master 這個 branch 刪掉了