OmniAICreator/Qiita-1.07M huggingface dataset:
組み合わせを展開するcombination-extractorをつくった

組み合わせを展開するcombination-extractorというRubygemを作りました

- https://github.com/akiroom/combination-extractor
- https://rubygems.org/gems/combination-extractor

```rb:実行方法
# こんな感じのハッシュを渡すと、
# {
#   fruit: ['apple', 'orange'],
#   city: ['NewYork', 'London', 'Tokyo']
# }

CombinationExtractor.extract({fruit: ['apple', 'orange'], city: ['NewYork', 'London', 'Tokyo']})
=> [{:fruit=>"apple", :city=>"NewYork"}, {:fruit=>"apple", :city=>"London"}, {:fruit=>"apple", :city=>"Tokyo"},
    {:fruit=>"orange", :city=>"NewYork"}, {:fruit=>"orange", :city=>"London"}, {:fruit=>"orange", :city=>"Tokyo"}]

# こんな感じに展開してくれます
# [
#   {:fruit=>"apple", :city=>"NewYork"},
#   {:fruit=>"apple", :city=>"London"},
#   {:fruit=>"apple", :city=>"Tokyo"},
#   {:fruit=>"orange", :city=>"NewYork"},
#   {:fruit=>"orange", :city=>"London"},
#   {:fruit=>"orange", :city=>"Tokyo"}
# ]
```

# 何が嬉しいのか

Rspecで同じパターンの組み合わせで一部だけ変わるテストを書く時に、contextの入れ子が続いてつらかったので、context-extractorをつくりました。

```rb
def example_similar_to(user_hash)
  user_hash[:birthday] == Time.new(1988, 12, 30) &&
    user_hash[:gender] == :male
end

describe 'About example example_similar_to method' do
  let(:nickname) { nil }
  let(:gender) { nil }
  let(:birthday) { nil }
  let(:user) { { nickname: nickname, gender: gender, birthday: birthday } }

  user_condition = {
    nickname: ['John', 'Ken', 'Jessie'],
    gender: [:female, :male],
    birthday: [Time.new(1988, 12, 30), Time.now]
  }
  # Get 2*2*3 = 12 patterns
  pattern_list = CombinationExtractor.extract(user_condition)

  pattern_list.each do |pattern|
    describe "user who is #{pattern.to_s}" do
      # NOTE: Set pattern to lazy evaluated variable
      pattern.each { |key, value| let(key) { value } }

      should_value = pattern[:gender] == :male && pattern[:birthday] == Time.new(1988, 12, 30)
      it "should return #{should_value}" do
        expect(example_similar_to(user)).to eq(should_value)
      end
    end
  end
end
```

