OmniAICreator/Qiita-1.07M huggingface dataset:
N高等学校でプログラミング学習をはじめて1年が経ちました

# はじめに

## この記事について

はじめまして。これは、[N高等学校 Advent Calendar 2019](https://qiita.com/advent-calendar/2019/n-highschool)の23日目の記事です。
タイトルはsifueさんの[こちらの記事](https://qiita.com/sifue/items/1b95647cd643f787d9aa)をパク…オマージュしました。

先生側の経過報告があるのなら、生徒側のもあっていいのではないか！と言う思いがあり、この記事を書きました。[この記事](https://qiita.com/7321hasu/items/8b59f25638b60f4e336c)でやってんじゃん！とかは気づかなかったフリをしてください。

## 自己紹介

<img width="472" alt="スクリーンショット 2019-07-30 19.07.57.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/381785/f3173666-c19f-19e3-105e-cf3f76f5d02f.png">

鎌谷 天馬と申します。現在N高等学校の2年生です。
以下、自分のやっているSNSです。暇な方は見ていってください！(GitHubをSNSと言うかは諸説あるかもしれませんが…) 
[Twitter](https://twitter.com/tenma_0628)、[GitHub](https://github.com/tenmakamatani)、[Facebook](https://www.facebook.com/tenmakamatani)

# 月ごとに見るこの1年

ここからは、プログラミング学習という観点で見た僕の1年を月ごとに振り返って行こうかと思います。何も印象に残っていない月は飛ばします！

## 1月

N高等学校通学コースに転学し、[N予備校](https://www.nnn.ed.nico/)を用いてプログラミングを本格的に学びはじめます。それまでも少し触れてはいましたが、Pythonの基礎文法がわかるかな…？と言う程度でした。(しっかりリンクを入れてN予備校の宣伝しときます。)

## 2月

N予備校のプログラミング入門コースを大体完了し、自分でアプリを作ろうとしますが、いざ作ろうとした段階で何もわからなくなり、挫折します。
理由を考え、1周目はコードを**見る**だけで終わっていた箇所があったからではないかと考えました。そこで**写経**をして手に覚えさせることの重要性に気づき、再度プログラミング入門コースを学習しはじめます。
この時期に初めて通学コースLT大会に出場しました。プレゼンの経験もほとんどなく、めちゃくちゃ緊張したのを覚えています。

## 3月

今度こそサンプルアプリを何も見ずに書けるくらいにプログラミング入門コースを完璧に終わらせ、また自分でアプリを作りはじめますが、今度も挫折します。理由としては、比較的大規模なものを作ろうとしてしまったせいで、単純にモチベが続かなかったからです…個人開発の大きな課題ですね。
ここらへんの段階でまあ使えるレベルの技術は、Node.js、HTML、CSSくらいでした。

## 6月

飛んで6月です。
この月に、チームで開発した[shotlix](https://shotlix.herokuapp.com/)と言うゲームで、**日本ゲーム大賞U18部門**への進出が決定します。プログラミング関係で受賞するのは初めてだったので、狂喜乱舞したのを覚えています。ちなみにこのゲームを開発する過程で、GitやGitHubなどを用いたチーム開発を学びました。
さらに[N高キャリアバイト](https://careerbaito.com/nnn)経由で見つけた会社で人生初のインターンを始めます。

## 8月

7月~8月の前半にかけて、技術的な様々なことに対する理解が進まずグダグダしてたのですが、8月の中盤からなぜか急に恐ろしく理解が進むようになり、モチベがググンと上がります。俗に言うスランプだったのでしょうか…
皆さんもこう言う経験ありませんかね？
ともかく、一気にいろいろなことがわかるようになってきたので、DockerやFirebase、Reactなど、いろいろな技術に手を出し始めます。

## 10月

[NASA Space Apps Challenge Kushimoto](https://space-apps-kushimoto.github.io/)というハッカソンで優勝しました。星座を作ることができる[CONSTELLTOR!](https://team-mihashi.github.io/CONSTELLATOR/)というアプリを1日で作りました。ちなみに僕はバックエンドをTypeScript×Expressで書いた後、JSを使ってフロントエンドも手伝いました。ここでもN予備校で学んだ経験が活かせたのかな…？と思っています。
ちなみにこの件はN高ブログの[こちらの記事](https://nnn.ed.jp/news/blog/archives/8941.html)でも取り上げられています。

あ、あと[N予備校 動くWebページコンテスト 2019 夏](https://progedu.github.io/web-contests/move-webcontest2019-summer/results/)でN高最優秀賞取りました。コーディング技術が満点だったのが地味に嬉しかったです。
こう考えれば10月いろいろありましたね…

## 12月

それまでインターンとして働いていた会社をやめ、[Penmark](https://corp.penmark.jp/)と言う会社で働き始めます。ちなみにここの会社はTwitter経由で知り合い、現在お世話になっています。

# 1年の成果

長々と話してきましたが、この1年の成果をまとめようと思います。

- 作ったリポジトリ → **52**個
- 働いた会社 → **2**社(実務経験 計**6**ヶ月)
- ポートフォリオ → **5**個以上
- コンテスト → **3**件入賞

と、自分としてはなかなか頑張ったのではと思っています。

# まとめ

N予備校から始まり、1年間プログラミングを勉強してきましたが、やはり学習を継続させるためには好きになることが1番なんだなと思いました。

また、振り返ってみてN予備校はなんて良いツールなんだろうと思います。はい、誇張ではなく。
サーバーサイドの知識やGitの使い方、そしてもちろんJSという言語自体の知識など、Webアプリを作成するにあたって必要な知識を体系的に学べるため、プログラミングを勉強したい方はまずここから入っとけば間違いないかなと思いました。もう一回[宣伝](https://www.nnn.ed.nico/)しときます。

まあ運良く何度か受賞できたりはしましたが、僕はその後ろに大量の、**挑戦したけどダメだったコンテスト**が転がっています。どんな人でも、1番大事なのは挑戦することだと思うので、皆さんもぜひコンテストなど、色々なものに挑戦してみましょう！！！
【jinja2】for文内で加算した変数が引き継がれない問題の解決策

# はじめに
<バージョン>
Python: 3.7.4
jinja2: 2.7.2

以下のようなコードがあり、for文内でcntという変数を加算していったとします。

```jinja:count_test.j2
{%- set cnt = 1 -%}
{%- for i in range(3) -%}
{%- set cnt = cnt + 1 -%}
{{ cnt }}
{% endfor -%}
result : {{ cnt }}
```

# 実行結果(失敗例)
結果を見てみると、for文の外には変数に加算した結果が引き継がれていないことがわかります。

```text:出力
2
3
4
result : 1
```

バージョンによっては、加算されない場合もあるようです。

```text:出力
2
2
2
result : 1
```

# 解決策1：リストに格納する
加算した結果をリストに格納すると上手くいきます。
加算した値をappendでリストに足して、加算前の値はpopで削除します。

```jinja:count_test2.j2
{%- set cnt = [1] -%}
{%- for i in range(3) -%}
{%- set _ = cnt.append(cnt[0] + 1) -%}
{%- set _ = cnt.pop(0) -%}
{{ cnt[0] }}
{% endfor -%}
result : {{ cnt[0] }}
```

# 解決策2：namespaceを使う
<2019/12/21：na90ya様より>
jinja2の2.10で導入されたnamespace objectsを利用すると変数が維持されるようです。(参考資料[1])

```jinja:count_test3.j2
{%- set ns = namespace(cnt=1) -%}
{%- for i in range(3) -%}
{%- set ns.cnt = ns.cnt + 1 -%}
{{ ns.cnt }}
{% endfor -%}
result : {{ ns.cnt }}
```

# 実行結果(成功例)
結果を見てみると、for文の外でも変数が加算されたままになっています。

```text:出力
2
3
4
result : 4
```

# 参考資料
[[1]Template Designer Documentation]
(https://jinja.palletsprojects.com/en/2.10.x/templates/#assignments)
CloudFormationのYAMLを分割管理する

CloudFormation は JSON or YAML で作成したテンプレートを元に構成を管理しています。
コメントが書ける YAML を選択している方も多いかとは思いますが、CloudFormation のテンプレートは1ファイルになっている必要があり、設定項目が多くなると管理がかなり面倒です。

JSON も YAML もそれ自体には import や require する機能はないのですが、[json-refs]（仕様は [JSON Reference], [JSON Pointer] 参照）を使うと別ファイルを参照できるので、簡単にツール化してみました。

[@u-minor/cftemplate - npm]

## 使い方

### インストール

通常は、CloudFormation を使うプロジェクト内にインストールすれば OK です。

```command-line
npm install -D @u-minor/cftemplate
```

> global に入れても OK です。

### CloudFormation 分割テンプレートの作成

[テンプレートのサンプル](https://github.com/u-minor/cftemplate/tree/master/test/fixture/tpl1)

[json-refs] は `$ref: another_file.yml` のように、`$ref` を使って別ファイルを指定します。

`src/index.yml` を作成し、以下のように CloudFormation のトップレベルの要素を定義、`Parameters` 等の要素を別ファイルに分離します。

```index.yml
AWSTemplateFormatVersion: '2010-09-09'
Description: Test template

Parameters:
  $ref: parameters.yml

Resources:
  $ref: .resources.yml
```

`src/parameters.yml` を作成し、テスト用のパラメータ定義をしてみます。

```parameters.yml
TestParam:
  Description: Test parameter
  Type: String
```

`.resources.yml` のように「.」から始まるファイル名を指定した場合は、直接ファイルを作成せず、「.」を除いたフォルダを作成し、その中に複数の YAML ファイルを入れておくことで、自動的にマージしてくれます。

`src/resources/Logs.yml` を作成し、以下のように CloudWatch の LogGroup を指定してみます。

```Logs.yml
LogGroup:
  Type: AWS::Logs::LogGroup
  Properties:
    LogGroupName: !Sub ${AWS::StackName}/${TestParam}/
```

> json-refs はノードに対して1ファイルを import する仕様なので、CloudFormation の Resources（1ノード）の中を複数ファイル分割しようとすると、json-refs のみでは対応できません。
> ですので、この部分は独自にマージする仕様となっています。

### CloudFormation テンプレートのビルド

`cftemplate` コマンドで src フォルダを指定すると、ビルドされたテンプレートが標準出力にアウトプットされるので、以下のようにリダイレクトでファイルに向けます。

```command-line
npx cftemplate src > stack.yml
```

以下のようなテンプレートが出力されれば成功です。

```stack.yml
AWSTemplateFormatVersion: '2010-09-09'
Description: Test template
Parameters:
  TestParam:
    Description: Test parameter
    Type: String
Resources:
  LogGroup:
    Type: 'AWS::Logs::LogGroup'
    Properties:
      LogGroupName: !Sub '${AWS::StackName}/${TestParam}/'
```

AWS CDK が使える今、CloudFormation テンプレートを直接管理する必要性は以前ほど少なくなってきてはいると思いますが、YAML でシンプルに定義できるメリットはまだまだあると感じています。

ぜひお試しください。

----
[json-refs]: https://www.npmjs.com/package/json-refs
[JSON Reference]: https://tools.ietf.org/html/draft-pbryan-zyp-json-ref-03
[JSON Pointer]: https://tools.ietf.org/html/rfc6901
[@u-minor/cftemplate - npm]: https://www.npmjs.com/package/@u-minor/cftemplate
これを期にMarkdownの書き方を覚えてしまいましょう

いい機会なのでMarkdownという書き方を覚えてしまいましょう。
##Markdownとは何なのか
メールなどで記述するときにわかりやすくするために使う書き方の一つです。
現在ではQiitaやGithubの説明文やソフトのReadmeなどに使われています。
これを覚えておくとメールも楽に書けるようになりますよ。

段落は一行空きで書きます。

```
あ

い

う

```
見出しですが#の数で決まります。

```
#は大見出し
##は中見出し
###は小見出しになります

```
リストは

```
-リスト１
    -ネスト リスト1_1
    -ネスト リスト1_2
-リスト2
-リスト3



1. 番号付きリスト1
    1. 番号付きリスト1_1
    1. 番号付きリスト1_2
2. 番号付きリスト2
3. 番号付きリスト3
```
となります。

あとコードブロック
```をうち自分の打ちたい言語名を入力します。

アーチスさんが詳しいことを書いてくれています。
感謝しています。
[アーチスさんのMarkdownの説明 メモ書きやドキュメント作成に便利な「Markdown記法」を使ってみよう](https://www.asobou.co.jp/blog/bussiness/markdown)
[Qiitaの新規入力](https://qiita.com/drafts/new)
自分の場合アーチスさんの書き方とQiitaの書き方をミックスして書いているので自分はQiitaの新規入力の部分を２つ開いて見ながら入力することをおすすめしたいと思います。

これからは重要なところでも出てくることになると思いますので覚えておくと便利です。

Qiitaさんと[株式会社アーチス](https://www.asobou.co.jp/)さんには感謝致します。
詳細な説明があると初心者は大変助かります。

みなさんも記事をなるべくMarkdownで書くようにしましょう。
覚えておくといざというときに役に立ちます。
たまにプログラムの説明をMarkdownで書こうという話になるかもしれません。
実際私も経験しました。
なるべく記事を書くことによりMarkdownに強くなりましょう。
TouchDesignerというものを触ってみた


先日DotFes2019に参加した際に**TouchDesigner**の開発者の一人Ben Voigtさんのお話を聞き、
すごく気になったので少し触ってみました！の記事です。
![https___qiita-image-store.s3.amazonaws.com_0_127402_72f7d19d-056d-963e-6e04-52a6e460b749.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/484076/71a9a085-67e0-79ea-c44f-ed3a1f131006.jpeg)


# TouchDesignerとは？
TouchDesignerとは非常に高度な映像を製作することができる、
ノードベースのヴィジュアルプログラミング環境です。
簡単に言うと箱に線を繋ないで、プログラムを作るプログラミングツールです。

簡単な特徴としては
- ノンコーディング　コード描かなくてもOK
- コンパイルやビルドも必要なしです。
- そのため、プログラムの作成も高速でできる
- リアルタイム、インタラクティブに強い
- 3DCGが容易に扱える
- 様々なデバイス、ツールとの連携も容易

といった感じになりますが、補足でノンコーディングについては
**あくまでも使わずにできるよ！**ってことであり実際使ったほうがより複雑な動きをさせたりすることができます。
ちなみにメインスクリプトはPythonになります。

# TouchDesignerでできることは？

できること範囲がめっちゃくちゃ広いです。
プロジェクションマッピングやVRの映像も作れたりします！

参考までに以下の動画は美術館の壁中にプロジェクションをしている作品です。
この作品では50台以上のプロジェクターを使用していますが、1台のPCのみで制御しているそうです。
TouchDesignerは安定して動くため、こういった大規模の常設プロジェクトでも数多く使われています。
https://youtu.be/GpRksCaf2SI

#　導入コストは？

４つのプランから選ぶことができます。

- PRO：2200ドル/年の最上級版です。あらゆるプロのデザイナーのニーズに応えます。
- COMMERCIAL：600ドル/年の汎用版です。商用利用が可能です。
- EDUCATIONAL：300ドル/年の教育用です。学校や学生向けで、商用利用はできません。
- NON-COMMERCIAL：無料の個人向けです。商用利用はできません。


# 実際に使ってみて

公式ページ(https://derivative.ca/ )からアカウントの作成とインストールします。
<img width="1440" alt="Screen Shot 2019-12-21 at 17.01.02.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/484076/3c45cc3c-1d33-b9f2-ddef-e6b4e070ff58.png">

<img width="1440" alt="Screen Shot 2019-12-21 at 17.01.12.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/484076/d1c18a93-578b-11b2-69cd-c26f1ee6d38c.png">

インストール完了後、開いてみるとこんな感じです。
ここから新規作成して映像を作っていきます！
<img width="1439" alt="Screen Shot 2019-12-21 at 17.24.16.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/484076/6d83d26f-e6ac-dd82-56ef-d614dc18ba54.png">

1時間足らずでこんな映像ができました！
（※その前にチュートリアルとかは目を通してます）
![ezgif.com-video-to-gif (1).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/484076/dc33c5af-4c69-f307-5ce7-eb004c42d5be.gif)

使ってみて感じたことは無料でこのクオリティーのツールが使用できるのはめちゃくちゃ良いのと、直感的に操作できるのも一つの魅力ではかなと思います。
あとは個人的にAeよりTouchDesignerの方が3D映像作りやすいなと感じました。
機能とかの説明もしたいんですがめちゃくちゃ長くなるので今回はここまで！

# オススメの参考サイト
- TouchDesignerの開発元、Derivative社のサイト
https://docs.derivative.ca/Main_Page

-  ohkawara ayatoさんのWorkshopWorkshop
https://www.youtube.com/watch?v=R5_LWZqzAi8

-  TouchDesignerを勉強する時に参考になるサイトまとめ
https://qiita.com/ToyoshiMorioka/items/763f425bc3381209a29f
競プロ＆CTFのすすめ

海外通販の誤配送やヤマトの荷物破壊で精神をすり減らしているうちに担当日になってしまった。
試される大地・北海道で絶賛試され中のtakuma-fです。
最近ではとうとう寒さが本番を迎え、外を歩くと耳が千切れそうです。

みなさんが本格的な記事を書く中、チラシの裏のようなネタを投下するのも恥ずかしいのですが、最近競技プログラミングとCTF(Capture the flag)にハマっています。
1ヵ月ほど両者を取り組んで感じたことなどをご紹介しようと思います。

## 競技プログラミング
国内外にさまざまなコンテストがありますが、執筆時点で国内だと最もメジャーな[AtCoder](https://atcoder.jp/?lang=ja)に取り組んでいます。
著者はABCコンテストのB問題は楽々解けるけどC問題になると苦戦する、程度のスキルです。

- とにかく動くコードを早く書くことが大切
- 自分のプログラミングレベルが客観的に測れる
- プログラミングに特化したものなので、基本的にはエディタがあれば戦える

問題を解くことで自分の実力を測るのもひとつですが、他者の回答を見るとバイト数や実行時間を削るためのテクニック、命題を満たせるよりシンプルなロジックなど、実務に応用できそうなヒントがたくさん得られるのも競プロの面白さです。

```Python:最初の頃に書いていたコード(ABC083B)
def main():
    input_list = list(map(int,input().split()))

    n = input_list[0]
    a = input_list[1]
    b = input_list[2]

    answer = 0
    for i in range(1, n+1):
        digit_sum = sum(list(map(int, str(i))))
        if (digit_sum >= a) and (b >= digit_sum):
            answer += i

    print(answer)

if __name__ == "__main__":
    main()

```

最近は私もワンライナーやmap関数, lambda関数を多用するようになりPythonが黒魔術化しつつあります。
Pythonはそれほど高速な言語でないので、並列処理なども活用できるようになりたいですね。

```Python:最近書いているコード(ABC142B)
n, k = list(map(int,input().split()))
h = list(map(int,input().split()))
print(sum(list(map(lambda x: 1 if x - k >= 0 else 0, h))))
```

### 学習方法
[AtCoderの過去問](https://kenkoooo.com/atcoder/#/table/)をA, B中心に解きまくっています。
Githubにリポジトリを立てて問題ごとにファイル作成してコミット、正解したものは`master`ブランチへ、途中(不正解)の問題は`inprogress`ブランチに入れるようにしています。

Github(Git)で管理することで以下のようなメリットがあります。

- リポジトリをクローンできる環境があればどこでも学習できる
- Githubプロフィールに草を生やせるのでモチベーションに繋がる
- ブランチを分けることで正解/不正解を分けて管理できる

当方では自宅のPCのほかに自前のAWS上にCloud9環境を構築しています。

## CTF
CTFはプログラミングで解く問題だけでなく、アセンブラやパケットキャプチャ、暗号文など計算機理論やネットワークへの広範な知識が必要となり、便利なツールを知っていることも重要です。
例えばパケットキャプチャでは[Wireshark](https://www.wireshark.org/)というソフトが定番だったりします。
Linuxコマンドを使うと便利な場合も多いので、Linux環境を用意しておくとベターでしょう。
私は自宅PC(Macbook)と上記のCloud9で賄っています。

CTFもさまざまなサイトで問題が常設されており、[CpawCTF](https://ctf.cpaw.site/)や、[XmasCTF](https://xmas.htsp.ro/home)、社内セキュリティコンテストの過去問に取り組んでいます。

サーバからのレスポンスの違いからパスワードを推定する、といったｽｰﾊﾟｰﾊｶｰになりきれる問題から、与えられたキーワードを基にソーシャルハックするといったネトスト問題まで幅広いです。

## 感想
本当はAtCoderのABCに参加して茶レベルにはなったぜイヤッホウ、くらいのことが書きたかったのですが、見事に参加をサボってしまいまだ何のレベルも付いてません。
すぐサボるのは本当に自分の悪い癖ですね。
来年には自然言語処理の前処理とかでなにかお話しができれば…。
[Dart]ListやMapのキャストについて

### 結論
動きとしては下記のようになる。

```dart
final List<dynamic> foo = [1, 2.3];
final baz = foo as  List<num>; // これはできない

final hoge = <String, dynamic>{'a': 'a'};
final fuga = hoge as Map<String, String>; // これもできない
```

```dart
final List<dynamic> foo = [1, 2.3];
final baz = foo.cast<num>(); // これはできる

final hoge = <String, dynamic>{'a': 'a'};
hoge.cast<String, String>(); // これもできる
```

### Effective Dart
ただし下記に記載されているように、直接castメソッドを使うことは避けたほうが良い。
[AVOID using cast().](https://dart.dev/guides/language/effective-dart/usage#avoid-using-cast)
[DON’T use cast() when a nearby operation will do.]([avoid-using-cast](https://dart.dev/guides/language/effective-dart/usage#avoid-using-cast)
)

## 終わりに
Flutter触り始めたときにハマったので書きました。

## 参考
[Effective Dart: When to use "as", ".retype", ".cast"](https://github.com/dart-lang/site-www/issues/736#issuecomment-383169613)
[Ruby on Rails]slickの矢印の画像を変更する方法[JQuery]

# 実現したいこと
slickの画像(スライド)を次に送るための両側の矢印の画像を好きなものにする。

色々参考にしたがうまくいかなかったので、自分がうまくいったやり方を残しておきます。

# 前提
Ruby on Railsで開発を行っています。slickは導入できているものとします。
Rails 5.2.4
ruby 2.5.1
jquery-rails 4.3.5


# 手順
## 画像の用意
矢印にしたい画像をapp/asset/imagesフォルダに入れます。

## 矢印のデフォルト画像の変更
おそらく\2190と\2192の部分が、矢印のデフォルトの画像を指定している部分だと思います。なので、この部分を任意の矢印の画像に取り替えます。

```javascript:slick-theme.scss
変更前
$slick-prev-character: "\2190" !default;
$slick-next-character: "\2192" !default;

変更後
$slick-prev-character: image-url("left.png") !default;
$slick-next-character: image-url("right.png") !default;
```
## 矢印の表示と位置調整
位置の調整は以下の記事を参考にさせていただきました。
https://qiita.com/milneo/items/3560cb01cba92c2ccb6f
これで、矢印が表示されたと思います。slider.scssはslickに対してcssを記述しているファイルです。名前などは人それぞれ違うと思うので気をつけてください。

```scss:slider.scss

.slick-prev{
  left: 50px;
  height: 80px;
  width: 80px;
  z-index: 10;
}

.slick-next{
  right: 50px;
  height: 80px;
  width: 80px;
  z-index: 10;
}
```

## 最後に
なんとか、矢印の画像の変更はできました。
ただ、まだコードの意味や自分が行ったことの意味を理解していないので、もっと勉強しなけらばなと思いました。

# 参考
https://qiita.com/milneo/items/3560cb01cba92c2ccb6f
フォルダ内のファイルの文字数をカウントし、一覧を作成するPowershellスクリプト

テキスト形式で書いたいくつかの文章ファイルがあり、
それぞれの文字数・行数を知りたい（比較したい）と思ったので作成した。

下記をコピペして `CountText.ps1` を作成
（文字数・行数をカウントしたいファイルがあるフォルダに配置する）


```
#結果ファイルを初期化。ついでに時刻と対象フォルダ（スクリプトを配置した場所）を出力
Write-Output $(Get-Date; Get-Location|Select-Object Path) > count.log

#対象となるファイル（txtファイル）の一覧を取得し、それぞれの数を数える
$itemList = Get-ChildItem -File -Name *.txt
foreach($item in $itemList)
{
    $Result_Char = (Get-Content -Encoding UTF8 $item |Measure-Object -Character).Characters
    $Result_Line = (Get-Content -Encoding UTF8 $item |Measure-Object -Line ).Lines
    Write-Output "$item : $Result_Char 文字, $Result_Line 行" >> count.log
} 
```

作成出来たら、その `CountText.ps1` を右クリックし、 `Powershellで実行` をすればOK。
そのフォルダ内に `count.log` が作成されます。

`count.log` の中身はこんな感じ

```

2019年12月21日 12:21:12

Path : D:\test\writing

file01.txt : 1249 文字, 31 行
file02.txt : 4114 文字, 76 行
file03.txt : 4109 文字, 77 行
file04.txt : 1895 文字, 34 行
memo01.txt : 8720 文字, 133 行

```

※行数について、空白行は無視される

### 実行できない場合
powershellのスクリプトを実行する際には実行可能になるように設定する必要があります。

管理者権限で開いたPowershell上で、
``Set-ExecutionPolicy RemoteSigned``

を実行すれば実行できるようになります。
※セキュリティリスクもあるので、一度 Set-ExecutionPolicy で調べてから自己責任でどうぞ。
【Rails】Migration

## Migrationとは
Railsでのデータベースへの変更を加える際に使用する機能
下記の順で実行する

1. DBスキーマを変更するコードを記述したRubyのファイル　マイグレーションファイルを作成
2. マイグレーションファイルを適用する

ひとつのマイグレーションがバーションとして扱われる
開発用, 本番用, テスト用と個別に管理される

## マイグレーションの適用
開発環境以外は`RAIS_ENV`で指定

``` bash
# 開発環境
rails db:migrate
# 本番環境
rails db:migrate RAILS_ENV=production
# テスト環境
rails db:migrate RAILS_ENV=test

# 指定バージョンまでマイグレーションを適用
rails db:migrate VERSION=20191221~

```

## マイグレーションの取り消し
``` bash
# １つ前のマイグレーションを取り消す
rails db:rollback
# 指定したステップ数だけ取り消す
rails db:rollback STEP=3
```
WordPress😂 → Gatsby(Github Pages😭) → Gatsby(Netlify😃)

この記事は [JAMstack Advent Calendar 2019](https://qiita.com/advent-calendar/2019/jamstack) 22日目の記事です。

[きょんしー](https://twitter.com/kyoncy_site) です。最近更新できてないGatsbyで作った https://kyoncy.site の話をします🐧

元々、ブログは WordPress を使っていたのですが

- **メンテナンスが面倒**
- **サーバ費用を0円にしたかった**
- **ReactやGraphQLを使いたかった**


これらの理由から、Gatsby.jsで1から作り直しました。
最初はGithub Pagesにデプロイしていたのですが、


- **デプロイフローが面倒**(分かってないだけ)
- **デプロイされてからの反映される時間の遅さが気になる**


ということもあり、Netlifyに移行しました。


## Starter Library 何それ知らない。 無知

[Gatsby.js Starter Library](https://www.gatsbyjs.org/starters/?v=2) で手軽に始めれるようになっている ([これかっこいい](https://www.gatsbyjs.org/starters/justinformentin/gatsby-v2-tutorial-starter/)) にも関わらず、全く気づかなかったので [gatsby-starter-blog](https://github.com/gatsbyjs/gatsby-starter-blog) から始めました。
WordPressからの移行とはいえ、デザインがシンプルすぎた😭

それからというものの、カスタマイズの日々が続くのでした。
「Gatsby + 〇〇」でググれば大抵の情報は見つかりました。

- 記事ごとのタグの導入
- 記事のOGP画像を設定（設定した画像がなければデフォルト画像）
- コードのSyntax Highlight機能の追加
- Githubの草情報の追加 → http://grass-graph.moshimo.works/

とりあえず最低限の機能を実装しました。
OGP画像の実装は少し工夫が必要だったので gatsby-starter-blog から始めるのもアリかもしれませんね。


## Github Pages 反映遅くない？ 後悔

いざデプロイするとなったとき、[Gatsby Docs](https://www.gatsbyjs.org/docs/how-gatsby-works-with-github-pages/) に Github Pages へデプロイする方法を書いていたので参考にしました。
Github上でドメインなどの設定をしましたがよく理解できず、masterにマージされた後に

```sh
$ gh-pages -d public -b master
```

を叩きました。
すると master ブランチの内容が、ビルドで生成される public ディレクトリ以下の内容に置き換わってました...HTMLファイルがズラーっと並んでいたので、詰んだかと思いました。

masterの変更をフックしてデプロイフローが走るようにしなければ、機能追加や記事更新のたびに正しい対処法かもわからないdevelopブランチからブランチ生やしてforce push、みたいな訳の分からない運用になりそうだなぁと思っていました。

そしてもう1つ気になっていた点はデプロイしてから何分かは 400 が出ることでした。
WordPressを脱出したのに、結局メンテばっかりすることになるのは嫌だったので、Netlifyに移行することにしました。


## Netlify 楽々デプロイじゃん！ 歓喜

移行するにあたって [Build, deploy, & run Gatsby on Netlify | Netlify](https://www.netlify.com/with/gatsby/) が参考になりました。
GithubからドメインやDNSの設定も移行 (設定の完了に多少時間はかかる) し、Netlify の Settings 画面にある Build と Deploy に関する項目を埋めて、いざデプロイ！

Deploy log が表示されるので、どこでこけた！とかが分かるようになってて驚きでした。
無事、何事もなくデプロイ完了。追加した記事もすぐに反映されてました。

「あれ、終わった。キタコレ」という具合にあっけなく幕を閉じました。


## そりゃ WordPress が愛されるわけだ! 反省

今回は自分のブログだったのですが、
自分が働いている会社の別プロジェクトでサイトを立ちあげることになりました。
要件をあげてると、エンジニア以外の社員も記事だけでなくコンテンツを追加したりする機能が必要ということがわかりました。

Gatsby + Netlify CMS のような形にすれば、レイアウトは除いて社内の誰でも記事の管理をすることが出来ると思うのですが、細かい配置を変えたかったり写真を追加したかったりするのに全てエンジニアが手を加えていくことは現実的ではありませんでした。

結局は WordPress を使うことになりました。(決して嫌いではない)
AWSで環境構築だけし行い、運用開始すると、ほとんど自分がメンテナンスすることがありませんでした。

世界中の多くのサイトが WordPress である理由が納得できました。Pluginも豊富。
まだ使ってはいないのですが Contentful や microCMS などの情報も聞いて、気になるので試してみようと思います。
Google Colab で Vulkan で compute kernel を動かす

## 背景

* Vulkan で機械学習したい
* Colab で開発や動作検証したい

## 環境

GPU タイプに選択しておきます.

GPU はガチャらしいようで, Tesla K80 だったり Tesla P100 だったり Tesla T4 だったりするようです.

K80 だと動かないかもしれません.
今回は運良く P100 が当たりました. P100 だとメモリ 16GB あっていいですね.

## Vulkan 設定　

```
!apt install vulkan-utils libvulkan-dev
```

だけでいけます. `VK_ICD_FILENAMES` 環境変数などの設定は不要でした.
vulkaninfo してみます.


```
WARNING: [Loader Message] Code 0 : loader_icd_scan: Can not find 'ICD' object in ICD JSON file /usr/share/vulkan/icd.d/nvidia_layers.json.  Skipping ICD JSON
'DISPLAY' environment variable not set... skipping surface info
error: XDG_RUNTIME_DIR not set in the environment.
==========
VULKANINFO
==========

Vulkan Instance Version: 1.1.126

...

GPU0:
VkPhysicalDeviceProperties:
---------------------------
	apiVersion     = 4198495 (1.1.95)
	driverVersion  = 1754316800 (0x6890c000)
	vendorID       = 0x10de
	deviceID       = 0x15f8
	deviceType     = PHYSICAL_DEVICE_TYPE_DISCRETE_GPU
	deviceName     = Tesla P100-PCIE-16GB

...

	VK_KHR_shader_atomic_int64           : extension revision 1
	VK_KHR_shader_draw_parameters        : extension revision 1
	VK_KHR_shader_float16_int8           : extension revision 1
	VK_KHR_shader_float_controls         : extension revision 1

...
```

Super cool!

機械学習に有益な `VK_KHR_shader_float16_int8` も使えました.

## 動かす

vulkan_minimal_compute をコンパイルして動かしてみます.

https://github.com/Erkaman/vulkan_minimal_compute


<img width="833" alt="Screen Shot 2019-12-21 at 18.46.28.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36275/b41d00d4-fb4e-0ae9-3b16-9250c6ba6bd9.png">

:tada:

## その他

リアルタイム描画は難しいですが, Vulkan でグラフィックス描画については, offscreen rendering ならいけるかと思います.

参考: Google Colaboratoryが、3D CGレンダリング用途にも有能すぎた件
https://qiita.com/stakemura/items/71aeefaa927ab277fcf1


## TODO

* [ ] Colab だと shell 操作がめんどいので, gitpod self-hosted で手元 PC で Vulkan 動かして機械学習開発できるようにする https://www.gitpod.io/
Python3.7をソースコードからインストール

# 【1】この記事の要約（・８・）

にわかでPython開発してみたら3.7からの構文を使っていて、
いざデプロイ先に環境構築しようとした時に動かず。
当時（2019/04）のCentOSではPython3.7はソースからインストールが必要でした。

# 【2】登場人物（人ではない）
Python	3.7.3

# 【3】インストール

## 3.1. インストールに必要なパッケージをインストール

```
sudo yum install gcc openssl-devel bzip2-devel libffi-devel
```

## 3.2. ダウンロード

```
cd /usr/src
sudo curl -OL https://www.python.org/ftp/python/3.7.3/Python-3.7.3.tgz
sudo tar xzf Python-3.7.3.tgz
sudo rm -f /usr/src/Python-3.7.3.tgz
```

## 3.3. インストール

```
cd Python-3.7.3
sudo ./configure --enable-optimizations
sudo make altinstall
```

# 【4】python3のシンボリックリンク作成

## 4.1. パスを確認

```
which python3.7
```

## 4.2. 確認したパスへのシンボリックリンク作成

```
sudo ln -s /usr/local/bin/python3.7 /usr/bin/python3
```

## 4.3. 共存確認

```
python3 -V
    Python 3.7.3
python -V
    Python 2.7.5
```

# 【5】sudoでもpipを使えるようにシンボリックリンクを作成

## 5.1. パスを確認

```
which pip3.7
```

## 5.2. 確認したパスへのシンボリックリンク作成

```
sudo ln -s /usr/local/bin/pip3.7 /bin/pip3
```

## 5.3. 確認

```
sudo pip3 -V
    pip 19.0.3 from /usr/local/lib/python3.7/site-packages/pip (python 3.7)
```

# 【6】おわりに

探せば山ほど出てくるネタですね。
自分がインストールした時の記録を残す意図で記事にしました。
XserverへのSSH接続がより簡単になるconfigの登録方法

# はじめに
過去に「[WebサービスをXserverで公開する方法](https://qiita.com/kgkgon/items/c2a72f1bc22d0993cda5)」という記事を書いたのですが、そこで紹介している

- Xserverにsshでログインする方法
- Xserverにローカルからファイルを転送する方法
- Xserverにあるファイルをローカルへダウンロードする方法

をもっと簡単に行える方法を知ったので紹介していきます！

※以下の方法はリモートサーバーはXserverを前提に書いています。

# リモートサーバーへのSSH接続を簡単にする
ssh接続は以下のコマンドを実行して接続するのですが、毎回接続する度にこのコマンドを叩くのは面倒です。。。

```terminal:ssh接続従来のやり方
$ ssh -i ~/.ssh/{秘密鍵名} -p 10022 {サーバーID}@{サーバー番号}.xserver.jp
```

しかし、**sshにconfigファイルを作成**してあらかじめリモートサーバーの情報を登録しておくことより簡単にssh接続ができるようになります！

## confingファイルを作成

```terminal
$ cd ~/.ssh
$ vi ~/.ssh/config
```

## リーモートサーバーの情報を登録する

```terminal:.ssh/config
Host xserver
  HostName {サーバー番号}.xserver.jp
  IdentityFile ~/.ssh/{秘密鍵名}
  Port 10022
  User {サーバーID}

Host sample
  HostName sample.com
  IdentityFile ~/.ssh/sample.key
  Port 22
  User sample_user

```

※Hostは任意で変更してください。

## sshで接続する
xserverのサーバーにSSH接続する場合

```
$ ssh xserver
```

sampleのサーバーに接続する場合

```
$ ssh sample
```
接続するにはたったこれだけ！！✨

さらにファイルの転送やダウンロードも簡単にできるようになります。↓

## ローカルからXserverにディレクトリを転送する

```terminal
$ scp -r /{転送元のディレクトリ名} {Host}:/{アップロード先のディレクトリ名}

$ scp -r ./sample_dir/ xserver:~/hogehoge
```

## Xserverにあるディレクトリをローカルへダウンロードする
```terminal
$ scp -r {Host}:/{ダウンロードしたいディレクトリ名} /{ダウンロード先ディレクトリ名}

$ scp -r xserver:~/hogehoge/sample_dir ./hoge_dir
```

### おわりに
この方法を知る前までは毎回リモートサーバーへ接続する度に、あれ？コマンドなんだったけ？って確認していたので手間が省けました！
sshのconfigにサーバー情報を登録しておくとコマンドの入力が短くなって便利なのでぜひ設定してみてください〜。
PowerShellでのvitualenvを用いた仮想環境のアクティベート方法

# 環境
- PowerShell　5.1.17763.771
- virtualenv　16.7.9

# 仮想環境のアクティベート
```
. .\<env>\Scripts\activate
```
これだけだとうまくいかないことがある。
なぜならWindowsの実行ポリシーの関係でスクリプトが実行できないから。
なので、実行ポリシーを変更する。

# 実行ポリシーの変更
実行ポリシーについてはスコープとポリシーについて詳しく記載してあるものが、下記のサイトにあるので参考に。
https://docs.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_execution_policies?view=powershell-6

今回は仮想環境をアクティベートするためのコードのみ記す。

```
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
```

これで再度、仮想環境のアクティベートのコードを実行すればうまくいく。

以上。
Deno で YAML を扱う

Deno (ディーノ) <img src="https://raw.githubusercontent.com/kt3k/drafts/master/assets/deno.png" width="20"> Advent Calendar 25日目の記事です.

今日は Deno で YAML を扱う話です.

# YAML モジュール

Deno は標準ライブラリで YAML モジュールを持っています. `parse`, `stringify` などの API を使って YAML のパースやシリアライズを行うことが出来ます.

```ts
import { parse, stringify } from "https://deno.land/std/encoding/yaml.ts";

const data = parse(`
foo: bar
baz:
  - qux
  - quux
`);
console.log(data);
// => { foo: "bar", baz: [ "qux", "quux" ] }

const yaml = stringify({ foo: "bar", baz: ["qux", "quux"] });
console.log(yaml);
// =>
// foo: bar
// baz:
//   - qux
//   - quux
```

`parse` は引数に YAML 文字列を受け取って, パースしたオブジェクトを返します.

`stringify` は逆にオブジェクトを受け取って, YAML 文字列を返します.

YAML は JSON とは違って, 1ファイルに複数のドキュメントを持つことが出来ます. 1ファイルに複数の YAML ドキュメントを記述するには各ドキュメントを `---` という行で区切ります.

```yaml
id: 1
name: Alice
---
id: 2
name: Bob
---
id: 3
name: Eve
```

上の例は3つのドキュメントを持った YAML の例です.

`parse` 関数はこのような複数ドキュメントを持った YAML 文字列をパースすることはできません. 複数ドキュメントの YAML をパースしたい場合は `parseAll` というメソッドを使うことが出来ます.

```ts
import { parseAll } from "https://deno.land/std/encoding/yaml.ts";

const data = parseAll(`
---
id: 1
name: Alice
---
id: 2
name: Bob
---
id: 3
name: Eve
`);
console.log(data);
// => [ { id: 1, name: "Alice" }, { id: 2, name: "Bob" }, { id: 3, name: "Eve" } ]
```

3つのドキュメントを持った YAML が 3つのオブジェクトを持った配列にパースされたことが分かります.

# YAML モジュールの歴史

YAML モジュールは [js-yaml](https://github.com/nodeca/js-yaml) という npm で一番よく使われている YAML ライブラリがベースになっています. YAML モジュールの[最初の移植作業](https://github.com/denoland/deno/pull/3361)はフランスの Deno meetup である [Paris Deno](https://www.meetup.com/ja-JP/Paris-Deno/) のオーガナイザの Lilian Saget-Lethias ( [@bios21](https://github.com/bios21) ) さんによって行われました.

# まとめ

今日は Deno で YAML を扱う方法を紹介しました.
M5stackでhttp通信してみる

[Link-1]:https://qiita.com/zasshyu6/items/35a1048a9781bdcfebb7
[Link-2]:https://qiita.com/7of9/items/30508ea8c62f7ee027ba
[Link-3]:http://mukujii.sakura.ne.jp/esp2.html

[git-1]:https://github.com/zasshyu66/m5stack_Study/tree/master/httptest

[Tips-1]:https://qrunch.net/@sabamiso/entries/NAGTcw9mBdbUHvvL

#初めに
最近`golang`にはまってて`M5stack`はやってなかったのですが、`いいね`してくれる人が**5人**(2019/12/21時点)もいてうれしくなったので年末年始の連休で`M5stack`を使って何か作りたくなったので手始めに簡単な`http`(セキュアじゃないよ)を復習したくなりました。

#`http`通信で`M5stack`を操作してみよう
##使用物と環境

 - `M5stack` ... こちらで調べたことや試したことを書いています ->[「m5stackで遊ぼう」][Link-1]
 - `Visual Studio Code` ...`Version 1.40.1` 
 - `PlatformIO` ... Home:`3.0.1`Core:`4.1.0`


##'M5stack'の`Wifi`モードについて
`M5stack`は自分をアクセスポイントとする`AP`モードと`Wifi`アクセスポイントへ接続する`STA`モードの二つがあります。
今回は`AP`モードでスマホからIPアドレスを直接入力して`HTTP`で`HTML`の`GET`をもらうことをしました。

※セキュリティに関しては自分は詳しくないのでその編の説明は割愛します。ご了承ください。
送信した写真を傍受できる可能性がある(と思う)ので気を付けてください。

##やってみた
実は会社でデモ目的としてやったことがあるので復習として余裕だろう～と思ってました。
ですが、かなりはまってしまいました。ハマったことと解決は後述しています。
やりたかったこともありましたが、正直調べもので1日が終わりましたのでほぼサンプルコードそのまんまです。

[githubに念のためソースを挙げています][git-1]

##ハマったこと

 - LCDが映らない(約1時間ハマル)
    - 原因:`M5.Begin()`を忘れていた。これを抜いたら**ダメ、絶対**
 - `Local IP`が設定できない(約4時間ハマル)
    - 原因1:`softAP()`後に`delay(100)`を入れないと`dhcps send_offer udp_sendto result 0`とエラーが出て再起動がかかる
    - 原因2:自IPとゲートウェイIPを同じにしていない(これは個体差あるかもですが自分のではかなり時間がかかりました)
    - こちらの記事のおかげで脱出できました -> [ESP-WROOM-32のsoftAPモードを使ってWiFiコントロール・カーを製作(2)][Link-3]
 - 猫が膝に乗ったり、甘えてきたりしてかまってしまう(エンドレス)
    - 強い気持ちを持つことで打ち勝つ(不可能)



##最後に
web系は本当に難しくてついていけないです。
かなりの時間かけないとできるきがしないです・・・

本当は画像表示とかしたかったのですが調べていくと、内部ROMにindex.htmlを埋め込んでおく方法などが出てきて調べるのと始めるのにかな～りの時間がかかるので今回は復習だけで終えました。
また、年末の連休で修業したいと思います。

##調べてたら勉強になった記事を並べてみました
[M5Stackで簡易WiFiチェッカーをつくってみた][Tips-1]
[ESP-WROOM-32のsoftAPモードを使ってWiFiコントロール・カーを製作(2)][Link-3]
日報がTILだったお陰でGithubとMarkdownがわかった話



DIP Advent Calendarの21日目です。

# TL DR;

挫折せずにMarkdownを身につけられたのも or 読み書きできるようになったのも、
会社のGitリポジトリを壊していないのもTILのおかげ。
初心者こそTILをはじめよう。


## はじめに
はじめまして、 rik.cacaoholicです。
文系新卒として今年ディップに入社し、現在phpで採用支援ツールの開発に携わっているエンジニアです。

入社当初は複数人で本格的な開発した経験はなく、
Markdownの書き方も、Githubの仕組みもわかりませんでした。
そんな今思うと危うく右も左もわからない状況から

- Githubの運用方法/注意点
- Markdownの書き方

を身に付けさせてくれた仕組みとして、
**日報がTILで良かった！**
と思ったことを開発初心者視点で共有させていただきます。

参考になれば幸いです。

## TILとは
 Today I learnedの略。
「今日、私が学んだ/知った」ことをmarkdownファイルに文章でまとめ、githubのレポジトリで管理していくこと。
[TILのやり方](https://qiita.com/nemui_/items/239335b4ed0c3c797add)

## TILを日報にするには
TILのPull Request(PR)に日報を記載します。
新卒全員で以下のルールで運用していました。

### 運用の流れ

1. 出勤したらmasterから`アカウント名/今日の日付`のブランチを作成する。
1. 業務中に`学んだこと`、`知ったこと`をMarkdownでまとめて、リポジトリに追加する。
1. 退勤前にcommit/pushし、PRに日報を書く。
1. 翌日出勤時に、他の新卒とお互いの日報PRをComment/Approveでフィードバックする。
1. 最後にApproveした人がに過去の日報ブランチをMergeする。
1. 各自でMergeしたブランチを削除する。

## 日報がTILのメリット
Google DriveやDocbaseで共有する日報でなく、
日報をGithubで共有し、Markdownで書くTIL形式だったお陰で
以下のメリットがありました。

### Githubでやるメリット

- githubの使い方・運用の練習ができる
- github運用で注意すべき点を練習できる
    - 作業ブランチの最新化
    - PRのマージ先ブランチ、コードの差分確認
    - 共同作業しているファイルのコンフリクトの解消  
- 失敗しても実業務に影響が出ない 
  - 突然push, pullができないパニックになる
  - 誤ってmasterブランチにマージしてしまった
  - 間違ったリカバリー方法を実行してしまい、ファイルが消えた
- 定常作業の効率化を意識して行動できる
   - PRのテンプレートを作成し、すぐに日報が書けるようにした
   - .gitignoreで余分なファイルをcommitしないようにする
- どういうフィードバックをしたらいいか学べる 
    - チームのコミュニケーションの雰囲気がわかる
    - 指摘/質問対応で何を明確にしたらいいかわかる

### Markdownで書くメリット
- Markdownの書き方が身につく
    - 毎日日報を書くので次第にMarkdown記法を覚える
    - 内容がある程度決まったものを更新するので、成長がわかる
- テキストエディタを使いこなそうとする
    - linterを入れて編集しやすくする工夫をする

### TIL方式のメリット
- 振り返りやすい資料作り/管理の練習ができる
    - PR=日報(１日の記録)、TIL=開発/業務知識で粒度を揃えた管理が便利なことに気づける
    - フィードバックで他の人が読みやすい資料かわかる
- 記録しやすい資料作りを試行錯誤できる
    - 自分にとってまとめやすい方法を試行錯誤できる

## 日報がTILだったから

実際に今開発をしていて、

「TILでやっててよかった！」
「TILでの失敗があるかもだから、開発では気をつけよう！」

という学びがあって、**入社後まだ会社のGitリポジトリをまだ壊していません**。

また、書く内容が決まっている日報からMarkdownで書くようになったので、

「１日の業務の流れはテーブルをつかう」
「順番がわかりやすいように目次をつける」
「項目の粒度がわかるように＃の個数を考える」

具体的な書き方のイメージがつきやすく、挫折せず毎日続けられ、Markdownを覚えることができました。

日報をTILにしよう！と考え、仕組み化した先輩方のおかげでGithubやMarkdownを挫折せずに習得できました。本当にありがとうございます。

## 最後に

開発初心者的に、

**TILの日報なら、GithubとMarkdownを使うから、挫折せずに開発業務で即使える経験ができる！**

と思っています。

ここまで、読んでいただきありがとうございました。
Docker setting のShared Drivesでエラーが出たときの対処法

# 概要
DockerのShared DriveでDドライブを指定したら
FireWallのエラーが出たので、その時の対処方法を載せます。
### 環境
OS : Windows10 pro (64bit)
セキュリティソフト： Norton(ノートン)

### エラーメッセージ
Firewall detectedということでファイアウォールに引っかかってしまった模様。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/239956/c9ccf0c8-0b55-1b8b-4e8e-aa071108f72e.png" width=70%>

### 公式Help

リンク先のドキュメントも載せておきます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/239956/973e88e2-ed58-2a3c-e54d-6ed68fefb078.png" width=70%>

> 10.0.75.1 on port 445 (the Windows host) from 10.0.75.2 (the virtual machine)

という事なので、Windows10 pro 以外の方はipアドレスを[10.0.75.2]に読み替えて実施してください。


# 対処法
まずはNortonのファイアウォール設定を開きます。

 手順1 : [設定] > [ファイアウォール] >[トラフィックルール]
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/239956/fbc28cf4-774d-084c-d98a-d815266c2472.png" width=70%>

 手順2 : [追加する]をクリック
 手順3 : [許可] にチェックを入れて[次へ]
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/239956/26daf89a-67aa-9bcc-b106-550a9c64c66a.png" width=70%>

 手順4 : [その他のコンピュータからの接続]にチェックをいれて[次へ]
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/239956/19b2655f-55f6-00fb-190f-83b7530dfcf4.png" width=70%>

 手順5 : [下記のリストにあるコンピュータとサイトのみ] にチェックを入れて[追加する]をクリック
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/239956/2df80d4c-7f14-3658-86a5-c3d07775b111.png" width=70%>

 手順6 : [ネットワークアドレスを使う] にチェックをいれて、以下の内容で[OK]
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/239956/fea09072-d55c-79f7-7238-850bf0e6df23.png" width=50%>

 手順7 : リストに追加後、[次へ]をクリック
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/239956/21ccbfb5-9023-6a34-c4ad-13d129414fdb.png" width=70%>

 手順7 : 以下の設定をして[追加する]をクリック

+ 許可したいプロトコル： TCP 
+ どの種類の通信またはポートを許可しますか: [下記のリストにあるすべてのポートに一致する場合のみルールを適用する] 

 手順8 : 指定するポートを設定するし、[OK]をクリック
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/239956/87f2aa56-f4a3-5eb2-e196-ee82687da929.png" width=70%>

 手順9 : 指定するポートを追加したら[次へ]をクリック
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/239956/54f24957-9024-2b3f-9db7-f6f649bc4ec6.png" width=70%>

 手順10 : 特に変更しないで[次へ]をクリック
 (ログを残したい場合はチェックを入れて[次へ])
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/239956/298e6193-96ca-c262-1cce-bb5c3beb544c.png" width=70%>

 手順11: 名前を入れて[次へ]
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/239956/51b21edf-dd95-7c32-611b-1e68dcce377f.png" width=70%>

 手順12: [完了]をクリック
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/239956/b27dc64d-5529-1e6d-46d0-c4eb4bfb6370.png" width=70%>

 手順13: 追加されたルールを上に移動する
　※ 遮断ルールより上に移動
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/239956/3fedc234-bb34-cab1-33d2-6d0b96cc01fc.png" width=70%>


# 備考

取り急ぎの対応ですが、とりあえずエラーメッセージは出なくなりました。
今後もFirewall関連の問題が出てきたらここの記事に追加していきたいと思います。
Python実践データ分析100本ノックで10本くらい打ってきた学びのまとめ

## pandasをどれだけ使い倒すかが今の時代大事

最近よく売れているPython実践データ分析100本ノックに毎日挑戦しています。
今回はその中から単純なものから必要なものまで得た学びを共有させていただきます
(随時更新中です)

この本は実践的な例題が100本も載っています。[(本のリンク(Amazon))](https://www.amazon.co.jp/dp/4798058750)

今後のトレンドとして
**「PythonってVBAよりめっちゃシンプルにコード書けてめっちゃ資料作成が捗るわ！」**
といった**ExcelとPythonの合わせ技ができるビジネスパーソン**が社内でモテると思っています。

備考ですが、**オライリー本より秀和システムの機械学習の本の方が軽くて実践的で安くておすすめ**です(オライリー本もお金があるときは買ってます。)

早速Jupyterでコピペでいけるようなサンプル付きの例題をいくつか紹介させていただきます。(本の内容とはちょっと違います。すべては紹介できません。コスパは抜群なのでぜひお買い求めください)

>(2019/12/21)@konandoiruasaさんよりコードのCSVがURLから読み込めないという指摘をいただきました。もしそういったことが起こったら以下を実行ください。@konandoiruasaさんありがとうございます。

``` python
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
```


## データを読む

シンプルにデータを読みます。

``` python
import pandas as pd
customer_data= pd.read_csv('https://microlearning.site/pydata/ch1/customer_master.csv')
customer_data.head()
```

いろんなデータを読みまくる

``` python
import pandas as pd
transaction_1 = pd.read_csv('https://microlearning.site/pydata/ch1/transaction_1.csv')
transaction_1.head()
```

``` python
import pandas as pd
transaction_2 = pd.read_csv('https://microlearning.site/pydata/ch1/transaction_1.csv')
transaction_2.head()
```

## データを結合(ジョイン)する
``` python
transaction = pd.concat([transaction_1,transaction_2],ignore_index=True)
transaction.head()
```
長さを比べると**transaction**は**transaction_1**と**transaction_2**を合計した列数になっていると思います

``` python
print(len(transaction_1))
print(len(transaction_2)
print(len(transaction))
```




##更新履歴
- 2019/12/21 新規作成
[Tips]AWS Lambdaにzipファイルアップロードをコマンド一発で行う

# 前提
- Node.js
- aws-cliインストール済みであること

# 説明
lambda関数をzipアップロードする場合、zipに固めて管理画面ポチポチするよりも、npm(Node.jsの場合)でスクリプト化しておくと良い。

## コード
```json:package.json
    ...
    "scripts": {
       "predeploy": "zip -r function.zip * -x *.zip *.json",
       "deploy": "aws lambda update-function-code --function-name [関数名] --zip-file fileb://function.zip"
     },
    ...
```

## 実行
```shell
npm run deploy
```

# 補足

npm-scriptsの「pre」プレフィックスを付けると、特定のコマンドの前に自動で実行される。
なので、上の例でpredeployを直接実行する必要はない。
「post」プレフィックスも同様で、事後処理を入れたい場合に使う。

# まとめ

デプロイは何度も行うことになるので、トータルで見ると時間短縮につながると思います。
micro:bit で LINE Things を作ろうしてる話 (絶賛大苦戦中)

この記事は 「[IoTLT Advent Calendar 2019](https://qiita.com/advent-calendar/2019/iotlt)」の 21 日目の記事です。

## はじめに
「 micro:bit で LINE Things 」って、別に公式サンプルがありますよね。

  - line-things-starter/microbit/arduino/sample/<br>
  https://github.com/line/line-things-starter/tree/master/microbit

でもこのサンプル、micro:bit を Arduino 化しているので、micro:bit のブロック エディターが使えなくなるんです。

つまり、micro:bit でこういうことをしてみたかったのです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90361/d63bc6c5-96ab-5f45-80a1-45503b01f3f7.png)

先に書きますが、**できてません**。

## 苦難の道のり
とりあえず、カスタム ブロックを作る例を探してみました。

- Custom BLE Services with Micro:bit<br>
  https://www.hackster.io/pelikhan/custom-ble-services-with-micro-bit-6c9879

これは、BLE を使うカスタム サービスの例として、温度をとって BLE で Notify するサンプルです。

このファイル構成をマルっとパクり、公式サンプルと下記 LINE Things の公式ドキュメント記載のデバイスの条件を満たすよう実装しました。

  - デバイスを作成する - LINE Developer<br>
  https://developers.line.biz/ja/docs/line-things/create-devices/


。。。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90361/9ec4b4ec-c327-39e9-48d4-e5513e183271.png)

全く Things を見つけられません。

イロイロ設定を変えてみながらトライしてみましたが、BLE デバイス名を上書きすると見つけられないことがわかりました。既知の問題らしいです。

  - Feature request: Add option to change the BLE name <br>
    https://github.com/lancaster-university/microbit-dal/issues/306

で、BLE デバイス名を上書きせず、既定のもの (`BBC micro:bit [xxxxx]`) を使って Advertise してみると、LINE アプリ上から検出することが可能になります。

でも繋がりません。
micro:bit と事前にペアリングしても、接続がうまくできていないっぽいです。
ﾀｽｹﾃ...

## まとめ

できているのはここまでなので、強引にまとめます。

  - micro:bit の LINE Things 拡張ブロック作成に挑戦
  - 結果、うまくいっていない。できないのかもしれない。
  - micro:bit は BLE 名を書き換えちゃダメ
  - ペアリング出来ていてもつながらない

ごめんなさい🙇‍♂️
バラバラに数えてみる

小ネタ

#はじめに
`random()`で数字を作ると重複がでるので、例えば１ー２０の間でバラバラな数字を作りたいなってときにどうしよう

#やってみました

```splunk:SPL
| makeresults count=20
| streamstats count
| eval _time=_time - random() % 20
| sort _time
```

|_time|	count|
|:-:|:-:|
|2019/12/21 15:08:19|	3|
|2019/12/21 15:08:20|	19|
|2019/12/21 15:08:22|	11|
|2019/12/21 15:08:24|	16|
|2019/12/21 15:08:26|	13|
|2019/12/21 15:08:27|	6|
|2019/12/21 15:08:27|	9|
|2019/12/21 15:08:27|	18|
|2019/12/21 15:08:31|	4|
|2019/12/21 15:08:31|	7|
|2019/12/21 15:08:34|	2|
|2019/12/21 15:08:34|	8|
|2019/12/21 15:08:35|	15|
|2019/12/21 15:08:35|	20|
|2019/12/21 15:08:36|	10|
|2019/12/21 15:08:37|	5|
|2019/12/21 15:08:37|	12|
|2019/12/21 15:08:37|	14|
|2019/12/21 15:08:38|	1|
|2019/12/21 15:08:38|	17|

あとは`appendcols`とかでくっつけてあげる。

#windbag
なんかいろいろな言葉がでてくるコマンド

```Splunk:SPL
|windbag
|head 20
|eval _time=_time-random()
|sort _time
|table position
```
これまた20個のばらばらの数字
どのみち`random()`にはお世話になります。

#まとめ
splunkの`random()`って精度がよくて、そこまでバラバラにならない。

>This function takes no arguments and returns a pseudo-random integer ranging from zero to 2^31 -1.

`0...2147483647`ということらしい。


これらを使えば、以外と実データを模擬するときには使えます。
結構バラバラなデータを作るのってほんと大変です。
供養したいことがいっぱいあります

#ついにアイデア＆作りきれなかったものの供養をします、
##MA9のアプリについて
MA9のアプリですが考え方と着手点がよかったんですが。
ビルドアップができませんでした
理由は遠隔地開発は難しいということです。
近ければいくらでも集まれま。
遠隔地だと結局チャットになってしまうのです。
これが一番ダメだった反省点です。
##OSC in nagoya２０１６ハッカソンの反省点
これはいっぱいあります。
それは実は自分自身が実は開発することに燃え尽きてしまったときに参加していまいました。
グループのメンバーには迷惑かけたのかなと思います。
ですが燃え尽きている本人が一番難しいことをやってしまうというのはすごいのですが。
実は誰でも良かったんですが燃え尽きてるやつほどやっちゃうんですよ。
最後に<strong>実は伴野さんに『東京来いよ』と誘っていただけましたが</strong>自分はその一言でホッとしてしまいその後一般職に移りハッカソンからも離れました。
もう肝炎のせいで自分は身もココロ・カラダもぼろぼろだったという状況で参加していましたので伴野さんの言葉は自分たちに取ってありがたかったのです自分にとっては通院のこともあるので断る方向性しかなかったのです。
ここは初めて書いてますだから自分の本心への供養なのです。
やっと書けた。
##MA2017の反省点。
作品史上最高でした。
今までのMA作品て一番良かったと思います。
最高のメンバー寺澤くん・岩田さん・しらちゃん・俺・チェアマンとして瀬谷兄さんを呼び最高に盛り上がった作品だったような気がします。
僕にとって忘れることができない最強のチームです。
ですが正直言うとみんな職業人（社会人）なのです。
仕事が必ず待っています。
開発が止まり気味になり本当は実はアーバンデータチャレンジ出したいと思っていたのですが。
残念ながらみんなの仕事とと自分の繁忙期を優先しました。
あとの心の心残りは実はプレゼンバトルのときバラクルードの副作用で咽頭炎になってしまい未経験の岩田さんに任してしまいました。
声が出なくてもなれている自分が無理すべきだったと反省しています。
<strong>岩ちゃんごめんな</strong>

##Hack-chu2018の反省点
正直言ってみんなの考えそうなことを作ろうとしてしまいました。
あっと言わせるものを考えるべきでした。
正直Hack-chu2018優勝チームのまたたびってまだ進化しているんです。
本当はこのようなアプリが作りたかった。
だけど優先度は２日で作り上げられるかという事を考えた結果アリキたちな発想しかできませんでした。
常に発送できるアプリでいいこのとき思いました。
<strong>またたびバンザイ！！</strong>

##MA2018の反省
これははっきり言って自分が前立腺を壊してしまい何もできなかったということです。
病気をやっちゃだめです。
何も発想できる状況ではなく身動きも取れない状況でした。
正直コレが一番きつかった。

##MA2019の反省
これは良いアプリだったのですが。
残念ながら俺地震がメインから離れメンターとして動くことにしたので自分自身が動いていたらどうだったんだろうかと考えてしまっていました。
メンターならばメンターに徹するべきです。
学生がメインのチームだったので学生に運営を任せることこれが重要なのです。
自分たちが引っ張ることではないです。
今回も未参加でしたがいい作品だっただけに残念でした。
まだあの最大の事件は書きません。
大垣Pythonハッカソン参加者の人は口に出すこと禁じます。
これが最大の懺悔ですがここでも書けないので許してください。

今までのことは今年のうちに懺悔と供養終えちゃいましょう。
Google のクライアントライブラリで認証するときにアカウントを切り替える方法

# はじめに

Google のクライアントライブラリ (https://apis.google.com/js/api.js) を使って OAuth 認証するサンプルは多くありますが、複数アカウントを切り替える方法の記事が少なかったので記載します。

# 実現方法

認証時にオプションを 1 つ設定するだけです。

```javascript
const options = new gapi.auth2.SigninOptionsBuilder();
options.setPrompt('select_account');
gapi.auth2.getAuthInstance().signIn(options);
```

これを指定しないと、初回のログイン時はポップアップが表示されてアカウント選択できますが、アカウントを切り替えようと思ってログアウトして再ログインしても、前回認証したアカウントで自動ログインするため、ポップアップが表示されず、アカウントの切り替えができませんでした。

[ドキュメント](https://developers.google.com/identity/sign-in/web/reference#gapiauth2signinoptions)に書いてある通りでした。

# 宣伝

記載内容は、https://note.aprifield.com (Markdown でメモを取るサービス) を開発中に調査した内容です。
vim helpから学ぶvim

# 概要
Vim初心者・中級者を読者として想定しています。
[vim help](https://vim-jp.org/vimdoc-ja/)は非常に分量が多くそして何より親切にあふれています。
これほど日本語対応されていて、細かく使用方法がのっているものはなかなかないでしょう。
この記事ではvim helpには何が書かれているか、vim helpを読む前のとっかかりとなればいいなと思います。

# vim helpの開き方使い方
```:コマンドラインモード
:help
```
以下の記事が参考になります。
[Vimヘルプを日本語化！](https://qiita.com/KeitaNakamura/items/b87322d38fef4da3bac5)
[:help を引くときのちょっとしたTIPS](https://qiita.com/sgur/items/568221ff37b7a590cebc)
[Vim :helpがユニークな3つのポイント、vim :helpを読むための敷居を下げる3つの事柄](https://qiita.com/shinshin86/items/eb41e4fb513bb4d3e3cd)

# vimの操作を学ぶ
初心者は[チュートリアル](https://vim-jp.org/vimdoc-ja/usr_01.html#01.3)を読みvimtutorを使えば、vimの基本的な操作方法を手を動かしながら覚えられます。
[操作方法一覧](https://vim-jp.org/vimdoc-ja/quickref.html)

## vimの小技
[usr_12](https://vim-jp.org/vimdoc-ja/usr_12.html)の小技も覚えておくと便利です。
置換などで利用される正規表現については[@koronさんの記事](https://www.kaoriya.net/blog/2019/12/01/)が参考になります。
vimの小技を覚えていくとVimがどんどん楽しく便利になっていきます。

# コマンドラインモードとファイル操作
[usr_20](https://vim-jp.org/vimdoc-ja/usr_20.html)～[usr_32](https://vim-jp.org/vimdoc-ja/usr_32.html)ではコマンド入力をより便利に行う方法やファイル操作、プログラミングに役立つ機能が書かれています。
コマンドラインモードについてはさらに詳しいページがあるので気になった方は[こちら](https://vim-jp.org/vimdoc-ja/cmdline.html)もどうぞ。

# vim設定の変更
[usr_05](https://vim-jp.org/vimdoc-ja/usr_05.html)にはvimのチューニングについて書かれています。
操作方法を知った後に自分好みのカスタマイズをするようになると思いますがこちらが参考になります。

自分で何にも考えずに便利な設定を任せたい場合は[vim bootstrap](https://vim-bootstrap.com/)なども利用できます。設定されたコマンドリストは[README](https://github.com/editor-bootstrap/vim-bootstrap#commands)に書かれていますので、そこから自分好みの設定にいじっていくのも一つの手です。

## さらにカスタマイズ
[usr_40](https://vim-jp.org/vimdoc-ja/usr_40.html)～[usr_45](https://vim-jp.org/vimdoc-ja/usr_45.html)ではより上級のカスタマイズについて書かれています。
自ら新しいvimの世界を開くのであれば必読です。

# vimプラグイン
vimのプラグインを作ってみたいと思ってもどうしたらいいかわからない。
そんな疑問にもvim helpは答えてくれます。
vimscriptの書き方からpythonやruby等を使用しての書き方まで乗っています。

[vimscript書法](https://vim-jp.org/vimdoc-ja/usr_41.html)
[vim scriptのテストについて](https://vim-jp.org/vimdoc-ja/testing.html)

pythonなどのコードのうめこみ
[if_pyth](https://vim-jp.org/vimdoc-ja/if_pyth.html)
[if_ruby](https://vim-jp.org/vimdoc-ja/if_ruby.html)
...

痒い所に手が届くものがないときは自分で作ってしまいましょう。

# etc...
vim helpページには、
複数のファイルを開く[マルチウィンドウについての解説](https://vim-jp.org/vimdoc-ja/windows.html)や、
vimをより便利に使うための[tips](https://vim-jp.org/vimdoc-ja/tips.html)
あんなことができないかなぁを探す[How to](https://vim-jp.org/vimdoc-ja/howto.html)
などもあるので、いろいろと散策してみると新しい発見があり楽しめます。

# 終わりに
vimのリファレンスは恐ろしいほどの情報量があり、ここに述べたものはその中の一部でしかありません。vim helpを読むことはvimを理解する近道です。
今まで読んだことのない人もこんな使い方があったのかと読んでみることをお勧めします。
フィボナッチ工数見積について

# 概要
エンジニアとして経験を重ねていくと、避けては通れない「工数見積」。
そんな見積の方法として最近取り入れてみた方法があるので、その紹介と使ってみた感想のメモ。

# フィボナッチ工数見積（プランニングポーカー）
大まかにいうと、機能を可能な限り細かく分け、難易度をフィボナッチ数（２、３、５、８、１３、２１）でつけて工数を見積を行っていく方法。
詳しくは以下のサイトに書かれている内容がとても参考になりました。
* 参考にしたサイト
  * https://www.jabba.cloud/20170613054635/

# 実際にやった手順
一人開発チームみたいな状況だったので、チームでの作業はほとんどなかったので
以下のように見積をやってきた。

* **機能の細分化**
  * 作業する単位などできる限り細かく分ける
  * 各機能の粒度はできる限りそろえる
* **フィボナッチ数の割り振り**
  * 細分化した機能の難易度に応じてフィボナッチ数を振っていく
  * フィボナッチ数：２、３、５、８、１３、２１
* **難易度を工数に直す**
  * 掛け率決めて工数出す
  * 自分は ```0.5人日``` でやっていた（2の難易度のタスクが1人日で終わらせられる想定）
  * 明らかに工数が大きくなりすぎたりした場合は、ほかのタスクと比較しながら調整して最終的な工数を決める

# やってみてどうだったか
あくまでも個人の感想です

* メリット
  * 難易度から工数を機械的に算出できる（多少手直しはいるものの）のが楽だった
  * 過去の開発経験から難易度を考慮するため、実際に作業したときの工数と大きくぶれることが少なかった
  * 過去の開発の似ている機能の見積を参考にしやすい
    * 過去の難易度決めの時のフィボナッチ数と実際の工数を比較するとさらに参考になった
* デメリット
  * 感覚値に近いものなので、説明を求められたときに納得のいく説明をできないことがあるかも
    * チーム全体でやるなど複数人でやることでこのデメリットは解決するのかも

# まとめ
見積はどこまでつきつめても「予測」なので、実際の工数と完全に一致することはほとんどないと思う。

だからこそ、正確にやろうと見積に時間をかけすぎるのはもったいない気がするので、
ルールに則ってある程度の工数を機械的に出してしまうのも１つの方法なんじゃないかと思います。

その際に採用するルールの１つの候補として、フィボナッチ工数見積は個人的にはありかと思っています。
あまり複雑な計算とかをするわけではないし、個人単位の作業見積では導入しやすいかと思います。
上司とかに納得してもらえるよう説明するところはうまくやらないといけないとは思うけど。。。
[Python]値段・サイズなどの文字列を綺麗なint型に変換する

いろんなECサイトをスクレイピングしていると、値段や長さ、重さといった「比較可能な数字なんだけど、表現が多様な文字列」に出くわす。

そんな文字列を一律にきれいなint型に変換する方法のメモ。
(今回は小数点以下は無視して整数型として取り出す)


### 変換コード
```python:convert.py
# ライブラリのインポート
import re

# 全角半角が混じった小数点つき表現
price = '値段１,８００.00０円'

def convert(price):
  splitted = price.split('.')
  nums = [re.sub("\\D", "", s) for s in splitted]
  return int([n for n in nums if n != ''][0])

int_price = convert(price)
print(int_price)   # => "1800"
```

小数点であるコンマと数字表現以外の文字列は無視し、全角半角は全て半角に直した上でint型に変換できた。
AtCoder対策　bit操作

#前書き
筆者は、競技プログラミング低レートなので、ご指摘などあればぜひよろしくお願いいたします！また、筆者のレベルが上がり次第この記事も更新していくつもりです。

#bitとは
普段生活では10進数で物事を考えますが、PCの世界では基本0と1の二進数で計算されている(10進数:4 -> 2進数:11)ため、二進数でコードを書いた方がスッキリすることが多い(可読性は落ちるかもです)。特に全状態について処理しなければならない時、bit全探索は便利です。

#bit操作とは
atcoderでbit操作を要求される場面は、ABCのE問題くらいまでは基本的な操作(and(&),or(|),xor(-),not(~),算術シフト(<<,>>))とbit全探索くらいなので、簡単にまとめます。


#基本操作
##and(&)
演算子(&)の左辺と右辺のビットを比較して、同じ位置のビットが両方1なら1にします。

```java
int a = 2;   //10
int b = 3;   //11
int c = a & b;  //(10 & 11) = 10
System.out.print(c);  //2
```

##or(|)
演算子(|)の左辺と右辺のビットを比較して、同じ位置のビットについて片方1なら1にします。

```java
int a = 2;   //10
int b = 3;   //11
int c = a | b;  //(10 | 11) = 11
System.out.print(c);  //3
```

##xor(^)
演算子(^)の左辺と右辺のビットを比較して、同じ位置のビットについて片方だけ1なら1にします。

```java
int a = 2;   //10
int b = 3;   //11
int c = a ^ b;  //(10 ^ 11) = 01
System.out.print(c);  //1
```

##not(~)
演算子(~)の右辺のビットを全部反転させます。

```java
int a = 2;   //010
int c = ~a;  //(10 ^ 11) = 101
System.out.print(c);  //-3
```
notで表される2進数の数え方には注意が必要です。まず10進数を2進数に変換する時ですが、例えば10進数で8の時、2進数では1000です。しかし、これは正確に書くと01000になります。左端の数字は符号ビットといって、これが1だと負の数を表します。負の数の二進数の数え方はhttp://www.infonet.co.jp/ueyama/ip/binary/signedbin.htmlなどを参考にしてください。

##シフト(<<,>>)
演算子の左辺について左(右)に右辺だけずらします。

```java
int a = 2;   //10
int b = a << 1;  //(100) = 4
int c = a >> 1;  //(01) = 1

System.out.print(b);  //4
System.out.print(c);  //1
```

#bit全探索
全状態を表して、各状態について処理をしたい時bitを使えば簡単にできる時があります。例えば人が5人いて、その中から何人か選んだ時、その中に２０才以上の人が2人以上が含まれるのは?みたいな時、

##解法
bit全探索を行い、立っているbitの数が2以上でかつそのbitの位置の人が20以上ならカウントする。

##イメージ
bitは 00000 -> 00001 -> 00010 -> 00011 -> 00100
と遷移していく。例えば00010は1番目の人のみのグループを表しており、00101は0番目と2番目の人のグループを表している。

##コード
```java

static void solve(){

		int[] age = {12,14,20,4,24};
		int ans = 0;
		for(int bit = 0;bit < (1<<5);bit++){      //bit全探索=全状態について処理
			if(countbit(bit,5,age) >= 2){
				ans++;
			}
		}
		System.out.println(ans);     //8
	
       }

//立っているbitの数を数え、そのbitの位置の人が20才以上か見る。
static int countbit(int bit,int n,int[] age){						
		int count = 0;
		int x = 1;
		for(int i = 0;i < n;i++){
			if((x & bit) != 0 && age[i] >= 20){
				count++;
			}
			x <<= 1;
		}
		
		return count;
		
}

```
ライブラリとモジュールとパッケージの違いについて

 
## 状況

pythonの勉強をしていて、ライブラリやモジュールなど似たような単語で違いがわかりにくいのでまとめておこうと思った。通じれば問題ないのだが、人に説明するときなどに厳密性にかけると誤解を招く原因にもなるのでこの際はっきりさせようと思う。


## それぞれの違い

まずはじめにライブラリに関しては厳密な定義はされてないみたいなので、一番わかりやすくて広く使われてる定義の仕方を使った。

### モジュール

モジュールはファイルのことで、pythonであれば拡張子の.pyがついたものは全てモジュールである

### パッケージ

次にパッケージはモジュールをまとめたディレクトリのことを指す

### ライブラリ

最後にライブラリはパッケージをまとめたディレクトリのことを指す

階層的には

ライブラリ  >  パッケージ  >  モジュール

他の定義のされ方も紹介しておくとパッケージのことをライブラリと呼ぶこともあるらしい

確かに小さな機能しか持たない場合は1つのパッケージしかないこともありうるので、それはライブラリと呼ばずにパッケージと呼ぶのは仕方がない気もする

### 最後に

ライブラリに関しては定義が曖昧な部分もあったが、モジュールに関しては厳密に定義されてるので、間違えないようにしたい
マッピング中毒度自己診断表


10個以上該当する人は中毒の疑いがあります。少し心を落ち着けて人生を振り返ったり一休みしたりしましょう。

## 1.どんなときでも手が使えるようにカバンは背負うか体に巻き付けられるものを愛用している
## 2.普段から歩きやすい服装
## 3.防寒、避暑、水分補給を忘れない
## 4.雨が降っても手が使える装備は常に心がけている
## 5.時々、通勤・帰宅途中の駅で降りる
## 6.降り立った駅から5kmくらいは普通に歩く
## 7.電車やバスの待ち時間が苦にならず、むしろ嬉しい
## 8.尺取虫のように止まっては進む
## 9.看板を見ると条件反射的に写真を撮る
## 10.観光地でも記念写真を撮るのを忘れる
## 11.人が途切れるシャッターチャンスを待つ習性がある
## 12.行き止まりの道でも入って行く
## 13.住宅地では足早になる
## 14.水域や壁など、それ以上進めない終端があると安堵する
## 15.一筆書きで遠回りしながら歩く
## 16.行きと帰りで経路を変える
## 17.歩測ができる
## 18.店舗の入り口だけに興味があり、中には興味がない
## 19.看板のない店舗の前ではきょろきょろ落ち着かない
## 20.建物の階数が気になる
## 21.トイレでは設備の細かいチェックをしてしまう
## 22.公園で遊具を見るとひとつずつマッピングしたくなる
## 23.テレビに旅の風景が映るとつい手がスマホやメモ用紙を探してしまう
## 24.電車の窓から看板が見えるとそわそわする
## 25.バスに乗ると停留所マッピングをしてしまう
## 26.近所の店舗が入れ替わるとマッピングするまで落ち着かない
## 27.マッピングしない日があると罪悪感がある
## 28.初めての土地でも空から見た記憶がある
## 29.ポケモンやIngressをやってるヒマが無い
## 30.商用地図を見るとつい目をそらしてしまう
## 31.物陰からこちらの様子を窺っている人に気づいて慌てて退散したことがある
## 32.飛行機が着陸態勢になる頃には地表の街並みのトレースやタグ付けのシミュレーションをしてしまう

Happy Mapping!
scpは注文の多いコマンド？

# scp (secure copy) コマンドの注意事項

scpは、リモートホストで起動したセキュアシェルへコマンドラインを渡して実行されるため、要注意。「ケツスラ」問題も面倒ですが。

## リモートのパスにスペースが含まれるとき、"scp: ambiguous target"エラー

通常のコマンドでは、パスにスペースが含まれるとき、「\」（バックスラッシュ）でエスケープするか、全体を「'」（シングルクオーテーション）か「"」（ダブルクオーテーション）でくくります。

```
ls test\ location
ls 'test location'
ls "test location"
```

scpの場合、パスが、まずローカル側で評価されて転送、さらにリモート側で評価されてコマンド実行されるので、2重にエスケープしてあげる必要があります。色々やってみたけど、'"remote path"'が素直で良いかな。。

```
# test.sbをremote_hostへ転送

scp test.sb pi@remote_host.local:"/home/pi/Scratch\\ Projects/"
scp test.sb pi@remote_host.local:/home/pi/Scratch\\\ Projects/
scp test.sb pi@remote_host.local:'"/home/pi/Scratch Projects/"'
scp test.sb pi@remote_host.local:"'/home/pi/Scratch Projects/'"
```


# ローカル側のファイルパスは2重にエスケープしなくて良い

```
scp 'test file.sb' pi@remote_host.local:"'/home/pi/Scratch Projects/'"
```