OmniAICreator/Qiita-1.07M huggingface dataset:
VIEW側にて文字成形をしないためにApplication_helper側に文字整形メソッドを持つ

VIEW側でいちいち文字整形をしないために、統一的な文字整形メソッドをapplication_helperに持つ。

■ html_view_values メソッド

```application_helper.rb

  def html_view_values (formtype, value, keyword="", delim=VIEW_DELIM_COMMA)
    html = ""

    if !value.nil? && (value.kind_of?(Array) || value.kind_of?(Hash))
      htmls = Array.new
      value.each do |key, val|
        if value.kind_of?(Array)
          htmls << view_values(formtype, key)
        else
          htmls << view_values(formtype, val, key)
        end
      end
      
      case delim
      when VIEW_DELIM_COMMA
        html = htmls.join(",")
      when VIEW_DELIM_HTML_UL
        html = "<ul>"
        htmls.each do |val|
          if val.present?
            html += "<li>"+val.to_s+"</li>"
          end
        end
        html += "<ul>"
        
        if html.is_a?(String) && keyword != ""
          html = highlight(html, keyword)
        end  
      end
    else
      html = view_values(formtype, value)
      if html.is_a?(String) && keyword != ""
        html = highlight(html, keyword)
      end  
    end
    return html
  end
```

■VIEW側の実装

```interview_sheet.html.erb

<ul>
              <li><%= raw(html_view_values("interview_sheet_form.onset_pattern", @onset_pattern, "未回答")) %></li>
            </ul>

```


※先輩エンジニアがこうやって修正していたのでとりあえず備忘録代わりに。でも、メソッドの引数としての ` keyword="", delim=VIEW_DELIM_COMMA ` あたりが理解できていない。
PythonからC++のクラスを使ってみるテスト(pybind11版)

#概要

ctypesでextern "C"する http://qiita.com/tibigame/items/da0e50f59fb0b9fac540
のは単純な関数ならいいが、
クラスを拡張していくには不安がある。
そこでpybind11というのを試してみる。

#環境

* Windows7(64bit)
* Anaconda (Python3.6 64bit)
* Microsoft Visual C++ 2015 Community

#準備

1. pybind11をgitCloneしてくる。 https://github.com/pybind/pybind11
2. includeの中にあるpybind11をフォルダごとAnacondaのincludeにコピーする。
3. Visual Studioの追加のインクルード ディレクトリにAnacondaのincludeディレクトリを追加する。
4. Visual Studioのリンカ―の追加の依存ファイルにAnaconda3\libs\python36.libを追加する。
5. ビルドはx64, Releaseに設定する。

# C++コード
```cpp:ClassTestLib.cpp
#define NOMINMAX
#define _CRT_SECURE_NO_WARNINGS

#include "stdafx.h"
#include <pybind11/pybind11.h>
namespace py = pybind11;

class ClassTest {
public:
	int a;
	int *b;
	ClassTest() {
	}
	ClassTest(int X) {
		a = X;
		b = new int;
		*b = X * 2;
	}
	~ClassTest() {
		delete b;
	}
	int calcA(int add) {
		return a + add;
	}
	int getB() {
		return *b;
	}
};

PYBIND11_PLUGIN(ClassTestLib) {
	py::module m("ClassTestLib", "pybind11 example plugin");
	py::class_<ClassTest>(m, "ClassTest")
		.def(py::init<const int>())
		.def("calcA", &ClassTest::calcA)
		.def("getB", &ClassTest::getB);
	return m.ptr();
}
```
###ポイント
この二行を定義しておかないとビルドが止まる。

* #define NOMINMAX
* #define _CRT_SECURE_NO_WARNINGS

共有DLLでMFCを使用するにしないとcmathとかの関数使うと落ちる。
スタティックよりは共有のが若干速い。

class部分は前のコードをそのままコピペしてきた。

Cでexternしてた部分がPYBIND11_PLUGIN('ファイル名')に置き換わった。
ビルド後に「ClassTestLib.dll」を「ClassTestLib.pyd」にリネームして
pythonコードがあるディレクトリにコピーする。

#Pythonコード
```py3:classTest.py
import ClassTestLib
x = ClassTestLib.ClassTest(100)
print (x.calcA(10))
print (x.getB())
```
#結果
```text
110
200
```
PYBIND11_PLUGINの書き方はイマイチわかっていない。
デストラクタがどうなるのかとか、
複雑な引数、返り値の時にうまく書けるんだろうかという心配はあるが、
ずいぶんとクラスっぽく使えるようになったのでよしとする。
React&Reduxを牛丼屋に例えてみる図

