OmniAICreator/Qiita-1.07M huggingface dataset:
新人PM / PMOにフォローをおすすめしたいアカウント3選

## はじめに
はじめまして！
株式会社コネクター・ジャパンで、[alt](https://alt.cnctor.jp/)というプロダクトのPM/PMOをやっているあっこむといいます。

自己紹介にかえまして、以下簡単な経歴です。
飲食店→ガス会社営業→大手家電メーカー直営販売→ビデオグラファー→Salesforce構築ベンダーPMO→コネクター・ジャパン

どちらかというと営業サイドが長く、エンジニアとしての経験がほぼありません。
そんな私目線での投稿をさせていただきます。

## この記事を書いた理由
PM/PMOとしての経験も浅く、「身につけた方が良さそうな知識」に目が行くものの、それらも膨大。実際に日々の、そして今日の業務を救ってくれるのはマインドや考え方だな、という実感もあります。(もちろん知識はあるに越したことはないし、あった方が絶対にいいです。)

同じように経験の浅いPM/PMOとして日々戦っている同志に向けて、自分が「こういう発信をしてくれているのはありがたいなぁ」「参考になるな」と感じたアカウントを(誠に勝手ながら)ご紹介させていただきます。





## ①わんこPM([@dx_saru](https://x.com/dx_saru))さん
https://x.com/dx_saru

わんこPMさんはご自身のプロフィールにも
「システム企画構想から導入までやってるプロマネ。これが現場のリアル。マネジメントとは、管理することではなく、うまくいくようになんとかすること。わんこはカワイイ」
と記載されている通り、プロマネ目線から日々起きる様々なことへの考え方や対処法を発信されてます。

https://x.com/dx_saru/status/1811034136762532331

経験が浅いと知識や方法論に頼りたくなりますが、それらを身につけるのも、確立するのも一朝一夕ではないと実感しています。当然プロジェクトごとに"変数"も異なるため、「近道がない」は本当にその通り。
その中でも、共通する作業はなるべくフォーマット化できるように、少しでも日々の業務負担が減るように動いていくのが大事だなと感じています。


## ②コーヒー好きのPM([@coffee_nomimasu](https://x.com/coffee_nomimasu))さん

https://x.com/coffee_nomimasu

コーヒー好きのPMさんは日常的なポストも多いし、積極的に資格取得に向けた学習もされている方で、親近感もありつつとてもいい刺激を受けながら拝見しています。

https://x.com/coffee_nomimasu/status/1810464130035548537

このポストにあるような動きができるとプロマネ的には理想ですね。。

ちょっとズレるかもですが"言った・言わない問題"ってあるあるですよね。特に社外の人とのやりとりでこれが発生するとクリティカルな問題に発展したりとか。
私はクライアントとのMTGの際は[tl;dv](https://tldv.io/ja/)を同席させて録画と議事録をとるようにしています。(クライアントに許可はとってくださいね)

https://tldv.io/ja/

顧客と揉めるために、もしくは正当性を主張するために録画をとるのではなく、自分を守るための抑止力的な意味合いと、もし言った・言わない問題が発生した時に、「じゃあこれからどうする？」を探るためのヒントとして活用しています。

私はGooglt Meetが標準的な会議ツールを使っているので、tl;dvを紐づけているGoogleアカウントを同席させて、GASで自動的に出席と返信させています。そうすると会議時間になると勝手に出席してきます。





## ③PMっぽいひと([@kanabunee99](https://x.com/kanabunee99))さん

PMっぽいひとさんは[bokete](https://bokete.jp/)的なフォーマットでPMあるあるを発信されている方でエンタメ的にもフォローしておくと面白いです。
これは私が経験が浅いからだとは思いますが、そもそもそのPMあるある自体が「あーそんなことあるんだ」と勉強になることも多々あります。
(著作権的なものが不安なのでポストの紹介は控えます)

自分に合うチャネルから、自分に合うインプットができるように、ひとまずフォローしてみる、みたいなのはかなりコスパがいいと思っています。



## まとめ
そもそもPM/PMOってやってる人が比較的少ないイメージなので、みなさん孤軍奮闘されているのかなぁと思っています。でも実際には当然仲間は多いし、ノウハウとかマインドとかが共有されてみんな楽になると良いなぁと考えています。

有益な情報があればぜひ教えてください！

## 一緒に働く仲間を募集しています！
株式会社コネクター・ジャパンでは一緒に働いてくれる仲間を募集しています！

事業拡大に伴い、エンジニアを大募集しています。
興味のある方は下記リンクから弊社のことをぜひ知っていただき応募してもらえると嬉しいです。
▼会社について
https://www.wantedly.com/companies/cnctor/about
▼代表メッセージ
https://cnctor.jp/10years-anniversary/
▼応募はこちら
https://www.wantedly.com/companies/cnctor/projects
今すぐできるあなたの仕事がラクになるたった1つの方法

こんにちは。
こちらの記事に興味を持っていただきありがとうございます。

不定期に読書感想文をプログラマーにとって有益になるように
まとめています。

今回は大ベストセラーとなっているこの本、
「嫌われる勇気」の続編、
「幸せになる勇気」をご紹介します！

幸せになる勇気は仕事・恋愛・友人関係などあらゆることに関して
悩みを持っている人にとって必要な行動指針書である嫌われる勇気を
より具体的に書いたいわばノウハウ本のようなものです。

概要としてはアドラー心理学を哲人・青年の対話形式で紹介するもの。

原因論・目的論や共同体感覚など、とても大事な概念・考え方が
たくさん紹介されていますが、今回は「課題の分離」の概念を紹介しつつ
「今すぐできるあなたの仕事がラクになるたった1つの方法」の話をしていきます。

私自身、課題の分離を少しずつ実践してきたおかげか、
人の愚痴を言うことなんてまずなくなりましたし、
どれだけ長く働いても、どんな仕事に就こうとも
しんどいと感じることはほとんどなくなりました。


# 今すぐできるあなたの仕事がラクになるたった1つの方法

とてもシンプルです。

常に
「これからどうするか」を
考えるだけです。

その中で「悪いあの人」や
「かわいそうな私」がすぐ頭に
浮かんできてしまうかもしれません。

しかしそれは忘れてください。
あなたの仕事・人生には1ミリも
役に立ちません。

自分は悪くない、自分はこのままで良いと自己暗示してしまうので、むしろ
悪影響になってしまいます。


あなたは人から
「悪いあの人」や「かわいそうな私」の
話を聞いてどのように感じますか？

聞いて得られるものってなんですか？

それで傷ついた自分の心や
自分の抱えている問題が
良い方向に向かいますか？

お互いに傷を舐め合っても
傷は治りません。

傷には絆創膏を貼ったり
消毒しないといけないですよね。

このように、
あなたを苦痛から遠ざけるには
今を憂えるのではなく、
「これからどうするか」を
考えた方が明らかに早いのです。


# 悪いあの人、かわいそうな私をどうしても考えちゃいます…

アドラー心理学を学んだことがあれば
わかるかと思いますが、
悪いあの人、かわいそうな私が
頭によぎらないなんてなかなか
すぐにはうまくいきません。

私もアドラー心理学に感化されて
色々実践していますが
それでもよぎることは多々あります。

だからこそ大切なのは
頭によぎったときはそれを自覚し
次は言わないぞと決める、
これを何度も繰り返すことです。


# なぜこれからどうするかを考えるのは難しいのか

理由は単純です。
これからどうするかを考える=
自分が変化する

ことだからです。

人間は恒常性といって、
変化をおそれる性質があります。

変化するということは
今までと違う結果になることです。

今までは死ななかったけど、
違う結果が出れば死ぬかもしれませんよね？

だからこそ、
悪いあの人、かわいそうな私を
思いつき口に出すことで
自分が変化しなくて良いように
正当化するのです。

これはたとえ相手がどれだけ悪くても、
こちらがどれだけかわいそうな立場でもです。


正当化すると現状が変化しないため、
苦しい状態がずっと続きます。
だからしんどい。


現状を少しでも変化させると
もしかしたらもっと苦しくなる
かもしれませんし、今よりも
ラクになるかもしれません。

ただ今の苦しさとは違うものへ
確実に変わります。

だからこそあなたの仕事が
ラクになるためには
「これからどうするか」を
考え、行動する以外ないのです。


プログラマーだったら
どこでエラーが起きているか
問題を切り分けたり、
有識者に聞いてみたり、
今一度どういう流れで処理をしているか、この処理で叶えたいことはなにか？を言語化してみたりやることはたくさんあります。

プログラマーはコミュニケーションが
とてもとてもとても大切なので、
コミュニケーションを円滑にするための施策・行動を変えてみても良いですね。

正直一朝一夕でどうこうなるもの
ではありませんが、実践する価値は
十二分にあります。

仕事をラクにタノしくしていきましょう！
C_TS452_2021 - SAP Certified Application Associate - SAP S/4HANA Sourcing and Procurement対策（7/100）

【7日目】
トピック1：企業構造とマスタデータ（7/11）

≪問題7≫
以下のうち、新規ビジネスパートナの登録時に選択できるビジネスパートナーカテゴリはどれですか。
（３つ選択）
□組織
□個人
□得意先
□仕入先
□グループ

≪解答≫
■組織
■個人
□得意先
□仕入先
■グループ

≪解説≫
◆ ビジネスパートナを登録する際には、ビジネスパートナーカテゴリを選択する必要があります。ビジネスパートナーカテゴリは、ビジネスパートナを以下のいずれかとして分類するために使用されます。
（1）個人⇒非法人または従業員など
（2）グループ⇒共同相続人など
（3）組織⇒企業や企業の一部門など、法人組織または法人組織の一部
◆ ビジネスパートナーカテゴリによって、データエントリに対して利用可能な項目が決まります。ビジネスパートナーカテゴリの割当は、ビジネスパートナを登録した後に変更することはできません。
ChatGPTに自己共分散 (𝐶𝑘) と自己相関 (γk) の違いを説明してもらってみた

## 自己共分散 (𝐶𝑘) と自己相関 (γk) の違い
### 自己共分散 
定義：
自己共分散は、ある時点と別の時点の値がどれくらい一緒に変動するかを示します。

例：
ある月の売上と次の月の売上がどれだけ一緒に増えたり減ったりするかを見るために使います。
### 自己相関
定義：
自己相関は、自己共分散をそのデータの全体的な変動（分散）で割ったものです。これにより、-1から1の範囲でどれくらい関連があるかがわかります。
例：
季節ごとに売上がどう関連しているかを見るのに使います。例えば、夏と冬の売上が似ているかどうか。

## 使い分けの業務例
例えば、スーパーマーケットの月ごとの売上データを分析するとします。

### 自己共分散 
1月の売上と2月の売上がどう連動しているかを見ます。
売上のパターンやトレンドを理解するために役立ちます。
### 自己相関 
全体の売上データを標準化して、各月の売上がどれだけ自己関連しているかを見ます。
季節ごとのパターンや周期性を評価するのに役立ちます。
これらを使うと、売上のパターンやトレンドを詳しく理解でき、将来の売上予測やマーケティング戦略の立案に役立ちます。
メモリダンプを取得するときに注意すること

# はじめに
フォレンジック系を最近舐めはじめており、証跡の収集で困ったことをメモっていきます。

# 事の始まり
みんな大好きFTKImagerを使ってフルメモリダンプを取ろうとしました。
ですが、実行すると[`ad_driver.sys`がSYSTEM_SERVICE_EXCEPTIONを吐く](https://www.reddit.com/r/memoryforensics/comments/yha8lr/bsod_everytime_when_trying_to_take_a_memory_dump/)のでうまいこと取れませんでした。

# ググりまくって解決
FTK Imager以外に、MagnetForensicsが出している[Magnet RAM Capture](https://www.magnetforensics.com/resources/magnet-ram-capture/)と言うフリーツールがあります。
これだとうまく取れました。
[DFツール一覧（2020年版）](https://digitalforensic.jp/wp-content/uploads/2021/03/634ea19c65031f10c692d694b8ad81e6.pdf)によると、VSMが有効な環境において取得できるとの記載がありました。

では原因は何だったのかについてメモ程度を書き残しておこうと思います。

# 仮想セキュアモード（VSM）について
端的に言うと、「VSMが有効だとクラッシュする」と言う話のようです。
VSMが有効であるかどうかは`tasklist  |find "Secure System"`で実行されているプロセスがあれば有効という話のようで、自分の環境では有効でした。

[Memory Acquisition and Virtual Secure Mode - Digital Forensics Stream](https://df-stream.com/tag/memory-acquisition/)によると
> Physical memory is commonly acquired using a software-based memory acquisition tool such as winpmem, DumpIt, Magnet RAM Capturer, FTK Imager, or one of the several other options available. 
> 
> These tools typically load a device driver into the kernel and subsequently read memory through mapping the DevicePhysicalMemory object, using a function such as MmMapIoSpace, or directly manipulating the page tables. 
> 
> Many of these tools also share a similar trait: their use on a system with virtual secure mode enabled results in a system crash.

日本語訳（俺翻訳）
> 物理メモリは通常、winpmem、DumpIt、Magnet RAM Capturer、FTK Imager などのソフトウェア ベースのメモリ取得ツールや、利用可能なその他のオプションのいずれかを使用して取得されます。
> これらのツールは通常、デバイス ドライバーをカーネルにロードし、その後、DevicePhysicalMemory オブジェクトをマッピングするか、MmMapIoSpace などの関数を使用するか、ページテーブルを直接操作してメモリを読み取ります。
> このような操作をする場合、仮想セキュアモードが有効になっているシステムにおいては保護機構が働きシステムがクラッシュします。

なので、VSMを無効化するか、もうクラッシュしてもいいから完全メモリダンプを取るようにWindowsを構成しておくかを事前にしないといけないわけですが
インシデントが発生してから再起動して完全メモリダンプを取るように構成し直しましょうとは行かないわけです。

なのでライブマシンでサクッと証跡を取れるアプリとしてはまず、Magnet RAM Captureを実行すると良いかなと。

# まとめ
- VSMが有効だとFTK Imagerでメモリダンプが取れないことが有る（BSODに陥りメモリが消し飛ぶ）
- Magnet RAM Captureを使えばVSMが有効化された環境であってもメモリダンプが取れるようになる
RenderからNeonへのDB移行

# はじめに
私たちが運営している[Habitat-Hub](https://qiita.com/organizations/habitatHub)ではRenderを利用してバックエンドサーバー＆DB環境を構築していました。
DBについては、無料プランだと3ヶ月ごとにデータがリセットされてしまうと制約があったため、都度立て直していたのですが、最近リセットのタイミングが1ヶ月へと変更になりました。

立て直し作業＆移行作業は30分程度で終わるとはいえ、貴重なデータを扱うような神経を使う作業を高頻度ではやりたくないものです（流れを知りたい方は[Renderの無料プランでDBを使う方法](https://qiita.com/mellbrother/items/1fcc511dee23b9347c3a)をご覧ください）。
とはいえ、有料プランへ加入するというのも収益が出ていない状態では難しい状況です。

そのため、この度DBのみ他サービスのNeonに移すこととしました。
バックエンドサーバー自体は引き続きRenderを利用し、DBのみNeonに移すという変更です。

もしご興味のある方は、記事を引き続き読んでみてください。

# Renderとは
Renderは簡単にアプリなどのサービスを公開できるホスティングサービスです。
利用できる言語や機能も豊富でありながら、価格も抑えられた良いサービスです。

DBも構築することができますが、冒頭で記載したように無料プランではDBが1ヶ月で使えなくなってしまいます。

https://render.com

# Neonとは
Rust言語で作られたクラウド上にて動作するサーバーレスの PostgreSQL プラットフォームです。従来の PostgreSQL データベースソフトウェアと同じような使い方ができますが、サーバーを準備したり運用する必要がないため、フルマネージドサービスとして利用可能です（参考：[Bun & TypeScriptでバックエンド開発：サーバーレスDB「Neon」の基本的な使い方](https://go-tech.blog/paas/serverless-db-neon/#:~:text=Neon%20%E3%81%AF%E3%80%81Rust%E8%A8%80%E8%AA%9E%E3%81%A7,%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%81%A8%E3%81%97%E3%81%A6%E5%88%A9%E7%94%A8%E5%8F%AF%E8%83%BD%E3%81%A7%E3%81%99%E3%80%82)）。

無料プランでは1つのDBのみ構築できるようです。

# DB移行
流れは以下になります。
1. Renderでダンプファイルを作成する（バックアップ）
1. Neonのアカウントを発行し、DB接続に必要な情報を取得する
1. DBに接続し、ダンプファイルを利用してデータを復元する
1. Renderの環境変数を変更する
1. （必要に応じて）バックエンドのコードを修正

DB接続情報の一部をコードに直接書き込んでいる人がいれば、4番の作業でコードも修正してください。


## Renderでダンプファイルを作成する（バックアップ）
以下のコマンドを実行します。
{XXX}のRenderのダッシュボードにある値で置き換えてください
```
pg_dump -Fc -d postgres://{DB_USER}:{DB_PASSWORD}@{DB_HOST}{DB_REGION}/{DB_NAME} > {ダンプファイル名}
```

Renderは外部接続する際、リージョンなどをホスト名の後ろにくっつける必要があるらしいので、その辺りをお忘れなく(`.singapore-postgres.render.com`のようなもの)。

## Neonのアカウントを発行し、DB接続に必要な情報を取得する
[Neon](https://neon.tech/)にアクセスし、サインアップしましょう。
そのあと、DBを作成してみましょう（この辺りはわかりやすくなっていたので、詳しい説明は割愛します）。

リージョンはRenderのサーバーをシンガポールにしていたので、同じにしました。
また、後で記載しますが、postgre SQLのバージョンが古いとエラーが発生することがあるため、14以降にしておいた方が良いと思います。

DB接続に必要な情報は先ほど作成したDBのダッシュボードに移動し、Connection Detailsというところで確認できます。

## DBに接続し、ダンプファイルを利用してデータを復元する
以下のコマンドを実行します。


```
pg_restore --clean -h {DB_HOST} -p 5432 -U {DB_USER} -d {DB_NAME} {ダンプファイルのパス}
```

パスワードが聞かれますので、DB_USERのパスワードを入力してください（Neonのダッシュボードにあるはずです）。

多少ワーニングが出ますが、エラーになっていなければ復元できていると思います

### 注意点
ローカルのpostgreのバージョンが古いとエンドポイントIDを指定しろ、と怒られてしまします。
エンドポイントをうまく指定できれば、良いのですが、結構エラーが解消しなかったので、特に思い入れがなければ、バージョン14以降のpostgreを利用しましょう。
参考：https://neon.tech/docs/connect/connection-errors

## Renderの環境変数を変更する
DBの接続情報を書き換えます。
私たちはRenderの環境変数（ダッシュボード > Environment > Secret Files）で管理しているため、その情報を書き換えました。

別管理している場合は、その値を書き換えてください。


## （必要に応じて）バックエンドのコードを修正
neonではDB接続の際、sslモードでアクセスする必要があるため、バックエンドのコードもそのように変更します。
今まではRenderのバックエンドサーバーとDBだったので、なくても問題なかったのですが、環境を分けたことにより、調整が必要となりました。

ちょっとした調整は必要かもしれないので、エラーなどが出たらログを見ながら、対応してみてください。
最初、バックエンド側のAPIがずっとエラーを吐いていたのですが、Renderのログを見て、sslモードのエラーが出ていることがわかりました。
この辺りはRenderの便利なところですよね。

# おわり
無料枠で頑張ろうと思うと結構いろいろなところで、苦労しますね...
もし皆様の助けになれば嬉しいです。

# 参考
https://qiita.com/Tiger-Kid/items/8cacb8b89a2d201f4cf8
[Red Hat Enterprise Linux9] ユーザデータでSSHパスワード認証許可設定をしてみた

今日はEC2へのログインに関しての記事になります。

AWSを使用するメリットの一つとして、仮想マシンを簡単に複製し、異なる構成や環境でアプリケーションのテスト\/検証を迅速に行える点が挙げられます。

通常、新たなEC2にログインするには、起動時に指定したキーペアを使用する必要があります。
ただ、そのキーペアを管理したり、検証作業のたびにそのキーペアを指定したりするのは非常に **「メンドクサイ」** です。

そこで、ユーザデータでSSHパスワード認証許可設定を行い、EC起動時にデフォルトでパスワード認証できるようにしてみました。

## ユーザデータとは
ユーザデータは、EC2インスタンスの起動時に実行されるスクリプトやコマンドのセットです。
主な目的は、インスタンスの初期設定やカスタマイズ、アプリケーションの設定などを自動化することになります。
AWSマネジメントコンソールでいうと、下記のEC2起動画面にて設定することが可能。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3822026/6f39a41d-1108-9361-7e18-983248c27197.png)


## ユーザデータでSSHパスワード認証許可設定をする
では、ユーザデータを使用してRed Hat Enterprise Linux9インスタンスのパスワード認証を許可していきます。
パスワード認証を許可するには（1）/etc/ssh/sshd_config設定の更新と（2）ec2-user（AWSデフォルトユーザ）へのパスワード設定が必要です。それぞれ、下記のようなコマンドをユーザデータで指定します。

（1）/etc/ssh/sshd_config設定の更新
~~~
#!/bin/bash
touch /etc/ssh/sshd_config.d/ファイル名.conf
echo "PasswordAuthentication yes" > /etc/ssh/sshd_config.d/ファイル名.conf
systemctl restart sshd
~~~
※Red Hat Enterprise Linux9におけるSSH設定の変更にあたっては、/etc/ssh/sshd_config.d配下に*.confを作成する必要があるようです。（詳細はEC2ログイン後に/etc/ssh/sshd_configをご参照ください）


（2）ec2-user（AWSデフォルトユーザ）へのパスワード設定
~~~
echo "ec2-user:指定したいパスワード" | chpasswd
~~~

## まとめ
、ということで、ユーザデータでSSHパスワード認証許可設定をしてみました。
上記設定をすることで、EC2初回起動時でも自分で指定したパスワードにてサーバログインが可能なはずです。
初学者向けの記事となりますが、どなたかのご参考になれば幸いです。
1つのvCenter Serverを複数のNSX-T Managerで管理するマルチNSX機能について

<font color="blue">**NSX-T 3.2.2**</font> 以降で追加された、<font color="red">**1つのvCenter Serverを複数のNSX-T Managerで管理する、マルチNSX機能**</font> について確認しましたので以下にまとめます。

# マルチNSXとは
[VMware Docs](https://docs.vmware.com/jp/VMware-NSX-T-Data-Center/3.2/installation/GUID-8DB510F9-EB75-4CD1-A9DF-B40970527AB4.html) にあるように、複数の NSX Manager で単一の vCenter Server を管理する事が可能です。

* コンピュートマネージャーの登録
複数のNSX-T Manager（10.44.9.122 & 10.44.10.122）から、同一のvCenter Server（10.44.9.121）に対して「マルチNSX」を有効にして、コンピュートマネージャを登録する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251519/74118bb9-13d9-6818-5aea-7ba365ed98cc.png)


* 前提条件
    * vCenter Serverに複数のvSphereクラスタ（kubernetesクラスタ及びvLCMクラスタでない）が存在する事。各vSphereクラスタは、個別のNSX-T Managerから管理する。
    * 例）Cluster-1を10.44.9.122 NSX-T Manager、Cluster-2を10.44.10.122 NSX-T Managerより管理する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251519/de3ff596-7ccd-e0dd-05bb-67484e487cec.png)


※各クラスタは「単一のイメージを使用してクラスタ内のすべてのホストを管理します」を外して構成する必要がある。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251519/5c7b64f8-7837-5106-3806-e55be000c2ab.png)

※２つのvSphereクラスタのうち、片方をLCM管理のクラスタとすると、マルチNSXの構成が失敗する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251519/b1fc95ff-af3e-a084-0649-e4f339bf0767.png)




同一のvCenter（10.44.9.121）への複数のNSX-T Manager（10.44.9.122 & 10.44.10.122)からの登録が可能となる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251519/7cbbe6ae-0ba6-b7cd-4e34-148d6d5b6b87.png)
Distill Web MonitorデスクトップアプリでWebページのバックグラウンド監視を実現した

# 概要
筆者は、Webページの更新を監視するツールとしてDistill Web Monitorを利用しています。このツールについては以下の過去記事で投稿しています。

https://qiita.com/y-vectorfield/items/30e94b594195d1eee287

https://qiita.com/y-vectorfield/items/8f652764393aa3cf9389

最初はお試しと思って、Google Chromeの拡張機能で導入しましたが、どうやらデスクトップアプリ版も有る様です。なぜ2種類リリースされている理由は、Chromeの拡張機能ではChromeが起動している状態でしか監視が出来ない、つまり、バックグラウンド監視が出来ないためだと分かりました。実際に1週間ほど利用してみましたが、とても便利なツールなので、デスクトップアプリ版をインストールしてみることにしました。

# デスクトップアプリ版を実際にインストール
下図はChromeの拡張機能版の監視設定ウィンドウの一部ですが、バックグラウンド監視を実施するためにはデスクトップアプリ版のインストールが推奨されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469079/e9e55277-6080-e0b5-d253-eea5ce0a43bf.png)

## インストーラーをダウンロード
以下のリンクから、お使いのOSに合ったインストーラーをダウンロードします。(筆者はApple Silicon版Mac用をダウンロード)

https://distill.io/apps/web-monitor/#desktop

* 参考: 対応しているOS一覧

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469079/baa511ec-ef4d-f74a-d0e2-81399c623cdf.png)

## アプリをインストール
お使いのOSに合わせたインストール方法でインストールします。Macの場合は、インストーラー(ディスクイメージ)をダブルクリックして起動し、アプリケーションディレクトリにアプリケーション本体をコピー(ドラッグ＆ドロップ)します。

* 参考: Macのインストーラーでは`*.app`ファイルをApplicationsディレクトリにドラッグ＆ドロップするだけで完了
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469079/ce1fca6b-bd28-7d9d-25cd-f9171a335b73.png)

# アプリを起動
Distill Web Monitorを起動します。

* 参考: お使いのmacOSによっては、以下の警告が表示されますが、**開く**をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469079/aa0176f5-fa71-dfe2-486c-85f9b2cc61b2.png)

# アカウントにサインイン
アプリのウィンドウが起動したら、右上の**Sign In**をクリックし、Web Monitorのアカウントにサインインします。アプリ側の読み込みに時間を要する場合が有る様ですが、何度かやり直すと入れました。。。(まだベータ版なので作り込みが不完全？それとも通信回線の影響？？)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469079/eab0a5a9-c900-282d-3c49-93222026f842.png)

