OmniAICreator/Qiita-1.07M huggingface dataset:
[FreeBSD jail]ホストと同じIPアドレスを持ったjailの作り方

# はじめに
IPアドレスがひとつしか貰えないVPSで、サービスごとのコンテナを作って運用したい。
しかもFreeBSDで。

...というわけで、さくらのVPSで実際にやってみました。

# 概要
ターゲットは、FreeBSD 10.0-RELEASEです。
コンテナは、FreeBSDに標準機能のjailを使用します。現段階ではezjail等のサポートツールは使用しません。

jail(監獄)になぞらえて以降は、ホストはJailer(看守)、コンテナはPrisoner(囚人)と書きます。

# 手順
FreeBSD 10.0 RELEASEがインストール済みであることを前提にします。
## Prisonerのファイルを用意
Prisonerを置くディレクトリを作成します。
例として、/home/jailsとします。

```
# mkdir /home/jails
```

bsdinstallerを使ってファイルを用意します。
baseという名前でPrisonerを作成します。

```
# cd /home/jails
# bsdinstall jail base
```

ミラーサイトの選択の後、追加パッケージの選択になります。
ここでは、lib32があれば十分です。
ウィザードに従い、インストールを終わらせます。

## jailの設定ファイルを作成
Jailerにjailの設定ファイルを作成します。

```[/etc/jail.conf]
exec.start = "/bin/sh /etc/rc";
exec.stop  = "/bin/sh /etc/rc.shutdown";
exec.clean;
mount.devfs;
path = "/home/jails/$name";
host.hostname = $name;

base {
        ip4.addr = <JailerのIPアドレス>;
        allow.chflags;
        allow.raw_sockets;
}
```

baseというPrisonerに対して、

+ Jailerと同じIPアドレスを割り当て
+ RAW SOCKETの使用許可(ping等が使用できるようにするため)
+ chflagsの使用許可(freebsd-updateが実行できるようにするため)

を与えています。

## Prisonerの起動とコンソール立ち上げ
JailerでPrisonerを起動します。

```
# service jail onestart base
```

引き続き、シェルを起動しPrisonerの環境に入ります。

```
# jexec base /bin/csh
```

シェルが起動すれば、Prisonerの環境下でpkgコマンドでパッケージを追加することも可能です。
PrisonerのコンソールでexitすることでJailer環境のシェルに戻ります。

