OmniAICreator/Qiita-1.07M huggingface dataset:
'config.h' file not found

# 参考にしたサイト
https://github.com/facebook/react-native/issues/14382
https://github.com/AgNm/third-party

```
$ rm -rf node_modules/react-native/third-party/
$ cd [適当なディレクトリ]
$ git clone git@github.com:AgNm/third-party.git
$ mv third-party/third-party [自分のプロジェクト]/node_modules/react-native/
$ cd [自分のプロジェクト]
$ npm install
$ react-native bundle --platform ios --dev false --entry-file index.js --bundle-output iOS/main.jsbundle
```
【Kaggleのはじめかた】チュートリアル ML編 part1

# 1．この記事の趣旨
Kaggleを始めよう！と思い立ったものの、
どこから手を付けたらいいの？😅
という方のために、kaggleのturtorialを日本語で簡単に解説したいと思います

# 2. turtorialのページ
https://www.kaggle.com/learn/overview
ここにいくつかのチュートリアルがあり、kaggle内のkernelを使用することでpythonの環境構築をせずとも、ブラウザ上でコーディング&実行が可能です。
kaggleのkernelについてはこちらを参照してください
[パワーアップしたKernelでKaggleに飛び込もう](https://qiita.com/jagainu/items/2a1e3779f944588d29de)

#3. Machine Learning をやってみる
![image.png](https://qiita-image-store.s3.amazonaws.com/0/214036/71a036be-771d-b777-100c-37c545767fd6.png)
この画像のやつをクリックしてみると、
*Level 1*
*Level 2*
それぞれ全8回ほどの記事が出てくるかと思います。ただ、これら二つとも1時間あれば簡単に終わってしまう内容なので、気負うことはありません。
では、まずLevel 1からやってみましょう

[【超初心者向け】Kaggleのはじめかた part2](https://qiita.com/mozi/items/73db5bfa45f64ae4e05a)
《実務経験ゼロ》元リクルート営業が、プログラミングを独学で身につけSEに転職した件

## この記事の内容（予定）
プログラミングを独学で身につけ、SEに転職する方法

・実務未経験だけどエンジニアに転職したい
・採用計画の参考にしたい

と思っている人・企業に役立てる情報を投稿する予定。

## この記事を描いた人の特徴
`大学時代（文系・教育学部）`
・プログラミングに全く興味なし
・英語嫌い
・趣味：長期休暇で海外に行くこと

→ **将来SEになるとは毛頭考えていなかった。**

`大学卒業後`
・紳士服の販売職（伊勢丹）
・求人広告の外勤営業（リクルート）を経験

`2016/10頃〜`
プログラミングの学習開始

`学習した言語など`
HTML/CSS/Ruby/Rails/Python/Java/PHP/Swift
GitHub/Heroku/SQL/jQuery/Bootstrap

`2018/02〜`
転職活動開始

`2018/07〜`
外資系SEとして勤務予定

## 目次
1. プログラミングを勉強しようと思った理由
2. プログラミングの学習歴
3. オススメ学習方法
4. 転職活動
5. 今後描きたいキャリア

## 1. プログラミングを勉強しようと思った理由
### きっかけは、求人広告の営業
リクルートで求人広告の営業をしている時に、紙媒体（タウンワーク）よりWEB媒体（フロムエーなど）の集客力を見せつけられた。

そこから「プログラミングの知識を知っておいた方がいいかもしれない」と思い、プログラミングに挑戦しようと思った。

### **"社会が抱える課題を、プログラミングで解決したい。"**
自分の頭の中で描いたものが少しずつ目の前で形になっていくのが面白かった。

「プログラミングで、`社会が抱える課題を解決したい`」と思い、エンジニアに転職しようと思った。

## 2. プログラミングの学習歴
`2016/10頃`
Swift

**初めて学ぶプログラミング言語をSwiftにした理由**
・自分が持っているPC(MacBookAir)で、無料でiOSアプリを作成できると聞いたから。
・iOSアプリを作成できたら面白そうと思った。

`2016/11頃〜2017/02頃`
HTML/CSS/JavaScript/jQuery

`2017/03頃〜2018/0１頃`
Ruby/Rails
Python

`2018/02頃〜2018/05頃`
Java
PHP

`その他勉強したもの`
SCSS
Bootstrap
Heroku
GitHub
SQL

## 3. オススメ学習方法
**Progate**
https://prog-8.com/

**学習した内容を一度咀嚼して、GitHubやQiitaにまとめ直してUP**
《GitHub》 https://github.com/tanakadaichi1989
《Qiita》 https://qiita.com/tanakadaichi_1989

## 4. 転職活動
`2018/02頃`
自分の強み・今後描きたいキャリアを整理

この時に利用したサービス：**HELLO LIFE SCHOOL**
https://hellolife.jp/

`2018/03頃〜2018/05頃`
職場見学・面接

この時に利用したサービス：**Wantedly**
https://www.wantedly.com/


`転職活動で工夫したこと`
・面接時にポートフォリオを提出
・Qiita/GitHubにUPしたコードがあることを採用担当に伝える

`転職の時に聞かれたこと`
・なぜ、エンジニアになりたいのか？
・どんなエンジニアになりたいか？
・ポートフォリオに載っているアプリを作ろうと思ったきっかけは？
・ポートフォリオに載っているアプリは、どんな技術・DBを利用して作成したのか？
・今興味ある技術は？

## 5. 今後描きたいキャリア
### なりたいエンジニアの姿
`社会が抱える課題を解決するエンジニア`

### 挑戦したいこと
・業務系アプリ
・WEB系アプリ
・人工知能
・基本情報技術者試験
・応用情報技術者試験

## 備考
2018/06/11 投稿
2018/06/14 編集

※今後、各章を編集・投稿予定。
Atom 閉じタグを自動で挿入する

# やりたい事
閉じタグを自動で挿入する。　
`<div>` と打ち込めば `</div>` が勝手に挿入されてほしい。
[PhpStorm](https://www.jetbrains.com/phpstorm/) のサブエディタとしてAtomを導入しようとした際に、「あれ、PhpStormでは自動挿入されるのにAtomはされないなぁ」と思い調査
# 実現方法
[autoclose-html](https://atom.io/packages/autoclose-html)というパッケージをインストールする。
## 補足：パッケージのインストールってどうやってするんだっけ？
1. Atom開く
2. 「Preference」(環境設定)クリック
3. 「+Install」をクリック
4. 「+Install Packages」のテキストボックスにインストールしたいパッケージの名前を打ち込んで検索→インストール
機械学習論文読みメモ_127

[Few-shot Autoregerssive Density Estimation](https://arxiv.org/abs/1710.10304)
Deep autoregressive modelはImageNetをはじめとする自然画像の分布学習においてSOTAの性能を発揮してきた。
しかしながらこのモデルは多くのデータと長い学習時間を必要とする。
人間が可能なような、少ない量のデータから対象のコンセプトを学習する手法が理想とされる。
本論ではmeta-learning及びneural attentionの手法をdeep autoregressive modelと組み合わせる事で
few shot learningを可能にする手法を提案する。
PixelCNNに対して上記構造を加える事でSOTAの性能を発揮する事に成功した。

[Learning Tranferable Architectures for Scalable Image Recogniton](https://arxiv.org/abs/1707.07012)
画像分類のモデルを構築する際、多大なarchitecture engineeringが
要求される。
本論ではこのプロセスを自動化するために、対象となるデータに対して
直接architectureを学習していく方法を提案する。
この手法は対象のデータが大きい場合に問題となるが、
提案手法では、はじめに小さなデータセットを用いてarchitecture blockを
学習した上でその転移学習を行う。
特にCNNをCIFAR10の小さなデータセットに対してarchitectorを学習し
そのarchitecture blockをスタックして作成したarchitectureを用いて
ImageNetに対する学習を行う。
結果ほSOTAの性能を実現しつつ処理負荷を軽減したモデルを発見できた。

[Don't Decay the Learning Rate, Increase the Batch Size](https://arxiv.org/abs/1711.00489)
learning rateを学習が進むにつれてdecayするのは一般的である。
本論では、learning rateをdecayさせる代わりに、
バッチサイズを増やしていくことで同じ効果を発揮させることが可能なことを
示す。
この手法はSGDをはじめとして、Nestrov momentum, Adamなどの最適化手法に
対して有効である。
この手法を利用する事で同じ学習エポックで同じテスト性能を得る事が出来る。
さらにこの手法では、並列計算と組み合わせる事で大きいバッチサイズを利用した
高速な学習を実現できる。
またバッチサイズとlearning rateの相似関係を仮定して調整する事で、
さらにバッチサイズを増やし高速化を可能にした。
flowでプライベートフィールドを使う

実はFlow v0.54の段階でプライベートフィールドは使えていたんですが、`Class Public Instance Fields & Private Instance Fields`がStage 3になってそろそろな感じなので試してみます。
とはいっても、前から`_`プレフィックスでプライベートとかできたんですが、まあStage3まできたらtc39に感謝しつつ`Private Instance Fields`を使ってもいいと思います。

他のproposalsを確認するには、https://github.com/tc39/proposals あたりを見るとよいでしょう。

## インストール

```
yarn add --dev @babel/cli @babel/core @babel/preset-flow @babel/preset-stage-3 flow-bin
yarn run flow init
```

.babelrc

```
{
  "presets": [
    "@babel/preset-stage-3",
    "@babel/preset-flow"
  ]
}
```

## サンプル

とりあえずプライベートインスタンスにアクセスできないことを確認する

```js
// @flow
class SuperCounter {
  count1 = 0
  #count2 = 0
}

class Counter extends SuperCounter {
  #count3 = 0
  inc () {
    this.count1 += 1
    this.#count2 += 1 // error
    this.#count3 += 1
  }
}
```

![スクリーンショット 2018-06-11 05.41.07.png](https://qiita-image-store.s3.amazonaws.com/0/15319/532ba7e1-e45a-0952-1d65-da88db675039.png)

もちろん、コンパイルできない。

```
$ yarn run babel src -d dest

SyntaxError: /Users/akameco/src/github.com/akameco/toy-box/js/flow-private-field/src/index.js: Unknown PrivateName "#count2"
   9 |   inc () {
  10 |     this.count1 += 1
> 11 |     this.#count2 += 1
     |          ^
  12 |     this.#count3 += 1
  13 |   }
  14 | }
```

## 気持ち
型エラーは効くのだけど、Atomだと`#`をつけた時点で補完が効かなくて、現状の使い心地は微妙。Flow v0.74でLSP対応のための大幅な進歩したらしいからこの辺は今後に期待といった感じか。
【備忘録】git resetの基本的な使い方

##-目的
・git resetの使い方を簡単に覚えておきたい

##-参考
・先に参考資料を挙げておく。これが図解されてて一番分かりやすい。
http://d.hatena.ne.jp/murank/20110327/1301224770

##-使い方

```ruby:コマンド
git reset
```

→単純にgit resetをすると、ステージの内容がHEADの内容で上書きされる。

```ruby:コマンド
git reset --ファイル名
```

→ステージの特定のファイルだけ、HEADの状態に戻したい時は、オプションとしてファイル名を指定する

```ruby:コマンド
git reset --hard
```

→作業ツリーの内容も、ステージの内容もHEADに戻したい時に使う。
→つまり、直前のコミット以降の変更を全て破棄するコマンド(作業ツリーの内容が破棄されるので注意が必要)

##-補足
・余談だが、ステージの内容が見たい時は、git ls-filesでステージにあるファイルを一覧で、git ls-files -sでハッシュなども含めて一覧で確認できる。
ebコマンド一覧を備忘録として残す

##コマンド一覧
aws cliとか必要なツールは諸々揃ってる前提で書きます。

###beanstalk環境の初期化
```Bash
eb init
```
・デプロイしたいディレクトリの一番上で行う
（railsの場合だとgemfaileとかが置いてる階層）
・まずこれをしてから他のebコマンドが使えるようになる


###アプリケーションの作成
```Bash
eb create
```
・アプリケーションが作成できる
・対話形式で設定を決めていく

###環境一覧確認
```Bash
eb list
```
・複数の環境を持っている場合は環境の一覧を見れる
・自分が現在見ている環境に*がつく


###環境変更
```Bash
eb use <環境名>
```
・eb listで出てくる環境一覧の中から環境を変更できる（見ている環境を変更できる）
・git checkout <ブランチ名>　的なやつ
・eb ブランチ　切り替え　とか　eb 環境　切り替えとかでググったやつ

###現在環境確認
```Bash
eb status
```
・今見ている環境を確認できる
・そのほかにもバージョンとか、CNAMEとか、ヘルスとか色々見れる


###デプロイ
```Bash
eb deploy
```
・現在見ている環境へデプロイできる
・現在見ている環境はeb statusで確認できる

###ログ
```Bash
eb logs
```
・AWS上のアプリケーションのログが見れる
・beanstalkを使ってデプロイしたアプリのヘルスが赤の時はログを確認すること
・RailsでAPサーバにpumaを使っている場合はpuma.logに有用な情報があるときが多い（主観）



##番外編
###S3にディレクトリごとアップロードする時
```Bash
aws s3 cp UPしたいディレクトリ名　s3://バケット名/ --recursive
```
・カレントディレクトリはUPしたいディレクトリがあるところ
・recursiveをつけないとファイルしか無理なので注意


##終わり

とりあえず使ったことあるコマンドはこれくらい
新しいのを覚えたら追記していきます。

これ便利だよってのがあったら教えてください！
gnuplot備忘録

本記事はgnuplotの基本的な操作は行えるとして、論文や発表に挿入する図やGIFをある程度綺麗にgnplotで作る方法についての私自身の備忘録として残しておく。（随時更新予定）

#gnuplotでグラフを書く
一般にgnuplotを用いてグラフを描くと

```
set term png
set output "output.png"
plot x**2
```

<div align="center">
<img src="https://qiita-image-store.s3.amazonaws.com/0/231944/1ac6da9e-eb7e-9cf5-1d71-fee5fd847943.png" width=70%>
</div>

・・・はっきり言ってダサい。
凡例がダサすぎる。数式の凡例なのだからTimes系フォントで書くべきだ。
そこでcairoというターミナル形式を用いてみる。
<details><summary>cairoについて</summary>
cairoはgnuplotのインストールの際にオプションで指定する必要がある。
以下のページを参照するとわかりやすい。
**[gnuplotをHomebrewからインストールするときの手順](https://qiita.com/noanoa07/items/a20dccff0902947d3e0c)**
</details>
すると

```
set term pngcairo enhanced #enhancedは拡張テキストモードである。
set output "output.png"
plot x**2 title "{/Times-Italic x^2}"
```

<div align="center">
<img src="https://qiita-image-store.s3.amazonaws.com/0/231944/e93268f4-3a1a-42ed-ee27-18c5844d7fe3.png" width=70%>
</div>

若干マシになっただろうか。`title "{/Times-Italic x^2}"` のところは各々自分のお好みのフォントを使えばいいと思う。（もちろん数式なのだからTimes系フォントが好ましいが・・・）

こんなことしなくてもepslatexを使えばいいじゃないかという声もあるだろうが、初めてTeXやパワーポイントに挿入する際にepsはややこしすぎる。と思う。
pdfやpngならもう少し直感的に挿入できると感じる。
ハッシュテーブルの長さに「素数」を用いたほうが良い理由

任意のデータをより効率的に検索する実用的な方法として、
ハッシュテーブルを用いた実装が挙げられます。

ハッシュテーブルの長さには任意の値をとることが出来ますが、
一般的には「素数」を用いるのが良いと言われています。
その理由について厳密な証明をするためには、離散数学に関する知見が必要ですが、
ここでは簡単に、ハッシュテーブルの各スロットに線形リストを持たせた
「チェイン法」を例に、図を用いて説明していきます。

![hash_p.png](https://qiita-image-store.s3.amazonaws.com/0/136786/02652754-e9aa-ebd4-e51f-6e9a214610a8.png)

上図のように、ハッシュテーブルの長さが31スロットのものと32スロットのものを考えます。

ハッシュ関数への入力するキーを「1 ~ 100」までの連番としたとき、
それらの中でも、例えば「16, 32, 48, 64, 80」に注目してみましょう。

ハッシュテーブルの長さに「31」という「素数」を指定した場合は、
先ほどピックアップしたキーに対する剰余（ハッシュ値）が「16, 1, 17, 2, 18」となり、
これらの番号のスロットへ、データが挿入されることになります。
このとき、スロットの使用率は$\frac{5}{31}$です。

しかしながら、ハッシュテーブルの長さに「32」という「2のべき乗」を指定した場合、
各キーに対する剰余（ハッシュ値）は「16, 0, 16, 0, 16」となり、
これらの番号を持つスロットへ、データが挿入されます。
そして、スロットの使用率は$\frac{2}{32}$です。

後者は、明らかにハッシュ値が重複しており、
結果的に、特定のスロットに偏ってデータが挿入されています。

このような事例を回避するために、ハッシュテーブルの長さには「素数」を用いると良いのですが、
それが適当であるのは、今回のように整数や文字列など、全体として連番に近い値をキーとして扱う場合のみです。
逆にそうでない場合は、あえて「2のべき乗」を用いると良いときもあります。

いずれにせよ、入力するデータの性質に応じて、適切なハッシュテーブルの長さを用いていきましょう。

当記事が、どなたかの一助となれば幸いです。
Skeleton-based Action Recognition Using LSTM and CNNを読んだ


- [arXive](https://arxiv.org/abs/1707.02356), [PDF](https://arxiv.org/pdf/1707.02356.pdf)


# 1.どんなもの
行動認識のために人間の骨格情報からLSTMとCNNを組み合わせた方法を提案

# 2.先行研究と比べてどこがすごいの？
CNNベースでは，どうしても3D情報を2D情報に変換する際に時間的な情報を失うことは避けられない
RNNベースでは，関節の相対的関係を探索することで空間的特徴が元の関節の座標位置より良い結果をもたらしたが，複数のリッチな情報を連結して入力しても単一の情報を入力するのと認識率に向上が見られない
本手法は，CNNとLSTMの融合により，良い結果をもたらすものである

# 3.技術や手法の肝はどこにあるか？
![スクリーンショット 2018-06-11 1.20.33.png](https://qiita-image-store.s3.amazonaws.com/0/249838/cdad2390-a453-33e2-ce30-6da7fdc542fc.png)
3つのLSTMモデルと7つのCNNモデルからなるニューラルネットワーク
スケルトンシーケンスに様々な手法を適用することで，空間的，時間的な特徴を得る
LSTMでは時間に依存しない空間情報を持つ３つの特徴を得る
CNNはAlexNetを用い，fine-tuningとしてILSVRC-2012の事前学習を使用

スケルトンシーケンスが入力されると，3つの特徴ベクトルと7つのテクスチャマップが生成され，それぞれの異なるNNで学習が行われる．
10個のニューラルネットワークのスコアベクトルが融合，結果ベクトルの最大スコアが，テストシーケンスが認識されたクラスである確率として割り当てられる． 
融合方法として，10個のニューラルネットワークから出力されたスコアベクトルは、要素ごとに最大化，平均化，乗算の３つ方法で評価

# 4.どうやって有効だと検証した？
NTU RGB+Dデータセットで評価
実験は，種類のスコア融合法の有効性，3種類の特徴におけるLSTMモデルのスコアリング，およびCNNモデルとLSTMモデルとの融合スコアを評価するために行った．

![スクリーンショット 2018-06-11 2.37.55.png](https://qiita-image-store.s3.amazonaws.com/0/249838/fd693e7f-16bc-a7a5-64c8-1369b35dde3c.png)



![スクリーンショット 2018-06-11 2.38.03.png](https://qiita-image-store.s3.amazonaws.com/0/249838/ddc0d5ab-4114-5dad-0d51-ec07e95c4e4b.png)
ROSのrosserialを使って、M5stackとwifi通信でLチカする

##目的
ROSのrosserialを使ってM5stackでLチカをする。
ROSには、arduinoと通信を行うパッケージrosserial-arduinoが用意されているが、これはM5stackでも使うことが出来、ROSノード化することができる。rosserial-arduinoは、USBでのシリアル通信だけでなく、wifiでの通信にも対応している。

##環境
  Ubuntu-14.04.1(x64)
  ROS:Indigo


##インストール
[ROSのrosserialを使って、M5stackとUSB通信してLチカする
](https://qiita.com/nnn112358/private/47970f67103f7474e838)を参照して環境整備する。

##Arduinoへの書き込み
ArduinoIDEに下記のソースを貼り付けて、
「スケッチ」→「検証・コンパイル」→「マイコンボードに書き込む」

###Arduinoの実装

rosのNodeHandleを、NodeHandle_<WiFiHardware>型で宣言する。
それ以外はUSB通信と相違ない。


test.ino

```
#include <M5Stack.h>
#include <ros.h>
#include <std_msgs/Empty.h>
#include <WiFi.h>
const char* ssid = "*****";
const char* password = "*****";

WiFiClient client;
IPAddress server(192, 168, 10, 100); //ROS core IP adress
TFT_eSprite img = TFT_eSprite(&M5.Lcd);

class WiFiHardware {
  public:
    WiFiHardware() {};
    void init() {
      client.connect(server, 11411);   
    }
    int read() {
      return client.read();      
    }
    void write(uint8_t* data, int length) {
      for (int i = 0; i < length; i++)
        client.write(data[i]);
    }
    unsigned long time() {
      return millis(); // easy; did this one for you
    }
};
ros::NodeHandle_<WiFiHardware> nh;
void messageCb( const std_msgs::Empty& toggle_msg) {
  img.fillSprite(TFT_GREEN);
  img.pushSprite(0, 0);
  Serial.println("messageCb");
  delay(500);
}
ros::Subscriber<std_msgs::Empty> sub("toggle_led", &messageCb );
void setupWiFi() {
  WiFi.begin(ssid, password);
  Serial.print("\nConnecting to "); Serial.println(ssid);
  uint8_t i = 0;
  while (WiFi.status() != WL_CONNECTED && i++ < 20) delay(500);
  if (i == 21) {
    Serial.print("Could not connect to"); Serial.println(ssid);
    while (1) delay(500);
  }
  Serial.print("Ready! Use ");
  Serial.print(WiFi.localIP());
  Serial.println(" to access client");
}
void setup() {
  Serial.begin(115200);
  M5.begin();
  setupWiFi();
  M5.Lcd.fillScreen(TFT_BLUE);
  img.setColorDepth(8);
  img.createSprite(320, 240);
  img.fillSprite(TFT_BLACK);
  nh.initNode();
  nh.subscribe(sub);
}
void loop() {
  img.fillSprite(TFT_BLACK);
  img.pushSprite(0, 0);
  nh.spinOnce();
  M5.update();
}


```

下記のコマンドで、ROSを立ち上げ、rostopicで「toggle_led」をpublishする。「toggle_led」を受けとると、M5StackはディスプレイでLチカを行う。


````
roscore
rosrun rosserial_python serial_node.py tcp
```

M5Stackの電源を付ける。

```
rostopic pub toggle_led std_msgs/Empty --once
````

<img src="https://qiita-image-store.s3.amazonaws.com/0/73020/6454cb1e-eb50-259c-6170-aa99fe031fde.jpeg" width=40%><img src="https://qiita-image-store.s3.amazonaws.com/0/73020/42f17340-c65c-2091-ee06-f6da3d512045.jpeg" width=40%>


##参考
rosserial_arduino Tutorials
http://wiki.ros.org/rosserial_arduino/Tutorials
ROS serial for ESP8266 over WiFi:
https://github.com/agnunez/espros
ROSのrosserialを使って、M5stackとUSB通信してLチカする

##目的
ROSのrosserialを使ってM5stackでLチカをする。
ROSには、arduinoと通信を行うパッケージros-indigo-rosserial-arduinoが用意されているが、これはM5stackでも使うことが出来、ROSノード化することができる。

##環境
  Ubuntu-14.04.1(x64)
  ROS:Indigo


##インストール
rosserialとrosserial-arduinoをapt-getでインストールする。

ROS Indigoの場合

```
 sudo apt-get install ros-indigo-rosserial-arduino
 sudo apt-get install ros-indigo-rosserial
```

ROS kineticの場合

```
 sudo apt-get install ros-kinetic-rosserial-arduino
 sudo apt-get install ros-kinetic-rosserial
```

###ArduinoIDE+espressif+M5stacklibをインストールする。
[Ubuntuで始めるM5stack](https://qiita.com/nnn112358/items/0da5d51e7283143b6faf)
を参考にして、ArduinoIDEとespressifとM5stackライブラリをインストールする。


###ArduinoIDEにros_libを入れる。

ArduinoIDEのスケッチ→ライブラリをインクルード→ros_libからインストールする。

![img.jpg](https://qiita-image-store.s3.amazonaws.com/0/73020/7a40e8c6-d854-a363-12e9-8590f30a486b.jpeg)


##デバイスファイルの設定
PCとM5StackをUSBで接続すると、/dev/ttyUSB*のバイスファイルが生成される。
デバイスファイルに書き込み権限をつける。

ttyACM0の場合
```
sudo chmod 666 /dev/ttyUSB0
```

##Lチカのテスト

ArduinoIDEに下記のソースを貼り付けて、
「スケッチ」→「検証・コンパイル」→「マイコンボードに書き込む」

test.ino

```
#include <M5Stack.h>
#include <ros.h>
#include <std_msgs/Empty.h>

TFT_eSprite img = TFT_eSprite(&M5.Lcd);
ros::NodeHandle nh;

void messageCb( const std_msgs::Empty& toggle_msg) {
  img.fillSprite(TFT_GREEN);
  img.pushSprite(0, 0);
  delay(500);
}
ros::Subscriber<std_msgs::Empty> sub("toggle_led", &messageCb );

void setup() {
  M5.begin();
  M5.Lcd.fillScreen(TFT_BLUE);
  img.setColorDepth(8);
  img.createSprite(320, 240);
  img.fillSprite(TFT_BLACK);
  nh.initNode();
  nh.subscribe(sub);
}

void loop() {
  img.fillSprite(TFT_BLACK);
  img.pushSprite(0, 0);
  nh.spinOnce();
  M5.update();
}

```


##ROSからのTopicをSubscribeしてLチカのテスト

ArduinoIDEで下記のソースを貼り付けて、
「スケッチ」→「検証・コンパイル」→「マイコンボードに書き込む」

test_L_tika.ino

```

#include <ros.h>
#include <std_msgs/Empty.h>

ros::NodeHandle nh;

void messageCb( const std_msgs::Empty& toggle_msg) {
  digitalWrite(11, HIGH);
  delay(100);
  digitalWrite(11, LOW);
  delay(100);
}

ros::Subscriber<std_msgs::Empty> sub("toggle_led", &messageCb );

void setup(){
  pinMode(11, OUTPUT);
  digitalWrite(11, HIGH); 
  nh.initNode();
  nh.subscribe(sub);
}

void loop(){
  nh.spinOnce();
  delay(1);
}

```

下記のコマンドで、ROSを立ち上げ、rostopicで「toggle_led」をpublishする。
「toggle_led」を受けとると、M5StackはディスプレイでLチカを行う。

```
roscore
rosrun rosserial_python serial_node.py _port:=/dev/ttyUSB0 _baud:=115200
rostopic pub toggle_led std_msgs/Empty --once
```

<img src="https://qiita-image-store.s3.amazonaws.com/0/73020/6454cb1e-eb50-259c-6170-aa99fe031fde.jpeg" width=40%><img src="https://qiita-image-store.s3.amazonaws.com/0/73020/42f17340-c65c-2091-ee06-f6da3d512045.jpeg" width=40%>


##参考
rosserial_arduino Tutorials
http://wiki.ros.org/rosserial_arduino/Tutorials
ROS serial for ESP8266 over WiFi:
https://github.com/agnunez/espros
MDTrajによるトラジェクトリの解析

# はじめに
分子動力学シミュレーションのトラジェクトリの解析プログラムも、Pythonで作成できる時代になって来たのかもしれない。2018年現在は、MDTraj, MDAnalysisあたりのライブラリが候補かと思う。ここではMDTrajの使い方を述べていく。
http://mdtraj.org/1.9.0/

# インストール方法
以下、CentOS 7.2での設定記録である。
pyenvのインストール
https://qiita.com/iamdaisuke/items/3671032a18f5c4bf37d1

```Bash
git clone https://github.com/yyuu/pyenv.git ~/.pyenv
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
source ~/.bashrc
```

anacondaのインストール
https://qiita.com/y__sama/items/5b62d31cb7e6ed50f02c

```bash
pyenv install anaconda3-4.4.0
pyenv rehash
pyenv global anaconda3-4.4.0
echo 'export PATH="$PYENV_ROOT/versions/anaconda3-4.4.0/bin/:$PATH"' >> ~/.bashrc
conda update conda 
```

MDTrajのインストール
http://mdtraj.org/latest/installation.html

```bash
conda install -c omnia mdtraj
```

# MDTrajの例

色々なことはできるがまずはフォーマットの変換について述べる。
xyzフォーマットの座標とpdbフォーマットのトポロジデータが用意されていて、gro形式にしたい時は以下の様にする。

```python
import mdtraj as md
traj = md.load_xyz('test.xyz', top='test.pdb')
traj.save_gro('out.gro')
```
Laravel5.5の環境をdockerで作ってみる

## 概要
Laravel5.5の環境が触れる環境が必要となったので、dockerでチョチョっと作ってみる。

## ファイル構成
下記のようなファイル構成でひとまず作ってみる。
( Dockerfileは、最終的に別リポジトリに分離、docker-hubに自動buildとして登録 )

```:ファイル一覧
├ docker
│  │ # Apache2.4 (最終的には別リポジトリ管理に...)
│  ├ httpd
│  │  ├ Dockerfile
│  │  ├ server.crt (オレオレ証明書)
│  │  └ server.key (オレオレ証明書)
│  │
│  │ # mysql5.7 (最終的には別リポジトリ管理に...)
│  ├ mysql
│  │  ├ .env
│  │  ├ Dockerfile
│  │  └ my.cnf
│  │
│  │ # node9.11 (最終的には別リポジトリ管理に...)
│  ├ npm
│  │  └ Dockerfile
│  │
│  │ # php7.2 (最終的には別リポジトリ管理に...)
│  ├ php
│  │  ├ Dockerfile
│  │  └ php.ini
│  │
│  └ virtualhost
│     ├ ssl
│     │  │ # www.example.comのオレオレ証明書 (正式な証明書と差し替える)
│     │  ├ server.crt
│     │  └ server.key
│     └ www.example.com.conf
│
├ www
│  └ www.example.com
│     └ public
│        └ index.html
│
└ docker-compose.yml
```

## 環境要件
dockerコンテナは、UID:GID=1000:1000で作成していますので、
volumeを使ってのHOSTとのファイル共有を行う場合は、パーミッション問題に注意ください。

## コンテナ起動
下記コマンドにて上記ファイル一式をダウンロードして、コンテナを起動してみる。

```bash:ターミナル
$ git clone https://github.com/reflet/server-laravel5.5.git .
$ docker-compose up -d --build
```

## データベース作成
お好みのクライアントツールでMySQL5.7に接続し、下記ファイルに記載のクエリを実行してデータベースとユーザーを作成。

```
・File: ./www/www.example.com/sql/auth_db.sql
・Host: 192.168.33.10 (コンテナ起動先のHOSTのIPアドレス - vagrant, mac, linux など)
・Port: 3306
・User: root
・Password: mysql ( ./mysql/.envファイルに記載のパスワード )
```


## Laravel5.5
とりあえず、www.example.comフォルダにLaravel5.5を設置してみる。

### 一からインストールする
```bash:ターミナル
$ docker exec -it php bash -c "rm -rf /var/www/www.example.com"
$ docker exec -it php bash -c "cd /var/www/ && composer create-project --prefer-dist laravel/laravel www.example.com dev-develop"
```

### gitからcloneする
一度インストールしたコードを別リポジトリ管理しているのでそちらからダウンロードして設置する。

```bash:ターミナル
$ cd ./www/
$ rm -rf www.example.com
$ git clone git@github.com:reflet/app-laravel5.5.git www.example.com
$ docker exec -it php bash -c "cd /var/www/www.example.com && composer install"
$ docker exec -it php bash -c "cd /var/www/www.example.com && php artisan key:generate"
```

## 環境設定
Laravelの.envファイルを修正(作成)します。
※ File: ./www/www.example.com/.env

```
APP_URL=http://www.example.com

DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=auth_db
DB_USERNAME=hoge
DB_PASSWORD=development
```

## 参考サイト
- [Laravel5.5でAPI認証のパッケージ(Laravel Passport)を利用する](https://qiita.com/niiyz/items/fffff94acb6061ecc9d4)
7z ファイルを解凍する 【mac】

`GUI`/`CUI` のどちらでも好きな方を選んでインストールして使えばおk


# GUI
## The Unarchiver

```zsh:インストール
brew install --cask the-unarchiver
```
[AppStroreから](https://itunes.apple.com/us/app/the-unarchiver/id425424353?mt=12&v0=WWW-NAUS-ITUHOME-NEWAPPLICATIONS&ign-mpt=uo%3D2)でもインストール可

※ @gawara-t さん、ご指摘ありがとうございました。

---

<img width="146" alt="スクリーンショット 2018-09-27 0.53.30.png" src="https://qiita-image-store.s3.amazonaws.com/0/23248/e54127dc-c8c7-8eb2-c543-0ef31eb78de8.png">

対象の`7z`ファイルを選んで`右クリック（control + クリック）`で「`このアプリケーションで開く`」→「`The Unarchiver.app`」を選択して **解凍** できる。

<img width="649" alt="The_Unarchiver_2_2018-09-27 0.56.07.png" src="https://qiita-image-store.s3.amazonaws.com/0/23248/dc51e77d-49af-253e-dba4-733754176743.png">

---

# CUI

## unar
わりと多くの拡張子に対応した **解凍** パッケージ。
オプション記述なしでパスワード付きファイルも解凍可能。

```zsh:インストール
brew install unar
```
```zsh:解凍
# unar ファイルパス
unar hoge_dir.7z
```
```zsh:解凍先を指定して解凍
# unar -o 解凍先ディレクトリ 圧縮ファイル
unar -o ./test_o/ hoge.7z

# 解凍先ディレクトリが存在しなくても生成して解凍してくれる
```
### パスワード付きの場合
`コマンド実行するとパスワードがコマンド履歴に残るので、業務などでの実行は非推奨`

```zsh:パスワード付きを解凍
# unar 圧縮ファイル
unar hoge_pass.7z
```
```zsh:
# Password (will not be shown): 
```
パスワードを入力して解凍完了

```zsh:パスワード付きをパスワード入力なしで解凍
# unar -p パスワード 圧縮ファイル
unar -p passhoge hoge_pass.7z

# 解凍される
```
※ @EqualL2 さん、ご指摘ありがとうございました。

http://takuya-1st.hatenablog.jp/entry/2016/08/03/145534

https://qiita.com/twittarsan/items/550b18c222ceb75d0181

https://qiita.com/griffin3104/items/948e38aab62bbb0d0610


## p7zip
`7z`ファイル形式の圧縮・解凍が可能なパッケージ。

解凍： `7z x 対象ファイル`
圧縮：`7z u 圧縮後ファイル 対象ファイル`


```zsh:インストール
brew install p7zip
```
```zsh:内容表示
# 7z l ファイルパス
7z l hoge.7z
```
```zsh:解凍
# 7z x ファイルパス
7z x archive4.7z
```
```zsh:パスワード付きファイルだった場合
# Enter password (will not be echoed):
```
パスワード入力して解凍完了


### テスト実行例

```zsh:準備（テスト圧縮）
# 適当なディレクトリ等に移動してから

mkdir hoge; echo 'text_dayo' > hoge/piyo.txt; cat hoge/piyo.txt 

#text_dayo

7z u hoge.7z hoge; mkdir test_dir; cp hoge.7z test_dir; cd test_dir; ls

#hoge.7z
```
```zsh:テスト解凍
7z x hoge.7z

ls
#hoge	hoge.7z

cat hoge/piyo.txt 

#text_dayo
```

### ディレクトリ構成（ツリー）を無視して解凍する場合

```zsh:ディレクトリ構成を無視して解凍
# 7z e ファイルパス
7z e hoge.7z

# ディレクトリ構成は無視され、アーカイブ内の全ファイルが同一ディレクトリ内に解凍される
# つまり、ツリー構造が破壊されるので注意
```

### 圧縮

```zsh:圧縮
# 7z u 圧縮後ファイル名 圧縮するディレクトリ

# testディレクトリをhoge.7zとして圧縮
7z u hoge.7z test
```
```zsh:パスワード付きで圧縮
7z u -p hoge2.7z test
```
```zsh:
# Enter password (will not be echoed):
# Verify password (will not be echoed) :
```
パスワードを2回入力して圧縮完了

https://www.xmisao.com/2014/09/25/debian-linux-extract-7z.html


## unrar

（7z とは関係ないけど。。。）
`rar`形式のアーカイブファイル解凍パッケージ

```zsh:インストール
brew install unrar
```
```zsh:解凍
# hoge.rarを解凍
unrar x hoge.rar
```



# 参考

http://yuyunko.hatenablog.com/entry/20110306/1299413978

http://macrunner.blog.fc2.com/blog-entry-54.html

https://qiita.com/kosuke_nishaya/items/e67aa034ff4ab48139de
Apache HTTP Server の SPDY サポートを有効化する

> [!NOTE]
> この記事は 2013/09/08 に [momoto.github.io](http://momoto.github.io) へ投稿した内容を Qiita へ移行してきたものです

　[mod_spdy](https://developers.google.com/speed/) をつかって Apache HTTP Server の SPDY サポートを有効化します。mod_spdy は [code.google.com](https://code.google.com/archive/p/mod-spdy/) で配布されています。

### mod_spdy の RPM パッケージ 64 ビットをインストールする場合

```shell-session
$ wget https://dl-ssl.google.com/dl/linux/direct/mod-spdy-beta_current_x86_64.rpm
$ rpm -U mod-spdy-*.rpm
```

　at, httpd, mod_ssl などに依存しているようです。

### mod-spdy が提供するファイル

```shell-session
$ rpm -ql mod-spdy-beta
/etc/cron.daily/mod-spdy
/etc/httpd/conf.d/load_ssl_with_npn.conf
/etc/httpd/conf.d/spdy.conf
/usr/lib64/httpd/modules/mod_spdy.so
/usr/lib64/httpd/modules/mod_ssl_with_npn.so
```

　設定ファイルは `load_ssl_with_npn.conf` と `spdy.conf` です。SSL/TLS が有効になっていること、spdy.conf の SpdyEnabled が on になっていること等を確認したら Apache を再起動します。

```shell-session
$ apachectl -M | grep -E "spdy|ssl"
 ssl_module (shared)
 spdy_module (shared)
Syntax OK
$ /etc/init.d/httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]
```

### 画像表示の比較

　同じドメインの画像ファイル 20 個をブラウザに表示する様子を簡単に比較してみます。 正確な比較ではありませんが、リクエストのタイムラインが変化している様子をブラウザの開発ツールからも確認できます。 下記表は、通常の HTTPS から SPDY を有効に切り替えて同じコンテンツをリクエストした様子です:

|| Firefox のネットワークモニタ | Chrome DevToolsのネットワークパネル |
|:---|:---|:---|
| 通常の HTTPS |![0101-ssl-with-firefox.png](https://qiita-image-store.s3.amazonaws.com/0/58/f167b0f3-aa60-b13c-64c5-b0ab58f120b0.png)|![0102-ssl-with-chrome.png](https://qiita-image-store.s3.amazonaws.com/0/58/792518aa-6d91-e527-3830-ec9c75f8cfc0.png)|
| SPDY |![0201-spdy-with-firefox.png](https://qiita-image-store.s3.amazonaws.com/0/58/22297764-0d9a-2364-7ea6-cd80e2af90bc.png)|![0202-spdy-with-chrome.png](https://qiita-image-store.s3.amazonaws.com/0/58/1316f1c0-80c4-b524-7654-290f14bf2e05.png)|

　Firefox では画像ファイルの Sending（リクエスト送信にかかる時間）がほとんどなくなって Waiting（イニシャルレスポンスを待つ時間）に入れ替わっています。 Chrome では画像ファイルのサイズが 0B になっています（code.google.com の Chromium プロジェクトにバグとして報告されているようです [Issue #154706](https://bugs.chromium.org/p/chromium/issues/detail?id=154706)）。

### 画像ファイルをサーバープッシュ

　画像ファイルをX-Associated-Contentでサーバープッシュしています。

| Firefox のネットワークモニタ | Chrome DevToolsのネットワークパネル |
|:---|:---|
|![0301-server-push-with-firefox.png](https://qiita-image-store.s3.amazonaws.com/0/58/1c757c47-7e49-0375-48ab-d8419a88ba8e.png)|![0302-server-push-with-chrome.png](https://qiita-image-store.s3.amazonaws.com/0/58/76c65053-b4a8-649e-ff80-0accf2a66743.png)|
 
　Chrome では画像ファイルが Cache からの読み込みとなってタイムラインが大幅に短くなりました（キャッシュはちゃんと消してアクセスしたと思います・・・）。 X-Associated-Content を追加した代わりに HTML ファイルの読み込み時間は伸びています。

### 参考

- [SPDY – SPDY — Google Developers](https://developers.google.com/speed/)
- [How to tune your server to serve pages over SPDY efficiently – Apache SPDY module – Google Project Hosting](https://code.google.com/archive/p/mod-spdy/wikis/OptimizingForSpdy.wiki)
- [Web表示の高速化を実現するSPDYとHTTP/2.0の標準化 | 最新の技術動向 | IIJ](https://www.iij.ad.jp/dev/tech/activities/spdy/)
EPEL 6 のリポジトリを有効化する

> [!NOTE]
> この記事は 2013/10/13 に [momoto.github.io](http://momoto.github.io) へ投稿した内容を Qiita へ移行してきたものです

　CentOS 6 で Extra Packages for Enterprise Linux 6 (EPEL 6) リポジトリを有効化します。 このリポジトリを有効化することで RHEL 6 やそのクローンでも Fedora パッケージを利用できるようになります。

　まず、パッケージの検証につかう公開鍵を RPM データベースにインポートします。 EPEL6 でつかう公開鍵は [Fedora Project – List of GPG keysのRPM-GPG-KEY-EPEL-6](https://getfedora.org/keys/) です。

```shell-session
$ sudo rpm --import https://fedoraproject.org/static/0608B895.txt
```

　次に、EPEL6 のミラーから RPM パッケージをインストールして、リポジトリの有効化は完了です。

```shell-session
$ sudo rpm -Uvh http://ftp.iij.ad.jp/pub/linux/fedora/epel/6/i386/epel-release-6-8.noarch.rpm
Retrieving http://ftp.iij.ad.jp/pub/linux/fedora/epel/6/i386/epel-release-6-8.noarch.rpm
Preparing...                ########################################### [100%]
   1:epel-release           ########################################### [100%]
```

　RPM ファイルの URL は、ミラーに IIJ を選んだ場合だと次のようになります。

- **i386** http://ftp.iij.ad.jp/pub/linux/fedora/epel/6/i386/epel-release-6-8.noarch.rpm
- **x86_64** http://ftp.iij.ad.jp/pub/linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm

　追加した EPEL のリポジトリが有効になっているかどうかは `yum repolist` をつかって確認することができます。

```shell-session:repolist
$ yum repolist

repo id           repo name                                               status
base              CentOS-6 - Base                                         4,802
epel              Extra Packages for Enterprise Linux 6 - i386            8,113
extras            CentOS-6 - Extras                                          12
updates           CentOS-6 - Updates                                      1,000
repolist: 13,927
```

　yum オプションに `--enablerepo=epel` を指定したときだけ EPEL を利用し、普段は無効化にしておきたい場合は /etc/yum.repos.d/epel.repo の `enabled=1` を `enabled=0` に変更しておきます。

```shell-session:/etc/yum.repos.d/epel.repo
$ sudo vi /etc/yum.repos.d/epel.repo

[epel]
name=Extra Packages for Enterprise Linux 6 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch
failovermethod=priority
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
```

## 参考

- [EPEL – FedoraProject](http://fedoraproject.org/wiki/EPEL)
- [AdditionalResources/Repositories – CentOS Wiki](https://wiki.centos.org/AdditionalResources/Repositories)
秀丸エディタで編集中のHTMLファイルを、IEとEdgeで確認する秀丸マクロ

# 作ったきっかけ
秀丸でHTMLファイルを編集中、ブラウザで即表示確認したい。

## 秀丸マクロ用ファイル（***.mac）作成時の注意点
- Shift-JISで保存。
- もしくはBOM付きのutf-8で保存。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/157498/c8cd4eb9-a5d5-6380-984f-f3691f859852.png)


# 秀丸マクロ：IEで起動

``` php5
//IEで起動.mac
run "\"C:\\Program Files\\Internet Explorer\\iexplore.exe\" "+ filename;
```

# 秀丸マクロ：Edgeで起動
 
``` php5
//編集中のファイルをEdgeから起動.mac
//「MicrosoftEdge」の後ろはスペースです。「\」を付けるとエラーを起こす。
run "cmd /c start shell:AppsFolder\\Microsoft.MicrosoftEdge_8wekyb3d8bbwe!MicrosoftEdge "+ filename;
```

## エラーの場合
以下、「エラー」が表示されますが「いいえ」を押します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/157498/75a49e67-7b82-5fb0-296c-a6bc1ae7a906.png)
（なんのエラー？）

# その他
- 秀丸メニューの「マクロ」から「マクロ登録」しておくと便利。
Macのデスクトップを綺麗にしたい

#目的
Macのデスクトップがフォルダだらけだと直感的に分かりづらい．適切なアイコンにすることで作業も効率化するかもしれない．

#環境
- MacBook Pro(2016)
- High Sierra

#変更する上での問題点
- 「情報を見る」のアイコンにpngファイルを追加しても変更されない
- 以前は「情報を見る」のアイコンにpngファイルを追加することでアイコンを変更できたが，現在はプレビューの画像が表示されるだけになってしまっていた．
- 例：GitHubディレクトリ

<img width="151" alt="スクリーンショット 2018-06-11 0.20.56.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/224333/12304cc3-f88d-05d6-4640-111825a0444f.jpeg">
<img width="143" alt="スクリーンショット 2018-06-11 0.21.30.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/224333/dd3420c5-5f62-8ed9-3844-714e8f53e53c.jpeg">


#アイコン(icnsファイル)を作成する
結論から言うとpngファイルからicnsファイルを作成すると「情報を見る」からアイコンを変更することができた．
<img width="147" alt="スクリーンショット 2018-06-11 0.21.40.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/224333/f816f9a8-f7ee-ca4d-b363-65e9013dff73.jpeg">

#icnsファイルの作成
新しいディレクトリを「~~~.iconset」として作成し，ディレクトリ内部に以下のようにサイズを変更したpngファイルを格納する．

<img width="415" alt="スクリーンショット 2018-06-11 0.24.56.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/224333/51876451-9f19-ce9d-cbfe-8ecee3df3a14.jpeg">



|ファイル名|サイズ|
|:-----------:|:-----------:|
|icon_32x32@2x.png|64x64 pixel|
|icon_128x128.png|128x128 pixel|
|icon_128x128@2x.png|256x256 pixel|
|icon_256x256.png|256x256 pixel|
|icon_256x256@2x.png|512x512 pixel|
|icon_512x512.png|512x512 pixel|

作成したディレクトリに対して以下のコマンドを実行するとicnsファイルが生成される．

```plaintext
iconutil -c icns GitHub.iconset
```
<img width="745" alt="スクリーンショット 2018-06-11 0.38.49.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/224333/30c4cb5c-c922-1ec2-84e0-b3b683bea9ba.jpeg">

生成されたicnsファイルを「情報を見る」でアイコンにドラッグ&ドロップするとアイコンを変更することができます．

#留意点
- icnsファイルを作成する時，ディレクトリに6つのpngファイルを用意したが必ずしも必要でないものもある．明らかに画素数が少ないものは省いても大丈夫．
- 変更したアイコンは「情報を見る」からアイコンを選択しながらdeleteを押すことでデフォルトに戻せる．
Flutter 画面遷移いろいろ作ってみた

## 環境

```bash

$ flutter --version
Flutter 0.4.4 • channel beta • https://github.com/flutter/flutter.git
Framework • revision f9bb4289e9 (4 weeks ago) • 2018-05-11 21:44:54 -0700
Engine • revision 06afdfe54e
Tools • Dart 2.0.0-dev.54.0.flutter-46ab040e58
$ flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel beta, v0.4.4, on Mac OS X 10.13.4 17E199, locale ja-JP)
[✓] Android toolchain - develop for Android devices (Android SDK 28.0.0)
[✓] iOS toolchain - develop for iOS devices (Xcode 9.3)
[✓] Android Studio (version 3.1)
    ✗ Flutter plugin not installed; this adds Flutter specific functionality.
    ✗ Dart plugin not installed; this adds Dart specific functionality.
[✓] IntelliJ IDEA Community Edition (version 2017.3.5)
[✓] Connected devices (1 available)

• No issues found!
```


## サンプルプロジェクト

https://github.com/tanakeiQ/flutter_practice/tree/transitions

投稿日時現在では以下が使用できます

- standard(MaterialPageRoute)
- quick(エフェクトなしの即時繊維)
- slide(CupertinoPageRoute)
- slideUp(下から上に出てくるやつ)
- dissolve(ディソルブ)
- bounce(ビヨーンてなるやつ)　※ 以下から参照しました
- - https://medium.com/@agungsurya/create-custom-router-transition-in-flutter-using-pageroutebuilder-73a1a9c4a171


## 実行

```bash

# clone
$ git clone -b transitions https://github.com/tanakeiQ/flutter_practice.git

$ cd flutter_practice 

# run App
$ flutter run
```

## コード解説

`/lib/src/transitions/transition.dart`に`TransHall`クラスを作成し、この中にTransitionを定義しました。

```dart
class TransHall {
  final Widget widget;

  TransHall({@required this.widget});

  static TransHall of(Widget _widget) {
    final TransHall trans = new TransHall(widget: _widget);
    return trans;
  }

...
```

呼び出しかたは

```dart
TransHall.of(new SamplePage()).dissolve()
// または
new TransHall(widget: new SamplePage()).dissolve()
```
のようになります。(個人的には`new`を書かなくていい前者のほうが好きです)

ちなみにこういったものを作成しなくても、画面遷移は予め以下のようなものが用意されています

**MaterialPageRoute**

```dart
new MaterialPageRoute(builder: (context) => new SamplePage());
```

**CupertinoPageRoute**

```dart
new CupertinoPageRoute(builder: (context) => new SamplePage());
```
※iOSの場合`MaterialPageRoute`を呼ぶとデフォルトでは`CupertinoPageRoute`のトランジションが呼び出されます
https://github.com/flutter/flutter/blob/master/packages/flutter/lib/src/material/page.dart#L173

## 使用できるTransitionエフェクト一覧

https://flutter.io/widgets/animation/
javaでExcelをBlobに変換して保存、DBから読み込んでファイル出力してみる！

Webアプリでファイルをダウンロードするとき・・
ファイルサーバを立てるのが真っ先に思いつくけど、こんな方法も・・
(サイズは気にしないことにする。)

## **1.ファイルを読み込む**
```java:main
// ファイル読み込み
File uploadFile = new File("[ディレクトリ]\\tmp.xlsx");
FileInputStream finstream = new FileInputStream(uploadFile);
```

いたってシンプル。

## **2.DBに保持する**
```java:main
Class.forName("oracle.jdbc.driver.OracleDriver");
// Oracle8iに接続
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:TEST", "system", "password");
// ステートメントを作成
Statement stmt = conn.createStatement();
// SQL定義
PreparedStatement pstmt = conn.prepareStatement("INSERT INTO [スキーマ].test_table(file_id, deta) VALUES(0, ?)");
// ステートメントにバインド
pstmt.setBinaryStream(1, finstream, (int) uploadFile.length());
// 実行
int result = pstmt.executeUpdate();
```

setBinaryStreamでバイナリ化してセットする。

## **3.DBからバイナリデータを取り出す**
```java:main
// バイナリデータ取得
ResultSet rset = stmt.executeQuery("select deta from [スキーマ].upload_file where file_id = '0'");
// Blobデータを取得してファイルに出力
Blob blob = null;
while (rset.next()) {
	blob = rset.getBlob("deta");
}
byte[] buffer = blob.getBytes(1, (int) blob.length());
```

getBytesでbyte配列に格納

## **4.ファイルに吐き出す**
```java:main
// 出力ファイルを指定
File file = new File("[ディレクトリ]\\test001_output.xlsx");
DataOutputStream dos = new DataOutputStream(new FileOutputStream(file));
// byte配列を書き込む
dos.write(buffer);
dos.close();
```

シンプルにファイルを生成して書き込む。

## **5.お決まりのクローズ処理**
```java:main
// 結果セットをクローズ
rset.close();
// ステートメントをクローズ
stmt.close();
// 接続をクローズ
conn.close();

// tmpファイル削除
uploadFile.delete();
```

各種クローズ。と、アップロードしたtempファイルを削除。
指定したディレクトリにファイルが生成される。

## **6.課題:man_tone1:**
前回POIを使ってExcelを生成したけど、
ファイル生成処理とバイナリ化してDBに保持を同じフローでやりたい・・
(一回tempファイルとして吐き出して、それを読み直してバイナリ化してる)

ちょっとパッと思いつかないので、次回にやってみよう！
20分チャレンジ 2018 参加する・参加したいカンファレンス(今思い出せる)一覧

20分以内に急いで書いたものです.間違っている部分があると指摘していただけると幸いです.

start 0:26

# [PHPカンファレンス2018](https://phpcon.fukuoka.jp/2018/)
名前のままPHPのカンファレンス.昨年初参加したがとても面白かったので
今回も参加します.
# [PyCon Kyushu 2018 Fukuoka](http://kyushu.pycon.jp/)
Pythonのカンファレンス昨年は熊本であったので参加してきた.
めっちゃ面白かっので今回も参加します.

# [builderscon tokyo 2018](https://builderscon.io/)
今回参加したい初参加だからよくわからない.HP見た感じ超巨大なLT大会みたいな感じですか?

end 0:32
wordpressでページネーション(ページャ)を実装したのに表示されない

#記事の数が少ないとページネーションが不要なので表示されない
1ページに5件表示する設定なら、6件記事がないとページネーションは表示されない







#あとがき
くだらないけど、こういうの気づくの時間かかるよね
kotlin導入

# はじめに
初めまして、keyorisです。
今回は初心者向けにAndroid Studioにkotlinを導入するフローをまとめました。

※画像はMac版ですが、Windows版でも同様の手順でいけます

# 導入フロー
２パターンあります。
## 1. 既存のProjectで導入する
- メニューバーの『Android Studio』から『Preferences...』を開きます。

　　![スクリーンショット 2018-06-10 23.46.48.png](https://qiita-image-store.s3.amazonaws.com/0/259412/b3854ec5-42ae-e5a1-fd40-142a191f6be8.png)

---

- 『Preferences』画面の左メニューから『Plugins』をクリックします。
![スクリーンショット 2018-06-10 23.47.04.png](https://qiita-image-store.s3.amazonaws.com/0/259412/843a55de-77bb-6de3-2e18-fc9fa182c984.png)

---

- 『Plugins』の検索で【kotlin】と入力すると自動で絞り込まれます。
あとはkotlinの右にある**ボックスにチェックを入れ**、右下のApplyをクリックすると適用されます。
![スクリーンショット 2018-06-10 23.47.27.png](https://qiita-image-store.s3.amazonaws.com/0/259412/7693f05c-3143-c457-6a0b-7059568b8e5b.png)
 

## 2. New Projectで導入する
- Android Studio最新版 (2018/6/11時点でver3.1.3) だと、メニューバーの『File』→『New Project』する時にオプションでkotlinを導入することができます。

- 下にある『Include kotlin support』にチェックを入れるだけです。
![スクリーンショット 2018-06-10 23.40.56.png](https://qiita-image-store.s3.amazonaws.com/0/259412/d5220ed6-327a-bdce-fce3-71a44c3d8b79.png)

これでいつでもkotlinでコードを書くことができます。簡単ですね〜

# まとめ
Android Studioにkotlinを導入するフローは２パターンです。

- 既存ProjectでPreferenceから適用する
- New Projectの時にオプションにチェックを入れる
Numbers ショートカットキー

そんなに使う機会があるかわからないが、`Mac`で
「`セル入力値をそのままの状態で入力モードにする`**ショートカットキー（winだとF2）**」が不明だったのでそのメモ

基本は`control (^)`と組み合わせて使う。

# ショートカットキー
```dot
# 選択しているセルを入力モードに  WindowsのExcelでF2相当
Option + Return
 # もしくは
control + qq　　# ←環境によっては機能しないかも

# 方向キー押すとセル移動しちゃうよ

# カーソルを前（右）へ →
control + f
# カーソルを手前（左）へ　　←
control + b
# カーソルを始点（左端）へ　　ｈｏｍｅ的な
control + a
# カーソルを終端（右端）へ　　end的な
control + e

# カーソル右の1文字を削除　　win delete
control + d
# カーソル左の1文字を削除　　Backspace的な
control + h
 # もしくは
delete
```

>[MacのためのNumbers: Numbers for Mac のキーボードショートカット](https://support.apple.com/kb/PH23737?locale=en_US&viewlocale=ja_JP)

# （常に）タブで開く設定
ショートカットと関係ないけど、複数ファイルを開いたときにウィンドウ別に開くんじゃなくて、**1つのウィンドウで（タブ分けで）複数ファイルを開く**設定にしたかったので設定メモ。

`環境設定`→`Dock`→`書類を開くときにタブで開く`→`常に`を選択

<img width="780" alt="スクリーンショット 2018-06-17 0.51.07.png" src="https://qiita-image-store.s3.amazonaws.com/0/23248/2955316c-b309-e454-5454-2ead3dd8285b.png">

>[MacのためのNumbers: スプレッドシートを開く](https://support.apple.com/kb/PH17068?viewlocale=ja_JP&locale=en_US)
/vagrantフォルダをmountしない

## 概要
あまり利用していないので、/vagrantフォルダが自動でmountされるのを解除したくて調べた内容をメモしておく。

## Vagrantfile
設定をOFFにする。

```:Vagrantfile
Vagrant.configure('2') do |config|
  config.vm.synced_folder '.', '/vagrant', disabled: true
end
```

これだけだとちょっと少な過ぎるので、存在しないフォルダにNFSでマウントする方法も追記。

```:Vagrantfile
Vagrant.configure('2') do |config|
  config.vm.synced_folder '.', '/vagrant', disabled: true
  config.vm.synced_folder "./opt/", "/home/docker/opt/", :nfs => true
end
```


## 参考サイト
- [Is it possible to disable default /vagrant synced folder?](https://superuser.com/questions/756758/is-it-possible-to-disable-default-vagrant-synced-folder)
Linux windowを選択してスクリーンショットを取る

##ウィンドウを選択してスクリーンショットを取る
パソコン関係の情報発信をしていると、スクリーンショットの情報共有は非常に重要になってくる。
ぜひ必要ないくつかのコマンドをマスターしたいものである。

>how to take a screenshot in Linux

まぁとりあえずこんな感じの英語の文章を書いておけばよいでしょう。
これをグーグルで検索するとどうなるでしょうか？
Linux メモリーがどれくらい稼働しているのか調査

##Linuxパソコンのメモリーの消費を計算する。
メモリーは現在パソコンで作業できる限界の数値であるが、現在所有しているパソコンは4Gのメモリーを積んでいる。その他に６０GのSSDにしており、ハードディスクに書き込むスピードはまぁまぁ早いはず。CPUはcore 2 duoだと思われる。これなの機能がきちんと動いているのかどうかを確認する。

>check memory usage in Linux

まずはここらへんの文章をグーグルに打つとほしい情報が入手できるはずである。
この作業を行おうと思ったきっかけは、動画編集ソフトをダウンロードして、それを動かそうとしたときに、メモリーのフリースペースがないとの事だった。

これはさらにセカンドディスプレイが動かない問題や、カメラで映しだされる映像にズレが生じる問題にも関係があるかもしれないので、結構重要なテーマかもしれない。ツイッター連動をして状況を整理していこうと思う。

##free commandを打ってみよう
とりあえずすぐに見つかったのは、次のコマンドである。

```
free -m
```


##メモリーがきちんとスロットにハマっていなかった。

メモリーの使用量を調べて見ると、2GBしか可動していないことがわかった。本体には4GB挿していて、SWAP仮想領域が2GBのはずだったのだが、表示されているのがメモリー2G
Swap2GBであったため、本体にきちんとはまっていなかったことを疑えた。
パソコンで重要なのはいま内部でなにが起きているのかをきちんと把握することで解決の糸口となる。

##今度の課題
カメラがスローで動く問題
しかし、これは別撮りをするということにして、ここでプロジェクトは終了としようとおもう。問題が未解決のまま次の作業へと移動するわけなので、いつか解く問題として、調査報告をまとめていこうとおもう。
AOC モニターが故障か？

##AOCモニターが映らない問題
Xubuntuをインストールしてすぐにモニターのドライバーをいれて、解決したかと思ったこの問題。その後様々なパッケージ　repositoryなどを入れてきました。たとえば、トラックマンボール（ロジクールから出ているマウスでスクロールができない）など内蔵カメラがないので、スマホのカメラを使う（Droidcam）そして、デッバキングモードを有効にするために、ADBをインストールしたりなどかなりいろいろ入れてきましたが、そんな中、セカンドモニターが反応をしなくなってしまいました。
ということで再度ドラバーを入れるなどいろいろやってみようという企画です。
Python勉強の題材にTwitterアプリを作ってみた。その①

## はじめに
現在、勤めてる会社でPythonが流行りだしてるなか、自身のプログラミングスキルも煮詰まってたので、Pythonの勉強にチャレンジしてみました！
勉強の題材として、Pythonを使ったTwitterアプリを実装して、その勉強成果をまとめています。
このためにQiitaやGitHubも始めましたので、間違いがありましたら、ご指摘・ご指導よろしくお願いします。

## 参考にさせていただいたURL
* 以下を参考に自身のWindows10 PCにPython実行環境を構築しました。
    * [今からWindowsでベストなPython開発環境を構築する手順](https://qiita.com/gold-kou/items/dc991440e64f76f81b2f)
    
*  以下を参考にTwitterアプリを実装しました。
    * [Twitterのbotをpythonで作成する手順](https://qiita.com/yuki_bg/items/96a1608aa3f3225386b6)
    * [PythonでTwitterを使う 〜Tweepyの紹介〜](http://kivantium.hateblo.jp/entry/2015/01/03/000225)

## 公式URL
 * [tweepy API Reference](http://docs.tweepy.org/en/latest/api.html#api-reference)
 * [Twitter Apps](https://apps.twitter.com/)

## やったこと
 * アプリケーション登録したユーザーに対してのリプ一覧の取得
 * リプの最新からリプライ内容をGoogle検索文字列にして
 * [ggrks!](https://kotobank.jp/word/ggrks-188462) とリプライ返しするジョークBotを作りました。
    * こだわりは、しっかりURLエンコードしたところです。不勉強なため、意外とハマりました。。
 * 実行画面キャプチャ
    * ※URLが見切れてるので⇒「https://www.google.co.jp/search?q=%E3%83%86%E3%82%B9%E3%83%88」
![ggrksbot実行例.png](https://qiita-image-store.s3.amazonaws.com/0/258294/6583bcdd-0f65-feff-273e-7b8a636bece9.png)

## ソースコード
 * [GitHubのプロジェクト:GgrksBot](https://github.com/nekotarolu/GgrksBot/tree/Prototype-1-20180610)
    * ※デバッグ用の制御コードも多数あるのでコメントを中心に読み解いてください。

## あとがき
これは、あくまで勉強用です。
勉強の目的は、SNS(Twitter)フレームワークで実行できるアプリケーションを、
Pythonを使って実装し、SNSから取得できる文字列を加工・機械学習させることで、
何らか良いサービスが作れないかなぁと考えています。

## 次に向けて
 * 取得した文字列の操作・学習を中心にもう少し勉強して機能拡張させる。
 * もう少し、Pythonっぽい設計・実装を勉強して機能拡張させる。
 * Twitter以外のSNS、例えばFaceBoot,Lineでも同じ要領で作れそうなのでそちらにもデプロイしたいなと考えています。
ChatWork記法のVSCodeスニペットを設定する

[チャットワーク（ChatWork）](https://go.chatwork.com/ja/)にまとまった文章を投稿する時などは[Visual Studio Code](https://www.microsoft.com/ja-jp/dev/products/code-vs.aspx)で下書きして貼り付けています。
ChatWorkは[独自のメッセージ記法](http://developer.chatwork.com/ja/messagenotation.html)が使えますので、そのスニペットをVSCodeに登録してみました。

## 環境
- Visual Studio Code 1.24.0

## グローバルスニペットの追加

`Ctrl+Shift+P`でコマンドパレットを起動し、`>Preferences: Configure User Snippets`と入力し、「新しいグローバルスニペットファイル」から`chatwork.code-snippets`のような名前をつけて、下記を作成します。

```json:chatwork.code-snippets
{
	"chatwork:code": {
		"prefix": "```",
		"body": ["[code]","$0","[/code]"],
		"description": "ChatWork:コード"
	},
	"chatwork:information": {
		"prefix": "info",
		"body": "[info][title]${1:タイトル}[/title]${2:本文}[/info]",
		"description": "ChatWork:インフォメーション"
	},
	"chatwork:hr": {
		"prefix": "hr",
		"body": "[hr]",
		"description": "ChatWork:罫線"
	}
}
```
「info」「hr」「```」と打ったあとにCtrl+Spaceで、候補が保管されるようになります。

実際の設定ファイル変更はこんな感じです。
[ChatWork用グローバルスニペット追加 · s2terminal/visualstudiocode\-usersetting@132742f](https://github.com/s2terminal/visualstudiocode-usersetting/commit/132742f69a2e2c09013cad8730855908999cc918)

## 参考

- [チャットワークAPIドキュメント](http://developer.chatwork.com/ja/messagenotation.html)
- [Creating your own snippets in Visual Studio Code](https://code.visualstudio.com/docs/editor/userdefinedsnippets)
- [独自のスニペットを作成 \| 非公式 \- Visual Studio Code Docs](https://vscode-doc-jp.github.io/docs/userguide/userdefinedsnippets.html)
- [Visual Studio Codeでユーザー独自のスニペットを定義する ｜ Developers\.IO](https://dev.classmethod.jp/cloud/aws/how-to-add-your-own-code-snippets-of-visual-studio-code/)
Slack Outgoing Webhooksで改行を含む投稿をAWS Lambdaに送信する

#前提
こちらの記事を参考にSlackとAWSの設定を行った。
https://qiita.com/G-awa/items/fc803c285cb560dab796

しかし、Slackの投稿に改行が含まれているとLambdaが起動しない。
API Gatewayの本文マッピングテンプレートでform-urlencoded形式からjson形式に変換する際、特定の文字をエスケープする必要があるようだ。

必要なエスケープは以下のとおり。

| エスケープ表記 | 対象の文字   |
|:-------------|:------------|
| \\           | \           |
| \"           | "           |
| \n           | (キャリッジリターン) |
| \r           | (ラインフィード) |
| \t           | (タブ) |

#対応
冒頭で提示した記事にある[本文マッピングテンプレート](https://qiita.com/G-awa/items/fc803c285cb560dab796#api-gateway%E3%81%AE%E6%BA%96%E5%82%99)の最後のブロックを以下のように変更する。

```
{
#foreach( $kvPair in $tokenisedEquals )
  #set($kvTokenised = $kvPair.split("="))
 "$util.urlDecode($kvTokenised[0])" : #if($kvTokenised[1].length() > 0)"$util.urlDecode($kvTokenised[1].replace("%5C", "%5C%5C").replace("%22", "%5C%22").replace("%0D", "%5Cr").replace("%0A", "%5Cn").replace("%09", "%5Ct"))"#{else}""#end#if( $foreach.hasNext ),#end
#end
}
```

##別案
あるいはAPI GatewayでURLエンコードを行わず、Lambdaで行う方法もある。
その場合の本文マッピングテンプレートは、同じ箇所を以下のようにする。

```
{
#foreach( $kvPair in $tokenisedEquals )
  #set($kvTokenised = $kvPair.split("="))
 "$util.urlDecode($kvTokenised[0])" : #if($kvTokenised[1].length() > 0)"$kvTokenised[1]"#{else}""#end#if( $foreach.hasNext ),#end
#end
}
```

あとはLambda側の各言語のURIデコード処理を呼び出せばよい。
例えば、Node.jsの場合は以下のとおり。

```javascript:index.js
exports.handler = (event, context, callback) => {
    var text = decodeURIComponent(event.text.replace(/\+/g, '%20'));
    // 以下省略
}
```
AWS EC2 上に Google Colaboratory の ローカルランタイムを作成する

[Google Colaboratory の ローカルランタイムへの接続](https://qiita.com/ikeyasu/items/6f23d33c378435a1a27c) でローカルのPCに、nvidia-docker2を使って、Google Colaboratoryのローカルランタイム環境を作成し、Google Colaboratoryから接続する方法を書きました。

ここでは、EC2 上に Google Colaboratory のローカルランタイムを作る方法を説明します。

本当は、Googleに敬意を表して、GCPを使った方法を先に書こうと思ったのですが、GPUを使うには割り当てリクエストを送らないといけないようなので、先に AWS EC2 になりました。

2018/06/16追記： [書きました](https://qiita.com/ikeyasu/items/2350046d81848472f2d0)

といっても、nvidia-docker2に対応したAMIを使って起動するだけです。

<!-- 以下は、起動する手順を示した動画です。-->

<!--[![https://gyazo.com/f9c86a61f2c87358e0de45c8724cf68f](https://i.gyazo.com/f9c86a61f2c87358e0de45c8724cf68f.gif)](https://gyazo.com/f9c86a61f2c87358e0de45c8724cf68f)-->


1. https://console.aws.amazon.com/ec2/v2/home からインスタンス作成
2. コミュニティAMIの "Ubuntu 16.04 Docker CE GPU"を使う。"nvidia-docker2"でコミュニティAMIを検索
  * NVIDIA公式の"NVIDIA Volta Deep Learning AMI"でも良いが、これだとP3インスタンスでしか使えないためです。P3インスタンスを使う場合は、"NVIDIA Volta Deep Learning AMI"がオススメです。
3. インスタンスを選択。P2かP3
4. VPCを選択。自動割り当てパブリック IP を選択しておく（その方が接続らが楽）VPCについては[こちらが参考になります](https://qiita.com/hiroshik1985/items/9de2dd02c9c2f6911f3b)
5. 次の手順をクリックし、セキュリティグループの設定まで移動
6. インスタンス作成

上記で、nvidia-docker2が起動したEC2インスタンスができました。

そして、インスタンス一覧から右クリックし、接続をクリックします。
以下のようなコマンドが書いてあるはずです。

```
ssh -i "XXX.pem" ubuntu@ec2-XX-XX-XXX-XX.compute-1.amazonaws.com
```

これをコピーして、`-L 8081:localhost:8081` を加えて実行してください。以下のようになります。

```
$ ssh -L 8081:localhost:8081 -i "XXX.pem" ubuntu@ec2-XX-XX-XXX-XX.compute-1.amazonaws.com
```

つながったら、以下のように入力し、GNU Screenを起動してから、dockerインスタンスを起動します。初回起動はイメージのダウンロードで時間がかかります。

```
$ screen
$ docker run --runtime=nvidia -it --rm -p 8081:8081 --cap-add SYS_ADMIN --device /dev/fuse \
             --security-opt apparmor=unconfined ikeyasu/colab-local:latest
```

ここまでできたら、Colaboratory から接続できます。Colaboratoryの右上の接続の右にある▼をクリックし、ローカルランタイムに接続をクリックし、Docker起動時に指定したポート番号（8081）をしていして、接続をクリックしてください。

なお、ローカルに8081ポートをForwardingしているので、 http://127.0.0.1:8081/ で、Jupyter notebook にアクセスできます。
JavaScriptのスコープについてメモ



#参照可能な範囲

##var/let/constをつけて変数を宣言した場合
関数の内で宣言された変数を参照可能な範囲はブロック内。
関数の外で宣言された変数を参照可能な範囲はファイル内。

##var/let/constを付けずに変数を宣言した場合
関数の内だろうと外だろうと宣言された変数を参照可能な範囲はファイル内。

#寿命
varで宣言された変数はブロックによる寿命が無い。(っえ！？)
つまり、ブロック内で生まれた変数はプログラムがブロックを抜けた後も生き続ける。

``` js:
if (true){
  var num = 83;
}
console.log(num);
```

``` sh:
$ nodejs test.js
83
```
一方でletやconstを使ってブロック内で生まれた変数はブロック抜けた後に開放される。

varを使用している場合にはブロックの処理を無名関数に入れてその関数をcall(this)する方法で上記の動作を回避できる。（左記の方法はおそらく参照不可能になっているだけ。）
ubuntuで動画の編集できるソフトをインストールする

##まずはどのソフトを選べばいいでしょうか？
今回のこのプロジェクトは、現在カメラ無しのパソコンを使っているのですが、自分の話している映像も載せたいということもあって、スマホのカメラを使って、自分のプレビューを作って、一緒に撮影することを考えました。この方が、後に編集したりする手もかからず楽だと考えたのですが、実際は、自分が話しているよりもカメラのほうが若干遅く、映像と、音声にズレが発生しています。
この問題を解決する一つの方法が、動画編集ソフトを入れて、自分の映像と画面スクリーンキャプチャは別々に取るという作業です。
まずはこの[まとめサイト](https://itsfoss.com/best-video-editing-software-linux/)が参考になると思います。

>what is the best video editing tool in Linux

たとえば、英語の文章であればこのようにグーグルで入力をして調べていきます。

##たとえばKdenliveを使ってみましょう。
これは検索結果から一番上に出てきたものでまずはために利用してみようと思います。
こちらが[公式サイト](https://kdenlive.org/en/)になっています。

コマンドでターミナルからインストールできそうでしたので、それでやってみようかと思います。

```
sudo apt-get install kdenlive
```

こちらで様子を見てみます。
debianでputtygen

# 結論

putty-toolsだけ入れてdsaかrsaの秘密鍵ならputty形式の秘密鍵をエキスポートできる．

# やりかたとか

androidアプリなんかでsshやscpで公開鍵認証を使おうとする時，openssh形式ではなくputty形式で秘密鍵を設定させられることが，稀によくある．
で，Windows端末が常時起動のサーバになってなくて，ベッドの中からスマホでアクセスできる範囲で何とかしようとしたらLinuxでputtygenを使わないといけなかったりする．

puttygenだけ使えればいいのに無駄にputtyごとインストールさせようとする記事が散見されるので，導入と簡単な使い方だけ一応書いておく．

```sh
sudo apt-get install putty-tools
puttygen PRIVKEY -O private -o PRIVKEY.ppk
```

ssh-keygenのmanに出てくる形式はdsa/ecdsa/ed25519/rsa/rsa1だが，受け付けてくれたのはdsaとrsaのみだった．
どうにか対応させる方法があるのかどうかは調べてもいないけど，こんな貧弱な対応状況で，今時，putty形式にする意味あんのかなー．

結局そのアプリは，scpでディレクトリを1つ掘ろうとすると寄附を要求してきたので諦めることにした．
Gitのコミット時に自動でコードを整形する

C++のコードをコミットする時にclang-formatというツールで整形する例。
Gitで管理しているプロジェクトの「.git/hooks」配下にpre_commitを以下の内容で置く。
(pre_commitに実行権限を与えること)

```bash
if type "clang-format" > /dev/null 2>&1
then
  untracked_src=$(git ls-files '*.cpp' '*.c' '*.hpp' '*.h' --others --exclude-standard)
  for src in $untracked_src; do
    clang-format -i $src
  done
  
  unstaged_src=$(git diff --name-only -- '*.cpp' '*.c' '*.hpp' '*.h')
  for src in $unstaged_src; do
    clang-format -i $src
  done
  
  staged_src=$(git diff --name-only --cached -- '*.cpp' '*.c' '*.hpp' '*.h')
  for src in $staged_src; do
    clang-format -i $src
    git add $src
  done
fi
```

他のフォーマッターを利用するならclang-formatの部分を変えれば良さそう。