OmniAICreator/Qiita-1.07M huggingface dataset:
オブジェクト指向な人に捧ぐGO言語の特徴

# TL;DR

GO言語はOOP（オブジェクト指向）な思考回路で書くと割ととっちらかってしまうので、特徴的なところをピンポイントで抑えたいとおもいます。

# 多態性（ポリモーフィズム）はダックタイピングで実現

宣言的に親（あるいはインターフェイス）を記述しなくても、そのオブジェクトが実装条件を満たしていれば親（インターフェイス）として振舞うことができます。

こちらがインターフェイス。

```go

type Hito interface {
	walk() string
}
```

`Hito`インターフェイスを満たすにはstructが`walk()`を持つように実装します。`Male`というstructを実装してみました。

```go

type Male struct {
}

func (m Male) walk() string {
	return "テクテク"
}
```

`Male`は`Hito`インターフェイスを満たしているので`doWalk(h Hito)`に引数として渡せるようになります。

```go

func main() {
	male := Male{}
	doWalk(male)
}

func doWalk(h Hito) {
	fmt.Println(h.walk())
}
```

使いどころとしてはモックを作成するようなシチュエーションです。
`doWalk()`に渡すオブジェクトは`walk()`を持っていればなんでも渡せることになり、いちいちインターフェイスを実装してることを明示しなくていいので楽ちんです。

Playgroundを共有しておくので実際に動かしてみてください。
https://play.golang.org/p/drJt13gSyWw

# Is-aではなくHas-a

GO言語の特徴として継承（Is-a）という概念がなく、すべて包含（Has-a）で記述します。継承っぽく書くには書けるのですが、それっぽく見えているだけで実際は包含しているオブジェクトにアクセスする形になります。

先ほどの`Male`を流用します。

```go
type Male struct {
}

func (m Male) walk() string {
	return "テクテク"
}
```

次に`Male`を包含した`AdultMale`を作ります。

```go
type AdultMale struct {
	Male
}
```

`AdultMale`は明示的に`walk()`を実装しているわけではありませんが、`walk()`をコールすると包含している`Male`の`walk()`がコールされることになります。

```go

func main() {
	adultMale := AdultMale{}
	fmt.Println(adultMale.walk())    // テクテク
}
```

もしAdultMaleでwalk()を再定義してやればそちらがコールされます。

```go
type AdultMale struct {
	Male
}

func (a AdultMale) walk() string {
    return "ドカドカ"
}

func main() {
	adultMale := AdultMale{}
	fmt.Println(adultMale.walk())    // ドカドカ
}
```

こちらもplaygroundを載せておきますのでいじってみてください。
https://play.golang.org/p/OvdKcT22bbx

# ダックタイピングとHas-aの合わせ技

ここからGOの便利さが実感できるコードを書きます。
こちらは先ほどの`Hito`さん。

```go
type Hito interface {
	walk() string
}
```

道路を表す`Road`を作りました。道路を歩く`Hito`さんがいます。

```go
type Road struct {
	Hito
}

func (r Road) doWalk() {
	fmt.Println(r.walk())
}
```

このようにRoadを定義しておけばどのように道路を歩くかを作成する側で決めることができます。DIするようなシチュエーションで強力です。（Male{}、Female{}を作る部分をFactoryに切り出すなど）

```go
type Male struct {
}

func (m Male) walk() string {
	return "テクテク"
}

type Female struct {
}

func (f Female) walk() string {
	return "シトシト"
}

func main() {
	Road{Male{}}.doWalk()    // テクテク
	Road{Female{}}.doWalk()  // シトシト
}
```

こちらもplaygroundを載せておきます。
https://play.golang.org/p/jAXcF08ZWni

ちょっと長くなってしまったのでいったんこの辺で。
またエラーハンドリング周りも特徴的なのでその辺を次回に書きたいと思います。
サイバーセキュリティ入門　情報収集1

　Qiitaの初心者なんですが、インターンの会社から「とりあえずここでなにか書いてみよう」と要求されたが、一体最初は何を書くべきがわからなくて、一応中途半端な日本語を使いながらサイバーセキュリティ、KALILINUXに関する話を進めたいと考えております。もちろんインターンで学習したプログラミングに関する知識も最優先で記録したいと思います。どうぞよろしくお願いいたします。
　サイバーセキュリティーサイバーセキュリティ（無限）...こういう単語はニュース、新聞、インターネットでよく聞いていますが、正直、他の人に聞いてみたら、サイバーセキュリティって何をやるべきかほとんど知らないです。わたくしの考え方は、守る側（ホワイトハッカー）に対し、サイバーセキュリティは「ペネトレーションテスト」と同じです。　
　簡単に言うと、「ペネトレーションテスト」は検証テストです。潜在的な病気、人間は検査を受け、早めに発見できます。パソコン、計算機、車、あらゆるのシステムも検証テストを受け、商品を販売する前に致命的な欠点を発見し、修復します。ペネトレーションテストも同じ、だが診断を受ける対象はWEBシステムのは多いです。
　もちろん、ペネトレーションテストも標準、仕様などのルールを従わなければならないです。JISみたいな工業規格はペネトレーションテストの世界では「PTES」と呼びます。（Penetration Testing Execution Standard）7要素です。
1.Pre-engagement interactions
2.Intelligence Gathering
3.Threat Modeling
4.Vulnerability Analysis
5.Exploitation
6.Post Exploitation
7.Reporting

　一番目の意味は、ペネトレーションテストを開始する前、検査対象（委託人）と意見を交換します。例えば、テストの目標（サーバ、社内WIFI環境、ページのコードのデバッグ）、テストの範囲（ipアドレスは192.168.1.ｘから192.168.2.ｘのみテストを行う）、制限条件（機密情報保持、カーネルサーバーアクセス禁止）、テスト時間帯（お昼サーバ使うから、夜中でテストをやってください）など、委託人の都合より、準備方法、仕事の全体像を大まかに把握します。
　二番目は漸く今日のメインテーマ：情報収集です。サイバーセキュリティに少し関心を持つ方は、「ソーシャルエンジニアリング」という言葉を聞いたことがあるかもしれません。むしろブラックハッカー現在よく使われている情報収集の技術です。情報収集の段階は、マシン（システム）の運行状況及び情報（委託人提供されたドメイン名のIPアドレスはなに？サーバーは何のサービスを使っている？APPACHE？）、管理ルールのセキュリティホール（委託人の会社の正門は認証装置がある？社員さんのパソコンは会社からの貸し出し？それは簡単で手に入れる？）、人的な弱点（サーバ-保守の人はどのような人？生活習慣：登社退社時刻？性格タイプ：騙されやすい？お金欲しい？）など、想像力が豊富な人は様々な情報収集の方法を使っています。
（ソーシャルエンジニアリングを使って情報収集したい方はぜひこの本を読んでみてください）
![图片.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526362/52851ed4-de3b-aedf-e201-0c4544e24332.png)
https://www.amazon.co.jp/Art-Deception-Controlling-Element-Security/dp/076454280X
　今日会社のインターン任務をやらないといけないからここまでです。次回は情報収集の「OSINT」方法及び関連ツールを紹介したいと思います。
Flutter環境下でiOSsimulatorが動かない時

Flutter環境構築後にemulatorでbuildしていましたが、Cupertinoを使用したいと思い、
simulatorを起動したらbuildできなかった。
(flutter doctorコマンドは正常に通る)

下記errorはvscode上のdebug consoleの結果