![](https://camo.githubusercontent.com/d782f75db9dfa46a801b5e5624d9dd0f6046f373/68747470733a2f2f692e6779617a6f2e636f6d2f34653866656564626138373262383465643430313634356632383230633836372e706e67)

Rspecに関してはもっと良いやり方が他にありそうな気もするのですが、パッと探して見つからなかったので、とりあえずはたまにこのように展開するコードを書いています。
【ajaxzip3】郵便番号を入力すると住所が自動入力されるライブラリ

郵便番号を入力すると自動で住所を入力してくれるライブラリの使い方です。
簡単過ぎて感激です。
開発者はユーザー思いのとっても優しい人なんだろうと勝手に妄想してしまいました。


以下URLよりajaxzip3をダウンロードし設置、javascriptを記述。
[ajaxzip3](https://github.com/ajaxzip3/ajaxzip3.github.io)

```
<script type="text/javascript" src="js/ajaxzip3.js"></script>
```


ダウンロードめんどくせーって方は以下の記述でもOK。

```
<script src="https://ajaxzip3.github.io/ajaxzip3.js" charset="UTF-8"></script>
```

まず郵便番号と住所のフォームを設置。

```
<form>
　　　　<input type="text" name="zip" />
  <input type="text" name="address" />
</form>
```

郵便番号のinputに以下を追加するだけ。

```
onKeyUp="AjaxZip3.zip2addr(郵便番号（全てまたは上3桁）,郵便番号（下4桁）,都道府県,市区町村,丁目番地,町域大字);"
```

上記のフォームに設置する場合、

```
<form>
  <input type="text" name="zip" onKeyUp="AjaxZip3.zip2addr(this,'','address','address');"/>
  <input type="text" name="address" />
</form>
```

たったこれだけ。マジ簡単過ぎる。。。
ちなみに郵便番号ハイフン有り無し対応。マジ便利過ぎる。。。

郵便番号上３桁と下4桁を分けた場合や住所が分割されている場合も対応可能。
その場合に設置は実際使った際に追記します。
React Native Redux ドキュメント 参考リンク集


英文ドキュメント
- [Redux Document](http://redux.js.org/index.html)

React Native 基礎編
------------------
React Nativeに使うルーティングについて示されております．具体例は無いですが，参考となるリンクの紹介等まとめてくれています
- [React Native - Router(Navigator/Ex-Navigator)](http://qiita.com/shohey1226/items/7a4d355de17187da2758)

ES6版でのReactの書き方をかいてくれています．Nativeにもうまく応用できます．
- [ES6版React.jsチュートリアル](http://qiita.com/nownabe/items/2d8b92d95186c3941de0)

Redux基礎編
----------
Redux DocumentのBasics部分をわかりやすく日本語翻訳してくれてます．
- [超訳 Redux Documentation - アクション(action)](http://qiita.com/kobanyan/items/367850d28a838207e47d)
- [超訳 Redux Documentation - レジューサ(reducer)](http://qiita.com/kobanyan/items/ec9ebfeadb1d28e8e489)
- [超訳 Redux Documentation - ストア(store)](http://qiita.com/kobanyan/items/5709fabcceb71a086507)
- [超訳 Redux Documentation - データフロー](http://qiita.com/kobanyan/items/bb71efcf1a0546d17b03)

ソースコードを絡めながら説明してくれています．
- [Redux 基礎：Action 編](http://qiita.com/yasuhiro-okada-aktsk/items/09ab40af831c6d73491b)
- [Redux 基礎：Reducer 編](http://qiita.com/yasuhiro-okada-aktsk/items/9d9025cb58ffba35f864)
- [Redux 基礎：Middleware 編](http://qiita.com/yasuhiro-okada-aktsk/items/1fe3df267a6034d970c1)
- [Redux: Actionのコーディング規約 と redux-actions](http://qiita.com/yasuhiro-okada-aktsk/items/a14f7f37262fb6cf0bf8)

middlewareの動作について解説しています
- [ReduxのMiddlewareについて理解したいマン](http://hogehuga.com/post-1123/)

componentとcontainerの違いを解説してくれています

- [http://yukidarake.hateblo.jp/entry/2015/09/18/204023](http://yukidarake.hateblo.jp/entry/2015/09/18/204023)
- [[redux] Presentational / Container componentの分離 - react-redux.connect()のつかいかた](http://qiita.com/yuichiroTCY/items/a3ca7d9d415049d02d60)

Redux Flowについて解説してくれています
- [Reduxとは? - PAYFORWARD](http://blog.takanabe.tokyo/2015/12/03/1398/)

Providerとかを簡単に解説してくれています
- [ReduxとES6でReact.jsのチュートリアルの写経](http://blog.bokuweb.me/entry/redux-tutorial)

Redux応用編
----------
Redux DocumentのAdvanced部分を翻訳してくれています．APIを使ったReduxアプリについてまとめてくれています．
- [reduxを試してみた(5日目) - ajaxを使ってUIを構築する(reduxにおける非同期の制御)](http://qiita.com/kompiro/items/d1ffcfcba7cc34d364f0)
Ex-NavigatorとReduxをどうやって合わせるんかなと思って調べてたら出てきた例です．
- [Working together with react-redux](https://github.com/exponentjs/ex-navigator/issues/11)

サンプルアプリ
-----------

まとめサイト
-----
Advent Calendarを一人で全部書かれています．すごい..
- [一人React Native Advent Calendar 2015](http://qiita.com/advent-calendar/2015/react-native)



---
他にこれわかりやすいよーってリンクがあったら勉強したいのでぜひぜひ教えて下さい！
Web屋の電子工作DIY：夜更かしテレビを罰金性にして、早起き生活を手に入れる 1.5

# 作っているもの

以下の順番で記載中。

- [IoT、はじめました：プログラミング技術の海で上手に情報を拾う方法まとめ](http://qiita.com/xiao/items/0e179865ce8e6efd7393)
- [Web屋の電子工作DIY：夜更かしテレビを罰金性にして、早起き生活を手に入れる①](http://qiita.com/xiao/items/5f18d826f7811f29afd2)
- Web屋の電子工作DIY：夜更かしテレビを罰金性にして、早起き生活を手に入れる 1.5
- [Web屋の電子工作DIY：夜更かしテレビを罰金性にして、早起き生活を手に入れる②](http://qiita.com/xiao/items/cf90eea83ba3b1afff24)

**[目標]**
　　夜にテレビをだらだら観て、夜更かししてしまうのを防止する仕組みをつくる

構成：
![夜更かしテレビ罰金制度導入ツール.jpg](https://qiita-image-store.s3.amazonaws.com/0/66816/c4c67d5b-2644-ae80-c6d6-80c114b6f234.jpeg)

[前回](http://qiita.com/xiao/items/5f18d826f7811f29afd2)は2の部分を実装したけれど、
とある方に相談したらHDMIでTVとRaspberryPiを直接繋ぐと簡単にやり取りできると言われたので、そっちの方法も試してみることにしました。
（ただ我が家にはゲーム機がたくさんいてHDMIのTVへの入力が余っていない状態なので、
　この方法は結果的に没になりました・・orz）

# TVとHDMI接続セットアップ
この方法、ほとんど日本語のサイトに情報がなくて苦労したのですが、
いろいろ探った結果[これのRaspberryPiバージョン](https://github.com/Pulse-Eight/libcec)でいくことにしました。
（単純にsudo apt-get install cec-utilsだけやると
　Found devices: NONEとなって、さぐっていくとコンパイルが必要等々いろいろ出てきた。。）

> $sudo apt-get install cmake

でまずmakefileを扱えるようにして、以下を適当なディレクトリに移動して実行。
（**となっているところはそのディレクトリ）

> $sudo apt-get update
> $sudo apt-get install cmake liblockdev1-dev libudev-dev libxrandr-dev python-dev swig
> $cd **
> $git clone https://github.com/Pulse-Eight/platform.git
> $mkdir platform/build
> $cd platform/build
> $cmake ..
> $make
> $sudo make install
> $cd **
> $git clone https://github.com/Pulse-Eight/libcec.git
> $mkdir libcec/build
> $cd libcec/build
> $cmake -DRPI_INCLUDE_DIR=/opt/vc/include -DRPI_LIB_DIR=/opt/vc/lib ..
> $make -j4
> $sudo make install
> $sudo ldconfig

これで、

> $cec-client -l

として「Found devices: 1」が出てきたら成功。
お世話になったのは以下のサイトです。
[Raspberry Piでテレビを付けて動画再生](http://qiita.com/shoooo/items/2e4fd44f750f3590998b)

# TVの電源OFF実行
対話形式で実行してみました。

> $sudo cec-client
> No device type given. Using 'recording device'
> CEC Parser created - libCEC version 3.1.0
> no serial port given. trying autodetect: 
>  path:     Raspberry Pi
>  com port: RPI
>  
>  opening a connection to the CEC adapter...
>  DEBUG:   [              63]	Broadcast (F): osd name set to 'Broadcast'
>  DEBUG:   [              64]	InitHostCEC - vchiq_initialise succeeded
>  DEBUG:   [              64]	InitHostCEC - vchi_initialise succeeded
>  DEBUG:   [              65]	InitHostCEC - vchi_connect succeeded
>  DEBUG:   [              65]	logical address changed to Free use (e)
>  DEBUG:   [              66]	Open - vc_cec initialised
>  NOTICE:  [              66]	connection opened
>  ...

つながった！！！

> standby 0

で電源をOFFできました。
Available commands:としていろいろでていたので、しばらく遊んでみようと思います。

次回から本編へ戻る。。
JavaのPaaS一覧

Javaで開発したいサービスがあって、すぐにプログラミングしたいけど環境構築はメンドくさい。
そんなときに使えるPaaS一覧。

Amazon Web Service
----
AWS Elastic Beanstalk
http://aws.amazon.com/jp/elasticbeanstalk/

- コードをデプロイするとEC2とかをベストプラクティスで構築してくれる

- Apache Tomcat for Java / Java SE

- GlassFish環境がDockerで提供されているのでJava EE環境も使える
 https://aws.amazon.com/jp/about-aws/whats-new/2014/11/05/aws-elastic-beanstalk-supports-python3-4-java7-glassfish4-0-and-java8-glassfish4-1/
 
- 必要に応じて構成が変更可能（ボンネットを開けられる、というらしい） 


Microsoft Azure
----
Azure App Service
https://azure.microsoft.com/ja-jp/services/app-service/

- Web App（旧：Websites）、Mobile App（旧：Mobile Services）、API App、Logic Appがある

- Web Appだと.NET、node.js、PHP、Pythonとかもイケるし、Mobile AppだとXamarinもイケる

- Web AppのデプロイはKuduを使う
 https://kudu.apache.org/

- Azure Active DirectoryとかMS系のサービスとの連携がいい


Oracle Cloud
----
Oracle Java Cloud Service
https://cloud.oracle.com/ja_JP/java

- Javaの開発元が提供している、という安心感

- Java EE完全準拠、オンプレミスのWeb Logic Serverと同じ環境
 （既存資産が活かしやすい）

- Java Flight Recorder（Javaプロファイラ）がある

- Webコンソール、IDE（Eclipse/IntelliJ/NetBeans?）、コマンドライン、スクリプト


Google Cloud Platform
----
Google App Engine
https://cloud.google.com/appengine/?hl=ja

- よく分かっていない（自分が。。）


IBM Bluemix
----
Liberty for Java
https://console.ng.bluemix.net/docs/starters/liberty/index.html

- SoftLayer上でCloudFoundryが動いている


Heroku
----
Java on Heroku
https://devcenter.heroku.com/categories/java

- Salesforceファミリー、Herokuコネクトで連携（PostgreSQLベース）
slackで分報をタイムライン表示して一覧性を手に入れろ

## はじめに

このブログ、[分報をタイムライン表示して、もれなくチームの流れを把握しよう](http://konyu.hatenablog.com/entry/2016/03/26/001330)のスクリプト部分のみを転記。
なぜこうしたのかなど気になる人は読んでみて欲しい

※注意　ここでは、hubotとslackの連携方法やサーバで実行する方法等は記載していない。

![](http://cdn-ak.f.st-hatena.com/images/fotolife/k/kon_yu/20160325/20160325235052.png)

## 動作確認環境

* node.js version v5.9.1
* hubot version v2.12.0
* hubotのホスティング先はheroku
* slack アダプタを利用し、hubotとslackが連携している

# hubotで各エンジニアの部屋をチェックし、発言があればタイムライン用の部屋にリンクを書き込む スクリプト

hubotで各エンジニアの部屋をチェックし、発言があればタイムライン用の部屋にリンクを書き込むことができるようにする

このスクリプトでは以下のことを実施する

* #times_ユーザ名 という部屋で発言をチェックする
* 発言のオブジェクトから、その発言のパーマネントリンクを作成
* #timelineの部屋に発言のパーマネントリンクを投稿する

hubotのscriptディレクトリにこのようなファイルを作成する
script/hunhou2timeline.coffee

```hunhou2timeline.coffee
# 自分のslackのURL
slack_url = "https://your_tame_name.slack.com"

module.exports = (robot) ->
  # どんな文字列があっても拾う
  robot.hear /.+/, (msg) ->
    room = msg.envelope.room
    # idにドットがあるとURLを展開してくれないので取り除く
    id = msg.message.id.replace(".","")

    # ユーザ名_channelの部屋だけウォッチ対象
    if room.match(/^times_.+/)
      # 展開可能なURLを作成し、タイムライン表示用の部屋に投稿する
      # roomの指定で、 投稿するchannelを指定
      # 第二引数でslackのパーマネントURLを構築
      robot.send {room: "#timeline"}, "#{slack_url}/archives/#{room}/p#{id}"
```

※ チャンネルに追加しないと、hubotが部屋をウォッチしない(入力内容に対してリアクションをしない)のでtimes_ユーザ名のチャンネルにhubotを追加する

* 個別のチャンネルにhubotが追加された状態
![](http://cdn-ak.f.st-hatena.com/images/fotolife/k/kon_yu/20160325/20160325234749.png)

自分のチャンネルに投稿すると
![](http://cdn-ak.f.st-hatena.com/images/fotolife/k/kon_yu/20160325/20160325235049.png)

タイムライン用のチャンネルに投稿されれる
![](http://cdn-ak.f.st-hatena.com/images/fotolife/k/kon_yu/20160325/20160325235052.png)
2016-03-28 c++ builder XE4, 10.2 Tokyo | datetime > 時分秒をTDateTime型から取り除く

```txt:動作環境
C++ Builder XE4
Rad Studio 10.2 Tokyo Update 2 (追記: 2017/12/27)
```

## やりたいこと

TDateTimeで与えられた日時情報から時分秒を00にしたい。
ある指定日の0時からの処理をしたいときなどに使う。

## code

DecodeDate()とEncodeDate()を使う方法を実装した。

```cpp
static TDateTime __fastcall getDayWithoutTime(TDateTime srcdt)
{
	unsigned short yyyy,mm,dd;
	DecodeDate(srcdt,yyyy,mm,dd);
	TDateTime resdt = EncodeDate(yyyy,mm,dd);

	return resdt;
}
```

## code v0.2
(追記 2016/07/07)

TDateTime型の小数部分を消せばいいだけなので、以下でも可能だった。

```cpp
static TDateTime __fastcall getDayWithoutTime(TDateTime srcdt)
{
	return (TDateTime)(int)srcdt;
}
```
SplObjectStorageを使ってみる

```php
<?php

$o1 = new stdClass();
$o2 = new stdClass();
$o3 = new stdClass();

$storage = new SplObjectStorage();

// オブジェクトをキーに値を格納できる
$storage[$o1] = 'hoge';
$storage[$o2] = 'piyo';

echo $storage[$o1] . PHP_EOL;
echo $storage[$o2] . PHP_EOL;

$storage = new SplObjectStorage();

// attachでオブジェクトを追加
$storage->attach($o1);
$storage->attach($o2);
$storage->attach($o3);

// detachでオブジェクトを削除
$storage->detach($o3);

// countで格納されているオブジェクトの数を取得
echo $storage->count() . PHP_EOL;   # 2

// containsでオブジェクトの存在を確認
if ($storage->contains($o1))
    // オブジェクトの識別子を取得
    echo sprintf('Object 1: %s', $storage->getHash($o1)) . PHP_EOL;
if ($storage->contains($o2))
    echo sprintf('Object 2: %s', $storage->getHash($o2)) . PHP_EOL;
if ($storage->contains($o3))
    echo sprintf('Object 3: %s', $storage->getHash($o3)) . PHP_EOL;

try {
} catch (Exception $e) {
    echo get_class($e) . PHP_EOL;
}

// 参考) spl_object_hashで取得できる値: $o1
echo sprintf('Object 1: %s', spl_object_hash($o1)) . PHP_EOL;

// 参考) Arrayのキーにオブジェクトを指定
// $storage[$o1] = 'Hoge'; // もちろんできない

// serializeとunserializeを用いてのオブジェクト追加
echo 'before: ' . $storage->count() . PHP_EOL; # before: 2

$storageAdd = new SplObjectStorage();
$storageAdd->attach(new stdClass());
$storageAdd->attach(new stdClass());

$str = $storageAdd->serialize();

$storage->unserialize($str);

echo 'after: ' . $storage->count() . PHP_EOL; # after: 4
```
partedコマンドでディスクを切る時の備忘録的な

参考サイト: http://ubuntu.hatenablog.jp/entry/20110407/1302171786

##### 前置きというか寄り道

まずはパーティションテーブルについて
・MBRとGPTの2つ
→それぞれハードディスクドライブ上のパーティションテーブルの配置に関する規格
 MBRは旧式,GPTは新しいやつくらいの感じで今回はお茶を濁します
→んで,パーティションを操作するコマンドにはfdiskやpartedとかいろいろあって,
partedにはfidiskと違いGPTも扱えるよみたいな感じ

今回はpartedについての自分用のまとめ

###### 0)ディスクの確認的な

```shell-session
# grep -H "" /sys/block/sd*/device/model
とか
# fdisk -l
なりで適当に
```

##### 1)実行

```shell-session
# parted [デバイス名] → 対話モードで実行される
# parted /dev/sda
```
##### 2)パーティションラベルの設定

```shell-session
(parted) mklabel [gpt, msdos] →ラベルをgptかmsdos(MBR)のどちらかを選ぶ
Warning: The existing disk label on /dev/sda will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? y ←データ消えるよ?って聞かれるのでy返答
```

##### 3)unitの指定

```shell-session
(parted) unit MiB ←みたいな感じで単位の指定ができる.(unitはuと省略可)
指定できるのはs(セクタ数),B(バイト),kB, MBやMiB,GiBなど
```
##### 4)パーティションの作成

```shell
(parted) mkpart
Partition type? : primary(基本)かextended(拡張)を選ぶ(頭文字のみでも可)
File system : タイプを適宜入力
Start : 開始位置の指定
End   : 終了位置の指定

※ 先頭位置を0とかにすると警告が出る,また他のパーティションと被ったディスクサイズを指定すると警告が出る
(parted) mkpart primary 0M 2048M
Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel? Ignore
```

##### 5)フラグの設定
bootとかフラグを付けるには下記のようにする

```shell
(parted) set 1 boot on
lvmも同様に指定できる→ set 2 lvm onみたいな感じ
```
##### 6)ディスクの削除
rmコマンドを使う→pで表示された時の番号を指定してあげれば消せる

```shell
(parted) rm 1
```

##### 7)パーティションを作成したらqで抜ける

##### 8)その他
作成したパーティション情報を見たいときとかに

```shell
# parted  /dev/sda  unit  MiB  print
```
##### おわりに
・ざっくりパーティションラベルの設定,unitの指定,パーティションの作成及び削除とフラグ付
の流れ
・パーティションのタイプは適当でもいいと思います､mkfs.ext3とかでやるので
・一応パーティションラベルがnameで付けられるみたい
・パーティションのリサイズもできるみたい
・parted上にてフォーマットもできるみたいだけど非推奨とのことで警告が出るみたい.
→素直に他のコマンドを使う感じで
mysql2 gem 経由で MySQL サーバ接続時ライブラリの `LoadError` が発生する

mysql2 gem 経由で MySQL サーバに接続しようとすると、ライブラリ `/usr/local/lib/libmysqlclient.18.dylib`がロードされず、`LoadError`が発生しました。

```
/Users/username/reposname/vendor/bundle/ruby/2.3.0/gems/mysql2-0.4.3/lib/mysql2.rb:31:in `require': dlopen(/Users/username/reposname/vendor/bundle/ruby/2.3.0/gems/mysql2-0.4.3/lib/mysql2/mysql2.bundle, 9): Library not loaded: /usr/local/lib/libmysqlclient.18.dylib (LoadError)
  Referenced from: /Users/username/reposname/vendor/bundle/ruby/2.3.0/gems/mysql2-0.4.3/lib/mysql2/mysql2.bundle
  Reason: image not found - /Users/username/reposname/vendor/bundle/ruby/2.3.0/gems/mysql2-0.4.3/lib/mysql2/mysql2.bundle
```

今回僕がこのような状況になってしまった原因は、 `brew update` し、既存の MySQL を更新してしまったためです。
これにより、既存のライブラリへの参照を消してしまったのでした。

よって、これを解消するために、消してしまった参照を再度付け直します。

```
$ sudo ln -s /usr/local/Cellar/mysql/5.6.17_1/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
```

これで解消されました。

## References

http://stackoverflow.com/questions/5446747/ruby-mysql2-gem-not-working-mac-os-x-snow-leopard-ruby-1-9-2
ブラウザを作りました。

またまたHTMLを使って、ブラウザを作りました。
今回はver.1です。
ボタンなどを、自作し、ページの表示はインラインでしました。一部でない部分があります。それは権限者ですれば、なくなるてしょう。
ダウンロードはhttps://www.dropbox.com/s/207w7gk9c75auoh/USHIbrowser.zip?dl=0 です。zipなので展開してから開いて下さい。
GRUB Legacyのパスワードについて

GRUB Legacyのパスワードについて

引用: http://www.atmarkit.co.jp/flinux/rensai/linuxtips/318grubpasswd.html

### 前置きっぽいやつ
GRUBに関してはご存知ブートローダの1つ,カーネルイメージを入れ替えたり設定ファイルを表示する機能があるためセキュリティのためにパスワードを設定する,というのが今回の目的.

※ grub2に関しては下記を参照
https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/7/html/System_Administrators_Guide/sec-GRUB_2_Password_Protection.html


パスワードには平文か暗号化した状態の2通りの方法があり,今回は暗号化したパスワードの方でやる.

##### 1)まずパスワードハッシュ(パスワードをハッシュ化する)の生成

```shell-session
# grub-crypt | tee /tmp/grubpass
Password: <パスワードを入力>
Retype password: <パスワードを入力>
$6$jtYLMBwZZ0lIArqU$MTk1/yh.Fms70qqAtZkAe88aqwXWzGe9oerWJYMAD4e8d.vtX0APsDEsdwO2oQChV6g.u7mix0gPUaecb43t9.
#
# cat /tmp/grubpass
$6$jtYLMBwZZ0lIArqU$MTk1/yh.Fms70qqAtZkAe88aqwXWzGe9oerWJYMAD4e8d.vtX0APsDEsdwO2oQChV6g.u7mix0gPUaecb43t9.
```
※ grub-cryptでsalt付きのsha512パスワードハッシュが生成できる
それをteeで標準入力を出力とファイルに出力する.

##### 2)作成したパスワードハッシュを/boot/grub/grub.confに追加する.

･まずtitle行の前に"password --encrypted"を書いて同行の末尾にて下記コマンドを実施.
":r /tmp/grubpass"←:rコマンドで生成したハッシュを挿入する
･続いて同業にて:Jコマンドを実施,現在の行と次の行を結合する.
･保存して終わり
最終的に下記のようになる

```shell-session
# grub.conf generated by anaconda
#
(略)
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
# title行前に下記を追記する(grubパスワード用)
password --encrypted $6$8Eg5jNMv7/bQqeRs$pNdNajA48q5VSu49vlWt/7mQwsJGaNTs9iZbD8ocpD4F.DUcn4pbWOSw9fByxPgFqL2Pfm0O0TwN3ZauuXAWx.
title CentOS (2.6.32-573.12.1.el6.i686)
        root (hd0,0)
        kernel /vmlinuz-2.6.32-573.12.1.el6.i686 ro root=UUID=5eaa082d-c438-4332-a48e-1681d41f5734 rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=jp106 rd_NO_LVM rd_NO_DM rhgb quiet
        initrd /initramfs-2.6.32-573.12.1.el6.i686.img
(略)
```

##### 3)1で生成したファイルを削除

```shell-session
# rm /tmp/grubpass
```

4)/boot/grub/grub.confのアクセス権が"-rw-------"となっていることを確認する.

```shell-session
# ls  -l  /boot/grub/grub.conf
-rw-------. 1 root root 1294 Jan 25 20:46 /boot/grub/grub.conf
```

※ 違ってたら｢# chmod 600 /boot/grub/grub.conf｣で変更すること


補足的なあれこれ
･grub-cryptについて
デフォルトはsha-512で生成する.オプションで--sha-256や--md5とか指定できる.
※ opensslコマンドでもハッシュ生成はできるけどMD5しかできないみたいなのでセキュリティ的に弱い.

･MD5とかSHAについて
MD5(Message Digest 5):128bitの値を生成する
SHA1(Secure Hash Algorithm 1):160bitのハッシュ値を生成する
SHA2:SHA-224、SHA-256、SHA-384、SHA-512の総称,それぞれの数値がbit数を表す.
引用元:http://e-words.jp/ の各ページより

･salt
ハッシュ値を計算する前にパスワードの前後に付け加える文字列のこと
→ ざっくり言ってしまえばセキュリティを高めるってことで...
引用元: http://www.atmarkit.co.jp/ait/articles/1110/06/news154_3.html


"暗号化とハッシュ化に関する基本的な事柄まとめ"というありがたいまとめがあるのでこちらも参照のこと
→ http://qiita.com/chroju/items/3ddae568206b8bc3d8f9

grub-cryptというかパスワードハッシュを他にはどんな機会に使う･･･?
→Chefとかのプロビジョニングツールを使う時とかのパスワード指定時とかに
  ※grub-cryptはSHA2対応だけど元々GRUB Legacyのツールであることに注意.
 (GRUB2ならmkpasswd-pbkdf2が存在するとのこと.)
 それ以外で作るならMD5だけどopensslかRubyやPythonなどを使用して生成.

その他引用･参考にさせていただいたり,気になったサイト
･パスワードハッシュの作り方
→ http://think-t.hatenablog.com/entry/20140111/p1
･SHA256 と PBKDF2 によるソルト付きパスワードのハッシュ計算方法
→ http://csharp.keicode.com/topics/salt-and-hash-1.php
･パスワードハッシュとユーザー認証
→ http://csharp.keicode.com/topics/password-hashing.php
Zybo > Chronicles blog 08 > XAdcPs_Config pointer / XAdcPs pointer

@ Adam Taylor blog
https://forums.xilinx.com/t5/Xcell-Daily-Blog/MicroZed-XADC-Software-Adam-Taylor-s-MicroZed-Chronicles-Part-8/ba-p/383861

> The next step in the initialization process is to use the information previously obtained and stored within the configuration pointer, which requires a pointer of type "XAdcPs."


`XAdcPs_Config`ポインタに加えて、`XAdcPs`ポインタもある。

`XAdcPs`で検索すると`XAdcPs_Config`も検索されるというbad namingの例だろう。


> I named my configuration pointer "ConfigPtr" and my instantiation pointer "XADCInstPtr" (very original, as I'm sure you will agree).

Adam Taylorさんは上記のようにして読みやすさ向上を狙っている。

InstはInstantiate（またはInstance)だろう。
UnityのLow level Native Plugin interfaceをAndroidで動かす

# 前置き

Unity ５．３ではAndroid/iOSのLow level native plugin interfaceが動かない.
[Unity 5.4 beta からOpenGLESもサポートされ正常に動くようになった。](http://forum.unity3d.com/threads/new-native-plugin-example-do-not-work-with-opengl-or-opengl-es.357713/#post-2468614)
いろいろハマったのでその時のセットアップメモ。

# 手順

## 1. Unity 5.4 betaをdownload

5.3だと動かないので注意。 (get
Install するコンポーネントには Example ProjectとAndroid Build SupportとiOS Build Supportを含める

![component.png](https://qiita-image-store.s3.amazonaws.com/0/15000/5b019949-84e7-1f23-e98f-bfcd81866f1e.png)

## 2. Example Projectを展開する

```
$ cp /Applications/Unity/Documentation/en/uploads/Examples/RenderingPluginExample54.zip .
$ unzip RenderingPluginExample54.zip
```

## 3. Androidのdynamic libraryをビルドする

すでにビルド済みなのでやらなくても可。

```
$ cd RenderingPlugin/Android
$ ndk-build
$ cp libs/armeabi-v7a/libRenderingPlugin.so ../../UnityProject/Assets/Plugins/Android/libRenderinugin.so
```

## 4. UnityでAndroid Projectのビルド

Unityで解答したUnityProjectを開く.
scene.unityをダブルクリックして開く.

File > BuildSettings > Android

- Add Opened Sceneでシーンを追加
- PlayerSettings > Other Settings > Bundle Identifier => 適当なpackage nameに変更する
- Development Buildにチェック
- buildする

apkのインストール

```shell-session
$ adb install your.apk
```

# 結果

![small.png](https://qiita-image-store.s3.amazonaws.com/0/15000/76cd44f1-1fe4-0006-b45c-dd1d2efd312a.png)

球体の裏で三角形が回転されながら表示されていればOK.
FragmentShaderが上手く動いていると色もグラデーションがかっているはず。

自分でC++のPluginを作るときには、 `/Applications/Unity/Unity.app/Contents/PluginAPI/` に IUnityInterface.h などが配置してあるので、それを参照してビルドすればよさそう。
Pythonを書くための最低限の文法メモ


初心者用メモ！

##予約語
予約語以外にもlist,abs,strなど組み込み関数に使われているので避ける！
詳細は以下を見るべし。
http://qiita.com/cm3/items/6a856c44dd92632aa54f


##定数
* True - 真
* False - 偽
* None - 値がない時に使われる。
 
##bool演算
```python:bool
a and b         # a も b も真であれば真
a or b          # a または b が真であれば真
not a           # a が偽であれば真
``` 
 
##Noneの処理判別
```python:none
if hoge is None:
  #Noneのときの処理
  
if hoge is not None:
  #Noneじゃないとき
```

##配列(list)
```python:array
values = [1, 2, 3, 4]
print values[0] #1
print "length=" + str( len(values) ) #length=4

```

```python:push
list = ["A", "B", "C"]

list.append("D")
print list     # ["A", "B", "C", "D"]

```

そのほか関連の関数
http://www.pythonweb.jp/tutorial/list/

##オブジェクト(dict)
```python:dict
d = {'Yamada': 30, 'Suzuki': 40, 'Tanaka': 80}
```

```python:dict
for k, v in d.items():
    print k, v             # Tanaka 80, Yamada 30, Suzuki 40

for k in d.keys():
    print k, d[k]          # Suzuki 40, Yamada 30, Tanaka 80

for v in d.values():
    print v                # 80, 30, 40

for k, v in d.iteritems():
    print k, v             # Tanaka 80, Yamada 30, Suzuki 40
```


##for文
```python:for
#0〜9までループ
for i in range(0, 10):
	print "hoge " + str(i)
```

```python:for
#配列の中身を走査
values = [ "hoge", "fuge", 123 ]
for value in values:
	print value
```

##if文
```python:if
if hoge < 1: 
	print "fuga1"
elif hoge < 2:
	print "fuga2"
else:
	print "fuga3"
```


##cast
```python:cast
print "hoge" + str( 100 ) #hoge100
print 10+int("5") #15
```

##数字を丸める
```python:floor
import math
math.floor(x)	 
math.ceil(x)
```


##関数
```python:function
def hoge(a,b):
    print "hoge";
    return "hoge" + a + b
    
#呼び出し
hoge("AAA","BBB")#hogeAAABBB
```

##`__name__`

よく見かける特別な変数`__name__`。メインプログラムのときは`__name__=="__main__"`となる。importするとファイル名が入る。それらを区別するために以下のような表記をよくつかうようだ。

```python:`__name__`
if __name__ = "__main__":
	print "メインプログラムだよ"
#else:
#	print "importされてるよ"
```

## jsonを使う
使い方
http://www.python-izm.com/contents/application/json.shtml
読み込んだり保存したり
http://d.hatena.ne.jp/fenrifja/20130306/1362571700


## クラス書く
http://www.tohoho-web.com/python/class.html#class


## importについて
http://python.matrix.jp/pages/tips/import.html

## 参考
http://www.tohoho-web.com/python/index.html
Zybo > Chronicles blog 08 > XAdcPs_Config pointer / XAdcPs_LookupConfig() with the device ID > 0 or NULL

@ Adam Taylor blog
https://forums.xilinx.com/t5/Xcell-Daily-Blog/MicroZed-XADC-Software-Adam-Taylor-s-MicroZed-Chronicles-Part-8/ba-p/383861

> The first thing to do in the code is to look up the configuration of the XADC to be initialized; 

上記に関連するのが

- XAdcPs_Config pointer
- XAdcPs_LookupConfig()
- the device ID

XAdcPs_LookupConfig()は0を返す (XADCが1つしかないから)。
エラー時はNULLとなる。
SharePoint 2013 における SQL Server の構成について（メモというかリンク集）


# [SharePoint Server ファーム内の SQL Server のベスト プラクティス](https://technet.microsoft.com/ja-jp/library/hh292622.aspx)
## SQL Server の専用サーバーを使用する
### SharePoint Server 2013 を展開する前に特定の SQL Server 設定を構成する
* SQL Server と SharePoint Server をホストするサーバー上では、統計情報の自動作成を有効にしないでください...（要約すると、自動的にやってくれてるから、手動で変更しないでね） ** ← つまりなにもしないでヨシ。**

> #### 現在の「統計情報の自動作成」の一括確認方法
> ```sql
> USE master
> GO
> SELECT name, is_auto_create_stats_on, is_auto_update_stats_on
> FROM sys.databases;
> GO
> ```

> #### 現在の「統計情報の自動作成」の変更方法
> ALTER DATABASE コマンドで AUTO_CREATE_STATISTICS  を ON にすることも出来るが、とりあえず手動でも変えられる
> ![image](https://qiita-image-store.s3.amazonaws.com/0/111601/8988ca7b-8061-0af9-6dec-645ea2e025a4.png)

* SharePoint コンテンツ データベースの統計情報は、SQL Server から FULLSCAN オプションを使用して毎日更新することをお勧めします... （要約すると、タイマージョブで自動的に毎日やっているけど、確実に完了している保証がないから、SQL server のメンテナンスプランでスケジュール実行した方がいいよ）
[古いデータベースの統計情報は、SharePoint サーバーのパフォーマンスが低下する、タイムアウトが発生し、実行時エラーを生成します。](https://support.microsoft.com/ja-jp/kb/3103194) ** ←に記載のあるエラーが出ていたらやる。**


* SharePoint データベースをホストする SQL Server のインスタンスに対する並列処理の最大限度 (MAXDOP) を 1 に設定し、単一の SQL Server プロセスがそれぞれの要求を処理するようにします。** ←なってないとインストール出来ないようになっているので、恐らくほぼだいたい大丈夫。**
 ![image](https://qiita-image-store.s3.amazonaws.com/0/111601/2dbe03c8-a597-9f4f-4524-5e5b21519225.png)





# [データベースの種類と説明 (SharePoint 2013)](https://technet.microsoft.com/ja-jp/library/cc678868.aspx)

# [ストレージおよび SQL Server の容量計画と構成 (SharePoint Server 2013)](https://technet.microsoft.com/ja-jp/library/a96075c6-d315-40a8-a739-49b91c61978f#Section6_3)
## コア ストレージおよび IOPS のニーズを見積もる
### 構成ストレージおよび IOPS
構成データベースのトランザクション ログは大きくなる可能性があるので、データベースの復旧モデルを完全復旧モデルから単純復旧モデルに変更することをお勧めします。

# [SharePoint Server 2013 での容量管理と規模設定の概要](https://technet.microsoft.com/ja-jp/library/ff758647.aspx)
amazon cloud reader > ハイライトの色がすべて同じになる

iPad mini4にて読み進めてきたZynq関連のblogの情報を整理しようとした。

https://read.amazon.co.jp/
にてamazon cloud reader上で見たのだが、ハイライトの色が全部黄色になってしまっている。

自分は以下のように色付けしてきたが、全部が同じ色になるのは残念だ。

- ピンク: 用語
- 青色: ひっかかったところ
- 黄色: 上記以外で読み返すところ
Gemの作り方

# Rubygems.org に登録

登録はこちらの form から。
https://rubygems.org/sign_up

# 開発マシンに Rubygems.org の API Token を配置

こちらのページの下の方に書いてある `curl` コマンド実行するか、手動で配置。
https://rubygems.org/profile/edit

以下のようなファイルが出来上がってれば、準備完了。

```
$ cat .gem/credentials
---
:rubygems_api_key: <your-api-token>
```

# Bundler で Gem の雛形作成

`<gem-name>` の部分は他の gem とかぶらないように注意。

```
$ bundle gem <gem-name>
```

以下では `nov-test-gem` という gem を作る前提で話を進めます。

`bundle gem` すると、gem 公開に必要な各種設定ファイルや lib ディレクトリなどが生成されます。

```
$ bundle gem nov-test-gem
Creating gem 'nov-test-gem'...
MIT License enabled in config
Code of conduct enabled in config
      create  nov-test-gem/Gemfile
      create  nov-test-gem/.gitignore
      create  nov-test-gem/lib/nov/test/gem.rb
      create  nov-test-gem/lib/nov/test/gem/version.rb
      create  nov-test-gem/nov-test-gem.gemspec
      create  nov-test-gem/Rakefile
      create  nov-test-gem/README.md
      create  nov-test-gem/bin/console
      create  nov-test-gem/bin/setup
      create  nov-test-gem/.travis.yml
      create  nov-test-gem/.rspec
      create  nov-test-gem/spec/spec_helper.rb
      create  nov-test-gem/spec/nov/test/gem_spec.rb
      create  nov-test-gem/LICENSE.txt
      create  nov-test-gem/CODE_OF_CONDUCT.md
Initializing git repo in /Users/nov/Desktop/nov-test-gem
```

# 雛形を適宜編集

## *.gemspec ファイル

まずは `nov-test-gem/nov-test-gem.gemspec` を開いて、TODO になっている箇所 (gem の説明等) を適宜編集しましょう。今回は Rubygems.org への公開を前提としているため、`allowed_push_host` の部分は丸ごと削除します。

普段は Gemfile に指定するような dependencies も、gem の場合は *.gemspec ファイルに指定します。(Gemfile からは gemspec を参照するようになっています)

## lib 以下

lib 以下は gem の本体コードが配置されます。
ここには当該 gem の lib 直下が $LOAD_PATH に含まれる状態で動くよう、適宜コードを配置します。

この記事では、lib 以下はとりあえず default のまま放置することにして、`nov-test-gem/lib/nov/test/gem/version.rb` だけの状態で公開することにしましょう。default では first release が `v0.1.0` になりますが、ここは適宜 `v0.0.1` 等にしてから初期公開した方が良いかもしれません。(個人の感想です)

# Release

基本的には初期状態では必要な dependencies は全て手元にあるかとは思いますが、念のため `bundle install` しておきましょう。
*.gemfile に dependencies を追加した際などは、`bundle install` は必須です。

```
$ cd nov-test-gem
$ bundle install
```

そしておもむろに `rake -T` として、呼び出し可能な rake task をリストアップしてみましょう。
環境によっては `bundle exec rake -T` としないとエラーになることもあります。(`bundle exec` をつけて Gemfile に指定されたバージョン固定の依存 gem を使うのが正しい作法ではあります。長いけど)

```
$ rake -T
rake build            # Build nov-test-gem-0.1.0.gem into the pkg directory
rake clean            # Remove any temporary products
rake clobber          # Remove any generated files
rake install          # Build and install nov-test-gem-0.1.0.gem into system gems
rake install:local    # Build and install nov-test-gem-0.1.0.gem into system gems without network access
rake release[remote]  # Create tag v0.1.0 and build and push nov-test-gem-0.1.0.gem to Rubygems
rake spec             # Run RSpec code examples
```

`rake release` なる task がありますね。実行してみましょう。(これも `bundle exec rake release` じゃないとダメなこともあり)

```
$ rake release
nov-test-gem 0.1.0 built to pkg/nov-test-gem-0.1.0.gem.
Tagged v0.1.0.
Pushed git commits and tags.
Pushed nov-test-gem 0.1.0 to rubygems.org.
```

リリース完了しましたね。

あとは、lib 以下を適宜編集し、version を上げながら、順次 `rake release` していくのみです。
Vagrant上でnpm installやcomposer installが出来ないとき

# 環境
- CentOS 7.0
- Vagrant 1.8.1
- Node 0.12.0
- npm 2.5.1
- Composer 1.0-dev
- VirtualBox 5.0.16

# 原因

- Npm
共有フォルダである/vagrantと/var/www/htmlをシンボリックリンクを張っていたためらしい．VirtualBoxでは原則的に*シンボリックリンクを張ることを禁止している*模様．

- Composer
unzipがインストールされていないだけでした．．．

# 対策方法
シンボリックリンクを張らないようにする(当然)．しかし，共有フォルダのように利用したかったためsftpを用いてフォルダ内にあるファイルをVagrantの指定した先に送信するようにしました．

## 対策1
[Brackets](http://brackets.io/)(エディタ)のSFtpUploadを利用しました．SublimeTextなどのエディタでもsftpでUpload出来る拡張機能があるかもしれませんが，ひとまずBracketsで話を進めます．
1. SFtpUploadのインストール
Bracketsの拡張機能マネージャーからSFtpUploadをインストールします．
![brackets_kaku.png](https://qiita-image-store.s3.amazonaws.com/0/116983/9723e5bb-02d2-4ebb-f3d2-399a38e8e47f.png)
2. Vagrant上にフォルダUpload
表示>SFTP UploadからSFtp Uploadのフォーム？を出します．
![brackets_sftp.png](https://qiita-image-store.s3.amazonaws.com/0/116983/19ed217e-46ef-1921-f731-d5ca2112a644.png)
次に，
ファイル>フォルダを開く...
から対象プロジェクトを開き，SFTP UploadのServer SetupからSettingを行います．
![brackets_sftp_setup.png](https://qiita-image-store.s3.amazonaws.com/0/116983/5328f5a2-e3bf-dab8-0317-4d6eaf9bc74f.png)

|項目|入力|
|:--|:--|
|Type|Sftp(SSH)|
|Host|127.0.0.1|
|Post|2222|
|User Name|root|
|RSA Key Path|未記入|
|Password|vagrant(defaultなら)|
|ServerPath|/var/www/html(環境に合わせて変更してください)|

これで動かせることが出来るはずです．ここで行った設定はプロジェクトごとに記憶していますので，大きなプロジェクトの場合はファイル数が多くてBracketsが激おこになっちゃうので，子プロジェクトごとにフォルダを開いてServerの設定をしてあげましょう．

ファイルの内容を変更すると逐次Vagrant上のサーバにUploadしてくれるので便利です．

※注意
子プロジェクトにフォルダが多かったりすると，サーバにファイルを転送してくれない場合がある(原因分かってない)ので，小さくプロジェクトを開いた方が良さそう．

## 対策2
共有フォルダにシンボリックリンクしながらnpm installやcomposer install出来るようになる方法もあるみたいです．~~私はこの方法でも動かなかったので，~~実際動くようになりました．一部はまだ動いていないですが．．．参考程度に乗せておきます．
[windowsでlaravel5をvagrantの共有フォルダで開発しようと思っている人へ。](http://qiita.com/fagai/items/82e3e660ebf3702e782a)
diff-so-fancyでgit diff を見やすくする

gitのdiffを見やすくするツールをご紹介
# diff-so-fancy
[so-fancy/diff-so-fancy: Good-lookin' diffs with diff-highlight and more](https://github.com/so-fancy/diff-so-fancy)
[diff-so-fancy](https://www.npmjs.com/package/diff-so-fancy)
> diff-so-fancy builds on the good-lookin' output of git contrib's diff-highlight to upgrade your diffs' appearances.
・Output will not be in standard patch format, but will be readable.
・No pesky + or - at line-start, making for easier copy-paste.

![fancy.png](https://qiita-image-store.s3.amazonaws.com/0/54591/e8220254-63ce-b974-e18a-83597f271238.png)
:arrow_up: diff-so-fancy 
:arrow_down: 通常
![normal.png](https://qiita-image-store.s3.amazonaws.com/0/54591/76f6160e-38b4-c614-9f96-ec200316e9de.png)



## インストール

### npm

```
npm install -g diff-so-fancy
```

### Homebrew

```
brew update
brew install diff-so-fancy
```

## 使い方

### 常時利用

`git config`で設定し、常時利用

```
# タブ幅はお気に入りの設定で
git config --global pager.diff "diff-so-fancy | less --tabs=4 -RFX"
git config --global pager.show "diff-so-fancy | less --tabs=4 -RFX"
```

今まで通り表示したい場合は
```
git --no-pager diff
```


### 一時利用

```
git diff --color | diff-so-fancy
```

### 別コマンドで
`git dsf`とする場合、`~/.gitconfig`に以下を追記

```:~/.gitconfig
dsf = "!f() { [ \"$GIT_PREFIX\" != \"\" ] && cd "$GIT_PREFIX"; git diff --color $@ | diff-so-fancy | less --tabs=4 -RFX; }; f"
```

## ハイライト設定
差分の色を変えたい場合は以下の設定を変更

```
git config --global color.diff-highlight.oldNormal "red bold"
git config --global color.diff-highlight.oldHighlight "red bold 52"
git config --global color.diff-highlight.newNormal "green bold"
git config --global color.diff-highlight.newHighlight "green bold 22"
```

## Tips
どちらかというとlessのTipsだが以下の設定を行うことでファイル間の移動が簡単になる。
`n`キーで次のファイル、`p`キーで前のファイル

```
git config --global pager.diff "diff-so-fancy | less --tabs=4 -RFX --pattern='^(added|deleted|modified): '"
```
PowerShell ギャラリーの使い方


便利なPowerShellが集まってるPSギャラリーのモジュールをインストールする方法
https://www.powershellgallery.com

# インストール要件
* Windows 10
* Windows Management Framework 5.0
* MSI Installer (for PowerShell 3 and 4)

# 手順
1. NuGetのインストール
 ``PS> Install-PackageProvider -Name NuGet -Force``
 
1. 便利モジュール・スクリプトの探し方
    1. [PowerShell GalleryのHP](https://www.powershellgallery.com/packages)で検索する（オススメ）
    1. コマンドラインで探す（名前を知っているとき）
    ``PS> Find-Module -Name パッケージ名 -Repository PSGallery ``
    ``PS> Find-Script -Name パッケージ名 -Repository PSGallery ``

1. 目的のモジュール（スクリプト）をダウンロード＆インストールする
 ``PS> Save-Module パッケージ名 -Path "保存先フォルダパス" #あるいは Save-Script``
 ``PS> Install-Module パッケージ名 #あるいは Install-Script`` 

1. インストール済みのモジュールを一覧表示する
 ``PS> Get-InstalledModule``
AWS Lambda を他アカウントへ共有する

Lambda 関数は、デフォルトでは非公開ですが、Lambda 関数を呼び出すアクセス権限を他アカウントに対して付与することで、アカウント外からでも実行できる(呼び出せる)ようになります。

- [add-permission](http://docs.aws.amazon.com/cli/latest/reference/lambda/add-permission.html)

```sh
aws lambda add-permission \
  --function-name  hello \
  --statement-id "hogehoge" \
  --action lambda:InvokeFunction \
  --source-account 123456789012 \
  --principal config.amazonaws.com
```
BitBarでRedmineのプラグインを作りました


<img src="https://raw.githubusercontent.com/hikouki/bitbar-redmine/master/preview.png" />

[hikouki/bitbar-redmine](https://github.com/hikouki/bitbar-redmine)

担当が自分になっていてOpenなチケットを100件まで表示します。

本家にもマージされました！([matryer/bitbar-plugins](https://github.com/matryer/bitbar-plugins))

# BitBar

メニューバーに様々なシステムの出力結果を表示するためのインターフェースとなるアプリケーション。
標準出力の結果を見やすい形でフォーマットしてメニューバーに表示してくれます。

# 導入方法

## 1. Bitbarをダウンロードする

GithubのリリースページからBitbarをダウンロードします。

https://github.com/matryer/bitbar/releases

## 2. BitBarのプラグインフォルダを作成する

適当なフォルダをプラグインフォルダとして配置してください。
※ 私の場合、`~/.bitbar/plugins`をプラグインフォルダとしています。

## 3. BitBarを起動する

(1.)でダウンロードした、BitBar.appを起動します。
※ AppStore経由でないため、右クリックして`開く`を押して起動する必要があります。

## 4. プラグインフォルダを設定する

以下から、(2.)に配置したpathを設定します。

メニューバー > BitBar > Preferences > Change Plugin Folder...

## 5. redmineプラグインを取り込む

以下にアクセスして、`+ Add to BitBar`を押すと、プラグインが有効になります。

https://getbitbar.com/plugins/Dev/Redmine/redmine-show-my-task.1m.rb

## 6. 環境変数を設定する

RedmineのAccessTokenとURLが必要なため、以下の様に設定してください。

```bash
launchctl setenv REDMINE_ACCESS_TOKEN <ACCESS_TOKEN> # Example: a6140cbf6e84a0bAffb0cX49138fc5687310b518
launchctl setenv REDMINE_URL <REDMINE_URL> # Example: https://redmine.xxxx.com
```

これだけだと、OS再起動時に消えてしまうため、
OS起動時にスクリプトを実行して環境変数を設定するようにするといいと思います。(以下参照ください)

http://qiita.com/hikouki/items/473d8ce0b1f562a94de6

## 7. BitBarを再起動する

BitBarを再起動しないと環境変数が有効にならないため
以下から停止後、起動してください。

メニューバー > BitBar > Preferences > Quit

# おわり

他にも、`GitHub Notifications`や、`Homebrew Updates`など
便利なプラグインが揃っているので是非、これを機会に使ってみてください！
provisioningファイル更新したときにプロジェクトへ反映する手順



### XCodeのPrefereneのAccountsから
* 古いprovisioningファイルを`move to trash`
* 新しいprovisioningファイルをダウンロード
* 念のため`open in finder`でダブルクリック


↓

### プロジェクトのBuildSettingのprovisioningファイルのところで
* 古い方のprovisioningファイル指定になっていて英数字の羅列になってるところを、ちゃんとした名前のやつに指定しなおす
anyenv経由でのrbenv更新とgemの移行

herokuの推奨である2.2.4をインストールしようと思ったが、anyenv経由のrbenvで2.1.5が入っていたので、これを2.2.4へ更新する
まずはrbenvおよびruby-buildを更新して、インストール対象のrubyのバージョンを更新する

```
% cd ~/.anyenv/envs/rbenv
% git pull origin master
% cd ./plugins/ruby-build/
% git pull origin master
```

その上で https://github.com/rbenv/rbenv-default-gems をインストールしてみる。RBENT_ROOT/default-gemsに必要なgemを書き連ねていけばいいみたいなので、現在入っているgemのリストをまとめて書き出してrbenv から欲しいバージョンのruby(今回だと2.2.4)をインストールしたらおわり。

```
% git clone https://github.com/sstephenson/rbenv-default-gems.git ~/.anyenv/envs/rbenv/plugins/rbenv-default-gems
% gem list | awk '{print $1}' | sort > ~/.anyenv/envs/rbenv/default-gems
% RUBY_CONFIGURE_OPTS="--enable-shared
--with-readline-dir=`brew --prefix readline`
--with-openssl-dir=`brew --prefix openssl`"
rbenv install 2.2.4
```

切り替えて使う

```
rbenv global 2.2.4
```
gradle 2.12 で対応された compileOnly を試す

gradle 2.12 が、maven の provided scope に plugin なしで対応したとのことで lombok でためしてデコンパイルして確認してみました。

---
compile('org.projectlombok:lombok')の場合
![image](https://qiita-image-store.s3.amazonaws.com/0/116987/72f07863-a72c-1a1d-8f53-379f423c7c9e.png)
lombok 居ますね(最下段)。

---
compileOnly('org.projectlombok:lombok')の場合
![image](https://qiita-image-store.s3.amazonaws.com/0/116987/f1df8076-7499-c978-5891-2ea818a7171d.png)
lombok 消えてますね.

jar から消えてました！ これでプラグインは不要となりましたね。
2.12 からは build も速くなったそうな。
UBUNTU にOracle 10g Express Editon インストール（３２ビット版）

#０.前提
今回のOracleのインストールは

1. とりあえず使いたい
2. 古いノートにUBUNTU入れている（バージョン 14.04.4）
3. ３２ビット版!!
3. 使用範囲としてはローカルネットワーク内
4.  メイン（SQLの発行）は別マシンから行うのでDBが入れば後は別マシンから行う予定

こんな条件なので、入れるだけ入れてみた状態です

#０.追記（2016/04/06）

…どうやらOracleのサイトからダウンロードができない模様…
もしかしたら配布が終わったのかも…


#１.ダウンロード
Oracle 10g Express Editon を ダウンロード
Oracleのアカウントが必要かと…

~~http://download.oracle.com/otn/linux/oracle10g/xe/10201/oracle-xe-universal_10.2.0.1-1.0_i386.deb~~


#２.インストール

パッケージインストーラーで行う

#３.初期設定
コマンドラインで行う

```:command
$ sudo /etc/init.d/oracle-xe configure
[sudo] password for xxuser: 
（管理者権限のパスワード）

Oracle Database 10g Express Edition Configuration
-------------------------------------------------
This will configure on-boot properties of Oracle Database 10g Express 
Edition.  The following questions will determine whether the database should 
be starting upon system boot, the ports it will use, and the passwords that 
will be used for database accounts.  Press <Enter> to accept the defaults. 
Ctrl-C will abort.

Specify the HTTP port that will be used for Oracle Application Express [8080]:
（ポートの確認そのままエンター）

Specify a port that will be used for the database listener [1521]:
（ポートの確認そのままエンター）

Specify a password to be used for database accounts.  Note that the same
password will be used for SYS and SYSTEM.  Oracle recommends the use of 
different passwords for each database account.  This can be done after 
initial configuration:
（管理者パスワードの設定）
Confirm the password:
（管理者パスワードを再度入力）

Do you want Oracle Database 10g Express Edition to be started on boot (y/n) [y]:y
（良ければyを入力）

Starting Oracle Net Listener...Done
Configuring Database...
（こっから結構時間がかかる…）

Configuring Database...Done
Starting Oracle Database 10g Express Edition Instance...Done
Installation Completed Successfully.
To access the Database Home Page go to "http://127.0.0.1:8080/apex"
（成功ならこんな感じのメッセージに）

$
```



#４.パス設定

bashrcファイルを編集

```console:command
$ sudo gedit ~/.bashrc
```


下記を追加

```bat:bashrc
ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server
PATH=$PATH:$ORACLE_HOME/bin
export ORACLE_HOME
export ORACLE_SID=XE
export PATH
```

パスの設定を反映

```console:command
$ source ~/.bashrc
```

SQLプラスのコマンドライン起動

```console:command
$ sqlplus system/[パスワード]
```

リモートからWebベースの管理ツールへのアクセスを許可する

```sql:command
SQL> EXEC DBMS_XDB.SETLISTENERLOCALACCESS(FALSE);

```

#５.ユーザー追加

ユーザーをoracleのグループに追加

```console:command
$ sudo usermod -g dba root
$ sudo usermod -g dba administrator
$ sudo usermod -g dba krakenbeal
```
#6.インストール完了？
とりあえずこれで別のマシンから、DBの状態は見れて操作はできるのですが…
データに日本語のデータを入れると文字化けしてしまう

どうやらデータベースのデフォルトの文字コードは「AL32UTF8」のため、日本語は文字化けするらしい、通常版であれば、インストール時に文字コードの設定ができるのですが、このバージョン（無償版）はそれができないらしい…

正確には、インストールで簡単にできない、いろいろし設定をしないとダメらしいです…、それはまた次回に持ち越しで…



#参考

[Ubuntu 10.10 32bit版にOracle 10g Express Editon をインストール - KRAKENBEAL RECORDS]
(http://krakenbeal.blogspot.jp/2011/04/ubuntu-1010-32bitoracle-10g-express.html)
C++ builder XE4, 10.2 Tokyo > FileIO > ExtractFilePath():ドライブ・フォルダを返す / ExtractFileName():ドライブ・フォルダをなくしてファイル名＋拡張子を返す

```txt:動作確認
C++ Builder XE4
Rad Studio 10.2 Tokyo Update 2 (追記: 2017/12/27)
```

## 混乱

XE4にはExtractFilePath()やExtractFileName()というファイル関連の関数がある。

問題はFilePathとFileNameの定義。

僕自身は「ファイルパス」は「ドライブ＋フォルダ＋ファイル名＋拡張子」がすべてそろったものと把握してきた。その定義をどこで覚えたかは失念。
以下のようなサイトでの説明がある。
関連 http://www.724685.com/word/wd111116.htm

一方で「ファイルパス」を「ドライブ＋フォルダ」としているのが、XE4流儀。

また、「ファイル名」についても拡張子をつける/つけないの流儀がある。
XE4ではFileNameは拡張子付きのようだ。


## code

```Unit2.cpp
void __fastcall TForm2::Button1Click(TObject *Sender)
{

	String srcfile = L"D:\\WORK\\tmp160124.txt";

	String res1 = ExtractFilePath(srcfile);
	OutputDebugStringW(res1.c_str());

	String res2 = ExtractFileName(srcfile);
	OutputDebugStringW(res2.c_str());

}
```

```txt:結果
デバッグ出力: D:\WORK\ プロセス Project2.exe (876)
デバッグ出力: tmp160124.txt プロセス Project2.exe (876)
```

同じ用語で違うものをさす場合があり困る。

ExtractFileDir()とExtractFilePath()の違いが気になったが、ここでやめておく。
【Objective-C】Xcode上でクラス名のコンフリクトに注意

# 名前のコンフリクト

## ケース
この例ではUIViewControllerにUIViewをセットしたい場合に以下のクラス名指定をしてしまうと次の事象に遭遇し正しくViewが描画できない。この事象により数時間ハマったため、自分用メモで残す。

# 事象
互いのクラス名が連続して同一の文字列が（この例ではDisplayViewがそれにあたる）複数含まれているとダメっぽい。
例えば、NameDisplayViewController.xibにDisplayView.xibというxibを作った場合、ビルドは通るが、実行時にクラス名指定が原因によるコンフリクトを起こす。起こる現象としては、

+ 正しくViewが描画できず意図した処理結果が出力されない

などの問題が起きる。対策としては

+ 制御と表示など、それぞれ意図した処理に準拠したクラス名を指定する
（NameViewController.xib, NameDisplayView.xibなど）
（UIViewControllerとUIViewの名前を２部分以上連続して同じ名前にしない)

などが挙げられる。

# 備考

実行時にエラーも吐いたが、そのエラーメッセージから読み解くというより、エラーメッセージに応じたパターンがあるので適宜調べると良いかも。

サンプルのパターンに限らず他コンポーネントに対するクラス名の指定に関しては、ほぼほぼ本内容が当てはまる。
FFTでマイク入力に反応するLEDをoFとArduinoでつくる

# 前置き
人の声に応じていい具合に光るものを作って欲しいという依頼があったので，ここにメモとして残しておきます．
## 開発環境
手軽にLEDを光らせるために，今回はArduino Unoを用いました．また，マイクから入力された声に反応させるためには，ある程度の解析が必要になるので，Arduino上ではなく，openFrameworksで音声解析したものをシリアル通信で送ることにしました．

![しんぞう.png](https://qiita-image-store.s3.amazonaws.com/0/118746/a8f47019-77c9-c91e-681a-b31f538552af.png)

```text
OS: windows7 64bit
IDE: visual studio 2015
Arduino: 1.6.8
openFrameworks: 0.9.0
```

使用したLEDは[こちらのカラーLED](http://akizukidenshi.com/catalog/g/gI-08412)です．
# oF側
oFでは，マイクから入力した音声をFFTにかけて解析，特定の周波数成分に応じたパラメータをArduino側にシリアルで送ります．

## FFT
FFTとはFast Fourier Transform(高速フーリエ変換)のことです．oFではアドオンとしてofxFftが使えます．また単純に音源をFFTしたいときは標準クラスのofSoundPlayerのメソッドofSoundGetSpectrum()を使えるようです．今回は，マイク入力をより簡単に扱いたかったので，oFフォーラム内の[このサンプル](https://forum.openframeworks.cc/t/audio-input-fft-example/186/7)を参考にさせて頂きました．

まず音周りの設定をします．

```cpp
//outputは0チャンネル，inputは1チャンネルに設定
ofSoundStreamSetup(0, 1, this, 44100, buffer_size, 4);
```

フォーラムで参考にしたFFTクラスのインスタンスmyfftを生成して，音が鳴ると呼び出されるofApp::audioReceived内に以下のようにすると，magnitudeに結果が入ります．

```cpp
myfft.powerSpectrum(0, (int)fft_size, audio_input, buffer_size,
        magnitude, phase, power, &avg_power);
```

## シリアル通信
Arduino側にFFTの結果を逐次送るためにシリアル通信を行います．今回は[ofxSimpleSerial](https://github.com/LeoColomb/ofxSimpleSerial)というアドオンを用いました．以下のような感じ．

```cpp
serial.setup("COM9", 9600); //Setup()内でArduinoのポート番号と通信速度を設定
```
```cpp
serial.writeByte(value); //byte型の値を送る
```

例えば３つの値を送る場合は，後でArduino側で識別するためにヘッダを付けます．

```cpp
//例えば帯域に分けて送りたい場合
serial.writeString("H");
serial.writeByte(valueLow);
serial.writeByte(valueMid);
serial.writeByte(valueHigh);
```

# Arduino側
Arduinoでは，シリアルでパラメータを逐次受け取り，それをもとにLEDの輝度を変化させます．

## Adafruit Neopixel ライブラリの使用
カラーLEDを比較的簡単に制御できる[ライブラリがあったのでこれ](https://github.com/adafruit/Adafruit_NeoPixel)を利用します．使用法は[ここ](http://www.jonki.net/entry/2014/12/17/130536)やライブラリのソースに詳しく載っています．

## シリアル通信
oFからの信号を受信します．前述のように複数の値を送っている場合，ヘッダで認識します．

```c
int low, mid, high;
if(Serial.available() >= sizeof('H') + sizeof(byte)*3){
  if(Serial.read() == 'H'){
    low = Serial.read();
    mid = Serial.read();
    high = Serial.read();
  }
}
```

今回は13番ピンに6個のLEDを直列に繋ぎました．以下のような感じに．

```c
#include <Adafruit_NeoPixel.h>
#include <string.h>

#define LED_OUTPIN 13
#define NUM_LED 6
Adafruit_NeoPixel RGBLED = Adafruit_NeoPixel(NUM_LED, LED_OUTPIN, NEO_RGB + NEO_KHZ800);

void setup() {
  Serial.begin(9600);
  RGBLED.begin();
  RGBLED.show();
}

void loop() {
  int low, mid, high;
  if(Serial.available() >= sizeof('H') + sizeof(byte)*3){
    if(Serial.read() == 'H'){
      low = Serial.read();
      mid = Serial.read();
      high = Serial.read();
    }

    for(int i = 0; i < 6; i++){
      if(high > 245) high = 245;
      RGBLED.setBrightness(10 + high);
      int r = 250 - 40 * i;
      int g = 10 + 40 * i;
      int b = abs(sin(2*PI/30000*millis())) * 200;
      RGBLED.setPixelColor(i, r, g, b);
      RGBLED.show();
    }
  }
}

```

# テストの様子
実際に光らせている様子が[こちら](https://vimeo.com/160556656)．
:smiley:
新人育成用の入門書：Webアプリ編

##最初の半年から1年で以下の内容のマスターを目指そう。

学習に使うパソコンはWindowsマシンで。
Corei 5 以上、メモリ32G、SSD256Gくらいのデスクトップを買っておけば10年は使えるでしょう。
開発環境や仮想環境はメモリを消費するので、積めるだけ積むのがセオリー。

Linuxを使えないと話にならない。
- [TECHNICAL MASTER はじめてのCentOS 7　Linuxサーバ構築編 ]
(http://www.amazon.co.jp/exec/obidos/ASIN/B00XOM9NEU/mmqiita-22/ref=nosim/)

- [まんがでわかるLinux　シス管系女子](http://www.amazon.co.jp/exec/obidos/ASIN/B00TQMFOCW/mmqiita-22/ref=nosim/)

- [まんがでわかるLinux シス管系女子2](http://www.amazon.co.jp/exec/obidos/ASIN/4822236072/mmqiita-22/ref=nosim/)


SQLくらいはね。
- [改訂新版 反復学習ソフト付き SQL書き方ドリル]
(http://www.amazon.co.jp/exec/obidos/ASIN/4774130850/mmqiita-22/ref=nosim/)


GitクライアントのSourceTreeを使えれば十分。
- [Gitが、おもしろいほどわかる基本の使い方33]
(http://www.amazon.co.jp/exec/obidos/ASIN/4844365010/mmqiita-22/ref=nosim/)


HTML5以前はもう不要。
- [これからのWebサイト設計の新しい教科書 CSSフレームワークでつくるマルチデバイス対応サイトの考え方と実装]
(http://www.amazon.co.jp/exec/obidos/ASIN/4844364898/mmqiita-22/ref=nosim/)

- [HTML5/CSS3モダンコーディング フロントエンドエンジニアが教える3つの本格レイアウト スタンダード・グリッド・シングルページレイアウトの作り方]
(http://www.amazon.co.jp/exec/obidos/ASIN/B0176GNY26/mmqiita-22/ref=nosim/)

- [UIまで手の回らないプログラマのためのBootstrap 3実用ガイド]
(http://www.amazon.co.jp/exec/obidos/ASIN/4798135992/mmqiita-22/ref=nosim/)

これを読み終えれば、最新のフレームワークも使えるようになるはず。
- [JavaScript Web開発パーフェクトマスター]
(http://www.amazon.co.jp/exec/obidos/ASIN/4798043885/mmqiita-22/ref=nosim/)


Javaのサーバーサイドはまずこれから。
- [Javaサーバーサイドプログラミングパーフェクトマスター]
(http://www.amazon.co.jp/exec/obidos/ASIN/4798045187/mmqiita-22/ref=nosim/)
Cloud DataflowのSampleをまずは動かしてみる

以下公式ページをそのまま実施しした時のメモと意訳です。

https://cloud.google.com/dataflow/getting-started?hl=ja
https://cloud.google.com/dataflow/getting-started-maven?hl=ja

Dataflowの実行・開発環境としてはJavaを使用する。
最近Python版も準備されつつあるが、まだドキュメントにあまり反映されてないので。
https://developers.google.com/api-client-library/python/apis/dataflow/v1b3#system-requirements

今回はGCPのComputeEngine上で実行環境を構築。
※OSはdebian

# Sampleを実行するまでの流れ
- GCPのプロジェクトセットアップ
- JDKとGoogle SDKのセットアップ
- Mavenのインストール
- Dataflowのサンプルプログラムのダウンロード

# GCPのプロジェクトセットアップ
GPCのプロジェクトを作成し、Billingを設定する。
そしてDataflowのジョブを実行するために必要な以下のAPIを有効にする。
Google Cloud Dataflow API
Compute Engine API (Google Compute Engine)
Google Cloud Logging API
Google Cloud Storage
Google Cloud Storage JSON API
BigQuery API
Google Cloud Pub/Sub
Google Cloud Datastore API

# Google Cloud SDkのセットアップ
以下のページの通り実行。
https://cloud.google.com/sdk/?hl=ja#deb

```
# aptをインストール
$ sudo apt-get update
$ sudo apt-get install git

# 環境変数を設定
export CLOUD_SDK_REPO="cloud-sdk-$(lsb_release -c -s)"

# Cloud SDKディストリビューションのURIを追加
echo "deb http://packages.cloud.google.com/apt $CLOUD_SDK_REPO main" | sudo tee /etc/apt/sources.list.d/google-cloud-sdk.list

# Google Cloudの公開鍵をインポート
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -

# Cloud SDKをアップデート
$ sudo apt-get update && sudo apt-get install google-cloud-sdk

# Googleへの認証をセット
$ gcloud auth login

# defaultのGoogle Projectのセット
$ gcloud config set project <ProjectID>
```

# Java SDkのセットアップ
OracleのJava SDK（jdk1.8.0_73）をインストールし、PATHとJAVA_HOMEを設定。

# Mavenのセットアップ

```
$ sudo apt-get install maven
```

# サンプルのPipelineを実行

```
# githubからサンプルをコピー
$ git clone https://github.com/GoogleCloudPlatform/DataflowJavaSDK-examples.git

# WordCount exampleをコンパイルし、実行
$ mvn compile exec:java -Dexec.mainClass
=com.google.cloud.dataflow.examples.WordCount -Dexec.args="--runner=BlockingDataflowPipelineRunner --project=<ProjectID名を指定> --stagingLocation=gs://<Bucket名>/test-yotsu"
```

正常に終了すると、CloudStorageにWordCountした結果ファイルが出力されている。