OmniAICreator/Qiita-1.07M huggingface dataset:
Crashlyticsのレポートが__hidden表示になる問題

下記の問題が起きた際に、面倒だったのでENABLE_BITCODEをtrueにしてみたところ、iTunesConectへのアップロードの警告（ERROR ITMS-90635）は出なくなったが、Crashlyticsのレポートが__hidden表示になってしまってクラッシュ箇所が分からなくなってしまった。

> ERROR ITMS-90635: "Invalid Mach-O Format. The Mach-O in bundle "MyApp.app/Frameworks/SDWebImage.framework" isn’t consistent with the Mach-O in the main bundle. The main bundle Mach-O contains armv7(machine code) and arm64(machine code), while the nested bundle Mach-O contains armv7(bitcode) and arm64(bitcode). Verify that all of the targets for a platform have a consistent value for the ENABLE_BITCODE build setting."
http://qiita.com/yosan/items/417d4aa5a67778ce876e

上記の記事にあるように、cocoapods側のENABLE_BITCODEをfalseにすれば、Crashlyticsのレポートが__hiddenになる問題は解決された。

BITCODEを有効にすると、Crashlyticsのクラッシュレポートがうまく動作しないようだ（？）
nim文字列操作(unicode)

# 概要
nimのUnicode操作をコツコツと。
nimでも日本語リテラルは通りますが、日本語文字列の操作をstring型で利用しようとすると
期待通りに動きません。
そこでunicodeモジュールを使って、ルーン(Rune)型として利用するようです。

## 以下メモ
### うまくいかない例
```nim
import unicode,strutils
block:
  var str = "あいうえお"
  #echo "表示されない=>",str[0]
  echo "表示される  =>",str[0..2]
  echo "文字列長    =>",str.len
```
```
(stdout)
表示される  =>あ
文字列長    =>15
```
### Rune型を利用
```nim
import unicode,strutils
block:
  var str = "あいうえお".toRunes
  echo $str
  echo "表示される  =>",str[0]
  echo "表示される  =>",str[0..2]
  echo "文字列長    =>",str.len
```
```
(stdout)
あいうえお
表示される  =>あ
表示される  =>あいう
文字列長    =>5
```
### stringクラス拡張
```nim
import unicode,strutils
block:
  var str = "あいうえお"
  echo "文字列長=>",str.runeLen
  echo "バイトインデクス=>",str.runeAt(0)
  echo "バイトインデクス=>",str.runeAt(3)
  echo "バイトインデクス=>",str.runeAt(6)
  echo "バイトインデクス=>",str.runeAt(9)
  echo "バイトインデクス=>",str.runeAt(12)
  echo "インデクス=>",str.runeAtPos(0)
  echo "インデクス=>",str.runeAtPos(1)
  echo "インデクス=>",str.runeAtPos(2)
  echo "インデクス=>",str.runeAtPos(3)
  echo "インデクス=>",str.runeAtPos(4)
```
```
(stdout)
バイトインデクス=>あ
バイトインデクス=>い
バイトインデクス=>う
バイトインデクス=>え
バイトインデクス=>お
インデクス=>あ
インデクス=>い
インデクス=>う
インデクス=>え
インデクス=>お
```
python初心者が散布図を出力するまで

# 前提
Python 2.7.10
matplotlib 1.3.1
numpy 1.8.0rc1


ローカルにあるpythonのライブラリ一覧を取得するコマンドは

```
$ pip freeze
```


# 用意するもの

test_data.csv
test.py

```test_data.csv
1,1000,,3
1.2,4000,0.5,2
1.3,6000,0.2,1
```
とする。



# 実装してみよう！

```py
# -*- coding: utf-8 -*-
from matplotlib import pyplot as plt
import numpy as np

def main():
  data = np.genfromtxt("test_data.csv",delimiter=",")
  plt.scatter(data[:,0], data[:,2]) # １列目のデータをx軸の値、3列目のデータをy軸の値として与える。
  plt.xlabel('xlabel') # x軸
  plt.ylabel('ylabel') # y軸
  plt.show() # グラフの描画

if __name__ == '__main__':
    main()
```

### ポイント0 : エンコードの指定
日本語のコメントをソースコードに入れても大丈夫なように、
ファイル先頭で

```py
# -*- coding: utf-8 -*-
```

として宣言しておく。

### ポイント1 : インポートの仕方
最初に描画ライブラリである `matplotlib` と `numpy` のインポートを宣言する。

意味:
```
from matplotlib import pyplot as plt
```

matplotlibパッケージから、python用のモジュールであるpyplotをpltという名前でファイル中で利用する。

### ポイント2 : CSVファイルの読み込み方

```py
np.genfromtxt
```

CSVをロードする関数として `loadtxt` が出てくるが `genfromtxt` はもう少し高機能である。

loadtxt: ロードするCSVファイルの中にデータの未記入の部分があると、ValueError
genfromtxt: ロードするCSVファイルの中にデータの未記入の部分があっても、nanとして処理される

あとは、pyplotに従い、散布図の描画を行う。

