OmniAICreator/Qiita-1.07M huggingface dataset:
ショートカットで差をつけろ！爆速！エンジニアへの道（macユーザー）

本記事をご覧のみなさん！

一日の作業が終わらなくて困ってはいませんか？？
上司から、「もっと効率的にできないのか」と言われてはいませんか？？
自分の作業効率の悪さにがっかりしてはいませんか？？

そんなあなた、作業を爆速で終わらせる方法を知りたくはないですか？？
<br>
<br>
僕も知りたいです。

どうも、[株式会社entershare](https://entershare.jp/)の阿部です。

会社でめちゃくちゃ仕事の早い先輩がいます。
目に見えて、作業スピードで劣っています。
負けてばかりでは腹が立つので、もっと作業スピードをあげようと、先月から試行錯誤の毎日です。

試行錯誤の中で、自分の中で手応えがあった作業効率化の取り組みを、
本記事にまとめました。

少しでもご参考になれば嬉しいです。

## 作業を効率化するには？
・タイピングを早くする
・ショートカットを使う
・ツールを使う
・ルールを決める

今回は以上について、まとめました。
簡単に作業を効率化できるところなので。

## タイピングを早くする
- タイプミスをしないようにする
- ホームポジションから手を離さないようにする
- ブラインドタッチ

毎日タイピング練習しました。
個人的に効果があった練習方法としては、以下があります。
・いろは歌をなんども打ち込んでみる
・ノーミスを意識しながら[寿司打をやる](http://typingx0.net/sushida/)(http://typingx0.net/sushida/)
・タイピング早い人の手元を見せてもらい、自分のタイピングと比較する

## ショートカットを使う
### Mac
#####移動系ショートカット
・ctrl + f カーソルを右に移動
・ctrl + b カーソルを左に移動
・ctrl + p カーソルを上に移動
・ctrl + n カーソルを下に移動
・ctrl + a カーソルを文頭に移動
・ctrl + e カーソルを文末に移動

##### 削除系ショートカット
・ctrl + d カーソルの右の文字を削除
・ctrl + h カーソルの左の文字を削除
(deleteキーで代用できるが、ホームポジションが崩れてしまうため、ctrlを使ったショートカットを用いると良さげ)

##### その他
・cmd + tab アクティブウィンドウ移動 
・ctrl + space Spotlight検索

ウィンドウを2つ使う作業の場合は、cmd + tabがおすすめ。
ウィンドウを3つ以上使う作業の場合は、Spotlight検索がおすすめ。
cmd + tabは使用ウィンドウの履歴によって、順番が変わってしまう。
Spotlight検索を使っていれば、使用ウィンドウの履歴に関係なく、ウィンドウの移動できる。
ランチャーアプリを導入してもいい場合は、[Alfred](https://pc-karuma.net/mac-app-alfred/)がさらにおすすめ。

### VSCodeショートカット
・cmd + p ファイル検索
・cmd + f ファイル内検索
・cmd + option + f ファイル内置換
・cmd + shift + f 全ファイル内検索
・cmd + shift + h 全ファイル内置換
・cmd + shift + p コマンド検索 Emmet バランス(外側)
・cmd + d マルチカーソル検索
・cmd + shift + f マルチカーソル全検索
・option + shift + ドラックアンドドロップ 範囲全体をマルチカーソル化
・option + 矢印キー 行移動
・cmd + shift + k 行削除
・cmd + b サイドバーの表示・非表示
・cmd + ]  行のインデント1つ削除
・cmd + [  行にインデント1つ追加
・ctr + tab アクティブソース移動
・cmd + shift + \ 対応する括弧に移動

## ツールを使う
・[vimium](https://qiita.com/satoshi03/items/9fdfcd0e46e095ec68c1)
GoogleChromeの拡張機能。
vimiumを使えばググる際、マウスは不要です。

・[Alfred](https://pc-karuma.net/mac-app-alfred/)
ランチャーアプリ。
「アプリの起動」「Web検索」「ファイルの検索」等を少ない手数で行うことができます。

・[Clipy](https://qiita.com/econa77/items/1848bf3fdfb7127ca9b8)
クリップボード拡張Macアプリ。
コピーの履歴が保存されており、いつでもクリップボードの履歴を参照できます。

・[Skitch](https://evernote.com/intl/jp/products/skitch)
スクショアプリ。
スクショを簡単にとれ、コピべも可能。
スクショに記号を配置できるので、チャットなどでスクショのやり取りをするときに便利です。

## ルールを決める
・1日で行う作業を、紙に書き出す。
今、自分何をしたかったんだっけかな？？という時間を減らす。

・毎日、改善する作業を決める
改革と改善、両方を意識する。

・ウィンドウ配置を固定にする（マルチディスプレイで作業している場合）
ウィンドウを探す時間を短縮する。

・15分調べてわからなかったら相談する
人の調べ方をみて勉強する。
調べられなかった原因を探る。

・時間を計測しながら作業を行う
不要な作業がなかったか、短縮できる時間はないか振り返る。

## 挨拶
最後まで記事をご覧いただきありがとうございます！
質問、間違い、アドバイス等あれば、コメントください。

弊社、[株式会社entershare](https://entershare.jp/)、エンジニアを募集しています。
服装自由、コアタイムなしの自称ご機嫌な会社です。
切磋琢磨して技術力あげたい！
クライアントと直で話をして、エンジニアリングを行いたい！
人の言うことを聞くだけじゃなく、自分で考えて行動したい！
そんな方大募集です。
よろしければ、[お問い合わせページ](https://entershare.jp/contact/)からご連絡ください。

個人的に[Twitter](https://twitter.com/takupesoo)やっているので、よければフォローいただければ嬉しいです。
https://twitter.com/takupesoo

ご閲覧、ありがとうございました。
Google スプレッド シートで住所→緯度経度変換

Googleスプレッドシートで住所→緯度経度変換の逆ジオコーディング(リバースジオコーディング)してみました。

こちらの記事を参考にさせていただきました。
[Excel の WEBSERVICE 関数でジオコーディング](https://qiita.com/frogcat/items/585c7de901c31cf30760)

# 1. 手順

## ジオコーディング用の URL を設定
セル B1 に以下の式を入力します

```URLの構築.
="https://geocode.csis.u-tokyo.ac.jp/cgi-bin/simple_geocode.cgi?charset=UTF8&addr=" & A1
```

![screencapture-docs-google-spreadsheets-d-1T7n7nfWyjfk9GAnPTHjv2cJVaKwWxRJK-c2kV138UR8-edit-2019-04-24-11_29_56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/20464/ac98814e-9b9f-52f5-8d12-b2c0315dbd56.png)

入力するとセルに以下のような URL が表示されるはずです。

> https://geocode.csis.u-tokyo.ac.jp/cgi-bin/simple_geocode.cgi?charset=UTF8&addr=%E6%84%9B%E7%9F%A5%E7%9C%8C%E5%90%8D%E5%8F%A4%E5%B1%8B%E5%B8%82%E5%AE%88%E5%B1%B1%E5%8C%BA

実際にこの URL にアクセスすると、以下のような XML が表示されるはずです。

![screencapture-geocode-csis-u-tokyo-ac-jp-cgi-bin-simple-geocode-cgi-2019-04-24-11_34_41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/20464/21976f05-60e9-4aff-5147-21338e32c446.png)

## XML を取得
セル C1 に以下の式を入力します。

```XMLの取得.
=IMPORTXML(B1,"/")
```

![screencapture-docs-google-spreadsheets-d-1T7n7nfWyjfk9GAnPTHjv2cJVaKwWxRJK-c2kV138UR8-edit-2019-04-24-11_39_17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/20464/09237f2f-3329-77b0-2cef-22f396cd479f.png)

## 取得した文字列を分割
セル D1 に以下の式を入力します。

```文字列を分割.
=SPLIT(C1," ",true,true)
```

![screencapture-docs-google-spreadsheets-d-1T7n7nfWyjfk9GAnPTHjv2cJVaKwWxRJK-c2kV138UR8-edit-2019-04-24-11_42_04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/20464/a4d2c689-ad40-6ca4-7fc1-4d34ec046459.png)

それぞれのセルに住所や緯度経度らしき数値が設定されていたら成功です。

# 2. 解説
上記の手順では3つの関数を使用しています。

### IMPORTXML(URL, XPath クエリ)
XML、HTML、CSV、TSV、RSS フィード、Atom XML フィードなど、さまざまな種類の構造化データからデータをインポートします。

- **URL** - 検証するページの URL です。プロトコル（http:// など）も含めます。

    - URL の値は二重引用符で囲むか、適切なテキストを含むセルへの参照にする必要があります。

- **XPath クエリ** - 構造化データで実行する XPath クエリです。

    - XPath について詳しくは、
    http://www.w3schools.com/xml/xpath_intro.asp
    （英語）をご覧ください。

### SPLIT(テキスト, 区切り文字, [各文字での分割], [空のテキストを削除]) 
xml 文字列に対して xpath で検索を実施して返す関数です。

- **テキスト** - 分割するテキストです。

- **区切り文字** - テキストを分割するために使用する文字です。
デフォルトでは、区切り文字の各文字が個々に検証されます。たとえば、区切り文字に "the" を指定した場合、テキストは "t"、"h"、"e" の文字の前後で分割されます。各文字での分割を FALSE に指定すると、この動作をオフにできます。

- **各文字での分割** - [省略可 - デフォルトは TRUE] - 区切り文字に含まれる各文字の前後でテキストを分割するかどうかを指定します。

- **空のテキストを削除**  - [省略可 - デフォルトは TRUE] - SPLIT の結果から空のテキスト メッセージを削除するかどうかを指定します。デフォルトは TRUE で、連続する区切り文字を 1 つの区切り文字として扱います。FALSE にすると、連続する区切り文字の間に空のセルの値が追加されます。

# 3. まとめ

- IMPORTXML 関数と CSISシンプルジオコーディング実験のAPIを使うことで、Google スプレッド シート上でマクロを使わずにジオコーディングを行う方法を紹介しました。
- クエリーを実行する際には都道府県市区町村名の補完を忘れずに。ローカル地名だけではバッティングが多発します。

ちなみに[サンプル](https://docs.google.com/spreadsheets/d/1T7n7nfWyjfk9GAnPTHjv2cJVaKwWxRJK_c2kV138UR8/edit#gid=0)はこちらにおいておきます。
Djangoでsettings.pyを上書きする方法

概要
-
こんにちは、すずです。
webアプリを開発するとなれば最終的にはリリースしたいですよね！
そうなると開発段階から本番と開発段階ではsettings.pyを分けるべきだと私は思います。

恐らく（私だけかもしれないですが）アプリ作成段階では試行錯誤を繰り返しているうちにsettings.pyがぐちゃぐちゃになったりすると思います。


そこで今日はsettings.pyの上書き（後付け）についてここに記しておきます。
誰かの役に立ちますように...


環境
-
>python 3.7.2
django 2.1.7


やり方
-
プロジェクトの設定ディレクトリ直下に作成します

```python:my_settings.py
# mysite/mysite/my_settings.py
from .settings import *

DEBUG = True
ALLOWED_HOSTS = ['*']

DATABASES = {
    'default': { .....

```
ポイントは
from .settings import * 
コレがないとエラー出ます

そして、最重要ポイントはrunserverするときに
`python manage.py runserver 0.0.0.0:8000 --settings mysite.my_settings`
とターミナルに打ち込むこと！

`mysite.my_settings`
は自身のディレクトリ名ファイル名によって変わるので自分の名前を確認しましょう！


まとめ
-
自分用のsettings.pyを作ることで
・チームで作業するとき
・何度も同じsettings.pyを書くとき
などで圧倒的に楽になります！

普段、プロジェクトごとにsettings.pyを書いている方は試してみてはどうでしょうか。

[Twitter](https://twitter.com/S2notC2)もやっていますのでチェックお願いします！

参考資料
-
webアプリが世に出ていくまでのブログ/[Djangoでsettings.pyを上書きする方法](https://s2notc2.hatenablog.com/)
私が書いているブログです↑
Electronアップデータのチャネル対応

自分用メモなので殴り書き注意

もろもろ都合でelectron, electron-builderも古い。
けど、基本的な構造はそんな変わってない。。。ような気がする。。。（未確認）

## package.json 設定

```package.json
  "dependencies": {
    "electron-auto-updater": "^1.0.0"
...
  }
  "devDependencies": {
    "electron": "^2.0.0",
    "electron-builder": "^20.15.1",
    "electron-packager": "^12.1.0",
    "electron-updater": "^2.21.10"
  },
  "build": {
    "win": {
      "target": "nsis",
      "icon": "icon.ico",
      "publish": [
        {
          "provider": "generic",
          "url": "{インストーラ配置URL}"
        }
      ]
    }
  }
```

インストーラ配置URLには、build実行時にできる「latest.yml」と、インストーラEXE実体を置く。
HTTPS対応してないとダメだったような。
インストーラEXEはバージョンによってファイル名変わる。


## アップデータ処理

```main.js
const autoUpdater = require('electron-auto-updater').autoUpdater;

// アップデート確認
autoUpdater.checkForUpdates();

// アップデート確認開始
autoUpdater.addListener('checking-for-update', function() {
    console.log("checking-for-update");
});

// アップデートあり
autoUpdater.addListener('update-available', function() {
    console.log("update-available");

    // レンダープロセスへ通知
    mainWindow.webContents.send('update_available', 'アップデートあったよ');
    mainWindow.webContents.on('did-finish-load', () => {
        console.log('did-finish-load');
        mainWindow.webContents.send('update_available', 'アップデートあったよ');
    });
});

// アップデートなし
autoUpdater.addListener('update-not-available', function() {
    console.log("update-not-available");

    mainWindow.webContents.send('update_not_available', 'アップデートなかったよ');
    mainWindow.webContents.on('did-finish-load', () => {
        console.log('did-finish-load');
        mainWindow.webContents.send('update_not_available', 'アップデートなかったよ');
    });
});

// アップデートダウンロード完了
autoUpdater.addListener('update-downloaded', function(event, releaseNotes, releaseName, releaseDate, updateURL) {
    console.log("update-downloaded");
    console.log(releaseName);
    mainWindow.webContents.send('update_downloaded', 'DLしたよ');
    return true;
});

// アップデートインストール開始（レンダラープロセスから呼ぶ）
ipc.on('do_quit_and_install', function(event, args) {
    console.log("do_quit_and_install");
    autoUpdater.quitAndInstall();
});

```

## バージョン、マルチチャネル

バージョンは通常「X.X.X」形式

package.json内のバージョンを「X.X.X-beta.1」などとすると、betaチャネル用のビルドが作成できる。
対応している文字列は、「alpha」「beta」。（他にもあるかもしれないが未確認）

ベータ版でインストールした場合は、アップデートチャネルがbetaとなる。
（アップデータ配置URL内の、beta.ymlを参照しにいく）
ベータ版インストール後に自動で通常版に戻したい場合は、beta.ymlの内容を、latest.ymlの内容で置き換える。
Why #JSX (from #react Docs) (Google Translated)

# React 

It includes the fact that rendering logic is intrinsically tied to other UI logic: how to handle events, aging of states, and how to prepare to display data.

# By putting markup and logic in separate files 

Rather than artificially separating technology, React separates concerns in loosely coupled units called "components" that contain both. We will come back to the components in a further section, but if you are not yet familiar with putting markup in JS, this story may convince you otherwise.

# React does not need to use JSX, but 

Most people find it useful as a visual aid when manipulating UI in JavaScript code. It also allows React to display more useful error and warning messages.

Don't get in the way, let's get started.

# Ref 

[Introducing JSX-React](https://reactjs.org/docs/introducing-jsx.html)



# Original by Github issue

https://github.com/YumaInaura/YumaInaura/issues/1397








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
# How does the programmer's brain understand # code? I want to downsize the tutorial code and understand it. (Example of #React Introduction)

# Ref 

[Introducing JSX-React](https://reactjs.org/docs/introducing-jsx.html)

# Codepen 

- Look at the code for a while with Codepen 
- It hardens without understanding 
- Go back to the document and read 

[A Pen by yumainaura](https://codepen.io/pen?&editable=true&editors=0010)

![image](https://user-images.githubusercontent.com/13635059/56621517-bff9e200-6667-11e9-8435-7f39cba1fb32.png)

# To breathe 

# Slowly drink Starba's Matcha tea latte 

# Ripening 

- It's not good to stop in front of the code, but in my case it does. 
- Even such a seemingly simple code will stop, so if anyone's head is bad, it will come as no one is being overseen. 
- If you are slow for about 5 minutes, you will become aware of the problem. "Where is the neck?" 

# Catch the cord's neck 

element

![image](https://user-images.githubusercontent.com/13635059/56621590-00f1f680-6668-11e9-9d30-7b2b77f25efd.png)

I'm just doing render!

![image](https://user-images.githubusercontent.com/13635059/56621591-02232380-6668-11e9-97f1-68d3b773f549.png)

# element 

![image](https://user-images.githubusercontent.com/13635059/56621590-00f1f680-6668-11e9-9d30-7b2b77f25efd.png)

# I'm just doing render! 

![image](https://user-images.githubusercontent.com/13635059/56621591-02232380-6668-11e9-97f1-68d3b773f549.png)

# element 

![image](https://user-images.githubusercontent.com/13635059/56621590-00f1f680-6668-11e9-9d30-7b2b77f25efd.png)

# I'm just doing render! 

![image](https://user-images.githubusercontent.com/13635059/56621591-02232380-6668-11e9-97f1-68d3b773f549.png)

# The order of this code is strange, isn't it? Is it hard to understand? Think and sort 

![image](https://user-images.githubusercontent.com/13635059/56621692-647c2400-6668-11e9-9ce6-6652bbd67b46.png) ![image](https://user-images.githubusercontent.com/13635059/56621693-65ad5100-6668-11e9-8ced-ef4035b7c684.png)

# Can you do it easier? I think, I will cut off something like argument 

![image](https://user-images.githubusercontent.com/13635059/56621713-7f4e9880-6668-11e9-9b7e-66808d17e156.png)

# Down size! 

I feel like I've understood.

![image](https://user-images.githubusercontent.com/13635059/56621888-2cc1ac00-6669-11e9-8e16-422ae7ae9dbd.png)

# It works properly! 

![image](https://user-images.githubusercontent.com/13635059/56621902-32b78d00-6669-11e9-9ff5-b54becaff8d7.png)

[A Pen by yumainaura](https://codepen.io/yumainaura/pen/PgyPvp?&editable=true&editors=0010)

# If you don't know the code, downsize to Hello world 

It might be a rather good way.



# Original by Github issue

https://github.com/YumaInaura/YumaInaura/issues/1396








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
What is # React's JSX Notation?

# Such a guy 

![image](https://user-images.githubusercontent.com/13635059/56620120-c9cd1680-6662-11e9-9207-549c3a8bc509.png)

Variable = HTML.

# Seems equivalent to this 

![image](https://user-images.githubusercontent.com/13635059/56620152-e49f8b00-6662-11e9-904c-88d33adc4144.png)

You can make an element.

# that's all. 

# ref 

[What is React's JSX? -Introduction to React](https://react.keicode.com/basics/jsx.php)

[Introducing JSX-React](https://reactjs.org/docs/introducing-jsx.html)



# Original by Github issue

https://github.com/YumaInaura/YumaInaura/issues/1398








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
Today's Quotation "You can not choose browser of boss and customer" (2019-04-24 around 10 o'clock on Twitter)

# Quote of the day 

"You can not choose the browser of the boss and the customer"

> @ YumaInaura You can not choose the browser of the boss and the customer ww [https://twitter.com/LuciferAlpha/status/110850801829474305](https://twitter.com/LuciferAlpha/status/1120850601829474305)

[2019-04-24 00:52:56 UTC](https://twitter.com/YumaInaura/status/1120853092923138048)

# Quote of the day 

"We can not choose browser of boss and visitor"

> @ YumaInaura You can not choose the browser of the boss and the customer ww [https://twitter.com/LuciferAlpha/status/110850801829474305](https://twitter.com/LuciferAlpha/status/1120850601829474305)

[2019-04-24 00:54:06 UTC](https://twitter.com/YumaInaura/status/1120853384741810176)

# If you read Dazai Osamu as a child, you feel desperate in your life, but if there are still people who would like to read it, what effect would you be aiming for? 

It may be about 18 ban.

> There are people who say that Dazai Osamu can read it. Is that because you are touching such sentences? This sentence will enrich your mind ('



# Original by Github issue

https://github.com/YumaInaura/YumaInaura/issues/1395








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
MacにVisual Studio Code(VSCode) をインストールして日本語化する


### 前提条件

homebrewがインストールされていること

#### Visual Studio Code(VSCode)のインストール

homebrewを使ってインストールします。
(公式サイトからDLする方法もあります)

```bash
brew cask install visual-studio-code
```
以下のようなメッセージが出たら、インストール完了

```bash
==> Installing Cask visual-studio-code
==> Moving App 'Visual Studio Code.app' to '/Applications/Visual Studio Code.app
==> Linking Binary 'code' to '/usr/local/bin/code'.
🍺  visual-studio-code was successfully installed!
```

#### 日本語化

Visual Studio Codeを起動後、「View」→「Extensions」を選択します。

検索ボックスに「Japanese Language Pack for Visual Studio Code」と入力します。日本語を選択して「Install」ボタンを押します。

Visual Studio Codeの再起動を求められるのでRestartを選択すると、日本語化されたVisual Studio Codeが起動します。

###コマンドラインから起動

```bash
$ code
```
td-agent3のファイルディスクリプタの最適化と実行ユーザーをrootに設定した状態でAWS(EB)にデプロイ

**目次**
1. はじめに
2. `.ebextension`内にファイルディスクリプタの最適化をするシェルスクリプトを書く
3. `.ebextension`内にtd-agent3の実行ユーザーをrootにするシェルスクリプトを書く
4. おわりに

## 1.はじめに
環境
・AWS ElasticBeanstalk , Ruby -v 2.6.1
・Amazon Linux AMI release 2018.03
・td-agent -v1.0(td-agent3)

本記事は表題の設定を済ました上で、td-agent-v1.0(td-agent3)をAWSのElasticBeanstalkへデプロイした際の忘備録です。

AWSのElasticBeanstalkへtd-agent-v1.0をデプロイする方法は別記事で書きましたので、[こちら](https://qiita.com/takannporo/items/ba2508b11f5daa9e2bcd)をご参照ください。

## 2. `.ebextension`内にファイルディスクリプタの最適化をするシェルスクリプトを書く
まずは `$ ulimit -n`で現状のファイルスクリプタの値を確認してください。
もし1024と表示された場合は不足しているので、最適化しろとのことです。

```ファイルディスクリプタ設定.conf
 container_commands:
  limits_conf_settings:
    command: |
      cp /etc/security/limits.conf /etc/security/limits.conf.origin
      cd /etc/security/
      sed -i -e '1i root\ soft\ nofile\ 65536\nroot\ hard\ nofile\ 65536\n*\ soft\ nofile\ 65536\n*\ hard\ nofile\ 65536' limits.conf
      cat /etc/security/limits.conf
```
やっていることとしては、
・limits.confを念のためコピー作成
・/etc/security/　配下へ移動
・limits.confの最初の行に下記を追加
・設定が反映されているか確認

```
root soft nofile 65536
root hard nofile 65536
* soft nofile 65536
* hard nofile 65536
```

デプロイ後にもう一度`$ ulimit -n`を実行し、`65536`と表示されれば成功です。

注意していただきたいのは、私の場合`conntainer_commands`を使用しておりますが、環境はそれぞれ違うと思いますので、その辺に関する詳しい設定は[AWS公式](https://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/customize-containers-ec2.html)をご参照ください。


## 3. `.ebextension`内にtd-agent3の実行ユーザーをrootにするシェルスクリプトを書く

```
commands:
  省略

  02-command:
    command: curl -L https://toolbelt.treasuredata.com/sh/install-amazon1-td-agent3.sh | sh

  03-command:
    command: |
      cp /etc/init.d/td-agent /etc/init.d/td-agent.origin
      cd /etc/init.d/
      sed -i "18 s/td-agent/root/g" td-agent
      sed -i "19 s/td-agent/root/g" td-agent
      cat /etc/init.d/td-agent

  04-command:
    command: sudo /etc/init.d/td-agent restart
```
rpmでインストールした直後に`TD_AGENT_USER=td-agent`と`TD_AGENT_GROUP=td-agent`それぞれを`root`に変更する処理を書きました。


## 4. おわりに
各種設定ファイルを書く順番やコマンドが実行されるタイミングに注意してください。
うまく噛み合わないとデプロイに失敗したり、設定が反映されない恐れがあります。

以上となります。
なにかご指摘あれば**優しく**コメントいただけると幸いです😊

---
##### 参考
[Before Installing Fluentd](https://docs.fluentd.org/v0.12/articles/before-install)
Firefoxで一時的に"キャッシュを常時無効化"する方法

プログラムやシステムを検証中に、ブラウザにキャッシュをさせないようにしたいことがよくある。でも、その度にブラウザのメニューからキャッシュをクリアするのは面倒。

# 方法1　
`ツール` -> `ウェブ開発` -> `ネットワーク` にて `キャッシュを無効化`を選択しておけばよい。

<img width="1279" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/a77f201a-9861-9d40-9ec0-d854cd71927d.png">

# 方法2
Macでリロードをするには、`Cmd + r`だが、スーパーリロードというキャッシュを無視してリロードをする方法がある。スーパーリロードは、Firefox+macでは、`Cmd + Shift + r`で実行できる。
React Nativeで画面UIを作る時に横に並べる方法（Androidエンジニア目線）

# 背景
私はAndroidエンジニアですが、iOS向けアプリも作りたいなぁと思い、React Nativeに手を出しました。

# 実装
React Nativeでは、以下のように `render(){}` でViewを返します。
このViewがAndroidのXMLのようなものです。（という解釈をしました）

```typescript:App.tsx
export default class App extends Component<Props> {
  render() {
    return (
      <View style={styles.container}>
        <Text style={styles.welcome}>Welcome to React Native!</Text>
        <Text style={styles.instructions}>To get started, edit App.js</Text>
        <Text style={styles.instructions}>{instructions}</Text>
      </View>
    );
  }
}
```

画面はこうです。
<img width="400" alt="スクリーンショット 2019-04-24 10.06.09.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/84307/6bed5031-2c49-3aa4-da62-ecbfbde19ede.png">

あーなるほど。 `View` ってのは、Androidでいう `LinearLayout` なのですね！（という解釈をしました）
そしてレイアウトはCSSみたいにこんな感じで定義します。


 ```typescript:App.tsx
const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center',
    backgroundColor: '#F5FCFF',
  },
  welcome: {
    fontSize: 20,
    textAlign: 'center',
    margin: 10,
  },
  instructions: {
    textAlign: 'center',
    color: '#333333',
    marginBottom: 5,
  },
});
```


## Textとかを横に並べる方法
`View` は、何も設定しないと `LinearLayout` に `android:orientation:vertical` が着いている状態っぽくなります。
android:orientation: `horizontal` にしたい場合は、 `FlexBox` を使います。
以下のようにします。

```typescript:App.tsx
const styles = StyleSheet.create({
  container: {
    flex: 1,
    flexDirection: 'row',
    justifyContent: 'center',
    alignItems: 'center',
    backgroundColor: '#F5FCFF',
  }
```

> flexDirection: 'row',

これを追加しました。これにより、 `horizontal` になります。
画面はこのように変わります。
<img width="400" alt="スクリーンショット 2019-04-24 10.40.53.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/84307/2feee0ae-051a-9fc2-54c2-24d6027376d3.png">

縦に並んでいたものが、横に並ぶようになりました！

# まとめ
AndroidネイティブでやっていたことをReact Nativeで実現するにはどうしたらいいんだろう…という悩みはありますが、
少しずつ理解していきます！
何も考えずにgnuplotで3D散布図


gnuplotを起動して、

```
splot data.txt
```

```data.txt
1	1	0.015493749
2	2	0.012066544
3	3	0.009397434
4	4	0.007318729
5	5	0.005699832
6	6	0.004439033
7	7	0.003457123
8	8	0.00269241
9	9	0.002096851
10	10	0.001633029
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213451/23d7a755-08c8-bf47-5dc4-4095d1d28ea0.png)
EC2 と ElasticLoadBalancer 間の通信許可について

`EC2 -> 公開 ELB ` の通信を VPC 内のみ許可したがったができなかった
原因はEC2 が公開 ELB にアクセスする際、EC2 に割り当てられたパブリック IP アドレスが送信元 IP アドレスになるため
なのでやりたかったら送信元の EC2 のパブリック IP アドレスを許可するか internal ELB を使う
CloudSearch の Stemming、Synonyms、Tokenization Dictionary の違いまとめ

CloudSearch の Analysys Schemes 設定での {Stemming, Synonyms, Tokenization Dictionary} の違いをよく忘れるので、まとめた。

# Stemming
単語の活用形をケアする。
running をステム run にマッピングすると、running で検索をかけた時に running だけでなく run も含むドキュメントも一致する。

```
"running": "run"
```


# Synonyms
## Aliases
一方向のシノニム。
↓の例では、ビジネスマンで検索すると、ビジネスマン、ビジネス、人物の 3 つを考慮して検索をかけることになる。
(しかし、ビジネスで検索をかけた時にビジネスマン要素は考慮しない。)

```
  "ビジネスマン": [
    "ビジネス",
    "人物"
  ],
```

## Groups

↓同じグループとみなし、全てを同等に考慮して検索をかけることになる。

```
  [
    "スマホ",
    "スマートフォン",
    "スマフォ",
    "タブレット",
    "スマホタブレット"
  ],
```



# tokenization dictionary
形態素解析をコントロールする。
例えば「ウェディングドレス」を「ウェディング」と「ドレス」に分けたくない時に、↓のように指定する。

```
  [
    "ウェディングドレス",
    "ウェディングドレス",
    "ウェディングドレス",
    "カスタム名詞"
  ],
```
Oh My Zsh 手動アップデート コマンド

oh-my-zshを手動で更新する。備忘録も兼ねて。

```sh
$ omz update
```

※ `upgrade_oh_my_zsh` はDeprecatedになりました（ @htakatoshi さんありがとうございます！）

# omz コマンド

`omz`または`omz help`のコマンドで、利用できるコマンド一覧が表示されます。

```
$ omz help
Usage: omz <command> [options]

Available commands:

    help                Print this help message
    update              Update Oh My Zsh
    pr <command>        Commands for Oh My Zsh Pull Requests
```

`omz pr`の方はこんな感じ。

```
$ omz pr
Usage: omz pr <command> [options]

Available commands:

    clean                       Delete all PR branches (ohmyzsh/pull-*)
    test <PR_number_or_URL>     Fetch PR #NUMBER and rebase against master
```
【Linux】 別サーバーにあるファイルをサーバ間で差分をみる(diffする)方法

# サーバー間のファイルの差分を取るの方法

サーバー間にあるファイルの差分を見たいときってありますよね？

例えば開発機と本番機のファイルで差分が無いかとか、
正副サーバーでファイルに差分がないか？　とかの時とか、

そういった際にいちいちscpとかでファイルをコピーしてdiffするのはめんどくさいです。
そこで、一度にできるコマンドとサンプルコードを紹介します。

## 前提
 - server1は/etc/hostsに記載されいてるサーバ名もしくはIPアドレス
 - ssh はauthorized_keys等に設定済みで ssh [サーバー] でログイン可能であること
 　※鍵認証とか必要であればssh のところを適時修正してください。
   ほか様のサイトですが、[ ここ ](https://webkaru.net/linux/ssh-command/)が参考になりました。 (※パスワードとかが聞かれないこと)

## コマンド
ここでは/etc/hostsのファイルを比較しています

```bash
## (例)
server1="hogeserver" # または192.168.xx.xxとか
server2="fugaserver"
file="/etc/hosts"

diff <(ssh $server1 cat $file ) <(ssh $server2 cat $file)
```

## 解説

```bash

<( コマンド )
```

これは標準出力をファイルとして扱う方法です。
システム領域にファイルとして保存されて、実行後に消えます。
　(※すいません間違っているかもしれませんが、言いたいことはユーザーが意識しなくていい領域という事です)



## 応用編

通常は、ファイルリストとか使ってループで回しますよね？
下記は参考までにどうぞ。

``` bash
#!/bin/bash

# 対象サーバーを設定
server1="hogeserver" # または192.168.xx.xxとか
server2="fugaserver"

## 対象ファイルリストを作成
## LIST=$(cat /home/test/filelist.txt)　とかでもOK

LIST="
/etc/hosts
/home/test/aaa
/home/test/bbb
"

## ログをファイル指定
log=/home/test/${0}.log

## ログのクリア
:> ${log}

for file in $LIST
do

  ## echoは、結果を見やすくするために入れておいたほうがいいです
  echo "### diff <(ssh $server1 cat $file ) <(ssh $server2 cat $file) " >> ${log}
  diff <(ssh $server1 cat $file ) <(ssh $server2 cat $file) >> ${log}

  ## exit 　## ループするなら、全loopする前に一度ここでexitさせておいて確認したほうがいいですよw

done

exit 0

```


こんな感じで自動化だ〜
それでは良い Linux ライフを!


（最後まで読んでいただいた方.. よろしかったら いいね 頂けるととても嬉しいです）
PythonでMySQLのNULL対策の違和感

#PythonでMySQLのNULL対策の違和感
　MySQLから読み出したレコードをCSVにファイル出力する時に、MySQLのカラムがNULLだとNoneとそのまま出力されてしまうのは困るので、空文字にするために次のコードを書いた。

```
str(val or "")
```

しかし、valが数字の0の時も空文字になってしまう。0は0として出力してくれない。
バグなのか仕様なのか分からないので、結局None入りの文字列になったところで文字列置換。

```
csv = csv.replace("None", "")
print(csv)
```

このstr(val or "")のお陰でバグになってしまった。
Pythonのバージョンは、3.5.5。Windows10 AnacondaでもRasberian9.8でも同様の現象。
#プログラマ の脳が #コード を理解する仕組みってなんなの？ チュートリアルのコードをダウンサイズして理解したい。( #React Introduction の例 )

# Ref

[Introducing JSX – React](https://reactjs.org/docs/introducing-jsx.html)

# Codepen

- Codepenでコードをしばらく眺める
- さっぱり分からずに固まる
- ドキュメントに戻って読んだりする

[A Pen by yumainaura](https://codepen.io/pen?&editable=true&editors=0010)

![image](https://user-images.githubusercontent.com/13635059/56621517-bff9e200-6667-11e9-8435-7f39cba1fb32.png)

# 呼吸とかする

# スタバの抹茶のティーラテをゆっくり飲む

# 熟成

- コードの前で立ち止まるのは良くないというが、僕の場合は立ち止まる。
- こんな簡単そうなコードでも立ち止まるので、自分の頭が相当悪いのだろうと、誰にもせかされていないのに焦ってくる。
- 5分ぐらいゆっくりしていると、問題意識が立ち上がる。「どこがネックなの？」と。

# コードの首を捕まえる

elementを

![image](https://user-images.githubusercontent.com/13635059/56621590-00f1f680-6668-11e9-9d30-7b2b77f25efd.png)

render してるだけじゃん！

![image](https://user-images.githubusercontent.com/13635059/56621591-02232380-6668-11e9-97f1-68d3b773f549.png)

# elementを

![image](https://user-images.githubusercontent.com/13635059/56621590-00f1f680-6668-11e9-9d30-7b2b77f25efd.png)

# render してるだけじゃん！

![image](https://user-images.githubusercontent.com/13635059/56621591-02232380-6668-11e9-97f1-68d3b773f549.png)

# elementを

![image](https://user-images.githubusercontent.com/13635059/56621590-00f1f680-6668-11e9-9d30-7b2b77f25efd.png)

# render してるだけじゃん！

![image](https://user-images.githubusercontent.com/13635059/56621591-02232380-6668-11e9-97f1-68d3b773f549.png)

# このコードの並び順おかしくね？ 分かりづらくない？ と思って並び替える

![image](https://user-images.githubusercontent.com/13635059/56621692-647c2400-6668-11e9-9ce6-6652bbd67b46.png)
![image](https://user-images.githubusercontent.com/13635059/56621693-65ad5100-6668-11e9-8ced-ef4035b7c684.png)

# もっと簡単にできるっしょ？と思って、引数やらなにやらを削っていく

![image](https://user-images.githubusercontent.com/13635059/56621713-7f4e9880-6668-11e9-9b7e-66808d17e156.png)

# ダウンサイズ！

分かってきた気がするぞ。

![image](https://user-images.githubusercontent.com/13635059/56621888-2cc1ac00-6669-11e9-8e16-422ae7ae9dbd.png)

# ちゃんと動いてるしね！

![image](https://user-images.githubusercontent.com/13635059/56621902-32b78d00-6669-11e9-9ff5-b54becaff8d7.png)

[A Pen by yumainaura](https://codepen.io/yumainaura/pen/PgyPvp?&editable=true&editors=0010)
# コードが分からなかったら Hello world ぐらいまでダウンサイズ

とか、わりと良い方法かもしれない。


# Original by Github issue

https://github.com/YumaInaura/YumaInaura/issues/1391








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
sudo設定 sudoers.d配下の順序の確認

# sudoersで```NOPASSWD: command```とか入れたのに効かない...

# まとめ: 順序が重要(後出しじゃんけん)
なので/etc/sudoers.d/配下で設定する場合、ファイル名によるソート順も影響します。 ```man sudoers```

> 一人のユーザに複数のエントリがマッチするときは、順番に適用される。複数の指定がマッチしている箇所については、最後にマッチしたものが使用される(それが一番明示的なマッチだとはかぎらないが)。

## 確認: 該当ユーザで```sudo -l```
```
User user1 may run the following commands on host1:
    (ALL) ALL
    (root) NOPASSWD: command
```

ならNOPASSWDが効く(後出し)

```
User user1 may run the following commands on host1:
    (root) NOPASSWD: command
    (ALL) ALL
```
だとNOPASSWDが効かない。所属しているグループとかで指定があって後出しされるとそちらが優先されます。

/etc/sudoersを直接編集する場合はストレートに記載順序。
```#includedir: /etc/sudoers.d```配下の順序はどうなるの?

## 確認: ```visudo --check --strict```

```
/etc/sudoers: parsed OK
/etc/sudoers.d/10-group: parsed OK
/etc/sudoers.d/90-user1: parsed OK
/etc/sudoers.d/90-user2: parsed OK
```

各ファイルの文法チェック結果が表示されます。```Files are parsed in sorted lexical order.``` 辞書順ソート。

###P.S. ```visudo -f /etc/sudoers.d/foobar```
文法チェックもしてくれるのでsudoers.d以下も```visudo```しましょうか。

####P.S.2 sudoの設定は慎重に。それと_/etc/group_の修正時!
sudoers設定ミスるとrootをパスワード無しで運用してたりすると面倒なルートに入りますよね。
sudoersは気をつけてたのですがgroupの修正した時にうっかりsudo出来るグループ名を変更しちゃってsudoから外れさせてしまってroot権限持てるユーザを居なくした時があります。:cyclone:

* 確認した環境: CentOSとかFedoraとか。
Chrome 74 でクラスのプライベートフィールドが定義出来るようになりました(キモい)

2019/04/24 日本時間で 7 時頃、 Google Chrome 74 が [リリースされました](https://chromereleases.googleblog.com/2019/04/stable-channel-update-for-desktop_23.html)。

[New in Chrome 74  |  Web  |  Google Developers](https://developers.google.com/web/updates/2019/04/nic74)

Chrome 72 でクラスのパブリックフィールドが定義出来るようになったことを[以前紹介しましたが](https://qiita.com/il-m-yamagishi/items/826c116ebd1fe5a54364)、今回は追加機能として、 **「クラスのプライベートフィールド定義」** が可能になりました。

```js
class A {
  _publicField = 'aa';
  #privateField = 'bb';
}
const a = new A()
console.log(a._publicField)
"aa"
console.log(a.#privateField)
VM134:1 Uncaught SyntaxError: Undefined private field #privateField: must be declared in an enclosing class
```

キモい。

ちなみに仕様はこちら→ [tc39/proposal-class-fields: Orthogonally-informed combination of public and private fields proposals](https://github.com/tc39/proposal-class-fields)
iPad ProでPythonプログラム

スマートな社会人に憧れて**iPad Pro(11inch)**を思い切って購入しました。
iPadそのものも相当楽しいのですがその話は別途ということで、
PCとスマホの中間、PC寄りのサブマシン的な位置付けで使いたいと思って買ったので、
なんかプログラミングとかもできねーもんかなと思って色々探していました。

（そんなに新しいものでもないので）書かれている記事はいたるところに見つけられるのですが、
[Pythonista3](https://itunes.apple.com/jp/app/pythonista-3/id1085978097?mt=8) というアプリを使ってみたので、**実際iPadでプログラミングってどうなの？**ってとこを感想とかまとめておきます。

# iPadでプログラミング
まぁ勉強レベルでなら今や使っている方も多いようです。
JavaScriptとかなら書いて動かしてみたり、シンタックスハイライト機能のついたエディタアプリなんかもありますが、CやJavaなんかはiOSだとコンパイルできないので、言語によっては動作確認すらできません。それでも勉強用アプリなんてのはありますが。
本番用のシステムやアプリを作るにはやっぱり厳しい様子。

近い方法使うなら、iOS端末で書いたコードをiCloudで共有して、PC側で利用くらいが関の山ですね。
余談ですけどこの方法で、iPhoneでプログラム書いてる方もいたりするみたいです。フリックじゃ厳しいんじゃないかなって個人的には思いますが。

# Pythonista3
[Pythonista3](https://itunes.apple.com/jp/app/pythonista-3/id1085978097?mt=8)は**iOS上で動作するpythonの統合開発環境(IDE)**で、まぁ簡単に言うとこのアプリがあればiPhoneやiPad上でpython開発ができるよってもの。です。有料だけど、iPad買っちゃったら1000なんぼとか誤差誤差。

実際の実装画面
<img width=60% alt="IMG_2345.jpeg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/404171/a50c5d43-4fb9-95b6-27c3-fb68d27e9503.jpeg">

なにか新しい言語の勉強をはじめようと思うと、ほぼ必ずと言っていいほど開発環境の構築で壁にぶち当たります（めんどくさい）。
時間をかけてecliplseインストールしてから多すぎる機能に悶えたり、VM立ててLinux入れたりしなくてよいのです。
アプリ入れるだけ。そう、Pythonistaならね。

ちなみに当たり前ですが、ハードウェアキーボードを用意した方が圧倒的に作業効率が上がります。ぼくはiPad購入で金銭感覚が麻痺していたので、SmartKeyboard買いました。

## 良いなぁと思っている点
### アプリ内で見れるドキュメントが豊富
ドキュメントめっちゃ豊富なので、読んでできちゃう人はネットで調べる必要もほとんどないです。
Pythonistaの組み込みモジュールのほか、Pythonでよく使われる便利モジュールはだいたいリファレンスがついてます。普通にそれらのモジュール使えるだけですごいのだけど。

Pythonそのもののチュートリアルもあります。英語が苦じゃない人はほとんどPythonistaでPython学習が完結しちゃいますね。

### ボタン等のUI、ゲーム作成など、目的ごとのフレームワークが準備されている
1こ上で「組み込みモジュール」と言ってたやつですが、これがほんとすごいの。
ゲーム作れちゃうしアプリ作れちゃうの。
サンプルもあるので、こだわりのないブツ作るだけだったらマジですぐ。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/404171/e93f3544-0a6f-86cf-dd50-98b5acd298de.jpeg" width=50%>
↑サンプルで最初から入ってるブロック崩しです。Pythonスクリプトを実行すると、そのまま遊べます。いやブロック崩し遊ぶために買ったんじゃないんですけど。

ゲームやUI実装もじゅうぶん楽しいのですが、iOS端末のいろいろな情報にアクセスできるのがけっこう楽しいです。`photos`モジュールではフォトライブラリにアクセスできるし、`notification`でプッシュ通知を操ったり`motion`ではモーションセンサ使ったり。位置情報なんかもお手の物です。


### iCloudを利用して複数端末でソースコードの共有が可能
書いたソースは端末内だけでなくiCloudにも保存できます。なのでiPadで書いたソースをiPhoneでちょちょいと修正したりとか、iPadで作ったプログラムをiPhoneで実行したりとかできちゃうってワケ。

### 作ったアプリをホーム画面に追加できる
これ感動した。
作ったスクリプトはホーム画面に追加することで、普通のスマホアプリと同様にホーム画面から実行することができます。

### speechライブラリでSiriに好き勝手喋らせられる
面白いけどあんま使わない。Siriが喋るアプリってあんまないですよね。
でもこれ簡単さがとてつもないのです。

喋らせるだけならこんなかんじ↓
<img width=50% alt="IMG_2344.jpeg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/404171/ea0a8d34-b48a-ed11-a5ba-d326b09baf08.jpeg">
`speech.say`に文字列かませるだけ。
実は声とか変えれるのです。それも男性/女性の2種類だけではないのです。
このあたりは、機会があれば…フフフ

さらに便利にする応用的な使い方も各所でたくさん紹介されています。
stashとかね。

また、[**Split View**](https://support.apple.com/ja-jp/HT207582)が使えるiPadなら、２つのアプリを同時に起動することができます。
つまりPythonista開きながらその横でchrome開いて、調べながらコーディングしたり、Youtube垂れ流しながらPythonistaでプログラム組むなんてこともできます。すごい！

## こうなったらもっといいのになと思っている点
### ソースの差分抽出とかできねーかな
これはちょっと贅沢ですね。
まぁやっぱいろいろ作るほど欲しくなる。バージョン管理を考え出した人は天才です。

### フォルダのツリー表示ができたらいいな
フォルダはツリー表示できないので、たくさん階層を掘ると行き来するのがたいへんです。
ただ、よく使うフォルダはお気に入りに登録して、一発で移動できる機能もあります。


ってかんじのアプリです！
なんかPythonistaで作ったときは記事にしますね！

[追記]
[Pythonista3のUI実装で遊ぶ[超超入門]](https://qiita.com/EkatoPgm/items/31c84b458f47752e3517)
ESP32のSPIFFSライブラリ作成

　espressif(公式）がgithubで提供しているSPIFFSのサンプルコードをライブラリ化しました。
ライブラリ化したコードは[github](https://github.com/kmaepu/ESP32_SPIFFS)で公開しています。
(ライセンスはフリー)
元のソースコードは[こちら](https://github.com/espressif/arduino-esp32/tree/master/libraries/SPIFFS)です。

##環境
　開発環境：Arduino-IDE（Arduino-ESP32）
　使用ボード：ESP-32-DevKit

##関数一覧

・void __begin__(void)
　　SPIFFSの初期化
 ・void __listDir__(const char *dirname, uint8_t levels);
　　SPIフラッシュメモリ内のファイルをリスト表示
 ・void __readFile__(const char *path, char *buf);
　　指定したパス（*path）のファイルを読み込んで、引数の＊bufに格納
 ・void __writeFile__(const char *path, const char *message);
　　指定したパス(*path)のファイルを作成し、文字列(*message)を書き込み
 ・void __appendFile__(const char *path, const char *message);
　　指定したパス（*path）のファイルに文字列(*message)を追記
 ・void __renameFile__(const char *path1, const char *path2);
　　指定したパス(*path1)のファイル名を指定したファイル名(*path2)に変更
 ・void __deleteFile__(const char *path);
　　指定したファイル（*path）を削除
 ・void __testFileIO__(const char * path);
　　SPIFFSの動作確認

##サンプルコード
サンプルコードは各関数を順に実行するようになっています。
実行すると以下のようにシリアルコンソールへログが表示されます。

<img width="210" alt="Serial console output.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183282/53b2d8b5-d65a-d57e-b933-dea84da96399.png">

```c++:spiffs_example.ino
#include "esp32_spiffs.h"

ESP32_SPIFFS spiffs;

char file_buf[16384];

void setup() { 
  Serial.begin(115200);
  memset(file_buf,0,sizeof(file_buf));
  spiffs.begin();
  
  // ファイルを作成して文字列を書き込む
  spiffs.writeFile("/hello.txt", "Hello ");
  // 指定したファイルに文字列を追記
  spiffs.appendFile("/hello.txt", "World!\n");
  // ファイルをリスト表示
  spiffs.listDir("/", 0);
  // 指定したファイル名を変更
  spiffs.renameFile("/hello.txt", "/foo.txt");
  // 指定したファイルを読み込む
  spiffs.readFile("/foo.txt",file_buf);
  Serial.printf("%s\n",file_buf);
  // 指定したファイルを削除
  spiffs.deleteFile("/foo.txt");
//  spiffs.testFileIO("/test.txt");
//  spiffs.deleteFile("/test.txt");
  Serial.println( "Test complete" );  
}

void loop() {
}
```
なぜ #JSX なのか ( #react Docs より ) ( Google Translated )


# Reactには、

レンダリングロジックが他のUIロジックと本質的に結び付いているという事実、つまりイベントの処理方法、状態の経時変化、およびデータの表示準備方法が含まれています。

# マークアップとロジックを別々のファイルに入れることで

技術を人為的に分離するのではなく、Reactは懸念を両者を含む「コンポーネント」と呼ばれる疎結合単位で分離します。 我々はさらなるセクションでコンポーネントに戻ってくるでしょう、しかしあなたがまだJSにマークアップを入れることに慣れていないならば、この話はそうでなければあなたを納得させるかもしれません。

# ReactはJSXを使用する必要はありませんが、

ほとんどの人はJavaScriptコード内でUIを操作するときに視覚的な補助として役立つと思います。 それはまたReactがより有用なエラーと警告メッセージを表示することを可能にします。

邪魔にならないようにして、始めましょう。

# Ref

[Introducing JSX – React](https://reactjs.org/docs/introducing-jsx.html)

# Original by Github issue

https://github.com/YumaInaura/YumaInaura/issues/1390








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
#React の JSX 記法ってどんなの？

# こんなやつ

![image](https://user-images.githubusercontent.com/13635059/56620120-c9cd1680-6662-11e9-9207-549c3a8bc509.png)

変数 = HTML 的な。

# これと等価らしい

![image](https://user-images.githubusercontent.com/13635059/56620152-e49f8b00-6662-11e9-904c-88d33adc4144.png)

エレメントを作れるのね。

# 以上。

# ref

[React の JSX とは？ - React 入門](https://react.keicode.com/basics/jsx.php)

[Introducing JSX – React](https://reactjs.org/docs/introducing-jsx.html)


# Original by Github issue

https://github.com/YumaInaura/YumaInaura/issues/1389








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
[Sass] config 

1. yarn eject
2. config change 

```
 use: getStyleLoaders({
                importLoaders: 2,
                sourceMap: isEnvProduction && shouldUseSourceMap
              }).concat({
                loader: require.resolve('sass-loader'),
                options: {
                  includePaths: [paths.appSrc + '/styles'],
                  sourceMap: isEnvProduction && shouldUseSourceMap
                }
              }),

```
php-master-changes 2019-04-23

今日は JIT 実装の修正、opcache の不要コード削除の最適化修正、tsrm.m4 からの sinclude の利用の削除、sapi/cli/README の削除、array_map() の警告文に誤った型が出てくる問題の修正、JsonSerializable で use after free が起きる場合がある問題の修正、不要コードの削除、DateInterval オブジェクトを比較不可能として警告を出すようにする修正があった！

# 2019-04-23
## dstogov: Fixed JIT for DEFINED opcode
- https://github.com/php/php-src/commit/499b25c3036cc6e61ab1b024ed77e105f3249ba4
- ext/opcache/jit で、[defined()](https://www.php.net/manual/ja/function.defined.php) の JIT 実装を修正

## dstogov: Use \_zend\_hash\_find\_known\_hash() for IS\_CONST operand
- https://github.com/php/php-src/commit/74153193c6309c00d14888a36de1bbedac8a6eec
- ext/opcache/jit で、ハッシュテーブル参照時にオペランドが IS\_CONST なら zend_hash_find() でなく \_zend\_hash\_find\_known\_hash() を使うよう修正

## dstogov: Remove unused BIND_STATIC insructions
- https://github.com/php/php-src/commit/1827d784b5c5ce688b635300c3f9770b4fb78227
- [7.4~]
- ext/opcache で、最適化の際に不要な ZEND\_BIND\_STATIC 命令を削除するよう修正

## petk: Remove sinclude from tsrm.m4
- https://github.com/php/php-src/commit/07a95b401799e60a53fb080936da57758e6aaa44
- [7.4~]
- ビルドシステムで、tsrm.m4 から sinclude の利用を削除
- スタンドアロンの TSRM のビルドで使われていたが、もうそんなことはやらない前提の昨今なので

## petk: [ci skip] Remove CLI sapi README
- https://github.com/php/php-src/commit/9443bd1bbf54794dd62b945ee2907a2535f41639
- [7.4~]
- sapi/cli/README を削除
- [PHP マニュアルが](https://www.php.net/manual/en/features.commandline.introduction.php)[あるから](https://www.php.net/manual/en/features.commandline.differences.php)いいでしょ、ということらしい

## nikic: Fixed bug [#77931](https://bugs.php.net/bug.php?id=77931)
- https://github.com/php/php-src/commit/cedee4408b21baed6376a2702d7d8d01e8d4a111
- [7.3~]
- [array_map()](https://www.php.net/manual/ja/function.array-map.php) の警告文に誤った型が出てくる問題の修正

## nikic: Fixed bug [#77843](https://bugs.php.net/bug.php?id=77843)
- https://github.com/php/php-src/commit/4831e150c5ada631c1480098b8a42cbf024d8899
- [7.2~]
- ext/json で、JsonSerializable で use after free が起きる場合がある問題の修正
- 要素が参照の配列を扱う際に内部的に変な変更がかかる可能性があったくさい

## bugreportuser: Remove duplicate zend_unset_timeout()
- https://github.com/php/php-src/commit/d65f93f92b8a924ee74592d182df1a6832f774f0
- [7.4~]
- zend_unset_timeout() を無駄に呼んでいる箇所があったのを修正

## nikic: Make DateInterval objects uncomparable
- https://github.com/php/php-src/commit/3cfbbf29561f931560e108fb47bbdef84e12fd5f
- [7.4~]
- ext/date で、[DateInterval](https://www.php.net/manual/ja/class.dateinterval.php) オブジェクトを比較不可能として警告を出すよう修正
- 中身が違ってても全部等しいものとして扱われていておかしかった

## dstogov: Implemented JIT for SWITCH_LONG/SWITCH_STRING
- https://github.com/php/php-src/commit/4c25fc5479dd7e40a971aeaf34799aa77383cc3d
- ext/opcache/jit で、SWITCH_LONG/SWITCH_STRING 用の JIT コード生成を実装
Pandasとその活用方法

### Pandasとは
PandasとはPythonのもつデータ解析のためのライブラリのことである。

Python自体でビッグデータの統計やグラフ処理はfor文を用いて膨大な計算回数を行わなければならないが、このPandasというライブラリを使うことで高速処理を行うことが可能になる。

Pandasはオープンソースであり、誰でも無料で利用することができる。ソースコードは主にC言語が使われており、それによって高速処理が可能になっている。

データの分析は前処理の難易度が高いとされているので、それを簡易的に行えるPandasはまさに必須のライブラリといえる。

Pandasを利用するには、Anacondaを使ってPythonなどとまとめてダウンロードするのが簡単でいいだろう。

Anaconda: https://www.anaconda.com
為替予測モデル x 独自トレードロジック の FX自動トレードシミュレーションで モデルにトレードロジックも入れ込む (+α）

[機械学習を用いたオレオレFXシステムトレーディングプログラムのロジック解説](https://qiita.com/ryo_grid/items/56a086fee1b780157df7)
のプログラムを久しぶりにいじっているのですが、トレードロジックも可能な範囲でモデルに取り込んだ方が賢くない？
って思ったので、今実装中の内容を書いてみます。
　
現在の最新のコードは以下です。
https://github.com/ryogrid/fx_systrade/blob/81c5e396e3032104289f3adaa8dda438651fd7bf/xgboost_trade_colab_gpu.py
　
少し前のコードですが、Google Colaboratoryですぐ試せるようにした Jupyter Notebook はこちら。
https://github.com/ryogrid/ryogridJupyterNotebooks/blob/master/run_xgboost_trade_best_score_plus_30p_saigen_not_use_gdrive_colab_cpu_4thread_specified_no_use_dumped_pickle.ipynb

# 実装中のプログラム
簡潔に書きます。

正直なところ全てをモデルに入れ込むのは難しい、というか思いつかないので、ひとまず、為替予測を行うのではなく、ある日にトレードをした場合に勝てる確率がどれだけあるか、を出力するモデルというのを考えて、実装しています。
　
以下ということです。

- ショートかロングかは既存の為替予測のモデルを用いて判断する
- 新しいモデルには既存プログラムに入力していたデータに加えて、各足の時点での既存モデルでの予測結果を加えます。
    - メタ特徴量とか言う・・・やつだと思います。値の作り方とかはググって下さい。交差検証のようにK分割とかして作ります。
- 2値分類のモデル
- XGBoostを使う (それなりに使えるものがXGBoostしかない)
- 学習時のラベルデータ
    - 本記事の先頭に貼った記事を読んでもらえば分かりますが、決済ルールは単純なものなので、データを作るのはちと面倒ですが、決済するタイミングと結果はある時点 T{n} を定めれば、唯一の結果として求まります。
- 既存のトレードロジックの他の条件は取り除く (チャートの形状、ボラティリティなどを考慮するといったもの）
    - 損切りもひとまず行わないようにする 

ってな感じです。

まあ、とどのつまり？、トレードロジックの方でも為替予測モデルに入力している情報を使って、売買のフィルタリング（見送る）とかをしているので、そこのパラメータもチューニングするのってなんかムダな感じするなあ、と思ったのがきっかけだったりします。
　
何かアイデア等あればコメント欄まで。
知恵をお借りできれば幸いです。


# なんちゃってFXトレードロボコンテスト
記事のタイトルの+αについて書いておきます。
カブロボ（株）はかなり前からコンテストとか行われていますが、FXについてはあまり知らないなあということで、知人とどっちが賢いトレードプログラムを書けるか競争しています。
で、2人だけってのも寂しいので、興味のある方がいれば一緒にやりましょう。
私のコードを改良してみた、とかそんなんでもOKです!
参加表明はこの記事のコメント欄か、Twitter の id:ryo_grid の bio からたどれるメールアドレスにメールか、Twitterで ryo_grid まで ご連絡ください。

以下、レギュレーション的なもの。正直ガチンコではないので、普通に考えるとあり得ないものも含まれますがご理解下さい。

- 2001年から2008年まで + 2009年の初日のちょこっと、のドル円の5分足のデータを使います
    - https://github.com/ryogrid/fx_systrade/blob/ab12938e2d4f5a6434c22a1c97efd76425d75481/USD_JPY_2001_2008_5min.csv
    - Openの列にある始値をその日の為替とする
- 学習等に用いてよいのは2001-2006のデータ（後述の例外っぽいものもあるので注意）
- 評価は2007-2008 + 2009の頭のちょびっとで行う
- 初期資産は100万円
- スプレッドは0.3銭 (上記の始値の+0.15銭が買い値、-0.15銭が売り値とします)
- トレードは一日一回を上限とし、資産の何割を投入するかは自由です。
- 取引手数料は無し (スプレッドが実質的な手数料ということになります)
- 決済したポジションは次の日からすぐに利用できるものとする (従って、複利で資産が変化します）
- 期限は5月末日。結果と、入力する上記のCSVから結果を再現可能な、作成したコード等は私の方で確認できる状態にしておいて下さい。
　（別にロジックを盗もうとかそういうつもりはないので、public にして問題がないのであれば、githubにでも置いてください)
- (これがかなりアレなのですが、) 作成するプログラムのパラメータチューニングにおいて、評価期間のデータを用いることはアリです。なぜなら、データが見えてしまっている以上防ぎようがないからです。
    - 私もXGBoostのモデルとトレードロジックの中のパラメータを、評価期間のデータでバックテストした結果で評価値としてチューニングするとかアレなことをしています
    - ただし、機械学習的な手法を用いる際に、評価期間のデータを入力データセットに含めるのはNGです。
    - いろいろ曖昧なルールですが、まあ、よしなに判断して下さい
- レバレッジは1倍です
- 計算資源に縛りはありません

なんか書き忘れたことがありそうですが、曖昧な点があればコメント欄までお願いします。
ちなみに、参考までに、私のコードだと、ベストのパラメータで+50%が現時点で最高のリザルトです。
  
以上！
【個人開発】SpeakerDeckに投稿されている日本語のスライドを集めたサイトを作った

スライドと言えばおなじみのサービス[SpeakerDeck](https://speakerdeck.com)から日本語のスライドをまとめたサイトを作りました！

https://slidejp.dev/

## トップページ
<img width="1104" alt="スクリーンショット 2019-04-24 8.47.11.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160183/9e3bc3b6-28cb-449f-93f7-1b8a74795114.png">

## 主な特徴
- SpeakerDeck(https://speakerdeck.com/) から抽出された日本語のスライドが見れる
- カテゴリ別で閲覧可能

## 技術的な話
## 日本語スライドの集め方
SpeakerDeckが提供しているAtomフィードから抽出
https://speakerdeck.com/c/technology.atom
https://speakerdeck.com/c/programming.atom
etc..

フィードの`title`, `content`から日本語(厳密に言えば中国語もひっかかる)かどうかのチェックを正規表現より抽出する。

```
/[\p{Han}\p{Hiragana}\p{Katakana}]/
```

カテゴライズも同じくフィードの`title`, `content`から正規表現でカテゴライズ

```ruby
# イメージ(ruby)
if "dockerの秘密".match(/docker/i).present?
 category = "docker"
end
```

上記のバッチを１時間に１回動かしています。

## その他
## 言語,ミドルウェアなど
- Ruby 2.x
- Ruby on Rails 5.x
- aws ec2
- apache
- passenger

## Gem
- [capistrano (deploy)](https://github.com/capistrano/capistrano)
- [sitemap_generator (サイトマップ生成)](https://github.com/kjvarga/sitemap_generator)
- [meta-tags (SEO)](https://github.com/kpumuk/meta-tags)
- [kaminari (paginate)](https://github.com/kaminari/kaminari)
- [whenever(cron)](https://github.com/javan/whenever)
- [enumerize(enumのkeyを文字列で扱う)](https://github.com/brainspec/enumerize)
LINE WORKS を利用できるスマートフォンを Microsoft Intune で制限する

LINE WORKS の外部 MDM 連携機能で、MDM から配布されたアプリからのみ LINE WORKS を利用するように制限できます。

ここでは Microsoft Intune で LINE WORKS の外部 MDM 連携機能を設定する手順を説明します。

なお、Microsoft Intune でデバイス管理の事前設定が完了している必要があります。

##設定手順

1.Azure Portal にアクセス
2.Microsoft Intne > [クライアント アプリ - アプリ] にアクセス
3.[+追加] をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/a00374b0-7a52-da6c-245e-d242c33d1659.png)

4.[アプリを追加する] ブレードで アプリの種類 -> iOS を選択
5.[アプリの選択] ブレード -> 検索ウィンドウに "LINE WORKS" を入力し、検索結果から "LINE WORKS" をクリックし、[選択] ボタンをクリック
6.アプリ情報 構成 をクリックし、[アプリ情報] ブレードの情報を確認 (特に変更の必要はない)
7.[アプリを追加する] ブレードの [追加] ボタンをクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/43278612-d3dd-ca55-e693-55eba78420c6.png)

8.[クライアント アプリ - アプリ] ブレードで [アプリ構成ポリシー] をクリック
9.[+ 追加] をクリック
10.任意の名前を入力
11.[デバイスと登録の種類] で "マネージド デバイス" を選択
12.[プラットフォーム] で "iOS" を選択
13.[関連アプリ] で "LINE WORKS" を選択し [OK] をクリック
14.[構成設定] で [構成設定の形式] のプルダウンで "構成デザイナーを使用する" を選択
15. LINE WORKS 管理画面で [セキュリティ] タブの [モバイル セキュリティ] を開く
16. [デバイス管理 (MDM)] の [外部MDM連携] で "有効にする" を選択
17. 生成された "Key Value" をコピーし、[保存] をクリック
 注意: これによりユーザーはアプリからログアウトされ、MDM 配布のアプリをインストールするまでは、アプリで LINE WORKS にログインできなくなります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/1ec8ed02-df45-c969-fddb-ea3f12ba3b54.png)

18.Azure Portal に戻り、[構成設定ブレード] の XML プロパティーを次のとおり入力
 構成キー: LineworksAuthCode
 値の型: 文字列
 構成値: <生成された "Key Value" の値>
19.[OK]ボタンをクリック
20.プロパティの [保存] ボタンをクリック

設定内容は下図のようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/c9b4eb03-c3de-36a2-5f22-7e74838b9be4.png)

これらの設定に基づきユーザーが "会社のポータル" アプリなどから LINE WORKS をインストール可能となるよう設定を行います。

以降は、ユーザーが自身で App Store からインストールしたアプリからログインした場合には 「このデバイスからのアクセスは管理者に許可されていません」のメッセージが表示されログアウトされるようになります。
メソッドへの引数のデフォルト値に対するオーバーライド


# 引数のデフォルト値とメソッドのオーバーライド

SystemVerilogではメソッドの引数にデフォルト値を指定することができます。呼び出す側で引数を省略した場合、このデフォルト値が使用されます。

```verilog
class Base;
  virtual function void displayMessage(string s = "Base class's default value");
    $display("%s", s);
  endfunction
endclass
```

ところでこのようなメソッドをオーバーライドしてデフォルト値を変えた場合どうなるでしょうか? 以下のコードで考えます。

```verilog
class Base;
  virtual function void displayMessage(string s = "Base classe's default value");
    $display("%s", s);
  endfunction
endclass

class Derived extends Base;
  virtual function void displayMessage(string s = "Derived class's default value");
    super.displayMessage(s);
  endfunction
endclass

program top();
  initial begin
    Base base;
    Base base2;
    Derived derived;

    base = new();
    derived = new();
    base2 = derived;

    base.displayMessage();    // Base class's defalut value
    derived.displayMessage(); // Derived class's default value
    base2.displayMessage();   // ?
  end
endprogram
```

base.displayMessage()がBaseのデフォルト値を採用するのと、derived.displayMessage()がDerivedのデフォルト値を採用するのは問題ないでしょう。base2.displayMessage()では、参照先のクラスの実体はDerivedですがクラスハンドルの型はBaseです。どちらの値が使用されるでしょうか? いくつかのシミュレータで確認した結果、以下のようになりました。

|シミュレータ | 結果 |
|---|---|
|Synopsys VCS 2014.10|Baseを表示。クラスハンドルの型でデフォルト値が決まる|
|Cadence Incisive 15.20|Derivedを表示。参照しているクラスの型でデフォルト値が決まる|
|Aldec Riviera Pro 2017.02|Derivedを表示。参照しているクラスの型でデフォルト値が決まる|

ちなみにSytemVerilog 2017のLRMを読んでみたのですがこの部分の動作は定義されていないようです。
未定義とは言え一見VCSの動作がおかしいように思われるかもしれませんが、そうとも言い切れません。実はVCSの動作はSystemVerilogが参考にしているC++の仕様に従った動作なのです。
C++のソースコードをコンパイルすると、メソッドの呼び出しには引数をスタックに積んでから目的のメソッドをコールするようなオブジェクトコードが生成されますが、デフォルト引数を、参照しているクラスの型によって変更するとその条件判断に実行時間がかかってしまいます。そこでC++ではそのオブジェクトへのポインタの型でデフォルト引数を決め打ちしています。VCSの動作はC++の仕様と互換性が取れているのです。


# 推奨コーディングスタイル

上記のように仕様が未定義で、シミュレータによって解釈が異なるので、引数にデフォルトを持つメソッドのオーバーライドは可能な限り避けるべきです。下記のようにデフォルト値を受け取るメソッドと本体の処理を分離すれば、本体の処理自体は派生クラスでオーバーライド可能です。

```verilog
class Base;
  virtual function void displayMessage(string s = "Base class's default value");
    displayMessageCore(s);
  endfunction

  virtual protected function void displayMessageCore(string s);
    $display("%s", s);
  endfunction
endclass

class Derived extends Base;
  virtual protected function void displayMessageCore(string s);
    $display("Called from derived: %s", s);
  endfunction
endclass
```

残念ながらSystemVerilog 2017時点での仕様にはC++やJavaのfinalに相当する、メソッドのオーバーライドを禁止する機能はありません。この点はコメントでオーバーライド禁止と書く等、運用で気を付けるしかないです。


ただしUVMの場合、UVMのクラスのメソッドは多くが引数にデフォルト値を持っているため、これらの派生クラスを作るのに、上記のルールを守ることは現実的ではありません。あきらめて、派生クラスではベースクラスと引数のデフォルト値を合わせるようにして、将来仕様変更でUVMのベースクラスのデフォルトの値が変更されないことを祈るしかありません。