OmniAICreator/Qiita-1.07M huggingface dataset:
基本情報技術者試験をとにかく楽に取得するためには

##0.はじめに
これは、専門学校に通っている極度のめんどくさがりのIT初心者が自分と同じような人のために書いたものです。
2021年11月に基本情報技術者を取得したときの経験をもとに記事を書いています。
必ずしも全員に役立つものではないことをご了承ください。
また、基本情報技術者試験を「取得」することを第一に考えている人のみ見てください！
##1.午前問題の攻略
基本情報技術者試験がどういう試験かということについては、目指している時点で調べていると思いますので、省かせていただきます。

午前問題で最も大切なことは、とにかく何回も問題を解くことです。
「あれ？結局楽にできないじゃん！」と思う人もいるかもしれませんが、このまま読んでいけば、楽であることがわかります。練習方法ですが、参考書などを買うよりも、


基本情報技術者試験ドットコム
https://www.fe-siken.com

このサイトを使うのが個人的には良いと思います。既に使用している人は、そのまま使っていただければ大丈夫です。
練習問題をやるうえで大切なことは、「考えないこと」。先ほどの話に戻りますが、午前問題は、一問一答形式で、全80問。選択肢から答えを選びます。さらに、7割は過去問題から出ます。その中で6割取ればよいので、正直、他ごとをやりながら片手間でポチポチしていれば、解けるようになります。なので、とにかくたくさんやるのが大切でも、あまり苦ではないんです。とにかく取得するためには、理解しながらやるよりも、体で覚えたほうが効率的に午前問題を攻略できます。
##2.午後問題の攻略

基本情報技術者を受けた人の多くを苦しめているのが、午後問題です。午前問題の勉強をしていても、初見で解ける問題は多くはないでしょう。
先に言っておきますが、午後問題は楽とは言えないです。
あくまでも、クッソ難しい→ちょっと難しいくらいにしかならないです。
午後問題で大切なのが、「捨て科目を決めておくこと」、「必須科目に大半の力を使うこと」
午後問題の練習方法も午前と同じように

基本情報技術者試験ドットコム
https://www.fe-siken.com

このサイトでやるのがいいと思います。

問1、セキュリティ（20点）

問2～5、（ソフトウェア.ハードウェア、データベース、ネットワーク、ソフトウェア設計）の内から3問出題、（プロジェクトマネジメント、サービスマネジメント、システム戦略、経営戦略.企業と法務）の内から1問出題、計4問から2問選択（各15点）

問6、アルゴリズム（25点）

問7、プログラム（C、アセンブラ、python、java、表計算）の内から1問選択。（25点）
　

必須科目は、問1のセキュリティ、問6のアルゴリズム、問7以降のプログラムです。
見ていただけたら分かると思いますが、必須科目の配点だけで合格基準の60点を超えています。なので、必須科目はほんとに重要なんです。自分は、必須科目に命を燃やしたおかげで必須科目の点数だけで60点を超えました。
アルゴリズムとプログラムは特に受験者を苦しめている科目です。この2科目はたくさん時間を使って勉強してください。勉強していけば考え方が似通っている部分があることに気が付きます。変数の値の移り変わりなど、一つ一つのプログラムの動きをゆっくり追っていけば、必ず解ける問題です。アルゴリズム→プログラムの順で勉強するのが良いと思います。
プログラム言語の選択ですが、よほど得意な言語がない限りは表計算を選択することを強くお勧めします。

セキュリティは、午前の知識が使える問題があったり、ちゃんと問題を読めば全問正解も狙えるボーナス科目です。アルゴリズムとプログラムの勉強に飽きた時などにやってください。

選択問題ですが、基本的には自分の得意な科目を選んでいただければ良いのですが、どうしても迷ったときは、ソフトウェア.ハードウェアとソフトウェア設計+1科目が比較的簡単でおすすめです。実際、自分はマネジメント系の一問は捨てて、上記2つとネットワークを選択しました。選択問題の勉強は、必須科目の勉強が終わった後の試験1週間前くらいから始めたのですが、それでも全然大丈夫でした。

午後問は、過去問道場の模試形式で、常に70点取れるくらいになるまで頑張ってください。

##3.さいごに
基本情報技術者試験は受験者がとても多いですが、だからと言って簡単な試験ではありません取得してる人のほうが少ないです。だからこそ、取得したらすごいです。
合格した自分を想像して、そこに向けて頑張ってください！！
ここまで読んでいただき、ありがとうございました。
twitterAPI を利用するなら json-bigintは使わない方が良い

大きい数字を扱うために、json-bigintを使おう。
って記事をよく見る

```

const JSONbig = require('json-bigint');
    axios.defaults.transformResponse = function (data) {
    return JSONbig.parse(data);
};

```

何桁まで使えるか？ってことは書いてない。
そこで調べてみた。

# json-bigint あり

送信
最大16桁
※big-intが効いてない可能性もあり

受信
最大19桁
1480959136104054785

# json-bigint なし

送信

最大16桁
5333330289473823

受信

最大16桁
1480959136104054

上記を踏まえて、
2022年1月12日現在、twitter_idの最大は何桁なのか？というと

最大19桁
1480959136104054785

であった。

さらに桁は増え続けるので、twitter_apiなどを利用する場合は
明示的にtwitter_idなどのidを文字列として変換して送受信する必要がある。

また api からは　id ではなく id_str を利用するようにしよう。
なぜディープラーニングをするのか？について調べてみた件2（ロジスティック回帰）

