OmniAICreator/Qiita-1.07M huggingface dataset:
2018年度サマーインターンまとめ【エンジニア】 その2

[2018年度サマーインターンまとめ【エンジニア】](http://qiita.com/pokohide/items/c9b9e25acd21c8355065)の続きです。
前回に引き続きサマーインターンの情報を逐次更新していきます！

以下の企業のインターンがのっています。
* ニフティ株式会社
* Donuts
* コロプラ


## ニフティ株式会社
https://nifty-hr.snar.jp/jobboard/detail.aspx?id=POUO8vNdh4M

>　エンジニアとして、
>　サービスを生みだすプロとして、
>　「働く」を、本気で考える夏に。


### コースA　『【5days】IoTデバイスを使った開発インターン　』

IoTデバイスを自由に使って、５日間にわたりチーム開発を体験していただきます。
デバイスは当社で用意するほか、ニフティのクラウド環境も提供しますので、
自分だけでは出来ない開発にチャレンジできます！
また、現場で活躍しているIoTデザインセンターのエンジニアがサポートに入り、
"面白いアイデア"、”価値になるアイデア"の考え方や、
チームでのアジャイル開発の進め方 をレクチャーする時間も用意しています。

| |  |
|--------|--------|
|応募期間|**2016年６月30日**|
|実施期間|**2016年8月29日（月）～9月2日（金)**|
|応募資格|大学院・大学・短大・専門学校に在学中の方 ※学年不問|
|待遇|遠方の方には宿泊施設をご用意し、往復の新幹線・飛行機代を支給します|

### コースB　『Webサービス企画2days』

ＷＥＢサービスの現場での企画プロセスを体験できるインターン！
フレームに沿って企画の考え方やアウトプットについて学べます。
現場の社員からアドバイスを受けながら、最終日のプレゼンテーションに向けて チームで企画を完成させます。

| |  |
|--------|--------|
|応募期間|**2016年６月30日**|
|実施期間|**8/8（月）～9（火）／8/18（木）～19（金）**|
|応募資格|大学院・大学・短大・専門学校に在学中の方 ※学年不問|
|待遇|遠方の方には宿泊施設をご用意し、往復の新幹線・飛行機代を支給します|


## Donuts

### 5days 『Next Tech Project』
http://be-ars.colopl.co.jp/internship/engineer-5days.html

コロプラ社内にて、1週間かけてゲーム開発をしていただきます。
企画から、実装まで全てのフェーズに関わり、本当に面白いゲームとは何か？を学ぶ事が可能。
開発の際は、先輩エンジニア&デザイナーがサポートに入り、
コロプラのベテランクリエイターのレビューの上で高みを目指す経験を得られます。

| |  |
|--------|--------|
|締め切り|**2016年6月1日(水) 〜 2016年8月10日(水)**|
|実施期間|第１回目： **2016年8月8日(月)〜12日(金)**|
||第２回目： **2016年9月5日(月)〜9日(金)**|
|開催会場|株式会社Donuts東京本社|
|募集人数|24名|
|内容|コロプラ社内にて、1週間かけてゲーム開発体験|
|応募資格|大学院・大学・短大・専門学校に在学中の方 ※学年不問|



# さいごに
逐次更新していきます。
スライドモード

## スライドモードとは

QiitaやQiita Teamの投稿をスライド形式のユーザインタフェースで表示することができるモード。

主に技術系イベントでの発表資料や社内ミーティングの資料作成などに使ってもらうことを想定しています。

---

## 使い方

