OmniAICreator/Qiita-1.07M huggingface dataset:
仮想サーバでゲストOS（Linux）を複製した際にIP・ホスト名等を変更する手順

私は、本番環境の検証などの目的で、仮想サーバ（VMware, Hyper-V等）上にあるゲストマシンを複製し新たなゲストマシンを作る機会が多くあります。その際、仮想サーバ（ホスト）のコンソール上で複製するだけでは、ゲストマシン上で設定しているホスト名やIPなどもそのまま引き継いでしまっているため、複製したゲストマシンを正常に稼働させることはできません。
ここでは、ゲストマシン複製後に、複製元から引き継がれているホスト名、IP等の設定を変更する手順を記載します。

# 前提

* ゲストマシンの複製は予め完了しているものとします。
※ゲストマシンの複製方法
Hyper-Vの場合 http://www.atmarkit.co.jp/ait/articles/1309/06/news097.html 
* 複製したゲストマシンを起動する際は、仮想サーバ（ゲスト）のコンソール上で仮想ネットワークから切り離した状態で起動します（複製元マシンとのIP競合を避けるため）
* ゲストマシンは Red Hat系Linux を想定しています。

# 固定IPの変更

* /etc/sysconfig/network-scripts/ifcfg-eth1 の下記行を変更
<pre>
IPADDR=xxx.xxx.xxx.xxx
</pre>
参考： http://itpro.nikkeibp.co.jp/article/COLUMN/20060228/231119/

# NICの変更

* udevルールファイル /etc/udev/rules.d/70-persistent-net.rules を編集する。記述されている設定を全て削除。削除しても、NIC有効化のタイミングでまた更新される。

# ホストの変更

* /etc/hosts を書き換える
* /etc/sysconfig/network を書き換える

# /etc/motd の変更

* ユーザログイン時に表示されるメッセージ内容を設定している場合は、 /etc/motd を開き適宜変更をする

# 再起動＆確認

* 仮想ホストサーバのコンソールより、該当ゲストを仮想ネットワークに接続する。
* ゲストマシンの再起動
* 設定が反映されていることを下記コマンドで確認
<pre>
$ ifconfig
</pre>
→　固定IPが変更されていることを確認
<pre>
$ hostname
$ hostname -a
$ hostname -i
$ hostname -f
$ hostname -d
</pre>
→　ホスト名が変更されていることを確認
外注開発こそテスト駆動

外注開発を管理する上での悩みは山ほどありますが

* 検収の受入テストが大変
* できあがってきたソフトウェアの品質が悪い
* 依頼した仕様と違っている

はその代表格です。

テストケースの提出をまず求める
==

外注先に納品を求める成果物の第一弾として **テストケース** をまず出してもらうことにします。
これは自動テストコードでもExcelチェックシートでもその混合でもかまいませんが、

* 依頼された仕様をこのように理解したという表明
* このテストケースは最低通過するものを納品するという表明

になります。
これをレビューして承認することで **仕様の認識相違がないこと** の保証になり、これは発注元にとっても発注先にとっても安心できる条件となります。

そして受入テストの項目作りも外注できることは発注者の負担を大きく減らします。もともとそんなマンパワーが確保できないからこそ外注しているわけで。

品質は、少なくてもテストレベルで確保されます。のちのち、テストケースからはずれた操作で問題が見つかった場合はどうするか？ 瑕疵はあくまで依頼仕様によって判断されるとあらかじめ定めておきたいです。
SubversionユーザがGitを使った時に勘違いした5つのこと

バージョン管理ツールはこれまでSubversionを使ってきました。ところが新規プロジェクトに携わることになったことをきっかけに、Gitを利用することとなったのですが、SubversionとGitではそもそものバージョン管理の考え方自体に違いがあり、コマンドも同じような名前でもSubversionとGitでは異なった働きをするものがあり混乱したため、違いを整理してみました。

# 1. Gitは分散型バージョン管理システム

* Gitは分散型バージョン管理システム（Subversionは集中型バージョン管理システム）
* リポジトリには2種類がある
<dl>
<dt>リモートリポジトリ</dt>
<dd>専用のサーバに配置して複数人で共有するためのリポジトリ</dd>
<dt>ローカルリポジトリ</dt>
<dd>ユーザ一人ひとりが利用するために、自分の手元のマシン上に配置するリポジトリです。</dd>
</dl>

* 2種類に分かれているメリット

> リポジトリをリモートとローカルの2種類に分けることで、普段の作業はローカルリポジトリを使って全て手元のマシン上で行うことができます。自分のローカルリポジトリで作業した内容を公開したい時は、リモートリポジトリにアップロードして公開します。また、リモートリポジトリを通してほかの人の作業内容を取得することもできます。
抜粋：: 株式会社ヌーラボ. “サルでもわかるGit入門 for Mac OS X(GUI)”。 iBooks. https://itunes.apple.com/WebObjects/MZStore.woa/wa/viewBook?id=823F8E8C1B6EC9D1BC7E3F129B232AA7

# 2. リポジトリは「リモートリポジトリ名/ブランチ名」で表記

* 前述の通り、リポジトリには「リモート」「ローカル」の2種類があるため、それらを区別して表記する。
* リポジトリは「リモートリポジトリ名/ブランチ名」で表記する。
* リモートリポジトリ名には origin がよく用いらられる。理由は下記。

> コンソールの場合プッシュやプルは実行時にリモートリポジトリ名を省略すると、originという名前のリモートリポジトリを使用します。そのため、リモートリポジトリにはoriginという名前を付けるのが一般的です。
抜粋：: 株式会社ヌーラボ. “サルでもわかるGit入門 for Mac OS X(GUI)”。 iBooks. https://itunes.apple.com/WebObjects/MZStore.woa/wa/viewBook?id=823F8E8C1B6EC9D1BC7E3F129B232AA7

# 3. Gitには「インデックス」が存在する

* インデックスとは、ワークツリー（subversionで言う「作業ディレクトリ」）上にあるファイルを「仮コミット」するかを管理するもの。

> 編集して add して commit するのは Subversion と同じ。 違うのは、 Subversion の add が最初の1回だけなのに対して、 Git は毎回 add が必要なこと。
http://www.machu.jp/diary/20100506.html#p01

* インデックスに登録することを、「ステージする」と呼ぶ。

# 4. trunkはなく全てbranch

* subversion のように trunk / branches / tags というディレクトリの分類はない。
* タグはあるが、 trunk はなく、全てブランチとなる。
* subversion でいう trunk は master ブランチ。

# 5. マージは2種類ある

* マージは２種類ある
<dl>
<dt>merge</dt>
<dd>svn mergeに類するマージ方法</dd>
<dt>rebase</dt>
<dd>subversionにはないマージ方法。マージ元のソースを、マージ先の先頭に統合し、2本のブランチを1本にする。</dd>
</dl>

# Tips よく使うコマンド

## ソースコードを取得する類のもの

<dl>
<dt>clone</dt>
<dd>リモートにあるリポジトリを複製。ローカルマシンに、リポジトリからソースを取得するという意味では svn checkout に類する。
※ちなみに git で checkout と言ったら subversion では switch に類する</dd>
<dt>pull</dt>
<dd>リポジトリから更新分のソースコードを取得する。リモートにコミットされたソース（他の人が編集した内容）をローカルのソースに取り込むときなどに利用。svn updateに近い。</dd>
<dt>fetch</dt>
<dd>pullに似ているが、リポジトリから取得したソースコードを、ローカルのソースにマージしない。差分を逐一確認してからマージしたい場合などに利用</dd>
</dl>

## コミットする類のもの

<dl>
<dt>add</dt>
<dd>インデックスに登録。svn add に類するが、初回のみでなくコミット毎に必要</dd>
<dt>commit</dt>
<dd>コミットする。svn commit とほぼ同じ。</dd>
<dt>push</dt>
<dd>リモートリポジトリへローカルのソースコードを反映させる。subversionにはないコマンド。</dd>
</dl>

## コミットをまとめなおしたいときなど

<dl>
<dt>git reset HEAD^</dt>
<dd>直前のコミットをなかったことにし（履歴も取り消す）  
直前のコミットでコミットされたファイルは、ファイル内容はそのままで作業ディレクトリに移動する</dd>
</dl>

# 参考サイト

* サルでもわかるGit入門 http://www.backlog.jp/git-guide/
* Subversion ユーザーが Git を使ってみた (基本操作編)
http://www.machu.jp/diary/20100506.html#p01
【まとめ】cygwinを使ってWindowsでgit cloneするとアクセス権周りでバッチが実行できない等の問題が起こる件についての最終考察

##概要
下記３つの問題についてのまとめ。

http://qiita.com/umiai/items/7564fa745b205171268a
http://qiita.com/umiai/items/ffb0de687e4383b823c4
http://qiita.com/umiai/items/aeb9eb7446e6897158fd

##あらすじ
昨日cygwinが入った環境でgit cloneし、そこにあるバッチファイルで環境をセットアップしようとした。
しかしバッチファイルを叩くと
「指定されたデバイス、パスまたはファイルにアクセスできません。アクセス許可がない可能性があります。」
というエラーが出て実行できない。

開発環境の構築はリポジトリ内のsetup.batに任せていた為これが叩けないと環境が構築できなくて詰まった。

詳細は
http://qiita.com/umiai/items/7564fa745b205171268a
通りだが、

- git clone後のバッチファイルは何もしていない状態では叩けない
- git clone後のバッチファイルはエクスプローラの権限変更でも叩けない
- git clone後のバッチファイルはchmod 777すると叩ける
- git clone後のバッチファイルは管理者実行では叩ける

この挙動についてどうも腑に落ちないので色々と考察してみた。

