OmniAICreator/Qiita-1.07M huggingface dataset:
ChromeOSは、開発マシン用OSとしてかなり使える（親指シフトも使える）。

# ChromeOSの私的使いどころを３行で。
- 開発者(DEV)モードでのchromebrewとcrostini(≒仮想環境Debian)を併用する(と捗る)
- crostini側では、IntelliJとGITを中心に使う（RAM割当3GB弱）
- ChromeOS側でブラウザ、エディタ、音楽プレイヤー等を用いる

なお、Androidstudioも入れてあるがまだ、未使用。もちろん、Androidアプリは普通に使えるし、ChromebookとAndroid実機との連携機能もある模様。ChromebookのAndroidstudioがグーグルによって公式サポートされた頃に、FLUTTERでの開発に使った試用記を書くかも。
あと、SpacemacsやVimも普通に動いている。

なお、Chromebookで開発する際の基礎知識は以下で得ておこう。
cf.[ChromeOSを開発マシンにするために知っておく基本的な３つのこと](https://qiita.com/yasuki/items/fa14c258df0d088c6b98)

## 親指シフト
私含め一部の人には、親指シフトが普通に使えるかどうかは死活問題であろうため、以下に書いておく。キー配列さえ問題なければ、Chromebookは開発者モードを使えば、普通に親指シフトを使える。ただし、少し課題あり。Chromebook安定版モードでもバイナリ配布が行われれば、使えるものと考えられる。

cf.購入したChromebookは[「Acer Chromebook 15 (CB3-532)」](http://kakaku.com/item/K0000944020/spec/)


# ChromeOSの使いどころ
## IntelliJでの開発
入力等は普通。業務使いする場合には、RAM容量がボトルネックとなることが予想されるので、本来はRAM8GB以上を積んでいるChromebookを選ぶべきか（ただし、現状、あまり安いChromebook 8GB機はなさそう）。私の場合、JVM設定（SCALAなのでSBT_OPTS）を変更し、コンパイルはコマンドプロンプト側で行うことでなんとかなっている。
CPUスペックも当然に重要だが、コンパイルが走っている間もChromeOS側は、残りのRAM(私の環境では、割当1GB強)の範囲内で普通に動くので、過度な期待をしなければなんとかなる（この記事も諸々コンパイル中に書いている）。あと、Ctrl+Bでのソースコード検索が少しもたつくことはあるが、許容範囲。

## 日本語入力
ChromeOSの日本語入力環境に、crostini(≒仮想環境Debian)側でビルドしたoyainputを噛ませて、親指シフトで入力している。グーグル日本語入力＋親指シフトという環境は、私の場合、MacやWindowsと同一のものとなるため、不便がない。
ディフォルトの設定で普通に使えているが、立ち上げた時に英小文字(abc)の直接入力への切り替えができなくて少し困っている（私がChromebookの入力環境を分かっていいないだけかもしれないが）。また、Ctrl+Cでの終了も効かなくなるため、以下のような設定を.bashrcに追記してなんとかすることにした(代わりに、PKでプロセスを殺し終了させる)。これは、シフトキーで英大文字は直接入力できることを利用したもの。

```.bashrc
# Put your fun stuff here.
alias CD='cd /media/fuse/crostini_機器ごとに一意の値_termina_penguin'
alias PK='sudo pkill oyainput'
alias oya='nohup sudo /usr/local/home/bin/oyainput chronos &'
```

作者の方がoyainputをオープンソースにしてくださっているので、終了方法をChromebook向けにカスタマイズすべきなのかもしれない。
なお、CDでcrostini側のホームディレクトリに移れるようにしておくと、時々役に立つ。

# 終わりに
Chromebookに関する情報は、Webで割合と豊富に見つかるので助かる。ただし、開発者モード(DEV)に関しては、直近の変更がかなりある模様なので、２ヶ月以内の情報を漁るのが良いと思う。
参考にしたサイトの例。
https://www.aboutchromebooks.com

私はダウンロードしたもろもろなどをUSBに保存することにして本体のストレージ容量不足に陥らないようにしているのだが、以下の情報を見るに、これを簡単にできたのは最近の開発者モードでサポートされたばかりの機能のためなのかもしれない（そのうち安定版にも入るはず）。
https://www.aboutchromebooks.com/news/chrome-os-72-dev-channel-usb-sd-card-support-project-crostini-chromebooks-android-9-pie/

画面キャプチャも簡単にできる（CRTL+F5キー相当）ので、保存先のキャプチャを貼っておく。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/16455/c42ec007-b351-61bb-4971-38d7dba65a18.png)

☆上の黒いところは、crostini側のIntelliJの一部。問題なくキャプチャできることを確認したまで。


## 軽く懺悔

３万円ほどでChromebookを衝動買いして２日目。昨日、こんな記事を書いてしまった。
https://qiita.com/Nimimal/items/3750ff6473b9a06e8dcc

初日にChromeOSは開発用途では厳しいと思いxubuntuを入れてみたりしたが、そちらはそちらで設定が面倒そうなので、ChromeOSに戻ってきて開発者モードでcrostiniを併用し始めたところそこそこ快適になったので、格安ChromebookをDISったことを軽く懺悔しておく。少なくとも外出先でソースコードを軽くいじくってコンパイルしつつ、メールしてSlackして株価をチェックして、といった用途には３万円Chromebook（画面はFULL HD）は使い物になるね。多少詰まるところがあっても、粘って使ってみるものだ。
Phoenixバージョン確認／アンインストール／インストールの手順をまとめてみた

[fukuoka.ex](https://fukuokaex.connpass.com/)代表のpiacereです
ご覧いただいて、ありがとうございます:bow:

Phoenixは、最新版の1.4が出たものの、関連ライブラリのバージョンアップが追いついていない（特にEcto 3.x系の関連）ことがあり、Phoenix 1.3系に戻したいケースがあるため、バージョン確認／アンインストール／インストールの手順をまとめておきました

なお、[「Phoenix」](https://qiita.com/piacerex/items/b7787580fce5f148242f#phoenix%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)は、ElixirのWebフレームワークです

内容が、面白かったり、気に入ったら、「いいね」よろしくお願いします :wink:

# Phoenixのインストール

```sh:Phoenix最新版のインストール　※実行した時点での最新版がインストールされます
mix archive.install hex phx_new
```

```sh:Phoenixのバージョン指定インストール　※ここではPhoenix 1.6.5を入れています
mix archive.install hex phx_new 1.6.5
```

```sh:Phoenix&nbsp;1.3以前のインストール
mix archive.install https://github.com/phoenixframework/archives/raw/master/phx_new.ez
```

※Phoenix 1.3は、ライブラリ（plug_cowboy）不足で起動失敗するので、 @Yoosuke さんの [こちらのコラムを参考にしてください](https://qiita.com/Yoosuke/items/91ef4ce0ba8cf6dcb2a9)

# Phoenixのアンインストール（もしくはアップグレード）

```sh:Phoenixのアンインストール
mix archive.uninstall phx_new
```

Phoenixのアップグレード用コマンドは無いので、一度、アンインストールして、インストールし直してください

# インストール済みPhoenixバージョンを確認する

```sh
mix phx.new -v
Phoenix v1.6.6
```

# Phoenixのパッケージ名を確認する

```sh
mix archive
…（インストール済パッケージが並ぶ）
* phx_new-1.6.6
…（インストール済パッケージが並ぶ）
```

## Phoenix 1.3インストール済で1.4以上をインストールすると…

以下のようなエラーが出るので、先にアンインストールは行ってください

```sh
== Compilation error in file lib/phx_new/ecto.ex ==
** (File.Error) could not read file "c:/Users/chris/oss/phoenix/installer/templates/phx_ecto/repo.ex": no such file or directory
    (elixir) lib/file.ex:319: File.read!/1
    lib/phx_new/generator.ex:28: anonymous fn/4 in Phx.New.Generator."MACRO-__before_compile__"/2
    (elixir) lib/enum.ex:1925: Enum."-reduce/3-lists^foldl/2-0-"/3
    lib/phx_new/generator.ex:24: anonymous fn/3 in Phx.New.Generator."MACRO-__before_compile__"/2
    (elixir) lib/enum.ex:1925: Enum."-reduce/3-lists^foldl/2-0-"/3
    expanding macro: Phx.New.Generator.__before_compile__/1
    lib/phx_new/ecto.ex:1: Phx.New.Ecto (module)
```

# 注意：既存Phoenix PJのバージョンはmix phx.newした際のバージョンのまま

Phoenixは、起動済みのWebサーバ上で動くWebアプリケーションとは異なり、各Phoenix PJ毎にPhoenixのWebサーバ機能が搭載されたアプリケーションとして構築されるため、Phoenixをインストールし直しても、構築済みのPhoenixのバージョンは変わりません

Phoenixの実態は、Webサーバ機能を含んだソースコードやアセットをジェネレートするアプリケーションに過ぎず、PJ生成時点のインストール済Phoenixバージョンでソレを行うだけなのです

# p.s.「いいね」よろしくお願いします

よろしければ、ページ左上の ![image.png](https://qiita-image-store.s3.amazonaws.com/0/155423/4d515047-cc48-382e-c2b1-3ad0cc50dbbf.png) や ![image.png](https://qiita-image-store.s3.amazonaws.com/0/155423/a4e3da58-70a3-4197-95a2-6a6906650d01.png) のクリックをお願いしますー:bow:
English 🤖エンジニアの爆速勉強のためにはスキンヘッドになるべし、SteveJobsを見習って

lets cut your hair and be skin like Steve JOBS 👐 For engineering studying outputting speed 

# Why jobs skinn head?

- jobs wear only タートルネック
- jobs is near skinhead
- lets study from it!

![image](https://user-images.githubusercontent.com/13635059/50578720-dc87c980-0e80-11e9-8df4-7fa4f535a5cc.png)

# Beacause why reason

- Hear setting is to troublesome
- Rob our energy so much
- We wear nit cap but skin head is so low cost

i will not be skin head but i will go to 床屋 house today : )

# Cont down Cont down Cont down !

- for studying and outputting we required cost down
- for digital world for analog world different? no both refactoring require 👍 
- We will be happy by reractoring our head be skin head yes yes yes 😃

Japanese 🤖エンジニアの爆速勉強のためにはスキンヘッドになるべし、SteveJobsを見習って

---

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

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








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
mysql create userで指定するhostの意味

SQLを久しぶりに触った時に忘れているのでメモします。

```createuser.sql
CREATE USER 'exampleusername'@'examplehostname.com' IDENTIFIED BY 'examplepassword';
```

上記のようにユーザーを作成した際に指定している
examplehostname.com
↑この部分ですが
ホストを指定しているということはわかりますが
なんとなくホストを指定しているぐらいの認識でした。

厳密には
examplehostname.com
からしかアクセスができなくするという設定となります。

したがって以下のようにアクセスしてもエラーとなります。

```
[vagrant@localhost html]$ mysql -u exampleusername -p -h examplehostname.com
Enter password:
ERROR 2003 (HY000): Can't connect to MySQL server on 'examplehostname.com' (110)
```

今回はローカルでの環境設定なので
localhostと設定して解決しました。
Install proxy tool at server site

```sh
#-- インストールスクリプトをダウンロード
wget https://github.com/teddysun/shadowsocks_install/raw/master/shadowsocksR.sh

#-- 実行権限を与える
chmod +x ./shadowsocksR.sh

#-- インストールスクリプトを実行(shadowsocksR.logとしてログを残す)
sh ./shadowsocksR.sh 2>&1 | tee ./shadowsocksR.log

# run service 
/etc/init.d/shadowsocks status
/etc/init.d/shadowsocks restart
/etc/init.d/shadowsocks stop
```
viの文字色を変更してみる

# はじめに

viでファイルを編集しようとした時、Ubuntuのデフォルトでは、下記のような配色になっている。これでは、特に２行目、３行目が非常に見にくい。見にくいなぁと思いながら、我慢して使い続ける事なく、さっさとカラースキームを変更しましょう。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/94029/db5f6183-863b-3021-043c-62b8f8b9f694.png)

# カラースキームの変更の仕方

viでコマンドモードにして、次のコマンドを入力してみる。
`:colorscheme blue`
すると、ブルーのカラースキームに変更されます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/94029/79c81ae9-89ca-755c-b5f2-5ae8751a1d18.png)

色々な配色が用意されているようで、次にこのコマンドを入力してみる。
`:colorscheme evening`
すると、夕暮れをイメージしたカラースキームに変更されます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/94029/7353baba-eb23-e66e-70c6-4bd0981c9e7a.png)

次にこのコマンドを入力してみる。
`:colorscheme ron`
とすると、このようになります
![image.png](https://qiita-image-store.s3.amazonaws.com/0/94029/c3a1836c-7371-877b-fce9-daaed488e4d0.png)

しかし、viコマンドでカラースキームを変更しても、viを終了して再度表示させると、デフォルトのカラースキームに戻ってしまいます。viを起動する度にカラースキームを変更するのは手間なので、設定内容を保存しておきます。

# カラースキームを保存させる

1 ホームディレクトリに、下記の名前のファイルを新規作成します。
`.vimrc`
2 ファイルの中で、１行だけ追加して保存する。これで何度viを起動しても、ronのカラースキームで表示されるようになります。

```ファイル:.vimrc
colorscheme ron
```
Do you know @Medium "EMOTIONAL" good fav is crap max 50 count per user? #UI #UX ref @tiktok @twitter

Do you know @Medium "EMOTIONAL" good fav is crap max 50 count per user? #UI #UX ref @tiktok @twitter

# E.g
 

![image](https://user-images.githubusercontent.com/13635059/50578578-253e8300-0e7f-11e9-9b4b-3892299eaf5b.png)
![image](https://user-images.githubusercontent.com/13635059/50578617-89f9dd80-0e7f-11e9-9d03-e63b4a87f581.png)

Super thank you !!!!


# ON OFF fav

- it so greater than ON/OFF emotion action like other serviced
- because 50 steps we can express 
- On/OFF fav is too 貧弱 means poor ref japanese comic "JOJO"
  
![image](https://user-images.githubusercontent.com/13635059/50578622-954d0900-0e7f-11e9-8a9a-940a6725a4dc.png)

# Other emotional fav styles

- react with emoji or stickers e.g tiktok
- react with comment (but it costs highly to user)
- on off style fav but good effect e.g Twitter heart mark animation









<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
｢キャンセルしますか？｣｢キャンセル｣｢いいね｣ Applicationの英語表記に迷ったら #UI #UX

｢キャンセルしますか？｣｢キャンセル｣｢いいね｣ Applicationの英語表記に迷ったら #UI #UX

# iPHoneゲームとか‥いろんなところに｢やばい選択肢｣ってあるよね‥

# Twitterを英語設定にするだけでエンジニアの英語勉強になるよね？ 

# CancelとDiscard

- こういう表現を知らなかったら｢キャンセルといいえ｣にしちゃうよね
- 全てのスマホアプリ、MacAppllicationとかGlobalなサービスを使うときはひとつずつの単語が勉強になるよね？Wimax端末とか、ほんと全て全部全部全部入りで
- 1wordで表現できる英語がたくさんあるよね？日本語的に表現しようとしたら｢Try to calcel it ..｣とか。いやいや違うんだよっていう‥うまく伝えられているかな…

![image](https://user-images.githubusercontent.com/13635059/50578422-3ab2ad80-0e7d-11e9-9a96-0b900745c252.png)

---

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

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








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
ひとまず動くwebサイトを作りたい(CloudFront編)

# webサイト作ってみたい！
[ひとまず動くwebサイトを作りたい](https://qiita.com/ys_tydy/items/33281afeb18bee38f7e1)の続きになります
#### 今回の設計図
[実際のサイト](https://nail.gogomethod.be/)
<img width="771" alt="スクリーンショット 2018-12-31 15.23.23.png" src="https://qiita-image-store.s3.amazonaws.com/0/198985/183a14a7-e5f6-ed8e-ead6-b7c5d2c61d48.png">
前回書けなかった
- `CloudFront`の使用（脱S3 public）
- `Cognito`を使ったユーザー登録機能
の `CloudFront` 周りについて書いていこうと思います。

# 作っているサイト
### **[私もネイル](https://nail.gogomethod.be/policy.html)**
ネイルモデルを探すネイリストと無料でネイルを受けたい人をマッチングするサービスです

# 道のり
1. `Route53`にいい感じのドメインでDNSを設定
2. `CloudFront`経由のみの接続を許可
3. エラーページに関して

# Route53でいい感じのドメイン＋CDN
まず以下のサイトを参考にいい感じのドメインを取得します
[Amazon Route 53でドメインを購入する](https://dev.classmethod.jp/cloud/register-domains-route53/)

そして以下のページ途中を参考にCNAMEを作成
[S3の特定バケットへのアクセスを特定のCloudFrontからのみ許可する。](https://qiita.com/kooohei/items/2779f2755fb75ec3cc93)


# CloudFrontの準備
基本的に以下のページを参考に　`CloudFront`　を作成
[CloudFront + S3 によるCDN (Cache Distribution パターン) 構築手順
](https://dev.classmethod.jp/cloud/aws/cdn-with-cloudfront-and-s3/)

### CloudFrontからのみ通信を許可
前回のバケットポリシーでは直接S3が見えてしまうため、
また以下のサイトを例に　`CloudFront`　経由のみで見れるように変更
[S3の特定バケットへのアクセスを特定のCloudFrontからのみ許可する。](https://qiita.com/kooohei/items/2779f2755fb75ec3cc93)

```json:bucket_policy.json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadForGetBucketObjects",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity {{CloudFront ID}}"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::{{BUCKET_NAME}}/*"
        }
    ]
}
```

またデプロイコマンドを修正してpublicアクセスを禁止します

```yml:buildspec.yml
version: 0.2
env:
  variables:
    AWS_REGION: "ap-northeast-1"
phases:
  build:
    commands:
    - aws s3 sync ./frontend/ s3://{{BUCKET_NAME}}/ # --acl public-read
```

これで `https://{{CNAME}}/index.html` 的なURLで接続できるようになりました！

# エラーページに関して
これでひとまず繋がるのですが、
URLミスなどをするとめっちゃ味気ないエラーページが返ってきます

<img width="1198" alt="スクリーンショット 2019-01-02 10.54.23.png" src="https://qiita-image-store.s3.amazonaws.com/0/198985/fe385d16-61c1-d237-09a1-d1f9fec7591f.png">

S3上にないものを指定すると `access denied` になるようです
そのため以下のように `CloudFront` 側で403の時は `error.html` を見るようにしておき、
適当な `error.html` を作成しておくことをお勧めします

<img width="1440" alt="スクリーンショット 2019-01-02 10.56.40.png" src="https://qiita-image-store.s3.amazonaws.com/0/198985/021a23c6-a6a2-505b-023c-7169e3d56c00.png">


# 次はCognito周りについて
ここまでくればひとまずセキュリティ関連のエラーは出ないのでひと安心
インフラ周りができたので `Cognito` のログイン周りなどについて書いていこうと思います
[ひとまず動くwebサイトを作りたい(Cognito編)](https://qiita.com/ys_tydy/items/1034e2fe99298200e711)

手探りでやっている状態なのでどしどしご指摘をいただけると嬉しいです！
また思い出しながら書いていったので間違った内容があればすみません。。
エンジニア･プログラマの英語勉強学習はhiphoper or ラッパーになったら良いかも知れないんだぜ

エンジニア･プログラマの英語勉強学習はhiphoper or ラッパーになったら良いかも知れないんだぜ

![image](https://user-images.githubusercontent.com/13635059/50578349-65503680-0e7c-11e9-86c5-643ed957f424.png)

![image](https://user-images.githubusercontent.com/13635059/50578357-726d2580-0e7c-11e9-8ab9-7ff9eb775b8c.png)

# ILoveHip!

https://twitter.com/YumaInaura/status/1080223560742793216

![image](https://user-images.githubusercontent.com/13635059/50578323-ee1aa280-0e7b-11e9-9087-3f16ed16a129.png)

# 英語日本語混在で良いじゃない

- まだ試行錯誤中im trying now yes people
- Good things is 英語の勉強になるし、たぶん読み手も書き手も yes easy studying reading and writing yes for the all people pieace
- なぜ日本語と英語の記事を分けようとするのか？過去の自分。 Japanese Kanji is cool and complexed language is for new world dont you think?

# 英語と日本語の割合で考えていること

- 日本語の割合が8割ぐらいになった記事はもったいないのでGoogleTranslatingして英語の記事に分離しても良いかも知れない
- もっと良い混在的な書き方があるかもしれないのでTryingしていく
- だいたい日本エンジニアにも分かる英語なら混在させてしまっても良いかも知れないが、complexed な文面が伝わりやすいかどうかは別問題かな

# 別に伝わらなくて良いのでは…？自己満足のためのoutputtingだし‥？

tobecontinued


---

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

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








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
全部消えた！記録ない！愛はショック！ USer入力の未確定状態は時に壮大な喪失感を与えてしまうので厳重注意！  #UI #UX

全部消えた！記録ない！愛はショック！ USer入力の未確定状態は時に壮大な喪失感を与えてしまうので厳重注意！  #UI #UX

# Google Chrome で Github issue に書いてた内容全部消えたからもう永遠に、同じ過ちを繰り返したくない‥

# 何故消えた？

- なんか Control + D 的なショートカットがChrome全閉じに割り当てられているMacの最強最悪地球滅亡設定だったような‥
- GoogleChromeにinput状態の復元機能ってあったっけ‥なかったかも‥とりあえずタブ復元設定をdisableしてたような気がするぜ‥
- こまめにクリップボード copy and alfred history using してればよかったんだけど、z

# ところで書いていた記事は‥

- 英語日本語混在に関するchekit out な記事をhip hopp調で書いていて完全にノリノリで‥投稿ボタンを押す前に全部消えた‥
- 喪失感がすごすぎる‥クリップボード履歴にも何も残っていない
- lost feelingだけで1日の希望全部が失われる感じもするので時間だけの問題じゃないし‥もう取り戻せない思い出だってあるんですよ‥

alfred に残ってない！！！
![image](https://user-images.githubusercontent.com/13635059/50578282-0b02a600-0e7b-11e9-97e0-2bbda4f49874.png)

# だから未確定状態っていうのは嫌いなんですよおじさんは‥

- ずっとEnterを押して何度も確定させていきたい日々なんですよ‥do you think so as me? yes you are best friend!
- Enter押さずにburffering状態で我慢できるのは脳のチャンク数が多い最大メモリエンジニアだけですよ‥僕には無理
- で二度と同じ過ちを繰り返したくないんだけど‥とりあえずここでは、Userのinpputing未確定状態がどれだけユーザーに喪失感を与えるかについて語るだけにしておくぜ

smile smile simel (´；ω；｀)


---

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

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








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
Pythonを使ってブラウザを開く

webbrowserライブラリのopen関数を使います。

```python
#!/usr/bin/env python3

import webbrowser

webbrowser.open("https://www.google.com") #引数にURLを指定
```
ブラウザを指定するには下記のようにします。
  
```python
#!/usr/bin/env python3

import webbrowser

bs = webbrowser.get("/usr/bin/firefox") #ブラウザのパス
bs.open("https://www.google.com")
```
ちなみに正常に起動できたらTrueを返します。
@Facbookの #Web #UI が死ぬほど遅い件、、これ開発者気付いてるんだろうか？単にjsとかの設定が見直されてなくて時代遅れなだけでは？死にたい。

# @Facebook #Web #UI is foolissh slowly bad bad bad… why ? javascipt setting ? Deverlopers does not notice?

FacbookのWeb UI が死ぬほど遅い件、、これ開発者気付いてるんだろうか？単にjsとかの設定が見直されてなくて時代遅れなだけでは？死にたい。

# One window one popup too slowly

![image](https://user-images.githubusercontent.com/13635059/50578015-12c04b80-0e77-11e9-9811-f06affe5ae1a.png)

# This is limit of feature?

- i think its no 
- just effect setting is slowly 

ただ javascript 的なエフェクト設定が遅いだけじゃないの？

# Why?

- For Facebook user character? Facebookユーザーの性質のため？
- unable to understand reason 遅いにしてもおそすぎる、わけがわからない
- Even it was a tec limit so supurized!!! 技術的限界だとしたらさらに驚きだよ

# just kidding old culture , nobody change setting , i think

- 単に誰もこの設定に疑問をいだいていないだけじゃないの nobody facebook developers does not notice old setting is so old
- 時代は爆速でスピード感が上がってきているしアプリのスピードも上がらなきゃ century speed uping now so application speed shoud be more fast faster 
- 設定項目は生き物だ、だから柔軟に変化させて良いし、変化させなければ人間に対応できない Settings a living so soft changing is better and for its us HUMAN!!! Human changes in century by high speed


---

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

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








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
Windows 7 のプロダクトキーで Windows 10 を入れようとしてつまづいた話

まっさらの HDD に頑張って Windows を入れる話の続編です．
どうして Windows 入れることになったのかとかのお話は [前編](http://www.yk-lab.net/archives/hp-%E3%81%AE%E3%83%91%E3%82%BD%E3%82%B3%E3%83%B3-hdd%E6%AD%BB%E4%BA%A1-%E3%82%92%E5%86%8D%E3%81%B3-windows-%E3%81%A7%E4%BD%BF%E3%81%88%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8B%E8%A9%B1/) をご覧ください．

## TL;DR
ちゃんと Windows の動く環境を一台用意するか，DVD が書き込める環境を用意して挑みましょう．
あとは [DigitalLife: windows7のプロダクトキーでwindows10をインストールした話](https://digitallife.work/?p=92) を読めばできるはずです．

## 前回のあらすじ
HDD を言いたパソコンを修理するため， HDD を買い，Windows 7 のインストールをしようとするも失敗．
Windows 7 への復元はどうやら無理そうなので諦め，アップグレード期間が終わったけれどどうやら Windows 10 であれば入れられそうとチャレンジすることを決めたのだった…

## つまづいたポイント
### bootmgr is missing
私は [Windows 10 のディスク イメージ (ISO ファイル) のダウンロード](https://www.microsoft.com/ja-jp/software-download/windows10ISO) から iso ファイルをダウンロードしてきて，**そのまま `dd` コマンドで** USB メモリに焼きました．

すると，なんということでしょう．

```
bootmgr is missing
```

えぇー…
というわけで，次は iso ファイルだったから悪かったのかと思いつつ img ファイルに変換するだとかいうコマンドを実行して `dd` コマンドを実行しました．

```
bootmgr is missing
```

ダメでした．

#### なぜか
とりあえず USB メモリでのブートも試みたことは確認しましたが，結局ダメだったということですね．
おそらく，ディスク用であり， USB に焼いてもブートできなかったのではないでしょうか？

### どうしたか
実家帰省中の出来事で，私の手元には MacBook Pro と Raspberry Pi 3B x 2 と Raspberry Pi 3B+ しかないという状況でした．
実家には他には PC はありません．
そこで~~狂ったのか~~ iso ファイルがそもそも動かない（ダウンロード中の破損）などを疑って，MacBook の VirtualBox 上に Windows 10 をインストールすることを試みました．
結果はなんとあっさり成功．
そこで Windows 上で改めて [Windows 10 のディスク イメージ (ISO ファイル) のダウンロード](https://www.microsoft.com/ja-jp/software-download/windows10ISO) を開くとツールをダウンロードという文字が…
「これは [DigitalLife: windows7のプロダクトキーでwindows10をインストールした話](https://digitallife.work/?p=92) でみた画面だ！」と思いつつ，ツールを入れて作業しました．

初めは VM 上から USB 焼くのはめんどくさく，ディスクを選択して出てきたファイルを mac 上で `dd` コマンドで USB に焼いてみましたが，ダメでした．
Oracle VM VirtualBox Extension Pack を入れれば， VM 上でいい感じに USB を扱えるので，大人しく入れて設定して，ツール上からインストール用の USB を作ってください．
うまくいきます．

[Windows 10 のディスク イメージ (ISO ファイル) のダウンロード](https://www.microsoft.com/ja-jp/software-download/windows10ISO)　の「始める前に」では， OS 関係なく USB でやれそうに見えますが，大人しく Windows 上でやると楽という話でした．

---

そういえば，ディスクイメージを USB に焼くためのツールとかもありましたよね？
その名前が思い出せなくてこんなことになったのですが…

ほとんど中身のない記事ですが，同じことでハマった人がすぐ抜け出せるように Qiita に書いてみました．
この作業で私の 12/31 は無事どこかへいきました．

---

**追記**
<blockquote class="twitter-tweet" data-conversation="none" data-cards="hidden" data-partner="tweetdeck"><p lang="ja" dir="ltr">UEFI環境でWin10のインストールUSBを作るなら、ISOファイルをマウントして、中身のファイルをそのまま全部USBメモリの中にコピーすればOKだったはず...</p>&mdash; Aruneko@修論 (@aruneko99) <a href="https://twitter.com/aruneko99/status/1080274128047792128?ref_src=twsrc%5Etfw">January 2, 2019</a></blockquote>
らしいです．
Smart Device Link　開発環境セットアップ〜hello_sdl実行

開発メモです。
開発環境
OS: Ubuntu 16.04

# サンプルコードを動かす(Hello SDL Android)
まずは、[Hello SDL Android](https://www.smartdevicelink.com/en/guides/android/getting-started/hello-sdl-android/)を動かす準備をします。
■公式ドキュメントでは[Android studio](https://developer.android.com/studio/)による開発をサポートしているため、まずはインストールを行います。
■android studioを起動

```
bash 展開した場所/android-studio/bin/studio.sh
``` 
を実行
■~/.bashrcに"展開した場所/android-studio/bin"を追加しておく
■最新のコードをgit cloneまたはzipファイルで[git repository](https://github.com/smartdevicelink/sdl_android)からダウンロードします。
■android studioで先ほどダウンロードしたコード（sdl_android）を開く
■android studioのhello_sdl_androidのbuild variantをtcpDebugにする
■sdlのemulatorの[Manticore](https://www.smartdevicelink.com/resources/manticore/)を起動し、portとip adressを設定。emulatorは複数のユーザーで共有されているため、待ちの場合があるので、docker imageでsdl emulatorを使用する。（以降はdockerでemulatorを立ち上げた場合の説明）
■docker コンテナ作成。
  
```
docker run -d -p 12345:12345 -p 8080:8080 -p 8087:8087 -p 3001:3001 --name sdl5 hisayan/sdl_core_docker:5.0.0
```

■emulatorを起動(http://localhost:8080/)
■[この投稿](https://qiita.com/masaya3/items/1363213d07b532e5e3af)と同じ手順で、emulatorの設定を変更
■dockerのip addressを調べる

```
sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}' コンテナIDまたはコンテナ名
```

■android studioにてhello_androidのSDLservice.javaのコードを変更

```java:SdlService.java
private static final int TCP_PORT = 12345;
private static final String DEV_MACHINE_IP_ADDRESS = "172.17.0.3";
```

■Runでコードを実行。Android studioで初めて実行する場合は、仮想デバイスの設定（仮想スマートフォン）をしないといけないので、run実行時に順番にしたがって仮想デバイスを設定する。
■仮想デバイスを設定すると、runで実行できるので、下図の通り実行できていることを確認
![image.png](https://qiita-image-store.s3.amazonaws.com/0/100466/ebee283c-9553-1bfc-72b8-365467f1abba.png)
■ブラウザで開いたemulatorでapp上にhello_sdlができているので、クリックして確認
![image.png](https://qiita-image-store.s3.amazonaws.com/0/100466/d39a2890-377a-ae37-19bc-9617b243dd37.png)




# References
https://qiita.com/masaya3/items/1363213d07b532e5e3af
最強の情報管理ツールはコピペでしょ！1ステップでコピペできる情報が最強説 @qiita @scrapbox @medium

# 最強の情報管理ツールはコピペでしょ！1ステップでコピペできる情報が最強説

# The information content controling is copy and paste is best i think

# Qita

- タイトル入力欄 Title inputting 
- タグ入力欄 Tag inputting
- Description 
- 投稿ボタン Submit button

4 Steps............!!!!!!


![image](https://user-images.githubusercontent.com/13635059/50577840-7ac16280-0e74-11e9-9488-b89efbec60cf.png)

# ScrapBox

- Title inputting and Description inputting in same area タイトルと本文が一緒
- no tag area no tag feature タグ機能は存在しない
- no submit button automatically saving ooooooo wonderfulll!!!!!!! 投稿ボタンは存在せず‥オートセーブ‥ドラクエ2から3になったぜ‥！いや昔のウィザードリイというべきか‥！

![image](https://user-images.githubusercontent.com/13635059/50577859-c8d66600-0e74-11e9-8743-7cd5e144f1c9.png)

# Medium

![image](https://user-images.githubusercontent.com/13635059/50577876-37b3bf00-0e75-11e9-9d38-9aac8594456e.png)

# Why "Seamless One inputting Area" is great?

- the one reason is ... Easy To Copy and paste
- If service has 4 inputting area user must copy and paste 4 times its so bitter................
- Importing? Exporint feature is better? no! User wanna flash copying their content!

---

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








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
最高人生！ 🤖一番つらいbitterなElementからツールtips改善Happy Hackingしよう is マインドフルネス 

# 最高人生！ 🤖一番つらいbitterなElementからツールtips改善Happy Hackingしよう is マインドフルネス 

# どこから環境改善したら良いか？

- most of 一番bitterさを感じる苦いところ
- これは自分の身体感覚、肉体的感覚、直感に聞いてみるしかない
- ああなんか辛いな‥現在日時を入力するのにGoogleIMEじゃつらいな‥Alfred使うか‥使いたい‥その本能声が正しい…！！！

# マインドフルネスの技法

- 自分の本能に忠実になることが出来る、だいたい人間の直感は正しく出来ている、こと自分自身の｢つらさ｣の感覚に関しては
- マインドフルネス2年半実践している@yumainauraは自分自身に忠実だ、だけど完全にモチベ高いエンジニアは全員無意識に実践していることだと思う、良い短気、イライラの爆発を良い方向に向けよう！
- ああGoogleImageSearchで毎回2ステップとタッチパッドでのスクショ撮影もつらい‥これどうにか改善線といかんどげんがせんといかん！！！！

![image](https://user-images#.githubusercontent.com/13635059/50577777-f1f5f700-0e72-11e9-9e3f-9044f43f4fd0.png)

# 環境改善ツール改善TIPS LIFE HACKINGなんて要らない？

- 今の所やらなくていい、本能が必要としていないならば
- いやいややるのではなくて、必要に迫られて、切実にストレスから解放されたくてやるのが爆速EngineeringHacking
- 今日よりも明日が、昨日よりも今日が大量にOutput出来るしOutputしている瞬間は人生のすべてBitterな出来事さえ忘れることができるから素晴らしい、朝日だって浴びられる

朝日だってMAcPhotoBoothで一瞬で撮影することが出来る、1枚の写真撮影のためにもう永遠にわずらわsれずに済む、最高LifeHackingは人生の大事な時間を決して無駄に削らないためにあるんだよ‥！
![image](https://user-images.githubusercontent.com/13635059/50577796-59ac4200-0e73-11e9-8ff3-b2b4532c8f4e.png)

でAlfredでtopicにサインを書くのさ

![image](https://user-images.githubusercontent.com/13635059/50577798-6466d700-0e73-11e9-9e67-4dafd6c7d7e0.png)


---

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

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









<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
脳シナプス！情報空間！エンジニアリングの抽象度、難易度の高さに付いていけないWeb開発エンジニアの独り言

# エンジニアリングの抽象度は極めて高い

- スーパーエンジニアは爆高な抽象度の高さで語るので、僕は話を聞いても、頭の中で世界構築ができずに、空空しい感じがして冷めてしまう
- きっとこれはレベルの問題で、きっと僕も、というか確実に、ある程度の抽象度は持ちながらプログラミングやエンジニアリングをしているだけで、レベルの乖離が激しいだけ
- サピエンス全史に書かれたような昔の図書館司書の話を思い出していた

![image](https://user-images.githubusercontent.com/13635059/50577630-557e2580-0e6f-11e9-950f-8d0f1ced0500.png)

# エンジニアリングの世界なんてどこにも存在しない、ただの情報空間の出来事なんじゃないの？

- そう思って冷めてしまう自分がいる、エリクソンいうところの難易度高杉状態？
- 物理世界に実はそもそも存在しないもののために人生を捧げるなんて、空っぽのゲームというか、なんというか‥
- だけど抽象度の高いエンジニアリングの世界に没頭したい自分もいた

# ユリーカ！

- わかった、たとえ抽象度の高いエンジニアリングの世界でも、それを理解することによって、脳に神経シナプス的なあれが形成されるじゃないか
- これはまさに抽象空間じゃなくて、物理の世界、人間の肉体is脳の世界に形成されるものではないか！
- そしてこの脳のシナプスの多人数による集合が、情報空間を集合的に生み出していると理解できる‥

ところでなぜ自分が仮想空間にモチベを抱けないかというと、たぶんそれは‥仮想空間だと気付いてしまうものは、うまく仮想空間が脳に構築できていないときなんだ、構築できているものは現実世界だと強く深く認識できるから

![image](https://user-images.githubusercontent.com/13635059/50577707-5617bb80-0e71-11e9-9270-52fc6eacd3c5.png)

---

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


---

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








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
非同期でPOSTして、POSTの成否をアラートで通知

非同期でPOSTして、POSTの成否をアラートで通知したい。

- POST 前には [validation](https://qiita.com/january108/items/a917dfd78d65b81fba55) を行い、OKの場合のみPOSTを呼ぶ
- success 時だけでなく、error 時にも処理したいので、$.ajax を用いる。
- アラートメッセージは、alertでは味気ないので、Sweet Alert を用いる。


# 実装

## Sweet Alert の準備
[Sweet Alert](https://sweetalert.js.org/)を読み込む。

```javascript
  <!-- Sweet Alert https://sweetalert.js.org/ -->
  <script src="https://unpkg.com/sweetalert/dist/sweetalert.min.js"></script>
```

## POST

- バリデーションする
    - validationEngine を用いてバリデーションを行う
    - エラーがあればワーニングメッセージを表示し、処理を抜ける
- POSTする
    - フォームはシリアライズして送っている
    - /api/hogehoge/　にPOSTしている
    - POSTの成否をメッセージで通知

```javascript
  $(function () {
    $('#btnRegister').click(function () {

      var validateResult = $("#register").validationEngine('validate');
      if (validateResult == false) {
        swal( "入力エラー", "エラーメッセージを確認の上、修正してください", "warning");
        return;
      }

      var formData = $('#register').serialize(); // フォームデータ
      $.ajax({
          url: "/api/hogehoge/",
          type: "POST",
          data: formData,
          success:  (function(){
            swal("登録しました", "登録が完了しました。\nありがとうございます。", "success");
          }),
          error:  (function(){
            swal("登録に失敗しました", "登録に失敗しました。\n確認してください。", "error");
          })
      });
    });
  });
```


# 参考

- [SweetAlert](https://sweetalert.js.org/)
- [JQuery の ajax で POST を非同期で送る](https://kobachan.biz/archives/?ID=0006)
最近流行りの デカ絵文字 Big Emoji の理由 / Slack LINE / UI UX

# ある日Twitterをコピーすると

![image](https://user-images.githubusercontent.com/13635059/50577515-0b944000-0e6d-11e9-80ff-1d0005bc131d.png)

🤖エンジニアリングの抽象度、脳に刻まれたシナプスの集合
🤖人間の体は不完全な外部デバイスだからiPhoneやMacookやnoteが必要
🤖エンジニアの英語は中学生レベルで原始人になれ

https://twitter.com/YumaInaura/status/1080231734489182208

# MacApp Note ででかくなった！

![image](https://user-images.githubusercontent.com/13635059/50577516-10f18a80-0e6d-11e9-8304-7098416120c3.png)

# まさかの対応？でもこれは誤解だった

![image](https://user-images.githubusercontent.com/13635059/50577530-5ada7080-0e6d-11e9-91e5-f4329fc03e05.png)

it some converting twitter original emoji copy and pasting trouble
たぶんTwitter独自の絵文字のコピペ変換がどうとかいう問題

# But Recently App we can use Deca Emoji

でも最近のAppってデカ絵文字に対応してたりするよね？

- Slack
- LINE Japanese messaging App


# Why?

なぜ？

- ユーザーが絵文字1個だけを送る時はエモーション、感情を伝えたがっているから、アプリケーションもそれに応じてでかくする！
- When User send only emoji without other text user wanna send "EMOTION" So Service application let it come true
- ユーザーがテキストと一緒に絵文字を送る時はデコレーション目的だから、小さなサイズで表示する
- When USer send emoji with some other texts then user wanna send emoji as "SIGN" or "DECORATION"

意図が違うのだよ意図が！ざくが！ザクが！ザクとは！

---

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

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








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
jQuery の validationEngine でバリデーションする

# 概要
POST前にバリデーションを行い、バリデーションが成功した場合のみ、処理を続行したい。
バリデーションには、[jQuery-Validation-Engine](https://github.com/posabsolute/jQuery-Validation-Engine) を用いた。


# 実装
## ライブラリの準備、読み込み

### 前提：
jquery が読み込まれている前提。（CDNにしてみた）

```
<!-- jquery -->
<script src="https://code.jquery.com/jquery-2.2.4.min.js" integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44=" crossorigin="anonymous"></script>
```

### jQuery-Validation-Engine の読み込む

[github](https://github.com/posabsolute/jQuery-Validation-Engine) より、以下のファイルをダウンロードし、読み込む。

- jquery.validationEngine.js
- jquery.validationEngine-ja.js

```javascript
<!-- jquery validation engine -->
<script src="js/jquery.validationEngine.js"></script>
<script src="js/jquery.validationEngine-ja.js"></script>
```


## validationEngine の初期設定

### サンプルの前提：
register という　id の FORM が定義されている。

```html
<FORM id="register">
  <INPUT TYPE="text" NAME="title">
</FORM>
```

### FORM とvalidationEngine を紐付け
register フォーム と validationEngine を紐づける。
（ついでに、プロンプトの場所も指定した。）

```javascript
jQuery(document).ready(function(){
  jQuery("#register").validationEngine({
    promptPosition: "bottomLeft"
  });
});
```

## 個々の項目にバリデーションルールを定義する

required（=必須）ルールを指定した。

```html
<input type="text" name="title" class="validate[required] text-input" >
```


### 参考：オプションをつけた例

- エラー時のメッセージも定義
- プロンプトの位置を指定

```html
<input type="text" name="title" class="validate[required] text-input" data-errormessage-value-missing="名前を教えてください。" data-prompt-position="topLeft">
```

## バリデーションの結果を取得する

```javascript
var validateResult = $("#register").validationEngine('validate');
```

True / False が得られるので、これを用いて処理を分岐させた。



# 参考：

- [jQuery-Validation-Engine](https://github.com/posabsolute/jQuery-Validation-Engine)
- [jQuery-Validation-Engineで簡単にフォーム内容をチェック！](https://studio-key.com/1139.html#crayon-5979a326b1d66831322150)
- [jQuery Validation Engineを利用する](https://qiita.com/Lui/items/4154161d511026730dc5)
Laravelの外部ストレージとしてDropboxを利用する方法

# はじめに
Laravelのストレージ操作用にAmazon S3、Rackspaceを簡単に操作できるドライバが提供されています。[^1]
実はDropboxを操作するドライバも既に実装している人がいるので、その設定方法を書きます。

# 環境や前提条件
- Laravel 5.1以上
- Dropboxのアクセストークン[^2]

# 導入方法

## インストール手順
まずは、composerを使ってLaravelでdropboxを使うためのライブラリをインストールする。

```php
composer require benjamincrozat/laravel-dropbox-driver
```

## 設定手順
あとはいつものお決まりで、`config/app.php`と`app/filesystem.php`に以下の記述を追加する。

```php:config/app.php
'providers' => [
    BC\Laravel\DropboxDriver\ServiceProvider::class,
],
```

```php:app/filesystems.php
'disks' => [
    'dropbox' => [
        'driver' => 'dropbox',
        'token'  => env('DROPBOX_TOKEN'),
    ],
],
```

`<<your_access_token>>`は事前に用意したDropboxのアクセストークンに置き換えてください。

```php:.env
DROPBOX_TOKEN=<<your_access_token>>
```

## 使い方
通常のようにStorageクラスを使ってファイル操作を行ってください。

```php
use Illuminate\Support\Facades\Storage;

$exists = Storage::disk('dropbox')->exists('file.jpg');
```

# まとめ
「Heroku ファイル保存」などで検索するとAmazon S3の記事を多く出現しますが、Dropboxはフリープランでも2GBまで保存できるのでファイルアップロード先はこれで良いかも。

# 引用元や参考元へのリンク
- [benjamincrozat/laravel-dropbox-driver - Packagist](https://packagist.org/packages/benjamincrozat/laravel-dropbox-driver/)
- [Developers - Dropbox](https://www.dropbox.com/developers/)

[^1]: [File Storage - Laravel - The PHP Framework For Web Artisans](https://laravel.com/docs/5.7/filesystem)
[^2]: 取得方法は、以下URLを参考にしてください。 
 https://gahaha.xyz/category1/dropboxdevelopergetaccesstoken.html
エンジニアの英語は中学生レベルで原始人になれ！ GO WILD Broken English super method!

![image](https://user-images.githubusercontent.com/13635059/50577183-ea7c2100-0e65-11e9-9526-9ff402340ca1.png)


# 原始人になったら勝ち

- 恥を忍んでとか、勇気をだしてとか言ってる場合じゃない、だって原始人だしウホウホ
- 思いつく単語はどんどん放り込んでどうにか method chain していく、文法とか考えたら負け
- 英語は意外と前からでも後からでも文章にできる用法が用意されている、日本語だってそうだけど、ほら、倒置法というか、こうやってbackspaceを一切幼くても‥押さなくても文章って書けてゆくでしょ？それと同じ

# E.g

- We be Wild old people in Jpanese "原始人" is english studying perfect way! super method!
- Thinking and inputting English throw throw throw in! its like a method chain ruby language . be empty feel dont think.
- Engilish is better to do not push backspacing its is same with Japanese languate sentence.

# その他

- typoそんなに気にしない、だいだい人間の脳はtypoに激しく対応してる、有名な話
- 造語作ってしまえば良い、sentenceからのsentencingとか、英語は特にcontext contextingを重視する言語文化なので、1センテンスで意味がだいたい通じれば良い
- ｢日本人の目｣さえ気にしなければ結局楽になる、Englisherたちの間ではBrokeEnglish歓迎だけど、日本人同士の社会的なあれとかコレとかで身動き取れなくなってるのでは？

# Conclution Matome

![image](https://user-images.githubusercontent.com/13635059/50577212-cb31c380-0e66-11e9-93c4-c7762877560b.png)

---

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

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








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
テキストがコピーandペーストできないならスクリーンショットを撮ればいいじゃない？MacBook





- 2019年寒い日
- Macのタッチパッドが全然反応せずにテキストのコピペがむずい
- いや、スクリーンショット撮影も難しいんだけど、少しだけ簡単、テキストの範囲選択はズレたりするし‥

---

- Its so cold 2019 second day
- Trackpad does not respond well
- So difficult to copy text so i use ScreenShot with Mac Command +Option + Control 4 is god shortcut key




![image](https://user-images.githubusercontent.com/13635059/50577137-5b223e00-0e64-11e9-8bea-59fe0d1addf2.png)

- 最近のアプリは画像アップロード、貼り付けに対応しているものが多い
- Macの公式メモアプリもペースト対応している
- フラッシュメモであれば頑張ってテキストを使ってキレイに記録するより画像スクショ推奨、たくさんまとめてコピペもできるし、たとえば何個のTweetを一気にとか

---

- Recently many apps we can use paste image 
- e.g Mac formal  app Memo is able to paste image
- Flash memo we can not mind its is text or image


---

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

https://github.com/YumaInaura/YumaInaura/issues/149 
https://github.com/YumaInaura/YumaInaura/issues/150 








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
あなたの風呂上がりの天才アイディアタイムに思いついたアイディアを永遠に忘れないTwitter動画活用法

Qiitaに書きたいアイディアがたくさんあるでしょうあなた！？

https://twitter.com/YumaInaura/status/1080226117611442179

# Twitter video is so good 

- ボタンを押した時だけ録画できるのでNGテイクが出ることが永遠にNever!
- MacBook GoogleChrome だろうと iPhone からだろうと同期とかなしに、いつでもflashメモとしてアクセスできる
- Twitterのpin機能を使うなどして固定すると素敵

---


- While pushing record button we record video so we never do NG taking
- We can access anyplace as flash note by iPhone or macbook
- Lets Pin to profile this tweet


![image](https://user-images.githubusercontent.com/13635059/50577046-2d3bfa00-0e62-11e9-9930-69f0331764ac.png)

# How 

- 1 2 3 4  5 と指を立ててアイディアをメモしていく
- 自分の声を震わせろ！脳に刻みつける効果がある
- 落ち着いたら動画を流しながらテキスト化しておくと素敵

---

- Use finger 1 2 3 4 5 and take memos
- Use your voice and recording deep to your brain your todo or ideas
- After taking record texting up is better it is twitter replying

![image](https://user-images.githubusercontent.com/13635059/50577062-8c9a0a00-0e62-11e9-9f45-701fe5340bf5.png)

---

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

https://github.com/YumaInaura/YumaInaura/issues/147
https://github.com/YumaInaura/YumaInaura/issues/148








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
ステータス管理用gem AASMを使ってみた

ステータス管理用のgem `aasm` を使ってみました。
ちょっとハマったので自分の覚書として残します。

環境：
Ruby2.5.1
Rails5.2.1

背景：
Taskモデルに、ステータス管理機能を追加したい

aasmのリファレンスはこちら
https://github.com/aasm/aasm/blob/master/README.md

リファレンスに沿って実装を進めます。

```
# Gemfile
gem 'aasm'
```
Gemfileに追加してbundle install。

ハマったのはこのあと。
リファレンスにはこのように書いてあります。

After installing AASM you can run generator:

```
% rails generate aasm NAME [COLUMN_NAME]
```
Replace NAME with the Model name, COLUMN_NAME is optional(default is 'aasm_state'). This will create a model (if one does not exist) and configure it with aasm block. For Active record orm a migration file is added to add aasm state column to table.

結論からいうと、私の場合はTaskモデルがすでに存在し、それに対してステータス管理を追加したいので

```
$ rails g aasm Task
```

とすればよかったのですが、最初は意味がわからずに

```
$ rails g aasm State
```

という新規のモデル名をつけて実行してしまい、マイグレーション実行時に以下のようなエラーになりました。

```
NameError: uninitialized constant CreateAasmStates
```
それはさておき、正しいコマンドを実行すると、以下のようなマイグレーションファイルが完成。

```
class AddAasmStateToTasks < ActiveRecord::Migration[5.2]
  def change
    add_column :tasks, :aasm_state, :string
  end
end
```
aasm_stateというのはデフォルトのカラム名。カラム名をstateという名前にしたかったら

```
$ rails g aasm Task state
```
とすればよい。
マイグレーションを実行すると、models/task.rbファイルに

```
  include AASM

  aasm do
  end
```
というコードが自動的に追加されましたので、以下のように編集。

```
  aasm do
    state :waiting, :initial => true
    state :wip, :done

    event :run do
      transitions :from => :waiting, :to => :wip
    end

    event :finish do
      transitions :from => :wip, :to => :done
    end
  end
```
簡単に書くと、ステータスにはwaiting、wip、doneの3つがあって、waitingが初期値。
runというイベントが実行されると、waitingからwipに移行し、
finishというイベントが実行されると、wipからdoneに移行するという流れ。

ここでコンソールで確認してみましょう。

```
$ rails c
```
でコンソールを起動しといて

```
irb(main):001:0> task = Task.new(title: "タスク名", content: "タスク内容")
=> #<Task id: nil, title: "タスク名", content: "タスク内容", created_at: nil, updated_at: nil, end_of_task: nil, aasm_state: "waiting">
irb(main):002:0> task.waiting?
=> true
irb(main):003:0> task.wip?
=> false
irb(main):004:0> task.done?
=> false
irb(main):005:0> task.wip?
=> false
irb(main):006:0> task.done?
=> false
irb(main):007:0> task.run
=> true
irb(main):008:0> task.waiting?
=> false
irb(main):009:0> task.wip?
=> true
irb(main):010:0> task.finish
=> true
irb(main):011:0> task.done?
=> true
```

ここから先についてはまた投稿します。
Node.js+ExpressでCSRF対策をやってみた

インターネットを調べて見ると、いろいろと分かるCSRF対策。
いざ、やってみるとなかなかうまく行かないので、メモとして投稿します。

# CSRFミドルウェアのインストール
> npm install csrf --save

# express-sesionのインストール
> npm install express-session --save

# app.jsでexpress-sessionを読み込む
```javascript:app.js
var session = require('express-session');
```

# ルーティング定義ファイルを読み込む
```javascript:app.js
//ログインページに実装する(という想定)
var loginRouter = require('./routes/login');
```

# express-sessionモジュールを設定
ルーティングモジュールの設定より前に行うのがポイント。
後に行うと、reqにsessionが設定されず、undefinedとなる。

```javascript:app.js
//express-sessionモジュールを設定する
app.use(session({
  //暗号化に利用するキーを設定
  secret: 'secret key',
  //毎回セッションを作成しない
  resave: false,
  //未初期化状態のセッションを保存しない
  saveUninitialized: false,
  cookie: {
    //生存期間は3日
    maxAge: 3 * 24 * 60 * 1000,
    //httpsを使用しない
    secure: false
  }
}));
```

# ルーティングモジュールを設定
```javascript:app.js
app.use('/login', loginRouter);
```

# login.jsモジュールでCSRF対策を行う
```javascript:login.js
var express = require('express');
var router = express.Router();

//CSRFミドルウェアを生成する
var csrf = require('csrf');
var tokens = new csrf();

router.get('/', function(req, res) {
  //新規で秘密文字とトークンを生成する
  var secret = tokens.secretSync();
  var token = tokens.create(secret);

  //秘密文字をセッションに保存する
  req.session._csrf = secret;
  //トークンをCookieに保存する
  res.cookie('_csrf', token);

  res.render('login');
});

router.post('/', function(req, res){
  //秘密文字をセッションから取得する
  var secret = req.session._csrf;
  //トークンをCookieから取得する
  var token = req.cookies._csrf;

  //秘密文字とトークンの組み合わせが正しいかチェックする
  if(tokens.verify(secret, token) === false)
  {
    throw new Error('Invalid Token');
  }

  //使用済みの秘密文字を削除する
  delete req.session._csrf;
  //使用済みのトークンを削除する
  res.clearCookie('_csrf');
});

module.exports = router;
```
Firebase functions内でFirestoreを操作する

Firebase functions内でFirestoreを操作する方法のメモです。
やはりFirebaseのエコシステム内なのでとても簡単に出来ました。

# firebase adminの追加
functionsディレクトリ内で以下コマンドを実行して、firebase adminを追加します。
これはnode.js等、サーバーサイドでfirebaseを使うためのSDKです。
詳しくは以下を参照
https://firebase.google.com/docs/admin/setup

```bash
# もしpermission deniedで落ちる場合は、sudo yarn add firebase-adminで実行してください
$ yarn add firebase-admin
```

# functionsでの読み込み、firestoreの操作
あとは、functionsのindex.js内で読み込み使用するだけです。
~~initのための環境情報はfunctionsがすでに持っているのでそちらから取得可能です。~~
@uu4kさんにコメント戴きました。v1.0.0以降初期化時の引数は不要です。

以下Firestoreになにかデータを保存する場合の例。

```js:index.js
const functions = require('firebase-functions')
const admin = require('firebase-admin')

admin.initializeApp()

exports.saveData = functions.https.onCall((data, context) => {
  admin.firestore().collection('コレクション名').add(data).then(() => {
      // 保存に成功した際の処理
    }
  ).catch((err) => {
     // 保存に失敗した際の処理
  })
}
```
httpsのwebpack-dev-serverにアクセスするとRangeErrorで落ちる

# tl;dr

node が v11.1 以上で起こるので、 node を v10 に下げる。

# 事象

`webpack-dev-server --https` で起動後に、そこ ( `https://localhost:3035/` など) にアクセスすると、お漏らしして落ちる。

```
（略）
webpack: Compiled successfully.
buffer.js:72
class FastBuffer extends Uint8Array {}
^

RangeError: Invalid typed array length: -4095
    at new Uint8Array (<anonymous>)
    at new FastBuffer (buffer.js:72:1)
    at Handle.onStreamRead [as onread] (internal/stream_base_commons.js:121:17)
    at Stream.<anonymous> (/Users/nzapponi/Git Repositories/Quip/meeting-scheduler/node_modules/handle-thing/lib/handle.js:120:12)
    at Stream.emit (events.js:187:15)
    at endReadableNT (/Users/nzapponi/Git Repositories/Quip/meeting-scheduler/node_modules/readable-stream/lib/_stream_readable.js:1010:12)
    at process.internalTickCallback (internal/process/next_tick.js:72:19)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
```

( https://github.com/webpack/webpack-dev-server/issues/1592 よりエラー内容を引用 )

# 解決

`n` で node を v10 にする。

```
$ sudo n lts
```

node の version 変更したら忘れず `yarn` or `npm install` をやる。

# 参考

https://github.com/spdy-http2/node-spdy/issues/350
Ruby CSV操作メモ

## 概要

rubyでCSVを操作するときのメモ

## ファイルから読み込み

### CSV.read

CSVファイルを一度にすべて読み込む
ファイルのデータサイズが大きい時はメモリに負荷がかかるので注意!

```ruby
filename = "filename.csv"
data = CSV.read(filename, headers: true)
puts data
```

[docs](https://docs.ruby-lang.org/ja/latest/class/CSV.html)

### CSV.foreach

CSVファイルを1行ずつ読み込む
ファイルのデータサイズが大きい時におすすめ

```ruby
filename = "filename.csv"
CSV.foreach(filename, headers: true) do |row|
  # do something
  # ex. puts row['column1']
end
```

[docs](https://docs.ruby-lang.org/ja/latest/class/CSV.html#S_FOREACH)

## バイナリ or テキストから読み込み

### CSV.parse

CSV形式の文字列からCSVデータを操作するときに使用する
取得したデータは1行ずつ処理できます

```ruby
CSV.parse(data, headers: true) do |row|
  # do something
  # ex. puts row['column1']
end
```

[docs](https://docs.ruby-lang.org/ja/latest/class/CSV.html#S_PARSE)

## 書き込み

### CSV.open

`w` 書き込みモード
`a` 追加書き込みモード

```ruby
filename = "filename.csv"
CSV.open(filename,'w') do |csv|
    csv << ["A", "AA", "AAA"] 
    csv << ["B", "BB", "BBB"] 
end
```

[docs](https://docs.ruby-lang.org/ja/latest/class/CSV.html#S_OPEN)

### CSV.generate

```ruby
filename = "filename.csv"
date = CSV.generate do |csv|
    csv << ["A", "AA", "AAA"] 
    csv << ["B", "BB", "BBB"] 
end
File.open(filename, 'w') do |f|
  f.write(data)
end
```

[docs](https://docs.ruby-lang.org/ja/latest/class/CSV.html#S_GENETATE)

generateの引数に `\uFEFF`を設定してBOM付きで出力することもできます

```ruby
bom = "\uFEFF"
filename = "filename.csv"
data = CSV.generate(bom) do |csv|
    csv << ["あ","い","う","え","お"] 
    csv << ["か","き","く","け","こ"] 
end
File.open(filename, 'w') do |f|
  f.write(data)
end
```
python(matplotlib)で数直線を描く

#はじめに
pythonで数直線を描きたかったのだが，どうググっても良い方法が出てこなかったので，自分なりの方法をここにまとめる．

#使用機器
- MacBook Air
- Jupyter notebook

#実装
実際にやってみた．

```number_line.py

import numpy as np
import matplotlib.pyplot as plt
import pylab
%matplotlib inline

#テキトーな配列を生成
rand_size = 7 #配列のサイズ
rand = np.random.random_sample(rand_size) #テキトーな配列を生成
print(rand)
rand = sorted(rand) #ソート
y = [0]*rand_size #y=0

#数直線
fig,ax=plt.subplots(figsize=(10,10)) #画像サイズ
fig.set_figheight(1) #高さ調整
ax.tick_params(labelbottom=True, bottom=False) #x軸設定
ax.tick_params(labelleft=False, left=False) #y軸設定

xmin, xmax= 0,1 #数直線の最小値・最大値
plt.tight_layout() #グラフの自動調整
plt.scatter(rand,y,c='r') #散布図
plt.hlines(y=0,xmin=xmin,xmax=xmax) #横軸
plt.vlines(x=[i for i in range(xmin,xmax+1,1)],ymin=-0.04,ymax=0.04) #目盛り線（大）
plt.vlines(x=[i/10 for i in range(xmin*10,xmax*10+1,1)],ymin=-0.02,ymax=0.02) #目盛り線（小）
line_width=0.1#目盛り数値の刻み幅
plt.xticks(np.arange(xmin,xmax+line_width,line_width)) #目盛り数値
pylab.box(False) #枠を消す

```

↓こんな感じになる↓
![スクリーンショット 2019-01-02 3.47.40.png](https://qiita-image-store.s3.amazonaws.com/0/261941/083091e2-ad83-3bf3-4fb6-557baae741e1.png)

#数直線の値を表示
数直線の値を表示したり...．

```number_line2.py

import numpy as np
import matplotlib.pyplot as plt
import pylab
%matplotlib inline

#テキトーな配列を生成
rand_size = 7 #配列のサイズ
rand = np.random.random_sample(rand_size) #テキトーな配列を生成
print(rand)
rand = sorted(rand) #ソート
y = [0]*rand_size #y=0

#数直線
fig,ax=plt.subplots(figsize=(10,10)) #画像サイズ
fig.set_figheight(1) #高さ調整
ax.tick_params(labelbottom=True, bottom=False) #x軸設定
ax.tick_params(labelleft=False, left=False) #y軸設定

#数直線上の数値を表示
for i in range(int(rand_size/2)+1):
    ax.annotate('{0:.3f}'.format(rand[2*i]),
                 xy=(rand[2*i],y[2*i]),
                 xytext=(10, 20),
                 textcoords='offset points',
                 arrowprops=dict(arrowstyle="->",connectionstyle="arc3,rad=.3")
                )
    
for i in range(int(rand_size/2)):
    ax.annotate('{0:.3f}'.format(rand[2*i+1]),
                 xy=(rand[2*i+1],y[2*i+1]),
                 xytext=(10, -50),
                 textcoords='offset points',
                 arrowprops=dict(arrowstyle="->",connectionstyle="arc3,rad=-.3")
                )

xmin, xmax= 0,1 #数直線の最小値・最大値
plt.tight_layout() #グラフの自動調整
plt.scatter(rand,y,c='r') #散布図
plt.hlines(y=0,xmin=xmin,xmax=xmax) #横軸
plt.vlines(x=[i for i in range(xmin,xmax+1,1)],ymin=-0.04,ymax=0.04) #目盛り線（大）
plt.vlines(x=[i/10 for i in range(xmin*10,xmax*10+1,1)],ymin=-0.02,ymax=0.02) #目盛り線（小）
line_width=0.1#目盛り数値の刻み幅
plt.xticks(np.arange(xmin,xmax+line_width,line_width)) #目盛り数値
pylab.box(False) #枠を消す

```

↓こんな感じになる↓
![スクリーンショット 2019-01-02 3.55.32.png](https://qiita-image-store.s3.amazonaws.com/0/261941/4af0431c-1d3f-6ef9-c48f-397c39558c89.png)

#おわりに
数直線をライブラリで一発で書けないものですかね...？
他に良い方法があればご教授ください...．
Daily IOS チャレンジ Day2

正月で日は空いてしまいましたが、２日目は、
「ナビゲーションコントローラでの画面遷移」をやっていこうと思います

まず、
ナビゲーションコントローラとは、ページの上部に複数の選択肢（ナビゲーションバー）を配置し、選択肢に紐づけた複数の画面を行ったり来たりする部品のこと。

早速作ってみる
Created a new Xcode Project
→Single view appをクリックしnext
→ProductNameを追加しnext
→保存する場所を指定しCreate

Main.storyboardに移動
→画面遷移用のViewControllerを二つ配置する
→NavigationController配置してCtrl＋ドラッグで既存のViewControllerにドロップし、root view controllerを選択
→遷移先のviewの背景の色を変更（Show the Attributes inspectorのbackgroundで色を選択）＋テキストで文字を書いた
→遷移元の　ViewControllerに遷移するためのボタンを設置
→設置したボタンからCtrl+ドラッグ＆ドロップで遷移先のViewControllerに持っていき、push or modalを選択。今回pushを使用。

最後に
NavigationControllerをクリック→Show the Attributes inspectior→ViewControllerのis Initial View Controllerにチェックが入ってるのを確認

実行
![DailyChallenge2.gif](https://qiita-image-store.s3.amazonaws.com/0/260218/9f49afa5-a495-2497-c1bf-30b836e50db4.gif)


また次回！