OmniAICreator/Qiita-1.07M huggingface dataset:
Ruby 標準ライブラリの WEBrick で Web サーバを作る

## 発端

Web ブラウザからどういう内容が送信されているかを見るために書いてみた。

## WEBrick を使った Web サーバのサンプルコード

このコードを実行すると、 Web サーバが起動する。

```ruby
require 'webrick'
require 'cgi'

s = WEBrick::HTTPServer.new(
  :Port => 8000,
  :HTTPVersion => WEBrick::HTTPVersion.new('1.1'),
  :AccessLog => [[open(IO::NULL, 'w'), '']] # アクセスログを出力しない
)

s.mount_proc('/') do |req, res|
  puts "========== #{Time.new} =========="
  # リクエスト内容を出力
  puts req.request_line
  puts ''
  puts req.raw_header
  puts "\n#{req.body}" if req.body
  # レスポンス内容を出力
  body = "<html><body>\n"
  body += "#{CGI.escapeHTML(req.request_line)}"
  body += "<br>#{CGI.escapeHTML(req.body)}\n" if req.body
  body += "</body></html>\n"
  res.status = 200
  res['Content-Type'] = 'text/html'
  res.body = body
end

Signal.trap('INT'){s.shutdown}
s.start
```

## curl コマンドでサンプルの Web サーバに HTTP GET アクセスしてみる

curl コマンドの実行結果。

```sh
$ curl -sSv 'http://localhost:8000/a/b/?c=d'
*   Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 8000 (#0)
> GET /a/b/?c=d HTTP/1.1
> Host: localhost:8000
> User-Agent: curl/7.51.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Content-Type: text/html
< Server: WEBrick/1.3.1 (Ruby/2.4.1/2017-03-22)
< Date: Thu, 27 Apr 2017 13:43:25 GMT
< Content-Length: 52
< Connection: Keep-Alive
<
<html><body>
GET /a/b/?c=d HTTP/1.1
</body></html>
* Curl_http_done: called premature == 0
* Connection #0 to host localhost left intact
```

Web サーバ側の出力結果。

```sh
========== 2017-04-27 22:43:25 +0900 ==========
GET /a/b/?c=d HTTP/1.1

Host: localhost:8000
User-Agent: curl/7.51.0
Accept: */*
```

## curl コマンドでサンプルの Web サーバに HTTP POST アクセスしてみる

curl コマンドの実行結果。

```sh
$ curl -sSv -X POST 'http://localhost:8000/a/b/?c=d' --data 'e=f'
*   Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 8000 (#0)
> POST /a/b/?c=d HTTP/1.1
> Host: localhost:8000
> User-Agent: curl/7.51.0
> Accept: */*
> Content-Length: 3
> Content-Type: application/x-www-form-urlencoded
>
* upload completely sent off: 3 out of 3 bytes
< HTTP/1.1 200 OK
< Content-Type: text/html
< Server: WEBrick/1.3.1 (Ruby/2.4.1/2017-03-22)
< Date: Thu, 27 Apr 2017 13:43:37 GMT
< Content-Length: 61
< Connection: Keep-Alive
<
<html><body>
POST /a/b/?c=d HTTP/1.1
<br>e=f
</body></html>
* Curl_http_done: called premature == 0
* Connection #0 to host localhost left intact
```

Web サーバ側の出力結果。

```sh
========== 2017-04-27 22:43:37 +0900 ==========
POST /a/b/?c=d HTTP/1.1

Host: localhost:8000
User-Agent: curl/7.51.0
Accept: */*
Content-Length: 3
Content-Type: application/x-www-form-urlencoded

e=f
```

## 参考資料

- library webrick https://docs.ruby-lang.org/ja/latest/library/webrick.html
MacユーザのためのGNS3環境構築

# GNS3環境構築

ネットワークの勉強をするために、ルータなどを実際に揃えるのは大変なので、ciscoのルータをエミュレートできる「GNS3」の環境構築を行う。

## 開発環境
* GNS3 1.5.4
* OS X EL Capitan
* virtualbox(5.1.0)
* GNS3 VM


## 1.GNS3をインストールする
以下のURLにアクセスしてGNS3のMac版をインストールする
(アカウント登録が必要である。。)
https://www.gns3.com