##そもそも通常はchmodなんて実行できない
問題解決の糸口が見つかったのはここで、別のcygwinが入っているPCでこの問題に対応しようとしたところ、
そもそもchmodが実行できないので
http://qiita.com/umiai/items/aeb9eb7446e6897158fd
の方法で解決しなかった。

ここでやっと気づいたのがcygwinのls等のコマンドをコマンドプロンプトでも使えるようにする為に
環境変数のPathにcygwinのbinを追加していたのだ。

全てを察した人はここでブラウザを閉じても良いかもしれない。
そう、残念なくらい馬鹿だったのだ・・・

##cygwinの権限管理はどうなっている？
「git cloneしたバッチファイルが叩けない」
というのが今回の問題なわけだが、エラーや対処の為に試した方法と結果からみるに間違いなく権限周りの問題。
しかしそれにしては腑に落ちないのがエクスプローラからの権限変更では対処できないのに
chmodで権限変更すれば対処できるという点だ。

これに関しては予測しか立てられないので正しい情報を知っている人が居たらコメントしてくれると嬉しいのだが、
仮にcygwinはWindowsのアカウントの仕様を利用してcygwin上でUNIXのアクセス権限を実装していると仮定する。

先ずgit cloneすると作成されたファイルはcygwinのアカウントで作成された扱いになる。
これは実行されたgitがcygwin側のgitであった為だ。

この状態では自分のPCであろうと作成されたバッチは自分のアカウントで作成したものではないので、
作成されたバッチファイルの実行権限が自分のアカウントにはついていない。(これは確認済み)

エクスプローラーからサブディレクトリ含む全ファイルの権限変更を行っても権限が変更できなかったのは
単純に自分のアカウントとは別のアカウントで作成されたファイルだったから変更できなかっただけと思われる。

cygwin管理のアクセス権の変更はchmodから可能なので、
その後chmod -R 777 *で全ファイルの権限を変更すれば、
Windows OS側のcygwinのアカウントの権限が、誰でも実行可能となる為実行できるようになったのではと考えれば一応納得いく。

##コマンドプロンプトだろうとcygwin側のgitやperlが実行されていた
ActivePerlとcygwinが両方インストールされていたとしても通常はコマンドプロンプトから実行できるperlはActivePerl側のもの。

http://qiita.com/umiai/items/aeb9eb7446e6897158fd

でも少し言及したが実際にはcygwinのbinのパスが通ってなければ競合することは無い。
今回このPCではcygwinのbinのパスが通ってたのでcygwin側のperlが実行される可能性があった。

気になるのは自分の作成したperlスクリプトはActivePerlで実行されるのに対し、
git cloneによりcygwin側のアカウントで管理されたperlスクリプトはcygwinのperlで実行される点。

これはcygwin側管理のアカウントのファイルの関連付けがそうなっていたからではと考える。

http://qiita.com/umiai/items/7564fa745b205171268a

でレジストリを削除してもバッチファイルがシェル上、というよりcygwin上で動作してしまったのも、
単純にアカウントが異なる為に自分のアカウントのレジストリキーを削除しても意味が無かったとすれば一応納得いく。

##パスがUNIX形式に変換される
ちゃんとは見ていないがcygwin側で実行されたperlに渡るパスが、
この状態でのPCではUNIX形式に変換されるというのが結果論だがそうなっていたのでそうなっているとしか言いようが無い・・・

##結局どうすれば良いのか
cygwinのbinへのパスを環境変数のPathから削除する。
実際に削除したら普通にまともに動作した(もう、どうでもいいんじゃないかな・・・)。

##最後に
この考察は殆どが予想と結果論のみで構成されており解説として見るには不適切な箇所が多い。
正しい情報と見ず何か問題が起きた時「そういやこんなこと言ってた人が居たな」程度で見て欲しい。
railsでコントローラーでセットした変数をモデルから参照する方法


モデルにクラス変数を定義してコントローラーでそこにセットし、それを参照する

```ruby:user.rb
class User < ActiveRecord::Base
   # クラス変数
   cattr_accessor :current
end
```

 ```ruby:application_controller.rb
class ApplicationController < ActionController::Base
  before_action :set_current_user

  def set_current_user
    User.current = @user
  end
end
```

各モデルから ``` User.current``` でログイン中ユーザーを取得できる。
値がセットされていなかった時死ぬ、管理画面とかで死ぬ、テストも書きづらい、コントローラーとモデルは疎結合なのが正常。
なので**利用はおすすめしない**
。
s3fsを利用で困ったこと

# 構成

s3をマウントしてバックアップ用途として利用する
s3へのアクセスにはsamba経由で行う
マウントにはs3fsを利用する

設定方法は以下参考にしました

http://dev.classmethod.jp/cloud/aws/s3fs-ec2-mount-s3/

* キャッシュサイズの問題
* Macで開かない
* ファイル破損

## キャッシュサイズの問題

### 現象

ファイルをアップロードしているとサーバー側のサイズ容量が一杯になる現象が発生。
ファイル自体はs3に書き込まれているので、正しく動作している模様。

### 原因

キャッシュが問題でした。
マウント時に指定したパスにキャッシュが作成されるのですが、
溜まり続けていたのが問題でした。

### 対処

キャッシュサイズの制限を設定
設定が難しい場合はキャッシュさせないようにするのもありかと。
ただ、動作が遅くなります。

## Macで開かない

### 現象

Macだとディレクトリが開けません

### 対処

sambaの設定に以下を追加

```
unix extensions = no
```

## ファイル破損

### 現象

ファイル破損している。
EBS上のキャッシュフォルダは問題がない。

### 対処

sambaの設定に以下を追加
※確認中

```
oplocks = no
blocking locks = no
```
Movable Typeでカスタムフィールドで表示するNew画像を2週間のみ表示させる方法

New画像を特定の期間だけ表示させるということはよくあります。 
今回もそれと同じような要件があったので、記事にまとめてみました。
現在は、プラグインなどが豊富に揃っていますが、案件によって入れれない場合もあるのでメモしておきたいと思いました。

* 実装したMTのバージョンは5.02

