OmniAICreator/Qiita-1.07M huggingface dataset:
【今日のアブストラクト】U-Net: Convolutional Networks for Biomedical Image Segmentation【論文 DeepL 翻訳】

1 日 1 回 論文の Abstract を DeepL 翻訳の力を借りて読んでいきます.

この記事は自分用のメモみたいなものです.
ほぼ [DeepL](https://www.deepl.com/home) 翻訳でお送りします.
間違いがあれば指摘していだだけると嬉しいです.

翻訳元
[U-Net: Convolutional Networks for Biomedical Image Segmentation](https://arxiv.org/abs/1505.04597)

# Abstract

### 訳文

ディープネットワークの学習を成功させるためには, 多数のアノテーション付き学習サンプルが必要であることが広く知られている. 本論文では, 利用可能なアノテーションサンプルをより効率的に利用するために, データの水増しを強力に利用することに依存したネットワークと学習戦略を提示する. そのアーキテクチャは, 文脈を捉えるための縮小パスと, 正確な局所化を可能にする対称的な拡大パスから構成されている. このようなネットワークは, 非常に少ない画像からエンドツーエンドで学習することができ, ISBI challenge である電子顕微鏡スタック中の神経細胞構造のセグメンテーションにおいて, 先行する最良の手法 (スライドウィンドウ畳み込みネットワーク) を凌駕することを示している. 透過光顕微鏡画像 (位相コントラストと DIC) で訓練された同じネットワークを使用して, これらのカテゴリでISBI cell tracking challenge 2015 において大差で優勝した. しかも, このネットワークは高速である. 512x512 の画像のセグメンテーションは, 最近の GPU では $1$ 秒もかからない. 完全な実装 (Caffeに基づく) と訓練されたネットワークは, [このhttp URL](https://lmb.informatik.uni-freiburg.de/people/ronneber/u-net/) にあります.


### 原文

There is large consent that successful training of deep networks requires many thousand annotated training samples. In this paper, we present a network and training strategy that relies on the strong use of data augmentation to use the available annotated samples more efficiently. The architecture consists of a contracting path to capture context and a symmetric expanding path that enables precise localization. We show that such a network can be trained end-to-end from very few images and outperforms the prior best method (a sliding-window convolutional network) on the ISBI challenge for segmentation of neuronal structures in electron microscopic stacks. Using the same network trained on transmitted light microscopy images (phase contrast and DIC) we won the ISBI cell tracking challenge 2015 in these categories by a large margin. Moreover, the network is fast. Segmentation of a 512x512 image takes less than a second on a recent GPU. The full implementation (based on Caffe) and the trained networks are available at [this http URL](https://lmb.informatik.uni-freiburg.de/people/ronneber/u-net/) .
ローカル環境でSSLを使って外部公開したい(ngrokの使い方)

ngrokの使い方メモです。

ローカル環境でSSLを公開したい場合があります。自分の場合はソーシャルログインのテストがしたかったためです。facebookログインではhttps通信が必須となりますので。

###ngrokを使う
ngrokはローカル環境のhttps化をいい感じにやってくれます。

###インストール
下記の公式サイトからインストールします。
https://ngrok.com/

ログインはしてもしなくてもいいみたいです。

ダウンロードして解凍したngrok.exeを任意の場所に保存します。

正常に起動するか確かめます。

```
$ ./ngrok version 
ngrok version 2.3.35
```

###ngrokの起動
ローカルのポート番号を指定して起動します。

```
./ngrok http 80  
```
`Ctrl+c`で停止します。

Dockerを利用する場合でもコンテナ内にインストールする必要はなく、ホストOSでngrokが使えればよいので、localhostならこの方法で大丈夫です。

###ブラウザでアクセス
ngrokが立ち上がると下のように表示がありますので、ブラウザではForwardingのところにある`https://xxxx.ngrok.xxxx`でアクセスできます。

```shell

Session Status                online
Session Expires               7 hours, 59 minutes
Version                       2.3.35
Region                        United States (us)
Web Interface                 http://127.0.0.1:4040
Forwarding                    http://c4927277.ngrok.io -> http://localhost:80
Forwarding                    https://c4927277.ngrok.io -> http://localhost:80

Connections                   ttl     opn     rt1     rt5     p50     p90     
                              0       0       0.00    0.00    0.00    0.00    
```
StatelessWidgetのサイズを取得する

たまにウィジェットのサイズが必要になることがあります。
今回はStatelessWidgetが最初にレイアウトされた時のサイズを知りたかったのですが、以下のように実現することができました。

```dart
import 'package:flutter/cupertino.dart';

class Hoge extends StatelessWidget {
  Key key;

  Hoge({Key key}) : super(key: key) {
    this.key = key;
  }

  void onAfterBuild(BuildContext context) {
    print(this.key);
    if (this.key is GlobalKey) {
      GlobalKey globalKey = this.key;
      final RenderBox renderBoxRed = globalKey.currentContext.findRenderObject();
      final size = renderBoxRed.size;
      print("SIZE of Widgt: $size");
    }
  }

  @override
  Widget build(BuildContext context) {
    WidgetsBinding.instance.addPostFrameCallback((_) => onAfterBuild(context));
    return SizedBox.fromSize(
      size: new Size(200, 300),
      child: Text("hogehoge"),
    );
  }
}

```

参考
https://www.didierboelens.com/2019/04/addpostframecallback/
Azure Synapse Analyticsのお役たちリンク集

# Azure Synapse Analyticsのお役たちリンク集

 

## マニュアル



Azure Synapse Analytics (旧称 Azure SQL Data Warehouse)

https://docs.microsoft.com/ja-jp/azure/sql-data-warehouse/

 

 

## 概要

 

チュートリアル:Azure SQL Data Warehouse へのてニューヨークのタクシー データの読み込み

https://docs.microsoft.com/ja-jp/azure/sql-data-warehouse/load-data-from-azure-blob-storage-using-polybase

 

 

Azure Synapse Analytics を使用して Data Warehouse を実装する

https://docs.microsoft.com/ja-jp/learn/paths/implement-sql-data-warehouse/

 

 

## アーキテクチャ

 

Azure Synapse Analytics (旧称 SQL DW) アーキテクチャ

https://docs.microsoft.com/ja-jp/azure/sql-data-warehouse/massively-parallel-processing-mpp-architecture

 

 

## 最新情報

 

Azureサービスの更新(をsynapseanalyticsでフィルタ)

https://azure.microsoft.com/ja-jp/updates/?product=synapse-analytics

 

 

 

## セミナー資料・記事

 

[DI03] DWH スペシャリストが語る! Azure SQL Data Warehouse チューニングの勘所

https://www.slideshare.net/decode2017/di03-dwh-azure-sql-data-warehouse

 

【ウェブ セミナー】AI 時代のクラウド データ ウェアハウス Azure SQL Data Warehouse [概要編]

https://www.slideshare.net/hidwatanabe/ai-azure-sql-data-warehouse

 

【ウェブ セミナー】AI 時代のクラウド データ ウェアハウス Azure SQL Data Warehouse [実践編]

https://www.slideshare.net/hidwatanabe/ai-azure-sql-data-warehouse-88337953

 

[de:code 2018] [DA20] Azure データ サービスを使ったアーキテクチャ設計 ～ 「Azure データ アーキテクチャ ガイド」を中心に ～

https://www.slideshare.net/satonaoki/20180523decode18da20adag

 

DBP-009_クラウドで実現するスケーラブルなデータ ウェアハウス Azure SQL Data Warehouse 解説

https://www.slideshare.net/decode2016/dbp009-azure-sql-data-warehouse

 

Azure Synapse Analytics Overview

https://www.slideshare.net/jamserra/azure-synapse-analytics-overview

 

SE の雑記 Synapse Analytics の特徴って何なんだろう？？

[https://blog.engineer-memo.com/2020/02/25/synapse-analytics-%e3%81%ae%e7%89%b9%e5%be%b4%e3%81%a3%e3%81%a6%e4%bd%95%e3%81%aa%e3%82%93%e3%81%a0%e3%82%8d%e3%81%86%ef%bc%9f%ef%bc%9f/](https://blog.engineer-memo.com/2020/02/25/synapse-analytics-の特徴って何なんだろう？？/)



ゼロから始めるクラウド型DWH「Azure SQL Data Warehouse」

https://news.mynavi.jp/series/sql_dwh
Dockerを使ってrailsのAPIモードの環境構築

### はじめに
今回は、Dockerを使ってRailsのAPIモードの環境構築をしていく記事です。
コマンド、設定などを詳細に書いていきます。

記事の最後までの所要時間は30分以内です。意外と簡単でした。

### APIモードとは
APIモードとはRails5から追加された機能で、APIのようなRailsアプリケーションを作れる機能だそうです。</br>
MVCのうち、モデルとコントローラーのみが作成されます。</br>
APIモードで作成されたアプリのURLにリクエストを送ると、json形式のデータがレスポンスとして返ってきます。

### 環境構築
では、環境構築をしていきます。

```zsh
$ mkdir sample_app
$ cd sample_app
$ docker pull ruby:2.5.1
$ docker run --rm -v "$PWD":/usr/src/sample_app -w /usr/src/sample_app ruby:2.5.1 bundle init
$ docker build -t developer_name/sample_app .
```

ここで、`Dockerfile`、`docker-compose.yml`、`Gemfile`、`Gemfile.lock`の4つのファイルが必要となるので、`sample_app`以下にそれぞれ作っていきます。

```zsh
$ touch 各ファイル
```

`Dockerfile`の`sample_app`はそれぞれのディレクトリ名に変更してください。

```:Dockerfile
# Debianがベースのrubyイメージを指定
FROM ruby:2.5.1

# 必要なものをインストール
RUN apt-get update -qq && apt-get -y install \
    build-essential \
    libpq-dev \
    nodejs \
    mysql-client

# rails用のディレクトリを作成
RUN mkdir /sample_app

# ローカルマシン(Mac)からコンテナの中にファイルをコピー
COPY Gemfile /API_sample
COPY Gemfile.lock /sample_app

# 作業ディレクトリを指定
WORKDIR /sample_app

# 上でコピーしたGemfileに従ってGemをインストール
RUN gem install bundler && bundle install
```

続いて、`docker-compose.yml`です。</br>
`MYSQL_ROOT_PASSWORD`は、後で作成する`database.yml`のパスワードに合わせます。

<!-- docker-compose.ymlの説明については[こちら]() -->

```yml:docker-compose.yml
version: '3'
services:
  web:
    build: .
    ports:
      - "3000:3000"
    depends_on:
      - db
    volumes:
      - .:/API_sample
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
  db:
    image: mysql:5.7
    volumes:
      - mysql_data:/var/lib/mysql/
    environment:
      MYSQL_ROOT_PASSWORD: password
    ports:
      - "3306:3306"
volumes:
  mysql_data:
```

### Railsアプリの作成

新規アプリ作成時に、後ろに`--api`をつけるとAPIモードでアプリが作成されます。

```zsh
$ docker-compose run web rails new . --force --database=mysql --api
$ docker-compose run --rm web rails generate scaffold User name:string
$ docker-compose run --rm web rails db:create
$ docker-compose run --rm web rails db:migrate
```
scaffoldでUserを作ったら、ファイルを見てみましょう。</br>
普通のrailsアプリで作られる`assets`や`view`が無いことが確認できると思います。

### ページを開く
それでは、アプリをlocalhostで開いてみましょう。
http://localhost:3000/users

真っ白なページに、`[]`とだけ表示されているはずです。</br>
これは、データが空であるということを表しています。

では、`curl`コマンドでデータのリクエストを送ってみます。
> curlはURLシンタックスを用いてファイルを送信または受信するコマンドラインツールである。(Wikipediaより)

下記の例を簡単に説明すると、指定したURLに対して、POSTメソッドを使用してターミナルからjsonファイルを送信しているということです。

```zsh
$ curl -X POST -H "Content-Type: application/json" -d '{"name": "hoge"}' http://localhost:3000/users
```

そして、http://localhost:3000/users に接続すると
`[{"id":1,"name":"hoge","created_at":"","updated_at":""}]`というデータが表示されると思います。(日付はカットしました)

これで完了です！意外とあっさりできますよね。
他にも、GET、PUT、DELETEも使えるので色々と試してみてください。

### 感想
APIモードと聞いて最初はよくわからないな、怖いなと思っていました。</br>
ですが、やってみると簡単ですし、今まで深く考えていなかったHTTPについて調べたり知ったりするきっかけになったので良かったです。

駆け出しエンジニアにとっても簡単なのでぜひやってみてはいかがでしょうか？
Cookie についてまとめてみる

## Overview

今更ですが、食べられないほうの Cookie についてまとめたいと思います。

## Summary

だらだらと書きすぎた感があるので最初にまとめを。

- Cookie は**ユーザー情報**が格納されている小さなテキストファイル :cookie: 
- HTTP は本来 **Stateless** なプロトコルだが、Cookie を使うことでユーザーの状態を保持した通信を実現する
- Cookie のやり取りは、サーバーは**「Set-Cookie」**ヘッダーフィールドを使い、ブラウザは**「Cookie」**ヘッダーフィールドを使う
- サーバーサイドで保持しているユーザー情報を **Session 情報**といい、ブラウザが送ってきた Cookie と照合する。
- アクセスしたページと異なるドメインから送られてきた Cookie を **Third Party Cookie** という。
- Cache は再度同じページにアクセスした時に、**ページのコンテンツを保存しておいて読み込み速度を上げる**仕組み

時間がある方は、最後までどうぞ。

## 食べられない Cookie とは？ :cookie:

Web の文脈で Cookie という場合、:cookie: HTTP Cookie :cookie: を指します。 
HTTP Cookie は何かというと、ユーザー(Web ブラウザ)が Web サーバにアクセスした時に、**Web サーバが発行しユーザー(Web ブラウザ)に渡されるファイル**のこと、またはそのような Web ブラウザの機能のことです。

Cookie の形式は**「名前(Key)」と「値（Value）」のペア**になっており、
詳細は「RFC 6265：HTTP State Management Mechanism」で定義されています。
https://tools.ietf.org/html/rfc6265

## Cookie の何が美味しいのか？ :cookie:

では、HTTP Cookie の**旨味**は何なのでしょうか？

例えば、ショッピングサイトを利用していてカートに商品を色々入れていたけど、離席する必要があったのでログアウトした。その後しばらくして、**ショッピングサイトを再度開くとカートの商品情報がログアウトする前の状態に保たれている**という経験があると思います。

本来、HTTP は状態を保持できない(**Stateless**)プロトコルなはずなのになぜなのでしょうか？

これは Cookie の中身には**ユーザーを識別できるようにセッションID**が格納されており、次回のアクセスのリクエストにそのファイルを含めることでどのユーザーからのリクエストなのか、ということが判定できるからです。

つまり、**Cookie が会員証のような役割を果たすことで、擬似的にユーザの状態を保持することができます。**

この機能を利用して、Cookie は**ログインしているかどうかの判定やショッピングサービスのカート機能**の実現に利用されているのです。

## クライアント・サーバー間の Cookie のやり取りを追ってみる :cookie:

1. Web ブラウザ(クライアント)が Web サーバーに HTTP リクエストを投げた場合、サーバーはレスポンスメッセージと共に、Cookie の情報を**「Set-Cookie」というレスポンスヘッダーフィールド**を使い、ブラウザに返却します。

2. レスポンスに「Set-Cookie」ヘッダーがあったということは、**サーバーはリクエストに Cookie を要求している**と判定し、Cookie の情報を**メモリ(Session Cookie)**もしくは**ディスク(Parmanent Cookie)**に保存します。

3. それからは、リクエストを投げる際に、**Cookie ヘッダーフィールド**に Cookie 情報をセットしてやり取りするようになります。Cookie ヘッダーフィールドは Cookie の**名前と値のセット**になっており、複数ある場合は**「;」**で区切って並べます。

## Cookie の中身の詳細 :cookie: 

Cookie の中身は以下のようになっています。

- [name]=[value] : Cookieの name と value は「=」で結合して、Set-Cookie／Cookie ヘッダフィールドの先頭にセットする。
- Max-age/Expires : Cookieの有効期限。
- Domain : Cookieが有効なドメイン範囲。
- Path : Cookieが有効なパス範囲。
- Secure : HTTPS の時のみ有効で HTTPでの通信時には送信されない。
- HttpOnly : HTTP プロトコルの Cookie ヘッダフィールドでのみ参照可能になる。document.cookie などから参照できなくなるので、セキュリティのために使われる。

## Third Party Cookie :cookie:

ブラウザの設定によっては、**アクセスした Web ページと異なるドメイン名からの Cookie は保存されないようになっている**場合があります。たとえば a.com にある Web ページから b.com にある JavaScript を読み込んだ場合などです。
このような、**アクセスしたページと異なるドメイン名から送信されてきた Cookie** のことを「**Third Party Cookie**」と呼びます（アクセスしたページのドメインからの Cookie は「ファーストパーティクッキー」です。）

## Session とは？

Session は日本語訳すると会議や授業という意味ですが、抽象化すると**「一定時間の活動」**という文脈になります。
Web においてはこの意味で使われており、ログインした後に色々な活動を行うことを Session と言っています。
ブラウザに保存しておくユーザー情報は Cookie ですが、当たり前ですが**サーバー側も払い出した Cookie がどのユーザーと紐づいているかということをわかるようにしておかなければなりません。**
このように**サーバー側で管理しているユーザー情報を Session 情報と言います。**

## Cache と何が違うの？

最後に Cache と Cookie の違いについてです。
Cookie がユーザーの情報を保存・管理しているのに対し、Cache は一度アクセスした Web ページの情報を一時的に保存しておいて、**次回アクセスした時にページの読み込み速度を向上させる機能**のことを言います。

## おまけ

### なんで Cookie って名前なの？ :cookie: 

一説によると、フォーチュンクッキーから来てるらしいです。(クッキーの中に未来のことが書かれた紙切れが入ってるやつですね。どう●つの森アプリ版のガチャのやつ。）
Cookie もユーザー情報をテキストで保存してるものですし、なるほどなあという感じですね。

### Cookie を焼く？ :cookie: 

とあるプレゼンで Cookie に情報を格納することを、Cookie を焼くと言っていて良いなあと思いました。
Visual Studio Codeでのgit操作入門

# summary
1億煎じくらいの記事。リポジトリはすでにある前提。

## 手順(cloneまで)
1. リポジトリをcloneする
コマンドパレットを開き、`git clone`と入力する
<img width="805" alt="スクリーンショット 2020-04-05 22.50.10.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/423952/072fb559-4c7a-4c83-b44e-76481ea4eabc.png">

2. cloneするURLを求められるので、入力する
<img width="763" alt="スクリーンショット 2020-04-05 22.50.30.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/423952/1d405da8-2a3b-7502-60cd-6228f7c275eb.png">

3. clone先を聞かれるので、適当に決める
<img width="508" alt="スクリーンショット 2020-04-05 22.50.50.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/423952/8900fe2f-66a8-564f-a69d-742f0f3e7fb9.png">

4. workspaceに追加しておく
<img width="502" alt="スクリーンショット 2020-04-05 22.51.12.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/423952/3bc82876-b661-21cd-5638-42d24f087683.png">

## 手順(なにかの修正)
1. 左下のブランチのマークをクリックする
<img width="648" alt="スクリーンショット 2020-04-05 22.53.24.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/423952/d2dfae24-58eb-3eb7-7b82-3e089511eaaa.png">

2. Creare new branchをクリックしてブランチを作ると、左下のブランチマークがmaster -> 新しいブランチ名に変わる
<img width="120" alt="スクリーンショット 2020-04-05 22.53.47.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/423952/aaad305e-4f65-0994-3810-9bacd6c44d26.png">

3. 実際にファイルをいじる
4. エディター横のgitのマークを押すと`changes`に修正したファイルが書いてある、この状態で`+`を押すとステージングされる
<img width="297" alt="スクリーンショット 2020-04-05 22.54.47.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/423952/1ee837eb-a6c9-0a07-1530-620af53bda05.png">

5. コミットメッセージを入れると`changes`がなくなる(変更が取り込まれる)
<img width="307" alt="スクリーンショット 2020-04-05 22.55.40.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/423952/4ebe5c19-f1a8-ab84-164a-3d26d08cc76c.png">

6. この状態だと変更がリモートに反映されていないため、`・・・`ボタンからプッシュする
<img width="283" alt="スクリーンショット 2020-04-05 22.55.59.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/423952/c8ebb0bc-1b91-7396-9bcf-fabbcaf10406.png">

7. リモートにブランチがない場合、新規に作成するか聞いてくるので、`OK`しておく
<img width="439" alt="スクリーンショット 2020-04-05 22.56.15.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/423952/53e9c526-f71a-2d85-de8b-d9cd9a1067dd.png">

8. リモートにブランチが作成されたことがわかるので、プルリク作る
<img width="2028" alt="スクリーンショット 2020-04-05 22.56.46.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/423952/75be70c0-f0aa-72ae-312f-5edb5789aca3.png">

9. プルリクがマージされたら、ローカル側のブランチはmasterに変えて、pullしておく(左下の更新ボタン押す)
<img width="27" alt="スクリーンショット 2020-04-05 22.57.46.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/423952/ce63befe-248b-24d6-7b77-b6ea753f1f23.png">
GNS3 VM上でISO routerが作成できない。

# 環境
Windows 10
VirtualBox 6.1.4
GNS3 2.2.6


# 事象
GNS3 GUIの右下にある`Servers Summary`で、ローカルコンピュータ(Windows 10)はランプアイコン？が緑に点灯するが、GNS3 VMはグレーのまま。

この状態で、GNS3 GUIからGNS3 VM上にISO routerを作成しようとすると、以下のメッセージが出力される。

```
Error while getting the VMs: Cannot connect to compute 'GNS3 VM (GNS3 VM)' with request GET /dynamips/images
```

# 原因
上記のメッセージの通り、GNS3 VMに接続できないことが原因だが、そもそもどっからどう接続しようとしているのかがわからず、ハマった。

# 対処方法
どうやら、VirtualBoxの場合、`VirtualBox Host-Only Network`経由でGNS3 VMに繋ごうとする模様。ここが通れるよう、ローカルコンピュータ(Windows 10)の`VirtualBox Host-Only Network`アダプタと、GNS3 VMの`eth0`に設定をしてやれば良い。

# 備考
おそらく、VirtualBoxのDHCPを有効にして、両者のIPを動的に設定していれば、陥らない事象と思われるが、私の場合は、`VirtualBox Host-Only Network`アダプタに静的にIPアドレスを設定していたので、同じネットワークのIPアドレスをGNS3 VM上で手動設定して、事象が復旧した。
【async/await】JavaScriptで非同期処理プログラムを作成する【標準入力】

## はじめに
「解きながら学ぶJava」（その名の通り「〜〜するプログラムを作成せよ。」といった問題を解きながらJavaを学んでいく書籍）に書かれている問題を**"JavaScriptで書く"**ということをやっている中で見事に詰まりました。

JavaScriptは、JavaやRubyのようにクラスを用いて綺麗に定義、みたいなことがしづらいですし、標準入力も若干面倒なので結構苦戦しました
（今回はreadlineモジュールを使用）

ちなみに私は、上記の本を持っておきながら、Javaを触ったことはありません。笑

## どんな問題？
**キーボードから次々と整数値を読み込んで、合計と平均を求めるプログラムを作成せよ。加算する整数の個数は最初に読み込むこと。**

という問題です。


## 実際に書いたプログラム

```4_26.js
const readline = require('readline');
const log = console.log;
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

let num_int;
let input_int;
let sum = 0;

async function readInt() {
    const rl = readline.createInterface({input: process.stdin});
    const ait = rl[Symbol.asyncIterator]();
    log('整数：');
    input_int = parseInt((await ait.next()).value);
};

function checkInt() {
    rl.question('何個加算しますか： ', async function (answer) {
        num_int = parseInt(answer);
        for(let i = 0; i < num_int; i++) {
            await readInt();
            sum += input_int;
        }
        rl.close();
        log(`合計は${sum}です。`);
        log(`平均は${sum / num_int}です。`);
    });
};

log('整数を加算します。');
checkInt();
```

コードの中身は深くは追いませんが、ざっくりポイントだけ記載します。

- 大元の処理を行うcheckInt関数に、「何個加算しますか？」の問に対して入力された数の回数分だけfor文で処理をループさせている

- checkInt関数とは別に、readInt関数を定義し、加算対象の数を入力する処理を書いている

- 標準入力は、readlineモジュールを使用し、繰り返し入力が必要になる部分にasync/awaitを使用

async/awaitを使用することで非同期処理が可能となり、コンソールへの繰り返し入力が可能となります。

実行するとこんな感じになります（↓）

```
整数を加算します。
何個加算しますか： 3
整数：
48
整数：
67
整数：
89
合計は204です。
平均は68です。
```

上記のコードはあくまで一例ですので、ご参考までに。
[Rails]画像選択時にプレビュー表示

#本記事投稿のいきさつ
アプリの中で画像投稿機能を実装したとき、ただフォームを作成するだけでは画像を選択しても表示がされず何を選んだのか確認をすることが出来ません。
そこで、画像を選択した時点でプレビュー表示することができればいいなと思い、実際に機プレビュー機能を作成したため、記録として残したいと思います。
今回はユーザーのプロフィール画像の編集画面を想定します。
そのため、既に登録されている画像は最初からプレビューさせた状態で表示をさせます。

## 前提

- 変種画面はprofile_edit.html.haml
- 画像の保存先は Usersテーブル：　imageカラム
- file_field本体は隠し、画像が選択されていない時はiconを、
選択されている時はプレビュー画像をクリックすることで画像選択できるようにします。
- jQueryを使用しますが、必要なGemのインストール等は既に出来ているとします。
- ユーザー機能はDeviseを使用しています。
- cssは今回の内容に含まれません。

##フォーム作成
まず、今回はhamlでビューのフォームを作成します。

````profile_edit.html.haml
= form_for current_user, url: {action: 'profile_update'} do |f|

    .form-group 
      .image_form
        .image_form__contents
          -# ラベルでfile_fieldとicon、プレビュー画像を紐付けます
          = f.label :image, class: 'image_label' do
            .prev-contents
              -# 既に登録されている画像があれば表示をさせます
              - if current_user.image.present?
                .prev-content
                  = image_tag current_user.image.url, alt: "preview", class: "prev-image"
              -# 既に登録されている画像がなければiconを表示させます
              - else
                = icon('fas', 'image', class: 'photo-icon')
            -# file_fieldはdisplay: none;で隠します
            = f.file_field :image, class: 'image_form__contents__field hidden_file'
````
## FileReader
今回はFileReaderを使用します。
FileReaderとはHTML5世代の機能でユーザーのPC内にあるファイルやバッファ上の生データに対して、読み取りアクセスを行えるオブジェクトです。


## jsファイルの編集
今回はimage_preview.jsを作成して、そこに記述していきます。

````image_preview.js

$(document).on('turbolinks:load', function () {
  $(function () {
    // 画像をプレビュー表示させる.prev-contentを作成
    function buildHTML(image) {
      var html =
        `
        <div class="prev-content">
          <img src="${image}", alt="preview" class="prev-image">
        </div>
        `
      return html;
    }

    // 画像が選択された時に発火します
    $(document).on('change', '.hidden_file', function () {
      // .file_filedからデータを取得して変数fileに代入します
      var file = this.files[0];
      // FileReaderオブジェクトを作成します
      var reader = new FileReader();
      // DataURIScheme文字列を取得します
      reader.readAsDataURL(file);
      // 読み込みが完了したら処理が実行されます
      reader.onload = function () {
        // 読み込んだファイルの内容を取得して変数imageに代入します
        var image = this.result;
        // プレビュー画像がなければ処理を実行します
        if ($('.prev-content').length == 0) {
          // 読み込んだ画像ファイルをbuildHTMLに渡します
          var html = buildHTML(image)
          // 作成した.prev-contentをiconの代わりに表示させます
          $('.prev-contents').prepend(html);
          // 画像が表示されるのでiconを隠します
          $('.photo-icon').hide();
        } else {
          // もし既に画像がプレビューされていれば画像データのみを入れ替えます
          $('.prev-content .prev-image').attr({ src: image });
        }
      }
    });
  });
});
````
上記で出てくるDataURISchemeとは、
簡単にいうと、画像やらJavascriptやらそういったHTMLのコンテンツを文字列として定義出来るものです。
以上で、画像が表示されます。

# 終わり
最後まで見ていただきありがとうございました。
【Java】StreamAPIでズンドコキヨシ

# はじめに

少し前に流行った「ズンドコキヨシ」を久しぶりに[こちらの記事](https://qiita.com/Okocchi/items/6477bdc63eee4787cd58)で見つけたので、私もJavaを使ってズンドコキヨシを作ってみることにしました。
ついでにfor文を封印して、StreamAPIの復習をしてみました。

# 作成したコード

* 「ズン」もしくは「ドコ」のいずれかを格納した長さ5のListを作ります。
 * `Stream.generate()`を使う場合、Streamが無限に続かないように`limit`を付ける必要があります。
* Listを半角スペースでJoinした結果が「ズン ズン ズン ズン ドコ」になるまで、`do～while`のループを繰り返します。
 * 必ず1回はループに入るので、最初に終了条件を判定する`while`ではなく、最後に終了条件を判定する`do～while`を使いました。
* 最後に「キヨシ！！」を付け足して標準出力します。

```java:ZundokoStream.java
package zundoko;

import java.util.List;
import java.util.Random;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class ZundokoStream {

	public static void main(String[] args) {

        Random rnd = new Random();
        String[] zunDoko = { "ズン", "ドコ" };
        String songLyrics = "";

        do {
	        List<String> phrases =
	        		Stream.generate(() -> zunDoko[rnd.nextInt(2)])
	    			.limit(5)
	    			.collect(Collectors.toList());
	        
	        songLyrics = String.join(" ", phrases);
        } while (!songLyrics.equals("ズン ズン ズン ズン ドコ"));

        System.out.print(songLyrics);
        System.out.println(" キヨシ！！");
	}
}
```

```text:実行結果
ズン ズン ズン ズン ドコ キヨシ！！
```

# 参考URL

* [インタフェースStream&lt;T&gt;](https://docs.oracle.com/javase/jp/8/docs/api/java/util/stream/Stream.html)
* [Java Stream - Streamインスタンスの生成](http://www.ne.jp/asahi/hishidama/home/tech/java/stream.html#h_Stream)
* [ずんどこプログラム](https://qiita.com/Okocchi/items/6477bdc63eee4787cd58)
vueのフォームでenumを使う

今作っているアプリでは登録フォームにVueを使っています。
element-uiを使っているのですが、el-selectにenumで定義したものをどうやって持ってくるのかがわからず、試行錯誤を重ねた末なんとかできました！

```
class Api::V1::InitialisationsController < Api::V1::ApplicationController

  def show
    *省略
    @results = Trade.results.keys
                     *enumで定義したのを呼び出すときは複数形で書くらしい
    respond_to do |format|
      format.json {render :json =>
        {
          *省略
          results:          @results,
        }
      }
    end
  end

end
```
こういう感じでAPIコントローラーに定義し、

```
import Vue           from 'vue/dist/vue.esm.js';
import Notifications from 'vue-notification';
import ElementUI     from 'element-ui';
import               'element-ui/lib/theme-chalk/index.css';
import locale        from 'element-ui/lib/locale/lang/ja';
import superagent    from 'superagent';

Vue.use(ElementUI, { locale })
Vue.use(Notifications)
//see https://www.npmjs.com/package/vue-notification

const token = document.getElementsByName('csrf-token')[0].getAttribute('content')

window.onload = function(){
  var trade = new Vue({
    el: "#trade",
    data: {
      results: []
    },
    created: function() {
      superagent
      .get(`/api/v1/initialisations.json`)
      .set('X-CSRF-Token', token)
      .set('Accept', 'application/json')
      .end(function(error, data){
        trade.$data.results = data.body.results
      })
    }
  })
}
```

こうして

```
<el-select placeholder="result" v-model="trade.result">
  <el-option
   v-for="result in results"
   :key="result"
   :label="result"
   :value="result"
  >
</el-select>
```
こういう感じで書くとenumで定義したのが使えます！
登録した時もちゃんと意図したものが保存されました！

よかったよかった。
enumとboolean型でつまった話

どうも、最近お勉強がてら新たに個人開発を始めたチャンクノです。
開発環境は
Rails6
nginx
puma
です。
他は忘れた笑
        

今回作っているのはFXなどのトレード記録を残すためのアプリケーションです。
このアプリではトレードの結果をboolean型で保存するようにし、

```
enum result: {"負": 0, "勝": 1}
```
としました。

なんやかんやで無事レコードに保存するところまでは行けたんですがこの先が問題でした、、、。

```
 <%= trade.result %>
```
こう書いてもviewに何も出てこず

```
enum results: {"勝": 0, "負": 1}
```
こう書いたらviewにtrueかfalseかだけが表示されて、enumで定義した["勝", "負"]は表示されなかったです。

渋々integer型に変えたらうまくいきました。
boolean型とenumは相性よくないんですかね？
謎は深まるばかりや、、、。
boolean型でもいけるでって方いたら教えてほしす🙏

これからもなんかあったら書いていこうかなと思います。
備忘録にもなるし。
PowershellでWindows標準VPN(RRAS)を構築する

#ぶっちゃけおすすめできない
Legacy Mode（？）になり、CUIで構築したものをGUIで確認できない。画像は拾い。
<img width="600" alt="052beb72-babf-28a1-d9a5-d349b3ebd048.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354194/052beb72-babf-28a1-d9a5-d349b3ebd048.png">
ヘルスチェックコマンド`get-remoteaccesshealth`で状態を確認できるが、[所々NGで直す方法が無い。](https://community.spiceworks.com/topic/468313-get-remoteaccesshealth-services-error)
VPNトンネルそのものは問題なく構築できるが、薄気味悪い。
#それでもやりたいなら
```powershell

Netsh ras set user ユーザー名 permit 
Install-WindowsFeature -Name RemoteAccess -IncludeAllSubFeature -IncludeManagementTools
Uninstall-WindowsFeature -Name Web-Application-Proxy
Install-RemoteAccess -VpnType RoutingOnly
Install-RemoteAccess -VpnType VPN -IPAddressRange 静的アドレスプール始点 ,終点
Restart-Service RemoteAccess
Set-VpnAuthProtocol -TunnelAuthProtocolsAdvertised PreSharedKey -SharedSecret パスワード
Restart-Service RemoteAccess
```
指定したユーザー名のリモート許可
↓
役割と機能で諸々突っ込み使わない機能アンインスコ
↓
諸々設定
↓
諸々再起動

証明書使う方法は辛そうなので事前共有キーにしました。

#いろいろ
せめてコマンドレット用意するならGUIで確認できるようにして欲しい。
仕事で調べたけど使わなくなったのでメモがわりに供養。
構築後もクライアント側のレジストリを操作(AssumeUDPEncapsulationContextOnSendRule)しなきゃならなかったり、すごいかったるい。
【Flutter】最初のアプリを作るまで

# 概要
Flutterのインストール、最初のアプリを作って立ち上げるまでを備忘録的に書き残しておきます。

# 公式サイト
https://flutter.dev/

# Flutterのインストール
インストール方法は2通りあります。

## zipからのインストール
macの方はこちらから最新のzipをインストールします。
https://flutter.dev/docs/get-started/install/macos

## ソースからのインストール

```
$ git clone https://github.com/flutter/flutter.git -b stable
```

この様な形でソースコードをcloneしてきてインストールすることもできます。

## 環境パスの設定

```
$ export PATH="$PATH:`pwd`/flutter/bin"
```

を実行して、環境パスの設定をします。
僕はfishを使っているのでこちらでやりました。
[fish shellのPATH設定](https://qiita.com/ledsun/items/8ca1a450b21c8ebc9670)

# flutter doctorの実行

flutterでは実行環境が整っているかどうかなどをチェックしてくれるdoctorと言うサブコマンドが実装されています。
こちらを実行するとAndroid toolchainやAndroid studioがインストールされていないことが示唆されますが、今回は無視します。

# iPhone Simulatorの起動

```
$ open -a Simulator
```

これでシミュレータが起動します。

# flutterアプリの作成

```
flutter create [app_name]
```

これで app_name と言うアプリが生成されます。1分くらいかかります。

# flutterアプリの起動

```
flutter run
```

これでちょっと待てば先ほど立ち上げたシミュレータ上にてサンプルアプリが立ち上がるはずです。

また、 `ios/Runner.xcworkspace` を開き普通に実行しても起動することができます。

# 入門書
僕は入門書としてこちらを使っています。

[Flutter入門](https://amzn.to/2JDkqvR)

基本的なUIの組み方、基本的なUIの構成要素(ラベル、ボタン、スイッチやスライダー...)、など基本的なことは
載っているのでおすすめです！

誰かのお役に立てば。
VMwareに関する単語まとめ

VMware関連の用語についてまとめました。
間違いなどありましたら教えていただけると幸いです。

・VDI Virtual Desktop Infrastructure
仮想デスクトップ基盤のこと。

・Horizon Client
ユーザーがVDIに接続するとき使うソフトウェア
このとき、VDI接続先が複数ある場合、接続したい先の
VDIがあるプール…所属先を選択する

※ちなみに、ユーザーがVDIに接続するときのプロトコルは
PCoIPというVMware独自の画面転送プロトコル。
RDPではない。

・View Manager Connection Server
Horizon ClientからVDIに接続するとき、認証して指示出す役割を持つ。VDIとユーザーを紐付ける。
コネクションブローカーという機能を果たしている。

簡単に言うと、AさんがVDIを使いたいな、と言って
Horizon ClientからVDIに接続する際にパスワードなどを入れると、Connection Serverに繋がり、
「仮想PC1の所有者、Aさんですね、
お待ちください、すぐ仮想PC1提供しますよ」と言い、
裏で仮想PC1の所有者はAか、Active Directoryと認証してあっていればVDIを提供するのがConnection Serverの役割。

ここで出てきた、Connection serverがユーザー認証するときに用いる確認先が、Windows Serverでお馴染みの認証システム、Active directory。


以下vSphere…VMのサーバー仮想化パッケージ製品。

・vSphere ESXi
サーバー上で複数のVDIを作れるようにする
ハイパーバイザー。仮想化の肝。

ESXiをインストールしたサーバーは、仮想ホストと呼ばれる。仮想ホストは、ESXiの機能によって、自分のリソース…CPU,メモリ、HDDをVMに切り分けて与えることができる。

ただし、HDDに関しては、仮想ホストの内蔵HDDを用いるより、共有ストレージから切り分けられることが多い。
ライブマイグレーションやHAクラスターを構成するのに都合がいいため。
また、仮想ホストが死んでも他の仮想ホスト上でVMを動かすには、仮想ホストに内蔵されたHDDだと、仮想ホストが死んだら動けなくなる。ので、共有ストレージにVMのデータはいれた方がよいということである。

※ちなみに共有ストレージに繋ぐ規格はiSCSI。接続プロトコルはTCP/IP


・vCenter Server
仮想マシンを管理するもの。仮想サーバーも管理する他、
クラスターの管理も行う。

・vCenter Serverを操作するもの
vSpere Client(ソフトウェア)
又は vSpere Web Client(Webページ…コンソール)
※サーバー見るのにクライアントって名前つけないでや！

まとめ
VMwareに関する製品は、名前が類似しているため
非常にややこしい。特にvCenter Serverを管理する画面、ソフトウェアにvSphere Clientと名付けたのは悪手でしかないと思う。サーバーなのかクライアントなのかごっちゃになるでしょう？
vCenter Server コンソールとかにしたまえ。
ローカル（Docker）でDynamoDBの環境構築

# 概要
* DynamoDBをローカル環境でテストするためのDockerを用いたDynamoDB localについて解説します
* AWS CLIの設定などはすでに済んでいる前提なので、もしまだの場合[ドキュメント](https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-chap-welcome.html)を見てください
* Dockerの基礎的な知識とDockerの設定などはすでに済んでいる前提なので、もしまだの場合[ドキュメント](http://docs.docker.jp/engine/installation/)を見てください
* 対象読者はサクッとDynamoDBをローカルで試してみたいと考えている方です
* この記事は[dynamodb-local](https://hub.docker.com/r/amazon/dynamodb-local)を参考にしています

# DynamoDB localとは
DynamoDB localは開発者が自身の開発環境で動作しているDynamoDBのバージョンを用いて開発・テストできるように作成されダウンロードが可能にされたもの

# DynamoDB localの利点
* DynamoDB localの新しいDockerイメージでは、全てのDynamoDB localの依存関係とそれに必要な構成要素を組み込んだDockerイメージを用いることで、DynamoDB localを素早く開始することができる
* DynamoDB localの新しいDockerイメージでは、コンテナ化されたビルドに継続的な統合テストの一部としてDynamoD localを含めることができる
* DynamoDB localを使うためにインターネット接続は不要で、DynamoDB localは既存のDynamoDB APIで呼び出すことが出来る
* DynamoDB localではプロビジョニングされたスループット、データストレージ、データ転送のコストがない

# DynamoDB localのイメージをプル
```
$ docker pull amazon/dynamodb-local
```

# 立ち上げ
## ただ立ち上げるだけ
```
$ docker run -p 8000:8000 amazon/dynamodb-local
```
* ローカルの8000番ポートで立ち上げるだけ
* `Ctr+C`で止めることが出来る
* 止めたあとは`$ docker rm #{CONTAINER_NAME}`で削除
    * `$ docker ps -a`で起動&停止中のコンテナを確認できる
* コンテナを消すとデータは消える
* `--rm`オプションをつけると、`Ctr+C`で停止すると削除する必要なく自動で消える
* `-d`オプションをつけるとバックグランドで実行してくれる
    * この場合、停止するために`$ docker stop #{CONTAINER_NAME}`を実行する必要がある

## ローカルにデータをマウント（ボリューム）して立ち上げ
```
$ docker run -p 8000:8000 -v #{LOCAL_DYRECTORY}:/home/dynamodblocal/data amazon/dynamodb-local -jar DynamoDBLocal.jar -dbPath /home/dynamodblocal/data
```
* #{LOCAL_DYRECTORY}にはdb情報を保存しておきたいディレクトリ名を指定
* `-d`オプションと`--rm`オプションについては上記同様適宜
* `--rm`オプションをつけなければ、停止（`docker stop`）させておきさえすれば、いつでも呼び出し（`docker start`）できる
* #{LOCAL_DYRECTORY}ディレクトリに`#{ACCESS_KEY}_#{REGION}.db`ファイルが作成されたことを確認する
* コンテナ名（#{CONTAINER_NAME}）を命名したいときは`--name`オプションを利用して`--name #{CONTAINER_NAME}`を追加
    * こうしておけばいちいち`$ docker ps -a`でコンテナ名を調べなくても`$ docker stop #{CONTAINER_NAME}`や`$ docker start #{CONTAINER_NAME}`を実行できる

# 確認
```
$ aws dynamodb list-tables --endpoint-url http://localhost:8000
```
* 上記コマンド（AWS CLI）で以下のようなテーブル情報が出てくれば接続ができている

```
{
    "TableNames": []
}
```
Pythonで毎日AtCoder #27

### はじめに
[前回](https://qiita.com/taxfree_python/items/99986c1a42be1fef9e9c)
昨日のABC161は+65でした。次に1200パフェくらいで茶色になれます。

### #27
[問題](https://atcoder.jp/contests/abc160/tasks/abc160_d)843diff
1TLE。
**考えたこと**
本番で解けなかった問題でした。グラフだと思っていたら、グラフ的な考えでなくても解けました。
$(i,j)(i,j\in Z,1\leq i < j\leq N)$な点を考えた時に、$i,j$の最短距離の個数を求める問題です。
これだけだと簡単ですが、この問題ではX-Y間に距離1で移動できる辺が用意されています。ですので、最短距離は$min(ショートカットを使わない、ショートカットを使う)$で考えます。ショートカットを使わない場合は、$j-i$になります。使う場合は$|y-j|+|x-i|+1$になります。第一項でj-Y間の距離、第二項でX-i間の距離を求めショートカットの距離1を足しています。

```python
n, x, y = map(int,input().split())

ans = [0]*(n-1)
for i in range(1,n+1):
    for j in range(i+1,n+1):
        ans[min(j-i,abs(x-i)+1+abs(y-j))-1] += 1
for k in range(n-1):
    print(ans[k])
```
最初はansにappendして最後にcountしていたのですが、countだとO(N)になって計算量が増えてTLEしてしまいます。そこで、ans[距離]に+1していって最後に出力しています。

### まとめ
グラフ感があったのに思ったよりも簡単だった。では、また。おやすみなさい
蟻本　部分和問題


@drkenさんの[AtCoder 版！蟻本 (初級編)](https://qiita.com/drken/items/e77685614f3c6bf86f44#2-1-%E3%81%99%E3%81%B9%E3%81%A6%E3%81%AE%E5%9F%BA%E6%9C%AC-%E5%85%A8%E6%8E%A2%E7%B4%A2)の部分和問題の類題を今日解こうとしました。

##ABC045_C


```c++
#include <bits/stdc++.h>
#define rep(i,n) for(int i = 0;i < (n);i++)
using namespace std;

int main(){
    string s;
    cin >> s;
    int64_t ans = 0;
    int64_t tmp;
    for (int bit = 0; bit < (1<<(s.size()-1)); ++bit) {
        tmp = s[0] - '0';
        for (int i = 0; i < s.size()-1; ++i) {
            if (bit&(1 << i)) {
                ans += tmp;
                tmp = 0;
            }
            tmp = tmp * 10 + (s[i + 1] - '0');
        }
        ans += tmp;
    }
    cout << ans << endl;
    return 0;
}
```

いろいろな人が「tmp = s[0] - '0';」と書いているんですけど「-’０’」ってなんで書いているのだろうか？

##ABC104_C
```c++

#include <bits/stdc++.h>
using namespace std;
long long INF = 1e18;
int main(){
    long long d, g;
    cin >> d >> g;
    vector<long long> p(d), c(d), score(d);
    for(int i = 0; i < d; i++) {
        cin >> p[i] >> c[i];
        score[i] = (i + 1) * 100;
    }
    long long ans = INF;
    for(int bit = 0; bit < (1 << d); bit++){
        long long G = g;
        long long res = 0;
        vector<int> flag(d, 1);
        for(int i = 0; i < d; i++){
            if(bit & (1 << i)) {
                G -= p[i]*score[i] + c[i];
                flag[i] = 0;
                res += p[i];
            }
        }
        int t = -1;
        for(int j = 0; j < d; j++){
            if(flag[j] == 1) t = j;
        }
        if(G > 0 && G <= p[t] * score[t] + c[t]){
            res += min(p[t], (G + score[t] - 1) / score[t]);
            ans = min(res, ans);
        }
        else if(G <= 0) ans = min(res, ans);
    }
    cout << ans << endl;
}

```

正直何をどうしているのかが全然理解が追いつかない、、、


##ARC029_A
```c++

#include<bits/stdc++.h>
#define rep(i,n) for(int i = 0; i < n; i++)
#define pb push_back
using namespace std;
typedef long long ll;

int main(){
  int n;
  cin>>n;
  vector<int> t(n);
  int sum = 0;
  rep(i,n){
    cin>>t[i];
    sum += t[i];
  }
  
  int ans = 500;
  rep(i,1<<n){
    int res = 0;
    rep(j,n){
      if(i>>j&1) res+= t[j];
    }
    ans = min(ans,max(res,sum-res));
  }
  cout << ans << endl;
}

```

一番理解しやすかった。

##ABC002_D
```c++

#include <bits/stdc++.h>
#define _GLIBCXX_DEBUG
using namespace std;

int	main(){
	vector<bitset<12>> relat(12);
	int n, m;
	cin >> n >> m;
	for (int i = 0; i < n; i++)
	{
		relat[i].set(i);
	}
	for (int i = 0; i < m; i++)
	{
		int a, b;
		cin >> a >> b;
		a--;
		b--;
		relat[a].set(b);
		relat[b].set(a);
	}
	int ans = 1;
	for (int tmp = 0; tmp < (1 << n); tmp++)
	{
		bitset<12> s(tmp); 
		bitset<12> sum; 
		int cnt = 0;

		for (int i = 0; i < n; i++)
		{
			if (s.test(i))
			{
				if (cnt == 0)
					sum = relat[i];
				else
					sum &= relat[i];
				cnt++;
			}
		}
		int sum_cnt = sum.count();
		if (cnt == sum_cnt)
			ans = max(ans, sum_cnt);
	}
	cout << ans << endl;
}


```


###感想
今回はじめてビット全探索というものを知りましたが、類題を触ってもなかなか理解できませんでした。基礎的なことを書いているサイトも多々あったので基礎的な部分は理解できましたが、問題を解くときにどのように書けばどんなふうに動いてくれるのかということはよくわかりませんでした。どうしたら理解できるのでしょうか？
Tokyoコロナ：オープンデータから指数関数curve_fitで単純な予測を行ってみる

コロナ感染が広まっております。
何も対策をしない（もしくは効果がなかった)場合、一般的には指数関数に沿って感染者数が広がっていきます。

東京コロナサイトでは感染実数が日々公表されておりますが予測は出ておりません。

指数関数curve_fitにより、将来予測値を算出しグラフ描画をここでは行います。
（もちろん、結果通りになることは望んでおらず対策により一日も早く収束に向かうことを切に願っております。土日は外出せずこもってます）

う〜ん、まずい。指数関数にかなりフィットしている直感。決定係数を別途計算する予定。
![TokyoCorona_20200403.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213343/170a2b48-7184-0ea8-066d-932206202af3.png)



データは公式サイトから。
https://stopcovid19.metro.tokyo.lg.jp/

通常は夜更新されているようですが、翌日にてグラフ描画の前提です。
月曜日数値は前日日曜日が検査機関お休みのところが多く実数よりかなり小さく出る傾向があります。周期要因として取り除くもありですがここでは一旦ありのままに描画することにします。

```python
import pandas as pd
from pathlib import Path
from datetime import datetime
```

```python
BASEDIR = Path('.')
FILE_PATH = 'https://stopcovid19.metro.tokyo.lg.jp/data/130001_tokyo_covid19_patients.csv'
df = pd.read_csv(str(FILE_PATH))
```

```python
# 予測期間
TO_PERIODS = 7

# グラフ描画のための諸々を生成します
target_columns = ['公表_年月日','患者_年代']
df_select = df[target_columns]
list_now = list(df_select.groupby('公表_年月日').count().index)
today = datetime.today()
today.strftime('%Y-%m-%d')

list_to = list(pd.date_range(today.strftime('%Y-%m-%d'), periods=TO_PERIODS, freq='D').strftime('%Y-%m-%d'))
list_total = list_now + list_to

```

curve_fitを用いて指数関数fit前提として演算

```python
from scipy.optimize import curve_fit
import numpy as np
import matplotlib.pyplot as plt

# 近似式の定義
def nonlinear_fit(x, a, b):
    return a * x ** b

# 一旦仮のx軸データを生成
array_now_x = np.linspace(0, len(list_now)-1, len(list_now))

# 指数関数を想定してcurve_fit実行
param, cov = curve_fit(nonlinear_fit, array_now_x, array_now_y,maxfev=1000)
```

指数関数fit処理により得たパラメータで先日付値を算出する

```python
list_total_y = []
for num, values in enumerate(list_total):
    list_total_y.append(nonlinear_fit(num, param[0], param[1]))

# 公表データから日毎の感染者数を算出
array_now_y = df_select.groupby('公表_年月日').count()['患者_年代'].values

```

グラフ描画します。

```python
import seaborn as sns
import matplotlib.pyplot as plt
sns.set()
sns.set_style('whitegrid')

fig, ax = plt.subplots(1, 1, figsize=(15, 10))
ax.bar(list_total, list_total_y, color='blue')
ax.bar(list_now, array_now_y, color='red',alpha=0.75)
plt.xticks(rotation=90)
plt.show()

```
今さら始めるzsh

# とある日
bashでログインすると見慣れぬメッセージが

```
The default interactive shell is now zsh.
To update your account to use zsh, please run `chsh -s /bin/zsh`.
For more details, please visit https://support.apple.com/kb/HT208050.
```
ググってみるとMacOS Catalinaからデフォルトシェルが bash→zsh へ変更になったみたいです。
個人的都合でMojavaのままだったので、Catalinaを適用したこのタイミングで警告？メッセージが表示されるようになってしまったと。
前からzshに興味はあったのでこの機会に移行してみることにしました。

# とりあえず
please run 'chsh -s /bin/zsh'
って言ってるので実行して一旦ターミナル再起動。

早速tab補完の挙動が変わってました。

- bash
tab押す → 候補出る → 選びたい候補の頭文字を打ってtab押す
![bash.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278872/60caadb2-2348-989f-aca6-6510fa8b8313.gif)

- zsh
tab押す → 候補出る → 更にtab押すと候補を入力欄に順々に補完
![zsh.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278872/ef49e892-54a7-c267-d970-70b23dfe140c.gif)

bashでのやり方に慣れてしまってるのでしばらくはモヤっとしそうですが、日付とかのprefix付いてる場合はこの方法の方が便利そうなので都度適切な方を選べるように慣れていきます。

# プロンプトを整える
- 移行前
<img width="727" alt="bash.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278872/3ebf2f8e-9037-c7a4-0787-7eeca0a16981.png">

- 移行後
<img width="752" alt="zsh.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278872/c5b5ff0b-6fee-04a1-9d2c-bb63f4cb8113.png">

移行前も対してリッチでは無いですが、流石に辛いのでいじってみます。
とりあえず以前の状態に近づけるために以下を満たしたい。

1. ディレクトリ名だけでなくパス情報も表示する
2. gitのブランチ名、およびステータス記号を表示
3. コマンド入力部は改行して1行下に出す
4. よしなに色付け

- プロンプト修正後
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278872/07b5a16d-7b3a-cb1b-e55d-ef7c883a3544.png)

この辺りは完全に好みが出ますね〜

# alias設定
git操作はコマンドで行うことが多いので、これを機会にalias設定してラクしようと思います。
コマンドのショートカットみたいなやつ。

```
[alias]
        st = status
        co = checkout
        br = branch
        cb = checkout -b
        df = diff
        ss = stash save -u
```

checkoutをよく打ち間違えていたので捗る捗る。

# dotfile
こういった、`.zshrc`とか`.zprofile`とか`.gitconfig`みたいな設定ファイルを、
総称してdotfileと呼びます。
セキュリティ的な問題も特にないので、githubに上げておいて端末移行時とかに取ってこれるようにしておくと便利！
こまめに更新も忘れず。

# 余談
プロンプトの背景画像は、旧姓磯谷有希こと、現倉持有希こと、YUKIです。
iTerm2というターミナルを使えば背景を好きな画像にできるのでおすすめです。
YUKI + Charaのライブがコロナで中止になってしまいましたが、今月も強く生きていこうと思います。
Concrete5 テーマ開発の基礎知識

自分用メモなので痒いところに手は届かないと思います。

需要があればそのうちもっと詳細を追記。

## 参考

- [世界一わかりやすい concrete5導入とサイト制作の教科書：書籍案内｜技術評論社](https://gihyo.jp/book/2018/978-4-7741-9651-0)

## テーマ作成の準備

`application/themes` の直下に以下のような構成のテーマディレクトリを作成する。

    application/themes
    └── my_theme
        ├── default.php
        ├── page_theme.php
        └── thumbnail.png

- default.php: ページテンプレートが選択されていない時に使用されるテンプレート
- page_theme.php: テーマの設定ファイル
- thumbnail.png: テーマのサムネイル

### page_theme.php

`$pThemeGridFrameworkHandle` メンバー変数 (protected) でグリッドシステムを指定できる。

以下の4つがコアに含まれている。

- bootstrap3
- bootstrap2
- foundation
- ninesixty

NOTE: 上記以外を追加するにはどうすれば

2020/04/07 追記

`concrete/src/Page/Theme/GridFramework/Type` 以下のファイルを参考に `application/src/Page/Theme/GridFramework/Type` に独自のグリッドタイプを追加すればできそう ( 未検証 )

## アセットのパス

以下のコードでテーマへのパス ( http から始まる文字列 ) を取得できる。

```php
$view->getThemePath();
```

## html要素のlang属性

```html
<html lang="<?= Localization::activeLanguage(); ?>">
```

## Concrete5が出力するheadタグとかscriptタグとかの内容

`Loader::element` は非推奨になりました。

```php
// headタグの中で
View::element('header_required');

// bodyの閉じタグの前らへんで
View::element('footer_required');
```

## ラッパークラス

HTMLのラッパーのclass属性に以下の返り値を指定

```php
$c->getPageWrapperClass();
```

NOTE: 最上位のラッパーがbody要素の場合body要素に上記を指定しても正しく表示されるか？

## HTMLの共通化

テーマディレクトリに `elements` ディレクトリを作成し、その中に部品を作成

default.phpなどテンプレートから読み込む:

```php
$this->inc('elements/header.php');
```

NOTE: `$view` と `$this` で何か違う?

## エリアの作成

エリアの名前は自由に設定できるけど、他のテーマとあわせておくとテーマを変更後に再設定する手間が省けるらしい。

NOTE: テーマ間の互換性はコアで担保していただきたい,  *気が向いたら* PRを出してみよう!

### グローバルエリア

```php
$a = new GlobalArea('Header Site Title');
$a->display();
```

### エリア

```php
$a = new Area('Main');
$a->enableGridContainer();
$a->display();
```

## 管理画面のエディタのカスタマイズ

`page_theme.php` に `public function getThemeEditorClasses` をはやして配列を返すとボタンなどのクラスのプリセットを定義できるっぽい

## コアのブロックの出力をカスタマイズしたい

`application/blocks/{block_name}/templates` にファイルを作成する。

ベースはコアからコピペしてくる。

## サムネイルの表示

```php
$src = $thumbnail->getThumbnailURL('name');
HtmlObject\Image::create($src);
```

NOTE: `$thumbnail` は必ず存在する変数なのか、コレクションのアトリビュートとかに応じて動的に定義されるのか, てかテンプレートの中で使える変数と関数って何?

## おまじない

Concrete5経由で正しくアクセスされているかチェックを行うおまじない。

書かなくても実行はされるが、おそらくセキュリティのために書く方がベター。

すべてのテンプレートに記載した方が良いらしい。

```php
defined('C5_EXECUTE') or die('Access Denied.');
```
Mysqlよく使うコマンド

##Mysqlのよく使うコマンドについてまとめてみた。

ログイン

```shell

mysql> mysql -uroot;
```

ログアウト

```shell
mysql>exit;
```

データベース作成

```shell
mysql>CREATE DATABASE データベース名;
```

データベース確認　

```shell
mysql>show databases;
```

データベース指定

```shell
mysql>use データベース名;
```

データベース削除

```shell
mysql>drop database データベース名;
```

テーブル作成

```shell
mysql>create table テーブル名（カラム）；
```

テーブル確認

```shell
mysql>show tables;
```

テーブルの構造確認　

```shell
mysql>DESC テーブル名;
```
テーブル削除

```shell
mysql>drop table テーブル名;
```

データ確認

```shell
mysql>select * from デーブル名;
```

テーブル作成、更新、削除など、まだまだたくさんありますが、とりあえず良く使うやつです。
自分自身もまだまだ使いこなせていませんが、基本を覚えていきたいです。
sakuraエディタマクロ設定について

#サクラのマクロ

##サクラエディタのマクロについて
サクラエディタでは、下記のファイルをマクロとして実行することができる。
https://sakura-editor.github.io/help/HLP000204.html

| 拡張子 | 種類 |
|--------------------|--------|
| mac | キーマクロ |
| ppa | PPAマクロ |
| js | WSH:Jscriptマクロ |
| vbs | WSH:VBScriptマクロ |
| その他 | WSH:他にWSHが認識できるものであれば使える |

##利用方法
「Shift + Ctrl + M」で記録開始-終了することができ、「RecKey.mac」というファイル名で登録される。
このファイル自体をサクラエディタで開いて直接編集することも可能で、内容をコピペすれば、大体のマクロは作成可能。
また「Ctrl + M」でマクロを任意の名前で保存することができる。
一度保存したマクロは、「Ctrl + L」で読み込むことができる。

記録を終了した後、またはマクロを読み込んだ後は「Ctrl + Shift + L」で実行可能。

| キーマクロ | ショートキー |
|--------|--------|
| 記録開始・終了 | Shift + Ctrl + M |
| 保存 | Ctrl + M |
| 読込み | Ctrl + L |
| 実行 | Ctrl + Shift + L |

また、ツールバー「ツール」からも操作可能
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559813/ff52fda1-6b92-0512-794c-ff111ccf59bd.png)


##設定方法
保存したマクロを「外部マクロ」に登録すれば、右クリック、ツールバー、ショートカットキーを割り当てて実行可能。

###外部マクロを登録
「Ctrl + 6」を押して共通設定を開き、下図のように設定する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559813/a2d9c014-80cc-2f8b-e06e-8afa30126498.png)
（個人的にはマクロを実行するたびにファイルを読み直すにチェックがおすすめ）

###右クリックから利用できるようにする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559813/c52cbd5c-eb35-6da5-def3-7e77a94cc88a.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559813/ec6cd362-674f-2883-d72d-f770fe8e361a.png)

###ツールバーから利用できるようにする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559813/6a7248ed-b66e-5981-74d2-07922f48d680.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559813/378a5253-283c-ecd9-5911-5062c0386590.png)

###ショートカットキーを割り当てて利用できるようにする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559813/e61a4cb9-107b-daae-f71c-3e94af576ecc.png)


###マクロの内容は下記
https://qiita.com/t_ookubo/items/758c8297c8aced95cf95

###リファレンス
ヘルプページ
https://sakura-editor.github.io/help/HLP000204.html
https://sakura-editor.github.io/help/HLP000267.html
https://sakura-editor.github.io/help/HLP000268.html

マクロ掲示板
https://ja.osdn.net/projects/sakura-editor/forums/34094/
1.4.2 MATLABプログラムの処理速度の向上

# 目次へのリンク


[MATLABによる画像処理・コンピュータービジョン入門目次](https://qiita.com/tohruk/items/e5f7939b622bcf2e3c4c)


# 概要


MATLABプログラムを高速する2つのTipsを紹介します。



   -  配列の事前割当：必要なサイズの配列を事前に確保し、メモリ再配置による性能低下を防ぎます。 
   -  ベクトル化：ループ処理を行列ベクトル操作に書き換えることで高速に実行できます。 



対応ファイル：[I1_04_2_Speed_Up.m](https://github.com/mathworks/MATLAB-IPCV-Eval-Kit-JP/blob/master/demo_files/I1_04_2_Speed_Up.m)


# 配列の事前割り当てなし（低速）


ループの中で変数xの要素の数がだんだん大きくなります。配列サイズが変更される際に、メモリの再配置など起き、実行速度を低下させます。


```matlab:code
clear
tic
for n = 1:1e7
  x(n) = n;
end
toc
```
```text:output
経過時間は 1.263031 秒です。
```
# 配列の事前割り当て（高速）


事前に配列を割り当てておくことでメモリ管理のオーバーヘッドを減らし、高速化が期待できます。


```matlab:code
clear
x = zeros(1e7,1); % 事前に配列割当
tic
for n = 1:1e7
  x(n) = n;
end
toc
```
```text:output
経過時間は 0.068325 秒です。
```
# 要素をスキャンする:横方向 （低速）


4000x4000の行列の、要素が0.5以上の場所を`true`にします。




行列および配列はメモリ上に連続して配置されています。




MATLABの配列データは列優先の順序で格納されています。




横方向(行方向)に連続アクセスしても、実際のメモリの配置は飛び飛びになっており、読み書きの性能が低下します。


```matlab:code
clear
X = rand(4000);
Y = false(4000);
tic
for r = 1:4000 % 行
    for c = 1:4000 % 列
        if X(r, c) > 0.5
            Y(r, c) = true;
        end
    end
end
toc
```
```text:output
経過時間は 0.375143 秒です。
```
# 縦方向に要素をスキャンする（速い）


縦方向(列方向)に連続アクセスすることで、メモリ上のデータの配置も連続となり、読み書きが高速化されます。


```matlab:code
clear
X = rand(4000);
Y = false(4000);
tic
for c = 1:4000 % 列
    for r = 1:4000 % 行
        if X(r, c) > 0.5
            Y(r, c) = true;
        end
    end
end
toc
```
```text:output
経過時間は 0.193692 秒です。
```
# 配列として処理 (ベクトル化、より高速)


MATLABの演算子や関数はベクトルや行列を引数として取ることができます。




比較演算子も行列に直接適用が可能です。




ループベースの処理を行列やベクトル操作に変更することを"ベクトル化"と呼びます。




多くの場合、ベクトル化はループベースの処理と比較して高速です。




可読性も向上し、エラーも減るため、積極的に活用しましょう。


```matlab:code
clear
X = rand(4000);
Y = false(4000);
tic
  Y = X > 0.5;
toc
```
```text:output
経過時間は 0.023169 秒です。
```
# まとめ


MATLABプログラムの高速化について配列の事前割当とベクトル化について紹介しました。




配列の事前割当は速度をかなり改善できる可能性があります。




ベクトル化については高速化のみならず、可読性や不具合の混入リスクを下げることにもつながります。




MATLABプログラムのパフォーマンス向上にお役立てください。


# 参考

   -  [パフォーマンス向上の手法](https://www.mathworks.com/help/matlab/matlab_prog/techniques-for-improving-performance.html) 
   -  [事前割り当て](https://jp.mathworks.com/help/matlab/matlab_prog/preallocating-arrays.html) 
   -  [ベクトル化](https://jp.mathworks.com/help/matlab/matlab_prog/vectorization.html) 

# 謝辞


本記事は @eigs さんの[livescript2markdown](https://github.com/minoue-xx/livescript2markdown)を使わせていただいてます。


# 目次へのリンク


[MATLABによる画像処理・コンピュータービジョン入門目次](https://qiita.com/tohruk/items/e5f7939b622bcf2e3c4c)
FastAPIを使ってとりあえず、swaggerにそれっぽいAPIの使い方を表示したい

# 概要

とにかく、とりあえず、FastAPIのswaggerの画面にAPIからのレスポンスの形を定義したり、
レスポンスのサンプルを表示したりしたい人向けの記事。

ぼくがそうだったのだけれども、そういう記事やblogが見つけられなくて、
ひとまず [fastapi公式のチュートリアル](https://fastapi.tiangolo.com/tutorial/) を一通りこなしたのもあって、
同じ目的を持つ人の一助けになればと思って書いた。

# 前提

- こういう形のデータがレスポンスとして返ってくるとする。

```python
{
    "Special_choco1": {
      "Milk": "many",
      "Quantity": 5,
      "Cacao": "a little"
    },
    "Store":[
      {
        "Tokyo": "sibuya",
        "Hokkaido": "sapporo",
        "Osaka": "nanba"
      }
    ]
}
```

- FastAPIのバージョンは 0.52.0

- main.pyに書く
app=FastAPI() って書くファイルに書く。

- きっと他にもっと良い書き方がある。

# まずはレスポンスの形を定義する

```python
from fastapi import FastAPI
from pydantic import BaseModel
from typing import List

class choco_model(BaseModel):
    Milk: str
    Quantity: int
    Cacao: str

class Store_model(BaseModel):
    Tokyo: str
    Hokkaido: str
    Osaka: str

class Special_choco(BaseModel):
    Special_choco1: choco_model
    Store: List[Store_model]

app = FastAPI()

@app.get("/api/v1/chocolate/{name}")
async def making_choco(name: str):
    return # 後略。前提に記載したJSONが変える様な感じのものを書くイメージ。
```

# Example Valueに定義したモデルを表示させる

デコレータのところのresponse_modelに定義したいモデルを指定する。
そうすると、swaggerのExample Value のところに表示されるようになる。

```python
# 前略)

app = FastAPI()

@app.get("/api/v1/chocolate/{name}", response_model=Special_choco)
async def making_choco(name: str):
    return # 後略。前提に記載したJSONが変える様な感じのものを書くイメージ。
```

こんな感じ。
![スクリーンショット 2020-04-05 21.59.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/86853/47473ba7-81f1-3ea5-cb95-edc274460806.png)

# より具体的にExample Valueを表示する。

型やデータの構造だけではなく、具体的にどんな値が返ってくるのかを表示するには、
定義の部分に表示したいデータを以下のように、class Config 内に記載する。
そうすると、具体的な値がexample value の欄に入った状態で表示される。

```python
from fastapi import FastAPI
from pydantic import BaseModel
from typing import List


class choco_model(BaseModel):
    Milk: str
    Quantity: int
    Cacao: str
    class Config:
        schema_extra = {
            "example": {
                "Milk": "very lot",
                "Quantity": 10,
                "Cacao": "many",
            }
        }

class Store_model(BaseModel):
    Tokyo: str
    Hokkaido: str
    Osaka: str

    class Config:
        schema_extra = {
            "example": {
                "Tokyo": "shibuya",
                "Hokkaido": "sapporo",
                "Osaka": "nishinari",
            }
        }
# 後略
```

以下のように表示される。
![スクリーンショット 2020-04-05 22.08.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/86853/90b35e52-0763-b34c-5c9b-4a14c756280d.png)

# 最後に

[fastapi公式チュートリアル](https://fastapi.tiangolo.com/tutorial/) はボリュームが多いけども、やっておくとためになるのよいです。