OmniAICreator/Qiita-1.07M huggingface dataset:
Railsにおける途中経過の確認

## pry
Railsではpryを使うことによって、プログラムを一時的に止めることができます。
一時的に止めることによって何が嬉しいのかというと、途中経過をみることができます。

大抵の場合、バックエンド側でデータを取得してクライアント側に渡すと思いますが、このデータがどこまで持ってこれているのかだったり、そのオブジェクトが思うような状態になっているのかの確認をクライアント側に来て初めてするのでは効率が悪いです。
プログラムを途中で止めることによって、その時点でのデータやオブジェクトの状態を確認することができます。

```pry-rails```をGemfileに追加し、```bundle install```します。
止めたい場所に、```binding.pry```を追加することによって一時的に止めることができます。

```user.rb
    class User < ApplicationRecord
        def publish_post
            binding.pry
            user.posts.create(title: "hello", content: "world")
            bining.pry
        end
    end
```
```user```に紐づく```post```が1つ作成されるような```publish_post```メソッドを定義して、実際に動かしてみます。
```pry.rb
    pry(main)>  user = User.first
    pry(main)>  user.publish_post
    pry(main)> user.publish_post
    
    From: /app/app/models/user.rb:69 User#publish_post:
    
        68: def publish_post
     => 69:   binding.pry
        70:   self.posts.create(title: "hello", content: "world")
        71:   binding.pry
        72: end
```
↑ このような画面になり、この時点でのオブジェクトの状態などを確かめることができます。
```pry.rb
    pry(#<User>)> self.posts
    => []
```
この時点では```user```に紐づく```post```が作られていないことがわかります。
```exit```して次の```binding.pry```まで飛びます。
```pry.rb
    pry(#<User>)> exit
    From: /app/app/models/user.rb:71 User#publish_post:
    
        68: def publish_post
        69:   binding.pry
        70:   self.posts.create(title: "hello", content: "world")
     => 71:   binding.pry
        72: end

    pry(#<User>)> self.posts
    => [#<Post:0x00007f848c6e0358
      id: 8,
      title: "hello",
      content: "world",
      user_id: 1,
      created_at: Sun, 04 Dec 2022 10:54:52.767992000 UTC +00:00,
      updated_at: Sun, 04 Dec 2022 10:54:52.767992000 UTC +00:00>]
```
2つ目の```binding.pry```では```user```に紐づく```post```が作成されているのが確認できます。
このように段階を踏みながらデータの状態を確認することができます。
```pry-nav```を入れるとより便利になるかと思います。

https://github.com/nixme/pry-nav

## log
ログを見ることでも、途中経過を確認できます。
Railsの開発環境のログは```log/development.log```にたまっていきます。
そのファイルを直接見ても見にくいので```less```コマンドを使います。

https://atmarkit.itmedia.co.jp/ait/articles/1702/09/news031.html

```terminal
    less log/development.log
```
![スクリーンショット 2022-12-04 20.12.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2849988/345d6630-eff6-1e06-d486-e9f6fb44f71f.png)
もっと見にくくなってしまいました。
```-R```オブションをつけることによって、見やすくなります。
```
    less -R log/development.log
```
![スクリーンショット 2022-12-04 20.13.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2849988/0da89950-d397-80ce-c8a3-85c741659a02.png)
```Shift + g```で最終行(最新のログ)まで飛ぶことができます。

```/```を使うことによりファイル内検索ができます。
例えば、```/12-04```とすると以下のように一致する部分の色が変化します。
![スクリーンショット 2022-12-04 20.22.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2849988/adfa4334-37c4-3e0f-c4dd-68c4fcbdb6d3.png)
続・Qiita Advent Calendar の RSS を読む