監視一覧が無事読み込まれました。Macユーザーでログインと同時に起動したい場合は、ログイン項目に追加しておくと次回の再起動時にも起動します。

![monitor_list.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469079/aa8e976b-8602-82bd-f817-dd1f3e4533e2.png)

# まとめ
無事にChromeが起動していない状態でも監視が出来るバックグラウンド監視環境を実現出来ました。めでたし。めでたし。
leJOSを選ぶメリット

「MonoBrickを選ぶメリット」のleJOS版なので、内容がすごい似ています。
# EV3 OSとは
EV3には様々なOSが存在します。
デフォルトOSを除き、世の中に存在するサードパーティ製のEV3 OSはSDカードにOSデータを入れ、起動するものです。

サードパーティ製のEV3OSを利用する理由は主にこんな感じです。
1. 慣れた言語でコーディングできる。
2. 動作によってはデフォルトOSより速い。
3. デフォルトOSにはない機能が存在する。
4. ~~(EV3の大会などで)つよつよに見える。ドヤれる。~~

じゃあ実際にどのOSがいいのかということで、いろいろなOSを実際に使ってみました。
| OS | 言語 | 特徴 |
| -- | ---- | ---- |
| [デフォルト](https://afrel.co.jp/product/ev3-introduction/) | ブロック | 速度が速く、プログラムが楽 |
| [ev3dev](https://www.ev3dev.org/) | Python, Java, Go, C, etc | 言語数が豊富だが起動が遅い |
| [EV3RT](https://dev.toppers.jp/trac_user/ev3pf/wiki/WhatsEV3RT) | C | コンパイル言語だから起動、動作が速い |
| [MonoBrick](http://www.monobrick.dk) | C#, F#, IronPython | Monoをベースに.NET  Frameworkが動く |
| [leJOS](https://lejos.sourceforge.io) | Java | 機能が充実している |

# なぜleJOSなのか
私は今までev3devを使用してきましたが、leJOSに魅力を感じている理由は「痒いところに手が届く」OSだからです。細かい理由は下記のようになります。
## 利点
### 起動時間
まず起動時間が速く、1分で起動します。いつもデフォルトOSを使っている人にとっては遅いでしょうが、ev3devが3分ほどかかるのでいつもev3devを使っている人にはとても速く感じます。
1分というのはサードパーティ製のEV3OSの中では、平均より少し早いぐらいでしょうか。
でもev3devユーザーが多いので利点とします。
### 機能
のちほど詳しく説明しますが、leJOSには様々な機能が備わっています。
例えばOS内でデバッグができたり、ESCAPEが使えたり、PCからリモートで操作できたりします。
これがleJOSを選ぶ決め手となりました。
### Java
Javaが使えるOSは主にev3devとleJOSです。しかしev3devはその他の言語を使える上でのプラスαみたいなものなので、Javaに最適化されているとはいえません。そこでJavaを使用することに特化したleJOSがJavaを使う上では最適です。
## 欠点
### 開発終了
leJOSは既に更新されていません。leJOSの最新バージョンは2015年です。これは各OSの最終更新がev3devが2020、EV3RTが2021なのをみると、非常に古いです。十分完成された上での開発終了ですが、やはり更新されていないと問題も発生するものなので、嫌な人は他のOSを使いましょう。
### Java
このOSではJavaしか使えません。~~EV3でわざわざJavaを使いたい人はいません。Javaはオワコンレガシー言語です。~~ Javaを使える人にはうれしいことですが、Javaがわからない人には非常に始めにくいOSといえます。とはいえまだコードを書いたことがない人なら、最初にJavaを勉強して使ってみるのもいいと思います。
# 読み方
leJOSの読み方がわからない人が多いと思うので、記載しておきます。
まずleJOSの由来は公式サイトでは以下のように書かれています。
> leJOS (pronounced like the Spanish word "lejos" for "far")
> leJOS（スペイン語の「遠い」を意味する「レホス」と同じ発音）

この記載の通り、leJOSは「レホス」と読みます。
とはいえ自由に読んでも罪にはならないと思います。

ちなみに語源はWikipediaに以下のように書いてありました。残念ながらこちらのソース元はわかりませんでした。
> leJOSと言う名はJosé Solórzanoによって考えだされ、Java Operating System (JOS)とRCXのもう一つのオペレーティングシステムであるlegOSの頭文字とスペイン語の単語「lejos」に基づいている。
gitでローカル変更を一時的に退避させてリモートの変更を反映させる方法

# はじめに
git pull コマンドを実行した際に、ローカルで未コミットの変更がある場合次のエラーが出ることがあります。
本記事ではこのエラーが出た際の対処法を記載します。

```
error: Your local changes to the following files would be overwritten by merge:
        test.txt
Please commit your changes or stash them before you merge.
```

# 対応
エラーに記載されている通りローカルの変更を一時的に退避させるか、コミットする必要があります。

## コミットする場合

コミットを実行後、再度 pull します。

```
git commit -m 'コミットメッセージ'
git pull
```

## 変更を一時的に退避する場合

作業中の変更を一時的に`stash`で退避させて、リモートの変更を取り込んだ後に退避させていた内容を反映させます。

```
git stash
```

リモートリポジトリの変更をローカルリポジトリに取り込みます。

```
git pull
```

一時的に退避させた変更を再度作業ディレクトリに適用させます。

```
git stash pop
```

:::note warn

git stash pop を実行した際に、リモートから取り込んだ変更とローカルの変更がコンフリクトすることがあるので注意。

:::
Amazon Linuxにmysqlインストールが失敗してしまう現象



### mysqlをインストール時にエラーが発生
EC2インスタンスを起動後にmysql-serverをインストールしようとしたらエラーが発生。
**エラー文が長かったため一部のみ表示させてます**

````
[ec2-user@ip-10-10-10-57 ~]$ sudo yum install -y mysql-community-server
Last metadata expiration check: 0:01:21 ago on Fri Jul 12 15:35:25 2024.
Error: 
 Problem: conflicting requests
  - nothing provides libcrypto.so.10()(64bit) needed by mysql-community-server-8.0.11-1.el7.x86_64 from mysql80-community
  - nothing provides libssl.so.10()(64bit) needed by mysql-
````

### 対策
chatGPTにエラーぶんなげたりして色々調べ尽くしましがなかなか解決できず困っていたら以下の記事を発見して参考にさせていただきました。そしたら解決。

https://qiita.com/Code_Dejiro/items/c97c400b92a85dce4468

````
[ec2-user@ip-10-10-10-57 ~]$ sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2023
[ec2-user@ip-10-10-10-57 ~]$ sudo yum install -y mysql-community-server
````
### 原因
GPGというオープンソースの公開鍵が私の環境に会ってなかったぽいです。そのため、環境に合わせたGPGを新たにインストールする必要があったみたいですね。私の環境が**Amazon Linux 2023**なので2023年のGPGが必要だったのかも(間違った認識でしたらすみません・・・)

### 参考記事
[【AWS EC2】Amazon Linux2 にMySQLをインストールしようとしてGPGでつまづいた話](https://qiita.com/Code_Dejiro/items/c97c400b92a85dce4468)

[GPGキーの関係でmysqlがインストールできない時の対処法](https://qiita.com/yuyanstart/items/e8a6f1d2fd7cbf1cfd59)

[GPGキー とは](https://qiita.com/miyuki_samitani/items/9c155111220cecac5154)
知っていれば便利なYAMLのAnchorとAlias

# 使い方

```sample.yaml
# & Anchor定義
environment: &env
  env_1: COMMON_ENV1
  env_2: COMMON_ENV2
# * Alias指定
service1:
  *env
# 上書きや追加も可能
service2:
  <<: *env
  env_1: UPDATE_ENV1
  env_3: SERVICE_ENV3
```

確認には yq を使います。

https://mikefarah.gitbook.io/yq

```shell
$ cat sample.yaml | yq
# & Anchor定義
environment: &env
  env_1: COMMON_ENV1
  env_2: COMMON_ENV2
# * Alias指定
service1: *env
# 上書きや追加も可能
service2:
  !!merge <<: *env
  env_1: UPDATE_ENV1
  env_3: SERVICE_ENV3
```

yaml を評価する

```shell
$ cat sample.yaml | yq 'explode(.)'
# & Anchor定義
environment:
  env_1: COMMON_ENV1
  env_2: COMMON_ENV2
# * Alias指定
service1:
  env_1: COMMON_ENV1
  env_2: COMMON_ENV2
# 上書きや追加も可能
service2:
  env_2: COMMON_ENV2
  env_1: UPDATE_ENV1
  env_3: SERVICE_ENV3
```



:::note warn
2024/7/13時点でも Github Actions でサポートされていなかったりするようなので注意してください。
:::

https://github.com/actions/runner/issues/1182
TerraformでVercelの色々コード管理試してみた

## 概要

[TerraformのVercel Provider](https://registry.terraform.io/providers/vercel/vercel/latest/docs)を参考にVercelの下記の管理を試してみたので、つらつらやったことを書きます。

- Projects設定
  - Projectの設定
  - デプロイ
  - `vercel_attack_challenge_mode`の設定
- 独自ドメイン設定
  - Vercelに指定された`A`レコードの方式で独自ドメインを紐付け

コードは下記

https://github.com/K-Sato1995/tf-nextjs-demo

※あくまでも現在何ができるのかな〜を軽く試してみたレベルの記事です


## 各種バージョン

- `hashicorp/aws`: `5.58.0`
- `vercel/vercel`: `1.12.0`
- `terraform_version`: `1.5.7`


## Vercel Projectの作成

[こちら](https://vercel.com/guides/integrating-terraform-with-vercel)の記事に沿ってサクサク作れました。

```tf
terraform {
  required_providers {
    vercel = {
      source = "vercel/vercel"
      version = "~> 1.0"
    }
}

resource "vercel_project" "tf-nextjs-demo" {
  name      = "tf-nextjs-demo"
  framework = "nextjs"
  git_repository = {
    type = "github"
    repo = "自分のレポジトリ"
  }
}
```

## デプロイ + `vercel_attack_challenge_mode`の設定

```tf
data "vercel_project_directory" "nextjs-blog" {
  path = "../nextjs-blog" // デプロイしたいプロジェクトのDirを設定
}

resource "vercel_deployment" "tf-nextjs-demo_deployment" {
  project_id  = vercel_project.tf-nextjs-demo.id
  files       = data.vercel_project_directory.nextjs-blog.files
  path_prefix = "../nextjs-blog"
  production  = true
}

resource "vercel_attack_challenge_mode" "tf-nextjs-demo_attack_challenge_mode" {
  project_id = vercel_project.tf-nextjs-demo.id
  enabled    = true
}
```

- [Attack Challenge Mode](https://vercel.com/docs/security/attack-challenge-mode)とは？

## カスタムドメインの設定

私の場合はRoute53で管理していたので、そのケースの設定になります。

- vercel側の設定([vercel_project_domain](https://registry.terraform.io/providers/vercel/vercel/latest/docs/resources/project_domain#required)を参考に)

```tf
resource "vercel_project_domain" "tf-nextjs-demo_domain" {
  project_id = vercel_project.tf-nextjs-demo.id
  domain     = "設定したい独自ドメイン"
}
```

- AWS側の設定([route53_record](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/route53_record)を参考に)

下記の画像のようにVercelから指定されたAレコードで紐付けます。

![](https://storage.googleapis.com/zenn-user-upload/8200a7d543eb-20240713.png)

```tf
// provider追加
terraform {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.0"
    }
  }
}

data "aws_route53_zone" "dns_zone" {
  name = "dnsゾーン指定"
}
 
resource "aws_route53_record" "dns_record" {
  zone_id = data.aws_route53_zone.dns_zone.zone_id
  name    = "独自ドメイン"
  type    = "A"
  ttl     = 300
  records = ["76.76.21.21"] // Vercelから指定されたIPアドレス
}
```

## まとめ

↑やるとvercelのproject作成から独自ドメイン設定までコード管理できました。


あと、私の使った`vercel/vercel`: `1.12.0`だとStorage等のサポートはありませんでしたが、絶賛開発中みたいでした。

[Add support for Vercel Storage #127](https://github.com/vercel/terraform-provider-vercel/issues/127)
【Spring Boot】ログインユーザーを取得する

spring securityを使ってログイン中のユーザーを取得したり表示したりするための設定が意外と面倒だったため記録

## ユーザー情報クラス
`@AuthenticationPrincipal`で取得するためにaccountフィールドを追加
```AccountDetail.java
import java.util.ArrayList;
import com.example.todo.entity.Account;
import org.springframework.security.core.userdetails.User;
import lombok.Getter;

public class AccountDetail extends User{
    // 追記
    @Getter
    private Account account;

    public AccountDetail(Account account){
        super(
                account.getName(),
                account.getPassword(),
                true,
                true,
                true,
                true,
                new ArrayList<>()
        );
        // 追記
        this.account = account;
    }
}
```
* ref : https://docs.spring.io/spring-security/site/docs/5.0.x/reference/html/mvc.html#mvc-authentication-principal

## e.g. Controller
* `@AuthenticationPrincipal`を使って取得する
* `@AuthenticationPrincipal(expression = "account") Account account`
* `expression = "account"`でUserクラスの`account`フィールドを参照して取得
```java
import com.example.todo.entity.Account;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

@Controller
public class TodoController {
 
    @RequestMapping(value="/index")
    public String index(@AuthenticationPrincipal(expression = "account") Account account, ...) {
        long accountId = account.getId();
        ...
        return "todo/index";
    }
```
`@AuthenticationPrincipal(expression = "account") Account account`これで何が起こっているか
1. `Authentication auth = SecurityContextHolder.getContext().getAuthentication();`
1. `AccountDetail accountDetail = (AccountDetail) auth.getPrincipal();`
1. `Account account = accountDetail.getAccount();`

`getPrincipal()`でUserクラスにキャストできないためちょっとした設定が必要になるみたいです

# 画面での表示
Thymeleafでログイン中のユーザーを取得
## dependencyの追加
```pom.xml
<dependency>
    <groupId>org.thymeleaf.extras</groupId>
    <artifactId>thymeleaf-extras-springsecurity5</artifactId>
</dependency>
```

## Thymeleaf

* htmlタグに`xmlns:sec="http://www.thymeleaf.org/extras/spring-security"`を追加
* 表示したい箇所で`sec:authentication`を使用

```html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" xmlns:sec="http://www.thymeleaf.org/extras/spring-security">
<head>
    ...
</head>
<body>
    <p sec:authentication="name"></p>
</body>
</html>
```
隙間時間にみる早見表〜応用情報技術者試験⑥〜

# この記事について
応用情報技術者試験を勉強していた時になかなか覚えられないな〜っとなっていた内容を毎回見ることができるようにメモしていたものです！

※さらっと見れるように分割しています。

## OSI参照モデル
アプリケーション層
プレゼンテーション層
セッション層
トランスポート層
ネットワーク層
データリンク層
物理層

## 無線LAN
### IEEE 802.11
| 1 | 2 |
|:-:|:-:|
|  a |  5GHz 54Mbps |
| b  |  2.4GHz 11Mbps |
| g  | 2.4GHz 54Mbps  |
| n  |  2.4GHz/5GHz 54Mbps |
| ac  |  5GHz 1300Mbps |
| ah  | 920MHz 4Mbps  |

## BCP
事業継続計画
## BPO
ビジネスアウトソーシング

## リーダーシップ論
### PM理論
パフォーマンスとメンテナンス
### SL理論
部下の成熟度合と状況に依存

## パスワードクラック
### ブルートフォース
ID固定でパスワード
### レインボー攻撃
ハッシュ変換表から推測
### パスワードリスト
流出パスを他のサイトで試す

## PMBOC
プロジェクトマネジメントの知識体系

## アクティビティ定義プロセス
プロジェクトの成果物を生成するために実施すべき具体的な作業を特定する

## 定量的リスク分析(PMBOK)
特定したリスクがプロジェクト目標全体に与える影響を数量的に分析する

## UML
### 構造図
クラス図、オブジェクト図、パッケージ図、コンポーネント図、複合構造図、配置図
### 振る舞い図
ユースケース図、アクティビティ図、状態マシン図、シーケンス図、コミュニケーション図、相互作用概要図、タイミング図

## クラス図
ER図の発展系
## アクティビティ図
フロー図の発展系

## リスク分類
### プラスのリスク対応
活用、共有、強化、受容
### マイナスのリスク対応
回避、転化、軽減、受容

## RAIC(実行責任者、説明責任者、協業先、報告先)
チームでプロジェクトを運営する場合などに、そのチーム内の個人に割り当てられた役割を定義

## メールなどの許諾
### オプトイン方式
利用者の許諾が必要

### オプトアウト方式
利用者の許諾が必要のないもの(料金メールとか)

## 非機能要件
可用性、性能、保守性、セキュリティ等

## ファブレス企業
生産しない
## ファウンドリ企業
生産だけ

## RoHS指令
有害物質影響の最小化(ハザード)CEマーク


プロキシサーバ:0中継の代理 クライアントの隠蔽 リバースならサーバーの隠蔽

## openSSL
暗号化ソフトウェア

## CPUパイプライン処理時間の求め方
| 式 |
|:-:|
| (d+n-1)*p   |

d：ステージの深さ depth
p：pitch
n：命令数 (ステージごとではない)

## フリップフロップ回路
折り返すところに前回の数値が記憶されている

## ブロードキャスト
(全て1)同一ネットワーク全て

## ネットワークアドレス
(全て0)

## ビット誤り率
| 公式 |
|:-:|
| ビット誤り率=誤りビット数÷送信ビット数 |

## 逆ポーランド方式
スタックで記述される
y=(A+B)*c → yAB+c*=

## 終わり
お疲れ様でした！
隙間時間にみる早見表〜応用情報技術者試験⑤〜

# この記事について
応用情報技術者試験を勉強していた時になかなか覚えられないな〜っとなっていた内容を毎回見ることができるようにメモしていたものです！

※さらっと見れるように分割しています。

## ファクトテーブル
データウェアハウスにおいて分析の対象になるテーブル

## パフォーマンス測定(EVM)管理対象
コスト、スケジュール

## ウォークスルー方式(内部統制）
業務プロセスの追跡・評価

## インスペクション
作成者以外がモデレーターとしてレビューし、公式な記録と分析を行う

## TLO（技術移転機関）の役割
大学の研究成果の特許化及び企業への技術移転の促進

## コンバージョン率
広告をクリックして登録や商品購入に至った率

## FPGA
論理回路を基盤上で実装した後に再プログラムできる基盤回路

## アクチュエーター
コンピューターの電気信号を物理エネルギーに変える

## SoC
複数のチップで構成していたコンピューターシステムを一つのチップで実現したLSI(トランジスタやダイオード、受動素子などを集積させて、複雑な機能を実現する電子回路部品)

## フリンの分類
### SISD
1個の命令で1個のデータを処理する
### SIMD
1個の命令で複数のデータを処理する
### MISD
複数の命令で1個のデータを処理する
### MIMD
複数命令で複数のデータを処理する

## MMU
CPUが指定した仮想アドレスを物理アドレスに対応させる

## オーバレイ方式
容量の大きいプログラムをセグメント分割し必要な分だけ主記憶にロードする

## コンパイラの処理順序
字句解析>構文解析>意味解析>最適化>コード生成

## バリューチェーン
### 主活動
購買物流、製造、出荷物流、販売・マーケティング、サービス
### 支援活動
人事・労務管理など4つ

## エスクローサービス
出品者と落札者の仲介

## マーケティング戦略
### 4P
product(製品)、Price(価格)、promotion(プロモーション)、place(流通)
### 4C
customer value(顧客価値)、customer cost(顧客側のコスト)、communication(顧客とのコミュニケーション)、Conveniens(顧客側の利便性)

## アクセシビリティ
利用のしやすい、便利

## ipアドレスとドメインの関連付け
Aレコード

## SOA
利用者の視点から各業務システムの幾つかの独立した部品に分けることにより、業務プロセスとの対応づけや他のソフトウェアとの連携を容易にする方法

## コンカレントエンジニアリング
製品の企画・設計・製造を同時並行処理し全体のリードタイムを短縮

## クラウドソーシング
発注者がインターネットで発注し、受注者を募集する

## 産業財産権
意匠権、実用新案権、商標権、特許権

## デジタルサイネージ
ディスプレイに映像、文字などの情報を表示する電子看板

## ITIL
サービスマネジメントのフレームワーク
「一般マネジメントプラクティス、サービスマネジメントプラクティス、テクニカルマネジメントプラクティス」

## OCSP
デジタル証明書の失効確認をオンライン上で行う

## サーバー運用
### スケールアウト
サーバを増やして処理性能をあげる(逆 スケールイン)
### スケールアップ
一台辺りの処理性能をあげる(逆 スケールダウン)

## フラッシュメモリ
不揮発性メモリ、USBやSSD


## CMMI
ソフトウェアを開発・保守する組織のあり方

## QC7つ道具
層別、パレード図、散布図、ヒストグラム、管理図、特性要因図、チェックシート

## 通信方式(IPv4)
ブロードキャスト、マルチキャスト、ユニキャスト

## ERP
基幹業務サポート(ﾌﾚｰﾑﾜｰｸみたいな)
## RPA
業務自動化

## アジャイル開発(体制)
プロダクトオーナー、スクラムマスタ、アジャイルコーチ、開発チーム

## アジャイル開発(イベントなど)
スプリント(反復の作業単位)、スプリントバックログ(タスクリスト)、ベロシティ(相対的な生産量)、イテレーション(反復)、レトロスペクティブ(振返り)

## ラウンドロビン方式
実行時間内に終わらなければ次のタスク

## ライトスルー方式
データを書き込む際にキャッシュとメインメモリの両方に書き込む。

## ライトバック方式
データを書き込む際にまずキャッシュに書き込み、後でメインメモリに書き込む。

## 待ち行列
| 公式 |
|:-:|
| 待ち行列=利用率/(1-利用率)×サービス |

※利用率は全体時間のうちにどれくらい利用しているか

# サーバ冗長化
## raid0
ストライピング(分散高速化)
## raid1
ミラーリング
## raid3
パリティ(ビット単位)
## raid4
パリティ(ブロック単位)
## raid5
パリティ(分散、ブロック単位)

## RASIS
R:信頼性、A:可用性、S:保守性、I:保全性(一貫性)、S:安全性

## 次
https://qiita.com/mr_noppo/items/b1443dc98828b6a9dd63
隙間時間にみる早見表〜応用情報技術者試験④〜

# この記事について
応用情報技術者試験を勉強していた時になかなか覚えられないな〜っとなっていた内容を毎回見ることができるようにメモしていたものです！

※さらっと見れるように分割しています。

## マッシュアップ
公開されている複数のサービスを利用して、新たなサービスを提供

## SRI
財務評価、社会的責任への評価をし、企業投資を行う

## フィージビリティ
ビジネス新規立ち上げの際の分析

## VICS
道路上に設置したビーコン又はFM多重放送から情報を受信。渋滞、工事、事故情報を表示するシステム

## MRP
製品の基準生産計画を基に部品の手配数量を算出する

## リスト（プログラミング）
データの追加は処理変わらず、削除は末尾にいくほど処理が増える

## 誤差
### 丸め誤差
有効桁数内で切り上げ等行う時
### 情報落ち
大小が離れてる数値の小さい数値(小数とか)
### 桁落ち
絶対値の誤差が非常に小さい時
### 打ち切り誤差
有限項での打ちきり

## ハフマン符号
確率の高い記号のビット数を最小にしデータを圧縮する
例：AAB→001

## ラングレス符号
反復する記号を数値で表現する
例:aa→2a

## SMIL
マルチメディアのレイアウトや再生タイミングをXMLフォーマットで記述したもの

## パルス符号変調(PCM)
標本化(サンプリング)→量子化→符号化

###  標本化
アナログ信号を取り出す
#### サンプリング周波数
一秒間辺りの回数

### 量子化
アナログデータをデジタルに
#### 量子化ビット数
サンプリングで生成されるビット数

### 符号化
10進数を二進符号形式にする

## BCD
1０進数一桁(1桁重要)を4ビットで表す
例:725は0111 0010 0101

## カルノー図
行と列が真になる部分を表す論理式の図法
(論理式に戻すときには真の場合のみに着目する。論理積で書かれているので注意)

## RSS
webページの見出しや要約などのデータについて、XMLを使って更新を通知するためのフォーマット

## エクスプロイトコード
ソフトウェアやハードウェアの脆弱性を検査するために作られたプログラム

## ER図
 RDBの設計で使用される。実体の詳細や関係を表す

## SDN
ソフトウェアによって仮想的なネットワークを構成する技術(openFlowプロトコルでデータと制御処理を繋げる)
ルータやl2などの通信をサーバー内で実現する、物理もポートの切り替えなどを行う

## スパニングツリープロトコル(STP)
L2sw間のループ構成をツリー構成に変更し、障害でネットワークが切れても、止めていたネットワークを開くことで冗長化できる

## ブロードキャストストーム
ネットワーク内にブロードキャスト通信をした時にループ構成の影響で無限ループすること

## C&Cサーバ
侵入して乗っ取ったパソコンに指令を外部から出したり応答を受けとる

## データレイク(ビックデータ)
データをそのままの形式で貯蔵

## レンダリング
仮想情報をディスプレイに描画可能にする

## デジタルフォレンジックス
不正アクセス等の犯罪の法的証明を確保できるように原因究明に必要な情報の保全、収集、分析をすること

# 次
https://qiita.com/mr_noppo/items/4d3e51f301550f3e46d0
WPF知識ゼロからカッコいいUIを１０分で作る

# 目標
WPFの勉強。ついでにClaudeでUI開発。

# 所感
ClaudeのArtifact機能とpublish機能すごい。
[Claude提案のUI](https://claude.site/artifacts/6ad7521f-491e-467e-b5d1-d265e0c89f07)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680528/9bbb9658-7f26-b2fe-9797-69c6196aa909.png)

# 流れ
カッコいいUIにしたかったので近未来的なUIを希望しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680528/84a2c602-4671-8a60-4fa1-b42a69cbf38d.png)

最初の提案UI。この時点でいい感じ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680528/7033d5f0-872a-f489-5faa-66269d513ed4.png)

次に実装機能を考えました。OpenAIのAPIも考慮して機能を作りたいと伝えましたが、一回目の提案はありきたりな感じの提案だったのでパワハラを使ってより良いアイデアを求めました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680528/10fccde5-d662-5313-e794-6f769489cf3b.png)

神経接続型没入体験の案を採用することにしました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680528/d2c61494-8a91-2d30-a278-441c10393671.png)
瞬時にカッコいいUIできちゃうのすごいです。Publish機能で即時公開できるのも新体験です。
[Claude提案のUI](https://claude.site/artifacts/6ad7521f-491e-467e-b5d1-d265e0c89f07)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680528/9bbb9658-7f26-b2fe-9797-69c6196aa909.png)

あとはおまけ程度にコードWPFのコードも生成してもらい、コピペしたら動きました。
WPFは何も理解進みませんでした。今後頑張ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680528/1dc731de-4d3c-25bc-61f7-770d88ceaa22.png)
[VSCode]Github Copilotで1単語ずつ承認したいけど、ショートカットが効かない時

# はじめに
Github Copilotのサジェストを1単語ずつ承認するショートカットがうまく動かなかったので、調べてなんとかしました

# ショートカット
MacOSのデフォルトでは `cmd + →` です。
https://docs.github.com/ja/copilot/using-github-copilot/getting-code-suggestions-in-your-ide-with-github-copilot#accepting-partial-suggestions

他のショートカットと競合したのか動きませんでした。

# ショートカットのoverride
まず、Preferrences -> Keyboard Shortcutsを選択してください。

そうしたら右上にこんな感じのマークがありますので、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312001/c14d79ef-7ada-98c5-b72a-b1259fba2ffe.png)

赤く囲われたアイコンをクリックしてください。

そうしたら、keybindings.jsonっていうファイルが開くので、以下のようにしてください。

```json
[
  {
    "key": "cmd+right", // 任意のコマンド追加
    "command": "editor.action.inlineSuggest.acceptNextWord",
    "when": "inlineSuggestionVisible && !editorReadonly"
  }
]
```
https://stackoverflow.com/questions/75114315/how-to-accept-only-the-next-word-in-github-copilot-suggestion

以上です。

# まとめ
便利になりました。
npm init playwright@latest で e2e ディレクトリが作成される場合

対話的にプロジェクトを作成していく際に表示される `Where to put your end-to-end tests?` の部分で、すでに `tests` ディレクトリが存在する場合は e2e ディレクトリがデフォルト値に設定されている。

https://github.com/microsoft/create-playwright/blob/main/src/generator.ts#L126

```ts
        initial: fs.existsSync(path.join(this.rootDir, 'tests')) ? 'e2e' : 'tests',
```
隙間時間にみる早見表〜応用情報技術者試験③〜

# この記事について
応用情報技術者試験を勉強していた時になかなか覚えられないな〜っとなっていた内容を毎回見ることができるようにメモしていたものです！

※さらっと見れるように分割しています。

## インデックスレジスタ
値を増減させることで等間隔にメモリ参照を行える（配列に使用）

## ベースレジスタ
プログラムの最初のメモリ値

## ファジング
ソフトウェアに問題を起こしそうなデータを入力し、挙動を監視、脆弱性を見つける

## マルチプロセッサ
### 密結合マルチプロセッサ
複数のプロセッサ（CPU）が単一OSで主記憶を共有する。アクセス競合が発生すると処理効率が低下する。
### 疎結合マルチプロセッサ
複数のプロセッサ（CPU）が排他的に複数OSと主記憶で稼働する

## プログラムカウンタ
次に実行する命令のアドレスが入っている

## CPUの命令実行手順
命令の取り出し＞命令の解読＞対象データ（オペランド）読みだし

## プリエンティブ
実行途中でCPUの使用権を奪う
## ノンプリエンティブ
実行途中でCPUの使用権を奪えない

## マスタサーバ
ゾーンのデータベースを持っていてそれを管理するサーバ

## スレーブサーバ
マスタサーバからゾーンの情報を受け取りコピーを保存するサーバ

## スタックとヒープ
サブルーチンからの戻り番地の退避にはスタック領域が使用され、割り当てと解放の順序に関連がないデータの格納にはヒープ領域が使用される

## エクスプロイトキット
OSやアプリケーションソフトウェアの脆弱性を悪用して攻撃するツール

## CVSS
基本評価基準、現状評価基準、環境評価基準の三つの基準で情報システムの脆弱性の深刻度を評価

## マルウェア対策(フォールスネガティブ)
感染しているファイルを感染していないと判断してしまう

## 液晶ディスプレイ
光の透過を画素毎に制御し、カラーフィルタを用いて色を表現する

## displayport
映像と音声をパケット化してシリアル伝送できる

## キャッシュメモリ割り当て方式
### ダイレクトマッピング方式
単一のロケーションに割り当てる。探索コストは低いがキャッシュヒット率も低い。
### フルアソシエイティブ方式
任意のロケーションに割り当てる。探索コストは高いがキャッシュヒット率も高い。


## VRRP
ルータ冗長化

## シンプロビジョニング
利用者の要求に応じて仮想ボリュームを提供する

## ペトリネット
並行して発生する事象間の同期を表す。有向2部グラフで表す

## コンティンジェンシ計画
あらかじめ定義された、ある条件の時にだけ実施する計画

## エスクロウ条項
経営破綻などの時にソースコードを第三者に預託する

## フェーズゲート(PMBOK)
プロジェクトのフェーズ終了ごとに、進捗状況を評価し、継続か中止を判断

## サービスパッケージ
コア、実現、強化サービスで構成された、特定の種類の顧客ニーズへのソリューションを提供する複数サービスの集まり

## サービスマネジメント管理手順
インシデント管理→問題管理(根本原因の特定)→変更管理→リリース管理及び展開管理

## ソフトウェア開発プロジェクト(構成管理)
プログラムのバージョン

## インスペクション
製造者以外がモデレーターとして主導し、記録と分析を行うレビュー方法

## DFD
構造化分析法、業務処理とデータの流れを、三つの要素(プロセス、源泉と吸収、データストア)と、データフローを用いて表す

## システムのモデル化(構造化分析)
構造化仕様書の作成は、現物理モデル→現倫理モデル→新倫理モデル→新物理モデルの流れ

## 次
https://qiita.com/mr_noppo/items/0ae5f5a4eb92671eb778
【ChatGPT＋Code Interpreter】で音声ファイルから音声の波形を出してもらう。


　どうも、カーブミラーです。

　今回は、Code Interpreterに、音声ファイルから音声の波形を出してもらいます。

:::note info
本記事は、ChatGPT（有料版）
で行なっております。あしからず。
:::

　ニュースはないので、本題です。

　今回は、
　　音声ファイルから
　　　波形グラフを作成します。

　そんなの
　　何に使うんだ？と問われれば
　　　さぁ、と答えるしかない
　　　　のですが😅

　実は、やりたいことがありまして
　　それで出してみたんです。

　まぁ、それは追々ということで。
***
　手順です。
　❶GPT-4oであることを確認
　❷音声ファイルをアップロード
　❸Prompt入力
```Text:
CodeInterpreterを使って、音声ファイルを解析して、波形グラフを出してください。ダウンロードできるようにしてください。
```
　❹送信
　❺グラフとダウンロードリンクが表示

　表示されるグラフはこちら。
![audio_waveform.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457238/79dfdc33-f3c3-f6fc-4b56-c3be583d70e6.png)

　ここで注目して欲しいのは、
　　Promptの
　　　“ダウンロードできるようにしてください”
　　　　の部分です。

　本来ならば、
　　セッション上で
　　　見られることを
　　　　想定しているのですが、
　　　　　なぜか見せてもらえません。

　仕方ないので
　　ダウンロードできるように
　　　指示したわけです。

　そしたら、
　　グラフが表示され、
　　　ダウンロードの必要が
　　　　なくなりました😅

　ですから
　　ダウンロードは
　　　してもしなくても
　　　　個人の自由です。

　みなさんの
　　作品制作の糧に
　　　なれば、幸いです。

　今回は、ここまで。
Rustのrand使ってRandomArt作ってみた



# はじめに

下記でアナログ時計を作った構成を利用し、

Rustのrandを使ってRandomArt挑戦してみようと思います

前回作ったアナログ時計について

https://qiita.com/shisojuice/items/370769ecdfb48313ed24

# プロジェクトの作成

Rustで縦横320の無地の画像に用意。

320内におさまるランダムな大きさのランダムな色の円を4つほど書いてみる。

最後に、Base64の文字列を返す。

```rust:lib.rs

// 省略

#[wasm_bindgen]
pub fn trick_png() -> String{
    let mut img = DynamicImage::new_rgba8(320,320);
    // 円の中心座標
    let center_x = img.width() / 2;
    let center_y = img.height() / 2;
    let mut rng = rand::thread_rng();
    for _i in 0..=4 {
        draw_filled_circle_mut(&mut img, (center_x as i32, center_y as i32), rng.gen_range(0..=155), Rgba([rng.gen_range(0..=255), rng.gen_range(0..=255), rng.gen_range(0..=255), 255]));
    }

    let mut buffer = Cursor::new(Vec::new());
    img.write_to(&mut buffer, ImageFormat::Png).unwrap();
    let base64_string = general_purpose::STANDARD.encode(buffer.get_ref());
    // データURL形式で返す
    format!("data:image/png;base64,{}", base64_string)
}

// 省略

```

JavascriptのsetIntervalで上記の関数を呼び出して動かす。

なんとなく秒数べつに用意してみる。

```Javascript:index.js

// 省略

setInterval(()=>{
    document.getElementById("mainImg1").src = trick_png();
}, 10);
setInterval(()=>{
    document.getElementById("mainImg2").src = trick_png();
}, 100);
setInterval(()=>{
    document.getElementById("mainImg3").src = trick_png();
}, 1000);

// 省略

```

これで実装完了！！

# 今回の成果物

デモURL

https://shisojuice.github.io/Rust_RandomArt/


デモ画像

![Rustのrand使ってRandomArt作ってみた_001.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3777149/3dc50cd2-79e9-6d85-b499-8d9ad29e0f27.jpeg)


ソース

https://github.com/shisojuice/Rust_RandomArt


# まとめ

今回はRustのrandを使ってアートに挑戦してみました。🧑‍🎨

作っている最中に目が回りました😰

randについて

https://docs.rs/rand/latest/rand/

https://rust-random.github.io/book/intro.html


※間違い等ありましたら、ご指摘いただけると助かります。
ノーコードが使えない5つの理由 Re: ノーコードって結局使えないよね～って話

https://qiita.com/mai_llj/items/e1240e710a1db19b425a

トレンドにあがってきた記事への後追いです。

ノーコード/ローコードが使えない理由を、勢いだけで5つあげます。

一応ここではノーコード≠生成AIです。

# 使えない理由① 「テストを書けない」

ノーコードツールでテスト書けますか？
ソフトウェア開発で一番手間のかかるのはテストなのです。
テストを書けない開発環境は無理無理無理です。

# 使えない理由② 「再利用ができない、あるいはしにくい」

あそこで使ったあの処理、こっちでも使いたいんだけどどうしたらいい？
コピペ？
変更点共有したいんだけど
え！？できない？？

# 使えない理由③ 「環境を分けるのがやっかい」

開発環境、ステージング環境、プロダクション環境と分ける現場はよくあると思います。
ノーコードで同じことできますか？

# 使えない理由④ 「GUIはだるい」

マウスずるずる動かすだけで、キーボードレスならよいのですけれど、実際にはそんなことはないです。
また、デバッグするのも変更点を追うのも厄介です。

# 使えない理由⑤ 「エンドユーザーコンピューティングの夢は破れた」

前世紀、エンドユーザーコンピューティングという夢を追う話がありました。
成功しましたか？
時代は繰り返すのです。

# 終わりに

ノーコードツールの行く末は、既に過去に論じられています。

「狼人間を撃つ銀の弾はない」

https://www.maruzen-publishing.co.jp/item/?book_no=294733

生産性[^1]向上を目的にノーコードツールを使うより、コンピュータが最大効率で働ける既製品を導入して、業務側を合わせちゃいましょう。そうすれば生産性無限大です。

[^1]: そもそも生産性を測る方法はあるのだろうか。
JaCoCoでカバレッジを取ると0%になるのを解決した話

## 概要
初めてJaCoCoを使って、初めてカバレッジを取ったのですが0%でした。
動作に問題はなさそうなのに0%でした。

## 解決方法
サーバータブにある停止ボタンで、サーバーを止めること。
![スクリーンショット 2024-07-13 11.29.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/485388/b9430ffd-1d11-9185-4af1-7a17c004d7c2.png)


## カバレッジ0%になった原因
メニューバー直下の停止ボタンで、サーバーを止めたこと。
理由はわかりませんが、この停止ボタンでサーバを止めるとカバレッジが0%になりました。
![スクリーンショット 2024-07-13 11.11.14 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/485388/f25a06f0-4e9b-2cb3-ceac-ce3fb8b6eb4d.png)

ググっても情報が出てこず、カバレッジ0%問題にかなり詰まりました。

## メモ
・　「JaCoCo」は「Java Code Coverage」の略で「ジャココ」と読む。
・　if文の場合はデバッグで値を変えてやれば、別のケースのカバレッジが取れる
robloxでassistant その125

# 概要
robloxでassistantやってみた。
練習問題やってみた。

# 練習問題
スクリプトだけで、ボタンでパーツを上下左右させよ。

# 手順
- ReplicatedFirstに、LocalScriptを追加。
- スクリプトを書く。

```


local Players = game:GetService("Players")
local Player = Players.LocalPlayer
local PlayerGui = Player:WaitForChild("PlayerGui")
local Gui = Instance.new("ScreenGui")
Gui.Parent = PlayerGui
local button0 = Instance.new("TextButton")
button0.AnchorPoint = Vector2.new(4, 0.9)
button0.Size = UDim2.new(0.05, 0, 0.1, 0)
button0.Position = UDim2.new(0.5, 0, 0.5, 0)
button0.Text = "up"
button0.Parent = Gui
local button1 = Instance.new("TextButton")
button1.AnchorPoint = Vector2.new(4, 0)
button1.Size = UDim2.new(0.05, 0, 0.1, 0)
button1.Position = UDim2.new(0.5, 0, 0.5, 0)
button1.Text = "down"
button1.Parent = Gui
local button2 = Instance.new("TextButton")
button2.AnchorPoint = Vector2.new(4, 0.5)
button2.Size = UDim2.new(0.05, 0, 0.1, 0)
button2.Position = UDim2.new(0.6, 0, 0.5, 0)
button2.Text = "right"
button2.Parent = Gui
local button3 = Instance.new("TextButton")
button3.AnchorPoint = Vector2.new(4, 0.5)
button3.Size = UDim2.new(0.05, 0, 0.1, 0)
button3.Position = UDim2.new(0.4, 0, 0.5, 0)
button3.Text = "left"
button3.Parent = Gui

wait(1)
local part = Instance.new("Part", workspace)
part.Anchored = false
part.Size = Vector3.new(1, 1, 1)
part.Position = Vector3.new(0, 5, 0)
local att = Instance.new("Attachment")
att.Parent = part
local LV = Instance.new("LinearVelocity")
LV.Attachment0 = att
LV.MaxForce = 10000
LV.VectorVelocity = Vector3.new(0, 0, 0)
LV.Parent = workspace

button0.MouseButton1Click:Connect(function()
	print("up")
	LV.VectorVelocity = Vector3.new(0, 1, 0)
end)
button1.MouseButton1Click:Connect(function()
	print("down")
	LV.VectorVelocity = Vector3.new(0, -1, 0)
end)
button2.MouseButton1Click:Connect(function()
	print("right")
	LV.VectorVelocity = Vector3.new(1, 0, 0)
end)
button3.MouseButton1Click:Connect(function()
	print("left")
	LV.VectorVelocity = Vector3.new(-1, 0), 0
end)




```

# 写真

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/48d277bf-cb51-e63b-6137-25a93836d1e2.png)


以上。
[AWS #18] Auto Scaling 

<!--
 <font color="c00000"></font> 赤
-->
## はじめに
こんにちは
今回もコンピューティングサービス分野である **<font color="c00000">「Auto Scaling」</font>** について紹介したいと思います。
## Auto Scaling
「Auto Scaling」とは、**あらかじめ決めておいた条件に従って**<font color="c00000">**ITリソースを増減するもの**</font>です。AWSでは **「EC2」** **「DynamoDB」** などでAuto Scalingを使用することができます。これを使用するとEC2インスタンスがどの時点でいくつ必要であるか？を予測する必要が無くなります。

:::note info
EC2インスタンスを**必要な時に自動で増減できる**
:::

### メリット
・**高可用性であること**
システムにアクセスが集中する時間帯に合わせてインスタンス数を増やすことで可用性を高めることができます。

・**耐障害性である**
例えば3台のインスタンスを常に稼働するように設定した場合に、インスタンスが1台故障すると自動的に故障したインスタンスを停止して、新しく正常に動作するインスタンスを起動することができます。
![AWS18_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3806875/3f7f3694-4b85-ec8f-8251-90683de8035d.png)

・**コスト効率化**
Auto Scalingでは、アクセス数に応じて、インスタンス数の増減が可能なためアクセスが少ないときは無駄なリソースをの使用を防ぎ、コストを抑えることができます。

## おわりに
今回のちょっとしたまとめになります。

:::note info
Auto Scalingは、**予め決めておいた条件に従ってITリソースを増減するもの**
:::
:::note info
**耐障害性、高可用性、コスト**の3つの観点で**メリット**がある
:::

Auto Scalingは自動で行うことで、運用の手間やコスト削減に貢献できるということがわかりました。最後までお読みいただきありがとうございました！
>日頃より活用している参考書です。
>> **「参考書」**
[AWS認定クラウドプラクティショナー改定第3版](https://x.gd/19i6N)
>
> **「AWS公式サイト」**
[AWS Auto Scaling](https://aws.amazon.com/jp/autoscaling/)
>
> **「参考元」**
[【初心者向け】 Amazon EC2 Auto Scaling について](https://www.sunnycloud.jp/column/20210712-01/)
>
> **「Youtube」**
[【CLF-C02：AWSクラウドプラクティショナー】第22回 Auto Scaling (クラウドテクノロジーとサービス分野)](https://www.youtube.com/watch?v=dYjCSWvvuUI&ab_channel=AWS%E8%B3%87%E6%A0%BC%E5%AF%BE%E7%AD%96%E8%AC%9B%E5%BA%A7)
HTTPとHTTPSについて！

# HTTPとHTTPSとは

## HTTPとは？
- HTTPは、ウェブ上で情報をやり取りするためのプロトコルです
クライアント（例：ウェブブラウザ）とサーバ（例：ウェブサーバ）が通信する際に使われます

- リクエストとレスポンス：クライアントがサーバにリクエストを送ると、サーバがそのリクエストに対してレスポンスを返します
このやり取りでウェブページが表示されます

- ステートレス：HTTPはステートレスなプロトコルです
各リクエストとレスポンスは独立しており、前後のリクエストやレスポンスの状態を保持しません

## HTTPSとは
- HTTPSは、HTTPにセキュリティ機能を追加したプロトコルです
HTTPSを使うことで、通信内容が暗号化され、第三者による盗聴や改ざんを防ぐことができます

- 暗号化：HTTPSでは、SSL/TLSという暗号化プロトコルを使ってデータを暗号化します
これにより、送受信されるデータが安全に保たれます
- 認証：HTTPSでは、サーバの正当性を証明するためにデジタル証明書が使われます
これにより、ユーザーは安心して通信することができます

## まとめ
HTTPとHTTPSは、ウェブ通信において非常に重要なプロトコルです。
HTTPは基本的な通信プロトコルですが、セキュリティが弱いです。
一方、HTTPSは通信を暗号化することでセキュリティを強化しています。
特に機密情報を扱うサイトでは、HTTPSが必須です。

最後まで読んでくださりありがとうございます。
Google本社の方に聞いたいい開発者になるための習慣

# はじめに
以前自分の大学でGoogleの本社で働いている韓国の方の話を聞けるイベントがあったのでその内容をメモとして共有しようと思います。(すべて韓国語で聞いたので多少間違っている内容があったり、変な日本語になってるかもです)
# 講義してくれた人について
講義してくれた人はGoogleの本社で働いており、今までに韓国のLGやamazonなどでも開発経験のある韓国の方でした(名前は伏せます)。当時はYoutubeのショート動画関連の開発に関わっていたとおっしゃっていました。


## ソフトウェアエンジニアとは
プログラマー = コードを書く人
ソフトウェアエンジニア = コードを書く仕事を含めた全ての開発業務(データベース, アーキテクチャ, teckleadなど)
Googleではソフトウェアエンジニアリングの知識がある人がデータサイエンティストやプロジェクトマネージャーになる。

## googleが強調している3つの概念
### ① Time
時間が経つにつれて環境は絶対変わってしまうからいつもその変化に対応してソフトウェアを作っていかなければならない。10年以上経っても作動するソフトウェア、時間が経っても変化に対応できる持続可能なコードを書く。
### ② Scale
どんなにソフトウェアの規模が大きくなってもそれに適応できる計算量などを意識したコードを書く。顧客に影響を与えないスケーラビリティ構成にする。
### ③ Tradeoffs
常にデータ基盤で物事を判断する(A/Bテスト等)。

## より良い開発者になるためのマインド
### ① コードレビュー
自分より技術がある人にコードを見せて積極的にコードレビューをもらう。Googleでは社員全員がYoutubeなどのコードを閲覧することができ、場合によってはコードを変更する権利をもらえる。チーム全員が理解できるようなコードを書く。自信を持ってコードを書き、レビューしてくれる人を尊重する。コードレビューで早い段階でエラーを見つけることで、後々の工程で１からやり直さなくて良くなる。Googleであっても最低2人以上のコードレビューを通過しなければ先に進めない。
### ② 早く失敗してどんどん繰り返す
アプリなどのアイディアがあればすぐに自分で作ってみる。トライアンドエラーを繰り返す。
### ③ ドキュメント
優秀なエンジニアはそのコードがどういう仕組みで動いているのかなどを理解し文書化できる。
### ④ 知識を共有する
自分の勉強した知識などをどんどん周りに話す。アウトプット精神。
### ⑤ 他人を非難しない
Googleでは何か問題があっても問題を起こした本人を責めたりしない。責められた人が次コードを書く時躊躇して欲しくないため。問題が起こった時はその問題の解決に集中する。

## AI時代でも生き残るのに必要な能力
### ① AIでも理解できないような複雑な要求事項を理解する力
今の段階の生成AIはまだ複雑な要件を理解できない。

### ② 技術コミュニケーション力
自分が書いたコードやアーキテクチャ、アプリケーションを人に説明できる能力やコミュニケーション能力。とにかく人間関係が大事。互いに助け合い成長し合える人間になること。

## その他
- Googleは出退勤時間が決まっていない(自分のやるべきことが終わっていたら帰ってもいい)
- 言語はサーバサイドはCやGO, フロントエンドはTypescriptやAngularなど
- Googleのソースコード管理システムはgithubではなくpiperというやつ
- AIが発展してもエンジニア職は無くならない(人間がベースの部分を作らなくてはいけないため)
- Googleはエンジニアにすごい優しい(amazonは厳しいらしい)

# 終わりに
自分はまだ学生の身ですが、振り返ってみると結構貴重なお話を聞けたのではないかと思います。皆さんも是非参考にしてみてください! ここまで読んでくださりありがとうございました🙇
サーバとクライアントとは

# サーバとクライアントの関係性について

## サーバとクライアントとは？
ざっくり言うと、サーバはデータやサービスを提供する側、クライアントはそれを受け取る側です。

サーバ：情報やサービスを提供するコンピュータです。例えば、ウェブページをホスティングしているウェブサーバや、メールを管理するメールサーバなどがあります。

クライアント：サーバから情報やサービスを受け取るコンピュータです。普段使っているPCやスマホがクライアントになります。

## 仕組み

クライアントがサーバにリクエスト（「これください」というお願い）を送ると、サーバがそのリクエストに応じてレスポンス（「はい、どうぞ」という返事）を返すという流れです。

リクエスト：クライアントがサーバに何かをお願いする
レスポンス：サーバがそのお願いに応じて何かを返す
例えば、ウェブブラウザ（クライアント）がウェブページ（サーバ）を表示する時の流れは以下のような流れです。


1. クライアント（ブラウザ）が「このページを見せて」とサーバにリクエストを送る
2. サーバが「どうぞ」とウェブページのデータを返す
3. クライアントがそのデータを表示する

## まとめ
サーバとクライアントの関係は、店員さん（サーバ）とお客さん（クライアント）のようなものです。お客さんが商品をリクエストして、店員さんがそれを提供するイメージだとわかりやすいでしょうか？

ここまで読んでくださりありがとうございます。
(しくみ)白黒128x64の仮想VRAMに任意の1Dot(ドット)を書き込む(SSD1306等)(座標)(水平走査線方式)


目的

128ドット　x 64ドットの仮想VRAM(水平走査線)に
任意のx,yで指定されたドットに白／黒を書きこむ

y は、16バイト
x は、16バイトで1バイト8ビット
1ピクセルは、1ドット1バイト


●　構造


ポインターの値は、yを16倍とxを8で割ると求まる。

point_n = ( point + (y << 4) + (x >> 3))


![o_coq203.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/6e92bfd4-1da5-cd63-b48d-57c8333422ee.jpeg)


●　ドットの書き込み


(1)　1の場合

ポインターの値から実データを読み出し任意のビットにOR(オァー)で書き込む

*(point_n) = *(point_n) | ( 1 << ( x & 7 ) )



(2)　0の場合

ポインターの値から実データを読み出し任意のビットにAND(アンド)でリセットする
[xを7でマスクする][1をn回シフトする][全体を反転する][AND(アンド)する]

*(point_n) = *(point_n) & ( ~( 1 << ( x & 7 ) ) )


![o_coq208.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/30c9cf38-9fae-b467-2258-b2aadd198648.jpeg)
【Go】ファイルに追記したいときは、os.OpenFileメソッドでos.O_APPENDフラグを使おう

## はじめに
ファイルに追記するプログラムを書いているときに、追記ではなく上書きされてしまうことがあり、勉強になったので書いておきます。

## 上書きされてしまうコード
os.WriteFileメソッドを使うと、ファイルの中身が上書きされてしまう。
```go
package main

import (
	"fmt"
	"os"
)

func main() {
	err := os.WriteFile("test.txt", []byte("Hello, World!"), 0644)
	if err != nil {
		fmt.Println(err)
		return
	}
}
```

## 追記できるコード
os.OpenFileメソッドで、os.O_APPENDフラグを付けると追記できるようになる。
```go
package main

import (
	"fmt"
	"os"
)

func main() {
	file, err := os.OpenFile("test.txt", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
	if err != nil {
		fmt.Println(err)
		return
	}
	defer file.Close()

	_, err = file.WriteString("Hello, World!\n")
	if err != nil {
		fmt.Println(err)
		return
	}
}
```

## 動かしてみる
```zsh
# 2回実行してみる
go run main.go
go run main.go
```

## ファイルの中身
追記できている。
```zsh
Hello, World!
Hello, World!
```

## 参考
- https://pkg.go.dev/os#OpenFile
【英訳】「コーディングが苦手」にどう立ち向かうか？

# はじめに

本記事は下記動画の要約と、自分なりの解釈をまとめたものです。

https://youtu.be/2vPVdZWhuM8?feature=shared

#### ※読者像としてこういった悩みのある方です

- 自分はエンジニアに向いていないと感じる
- コーディングが分からない/うまくできない
- 自分よりも他の人の方が優れていると感じる
- 転職活動でうまくアピールできない

# 自分なりの学び

- 話してみると、「意外と自分は頑張っていたんだな」と実感するかもしれない
- 他者との差を気落ちする理由にせず、むしろ良いところは真似してみよう
- 比較するなら他者ではなく昨日の自分（きっと成長を実感できるはず）
- 特に変化の激しい業界で戦っている自分をもう少し褒めても良い
- シンプルに疲れているだけかもしれないので生活習慣や食事も見直してみよう
- 「少し未来の成長した自分がきっと何とかしてくれる」の精神（笑

# 以下要約

## インポスター症候群とは？

多くのソフトウェア開発者が、自己疑念に苦しんでいます。特に「自分はコーディングが得意ではない」「他の人の方が自分よりも優れている」と感じることがあります。これが、インポスター症候群と呼ばれる現象です。この症候群は、自分の能力や成果に対して自信を持てず、いつか自分が「偽物」として露見されるのではないかという不安に苛まれる状態を指します。

## 技術の急速な変化と自己疑念

ソフトウェア開発の世界では、技術が非常に速いペースで進化しており、新しいことを常に学ばなければなりません。これが自己疑念を引き起こしやすい要因の一つです。他の開発者が自分よりも多くを知っているように感じることも、この症候群を助長します。しかし、実際には多くの開発者が同じように感じており、それを表には出していないだけです。

## 自己疑念を乗り越える方法

### 自己疑念を認識する
こうした自己疑念が生じたとき、それを認識し、過度に影響を受けないことが重要です。

### 他人と比較しない
他人の成功や知識を見て自分を評価しないようにしましょう。それぞれが異なるバックグラウンドと経験を持っています。

### 継続的な学習を楽しむ
技術は常に進化します。学び続けることを楽しみ、成長の一環として捉えることが大切です。

## まとめ

インポスター症候群は、多くのソフトウェア開発者が経験する一般的な現象です。技術の急速な進化や他人との比較がその原因となりますが、自己疑念を認識し、過度に影響を受けないようにすることが重要です。自分自身のペースで学び続けることで、誰でも開発者として成長することができます。技術に対する興味と努力があれば、必ず成功に近づくでしょう。