- [Horizontal rules - 水平線](http://qiita.com/Qiita/items/c686397e4a0f4f11683d#horizontal-rules---%E6%B0%B4%E5%B9%B3%E7%B7%9A)でページを区切りながら、投稿をスライドとして表示することができます。
- 投稿画面で以下の赤丸の部分にチェックを入れます。

<img width="1320" alt="slidescreenshot.jpeg" src="https://qiita-image-store.s3.amazonaws.com/0/33915/94b17c79-4936-9693-5a47-abc147a94c10.jpeg">

---

### 閲覧方法

- 投稿の上部に自動挿入される「スライドビュー」でスライド形式で投稿を閲覧
- スライドビューのフルスクリーンボタンをクリックし、フルスクリーンで表示

の2種類の閲覧方法があります。 

---
#### スライドビュー

![slideview.png](https://qiita-image-store.s3.amazonaws.com/0/33915/b649e125-79d5-6266-17ec-a52f38c122ec.png)


---
#### フルスクリーンボタン

<img width="732" alt="slidefullscreen.jpeg" src="https://qiita-image-store.s3.amazonaws.com/0/33915/e6d207fb-3a5f-8170-0327-846f8a1d4c77.jpeg">

---

#### 閲覧時のスライド操作

| 操作 |スライドビュー|フルスクリーン|
|:--|:--|:--|
|次に進む| →,（スライド内の右領域を）クリック|→, （スライド内の右領域を）クリック, PageDown, Space |
|前に戻る| ←,（スライド内の左領域を）クリック |←, （スライド内の左領域を）クリック, PageUp, Delete |
|下に移動| N/A（マウススクロールのみ）|↓, （下に移動できる場合）クリック, PageDown, Space|
|上に移動| N/A（マウススクロールのみ）|↑, （上に移動できる場合） PageUP, Delete|

---

プログレスバーをクリックしてスライドを移動することもできます。

<img width="843" alt="slideprogress.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/33915/e6df618e-f5c5-b11e-ec2c-2e7ba669a180.jpeg">

または、 :rewind: や :fast_forward: を使ってもスライドの移動できます。


---

## 見出し (Header) だけだと、このように表示されます

---

見出し (Header) 無しで、文章だけ書くと、このように表示されます。

---

## イメージ

---

![incrementsmembers.jpeg](https://qiita-image-store.s3.amazonaws.com/0/33915/124a4bf1-a965-05e0-4ad0-157c26282a59.jpeg)

---

### イメージの表示位置

現状は、1つのイメージを埋め込んだ場合、中央に位置するようにしています。ただし、この動作は今後変更される可能性があります。

---

## スライドモードの位置づけ

- デザインよりも中身を重視 :muscle: 
- 慣れているMarkdownで手軽に書きたい :pencil: 
- プレゼンの30分前にあわてて用意するようなとき用 :dash: 

ということで、PowerPointやKeynoteに取って代わろうなんて毛頭考えていません。

---

### 割りきった設計

特に、今までのスライド作成ツールの場合、1枚のスライドに収まるように、フォントサイズを少しずつ変更したりする必要がありましたが、Qiitaのスライドモードにはフォントサイズの変更機能もついていません。

1スライドからはみ出たら、下にスクロールして説明を続ければ良いと割り切っています。

---

### デザインより中身

---

## フィードバック

スライドモードのフィードバックは右下の [♥ご意見](http://qiita.com/feedback/new) よりお願いします :bow:

---

## FAQ

#### フォントサイズは変更できないの？
できません（現状は）。今後、フォントサイズが変更される可能性もあるので、フォントサイズに合わせてテキスト内容を変更することなどはお勧めしません。そのようなテキストレイアウトにこだわる方は他のツールを使うことをお勧めします。

---

#### iOSでフルスクリーン表示ボタンが有効にならないのだけれど
iOS WebKitにフルスクリーンAPIが実装されていないための制約です[^fullscreenapi]。それを含めて、フルスクリーン機能はブラウザによって挙動が異なったりするため、少しバギーかも知れません。何か気付いたことがあったら、ご連絡ください。

---

#### プログラミング以外の内容でスライドを作りたいのだけど
ご遠慮ください。スライドモードであっても、[良い記事を書くためのガイドライン](http://help.qiita.com/ja/articles/qiita-article-guideline) を尊重するようにお願いします。



[^fullscreenapi]: http://caniuse.com/#feat=fullscreen
Ruby on Railsで独自のValidatorを追加してテストする

# 書いてあること
* 簡単な Validator の作り方
* RSpec のテストの書き方

# Validator を作る
*app/validators* に Validator を追加していきます。

今回は Rails 標準の [validates_numericality_of](http://api.rubyonrails.org/classes/ActiveModel/Validations/HelperMethods.html#method-i-validates_numericality_of) の単純に大小比較するだけのやつを作ります。

↓使用イメージとしてはこんな感じで

```ruby
class Hoge
  validates :value1, greater_than: :value2
end
```

↓ Validator のコードはこんな感じ

```ruby:app/validators/greater_than_validator.rb
class GreaterThanValidator < ActiveModel::EachValidator
  def validate_each(record, attribute, value)
    return if value > record[options[:with]]
    record.errors[attribute] << (options[:message] || "must be greater than #{options[:with]}")
  end
end 
```

* `record` には検証対象のレコード
* `attribute` には検証対象の要素名の Symbol
* `value` には検証対象の要素に入っている値

が入ってきます。

それとは別に Validator に指定した要素が諸々 `options` の中に入ってます。今回の場合は `:value2` という Symbol です。他に色々指定した場合は色々入ってくると思うので、そこは色々試してみてください。

# テストを書く
```rb:spec/validators/greater_than_validator_spec.rb
require 'rails_helper'

describe GreaterThanValidator, type: :validator do
  let(:clazz) do
    Struct.new(:value1, :value2) do
      include ActiveModel::Validations
      validates :value2, greater_than: :value1
    end
  end

  describe '#validate_each' do
    subject { clazz.new(value1, value2) }

    context 'when value1 higher than value2' do
      let(:value1) { 1 }
      let(:value2) { value1 + 99 }
      it { is_expected.to be_valid }
    end

    context 'when value1 lower than value2' do
      let(:value1) { 1 }
      let(:value2) { value1 - 99 }
      it { is_expected.not_to be_valid }
    end

    context 'when value1 equal value2' do
      let(:value1) { 1 }
      let(:value2) { value1 }
      it { is_expected.not_to be_valid }
    end
  end

  describe 'error messages' do
    subject { object.errors.messages }

    let(:object) { clazz.new(100, 0) }
    before { object.validate }

    it { is_expected.to eq(value2: ['must be greater than value1']) }
  end
end
```

ポイントとしては `let(:clazz)` の部分で、 `Struct.new` を使って `include ActiveModel::Validations` することで検証対象のモデルをテスト用に作れるという感じです。

あとは素朴に `be_valid` とかやってるだけ。
FileMaker Serverをインストールするときのメモ

個人的メモ

Windows Server
サーバーマネージャー　→　ローカルサーバー　→　Windowsファイアーウォール　→　詳細設定

受信、送信の規則それぞれに
>80, 443, 2399, 5003, 16000 ,TCP ,接続許可

を設定。

クライアント側で接続し、DBが表示されるか確認

参考
[FileMaker Server のための Windows および OS X のファイアウォールの設定](http://filemaker-jp.custhelp.com/app/answers/detail/a_id/13143/~/filemaker-server-%E3%81%AE%E9%80%9A%E4%BF%A1%E3%82%92%E8%A8%B1%E5%8F%AF%E3%81%99%E3%82%8B-windows-%E3%83%95%E3%82%A1%E3%82%A4%E3%82%A2%E3%82%A6%E3%82%A9%E3%83%BC%E3%83%AB%E3%81%AE%E8%A8%AD%E5%AE%9A%E6%96%B9%E6%B3%95)
Googleスプレッドシートにて、ステータス列の文字列に応じて、その行全体の色を変える

Googleスプレッドシートにて、ステータス列の文字列に応じて、その行全体の色を変える。
（ある列の状態に応じて、行の書式を変える。）

1. ツールバーの「表示形式」＞「条件付き書式」をクリックする。
- 「条件付き書式設定ツール」が画面右側に表示される。
- 「範囲に適用」に、色を変えたい部分を適用する。（例：「A1:H1000」）
- 「セルの書式設定の条件」で、「カスタム数式」を選択し、次の式を入力する。
 - 「=($B1="完了")」
※ステータス列は、B列とする。B列に「完了」と入力すると、その行の色が変わる。
- 「書式設定のスタイル」で、行の色を指定する。（今回はグレーを選択している。）
- 「完了ボタン」を押して終わり。

<img width="249" alt="スクリーンショット 2016-06-20 14.39.42.png" src="https://qiita-image-store.s3.amazonaws.com/0/51148/d8c0eb58-2533-aa8b-21ba-aecad83b2fa5.png">


↓ステータスが「完了」の行は、グレーになっている。
<img width="695" alt="スクリーンショット 2016-06-20 14.39.20.png" src="https://qiita-image-store.s3.amazonaws.com/0/51148/a18429e1-e166-ad3f-236f-a1fd122a81e4.png">
djangoでsettingsに書いているEMAIL_HOST_USER以外のユーザーでメールを送信する


## send_mailを使う。
```py:
from django.core.mail import send_mail

send_mail(subject, message, from, [to], fail_silently=False, auth_user=ANOTHER_HOST_USER, auth_password=ANOTHER_HOST_PASSWORD)
```

ただこれだとToでしか送れない。

BCCで送りたいんじゃ〜〜。

## EmailMessageクラスを利用

send_mail()もEmailMessageクラスに軽くラッパをかぶせたもの。

```py:
from django.core.mail import EmailMessage

email = EmailMessage(subject, message, from, [to], [bcc])
email.send(fail_silently=False)
```

BCCで送信できた！！
ただ、こうすると、settingsのEMAIL_HOST_USERで送ることになる。

### connectionを手動で開く
通常send_mail()のときはsendするときに勝手に開いてくれるけど、自分で開くようにする。

```py:
from django.core.mail import EmailMessage, get_connection

connection = get_connection(fail_silently=False, username=ANOTHER_HOST_USER, password=ANOTHER_HOST_PASSWORD)
connection.open()
email = EmailMessage(subject, message, from, [to], [bcc], connection=connection)
email.send()
# 複数送りたい場合
# connection.send_messages([email])
# 手動で開いたため閉じるのも手動
connection.close()
```

とするとsettingsに書いてあるユーザー以外のユーザーで宛先BCCのメールを送信できた！
 
 
 
 
 
まちがえてない？あってる？？？
Hubotを使ってGoogle AnalyticsをSlackに通知する

 `hubot-analytics` というライブラリを使います。
https://github.com/PlanBCom/hubot-analytics  

## 手順
### Google Developer Console でAnalytics APIを有効にする
https://console.developers.google.com/apis

### 認証情報を作成する
認証情報を作成 > サービスアカウントキー > JSON
※ p12ではなくjson形式でダウンロードする

### キーを登録する
ダウンロードしたjsonを開き下記の項目の中身をコピーしてHubotが動いているサーバーにキーを登録する
`GOOGLE_API_PRIVATE_KEY`
`GOOGLE_API_CLIENT_EMAIL`
Herokuで動かしている場合、Heroku管理画面の `Config Variables` にキーとバリューをセットする
※ `GOOGLE_API_PRIVATE_KEY`は改行コードが含まれためっちゃ長いコードをそのまま貼る

### サービスアカウントキーが発行したアドレスをAnalyticsに登録する
Analytics > ユーザー管理から権限 > `GOOGLE_API_CLIENT_EMAIL`を追加

## 実行する
### 取得できるアカウント一覧表示(IDが出てくる)
`> hubot profiles`

### 24hのデータ表示
`> analytics pageviews {取得したアカウント}`
セッションとユーザー数が返ってくる
その他取得できるのはリポジトリのREADMEに書いてあるのでそちらを

### その他
ここまでやっておいて言うのもなんですが、単純にslackに通知したいのであればこのサービスを使えば同様のことはできるようです...🙃
https://statsbot.co/
[Google AnalyticsをSlackからすぐ確認できるStatsbot](http://news.botandegg.com/archives/70)
libuv

```bash
 gcc -g -Wall -I/home/vagrant/data/uvbook/code/../libuv/include -o 1 1.c /home/vagrant/data/uvbook/code/../libuv/.libs/libuv.a -lrt -ldl -lm -pthread -lcurl
```

https://www.le.ac.uk/users/rjm1/cotter/page_69.htm

http://web.eecs.utk.edu/~bvz/teaching/cs140fa08/labs/lab1/cs102/malloc.html

http://cslibrary.stanford.edu/106/

http://cslibrary.stanford.edu/

http://www.cs.yale.edu/homes/aspnes/pinewiki/C(2f)Pointers.html#The_null_pointer
zsh | アスタリスクを打つと zsh: command not found: と表示されてしまう時は noglob

たとえば、 zsh で単にアスタリスクを打つと。

`$ *`

zsh が Apple.txt というファイルを **コマンドとして実行** しようとしてしまう。
(設定にもよるかもしれない)

`zsh: command not found: Apple.txt`


これは特定コマンドに、アスタリスクつきの引数を渡す時に困る。

# 解決

コマンドを noglob で始めれば良い。

`$ noglob [command]`

# 環境

- zsh 5.0.8 (x86_64-apple-darwin14.4.0)








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
EasyBCDでwindows boot managerからISO bootし、windowsを消してRanchreOSをインストール

## 参考

* [EasyBCD 2.3 - Windows Vista 以降のOS のブートマネージャーを編集するツール](http://mikasaphp.net/easy_bcd.html)

## EasyBCDのインストール、起動

*  [公式サイト](https://neosmart.net/EasyBCD/)からダウンロード、インストール。

## boot2dockerの例

![easybcd.png](https://qiita-image-store.s3.amazonaws.com/0/25728/03657206-7369-5e8c-de0f-0eca4a51c711.png)

OS再起動し、boot2dockerが起動できることを確認。

## RancherOSをインストールする手順 (メモリ1GB以上必要)

* [Configuring Network Interfaces in RancherOS](https://docs.rancher.com/os/networking/interfaces/)
* [Rancher Documentation](http://docs.rancher.com/os/running-rancheros/server/install-to-disk/)
* [rancheros iso download](https://github.com/rancher/os/releases)

![rancher.png](https://qiita-image-store.s3.amazonaws.com/0/25728/222935a9-42d6-baf9-326b-b4eb4cd52061.png)
![rancher2.png](https://qiita-image-store.s3.amazonaws.com/0/25728/d6e3150f-ae63-58a1-e971-412017b1c0b0.png)

![無題.png](https://qiita-image-store.s3.amazonaws.com/0/25728/3671455a-0585-e66e-7aa7-002cf2803c48.png)

![無題.png](https://qiita-image-store.s3.amazonaws.com/0/25728/611c370c-4198-2c06-216d-4ccbb3da591c.png)

* [RancherOSをCDブートで運用 - Qiita](http://qiita.com/tukiyo3/items/548d67b5aa5a308aac40)
* [Rancher Documentation](http://docs.rancher.com/os/cloud-config/)

![無題.png](https://qiita-image-store.s3.amazonaws.com/0/25728/ff29925b-3038-e57e-3b37-53feb6fb7344.png)


```bash:インストール
ip addr add 10.10.10.2/24 dev eth0
ip route add default via 10.10.10.1
echo "nameserver 8.8.8.8" > /etc/resolv.conf
```

* 事前に用意しておいたos-config.ymlをダウンロード。

```rb:~/os-config.yml
#ssh_authorized_keys:
#  - ssh-rsa AAA...
network:
  interfaces:
    eth*:
      dhcp: false
    eth0:
      address: 10.10.10.2/24
      gateway: 10.10.10.1
  dns:
    nameservers: [8.8.8.8,8.8.4.4]
users:
  - name: rancher
    passwd: rancher
```

```インストール開始
sudo ros install -c os-config.yml -d /dev/sda
```

![無題.png](https://qiita-image-store.s3.amazonaws.com/0/25728/6739f624-692a-a21d-84bf-a7d9822060e0.png)

----

## mini.isoでインストールするのが簡単

* [ubuntu 16.04 mini.iso](http://ubuntutym.u-toyama.ac.jp/ubuntu/dists/xenial/main/installer-amd64/current/images/netboot/) 54mb
* [debian8 mini.iso](http://ftp.riken.go.jp/Linux/debian/debian/dists/stable/main/installer-amd64/current/images/netboot/) 28mb
* [debian9 devel mini.iso](https://d-i.debian.org/daily-images/amd64/daily/netboot/) 36mb
GNOME 3 のタイトルバーを細くする

# はじめに
私はUbuntuを使っている。どうもUnity(ウィンドウマネージャ)が好きになれなくて、長らくUbuntu GNOMEを使っているのだが、現在のGNOMEもウィンドウのタイトルバーが太すぎて気に入らない。画面の高さは有限なので、これを節約してもう少し広く画面を利用しようと思う。

（この記事は末尾の参考文献にある記事の内容とほぼ同一である。正直そちらを読んでも構わないと思う）

![before.png](https://qiita-image-store.s3.amazonaws.com/0/10771/27e427d4-f2a7-775f-3ff0-9e87f96ba6b9.png)


# 対象バージョン

本記事の内容は少なくとも以下のバージョンで動作を確認している(おそらくメジャーバージョンが同じなら差異は無いと思う)。

- Ubuntu GNOME 16.04 LTS
- GNOME Shell 3.18.5
- libgtk 3.18.9-1ubuntu3

# 作業
ホームディレクトリ以下にある、`~/.config/gtk-3.0/gtk.css` に以下の記述を追加する。ファイルが存在しない場合は作成する。

```gtk.css
.header-bar.default-decoration {
    padding-top: 2px;
    padding-bottom: 2px;
}

.header-bar.default-decoration .button.titlebutton {
    padding-top: 2px;
    padding-bottom: 2px;
}
```

その後、GNOME Shellを再起動することで変更が適用される。`Alt-F2`を入力すると「コマンドを入力」というダイアログが表示されるので、`r`を入力してエンターを押下する。

以下のようにタイトルバーが細くなっていれば成功である。

![after.png](https://qiita-image-store.s3.amazonaws.com/0/10771/2a882fe3-32d4-b97a-3b1e-0458dece850a.png)


# まとめ

- GTKのパーツを調整するときは`~/.config/gtk-3.0/gtk.css`を編集する

# 参考文献（というか元記事）

- [Reduce title bar height in gnome 3 / gtk+ 3](http://unix.stackexchange.com/questions/257163/reduce-title-bar-height-in-gnome-3-gtk-3)
 - 本記事に書いたことはすべてこの記事の内容そのままである。すこしだけ手を加えたところはパディングのパラメータで、元記事の`0px`では窮屈な印象を受けたので若干広げてある。
PHPのデータベース接続のReconnect処理について調べてみた

# 調べた理由
長い間、JavaとNode.jsをやっていたのですが、
PHPをやることになり、DB周りのreconnect処理についてはどうなっているのかな？と気になったので、調べてみました。

## IdiormとEloquentを調べた
シンプルなORMのIdiormと、LaravelフレームワークのデフォルトORM、Eloquentのソースコードを眺めました。

## PDOを使っていた
PHPでデータベースに接続する際のネイティブドライバーのようなもの。
IdiormもEloquentも、基底部分で使用しています。

## IdiormのPDOの使い方
基本的に、SQL実行前に接続を確認して、接続が無ければ、接続してから、SQLを実行するという形。

ORM内部では、実行時にエラーが起こることを想定していない作り。。。
エラー処理は、使う側で頑張れということでしょうか？

上述の作りなので、reconnect処理なども、SQL実行前に行うだけで、SQL実行時にエラーがあった場合などは考慮されていないです。。。

Transactionのロールバックなども考慮していないですね。。。

## EloquentのPDOの使い方
独自にreconnect処理を定義出来ます。

こちらも実行時に接続の確認はしているのですが、
エラー時にTransaction開始していた場合、ロールバックするなど、処理が丁寧に書いてあります。

個人的に、ORMはシンプルであってほしいので、Eloquentは難しいかなぁと思っておりますが、エラー処理に関しては良いと思います。

## DB周りの考慮点
* reconnect処理はあるか？
* エラー時の処理は大丈夫か？
* コネクションプーリングなど、どうなっている？
* Transactionは対応しているか？
* 複数DB接続に対応しているか？

## まとめ
Node.jsでは、disconnectのイベントが発生した場合に、reconnectするなど、イベントごとに処理が書いてあるので分かりやすいです。しかし、PHPの場合、クエリ実行前チェックとか、結構ゴリ押しで書いてあるイメージでした。
（disconnectも無くて、オブジェクトにnullを入れるとdisconnectになるとか。。。）

PHPでもEventEmitterがあるようなので、
PDO側が対応してくれれば、結構シンプルに書けるような気がしたのですが、やってくれないかなぁ。

実は、PDOのイベント実装あるよとか、あれば是非コメント下さいm(_ _)m
時計で操作させるなんて終わってる


時計で操作させるなんて、根本的に思想が間違ってる
文字版にしても竜頭にしても操作なんてしない
チラ見で完結させないと

【ナビは良い】
ナビはいいと思う
最初からwatchosのナビは優秀
操作はiPhoneでやらせて、続きの表示をwatchにさせるのが一番使える

【通知系も良い】
メッセージとかメールも便利
通知来て返信するかどうか判断できるから。

【アクティビティモニターも良い】
アクティビティモニターも成功してると思う
結果はあとでiPhoneで見ればいいから。

【カメラがつくなら】
- もしカメラがつくなら静止画でもいいから360撮れるようにしてライフログにすればいいと思う操作いらないし
- 赤外線やミリ波でもいいけど、vslamで深度取ってバイブレーションで距離伝えられるようになれば盲にとっては無くてはならないデバイスになる可能性があると思っている。

【問題点】
1. チラ見したとき画面が真っ黒で手首をくるくるさせなくちゃいけないストレスはNG。
ストレスを解消させるために画面の焼きつきも仕方ないと思う（ストレス解消のほうが優先順位が高い）

【そのほか】
- 設定、カスタマイズのときに画面操作があってもそれは別に良いと思うけど、操作はiPhoneに集約して部品点数を減らしてシンプルにしたほうがアップルらしい？
- 画面の狭さはiPhoneの視差効果のように奥行きをもたせて解決出来ない？（覗き窓のように）

操作を諦める指針を明確にするためにも、
新製品で機能を増やすのではなく、思い切って機能を減らして欲しい。

Pingを中止にしてしまうように。
https://ja.wikipedia.org/wiki/ITunes_Ping

追記2016/9/1
アクティビティが時計での操作要求してくるけど、iOSでやらせるべき。
時計で操作させるなんておわってる。
AWS Elastic Beanstalk/awsebcliからeb init後にAccess、Secret Key変更

MACの場合です。

brewとかでawsebcliをインストールしてからeb initする時にAccess Key IDとSecret Access Keyを入力します。

今回私の場合はテスト環境と本番環境のアカウントがそれぞれあり、先にテスト環境のアカウントでアクセスキーを作成し
eb initをしました。

環境を構築した後、本番環境のアカウントでeb initをしようとしたらずっとテスト環境につながりました。
なんで？って思い、探したらこちらにアクセスキーとシークレットキーが登録していたのが原因でした。

「~/.aws」に「config」ファイルがあると思います。

```mac:config
[profile eb-cli]
aws_access_key_id = 自分のAWS Access Key ID
aws_secret_access_key = 自分のAWS Secret Access Key

[default]
```

こちらで自分のIDとKEYを変更します。

あら、できた。
【Android Studio 4.0】Code Irisでクラス関係を把握する

# Code Iris

<img width="450" alt="スクリーンショット 2016-06-20 11.55.52.png" src="https://qiita-image-store.s3.amazonaws.com/0/1901/9c01c493-9c1f-6975-44db-1754fec558d9.png">

クラス関係を見える化してくれるプラグインです。
全体像を把握する際に役立ちます。

http://www.codeiris.com/
https://plugins.jetbrains.com/plugin/7324-code-iris/

#機能

* 特定の文字にマッチするクラスをハイライトする
* クラスの関係性を色分け表示する
* ３種類の粒度で視覚化してくれる　（Module, Package, Class）
* AndroidStudioで現在開いているクラスの関係性を自動で視覚化

#活用例

* 新しいプロジェクトにアサインされた時
* リファクタリングしたい時
* サンプルコードやOSSの把握


#導入方法

1. Install & Restart IDE

![Screen Shot 2020-08-26 at 18.16.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1901/b7b98dc4-1dc9-c1ca-9d12-553c66a217c0.png)
![Screen Shot 2020-08-26 at 18.16.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1901/04661ade-8927-ce9d-e65b-f92e5ee739d4.png)

2. Code Irisを起動

![Screen Shot 2020-08-26 at 18.26.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1901/b50c1d93-76ac-862b-fba7-91f1d9bca5fd.png)


3. Create Graph をクリック

![Screen Shot 2020-08-26 at 18.26.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1901/5a238d12-cbb0-c218-a841-e7d1f7620bb0.png)

4. モジュールを選択

![Screen Shot 2020-08-26 at 18.27.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1901/988436d4-5282-e4ee-b9fc-42ff98f0dcc8.png)

5. クラス関係図の完成

| Module View | Package View |
|:-:|:-:|
|![Screen Shot 2020-08-26 at 18.27.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1901/a51f6ec5-6eff-7a89-d4a2-bb1702356f1e.png)|![Screen Shot 2020-08-26 at 18.28.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1901/15c19bde-e294-1bd4-93c2-7eb351617e92.png)|

6. クラスを選択することでそのファイルを開ける

![Screen Shot 2020-08-26 at 18.31.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1901/294335cc-a289-c33c-0629-a09aa5687025.png)

## 所感

ちょっとダサいですが、全体像把握には一役買ってくれそうです。
一度使ってみては如何でしょうか。

2020/08/26
4年ぶりにAndroidを触る機会があり、この記事をアップデートしました。
Code Irisが放置されず保守され続けていることは良いですが、相変わらず見た目と操作性は微妙です。
/usr/bin/ld: cannot find -lcurl

sudo apt-get install libcurl4-openssl-dev

```bash
The following packages have unmet dependencies:
 libcurl4-openssl-dev : Depends: libcurl3 (= 7.22.0-3ubuntu4.14) but 7.22.0-3ubuntu4.15 is to be installed
E: Unable to correct problems, you have held broken packages.
```

libcurl4-openssl-dev : depends: libcurl3 (= 7.22.0-3ubuntu4.14) but 7.22.0-3ubuntu4.15 is to be installed

http://bbs.d-programming-language-china.org/topic4.html

```bash
ld -lcurl --verbose
```

http://stackoverflow.com/questions/5136479/usr-bin-ld-cannot-find-lcurl

解决办法是直接把libcurl3卸了

sudo apt-get purge libcurl3
jQueryのCookieの有効期限を当日の深夜23:59:59までにする方法(要jQuery.cookie.js)

jQuery.cookie.jsでは

$.cookie('submit_date', 'submitted' , { expires: 1 });

のような書き方をすればcookieの有効期限を1日後までに設定できますが、
これだと例えば1日1回まで入力を受け付けるフォームを作成しようと考えた時、
フォーム内容を投稿してから24時間待たないと次の投稿が出来ず、要件を満たせません。

そこで、フォーム内容を投稿した日の23:59:59で、cookieを破棄するスクリプトを下記します。

var date = new Date();
var midnight = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 23, 59, 59);
$.cookie('submit_date', 'submitted' , { expires: midnight });

取り急ぎ。
便利なAlias

#1.個人的によく設定しているLinuxのalias

割と私的利用

##1.1 一つ上の階層へ
    alias dd="cd ../"

意外と便利。cd ../と打つのはめんどい
※ddコマンドがインストールされてる環境では別名にしましょう

##1.2 sshコマンド
    alias nat="ssh -i ~/.ssh/キー -l ユーザ IP"
接続は格段に楽になる

##1.3 ls -alコマンド
    alias ll="ls -al"
lsはあまり使わない人向け

その他のコマンドなど、色々あるけど、共通的なのはこんな感じ
何かあれば追加していこうと思う。
ExcelVBAのファイルの読み込みマクロ

#1.ExcelVBAのファイルの読み込みマクロ
完全に私的利用
毎回調べながら書いてるので、ここに書いておく

エンコードや、改行指定ができるので便利

```:マクロ
Sub file()

    Dim f As Object, cnt As Long
    
    'Dim list As Collection
    'Set list = New Collection
    
    Set dicT = CreateObject("Scripting.Dictionary")
    Set dicTDu = CreateObject("Scripting.Dictionary")
    
    Set restart = CreateObject("VBScript.RegExp")
    restart.Pattern = "start"
    restart.Global = True
    
    Set reend = CreateObject("VBScript.RegExp")
    reend.Pattern = "end"
    reend.Global = True
    
    With CreateObject("Scripting.FileSystemObject")
        
        'ファイル数分ループ
        For Each f In .GetFolder("フォルダまでのパス").Files
                       
            'オブジェクトを作成
            Dim txt As Object
            Set txt = CreateObject("ADODB.Stream")
            
            'オブジェクトに保存するデータの種類を文字列型に指定する
            txt.Type = 2
            '文字列型のオブジェクトの文字コードを指定する
            txt.Charset = "UTF-8"
            txt.LineSeparator = 10 '改行LF（10）
            
            'オブジェクトのインスタンスを作成
            txt.Open
            
            'ファイルからデータを読み込む
            txt.LoadFromFile (f)
            
            '最終行までループする
            Do While Not txt.EOS
                '次の行を読み取る
                readString = txt.ReadText(-2)
                
                If InStr(readString, kaishi) Then
                    
                    Set mc = restart.Execute(readString)
                     'なんかする
                    End If
                    
                End If
                
                If InStr(readString, syuryo) Then
                    
                     'なんかする
                    
                End If
                
            Loop
            
            'オブジェクトを閉じる
            txt.Close
            
            'メモリからオブジェクトを削除する
            Set txt = Nothing

        Next
    End With

End Sub

```
geometry > arctan()の取り方 > y/x or x/y

x,yから方向を計算するときatan2()関数使用時はy/xの逆正接を取る。

[math.h](http://www.c-tipsref.com/reference/math/atan2.html)
> atan2 関数は y / x の逆正接 (arctan) を計算し，結果を double 型で返します．

[office](https://support.office.com/ja-jp/article/ATAN2-%25E9%2596%25A2%25E6%2595%25B0-c04592ab-b9e3-4908-b428-c96b3a565033?ui=ja-JP&rs=ja-JP&ad=JP)
> ATAN2(a,b) と ATAN(b/a) は等しくなりますが、ATAN2 では a に値 0 を使用できる点が異なります。

一方で、x/yの逆正接を取る例もある。

http://diydrones.com/forum/topics/limitation-of-triaxis
> Tilt along incline/Skew: arctan(y/x) or arctan(x/y) depending on where you want the angle relative to

角度がX軸からの角度なのか、Y軸からの角度なのかの違いなのだろう。

検算するときに混乱したのは上記の違いによるものだった。
Npmをいじくってみた

#1.前回までのNodeJS

NodeJSをインストールしたので
http://qiita.com/yuki_saito_/items/0de82f47e03374c8251d

今回はNPM(パッケージマネージャーを使ってみる)
簡単に動作確認するところまで。

#2.手順

##2.1作業ディレクトリの作成
今回用の作業ディレクトリを作成する。
mkdir -p  Nodetest/npm-example
cd Nodetest/npm-example

#2.2初期化コマンド
npm init　コマンドを事項

```shell:コマンド
$npm init 

// こんな入力を求められる

Press ^C at any time to quit.
//プロジェクトの名前
name: (npm-example) example
// バージョン
version: (0.0.0) 
// 説明
description: setumei
//最初のページ
entry point: (index.js) 
test command:
// 連携するGit 
git repository: 
keywords: 
author: Noname
license: (ISC) 

{
  "name": "example",
  "version": "0.0.0",
  "description": "setumei",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "Noname",
  "license": "ISC"
}


Is this ok? (yes) yes
```
そうすると上記のjsonがpackage.jsonとして保存される

##2.3　アンダースコアJSのインストール
ためしにアンスコJSを入れてみる

npm install --save underscore

--saveコマンドは、package.jsonに依存を追加するコマンド（プロダクト用）
--save-devコマンドは、package.jsonに依存を追加するコマンド(開発用)
-gコマンドは、package.jsonに依存を追加するコマンド(マシン全体で利用したいとき)

node_modulesフォルダができる（この中にアンスコjsが入っている）


```json:package.json
{
  "name": "example",
  "version": "0.0.0",
  "description": "setumei",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "Noname",
  "license": "ISC",
  "dependencies": {
    "underscore": "^1.8.3"
  }
}

```
はこんな感じで、dependenciesが追加されている

※ためしに、node_modules削除して、npm installコマンドをたたくと
　package.jsonに従ってインストールするので、アンスコJSが再度インストールされる

##2.4 動かしてみる
せっかくなので動かしてみる

```javascript:unsco.js
// Node.jsの外部ライブラリの読み込み
var _ = require('underscore');

_.each([1,2,3],function(elem) {

	console.log(elem);

	});

```

```shell-session:コマンド
node unsco.js
```

で起動

ローカル環境の構築とか、色々はかどうりそうだなー

次はGrunt、Gulpあたりかな
メモ: 軽量cssフレームワークPure(17kb、IE6にも対応)

## 公式サイト

* http://purecss.io/
* https://github.com/yahoo/pure/
    * 1.0 出てた (2017/6)

* その他
    * [neiesc/ListOfMinimalistFrameworks: A list of minimalist frameworks (simple and lightweight).](https://github.com/neiesc/ListOfMinimalistFrameworks)

firefox

![img.png](https://qiita-image-store.s3.amazonaws.com/0/25728/6c6336a1-d01b-2edb-cc5d-57715ac7cfd2.png)

IE6

![ie6.jpg](https://qiita-image-store.s3.amazonaws.com/0/25728/d35d6060-d7a8-1cc7-7800-8edb27c98883.jpeg)


```html:
<link rel="stylesheet" href="http://yui.yahooapis.com/pure/0.6.0/pure-min.css">
<!--[if lte IE 8]>
    <link rel="stylesheet" href="http://yui.yahooapis.com/pure/0.6.0/grids-responsive-old-ie-min.css">
<![endif]-->
<!--[if gt IE 8]><!-->
    <link rel="stylesheet" href="http://yui.yahooapis.com/pure/0.6.0/grids-responsive-min.css">
<!--<![endif]-->

<div class="pure-g">
    <div class="pure-u-1-3"><p>Thirds</p></div>
    <div class="pure-u-1-3"><p>Thirds</p></div>
    <div class="pure-u-1-3"><p>Thirds</p></div>
</div>

<form class="pure-form">
    <fieldset>
        <legend>A compact inline form</legend>

        <input type="email" placeholder="Email">
        <input type="password" placeholder="Password">

        <label for="remember">
            <input id="remember" type="checkbox"> Remember me
        </label>

        <button type="submit" class="pure-button pure-button-primary">Sign in</button>
    </fieldset>
</form>
```
Gensimを使わないで、Pythonでword2vecを使う

# 環境

Python 3.5.1
conda 4.0.5
OSX 10.10.5

# 参考
https://github.com/danielfrg/word2vec

# インストール

```
$ pip install word2vec
```

特にトラブルもなくインストールできた。

# 使い方
http://nbviewer.jupyter.org/github/danielfrg/word2vec/blob/master/examples/word2vec.ipynb
iOSでキーボードを閉じる方法各種

iOSでキーボードを閉じる方法ですが、いくつか存在します。

## UITextField / UITextViewに指示する方法

最も一般的かと思いますが、ファーストレスポンダーであるUITextFieldやUITextViewのresignFirstResponder()を実行します。

特定のUITextFieldやUITextViewの状態を変更することができるという特徴があります。

```swift
textField.resignFirstResponder()
```

## UIViewに指示する方法

ファーストレスポンダーであるUITextFieldやUITextViewが載っているUIViewのendEditing(:)を実行します。

どのUITextFieldやUITextViewがファーストレスポンダーかを知る必要がありません。

```swift
view.endEditing(true)
```

## Key Windowに指示する方法

Key WindowのendEditing(:)を実行します。

表示しているビューのコントローラを知らなくてもキーボードを閉じることができます。

```swift
UIApplication.sharedApplication().keyWindow?.endEditing(true)
```

## UIApplicationに指示する方法

UIApplicationのsendAction(:,to:from:forEvent:)を実行します。toにnilを渡すことで、現在のファーストレスポンダーに対してメソッドを実行することができることを利用しています。

Windowより上層のUIApplicationを利用することができます。

```swift
UIApplication.sharedApplication().sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, forEvent: nil)
```

## UIScrollViewのkeyboardDismissModeを利用する方法

iOS7以降では、スクロールビューやテーブルビューを利用している場合に、それらをドラッグしたりキーボードを下にドラッグした時にキーボードを閉じるように設定できます。

```swift
scrollView.keyboardDismissMode = .OnDrag
scrollView.keyboardDismissMode = .Interactive
```
Windows Server 2012 64bitにMQTT(Mosquitto)を入れるメモ

下記ページを参考にWS2012にMosquittoを入れたところでハマったポイント

[Windows 7 64bitにMQTT(Mosquitto)を入れるメモ](http://www.1ft-seabass.jp/memo/2015/07/13/windows-7-64bit-install-mosquitto/)

#パスは変えなくても大丈夫
>C:\Program Files (x86)\mosquittoではなく C:\mosquitto にします。

DLLを入れる必要があるので～と記述ありますが、どうせDLLを直接コピーするのでインストールパスは変えても変えなくても問題ありません。

#pthreadsはx86の方を使う！！
>1 Pre-built.2\dll\x64\pthreadVC2.dll
>にあるようです。pthreadVC2.dllをMosquittoフォルダに入れます。

とあるのでx64が正解かと思いきや、後述するpub/sub.exeを動かすためにはx86が正解のようです。
なのでこちら↓をコピーして使いましょう。
>~\pthreads-w32-2-9-1-release\Pre-built.2\dll\x86\pthreadVC2.dll

#Serviceとして動かすには？
参考ページではcmdから起動させる様子が見られますが、当然Serviceとしても起動可能です。
`管理ツール＞サービス＞Mosquitto Broker`
から開始しましょう。

#Pub/Sub.exeの使い方
以下の流れで動作確認できるかと！

0.Brokerを立ち上げる（cmdからでもServiceでもOK）
　`mosquitto.exe -v`　←cmdから立ち上げる例
1.Subscriverを立ち上げる（cmd1）
　`mosquitto_sub.exe -h localhost -t "#" -v`
2.Puslisherを立ち上げる（cmd2）
　`mosquitto_pub.exe -h localhost -t "test" -m "Hello, World."`

これで１の窓に`test Hello. World.`と表示されると思います。
ついでにBrokerをcmdで立ち上げているなら通信の様子とかも垣間見れるはず。
細かいパラメータは`--help`で確認できるので眺めてみてください。

それでは、よきMosquitto Lifeを！
メモ: 軽量cssフレームワークMilligram(IE8非対応)

学習コストが低くて良い。IE8非対応

* [Milligram | A minimalist CSS framework.](http://milligram.github.io/index.html)

```html:
<link rel="stylesheet" href="https://cdn.rawgit.com/milligram/milligram/master/dist/milligram.css">
```

* [メモ: 軽量cssフレームワークskeleton使ってみた - Qiita](http://qiita.com/tukiyo3/items/0710b3fc1e3df599fe37)のサンプルに読ませるだけで以下

![img.png](https://qiita-image-store.s3.amazonaws.com/0/25728/2e7bddec-1ecf-6710-08ba-cb4a6cdb1ab0.png)

## グリッド

![img.png](https://qiita-image-store.s3.amazonaws.com/0/25728/574d76f8-f5c1-4870-a4d7-e2d52eb27a63.png)

```html:index.html
<!DOCTYPE html>
<link rel="stylesheet" href="http://milligram.github.io/css/milligram.min.css">
<link rel="stylesheet" href="http://milligram.github.io/css/style.css">

<div class="container">
  <div class="row">
    <div class="column column-demo">.column</div>
    <div class="column column-demo">.column</div>
    <div class="column column-demo">.column</div>
    <div class="column column-demo">.column</div>
  </div>
  <div class="row">
    <div class="column column-demo">.column</div>
    <div class="column column-50 column-offset-25 column-demo">.column column-50 column-offset-25</div>
  </div>
</div>

<input type="button" value="hoge">
```

## 改良

```css:
input[type=text] ,select{ width: 40% ; }
input[type=submit] { padding: 0 1em; }
form { display: inline; }
```
gulpのrun-sequenceで並列と直列を織り交ぜたい

どこにも載ってないような気がしたので。

# 織り交ぜたいとは
* こんな感じ

![image](https://qiita-image-store.s3.amazonaws.com/0/71143/bdc6da68-bb42-26c3-f426-1ddc333c97e3.png)

* run-sequenceだと、task2-1と2-2のあたりがうまく書けない(と思う)

# やりかた

* 直列にしたい処理をラップしたタスク(task2)を新たに作る。
* 内部ではrunSequenceを使って直列に処理させる。

``` javascript
gulp.task( "task1", function( done ) {
  // なんか処理
  done();
} );

gulp.task( "task2-1", function( done ) {
  // なんか処理
  done();
} );

gulp.task( "task2-2", function( done ) {
  // なんか処理
  done();
} );

gulp.task( "task3", function( done ) {
  // なんか処理
  done();
} );

gulp.task( "task4", function( done ) {
  // なんか処理
  done();
} );

gulp.task( "task2", function( done ) {
  return runSequence( "task2-1", "task2-2", done );
} );

gulp.task( "run", function( done ) {
  runSequence( "task1", [ "task2", "task3" ], "task4" );
} );
```
digdagのコンフィグについて（~/.config/digdag/config）

Digdagではデフォルトのパラメータを`~/.config/digdag/config`に保存しています。
例えば下記のように設定しておくことで、digdag serverのendpointをデフォルトで指定できます。

```
client.http.endpoint = https://example.com
client.http.headers.authorization = TD1 APIKEY
params.td.apikey = APIKEY
```

まず、digdag clientに設定するserverのendpointは`client.http.endpoint`になります。そこで認証が必要であれば、`client.http.headers.authorization`などを付与します。（TDの場合には認証が必要なのでdigdag serverに若干+αしている）

また、digdagのタスクで利用するデフォルトのパラメータがあれば、params.~と指定する。これで`_export`を利用しなくてもパラメータを設定可能。

ちゃんちゃん。
メモ: 軽量cssフレームワークskeleton(12kb)

* [公式HP](http://getskeleton.com/)

```html:
<link rel="stylesheet" href="http://getskeleton.com/dist/css/normalize.css">
<link rel="stylesheet" href="http://getskeleton.com/dist/css/skeleton.css">
```

## サンプル

![img.png](https://qiita-image-store.s3.amazonaws.com/0/25728/96adf6f1-ac60-b072-c8b3-0838b79c82ac.png)

```html:index.html
<!DOCTYPE html>
<html lang="en">
<head> 
  <!-- Basic Page Needs -->
  <meta charset="utf-8">
  <title>Your page title here :)</title>
  <meta name="description" content="">
  <meta name="author" content="">

  <!-- Mobile Specific Metas -->
  <meta name="viewport" content="width=device-width, initial-scale=1">

  <!-- FONT -->
  <link href="//fonts.googleapis.com/css?family=Raleway:400,300,600" rel="stylesheet" type="text/css">

  <!-- CSS -->
  <link rel="stylesheet" href="css/normalize.css">
  <link rel="stylesheet" href="css/skeleton.css">

  <!-- Favicon -->
  <link rel="icon" type="image/png" href="images/favicon.png">

</head>
<body>

  <!-- Primary Page Layout -->
  <div class="container">

    <div class="row">
      <div class="one-half column" style="margin-top: 25%">
        <h4>Basic Page</h4>
        <p>This index.html page is a placeholder with the CSS, font and favicon. It's just waiting for you to add some content! If you need some help hit up the <a href="http://www.getskeleton.com">Skeleton documentation</a>.</p>
      </div>
      <div class="one-third column">
        <h4>Basic Page</h4>
        <p>This index.html page is a placeholder with the CSS, font and favicon. It's just waiting for you to add some content! If you need some help hit up the <a href="http://www.getskeleton.com">Skeleton documentation</a>.</p>
      </div>
    </div>

    <div class="row">
      <div class="eight columns">
        <h4>Basic Page</h4>
        <p>This index.html page is a placeholder with the CSS, font and favicon. It's just waiting for you to add some content! If you need some help hit up the <a href="http://www.getskeleton.com">Skeleton documentation</a>.</p>
      </div>
      <div class="four columns">
        <h4>Basic Page</h4>
        <p>This index.html page is a placeholder with the CSS, font and favicon. It's just waiting for you to add some content! If you need some help hit up the <a href="http://www.getskeleton.com">Skeleton documentation</a>.</p>
      </div>
    </div>

  </div>

  <div class="one-half colums">
    <table>
        <tr>
          <th>Name</th>
          <th>Age</th>
          <th>Sex</th>
          <th>Location</th>
        </tr>
        <tr>
          <td>Dave Gamache</td>
          <td>26</td>
          <td>Male</td>
          <td>San Francisco</td>
        </tr>
        <tr>
          <td>Dwayne Johnson</td>
          <td>42</td>
          <td>Male</td>
          <td>Hayward</td>
        </tr>
    </table>
  </div>

<!-- End Document -->
</body>
</html>
```
AWS EC2にnkfをインストールする

yumでinstallできないのでrpmからインストールする

### バイナリのダウンロード

ここからnkfのバイナリをダウンロード
https://pkgs.org/centos-7/epel-x86_64/nkf-2.1.3-5.el7.x86_64.rpm.html

version違うとリンク切れてるので検索してCentOSを選択する

```
$ wget http://dl.fedoraproject.org/pub/epel/7/x86_64/n/nkf-2.1.3-5.el7.x86_64.rpm
```

### インストール

以下のコマンドでインストール

```
$ sudo rpm -ivh nkf-2.1.3-5.el7.x86_64.rpm
```
めざせpythonライブラリマスター （61）nested-lookup

#【ライブラリ説明】
　ネストされたリストや辞書の値を簡単に取得できる

#【プログラム】
```py
from nested_lookup import nested_lookup

document = [ { 'taco' : 42 } , { 'salsa' : [ { 'burrito' : { 'taco' : 69 } } ] } ]

print(nested_lookup('taco', document))
# [42, 69]
```

#【参考サイト】
　[pypi](https://pypi.python.org/pypi/nested-lookup/0.1.3)
　[github](https://github.com/russellballestrini/nested-lookup)
package.json,typings.json作成メモ

##package.json(npm 3.9.3)
作成
`npm init`
インストール＆書き込み
`npm install hoge --save`

##typings.json(typings 1.3.0)
作成
`typings init`
インストール＆書き込み
`typings install --save --global dt~hoge`
サーチ
`typings search hoge`

reference 
`/// <reference path="./typings/index.d.ts" />`
Swift2.2 -> Swift 3.0 覚書

## Swift 2.2 -> Swift 3.0
ErrorType -> ErrorProtocol
NSHTTPURLResponse -> HTTPURLResponse
NSUTF8StringEncoding -> String.Encoding.utf8
NSIndexPath -> IndexPath
NSNotificationCenter -> NotificationCenter

presentViewController(...) -> present(...)
dataUsingEncoding(...) -> data(...) 

まだまだいっぱいあるが徐々に更新んしていく予定。
OSX を再起動してもプロセスが死なない時は

個人用の備忘録ですが。

特に`mysqld`が死んでくれていないことがあるので以下のコマンドを実行しています。
他プロセスについては適宜コマンドを読み替えて下さい。

```
ps aux | grep mysqld | grep -v grep | cut -d' ' -f3 | xargs -I{} kill -9 {}
```
reactのdate-pickerを選ぶ

# 概要
メモ書きです悪しからず。
あんまり試してる時間もないのでstarとダウンロード数とreadmeで選びます。

# 一覧
star順にならべます
## react-datepicker
* npm
    * https://www.npmjs.com/package/react-datepicker
    * 510 downloads in the last day
    * 15,345 downloads in the last week
    * 60,224 downloads in the last month
* github
    * https://github.com/Hacker0x01/react-datepicker
    * star: 646
    * 更新：１ヶ月前
    * readme充実
    * ドキュメントもある
        * https://hacker0x01.github.io/react-datepicker/

## react-date-picker
* npm
    * https://www.npmjs.com/package/react-date-picker
    * 301 downloads in the last day
    * 6,868 downloads in the last week
    * 85,275 downloads in the last month
* github
    * https://github.com/zippyui/react-date-picker
    * star: 357
    * 更新：８日前
    * readme充実
    * ドキュメントもある
        * http://zippyui.com/docs/react-date-picker
        * [ここ](http://zippyui.com/docs/react-date-picker/examples)で使い心地を試せる

## rc-calendar
* npm
    * https://www.npmjs.com/package/rc-calendar
    * 179 downloads in the last day
    * 3,754 downloads in the last week
    * 11,076 downloads in the last month
* github
    * https://github.com/react-component/calendar
    * star: 336
    * 更新：昨日
    * readme充実
    * ドキュメント
        * http://react-component.github.io/calendar/

## react-input-calendar
* npm
    * https://www.npmjs.com/package/react-input-calendar
    * 59 downloads in the last day
    * 682 downloads in the last week
    * 2,200 downloads in the last month
* github
    * https://github.com/Rudeg/react-input-calendar
    * star: 89
    * 更新：７日前
    * readme充実

## react-calendar
* npm
    * https://www.npmjs.com/package/react-calendar
    * 15 downloads in the last day
    * 209 downloads in the last week
    * 738 downloads in the last month
* github
    * https://github.com/freiksenet/react-calendar
    * star: 150
    * 更新：２ヶ月前
    * readmeいまいち

## react-calendar-component
* npm
    * 7 downloads in the last day
    * 120 downloads in the last week
    * 398 downloads in the last month
* github
    * https://github.com/Hanse/react-calendar
    * star: 76
    * 更新：半年前
    * readmeいまいち

# 結果
範囲選択の使い心地で決めます

* react-datepickerはこんな感じ
    * https://hacker0x01.github.io/react-datepicker/#example-10
* react-date-pickerは範囲選択機能なさそう？
    * http://zippyui.com/docs/react-date-picker/examples
* rc-calendarだとこんな感じ
    * http://react-component.github.io/calendar/examples/antd-range-calendar.html

rc-calendarの見た目と使い心地と見た目がいい感じなのでこれを使う。中国語なのがちょっとドキドキしてしまう（偏見）
使ってみてイマイチだったら更新しますー

rc-calendar
[![https://gyazo.com/dbad95841657d21297d1d992e8b5cd9d](https://i.gyazo.com/dbad95841657d21297d1d992e8b5cd9d.png)](https://gyazo.com/dbad95841657d21297d1d992e8b5cd9d)

react-datepicker
[![https://gyazo.com/99581c74123257a0750d7ed8dbada1ec](https://i.gyazo.com/99581c74123257a0750d7ed8dbada1ec.png)](https://gyazo.com/99581c74123257a0750d7ed8dbada1ec)

[追記]
rc-calendarでlocaleで日本語当てたら中国語体になりました。cssとかでいじれそうですが面倒なのでreact-datepickerに乗り換えました。
[![https://gyazo.com/c6bd42587e4098a08b17abd8f8c2cf82](https://i.gyazo.com/c6bd42587e4098a08b17abd8f8c2cf82.png)](https://gyazo.com/c6bd42587e4098a08b17abd8f8c2cf82)
こんな感じ
Serverspec本読書メモ 6章〜




![](https://images-na.ssl-images-amazon.com/images/I/51P6qVOPALL._SX352_BO1,204,203,200_.jpg)
オライリーの[Serverspec本](https://www.amazon.co.jp/Serverspec-%E5%AE%AE%E4%B8%8B-%E5%89%9B%E8%BC%94/dp/4873117097)のどくしょかんそうぶんです

# 6章 : トラブルシューティングとデバッグ

## 6.1 Pryによるトラブルシューティングとデバッグ

pryでテスト対象サーバ上でserverspecのメソッドを実行する方法

```
$ TARGET_HOST=#{ホスト名} pry
```

```.rb
require 'rspec'
require './spec/spec_helper'

os # => {:family=>"ubuntu...}
```

## 6.2 テストが失敗した場合

- エラーメッセージに表示されているコマンドを実行してみる
- 標準出力/標準エラー出力を確認

## 6.3 例外が発生した場合

- エラーメッセージを見ようね
- テスト対象を絞り込む
- 途中に `binding.pry` を入れて変数の中身とかを確認する
- SSH実行時のトラブルは、 `spec_helper.rb` の設定を確認してね
- sudo実行時のトラブル
   - PTY割当を確認する → [PTYってなんぞ?](http://qiita.com/kasei-san/items/3edb52359ff288d2f435)
   - serverspec側で、 `set :request_pry` とエラーメッセージを出してくれるのでそれに従う
   - ただし、上記のエラーは、 `you must have a tty to run sudo` という標準エラー出力を match して引っ掛けているらしいので、メッセージが日本語だとうまくいかなかったりするので注意
- **環境変数でハマることも多いので、pryで同じ環境変数を用意したりして、確認してみてね!**

# 7章 : Serverspecの今後

- 今後大きく変えることは考えていない
- PowerAssertに一部対応中
    - 単純なアサーション(マッチャ)でも、テスト失敗時の情報がしっかり出力されれば十分という思想
    - Rspecみたいな、本来やりたいことに対して記法のバリエーションが多すぎることに対してのアンチテーゼ
- Dockerがあれば構成管理ツールは不要? という考え
    - Dockerfileでイメージを管理
    - 単機能コンテナならばテストは不要?
    - Dockerfileはシンプルだけど、その分抽象度が低く複雑
    - まだテストは必要と思っている

# 付録A: Resourcesリファレンス

http://serverspec.org/resource_types.html

- command
    - `stdout`, `stderr`, `exit_status`
    
        ```.rb
        describe command('ls /foo') do
          its(:stderr) { should match /No such file or directory/ }
        end
        ```
- cron

    ```.rb
    describe cron do
      it{ should have_entry '* * * * * /user/local/bin/foo' }
    end
    ```

- default_gateway

    ```.rb
    describe default_gateway do
      its(:ipadress) { should eq '192.168.0.1' }
      its(:interface) { should eq 'br0' }
    end
    ```
- file
    - `content`
        - ファイルに含まれている文字列を確認
- host
    - `be_resolvable` : 名前解決できるか?
    - `be_reachable` : 対象のホストに ICMP, TCP, UDP で到達できるか?
- interface
    - `speed`, `have_ipv4_address`
- iptables
    - `have_rule`
- package
    - `be_installed`
- port
    - `be_listening`
- selinux
    - `be_disabled`,`be_enforceing`,`be_permissive`
- service
    - `be_enabled`,`be_installed`,`be_running`,`be_monited_by`,`have_start_mode`
- yumrepo
    - `exist`, `be_enabled`
UnitySendMessage で無理やり構造体をやりとりする

マネージドコードとアンマネージドコードの間で、構造化されたデータをやりとりしたい事がたまにあるのですが、残念ながら ```UnitySendMessage``` は有効な文字列しか扱うことができません。 ```UnitySendMessage``` の為だけにデータを文字列にシリアライズするのも大げさな気がします。

構造体をやりとりするだけなら、構造体を返すエントリーポイントを作れば良いのですが、安全に Unity のメインスレッドに返すには、やはり ```UnitySendMessage``` を使いたいところです。

文字列しか使えないからといって諦めるのはエンジニアとして負けた気がするので、ちょっと頑張ってみます。

```csharp:C#
[StructLayout(LayoutKind.Sequential)]
private struct AnyData {
    [MarshalAs(UnmanagedType.LPStr)] public readonly string name;
    [MarshalAs(UnmanagedType.LPStr)] public readonly string description;
    [MarshalAs(UnmanagedType.R8)] public readonly double number;
    [MarshalAs(UnmanagedType.Bool)] public readonly bool isActive;
    public readonly Int16 shortInteger;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst=2)] private readonly string __padding0;
    private readonly IntPtr __original;
    private readonly IntPtr __padding1;
}

[DllImport(LIBNAME)] static extern void purge_anydata(IntPtr intptr);

void OnSendMessage(string message) {
    var intptr = (IntPtr)Convert.ToInt64(message, 16);
    var anyData = (AnyData)Marshal.PtrToStructure(intptr, typeof(AnyData));
    ...
    purge_anydata(intptr);
}
```

```cpp:C++
struct AnyData {
    string name;
    string description;
    double number;
    bool active;
    int16_t shortInt;
};

struct CSAnyData {
    const char *name;
    const char *description;
    double number;
    int32_t active;
    int16_t shortInt;
    uint8_t __padding0[2];
    const AnyData *__original;
    const void* __padding1;

    static const CSAnyData *make_data(const AnyData &data) {
        return new CSAnyData(new AnyData(data));
    }

    CSAnyData(const AnyData *data)
        : name(data->name.c_str())
        , description(data->description.c_str())
        , number(data->number)
        , active(data->active)
        , shortInt(data->shortInt)
        , __original(data)
    {}

    ~CSAnyData() {
        delete __original;
    }
};

void SendToUnity(const AnyData &data) {
    char ptr[17];
    sprintf(ptr, "%p", CSAnyData::make_data(data));
    UnitySendMessage("hogehoge object", "OnSendMessage", ptr);
}

extern "C" purge_anydata(CSAnyData *data) {
    if (data) {
        delete data;
    }
}
```
構造体のアドレスを文字列として ```UnitySendMessage``` に渡し、Unity 側で構造体を取得しています。また ```UnitySendMessage``` を呼ぶ際に、コード上、構造体のメモリをダングリング状態にすることで、スレッドセーフな実装を省略できます。（ ```new``` して ```UnitySendMesssage``` に渡してしまえば、以降 Unity のメインスレッドからしか該当メモリにアクセスされないはず。）注意点は ```UnitySendMessage``` は様々な理由でメッセージが届かない場合があるので、その場合はメモリがリークすること。

また、構造体の定義時には下記の点を意識した方がよい。

- 32bit, 64bit どちらでも都合が悪くならないようにアライメントを明示的に調整する。
- 整数値はビット幅が規定されている型を使う。(int32, int64 ...)
- bool 値は 4バイト型で扱っとく。（アーキテクチャによってサイズが異る）
Unity でアンマネージドな文字列の扱いに気をつけよう

マネージドコードとアンマネージドコードで文字列をやり取りする際、 ```UnitySendMessage``` や ```MarshalAs(UnmanagedType.LPStr)``` を利用することが多いと思いますが、この際、文字列のエンコーディングを考えないと文字化けを起こします。

```UnitySendMessage``` や ```MarshalAs(UnmanagedType.LPStr)``` はデバイスの **locale** に依存してエンコードが行われます。元の文字列が **UTF-8** で iOS や Android デバイスなら問題無いですが、日本語に設定されている Windows Phone だと **UTF-8** のバイト列を **CP932** としてエンコードしてしまいます。

様々なデバイスでアンマネージドな文字列を正しく取得するためには、次のような方法が考えられます。

```csharp:C#
[DllImport(LIBNAME)] static extern IntPtr get_string_ptr();
[DllImport(LIBNAME)] static extern void get_rawdata(IntPtr ptr, out IntPtr data, out Int32 size);
[DllImport(LIBNAME)] static extern void purge_string_ptr(IntPtr ptr);

void Sample() {
    string text = null;

    var ptr = get_string_ptr();
    if (ptr != IntPtr.Zero) {
        IntPtr data;
        Int32 size;
        get_rawdata(ptr, out data, out size);

        if (data != IntPtr.Zero && size > 0) {
            var buffer = new byte[(int)size];
            Marshal.Copy(data, buffer, 0, (int)size);
            text = Text.Encoding.UTF8.GetString(buffer);
        }
        purge_string_ptr(ptr);
    }
    Debug.Log("text: " + text);
}
```

```cpp:C++
extern "C" {
    const string *get_string_ptr() {
        return new string("ほげほげ : utf-8 string");
    }

    void get_rawdata(const string *ptr, const void **data, int32_t *size) {
        *data = nullptr;
        *size = 0;
        if (ptr) {
            *data = ptr->data();
            *size = ptr->size();
        }
    }

    void purge_string_ptr(string *ptr) {
        if (ptr) {
            delete ptr;
        }
    }
}
```
メモリのアドレスから、バイト配列としてマーシャリングし、マネージドなバイト列からエンコーディングを指定して文字列を取得します。
Python で日本語出力

#はじめに
python を始めようと思って、まあ、そこはやっぱり

    print("Hello world")

うん、よしよし。

    print("日本語")

```
Traceback (most recent call last):
  File "/tmp/a.py", line 1, in <module>
    print("\u65e5\u672c\u8a9e");
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128)
````

:cry: :-1:

#普通の解決策
いろいろ、ググッて調べたところ、unicode と byte の変換をしなきゃイカン、ということで

    print("日本語".encode("utf-8"))

```
b'\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e'
```

いや、だからそうじゃなくてね。

```
setenv LANG ja_JP.UTF-8
日本語
```

まあ動いたわけですよ。しかしさらなる問題が！

#cron から起動したいんだが
cron 起動する場合は、親プロセスが cron なので、当然 cron の環境を引き継ぐわけです。それは、システム全体としてどういうロケールに設定しているかと言う話。しかし、システム全体は基本 C で統一しているポリシーなので（ls とか date を日本語ロケールフォーマットにされると、いろいろ動かなくなる）、cron の環境も当然 LANG=C なの。それは変えられないの。

#余談：shebang
スクリプト起動するために、１行めに `#! /usr/local/bin/python3` とか書きますよね。これ、呼び方はいろいろあるんだけど、シェバン（shebang）というらしい。で、これで呼び出されるものは、２重に shebang が使えない。つまり、`#! /usr/local/bin/foo` のとき、/usr/local/bin/foo の１行めが、`#! /usr/local/bin/bar` だとダメだ、ということ。知らんかった。たぶんシステムコール中で exec()系列の関数を呼び出しているということなんだろう。


#環境変数をセットして起動したい
/usr/local/bin/python3 を、シェルスクリプトにする案は挫折したので、しょうがなく C で書きました。

```python3.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char **argv){
  putenv("LANG=ja_JP.UTF-8");
  argv[0] = "/usr/local/bin/python3.5";
  argv[argc] = NULL;
  execv("/usr/local/bin/python3.5",argv);
}
```

これで、最初の `print("日本語")`　のみで動作するようになりました。（encodeがいらなくなった）

python3 がシンボリックリンクではなくなりましたが、無理やりの対応策ですのでご勘弁。

なんとか解決。
Pythonista への道は険しい
FileMakerワークショップに参加してきた

# FileMakerワークショップに参加してきた

06/18に開催された株式会社 未来Switchさん主催のFileMakerワークショップ
「新製品！さわってみよう FileMaker 15 プラットフォーム」
に参加してきた

[新製品！さわってみよう FileMaker 15 プラットフォーム](http://fmwsosaka160618.peatix.com/)

今回リリースされたFileMaker 15 プラットフォームがテーマな訳ですが

## ◆主なトピック(覚えている範囲で)

- ヘルプがHTML化された
- マスク付き編集ボックス
- テーブルデータの削除
- iBeaconのサポート

## ◆ヘルプがHTML化された
[FileMaker Pro 15 ヘルプのダウンロード](http://www.filemaker.com/redirects/fmp15_admin.html?page=help_zip&lang=ja)からダウンロードして手元に置くことが可能になった→爆速検索が可能に

## ◆マスク付き編集ボックス
[ポップアップメニュー、チェックボックス、またはその他のコントロールを表示するためのフィールド設定](https://www.filemaker.com/help/15/fmp/ja/FMP_Help/setting-field-control.html#wwconnect_header)

### 使い方
- レイアウトにフィールドを置く
- インスペクタでコントロールスタイルを「マスク付き編集ボックス」にする

→ 新しいレイアウトオブジェクトではなく、フィールドの派生コントロール

### 特徴
- マスク付き編集ボックス機能の無いFileMaker14以前で開くと全くの無力

- マスク文字(●)は8文字固定
入力文字数を悟られない配慮
フィールドを選択すると文字数分のマスク文字(●)が表示される
通常のフィールドと違って表示幅以上に拡張されることは無い
→狭めの幅でレイアウトしておくと入力文字数が悟られないかも

- 入力できるのは半角英数記号のみ(IMEが無効化されている)
ただしコピペで全角文字の入力は可能

- 検索が効く

- ソート(フィールドのコンテキストメニューにある)が可能

- 索引一覧([Control]-[I]or[Command]-[I])で値が表示されてしまう

## ◆テーブルデータを削除
[テーブルデータを削除スクリプトステップ](https://www.filemaker.com/help/15/fmp/ja/FMP_Help/truncate-table.html#wwconnect_header)

### 対象レコード削除との違いを押さえる

- 対象レコード削除
→関連レコードが消える

- テーブルデータの削除
→関連レコードは消えない

テーブルデータを削除スクリプトステップの引数で「現在のテーブル」がデフォルトになっているので、安易に使うと大怪我するかも

聞いたところによると**関連レコードを無視**して削除を行うので高速だとのことです
→関連レコードが無ければ速さは変わらない

## ◆iBeaconのサポート
[RangeBeacons関数](https://www.filemaker.com/help/15/fmp/ja/index.html#page/FMP_Help/rangebeacons.html)
FileMakerGoのみサポート
タイムアウトが短すぎるとiBeaconが見つけられないかも
→タイムアウトとブロードキャストの関係で