OmniAICreator/Qiita-1.07M huggingface dataset:
同名のvmがあって起動できないといわれたら

Homesteadまわりがよくわからなくて、boxの作成削除を試行錯誤中


> A VirtualBox machine with the name 'homestead-7' already exists.
Please use another name or delete the machine with the existing
name, and try again.


と言われて`$vagrant up`で起動しなくなった。



```
$ vagrant global-status
```

を実行してみろとのことで、結果

```
id       name    provider   state    directory                                  
--------------------------------------------------------------------------------
6b578c7  default virtualbox poweroff /Users/xxxx/Vagrant/CentOS70        
824274b  default virtualbox poweroff /Users/xxxx/Vagrant/CentOS_m2 
b0360b3  default virtualbox running  /Users/xxxx/Vagrant/Homestead       
643d085  default virtualbox poweroff /Users/xxxx/Homestead               
 
The above shows information about all known Vagrant environments
on this machine. This data is cached and may not be completely
up-to-date. To interact with any of the machines, you can go to
that directory and run Vagrant, or you can use the ID directly
with Vagrant commands from any directory. For example:
"vagrant destroy 1a2b3c4d"
```

running のものがおかしい模様（等にremove＆rm-rfして消してある）
指示通り

```
$ vagrant destroy b0360b3
```

してみたけど、再びupすると同じエラー。

```
$ vboxmanage list vms
```

結果

```
"CentOS_m2_default_1464174648700_24534" {4140cd16-8ce3-4e27-954e-58572e73a736}
"homestead-7" {05b71707-a0ac-4636-bedb-7b10faeffae1}
"settler_default_1460671527188_35026_1464617029965_88052" {f4c2dc18-121a-4d36-a750-f184465869a7}
"settler_default_1460671527188_35026_1464619613877_24296" {6378ecc1-7fea-4851-9e31-7980ee90d8d0}
```

"homestead-7"がいる。

GUIのVirtualBoxを起動したらいたので、電源OFFして削除。

のち、無事`$vagrant up`で起動した。


以上

---

参考）
http://stackoverflow.com/questions/26993903/a-virtualbox-machine-with-the-name-homestead-already-exists
Proxy環境でWindows 7にAppiumをインストールする(2016/05版)


Proxy環境でWindows 7にAppiumをインストールしようとしたら嵌ってしまったのでメモ。

# 環境

構築した環境は以下の通り。
 - Windows 7 SP1 x86
 - JDK 8u91
 - Node.js v4.4.5
	 - npm 2.15.5
 - Appium 1.5.2

# JDKのインストール

 - Oracleのページから対象の環境に合ったJDKのインストーラをダウンロードし、インストールを実行する
	 - http://www.oracle.com/technetwork/java/javase/downloads/index.html
 - `JAVA_HOME`を設定する
 - PATHに`JAVA_HOME¥bin`を追加する

# Node.jsのインストール

 - Node.jsの公式ページからNode.jsのインストーラをダウンロードし、インストールを実行する
	 - https://nodejs.org/en/download/
 - npmのproxyとregistryを設定する
	 - windowsの場合、registryをhttps->httpに変える必要がある
 
 ```
 $ npm config -g set proxy http://proxyhost:8888
 $ npm config -g set https-proxy http://proxyhost:8888
 $ npm config -g set registry http://registry.npmjs.org/
 ```
 
 - npmの設定内容を確認する

 ```
 $ npm config list
 ```
 
 - 環境変数`HTTP_PROXY`を設定する(**ここが重要**)
	 - Appiumをインストールする際に、上記のnpmのproxy設定だけではエラーになってしまう。(appium-chromedriverのインストール時にChromeDriverのバイナリのダウンロードに失敗する)

 
 ```
 $ set HTTP_PROXY=http://proxyhost:8888
 ```
 
# Appiumのインストール

 - npmからAppiumをインストールする

 ```
 $ npm -g install appium
 ```
複数ng-classを書く時の注意

条件によってclassを使い分けるためにng-classを使用する際、
いくつかの条件によって振る舞いを変える場合の注意です。

piyoYellowが真の時はyellowクラスのみを適用、hogeRedの時はredクラスのみを適用させたい場合、以下のようにコードを書くとします。
（hogeRedの時はpiyoYelloの値に関わらずredクラスを適用させたい）

CSS

```hogehoge.css
.yellow { color: yellow; }
.red    { color: red; }
```

Javascript

```hogehoge.js
$scope.hogeRed = true;
$scope.piyoYellow = true;
```
HTML

```index.html
<span ng-class="{yellow:piyoYellow, red:hogeRed}">ng-class テスト</span>
```

この時、「ng-class テスト」の文字は赤になります。
ですがそれは「piyoYellow」の後に書いた黄色が「hogeRed」されて赤色に上書きされたわけではなく、CSSの順番で赤色になっただけです。

そのため、　CSSの順番を

```hogehoge.css
.red    { color: red; }
.yellow { color: yellow; }
```

とすると、文字色は黄色くなります。

この時、任意のclassのみを適用させたい場合は、ng-classの条件を修正する必要があります。

結論から先にいうと、HTMLを以下のコードのように修正します。

```index.html
<span ng-class="{yellow:(piyoYellow && !hogeRed), red:hogeRed}">ng-class テスト</span>
```

ng-classの一つ目の式「yellow:(piyoYellow && !hogeRed)」で「hogeRed ではないとき」と条件を追加しました。

これで、CSSの順番に関わらず任意のclassのみを適用させることができます。
Retrofit+RxJava(RxAndroid)を使った時に（よく読んでないことが原因で）ハマったこと

RetrofitとEventBusを組み合わせてAPIクライアントを作っていましたが、次は何かと耳にするRxJava(RxAndroid)を使ってみましたが、使いかたを理解するのにも少し時間がかかり、その後少しつまずいたことがあったので残しておきます（後から参考にしたブログとかQiitaよく読んだら自分がアホだったことに気が付きましたが）。

```java
 Retrofit retrofit = new Retrofit.Builder()
          .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) 
          .addConverterFactory(GsonConverterFactory.create())
          .baseUrl("http://api.hogehoge.com/")
          .build();
```

というコードが有り、

```java
addCallAdapterFactory(RxJavaCallAdapterFactory.create()) 
```

部分の引数の型の解決が出来ていませんでした。

