OmniAICreator/Qiita-1.07M huggingface dataset:
macOS SierraでJupyter Notebookを使った機械学習環境を手っ取り早く作る手順 with anaconda

# はじめに

以前、UbuntuServerについて同じような記事を書きましたが、macOSでも簡単だったので同じく手順を整理します。

[Ubuntu Server版]
http://qiita.com/mix_dvd/items/29dfb8d47a596b4df36d

# Gitのインストール

バージョンを確認。

```
$ git --version
```

Gitがインストールされていない場合は、以下のようにインストールを求める画面が表示されるので、「インストール」を選択。

![スクリーンショット 2016-07-16 14.33.50.png](https://qiita-image-store.s3.amazonaws.com/0/114240/7cbf63f8-027e-c1da-695a-7ed29fa3eba3.png)

インストールされていればmacOS Sierraの場合、以下のとおり表示されます。

```
git version 2.8.4 (Apple Git-73)
```

# pyenvのインストール

https://github.com/yyuu/pyenv

pyenvは複数バージョンのPythonを一つの環境にインストールするためのツールです。

```
$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(pyenv init -)"' >> ~/.bashrc
$ exit
```

ターミナルを再起動し、バージョンを確認。

```
$ pyenv -v
pyenv 20160629-19-ga761ff6
```

※ もし、pyenvが動作しない場合、ホームディレクトリに「.bash_profile」というファイルを作ってターミナル起動時に「.bashrc」が読み込まれるようにします。

```
$ vi .bash_profile
```

エディタが起動したら「i」キーを押して以下のコードをコピペし、「esc」キーを押して「:wq」と入力して「enter」キーを押すとファイルを保存してエディタが終了します。

```:.bashrc
if [ -f ~/.bashrc ] ; then
. ~/.bashrc
fi
```

# Anacondaのインストール

https://www.continuum.io/why-anaconda

## バージョン確認

インストールできるAnacondaのバージョンを確認。

```
$ pyenv install -l | grep anaconda
```

2016/7/16現在、最新版は4.1.0でした。
Pythonはバージョン2.x系とバージョン3.x系で異なるところが多いため、お使いの環境にあわせて、以下のいずれかをお選びください。特に指定がなければ、3.x系を選んで良いと思います。

## Python 2系

```
$ pyenv install anaconda2-4.1.0
$ pyenv rehash
$ pyenv global anaconda2-4.1.0
$ echo 'export PATH="$PYENV_ROOT/versions/anaconda2-4.1.0/bin/:$PATH"' >> ~/.bashrc
$ exit
```

## Python 3系

```
$ pyenv install anaconda3-4.1.0
$ pyenv rehash
$ pyenv global anaconda3-4.1.0
$ echo 'export PATH="$PYENV_ROOT/versions/anaconda3-4.1.0/bin/:$PATH"' >> ~/.bashrc
$ exit
```

ターミナルを再起動し、Pythonのバージョンを確認。

```
$ python -V
Python 3.5.1 :: Anaconda 4.1.0 (x86_64)
```

# Seabornのインストール

本家サイト https://web.stanford.edu/~mwaskom/software/seaborn/

```
$ pip install seaborn
```

# XGBoostのインストール

本家サイト https://xgboost.readthedocs.io/

参考URL https://xgboost.readthedocs.io/en/latest/build.html#python-package-installation

Mac用のインストール手順
https://github.com/dmlc/xgboost/blob/master/doc/build.md#building-on-osx

Xcodeがインストールされていない場合は、Xcodeをインストール。

Xcodeのインストール後、以下のコマンドを実行。

```
$ git clone --recursive https://github.com/dmlc/xgboost
$ cd xgboost
$ cp make/minimum.mk ./config.mk
$ make -j4
$ cd python-package
$ python setup.py install
```

# matplotlibの日本語環境設定

以下のサイトから4書体パック(Ver.003.03)のフォントファイル「IPAfont00303.zip(19.1 MB)」をダウンロード。

http://ipafont.ipa.go.jp/old/ipafont/download.html

ダウンロード後、以下のコマンドを実行。

```
$ cd Download
$ unzip IPAfont00303.zip
$ mv IPAfont00303/*.ttf ~/.pyenv/versions/anaconda3-4.1.0/lib/python3.5/site-packages/matplotlib/mpl-data/fonts/ttf/
$ rm ~/.matplotlib/fontList.*.cache 
```

# Jupyter Notebook

本家サイト http://jupyter.org

初期ユーザーのホームディレクトリで以下のコマンドを実行。

```
$ jupyter notebook
```

自動的にデフォルトのブラウザが起動し、Jupyterの画面が表示されるはずです。

ただし、ホームディレクトリで起動すると色々と余計なものも見えてしまうし、誤操作の危険があるので、作業用のディレクトリを作って使うことをお勧めします。

```
$ mkdir notebook
$ cd notebook
$ jupiter notebook
```

以上、おつかれさまでした。
Ansibleで「template error while templating string: expected token」というエラーが起こった時の対処方法

## 原因
Capistranoで自動デプロイ環境をAnsibleにて構築していた時、下記の箇所で「template error while templating string: expected token」というエラーが起こった。Ansibleの変数は`{{ 変数名 }}`で参照できるが`{{{ 変数名 }}`となっていたため変数として認識できずエラーを起こしていた。

```rb
role :app, %w{{{ public_user_name }}@localhost}
```

## 解決方法
下記のように`{{{`の箇所を`{{ '{' }}{{`と書き換えることでエスケープして解決出来た。

```rb
role :app, %w{{ '{' }}{{ public_user_name }}@localhost}
```

## 参考
- [Template Designer Documentation](http://jinja.pocoo.org/docs/dev/templates/#escaping)
Mac再インストールと開発環境の再構築

(この記事は、3月頃に書きかけていたものが未公開だったので、もったいないので、とりあえず、公開した感じです、よって、日付の割に内容が古いかも)

PowerBook G4MacBookの環境が長年(10年くらい)の積み上げでグチャグチャになっていたので、1TなSSDへの換装の際に、OSからクリーンインストールすることにした

使用しているMacBookは、13インチのearly 2011と5年落ちのマシン
起動も処理もだいぶ遅くなっていたところ、HDDから以下のSSDは換装して、復活

[Transcend SSD 1TB 2.5インチ SATA3 6Gb/s MLC採用 3年保証 TS1TSSD370S](http://www.amazon.co.jp/gp/product/B00VX82KBK/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=B00VX82KBK&linkCode=as2&tag=0881-22X)
![Transcend SSD 1TB 2.5インチ SATA3 6Gb/s MLC採用 3年保証 TS1TSSD370S](http://ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B00VX82KBK&Format=_SL110_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=0881-22)

クリーンインストールについては...

- 「COMMAND + R + 電源ON」での再インストール

なんだけど、いろいろ面倒でした

購入当初のOSは、Mountain Lionだったと思うのですが、すでにEl Capitanにはアップグレード済みだったのにも関わらず、初回のクリーンインストールでは、Mountain Lionしか選べず... 四苦八苦

結局、初回のクリーンインストールはMountain Lionで行い、直後にEl Capitanにアップグレード、再度、クリーンインストールを試みたらEl Capitanでクリーンインストールできました

~~という謎な挙動で... 結果的には、キレイな状態にはなったものの、なんだかわからず結果オーライという感じでした。~~

追記: 2016-09-21 >>>
コメントで指摘をもらった通り、以前にEl Captianにアップグレードしていたとしても、そのあとにディスクを入れ替えているので、初回のクリーンインストールは工場出荷時の状態なのでMountain Lionだったというのは当たり前の話、ということで不要な部分を打ち消し線でなかったことに...w
<<<

あとは、iTunesの音源とPhotosの画像をTime Machineからデータのみを移行して、以下のアプリケーションを追加インストール

- Dropbox
- 1Password
- Firefox
- Google Chrome
- Keynote
- Pixelmator
- Xcode + Command Line Tools

以下を後から追加

- Clipy(ClipMenuがインストールできなくなっていたので、その代替)
- SourceTree
- Sublime Text 3
- sketch
- Kindle
- slack (App Store)

っで、そろそろ開発環境を整えようとウェブを徘徊して最近の事情を調べてみると...
orz

なんか、ちょっと昔(2-3年前)と様子が変わってきている印象...
どういうことかというと...

- [GitHub - IFTTT/dash: A self-contained, mostly zero-configuration environment for developing containerized applications at IFTTT.](http://ifttt.github.io
https://github.com/IFTTT/dash)

↑これを紹介した以下とか

- [1コマンドでOSXの開発環境を構築する(El Capitan) - Qiita](
http://qiita.com/senyoltw/items/4ed3694a903380119e7d)
- [1コマンドでOSXの開発環境を構築する(El Capitan) - ワタナベ書店
](http://senyoltw.hatenablog.jp/entry/2015/12/19/073837)

(2つリンクを載せましたが、どうやら、同じ人がコピペでポストしたものっぽい)

要は、手作業でのセットアップは、最小限にして、あとは、Ansibleなどを使って自動化しましょうってことのようです

もう少し調べてみると、開発環境だけでなく、Macの環境そのものも、この手の方法で整備している例がチラホラ出てきた

- [OSX の開発環境を Ansible で自動構築する（El Capitan / Yosemite） - Shin x Hatena Blog](http://shin1x1.hatenablog.com/entry/osx-provisioning-with-ansible)
- [Mac の開発環境構築を自動化する (2015 年初旬編) - t-wadaのブログ](http://t-wada.hatenablog.jp/entry/mac-provisioning-by-ansible)
- [HomebrewとAnsibleでMacの開発環境構築を自動化する | Mawatari.jp](http://mawatari.jp/archives/mac-provisioning-by-homebrew-and-ansible)

うぅ〜ん、すでに、幾つか手動でアプリケーションをインストールしちゃったところでこれを見つけてしまったので... どうするかなぁ

少し悩みましたが、とりあえず情報収集だけしておくことにしました。

Ansible使いーの、さらには、その結果をServerspecで検証するとか... 素敵すぎ

- [ServerspecでMacの開発環境をテストする | Mawatari.jp](http://mawatari.jp/archives/testing-mac-with-serverspec)

まぁ、取り敢えず、Mac全体のInfrastructure as Codeは見送りとして、これから開発環境をセットアップするところなので、IFTTTあたりのスクリプトで入れてみようかと思ってはいるものの... 知らないことも多そうなので...

どうも、Ansible以外にDockerを使って、ゴニョゴニョしているようで、その辺りは知識がほとんどないため、事前の勉強が少々必要そうなので、To be continued...
今週仕事などで調べたjavascriptがらみの知識とかサイトとか

JavaScriptはそれほど慣れてないのでいろいろと身に付いている感じがして面白い。

# ブラウザとかそれ以外とか
## 今からでも間に合うDockerの基礎。コンテナとは何か、Dockerfileとは何か。Docker Meetup Tokyo #2
http://www.publickey1.jp/blog/14/dockerdockerfiledocker_meetup_tokyo_2.html

## Chromeブラウザでスーパーリロードする方法
http://kimihiro-n.appspot.com/show/86002

## Web開発でよく使う、特に使えるChromeデベロッパー・ツールの機能
http://www.buildinsider.net/web/chromedevtools/01

## nginx コマンド超シンプル早見表
http://qiita.com/katzueno/items/44e02db2f1bfa0de5860

# javascriptの知識とか

## 即時関数のメリットと主な用途
http://analogic.jp/immediate-function/

## [JavaScript] null とか undefined とか 0 とか 空文字('') とか false とかの判定について
http://qiita.com/phi/items/723aa59851b0716a87e3

## javascriptのデバッグでobjectの中身を文字列として展開する方法
http://www.infoscoop.org/blogjp/2012/05/17/javascript%E3%81%AE%E3%83%87%E3%83%90%E3%83%83%E3%82%B0%E3%81%A7object%E3%81%AE%E4%B8%AD%E8%BA%AB%E3%82%92%E6%96%87%E5%AD%97%E5%88%97%E3%81%A8%E3%81%97%E3%81%A6%E5%B1%95%E9%96%8B%E3%81%99%E3%82%8B/

## JavaScriptで関数が存在するかどうかを確認する
http://d.hatena.ne.jp/replication/20090121/1232465118

## JavaScript のオブジェクトのプロパティ一覧を取得する方法とオブジェクトが指定の名前のプロパティをもっているか検査する方法
http://vividcode.hatenablog.com/entry/js/property-names

## javascriptのオブジェクトに対してプロパティの有無を調べる
http://ficc-workbook.tumblr.com/post/109959498906/javascript%E3%81%AE%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%AB%E5%AF%BE%E3%81%97%E3%81%A6%E3%83%97%E3%83%AD%E3%83%91%E3%83%86%E3%82%A3%E3%81%AE%E6%9C%89%E7%84%A1%E3%82%92%E8%AA%BF%E3%81%B9%E3%82%8B

## JavaScript シングル/ダブルクリックイベントを両方取得する
http://qiita.com/sashim1343/items/e3728bea913cadab677d

## JavaScriptでダブルクリックのイベントを設定する方法
https://syncer.jp/javascript-reverse-reference/double-click-event

## jasmineでHTMLを読み込んでのテスト
http://viewpoint-nk.github.io/blog/jasmine/jasmine-htmltesting.html

## 【JavaScript】Jasmine + JSCoverを使ったテスト駆動開発
https://utage.headwaters.co.jp/blog/?p=4772

## RequireJS使い方メモ
http://qiita.com/opengl-8080/items/196213867b859daea719

# javascript
先月まではJavaやってたのですが、今月から別の仕事になってJavaScriptやってます。
RESTとかJavaScript側でMVCまわすプロジェクトははじめてなので面白いですねー。
try {} catch {}

「例外処理」という予期しない処理（エラー）が発生した時に、実行する処理のこと。

たとえば、
・データベースにアクセスできない
・数値計算でゼロ除算
・ユーザーの入力値が不正
など。

通常、エラーが発生すると、
- PHPのエラーが表示され処理中断
- Warningだけ表示して処理続行
のような処理が行われるが、「例外処理」を設定すると、上記のようなエラー発生時にも処理を中断せず、エラーが発生した場合に実行する処理として指定しておいた例外処理を実行させることができる。

基本的に、
「tryブロック、throw文、catchブロック」という構成を取る。

トライで処理を実行して、エラーが発生したら例外をスロウ（投げる）して、投げられた例外をキャッチして例外時の処理を実行する。

具体的な処理方法は、以下のページに分かりやすい解説が掲載されている。

http://www.phppro.jp/phptips/archives/vol45/2

http://www.shigeweb.jp/php/project_p/?page=exception&section=php5oop

＊　スローされるオブジェクトは、[Exception クラス](http://php.net/manual/ja/class.exception.php)あるいは Exception のサブクラスのインスタンスでなければなりません。 それ以外のオブジェクトをスローしようとすると PHP の Fatal Error が発生します。
さくらのクラウドのコンパネから個人情報をマスクするブックマークレット作った

最近業務上さくらのクラウドのコントロールパネルのキャプチャを取得することが多いのですが、コントロールパネルにはサーバの契約IDとかIPアドレスとかそのまま第三者に見せたくない項目もあります。
で、いつもはスクリーンキャプチャを行った後、GIMPなどでモザイク処理をしていたわけです。（あとはブラウザのデバッガでHTMLを直編集とか…）

#ブックマークレット

頻度も増えてきてすこぶるめんどくさいので、ブックマークレットを作成しワンクリックで置換できるようしてみました。
何をしているかというとコントロールパネル上に表示されている文字列を置換しているという内容です。
* 12桁の数値（契約ID）= すべて9にする
* IPアドレス = すべて＊にする
* さくらインターネット会員ID = zzz99999にする
文字列を見て判断しているのでサーバ名や説明欄にIPアドレスが記載されている場合にはそちらも置換されてしますがご愛嬌で;-p


![キャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/100935/848e29f3-6768-7330-e155-0a8806312353.png)


```
javascript:(function(){document.body.innerHTML = document.body.innerHTML.replace(/[\d]{12}/g, '999999999999').replace(/[\d]{1,3}(\.[\d]{1,3}){3}/g, '***.***.***.***').replace(/[a-z]{3}[\d]{5}/g, 'zzz99999');})();
```

これをブラウザのブックマーク画面から登録すると出来上がり。

#実際に使ってみた

![as.PNG](https://qiita-image-store.s3.amazonaws.com/0/100935/31693f17-7298-3d62-e800-b2f9825bd21e.png)
サーバのリソースIDと会員IDが変わってることに注目

![an.PNG](https://qiita-image-store.s3.amazonaws.com/0/100935/d12db29d-63d8-c3c1-8bee-c4ccb678c2fd.png)
ネットワーク画面に出ているIPアドレスがマスクされていることに注目
ちょっとやり過ぎちゃってますが、その部分はご愛嬌で;p

これでスクリーンキャプチャ作業が捗ります。


#注意事項

* これは野良で作ったブックマークレットなので利用はご自身の責任で。
* これをさくらのクラウドのコントロールパネル上で実行すると、コントロールパネル内のボタンが押せなくなります。その場合にはブラウザのリロードを行ってください。
* 2016年7月現在動作確認を行っておりますが、今後動作するかどうか分かりません。
* MAP画面では動作しません。（誰か動くように改修を…）
less で検索時のスクロール位置を下にずらす

`-j` で `Target lines:` と聞かれるので `20` などと行数を入力する。

検索にヒットした行の前後を見ながらスクロールしたい時に使う。

## 例
以下のようなテキストで `ccc` を検索した場合、

```
aaa
bbb
ccc
ddd
eee
:
```

デフォルトだとヒットした行が1番上に来て、上の行が隠れてしまう。

```
ccc ←
ddd
eee
:
```

`-j 1` で1行下にずれるようになる。

```
bbb
ccc ←
ddd
eee
:
```

`n` キーで次の検索位置に移動しても有効。
SendGridでテキストメッセージ送信のタイプは（text/plain）を指定する。

nodejsで[npm sendgrid](https://www.npmjs.com/package/sendgrid)を使用し書いているときに、少しはまったのでメモ。

charsetをつけてtypeを指定すると、受信側の環境によっては、添付ファイルとして本文を受信してしまいます。Gmailなど。

```
var content = new helper.Content("text/plain: charset=UTF-8", '本文');
```

なので、次のようにテキストメッセージを送りたいだけの場合、`text/plain`と書けばOKです。

```
var content = new helper.Content("text/plain", '本文');
```

typeの指定は、`text/plain`か`text/html`を書くようにしたほうがよさそうです。
https://sendgrid.com/docs/API_Reference/Web_API_v3/Mail/index.html
charasetは場合に応じてつけても良いかもしれません。
CommonLisp + Quicklisp + cl-project で自作モジュール作成


# 何の記事？

CommonLispで自作モジュールを作ります。
モジュールのロードにQuicklispと、
モジュールの雛型を作るためにcl-projectを使用します。

[Quicklispで自作モジュールを使用する](http://qiita.com/tamurashingo@github/items/0284c086c51e12e29240)という記事をみて、
すごく助かった＋cl-project使うと楽かも？とおもったので書いてみました。

基本的にはcl-project使って雛形を作ることを楽にするということと、
Quicklispあたりの使い方の説明も含めてかいてみたいと思います。

# 対象とする人
* SBCL(Steel Bank Common Lisp)でLisp始めたはいいけどモジュールのつくり方がわからん。
* なんかASDFとかいうの出てきたけどよくわからん。

って人たち

# 環境
* OS : Windows 10 x64
* 処理系 : Steel Bank Common Lisp 1.2.15

# 準備
※SBCLがインストール済みであることを前提とします。

## Quicklispのインストール

[QuicklispのWebサイト](https://www.quicklisp.org/beta/)からquicklisp.lispをダウンロードしてきて、
REPLを起動して以下を実行します。

quicklisp.lispをロードします。

```shell-session
(load "quicklisp.lisp")
```

Quicklispをインストールします。

```shell-session
(quicklisp-quickstart:install)
``` 

REPL起動時にquicklispが自動でロードされるようにします。

```shell-session
(ql:add-to-init-file)
``` 
    
# モジュール作成

## 雛形の作成とQuicklispへの登録

cl-projectをQuicklispを使ってロードします。

```shell-session
(ql:quickload :cl-project)
```

カレントディレクトリのmylibにモジュールの雛形を作成します。

```shell-session
(cl-project:make-project #p"mylib/")
```

Quicklispをインストールすると C:\Users\[ユーザ名]\quicklisp\local-projectsという
ディレクトリができていると思います、ここに先ほど作成した雛形をmylibフォルダごと移動します。
なかったら```ql:*quicklisp-home*```をREPLで評価してQuicklispがどこを見に行くか
調べましょう。

※ここからは元ネタの記事とほぼ同じです
モジュールをlocal-projectsに登録します。

```shell-session
(ql:register-local-projects)
```

ここまででQuicklispから自作モジュールがロードできるようになっているはずです。
一度REPLを再起動して試してみましょう。

```shell-session
(ql:quickload :mylib)
```

以下のような感じになればOKです。

```shell-session
* (ql:quickload :mylib)
To load "mylib":
  Load 1 ASDF system:
    mylib
; Loading "mylib"

(:MYLIB)
```

## 使ってみる

作成した雛形のmylib/srcにmylib.lispというファイルがあります。
ここにユーザ定義関数など書いていきます。

```cl:mylib/src/mylib.lisp
(in-package :cl-user)
(defpackage mylib
  (:use :cl))
(in-package :mylib)

;; blah blah blah.
```

以下のように書き換えます。
```foo```という関数を定義してexportして```(mylib:foo)```という形で
呼び出せるようにしています。

```cl:mylib/src/mylib.lisp
(in-package :cl-user)
(defpackage mylib
  (:use :cl)
  (:export :foo))
(in-package :mylib)

(defun foo ()
  (format t "foo called ~%")) 
```

モジュールを再読み込みして

```shell-session
(ql:quickload :mylib)
```

定義した関数を呼び出します。

```shell-session
(mylib:foo)
```

以下のようになればOKです。

```shell-session
* (ql:quickload :mylib)
To load "mylib":
  Load 1 ASDF system:
    mylib
; Loading "mylib"
[package mylib]
(:MYLIB)
* (mylib:foo)
foo called
NIL
*
```

# まとめ

Lisp関連の日本語の情報ってのはとても少ないので、
あたりまえに知られているだろうと思うようなことでも他の人には
役に立つことがあります。（特に私みたいなはじめたばっかの人間にはね）

Lispの記事がたくさん増えてLisp使う人が増えてくれるといいなぁ
【2016年7月第3週】今週の気になるWebデザイン　

# まず、はじめに。
本来であれば、以下の様なことをしっかりと考えるべきです。

```
どうやったら使いやすいかな…。どうやったら私たちが提供したい「体験」をしてもらえるのか…。
利用するユーザーさんはどんなシーンで、どのように操作するだろう…。その時に求めているものは何なのか…。
このペルソナ（大きく言うとターゲット）に対しては、こういう設計がいいのか…ダメなのか…。
私たちのWebサイトのゴールである地点まで行ってくれるのか…。（コンバージョンしてくれるのか。）
```
しかし、私はこの記事では単純に「いいな！」と思ったデザインを取り上げていきます。
どういうところがいいと思ったのかを添えて、色んなWebサイトをストックしていきます。

# 1.東京メトロ「すすメトロ！」（[→サイトを見る](http://www.tokyometro.jp/susumetro/)）
##ファーストビューはこんな感じ
**パソコンでの見え方**
![c199d77b755e2144e3abb0f9f1d29e4f.png](https://qiita-image-store.s3.amazonaws.com/0/75705/4df8c2b3-038e-48ed-ad1d-8e82b08dc474.png)
##ここが、いいね！
#####固定概念を壊している点
鉄道会社の安全対策などの取り組みをこういったデザイン、手法で広報しているところがいいなーと思いました。
こういう情報って硬い表現になりがちというか、かしこまった感じが多いですよね。
そんな中で、誰もが親しみやすいキャラクターを取り入れて、伝わりやすい工夫をしている点がすごくいいなーって思いました。

#####メニューのデザイン
メニューボタンを押した時の動きや表示のされ方、どちらもいいなぁと思いました。
一般的に、右から左にスライドしてメニューが表示されたり、モーダルウィンドウのような感じで、Webサイトを覆い隠すようなタイプが多いですが、ドアが閉まるような感じの表示方法で面白いですよね。
それに、メニューを開くと、縦幅Maxでナビゲーションを表示している点もあまりなく面白いと思いました。これにより、Webサイトのイメージと合っています。
どんなWebサイトを作る時も使えるデザインではないと思いますが、使えるときには使ってみたいですね。


# 2.不二食品（[→サイトを見る](http://fujishokuhin.jp/)）
##ファーストビューはこんな感じ
**パソコンでの見え方**
![6086ffd14dd6a35b199b7d5ab3c1d667.png](https://qiita-image-store.s3.amazonaws.com/0/75705/bf7e0979-d2a6-ce1b-a04a-fe8008cf1e38.png)

##ここが、いいね！
#####余白の使い方
全体的にすごく綺麗な余白の使い方をしている印象です。
#####色使いがすごく綺麗
配色もすごくいいですよね。不二食品さんの商品が埋もれてしまわない、いや引き立てるくらいの感じですよね。
それに、和のオシャレさが表現されていてすごくいいです。
#####縦書き文字の使い方、明朝体の使い方
実はかなり表現するのが難しいこの2つ。これを何の違和感もなく、サイトに溶け込ませているのはテクニックですよね。



# 3.株式会社パム（[→サイトを見る](https://www.pam.co.jp/)）
##ファーストビューはこんな感じ
**パソコンでの見え方**
![b49cc346b10fbdcb3e8ea447230ece3c.png](https://qiita-image-store.s3.amazonaws.com/0/75705/ec2aff93-c2f0-a294-3abc-80607a83e936.png)

##ここが、いいね！
#####何の会社なのか分かりやすい！
シンプルに訴えかけてくれます。”「目的地」から旅を面白くする会社”だとダイレクトに書かれているので、とてもわかりやすいですね。
ファーストビューでしっかりと見えます。
#####Webサイトも”面白い”
言葉だけではなく、Webサイトも楽しいですよね。海や川など水をイメージするようなデザインで、スクロールすると波のように動きます。
こういう表現の方法もいいですね！
#####持っているメディアがすぐに分かる。
ありがちなのが、この会社ってどんなサービスをしているんだろうということです。
でも、このWebサイトなら”パムのメディア”という風にトップページに分かりやすく記載されているので、探すことなく知ることが出来ます。



##まとめ
今週は3つのサイトをピックアップして、どこがいいなぁーと思ったのか、自分なりの感想を書かせていただきました。
Webサイトを作成していて、困ったことがあった時、少しでも参考になるストックとなれば幸いです。
次週も是非ご覧ください！
ObjectSpace.memsize_of

http://stackoverflow.com/questions/10068018/memory-size-of-a-hash-or-other-object

http://stackoverflow.com/questions/16456513/size-of-class-in-bytes


```rb
[2] pry(main)> require 'objspace'
=> true
[3] pry(main)> p ObjectSpace.memsize_of("a" * 23)
0
=> 0
[4] pry(main)> p ObjectSpace.memsize_of("a" * 24)
24
=> 24
```

strings can be embedded in an RString structure if they are short, but stored in the heap if they are long (Never create Ruby strings longer than 23 characters).
Quick + Nimble で APIKit の非同期テストを書く

API をモックして非同期テスト書こうとしたらちょっとハマったのでメモ。
APIKit の使い方とか Quick, Nimble の書き方はググってください。

## Versions

* Xcode 7.3.1
* Swift 2.2
* Quick 0.9.2
* Nimble 4.1.0
* OHHTTPStubs 5.1.0
* APIKit 2.0.3

## コード

```
import Quick
import Nimble
import APIKit
import OHHTTPStubs
@testable import your_project

class LoginRequestSpec: QuickSpec {
  override func spec() {
    describe("LoginRequest") {
      beforeEach {
        stub(isHost("example.com")) { _ in
          // 想定されるレスポンスの json を同階層に設置する
          let stubPath = OHPathForFile("OK.json", self.dynamicType)
          return fixture(stubPath!, headers: ["Content-Type": "application/json"])
        }
      }
      afterEach {
        OHHTTPStubs.removeAllStubs()
      }

      context("when Login OK") {
        it("return OK") {
          let request = LoginRequest(authId: "id", password: "pw")
          var okResult = ""
          waitUntil { done in
            Session.sendRequest(request) { result in
              switch result {
              case .Success(let loginResul):
                okResult = loginResult
              case .Failure(_):
                break
              }
              expect(okResult).to(equal("OK"))
              done()
            }
          }
        }
      }
    }
  }
}
```

### ポイント

1. `OHHTTPStubs` で Response をモックする。
2. `Session.sendRequest` を `waitUntil` で囲む。
    * 最初 `toEventually` を使ってたらうまくいかずハマった...
3. テストが完了したら `done()` を呼ぶ。

これでテストが通るはず！
Xamarin.Forms MasterDetailPage の Master の幅を可変にする (iOS 編)

MasterDetailPage で表示される Master の幅はサイズが固定になっています。
これを UI 側から変更できるような仕組みが欲しいと思い、MasterDetailPage の拡張クラスを作成しました。

完成イメージはこちら
![Simulator Screen Shot 2016.07.16 12.15.48.png](https://qiita-image-store.s3.amazonaws.com/0/4407/cc951428-4102-f9e0-5093-3c92b1edd6af.png)

![Simulator Screen Shot 2016.07.16 12.16.04.png](https://qiita-image-store.s3.amazonaws.com/0/4407/b0920c69-ea25-b589-d5c9-13919315a378.png)

###MasterDetail クラスを拡張
標準で幅を変更するためのプロパティが提供されていないため、MasterDetailPage クラスを継承し、プロパティを追加します。

```csharp
public static readonly BindableProperty MasterFractionProperty =
    BindableProperty.Create(
        propertyName: nameof(MasterFraction),
        returnType: typeof(double),
        declaringType: typeof(VariableMasterDetailPage),
        defaultValue: 0.0,
        defaultBindingMode: BindingMode.TwoWay,
        propertyChanged: OnMasterFractionChanged);
                                
public double MasterFraction
{
    get { return (double)GetValue(MasterFractionProperty); }
    set { SetValue(MasterFractionProperty, value); }
}

protected static void OnMasterFractionChanged(BindableObject bindable, object oldValue, object newValue)
{
    var page = (VariableMasterDetailPage)bindable;

    var newFraction = (double)newValue;
    if (newFraction < page.MinimumFraction || page.MaximumFraction < newFraction)
        throw new ArgumentOutOfRangeException();

    var oldFraction = (double)oldValue;
    if (oldFraction.Equals(newFraction) == false)
    {
        page.MasterFraction = newFraction;
        page.OnPropertyChanged(nameof(page.MasterFraction));
    }
}
```

###CustomRenderer
TabletMasterDetailRenderer を継承した CustomRenderer を iOS のプロジェクトに追加します。MaximumPrimaryColumnWidth を変更しておくのがポイント。

```csharp
using System;
using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;
using UIKit;
using VariableMaster;
using VariableMaster.Controls;
using VariableMaster.iOS;

[assembly: ExportRenderer(typeof(VariableMasterDetailPage), typeof(VarriableMasterDetailPageRenderer))]

namespace VariableMaster.iOS
{
    public class VarriableMasterDetailPageRenderer : TabletMasterDetailRenderer
    {
        protected override void OnElementChanged(VisualElementChangedEventArgs e)
        {
            var page = e.NewElement as VariableMasterDetailPage;
            if (page != null)
            {
                page.PropertyChanged += (sender, args) =>
                {
                    if (args.PropertyName == "MasterFraction")
                    {
                        MaximumPrimaryColumnWidth = (nfloat)(page.Width * page.MasterFraction / 100);
                        PreferredPrimaryColumnWidthFraction = (nfloat)page.MasterFraction / 100;
                    }
                };
            }

            base.OnElementChanged(e);
        }
    }
}
```

全体のソースコードはこちらのリポジトリを参照してください。おかしなところがあれば PR よろしくお願いします。
https://github.com/smallgeek/VariableMaster
Swiftで競技プログラミングを実際にやってみたところ予想以上につまづいた話

# きっかけ
朝方、なんとなくAtCoderをみてみたところSwiftが使えるようになっていたことに気付いたので早速ABCの問題をSwiftで解いてみることにしました。そのときめちゃくちゃつまづいたのでそれをまとめます。

ちなみに４月に関連した記事を書いているのでそちらもどうぞ

- [Swiftで競技プログラミング](http://qiita.com/touyoubuntu/items/1d8a9c00a283e98bc8e4)

# つまづいたとこ
## 手元でテストが出来ない問題
まず第一の問題としてOS Xでは`Darwin`、Linuxでは`Glibc`と異なる標準ライブラリを使わなければいけないので、手元でも実行しようとすると当然こういうのを毎回書かなければなりません。

```swift
#if os(Linux)
    import Glibc
#else
    import Darwin
#endif
```

そしてなんとか実行出来るようになったのはいいのですが、`swift file.swift`がコンパイルエラーはすぐに出すのになかなか実行ファイルをつくるのが遅い...というかもはや固まったみたいになって全然出来る気配がないので、結局AtCoderのコードテスト機能を使うほかなくなってしまいました。

## Paizaで実行できてたはずのテンプレートがいろんな要素で動かない問題
Paizaのコンパイルエラーを通ったような気がする４月につくったテンプレートを動かしてみたところ、めちゃくちゃ怒られました。
### substringWithRangeなんてないよ
こちらOS Xなら普通に使えるはずのStringのメソッドですが、Linux環境では無いと怒られ使えませんでした。。。
### Range<T>のTちゃんと定義して
これは僕の知識不足なところもあるのですが、最初

```swift
var indices: Range {
    return self.characters.indices
}
```

とStringのextensionに書いていたら怒られました。正しくは

```swift
var indices: Range<String.CharacterView.Index> {
    return self.characters.indices
}
```

## いろんな実装がめんどくさい問題
テンプレートに普通の言語ならいらないようなこと一杯書いているあたりからお察しなのですが、いろんな実装がかなりめんどくさいです。
### 入力をするためにはStringのextension文書かなきゃ不便
Swiftの入力は`readLine()`関数なんですが、これ空白区切りなどを入力するときは`split()`が必須ですよね。ですがこれは`CollectionType`のもっているメソッドなので必ず

```swift
extension String: CollectionType {}
```

とかかなくてはなりません。
### Stringのsubscriptの仕様めんどくさい
いちおう上とあわせてテンプレートで解決していることは解決しているんですが、`s[i]`といったようなアクセスの仕方がString型の場合非常にめんどくさいです。以下のように書きます。

```swift
s[s.startIndex.advancedBy(i)]
```
### Optionalが返ってくるところと普通に返ってくるところに見分けがむずかしい
Xcode使えって話になってしまうのですが、他のエディタを使っていると当然その関数の仕様とか見ることはできません。なのでおなじ`Int()`関数でも使うところによってOptional返したり返さなかったりですごく面倒でした。

## 地味に標準ライブラリが遅い問題
これが一番でした。問題となったのは`sortInPlace`というソート関数です。

ABC#041のCの問題、ネタバレしてしまうとMapやらDictionaryで対応表をつくっておいて背の順にソートして出力するというのがシンプルかつおそらく模範解答です。

実際C++やHaskell、Python、Javaといろんな言語で書かれていますがみんな一様にそれぞれの言語のライブラリにあるソート関数をつかってACしていました。


僕も例にもれず、Swiftで以下のような感じに実装しました。

```swift
#if os(Linux)
    import Glibc
#else
    import Darwin
#endif
extension String: CollectionType {}
 
var N: Int = Int(readLine()!)!
var a: [Int] = readLine()!.split(" ").map { Int($0)! }
var res = Dictionary<Int, Int>()
 
for i in 0 ..< N {
    res[a[i]] = i+1
}
 
a.sortInPlace(>)
 
for i in 0 ..< N {
    print(res[a[i]]!)
}
```

~~ですが、返ってきたのはTLE。たしかにほとんどのケースはACしているのですがおそらく入力がとても大きいケース四つでTLEをおこしてしまったのです。~~

~~PythonやHaskellにさえ負けてしまうって一体なんのアルゴリズム使っているんですかね...Swift Algorithm Clubの人にsort関数のプルリク送ってもらいたいです......~~

ここのTLEの原因はAtCoder側が最適化オプションをなにも設定していないせいでした。語弊があったので修正しておきます。monoさん情報提供ありがとうございました！

# 結論
Swiftで競技プログラミングやるの、とてもつらいものがあるということが分かってしまいました。よっぽどの変わり者でない限り、たとえSwiftしか書けない人でもC++とかを勉強して書くほうが楽なのではないかなと思います。

まぁでもSwiftの言語自体の勉強にはなると思うので興味あるかたがぜひAtCoderやPaizaにチャレンジしてみてください！
GitLabのS3 Backupでbackup_keep_timeが機能しない件への暫定対応

# About

GitLabにはバックアップの仕組みが標準で備わっており、[クラウドストレージへのバックアップ機能](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/raketasks/backup_restore.md#upload-backups-to-remote-cloud-storage)を利用すれば、S3等のクラウドストレージに簡単にバックアップを保存できます。

非常に便利な機能なのですが、バックアップ先がクラウドストレージの場合、`backup_keep_time`の設定が機能しないらしく、バックアップファイルが日々増えていき、場合によっては無駄な課金が発生することになります。

# 暫定対応

暫定的な対応として、バックアップファイル数を一定数に保つbashスクリプトをcronで定期実行することにしました。AWS CLIがインストールされていることを前提としています。

あとはGitLab側の対応を待つことにします。。。

```bash
#!/bin/bash

# Set your credentials if you want to configure locally.
#export AWS_ACCESS_KEY_ID=PUT_YOUR_ACCESS_KEY
#export AWS_SECRET_ACCESS_KEY=PUT_YOUR_SECRET_ACCESS_KEY
#export AWS_DEFAULT_REGION=ap-northeast-1

S3_BUCKET=PUT_YOUR_BACKET_NAME
NUM_TO_KEEP_BACKUP=7

files=(`aws s3 ls s3://${S3_BUCKET} | sort -nr | awk '{print $4}'`)

for ((i = 0; i < ${#files[@]}; ++i)); do
  if test $i -ge $NUM_TO_KEEP_BACKUP; then
    aws s3 rm s3://${S3_BUCKET}/${files[$i]}
  fi
done
```
Zybo > ZedBoard Y9に対応するPS CLK出力ピンが分からない

```txt:動作確認
Vivado 2015.4 on Windows 8.1 pro(64bit)
```

http://qiita.com/7of9/items/ec1a0048e69e74adc39a
にて実装したClock Dividerを試そうとした。

http://zynqhowto.blogspot.jp/2014/03/zynq-how-to.html
のLab1.pdfが元資料だが、こちらはZedBoardを使用している。

Zedboardの場合
http://zedboard.org/sites/default/files/documentations/ZedBoard_HW_UG_v2_2.pdf
の2.5 Clock sources に以下のようにあり、Y9を使うことでPS CLKを入力に使える。

> An on-board 100 MHz oscillator, IC17, Fox 767-100-136, supplies the PL subsystem clock input on bank 13, pin Y9.

一方で、ZYBOの場合は以下の資料を見たがPS CLKのピンがはっきりしない。
http://www.xilinx.com/support/documentation/university/XUP%20Boards/XUPZYBO/documentation/ZYBO_RM_B_V6.pdf

Block DesignでFCLK_CLK0やM_AXI_***CLK**などを使えばいいのだろうが、Create Block Designで作成していないVHDL実装の場合、I/Oポートタブで割り当てるPS CLK対応のピンが分からない。

関連するかわからないが
http://stackoverflow.com/questions/29309257/xilinx-ise-board-trying-to-make-two-clocks-zybo-fpga
> There is one external reference clock (125 MHz) and 4 internal reference clocks from the ARM part. These 4 clocks are not accessable as a real pin but via the ARM-FPGA bridge. If I'm right this component in called PS7.
Zybo / VHDL > Clock Divider > VHDL実装 / Run Simulation

```txt:動作環境
Vivado 2015.4 on Windows 8.1 pro (64bit)
```

http://zynqhowto.blogspot.jp/2014/03/zynq-how-to.html
のLab1.pdfを参考にClock DividerのVHDLファイルとテストベンチを試している。

### UniClkDiv.vhd

VHDL実装の記述(UniClkDiv.vhd)はBehavioralのend;が抜けているため、そのままの実装だとエラーとなる。以下のように最後の行(`end;`)を追加した。

```UniClkDiv.vhd
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;

entity clk_gen is
port(   Clk : in std_logic;
        Clk_mod : out std_logic
        );
end clk_gen;

architecture Behavioral of clk_gen is
    signal counter : integer := 0;
    constant divide : integer := 100;
begin
    process(Clk)
    begin
        if( rising_edge(Clk) ) then
            if(counter < divide/2 - 1) then
                counter <= counter + 1;
                Clk_mod <= '1';
            elsif(counter < divide - 1) then
                counter <= counter + 1;
                Clk_mod <= '0';
            else
                Clk_mod <= '1';
                counter <= 0;
            end if;
        end if;
    end process;   
end;
```

### テストベンチ

テストベンチ側は画像のソースそのままでも問題なかった。

```vhdl:testbench.tb
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;

entity testbench IS
end testbench;

architecture behavior of testbench IS
    signal clk, clk_mod : std_logic;
    constant clk_period : time := 10 ns;
begin
-- Component Instantiation
uut: entity work.clk_gen PORT MAP (
    clk => clk,
    clk_mod => clk_mod);
clk_process : process -- generate a 100 MHz Clock.
begin
    clk <= '0';
    wait for clk_period/2; -- for 5 ns signal is '0'.
    clk <= '1';
    wait for clk_period/2; -- for next 5 ns signal is '1'.
end process;
end;
```

### 実行

Run Simulationを実行したところ、以下のようになった。

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/f03ec276-7449-5db9-8025-187cf530ff62.png)

5nsごとにH/L切替えのclkに対してclk_modは100分周して500nsのところでH/L切替えしているので、Clock Dividerとして動作しているようだ。
Spring4を使ってみる。DIしてみる

## Springおじさんにならなくては

お仕事でSpringを使っていく風潮が出てきたので、設定とかアノテーションとかをさらっておこうと思います。

SpringといえばDIコンテナ！らしいので、ControllerクラスからServiceクラスをDIで呼び出してJSONで表示してみます。

## 前回まで
[bootした](http://qiita.com/TatsuyaYamamoto/items/0ecbb1ed4c3cbfe41691)

## サービスクラス

```UserService.java
@Service
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public class UserService {

    public User getById(String id){
        User user = new User();
        user.setId(id);
        return user;
    }
}
```

``` user.java
// 適当なbean
public class User {
    @Getter
    @Setter
    private String id;
}
```

- @Service
    - サービスクラスを宣言するアノテーション
    - @Componentやら@Reponsitoryやら色々あるみたいだけれど、そのクラスの説明的に使い分けるだけで実態はあまり変わらないらしい
- @Scope
    - @Service、、というかSpringのDIはシングルトンがデフォルトらしい
    - ConfigurableBeanFactoryクラスから定数でscopeを指定できる
    - prototype
        - beanのインジェクションごとに毎回newする
    - request
        - リクエスト毎にインスタンスを使い回す
    - session
        - セッションの範囲でインスタンスを使い回す




## サービス使うクラス

```
@RestController
@RequestMapping("/api/users")
public class UserRestController {

    @Autowired
    UserService userService;

    @RequestMapping(
            value = "/",
            method = RequestMethod.GET,
            produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public List<User> getUsers(){
        List<User> users = new ArrayList();
        users.add(userService.getById("minami kotori"));
        users.add(userService.getById("kita kotori"));
        users.add(userService.getById("higashi kotori"));
        users.add(userService.getById("nishi kotori"));
        return users;
    }
}
```

- @Autowired
    - @Component(今回は@Service)がアノテートされているクラス群の中から、型一致するものを自動でインジェクションしてくれる
    - interfaceを用意しててDIの候補が複数ある場合は、@Component("hogehoge")で名前を付けて、@Qualifierでその名前を指定してあげるみたい

## とりあえず実行
```bash
$ gradle bootRun
```

![スクリーンショット 2016-07-16 11.17.47.png](https://qiita-image-store.s3.amazonaws.com/0/55826/61eeaa93-d873-6861-6a0c-db8bd9b7949e.png)

やったー！（・８・）





## おまけ

ホットデプロイなるものが出来るらしいので試してみた


### 依存関係

```
compile group: 'org.springframework', name: 'springloaded', version: '1.2.6.RELEASE'
```
### でぶろい！

あとはbootRunしたままソースコードをコンパイルしてあげるだけ！簡単かよ！
C#:フィボナッチ数列を列挙する


## フィボナッチ数の定義

n番目のフィボナッチ数をf(n)とすると、以下のように表せます。

<pre>
f(0) = 0,
f(1) = 1,
f(n) = f(n-1) + f(n-2) 　　　//  (n ≧ 2)
</pre>

  
フィボナッチ数列の詳しい説明については、Wikipediaの[こちら](https://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A3%E3%83%9C%E3%83%8A%E3%83%83%E3%83%81%E6%95%B0)のページをみてください。



## 遅すぎる再帰版のC#のコード

まずは、フォボナッチ数の定義をそのまま、以下のように書いてみました。


```csharp:FiboRecursive.cs
  public static long Fibo(int n) {
      if (n == 0)
          return 0;
      if (n == 1)
          return 1;
      return Fibo(n - 1) + Fibo(n - 2);
  }
```

なんてシンプルで美しいんでしょう。

しかし、このメソッド使って、フィボナッチ数列を列挙しようとすると、とんでもなく遅いです。

```csharp:FiboRecursiveMain.cs
  // f(0)..f(50)までを列挙する
  for (int i = 0; i <= 50; i++) {
      Console.WriteLine(Fibo(i));
  }
```


上のコードを実行すると、どんどん列挙が遅くなり、50番目のフィボナッチ数の計算の時には、無限ループしちゃったのかな？と思うくらい結果が返ってきません。

## 高速化したC#のコード

ということで、もっと速く求められるようにしたのが、以下のコードです。
何番目かを表すnを与える方法から、フィボナッチ数をどんどん列挙する方法に変更しました。


## C#のコード
```csharp:Fibonacci.cs
using System;
using System.Collections.Generic;
using System.Linq;

namespace Gushwell.Etude {
    class Program {
        static void Main(string[] args) {
            // f(0)..f(50)までを列挙する
            var fibos = Fibonacci.Enumerate()
                                 .Select((Value, Index) => new { Index, Value })
                                 .TakeWhile(x => x.Index <= 50);
            foreach (var f in fibos) {
                Console.WriteLine($"f({f.Index}) = {f.Value}");
            }
        }
    }

    static class Fibonacci {
        public static IEnumerable<long> Enumerate() {
            yield return 0;
            yield return 1;
            // 無限に求める オーバーフローは無視
            long[] array = new long[] { 0, 1 };
            while (true) {
                var fibo = array[0] + array[1];
                array[0] = array[1];
                array[1] = fibo;
                yield return fibo;
            }
        }
    }
}
```

フィボナッチ数を求めるには、2つ前までの数字を覚えていればよいので、配列の要素数は２つだけ用意しています。
C#のyield return を使っています。yield return本当に便利です。

ところで、LINQってインデックス扱おうとおもった瞬間、ダメな子になるのが玉に瑕です。まあ、LINQはそれを補ってあまりある魅力があるから良しとしましょう。

[GitHub](https://github.com/gushwell/CSharpAlgorithmCollection)でコードを公開しています。

##実行結果

上のコードの実行結果です。

<pre>
f(0) = 0
f(1) = 1
f(2) = 1
f(3) = 2
f(4) = 3
f(5) = 5
f(6) = 8
f(7) = 13
f(8) = 21
f(9) = 34
f(10) = 55
f(11) = 89
f(12) = 144
f(13) = 233
f(14) = 377
f(15) = 610
f(16) = 987
f(17) = 1597
f(18) = 2584
f(19) = 4181
f(20) = 6765
f(21) = 10946
f(22) = 17711
f(23) = 28657
f(24) = 46368
f(25) = 75025
f(26) = 121393
f(27) = 196418
f(28) = 317811
f(29) = 514229
f(30) = 832040
f(31) = 1346269
f(32) = 2178309
f(33) = 3524578
f(34) = 5702887
f(35) = 9227465
f(36) = 14930352
f(37) = 24157817
f(38) = 39088169
f(39) = 63245986
f(40) = 102334155
f(41) = 165580141
f(42) = 267914296
f(43) = 433494437
f(44) = 701408733
f(45) = 1134903170
f(46) = 1836311903
f(47) = 2971215073
f(48) = 4807526976
f(49) = 7778742049
f(50) = 12586269025
</pre>


いやー、あっと言う間に、Int32の上限を超えちゃうんですね。びっくりです。ということは、すぐにlongの最大値も超えちゃいますね。f(200)とか求めたかったら、BigInteger使わないとだめそうですね。

--------------------------------------------
この記事は、Gushwell's C# Programming Pageで公開したものを加筆・修正したものです。
Raspberry Pi から cloud9 にデータを送信できない時


#解決すべき課題
RPi上のスクリプトで集めたデータ([こんな実装です](https://github.com/UedaTakeyuki/slider))、をサーバで受けて監視するような([ちなみにこんな実装です](https://github.com/UedaTakeyuki/monitor))　アプリケーションの ***サーバ側を cloud9 上で開発***しようとしたら RPi のデータが cloud9 に届かない

#原因
ドキュメントをいろいろと見たりぐぐったりしたのだけどそれらしいのがみあたらない。「cloud9 にログインしている ip adress 以外をブロックしてるのかな？」と仮説をたて、検証を試みる

#対策
RPi の epiphany で cloud9 にログインしてからスクリプトを走らせてみると

![スクリーンショット 2016-07-16 10.53.12.png](https://qiita-image-store.s3.amazonaws.com/0/46544/a18899b0-d4fc-dc81-25aa-b31f5513d7d7.png "スクリーンショット 2016-07-16 10.53.12.png")

無事にデータが届きました
![スクリーンショット 2016-07-16 11.05.50.png](https://qiita-image-store.s3.amazonaws.com/0/46544/ce6ce617-b7c4-592a-499b-33737398c692.png "スクリーンショット 2016-07-16 11.05.50.png")

#結論
仮説は肯定的に検証されたと思う
会社のITはエンジニアに任せるな！読了

現在、ユーザ企業の業務刷新プロジェクトの開発工程が
僕の主な業務であり、
少しでもうまいことプロジェクトを運ぶために
どうすればいいか知りたくて読んでみた。

[会社のITはエンジニアに任せるな！](https://www.amazon.co.jp/%E4%BC%9A%E7%A4%BE%E3%81%AEIT%E3%81%AF%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%81%AB%E4%BB%BB%E3%81%9B%E3%82%8B%E3%81%AA-%E2%80%95%E2%80%95%E2%80%95%E6%88%90%E5%8A%9F%E7%8E%8795-6-%E3%81%AE%E3%82%B3%E3%83%B3%E3%82%B5%E3%83%AB%E3%82%BF%E3%83%B3%E3%83%88%E3%81%8CIT%E5%AB%8C%E3%81%84%E3%81%AE%E7%A4%BE%E9%95%B7%E3%81%AB%E6%95%99%E3%81%88%E3%81%A6%E3%81%84%E3%82%8B%E3%81%93%E3%81%A8-%E7%99%BD%E5%B7%9D-%E5%85%8B/dp/4478067589)

著者は白川 克さん、ITコンサルタントで、
彼のブログ記事は[ここから](http://blogs.itmedia.co.jp/magic/)読める。
で、この本はユーザ企業向けの本である。

内容をざっくると、
世の中には二種類のITがあり、

- ツール型IT:業務と関節的に関わるIT(メール、チャットソフト等)
- プラント型IT:会社の業務そのものと密着したIT(販売管理システム、生産管理システム等)

プラント型ITの開発は経営、業務部門、IT部門が密に連携しないと
うまくいかない、というもの。

読んでの感想なんだけど、
正直かなり気が滅入る本だった。
内容が悪いという訳ではなくて、
**業務系プロジェクトの成否はかなり発注側に依存する
(受注側のITスキルは業務系プロジェクトにおいては重要でない時がある)**、
という現実が突きつけられ無力感が半端なかったからだ。
ユーザ企業向けの本だから、当たり前なんだけど。。

気が滅入ったがしかし、ベンダー企業で働く僕からすると、
ユーザ企業からはITがどういう風に見えるか、というのは実に面白かった。

仮にユーザ企業が会社を合併する意思決定をしたとする。
そこから、ITでは、仕訳データ、在庫データ...etcのデータ統合が発生し、
結果一年程度かかる。
これは全ての統合手続きの中で一番時間のかかる作業となりうる。
(これは仮定の話だが、こういうことはままあるような気がする。)

とすると、ユーザ企業において、経営判断が効果を上げるスピードは、
その会社のITが整うスピードとイコールである。
つまり、**ユーザ企業にとってはITはボトルネックである。**
これはベンダー企業にとっては想像しにくい部分ではないかと思う。

その他、なんというか、あーこういうお客さんだったら
絶対プロジェクト進めやすいわーということばかりで、
ユーザ企業が全部この本を読んでくれたらな〜。。。
と思う一冊でした。。。
Java SE Development Kit(JDK)のインストール

# インストーラのダウンロードサイト
Java SE Development Kit(以後JDK)は更新が頻繁なので最新のものを検索サイトで探すことをお勧めします。
セキュリティホールがあるので、基本は最新のものをインストールしましょう。
![3-2_Win.png](https://qiita-image-store.s3.amazonaws.com/0/119242/ae7f6ed3-213d-6f38-2c6a-1f68f6a448cb.png)

# インストーラの選択
## 1. 検索サイトの結果からダウンロードサイトを表示。
マイナーアップデートが存在している場合があるので、一応スクロールしてみてマイナーアップデートの存在を確認。
「Accept license Agreement」をチェックして、インストール先のマシンに合わせてリンクを選択するとインストーラのダウンロードが開始される。
![3-3_Win.png](https://qiita-image-store.s3.amazonaws.com/0/119242/512d7920-3e35-bcdc-1f8d-705941af2e1f.png)
　　　　　　　　　　　　　　　　　　　　:
![3-4_Win.png](https://qiita-image-store.s3.amazonaws.com/0/119242/52a66be8-a897-9e9b-36b1-da2aa4bd6e8c.png)

## 2. インストーラをダウンロードした後、それを起動し、「次」を選択。<br>
![3-5_Win.png](https://qiita-image-store.s3.amazonaws.com/0/119242/78586f1f-8ec2-1805-2627-018b35f6a93f.png)

## 3. インストール先のフォルダとインストールする機能の確認が表示されるので、特に希望がなければそのままの状態で、「次」ボタンを選択。<br>
![3-6_Win.png](https://qiita-image-store.s3.amazonaws.com/0/119242/d29cdd55-8ad1-218a-96b9-24270ebcb125.png)

## 4. JDKインストールが開始されるので、暫く待つ。<br>
![3-7_Win.png](https://qiita-image-store.s3.amazonaws.com/0/119242/0c9af590-1ea3-38f6-84b6-6db3a84c24ca.png)

## 5. 一緒にインストールされる「Java SE Runtime Environment(以後JRE)」の保存先の確認が表示されるので、特に希望がなければそのままの状態で、「次」ボタンを選択。<br>
![3-8_Win.png](https://qiita-image-store.s3.amazonaws.com/0/119242/2ac3b3d9-3f3c-851c-2712-50e54dddc25e.png)

## 6. JREのインストールが開始されるので、暫く待つ。<br>
![3-9_Win.png](https://qiita-image-store.s3.amazonaws.com/0/119242/6c9098ce-aa7c-8807-d0fc-b908ee00c515.png)

## 7. JDKとJREのインストールが完了したので、「閉じる」ボタンを選択。<br>
![3-10_Win.png](https://qiita-image-store.s3.amazonaws.com/0/119242/58ae3185-de06-4182-3709-a22d12137b9f.png)
Zybo / Vivado > IP > 定数を与える > Add IP: Constant

```txt:動作環境
Vivado 2015.4 on Windows 8.1 pro(64bit)
```

以下のLab2.pdfにおいてClock DividerのIPを使用している例がある。
http://zynqhowto.blogspot.jp/2014/03/blog-post.html

Clock Dividerの分周率を与える時にIPにて定数を与えることができるようだ。

Add IPにてSearchキーワードとしてconstantとするとConstantというIPが見つかる。

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/edee9479-5b11-c705-edbe-e2e64204fc1a.png)

Re-customize IPにおいてWidthとValが設定できる。

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/a8e99bf3-3f47-7213-30de-d9135588206c.png)
IntelliJですばやくLaravel環境を構築する

【参考】
[IntelliJですばやくPHP開発環境を構築する](http://www.noraneko.works/activity/64955c57f95bc89dedcd)
↑の記事でPHPの環境自体はほとんどOK。

## IntellijでPHPプロジェクトを作成する
### 前提
  * phpプラグインが入っている事
  * php5.6.23をinstall済み

### 新規プロジェクトの作成
Create New Project -> PHP -> Composer Project　を選択する。
![newProject1.png](https://qiita-image-store.s3.amazonaws.com/0/128306/58eb5ccc-d902-28bc-8622-f6ee0afd29e8.png)

Project nameなどを適宜入力
Packageにてlaravel/laravelを検索してv5.2.31を選択
Path to PHP executableにinstall済みのphpパスを入力（php5.6を選択）
Finish!!!

![newProject.png](https://qiita-image-store.s3.amazonaws.com/0/128306/722a1747-1a64-e9f8-b938-88e5eedddda2.png)

### サーバ起動
作成したプロジェクトのディレクトリに移動し、サーバ起動

```
$ cd ~/work/hello-laravel/
$ php artisan serve
Laravel development server started on http://localhost:8000/

```

localhost:8000にアクセスすると
![laravel.png](https://qiita-image-store.s3.amazonaws.com/0/128306/c512b61b-c07e-43b9-968f-b1e59574af59.png)

とりあえず初期表示OK！

今回はここまで。
MacOSXでdir /b（1行1ファイル、ファイル名のみ出力）するにはls -1すれば良い

## 課題
- Windowsのコマンドプロンプトでは```dir /b```するとファイル名のみのリスト（１行1ファイル）が簡単に作れる
- lsだと意外と難しい → ```ls -l```すると余計な属性が山程出力
- findすれば良いというのはこの際置いておく

つまりこんな感じ。

```bash
ls
# hoge1 hoge2 hoge3

ls -1
# hoge1
# hoge2
# hoge3
```

ちなみに```ls -2```すると２列で表示されるとおもいきやエラー。

```bash
ls -2
# ls: illegal option -- 2
# usage: ls [-ABCFGHLOPRSTUWabcdefghiklmnopqrstuwx1] [file ...]
```

しっかりオプションに```1```があるのがわかる。

## findを使った例
ただしオプションちゃんと付けないとサブディレクトリの内容とか、パスとか色々出力される。

```bash
find .
# .
# ./hoge1
# ./hoge2
# ./hoge3
```

ワイルドカードを使うと```ls -1```とほぼ同等。

```bash
find *
# hoge1
# hoge2
# hoge3
```

## 結論
やっぱり```ls -1```便利。
[Ruby] `->`記法についての公式説明

ruby1.9で導入された`->`で記述するラムダ記法を説明する公式ドキュメントは[ココ](http://docs.ruby-lang.org/ja/2.3.0/doc/symref.html#rangl)

>
  ->(a,b){ p [a,b] }
  Ruby1.9 で導入された lambda の新しい記法。以下と同じ。
  `lambda{|a, b| p [a, b] }`
JavaScriptに代表されるプロトタイプ言語には（本来）クラス→インスタンスという概念は無い

## 大事な点

- プロトタイプ言語ではクラス→インスタンスの関係はない
- すべてがオブジェクトみたいなもの（プリミティブ型を除く）
- オブジェクトが親オブジェクト的なものをプロトタイプという概念で保持
- 自分にメッセージの応答（プロパティやメソッドの定義）がなければ、自分が保持するプロトタイプに同様のメッセージを転送する。

つまりこんな感じ。

```js:Main.js
// 適当なオブジェクトを３つ作成
var a = new Object;
var b = new Object;
var c = new Object;

// aにメッセージ応答を定義
a.hoge = "hoge";

// bとｃにプロトタイプをセット
b.__proto__ = a;
c.__proto__ = a;

// メッセージ送信
console.log(a.hoge); // "hoge" // 当然a.hogeが呼び出される
console.log(b.hoge); // "hoge" // b.__proto__.hogeに転送
console.log(c.hoge); // "hoge" // c.__proto__.hogeに転送
```

## 結論
- JavaScriptに代表されるプロトタイプ言語にはクラス→インスタンスという概念は無い
- クラス→インスタンス的な概念は、共通処理を実装したオブジェクトを、各オブジェクトのプロトタイプにセット（共有）して利用する
- new Object的なものは結局指定された定数をプロトタイプにセットしたオブジェクトを返すだけ（その後コンストラクタも呼び出すけど）

## 参考
- IO言語とか調べるとわかりやすい、スロットの概念とか
- ７つの言語 ７つの世界 Bruce A. Tate http://www.amazon.co.jp/dp/4274068579
raspiに新しいnode.jsを入れた

参考サイトに感謝
http://make.kosakalab.com/make/electronic-work/nodejs_raspi/

参考サイトどおりに実行。
現在の最新版はv6.3.0でした。僕はこれをインストールしました。

１）まずは、デフォルトで入ってる古いバージョンをアンインストール。
>sudo apt-get autoremove nodejs


２）そして新しいnodejsのインストール

>sudo mkdir /usr/local/nvm
>sudo chmod 777 /usr/local/nvm
>git clone https://github.com/creationix/nvm.git /usr/local/nvm
>source /usr/local/nvm/nvm.sh
>nvm ls-remote
>nvm install v6.3.0

３） /etc/profile.d/nvm.sh の設定

sudo nano /etc/profile.d/nvm.sh などで、次の行を追加

>source /usr/local/nvm/nvm.sh

４）sudo visudo の設定

次の行をコメントアウト
>　#Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin

次の行を追加
>　Defaults    env_keep += "PATH"

以上かな。

-------------------
その他）

現在のnodejsのバージョンを調べる
> node -v

最新版のnodejsの調べ方は
> nvm ls-remote
exceljsが急に動かなくなった話

Node.jsでExcel読み込みをする実装を終え、サーバーで起動させてみたところエラーが発生。
ローカルでは元気に動いてたじゃない。
# 環境
Node v6.2.2
npm 3.10.6
exceljs 0.2.8

# 現象

Node.jsの実装抜粋

```
var excel = require('exceljs');
var workbook = new excel.Workbook();

workbook.xlsx.readFile(targetExcelPath).then(function () {
    workbook.eachSheet(function (sheet, sheetId) {
        // 実装
    });
});
```

発生したエラー抜粋

```throw new Error('Unexpected xml node in parseOpen: ' + JSON.stringify(node));
          ^
Error: Unexpected xml node in parseOpen: {"name":"cp:lastPrinted","attributes":{},"isSelfClosing":false}```

Unexpected xml？
もう一度、ローカルで資源を最新化して動作確認すると同じエラーが再現。
いやいやいや、さっきまで元気に動いてたじゃない。
Excelの読み込み部分は修正していないし、読み込んでいるファイルも変えていない。

# 原因
exceljsに何かが起こったとしか考えられないのでpackage.jsonを確認。
```  "dependencies": {
    "exceljs": "^0.2.8"
  },```

インストールされているexceljsのVersionを確認すると
`exceljs@0.2.10`
リビジョン２つも上がっとる。。。(2016/07/14時点)
# 対応
package.jsonを修正し、ライブラリのVersionを0.2.8固定で指定する。
```  "dependencies": {
    "exceljs": "0.2.8"
  },```

`npm install exceljs`
でexceljsをインストールし直すと元気を取り戻してくれた。

`npm install exceljs --save`
でpackage.jsonに追加された事で満足して
`^`がマイナーバージョンの更新を自動で取り込む、という意味を理解していなかったのが悪いのだが
リビジョンが変わるだけでこんな根本的な部分が動かなくなるのは想定外過ぎた。
Twitterからキーワード検索して画像を取得する



タイトルの通り、Twitterの検索APIを利用して、特定のキーワードの画像をダウンロードするためのスクリプトになります。

https://github.com/Code-Hex/twippai
参考にしたのはここ。

実行環境
OS：OX X EI Capitan(10.11.5)
Python:2.7.10

標準ライブラリの他に、こららのインストールする必要があります。
requests
requests_oauthlib

```Python
#!/usr/bin/env/python
# coding: utf-8

import os
import json
import time
import requests
from hashlib import md5
from requests_oauthlib import OAuth1

def md5hex(str):
	a = md5()
	a.update(str)
	return a.hexdigest()
	
folder = './data'

#パスが存在していればTrueを返す
path = os.path.exists(folder)

if not path:
	os.mkdir(folder)

consumer_key = ''#your key
consumer_secret = ''#your key
access_token = ''#your key
access_token_secret = ''#your key

#Twitter APIについて以下参照
#https://syncer.jp/twitter-api-matome/get/search/tweets
url = 'https://api.twitter.com/1.1/search/tweets.json'
oauth = OAuth1(consumer_key,consumer_secret,
				access_token,access_token_secret)
				#署名メソッドの指定。なくても動いた
				#signaturemethod = 'HMAC-SHA1')
				
idnum = ''
count = 1
while count <= 10:
	#Twitterの検索演算子も使える
		query_form = {'q' : u'メタモン filter:images min_retweets:1',
										'lang' : 'ja',
										'count' : 100,
										'result_type' : 'recent',
										'max_id' : idnum}
		uri = requests.get(url, auth = oauth, params = query_form)
		json_loads = json.loads(uri.content)
		
		
		for data in json_loads['statuses']:
			if 'media' not in data['entities']:
				continue
			else:
				urls = data['entities']['media']
				media_urls = urls[0]['media_url']#画像のURLを取得
				downloads = requests.get(media_urls).content #画像のDL
				print media_urls + " " + str([count])
			#％sは文字列として置換
			
			#URLを16進数形式の文字列に返して、ファイル名としている?
			filename = '%s.jpg' % md5hex(urls[0]['media_url'])
			filepath = '%s/%s' % (folder, filename)
			
			images = open(filepath, 'wb')
			images.write(downloads)
			images.close()
			count += 1
		idum = data['id']
		time.sleep(1)
```
Honchoを使ってマルチプロセスのDockerコンテナを作る

Dockerの公式ドキュメントには[Supervisorを使うマルチプロセスの例](https://docs.docker.com/engine/admin/using_supervisord/)が紹介されていますが、最近「[Honcho](https://github.com/nickstenning/honcho)も良いよ」という内容のポスト(例えば[こちら](https://blog.codeship.com/using-honcho-create-multi-process-docker-container/))をいくつか見かけたので試してみました。

僕のポストでは、ApacheとMonitをHonchoで起動して、Apacheのリソース消費をMonitがログに残してくれる、というシンプルな例を紹介します。

## 必要な設定ファイルを準備する

下記の通り`Dockerfile`、`Procfile`、`monitrc`の３つのファイルを準備します。

**Dockerfile**

```
FROM ubuntu:16.04
MAINTAINER examples@docker.com

RUN apt-get update && \
    apt-get install -y apache2 monit python-pip && \
    apt-get clean && pip install honcho && \
    mkdir -p /var/lock/apache2 /var/run/apache2

COPY Procfile /Procfile
COPY monitrc /etc/monit/monitrc
RUN chown root:root /etc/monit/monitrc && chmod 700 /etc/monit/monitrc

EXPOSE 80
CMD ["/usr/local/bin/honcho", "start"]
```

**Procfile**

```
apache2: /bin/bash -c "source /etc/apache2/envvars && exec /usr/sbin/apache2 -DFOREGROUND"
monit: /usr/bin/monit -vI
```
**monitrc**

```
set daemon 10             # check services at 10-second intervals
set logfile /var/log/monit.log
set idfile /var/lib/monit/id
set statefile /var/lib/monit/state
set eventqueue
    basedir /var/lib/monit/events # set the base directory where events will be stored
    slots 100                     # optionally limit the queue size

check process apache with pidfile /var/run/apache2/apache2.pid
    if cpu > 90% for 2 cycles then alert
    if memory > 50 MB then alert
```

## イメージをビルドしてコンテナを起動する

```
docker build -t honcho .
docker run --rm -p 80:80 -it honcho
```

デモ用なのでMonitをverboseモードで起動して、監視のインターバルも１０秒と短めに設定してあります。うまく起動していれば下記のように１０秒毎にCPUとメモリの消費量が表示されます。

```
 :
 :
 :
00:14:23 monit.1   | -------------------------------------------------------------------------------
00:14:23 monit.1   | pidfile '/run/monit.pid' does not exist
00:14:23 monit.1   | Starting Monit 5.16 daemon
00:14:23 monit.1   | 'bfa699f1b07f' Monit 5.16 started
00:14:23 monit.1   | Processing postponed events queue
00:14:23 monit.1   | 'apache' process is running with pid 12
00:14:23 monit.1   | 'apache' zombie check succeeded
00:14:23 monit.1   | 'apache' mem amount check succeeded [current mem amount=4.8 MB]
00:14:23 monit.1   | 'apache' cpu usage check succeeded [current cpu usage=0.0%]
```

Honchoって名前が良いですね。
Oracle10g以降のexpdp、impdpコマンド


# はじめに

DBのテーブル＆レコードのバックアップ方法として 「expdp」と「impdp」コマンド使用を推奨されて調査しました。<br>
Windows → linux間で行いました。

Oracle自体のメジャーバージョンが新しい程、コマンドの引数の種類が増えています。

# 更新履歴

|日付|内容|
|:--|:--|
|2016.07.18|初版|
|2018.11.14|Oracle18cを調査|

# 発端

（１） 古いデータが大量に本番環境に存在しており、データを圧迫している。  
けれどもレコードとしては何年間は保存しておかなければならない。

（２） 本番環境からレコードを抽出し、外部サーバーに保存。  
何かあった時のためにDBにインポートし、SQLでレコードを検索できるようにする。

（３） バックアップが出来るのであれば本番環境の古いレコードは削除する。

# 必須環境

Windows → linux間でコマンド叩けるツール ： Teraterm<br>
OracleにSQLを発行するブラウザ : ObjectBrowser<br>
LinuxでORACLE_HOMEが環境パスに設定されているかつファイルの書き込み権限のあるユーザー

# 初めての手順

## 下準備

（１）エクスポート条件を「.par」ファイルに記述する<br>
（２）外部サーバーへのインポート条件を「.par」ファイルに記述する<br>
（３）本番サーバーへのインポート条件を「.par」ファイルに記述する<br>
（４）ObjectBrowserから「CREATE DIRECTORY」と、「GRANT READ, WRITE ON DIRECTORY」を発行する。<br>
（５）本番環境にエクスポート条件の記述された「.par」ファイルとインポート条件の「.par」ファイルを送信しておく。

## エクスポート

（１）本番環境にTeratermで接続する。<br>
（２）「expdp ユーザー名/パスワード parfile=''」<br>
（３）完了メッセージを確認する。

## 本番環境のレコード削除(TRUNCATE後のインポート)

（１）本番環境にTeratermに接続する。<br>
（２）「impdp ユーザー名/パスワード parfile=''」<br>
（３）完了メッセージを確認する。<br>
（４）ObjectBrowserから「ALTER INDEX REBUILD」を発行し、インデックスの再構築を行う  
（５）統計情報の更新を行う  
（６）oracle再起動を行う

## 別サーバーへのインポート

後日追記します。

# .parファイル

## エクスポート用

オプション     | 振る舞い
:-------- | :-------------------------
CONTENT   | エクスポート操作でロードする内容をフィルタ処理できる
LOGFILE   | エクスポート時のログ結果を残しておく為に指定しておく
DUMPFILE  | エクスポートしたダンプファイルの名前を指定しておく
DIRECTORY | ダンプファイルやログファイルの置き場所を指定しておく
TABLES    | 抽出するテーブルの名前を指定しておく

## 本番環境のレコード削除用

オプション               | 振る舞い
:------------------ | :-------------------------
CONTENT             | インポート操作でロードする内容をフィルタ処理できる
LOGFILE             | インポート時のログ結果を残しておく為に指定しておく
DUMPFILE            | インポートするダンプファイルの名前を指定しておく
DIRECTORY           | ダンプファイルやログファイルの置き場所を指定しておく
QUERY               | インポート条件を記述する
TABLE_EXISTS_ACTION | テーブルが存在する時の動作を指定石ます


# コマンド発行時の注意

大量データの処理中はもちろん、結果が返ってくるのに時間がかかる。<br>
引数に「STATUS＝integer」を与えると、コマンドラインに処理中の状況が逐一表示される。<br>
コマンドライン上で「Ctrl + z」等で処理を中断しても、実はoracleのjobの中で動作しているらしい。<br>
間違ってコマンドラインを閉じてしまった時は再度「expdp」「impdp」コマンドを叩き、<br>
その引数に実行中のjobを指定し「kill_job」を行う。<br>
jobの名称は「JOB_NAME」として引数に設定できる。<br>
また、データベースに色々登録されるらしい。

# 2018.11.14 Add

当コマンド群を「Datapump」と呼ぶらしい。
また、Oracle18cからは管理ツールからDatapumpが実行できるようになったので、
めんどくさいコマンド発行等は簡易化されています。