OmniAICreator/Qiita-1.07M huggingface dataset:
Windows 8/8.1 ソフトウェアキーボードの大きさを変えよう!

![](http://cdn-ak.f.st-hatena.com/images/fotolife/m/makoto1899/20150407/20150407105519.jpg)

1. Regedit を起動
2. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer に、新規キー、「Scaling」を追加
3. 「Scaling」内に新規文字列値「MonitorSize」を追加

デフォルトは「8」なのかな!? 8って、8インチの事なのかな～って、事は12インチなSurfaceは、12なのか!?

とにかく、「8」から「16」「24」と増やしていくと、ソフトウェアキーボードが小さくなります。※要ログアウト

**簡単だけど、レジストリを弄るので、注意してね～**
sshを公開鍵認証でログインするまで

#ローカルでの作業
```bash
#keyの生成
ssh-keygen -t rsa

#公開鍵のリモートに配置
scp ~/.ssh/id_rsa.pub hoge@hostname:/home/hoge/

#ssh config の設定
vi ~/.ssh/config

#環境に合わせて記述
Host hoge
    HostName     hostname
    IdentityFile ~/.ssh/id_rsa
    User         username
```

#リモートでの作業
```bash
cat ~/id_rsa_pub >> ~/.ssh/authorized_keys
```

#sshでアクセス
```bash
ssh hoge
```
ローカルのgitプロジェクトをリモートの新規レポジトリとしてpushする

##リモートでの作業
```bash
mkdir hoge.git
cd hoge.git
git init --bare
```

##ローカルでの作業
```bash
git remote add origin ssh://hoge@hostname:/home/hoge/fuga
git push -u origin master
```
AWS SDK go を試そうとしたら http.Client field 'Timeout' in struct literal 


AWS SDK go を試してみようと、https://github.com/awslabs/aws-sdk-go にあるサンプル的なコードを
動かそうとしたら、こんなエラー。

```
$ go build aws.go
# github.com/awslabs/aws-sdk-go/aws
src/github.com/awslabs/aws-sdk-go/aws/credentials.go:229: unknown http.Client field 'Timeout' in struct literal
```

ググったら、goのバージョンが古いみたい。
https://github.com/syncthing/syncthing-inotify/issues/9

```
$ go version
go version go1.2.1 darwin/amd64
```

確かに古い。
この 1.2.1のやつをどうやってインストールしたのか忘れたので、消して再インストール

```
$ brew install go

$ go version
go version go1.3.3 darwin/amd64
```

```
$ go buld aws.go
```

エラーでなくなった。

最新は、1.4系らしいので、念のため upgradeしとく。

```
$ brew update
$ brew upgrade go
```
vimで-(ハイフン)を単語に含める方法

# 概要
`aaa-bbb`で`viw`などをする場合、`aaa-bbb`を選択したいですが、デフォルトでは`aaa`だけが選択されます。

# 方法
`:set isk+=-`

を`.vimrc`に設定します。

すると`-`も単語に含まれるようになり、`aaa-bbb`が選択できます。


# 注意点
`a`を単語検索(`/\<a\>`)すると、`c=a-b`は、引っかかりません。
srpmでSPECファイル編集してrpm作ってみた

## 参考

* [PHPのマルチバイトにおけるトラブルシューティング](http://kona.tonakaj.org/php.multibyte.html#script)

## 現状確認

```bash:
$ php -i | grep script
mbstring.script_encoding => no value => no value
```

というのを期待したが、無い。
./configure時に`--enable-zend-multibyte`をつけないとこの指定が出来ないようだ。


## 対処

```bash:
yum install rpm-build
mkdir -p /usr/src/redhat/SOURCES
rpm -ivh php-5.1.6-45.el5_11.src.rpm
vim /usr/src/redhat/SPECS/php.spec
```

```diff:/usr/src/redhat/SPECS/php.spec
    --with-mime-magic=%{_datadir}/file/magic.mime \
    --without-sqlite \
    --with-libxml-dir=%{_prefix} \
    --with-xml \
    --with-system-tzdata \
+   --enable-zend-multibyte \
    $* 
    if test $? != 0; then 
      tail -500 config.log
      : configure failed
      exit 1
```

* [CentOS/あるrpmパッケージが動作するために必要な依存するrpmパッケージを確認する・yum deplist - Linuxと過ごす](http://linux.just4fun.biz/CentOS/%E3%81%82%E3%82%8Brpm%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E3%81%8C%E5%8B%95%E4%BD%9C%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AB%E5%BF%85%E8%A6%81%E3%81%AA%E4%BE%9D%E5%AD%98%E3%81%99%E3%82%8Brpm%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B%E3%83%BByum%20deplist.html)

```
yum deplist php
yum install -y aspell-devel bzip2-devel bzip2-libs-devel curl-devel cyrus-sasl-devel db4-devel e2fsprogs-libs-devel expat-devel file-devel freetype-devel gd-devel gmp-devel httpd-devel krb5-devel krb5-libs-devel libc-client-devel libidn-devel libjpeg-devel libpng-devel libtool libxml2-devel libxslt-devel mysql-devel net-snmp-devel openldap-devel openssl-devel pam-devel pcre-devel postgresql-devel smtpdaemon sqlite-devel unixODBC-devel zlib-devel
```

```bash:リビルド
rpmbuild -ba /usr/src/redhat/SPECS/php.spec
```

## buildしたrpmをインストール

```bash:
cd /usr/src/redhat/RPMS/x86_64/
rpm -ivh php-mbstring-* \
  php-cli-* \
  php-common-* \
  php-pdo-* \
  php-* \
  php-devel-*
```

```bash:
/etc/init.d/httpd restart
```

```bash:動作確認
$ php -i | grep script
mbstring.script_encoding => no value => no value
```

## 成果物

* [Release 2016-11 · tukiyo/php5.1-enable-zend-multibyte](https://github.com/tukiyo/php5.1-enable-zend-multibyte/releases/tag/2016-11)
【解決】centos:centos5でsrpmのダウンロードに失敗したのでissue報告した

[/etc/yum.repos.d/CentOS-Sources.repoが間違っている。](https://github.com/CentOS/sig-cloud-instance-images/issues/18)

```bash:
yum install yum-utils
yumdownloader --source php
```

http://vault.centos.org/centos/5/updates/Source/
にアクセスしようとしているが、正しくは以下。
http://vault.centos.org/centos/5/updates/SRPM/

## 対処

```
sed -i -e 's@/Source/@/SRPMS/@' /etc/yum.repos.d/CentOS-Sources.repo
yum clean all
yumdownloader --source php
```
MeteorのTutorialを試してみる（０

https://www.meteor.com/
https://www.meteor.com/install
MeteorのTutorialを試していきたいと思います。
まずMeteorがどのようなものか見ていきましょう。
#About Meteor
"Build apps that are a delight to use, faster than you ever thought possible"
使って楽しいアプリを、もっと早く作る、みたいな歌い文句でしょうか？
MeteorはPure JavaScriptによるWeb/Mobileアプリを作成するためのオープンソースプラットフォームです。
ユーザとデペロッパー、２つの側面からその特徴を見ていきましょう。
##Delightful User Experience
###Modern user interface
FacebookやTwitter、またはデスクトップアプリケーションのようなデザインを目指します。リンクで構成されたようなデザインとはさようならです。

###Browser and Mobile
Webとモバイル・タブレット両方に素晴らしいUXを提供します。

###Live updates
ライブアップデートにより、ユーザにシームレスな共同作業を提供します。

###Ultra responsive
サーバからの応答を待つことなく、ユーザの行った変更はすぐさま反映されます。

##Fast & Fun Development
###Radically less code
Reactive programing modelにより他のフレームワークなら1000行かかるところを１０行で済ませます。

###One language everywhere
クライアントとサーバサイドを同じ言語で記述できます。

###Unified package system
ブラウザ・モバイル・サーバサイド、すべて１つのパッケージでビルドできます。

###Hot deploys
１コマンドで全ての接続中のブラウザ・モバイルに変更を反映できます。

##A Solid Choice
次にMeteorを選ぶ６つの理由を見てみましょう。
###FULLY OPEN SOURCE
MITライセンスに従い、望むのであれば、Meteorは全ての人が自由に使うことができます。

###SECURE
ベストプラクティスが反映されており、信頼できる環境でコードを実行できます。

###FLEXIBLE
Meteorをそのまま使うこともできますし、Angular, RethinkDB, Firebaseなどで置き換えて使用することもできます。

###INTEROPERABLE
DDPプロトコルによりIoTなどから接続可能です。

###PROFESSIONALLY MAINTAINED
プロフェッショナルなエンジニアによってMeteorはリリースされており、フルスタックとAPIの品質を確保しています。またコアチームは１流ベンチャーからの融資を得ています。

###WARM AND WELCOMING
Meteorは世界各地にコミュニティをもっています。Meteorの使命はだれもがソフトウェアを作れるようにすることです。

Meteorがどのようなものかなんとなく掴めたでしょうか？とりあえず私の中では、シームレスなブラウザ・モバイルアプリが簡単につくれて、フリーだけどサポートもしっかりしてるといった印象です。
次回は実際にTutorialを始めていきたいと思います。
[次回](http://qiita.com/kazusa-qooq/items/6298513c59556e64e8a2)
【ls】Linux コマンド

#ls [option] dir
ファイル、ディレクトリのリストを表示。
ディレクトリを指定した場合は、ディレクトリ内にあるファイルとディレクトリの情報を表示する。

##option
`-a`
「.」ではじまる不可視ファイルも表示。

`-l`
ディレクトリ、ファイルのパーミッション、所有者、グループ、サイズ、更新日などの詳細を表示。

`-r`
ソート順を逆に表示。

`-R`
ディレクトリの階層を表示。

`-t`
更新日時順に表示。
[Mac]シロク流、sshの設定ファイル分割管理


# 0. 前提
## 環境
- Mac OSX
- Ruby（gemが使える）

## sshの設定ファイルを複数に分けたい
- 通常、sshの接続先の設定は`~/.ssh/config`という名のファイルに記述される。
- 接続ホスト数が増えるほど、`~/.ssh/config`の中身は混乱をきたす。
- 複数人で共通のssh接続先を共有する場合、`~/.ssh/config`の中身を「部分的に」共有したい場合がある。
- そんな時、ssh設定ファイルが複数に分けられたら、便利ですよね！

というわけで、弊社片岡氏が作成したコマンド`sshx`の導入手順と使い方を本ブログでは紹介します。

# 1. 導入手順
## 1-1. インストール
```
gem install sshx
```

## 1-2. プレーンsshからの移行処理
```
sshx hostname
```

ここまでやると、`~/.sshx`というディレクトリが生成され、中身は

```
$ ls ~/.sshx/
config		ssh_config
```

となっている。
`~/.sshx/ssh_config`の中身は、sshxインストール前の`~/.ssh/config`の中身と全く同じになっている。
代わりに、`~/.ssh/config`の中身は、`~/.sshx/`配下の設定ファイルにより自動生成される。
（つまり、sshxインストール後は`~/.ssh/config`を直接いじることは2度とない。いじりたければ`~/.sshx/ssh_config`をいじればよい）

## 1-3. `~/.sshx/config`の中身
下記のようにすれば良い。

```
NamespaceSeparator -
EnableAlias true
SshPath /usr/bin/ssh
```

- NamespaceSeparator：ネームスペースの区切り文字
- EnableAlias：sshに対してsshxのエイリアスを貼るかどうか
- SshPath：プレーンsshへのパス

## 1-4. 複数ファイルを設定ファイルとして置く
`~/.sshx/`配下に設定ファイルを置くことで、これらを`~/.ssh/config`に自動的に反映させることが出来る。

シロクでは各プロジェクトごとにsshのconfigファイルを共通で管理しており、その置き先にシンボリックリンクを貼ることで、`~/.sshx/`配下に設定ファイルを擬似的に置いている。

```
ln -s /path/to/sshx_config ~/.sshx/hoge_config
```

#### (注1) 間違えてシンボリックリンクを貼ってしまった場合
```
unlink ~/.sshx/hoge_config
```

とすればシンボリックリンクを消せる。

#### (注2) `hoge_config`の中身例
```
NameSpace hoge-prd

Host web
  HostName xxxxx.xxxxx.com
  User ec2-user
  Port 22
  StrictHostKeyChecking no
  IdentityFile ~/.ssh/hoge.pem

Host batch
  HostName yyyyy.yyyyy.com
  User ec2-user
  Port 22
  StrictHostKeyChecking no
  IdentityFile ~/.ssh/hoge.pem

NameSpace hoge-stg

Host web
  HostName zzzzz.zzzzz.com
  User ec2-user
  Port 22
  StrictHostKeyChecking no
  IdentityFile ~/.ssh/hoge.pem

Host batch
  HostName wwwww.wwwww.com
  User ec2-user
  Port 22
  StrictHostKeyChecking no
  IdentityFile ~/.ssh/hoge.pem
```

## 1-5. `source`コマンドで上記を反映 ＆ pemを置く
```
source ~/.bashrc
```

をすれば、上記が反映される。
あとは、`hoge.pem`をチームメンバーから受け取り、`~/.ssh/`配下に置けば、めでたく

```
ssh hoge-prd-web
ssh hoge-stg-batch
```

などといったコマンドでサーバにアクセスできるようになる。

【参考URL】
▼設定ファイル分割や、コマンド補完が使える拡張sshコマンドを公開しました。
http://blog.katty.in/4936
Atomのvim-modeでたまに文字が消えてしまう現象

# 概要
インサートモードで文字を入力して、ノーマルモードに戻った瞬間にカーソル移動すると、一文字消えてしまうことがある。

# 原因
`ctrl-[`でモードを切り替えた瞬間に`h`で左に移動するつもりが`ctrl`押しっぱになってたのが原因でした。。。

Macのショートカットキーで`ctrl-h`はバックスペースと同じ挙動になります。

（同じ現象にはまってる人どれぐらいいるんだろう・・・）


# 対応
## Open Your Keymap をクリック
![image](https://qiita-image-store.s3.amazonaws.com/0/12352/3282b08e-aa6e-b229-b448-2b3a6814bb9f.png)


## keymap.csonに設定を追加
```coffeescript:keymap.cson
# Macのショートカットキーはctrl-hを押すと左側の文字を消す。
# vim-modeだと間違って押してしまうので無理やり上書きする。
'atom-text-editor.vim-mode':
  'ctrl-h': 'core:move-left'
```

`core:move-left`以外でも大丈夫です。ただ、空文字だとうまく動きませんでした。

これで快適にAtomでvim-modeが使える！ :tada:
「Rubyによるデザインパターン」の要点と使いどころ（続き）


[「Rubyによるデザインパターン」の要点と使いどころ](http://qiita.com/bisque33/items/b21feb26a3369dd10a4a)の続きです。

『[Rubyによるデザインパターン](http://www.amazon.co.jp/gp/product/4894712857/)』の「第Ⅲ部　Rubyのためのパターン」についてまとめます。第Ⅲ部は、どの章もそれだけで本が1冊書けるような濃い内容なので、本書を足がかりに別の本も合わせて読んだほうが良さそうです。

# DSL: ドメイン特化言語
## 概要
- DSL: ドメイン特化言語（Domain-Specific Language）とは、あるドメイン（領域）の言葉を用いてプログラミングができる言語。例えば、会計士が会計の事柄をそのまま表現できる言語など。
- 外部DSL: 会計士の言葉でプログラミングができる会計用DSLがある場合、そのDSLを解析・実行するためにパーサとインタープリタが必要になる。このように、DSLとインタープリタが別々の場合を外部DSLという。
- 内部DSL: DSLが何らかの言語（例えばRuby）と同じ書き方ができる場合。Rubyはこの内部DSLを簡単に作ることができる。

## 実装

内部DSLの実装は、DSLで書かれたファイルをevalメソッドで読み込み、Rubyのプログラムとして実行させている。DSLで使用できるキーワード（メソッド等）は、全て本来プログラム側に定義する。

実行ファイル

```ruby
def output(message)
	puts message
end

eval(File.read('DSLで書かれたファイル'))
```

DSLで書かれたファイル

```ruby(DSLで書かれたファイル)
output 'メッセージ'
```

実行結果

```実行結果
メッセージ
```

# メタプログラミング
## 概要
- Rubyの柔軟性を活用して、動的なオブジェクトを生成する。

## 実装

実装例1.インスタンスにメソッドを定義する

```ruby
def make_object(type)
	object = Object.new
	if type == :a
		def object.type
			'a'
		end
	end
	object
end

obj = make_object(:a)
obj.type # => "a"
```

実装例2.インスタンスにメソッドをextendする

```ruby
module M
	def type
		'a'
	end
end

def make_object(type)
	object = Object.new
	if type == :a
		object.extend(M)
	end
	object
end

obj = make_object(:a)
obj.type # => "a"
```

実装例3.インスタンスにメソッドをclass_eval()で追加する

```ruby
class Obj
	def self.set_type(member)
		code = %Q{
			def type
				"#{member}"
			end
		}
		class_eval(code)
	end
end

Obj.set_type('a')
obj = Obj.new
obj.type # => "a"
```

# Convention over Configuration
## 概要
- "設定よりも規約"というRuby on Railsの思想。
- 従来の"設定"によるフレームワークでは、規模が大きくなるほど設定が大きくなり、拡張性や保守性に問題があった。CoCの思想では、フレームワークがある規約に則ることで、余分な設定を排除し、拡張性や保守性を高めている。
Retopology Tools の Shrinkwrap ターゲットを再設定する

# Retopology Tools
　[Retopology Tools](http://blenderaddonlist.blogspot.jp/2014/09/addon-retopology-tools.html) はリトポ時に非常に重宝するアドオンです。Bsurface や LapRelax との連携も出来て、作業が捗ります。中でも Shrinkwrap の機能は良く使います。面を貼ったり、頂点を動かしたりするたびにシュリンクさせて…という作業を繰り返します。

# 終了とともにターゲットが切れてしまう
　そんな便利な機能なのですが、一旦、Save をして Blender を終了させて、改めて作業を再開しようとすると、編集中のメッシュとシュリンク対象のメッシュとの関連付けが無効になってしまうようで、Shrinkwrap が効かなくなってしまいます。
　これではリトポ作業を開始したら完了するまで Blender を終了することが出来ず困ってしまいます。

# 関連付けをし直す
　そこでアドオンのソースコードを見て対応方法を見つけました。単純にそれぞれのメッシュをスクリプトから指定をしてあげるだけです。
![スクリーンショット 2015-04-07 1.01.08.png](https://qiita-image-store.s3.amazonaws.com/0/13938/b0e220a0-0611-90eb-e57a-768e58de55ae.png)
　このように "Cube" がシュリンクのターゲットになるメッシュ。"Cube_retopo_mesh" がリトポ中のメッシュだとします。そしたら Python コンソールを開いて、続けて以下のように入力してみて下さい。最後に改行を忘れずに。
![スクリーンショット 2015-04-07 1.05.37.png](https://qiita-image-store.s3.amazonaws.com/0/13938/ea843b08-eba5-a536-f34b-b37d4c85cddd.png)
　これで、あらためて関連付けがされているはずですので、途中だったリトポの作業に戻ることができます。
【cd】Linux コマンド

#cd
ディレクトリを移動する。

`cd hoge`
`cd ./hoge`
現在のディレクトリに存在するhogeディレクトリに移動する。

`cd foo/var`
現在のディレクトリに存在するfooディレクトリの中のvarディレクトリに移動する。

`cd ../`
現在のディレクトリのひとつ上のディレクトリに移動する。
../を増やすと更に上のディレクトリに移動する。

`cd `
`cd ~`
ホームディレクトリに移動する。

`cd /`
ルートディレクトリに移動する。

`cd /home`
ルートディレクトリのhomeディレクトリに移動する。
さくらVPSはじめました


桜は昨日の雨で散ってしまいましたね。
代わりに、さくらVPSでお花見します。

## 自己紹介
新入生なのでまずは自己紹介します。
[Butchi](http://butchi.jp/) (物智) 社会人4年目です。

学部3年生の2006年にVALUE DOMAINで butchi.jp ドメインを取得後、XREAサーバーで個人サイトを運営していました。
それからずっとXREA管理画面からファイルをアップロードしてサイトを運用していました。

しかし、そんな非効率な運営方法をやめたいと兼ねてから思っていて、
たまたまハッカソンでAmazon AWS 1年無料券を入手したので、
Amazon AWSでサイト運営でもするか、と奮起しました。
それで[AWS Elastic Beanstalk](http://aws.amazon.com/jp/elasticbeanstalk/)でNode.jsによる個人サイト再構築を行っていたのですが、暫くしたら無料券の有効期限が切れ、月6,000円ぐらいの請求が来てぞっとしました。

会社の先輩から、「AWSは高いよ。SAKURAにしな。」と助言を頂いたので、新年度を機にSAKURAデビューすることになりました。

VPSは敷居が高いですが、有り難いことに大学（情報システム工学科）でLinuxの修行はしてきたので、ある程度のハードルは越えられます。

ただ、ネットワークとハードウェアには激弱です（集積回路工学研究室にいたのに…）。
これからWoT (IoT)にも手を出したいと思っているので、そのあたり強化させたい所存です。

## Linuxのお勉強
ちょうどグッドなタイミングで、知り合いづてで読みやすい本を2冊入手しました。

![まんがでわかるLinux シス管系女子](http://ecx.images-amazon.com/images/I/61TBq9lTjPL.jpg)
[Amazon.co.jp： まんがでわかるLinux シス管系女子 (日経BPパソコンベストムック): Piro(結城洋志), 日経Linux: 本](http://www.amazon.co.jp/dp/4822224961)

→4月11にハンズオン勉強会があるようなので行ってきます！

![これ１冊でできる！ラズベリー・パイ 超入門 改訂第2版](http://ecx.images-amazon.com/images/I/91bvIBjtk4L.jpg)
[Amazon.co.jp： これ１冊でできる！ラズベリー・パイ 超入門 改訂第2版 Raspberry Pi Model B／B+／2対応: 福田 和宏: 本](http://www.amazon.co.jp/dp/4800710901)

これでサーバーもハードウェアも勉強できる〜〜！！

## さくら契約

1Gプランと2Gプランがおすすめされている。とりあえずお試しで1Gに。
1Gプランでは30GB SSDと100GB HDDが選べるみたい。
SSDは高速らしいけど、3倍以上容量の差があるのが気になるのでHDDに。
早速SSH接続しようと思ったけど、「会員メニュー」には近い入口がない！

[さくらインターネット公式サポートサイト](https://help.sakura.ad.jp/)
[さくらのVPS｜さくらインターネット公式サポートサイト](https://help.sakura.ad.jp/app/vps)
[さくらのVPS　サーバの初期設定ガイド｜さくらインターネット公式サポートサイト](https://help.sakura.ad.jp/app/answers/detail/a_id/2429)

ここらへんのリンクをたどってサーバーの起動にこぎつけました。

## SSH接続

[さくらのVPS] 仮登録完了のお知らせ
のメールはちょっと遅れてやってくるので、ここに記載のIPに接続します。


```
$ ssh root@xxx.xxx.xxx.xxx
```

でSSH接続しようとするもなんか

```
port 22: Connection refused
```

と返ってきて接続できず。

しばらくしてもう一回試したらつながりました。

```
Are you sure you want to continue connecting (yes/no)?
```

でyes

## VPS入門

いつも新しい技術の入門でお世話になってるドットインストールで、
[さくらのVPS入門 (全21回) - プログラミングならドットインストール](http://dotinstall.com/lessons/basic_sakura_vps)
を見つけたので、ここで超勉強。


前半でやってることは、実行しても不具合無くやり過ごせるんだけど、セキュリティーを強くして、
入り口をガチガチに狭くする作業なので、危ない目に遭わないようにしっかりと設定します。
それをやらないと

+ rootでログインできちゃう！
+ ユーザーログインできちゃう！
+ 鍵認証にしても22番ポートはみんな知ってるから狙われる！
+ ファイアーウォールの設定がないと攻撃を受けちゃう！

とか危ないんでしょうね（今まで痛い目に遭ってないのでまだその恐ろしさを知らない…）。

### 鍵の生成

鍵認証
ssh-keygenするときファイル名は
sakura_id_rsa
とかにしておくと他の鍵と区別しやすい

### SSHポートの変更

ポート番号は秘密です。

### iptables
ドットインストールにチートしたテキストが載ってなかったので
[ドットインストール「さくらのVPSの基礎」の流れとメモ｜無給で働く新卒のブログ](http://ameblo.jp/yagiblodotjp/entry-11374272099.html)
こちらからコピペ。

`--dport 61203`のところだけ自分専用のポートに書き換えます。

## Apacheの設定

今日は時間切れなので、明日以降Apacheの設定とかVirtualHostの設定をします。

現在Amazon AWSで動いてる
http://www.gomenn.asia/
こちらの空サイトの中身をVPSのサーバー運用にするのが明日の課題です。

今日はこれまで。
Rubyの概念でecmascript6の新機能をまとめる


##式展開

```rb:Ruby
cat = "maru"
p "こんにちは#{cat}ちゃん" #=> "こんにちはmaruちゃん"
```

「`」（バッククオート）で文字列を囲うことで、文字列で変数を使用

```js:JavaScript
var cat = 'maru';
console.log(`こんにちは${cat}ちゃん`); //=> こんにちはmaruちゃん
```

##Enumerator#each

```rb:Ruby
[1, 2, 3].each do |val|
  p val
end #=> 1, 2, 3
```

```js:JavaScript
//es6
for (let v of [1, 2, 3]) {
  console.log(v) //=> 1, 2, 3
}

//es5
[1, 2, 3].forEach(val => {
  console.log(val); //=> 1,2,3
});
```

##アロー記法(Rubyのラムダ式)

```rb:Ruby
foo = ->(x) { x * x }
foo[5] #=> 25
```

```js:JavaScript
var foo = ( x ) => { return x * x };
console.log(foo(5)) // => 25
```

##デフォルト引数

```rb:Ruby
def even(value = 10)
  (1..value).each do |val|
    if val.even?
      p val #=> 2,4,6,8,10
    end
  end
end

even
```

```js:JavaScript
function even(count = 10) {
  for (var i = 1; i < count; i++) {
    if(i % 2 === 0){
      console.log(i) //=> 2,4,6,8,10
    }
  }
}

even();
```

##可変長引数

```rb:Ruby
def cat(*nya)
  p nya
end

cat(["punch", "punch", "punch"])
#=> "punch", "punch", "punch"
```

```js:JavaScript
function cat(...nya) {
  console.log(nya);
}

cat('punch', 'punch', 'punch');
//=> [ 'punch', 'punch', 'punch' ]

```

##ブロックスコープ

```rb:Ruby
integer = "cat"

[1, 2, 3, 4, 5].each do |val|
  integer = val
  p integer #=> 1,2,3,4,5
end

puts integer #=> "cat"
```


```js:JavaScript
var integer = 'cat';

[1,2,3,4,5].forEach(val => {
  let integer = val;
  console.log(integer); //=> 1,2,3,4,5
});

console.log(integer); //=> 'cat'
```

##与えられたオブジェクトを要素とする集合


```rb:Ruby
require 'set'

set = Set[1,2,3,5,1]
p set #=> #<Set: {1, 2, 3, 5}>

set.add(3)
set.add(10)
p set #=> #<Set: {1, 2, 3, 5, 10}>
```

```js:JavaScript

var set = new Set([1,2,3,5,1]);

console.log(set) //=> Set {1, 2, 3, 5}
```

##Hashオブジェクト

```rb:Ruby
my_map = { one: "lion", two: "gorilla", three: "rabbit" }

p my_map #=> { :one => "lion", :two => "gorilla", :three => "rabbit" }
```

```js:JavaScript
var myMap = new Map();
myMap.set('one', "lion")
myMap.set('two', "gorilla")
myMap.set('three', "rabbit")
console.log(myMap); //=> Map {"one" => "lion", "two" => "gorilla", "three" => "rabbit"}

```
##定数

```rb:Ruby
HOGE = 7
p HOGE #=> 7
```

```js:JavaScript
const hoge = 7;
var hoge = 11; //=> Duplicate declaration "hoge"
console.log(hoge); //=> 7
```
WordPressのループタグ①


#WPループタグタグの書き方
オリジナルテーマを作成しているときになぜかハマってしまったので、備忘録として。。

##記事ループ

:と;とか、postsとpostとか、間違えやすいので気をつけるように。

```php:single.php
<?php if(have_posts()): ?>
<?php while(have_posts()): ?>
//記事ループ開始

<?php the_post(); ?>


//この中でしか
<div class="article">
  <h2>
    <?php the_title(); ?>//記事タイトル
  </h2>
  <div class="article-body">
    <?php the_content(); ?>
  </div>
</div>
//彼ら(the_titleとかのテンプレートタグ)は使えません

//記事ループ終了
<?php endwhile; ?>
<?php endif; ?>

```

ループタグは一式記述しないと使えないようでしたので要暗記。
Ruby の gnuplot wrapper 経由で gnuplot を利用し、折れ線グラフを描画する

## :musical_score: 概要
Ruby の gnuplot wrapper 経由で gnuplot を利用し、折れ線グラフを描画する

## :musical_note: 前提
* OS: Windows7
* gnuplot: version 4.6

## :scroll: 手順
### <i class="fa fa-cloud-download" style="font-size:1em;"></i> gnuplot windows 64 bit 版のインストール
下記ページの

http://sourceforge.net/projects/gnuplot/files/gnuplot/4.6.6/

gp466-win64-setup.exe

をダウンロードし、 gnuplot のインストーラーを実行します。
ウィザードに従ってインストール後, 下記コマンドでインストールの確認をします。

~~~bash
% gnuplot --version
gnuplot 4.6 patchlevel 6
~~~

### <i class="fa fa-cloud-download" style="font-size:1em;"></i> Ruby の gnuplot wrapper をインストールする

~~~bash
% gem install gnuplot
~~~

## <i class="fa fa-flask" style="font-size:1em;"></i> サンプル
折れ線グラフを作成します

### <i class="fa fa-code" style="font-size:1em;"></i> ソースコード

~~~ruby
require "gnuplot"

Gnuplot.open do |gp|
  Gnuplot::Plot.new( gp ) do |plot|
    plot.title  "Array Plot Example"
    plot.xlabel "x"
    plot.ylabel "y"
    plot.yrange "[0:5000]"
    
    x = (0..50).map(&:to_f)
    y = x.map{ |v| (v ** 2) + 3000 }
    x2 = (0..50).map(&:to_f)
    y2 = x.map{ |v| 2*v ** 2 + 2500 }

    plot.data << Gnuplot::DataSet.new( [x, y] ) do |ds|
      ds.with = "lines"
      ds.linewidth = 2
    end
    plot.data << Gnuplot::DataSet.new( [x2, y2] ) do |ds|
      ds.with = "lines"
      ds.linewidth = 2
    end
  end
end
~~~

### <i class="fa fa-flag-checkered" style="font-size:1em;"></i> 実行結果

![gnuplot_sample.png](https://qiita-image-store.s3.amazonaws.com/0/43480/9411887d-fc1a-60a7-9770-e7afeef81447.png)

## :books: 外部資料
* <i class="fa fa-external-link" style="font-size:1em;"></i> [gnuplot 4.6 Installer](http://sourceforge.net/projects/gnuplot/files/gnuplot/4.6.0/)
* <i class="fa fa-external-link" style="font-size:1em;"></i> [gnuplot RubyGems](https://rubygems.org/gems/gnuplot)
* <i class="fa fa-external-link" style="font-size:1em;"></i> [gnuplot GitHub](https://github.com/rdp/ruby_gnuplot)
ShinobiLayer: CentOS7のLiveCDをBoot From ImageからISOマウント

# はじめに
Rescue Kernelは未だにKernel 3.x系に対応していません。そこで、CentOS7のLiveCDをBoot From ImageからISOマウントして、Kernel 3.x系のRescueイメージから仮想サーバーを起動してみよう、、、というのがこの記事の趣旨です。

# Live CDの準備

1 . http://ftp.tsukuba.wide.ad.jp/Linux/centos/7/isos/x86_64/ からダウンロードする。

```
# wget http://ftp.tsukuba.wide.ad.jp/Linux/centos/7/isos/x86_64/CentOS-7-x86_64-LiveCD-1503.iso
```

2 . Object Storageにアップロードする。詳細は[こちら](http://qiita.com/testnin2/items/64f934f61bcaf7ac2572)も参照。

```
# sftp "xxxxxxxxx"@tok02.objectstorage.softlayer.net
Connecting to tok02.objectstorage.softlayer.net...
xxxxxxxxx@tok02.objectstorage.softlayer.net's password:
sftp> dir
cachetest               shinobilayer            shinobilayer_segments
sftp> cd shinobilayer
sftp> mput CentOS-7-x86_64-LiveCD-1503.iso
```
3 . Object Storage上のアップロードファイルをimageとしてimportする。
Devices -> Manage -> Imagesにて、Import Imageタブを選択し、アップロード先のオブジェクトストレージ情報を入力する。
![importImage1.jpg](https://qiita-image-store.s3.amazonaws.com/0/62127/e974ee34-6926-9ba4-5ede-ef829cdbf26d.jpeg)
![importImage2.jpg](https://qiita-image-store.s3.amazonaws.com/0/62127/598a358c-563d-c1bc-1260-0a2168273766.jpeg)

#Boot From Imageの実行

1. Devices -> "該当サーバー" -> ActionsからBoot from Imageを選択。
![importImage3.jpg](https://qiita-image-store.s3.amazonaws.com/0/62127/c01723cb-841d-3ab4-7b69-32c4b7a1b680.jpeg)
![importImage4.jpg](https://qiita-image-store.s3.amazonaws.com/0/62127/d048f001-357f-5f38-1607-c969339af118.jpeg)
![importImage5.jpg](https://qiita-image-store.s3.amazonaws.com/0/62127/1b03e112-a06d-5924-b883-83400f4bd771.jpeg)
![importImage6.jpg](https://qiita-image-store.s3.amazonaws.com/0/62127/7467b783-34f5-b664-9f4a-c837aed1bc6e.jpeg)

3. KVMコンソール経由でアクセスすると、ISOマウントされて起動してくる。KVMコンソールへのアクセス方法は[こちら](http://qiita.com/testnin2/items/fdd4d77f833e30f46194)も参照のこと。
![importImage7.jpg](https://qiita-image-store.s3.amazonaws.com/0/62127/a6d83eee-893c-3b47-43ac-5cde64429f9e.jpeg)
VPN経由でssh利用してサーバアクセス（Mac）

「サーバ設定をIPで縛っているので、VPN繋いでからSSHしてね」
なんて話があったので対応した記録。

http://www.repica.jp/staffblog/tech/2013/07/29/1035/
がわかりやすかったのでこれで対応。多謝。
ひとまず下記を実行。

L2TP over IPSEC でもPPTPと同様な模様（元記事は未確認だった様子なので）

```:terminal
$ sudo vi /etc/ppp/ip-up
#!/bin/sh
if [ "$1" = "ppp0" ]; then
  /sbin/route add -net XXX.XXX.XXX.XXX -interface ppp0
fi
$ sudo chmod 744 /etc/ppp/ip-up
```

接続できることは確認できたので、次はsshを簡単に接続できるようにしておく。

http://superbrothers.hatenablog.com/entry/20090730/1248971671
のように、 .ssh/config を修正すれば良い。感謝！例えば以下な感じ。

```
Host test
  Port 19922
  HostName xx.xx.xx.xx
  User myuser
  IdentityFile ~/path/to/pem
```

```:terminal
ssh test
```

で呼び出せる。Good!
Unityでだいたい◯秒ごとに処理を行う


```csharp
using UnityEngine;
using System.Collections;

public class Test : MonoBehaviour {
    private float timeleft;

    void Update () {
		//だいたい1秒ごとに処理を行う
		timeleft -= Time.deltaTime;
		if (timeleft <= 0.0) {
			timeleft = 1.0f;

            //ここに処理
		}
	}
}
```
webページやクラウド上にあるファイルを読み込みまくる ~ 応用編

-> [webページやクラウド上にあるファイルを読み込みまくる ~ 基礎編](http://qiita.com/uri/items/19159c7ff3f771cfa761) のつづき。

## Google Driveにあるspreadsheetを読み込む

最近公開されたほっとなパッケージ

[jennybc/googlesheets](https://github.com/jennybc/googlesheets)

このパッケージを使えば、GoogleDocsに保存しているファイルをR上で読み込んだり、新規のスプレッドシートを作成、編集できたりします。READMEにあるとおりですが、少しだけ使用方法を書いておきます。

```r
# devtools::install_github("jennybc/googlesheets")
library("googlesheets")
(my_sheets <- list_sheets()) # 実行するとファイルへのアクセスを許可するかどうかを尋ねるため、webブラウザが起動します。
# 許可すると、ログインしているGoogleアカウントに保存されたスプレッドシートのタイトルと個別のキーがずらずらと表示されます。
# Source: local data frame [39 x 10]
# 
#                       sheet_title                                    sheet_key       owner perm        last_updated version
# 1                      150406test 1AIjxNy5S_8ggEnXIlOJ8LwwCEtzKdt8NosEDFDoHipU   suika1127   rw 2015-04-06 12:28:15     new
### ...
```

ファイルの読み込みはやや複雑です。まず、`register_ss`関数に上のリストで出てきた`sheet_title`とそれに対応した`sheet_key`を渡渡すことでシートを読み込む準備を行います。シート名だけを渡した場合、キーが表示されるのでそれをあとで渡すことも可能です。

```r
register_ss(x = "150406test", key = "1AIjxNy5S_8ggEnXIlOJ8LwwCEtzKdt8NosEDFDoHipU") -> dat
```

Rで扱えるようなデータフレームにするためには`get_via_csv`関数を使います（`get_via_lf`関数というものもあるけど、違いがよくわからない）。

```r
get_via_csv(dat)
# Accessing worksheet titled "Sheet1"
# Source: local data frame [4 x 3]
# 
#      name score temp
# 1    taro     4   NA
# 2  hanako     3    2
# 3    mike     6   NA
# 4 musashi     8   NA
```

できました。

このパッケージのさらにすごいところは、新規のシートを作ったり、簡単な編集がR上でできること、そしてファイルのアップロードやダウンロードまでできてしまうことです。次の項目の説明のためにファイルをダウンロードします。

```{r}
download_ss("150406test", to = "~/Dropbox/share/150406download_test.csv")
# Downloading: 53 B     
# Sheet successfully downloaded: /Users/uri/Dropbox/share/150406download_test.csv
```

## Dropboxにあるテキストファイルを(ry

[karthik/rDrop2](https://github.com/karthik/rDrop2)

これまた最近公開されたライブラリ。これを紹介しておしまいです。

```{r}
# devtools::install_github('karthik/rDrop2')
library("rDrop2")
drop_auth() # 実行するとwebブラウザが立ち上がり、さきほどと同じくアクセス権の確認をおこないます
```

さきほどのパッケージでダウンロードしたファイルを読み込みましょう。

```
drop_read_csv(file = "share/150406download_test.csv")
name score temp
1    taro     4   NA
2  hanako     3    2
3    mike     6   NA
4 musashi     8   NA
```

gooooood!

つぎつぎと便利なライブラリが出てきて、追うのが大変ですね。

それでは Enjoy 前処理!
webページやクラウド上にあるファイルを読み込みまくる ~ 基礎編

R本の著者の多くは、サポートとしてスクリプトや使用するデータをwebページで公開してくれています。Rには、これらのファイルを保存せずに読み込む機能やパッケージが備わっています。ちょっと調べてみたので今回は「**基礎編**」と「**応用編**」の２つに分けてその方法を紹介したいと思います。基礎編では標準関数と最も標準だと思われる方法をとります。応用編では、いわゆるクラウドにあるファイル（GoogleDocs, Dropbox）にあるファイルを読み込む方法について述べます。

-> [webページやクラウド上にあるファイルを読み込みまくる ~ 応用編](http://qiita.com/uri/items/2e108d6fcbd80ef58444)

## Webページにアップロードされているテキストファイルを読み込む

ものによっては、そのまま`read.csv`で読み込めるファイルもあります。今回は緑本の久保さんが公開している[本のサポートページ](http://hosho.ees.hokudai.ac.jp/~kubo/ce/IwanamiBook.html)から、プログラムに使うCSVファイルをとってきます。

```r
dat <- read.csv("http://hosho.ees.hokudai.ac.jp/~kubo/stat/iwanamibook/fig/poisson/data3a.csv")
str(dat)
# 'data.frame':	100 obs. of  3 variables:
#  $ y: int  6 6 6 12 10 4 9 9 9 11 ...
#  $ x: num  8.31 9.44 9.5 9.07 10.16 ...
#  $ f: Factor w/ 2 levels "C","T": 1 1 1 1 1 1 1 1 1 1 ...
```

できました。

上記の方法で読み込めないファイルは`RCurl`パッケージの`getURL`関数をかませることで読み込めたりします。

> もちべーじょん... Appendixとして使用したデータを付けている論文、とてもありがたい。けど、いちいちダウンロードしているのも面倒かつファイルの置き場に困るので使い捨てな感じにしたい。

```r
library("RCurl")
url <- getURL("http://datadryad.org/bitstream/handle/10255/dryad.77075/Thomas_etal_2014_Dryad.txt?sequence=1")
dat <- read.table(text = url, header = TRUE)
# 結果は省略します
```

### GitHubにあるテキストファイルを読み込む

GitHubにCSVを置いておけば、みなさん気楽に遊べますよね。今回はおなじみの「歩数」データをかっさらってきます。

```r
url <- getURL("https://raw.githubusercontent.com/dichika/mydata/master/ore.csv")
dat <- read.csv(text = url, header = TRUE)
head(dat)
#         time data
# 1 2015-01-03 7754
# 2 2015-01-04    0
# 3 2015-01-05 9096
### 以下省略
```

## webページのテーブルからデータを取得する

### XML::readHTMLTableを使う方法

これは「[R for Everyone](http://www.jaredlander.com/r-for-everyone/)」（新しくて良書）に掲載されていたtipsです。

```r
readHTMLTable("http://www.jaredlander.com/2012/02/another-kind-of-super-bowl-pool/")
# $`NULL`
#                V1      V2        V3
# 1   Participant 1 Giant A Patriot Q
# 2   Participant 2 Giant B Patriot R
# 3   Participant 3 Giant C Patriot S
### 以下省略
```

```r
getURL("https://github.com/uribo/Japan.useR/blob/master/README.md") %>% readHTMLTable(header = TRUE, stringsAsFactors = FALSE)
# $`NULL`
#                       Name              Organizer                Place
# 1                Fukuoka.R             @nonki1974     Fukuoka, Fukuoka
# 2  HiRoshima.R (HijiyamaR)                @sakaue Hiroshima, Hiroshima
# 3                Kashiwa.R            @Acafe_info       Kashiwa, Chiba
### 以下省略
```

## rvestを使う方法

[rvest: easy web scraping with R | RStudio Blog](http://blog.rstudio.org/2014/11/24/rvest-easy-web-scraping-with-r/)にあるとおりです。

## Javascriptベースのwebページからデータを抽出する方法

[Short R tutorial: Scraping Javascript Generated Data with R](http://blog.datacamp.com/scraping-javascript-generated-data-with-r/)にあるとおり。

最後のほうは疲れてしまいました。時間があれば最後の方法は説明できれば良いなと思います。
そして次からが真打ちです（つづく）。
【初級】Webpack導入

Webpackの目的とWebpackの導入方法を記述する。※ 2015年4月時点

## Webpackの利点

利点 : 依存関係をJavascriptの任意のファイル数で管理することが出来る。Webpackの利点は1ファイルの管理ではなく、任意の数のファイルを生成出来る。

Web開発を行っていると、様々なファイルをインクルードすることが多い。例えば、HTMLファイルのHeadタグの中でJavascriptのファイルを複数読み込む。

その依存関係を解決する為に、当パッケージを利用し、ファイル数を削減する。

## Webpackの導入順番
1. node.js
2. npm
3. webpack

## コマンド
* node.js<br>homebrewを用いてインストールする<br>(Linuxはyumとかでよろしく)

```bash
%brew install node
%node -v
v0.10.36
```

* npm<br>homebrewを用いてインストールする<br>(Linuxはyumとかでよろしく)

```bash
%brew install npm
%npm -v
2.3.0
```

* bower<br>npmを用いてインストールする<br>グローバル環境にインストール

```bash
%npm install -g bower
May bower anonymously report usage statistics to improve the tool over time? (Y/n) Y or N ←どっちでも可
%bower -v
1.4.1
```

* webpack<br>npmを用いてインストールする<br>グローバル環境にインストール<br>yo -vやると色々聞かれる

```bash
%npm install -g webpack
```

## 簡単な使用方法

簡単な使用方法(Weppackのほぼコピペ)
http://webpack.github.io/docs/tutorials/getting-started/

```Javascript:entry.js
document.write("It works.");
```

```html:index.html
<html>
    <head>
        <meta charset="utf-8">
    </head>
    <body>
        <script type="text/javascript" src="bundle.js" charset="utf-8"></script>
    </body>
</html>
```

```bash
% webpack ./entry.js bundle.js
Version: webpack 1.7.2
Time: 154ms
    Asset  Size  Chunks             Chunk Names
bundle.js  1437       0  [emitted]  main
chunk    {0} bundle.js (main) 28 [rendered]
    [0] ./tutorials/getting-started/setup-compilation/entry.js 28 {0} [built]

```

詳しい使い方は、後日書きます。
build 32-bit lua on mac

```
make macosx CFLAGS+=-m32 LDFLAGS+=-m32
```

ついでに発見したのは、同じ32bit x86でも、
windowsとmacのluacの結果が微妙に違うこと：

![スクリーンショット 2015-04-06 22.04.42.png](https://qiita-image-store.s3.amazonaws.com/0/10487/deb58bca-c8cd-c592-1f15-0e0fe1e1cc58.png)

おそらく、debug.tracebackなどでファイルパスを表示するためのものでしょうね。
DropBoxからファイルをダウンロードするSwift


１）SDKをダウンロードする。指示に従ってプロジェクト内にdb-xxxxxというコードをセットする（Dropboxの開発者向けページにこれでもかというくらい詳しくかいてあります）

２）ブリッジファイルでライブラリをインポートしてSwiftで使えるようにする。


３）下のコードをビューコントローラに書く。




それだけですが、元のサンプルがいつものようにObjective-Cで描いてあるので苦戦しました。最初はアンセーフミュータブルポインタで受け取って処理しようとしたんですが上手くいかず、ググってたら正解がありました。


オリジナルURL
http://stackoverflow.com/questions/27946870/dropbox-chooser-unable-to-handle-link-ios-swift



````

    func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject?) -> Bool {
        
        if (DBChooser.defaultChooser().handleOpenURL(url)) {
            return true
        }
        return false
    }

````

````

func dropboxBtn(sender: AnyObject) {

    DBChooser.defaultChooser().openChooserForLinkType(DBChooserLinkTypeDirect, fromViewController: self, completion: { (results: [AnyObject]!) -> Void in
            var data = results as [DBChooserResult]
            println(data[0].link.description)
    })
}

````

なるほど、クロージャーを使って処理すれば簡単ですね。completion:のところでハマりました。ちゃんとURLが返ってきます。わかれば意外に簡単でした。次はダウンロードです。
Yosemite で F5 FirePass を動かす


Yosemite で F5 Networks の FirePass (SSL-VPN) が動作しない問題。
https://discussions.apple.com/thread/6679959

F5 でもサポートされる様子がないため、いろいろ試して自力解決しました。

通常通り FirePass で接続後、

`sudo route add -net 0/1 -interface ppp0`

のようにルート情報を手動追加で OK でした。

> 0/1 である必要は特になく、単に Mavericks の時に FirePass が追加していたのが 0/1 だったからです。

## 既存の network と併用したい場合

`sudo route -n add -net A.B.C -interface ppp0`

のように、特定の subnet 向けの通信をルーティングすれば OK です。

> ppp0 の default ルートが追加される場合もあるので、`netstat -rn -f inet` で確認して、存在していたら `sudo route -n delete -net default -ifscope ppp0` をした方がいいかも。

ただし自分の場合は DNS の情報が変更されていて、IP アドレスベースでは接続できるものの名前解決ができず、ホスト名ベースで web や ssh 等が使えませんでした。

dig/nslookup では名前解決できるんですが、何故か ping だと Unknown Host となるので、scutil で DNS の設定を書き換えます。

ここでは 8.8.8.8 (Google の Public DNS) を指定しています。

```commandline
sudo scutil <<EOF
get State:/Network/Service/F5NetworksServicePPP/DNS
d.add ServerAddresses * 8.8.8.8
set State:/Network/Service/F5NetworksServicePPP/DNS
quit
EOF
```

これで VPN 接続しながら、外部ネットワークにも VPN を介さず自由に通信できるようになりました。

> /etc/resolv.conf は見ていないようで、Mac の名前解決の仕組みがいまいち理解できていない。。

ちなみに FirePass ではない場合でも、

```commandline
scutil <<<'list ".*DNS"'
```

とすれば、DNS 系の Key 一覧が取得できるので、

```
scutil
> get [key_name]
> d.show
```

のように設定を確認できます。

## VPN 接続時に自動で設定したい場合

毎回入力するのが面倒であれば、/etc/ppp/ip-up を作成し、

```/etc/ppp/ip-up
#!/bin/sh
if [ "$1" = "ppp0" ]; then
  /sbin/route add -net 0/1 -interface ppp0
fi
```

とかしておくと少しだけ幸せになれるかも。

> 要 chmod 755、複数のVPNを併用している場合はもう少し調整が必要。
CoffeeScriptでファットアローを使用した場合のthisについて


CoffeeScriptでファットアローを使用してthisコンテキストを維持した場合、イベントハンドラ内の関数にthisを引数として渡す方法がよく分からなかったので試してみました。
分かりづらい説明になってしまいましたので、ソースをご確認頂ければと思います。

```coffeescript:hoge.coffee
class Hoge
  constructor: ->
    @button = document.getElementById 'button'
    @attachEvent()

  attachEvent: ->
    @button.addEventListener 'click', => # ファットアローを使用してthisコンテキストを維持
      @addClass(@) # クリックした要素を渡したいが、ここでの@はHogeを指しているため意図しない挙動になる
    , false

  addClass: (target) ->
   target.className = 'is-active'
```

結局、下記のようにeventオブジェクトのcurrentTargetを渡してあげる事で解決しました。

```coffeescript:hoge.coffee
class Hoge
  constructor: ->
    @button = document.getElementById 'button'
    @attachEvent()

  attachEvent: ->
    @button.addEventListener 'click', (e) =>
      @addClass(e.currentTarget) # これでクリックした要素を渡せた
    , false

  addClass: (target) ->
   target.className = 'is-active'
```
PythonとOpenCVでブレ動画を定点カメラっぽくする

# 元ネタ

[手振れ動画を定点カメラっぽく補正した話　OpenCV | デジタルクリエイティブのスーパーソフトウエア東京](http://tokyo.supersoftware.co.jp/code/3242)

風でぶれた定点カメラを補正したかったので検索した所、上記サイトを見つけました。
しかしサンプルコードが見つからなかったのでPythonで書いてみました。

# 使ったもの
- Python 2.7
  + numpy
- OpenCV 3.0.0 beta

# コード
エラー処理とかは一切やってません。
あと、動いたから良いだろ、と思っているので、肝心の関数の使い方が間違ってるかもしれないです。

```py:findTransformECC_test.py
# -*- coding: utf-8 -*-
import cv2
import numpy as np

# FourCC指定
#fourcc = "DIB "
fourcc = "XVID"

# 変換メソッド指定（？）
#warp_type = cv2.MOTION_AFFINE
#warp_type = cv2.MOTION_EUCLIDEAN
#warp_type = cv2.MOTION_TRANSLATION
warp_type = cv2.MOTION_HOMOGRAPHY

# 出力画像を縦横1/2サイズ（面積1/4）に設定
scale = 2

# WarpMatrixと変換関数を設定
if warp_type == cv2.MOTION_HOMOGRAPHY:
    warp = np.eye(3,3,dtype=np.float32)
    warpTransform = cv2.warpPerspective
else:
    warp = np.eye(2,3,dtype=np.float32)
    warpTransform = cv2.warpAffine

# 入力動画
cap = cv2.VideoCapture(r'./test.mp4')

# キャプチャの情報取得し出力情報を作成
fps = cap.get(cv2.CAP_PROP_FPS)
size = cap.get(cv2.CAP_PROP_FRAME_WIDTH), cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
size = tuple(map(lambda x: int(x / scale), size))

# 基準となる画像を取得
ret, base = cap.read()
base = cv2.resize(base, size)
base = cv2.cvtColor(base, cv2.COLOR_BGR2GRAY)

# 出力先
video1 = cv2.VideoWriter("./out1.avi", cv2.VideoWriter_fourcc(*fourcc), fps, size)

while True:

    # フレーム取得
    ret, frame = cap.read()
    if not ret:
        break
    frame = cv2.resize(frame, size)
    tmp = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    cv2.findTransformECC(tmp, base, warp, warp_type)

    # 出力は元画像（カラー画像）
    out = warpTransform(frame, warp, size)

    # 表示かつAVIに出力
    cv2.imshow("", out)
    video1.write(out)

    k = cv2.waitKey(1)
    if k in [27, ord('q')]:
        # ESCかQキー押下で終了
        break

# 解放
cap.release()
video1.release()
cv2.destroyAllWindows()
```

**追記**
`wrap_type`を`warp_type`に直して、`findTransfomrECC`の引数に入れました。
**追記ここまで**

# 嵌まったところ
`import cv2.cv`が使えない（？）のでwarpMatrixのための`cv2.cv.CreateMat`のような、`cv`パッケージを使ったネットのサンプルソースの部分を置換するときに嵌まりました。

## warpMatrix
エラーコード
```warpMatrix must be single-channel floating-point matrix in function cv::findTransformECC```
みてもサッパリ（フロート指定してんだろ！とずっと思ってた）だったのですが、`dtype`指定であっさり。

## FourCC
これもネットだと`cv2.cv.CV_FOURCC`で指定する方法ばかりで使えませんでした。
Vimの補完プラグインNeoCompleteが`VideoWriter_fourcc`を教えてくれなかったらどうなっていたか…
[ここ](http://stackoverflow.com/questions/15584608/python-opencv2-cv2-cv-fourcc-not-working-with-videowriterb)は後になって見つけました。

# まだ気になっていること
- `findTransformECC`の第1、第2引数の関係が逆の様な気がする
    + でも`warpAffine`の引数を考えるとあっている？

# 追加のひと工夫
上記のソースはリサイズこそしてるものの、画像全体を対象にしているので、動く物体が動画に大きく写っていると上手く補正してくれないことがありました。

なので、`findTransformECC`の第1・第2引数に渡す画像を背景の殆ど動かない箇所を選んで`base[:300, :]`, `tmp[:300,:]`な感じでクロップ（トリミング？）してやって、`warpAffine`, `warpPerspective`で変換する時だけもとの画像を使ってやれば劇的に良くなりました。

出力動画もクロップしたものを使えば外側の欠落部分も見えなくなって良い感じになります。

あとは、1日ほっとく場合、最初のフレームじゃなく、直前のフレームを変換したものをベースとしてやれば時間変化に多少強くなるかもしれません。
[Ruby on Rails]MAC開発環境設定 Ruby, Rails, MySQL


##XCODEインストール
1.AppleStoreらXcodeをインストール
2.Command Line Toolsのインストール

*Xcode => Open Developer Tool => More Developer Tools...
*ブラウザが開くので Apple ID を入力してログイン
*許諾契約が表示されるので、チェックを入れて Agree をクリック
*Downloads for Apple Developpers が表示されるので
 Command Line Tools (OS X 10.10) for Xcode - Xcode 6.1 を選択しリンクからダウンロード
*ダウンロードしたファイルを実行してインストール

versionが古い方は下記をご参照ください


##Homebrew

```zsh
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew update
```

##Rubyインストール
1.RVMのインストール

```
git clone --depth 1 git://github.com/wayneeseguin/rvm.git
cd rvm
./install
source ~/.bashrc
```

2.依存パッケージのインストール

```
brew install autoconf automake libtool pkg-config openssl readline libyaml sqlite libxml2 libxslt libksba imagemagick

brew install https://raw.github.com/Homebrew/homebrew-dupes/master/apple-gcc42.rb
```

3.Rubyのインストール

```
rvm install 2.3.1　←ここに入れたいバージョンを書く
rvm --default use 2.3.1 ←ここに入れたいバージョンを書く
rvm list # 確認
```

##MySQLのインストール
1.MySQLのインストール

```
brew install mysql
```

2.MySQL起動

```
mysql.server start
```
3.自動で起動するように設定ファイルをコピー

```
mkdir -p ~/Library/LaunchAgents

cp /usr/local/Cellar/mysql/5.6.23/homebrew.mxcl.mysql.plist ~/Library/LaunchAgents

```

※mysql/5.6.23　←バージョンの番号が入ります
またこれをコピーしてエラーが出てくるという方は、Tabキーを押すと自動的に変換されたり、使えるディレクトリが表示されるのでTabキー活用してください

例
cp /u　ここでTabキーを押すと→ cp /usr　と変換してくれます

4.自動起動の設定ファイルを修正

```
vi ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
```
６行目から

```
<key>KeepAlive</key>
<false/>　←<true/>になっているとおもうので<false/>に直してください
```


5.設定ファイルをロード

```
$ launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
```



今回はローカル向けの設定にしていますので、パスワードは設定していません。もし、Web公開する方は

[開発環境設定](http://qiita.com/YujiMiyashita/items/70b093c8f089fa847879#comment-1cbad748ada11e4abaea)

こちらをご参考ください。
なお、途中までは同じですので、追加されている部分だけ行えば十分です。


##Railsインストール
1.ターミナルで以下のコマンドを実行する

```
gem install rails
```

2.railsコマンドでアプリを作成する

```
rails new taskapp -d=mysql ←作りたいアプリの名前を入力

```

3.必要なパッケージをインストール

```
taskapp ←先ほど作ったアプリ名
bundle install
```

4.サーバー起動　

```
rails s
```

5.ブラウザを開く
chromeを開いて,URLを以下の通りに入れる

```
localhost:3000
```
下記のような画面が出て来れば成功です！
![スクリーンショット 2015-04-06 20.13.46.png](https://qiita-image-store.s3.amazonaws.com/0/74135/0be46e69-b95d-9e1d-1252-fe65c340b338.png "スクリーンショット 2015-04-06 20.13.46.png")





6.サーバーを切る
ターミナルで以下を一緒に押してください

```
control+C
```
async.js を捨てて Promise を使おう！

※ [async.js](https://github.com/caolan/async) が嫌いな訳ではありません。今までお世話になっていました。

Node.js v0.12 から Promise が標準で使えるようになったので async.js の `parallel` や `series` で行っていたことを `Promise` で実現しよう！という趣旨です。

## parallel (並列実行)
```js
var count = 0;
function echo() {
  var cnt = count++;
  return new Promise(function (resolve, reject) {
    setTimeout(function () {
      console.log(cnt);
      resolve(cnt);
    }, Math.random() * 1000);
  });
}

var promises = [echo(), echo(), echo()];

Promise.all(promises).then(function (values) {
  // 成功時処理 (実行順に関わらず values は [0, 1, 2])
  console.log("Succeeded!", values);
}).catch(function (err) {
  // 例外処理
  console.error("Failed.", err);
});
```
シングルスレッドなので正確には並列ではありませんが、処理が終了したものから順に出力されるため、実行する毎に表示される数字の順番が変わります。

## series (直列実行)
```js
var count = 0;
function echo() {
  var cnt = count++;
  return new Promise(function (resolve, reject) {
    setTimeout(function () {
      console.log(cnt);
      resolve(cnt);
    }, Math.random() * 1000);
  });
}

var tasks = [echo, echo, echo];

tasks.reduce(function (a, b) {
  return a.then(b);
}, Promise.resolve(null)).then(function () {
  // 成功時処理
  console.log("Succeeded!");
}).catch(function (err) {
  // 例外処理
  console.error("Failed.", err);
});
```
こちらは、必ず 0, 1, 2 の順に処理が走ります。
前の処理が終わるまで次の関数を評価しない為です。

## まとめ
`Promise` はインスタンスが生成された時点で渡された関数を評価するため、直列実行したい場合は関数でラップする必要があります。

`Array#reduce` メソッドを利用することで、複数の `Promise` を返す関数を纏めて 1 つの `Promise` に集約することが出来ます。
`Array#reduce` の第 2 引数に初期値として `Promise` を渡します。このように記述すると、 `tasks` 配列が空の場合でも正しく処理が進みます。

## 直列実行の際に値を配列で受け取りたい
```js
tasks.reduce(function (a, b) {
  return a.then(function (values) {
    return b().then(function (value) {
      return Promise.resolve(values.concat([value]));
    });
  });
}, Promise.resolve([])).then(function (values) {
  // 成功時処理
  console.log("Succeeded!", values);
}).catch(function (err) {
  // 例外処理
  console.error("Failed.", err);
});
```
そんな需要もあるかと思い、書いておきます。
reduce の中が複雑になりますが、このように記述することで echo 関数に変更を加えずに要件を満たせます。

## 参考
* [Promise - JavaScript | MDN](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Promise)
* [Array.prototype.reduce - JavaScript | MDN](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce)
GitBookの使用例


##GitBookとは

基本的には、ページを`Markdown`で書いて、様々なフォーマットで出力するタイプのWebページ、電子書籍メーカーと言う感じのものです。`node`で作られています。

見た目は、`html,css`などでカスタマイズします。動作の方は、`javascript,jquery`などです。もちろん、`html,css`などは、`slim,sass`などを使っても良いですし、ビルドを簡単にする設定なども書けます。


```bash

  Usage: gitbook [options] [command]

  Commands:

    build [options] [source_dir] Build a gitbook from a directory
    serve [options] [source_dir] Build then serve a gitbook from a directory
    install [options] [source_dir] Install plugins for a book
    pdf [options] [source_dir] Build a gitbook as a PDF
    epub [options] [source_dir] Build a gitbook as a ePub book
    mobi [options] [source_dir] Build a gitbook as a Mobi book
    init [source_dir]      Create files and folders based on contents of SUMMARY.md
    publish [source_dir]   Publish content to the associated gitbook.io book
    git:remote [source_dir] [book_id] Adds a git remote to a book repository

  Options:

    -h, --help     output usage information
    -V, --version  output the version number


```

##GitBook Sample

![](http://lh4.ggpht.com/-vX0PvP1tryo/VSJoLCE1UmI/AAAAAAAAAlg/BMOb9sVObk4/gitbook-training.png)

https://github.com/GitbookIO/gitbook

```bash:
$ sudo npm update

$ sudo npm install gitbook -g
or
$ sudo npm install gitbook-cli -g

$ git clone https://github.com/onigra/gitbook-sample

$ cd gitbook-sample

$ gitbook build

$ gitbook serve
or
$ jekyll server

# Macの場合のプレビュー
$ bash -c "open -a Safari http://localhost:4000"

# Linuxの場合のプレビュー
$ bash -c "firefox localhost:4000"
```

##training

Middlemanのgitbook風のテンプレートもあります。

![](http://lh6.ggpht.com/-LCil9FcRXGM/VSJoKpVtOPI/AAAAAAAAAlk/Vr4dN6JAMmM/gitbook-training.png)

https://github.com/catalyzeio/training

```bash:
$ rvm use 2.0.0

$ git clone https://github.com/catalyzeio/training

$ cd training

$ bundle install

$ middleman server

# Macの場合のプレビュー
$ bash -c "open -a Safari http://localhost:4000"

# Linuxの場合のプレビュー
$ bash -c "firefox localhost:4000"
```

ここで、カスタマイズ例として、モバイルに対応する設定を書いておきます。このままでは、横幅が空白になっているので、場合によっては見づらいかと。

```css:source/assets/css/screen.css.scss#L609
@media (max-width: $tablet-width) {
  .tocify-wrapper {
    left: -$nav-width;

    &.open {
      left: 0;
    }
  }

  .page-wrapper {
    margin-left: 0;
	//ここに追記
    word-break: break-all;
  }
```

もしかすると、何らかの意図があるのかもしれないので、PRは送りません。

https://github.com/catalyzeio/training/blob/2c96c6c6813f0ada61f07d4b0cf8e3888d0a43fa/source/assets/css/screen.css.scss#L609


もし`gitbook`で使いたければ、以下のコマンドです。

```bash:
$ cd old/hipaa.intro/

$ gitbook serve
or
$ gitbook build
$ cd _book
$ jekyll server

# Linuxの場合
$ bash -c "firefox localhost:4000"

$ gitbook build
```

記事を書く時は、`training/old/hipaa.intro/SUMMARY.md`を見て、変更すれば良いと思われます。

ページを公開するには、`gitbook build`で作成された`_book`フォルダをアップロードします。
最強のシェル zsh

LinuxだろうとMacだろうと標準のシェルはbashかと。そこでシェル界最強と言われているzshを標準のシェルにして、更に簡単な設定まで書く。

### まずzshがあることの確認
```
% which zsh
/bin/zsh
```
なければ、homebrewなり、yumなりでインストール。
Macは標準でインストール済のようだが、最新がほしい場合は、homebrewでインストール。
もともとzshがインストールされておらず、新規にインストールした場合は、/etc/shellsにzshへのパスが追加されていることを確認。なければ追加。

### zshを標準シェルにする

```
chsh -s '/bin/zsh'
Changing shell for yourname.
Password for yourname: ********
```

ターミナルを起動し直して、確認。

```
% echo $SHELL
/bin/zsh
```

### 簡単な設定
bashの場合、bash_profileやらbashrcやらがあるが、zshの場合もいろいろ。

|file name|conditions to be applied|
|:--------|:---------|
|$HOME/.zshenv|すべて|
|$HOME/.zprofile|ログインシェルとして起動|
|$HOME/.zshrc|ログインシェルまたはインターラクティブシェルとして起動|
|$HOME/.zlogin|ログインシェルとして起動|

いろいろとあるようだが、個人的にはzshは対話的なシェルとして使うことを求めており、シェルスクリプトだったらbash使うので、とにかく設定は、.zshrcに書いておけばいいと思う。

#### ちなみに設定を書き換えたら

```
% exec zsh
```
source zshでもいいけど、その場合は、新たに追加した内容が反映されるだけで、削除した設定は反映されない。

#### まずプロンプト

ほぼ全部入りにするとこんな感じだが、長い。

```:$HOME/.zshrc
PROMPT="[%n@%m](%*%) %~ $# "
[yourname@hostname](19:22:27) ~/.emacs.d %
```

なので、%#をベース、お好みで、トッピングを追加するのがいいかと。

|symbol|meaning|
|:--------|:---------|
|%#|一般ユーザなら%、スーパーユーザなら#|
|%H|ホスト名|
|%m|ホスト名のうち最初のドットの前まで|
|%d|カレントディレクトリのパス|
|%~|カレントディレクトリのパス(ホームの場合~)|
|%n|ユーザ名|
|%D|年月日|
|%*|時分秒|

僕の場合、vagrantを使った時にどのホストにいるかを知りたいけど、可能な限り短くしたいので

```:$HOME/.zshrc
PROMPT="[%m]%# "
[hostname]% 
```
くらいで十分かと。ただ、時間があると後からうれしいときがあるので、それを右側に出しておけるというのが、zshのいいところ

```:$HOME/.zshrc
PROMPT="[%m]%# "
RPROMPT="%*"
[hostname]%                                          19:32:23
```
もしパスをだしたいなら、どちらかというとRPROMPTに出したほうが邪魔にならなくていい気がする。僕はいらんけど。

#### とりあえず的な基本設定

```:$HOME/.zshrc
# 補完機能
autoload -Uz compinit
compinit

# Emacs風キーバインド viがいいひとは -vで
bindkey -e

# cdとタイプしなくても、移動
setopt AUTO_CD

# cdの履歴を保持（同一のディレクトリは重複排除）
setopt AUTO_PUSHD
setopt PUSHD_IGNORE_DUPS

# コマンド履歴
HISTFILE=~/.zsh_history
HISTSIZE=1000000
SAVEHIST=1000000
```

その他いくらでもあるけど、それらは内容を理解した上で、随時追加していけばいいでしょう。

#### 超便利なエイリアス = グローバルエイリアス
bashのエイリアスは、コマンドのはじめ（一番左）を展開してくれるもの。でもzshは、コマンドの途中でも最後でもなんでもOK!

>> % ls -la | more

とか、しょっちゅうやるけど、" | more"の部分をaliasにできちゃう。

>> % alias -g M=' | more'
>> % ls -la M

という感じで、その他、headだろうが、tailだろうが、それ系のがいろいろ作れる。

```:$HOME/.zshrc
alias ..='cd ..'       <---- setopt AUTO_CDを設定してるので、本当はこれいらいない。
alias ...='cd ../..'
alias ....='cd ../../..'
alias -g M=' | more'
alias -g H=' | head'
alias -g T=' | tail'
alias -g N=' > /dev/null'
alias -g P=' --help | less'
```

### 使い方とかその他
とにかく補完機能がすごい。この設定だけでも、コマンドの引数をタイプする前に、Tabをバシバシ押して、どんな風になるか試すとおもしろい。

設定する項目とかかなり多いし、いちいちそんなの追ってらんねえという場合には、[Oh-My-ZSH!](http://ohmyz.sh/)という便利なものもあるらしい。なんか最初から見た目かっこいいんですけど。
[HTTP2] WindowsServerでHTTP2のベンチマーク

#テストの概要

WindowsServerのTechnicalPreviewのIISでHTTP2が通信できるようなのでテストしてみます。

Azure上にサーバを配置し、ローカルにもWindowsServerを用意します。
レイテンシを計測したいのでサーバーのリージョンは**米国東部(バージニア州)**を選びました。
物理的な距離は1万キロ以上あります。

サーバーには大量の画像データを配置し、バースト的なリクエストに対してHTTP2がどの程度有効かを検証してみます。


#環境

###サーバー
　Windows Server Technical Preview IIS8
　仮想マシンインスタンスは「A2」

![img7.png](https://qiita-image-store.s3.amazonaws.com/0/33116/27d6a22d-81d7-672c-2b89-39c23252c134.png)




###クライアント
　HTTP2 Windows Server Tecnical Preview IE11
　HTTP Windows8.1 IE11


#テストデータ

こちらからサンプルデータを取得しました。
http://www.vision.caltech.edu/Image_Datasets/Caltech101/Caltech101.html
101_ObjectCategories.tar.gz

この中で使う画像データは次のディレクトリのものです。
car_side、airplanes、Faces、Faces_easy、Leopards、Motorbikes、watch


|画像数| 容量 |
|:-----------|---------:|
|3,037ファイル| 55.3 MB |


htmlの内容は次のようなものです。

```
<html>
<head>
</head>
<body>
<h1>HTTP2 TEST</h1>
<img src="img/car_side/image_0001.jpg">
<img src="img/car_side/image_0002.jpg">
<img src="img/car_side/image_0003.jpg">
・・・・・
<img src="img/watch/image_0199.jpg">
<img src="img/watch/image_0200.jpg">
</body>
</html>
```


F12開発者ツールで計測します。
IEのキャッシュは一回毎にクリアしています。

Windows8.1からは確実にHTTP1.1が使われていることを確認しておきます。
![img4.png](https://qiita-image-store.s3.amazonaws.com/0/33116/d96f626c-df12-5056-4ce3-c6f91b88dff6.png)



#結果

|プロトコル| 1回目 | 2回目 | 3回目 | 平均 |
|:-----------:|:------------:|:------------:|:------------:|:------------:|
| HTTP<br>(Windows8.1 IE11) | 83.82秒 | 83.31秒 |82.67秒|83.26秒|
| HTTP2<br>(WindowsServer TecnicalPreview IE11) | 23.51秒 | 25.04秒 |23.40秒|23.98秒|


HTTP2はHTTP1.1に比べて3.47倍のスピード。
HTTPの約28%の時間でコンテンツを取得可能という結果になりました。



HTTP2
![img6.png](https://qiita-image-store.s3.amazonaws.com/0/33116/17b754ab-e211-571d-6ee2-03a0a3cfff98.png)

HTTP1.1
![img3.png](https://qiita-image-store.s3.amazonaws.com/0/33116/1a680335-1d0b-2691-2e34-8ae8a9ad5696.png)


#手順のメモ

Microsoft Azureに「WindowsServer TecnicalPreview」をインストールします。
IISをインストールしてファイアウォールとIEのセキュリティをOFFにします。
Azureポータルの仮想マシンの設定で80番と443番を許可します。
ブラウザから80番の疎通確認をします。
IISの管理画面から自己署名証明書の作成を行い、443に証明書をバインドします。
ブラウザから443番の疎通確認をします。

ローカルのHyper-Vに「Windows Server Tecnical Preview」をインストールします。
自己署名警告は無視します。


#補足

クライアントOSにはWindows10のtecnical Previewを使いたかったのですが、Windows10のIEの開発者ツールはUIが変わっていて、ネットワークの項目に時間が表示されませんでした。したがって、なるべく同じ条件で計測したかったのでクライアントもWindows Serverを使用しました。
# wgetでファイル名が長過ぎるとエラーが出た場合

S3のファイルをLinux上でダウンロードしようと試みたところ、
File name too long というエラーが出てしまった。

そのままだが、ファイル名が長すぎるのだ。

この場合、```-O``` オプションを利用することで、回避可能だ。

```

wget -O ファイル名 http://長いダウンロードURL

```

参考サイト様:
http://blog.rutake.com/blog/techmemo/2007/07/wget.html