結果はこちら！
![スクリーンショット 2016-06-15 0.07.53.png](https://qiita-image-store.s3.amazonaws.com/0/88357/66a734fe-4003-78da-1c36-928bb7df7233.png)

### 補足
読み込まれたCSVは

```py
[[1,1000,,3],
 [1.2,4000,0.5,2],
 [1.3,6000,0.2,1]]
```

という多重配列の形に変換される。この中から[1,1.2,1.3]という列を取得するには
data[:,0]というようなextended_slicingを利用する。

サンプルコード

```py 
a = numpy.array([[1,2],[3,4]])
print a[:, 0]  # array([1, 3])
```
Wordpress テーマファイルを作るのに必要最低限なファイル

# まえがき
Wordpressのテーマファイルは世の中に掃いて捨てるほど存在しています。
その中にはWordpressサイトを制作するうえで非常に便利なテーマもあると思います。
だけど最初から `function.php` にゴチャゴチャ書かれて、それを読み取るの面倒くさいです。
`twentyforteen` とかファイル数多過ぎ。
どのファイルがなんで必要なのか読み解くの面倒くさいです。
Wordpressのバージョン4.5.2にデフォルトで入っているテーマ `twentysixteen` になってからかなりファイル数が減ってスッキリしたけど相変わらず `function.php` に何書いているか全然わかりません。
一応コメントで説明書かれてるけど英語読めません。すみません。
だから、テーマ作るのに必要最低限のファイルで構築していき、足りないものを各々で追加していったほうが、どのphpファイルがなぜこのテーマに必要なのかを理解しつつ、テーマファイルを作成できると思います。

# テーマ作成に必要なファイル
基本的に下記だけあればテーマを作成するにあたって弊害がないと思います。
※<a href="https://goo.gl/5HMDav" target="_blank">Codex</a> によると、 style.css と index.php だけで作れるみたいですけど…。

- functions.php 
- header.php
- index.php
- 404.php
- archive.php
- category.php
- page.php
- search.php
- single.php
- sidebar.php
- footer.php
- style.css
- screenshot.jpg

案件に寄りけりだとは思いますが、個人的には js と css（必須であるstyle.cssは除く）は `wp-content` 内に入れなくても良いと思っています。
少なくとも僕が Wordpress を扱ってきた案件でクライアント自身で管理画面 css をゴリゴリ書き換えたいとか、
js を追加したいという要望は無かったので、静的なサイトと同じようにサイト直下に `common` or `asset` フォルダか何か作ってそこに入れればよいと思います。
そうすることで、テーマファイル内でわざわざ `<?php get_template_directory_uri(); ?>`  のような関数を使って書かなくても済むのでソースが綺麗に見えるのかなと思っています。

僕のWordpressサイトの制作フローとして、初めにhtmlで全体を作成してからパーツを分けてWordpressに組み込んで行くので組み込む過程で head 内の css ファイルを下記のように書き換えるのが好きじゃないのです。
```
<link rel="stylesheet" href="<?php get_template_directory_uri(); ?>/css/style.css">
```

# テーマを作成する
各phpファイルに必要な記述を書き込みます。

## functions.php 
```php:functions.php 
<?php

// 閉じタグ無し
```

## header.php
```php:header.php
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<script type="text/javascript" src="./js/viewport.js"></script>
<title><?php bloginfo('name'); ?></title>
<meta name="keywords" content="<?php bloginfo('keywords'); ?>">
<meta name="description" content="<?php bloginfo('description'); ?>">
<link rel="stylesheet" href="/common/css/style.css">
<?php wp_head(); ?>
</head>
```

## footer.php
```php:footer.php
<script type="text/javascript" src="/common/js/script.js"></script>
<?php wp_footer(); ?>
</body>
</html>
```

## style.css
```css:style.css
/*
Theme Name: テーマの名前（管理画面のテーマ選択で表示される）
Description: テーマの説明（管理画面のテーマ選択で表示される）
Version: 1.0
*/
```
基本的に `/common/css/style.css` を使うので上記の3行で事足りるかと思います。

## それ以外のphp
```php:other.php
<?php get_header(); ?>

それぞれのコンテンツの内容を記載

<?php get_footer(); ?>
```

# 終わり
これで最低限のものは表示されると思います。
もちろんWordpressサイトとして機能を発揮するには `index.php` とかに投稿を表示させるような記述をしなきゃなりませんが。

# 参考サイト
<a href="https://goo.gl/KLvojn" target="_blank">WordPress Codex日本語版（テーマの作成）</a>
Indriに重みをつけてクエリを投げる

#IndriRunQuery

/indri-version/runquery　下にあります。
通常通り``apple phone``などと投げたいときは、コマンドラインに
```./IndriRunQuery -count=10 -query='apple phone' -server=localhost:port```
などとすれば検索ができます。

##重みをつけて検索

では、``apple``に1、``phone``に0.2など、個々のクエリに重みをつけて検索をしたいときはどうするか。
Lemurプロジェクトのドキュメントを読んだところ、``#weight( 重み クエリ　重み2　クエリ2)``でいけると書いてあったので試してみる。
```./IndriRunQuery -count=10 -query='#weight( 1.0 apple 0.2 phone)' -server=localhost:port```
書いてあるとおり、これでうまくいった。

ただし、気をつけないといけないのは複数のクエリに同じ重みを付けたい時である。
たとえば、
```./IndriRunQuery -count=10 -query='#weight( 1.0 apple 0.2 phone watch)' -server=localhost:port```
とすると、エラーが出る。
このような場合は、
```./IndriRunQuery -count=10 -query='#weight( 1.0 apple 0.2 phone 0.2 watch)' -server=localhost:port```
としなければならない。

###補足
なお、他のコマンドと組み合わせて使うこともできる模様(この場合複数の単語を一括りにすることもできる)
```#weight( 1.0 #combine(apple watch) 0.2 iPhone)```
など。
x軸がas.POSIXct型のときのggplotには気をつける


## 結論
- ```date_format()``` を使おう


## だめな例1

```R
library(ggplot2)
library(scales)

# データを作る
df1 <- data.frame(date = c(as.POSIXct("2016-01-01 10:00:00"),as.POSIXct("2016-01-02 6:00:00"),as.POSIXct("2016-01-02 23:00:00")),value = c(10,30,20))

# データを確認する
df1
                 date value
1 2016-01-01 10:00:00    10
2 2016-01-02 06:00:00    30
3 2016-01-02 23:00:00    20

# ggplot
ggplot(df1,aes(x=date, y = value)) + geom_point() + scale_x_datetime(breaks = date_breaks("hour"),date_labels = "%Y-%m-%d %H") + theme(axis.text.x = element_text(angle = 45, hjust = 1))

```

![Kobito.prNSCq.png](https://qiita-image-store.s3.amazonaws.com/0/69266/731c71b6-ed4b-c22b-a290-cd3a1ad29f5d.png "Kobito.prNSCq.png")


## だめな例2

```R
# データを作る
df2 <- data.frame(date = c(as.POSIXct("2016-01-01 10:00:00", tz="Japan"),as.POSIXct("2016-01-02 6:00:00", tz="Japan"),as.POSIXct("2016-01-02 23:00:00", tz="Japan")),value = c(10,30,20))
 
# データを確認する
df2
                 date value
1 2016-01-01 10:00:00    10
2 2016-01-02 06:00:00    30
3 2016-01-02 23:00:00    20 

# ggplot
ggplot(df2,aes(x=date, y = value)) + geom_point() + scale_x_datetime(breaks = date_breaks("hour"),date_labels = "%Y-%m-%d %H") + theme(axis.text.x = element_text(angle = 45, hjust = 1))

```

![Kobito.BCqqR5.png](https://qiita-image-store.s3.amazonaws.com/0/69266/00793888-35aa-e12a-0335-0b2604fe5329.png "Kobito.BCqqR5.png")

## 良い例1

```R
ggplot(df1,aes(x=date, y = value)) + geom_point() + scale_x_datetime(breaks = date_breaks("hour"), labels = date_format("%Y-%m-%d %H")) + theme(axis.text.x = element_text(angle = 45, hjust = 1))
```

![Kobito.Hl9DMX.png](https://qiita-image-store.s3.amazonaws.com/0/69266/f26d942b-1974-390f-4482-3c4fc20b4009.png "Kobito.Hl9DMX.png")


## 良い例2

```R
ggplot(df2,aes(x=date, y = value)) + geom_point() + scale_x_datetime(breaks = date_breaks("hour"), labels = date_format("%Y-%m-%d %H", tz = "Asia/Tokyo")) + theme(axis.text.x = element_text(angle = 45, hjust = 1))
```

![Kobito.U6bvzj.png](https://qiita-image-store.s3.amazonaws.com/0/69266/eae5d991-d334-6ac9-9a7e-fa900ce82733.png "Kobito.U6bvzj.png")


## 参考
- [R: as.POSIXct timezone and scale_x_datetime issues in my dataset](http://stackoverflow.com/questions/36227130/r-as-posixct-timezone-and-scale-x-datetime-issues-in-my-dataset)
- [[R] タイムゾーン変換](http://ill-identified.hatenablog.com/entry/2015/01/13/211024)
- [R : POSIXctをas.Date() する時にtzを指定しない場合、POSIXctのタイムゾーンに何が設定されていてもUTCとみなして処理されているのでは?](http://shinya131-note.hatenablog.jp/entry/2015/12/08/200055)
整列（ソート）についてまとめてみた

# 整列（ソート）
## 整列とは？
-  データを大きい順、もしくは小さい順に並べる処理のこと
-  大きい順が降順、小さい順が昇順

## 選択法
- 先頭から順に一番大きい（小さい）数字を探していく
 - 入れたい順番から後の数字を毎回全て見ていく
 - 比較回数はn(n-1)/2

## 交換法（バブルソート）
- 隣り合わせのデータの大小を比較していく
 - 比較回数はn(n-1)/2

## 挿入法
- 整列済の部分に、整列していないデータを挿入する方法
 - 比較回数はn(n-1)/2

## シェルソート
- 挿入法を改良したもの
- 小さい数に分割して、挿入法を繰り返す
- 列を一定の間隔で分解し、小さな列をつくり、それぞれ列ごとに挿入法を行う

## ヒープ法
- ヒープ木を使った整列法

## クイックソート
- 基準値を決めて小さく分解して並べ替える
- 高速なソート

## マージソート
- 列を分割し、小さな列をつなぎあわせながらソートを行う
- 作業領域が必要
rails fragment caching

```bash
vagrant@precise64:~/data/cache$ grep -rn "tmp/cache" ../rails/
```

http://railscasts.com/episodes/90-fragment-caching

http://www.amooma.de/screencasts/2015-02-24-fragment-caching-rails-4.2/

http://www.xyzpub.com/en/ruby-on-rails/3.2/fragment_caching.html

http://railscasts.com/episodes/387-cache-digests
指定ディレクトリ以下のシンボリック一括削除

非常によく忘れるので備忘録。


シンボリック検索実行

``` bash
$ cd "検索対象ディレクトリ" 
$ find . -type l  
```

シンボリック一括削除

``` perl
$ find . -type l | perl -l0ne unlink
```

削除確認

``` bash
$ find . -type l  
```
Wayland の Client と Compositor の概念を理解する

# Wayland とは

一言で言えば「X11 に変わる次の Window System」でしょうか。

Wikipedia より引用します。

> 背景
Waylandのプロジェクトは、レッドハットの開発者Kristian Høgsbergが「全てのフレームがパーフェクトであること — 言いたいのは、画面の乱れや遅れや再描画やちらつきを二度と見ずに済むくらいにアプリケーションが描画を十分にコントロールできるようになること」を目標として開始した。
Waylandの開発にはX.orgの開発者が多数参加している。

Wayland アプリを

https://wayland.freedesktop.org/architecture.html
に習い、まずは Wayland より先に存在した X11 の Achitecture 図から見てみます。

# X11 Achitecture

![https://wayland.freedesktop.org/x-architecture.png](https://wayland.freedesktop.org/x-architecture.png)

簡単にイベント開始から描画までの流れを書くと、
①：kernel からイベントが来たら、 
②：X server がどの X Client (アプリ)にイベントを渡すか決め、イベントを渡し、
③：X Client はイベントに応じた処理を行い、その結果の描画更新要求を X server に行い、
④：X server は描画更新要求を受け取ると、 Compositor に渡し、
⑤：Compositor が(各アプリの描画内容や、各ウインドウの重なりを踏まえ)画面全体の描画更新を行い、
⑥：X server は Compositor から描画バッファをコピーし、 kernel に渡す

というわけで、つまりは X server が中央にいて、複雑かつ処理が冗長なのが
X11 の問題点でした。

# Wayland Achitecture

![wayland-architecture.png](https://qiita-image-store.s3.amazonaws.com/0/35514/5382f042-9400-b963-5c2b-f1335ac1018e.png)
https://wayland.freedesktop.org/x-architecture.png

対して Wayland では、
①：kernel がイベントを Wayland Compositor に渡し、(ここは X11 と似ている)
②：Wayland Compositor がイベント送付先 Wayland Client を賢く判断し
③：Wayland Client は描画更新要求を Compositor に行い、(ここも X11 と似ている)
④：Wayland Compositor は Wayland Client から描画要求を受け取ったら画面を Composite (合成)し、ダイレクトに Kernel に描画要求

します。シンプルですね。

# サンプルソース

実際に動かしてみます。

https://github.com/eyelash/tutorials/blob/master/wayland-egl.c
こちらの方のソースを引用します。
Wayland と EGL を使用している、かつソースが短くて良いですね。


# ビルドと実行

環境は `ubuntu` です。

```console
$ gcc -o wayland-egl wayland-egl.c -lwayland-client -lwayland-egl -lEGL -lGL
$ weston  // Weston Compositor がインストール済であること
$ wayland-egl
```

![Screenshotfrom2016-04-22090443.png](https://qiita-image-store.s3.amazonaws.com/0/35514/1fbd4b23-f96d-8647-07ee-fe538bc8cf44.png)




# 参考
Wayland https://wayland.freedesktop.org/
Waylandプログラミング入門 http://d.hatena.ne.jp/devm33/20140422/1398182440
UINavigationBarをスクロール時にサクッと隠す その２


画面上で、スワイプやタップをしたいときにnavigatonbarを非表示にするには、以下の設定のみで簡単にできちゃいます。

```swift
// スワイプをしたときにnavigatonbarを消したいとき
self.navigationController?.hidesBarsOnSwipe = true
// タップをしたときにnavigatonbarを消したいとき
self.navigationController?.hidesBarsOnTap = true
```

この設定では、画面上に表示されているtoolbarも同時に消えてくれるので、簡単にSafariっぽい動作を再現できます。

ただし、TabBarは上記の設定のようにジェスチャーで消すことはできないみたいなので、
[UITabBarとUINavigationBarをスクロール時にサクッと隠す](http://qiita.com/homyu/items/db22be23f7a7bee8d9c0)
みたいにゴリゴリ実装する必要があります。
Oracle R Enterprise経由で主キーになる列がないcsvファイルをデータベースにロードする方法

##IDのないデータフレームをOREでロードする

Rで使うデータフレームもベクトルの組のため、順列を明確に持ったものです。ただデータベースの表は集合のため、順列に通常意味をなしません。
Oracle R Enterpriseでは、データベースのテーブルをdata.frameライクのore.frameとして扱います。その際に、ore.frameで出力される値が不確定の場合には、デフォルトではエラーが出ます。また、このエラーが出る状態では、predict関数などをore.frameの状態では使えないなど、インデータベースのよさが消えてしまいます。

エラーを出さないようにするには、ore.frameのデータが前列に対してソートされていること、主キーが定義されていること、一意のrow.namesを持つことの条件のいずれかを満たす必要性があります。

主キーがある場合には特に問題になりませんが、主キーとなるようなデータがロード元のCSVファイルなどにない場合に、その後主キーを決めずにore.frame順序問題を回避するtipsを下記に記します。

2008.csvというcsvファイルをRで読込みore.createを使用してAIR2008というテーブルを作成します。

```r:OracleREnterprise1.5
df <- read.table("2008.csv",header=T,sep=",")
ore.create(cbind(ID = 1:nrow(df),df),table ="AIR2008")
```

ポイントとしては、ore.createする際に、cbind(ID=1:nrow(df),df)とすることによって、dfに1から順に始める連番を付けることができ、それをIDとしてAIR2008テーブル作成の段階で元のCSVファイルに対して追加しています。このままでは、まだエラーが出続けるので、OREと同期後、row.namesにID列を登録します。一意の列があるデータフレームのロードの場合には、その列名をrow.namesに登録しても大丈夫です。

```r:OracleREnterprise1.5
ore.sync()
ore.attach()
row.names(AIR2008) <- AIR2008$ID
head(AIR2008)
```

以上がID列がないCSVファイルをORE経由でデータベースにロードする方法です。
ただし、あくまでのOREオブジェクトとして、row.namesが保存されているため、ore.saveで保存しないとセッションが切れるたびにrow.namesはnullになってしまうことに注意が必要です。
how ruby-china cache assets

https://github.com/ruby-china/ruby-china/blob/master/config/application.rb#L70

https://github.com/ruby-china/ruby-china/blob/master/app/helpers/application_helper.rb#L112-L116

https://github.com/ruby-china/ruby-china/blob/master/app/helpers/application_helper.rb#L130-L134

https://github.com/ruby-china/ruby-china/blob/master/app/helpers/application_helper.rb#L118-L122

https://github.com/ruby-china/ruby-china/blob/master/app/helpers/application_helper.rb#L124-L128
Ostro OS on Virtualbox を動かす


# Ostro OS とは

> Welcome to the Ostro™ Project! It is an open source developed, Linux*-based operating system tailored for IoT smart devices and built with security in mind.

IoT 用のオープンソースの Linux ベース OS、とのことです。

## ターゲット
[OstroOS FAQ](https://ostroproject.org/faq) 曰く、
> What product industries will Ostro Project support?
Some examples are :
Entertainment
Industrial and Military
Office/ Office Productivity
Medical / Health Care
Automative

エンターテイメント、産業用、オフィス、医療、自動車、向けに開発していくとのことです。

# Ostro OS Supported Platforms

[Ostro OS Supported Platforms](https://ostroproject.org/documentation/quick_start/platforms.html) 曰く、
> GigaByte GB-BXBT-3825
Intel Galileo Gen2
MinnowBoard Turbot
Intel Edison
BeagleBone Black
VirtualBox

Galileo, Edison あたりに入れて見たくなりますね。

# 環境

Ubuntu 14.04
VirtualBox 5

# OS image 取得

https://download.ostroproject.org/releases/ostro-os/milestone/2016-03-02_09-51-12-build-399/
ここから
ostro-image-dev-intel-corei7-64
のリンクをクリックしてダウンロードします。

ostro-image-dev-intel-corei7-64-2016-03-02_09-51-12-build-399.dsk.xz
を解凍して、
OS image 
ostro-image-dev-intel-corei7-64-2016-03-02_09-51-12-build-399.dsk
を入手します。

# 実行

VirtualBox に OS image を import します。

# スクリーンショット

![login.png](https://qiita-image-store.s3.amazonaws.com/0/35514/97bd79eb-e795-e56a-f0b9-f902c8a176d5.png)
残念ながら、コンソール画面しか確認出来ませんでした。

ヘッダ類はこちら。
![header.png](https://qiita-image-store.s3.amazonaws.com/0/35514/0c9393fa-3220-d9b7-bd8f-aea2a07520c2.png)

# まとめ

Ostro OS は IoT 用のオープンソースの Linux ベース OS、とのことでした。
現時点では発展途上感がありますが、今後はどうなっていくのでしょうか。

# 参考

Ostro official site: https://ostroproject.org/
Booting and Installing an Ostro OS Image: https://ostroproject.org/documentation/howtos/booting-and-installation.html

https://ostroproject.org/documentation/quick_start/platforms.html
Mavenメモ3 dependencyの書き方

Mavenでは、dependencyにより依存性を管理している。

依存性の管理とは、そのプロジェクとに必要なパッケージやバージョン等の情報をPomで一元的に管理することである。

dependency要素には、次の要素がある。


      <groupId>: プロジェクトを一意に識別する名前
      <artifactId>: プロジェクトの成果物名
      <version>: パッケージのバージョン
      <scope>: パッケージをクラスパスに追加するタイミング

また、scope要素で指定するタイミングは、下記のパターンがある。

      compile: 全てのタイミングで、クラスパスに追加する。
      privided: コンパイル時に、クラスパスに追加する。(実行時は、ライブラリがJDKやコンテナから提供される。デプロイ時には含めない。)
      runtime: java実行時に、クラスパスに追加する。(コンパイル時は不要。実行時に必要。JDBCドライバや、logback等、実行時のクラスパスにより挙動が変化する)
      test: testディレクトリのコンパイルと実行時に、クラスパスに追加する。
      system: 明示的にクラスパスを指定(タイミングと関係ない？？あまり使われない)

ちょっとMavenが手強くなってきた。
 

◆進捗
Maven | TECHSCORE(テックスコア)の
「3.1. 依存性について」まで完了

◆参考サイト
・Maven | TECHSCORE(テックスコア)
http://www.techscore.com/tech/Java/ApacheJakarta/Maven/index/
rails model cache

http://robbinfan.com/blog/33/activerecord-object-cache

http://railscasts.com/episodes/115-model-caching-revised?view=comments

http://railscasts.com/episodes/368-miniprofiler

ruby-china 源码里面有很多这种cache 还有view层面的cache

```bash
grep -rn "Rails.cache.fetch" ../ruby-china/
```

https://github.com/ruby-china/ruby-china/blob/master/app/models/reply.rb#L13

https://github.com/ruby-china/ruby-china/blob/master/app/models/topic.rb#L28

https://github.com/ruby-china/ruby-china/blob/master/app/models/topic.rb#L195-L199
ある独自ドメインのメールアドレスがGoogle Appsを使っているかどうかを判定する


# 概要

最近のWebサービスの新規会員登録画面には「Googleアカウントで会員登録する」ボタンが付いていることがよくあると思います。
それに関連して、例えば『フォームに入力されたメールアドレスがGoogleアカウントに対応していたら「Googleアカウントで会員登録する」ボタンを会員登録画面に表示させたい』といったニーズがたまにあります。

フォーム入力されたメールアドレスが「someone@gmail.com」などgmail.comドメインのメールアドレスであれば、その人は「Googleで会員登録する」が使えると言うことがプログラム的に判定できます。
しかし、[Google Apps for Work](https://apps.google.co.jp/)を使っていると、独自ドメインのメールアドレスの裏側にGMailが居たりするので、単純にメールアドレスのドメイン部分だけを見ただけでは、その人に対して「Googleで会員登録する」機能が利用できるかどうかをプログラム的には判定できません。
なんとかして、入力されたメールアドレスでGoogle Appsが使われているかを判定する方法がありましたので以下に記述します。


# 判定方法

判定方法として2つの方法があります。1つめの方法は確実ですが、2つめの方法は判定が上手くいかないケースがあります。

## 方法１

下記URLに対して、curlなどでリクエストを投げます。

https://www.google.com/a/{domain}/ServiceLogin?hl=ja
*※{domain}部分はメールアドレスのドメイン名部分に置き換える*

`{domain}`で**Google Appsを利用していない**場合、上記URLのレスポンスには必ず「Google Apps を使用していないドメインのログイン ページにアクセスしました。」という文言が含まれます。なので、**その文言が入っていなければ、そのメールアドレスはGoogle Appsを使って運用されている**、ということが分かります。
![non-google-apps-domain.png](https://qiita-image-store.s3.amazonaws.com/0/10682/0a90fe49-b932-4308-8902-e61e24f4702c.png)

この検出方法の元ネタはStack　Overflowにあります。 
[Programmatically assessing if a domain has Google Apps or not](http://stackoverflow.com/a/17984530)


## 方法2

メールアドレスのドメインのMXレコードを引き、MXレコードに「aspmx.l.google.com」などGoogle Appsのサーバーが入っているかどうかを調べるという方法です。
一般的に、Google Appsを利用していると下記のようなMXレコードが返ってきますので、このようなMXレコードが設定されているならGoogle Appsを利用しているに違いないと考えられます。

```bash
$ dig example.com MX

; <<>> DiG 9.8.3-P1 <<>> example.com MX
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 19847
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;example.com.			IN	MX

;; ANSWER SECTION:
example.com.		299	IN	MX	1 aspmx.l.google.com.
example.com.		299	IN	MX	5 alt1.aspmx.l.google.com.
example.com.		299	IN	MX	5 alt2.aspmx.l.google.com.
example.com.		299	IN	MX	10 aspmx2.googlemail.com.

;; Query time: 50 msec
;; SERVER: 192.168.251.1#53(192.168.251.1)
;; WHEN: Mon Jul  4 21:28:34 2016
;; MSG SIZE  rcvd: 137
```

しかし、MXレコードに直接Google Appsのサーバーが設定されていないケース（メールをGoogle Appsに渡す前にウイルスチェックサーバーを経由させる設定をしている場合など）は、この方法は上手く動きませんので注意が必要です。
libgdx と RoboVM の fork で Java を iOS で動かす

[libgdx](https://libgdx.badlogicgames.com/) を使ってみたログ

環境

1. Mac OS X 10.11.5 (英語)
2. Android Studio 2.1.2
3. Oracle JDK 1.8.0_91
4. Xcode 7.3.1

手順

1. https://libgdx.badlogicgames.com/download.html から gdx-setup.jar をダウンロード
2. ```java -jar gdx-setup.jar``` でプロジェクト作成ウィザードを実行
3. Android SDK へのパスを指定、Desktop と Html を OFF
![tmp.png](https://qiita-image-store.s3.amazonaws.com/0/131106/321175cb-3306-f4df-5cf4-45fe6327294f.png)
4. Advanced ボタンを押して IDEA を ON
![Screen Shot 2016-07-04 at 19.24.44.png](https://qiita-image-store.s3.amazonaws.com/0/131106/2ee3fe8d-06df-0d51-468a-93e554a283bb.png)
5. Save して Generate
6. Android のビルドツールが新しいすぎる警告が出るが、無視して Yes
![Screen Shot 2016-07-04 at 19.25.22.png](https://qiita-image-store.s3.amazonaws.com/0/131106/a5788124-9577-0bac-307b-a0f2d2b28d4d.png)
7. Android API が新しいすぎる警告が出るが、無視して Yes
![Screen Shot 2016-07-04 at 19.26.28.png](https://qiita-image-store.s3.amazonaws.com/0/131106/74b71c9b-b9f1-cde7-94ab-8b2209c80da4.png)
8. libgdx-1.9.3, robovm-2.1.0, gradle-2.10 などがインストールされた
9. Android Studio の Import project で生成された build.gradle を選択
10. gradle plugin が古いと言われるので Update
![Untitled.png](https://qiita-image-store.s3.amazonaws.com/0/131106/d414f11a-1c88-0707-a09d-7f25ee1d6658.png)
11. これで普通に Android 実機でもエミュレーターでも Run できる
12. iOS で Run するためには RoboVM Intellij IDEA Plugin が必要
13. http://robovm.mobidevelop.com/downloads/releases/idea/ から org.robovm.idea-2.1.0-plugin-dist.jar をダウンロードして
14. Preferences の Plugins の Install plugin from disk でダウンロードした jar を選択して OK
![Untitled.png](https://qiita-image-store.s3.amazonaws.com/0/131106/25523e1f-fc04-1300-4d66-b675c7f9f9c5.png)
15. Restart する
![Untitled.png](https://qiita-image-store.s3.amazonaws.com/0/131106/a876f17b-5da0-5ced-056f-d5921929fb5f.png)

16. JDK が古いとエラーが出るが [JDK 8](http://qiita.com/ken1ma/items/bf38a86730bdf6f10a1d) なら OK
![Screen Shot 2016-07-04 at 19.56.08.png](https://qiita-image-store.s3.amazonaws.com/0/131106/40a700ea-5023-63d9-2bc2-665c803a100e.png)
    1. このエラーが出てしまったら Preferences の Plugins で RoboVM Intellij IDEA Plugin を有効にし直す
17. Run メニューの Edit Configurations... で「 + 」からRoboVM iOS を選択
![Untitled.png](https://qiita-image-store.s3.amazonaws.com/0/131106/e29e43a1-e3f2-d53a-0025-566675fc5137.png)
18. iOS の Configuration が出来上がる
![Untitled.png](https://qiita-image-store.s3.amazonaws.com/0/131106/127d3ac6-8173-4c70-efa6-939401b675c8.png)
19. そのまま Run すると Simulator で動く（何故か Window が前面に出てこなかったけど）
20. Attached Device を選んだら iPhone 実機でも動いた
    1. Apple Worldwide Developer Relations Certification Authority 証明書が有効期限切れで ```No signing identity found matching '/(?i)iPhone Developer|iOS Development/'``` エラーが出た。
        1. Utilities の Keychain Access で iPhone Developer の証明書を見ると ```This certificate has an invalid issuer``` エラーが出てる
        2. https://www.apple.com/certificateauthority/ から WWDR Certificate (Expiring 02/07/23) をダウンロードして Utilities の Keychain Access の System にドラッグ＆ドロップしたら直った
    1. ```No provisioning profile found ... app bundle ID``` エラーが出たので Xcode で provisioning profile を作り、その名前を ios/robovm.properties の app.id に書いた
eslintで任意のディレクトリ、ファイルをチェック対象から除外する方法

JSのeslintで一部のファイルのみバリデートから除外したい場合は、.eslintignoreファイルを用意し、そこに任意のディレクトリないしファイル名を書けば対象外にしてくれるっぽい。
Gitでいう.gitignoreとほぼ同じ。

#どんなとき役に立つか
__外部ライブラリ、他人が書いた手がつけられないファイル__ を含むとき。
ここまでlintのチェックが入るとエラーだらけになってしまうので、.eslintignoreは積極的に使っていこう。

#例

```
src/lib/*
**/*.js
foo.js
```

#備考

+ .eslintと同じ階層に置いたほうがいいっぽい
+ その他何か設定する必要はなく、.eslintignoreを置いておけばlint時に勝手に動いてくれるっぽい。

#参考URL

http://eslint.org/docs/user-guide/configuring

↑”Ignoring Files and Directories”の部分

https://github.com/eslint/eslint/blob/master/.eslintignore
オフラインリアルタイムどう書くE05 Ruby で解く

当日不参加でした。ので久々のオンラインノンリアルタイムどう書く。

湯上りにプレッシャーのない状況も手伝って 23 分で書けました。
珍しく最初に思いついたものをそのままコードにできて、珍しくつまずきなく全入力がパスしました。

- 問題はこちら: http://nabetani.sakura.ne.jp/hena/orde05dokitruck/
- みなさんの回答へのリンクはこちら: http://qiita.com/Nabetani/items/c516875b13a4d282affe

```ruby:orde05dokitruck.rb
def move((a, b, c) , no)
  case no
  when '1' then [a, (a | b), (b | c)]
  when '2' then [a, (b | c), (a | c)]
  when '3' then [(a | b), b, (a | c)]
  when '4' then [(a | b), (b | c), c]
  when '5' then [(a | c), b, (b | c)]
  when '6' then [(a | c), (a | b), c]
  when '7' then [a, [], c]
  when '8' then [[], b, c]
  when '9' then [a, b, []]
  end
end

def solve(input)
  result = input.chars.reduce([['a'], ['b'], ['c']]) {|course, c| move(course, c) }.reduce(:|).sort

  if result.empty?
    '-'
  else
    result.join
  end
end

DATA.each do |line|
  input, expected = line.split
  actual = solve(input)
  if actual == expected
    print '.'
  else
    puts(<<~EOS)

      input:    #{input}
      expected: #{expected}
      actual:   #{actual}
    EOS
  end
end

puts

__END__
1728398 bc
789 -
274 ac
185 abc
396 ab
1278 abc
7659832 a
178 bc
189 ab
197 a
278 ac
289 bc
297 a
378 ac
389 b
397 ab
478 c
489 bc
497 ab
578 bc
589 b
597 ac
678 c
689 ab
697 ac
899 b
7172 ac
54787 bc
83713 bc
149978 -
159735 abc
1449467 abc
9862916 b
96112873 ab
311536789 -
281787212994 abc
697535114542 ac
```
ssh接続しようとしてconnection refused出てきた

ターミナルでSSH接続を試みようと

```:command
ssh root@192.16.2.1
```

で入ろうとしたら

```:command
ssh: connect to host 192.16.2.1 port 22: connection refused
```

と断られた...

さくらのVPSの場合稼働してから接続するには少し時間がかかるらしい...

少し経つと接続出来ました！
HCD-Net 	70デザイン項目基礎講座 参加メモ


[HCD-Net](http://www.hcdnet.org/) (人間中心設計推進機構)のセミナー「70デザイン項目基礎講座」に参加してきました．

# 概要
開催日：2016年7月4日(月)
講師：山岡俊樹氏（京都女子大学 教授）
HCD-Netとは：人間中心設計(HCD)に関する研究，教育，広報などを行っているNPO法人で，人間中心設計専門家の認定をしていたりする団体．

# 70デザイン項目
## 70デザイン項目とは

70デザイン項目とは，山岡教授が提唱しているデザインや仕様を決めるために検討すべきスペックで，下記の項目がある．
マーケティング・リサーチ，人間工学，認知科学，工業デザイン，ユーザビリティ工学，統計（多変量解析）などの観点を統合し，従来，直感に頼っていた製品開発のプロセスをできるだけ定量的な視点で見直して検討漏れがないようにするためのもの．

1. ユーザインタフェース関係 ：29項目
2. 感性デザイン関係 ：9項目
3. ユニバーサルデザイン関係 ：9項目
4. 安全性関係（PL）関係 ：6項目
5. ロバスト(頑強性)デザイン関係 ：5項目
6. メンテナンス（保守性）関係 ：2項目
7. エコロジーデザイン関係 ：5項目
8. その他・ヒューマン・マシン・インタフェース関係項目（5デザイン項目）

以下，分類ごとに項目を書いておきます．
各項目の内容は，項目名から思い描く内容で大体合っている感じです．

### ユーザインタフェースデザイン関連 ：29項目
#### ユーザにとって良いUIシステムの構築 
1. 寛容性・柔軟性
2. 習熟度対応
3. ユーザの保護
4. ユニバーサルデザイン
5. 異文化対応

#### ユーザのやる気の醸成
6. 楽しさ
7. 達成感
8. ユーザの主体性の確保
9. 信頼感

#### 効率の良い情報入手
10. 手がかり
11. 簡潔性
12. 検索容易性
13. 一覧性
14. マッピング
15. 識別性

#### 理解・判断の容易化
16. 一貫性
17. メンタルモデル
18. 情報の多面的提供
19. 適切な用語・メッセージ
20. 記憶負担の軽減

#### 快適な操作
21. 身体的負担の軽減
22. 操作感
23. 操作の効率

#### 共通手段
24. 強調
25. アフォーダンス
26. メタファ
27. 動作原理
28. フィードバック
29. ヘルプ

### ユニバーサルデザイン関連 ：9項目
1. 調節
2. 冗長度
3. 仕様、機能が見える
4. フィードバック
5. エラーに対して寛容
6. 情報の入手
7. 情報の理解・判断
8. 操作
9. 情報や操作の連続性

### 感性設計関連 ：9項目
1. デザインイメージ
2. 色彩
3. フィット性
4. 形態
5. 機能性・利便性
6. 雰囲気
7. 新しい組み合わせ
8. 質感
9. 意外性

### メンテナンス（保守性）関連 ：2項目
1. 近接性の確保
2. 修復性の確保

### 安全性（PL）関連 ：6項目
1. 危険の除去
2. フール・プルーフ(fool proof)設計
3. タンパー・プルーフ(tamper proof)設計
4. 保護装置(危険隔離)
5. インターロック機能
6. 警告表示

### エコロジーデザイン関連 ：5項目
1. 耐久性があること
2. リサイクリングが可能
3. 材料を少なくする
4. 最適な材料の選定
5. フレキシビリティのある設計（部品の交換など）

### ロバスト(頑強性)デザイン関連 ：5項目
1. 材料を変える
2. 形状に配慮する
3. 構造を検討する
4. 応力に対し逃げのデザインをする
5. ユーザの無意識な行動に対応したデザインにする

### その他・ヒューマン・マシン・インタフェース関係項目：5項目
1. 身体的側面：(a)位置関係，(b)力学的側面，(c)接触面
2. 頭脳的（情報的）側面：(a)メンタルモデル，(b)わかりやすさ，(c)見やすさ
3. 時間的側面：(a)作業時間，(b)休息時間，(c)反応時間
4. 環境的側面：(a)気候，(b)照明，(c)騒音，振動，臭気
5. 運用的側面：(a)方針の明確化，(b)情報の共有化，(c)自律的行動の確立

# まとめ
新しいHCDの視点や考え方を提供するものではなく，チェックリスト化することで，観察や設計をする際の抜け漏れや失敗を防ぐためのもの，という位置づけのものです．
対象とする製品は，アプリケーションやサービスというよりは電化製品・電子機器が主眼にあるのだろうな，という感じ．
もちろん，アプリやサービスをデザインする時にも使える内容も多い．
でも基点にするガイドには，私は別のものを使うかな…．

# 関連情報
[第13回　70デザイン項目を活用してシステム、製品の使用実態や問題点を探る(1)  | 行動観察研究所ブログ | 行動観察研究所](http://www.kansatsu.jp/blog/detail/15)
[第14回　70デザイン項目を活用してシステム、製品の使用実態や問題点を探る(2)  | 行動観察研究所ブログ | 行動観察研究所](http://www.kansatsu.jp/blog/detail/16)
[第15回　70デザイン項目を活用してシステム、製品の使用実態や問題点を探る(3)  | 行動観察研究所ブログ | 行動観察研究所](http://www.kansatsu.jp/blog/detail/17)
[第16回　70デザイン項目を活用してシステム、製品の使用実態や問題点を探る(4)  | 行動観察研究所ブログ | 行動観察研究所](http://www.kansatsu.jp/blog/detail/18)
[第17回　70デザイン項目を活用してシステム、製品の使用実態や問題点を探る(5)  | 行動観察研究所ブログ | 行動観察研究所](http://www.kansatsu.jp/blog/detail/19)
[第18回　70デザイン項目を活用してシステム、製品の使用実態や問題点を探る(6)  | 行動観察研究所ブログ | 行動観察研究所](http://www.kansatsu.jp/blog/detail/20)
[第19回　70デザイン項目を活用してシステム、製品の使用実態や問題点を探る(7)  | 行動観察研究所ブログ | 行動観察研究所](http://www.kansatsu.jp/blog/detail/21)
Djangoでテストデータを作成するときはsetUpTestDataを使う

# setUpでテストデータを作成すると

```py3:test_data.py
from test.common_data import UserFactory


class Test(TestCase):

    def setUp(self):
        self.user = UserFactory.create()

    def test_1(self):
        print(self.user.pk) # 1

    def test_2(self):
        print(self.user.pk) # 2
         
```

クラス内のメソッドの数だけデータを作成してしまう。

# setUpTestDataを使う

```py3:test_data.py
from test.common_data import UserFactory


class Test(TestCase):

    @classmethod
    def setUpTestData(cls):
        cls.user = UserFactory.create()

    def test_1(self):
        print(self.user.pk) # 1

    def test_2(self):
        print(self.user.pk) # 1
         
```

うれしい！！！

# 参考
How to optimize Django unit tests with setUpTestData
http://makina-corpus.com/blog/metier/2015/how-to-optimize-django-unit-tests-with-setuptestdata
array_mergeが上手く動かない

```php
<?php
$array1 = array();
$array2 = array(1 => "data");
$result = array_merge($array1, $array2);
?>
```

数値添字が振りなおされることに注意!

```php
Array
(
    [0] => data
)
```

```php
$result = $array1 + $array2;
```

とすれば想定通り動く


http://php.net/manual/ja/function.array-merge.php
バイトコード検証機能について


[参照](https://www.jpcert.or.jp/java-rules/env04-j.html)


JavaVMには<Font color="red">バイトコード検証器(Java bytecode verifier)</font>と呼ばれるクラスファイルが正しく作成されたものか判断する機構が備わっている

# 検査する内容
バイトコード検証機能は[オペランドスタック](https://ja.wikipedia.org/wiki/オペランドスタック)の挙動が意図した挙動を示すかチェックを行う

- オペランドスタックに積まれた命令がすべて正しく取り出されているか
	- push/popが同じ回数呼び出されているかチェックする。
	- pushを5回/popを8回行うとスタックアンダーフローが発生する
- オペランドスタックに積まれた値がpush時とpop時で同じ型を表しているか
	- 一部の捜査では異なる型のpush/popを許可しているが原則禁止


# [バイトコード検証機能の有効/無効](http://www.ibm.com/support/knowledgecenter/ja/SSYKE2_7.0.0/com.ibm.java.lnx.70.doc/diag/appendixes/cmdline/Xverify.html)
デフォルトではバイトコード検証機能は有効になっている
下記のオプションで有効範囲を選択可能


ネットワーク経由でロードされたクラスに対して検証を行う

```
java -Xverify:remote ApplicationName
```

無効にする場合

```
java -Xverify:none ApplicationName
```

全てのクラスを強制検査する場合

```
java -Xverify:all ApplicationName
```

## Androidの場合

adbを利用する場合

有効にする場合

```
adb shell setprop dalvik.vm.dexopt-flags v=a
```

無効にする場合

```
adb shell setprop dalvik.vm.dexopt-flags v=n
```

dalvikVMもjavaVM同様Xverifyオプションで有効/無効が設定可能
【機械学習】ニューラルネットワークにおける効率的なパラメータ調整方法についてまとめてみた

# はじめに
　ニューラルネットワークの実装を考えたことがある方なら、聞いたことがあるかもしれません。ニューラルネットワーク（以下NN）のモデリングの完成には、職人芸的処置が必要だと。具体的には、モデル化においてたくさん出てくるパラメータをどう設定するかという点です。
　本記事では、NNにおけるパラメータの効率的な調整手順をまとめてみました。NNの理論については、ここで触れないので、各自お調べください。


# 概観
　まず、留意していただきたい点が一つあります。それは、

**「最適なパラメータをすぐに決められる一発公式のようなものはない」**
ということです。

実際に、多くの研究者が論文において、自身のモデルに特有なパラメータ設定をしています。
この問題に対して、神の一手(a priori)をゲットするのは、難しいでしょう。

したがって、**自身の経験と探索的アプローチ**の積極的活用がパラメータ設定の基本戦略になります。

# 探索フロー
ここでは、NNの代表的パラメータである次の4つに触れます。
①**学習係数$\eta$**
②**L2正則化項$\lambda$**
③**隠れ層の次元(ユニット数)**
④**ミニバッチ数**

まず、全体図を示します。

![151204140109_1.JPG](https://qiita-image-store.s3.amazonaws.com/0/127228/7e309515-8eda-9fa6-acb3-44eb43756410.jpeg)
（※上図、L2正則化項の記号は$\lambda$です。誤りのお詫びを申し上げます。）

　パラメータの設定でポイントとなるのが、できるだけ効率的な時間の使い方でQualityのバランスの取れたパラメータセットをみつける、という点です。

## ①学習係数η
　ポイントは、**オーダー(桁数)感覚**です。まず、一般的な数字(0.01とか)からスタートし、桁数を大きくしていきます。
#### 0.01 -> 0.1 -> 1
こんな感じです。
悪化していくようであれば、小さくしていきます。
最適な桁数を発見したのち、有効数字2桁圏内で、最もパフォーマンスのよい数値を決めます。
アウトプットイメージ： $\eta=0.025$

## ②L2正則化項λ
まずは、「正則化項が**ない**状態$\lambda=0$」で$\eta$を決定し、「**ある**状態$\lambda=1$」から②の探索をスタートします。手順としては①と同じように、桁数→詳細の流れで絞り込みます。

## ③中間層(隠れ層)の次元(ユニット数)
　①、②を決めてから探索します。極端なところで、**次元数1から**スタートして、アウトプットを見てみます。これは、徐々に大きくしていくアプローチがいいです。次元数によって、計算コストが変わるからです。
　中間層の次元については、以下のStackOverflowでの議論が実践的でした。参考になります。
http://goo.gl/AM34f6
　大略を掴む上では、**(入力層 + 出力層) x 2/3**のユニット数が適切という基準があります。しかし、これは特徴ベクトルの複雑さ、データのノイズ、訓練データ数といった背景を無視しているため、最適になるとは限りません。
　結局のところ、「**探索的最適化**」が実践解の中では、より厳密であると言えます。この説の背景には、**未適合**(under fitting)と**過適合**(over fitting)があります(下図)。ユニット数が小さいときは、未適合のため学習精度が悪く、ユニット数が増えると、過適合のため、テスト精度が悪くなります。
　したがって、この中間の最適な場所が、決めるべきユニット数になります。

![151221163402_2.JPG](https://qiita-image-store.s3.amazonaws.com/0/127228/cc2e4542-b879-8567-bcf2-83c1238abcb8.jpeg)


　複数層あるときは、はじめに1層目の最適化からトライします。このとき、2層目以降のユニット数は、1層目のそれに近づけておきましょう(それか同値)。
　加えて、個人的には、SEM（共分散構造分析）様のくくり方がヒントになるという仮説を持っています。SEM起因で近しい次元を集約します。さらに、One-hotベクトルなどで膨張した次元を集約します。その上で、決定した次元数を中間層の初期設定に置きます。

## ④ミニバッチ数
　これは、結構特殊な立ち位置にあります。調整の目的は、計算スピードと精度のバランスですが、$\eta$や$\lambda$と相互作用を起こしません。
　したがって、①~③ののちに、別途調整します。最小の勾配(取りこぼしのない)バッチ数1から始めて、徐々に規模を大きくしていきます。

# 参考文献

(1)[Efficient BackProp](http://goo.gl/NvRY0T)
少し古いですが、誤差逆伝播法適用時の効果的なパラメータ設定について触れられています。

(2)[Random search for hyper-parameter optimization](http://goo.gl/FNkc03)
Grid Search法というテクニックを提案しています。
パラメータを変数とみて、各軸の格子(Grid)を考えます。
格子探索から、最良のパラメータを見つけるというアプローチです。
(パラメータ数が増えるほど探索コストが爆増するので(次元の呪い)、Rondom searchとの併用を勧めています。)

(3)[Practical Bayesian optimization of machine learning algorithms](http://goo.gl/chYDBK)
パラメータ決定について、ベイズ推計を応用しました。
Visual C++でDLLを作ってC++Builderで読み込む（動的に読み込み）

表題の通り、VC++でDLL作ってC++Builderで読み込ませる、出来るだけシンプルな方法のメモ。
##Visual C++側

新規作成->プロジェクト
![paint01.png](https://qiita-image-store.s3.amazonaws.com/0/76058/82fcd40c-0be8-bf08-f014-d8fd89e01865.png)
テンプレート->Visual C++->空のプロジェクト

プロジェクト->[プロジェクト名]のプロパティ

構成プロパティ->全般->プロジェクトの既定値->構成の種類
を[ダイナミック ライブラリ (.dll)]に変更
![paint02_2.png](https://qiita-image-store.s3.amazonaws.com/0/76058/c3b196d3-d902-2cfa-3ea8-99275533a31a.png)

クラスを追加
![paint02.png](https://qiita-image-store.s3.amazonaws.com/0/76058/53491685-f653-e2ca-e1ad-20f461eba100.png)

```cpp:TestClass.h
class TestClass
{
public:
	TestClass();
	~TestClass();
	int Data();
};

///C++ではなくCとして関数を作って、内部でクラスの処理を作っておく。
/// extern "C" __declspec(dllexport) 返り値 __stdcall 関数名(引数) {
/// ※__stdcallは入れておくこと。
extern "C" __declspec(dllexport) int __stdcall GetClassInstance() {
	int val;
	TestClass *test = new TestClass();
	val = test->Data();
	delete test;
	return val;
}
```

```cpp:TestClass.cpp
#include "TestClass.h"
TestClass::TestClass()
{
}
TestClass::~TestClass()
{
}
int TestClass::Data(){
	return 255;
}
```

ビルド->ソリューションのビルドで出力
##C++ Builder
適当にプロジェクトを作って、
プロジェクト -> オプション
ビルドイベント -> ビルド前イベント -> コマンド
に

```bat:TestDll.dllという名前の場合
copy /y "[VC++DLLの出力先]TestDll.dll" "$(OUTPUTDIR)TestDll.dll"
```

を追加して、C++Builderでビルド前にコピーをしてくる。

```cpp:Unit.cpp
///出力にCodeSiteを使用。
void __fastcall Test(){
	HMODULE dll = LoadLibrary(L"TestDll.dll");///ファイル名
	if (dll == NULL) {
		CodeSite->Send("DLLの読み込みに失敗しました。");
		return;
	}
	typedef int (*TAddProc)();///typedef 返り値 (*関数ポインタ名)(引数);

///関数の名前はstdcallの場合
/// _関数名@引数のバイト数
///と入力する。
///分からなかったらDLLファイルをDependency Walkerというツールで読み込ませて調べられる
///http://www.dependencywalker.com
///https://msdn.microsoft.com/ja-jp/library/zxk0tw93.aspx
	FARPROC proc = GetProcAddress(dll, "_GetClassInstance@0");
	if (proc == NULL) {
		CodeSite->Send("関数のアドレスの取得に失敗しました。");
		return;
	}

	TAddProc hoge = reinterpret_cast<TAddProc>(proc);
	CodeSite->Send(hoge());
	FreeLibrary(dll);
}
```

>参考
>http://www.gesource.jp/programming/bcb/dll/03.html
CentOS7でrbenvを利用してrubyを入れる

# TL;DR

CentOS 7でrbenvを使う
rbenv installを一発で通すための必要パッケージを入れる。
ruby最新版を入れる

# install required packages

```shell-session
sudo yum install gcc
sudo yum install make

sudo yum install -y bison
sudo yum install -y autoconf

sudo yum search yaml
sudo yum install -y libyaml-devel

sudo yum search readline
sudo yum install -y readline-devel

sudo yum search gdbm
sudo yum install -y gdbm-devel

sudo yum search ffi
sudo yum install -y libffi-devel

sudo yum search zlib
sudo yum install -y zlib-devel

sudo yum search ssl
sudo yum install -y openssl-libs
sudo yum install -y openssl-devel
```

# install rbenv

```shell-session
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
cd ~/.rbenv && src/configure && make -C src

type rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile

cd ../

exec -l $SHELL
```

# install ruby-build

```shell-session
git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
```

# install ruby

```shell-session
rbenv install -l

rbenv install 2.3.1 -v
```

# set default ruby version

```shell-session
rbenv global 2.3.1

ruby -v
# => ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-linux]
```
GitHubを中心とした開発プロセス 満足していないこと


[GitHubを中心とした開発プロセス](http://qiita.com/suzuki-hoge/items/a6e3bdc2cc1cf4e98ea1)の満足していないこと編です
要はおまけです

## 予定管理
打ち合わせ系Issueの日程を一覧で見たい

ZenHubを使ってIssueをストーリとしていると

```
## 目的
〜〜の外部システムと連携して〜〜を行う

## TaskList
+ [ ] パスやcron設定の調整 7/15 16:00 -
+ [ ] 実装
+ [ ] テスト
```

みたいに、打ち合わせ系のストーリやタスクリストがちょいちょい出てくる
これをカレンダーみたいな画面から参照出来たらすごい素敵だなぁ、って思ってる

今はカレンダーは別システムのカレンダーで実現しているんだけど、GitHub上で完結できたら自動でクローズしたり、該当Issueに直接リンクできたり素敵だろうなぁ、と思った

## よろしければ他記事もどうぞ
+ [もくじ](http://qiita.com/suzuki-hoge/items/a6e3bdc2cc1cf4e98ea1)
+ [ドキュメント管理](http://qiita.com/suzuki-hoge/items/1d6022cca177e2d96bb5)
+ [公開](http://qiita.com/suzuki-hoge/items/cd5170e7090407eb3e66)
+ [自動化](http://qiita.com/suzuki-hoge/items/159bfbcb883a9ce74157)
+ [課題管理](http://qiita.com/suzuki-hoge/items/3a568dff36fd981082ba)
+ [ZenHub](http://qiita.com/suzuki-hoge/items/f02b6752d8876ba6e114)
[.NET Freamwork3.5]IEでのDisaibledにハマった話


すごく簡単そうな仕様にも関わらずハマったのでメモ。

# 環境
* .NET Freamwork3.5
* WebForm
* IE11

# 仕様
* 初期表示時、特定の条件をサーバー側で判定し、対象のチェックボックスを非活性(Enabled=false)
* 他のチェックボックスの変更で非活性から活性に切り替え(jQueryの実装)

# 発生した事象
初期表示で非活性だった場合に、チェックボックスを活性状態にできない。

# 実装
サーバー側

```cs
this.HogeCheckbox.Enabled = false;
```

クライアント側

```Javascript
$("#<%=this.HogeCheckbox.ClientID%>").prop("disabled", false);
```

# 原因
サーバー側でinput要素を非活性にした場合、以下のようにinput要素を囲むspanタグが生成され、そのspanタグにも`disabled=disabled`が設定されていた。
この状態でID指定でチェックボックスを操作するとinput要素のdisabledは操作できても、spanタグのdisabledはそのままの状態で残ってしまう。
その結果、非活性状態から活性状態に変更できない状態となった。
なお、タイトルにある通りこの動作はIEのみで発生し、FireFox, Chromeでは想定通り動作した。

```html
<span disabled="disabled">
  <input type="checkbox" id="xxx_HogeCheckbox" disabled="disabled" />
</span>
```

# 対策
~~ASP.NET WebFormを使わない。~~
disabled操作を全てクライアント側でおこなうことでも対応できるが今回はクライアント側での操作時にspanタグのdisabledを消すことで対応した。

```Javascript
$("#<%=this.HogeCheckbox.ClientID%>").parent().removeAttr("disabled");
$("#<%=this.HogeCheckbox.ClientID%>").prop("disabled", false);
```
reduxを使うためにいろいろお勉強2



# ツール（スターターキットとscaffold）

## スターターキットについて検索

redux react cli - Google 検索
https://goo.gl/W5K0Vw

davezuko/react-redux-starter-kit: Get started with React, Redux, and React-Router!
https://goo.gl/ZTdBbF

banderson/generator-redux: CLI tools for Redux: next-gen functional Flux/React with devtools
https://goo.gl/oG1VE0

SpencerCDixon/redux-cli: An opinionated CLI for building redux/react apps quicker
https://goo.gl/WL7Yst

Redux + React + ES6 の簡単アプリを作成する②(ReactとReduxの連携編) - Qiita
http://goo.gl/feuClD

## 「redux-cli」

「redux-cli」が比較的シンプルに使えそうなきがする。
でも、使ってみると「react-redux-starter-kit」もインストールされた。
「redux-cli」はscaffoldなどのcliツール的な役割ってことかな。

## 「react-redux-starter-kit」

下記の記事によるとたくさんのスターターキットがあるらしい。

Reduxを動かしながら理解する | takayukii.blog
http://goo.gl/Ji3jHw

上記「Reduxを動かしながら理解する」は使い方についての理解に役立った。

* 別建てのSPAにもできる。

多分、webpackの設定を追加してmain.jsのようなものを置く。

* スターターキット「react-redux-starter-kit」で使われているライブラリ

react-router：ルーター
redux-simple-router：ルーターをreduxに対応さす
redux-actions：アクション関連
redux-thunk：非同期処理

* gitサブモジュール管理

プロジェクト内で「redux-cli」でプロジェクトを生成するとサブモジュール管理になった。
若干怖いけど続けてみるか。。
たしかに同じにするより分けたほうがいい気もするけど、
なんかサブモジュール怖い。。

### webpackで複数のapp.jsを読み込んだら

webpack_requireあたりで衝突したのだけど、、

### webpackの設定をいじってみつつ、、

コンパイルしたファイルを別システムから読み込みたい。。
ウェブパックが遅延読み込みできるように、server_hostとかがdevの設定じゃなくprod環境の設定になるようにしたり、、

config/environments.js
	compiler_public_path

### run devで、cssがおかしい

app/src/Redux/storymakeRedux/src/styles/core.scss
のnormarize.cssのimportをコメントアウト。

## react-router-reduxについてやっぱりイメージがわかないのでググる

grails-react-boilerplate で React に入門した - 2日目 React-Router, サーバー通信 - Kariya ( @bati11_ ) の 日記
http://goo.gl/hHHUyX

その案件、Reactで本当に大丈夫ですか？ | eureka tech blog
https://goo.gl/YFomhI

JSといえばjQueryだったWebデザイナーが、Reactを1年間使って感じたメリット | dwango creators' blog（ドワンゴクリエイターズブログ）
http://goo.gl/kCKeSe

React + TypeScriptでreact-router-redux - かずきのBlog@hatena
http://goo.gl/PVO6Bv

react-router/app.js at master · reactjs/react-router
https://goo.gl/puiyPb

React-router cheatsheet
http://goo.gl/1XOzUA

react-router の examples をざっと読んでみた - ryhmrt’s blog
http://goo.gl/wSFnXr

reactjs/react-router-redux: Ruthlessly simple bindings to keep react-router and redux in sync
https://goo.gl/OoRfRn


Redux 基礎：Reducer 編 - Qiita
http://goo.gl/1DKc2x

react-router の examples をざっと読んでみた - ryhmrt’s blog
http://goo.gl/wSFnXr

超訳 Redux Documentation - データフロー - Qiita
http://goo.gl/EvytJW

react + redux + react-router のサーバサイドレンダリングを試してみた - フレクトのHeroku Lab
http://goo.gl/eypvGB

How to share the root URL according to the auth status using reactjs, redux and redux-simple-router? - Stack Overflow
http://goo.gl/LJuMX8

react-router/routes.js at master · reactjs/react-router
https://goo.gl/n38Vu4

## shared root

きっかけは下記。

http://blog.ryhmrt.com/entry/2015/12/09/212013

ページにかかわらずルートに作る共通のコンポーネントのこと？？
グローバルメニューとかを配置したくて、やってみたけど下記のエラーが出て困った

```
browser.js:49 Warning: [react-router] Location "/counter?q=hoge" did not match any routes
```

試行錯誤した結果、開発用の環境だけなきがする。

これの具体情報は少なくて下記。
クローンしておいたほうがいいかな。。

https://github.com/reactjs/react-router/blob/master/examples/auth-with-shared-root/config/routes.js


## あたいの受け渡し

ひとまず下記のようなものが何なのか把握したい。。

state
prop
param
query
vueを使うメモ


一旦、reduxまではなくてちっちゃな部品の場合に使ってみる。。

# ライブラリとか環境

## doc

http://router.vuejs.org/ja/basic.html

## vue-cli

https://jp.vuejs.org/2015/12/28/vue-cli/

便利。大規模になるともっと違うのかも？？とりま。

### 実行時にseleniumが起動していると失敗するので注意。

```
npm run e2e # error

brew info  selenium-server-standalone
brew services stop selenium-server-standalone

npm run e2e # ok
```

### port

デフォルトは、
webserverは8080
seleniumは4444

```
vi config/index.js
vi test/e2e/nightwatch.conf.js
```

### そこにvue-routerを追加してみる

それだけで動いた。
でも、ESLINTにたくさん引っかかるようになった。。

Appにextendするとデフォルトのルーティングになるのね。

### unit

karmaをつかってunitテストするらしい

### e2e

http://qiita.com/takatama/items/ddaf9e85c71f7f0e922a

E2E (End-to-End) テスト

多分、nightwatchjsでテストケースを処理しつつ、selenium上で実行していく。

http://nightwatchjs.org/

### ESLINT

日本語ドキュメントが。。
でも便利かも。

phpstromにも「.editorconfig」ファイルがあるけど同じ設定で行けるのかどうなのか。
うーん、いけなさそう。

http://editorconfig.org/
http://qiita.com/muraken720/items/468b9f420ab4c900e241

「.eslintrc」もあるらしい。
各ファイル上でコメントとしてルールを記載してエラーを回避したりもできる。

軽く何度か実行してみたが、なおしてるのに引っかかったりする気がする。強制にせずに警告で使って慣れていくかな。。


rules/no-undef globals - Google 検索
https://goo.gl/h8NvcD

ESLintでno-undefのルールに引っかかった変数だけを抜き出す - なっく日報
http://goo.gl/DzAc0J

ESLintのエラールール。日本語ざっくり解説[スタイル編] - Qiita
http://goo.gl/T5tC01

僕が JavaScript 開発をするときの ESLint の設定ファイルの基本形 - BattleProgrammerShibata
http://goo.gl/M6uCAg

## コーディング規約的なもの

「;」をつけないとか？
ES6のコーディングのスタンダードがまだよくわからない。。


# vueコーディングとか

## root コンポーネント

var App = Vue.extend(...);

直接記載することもできるし、空にしておくこともできるし、コンポーネントを読み込むこともできる。
routerを使っている場合には、中身にrouter-viewを含ませる。


```
var App = Vue.extend({})

var app = Vue.extend({
	template: '<router-view></router-view>'
})

const App = Vue.extend(require('./App.vue'))

```

っと思ったけど、基本はルートにマッピングするのが正しそう？？

```

router.map({
'/': {
    component: dashboard
}
})


```

## いろいろできる

### router-viewのネストもできるらしい。

http://router.vuejs.org/ja/nested.html

### ナビゲーションにはネームドルート

http://router.vuejs.org/ja/named.html

### コンポーネントを遅延して読み込んでから実行

http://router.vuejs.org/ja/lazy.html

webpackとかのバンドラがハンドリングしてくれる。。
最初はリソースを読み込まずに必要時にajax asyncで読み込む。

staticディレクトリをちゃんと設定しておけばnginxでも動いた。
ファイル自体はbuildで生成しておくってことか。なるほど。

#### async awaitってなんだっけ
	
	http://qiita.com/gaogao_9/items/5417d01b4641357900c7#%E6%9C%80%E7%B5%82%E7%AB%A0%E3%81%93%E3%82%8C%E3%81%8B%E3%82%89%E6%AD%A9%E3%82%80esnext%E3%81%A8asyncawait
	
	http://d.hatena.ne.jp/seraphy/20120901

非同期処理を同期的に記述できる仕組み

* EAP
	* promiseとかを使うパターン（イベントベース）
* TAP
	* async-awaitを使うようなパターン（タスクベース）

asyncが非同期の意味の概念とかパターンで、実装としてはawaitが主なロジックという感じかしら。

ついでにES6とかES7とかあって混乱したのでググった。何度もググってる気がする。。
ES2015,ES2016がただしい。
脇道に逸れて行く。
	
	async と await の基本的な使い方 - C# 入門
	http://goo.gl/dVlwia
	
	
	ES.next async/await + Promise で解決できる事、とES6 generators (yield) + Promise + npm aa (async-await) で解決できる事 - Qiita
	http://goo.gl/VG3wl2
	
	ES7 async/await でのエラーハンドリング - おなか周りの脂肪がやばい
	http://goo.gl/2f07VT
	
	ES6 だとか ES7 だとか ES2015 だとか ES2016 ってつまり何という自分用記事まとめ - BattleProgrammerShibata
	http://goo.gl/2d3AQd
	
	タスクベース・非同期パターン: async と await による非同期プログラミングとは - C# 入門
	http://goo.gl/ch2P87
	
	非同期メソッド - C# によるプログラミング入門 | ++C++; // 未確認飛行 C
	http://goo.gl/3Vwbo
勉強用メモ 目次

* 現時点では、自分のための勉強用メモ。
* 新人教育のためのドキュメントを目指している。
* 『大学で `C` はやりました！！』と言う新人を想定している。

# [ソフトウェアテスト 勉強用メモ 目次](http://qiita.com/inabe49/items/97d2e7f05d7c43ee3b67)

* どうやってソフトウェアの検証を行うか
* コードを利用した検証方法

# [Git, GitHub 勉強用メモ 目次](http://qiita.com/inabe49/items/d41c50933be823d7673e)

* Git は、ソースコードを管理するツール
* GitHub は、Git を更に便利に使うためのクラウドサービス




# その他

* [Web API 一覧](http://qiita.com/inabe49/items/691104e07bfa44d4bb29)
gomobileがターミナルでcommand not foundと表示される（mac）

go mobileの環境構築中にハマったのでメモ。

go mobileの環境設定のうち、
```
$ go get golang.org/x/mobile/cmd/gomobile
$ gomobile init -v
```
このターミナルコマンドの部分で、gomobileがcommand not foundとなりました。

##解決法
gomobileコマンドをターミナルで使用するためには、$GOPATH/binにPASSが通っている必要があります。
.bash_profile（HOMEディレクトリにあります）に
```
export $PATH=$PATH:$GOPATH/bin
```
の一行を追加します。
Oracle Database CloudのAPEX環境を日本語化する方法


デフォルトではOracle Database Cloud(Database as a Service)のAPEX環境は英語となっています。これを日本語表示できるようにする方法を解説します。

## 環境

今回対象としているのは[cloud.oracle.com](https://cloud.oracle.com/ja_JP/database)のメニューでいうとDatabase as a Serviceと定義されているサービスです。

> 逆にSchema Serviceなどはもともと日本語対応しているので追加で設定する必要はありません

## 手順

まずDBaaSのOSにSSHでログインします。OSのIPはWebコンソールのノードの詳細ページで確認できます。
![スクリーンショット_2016-07-04_19_00_37.png](https://qiita-image-store.s3.amazonaws.com/0/26079/3c862d79-0bbb-e760-26b6-795cf22a81cd.png "スクリーンショット_2016-07-04_19_00_37.png")


```ターミナル
ssh -l opc IP_ADDRESS
```


sudoでrootユーザーになり、続けてsuでoracleユーザーになります。

```ターミナル
sudo -s
su - oracle
```

環境変数をセットします。

```ターミナル
NLS_LANG=Japanese_Japan.AL32UTF8
export NLS_LANG
```

インストールされているAPEXパッケージの日本語化スクリプトが置かれているディレクトリに移動します。

```ターミナル
cd /u01/app/oracle/product/12.1.0/dbhome_1/apex/builder/ja
```

SQL*PlusでAPEXがインストールされているPDBにsysユーザーで接続します。（デフォルトのPDBはPDB1です。下記の例ではデフォルトのままPDB1であると想定しています。）

```ターミナル
sqlplus /nolog
> connect sys@PDB1 as sysdba
パスワードを入力：
```

CURRENT_SCHEMAをセットします。

```ターミナル
> ALTER SESSION SET CURRENT_SCHEMA = APEX_050000;
```

日本語化スクリプトをロードします。

```ターミナル
> @load_ja.sql
```

上記スクリプトが完了したら日本語化されているはずです。APEXワークスペースにアクセスしてみてください。
下図のように日本語リンクが出ていれば正しく日本語化されています。
![スクリーンショット_2016-07-04_18_56_02.png](https://qiita-image-store.s3.amazonaws.com/0/26079/7b8a837f-2a82-ceb3-5e2f-19fe0fb36ff5.png "スクリーンショット_2016-07-04_18_56_02.png")
GithubでSquash Mergeされたブランチがローカルでbranch --mergedしても出てこない問題について

※ 2016/07/09追記
以下の方法だと複数人で開発しているときに、diffが0にならないケースがあって当然といえば当然なのですが、それだと動かない。
※ 追記終わり

Pull Requestでsquash mergeすると、手元で`fetch --prune`して`pull`して`branch --merged`しても、mergeされたブランチとしてローカルのブランチが出てこない。

```
$ git checkout -b feature/hoge

...add...commit...

$ git push origin feature/hoge

...github上でdevelopブランチにsquash mergeされ削除される...

$ git checkout develop
$ git fetch --prune
$ git pull origin develop
$ git branch --merged

＿人人人人人人人人人人人人人人＿
＞　feature/hogeが出てこない　＜
￣Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y￣
```

これが出てこないとどうなるかというと、remote上でmergeされて削除されたブランチをローカルで一括削除することができなくなる。

今まで以下のようなコマンドでしのでいたのだけど、これでは一々ローカルのブランチを指定して削除しないといけない。

```ini:.gitconfig
  rmm = !git branch --merged | grep -v master | grep -v develop | grep -v \\* | xargs -I % git branch -d %
```

面倒くさいので、一旦自分なら問題ないという前提で以下のコマンドに変更した。

```ini:.gitconfig
  rmm = !git branch | grep -vE '(master|develop)' | cut -c3- | xargs -L1 sh -c '[ `git diff $1 | wc -l` -eq 0 ] && git branch -D $1' sh
```

- ブランチごとのdiffの行数を見て0なら削除する
- developとmasterブランチは絶対消さない
- 自分が上記コマンドを叩くのはdevelopかmasterブランチでのみ
- コミットしてないブランチを作成した直後はこのコマンドを叩かない（まあ消えても問題ない）

一旦これでOK！