[一定時間で自動的に消える New マークを付ける JavaScript の jQuery 版](http://www.tinybeans.net/blog/2008/09/25-062812.html)の「newmark_jquery.js」を使って実装してみました。

# 要件

* カスタムフィールドでNewを表示させる
* Newボタンは、14日後に自動的に非表示
* Newのカスタムフィールド(チェックボックス)がなかったら表示しない

# ソース

HTMLには、カスタムフィールドで囲ったアイコン部分とJSのループで回すためのクラスを入れました。

``` HTML
<mt:If tag="item_new"><p class="mod-new" title="<$mt:EntryDate format="%Y年%m月%d日 %H時%M分%S秒"$>"></p></mt:If>
```

JS側には、.mod-newの値を拾いループさせています。　
この処理で、3つの要件を満たすことができました。

``` JavaScript
<script>
$(function(){
    var currentDate = new Date();
    $('.mod-new').each(function(){
        var pass = <$mt:GetVar name="pass"$>;
        var content = '<img class="newmark" src="icon-new.png" height="13" width="37" alt="<$mt:GetVar name="pass"$>日以内の新着ブログ記事" title="<$mt:GetVar name="pass"$>日以内の新着ブログ記事">';
        var newmarkAttr = $(this).attr('title');
        newmarkAttr = newmarkAttr.replace(/年|月|日|時|分/g,':');
        newmarkAttr = newmarkAttr.replace(/\s|秒.*/g,'');
        var time = newmarkAttr.split(":");
        var entryDate = new Date(time[0], time[1]-1, time[2], time[3], time[4], time[5]);
        var now = (currentDate.getTime() - entryDate.getTime())/(60*60*1000);
        now = Math.ceil(now);
        if(now <= pass){
            $(this).append(content);
        }
    });
});
</script>
```

プラグインとか使えたほうが本当は助かるんですけど、導入することができないや代替案などの豆知識は常にメモしておくべきですね。

# 参考サイト

* [一定時間で自動的に消える New マークを付ける JavaScript の jQuery 版](http://www.tinybeans.net/blog/2008/09/25-062812.html)
* [jquery.newmark.js で一定の期間だけ New マークを表示する](http://gelsol.sub.jp/javascript/2011/02/jquery-newmark.html)
* [NEWマークを任意の日数だけ表示させる](http://www.tam-tam.co.jp/tipsnote/javascript/post691.html)
列挙する場合のRubyでのインデント？揃え(Indenting? in ruby)



まずRubyでこのような構文を作った。
First I have this code written in ruby

```rb:Ruby

def initialize(init_array = [nil, nil, nil, nil, nil])

## 引数がnilなら、デフォルト値にします      ## if ? true : false
init_array[0] ? main_text = init_array[0] : main_text = def_main_text
init_array[1] ? sub_text = init_array[1] : sub_text = def_sub_text
init_array[2] ? color_array = init_array[2] : color_array = def_color
init_array[3] ? width = init_array[3] : width = def_width
init_array[4] ? height = init_array[4] : height = def_height
## End of setting defaults numerals.

```
これはちょっと見辛いと思った。
以下のように変数を初期化したいのだけれど、
which of the below is better to read?

```rb:type1

## 引数がnilなら、デフォルト値にします      ## if ? true : false
init_array[0]  ?    main_text = init_array[0]  :    main_text = def_main_text
init_array[1]  ?     sub_text = init_array[1]  :     sub_text = def_sub_text
init_array[2]  ?  color_array = init_array[2]  :  color_array = def_color
init_array[3]  ?        width = init_array[3]  :        width = def_width
init_array[4]  ?       height = init_array[4]  :       height = def_height
## End of setting defaults numerals.

```

```rb:type2

## 引数がnilなら、デフォルト値にします      ## if ? true : false
init_array[0]  ?  main_text   = init_array[0]  :  main_text   = def_main_text
init_array[1]  ?  sub_text    = init_array[1]  :  sub_text    = def_sub_text
init_array[2]  ?  color_array = init_array[2]  :  color_array = def_color
init_array[3]  ?  width       = init_array[3]  :  width       = def_width
init_array[4]  ?  height      = init_array[4]  :  height      = def_height
## End of setting defaults numerals.

```
　
とここまで書いて思ったけど列挙しないほうがわかりやすいのかな…？
or maybe this is much better, using ```each```...?

```rb:type3

arr1 = [main_text, sub_text, color_array, width, height]
arr2 = [def_main_text, def_sub_text, def_color, def_width, def_height]

init_array.length.times do |num|
  init_array[num] ? arr1[num] = init_array[num]  :  arr1[num] = arr2[num]
end

```
EC2 Ubuntu 14.04がStatus 1/2のまま起動しなくなる

詳しい原因は不明なのですがUbuntu14.04でStop/Start後にステータスが1/2のまま戻らなくなる事象が発生したのでメモ
## 現象
CloudFormationを利用してUbuntu14.04を起動する際にStatus 1/2のままになりSSHログインが出来ない

作成時のSyslog

```
[    6.428130] xenbus_probe_frontend: Waiting for devices to initialise: 25s...20s...15s...10s...5s...0s...

[   36.332082] 235s...230s...225s...220s...[   52.932134] random: nonblocking pool is initialized

215s...210s...205s...200s...195s...190s...185s...180s...175s...170s...165s...160s...155s...150s...145s...140s...135s...130s...125s...120s...115s...110s...105s...
```

Stop/Start時のSyslog

```
cloud-init-nonet[284.14]: waiting 120 seconds for network device
cloud-init-nonet[404.15]: gave up waiting for a network device.
Cloud-init v. 0.7.5 running 'init' at Thu, 20 Nov 2014 04:24:16 +0000. Up 404.30 seconds.
ci-info: +++++++++++++++++++++++Net device info++++++++++++++++++++++++
ci-info: +--------+-------+-----------+-----------+-------------------+
ci-info: | Device |   Up  |  Address  |    Mask   |     Hw-Address    |
ci-info: +--------+-------+-----------+-----------+-------------------+
ci-info: |   lo   |  True | 127.0.0.1 | 255.0.0.0 |         .         |
ci-info: |  eth0  | False |     .     |     .     | 00:00:00:00:00:00 |
ci-info: +--------+-------+-----------+-----------+-------------------+
ci-info: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!Route info failed!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
```

## 原因
cloud-initのバグらしい  
ネットワークの有効化が出来ていない？

## 回避策

発生した場合はAMI化し、別インスタンスとして立てることが可能

/etc/network/interfaces へ以下を追記

```
auto eth0
iface eth0 inet dhcp
```
以下をコメントアウト

```
# source /etc/network/interfaces.d/*.cfg
```

設定後に再度Stop/Startを実行する


※Syslogを追記
vim備忘

* vim

*.vimrc*
>set concoding=utf-8
>set fileencodings=iso-2022-jp,euc-jp,sjis,utf-8
>set textwidth=70 #70文字改行用
>set formatoptions+=mM #70文字改行用
>imap `<c-j> <esc>` #Escの代用

* 便利だなと感じだやつ

.(繰り返し) 
ドットは偉大。

Ctrl+a,Ctrl+x
数値の加算、減算

* メールで引用返信するときにやる方法

あとで書く。

* 使うやつ

R
デザイン勘は毎日の習慣から

習慣付けすることで、デザイン勘を身につけよう！
たくさん見て、触れるのが近道。

## ニュース

1. [Sidebar](http://sidebar.io/)
* [Explore today on GitHub](https://github.com/explore)
* [Designer News](https://news.layervault.com/)


朝1でSidebarをチェックするのが楽しみ。
Githubはフロントエンドで面白そうなものにスターをつける。
Designer Newsはトレンド確認、記事が多いので時間があれば確認。

## スクラップ
1. [designspiration](http://designspiration.net/)
2. [dribbble](https://dribbble.com/)
* [Straightline Bookmark](http://bm.straightline.jp/)
* [muuuuu.org](http://muuuuu.org/)

designspirationは文字入力で検索ができるので好き。
dribbbleはクオリティが高い作品が多いが、dribbble臭さみたいなものがあり、影響されすぎないように眺める。
Webサイトはアニメーションが楽しいものを集める。

## シェア
1. [Tumblr](http://7chair.tumblr.com)

世界中の素敵なアイデアをリブログ。
UICollectionViewにヘッダーを付ける方法がわかった

[UICollectionViewにヘッダー、フッターを付ける方法がわからない](http://qiita.com/hanoopy/items/7f391b45745978c020cd)
↓
わかった。
ViewControllerに、「referenceSizeForHeaderInSection」を引数に取るcollectionViewメソッド（ヘッダーのサイズを返す）を設定すると表示される。

![キャプチャ](http://i.gyazo.com/6c90f0bd285c67d289e66b9a2bd90785.png)
（車の写真表示とか、大部分は他の方が作ったプログラムです）

【ヘッダーに関わる部分のコードだけ抜粋】

```swift:ViewController.swift
    // ヘッダーを表示する
    override func collectionView(collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, atIndexPath indexPath: NSIndexPath) -> UICollectionReusableView {
        var header : MySupplementaryView? = nil
        if (kind == UICollectionElementKindSectionHeader) {
            header = collectionView.dequeueReusableSupplementaryViewOfKind(kind, withReuseIdentifier: "MyHeader", forIndexPath: indexPath)
             as? MySupplementaryView
            header?.headerLabel.text = "Car Image Gallery"
        }
        return header!
    }
    // ヘッダーのサイズを設定する
    func collectionView(collectionView: UICollectionView, layout collectionViewLayout: MyFlowLayout, referenceSizeForHeaderInSection section: Int) -> CGSize {
        var size = CGSize(width: 400, height: 50)
        return size
    }
```

### ソース
こちらにアップしました。
https://github.com/hanoopy/swift-collectionview

### その他
* 行列のある表を作ろうと思った時に、UITableViewでもできるのかと思っていたが、できないみたい。Table=行のみ、Collection=行列あり。　名前の印象と違う。
* [Storyboardを使わずにUICollectionViewを使う](http://qiita.com/fmv830mt/items/4cf2385767be53d2e3e7) こちらをSwiftでやってみたが、コメントに書かれている通り実行エラーになるし、headerReferenceSizeを設定してもヘッダーは表示されない。
面倒な xcassets を一発で生成するスクリプト

# 概要

Images.xcassets を作成するのが面倒だ。
1x 2x 3x と 3 パターンも用意しなければならない。つらい。
サイズを変換してくれるソフトは色々あるけどリサイズのためだけにいちいちアプリケーションを起動するのは億劫だ。
プログラマーならスクリプトで解決すべき。

# 用意

- ImageMagick をインストールする  
[ImageMagick: Convert, Edit, Or Compose Bitmap Images](http://www.imagemagick.org/)
- スクリプトを作成

```bash:gen_assets.sh
#!/bin/sh

for file in `ls -F org`; do
  file_name=`basename $file .png`
  echo "${file_name}から変換中..."
  cp org/${file_name}.png conv/${file_name}@3x.png
  convert -geometry 33.333% org/${file_name}.png conv/${file_name}.png
  convert -geometry 66.666% org/${file_name}.png conv/${file_name}@2x.png
done
```

- 作業フォルダの作成  
以下の構成で作業用のフォルダを用意。`org` フォルダに 3x の画像を置いておく。  
  
  ```
.
├── conv
├── gen_assets.sh
└── org
    └── tab_bg.png
```


# 実行



```bash
sh ./gen_assets.sh
```

これで conv フォルダに画像が生成されます。

```bash
.
├── conv
│   ├── tab_bg.png
│   ├── tab_bg@2x.png
│   └── tab_bg@3x.png
├── gen_assets.sh
└── org
    └── tab_bg.png
```

# 終わりに

もっといい方法ある気がする...

# 追記

ベクター形式とやらで用意すれば 1 つのサイズでいいらしい。
（takabosoft さんありがとうございます）


- [[Xcode 6] Asset Catalog でベクターが扱えるようになりました！ ｜ Developers.IO](http://dev.classmethod.jp/references/xcode-6-asset-catalog-vector/)
- [Xcode6からベクター画像が使いやすくなった - 自堕落なぺぇじ](http://d.hatena.ne.jp/corrupt/20140925/1411636568)
- [Xcode 6で利用可能になった ベクター画像リソースを 深掘り](http://www.slideshare.net/mono0926/lt-yahoo)

次はベクター画像をどうやって作るのか調べるか。。。
半透明でも見やすいかもしれないvim color scheme

vimのcolorschemeは世の中に大量にあります。
自分も色々参考にさせていただきながら試してみてました。

[nanotech/jellybeans.vim](https://github.com/nanotech/jellybeans.vim)
[w0ng/vim-hybrid](https://github.com/w0ng/vim-hybrid)
[altercation/vim-colors-solarized](https://github.com/altercation/vim-colors-solarized)
[chriskempson/tomorrow-theme](https://github.com/chriskempson/tomorrow-theme)

とはいえ、黒背景に設定している方向けに、彩度が抑えめのschemeが多いように思います。

自分はターミナルの設定を半透明にしていたため、黒背景を前提としているcolorschemeだと、全体的に濃淡の差が少ない見た目になってしまい、濃淡がはっきりしているschemeがいいのかな、と。

# 半透明でも見やすいのは無いものか
まぁ、見やすいっていうのは主観や開くファイルタイプによって変わったりするので、絶対的なものはないのですが、
ひとまず、彩度が高めで、くっきりしたschemeを何個か試してみました。

## elflord
まずはデフォルトで入っているcolor schemeの中から、濃淡がはっきりしているschemeを一つ。

デフォルトのcolorscheme一覧は、下記のサイトで見れます
[デフォルトでインストールされている — 名無しのvim使い](http://nanasi.jp/colorscheme/default_install.html)

![elflord.png](https://qiita-image-store.s3.amazonaws.com/0/25890/f878dcb3-5c4f-e193-dce9-6a4f90b49158.png)
※ iTerm2で、70%ぐらいの透過度（30%というのだろうか。。？）。Macデフォルト背景です。

## koehler
もう一つ、デフォルトで入っているcolor scheme。

![koehler.png](https://qiita-image-store.s3.amazonaws.com/0/25890/03f2fc55-7524-cfab-84da-f4dc1cdd308a.png)

## molokai
今度はデフォルトでは入っていないです。
githubに公開されているので、入れてみましょう。

[tomasr/molokai](https://github.com/tomasr/molokai)

```lang:.vimrc
" color scheme
NeoBundle 'tomasr/molokai'

" ------------------------------------
" colorscheme
" ------------------------------------
syntax on
colorscheme molokai

" iTerm2で半透明にしているが、vimのcolorschemeを設定すると背景も変更されるため
highlight Normal ctermbg=none
```

最後の一行は、molokai内で、

```
set background=dark
```

されていて、それで文字部分がやや明るくなるのを押さえています。
これは、好みがあるので、消してもいいと思います。

![molokai.png](https://qiita-image-store.s3.amazonaws.com/0/25890/ac94ec00-ca90-26b6-8bf7-57763a3344db.png)

## badwolf
名前がかっこいい

[sjl/badwolf](https://github.com/sjl/badwolf)

```
" color scheme
NeoBundle 'sjl/badwolf'

" ------------------------------------
" colorscheme
" ------------------------------------
syntax on
colorscheme badwolf
highlight Normal ctermbg=none
```

![badwolf.png](https://qiita-image-store.s3.amazonaws.com/0/25890/f1f9ec0f-9971-a025-5751-e15511c1070f.png)

## 参考
vim colorscheme のgalleryが見れる素敵なサイト
[Vim Colorscheme Gallery](http://cocopon.me/app/vim-color-gallery/)

その他

- [デフォルトでインストールされている — 名無しのvim使い](http://nanasi.jp/colorscheme/default_install.html)
- [[vim] 黒背景好きの僕の心を揺さぶるカラースキーム「hybrid」 | ここぽんのーと](http://cocopon.me/blog/?p=841)
CentOS6にNode.js環境を構築


サーバーサイドJavaScriptエンジンの本命、Node.jsの環境構築手順

```shell-session:EPELリポジトリを追加
sudo rpm -ivh http://ftp.iij.ad.jp/pub/linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
```

```shell-session:nodejsとnpmをインストール
sudo yum -y install nodejs npm --enablerepo=epel
```

```shell-session:バージョン確認
$ node -v
v0.10.32
$ npm -v
1.3.6
```

```shell-session:HelloWorld
$ vi hello.js
```

```javascript:hello.js
console.log("hello world");
```

```shell-session:hello.jsの実行
$ node hello.js
hello world
```
[Rails 4.1] Rails でベーシック認証をかける

#はじめに
ステージング環境や、公開前の制限がついて本番環境などでは、アクセス制限をかけたいときもあるかと思います。
いろんな認証方法があるかと思いますが、簡単な方法にベーシック認証があります。

#方法

以下を追記。

```rb:application_controller.rb
http_basic_authenticate_with :name => ENV['BASIC_AUTH_USERNAME'], :password => ENV['BASIC_AUTH_PASSWORD'] if Rails.env == "production"
```

Rails.envのところは、ベーシック認証をかけたい環境（dev, stage, prodなどなど）を指定します。

ENV['BASIC_AUTH_PASSWORD']などは直書きでも大丈夫ですし、rails_configとかfigaroとか使ってもいいですし、環境変数でも実装できます。

* herokuの環境変数のいじり方などは[こちら](http://qiita.com/tsumekoara/items/18db3c97734f32ebdfde)にメモが

* Railsでの定数管理やCentOSの環境変数のいじり方などは[こちら](http://qiita.com/tsumekoara/items/78824fc33d21a164d3a6)にメモが
MySQL の root パスワード忘れた時


##MySQL止める
```bash
sudo /etc/init.d/mysqld stop
```

##セーフモードで起動
```bash
sudo mysqld_safe --skip-grant-tables &
```

##つなぐ
```bash
mysql -uroot
```

##再設定
```mysql
use mysql
update user set password=PASSWORD("ここにパスワードを記述") where User='root';
flush privileges;
```

##起動
```bash
sudo /etc/init.d/mysqld stop
sudo /etc/init.d/mysqld start
```
AndroidでORMLiteを使うなら、_idカラムは不要かも。

AndroidでSQLiteを使うならば、テーブルに「_id」というカラムを付けた方が良いらしい、とここに書いてあるんですが、
http://monoist.atmarkit.co.jp/mn/articles/1209/21/news003.htmlRMLite

ORMLiteを使ってDBアクセスを行うならば、必要無いと思われます。むしろ邪魔です。

例えば、以下のようなコードを想定します。
これはエンティティの更新もしくは追加を行う処理です。

```
//エンティティを生成する。
HogeEntity hogeEntityInstance = new HogeEntity();

/*このあたりでHogeEntityのデータをいろいろ格納する。*/

//更新もしくは追加
ORMDatabaseHelper helper = new ORMDatabaseHelper(context);
Dao<HogeEntity, Long> dao = helper.getDao(HogeEntity.class);
dao.createOrUpdate(hogeEntityInstance);
helper.close();
```

本来は、同じIDを持つエンティティが格納された場合、updateが走るはずです。
しかし「\_id」フィールドをPrimary keyとしたテーブルの場合、必要なデータとは別に_idの値を格納する必要があります。

仮に「\_id」を(generatedId = true)にしちゃってた場合、事前に一旦検索して_idを特定してからでないとupdateが動作しない事になります。というか私がやってしまいました。

というわけでormliteを使っている限り、「\_id」フィールドは作らない方が良いと思います。
dockerコマンド集


覚えられないのでメモ

##イメージダウンロード

```
$ docker pull {REPOSITORY}:{TAG}
```

##コンテナ確認

起動中のコンテナ

```
$ docker ps
```

全てのコンテナ

```
$ docker ps -a
```

##コンテナ作成＆接続

```
$ docker run -i -t -name {NAME} {REPOSITORY} /bin/bash
```

##コンテナ切断

Ctl + p → Ctl + q

__Ctl + D や exit　で抜けると変更は全て破棄されます。__
↑ホントに？？コンテナ起動しなおすと残ってるけど・・・


##コンテナ起動

```
$ docker start {CONTAINER ID}
```

##コンテナ接続
```
$ docker attach {CONTAINER ID}
```

##コンテナ停止

```
$ docker stop {CONTAINER ID}
```

##コンテナからイメージ作成

```
$ docker commit {CONTAINER ID} {REPOSITORY}:{TAG}
```

##すべてのコンテナ削除

```
$ docker rm `docker ps -a -q`
```

##イメージ削除

```
$ docker rmi {IMAGE ID}
```
docker_registry構築@boot2docker


__boot2docker上のファイルシステムだと再起動で消えるので修正(2014/11/21)__

社外公開しないimage保存用にprivate registryを作る
1.3.1から認証のセキュリティがごにょごにょしてるのでinsecureオプションつけて回避


## boot2dockerの設定変更
1\. boot2dockerにsshログイン

```
$ boot2docker ssh
```

2\. profile作成

```
$ sudo vi /var/lib/boot2docker/profile
 EXTRA_ARGS="--insecure-registry localhost:5000" 
```

3\.dockerサービス再起動

```
$ sudo /etc/init.d/docker restart
$ exit
```


## 構築
1\. イメージのダウンロード

```
$ docker pull stackbrew/registry
Status: Downloaded newer image for stackbrew/registry:latest
```

2\.コンテナ作成
__下記に注意__
* ポートフォワードされるように指定（下記例だと5000番）
* データ保存用にディレクトリをマウントするが、boot2dockerのディスクは再起動で初期化されるので、Macのディレクトリを指定(/Users配下）

```
$ docker run --name registry -d -p 5000:5000 -v /Users/Shared/docker/registry:/tmp/registry stackbrew/registry
28e864f9d8dfee26f2144f4cf0eb4f776faad1705517a1ff771bb1162c942218
```


3\.コンテナの確認

```
$ docker ps
CONTAINER ID        IMAGE                       COMMAND             CREATED             STATUS              PORTS                    NAMES
28e864f9d8df        stackbrew/registry:latest   "docker-registry"   32 seconds ago      Up 32 seconds       0.0.0.0:5000->5000/tcp   registry            
```

## 試しにpushしてみる
image id を特定して、タグ付けして、アップロード

```
$ docker images
アップロードしたいimageのimage idを参照
$ docker tag 717a08ce5a08 localhost:5000/kibana4
$ docker push localhost:5000/kibana4
```


## 確認
ちゃんとファイルが格納されたかboot2docker内で確認

```
$ boot2docker ssh
$ ls -l /Users/Shared/docker/registry/repositories/library/
total 0
drwxr-xr-x    2 root     root           100 Nov 19 23:21 centos5/
drwxr-xr-x    2 root     root           120 Nov 19 22:54 kibana4/
```

おわり
コマンドを実行して出力を処理する exec.Command()

```go
import "os/exec"
```
しておいて、

```go
cmd := exec.Command("ls", "-l", ".")
output, err := cmd.Output()
if err != nil {
  log.Fatal(err)
}
println(string(output))
```
- func (c *Cmd) Run() error - コマンドの終了を待つ
- func (c *Cmd) Start() error - コマンドの終了を待たない

- func (c *Cmd) Output() ([]byte, error) - 標準出力を[]byteにまとめて返す
- func (c *Cmd) CombinedOutput() ([]byte, error) - 標準出力と標準エラー出力を[]byteにまとめて返す
vimを使ったErlang開発

<br/>
# [こちらの投稿をどうぞ。[Erlang 開発専用 Vim 設定]](http://qiita.com/yuitowest/items/ce0b419828ee48603bb8)
<br/>
<br/>
<br/>
<br/>

----

# このドキュメントは…

**このドキュメントは現在書きかけです。**
**2014年12月の初旬には仕上げたいと思っています。**

# vim-erlang

NeoBundleで以下のライブラリを入れればOK。

| ライブラリ名 | 概要 | 便利度 |
|---|---|:---:|
| vim-erlang/vim-erlang-runtime | シンタックスとハイライト | 5 |
| vim-erlang/vim-erlang-omnicomplete | オムニ補完 | 4 |
| vim-erlang/vim-erlang-tags | タグジャンプ | ? |
| vim-erlang/vim-erlang-compiler |   | ? |
| vim-erlang/erlang-motions.vim |  | ? |
| vim-erlang/vim-rebar | vim内でrebarコマンドが実行できるようになる | 2 |
| vim-erlang/vim-dialyzer | vim内でdialyzerのコマンドが実行できるようになる | 2 |
| vim-erlang/vim-erlang-skeletons | テンプレートを呼べる | 2 |

# vimの再コンパイル

上記設定を入れるとvimの再コンパイルが必要になる場合がある（特にif_luaとpython）。

その時のconfigureのオプションは以下のとおりである。

```bash
sudo ./configure --enable-multibyte --with-features=huge --disable-selinux --prefix=/usr/local --enable-luainterp=yes --with-lua-prefix=/usr --enable-pythoninterp
```

# 設定

```vim
" erlangのシンタックスハイライト
NeoBundle 'vim-erlang/vim-erlang-runtime'
" erlangのオムニ補完
NeoBundle 'vim-erlang/vim-erlang-omnicomplete'

""""" erlang用設定 """"""""
" erlファイルをerlangとして認識する
au BufNewFile,BufRead *.erl setf erlang
au FileType erlang setlocal errorformat=%f:%l:\ %m

" オムニ補完を<C-f>で
imap <C-f> <C-x><C-o>
```

# 参考
1. [vim-erlang@github](https://github.com/vim-erlang/)
2. [参考設定@gist](https://gist.github.com/sifue/11370099)
    * vim-erlang/vim-erlang-runtime
    * vim-erlang/vim-erlang-omnicomplete

# 表題には全然関係ないが、改めて設定ファイルを作るときに知ったこと

## キーバインドの確認

```vim
:help index.txt
```

で現在割り当てられているキーの一覧を取得できる。
Oracle11g XEをインストールするときの注意点

## Oracle11g XEのいいところ

Oracle11g XEは無償で手軽にOracleのデータベースが利用できるエディションで、お試しでOracleのデータベースを使えます。インストール作業も極めて単純なオペレーションで完了します。
インストール後はすぐにデータベースの利用が可能で、WebアプリケーションからOralceのJDBCドライバを使って動作させることも可能です。また、簡易的なWebベースの管理コンソールも同時にインストールされます。

## インストール時の問題点

Oracle11g XEをインストールする際、以下の不具合（仕様）があります。

+ 管理コンソールはポート8080で固定。

ちなみにこのポート番号は、インストーラ（ないしはサイレントインストール時の設定ファイル）で変更できるようになっていますが、なんと **これは正しく動作せず、ポート8080を使って インストールを試行します。** 
そのためポート8080を使っているアプリケーションないしはサービスがある場合は、事前に止めないとインストールが進みません。
***
Tomcatや、Jenkins、Nexusなどなど…よくありますよね(´・ω・`)

## インストール後に管理コンソールのHTTPポートを変更する

ではこのポート番号は変更できず、泣く泣く他の既存サービスのポートを変更しなければならないのか…？
そんなことはなく、 **ポート番号を変更するストアドプロシージャが存在します**

隠しコマンド…(´・ω・`)？

ストアドプロシージャを実行するには、すべてのプログラム＞Oracle Database 11g Express Edition＞SQLコマンドラインの実行 を選び、以下のように実行します。

```text

SQL*Plus: Release 11.2.0.2.0 Production on 木 11月 20 09:58:41 2014

Copyright (c) 1982, 2014, Oracle.  All rights reserved.

SQL> connect
ユーザー名を入力してください: system
パスワードを入力してください: ********
接続されました。
SQL> exec dbms_xdb.sethttpport(18080)

PL/SQLプロシージャが正常に完了しました。
```

+ このプロシージャはOracleデータベースないしはその他Oracle関連のサービスは停めずに実行可能です。
+ プロシージャ実行後、自動的に管理コンソールの再起動が行われます。

## Oracle管理コンソールに関するショートカットの変更

以上で管理コンソールのポートは変更できましたが、インストール時に作成された管理コンソールのショートカットには依然ポート8080の記載が残っていますので、これを編集しておきましょう。

上記の例では、18080に変更しています。
モーダルのSegue.identifier でエラーが出る時の対処策

# 課題

モーダルを追加したら、下記のようなコードでエラーが出るようになりました。

```swift
if segue.identifier == "ShowDetail” {
  // 処理
}
```

# 解決策

モーダルだと「Identifier 」がいらないと思っていたんですが、Swfit ではなのか、XCode 6では必要になるようです。

# 参考

* http://stackoverflow.com/questions/25681427/xcode6-beta7-prepareforsegue-throws-exc-bad-access:title
最近のEmacs + WanderlustでUTF8(丸囲み数字など含む)メールを送るときの設定

丸囲み文字が含まれてるのになんでISO-2022-JPなんだよ！とかそういうことはもう言ってもしょうが無いので、gmail辺りから送られてくるUTF-8なメールに正しく返信できるように設定しましょう。
基本的にはcp50220というコードに対応すればいい模様。

なお、このページの内容はほとんど末尾に記載の参考URLのページの通りですが、portmasterでアップデートしたときにすっかり忘れててド嵌まりしたので自分用のメモです。

# まずはcp50220に対応

[cp5022x.el](https://github.com/awasira/cp5022x.el)をインストールします。load-pathの通ったところにそのまま置くだけでいいかと思います。

あとは.emacs(最近は.emacs.d/の下にファイルを置くのがいいんですかね?)でset-language-environmentしているところの下で

```shell-session
(require 'cp5022x)
```

とします。
さらに、.wlに以下を追加。

```shell-session
(add-to-list 'mime-charset-coding-system-alist '(iso-2022-jp . cp50220))
```

# flimにパッチ

上記だけだと、多分UTF8なメールに返信したときの文字化けします。どうも最新のflimのバグらしいので、以下のパッチを適用。

[https://github.com/awasira/cp5022x.el](https://github.com/awasira/cp5022x.el)

FreeBSDでports使ってる人なら

```shell-session
#cd /usr/ports/editors/flim
#make patch
#cd work/flim-*
#(パッチ当てるか手動でmel-q-ccl.elをエディット)
#cd ../../
#make install clean
```

とでもすればOK。portmasterでアップデートする度にやるのは面倒なのでローカルパッチで置いておくとかするといいんでしょうけど、やり方調べてません。いずれ追記するかも。

# emacsの再起動

あとはemacs再起動したらめでたしめでたし。

参考:[Wanderlustと文字コード](http://article.gmane.org/gmane.mail.wanderlust.general.japanese/5978)
windowsのPHP5.4にimagemagickをインストールして動かなかったときに確認したいこと

# 前提

* windows7 64bit
* PHP5.4 32bit

# 最新版では動かない

* 最新のImagemagick（2014/11/18現在 ImageMagick-6.9.0-0-Q16）とPECL3.1.2（もしくは3.2.0b）をインストールすると、にっくきこの画面が出ます。

![imagemagick.png](https://qiita-image-store.s3.amazonaws.com/0/37007/6d79f97f-c80b-e30d-8b5d-f197c37b7228.png)


# Imagemagickありきではなく、PECLありき

* WindowsのPHP5.4に対応したPECL Imagick（3.1.2）は`php_imagick-3.1.2-5.4-ts-vc9-x86`です。
* 最新のImagemagickはこれに対応していないので、これに対応したImagemagickを探さないといけない。
* ただし、ImagemagickのWindowsバイナリは基本的に最新版しかない。

ではVC9に対応したImagemagickがどこにあるかというと、
> http://windows.php.net/downloads/pecl/deps/

にあります。
ワオ。モロにWindowsのPHPのための場所ですね。

> ImageMagick-6.8.9-1-vc9-x86.zip

が求めているものです。
無事にっくきあの画面が消えました。

# まとめ

WindowsでPHP（5.4）でImagemagickを使う場合、コンパイラのバージョンを確認する。

# 補足

ImageMagick-6.8.9-1-vc9-x86.zipにはインストーラーはないので、自分でパスを通す必要があります。
ファイルがどのRPMパッケージに含まれるかを知るには

## ファイルがどのRPMパッケージに含まれるかを知るには

参考: [ファイルがどのRPMパッケージに含まれるかを知るには](http://www.turbolinux.com/support/document/knowledge/549.html)

-qf オプションを使う。

```bash:
% rpm -qf `which runlevel`
systemd-208-11.el7_0.4.x86_64
```

## rpmパッケージがどのホストでビルドされたか確認

```
rpm -qi パッケージ名
```
Vagrant上にインストールしているPHPUnitをPHPStormから実行する


PHPStorm8.1で実施。

PHPStorm8からVagrantでインストールしているphpunitを実行出来るようになったそうで、公開されている記事を参考に設定した手順を忘れないようにメモ。

だいぶ簡略化しているので、初めて設定する場合には向かないかもしれません。

##・Interpreterの設定

1.設定画面でPHP > Interpreterの横、[...]を押下

2.Interpreterダイアログが表示されるので左上の[+]を押下、Remoteを選択

3.Configure Remote PHP Interpreterダイアログが表示されるのでVagrantを選択する

4.Vagrant Instance Folderを設定し[OK]を押下してダイアログを閉じる

5.Interpreterが設定されていることを確認

##・PHPUnitの設定

1.設定画面でPHP > PHPUnitの左上、[+]を押下、By Remote interpreterを選択する

2.Interpreterに登録したRemote PHP 5.5を設定する

3.Use custom autoloaderを選択する

4.Path to scriptにComposerのオートローダーのパスを指定

5.Default Configuration fileにphpunit.xmlのパスを設定

##・Edit Configurationsの設定

1.メニュー > Run > Edit Configurationを選択する

2.左上の[+]を押下し[PHPUnit]を選択する

3.Nameに任意の名前を付ける

4.Test scopeでDefined in the configuraion fileを選択する

5.Runを実行してテストが開始されればOK
WatchKitで気になったところ


先日リリースされたWatchKitを使ってみて気になったところをまとめました。

### 単独で動作するWatchアプリは作れない
サードパーティの開発者はiOSデバイスと連携するアプリしか作れないとのこと。
データの処理をiOSアプリで行って、表示をWatchアプリで行う、という役割分担のようです。

### センサーは使えない
現状ではアクセスできません。

### ビルド設定の方法
公式のProgramming Guideに書いてあります。
[WatchKit Programming Guide > Overview > Configuring Your Xcode Project](https://developer.apple.com/library/prerelease/ios/documentation/General/Conceptual/WatchKitProgrammingGuide/ConfiguringYourXcodeProject.html#//apple_ref/doc/uid/TP40014969-CH2-SW1)

Watchアプリの開発を始めるには、iOSアプリのプロジェクトにWatchアプリを追加する必要があります。
iOSアプリと連携するアプリしか作成できないのが理由だと思います。

### iOS SimulatorでWatchアプリを表示する方法
iOS Simulatorメニューから

```Hardware > External Display > Apple Watch - 38mm (または42mm)```

### Glance / Notification を動かす方法
公式のProgramming Guideに書いてあります。
[WatchKit Programming Guide > Overview > Configuring Your Xcode Project](https://developer.apple.com/library/prerelease/ios/documentation/General/Conceptual/WatchKitProgrammingGuide/ConfiguringYourXcodeProject.html#//apple_ref/doc/uid/TP40014969-CH2-SW1)

>To configure custom build schemes for your glances and notifications

Schemeを複製して、実行ファイルを変更すればOK。
dockerでcentos5.x系のコンテナ作成


1\. 適当なimageを探す

```
# docker search centos5
```

2\.手順1で探したimageをダウンロードする

```
# docker pull fatherlinux/centos5-base
```

3\.ダウンロードしたimageを確認する

```
# docker images
fatherlinux/centos5-base   latest              09a12fae6313        8 months ago        1.139 GB 　←手順2でpullしたイメージ
```

4\. コンテナを作成する

```
docker run -i -t -name cent5 fatherlinux/centos5-base /bin/bash
```

5\.確認

```
# cat /etc/redhat-release 
CentOS release 5.10 (Final)
```

おわり
bashのSRPMからのビルド


・shellshock対応でRHEE5のi686環境用のrpmがなかったのでSRPMから作成する手順
・実行環境は64bit centos5のdockerコンテナ

## ビルド環境構築
1\. rpm-buildのインストール

```
# yum install rpm-build
```
依存するパッケージも一緒にインストールされます。

2\.mockのインストール

```
# yum install mock
# useradd -s /sbin/nologin mockbuild
```

3\.buildに必要そうなパッケージ一式インストール

```
# yum groupinstall "Development Tools"  
# yum install libtermcap-devel
```

4\.32bit用のglibc-develインストール

```
# yum install glibc-devel.i386
```

## ビルド

1\. srpmをダウンロード

```
# cd /usr/src/redhat/SRPMS
# wget ftp://ftp.pbone.net/mirror/ftp.redhat.com/pub/redhat/linux/enterprise/5Server/en/os/SRPMS/bash-3.2-33.el5_11.4.src.rpm
```

2\.アーキテクチャ指定でビルド

```
# CC='gcc -m32' CXX='g++ -m32' linux32 rpmbuild --rebuild --target=i686 bash-3.2-33.el5_11.4.src.rpm 
```

3\.成果物確認

```
# ls -l /usr/src/redhat/RPMS
total 3164
-rw-r--r-- 1 root root 1887161 Nov 19 11:38 bash-3.2-33.4.i686.rpm
-rw-r--r-- 1 root root 1350536 Nov 19 11:38 bash-debuginfo-3.2-33.4.i686.rpm
```


おわり
composer.jsonでPHPUnitをインストール


#インストール手順

composer.jsonのrequire-devに以下を追加

```js:composer.json
{
    "require-dev": {
        "phpunit/phpunit": "4.3.*"
    }
}
```

##インストール！
```$ composer install --dev
```

##インストールされているか確認
```$ vendor/bin/phpunit --version
PHPUnit 4.3.5 by Sebastian Bergmann.```

##テストを書いてみる

```php:PracticeTest.php
<?php

class PracticeTest extends PHPUnit_Framework_TestCase {
    public function testHelloWorld()
    {
        $message = 'Hello, World!';

        $this->assertTrue($message === 'Hello, World!');
    }
}
```

##テスト開始
```
$ vendor/bin/phpunit tests
PHPUnit 4.3.5 by Sebastian Bergmann.

.

Time: 107 ms, Memory: 2.75Mb

OK (1 test, 1 assertion)
```
指定したマイナーモードを表示しない

> もうちょっと良い方法もあります ヾ(〃＞＜)ﾉﾞ
> [指定したマイナーモードを表示しない(diminish篇) - Qiita](http://qiita.com/tadsan/items/c859c5c04724cbda75fc)

いろいろなEmacs Lispをインストールしてると、モードラインのマイナーモード一覧が長くなって困る。[Helm](https://github.com/emacs-helm/helm)や[undo-tree](http://www.emacswiki.org/UndoTree)なんかの常に有効になってることが多いようなモードは、一覧に表示されても作業中は特に有用ではないの消したい。

![mode-line-before](https://qiita-image-store.s3.amazonaws.com/0/4121/637159d6-7be8-f5fd-4d40-2853c5221dc7.png)

`.emacs`ファイルに、こんなことを書いておくと良い。

```init.el
(setq my/hidden-minor-modes
      '(undo-tree-mode
        eldoc-mode
        auto-complete-mode
        magit-auto-revert-mode
        abbrev-mode
        helm-mode))

(mapc (lambda (mode)
          (setq minor-mode-alist
                (cons (list mode "") (assq-delete-all mode minor-mode-alist))))
        my/hidden-minor-modes)
```

![mode-line-after](https://qiita-image-store.s3.amazonaws.com/0/4121/d59d0ebd-5360-1de7-8dee-d35c791f4b23.png)

短かくなった。いいですね。

[dash.el](https://github.com/magnars/dash.el)が有効な場合はもっと短く書ける。

```init.el
(--each my/hidden-minor-modes
  (setq minor-mode-alist
        (cons (list it "") (assq-delete-all it minor-mode-alist))))
```

簡潔で良い。
Android 5.0 で LVL が正常動作しない問題の対処

Android 5.0(Lollipop) で LVL (License Verification Library) が正常動作しない問題への対処方法についてメモ。
本不具合は compileSdkVersion を 21 以上にしている場合に出ます。それ以下の場合は出ません。

Android 5.0 からは、暗黙的 Intent を使用してサービスに bind できなくなりました。
LVL は内部で暗黙的 Intent を使っており、これが正常動作しません。
(ライセンスチェック時に IllegalArgumentException が throw されてしまいます)

具体的には LicenseChecker.java の以下の処理です。

    boolean bindResult = mContext
        .bindService(
            new Intent(new String(Base64.decode("Y29tLmFuZHJvaWQudmVuZGluZy5saWNlbnNpbmcuSUxpY2Vuc2luZ1NlcnZpY2U="))),
            this, // ServiceConnection.
            Context.BIND_AUTO_CREATE);

ここは以下のようにしなければなりません。

    Intent intent = new Intent(new String(Base64.decode("Y29tLmFuZHJvaWQudmVuZGluZy5saWNlbnNpbmcuSUxpY2Vuc2luZ1NlcnZpY2U=")));

    // 明示的にパッケージ名を指定する。
    intent.setPackage("com.android.vending");

    boolean bindResult = mContext
        .bindService(
            intent,
            this, // ServiceConnection.
            Context.BIND_AUTO_CREATE);
FacebookのJavaScript SDKでバージョンを1.0から2.xに上げたらAPIが叩けなくなった人へ

Graph APIのバージョンを1.0から2.xに上げた途端、[なんか動かなくなって](http://dic.nicovideo.jp/a/%E4%BD%95%E3%82%82%E3%81%97%E3%81%A6%E3%81%AA%E3%81%84%E3%81%AE%E3%81%AB%E5%A3%8A%E3%82%8C%E3%81%9F)困ってる人へ。
もしかしたらFB.init()の「status」パラメータが原因かも？

>Determines whether the current login status of the user is freshly retrieved on every page load. If this is disabled, that status will have to be manually retrieved using .getLoginStatus(). Defaults to **true**.
*https://developers.facebook.com/docs/javascript/reference/FB.init/v1.0*

v1.0ではデフォルトがtrueだったのに…

>Determines whether the current login status of the user is freshly retrieved on every page load. If this is disabled, that status will have to be manually retrieved using .getLoginStatus(). Defaults to **false**.
*https://developers.facebook.com/docs/javascript/reference/FB.init/v2.2*

v2.xではこっそりfalseに変わっています。

```js
FB.init({
	appId: '123456789',
	version: 'v2.2',
	xfbml: true,
	status: true
});
```

認証が必要なAPIを叩く際には、上記のようにstatusを明示的に指定してあげるか、[FB.getLoginStatus()](https://developers.facebook.com/docs/reference/javascript/FB.getLoginStatus/)を使いましょう。
gitでdiff toolを指定してgit difftool -dしてもBad file numberする場合の対処

#概要
gitでdiffツールにWinMarge使おうと思ったらBad file numberしてはまったので...

#出るエラー
こんなん
> git difftool --dir-diff
>
> /libexec/git-core/git-mergetool--lib:
> line 121: D:\...\WinMarge.exe: No such file or directory
>
> fatal: 'difftool--helper' appears to be a git command, but we were not
> able to execute it. Maybe git-difftool--helper is broken?
>
> C:\Program Files\Git/libexec/git-core\git-difftool line 464: Bad file number

#何が悪いのか
.gitconfig
Windowsではユーザーのホームディレクトリにある。

> C:\Users\アカウント名\.gitconfig

修正する場合これをメモ帳で開く。
まぁNo such file or directory言われてるしパス周りです。

#原因１：パスの区切り文字
パスの区切り文字は\/ではなく\\で指定した方が良いのかもしれないが本当かどうか判らない。
怖いなら\\で指定する。

#原因２：文字コード
UTF-8で保存し直せばいい。
UTF-8で保存されてれば日本語フォルダ名が入ってても問題なし。

#原因３：ダブルクォーテーション
パスは必ずダブルクォーテーションで括る。
このとき\\をダブルクォーテーションの前につけ忘れがちなので注意。
\\も２つ並べないといけない事に注意。

> [difftool "WinMerge"]
>     path = \\"D:\\\\Tool\\\\WinMerge\\\\x86\\\\WinMergeU.exe\\"
>     cmd = \\"D:\\\\Tool\\\\WinMerge\\\\x86\\\\WinMergeU.exe\\" -r -u \\"\$LOCAL\\" \\"\$REMOTE\\"
XCodeのリファクタリングでThe selection is not a type that can be renamedが出る時の対処法

# XCodeのリファクタリングでThe selection is not a type that can be renamedが出る時の対処法
XCodeでリファクタリング（リネーム）をした時に「The selection is not a type that can be renamed」が出てリファクタリングが失敗する人の為の対処法です。
なんかDropbox経由で複数マシンで開発してる時に起きてる気がしますが、原因はよくわかりません。
## 1.XCodeを終了させる
## 2.~/Library/Developer/Xcode/DerivedDataを消す
Finderの「移動」-「フォルダへ移動」で上のパスを貼り付けてリターンで移動できます。
消すのが怖い人はbakDerivedDataとかにフォルダ名を変更してもOK。
## 3..xcodeproj/project.xcworkspace/xcuserdataを消す
このエラーが発生した開発中のプロジェクトを右クリックし、メニューから「パッケージの内容を表示」をクリック。
するとproject.xcworkspaceがあるので、再び右クリックし、メニューから「パッケージの内容を表示」をクリック。
xcuserdataを消す。
名前変更でもOK。
## 4..xcodeproj/xcuserdata/.xcuserdatadを消す
このエラーが発生した開発中のプロジェクトを右クリックし、メニューから「パッケージの内容を表示」をクリック。
xcuserdataフォルダ内のxxxxx.xcuserdatadを消す。
(xxxxxは開発ユーザ名)
名前変更でもOK。
## 5.macをリブートする
## 6.XCodeを起動する
この時点でXCodeは勝手にインデックスを作成し始めます。
## 7.Product -> Clean Build Folder
これでリファクタリングのリネームができるようになります(*◔ڼ◔)
CLaunchにコマンドプロンプトを設定してそこから起動させるとgitコマンドが使えない場合の対処

#概要
git for windowsをインストールしてコマンドプロンプトからgitを実行して動作確認が済んだ！さあやろう！
と意気込んでコマンドプロンプトをCLaunchに登録して使いやすくするも、いざランチャーに登録したコマンドプロンプトを実行してgitコマンドを打つとコマンドが見つからないと怒られる現象の解決方法。

#再起動する
治る。

終わり。

#追記
コメントに記載されていますがCLaunchの再起動のみで解決するようです！

#追記の追記
CLaunchの再起動のみで行けました！
画像ダウンローダ

<h1>Bash使ってとあるURL内にある画像をごっそりいただくツール。</h1>
* okazaki.sh
* download.sh
* clean.sh

cronで毎日20:00になったら本日分をdownload.shで頂戴する。
画像取得できなかった場合のゴミファイルはclean.shが削除する。
okazaki.shは上記2つのシェルをラップするシェル。
それぞれのサイト用にdownload.shを用意するのが今のところ楽かな。


オカザキ。後述のdownload.shとclean.shを実行。

```lang:okazaki.sh
#!/bin/bash

/Users/Hoge/test/download.sh
/Users/Hoge/test/clean.sh
```

実際に画像取得するシェル。
URL構成は適当に書いた。
システム日付(yyyymmdd)でその日のディレクトリを生成してそこに保存。

```lang:download.sh
#!/bin/bash

mkdir /Users/Hoge/test/`date '+%Y%m%d'`
cd /Users/Hoge/test/`date '+%Y%m%d'`
curl -O http://hoge.com/`date '+%y%m%d'`_[001-100].jpg
```

download.sh実行後、リンク先が存在しなかったらゴミファイルができるので
1000KB以下のファイルをclean.shで削除する。

```lang:clean.sh
#!/bin/bash

cd /Users/Hoge/test/`date '+%Y%m%d'`
files="./*.jpg"

for file in ${files}
do
  fileSize=`wc -c ${file} | awk '{print $1}'`
  if [ ${fileSize} -lt 1000 ]
  then
      rm -rf ${file}
  fi
done
```

毎日20:00に実行するようにcron設定しておく。

```lang:crontab
00 20 * * * /Users/Hoge/test/okazaki.sh
```

これで毎日オカザキの画像が自動でローカルに保存されまくるぞ！
SQLite3を試食する


一番簡単に試せるデータベース、SQLite3についてまとめます。
前半はおよその操作方法を説明して、後半は実例です。

## SQLiteの操作方法

###SQLをコマンドで実行する

```
>sqlite3 ファイル名 SQL文
```

###インタプリタモードで操作する

ファイル名だけを指定した場合、SQLiteはインタプリタモードに入って、入力したコマンドを対話的に実行する形式になります。

```
>sqlite3 ファイル名
```

インタプリタモードでは以下の様なコマンドを覚えておきましょう。
SQL以外は「.」が付いているので注意してください。

|コマンド|内容|
|-----|----|
|.table|テーブルを表示する|
|.schema テーブル名|テーブルのスキーマを表示する|
|.read ファイル名|保存しておいたSQL文を実行する(テンプレートを用意しておくと良い)|
|.exit|終了する|
|SQL文|SQL文を実行する|

なお、データベースのデータをインポート・エクスポートする際は、
[こちら](http://d.hatena.ne.jp/elm200/20071214/1197613850)のように、モードとアウトプット先を指定して実施します。

```
sqlite> .mode csv foo    // fooテーブルのモードをタブ区切りへ
sqlite> .output export.csv   // 出力先を "export.csv" ファイルに変更
sqlite> select * from foo; // fooテーブルの検索結果を出力
```

```
sqlite> .mode csv foo    // モードをタブ区切りへ
sqlite> .import export.csv foo // "export.csv" ファイルから読み込み fooテーブルへ
```

### データ型（長さ指定もできる）

|データ型名|データの内容|
|----|-----|
|NULL|NULL型|
|INTEGER|符号付整数|
|REAL|浮動小数点数|
|TEXT|テキスト|
|BLOB|バイナリ|

日付や時刻は文字列として保存する必要があります。

## 使用サンプル

ユーザーを保存するデータベースを作ってみましょう。
ユーザーにはIDと氏名、生年月日が入っているとしましょう。

まずはテーブルを作成する、SQL文を書いたファイルを作成します。

```create.sql
create table users
(
	id integer primary key,
	name text,
	birth text
);
```

となります。

では、user.sqliteというファイル名でデータベースを作成していきます。

```
>sqlite3 user.sqlite
```
とすると、user.sqliteファイルを作成しつつ、SQLiteがインタプリタモードに入って、SQLiteのプロンプトが出ます。

```
SQLite version 3.8.5 2014-08-15 22:37:57
Enter ".help" for usage hints.
```

ここで、先ほどのcreate.sqlファイルをインポートしてデータベースにテーブルを作成してみましょう。
正しければ入力プロンプトが戻ってきます。

```
sqlite>.read create.sql
sqlite>
```

では実際にテーブルが作成できたか見ておきます。
usersテーブルが作成できたのが確認できましたね。

```
sqlite>.tables
users
sqlite>
```
終了しましょう。

```
sqlite>.quit
```

こうして作ったデータベースは、ブラウザのFirefoxに含まれているSQLManagerツールで確認/操作できます。Firefoxのツールメニューからどうぞ。

![kobito.1416409952.298806.png](https://qiita-image-store.s3.amazonaws.com/0/35954/cbe279e6-7a2c-5439-a573-43fdde679069.png "kobito.1416409952.298806.png")



![kobito.1416411503.829576.png](https://qiita-image-store.s3.amazonaws.com/0/35954/26365749-eab6-fc76-4ca7-66ac461f7a82.png "kobito.1416411503.829576.png")
PHP目標


ハッキングやwebアプリの開発が用意に出来るレベルを目指す。
そのための１つの指針として、資格を利用する。

##PHPの資格とは

1.PHP5技術者認定初級試験（受験料　12,000円）
2.PHP5技術者認定上級試験（受験料）
3.PHP5技術者認定ウィザード（審査によるもの）

1,2は勉強出来る。

##購入予定参考書籍

[販売書籍サイト](http://www.phpexam.jp/material/)

###初級カバー書籍
- [ ]  徹底攻略 PHP5技術者認定[初級]試験 問題集
- [ ]  初めてのPHP5

###上級カバー書籍
- [ ]  プログラミングPHP 第3版
- [ ]  徹底攻略 PHP5 技術者認定 [上級] 試験問題集


##まずは、初級の合格を目指す
目指すにあたって必要なこと

1. 合格目標期間(次の勉強会までに受ける。つまり1月に受ける)
* 先人の教えを活用する[(PHP5技術者認定初級試験 合格必勝法）](http://qiita.com/oh_rusty_nail/items/26ac7230aba94707f1fe)
* 試験勉強が出来る環境の構築
	- [ ] 教材を揃える
	- [ ] 勉強のスケージュルを作る
	- [ ] 試験に申し込む（12月下旬に申し込む）

###結果は、、、
###受けた感想


	
		
##次は、上級の合格を目指す

目指すにあたって必要なこと

1. 合格目標期間(現在まだ未定)
* 先人の教えを活用する（未定）
* 試験勉強が出来る環境の構築
	- [ ] 教材を揃える
	- [ ] 勉強のスケージュルを作る

###結果は、、、
###受けた感想
mysqldumpしようとすると、`Couldn't execute 'SET OPTION SQL_QUOTE_SHOW_CREATE=1'`と言われた



# 概要

mysqldumpしようと思ったら、以下のErrorが出て困った件です。

```bash
mysqldump -h192.168.xxx.xxx -p -P3306 -uhoge hoge fuga > ~/hoge.fuga.`date '+%Y%m%d%H%M%S'`.sql
#=> Enter password: 
#=> mysqldump: Couldn't execute 'SET OPTION SQL_QUOTE_SHOW_CREATE=1': You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'OPTION SQL_QUOTE_SHOW_CREATE=1' at line 1 (1064)
```

## 環境

```bash
cat /etc/redhat-release 
#=> CentOS release 6.5 (Final)

mysqldump --version
#=> mysqldump  Ver 10.13 Distrib 5.5.27, for Linux (x86_64)
```

# 対応

## ググったら[これ](http://dev.classmethod.jp/cloud/aws/ec2_mysqldump/)がヒットした

[これ](http://dev.classmethod.jp/cloud/aws/ec2_mysqldump/)を読んだ際に、以下の選択肢が書いてありました。

1. v5.5のmysqldumpバイナリファイルを編集して`OPTION`を取り除く
2. mysqlサーバ側で`SET OPTION`を受け入れるようにする
3. mysqldumpをv5.6にアップグレードする

で、[これ](http://dev.classmethod.jp/cloud/aws/ec2_mysqldump/)では3.を選択してたんですけど、同様にmysqldump（厳密にはmysql-clientのdistribution？）をアップグレードしてやればよいな、と思って試しました。

## mysqldumpのdistributionをv5.5.38にしてみた

というか、別件でinstallしておいたmysqlインスタンスに付属しているmysqldumpを用いたら、普通に動きました。

```bash
/path/to/mysqldump --version
#=> mysqldump  Ver 10.13 Distrib 5.5.38, for linux2.6 (x86_64)

/path/to/mysqldump -h192.168.xxx.xxx -p -P3306 -uhoge hoge fuga > ~/hoge.fuga.`date '+%Y%m%d%H%M%S'`.sql
#=> Enter password: 

cat ~/hoge.fuga.20141119xxxxxx.sql
#=> -- MySQL dump 10.13  Distrib 5.5.38, for linux2.6 (x86_64)
#=> --
#=> -- Host: 192.168.xxx.xxx    Database:hoge
#=> -- ------------------------------------------------------
#=> （以下略）
```

<strike>どのver.から直ってるんだろ...</strike>
@yoku0825 さんから[教えていただきました](http://qiita.com/takoba/items/71c6ace4dd75aa94eb75#comment-ff3e4fae4520690529fe)（2014/11/24 22:58追記）
> 5.1.72, 5.5.34, 5.6.14, 5.7.2で直っています。
>
>MySQL Bugs: #67507: mysqldump from 5.5 fails with an error when trying to dump data from mysql-5.6
>http://bugs.mysql.com/bug.php?id=67507

#おわりに

何かの参考になれば幸いです。

## 追記（2014/11/24 22:58）

というか、[Qiitaで検索](http://qiita.com/search?utf8=%E2%9C%93&sort=rel&q=%22Couldn%27t+execute+%27SET+OPTION+SQL_QUOTE_SHOW_CREATE%3D1%27%22)してみたら割と類似エントリ存在してたな...

- [mysqldump: Couldn't execute 'SET OPTION SQL_QUOTE_SHOW_CREATE=1':](http://qiita.com/yatmsu/items/32a6bc4e03b5a68708fc)
- [mysqldumpで「SET OPTION SQL_QUOTE_SHOW_CREATE=1」なエラーが出た](http://qiita.com/ha_g1/items/d8338bb305145dea7acc)
- [Ubuntu12.04のMySQLクライアントをmysql5.5からmysql5.6にする - Qiita](http://qiita.com/RyujiAMANO/items/9211874bc33b9ad9a7e1)

# 参考

- [MySQL :: MySQL 5.0 Reference Manual :: 4.5.4 mysqldump — A Database Backup Program](http://dev.mysql.com/doc/refman/5.0/en/mysqldump.html)
- [mysqldumpを実行しようとするとCouldn’t execute ‘SET OPTION SQL_QUOTE_SHOW_CREATE=1’が出るときの対処法 ｜ Developers.IO](http://dev.classmethod.jp/cloud/aws/ec2_mysqldump/)
  - a.k.a. “これ”
『Webを支える技術』まとめ②

[『Webを支える技術』まとめ①](http://qiita.com/chihiro/items/d227f73131a157b426fc)の続きです。

##HTML

###HTMLとは
Hypertext Markup Languageの略。タグで文書の構造を表現している。
Webにとって基本的な技術であり、Webの重要な側面であるハイパーメディアを実現している。

###HTMLの構成
もっとも基本的な構成要素はヘッダとボディである。

* ヘッダ：文書のメタデータを入れる
* ボディ：文書の内容そのものを入れる。ブロックレベル要素とインライン要素に大きく分かれる。

また、HTMLの全ての要素はid属性とclass属性を持つことができる。

* id属性：文書内で一意なID。URIフラグメントとして利用したり、CSSでスタイルを指定するときに利用する
* class属性：その要素が属するクラス。CSSでのスタイルの指定や、microformatsなどでメタデータを表現するときに利用する

###リンク
ハイパーメディアフォーマットとしてのHTMLの要素を見ていく。

* \<a>要素：他のWebページにリンクさせる
* \<link>要素：HTMLのヘッダで、Webページ同士の関係を指定するために使う。rel属性はリンクの意味を示す
* \<form>要素：リンク先のURIに対して、GETとPOSTを発行できる
* \<img>要素：画像の埋め込みに利用する
* \<object>要素：画像以外のオブジェクトの埋め込みに利用する

###ハイパーメディアフォーマットとしてのHTML
HTTPとURI、そしてハイパーメディアによるリンクを組み合わせて初めてWebが成り立つ。HTMLでリンクを設計する際は、「リンクをたどることでアプリケーションの状態が遷移する」ことを強く意識する必要がある。

##microformats

HTMLの中でさらに意味のあるデータを表現するための技術。この技術を用いることによってWeb上のリソースの意味は、人間が読んで解釈するだけでなくプログラムからも処理可能になる。

##Atom

###Atomとは
XMLフォーマット。ブログの新着情報や検索エンジンなどさまざまなWebサービスのWebAPIとして利用できる。

###Atomのリソースモデル

Atomの論理モデルは以下の2つに分かれる。

* メンバリソース：Atomにおける最少のリソース単位。さらにエントリリソースとメディアリソースに分かれる。エントリリソースは\<entry>要素で表現し、この表現を「エントリ」と呼ぶ
* コレクションリソース：複数のメンバリソースを含むリソース。\<feed>要素で表現し、この表現を「フィード」と呼ぶ

###エントリ
ルート要素は\<entry>要素であり、この中にメタデータと内容がフラットに並ぶ。

* メタデータ：ID、タイトル、著者、更新日時は必須。そのほかに概要や貢献者、公開日時などのデータもつけることができる
* エントリの内容：テキスト以外のフォーマットも含められる

###フィード
エントリの集合。エントリと同じメタデータを持つことができ、必須要素も同じである。

###フィードの分割
大量の結果を分割して複数のフィードに分けて表現することができる。以下の3つの種類がある。

* 完全フィード：すべてのエントリを一つの文書に含んでいるフィード
* ページ化フィード：エントリを複数の一時的な文書に分割しているフィード
* アーカイブ済みフィード：エントリを複数の恒久的な文書に分割しているフィード

##JSON

###JSONとは
JavaScript Object Notationの略で、データ記述言語である。

###JSONのデータ型

JSONには以下の6つのデータ型が用意されている。

* オブジェクト：名前と値の集合
* 配列：順序をもった値の集合
* 文字列：二重引用符(”)で囲む
* 数値：表記は10進法に限る
* ブーリアン：trueとfalse
* null：「null」と小文字で書く
* 日時：組み込まれているものはないので、開発者が規定を用意する



まとめは以上です。
また読み返したいと思います。