OmniAICreator/Qiita-1.07M huggingface dataset:
Snappy Ubuntu Core on VirtualBoxでDockerを動かしてみる

Raspberry PiでDockerを動かしたい、となるとOSはSnappy Ubuntu Coreになります([Docker Pirates ARMed with explosive stuff](http://blog.hypriot.com/)というのもありますが)。Snappy Ubuntu Coreは触ったことがないので、お試しとしてVirtualBox(Vagrant)上のSnappy Ubuntu CoreでDockerを動かしてみます。

<!-- more -->

# 確認したいこと

* VagrantでSnappy Ubuntu Coreを動作させます。
* Snappy Ubuntu Core上でDockerfileをビルドします。
* Dockerイメージを実行します。

今回は簡単な動作確認なので、GitHubリポジトリは作成していません。

# 前提条件

* Surface Pro 4 + Windows 10
    * VirtualBox(Vagrant)が使えれば、他OSでも問題無いはずです。
* VirtualBox + Vagrant
    * VirtualBoxはVagrantで操作します。

# 確認手順

## Snappy Ubuntu Coreを起動する

`ubuntu/ubuntu-15.04-snappy-core-stable`というVagrant boxが使えますので、これを起動します。

```
vagrant init ubuntu/ubuntu-15.04-snappy-core-stable
vagrant up
vagrant ssh
```

今回はWebDMを使わないので、ポート・フォワード設定は行いません。WebDMを使う場合は、4200番ポートをフォワードすれば、ホストOSのWebブラウザからWebDMを使うことができます。

## Dockerをインストールする

Snappy Ubuntu Coreは`snappy`コマンドでパッケージを操作します。

Dockerのパッケージを`snappy`コマンドで探します。

```
$ snappy search docker
Name             Version   Summary
matrix.mectors   0.0.11    matrix
go-ether.mectors 0.0.3     go-ether
docker           1.6.2.005 Docker
```

ちょっと古いですが、ありました(記事執筆時点のDocker最新バージョンはv1.10.2)。これをインストールします。

```
$ sudo snappy install docker
$ docker -v
Docker version 1.6.2, build 8f2d6e5
```

## Dockerイメージをビルドする

Dockerイメージの元となるDockerfileを以下のように作成します([u6k/ruby-docker](https://github.com/u6k/ruby-docker)から)。

```
FROM ubuntu:latest
MAINTAINER u6k <u6k.apps@gmail.com>

RUN apt-get update && \
    apt-get upgrade -y && \
    apt-get install -y build-essential git wget

RUN wget https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.0.tar.gz && \
    tar zxvf ruby-2.3.0.tar.gz && \
    cd ruby-2.3.0/ && \
    ./configure && \
    make && \
    make install

CMD [ "ruby", "-v" ]
```

これをビルドしてみます。

```
$ docker build -t u6k/ruby-docker .
FATA[0000] Error checking context is accessible: 'can't stat '.''. Please check permissions and try again.
```

エラーになってしまいました…調べたところ、標準入力から流し込むことでビルドできることが分かりました。

```
$ cat Dockerfile | docker build -t u6kapps/ruby-docker -
$ docker images
REPOSITORY            TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
u6kapps/ruby-docker   latest              16480b7d9129        4 minutes ago       841 MB
ubuntu                latest              56063ad57855        6 days ago          188 MB
```

イメージがビルドされました。

## Dockerコンテナーを実行する

ビルドしたイメージを実行してみます。

```
$ docker run u6kapps/ruby-docker
ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-linux]
```

普通に実行できました。

# おわりに

というわけで、自宅RaspberryPiでSnappy Ubuntu Coreを動作させるようになったら、

1. Snappy Ubuntu Core on QEMU(ARM)でDockerイメージをビルド
1. Docker Hubにアップ
1. Snappy Ubuntu Core on RPi3でDockerコンテナーを実行

という流れにしようかなと妄想中。
svn: The build tool has reset ENV; --env=std required.が出てsvn upできなくなった場合の解決方法


えっ？うそー！1年ぶりくらいに記事執筆ですか〜！ :satisfied: 
はい。この問題ですが解決手順について書いてある記事が見つからなかったので自分でまとめてみようと思いましたー！
というわけでとある日に業務中にsvnでハマってしまった事件を時刻も交えて書いていきますー :kobito: 

## ●それはとある日の午前10時30分くらいに起きた！ :clock1030: 
いつものようにiTerm2を開いてcdと入力。自分は
http://qiita.com/b4b4r07/items/2cf90da00a4c2c7b7e60
上記記事の :rocket: enhancdを使っているので、目的のディレクトリには1秒で辿り着ける！タップしてcdし、svn upと入力した！**ここで事件は起きた！！**

`svn: The build tool has reset ENV; --env=std required.`

ほぉ〜…(｡･ω･｡)これは見たこと無いエラーだ！ググッてみよう！！

## ●11時を回った！どどど…どうしよう！(´・ω・`;) :clock11: 

あれれ？(´・ω・`) あまり検索でヒットしないなぁ〜… :disappointed_relieved: 
そこでこんな記事を見つけた！

https://github.com/Homebrew/homebrew/issues/49001

何々…φ(・ω・ )colorsvn...いやそれが原因なのか？？
(実はこれが原因だったことには後2時間30分後に気づくのだが… :sweat: )

## ●11時30分〜 試行錯誤してましたヾ(｡>﹏<｡)ﾉﾞ:clock1130: 
Homebrewでsvnインストールしたりアンインストールしたりするもうまく行かず… :disappointed_relieved: 

大体こういうときって余計な事して時間過ぎちゃうんですよねぇ〜… :unamused: 

## ●12時30分〜 事件解決に向けて本格的な調査が始まる！( ✧Д✧) :shipit: :clock1230: 
ここに来て本格的に原因の調査に乗り出す！
何か思い当たることは…ん？brew updateを昨日やったときに色々エラー出なかったか？ググッて解決はできたけど何かありそう… :frowning: 

そしてgithub上でこんなものを発見！
https://github.com/Homebrew/homebrew/blob/master/Library/ENV/4.3/cc

あぁーーー！！！**Homebrew**か！！ :laughing: 
ディレクトリを移動しながら確かに同じソースを発見 :sparkles: 
**事件はsvnで起きているんじゃない！Homebrewで起きてるんだ！**

----- ここからは対応手順の説明です！ -----

1.Homebrewを一度アンインストールします！
`ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"`
2.Homebrewを再度インストールします！
`/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"` 
3.再度svn upを試みます！
`svn: The build tool has reset ENV; --env=std required.`

┗┐＜(´(゜)ω(゜)`)＞┌┛

まあこれで直るなら苦労しないです... :sweat: 

4.改めて最初に見つけてgithubの記事を読みます。
φ(・ω・ ) colorsvn :exclamation: :question: 

colorsvnrcやcolorsvn.rbのソースを見るもわからず...orz
ん？だったらcolorsvnをアンインストールすれば良くないか？ :flushed: 
5. colorsvnをアンインストールします。
 `brew uninstall colorsvn`
6. .bash_profileの記述を削除します。
7. svn upを試みます！
colorsvnがありません…あれ？ :expressionless: 

## ● 14時頃になってしまったのだが… :innocent: :clock2: 

うーん…ダメか :dizzy_face: 
じゃあiTerm2再起動するか… :repeat_one: 

`svn up`
`Updating '.':`

**キターーー！！！キタコレだわぁーー！！**٩(๑❛ᴗ❛๑)۶ 
再起動…(えっ？ :sweat_smile: 

という感じで約3時間半ほど解決に時間をかけてしまったのでした...orz

◇教訓◆
・Homebrewは理解しておきましょう！
⇛brew updateを行った時のリスクの確認と理解
⇛根本的な原因が何なのか慌てず騒がず落ち着いて確認しましょう！
AppCodeの便利機能: Protocolとその実装間を簡単に行き来する

AppCodeではSwiftのProtocolとそれを実装したClass/Struct（とそのプロパティ・メソッド）間を行き来する事が簡単に行えます。
以下の動画のように、エディタ左端の行数の右にあるアイコンをクリックすると、プロトコルからは実装の一覧が表示され選択すると実装に移動し（実装が一つの場合は一覧は表示されない）、実装からはプロトコルの宣言に移動することができます。

![AppCode_protocol_impl.gif](https://qiita-image-store.s3.amazonaws.com/0/2009/88792d0d-0c2a-18db-0dbe-1315f8520997.gif "AppCode_protocol_impl.gif")

Xcodeで同様の事ができるか知りません。もしXcodeでも同様の機能やそのためのPluginがあれば教えてください。（それが知りたいがためにこの投稿を書いたとも言えます…）
UIViewの座標とSKNodeの座標の違い

# UIViewの座標とSKNodeの座標の違い
SpriteKitでゲームを作った際、UIKitと組み合わせてみた時に混乱したのでメモ

## ビュー座標とシーン座標

```swift:MyPlayground.playground
import UIKit
import SpriteKit
import XCPlayground

let liveView = SKView(
    frame: CGRect(
        origin: CGPointZero,
        size: CGSize(width: 300, height: 300)
    )
)

XCPlaygroundPage.currentPage.liveView = liveView
XCPlaygroundPage.currentPage.needsIndefiniteExecution = true

// 今回適応してみるCGRect
let rect = CGRect(
    origin: CGPoint(x: 40, y: 20),
    size: CGSize(width: 80, height: 40)
)

// SKSceneを作って、Nodeを入れる
let skScene = SKScene(size: liveView.frame.size)
liveView.presentScene(skScene)

let node = SKShapeNode(rect: rect)
node.fillColor = UIColor.blueColor()
skScene.addChild(node)

// 同じCGRectのUIViewを入れるとどうなるの？
let uiView = UIView(frame: rect)
uiView.backgroundColor = UIColor.redColor()
liveView.addSubview(uiView)
```

UIViewとSKNodeに同じRectを適応しても、
originの原点位置とxy軸の方向が異なっているのがわかる

![Artboard 1.png](https://qiita-image-store.s3.amazonaws.com/0/72271/fa80e108-9753-8bf8-4a75-f72f6cd40566.png)

## 中心点

ちなみにそれぞれ中心点はframe.midX, frame.midYで分かる (get only)

```swift:MyPlayground.playground
CGPoint(x: uiView.frame.midX, y: uiView.frame.midY) // {x 80 y 40}
CGPoint(x: node.frame.midX, y: node.frame.midY) // {x 80 y 40}
```

SKNodeの場合は、positionを指定することで中心から描画することもできる

```swift:MyPlayground.playground
let center = CGPoint(x: liveView.frame.midX, y: liveView.frame.midY)
let node2 = SKShapeNode(rectOfSize: rect.size)
node2.position = center
node2.fillColor = UIColor.purpleColor()
skScene.addChild(node2)
```

![Artboard 2.png](https://qiita-image-store.s3.amazonaws.com/0/72271/29198c6e-fe37-01e2-e4f9-f7efeb8aeb6d.png)

## 座標の変換

ビュー座標とシーン座標はお互い変換することができる

**convertPointToView**

```swift:MyPlayground.playground
// シーン座標からビュー座標へ変換
let convertToViewOrigin = skScene.convertPointToView(uiView.frame.origin)
convertToViewOrigin     // x 40 y 280

let node3 = SKShapeNode(
    rect: CGRect(
        origin: convertToViewOrigin,
        size: rect.size
    )
)
node3.fillColor = UIColor.brownColor()
skScene.addChild(node3)
```
これにより、UIViewとoriginは一緒の位置になる
が、sizeによる描画方向はそれぞれ異なっているのに注意

![Artboard 3.png](https://qiita-image-store.s3.amazonaws.com/0/72271/167eaef7-64b8-5a08-b2cf-c9ca060cb2c3.png)

**convertPointFromView**

```swift:MyPlayground.playground
// ビュー座標からシーン座標へ変換
let convertFromViewOrigin = skScene.convertPointFromView(node.frame.origin)
convertFromViewOrigin   // x 38.65 y 281.35

let uiView2 = UIView(frame:
    CGRect(
        origin: convertFromViewOrigin,
        size: rect.size
    )
)
uiView2.backgroundColor = UIColor.yellowColor()
liveView.addSubview(uiView2)
```
微妙に座標がズレて小数点が出ているのは、
SKNodeの枠線が入っている分も計算してくれるからのようだった

![Artboard 4.png](https://qiita-image-store.s3.amazonaws.com/0/72271/04bcd657-04d6-756d-ee5e-0bc13194b6de.png)

* * *
そもそもSpriteKitとUIKitごちゃまぜでゲーム作るのって変なのかな。
全部SKNodeでやる方がいいのかな。よくわからない。

説明しやすいように「ビュー座標」と「シーン座標」と名づけてますが、
正式な呼び方なのかわかんないので、あんまり信用しないでください。。。
【FuelPHP】users.profile_fieldsの情報を、取得済みのインスタンスから得る[unserialize]

完全勝利。
###助けていただいた記事
[PHPの関数unserializeでエラーが発生する場合の対処方法 | cms helog - CMS構築を目的にPHPをベースとしたWordPress、CakePHPやPEARなどオープンソースを中心に解説しています](http://cms.helog.jp/php/unserialize-error/)

#結論
`html_entity_decode()`をしよう。

```php

/**
 * 文字コードエラーが出ないようにunserializeする
 * @param $string unserializeしたい文字列
 * @return mixed
 */
function safe_unserialize($string)
{
	return unserialize(html_entity_decode($string, ENT_QUOTES));
}

/**
 * usersテーブルから取得したインスタンスのprofile_fieldsにある特定情報を返す
 * @param $user Model_User::find()の返り値
 * @param $field profile_fieldsの中から欲しい情報
 * @return array|mixed
 */
function get_field_from_user($user, $field)
{
	if (isset($user['profile_fields']))
	{
		is_array($user['profile_fields']) or $user['profile_fields'] = (@safe_unserialize($user['profile_fields']) ?: array());
	}
	else
	{
		$user['profile_fields'] = array();
	}
	return is_null($field) ? $user['profile_fields'] : \Arr::get($user['profile_fields'], $field);
}
```

呼び出す際は

```php
$users = Model_User::find('all');
foreach ($users as $user)
{
	echo $user->username."(".get_field_from_user($user, 'age').")<br>";
}
/*
 * Bob(30)
 * John(12)
 * ...
 */
```
のように使えば良い。

#ネットによく広まっている方法
もともとそのまま`unserialize`したかったがエラーを吐かれてしまったので調べたところ、最も多かったのは

- `sereialize`した後に`base64_encode()`
- `unsereialize`する前に`base64_decode()`

という方法。
しかし`Model`の`save()`やら`Auth::update_user()`やらを直接いじるわけにいかないし、`Auth::get($profile)`みたいにやると、既に取得していてももう一回取らないといけないしなぁー…と思っていろいろ調べていたところ、この方法を発見した。

#環境
一応ではあるが自分の環境を軽く書くと

- PHP5.3
- FuelPHP 1.7
- AuthパッケージはSimpleAuth、usersテーブルは公式ドキュメントに基づいた構成

と言った感じである。
[Swift] Twitterに投稿出来る動画かどうかチェックする

#アップロード出来る動画の制限
https://dev.twitter.com/rest/public/uploading-media

簡単にまとめると

|項目|説明|
|---|---|
|ファイルサイズ|~15MB|
|秒数|	0.5 〜 30|
|大きさ|	32x32 〜 1280x1024|
|アスペクト比|	1:3 〜 3:1|
|フレーム|	〜 40fps|
|オーディオ|	mono、stereo|
https://syncer.jp/twitter-api-matome/post/media/upload_chunked より引用

ということらしいです。（ビデオの場合）

#Validate!

##ファイルサイズ

```swift
      //ファイル取り出し
      var fileAttr = [String : AnyObject]()
      do {
        let fileManager = NSFileManager.defaultManager()
        fileAttr = try fileManager.attributesOfItemAtPath(filePath)
      } catch {}
      //ビデオのファイルサイズチェック
      guard let fileSize = fileAttr[NSFileSize] as? Int else {return}
      if fileSize <= 15000000 {
        // OK!
      }
```

##秒数

```swift
      let asset = AVAsset(URL: NSURL(fileURLWithPath: filePath))
      guard let videoAssetTrack = asset.tracksWithMediaType(AVMediaTypeVideo).first else { return }
      let duration = CMTimeGetSeconds(videoAssetTrack.timeRange.duration)
      if 0.5...30.0 ~= duration {
        //ok
      }
```

##大きさ

```swift
      let videoWidth = videoAssetTrack.naturalSize.width
      let videoHeight = videoAssetTrack.naturalSize.height
      let smallLength = min(videoWidth, videoHeight)
      let longLength  = max(videoWidth, videoHeight)
      if longLength <= 1280 && 32...1024 ~= smallLength {
        //ok
      }
```

##アス比

```swift
      let aspectRatio = longLength/smallLength
      if aspectRatio <= 3.0 {
        //ok
      }
```

##フレームレート

```swift

      let fps = videoAssetTrack.nominalFrameRate
      if fps <= 40 {
        // ok
      }
```
php isset vs array_key_exists

`array_key_exists`はキーがあるかをチェック。
`isset`は変数がセットされていること、そして NULL でないことを検査する。（array以外にも使用できる）

```php
$a = array('key1' => 'hoge', 'key2' => null);

var_dump(isset($a['key1']));             // true
var_dump(array_key_exists('key1', $a));  // true

var_dump(isset($a['key2']));             // false
var_dump(array_key_exists('key2', $a));  // true
```
`isset`は変数がセットされていることを確認するので、変数が定義されていなくてもPHP Noticeが発生しない。

```php
// $bが定義されていない
isset($b[4]);
array_key_exists('key2', $b); //PHP Notice, Warning発生
```
柔らか層外伝 SendGrid編

#SoftLayer と SendGrid について
マスメール配信用のインフラ、またはECサイトでの通知メールのインフラとして多くのユーザーに利用されているのが、SendGrid です。配信上限も拡張され、ますます使いやすくなっています。
SoftLayer では OPB25対策が2015年10月に実施され、新規アカウントは25番ポートにインターネット経由でメールを配信することができなくなっており、SendGrid の利用も増えてきています。

#転ばぬ先の杖 :coffee: 

## 杖１：ShinobiLayerの「[SendGrid初心者のための注意](http://qiita.com/testnin2/items/ceb27d418a017c0c3490)」を読む
配信数のカウント方法は、To/CCなどに入っているメールアドレスの数である点、また、配信上限を超えて配信することは出来ない点が、よく誤解されます。

#Link Trackerを無効化したい
SendGrid から配信されたメールは、読者がメール本文のどのURLをクリックしたか、という反応を集計するためのLink Tracker という機能が適用されます。
この機能は、つまり、集計のために SendGrid のURLに自動的に置き換えてくれちゃうわけですが、セキュリティに敏感なユーザーはフィッシング詐欺か？と疑ってしまうことも少なくありません。
そのため、このLink Tracker を無効化するための手順もまとめられています。
基本は Ticket で依頼する、が王道なのですが、APIやPostfixを使った送信でも無効化できます。
[ShinobiLayer: SendGridでClick TrackingやOpen Trackingを無効にする方法（Web API）](http://qiita.com/testnin2/items/b608fb81ed9b8ded345e)
[ShinobiLayer: SendGridでClick TrackingやOpen Trackingを無効にする方法（Postfix + SMTP API）](http://qiita.com/testnin2/items/a3f42b4f9d44d53360f3)
Linuxサーバーでの処理を自動化していく(TeraTermマクロで自動ログイン→処理→閉じる)

サンプルとしてログイン→日付フォルダ作る→dateコマンドの結果吐く→閉じる方法を書いておきます。TeraTermで実行された処理もログファイルに残ります。
増え続けるログファイルとか、応答返ってこない時の処理とか、考慮するポイントはありますので参考にする時はご注意を。
プレーンテキストでのログイン以外は対応してません。

```test.ttl
;=========================================================
; 環境設定
;=========================================================
;ログインユーザ名
username = 'root'
;ログインパスワード
password = 'password'
;サーバIPアドレス
hostname = '192.168.100.2'
;TeraTermログ出力ディレクトリ
logdir = "C:\test\logs\"
;作業ディレクトリ
workdir = '/tmp'

;=========================================================
; メインルーチン
;=========================================================
call login
call pre
call exec
call post
end

;=========================================================
; サブルーチン
;=========================================================

; サーバーへログイン
:login
	msg = hostname
	strconcat msg ':22 /ssh /auth=password /user='
	strconcat msg username
	strconcat msg ' /passwd='
	strconcat msg password
	connect msg
return

; 前処理
:pre
	; TeraTermログ記録開始
	gettime timestr '%Y%m%d-%H%M%S'
	sprintf2 filename '%s_teraterm.log' timestr
	strconcat logfile logdir
	strconcat logfile filename
	logopen logfile 0 0
	logwrite 'Log start'#13#10
	logwrite '---------------------------------------------------'#13#10

	; 作成日のディレクトリを作成
	gettime datestr '%Y%m%d'
	wait '# '
	rmcmd = "rm -rf "
	strconcat rmcmd 'ttltest_'
	strconcat rmcmd datestr
	sendln rmcmd
	wait '# '
	mkcmd = 'mkdir -p '
	strconcat mkcmd 'ttltest_'
	strconcat mkcmd datestr
	sendln mkcmd
	
	; 作成日のディレクトリへ移動
	wait '# '
	cdcmd = 'cd '
	strconcat cdcmd 'ttltest_'
	strconcat cdcmd datestr
	sendln cdcmd
return

; 実行
:exec
	; 作成日のディレクトリにファイルを作成
	sendln 'date > date.txt'
return

; 後処理
:post
	; TeraTermログ記録終了
	wait '# '
	logwrite '---------------------------------------------------'#13#10
	logwrite 'Log end'#13#10
	logclose
	sendln 'exit'
return
```
c++ builder XE4, 10.2 Tokyo / String > 指定の文字以降を取得する

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

## 訂正前 > 値渡しによるコピーが発生

```Unit1.cpp
static String getStringFrom(String srcStr, String keyword)
{
	int pos = srcStr.Pos(keyword);
	if (pos < 0) {
		return L""; // error
	}
	return srcStr.SubString(pos, MAXINT); // MAXINT: until last
}
```

(MAXINTが最後まで、というのはソースリーディング的にはよくない。)

getStringFrom(L"AAA,BBB,CCC,DDD", L"CCC");
の結果は
L"CCC,DDD"
となる。

## 訂正

@yuba さんのコメントをもとに以下のように訂正します。

```Unit1.cpp
static String getStringFrom(const String &srcStr, const String &keyword)
{
	int pos = srcStr.Pos(keyword);
	if (pos < 0) {
		return L""; // error
	}
	return srcStr.SubString(pos, MAXINT); // MAXINT: until last
}
```

関数の使用コードはそのままです。
C++ クラスのコンストラクタでのクラス変数の初期化での括弧

C++ において、クラスのコンストラクタでの、クラス変数の初期化方法について質問させて下さい。

例)
class Test1 {
private:
  std::string s0;
  int n0;
  
public:
  Test1(const char* str, int& n) :
  s0{str}, n0{n} {}
  
  void show() {
    std::cout << "s0=" << s0.c_str() << "  n0=" << n0 << std::endl;
  }
};

こんな感じのコンストラクタを書いていたのですが、最近購入した、プログラミング言語C++(第4版）には

class Test2 {
private:
  std::string s0;
  int n0;
public:
  Test2(const char* str, int& n) :
  s0(str), n0(n) {}
  void show() {
    std::cout << "s0=" << s0.c_str() << "  n0=" << n0 << std::endl;
  }
};

と、()ではなく、{}でのクラス変数の初期化が掲載されていました。
Test2のコードは問題なくコンパイル及び実行できるのですが、初期化する際に、どちらの括弧を使うべきなのか理解できないでいます。

もし、ご存知の方がおられましたら、ご教授お願い致します。
iOSアプリ開発とAndroidアプリ開発の違いメモ

Xcode（Swift）での開発後に、Android Studioを使用していく中で気付いた点のメモです。
随時追加予定です。

# 使用するツール
| iOSアプリ | Androidアプリ | 
|:-----------|:------------|
| Xcode |Android Studio|

# 使用する言語など
| iOSアプリ：iOSアプリ | Androidアプリ：Android Studio | 
|:-----------|:------------|
| Swift または Objective-C |java（必要であればxmlも）|

# ソースを書くところ
| iOSアプリ：iOSアプリ |
|:-----------|
| パターン1.　Swift または Objective-Cで全て書く。 |
| パターン2.　Swift または Objective-Cでボタンタップ時の処理などを。storyboardで画面レイアウト周りを。 |

| Androidアプリ：Android Studio | 
|:------------|
|パターン1.　javaで全て書く。|
|パターン2.　javaでボタンタップ時の処理などを。xmlで画面レイアウト周りを。|


# 一括コメントアウトしたい
| iOSアプリ：Xcode(Swift) | Androidアプリ：Android Studio | 
|:-----------|:------------|
| Cmd + / |Cmd + /|

# 選択したオブジェクトの定義を探したい
| iOSアプリ：Xcode(Swift) |Androidアプリ：Android Studio | 
|:-----------|:------------|
| Cmd + クリック |Cmd + クリック|

# 画像ファイルの追加
| iOSアプリ：Xcode(Swift) |
|:-----------|
| 追加先のフォルダへドラッグ＆ドロップ |

| Androidアプリ：Android Studio | 
|:------------|
|画像ファイルをCmd+C（コピー）後、res > drawableフォルダでCmd+V（ペースト） |
※Xcodeは追加した画像をフォルダ分けできるが、Android Studioのdrawableフォルダはフォルダ分けできない。

#パーツ
※厳密には同じではないものもありますが…似たようなパーツ一覧です。
#### ・画面
| iOSアプリ：Xcode(Swift) |Androidアプリ：Android Studio | 
|:-----------|:------------|
| ViewController | Activity |
#### ・ヘッダー
| iOSアプリ：Xcode(Swift) |Androidアプリ：Android Studio | 
|:-----------|:------------|
| ナビゲーションバー | タイトルバー、アクションバー |
| NavigationBar | TitleBar、ActionBar |
#### ・画像を入れたボタン（縦横比そのまま）
| iOSアプリ：Xcode(Swift) |Androidアプリ：Android Studio | 
|:-----------|:------------|
| UIButtonを使用 | ImageButtonを使用 |

#### ・簡単なテスト用ログ出し
| iOSアプリ：Xcode(Swift) |Androidアプリ：Android Studio | 
|:-----------|:------------|
| print("文字：  \ (変数を設定)") | Log.i("文字１", "文字２"); |
富士ゼロックス DocuPrint C3360/C2250 を Mac OS X(macOS)で使うには

OS X 10.11 El Capitan/macOS Sierra 10.12で、普通に設定するとPostScriptモード(?)出力になり、DocuPrint側に有料のPostScriptモジュールが必要らしい。なにこれ!?

そこで、少しググってみた。

# 富士ゼロックス DocuPrint C3360/C2250 を Mac OS Xで使うには!

### ステップ1

OS X 10.11 El Capitanだけど、
[プリンタードライバー Ver.3.6 概要](http://www.fujixerox.co.jp/download/docuprint/c3360/mac1010/prt/)
をダウンロードして、インストールしておく(必須なのかは判らない)

### ステップ2

システム管理環境から、「プリンタとスキャナ」を選んで、プリンタを追加。DocuPrint C3360/C2250のIPアドレスを入力すると、自動選択でドライバが選ばれるが、ここは無視して、『プリンターソフトウエア選択』で

**FX PDF print**

を選択する。すると、普通にプリントが出来ます。

自動選択で、有料オプションが必要なPostScriptドライバをインストールするのは、反則だよなー
c++ builder XE4, 10.2 Tokyo > デバッグ > 処理対象フォルダの表示 > ShellExecute(NULL, NULL, L"explorer.exe", dstDir, NULL, SW_SHOWNORMAL);

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

フォルダ関連の処理をしていて、そのフォルダの中身を見たいときがある。

これまでは以下をしてきた。

- ブレークポイントで 止める
- フォルダ名を格納した変数の中身をコピー (dstDir: String)
- エクスプローラを起動する
- エクスプローラのアドレス欄？にペースト + [Enter]

以下のコードを追加することにした。その処理に到達した時に自動的にフォルダが開く。

```
#if 1
	ShellExecute(NULL, NULL, L"explorer.exe", dstDir, NULL, SW_SHOWNORMAL);
#endif
```

これでテストの繰り返しが楽になった。

### 検索用キーワード
(追加 2017/09/20)

- エクスプローラ
EC2 にコピペでサクっと mecab 入れる

コピペでうごくとおもうよ（うごかなかったらごめんね)

# mecab インストール

```shell-session
sudo yum install -y gcc gcc-c++
mkdir mecab
cd mecab
wget http://mecab.googlecode.com/files/mecab-0.996.tar.gz
tar xvzf mecab-0.996.tar.gz
cd mecab-0.996/
./configure
make
make check
sudo make install
```

# 辞書調達しないと切ない

```shell-session
ec2-user@:~/mecab/mecab-0.996% mecab
param.cpp(69) [ifs] no such file or directory: /usr/local/lib/mecab/dic/ipadic/dicrc
```

# 辞書もコピペで

```shell-session
cd ..
wget http://mecab.googlecode.com/files/mecab-ipadic-2.7.0-20070801.tar.gz
tar xvzf mecab-ipadic-2.7.0-20070801.tar.gz
cd mecab-ipadic-2.7.0-20070801/
./configure --with-charset=utf8
make
sudo make install
```

# うごくかな

```shell-session
ec2-user@:~/mecab/mecab-ipadic-2.7.0-20070801% mecab
吾輩は猫である。名前はまだ無い。 どこで生れたかとんと 見当がつかぬ。
吾輩	名詞,代名詞,一般,*,*,*,吾輩,ワガハイ,ワガハイ
は	助詞,係助詞,*,*,*,*,は,ハ,ワ
猫	名詞,一般,*,*,*,*,猫,ネコ,ネコ
で	助動詞,*,*,*,特殊・ダ,連用形,だ,デ,デ
ある	助動詞,*,*,*,五段・ラ行アル,基本形,ある,アル,アル
。	記号,句点,*,*,*,*,。,。,。
名前	名詞,一般,*,*,*,*,名前,ナマエ,ナマエ
は	助詞,係助詞,*,*,*,*,は,ハ,ワ
まだ	副詞,助詞類接続,*,*,*,*,まだ,マダ,マダ
無い	形容詞,自立,*,*,形容詞・アウオ段,基本形,無い,ナイ,ナイ
。	記号,句点,*,*,*,*,。,。,。
どこ	名詞,代名詞,一般,*,*,*,どこ,ドコ,ドコ
で	助詞,格助詞,一般,*,*,*,で,デ,デ
生れ	動詞,自立,*,*,一段,連用形,生れる,ウマレ,ウマレ
た	助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
か	助詞,副助詞／並立助詞／終助詞,*,*,*,*,か,カ,カ
とんと	副詞,一般,*,*,*,*,とんと,トント,トント
見当	名詞,サ変接続,*,*,*,*,見当,ケントウ,ケントー
が	助詞,格助詞,一般,*,*,*,が,ガ,ガ
つか	動詞,自立,*,*,五段・カ行イ音便,未然形,つく,ツカ,ツカ
ぬ	助動詞,*,*,*,特殊・ヌ,基本形,ぬ,ヌ,ヌ
。	記号,句点,*,*,*,*,。,。,。
```

うごいたぽいですね。いじょう。
composer install で Downloading の時点で失敗する

### 発生する事象

どこからかひっぱてきたプロジェクトに対して
`composer.phar install` でパッケージを入れることは多いと思うのですが
ダウンロードしようとしたら、以下の警告が出てきて失敗した。

```:出てくるログ
[Composer\Downloader\TransportException]                                     
Your configuration does not allow connection to http://pear.php.net. 
See https://getcomposer.org/doc/06-config.md#secure-http for details. 
```

### 発生したバージョン

```
composer.phar --version
Composer version 1.0-dev (e8abc90b923250527a2d68712b663f0f41790594)
```
### 解決策

https://getcomposer.org/doc/06-config.md#secure-http
上記URLの内容を読めばわかる話なのですが
`secure-http` という設定があり
https以外のものはダウンロードしてこないという設定になっています。
この設定があるために
composer.jsonで指定しているものにhttpアクセスしかできないものがあると
これでダウンロードできなくなってしまっているようです。

httpsに対応していないものは結構多いと思うので
明示的にこの設定を切る必要があるので
以下の内容をcomposer.jsonに追記します。

```json:composer.json
    "config": {
        "secure-http": false
    }
```

### 参考

* [composer/CHANGELOG.md at master · composer/composer](https://github.com/composer/composer/blob/master/CHANGELOG.md)
<br>
チェンジログを見たら2016/3/3に実装された内容なので、それ以前に手元に落としたcomposerなら起きない事象だと思います。
* [Cannot install Horde Imap Client with composer - Stack Overflow](http://stackoverflow.com/questions/35726742/cannot-install-horde-imap-client-with-composer)
手軽にかっこいいラベルを張れるLabel.cssが便利っぽい

画像とかの上に手軽にラベルを張れるcssライブラリがあったのでご紹介です。
動きとかは公式サイト見ていただくとわかりやすいかも！

# 公式サイト

http://usablica.github.io/label.css


# 使い方

ラベルを置きたいタグを

```html
<figure class="label inside top" data-label="ラベルだよ">
  <div>ここがラベルを置きたいエリア</div>
</figure>
```

みたいな感じでclass="label"で囲んであげればいいらしい。

### 指定できる位置

```
1. top
2. middle
3. bottom
4. right
5. left
6. inside
7. outside
```
右上なら、class="label top right"みたいにしてあればよいよう。

### 指定できるアニメーション

```
1. float
2. fade
```

# 試してみる

取り敢えずダウンロードしてくる。

```bash
$ wget https://github.com/usablica/label.css/archive/master.zip
$ unzip master.zip
```

公式サイトにdownloadボタンあるのでそっちからでもOK

解凍したらこんな感じの構成になっていた

> label.css-master --- sass/
　　　　　　　　　　　|- less/
　　　　　　　　　　　|- css/ --- label.css
 　　　　　　　　　　　　　　　|-- label.min.css
 　　　　　　　　　　　|- config.rb
　　　　　　　　　　　|- README.md


cssディレクトリのしたに、label.cssとlabel.min.cssがあるので、読み込ませる。

```html:index.html
<html lang="ja">
  <head>
    <meta http-equiv="Content-Type" content="text/html: charset=UTF-8">
    <link rel="stylesheet" type="text/css" href="./label.css-master/css/label.min.css">
  </head>
  <body>
  </body>
</html>
```

試しにreactの画像でやってみる。

```html:index.html
<html lang="ja">
  <head>
    <meta http-equiv="Content-Type" content="text/html: charset=UTF-8">
    <link rel="stylesheet" type="text/css" href="./label.css-master/css/label.min.css">
  </head>
  <body>
    <figure class="label inside top right float" data-label="これはreactの画像です">
      <img src="https://facebook.github.io/react/img/logo.svg">
    </figure>
  </body>
</html>
```

わかりづらいけど右上のラベル。

![スクリーンショット 2016-03-11 10.03.19.png](https://qiita-image-store.s3.amazonaws.com/0/105934/3b73f33e-e1b1-48b4-03ce-d738e53932d9.png)

かなり手軽に使えていい感じでした！
composerとは？

## composerとは
簡潔に説明すると、
composerは、プロジェクトが必要とするライブラリやパッケージを管理し、
それをもとにインストールをすることができます。
phpの依存管理ツールと言えば良いのでしょうか。

例えば、あるライブラリをインストールする場合、
その前に特定のライブラリをインストールしなければならない場合がありますね。
そんな依存関係を自動的にインストールしてくれる便利なツールです。

こちらのツールを利用するためには、まず以下のコマンドで
インストールをします。

```
curl -sS https://getcomposer.org/installer | php
```

インストールが完了すると、composer.pharができました。
composer.pharは、通常/usr/local/bin/へ移動します。

```
mv composer.phar /usr/local/bin/composer
```


## composerを使ってインストールする準備をしよう。
composerを使ってライブラリをインストールするためには、
composer.jsonを用意しないといけません。

## composer.jsonてなに？
これは、依存するパッケージを定義するためのファイルのことを指します。
自分で作成することもできますし、以下のようにinitで作ることも可能です。
initを使用すると対話式に作ることができます。

```
php composer init
```

ファイルの中身はどうなっているのかというと、

```
{
    "require": {
        "monolog/monolog": "1.0.*"
    }
}
```

まぁ、こんな感じ。
どうやらrequireキーを使って、指定をするようです。
monolog/monologは、パッケージ名を指しており、
1.0.*は、パッケージのバージョンを指しています。
こう指定することで、1.0系の最新バージョンがインストールされます。


## composerを使ってインストールする。
composer.jsonができて初めてインストールする準備が整いました。
後は、下記を実行するのみです。

```
composer install
```

## composer.lockについて
composer installをすることで出来上がるcomposer.lockについてですが、
このファイルには、composerのインストール時にパッケージのバージョン情報が記されています。

installコマンド実行時に、composer.lockファイルが存在する場合は、
composer.lockに書きだされているバージョンをダウンロードします。

チーム間で同じバージョンをインストールする際に使用することがあります。

## 最後に
必要最低限の知識は、これで全てでしょうか。
パッケージのリストについては、下記URLから
https://packagist.org/explore/
コマンドからも探すこと可能です。

```
php composer.phar search キーワード
```

どんなパッケージがあるのかについては、気が向いたら覗いてみようかな、
と思います。
機会があれば、ここで紹介したいなー。

以上でしたー。
面白いdata visualizeやd3js作品

# visualize
visualizeってチャートとかが目立つけれど、もっと可能性あるなと。
それでいくつか調べて溜め込む用。

## 音楽
http://roadtolarissa.com/synth/
http://bl.ocks.org/chrisrzhou/6e5fa4352fb8de5ba1f4


## フレームワーク
### （種類）
http://matome.naver.jp/odai/2134248598537696401

### mindmap
http://tommykrueger.com/projects/d3tests/
Alcatraz を便利に検索する Alcatraz Search という web アプリを開発しました

# [Alcatraz Search](http://starhoshi.github.io/AlcatrazSearch/)

<img src="https://raw.githubusercontent.com/starhoshi/AlcatrazSearch/master/screenshot.png" alt="AlcatrazSearch screenshot.png" width=500px>

web アプリというほどのものでもないのですが、 [Alcatraz Search](http://starhoshi.github.io/AlcatrazSearch/)  は Xcode の Package 管理ツールである [Alcatraz](http://alcatraz.io/) を人気順や更新順などでソートし、便利に検索できるものです。
GitHub Pages で動いていますが、中身のデータは dropbox から取得しているため企業内ネットワークから利用できなかったらすみません(弊社はできない...)。

## 主な機能

以下 4 つになります。

* Package, Description を検索
* Github Stars, Watchers, Forks, Updated, Created を表示
* Stars, Updated, Created, Name でソート
* データは 10 分に 1 回更新

開発内容について知りたい人は [React + Redux + TypeScript でWebアプリを作った感想・勉強法と Angular との比較](http://qiita.com/star__hoshi/items/34eb4ccafcfa100b5cad) を参照ください。


# なぜ開発しようと思ったか

[Atom](https://atom.io/) などで Plugin を検索すると `Downloads 524,331 / Stars 1388` とか出てて、「おお この Plugin みんな使ってるのか、俺も入れよう」という気持ちになります。

しかし、Alcatraz で検索しても何が人気かがわからず「どれを使えば良いのだ...」 となることが多く、それを解消するために各種ソート機能や数値の表示が欲しいと思い開発しました。

[Alcatraz - Libraries](https://libraries.io/alcatraz) でもいいかと思いましたが、スクショないしぱっと見で見難い。
同じようなやつで [AlcatrazTour](https://github.com/haranicle/AlcatrazTour) がありますが、 iPhone アプリのため開発時には使い勝手がよくないです。

[Alcatraz](http://alcatraz.io/) 本家で Issue が上がっていますが、バックエンドのメンテまではしたくないのでやらないとのことで Close されています。

* [Rankings · Issue #229 · alcatraz/Alcatraz](https://github.com/alcatraz/Alcatraz/issues/229)
* [xib file missing by installing from Alcatraz · Issue #196 · alcatraz/Alcatraz](https://github.com/alcatraz/Alcatraz/issues/196)


# 開発してわかったこと

[Alcatraz](http://alcatraz.io/) は GitHub でなくただのファイルだけでも Theme として公開できるようになっています。
また、 1 つのレポジトリに複数の Theme を公開できるし、 SwiftyJSON は Cocospods のレポジトリ内で Xcode Plugin の公開をしているため、 Star 順にすると一番上に来ます。

そのため単純に GitHub Star でのソートなどがしづらく、ちゃんとやろうとすると自分たちでインストール数の管理などを行わねばならないため、そのバックエンドを作りたくないのでしょう。

なぜ Star の表示をしないんだ！と思っていましたが、開発しててその事情を把握し納得できました。


# 良さげな Plugin 紹介

[Alcatraz Search](http://starhoshi.github.io/AlcatrazSearch/) で自分が知らなかった良さげなのをいくつか見つけたので紹介します。

* [RTImageAssets](https://github.com/rickytan/RTImageAssets)
  * 画像 1 つあれば、それから @2x, @3x などの画像をつくってくれる。
* [IconMaker](https://github.com/kaphacius/IconMaker)
  * 上のと似たようなので、アイコン画像の各サイズを一気に生成する。
  * 今まで [MakeAppIcon](https://makeappicon.com/) とか使ってたけど、それより全然良い。
* [VWInstantRun](https://github.com/wangshengjia/VWInstantRun)
  * 指定した部分のコードをその場で実行できるっぽい。
  * Playground 感覚でかけてめっちゃ良さそう。
* [Refactorator](https://github.com/johnno1962/Refactorator)
  * Swift でリファクタリング機能使える。
* [Swimat](https://github.com/Jintin/Swimat)
  * autoindent してくれるのでコードフォーマットしなくて良くなる。
* [Cichlid](https://github.com/dealforest/Cichlid)
  * 10 日前に公開されたのにもう 100 Star 近くてすごい。
  * clean 時に DerivedData を削除してくれるやつ。
  * [How to make Xcode Plugin in Swift // Speaker Deck](https://speakerdeck.com/dealforest/how-to-make-xcode-plugin-in-swift)


# 最後に

Xcode Plugin を使いこなし皆様の生産性が高くなることをお祈りしています :pray: 

[Alcatraz Search | Search Alcatraz more better.](http://starhoshi.github.io/AlcatrazSearch/)
柔らか層外伝

#はじめに
IBM Cloud（旧SoftLayer）のエンジニアさん向けの技術本、柔らか層はご存知ですか？
IBM Cloudに関わるエンジニアが作成、編集しているテクニカル資料（不定期発行）です。
:book: [技術よりなひとが最初に読む　IBM Cloud柔らか層本（PPT）](https://ibm.box.com/v/ibmcloud-yawaraka)

書籍派の方は、[SoftLayer詳細解説ガイド](http://book.impress.co.jp/books/1115101095)をどうぞ。内容も一新した「柔らか層の書籍版」です。。。が内容がずいぶん古くなっています。歴史を振り返りたい場合を除いて、ご注意ください。

じゃあ、この柔らか層外伝は、、、というと、柔らか層本が担っているSoftLayerのコンポーネントごとの詳細な説明としては収録するのに適していない、または、時々刻々と変化するであろう技術的なノウハウについて、特に以下の特徴のある技術的ノウハウを体系的にまとめることを目的としています。
- 良くある「落とし穴」を事前に回避したい
- Ticketをスムーズにやり取りできればもっと速く分かっていたノウハウを知りたい
- 直接関係しないかもしれないが、情報として認識しておくと何かと便利なものを把握したい

もちろん、SoftLayerのTicketシステムや、[knowledgeLayer](http://knowledgelayer.softlayer.com/jp)や、Qiita内の記事などを検索していただくと、最新の情報にたどり着きます。また、ユーザーグループ内にまとめられた[技術リンク集](http://jslug.jp/linkes-rss)も便利ですね。
そして忘れてはならないのが、[SoftLayer活用ガイド](https://www.change-makers.jp/docs)ですね。デザインパターンやコンフィグガイド、ユースケースなど充実の品揃えです。

#もくじ
1. [Vyatta編](http://qiita.com/TOMOARI/items/c417b047394636fd2748)
2. [SendGrid編](http://qiita.com/TOMOARI/items/57df672e9cf04fa673f2)
3. [NetScaler編](http://qiita.com/TOMOARI/items/1582c202062c28aa680f)
4. [Global Network編](http://qiita.com/TOMOARI/items/5ba7315ea00e808e4d6d)
5. [カスタマーポータル編](http://qiita.com/TOMOARI/items/bcfec4e04a6803151630)
6. [専用線接続 変](http://qiita.com/TOMOARI/items/1e52b705991b18991688)
7. [VMwareでハイブリッド編](https://qiita.com/khayama/items/b8dc884c7ea273861a24)
8. [セキュリティ実装・認証編](http://qiita.com/TOMOARI/items/fb4b177a72e79fb8a6fc)
9. [サーバー設定編](http://qiita.com/TOMOARI/items/08084b6c6030926023d3)
10. [Firewall編](http://qiita.com/TOMOARI/items/7967b2adedd262651149)
11. [Coming Soon]
Leiningenのテンプレートを探す


ClojarsはClojureのライブラリ置き場ですが、テンプレートも同じように置いてあります。
`HOGE/lein-template`などと検索すれば、お目当てのテンプレートも見つかるかもしれません。

https://clojars.org/search?q=lein-template
vmware > ゲストOS > {グローバル接続 / ローカル接続}同時接続 > とりあえずいけた

```txt:動作環境
VMware workstation 12 on Windows 7 pro
```

ゲストOSにて以下をやりたいが、うまくできない。

- 無線LAN: グローバルIP接続
  - git接続用
  - 情報検索用
- 有線LAN: ローカルIP接続
  - ローカル設置機器との通信試験用
 
上記のうち、片方が接続したら片方が見えないというわからない状況になっている。

ホストOSでグローバル接続できて、ゲストOSでローカル接続まではできている。

ゲストOS側に無線LANアダプタのドライバをインストールしないといけないのだろうか。

http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11132155856
> ※有線LANと無線LANの両方にチェックが入っている場合は正しく動作しないようです。 


### できた

以下の設定でできた。根拠はない。

- ネットワークアダプタ1 > ネットワーク接続
  - ブリッジ
  - 物理ネットワーク接続の状態を複製(P)
- ネットワークアダプタ2 > ネットワーク接続
  - NAT
  
上記の時、イーサネットアダプター ローカル接続3: は一見無関係そうなIPアドレスが取れている。
イーサネットアダプター ローカル接続:はローカルのIPが取れている。

コントロール パネル\ネットワークとインターネット\ネットワーク接続
における設定は２つとも「IP自動取得」

### 再起動後

PC再起動後にローカル接続の方でFTP接続ができなくなった。pingは通じる。

~~どうもまだわからない点がある。~~

再起動後は以下の方法で対処できた。

1. ホストOSの無線LANを無効にする (有線LANは有効のまま)
2. ゲストOSのアダプタ1, アダプタ2を切断にする ([取り外し可能デバイス]メニュー)
3. ゲストOSのアダプタ1を接続にする([取り外し可能デバイス]メニュー)
  - ipconfig にてローカルIPが取得できるていることを確認する
4. ホストOSの無線LANを有効にする
5. ゲストOSのアダプタ2を接続にする([取り外し可能デバイス]メニュー)

接続の問題発生時はアダプタ1のIPがローカルアドレスにならずグローバルアドレスになっていた。その対処として上記の手続きを思いついた。


### 補足

さらに気づいた点を追記。

上記の状態でローカルIP接続先の機器が電源断などで通信断状態になると、その時点でアダプタ1のIPがローカルからグローバルアドレスに変更される。

ipconfigで確認してローカルアドレスでなくなっていたら、上記を再度してローカルアドレスになるように仕向ける。
matplotlibの画像が,名前変更して保存できない

私はMacもwindowsもUbuntuも使うのですが、Macでmatplotlibで表示したグラフ等を保存するときに、ファイル名が変更できないとか、拡大してみることができないとかいろいろ不都合があったので、matplotlibの設定を変更
## 環境
-MacOSX El Capitan
-pyenv,virtualenvで環境構築

##変更方法
ターミナルで以下を入力
```cd ~/.matplotlib/matplotlibrc```
```echo backend : TkAgg```

また、seabornというモジュールをpip等でインストールして、
```import seaborn as sns```
としておくだけで、グラフが見やすく、おしゃれ？になるのでこれはしておくべき
Perlでエポック秒(UNIX時間)を日時に変換

#現在のエポック秒を日時に変換
## パターン1

```bash
date +"%s" | perl -pe 's/\d+/localtime $&/e'
```

**追記**
現在日時をPerlで取得する場合は以下がスマートです。(dankogaiさんありがとうございます)
## パターン2

```pl
perl -E 'say "".localtime'
```
say関数に、空の文字列と連結する形で現在時刻を扱うことで、文字列として(というか、スカラーとして)受け取ることを表している。
(localtime関数の戻り値をスカラーとして受け取るときは文字列となる)

## パターン3

```pl
perl -E 'say scalar localtime'
```
パターン2の意図を明確に書いた方法。
say関数に、localtime関数の戻り値をスカラーに変換して返す、というもの。
postgresのアクセス権限付け

postgresqlをインストールした後は、デフォルトではユーザはpostgresしか存在せず、superuserであるので、別のユーザを作成してリモートではそのユーザで処理するのが安全なのかなと思う。

新しく作成したユーザのDBに対してのアクセス権限のつけ方をメモしておく

## すでにあるテーブルに対して権限付け
例えば、"connect" というユーザを作成し、このユーザはDB内のテーブルにはselect,insert,updateしか許可しないとする（こうすれば、リモートからはconnectユーザでアクセスすれば、誤ってデータを消す可能性は減る）
権限付けは、superuserでDBに入って以下のコマンド
```GRANT select,insert,update ON ALL TABLES IN SCHEMA public  TO connect;```
これで、すでに作成されているDB内テーブル全てにアクセス制限可能

## これから作成するテーブルに対してデフォルトで権限付け
DB内でこれから作成するテーブルに対しても権限付けをすることが可能
上記と同様の権限付けをデフォルトとする場合は以下のコマンド
```ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT select,insert,update ON TABLES TO connect;```

もちろん、テーブル名を変更すればテーブル個別でアクセス権限をつけることも可能だし、コマンドも変えられる。
docker備忘録（導入＋hello-world）

<pre>

（実行コマンド）
curl -fsSL https://get.docker.com/ | sh
docker run hello-world

(/var変化）
ubuntu@localhost:~$ sudo find /var -cmin -1
/var/log/kern.log
/var/log/syslog
/var/log/auth.log
/var/log/upstart/docker.log
/var/lib/docker/containers
/var/lib/docker/tmp
/var/lib/docker/image/aufs
/var/lib/docker/image/aufs/imagedb/content/sha256
/var/lib/docker/image/aufs/layerdb/sha256
/var/lib/docker/image/aufs/layerdb/mounts
/var/lib/docker/image/aufs/distribution
/var/lib/docker/aufs/layers
/var/lib/docker/aufs/diff

</pre>
cost estimation > FPGA on cloud

http://qiita.com/kazunori279/items/502419527fab7c6b45ae
が非常に興味をそそられる。

気になったのは以下の一文。

> ただし、OSライセンスが月額$116.8かかるので、Linuxを選べばもっと安くなる（ただし、VNCによるリモートデスクトップ設定がちょっと面倒）。


### 土日FPGA開発型

- 8時間(とする) x 2日 x 4週 : 50円 x 8 x 2 x 4 = 3200円
- OSライセンス(Winの場合) : 116.8ドル = 13,211円 (as of 2016/03/11)

合計 16,411円 / 月

### 月..日FPGA開発型

- 8時間(とする) x 7日 x 4週 : 50円 x 8 x 7 x 4 = 11200円
- OSライセンス(Winの場合) : 116.8ドル = 13,211円 (as of 2016/03/11)

合計 24,411円 / 月

### 参考情報1

2005年に2台のPCを購入して、Fortranの数値計算を24時間延々と動かし続けた時のコスト。
情報が古いのであくまで参考情報.

- PC購入代金 : 50万円
- 電気代増加分 / 月 : 7000円（くらいだったか、記憶が少しあいまい)

3年で償却するとすると 500,000 + 7000 * 36 = 752,000円
月あたりは 752,000円 / 36 = 20,888円

月..日FPGA開発型の金額より多少安い程度。

### 参考情報2

- 2016年1月に購入したPC : 19万円
  - CPU : Intel Core i7-6700K [4GHz/4Core/HT/HD530/TDP91W] Skylake搭載モデル

電気代金は参考情報1と同じ程度とすると

3年で償却するとすると 190,000 + 7000 * 36 = 442,000円
月あたりは 442,000円 / 36 = 12,277円

2019年頃に現在のPCの償却を終わった時にクラウドの利用も検討するかもしれない。

### 参考情報3

2005年に128CPUのサーバーを自由に使っていいということになった。
設置場所は 6,738km 離れたところだった。

以下の理由から使用は3カ月程度でやめて、上記の50万円2台構成の稼働を開始した。

- 通信が遅い
- 各種セットアップ時にviでのみ作業
  - tmuxやscreenなど知らなかった
- 計算終了時、データ取得に時間がかかる
- 結果をそのまま画像で見れない
  - 一度ダウンロードしてから確認する場合、それらのデータすべての取得に時間がかかる

FPGAをクラウド処理する時、結果ファイルの取得時間が気にかかる。
bitstreamのみなら数十秒程度だろうか。IPが増えてきたらその程度で済まないかも。
Visual Studio Codeのデフォルト改行コードを変える

[Visual Studio Code 0.10.10のリリースノート](https://code.visualstudio.com/Updates)を見てると、改行コードを変えられるようになったみたいでした。

> A new setting `files.eol` controls the default new line character when creating new files. It defaults to `\r\n` on Windows and to `\n` on Linux and OS X.

設定にこう書いておけば、Windowsでも改行コードがLFになります。

```settings.json
{
...
   "files.eol": "\n",
...
}
```

（gitの設定の方で解決するのがいいのかもしれませんけど。ベストプラクティスがよくわかりません…）
電子工作 > 箱(v0.3) > ミルクコーヒー + あずきバー > マンハッタンシェイプ

http://qiita.com/7of9/items/8e871ad2eddc30d642ad
のバージョンアップ v0.3.


X68000 XVI マンハッタンシェイプ。

![DSC_0146.JPG](https://qiita-image-store.s3.amazonaws.com/0/32870/00b85831-9895-c505-4f6f-0a8c23712457.jpeg)

- 470, 100, 51 : ３種類の抵抗値が5本ずつ入っている
- MIL : MIL規格コネクタ
- 後ろの柄は道具屋筋の相互商会で売っていた紙。キボードーカバー・マウスパッド・写真撮影時の背景隠し、として使用(10枚 172円)
- 以下略


抵抗値はE24系列を６箱程度に収めるために、１つの箱に４種類は入れたい。
そうなるとカラーコードを読む能力が強制学習できる。[51Ω抵抗のカラーコードにひかっかった](http://qiita.com/7of9/items/c6258368143444fca803)のはこういう過程でのこと。

あxきバーの箱を縦置きにしたのは、横置きにした時に上段の箱がすべりそうだったから。マジックテープで下段と固着しようか検討したが、ふと思い出したのが５重の塔(five story pagota)と東京スカイツリーの構造。
二者は中が自由に動くような仕組みになっていて、それにより地震の揺れを吸収できるらしい。上記の写真のように個々の箱が自由に動く状態になると、箱の横方向への揺れの影響は打ち消し合うのでは、という目論見。

箱の縦方向の揺れに対しては、前面をもちあげる傾斜を付加することで、多少のゆれには対応できるのではと思う。もちあげる仕組みは検討中。

あxきバーの箱は３箱(小箱30こ)でやめておこうと思う。その時に残すものは厳選することになる。
技術英語 > it’s cheap and [readily available].

@ LOE > January 31, 2003

http://loe.org/shows/shows.html?programID=03-P13-00005

> After three years, the villages using nylon filters had reduced their cholera rate by 40 percent, but the sari cloth did even better, cutting the cholera rate in half. And in a poverty-stricken village, sari cloth has two other advantages: <font color=red>it’s cheap and readily available.</font>

http://eow.alc.co.jp/search?q=readily&ref=sa

コレラの伝染を防ぐ手段として readily available (入手しやすい）とのこと。


各値の抵抗、各容量のコンデンサ、などの電子部品が近くのコンビニで買えます、と readily available な状態になれば数割高くても自宅在庫せずにそこで買うかも。
VyOSメモ

## download

* [vyos-1.1.7-amd64.iso](http://0.ua.mirrors.vyos.net/iso/release/)をダウンロード

## KVMで起動

```bash:
kvm \
  -m 1000 \
  -cdrom vyos-1.1.7-amd64.iso \
  -redir tcp:2200::22 \
  -curses \
  -boot d
```

## ログイン

* vyos : vyos でログイン

### 設定編集の流れ

```
configure

いろいろ編集

commit
save
exit
```

### DHCPでIP取得、ssh接続許可

```
set interfaces ethernet eth0 address dhcp
set service ssh port '22'
```

```bash:ホストからssh接続
ssh vyos@localhost -p 2200
```

```bash:ip確認
ip a s | grep inet
```

## VyOSはdebianベース

* デフォルトは`vbash`ですが、`bash`起動すれば普通にdebian。
ArchLinuxでWelcome to emergency mode!

VirtualBoxの共有フォルダを自動マウントしていると、アップデートによって以下のエラーが出ます。

この問題の解決は、自動マウントを解除することです。

```bash:
Welcome to emergency mode! After logging in, type "journalctl -xb" to view
system logs, "systemctl reboot" to reboot, "systemctl default" to try again
to boot into default mode.
Give root password for maintenance
(or type Control-D to continue):
```

ここで、`(or type Control-D to continue):`のところでパスワードを使ってログインし、`/etc/fstab`を編集します。

```bash:
$ journalctl -xb
$ vim /etc/fstab
/dev/sda2 ext4 ...
```

## その他の情報

`Linux-headers`を先に入れておかないと virtualbox のインストール時にモジュールがビルドされない感じになった模様?

カーネルモジュールの更新を見つけて自動で再ビルドしてくれるツールらしい`virtualbox-guest-dkms`などを使うと良いかもしれません。

## 追記

`2016/03/13` : アップデートすると直ります。最新カーネルに対応した`virtualbox-module`が更新されたらしい。
ssh接続しないとHTTPリクエストがタイムアウトするWebアプリを見た

※ 現在なぜssh接続しないとHTTPリクエストがタイムアウトするのか
根本的な原因がわかっておりません
**ご意見やアドバイス**よろしくお願い致しますm(__)m

# 動作させた環境
### クライアント
* MacBookPro Elcaptian

### サーバ
* Amazon Linux AMI 2015.09
* Java8
* Tomcat8
* MySQL 5.6
* ~~httpd~~

# 前提
## サーバ環境
Amazon Linux上にJava8, Tomcat8, MySQLをインストールし
落としてきた製品版Javaアプリ(以下、アプリ)を
<code>/usr/share/tomcat8/webapps/</code>に配置しています
(Tomcat8, MySQLはデーモンを立ち上げていることとします)

他にもアプリを動作させるために幾つかパッケージをインストールしています。
アプリはwarファイルで配布されています

## 接続
サーバ接続する際はVPN経由でssh接続を行っています
なのでサーバもプライベートネットワークのものとして扱っています

## ファイアーウォール
### ssh(22) / Tomcat(8080)
プライベートネットワーク内IPからのインバウンドのみ許可しています

# 障害（と言うか不明点

題名にも有りますが、

**ssh接続しないとHTTPリクエストがタイムアウトします**

※ ただし一度でもssh接続すれば
ssh接続を切ったとしてもHTTPリクエストがタイムアウトすることはありません

## 再現方法
1. Webページにアクセス（**繋がらない?**
1. sshでサーバに接続
1. Webページにアクセス（**繋がる!!**
1. Wifiを切る
1. ssh接続をせず再度Webページにアクセス（**繋がらない!?**

# 調査途中結果
調査にあたって、パケットとログを監視しました

## パケット
<code>tcpdump</code>コマンドを使ってパケットがアプリに渡ってくるか監視

```
$ sudo tcpdump -i eth0 port 8080
```

## ログ
Tomcatのログファイルを<code>tail -f</code>コマンドで監視

```
$ sudo tail -f /var/logs/tomcat8/....log
```

# 結果
HTTPリクエストがタイムアウトする時
パケットもTomcatのログにも足跡が残っていて
正常にTomcatまではアクセスしていることが分かりました

なので、アプリ側で制御しているという所までは理解することが出来ました

そこに加えてssh接続済みのクライアントのネットワークを一度切断し
再度HTTPリクエストを送るとタイムアウトすることから


## クライアント側に何らかの情報が？  
ssh接続情報をキャッシュさせてたが、ネットワークを切ったことので情報が消えた？  
でもHTTPリクエストが着ているのだからレスポンスは返せるよね？  
んー？？ ←イマココ


他には展開されたwarファイルを確認してみたが、
それっぽいところは見当たらず
（アプリ側のフィルターがあるんじゃないかと推測したのだが…


という現状になっております
何か進捗があり次第追記していこうと思います

冒頭でも記載しましたが
もし心当たりやアドバイスがありましたら是非よろしくお願い致します！！
MySQLで ERROR! The server quit without updating PID file って言われた話

# MySQLで ERROR! The server quit without updating PID file って言われた話

### 状況
web開発をしていて，日本語を含むレコードを作成できなかったので，文字コードを調べてみたところ，latin1ってなってた

```
mysql> show variables like 'char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | latin1                     |
| character_set_connection | latin1                     |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | latin1                     |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

mysql>
```
ということで，utf8に設定しようと，一旦停止してから，/etc/my.cnfを設定して，再びMySQL起動すると，

```
$ sudo service mysql startStarting MySQL... ERROR! The server quit without updating PID file (/var/lib/mysql/vagrant-centos65.vagrantup.com.pid).
```

え，起動できない．．．

調べると .errファイルを削除するとか，動作中のプロセスを確認するとか出てくるがそれでも解決せず

### 原因
どうやらMySQL5.5からはutf8への設定の記述が異なるらしい

```lang:以前
default-character-set=utf8
```

```lang:以降
character-set-server=utf8
```

### 結果

MySQL起動

```
sudo service mysql start
Starting MySQL. SUCCESS!
```

文字コードはutf8

```
mysql> show variables like 'char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

mysql>
```

日本語を含むレコードも作成できた

### 結論
あたりまえだけど，問題発生したときは，変更を加えた箇所が怪しいということ
しかし，こういう仕様の変更って気づかないと結構恐ろしい
FLANNという最近傍探索ライブラリをcgoでGoから使ってみるメモ

[FLANN](http://www.cs.ubc.ca/research/flann/)という最近傍探索ライブラリをcgoでGoから使ってみるメモ。

## 環境

```shell-session
$ go version
go version go1.6 darwin/amd64
```

```shell-session
$ clang -v
Apple LLVM version 7.0.2 (clang-700.1.81)
Target: x86_64-apple-darwin15.0.0
Thread model: posix
```

OSはEl Capitan (10.11.1)

## FLANNの導入

brewを使えば簡単に入る。

```shell-session
brew install homebrew/science/flann
```

## Goから呼び出してみる

cgoはじめてなので手探り。取り敢えずサンプルレベルのものは動いた。

```go
package main

// #cgo pkg-config: flann
// #cgo LDFLAGS: -lflann
// #include <flann/flann.h>
import "C"

import (
	"fmt"
)

func main() {
    dataset := []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
    datasetRows := 5

    var speedup C.float

    var p C.struct_FLANNParameters
    p = C.DEFAULT_FLANN_PARAMETERS
    p.algorithm = C.FLANN_INDEX_HIERARCHICAL
    p.trees = 4;
    p.branching = 32;
    p.leaf_max_size = 100;
    p.centers_init = C.FLANN_CENTERS_KMEANSPP;
    
    index, _ := C.flann_build_index_byte((*C.uchar)(&dataset[0]), (C.int)(datasetRows), 2, &speedup, &p)

    testset := []byte{5, 6}
    testsetRows := 1

    var indeces [1](C.int)
    var dists [1](C.float)

    C.flann_find_nearest_neighbors_index_byte(index, (*C.uchar)(&testset[0]), (C.int)(testsetRows), &indeces[0], &dists[0], 1, &p);

    C.flann_free_index(index, &p)

    fmt.Printf("index: %d dist: %f\n", (int)(indeces[0]), (float32)(dists[0]))
}
```

* FLANN自体はC++で実装されているが公式でCバインディングがあるのでそれを使う
    * GoからC++のライブラリを使うときはCバインディングを介するのがセオリーらしい⇒[cgoでGolangとC++ライブラリをリンクするとき、何が起きているのか](https://beatsync.net/main/log20141022.html)
* pkg-configは`libflann_cpp`しかリンクしてくれないので、追加で`#cgo LDFLAGS: -lflann`を指定してCバインディングもリンクするように

普通にビルドすればOK

```shell-session
$ go build -o flann
$ ./flann
index: 2 dist: 0.000000
```

知見があれば追記する。
bitbucket-syncを使ってサーバ自動化をしてみた

GitlabのWeb hookを使って自動化がうまくいかなくて試しにBitbucketのbitbucket-syncでサーバ更新をしてみました。
リモートリポジトリへプッシュしたタイミングで、個人サーバへ反映するというものになります。

## 作業の流れ

* ローカルでファイルを編集（コミット・プッシュ）
* Bitbucket側リポジトリが更新
* BitbucketのWebhooksでサーバに通知
* サーバで受け取った情報を元にBitbucketから差分データを取得
* サーバ内の公開ディレクトリへコピー・反映

## セットアップ

### 【bitbucket-sync】をダウンロード

以下のURLからbitbucket-syncをダウンロードします。

[https://github.com/alixandru/bitbucket-sync/](https://github.com/alixandru/bitbucket-sync/)

## 設定ファイルを作成

ダウンロードしたら、config.sample.php を config.php にリネームする
config.phpの以下の部分を編集

```
'deployBranch' => 'master',   // ブランチを指定する

/** The ID of an user with read access to project files */
'apiUser' => 'Bitbucketのユーザー名',

/** The password of {apiUser} account */
'apiPassword' => 'Bitbucketのパスワード',

'requireAuthentication' => true,		//trueに変更
'deployAuthKey' => '',
'gatewayAuthKey' => 'ここにKeyを入れる（何でもOK）あとでブラウザで叩く時に必要',

$DEPLOY = array(
    'Bitbucketのリポジトリ名' => 'コピー先のディレクトリを指定',
);

```

## PHPファイル一式を公開ディレクトリにアップロード

フォルダ名をリネーム（bitbucket）して公開ディレクトリにアップロード
私の環境では、以下のディレクトリにアップロードしました。

```
/var/www/ドメイン名/public_html/bitbucket/
```

* 更新したいディレクトリのパーミッションを「777」に変更
* bitbucket-syncの中のcommitsも「777」に設定
（gulpなどで編集ソースと出力HTMLを分けているため、私はドメイン名ディレクトリを変更しました）

## データを取得できるかどうかテストプログラムを実行

Webhooksに設定する前に動作するか確認を行います。

以下のURLをブラウザで実行する

* http://ドメイン/bitbucket/deploy.php?setup=リポジトリ名
* ベーシック認証がある場合は、http://【Basic認証ID】:【Basic認証パスワード】@【ドメイン】/bitbucket/deploy.php?setup=リポジトリ名

成功すると以下のメッセージが表示されます。

```
BitBucket Sync – Full Deploy
============================
Finished deploying リポジトリ名
```

## bitbucketの管理画面でWebhooksの設定

* https://bitbucket.org へログイン
* 自分のリポジトリ
* Settings
* WebhoooksのAdd webhookをクリック
* タイトルは何でもOK
* URL部分は、「http://【Basic認証ID】:【Basic認証パスワード】@【ドメイン】/bitbucket/gateway.php?key=【設定したgatewayAuthKey】」
* Save

![01.jpg](https://qiita-image-store.s3.amazonaws.com/0/34020/5b3a1aa7-be24-c551-a740-06a14454e2ff.jpeg)

![02.jpg](https://qiita-image-store.s3.amazonaws.com/0/34020/fa3a2c6e-f89d-eaa5-4f6d-67ed3c5a8186.jpeg)

![03.jpg](https://qiita-image-store.s3.amazonaws.com/0/34020/478e4e58-1861-7e7d-477e-31457c8a59f5.jpeg)

## Gitでファイルを編集して反映するか確認

```
git add .
git commit -m 'test commit'
git push origin master
```

これで反映すれば動作OKになります。
簡易的なサイトだったりプレビューサイトのコーディングをサーバにアップする時は便利なツールだと思います。
個人的なものは、これで落ち着きたいと思います。

## 参考サイト

* [本番サーバへのFTPアップロードをやめてBitbucketと自動連携する。](http://logic.moo.jp/data/archives/963.html)
* [Bitbucketにプッシュしたらテストサーバー（本番サーバー）に自動でデプロイしたい](http://webpaprika.com/1564.html)
* [Bitbucketからさくらのレンタルサーバ（スタンダードプラン）へ自動デプロイ](http://berry22.com/blog/bitbucket-sakura-auto-deploy/)
* [Bitbucketの自動デプロイのテスト](http://wp.nyumon.club/7447.html)
CodeDeployで環境変数を利用する

# 概要

CodeDeployでソースをデプロイする際は、Hookを利用してリリースした時刻のパッケージディレクトリを作成したいと考えました。Capistranoみたいな感じです。

```
- current
- releases
  - 20160310_0242
    - routes
    - logs
    - config
    - ...
  - 20160309_1432
  - 20160307_1029
  - ...
```

軽くHookスクリプト書いたものの、デプロイ先のインスタンスを増やすと必然的にインスタンスごとのディレクトリ名が変わってしまう問題に気づきました。よくよく考えたら当たり前だけど (Capistranoは実行元の時刻を使ってるっぽい。たぶん)。

CodeDeployはビルドツール (Grunt) に組み込んで利用していたので、CLIの [create-deployment](http://docs.aws.amazon.com/cli/latest/reference/deploy/create-deployment.html) を眺めてみると `--description` というオプションがある。ここに時刻入れたらデプロイ先 (CodeDeploy Agent) で上手いこと値を取れないか試したけど無理だった。
が、[Using CodeDeploy Environment Variables](https://blogs.aws.amazon.com/application-management/post/Tx1PX2XMPLYPULD/Using-CodeDeploy-Environment-Variables) によると、いくつかのデプロイ変数はENVから参照できる様子。試しにHookで `$DEPLOYMENT_ID` としたらID取れました。

```
- current
- releases
  - 20160310_d-Ie6U45KRD
    - routes
    - logs
    - config
    - ...
  - 20160309_d-fjiefjFef
  - 20160310_d-FnFkfefaz
  - ...
```

CLIでは [get-deployment](http://docs.aws.amazon.com/cli/latest/reference/deploy/get-deployment.html) で進捗を取得できるので (定期的にポーリングする自前実装が必要だけど)、`deploymentInfo.status=Succeeded ` が返された後に `deploymentInfo.deplymentId` をGitHubのタグとして自動プッシュするよう設定。
あんまキレイな方法ではないけど、タグとDeploymentIDを連携させることでビルドが追いやすくなったのでまぁ良しとする。