先日は論理ゲートを使ってなぜディープラーニングをするのかについてコードを動かしてみました。今回は、人工的にですがデータを使って線形分離が不可能な物を３層のニューラルネットワーク（ディープラーニングと言っておきながらディープじゃないですね）を使って確認しています。なお、参考にしたのは和歌山大学で知能システム演習の講義を持たれている八谷大岳先生の物です。先生のブログとYouTube、GitHubを参考にさせてもらっています。元の資料のリンクはcolab内に貼っていますのでそちらを確認して頂ければと思います。<br>
[Colab：なぜディープラーニングをするのか？について調べてみた件2（ロジスティック回帰）](https://colab.research.google.com/drive/1DNEE-XdHmaxjgeDaawhysrHGYyoL0KWK?usp=sharing)
今回は先生のGitHubをフォークした物を講義資料（ブログとYouTube）に従って、コードを追加したり、自分で課題を作って修正したりしています。このような投稿は初めてですので不備があるかと思います。何か決定的な不備があったり、気になる所がありましたら遠慮なく指摘して頂けると幸いです。

参考
[なぜディープラーニングするのか？を自分なりに調べてみた件](https://qiita.com/tan0ry0shiny/items/e0d4233de1e59c4d4c03)
[３次元で描写した図を動画に保存する](https://qiita.com/tan0ry0shiny/items/cda6ee024f7d799b7398)
docker : イメージの作成 / コンテナの（マウント）・作成・起動・停止・削除 （コマンド）for windows

コンテナのコマンド一覧

＊イメージの作成
docker image build -t タグ名　参照する場所

＊docker run(create)でマウント(※マウントとは「渡すこと」)
docker run(create) -v ホストのパス：コンテナのパス　イメージ名

＊コンテナの作成・起動
docker container run -d -p ():() --name つけたいコンテナ名　タグ名
※-dはバックグラウンド上でコンテナを起動させるコマンド

*コンテナの停止
docker container stop コンテナ名

*コンテナの削除
docker container rm コンテナ名

*未使用コンテナの削除
docker system prune -a



おまけ
*ログの確認
docker container logs コンテナ名

*起動中のコンテナ中で別のコマンドを実行する方法
docker container コンテナ名　実行したいコマンド
AWS Certified Solutions Architect - Professional 合格しました

先日、AWS認定ソリューションアーキテクトプロフェッショナルの試験を受験し、合格しました！
その記録を残しておきます。

先月AWS認定資格を5個取得し、残りはプロフェッショナル2つのみとなっていました。プロフェッショナル資格は、これまでの試験の出題範囲と重なっているだろうから、まだ勉強した記憶のあるうちに残りも取ってしまおうと考え、まずはソリューションアーキテクトプロフェッショナルを年始に受験しました。心に余裕がある年始のうちにです。

2021年12月の受験履歴 (リンク先は合格体験記)

- [AWS Certified Data Analytics - Specialty](https://qiita.com/suzuki-navi/items/936741e02a5869856ad8)
- [AWS Certified SysOps Administrator - Associate](https://qiita.com/suzuki-navi/items/ebfde17bfed3eec97261)
- [AWS Certified Security - Specialty](https://qiita.com/suzuki-navi/items/867c7f48b1c39e179808)
- [AWS Certified Advanced Networking - Specialty](https://qiita.com/suzuki-navi/items/94f0d4092cc113d82a2f)
- [AWS Certified Cloud Practitioner](https://qiita.com/suzuki-navi/items/3dd71a4f7f1aadc442e6)

過去の受験履歴

- 2019年9月 AWS Certified Solutions Architect - Associate
- 2019年10月 [AWS Certified Big Data - Specialty](https://qiita.com/suzuki-navi/items/8b2fe5a35a4439013461)
- 2019年11月 [AWS Certified Machine Learning – Specialty](https://qiita.com/suzuki-navi/items/3664bfbc102052717426)
- 2020年10月 [AWS Certified Database - Specialty](https://qiita.com/suzuki-navi/items/59f8a4a94ad9a22dd569)
- 2021年7月 [AWS Certified Developer - Associate](https://qiita.com/suzuki-navi/items/dfb343130da83d560ce4)


# 勉強方法

まずは本を読みました。いずれはプロフェッショナルも受験するだろうと思って先月頭に買っておいた本がありました。

[AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル | 山下光洋 |本 | 通販 | Amazon](https://www.amazon.co.jp/AWS%E8%AA%8D%E5%AE%9A%E8%B3%87%E6%A0%BC%E8%A9%A6%E9%A8%93%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88-%E5%95%8F%E9%A1%8C%E9%9B%86-AWS%E8%AA%8D%E5%AE%9A%E3%82%BD%E3%83%AA%E3%83%A5%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%88-%E3%83%97%E3%83%AD%E3%83%95%E3%82%A7%E3%83%83%E3%82%B7%E3%83%A7%E3%83%8A%E3%83%AB-%E5%B1%B1%E4%B8%8B%E5%85%89%E6%B4%8B/dp/4815609063)

これを受験の1週間前から読み始めました。いままでのスペシャリティやアソシエイトの勉強で書いたノートを更新する形で、深堀りしていきます。出題範囲のAWSサービスはいままでの試験と重なっているので、いままでの知識に漏れがあったところを埋めていくような進め方です。

模擬試験も本の巻末にありましたので、全部解いて、解説も読みました。試験の前日に一巡しました。あとはAWSが公式に出しているPDFのサンプル問題と、BenchPrepってやつの模擬試験を前日に解きました。PDFサンプル問題は前日の段階で全問正答でした。そのあとBenchPrepでは正答率85%でした。

先月の連続受験のおかげで、アソシエイトとスペシャリティの内容はある程度頭に残っていたので、復習に近い場面も多く、勉強しやすかったです。

本の巻末の模擬試験は、BenchPrepよりもずっと難しかったです。実際の試験はBenchPrepと同じくらいのレベルです。

ちなみにノートはScrapboxというサービスを私は使っています。試験勉強だけでなく、あらゆるメモや作業ログをScrapboxに残しています。

# 試験当日

75問180分。一巡するのに170分ぐらいかけてしまいました。1問2分、見直し時間30分と意識して残り時間を見ながら解いていたのですが、文章が長くて難しい問題があると時間を消費してしまい、見直しに充てられる時間は10分でした。その10分で少しだけ見直して、終了となりました。

事前にみんなから聞いていた通り、問題文も選択肢も文章が長いものが多かったです。ただ、これまでにスペシャリティを全部受験してきた私としては、スペシャリティでも十分長いものが多かったので、ソリューションアーキテクトプロフェッショナルだけ特別に大変だったという印象はありませんでした。問題数が少し多い分だけ大変でした。

いままでのAWSの試験に比べると日本語は分かりやすいほうだったと思います。

# 結果

スコア 803 （合格ライン 750）

# 所感

出題範囲は試験終了の瞬間に忘れてしまいました。とにかく幅広くいろいろなサービスが出てきました。スペシャリティ（機械学習を除く）の試験で勉強した内容も多かったです。この後、DevOpsエンジニアプロフェッショナル受験のための勉強したときに気が付いたのですが、Codeなんちゃら系のDevOps分野のサービスもソリューションアーキテクトプロフェッショナルの試験にはあまり出てこなかったかもしれません。とはいえ、やっぱりあらゆる領域が出題された印象です。

スペシャリティで出題された領域では、スペシャリティほどは細かいところは問われなかったです。しかし、スペシャリティを1つずつ勉強して受験することで、1分野ずつ積み重ねたおかげで、今回合格できたと思います。逆にスペシャリティよりも先にプロフェッショナルを目指していたら、勉強方法がわからなかったです。スペシャリティをすべて取ってからプロフェッショナルを取るという戦略は私にとっては正解でした。
railsの中間テーブルのわかりやすい命名

結論
-
railsの中間テーブルは多対多の関係にある２つのテーブルを結合した命名が多いが、関係性を表現する命名にするべき。


例:
usersテーブルとpoliciesテーブルの中間テーブルならagreementsテーブル(同意)
(観測範囲で言うと、policies_users, users_policies、user_policiesのような命名がされるケースが多い。)

詳しくは以下の記事に書かれています。

https://qiita.com/tkawa/items/dc3e313021f32fd91ca6?utm_campaign=popular_items&utm_medium=feed&utm_source=popular_items


背景
-
リレーショナルデータベースは「多対多」の関係をうまく扱うことができないため、
中間テーブルという第３のテーブルを使って関係性を表現します。

これまでrailsの中間テーブルの命名は一般的には多対多の関係の２つのテーブルの名前を結合したものが多かったように思います。(例: policies_users)
これは、おそらくrails1,2時代に`has_and_belongs_to_many`メソッドでモデル間のリレーションを宣言するケースが多かったためです。

```ruby
class User < ApplicationRecord
  has_and_belongs_to_many :policies
end

class Policy < ApplicationRecord
  has_and_belongs_to_many :users
end
```

`has_and_belongs_to_many`を使用する場合、中間テーブルの命名にはルールがありました。
それは単語同士(今回の場合 users と policies)をアルファベット順に`_`で結合するというものです。(例: policies_users)
(なお余談ですが、`has_and_belongs_to_many`を使用する場合、中間テーブルのモデルクラスは作成せず、migrationファイルを作成してテーブルだけ作成します。）


その慣習から今でも中間テーブルの命名として、２つのテーブルを結合したものが多くなっています。
ですが、今は御存知の通り`has_many :through`で多対多のリレーションシップを宣言するケースが大半です。

```ruby
class User < ApplicationRecord
  has_many :agreements
  has_many :policies, through: :agreements
end

class Agreement < ApplicationRecord
  belongs_to :user
  belongs_to :policy
end

class Policy < ApplicationRecord
  has_many :agreements
  has_many :users, through: :agreements
end
```

`has_many :through`の場合は中間テーブルに独自の名前を命名できるので、無思考に２つのテーブル名を結合するのではなく、よりわかりやすいテーブル名にするべきです。
ただし、books_authors、articles_tagsのようにそのまま結合したほうがわかりやすい場合もあるので、ケースバイケースです。
あとプロジェクトごとの命名規則もあると思うので、状況に応じて柔軟に決定してください。

なお、`has_and_belongs_to_many`と、`has_many :through`の違いは蛇足なので割愛しますが、以下の記事がわかりやすかったです。


https://qiita.com/xxl/items/4090402c8a9e72c92763


メリット
-
中間テーブルに意味のある名前をつけるメリットはたくさんあると思います、まず可読性の向上、それによる保守性の向上。

また、インターフェースをカプセル化した時も、意味がわかりやす、より直感的になると思います。

```User.rb
def agree(policy_id:)
  agreements.create!(policy_id: policy_id)
end

def agreeing_to_latest_policy?
  return false unless user_policy_latest_version = policies.maximum(:version)  
  user_policy_latest_version == Policy.maximum(:version)
end
```

お気づきの点がありましたら、ご気軽にご指摘ください。
はじめてのGoogle AIY Voice Kit②【ラズパイOSイメージ書き込み編】

# はじめに
前回の開封～組み立て編の記事は[こちら](https://qiita.com/drafts/d9d69692926211cc4471/edit)から:information_desk_person:
今回はラズパイのOSイメージ書き込み編です。
マイクロSDカードにラズベリーパイのOSイメージを書き込みしていきます。

# ラズパイのOSイメージを書き込み
## GithubからイメージファイルをDL
①付属しているマイクロSDカードを手元に用意します。
![IMG_0623.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/921847/10fefefb-b46f-b8e4-e78e-44b1ac0f1f52.jpeg)
②Githubの[こちらのページ](https://github.com/google/aiyprojects-raspbian/releases)から最新版のOSを探します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/921847/3d995414-229a-20b2-f4dc-c8039d92ab21.png)
現在（2022/01/12）の最新版のOSは **AIY Kits Release 2021-04-02**になっていました。
③**aiyprojects-2021-04-02.img.xz**をクリックし、ファイルをダウンロードします。

## 書き込みツール（Etcher）のDL
今回は **Etcher**を使用します。
Etcherとは、SDカードやUSBメモリーにOSイメージを安全かつ簡単に書き込みてしくれるツールです。
<br/>
①[こちら](https://www.balena.io/etcher/)からEtcherをダウンロードします。
②ダウンロードが終わったら、Etcherを起動します。

## イメージファイルをマイクロSDカードに書き込み
①マイクロSDカードをPCのSDカードスロットに差し込みます。
②Etcherの[File from file]ボタンを押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/921847/510a4010-673b-569a-f4c6-2d4b7da265d7.png)
③**aiyprojects-2021-04-02.img.xz**を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/921847/e17e90b2-5b37-e583-5a85-98ca7f580b34.png)
④選択されました。
⑤続いて、[Selece target]ボタンを押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/921847/b2593b7b-965c-9437-77ed-711e15da5357.png)
⑥**SDHC card**を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/921847/cff7b269-7039-02b9-ea8d-c9fdf7dae2e4.png)
⑦選択されました。
⑧続いて、[Flash!]ボタンを押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/921847/c3242c00-19e9-798f-85d3-6b1c47958ef1.png)
⑨書き込みが始まります。そこそこ時間がかかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/921847/24177fea-3f77-ac6e-8e4e-5dc305fa54b6.png)
⑩画像の表示になったら書き込みは完了です！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/921847/236d0112-7466-70b9-479c-661fdb1a8bb8.png)

# マイクロSDカードをAIY Voice Kit本体に差し込み
マイクロSDカードをAIY Voice Kit本体に差し込んで、完了です！
![InkedIMG_0219_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/921847/b15895e3-ad28-13e8-c783-925344e78a5b.jpeg)


# 所感
OSイメージを書き込むことなど初めてだったので、
きちんとできるか不安でしたが、無事に書き込めて一安心です！
ケーブル接続編に続きます。
<br/>
[Python]docstringのGoogleスタイルの書き方

# docstringとは
**docstring**とは、関数やクラスに対する説明を記載する方法の1つ。**docstring**を記載することで、ドキュメントをHTML形式で自動生成することもできる。**docstring**の基本的な書き方としては、関数やクラス定義の先頭に```'''```または```"""```で説明を囲む形で記載する。慣例的に```'''```よりも```"""```が使用されることが多い。説明文を関数やクラス定義の先頭に記載せず、間に処理が記載されると**docstring**として認識されなくなる。

```python
def my_function():
    """<関数の説明を記載>"""
```


また**docstring**には、引数や返り値などの書き方に以下のような3つのスタイルがある。
・reStructuredTextスタイル
・NumPyスタイル
・Googleスタイル
その中の**Googleスタイル**の書き方について簡単にメモしておく。

# Googleスタイル
GoogleのPythonスタイルガイドで定義されている**docstring**のスタイル。
**Googleスタイル**で定義されているセッションの一部を使用した記載例は以下となる。


```python
class Sample():
    """<クラスの概要>

    <クラスの詳細説明>

　　Attributes:
        <属性名> (<型>): <説明>
    """

    def my_function():
        """<関数の概要>

        <関数の詳細説明>
        
        Args:
            <引数名> (<引数の型>): <説明>

        Returns:
            <返り値の型>: <説明>

        Raises:
            <例外名>: <説明>
        """

        <関数の処理内容>
```
[Swift] Realmでプロパティがnilのものだけを取得する方法

自分のアプリでプロパティがnilのものだけを取得する必要があったので書き残します。

```swift
let realm = try! Realm()
let results = realm.objects(hogeModel.self).filter("スキーマ名 = nil")
```
こんな感じにしてあげればnilのものだけ取得できます。
#Python5_tkinterをさわってみる

#Python入門その５
##tkinterでGUIをつくってみる。

###GUIとは
これから先、GUIだのCUIだのを聞くことが増えると思います。
まず、UIとは***ユーザーインターフェイス***のことです。
ユーザインタフェースは、機械、特にコンピュータとその機械の利用者の間での情報をやりとりするためのインタフェースである。（Wikipediaより）
もっとわかりやすく言うと、例えばアプリの使用者が入力をしたり、見て情報を受け取ったりする画面のことです。これをユーザーインターフェイスといいます。

その中で、GUIは***グラフィカルユーザーインターフェイス***のことです。

UIの中でも、画面のボタンを押したりすることができるインターフェイスのことを指します。マウスや指で操作することができるもの、と思ってください。

また、CUIは***キャラクターユーザーインターフェイス***のことを指します。
こちらは、すべての操作をキーボード入力で行うインターフェイスを指します。コマンドプロンプト（映画の中でハッカーとかがパチパチ打ってるあれ）などがCUIです。すべてキーボード入力で操作するものだと思ってください。

他にもTUIなどがありますが、今はややこしくなるので説明しません。興味があったら調べてみてください。

今回はGUIを試しにつくってみます。

###Tkinter

TkinterはPython からGUIを構築・操作するための標準ライブラリです。標準ライブラリとは、pythonの初期装備、くらいに思ってください。
上でも述べたように、ボタンとかをつくって入力することができる画面をPC上に作り出すことができます。
アプリ製作の第一歩だと思ってやってみてください。

####テキスト表示する
まずは、tkinterでテキスト表示させてみましょう。
下を書いてみてください。

```python
#tkinterを使いますよ、という宣言。以降、tkとうつとtkinterが使える。
import tkinter as tk

#画面を作成する
root = tk.Tk();

#画面の大きさを設定する
root.geometry("800x400")

#テキストを作成する
lbl = tk.Label(text = 'test')

#テキストを配置する
lbl.pack()

#画面を出力する
tk.mainloop()
```

![コメント 2022-01-12 153525.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2442087/268537d6-cf02-040c-cda2-af9819cbd50c.png)

このような画面が出てくればOKです。
>ex5-1
画面の大きさと表示の文字を好きなものに変えてみましょう。

####ボタンを配置する
次にボタンを配置します。
上のテキスト表示に書き足すように記述してください。

```python
import tkinter as tk

root = tk.Tk();

root.geometry("800x400")

lbl = tk.Label(text = 'test')
#ボタンの作成。ボタン内テキストは'test'
btn = tk.Button(text='test')

lbl.pack()
#ボタンの配置
btn.pack()

tk.mainloop()
```

ボタンの配置方法は上に書いてあるとおりです。

![コメント 2022-01-12 154717.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2442087/62a6b4a3-6a46-87e6-15a9-dd3a4506f355.png)

このようになればOK。
また、``pack()``でボタンやテキストの大きさを変えることができます。
たとえば、`btn.pack()`を`btn.pack(fill='x')`に変えてみてください。ボタンが横いっぱいに広がったら成功です。
>ex5-2
・ボタンを複数つくってみましょう。
・中の文字を変えたりしてみましょう。
・下記サイトを参考にして、ボタンの位置をいろいろいじって実験してみてください。
https://imagingsolution.net/program/python/tkinter/widget_layout_pack/

####ボタンで関数を呼び出す
ボタンをおしたらテキストを変更する、という機能をつくってみます。
上のプログラムに書き足してみてください。

```python
import tkinter as tk

#関数作成
def changetxt():
    #.configureでテキスト内容を変えることができる
    lbl.configure(text='change!')

root = tk.Tk();

root.geometry("800x400")

lbl = tk.Label(text = 'test')
#command=○○でボタン押したときに関数を呼び出せる
btn = tk.Button(text='test',command=changetxt)

lbl.pack()
btn.pack(fill='x')

tk.mainloop()
```

`btn = tk.Button(text='',command=関数名)`で関数を呼び出すことができます。
`lbl.configure(text='変更後のテキスト')`でテキストが変更できます。

>ex5-3
・ボタンをおすと、テキストが「大吉」「吉」「凶」いずれかに変化するおみくじをつくってみましょう。
ヒント：
１まずは関数をつくってボタンをおしたら呼び出せるようにします。
２一番上に`import random`と書くと乱数が使えるようになります。
３「大吉」「吉」「凶」が入ったリストを使います。
４`text=random.choice(リスト名)`でリストの中の要素をランダムでtextに返します。
５上で書いたプログラムに書き足す形でつくることができます。

![コメント 2022-01-12 171002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2442087/34bde6d5-70d6-cc38-04fb-4e642a4f2c5c.png)


>ex5-4
・ex4-3でつくったじゃんけんゲームをtkinterで実装しなおしてみてください。
・余裕があればボタンを見やすく配置してみましょう。

![コメント 2022-01-12 171053.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2442087/e54b5c36-893e-2709-09f4-54d48e3792d1.png)
振り返り⑦(EC2インスンタンスとElastic IPの紐付けをしよう！)

インスタンスの作成までできたので、
今回はElastic IPとEC2インスタンスの紐付けをしてみます！

## Elastic IP(EIP) とは？

「AWSで使える固定IPアドレス」だそうです。
インスタンスを作成すると、パブリックIPが付与され、
インターネットを介してインスタンスへ接続することができるようになります。

しかし、インスタンスを再起動してしまうとパブリックIPが変わってしまうため、
それを解消するために「Elastic IP」を使用します。

## Let's try !


まずAWSコンソールの ネットワーク&セキュリティ > 「 Elastic IP 」 をクリック！

「 Elastic IP アドレスを割り当てる 」 をクリック！
![スクリーンショット 2022-01-07 15.30.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2224485/938efcc6-1773-cfd7-70c0-c4f00233141e.png)

ネットワークボーダーグループは「 ap-northeast-1 」、
パブリック　IPv4 アドレスプールは 「 Amazon の IPv4 アドレスプール 」 を選択。
「 割り当て 」 というボタンがあるのでクリック！
![スクリーンショット 2022-01-07 15.30.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2224485/fc025c6c-80d1-3200-fe38-5242a780b7f0.png)

<font color="red">**できなかった...なぜ...**</font>
![スクリーンショット 2022-01-07 15.39.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2224485/b2c7aed4-7d76-67ac-f717-5bede16f8b0a.png)
[こちら](https://oji-cloud.net/2019/06/09/post-1963/)に書いてありました。
上限値に達してるので、追加できないよ！ってことみたいです。

割り当てられていないElastic IPアドレスがあったので、それにEC2インスタンスを紐づけることに。
該当のIPアドレスを選択して、右上のアクション >「 Elastic IP アドレスの関連付け 」 をクリック！
![スクリーンショット 2022-01-12 16.23.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2224485/873a9f90-91be-6c16-033a-4a6abffef583.png)

「 インスタンス 」 の部分で紐付けたいインスタンスを選択する。
「 プライベート IP アドレス 」 はそのままでOK！
右下に「　関連付ける　」ボタンがあるのでクリック！
![スクリーンショット 2022-01-07 15.31.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2224485/1e2eafd3-16c9-09dd-4dfa-9ffe3085c700.png)

Elastic IPアドレスを確認して、「 関連づけられたインスタンスID 」にIDが入っていたらOK！
![スクリーンショット 2022-01-07 15.31.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2224485/fc884dcb-3fba-e49d-b39f-4622244ffc10.png)

今回はここまで ( ˆoˆ )ﾉｼ


written by 福井
JSON Schemaという残念な仕様

# JSON Schemaとは
JSONが既定の形式を満たしているかを調べたいことは非常によくあります。例えばREST APIで受け取るJSONが既定の名前と型のプロパティを持っているかどうかを調べて持ってなければ即座にエラーを返す、というような場面です。

このようなJSONの形式を定義するためにJSON Schemaという仕様があります。例として以下のような`name`という文字列と`age`という数値のプロパティを持つ、人を表すオブジェクトを考えます。

```json:人オブジェクトの例
{
  "name": "田中太郎",
  "age": 20
}
```

これを表すJSON Schemaは以下のようになります。JSON Schema自体もJSONで記述します。

```json:人オブジェクトのJSONSchema
{
  "type": "object",
  "properties": {
    "name": {
      "type": "string"
    },
    "age": {
      "type": "number"
    }
  }
}
```

分かりやすいですね。

# 非直感的な仕様
では試してみます。JSON Schemaの検証はWeb上の [https://jsonschema.dev/](https://jsonschema.dev/) 等で簡単に行えます。前節の人オブジェクトのJSON Schemaに対して、以下はちゃんと妥当(valid)になります。

```json:(1)妥当
{
  "name": "田中太郎",
  "age": 20
}
```

余計なプロパティを加えた以下は？これも妥当になります。

```json:(2)妥当...
{
  "name": "田中太郎",
  "age": 20,
  "foo": "bar"
}
```

では`name`を抜くと？なんと妥当になります！

```json:(3)妥当！？
{
  "age": 20
}
```

では、もはや元のオブジェクトの面影もない以下は？これでもなんと妥当です！！

```json:(4)これでも妥当！？！？
{
  "foo": "bar",
  "baz": [0, 1, "abc"]
}
```

ぶっ壊れているように見えますが、これがJSON Schemaの正しい仕様です。

# 正しいスキーマ

まずJSON Schemaでは、オブジェクトのプロパティに余計なものを許さないためには以下のように`"additionalProperties": false`を指定しなければなりません。これで上記(2)と(4)は不適になります。

```json:人オブジェクトのJSONSchema
{
  "type": "object",
  "properties": {
    "name": {
      "type": "string"
    },
    "age": {
      "type": "number"
    }
  },
  "additionalProperties": false
}
```

次に`"properties"`内で列挙されたプロパティ、これはそのままではオプショナル扱いになっていてあってもなくても良いがあるなら以下のスキーマを満たさなければならない、という解釈になります。これを必須にするには以下のように`"required"`でプロパティ名を列挙します。これで(3)も不適になります。

```json:人オブジェクトのJSONSchema
{
  "type": "object",
  "properties": {
    "name": {
      "type": "string"
    },
    "age": {
      "type": "number"
    }
  },
  "additionalProperties": false,
  "required": ["name", "age"]
}
```

# 残念な仕様
このようにJSON Schemaは記述を追加しないと想像する判定基準よりも実際の判定基準がかなりゆるゆるになっています。

多くの人はプロパティを指定したらそれは必須だと思うんじゃないでしょうか？REST API等、使用場面を考えてもオプショナルなプロパティより必須のプロパティの方が圧倒的に多いと思うんですが。というか最小の記述だと(4)が妥当になってしまう、こんな挙動が求められる場面があるんですかね...

しかもプロパティ全てを必須にしたくば全てのプロパティ名を列挙しなければならず、無駄に記述量が多いです。プロパティが10個あるとか3段ネストしたオブジェクトとかだったらJSON Schemaでスキーマを書く気が失せるでしょう。

なぜこんな不便かつ非直感的な仕様になっているのかとても謎です。知っている人がいたら教えてください。
Vite cliで構築したVueプロジェクトはlocalhostの方式しかアクセスできない

Vite cliで構築したVueプロジェクトはlocalhostの方式しかアクセスできない
=================
![6c08247eb2de4c218bbca446ee337fff.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2500065/e10c0470-6745-77ae-0427-2e8d51f4888e.png)

#解決方法

##①vite.config.jsのコンフィグファイルを修正する
![7325f8d68a0a4014ad0c22685a63700f.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2500065/e5d60bba-fe41-67aa-be66-00172d4ff1d2.png)

>"0.0.0.0"の部分は自分のLAN内のipで書き換えてください。

##②package.jsonファイルを修正する
![25b438fc230948248612558a3855f409.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2500065/7f2e5742-967b-c305-5b09-1c607560da99.png)

>"0.0.0.0"の部分は自分のLAN内のipで書き換えてください。

##③npm run devで再起動
![图片1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2500065/6abc5bb3-42d6-81cf-47ba-79896b8a1bed.png)
アクセスできました！
Mac cronにて時間を指定してshellのファイルを動かす

# 概要

- Macにてcronを設定してshellスクリプトのファイルを動かす方法をまとめる

# 詳細

- 今回は1時間ごとに毎時00分に当該コマンドを実行してくれるようにcronを設定してみる。

# 方法

1. ターミナルにて下記コマンドを実行してcronの設定ファイルを開く。

    ```terminal
    $ crontab -e
    ```

1. 下記の様に記載する。

    ```crontab
    0 * * * * bash shellファイルのフルパス
    ```
情報系の学校に入る前にやっておくといいこと5選

#はじめに
情報系の専門学校に入学した1年生です。
これから情報系の学校を目指している人向けにやっておくといいことをまとめました。

#やっておくといいこと
* **タイピング**
まず始めにタイピング練習です。
やっているうちに慣れて早くなっていきますが、最初から慣れているとタイピングが遅いせいで授業に置いて行かれるといったことが少なくなるからです。

* **プログラミング**
二つ目にプログラミングについてです。
情報系に関わって来なかった人が知識の無い状態で始めるより少しでも知識があったほうが頭に入ってくるからです。
調べる内容としては言語の種類、定数・変数・型など、余裕がある方は入出力など。

* **分野**
三つ目に分野についてです。
情報系の学校に入ると様々な分野について学習します。どんなことを学んでいくのか事前に知っておくことで「情報系なんて全く知らないけど大丈夫かな」といった不安がなくせます。

* **パソコンのショートカットキー**
四つ目にパソコンのショートカットキーについてです。
自分は情報系の学校に入って初めてショートカットキーを知りました。ctrl+cでコピーやctrl+sで上書き保存など基本的なものを覚えておくといいです。

* **調べる癖**
最後に調べる癖を付けることです。
プログラミングなどの授業ではテキストにのっていないことが多く出てきます。そういったときにテキストに載っていないからできないと考えるのではなく、調べることが重要になってきます。

#最後に
今回は事前にやっておくと良いことを書きました。
情報系で伸びていくには五つ目に書いた調べることが重要だと担任も言っていました。わからないことがあれば自分で調べてより良いエンジニアを目指してみてはいかがでしょうか。
SSL_connect returned=1 errno=0 state=error: certificate verify failed というエラーが発生した際の対応

Sentry にログを送信されないことに気づき、ログを確認したところ下記のエラーログを発見しました。

```
SSL_connect returned=1 errno=0 state=error: certificate verify failed (self signed certificate in certificate chain)
```

確認したところ、サーバー内の証明書が古くなっていたことが原因でした。

下記のコマンドを走らせ、証明書を新しいものに更新することでエラーを解消いたしました。

```
ruby -ropenssl -e "p OpenSSL::X509::DEFAULT_CERT_FILE"

wget -O /etc/pki/tls/cert.pem http://curl.haxx.se/ca/cacert.pem --no-check-certificate
```
【新卒入社/かけだしITエンジニア向け】参考になるサイトまとめ

## はじめに：なんでこの記事書こうと思ったの？

この手の記事はたくさんの方が出されていて、何番煎じかわからないですが
うちの部署の後輩たち(新人)が自学のためのサイトとかの情報を持っていて
それまとめておいた方が後々役立つかなと思ってサイトにまとめました

### 今後も改版をする予定です!!(2025.6月更新)


## ターゲット：IT初心者、開発系、クラウドを使いたい、PPTで資料も作る

最近はクラウドを使うことを前提とすることが多いので、クラウドの知識を習得することが求められています。それを意識して役立つサイトをまとめました。

クラウドはAWSを前提に整理しつつ、ためになるものは参考に載せています。

また、ある程度PPTで資料を作って、技術情報とかをお客さんや内部で共有するタスクもある前提です

## 役に立つサイト：新人向け教育サイト

おそらく自社でもIT知識を養える教育がされると思いますが、いいなと思った会社さんのサイトを以下にまとめました

### 技術系

基本的なことを学びたいときには以下の会社の研修で公開されているものがわかりやすい。うち、全部をみっちりやるというよりは、不明点であったり、自分の業務範囲を勉強するのがおススメ

また、基本的な単語の勉強はべたになるが、基本情報や応用情報のテキストを使うのが体系だっていておススメ。そして資格も取れば自己肯定感も上がる！！
<br>
[GMOペパボ研修資料](https://tech.pepabo.com/2023/08/31/newbie-training-2023//)
<br>
[mixi 研修資料](https://mixi-developers.mixi.co.jp/23-technical-training-20a6f610140c)
<br>
★このサイトを参考にさせてもらいました。感謝！！
[2024年度】エンジニア向け研修資料まとめ](https://qiita.com/nucomiya/items/29965f1915436f2cfc79)
<br>
難しい用語を簡単に解説してほしいときは以下のサイトが役に立つ
[「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典](https://wa3.i-3-i.info/index.html)

### 資料作成系
レイアウトはソフトバンク決算資料がきれいでおすすめ
[ソフトバンク決算資料](https://cdn.softbank.jp/corp/set/data/ir/documents/presentations/fy2019/results/pdf/sbkk_earnings_presentation_20190805.pdf)
<br>
理論的なことを知りたい場合は伝わるデザインがおすすめ
[伝わるデザイン](https://tsutawarudesign.com/)
<br>
素材は以下のサイトが役に立つ
[【ビジネス向け】プレゼン資料作成におすすめのフリー素材サイト厳選６選（無料・商用利用OK）](https://ppt.kuroko.me/blog/free-image-website/)

### 仕事の進め方系

そもそも仕事ってどうやって進めるの？がわかるサイト
[新人エンジニアに1年間で身につけて欲しい能力](https://qiita.com/Megane-kazuma/items/8724b4da563516733c1b)
<br>
先輩社員が後輩に教えるときに気にしていること
結構共感できました
[【新人教育】OJTで先輩として意識している20個のこと]
(https://qiita.com/shinkai_/items/c94791a1c4e0279417af)


## 役に立つサイト　クラウド(AWS)

以下のサイトがすごく役立つと思います
[クラウドエンジニア(AWS)ロードマップ2021](https://qiita.com/KurokawaKouhei/items/4e9aa3b526f3f233bf85)
<br>
あとはハンズオンを実施するのがいいのかなと
[AWS ハンズオン資料](https://aws.amazon.com/jp/aws-jp-introduction/aws-jp-webinar-hands-on/)
[【AWS初心者向け】AWS学習方法まとめ【15時間で達成できる】](https://qiita.com/toma_shohei/items/b7a001d26bd988d52021)
<br>
AWSの勉強法
[知識0からAWS認定ソリューションアーキテクト プロフェッショナルになるまで](https://qiita.com/sk_130/items/a6b6ee9fa16d59ab034d)

## 役に立った書籍
これまで読んでみて人におススメしたいものを抜粋しました
<br>
**IT クラウド**
・[AWSエンジニア入門講座](https://www.amazon.co.jp/dp/4297125374/)
これからクラウドの勉強をする人におすすめ。体系だってなにから学べばよいか、サービスの関連性が丁寧に書かれている

・[AWS設計スキルアップガイド](https://www.amazon.co.jp/dp/429713649X)
・[AWSクラウド設計完全ガイド](https://www.amazon.co.jp/dp/4296206702/)
この二つの大差はないが、どちらも実践的であり、おすすめ

・[クラウドアプリケーション 10の設計原則](https://www.amazon.co.jp//dp/B0CKLFXV3B/)
アプリ屋さんがクラウドについて学ぶ際に有効、AzureベースなのでAWSを使う場合は読み替えてみればOK

<br>

 **ビジネス**
・[社外プレゼンの資料作成術](https://www.amazon.co.jp/dp/4478115141/)
・[社内プレゼンの資料作成術](https://www.amazon.co.jp/dp/4478061521)
社内と社外で求められること、聞かれることが違うので両者を見るとより理解度が増す。また、本も薄くて読みやすい



## 最後に：Markdown記法ってどうやるの？

#### 以下が参考になりますので、それを使えばOk

 Redmineなどの開発支援ツールとかでも使うことがあるので、ざっくりでも知っておくと便利

 [Markdown記法 サンプル集](https://qiita.com/tbpgr/items/989c6badefff69377da7)
Kubernetesで実装するリーダー選出アルゴリズム

リーダー選出アルゴリズムをKubernetesで実装する. 

## リーダー選出アルゴリズムとは
リーダー選出アルゴリズムとは, 分散されたタスクやコンピュータの中からリーダーを選出し, まとめ役となるリーダーを選出する分散アルゴリズムである.　

## Kubernetesでの実装
KubernetesではGCRにリーダー選出アルゴリズムのコンテナイメージが用意されているため, 簡単に実装することができる. 

```
kubectl run leader-elector --image=k8s.gcr.io/leader-elector:0.5 --replicas=3 -- --election=example
```

ログを指定するとどのPodがリーダーに選出されたかがわかる.　

```
kubectl logs [pod name]
```
## 終わり
今回はKubernetesを簡易的にリーダー選出アルゴリズムを構成した.　リーダーを選出しただけの実装だが, サイドカーを用いることでアプリケーションのレプリカに対してリーダー選出を行うことができる.　


## 参考URL 
- https://kubernetes.io/blog/2016/01/simple-leader-election-with-kubernetes/
なぜディープラーニングするのか？を自分なりに調べてみた件

雑な投稿ですが、なぜディープラーニングをするのかについて調べてみました。
要は線形分離不可能な物を分けるためですが、それをイメージするために３次元で表した物です。深層学習で可視化するとsigmoid的な曲線が描写されて面白いです。<br>
[Colab：ニューラルネットワークでANDゲートを解く.ipynb](https://colab.research.google.com/drive/1HyYvulakETtZgVWiibYoAICY8A6V2epX?usp=sharing)
#結果
2層のパーセプトロンで学習をして、下の様な図を得られました。詳細なコードは上のipynbファイルをご覧下さい。
![xor.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2496939/4bd2d8fd-e0bc-2f9a-4cd1-0f822ab4603d.png)

参考
[なぜディープラーニングするのか？を自分なりに調べてみた件2（ロジスティック回帰）](https://qiita.com/tan0ry0shiny/items/343ebe8ed5840603abc8)
[３次元で描写した図を動画に保存する](https://qiita.com/tan0ry0shiny/items/cda6ee024f7d799b7398)
python知らん奴がラズベリーパイ初挑戦

初めまして、hayashiです。
今回は、Raspberry Pi Pico 初心者キットを使って電子工作、プログラミングについて学んでいこうと思います。

買ったものはこちらです。
　https://www.amazon.co.jp/gp/product/B09F8N7VPS/ref=ppx_yo_dt_b_asin_title_o00_s00?ie=UTF8&psc=1

本体はこんな感じ
![IMG_0513 cut2.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2302319/0409ed8d-700e-72b6-867d-4320f0caa619.jpeg)
(ヘッダピンはんだ付け済)　価格:<font color="Red">550円</font>

使い方などはすべてWebで行っているようです。
　https://osoyoo.com/2021/07/28/raspberry-pi-pico-learning-kit/

このキットはlesson1~lesson8 + 5つの構成になってるみたいです。

早速やっていきたいと思います。
lesson1
　まずは準備と簡単なプログラムをやる

　ThonnyというGUIエディタ?をダウンロードするみたいです。
　->https://thonny.org/
　準備が終わっていよいよコード！と思ったら、貼り付けるだけだった。
　コードはこんな感じです。

```py
from machine import Pin 
from time import sleep
led = Pin(25,Pin.OUT)
n=0
while True:
    led.toggle()
    print("counter is {}".format(n))
    n=n+1
    sleep(1)
```

　~~なるほど、わからん。~~

実行結果はこんな感じ↓
![ezgif-2-9a877b0770.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2302319/da3af724-1827-980a-4538-e7bc41d6bf50.gif)
ピカピカ光った！

Thonnyの方はこんな感じ↓
![スクリーンショット (7).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2302319/96b6561b-1ec2-49e2-e865-2307b29f839b.png)
しっかり表示されている！

lesson1はこんな感じです。


ここからはわからなかった所を調べる（メモ帳みたいなもの）
　・GUIエディタ　プログラムを編集するアプリケーションのこと

　・コードについて
　　　c言語を少し知っているのでpythonと比較してみてみます。

　　　1.コメント
　　　　//　じゃなくて　#　をつける。
　　　
　　　2.分岐条件
　　　　if 条件:　　（）がない代わりに最後に　:(コロン)が付く

　　　3.繰り返し
　　　　while Ture: と打つと無限ループできる

　　　4.toggle
　　　　元に戻す役割がある
　　　
　　　5.sleep
　　　　sleep(秒数)でその秒数間停止できる。

　　　6.import モジュール名
　　　　例） import time と打つと　timeモジュールを入れる？ことになる
　　　　今回のコードでは
　　　　　from time import sleep
　　　　　->sleep という物に timeモジュール をインポートする。　になる

まとめ（感想）
　電子工作、pythonが初めてだったしWebの説明英語だったので色々大変だった。
　少しずつpythonが理解できていったらいいなと思っています。


投稿は以上です。

（間違っていたりしたらご指摘お願いします。）
VSCodeで複数のコンフリクトを一括で解消する

## 概要
VSCodeを使えばとても簡単に gitのコンフリクトを解消することができます。
[開発現場でよく使うGit コマンドシリーズ](https://qiita.com/takuyanagai0213/items/216dbc1a62b76d4e627b) の [VSCodeにてコンフリクトを解消する](https://qiita.com/takuyanagai0213/items/216dbc1a62b76d4e627b#vscode%E3%81%AB%E3%81%A6%E3%82%B3%E3%83%B3%E3%83%95%E3%83%AA%E3%82%AF%E3%83%88%E3%82%92%E8%A7%A3%E6%B6%88%E3%81%99%E3%82%8B) にあるように、ワンクリックです。

本記事では、VSCodeを使って**複数のコンフリクト**および**複数ファイルのコンフリクト**を一括で解消する方法について取り上げます。

## 複数のコンフリクトを一括で解消する
Merge Conflictを使用します。

対象のファイルを選択した状態で、コマンドパレットを開きます。
Windowsは `[Ctrl]+[Shift]+[P]`、masOSは `[Command]+[Shift]+[P]`です（どちらも `F1` でも開けます）。

すると、ウィンド上部にコマンドパレットが表示されるので、`Merge Conflict`と入力します。
![スクリーンショット 2021-12-29 205815.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222808/20fb3505-ca82-885c-99b7-313a66053be8.png)


例えば、現在の変更を取り込みたい場合は **「Accept All Current」** を選択することで、すべてのコンフリクトに対して **「Accept Current Change」**を実行したことになり、一括でコンフリクトを解消することができます！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222808/cf0787b3-7ce1-c1b3-4c3b-b5dd0c363c91.png)

マージ元の変更をすべて取り込む場合は **「Accept All Incoming」**、マージ元の変更と現在の変更をすべて取り込む場合は **「Accept All Both」**です。

**All** が付いているものを選択すると、すべてのコンフリクトに対して適用されることになります。
複数のコンフリクトに対してすべて同じ対応したい場合にはとても便利です。


## 複数ファイルのコンフリクトを一括で解消する
複数ファイルのコンフリクトを一括で解消したいときは、[ソース管理]を使います。

[ソース管理]のアイコンをクリックで選択するか、
Windowsは `[Ctrl]+[Shift]+[G]`、masOSは `[Control]+[Shift]+[G]`の後に `[G]`を入力しても開きます。
![スクリーンショット 2021-12-29 194026.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222808/6a8591a3-65f1-38f3-b5fa-51b856db83b6.png)

次に、[変更のマージ]に表示されているファイルを複数選択して右クリックします。

例えば**「現在の方をすべて取り込む」**を選択すると、対象ファイルのすべてのコンフリクト箇所において、現在の変更が取り込まれます。
Merge Conflictの **「Accept All Current」** を複数ファイルに対して実行するイメージです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222808/d53df570-3a1c-4e7f-23b0-954cbd2b4083.png)

**「入力側のすべてを取り込む」**を選択すれば、すべてのコンフリクト箇所にマージ元の変更が取り込まれます。
このやり方であれば、複数ファイルのコンフリクトを一括で解消できます。とても便利です。

　
以上、VSCodeを使って複数のコンフリクトおよび複数ファイルのコンフリクトを一括で解消する方法でした。
NotionからQiita記事に画像をupしてみた。

# はじめに

皆さんはNotionを活用していますか？　便利ですよね。私は好きです。
近年日本語にも対応してすっかりナウい（死語）Notionの活用方法を考えていたところ、以前こんな記事を書いたことを思い出しました。

こんな記事→　[githubからQiita記事に画像をupしてみた。](https://qiita.com/kmmz/items/fcebb67cad22db0a39c2)

githubよりも、Notionで画像を管理した方が便利じゃないか？
と思いました。

やってみました。

# やること

みんな大好き（？）railsのこの画像を、NotionからQiita記事にupします。
(画像右端のスライドバーは気にしないでください。。。)

![test](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fd78bf36c-25ba-4641-a637-2c956878c9ad%2Fyou_are_on_rails.png?table=block&id=d0f2c6aa-e928-48e0-8837-d7de67f06a3a&spaceId=96527422-64e0-462a-9aba-bd6a855109c3&width=2000&userId=001b9f1e-8ea0-4d0c-8cb3-3a3f55cfd9cd&cache=v2)

この画像は実際にNotionからupしています(他の画像はQiitaに直接upしています)。



## ステップ１　画像投稿用のページをインターネット公開する。



![画像公開設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2338398/8f170fe0-36d6-3248-97e9-8e4ea04a5279.png)

ページの右端の「共有」から、「WEBで公開」にチェックを入れます。
読み取り許可だけにしたい場合は、下部の詳細設定を全てoffにします。

インターネット公開設定はページ単位で行われるので、他のページも一緒に公開されることはありません。
また、ネット検索の許可の設定も可能です（無料版の場合はそもそもネット検索機能を利用できません）。

## ステップ２　画像のアドレスを取得する。

ページに画像を乗せたあと、その画像のアドレスを取得します。

![全画面表示.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2338398/5012d21f-5d40-dccf-4004-0a8768a42760.png)

画像を右クリックします。「全画面表示」を選択します。
※「ブロックへのリンクをコピー」ではありません。


![画像アドレスをコピーする.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2338398/26e04029-3caf-8690-5fa3-34cbdaf22065.png)

全画面表示された画像を右クリックします。「画像アドレスをコピーする」を選択します。

## ステップ３　プロトコルをhttpsに書き換える。

取得したアドレスを、当該の記事の下書きにペーストします。
そのままだと、画像は記事に反映されません。

![ペースト比較](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2338398/197ae2b8-468e-9777-eb61-5d0dd68c8283.png)

まず画像埋め込み形式に変えます。

```
# 画像埋め込み
![代替テキスト](画像のアドレス)
```

画像埋め込みに変更しても、まだ記事には画像が反映されません。
アドレスのプロトコル表示が「notion」になっているからです。

であれば話は単純です。「notion」を「https」に書き換えます。

![httpsに書き換え](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2338398/d1103524-f763-8dc4-5004-60b392b8c49d.png)

これで画像のupは完了です！

# おわりに

Notionのデータベース機能と合わせて、画像の管理を視覚的に行うこともできそうです。
一方で、無料利用枠だと最大5MBの画像しかupできないのが難点かなぁ、と。

念のため、最大5MBというのは、あくまで一つの画像当たりです。
5MBまでとは言え、upし放題なのは助かりますNotionさん……！
Zoom 5003 エラーの真の解決方法

# この記事を書いた理由

Google にて 「Zoom 5003」で検索しても，

- ネットワークの調子が悪い
- ファイアウォールにブロックされている
- セキュリティソフトにブロックされている

等の情報しか得られず，解決に結びついた方法が社内 Slack にしか存在していなかったため，広くインターネット上に知見を共有したい。

# 再現手順

## 1. 誤って，Zoom アプリのサインイン画面で SSO をクリックしてしまう

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25060/9eb61c1b-9de9-d069-2388-de49188ffbb0.png" width=520>

## 2. 誤って，実際は存在しない会社用 Zoom ドメインっぽいものをいれて「続行」をクリックしてしまう

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25060/f5882827-8c23-2869-f85f-d12378632ed8.png" width=520>

## 3. その後ログイン方法の誤りに気づき，普通に Google アカウントでログインしようとしても 5003 エラーから抜け出せなくなってしまう

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25060/32bb3586-c06c-9b17-b3f0-179101d3e12d.png" width=520>

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25060/7f5e0944-b92e-6c5e-c0b7-d34a88a34f0f.png" width=520>

# 復旧方法

- PC の再起動 → 効果なし
- Zoom の再起動 → 効果なし
- VPN の再接続 → 効果なし
- Wi-Fi の再接続 → 効果なし
- Zoom の再インストール → 有効かもしれないが，試していない
- <strong><font color="red">SSO 設定の完全クリア → 今回はこれが有効</font></strong>

実は，  **SSO 用の画面で1回でも「続行」を押してしまうと，その後の接続に失敗しても，接続情報が残りっぱなしになってしまう不具合がある**ようです。クリアするボタンが見当たらないし，空欄の状態では「続行」ボタンを押せないので，ではどうすればいいかというと…

## 1. `zoomgov.com` に接続先を切り替え

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25060/14598004-17c0-da3f-f601-bdb25b1dcea3.png" width=480>

## 2. `zoom.us` に接続先を戻す

　　<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25060/7b3e5d3b-4d46-2581-eaf3-9bb369d33eaa.png" width=420>

これだけ。これで直りました。

そんなことあるんかい！？…あるんです。
VSCodeで#ifdefなどのプリプロセッサ部分がグレーアウトにならない問題

## TL; DR

- プロジェクトルートの`.vscode/settings.json`
- Ctrl + Shift + P のコマンドパレットから`基本設定: 設定（JSON）を開く`を選択したときの`settings.json`

に

```
"C_Cpp.intelliSenseEngine": "Tag Parser"

or

"C_Cpp.dimInactiveRegions": false
```

の設定が書かれていないか、ファイル内検索(Ctrl + F)などで確認する。

書いてあったらどっちも削除する。
CoreLocationのauthorizationStatus備忘録

# はじめに
記事にするまでもないけど、よく忘れてしまうのでメモ。

# 環境
- iOS15
- Xcode13.1

# authorizationStatus
- kCLAuthorizationStatusNotDetermined
    - 許可していない状態（初回インストール直後等）
    - 次回確認でもこのケース
    - この状態じゃないとOS標準ダイアログが表示されない
- kCLAuthorizationStatusRestricted
    - iPadとかiPod等でGPS機能がついていない端末はこれが返される（らしい）
- kCLAuthorizationStatusDenied
    - 設定→各アプリ→位置情報で「なし」を設定した時に返される
    - 設定→プライバシー→位置情報サービスをOFFにした場合も返される
    - どっちの設定起因で不許可になるか判別ができない
        - 余談だがアプリからプライバシーまで一気に飛ぶスキームは無い（はず）
- kCLAuthorizationStatusAuthorizedAlways
    - 常に許可をしている状態
    - 実際の動きを見たわけではないけどバックグラウンドでも動き続けるような設定の場合はこれかと
- kCLAuthorizationStatusAuthorizedWhenInUse
    - アプリ使用中のみ許可の状態

# 以上
バイオインフォ関連の簡単な問題を解いてみる(1)

[データサイエンス研修 生命情報学コース](https://aihospital.ncchd.go.jp/foxglovetree/)というページで、バイオインフォマティクスに関連したデータ処理（主にテキストの処理）の問題を出し合ってみんなで解いてみようというようなことをしています。
解答はブログとか公開wikiなどに書くことがルールになっているので、自分はここにつらつらと書いていこうと思います。解答途中でもとりあえずup!の方針なので、ひらめき次第追記していきます。

## 問題
では最初の問題
**データサイエンス研修 生命情報学コース 練習問題 fq00003**

:::note
問題の引用をする場合は上記コース名と問題番号を記載してください
:::

```
標準入力、標準出力、標準エラー出力を理解した上で、入出力のプログラミングを行います。
DNA塩基配列と空白類文字のみから成る文字列またはテキストファイルを標準入力から読み込み、
1文字ずつ確認して処理を行うプログラムを書いてください。

T、C、A、Gそれぞれが何塩基含まれているか、
M、R、W、S、Y、K、V、H、D、B、Nの場合は全てまとめてその他として数え、標準出力に出力してください。
塩基は大文字であっても小文字であっても数えます。空白、タブ、改行、復帰文字は無視します。
それ以外の文字が現れた場合は、何文字目に現れたかを添えて標準エラー出力にメッセージを表示し、
実行を途中で止めてください。
（データサイエンス研修 生命情報学コース 練習問題 fq00003）

```

## 解答

プログラミング言語はなんでもOKなので、bashのワンライナーで解いてみます。
サンプルの塩基配列は猫の[ミトコンドリアの塩基配列](https://www.ncbi.nlm.nih.gov/nuccore/NC_001700)をダウンロードして利用しました。

```{bash}
more NC_001700_cat_mtDNA.fasta|grep -v ">"|grep -o .|grep -wEo "(A|T|G|C)"|sort|uniq -c
   5543 A
   4454 C
   2406 G
   4606 T
```

「T、C、A、Gそれぞれが何塩基含まれているか」のところだけ。あとの部分は追記。(2022-01-12)

「M、R、W、S、Y、K、V、H、D、B、Nの場合は全てまとめてその他として数える」
「塩基は大文字であっても小文字であっても数える」
「空白、タブ、改行、復帰文字は無視」
ここまではできたかな...

テストはヒトの[CYP1A1というタンパク質の配列](https://www.uniprot.org/uniprot/P04798)をダウンロードしてきて使いました。

```{bash}
% more CYP1A1_Hsa.fasta|grep -v ">"|\
                        grep -o .|\
                        sed -e  's/[MRWSYKVHDBN]/@/g'|\
                        grep -wEo "([ATGC@])"|\
                        sort|\
                        uniq -c|\
                        sed -e 's/@/その他/g'
    229 その他
     23 A
      9 C
     31 G
```

長くなってきたので改行いれました。
先ほど使った猫ミトコンドリアの塩基配列だとMとかRとかの文字は入っていないはずなので。

```{bash}
% more NC_001700_cat_mtDNA.fasta|grep -v ">"|grep -o .|sed -e  's/[MRWSYKVHDBN]/@/g'|grep -wEo "([ATGC@])"|sort|uniq -c|sed -e 's/@/その他/g'
   5543 A
   4454 C
   2406 G
   4606 T
```

後の部分（エラーの処理）は追記。(2022-01-14)

## 注釈

- テストのためにアミノ酸配列のfastaを使ったのですが、「M、R、W、S、Y、K、V、H、D、B、Nの場合は全てまとめてその他として数える」には本来意味があり、混合塩基を表示するときに使う記号を示しています。

|記号|R|	M|W|S|Y|K|H|B|D|V|N|
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
|塩基の種類|A,G|A,C|A,T|C,G|C,T|G,T|A,T,C|G,T,C|G,A,T|A,C,G|A,C,G,T|
Nest.js: MariaDB に接続するサンプル

解説はこちら
[How to configure NestJS TypeORM Integration with MySQL?](https://progressivecoder.com/how-to-configure-nestjs-typeorm-integration-mysql/)
ここに示されているコードを実行してみます。

コードの取得

```bash
git clone https://github.com/dashsaurabh/nestjs-typeorm-mysql-sample
```

ライブラリーのインストール

```bash
cd nestjs-typeorm-mysql-sample
npm install
```

MariaDB で ユーザー、データベースを用意

```text
user: scott
password: tiger123
database: library
```

コードの修正

```js:src/app.module.ts
（省略）
      username: 'scott',
      password: 'tiger123',
（省略）
```

サーバーの起動

```bash
npm run start:dev
```

>library.book というテーブルが作成されます。

データの取得

```text
$ http http://localhost:3000/books
HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 12
Content-Type: application/json; charset=utf-8
Date: Wed, 12 Jan 2022 05:50:19 GMT
ETag: W/"c-1Dc+a0VevR0VqaVW3eOP9bDxCm8"
Keep-Alive: timeout=5
X-Powered-By: Express

{
    "books": []
}
```

#MariaDB にデータを挿入#

```sql:insert.sql
insert into book set id=101, bookName='草枕', authorName='夏目漱石', publishYear=1906;
insert into book set id=102, bookName='走れメロス', authorName='太宰治', publishYear=1940;
insert into book set id=103, bookName='千曲川のスケッチ', authorName='島崎藤村', publishYear=1911;
insert into book set id=104, bookName='高瀬舟', authorName='森鴎外', publishYear=1916;
```

```bash:go_insert.sh
mysql -uscott -ptiger123 library < insert.sql
```

データの取得

全件の取得

```text
$ http http://localhost:3000/books
HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 423
Content-Type: application/json; charset=utf-8
Date: Wed, 12 Jan 2022 05:52:11 GMT
ETag: W/"1a7-kynuTWrG1D0v8DOJukDYwZQqSNc"
Keep-Alive: timeout=5
X-Powered-By: Express

{
    "books": [
        {
            "authorName": "夏目漱石",
            "bookName": "草枕",
            "id": 101,
            "isAvailable": true,
            "publishYear": 1906
        },
        {
            "authorName": "太宰治",
            "bookName": "走れメロス",
            "id": 102,
            "isAvailable": true,
            "publishYear": 1940
        },
        {
            "authorName": "島崎藤村",
            "bookName": "千曲川のスケッチ",
            "id": 103,
            "isAvailable": true,
            "publishYear": 1911
        },
        {
            "authorName": "森鴎外",
            "bookName": "高瀬舟",
            "id": 104,
            "isAvailable": true,
            "publishYear": 1916
        }
    ]
}
```

ID を指定して取得

```text
$ http http://localhost:3000/books/104
HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 105
Content-Type: application/json; charset=utf-8
Date: Wed, 12 Jan 2022 05:52:51 GMT
ETag: W/"69-mZZT1OIqB1kh8vJ3CS4cNKclNbY"
Keep-Alive: timeout=5
X-Powered-By: Express

{
    "book": {
        "authorName": "森鴎外",
        "bookName": "高瀬舟",
        "id": 104,
        "isAvailable": true,
        "publishYear": 1916
    }
}
```
ImageBuilderで作成したカスタムAMIの初回起動時の設定

# ImageBuilderで作成したカスタムAMIの初回起動時の設定

## はじめに

先日、ImageBuilderを使用して、ZabbixAgentとSplunkをインストールしたカスタムAMIを作成しました。
このカスタムAMIを作成してEC2インスタンスを起動したのですが、Splunkが起動していませんでした。

```
$ cd /opt/splunk/bin
$ sudo ./splunk status
splunkd 3598 was not running.
Stopping splunk helpers...
                                                           [  OK  ]
Done.
Stopped helpers.
Removing stale pid file... done.
```

EC2インスタンスを起動した直後に動作するよう、cronにSplunkを起動する設定を追加して検証します。

## 参考

[システム起動時に１度だけ実行されるCronを設定する](https://qiita.com/aki3061/items/3a3c5fca3c185173eda1)
[ImageBuilderでカスタムAMIを作成]()

## 前提

[ImageBuilderでカスタムAMIを作成]()を参考に、ImageBuilderの準備ができていることとします。
・コンポーネント
　　ZabbixAgent用
　　Splunk用
・イメージレシピ
　　上記コンポーネントを含んだイメージレシピ
・パイプライン
　　上記イメージレシピを使用するパイプライン

## ImageBuilderのコンポーネントを追加

既存のコンポーネントに

```
echo '@reboot /opt/splunk/bin/splunk start' | crontab
```

を追記すればよいのですが、ここは共通的なコンポーネントを用意し、そちらに記述することにします。

新たに「CommonCompornent」というコンポーネントを用意しました。
コンポーネントは以下のように記述しています。

```
name: CommonModule
description: This is CommonModule document.
schemaVersion: 1.0

phases:
  - name: build
    steps:
      - name: SetCron
        action: ExecuteBash
        inputs:
          commands:
            - echo '@reboot /opt/splunk/bin/splunk start' | crontab
```

作成したコンポーネントをイメージレシピに加えます。
既存のレシピを選択し、新バージョンのイメージレシピとして作成します。
コンポーネントは「ZabbixAgent」と「Splunk」の2つだけなので、ここに先ほど作成した「CommonCompornent」を追加します。

最後に、イメージパイプラインを編集モードで開き、使用するイメージレシピを先ほど作成した最新のバージョンに変更します。

これで、「ZabbixAgent」「Splunk」「CommonCompornent」の3つのコンポーネントが含まれたイメージパイプラインが完成します。

あとはパイプラインを実行し、作成されたカスタムAMIを使用してEC2インスタンスを起動。
起動後のEC2インスタンスにSSH接続し、Splunkが起動していることが確認できました。

```
$ cd /opt/splunk/bin
$ sudo ./splunk status
splunkd is running (PID: 3283).
splunk helpers are running (PIDs: 3287 3389 3469 3473).
```

## おわりに

この、起動処理を初期処理として外出しするか、インストール用コンポーネントに含めるかは好みのところだと思いますが、今回は、インストールとは別の処理と位置づけ、「初期処理」として別コンポーネントにしてみました。
他にも、環境変数の設定や各種初期設定などがあれば、今回のようなCommonCompornentのように切り出しておくのが良いと思いました。
RichTextBoxに画像を挿入

画像データを WMF に埋め込んで Windows Forms の RichTextBox に挿入します。

# 概要

RichTextBox には画像を挿入するメソッドがありません。検索するとクリップボード経由で渡す方法がよく紹介されますが、今回は画像を含む RTF を生成して挿入します。

RTF の仕様には PNG など各種形式が含まれますが、RichTextBox が受け付けるのは WMF のみです。検索すると P/Invoke で WMF を生成する方法が見付かりますが、今回は直接 WMF を生成します。

# 実装

WMF に埋め込む DIB は BMP ファイルの 14 バイト以降です。画像を BMP に書き出して使用します。

```cs
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Text;

public class ImageToRtf
{
    public static void Write16(StringBuilder sb, params int[] args)
    {
        foreach (int w in args)
        {
            sb.AppendFormat("{0:X2}{1:X2}", w & 0xff, (w >> 8) & 0xff);
        }
    }

    public static string Convert(Image img, Color back)
    {
        int w = img.Width, h = img.Height;
        int picw = w * 2540 / 96, pich = h * 2540 / 96;
        int picwgoal = w * 1440 / 96, pichgoal = h * 1440 / 96;

        var sb = new StringBuilder();
        sb.AppendFormat(
            @"{{\rtf1{{\pict\wmetafile8\picw{0}\pich{1}\picwgoal{2}\pichgoal{3} ",
            picw, pich, picwgoal, pichgoal);

        byte[] bmp;
        using (var bitmap = new Bitmap(w, h))
        {
            using (var g = Graphics.FromImage(bitmap))
            {
                g.Clear(back);
                g.DrawImage(img, 0, 0, w, h);
            }
            using (var ms = new MemoryStream())
            {
                bitmap.Save(ms, ImageFormat.Bmp);
                bmp = ms.ToArray();
            }
        }

        int size1 = 14 + (bmp.Length - 14) / 2;
        int size2 = 9 + 5 + 5 + size1 + 3;

        Write16(sb,
            // META_HEADER Record
            1, 9, 0x300, size2, size2 >> 16, 0, size1, size1 >> 16, 0,
            // META_SETWINDOWORG Record
            5, 0, 0x20b, 0, 0,
            // META_SETWINDOWEXT Record
            5, 0, 0x20c, pich, picw,
            // META_STRETCHDIB Record
            size1, size1 >> 16, 0xf43, 0x20, 0xcc, 0, h, w, 0, 0, pich, picw, 0, 0
        );
        sb.Append(BitConverter.ToString(bmp, 14).Replace("-", ""));
        Write16(sb, 3, 0, 0); // META_EOF Record
        sb.Append("}}");

        return sb.ToString();
    }
}
```

# 使用例

透過色はサポートされないため、背景色を指定します。

```cs
var rtb = new RichTextBox();
using (var bmp = new Bitmap("test.png"))
{
    rtb.SelectedRtf = ImageToRtf.Convert(bmp, Color.White);
}
```

# 参考

WMF の仕様です。

* [[MS-WMF]: Windows Metafile Format | Microsoft Docs](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-wmf/4813e7fd-52d0-4f42-965f-228c8b7488d2)

同じ目的のコードです。これらをベースに整理しました。

* [Insert image in RichTextBox without quality loss (WMF) - CodeProject](https://www.codeproject.com/Questions/540673/InsertplusimageplusinplusRichTextBoxpluswithoutplu)
* [c# - Programmatically adding Images to RTF Document - Stack Overflow](https://stackoverflow.com/questions/1490734/programmatically-adding-images-to-rtf-document)
* [[C#][WPF][WinForms]RichTextBoxで画像(JPEG)を挿入する。 - ガラクタの軌跡](https://garakutatech.blogspot.com/2021/01/cwpfwinformsrichtextboxjpeg.html)
[Ruby]条件式付きの繰り返し処理(while文)

学習したことのアウトプットとして

# while文
繰り返し処理を行うためのRubyの構文で、指定した条件が真である間処理を繰り返す
　
基本構文

```ruby
while 条件式 do  # doは省略可
 # 条件が真である時に繰り返す処理
end
```
 
 
例）１〜１０までの数字を出力させる

```ruby
num = 0

while num <= 10
 puts num
 num += 1
end

# ターミナル出力結果
# 0
# 1
# 2
# 3
# 4
# 5
# 6
# 7
# 8
# 9
# 10
```

### 無限ループに注意！
例えば上記のコードの条件式を「true」にすると無限にターミナルに出力されて、コンピュータに大きな負担がかかってしまうので注意が必要

### breakを使ってループを抜け出す

```ruby:例
number = 0

while number <= 10
 if number == 5
   break
 end
 puts number
 number += 1
end

# ターミナル出力結果
# 0
# 1
# 2
# 3
# 4
```

上記のコードでは、if文とbreakを追加しています。
すると、実行結果を見てもわかる通り、出力結果は4で止まる。

　
## まとめ

- while文は条件式が真の間、処理をループさせることができる
- ループを抜けるためにはbreakを使用する 
　
　

※補足等があればコメントいただけると幸いです
gradleのバージョンを上げないで"Could not determine java version from"を回避する方法

このエラーが出た場合はgradleのバージョンを上げてやれば良いのですが
なんらかの理由でgradleのバージョンを上げられない場合の回避策です。

この方法はandroidで署名なしreleaseビルドを作成する際に使いました。

## 古いjavaをダウンロードする

```
curl -O https://corretto.aws/downloads/resources/8.312.07.1/java-1.8.0-amazon-corretto-jdk_8.312.07-1_amd64.deb

sudo apt install ./java-1.8.0-amazon-corretto-jdk_8.312.07-1_amd64.deb
```

## 古いjavaを指定してビルドする

```
JAVA_HOME=~/.jdks/corretto-1.8.0_312 ./gradlew assemble
```
Javaを使用してWord文書に複数のテキスト透かしを追加する方法

##頭語
Word文書の透かしについて、皆よく知っているはずです。以前は単一行の透かしを紹介したことがありますが、日常でWordを使用していると、常に複数の透かしを追加しなければならないです。故にこの記事で、Javaを使用してWord文書に複数のテキスト透かしを追加する方法を紹介します。

##コードのテスト環境
1.	Intellij Idea 2019.1
2.	JDK 1.8.0
3.	Spire.Doc.jar

##jarパッケージの取得とインポート
JarパッケージをIDEAに手動でインポートします。具体的な手順は次のとおりです。
**ステップ1**：E-iceblueの公式Webサイトに登録してログインし、[Spire.Doc for Java](https://www.e-iceblue.com/Download/doc-for-java.html)ダウンロードページにアクセスして製品パッケージをダウンロードします。
**ステップ2**：製品パッケージを解凍し、libファイルの下でSpire.Doc.jarを見つけます。
**ステップ3**：Spire.Doc.jarをIDEAに手動でインポートします。

構成が完了したら、IDEAで「変更のインポート」をクリックしてJARパッケージをインポートする必要があります。Eclipseでは、「保存」ボタンをクリックする必要があります。

##コード一覧
Spire.Doc for Javaは、WordヘッダーにWordArtを追加することにより、ドキュメントに複数行のテキスト透かしを追加することを実装しています。具体的なコードは次のとおりです。

```
import com.spire.doc.Document;
import com.spire.doc.FileFormat;
import com.spire.doc.HeaderFooter;
import com.spire.doc.Section;
import com.spire.doc.documents.Paragraph;
import com.spire.doc.documents.ShapeLineStyle;
import com.spire.doc.documents.ShapeType;
import com.spire.doc.fields.ShapeObject;
import java.awt.*;
public class multiTextWatermark {
    public static void main(String[] args) {
        //テストドキュメントをロードする
        Document doc = new Document();
        doc.loadFromFile("C:\\Users\\Administrator\\Desktop\\Sample.docx");
        //WordArtを追加してサイズを設定する
        ShapeObject shape = new ShapeObject(doc, ShapeType.Text_Plain_Text);
        shape.setWidth(60);
        shape.setHeight(20);
        //WordArtのテキストコンテンツ、色、位置、スタイルを設定する
        shape.setVerticalPosition(30);
        shape.setHorizontalPosition(20);
        shape.setRotation(315);
        shape.getWordArt().setText("内部使用");
        shape.setFillColor(Color.green);
        shape.setLineStyle(ShapeLineStyle.Single);
        shape.setStrokeColor(new Color(192, 192, 192, 255));
        shape.setStrokeWeight(1);

        Section section;
        HeaderFooter header;
        for (int n = 0; n < doc.getSections().getCount(); n++) {
            section = doc.getSections().get(n);
            //セクションのヘッダーを取得する
            header = section.getHeadersFooters().getHeader();
            Paragraph paragraph1;
            for (int i = 0; i < 4; i++) {
                //ヘッダーに段落を追加する
                paragraph1 = header.addParagraph();
                for (int j = 0; j < 3; j++) {
                    //WordArtを複製し、複数行、複数列の位置を設定する
                    shape = (ShapeObject) shape.deepClone();
                    shape.setVerticalPosition(50 + 150 * i);
                    shape.setHorizontalPosition(20 + 160 * j);
                    paragraph1.getChildObjects().add(shape);
                }
            }
        }
        //ドキュメントを保存する
        doc.saveToFile("output/multi-lineTextwatermark.docx", FileFormat.Docx_2013);
    }
}
```
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/b5e719ce-3361-e0ee-9766-8014e99933a1.png)

##結語
以上は、Word文書に複数のテキスト透かしを追加する方法でした、最後まで読んでいただきありがとうございます。