# おわりに
公式のFreeBSDハンドブックを始めJailerとPrisonerは別のIPアドレスを使う説明がほとんどで、[小飼さんのブログ](http://blog.livedoor.jp/dankogai/archives/51916648.html)を読むまで同じIPアドレスが使用できることを知りませんでした。
VIMAGEでJailerとPrisonerでプロトコルスタックを分離してnaptとか考えてましたが、そんな難しいことをする必要はありませんでした。

Dockerがキッカケでコンテナ化が注目を集めていますが、FreeBSDにもずーっとjailという手段があるということ知っていただければと思います。
HSQLDBで日付計算とか

##現在日付とかの取得
###現在日付
```sql:
CALL CURRENT_DATE
```

```text:実行結果
2014-08-06
```

###現在日時
```sql:
CALL CURRENT_TIMESTAMP
```

```text:実行結果
2014-08-06 21:50:10.219000+9:00
```

##日数や時間の加算とか
###時分秒の加算
```sql:
CALL TIMESTAMPADD(SQL_TSI_HOUR, 5, TIMESTAMP '2014-01-01 00:00:00')
```

```text:実行結果
2014-01-01 05:00:00
```

```sql:書式
CALL TIMESTAMPADD(<加算するフィールド>, <加算する値>, <日時>)
```

加算するフィールドは以下を選べる。

- SQL_TSI_FRAC_SECOND
- SQL_TSI_SECOND
- SQL_TSI_MINUTE
- SQL_TSI_HOUR
- SQL_TSI_DAY
- SQL_TSI_WEEK
- SQL_TSI_MONTH
- SQL_TSI_QUARTER
- SQL_TSI_YEAR

###日数の加算
```sql:
CALL DATE_ADD(DATE '2014-01-01', 5)
```

```text:実行結果
2014-01-06
```

```sql:書式
CALL DATE_ADD(<日付>, <加算する日数>)
```

###月数の加算
```sql:
CALL ADD_MONTHS(DATE '2014-01-01', 5)
```

```text:実行結果
2014-06-01 00:00:00
```

```sql:書式
CALL ADD_MONTHS(<日付>, <加算する月数>)
```

<del>関数の名前や引数の順序が統一されてないのがキモイですね。</del>

#参考
- [Chapter 10. Built In Functions](http://hsqldb.org/doc/guide/builtinfunctions-chapt.html)
[Yconnect][商品一括更新API]SellerID is not specifiedとなります。

お世話になります。

Yahooショッピングの商品一括更新APIにおいて質問がございます。

エンドポイント
https://circus.shopping.yahooapis.jp/ShoppingWebService/V1/updateItems
POST内容
access_token：xxxxxxxxxxxxxxxx
seller_id：xxxxxxxxxxxxx
item1：item_code=aaaaaaa&display=0

上記内容でPOSTしました所、下記のようなエラーが返ってきました。

HTTP/1.1 400 Bad Request
Date: Wed, 06 Aug 2014 12:53:35 GMT
Last-Modified: Sat, 14 Jun 2014 09:16:36 GMT
Accept-Ranges: bytes
Content-Length: 124
Vary: Accept-Encoding
Connection: close
Content-Type: application/xml

\<?xml version='1.0' encoding='UTF-8' ?>
\<Error>
\<Message>SellerID is not specified\</Message>
\<Code>px-04001\</Code>
\</Error>

seller_idは指定させていただいておりますが、原因が不明です。
「seller_id」という項目名は正しいでしょうか。（エラーがSellerIDでしたので）
その他に、考えられる問題点はございますでしょうか。

よろしくお願いいたします。
carrierwaveのimage_cacheをしても画像が保持されない問題

# はじめに
今僕はある会社でインターンシップとして参加していますが、そこである管理ページにcarrierwaveを使って画像投稿機能を追加するというものを実装しました。

# 困ったこと
gemで簡単にインストールは出来て、画像の新規登録は問題無く出来ました。しかし、編集機能の際に画像を改めて指定しないとアップロードした画像のパスが無くなってしまうという問題がおきました。
いろんなサイトでは、以下の記述をすることで元あった画像のキャッシュを渡してくれるみたいなのですが、上手くいきませんでした。

```
<%= f.hidden_field :image_cache %>
```

# 解決案
結局以下のように条件分岐するのが早い方法みたいです。

```ruby:projects_controller.rb
@project = Project.find(params[:id])
if (@project.image.blank?)then
  # imageが空だったら何もしない
else
  @project.image.cache!
end
```
【RSpec】非ActiveRecord環境でActiveRecord::ConnectionNotEstablishedが出たときの対処法

## 問題
非ActiveRecord環境でテストを実行しようとしたときにActiveRecord関係のエラーが発生し、手こずったのでメモ。
エラー文はこちら。

```
Failure/Error: Unable to find matching line from backtrace
     ActiveRecord::ConnectionNotEstablished:
       ActiveRecord::ConnectionNotEstablished
```

## 解決方法
#### spec_helper.rbをチェック

```spec_helper.rb
require 'rspec/rails'
require 'active_record/railtie'
```

active_record/railtie.rbファイルはActiveRecordを初期化したりするものですが、そもそもActiceRecordを使わないので初期化などの必要なし。
ということで `require 'active_record/railtie'` をコメントアウト。
#### それでも同じエラーが出る
こちらの記事([非ActiveRecord環境でRails 4.1にアップデートするとActiveRecord::ConnectionNotEstablishedが出る](http://qiita.com/uiureo/items/2c7c92d1f68029c3e29e))を参考にすると解決しました。
原因と解決方法を引用すると、
>何かの拍子でActiveRecordが読み込まれると、specがtestのfixturesを作ろうとしてしまうので、ActiveRecordをいなかったことにする。

とのこと。
記事を参考に、libディレクトリにmonkey_patchesディレクトリを作成し、その中にactive_record.rbファイルを作成し、以下の内容を記述する。

```active_record.rb
ActiveRecord.module_eval do
  remove_const :TestFixtures
end
```

これをspec_helper.rbファイルの `require 'rspec/rails'` の前で呼び出す。

```spec_helper.rb
require_relative "../lib/monkey_patches/active_record"
require 'rspec/rails'
# require 'active_record/railtie'
```

##### ついでにメモ
作成したディレクトリ名にもある[モンキーパッチ](http://ja.wikipedia.org/wiki/%E3%83%A2%E3%83%B3%E3%82%AD%E3%83%BC%E3%83%91%E3%83%83%E3%83%81)って何かと思ったら、コードを変更することなく実行時にコードを拡張・変更する方法のことなんですね。
#### 参考
[ActiveRecord::ConnectionNotEstablishedのエラーについて](http://iwhurtafly.hatenablog.com/entry/20120205/1328434152)
[非ActiveRecord環境でRails 4.1にアップデートするとActiveRecord::ConnectionNotEstablishedが出る](http://qiita.com/uiureo/items/2c7c92d1f68029c3e29e)
サーバー証明書のつくりかた

手順としては以下のようになる。なるんです。

1. 秘密鍵の生成
2. CSR の作成
3. 証明書の発行

ただ、何を言っているのかさっぱりわからねーぜ、というのが普通なので順を追って説明する。単純化のために中間 CA のことは省くよ。


理屈
----

先に概念を書いておく。実際の手順はしたのほうに。


### インターネットの簡単な構造

大体こう。

    [ユーザー] <-> [中継がいっぱい] <-> [サーバー]

サーバーと情報をやりとりするときには、だいたいプロバイダーや中継先が入る。

### 秘密鍵とはなにか

片方で鍵をかけるともう片方でしか開けられない、というふたつの鍵が存在する。 A でかけると B でだけあけることが、 B でかけると A でだけあけることが可能になる。

情報をやりとりしたいひとに片方を教えておいて、もう片方はまわりには秘密にしておくと、配達員さんに中身をみられないことにあたまのいいひとが気づいた。

向こうからなにか送ってもらうとき、こんな感じになる。

1. 自分が教えた鍵で情報に鍵をかけてもらう
2. 配達員さんに情報を配達してもらう
3. 秘密にしておいた鍵で情報の鍵をあける

2 番で配達員さんは中をのぞくことができない。そういう鍵だからだ。

こっちからなにか送るときは全部逆だ。送りたい先のひとから教えてもらった鍵で情報に鍵をかける。

ここで秘密にしておく鍵、というのがそのまま秘密鍵だ。そしてまわりに教える鍵を公開鍵と呼ぶ。配達員さんはうえのほうで言ってた中継先にあたる。

サーバーが秘密鍵を持っている、つまり公開鍵を配ると何がうれしいのか、というとサーバーに情報を送ってもらうときに配達員さんには見られないことを保証できる。ネット上で買い物するときに住所やクレジットカード番号をサーバーだけに知らせることができる、というわけ。

ここらへんは「公開鍵暗号」というキーワードで調べるといろいろ出てくる。

### サーバー証明書とはなにか

あるサーバーから配られた公開鍵が本当にそのサーバーのものなのかを見分ける必要がある。わるいひとが公開鍵をすりかえてしまうとわるいひとにだけ情報を見られてしまう。

ある公開鍵が本当に情報をやりとりしたいサーバーのものだと信頼できる証がサーバー証明書だ。

信頼というのが曲者で、端的に言うと信頼できるひとが「これは信頼できる !!」と言ったものはユーザーにとっても信頼できるだろうということになっている。

ここでいう「信頼できるひと」がどんなものかというと「私はひとを信頼するときにこういうことに気をつけていますし、私自身うそをつきません」ということを有限実行しているひとのこと。実際の世界ではこのひとを認証局という。

サーバー証明書には信頼できると言ったひとの名前が書かれている。そこでユーザーはサーバー証明書を受け取ると、その名前のひとが信頼できるかを確かめるのだが、実はユーザーはすでに「信頼できるひと」リストを持っている。このリストにサーバー証明書に書かれている名前があるかを調べる。こうすることでサーバーが信頼できるかを確かめている。

こういった考え方を「信頼モデル」と呼ぶ。

### CSR とはなにか

さて、じゃあ自分のサーバーを信頼されるようにするにはどうするか。

「信頼できるひと」に頼むのが自然だ。だけどただ頼むだけじゃそのひとだって信頼できるかわからない。自分のサーバーについての書類の提出を求められる。

「書類」にはどこに住んでいるか、名前はなんというか、連絡先はどこか、やりとりする際の封の仕方などが書かれている。「信頼できるひと」はこの書類を見ていろいろ調べる ( らしい ) 。そしてそのひとの基準に合致したサーバーに対して信頼できる証を発行する。

ここでいう「書類」が CSR にあたる。 Certificate Signing Request の略。直訳だと証明書署名申し込みみたいな感じになる。 CSR を作って認証局に出すと、認証局がいろいろ調べたあとにサーバー証明書を発行してくれる、というながれ。


実践
----

Mac OS X Mavericks にデフォルトで入っている OpenSSL 0.9.8y を使う。


### 認証局を確認する

利用する認証局を確認する。

有名どころにたのむのであればその会社の指示に従って CSR まで作成、申し込みをする。

自分とこで認証局を作るのであれば以下で。

http://qiita.com/janus_wel/items/b838539f52db92a263c9

### CSR を作る

まず秘密鍵から。

```sh
# generate random data
dd if=/dev/urandom of=urandom.dat count=1024 bs=1024

# generate AES 256 bits private key
openssl genrsa -aes256 -rand urandom.dat 2048 > server.key

# remove pass phrase from the private key
openssl rsa -in server.key -out server.key
```

server.key が秘密鍵。パスフレーズを外すのはサーバーデーモンの立ち上げを自動化する際にいちいち尋ねられると面倒だから。スーパーユーザーでないとサーバーデーモンを立ち上げたりできないのでまぁこれでも問題ないだろう。

次、 CSR 。

```sh
# create CSR for 10 years
openssl req -new -days 3650 -key server.key -out server.csr

rm urandom.dat
```

### 証明書に署名してもらう

ここまでできたら上で作った server.csr を認証局に送って署名してもらう。

自前でやる場合は以下のように。

http://qiita.com/janus_wel/items/b838539f52db92a263c9#2-5
Mac でプライベート CA をたてる

すべて Mac OS X Mavericks にデフォルトで入っている OpenSSL 0.9.8y でのはなし。
Heartbleed は OpenSSL を自前で対象バージョンにアップデートしてたりしないかぎり Mac さんには関係ない。

いじるファイルはすべて /System/Library/OpenSSL 以下にある。

ポリシー
--------

自分だけで使う自分でたてるサーバー用の証明書に署名するための CA なので ~~ガバガバ~~ CN 以外はなんでもよいというやる気の無さ。

```
[ policy_match ]
countryName		= optional
stateOrProvinceName	= optional
organizationName	= optional
organizationalUnitName	= optional
commonName		= supplied
emailAddress		= optional
```


CA の設定
---------

設定ファイルのバックアップをとる。

```sh
> cd /System/Library/OpenSSL/
> sudo cp openssl.cnf openssl.cnf.org
```

以下のように書き換え。

```diff
--- openssl.cnf.org	2014-08-06 17:23:13.000000000 +0900
+++ openssl.cnf	2014-08-06 19:04:11.000000000 +0900
@@ -77,9 +77,9 @@
 
 # For the CA policy
 [ policy_match ]
-countryName		= match
-stateOrProvinceName	= match
-organizationName	= match
+countryName		= optional
+stateOrProvinceName	= optional
+organizationName	= optional
 organizationalUnitName	= optional
 commonName		= supplied
 emailAddress		= optional
@@ -98,7 +98,7 @@
 
 ####################################################################
 [ req ]
-default_bits		= 1024
+default_bits		= 2048
 default_keyfile 	= privkey.pem
 distinguished_name	= req_distinguished_name
 attributes		= req_attributes
@@ -122,17 +122,17 @@
 
 [ req_distinguished_name ]
 countryName			= Country Name (2 letter code)
-countryName_default		= AU
+countryName_default		= JP
 countryName_min			= 2
 countryName_max			= 2
 
 stateOrProvinceName		= State or Province Name (full name)
-stateOrProvinceName_default	= Some-State
+#stateOrProvinceName_default	= Some-State
 
 localityName			= Locality Name (eg, city)
 
 0.organizationName		= Organization Name (eg, company)
-0.organizationName_default	= Internet Widgits Pty Ltd
+#0.organizationName_default	= Internet Widgits Pty Ltd
 
 # we can do this but it is not needed normally :-)
 #1.organizationName		= Second Organization Name (eg, company)
```

重要なのは policy_match セクションの部分と req セクションの鍵長で、ほかは default で変なものが入らないようにコメントアウトしてるくらい。


CA 証明書を作る
---------------

作業場所を ~/openssl にする。
今後サーバー証明書を作ったりする場合もすべてここで作業するので嫌なら別の場所にする。

```sh
# establish a private CA
> cd
> mkdir openssl
> cd openssl
> /System/Library/OpenSSL/CA.sh -newca
```

ここまでやると ~/openssl/demoCA にもろもろできる。この中の cacert.pem が CA 証明書。


ユーザー配布用証明書を作る
--------------------------

ブラウザーやなんかにインストールするための CA 証明書を作る。

```sh
# CA certification for clients
> cd ~/openssl/demoCA
> openssl x509 -inform pem -in cacert.pem -outform der -out cacert.der
```

この cacert.der をブラウザーやキーチェーンにインストールしておくと例外を作らずにサーバーにアクセス可能になる。


サーバー証明書に署名する
------------------------

以下でできる。

```sh
# sign certification as the private CA
> cd ~/openssl
> openssl ca -policy policy_anything -in /some/other/path/server.csr -out /some/other/path/server.crt
```

できた server.crt をサーバーたてるひとに渡せばおわり。
Are You Modeling ?

<p>Youtube を使って、モデリング全般についてのショートビデオを集めたシリーズを作っています。UML の基礎、Astah の利用法はもちろんですが、</p>
<ul>
<li>UML(クラス図、シーケンス図、ユースケース図、状態マシン図...)</li>
<li>GSN(Goal Structuring Notation), D-Case</li>
<li>データモデリング, ERD</li>
</ul>
<p>などなど、</p>
<ul>
<li>モデリングにおいて重要なコンセプトを分かりやすくシンプルに伝える</li>
<li>UML にこだわらず、役に立つモデルを取り上げる</li>
<li>短く、ぱっと見れて、すぐ役に立つ</li>
</ul>
<p>ことを目指しています。特に、GSNやD-Caseは日本ではまだあまり知られておらず、もっと皆さんに知ってほしいという思いもあります。日本語と同時に英語でも作っていますので、社内の勉強会や海外のチームとの共通教材にも使えるようにしたいです。</p>
<p>順次、新作を上げていくので、よろしかったら、Youtube のチャネル登録をお願いします。</p>
<blockquote>
<ul>
<li><a href="https://www.youtube.com/user/areyoumodeling" target="_self">英語チャンネル： "Are You Modeling?"<br /></a>https://www.youtube.com/user/areyoumodeling</li>
<li><a href="https://www.youtube.com/user/areyoumodelingjapan" target="_self">日本語チャンネル： "モデリングしてますか?"&nbsp;<br /></a>https://www.youtube.com/user/areyoumodelingjapan</li>
</ul>
</blockquote>
<p>例えば、こんなコンテンツが上がっています。</p>
<ul>
<li><a href="https://www.youtube.com/watch?v=PVshhYixdbA">例で理解するUML状態マシン図</a> 
</li>
<li><a href="https://www.youtube.com/watch?v=mhRWQo55Rbc">クラス図の基本を、モデリングツール astah*を使って解説。</a> 
</li>
<li><a href="https://www.youtube.com/watch?v=8tq7IlSzjfU">パターン編(1) 注文書を表現するヘッダー明細パターン </a> 
</li>
<li><a href="https://www.youtube.com/watch?v=cV8oJ4mcMwM">GSN解説(1) - GSN (Goal Structuring Notation)とは何か？</a> 
</li>
</ul>
<p>英語の方も。。。</p>
<ul>
<li><a href="https://www.youtube.com/watch?v=2sWJ876s4KY">Fundamental UML UseCase Diagram </a> 
</li>
<li><a href="https://www.youtube.com/watch?v=y9s_S6uRAek">Fundamental UML Class Diagram </a> 
</li>
</ul>
<ul>ぜひ、見てみてください。Youtube にフィードバックお待ちします！</ul>
db2のシステムテーブルを利用してMySQL用のcsvファイルを作成するSQLを生成する

## どう説明したら良いのか・・。

表題の件、何を言っているのかわからないと思いますが、また同じ説明をするかもしれませんが、db2のシステムテーブル（syscat.columns)を利用して、MySQLに合わせた、csv形式に変換をかける、「db2のエクスポートSQL」を生成するSQLですｗ

```
EXPORT TO .\exportsql\_tabschema_._tabname_.sql OF DEL 
MODIFIED BY NOCHARDEL
VALUES
  ('EXPORT TO .\csv\_tabschema_._tabname_.csv OF DEL MODIFIED BY codepage=1208 SELECT ')
UNION ALL 
SELECT
  RTRIM(Z.STRCOL) AS S_COLUMNS
FROM
(
SELECT   
  CASE
    WHEN X.NULLS='Y' AND X.TYPENAME <> 'VARCHAR' 
    THEN 
      X.COLNAME WHEN X.NULLS='Y' AND X.TYPENAME = 'VARCHAR' THEN 'COALESCE(' || X.COLNAME || ', ''\N'')'   
    ELSE 
      X.COLNAME   
    END ||
  CASE
    WHEN Y.MAX_COLNO=X.COLNO
    THEN 
      ' FROM _tabschema_._tabname_ ; '
    ELSE
      ' ,'
    END AS STRCOL
 FROM 
  (
  SELECT
    TABSCHEMA,
    TABNAME,
    COLNO,
    COLNAME,
    TYPENAME,
    NULLS
  FROM
    SYSCAT.COLUMNS   
   WHERE 
     TABSCHEMA = '_tabschema_'  AND 
     TABNAME = '_tabname_'  
  ) X ,
  (
  SELECT
    TABSCHEMA,
    TABNAME,
    MAX(COLNO) AS MAX_COLNO
  FROM
    SYSCAT.COLUMNS   
  WHERE 
    TABSCHEMA = '_tabschema_'  AND 
    TABNAME = '_tabname_'  
  GROUP BY
    TABSCHEMA,
    TABNAME     
  ) Y 
    ORDER BY X.COLNO 
) Z 
;
  
```

## ・・・で結果はどうなるのか？

こんなかんじになったりします。

```
EXPORT TO .\csv\SCHEMA.AA.csv OF DEL MODIFIED BY codepage=1208 SELECT 
SEQ_ID ,
COLAAAAA ,
COALESCE(GENRE, '\N') FROM SCHEMA.AA ;
```

* syscat.columns から、カラム名を、設定された順番どおりに取得する。
* DB2上のNULLはNULLなのですが、MySQL上のNULLは、\n なのでそれに変換する
* CSVの文字コードを強制的に、utf-8(1208)に変換する

とまあ、これだけの話です。。。
DB2のデータを、MySQLに移行するときに大活躍しました。

## ・・で生成したSQLをさらに流すと、MySQL用のCSVファイルが完成する！

こんなデータになるわけです

```
893,11,"GGG"
894,11,"HHH"
1,1,"aaa'"
2,0,"test2"
3,1,"foo\"
4,1,"\N"
5,1,"NULL"
6,1,"\\n"
7,1,"""DBL"""
100,0,"test"
101,0,"testtest"
102,0,"日本語テスト"
```
zipalignがなくてビルド出来ないようです。


概略：アプリ開発の引き継ぎを行ったらAndroidがビルドできなくて困ったぜ……

# 一体何が起こったんだ？

```errorlog
[ERROR] :  Unable to find Android SDK tools: zipalign.
[ERROR] :  You have an incomplete or out-of-date installation.
[ERROR] :  Verify your Android SDK packages or reinstall the Android SDK by running 'titanium setup android' or manually downloading from http://appcelerator.com/android-sdk.
```

ふむ。

zipalignというのがないようですね。
普段はAndroidSDK/toolsのフォルダの中にあるらしい。

だけど、無いなぁ...?

どうもこれ、最新のSDKにはないようですね。
古いSDKからのバージョンアップだったら問題ないようですが、新しめのSDKからだと手動でzipalignをAndroidSDK/toolsに入れないといけないようです。

## Extra:入れてみたけど実行できないんですが？

その場合は、実行権限が足りてないかもしれません。実際僕は足りてなくて実行できませんでした。

```
$chmod 755 zipalign
```

すれば解決するはずです。是非お試しあれ。
GitHubでforkしないで同一リポジトリ内でブランチ作ってpull requestのメモ

同一リポジトリ内でのpull requestをしたので備忘録を作っておく
※リポジトリにPushできる権限ないといけないのでプライベートリポジトリの場合には注意ね

#### 1.ローカルリポジトリにcloneして、ブランチ作って、編集してコミットして、githubにブランチをpushする

```
$ git clone リボジトリ
$ git checkout -b ブランチ名
~ ファイルの編集 ~ 
$ git commit -a -m 'コメント'
$ git push origin ブランチ名
```

#### 2.GitHubでpull request作る
pushした後だと、リポジトリ開くと「Compare & pull request」が出るので、そこからpull requestが作れる




#### 参考

* [GitHub初心者はForkしない方のPull Requestから入門しよう](http://blog.qnyp.com/2013/05/28/pull-request-for-github-beginners/) - 非常にわかりやすいので是非ここ見てください
* [Using pull requests](https://help.github.com/articles/using-pull-requests) - 原典
[JavaScript] 連想配列の扱い方


* 宣言

```
var hashItems = [];
var hashItems = new Array();
```
* 追加

```
hashItems['key1'] = value1;
```

* キーの存在チェック

```
if ('key1' in hashItems) {

}

if (hashItems['key1']) {

}
```

* 削除

```
delete hashItems['key1'];
```

* JSON 形式に変換

```
var jsonString = $.stringify(hashItems);
```


* 参考文献

[連想配列の定義など](http://d.hatena.ne.jp/toku-hiro/20061207)
Tips: Dockerfileで直感的にディレクトリをADDできない

たとえば、

```bash
$ tree build/
build/
├── build.sh # dockerイメージのプロビジョン処理を書いたスクリプト
├── td-agent.conf
└── httpd.conf
```

のようなディレクトリを

```Dockerfile
ADD build /tmp/
RUN sh /tmp/build/build.sh
```

したい場合、実はこれでは

```bash
Step 2 : RUN sh /tmp/build/build.sh
 ---> Running in 3ff238725234
sh: /tmp/build/build.sh: No such file or directory
```

と怒られて動かない。

どうやら、```ADD build /tmp/```では(ホスト上の)```build配下のファイル```が(dockerイメージ上の)```/tmp```にADDされるのみで、```buildディレクトリ```自体はADDされない。

期待する動作を得るためには

```Dockerfile
ADD build /tmp/build/
RUN sh /tmp/build/build.sh
```

とすればOK
cap deploy時にAutoScalingで立ってるサーバにも同時にdeployさせる


以下を`config/deploy/production.rb`に追加

外部コマンドのawscliとjqを使うと簡単にかけたので横着してしまった.

`````ruby

# 常に立ってるサーバ
server '10.0.1.120', :app, alias: 'web1'
server '10.0.1.121', :app, alias: 'web2'


def installed?(cmd)
  `which #{cmd.to_s} > /dev/null; echo $?`.to_i.zero?
end

if installed?(:aws) && installed?(:jq)
  instance_ids = `aws autoscaling describe-auto-scaling-instances | jq ".AutoScalingInstances[].InstanceId"`.split("\n")
  private_ips = `aws ec2 describe-instances --instance-ids #{instance_ids.join(' ')} | jq ".Reservations[].Instances[].PrivateIpAddress"`.gsub('"', '').split("\n")
  private_ips.each do |ip|
    # AWS API経由で取得した現在稼働中AutoScalingサーバのipを追加
    eval "server '#{ip}', :app"
  end
else
  puts '[ deploy to autoscaling servers skipped. ]'
  puts 'awscli and jq required. For Mac OS X, try "$ brew install awscli jq"'
end
`````


流れとしては

`aws autoscaling describe-auto-scaling-instances`で現在稼働中のAutoScalingサーバが取れる.

jsonで結果が返ってくるのでjqを使って`jq ".AutoScalingInstances[].InstanceId"`とインスタンスIDだけを絞り込んで取得.

次にインスタンスIDを元にして`aws ec2 describe-instances`で詳細データを得る.

同じくAWS apiのjson結果をパイプに渡し, `jq ".Reservations[].Instances[].PrivateIpAddress"`でプライベートIPアドレスを得る. このときダブルクオートを含んだ`"10.0.1.200"`のような文字列が返ってくるのでgsubで除去.

最後に得られたip addrをmain中でevalするという行儀の悪いことをやってるが, Capistrano純正の機能で動的にサーバ追加できるならそうしたい.
AngularJSでJSロード前の画面の乱れをなくす手順

## JSを無効化する
ChromeだとDeveloper Consoleの `Settings > Disable JavaScript` からJSを無効にできる。

こうすることでJSが読み込まれる前の状況を再現できる。

![](http://i.gyazo.com/2af580a08d85c81fb956794912c0e841.png)

## ng-cloakしまくる
見せてはいけない要素に `ng-cloak` をつけて隠しまくる。

``` html
<div class="container" ng-cloak>
  ...
</div>
```
AMIのImageをAMI_NAMEで絞り込んでNameとImageIdを抜き出す

AMIのImageを`AMI_NAME`で絞り込んで`Name`と`ImageId`を抜き出す

```
$ aws ec2 describe-images \
      --filters "Name=name,Values='*AMI_NAME*'" \
      --query 'Images[].[Name,ImageId]' \
      --output text`
```
MacOS10.9 + Vim7.4 + tmux で clipboard を共有する

#概要
MacOS10.9 の Vim7.3 から homebrew でインストールした Vim7.4 へ切り替えたのが事の始まり。
clipboard を OS と Vim で共有にしたいと思い実践。こちらはうまくいくも次は tmux を立ち上げてから tmux 上での Vim では Clipboard が共有されないことが発覚。
全て解決したので備忘録を残します。

#手順
## Vim7.4 インストール
* インストールしましょう

```
$ brew update
$ brew install vim
$ brew list vim
/usr/local/Cellar/vim/7.4.335/bin/ex
/usr/local/Cellar/vim/7.4.335/bin/rview
/usr/local/Cellar/vim/7.4.335/bin/rvim
/usr/local/Cellar/vim/7.4.335/bin/view
/usr/local/Cellar/vim/7.4.335/bin/vim
/usr/local/Cellar/vim/7.4.335/bin/vimdiff
/usr/local/Cellar/vim/7.4.335/bin/vimtutor
/usr/local/Cellar/vim/7.4.335/bin/xxd
/usr/local/Cellar/vim/7.4.335/share/man/ (113 files)
/usr/local/Cellar/vim/7.4.335/share/vim/ (1503 files)
```

* Vim7.3 から Vim7.4 へ切り替えます
* clipboard が反映されていることも確認します

```
$ sudo mv /usr/bin/vim /usr/bin/old_vim                                                                                                                                           
$ sudo ln /usr/local/Cellar/vim/7.4.335/bin/vim /usr/bin/
$ vim --version | grep clipboard
+clipboard       +iconv           +path_extra      -toolbar
+eval            +mouse_dec       +startuptime     -xterm_clipboard
```

* .vimrc に下記を追記して clipboard を共有できるようにします

```.vimrc
set clipboard+=unnamed
```

* backspace が使えないという事象が発生したので下記も追加します

```.vimrc
set backspace=indent,eol,start
```

## tmux + Vim7.4 で clipboard を共有可能にする
* brew で ```reattach-to-user-namespace``` をインストールします

```
$ brew install reattach-to-user-namespace
```

* .tmux.conf に下記を追記します

```.tmux.conf
# キーバインドを vim 風に
set-window-option -g mode-keys vi

# コピーモードに入った際に v で選択開始, y もしくは enter で選択範囲をコピー
unbind -t vi-copy Enter
bind-key -t vi-copy v begin-selection
bind-key -t vi-copy y copy-pipe "reattach-to-user-namespace pbcopy"
bind-key -t vi-copy Enter copy-pipe "reattach-to-user-namespace pbcopy"
set-option -g default-command "reattach-to-user-namespace -l bash:"
```

環境によっては、```[exited]``` が出力され tmux が起動できないことがあるようです。その場合には、```set-option -g default-command "reattach-to-user-namespace -l bash:``` の行を削除し

```.tmux.conf
set-option -g default-command ""
```
を設定することで回避できました。こちらでも tmux 上で vim を立ち上げた際に clipboard が共有されることが確認できました。

* 最後に確実に反映するために ```tmux kill-server``` をします

```
$ tmux kill-server
```

以上で、tmux 上で Vim を立ち上げても clipboard が共有されるようになりました。
Ruby読めない僕が紹介する、Redmineを基本無料で構築する方法(初級編)

#わかってる人向けの1行説明
OpenshiftのInstant AppからRedmine2.4を運用します(2014/08/06現在)。

#概要、もしくはOpenshiftとは何か
採用事例が各所で増えているバグ管理……
というよかプロジェクト管理システムとして、既にスタンダードとなっているRuby on Rails製アプリ、それがRedmine。

しかし、Railsに慣れてない方は、その導入のハードルが非常に高い。
僕も構築の段階で、数々の煮え湯を飲んできた。

とまれ全部入りRedmineパッケージのALMiniumや、PHP製のCandyCaneもある。いずれも導入が楽な素晴らしいシステムなんだけど、アップデートリリースのタイミングを考えると、ちょっと二の足を踏むことも。

(以下から佐世保弁でお読みください)
そこで本日ご紹介いたしますのが！
RedHat社によるPaaSサービスのOpenShiftです！
なんとRails環境構築&Redmine導入の手間なし！ブラウザだけで即利用可能！
システム利用料は全てRedHat社が負担いたします！(但し、無料枠には制限があります)
更にコンソールに立ち向かう勇気があれば、アップデートやプラグイン導入も思いのまま！

さあ、お申し込みは今すぐ！

#対象読者
* RubyとかRuby on Railsとかよく解らない、gemとかbundleとか聞いたこともない
* 黒い画面(コンソール)がこわい
* だけど、バグ管理やTiDD(チケット駆動開発)に興味がある、試してみたい
* 英語はこわくない、我々にはGoogle翻訳がある
* 上記の条件を全て満たした僕

#運用開始までの3ステップを雑に説明
##Openshiftのアカウントを作る
https://www.openshift.com/app/account/new
こちらから必要事項を記入して登録し、ログインしましょう。

##Applicationの追加
ログインが終わったら、「Applications」から「Add Application」を開き、
キーワード検索で「Redmine」を探しましょう。

後はURLを決めてMySQLを5.5にするなどして、
「Create Application」を押して、数分待つだけ。

##ログインと設定
これだけでもう、Redmineが運用できます。
が、その前に最低限のセキュリティ対策を。
初っ端のユーザは1人だけ、ID:admin PW:adminです。
ログイン後、「個人設定」からパスワードを別のものに変更しましょう。必ず。絶対に。

自分一人で利用するならこのままでも問題ないのですが、
社内・チーム利用や、他の誰かを招待する可能性がひとつでも在るならば、
adminユーザから自分の名前のユーザを作成し、それを利用しましょう。

あ、ブックマークする際は、必ずhttp:// から、https:// に変更しましょう。
https接続も無料ってのが嬉しいじゃありませんか。

#僕がOpenShiftにて構築・運用した雑感
##利点
###超簡単
ブラウザ操作だけで構築できる。
コンソール叩かない。RubyもUnix環境もサーバ構築も必要ない。すごい。
下手すりゃパートのおばさんにも説明できるレベル。
これが……DevOpsか……！(最近覚えたよくわからん言葉使い隊)

###基本無料
Gearと呼ばれるインスタンスが3つまで無料。
カスタムドメインでの運用も無料とか凄すぎる。
Gear4個目からは1個ごとに$0.02/1h、$0.48/1dなので安……い(ちょっと言いよどむ

###割とセキュア
自前でサーバ立てるとなると、案外とSSL接続の設定でつまづいたり、
格安証明書でも年額1000円以上はするし、かといってオレオレ証明書は……なんて悩むこともあるのですが、
そんな事考えなくてもデフォルトでhttps接続が利用できます。
フォーム入力時の安心感が違います。

それに、Webサーバの脆弱性の心配を運用がしなくても良い、というのが何より。
(まあRubyなどGearに乗っかってるアプリの心配はすべきでしょうが)

##欠点
###遅い
日本リージョンが無いので詮無きことではありますが。
また半日アクセスしてないと、初回の読み込み時間に10秒以上掛かることもしばしば。
「これらのPaaSなどで実際に運用する時は、CDNサービスの検討も視野に入れて」
と、参考にしたブログの偉い人が語ってましたが、全くその通りかと。
とまれ仲間内のみの運用で、イライラしないのであれば問題ないかと思います。

日本で展開されている純国産PaaS、mogokを利用する手もアリです。
これもredmineの簡単インストールが用意されてたと思います。
とまれコンソール操作を踏まえた優位性としては、個人的にはOpenshiftに軍配を上げたい。

まあ、パフォーマンスや運用時の柔軟性を考えるなら、
EC2やVultrあたりのVPSを借りちゃって、
DockerなどでRedmine環境を立ち上げるのが一番なんですけどネ！

###Redmineがちょい古い
現在は2.5.2なのですが、これは2.4です。
アップグレードするにはRubyをコンソールで操作できる環境が必要になります。
しかし2.5はMarkdown形式での記述が(experimentalですが)可能だし、
セキュリティリリースもあったりするので、
是非アップグレードに挑戦して頂きたい、のですが……。

###アップグレード、テーマ、プラグインの追加にはコンソール操作が必要
まあ甘えすぎんなって話でもあるんですが！
Redmineは素の状態でも十分にしゃぶりつくせる優良システムだとは思ってますが、
実際に運用しはじめると、どうしてもプラグインが欲しくなってきたりします。
あとUIのダサさに辟易することもままありますハイ。
そういう時は、勇気を出してコンソールでの操作を試してみるのも良いかと。

#そして中級編へ
僕のテンションが続くなら、中級編を書こうかな、と思ってます。
* Openshiftをコンソールのコマンドラインで扱うツールrhcの導入
* Openshift上のRedmineを2.4から2.5にアップデートする
* テーマを導入する
【Android】開発環境 簡単構築手順【Windows版 ADT】

新人研修や開発環境を作り直すのも楽になったっす。

# 【Android】開発環境 簡単構築手順【Win版 ADT】

　　[じぶんでさくっと本アプリを作ろう♪（基本の基 開発環境 構築手順（Win改））6ページ](http://goo.gl/cTB691)

　**Windows環境(対象OSは、Vista以降)だけですが、開発環境構築手順を大幅に簡略化しましたとさ！**

　【簡略化後の手順】
　　３つファイルダウンロードして
　　　→ １つのファイルをバッチファイルにリネームして　
　　　　→　バッチファイルを実行して、インストール自動化！
　　　　　→ はい。環境構築完了！
　　※これにより、**２２ページ**あった手順書が、たったの**６ページ**に簡略化されました！！
　　※batやexeや大きいサイズのzipファイルだと、
　　　GoogleChromeさんが弾いちゃうから拡張子リネームで対応しています。

## 　ニコ動に動画での手順をUPしました。
　　2分もないので、事前にさらっと手順を確認すると解り易いかも！
　　http://www.nicovideo.jp/watch/sm24170115

---
# 基本の基 開発環境 構築手順（Win改）
　[じぶんでさくっと本アプリを作ろう♪（基本の基 開発環境 構築手順（Win改））6ページ](http://goo.gl/cTB691)

## 　表紙
　　　　![01win_タイトル.png](https://qiita-image-store.s3.amazonaws.com/0/48240/46b61b8f-45ae-383c-f7c7-57ce9bc123ee.png)

## 　１ページ
　　■Windows 64bit用　http://goo.gl/XL4ZyH
　　■Windows 32bit用　http://goo.gl/Bx4VrY

　　　![01win_開発環境構築手順01.png](https://qiita-image-store.s3.amazonaws.com/0/48240/2bbfd9e0-b8f6-7900-4ce6-a991bc85f245.png)

## 　２ページ
　　※batやexeや大きいサイズのzipファイルだと、
　　　GoogleChromeさんが弾いちゃうから拡張子リネームで対応しています。
　　　![01win_開発環境構築手順02.png](https://qiita-image-store.s3.amazonaws.com/0/48240/580db7a9-75c3-0c50-4b27-c3b98bfbe7a1.png)

## 　３ページ
　　　![01win_開発環境構築手順03.png](https://qiita-image-store.s3.amazonaws.com/0/48240/8c72ff67-e201-b5df-ba57-598627e8ab22.png)

## 　４ページ
　　　![01win_開発環境構築手順04.png](https://qiita-image-store.s3.amazonaws.com/0/48240/790c0d4a-e7b0-52f8-8b3d-39f9bfd1dff4.png)

## 　最終ページ
　　　![01win_開発環境構築手順05.png](https://qiita-image-store.s3.amazonaws.com/0/48240/dd464232-369f-c680-ab37-3c766d0e3dd6.png)

---
　前回投稿した、
　[【Androidアプリ】じぶんでさくっと本アプリを作ろう♪](http://qiita.com/Katemag/items/79009d824812940bc138)

　の各手順の動画もUPしたので、どうぞ～。

###【動画で手順で確認！】
　　**01.基本の基 開発環境 構築手順**
　　　http://www.nicovideo.jp/watch/sm24112071
　　　**※Windows環境の場合は、TOPで紹介している物の方が、はるかに簡単です。**

　　**02.あなた独自の本アプリ作成手順**
　　　http://www.nicovideo.jp/watch/sm24113037

　　**03.あなた色の本アプリ 配布手順**
　　　http://www.nicovideo.jp/watch/sm24116705

---
# 出来れば、ご協力お願いしますｍ(＿ ＿)ｍ

今回、３つのファイルを保存するストレージとして、
**無料で２ＧＢ**も利用できる最大手の「**Dropbox**」を利用しています。
だがしかし！
　64bitと32bit用の３ファイルずつ置いたら、**１.４ＧＢ**も使ってしまいましたとさ＞＜。
 「ブラよろ」のデータと合わせて、もう**２ＧＢ**いっぱいいっぱい使ってしまったっす＞＜；

ファイル共有や野良アプリ提供時にも利用できるストレージに興味がありましたら
是非、下記**【紹介リンク】**から登録して下さいませｍ(＿ ＿)ｍ
　**相互に500ＭＢ(0.5ＧＢ)**がもらえますもので・・・テヘ＾＾ノ

「あなたが紹介した友達がコンピュータに Dropbox をインストールして参加するごとに、
　あなたと友達に 500 MB のボーナス容量を差し上げます！（最大 16 GB まで） 」

【紹介リンク】
　https://db.tt/NeFs9XlU
Unity C# XMLのパース


.NET Framework の System.Xml を使う。

### XMLサンプル

```XML
<talks>
    <talk person="2">
        <speak content="こんにちは" num="1" />
        <speak content="ありがとう" num="2" />
        <speak content="さようなら" num="3" />
    </talk>
    <talk person="1">
        <speak content="あーい" num="4" />
        <speak content="ふーい" num="5" />
        <speak content="ねむい" num="6" />
    </talk>
</talks>
```

### スクリプト

上記のXMLをstring型で渡す。

```C#
using UnityEngine;

using System.Xml;
using System.IO;

public class SampleMain {

    public void XmlPerse ( string xmlString ) { // string型で渡ってきたとする

        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.Load(new StringReader(xmlString));

        XmlNode root = xmlDoc.FirstChild;

        XmlNodeList talkList = xmlDoc.GetElementsByTagName("talk");

        XmlNode talk0 = talkList[0];
        XmlNode talk1 = talkList[1];

        XmlNodeList speakList0 = talk0.ChildNodes;
        XmlNodeList speakList1 = talk1.ChildNodes;

        Debug.Log( root.Name ); // talks

        Debug.Log( talk0.Attributes["person"].Value ); // 2
        Debug.Log( talk1.Attributes["person"].Value ); // 1

        Debug.Log( speakList0[0].Attributes["content"].Value ); // こんにちは
        Debug.Log( speakList0[1].Attributes["content"].Value ); // ありがとう
        Debug.Log( speakList0[2].Attributes["content"].Value ); // さようなら

        Debug.Log( speakList0[0].Attributes["num"].Value ); // 1
        Debug.Log( speakList0[1].Attributes["num"].Value ); // 2
        Debug.Log( speakList0[2].Attributes["num"].Value ); // 3

        Debug.Log( speakList1[0].Attributes["content"].Value ); // あーい
        Debug.Log( speakList1[1].Attributes["content"].Value ); // ふーい 
        Debug.Log( speakList1[2].Attributes["content"].Value ); // ねむい

        Debug.Log( speakList1[0].Attributes["num"].Value ); // 4
        Debug.Log( speakList1[1].Attributes["num"].Value ); // 5 
        Debug.Log( speakList1[2].Attributes["num"].Value ); // 6
    }
}
```

さらに細かい使い方は下記URLを参考にしよう。

**System.Xml 名前空間 ()**
http://msdn.microsoft.com/ja-jp/library/System.Xml(v=vs.100).aspx
svn で未 add なファイルを検索 & add する

~~未だに~~ Subversion 使ってるんです。

今回はいちいちファイル指定でするのがﾒﾝﾄﾞｲ `svn add` をディレクトリ指定で一括で行いたい場合などのメモ。
`svn st` すると未 `svn add` なファイルは頭に `?` と表示されるのを利用する。

```bash:対象ディレクトリ配下の未addファイルを一覧表示
$ svn st [対象ディレクトリ] | awk '$1=="?"&&$2~/\.(ftl|java)$/{print $2}' 
```

確認できたら

```bash:未addを一括でadd
$ svn st [対象ディレクトリ] | awk '$1=="?"&&$2~/\.(ftl|java)$/{print $2}' | xargs svn add
```

でおｋ。

2項目の正規表現マッチは拡張子を `ftl` と `java` に限定したかっただけ。
つべこべいわずに全て `svn add` するって場合は必要ない。

そんな場合は

```bash:未addを一括でadd
$ svn add [対象ディレクトリ] --force
```

というように `force` オプションつけるとパイプすら使わなくてよくなる。
ansibleが動くubuntu 14.04用Dockerfile

主に[Dockerizing an SSH Daemon Service](http://docs.docker.com/examples/running_ssh_service/)と[docker上のコンテナをansibleで構成管理する](http://cross-black777.hatenablog.com/entry/2014/06/15/163130)を参考にさせていただきましたが、意外と面倒くさかったです。

##準備

sshの公開鍵をコピーしてauthorized_keysという名前でDockerfileと同じところに置いておく。


```Dockerfile
# sshd　ubuntu 14.04
#
# VERSION               0.0.1

FROM     ubuntu:14.04
MAINTAINER h.obata "obata.hiroshi@propos.jp"

# make sure the package repository is up to date
RUN apt-get update

RUN apt-get install -y openssh-server
RUN mkdir /var/run/sshd
RUN echo 'root:screencast' | chpasswd

RUN useradd docker -m
RUN echo 'docker:docker1234' | chpasswd
RUN echo 'docker ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers.d/docker

# Set up SSH
RUN mkdir -p /home/docker/.ssh; chown docker /home/docker/.ssh; chmod 700 /home/docker/.ssh
ADD authorized_keys /home/docker/.ssh/authorized_keys

RUN chown docker /home/docker/.ssh/authorized_keys
RUN chmod 600 /home/docker/.ssh/authorized_keys


RUN sed -ri 's/PermitRootLogin without-password/PermitRootLogin yes/g' /etc/ssh/sshd_config

EXPOSE 22
CMD    ["/usr/sbin/sshd", "-D"]

```
## ポイント

`RUN echo 'docker ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers.d/docker`でパスワードなしでsudoが実行できるようにする。これが嫌ならInventoryファイルにansible_sudo_passでパスワードを記述するか、ansible実行時に'--ask-sudo-pass'オプションを使う。これをやらないとroot権限が必要なコマンドが動きません。世の中のAnsible入門HogeHogeにはこのあたりのことがちゃんと書いていないものが多いです。

sshd_configの記述形式および初期の設定内容はディストリビューション毎にばらばらなので、sedで書き換えるスクリプトを記述する際には使おうとするディストリビューションの内容を確認した方がよいです。


以上
XlsxWriterでxlsxファイルを作る

Pythonを使ってExcelファイル(拡張子xlsx)を作成できるモジュールです。Excel2007以降で登場したテーブルを生成したり、それぞれのセルプロパティをいじったり、割と本格的な帳票を作ることができます。
いろいろ事情があって最終的な出力形式はExcelじゃなければいけないけど、入力がとても面倒くさくとても普通にExcelなんか書いていられない なんて時にオススメ。


とりあえず、さわりだけ。

# インストール
とりあえず、easyinstallでインストールができます。Windows環境下でもこれでOK

```bat
> easy_install xlsxwriter
```

# 基本的な使い方
まずは`import xlsxwriter`してモジュールをインポートします。
次に、ファイル名を指定してワークブックを作り、必要に応じてワークシートを何枚か挿入、処理が終わったらワークブックをクローズするとファイルができあがる感じです。

```py:sample.py
import xlsxwriter

wb = xlsxwriter.Workbook('test.xlsx')
ws = wb.add_worksheet("シート名")

ws.write(0, 0, "テストテストテスト")
wb.close()

```

# テーブルの作成
Excel2007以降で追加されたテーブルを作成することもできます。

```py:sample.py

# 前略
  data = []
  headers = [
    { "header": "ヘッダ1"},
    { "header": "ヘッダ2"},
    { "header": "ヘッダ3"}]
  ws.add_table(0, 0, len(data) - 1, len(headers) - 1, {
    'data': data,
    'autofilter': True,
    'header_row': True, 
    'banded_rows': True, 
    'banded_columns': True,
    'first_column': True,
    'columns': headers
  })
# 後略
```

これでテーブルができあがります。いいですね。

## テーブル列の書式を変更する
自分が試したのはとりあえず「折り返して全体を表示する」だけ。

```py:set_text_wrap.py
# 前略
  format = workbook.add_format()
  format.set_text_wrap()
  ws.set_column(0, 0, 13)
  ws.set_column(1, 2, 13, format)
# 後略
```

set_column()の第一引数には、このフォーマットを使う最初の列の列番号、第二引数には、最後の列の列番号、第三引数は、列幅、最後にフォーマットを規定するオブジェクトを用意している場合は、第四引数にそれを指定します。

# もっと詳しくは。

モジュールのページにいろいろ情報が掲載されています。
http://xlsxwriter.readthedocs.org/en/latest/
画面右下を見るとPDFやePUB形式のリファレンスを入手できるという力の入れようです。
Firefox でウィンドウのタイトルバーを復活

Firefoxのバージョン29から(?)、タイトルバーが表示されなくなった。
タイトルバーのメニューが出しにくくて不便になったので復活させる。


kimama1997さんに教えてもらいました。
「カスタマイズ」で「タイトルバー」というON/OFF設定がありました。

--------------------
ということで以下は不要

1. about:config を開いて設定画面を出す
2. browser.tabs.drawInTitlebar を false に設定

Chromeは多少タイトルバーが残っているからメニュー出せるけど同じ設定はないのか。拡張入れるほどでもないし。
syntasticの連携

.vimrcに下記を書く。(neobundleが入っていることが前提)

```
"NeoBundle 'scrooloose/syntastic'
let g:syntastic_enable_signs=1
let g:syntastic_auto_loc_list=1
let g:syntastic_mode_map={ 'mode': 'passive',
                        \ 'active_filetypes': ['php', 'ruby', 'javascript', 'json'],
                        \ 'passive_filetypes': []
                        \}
let g:syntastic_ruby_checkers=['rubocop']
let g:syntastic_javascript_checkers=['jshint']
let g:syntastic_php_checkers=['php','phpcs']
let g:syntastic_quite_warnings=0
```

### 参考

rubocopのインストール系
http://qiita.com/yuku_t/items/0ac33cea18e10f14e185

phpdcsのインストール
pear install PHP_CodeSniffer

jshintのインストール系
http://d.hatena.ne.jp/sasaplus1/20120517/1337260047
Storyboard: Segueの遷移先のウィンドウに値を渡したりする


[Unwindサンプルの写経](https://www.evernote.com/shard/s302/sh/b31731b5-dafb-453e-883b-25d1437697aa/0899b4062121d1a527bb5238f0c24d7c)のカスタマイズ

YellowViewControllerがRootで、“Go To Pink”ボタンをタッチすると、PinkViewControllerに遷移するので、その間になんかしたい。

# Destination(Pink)の修正

- プロパティを作成して、値を渡せるようにする
- ViewDidLoad()をオーバーライドして、画面表示する際に値をUIに反映


こんな:

```csharp

	partial class PinkViewController : UIViewController
	{

		public DateTime CurrentTime {
			get;
			set;
		}

		public override void ViewDidLoad ()
		{
			base.ViewDidLoad ();

			this.CurrentTimeLabel.Text =
				CurrentTime.ToLongDateString()+ " " + CurrentTime.ToLongTimeString ();
		}
	}
```

# Source(Yellow)の修正

- PrepareForSegueをオーバーライド
- セグエのDestinationViewControllerを目的のコントローラにリゾルブ(ここでは単純にキャスト)
- コントローラに値を渡す


GoToLinkボタンのタッチハンドラもいれてます。

```csharp

	partial class YellowViewController : UIViewController
	{

		partial void GoToPink_TouchUpInside (UIButton sender)
		{
			Console.WriteLine("**** going to Pink from Yellow");
		}

		public override void PrepareForSegue (UIStoryboardSegue segue, NSObject sender)
		{
			base.PrepareForSegue (segue, sender);

			var pink = (PinkViewController)segue.DestinationViewController;
			pink.CurrentTime = DateTime.Now;
		}
	}
```

呼ばれ順は
    
1. GoToPink_TouchUpInside  : ボタンをタッチした処理を実装する
2. PrepareForSegue : 画面遷移が用意できたときに、遷移先の画面をごにょる (この時点では遷移先のUIがウィンドウシステムに作成されていないので注意)
3. PerformSegue : Storyboardで紐づけた先の画面に遷移する (勝手によばれる)
Go言語: 標準パッケージのみでJSON APIクライアントを作りたい



```go
package main

import (
	"bytes"
	"encoding/json"
	"fmt"
	"io/ioutil"
	"net"
	"net/http"
)

type Input struct {
	Foo string `json:"foo"`
	Bar string `json:"bar"`
}

type Output struct {
	Message string `json:"message"`
}

func main() {
	// ダミーのHTTPサーバを立ち上げる
	listener, err := net.Listen("tcp", ":9999")
	if err != nil {
		return
	}
	defer listener.Close()
	http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
		w.Header().Set("Content-Type", "application/json")
		fmt.Fprint(w, `{"message": "OK"}`)
		return
	})
	go http.Serve(listener, nil)

	// jsonをデコードする
	input, err := json.Marshal(Input{Foo: "foo", Bar: "bar"})

	// HTTP リクエスト
	resp, err := http.Post("http://127.0.0.1:9999/", "application/json", bytes.NewBuffer(input))
	if err != nil {
		fmt.Println(err.Error())
		return
	}

	// Bodyを読み込む
	body, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		fmt.Println(err.Error())
		return
	}

	// ステータスによるエラーハンドリング
	if resp.StatusCode != http.StatusOK {
		fmt.Printf("%s", body)
		return
	}

	// BodyのJSONをデコードする
	output := Output{}
	err = json.Unmarshal(body, &output)
	if err != nil {
		fmt.Println(err.Error())
		return
	}

	fmt.Printf("%#v", output)
}

```
Web Typesetting（Webでの組版、とくに欧文組版）に関する参考文献

Webでもタイポグラフィにこだわりたい！ので勉強中です。とりあえず参考文献集めました。これからちゃんと読みます…。
おもしろい記事が見つかればまた足していきます。

# 参考文献リスト
## webタイポグラフィ

- [Advanced Web Typography](http://advancedwebtypography.com)

- [The Elements of Typographic Style Applied to the Web](http://webtypography.net/toc/)

- [Web Design is 95% Typography](http://ia.net/blog/the-web-is-all-about-typography-period/)

- [Typesetting the Web](https://speakerdeck.com/kylefox/typesetting-the-web)

- [Creating distraction-free reading experiences](http://azumbrunnen.me/blog/creating-distraction-free-reading-experiences/)

- [The Best Typography-Based Sites of June 2014](http://www.typeandgrids.com/blog/the-best-typography-based-sites-of-june-2014)

- [The Best Typography-Based Sites of July 2014](http://www.typeandgrids.com/blog/the-best-typography-based-sites-of-july-2014)

- [Kerning on the Web](http://blog.typekit.com/2014/02/05/kerning-on-the-web/)

## webフォント・表示関係

- [TypeTalks第10回「もっと知りたい！Webフォント」](http://www.slideshare.net/petitboys/typetalks10web)

- [Some solutions to font-face rendering poorly in Windows Google Chrome](https://www.domsammut.com/code/some-solutions-to-font-face-rendering-poorly-in-windows-google-chrome)

- [Introducing Normalize-OpenType.css](http://kennethormandy.com/journal/normalize-opentype-css)

- [11 jQuery Plugins That Can Enhance Your Typography](http://sixrevisions.com/javascript/jquery-plugins-typography/)

- [Is it safe to use the CSS rule “text-rendering: optimizelegibility;” on all text?](http://stackoverflow.com/questions/7968795/is-it-safe-to-use-the-css-rule-text-rendering-optimizelegibility-on-all-text/12430050#12430050)

- [シンボルフォント — それは、新しい画像形式](http://www.slideshare.net/cognitom/symbol-font-css-nite)


## webフォント・パフォーマンス関連

- [Optimizing Web Font Rendering Performance](https://www.igvita.com/2014/01/31/optimizing-web-font-rendering-performance/)

- [Web Font Performance: Weighing @font-face Options and Alternatives](http://www.artzstudio.com/2012/02/web-font-performance-weighing-fontface-options-and-alternatives/)

- [PV数が上がるほど高速化するGoogle Web Fonts](http://dresscording.com/blog/web_fonts/google_web_fonts.html)

- [Web Font Services: the Good, the Bad, and the Ugly](http://webdesign.tutsplus.com/articles/web-font-services-the-good-the-bad-and-the-ugly--webdesign-7774)

- [WebFont Performance Review](http://blog.maxcdn.com/webfont-performance-review/)

- [CSS Font Loading Module Level 3を試してみた](http://sadah.hatenablog.com/entry/2014/06/30/211944)


## webフォント・ベンダー関連
- [Review of Popular Web Font Embedding Services](http://www.smashingmagazine.com/2010/10/20/review-of-popular-web-font-embedding-services/)

- [Pros and Cons of Web Font Services](http://wireupdc.com/blog/pros-and-cons-of-web-font-services/)

- [Google Fonts vs. Typekit vs. Cufon vs. System Fonts](http://www.flitehaus.com/blog/2013-04-26-google-fonts-vs-typekit-vs-cufon-vs-system-fonts)


## タイポグラフィ総論
- [タイポグラフィ初心者のためのタイポグラフィの基礎知識](http://matome.naver.jp/odai/2137320754987327701)

- [October 9, 2012　Webタイポグラフィの基本](https://www.ficc.jp/blog/web_typography)
Eclipse LunaでDark ThemeとEclipse Color Themeの相性が良くない？

Eclipse Luna でついにDark Themeがプラグインなしで選択できるようになりましたね。
このDark Theme、当たり前、かどうかはわかりませんがエディタもちゃんと黒っぽい感じにしてくれます。
ただ、その時に使われるThemeが個人的には好みではなかったのでEclipse Color Themeを使って変更しようとしても上手く変更できませんでした。

1. General->AppearanceでThemeを"Dark"に変更する。
2. General->Appearance->Color Themeでテーマを変更する。
3. 適用してOKする。

この手順で変更すると、変更したその時点では変更が反映されるんですが、Eclipseを再起動すると上記2.で変更した内容がリセットされてしまいます。

色々やってみた結果、以下の手順でやることで再起動後も設定がリセットされないことを確認したのでメモを残しておきます。

1. General->AppearanceでThemeを"Windows 7"にする。（"Dark"に変更していない場合は不要かも）
2. General->Appearance->Color Themeでテーマを変更する。
3. General->AppearanceでThemeを"Dark"に変更する。
4. 適用してOKする。


Dark Themeは今バージョンから導入された内容だし、しばらく時間が経てば直りそうな気もするけど
あと執筆途中で気付きましたけど、Windows7でしか現象を確認していないので、他のOSの場合発生するかも直るかもわかりません。
主要メディアのwebフォント使用状況調査

読み込むWebフォントの数が多すぎると（グリフ数の少ない欧文フォントとはいえ）サイトの表示スピードに影響するのではないか。
ということで、まずは個人的にイケてると思う海外メディアのWebフォント使用状況を調べてみました。

# 結論
平均すると1サイトあたり9つのWebフォントを利用していました。意外と多くても大丈夫なのかな、という印象です。

# 結果
## [narratively](http://narrative.ly/)
### ベンダー
Google fonts
### 使用フォント
- 'Lora'
	- normal 400
	- normal 700
	- italic 400
	- italic 700 
- 'Montserrat'
	- normal 400
	- normal 700
- 'Pathway Gothic One'
	- normal 400


## [Quartz](http://qz.com/)
### ベンダー
Google fonts
### 使用フォント
- 'PT Serif'
	- normal 400
	- normal 700
	- italic 400


## [OZY](http://www.ozy.com/)
### ベンダー
Fontdeck
### 使用フォント
- 'Futura'
	- normal 200
	- normal 300
	- normal 600
	- normal 800
	- normal normal
	- italic 200
	- italic 300
	- italic 600
	- italic normal
- 'Calluna'
	- normal normal
	- normal bold
	- italic normal


## [medium](https://medium.com/)
### ベンダー
Adobe Typekit
### 使用フォント
- 'freight-text-pro'
	- normal 400
	- normal 700
	- italic 400
	- italic 700 
- 'jaf-bernino-sans'
	- normal 300
	- normal 400
	- normal 700


## [Nautilus](http://nautil.us/)
### ベンダー
Adobe Typekit
### 使用フォント
- 'freight-display-pro'
	- italic 300
	- italic 500
- 'freight-sans-pro'
	- normal 300
	- normal 400
	- normal 500
	- normal 700
	- normal 900
	- italic 500
- 'freight-text-pro'
	- normal 400
	- italic 500


## [Q ideas](http://qideas.org/)
### ベンダー
Adobe Typekit
### 使用フォント
- 'freight-text-pro'
	- normal 300
	- normal 400
	- normal 500
	- normal 600
	- normal 700
	- normal 900
	- normal 400
	- italic 300
	- italic 400
	- italic 500
	- italic 600
	- italic 700
	- italic 900


## [Bustle](http://www.bustle.com/)
### ベンダー
Adobe Typekit
### 使用フォント
- 'brandon-grotesque'
	- normal 300
	- normal 400
	- normal 500
	- italic 400
- 'ff-tisa-web-pro'
	- normal 400
	- normal 700
	- italic 400

## [Atavist](https://atavist.com/)
### ベンダー
Adobe Typekit
### 使用フォント
- 'proxima-nova'
	- normal 100
	- normal 300
	- normal 400
	- normal 600
	- normal 700
	- normal 800
	- normal 900
	- italic 100
	- italic 300
	- italic 400
	- italic 600
	- italic 700
	- italic 800
	- italic 900

## [99u](http://99u.com/)
### ベンダー
Hoefler & Co.
### 使用フォント
- 'Tungsten A'
	- normal 500
	- normal 600
- 'Tungsten B'
	- normal 500
	- normal 600
- 'Knockout 30 A'
	- normal 400
- 'Knockout 30 B'
	- normal 400


## [Polygon](http://www.polygon.com/)
### ベンダー
Hoefler & Co.
### 使用フォント
- 'Mercury SSm A'
	- normal 400
	- normal 700
	- italic 400
- 'Mercury SSm B'
	- normal 400
	- normal 700
	- italic 400
- 'Gotham SSm A'
	- normal 400
	- normal 700
	- italic 300
- 'Gotham SSm B'
	- normal 400
	- normal 700
	- italic 300
- 'Gotham A'
	- normal 900
- 'Gotham B'
	- normal 900


## その他（おそらく自サーバーからの読み込み）
- [FiveThirtyEight](http://fivethirtyeight.com/)
- [Time](http://time.com)
- [Los Angels Times](http://www.latimes.com/)
- [Refinery29](http://www.refinery29.com)
- [Mic.](http://mic.com)
- [Nowess](http://www.nowness.com)
Macでコンソールからアプリ起動


毎回同じアプリを手動で起動するのはめんどいので、自動化したい。今回はスクリプトつくるところまで。


```bash:starup.sh
#!/bin/sh
open -a Google\ Chrome
open -a Slack
open -a iTerm
open -a Hoster
open -a Sequel\ Pro
```

あんまり起動しているアプリなかった。

次回はMac起動時にこのスクリプト叩くところまでやりたい。
iPhoneサファリで、WEBサイトをアプリっぽく見せる


## 方法① アドレスバーを小さく＆フッタメニューを消す

モバイルサイト向けには次のような `viewport` を指定していることが多いかと思いますが、

```html:index.html
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
```

次のように `minimal-ui` を追加します。

```html:index.html
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no, minimal-ui">
```

- イメージ：
	- `minimal-ui`を指定しない場合(この場合でも画面をスクロールすればアドレスバーが小さく＆フッタが消えはする)

		![写真 2014-08-06 16 21 50.png](https://qiita-image-store.s3.amazonaws.com/0/35733/f5671a94-c01c-e9ad-3ba0-2f580de0dd2e.png "写真 2014-08-06 16 21 50.png")

	- `minimal-ui`を指定した場合(常にアドレスバーが小さく＆フッタが消える)

		![写真 2014-08-06 16 21 56.png](https://qiita-image-store.s3.amazonaws.com/0/35733/9ff7be39-7264-eb0e-0159-ad23bd82e721.png "写真 2014-08-06 16 21 56.png")

### 実際のページはこちら(iPhoneで開いてみてください)

- `minimal-ui`を指定しない場合：http://hkusu.github.io/iOS_viewport_demo/index1.html
- `minimal-ui`を指定した場合：http://hkusu.github.io/iOS_viewport_demo/index2.html


## 方法② 端末のホーム画面から起動した場合にフルスクリーンモードにする

次のような meta タグを追加します。

```
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
```

このページを次のように端末のホーム画面に追加し、

![写真 2014-08-06 16 31 05.png](https://qiita-image-store.s3.amazonaws.com/0/35733/48ac24d4-7e3a-e13c-80d9-9fb0d63fbc37.png "写真 2014-08-06 16 31 05.png")　![写真 2014-08-06 16 31 12.png](https://qiita-image-store.s3.amazonaws.com/0/35733/5ab1e479-867a-71f7-af06-86cd16125b75.png "写真 2014-08-06 16 31 12.png")

ホーム画面から起動すると、フルスクリーンモードで表示されます。

![写真 2014-08-06 16 30 29.png](https://qiita-image-store.s3.amazonaws.com/0/35733/2fa58c9a-f168-b440-21b2-7b1fd1b334dc.png "写真 2014-08-06 16 30 29.png")　![写真 2014-08-06 16 28 27.png](https://qiita-image-store.s3.amazonaws.com/0/35733/d17a5d15-6c89-e2a4-33ea-e8e6dda90951.png "写真 2014-08-06 16 28 27.png")

また、フルスクリーンモードの場合、Safariとは表示上？ 別タスクとなるようで、独立したアプケーションとしてタスク表示されます。

![写真 2014-08-06 16 29 36.png](https://qiita-image-store.s3.amazonaws.com/0/35733/8c0bf3b9-9ec0-0c2e-bc09-c17026e2838d.png "写真 2014-08-06 16 29 36.png")

### 実際のページはこちら(ホーム画面へ追加してから起動してみてください)

- http://hkusu.github.io/iOS_viewport_demo/index3.html

## ほか

- 実際には ②のときも①のタグを書いておけばいいと思います。
- `minimal-ui` が使えるのは、iOS7.1？ 以降だったかと。
- フルスクリーンモードの場合、別ドメインのWEBページにリンクすると、Safariが立ち上がってしまうようです。
	- ただ、JavaSriptでハンドリングすれば回避できるらしい。
NSURLConnectionデフォルトのHTTPヘッダ

```objc:
- (void)send
{
  NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://ifconfig.me"]];
  NSLog(@"Accept-Encoding: %@", [req valueForHTTPHeaderField:@"Accept-Encoding"]);
  NSURLConnection *connection = [NSURLConnection connectionWithRequest:req delegate:self];
  [connection start];
}

- (NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)response
{
  NSLog(@"Accept-Encoding: %@", [request valueForHTTPHeaderField:@"Accept-Encoding"]);
  return request;
}
```

がこうなる。

```
2014-08-06 16:45:33.576 URLCache[299:60b] Accept-Encoding: (null)
2014-08-06 16:45:33.648 URLCache[299:60b] Accept-Encoding: gzip, deflate
```

` po [request allHTTPHeaderFields]` は 

```
po [request allHTTPHeaderFields]
{
    Accept = "*/*";
    "Accept-Encoding" = "gzip, deflate";
    "Accept-Language" = "ja-jp";
}
```

送られてるHTTPヘッダ。URLCacheはアプリ名。

```
Host                    ifconfig.me
Accept-Encoding         gzip, deflate
Accept                  */*
Accept-Language         ja-jp
Connection              keep-alive
User-Agent              URLCache/1.0 CFNetwork/672.0.8 Darwin/14.0.0
```
Google Domainsについて調べてみた

[Google Domains](http://domains.google.com/about/)からやっと招待来たーと思ったら、"[Google Domains is currently available only for users in the US.](https://support.google.com/domains/answer/4639612?hl=en)"と言われて悲しみに暮れている。
特にIPアドレス制限などはなく、ドメイン検索からGoogle Walletによる支払いの直前まではできる。なので[Walletの拠点国を変更](http://juggly.cn/archives/87849.html)すれば購入できそうな気はするが、さすがにドメインでこれをやるのは怖い。

仕方がないのでとりあえずGoogle Domainsがどんなものか調べることにした。

## 結論から
### 上位レジストラはGoogle自身
[すべてのTLDをサポートする](http://jp.techcrunch.com/2014/06/24/20140623google-gets-into-domain-sales/)との宣言通り、自身がレジストラとなってバリバリやろうとしているのだろう。

### 料金は普通
円安の今は国内と比べると高め。軌道に乗れば料金競争も期待できる？

### whois保護は名前、メールまで含めてサポート
ただしレジストラの判断で代理公開停止やドメイン停止されることがあるので、児ポとかに厳しいGoogleの運用には注視していく必要があるかも。

### ネームサーバは[Google Cloud DNS](https://developers.google.com/cloud-dns/?hl=ja)と同じっぽい
機能や料金がどうなっているのか不明だが、手軽に利用できるならGoogle Domainsの大きなアドバンテージとなる。


---

というわけで、Cloud DNS相当のネームサーバを手軽に使えるんだったらかなり狙い目になるんじゃないかと思う。もっと情報出てくれ…

以下、調べた過程。

## Google Domains管理のドメインを探す
調べるにはドメインのwhoisを見るのが手っ取り早いが、買ったよーと公開している人がなかなか見つからなかった。
さらに検索したところ[スクリーンショットを載せている](http://www.telapost.com/google-domains-beta/)ページを発見。これによるとGoogle Domains標準のネームサーバは`ns-cloud-*.googledomains.com`のようだ。

あとは[検索](https://www.google.co.jp/#q=ns-cloud-*.googledomains.com)したり、[Reverse Name Server Lookup](http://reversens.domaintools.com/search/?q=googledomains.com)したりして該当ドメインを探す。以下のようなドメインが見つかった。

- http://whois.domaintools.com/00ze.net
- http://whois.domaintools.com/zmstatic.com
- http://whois.domaintools.com/bytevoid.net
- http://whois.domaintools.com/whowantstobeapriest.org

## 上位レジストラ
[最近ドメイン販売を開始した](http://yoshidashingo.hatenablog.com/entry/2014/08/01/111035)[Route 53](http://aws.amazon.com/jp/route53/)では、Amazonはリセラーであり上位レジストラは[Gandi](http://www.gandi.net/)などとなっている。
Google Domainsでは`Registrar: Google Inc.`とあり、Google自身がレジストラとなっている。取り扱いTLDがまだ少ないのはこのためのようだ。

## 料金
一般的なgTLDが$12で、円安になったので[国内](http://muumuu-domain.com/?mode=price)と比べるとやや高め。
[Route 53とはほぼ変わらないが、新TLDは全体的に安くなっている](http://www.lancork.net/2014/08/comparison-with-google-domains-and-amazon-route53-price/)。


## whois保護(情報代理公開)
whois保護は名前、メールまで含めてサポートされている。
Route 53では名前の保護はできなかったので、ここはGoogle Domainsが一歩上。

参考: [Route 53で登録したドメイン](http://whois.domaintools.com/shimoju.org) ※.orgだけできないのかもしれない

## ネームサーバ
Google Domains標準のネームサーバは`ns-cloud-*.googledomains.com`のようだが、これは[Google Cloud DNS](https://developers.google.com/cloud-dns/?hl=ja)と同じものだと思われる。
機能制限や料金はどうなっているのか不明だが、無料もしくは割引があるようならGoogle Domainsの大きなアドバンテージとなる(Route 53では割引なし)。