なんでだろうと思いつつ、ひたすらググッて[GitHubのissue](https://github.com/square/retrofit/issues/1586)を見つけ、この通りのことをしていました。

つまり、
```compile 'com.squareup.retrofit:adapter-rxjava:2.0.0-beta2'```

としていました。

ここで指定しているアダプタはRetrofit1用のアダプタです。

Retrofit2を使用している場合は、

```compile group: 'com.squareup.retrofit2', name: 'adapter-rxjava', version: '2.0.2'```

となります。（最新バージョンは[ここから](http://mvnrepository.com/artifact/com.squareup.retrofit2/adapter-rxjava)）

よく記事を読んでない自分が全て悪いという内容でしたが、こういうミスもあったということで残しておきます。

ただ、[ここ](https://medium.com/@ahmedrizwan/rxandroid-and-retrofit-2-0-66dc52725fff#.ieyi03xuv)では間違っているadapterをGradleで指定していたのでご注意を。
Ansible 2.1からはサクッとgit configができる

今日からAnsible始めました！

YAMLにちょこちょこっと書くだけの簡単な作業でそれなりのことができたので、本当に学習コストが小さくて、あっという間にAnsible LOVE:two_hearts:になってしまいそうです。

## git_config module

表題の件ですが、Ansible 2.1からはgit_config moduleを利用して`git config`ができるんですね。

[git_config - Read and write git configuration — Ansible Documentation](https://docs.ansible.com/ansible/git_config_module.html)

> The git_config module changes git configuration by invoking ‘git config’. This is needed if you don’t want to use template for the entire git config file (e.g. because you need to change just `user.email` in /etc/.git/config). Solutions involving command are cumbersone or don’t work correctly in check mode.

ちょっと設定を変えるだけのためにファイル丸ごと分のtemplateを使うのがイヤだったり、check modeでうまくいかないcommandを使うのがかったるかったり、という場合の助けになるとのことです。

## 使ってみた

開発サーバー用のいつもの設定を書いてみました。

```yaml:roles/git/tasks/main.yml
- name: ensure git is at the latest version
  become: yes
  yum: name=git state=latest
- git_config: name=user.name scope=global value="{{ name }}"
- git_config: name=user.email scope=global value="{{ email }}"
- git_config: name=color.ui scope=global value=true
- git_config: name=grep.lineNumber scope=global value=true
- git_config: name=alias.find scope=global value="grep -H --heading --break"
- git_config: name=core.editor scope=global value="vi -u NONE -N"
```

おかげさまでシェルスクリプト地獄から開放されました :+1:
CrystalとRubyのクラス変数・クラスインスタンス変数の比較

日本産のスクリプト言語Ruby。
Ruby風のSytaxを持ち、高速に動作するCrystal言語。
2つの言語におけるクラス変数（＋クラスインスタンス変数）の差異についてまとめます。

## <i class="fa fa-balance-scale" style="font-size:1em;"></i> 比較表（ ver 0.17.0 時点）
|言語|種別|クラスメソッド<br>参照・代入可否|インスタンスメソッド<br>参照・代入可否|サブクラス<br>参照・代入可否|
|:--|:--|:--:|:--:|:--:|
| :red_circle: Ruby|クラス変数|:o:|:o:|:o:|
| :red_circle: Ruby|クラスインスタンス変数|:o:|:x:|:x:|
| :crystal_ball: Crystal|クラス変数|:o:|:o:|:x:|

## :red_circle: Ruby
### <i class="fa fa-code" style="font-size:1em;"></i> クラス変数
```ruby
class Base
  @@base="base"
  def self.class_method
    puts "class method #{@@base}"
  end

  def instance_method
    puts "class instance method #{@@base}"
  end
end

class Child < Base
  def self.class_method
    puts "instance method #{@@base}"
  end
end

puts "🔴Ruby Class Variable"
Base.class_method
Base.new.instance_method
Child.class_method

# => 🔴Ruby Class Variable
# => class method => base
# => class instance method => base
# => instance method => base
```

### <i class="fa fa-code" style="font-size:1em;"></i> クラスインスタンス変数
```ruby
class Base
  @base="base"
  def self.class_method
    puts "class method => #{@base}"
  end

  def instance_method
    puts "class instance method => #{@base}"
  end
end

class Child < Base
  def self.class_method
    puts "instance method => #{@base}"
  end
end

puts "🔴Ruby Class Instance Variable"
Base.class_method
Base.new.instance_method
Child.class_method


# => 🔴Ruby Class Instance Variable
# => class method => base
# => class instance method => 
# => instance method => 
```

## :crystal_ball: Crystal
### <i class="fa fa-code" style="font-size:1em;"></i> クラス変数
```crystal
class Base
  @@base : String ="base"
  def self.class_method
    puts "class method => #{@@base}"
  end

  def instance_method
    puts "class instance method => #{@@base}"
  end
end

class Child < Base
  def self.class_method
    # 継承先からクラス変数を呼び出すとエラーになる
    # puts "instance method => #{@@base}"
    puts "instance method => "
  end
end

puts "🔮Crystal Class Variable"
Base.class_method
Base.new.instance_method
Child.class_method

# => 🔮Crystal Class Variable
# => class method => base
# => class instance method => base
# => instance method => 
```

## <i class="fa fa-book" style="font-size:1em;"></i> 外部資料
* <i class="fa fa-external-link" style="font-size:1em;"></i> [クラス変数 - Docs - Crystal](http://ja.crystal-lang.org/docs/syntax_and_semantics/class_variables.html)
* <i class="fa fa-external-link" style="font-size:1em;"></i> [【まとめ】インスタンス変数、クラス変数、クラスインスタンス変数 - mogulla3 - Qiita](http://qiita.com/mogulla3/items/cd4d6e188c34c6819709)
android.support.v7.internal.app.WindowDecorActionBar

新規プロジェクトを作ってxmlのpreviewを見てみると、いきなり言われるやつ

```
Rendering Problems The following classes could not be found:
- android.support.v7.internal.app.WindowDecorActionBar (Fix Build Path, Create Class)
 Tip: Try to build the project.
```

## 解決方法
`app/res/values/styles.xml`の以下の部分を変更

```xml
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
```
　　　　　　　　　　　　　　　⬇️

```xml
<style name="AppTheme" parent="Base.Theme.AppCompat.Light.DarkActionBar">
```
Vagrant up に失敗するようになった


# 問題点

    $ vagrant up

起動しようとすると…

```
Bringing machine 'mybox' up with 'virtualbox' provider...
==> mybox: Importing base box 'box'...
==> mybox: Matching MAC address for NAT networking...
==> mybox: Checking if box 'box' is up to date...
A VirtualBox machine with the name 'mybox' already exists.
Please use another name or delete the machine with the existing
name, and try again.
```

上記のようなエラーが出るようになりました。

'mybox' が already exists だそうです。

# 対処法

vagrant init し直すのは面倒ですので、まずは VirtualBox を確認します。
VirtualBox に box が残っていれば、Vagrant との紐付けを修正して解決です。

* まず Vagrant の UUID を確認します。

```
$ VBoxManage list vms
```

※Windows の場合 VBoxManage.exe は C:\Program Files\OracleVirtualBox 辺りにあります。

```
"mybox" {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}
```

といった結果が得られると思います。`"box 名" {UUID}` となります。

* 次に確認した UUID を下記ファイルに上書きします。

```
.vagrant/machines/mybox/virtualbox/id`
```

* vagrant up

```
$ vagrant up
```

無事起動しました。

# 補足

    mybox: Warning: Authentication failure. Retrying...

上記エラーが出続ける場合。
※一度 vagrant destroy してしまった場合など

ssh ログインが可能であれば `.ssh/authorized_keys` に下記を追記します。

https://raw.githubusercontent.com/mitchellh/vagrant/master/keys/vagrant.pub

```
$ vagrant reload
```

新たに `.vagrant/machines/mybox/virtualbox/private_key` が生成され、エラーが出なくなります。


# 参考
http://qiita.com/kayo_h/items/a6fe507b87170c90fe89
今いるブランチをクリップボードにコピーする

コマンドはなかったので書きました
bashrcとかに以下を追記

```sh
alias gbcopy='git rev-parse --abbrev-ref HEAD | pbcopy'
```
読み込み

```
. ~/.bashrcとか
```
使う

```sh
$ gbcopy
$ master #paste
```

結構便利です。

ちなみにzshのbranch completionもすごく便利です。
https://github.com/zsh-users/zsh-completions
ファイルのフルパスを表示する

コマンドが無かったのでシェルスクリプトで書きました。
.bashrcとかに以下を追記して

```sh
function lsfull() {
  current=`pwd`
  echo $current
  command ls -d ${current}/*
}
```

読みこみ

```sh
. path/to/.bashrcとか
```

使ってみる

```sh
$ lsfull
/Users/user/desktop/foo/hoge
/Users/user/desktop/foo/hoge/bar
```

たくさん文字が表示されるのでgrepとかと組み合わせて使うと便利です

```sh
$ lsfull | grep bar
/Users/user/desktop/foo/hoge/bar
```
MySQL初心者が、EXPLAINした時に見るもの


# 概要
`EXPLAIN` の公式ドキュメント読んでも、情報量が多くて何を見ればいいのかよくわからないです。なので、どういうやつがやばいのかを示しておきます。

# 絶対に対処するもの

## `possible_key` が `NULL`
WHERE 句に使っているカラムに、適切な INDEX を貼ってください。  
できれば UNIQUE がいいけど、「 UNIQUE "っぽい" から」という理由で貼ると後悔します。「 UNIQUE でなければいけない」理由がない限りは、ただの INDEX に留めたほうが良いです。

## `type` が、 `system` `const` `eq_ref` 以外

### 管理画面とか定時実行処理とかならセーフなもの
以下の `type` は、管理画面とか定時実行処理などのように、**「1日数回しか実行しないこと」が保証されていれば、問題ない**です。  
「あるページにアクセスされるたびに実行される」とかだと、データ件数が増えると死ぬので、必ず改善してください。  

* `ref`
* `fulltext`
* `ref_or_null`
* `index_merge`

### 管理画面や定時実行処理からしか**アクセスされないテーブル**ならセーフなもの
以下の"type"は、管理画面とか定時実行処理などのように、**「1日数回しか実行しない場所からしか参照されないこと」が保証されていれば、問題ない**です。  
重要のなのは、「参照されない」ことで、**SELECTであっても、頻繁にされてはいけません**。  


* `unique_subquery`
* `index_subquery`
* `range`
* `index`

### `ALL` は存在悪。許してはいけない。
**`ALL` は、フルテーブルスキャンなので、存在悪**です。 WHERE 句にインデックス貼っとけばなんとかなったりすることもあります。


# できるだけ直したほうが良いもの

## `EXPLAIN` の結果が4行以上
元のSQLが複雑すぎるので、直したほうが良いかもしれないです。
戦略レベルの設計でやらかしてる事が多いので、リファクタリングするのは難しいことが多いかもです。

## `key_len` が1024以上
インデックスが張られているカラムが不適切かもしれないです。  
`INT` や `ENUM` 型にすることを検討する。 `INT` 型にする場合は、「 settingテーブル（いわゆるマスタ）＋中間テーブル」という設計になる事が多いかもです。

# 調査したほうがいいかもしれないもの
## `ref` が `func`
呼び出し元のスクリプト側で既に持っているデータで使えるデータがないかを調べましょう。  
可能な限り、DBサーバの負担は減らしましょう。
[memo] CentOS 5のyumで発生するError performing checksumの対応方法


いまどきCentOS 5を使っているのもどうかと思うのですが，[公式の手順](http://pkg.jenkins-ci.org/redhat/)でJenkinsをyumでインストールしようとして下記エラーが発生。

```shell
user$ sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
user$ sudo rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key
user$ sudo yum -y install jenkins
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * extras: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
jenkins                                                                                                                                   | 2.9 kB     00:00     
jenkins/primary_db                                                                                                                        |  83 kB     00:00     
http://pkg.jenkins-ci.org/redhat/repodata/fcf3dece940f2560206b25d53b09ce967d00caba40e0db300feaa4854aa9de34-primary.sqlite.bz2: [Errno -3] Error performing checksum
Trying other mirror.
jenkins/primary_db                                                                                                                        |  82 kB     00:00     
http://pkg.jenkins-ci.org/redhat/repodata/c2a4835c4ff525fceae6d45a2119eec5b54ed3b98329c3228c2f834b2e5b7d9c-primary.sqlite.bz2: [Errno -3] Error performing checksum
Trying other mirror.
Error: failure: repodata/c2a4835c4ff525fceae6d45a2119eec5b54ed3b98329c3228c2f834b2e5b7d9c-primary.sqlite.bz2 from jenkins: [Errno 256] No more mirrors to try.
```

デフォルトではchecksumとしてMD5とSHA1にしか対応していないことが原因。hashlibを使うことでSHA256にも対応できるのでインストールすれば万事解決。

```shell
user$ sudo yum -y                   install epel-release 
user$ sudo yum -y --enablerepo=epel install python-hashlib 
user$ sudo yum -y                   install jenkins
```

ちなみに上記ではjavaがインストールされずjenkinsが起動できないことがあるのでjava-1.7.0-openjdkもインストールのを忘れない。

参考）

- [miauの避難所>yum 実行時に「Error performing checksum」エラー](http://d.hatena.ne.jp/miau/20100404/1270384404)
https で git push するときのパスワードをGNOMEのキーリングに保存する

# 環境
- Ubuntu 16.04 64bit
- Gitがインストール済み

# どうするか
- GNOMEとGitを接続する認証ヘルパーを設定する

# やったこと
- ヘルパーをコンパイルする(それに必要なライブラリもインストール)

```
$ sudo apt-get install libgnome-keyring-dev 
$ cd /usr/share/doc/git/contrib/credential/gnome-keyring
$ sudo make
```
- Gitにヘルパーを設定

```
$ git config --global credential.helper /usr/share/doc/git/contrib/credential/gnome-keyring/git-credential-gnome-keyring
```

# 結果
設定後、2回目以降のPushはパスワードを尋ねられなくなった。成功。

# 出典
- [How to use git with gnome-keyring integration - Stack Overflow](http://stackoverflow.com/questions/13385690/how-to-use-git-with-gnome-keyring-integration)
- [GNOME Keyring - ArchWiki](https://wiki.archlinuxjp.org/index.php/GNOME_Keyring#GNOME_Keyring_.E3.81.A8_Git)
いまさらながら？Unityのエディタ、良いレイアウトってなんなのよ？

# はじめに

なんとなく、エディタの各要素の配置の良いアイデアってなんだろうと思ったので
自分のよく使う配置とそれの作りかたをあげてみました！

これも良いよってのがあったら是非教えて欲しいです！

# まずは、配置の案

## その１

![layout1.png](https://qiita-image-store.s3.amazonaws.com/0/114344/27728a58-2d20-3e5e-9e97-14e5ecba8612.png)


## その２（その１のコンソール画面の拡大版）
![スクリーンショット 2016-05-31 0.27.41.png](https://qiita-image-store.s3.amazonaws.com/0/114344/f7412c2b-3939-e614-7933-fa60e319d53c.png)



## その３
（スマホアプリ制作時(縦画面))

![smartphonelayout.png](https://qiita-image-store.s3.amazonaws.com/0/114344/42adde25-a80f-f747-4825-1e50af31fe1a.png)

# 作り方

その３はその２からすぐにわかると思うので、その１、２だけをわかりやすく解説しておきます。

- まずは**標準の2by3**のレイアウトをベースとします。それに加えて、**コンソール画面**を出しておきます。  
（解説のgifはそこから始まってます）

## その１

![sono1.gif](https://qiita-image-store.s3.amazonaws.com/0/114344/e4c728e5-3206-e848-6b5b-e9b87fbdb0de.gif)

## その２

![sono2.gif](https://qiita-image-store.s3.amazonaws.com/0/114344/aae28487-4af7-06b8-2be9-a692a7a72ad1.gif)


# おわりに

初めて触るソフトって、使いやすいエディタの配置って知りたいですよね。
そんな人や、こんな風に入れていけば、この画面作れるんだっていう、発見につながると良いなと思います！！

この配置良いよ！とかあったら是非教えてください！
ChromeブラウザでUTF-8なのにWebページが文字化けするときの対処法

UTF-8でhtmlを書いているのに、何故かChromeブラウザで文字化けするときの対処法。
なお、IEでは問題ない場合もある。
metaタグとBOMの関連で、私はハマったので、メモって話。

以下へ保存形式と記述を統一したら解決した。

- BOM無しのUTF-8で保存する（UTF-8N）。
- 改行コードはLFとする。
- ヘッダに`<meta charset="UTF-8">`を書く。

特にこの最後のcharsetは要注意。
`<meta http-equiv="Content-Script-Type" content="text/javascript; charset=UTF-8">`
を書いていて、
且つ上記の`<meta charset="UTF-8">`が**無く**、
且つ**BOM無し**UTF-8で保存していたりすると、
見事に文字化けしてくれるので厄介。┐（´ー｀）┌

上記の組み合わせで**BOM付き**UTF-8だと
**文字化けしない**（当方の環境では）ので、
「BOMは付けるべきか？」と勘違いしかけたので、本当に厄介。


「あれー？metaタグのcharsetでUTF-8指定しているのに？？？」
ってなってハマった。
上記のは「javascriptコードがUTF-8だ」と言っているだけで、
そのHTMLファイルがUTF-8とは**言ってないぞ**、と
理解されるらしい。（＾＾；）

まぁ、分っている人にはアタリマエなのかもですが。
htmlに対しては
`<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">`
と書くのが正しいわけなので（たぶん）。

※HTML5からは「`<meta charset="UTF-8">`」でOK。
※metaタグのcharsetのはこちらが分りやすい⇒http://www.htmq.com/html5/meta.shtml
オブジェクト生成時にインスタンス変数の初期値を設定する

Railsのmodelではmodel生成時に

```rb
user = User.new(name: "tarou", address: "東京都港区", phone: "08099999999"...)
```

このような形で初期値を設定することが出来ます。

でこれに慣れてるとRubyでこのようなクラスがあったとして、同じようにこんなふうにインスタンス変数設定したいなーと思って書いてもRubyのオブジェクトにそんな機能は備わってないので、Object#initializeを呼んでエラーになってしまいます。

```rb
class Bar
  attr_accessor :a, :b, :c
end
Bar.new(a: "A", b: "B", c: "C")
ArgumentError: wrong number of arguments (1 for 0)
from (pry):5:in `initialize'
```

よくあるやり方としてはinitializeで普通に引数を設定する方法があります。

```rb
class Foo
  attr_accessor :a, :b, :c
  def initialize(a, b, c)
    @a = a
    @b = b
    @c = c
  end
end
=> :initialize
Foo.new("A", "B", "C")
=> #<Foo:0x007fec0b61e690 @a="A", @b="B", @c="C">
```
ただしこのやりかただと変数の数がたくさん増えていった場合にいちいちinitializeの定義を確認してどの順番で引数を渡さないといけなかったかなーと確認しないといけなくなりとても不便です。

そこでもう少し便利な方法を考えます。

## キーワード引数を使う
キーワード引数を使うことで引数を関数に与えられた順番ではなく、キーワードに紐付けて渡せるようになります。その結果上記のコードは以下のように書き直せます。これによってどの値にどの値をセットしているか
がよくわかるようになるし、順番も気にする必要がなくなります。

```rb
class Bar
  attr_accessor :a, :b, :c
  def initialize(a:, b:, c:)
    @a = a
    @b = b
    @c = c
  end
end
Bar.new(a: "A", b: "B", c: "C") #keyword:値 なのでどの値にどの値をセットするかがわかりやすい
=> #<Bar:0x007fec06199c50 @a="A", @b="B", @c="C">
Bar.new(b: "B", a: "A", c: "C") #順番を入れ替えても問題ない
=> #<Bar:0x007fec0925c388 @a="A", @b="B", @c="C">
```
ただしこれでもたくさん変数があると

```rb
def initialize(a:, b:, c:, d:...)
  @a = a
  @b = b
  @c = c
  @d = d
...
end
```
となってやや冗長な感じがします。

## sendを使う
そこで今度はsendを使って初期値の代入を行います。与えられた引数をまずhash形式に直したうえでsendを使って初期値をセットします。こうすることでいくら初期値がたくさんあってもこれ以上コードが長くなることはなくなりました。ただし、ぱっと見何をやってるかわかりづらいのでここまでやるかは微妙なところかと思います。

```rb
class Foo
  attr_accessor :a, :b, :c, :d, :e, :f
  def initialize(a:, b:, c:, d:, e:, f:)
    # 与えられた引数をhash形式で取得
    args_hash = self.method(__callee__).parameters.map do |arg_type,arg|
      [ arg, eval(arg.to_s) ]
    end.to_h
    # sendを使って初期値をセット
    args_hash.each do |prop_name, prop_value|
      self.send("#{prop_name}=",prop_value)
    end
  end
end
Foo.new(a: "A", b: "B", c: "C", d: "D", e: "E", f: "F")
=> #<Foo:0x007f8154748128 @a="A", @b="B", @c="C", @d="D", @e="E", @f="F">
Foo.new(a: "A", b: "B", c: "C")
ArgumentError: missing keywords: d, e, f #何が足りていないかもわかりやすい。ただし何も入れたくない場合は明示的にnilをセットする必要がある。
```

まだまだ初学者+エンジニア１人でやっているのでおかしいところがあれば是非ご指摘いただけると嬉しいです。
参考: http://qiita.com/hidechae/items/5416a996529d7663c182
めざせpythonライブラリマスター （３）workalendar

#【ライブラリ説明】
　さまざまな国の祝日がわかります。

#【プログラム】
　2016年の日本の祝日を取得してみます。

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

from workalendar.asia import Japan

cal = Japan()

for i in xrange(len(cal.holidays(2016))):
    print cal.holidays(2016)[i]
```

#【結果】
(datetime.date(2016, 1, 1), 'New year')
(datetime.date(2016, 1, 11), 'Coming of Age Day')
(datetime.date(2016, 2, 11), 'Foundation Day')
(datetime.date(2016, 3, 20), 'Vernal Equinox Day')
(datetime.date(2016, 4, 29), 'Showa Day')
(datetime.date(2016, 5, 3), 'Constitution Memorial Day')
(datetime.date(2016, 5, 4), 'Greenery Day')
(datetime.date(2016, 5, 5), "Children's Day")
(datetime.date(2016, 7, 18), 'Marine Day')
(datetime.date(2016, 9, 19), 'Respect-for-the-Aged Day')
(datetime.date(2016, 9, 22), 'Autumnal Equinox Day')
(datetime.date(2016, 10, 10), 'Health and Sports Day')
(datetime.date(2016, 11, 3), 'Culture Day')
(datetime.date(2016, 11, 23), 'Labour Thanksgiving Day')
(datetime.date(2016, 12, 23), "The Emperor's Birthday")

今年は3月21日が振り替え休日でしたが、結果には含まれていない(>_<)

#【感想】
　すべての国の祝日取得に対応してほしいですね。

#【参考サイト】
　[workalendar](https://pypi.python.org/pypi/workalendar/0.4.5)
　[github](https://github.com/novafloss/workalendar)
Win7 to Win10アップグレードができない場合のメモ

# はじめに

私のメインPCにはいくつかの設定を行っていたので、すんなりとWin10へのアップグレードができませんでした。
フォーラム等を参照してなんとかアップグレードすることができたので、メモがてらこちらに残したいと思います。

Win10無償アップブレード期間まで残り２ヶ月を切っているので、少しでもお役に立てれば幸いです。

# PCに行っていた設定

・「Users」フォルダを別ドライブに指定(シンボリックリンク)
・「temp」フォルダを別ドライブに指定(シンボリックリンク)
・Windows10アップデータの無効化
・RAIDボード接続(データ用)
・システムドライブ以外にSSDx2接続

# 現象

・Win10インストーラまでは起動するが、「ファイルをコピーしています」の1%の時点で再起動→Win7に巻き戻される

・(一部同上)「ファイルをコピーしています」の84%の時点で再起動→巻き戻し

# 事前準備

下記のサイトの手順に従い、システムファイルの修復をかけておきます。

[DISM またはシステム更新準備ツールを使用して Windows の破損エラーを修正します。](https://support.microsoft.com/ja-jp/kb/947821)

# シンボリックリンクを削除する
システムが使用するファイルのシンボリックリンクを削除します。
私の場合はCドライブ直下の「Users」フォルダにシンボリックリンクを貼っており、RAIDボード上のGドライブ側のUsersフォルダを見に行くようにしていました。
※「temp」フォルダのシンボリックリンクについてはセーフモードで削除だけしました。


こちらのサイトを参考に設定を変えた覚えがあるので、逆の手順で直しました。

[Windows7のUsersフォルダをDドライブに移動する](http://taiseiko.blog.so-net.ne.jp/2009-11-01)

簡単な手順は以下の通りです。


セーフモードで起動
↓
Administratorか作業用のアカウントを作ってログイン
↓
Cドライブのシンボリックリンクを削除（元ファイルを削除しないように注意）
↓
シンボリックリンク先からCドライブの「Users」フォルダを管理者権限でコピー
↓
レジストリエディタを起動してユーザープロファイルのパスを書き換え
↓
再起動して当該ユーザーでログインして「一時プロファイル」にならないことを確認。

# システムドライブ以外の記憶デバイスを取り外す

システムドライブ以外の外付・内蔵HDD/SSD/DVDドライブを全て取り外します。
また、USBデバイスもマウスとキーボード以外は取り外します。


# おきまりごと
・本ページの情報を参照して発生したいかなる不利益/損害について責任を負いません。
・記事内容の無断転載は認めません。本ページへのリンクを含んでください。
・必要に応じて随時追加/修正を行います。
物凄く今更だがElCapitanのSIP,ON/OFF


今までONでいいだろうと思っていたが、
一時的にOFFにすることになったので一応メモ

## SIPをOFFにする

1. **Mac**を`⌘+R`押しながら`電源ボタン`で<i>リカバリーモード</i>で起動する
2. メニューバー > ユーティリティ >　ターミナル
3. <span style="color: red;">`csrutil disable`</span>と入力
4. 再起動

コレでSIPはOFFになりました
## SIPをONにする
1. **Mac**を`⌘+R`押しながら`電源ボタン`で<i>リカバリーモード</i>で起動する
2. メニューバー > ユーティリティ >　ターミナル
3. <span style="color: blue;">`csrutil enable`</span>と入力
4. 再起動

コレでSIPはONになりました
<br>
まぁホント今更ですね
[swift][メモ]funcの引数のスコープとfuncの中身のスコープの違い

初歩的なことだけど疑問点メモ。下記のような関数があるとする

```swift
func show(message: String?) {
    guard let message = message else { 
        return
    }
    print(message)
}
```

これはよくある記述と思うが、なぜ引数と同じ名前が定義出来るか不思議に感じた。引数はletとして扱われているはず。
当初はguard let（もしくはif let）はそういう挙動をすると思ったが、下記の様な記述でも動く。

```swift
func show(message: String) {
    let message = "Hello " + message 
    print(message)
}
```

これは、引数の部分とfuncの中でスコープが異なるということを意味している？c++等ではそういう挙動にならないがswiftはそういうものなんだろうか

```cpp
void show(const char * message){
    const char * message = "foo";//error: redefinition of 'message'
    std::cout << message << std::endl;
}
```

Scalaで試したらエラーになった。これは、messageが未定義なのにmessageを呼んでる的なエラーかな？

```scala

def show(message: String) = {
    val message:String = "Hello" + message//エラー error: forward reference extends over definition of value message
    print(message) 
}
```

でも、下記のScalaコードは通る

```scala

def show(message: String) = {
    val message:String = "foo"
    print(message) 
}
```

またなんか発見があったら追記する。
Rails ローカル開発環境での作業開始方法、sudo apt-get 〜 パッケージのインストール方法　※自分用メモ


**何かしらのパッケージをインストールする前にはAPTのパッケージリストをアップデートしておく。**
sudo apt-get update　※apt-getはUbuntu
sudo apt-get install manpages-ja manpages-ja-dev



**Rails ローカル開発環境**
cd vagrant
vagrant ssh ※vagrantにログイン、この状態になってから作業開始
(sudo apt-get update)　※パッケージをインストールしなくても時々行う
ls
cd myapp
作業開始

ユーザを確認
who am i

chage -l username(vagrant)
Ryan Dahl's Automatic Colorizationをpure TensorFlow化してscikit-imageに由来するセグメンテーションフォルトをなくした話

Ryan DahlによるAutomatic Colorizationのサンプルがscikit-imageを利用しており環境によってはセグメンテーションフォルトが起きる。それを回避するために画像の入出力をTensorFlowのみで行うように改造した話。

三行
-----

- オリジナルは[こ↑こ↓](http://tinyclouds.org/colorize/)
- 今回改造したのは[こ↑こ↓](https://gist.github.com/YusukeSuzuki/4919c3577347918fa5735dad91d4d168)
- 得られたもの = scikitから完全解放された淫夢くんUC

左: 入力画像、右: 入力画像を一度グレイスケールにして再着色した画像
![inmukun.jpg](https://qiita-image-store.s3.amazonaws.com/0/25288/9b466aec-4180-9504-6eaa-706b0680e69e.jpeg) ![inmukun-color.jpg](https://qiita-image-store.s3.amazonaws.com/0/25288/31992110-f4fc-5a22-e878-33c88d06ab5f.jpeg)

細かい話
---------

### Ryan DahlによるAutomatic Colorization

[Ryan DahlによるAutomatic Colorization](http://tinyclouds.org/colorize/)。いわゆるディープラーニングによるグレイスケール画像の自動着色。アルゴリズムだけでなく学習データと実行スクリプトも公開されているのでTensorFlowの実行環境があれば誰でも試すことができる。

### 日本語の情報

- [人工知能でモノクロ写真を自動でカラーにする方法](http://www.shun.bz/20160127/1050814061.html)
- [2016-05-14
TensorFlowコトハジメ Automatic Colorization(白黒画像の自動彩色)](http://yaju3d.hatenablog.jp/entry/2016/05/14/175302)
- [[テスト] 畳み込みニューラルネットワークを用いたモノクロ動画の自動彩色](http://naotokui.net/2016/01/auto-color-cnn-jp/)

### 問題

いくつかのブログに実行するとセグメンテーションフォルトが起きると書いてあり私の環境でも発生した。スクリプトの中で scikit-image を利用しており scikit-image の import でセグメンテーションフォルトが発生している。

これはTensorFlowの依存か何かの問題らしい。

[segmentation fault #2034](https://github.com/tensorflow/tensorflow/issues/2034)

### 解決法

今回のスクリプトでは scikit-image は画像ファイルの入出力とクロップ・リサイズのみに使用されている。TensorFlowはこれらも可能であるためpure TensorFlowで実装することで依存を減らした。

環境によっては発生しない問題のようなので無理に使用する必要はない。

TensorFlowは入力はOpノードとして記述し、出力はencode_jpegしたノードをrunで出力することで行う。

この辺の入出力をTensorFlowのグラフで行うか、TensorFlow以外のパッケージで行うかは設計による。大体の場合はTensorFlow外で行えばよいと思う。今回は問題回避のためにTensorFlowの入出力を使用した。
Petalinux > zynq > RAMサイズを変更 (失敗編)

PetalinuxでZynq基板のRAMサイズを変更する情報を探した。

https://forums.xilinx.com/t5/Embedded-Linux/change-RAM-size/td-p/373127

> I haven't had to do this myself yet, but I have noticed in u-boot that the config file for the Zed board (include/configs/zynq_zed.h) contains the following line:
> 
>`#define PHYS_SDRAM_1_SIZE (512 * 1024 * 1024)`

...  

> You'll also need to change the device tree in the kernel: arch/arm/boot/dts/zynq-zc702.dts. The second value after <reg> is the size, here set to 512M.

加えて、FSBLも変更が必要になるようだ。

<hr>
上記では変更されなかった。
要調査。

<hr>
中国語がよく分からないが、変更箇所の参考にはなる。
http://46aae4d1e2371e4aa769798941cef698.devproxy.yunshipei.com/zhangyu_eeprom/article/details/38471463
BeagleBoneBlack Angstrom 静的ip割り当て


BeagleBOneBlackのAngstromeでネットワーク設定を行います。

##アドレスの割り当て
/etc/network/interfaceを編集します
デフォルトでdhcpで割り当てられるようになってるのでコメントアウトし、staticで割り当てしていきます。


```/etc/network/interface

...
#iface eth0 inet dhcp
iface eth0 inet static
    address <address>
    netmask <address>
    network <address>
    gateway <address>
    dns-nameserver  <address>
    ...
```

記述後、eth0を構築します。記述した際、私はインデントを半角空白2つでやっていました。そのためifupでエラーが起こり構築できませんでしたが、空白4つにすると無事構築できました。

```
$ ifdown eth0
$ ifup eth0
```

ifconfigをつかい、正しくipアドレスが割り当てられpingが通ることを確認してください。

##自動化

このままだとbeagleboneをつけるたびにeth0を構築しなおさないといけないので自動化します。

/etc/resolv.confは起動するたびに書きかわるらしいので、起動するたびに指定したnameserverが記述されるようにしていきます。

まず、次のファイルを作成します。

```resolv.conf.bak
nameserver <address>
```

今作成したファイルがresolv.confに書き込まれるように設定します。そのために起動するたびに実行されるファイルを作成します。

```/etc/init.d/setnetwork
#!/bin/sh
sleep 5
cp /etc/resolv.conf.bak /etc/resolv.conf
sleep 5
ifup eth0
```

実行権限の付与

```
$ chmod +x /etc/init.d/setnetwork
$ update-rc.d /etc/init.d/setnetwork defaults 99
```

update-rc.dは起動時に実行するファイルを指定するツール。99は一番最後で実行。削除したい時はupdate-rc.d -f setnetwork removeと入力する。

参考サイトをみながらここまでやりましたが、うまくいきませんでした。どうしても起動時にうまくifupされない...なので、/etc/network/interfaceを次のようにしました。

```/etc/init.d/interface
...
auto eth0
iface eth0 inet static
...
```

##sshメモ
sshで接続しようとしたら以下のように接続を拒否られました。


@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

検索すると次のサイトに理由が書いてありました。

http://qiita.com/wnoguchi/items/690f3f4651f8f11e4ed3

過去に同じアドレスで接続しているため、記憶している情報と違う？ゴミが溜まってるっぽい！
なので一旦情報を削除して接続しなおします。


`$ ssh-keygen -R IPアドレス`

その後、sshで接続することができました。

##サンコウサイト

http://usepocket.com/c/UP287.html
perlでズンドコゲッター

#概要
paizaのperlでズンドコゲッターやってみた。
#実際
https://paiza.io/projects/f9VkGBxVGa1IPU6UYwuAgQ
#サンプルコード
```
#!/usr/bin/perl
use strict;
use warnings;
use utf8;
use LWP::UserAgent;
use HTTP::Cookies;
use Encode;

binmode(STDOUT, ':utf8');

sub zundoko
{
    my $ua = LWP::UserAgent->new();
    my $res = $ua->get('http://ohijs0.paas.jp-e1.cloudn-service.com/zundoko');
    my $cont = decode('utf-8', $res->content() || '');
    return $cont;
}
my $i = 0;
while (1) 
{
    my $r = zundoko();
    print $r." ";
    if ($r eq 'ドコ') 
    {
        if ($i == 4) 
        {
            last;
        }
        $i = 0;
    }
    else
    {
        $i++;
    }
}
print "キ・ヨ・シ！\n";
```
Aerospikeの紹介

こんにちは、株式会社D2C 技術開発部の二瓶（にへい）です。

**d-tech** の中から今回お届けするのは、NoSQLについてです。
NoSQLの中でも特に最近話題の「**Aerospike**」についてお送りしていきます。

# Aerospikeの紹介
まずは入門編として下記について説明します。

1. NoSQLとは？
2. Aerospikeとは？

## 1.NoSQLとは？
ズバリ！RDBMS以外のデータベースのことです！

データベースといえばOracleやMySQLなどのRDBMS(リレーショナルデータベース管理システム)がありますが、これ以外のデータベースが **Not only SQL (NoSQL)** と呼ばれています。

違いはリレーショナルモデル(関係モデル)を採用しているかどうかです。

RDBMSではデータを表(テーブル)で保持してデータ同士の関係性を定義することで厳格なデータモデルを表現できます。
カラムという単位で項目が分かれていて、SQL文を使用して複雑で高度な問い合わせを行うことができます。

NoSQLは関係モデルの複雑で高度な問い合わせを捨てている代わりに、高速です。
MySQLなどに対してTPS(速さの指標単位)の公称値が桁が2つ3つ違うものもあったりします。

世間(!?)一般的なメリデリはこちら。
![59fb0b93-64ab-8aef-c9a8-b4835f05a8b9.png](https://qiita-image-store.s3.amazonaws.com/0/111999/3785f2e2-0cda-3f4c-686e-352c70916254.png)

## 2.Aerospikeとは？
今回の主題であるAerospikeについてですが、まずは概要と特徴についてお伝えします。

### ◯概要
アメリカのAerospike社が開発したNoSQLの一種で、C言語で書かれていて以前は商用のみでしたが、2014年6月にオープンソース化されました。
aerospikeはロケットの先端部分のことを意味しているそうです。
特にアドテク界隈では最近よく採用されています。

### ◯特徴
・スピード
速いです。
1MTPSを公称していますが、今後のロードマップでは3MTPSを目指すとされています。

・SSDモード
Aerospikeには3つ動作モードがあります。
①インメモリモード
②メモリ＋SSDモード
③インメモリ＋HDDモード

なかでも特徴的なのがSSDモードです。
SSDをファイルシステムを介さずにRAWデバイスとして使うことで、OSによるIOバッファ管理のオーバーヘッドが低減されるらしいです。
他にも自動デフラグとかSSDの寿命を延ばす工夫がされているそうです。

インメモリのNoSQLはいろいろありますが、性能を担保するためにはデータが全てメモリに乗っている必要があるため、どうしてもデータが大きくなってくると、相当ハイスペックなサーバを用意しなければいけませんが、SSDならスケールアウトも比較的安価にできますね。

・クラスタ化
Aerospikeにはクラスタ化の機能があります。
設定が自動化されていて、クラスタへのサーバ追加が自動で簡単に行えたりします。
詳細はまた別の機会で説明できればと思います。


次回は、システム構成やデータ型についてお伝えする予定です。
UnityのGUILayoutで右寄せ表示

ただ間に `FlexibleSpace()` を挟むだけでは画面全体に対して右寄せにはできなくて手間取ったので、メモしておく

## 画面全体に対して右寄せにならなかった例

```csharp
void OnGUI()
{
    GUILayout.BeginHorizontal("box");

    GUILayout.Label("Left");
    GUILayout.FlexibleSpace();
    GUILayout.Label("Right");

    GUILayout.EndHorizontal();
}
```
![スクリーンショット 2016-05-30 18.36.21.png](https://qiita-image-store.s3.amazonaws.com/0/38840/6ae7ce35-e2d2-3e73-a0e7-622ab99e6ebe.png)

```csharp
void OnGUI()
{
    GUILayout.BeginHorizontal("box");
    {
        GUILayout.Label("Left");
        GUILayout.FlexibleSpace();
        
        GUILayout.BeginVertical("box");
        {
            GUILayout.Label("Right 1");
            GUILayout.Label("Right 2");
        }
        GUILayout.EndVertical();
    }
    GUILayout.EndHorizontal();
}
```
![スクリーンショット 2016-05-30 18.40.12.png](https://qiita-image-store.s3.amazonaws.com/0/38840/afd5972c-6a44-b2bb-1f94-4e6cb1b5bdea.png)


## GUILayout.BeginArea を使う

`GUILayout.BeginArea` を利用してスクリーンサイズのエリアを作ってやることで、FlexibleSpaceが画面端まで伸びてくれるようになった。
http://docs.unity3d.com/ScriptReference/GUILayout.BeginArea.html

```csharp
void OnGUI()
{
    GUILayout.BeginArea(new Rect(0, 0, Screen.width, Screen.height));
    GUILayout.BeginHorizontal("box");
    {
        GUILayout.Label("Left");
        GUILayout.FlexibleSpace();
        
        GUILayout.BeginVertical("box");
        {
            GUILayout.Label("Right 1");
            GUILayout.Label("Right 2");
        }
        GUILayout.EndVertical();
    }
    GUILayout.EndHorizontal();
    GUILayout.EndArea();
}
```

![スクリーンショット 2016-05-30 18.49.08.png](https://qiita-image-store.s3.amazonaws.com/0/38840/44ea7bc0-9d75-8d0b-c608-2b9ed3b53763.png)


デバッグ機能などをサクッと右上につけようと思った時などにどうぞ。
横幅のサイズがわかってれば、そのRectを適当にBeginVerticalとかに渡せばいいけど、面倒なことを意識せずに右によって欲しかったのでこうした。

もっと簡単でスマートな方法などありましたらご教授願いします :bow:
Rack mini profilerってどのようなGem?



##rack-mini-profilerというgemを追加すると簡単なパフォーマンス計測ができるようになるのでこれを使用してみる。



[Railsメモ(18) : rack-mini-profilerで簡単なパフォーマンスを計測する](http://wonderwall.hatenablog.com/entry/2015/08/16/160845)
Oracle Database Cloud 各種ログのメンテナンス

意外に知られていないのですが、Oracle Database Cloudの自動化(Automated)インスタンスの場合、各種ログのメンテナンスが自動的に行われ、古いログがパージされるように設定されています。

対象となるのは、アラート・ログや、リスナー・ログなどの基本的なファイルから、Oracle Cloudが実行するバックアップ・スクリプトのログ(obkup.log)などについても、それぞれ個別に保存期間が設定されており、必要以上にディスク領域を圧迫しないように設定されています。

# 実際にログファイルがメンテナンスされる仕組み

Oracle Database Cloud で作成した自動化(Automated)インスタンスの中には、メンテナンス用の各種スクリプトが用意されていますが、ログファイルはその中の /var/opt/oracle/cleandb/cleandblogs.pl という perl スクリプトにて実行されます。
このスクリプトが crond によって毎週1回起動するように設定されています。

実際に /etc/crontab を除いてみると、以下のようなエントリーが記述されています。

```lang:/etc/crontab
\# Example of job definition:
\# .---------------- minute (0 - 59)
\# |  .------------- hour (0 - 23)
\# |  |  .---------- day of month (1 - 31)
\# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
\# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
\# |  |  |  |  |
\# *  *  *  *  * user-name command to be executed

(略)

15 03 * * 6 oracle /var/opt/oracle/cleandb/cleandblogs.pl
```

例えばこの環境では、毎週土曜日の15:03に、定期的に起動されるように設定されています。
この時間は、環境作成時にランダムに設定されますので、環境によって時間は違ってきます。
時間や頻度を変えたい場合には、root権限で /etc/crontab を直接書き換えます。

もし、**障害を起こした環境でSR問合せ中など、ログを保存しておきたいような自体が発生した場合には、/etc/crotab を修正してスクリプトが実行されないようにしてください**。また、終わった後再びログメンテナンスをオンにすることもお忘れなく。

# ログファイルの保持期間の設定

各ログファイルの保持期間は、/var/opt/oracle/cleandb/cleandblog.cfg の中に設定されています。
実際のエントリーは、以下のようになっています。

```lang:/var/opt/oracle/cleandb/cleandblog.cfg
#
# cleandblogs.cfg
#
# all values are in days
# ##
AlertRetention=14
ListenerRetention=14
AuditRetentionDB=14
CoreRetention=7
TraceRetention=7
shortpRetention=7
longpRetention=30
LogDirRetention=14
gfLogRetention=14
obkupLogRetention=30
```

(注)この値は2016年5月に作成したインスタンス(v16.2.3)の初期値です、インスタンス作成のタイミングによって設定は異なる場合がありますので、詳細はお手元のインスタンスでご確認ください

この数値を直接書き換えることで、各ログのパージまでの期間を、インスタンスごとに設定することができます。

各設定値の詳細は、マニュアルに記述があるので詳細はこちらをご覧ください。

- [Database as a Serviceインスタンスでのログおよび診断ファイルの管理](http://docs.oracle.com/cd/E60665_01/dbcs_dbaas/CSDBI/GUID-AED2A8A5-EE13-4D04-8121-EA0E379AA1BD.htm)
定期的にスクリーンショットをとる

screencapture コマンドを launchd で一定間隔で実行する。
保存先をクラウド的なものにすると遠隔監視をゆるくやるのにちょうどよい。

マシン名と日付でキャプチャを保存するシェルを用意する。

```sh:capture.sh
#!/bin/bash

/usr/sbin/screencapture -C -T0 -x ~/`hostname -s`_`date +%Y%m%d%H%M`.png 
```

これを launchd で実行する。

```xml:user.app.capture.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>Label</key>
	<string>user.app.capture</string>
	<key>RunAtLoad</key>
	<true/>
	<key>StartInterval</key>
	<integer>6000</integer>
	<key>Program</key>
	<string>/Users/user-name/capture.sh</string>
</dict>
</plist>
```
UITableViewのセルを一番下までスクロールさせると位置がズレる問題の対処

UITableViewである位置へスクロールさせる方法としてscrollToRowAtIndexPathを使いますが、viewWillAppearで一番最後のセルを指定すると、cellの生成タイミングと合わずに、位置がズレる問題が発生していました。

その場合以下のように、極わずかな遅延を発生することで回避ができました。

```swift
override func viewWillAppear(animated: Bool) {
    if isFirstTime {
        tableViewScrollToBottom(false)
        isFirstTime = false
    }
}

func tableViewScrollToBottom(animated: Bool) {

    let delay = 0.1 * Double(NSEC_PER_SEC)
    let time = dispatch_time(DISPATCH_TIME_NOW, Int64(delay))

    dispatch_after(time, dispatch_get_main_queue(), {

        let numberOfSections = self.tableView.numberOfSections()
        let numberOfRows = self.tableView.numberOfRowsInSection(numberOfSections-1)

        if numberOfRows > 0 {
            let indexPath = NSIndexPath(forRow: numberOfRows-1, inSection: (numberOfSections-1))
            self.tableView.scrollToRowAtIndexPath(indexPath, atScrollPosition: UITableViewScrollPosition.Bottom, animated: animated)
        }

    })
}
```


参照
http://stackoverflow.com/questions/26244293/scrolltorowatindexpath-with-uitableview-does-not-work
正規表現でグループの繰り返しを回数指定する方法を教えて下さい

"(\s*)(\S*)(\s*)(\S*)(\s*)(\S*)(\s*)(\S*)(\s*)(\S*)"
(\s*)(\S*)を5回繰り返しています。
最後のグループを10番目と指定できると助かります。
よろしくお願いします。
バックスラッシュは円マークです
－－－－－－－－－－－－－－
【補足】(2017/08/25)
(入力)
=REGEXP("  123 abc ABC", "((\s+)(\S+)){3}",1-1)
=REGEXP("  123 abc ABC", "((\s+)(\S+)){3}",2-1)
=REGEXP("  123 abc ABC", "((\s+)(\S+)){3}",3-1)
(出力)
123
abc
ABC
Rlogin(ターミナルソフト)のフォントサイズを変更するオプションの場所

* [表示]→[オプション設定]
* 左側の[スクリーン]をクリック
* 右側の[スクリーン]のエリアの中から、いずれかを選択
  * 一行あたりの文字数からフォントサイズを決定（適当な文字数を入力する）
  * フォントサイズから一行あたりの文字数を決定（適当なフォントサイズ(単位：ピクセル)を入力する）

# 参考にさせていただいたページ（感謝！）
- http://nanno.dip.jp/softlib/man/rlogin/#SCREENOPT
Rackって何?

## ◉ Rackとは??

Web Server <---> Rack <---> Web Framework
サーバとフレームワークを結ぶインタフェースを指します。


RailsもSinatraもPadrinoも全ては、Rackの土台上で出来ている。

Rackアプリケーションは、引数を1つ取り3つの値を返すcallを呼び出すことができるオブジェクトであると定義されており、Rack protocolと呼ばれる仕様を満たすことが期待されている。


1.Status Code
  (to_iされた場合に、100以上の数字になること。HTTPステータスコードになる。)
2.Response Header
  (eachできて、keyとvalueをyieldすること。HTTPレスポンスヘッダに使われる。)
3.Response Body
  (eachできて、Stringをyieldすることと。HTTPレスポンスボディに使われる。)


```
Unity で WWW や UnityWebRequest などの機能を使って HTTP リクエストする際、Cookie を操作することができなくてセッションの維持に困ったので、サーバー側で以下の Rack middleware を作って使うことで問題を解決しました（Unity で Cookie 対応のアセットを使うとか他にもいろいろやりようはあると思いますが、今回はそうしなかった）。

```


### ◉ Rack Middleware
サーバーとフレームワークの間で実行したい処理を定義する。




##Rackアプリケーション

Rackアプリケーションは、引数を1つ取り3つの値を返すcallを呼び出すことができるオブジェクトであると定義されており、Rack protocolと呼ばれる仕様を満たすことが期待されている。
RailsやSinatraで書くアプリケーションがこれに属する。
Rack protocolに定義されているcallの引数や返り値の具体的な内容は以下の通りである。




http://qiita.com/higuma/items/838f4f58bc4a0645950a
FFmpeg/libavformatでオンメモリ・データ書き出し

FFmpeg/libavformatでオンメモリ・データ書き出しを行いたい場合、出力専用のメモリストリーム(memory stream) APIを利用する。

- [`avio_open_dyn_buf`](https://ffmpeg.org/doxygen/3.0/avio_8h.html#adb5259ad07633518173eaa47fe6575e2)
- [`avio_close_dyn_buf`](https://ffmpeg.org/doxygen/3.0/avio_8h.html#a8faed62ce72e7411cbea2356494af8ce)


```c
AVFormatContext* fmtctx;
// avformat_alloc_output_context2等でコンテキスト初期化
// avformat_new_streamでコンテキストにストリーム追加

AVPacket packet;
// avcodec_encode_video2または_audio2でpacket生成

avio_open_dyn_buf(&fmtctx->pb);
av_write_frame(fmtctx, &packet);
uint8_t *data = NULL;
int size = avio_close_dyn_buf(fmtctx->pb, &data);
// データをdata, sizeとして取得
av_free(data);
```
Bitbucketでリモートリポジトリ


OSの環境に依存せずに、作業を進めたいこともありリモートリポジトリをGitのクライアントアプリSourceTreeとBitbucketを使うことに。

そもそもBitbucketとは、アトラシアンが運営している、ソフトウェア開発を主としたプロジェクトのための、ウェブホスティングサービス。2012年5月現在プライベートリポジトリは無制限、ユーザーは5人まで。

アトラシアン社は、オーストラリアのシドニーに本社を置くソフトウェア企業。


- Bitbucketにリポジトリの作成（リポジトリ名とリポジトリタイプGitを作成）
- BitbucketのクローンHTTPSのgit cloneを抜かしたアドレスをコピーし、SourceTreeのリモートタブを選択しリポジトリに追加。
- 指定したSourceTreeのリポジトリをプッシュすれば、リモートリポジトリに保存。
- 別の端末でBitbucketにログインし、SourceTreeのクローンを選択して、SourceTreeにクローン
- クローンしたファイルを選択して、SourceTree上でプルをすればそのファイルを全てダウンロードができる。（デフォルトの「次のリモートからプル：origin　パスもデフォルトで指定したクローンHTTPS」、プルするリモートブランチ：master、次のブランチにプルmaster。）

参照：<a href="http://www.backlog.jp/git-guide/intro/intro3_3.html" target="_blank">リモートリポジトリからプルする【リポジトリの共有】 | サルでもわかるGit入門 〜バージョン管理を使いこなそう〜 | どこでもプロジェクト管理バックログ</a>

参照：<a href="http://personal-studio9.com/sourcetree_push/" target="_blank">SourceTreeでローカルリポジトリからリモートへプッシュする設定 | studio9 personal</a>

## 用語説明

- フォーク（fork）:Bitbucket上でマスターリポジトリのコピーを作成
- クローン（clone）:リポジトリをローカルPCへコピーすること。
- プルリクエスト（pull request）:ローカルPCで修正したリポジトリをマスターリポジトリへの反映依頼をすること。
django始めるまでの手順メモ

[Django Fundamentals](https://app.pluralsight.com/library/courses/django-fundamentals/table-of-contents)を参考

#インストール

```
$ which python3
/◯◯/......
$ virtualenv -p /◯◯/...... フォルダ名
$ cd フォルダ名
$ . bin/activate
$ pip install django
$ python
>>>  import django
```
で、たぶんあってる

インストール後は

```
$ cd フォルダ名
$ . bin/activate
```
で使えるはず

#インストール後

```
$ django-admin.py startproject プロジェクト名
$ cd プロジェクト名
$ python manage.py runserver
```

出てきたURLをブラウザに貼り付ける
【Java：備忘録】ファイルの読み込み＆書き込むをするPG

**概要：**
引数1で入力ファイルを指定し、引数2で出力するフルパスを指定するプログラム.

業務で良くある？データの加工処理が必要になった場合のテンプレ。
コード内の「args1で指定したフルパスへの出力処理～」の箇所に加工するコードを書き込む。

サンプルでは読み込んだファイルのダブルクォーテーションを削除する処理を行っている。

実行する際は
SAMPLE 入力ファイルのフルパス 出力ファイルのフルパス
で実行可能。

テンプレートとして使えそうなので記載。
バッチから起動する＆System.out.printでログも出力出来ます。
System.out.printが組み込まれているのはその為.
System.out.printを日時を加工したメソッドを用意すればよかったと今では後悔。

何か初期処理が必要であれば、initializeメソッド等に書き込む（予定。書き込む事は未だなかったけど。）

**ソース：**

```java
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.util.Calendar;


public class SAMPLE {

	/** システム日付 */
	public static String nowDay = null;

	/** システム時刻 */
	public static String nowDate = null;

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		// ファイルの読込と、出力ファイル生成処理.
		try {
			// 初期処理
			initialize();

			System.out.println(nowDate + "Process Start");
			System.out.println(nowDate + "初期処理 終了");

			// 出力対象となるデータレコード
			StringBuffer bf = new StringBuffer();

			// 引数がない場合は処理を終了させる.
			if (args.length != 2) {
				System.out.println(nowDate + "引数は2つ指定してください.");
				System.out.println(nowDate + "処理を中断します....");
				System.exit(1);
			}

			// 読み込むファイルの名前
			String inFile = args[0];				// 入力ファイルのフルパス
			String outFile = args[1];				// 出力ファイルのフルパス

			// ファイルオブジェクトの生成
			File inputFile = new File(inFile);

			// 入力ストリームの生成（文字コード指定）
			FileInputStream fis = new FileInputStream(inputFile);
			InputStreamReader isr = new InputStreamReader(fis,"SJIS");
			BufferedReader br = new BufferedReader(isr);

			String msg = null;

			System.out.println(nowDate + "各種宣言処理まで完了");

			// args0で読込したファイルをループする。その際、ダブルクォーテーションを外していく..
			while ( ( msg = br.readLine()) != null ) {
				// 現在読み込んでいるHDレコード作成
				bf.append(msg.replace("\"", ""));
				bf.append("\r\n");
			}

			System.out.println(nowDate + "入力ファイル読込処理 完了");

			// args1で指定したフルパスへの出力処理
			// 処理をしたデータを片っ端から突っ込む。
			FileOutputStream fos = new FileOutputStream(outFile);
			OutputStreamWriter osw = new OutputStreamWriter(fos,"SJIS");
			PrintWriter pw = new PrintWriter(osw);

			pw.print(bf.toString());

			System.out.println(nowDate + "出力ファイルへの書込完了");

			// 後始末
			pw.close();
			br.close();

		// エラーがあった場合は、スタックトレースを出力
		} catch(Exception e) {
			e.printStackTrace();
			System.out.println(nowDate + "エラーが発生しました。処理を中止します。");
			System.exit(1);
		}

		System.out.println(nowDate + "Process End");
	}

	/**
	 * 初期処理.
	 *
	 */
	private static void initialize() {

		// 日付取得・時刻取得
		Calendar now = Calendar.getInstance();
		int yyyy = now.get(Calendar.YEAR);
		int mm = now.get(Calendar.MONTH) + 1;
		int dd = now.get(Calendar.DATE);
		int h = now.get(Calendar.HOUR_OF_DAY);
		int m = now.get(Calendar.MINUTE);
		int s = now.get(Calendar.SECOND);

		nowDate = String.valueOf(yyyy) + "/" + String.valueOf(mm) + "/" + String.valueOf(dd) + " " + String.valueOf(h) + ":" + String.valueOf(m) + ":" + String.valueOf(s) + "：";
	}

}


```
$rootScope.$onで登録した処理をキャンセルする方法

シングルトンなサービスとかで使うとハマりがちなやつ

```js
var hogeCanceller;
service.bindHoge = function(cb){

  // hoge処理が登録済みの場合はキャンセルする
  if( hogeCanceller ) hogeCanceller();

  // $onで登録した処理をキャンセルする処理を取得
  hogeCanceller = $rootScope.$on(
    'hoge',
    function(){
      //...
      cb();
    }
   );
};
```

ちなみに以下のようにして、登録済み処理のキャンセル処理を取得することはできない

```js
hogeCanceller = $rootScope.$on('hoge');
```
Vagrantのインストール、設定手順

## 概要
WindowsにVagrantを入れたときの設定手順メモ。

[関連記事]
[Vagrantでboxファイル作成](http://qiita.com/Esfahan/items/46da3ce1893a67789b58)
[VagrantでSSH鍵の設定](http://qiita.com/Esfahan/items/e5f707dc6d116c2cc751)

## 必要要件
Windows上で、Git-bashを使います。その他のクライアントソフトでもOKです。
[Git-bashダウンロード](https://git-scm.com/downloads)


## VirtualBoxインストール
OSに合ったVirtualBoxをダウンロードしてインストール
https://www.virtualbox.org/wiki/Downloads

## Vagrantのインストール
OSに合ったVagrantをダウンロードしてインストール
https://www.vagrantup.com/downloads.html


## VirtualBoxにboxファイルを登録する

今回はCentOSを登録します。

```
[Git-bash]$ vagrant box add {VM名} {boxファイルダウンロードURL}
```

CentOS6.7の場合、下記のようなコマンドになります。
VM名は、自分の好きな名前でOKです。ちなみに、結構時間がかかります。

```
[Git-bash]$ vagrant box add centos6-7 https://github.com/CommanderK5/packer-centos-template/releases/download/0.6.7/vagrant-centos-6.7.box
```

CentOS7.2

```
[Git-bash]$ vagrant box add bento/centos-7.2 https://atlas.hashicorp.com/bento/centos-7.2
```

```
[Git-bash]$ vagrant box add centos72 
https://github.com/CommanderK5/packer-centos-template/releases/download/0.7.2/vagrant-centos-7.2.box
```

CentOS7.1

```
[Git-bash]$ vagrant box add centos71 https://github.com/holms/vagrant-centos7-box/releases/download/7.1.1503.001/CentOS-7.1.1503-x86_64-netboot.box
```

他のOSの場合は、下記から選んでください。
http://www.vagrantbox.es/

### boxのダウンロードが終わったら

下記コマンドで、利用可能なbox一覧が表示できます。

```
[Git-bash]$ vagrant box list
centos6-7 (Virtualbox, 0)
```

## Vagrantfileの作成

下記のコマンドを、box名を指定して実行すると、カレントディレクトリにVagrantfileが生成されます。

```
[Git-bash]$ vagrant init centos6-7
```

生成されたVagrantfileを編集します。

```lang:Vagrantfile
# VMのIPアドレスを設定
config.vm.network "private_network", ip: "192.168.33.10"

# GUIモードの設定をONにする場合は設定(不要ならコメントアウトのままでOK)
config.vm.provider "virtualbox" do |vb|
  # Display the VirtualBox GUI when booting the machine
  vb.gui = true
end
```

## VM起動
Vagrantfileがあるディレクトリで下記コマンドを実行

```
[Git-bash]$ vagrant up
```

初期パスワードは、user:vagrant, password:vagrant
`sudo su -`でrootになれる。

### sshで接続する場合

`vagrant up`で立ち上げたあと、
Vagrantfileがあるディレクトリで、下記コマンドで接続することも可能。

```
[Git-bash]$ vagrant ssh
```

Teratermなど、他のクライアントソフトで接続する場合は、
Vagrantfileの`config.vm.network`で設定したIPアドレスで接続できる。

```
$ ssh 192.168.33.10
```

## vagrantコマンド一覧

| command | description |
| --- | --- |
| vagrant box add {VM名} {boxファイルダウンロードURL} | box追加 |
| vagrant box list | 利用可能box一覧確認 | 
| vagrant box remove {box名} | boxの削除 |
| vagrant init | vagrant 初期化(Vagrantfileの作成) |
| vagrant up | vagrant 起動 |
| vagrant ssh | vagrant ログイン |
| vagrant halt | vagrant 終了 |
| vagrant reload | vagrant リロード(halt + up) |
| vagrant destroy | vagrant 破棄 |


以上

[参考]
- [Windows上にVirtualBox+VagrantでCentOS環境構築](http://qiita.com/TakashiOshikawa/items/d2fb48d59e9e316af9a2)
- [Vagrantの使い方](http://qiita.com/IK12_info/items/28ac74bfa92a39e886ef)
Azure WebAppsでnode.jsアプリ 500 or 404カスタムエラーページが上書きされてしまう

Azure WebAppsでnode.jsアプリ作成時。
httpステータスコード500や404用にカスタムページを用意したつもりでも、以下のような文言で上書きされてしまったあなた。

500
`The page cannot be displayed because an internal server error has occurred.`

400
`The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.`


カスタムエラーページを表示したい場合、Web.configの<system.webServer>内に以下を追記する必要があるらしい。

`<httpErrors existingResponse="PassThrough" />`


参考↓
https://www.iis.net/configreference/system.webserver/httperrors
iOSアプリ開発用のアプリ内デバッガ作った

##作ったもの
[CocoaPods](http://cocoapods.org/pods/DebugHead)

![Screenshot.gif](https://raw.githubusercontent.com/malt03/DebugHead/master/Screenshot.gif)

@noppefoxwolf のコードを結構参考にして作りました。

##用途
iOSアプリを作っていて、現在のUserDefaultsの状態見たり、接続先のサーバ変えたり、DB内のデータみたりしたいこと、あると思います。
そんな時に使いやすいデバッガ作りました。
デバッガと言っても、要するにいつでも押せてどこにでも動かせる、デバッガを開くボタンを簡単に作るやつです。
かつ、その中に表示する物をプラグインで作れるようにしました。

##使い方
Exampleと、Recommended Pluginsを見てもらうのが早いと思います。

###初期化
AppDelegateで、シングルトンに対して初期化メソッド呼ぶだけです。
引数に使いたいデバッガのクラスを渡します。

ちなみに他の引数では、初期化位置の指定、メニューのソートの有無、デバッガのフッターに出すviewの指定が出来ます。

```swift:AppDelegate.swift
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
  DebugHead.sharedInstance.prepare(menuClasses: [DebugMenuExit.self, DebugMenuHideDebugHead.self, DebugMenuFooViewController.self])
    return true
}
```

###プラグインの作り方
プロトコルに準拠したクラスを作って初期化メソッドに渡すだけです。

```swift:DebugMenu
public class DebugMenuFoo: DebugMenu {
  // tableViewで表示される名前。
  public static let debugMenuTitle = "Title"
  // そのメニューの危険性。メニューの表示色がかわる。sortがtrueだと危険性順にソートされる。
  public static let debugMenuDangerLevel = DebugMenuDangerLevel.[None or Low or High or Extreme] 
  // メニューのところのアクセサリー。
  public static let debugMenuAccessoryType = UITableViewCellAccessoryType.None
  // メニューが選択された時の動作。UIViewControllerのインスタンスを返すと、それが表示される。
  public static func debugMenuSelected(debugHead: UIView, debugMenuTableViewController: UITableViewController) -> UIViewController? {
    // Do something
    return nil
  }
}
```

以上！
ぜひプラグイン作って公開して下さい！(CoreDataブラウザとかRealmブラウザとか…ほしい）
バイトオーダーの確認方法

ふと直近のMacはリトルエンディアンなのか、ビッグエンディアンなのか気になったので以下の方法で調べてみました。

- ターミナルから以下を実行します

```
 echo -n "12345" | od -t x
```

-  （参考）32ビット機ビッグエンディアンでの出力結果

```
0000000 31323334 35000000
0000005
```

- （参考）32ビット機リトルエンディアンでの出力結果

```
0000000 34333231 00000035
0000005
```

下記の出力となったので、上２つと照らしあわせてみると予想通りリトルエンディアンでした。まあ、Intelだからそうだよね。

```
0000000          34333231        00000035
0000005
```