OmniAICreator/Qiita-1.07M huggingface dataset:
AnimationCurveを使って値を変化させる

値をだんだんと変更する場合のコードにも色々書き方はありますが例として、完了するまでの時間と位置を指定して変更したい場合は以下のようなコードと挙動になります。

```lang:LinearMove.cs
using UnityEngine;
using System.Collections;

public class LinearMove : MonoBehaviour {

    [SerializeField] private Vector3 destPos;
    [SerializeField] private float tweenTime;

    private bool isMoving = false;

    // Use this for initialization
    void Start () {
        StartCoroutine(MoveCor());
	}
   
    IEnumerator MoveCor()
    {
        if (isMoving) yield break;
        isMoving = true;

        var startTime = Time.time;
        var initPos = transform.position;

        while (Time.time - startTime < tweenTime)
        {
            float rate = (Time.time - startTime) / tweenTime;
            transform.position = Vector3.Lerp(initPos, destPos, rate);
            yield return new WaitForEndOfFrame();
        }

        transform.position = destPos;
        isMoving = false;
    }
}
```

![movepos1.gif](https://qiita-image-store.s3.amazonaws.com/0/31480/db4bdff4-06ef-5096-09b5-eaf122d376ff.gif)

等速移動のみを実装したい場合以上のコードでも十分ですが、トゥイーンさせたい場合は AnimationCurve を使えばとても簡単に実装できます。

```lang:TweenMove.cs
using UnityEngine;
using System.Collections;

public class TweenMove : MonoBehaviour {
    
    [SerializeField] private Vector3 destPos;
    [SerializeField] private float tweenTime;
    [SerializeField] private AnimationCurve tweenCurve = AnimationCurve.EaseInOut(0, 0, 1, 1);

    private bool isTweening = false;

    // Use this for initialization
    void Start () {
        StartCoroutine(MoveCor());
	}
   
	IEnumerator MoveCor()
    {
        if (isTweening) yield break;
        isTweening = true;

        var startTime = Time.time;
        var initPos = transform.position;

        while (Time.time - startTime < tweenTime)
        {
            float rate = (Time.time - startTime) / tweenTime;
            var curvedRate = tweenCurve.Evaluate(rate);
            transform.position = Vector3.Lerp(initPos, destPos, curvedRate);
            yield return new WaitForEndOfFrame();
        }

        transform.position = destPos;
        isTweening = false;
    }
}
```

![movepos2.gif](https://qiita-image-store.s3.amazonaws.com/0/31480/9b8184b4-8597-2640-9375-bcdc28e2e6aa.gif)

コードの内容にはほとんど差がありませんが、見た目の印象はかなり違います。
今回は Vector3 を対象としていますが、どのような値にも適用できます。
Chromeでサクッとキャッシュを削除する


個人的メモ

* 開発者ツールを立ち上げる
* 左上のリロードボタンを長押しする
* キャッシュの消去とハード再読み込みを選択する
* これでキャッシュクリアはOK

ソースコードが最新のはずなのに、反映されない時などに試すべし
mintedをusepackageしただけで図の配置が崩れるとき

# 問題

シンタックスハイライトのために

```latex
\usepackage{minted}
```

と書いただけで図の配置が崩れてしまう！なんでやねん！

# 原因

`dvipdfm`ではなく`dvipdfmx`を使わないと図がズレるのは有名な話だと思いますが，おそらくそれに関する問題です．TeX素人なので推測ですが，**`minted`が内部で`dvipdfm`を使っており，`dvipdfmx`をかき消してしまう**のが原因だと思われます．この直感をもとに

```latex
\usepackage{minted}
\usepackage[dvipdfmx]{graphicx}
```

の順番で書くようにすると見事に解決しました．2時間ぐらい費やしたので同じ被害者が出ないためにも書き残しておきます…
[Swift]NSTextCheckingTypeを使って正しいリンク形式かどうかを判断する

SNSなどのアプリでプロフィールにWebリンクを追加したい場合があると思いますが、サーバーに文字列などの情報を実際に送る前にクライアント側で有効なURLかどうかを判断したい場合の実装です。

【実装後のイメージ】
<img width="375" alt="IMG_2971.PNG.jpeg" src="https://nagisa-system.qiita.com/files/f89672dc-6cd0-14d5-4e08-4dd265977c3a.jpeg">

`NSTextCheckingType`と`NSDataDetector`を使った方法です。
とりあえず実装例。

```swift

protocol Validator {
    func validateURL(urlString: String) -> Bool
}

extension Validator {
    func validateURL(urlString: String) -> Bool {
        var result = false
        let types: NSTextCheckingType = .Link
        let detector = try? NSDataDetector(types: types.rawValue)
        guard let detect = detector else {
            return result
        }
        let matches = detect.matchesInString(urlString, options: .ReportCompletion, range: NSMakeRange(0, urlString.characters.count))
        for match in matches {
            if let url = match.URL {
                print("url \(url)")
                result = true
            }
        }
        return result
    }
}
```

色々なValidationメソッドを今後も追加したいのでprotocol extensionを採用しました。

`NSRegularExpression`を使って、

```swift

try! NSRegularExpression(pattern: "https?://([-\\w\\.]+)+(:\\d+)?(/([\\w/_\\.]*(\\?\\S+)?)?)?", options: NSRegularExpressionOptions(rawValue: 0))
```
のようなパターンを作ってmatchをチェックする方法もあると思いますが、自前で正規表現を用意しなくても基本的な機能なら上の二つのクラスを使ってまかなえそうです。

`NSRegularExpression`はハッシュタグの検索とか

```swift
try! NSRegularExpression(pattern: "#(\\w+)", options: NSRegularExpressionOptions(rawValue: 0))
```

`NSTextCheckingType`が用意していないケースのマッチを探す場合だけでいいかなと思いました。
`NSTextCheckingType`は現在

・Orthography
・Spelling
・Grammar
・Date
・Address
・Link
・Quote
・Dash
・Replacement
・Correction
・RegularExpression
・PhoneNumber
・TransitInformation

があるので用途に応じて使っていこうと思います。
PowerCLI DiskStorageFormatオプションのバグ対策

VMをNew-Templateするときディスクフォーマットを指定したい場合の話。
DiskStorageFormatオプションにバグがあるらしく、ディスクフォーマットの指定をするとエラーになる。
なので、回避策としてCLIを通さない方法を作った。(onyxのおかげ。)
$vmNameにインベントリ名を入れればとりあえず動く…はず。
本来はNew-Template一発でいけるけど、DiskStorageFormatオプションではまった。

#コード

        #VMオブジェクト取得
		$vm = Get-VM -Name $vmName

		#------バックアップするVMの情報収集------
		#diskIDとディスク数
		$disks = $vm|Get-harddisk|% {$_.id.split('/')[1]}
		$numberOfDisks = @($disks).Length

		#フォルダグループ
		$ary = $vm|Select FolderId|% {$_.folderid.split('-')}
		$folTyp = $ary[0].tostring()
		$folVal = $ary[1].tostring() + "-" +$ary[2].tostring()

		#データストア
		$ary = Get-Datastore -Name $dataStoreName|% {$_.id.split('-')}
		$dsTyp = $ary[0].tostring()
		$dsVal = $ary[1].tostring() + "-" +$ary[2].tostring()

		#HOST
		$ary = $vm|Select VmHostId|% {$_.vmhostid.split('-')}
		$htTyp = $ary[0].tostring()
		$htVal = $ary[1].tostring() + "-" +$ary[2].tostring()

		#------テンプレート化設定(VM本体)------
		$folder = New-Object VMware.Vim.ManagedObjectReference
		$folder.type = $folTyp
		$folder.Value = $folVal
		$spec = New-Object VMware.Vim.VirtualMachineCloneSpec
		$spec.location = New-Object VMware.Vim.VirtualMachineRelocateSpec
		$spec.location.datastore = New-Object VMware.Vim.ManagedObjectReference
		$spec.location.datastore.type = $dsTyp
		$spec.location.datastore.Value = $dsVal
		$spec.location.host = New-Object VMware.Vim.ManagedObjectReference
		$spec.location.host.type = $htTyp
		$spec.location.host.Value = $htVal
		$spec.location.disk = New-Object VMware.Vim.VirtualMachineRelocateSpecDiskLocator[] ($numberOfDisks)
		#------テンプレート化設定(各ディスク)------
		$i=0
		foreach($diskNum in $disks){
			$spec.location.disk[$i] = New-Object VMware.Vim.VirtualMachineRelocateSpecDiskLocator
			$spec.location.disk[$i].diskId = $diskNum
			$spec.location.disk[$i].datastore = New-Object VMware.Vim.ManagedObjectReference
			$spec.location.disk[$i].datastore.type = $dsTyp
			$spec.location.disk[$i].datastore.Value = $dsVal
			$spec.location.disk[$i].diskBackingInfo = New-Object VMware.Vim.VirtualDiskFlatVer2BackingInfo
			$spec.location.disk[$i].diskBackingInfo.fileName = ""
			$spec.location.disk[$i].diskBackingInfo.diskMode = ""
			$spec.location.disk[$i].diskBackingInfo.thinProvisioned = $true
			$i++
		}

		$spec.template = $true
		$spec.powerOn = $false

		#------テンプレート化実行------
		$_this = Get-View -Id $vm.id
		$_this.CloneVM_Task($folder, "${vmName}", $spec)
[Swift] [iOS] チャート表示ライブラリ [ios-charts] 詳細な使い方

#目的
[前回の記事](http://qiita.com/touyu/items/4fbd6d8187eb74752ba0)のより詳細な紹介。

#プロパティ
##ChartViewBase (全てのチャートに含まれる)
UIViewを継承。

```swift
// タップでデータを選択できるか
.highlightPerTapEnabled = true

// 指を離してもスクロールが続くか
.dragDecelerationEnabled = true

// 指を離してからの自動スクロールの減速度合い(0~1)
.dragDecelerationFrictionCoef = 0.9

// description textのフォント、フォントカラー
.descriptionFont = UIFont(name: "HelveticaNeue", size: 9.0)
.descriptionTextColor UIColor.blackColor()

// description textの整列
.descriptionTextAlign = NSTextAlignment.Right

// description textの表示位置
.descriptionTextPosition = nil

// information textのフォント、フォントカラー
.infoFont = UIFont(name: "HelveticaNeue", size: 12.0)
.infoTextColor = UIColor(red: 247.0/255.0, green: 189.0/255.0, blue: 51.0/255.0, alpha: 1.0) // orange

// description textの内容
.descriptionText = "Description"

// データがない時に表示するテキスト
.noDataText = "No chart data available."

// なぜ、データが無いかを説明するテキスト
.noDataTextDescription = ""

// グラフの余白
.extraTopOffset = 0.0
.extraRightOffset = 0.0
.extraBottomOffset = 0.0
.extraLeftOffset = 0.0
```

##BarLineChartViewBase
ChartViewBaseを継承。

```swift
// ピンチでズームが可能か
.pinchZoomEnabled = false

// ダブルタップでズームが可能か
.doubleTapToZoomEnabled = true

// ドラッグ可能か
.dragEnabled = true

// X,Y方向にズーム可能か
.scaleYEnabled = true
.scaleYEnabled = true

// チャートエリアの背景色
.gridBackgroundColor = UIColor(red: 240/255.0, green: 240/255.0, blue: 240/255.0, alpha: 1.0)

// ボーダーの色、太さ
borderColor = UIColor.blackColor()
borderLineWidth: CGFloat = 1.0

// グリッド線の表示
.drawGridBackgroundEnabled = false

// 境界線の表示
.drawBordersEnabled = false

// 最小のオフセット
.minOffset = CGFloat(10.0)

// 左のY軸
.leftAxis: ChartYAxis!

// 右のY軸
.rightAxis: ChartYAxis!

// X軸
.xAxis: ChartXAxis!
```

ChartYAxis, ChartXAxisについては[[Swift] [iOS] チャート表示ライブラリ [ios-charts] 軸に関する設定](http://qiita.com/touyu/items/b4011e260cc22d0af8d5)を参照。

##BarLineChartView
BarLineChartViewBaseを継承。

```swift
// 選択されたバーの右上に三角形の印でハイライトするか
.drawHighlightArrowEnabled = false

// バー上にある値の表示(バー内か、バーより上か)
.drawValueAboveBarEnabled = true

// それぞれのバーにグレーのエリアが描画される
.drawHighlightArrowEnabled = false
```

#メソッド
##ChartViewBase (全てのチャートに含まれる)
UIViewを継承。

```swift
// グラフの余白
func setExtraOffsets(left left: CGFloat, top: CGFloat, right: CGFloat, bottom: CGFloat)
```
Vagrant コマンドラインインターフェース INIT

#INIT

##command: vagrant init [box-name] [box-url]

Vagrantfileがない場合、カレントのディレクトリにそれを作成し、Vagrantの環境を作る。

第１引数がある場合、その値がVagrantfileのconfig.vm.boxに設定される。
第２引数がある場合、その値がVagrantfileのconfig.vm.box_urlに設定される。

####オプション

<dl>
<dt>--force</dt>
<dd>
既存のVagrantfileを上書きする。
</dd>
<dt>--minimal</dt>
<dd>
最小のVagrantfileが作成される。通常のVagrantfileにあるような説明のコメントが省略されている。
</dd>
<dt>--output ${FILE}</dt>
<dd>
Vagrantfileが\${FILE}に出力される。${FILE}に「-」が指定されている場合、Vagrantfileは標準出力に出力される。。
</dd>
</dl>
PHP7.0に踏み切って思ったこと

PHP7.0に踏み切って思ったこと。

WordPress(最新版4.4)に関しては普通に使う分には問題ない。

しかし、古い自作プログラムの場合は修正が多い。

オープンソースのアプリではpecl mysql extensionなどその辺で引っかかることが多く動かないことが多いので、

その場合、
ここから
https://github.com/php/pecl-database-mysql

git clone https://github.com/php/pecl-database-mysql mysql --recursive

./configure

make

make install

をする必要がある。

しかし、ハードの側面から見ていくとPHPの整数型が64bitだから変更することにより、エコだということが凄く実感できると思う。
overflowでスクロールバーをつけたテーブルで、クリックした行まで自動スクロールする。

overflowでスクロールバーをつけたテーブルで、クリックした行まで自動スクロールする。
tdのonclick属性でこの関数を呼び出す。

$('.scrollTable').offset().top; と $('.scrollTable').offset().top;

```js
// 選択したメニュー項目が一番上になるようにスクロールを行う。
function scroll(clickElem) {

    var table_top = $('.scrollTable').offset().top;
    var table_now_pos = $('.scrollTable').offset().top;
    var table_base = table_now_pos - table_top;


    var row = $(clickElem).closest('tr').index();
    if (row == 0) {
        $('.scrollBody').animate({ scrollTop: table_base }, 'slow');
        return;
    }

    var row_top = $(clickElem).offset().top;
    var scroll_to = table_base + row_top;
    $('.scrollBody').animate({ scrollTop: scroll_to }, 'slow');

}

```

参考：http://blog.machacks.net/2013/04/22/%E7%94%BB%E9%9D%A2%E5%86%85%E3%81%AB%E9%85%8D%E7%BD%AE%E3%81%97%E3%81%9F%E3%82%B9%E3%82%AF%E3%83%AD%E3%83%BC%E3%83%AB%E5%8F%AF%E8%83%BD%E3%81%AA%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E3%82%92%E3%82%AF/
embulkで処理する各レコードにprocを適用して加工するembulk-filter-ruby_procを作った

embulkのプラグインを一つ作りました。

[joker1007/embulk-filter-ruby_proc](https://github.com/joker1007/embulk-filter-ruby_proc "joker1007/embulk-filter-ruby_proc")

[embulk-filter-eval](https://github.com/mgi166/embulk-filter-eval "mgi166/embulk-filter-eval: Eval ruby code on filtering") というプラグインがあって、Rubyのコードをそのままevalするんで何でもできるんですが、一レコード毎に毎回evalするのはデータ量多くなってくると効率悪いだろうと思い、もうちょっと自由度下げても良いならprocだけ事前に準備してしまえばいいだろうという発想で作ったプラグインです。
もう自由に何でもかんでもやりたい場合は、filter-evalを使いましょう。

### config
```yaml
# ...

filters:
  - type: ruby_proc
    requires:
      - cgi
    columns:
      - name: data
        proc: |
          ->(data) do
            data["events"] = data["events"].map.with_index do |e, idx|
              e.tap { |e_| e_["idx"] = idx }
            end
            data
          end
      - name: id
        proc: |
          ->(id) do
            id * 2
          end
        type: string
      - name: comment
        proc: |
          ->(comment, record) do
            return [record["account"].to_s].to_json unless comment
            comment.upcase.split(" ").map { |s| CGI.escape(s) }
          end
        skip_nil: false
        type: json
    target: events

# ...

```

`proc`という項目にrubyのprocのソースコードをまんま記述します。
第一引数に、そのカラムの値が入ります。
第二引数も受け取る様になってる場合は、レコード全体も受け取るようになっているので、他のカラムの値を使って加工できます。
procの返り値でカラムの内容が置き換えられるので、副作用を使って更新したい場合は、`tap`を使うなり返り値を指定するなりで調整します。

filter後のカラムの型は`type`で指定します。

`skip_nil`に`false`を指定すると、カラムの値がnilでもprocが動作します。
デフォルトではnilはスキップして処理しないようになっています。

`requires`に配列で文字列を渡しておくと、事前にその名前のライブラリをrequireします。

これで大体の加工はできるはずだし、evalするよりは早く済む気がします。
要求されるパフォーマンス次第ですが、もし使い道があれば御活用ください。
Vagrant コマンドラインインターフェース GLOBAL STATUS

#GLOBAL STATUS

##command: vagrant global-status

現在ログイン中のユーザにシステム上の全ての有効なVagrant環境の状態を表示する。

>
このコマンドが表示するマシンの状態は積極的に照合されたものでなく、<font color="#ff0000">キャッシュが元となっている</font>。その為、<font color="#ff0000">情報が古い可能性がある</font>（落ちているのに動作中と表示されていたり）。例えば、PCを再起動したときに、Vagrantはそれを検知しない。無効な結果を除くには、global-statusに<b>--prune</b>オプションを付ける必要がある、

出力結果にある「a1b2c3」等のIDはシステム上のどこからでもVagrantマシンをコントロールするのに使用することができる。ターゲットとするマシンを要するVagrantのコマンド（up、halt、destroyなど）ではこのIDを使ってコントロールすることができる。例：<b>vagrant destroy a1b2c3</b> 

####オプション

<dl>
<dt>--prune</dt>
<dd>
無効な結果をリストから除外する。単純にリストを表示するよりかなりの時間を要する。
</dd>
</dl>

環境が表示されない場合

環境が表示されない場合、vagrant destroy→vagrant upを実行してみる。
以前のVagrantのバージョンからアップグレードした場合、既存の環境は破棄して、再作成しないとglobal-statusに表示されない。
rails c でカラムの確認

カラムの確認したいけど、mysqlに行くのがめんどくさいときにrails cから確認する方法。


```
User.columns
```

でいける。

ただこれだと他の情報も引っ付いてくるので、カラム名だけほしいときは、

```
User.columns.map(&:name)
```

とか。

Hirbがいい感じに整形してくれるかと思ったけどだめだった。



## 2016/2/17 追記

こんな方法があった。

```
User.column_names
```


絶句です
Redmine | 任意の文字列で外部リンクを貼る 


**"文字列":URL** という形式で書く。

## 例

```
"Example":http://example.com/

```

## 結果

[Example](http://example.com/)



<!-- Update From Qiita API -->

# チャットメンバー募集


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

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


# メンター受付


https://menta.work/user/5694

<!-- Update From Qiita API -->
c++ builder > naming > CB_status0 [0始まり] / CB_status1 [1始まり]

```txt:動作確認
C++ Builder
```

### 問題

(50個 x 3)ほどのコンポーネントを扱う時、各コンポーネントの処理を共通化したい。

共通化する時に、メンバ関数を１つにして、コンポーネント名(例: CB_status0)から「何番目のコンポーネントを変更したか」を知り、それと関連する別のコンポーネントに対して処理を行いたい。

ここで、名前付けで以下のいずれかとすることになる。

1. 0始まり
  - 例: CB_status0, CB_status1, ...
2. 1始まり
  - 例: CB_status1, CB_status2, ...

こういうのはどちらを選択するかで、「0始まり -> 1始まり」変換や「1始まり->0始まり」変換をしないといけなくなる。

それらを失敗すると off-by-one errorを生じる。


### それぞれの根拠

1. 0始まり
   - 配列のインデックスは0から始まるので、コード処理に親和性がある
2. 1始まり
   - コンポーネントを作成すると番号自動付加では1から始まる。デザイン側と親和性がある
   - 0始まりとした場合、自動付加 Label1, Label2, ...に対して、CB_status0, CB_status1, ...が混在すると混乱を生じる
awspec使ってみた

試しにawspecを触ってみたのでメモ

## 初期セットアップ(ディレクトリ等)
```
# awspec init

下記の構成になる
# tree -a
├── .rspec
├── Gemfile
├── Gemfile.lock
├── README.md
├── Rakefile
└── spec
    ├── .gitignore
    └── spec_helper.rb
```

## Profile(secrets.yml)の作成
secrets.ymlを使用することによりアカウントの指定が楽になる
個人的には `--profile` よりこっちが安全だと思うのでこっちを推奨
作成しない場合はawspec実行時に `--profile=PROFILE` で指定が可能

```
# vi spec/secrets.yml

region: REGION
aws_access_key_id: ACCESSKEY
aws_secret_access_key: SECRETKEY
```

## 現在の設定からgenerate
vpc上に存在してるEC2の情報を出力する
generateしたファイルをベースにspecファイルを作るのが楽だった

結果がec2_spec.rbとして出力する。
その他のServiceについても同様に出力を行う

```
# awspec generate ec2 vpc-xxxxxx >> spec/ec2_spec.rb
```

generateしたままでは使用できないのでファイルを編集

```
# vi spec/ec2_spec.rb
1行目にrequireを追加
require 'spec_helper'

describe ec2('INSTANCE_NAME') do
  it { should exist }
  it { should be_running }
  its(:instance_id) { should eq 'i-xxxxxxxx' }
  its(:image_id) { should eq 'ami-xxxxxxxx' }
  its(:private_dns_name) { should eq 'ip-10-0-0-1.ap-northeast-1.compute.internal' }
  its(:public_dns_name) { should eq '' }
  its(:instance_type) { should eq 'INSTANCE_TYPE' }
  its(:private_ip_address) { should eq '10.0.0.1' }
  its(:public_ip_address) { should eq 'xx.xx.xx.xxx' }
  it { should have_security_group('SG_NAME') }
  it { should have_security_group('SG_NAME') }
  it { should belong_to_vpc('VPC_NAME') }
  it { should have_eip('xx.xx.xx.xxx') }
  it { should have_ebs('vol-xxxxxxxx') }
end
```

ファイルの書き方は基本的にServerspecと同様  
`it { should exist }` とか `it { hould have_xxx('xxxxxx') }` といった形
Serverspec書いていたらわかりやすいはず
詳細は[Serverspec](http://serverspec.org/)や[awspec](https://github.com/k1LoW/awspec) を参照

## Spec実施

コマンドを実行する成功していれば緑表示、失敗している部分は赤表示になります

```
# rake spec
ec2 'web01'
  should exist
  should be running
  should have security group "web"
  should have security group "prod"
  should have security group "ssh"
  should belong to vpc "web-vpc"
  should belong to subnet "subnet-xxxxxxxx"
  should have eip "xx.xx.xx.xxx"
  should have ebs "vol-xxxxxxx"
  instance_id
    should eq "i-xxxxxxxx"
  image_id
    should eq "ami-xxxxxxxx"
  private_dns_name
    should eq "ip-10-1-0-10.ap-northeast-1.compute.internal"
  public_dns_name
    should eq ""
  instance_type
    should eq "t2.micro"
  private_ip_address
    should eq "10.1.0.10"
  public_ip_address
    should eq "xx.xx.xx.xxx"

Finished in 0.17717 seconds (files took 1.55 seconds to load)
16 examples, 0 failures
```

## エラーとか

- subnetでFailuresになる
generateで作成した場合はbelong_to_subnetにSubnet名が入力されているはず、
subnetIDに変更してみたら動いた。 
自分の時はpublic-aというsubnet名で指定していたがsubentIDにしないと動かなかった

## 思ったこと
今思っただけなので明日、来週、来月には考え変わってるかもというメモ
ベストプラクティスがあればいいけど設計思想や状況によるじゃないかと思って書いておく

- 一度作った環境からgenerateするべきかspec書いてから構築するべきか

1. terraform等で構築後にgenerate
-> そのterraformで間違ってたらダメじゃん
2. spec書いてから構築
-> 恐らくこれが正解なんだろうけど、手間だなと思ったり。

- 既存の環境化でどうやってspecファイルを作るか

- そもそも作る段階でミスってたら気が付かないんじゃね

## おわり
awspecもServerspecも便利なんで可能な限りcode化するようにしよう
c++ builder XE4, 10.2 Tokyo > debug / testing > 名前をデフォルトから変更していないコンポーネントの明示

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

http://qiita.com/7of9/items/59784e3398b8a966fa4b
の派生品。

コンポーネントを作成して、名前を変更していないTComboBoxを明示する。

```Unit1.cpp
void __fastcall TForm1::debug_showDefaultNameTCombobox()
{

	TComponent *ptarget;
	for(int idx = 0; idx < ComponentCount; idx++) {
		ptarget = this->Components[idx];
		if (dynamic_cast<TComboBox *>(ptarget) == NULL) {
			continue;
		}

		TComboBox *cbPtr = (TComboBox *)ptarget;
		if (cbPtr->Name.Pos(L"ComboBox") > 0) {
			cbPtr->Items->CommaText = "Default_name";
			cbPtr->ItemIndex = 0;
		}
	}
}
```

### 結果

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/1ff3aa2e-a3f5-df43-c36d-5125cdba8fd1.png)

IDEの「構造」から探すこともできるが、こちらの方が早い。

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

TCheckBox,TColorBox,TEditにも対応した。
未設定はVisible=falseとしてみた。

```Unit1.cpp
void __fastcall TPDF_options::debug_showDefaultNameTCombobox()
{

    TComponent *ptarget;
	for(int idx = 0; idx < ComponentCount; idx++) {
        ptarget = this->Components[idx];
		if (dynamic_cast<TComboBox *>(ptarget) != NULL) {
			TComboBox *cbPtr = (TComboBox *)ptarget;
			if (cbPtr->Name.Pos(L"ComboBox") > 0) {
				cbPtr->Items->CommaText = "Default_name";
				cbPtr->ItemIndex = 0;
			}
		}

		if (dynamic_cast<TCheckBox *>(ptarget) != NULL) {
			TCheckBox *chkPtr = (TCheckBox *)ptarget;
			if (chkPtr->Name.Pos(L"CheckBox") > 0) {
				chkPtr->Visible = false;
			}
		}

		if (dynamic_cast<TColorBox *>(ptarget) != NULL) {
			TColorBox *clrPtr = (TColorBox *)ptarget;
			if (clrPtr->Name.Pos(L"ColorBox") > 0) {
				clrPtr->Visible = false;
			}
		}

		if (dynamic_cast<TEdit *>(ptarget) != NULL) {
			TEdit *edPtr = (TEdit *)ptarget;
			if (edPtr->Name.Pos(L"Edit") > 0) {
				edPtr->Visible = false;
			}
		}
	}
}
```

これで作業が中断となっても、再開時にすぐに続きが行える。
Vagrant コマンドラインインターフェース HALT

#HALT

##Command: vagrant halt

Vagrant管理下で動作中のマシンをシャットダウンする。

VagrantはゲストOSのシャットダウンメカニズム実行によってマシンを正常に終わらせることを試みる。これが失敗した時、又は、<b>--force</b>オプションを付加することで、Vagrantはマシンの電源を落とすことで効率よくシャットダウンを行う。

Linuxベースのゲストでは、Vagrantはshutdownコマンドを使ってキチンとマシンを終了する。OSの差異により、shutdownコマンドがあるゲストの\${PATH}が異なる。ゲスト側でshutdownコマンドのあるディレクトリを${PATH}に明記する必要がある。

####オプション

<dl>
<dt>--f または --force </dt>
<dd>
キチンとマシンを終了させる手段を取らず、ゲストマシンの電源を落とす。
</dd>
</dl>
【Q&A】ReactJSのComponentをimport,exportする

### こんな実装がしたい

Componentを別ファイルに分離して、
必要なときだけimportするスタイル

```js
import React from 'react';
import Comp1 from './comp/comp1';
import Comp2 from './comp/comp2';

class ParentComp extends React.Component {
  render() {
    return (
      <div>
        <Comp1 />
        <Comp2 />
      </div>
    );
  }
}

ReactDom.render(
  <ParentComp />,
  document.getElementById('components')
);
```

***

### Q1. どうやって実装する？

A. Exportする

**comp1.js**

```js
import React from 'react';

export default class Comp1 extends React.Component {
  render() {
    return (
      <div>
        Comp 1.
      </div>
    );
  }
}
```

### Q2. **export default class**って何？

A. そのclassがimportされるときにdefaultで呼ばれるってこと

```js
// このとき自動的にdefault classが呼ばれる
import Comp1 from './comp/comp1';
```

### Q3. じゃあ**default**を付けなかったら？

A. どのclassをimportするか指定する必要がある

```js
import {Comp1} from './comp/comp1';
```

### Q4. じゃあ複数のclassを定義して、個別にimportできる？

A. Exactly（そのとおりでございます）

2つのclassを定義して

```js
import React from 'react';

export class Comp1 extends React.Component {
  render() {
    return (...
    );
  }
}

export class Comp2 extends React.Component {
  render() {
    return (...
    );
  }
}
```

個別にimportできます。

```js
import {Comp2} from './comp/comps';
```

### Q5. 気をつけるべきことは？

A. **default**を付けたclassは、個別に指定するとエラーになるケースがある。

```js
export default class DefComp...
export class NotDefComp...
```

のようなコードだったとして、

```js
// OK DefCompが呼ばれる
import DefComp from '...';

// OK DefCompとNotDefCompが呼ばれる
import {DefComp, NotDefComp} from '...';

// OK NotDefCompが呼ばれる
import {NotDefComp} from '...';

// NG default指定したclassのみを個別に呼ぶことはできない
import {DefComp} from '...';
```

となるので注意。
1つのファイルに複数のclassを定義する場合、
default指定とそうじゃないものを混ぜない方が無難だと思われる。
knife-zeroで"Unable to activate knife-zero-1.13.1"とエラーが出た時の対処法(訂正あり)

chefを使い始めて、roleの設定などは基本的にはjsonを書き換えて行っていたのですが、knifeコマンドでいろいろnodeなりcookbookの登録なりを設定しようとしたところ、エラーにはまってしまいました、、

### error msg
```
knife cookbook create setup_mysql -o cookbooks/
/opt/chefdk/embedded/lib/ruby/site_ruby/2.1.0/rubygems/specification.rb:2112:in `raise_if_conflicts': Unable to activate knife-zero-1.13.1, because chef-12.5.1 conflicts with chef (~> 12.6) (Gem::ConflictError)
	from /opt/chefdk/embedded/lib/ruby/site_ruby/2.1.0/rubygems/specification.rb:1280:in `activate'
	from /opt/chefdk/embedded/lib/ruby/site_ruby/2.1.0/rubygems.rb:198:in `rescue in try_activate'
	from /opt/chefdk/embedded/lib/ruby/site_ruby/2.1.0/rubygems.rb:195:in `try_activate'
	from /opt/chefdk/embedded/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:126:in `rescue in require'
	from /opt/chefdk/embedded/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:39:in `require'
	from /Users/yassy/.chefdk/gem/ruby/2.1.0/gems/knife-zero-1.13.1/lib/chef/knife/zero_apply.rb:2:in `<top (required)>'
	from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/chef-12.5.1/lib/chef/knife/core/subcommand_loader.rb:94:in `load'
	from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/chef-12.5.1/lib/chef/knife/core/subcommand_loader.rb:94:in `block in load_commands'
	from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/chef-12.5.1/lib/chef/knife/core/subcommand_loader.rb:94:in `each'
	from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/chef-12.5.1/lib/chef/knife/core/subcommand_loader.rb:94:in `load_commands'
	from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/chef-12.5.1/lib/chef/knife/core/subcommand_loader.rb:104:in `load_command'
	from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/chef-12.5.1/lib/chef/knife/core/subcommand_loader.rb:118:in `command_class_from'
	from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/chef-12.5.1/lib/chef/knife.rb:137:in `subcommand_class_from'
	from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/chef-12.5.1/lib/chef/knife.rb:198:in `run'
	from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/chef-12.5.1/lib/chef/application/knife.rb:142:in `run'
	from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/chef-12.5.1/bin/knife:25:in `<top (required)>'
	from /usr/local/bin/knife:54:in `load'
	from /usr/local/bin/knife:54:in `<main>'

```

### 原因
単にchef-client のversion がknife-zero で使いたかったものと異なっていてコンフリクトしてしまっていたよう。

### 対応

2/2追記:
コメントいただいた下記の対応が正解のようでしたmm

- https://github.com/higanworks/knife-zero/issues/83
- https://github.com/higanworks/knife-zero/issues/84

~~参考:http://stackoverflow.com/questions/20205889/how-to-update-the-chef-client-version~~

~~上記のstock-overflowどおりにchef-clientのversionをあげて一旦エラーは出なくなりました~~

~~いまいちchefについてわかっておらず、四苦八苦しましたが、何かの参考まで、、~~
c++ builder XE4, 10.2 Tokyo > debug / testing > OnKeyPressイベントをセットし忘れたコンポーネントを明示する

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

## 問題

複数のTComboBoxのイベント OnKeyPressに共通の処理を設定するとする。

フォームデザイン画面において、すべてのTComboBoxイベントにOnKeyPressを設定したと思ったら、実はいくつか抜けていた場合、それをどう見つけるのか?

.dfmをいじる、というのはしないという前提

## 対策

OnFormShowで以下のコードを実行する

```Unit1.cpp
void __fastcall TForm1::debug_showKeyPressNotSetTCombobox()
{

	TComponent *ptarget;
	for(int idx = 0; idx < ComponentCount; idx++) {
		ptarget = this->Components[idx];
		if (dynamic_cast<TComboBox *>(ptarget) == NULL) {
			continue;
		}

		TComboBox *cbPtr = (TComboBox *)ptarget;
		if (cbPtr->OnKeyPress == NULL) {
			cbPtr->Items->CommaText = "KeyPress_not_set";
			cbPtr->ItemIndex = 0;
		}
	}
}
```

## 結果


![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/ef39d4c2-060a-60ce-81dd-ecd1eab4c4e9.png)


## 実装理由

コードの失敗はソースコードを読めばわかる。また、見つけやすい。

フォームデザインの失敗は一見ではわからない。OnKeyPressを設定していないコンポーネントを探すには以下のいずれかをしないといけない。

1. 一つ一つのTComboBoxのプロパティを順番に確認する
  - 時間がかかる
2. .dfmファイルを確認する
  - .dfmファイルは１つのコンポーネントに対して複数行でのプロパティ表示なので、検索しずらい

どちらも時間がかかり、今後の開発でこういうことを繰り返したくはない。

こういう理由から上記のような仕組みを考えた。
JAVA Random()

0〜9のいずれかの乱数を表示させたい時
▪️Test.java

```java
public class test01 {
	public static void main(String[] args) {
		int r = new java.util.Random().nextInt(100);
		System.out.println(r);
	}

}
```

▪️Test.java 実行結果(1回目実行した時)
95
▪️Test.java 実行結果(1回目実行した時)
47

0〜9を乱数で表示させたい時
▪️Test.java

```java
package test07;

public class test01 {
	public static void main(String[] args) {
		int num = (int) (Math.random() * 10);
		System.out.println(num);
	}

}
```

▪️Test.java 実行結果(1回目実行した時)
3
▪️Test.java 実行結果(1回目実行した時)
8
Hyper-Vを使っている環境でVMware playerを使用する

Hyper-Vを利用しているWin10(pro)環境で、VMware playerをインストールしてVMを起動しようとしたところ、Hyper-Vが有効になっていると使用できない旨をエラー出て、VMを起動できない。

せっかく構築したHyper-V環境を削除するのも嫌なので、一時的にHyper-Vを無効化する方法を探した時のメモ。

管理者権限でコマンドプロンプトを起動して以下コマンド実行後に再起動[^1]すれば、Hyper-Vの無効・有効を切り替えられる。

無効化

```ps1
C:\Windows\system32>bcdedit /set hypervisorlaunchtype off
```

有効化

```ps1
C:\Windows\system32>bcdedit /set hypervisorlaunchtype auto
```

[^1]: いちいち再起動するのが面倒なのだが、もっと簡単な方法はないのだろうか。。。
Mecabのメソッドって何があるの?


http://lucene-gosen.googlecode.com/svn/branches/javadoc/api/index.html

日本語の形態素解析なのに、英語しか見当たらないので日本語でメモしておく。

String **getSurface()** 分かちがいた単語の表記形
int **getLength()** 文字の長さ
int **getStart()** 文章の中の開始位置
boolean **isSentenceStart()** 文章中でも 区切りとしての開始位置であるかどうか

**getMorpheme()** 
String **getPartOfSpeech()**  品詞　partOfSpeech - The Chasen-format part-of-speech
String **getConjugationalType ()** 活用型　conjugationalType - The conjugational type
String **getConjugationalForm()** 活用形　conjugationalForm - The conjugational form
String **getBasicForm()** 原形　basicForm - The unconjugated form
<List>String **getReadings()** 読み　readings - The readings
<List>String **getPronunciations ()** 発音　pronunciations - The pronunciations
String **getAdditionalInformation ()** 追加の情報　additionalInformation - Arbitrary additional information


`morpheme` モーフィム　怪獣の名前ぽいが、形態素のこと
CentOS 7で、できるだけ簡単にPHP用のJenkins環境を作る

# Jenkins環境の構築

## Jenkinsのインストール

```bash
sudo yum install -y git wget java-1.7.0-openjdk vlgothic-fonts epel-release
sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
sudo rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key
sudo yum install -y jenkins
```

## PHP環境のインストール

xdebugはカバレッジの解析を行うのに必要
pdoはapigenがドキュメントを生成するのに必要
他にも必要なモジュールがある場合はインストールしておく

```bash
sudo yum install -y php-cli php-mbstring php-xml php-pdo php-pecl-xdebug
```

## Composerのインストール

```bash
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
```

## Composerへのプラグイン追加（任意

初期ビルド時など時間がかかる事は容易に想定されるので、jenkinsユーザで実行する際に、少しでも早くなるように prestissimo をインストールしておく

```bash
sudo su -s /bin/bash - jenkins
composer global require hirak/prestissimo
```

# ビルド方法の指定

シェルスクリプトにて、composerのinstallを実行し、devパッケージでインストールされる phing を実行する

```bash
/usr/local/bin/composer install --dev
vendor/bin/phing
```

# ビルドを実行する PHPアプリ側の準備

最低限必要なものは、phing
その他のパッケージは必要に応じて

```bash
composer require phing/phing --dev
composer require phpunit/phpunit --dev
composer require satooshi/php-coveralls --dev
composer require squizlabs/php_codesniffer --dev
composer require phpmd/phpmd --dev
composer require apigen/apigen --dev
```

# その他、やる必要がある事

 - PHPアプリ側で、build.xml ファイルの作成
 - Jenkins側で、必要そうなプラグインのインストール
     - Checkstyle Plug-in
     - Clover PHP plugin
     - Git plugin
     - Javadoc Plugin (標準で入っている)
     - JUnit Plugin (標準で入っている)
     - PMD Plug-in
リトライ処理の実装方法いろいろ

動作テストはしてないので間違ってるかも

## <要件定義>

- 引数でリトライ回数、リトライ時のスリープ時間をミリ秒で指定（最大実行回数は、最初の１回＋リトライ回数）
- 失敗したら指定された時間待ってから再度実行
- 処理の結果をreturnで返す。

## 再起呼び出し
```php
function fn_retry($retry_count=3, $retry_wait_ms=100)
{
    $result = false;

    // ここで処理をして、成否を $resultに入れる。

    if (! $result && $retry_count > 0) {
        usleep($retry_wait_ms * 1000);
        $result = fn_retry($retry_count-1);
    }

    return $result;
}
```

## ループ(while)
```php
function fn_retry($retry_count=3, $retry_wait_ms=100)
{
    $result = false;

    while (true) {

        // ここで処理をして、成否を $resultに入れる。

        if (! $result && $retry_count > 0) {
            usleep($retry_wait_ms * 1000);
            $retry_count--;
        } else {
            break;
        }
    }

    return $result;
}
```

## ループ(for)
```php
function fn_retry($retry_count=3, $retry_wait_ms=100)
{
    $result = false;

    for ( ; $retry_count >= 0; $retry_count-- ) {

        // ここで処理をして、成否を $resultに入れる。

        if ($result) {
        	break;
        }

        usleep($retry_wait_ms * 1000);
    }

    return $result;
}
```

## 汎用コールバック
```php
<?php
retry_user_func('get_stdin', ['Yes', 'y']);

/**
 * 指定したコールバック関数をコールし、失敗したらリトライする
 * 
 * @param $callback      コールする callable
 * @param $param_arr     コールバック関数に渡すパラメータを指定する配列
 * @param $retry_count   最大リトライ回数
 * @param $retry_wait_ms リトライ前に入れるスリープ時間（ミリ秒）
 * @return コールバック関数の結果、あるいはエラー時に FALSE を返します。
 */
function retry_user_func(callable $callback, array $param_arr=[], $retry_count=3, $retry_wait_ms=100)
{
	$result = false;

	while (true) {

		try {
			$result = call_user_func_array ($callback, $param_arr);
		}
		catch (Exception $e) {
			$result = false;
		}

		if (! $result && $retry_count > 0) {
			usleep($retry_wait_ms * 1000);
			$retry_count--;
		} else {
			break;
		}
	}

	return $result;
}

/**
 * 指定した文字が入力されたら true を返す
 */
function get_stdin($str1, $str2)
{
	$intpu_list = [$str1, $str2];

	echo "Please input [" . implode('/', $intpu_list) . ']: ';

	$stdin = trim(fgets(STDIN));
	$check = in_array($stdin, $intpu_list);

	echo "You input [".$stdin."], result = " . ($check?'OK':'NG') . "\n";

	return $check;
}
```
【Obj-C】TextFieldやTextViewで入力された文字に「特殊文字、機種依存文字」などが含まれているかどうかを判定したい

# 概要
ユーザーに任意の文字を入力させ、その入力情報をサーバーに送る際、サーバー側の都合もあり、Shift_JISで対応できない特殊文字を排除する処理(バリデーション)をフロント側で行うことになったので、その時の対応メモ

# 対応方法
入力された文字列をShift_JISに変換できるかを判定する関数「canBeConvertedToEncoding:NSShiftJISStringEncoding」を利用して、返り値のBOOLで判定した。

# コード
```
BOOL returnBool = [textview.text canBeConvertedToEncoding:NSShiftJISStringEncoding];
if(returnBool){
　//入力文字に特殊文字が含まれていない時の処理
}else{
　//入力文字に特殊文字が含まれている時の処理
}
```



何かご指摘やもっと良い方法等がありましたらコメントお願いします！
Stylus のススメ -cssメタ言語-

#はじめに
皆さんはcssメタ言語は何を使っていますか？
主流は相変わらずsass+compassですね。とあるきっかけでstylusに切り替えたところ、こちらの方が使い勝手が良く肩入れする様になりました。で、周囲で使っている人が少なく日本語情報も少ないので、記事を書くことにしました。

<img src="http://stylus-lang.com/img/stylus-logo.svg" alt="Stylus EXPRESSIVE, DYNAMIC, ROBUST CSS" title="Octcat" width="130" height="80" />
http://stylus-lang.com/

ちなみに筆者はlessを使用したことはありませんし、sassも最近のバージョンは弄ってないので、他言語の方が良いとか、そんなもの他でも出来るというツッコミあればいただけると嬉しいです。インスール方法とか他CSSに関するタスクランナーなどの設定は割愛。

#透過的mixinが良い
stylusを使っていて一番良いと感じたところが、透過的mixinです。予めmixinを定義しておけば、cssにプロパティがある様に扱えるので「こんなプロパティがあったらなぁ」という想いが解消されます。

```_mixins.styl
rect(w=0,h=0,l=0,t=0)
  width w
  height h
  left l
  top t
```

```style.styl
@import '_mixins'
.box
  rect 10px 20px 30px 40px
```

```style.css
/* yield  */
.box {
  width: 10px;
  height: 20px;
  left: 30px;
  top: 40px;
}
```
sassの場合、mixinを呼び出す時は明示的に@includeをつけなければいけませんが、stylusはこれを省略することが出来るため、あたかもそのプロパティが元からある様に振る舞えます。但しその恩恵から、そもそものプロパティさえもオーバーライドしてしまうので、mixinの命名には注意が必要です。
#インデントのネストがちょっとね…という時は
sassが支持される理由として「CSS本来の書式に近い」といった点があるかと思います。stylusは**sassと同じ様に書くことが出来ます**。またlessと同じ様に書くことも出来ます。なんなら混合しても大丈夫。コロンやセミコロンの付与も自由。

```style.styl
@import '_mixins'
.box {
  rect: 10px 20px 30px 40px;
  &.yellow{
    background-color: #0ff;
  }
}
```
```style.css
/* yield  */
.box {
  width: 10px;
  height: 20px;
  left: 30px;
  top: 40px;
}
.box.yellow {
  background-color: #ff0;
}
```
とにかく自由なので、プロジェクトに応じてガイドラインが必要かと。

# 単位指定を省略するmixin
単位指定はpxが多いため、ただの数値指定はpxになる様にmixinをネストして定義しておきます。

```_mixins.styl
_px(v)
  if type(v) == 'unit'
    if unit(v) == ''
      unit(v, 'px')
    else
      v
  else
    v

rect(w=0,h=0,l=0,t=0)
  width _px(w)
  height _px(h)
  left _px(l)
  top _px(t)
```
こういう定義にしておけば、%とかvwも指定さえすれば適応されるので問題なし。

```style.styl
@import '_mixins'
.box
  rect 10 20 30% 40vw
```
```style.css
/* yield  */
.box {
  width: 10px;
  height: 20px;
  left: 30%;
  top: 40vw;
}
```
#ショートハンド化してEmmet風に
オレオレmixinの究極系。Emmetばりに短いタイプ量で済むため、作業効率が上がります。コードを共有する場合は意味不明になるかも。

```_mixins.styl
_px(v)
  if type(v) == 'unit'
    if unit(v) == ''
      unit(v, 'px')
    else
      v
  else
    v

rect(w=0,h=0,l=0,t=0)
  width _px(w)
  height _px(h)
  left _px(l)
  top _px(t)

re(w=0,h=0,l=0,t=0)
  rect w h l t

```
```style.styl
@import '_mixins'
.box
  re 10 20 30 40
```
GalaxyProjectのdockerのgalaxyで、APIを使っている時の現在のユーザー情報を表示する

# 概要

Docker コンテナ内の API を使うときに、どのユーザーに紐付いているのかしりかたかった。

# 結論

admin@galaxy.org に紐付いていた



#　確認用のスクリプト

```py
import sys, traceback
import os
from bioblend import galaxy
from bioblend.galaxy import GalaxyInstance


#GALAXY_URL = 'http://localhost:8080/'
GALAXY_URL = 'http://localhost:80/'
API_KEY="admin"

def main():
    try:
        gInstance = GalaxyInstance(url = GALAXY_URL, key=API_KEY)
        print "get_current_user"
        print galaxy.users.UserClient(gInstance).get_current_user()

    except:
        print traceback.format_exc()
        sys.exit(1)

if __name__ == '__main__':
    sys.exit(main())
```

## master_api_key だとユーザーがないので、いろいろ失敗する。

これについては後で書く。


# 参考情報

[galaxyのDockerfile](https://hub.docker.com/r/bgruening/galaxy-stable/~/dockerfile/)

[bgruening/docker-galaxy-stable: Docker Images tracking the stable Galaxy releases.](https://github.com/bgruening/docker-galaxy-stable)
Browsersyncを使うと簡易なローカルサーバー作れるしファイル編集するとブラウザー上で自動更新されて便利

以下、こういう感じのちょっとした検証用のコード作る時なんかに使えます。

```
.
├── index.html
├── index.js
└── style.css
```

## 1\. [Browsersync](https://www.browsersync.io/)をインストールしておく。
```
npm install -g browser-sync
```
（最近はnpmのモジュールをグローバルに入れるのは悪手だと思っているのだけれども、自分の作業用ならいいかな・・・。 ）

## 2\. 実行する

```
browser-sync start --server --files='**/*.*'
```

コマンドを実行すると、ローカルサーバーの起動とブラウザが起動されて、現在居るディレクトリ以下のファイルが編集された時にブラウザが自動リロードされるのでほんと便利。素敵。

上の例「\*\*/\*\.\*」だと、全てのファイルの監視を行って自動リロードするのでファイルが多かったりすると、重かったり何度も更新されたりするかも？ でも「\*\*/\*\.\*」はさくっとちょろっと修正したい時なんかはおすすめ。ちなみに、```browser-sync start --server```だけでもローカルサーバーとして動きます。

#  ワンライナー覚えたくない人向け1

便利だけれども、コマンドを毎度思い出すのは脳のリソース奪われて辛い。インストール後```browser-sync```とだけ打つと、ヘルプにExampleが表示されるのでそれをコピペするとちょっとだけ幸せになる。Exampleはcssの更新しか見てくれないのでそのへんは適当に自分で修正するべし。

```
browser-sync
```

以下のExampleが表示される

```
... 

Server Example:
  ---------------
  Use current directory as root & watch CSS files

      $ browser-sync start --server --files="css/*.css"

...
```

# ワンライナー覚えたくない人向け2

わりと頻繁にファイルを触るようなら、package.jsonのscriptsに書くと覚える事減って辛くない。

## 1\. 「index.html」ファイルが配置してあるところにpackage.jsonファイルを作る。

こんな構成にする

```
.
├── index.html
├── index.js
├── package.json
└── style.css
```


```package.json
{
  "name": "piyopiyo",
  "version": "0.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
		"start" : "browser-sync start --server --files='**/*.*'"   
	}
}
```
Macならターミナル上からディレクトリに移動して、```pbpaste```使ってクリップボードからファイル作ると便利すぎて失神する。

```console(mac)
pbpaste > package.json
```

## 2\. npm 経由で実行する。

```console
npm run start
```

# リンク

GulpからBrowserSyncを使う方法は、弊社の鹿野が記事を書いているのでこちらもどうぞ。

- [ブラウザ確認が一瞬！ Grunt・Gulpと始めるBrowserSync入門](https://ics.media/entry/3405)
電子工作 > I/O拡張 > NJU3711D

I/Oが少ない時にはI/Oを拡張するICが必要となる。

秋月電子
http://akizukidenshi.com/catalog/g/gI-03707/

- 動作電圧: 5V

ESP8266に使うのは3.3Vから昇圧しないといけなさそう。


http://www.njr.com/semicon/mpu_peripheral_ic/piso_sipo.php?cat=11010
に色々な電圧のリストがある。

ESP8266で使うとしたらNJU3711AのようにA付きだといいのかもしれない。

どれだけの速度で駆動できるかは未確認。
【HTML/CSS】要素にマウスカーソルを重ねた時にカーソルの形を指マークにする

一般的なリンクに対しては、マウスオーバーした時に勝手にカーソルが指マークになります。

しかし、そうならない要素に対しては、cssで独自に指定をするとユーザーの利便性が向上すると思います。

```css
.yubi {
  cursor : pointer;
}
```

```html
<span class="yubi">テキスト</span>
```

上記の例では「テキスト」とある部分にマウスを重ねると指マークになります。

## cursorプロパティの値

また、`cursor`プロパティの値ですが、`pointer`以外にも色々あるので、場合によって値を変えるとより利便性が増すと思います。

[CSS3で使える35+α種類のカーソルの一覧表。（CSS おれおれ Advent Calendar 2012 – 07日目） | Ginpen.com](http://ginpen.com/2012/12/08/css-cursors/)

`help`で表示されるはてなマークなんかは使い勝手が良さそうですね。

## オリジナルのカーソル

`pointer`と指定するだけでも十分かもしれませんが、実は画像も指定できます。

[スタイルシート［CSS］/ページ全般/カーソルの形を変更する - TAG index Webサイト](http://www.tagindex.com/stylesheet/page/cursor.html)

(一番下の福笑いみたいになっているやつがおもしろい)

ちょっとした配慮で、より使いやすいWebサイトになると思うので、自分も積極的に使っていきたいです。
rkhunter に好きなディレクトリorファイルを監視してもらう

2016年になりましたが [rkhunter](http://rkhunter.sourceforge.net/) の話です。

## 経緯

`/bin/ls` とかもいいけど `/home/gongo/hiden-no-config` も監視して欲しい！！

## 環境

CentOS 6.7

他ディストリビューションでも、ディレクトリの差異はあるかもしれませんが、下記手順で問題ないと思います。

## 方法

`/etc/sysconfig/rkhunter.conf` に `USER_FILEPROP_FILES_DIRS` を追加:

```bash
USER_FILEPROP_FILES_DIRS=/home/gongo/hiden-no-config

# 他にも
# USER_FILEPROP_FILES_DIRS=/path/to/dir2/*            # dir2 内のファイル全部
# EXCLUDE_USER_FILEPROP_FILES_DIRS=/path/to/dir2/conf # dir2/conf だけは除外
```

適当にファイルを作成してみる:

```bash
$ echo pizza > /home/gongo/hiden-no-config
```

rkhunter が持つデータベースを更新する:

```bash
$ sudo rkhunter --propupd
```

監視対象ファイルとして追加されているのを確認:

```
$ sudo grep gongo /var/lib/rkhunter/db/rkhunter_prop_list.dat
/home/gongo/hiden-no-config
```

ここでファイルを変更してみる:

```bash
$ echo curry > /home/gongo/hiden-no-config
```

ファイルチェック:

```
$ sudo rkhunter --check --skip-keypress --report-warnings-only
Warning: The file properties have changed:
         File: /home/gongo/hiden-no-config
         Current hash: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
         Stored hash : YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
         Current file modification time: 1454302839 (01- 2月-2016 14:00:39)
         Stored file modification time : 1454302776 (01- 2月-2016 13:59:36)
```

「ファイルが変更されてますよ」という Warning が出ています。

再度 `rkhunter --propupd` を実行すると
`home/gongo/hiden-no-config` = :curry: がデータベースに登録されるので
`rkhunter --check` をしても Warning にはなりません。

## まとめ

- 大事なコマンドも
- malware も
- そうでもない普通のファイルも

とりあえず rkhunter に見てもらいたいという世界があれば `USER_FILEPROP_FILES_DIRS` をご利用ください
React勉強中（現在進行形）に躓いたこと

Reactを目下勉強中なのですが、
初歩的な部分でチョイチョイと躓いているので、
同じ轍に突っ込んだ人の役に立てばと思いまとめています。

Reacterの皆様、間違えやツッコミがあればどしどしとコメントして頂ければ、
嬉しくてDQBをテンションに任せて購入しちゃうかもしれません。

***

##### 1\. import, export構文はJSのES6構文である

```js
import React from 'react';
```

のような呪文をJSファイルの最初に羅列するサンプルが多いですが、
このimportがどの要素に由来しているのか理解せずに使っていました。
ES6のModuleに用意されている構文だということがワカリマシタ。

参考URL
[import - JavaScript | MDN](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/import)
[export - JavaScript | MDN](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/export)

***

##### 2\. Componentのrenderは単一要素しか返すことができない

2つの要素（コンポーネント）を描画したかった…。

###### NG
```js
class ParentComponent extends React.Component {
  render() {
    return (
      <ChildComponent1 />
      <ChildComponent2 />
    );
  }
}
```

コンポーネントは単一の要素なので、
複数の要素を指定することは不可能。

###### OK
```js
class ParentComponent extends React.Component {
  render() {
    return (
      <div>
        <ChildComponent1 />
        <ChildComponent2 />
      </div>
    );
  }
}
```

結果、単一の要素となるように親要素で括ってあげれば可能。

***

##### 3\. ReactDomのrenderも単一要素しか受け取らない

同じく2つの要素（コンポーネント）を描画したかった…。

```js
ReactDom.render(
  <ChildComponent1 />,
  <ChildComponent2 />,
  document.getElementById("components")
);
```

まあ無理ですよね。
ReacDomのrenderはDOMを個別にレンダリングするものではなく、
全てのDOMを一括で書き換えるものなので、
最上位の親要素を指定するしかないという結論に至っています。

```js
ReactDom.render(
  <ParentComponent />,
  document.getElementById("components")
);
```

こんな感じ。
nginx - カーネルパラメーターのチューニング

# 概要
* L7ロードバランサーやAPサーバで使うnginxを設計する際に、パラメーターチューニング大事だなと思ったので書き残します。
* 大体この辺り本番に合わせて適値を見つけて設定していくのが良いかなぁと思いました。
* CentOS 6系です
* ipv6の設定は無視してます。。

# チューニング

|パラメーター|内容|default値|
|:---|:---|:---|
|net.core.rmem_max = 16777216|TCPとUDPの受信バッファのデフォルトサイズと最大サイズ。|124928|
|net.core.wmem_max = 16777216|TCPとUDPの送信バッファのデフォルトサイズと最大サイズ。|124928|
|net.nf_conntrack_max = 1053616|ESTABLISHEDのリストの最大数(OS側の管理数)|可変|
|net.ipv4.conf.default.accept_source_route = 0|ソースルートが指定されたパケットを拒否。本来は経路のテストを行う目的であるのでoffにする|1|
|net.ipv4.tcp_rmem = 4096 349520 16777216|データ受信バッファ サイズ|可変|
|net.ipv4.tcp_timestamps = 0|NAT環境下で、複数ホストがクライアントのときに、WAN側のサーバに接続が切られる対策|1|
|net.ipv4.tcp_fin_timeout = 5|FINのタイムアウト時間|60|
|net.ipv4.tcp_syn_retries = 3|tcpのSYNを送信するリトライ回数。<br>この回数SYNを送ってもダメなら諦める|5|
|net.ipv4.tcp_synack_retries = 3|接続を受付側としてオープンするとき、 カーネルは SYN に ACK を詰め込んで送り、先に受けとった SYN を確認する。|5|
|net.ipv4.tcp_syncookies = 1|SYN flood攻撃対策|1|
|net.ipv4.ip_local_port_range = 10000 65535|TCP/IPの送信時に使用するポートの範囲<br>可能なら 1024-65535が良いが、iptablesやAWSだとNetworkACLとかで<br>同様に必要に応じて開放しておかないとパケットが途中で止まってハマるから注意。<br>$ cat /proc/sys/net/ipv4/ip_local_port_rangeで確認できる|32768	61000|
|net.ipv4.tcp_tw_reuse = 1|自分からの接続を使い回す。tcp_tw_recycleは相手からの接続を使い回す。|0|
|net.ipv4.tcp_tw_recycle = 0|相手からの接続を使い回す。|0|
|net.ipv4.tcp_rfc1337 = 1|RFC1337に準拠させる。TIME_WAIT状態のときにRSTを受信した場合、TIME_WAIT期間の終了を待たずにそのソケットをクローズする|0|
|net.ipv4.tcp_fin_timeout = 5|タイムアウトはできる限り短いほうがいい|60|
|net.ipv4.tcp_max_tw_buckets = 65536|システムが同時に保持するtime-waitソケットの最大数。<br>DoS攻撃を防げるため、低くするのはやめたほうが良い。|動的|
|net.ipv4.tcp_orphan_retries = 0|こちらからクローズしたTCPコネクションを終了する前の再送回数。<br>webサーバだとリソースを消費する可能性があるため、低くしたほうが良い|0|
|net.ipv4.tcp_keepalive_probes = 5|TCP が keepalive プローブを送る数。この数に達すると、 その接続が壊れたとみなす。<br>|9|
|net.ipv4.tcp_slow_start_after_idle = 0|keepaliveしててもしばらく通信がなかったらcongestion window sizeをresetする。<br>keepaliveを利用しており、かつ輻輳が少ない環境ではoffが良い。|1|
|net.core.netdev_max_backlog = 65536|パケット受信時にキューに繋ぐことができるパケットの最大数|1000|
|net.ipv4.tcp_max_syn_backlog = 65536|ソケット当たりのSYNを受け付けてACKを受け取っていない状態のコネクションの保持可能数。<br>この値を超えたものに関してはOSはSYNパケットを拒否することになる。<br>溢れたパケットはnetstatで確認できる。<br>ただし、この値はnet.core.somaxconnより大きかった場合、net.core.somaxconnの値を優先する。|1024|
|net.ipv4.conf.eth180.arp_ignore = 1|ぶら下がってるAPサーバ群にarpに応答させない（MACアドレスを覚えさせない）<br>IPとmacアドレスが関係ずけられると、送りたい機器に通信できなくなる。|0|
|net.ipv4.conf.eth180.arp_announce = 2|ぶら下がってるAPサーバ群にarpに応答させない（MACアドレスを覚えさせない）<br>IPとmacアドレスが関係ずけられると、送りたい機器に通信できなくなる。|0|
|net.core.somaxconn = 65535|一度に受け入れられるTCPセッションのキューの数。<br>TCPのセッション数をbacklogで管理し、それを超えたものはキューに格納される。<br>このキューの数をここで設定する|128|
|vm.swappiness = 0|実メモリがある状態でスワップを使用しない|0|
|vm.overcommit_memory = 2|実メモリ以上にプロセスにメモリを割り当てない|0|
|vm.overcommit_ratio = 99|OOM killerで勝手にkillするくらいだったら、メモリ不足を検出してエラー処理をさせる。<br>vm.overcommit_memory = 2のときに設定する|50|
|kernel.shmmax = メモリのByte数|共有メモリの最大サイズ。サーバーの搭載メモリ(1GB)に合わせて変更するので|動的？|
|kernel.shmall = 68719476736|システム全体の共有メモリ・ページの最大数|68719476736|
|kernel.msgmnb = 65536|1つのメッセージキューに保持できるメッセージの最大値|65536|
|kernel.msgmax = 65536|メッセージキューIDの最大値|65536|
|kernel.sysrq = 0|SysRqとは、サーバでキーボード操作ができなくなったとき、カーネルが昨日してれば特定のキー（Alt + PrintScreen)で割り込める。使わないので0|0|
|kernel.core_uses_pid = 1|コアダンプ時、".PID"をコアファイル名に追加しない|0|
コンフリクト解消中のGitブランチを、作業途中でプッシュしたい

**「upstreamのmasterブランチをマージしようとしたら大量のコンフリクトが発生した」**こと、ありませんか？

私はよくあります :cold_sweat: 

**「せっせっとコンフリクトを解消してるけど、そろそろ時間切れ。このブランチ、いったんプッシュしたいなぁ」**ということ、ありませんか？

私はよくあります :coffee: 

ですが、未処理のコンフリクトを残したままコミットしようとしても、

```
$ git commit
error: 'commit' is not possible because you have unmerged files.
hint: Fix them up in the work tree,
hint: and then use 'git add/rm <file>' as
hint: appropriate to mark resolution and make a commit,
hint: or use 'git commit -a'.
fatal: Exiting because of an unresolved conflict.
```
（意訳：コンフリクトの解決終わってないからコミットなんてできません～）

とGitに怒られてしまうわけです。そこをなんとか……ということで、とりあえず作業状態を一時保存（コミット）してプッシュしておいて、あとからなんとかする方法を模索してみます。

ツッコミ大歓迎です :bow: 

## 一時保存の方法

コンフリクト解消作業中に以下のコマンドを実行すれば、「とりあえず作業状態を一時保存（マージコミット）してプッシュ」できます。

```
$ git add .
$ git commit
$ git push <リモート名> <マージ作業中のブランチ名>
```

一時保存した内容を別端末にプルしたら、コンフリクト解消作業を再開しましょう。

1. コンフリクト未解消ファイルの状態に応じて、下記の手順でコンフリクト状態を復元する
2. 復元されたファイルを使って、コンフリクトを解消する
3. コンフリクトが解消できたら、`git add <fileapth> ; git commit --amend` で、該当ファイルをマージコミットに追加する

### コンフリクト解消前のファイルを一時保存した場合

まずはコンフリクトを一切解消していない状態のファイルから。このコマンドを実行すると、一度コミットしたファイルを、マージ直後のコンフリクト解消前状態に戻せます。

```
$ git checkout --conflict=merge <filepath>
```

Gitもこのファイルを「コンフリクト未解消」とみなしてくれますので、マージツールなどとの連携もいつもどおり可能です。

### コンフリクト解消中のファイルを一時保存した場合

上のコマンドだけだと「マージ直後のコンフリクト解消前」の状態に戻ってしまうので、「コンフリクトを途中まで解消した一時保存の状態」はなくなってしまいます。それはつらい……ということで、`git show`コマンドの出番です。

```
$ git checkout --conflict=merge <filepath>
$ git show HEAD:<filepath> > <filepath>
```

こうすれば、一時保存状態を再現しつつ、Gitがこのファイルを「コンフリクト未解消」とみなしてくれるようになります。

## 注意

1. マージ作業用のブランチを前もって作成しておく
2. あとで`git push -f`しても問題ないリモートを使う

ようにしましょう。一時保存なコミットをmasterブランチに直接追加するのはのは避けるべきですし、「`git push -f`だめ、絶対っ！」というルールがあるリポジトリ（リモート）もたくさんあるからです。
HerokuでプロダクションDBと開発用DBのスキーマを比較する

## 要件
開発用DBとプロダクションDBで一部文字列カラムの長さが異なっていることが発覚したため検証を行った。(evolution用のSQLの内容が元のスキーマに反映されていなかったと思われる)

ただし、開発用DBは常にALTER TABLEで列追加されているのに対し、プロダクションDBではその中間段階でCREATE TABLEしているため、カラムの順番は無視する必要がある

## 解
herokuのpg:psqlコマンドでは-cオプションでSQLを即時実行できるので、スキーマ取得のコマンドを発行してそのdiffを取れば良い。

`\d`だと列の順序が無視できないので、システムテーブルのinformation_schema.columnsテーブルからSELECTする

## コマンド
APP_NAMEの部分を適宜書き換えればすぐに使えます。

```
heroku pg:psql -a APP_NAME -c "select table_schema as sch, table_name as tbl, column_name as col, column_default as def, is_nullable as null, data_type as type, character_maximum_length as maxlen, numeric_precision as npc, numeric_precision_radix as npcr, numeric_scale as ns, datetime_precision as dp from information_schema.columns where table_schema = 'public' order by tbl, col;" > APP_NAME.txt
```
UbuntuでDLNAサーバ

## 参考

* [» Raspberry pi (b+) で、DLNAサーバを作ろう！ TECHSCORE BLOG](http://www.techscore.com/blog/2014/12/25/raspberry-pi-b-%E3%81%A7%E3%80%81dlna%E3%82%B5%E3%83%BC%E3%83%90%E3%82%92%E4%BD%9C%E3%82%8D%E3%81%86%EF%BC%81/)

## インストール

```bash:
sudo apt-get install -y minidlna
```

```diff:/etc/minidlna.conf
- media_dir=/var/lib/minidlna
+ media_dir=/home/user1/Video/
```

```bash:
sudo systemctl restart minidlna.service
```

## アクセス

* http://localhost:8200

![imgs.png](https://qiita-image-store.s3.amazonaws.com/0/25728/7d4d8914-f0b2-d89a-3ae7-6f551abe95b4.png)

## iPhoneからアクセス

* [Twonky Beam](https://itunes.apple.com/jp/app/twonky-beam-dong-hua-yin-le/id445754456?mt=8)をインストールし再生