OmniAICreator/Qiita-1.07M huggingface dataset:
photoshopのパネルが隠れてしまう問題

# photoshopをディスプレイ２枚で利用しているときにパネルが画面上部に食い込みいじれなくなる問題

photoshop [cs6 cc]で確認

![display.png](https://qiita-image-store.s3.amazonaws.com/0/30301/8f49bfc2-eb8d-0d12-3a71-1b3b828a2c97.png)
画像の右のディスプレイにphotoshopがあってパネルは切り離して配置して利用しています。
いずれかのタイミングでディスプレイを接続をするとパネルの上部が隠れてパネルにさわることができなくなりました。ディスプレイをつないでいるコードの抜き差しをするとなおるけど毎回面倒。
ディスプレイは左右の移動で違和感がないように同じ高さになるように並べていましたがどうもそれが原因みたいでした。
<img width="571" alt="スクリーンショット 2016-12-07 12.07.20.png" src="https://qiita-image-store.s3.amazonaws.com/0/30301/a7356b49-1597-e7bc-1bdc-4a7db5174ade.png">
このように並べてもちょうどパネルを動かすためのメニューバーの部分が隠れてしまいました。
<img width="572" alt="スクリーンショット 2016-12-07 12.07.39.png" src="https://qiita-image-store.s3.amazonaws.com/0/30301/09d522f6-70d4-c36c-6598-24a6db234501.png">
こうするといつつないでも問題なくなりました。誰か他に良い方法を知っている人おしえて。
[iOS]MetalでGPUコンピューティング(4) MTKView


この記事は、Metal Advent Calendar2016の7日目の記事です。

これまで、MetalのGPUコンピューティングについて解説記事を書いてきました。
[[iOS] MetalでGPUコンピューティング (1)](http://qiita.com/yuky_az/items/ece9b64befc635e89f1a)
[[iOS] MetalでGPUコンピューティング (2)](http://qiita.com/yuky_az/items/ce5920f28c08e743418b#_reference-cc4434da198d861bba61)
[[iOS] MetalでGPUコンピューティング (3)](http://qiita.com/yuky_az/items/1992daff208223468e70)
 本記事では、前回に引き続きAppleが提供するサンプルコードの解説を行います。

扱うサンプルコードは、前回と同じ[ライフゲーム](https://ja.wikipedia.org/wiki/%E3%83%A9%E3%82%A4%E3%83%95%E3%82%B2%E3%83%BC%E3%83%A0)のアプリ、MetalGameOfLifeです。
 [MetalGameOfLife](https://developer.apple.com/library/content/samplecode/MetalGameOfLife/Introduction/Intro.html)

![IMG_5933.PNG](https://qiita-image-store.s3.amazonaws.com/0/35297/fa9b4e62-91a6-83fb-c60c-3666fc44fdf1.png "IMG_5933.PNG")
（実行画面）

今回は、GPUコンピューティングとは少々離れるのですが、サンプルコード内の[MTKView](https://developer.apple.com/reference/metalkit/mtkview)について解説を行います。
MTKViewはMetalKitフレームワークに含まれるUIViewを継承したクラスで、比較的シンプルな方法でMetalによる描画を行うことができます。
MTLViewは、以下の3つの描画モードがあります。

1. 内部のタイマーによる自動的な再描画（デフォルト）
2. setNeedDisplayを呼び出すことによる描画
3. MTKViewのdrawメソッドによる描画 

このサンプルコードでは、デフォルトである1.のモードを用いています。

前回の繰り返しになるのですが、このサンプルコードは、主に以下のファイルで構成されています。

AAPLRender.h
AAPLRender.m
AAPLViewController.h
AAPLViewController.m
Sharder.metal

このうち、AAPLRender.mには並列コンピューティング及び描画のCPU側のロジックが、Shader.metalには頂点シェーダー、フラグメントシェーダー、GPUコンピューティング用のシェーダーが書かれています。

ここからは、サンプルコード内におけるMTKViewの使用箇所を解説していきます。
StoryboardのCustum ClassにMTKViewを設定した上で、AAPLViewController.mに以下の記述があります。

```Objective-C:AAPLViewController.m
self.metalView = (MTKView *)self.view;    
...
self.metalView.device = MTLCreateSystemDefaultDevice();
```

MTLCreateSystemDefaultDevice()はMTLDeviceプロトコルに従うオブジェクトを返しますが、MTKViewのオブジェクトはMetal関連のオブジェクトを作成したりコントロールするためにこれを必要とします。

続いて、AAPLRender.m側のコードです。

```Objective-C:AAPLRender.m
MTLRenderPassDescriptor *renderPassDescriptor = self.view.currentRenderPassDescriptor;   
...
[commandBuffer presentDrawable:self.view.currentDrawable];
```

MTLRenderPassDescriptorオブジェクトの取得と、描画領域(currentDrawable)の取得に用いています。
MTLRenderPassDescriptorはコマンドエンコーダーを生成するための、テクスチャなどのアタッチメントを格納しています。コマンドエンコーダーについては後ほど解説します。

下記はMTLViewによって呼び出されるデリゲートメソッドです。

```Objective-C:AAPLRender.m
- (void)mtkView:(nonnull MTKView *)view drawableSizeWillChange:(CGSize)size
//描画領域変更時の処理
}  
...
- (void)drawInMTKView:(nonnull MTKView *)view
{
//描画毎の処理
}
```

画面の再描画が要求されるたびに、デリゲートメソッドであるdrawInMTKView:が呼ばれるか、MTKViewのサブクラスのdrawRect:メソッドが呼ばれます。これらのうち、どちらかを実装する必要があります。

今回はライフゲームのサンプルコード内におけるMTKViewの解説を行いました。
次回以降、さらに他の箇所についての解説を行なっていきます。
Jenkins Blue Ocean betaプラグインを試す

2016/04/20にjenkinsのメジャーバージョンアップがされて約8ヶ月経ちました。
jenkins2.0は1.0の時にあったworkflow-plugin郡をPipelineという機能名で正式に組み込んだのが一つの目玉でした。
とはいえworkflow-pluginは1.0の時から使っていたので、個人的に2.0になっても大きな変化はありませんでした。(互換性を保つという話でしたしね)

ですが今回、大きな変化が生まれようとしています。
当時から話にあったBlueOceanというプロジェクトで、今までのjenkinsからUIを一新するという思い切ったものです。
これのbeta版がpluginでインストールできるようになったので入れてみました。

---

## jenkins バージョン

* 2.35 (Weekly Release)

## 準備

基本的には https://jenkins.io/projects/blueocean/ に必要なことは書いてあるので読んでください。
これの「Use the beta」という項目の通りに作業を進めます。

![jenkins_blue_ocean_install.PNG](https://qiita-image-store.s3.amazonaws.com/0/39372/71f089a3-8e71-4290-c909-580e9fb97d26.png)

### インストール

プラグインの管理から「利用可能」なplugin一覧で「BlueOcean beta」でフィルターすると出てきますので、これをインストールします。

![jenkins_blue_ocean_install2.PNG](https://qiita-image-store.s3.amazonaws.com/0/39372/7033a04c-f2c3-dd55-0d5d-a0fa635bfe48.png)

インストールが開始されると、色々依存pluginがインストールされます。この量はjenkinsのバージョンアップ以来でした。

![jenkins_blue_ocean_install3.PNG](https://qiita-image-store.s3.amazonaws.com/0/39372/4152e577-d5ee-93de-f7ca-5afe1a210031.png)

あとは再起動が完了してページ上部に以下のようなボタンが表示されるようになれば準備完了です。

![jenkins_blue_ocean_open.PNG](https://qiita-image-store.s3.amazonaws.com/0/39372/a2f92664-8f30-1f7d-3215-e90c5ad5b090.png)

## 触ってみる前に

インストールして気になったこととして、Pipelineプラグインなども一部ダウンロードされていましたので、既存の画面に影響はないのか？ということです。

結論から言うと私の環境では特に影響無さそうでした。
各種Pipelineも正常に動作しました。

## 触ってみる

「Open Blue Ocean」というボタンをクリックするとBlueOceanのUIに遷移します。
私の環境で確認できた各種画面を貼っていきます。

### ジョブ一覧

* ジョブが沢山あると一部のジョブしか表示されません
 * 「Show More」と下部に表示されてクリックすると増えます
 * 全て表示するには何度も「Show More」をクリックが必要です..
 * 「Show More」をクリックすると一覧のTOPに戻されます...
* 現状ではまだビューが実装されていないようです
* ジョブの検索もできません
* 「Login」ボタンはありますが、クリックすると既存の画面でログインします
* 「New Pipeline」はPipelineの作成画面ではなく、既存の作成するジョブを選択する画面に遷移します
* 既存の画面に戻るボタンは今のところ存在しないので、URLを書き換えて戻ります

![jenkins_blue_ocean_job_list.PNG](https://qiita-image-store.s3.amazonaws.com/0/39372/3dbc5758-500d-44c6-369c-8608145a43c4.png)

### ジョブ画面

* 「Run」をクリックするとジョブが実行されます
 * 現状はビルドパラメータの画面にならないで、いきなりジョブが実行されるようなので気をつけてください
* 歯車マークはジョブの既存の設定変更画面に遷移します
* 各実行結果の更新マークをクリックすると再実行されます

![jenkins_blue_ocean_job.PNG](https://qiita-image-store.s3.amazonaws.com/0/39372/aa2ce531-ea5a-14ae-8a63-364280ec767a.png)

### ジョブ結果(成功)

* Pipeline
 * stage-stepの順に遷移図が表示されます
 * parallel-stepの数だけ遷移が分岐します
 * 各stageをクリックすると下部にそのstage内のstepが表示されます
* Artifactsは保存したビルドデータが表示されます
 * 現状はfingerprintは表示されないようです
* Changes/Testsは使ってないので分かりません

![jenkins_blue_ocean_job_result.PNG](https://qiita-image-store.s3.amazonaws.com/0/39372/aa3faff7-8e1b-4ae4-6683-2ed2af7bd4e7.png)

### ジョブ結果(失敗)

* コンソールのログは右隅のアイコンどちらかをクリックすれば確認できます(表示またはダウンロード)

![jenkins_blue_ocean_job_error.PNG](https://qiita-image-store.s3.amazonaws.com/0/39372/fe15ddaa-6954-35e7-36c6-2ebae8c98b6e.png)

---

以上です。ちょろっと操作しただけになりました。
pipelinのエディタが実装されたらまた試してみたいなと思います。
何をどう書けばよいのだ！？

# CODE FOR KOHOKU?!
## 自力じゃ無理なら
### 誰かつれてこよう

１２月１１日にイベントをやります。
https://www.facebook.com/events/1741304736191792/

https://www.facebook.com/events/1264705636921980/

小俣さんや小副川さんにお世話になります。
いまここに書くことがなににつながってどういうことなのかもよくわからぬまま書いています
RESAS入門の動画をみながら、RESASってなにっていじってみています。
クロームじゃないと動かないと気づくまで４０分もかかりました。

そんな私は子育て支援NPOのスタッフです。
子育て支援、保育、幼稚園業界はおそろしいほどITスキルが化石です。
こんな私ですら、出来るほうといわれているくらいです。

そんな人たちが、今ばりばり働いている人たちが育児休業にはいったり、両立に力つきて
キャリアチェンジの休止状態に入っているときに、子育て支援施設を利用するときに、
いったいどんな情報提供ができるというのでしょう。
ってうずうずと考えていました。

世の中にはいろいろな情報提供媒体があります。ましてネットの世界は玉石混交。
まっとうな（といわれている、それはそれは超時代錯誤な人を含むことも多いけれど）
子育て支援関係者にいわせれば、ネットなんてみてちゃだめ！リアルでつながらないと！
なんて化石のようなひとたちにいわれても、今リアルに子育てしているひとたちに刺さる、
とは思えない。

それって上から目線で、うるせーばばーってなっちゃうと思うんですよね。
けっこう言葉悪く書きますけれど、化石重鎮クラスはみてないと思うので。

もうじき５０代にかかる私、化石重鎮クラスにかかってはいるけれど、
なんとか、今リアルに子育てしている人に刺さるツールをもって子育て支援ができていかないか、
とぶつぶつぶつぶつあちこちでいっていたら、

某中間支援組織のキレキレの職員くんに、畑中さんはできない理由ばっかりいっている、
デザイン思考の本でもよんだらどうですか！と言われた瞬間に、ちょっとブチ切れまして、
はあ？！もうこうなったらどこにだってでてってやる、
役所の委託施設で委託事業のなかで予算もらって積み上げるってことを前提には置くけど、
その背後にいろんなことを手段選ばずやっていってもいいんじゃないか、
って思ったんです。

で、ビジネスアイデアコンテスト？LODジャパン？CODE　FOR　JAPAN?なんだかわかんないけど
とにかくあたしでもいけそうなところ、かたっぱしから、いってみたんです。

で、いろいろな方と話す中で、冒頭のイベントたてにつながっていっています。

ぶつぶつぶつぶついっていると、それいいね、応援するよっていってくれる方々がいて、
それならこういうことを教えてあげよう、とか、私はここを手伝えます、
とかいってくれるお母さんたちもどんどんでてきてくれています

あたしをキレさせてくれた彼にはちょっと感謝しています。

CIVICTECHということば、を聞いてそんな言葉があるんだと思いました、
子育て支援のNPOに関わってきたなかで、必要なことは自分たちでつくるっていうことは
あたりまえというか、自然なことだったので、あ、そうなのね、っていう感じの
納得する感じのことばでした。かっこよくいえばCIVICTECHなんでしょうが、
私たちなりに、ないならつくるんだーっていう泥臭い感じではじめていますが、
せっかくなので、
CODE　FOR　KOHOKU　なんていってみちゃったりしよう、
という今日この頃です
授業でAWSを利用するためにAWS Educate AccountとAWS Educate Starter Accountを作成するまで

# 前提
AWS Educateに教育機関登録されている

# AWS Educate Account 

### 概要
- 要クレジットカード
- 継続使用可能
- ＄200のクーポンコード/年（教員）
- ＄100のクーポンコード/年（学生）

### 申請方法（教員向け）
1. 事前にAWSアカウントが必要
1. https://aws.amazon.com/jp/education/awseducate/ から教員として登録するページへ
2. Institutionの項目で xxx University や Department of xxx を入力する
3. 担当科目を入力、その科目を担当していることを確認できるURLなどが必要

### 申請方法（学生向け）
TODO

#AWS Educate Starter Account 

### 概要
- クレジットカード不要
- 通常のAWS Accountへの移行はできない
- 75ドルの利用枠/年（作成日から1年でカウントされる）
- オレゴンリージョンでしか使えない

### 申請方法

1. https://aws.amazon.com/jp/education/awseducate/ で学生として登録するページへ
2. Institutionの項目で xxx University や Department of xxx を入力する
3. Starter Account を選択する
1. 所属機関ドメインのemailアドレスを入力する
4. その他、必要項目を入力して送信する
5. 入力したemail宛てにとどくverification codeを入力する
6. レビューが通れば承認される（1日程度）
CircleCIで Protocol 'inet_tcp': register/listen error: econnrefused エラーを回避する方法

## 現象

Erlangで書いたアプリをCircleCIでテストすると以下のエラーがでる。

```tex
Protocol 'inet_tcp': register/listen error: econnrefused
```

sshでログインするとnet_kernel:start()が失敗している。

```erlang
$ erl
Erlang/OTP 19 [erts-8.1] [source] [64-bit] [smp:32:2] [ds:32:2:10] [async-threads:10] [hipe] [kernel-poll:false] [sharing-preserving]

Eshell V8.1  (abort with ^G)
1> net_kernel:start(['foo@127.0.0.1', longnames]).
{error,{{shutdown,{failed_to_start_child,net_kernel,
                                         {'EXIT',nodistribution}}},
        {child,undefined,net_sup_dynamic,
               {erl_distribution,start_link,
                                 [['arkps@127.0.0.1',longnames],false]},
               permanent,1000,supervisor,
               [erl_distribution]}}}
```

## 原因

epmd が起動していない。

## 対策

テスト実行前に epmd -daemon を追加する。
Slack | キーボード操作で絵文字のリアクションをほんの少しだけ簡単にする小技

# 通常

絵文字でリアクションを付ける時、普通なら「テキスト検索」→「キー操作で選ぶ」→「Enter」という操作をすると思う。

![image](https://qiita-image-store.s3.amazonaws.com/0/89618/de340051-6353-d7be-8e0d-fade16e2744c.png)

![image](https://qiita-image-store.s3.amazonaws.com/0/89618/2dba862d-cf76-8826-358c-ae054864356c.png)


# 小技

だが「検索で絞られた絵文字がひとつだけ」の場合に限って、方向キーを押さず、Enterを押すだけでリアクションが付けられる。

![image](https://qiita-image-store.s3.amazonaws.com/0/89618/916b4170-41c3-37fa-933a-e52fdc104e6d.png)

![image](https://qiita-image-store.s3.amazonaws.com/0/89618/6abfa5ea-1f0c-9b4a-3b3b-ab82fa34437f.png)



# 環境

- Mac App ver 1.1.2








<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
CentOS5 で Software Raid 1をやめ通常のパーティション構成にする手順

新HDDのパーティション構成

* /dev/sdc1 (/boot) 100MBとする。([GrubのためInode size は 128](http://kb.kristianreese.com/index.php?View=entry&EntryID=113),ext3)
* /dev/sdc2 (/,ext3)

## CloneZilla (ubuntu版)で起動

* Debian版だとなぜかmdadm認識しなかった。
* CloneZilla [alternative stable - 20161121-yakkety](http://clonezilla.org/downloads.php) からbootした。
* 既存のSoftware Raid 1 が /dev/md126, /dev/md127 と認識した。

```bash:既存のデータを新HDD(sdc)にコピー
cd /home/
mount /dev/sdc2 /home/partimage
mkdir /home/partimage/boot
mount /dev/sdc1 /home/partimage/boot

mkdir /mnt/md126 /mnt/md127

mount -o ro /dev/md126 /mnt/md126
mount -o ro /dev/md127 /mnt/md127

cp -a /mnt/md126/* /home/partimage/boot/
cp -a /mnt/md127/* /home/partimage/

sync;sync;sync
reboot
```

* 新HDD(sdc)を別のPCに差し込み以下実施

## CentOS 5.11 のインストールDVDから起動

```bash:Grubの起動オプション
linux rescue
```

```
mount /dev/sda2 /mnt/sysimage
mount /dev/sda1 /mnt/sysimage/boot

cd /home/partimage
for i in dev sys proc; do mount -o bind /$i $i;done
chroot .
```

## md を sdaに書き換え

* /etc/fstab
* /etc/mtab

```diff
- /dev/md1
+ /dev/sda2

- /dev/md0
+ /dev/sda1
```

* /boot/grub/menu.lst

```diff
- /dev/md1
+ /dev/sda2
```

```
grub-install /dev/sda
```

![VirtualBox_raid_07_12_2016_11_55_37.png](https://qiita-image-store.s3.amazonaws.com/0/25728/0ebeea5c-7b55-b704-1b9c-c743fbd8bf9d.png)

* DVDを抜いて新HDDで起動することを確認。
GoogleChrome | アドレスバーから I'm Feeling Lucky する (Googleで検索順位1位のサイトに飛ぶ)

# I'm Feeling Lucky とは

検索結果の1位に自動的に飛ぶ検索方法だ。
(インターネット接続がすごく遅かった時代は重宝されていたらしい)

# 設定方法

## 設定ページの「検索エンジンの管理」を開く

![image](https://qiita-image-store.s3.amazonaws.com/0/89618/1bccbf4e-9fe3-235a-6a39-d921b662b4ed.png)


## 検索エンジンの追加

次のとおり、検索エンジンを新しく追加する。


- 名前: 適当なもの
- キーワード: `\` (ここで設定した文字がショートカットになる)
- URL: http://www.google.com/search?ie=UTF-8&oe=UTF-8&sourceid=navclient&gfns=1&q=%s

---

![image](https://qiita-image-store.s3.amazonaws.com/0/89618/29b8346e-d070-7a19-0a84-b12758f2aa96.png)

# 使ってみる

アドレスバーで <kbd>\\</kbd> => <kbd>スペース</kbd> の順に入力すると、I'm Feeling Lucky での検索モードに切り替わる。

![image](https://qiita-image-store.s3.amazonaws.com/0/89618/fb8857e3-7c5e-caa4-c8a0-fe126e9c32fc.png)

この状態でEnterを押すと、一発で目的のサイトに飛べる！

![image](https://qiita-image-store.s3.amazonaws.com/0/89618/2e34ba6c-d14e-5631-435c-daf87af62d09.png)

# 参考

- https://smartbear.com/learn/code-review/best-practices-for-peer-code-review/









<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
FAQBotを使ってプロダクトオーナーを「めんどくさい」から解放しようとした話

[ヴァル研究所 AdventCalendar2016](http://qiita.com/advent-calendar/2016/val)の7日目はこれまでとは少し経路の・・・じゃなかった、毛色の違う話題を投稿したいと思います。

## 自己紹介
valitohと申します。普段は新規事業開発の部署で駅すぱあと等の技術をベースにしたサービスの企画開発などをしており、この夏リリースされた、”ビジネスマンを「めんどくさい」から解放する！”新サービス「RODEM(ロデム)」のプロダクトオーナー(開発責任者のようなもの)を担当しています。

![RODEM_header.png](https://qiita-image-store.s3.amazonaws.com/0/152460/6fdba4d7-fc80-6032-22f9-d3f7554ca34d.png)
ちょっとだけ宣伝(笑) https://ekiworld.net/service/lp/rodem/

## 事の始まり
今年の夏にRODEMをリリースして以来、多くの反響をいただき嬉しい限りなのですが、お客様からの問い合わせが営業を通してプロダクトオーナーである私にどんどん送られてくるため、嬉しい悲鳴がだんだん苦しい悲鳴に変わりつつあるのが現実です。

※ある日のやり取り<br>
営業A：RODEM利用契約時の流れについてお客様から問い合わせを受けているのですが… <br>私：そちら、このように対応してください。契約時の流れは資料にしておきますね～
営業B：RODEMの◯◯に関する資料ってどこにあるんでしたっけ？<br>私：あ、それはここに置いてある資料を使ってくださーい
営業C：RODEMの◯◯に関する資料(以下略)<br>私：それはこの資料にですね～(さっきBさんにも教えたばかりなんだけどな…)
営業D：RODEM利用契(以下略)<br>私：それはさっき(以下略)
営業E：RO(以下略)<br>私：それ(以下略)
<br>

![名称未設定-1.png](https://qiita-image-store.s3.amazonaws.com/0/152460/6710a1ab-eebc-e022-2161-fa35508f130f.png)
バンバン開くハングアウト(※イメージです)

むむむむ……

もー！全然仕事にならーん！！(╯°□°）╯︵ ┻━┻
私が「めんどくさい」から解放されたい！
誰か！誰か代わりに問い合わせ対応を！
valitohは仲間を呼んだ！だが誰も来てくれなかった！こんなところでしんでしまうのはなさけない！

…というわけで私の代わりに問い合わせ対応をしてくれるFAQBotを作ってみました。

## FAQBotの作成
いきなり手の込んだものを作るよりは、まずは最低限の役割を果たすものを作ってフィードバックを得ながら進めるのがいいと考えたので、社内連絡をSlackに一本化しようという動きに合わせてSlack上で応対をするBotを作ることに決定。
検索すれば作りかたはたくさん紹介されていますが、中でもこちらのブログが大変参考になりました。
[slackのbotをAWS Lambda(Python)+API Gatewayで構築 | yamamanx](http://www.yamamanx.com/slack-bot-aws-lambda-python-api-gateway/)

こうして、書き込まれた特定の単語に反応して説明を返すだけの簡単なものではあるものの、数時間で基本的な部分はできあがりました。

![AWS.png](https://qiita-image-store.s3.amazonaws.com/0/152460/e6274349-9afe-cce6-8fdc-02d1459d07d1.png)
Lambda(Python)+API Gatewayで構成

良くも悪くも問い合わせ内容の傾向を一番知っていたのは私だったので、仕様や関係資料の在り処に関する一問一答のパターンを作っては登録していきます。ほとんど私の分身を作っているような作業ですね。

ある程度のところで社内に公開して反応を見つつ、登録してない言い回しを絶妙に突いてくる営業に心を折られながらも地道にパターンを増やしている状況です。

![スクリーンショット_2016-12-06_19_07_25.png](https://qiita-image-store.s3.amazonaws.com/0/152460/7413a279-4f49-a423-2c9d-218fd54ab3b3.png)
関連資料を自分で探すときにも役立っています

## まとめ？
将来的にはこれをベースに質問の正規化処理、返答の自動生成など盛り込みつつ自然な対話をできるようにして、ユーザー向けのお問い合わせ窓口にも使えないかなと目論んでいます。

ところで、このブログを書いたのは生身の人間？それともプログラム？知りたい方はお問い合わせください(ΦωΦ)ﾌﾌﾌ…

（※本投稿は「VALのLABO」[11/1の投稿](http://blog.val.co.jp/2016/11/rodemfaqbot.html)を編集したものです）
UITextViewにHTMLを表示する（Swift3版）

Swift3で動作するUITextViewにHTMLを表示するコードがなかったので書いておきます。

#NSHTMLTextDocumentTypeが使用不可

Optionとして渡すNSCharacterEncodingDocumentAttributeの値に**NSHTMLTextDocumentType**を使用しようとすると**String.Encoding.utf8**を使えとXcodeさんに怒られます。

#String.Encoding.utf8を使うとアプリが落ちる

しかし、**String.Encoding.utf8**を設定するとNSAttributedStringの実行時にエラーが発生してアプリが落ちてしまいます。。。

#対応

[こちら](http://stackoverflow.com/questions/39248092/nsattributedstring-extension-in-swift-3)で同様の問題でハマっている方を発見。
[Appleのリファレンス](https://developer.apple.com/reference/uikit/nscharacterencodingdocumentattribute)によればNSCharacterEncodingDocumentAttributeの値に設定できるのはNSNumber型とのこと。
String.Encoding.utf8はString.Encoding型なのでもちろんNGですね。

**String.Encoding.utf8.rawValue**とするのがキモ。

以下にHTML形式の文字列をNSAttributedStringにして返すメソッドを載せておきます。

```swift:
    /// HTML形式で記述された文字列をNSAttributedStringに変換する
    ///
    /// - Parameter text: 変換する文字列
    /// - Returns: HTMLドキュメントに変換されたNSAttributedString
    func parseText2HTML(sourceText text: String) -> NSAttributedString? {
                
        // 受け取ったデータをUTF-8エンコードする
        let encodeData = text.data(using: String.Encoding.utf8, allowLossyConversion: true)
        
        // 表示データのオプションを設定する       
        let attributedOptions : [String: AnyObject] = [
            NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType as AnyObject,
            NSCharacterEncodingDocumentAttribute: String.Encoding.utf8.rawValue as AnyObject
        ]
        
        // 文字列の変換処理
        var attributedString:NSAttributedString?
        do {
            attributedString = try NSAttributedString(
                data: encodeData!,
                options: attributedOptions,
                documentAttributes: nil
            )
        } catch let e {
            // 変換でエラーが出た場合
        }
        
        return attributedString
    }
```
Eclipseの起動が途中でフリーズしてしまう場合の対策

ある朝Eclipseを起動しようとしたが、途中でフリーズしてしまった。
![Selection_003.png](https://qiita-image-store.s3.amazonaws.com/0/148579/659112b7-fb44-b193-aeff-09573129db4b.png)
「 loading org.eclipse.mylyn.task.ui 」からプログレスバーが伸びない。
mylynとか使ってないんだけど。

ざっと調べると「新しいワークスペースを作ってそこにプロジェクトをインポートしなおしたら直りました」的な情報が見つかる。
それは直ったと言わない。

正解は、フリーズしているEclipseのプロセスを殺した後、ワークスペースのディレクトリでこれをやる。```
~/workspace$ rm .metadata/.lock
```
Quickstart: Compose and Railsが失敗したときの話し

## 結論

結論から言ってしまうとめちゃくちゃしょうもないミスだった。
タイポによりDBに必要なgemが取得できていなかったためにエラーになってしまっていた。

### 問題のtypo

```shell-session
docker-compose run web rails new . --force --database-postgresql --skip-bundle
```

正しくはこう。

```shell-session
docker-compose run web rails new . --force --database=postgresql --skip-bundle
```

公式サイトの内容をコピペすればいいんだけど写経のつもりで自分でコマンドを打っていたのでミスってしまった。

### 原因はpgがないこと

エラー内容はキャプチャし忘れてしまったが```localhost:3000```にアクセスするとRailsさんがpgのgemがねえぞ！とお怒りになられている感じだ。

超絶つまんないこと&ミスに気づいていなかったために変に横道にそれてしまい、結果問題解決にそれなりの時間を使ってしまった。
この辺RailsにもDockerにも習熟してないので勘所が掴めずにいたのも問題だったかもしれない。PHPなら気づけたかも…いや言い訳ですな。

ひとまず疑うべき点はぼくの拙い英語の読解力だったのでどこか読み間違えたんだろうか？と思い[日本語翻訳プロジェクト版](http://docs.docker.jp/compose/rails.html)を覗く。
がしかし、当たり前だが各アプリケーションのバージョンなどの更新がされていない点以外に違いを見つけらなかった。

どうやってDockerでgemを入れてやればいいのか？がわからずに15分ほどググることになってしまった。
最初から作り直せば恐らく直るだろうことはわかっていたのだがそれだと何か負けた気がしたので時間を費やしてしまった
だがまぁその価値は多少あったのかなと思う、費用対効果は低いと思うが。

## 解決編

解決に導いてくれたのは↓。
[docker-composeでRails4の開発をする流れ sqlite3からpostgresqlに変更](http://qiita.com/tukiyo3/items/4d107d7a4db1b97b5ae8#sqlite3%E3%81%8B%E3%82%89postgresql%E3%81%AB%E5%A4%89%E6%9B%B4)

この投稿の「コンテナ再生成」を見てようやく「ああGemfileを更新して```docker-compose build```でコンテナを再生成する必要があるのか！」と気づく。
あとは同じように```docker-compose run web rake db:create```して```docker-compose up```してあげれば問題解決。

## まとめ

多分本来は```rake db:create```ではなく別の方法を取るほうが今回の問題解決としては正しいのかな？と思うがRailsに詳しくないのでよくわからない。
この辺は今後の課題ということでひとまず棚上げしておくつもりだ。

今回DockerでRailsを選択したのもRailsの習熟度を上げつつ、Dockerを理解しようという一石二鳥な試みなので仕方がないかなと考えている。
このレベルの問題はもう少しすれば解決するだろうと思うのでまぁいいかと。
わからなかったら多分Twitterにでも愚痴って誰かからマサカリ投げられるだろうと期待している。

しかし技術書かなにかを購入してきちんとDockerについての理解を深めないと今のままでは中々時間がかかりすぎてしまう気もする。
近々誕生日なのでそのときにでも干し芋か[Kampa！](http://kampa.me/)でも晒してクレクレくんをしようかなと画策中。

どなたかカンパしてくれる OR プレゼントしてくれるといいなーと思ってるけど多分自分で買うことになるんだろうな。
あとお勧めのDocker本とかあったらはてブでもコメントでもいいので教えてくれると助かります。
RecoveryManager使うときの注意点をざくっと書いてみる。

これまではOracleを扱う機会が多かったので、今日はOracleのRecoveryManagerという機能について書きたいと思います。

データベースってテーブルの論理構造が壊れたり、物理的にブロック破損が起こったり、様々な障害ケースがありますが、そんな中Oracleには、Recovery Managerという、データブロック単位での復旧が可能な機能があります。RecoveryManagerでは、バックアップの保存期間や保存形式、バックアップを取得する際のチャネル数を指定することができたり、フルバックアップや差分増分バックアップがあったりと、結構痒いところに手が届く機能になっています。

バックアップは「backup database」コマンド一つで、ターゲットデータベースのデータファイルを全取得できます。plus archivelogオプションを指定すると、アーカイブログファイルも一緒に取得してくれるので、こっちのほうが一般的ですね。

次に障害時のリカバリーの種類としては、

- **障害直前時点へ戻す**：取得したデータファイルをリストアし、可能な限りのアーカイブログファイルを適用し、その後REDOログファイル内の変更情報を適用し、障害直前状態までリカバる。
- **バックアップ取得時点へ戻す**：取得したデータファイルをリストアし、バックアップセット内のアーカイブログファイルを適用し、バックアップ時点にリカバる。その後、REDOログファイルを再作成して、resetlogs openでデータベースを復旧する。

大きく二種類があります。

これぐらいを前提として、自身がバックアップ・リカバリの設計をやっていて気をつけていたこととかハマったこととか、気をつけていたことをザクッと書いていきたいと思います。


## リカバリカタログデーターベースを活用する。
リカバリカタログ上のバックアップ情報は、ターゲットデーターベースの制御ファイルと同期を取ります。
このバックアップ情報は、制御ファイルのみで運用することも可能ですがこの場合幾つか注意点があります。

- 機能制限が出る。（RecoveryManagerのこの機能使うならカタログデータベースを立ててねと言われる。）
- CONTROL_FILE_RECORD_KEEP_TIMEのチューニングを適切に行う必要がある。
- CONTROLFILE AUTOBACKUPを必ずONにする必要がある。

いくつか書きましたが、特にCONTROL_FILE_RECORD_KEEP_TIMEの設定周りは要注意です。制御ファイルは予め設定した一定期間を経過すると、制御ファイル自身に登録されたバックアップ情報を忘れます。そのため、例えばDELETE OBSOLETEコマンドを発行すると、タイミングによっては思わぬファイルを削除してしまう可能性もあります。(必ずREPORTで対象ファイルを確認するようにしいましょう　）
この理由により、CONTROL_FILE_RECORD_KEEP_TIMEパラメータの設計を適切に行うことが必須です。
ベストとしては、リカバリカタログ表領域を保有する、専用のデータベースを採用することが望ましいです。リカバリカタログ情報の保有のみなので、比較的小規模な容量でOKです。

## NOARCHIVELOG運用は避ける。
NOARCHIVELOGモード運用での障害時は、まれなケースを除いて復旧が困難です。というのも、変更情報を保有するファイルが存在しないため、REDOログファイルしか頼りになるものがなくなるんですよね。で、REDOログファイルも破損しているなどの全破損している場合の復旧は困難を極めます。
なので、相当な要件、例えばコールドバックアップ、コールドリカバリが出来れば良い、など特別な要件がない限り、ARCHIVELOG_MODEの有効設定は必須です。

## RETENTION POLICYの設定と、ディスク設計を適切に行う。
データベースを復旧する際、どの時点に向けた復旧が要件かに従って、RETENTION POLICYを設定することが必要です。デフォルトでは1が設定されていますが、数世代分持ちたい場合は任意の値に変更します。
(バックアップ時には一時的に+1日分の余剰を見込むことが必要です。)
また、RecoveryManagerには保存期限を過ぎたバックアップセットを削除してくれる機能がありますが、先述した制御ファイルのみで運用する場合は、REPORT OBSOLETEコマンドで削除対象を十分に確認するのがベターです。

## Real Application Cluster(RAC)構成の場合はアーカイブログファイルの取扱に注意する。
RAC構成でデータベースが破損もしくは状態戻しのためにリカバリーを実施しようとする際は、ちょっと厄介です。ASM領域への不要なアクセスを防ぐために単一インスタンスでのリカバリー作業が必要になるので複数インスタンスが存在する場合は、その事前準備をしたりとか、ディスクグループそのものが破損しているという深刻なケースの場合はrecover database前に、create diskgroupが必要だったりとか。<br>中でも私がハマったのはアーカイブログファイルの取扱いでした。RACにおけるアーカイブログファイルの扱いなんですが、単一のデータベースとは言え、複数ノードから共有され、各スレッドでアーカイブログファイルが出力がされていきます。各スレッドに対して交互に出力されていくイメージです。そのため、リカバリー時に特定の時間を指定して実行した際に、「スレッド2のアーカイブログファイルが破損していてリカバリーできませんでした。」、なんていうことが発生したことがあります。2ノード以上のRAC構成では、アーカイブログファイルの存在を確認し、どのシーケンス番号まで復旧が可能かを確認し、オペレーションを行うことが必要です。

---

また機会みてOracleネタ書いていけたらなと思います。
Gebでモバイルブラウザのテストをする

# はじめに

これは [Geb Advent Calendar 2016](http://qiita.com/advent-calendar/2016/geb)の7日目の記事です。
前日は[@midori004](https://twitter.com/midori004)さんの[「Gebで画面遷移をテストする」](http://qiita.com/midori004/items/faa45da24134df4bb6c9)でした。

# モバイルブラウザでのテスト
Selenium WebDriverでもよく聞く話ですが、モバイル用のサイトをテストをしたいときがあります。それをGebでどうやってやるの？ という話です。

- Geb: 1.0
- ChromeDriver: 2.51.0
で試しています。

# Selenuim WebDriverの場合

Chromeの場合は、`capability`をセットしてあげるといけます。詳しくは[このあたりのブログ（英語）](https://sites.google.com/a/chromium.org/chromedriver/mobile-emulation)をどうぞ。このサイトから引用すると、下記のような感じです。

```java
Map<String, String> mobileEmulation = new HashMap<String, String>();
mobileEmulation.put("deviceName", "Google Nexus 5");

Map<String, Object> chromeOptions = new HashMap<String, Object>();
chromeOptions.put("mobileEmulation", mobileEmulation);
DesiredCapabilities capabilities = DesiredCapabilities.chrome();
capabilities.setCapability(ChromeOptions.CAPABILITY, chromeOptions);
WebDriver driver = new ChromeDriver(capabilities);
```

# Gebでどうやるか。

## GebのDriver生成処理
Gebでは、Driverの生成処理は`GebConfig.groovy`という中に書きます。
このアドベントカレンダーでもよく出てくる[geb-example-gradle](https://github.com/geb/geb-example-gradle)の[GebConfig](https://github.com/geb/geb-example-gradle/blob/master/src/test/resources/GebConfig.groovy)を見てみると、下記のような記述があります。

```groovy:GebConfig.groovy
environments {
	
	// run via “./gradlew chromeTest”
	// See: http://code.google.com/p/selenium/wiki/ChromeDriver
	chrome {
		driver = { new ChromeDriver() }
	}
	
	// run via “./gradlew firefoxTest”
	// See: http://code.google.com/p/selenium/wiki/FirefoxDriver
	firefox {
		driver = { new FirefoxDriver() }
	}

    phantomJs {
        driver = { new PhantomJSDriver() }
    }

}
```
この`environments`というクロージャーの中身ですが、環境変数に`geb.env`というキーで設定するとその対応するクロージャーが実行されます。
例えば、このサンプルだと、`systemProperty "geb.env", driver // "chrome"などが入る` を[build.gradle](https://github.com/geb/geb-example-gradle/blob/master/build.gradle#L55)の中で定義しています。ここにchromeなどを実行すると、`chrome {}`で定義されているクロージャーが実行されます。

さてこのクロージャー、Groovyでは最後に評価されたものが戻り値になるので、

```groovy
chrome {
        driver = { new ChromeDriver() }
}
```
上記のコードは純粋にChromeDriverをnewして返す、という処理になっています。
capabilityを入れる時はここに介入します。

## capabilityを差し込む
差し込み方は単純で、例えば下記のようにすればOK

```groovy
chrome {
        def mobileEmulation = [:]
        mobileEmulation.put("deviceName", "Google Nexus 5")

        def chromeOptions = [:]
        chromeOptions.put("mobileEmulation", mobileEmulation)
        def capabilities = DesiredCapabilities.chrome();
        capabilities.setCapability(ChromeOptions.CAPABILITY, chromeOptions);
        WebDriver driver = new ChromeDriver(capabilities);
}
```

ちなみにこのcapability、画面サイズなどもセットできるので、他にも色々使えます。

# まとめ
`GebConfig`のChromeDriver生成処理にcapability渡すとモバイル用ページの

## 明日のエントリー
明日は今日のネタを引き続いてで、モバイルとPC用のサイトを両方テストする時のTIPs書きます。
Emacs24でライブコーディングする

[Emacs Advent Calendar 2016](http://qiita.com/advent-calendar/2016/emacs) 7日目のsylxです。Qiitaに記事を書くのは2回目で、以前に書いたのは2年前という人間です。どうぞよろしくお願いします。

![image](https://qiita-image-store.s3.amazonaws.com/0/38527/fd6ef8e2-4fbb-28e9-e88a-e1563d662f45.png)

# ライブコーディングって？

プログラムを書く過程を人に見せて、あーだこーだ呟くという変態行為のことです。
最近はフレームワークのチュートリアルなんかをYoutubeでライブコーディングして見せるというのも流行りですね。高卒の私は英語でボソボソ呟かれても何もわかりませんが。

他にも音楽系言語をライブコーディングして、ライブなんてことをしている人もいます。
[Quick Intro to Live Programming with Overtone](https://vimeo.com/22798433)

# ライブコーディングの問題点

とりあえず、誰かに見せることを目的にライブコーディングしようとすると、Emacsに限らず以下の問題があります。

- プロジェクターなどでスクリーンをそのまま写すと、文字が**見えにくい**
  - だからといって、エディタの文字を大きくすると、今度は**書きにくい**
- Emacsのカラーテーマやフォントなどをアレしていたりすると、見せるのが恥ずかしい。**あまりカッコよくない**
- **リモートで見せる方法がない**
  - skypeなどでスクリーンキャストするという手もありますが、肝心の文字が見えにくかったりします。

以上の問題を解決する方法として、Emacsの編集中バッファをwebsocketでnode製のWebサーバーにリアルタイムで転送し、ブラウザ上でEmacsの編集中バッファを見れるシステムを作りました。Emacs24以降用です。

https://github.com/sylx/livemirror

ちなみにgithubにまともにpushしたのも初めてだったりします。

# 使い方

> git clone https://github.com/sylx/livemirror.git

と、ソースをとってきます。ディレクトリに入って

> npm i 

で必要なライブラリをとってきて

> npm run server

とすると、サーバーが11072ポート（数字に深い意味はありません）で動きます。

次にEmacsですが、websocketパッケージが必要なので、

>M-x package-install websocket

とかして、入れておいてください。
あとは同梱されているlivemirror.elをload-fileするなり、load-pathにいれるなりして、読み込んだら、

>M-x livemirror-start

で同期スタートです。ちなみにまともにelispパッケージ書くのは初めてだったりしますので、動かなかったらすまん。

なんとなく*Message*などで動いたっぽかったらブラウザで、

http://localhost:11072/general/

にアクセスすると、すごい中二っぽい感じの画面でバッファの中身が冒頭の画像の様に表示されます。例えば社内の自分のIPアドレスが、192.168.1.100だったら

http://192.168.1.100:11072/general/

にアクセスしてもらえば、自分のEmacsのバッファを上司にずっと見てもらうことも可能です。大声を張り上げながらペアプロしてください。

>M-x livemirror-stop

で同期終了になります。 

## 同期される操作

- バッファの切り替えに追随するので、同期中はうっかり恥ずかしいファイルを開かないようにしましょう。
- バッファを編集するとWebにも表示されます。すごい！
- カーソルを移動すると、Web上の画面のカーソルも動きます。すごい！
- C-SPACEなどで範囲選択すると、画面上で範囲選択されます。これでバグの位置を強調して、思いっきり糾弾できますね！すごい！

Emacsのhookをよくわからないまま怪しげな使い方をしまくってるので、バッファの切り替えに若干ラグがあったり、変な動きをすることがありますが、そのへんは許してください。というか、誰か一緒に続きやりませんか？

![20161207-100326_capture.gif](https://qiita-image-store.s3.amazonaws.com/0/38527/987f93c9-8fea-5f52-ef5d-c0958b38b215.gif)

# テクノロジー

## Emacs側設定

接続先ホストはディフォルトでlocalhostになっていますが、それらはcustomize-valueになっているので、自由に変更できます。詳しくは

>M-x customize-group livemirror

でどうぞ

URLにある"general"というのはチャットルーム名みたいなもので、同じサーバーに複数のEmacsを接続可能です。こちらもカスタマイズできるので、試してみてね！（実は全くデバッグしてないからちゃんと動くかは知らないよ！

## サーバー

server.jsのみで動きます。express+node-WebSocketという構成です。wsとかexpress-wsのほうが楽そうだったんですが、なんか細かい制御ができそうじゃなかったので、やめた。

## フロントエンド

[CodeMirror](https://codemirror.net/)を魔改造しています。実はこのシステムの原型を作ったのは2年前なので、2年前のCodeMirrorです。シンタックスハイライトはCodeMirrorのものです。

テーマは出来る限りデジタルっぽくなるように[PixelMPlus](http://itouhiro.hatenablog.com/entry/20130602/font)を使用した、オリジナルになっています。グロー表現は[2年前の投稿](http://qiita.com/sylx/items/13e4b3fb8eeef3c439fa)をご参照ください。


時間があったら、使用感などをyoutubeにでもアップします。
が、かなり面倒くさいので、反響なかったら何もしません！


私からは以上です。

---

明日は Mwroteさんの"Spacemacsが好きすぎるので投稿します。"です。お楽しみに。
Proxy下のCentOS7でNode環境を構築して lumX を動かす

CentOS7を最小構成でインストールした後の状態を対象にします。
lumX は gulp の簡易サーバでデモページが開くところまで確認です。


# Proxy設定： yum
```bash:/etc/yum.conf
proxy=http://proxy:8080/
proxy_username=username
proxy_password=password
```

# yum 追加リポジトリインストール＆最新化
## epel
```
# yum  install  epel-release
```


## epel 最新化
```
# yum --enablerepo epel update epel-release
```


# 必要パッケージのインストール
```
# yum --enablerepo epel install  wget screen vim  bzip2  uuid  git
```

# 開発用コンパイラインストール
```
# yum  install  gcc  gcc-c++  automake  autoconf  libtool  libxml2  libxml2-devel
```

# Node と npm のインストール
```
# yum  --enablerepo  epel  install  nodejs  npm

# node -v
v6.9.1

# npm -v
3.10.8

```

# Proxy設定： wget
```bash:/etc/wgetrc
http_proxy = http://user:pass@proxy:8080/
https_proxy = http://user:pass@proxy:8080/
ftp_proxy = http://user:pass@proxy:8080/
use_proxy = on
```

# Proxy設定： Bash
```bash:~/.bashrc
export PROXY=http://user:pass@proxy:8080/
export http_proxy=${PROXY}
export https_proxy=${PROXY}
export HTTP_PROXY=${PROXY}
export HTTPS_PROXY=${PROXY}
```
　※一般ユーザでも同じ設定を行っておくべし



# Proxy設定： git　
```
# git config --global http.proxy  http://user:pass@proxy:8080
# git config --global https.proxy http://user:pass@proxy:8080
```
　※一般ユーザでも同じ設定を行っておくべし

# Proxy設定： npm　
```
# npm config list
# npm config set proxy       http://user:pass@proxy:8080
# npm config set https-proxy http://user:pass@proxy:8080
# npm config set registry http://registry.npmjs.org/
```
　※一般ユーザでも同じ設定を行っておくべし


# bower インストール

```
# npm  install  bower  -g
```

# gulp インストール

```
# npm  install  gulp  -g
```

# Proxy設定： bower
```bash:~/.bowerrc
{
  "proxy" : "http://user:pass@proxy:8080",
  "https-proxy" : "http://user:pass@proxy:8080"
}
```
　※一般ユーザでも同じ設定を行っておくべし


# lumX のインストール
lumX とは・・ 詳細はこちらで http://ui.lumapps.com/

```
$ git  clone  https://github.com/lumapps/lumX.git
```


# lumX 環境構築

```
$ cd lumX
$ npm  install
$ bower  install
```

# lumX を gulp で

```
$ gulp  serve
```

あとはブラウザから 8080ポートに接続してみたら lumX ページが開くはずです。

![lumx.png](https://qiita-image-store.s3.amazonaws.com/0/153259/c9c553fa-968e-f5a1-9894-5bb02997ccef.png)
VMware > ゲストOS上のGoogleドライブファイルの読込み失敗 > 対処

```txt:動作環境
VMware Workstation Pro 12.5.1 build-4542065
ホストOS: Windows 10 pro (64bit)
ゲストOS: Windows 8.1 pro (64bit)
```

### 症状

[mindmupというサービス](https://www.mindmup.com/)にてGoogleドライブファイルを使用している。

Googleドライブファイルをmindmupにて使用しようとすると以下のエラーがでるようになった(昨日から)。

> Cannot connect to Google Drive

補足状況
- ゲストOS上でGoogleドライブ上のpngファイルは開くことができた
- ホストOS上でmindmup + Googleドライブファイルでは問題なし

### 対処

- ゲストOSを起動しなおした
  - 効果なし
- vmwareのメニュー 「VM」 > 「取外し可能デバイス」から対応するネットワークアダプタを「切断」にして、「接続」にした。
  - mindmupで読めるようになった。
webデザイナーからUIデザイナーになって、改めて考えてみた事

# 概要
この記事は、[株式会社アイスタイル Advent Calendar 2016](http://qiita.com/advent-calendar/2016/istyle) の7日目の記事です。

アイスタイルに入社して３ヶ月が経ちました。
前職ではwebデザインをしていたのですが、アイスタイルではUIデザインをする事が多くなり、"一般的なwebサイトにおけるUI" と "サービス運営サイトにおけるUI"とでは考え方が違うと感じたので、改めてUIについて考えてみました。

こういう技術系記事は初めて書くので、優しい目で見てもらえると嬉しいです。


# webデザインとUIデザイン、ついでにUX

皆さんご存知かとは思いますが、一応定義。

## webデザイン
> webサイトにおける視覚面に対し、整理・再構築・意匠などを施すこと

[wiki](https://ja.wikipedia.org/wiki/%E3%82%A6%E3%82%A7%E3%83%96%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3)より引用

個人的には、商品（プロダクトやサービス、企業のブランドなど）をより良く見せるためのサイトデザインと考えています。

## UIデザイン
UIはユーザーインターフェイス（User Interface）の略で、ユーザーがサービス（製品）を使う時に接触する部分を指します。
UIはweb以外でも使われますが、今回はwebデザインの中に含まれるUI（操作性）をデザインするという定義で話を進めたいと思います。

## UX
UXはユーザーエクスペリエンス（User Experience）の略で、「体験価値」と言われたりしています。
簡単にデ●ズニーにたとえて言うと、
UX=ディ●ニーランド楽しい！（体験）
UI＝キャストの対応が素晴らしい！（接触）
です。


# ２つのUIについて考えてみた

さて、本題である"webサイトにおけるUI" と "サービス運営サイトにおけるUI"では考え方が違うと感じた件について話を進めます。

## webサイトにおけるUI

上記で定義したように、今まではwebデザイナーとして**見た目におけるUXを満たすためのデザイン**をしてきました。
企業のコーポレートサイトや商品のLPなど、一度見て印象に残るようなデザインを求められていたからです。

そうなると、必然的に必要となってくるUIは見た目に関わるものになります。
一例を挙げると、

- トレンドに合わせた見た目
- フォントサイズ
- ボタンサイズ（タップエリア）
- 画像解像度
- フォームの使い勝手（エラー表示など）

などです。



## サービス運営サイトにおけるUI

一方サービスの運用がメインとなるアイスタイルでは、サービスを継続して使用してもらうために使い勝手が最優先となります。
そのため、ユーザーが抱える問題が何なのかを判断し、**解決できるデザイン**を作る事が大事になってきます。

またアイスタイルにはサービスが多く存在し、出来ることが多い分ユーザーの行動パターンも多様化します。
ユーザーの行動が読みづらいからこそ、UIを高めてそれをUXに繋げるという考え方にシフトしなければならないと感じました。


# UIデザインを意識して、入社してからやった事

考え方をUIメインに変えてデザインをした時、解決するデザインができているかはまだわかりませんが、今までよりも見た目の裏側に気を配って考えるようになりました。
数は少ないですが、入社していくつか関わった案件から以前より気にするようになった事を挙げていきたいと思います。

## フォントはなるべくデバイスフォントまたはwebフォントを使用する
今までは雰囲気作りのためタイトル部分は画像にする事も多かったですが、更新性やSEOを考えてデバイスフォントを使用するようにしました。
今はgoogleのwebフォントが充実しているので、雰囲気を作りたい時はここからフォントを探して使ってみるのもいいかと思います。(英数字のみ)

## アイコンはcssで描画またはsvgで書き出し
データが膨大なため、少しでも容量を軽くする事を意識しました。

## デバイスごとのニーズを考える
例えば長文を表示する際、PCは全文表示、SPは一部非表示でページ全体を把握しやすくするなど考えました。

## アクションは効果を狙う場所に最低限で
以前は体験して楽しいというUX向上のために付けていましたが、今はUI向上のためにアクションを付けるという考え方に変わりました。

## 可読性を考える（jis規格を意識してみる）
沢山の人に使って欲しいサービスだからこそ、色差やサイズ、ホワイトスペースなどを使用し、どんな人でも分かりやすくを考えるようになりました。



# まとめ
結局やっていることは以前とあまり変わらないのですが、前より少し“ユーザーがどう感じるか”を意識するだけで、作るデザインは変わってくるんだと感じました。
今進んでいる事業計画もサービスが使いやすくなるようにというUX向上のためのものなので、UIデザインでちゃんとお役に立てたらと思います。
まだまだ勉強がんばります！


# 明日は
hirosesaさんです。記事楽しみにしてます！


# おまけ

### UIの参考にしているgoogleマテリアルデザイン
[タイポグラフィーのスタイル](![image](https://qiita-image-store.s3.amazonaws.com/0/148510/b14cf95d-6846-4ef0-7557-b8fe5316f6df.png)
)など参考になります。
https://material.google.com/jp/


### 気になる文字組み技術
**font-feature-settings** プロパティ
https://ics.media/entry/14087/3
最近教えてもらったプロパティ。opentypeのフォントを詰めてくれます。(ヒラギノや游ゴシックで力を発揮)
letter-spacingと合わせて読みやすい文字間と行間を意識したい。

### 気になるデザイン
**コンプレクション・リダクション**
http://uxmilk.jp/48364
UIとは関係無いですが、最近流行っているみたいなので。
最新のiTunesで使われているような、タイトルが大きくてモノクロの、ミニマルなデザイン。
ブランチ専用のスタッシュが欲しかったので運用方法で補った話

WithOne AdventCalendar 7日目の記事です。
本日のテーマはGitです。
私のローカルにおけるGitの運用を記事にしてみました。

# ブランチ専用のスタッシュが欲しい
Gitを使っていてこんなことを思ったことはないでしょうか？
日常的に複数のブランチで作業している人の1000人に1人くらいは思ったことのある悩みだと思います。

複数ブランチを使用しない人にも伝わるように、
たとえば私の場合はこんなときに複数ブランチで作業してました

- 機能の実装に詰まったので、気分転換に別のブランチで別機能に着手した
- レビューのために複数のブランチを同時並行で作業する必要があった

## スタッシュで困ること
スタッシュが少しなら困らないんですが

- 複数ブランチのスタッシュが混在してたり
- ローカルな接続先に切り替える用のスタッシュを用意してたり
- 使用済みスタッシュのゴミが散乱してる

などの要因でスタッシュがたくさんあると、途端にめんどくさくなります

### 例えばこんなケース
> 機能*α* 作成中に、優先度が高い機能*β* の作成の割り込みがあった

大多数の人は
1. 作業中の機能α をスタッシュに保存する
2. developブランチに戻る
3. 機能β のためのブランチを作成する
という流れで作業を開始するでしょう。

さて、機能β を無事に実装を終えたら
4. 機能α のブランチに戻る
5. スタッシュしておいた処理を適用する
という流れで戻ると思います

しかしこのスタッシュがごちゃついている場合は……
というのがこの投稿のテーマです。

## コミットをスタッシュ代わりにしちゃうのはどうかな？
> 機能*α* 作成中に、優先度が高い機能*β* の作成の割り込みがあった

この先ほどのケースに対する流れを次のようにします。
1. 作業中の機能α を**コミット**する
2. developブランチに戻る
3. 機能β のためのブランチを作成する
機能β を完了させる
4. 機能α のブランチに戻る
5. **一つ前のコミットでリセットする**(オプションは*Soft*で)

こうすることで、迷いなく機能α の実装に戻ることができます。

## 呼び名を決めよう
ブランチ専用のスタッシュとして、リセット前提のコミットのことを
以下、**ブランチスタッシュ**と呼ぶことにします。
別の呼び方がいい人はお好きに読み替えてください。

## GUIでやるとこんな感じ
<img width="368" alt="スクリーンショット 2016-12-07 9.35.17 2.png" src="https://qiita-image-store.s3.amazonaws.com/0/130316/18b3274a-19ca-ad95-66cf-16e1aa6773fb.png">
赤枠で囲まれているのがブランチスタッシュです。
私のワークスペースを覗いたことがある人がいるかわかりませんが、いつもこんな感じです。

普段はSourceTreeを使用していて、GUIでやると非常に簡単です。
戻したいブランチスタッシュの直前のコミットにカーソルを合わせて右クリックをすると次のようなメニューが出ます。
<img width="295" alt="スクリーンショット 2016-12-07 9.36.39.png" src="https://qiita-image-store.s3.amazonaws.com/0/130316/68f25d38-278f-f84a-47c1-67df5c05d908.png">

「このコミットまで XXX を元に戻す」を選択すると次のようなダイアログが出るので、
<img width="599" alt="スクリーンショット 2016-12-07 9.37.16.png" src="https://qiita-image-store.s3.amazonaws.com/0/130316/0848c220-2396-7da9-589c-dc9c6660b3a3.png">

モードを選択して(SoftかMixed)OKを押すと、ブランチスタッシュした続きに戻ることができます。
<img width="366" alt="スクリーンショット 2016-12-07 9.37.36 2.png" src="https://qiita-image-store.s3.amazonaws.com/0/130316/ef924c27-27e4-09f3-68ed-250d73455151.png">

# 使用上の注意
最後に、この運用方法は操作ミスで次のような事が起こり得ます。

- オプションを*Hard*でリセットしてしまう
- 間違ってブランチスタッシュをプッシュしてしまう
- 他のブランチをプッシュするときに、ブランチスタッシュまでプッシュしてしまう
- ブランチスタッシュの存在を忘れて、その後ろにコミットしてしまう

これら状況で何が起こるか理解できない人にはオススメできない、そんな記事でした。
python3でunicode()を使いたい

# Intro

偉大なる課題管理ツール [trac](http://trac.edgewall.org/) で、チケット検索した結果スナップショットを保存しておきたいと思って、[SnapshotPlugin](https://trac-hacks.org/wiki/SnapshotPlugin) というプラグインを作って公開していたところ、公開から5年半経って「unicodeが入ってるとうまく動かないから[パッチ](https://trac-hacks.org/attachment/ticket/12968/unicode_decode_error.patch)作ったよ」という[Issue](https://trac-hacks.org/ticket/12968)が発行された。

んー。パッチではunicode()を使ってて、Python3で動かなさそう。現時点でtracは確かにPython2系で動作していて、Python3系での動作は保証していないのだけれど、将来もそのままで動くようにしておきたい。どうしよう。

# Python3でunicode()を使いたい

とりあえず「unicode()がなかったらstr()で代用する」ようにしてみる。

```python
try:
    unicode
except:
    unicode=str
```

# 正しくは

Python 2 と 3 を同時にサポートするにはどうすればよいかを解説した公式ガイド　http://docs.python.jp/3/howto/pyporting.html を見よ。

# 宿題

- 適当に考えただけなので、ちゃんと考えたい。
- `u'ゆにこーど'` という表現は、python3.3以上ならそのまま使って大丈夫みたい。3.0～3.2は……無視してもよいかな?
Docker Mysql Replication

# Installation

**Host**
`host#prompt> docker pull ubuntu:14.04`

**DB Master**



```
host#prompt> docker run -it --name dbmaster -h dbmaster ubuntu:14.04 bash
dbmaster#prompt> apt-get update
dbmaster#prompt> apt-get -y install  mysql-client mysql-server vim
```

**DB Slave**

```
host#prompt>docker run -it --name dbslave -h dbslave --link dbmaster:dbmaster -p 8080:80 ubuntu:14.04 bash
dbslave#prompt> apt-get update
dbslave#prompt> apt-get -y install  mysql-client mysql-server vim
dbslave#prompt> apt-get -y install php5 libapache2-mod-php5 php5-mcrypt apache2  php5-mysql
```

with **docker inspect** ContainerName  you can see the information of the container between other things the IP, on my case:

**Host**

```
docker inspect dbmaster  = 172.17.0.2
docker inspect dbslave    = 172.17.0.3
```

# Configuration

**Master**
Edit /etc/mysql/my.cnf se realizan las configuracion de mysql, **test** es el nombre de la base de datos

![1.png](https://qiita-image-store.s3.amazonaws.com/0/91692/b96de42c-18d0-901d-c522-010232934a4d.png)



```
dbmaster#prompt> service mysql start
dbmaster#prompt> mysql -u root -p123
mysql > GRANT REPLICATION SLAVE ON *.* TO 'suser'@'%' IDENTIFIED BY 'pass';
mysql > GRANT ALL PRIVILEGES ON test.* TO ‘suser’@’%’ IDENTIFIED BY 'pass';
mysql > FLUSH PRIVILEGES;
```


![2.png](https://qiita-image-store.s3.amazonaws.com/0/91692/1960f829-39bd-d658-100b-677acbc3d27e.png)



**Slave**
Edit /etc/mysql/my.cnf

![3.png](https://qiita-image-store.s3.amazonaws.com/0/91692/5a89d2ef-75db-9dea-8b55-8001b37bae3b.png)




```
dbslave#prompt> service mysql restart
dbslave#prompt> mysql -u root -p123
mysql >  CHANGE MASTER TO MASTER_HOST='172.17.0.2', MASTER_USER='suser',  MASTER_PASSWORD='pass',  MASTER_LOG_FILE='mysql-bin.000006',  MASTER_LOG_POS=  107;
mysql > START SLAVE;
mysql > SHOW SLAVE STATUS\G
```

![4.png](https://qiita-image-store.s3.amazonaws.com/0/91692/96ce5312-caf7-60c0-cd1b-f2d84aba45ba.png)

![5.png](https://qiita-image-store.s3.amazonaws.com/0/91692/1cba404d-d631-d1c4-fb1c-c7f82a94c11d.png)

# Apache

If you want a query on dbslave to dbmaster we can use PHP, the Mine is "consulta.php" on **/var/www/html/**  and start the service

```
dbslave#prompt> service apache2 start
```


![6.png](https://qiita-image-store.s3.amazonaws.com/0/91692/aa6aae6a-41e5-bc5e-a729-a026002b96b1.png)




## Resource
http://terraltech.com/mysql-replication-setup-on-ubuntu/
https://www.digitalocean.com/community/tutorials/how-to-set-up-master-slave-replication-in-mysql
macでIEを簡単に立ち上げるscript

はじめまして、ほたてです。
[Livesense Advent Calendar 2016 その３](http://qiita.com/advent-calendar/2016/livesense_3) の7日目を担当します。

# はじめに
突然ですが、皆さんは最近IEを使ってますでしょうか？
最近ではモダンなブラウザが主流になり、自分も普段使うことはあまりありませんが、弊社では企業向けのサービスも一部提供しているため、まだそれなりのIEユーザが利用者としています。

以前、Windowsで開発をしていたときには見たいときに立ち上げることはできたものの、最近はMacBookでの開発のため、見たいと思っても環境がありません。

BrowserStackなども使ってましたが、もっさりだなとか、開発見るには一手間あってめんどいです。
そんな中、[modern.ie](https://developer.microsoft.com/en-us/microsoft-edge/)の存在を知りました。
modern.ieはmircosoftが提供している開発用の仮装環境で、複数バージョンのWindows+IEの組み合わせを提供しています。

普通に使うには、サイトから仮想マシンを落としてセットアップすれば良いのですが

- 落としてから90日有効ということで、スナップショットを取るか期限が切れたら再DLをする
- 色んなバージョンを毎回手で落として設定するのがめんどい

ということで、コマンド一発でDL〜立ち上げまでをやってくれるスクリプトを作成しました。

コードはこちらです。
[https://github.com/gtakat/modern-ie-automate](https://github.com/gtakat/modern-ie-automate)

# 実行例
利用するには、Node.js、Virtualbox、Vagrantのインストールが必要です。
そして

```bash
$ git clone
$ npm install
```
を実行しておいてください。

- 起動するには、`npm start`します。
- boxのリストを取得して、バージョン選択が表示されます。

![modern-ie-box-select.png](https://qiita-image-store.s3.amazonaws.com/0/105402/a6948f31-32d6-6e42-cce2-e9882077fa21.png)

- バージョンを選択するとイメージのダウンロードが始まります（数Gbytes落とすのでけっこう時間がかかります。気長に待ちましょう）

![modern-ie-downloading.png](https://qiita-image-store.s3.amazonaws.com/0/105402/9e8a13ed-7435-b9e7-5cbf-3339ec8c08f8.png)

- 無事DLで成功すると、Vagrantの設定〜起動まで一気に行います。

![スクリーンショット 2016-12-06 16.07.53.png](https://qiita-image-store.s3.amazonaws.com/0/105402/54826296-807f-082b-6e96-cd09beaf1de1.png)

- Windowsが立ち上がりました。
- IEを起動してみます。

![スクリーンショット 2016-12-06 18.58.17.png](https://qiita-image-store.s3.amazonaws.com/0/105402/d688ac7b-c0d5-348c-9b3c-01215a77d35c.png)

- 成功です！
- ということで、いったん起動はまではできたので、これで少しは楽をできそうですが、もう少し改善しないとダメだなと思ってます。

# やり残し（時間切れ）

- いきおいで書いたのでリファクタしたい
- boxリスト取るところはキャッシュできそう
- ダウンロード遅い
- 通信状態が悪いなどでbox取得中に接続が切れると最初からになってしまう（リトライほしい）
- 90日経ったら自動的に再ダウンロードしたい
- システム要件満たしているかのチェックを追加
- テストが無いね

という感じで、足りないところが多くて恐縮です。
今後、時間を見つけて改善してきたいと思います。
rollupでグローバル汚染を防ぐ

日本語の情報がなかったのでメモ。

デフォルトの設定だと、importされたモジュールとimportした側のコードはグローバルに展開されます。
例: [グローバル汚染を引き起こす例](http://rollupjs.org/?version=0.36.4&shareable=JTdCJTIyb3B0aW9ucyUyMiUzQSU3QiUyMmZvcm1hdCUyMiUzQSUyMmVzJTIyJTJDJTIybW9kdWxlTmFtZSUyMiUzQSUyMm15QnVuZGxlJTIyJTJDJTIyZ2xvYmFscyUyMiUzQSU3QiU3RCUyQyUyMm1vZHVsZUlkJTIyJTNBJTIyJTIyJTdEJTJDJTIybW9kdWxlcyUyMiUzQSU1QiU3QiUyMm5hbWUlMjIlM0ElMjJtYWluLmpzJTIyJTJDJTIyY29kZSUyMiUzQSUyMmltcG9ydCUyMCU3QiUyMGN1YmUlMjAlN0QlMjBmcm9tJTIwJy4lMkZtYXRocy5qcyclM0IlNUNuY29uc29sZS5sb2coJTIwY3ViZSglMjA1JTIwKSUyMCklM0IlMjAlMkYlMkYlMjAxMjUlMjIlN0QlMkMlN0IlMjJuYW1lJTIyJTNBJTIybWF0aHMuanMlMjIlMkMlMjJjb2RlJTIyJTNBJTIyJTJGJTJGJTIwVGhpcyUyMGZ1bmN0aW9uJTIwaXNuJ3QlMjB1c2VkJTIwYW55d2hlcmUlMkMlMjBzbyU1Q24lMkYlMkYlMjBSb2xsdXAlMjBleGNsdWRlcyUyMGl0JTIwZnJvbSUyMHRoZSUyMGJ1bmRsZS4uLiU1Q25leHBvcnQlMjBmdW5jdGlvbiUyMHNxdWFyZSUyMCglMjB4JTIwKSUyMCU3QiU1Q24lNUN0cmV0dXJuJTIweCUyMColMjB4JTNCJTVDbiU3RCU1Q24lNUNuJTJGJTJGJTIwVGhpcyUyMGZ1bmN0aW9uJTIwZ2V0cyUyMGluY2x1ZGVkJTVDbmV4cG9ydCUyMGZ1bmN0aW9uJTIwY3ViZSUyMCglMjB4JTIwKSUyMCU3QiU1Q24lNUN0JTJGJTJGJTIwcmV3cml0ZSUyMHRoaXMlMjBhcyUyMCU2MHNxdWFyZSglMjB4JTIwKSUyMColMjB4JTYwJTVDbiU1Q3QlMkYlMkYlMjBhbmQlMjBzZWUlMjB3aGF0JTIwaGFwcGVucyElNUNuJTVDdHJldHVybiUyMHglMjAqJTIweCUyMColMjB4JTNCJTVDbiU3RCUyMiU3RCU1RCU3RA==)

ビルドしたjsファイルをそのままscriptタグから読み込むとグローバル変数が使われ、グローバル汚染を引き起こしていまいます。

# formatオプション

https://github.com/rollup/rollup/wiki/JavaScript-API#format

`format`オプションを`iife`(即時関数、Immediately-invoked function expression)に指定すると、コード全体が即時関数に囲まれグローバル汚染を引き起こさないようになります。

[formatオプションをiifeに指定した例](http://rollupjs.org/?version=0.36.4&shareable=JTdCJTIyb3B0aW9ucyUyMiUzQSU3QiUyMmZvcm1hdCUyMiUzQSUyMmlpZmUlMjIlMkMlMjJtb2R1bGVOYW1lJTIyJTNBJTIybXlCdW5kbGUlMjIlMkMlMjJnbG9iYWxzJTIyJTNBJTdCJTdEJTJDJTIybW9kdWxlSWQlMjIlM0ElMjIlMjIlN0QlMkMlMjJtb2R1bGVzJTIyJTNBJTVCJTdCJTIybmFtZSUyMiUzQSUyMm1haW4uanMlMjIlMkMlMjJjb2RlJTIyJTNBJTIyaW1wb3J0JTIwJTdCJTIwY3ViZSUyMCU3RCUyMGZyb20lMjAnLiUyRm1hdGhzLmpzJyUzQiU1Q25jb25zb2xlLmxvZyglMjBjdWJlKCUyMDUlMjApJTIwKSUzQiUyMCUyRiUyRiUyMDEyNSUyMiU3RCUyQyU3QiUyMm5hbWUlMjIlM0ElMjJtYXRocy5qcyUyMiUyQyUyMmNvZGUlMjIlM0ElMjIlMkYlMkYlMjBUaGlzJTIwZnVuY3Rpb24lMjBpc24ndCUyMHVzZWQlMjBhbnl3aGVyZSUyQyUyMHNvJTVDbiUyRiUyRiUyMFJvbGx1cCUyMGV4Y2x1ZGVzJTIwaXQlMjBmcm9tJTIwdGhlJTIwYnVuZGxlLi4uJTVDbmV4cG9ydCUyMGZ1bmN0aW9uJTIwc3F1YXJlJTIwKCUyMHglMjApJTIwJTdCJTVDbiU1Q3RyZXR1cm4lMjB4JTIwKiUyMHglM0IlNUNuJTdEJTVDbiU1Q24lMkYlMkYlMjBUaGlzJTIwZnVuY3Rpb24lMjBnZXRzJTIwaW5jbHVkZWQlNUNuZXhwb3J0JTIwZnVuY3Rpb24lMjBjdWJlJTIwKCUyMHglMjApJTIwJTdCJTVDbiU1Q3QlMkYlMkYlMjByZXdyaXRlJTIwdGhpcyUyMGFzJTIwJTYwc3F1YXJlKCUyMHglMjApJTIwKiUyMHglNjAlNUNuJTVDdCUyRiUyRiUyMGFuZCUyMHNlZSUyMHdoYXQlMjBoYXBwZW5zISU1Q24lNUN0cmV0dXJuJTIweCUyMColMjB4JTIwKiUyMHglM0IlNUNuJTdEJTIyJTdEJTVEJTdE)

```js:rollup.config.js
export default {
  // 前略
  format: 'iife',
  // 後略
}
```
AWSのインスタンスリタイアお知らせが来た時の対処

#あらすじ
AWSから
[Retirement Notification] Amazon EC2 Instance scheduled for retirement.
ってSubjectのメールがきました。
本文にはこんな内容が。  
> We have important news about your account (AWS Account ID: なんとかかんとか). EC2 has detected degradation of the underlying hardware hosting your Amazon EC2 instance (instance-ID: なんとかかんとか) in the ap-northeast-1 region

人間がいつかは年老いて"リタイア"するように、インスタンスさんも"リタイア"するのですね…。
なんて感心してる場合ではなく、「で、何すればいいの？」ってことで、私が行った対処をまとめます。

# 対処方法
まずは、AWSコンソールにログインして、対象インスタンスを確認。
> リタイア: このインスタンスは 2016年12月11日 15:39:34 UTC+9 後にリタイアが予定されています。

なんてメッセージが表示されています。
AWSの[「インスタンスのリタイア」](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/instance-retirement.html)ページをみますと、

*インスタンスをホストしている基盤のハードウェアで回復不可能な障害が検出されると、AWS によってインスタンスのリタイヤが予定されます。*

ということらしいです。  

何も対処しないと、リタイア日時以降にインスタンスが停止します。
それじゃ困る！って場合は、インスタンスの再起動または、作り直しが必要です。

再起動だけで済むのか、作り直しをせにゃあならんのか、は、インスタンスの「ルートデバイスタイプ」によって決まります。  

##### ルートデバイス: ebs
「ebs」の場合は、インスタンスの停止、そしてその後起動、でOKです。

##### ルートデバイス: instance-store
「instance-store」の場合は、インスタンスからイメージを作って、そいつを使って別のインスタンスを立ち上げて、元のインスタンスは削除する、と言った流れになります。(ちょっとめんどくさいですねぇ～)

# おわりに
メールが届いたことを忘れてしまって、うっかりリタイア日時を過ぎてしまった…！ってことにならないように、ささっと対処しましょう～。
【Ruby on Rails】バルクインサートしてみた

疲れたから細かい話は後で書く。（ごめんなさい

##とりあえず動くようにした
**参考にしたサイト**
http://qiita.com/xend/items/79184ded56158ea1b97a
>activerecord-importというgemを利用する。

色んな記事で「gemを使う」って書かれてるけど、
素人の僕にはどうやって使うのか分からないんですよね。
（gem install xxx...って事？って思ってました）

**gemを使うよ**
http://blog.livedoor.jp/sonots/archives/28704119.html
>Gemfile に
 gem 'activerecord-import'
を追加して
 $ bundle
だけですね。

そうなのか！！！

##どこでハマったのか
疲れたので後日書きます。
ごめんなさい。おやすみなさい。




## 2019/10/07（追記）
これについてはちゃんと書く。「後日書く」で終わらしたくない。
【Ruby on Rails】rails runnerでハマった話

疲れてたから細かいところまで書くの面倒くさい←

##とりあえず、動いた話から
**ベースにした参考URL**
http://d.hatena.ne.jp/yk5656/20140804/1407572756


**モデルを読み込んでくれなかったので、こっちも参考に**
http://altarf.net/computer/rails/2493
> runnerコマンドではデフォではモデルのクラスとかrequireしないので個別で呼ぶのだそうですよ。

めんどくせ！←

##どこでハマったのか
これについては後日書きます。
ごめんなさい、疲れました（正直）


おやすみなさい！←


## 2019/10/07（追記）
これについてはちゃんと書く。「後日書く」で終わらしたくない。
clonezilla でsshd起動しrootでログイン

## download

* [Clonezilla - Downloads](http://clonezilla.org/downloads.php)

![スクリーンショット_2016-12-07_07-53-41.png](https://qiita-image-store.s3.amazonaws.com/0/25728/c4d25f63-c1d6-6775-166c-8d9839a93011.png)

![スクリーンショット_2016-12-07_07-54-19.png](https://qiita-image-store.s3.amazonaws.com/0/25728/800ef8a1-315d-771e-fd93-044ae99c7a69.png)

## 起動

![ocs-01-b-bootmenu.png](https://qiita-image-store.s3.amazonaws.com/0/25728/d0e0d0a3-fc3f-b560-dc09-a0e3bd49a826.png)

```bash:IP取得
dhclient eth0
```

```diff:/etc/ssh/sshd_config
- PermitRootLogin prohibit-password
+ PermitRootLogin yes
```

```bash:rootアカウントのパスワード設定
passwd
```

```bash:sshd起動
service ssh start
```

```bash:ipaddress確認
ip a s | grep glo
```

## sshでrootログイン

```
ssh root@IPアドレス
```
Fess 検索クエリのブースト値を変更する

Fess 10.3
検索クエリに設定するブースト値を変更します。

### 変更方法
1. fess_config.propertiesを変更
2. Fessを再起動

```properties:app/WEB-INF/classes/fess_config.properties
# boost
query.boost.title=0.1
query.boost.title.lang=0.5
query.boost.content=0.2
query.boost.content.lang=1.0
```

特定のフィールドを検索するときにブーストさせたい場合は
フィールドを追加することもできます。

### 確認方法
Query Boostの値を確認するにはFessのアプリ側のログレベルを変更します。

```shell-session:fess.in.sh
"$FESS_JAVA_OPTS -Dfess.log.level=debug"
```
Fessを再起動して検索するとfess.logで確認できます。

```json:fess.log
DEBUG Query: {
  "from" : 0,
  "size" : 20,
  "query" : {
    "bool" : {
      "must" : {
        "function_score" : {
          "query" : {
            "bool" : {
              "should" : [ {
                "match" : {
                  "title" : {
                    "query" : "fess",
                    "type" : "phrase",
                    "boost" : 0.1
                  }
                }
              }, {
                "match" : {
                  "content" : {
                    "query" : "fess",
                    "type" : "phrase",
                    "boost" : 0.2
                  }
                }
              }, {
                "match" : {
                  "title_en" : {
                    "query" : "fess",
                    "type" : "phrase",
                    "boost" : 0.5
                  }
                }
              }, {
                "match" : {
                  "content_en" : {
                    "query" : "fess",
                    "type" : "phrase",
                    "boost" : 1.0
                  }
                }
              }, {
                "match" : {
                  "title_ja" : {
                    "query" : "fess",
                    "type" : "phrase",
                    "boost" : 0.5
                  }
                }
              }, {
                "match" : {
                  "content_ja" : {
                    "query" : "fess",
                    "type" : "phrase",
                    "boost" : 1.0
                  }
                }
              } ]
            }
          },
          "functions" : [ {
            "field_value_factor" : {
              "field" : "boost"
            }
          } ]
        }
      },
```