OmniAICreator/Qiita-1.07M huggingface dataset:
正規分布など好きな関数の曲線を描きたい

# Q.
正規分布とか二次曲線とか好きな関数の曲線を描きたいのですが。

# A.
## 基本
`stat_function`を使うのがお手軽です。

```OK_example1.R
library(ggplot2)

p <- ggplot(data=data.frame(X=c(-4,4)), aes(x=X))
p <- p + stat_function(fun=dnorm)
p <- p + stat_function(fun=dnorm, args=list(mean=2, sd=.5))
p <- p + stat_function(fun=function(x) 0.01*x^2-0.1)
```

`ggplot`で描画範囲を指定して、`stat_function`の`fun=`で関数を指定します。関数に引数がある場合は`args=`で`list`を渡します。
![OK1.png](https://qiita-image-store.s3.amazonaws.com/0/12869/b4f1875a-0b44-e13f-afa1-5acc8f75c812.png)

## 例外: 関数ごとに描画範囲が異なる場合
`geom_path`を使います。

```OK_example2.R
library(ggplot2)

p <- ggplot()
p <- p + geom_path(data=data.frame(X=x<-seq(-2,2,len=101), Y=dnorm(x)), aes(x=X,y=Y))
p <- p + geom_path(data=data.frame(X=x<-seq(-3,3,len=101), Y=dnorm(x, mean=2, sd=.5)), aes(x=X,y=Y))
p <- p + geom_path(data=data.frame(X=x<-seq(-4,4,len=101), Y=0.01*x^2-0.1), aes(x=X,y=Y))
```
X軸の値とY軸の値を持つ`data.frame`を作って`geom_path`に渡して線分がつながったものとして描画します。上のコード例では`geom_path`内で`x`に値を代入しつつ`data.frame`にしているおかげで、後ろの`dnorm`でその`x`を使える点に注意です。

![OK2.png](https://qiita-image-store.s3.amazonaws.com/0/12869/c6c74bbf-f459-d0ac-576e-cf53cfacb3ca.png)

## 応用編: パラメータの値を振った関数を重ねて描く
[複数のggplot2要素を関数で渡したい](http://qiita.com/kazutan/items/28dbdee1d70b184b862c)を参考にします。
まずはガンマ分布のshapeパラメータを1,3、rateパラメータを0.5, 1, 2で振って描いた例です。

```OK_example3.R
library(ggplot2)

ab <- expand.grid(a=c(1, 3), b=c(.5, 1, 2))
p <- ggplot(data.frame(X=c(0, 6)), aes(x=X)) +
  mapply(
    function(a, b, co) stat_function(fun=dgamma, args=list(shape=a, rate=b), aes_q(color=co)),
    ab$a, ab$b, sprintf("a=%.0f b=%.1f", ab$a, ab$b)
  )
p <- p + labs(color="parameter")
```

こういう時はmapplyを使うと便利なのでした。`aes`は凡例（legend）をつけるために設定しています。ただし、普通の`aes`ではcoが列名と解釈されてしまうので、`aes_q`を使ってquoteされた文字列を渡せるようにしています。`aes_q`はggplot2の1.x系で新しく実装されたようです。

![OK3.png](https://qiita-image-store.s3.amazonaws.com/0/12869/a7896f88-fcbf-d2e3-7bdd-ac2c74d4cb0e.png)

次にガンマ分布でshapeパラメータは5で固定して、rateパラメータを0.5～10で0.5刻みで変化させたものを描きます。

```OK_example4.R
library(ggplot2)

b <- seq(.5, 10, by=.5)
p <- ggplot(data.frame(X=c(0, 6)), aes(x=X)) +
  mapply(
    function(a, b, co) stat_function(fun=dgamma, args=list(shape=a, rate=b), aes_q(color=co)),
    5, b, b
  )
p <- p + labs(color="b")
```

![OK4.png](https://qiita-image-store.s3.amazonaws.com/0/12869/3405f81f-881c-5bab-3dcc-f74ac9373570.png)

# 参考資料
http://docs.ggplot2.org/current/stat_function.html
http://d.hatena.ne.jp/dichika/20111117/1321491147
http://stackoverflow.com/questions/17649759/fitting-gaussian-to-data-geom-point-in-ggplot2/
http://docs.ggplot2.org/dev/aes_string.html
webstorm, intelliJでwebpackをデバックする方法



WebStorm 11 EAP, IntelliJ IDEA 15 EAP
をインストールするとできた。


```
webpack://
```

っていうスキーマを登録するらしい

>Mapping must be configured and WebStorm 11 supports "webpack://" scheme, so, you can use "Set Local Path" action to configure it: 
>1) Run debug.
>2) Open Scripts tab.
>3) Select node (webpack:// -> . for example) and invoke action "Set Local Path" via context menu. To ensure that mapping is correct, >try to naivigate to source using action "Open Source".
>
>Or you can edit JavaScript Debug run configuration — see "Remote URLs of local files (optional)".
>
>Please note — it is universal solution. Webpack will be supported soon as first-class to avoid any such configuration.


https://youtrack.jetbrains.com/issue/WEB-14000


結果、こんな風になる

![貼り付けた画像_2015_07_31_18_21.png](https://qiita-image-store.s3.amazonaws.com/0/41550/7303e058-67c3-29dc-92a8-d3cefa139521.png "貼り付けた画像_2015_07_31_18_21.png")
MapKitで現在地にフォーカスを合わせる＋ユーザの位置に追従させる

最初は `CoreLocation` でユーザの現在地を取得して、MapViewにセットしていたのですが、`MapKit` だけでも実装できたのでメモ。

## 準備

MapView の `User Location` にチェックを入れておきましょう。

![image](https://qiita-image-store.s3.amazonaws.com/0/8292/20073156-072a-281e-3fbb-3120ca7e7188.png)

## 現在地にフォーカスを合わせる

MapView自体がユーザの現在地を保持しているので、そちらをそのまま地図の中心点としてセットします。

```swift
mapView.setCenterCoordinate(mapView.userLocation.coordinate, animated: true)
```

これで地図の中心がユーザの現在地に移動します。アニメーションがいらない場合は `animated` を 'false' にしてください。

## ユーザの位置に追従させる

`userTrackingMode` プロパティに `.follow` をセットすることで、ユーザの移動に合わせて地図の中心点を追従してくれます。

```
mapView.userTrackingMode = .follow
```

また、`.followWithHeading` をセットすることで、ユーザが向いている方向も表示してくれます。

![image](https://qiita-image-store.s3.amazonaws.com/0/8292/eaab8966-6988-a25d-a6fe-748ace80e8ea.png)
条件後入れでウィンドウハンドルを取得できる「WindowExplorerクラス」をつくった

# 作成動機

- ある条件を満たすウィンドウのハンドル（HWND）を取得したい
- `FindWindow`でいいじゃん！
- ターゲットとなるWindowが複数個あったらダメ
- `EnumWindow`があるじゃん！
- コールバック`EnumWindowsProc`が融通きかない！条件かわると使いまわせない！
- じゃあ内部で`EnumWindow`しつつ、検索条件を`std::<function>`で受け取るクラス作るわ

という経緯です。


# 使いかた

```cpp:タイトルが”hello”をさがす
const auto title_is_hello = [](HWND hwnd) -> bool {
	TCHAR buffer[MAX_PATH] = {0};
	::GetWindowText( hwnd,buffer,MAX_PATH );
	return _tcscmp(_T("hello"), buffer) == 0;
};

const HWND hwnd = WindowExplorer::Search(title_is_hello);

```


```cpp:クラス名が”hoge”で子ウィンドウのクラス名が”fuga”
const auto class_is_hoge = [](HWND hwnd) -> bool {
		TCHAR buffer[MAX_PATH] = {0};
		::GetClassName( hwnd,buffer,MAX_PATH );
		return _tcscmp(_T("hoge"), buffer) == 0;
};

const auto class_is_fuga = [](HWND hwnd) -> HWND {
	return ::FindWindowEx(hwnd, nullptr, _T("fuga"), nullptr);
};
const HWND hwnd = WindowExplorer::Search(class_is_hoge, class_is_fuga);
```

# 実装コード

```cpp
#include <functional>
typedef std::function<bool(HWND)> IsMatchedWindow;
typedef std::function<HWND(HWND)> GetMatchedWindow;

class WindowExplorer
{
public:
	static HWND Search(IsMatchedWindow _condition, GetMatchedWindow _getter = nullptr)
	{
		WindowCondition Condition(_condition, _getter);
		::EnumWindows( EnumWindowsProc,  (LPARAM)&Condition );
		return Condition.GetHandle();
	}

private:

	class WindowCondition
	{
	private:
		HWND hFoundWnd;
		IsMatchedWindow IsMatchedWindow_;
		GetMatchedWindow GetMatchedWindow_;

	public:
		WindowCondition(IsMatchedWindow cond, GetMatchedWindow getter=nullptr)
			: IsMatchedWindow_(cond)
			, GetMatchedWindow_(getter)
			, hFoundWnd(nullptr)
		{}

		inline HWND GetHandle()const { return hFoundWnd; }
		bool found(HWND hwnd)
		{
			if ( IsMatchedWindow_(hwnd))
			{
				hFoundWnd = ( GetMatchedWindow_ )? GetMatchedWindow_(hwnd) : hwnd;
				return hFoundWnd != nullptr;
			}
			return false;
		}
	};

	static BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam )
	{
		WindowCondition* condition = reinterpret_cast<WindowCondition*>(lParam);

		if ( !condition )
			return FALSE;

		if ( condition->found(hwnd) )
			return FALSE;

		return TRUE;
	}
};

```

C++11の、ラムダ式と`std::function`のおかげで、関数オブジェクトをカジュアルに使えるようになりましたね。
ipから都市情報を取得する

https://github.com/fiorix/freegeoip

が良さそうです。

## install

```
$ brew install go
$ go get github.com/fiorix/freegeoip
$ go get github.com/fiorix/freegeoip/cmd/freegeoip
```

※golangのその他の設定はしておいてね

## Usage

サーバーを起動

```
$ freegeoip
```

叩いてみる

```bash
$ curl  http://localhost:8080/json/hatena.com | jq .
{
  "ip": "59.106.194.50",
  "country_code": "JP",
  "country_name": "Japan",
  "region_code": "27",
  "region_name": "Ōsaka",
  "city": "Osaka",
  "zip_code": "540-0008",
  "time_zone": "Asia/Tokyo",
  "latitude": 34.6864,
  "longitude": 135.52,
  "metro_code": 0
}

$ curl  http://localhost:8080/json/qiita.com | jq .
{
  "ip": "54.248.79.191",
  "country_code": "JP",
  "country_name": "Japan",
  "region_code": "13",
  "region_name": "Tōkyō",
  "city": "Tokyo",
  "zip_code": "100-0001",
  "time_zone": "Asia/Tokyo"
  "latitude": 35.685,
  "longitude": 139.7514,
  "metro_code": 0
}

※ jq入ってないならbrew install jq
```

都市レベルでわかります！すごい！便利！
AWS CloudFormation 再訪

* [What is AWS CloudFormation? - AWS CloudFormation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)
    * [AWS CloudFormation Concepts - AWS CloudFormation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-whatis-concepts.html)
        * 重要な概念は template と stack
    * [How Does AWS CloudFormation Work? - AWS CloudFormation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-whatis-howdoesitwork.html)
        * CreateStack と UpdateStack の処理フロー
* [Getting Started with AWS CloudFormation - AWS CloudFormation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/GettingStarted.html)
    * [Signing Up for an AWS Account - AWS CloudFormation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-sign-up-for-aws.html "Signing Up for an AWS Account - AWS CloudFormation")
    * [Get Started - AWS CloudFormation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/GettingStarted.Walkthrough.html)
        * [サンプルテンプレート(EC2+RDS で WordPress 構築)](https://s3.amazonaws.com/cloudformation-templates-us-east-1/WordPress_Single_Instance_With_RDS.template)
windowsディスクイメージ書き込みツールをコマンドラインから実行させる方法

コマンドプロンプトを起動して、下記のコマンドを実行

```
cd \windows\system32
isoburn.exe /Q:ドライブ名 ISOイメージのパス
```

ISOを右クリックして、ディスクイメージの書き込みメニューが出ないときに便利です。
Android OS バージョン別推移（2014年1月〜2015年6月）


前回（↓）から半年過ぎたので情報を追加してみました。
http://qiita.com/hmukaida/items/94b97d5d3d0924b3dcca

* 参考
    * http://juggly.cn/archives/tag/android%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E5%88%A5%E3%82%B7%E3%82%A7%E3%82%A2
    * https://developer.android.com/about/dashboards/index.html 

* 注意
    * 日本のシェアではなく、Google が発表している世界的なシェアとなります。 

# Android OS バージョン別推移（2014年1月〜2015年6月）
## 推移：表

2014年10月のデータは見つからなかったので、削除しています。
また、合算になっている箇所もありますがご了承ください。

![スクリーンショット 2015-07-31 17.45.52.png](https://qiita-image-store.s3.amazonaws.com/0/39380/989d1481-48f0-0ed3-6d17-37aadb383bc4.png "スクリーンショット 2015-07-31 17.45.52.png")


## 推移：グラフ（折れ線）

折れ線グラフでシェアを表記しています。
ここでは、コードネーム毎に表現しました。

* KitKat への移行が収束しはじめ、徐々に Lollipop へ移行が始まりました。

![スクリーンショット 2015-07-31 17.46.10.png](https://qiita-image-store.s3.amazonaws.com/0/39380/02fef386-bac6-d011-89d0-49bb3f774d84.png "スクリーンショット 2015-07-31 17.46.10.png")

# Android OS バージョン4.1以上のシェア

今回は、バージョン4.1以上の下記シェアについて確認してみました。

* Jelly Beans
* KitKat
* Lollipop

## 推移：グラフ（折れ線）
![スクリーンショット 2015-07-31 17.46.20.png](https://qiita-image-store.s3.amazonaws.com/0/39380/d8efb34b-6ec2-8b86-c646-3b46231b82df.png "スクリーンショット 2015-07-31 17.46.20.png")

## まとめ

現在開発しているアプリケーションのターゲットOSの参考になれば幸いです。
自分もアプリ開発しておりますが、こうやって推移を確認することで、ターゲットOSやバージョンを予測・設定しています。
次回はまた半年後あたりにでも更新しようと思います。
【WordPress】固定ページ・カスタム投稿タイプ検索結果除外

めも
後ほどくわしくマークダウン

```php:function.php
/* 検索フィルター */
function SearchFilter($query) {
if ($query->is_search) {
$query->set('post_type', 'post');
}
return $query;
}
add_filter('pre_get_posts','SearchFilter');
```
Mozcの情報まとめ的な

#はじめに
Emacsの日本語入力にMozcを用いる方法がある。筆者はSKKからの乗り換え組である。ブログに書くまでもないので備忘録的にまとめる。
今後、詳しい仕様についてまとめる機会があるかもしれない。

#インストール&設定
以下のリンクを参考に。検索すればもっと出てくるだろう。

 - Macユーザならば
     - [Mozcをモードレス化する「ac-mozc.el」をMacで動かす](http://hiroki.jp/ac-mozc-on-mac) ただしac-mozcまでは必要ない。
     - [MacのEmacsでmozc.elを使う (Mozcのビルド)](http://igjit.blogspot.jp/2014/04/mac-emacs-mozc.html)
     - [Yosemite で Mozc をビルド。当然 Emacs から使う](http://qiita.com/scalper/items/a1ab77ae7b2b06fb3f49) 筆者はこの手順でインストールした。
 - Ubuntuユーザならば　→　[EmacsでMozcを使うための設定](http://ubiqlog.com/archives/8538)
 - Windowsユーザならば　→　[emacs-mozc を動かすための設定（emacs 設定編）](http://www49.atwiki.jp/ntemacs/pages/48.html)

# 関連パッケージ
## mozc-popup
デフォルトでは変換候補をoverlayで表示させる方法とミニバッファで表示させる方法を選択可能である。
一方、popupパッケージを援用して変換候補を表示させる方法もあり、それがmozc-popupである。MELPAからインストール可能。
https://github.com/d5884/mozc-popup
以下を設定ファイルに追記する。

```el:
(require 'mozc-popup)
(setq mozc-candidate-style 'popup) ; select popup style.
```

## mozc-el-extensions
以下のURLから。
https://github.com/iRi-E/mozc-el-extensions

提供されるのは３種類：

- mozc-isearch　→　isearch中でもmozcが利用可能
- mozc-mode-line-indicator　→　mozcの現在の入力モードをモードラインに反映
- mozc-cursor-color　→　mozcの入力モードに応じたカーソル色を設定可能
Tempura：機械学習をJavascriptでやってみる 

私が所属している研究室の先輩方が去年作成したJavascriptの機械学習ライブラリTempura
 (https://github.com/mil-tokyo/tempura) を試してみる。
私もGMM周りで少しだけコミットしていますが、全体的に把握できているわけではない。
主に線形識別器やクラスタリング用の手法が用意されており。デモとドキュメントが英語でしっかり書かれているので，解読しながら少し遊んでみる。

## インストール
まずはインストール
サブモジュールとしてJavaScriptの行列演算ライブラリSushiが使われているため，追加する。

```shell
cd your-workspace
git clone git@github.com:mil-tokyo/tempura.git
cd tempura
git submodule init
git submodule update
python compile.py
```

## デモ
![スクリーンショット 2015-07-31 16.18.20.png](https://qiita-image-store.s3.amazonaws.com/0/63865/1f74d715-2a60-0b08-fa22-7fd5957fd427.png "スクリーンショット 2015-07-31 16.18.20.png")

tempura/demo/index.html （もしくは http://mil-tokyo.github.io/tempura/demo/index.html ） 
をブラウザで開くとデモを見ることができる。
ここで行われているデモは

・パーセプトロン
・SGD-SVM
・Nearest-Neighbor
・GMM

の四種類である。これらに引き渡すパラメータをブラウザ上で編集して試すことができ，またそのデモにおいて用いられているソースコードを確認することができる。


## 使い方
compile.pyを実行した時に生成される
tempura/bin/tempura.js
を読み込むだけで様々な識別器を使えるようなので試してみた。
サンプルデータを用意しパーセプトロンを使って学習，識別を行うコードが下記である。

```js
// トレーニング用の行列と答を用意する
var train = Sushi.Matrix.fromArray([[0,4],[1,4],[-2,1],[-1,2]]);
var labels = Sushi.Matrix.fromArray([[1,1,-1,-1]]);

// 識別器（パーセプトロン）を初期化する
var perceptron = new Tempura.LinearModel.Perceptron({center:true});

// 識別器の学習を行う
perceptron.fit(train, labels.t());

// 学習した識別器の重みを表示する
perceptron.weight.print();

// テストデータを用意する
var sample = Sushi.Matrix.fromArray([[0,3],[-3,2]]);

// テストデータを識別し，推定クラスを表示する
var pred = perceptron.predict(sample);
pred.print();
```

二次元のトレーニングデータを用意し，パーセプトロンで識別，他のデータを識別した結果を表示するというコードである。書き方も簡単で実に直感的だ。


パーセプトロンの主な使い方や，他の手法に関するドキュメントは (http://mil-tokyo.github.io/tempura/docs/index.html) に掲載されている。


##おまけ
javascriptでかかれても実行の仕方わかんないよ，という人向けにhtmlで用意してみたので，tempura直下に置いて試してみてね。

```index.html
<!DOCTYPE html>
<html>
	<head>
		<title>test</title>
		<meta charset="UTF-8">
		<script src="./sushi/src/sushi.js"></script>
		<script src="./bin/tempura.js"></script>
	</head>
	<body>
		<h1>Test</h1>
		<script>
			// トレーニング用の行列と答を用意する
			var train = Sushi.Matrix.fromArray([[0,4],[1,4],[-2,1],[-1,2]]);
			var labels = Sushi.Matrix.fromArray([[1,1,-1,-1]]);

			// 識別器（パーセプトロン）を初期化する
			var perceptron = new Tempura.LinearModel.Perceptron({center:true});

			// 識別器の学習を行う
			perceptron.fit(train, labels.t());

			// 学習した識別器の重みを表示する
			perceptron.weight.print();

			// テストデータを用意する
			var sample = Sushi.Matrix.fromArray([[0,3],[-3,2]]);

			// テストデータを識別し，推定クラスを表示する
			var pred = perceptron.predict(sample);
			pred.print();
		</script>
	</body>
</html>
```

## リンク
作成したJava Scriptライブラリ一覧
Sushi（行列）: https://github.com/mil-tokyo/sushi
Tempura（機械学習）: https://github.com/mil-tokyo/tempura
Sukiyaki（ディープラーニング）: https://github.com/mil-tokyo/sukiyaki

Windows 10 Enterpriseでライセンス認証で「エラー コード: 0x8007232B」が出た場合の解決方法



Windows 10 Enterpriseでライセンス認証
「エラー コード: 0x8007232B」
が出た場合、

※「プロダクトキーを変更する」ボタンをクリックしても反応しない

１．コマンドプロンプトを管理者権限で実行
２．コマンドプロンプトで、以下のコマンドで正しいプロダクトキーを入力して実行する

```
slmgr -ipk xxxx-xxxx-xxxx-xxxx-xxxx
```

新しいプロダクトキーに変更され、ライセンス認証が完了した

## 参考にしたサイト

http://mem-server.seesaa.net/article/408834211.html
[Java][JTA][JSR-907] JTA 1.2 Transactionalアノテーションについて（JSR-907拾い読み）

CDI管理ビーンに付けるだけでトランザクション処理してくれる``@Transactional``アノテーションについてです。

JSR-907のドキュメントから拾い読みしてみました。

# ``@Transactional``って何よ？

CDIのインターセプターです。CDIのインターセプターはAOP的なことをしてくれるやつです。

メソッドにつけると、そのメソッドの呼び出しに介入し、呼び出し前後にチョメチョメしたりなんだりできます。

# ``@Transactional``のオプション

``@Transactional``アノテーションで指定できるオプションについてです。

オプションは2つあります。

- トランザクション内外で呼ばれた時の振る舞いを指定
- 例外発生時の振る舞いを指定


## トランザクション内外で呼ばれたときの振る舞い

トランザクション内外で、CDI管理ビーンのメソッドが呼ばれたときの振る舞いを設定できます。

| ``TxType`` | トランザクション外から | 既存トランザクション内から|備考|
|:-----------|:------------|:------------|:---|
|``TxType.REQUIRED``|新しいトランザクションを開始|既存トランザクション内で実行|既定値|
|``TxType.REQUIRED_NEW``|新しいトランザクションを開始|既存トランザクションを一旦停止して新しいトランザクション内で実行||
|``TxType.MANDATORY``|``TransactionRequiredException``をネストした``TransactionalException``をスロー|既存トランザクション内で実行||
|``TxType.SUPPORTS``|そのままトランザクション外で実行|既存トランザクション内で実行||
|``TxType.NOT_SUPPORTED``|そのままトランザクション外で実行|既存トランザクションを一旦停止して、トランザクション外で実行||
|``TxType.NEVER``|そのままトランザクション外で実行|``InvalidTRansactionException``をネストした``TransactionalException``をスロー||


## 例外発生時の振る舞い

既定では、チェック例外発生時にはロールバックしません。``RuntimeException``を継承した例外ではロールバックします。

### ``rollbackOn``

ロールバックしたい例外を指定します。

以下の例は、あらゆるアプリケーション例外発生時にトランザクションをロールバックするようにマークします。

```java:
@Transactional(rollbackOn={Exception.class})
```

### ``dontRollbackOn``

ロールバックさせたくない例外を指定します。``rollbackOn``と``dontRollbackOn``両方を指定したときは、``dontRollbackOn``が優先します。

以下の例は、``IllegalStateException``やこれを継承した例外発生時に、トランザクションをロールバックするマークを付けないようにします。

```java:
@Transactional(dontRollbackOn={IllegalStateException.class})
```
AWS クラウド デザイン パターンの全体像とカテゴリを考えてみた (超ドラフト版)



序
====================

とりあえずの殴り書きですが、自分なりに、アーキテクチャ設計の流れを意識した「AWS クラウド デザイン パターン カテゴリ」を考えはじめました。

JAWS-UG アーキテクチャ専門支部で議論してみたいと考えています。

キーになるのは、運用6品質(仮称: サービス3品質 + デリバリ3品質)とセキュリティの3要素(CIA)で、これらをステップ順に検討し、適切なクラウドデザインパターンを組み合えあわせていくこと、だと捉えています。

運用6品質(仮称)
-----------------

ISO9126(ソフトウェア品質の評価に関する国際基準 https://ja.wikipedia.org/wiki/ISO_9126 )で提示されている「ソフトウェアの6品質」を、運用視点から捉えなおした品質基準です。

業務向けソフトウェアはそもそも「業務そのもの」をコンピュータ基盤上に抽象化したものである(はず)ことから、これら6品質を「業務そのものに求められる品質」として運用現場視点から再構成したものです。

### 外部品質(nearly サービス品質)

- 機能性
- 信頼性
- 使用性

### 内部品質(nearly デリバリ品質)

- 効率性
- 保守性
- 移植性

## セキュリティの3要素

- 機密性
- 完全性
- 可用性

フェーズ0: プロトタイプフェイズ
===============================

信頼性以外のサービス品質を確保するフェイズ。

注釈: ここでリリースしたら運用品質ボロボロという意図も込めて「フェーズ0」 。


Step1: 機能性&使用性デザインパターン (サービス3品質 前半)
---------------------------------------------------------

* 機能要件を満たすのか?
* ユーザが使いやすい理想的な構成か?

1. 全体機能デザインパターン

2. 部分機能デザインパターン

   * デリバリ構成

     * Public側の接点 (S3 / CloudFront / Route53 / VPC+IGW / API Gateway)

     * Private側の接点 (VPC peering / VGW / DirectConnect / StorageGateway)

   * 処理構成

     * 処理リソースデザインパターン         (Private側: インスタンス、 バッチ)

       * ElasticBeanstalk

       * Lambda

       * ECS

       * EC2

       * EMR

       * SQS

       * SNS

       * SWF

       * DataPipeline

     * データストアリソースデザインパターン (Private側: DB、NoSQL、デ ータオブジェクト)

       * S3

       * RDS

       * DynamoDB

       * ElastiCache

       * CloudSearch

       * Redshift

       * Kinesis

   * データストア構成

       * S3 + Glacier

       * EBS

       * その他


フェーズ1: 実装フェイズ (セキュリティ)
======================================

セキュリティ品質を確保するフェイズ。


Step1-1: 機密性デザインパターン (セキュリティ3要素 その1)
---------------------------------------------------------

適切なアクセス権限を実現できるか? (いつ、誰が、何にアクセスできるか)

* IAM / STS / Cognito

  * 常時付与/一時付与/範囲無制限/範囲限定/フェデレーション/ADなど認証 デザインパターン

* Bucket/Topic/Queue Policy (用途別デザインパターン)

* Security Group (サービス別デザインパターン)


Step1-2: 完全性デザインパターン (セキュリティ3要素 その2)
---------------------------------------------------------

証跡の確保

* ログ取得/保存デザインパターン (CloudTrail / CloudWatchLogs)

* 変更管理デザインパターン (Config)


Step1-3: 可用性デザインパターン (セキュリティ3要素 その3)
---------------------------------------------------------

どのように可用性を担保し、どのように復旧させるか?

* 冗長化デザインパターン (EBS / ELB / AutoScaling)

* 想定SLA100%デザインパターン (S3 / Route53)


フェーズ2: プレリリースフェイズ (デリバリ品質確保)
==============================================

運用品質を確保するフェイズ。


Step2-1(参考): 信頼性デザインパターン (サービス3品質 後半)
----------------------------------------------------------

可用性を実現するために必要な個別要素をアプリケーションで補完する。

* ある状況がある時間続いたときにソフトウェアがどの程度機能するか


Step2-2(参考): 保守性/移植性デザインパターン (デリバリ3品質 前半)
-------------------------------------------------------------

デプロイ、リリースマネジメントのためのデザインパターン

* ElasticBeanstalk

* CloudFormation

* OpsWorks


Step2-3(参考): 効率性デザインパターン (デリバリ3品質 後半)
------------------------------------------------------

パフォーマン監視、効率性評価のためのデザインパターン

* CloudWatch


フェーズ3: リリースフェイズ (実運用へ)
======================================

運用品質もデザインパターンによってある程度担保できるので、楽な運用が実現できる(はず)


今後
=======

順次ブラッシュアップして、実用に耐えるものにしていきたいですね。
PINGコマンドの結果出力。行頭に日時を入れる

pingコマンドの頭に実施してる時の日時を出力して表示させるワンライナー。
ping実施後のステータスコードを確認して文字列出力という感じですね。
ここまでくるとワンライナーだと見づらいのでコマンド化したほうがいいかも。

以前google検索で探したらどなたかのブログが出てきたのですが、コマンドは残ってるけどurlがわからないのでここでメモ。
パクリです。すみません。。。

8.8.8.8に1s間隔でping

```
 host="8.8.8.8" ; while true; do rslt=`ping -w 1 -c 1 $host | grep 'bytes from '`; if [ $? -gt 0 ]; then echo -e "`date +'%Y-%m-%d %H:%M:%S'` $host Request timed out."; else echo "`date +'%Y-%m-%d %H:%M:%S'` $host`echo $rslt | cut -d  ':' -f 2`"; sleep 1; fi; done;
```

成功出力は以下。

```
2015-07-31 07:50:31 8.8.8.8 icmp_seq=1 ttl=57 time=2.23 ms
2015-07-31 07:50:32 8.8.8.8 icmp_seq=1 ttl=57 time=2.29 ms
2015-07-31 07:50:33 8.8.8.8 icmp_seq=1 ttl=57 time=2.46 ms
2015-07-31 07:50:34 8.8.8.8 icmp_seq=1 ttl=57 time=2.48 ms
2015-07-31 07:50:35 8.8.8.8 icmp_seq=1 ttl=57 time=2.40 ms
2015-07-31 07:50:36 8.8.8.8 icmp_seq=1 ttl=57 time=2.35 ms
2015-07-31 07:50:37 8.8.8.8 icmp_seq=1 ttl=57 time=2.32 ms
2015-07-31 07:50:38 8.8.8.8 icmp_seq=1 ttl=57 time=2.27 ms
2015-07-31 07:50:39 8.8.8.8 icmp_seq=1 ttl=57 time=2.32 ms
```

失敗するとこうなる

```
2015-07-31 07:54:51 2.8.8.8 Request timed out.
2015-07-31 07:54:52 2.8.8.8 Request timed out.
2015-07-31 07:54:53 2.8.8.8 Request timed out.
```


障害テスト実施の時に、日時もわかるといいなということで。
ログに出すもよし、結果の記録の時にも時間の整合性が取れていいのかなと。
FinderからカレントディレクトリでTerminalやiTermを立ち上げる

###Terminal(iTerm)からカレントディレクトリのFinderを開くときは

```
$ open .
```

###FinderからTerminal(iTerm)を開くときは

cdto.appを使うと便利

https://github.com/jbtule/cdto
からダウンロード。

TerminalかiTermの好きな方のcdto.appをツールバーにドラッグ&ドロップ
![](http://cdn-ak.f.st-hatena.com/images/fotolife/k/kjktk/20140813/20140813145211.png)
  
このアイコンが追加されるのでこれをクリックすると、Terminal(iTerm)がFinderで開いているフォルダをカレントディレクトリとして起動してくれる。
EdisonでGPSを使う


Edison UARTに接続したGPSをpythonを使って読み出すテスト。

# 前提
## インストールするモジュール

* [mraa](https://github.com/intel-iot-devkit/mraa/)
* [pynmea2](https://github.com/Knio/pynmea2/)
* [pyserial](http://pyserial.sourceforge.net/)

## ハードウェア

* [Intel Edison](http://www.intel.co.jp/content/www/jp/ja/do-it-yourself/edison.html)
* [LOCOSYS LS2003E](http://www.locosystech.com/product.php/product.php?zln=jp&id=111) UART0に接続
  * ボーレート 9600bps


# 試してみる

UARTとの接続はmraaで行い、取得した値はpynmea2で処理する。

```python
import mraa
import serial
import pynmea2

# UARTポートの指定
uart = mraa.Uart(0)

# Serialオブジェクトの生成。ボーレートは9600bps
ser = serial.Serial(uart.getDevicePath(), 9600)

while 1:
	# 行単位でパースする
    msg = pynmea2.parse(ser.readline())
    
    # センテンスがGGAのものを処理
    if msg.sentence_type == 'GGA':  # Global Positioning System Fix Data
        print {
            'gps.number_of_satellites': msg.num_sats,
            'gps.latitude': msg.latitude,
            'gps.longitude': msg.longitude,
            'gps.altitude': msg.altitude,
        }
```

こんなのが取れる。

```python
{
    'gps.altitude': -12.8,
    'gps.longitude': 139.77447469,
    'gps.number_of_satellites': '11',
    'gps.latitude': 35.700290937
}
```

# 感想

回路が繋がってさえいれば、python + mraa + pynmea2ですごく簡単に処理できる。
NMEAに定義されているsentenceはいくつかあるので、正しく使うにはNMEAの理解が必要そう。

# 参考

* [NMEA](http://www.gpsinformation.org/dale/nmea.htm)
アプリの再インストールを検出する

Keychain はアプリをアンインストールしても消えませんが、NSUserDefaults は消えます。
この違いを利用してアプリの再インストール（アプリを消す => 再度インストール）を検出することができます。

具体的にはアプリ起動時に Keychain, NSUserDefaults にそれぞれ YES を書き込むことにします。
そして、YES を書き込む前に BOOL 値を取得するようにします。この値は下記の表のように定まります。

|状況                                    |Keychain|NSUserDefaults|
|-------------------------------------|---------------|-------------------|
|インストールして起動した|NO              |NO                 |
|インストールして二回目起動した|YES              |YES                 |
|再インストールして起動した|**YES**              |**NO**                 |
|再インストールして二回目起動した|YES              |YES                 |
|再々インストールして起動した|**YES**         |**NO**|
|再々インストールして二回目起動した|YES              |YES                 |
|アプデなどで、このアルゴリズムを新規導入して初めて起動|NO     |NO                  |

この表より、Keychain からは YES, NSUserDefaults からは NO が取得できればアプリが再インストールされたといえます。

お手軽 Keychain ライブラリであるところの `LUKeychainAccess` を使えば次のようなコードで再インストールが検出できます。

```objc
NSString *kFLMIsReInstallKey = @"FLMIsReInstall";

- (BOOL)isReInstall {
    BOOL isReInstall = NO;
    BOOL isSetInKeychain = [[[LUKeychainAccess standardKeychainAccess] objectForKey:isReInstallKey] boolValue];
    BOOL isSetInUserDefaults = [[NSUserDefaults standardUserDefaults] boolForKey:isReInstallKey];
    if (isSetInKeychain == YES && isSetInUserDefaults == NO) {
        isReInstall = YES;
    } 

    [[LUKeychainAccess standardKeychainAccess] setObject:@YES forKey:isReInstallKey];
    [[NSUserDefaults standardUserDefaults] setBool:YES forKey:isReInstallKey];
}
```

注意点として、このコード片は呼ぶたびに値が変わってしまいます。（再インストール後に呼ぶと YES ですが、さらにもう一度呼ぶと NO になります）
まあどこかしらに値をキャッシュさせておけば OK です。
Bluemix 超初心者

最近ちまたで耳にするBluemix、ちょっと気になったので、[Bluemix 30日間フリートライアル](https://www.ibm.com/developerworks/community/wikis/home?lang=ja#!/wiki/W044bb4f15419_49d8_bf9e_55d2d43ad744/page/Bluemix%20%E3%83%95%E3%83%AA%E3%83%BC%E3%83%88%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%AB%20%E3%82%B5%E3%82%A4%E3%83%B3%E3%82%A2%E3%83%83%E3%83%97%E6%89%8B%E9%A0%86) をダウンロードしてみました。

丁度、[Bluemix Challenge 2015](http://ibm.biz/BMcontest) アプリ開発コンテスト募集中で、コンテストに参加登録したら、何とフリー期間を60日追加延長してくれました。「一般部門」は締め切っちゃったけど、「学生部門」は8月20日まで応募できます。

Bluemix にはWatson 関連のサービスがたくさんありまして、[IBM Watson Developer Cloud](http://www.ibm.com/smarterplanet/us/en/ibmwatson/developercloud/services-catalog.html) をみてたら面白そうなのをみつけました。

日本語にも対応しているWatsonのサービスで [Speech to Text](https://console.ng.bluemix.net/catalog/speech-to-text/) は結構楽しめます。

日本語でマイクに向かって「あいうえお」と話しかけると、聞こえたままにテキストに変換してくれます。[Quick Demo](https://speech-to-text-demo.mybluemix.net/) で試してみると、結構楽しめます。
<aura:renderIf />を使うときの注意点

\<aura:renderIf />について、すこしつまづきましたので備忘録として記載します

LightningComponentで、\<aura:renderIf />を使用してコンポーネントの表示制御をした場合に、表示、非表示を繰り返すと
「rerender threw an error in 'markup://aura:expression' : Cannot read property 'childNodes' of null」というエラーが発生します

これは、Lightningフレームワークのバグとの事で、コンポーネントを<span>で囲むと解決できました

↓SalesforceのQAに書かれていました
http://salesforce.stackexchange.com/questions/71604/lightning-bug-in-lightning-framework-when-using-aurarenderif
CentOSにWordPressのインストール

PHPとMySQLはインストール済み。
  
##データベースの作成
WordPress用のデータベースとユーザを作成します。

```
mysql> create database データベース名;
mysql> grant all privileges on データベース名.* to ユーザー名@localhost identified by 'パスワード';
mysql> flush privileges;
```
##WordPressのダウンロード
WordPressの最新版をダウンロードして解凍します。

```
# cd /var/www/html
# curl -LO http://ja.wordpress.org/latest-ja.tar.gz
# tar xvzf latest-ja.tar.gz
```
##設定ファイルを作成
wp-config-sample.phpがひな形として用意されています。これをもとにwp-config.phpを作成します。

```
# cd wordpress
# cp wp-config-sample.php wp-config.php
# vi wp-config.php
```
  
設定したデータベース名、ユーザー名、パスワードに書き換えます。

```:wp-config.php
/** WordPress のためのデータベース名 */
define('DB_NAME', 'database_name_here');

/** MySQL データベースのユーザー名 */
define('DB_USER', 'username_here');

/** MySQL データベースのパスワード */
define('DB_PASSWORD', 'password_here');
```

セキュリティのためのキーを入力します。
https://api.wordpress.org/secret-key/1.1/salt/
にアクセスしてキーを取得できるので以下の部分を書き換えます。

```:wp-config.php
define('AUTH_KEY',         'put your unique phrase here');
define('SECURE_AUTH_KEY',  'put your unique phrase here');
define('LOGGED_IN_KEY',    'put your unique phrase here');
define('NONCE_KEY',        'put your unique phrase here');
define('AUTH_SALT',        'put your unique phrase here');
define('SECURE_AUTH_SALT', 'put your unique phrase here');
define('LOGGED_IN_SALT',   'put your unique phrase here');
define('NONCE_SALT',       'put your unique phrase here');
```
設定ファイルwp-config.phpは以上で設定完了です。

##WordPressのインストール
ブラウザでWordPressを配置したアドレスにアクセスします。
初回は設定画面が現れるので入力していくとインストールは完了します。

##パーマリンク設定
パーマリンクをカスタマイズするときはhttpd.confを設定します。

```
vi /etc/httpd/conf/httpd.conf
```

httpd.confファイルの末尾に以下を追加します。

```:httpd.conf
<Directory /var/www/html/wordpress>
    AllowOverride All
</Directory>
```
パーマリンク設定をしていないとURLが自動的に書き換えられずページが表示されないことがあります。
オープンデータのレベル

ティム・バーナーズ＝リーが提唱したオープンデータの５つのレベルのメモ。  
[5つ星オープンデータ](http://5stardata.info/ja/)

<table><tbody>
<tr><td>★</td><td>オープンなライセンスで公開</td></tr>
<tr><td>★★</td><td>データとして扱いやすい形式（Excelとか）</td></tr>
<tr><td>★★★</td><td>オープンな形式にする（CSV、XMLなど）</td></tr>
<tr><td>★★★★</td><td>URIで表現（RDF形式にする）</td></tr>
<tr><td>★★★★★</td><td>他のデータとつながるようにする（Linked Open Data）</td></tr></tbody>
</table>

##★ オープンなライセンス
オープンなライセンスで公開することによって星が１つ付きます。
これによりそのデータはオープンデータと呼ぶことができます。
オープンなライセンスというのは誰でも自由に使えて、再利用、再配布できるライセンスです。パブリックドメインや表示、改変禁止があたります。
##★★ データとして扱いやすい形式
せっかくのオープンデータでも画像になっていたら扱いにくいです。
表のスキャン画像よりもエクセルで表にまとめると扱いやすくなります。
##★★★ オープンな形式
エクセルで作った表はエクセルでしか開けません。
オープンな形式、例えばCSVやXMLにすることでだれでもデータを扱えるようになります。
多くの政府や自治体がこの形式でオープンデータを公開しています。
##★★★★ RDF
さらにデータを扱いやすくするためにオープンデータの標準形式であるRDFにします。
これによりデータ同士をリンクさせることが可能になります。

##★★★★★ Linked Open Data
最後に、他のデータとつながるLinkedOpenDataにすることによってそのデータは最高の５つ星となります。
個人的によく使うテンプレートタグメモ(初心者向け)

よくググるやつのワープレ個人メモです

## トップページのURLを出力したい。 
```php:hoge
<?php echo home_url(); ?>
<?php echo home_url("/"); ?> // 最後にスラッシュを入れたい場合
```

## テーマディレクトリのパスを出力したい
```php:hoge
<?php echo get_template_directory_uri(); ?>

//  使用例
 <img src="<?php echo get_template_directory_uri(); ?>/images/hogehoge.jpg">
```



## 固定ページにのみ表示させたい　(条件分岐)
```php:hoge
<?php if(is_page()): ?>
    <p>ここの内容は固定ページにしか出力されません</p>
<?php endif ;?>
```




## シングル(記事)ページにのみ表示させたい　(条件分岐)
```php:hoge
<?php if(is_single()): ?>
    <p>ここの内容はシングル記事ページにしか出力されません</p>
<?php endif ;?>
```


## 色々判断

```php:hoge
<?php if(is_single('17')): ?>　　　
    <p>ここの内容はIDが17の投稿ページにしか出力されません</p>
<?php endif ;?>

//　色んなケース
// "today_memory" というタイトルの記事が表示されている場合
is_single('today_memory');

// "hoge" という投稿スラッグの記事の場合　
is_single('hoge');

//  IDが17、またはスラッグがhogeの場合
is_single(array(17,  'matsutake'));
```


## 投稿ループ系

```php:hoge
<?php if(have_posts()): while(have_posts()): the_post(); ?>
    <?php the_content(); ?> // 記事の内容全部
    <?php the_excerpt(); ?> // 記事抜粋

    <?php the_permalink(); ?> // パーマリンク(その投稿やページのURL)出力
    <?php the_title(); ?>　// その投稿（ページ）のタイトル
    <?php the_time(); ?>　// その記事（ページ）の投稿日時
    <?php the_author(); ?>　// その記事（ページ）の投稿者名
    <?php the_category(); ?>　// その記事のカテゴリー名
    <?php the_tag(); ?>　// その記事に付けられたタグ

<?php endwhile; endif; ?>
```
Rroonga の expression builder メモ


Rroongaで全文検索する際には、`Groonga::Table`クラスの`select`メソッドを使い、rubyの配列を`select`するような感覚で条件に一致するレコードを検索できる。

~~~ruby
Groonga["Hoges"].select do |hoge|
  hoge.title =~ /hello/
end
~~~

コードの表面上は`Array#select`と同じように見えるが、裏側の動作原理は全く異なる。
`Array#select`は配列の要素を1つ1つ走査して、それぞれの要素に対してブロックを呼び出して条件を満たすか否かを評価し、条件をみたす要素のみをピックアップする。

一方で、rroongaの場合は`Groonga::Table#select`に渡されるブロックは一度しか実行されず、このブロックの実行によってGroongaの全文検索索引を使った問合せを構築し、Groongaのデータを検索する。
↑の例だと `hoge.title` が `Groonga::ColumnExpressionBuilder` のインスタンスになっており、`=~`などの演算子が定義されていて、`=~`が呼び出されると内部でGroonga用の問合せ式を構築する、という具合である。

## `ExpressionBuilder` で検索条件を作る

`Groonga::Table#select`をブロック付きで呼び出す場合、ブロックのreturnする値は`Groonga::ExpressionBuilder`でなければならない。

`ExpressionBuilder`は、`ExpressionBuilder`のサブクラスに対して何らかの演算子を適用することで得ることができる。基本的には、先の例の`hoge.title`のようにカラム値を表す `ColumnExpressionBuilder` を出発点として、値の一致・不一致であったり、大小比較などの演算子を適用して、最終的に評価したい条件に対応する `ExpressionBuilder` を組み上げていく。

`ExpressionBuilder`のインスタンスは、意味合いとしてはGroongaの検索に使われる[grn_expr（ぐるん式）](http://groonga.org/ja/docs/reference/grn_expr.html)に相当する。

Rroongaで`ExpressionBuilder`を組み立てる際のポイントとしては、Rubyの文法の制限上、左辺値に ExpressionBuilder が来るように気をつけなければいけない点である。

例えば、`Hoges`テーブルの`title`カラムの値が`"hage"`であるようなレコードを検索するときには

~~~ruby
Groonga["Hoges"].select do |hoge|
  hoge.title == "hage"
end
~~~

と書くことはできる一方で、

~~~ruby
Groonga["Hoges"].select do |hoge|
  "hage" == hoge.title
end
~~~

と書くことはできない。前者は `ColumnExpressionBuilder` に対して `==` 演算子を呼び出して、「カラム値が`"hage"`である」という`ExpressionBuilder`を生成して返している。
一方後者は、`"hage"`という`String`に対して`==`演算子を呼び出して、それが`hoge.title`と等価であるかを比較し、Rubyの真偽値を返している。

同様に、`hoge.number`という整数型のカラムがあったとして、「`hoge.number` の値の2倍が10である」という条件で検索しようとする場合には

~~~ruby
Groonga["Hoges"].select do |hoge|
  (hoge.number * 2) == 10
end
~~~

とは書けるが、以下のようには書けない。

~~~ruby
# 2 * hoge.number で error
Groonga["Hoges"].select do |hoge|
  (2 * hoge.number) == 10
end

# 10 == (...) で error
Groonga["Hoges"].select do |hoge|
  10 == (hoge.number * 2)
end
~~~

## `ExpressionBuilder`で使える演算子一覧

<table>
<thead>
<tr>
  <th>演算子</th>
  <th>処理内容</th>
</tr>
</thead>
<tr>
  <td>|</td>
  <td>論理和</td>
</tr>
<tr>
  <td>&</td>
  <td>論理積</td>
</tr>
<tr>
  <td>==</td>
  <td>等価比較</td>
</tr>
<tr>
  <td>!=</td>
  <td>不等価比較</td>
</tr>
<tr>
  <td>%</td>
  <td>数値の除算の剰余</td>
</tr>
<tr>
  <td>*</td>
  <td>数値の積</td>
</tr>
<tr>
  <td>+</td>
  <td>数値の和</td>
</tr>
<tr>
  <td>-</td>
  <td>数値の差</td>
</tr>
<tr>
  <td>/</td>
  <td>数値の除算の商</td>
</tr>
<tr>
  <td>&lt;</td>
  <td>大小比較（数値の大小、および文字列の辞書順(?)比較）</td>
</tr>
<tr>
  <td>&lt;=</td>
  <td>大小比較</td>
</tr>
<tr>
  <td>&gt;</td>
  <td>大小比較</td>
</tr>
<tr>
  <td>&gt;=</td>
  <td>大小比較</td>
</tr>
<tr>
  <td>=~</td>
  <td>部分一致比較。右辺値が正規表現の場合には正規表現検索。</td>
</tr>
<tr>
  <td>match(query)</td>
  <td>Groongaのクエリ式を使った検索条件指定</td>
</tr>
<tr>
  <td>prefix_search(prefix)</td>
  <td>前方一致検索</td>
</tr>
<tr>
  <td>suffix_search(suffix)</td>
  <td>後方一致検索</td>
</tr>
<tr>
  <td>similar_search(document)</td>
  <td>類似文書検索</td>
</tr>
<tr>
  <td>term_extract(document)</td>
  <td>単語抽出検索</td>
</tr>
</table>
mycliでMySQLコマンドの補完機能を簡単に使う

# mycliとは？？

* MySQLコマンド補完機能付きのMySQLクライアント
* MySQLへの接続の仕方はほぼ一緒 mysqlがmycliになるだけ
* SELECTとか打つと、そのあとのコマンド候補とかテーブル名とか補完して表示してくれる。

```
mysql root@localhost:wordpressdb> SELECT * FROM
                                                 wp_commentmeta
                                                 wp_comments
                                                 wp_links
                                                 wp_options
                                                 wp_postmeta
                                                 wp_posts
                                                 wp_term_relationships
```

# インストールと使い方

* python-pipをインストールしてpip mycliとやるだけ

```
$ sudo yum install python-pip
$ sudo pip install mycli
```

* mysqlクライアントの代わりにmycliで接続する

```
$ mycli -u root -p
Password:
Version: 1.0.1
Chat: https://gitter.im/dbcli/mycli
Mail: https://groups.google.com/forum/#!forum/mycli-users
Home: http://mycli.net
Thanks to the contributor - Lewis Peckover
mysql root@localhost:(none)>
```

* show と打ってみると次のコマンド候補がでる↓かTabで候補を選択

```
mysql root@localhost:(none)> show
                                   AUTHORS
                                   BINARY LOGS
                                   BINLOG EVENTS
                                   CHARACTER SET
                                   COLLATION
                                   COLUMNS
                                   CONTRIBUTORS
```

* コマンド末にコロン「;」を打たなくてもいい

```
mysql root@localhost:wordpressdb> SELECT * FROM wp_postmeta
+-----------+-----------+-------------------+--------------+
|   meta_id |   post_id | meta_key          | meta_value   |
|-----------+-----------+-------------------+--------------|
|         1 |         2 | _wp_page_template | default      |
|         2 |         1 | _edit_lock        | 1438324456:1 |
+-----------+-----------+-------------------+--------------+
2 rows in set
Command Time: 0.000s
Format Time: 0.001s
```

# 感想

* SQLコマンドの補完機能めちゃめちゃ便利。
* 普段使わない忘れがちなコマンドももれなく出るので良い。
* テーブル名も補完して出るのでステキ。
* インストール簡単！ステキ。

自分の[技術ブログ](https://blog-c.cloudlance-motio.work/)ではフリーランス界隈の情報や最新のIT情報の発信していますので、よろしくお願いします。

# 本家サイト
http://mycli.net/
Salesforce Event、Taskオブジェクトの繰り返し予定のトリガ動作まとめ


SalesforceのEvent、Taskオブジェクトで繰り返し予定を扱う上で、トリガーの動作が複雑なためまとめました。

まず繰り返し行動を作成すると以下のようなレコードが作成されます。
以下において行動（Event）を例に記載していますが、Todo（Task）も同等な仕様になっています。

親レコードのIsRecurrenceがtrueで、子レコードは繰り返し日分が作成され、RecurrenceActivityIdに親レコードのIDが入ります。

<table>
 <tr>
  <th>id</th>
  <th>subject</th>
  <th>IsRecurrence</th>
  <th>RecurrenceActivityId</th>
 </tr>
 <tr>
  <td>xxxxxxx1</td>
  <td>親レコード行動</td>
  <td>true</td>
  <td>xxxxxxx1</td>
 </tr>
 <tr>
  <td>xxxxxxx2</td>
  <td>子レコード行動1</td>
  <td>false</td>
  <td>xxxxxxx1</td>
 </tr>
 <tr>
  <td>xxxxxxx3</td>
  <td>子レコード行動2</td>
  <td>false</td>
  <td>xxxxxxx1</td>
 </tr>
 <tr>
  <td>xxxxxxx4</td>
  <td>子レコード行動3</td>
  <td>false</td>
  <td>xxxxxxx1</td>
 </tr>
</table>


以下において各トリガー発生時の動作についてのまとめです。

#新規作成時

<table>
 <tr>
  <th>Trigger発行数</th>
  <td>2</td>
 </tr>
 <tr>
  <th>Trigger種別</th>
  <td>Insert</td>
 </tr>
 <tr>
  <th>レコード数</th>
  <td>・親レコード1件（Insert）<br/>・繰り返し分のn件（Insert）</td>
 </tr>
</table>

#繰り返し行動の更新時
##終了日延長

<table>
 <tr>
  <th>Trigger発行数</th>
  <td>2</td>
 </tr>
 <tr>
  <th>Trigger種別</th>
  <td>Insert、Update</td>
 </tr>
 <tr>
  <th>レコード数</th>
  <td>1.延長した日のn件（Insert）<br/>2.親レコード1件（Update）</td>
 </tr>
</table>

##終了日短縮

<table>
 <tr>
  <th>Trigger発行数</th>
  <td>2</td>
 </tr>
 <tr>
  <th>Trigger種別</th>
  <td>Delete、Update</td>
 </tr>
 <tr>
  <th>レコード数</th>
  <td>1.短縮した日のn件（Delete）<br/>2.親レコード1件（Update）</td>
 </tr>
</table>

##開始日延長(未来日が開始日のみ編集可)

<table>
 <tr>
  <th>Trigger発行数</th>
  <td>3</td>
 </tr>
 <tr>
  <th>Trigger種別</th>
  <td>Delete、Insert、Update</td>
 </tr>
 <tr>
  <th>レコード数</th>
  <td>1.古い繰り返し日（すべての子レコード）のn件（Delete）<br/>
      2.新しい繰り返し日のn件（Insert）<br/>
      3.親レコード1件（Update）
  </td>
 </tr>
</table>

##開始日短縮(未来日が開始日のみ編集可)

<table>
 <tr>
  <th>Trigger発行数</th>
  <td>3</td>
 </tr>
 <tr>
  <th>Trigger種別</th>
  <td>Delete、Insert、Update</td>
 </tr>
 <tr>
  <th>レコード数</th>
  <td>1.古い繰り返し日(すべての子レコード)のn件（Delete）<br/>
      2.新しい繰り返し日のn件（Insert）<br/>
      3.親レコード1件（Update）
  </td>
 </tr>
</table>

##開始/終了時間編集

<table>
 <tr>
  <th>Trigger発行数</th>
  <td>1</td>
 </tr>
 <tr>
  <th>Trigger種別</th>
  <td>Update</td>
 </tr>
 <tr>
  <th>レコード数</th>
  <td>1.親レコード1件（Update）</td>
 </tr>
</table>

 子レコードの時刻は更新されないが、繰り返し行動の親レコードの時刻は更新される


##項目更新

<table>
 <tr>
  <th>Trigger発行数</th>
  <td>1</td>
 </tr>
 <tr>
  <th>Trigger種別</th>
  <td>Update</td>
 </tr>
 <tr>
  <th>レコード数</th>
  <td>1.親レコード1件（Update）</td>
 </tr>
</table>

　子レコードの項目は更新されないが、繰り返し行動の親レコードの項目は更新される

#一件のみ更新時

<table>
 <tr>
  <th>Trigger発行数</th>
  <td>1</td>
 </tr>
 <tr>
  <th>Trigger種別</th>
  <td>Update</td>
 </tr>
 <tr>
  <th>レコード数</th>
  <td>1.編集対象の子レコード1件（Update）</td>
 </tr>
</table>

#一件のみ削除

<table>
 <tr>
  <th>Trigger発行数</th>
  <td>1</td>
 </tr>
 <tr>
  <th>Trigger種別</th>
  <td>Delete</td>
 </tr>
 <tr>
  <th>レコード数</th>
  <td>1.削除対象の子レコード1件（Delete）</td>
 </tr>
</table>

#繰り返し行動の削除

<table>
 <tr>
  <th>Trigger発行数</th>
  <td>1</td>
 </tr>
 <tr>
  <th>Trigger種別</th>
  <td>Delete</td>
 </tr>
 <tr>
  <th>レコード数</th>
  <td>1.親レコード1件（Delete）</td>
 </tr>
</table>

※繰り返し行動またはタスクが過去になっている場合は、それらのレコードは削除されない
　未来日付になっている予定のみが削除される
Qiitaでまとめ記事書くときによくつかうもの(フォント等)

# **<i class="fa fa-file-text-o">　まとめ記事でよく使うFont Awesomeまとめ**


|   name   |   id   | 
|:--------:|:------:|
| <i class="fa fa-file-text-o fa-2x"></i> |  `<i class="fa fa-file-text-o fa-2x"></i>`   |
| <i class="fa fa-pencil fa-2x"></i>      |   `<i class="fa fa-pencil fa-2x"></i>`     |
| <i class="fa fa-code fa-2x"></i>    |   `<i class="fa fa-code fa-2x"></i>`    |
| <i class="fa fa-diamond fa-2x"></i>   |     `<i class="fa fa-diamond fa-2x"></i>`    |
|<i class="fa fa-road fa-2x"></i>|`<i class="fa fa-road fa-2x"></i>`|
| <i class="fa fa-keyboard-o fa-2x"></i>    |    `i class="fa fa-keyboard-o fa-2x"></i>`    |
|<i class="fa fa-cubes fa-2x"></i> |`<i class="fa fa-cubes fa-2x"></i>` |
|<i class="fa fa-puzzle-piece fa-2x"></i>|`<i class="fa fa-puzzle-piece"></i>`|
|<i class="fa fa-eye fa-2x"></i>|`<i class="fa fa-eye fa-2x"></i>`|
|<i class="fa fa-eye-slash fa-2x"></i>|`class="fa fa-eye-slash fa-2x"></i>`|
|<i class="fa fa-question-circle fa-2x"></i>|`<i class="fa fa-question-circle fa-2x"></i>`|
|<i class="fa fa-check-circle-o fa-2x"></i>|`<i class="fa fa-check-circle-o fa-2x"></i>`|
|<i class="fa fa-star fa-2x"></i>|`<i class="fa fa-star fa-2x"></i>`|
|<i class="fa fa-lightbulb-o fa-2x"></i>|`<i class="fa fa-lightbulb-o fa-2x"></i>`|
 ※大きさ自動調節したい時は`fa-2x`を抜いてください

# **<i class="fa fa-file-text-o">　Font Awesomeオプションまとめ**

||Source|Option|
|:---:|:---:|:----:|
|<i class="fa fa-star fa-2x fa-spin"></i>|`<i class="fa fa-star fa-2x fa-spin">`|`fa-spin`|



# <i class="fa fa-file-text-o"></i>　テーブルの作り方

|   name   |   id   | favorite |
|:--------:|:------:|:--------:|
| momozono |   1    |  おすし   |
|          |        |          |
|          |        |          |
|          |        |          |
|          |        |          |

```
|   name   |   id   | favorite |
|:--------:|:------:|:--------:|
| momozono |   1    |  おすし   |
|          |        |          |
|          |        |          |
|          |        |          |
|          |        |          |

```

# <i class="fa fa-file-text-o"></i>　参照

http://fortawesome.github.io/Font-Awesome/icons/
http://qiita.com/Qiita/items/c686397e4a0f4f11683d
java しか触ったことない新人と、golangのtutorial を学ぶ Exercise: Loops and Functions編

問題文はこちら

A Tour of Go
Exercise: Loops and Functions

関数とループを使った簡単な練習として、 ニュートン法 を使った平方根の計算を実装してみましょう。

この問題では、ニュートン法は、 開始点 z を選び、以下の式を繰り返すことによって、 Sqrt(x) を近似します。

`z = z - (z^2-x)/2z`

最初は、その計算式を10回だけ繰り返し、 x を(1, 2, 3, ...)と様々な値に対する結果がどれだけ正解値に近いかを確認してみてください。

次に、ループを回すときの直前に求めたzの値がこれ以上変化しなくなったとき （または、差がとても小さくなったとき） に停止するようにループを変更してみてください。 この変更により、ループ回数が多くなったか、少なくなったのか見てみてください。 math.Sqrt と比べてどれくらい近似できましたか？

``` skeleton.go
package main
import (
    "fmt"
)

func Sqrt(x float64) float64 {
}

func main() {
    fmt.Println(Sqrt(2))
}
```

まず初めに思ったのが、なぜSqrtに投げられてるのが2なのかと・・
z,x と変数が二つあるので、main()とSqrt をすこし変更

```
func Sqrt(x, z float64) float64 {
}

func main() {
    const x = 2
    const z = 2
    fmt.Println(Sqrt(x,z))
}
```

どうしようかなーと思ったけどrecursion(再帰)使ってみました。

```
import (
    "fmt"
    "math"
)
const delta = 1e-6

func Sqrt(x,z float64) float64 {
    last_z := z - (z*z - x)/(2*z)  
    if math.Abs(z-last_z) < delta{
    	return last_z	
    }
    return Sqrt(x, last_z)
}
```

問題文抜粋：ループを回すときの直前に求めたzの値がこれ以上変化しなくなったとき （または、**差がとても小さくなったとき**）
この値の定義が適当だったので、値の差が1e-6以下であれば十分ということにしました（どっかのぱくり）

このコード書いてから気づいたんですが、これだと10回やるという調整が効かないです。（無理ではないけど）
requireメソッドに関して


***

「require 使いたいライブラリのファイル名」

大抵のプログラミング言語では、別々のファイルに分割されたプログラムを組み合わせて、一つのプログラムとして利用する機能を持っています。
他のプログラムから読み込んで利用するプログラムを「ライブラリ」と言います。

このライブラリを読み込むには、requireメソッドを使用します。

***

open文　URLにアクセスし、 URLを開く

***

charsetメソッド　対象サイトの文字種別(utf-8)を取得
***

readメソッド　対象サイトのhtmlを読み込む(open文によってURLを開き、htmlを読み込む)

***

doc = Nokogiri::HTML.parse(html, nil, charset)
は基本的に謎。

***

p doc.titleでtitle取得

***

スクレイピングを用いて理解する。（ここが理解できればサイト完成に近づく!）

```
# URLにアクセスする為のライブラリを読み込む
require 'open-uri'

#Nokogiriライブラリを読み込む
require 'nokogiri'

#スクレイピング先のURL
url = 'http://www.yahoo.co.jp/' 

charset = nil #変数charsetにnilを代入＝初期化かな
html = open(url) do |f| #変数htmlにopen文を代入し、URLにアクセスし、そのURLを開く
  charset = f.charset　# 文字種別を取得
  f.read 　#htmlを読み込み、変数htmlに渡すメソッド
end  

doc = Nokogiri::HTML.parse(html, nil, charset)

p doc.title



```
参照http://inaka-gurashi.hatenablog.com/entry/Ruby%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%81%AB%E3%81%AA%E3%82%8B%E3%81%AB%E3%81%AF
【しずおかアプリ部】活動ログ　第四回

![しずおかアプリ部3.png](https://qiita-image-store.s3.amazonaws.com/0/88105/21ef9c25-b9ad-959b-c33c-26b2e9e0f617.png)


■タイトル
第四回


■開催日
２０１５年７月２５日（土）　１６：００～１８：００


■参加者
６名


■活動内容（概要）
・部員さんプレゼン「SourceTreeによるGit入門」
・部員さんプレゼン「coreAudio」
・保坂プレゼン「Cocos2d-xで作る物理演算ゲーム　～概要編～」
・菅原プレゼン「スマホサウンド入門」


■活動内容（詳細）

【プレゼン】
http://monolizm.com/sab/pdf/第四回_プレゼン資料(SourceTreeによるGit入門).pdf
http://monolizm.com/sab/pdf/第四回_プレゼン資料(coreAudio概要).pdf
http://monolizm.com/sab/pdf/第四回_プレゼン資料(Cocos2d-xで作る物理演算ゲーム　～概要編～).pdf
http://monolizm.com/sab/pdf/第四回_プレゼン資料(スマホサウンド入門).pdf


・「SourceTreeによるGit入門」
　Gitの仕組みと使い方を実演を交えて紹介。
　クライアントソフトはSourceTreeを使い、
　基本的な使い方をわかりやすく説明して頂きました。
　「何となくは使ったことあるけど詳しくは…」という人には特に、
　ドストライクな内容でした。


・「coreAudio概要」
　coreAudioの概要を紹介。
　coreAudioの生い立ち、分類、機能の一部を紹介頂きました。
　また、coreAudioの参考書が図書館で借りれるという情報も提供してくれました。
　合わせて、全国の図書館の本を検索できるサービスも紹介いただきました。
　カーリル：https://calil.jp


・「Cocos2d-xで作る物理演算ゲーム　～概要編～」
　Cocos2d-xの紹介と、物理エンジンを利用したゲームを開発するためのツールの紹介。
　Cocos（UIEditor、AnimationEditor、SceneEditor）、Chipmunk(物理演算ライブラリ)、
　R.U.B.E(物理演算対応のステージエディタ)、PirticleDesigner(パーティクル作成ツール)の紹介。
　Androidの開発環境を良くしたい。(Eclipseはもう嫌だ)
　　> AndroidStudio(公式の開発ツール)
　　> Genymotion(軽いシミュレータ)


・「スマホサウンド入門」
　スマホアプリで利用するためのサウンド基礎知識。
　最適な音ファイル、ファイルサイズ削減方法、遅延問題、3D音響について説明。
　遅延解決法として、CRIWAREのエンジンを紹介。　
　※無償版も存在するとのこと




【部員さん提供による追加情報】
今日お話した、CRIWAREの無償版は以下です。 

無償版サウンドミドルウェア「CRI ADX2 LE」 - CRI Middleware 
http://www.cri-mw.co.jp/product/le/qn39gm000000a3p4.html 

以下のページの「Unityで音を制す」に、参考スライドと動画があります。 

Unity - Unite 2015 Tokyo タイムテーブル／講演動画 
http://japan.unity3d.com/unite/unite2015/schedule#cell43 


無料版の内容としては、以下のような感じみたいです。 
・著作権の表記が必要。 
・基本的な機能は使える。 
・Androidのレイテンシ対策は使えない。 

私の次作以降のアプリは、Windows環境メインで開発予定なので、 
もしかしたら、ADX2LEを触ってみるかもしれません…！ 


おまけに、Unityで使えるエフェクト作成ツールです。 
(Cocos2d-xでは使えないようですが…) 

エフェクト制作ツール 「Effekseer」 
http://effekseer.github.io/jp/index.html
【しずおかアプリ部】活動ログ　第三回

![しずおかアプリ部3.png](https://qiita-image-store.s3.amazonaws.com/0/88105/b3c25609-266a-b90c-803b-4e19d41049e5.png)

■タイトル
第三回


■開催日
２０１５年７月４日（土）　１６：００～１８：４５


■参加者
５名


■活動内容（概要）
・保坂プレゼン「すごいぜSwift」
・菅原プレゼン「なるほど3Dグラフィック描画の仕組み」
・UE4のスピードレベルデザイン
・部員さんのアプリの紹介
・雑談


■活動内容（詳細）

【プレゼン】
http://monolizm.com/sab/pdf/第三回_プレゼン資料(すごいぞ新プログラミング言語Swift).pdf
http://monolizm.com/sab/pdf/第三回_プレゼン資料(なるほど3Dグラフィック描画の仕組み).pdf


・「すごいぜSwift」
　他の言語にない特徴を紹介
　クラッシュしにくいアプリケーションを作ることができる

・「なるほど3Dグラフィック描画の仕組み」
　3D描画の仕組み(概念)の紹介
　GPU、OpenGL、座標変換、シェーダ、高速化の話


【UE4のスピードレベルデザイン】
部員さんが情報提供してくれた動画を閲覧。
UE4を使った山道を作成する動画
https://twitter.com/UnrealEngineJP/status/615370911978532864

ついでにスーパーマリオ64をUE4で再現した動画も閲覧。
https://www.youtube.com/watch?v=VUKcSiAPJoQ

実際にUE4を使いたくなったけども実際のところ
環境をそろえるのにお金がかかる。

ゲームエンジンは他にもCryエンジン、Unityなどがある。
国産ではOROCHIというものもある。



【部員さんのアプリの紹介】
・アプリ名は「IODIO」。現在AppStore申請中。
・サウンドデータをサーバにアップロードして、ストリーミング再生できる仕組み。
・視覚エフェクトを表示しながら音楽を聴けるアプリ。
・Facebookアカウントを利用して、ユーザー管理をする。
・ユーザー管理機能等は、今後のバージョンアップで強化していく。
・サーバ側も作っている最中でPHP。
・DBは未使用。SQLを覚えたい。
・アイコンはイラレで作成。



【雑談】
・今後のプレゼンテーマとして
　シングルトンとかファクトリーとかのプログラムデザインパターンはどうか？
　スレッド関係をもっと深めたい（保坂）
　リアクティブエクステンションについて（非同期処理や、イベント、時間が関係する処理を簡単に扱えるライブラリ）
　グラフィッカーさんが、絵や3Dモデルを作っているところを見てみたい
　　＞部員のグラフィッカーさんいかがですか？
　効果的なプロモーション方法

・部員さんの情報収集方法
　グノシー、Unityブログ等をRSSで情報収集。

・iOSのライセンスが学生は無料？
　　学位を授与する高等教育機関に在籍している学生は、
　　その教育機関が iOS Developer University Program に登録済みで、
　　履修課程の講師に参加を招待された場合、iOS Developer University Program に参加できます。とのこの。
・Visual Stdio 10からiOSアプリが作れるらしい。
・しずおかアプリ部の部員間でアプリの広告を載せるのも面白いかも
・モノリズムは今３つのアプリを作っている。
　　同時にリリースをして瞬間最大風速を高めて一気にＤＬ数を伸ばす魂胆。
　　相乗効果を狙っている。
・今はプロモーションが重要
　良いモノも知らなければ意味がないので
【しずおかアプリ部】活動ログ　第二回

![しずおかアプリ部3.png](https://qiita-image-store.s3.amazonaws.com/0/88105/dbad6350-2eb5-5f24-16b2-f4e4bf21f992.png)

■タイトル
第二回


■開催日
２０１５年６月２０日（土）　１６：００～１８：００


■参加者
９名


■活動内容（概要）
・保坂プレゼン「あたまを柔軟に。アイディアアプリ１０選」
・菅原プレゼン「Blenderのススメ」
・WWDCまとめ
・部員さん開発中のアプリの紹介
・雑談


■活動内容（詳細）

【プレゼン】
http://monolizm.com/sab/pdf/第二回_プレゼン資料(アイディアアプリ10選).pdf
http://monolizm.com/sab/pdf/第二回_プレゼン資料(Blenderのすすめ).pdf


・「あたまを柔軟に。アイディアアプリ１０選」
　　みんなのアイディアの出し方
　　＞バイク運転中
　　＞飲みながら
　　＞何か動くものを見たときに降りてくる
　　
　　大手のように開発費、宣伝広告費がかけられない分、
　　個人、中小企業はアイディアで勝負せざるを得ない。


・「Blenderのススメ」
　　Blenderを使った、モデリング、テクスチャリング、リギング、アニメーション作成方法を実演で紹介。

　　本日初参加のグラフィッカー渡辺さんの人型モデルの作成手順。
　　１、点を打ち人型の板ポリゴンを作成。
　　２、押し出して厚みを作ってから調整していく。

　　Blenderには、Mayaや3ds Max用の操作方法に変更する機能がある。（起動時の画面から選択可能）



【WWDCまとめ】
http://monolizm.com/sab/pdf/第二回_プレゼン資料(WWDCまとめ).pdf


・開発者にとっても利用者にとってもメリットが大きい仕組みが追加された。
・Xcode 7 betaの容量が8GBほど


【部員さん開発中のアプリ紹介】
・タイトルは「ざこ箱」（ザコボックス）
・ゲーム内容は、奥から飛んでくる箱をタップやスワイプではじいて破壊するゲーム
・2015.7月中にはリリースしたい
・工夫した点
　気持ちよくプレイ出来る事（レベルデザインにかなり時間をかけている）
　リプレイや、アナリティクスなど、色々な機能を組み込んである

グラフィックもサウンドもとても爽快。
レベルデザインにこだわっていて、何回も挑戦したくなるゲームとなっている。
猫を利用したバージョンのアプリにも期待。


【雑談】
・AppleWatchアプリを作るなら、まだアプリが少ない今がねらい目だよね
　実機が無くても、シミュレータでかなり作りこめる
・モノリズムが絡んでいるゆるキャラ「今川さん」の紹介
【しずおかアプリ部】活動ログ　第一回

![しずおかアプリ部3.png](https://qiita-image-store.s3.amazonaws.com/0/88105/fc3d43e2-1914-3315-c87b-0f594eb4f98c.png)


■タイトル
第一回


■開催日
２０１５年６月６日（土）　１６：００～１８：００


■参加者
７名


■活動内容（概要）
・保坂プレゼン「プログラミングをもっと楽しく！厳選フォント１０選の紹介」
・菅原プレゼン「Unity + VuforiaでらくちんARアプリ開発」
・おすすめツール紹介
・iOSのテーブルビューについての質問
・VR体験（スマホ装着型ヘッドマウントディスプレイ）



■活動内容（詳細）

【プレゼン】
http://monolizm.com/sab/pdf/第一回_プレゼン資料(Unity+Vuforia)らくちんARアプリ開発.pdf
http://monolizm.com/sab/pdf/第一回_プレゼン資料(コーディングにおけるフォント10選).pdf


【おすすめツール紹介】
・QuickRes(Mac) MacBookAirユーザーにオススメ
　画面の解像度を変更できるアプリ（仮想スクリーン）
　実ピクセル以上の解像度を指定できるようになる
　※文字は多少つぶれてしまうが、画面を広く使えるメリットは大きい
　有料 $4.9

・Davinci Resolve(Win/Mac)
　動画編集ソフト
　強力なカラーグレーディングが行える
　無料版あり

・MagicaVoxel(Win/Mac)
　3Dドット絵が作れるモデリングソフト

・WinMarge(Win)
　ソースの比較、マージが行えるソフト
　フォルダ単位の比較や、Excelの比較も行える

・FileMarge(Mac)
　Xcodeに付属しているソースの比較、マージが行えるソフト
　フォルダ単位の比較も可能

・SourceTree(Win/Mac/Linux)
　ソースバージョン管理のGitクライアントツール

・Proccessing
　グラフィックのプログラミングを簡単に扱えるソフト

・openFrameworks
　コードにまつわる様々な事柄をずっと容易にしてくれるツール
　C++を用いて開発し、マルチプラットフォームに対応している

・クリップスタジオ(Win/Mac)
　イラストを描くのに特化したツール 
　5000円くらい
　フリーハンドで線を引いた時の補完や、アニメーションの作成も行える
　3Dモデルの読み込みにも対応し、それをトレースすることで、正確な絵が描ける
　パース定規という機能があり、3点透視、2点透視、1点透視の絵が簡単に描ける
　この値段で買えるとは思えないくらい機能が豊富



【iOSのテーブルビューについての質問】
・テーブルビューにデータを追加した際、画面スクロールし最下段を表示するようにしたい。
　→データ追加後に自分で再描画を呼ぶ必要がある。
　→再描画完了をコールバックで受け取ることができないため、スクロールさせるタイミングを計れない。
　→タイマーを使った簡易的な方法があるが、良い実装ではないために却下。
　→結局答えは出ず・・・



【VR体験（スマホ装着型ヘッドマウントディスプレイ）】
・部員のみんなに、VRを体験してもらった。
　体験に使った装置は、「Andoer CST-01」
　アマゾンで購入
　https://www.amazon.co.jp/gp/product/B00V3A4066/ref=oh_aui_detailpage_o01_s00?ie=UTF8&psc=1


・日本発信ヘッドマウントディスプレイ「Fove」
　特徴
　「Fove」という日本発信のヘッドマウントディスプレイ
　特徴は、アイトラッキングとアダプティブレンダリング
　アイトラッキングは、装着者の視線を検知できる仕組み

　アダプティブレンダリング
　人間の目の特性を活かし、視点があっている部分のみ高解像度でレンダリングすることで、
　少ない負荷で高画質を表現できる
　参考http://game.watch.impress.co.jp/docs/series/vrgaming/20150525_703521.html