起動すると以下の画面で立ち上がる
![Running-GNS3.png](https://qiita-image-store.s3.amazonaws.com/0/161771/0f97ff31-5517-41d8-395d-31c52503e9ff.png)

ダイアログのuBridgeはUDP tunnel, Ethernet, TAP間でブリッジ接続を行うためのアプリケーションのことらしいが調べた結果、「No」で良さそうだった。

## 2.Setup Wizard(GNS3 VMの構築)
次に進むと「Setup Wizard」の画面となり、GNS3のサーバタイプの選択と構築に映る。
GNS3のサーバタイプには

* Local GNS3 VM
* Local server
* Remote server

がある。
今回は、自分のコンピュータ上の仮想マシンで動作する環境である「Local GNS3 VM」で構築を行っていく。

そのため、VirtualBoxにGNS3 VMのVMイメージを取得していく。
以下のサイトからイメージを取得する。
https://github.com/GNS3/gns3-gui/releases/tag/v1.5.4

GNS3がv1.5.4であり、VirtualBox上に構築することから
`GNS3.VM.VirtualBox.1.5.4.zip`を取得する。

解凍すると、`GNS3 VM.ova`ができるので
このイメージをVirtualBoxにインポートしていく。

<img width="1018" alt="スクリーンショット 2017-04-27 22.27.09.png" src="https://qiita-image-store.s3.amazonaws.com/0/161771/cec2bb0d-4686-a63a-30bd-abb60b7a5ae1.png">

VirtualBoxの`設定/ネットワーク`からvboxnetの設定を確認した後、メインメモリーとプロセッサーの設定を行う。
下は私の設定例。参考までに。

<img width="496" alt="スクリーンショット 2017-04-27 22.38.16.png" src="https://qiita-image-store.s3.amazonaws.com/0/161771/a39115b6-e746-a290-2090-f9b38ae8110c.png">

仮想マシンを立ち上げて、以下の画面が表示されIPアドレスが確認できればOK
<img width="544" alt="スクリーンショット 2017-04-27 22.29.32.png" src="https://qiita-image-store.s3.amazonaws.com/0/161771/e6626321-009e-be21-ff9e-2e0d2a324f8b.png">

OKを押してshutdownを押して、仮想マシンを止める。

## 3.Setup Wizard(GNS3の基本セットアップ完了まで)

GNS3に戻り、以下の画面のように割り当てたメインメモリーとプロセッサーを設定していく。
<img width="773" alt="スクリーンショット 2017-04-27 16.48.24.png" src="https://qiita-image-store.s3.amazonaws.com/0/161771/c17c573e-3015-dc67-03c7-d56087623624.png">

Nextを押すと、現在システムがスワップを発生させずに即時に割り当て可能なメモリ量を超えているエラーが通知される場合があるが、問題なければOKを押して進む。

OKを押すとGNS3がGNS3 VMを起動する。
GNS3 VMのフォーカスを外し、GNS3を見ると以下のような画面が表示されているはず。
![Setup-Wizard-6-1024x741.png](https://qiita-image-store.s3.amazonaws.com/0/161771/aae824a5-5329-3ae3-0f2f-1e9aa08081c4.png)

ここまでくれば、GNS3の基本的な環境構築は完了。


`Add an IOS router using a real IOS image (supported by Dynamips)`にチェックを入れると、ルータの設定に移っていきます。

長くなったので、ここから先は別の記事で紹介します。。
http://qiita.com/nl0_blu/items/32da37fb8b2bde5a7e83
Travis CIで日本語のテストが失敗する問題の解決

問題が起きた条件としては、Railsのプロジェクトでテストにはpoltergeistを使い、CI上はXvfb, phantomjsを設定していた

### 解決方法

日本語フォントのインストール
使ったpackageは fonts-ipafont

```yaml:.travis.yml
sudo: false
addons:
  apt:
    packages:
    - fonts-ipafont
```

##### 参考
addons apt + sudoなどに関する内容
[Installing Packages on Container Based Infrastructure](https://docs.travis-ci.com/user/installing-dependencies/#Installing-Packages-on-Container-Based-Infrastructure)
[Travis CI + sudo](http://qiita.com/oh_rusty_nail/items/342eef460b55d88d6be3)

他にもfonts-ipafont-gothic, fonts-ipafont-minchoなのどフォントがある [docker + capybara-webkit](http://qiita.com/tily/items/b3d72afaead3d1a60abb)

### 他の設定

#### Xvfb

[Using xvfb to Run Tests That Require a GUI](https://docs.travis-ci.com/user/gui-and-headless-browsers/#Using-xvfb-to-Run-Tests-That-Require-a-GUI)

#### phantomjs

[Add support for PhantomJS 2](https://github.com/travis-ci/travis-ci/issues/3225#issuecomment-200965782)
phantomjs --version は上手く動いたなら削除可能と思う（cacheとの兼ね合いか動作が変だったことがある）

#### 全体の設定

動作した設定ファイルからpostgresなどのプロジェクトごとの部分を省略したもの

```yaml:.travis.yml
language: ruby
cache:
  bundler: true
  directories:
    - "travis_phantomjs"
sudo: false
addons:
  apt:
    packages:
    - fonts-ipafont
before_install:
  - "phantomjs --version"
  - "export PATH=$PWD/travis_phantomjs/phantomjs-2.1.1-linux-x86_64/bin:$PATH"
  - "phantomjs --version"
  - "if [ $(phantomjs --version) != '2.1.1' ]; then rm -rf $PWD/travis_phantomjs; mkdir -p $PWD/travis_phantomjs; fi"
  - "if [ $(phantomjs --version) != '2.1.1' ]; then wget https://assets.membergetmember.co/software/phantomjs-2.1.1-linux-x86_64.tar.bz2 -O $PWD/travis_phantomjs/phantomjs-2.1.1-linux-x86_64.tar.bz2; fi"
  - "if [ $(phantomjs --version) != '2.1.1' ]; then tar -xvf $PWD/travis_phantomjs/phantomjs-2.1.1-linux-x86_64.tar.bz2 -C $PWD/travis_phantomjs; fi"
before_script:
  - phantomjs --version
  - "/sbin/start-stop-daemon --start --quiet --pidfile /tmp/custom_xvfb_99.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :99 -ac -screen 0 1280x1024x16"
  - bundle exec rake db:migrate
script:
  - bundle exec rspec spec
```
Travis CI上のテストでスクリーンショットを撮る

### 必要なもの

Rails projectの場合

- Gyazoアカウント
- [capybara-screenshot](https://github.com/mattheworiordan/capybara-screenshot)

大量の画像を扱う場合

- お金（Gyazo Proを使う）

### 画像をアップロードするコマンド

```yaml:.travis.yml
after_script:
  - for i in /home/travis/build/<your_org>/<your_project>/tmp/capybara/*png; do curl -i https://upload.gyazo.com/api/upload -F access_token=<access_token> -F "imagedata=@$i" ; done
```

※ pathとaccess_tokenの部分を置き換える

#### 参考

[Travis CI 上の Poltergeist で撮ったスクリーンショットを確認する方法](http://this.aereal.org/entry/2013/11/20/233951)
ConoHa で Mastodon を立ててみた (テンプレート使用)

**追記**: 公式にConoHaのメールサーバーの合わせて使う方法が公開されました

- [MastodonアプリケーションイメージｘConoHaメールサーバーでMastodonのインスタンスを作る](https://www.conoha.jp/guide/mastodonconoha.php)

---
いつも使っているConoHaにMastodonのテンプレートが公開されたので早速使用してみました！

参考元: [Mastodonアプリケーションイメージの使い方](https://www.conoha.jp/guide/mastodon.php)

## サーバーを建ててみる
せっかくなのでConoHaを使うのでアプリケーションサーバのメールサーバーも立ててみました。

[![https://gyazo.com/eb4730f27ecba8e8e5db494e47c3b192](https://i.gyazo.com/eb4730f27ecba8e8e5db494e47c3b192.png)](https://gyazo.com/eb4730f27ecba8e8e5db494e47c3b192)

### `.env.production` を編集する
ConoHa のテンプレートを使用するとデータベースの部分は自動的に書き換わってると思うのでメールの部分を編集します

```diff:.env.production
# E-mail configuration
# Note: Mailgun and SparkPost (https://sparkpo.st/smtp) each have good free tiers
-SMTP_SERVER=smtp.mailgun.org
+SMTP_SERVER=smtp.mastodon.conoha.io
SMTP_PORT=587
-SMTP_LOGIN=
-SMTP_PASSWORD=
-SMTP_FROM_ADDRESS=notifications@example.com
+SMTP_LOGIN=notifications@mastodon.conoha.io
+SMTP_PASSWORD=HogeHoge
+SMTP_FROM_ADDRESS=notifications@mastodon.conoha.io
```

### データベースを作成とRailsのアセットをコンパイルをする
```bash
sudo -u mastodon RAILS_ENV=production /home/mastodon/.rbenv/versions/2.4.1/bin/bundle exec rails db:setup
sudo -u mastodon RAILS_ENV=production /home/mastodon/.rbenv/versions/2.4.1/bin/bundle exec rails assets:precompile
```

上記のコマンドを実行するだけなので簡単ですね

## Mastodon を起動する
```bash
systemctl enable --now mastodon-*
```

上記のコマンドを実行することによってMastodonが立ち上がると思います
そうしたら `http://<サイトのアドレス>:3000` からアクセスできるようになってると思います。

### 管理者権限を付与する
下記のコマンドを実行することによって指定したユーザーに管理者権限を付与することができます。

```bash
sudo -u mastodon RAILS_ENV=production /home/mastodon/.rbenv/versions/2.4.1/bin/bundle exec rails  mastodon:make_admin USERNAME=(登録時のユーザー名)
```

もし、メールアドレスが届かない場合は下記のコマンドを実行することによってメールを認証することもできます。

```bash
sudo -u mastodon RAILS_ENV=production /home/mastodon/.rbenv/versions/2.4.1/bin/bundle exec rails  mastodon:confirm_email USER_EMAIL=(登録時のメアド)
```

## 本格的な運用に向けて
これまで書いてきた部分は参考元のドキュメントを見ればわかることですがこれから先のことは自分で試行錯誤しながらやったことなので自己責任でお願いします。
またこうした方がいいよって事がありましたらぜひ教えてください。

### Nginx や Let's Encrypt  を設定する
まず必要なものをインストールします。

```bash
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install certbot
```

インストールを終えたら証明書を発行します

```
sudo certbot certonly --standalone -d example.com
```

次に Mastodon 用の Nginx 設定ファイルを用意します

[公式ドキュメント](https://git.io/v9sSK) から `/etc/nginx/conf.d/mastodon.conf` へコピーしドメインの部分をを適切なものに変更します。

設定が終わったら Nginx にファイルを読み込ませます

`sudo nginx -s reload`

これで `https://<サイトのアドレス>` からアクセスできるようになったと思います。

#### `nginx reload` ができない場合
調べるまで分かりませんでしたが、どうやら `/etc/ssl/certs/dhparam.pem` というファイルがなくて怒ってました。
これは下記のコマンドで生成することができます(生成するのに結構時間がかかります)

```bash
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
```

### 使用しないポートを閉じる
Ubuntuを全然触ったことがないのでやり方が分からなかったです。

とりあえず応急雨処置としてConoHaのコントロールパネルからMastodonを運用してるVPSを開き`ネットワーク情報` -> `接続許可ポート` -> `すべて許可`のチェックを外し必要なものだけチェックを入れ対応しました。

## 感想
今日の昼過ぎにテンプレートが公開され帰宅後試してみた程度なので足りない点があると思いますが今のところとりあえず使えるようにはなったので記事にしました。
Rantly(property based testing tool)でテストデータ生成 - integer

Rantly#integer でランダムな数値データを作ります

## <i class='fa fa-question-circle'></i> 関連記事
[tbpgr の rantly 関連記事](http://qiita.com/search?utf8=%E2%9C%93&q=user%3Atbpgr%20tag%3Arantly)

## <i class='fa fa-flask'></i> サンプル
* Rantly#integer - INT MIN と MAX の間のデータを返す
* Rantly#integer(limit) - 上限を limit とし、下限を -limit としたデータを返す
* Rantly#integer(range) - range の範囲内の値を返す

```ruby
Rantly(5){|e|integer}
# => [383714149313832915, -534272759068303107, -785541029003531601, -539903741415228612, -1677665115754703936]
Rantly(5){|e|integer}
# => [2236745089261931627, -608265573824834826, 401928333015254932, -2205848633386372164, 1469720984822611627]
Rantly(5){|e|integer(5)}
# => [-5, 2, 5, -3, -3]
Rantly(5){|e|integer(5)}
# => [0, -5, 4, -4, -5]
Rantly(5){|e|integer(3..7)}
# => [7, 3, 3, 6, 5]
Rantly(5){|e|integer(3..7)}
# => [3, 3, 7, 5, 5]
```

## <i class="fa fa-book" style="font-size:1em;"></i> 外部資料
* [abargnesi/rantly](https://github.com/abargnesi/rantly)
Effekseer1.22 For DXライブラリをVisual Studio 2017で使う

# 概要

パーティクルエフェクトを作成しゲーム内で使用できる便利なツールに「Effekseer」というものがあります。Effekseerで作成したエフェクトはDirectXやOpenGLによりゲーム内で再生でき、DXライブラリ用のライブラリ「Effekseer For DXライブラリ」を使えばDXライブラリを用いたゲーム内でもEffekseerで作成したエフェクトを再生することができます。

しかし、本記事投稿時点でEffekseer For DXライブラリの最新バージョン1.22が対応するコンパイラはVisual Studio 2015(MSVC14.0)までとなっており、Visual Studio 2017(MSVC14.1)では使用することができません。

そこで、本記事ではVisual Studio 2017(以下VS2017)でEffekseer1.22 For DXLibを使用する方法を説明していこうと思います。DXライブラリやEffekseer1.22 For DXライブラリの導入方法はここでは説明しないのでご了承ください。

# 問題と解決法

Effekseer For DXライブラリでは、#pragma commentを用いてリンクするlibファイルを指定しています。リンクするlibファイルはMSVCのバージョンによって異なり、バージョンの判定部分で_MSC_VERが1700(VS2012)、1800(VS2013)、1900(VS2015)の場合以外は弾かれるようになっています。このため、_MSC_VERが1910であるVS2017ではlibファイルがリンクされず、リンク時にエラーが発生してしまいます。

このバージョン判定はEffekseerForDXLib.h内で行われており、同ファイルの16行目と56行目にある

```cpp:変更前
#if _MSC_VER ==1900
```

を

```cpp:変更後
#if _MSC_VER >=1900
```

とすることで、VS2017使用時にもlibファイルがリンクされ正常に動くようになります。

ちなみに、この方法ではVS2015向けにビルドされたlibファイルをVS2017でビルドしたファイルとリンクすることになるので問題が発生するのではないかと思うかもしれませんが、VS2017はVS2015とバイナリ互換である([Visual C++ Team Blogy](https://blogs.msdn.microsoft.com/vcblog/2017/03/07/binary-compatibility-and-pain-free-upgrade-why-moving-to-visual-studio-2017-is-almost-too-easy/)より)ので、問題はないようです。
homebrewでbrew updateできなくなった

brew updateした時、以下のエラーが出てupdateできなくなった。

```
Error: Could not link:
/usr/local/share/doc/homebrew

Please delete these paths and run `brew update`.
```


以下のコマンドで削除するとbrew update可能になる
```
rm -rf /usr/local/share/doc/homebrew
```
[.NETCore] Encoding.GetEncoding("Shift_JIS") で System.ArgumentException

# [.NETCore] Encoding.GetEncoding("Shift_JIS") で System.ArgumentException

## 問題

`.NETCoreApp 1.1` 次のコードで ArgumentException が発生する

```csharp
var enc = Encoding.GetEncoding("Shift_JIS");
```

## 免責事項

本書の情報が正しいことを保証しません。この情報を使用することによる直接、間接のいかなる損害にも責任を負いません。


## 情報源

いつもの stackoverflow

[Shift-JIS encoding for a netstandard library](http://stackoverflow.com/questions/40331957/shift-jis-encoding-for-a-netstandard-library)


## 対処

パッケージマネージャーでインストール
```
[console_test] >  install-package System.Text.Encoding.CodePages
```

GetEncoding の前に `RegisterProvier` 呼び出しを追加

```csharp
System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
var enc = Encoding.GetEncoding("Shift_JIS");
```

## 確認した環境
OS: 日本語 Windows 10 Home 64ビット
コンパイラ: Visual Studio Community 2017
Python 3系のインストール for mac

macOS Sierraにはデフォルトで2系のpythonがインストールされているが3系のpythonを使用したかったのでインストールしました。

インストール方法

`
brew install python3
`

実行する時、python3と指定しないとデフォルトのpython2系で実行されてしまいます。
Officeのライセンス認証で手間取った話

#Officeのライセンス認証について
##背景
研究室でデスクトップPCとノートPCを新しく買ってもらった.
このときどちらもオプションでofficeのプリインストールを付けた.

先に届いたのはデスクトップの方でこちらは何事もなくライセンスの認証できた．
が，後に届いたノートPCでライセンス認証を行おうとしたときにうまくいかなかった...
＜ノートPC＞
・Windows10 Home 64bit
＜Office＞
・Microsoft Office Home & Business Premium + office 365
##現象
ライセンス認証は以下の順で行われる
1. プロダクトキーの入力
2. Microsoftアカウントの認証（サインイン？）

2の部分でアカウントのサインインのポップアップが消えてしまった.

何度か繰り返すもダメ...
再インストールもダメ...

いろいろ繰り返しているうちにライセンス認証の画面が出なくなった．

そこでPowerPoint(office製品ならどれでも)のファイルタブのアカウントの項目を確認
してみると、office 365の方は認証できているが，やはりHome and Businessの方は認証
できていなかった．

インターネット経由では「上限に達した」と言われ電話経由での認証も長ったらしいコード
を入れてもうまくいかなかった．
##解決策
途方に暮れていたが，Microsoftアカウントに紐づけられるOfficeのライセンスは一つで
先に入れたデスクトップPCの方のOfficeのプロダクトキーで認証しようとしているのでは
と考えた．（ノートPCの方でも同じMicrosoftアカウントを使用していた）

以下の手順を試してみた．
1. Microsoftアカウントを作成
2. Officeの認証を行う
　1. スタートメニューの新しいofficeを始めようを起動
　2. 新しく作成したアカウントに切り替える
　3. マイアカウントを選択するとOffice追加のボタンがあるのでそれを押す
　4. ブラウザが起動するのでアカウントを確認し，プロダクトキーを入力する
3. コントロールパネルのプログラムのアンインストールからOfficeを削除
　　（office 365の方も削除する）
4. 新しいMicrosoftアカウントからOfficeをインストール

以上のような流れでもう一度PowerPointなどを起動するとライセンス認証が行われていた
（アカウントも新しい方に切り替わる）

##おわり
だいぶ荒い説明ですが緊急的に書いたメモですのでご容赦願います．
Office認証ごときに手間取る私はいったい...
あかりちゃんち(キラキラッターのアイカツ実況用discordグループ)に集合して、みんなで盛り上がろう！

氷上スミレ( https://kirakiratter.com/@sumire, https://twitter.com/sumire_kkt )です。
みなさんはキラキラッター、してますか？

![1996.jpg](https://qiita-image-store.s3.amazonaws.com/0/176119/412bf204-353a-7074-84a6-1d291f7ea099.jpeg)


アニメが放送される木曜日は、ネタバレを気にする人にも配慮しなきゃ...って話になって、避難所を作ることになったんだ。(みんなローカルTLを見てるみたい)
悩んでたらあかりちゃんに「部屋なら余ってるよ！みんなで見よう！」って言われちゃって、木曜日と月曜日は映写室として使えることになったよ。

(twitter、Slack、Discord、お友達の部屋...、それぞれ好きな場所でみんな楽しんでると思うんだけど、入りたくてもあかりちゃんちへの入り方が分からなかった人も居たみたい。これはそのための記事...かな。)

(始めたばかりの人や事情を知らない人は、ネタバレを流しちゃうことだってはず...それに何がネタバレになるかも人それぞれ...書いちゃった人を責めすぎることはしないであげてね...。週1回の放送をみんなで楽しもう)

##招待状
(木曜TV TOKYO)あかりちゃんち 第一映写室
https://discord.gg/kAKM96U

(月曜BS JAPAN)あかりちゃんち 第二映写室
https://discord.gg/n7HHUDa

###(他の実況グループ)

(火曜/土曜)[アイカツ！フリカエリカツドウ！](https://sites.google.com/view/furekatsu-about-japanese/) #fuRekatsu 実況部屋 
https://discord.gg/tu86Ryu

fuRekatsu企画: meganeちゃん( https://kirakiratter.com/@megane_2501 )
実況グループ運営: こさかやちゃん( https://kirakiratter.com/@JKosakaya )

##Discordって？
参加する前に、Discordシステムについて説明するね。
Discordはブラウザから使える音声チャット/テキストチャットのアプリケーションかな。
遠くのお友達とゲームで遊びながら音声チャットでおしゃべり、みたいに使う人が多いみたい

映写室はDiscordシステムのテキストチャットを使って、遠くのみんなとアニメで盛り上がれるようにしちゃった。
書き込めるのは放送のある日だけに制限してるから、**キラキラッターのみんなが、実況のために集まれる、限定的なコミュニティ**として運営していくね。

##始め方
まず、招待リンクにアクセスしてみて。

![how1.png](https://qiita-image-store.s3.amazonaws.com/0/176119/6bd5c545-a2a2-1267-bd5c-473a7e4dd332.png)

ニックネームを入力して"続ける"を押して...

![how2.png](https://qiita-image-store.s3.amazonaws.com/0/176119/5818bdbf-b534-ba0e-8635-d9d8c3335112.png)

別の画面になったら仮アカウントができてるはず。この画面は使わないから閉じちゃって...

![how3.png](https://qiita-image-store.s3.amazonaws.com/0/176119/df82c9f8-7a5e-cb7c-f719-c740f0c944ba.png)

もう一度招待リンクを開くと、"招待を受け取る"に変わってる...かな。
(倉庫はテスト用グループだから存在しないよ)

![how4.png](https://qiita-image-store.s3.amazonaws.com/0/176119/f2518e5b-b224-e2f9-92a2-e9901067fe26.png)

これでみんなのいる映写室で一緒に見ることができるね。ログイン用にアカウントを作りたいなら...

![how5.png](https://qiita-image-store.s3.amazonaws.com/0/176119/5f763837-cbec-e655-89f6-c43fece88d59.png)

ログインに使うメールアドレスとパスワードを入力して完了を押してみて。
届いたメールで認証すれば、パソコンとスマートフォンで同じアカウントを使えるかな。

楽しんでね。
【mac】Vagrant/VirtualBoxで作った仮想マシンを使う時の一連の流れまとめたった

タイトルの通り仮想マシンを作ったが、まだ起動と停止の流れが定着していないのでここにまとめます。
※Vagratfileとか諸々の設定は終わっている前提


■開始
①ターミナル起動
②MyVagrant > mycentos(centosが入っているディレクトリ)に移動
③```vagrant up```で仮装マシン立ち上げ
　※立ち上げには少し時間がかかる
④```vagrant ssh```で仮想マシンに接続
　→```[vagrant@localhost ~]$ ```と表示される
⑤プロジェクトフォルダに移動
⑥```php -S 192.168.33.10:8000```でPHPのサーバーを起動
　※phpのコマンド一覧は```php -h```で確認可能

■ファイル転送ツール(FIlezilla)でファイルの編集や転送
①Filezillaを起動
②ブックマークした対象の仮装マシンをダブルクリックして接続
③```home/vagrant```直下のプロジェクトフォルダの中に```index.php```などのファイルを作成する

■表示
①```http://192.168.33.10:8000```をブラウザから入力したらindex.phpの内容が表示出来る

■hostsファイルの編集
①spotlightから「/etc」で検索
②「hosts」というファイルをテキストエディタにドラッグ&ドロップ
③既存の内容をいじらずに一番下に
```192.168.33.10 dev.aaa.com```
 と記述して保存。※aaaの部分は分かりやすい名前
④http://dev.aaa.com で接続すると同じ内容が表示される

■終了
①ファイル転送ツールのサーバーから切断ボタンを押して終了する
②ターミナルで```ctr + c```するとPHPのサーバーが停止する
③```exit```で仮想マシンからログアウト
④```vagrant suspend```で仮想マシン停止
⑤```exit```でターミナル終了
　※exitせずにばつボタンで強制終了しない方がいいらしい
フォームで未入力・未選択時の値

ラジオ、チェックは `NULL` ！

|項目|var_dumpの値|
|:--|:--|
|テキスト|string(0) ""|
|ラジオボタン|NULL|
|セレクトボックス|string(0) ""|
|チェックボックス1|NULL|
|チェックボックス2|NULL|
|テキストエリア|string(0) ""|


```php:PHP：var_dumpで確かめました
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>PHP</title>
</head>
<body>
<form method="post">
<p>テキスト：<input type="text" name="text"></p>
<p>ラジオボタン：<input type="radio" name="radiobutton" value="A">A　<input type="radio" name="radiobutton" value="B">B</p>
<p>
セレクトボックス：<select name="selectbox">
<option value="">-</option>
</select>
</p>
<p>チェックボックス1：<br>
<input type="checkbox" name="checkbox1" value="あ">あ
<input type="checkbox" name="checkbox1" value="い">い
<input type="checkbox" name="checkbox1" value="う">う
</p>
<p>チェックボックス2：<br>
<input type="checkbox" name="checkbox2[]" value="ア">ア
<input type="checkbox" name="checkbox2[]" value="イ">イ
<input type="checkbox" name="checkbox2[]" value="ウ">ウ
</p>
<p>
テキストエリア：<br>
<textarea name="textarea"></textarea>
</p>
<p>
<input type="submit" value="送信">
</form>
<?php
var_dump($_POST['text']);
var_dump($_POST['radiobutton']);
var_dump($_POST['selectbox']);
var_dump($_POST['checkbox1']);
var_dump($_POST['checkbox2']);
var_dump($_POST['textarea']);
?>
</body>
</html>
```
自分メモ（ＳＱＬ）

SQL文法の自分メモ。
## Insert - 登録

```sql
INSERT INTO customer 
VALUES ('山田太郎','20')
```
```sql
INSERT INTO customer (name,age)
VALUES ('山田太郎','20')
```
## Update - 更新

```sql
UPDATE customer
SET name = '山田花子', age = '24'
WHERE id = '0001'
```

## Delete - 削除

全件削除

```sql
DELETE FROM customer 
```
部分的に削除

```sql
DELETE FROM customer 
WHERE name = '山田太郎'
```

## Select - 取得

```sql
SELECT name,age
FROM customer;
```

内部結合
　・・・指定したカラムの値(ON句の後ろ)が一致するデータだけ取得。

```sql
SELECT 
    c.name,
    c.age,
    o.customer_name
FROM 
    customer c
INNER JOIN
    orders o
ON
    c.name = o.customer_name;
```

左外部結合
　・・・左側（FROM句の後ろ）のテーブルのデータはすべて取得。

```sql
SELECT 
    c.name,
    c.age,
    o.customer_name
FROM 
    customer c
LEFT JOIN
    orders o
ON
    c.name = o.customer_name;
```

ソート（昇順：ASC、降順：DESC）

```sql
SELECT name,age
FROM customer
ORDER BY name DESC;
```

## Others - そのほか

日時にInsertするときは、00/00/00 00:00:00 または 00-00-00 00:00:00 の形式

```sql
INSERT INTO customer 
VALUES ('山田太郎','20','17/04/01 23:59:59')
```
学術論文の情報をそれらしい形で出力する方法

学術論文の参考文献欄には、以下のような形で学術論文の情報が列挙されていることが多いかと思います。

```
森田一, 黒橋禎夫. RNN 言語モデルを用いた日本語形態素解析の実用化. 第 78 回全国大会講演論文集, Vol. 2016, No. 1, pp. 13–14, 2016.
```

いかにもそれらしい記述ですが、これを自分で書くとなると大変そうです。
そこで、こういった記述を自動的に取得・生成する方法についてまとめます。

#Google Scholar
https://scholar.google.co.jp/schhp?hl=ja
Googleが提供している学術論文検索サイトです。

##情報の取得方法 (平文)
1. 情報を取得したい学術論文の下にある`引用`をクリックします。  
![2017-04-27_20h05_26.png](https://qiita-image-store.s3.amazonaws.com/0/52291/37757b6d-27b7-414a-efdb-7ee0a54ef0df.png)
2. 情報が出てきますので、コピーします。  
![2017-04-27_20h05_51 - コピー.png](https://qiita-image-store.s3.amazonaws.com/0/52291/fff78dbb-5f20-b023-d93a-ecdc13b432ec.png)

##情報の取得方法 (BibTeX)
学術論文をTeXで執筆する場合、学術論文の情報はBibTeX形式で生成されると便利です。
学術論文の情報をBibTeX形式で欲しい場合には、以下のようにして取得します。

1. 情報を取得したい学術論文の下にある`引用`をクリックします。  
![2017-04-27_20h05_26.png](https://qiita-image-store.s3.amazonaws.com/0/52291/37757b6d-27b7-414a-efdb-7ee0a54ef0df.png)
2. `BibTeX`をクリックします。  
![2017-04-27_20h05_51 - コピー - コピー.png](https://qiita-image-store.s3.amazonaws.com/0/52291/5439110e-6765-0bea-c1f2-500d1360d8b3.png)
3. 以下のような形で情報が出てきますので、コピーします。

```tex
@article{山田寛康2002support,
  title={Support Vector Machine を用いた日本語固有表現抽出},
  author={山田寛康 and 工藤拓 and 松本裕治 and others},
  journal={情報処理学会論文誌},
  volume={43},
  number={1},
  pages={44--53},
  year={2002}
}
```

##Google Scholarボタン
Google Scholarを快適に利用するためのブラウザ向けプラグインです。

  * Firefox : https://addons.mozilla.org/ja/firefox/addon/google-scholar-button/
  * Google Chrome, Vivaldi : https://chrome.google.com/webstore/detail/google-scholar-button/ldipcbpaocekfooobnbcddclnhejkcpn?hl=ja

#情報学広場 (情報処理学会電子図書館)
https://ipsj.ixsq.nii.ac.jp/ej/
情報処理学会が運営している学術論文検索サイトです。
情報系の学術論文でGoogle Scholarを使っても出てこない場合、ここから検索すると出てくることがあります。

##情報の取得方法 (BibTeX)
学術論文をTeXで執筆する場合、学術論文の情報はBibTeX形式で生成されると便利です。
学術論文の情報をBibTeX形式で欲しい場合には、以下のようにして取得します。

1. 情報を取得したい学術論文のタイトルをクリックします。  
![2017-04-27_20h23_34.png](https://qiita-image-store.s3.amazonaws.com/0/52291/5de71b85-5a60-d7d4-2e96-caec5c41f78e.png)
2. BibTeXをクリックします。  
![2017-04-27_20h25_20.png](https://qiita-image-store.s3.amazonaws.com/0/52291/cb2a51b6-9522-e5e8-a179-81c142259e96.png)
3. 以下のような形で情報が出てきますので、コピーします。  
__※このままだと日本語で書かれている氏名も欧米式 (名・姓) の表記になってしまうので、姓と名の間のコンマは消すことをおすすめします。__

```tex
@article{weko_178660_1,
   author	 = "戸田,航史 and 亀井,靖高 and 吉田,則裕",
   title	 = "コードレビュー分析におけるデータクレンジングの影響調査",
   journal	 = "情報処理学会論文誌",
   year 	 = "2017",
   volume	 = "58",
   number	 = "4",
   pages	 = "845--854",
   month	 = "apr"
}
```

#その他のサイト
こちらの記事に載っているサイトの中には、出力に対応しているサイトもありそうな感じがします。
[情報系論文の検索サービスメモ - Qiita](http://qiita.com/bori_so1/items/847a80149e38444a033e)

#最後に
自分がよく使うサイトについてまとめましたが、他に良いサイトがあればコメント欄で紹介の方よろしくお願いします。
Xcodeで画像ファイルを追加した途端にCode Sign Errorが出るようになった時の対処法

# 背景

XcodeでmacOSアプリ開発時にCode Sign Errorが出てBuildできなくなったが、Code Sign Errorの対処法で調べて出てきたProvisioning profileの設定し直しなどではErrorが消えなかった。どのタイミングでCode Sign Errorが出るようになったのか手順を遡って辿ってみると、画像ファイルを追加した直後であることがわかった。どうやら画像ファイルの拡張ファイル属性に問題があるようで、その解消方法を確立したのでメモしておく。

# 解消方法

Terminalにて以下のコマンド操作を行う。

```console
$ cd [プロジェクトのルートディレクトリ絶対パス]
$ find . -type f -name '*.[画像ファイルの拡張子]' -exec xattr -c {} \;
```

```console:例
$ cd /Users/Hoge/APP/HogeProject
$ find . -type f -name '*.png' -exec xattr -c {} \;
```

上記のやり方はプロジェクトファイル内のすべてのPNGファイルを探して拡張ファイル属性を設定し直している。

また、対象の画像ファイルの拡張ファイル属性を直接設定する方法は以下のようにすれば良い。

```console
$ xattr -c /Users/Hoge/APP/HogeProject/image/hoge.png
```

# 備考

Xcodeで直接拡張ファイル属性を設定し直す方法がわかる方がいたら教えてほしい。
検索値より左側にあるデータを抽出する方法

![検索値より左を抽出.png](https://qiita-image-store.s3.amazonaws.com/0/160563/83c7ce90-4682-aec5-1e9e-7b60301302b8.png)


#利用シチュエーション

* 参照元データの中の抜き出したいデータが検索値より左にある場合

##直面した問題
　×　VLOOKUPだと左端の列をキーに右側しか探せない

#記述方法
```
=INDEX(抽出対象範囲,行,列)

<記述例>
=INDEX($D$2:$D$8,MATCH($A2,$E$2:$E$8,0),1)
```

> **前提条件**
> A列に検索したいドメイン名
> D,E列に運営会社とそれぞれのドメイン名のデータ
> ![Excel.png](https://qiita-image-store.s3.amazonaws.com/0/160563/8cf5662f-77a7-e598-dda0-98c132c308d9.png)


---

> **抽出結果**
> ![Excel2.png](https://qiita-image-store.s3.amazonaws.com/0/160563/180ecf47-5ab1-f2a3-8b00-f6da20c24e26.png)



---

> **解説**

> * INDEX関数で抽出したいデータを1列選択する。
> * 抽出する行にMATCH関数から抽出した数値、列に1列めを指定してデータを抽出。

> ####個々の関数の説明####
> INDEX関数は指定された行と列が交差する位置にあるセルの値を返す

> |         | 書き方                            | 利用例            |
> |:--------|:---------------------------------|:-----------------|
> | 書式    | INDEX(範囲, 行番号, 列番号, 領域番号) | INDEX(D2:D8,1,1) |
> | 引数1   | 1つまたは複数のセルのを範囲を指定      | D2:D8            |
> | 引数2   | 指定した範囲の上からの行数を指定       | 1                |
> | 引数3   | 指定した範囲の左からの行列数を指定     | 1                |
> | 引数4   | 複数の領域を選択した場合、どちらの範囲を使用するか指定      ||

> MATCH関数は、指定したセルの範囲から検索値が上から何番目にあるかを返す

> |         | 書き方                            | 利用例                    |
> |:--------|:---------------------------------|:-------------------------|
> | 書式    | MATCH(検査値, 検査範囲, 照合の型)     | MATCH(A2,E2:E8,0)　　　　 |
> | 引数1   | 検索する値またはセル参照を指定　　　　   | A2                      |
> | 引数2   | 検索するセルの範囲を指定     　　　　　　| E2:E8                   |
> | 引数3   | 1、0、-1の数値で指定(0は完全一致)     　| 0                      |


#サンプル

* [Googleスプレッドシート](https://goo.gl/DOd2bv)
ActiveDirectory環境下で、ログインユーザのメールアドレスを取得する（恐らく）一番簡単で堅い方法


# 準備
VisualStudioでプロジェクトを作って下さい。
で、参照設定で以下の二つを追加します。

![image](https://qiita-image-store.s3.amazonaws.com/0/136132/6b3f52c8-ff04-0bfd-db76-0f2dde9cff80.png)

![image](https://qiita-image-store.s3.amazonaws.com/0/136132/9aaecd9c-93f0-7f52-6f24-e8f5e498c6fb.png)

# 実装
例外処理はいい加減。

```csharp
using System;
using System.DirectoryServicies;
using ActiveDS;

class Program {
    static void Main () {
        Console.WriteLine(MyMailAddress);
    }

    static string MyMailAddress {
        get {
            try {
                using (DirectoryEntry DE = new DirectoryEntry(string.Format("LDAP://{0}", new ADSystemInfo().UserName))) {
                    return DE.Properties["mail"].Value as string;
                }
            }
            catch {
                return null;
            }
        }
    }
}
```

# 解説

* ADSystemInfoをインスタンス化すると、ログインユーザの情報が取得できる
* その中のUserNameプロパティは、ActiveDirectory環境に於いてはそのユーザのdn(=distinguishedName)が入っている
* dnはActiveDirectory内での一意な識別名である
* DirectoryServiceのコンストラクタに『`LDAP://dn名`』 を渡すと一発でディレクトリエントリが取れる<br/>※条件を考えたり複数オブジェクトがヒットしたらどうしよう、とか余計な事を考えずに済む
* で、そこから`mail`プロパティにアクセスすればおっけー、と云う訳
* 勿論、他のプロパティにアクセスしても良いですよ

以上
iOSアプリからBasic認証のかかったLaravelのWebアプリにpostする(開発環境)

#はじめに
アプリを開発する中でテストでAPIを叩ける環境がBasic認証のかかったサーバーしかなかったので
その時に行った作業をメモ

#iOSからpostする
Alamofireというライブラリを使ってHttp通信をする
Cocoapodsでいれますが、そこは割愛
## 環境
swift 3.0
Almofire 4.4 ?
xcode 8.3

## iOS側の作業
1. ストーリーボードにボタンを設置
2. ViewController.swiftにIBActionを追加
3. ボタンを押すとpostするよ

```swift:ViewCotroller.swift
import Alamofire
@IBAction func emailLogin(_ sender: UIButton) {

    let user = "user"
    let pass = "pass"
    Alamofire.request("https://dev.myapp.jp/app_login", method: .post)
    .authenticate(user: user, password: pass)
    .responseJSON { response in
            print(response)
    }
}
```

こんな感じでpostする側の準備はOK :ok_woman_tone3: 

# サーバー側でpostされる

##環境
Nginx
PHP5.6
Laravel5.1

## 第一関門

```
TokenMismatchException
```
VerifyCsrfTokenというMiddlewareでcsrf_tokenの整合性をみているのでそのへんで出るエラー
http://qiita.com/rana_kualu/items/3f9d0d6b9a363fd2108e#verifycsrftoken
こちらの記事を参考に

```php
public function handle($request, Closure $next)
{
    return $this->addCookieToResponse($request, $next($request));
    
    ・・・
```
で返してやる。これでOK :ok_woman_tone3:

:warning: 本当は全然OKじゃないけど、
一旦postしてresponseを返すところをやりたいだけなので一旦このまま
あとでこのへんの対策はちゃんとやります

## 第二関門
サーバー側でエラーがでないけどResponseはエラーが返ってくる・・
既存のfunctionを使っていたのでよく見たらFormRequestで制約がかかっていた

```php
public function login(PostRequest $request)
{
    ・・・
}
```

```php:PostRequest.php
class AuthPostRequest extends Request
{

   ・・・

   public function rules()
    {
        return [
            'login_email'    => 'required|email',
            'login_password' => 'required',
        ];
    }

　　　　・・・

｝
```

なのでここも一旦コメントアウトだ！

```php:PostRequest.php
class AuthPostRequest extends Request
{

   ・・・

   public function rules()
    {
        return [
//            'login_email'    => 'required|email',
//            'login_password' => 'required',
        ];
    }

　　　　・・・

｝
```

これでOK :ok_woman_tone3: 

### :sunny:その後
結局API的な動きをする処理を書くので新しくFormRequestの制約なしの新しいfunctionを書き直しました
なので、↑のコメントアウトはしなくてOK

```php:AuthController.php
public function appLogin()
{
    return json_encode("Login!!");
}
```
その代わり route.php に

```php:route.php
Route::post('app_login', ['as' => 'web.auth.app_ogin', 'uses' => 'AuthCont
roller@appLogin']);
```
みたいな感じのを追加してあげました:innocent::relaxed:



# できた
![emailLoginAnime.gif](https://qiita-image-store.s3.amazonaws.com/0/77113/d883ae62-2e1f-a6ac-cf3c-44af968811a0.gif)
:warning:デザインがクソみたいなのは気にしないようにお願いします
動画小さすぎて全然見えないけど　`SUCCESS: Login!!` って出ています

とりあえずpostしてレスポンスが返ってきたので成功だっ:relaxed:
【Swift】BlockからSelectorを作る メモ（要検証）




##コード
```SelectorExt.swift
extension Selector {
    
    init(_ target: AnyObject, _ methodName: String, _ block: @escaping (Void)-> Void) {
        self.init(methodName)
        
        let imp: IMP = imp_implementationWithBlock(unsafeBitCast(block as @convention(block) (Void)-> Void, to: AnyObject.self))
        
        class_addMethod(target.classForCoder, self, imp, "v@")
    }
    
}
```

##使い方
```ViewController.swift
class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        let button = UIButton(frame: CGRect(origin: .zero, size: CGSize(width: 50, height: 50)))
        button.backgroundColor = .yellow
        var cnt = 0
        let sel = Selector(button, "didTaped") {
            print("\(cnt) taped!!")
            cnt+=1
        }
        button.addTarget(self, action: sel, for: .touchUpInside)
        view.addSubview(button)
}
```

```出力
0 taped!!
1 taped!!
2 taped!!
3 taped!!
4 taped!!
5 taped!!
6 taped!!
7 taped!!
8 taped!!
9 taped!!
```


## 参考
[BlockからSelector(メソッド)を作る](http://qiita.com/odorry/items/a0184fdbb9794f741f08)
Riot.js と RiotControl で Flux を実装してみる


## はじめに

[3ヶ月で Serverless Framework を導入し、SPA ( Riot.js + RiotControl で Flux 実装 ) をリリース](http://qiita.com/kotarella1110/items/7802892c84c2afc66e1d "3ヶ月で Serverless Framework を導入し、SPA ( Riot.js + RiotControl で Flux 実装 ) をリリースした話 - Qiita")しました。

Riot.js + RiotControl で Flux 実装し SPA を開発したので、その際の知見を皆さんと共有できればと思います。:smile:

## 開発環境構築

[Riot.js + RiotControl で Flux を実装してみる - 開発環境構築編 - Qiita](http://qiita.com/kotarella1110/items/e4d0120dd70057ffdfdc "Riot.js + RiotControl で Flux を実装してみる - 開発環境構築編 - Qiita")

## スタイルガイド

[De Voorhoede](https://www.voorhoede.nl/ "De Voorhoede") 社チームのための Riot.js スタイルガイドに載っとり開発します。

[Riot.js + RiotControl で Flux を実装してみる - スタイルガイド編 - Qiita](http://qiita.com/kotarella1110/items/4c2b2e0e4982bc95d7cb "Riot.js + RiotControl で Flux を実装してみる - スタイルガイド編 - Qiita")

## Atomic Design

TODO

## Flux を実装

TODO

## 最後に

TODO 箇所はこれから投稿していく予定ですので少々お待ちください。:sob:
**絶対に絶対に絶対**投稿します:exclamation::exclamation::exclamation:
フラグを立ててしまいましたが、どうかよろしくお願いいたします。:joy:
ITの世界に迷い込んだ文系の成長記録。2日目

プロトコル、API、トークンという単語達がグルグルグルグル頭の中で回っております…

プロトコルもAPIも同じに思えて、悶々としてます。

もう少しでこの会社に入って1ヶ月になるのですが、出来る仕事がないので、ひたすら読書してインプットしてます。

昨日に引き続きプログラムに触れました。
HTMLとCSSです。
わかりません。なんですか。

Progateを使ってど初心者向けのことを、やっているのですが、私には厳しい戦いでした。
2日かけてやっと初級編をクリアした私。

これからもProgateとの戦いは続きます。

明日も1日頑張りましょう。
daterangepickerをシングルカレンダーとして使用。表記を英語から日本語へ変える方法。

`locale:`で囲む。

検索するとなかなかこの記述が出てこなかったので公式リファレンスより引用した。

何故か月が日本語になるだけで、曜日が日本語になってくれない。

```js
$(".single_cal2").daterangepicker({
		singleDatePicker: !0,
		singleClasses: "picker_3",
		format: 'YYYY-MM-DD',
		locale: {
			format: 'YYYY-MM-DD',
			yearSuffix: '年',
			showMonthAfterYear: true,
			monthNames: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'],
			dayNames: ['日', '月', '火', '水', '木', '金', '土'],
			dayNamesMin: ['日', '月', '火', '水', '木', '金', '土'],
			minDate: new Date(),
			maxDate: '+0d',
			hideIfNoPrevNext: true
		},
```
MySQLのvalidate_passwordのルールをゆるくする

# Environment
MySQL : 5.7

新しいバージョンのMySQLを使おうとしたらパスワードのルールが厳しかったのでゆるくします
開発環境で使うやつなのでいいんです

まずはrootでログイン
```mysql -uroot -p```

初期パスワードはここにあります
```/var/log/mysql.log```

```
SHOW VARIABLES LIKE 'validate_password%';

+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password_check_user_name    | OFF    |
| validate_password_dictionary_file    |        |
| validate_password_length             | 8      |
| validate_password_mixed_case_count   | 1      |
| validate_password_number_count       | 1      |
| validate_password_policy             | MEDIUM |
| validate_password_special_char_count | 1      |
+--------------------------------------+--------+
```

これらの変数の値でパスワードポリシーを決められるんですね

>* LOW ポリシーは、パスワードの長さのみテストします。パスワードは少なくとも 8 文字の長さでなければなりません。

>* MEDIUM ポリシーは、パスワードが最低 1 つの数値文字を含み、1 つの小文字および大文字を含み、1 つの特殊文字 (英数字以外) を含む必要があるという条件を追加します。

>* STRONG ポリシーは、パスワードの 4 文字以上の部分文字列が、(辞書ファイルが指定された場合に) 辞書ファイル内の単語と一致してはならないという条件を追加します。

_~公式ドキュメントより引用_

```
SET GLOBAL validate_password_length=4;
SET GLOBAL validate_password_policy=LOW;
```

これでパスワードの長さのみをチェックするようになりました
cordovaで対応Android OSを設定する。

###corodvaで作成するハイブリットアプリの対応Android OSを設定します。

##対応Android OSとは。。。
対応するAndroid OSの加減を設けることができます。
この設定はstoreの「その他の情報」の「Android 要件」に表記されます。
![001.png](https://qiita-image-store.s3.amazonaws.com/0/170662/6d7e63b3-1c38-8b52-f69b-d373398597b4.png)

##影響
追記予定。。

##設定方法
1. config.xml　編集
    path:プロジェクトroot/config.xml

    ```
<platform name="android">
    <preference name="android-minSdkVersion" value="18" />
</platform>
```

2. cordova　ビルド
    path:プロジェクトroot

    ```
cordova build android
```

3. AndroidManifest.xml　確認
    path:プロジェクトroot/platforms/android/AndroidManifest.xml 

    ```
<uses-sdk android:minSdkVersion="18" android:targetSdkVersion="24" />
```
【rails】モデル取得時の結果が0件の時

# 概要

User モデルの name カラムが string 型の時、どちらを使いますか？

```ruby:
if User.name.present?
if User.name
```

この記事では、セッターやモデル取得メソッドなどの取得数が0件の時に、帰ってくる値が書かれています。
Rails で present? をつけるか、つけないかの判断等にご活用ください。

# 目次
- has_many 先
- belongs_to 先
- 自分の String カラム
- 自分の integer カラム

# has_many 先

```ruby:
User.articles.present? # -> false
User.articles # -> true
User.articles.class # -> クラス名::ActiveRecord_Associattions_CollectionProxy
```

# belongs_to 先

```ruby:
User.country.present? # -> false
User.country # -> false
User.country.class # -> NilClass
```

# 自分の String カラム

```ruby:
User.name.present? # -> false
User.name # -> true
User.name.class # -> String
```

# 自分の Integer カラム

```ruby:
User.age.present? # -> false
User.age # -> false
User.age.class # -> NilClass
```
BEMを使ったHTML共通パーツ（メモ）

## Block

### ページ全体（ container ）

```html
<div class="container"></div>
```

### 共通パーツ（cmn-xxx）

```html
<!-- 共通ヘッダー html4（上） or html5（下） -->
<div class="cmn-header"></div>
<header class="cmn-header"></header>

<!-- 共通フッター html4（上） or html5（下） -->
<div class="cmn-footer"></div>
<footer class="cmn-footer"></footer>

<!-- 共通ナビゲーション html4（上） or html5（下） -->
<div class="cmn-nav"></div>
<nav class="cmn-nav"></nav>
```

## Element

### 見出し（ _headline ）

```html
<h1 class="xxx_headline">見出し１</h1>
<h2 class="xxx_headline">見出し２</h2>
<h3 class="xxx_headline">見出し３</h3>
<h4 class="xxx_headline">見出し４</h4>
<h5 class="xxx_headline">見出し５</h5>
<h6 class="xxx_headline">見出し６</h6>
```

### 一覧（ _list, _item ）

```html
<ul class="xxx_list">
    <li class="xxx_item"></li>
    <li class="xxx_item"></li>
    <li class="xxx_item"></li>
    ...
</ul>
```

### コンテンツ要素（ content_xxx ）
```html
<!-- コンテンツヘッダー html4（上） or html5（下） -->
<div class="content_header"></div>
<header class="content_header"></header>

<!-- コンテンツフッター html4（上） or html5（下） -->
<div class="content_footer"></div>
<footer class="content_footer"></footer>
```

## Modifier

### 要素の状態を表す場合（ -state ）
```html
<!-- カーソルが乗っている状態 -->
<a href="#" class="xxx xxx-hover"></a>

<!-- アクティブ状態 -->
<a href="#" class="xxx xxx-active"></a>

<!-- フォーカスされた場合 -->
<a href="#" class="xxx xxx-focus"></a>
```

### コンテンツによって色を変えたい場合（ -color ）
```html
<!-- 赤の場合 -->
<div class="xxx-red"></div>

<!-- 青の場合 -->
<div class="xxx-blue"></div>

<!-- 緑の場合 -->
<div class="xxx-green"></div>
```
textarea のスクロールのパーセンテージが知りたい

# textarea のスクロールのパーセンテージが知りたい

textarea を最大までスクロールしたとき、次の関係が成り立つ。

```js
const t = $("textarea#foo")[0];

t.scrollHeight - t.offsetHeight === t.scrollTop;
```

故に現在のスクロール位置は

```js
$(t).on("scroll", (ev)=>{
    const ratio = t.scrollTop / ( t.scrollHeight - t.offsetHeight );
    console.log(ratio * 100, "%");
});
```
textarea にあるカーソルの現在の行位置が知りたい

# textarea にあるカーソルの現在の行位置が知りたい

`HTMLTextAreaElement.prototype.selectionEnd` を使うと text 上のカーソルの文字位置がわかる。
いくつめの改行の区間に入っているのかを調べれば良い。

```js
const $textarea = $("textarea#someone");

document.addEventListener('keyup', function(ev){
  const pos = $textarea.get(0).selectionEnd;
  const text = $textarea.val();
  const [linePos, lineAll] = getCursorLinePos(pos, text);
  console.log(linePos, "行目", (linePos-1) / (lineAll-1) * 100, "%");
});

function getCursorLinePos(pos, text){
  const lines = text.split("\n");
  const charCounts = lines.map((line)=> line.length+1);
  if(charCounts.length>0 && charCounts[0]>0){ charCounts[0]-=1; }
  let cur = 0;
  let sum = 0;
  for(let i=0; i<charCounts.length; i++){
    sum += charCounts[i];
    if(pos <= sum){
      cur = i+1;
      break;
    }
  }
  return [cur, lines.length];
}
```
[随時追加] react-native でアプリを作る際に使っているモジュール


awesome-react-nativeもあるので
一通りスターがついてるプラグインを見たい方はどうぞ

https://github.com/jondot/awesome-react-native

## 作っているアプリ

スケジュール登録系のもの

## 大枠

1から自分で作るのはメンテが大変なので下記のある程度出来上がったものに
自分が行いたいものを継ぎ足すことに

一発目のアプリからきれいな形で書けるほど筋力がないので
整ったモノを真似て自分のものにしていくスタンス

https://github.com/mcnamee/react-native-starter-app

有料のもの(50$)買えばもっと色々コンポーネントついてくるみたいです

JWTでのapi処理が実装されていてすごく助かった、、
→ バックエンドは使い慣れたphpを使いたかったので

後から知ったのだが、__NativeBase__なるものも良さそう。。

https://nativebase.io/

こちらもお金で色んなテンプレート買えるみたい



## 上記で紹介したstarter-appで使われているUIとかRoutingモジュール

- __react-native-element__ UIに関するコンポーネントが色々入っている

- __react-native-router-flux__ ルーティングに使われている

- __jest__ テスティングライブラリ。facebook謹製。

- __redux__ stateの管理に

## バッチだけどラベルに

意外に見当たらなかったのでこれを使った

https://github.com/react-native-component/react-native-smart-badge

## datePicker

スケジュールの登録にdatePickerは必須ですよね

https://github.com/xgfe/react-native-ui-xg/tree/master/components/DatePicker

↑ こちらと迷ったのだがUIがきれいなので下記↓を採用

https://github.com/mmazzarolo/react-native-modal-datetime-picker

## まとめ

選択肢はそんなにないのだけれど
欲しいなと思ったモジュールは検索すれば大体あると思う

そのくらいにreact-nativeで開発している人も増えているんだなと

意外とラベルみたいな小さいモジュールが全然なかったことに驚いた
自分でそんくらい書けよって話ですが、jsでcss書くの嫌だし、css勉強したくなかった。。

toCとかのサービスで儲けるならアプリのリリースは必須だと思うので
色々揃ってきた今、react-nativeデビューするのはいかがだろうか

色んなライブラリに依存しまくってるので今後後方互換性のないアップデートあったら死ぬな、、笑
在宅勤務のための環境作り

２０１７年で転職して、家で仕事する機会も増えました。昔と比べて、家にいる時間が遥かに長くなりました。それで、ずっと棚上げしてた「仕事スペース改善計画」をやっと真面目に考えることにしました。

# 改善しようと思ったコト
- 机の高さが合わないので肩こりがひどい
- 椅子が体に合わないため、腰が痛い
- AirMac Extremeを家のルータとして使うのですが、Raspberry piとの相性が悪くて、接続がよく切れる

色々と課題ありますが、今回は主に机の改善について書きます。

## まずは机！

私が使っている仕事机は７年前に、来日したとき、IKEAで買ってた普通の机です（多分ダイニング用ですが、ずっとPCとモニターを置いてた）。

と、まあ、試しに1日8時間この机で仕事していた結果、夜になると、肩こりが酷かったです。。。

色々と調べてみたら、何と、自分が使っている机は自分の身長に合わないことがわかりました。。。

![Screen Shot 2017-04-27 at 18.05.59.png](https://qiita-image-store.s3.amazonaws.com/0/59161/a47b52aa-2df2-d885-19e7-bfb79af37a3a.png)

> 自分の身長は167cmなので、最適は机の高さは65cmと算出されました。

でも、実際今使っている机を図ってみたら、70cmでした（日本国内で売ってる机は基本70cmらしい）。。。つまり、この机を使っているときは、いつも5cmほど肩を上げた状態です。肩にすごい負担をかけた状態を8時間か、それ以上の時間を維持していたってこと。

### じゃあ、切ればいいでしょう？

そうです。足の部分を短くすれば、簡単に調整できると思いますので、ホームセンターから道具をレンタルして、自分で机の足を短くしました。

![Screen Shot 2017-04-27 at 18.11.25.png](https://qiita-image-store.s3.amazonaws.com/0/59161/b3f403b7-836a-bedf-a0a7-b76987aa3c99.png)

> 切断用の刃の購入と、ディスクグラインダーをレンタルして、いざ！

今回は思い切って、70cm から 5cmを切り取って、65cmにしました。その後、短くした机をもう1日を使ってみて、今度は肩こりは発生しませんでした。

## 結論

エンジニアは知識ももちろん、いかに長い時間を集中して、コーディングできることが勝負かと思います。私も今まで、オフィスで働いていた普通のサラリーマンでしたが、今回は家からでも仕事できる職場と出会うことで、在宅勤務をはじめました！会社にいるときはなかなか会社の机を調整することができないと思いますが、自宅ならいくらでもカスタマイズできます。自分の最高のパフォーマンスが出せる環境を作るのが重要です。

次回は椅子選びについても書きたいです。

リンク：

机の高さと椅子の座面の高さの関連性：　http://www.bauhutte.jp/bauhutte-life/tip2/
RMeCabで一時ファイルを作成しない方法

例えばネットワークグラフをさくっと作成したいが、そのためにテキストをファイルに保存して、読み込むのが面倒だという場合の対応。

テキストを文字列として保存し

```r

merosu <-"
メロスは激怒した。
必ず、かの邪智暴虐の王を除かなければならぬと決意した。
メロスには政治がわからぬ。
メロスは、村の牧人である。
笛を吹き、羊と遊んで暮して来た。
けれども邪悪に対しては、人一倍に敏感であった。
きょう未明メロスは村を出発し、野を越え山越え、十里はなれた此のシラクスの市にやって来た。
メロスには父も、母も無い。
女房も無い。
十六の、内気な妹と二人暮しだ。
この妹は、村の或る律気な一牧人を、近々、花婿として迎える事になっていた。
結婚式も間近かなのである。
メロスは、それゆえ、花嫁の衣裳やら祝宴の御馳走やらを買いに、はるばる市にやって来たのだ。
先ず、その品々を買い集め、それから都の大路をぶらぶら歩いた。
メロスには竹馬の友があった。
セリヌンティウスである。
今は此のシラクスの市で、石工をしている。
その友を、これから訪ねてみるつもりなのだ。
久しく逢わなかったのだから、訪ねて行くのが楽しみである。
"
```

これをデータフレームにする

```r
S <- data.frame(merosu, stringsAsFactors = FALSE)
```

RMeCab にはデータフレームの列を指定して解析できる関数 (`RMeCabDF(), docMatrixDF(), docDF()` ) があるので、これを使う。

```r

df <- docDF(S, pos = c("名詞","形容詞", "動詞"), 
　　　　　　　column = 1, type = 1, N = 2, nDF = 1)
head(df)
```

上の例では、バイグラムの各単語（そして頻度）を独立した列として保存したデータフレームが出力される。

ここから、例えばネットワークグラフを描く。

```r
library(igraph)
library(dplyr)
library(magrittr)

df %<>% select(N1, N2, Row1) %>% filter(Row1 > 1)
bigram <- graph_from_data_frame(df)
tkplot(bigram, vertex.color = "SkyBlue", vertex.size = 22)
```

ただしおすすめは、`tempdir()` を使って一時ファイルを作成することです。

```r

tmp <- tempfile()
write(merosu, tmp)

df2 <- docDF(tmp, pos = c("名詞","形容詞", "動詞"), column = 1, type = 1, N = 2, nDF = 1)

df2 %<>% select(N1, N2, Row1 = starts_with("file")) %>% filter(Row1 > 1)

bigram2 <- graph_from_data_frame(df2)

tkplot(bigram2, vertex.color = "SkyBlue", vertex.size = 22)
```


以下、参考までに http://rmecab.jp/wiki/index.php?RMeCabFunctions#t9aa01d7　から引用。

```r
dummy <- c ("私は真面目な学生です。",
             "彼女は数学専攻の学生です。", 
             "彼らは物理学を専攻している。")
tmpdir <- tempdir ()

for (i in seq(dummy) ){
   td <- tempfile("tmp", tmpdir = tmpdir)
   write( dummy [i] ,  file = td)
   if (file.exists (td)) cat( td, "exists", "\n")
}
library (RMeCab)
x <- docMatrix (tmpdir)
x
#  以下のコードは、通常は実行する必要はありません# 
# unlink (tmpdir, recursive = TRUE) # tmpファイルを削除
```
「ソースが見つかりませんでしたが、いくつかまたはすべてのログを検索できませんでした。アクセス不可能なログ: Security」の対処法


英語だと
「The source was not found, but some or all event logs could not be searched. Inaccessible logs: Security. 」



    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog


の権限をフルアクセスにするといいということが書いてある記事を見つけたが解決せず。


https://blog.sandro-pereira.com/2012/02/16/the-source-was-not-found-but-some-or-all-event-logs-could-not-be-searched-inaccessible-logs-security/
Hyper-V環境でkdumpでのコアダンプが出力されない件

Hyper-V環境のRHEL7.2でkdumpでのコアダンプが出力されなかったので調べると、Hyper-V特有の問題とのこと。

# 参考
https://support.microsoft.com/ja-jp/help/2858695/can-t-use-kdump-or-kexec-for-linux-virtual-machines-on-hyper-v

上記サイトのRHEL6.4の設定を参考にRHEL7の設定を行い、kdumpでコアダンプが出力されることを確認。
なお、kdumpの基本設定およびテストは以下のサイトをもとに確認する。
https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/7/html/Kernel_Crash_Dump_Guide/chap-introduction-to-kdump.html

# 設定
1. メモリ使用量の設定
この設定はHyper-Vにかかわらず、共通の基本設定です。

(1) メモリ使用量を設定ファイルに記述
4GBメモリでは、128MBではちょっと不足気味なので、200MBに設定しました。
crashkernel=200M という箇所です。

```bash:/etc/default/grub
GRUB_CMDLINE_LINUX="crashkernel=200M rhgb quiet ipv6.disable=1"
```

(2) 上記設定後、BIOSファームウェア用にGRUB2設定を再作成

```bash
# grub2-mkconfig -o /boot/grub2/grub.cfg
```

2. kdumpの設定
(1) /etc/kdump.confの設定
以下のように設定しました。

```bash:/etc/kdump.conf
path /var/crash
core_collector makedumpfile -l --message-level 1 -d 31
default reboot
extra_modules ata_piix sr_mod sd_mod
```

「extra_modules ata_piix sr_mod sd_mod」がHyper-V用に追加した設定です。
Hyper-V以外では不要と思われます。
なお、blacklist options disk_timeoutの各オプションは廃止されており、後述のKDUMP_COMMANDLINE_APPENDに記述します。

(2) /etc/sysconfig/kdumpの設定
Hyper-V用に以下のように設定しました。
Hyper-V以外では不要です。

```bash:/etc/sysconfig/kdump
KDUMP_COMMANDLINE_APPEND="irqpoll nr_cpus=1 reset_devices cgroup_disable=memory mce=off numa=off udev.children-max=2 panic=10 rootflags=nofail acpi_no_memhotplug transparent_hugepage=never"
=>
KDUMP_COMMANDLINE_APPEND="irqpoll nr_cpus=1 reset_devices cgroup_disable=memory mce=off numa=off udev.children-max=2 panic=10 rootflags=nofail acpi_no_memhotplug transparent_hugepage=never rd.driver.blacklist=hv_vmbus,hv_storvsc,hv_utils,hv_netvsc,hid-hyperv ata_piix.prefer_ms_hyperv=0"
```

rd.driver.blacklist=hv_vmbus,hv_storvsc,hv_utils,hv_netvsc,hid-hyperv
ata_piix.prefer_ms_hyperv=0
の2パラメータを追加しています。

# テスト

(1) kdumpサービス起動確認

```bash
# systemctl is-active kdump
active
```

となるはずです。activeでなければサービスを起動してください。

(2) カーネルクラッシュ

```bash
# echo 1 > /proc/sys/kernel/sysrq
# echo c > /proc/sysrq-trigger
```

(2)の実行で、ターミナルがハングして、OSが再起動します。
再起動後、/var/crash にコアダンプが出力されます。

メモリ使用量は、サーバの実装メモリで正しく最低メモリ使用量を計算した方がいいかもしれません。
Go言語 | gore でパッケージのインポートを自動でおこなう

オプション付けるだけでOK。

```
gore -autoimport
```
# 結果

`:import time` とか打たなくても、すぐパッケージを使える。

```
gore> time.Parse("2006-01-02", "2017-04-02")
2017-04-02 00:00:00 UTC
nil
```

# 環境

- gore version 0.2.6
- go version go1.8.1 darwin/amd64











<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
IAM Database AuthenticationをPythonから試す

# 背景
RDS for MySQLとAuroraのDB接続にIAMが使えるようになったそうです。
[Manage access to your RDS for MySQL and Amazon Aurora databases using AWS IAM](https://aws.amazon.com/about-aws/whats-new/2017/04/manage-access-to-your-rds-for-mysql-and-amazon-aurora-databases-using-aws-iam/)
[IAM Database Authentication for MySQL and Amazon Aurora](http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.html)
サンプルがJavaだったのでPythonから試してみました。

# 環境
- Amazon Linux 2017.03
- Aurora 1.12
- Python 2.7.12
- boto3-1.4.4

# 準備
## Aurora
RDSのクラスターから「クラスターの変更」を開き「IAMのDB認証を有効にする」を「はい」に設定します。Auroraの場合`db.t2.small`はIAMデータベース認証をサポートしていないため`db.t2.medium`以上で試してください。
<img alt="RDS_·_AWS_Console.png" src="https://qiita-image-store.s3.amazonaws.com/0/48250/655e7abf-d84a-2a90-da38-da8911b403f2.png">

## DBユーザーの作成
IAMアクセス用のDBユーザーを作成し、必要な権限を付与します。

```mysql
mysql> CREATE USER iam_auth_user@'testdb-cluster.cluster-abcdefghijkl.ap-northeast-1.rds.amazonaws.com' IDENTIFIED WITH AWSAuthenticationPlugin as 'RDS';
mysql> GRANT SELECT ON `testdb`.* TO iam_auth_user@'%';
```

## 公開鍵のダウンロード
IAMデータベース認証はSSL接続が必須という事なので公開鍵をダウンロードしてec2上の適当なパスに配置しておきます
http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Aurora.Overview.html#Aurora.Overview.Security.SSL

## IAM
ドキュメントを参考にIAM Roleに権限を付与します。リソースIDはクラスターのものを指定しています。

```json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "rds-db:connect"
      ],
      "Resource": [
        "arn:aws:rds-db:ap-northeast-1:12345678:dbuser:cluster-12ABC34DEFG5HIJ6KLMNOP78QR/iam_auth_user"
      ]
    }
  ]
}
```

# 接続
```python:iam_db_auth.py
#  -*- coding: utf-8 -*-
from __future__ import print_function
import boto3
import mysql.connector
from mysql.connector.constants import ClientFlag

rds = boto3.client('rds', region_name='ap-northeast-1')

user = 'iam_auth_user'
host = 'testdb-cluster.cluster-abcdefghijkl.ap-northeast-1.rds.amazonaws.com'
db_auth_token = rds.generate_db_auth_token(host, 3306, user, 'ap-northeast-1')

config = {
    'user': user,
    'password': db_auth_token,
    'host': host,
    'db': 'testdb',
    'client_flags': [ClientFlag.SSL],
    'ssl_ca': 'rds-combined-ca-bundle.pem'
}

cnx = mysql.connector.connect(**config)
cur = cnx.cursor(buffered=True)

cur.execute('SELECT AURORA_VERSION();')
print(cur.fetchone())

cur.close()
cnx.close()
```

```
$ python iam_db_auth.py 
[(u'1.12',)]
```

以上です。

# 参考
- [IAM Database Authentication for MySQL and Amazon Aurora](http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.html)
- [RDS — Boto 3 Docs 1.4.4 documentation](https://boto3.readthedocs.io/en/latest/reference/services/rds.html#RDS.Client.generate_db_auth_token)
- [MySQL Connector/Python Developer Guide](https://dev.mysql.com/doc/connector-python/en/)