![redux.png](https://qiita-image-store.s3.amazonaws.com/0/14068/c89eb967-3832-69fe-8861-d0053a767867.png)

<img width="189" alt="redux.png" src="https://qiita-image-store.s3.amazonaws.com/0/14068/c3876cac-3a87-87b8-a074-bc04c2afeab5.png">


```JSX
import React from 'react';
import { render } from 'react-dom';
import { createStore } from 'redux';

// 座席確保(State)
const initialState = {
  // 単品メニューの準備
  menu: '',
  // 全ての注文の準備
  menus: []
}

// チケット販売機(ActionCreator)
const inputCoin = (menu) => (
  {
  // 基本オーダー(Action)
  type: 'WATER',
  payload: {
    menu
  }
});

const addTicket = (menu) => (
  // 食券オーダー(Action)
  {
  type: 'TICKET',
  payload: {
    menu
  }
});

// スタッフが食券を厨房に伝える(store)
const store = createStore(kitchen);

// 厨房(Reducer)
function kitchen (state = initialState, action) {
  // 食券の確認
  switch (action.type) {
    case 'WATER':
      return {
        // 全ての注文
        ...state,
        // 単品メニューを準備
        menu: action.payload.menu
      };
    case 'TICKET':
      return {
        ...state,
        // 単品メニューを今までの注文に追加
        menus: state.menus.concat([action.payload.menu])
      }
    default:
      // チケットがなければ今ままでの注文を返す
      return state;
  }
}

// カウンター(React)
function EatCounter ({ store }) {
  // 単品メニューおよび全ての注文を確認
  const { menu, menus } = store.getState();
  return (
    <div>
      {/* 食券をスタッフが声出し確認(dispatch) */}
      <input type="text" onChange={(e) => store.dispatch(inputCoin(e.target.value))} />
      {/* 食券をスタッフに渡す(dispatch) */}
      <input type="button" value="購入" onClick={() => store.dispatch(addTicket(menu))} />
      <ul>
        {/* カウンターに注文メニューを個別に配置 */}
        {
          menus.map(function(item, i) {
          return (
              <li map={i}>{item}</li>
            );
          })
        }
      </ul>
    </div>
  );
}

// お客さんに商品を渡す
function renderApp (store) {
  render (
    <EatCounter store={store} />,
    document.getElementById("root")
  );
}

// 厨房にチケットが渡された時はカウンターを再確認
store.subscribe(() => renderApp(store));
renderApp(store);
```
WindowsでGitを使ってみた

# WindowsでGitを使ってみた

## はじめに
インフラ初心者がGitに初めて触れてみました。その時の内容をまとめ投稿します。
もし認識が間違っていたら、コメントや編集リクエストから、ご指摘頂けると幸いです。

## 概要
- Gitとは
- Gitを利用するための準備
- Gitを実際に使ってみる
- まとめ

## Gitとは
Webサイトなどを作る時には、複数人で協力しながら開発していくことが多くあります。
Gitを使うことで共同開発をスムーズに進めることができます。
つまりGitとは、共同開発ツールです。

具体的には、バージョン管理といって、ファイルの状態を好きなときに更新履歴として保存しておくことができ、一度編集したファイルを過去の状態に戻したり、編集箇所を表示したりできます。<br>


リポジトリには、ローカルリポジトリと、リモートリポジトリがあります。<br>

ローカルリポジトリ・・・ユーザ一人で作業するところ。公開したい内容をリモートリポジトリにPush（アップロード）したり、リモートリポジトリの他の人の作業をPull（ダウンロード）したりできる。<br>

リモートリポジトリ・・・専用のサーバに配置して、複数人で共有する場所。<br>

リポジトリではファイルやディレクトリの情報が、変更履歴として保存されていきます。したがって、同時に二人以上がファイルに変更を加えてアップロードしたとしても、変更履歴としてすべての状態と変更点が保存されているので、前にアップロードされた変更内容が消えてしまう心配がありません。


## Gitを利用するための準備

下記URLのサイトで、Gitの環境構築の手順がわかりやすくのっているので、こちらを参考に環境構築をしました。<br>

- 具体的にやること
  - Gitのインストール・・・Git Bashというアプリケーションのインストール
  - Gitの初期設定・・・ユーザ名、メールアドレスの登録
  - Githubの設定・・・アカウント作成、リモートの作成

- Windowsの方はこちら
http://prog-8.com/blogs/git-preparation-windows

- Macの方はこちら
http://prog-8.com/blogs/git-preparation-mac


## Gitを実際に使ってみる

環境構築が完了したら、実際にGitでファイルをPush（アップロード）してみたいと思います。
まずは、インストールしたGit Bashというアプリケーションを起動します。

Pushする準備を進めていきます。

- ディレクトリの作成と移動

```
# mkdir mysite
# cd mysite
```

- Gitを使えるようにするために、以下のコマンドを実行。<br>
　※initは初期化という意味がある

```
# git init
```

- ファイルの作成

```
# touch index.html
```

- 共有するファイルの選択<br>
ファイルを選択するにはgit addコマンドを用います。

```
# git add index.html
```

- 選択したファイルの記録<br>
選択したファイルを記録することをコミットいいます。コミットがどのような内容かわかりやすいメッセージをつけましょう。

```
# git commit -m "Create index.html"
```

- リモートの登録<br>
リモートの登録をするには名前をつける必要があります。originと名付けることが多いようです。

```
# git remote add リモート名 リモートのURL
例）git remote add origin https://github.com/hogehoge/mysite.git
```

- GitでPushする
git pushコマンドで先程登録した、originリモートにアップロードできます。

```
# git push origin master
```

- Githubの画面で確認

Pushが出来ていればGithubの画面上にindex.htmlが作成されているはずです。


### その他gitコマンドまとめ

```
# git pull origin master  #リモートからダウンロードできます
# git status              #自分が変更したファイルが何か把握できます
        modified:   index.html    #赤で表示される
# git diff                #変更内容が把握できます
-  <p>元からあるテキスト</p>
+  <p class="subtitle">変更後のテキスト</p>
# git log                 #自分や他人のコミット履歴を表示、この時コミットメッセージが表示される。
# git log -p              #コミットメッセージだけでなく変更内容も見たいとき
```

## まとめ

Gitを初めて触ってみましたが、参考にしたドキュメントもわかりやすく手を動かしているうちにだんだんわかってきました。 今までは、Webサイトを変更する際に、サーバに直接HTMLファイルをアップロードして毎回昔のHTMLファイルを削除していました。サイトが正しく表示されなかったときのために昔のファイルをとっておく必要がありましたが、Gitを活用することで、変更前のファイルをもっておく必要もなくなり、変更前の状態に戻すことも容易になりますね。<br>
触りしか学習していないので、まだまだ出来ることがありそうです。これからもGitの知識を深めていこうと思います。読んで頂きありがとうございました!


## 参考にしたサイト

- プロゲート「Git」
http://prog-8.com/languages/git

- Gitの環境構築
http://prog-8.com/blogs/git-preparation-windows
http://prog-8.com/blogs/git-preparation-mac

- Gitの基本
http://www.backlog.jp/git-guide/intro/intro1_1.html
Prism Template Packについてくるコードスニペット

# 初めに
Visual Studioの拡張機能「Prism Template Pack」をインストールすると、Prism用のコードスニペットが付いてくるよという話。
コードスニペットというのは、例えばソースコードに「propp」を入力して、Tabキーを2回押下するとコードが自動挿入される機能なのです。

# コードスニペット
## propp
Property, with a backing field, that depends on BindableBase
更新通知が必要なプロパティを定義するときに使う。

```csharp
private string fieldName;
public string PropertyName
{
    get { return fieldName; }
    set { SetProperty(ref fieldName, value); }
}
```

## cmd
Creates a DelegateCommand property with private setter
DelegateCommandを定義するときに使う。

```csharp
public DelegateCommand CommandNameCommand => new DelegateCommand(CommandName, CanCommandName);
```

ラムダ式の匿名メソッドで書きたい場合

```csharp
public DelegateCommand CommandNameCommand => new DelegateCommand(() =>
{
    // ここにコマンド処理
});
```
とか。

## cmdg
Creates a generic DelegateCommand<T> property
パラメータ付きのDelegateCommandを定義するときに使う。

```csharp
public DelegateCommand<string> CommandNameCommand => new DelegateCommand<string>(CommandName, CanCommandName);
```

ラムダ式の匿名メソッドで書きたい場合

```csharp
public DelegateCommand<string> CommandNameCommand => new DelegateCommand<string>((p) =>
{
    // ここにコマンドの処理
});
```
とか。


ふむふむ。
git log などでlessコマンドの表示をクリアしない設定

git log など、lessコマンドで表示した内容は、使用後デフォルトではクリアされます。残っていてほしいことが多く設定するのですが、忘れるのでメモしておきます。


# git log などでlessコマンドの表示をクリアしない設定
```bash
git config --global core.pager 'less -X'
```
プラットフォームキャッシュ

個々のログインユーザーがセッション上に値を保持するには、セッションキャッシュを割り当てる（組織全体で値を共有したい場合は、組織キャッシュを使用する）。

#### Salesforceの設定（セッションキャッシュ）
[設定] - [開発] - [プラットフォームキャッシュ]
<img width="770" alt="Screen Shot 2017-02-13 at 16.03.32.png" src="https://qiita-image-store.s3.amazonaws.com/0/161463/093f037e-4c84-7e85-ae8c-c4bd4a8d8c7e.png">
>全体で10M (Enterprise)
>セッションキャッシュの最低値は5M
> as of Spring'17

[プラットフォームキャッシュの考慮事項](https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_platform_cache_limitations.htm)
[プラットフォームキャッシュの制限](https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_platform_cache_limits.htm)

Apexからのプラットフォームキャッシュへのアクセス

```java
//デフォルトの場合はキーのみ
Cache.Session.contains('xxx');
//それ以外は 名前空間.パーティション.キー名 を指定  
Cache.Session.contains('local.partition.xxx'); 

//設定
Cache.Session.put(key, val);
//取得
(String) Cache.Session.get(key);
```
ESP8266のntpの設定は1行で

# 概要

ntp(ネットワーク・タイム・プロトコル)はネット経由で時計を合わせるための通信規約で、ネットワーク上のタイムサーバと同期させることで正確な時刻を簡単に得ることができる。

esp8266 Arduinoでも、利用することができるが、自前でntpのパケットの作成・送受信を行うスケッチの例が提供されているためか、自前でやらなければならないと誤解している人がいるかもしれません。

esp8266 Arduinoにはntpの機能が組み込まれていて、特にライブラリをインクルードしなくても、設定するだけでntp同期の時刻情報を得ることができます。

***追記: 2020/05/24:***

esp8266 arduino ver 2.7.0以降、従来説明した方法では時刻が18時間ずれるようになりました。従来は configTime()関数で設定を行ってましたが、2.7.0以降は configTzTime()関数を使用することをお勧めします。


# 使い方

configTzTime()関数で設定を行います。宣言はArduino.hにありますので、特にincludeする必要はありません。

``` Arduino.h
// esp32 api compatibility
inline void configTzTime(const char* tz, const char* server1,
    const char* server2 = nullptr, const char* server3 = nullptr)
```

日本で使う場合、tzは "JST-9"となります。tzに指定可能な文字列は<a href="https://github.com/esp8266/Arduino/blob/master/cores/esp8266/TZ.h">TZ.h</a>を参照してください。

ntpの同期が完了すると time()関数がUNIX時間(1970年1月1日0時0分0秒からのうるう秒を含まない秒数)を返すようになるので、これをlocaltime()関数などで変換し利用します。同期が完了するまではtime()関数は0を返すので、変な時刻を表示させたくない場合は、非0が返るまで待つようにすると良いでしょう。 time()やlocaltime()の使用にはtime.hをインクルードする必要があります。

# サンプルプログラム

使用例を示します。

``` clock.ino
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <time.h>

#define WIFI_SSID 	"your_wifi_ssid"
#define	WIFI_PASSWORD	"your_wifi_password"
#define	JST		3600*9

void setup() {
  Serial.begin(115200);
  delay(100);
  Serial.print("\n\nReset:\n");

  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  while(WiFi.status() != WL_CONNECTED) {
    Serial.print('.');
    delay(500);
  }
  Serial.println();
  Serial.printf("Connected, IP address: ");
  Serial.println(WiFi.localIP());

  // configTime(  JST, 0, "ntp.nict.jp", "ntp.jst.mfeed.ad.jp"); // esp8266/arduino ver 2.6.3まで有効
  // configTime( -JST, 0, "ntp.nict.jp", "ntp.jst.mfeed.ad.jp"); // 2.7.0, 2.7.1ならこれでも可
  configTzTime("JST-9", "ntp.nict.jp", "ntp.jst.mfeed.ad.jp");   // 2.7.0以降, esp32コンパチ
}

void loop() {
  time_t t;
  struct tm *tm;
  static const char *wd[7] = {"Sun","Mon","Tue","Wed","Thr","Fri","Sat"};
  
  t = time(NULL);
  tm = localtime(&t);
  Serial.printf("ESP8266/Arduino ver%s :  %04d/%02d/%02d(%s) %02d:%02d:%02d\n",
		__STR(ARDUINO_ESP8266_GIT_DESC),
		tm->tm_year+1900, tm->tm_mon+1, tm->tm_mday,
		wd[tm->tm_wday],
		tm->tm_hour, tm->tm_min, tm->tm_sec);
  delay(1000);
}
```

実行時のシリアルモニタは次のようになります。

![sc200524a.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144308/8fa95ad3-264f-6a74-4609-dec8bd1a0d1a.png)


# もう少し詳しい話

configTime(), time()等のソースを見ると、それぞれ <a href="https://github.com/esp8266/Arduino/blob/master/tools/sdk/lwip/src/core/sntp.c">sntp.c</a>の対応関数を呼び出しているようで、sntp.cをみると1時間に1回 ntpパケットを投げているようです。
Rのsurvivalパッケージ使って、コホート分析やってみましょう。

特にスタートアップをやっていたりすると、コホート分析、もしくは、カスタマー・リテンション率の分析などに興味のある方多いのではないかと思います。ただ、エクセルだとか、その辺のBIツール、もしくはSQLなどでやってみようとすると、結構大変だったりしてそのままになってしまったという人も多いのではないでしょうか？

RのUIということで、聞いたことのある人もいるかもしれませんが、Exploratoryというプロダクトを作っている西田と申します。最近リリースした新しいバージョンで、サバイバル分析という、まさにこのコホート分析、もしくは、カスタマー・リテンション率の分析に適した機能が入りましたことを記念して、これから３本ほどこちらQiitaの方に日本語で記事を書いてみようと思います。（もし英語の方でいいから先にということでしたら、[こちら](https://blog.exploratory.io)をどうぞ。）

以下のような流れで書いていきたいと思いますので、よろしくお願いします。

- サバイバル分析を使ってカスタマー・リテンション率をコホート毎に可視化してみる
- サバイバル・モデルを作って、何がカスタマーをChurnもしくはRetainさせているのかを分析
- どのユーザーがいつ辞めるのか、もしくはどのくらいユーザーでいてくれるのかを予測

それでは、次の記事で！
LiT_2017_2_13

教科書 Vector3
# 位置の表示

```
Debug.Log(this.transform.position);
```

# Vector3の宣言

```
Vector3 vector = new Vector3(1.0f, 2.0f, 0);
```

# バグ
Mathf.Deg2Radはただの数値
Transform.position.x は ReadOnly
Space.Worldで
Github ソースコード表示の印刷をキレイに


Githubにあるソースコードを印刷して納品物とする為に、印刷レイアウトを調整する JavaScript を作ってみました。
元ネタは http://qiita.com/htkymtks/items/63decc78dbd14f7fc860 です。

ChromeでJavaScriptコンソールを開いて以下のコードを実行します。
印刷に都合が悪かったソースコードが折り返しされます。

```javascript
[
	"header",
	"reponav",
	"commit-tease",
	"file-header",
	"select-menu",
	"branch-select-menu",
	"BtnGroup",
	"repohead-details-container",
	"site-footer-container"
].forEach(function (className) {
	document.getElementsByClassName(className)[0].style.display = "none";
});
var codeTags = Array.from(document.getElementsByClassName("blob-code-inner"));
codeTags.forEach(function (e) {
	e.style["word-break"] = "break-all";
	e.style["white-space"] = "normal";
});


```
【PS】PowerShellスクリプトの動作検証	


[akira6592](http://qiita.com/akira6592)さんが作成されたPowershellスクリプトが自分が使用している環境で使えるか動作検証してみた。

[複数Excelファイルの各シートのフォーカスをA1に、表示倍率を100%に統一するPowerShell](http://qiita.com/akira6592/items/9bb7d8ac5321afd7220c)

非常に便利なのでスクリプトでおすすめです！！

--

# 0.今回の動作検証について

今回、動作検証を実施した環境は以下のとおり。

| Category | Value |
|:--------:|:--------|
| OS | Windows7 Professional |
| PS | 2.0 |
| Excel | Microsoft Excel 2010 |


--

# 1.スクリプト設計

[akira6592](http://qiita.com/akira6592)さんが作成されたコードをベースとする。
但し、今回は処理過程が可視化できるように `$excel.Visible` のパラメータ値を `$true` に変更した。

ベースにしたソースコードについては、下記を参照ください。
[複数Excelファイルの各シートのフォーカスをA1に、表示倍率を100%に統一するPowerShell](http://qiita.com/akira6592/items/9bb7d8ac5321afd7220c)

私が使用したソースコードは下記。

````test.ps1
# カレントにて処理対象ファイル（xlsx）を取得　
$targetFiles = Get-ChildItem -Path *.xlsx

# Excelオブジェクト作成
$excel = New-Object -ComObject Excel.Application

# 処理経過を可視化（非表示にする場合は、$falseを指定する）
$excel.Visible = $true

# 処理ループ
foreach ($file in $targetFiles) {

    # Excelオープン
    $book = $excel.Workbooks.Open($file.FullName)

    # シートのループ処理
    foreach ($WorkSheet in $excel.Worksheets) {
        # 非表示シートは対象外
        if ($WorkSheet.Visible -ne $false) {
            # 処理対象のシートを選択状態にする
            $WorkSheet.Activate()

            # セル「A1」を選択状態にする
            $WorkSheet.Cells.Item(1,1).Select() | Out-Null

            # 表示倍率を100%にする
            $excel.ActiveWindow.Zoom = 100
        }

    }

    # 一番左のシートを選択状態にする（おまけ）
    $excel.Worksheets.Item(1).Activate()

    # 上書き保存する
    $book.save()
    $book.close()

}

# 閉じる
$excel.Quit()

# プロセスを解放する
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null
Remove-Variable excel
````


--

# 2.検証方法

[複数Excelファイルの各シートのフォーカスをA1に、表示倍率を100%に統一するPowerShell](http://qiita.com/akira6592/items/9bb7d8ac5321afd7220c)に記載されている方法で実施した。

![スクリーンショット 2017-02-13 15.26.00.png](https://qiita-image-store.s3.amazonaws.com/0/33479/f5c474f0-d853-a5a8-2e26-293da9595665.png "スクリーンショット 2017-02-13 15.26.00.png")

--

# 3.検証結果

[複数Excelファイルの各シートのフォーカスをA1に、表示倍率を100%に統一するPowerShell](http://qiita.com/akira6592/items/9bb7d8ac5321afd7220c)で記載されていたバージョンよりも
古いバージョンにて検証を実施したが問題なく動作した。


--

# 4.まとめ

ドキュメント作成時のフォーマット確認作業が自動化できるため、非常に有効なツールと言える。
WordやPowerPointなどへの応用もできるため、今後試してみたい。

最後に、[akira6592](http://qiita.com/akira6592)さん、非常に参考になる記事の投稿ありがとうございます。

---
日本語でインストールしたCentOS7 + KDEでディレクトリ名を英語に変更する

私はCentOS7のデスクトップ(KDE)を開発環境にしていますが、日本語設定でインストールすると当然「デスクトップ」等と日本語のディレクトリ名になってしまいますね。
Tab補完等が非常にやりづらいのでこれを英語にしたい場合は下記のコマンドを投下して再起動します。

```shell-session:bash
[test@testmachine ~]$ LC_ALL=C xdg-user-dirs-update --force
Moving DESKTOP directory from デスクトップ to Desktop
Moving DOWNLOAD directory from ダウンロード to Downloads
Moving TEMPLATES directory from テンプレート to Templates
Moving PUBLICSHARE directory from 公開 to Public
Moving DOCUMENTS directory from ドキュメント to Documents
Moving MUSIC directory from 音楽 to Music
Moving PICTURES directory from 画像 to Pictures
Moving VIDEOS directory from ビデオ to Videos
```

但し旧日本語ディレクトリに入っていたファイルは自動では移動しないので必要なものは手動で移動してから削除しないと死にます。
意外とPHPのバージョンを指定してUbuntuにインストールする方法が載ってないのでまとめる

#環境
OS：Ubuntu16.04LTS
PHP：PHP5.6をインストールしたい

#手順

```
sudo apt-get install software-properties-common python-software-properties
sudo apt-get update
sudo apt-get upgrade

sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install php5.6  

sudo apt-get -y install php5.6 php5.6-cgi libapache2-mod-php5.6 php5.6-common php-pear
sudo a2enconf php5.6-cgi.conf
```

当然、5.6の部分を7.0や7.1等にしてもOK。
ffmpegを使ってCLIからスクリーンキャストを撮影する (Ubuntu)

# 概要

ffmpegは変換だけでなくソースを指定すれば撮影も可能です。このソースに「画面」を指定するとスクリーンキャストを作ることができます

概ねのやりかたは[Capture/Desktop – FFmpeg](https://trac.ffmpeg.org/wiki/Capture/Desktop)に書いてあるとおりです

# やりかた (Ubuntu/Linux)

```console
$ ffmpeg -y -f x11grab -video_size 1280x720 -i :0.0+0,0 -framerate 25 output.mkv
```

この設定で、画面の左上から1280x720の矩形を撮影できます
※あとは適当にパラメータ調整してください

**ポイント;**

* 入力ソースに `x11grab` (=Xの画面)を指定する
    * `ffmpeg -buildconf` の中に `--enable-x11grab` が含まれている事が必須
* `-video_side` を SD(720×480) や HD(1280×720) といった[ええ感じのサイズ](https://ja.wikipedia.org/wiki/%E7%94%BB%E9%9D%A2%E3%82%B5%E3%82%A4%E3%82%BA)を指定する
* いきなり始まるのは嫌だ！という方は `$ sleep 5 ; ffmepg ...` とsleep入れれば解決します

## macOSやWindowsの場合

macOSならQuickTime使ってください。Windowsは[先のURLにも書いてあるようにDirectShow使う](https://trac.ffmpeg.org/wiki/Capture/Desktop)か、フリーのソフトウェア使ってください

* [画面キャプチャ方法（Mac＆Win）](http://qiita.com/mocho/items/06cd109610ab256c6b6f)
* [Soundflowerを用いて音声入りの画面キャプチャを撮る方法(macOS)](http://qiita.com/Sasakky/items/09e3bc1536f0569fc893)

# あとがき

[レタッチツールを使わずにボカシを行う方法（ブラウザ内限定） - Qiita](http://qiita.com/ma2shita/items/f4a1f686ea7623baa499)は、この方法で撮影しました。

## 参考資料

* [画像サイズ - Wikipedia](https://ja.wikipedia.org/wiki/%E7%94%BB%E9%9D%A2%E3%82%B5%E3%82%A4%E3%82%BA)
* [ffmpeg でUstream.tv 配信](http://qiita.com/matoken/items/37c3e158f145d8f59047)
Cakephp 2.x 自作のFormHelper

datepickerみたいなUIが普及した今となっては果たして存在意義があるのかどうかという感じだが、まあ、今でも日付入力に年と月と日で分けてselectにする人はいる。
で、CakephpのFormHelperも日付型のデータにはデフォルトで年月日分割selectになるようになっている。
そのカスタマイズ方法である。

まずMyFormHelperを作る。
場所はapp/View/Helper の中
classの中に今回自分がカスタマイズしたい部分を含むメソッドを丸ごとコピーする。

```php:app/View/Helper/MyFormHelper.php
<?php
App::uses('FormHelper', 'View/Helper');

class MyFormHelper extends FormHelper {
	public function dateTime($fieldName, $dateFormat = 'DMY', $timeFormat = '12', $attributes = array()) {

....略

	}

}
?>
```

で、改造部分を記述する。詳しくは参考サイトを参照

```php:app/View/Helper/MyFormHelper.php
        if (is_array($separator)) {
            $i = 0;
            foreach($selects as $select) {
                $opt .= $select . $separator[$i];
                $i++;
            }
        } else {
            $opt = implode($separator, $selects);
        }
```

で、それを使うビューのコントローラに以下を追加。

```php:app/Controller/NewsController.php
    public $helpers = array('Form' => array('className' => 'MyForm'));
```


あとはビューのinput部分を書き換え

```php:app/View/News/add.ctp
<?php echo $this->Form->input('post_date', 
    array(
        'dateFormat' => 'YMD', 
        'minYear' => date("Y") -1, 
        'maxYear' => date("Y") + 4, 
        'monthNames' => false, 
        'div' => false, 
        'label' => false, 
        'separator' => array(
            '<span>年</span>', 
            '<span>月</span>', 
            '<span>日</span>')
        )
    );
?>
```

まあ、でもこれはやる価値ある気持ちよさですよ。

# 参考


- [CakePHPで日時のセレクトボックスを日本語表示する。](http://universions.tumblr.com/post/88981644545/cakephp%E3%81%A7%E6%97%A5%E6%99%82%E3%81%AE%E3%82%BB%E3%83%AC%E3%82%AF%E3%83%88%E3%83%9C%E3%83%83%E3%82%AF%E3%82%B9%E3%82%92%E6%97%A5%E6%9C%AC%E8%AA%9E%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B)

- [ヘルパーをオーバーライドする](http://xn--cakephp-gt4fral1s5v.jp/helper-override/)
レタッチツールを使わずにボカシを行う方法（ブラウザ内限定）

# 困ってること

スクリーンショットを使ってハンズオンマニュアルとか作ってる際に面倒なのが、センシティブ情報の隠蔽化です。
それらを（ブラウザ内限定ですけど）解決する方法として、**CSS3のfilterプロパティ** の `blur` を使うという方法を紹介します。

# やり方

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">Image Blurring with Browser using CSS3 (Editing with Element selection) <a href="https://t.co/E2MtVuOcv4">https://t.co/E2MtVuOcv4</a> <a href="https://twitter.com/YouTube">@YouTube</a>さんから</p>&mdash; Kohei MATSUSHITA (@ma2shita) <a href="https://twitter.com/ma2shita/status/831010857106628609">2017年2月13日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

1. Google Chromeなら [デベロッパーツール]-[Elements] 、Firefoxなら [開発ツール]-[インスペクター] を表示します。
2. ボカシたいエレメントを選択してCSSウィンドウ内のelement.style(もしくは要素)に **filter: blur(5px)** と入れ、EnterやTabを押して確定させます。（この瞬間にボケます）
3. デベロッパーツールを閉じても効果は持続しますので、スクリーンショットをお撮りください。

以上です。

* 5pxではボケきらないかもしれません。blurの値を10pxとか調整してください
* リロードすると効果が消えます（あたりまえ）

## 応用編: いちいち選択するのは面倒だ

ボカシたいエレメントにIDや特定のクラスが割り当てられているのであれば、開発ツールのコンソールから直接

```
document.getElementById('nav-usernameMenu').style = 'filter:blur(5px)'
```

とすることで、いちいちエレメントを選択することも不要です。

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">Image Blurring with Browser using CSS3 (Editing with Console) <a href="https://t.co/FEn50SLZMA">https://t.co/FEn50SLZMA</a> <a href="https://twitter.com/YouTube">@YouTube</a>さんから</p>&mdash; Kohei MATSUSHITA (@ma2shita) <a href="https://twitter.com/ma2shita/status/831010878224887808">2017年2月13日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

## 応用編: 一部だけボカシたい

<span>タグを追加しちゃいましょう

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">Image Blurring with Browser using CSS3 (Append SPAN tag) <a href="https://t.co/cGzulxckjj">https://t.co/cGzulxckjj</a> <a href="https://twitter.com/YouTube">@YouTube</a>さんから</p>&mdash; Kohei MATSUSHITA (@ma2shita) <a href="https://twitter.com/ma2shita/status/831010893898997760">2017年2月13日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

ただし、画像の一部とかは（やれなくはないけど）面倒です。
ヒント: 画像に `position: relative` を指定してから `position: absolute` なboxを重ね、そのboxを `filter: blur` すればok

# PowerPointに貼り付けた後、四角オブジェクトで隠せば？

PowerPointに貼り付けてから四角オブジェクトツールを重ねる方法があります。
これは紙出力の場合は大丈夫ですが、PDF等のデジタルデータ的には隠せていないんです。
かといって、スクリーンショットを取ってAdobe Photoshopのようなレタッチツールで隠す作業も面倒です。

# あとがき

結構捗るですよ。

## 参考資料

* [CSS3のフィルター効果をまとめた | おぼめも](http://obomemo.com/web/css3-filter/)
* [君はHTML5の contentEditable 属性を知っているか ｜ Tips Note by TAM](http://www.tam-tam.co.jp/tipsnote/html_css/post8653.html)
HyperledgerFabricのGetStartedで`'tr1/unordered_map' file not found`のエラーが出るときへの対処法

## 問題
現時点(mac os 10.12.3)で、Hyperledger FabricのGetStartedで下記のようなエラーが出る

```
  CXX(target) Release/obj.target/native/src/hashtable.o
In file included from ../src/hashtable.cpp:1:
../src/hashtable.h:7:10: fatal error: 'tr1/unordered_map' file not found
#include <tr1/unordered_map>
         ^
1 error generated.
make: *** [Release/obj.target/native/src/hashtable.o] Error 1
gyp ERR! build error 
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/Users/keech/.nodebrew/node/v7.5.0/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:276:23)
gyp ERR! stack     at emitTwo (events.js:106:13)
gyp ERR! stack     at ChildProcess.emit (events.js:192:7)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:215:12)
gyp ERR! System Darwin 16.4.0
gyp ERR! command "/Users/keech/.nodebrew/node/v7.5.0/bin/node" "/Users/keech/.nodebrew/node/v7.5.0/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "configure" "build"
gyp ERR! cwd /Users/keech/Dropbox/08_Depelopment/_study/hyperledger-fabric/hackfest/node_modules/hashtable
gyp ERR! node -v v7.5.0
gyp ERR! node-gyp -v v3.5.0
gyp ERR! not ok 
```

## 解決法

```
cd ~
npm install "https://github.com/fabrice102/node-hashtable.git"
```

```
mv -R ~/node_modules/hashtable [path to hackfest directory]/node_modules/
```

```
cd [path to hackfest directory]
npm install
```


## 原因
mac、OS X 10.12になってからtr1フォルダを無くしたようです。
> https://github.com/chad3814/node-hashtable/pull/33
macOS SierraでAWS CLIインストール時にエラー(Found existing installation: six 1.4.1)

# 結論、以下のコマンドでインストールできる

```
sudo pip install awscli --upgrade --ignore-installed six
```

# 以下、経緯

## AWS CLIをインストールしたい
- [ここ](http://docs.aws.amazon.com/ja_jp/streams/latest/dev/kinesis-tutorial-cli-installation.html)を見てインストールをすすめた

```
curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py"
sudo python get-pip.py
sudo pip install awscli
```

## 謎のエラー

```
Found existing installation: six 1.4.1
    DEPRECATION: Uninstalling a distutils installed project (six) has been deprecated and will be removed in a future version. This is due to the fact that uninstalling a distutils project will only partially uninstall the project.
    Uninstalling six-1.4.1:
Exception:
Traceback (most recent call last):
  File "/Library/Python/2.7/site-packages/pip/basecommand.py", line 215, in main
    status = self.run(options, args)
  File "/Library/Python/2.7/site-packages/pip/commands/install.py", line 342, in run
    prefix=options.prefix_path,
  File "/Library/Python/2.7/site-packages/pip/req/req_set.py", line 778, in install
    requirement.uninstall(auto_confirm=True)
  File "/Library/Python/2.7/site-packages/pip/req/req_install.py", line 754, in uninstall
    paths_to_remove.remove(auto_confirm)
  File "/Library/Python/2.7/site-packages/pip/req/req_uninstall.py", line 115, in remove
    renames(path, new_path)
  File "/Library/Python/2.7/site-packages/pip/utils/__init__.py", line 267, in renames
    shutil.move(old, new)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 302, in move
    copy2(src, real_dst)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 131, in copy2
    copystat(src, dst)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 103, in copystat
    os.chflags(dst, st.st_flags)
OSError: [Errno 1] Operation not permitted: '/tmp/pip-Rj2bkf-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/six-1.4.1-py2.7.egg-info'
```

## エラーを見てみた

```
Found existing installation: six 1.4.1
(既存のインストールが見つかりました)
```

- sixとかいうのが入っているらしい
- six:python2系と3系の差異を埋めてくれるユーティリティライブラリ


## すでにいろんな人が書いてた
- ここまで書いててわかったのですが、すでに他の人が書いてました
- [Qiita](http://qiita.com/kawashinji/items/98fd8a917a17c3476091)とか、[SixのエラーでAWS CLIをMacにインストールできない](https://saku.io/failed-to-install-awscli-on-mac/)とか
- でもここまで書いちゃったんで初投稿も兼ねてメモしておきます〜
プラグインの作り方


## 参考
[即時関数のメリットと主な用途](http://analogic.jp/immediate-function/)

## ルール
- グローバルスコープの名前空間を汚染しないように作成する
  - javascript にはスコープが`グローバル`と`関数`しかない
- 即時関数を使用してスコープを作成し、閉じ込める
  - JavaScriptにはアクセス修飾子（`private`や`protected`）がなく、全て`public`となるが、これによりプライベート変数/関数を作成できる

## テンプレート
~~~javascript
if (!window.pluginName) {

  // グローバルに登録されてなければ登録
  window.pluginName = (function () { // 即時関数（スコープを作るため）

    // プライベート変数
    var flag = false;

    // プライベート関数
    function getInfo() {

    }

    return {
      // パブリックメソッド 例：window.pluginName.setEvent();
      setEvent : function() {}
    }
  })();
}

// 実行
window.pluginName.setEvent();
~~~
WaylandクライアントのEGL描画

WaylandクライアントがEGL経由で描画を行う際のサーバーとのやり取りをざっくり解説。
WaylandサーバーはWestonでgl-rendererによる描画、EGL回りはMesaを想定。

## クライアントによる描画

基本的にEGLサーフェスの作成、OpenGLによる描画に関しては通常のX11アプリとあまり大きな違いはない。違いが出るのは`eglSwapBuffers()`からである。

## `eglSwapBuffers()`でのクライアントとサーバの処理

### DRMバッファ作成

#### クライアント側

EGLSurfaceから[PRIME](https://en.wikipedia.org/wiki/Direct_Rendering_Manager#DMA_Buffer_Sharing_and_PRIME)により共有バッファ（クライアントの描画結果が格納されている）のFDを取得して、`wl_drm_create_prime_buffer()`でwl_bufferを作成する。
古いドライバの場合は共有バッファの[GEM名](https://en.wikipedia.org/wiki/Direct_Rendering_Manager#Graphics_Execution_Manager)を取得し、`wl_drm_create_buffer()`で、wl_drm_bufferを持つwl_bufferを作成する。
(FDの方が高速に動作できる)

`wl_drm_create_prime_buffer()`はWaylandプロトコルでサーバへ通知される。

#### サーバ側

Waylandによりwl_drm_buffer作成が通知されると、wayland-drm.cの`create_buffer()`が呼び出され、サーバ側のwl_drm_bufferが作成される。
このとき~~`wayland_drm_bufmgr_reference_buffer()`~~`dri2_wl_reference_buffer`が呼び出され、
`native_display.pipe_screen.resource_from_handle()`(関数ポインタ。実体はGPU毎に設定される)によりクライアントから渡されたDRMのハンドルからDRMバッファ(`wl_drm_buffer.driver_buffer`)を取得する。

### サーフェスコミット

クライアントはバッファ作成後に以下の処理を行う。

2. wl_surface_attachにてバッファをアタッチ
3. wl_surface_damage
4. wl_surface_commit

サーバ側のアタッチ処理はコミットを受けた後`gl_renderer_attach_egl()`にて行われる。
ここでは、`eglCreateImageKHR()`と`glEGLImageTargetTexture2DOES()`を（関数ポインタ経由で）用いて、`wl_drm_buffer.driver_buffer`を直接テクスチャとして使用可能にしている。

ここまでくればあとは、テクスチャをOpenGLで描画してコンポジションするだけである。
[Swift] String配列内の空文字列を全削除

文字列配列から空文字の要素を取り除く方法。

`Array#filter()`使うと楽。

```swift
let testArray : [String] = [
    "",
    "abc",
    "",
    "def",
    ""
]

let resultArray = testArray.filter{!$0.isEmpty}
print(resultArray)  //["abc", "def"]
```

以上。
ビット演算について

社内で先輩エンジニアから教えてもらったビット演算に関する考え方、まだしっかり
理解できていないけど、保管しておきたいので。

------
「フラグを検知する仕組み」と思ってください。
詳しく知りたかったらググってください。いっぱいあるので。
上記の通りフラグを検知できるので、1カラムに保管したデータに対して以下の判定をすることができます。
・「A」があるか？（無いか？）
・「B」があるか？（無いか？）
・「AとB」の両方があるか？（無いか？）
上記の機能によりnのデータを1カラムで表すことができます。
さらに、SQLのWHERE句でも上記の判定をできるので、検索等においても利用できるので大変便利。

但しビットなどといってもデータは単なる「正の整数」（int）なので、32bitで表現できる整数の最大値は「4294967295」になります。
64bitだともっと扱えますがどちらにしても制限がある事には変わりないので32bitの最大値で考えた方が無難です。
（例えばMySQLが64bitバージョンを利用してもrubyが32bitで実行されるとMySQLからデータ取得した時に桁溢れを起こします。
環境に依存するコーディングや設計は極力避けましょう）

そうなると表現できる種類は32通りになります。
よって、選択肢が（増えても）30以下ならビットで表すのも方法の1つ。

ちなみに10進数だと人が目で見て分かり辛いので、プログラム上は通常16進で表記します。
以下はよく使う簡単な例です。

```
●定義
※本当は先日に記載の通り定数化＆配列定義して利用する。
nil            未入力
0x00000        特に無し
0x00001        総合感冒薬
0x00002        咳止め
0x00004        鼻水止め
0x00008        熱冷まし・痛み止め
0x00010        痰を出やすくする薬
0x00020        抗生剤
0x00040        インフルエンザの薬
0x00080        喘息の薬

●データ
0x00038        熱冷まし・痛み止め、痰を出やすくする薬、抗生剤

●SQLの例
例）「痰を出やすくする薬」を含むのを取得
SELECT * FROM interview_sheets WHERE (medecine_requerst & 0x00010)<>0

例）「熱冷まし・痛み止め」「痰を出やすくする薬」の両方を含むものを取得
SELECT * FROM interview_sheets WHERE (medecine_requerst & 0x00018)=0x00018

●rubyの例
例）「痰を出やすくする薬」を含むのを取得
if (medecine_requerst & 0x00010) != 0

end

例）「熱冷まし・痛み止め」「痰を出やすくする薬」を変数にセット
medecine_requerst = 0x00008|0x00010

```

「単純に10進数の0～15を1桁で表す（0123456789ABCDEF）方法」だけで充分です。
換算方法は不要です（必要になったら変換サイトでＯＫ）。
16進数は先頭に「0x」を付けるというルールになっています。
（桁数は「人間の見た目」の為に0パディングしてます。なくても良いです）

```
16進数        10進数
0x0001         1
0x0002         2
0x0003         3
0x0004         4
0x0005         5
0x0006         6
0x0007         7
0x0008         8
0x0009         9
0x000A        10
0x000B        11
0x000C        12
0x000D        13
0x000E        14
0x000F        15
0x0010        16　※Fまで来たので桁を繰り上げる。
0x0011        17
```

昨日の例の定義で、0x001、0x002、0x004、0x008と「飛んで」いるのはビット演算の為です。
0は「0」です。
1はフラグとして利用します。
2はフラグとして利用します。その前に1が登場しましたが数字1個では演算ができませんので2もフラグとして利用します。
3は、その前に登場した1と2の合計が3になるので、3をフラグとして利用すると、1+2を表しているのか、3というフラグを表しているのか区別が出来ません。よってフラグとしては利用しません。
4はフラグとして利用します。3はフラグではない（1+2を表している）ので他に演算するフラグが無い為フラグとして利用します。
、、、を繰り返すと以下のようになります。

```
16進数        10進数
0x0001         1        
0x0002         2        
0x0003         3        =1+2
0x0004         4        
0x0005         5        =2+3
0x0006         6        =2+4
0x0007         7        =1+2+4
0x0008         8        
0x0009         9        =1+8
0x000A        10        =2+8
0x000B        11        =1+2+8
0x000C        12        =4+8
0x000D        13        =1+4+8
0x000E        14        =2+4+8
0x000F        15        =1+2+4+8
0x0010        16        
0x0011        17        =16+1
```


で、上記を繰り返しながら10進数が32bitのintの最大値の4294967295になるのは、
16進数で表すと0xFFFFFFFFになります。
この時「フラグ」として利用できる数が32個になります。

```
16進数        10進数
0x0001         1
0x0002         2
0x0004         4
0x0008         8
0x0010         16
0x0020         32
0x0040         64
0x0080         128
0x0100         256
0x0200         512
0x0400         1024
0x0800         2048
...
```

1248を桁を変えながら繰り返していくので目で見て分かり易いですね。
同じ事を16進と10進で表してみます。

``` 
(0x0110 & 0x0010)<>0　→　0x0110に0x0010が含まれているか？→うん。入ってるね。
(272 & 16)<>0　→　272に16が含まれているか？→は？何言ってんの？となる。
```
初めてのbranch - GitHub Desktopで

# GitHub Desktop ベースでブランチ作成する方法と目的。

「機能が少ない」と言われている GitHub Desktop だけれど、ブランチの作成機能はあった。
なので、その作成方法と、作成結果（Visual Studio Code 含む）をメモ。
今のところタグの作成機能は見つけられてない。

branch の作成目的としては、「後で削除するかもしれないお試しのコードも、履歴管理したくなった」から。
※語弊だが、GUI（GitHub Desktop）での操作は目的じゃないです。容易だった、ってだけ。

なお、作成したbranchでの開発完了後、masterへマージする操作は『[初めてのbranchからmasterへマージ - GitHub Desktopで](http://qiita.com/xingyanhuan/items/772a7d65272f05685bf7)』を参照の事。


# GitHub Desktop からGUIで branch 作成する方法

 1. GitHub Desktop 上上で、ブランチを作りたいローカルリポジトリを選択。
 1. その状態で、上の左よりにある「枝分かれアイコン」をクリック。
![スクリーンショット 2017-02-12 13.45.41.png](https://qiita-image-store.s3.amazonaws.com/0/125588/ffcdc7f5-b839-df07-e83a-29a2e157b317.png)


 1. ブランチ名を入力して「create new branch」ボタンを押す。

作成手順としては以上。
なお、この時点ではリモートには反映されていない。あくまでローカルリポジトリに対する操作。

 - ブランチが作成されると、「枝分かれアイコン」の右側のプルダウンからブランチを選べるようになる。
![スクリーンショット 2017-02-12 13.46.07.png](https://qiita-image-store.s3.amazonaws.com/0/125588/0567c343-d694-a565-2f3d-194947bd8d6c.png)

 - ブランチへ表示を切り替えたところ。
![スクリーンショット 2017-02-12 13.46.24.png](https://qiita-image-store.s3.amazonaws.com/0/125588/5a8f568c-7a3a-3f74-248e-4d237232605e.png)


リモートリポジトリへ反映するときは、「Publish」ボタン（初回）を押す。
2回目以降は「Sync」ボタンになる。
リモートリポジトリへ反映すると、リモートにもブランチ選択が表示される。

- リモート反映前
![スクリーンショット 2017-02-12 23.08.46.png](https://qiita-image-store.s3.amazonaws.com/0/125588/876a6faa-cd54-2bf4-e816-e2654005c20c.png)

- リモート反映後
![スクリーンショット 2017-02-12 23.09.34.png](https://qiita-image-store.s3.amazonaws.com/0/125588/70cb9cf9-249e-6fe0-8d15-55599e50c5f9.png)



で、当然ながら、ブランチにpush (Sync)しても、そのリポジトリに連動させているAzure側には**反映無し**。Azure側の設定は「masterに対して紐づけ」ているので、**期待通り**の動作。**いいねー**。


# Visual Studio Code からの branch へのCommit操作

特に設定は不要。
GitHub Desktop で選択した branch （のローカルリポジトリ）がCommit 対象になる。

.git\HEAD ファイルに、どのブランチが今ターゲット？の情報が記載されており（GitHub Desktopでブランチ切り替える度に実際更新された）、VS Codeでもそのファイルを参照してコミット先を準じてくれるようだ。



# branch を作る目的

今更なんだが、実際に操作してみてその有難味が分った。

- 「とりあえずお試し」で作ったコードの履歴管理できる、つまり「あ、こっちの道じゃなかった」で誤ったCodeをサクッと「無かったこと」にして戻れる安心感、良い♪

- SubVersionと異なって「ローカルにbranchを好きなように切れる」って手軽さもイイねぇ。「実験的なコードや未完成なコードで共有リポジトリを汚したくない」って思ってたから。

- branchの切り替えが高速なのが良い！　フォーカスしているbranchがVisual Studio CodeからのCommitと連動するも嬉しい♪

**いいねー**。



# 参考にしたサイト様

[GitHub Desktopの使い方 - Qiita]
http://qiita.com/yukiyan/items/2ea3dc5813fdba5d9cd2
Riotチートシート

http://riotjs.com/guide/

riotの記法を簡単にまとめました。

### 式評価

`{}` 内に変数などを記述する。

```html
<p>あなたの名前は{name}ですね</p>
```

### エスケープ
`{}` を記述したいがコードを評価されたくない場合。
`\{ 1 + 2 \}`
で
`{ 1 + 2 }`

### ループ

```html
<app>
  <div each={elem, index in array}>
    {index}: {elem}
  </div>

  this.array = ['hoge', 'fuga', 'piyo', 'pompopo']
</app>
```
`array` の要素の数だけ、 `<div>` が増える。
`index`は省略可能。
ArrayじゃなくてObjectでもeachできるが、パフォーマンス的な問題で推奨されない。
また、Arrayの要素がObjectだと `elem` も省略できるが、わかりづらいので個人的に使わない。

### 表示/非表示

```html
<div if={boolValue}>
  boolValueが偽のときは追加されない
</div>
```

```html
<div show={boolValue}>
  boolValueが偽のときは display: none; のスタイルがあたった状態で追加される
</div>
```

```html
<div hide={boolValue}>
  showの逆
</div>
```

### VIRTUAL

ループやifで余分な要素を追加したくない場合は `<virtual>` タグが使える

```html
<dl>
  <virtual each={item in items}> <!-- virtualタグ自体は追加されない -->
    <dt>{item.key}</dt>
    <dd>{item.value}</dd>
  </virtual>
</dl>
```

### CSSクラス

クラスの指定にObjectが使える

```html
<div class={pom: name === 'popo'}>{name}</div>
```

`name` が `'popo'` なら `<div class="pom">popo</div>` に変換される。

## おまけ

### 偽とみなされる値

- `false`
- `null`
- `undefined`
- `0`
- `NaN`
- `''` 空文字列

### 試すときは
ブラウザで試したいときは http://riotjs.com/play/
手元で試したいときは https://github.com/pompopo/riot-boilerplate
Herokuのデータベースを本番とテストで切り替える

# データベースの接続を自動化

getenvでHerokuのアプリと連携しているデータベースの接続情報が取得できるため、もし環境変数がない場合は、実行環境がローカルになる。


```php

if (getenv('DATABASE_URL')) {

    // heroku
    $dbUrl = parse_url(getenv('DATABASE_URL'));
    $dbName = ltrim($dbUrl['path'], '/');
    $dbHost = $dbUrl['host'];
    $dbUser = $dbUrl['user'];
    $dbPass = $dbUrl['pass'];
} else {

    // macbook
    $dbHost = "localhost";
    $dbName = "test";
    $dbUser = "user";
    $dbPass = "password";
}

ORM::configure("pgsql:host={$dbHost};dbname={$dbName}");
ORM::configure('username', $dbUser);
ORM::configure('password', $dbPass);

```
BoardのUI変更、Issueの複数選択、IssueとPRsの紐付けについて

最近（2017年2月13日現在）のZenHub事情です。

## Boardの表示に関するUIが1箇所にまとまった

![a000398f-7107-473f-bd82-e00d25135784.gif](https://qiita-image-store.s3.amazonaws.com/0/29064/6e7f1098-93b0-9733-6dd3-1306d12d450d.gif)

ツールバーだったけど、流石に限界を感じたのかドロップダウンメニューに。

## BoardでIssueを複数選択できるようになった

[Change(b)log: Bulk actions on the task board](https://www.zenhub.com/blog/task-board-bulk-actions/)

![67af3730-3ab5-47a4-a19c-31dc41683941.gif](https://qiita-image-store.s3.amazonaws.com/0/29064/5b0806fd-b3a0-4bdc-a64f-938aa9e8e216.gif)

顔アイコンをクリックして複数選択。ツールバーからPipeline移動したりする。

## PRsをIssueに関連付ける

[Change(b)log: Link issues & pull requests, and much more.](https://www.zenhub.com/blog/github-issue-pull-request-linking/)

![27f3e346-3273-470d-b50f-b5d4f3003300.gif](https://qiita-image-store.s3.amazonaws.com/0/29064/3db03527-1464-68a2-4c86-32d6f7b855fc.gif)

PRsで`Connect this pull request with    an existing issue` の`Connect with an issue`を押す

![373cbac2-36c3-4b98-b376-865d99ff88d6.png](https://qiita-image-store.s3.amazonaws.com/0/29064/ec58a833-2fc1-07ae-2333-c1ad2890a11b.png)

Boardでの表示。入れ子になる。関連づいたPRsはPipelineの一番左に移動する模様。
Visual Studio 2013でC# 6.0を使いたかった話(成功せず)



やりたいこととできていること

- Visual Studio 2013でC# 6.0を使いたい
- コード補完をうまくやりたい（using staticなどの新機能をエラー扱いにしてほしくない。)
- C#6.0自体のインストールはできていて、コンパイル自体はできる


## Nuget Package Managerをインストール

下記からNuGet Package Manager for Visual Studio 2013 をインストール。

https://marketplace.visualstudio.com/items?itemName=NuGetTeam.NuGetPackageManagerforVisualStudio2013

## Visual Studio を再起動

### Package Managerを開く

プロジェクトを開き、
「ツール」 > 「NuGetパッケージマネージャー」 > 「パッケージマネージャー」
でコンソールを開く。

### コンソールに以下を打ち込む

```shell-session
PM> Package-Install Microsoft.Net.Compilers
```
```shell-session
PM> Package-Install Microsoft.CodeAnalysis
```

・・・しかし。

> Install-Package : 'System.Resources.ResourceManager 4.0.0' パッケージには NuGet クライアント バージョン '3.0' 以降が必要ですが、現在の NuGet バージョンは '2.12.0.817' です。

ひとまずバージョンを落としてみよう。

```shell-session
PM> Package-Install Microsoft.CodeAnalysis -version 1.0.0
```

インストールは成功したが、
using staticなどはやはりどうしてもだめみたい。


今日のところは諦めよう。



誰か知っている方がいたら・・・！
RescaleAPI Hands-on (ver 2017/02/13)



本ハンズオンでは、ファイルをアップロードし、Hellow world ジョブを投入するところまでを実施します。

参考) https://rescale.github.io/api-docs/#introduction


0. 事前準備 (最初に一度必ず実施)
=========================

- [STEP0 事前準備](http://qiita.com/daikumatan/private/3b0f50926134a7ba7a8e)を行ってください。下記を設定します。
	- API Token (APIキー)の設定
	- スクリプト保存先の設定
	- Jqのインストール

1. Tutorial APIを使ってジョブ投入を行なう
===================================


上から順番に行ってください。

- [STEP1: Fileのアップロード](http://qiita.com/daikumatan/private/bb409e64ba17fd99e007)
	- 引数: ファイル名
	- 返り値: fileId(アップロードしたファイルに対応)
- [STEP2: ジョブの作成](http://qiita.com/daikumatan/private/12f2b12f0c72a7583fc7)
	- 引数: fileId
	- 返り値: jobId 含むJSON
- [STEP3: ジョブの実行](http://qiita.com/daikumatan/private/c892f08e6a1bc34bf5d3)
	- 引数: jobId
	- 返り値: なし
- [STEP4: JOBのモニタリング](http://qiita.com/daikumatan/private/b6468d81bd92fcadca0e)
	- 引数: jobId
	- 返り値: JSON
- [STEP5: 計算結果の中からダウンロードしたいファイルの fileId を調べる (計算完了後)](http://qiita.com/daikumatan/private/1c77375807d2b0eb5660)
	- 引数: jobId
	- 返り値: fileId(ダウンロードするファイルに対応)
- [STEP6: 計算結果の中から特定のファイルをダウンロードする (計算完了後)](http://qiita.com/daikumatan/private/3d9161b875e9ed27f878)
	- 引数: fileId(ダウンロードするファイルに対応)
	- 返り値: なし


2. その他、よく利用するAPI
============================

- [ジョブの詳細情報の取得](http://qiita.com/daikumatan/private/20059e317c745e32d069)
- [クラスタ構築後のマシンへのsshログイン情報の取得](http://qiita.com/daikumatan/private/633311956ff53c5f2add)
macOS 10.12 (Sierra) にしてから brew upgrade が実行されない

# 症状

```sh
$ brew upgrade
Warning: You are using OS X 10.12.
We do not provide support for this pre-release version.
You may encounter build failures or other breakages.
Please create pull-requests instead of filing issues.
```

```sh
$ brew -v
Homebrew 0.9.9 (git revision 06fe; last commit 2016-08-10)
Homebrew/homebrew-core (git revision b163b; last commit 2016-08-10)
```

# 原因

Homebrewの"Update Bug"

# 解決方法

```sh
cd $(brew --repo); git fetch; git reset --hard origin/master
```

# 出典

https://github.com/Homebrew/brew/#update-bug
Basic認証のやり方


毎回ぐぐるので

## htaccess に記述

````
AuthUserfile /app/.htpasswd
AuthGroupfile /dev/null
AuthName "Please enter your ID and password"
AuthType Basic
require valid-user
````

`AuthUserfile`には `.htpasswd`のパスを記載する。

## htpasswd を作成

```
htpasswd -b ./.htpasswd {username} {password}
```

`htpasswd`コマンドを使用して `htpasswd`ファイルにユーザを追加出来る。

`-c`オプションを付けるとファイルの生成まで行ってくれる模様。
バッチ処理における検討事項

# 概要

バッチ処理における検討事項のメモです。

# バッチ処理の構成

基本としてバッチ処理は以下の構成となっている。

1. 入力
2. 加工
3. 出力

# 検討事項

- 実行場所（どのサーバで実行する？）
- 起動方法（定期実行？随時実行？）
- 並列・直列
- 前後関係
- 排他制御
- トランザクション制御
- ロギング
- リソース監視
- 例外検知
- オンライン処理との関係
Cocoapodsをアップデート（1.2.0）したら、link_withでエラー

# エラー
Cocoapodsを1.2.0にアップデート後にライブラリがアップデートしているか確認したらlink_withでエラーになった

```
$ pod outdated
link_with 'xxxxx', 'xxxxTests'
```

# 原因
それまでPodfileにターゲットの指定で
link_with 'xxxxx', 'xxxxTests'
と描いていたが、
1.0.0から書き方が変わった
# 対応
https://guides.cocoapods.org/using/the-podfile.html
を参考に「abstract_target」を使用する

```
platform :ios, '8.1'
inhibit_all_warnings!

abstract_target 'BasePods' do
    ## Networking
    pod 'AFNetworking', '~> 2.6'

    # Twitter
    pod 'TwitterKit', '~> 1.9'
    pod 'Fabric'

    # 実際のターゲット
    target 'TargetNameOne'
    target 'TargetNameTwo'
end
```
cssの意外と知らない用語

#cssを書く機会が多い人が覚えたらストレスフリーになる用語

##border

divの周りに黒い枠を入れる<img width="574" alt="スクリーンショット 2017-02-13 11.21.31.png" src="https://qiita-image-store.s3.amazonaws.com/0/158635/1384b2d4-df5b-548f-54f4-5e365183db72.png">

div {  
    border: 1px solid #000000;  
}  

種類
```none
枠線なし（ボーダーの幅の値は強制的に0になる)
dotted
点線（丸い点線）
dashed
破線（四角い点線）
solid
実線
double
二重線
groove
立体枠（窪み）
ridge
立体枠（隆起）
inset
立体枠（内側全体が窪み）
outset
立体枠（内側全体が隆起）```

また、border-radiusで角を丸くできます。下記のようにかけます。

例
border-radius: 5px;

##letter-spacingプロパティ
文字の間隔を設定できる
例
letter-spacing: 1px

##displayプロパティ

displyプロパティは解釈が難しいので表で表示します。

```inline・・・インラインボックスを生成する
block・・・ブロックボックスを生成する
inline-block・・・表示はインラインボックスだが、ブロックボックスのように高さや横幅、margin、paddingを指定できる。
table・・・table要素のような表示になる
table-cell・・・td要素のような表示になる
Windows10で無線LANをアドホックモードで使う

#社内LANにつなげないこっそりシステムの構築で
こっそりwebサーバ立ち上げてデモ環境作ろうと思ったんだけど
社内規則で勝手に既存ネットワークにサーバたてられなかったので
新しくネットワーク作ってそっちでやることにした。
ほんとはルータとかいろいろ買い揃えてやりたいんだけど
時間もお金もないのであまったボロノートPCをサーバ兼APとして活用する。
クライアントはiPhoneの予定。

#TL;DR
windows10のノートPCをwebサーバ兼APにしてiPhoneから接続する！

#アドホックモードの追加
ネットワークと共有センターの「新しい接続またはネットワークのセットアップ」からできるって調べたんだけど
なんでか自分のPCにはアドホック接続の新規追加ができないようになってた。
無線LANをONにしたりほかの接続先を消してみたりしたけどだめ。

#アドホックモードの追加2
仕方がないのでほかの方法を調査した結果
「ワイヤレスネットワークに手動で接続します」でセットする
→まだこれだとアドホックではなく、単純にどこかにアクセスする側

コマンドプロンプトを開いて、こんな感じのコマンドを打つ

```
netsh wlan set profileparameter name="name_test" connectiontype=IBSS
```

name_testはさっき作ったネットワークの名前ね。うまくいったら続けてこのコマンド

```
netsh wlan connect name="name_test"
```
これもうまくできたらアドホック確立！
最初うまくいかなくてあせったけどwirelessがOFFになってただけだったわ

#iPhoneと接続
iPhoneでwifi接続しようとすると、追加した名前がでてくるので選択。
たぶんこのままだとIPアドレス振られてないので静的IPを適当に振って接続。
PC側からping飛ばして応答があれば接続OK

#webサーバ
疲れたから続きはまたこんど…
Network > Link > TCP/IPの通信モニタ > netshコマンド / Microsoft Message Analyzer: ファイルオープン時にエラー

```txt:動作環境
Windows 7 pro (32bit)
```

TCP/IPの通信をモニタしたい。
WireSharkが広く使われているように思う。問題はWireSharkを開発環境のPCにインストールしてしまうこと。
(トラブル予防のため、できるだけツールは開発環境のPCにはインストールしたくない)。

WireSharkをインストールせずに使う方法については、以下に記載がある。
https://ask.wireshark.org/questions/7983/any-way-to-run-wireshark-standalone-not-installing-it
自分が考えているものとは違う。

別途、コマンドでWireSharkの通信モニタに相当するものを探してみた。
netshを使った例がある。
https://isc.sans.edu/forums/diary/No+Wireshark+No+TCPDump+No+Problem/19409/

### 開始

管理者権限のDOSプロンプトで以下のようなコマンドを実行する

```
C:\>netsh trace start capture=yes IPv4.Address=192.168.122.2
```

### 停止

```
C:\> netsh trace stop
```

### 生成ファイル

```
C:\Users\[someUser]\AppData\Local\Temp\NetTraces
```

のフォルダに以下のようなファイルが生成された。

- NetTrace.cab
- NetTrace.etl

これらのファイルを閲覧するためのツールの**<font color=red>インストール</font>**が必要。

.cabファイルの中身を見ることで、通信モニタ情報があるのかもしれないが。

### etl閲覧ツール

別のPCにて上記のファイルを閲覧するツール(Microsoft Message Analyzer)をインストールした。

[Powershellにてパケットダンプを取得する方法](http://dev.blog.fairway.ne.jp/powershell%E3%81%AB%E3%81%A6%E3%83%91%E3%82%B1%E3%83%83%E3%83%88%E3%83%80%E3%83%B3%E3%83%97%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/)

Microsoft Message Analyzerにてetlファイルを開こうとしたが、エラーとなった。

> Modules Loaded Errors of warnings were found when loading modules.
KobitoをUbuntu用にパッケージングする

~~KobitoはElectronベースなので，Win / Macでしか配布されていなくても，Linuxで実行することができます．~~

Kobito for WindowsはElectronベースなので，Winでしか配布されていなくても，Linuxで実行することができます．
方法はすでにQiitaでいろいろ記事になっているようですが，環境が変わったのかうまく行かなかったので備忘録．

おおかた下の記事のとおりです．
http://qiita.com/sayamada/items/2d13189976b55ee27bee

# 失敗箇所

上の記事の中でのパッケージングの項目で
`electron-packager . kobito  --out=/tmp --platform=linux --arch=ia32 --version=0.30.0 --overwrite`
を実行しても `The version parameter is deprecated, use electronVersion (or --electron-version in the CLI) instead` といわれ， `--version` を `--electronVersion` に変えても `Unable to determine Electron version. Please specify an Electron version` と言われ，ビルドできませんでした．

# package.json編集

package.jsonのdependenciesのブロックに， `"electron-prebuilt": "^1.14.15"` を追加します．
その後 `electron-packager ./ kobito --platform=linux --arch=x64` でパッケージングできました．
3次元点群データ表示画面（java3d）

#3次元点群データ表示画面（java3d）
　視点を変えながら3次元のデータを確認できる画面がほしくて作成。

####画面
![image](https://qiita-image-store.s3.amazonaws.com/0/164812/83400c33-cd1c-ac58-e828-950ed05124cb.png)

####機能
　実行内容を選択して実行ボタンを押すことで点群へ特定の処理を行い結果を表示できる

　例、下記画像の点を移動させる
　![image](https://qiita-image-store.s3.amazonaws.com/0/164812/f741ebc6-6fda-b2e1-22af-d08ae543499a.png)
　実行内容で「02,点群取り込み＋移動」を選択
　![image](https://qiita-image-store.s3.amazonaws.com/0/164812/7d42c352-ccd2-2781-9a44-81374cf1ff1b.png)
　移動距離を入力して実行
　![image](https://qiita-image-store.s3.amazonaws.com/0/164812/4160a7d3-2b73-5414-6921-b5fbbf961527.png)
　移動後の状態を確認できる
![image](https://qiita-image-store.s3.amazonaws.com/0/164812/337131cc-4d00-ef76-af56-70a5121f918a.png)

####データについて
　x,y,z,color(int型のRGB)のデータをテキストファイルへ保存して読み込む
　![image](https://qiita-image-store.s3.amazonaws.com/0/164812/b0be0d96-0a8c-9e2c-4cf3-0366eeefaf7c.png)

####今後
　kinectのデータと取り込んでいろいろな処理を試みたい。
API23未満でTextViewのDrawableにTintをかける

※ API17の端末でTintがかからない問題があったので、サポートしているバージョンによってはこの方法は使えません。ちなみにAPI16では大丈夫でした。

TextViewにはAPI23以降で `android:drawableTint` があり、drawableの色を変更できます。API23未満の場合にもTintをかけたかったので、DataBindingで `BindingAdapter` を作って対応しました。

# BindingAdapter
こんな感じで作っておきます。クラスはどこでもいいです。自分は `BindingAdapter` をまとめたクラスを作って置いています。

```java
@BindingAdapter("drawableTintCompat")
public static void setDrawableTintCompat(TextView textView, int color) {
    Drawable[] drawables = textView.getCompoundDrawables();
    if (drawables.length == 0) {
        return;
    }

    for (int i = 0, size = drawables.length; i < size; i++) {
        Drawable drawable = drawables[i];
        if (drawable == null) {
            continue;
        }

        drawable = DrawableCompat.wrap(drawable);
        DrawableCompat.setTint(drawable, color);
        DrawableCompat.setTintMode(drawable, PorterDuff.Mode.SRC_IN);
        drawables[i] = drawable;
    }

    textView.setCompoundDrawablesWithIntrinsicBounds(drawables[0], drawables[1], drawables[2], drawables[3]);
}
```

# Layout
使う時はこんな感じで指定します。

```xml
<TextView
    ...
    android:drawableLeft="@drawable/ic_edit_24"
    android:drawableStart="@drawable/ic_edit_24"
    android:text="@string/edit"
    app:drawableTintCompat="@{@color/grey3}" />
```

以上です。