この記事は、[ラクス Advent Calendar 2022](https://qiita.com/advent-calendar/2022/rakus) シリーズ2の5日目の記事です。

昨日は、シリーズ2には記事の投稿はありませんでした。完走は目指さないのかって？　別に無理して全部埋めようとしなくてもいいと思います。シリーズ2ですし。

**楽しみながら**続けるほうが大事です。隙間が気になって、かつ余力のある人に埋めてもらえばよいと思います。

# Qiita Advent Calendar の RSS を読む

この記事は、[ラクス Advent Calendar 2021](https://qiita.com/advent-calendar/2021/rakus) の7日目に投稿した記事「[Qiita Advent Calendar の RSS を読む](https://qiita.com/amderbar/items/a333c8230a420a5bb9f5)」の続編です。

昨年から自作のアドベントカレンダー新着お知らせボットである「[アドベントカレンダーくろーるくん](https://qiita.com/amderbar/items/d4f2a266e678f04c1510)」を社内で運用しており、これの作成のためにアドベントカレンダーのRSSの仕様を調べていました。今年になってまた動かそうとしたとき「シリーズ」について調査をし忘れていることに気づき、追加調査をしました。

シリーズの概念自体は昨年から存在していましたが、昨年のラクス Advent Calendarはシリーズ1で収まっていました。しかし今年はラクス Advent Calendarでも「シリーズ2」が作成され、そこでようやく調査の見落としに気づいた次第です。

調査の目的は、くろーるくんで新着記事の通知をするとき、どのシリーズの新着記事なのかわかるようにしたい、というものです。目標として以下を明らかにすることとしました。

* 投稿先シリーズの情報はRSSに含まれるのか、含まれるとしたらどのように含まれるのか
* その他昨年との違いはあるか、あればどのような違いがあるか

なお調査方法は実際のRSSを見ることによって行いました。対象としたのは主に「[ラクス Advent Calendar 2022](https://qiita.com/advent-calendar/2022/rakus)」自体のRSSですが、比較のために他にも2, 3のカレンダーのRSSを確認しました。

# 調査結果

## シリーズ情報の有無

RSSにシリーズの情報は含まれないようだと分かりました。ただ記事のentry自体はすべてのシリーズのものが含まれるようです。つまり、

* publishedの日時が同一のentryが複数あるという状態になる
* どのシリーズかはわからないが、publishが同一であれば異なるシリーズであることは分かる
* これはQiitaのカレンダーフィード画面でも同じ

考えてみれば、新着通知の用途であれば別にシリーズの区別は不要かもしれません。

## その他仕様が変わったっぽいところ

シリーズの仕様の他に、どうも今年から仕様が変わったっぽいところがありました。

### 昨年以前のRSSにはアクセスできなくなった

いつごろからかわかりませんが、昨年以前のRSSにはアクセスできなくなっていました。

カレンダーのアーカイブから以前のカレンダーを見てみると、RSSのボタンも削除されていました。またRSSのURLに直接アクセスすると`404 Not Found`が返って来るようになってました。

これによってシリーズについての追加調査が12月に入るまで出来なかったのですが、それはまあ、仕方のないことです。

### Qiita記事の場合、entry要素のcontentに記事全文が含まれなくなった

Qiitaに直接投稿された記事の場合、entry要素のcontent要素には記事本文が入ります。

以前はHtmlタグなどは取り除かれたテキストのみの形式で全文が入っていました。今年からは、形式には変更はないですが、記事が100文字以上ある場合100文字目が「…」になり、それ以降は省略されるようになったようです。

### 外部記事の場合、entry要素のcontentにHtmlタグが含まれるようになった

外部のブログサービスなどに投稿された記事の場合、entry要素のcontent要素には「External Link」という固定の文字列が入ります。

以前は本当にその文字列だけだったと思います。今年からはエスケープされているもののHtmlのspanタグで固定文字列が囲まれた形式になりました。

また以前は接続元の言語設定によって（？）、固定の文字列も「外部記事です」と「External Link」とが切り替わっていたと思うのですが、それもなくなったようです。

ちなみにcontent要素のtype属性はQiita記事は`html`で外部記事は`text`です。これ自体は以前からそうだった気がしますが、設定値、逆ではないかと……。

## 初日のRSS

仕様変更かどうか分からないですが、初日（12/1）にRSSを取得したときは独特な挙動をしていたのでメモしておきます。

まず12/1のRSSはカレンダーによって記事投稿の結果が反映されるまでの時間に差がありました。どれくらいの時間差があったかはあいにくと記録し損ねましたが、朝10時くらいには反映済みのカレンダーがある一方、午後15時くらいまで反映されないカレンダーもありました。

初日の記事がQiita記事か外部記事かの違いによるものかとも思いましたが、どうもそういうわけでもないようでした。反映処理の順番待ちとかそういうのなのでしょうか。

また、反映前は、

* 記事は投稿されていてもRSSのentry要素には入っていなかった
* updatedのタイムゾーンが`Z`で、アクセスした時刻を示していた

反映後は、

* 投稿された記事に対応するentry要素がある
* updatedのタイムゾーンが`+09:00`で、アクセスした日の午前0時を示している

というようにRSSの内容自体にも反映前後で差異があるようです。

# まとめ

Qiita Advent Calendar ごとに配信されている RSS フィードの中身を確認し、その仕様について調査しました。

こういうのってサポートに問い合わせるなどしたら仕様を教えてくれたりするのかもしれませんが、実物を見て調べればいいかと思い問い合わせまではしていません。

この調査結果を受けてアドベントカレンダーくろーるくんの機能にも修正が必要そうです。シリーズについてはともかくとして、RSSから記事全文が取れなくなったのは痛手です。ほんとこれどうしよう……。
ROSと箱庭

さ来年こそはROSを触ろうと思っています。

来年はUnityを触ろうと思っています。
「箱庭」で扱っているUnityの話をまとめて、　
どんな機材を用意するかを考えようとしています。

Unityと箱庭
https://qiita.com/kaizen_nagoya/private/7ae193df6efa1d2f2ba0

その次に、「箱庭」で扱っているROSの話をまとめて、　
どんな機材を用意するかを考えようとしています。
 
きっと二つの記事が整理できた頃に動いていると思います。　

っていうか、今、自宅では、とても貧弱なPC構成です。　
PCの台数と性能から、どちらも動かせないかもしれない状況で、　
機材の手配から始めようとしています。　

Raspberry PIは２つあるはずです。
Raspberry PIでできれば、機材の手配はいらなくなるかもしれません。

 <この項は書きかけです。順次追記します。>

箱庭　
https://toppers.github.io/hakoniwa/

# 1 ROS対応マイコンシミュレータ athrill 颯爽と登場！
投稿日 2019年09月04日
https://qiita.com/kanetugu2018/items/81713a3431482eab0f52

# 2 TOPPERS箱庭/ROS対応版・単体ロボット向けシミュレータ
投稿日 2020年08月16日
https://qiita.com/kanetugu2018/items/c63ad5827b23f9e1bf21

# 3 ROS2でUnity上のTurtleBot3を動かそう！
投稿日 2021年07月22日　更新日 2022年01月28日
https://qiita.com/kanetugu2018/items/26170fab17c74635ea91

# 4 docker環境でUnity上のTurtleBot3をROS2で動かすまで
投稿日 2021年11月27日 更新日 2022年04月23日
https://qiita.com/kanetugu2018/items/b132b48be2b59eb214fb

# 5 Unity上のロボット部品を組み立てて，ROS2でコントロール
投稿日 2022年01月23日 更新日 2022年05月07日
https://qiita.com/kanetugu2018/items/29ee98bc434191eee8f1

環境導入手順は「ロボット・マルチプレイ開発を実現する仮想化技術」の記事に依っている。

# 6. Unity + Oculus Quest2 + ROS2 + 箱庭でロボットを動かす
1 回目：TOPPERS/箱庭に Oculus でダイブできるにようになる
2 回目：VR 空間で移動してモノをつかめるようになる
3 回目：タッチセンサを追加して，VR 空間のロボットを動かせるようになる(本記事)

投稿日 2022年02月11日 更新日 2022年02月13日
Unity + Oculus Quest2 + ROS2 + 箱庭でロボットを動かす(1/3)
https://qiita.com/kanetugu2018/items/95c16865b8ed4e2ed974

投稿日 2022年02月12日 更新日 2022年02月13日
Unity + Oculus Quest2 + ROS2 + 箱庭でロボットを動かす(2/3)
https://qiita.com/kanetugu2018/items/0d57cf85f334cac39419

投稿日 2022年02月13日
Unity + Oculus Quest2 + ROS2 + 箱庭でロボットを動かす(3/3)
https://qiita.com/kanetugu2018/items/9dfbd2cff1ebbc27ba37

# 7 ロボット・マルチプレイ開発を実現する仮想化技術
1 回目：TOPPERS/箱庭に複数のロボット(TB3)を自由に配置して動かす(本記事)
2 回目：Photon対応版箱庭を複数のパソコンで起動して，ロボット・マルチプレイする！
3 回目：Photon&Oculus対応版箱庭使って，複数人で箱庭VR空間にダイブする！

投稿日 2022年03月21日 更新日 2022年05月04日
ロボット・マルチプレイ開発を実現する仮想化技術 Unity + Photon + ROS2 + Oculus Quest2 + 箱庭！(1/3)
https://qiita.com/kanetugu2018/items/28c137b78ec6ec74033a

投稿日 2022年03月21日 更新日 2022年05月04日
ロボット・マルチプレイ開発を実現する仮想化技術 Unity + Photon + ROS2 + Oculus Quest2 + 箱庭！(2/3)
https://qiita.com/kanetugu2018/items/19d8fb22ef983cc5dc49

投稿日 2022年05月01日
ロボット・マルチプレイ開発を実現する仮想化技術 Unity + Photon + ROS2 + Oculus Quest2 + 箱庭！(3/3)
https://qiita.com/kanetugu2018/items/c7c43dd1dcc63292a39e

# 8 ロボット向けヘテロシミュレータ箱庭(ROS2/マイコン制御を統合)
投稿日 2022年07月23日 更新日 2022年08月02日
https://qiita.com/kanetugu2018/items/e1c3a66f429749e5b9df

# 9 マルチECUシミュレーション環境・箱庭がCANデータをROS2で可視化する！
投稿日 2022年08月13日 更新日 2022年08月13日
https://qiita.com/kanetugu2018/items/83f838780f88078386c9

# 関連事項
WSL2 では MMAP(memory mapped)通信できない問題
https://github.com/microsoft/WSL/issues/658

# UDP使うと遅い問題
WEB版ETロボコンシミュレータについて（導入編）
https://qiita.com/YoshitakaAtarashi/items/877d1a0cc5ba94a39755

 ＜この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。＞

### 文書履歴(document history)
ver. 0.01 初稿 20221205
### 最後までおよみいただきありがとうございました。

いいね　💚、フォローをお願いします。

####  Thank you very much for reading to the last sentence.

Please press the like icon 💚　and follow me for your happy life.
FPGAプログラミング大全Xilinx編第2版 クロック利用 #4

FPGAに再入門しようと思いたち[FPGAプログラミング大全Xilinx編第2版](https://www.amazon.co.jp/FPGA%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E5%A4%A7%E5%85%A8-Xilinx%E7%B7%A8-%E7%AC%AC2%E7%89%88-%E5%B0%8F%E6%9E%97-%E5%84%AA/dp/4798063266/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=1S5G3UKPB55O9&keywords=FPGA%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E5%A4%A7%E5%85%A8Xilinx%E7%B7%A8%E7%AC%AC2%E7%89%88&qid=1669893715&qu=eyJxc2MiOiIwLjc2IiwicXNhIjoiMC4wMCIsInFzcCI6IjAuMDAifQ%3D%3D&sprefix=fpga%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E5%A4%A7%E5%85%A8xilinx%E7%B7%A8%E7%AC%AC2%E7%89%88%2Caps%2C151&sr=8-1)を頭からやっていく4日目

時期的にも良いので一人Advent Calendarで25日続ける

今日からは実際のCPU作りのためのことを始める

### 25日終了時の目標
4004等の実CPUの実装

### 目次
| # | タイトル |
|:-:|:-:|
|   01|  [ツール導入](https://qiita.com/Gazyu/items/8f3797abf4ddc88ecacd) |
|  02 |  [実機テスト下準備](https://qiita.com/Gazyu/items/b59e0a1e023005bc02d5) |
|  03 |  [実機テスト](https://qiita.com/Gazyu/items/23ec4da6c241d95bfa8e) |
|04|クロック利用|
|05|未定|


### 環境
【実装ボード】 [Digilent Artix-7 35T Arty FPGA 評価キット](https://japan.xilinx.com/products/boards-and-kits/arty.html#resources)
【OS】 Windows10
【IDE】 Vivado 2022.2

### 今日のゴール
クロックを利用できるようになる



今日も写経が多め

## クロックを利用したLEDチカ
1. 分周機能の追加
今回使用した制約ファイルによると元クロックが100MHzなのでわかりやすいように分周して使用する
本では26bitカウンタを利用してフルビットのときだけ色々しているがもうちょっとちゃんと作るようにする
```HDL:LED_Test.v
~~~~~ここから
reg [25:0] cnt26;
wire ledcnten = (cnt26==26'h2faf080);

always @(posedge CLK100MHZ ) begin
    if(ledcnten)
        cnt26 <= 26'h0;
    else
        cnt26 <= cnt26 + 1'h1;
end 
~~~~~ここまで
```

2\. LED表示用カウンタ
```HDL:LED_Test.v
~~~~~ここから
reg [3:0] ledcnt;
always @(posedge CLK100MHZ) begin
    if(ledcnten)
        if(ledcnt == 4'b1111)
            ledcnt <= 4'b0000;
        else
            ledcnt <= ledcnt + 4'b0001;
end
~~~~~ここまで
```

3\. 全体像
 ```HDL:LED_Test.v
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: 
// 
// Create Date: 2022/12/02 22:34:10
// Design Name: 
// Module Name: LED_Test
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//////////////////////////////////////////////////////////////////////////////////


module LED_Test(
    input   CLK100MHZ,
    output  reg [3:0]   led
    );
    
reg [25:0] cnt26;
wire ledcnten = (cnt26==26'h2faf080);

always @(posedge CLK100MHZ ) begin
    if(ledcnten)
        cnt26 <= 26'h0;
    else
        cnt26 <= cnt26 + 1'h1;
end 

reg [3:0] ledcnt;
always @(posedge CLK100MHZ) begin
    if(ledcnten)
        if(ledcnt == 4'b1111)
            ledcnt <= 4'b0000;
        else
            ledcnt <= ledcnt + 4'b0001;
end
always @* begin
    led = ledcnt;
end
endmodule

```

3\. 結果
![result](http://drive.google.com/uc?export=view&id=1pY8UF_t9uPwS5mcFStCTcwIMlLEI4V-i)

今日はここまで
ECCV2022の量子化論文 (4)

# 概要

この記事では、[ECCV2022](https://eccv2022.ecva.net/)の量子化論文を紹介します。[^1]
[その1](https://qiita.com/kyad/items/969db123c549ca308f39) [その2](https://qiita.com/kyad/items/f70f7ea51fb01ffdb55a) [その3](https://qiita.com/kyad/items/abd7bcc61e2a43dfda97)

[^1]: 画像や数式は論文から引用しています。


# RDO-Q: Extremely Fine-Grained Channel-Wise Quantization via Rate-Distortion Optimization

https://www.ecva.net/papers/eccv_2022/papers_ECCV/papers/136720156.pdf

- 概要：RDO-Q. 各レイに異なるビット数を割り当てる量子化。
- 新規性：各レイヤに異なるビット数を割り当てる方法で、線形時間なので強化学習のAutoQより高速。
- キモ：量子化誤差最小化問題をrate-distortion optimization problem (レート歪み最適化)として解く。
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2448931/e21570c3-ffea-5675-331e-8bcfb6109a90.png)
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2448931/6f6f3052-45dd-5e0c-7cc2-97b1c902ff87.png)
- 評価：ResNetやMobileNetV2で比較した。
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2448931/bf7afeb5-6008-cbe7-1105-739f4fc36e01.png)


# PTQ4ViT: Post-Training Quantization Framework for Vision Transformers with Twin Uniform Quantization

https://arxiv.org/abs/2111.12293

- 概要：ViTのPTQ。
- 新規性：従来よりも高精度で精度劣化を1%未満(8bit)で抑えられる。
- キモ：行列積の量子化に着目する。
  1. Twin Uniform Quantization. 量子化幅を2つ用意する。
     ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2448931/27d22e1c-9faf-a025-2c55-00196d194df2.png)
  2. Hessian最小化で量子化幅(scaling factor)を決める。
- 評価：ViT等で実験した。
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2448931/a9b9a2e4-0f5a-60a8-c515-3406a5869abb.png)


# Bitwidth-Adaptive Quantization-Aware Neural Network Training: A Meta-Learning Approach

https://arxiv.org/abs/2207.10188

- 概要：MEBQAT. ビット幅を動的に決めるOne-for-all系のQAT.
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2448931/a921fdbf-ac87-0800-0946-b1c79908a69b.png)
- 新規性：メタ学習とfew-shot trainingで未知データセットにも対応する。
- キモ：ビット幅とデータセット(classes)を両方最適化する。
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2448931/c4daa627-557d-ac6d-b799-2b56b3b66fdc.png)
- 評価：Cifar-10, MobileNetV2等で実験した。(精度はQATには及ばない)
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2448931/a255ef80-9f7d-ba25-5965-04ba10c46223.png)
[Ruby] ハッシュでぼっち演算子が使いたい

(2022.12.6追記)

記事本体より @jnchito さんのコメントの方が参考になりますので、そちらもご覧ください。

(2022.12.6追記終わり)

変数にオブジェクトまたは nil が入ってる場合、ぼっち演算子(Safe Navigation Operator)を使うと安全にメソッドを呼び出せます。

```ruby
irb(main):017:0> str = "abc"
irb(main):018:0> str.size
=> 3
irb(main):019:0> str = nil
irb(main):020:0> str.size
Traceback (most recent call last):
        4: from /usr/bin/irb:23:in `<main>'
        3: from /usr/bin/irb:23:in `load'
        2: from /usr/lib/ruby/gems/2.7.0/gems/irb-1.2.1/exe/irb:11:in `<top (required)>'
        1: from (irb):20
NoMethodError (undefined method `size' for nil:NilClass)
irb(main):021:0> str&.size
=> nil
```

こんな感じでハッシュに対して nil 安全にアクセス出来ないか考えてみました。

```ruby
irb(main):023:0> hash = {a: 1, b: 2}
irb(main):024:0> hash[:a]
=> 1
irb(main):025:0> hash = nil
irb(main):026:0> hash[:a]
Traceback (most recent call last):
        4: from /usr/bin/irb:23:in `<main>'
        3: from /usr/bin/irb:23:in `load'
        2: from /usr/lib/ruby/gems/2.7.0/gems/irb-1.2.1/exe/irb:11:in `<top (required)>'
        1: from (irb):26
NoMethodError (undefined method `[]' for nil:NilClass)
```

nil は Ruby では false 扱いですから三項演算子を使えばいけます。

```ruby
irb(main):027:0> hash ? hash[:a] : nil
=> nil
```

`||` で空ハッシュを返してやってもいけます。

```ruby
irb(main):028:0> (hash || {})[:a]
=> nil
```

https://qiita.com/YumaInaura/items/eb45d79319aeb6c19d46 によると、ぼっち演算子で `[]` メソッドを呼んでやればうまくいくと。説明されたら理屈は分かりますが、いきなりこのコード見せられたら私は読める自信がありません。

```ruby
irb(main):029:0> hash&.[](:a)
=> nil
```

`dig` 使えばうまくいきました。個人的にはこれが一番読みやすいですかねぇ。

```ruby
irb(main):030:0> hash&.dig(:a)
=> nil
```
４０代おっさんREST API サーバーレスを学ぶ③

## 本記事について

この記事はプログラミング初学者の私が学んでいく中でわからない単語や概要を分かりやすくまとめたものです。
もし不正などありましたらコメントにてお知らせいただければ幸いです。

## 前回

<https://qiita.com/kou1121/items/f3a1a67c3aab6d89dd58>

## REST API リソース作成

API Gatewayを開く

APIタイプを選択で REST API 選択

選択したら画面遷移しますので

![API作成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641940/5d5f9ddb-3896-e69d-50c9-b6d619b17e3e.png)

プロトコルを選択を
REST

新しいAPIの作成
新しいAPI

API名を入れてください

入れましたらAPIの作成をクリック

### リソース

リソースを選びます。

次にリソースのアクションを選び
リソースの作成を選ぶ

リソース名を入れたら
右下のリソースの作成をクリック

### postメソッド

先ほど作ったリソースに紐づくメソッドを作成
先ほどのリソースを選んだ状態でアクションのメソッドをクリックしますと
メソッドの作成を選べますのでそれをクリック

そうすると自分の作ったリソースにプルダウンメニューが現れますので
そちらからpostを選択、そして✅ボタンを押してください。

統合タイプは
Lambda関数

Lambdaリージョン
そのまま

Lambda関数
これはこのAPIにpostメソッドで呼ばれたときに、どのLambda関数呼ばれるかの紐づけを行う。
先ほど作ったusers-post-functionを入れる。
保存ボタンをクリック
ポップアップが出てくるので、問題がなければOKをクリック

次にマッピングテンプレートの定義をするために
統合リクエストをクリック
一番下にマッピングテンプレートがあると思いますのでそこを開いてください
次にマッピングテンプレートの追加をクリック
application/jsonと入れて✅ボタンをクリック
ポップアップが出てくるので
「はい、この統合を保護します」
をクリック

マッピングテンプレートの入力を行えるので

```text
{
    "body" : "$util.escapeJavaScript($input.body)"
}
```

json形式であり、keyとvalue形式になっている。
`$input` クライアントからのリクエストパラメーターを指す
Httpのリクエストパラメーターはヘッダーとボディに分かれており、
`$input.body`でリクエストパラメーターのボディ部を取ることが書かれている。

`escapeJavaScript`を使用して必要な文字はエスケープを行う。

こちらが終わりましたら保存ボタンをおしてください。
（何も出ません）

#### APIのデプロイ

postメソッドを選んだ状態で
アクションをクリックすると
APIのデプロイがありますのでそれをクリック

デプロイされるステージ
新しいステージ

ステージ名
今回は users-stage

終わったらデプロイをクリック

URLの呼び出しと出ますのでこれで大丈夫です。

### getメソッド

上を参考

```text
{
    "id" : "$input.params('id')"
}
```

`params` リクエストパラメーターを取ってくる

#### APIのデプロイ

ステージをusers-stageを選択

### putメソッド

上を参考

```text
{
    "body" : "$util.escapeJavaScript($input.body)"
}
```

#### APIのデプロイ

ステージをusers-stageを選択

### putメソッド

上を参考

```text
{
    "body" : "$util.escapeJavaScript($input.body)"
}
```

#### APIのデプロイ

ステージをusers-stageを選択

### deleteメソッド

上を参考

```text
{
    "id" : "$input.params('id')"
}
```

#### APIのデプロイ

ステージをusers-stageを選択

## 参考

https://www.udemy.com/course/awsrest-api/
FizzBuzz問題

## FizzBuzz問題とは
1から順に数を数え上げていき、3の倍数なら「Fizz」、5の倍数なら「Buzz」、両方の倍数（15の倍数）なら「Fizz Buzz」、いずれでもなければその数を言うゲームです。
元々は海外の言葉遊びでそのルールをプログラムに実装したものです。

プログラミングの初歩的な問題で扱われることが多いですが、使える予約語や演算子、関数やオブジェクトが制限されると、とたんに難易度が上がります。

まずコードを見てみましょう。

## 環境
```
macOS Ventura 13.0.1
Google Colaboratory
```

## コード

```python
for num in range (1, 101):
    if num % ( 3*5 ) ==0:
        print ("Fizz Buzz")
    elif num % 3 == 0:
        print ("Fizz ")
    elif num % 5 ==0:
        print ("Buzz")
    else:
        print(num)
```

上記のコードを実装すると下記の結果が得られます。
（実際に100まで並べると長くなるので一部カットしてます。）
```
1
2
Fizz 
4
Buzz
Fizz 
7
8
Fizz 
Buzz
11
Fizz 
13
14
Fizz Buzz
16
17
Fizz 
19
Buzz
Fizz 
22
.
.
.
.
.
88
89
Fizz Buzz
91
92
Fizz 
94
Buzz
Fizz 
97
98
Fizz 
Buzz
```

コードの中身ですが、
```python
for num in range (1, 101):
```
numが1から100までの間で、

```python
if num % ( 3*5 ) ==0:
    print ("FIZZ BUZZ")
```
もしnumが15(3*5)で割り切れるなら、
"Fizz Buzz"と出力。

```python
elif num % 3 == 0:
    print ("Fizz ")
```
もしnumが3で割り切れるなら、
"Fizz"と出力。

```python
elif num % 5 ==0:
    print ("Buzz")
```
もしnumが5で割り切れるなら、
"Buzz"と出力。

```python
else:
    print(num)
```
それ以外の場合は数字を出力。

一つ一つのコードは難しくないと思います。
今回のポイントは、if文の中の順番です。

この順番を入れ替えてコードを書いてみると期待通りの答えが得られません。
試しに下記のコードを実装してみます。
```python
for num in range (1, 101):
    if num % 3 ==0:
        print ("Fizz")
    elif num % 5 == 0:
        print ("Buzz")
    elif num % (3*5) ==0:
        print ("Fizz Buzz")
    else:
        print(num)
```

```
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
Fizz
16
17
Fizz
19
Buzz
Fizz
22
.
.
.
.
.
88
89
Fizz
91
92
Fizz
94
Buzz
Fizz
97
98
Fizz
Buzz
```

結果を見てもらえると分かりますが、
まず15のところで"Fizz Buzz"が表示されずに"Fizz"が表示されているのが分かります。
これはプログラムのコードは上から順に読み込まれるためです。

## まとめ
今回はFizzBuzz問題をやってみました。
今後は他の言語でFizzBuzz問題やってみるのも面白いかなと思ってます。
【Python】スクレイピングでスプレッドシートへの転記までサクッと

:::note info
**この記事によって実現できること**
Python Seleniumによるスクレイピングでとってきた情報をスプレッドシートに転記
:::

**▼ Tips**
Chromeドライバーを定期的に手動でダウンロードしているかたは必見です！
こんな面倒な作業をしている人はサクッと解決しちゃいましょう！

https://qiita.com/babasatoru21/items/2856c22483d32673bca0

# はじめに
こういう悩みありませんか？
スクレイピングやり始めたんだけど、CSVとかでダウンロードしてスプレッドシートにインポートしてるんだけど、自動化できないかな...


# Pythonでスプレッドシートに記入する方法
## 1. 下準備編（Google Cloud Platform）

https://qiita.com/babasatoru21/items/ed2ca09de823d913ac2a

:::note info
**この記事で完璧です！**
:::

## 2. コード編
まずはコピペ！ 
```
#ここから編集
省略
#ここまでの部分
```
を編集しましょう。

▼コピペ用
```python:spreadsheet.py
import gspread
import json

def get_spreadsheet():
    """
    スプレッドシートとの連携の関数
    :return: ワークシート
    """
    #ここから編集
    keyfile_path = "'/ファイルのパス/ファイル名.json'" # 秘密鍵のjsonのパスを記入
    SPREADSHEET_KEY = 'スプレッドシートキー' # 転記したいワークブックのIDを記入
    #ここまで

    #ServiceAccountCredentials：Googleの各サービスへアクセスできるservice変数を生成。
    from oauth2client.service_account import ServiceAccountCredentials

    #2つのAPIを記述しないとリフレッシュトークンを3600秒毎に発行し続けなければならない
    scope = ['https://spreadsheets.google.com/feeds','https://www.googleapis.com/auth/drive']

    #認証情報設定
    #ダウンロードしたjsonファイル名をクレデンシャル変数に設定（秘密鍵、Pythonファイルから読み込みしやすい位置に置く）
    credentials = ServiceAccountCredentials.from_json_keyfile_name(keyfile_path, scope)

    #OAuth2の資格情報を使用してGoogle APIにログインします。
    gc = gspread.authorize(credentials)

    #共有設定したスプレッドシートのシート1を開く
    workbook = gc.open_by_key(SPREADSHEET_KEY)
    return workbook
```
※スプレッドシートキーとは▼
`https://docs.google.com/spreadsheets/d/（ここの部分）/edit`

この関数を使って色々と行っていくことになります！
```python:spreadsheet.py
# 例
workbook = get_spreadsheet() # これはワークブックの階層
worksheet = workbook.worksheet("シート名を記入") # これはシートの階層
```
これでアクセスでき、色々と作業できるようになります！

▼ちなみに僕がcsvファイルを転記する際に組んでる関数がこちらです。
```python:spreadsheet.py

def set_values_to_ss(worksheet, data_list):
    """
    スプレッドシートに記入する関数
    :param worksheet: シート
    :param data_list: csv加工後配列
    :return:
    """
    last_row = 3 # 記入開始の行
    for i in range(len(data_list)):
        #このときはF列〜L列に記入したかったのでこのようになっているが各々編集◯
        #worksheet.range('A1:B10')のように記入
        cell_list = worksheet.range('F' + str(last_row) + ':L' + str(last_row))
        for j, cell in enumerate(cell_list):
            try:
                cell.value = int(data_list[i][j])
            except:
                cell.value = data_list[i][j]
        worksheet.update_cells(cell_list)
        # print("process: "+str(i)+"/"+str(len(data_list)))
        last_row += 1
        sleep(0.1)
```
ちなみに
```python
worksheet.update_cells(編集したい範囲)
```
でスプレッドシートが更新されます。（転記できる）
要するにこういうことです。
①　スプレッドシートにアクセス
②　コード内で転記するシートを作成
③　②の内容でアップデート

ではまた次回！

:::note info
**この記事によって実現できること**
Python Seleniumによるスクレイピングでとってきた情報をスプレッドシートに転記
:::
slackの便利コマンド

# はじめに
職場の連絡ツールとしてslackを使用しているものの
メッセージやリアクションなどの簡単なものしか使い方がわからない。
コマンドを調べても、具体的な使い方が分からず、使用できない。
slackを有意義に使うために、勇気をもって試してみた便利な機能をまとめたいと思います。

## スラッシュコマンド
slackには**スラッシュコマンド**という特定のアクションのショートカット機能があり、
メッセージフィールドに`/`を入力して記載します。
<ins>※以下、形式にはメッセージフィールドに記載する使用方法。例には具体例を表記します。</ins>

# 一覧
* **通話をかける**
**形式**　　　　　`/call`
**便利コマンド**　下記コマンドは、通話画面にてキー操作することで使用できる。
　　　　　　　・`「M」`：ミュートのON、OFFを切り替える
　　　　　　　・`「V」`：カメラのON、OFFを切り替える
**注意**　　　　　<ins>通話したい人</ins>のメッセージフィールドに入力すること。
　　　　　　　`/call [@someone]`と入力しても、エラーになる。
　　　　　　　通話機能は2023年3月29日までの機能になるため、以降はハドルを使用する。
**おまけ**　　　　ハドルをかける
　　　　　　　**便利コマンド**
　　　　　　　　　　　　　下記ショートカットはチャンネル or DMを選択した状態でキー操作する
　　　　　　　　　　　　　　　・`「Ctrl」+「Shift」+「H」`：ハドル開始、退出
　　　　　　　　　　　　　　　　　　　　　　　　　　　  　　　ハドルに招待された場合の参加
　　　　　　　　　　　　　　　・`「Ctrl」+「Shift」+「スペース」`：
　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　ミュートのON、OFFを切り替える<br><br>
* **DMを送信する**
**形式**　　　　　`/dm [@someone][what]`　※[what]は省略可能
**例**　　　　　　下記コマンドは、どこのメッセージフィールドで入力しても可能
　　　　　　　・`/dm @りんご`：りんごさんとの個人DMに移動する
　　　　　　　・`/dm @りんご 遊ぼう！`：りんごさんの個人DMに「遊ぼう！」と送る
**できること**　　[@ someone]は自分も可能
　　　　　　　[what]は改行も可能
**注意**　　　　　[@ someone]は複数人を入力できない　
　　　　　　　`/dm @りんご @みかん 遊ぼ！`：りんごさんの個人DMに「@みかん 遊ぼ！」に送る<br><br>
* **リマインドを設定する**
**形式**　　　　　`/remind [@someone] or [#channel] [what] [when]`　※[when]**以外**は省略不可
**例**　　　　　　下記コマンドは、どこのメッセージフィールドで入力しても可能
　　　　　　　・`/remind me 水飲め！ in 10 second`：自分宛てに10秒後「水飲め！」と設定
　　　　　　　・`/remind @りんご 遊ぼ！ every other Sunday`：
　　　　　　　　　　　　　　　　　　　　　　　　　　りんごさんに隔週日曜日「遊ぼ！」と設定
　　　　　　　　　　　　　　　　　　　　　※設定した日から最初の日曜日にリマインドされる。
**できること**　　自分にリマインドする場合、[@ someone]は`me`でもOK。
　　　　　　　[what]は改行可能。
**注意**　　　　　[when]を省略すると、日付を設定するフォームが表示され、選択肢より設定できる。
　　　　　　　※カスタマイズ出来ないため、自由度は低い
**おまけ**　　　　`/remind list`：自分が設定したリマインダーのリストを表示
　　　　　　　`/remind help`：リマインダーのHELPを表示<br><br>
* **メッセージを検索する**
**形式**　　　　　`/search XXX: [@someone] or [#channel] [what] `　※[what]**以外**は省略不可
**例**　　　　　　下記コマンドは、どこのメッセージフィールドで入力しても可能
　　　　　　　・`/search from: @りんご in: #友達 遊ぼ  `：
　　　　　　　　　　　　友達のチャンネルでりんごさんが「遊ぼ」と発言したメッセージを検索
　　　　　　　・`/search from: @りんご　遊ぼ -土曜日  `：
　　　　　　　りんごさんの発言で「日曜日遊ぼ！」や「遊ぼう」は検索されるが
　　　　　　　「土曜日遊ぼう」は検索されない。
**できること**　　XXXは複数入力可能。
　　　　　　　 [what]に`-`を入力すると、キーワードを除外して検索できる。 
　　　　　　　※「-」を検索したい場合、`"-"`として入力する。
**おまけ**　　　　<ins>XXX</ins>の種類
　　　　　　　・with　`/search with: [@someone][what]`： 
　　　　　　　　　　　[@ someone]の個人DMもしくはチャンネルの [@ someone]を含む
　　　　　　　　　　　スレッドで[what]を探す
　　　　　　　・in　　`/search in: [@someone][what]`　※[@ someone]は複数を入力不可：
　　　　　　　　　　　[@ someone]の個人DM内で[what]を探す
　 　　　　　　　　　  `/search in:  [#channel][what]`：
　　　　　　　　　　　[#channel]のチャンネル内で[what]を探す
　　　　　　　※「in」は「to」でもOK
　　　　　　　・from　`/search from: [@someone][what]`： 
　　　　　　　　　　　[@ someone]の発言をDM、チャンネル問わず、[what]を探す<br><br>

* **ログイン状態を変更する**
**形式**　　　　　`/active`　：ログイン状態をアクティブに変更する
　　　　　　　`/away`　：ログイン状態を離籍中に変更する

# おわり
明日からのslack生活が快適になりますように！
【Ruby on Rails】 sqlite3 から mysql に切り替える

## はじめに
Ruby on Rails で デフォルトのデータベースが sqlite3 になっていますが、mysql に切り替えたいと考え、備忘録としてアウトプットします。
## サービス環境
- ruby 3.0.0
- Rails 6.0.4
- docker
- mysql 8.0.2
- Slim, SCSS

## 方法
### 1. Gemfileの編集
```
# gem 'sqlite3', '~> 1.4'
gem 'mysql2'
```
デフォルトの sqlite3 の gem はコメントアウトし、mysql2 を追記します。
### 2. bundle install
### 3. コンテナの再度立ち上げ
### 4. config/database.yml編集
```yml
default: &default
  # adapter: sqlite3
  # pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  # timeout: 5000
  adapter: mysql2
  encoding: utf8
  reconnect: false
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: ユーザー名
  password: パスワード
  host: db


development:
  <<: *default
  database: アプリ名_development

# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
  <<: *default
  database: アプリ名_test

production:
  <<: *default
  database: アプリ名_production

```
username, password, host, アプリ名に関しては各々のものを設定しましょう！sqlite3 の部分はコメントアウトまたは削除します。
### 5. db:create
```
$ docker-compose run web rails db:create
```
### 6. db:migrate
```
$ docker-compose run web rails db:migrate
```
### 最後に
```
$ docker-compose up (-d)
```
localhost:3000で立ち上げられるかどうか確認してみましょう！

## 参考記事
- https://www.javadrive.jp/rails/model/index2.html
- https://qiita.com/h4n24w4/items/7974bef03b20d8d7b6f6
- https://www.sejuku.net/blog/28403
5,000投稿突破記念　CountDown Calendar 2022 購読・投稿のお勧め

2022年12月4日　countdown Calendar 2022 参加記事で、投稿数が5,000を超えました。ありがとうございます。　

![5008.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51423/ebae409c-106f-2198-4d3e-0ebd603ee5aa.png)


一番いいね数が多い記事。

プログラマが知っているとよい色使い(JIS安全色) 1,650 いいね(102,639 views)

https://qiita.com/kaizen_nagoya/items/cb7eb3199b0b98904a35

一番、Views数が多い記事　

M.S.WindowsにPython3 (Anaconda3) を導入する（7つの罠） 170,675 views(131いいね）

https://qiita.com/kaizen_nagoya/items/7bfd7ecdc4e8edcbd679

# Advent Calendar 2022

３つの閲覧専門のAdvent Calendar 2022と　１つの参加型Advent Calendar 2022 を企画し、　
52のAdvent Calendarに投稿を予定しています。　

順次、ここに一覧させていただきます。いいね　をしていただいた上で、コメントいただけると幸いです。　
いいねをいただいた上でのコメントを優先してお返事させていただいています。ごめんなさい。

編集リクエストはQiitaではgit登録ではありません。
構造を変更している時に記述が乱れ修復できなくなることがあります。
なるべくコメント欄でお願いします。　

# AUTOSAR Advent Calendar 2022

Autosar R22-11が20221208の公開行事の前後に公開になるのを記念して、　
全文書の記事を掲載予定です。

また、合わせて、１４枚目のカレンダーでは、投稿記事をお待ちしています。

https://qiita.com/advent-calendar/2022/autosar


# Automotive Handbook Advent Calendar 2022

https://qiita.com/advent-calendar/2022/automotivehandbook
 
bosch 自動車ハンドブック記事のまとめ記事。現在、購読のみです。　
ご要望いただければ、記事投稿も可能にさせていただくかもしれません。　

# AdtCale(O.K.) Advent Calendar 2022

購読のみです。

https://qiita.com/advent-calendar/2022/adventcalendar2022

@torifukukaiou【毎日自動更新】AdventCalendar2022 タグ LGTMランキング！

https://qiita.com/torifukukaiou/items/6cbea79ccf0eea8777d2

>で取り上げてくださったものです。あるとき24個あり、じゃ、それを書き直すAdventCalendarをやろうってなった。　
それぞれの記事の先頭のURLは、上記一覧に掲載があるもののはずです。
書き直してよくなっていれば、いいねをあげてやってください。

# 2022 いいねをいただいた記事ランキング(O.K.版) Advent Calendar 2022

購読のみです。2022年の毎月の上旬、下旬にいいねをいただいた記事の最初の１６個を、　
views/goodsで割った値が小さいものから並べました。

https://qiita.com/advent-calendar/2022/goods

既出は省略しています。年間を集計した記事を２５日に作成予定です。　

乞うご期待。

# 参加した記事一覧。　
 
順次追記する予定です。

 <この項は書きかけです。順次追記します。>

 ＜この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。＞

# 文書履歴(document history)
ver. 0.01 初稿 20221204


### 最後までおよみいただきありがとうございました。

いいね　💚、フォローをお願いします。

####  Thank you very much for reading to the last sentence.

Please press the like icon 💚　and follow me for your happy life.
拠点間接続に困った話 (3)

謎のアドベントカレンダー、第 6 話です。

5 日目の **[拠点間接続に困った話 (2)](https://qiita.com/hmatsu47/private/ad410042d39d4d33ab56)** の続きです。

https://qiita.com/hmatsu47/items/ad410042d39d4d33ab56

## 常に付きまとう増速問題

すでに[前回記事](https://qiita.com/hmatsu47/private/ad410042d39d4d33ab56)でも触れましたが、日中間を流れるデータが増えるのに伴い帯域不足が問題になり、その都度増速していました。

512kbps → 768kbps → 1Mbps ・・・

また、中国側の拠点増加と全体の通信量増加が相まって、月額利用料がどんどん膨らんでいきました。

## その頃、世の中は

すでにクラウド時代でした。

実のところ、筆者もすでに情シスから足を洗ってかなりの期間が経過していましたが、筆者が所属する会社の事業に直接関わる問題だったので、少しだけ絡んでいました。

## あるとき

そんな苦悩をどこからか聞きつけたのか、某 S グループのパートナーが「Alibaba Cloud を使った日中間接続のコスト低減案」を持って営業にやってきました。

前述のとおり、筆者はすでに情シスから外れていたので直接提案を受けたわけではありませんが、

**「それなら自前でも設定できるよ」**

ということで、Alibaba Cloud のCEN を使った日中間の接続構成を作って見せたのでした。

- **[Cloud Enterprise Network（CEN）](https://www.alibabacloud.com/ja/product/cen)**

https://www.alibabacloud.com/ja/product/cen

Alibaba Cloud のユーザーコミュニティ **[「AliEaters」](https://www.alieaters.com/)** にも参加してますしね。

楽勝です。

（コロナ禍スタート以来、ご無沙汰ですけど）

いきなり社内に繋ぐのもアレなので、AWS との間で VPN 接続して見せました。

## 結果は？

採用されませんでした。

主な問題点は 2 つありました。

- ビル側を SDSL 等による専用線からインターネット接続に変えないといけないのが面倒
- （中国発の）Alibaba Cloud がイマイチ信用できない

（えっと、我々はどうして中国に事業所を設けてビジネスをしてるんでしたっけ…？）

## その後

結局、最初に契約した日中間の VPN サービスで増速していき、現在に至ります。

途中、帯域が 1Mbps を超えたあたりで（中国側の）1 ヶ所目の POP 〜ビル内フロア間の SDSL（公称 2Mbps）が実効帯域不足となり、結局引き直すことになったのですが。

（まあ **「1 つの業者に全部丸投げできるほうが楽やろ」** という考えも分からなくはない）

個人的には、実験が身を結ばず残念な面もありつつ、直接関わるリスクも大きいのでほっとしました。

距離感大事。

---

7 日目からはまた別の話になります。

- **[拠点間接続に困った話 (2)](https://qiita.com/hmatsu47/items/96e065b26d302d501585)**

https://qiita.com/hmatsu47/items/96e065b26d302d501585
C#で地震情報の書き方(たぶん初心者向け)

# はじめに
この記事は[防災アプリ Advent Calendar 2022](https://adventar.org/calendars/7488)の10日目です。

### 自己紹介
まずお前誰だよ。ってなる人もいると思うので自己紹介...

主にYoutubeで24H地震観測を行っている[FukuokaMGNTCam](https://twitter.com/FukuokkaMGNTnr)です。
(是非見ていってください。)
簡単なプログラミングや地震について興味があり、日々プログラミングや地震観測に務めています。

# 地震情報とは何ぞや？
速報値or暫定値が出された情報をまとめたものですねﾊｲ。

今回C#と書いたのですがC#じゃなくても[JQuake](https://jquake.net/)で使われているJavaScript(?)
でも情報は書けます。ただ自分がC#専なのでC#指定しただけです。

# 情報源を取得する
自分が作っているソフト「QuakeInfoText(名前は適当)」では
このようなデザインになっています。(2022/12/04のインドネシアでの大噴火)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2951620/68dbca61-c60b-5455-8950-be147c0ccec6.png)
こういう情報を表示させるためには[API](https://data.wingarc.com/what-is-api-16084)というものが必要です。
APIはggってもなかなか出てこないこともあります。
私が知っている限りのAPIの例として

・[P2P API v2](https://www.p2pquake.net/json_api_v2/#/)
・[DM-D.S.S.](https://dmdata.jp/)
などがあります。(自分の知っている限り)

ただAPI見つけたとなっても初見では解読するのは難しい上、文字だらけです。
分からないという場合は[GitHub](https://github.com/)で探してみましょう。
サンプルとして公開してくれている人もいるので見てみた方が早いです(投げやり)

# APIを読んで地震情報を表示させる
Visual Studioで作る方が大半だとは思いますが、「ライブラリ」というもので
解析すると簡単になります。
こういったAPIは「NewtonJson」というライブラリを使って解析しましょう。
インストールしただけでは何の意味もないので、使うクラスファイル(.cs)内の
上の方に
```
using NewtonJson;
using Newtonsoft.Json.Linq;
```
とusing...があるので追加しておきましょう。

### 情報を表示させる
そして大事なのは表示させること。結果的に表示できなかったら何なんだと。
文字を表示させる方法として
・Label表示
・pictureBox内に書く
という方法があります。後者の方は文字だけでも難しい上、APIを扱うとなると
初心者視点で、難易度鬼になるので今回はラベル表示。

ラベル表示では
```
label1.Text = (API);
```
という感じになります。(API)の部分は書き方がいろいろあるのでこんな感じに。
これをマグニチュードとか深さや時間、津波情報などで分けます。
```
Epicenter.Text = (Epicenter); //震源名
magnitude.Text = (Magnitude); //マグニチュード
depth.Text = (depth);         //深さ
time.Text = (time);           //時刻
Thunami.Text = (Thunami);     //津波情報
```
という感じに...

### 震度ごとに色を付ける
最後に震度ごとに色を付けないとだいぶわかりにくくなりますね。
色を付けるには主に2パターンあります。
・ラベルでする
・画像を使う
(ほかの方は別のやり方かも...)
この中で言えば画像を使った方が比較的楽です。震度ごとの画像+遠地時の画像を
リソース内にインプットして使うだけ。
```
swich(最大震度のAPI)
{
    case "1" //P2PのAPIであれば10
        pictureBox.Image = Properties.Resources.(震度1の画像をリソースでの名前から使う);
    case "2" //P2PのAPIであれば20
        pictureBox.Image = Properties.Resources.2;

    case "3" //P2PのAPIであれば30
        pictureBox.Image = Properties.Resources.3;

    case "4" //P2PのAPIであれば40
        pictureBox.Image = Properties.Resources.4;

    case "5-" //P2PのAPIであれば45
        pictureBox.Image = Properties.Resources.5jaku;

    case "5+" //P2PのAPIであれば50
        pictureBox.Image = Properties.Resources.5kyou;

    case "6-" //P2PのAPIであれば55
        pictureBox.Image = Properties.Resources.6jaku;

    case "6+" //P2PのAPIであれば60
        pictureBox.Image = Properties.Resources.6kyou;

    case "7" //P2PのAPIであれば70
        pictureBox.Image = Properties.Resources.7;
}
```
という感じで自分は表記。(ほかの方は別のやり方かな...?)

別に色なしでもいいわ苦労したくないしという方であれば
```
Shindo.Text = (Maxint);     //最大震度
```
でもいいですし。

# おわりに
以上、MGNTによるわかりにくい地震情報の書き方でした。
サンプル見てわかる人もいればわからないであろう人もいると思って、
今回この記事を書かせてもらいました。
参考になれば幸いです。

# 余談
最終的に地図描画して強震モニタか地震情報を描画するのが目標です。
日々ggりながらプログラミングしているところですが地図描画の仕方すらわからない自分に誰か助けてください。(懇願)
というか描画に履歴まで付けたい発想力豊かなアホ(←自分)。

...余談スペース使って何を書いてるんだろ...
私の画面見えていますでしょうか〜？

## はじめに
日頃、WEB会議をよくしますが、

* Zoom
* Google Meet
* Teams
* Skype
* Webex

などなど、いろんなツールがありますね。
特に Zoom に関しては多くの人が1度は利用したことがあるのではないでしょうか。
私がよく利用しているのは Zoom で、ちょっと話したい〜なんてときは Slack ハドルミーティングが多いと思います。

そんな中、画面共有する時に以下のようなシーンがよくあるなぁと。

## 画面共有時の確認

### 朝会で画面共有しているシーン（Zoom）
![スクリーンショット 2022-12-04 15.04.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/874425/a9190002-9489-e4f7-c018-5199d5fa1679.png)

:man: 「画面共有しますね〜」
:man: 「私の画面見えていますでしょうか〜？」
:woman: 「うん、見えてるよ〜」

なんていう会話が日常的に交わされています。
経験上、

:man: 「いや、見れないな〜」

というパターンはほぼないので 「この確認要るかな・・・？」 とたまに思ってしまいますが、実際相手にはどう見えているかわからないし、無駄な確認ではないと思うので、

* **確認しておきたい人は確認すれば良い**
* **「うん、見えてるよ〜」と、できるだけ反応する**

というスタンスでおります。

そもそも、「共有見れないわ〜」というシーンがないのはツールの精度が高いということにもなりそうですが、そんなことを考えていたら急に Zoom のようなビデオ会議ツールは UDP が使われているんだっけ、とふと気になったので TCP と UDP の違いをおさらいしておこうかなと簡単にまとめてみます。

## TCP と UDP

Zoom などのビデオ会議で使われる通信プロトコルは UDP が使われることが多く、TCP と比較すると以下のような特徴があります。

|プロトコル|TCP<br>(Transmission Control Protocol)|UDP<br>(User Datagram Protocol)|
|---|---|---|
|コネクション|あり|なし|
|信頼性|高い|低い|
|速度|遅い<br>相手からの応答を待つ|速い<br>相手からの応答を待たない|
|主な用途|Webの閲覧、メールの送受信、ファイル転送など、欠けて困るようなデータや必ず相手に届かなければいけないデータを送信する時に利用|動画配信や音声通話などリアルタイム性の求められるシーンや簡易な通信（DNS等）に利用|
|特徴|コネクションの確立、維持、切断|通信は双方向ではなく一方的、信頼性がない（パケットロス）|

UDP はスピード重視で通信としては一方的であり、TCP に比べて信頼性が低いということですね。
たしかに、Zoom などでビデオ会議をする際には通信速度が重要ですよね。
1つのパケットのためにその後のパケットが待たされる...なんてことになるとリアルタイムに会話が進められないので多少のロスは許容するということです。たまに会話が途切れるのはそのためのようです。

## Zoom 画面共有の設定画面

Zoom の設定画面に以下のような画面共有時のオプションが存在しているので、デフォルトは UDP ということなのですかね。
TCP を使用する設定にした場合どんな挙動になるのかは試していませんが、速度的には落ちる前提のはずです。
UDP で画面共有ができない（見れない）場合に試す価値はありそうです。
![スクリーンショット 2022-12-04 14.00.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/874425/23cfd212-38bb-a969-5185-47e6a3d66d79.png)

## 最後に

:man: 「私の画面見えていますでしょうか〜？」
:woman: 「うん、見えてるよ〜」

これはつまり、感覚的に TCP に近いですね。（高信頼度）
もし誰も反応してくれなかったら落ち込んじゃいますけど！
Phpstorm

## 前提
macOS Ventura

## 対応する括弧に移動
[option] + [command] + `[` or
[option] + [command] + `]`

括弧を選択していないときは、現在のカーソルのあるブロックから一番内側の括弧に移動。
開き括弧を選択している場合に [option] + [command] + `]` は対応する閉じ括弧に移動。
閉じ括弧を選択している場合に [option] + [command] + `[` は対応する開き括弧に移動。
開き括弧を選択している場合に [option] + [command] + `[` はもう一つ外側のブロックの開き括弧に移動。
閉じ括弧を選択している場合に [option] + [command] + `]` はもう一つ外側のブロックの閉じ括弧に移動。

[command] + `[` は以前いたカーソルの位置に戻るので、外側を選びすぎた場合には [command] + `[` を押すと良い。

- 参考
[ブレースへの移動](https://www.jetbrains.com/help/idea/2016.2/navigating-to-braces.html)

## Git Blame で注釈を付ける
`行番号のところを右クリック` → `[Git Blame で注釈を付ける]`
はずす場合は
`注釈を右クリック` → `✓[Git Blame で注釈を付ける]`
か
`行番号のところを右クリック` → `[注釈を閉じる]`

## インレイヒントの非表示
functionの上に表示されるがよく分からない。
そのfunctionの呼び出し箇所がプロジェクト内にない（ように見える）場合に、「使用箇所なし」とか表示される。
インレイヒント？を右クリック → `すべての 'Code Vision' インレイヒントの非表示` で消せる。
ちなみに非表示にした後に再び表示する方法は分からない。

## ファイルサイズが設定された上限値を超えています。コードインサイト機能は使用できません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90217/6a79bf5d-bfd6-3c2d-8ac2-e3d91686ba4a.png)

これPhpStorm作ってる人の頭はどうなってるのかね？
メッセージが表示されたときにリンクがなければ、どうやって「設定された上限値」とやらを変更できるか、分からないよね？
こういうのをいちいちユーザーに調べさせる神経が分からない。

環境：macOS Sonoma + PhpStorm 2024.2.1
`ヘルプ` → `カスタムプロパディの編集`

```
idea.max.intellisense.filesize=2500
```

上記2500がデフォルト値（2.56MB)

```
idea.max.intellisense.filesize=10000
```

上記にすると10.24MBになる。

設定値を変更した後、PhpStormを再起動する必要がある。

参考：[PhpStormでファイルサイズが大きいファイルを扱う方法](https://dev.macha795.com/phpstorm-use-big-filesize/)
Visual Studio アセンブラでmsvcrtを使ってみた

# 環境
Windows 11 Pro (64bit)
Visual Studio Community 2022

# ソースなど

## バッチファイル

```dev32crt.bat
@echo off
path %path%;D:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\bin\Hostx64\x86
set lib=%lib%;D:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\lib\x86
set lib=%lib%;C:\Program Files (x86)\Windows Kits\10\Lib\10.0.19041.0\ucrt\x86
set lib=%lib%;C:\Program Files (x86)\Windows Kits\10\Lib\10.0.19041.0\um\x86
cmd
```

## アセンブリ ソース

```printf.asm
comment *
ml /c printf.asm
link /subsystem:console printf
*
includelib msvcrt
includelib legacy_stdio_definitions

.model flat

printf proto c :dword,:vararg

.const
fmt1	db	'argc=[%d]',0ah,0
fmt2	db	'argv[%d]=[%s]',0ah,0

.data
i$	dd	?
p$	dd	?

.code
argc$ = 8
argv$ = 12
main proc c
	push	ebp
	mov	ebp, esp

	mov	eax, argc$[ebp]
	invoke	printf, addr fmt1, eax
	mov	i$, 0
@@:
	mov	edx, i$
	mov	eax, argv$[ebp]
	mov	ecx, [eax+edx*4]
	mov	p$, ecx
	cmp	p$, 0
	je	@f
	invoke	printf, addr fmt2, i$, p$
	inc	i$
	jmp	@b
@@:
	mov	eax, 0
	pop	ebp
	ret
main endp

end
```

# 実行例

```
D:\Projects\msvc>ml /c printf.asm
Microsoft (R) Macro Assembler Version 14.34.31935.0
Copyright (C) Microsoft Corporation.  All rights reserved.

 Assembling: printf.asm

D:\Projects\msvc>link /subsystem:console printf
Microsoft (R) Incremental Linker Version 14.34.31935.0
Copyright (C) Microsoft Corporation.  All rights reserved.


D:\Projects\msvc>printf tako ika manbo
argc=[4]
argv[0]=[printf]
argv[1]=[tako]
argv[2]=[ika]
argv[3]=[manbo]

D:\Projects\msvc>
```
(リンクだけです)ネイピア数について調べてみた。

鮒ふな一鉢ひとはち....

https://www.google.com/search?q=%E3%83%8D%E3%82%A4%E3%83%94%E3%82%A2%E6%95%B0%E3%80%80%E3%81%B5%E3%81%AA%E3%81%B2%E3%81%A8%E3%81%AF%E3%81%A1&rlz=1C1CHBD_jaJP908JP908&sxsrf=ALiCzsbZLwOKuYSOx91KiF3CsX0HZ0vYxA%3A1670146237329&ei=vWiMY5nVE4OE0gS6_p3IBA&ved=0ahUKEwjZp8vJ09_7AhUDgpQKHTp_B0kQ4dUDCA8&uact=5&oq=%E3%83%8D%E3%82%A4%E3%83%94%E3%82%A2%E6%95%B0%E3%80%80%E3%81%B5%E3%81%AA%E3%81%B2%E3%81%A8%E3%81%AF%E3%81%A1&gs_lcp=Cgxnd3Mtd2l6LXNlcnAQAzIFCAAQogQyBQgAEKIEMgUIABCiBDIFCAAQogQyBQgAEKIEOgoIABBHENYEELADOgkIABAEEIAEECU6BwgAEAQQgAQ6BQghEKABSgQIQRgASgQIRhgAUEdY139gxowBaARwAXgAgAF-iAGZCpIBBDExLjOYAQCgAQHIAQrAAQE&sclient=gws-wiz-serp

e = 2.71828 18284 59045 23536 02874 71352 …
超越数である。＜

https://ja.wikipedia.org/wiki/%E3%83%8D%E3%82%A4%E3%83%94%E3%82%A2%E6%95%B0

https://en.wikipedia.org/wiki/E_(mathematical_constant)


これは、無理数であり、「超越数」と呼ばれているものである。＜

https://www.google.com/search?q=%E3%83%8D%E3%82%A4%E3%83%94%E3%82%A2%E6%95%B0&rlz=1C1CHBD_jaJP908JP908&oq=%E3%83%8D%E3%82%A4%E3%83%94%E3%82%A2%E6%95%B0&aqs=chrome..69i57j0i512l6j69i60.321j0j7&sourceid=chrome&ie=UTF-8


# 参考

https://www.google.com/search?q=%E7%84%A1%E7%90%86%E6%95%B0+%E8%B6%85%E8%B6%8A%E6%95%B0+%E9%81%95%E3%81%84&rlz=1C1CHBD_jaJP908JP908&oq=%E7%84%A1%E7%90%86%E6%95%B0%E3%80%80%E3%81%A1%E3%82%87%E3%81%86%E3%81%88%E3%81%A4&aqs=chrome.2.69i57j0i4i512l2j0i4i8i15i30j69i60l2j69i61.12733j0j7&sourceid=chrome&ie=UTF-8
UbuntuServer22をLeoNet環境下でインストールするときの注意点

# かなりアホくさいことをしないとインストールできない

正直な話、100歩譲ってスペックが足りないとかだったら納得できるけどネットワークの構造の問題でインストールに
失敗するという事象にぶち当たったため、以下備忘録的に書く

2022/12/10追記
minimalでない場合追加

# OSインストール時での設定
ネットワーク接続のところでプロキシ設定関連のプロンプトが出てきたら以下のアドレスを指定する

```shell アドレス
https://ID:PW@上位ルータのIP/login.cgi
````
この設定を入れるとログインユーザーの作成画面でこけなくなる
"http://"だと失敗するので絶対に"https://"で開始すること
まあ、curlでのベーシック認証の時のやり方と一緒です。
↓この画面です
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/323146/80cce9ca-791a-b5e3-39a5-441432f7b974.png)


ただし、minimalでのインストール時にしか検証していないので通常インストールの場合の動作はわからない
→検証したらminimalでない場合でも成功した

# インストール後のapt updateとapt upgaredeについて

OSインストール時にやった回避策がaptのリポジトリ設定に残るため、90curtin-aptproxyファイルを削除するかどこかに移動させる

```shell /etc/apt/apt.conf.d/
mv /etc/apt/apt.conf.d/90curtin-aptproxy /home/user
```
これとさらに、ipV6を使用しないようにする

```shell ipV6
sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1
sudo sysctl -w net.ipv6.conf.default.disable_ipv6=1
sudo sysctl -w net.ipv6.conf.lo.disable_ipv6=1
```

次の作業のためapt updateとvimをインストールする
```
sudo apt update -y
sudo apt install vim -y
```

再起動後もipV6を使用しないようにするため作業を実施
```shell 60-ipv6-disable.conf
sudo vi /etc/sysctl.d/60-ipv6-disable.conf
# 以下の設定を書き込む
net.ipv6.conf.all.disable_ipv6=1
net.ipv6.conf.default.disable_ipv6=1
net.ipv6.conf.lo.disable_ipv6=1

# 設定有効可
sudo systemctl restart procps
sudo vi /etc/rc.local
# 以下の内容を入れる
#!/bin/bash
systemctl restart procps
exit 0

# 権限付与
sudo chmod 755 /etc/rc.local

# ip addrでv6を使ってないか確認
ip addr
```

最後にapt updateとapt upgaredeを実施して正常動作すればOK
```
sudo apt update
sudo apt upgarede
```

# 参考にしたサイト
https://qiita.com/htshozawa/items/77dd0be079cdf817a5a6

https://gihyo.jp/admin/serial/01/ubuntu-recipe/0677

https://www.kkaneko.jp/tools/server/ubuntu_apt_proxy.html
【WordPress】WordPressの著作権、テーマの著作権ってどうなってるの？コピーライトを記載しよう！

# 前回の記事

前回の記事では、ヘッダ画像やタイトルを設定しました。

https://qiita.com/raptony110/private/33352c3acc65b14bfdb3

今回は、コピーライトの表記設定です。
そもそもコピーライトってなんでしょう。必ず表示しなければいけないものなのでしょうか。
そういえば、WordPressの著作権ってどうなってるの？説明できますか？

僕のAdvent Calendarを読み終わった人が、
「へぇ簡単なんだなぁ〜　自分もWordPress使ってサイト作ってみようかな〜」って思うあなたがそこにいたのなら、、、、
読むだけで、頭の中WordPress化しちゃったんだよッ！！！！

https://qiita.com/advent-calendar/2022/wordpress-output

# 結論
コピーライトは、著作権を明示するための文字列で、必ず明示する必要はありません。
明示していなくても、著作権を放棄したことにはならないからです。

# WordPressの著作権
WordPressはOSSで、GPLv2となっています。
この著作権については、WordPress管理画面左上のWマークから「WordPressについて」を開いて、「自由について」のページで説明されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1499675/d91edc89-e731-8776-4cd8-eeab01dc7c5d.png)

# テーマの著作権
WordPressの「自由について」のページ下部で、テーマについても言及がされています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1499675/c0e54f3c-8021-edb2-6554-b22305643a64.png)
つまり、WordPressのテーマ検索でインストールしたテーマであれば、WordPressと同じくGPLだということですね。
ただし、有料版や、別のサイトからダウンロードしたテンプレートを使用している場合は、100％GPLではなく、スプリットライセンスと呼ばれる形態をとっている可能性がありますので、必ず確認しましょう。
テーマがスプリットライセンスの形態をとっていると、WordPressのPHPはGPLのままですが、CSSやJavascriptや画像などはGPLとしていない場合があります。

# Webサイトの著作権
と、ここまでWordPressやテーマの著作権について見てきましたが、実際にWebサイトを作成する際はどうなるのでしょうか。
当然ですが、我々ユーザーは著作権を主張しても問題はありません。上記の説明はあくまで、WordPressのプログラムやテーマに付随する画像についての話だからです。
僕たちユーザーは、Webサイトへのコンテンツ掲載はしていますが、特に断っていない以上、コンテンツを配布しているわけではないです。勝手に使ってもらっては困るわけです。
よって、コピーライトは自身Webサイトのコンテンツに対して著作権を主張する行為なので、明記しておくべきでしょう。
ちなみにですが、明記していなかったからといって、著作権を放棄していることにはなりません。法律で守られているので安心してくださいね。

# コピーライトの表記について
コピーライトの表記は、「コピーライト（著作権）」、「発行年」、「著作権者」の三つの要素があれば、特に定められたフォーマットはありません。
なので、僕のブログの場合は以下のどれでOKなのです。
「Copyright 2022 Raptony Lab.」
「©️ 2022 Raptony Lab. All rights reserved.」
「Copyright ©️ 2022 Raptony Lab. All rights reserved.」


# おわりに
いかがでしたでしょうか。今回の記事では、著作権について触れました。
今回は、Webサイトを制作する側の話なので、自分の著作権を主張することに主眼がありましたが、Webサイトを製作する上で、ネット上から画像を取得したものをWebサイトに利用する際などは、絶対に相手の著作権を侵害してはいけません。

次回は、記事の書き方について見ていきましょう！
個人的Notionのススメ

今回はもはや生活必需品になりつつあるNotionの使い方を紹介します。

## Notionとは？
「**多機能ツール**」です。メモや社内Wiki、タスク管理にデータベース、さらにはNotionAPIまでできるツールになります。もはやできることが多すぎて、簡単な紹介は難しいです。

## 設定
ここからは、僕のパーソナルワークスペースのカスタムについて書いていきます。
　
### Photo
![Photo](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2950700/b3417fda-3bf8-7a4e-1891-2afc3a87146c.png)
アイコンにはgifが使えます。作業中にちょこまか動くのが気にならない人は、設定してみると面白いかもしれません。

### My Setting
![Setting](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2950700/6047c699-2af7-7aa6-de9e-16a8d77e996c.png)

#### Appearance
エンジニアの天敵はブルーライトです。多くの人は常時ダークモードをオンにしていると思うので、`Use system setting`にしてあげましょう

#### Open on start
僕のMacはそこまでメモリが多くないので、Notionを使わないときは閉じています。再度立ち上げるのは基本的にさっきまで見ていたページを見るためなので、ここは`Last Viewd page`が無難かと。
もしトップページにタスク管理画面があり、毎回そこに入りたい！という人は`Top page in sidebar`が良いかもしれません。

### Domain
![domain](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2950700/12416a6c-e427-c181-5f40-cebb4ff0b93a.png)
ワークスペースごとにドメインが割り振られていますが、初期のドメインは適当な単語を組み合わせたものになっています。リンクを共有する際、自分のワークスペースのリンクであることが相手に伝わりやすいように独自のドメインを設定しておくのが良いでしょう

## ページ構成
![ページ構成](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2950700/0f79f932-00a8-d669-27a3-60c1c2553b03.png)
僕のワークスペースは大きく4つのページに分かれています。

- **Public** 
    Notionでは下の階層へのアクセスが可能なので、誤って見せたくないページにアクセス可能なページを共有すると、大変なことになります。ヒューマンエラーを防ぐため、公開しても問題ないページはこの中に作ります。
- **Private**
    公開するとまずいページは必ずこの中に作成します。インターンや業務委託で知った情報や、ESなどプライベートな情報を管理するのに使っています。
- **DataBase**
    テーブルは全てこのページの中に作成し、利用したい場合は`Linked view of database`で呼び出します。同じデータベースにアクセスしたいことが結構あるので、1ヶ所にまとめた方が管理しやすいと感じてます。
- **BackUp**
    社内やハッカソンなどで複数の人がアクセスするワークスペースの場合は、誰かが誤ってページを削除してしまう可能性があります。ページの復元は有料プランでしができないので、定期的にページをこの中に入れてバックアップを取りましょう。

## おすすめの使い方
ここからは気に入っているページについて紹介します。

### 飲食店データベース
![飲食店データベース](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2950700/1cd6a2f2-2a3b-62e5-fb26-3c03ec48b302.png)
行きたい店や行ったお店をインスタのお気に入りに保存していましたが、共有できなかったり、地区別にまとめられなかったりととっても不便でした。
このデータベースの構成にすればささっと今いる地区でフィルターをかけてお店を調べられます。行きたいお店の中から検索をかけられるので、基本ハズレを引くことはありません。
このページを作ってから、「せっかく名駅でご飯食べたのなら、行きたかったあの店にすればよかった！」がなくなりました。

### 言語別まとめページ
![言語別まとめページ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2950700/7a51cbdd-56a8-6e24-d74e-4c8451878380.png)
僕はなかなか覚えが悪いので、同じコードやコマンドを何度も調べながら実装してます。その度にブラウザにキーワードを入れ、あのページじゃないこのページでもないを繰り返すのがとっても億劫でした。
そこで、やりたいこと別にデータベースにまとめることで、今まで自分が書いたコードを引っ張ってくるときはNotionのみを参照すれば良くなりました。
一部をお見せすると、
![Django](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2950700/18361d3b-797a-c623-bcda-56257ead4a9d.png)
こんな感じにコードブロックを作ってメモにすれば、基本コピペで動かせるようになります。

### 研究室
![研究室](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2950700/a28d32b9-ccfc-5582-a743-e43753c49b14.png)
僕が所属している研究室では週1で個別のゼミを行うのですが、そこでの内容も全てNotionで管理しています。
これは前期分のページですが、全部を1つのページにまとめると大変な量になってしまうので、`Toggle`+`heading`で見出しごとに折りたためるようにしています。
卒論のなので隠していますが、日付の後にゼミの内容を書き、`Table of contents`で目次を作ってあげれば、過去の情報にもささっとアクセスできます。

## まとめ
他にもGoogleMapやお店のリンクを埋め込んだ旅行用のページ、扶養から外れないために給与と経費を管理するデータベース、ミーティングの議事録など、活用方法は山ほどあります。
テキストかデータベースで管理できる情報は全てNotionで活用できるので、身の回りにある課題は「Notionで解決できないかな？」と考えると良いでしょう。
それでは、快適なNotionライフを！

おすすめのNotion活用術があればコメントで教えてください🙏
【2年目現役エンジニア】実践してきて良かったと思うこと3選

# はじめに
本記事は[Progaku Advent Calendar 2022](https://qiita.com/advent-calendar/2022/progaku) 4日目担当です。
オープン系の開発メインですが、これまでに立ち上げプロジェクトを含めて3件のプロジェクトを入社後約1年半の間に経験するという怒涛の日々を過ごした現役のエンジニアです。
入社当初からやっていたことや意識していたことなど、これからITエンジニアとして1歩を踏み出す方々の役に立つのではないかと思い執筆いたしました。少しでも皆さんのエンジニア人生にプラスになれば幸いです。

## 実際にやってきた業務内容
- 2021年4月　〜　2ヶ月間の新人研修
- 2021年7月　〜　改修プロジェクトに参画
- 2022年5月　〜　新規立ち上げプロジェクト
- 2022年10月　〜　新規立ち上げプロジェクト
- 2022年12月現在

## 主に業務で扱ってきた技術
- C#
- .NET Framework
- .NET WebForms
- .NET Core
- .NET Core blazor WebAssembly
- PostgreSQL
- html/css
- JavaScript

# セクション1：新人研修で知識をつける
1年半ハードなスケジュールをこなせたのも、新人研修期間でしっかり準備することができたからだと思います。
## 2ヶ月間の新人研修の内容
- java
- Spring Framework
- SQL
- html
- css
- javaScript
- Vue.js

2ヶ月で1日8時間の研修だけじゃ予備知識がないと厳しい内容。ほとんどhtml/cssしか触ったことがない自分としては、人一倍頑張らなければいけなかった。。

## 実際にやったこと
- 25分程度の電車移動中に参考書の読み込み
- 9時〜18時まで研修を受講
- 帰宅後学んだことの復習
- 学んだことは素直に実践する ← コレ重要

## なぜ知識をつけた方がいいと感じたのか
- 理由1：
学べるうちに学ばなければ、後々業務に取り残されると感じた。

- 理由2：
学んでお金がもらえる環境が当たり前じゃないということに気づくことができた。

- 理由3：
実際に現場に配属後、知識がないことに悩むのは他の誰でもない自分だと思った。

これから新人研修受けられる方は新人研修期間を大事にしてほしいと思います。

# セクション2：メモをとる習慣をつける
メモを取ることで得られることは計り知れないです。まだメモを取っていない方はぜひメモをとることを習慣にしてほしいと思います。

## 具体的にどんなことをメモすればいいのか
1年半ずっとメモをし続けて辿り着いた内容は以下になります。
- 今日やった作業
- 重要な気づき
- 残っているタスク

正直書く内容は今あげた内容じゃなくても良く、無理せずに書き続けるということがとても重要です。

## メモをとるメリットは？？
- 自分のタスクを可視化させることで、自分が今やるべきことが明確になる
- タスク管理能力が高くなる
- やらなきゃいけないことを頭で覚えなくても良いから仕事に没頭できる
- 忘れ物がなくなった(昔はありえないぐらい忘れ物が多かった投稿主)
- 自分のやった作業を文字として起こすことで、頭の整理ができる

メモをとるメリットを挙げるとキリがないですが、1年半メモを取ってきて良かったと僕自身感じていて、これからもメモは欠かさずに取り続けると思います。

# セクション3：新人特権を活かす
経験年数が2,3年もしくは5,6年経つと求められる技術はどんどん高くなり、質問できることが限られてくる印象が強い気がします。
独学した経験がある自分の意見としては周りに教えてくれる人がいて、同じ志を持つ人たちがいる環境は天国だと感じました。今ある環境を無駄にせず、聞けることはたくさん聞いた方が良いと思います。

# 所感
この記事を書くために1年半の自分を振り返ってみて、自分の考え方の根底にあるうちの一つとして挙げられるのが「学べるうちに学んでおけ」だと思います。
周りの同業者の話を聞いてみると、「自分のやりたい業務がやれていない」「やりたい業務はできているがブラックっぽい」というようなことをよく耳にします。早い段階で高い技術をつけて、やれることを増やしておくと選択肢が広がるのかなと思います。

# まとめ
#### 本稿を通して伝えたいこと
- 新人研修があるならしっかりそこで知識をつける
  - 予習、復習をする
  - 学んだことは素直に実践
  - 学んでお金がもらえる環境は当たり前じゃない
- メモをとる習慣を身につける
  - 無理せず書き続けることが重要
  - メモをとるメリットは計り知れない
- 新人特権を活かす
  - 新人という立場を大事にして、質問できる環境ならたくさん質問しよう

# さいごに
この記事が皆さんの刺激になったり、役に立ったのであれば幸いです。
実は今回が初めての記事投稿で、自分なりに頑張って書いてみたのですがいかがだったでしょうか。また機会があれば書こうかなと思ってます。最後までお付き合いいただきありがとうございました。
明日の記事は[@usamaro](https://qiita.com/usamaro)さんの [コンパイル方式とインタープリタ方式の違いについて](https://qiita.com/usamaro/items/41f2437177b5ee8b470d)です。ぜひご覧になられてください。