```
$ flutter run

Launching lib/main.dart on iPhone 11 in debug mode...

Running Xcode build...                                                 

├─Assembling Flutter resources...                           6.2s

└─Compiling, linking and signing...                         1.1s

Xcode build done.                                            8.8s

Failed to build iOS app

Error output from Xcode build:

↳

    ** BUILD FAILED **

Xcode's output:

↳

    ld: framework not found Flutter

    clang: error: linker command failed with exit code 1 (use -v to see invocation)

    note: Using new build systemnote: Planning buildnote: Constructing build description

Could not build the application for the simulator.

Error launching application on iPhone 11.
```
下記コマンドを実行したところ、build出来ました。(一応プロジェクト配下でコマンドを叩いています）

```
$ flutter channel master　　(僕の環境だとdevだったのでmasterに切り替えた）
```

flutter channelコマンドで自身のflutter環境を確認出来ます。（*の付いているところが自身のflutter環境）
WebARENA IndigoでVPSデビュー

# WebARENA IndigoでVPSデビュー

## 月額349円でVPS

これまでは自宅でRaspberry Piをサーバとして使っていましたが、時々ブレーカー落ちたりするのでVPS試してみたいな、と思っていたところで新サービスの案内。

  - (株)NTTPCコミュニケーションズが提供
  - https://web.arena.ne.jp/indigo/
  - vCPUx1, RAM1GB, SSD20GB　0.55円/時間　月額上限349円
  - vCPUx2, RAM2GB, SSD40GB　1.1円/時間　月額上限699円
  - 初期費用なし
  - OSは CentOS 7.5 と Ubuntu 18.04 の二択

従量課金となっていますが、インスタンスを停止するだけではだめで、削除してしまわないと課金は継続するようなので注意が必要です。

月額349円と安価で、従量課金のためいつでも中断できるので、早速試してみようと登録しました。

## Ubuntuのインスタンスを登録

普段Debian系のRaspbianを使用しているので、同じDebian系のUbuntuを選択してインスタンスを生成。続いて起動。
インスタンス生成時に指定したSSH鍵を使用してsshで接続します。
はじめ、rootでログインしようとしてしまい、

```
root@xxx.xxx.xxx.xxx: Permission denied (publickey).
```
とエラーになりしばらく悩みましたが、接続するユーザ名はubuntuだと気づきました。
（後になってお客様サポートのよくある質問に載っていることを発見）

初期状態で下記の設定がされていることを確認。
　　- rootでのログインは無効
　　- パスワード認証は無効
　　- ユーザubuntuでsudo可能

ファイヤウォールの設定は特にされておらず、
$ netstat -an | egrep '(tcp|udp)' | grep LISTEN
してみると、外部からの接続を待っているのは22(SSH)のみ。

ファイヤウォールを設定する場合はWebの管理画面から設定する。
アドレスも指定できるが、指定していないアドレスからもアクセスできてしまうので、ポート単位で開放するかどうかを決めることになる。
Ubuntuが持つufwを有効にしても利かず、Webの管理画面からの設定が強制的に利くようになっているように見える。

## パッケージの更新

とりあえず apt upgrade しようとしたけど下記のようなエラーメッセージ。

```
Err:1 http://security.ubuntu.com/ubuntu bionic-security InRelease        
  Temporary failure resolving 'security.ubuntu.com'
```

サーバから応答がないのではなく、そもそもサーバのアドレスが解決できない。
初期状態で /etc/netplan/50-cloud-init.yaml にDNSサーバが指定されているようですが、digコマンドから直接それらのホストに問い合わせても返事がありません...

そこで、 /etc/systemd/resolved.conf で下記のように8.8.8.8と8.8.4.4を指定して...

```/etc/systemd/resolved.conf
[Resolve]
DNS=8.8.8.8 8.8.4.4
# 以下略
```
systemd-resolved を再起動したところアドレスが解決できるようになりました。
$ sudo systemctl restart systemd-resolved

あらためて、
$ sudo apt update && sudo apt upgrade

途中、「/boot/grub/menu.lst の新しいバージョンがあるけど、今インストールされているバージョンがローカルで変更されてるよ。どうする？」 と聞かれるので、新しいバージョンで上書き。
（差分を見たらスペースの数が1つ違うだけだった）


このあとDockerを入れる予定...
Linux入門　〜コンピュータシステムのハードウェアの概要とLinuxの主な機能とその仕組みの概要〜

# 概要
こちらの[入門監視まとめ](https://qiita.com/goemp/items/4ee8c4d3030ad7dd6505)に続き、初めてのサービスの公開にあたってLinuxの基礎知識を学び、APIサーバに障害が起きた時にサーバ内で何が起こっているのか、どう対処すればいいのかを判断できるようにするために、この記事では**コンピュータシステムのハードウェア構成の概要とプログラムの構成単位、Linuxの主な機能とその仕組みの概要**についてまとめました。別の記事で各Linuxの機能であるプロセスやメモリ管理の仕組みの詳細についてまとめます。

# コンピュータシステムの概要

## コンピュータシステムのハードウェア構成

<img width="722" alt="スクリーンショット 2019-11-02 13.07.08.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274080/63f661e7-1fe6-61cf-4615-6132b3145f51.png">

コンピュータは主に下のような手順を繰り返すことで様々な処理を行います。

1. 入力デバイス、ネットワークアダプタを介してコンピュータにある処理の実行を依頼する
2. CPUはメモリから命令を読み出して実行し、結果をメモリ上のデータ保存領域に書き込む
3. CPUはメモリ上に書き込んだ処理結果をハードディスクやSSDなどのストレージに保存したり、ネットワークを通して外部のシステムに送信したり出力デバイスを通して人に通知したりする

上の1~3のような手順を繰り返してユーザーにとって意味のある１つの処理にまとめたものをプログラムといいます。プログラムの種類として大きく分けて、OS、ミドルウェア、アプリケーションがあります

## プログラムの構成単位

OSは各種プログラムをプロセスという単位で実行する。各プログラムは１つ又は複数のプロセスから構成されます。
<img width="812" alt="スクリーンショット 2019-11-02 13.15.48.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274080/82c48b5e-3769-ffec-acac-f6c42b1ed67d.png">


## OS(Linux)の機能
上で説明したOSの機能として以下のようなものがあります

プロセス管理
プロセススケジューラ
メモリ管理
ファイルシステムの実現
デバイス操作

###  例：デバイスの操作

<img width="703" alt="スクリーンショット 2019-11-02 13.49.25.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274080/0195f4e2-4842-d74c-a7a1-7a8ece89a92b.png">

LinuxのOSの一つの機能としてデバイス操作のためにデバイスドライバという共通のインターフェースを提供しています。
こうすることで開発者がここのデバイスの仕様について一つ一つ理解することなく共通のインターフェースを操作することで様々なデバイスを扱えるような仕組みを実現しています。

さらに、複数のプロセスが同時にデバイスを操作することで予期せぬ動作をするのを防ぐために、デバイスドライバを介して制御しています。

上図のように、**ユーザーモードとカーネルモードという二つのモードによってより低レイヤーの処理を保護する仕組み**になっています。カーネルモードを動作させるためにはユーザーモードからシステムコールを介して呼ぶ仕組みになっています。
デバイス操作以外にも、プロセス管理、プロセススケジューラ、メモリ管理などもこのようにユーザーモードとカーネルモードとの共同によって実現されています（カーネルモードで動作するOSの核となる処理をまとめたプログラムをカーネルと言います）

# まとめ
コンピュータというハードウェがどのようにして外部から処理命令を受付けてそれを内部で実行するかの大まかな内容についてまとめ、プログラムの構成単位、そしてそのプログラムによって実現するLinuxの主な機能の紹介とそのうちの一つであるデバイスの操作の仕組みの概要についてまとめました。この概念の理解を元に、Linuxのメイン機能のプロセス管理やメモリ管理についての詳細を次の記事以降でみていきたいと思います。

# 参考
[Linuxのしくみ](https://gihyo.jp/book/2018/978-4-7741-9607-7)
[ふつうのLinuxプログラミング 第2版](http://i.loveruby.net/stdlinux2/)
[Linuxサーバーがゼロから作れる本](https://info.nikkeibp.co.jp/media/LIN/atcl/books/061900009/)
Widening Literal Typesとその防止法

#Widening Literal Typesとは？
##letとconstの型推論の違い
###letの型推論

```
let name = "Hanako"
let number = 34
let attendance = true
```

↓これはこのように推論される

```
let name: string
let number: number
let attendance: boolean
```

###constの型推論

```
const name = "Hanako"
const number = 34
const attendance = true
```

↓これはこのように推論される

```
const name: "Hanako"
const number: 34
const attendance: true
```

→constに代入するとLiteral Typesになるが、通常のLiteral Typesではなく、Widening Literal Typesになる

→Widening Literal Typesはconstで定められた定数をさらに別の変数に代入するとLiteral Typesではなくなり、普通の型推論になってしまう現象のことを言う
ex)

```
const name = "Hanako"
let samename = name
```

↓推論結果

```
const name: "Hanako"
let samename: string
//他の変数に代入したらLiteral Typesではなくなる
```

#Widening Literal Typesを防ぐには？
##結論：　const assertionを使えばよい

```
const name = "Hanako" as const
let name2 = name

const number = 34 as const
let number2 = number

const attendance = true as const
let attendance2 = attendance
```

↓推論結果

```
let name2: "Hanako"
let number2: 34
let attendance: true
//再代入してもLiteral Typesは失われずに保持されたままになっている
```
M5StickVで複数モデルを切り替えて使用する

この記事はM5Stack Advent Calendar 2019 3日目の記事です

現在では、目の見えない方のために[様々なアプリがあります](https://www.tokyo-itcenter.com/700link/sm-iphon4.html#iphone-10-00200)。

ですが、たとえば自分が飲みたいお茶のペットボトル（の柄）を登録しておいて、それを認識する、といった使い方ができるものはないようです。
登録したものを確認するには[オーカムマイアイ２](https://www.orcam.com/ja/myeye2/)のようなハードを使うことで実現できるのですが、価格が数十万円と高価であり、学生の方などが使用するのが難しいのが現状のようです。
![2019-11-02_135209.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59911/c84d1414-6c90-0689-09ce-4a4bf8d52dc3.png)

そこで、[3000円程で手に入る](https://www.switch-science.com/catalog/5700/)M5StickVを使って画像を登録・認識させるものを作成しました。
![M5StickVで画像を認識している絵](https://camo.githubusercontent.com/c5d700e1f91c1c3b82f3aeb62734043cb570a658/68747470733a2f2f692e7974696d672e636f6d2f76692f41504d614a374443664e382f687164656661756c742e6a70673f7371703d2d6f61796d77455a434e4143454c774253465879713471704177734941525541414968434741467741513d3d2672733d414f6e34434c412d6842537843566d4a796678385a41713137676e6f305573654841)

認識用のモデルは[M5Stack](https://m5stack.com/)が用意してくれているV-TrainingというWEBサービスを使用します
[V-Training](https://docs.m5stack.com/#/en/related_documents/v-training)
V-Trainingでは10種類までの物体を判別できるモデルを作成してくれるので、このモデルを複数作成し、切り替えて使用できるようにしました。
![モデルを選択](https://raw.githubusercontent.com/misawa2048/kmodel_selector/master/system_image.png)

V-Trainingそのものや音声を作る工程など、まだまだ面倒なところはありますが、
・ロゴ等平面的なものを認識する場合に少ない画像で水増しできるようにする（追加済）
・音声を作成する工程を簡略化する
等で面倒を減らしていけたらと思っています。

プログラムおよび作成方法はGitHubにて[公開中](https://github.com/misawa2048/kmodel_selector)です。
UbuntuにAnsibleでCUDAとNVIDIAドライバをインストールする

Ansibleを使用してリモート端末にCUDAとNVIDIAドライバをインストールする方法を記載する。
なお、明確な手順に関してはGitLabに掲載している。

# 環境リスト

<b>ホストPC</b>
OS: Ubuntu16.04

<b>リモートPC</b>
OS: Ubuntu16.04

上記二つに関しては同一ネットワーク内に接続されているもので実施。

# 前準備

Ansibleを使用する端末にAnsibleをインストールする必要がある。
Ansibleをインストールする方法は、[こちら](https://qiita.com/X_Prog/items/f3ad7d448b93a6cb97ef#ansible%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)を参照のこと。

# Ansible Playbook記載

Ansible Playbookは、[GitLab](https://gitlab.com/DoS-Project/ansible-sample)に記載しているので、そちらを参照のこと。


# Ansible実行

GitLabに掲載しているものであると、`ansible-sample/inventory/hosts`の中身がlocalhostになっているため、
適宜使用するリモート端末のIPアドレスに編集すること。
なお、必ずリモートとホストPCは用意の上実行すること。ローカルホストで実行した場合、再起動後の処理が続行されないため注意が必要である。
実行方法は、[こちら](https://qiita.com/X_Prog/items/f3ad7d448b93a6cb97ef#4-playbook%E3%81%A7%E3%81%AE%E3%83%86%E3%82%B9%E3%83%88)を参照のこと。
CSSセレクタの優先順位

## はじめに
CSSやBootstrapを使用していてよくあるデザインが反映されない問題について、文法間違いやパスの指定など色々な原因がありますが、CSSセレクタの優先順位が関係していることがよくあるのでまとめます。
<br>

## CSSの優先度
**CSSの記述がうまく反映されない**とき、文法の間違いもなく、パスの指定も問題ないという場合は**より優先度の高いCSSがどこかに記述されている**可能性が高いということです。

またBootstrapなどのフレームワークを採用していたら、`!important`句で**スタイルを強制されている**可能性が高いです。

CSSは複数箇所で同じタグに対し、競合した内容を書けてしまいます。

例えば以下のように。

```css:競合した内容
p{
    color:red;
}
​p{
    color:blue;
}
```

この場合、pタグのスタイリングはどうなるのでしょうか。

CSSには、競合するスタイリングをしたときにどのスタイリングが採用されるかの基準である「優先度」が存在します。

CSSは(同じ詳細度なら)より**後ろに記述したスタイリングを適用**するので、`color:blue`が適用されます。

次に位置によらない「タグへのセレクタの指定の度合いの詳しさ」である「詳細度」が関係します。

**`全称セレクタ＜タイプセレクタ＜クラスだけ＜クラスと要素＜id＜idと要素＜!importantを付加したプロパティ`**

の順で、右に行くほど詳細度は高くなっていき、最も詳細度の高いスタイリングが適用されます。

CSSを以下のようにしたとき

```css:適用されるスタイリングはどれか？
/*要素を特定したidセレクタ*/
p#hoge {
  color: red;
}

/*要素を特定しないidセレクタ*/
#hoge {
  color: blue;
}

/*要素を特定したclassセレクタ*/
p.fuga {
  color: yellow;
}

/*要素を特定しないclassセレクタ*/
.fuga {
  color: green;
}

/*タイプセレクタ*/
p {
  color: orange;
}

/*全称セレクタ*/
* {
  color: purple;
}
```

```html:何色になる？
<!-- p要素にはid属性とclass属性を同時に指定する -->
<p id="hoge" class="fuga">何色になる?</p>
```

HTMLの文字色は、最も詳細度の高い「idと要素」のスタイリングである赤色が適用されます。

なお、前述の**通り同じ詳細度のセレクタ同士ならCSSファイルのより後ろに書いたものが、またHTML内で後に読み込んだものが優先**されます。

よって、質問のような状況では「より詳細度の高い指定が既に他の場所に記述されてしまっている」ことがまず考えられるので、タグに適用されているCSSを全て確認してみましょう。

タグに適用されているスタイリングは、Chromeブラウザならコンソール画面→Stylesメニューから確認できます。
<br>

## !important
`!important`句は、セレクタの詳細度や位置に関わらず「プロパティを最優先で変更する」命令です。

以下のように詳細度の最も低い全称セレクタに書いたプロパティでさえ、最優先で適用させることができてしまいます。

```css
* {
  color: black !important;
}
```

### !important句とフレームワーク
もしサイトにBootstrapやMaterializeなどのCSSフレームワークを採用している場合には、オリジナルスタイルの扱いが難しくなります。

なぜならこういったフレームワークは、「フレームワーク側のソースコードでスタイルを`!important`句を用いて固定している」ことが多いためです。

> [例:Bootstrap4.3.1のソースコード](https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.css)

こちら側から通常の方法で競合するスタイリングをしていては、フレームワーク側のスタイリングが優先されてしまいます。

解決策としては

1. オリジナルスタイリング側でも`!important`句を使う
2. フレームワークを採用しない
3. フレームワークを(CDNではなくダウンロードして使うことを前提に)改造し、`!important`の記述を取り除く
4. フレームワークのスタイリングに従い、オリジナルのスタイリングを諦める

方法があります。

2や4が初学者向きの解決策ですが、どうしてもフレームワークとオリジナルスタイルを共存させたいのであれば1または3を検討しましょう。
<br>

## 参考
この記事は「CodeShip」内での実際の質疑応答や指導・アドバイスの一部を基に作成しています。
bootstrapのtoggleにstyleを適用させる

bootstrapでcheckboxをtoggleで作った時にstyleの変更の仕方が複数あったのでまとめておきます。
今回はボタンの角を丸くして、toggle-handleを白くします。
## 環境
bootstrap4
jQuery

## 留意点
html,cssはそれぞれhaml,scssで記述しています。

## コード
方法としては3パターンありました。
1.html内にcssを記述する場合

```new.html.haml
:css
  .toggle.check, .toggle-on.check, .toggle-off.check { border-radius: 20rem; }
  .toggle .toggle-handle { border-radius: 20rem; background-color: white;}
%input#passcheck{:type => "checkbox", "data-style" => "check"}
```
[Bootstrap Toggle](https://www.bootstraptoggle.com/#demos)のCustom Styleの&lt;style&gt;〜&lt;/style&gt;の部分をhamlに直すと上のcss: の記述になるみたいです。

2.cssを別で準備する場合

```new.html.haml
%input#passcheck{:type => "checkbox", "data-style" => "check"}
```
```sign.scss
.toggle.check, .toggle-on.check, .toggle-off.check {
    border-radius: 20rem;
  }
.toggle-handle {
    border-radius: 20rem;
    background-color: white;
  }
```

3.jQueryで読み込ませる場合

```new.html.haml
%input#passcheck{:type => "checkbox"}
```
```sign.scss
.toggle.check, .toggle-on.check, .toggle-off.check {
    border-radius: 20rem;
  }
.toggle-handle {
    border-radius: 20rem;
    background-color: white;
  }
```
```sign_up.js
$('#passcheck').bootstrapToggle({ // パスワードのtoggleボタン
   style: 'check'
});
```
styleの記述で、読み込ませたいtoggle.〇〇を指定している感じですね。

## 実行結果
![](https://gyazo.com/5f3687bcf3798aff8c754e874cc3aa28.png)
dockerのコンテナのrootユーザを、ホストOSの一般ユーザにマッピングする方法

# dockerのコンテナのrootユーザを、ホストOSの一般ユーザにマッピングする方法

Linuxではコンテナで作成したファイルなどはホスト側ではrootユーザでしか扱えないため、ファイルをマウントして開発する場合はいちいちroot権限で書き込みする必要があります。
ホスト側の一般ユーザを、新しくコンテナの一般ユーザとして作ることもできますが、コンテナ側でroot権限が使えたほうが良い場合が多いです。
そこで、ホスト側の一般ユーザのuidとgidを、コンテナのrootユーザにマッピングしてしまえば、楽です。
コレを行うと、今までのdockerイメージやコンテナが全て消えてしまうので気をつけてください。

------------追記------------
Dockerで作ったコンテナをそのままimageにしてデプロイする場合は、セキュリティのためコンテナ内にユーザを作成してください。
ここに書いてある方法はあくまでもローカル開発時のみで実行してください。

##　環境

Ubuntu 18.04.3 LTS


## 方法

まず、自分のIDを確認します。

```terminal:terminal

$ id
uid=1000(<username>) gid=1000(<username>) groups=1000(<username>),...
```

<username>のところは各々のユーザー名が表示されていると思います。

次に、/etc 内の　subuid と　subgid ファイルに以下のように書き込みます。
<username>のところは自分のものを書いてください

```:/etc/subuid
<username>:1000:65536
```

```:/etc/subgid
<username>:1000:65536
```

なければ新しく作り、二つとも同じように記述してください。
次に、/etc/docker 内の　daemon.json に次のように記述してください。ファイルはなければ作ってください。
<username>のところには自分のユーザ名を入れてください。
snapの場合は /snap/docker/current/config/daemon.json です。

```json:/etc/docker/daemon.json
{
    “userns-remap”:”<username>”
}
```

そして

```terminal:terminal

$ service docker restart
```
または、snapでDockerを入れている場合は

```
$ sudo systemctl daemon-reload
$ sudo systemctl restart snap.docker.dockerd
```

でDockerを再起動したら完了です。

#### 参考

[Code Example Docker 17 - Isolate containers with a user namespace](https://code-examples.net/en/docs/docker~17/engine/security/userns-remap/index)
タッチディスプレイ gen4-uLCD-35DT > gen4-IB > RXの電圧 > 3.3V LVTTL (Analog Discovery 2使用)

```txt:動作環境
Ubuntu 18.04 LTS 
Analog Discovery 2 + WaveForms
display module: gen4-uLCD-35DT 
```

### 概要

4D SystemsのDisplay module [gen4-uLCD-35DT](https://4dsystems.com.au/gen4-ulcd-35d)には外部CPU基板との通信用にgen4-IB基板を使う。
gen4-IB基板にから出ているTX,RXの電圧レベルを調べた。

### 手順

1. 4D Systems Workshop 4 IDEにおいてトラックバーのUIを作成
2. トラックバーの変更持にシリアル出力するReport Messageを設定
3. gen4-uLCD-35DTをスイッチングACアダプタ5Vで起動
4. gen4-IBのRX端子をAnalog Disocvery 2で測定 (オシロスコープとして)

### 結果

![Screenshot from 2019-11-02 13-41-23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32870/23e5a96f-0ddd-9fa8-caf6-eea5046b37e7.png)

3.3VのLVTTLというもののようだ。

外部CPU基板と接続時には3.3V LVTTLとして接続する。

### 測定の様子

スイッチングACアダプタからターミナル端子を用いて5Vを供給。
gen4-IBから付属のケーブルでブレッドボードへ。
ブレッドボードからAnalog Discovery2へは、GNDとRXをオシロスコープ用の１つめのケーブルに接続した。
右側に表示されているトラックバーを動かして電圧の変化を測定した。
![IMG_1260.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32870/3423bca6-fdef-a6cb-242b-18f06601bd0c.jpeg)

gen4-IBは30ピンのFFCから接続（付属品）。
![IMG_1261.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32870/b8d54a2d-cf34-544a-7983-a13a888d0f03.jpeg)
ランディングページ最適化

WEBデザイナーからHTMLがあがってきたらやってることを書いてみます。


<b>1. 画像サイズ縮小</b>

まずは画像サイズのダイエット。

[TinyPng](https://tinypng.com/)

使い方は簡単。ブラウザに画像をドラッグ＆ドロップするだけです。圧縮の度合いもいい感じに勝手にやってもらえます。
<img width="1138" alt="スクリーンショット 2019-11-02 12.33.17.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151314/667f2cca-d128-a8ea-6be9-b1520642e862.png">


<b>2. 画像遅延処理</b>

[lazyload 2.x](https://github.com/tuupola/lazyload/tree/2.x)
cf. [1x1の最小GIF・PNGファイル（透過/base64）](https://qiita.com/CloudRemix/items/92e68a048a0da93ed240)

imgタグの`src`にダミー画像、`data-src`に本来ロードする画像を指定します。classに`lazyload`を。

```html
<head>
<script src="js/lazyload.js"></script>
</head>
〜
<img class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVQI12NgYAAAAAMAASDVlMcAAAAASUVORK5CYII=" data-src="images/hoge.png">
〜
<script>
lazyload();
</script>
</body>
```

<b>3. javascriptのミニマイズ</b>

[JavaScript Minifier](https://javascript-minifier.com/)

<img width="1296" alt="スクリーンショット 2019-11-02 14.32.17.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151314/91e91676-50ba-e5bb-72ca-5aafe6b7d537.png">


<b>4. レンダリングパフォーマンス測定</b>

自分の場合、画像圧縮とlazyloadの仕込みが終わった時点でとりあえず測ってみます。

[PageSpeed Insights](https://developers.google.com/speed/pagespeed/insights/?hl=JA)

↑パフォーマンス測定のみでなく、改善点も教えてくれる素敵なサイト。


<img width="1267" alt="スクリーンショット 2019-11-02 12.50.09.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151314/b2edc786-a5d8-39b6-01a7-19f41778ac73.png">


あとは自鯖ならapacheのキャッシュ設定とか、画像のCDN化（AWS S3等）でしょうかね…
えいごのブログ

よ、みなさん

週のおわりに書いてすみません

今週で、仕事はいそがしいかった。

GOLANGを勉強つつける

メキシコのCURP　プロジェクトにとりくみつつけます。

そして、えいごのブログをドラフトがあります。

見てください
https://codepen.io/dabiddo/full/Pvppjb

NuxtjsとTailWindCssをしようする。

まだおわていない。



や、みなさん　また来週。
Elastic Beanstalk概念図

# 何
- Elastic Beanstalkの概念を学んだ際の記録
- [情報源](https://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/concepts.html)

## 概念図
![eb.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151200/0973363b-1b27-849f-7fc1-eb8b47294393.png)

## 図の見方
- リージョンとアプリケーションの間の線によって、1体Nの関係であることを表している。
- 例）１つのアプリケーションバージョンを複数の環境に配置できるが、１つの環境は１つのアプリケーションバージョンしか配置できない。
【解説動画】React入門編(17本の解説動画をまとめたリスト有)

![eyecatch-react-primer-movie-list.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/289248/d6d0271f-fb29-243b-5d31-482ba04fcf1d.png)

# 概要

僕のサイト「[Web白熱教室](https://tsuyopon.xyz/?ref=qiita)」に「[【学習コンテンツ】React編](https://tsuyopon.xyz/learning-contents/web-dev/javascript/react/?ref=qiita)」というものがあり、
今回その中の「React入門編」の解説動画を17本撮りました^^

各動画は、対応する学習コンテンツの記事内に1つずつ埋め込まれています。

# 動画だけをまとめて見たい方は...

以下のページに「動画リスト」のリンクを貼っているので、
動画だけをまとめて観たい方は以下のページから動画リストをご覧になっていただけたらと思います^^
↓↓↓　
[【JavaScript動画教材追加】React入門編](https://tsuyopon.xyz/2019/11/02/added-learning-movie-contents-11/?ref=qiita)

# この動画が参考になると想定している対象

- Reactに興味があるけどまだ学習していない
- Reactの学習を始めたけど、最初の段階からつまづいてしまっている
【SQLite3】データの更新 (UPDATE文)

テーブルに格納されているデータを新しい値に更新するには UPDATE 文を使います。

```sql
UPDATE テーブル名 SET カラム名1 = 値1, カラム名2 = 値2, ... WHERE 条件式;
```

まず更新の対象となるデータをWHERE句の条件式を使って指定します。
条件式に一致するデータが複数の場合は、複数のデータがそれぞれ更新されることになります。
WHEREを省略した場合はテーブルに含まれる全てのデータが更新されます。

次にどの値を更新するのかをカラム名と値で指定します。複数のカラムの値を一度に更新することができます。

次のようなテーブルを作成し、テーブルにはデータを追加してみます。

```sql
CREATE TABLE staff (id INTEGER, name TEXT, unit TEXT, flag TEXT);
INSERT INTO staff VALUES(1, 'Yamada', 'Sales', 'Yes');
INSERT INTO staff VALUES(2, 'Honda', 'Office', 'No');
INSERT INTO staff VALUES(3, 'Nakai', 'Office', 'Yes');
INSERT INTO staff VALUES(4, 'Suzuki', 'Tech', 'Yes');
INSERT INTO staff VALUES(5, 'Itou', 'Sales', 'No');
```
```sql:テーブルのデータを見てみる
SELECT * FROM staff;
id          name        unit        flag      
----------  ----------  ----------  ----------
1           Yamada      Sales       Yes       
2           Honda       Office      No        
3           Nakai       Office      Yes       
4           Suzuki      Tech        Yes       
5           Itou        Sales       No       
```


## ひとつのデータを更新

最初にidカラムの値が3のデータのnameカラムの値を変更してみます。

```sql
UPDATE staff SET name = 'Nakajima' WHERE id = 3;
```
```sql
SELECT * FROM staff;
id          name        unit        flag      
----------  ----------  ----------  ----------
1           Yamada      Sales       Yes       
2           Honda       Office      No        
3           Nakajima    Office      Yes       
4           Suzuki      Tech        Yes       
5           Itou        Sales       No        
```

---

## 複数のデータを一度に更新

unitカラムの値が'Office'のデータについて、unitカラムの値を'Desk'に変更して確認してみます。

```sql
UPDATE staff SET unit = 'Desk' WHERE unit = 'Office';
```
```sql
SELECT * FROM staff;
id          name        unit        flag      
----------  ----------  ----------  ----------
1           Yamada      Sales       Yes       
2           Honda       Desk        No        
3           Nakajima    Desk        Yes       
4           Suzuki      Tech        Yes       
5           Itou        Sales       No        
```

---

## 全てのデータを一度に更新

flagカラムの値を'unknown'に変更して、確認してみます。

```sql
UPDATE staff SET flag = 'unKnown';
```
```sql
SELECT * FROM staff;
id          name        unit        flag      
----------  ----------  ----------  ----------
1           Yamada      Sales       unKnown   
2           Honda       Desk        unKnown   
3           Nakajima    Desk        unKnown   
4           Suzuki      Tech        unKnown   
5           Itou        Sales       unKnown   
```

---

### 本記事目次ページ
[【データベース】SQLite3・JDBCまとめ](https://qiita.com/tsweblabo/items/8fa21f3e9e30885be034)

### 参考サイト
- [DBOnline 初心者でもわかりやすいサイトSQLite入門](https://www.dbonline.jp/sqlite/)
BottomNavigationBarItemを動的生成したら選択/非選択状態の色がおかしくなった件

##結論
BottomNavigationBar のselectedItemColor,unselectedItemColor をそれぞれ設定すれば直る。

軽くググっただけだと解決策が出てこなかったので情報共有として残す。

##現象
経緯1) Flutterでテキストベースゲーム作るかと思いたち、無計画に着手。
経緯2) 画面下部のバーで、選択可能行動を状況に合わせて置き換えようと考える。
経緯3) 動的生成をし始めたら、本件が発生した。

![Screenshot_1572664922.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154354/cb6e338d-0d5a-2e05-119e-028b5f2b782c.png)
BottomNavigationBarItem が3つまでならこう（これを正常系とする）

![Screenshot_1572663781.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154354/5f7c95a8-349e-fbbd-82f9-f9e39e92a7a7.png)
ところがそれ以上になるとこうなった。

よくよく見たところ、実は2つ目の画像のほう、アイコン自体はうっすら表示されている。
タップ反応もある(onTapイベントが反応した）ので単純に色だけがおかしいと推測した。

そこで試しに、結論で示した対応を行ったところ直った。

##原因推測
![Screenshot_1572665932.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154354/f5413e71-6e44-d4fa-8c5b-383afb6c6881.png)
1枚目とこちらを見比べると、非選択状態アイコンから文字列が消されているのが分かると思う。
アイコン3個までと4個以降では BottomNavigationBar 内部処理が異なっており、デフォルト設定色が反映されなくなるのでは。
リファレンスに書いてあったら笑う。
Haml-railsのREADMEを翻訳してみた

#概略
Haml-rails：Rails 5向けのHaml generator。
＊Hamlをテンプレートエンジンとして使用できるようになるだけでなく、自身のapplication.rbを破壊する必要はありません。（Gemfileがダウンロード済のテンプレートエンジンを明示している時）

##使い方
Gemfileに下記を追記する

```ruby:Gemfile
gem "haml-rails", "~> 2.0"
```
＊記述完了後、コンソール上、"bundle install"を忘れずに！

以下のことができるようになります。
-resource, view, or mailerを生成したときに、ERBの代わりにHamlテンプレートを入手できる。
-Rails applicationをロードしたときに、Hamlが自動でロードされ,初期化されます。
-Hamlのテンプレートはviewテンプレートのキャッシュ（cache digestor)が尊重されます。

###RailsアプリケーションレイアウトファイルをHamlフォーマットに移行
Rails application上でHaml-railsをインストールすると、erbレイアウトファイルを移行できます。

app/views/layouts/application.html.erbからapp/views/layouts/application.html.hamlに移行するときには以下のコマンド使用します。

```:terminal
$rails generate haml:application_layout convert
```

アプリケーションレイアウトファイルの移行が完了したら、app/views/layouts/application.html.erbを削除しましょう。
代わりにapp/views/layouts/application.html.hamlが使用できます。

####全てのall .erb viewsをhamlフォーマットに移行する
全てのall .erb viewsをhamlフォーマットに移行するには以下のコマンドを使用します。

```:terminal
　$ rails haml:erb2haml
```

もし既に.hamlファイルを持っている場合、入れ替えを行うかそのまま残すかオプションが提示されます。
また、タスク完了後にはオリジナルの.erbファイルを削除するかオプションが提示されます。
あなたがVer管理下にいない限り、このオプションの拒否（削除）を推奨します。
もしあなたがスクリプトで実行している場合は、環境変数を使用してこの質問に答えることができます。

```:terminal
$ HAML_RAILS_DELETE_ERB=true rails haml:erb2haml
```
上記を実行した場合は、質問なしに即座にオリジナルの.erbファイルが削除されます。
しかしながら、上記の値をfalseとした場合は、.erbファイルはそのまま残ります。（質問は出ません）

以降はVerの説明に関してでしたので、割愛します。

以上となります。最後までご覧いただき、ありがとうございました！
今後も学習した事項に関してQiitaに投稿していきますので、よろしくお願いします！
記述に何か誤りなどございましたら、お手数ですが、ご連絡いただけますと幸いです。

#####参照
上記の内容は全て以下URLページの意訳となります。
以下URLページ内の内容が全て正確な情報となります。
https://github.com/haml/haml-rails/blob/master/README.md
Laravel   Contoller Action Routing  まとめ

##① Controllerとは

・Laravelの中枢。主にルートから受け取ったデータをM(モデル)に渡してデータベースの変更や保存を受け取って、そのデータをV(ビュー)に渡して表示させる。

逆にビューで表示されたデータをC(コントローラ)に送って、モデルにデータの変更の処理を行わせる、ビューとモデルの橋渡しをする仲介役的な存在。

・コントローラ生成方法

```
 php artisan make:controller コントローラー名
```

作成後は以下の中身が生成される。

```
<?php

namespace App\Http\Controllers\Admin;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class ProfileController extends Controller
{
    //
```

##Actionとは

Controllerが持つ機能。正確にはControllerに実装されたメソッドのことを指す。

Action生成方法

```
public function add()
  {
```

Actionを定義してもActionとControllerが紐づいていないと機能しないままになる。
Routingを使ってこの２つを紐づけする。

##Routingとは

定義されたControllerとActionを紐づける。

・Routingの役割

PCを伝ってユーザーからアクセスを受け取ったら、その処理を実行する経路を決定して、Contoroller内Actionにアクセスを渡す。
PythonのCSV出力時に空行が入る現象の回避

### はじめに
WindowsでPythonからCSVを出力しようとして、一行ごとに空行が入ってしまったので回避策を残す。

```csv:出力CSV
a,b,c

d,e,f

g,h,i

```

### 環境
* Windows 10
* Python 3.7

### 問題のコード

```py

import csv

with open("./test.csv", "w") as f:
    writer = csv.writer(f)
    writer.writerow(["a", "b", "c"])
    writer.writerow(["d", "e", "f"])
    writer.writerow(["g", "h", "i"])
```

### 解決策
MacとLinuxでなった覚えがないので、Windows環境の問題と考えました。
CRLFが影響していると考えられますので、CRLFを回避する形にしていきます。

* open関数の引数newlineに空文字列を指定する
* writer関数の引数lineterminatorに改行コードを指定する

#### open: newline
行セパレーターの変換先を指定する引数です。
指定していない場合、システムでのデフォルトの改行に変換されます。
Windowsの場合だとCRLFですが、空行が発生してしまうので`''`か`\n`を指定します。
''か'\n'を指定した場合、変換が行われずそのまま出力される形になります。

```py

import csv

with open("./test.csv", "w", newline="") as f:
    writer = csv.writer(f)
    writer.writerow(["a", "b", "c"])
    writer.writerow(["d", "e", "f"])
    writer.writerow(["g", "h", "i"])
```

#### writer: lineterminator
各行の終端を表現するための引数です。
デフォルトの場合は`\r\n`とのことなので、`\n`を指定します。

```py

with open("./test.csv", "w") as f:
    # writer = csv.writer(f)
    writer = csv.writer(f, lineterminator="\n")
    writer.writerow(["a", "b", "c"])
    writer.writerow(["d", "e", "f"])
    writer.writerow(["g", "h", "i"])
```

### 備考
python2.7の場合は、newlineがないのでcsv.writerのlineterminatorを使用する方法になると思います。
io.openならばnewline引数が存在しますが、書き込む文字列がencoding回りで引っ掛かり詳しくは調べていません。

### 参考
https://qiita.com/ryokurta256/items/defc553f5165c88eac95
[Python: open: newline](https://docs.python.org/ja/3/library/functions.html#open-newline-parameter)
[Python: csv: lineterminator](https://docs.python.org/ja/3/library/csv.html#csv.Dialect.lineterminator)
cmap 作成方法

# cmapの作成方法
pythonでグラフを書くときに、プロットする色をターゲットごとに自由に選ぶためにcmapを作成する方法のメモ。

```python

from matplotlib.colors import ListedColormap
cmap = ListedColormap([ 'r', 'g', 'b'])
```
WiresharkでPermission エラーが出た時の処方箋（you don't have permission to capture on that device mac）

# 前置き
Wireshark を使って gRPC の通信内容をキャプチャしたくなり実行しようとしたところ以下のPermissionエラーが発生しました。その時の処方箋（対応方法）です。自身の備忘録を兼ねています

`you don't have permission to capture on that device`

<img width="811" alt="Wireshark_Permission_error" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/38342/f0cd319c-e720-f386-3690-cf9faf12fc12.png">

# 手順

## Download Wireshark
[Download Wireshark](https://www.wireshark.org/download.html) のリンクから、 MaxOS用のファイルをダウンロードします。

<img width="803" alt="Wireshark_ダウンロード" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/38342/a52de558-be24-7eaa-b2c0-b9b3100b0308.png">

## ユーザー名を確認する
```
whoami
exsample-user
```

## bpfの所有権のユーザー名とグループ名を変更する
※ ユーザー名は上記にのコマンドで取得した自身のユーザー名を指定する

```
cd /dev
sudo chown exsample-user:admin bp*
```


## 所有権のユーザー名とグループ名を確認する
ユーザー名は上記のコマンドで取得した自身のユーザー名になっていることが確認できる。

```
ls -la | grep bp
crw-------   1 exsample-user  admin           23,   0  9 26 16:15 bpf0
crw-------   1 exsample-user  admin           23,   1  9 26 16:15 bpf1
crw-------   1 exsample-user  admin           23,   2 11  2 11:09 bpf2
crw-------   1 exsample-user  admin           23,   3 11  1 21:34 bpf3
crw-------   1 exsample-user  admin           23,   4  9 26 16:16 bpf4
```

これで完了です。再度、Wiresharkを実行し正常に動作することを確認してみてください。
ERROR: (gcloud.app.deploy) Error Response: [9] Cloud build xxxxxxxx-xxxxxx-xxxxxx status: FAILURE.

AppEngineへのデプロイ時に発生。

原因は**プロジェクトに対して請求先アカウントが設定されていないこと**。

請求先アカウントを設定するには以下のリンクから。
https://console.cloud.google.com/projectselector2/billing

プロジェクトに請求先アカウントを設定したあと、10-15分程度待ってから再度デプロイを実行すると成功する。（設定直後は失敗する）


使用している runtime が 2nd gen の場合に発生する？
アサーションについて

#アサーションの使い方
アサーションについての理解が曖昧だったので、整理してみようと思います

##アサーションの用途について
アサーションはダウンキャストが可能な場合に用いる

###アサーションの書き方
（１）<変換したい型>を変数の前に書く
（２）asシグネチャを使って、変数 as 変換したい型と書く
　（JSXには<>を使った別の書き方があるため、そのときにはこのasを使った書き方を使う）

##もっと詳しく

###アップキャストとダウンキャストの違いとは？
•アップキャスト⋯抽象度を上げる（具体的な型だったものに抽象的な型を付与する）こと
•ダウンキャスト⋯抽象度を下げる(抽象的な型だったものに具体的な型を付与する)こと
　　　　　　　（→ダウンキャストは型の互換性がないといけない）

###つまり⋯
TypeScriptよりもプログラマが自身でもっと具体的な型付けをしたいと思ったときにこのアサーションを用いる、ということ
WEBデザインに使えるツール参考記事のまとめ

WEBデザインのツールとして、現在まだまだPhotoshopを使っている人も多いだろう。また、古株の人間だとFireworksを使っていた人もいるかもしれない。
個人的にはFireworksからphotoshopに乗り換えして5~6年くらい経つが、その他のツールを検討も視野にいれて、WEBデザインで使えるツールの参考記事をまとめたい。

## FireworksからPhotoshopへの移行の参考記事
PhotoshopでWEBデザインする方法 ～Fireworksから乗換え編～
https://stand-4u.com/photoshop/photoshop-webdesign.html

## PhotoshopでのWEBデザインの参考記事
進化したPhotoshopでWEBデザイン効率アップの１０の奥義！
https://stand-4u.com/photoshop/photoshop-trick.html

PhotoshopでWebデザインを効率化するための便利な使い方
https://liginc.co.jp/web/design/photoshop/88454

## Adobe XDでのWEBデザインの参考記事

Adobe XDでLINEデザインを作ってみた【使い方解説】
https://stand-4u.com/web/tool/adobe_xd.html

【 保存版 】Adobe XD 初心者向け使い方まとめvol.1★ 便利すぎて人生変わるよ…。
https://amitygraphic.com/post-1203-howtouseadobexd/

## SketchでのWEBデザインの参考記事
UIデザインの作成ツール！誰でも分かるSketchの使い方【初心者向け】
https://techacademy.jp/magazine/8576

## DramaでのWEBデザインの参考記事

最高のデザインツール「Drama」が登場！SketchやXDより良いかも。
https://webdesign-trends.net/entry/9878

## FigmaでのWEBデザインの参考記事

UI/UXデザインツール『Figma』入門
https://chot.design/figma-beginner/

以上、今後も随時増やしていくつもりです。
【制作者向け】セキュリティをふまえたサーバーの選び方 -EC-CUBE2.17の世界一早い最新情報- | EC-CUBE名古屋 vol.72

# 今回は文字が多いので Qiita スライドモードでお送りします

----

# Agenda

- セキュリティをふまえたサーバーの選び方
- EC-CUBE2.17の世界一早い最新情報

----

# セキュリティをふまえたサーバーの選び方

----

# セキュリティとは🤔

- 情報セキュリティ
- システムセキュリティ

今日はシステムセキュリティ中心のお話しです

----

# セキュリティを強化するには

- 最少権限の原則
- セキュリティと利便性はトレードオフ
- セキュリティを強化すれば不便になる

----
# セキュリティのための機能

- ファイルのパーミッション
- WAF
- ssh
  - 公開鍵認証

など

----
# 便利機能を使わないことで強化する

- デザイン管理, ファイル管理画面は使わない
- FTP/SSH ユーザーと, Webサーバーは異なるユーザー権限
- 公開領域にファイルアップロード可能な機能は要注意
- 画像アップロードは管理画面からしない
  - 画像に偽装した PHP ファイルも作れたりするので
- ユーザーにアップロードさせる機能は極力避ける
- .htaccess, config.php は読み取り専用
- プラグインを本番環境に直接インストールしない

----

# 他の CMS と同居

- 他の CMS と同居させない
- WordPress はファイルの書き込みに FTP 機能を使用することでセキュリティを確保している
- プラグインは最小限に. 多くのユーザーが使用しているものを選ぶ
- phpMyAdmin を使わない
- データベースに外部からアクセスさせない
- データベースの権限を絞る

----
# WordPress 向けには良い資料があります

http://wpdocs.osdn.jp/WordPress_の安全性を高める

----
# サーバー選びの要件

- FTP/SSH ユーザーと, Webサーバーは異なるユーザー権限を設定可能
- セキュリティパッチの適用が早い
- SSH公開鍵認証を利用可能
- データベースの権限を細かく設定可能
  - せめて複数のアカウントを設定可能
- WAF が使える

----

# EC-CUBE2.17の世界一早い最新情報

----

# 2019年10月31日 EC-CUBE2.17.0 リリース㊗️

- 約4年ぶりの2系リリース

----
# 特徴

- MySQLで約200%の高速化
- PostgreSQL と MySQL の性能差が少なく
- PHP5.4以降のサポート
- データベースの変更無し
- Composer 導入

----
# 多くの不具合修正
- 税率設定は商品ごと
- モバイル(ガラケー)は廃止

----
# CI/CD の導入

- 世界に先がけ GitHub Actions の導入
- PHP5.4から7.3まで自動的にテスト
- ユニットテストのカバレッジ52%
- E2Eテスト
- 自動的にパッケージング

----
# リポジトリ変更

https://github.com/EC-CUBE/ec-cube2/

- Gitコマンドも自動的にリダイレクトされるので、手元の開発環境は変更無し

----
# 古い2系からの移行

- 移行手順
  - [EC-CUBE2系から2.17へのバージョンアップ方法](https://qiita.com/nanasess/items/ff9bbde34f7d44240c06)
- 2.4からのデータ移行プラグイン

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">2015年時点で作ってあった、2.4系→2.17系移行ツール😃<br>手直しして再リリースしよーっと<a href="https://t.co/ONrY8LdvhO">https://t.co/ONrY8LdvhO</a></p>&mdash; のぶ (@redsnow_) <a href="https://twitter.com/redsnow_/status/1190117999820316672?ref_src=twsrc%5Etfw">November 1, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

----
# そのほか

- 2.13系のプラグインは,だいたい動く
  - プラグインが PHP7 に対応していれば
- git でインストールするのがおすすめ

----

# 質疑応答

----

# 今日のまとめ

----

# ご静聴ありがとうございました！
GNU Scientific Library (GSL)を、オレオレ的にビルドするツールをつくった話。


# はじめに

GNU Scientific Library (GSL)をビルドするために四苦八苦して、結局、kgslbというツールをつくったので、紹介します。

これは、以下のkgslbというツールです。
[kojiynet/kgslb: A tool to help build GNU Scientific Library](https://github.com/kojiynet/kgslb)

あ、四苦八苦した過程はとりあえず省略します。

# GSLとは？

GNU Scientific Library (GSL)とは、数値計算ライブラリです。Cで書かれています。現在の最新バージョンは2.6です。
[GSL - GNU Scientific Library - GNU Project - Free Software Foundation]
(https://www.gnu.org/software/gsl/)  

# kgslbは何をするか

kgslbは、Windows上のVisual C++のコンソール（DOSのシェル）で、GSLをビルドするバッチファイルを生成します。

このバッチファイルは、GSLソースファイル群をどういう順番でコンパイルし、どうリンクして、ライブラリファイルを産出するかを指示するものです。

使用の際の流れは次のとおりです。

kgslb.exeの実行の準備
↓
kgslb.exeの実行＝kgslb.batの生成
↓
kgslb.batの実行＝GSLのライブラリのビルド

# kgslbをつくった理由

Windows上でVisual C++のコンソールから使うプログラムをときどき作っております。こうしたプログラムの中で、GSLを利用したいと考えました。

が、VC用のバイナリとしてネット上で手に入るものはバージョンが古かったりしました。また、ネット上で紹介されているビルド方法は、自分の環境では使えなかったり、環境を大きく変化させないといけないようだったので、それはあきらめました。

その代わりに、

**単純に、自分の環境の中で、ソースファイルをコンパイル・リンクしていけばよいのでは…**
**そしてそれをバッチファイルにまとめればよいのでは…**

という発想に至りまして、つくっちゃった次第です。


# 詳しい使い方については…

以下のリポジトリのREADMEを読んでくださいね。
[kojiynet/kgslb: A tool to help build GNU Scientific Library](https://github.com/kojiynet/kgslb)


# Enjoy!!

I hope you all enjoy hacking with it!!!
GitLab Offlineセットアップ記録

# GitLab Offlineセットアップ記録
GitLab Offline Version11.10.4のセットアップの記録を以下に残す
![gitlab-logo-gray-stacked-rgb.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90447/de4e9030-378a-5e40-7193-958461ed7a0f.jpeg)

##### ◆参照情報

1. Manually Downloading and Installing a GitLab Package : https://docs.gitlab.com/omnibus/manual_install.html

2. RHEL7用のGitLab version11.10.4 rpmダウンロードサイト : https://packages.gitlab.com/gitlab/gitlab-ce/packages/ol/7/gitlab-ce-11.10.4-ce.0.el7.x86_64.rpm


ダウンロードしたファイル（gitlab-ce-11.10.4-ce.0.el7.x86_64.rpm：600MB）をサーバー上の任意の場所に保存する。

Port8080でアクセスするので、Firewallに8080/TCPでアクセスできるように設定する

```bash
sudo firewall-cmd --add-port=8080/tcp --zone=public --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --list-all
```


rpmに実行権限を付与する

```bash
sudo chmod +x gitlab-ce-11.10.4-ce.0.el7.x86_64.rpm
```
EXTERNAL_URLは後で変更するので、ここでは何でもOK

```bash
sudo EXTERNAL_URL="http://example.com:8080/gitlab" rpm -i gitlab-ce-11.10.4-ce.0.el7.x86_64.rpm
```
インストールが完了したら`sudo vi /etc/gitlab/gitlab.rb`でGitLabの設定を幾つか変更する

/etc/gitlab/gitlab.rbの変更箇所

```bash
external_url 'http://example.com:8080/gitlab'
unicorn['listen'] = 'example.com'
unicorn['port'] = 8081
nginx['enable'] = true
nginx['listen_port'] = 8080
```

- external_url：実際にアクセスするURL
- unicorn['port']：GitLabのPortと別Port番号を設定する。ここでは8081に設定している。

GitLabの再設定反映とリスタート

```bash
sudo gitlab-ctl reconfigure
sudo gitlab-ctl restart
sudo gitlab-ctl status
```
<br>
EXTERNAL_URLに設定したURLでアクセス可能（以下は例なので実際にはアクセスできません）

http://example.com:8080/gitlab

<br>
<Helmet>ってなんぞや！react-helmet

#react-helmetってなに

**headタグを使用する為に用いるReactのコンポーネント**です
こんな感じで使ってあげて！

##使いかた

-  react-helmetをyarn add してinstallしよう

```sh
yarn add react-helmet
yarn install
```

-  はい、インポート


```js
import { Helmet } from 'react-helmet';
```

- あとは使うだけ 

```jsx
return(
  <>
    <Helmet title={message.title} />
    <Wrapper>
      <Title>....</Title>
    </Wrapper>
  </>
);
```


##metaタグってなに
webページの情報を検索エンジンやブラウザに伝えるタグのこと。
HTMLのheadタグ内に書くものやで

```html
<meta name=“description”>
<meta name=“keywords”>
```
などをreactで使用しているのと同じ感覚で使用する

便利やなああ



参考
https://www.genius-web.co.jp/blog/website-operation/what-is-the-meta-tag-for-beginners.html

https://techblog.lclco.com/entry/2018/10/31/200000
Ruby on Rails　インストール、アプリケーション作成、サーバーを立てるまで

Webアプリケーション開発のフレームワークである、
Ruby on Railsの導入してみたいと思います。

# 前提
●Rubyが導入されていること
●Rubyのバージョンが2.2.2以上であること（Rails5系を使うため）

#Ruby on Railsインストール
１：コンソールを開く

２：Railsインストールコマンドを記入

```console:console
gem install rails -v “5.2.3”
```

3:確認する

```console:console
rails -v
```

#アプリケーション作成
アプリケーション作成は、コンソールを開き、

```console:console
rails new アプリケーション名
```

入力すると、アプリケーションが作成されます。


アプリ名「test_app」を作成したいと思います。

```console:console
rails new test_app
```

入力した後、ディレクトリを移動し、lsコマンドを入力、
作成されたフォルダ群が見れると、作成が成功したこととなります。

```console:console
cd test_app
ls
Gemfile		app		db		public		vendor
Gemfile.lock	bin		lib		storage
README.md	config		log		test
Rakefile	config.ru	package.json	tmp
```

#サーバーを立てる
作成したフォルダにディレクトリを移動し、
サーバーを立てるコマンド「rails s」を入力します。

```console:console
cd test_app
rails s
```

コマンドを入力し、サーバーをたて、
ブラウザを立ち上げ、URLに「localhost:3000」
を入力し、アクセスしてみましょう
アクセスして、以下の画像が表示されれば、成功となります。
![スクリーンショット 2019-11-02 11.24.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222940/5eac9027-322b-9da0-a4ed-b9f63fb59609.png)

確認したら、コンソールで、
[ctr + C]を入力し、サーバーを止めましょう。
Vim Plugin で手始めに Hello World! を自動入力してみる

## はじめに

普段開発のエディタは Vim を使っています。プラグインもいくつか入れて開発しているのですが、自分でプラグインを開発したことはありませんでした。

Vim プラグインを自分で作ってみたいと思い、初歩中の初歩ではありますが、`Hello World!` を Vim プラグインで表示するところをやってみたいと思います。

## 手順

### フォルダ作成 

まず、最低限のフォルダ構成を準備します。`plugin` フォルダ以下のスクリプトが Vim 起動時に呼ばれます。

```bash
mkdir hello-world-sample-vim
cd hello-world-sample-vim
mkdir plugin
```

### 処理実装

`plugin/hello-world-sample-vim.vim` というファイルを作成します。

今回は、ノーマルモードで `CTRL-k` を押下したらインサートモードに移行し、 `Hello World!` と入力されるような実装をしてみました。

```vim:plugin/hello-world-sample-vim.vim
nmap <C-k> <ESC>iHello World!
```

## GitHub 上のリポジトリにプッシュ

作成したファイル群を GitHub のリポジトリ上にプッシュします。作成したのは以下です。

https://github.com/gotchane/hello-world-sample-vim

## 動作確認

Vim を起動し、`Ctrl-k` を入力したら、`Hello World!` とエディタ上に入力されればOKです。

## おわりに

最低限の表示はできましたが、まだまだ理解が足りていない感じがあります。Vim Plugin を書く上でのお作法なんかもあるみたいなので、他のプラグインのソースコードも読んでみて勉強していこうと思います。


## 参考

* [続・初めてのvimプラグイン作成 - 最小限なvimプラグイン - Qiita](https://qiita.com/bonjin6770@github/items/31e60707ecf2ad6c4496)
* [初めてのvimプラグイン作成 - 最小限なvimプラグイン - Qiita](https://qiita.com/bonjin6770@github/items/5847f0baf09edf5c596f)
* [usr_05 - Vim日本語ドキュメント](https://vim-jp.org/vimdoc-ja/usr_05.html)
製薬企業研究者のためのPythonインストール方法

# はじめに

ここでは、主に製薬企業でプログラミングを使った業務を行うために必要な環境構築について書いています。
基本的にはケモインフォマティクスやバイオインフォマティクスなどにおける機械学習に利用することを想定しています。
また、使用するパソコンは、Windows 10を想定しています。

# Anacondaのインストール

Anacondaをインストールすると、Pythonとともに、科学計算でよく使われるライブラリ（よく使う関数などをまとめて利用できるようにしたもの）一式が同時にインストールされ、すぐに実務で使うことができます。

まず、[Anacondaのダウンロードページ](https://www.anaconda.com/distribution/)にアクセスします。
そこで、下の図の赤枠で示しているように、Windows用のインストーラーを選択します。

![Anaconda download.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517951/876b0e96-987d-41d2-0a76-23d1a9fd036f.jpeg)

下へスクロールすると、Python3系かPython2系かを選択する箇所が出てくるので、Python3系を選択します。
使っているパソコンに合わせて64bit版または32bit版のインストーラをダウンロードします。

![anaconda download 2.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517951/f04549ff-e615-6ed8-5057-320afd2409e1.jpeg)

あとは画面の指示通りに進めていけば、問題なくインストールできるはずです。


# インターネット接続設定

社内ポリシーに則り、適宜インターネット接続設定をAnacondaに対して適用してください。
これをやっておかないと、以下のライブラリの追加インストールができなくなります。


# Anacondaのアップデート

Anacondaは時々アップデートが入る場合があります。
アップデートを適用するには、コマンド プロンプトに以下のコマンドを入力して実行します。

`conda update --all`


# まとめ

ここでは、製薬企業の実務でPythonを使用するための環境構築について解説しました。
化合物の構造を扱ったり、機械学習を本格的に行ったりするためには、追加でライブラリをインストールする必要があります。
詳しくは、以下の記事を読んでみてください。

[製薬企業で使えるPythonライブラリのインストール方法](https://qiita.com/yukiya285/items/8b80879ecf13cd3f8d5d)



# 参考資料・リンク

[意外と少ない！？製薬会社でのプログラミングに必要な「最低限」の知識](https://pharma-engineer.com/basic-programming/minimum-information/)
【Rails】オブジェクトの更新 save, update_attributes

## オブジェクトの更新
### save

``` save.rb
user = User.new(name: "new", email: "hoge@example.com")
user.save
```
作成したオブジェクトを保存する
検証に失敗すると`false`を返す

### update_attributes

``` update_attributes.rb
user.update_attributes(name: "qita", email: "foo@bar.com")
```

既にあるオブジェクトを更新する
検証に失敗すると`false`を返す

### update_attribute

``` update_attribute.rb
user.update_attribute(name: "qiita")
```

特定の要素のみ更新し，検証を回避する

## 参考
[第6章 ユーザーのモデルを作成する - Railsチュートリアル](https://railstutorial.jp/chapters/modeling_users?version=4.2#sec-updating_user_objects)
ワーママSE、転職したってよ

#はじめに
ここでどれだけ需要があるか知りませんが、ワーママSEの転職エントリを書いてみます。
前はだらだら書いてたのですが短くまとめました。

#スペック

最終学歴は三流四大の情報系。
入社後はフルスクラッチ、製品カスタム、運用保守、契約補助などを反復横跳びしてる何でも屋の下っ端。
開発がメインだけど基本的なインフラ部分含めit基礎知識は一通り。

経歴上、開発としては某製品言語、VBAとDB/SQL(oracleとSQL server)と.NET系がメイン、Javaはなんとか抑えたもののクラウドはやっておらず、リーダー経験はほぼなし。
プライムでの運用や保守もやってるが、自分1人だしかなり甘い環境の自覚あり。

#転職理由
+ 低賃金過ぎる。__短縮勤務で新人以下の現実は堪える。__
+ 会社内の学習機会が皆無(暇は多かったので能動的に知識入れてましたが限界を感じていた)
+ 会社自体の将来性に疑問があった
+ 炎上案件に放り込んだ上で「せっかく学習機会与えたのに、ワーママに仕事は与えられないかもよ」って新しい評価者が醸してきたこと


#大事にしたこと
+ 給料が上がりたい。最低50万。流石に短縮勤務でも新人よりはもらってええんちゃう？
+ ワークライフバランスやダイバーシティがしっかりしているところ
+ 短縮勤務を出来れば継続したい
+ 学習機会が業務時間内にある(研修や新規技術)
+ (ワーママでかつバンギャやオタクを兼任している自分には時間がとかく無いので、)会社内である程度学習したい
+ 子育てで必要な休みが取れる

#転職
時間がないのでエージェントさんを使い、利用終了期限ギリギリに決まりました。
外資総合ファームの片隅です。たまたまポストが空いたのと、経験のあった業界や外資のお客様が居た点、あとまあまあいろんなITトレンドの話は出来る方なので会話が成り立ったことと、技術習得には前向きな点ですかね。
日本だと受け入れてくれることがほぼないだろう条件はほぼほぼ通りました。短縮勤務とか。

あと英語は読めても書けませんレベルですが、日本ドメインのシステム領域担当だから問題ないらしい。
ほーそんなパターンがあるのか…と感心。

#現状

現時点での結論も、やはり転職して良かったです。

何が良かったって、一本以上上がった給料もそうなんですが、新しい経験や成長が仕事にあるってことですね。
それにいつでも研修がある。
逆にキツイところは…仕事…仕事の責任のデカさですね…。


#転職しよう
低賃金・長時間勤務・成長機会なしのスパイラルで苦しんでるSEって子持ち問わず男女問わずいるように思うんですが、そういう経営側の責任って、辞めることでしか問えないんだなと。
声が届かなかった日系を辞めてからしみじみと思ったりしています。
経営者には速やかにご退場願える唯一にして最強の手段。

てなわけでお気軽に転職して~~ガンガン無能経営者を消して~~こ！
git commitで使う引数を渡す方法[aliasで時短]

`git commit -m "mod method" filename1 filename2 filename3`
と長くなる問題、なんとかしたので、共有します。

ファイルをgit addからpushするまでのコマンドとしてはこんなかんじになります。

```
gkz@localhost~/workspace/demo (master) $ ga README.md 
gkz@localhost~/workspace/demo (master) $ gc "first" README.md 
gkz@localhost~/workspace/demo (master) $ gpu master
```

上のコマンドは~/.bashrcに記載したaliasを使っています。

```
$ tail  ~/.bashrc
alias ga="~/.sh/gitadd.sh"
alias gc="~/.sh/gitcommit.sh"
alias gpu="~/.sh/gitpush.sh"
```

~/.bashrcに記載したshellで引数を取得しています。

```
$ cat ~/.sh/gitadd.sh 
#!/bin/bash

git add $@
```

```
$ cat ~/.sh/gitcommit.sh 
#!/bin/bash

#${@:2}: 一番最初以外の引数
git commit -m "$1" ${@:2}
```

```
$ cat ~/.sh/gitpush.sh 
#!/bin/bash

git push origin $@
```

みなさんのgit tips、コメントにて共有いただけると嬉しいです。

P.S. Twitterもやってるのでフォローしていただけると泣いて喜びます！
[@gkzvoice](https://twitter.com/gkzvoice)
Electron 7.0.x で webContents.printToPDF() が promisification されたけどドキュメントの例が直っていない件

Electron 7.0.x がリリースされたということで早速、アップデートしてみました。いっそう、promisification が進んでいるようです。[webContents.printToPDF()](https://electronjs.org/docs/api/web-contents#contentsprinttopdfoptions) も promisification されて、Promise<Buffer> を Return するようになりました。

https://electronjs.org/docs/api/web-contents#contentsprinttopdfoptions に webContents.printToPDF() の説明がありますが、メソッドの説明そのものは更新されていますが、コーディング例が更新されていません。以下のように修正すべきかと思います。

```javascript
const { BrowserWindow } = require('electron')
const fs = require('fs')

let win = new BrowserWindow({ width: 800, height: 600 })
win.loadURL('http://github.com')

win.webContents.on('did-finish-load', () => {
  // Use default printing options
  win.webContents.printToPDF({
  }).then(data => {
    fs.writeFile('/tmp/print.pdf', data, (error) => {
      if (error) throw error
      console.log('Write PDF successfully.')
    })
  }).catch(error => {
    throw error
  })
})
```

以下、差分。

```diff
--- a/docs/api/web-contents.md
+++ b/docs/api/web-contents.md
@@ -1329,12 +1329,14 @@ win.loadURL('http://github.com')

 win.webContents.on('did-finish-load', () => {
   // Use default printing options
-  win.webContents.printToPDF({}, (error, data) => {
-    if (error) throw error
+  win.webContents.printToPDF({
+  }).then(data => {
     fs.writeFile('/tmp/print.pdf', data, (error) => {
       if (error) throw error
       console.log('Write PDF successfully.')
     })
+  }).catch(error => {
+    throw error
   })
 })
 ```

Pull Request しようかと思いましたが、テンプレートが結構、面倒そうだったので尻すぼみしてます。

既に Electron の Contributor な方に取り込んでもらえたら、いいなあ。 < 他力本願 :sweat_smile: 

# 蛇足

[dialog.showSaveDialog()](https://electronjs.org/docs/api/dialog#dialogshowsavedialogbrowserwindow-options) も 7.0.x で Promise<Object> を返すようになっています。
【入門】Postman ①

本章では、Postmanについての説明、インストール～デスクトップアプリ起動までを行います。

#Postmanって何？
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456278/6d4cddeb-6f07-66e4-2d05-dfa60a33d961.png)
Postmanは、Web APIのテストクライアントサービスのひとつです。色々なクライアントの動きをテストできるようスクリプト拡張や、テストスイートシナリオの作成などの機能があります。これらの機能を使うことで、 ユーザーのAuth認証 〜 アクセストークン取得 〜 ユーザーの新規登録 〜 ユーザー情報取得 〜 ユーザー情報の更新 〜 ログアウト 〜 ユーザー退会処理 というような一連のAPIの流れを、様々なケースを、状態を維持しながら一度に実行することができます。

#APIって何？
簡単に言うとフロント⇔サーバーへの情報交換のこと。
本来の意味とは少し違いますが、この認識でとりあえず問題ないです。
APIについて詳しく知りたい方は[こちら](https://www.sejuku.net/blog/7087)。

#Postmanをインストール
###Postmanをダウンロードする。
以下リンクから、任意のOSでダウンロードする。
https://www.getpostman.com/downloads/
ダウンロードファイルを開き、インストールするとこのような画面が開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456278/e2ddb7e6-2009-8d5c-bde1-d1a3dfaff447.png)

#次
【入門】Postman ② ⇒準備中
#VsCode で新規ファイルを作成してすぐに編集を開始するコマンド ( code /path/to/file.txt )

# コンソールで使える code コマンドをインストールしておく

![image](https://user-images.githubusercontent.com/13635059/68059375-a4227780-fd3f-11e9-87e0-9b5b09bfec07.png)

>MacでVisual Studio Codeをターミナルから起動する方法。
>Command + Shift + Pでコマンドパレット開く。
>Shellって検索
>インストール

[ターミナルからVisual Studio Codeを起動する方法【公式の方法】 - Qiita](https://qiita.com/naru0504/items/c2ed8869ffbf7682cf5c)

# コマンド例

`code ~/tmp/wow/wow/some.erb`

なんと存在しないディレクトリの存在しないファイルでも作成してくれることが判明。

あとは編集、保存するだけ。

![image](https://user-images.githubusercontent.com/13635059/68059323-6faebb80-fd3f-11e9-82a2-1937bd7f966a.png)


# Original by Github issue

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








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->