OmniAICreator/Qiita-1.07M huggingface dataset:
PyCon APAC 2023に参加＆登壇してきました

2023年10月27日～28日にかけて開催されたPyCon APAC 2023に参加、登壇してきました。

https://2023-apac.pycon.jp/
![](https://2023-apac.pycon.jp/_next/static/chunks/images/main_logo_1200_75.png)

大きなカンファレンスで外部向けに登壇するのはPyCon以外を含めても初めてでした。
また僕のトークは二日目午後だったこともあり、他の方のトークを聞いて回る余裕はあまりありませんでした（泣）

![IMG_5357.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154711/f921a4ea-38cd-7996-85c7-9199ac472d45.jpeg)


# CfPの公開から登壇まで

今回初めての登壇を経験したので、せっかくなので経緯や流れを記しておきます。

プロポーザルの募集開始から登壇本番までの時系列をまとめてみます。

- CfP募集開始：2023/5/11 [Blog](https://pyconjp.blogspot.com/2023/04/pyconapac2023-cfp-ja.html)
    - 応募締切：**2023/5/31**
- プロポーザル提出：**2023/5/31**
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154711/cd296c3c-dcb2-0390-7e5e-1d9e2b595a9c.png)
- 採択結果発表：2023/7/14 [Blog](https://pyconjp.blogspot.com/2023/07/2023-accepted-regular-talks.html)
- PyCon APAC 2023：2023/10/27-28

このように、プロポーザル締切りからカンファレンス当日まで5カ月近くの期間があります。
スピーカーとして参加するにはもちろんプロポーザルが採択される必要があります。
プロポーザルに応募できるようなトークテーマは日常的に考えたり軽くでもストックしておいたりすると応募の心理的障壁は低くなるものと思います。

また、プロポーザルのレビューに際して今回は以下のブログで評価観点が公開されていました。

[PyCon JP Blog: PyCon APAC 2023 レビュアーの評価観点](https://pyconjp.blogspot.com/2023/05/pyconapac2023-review-points-ja.html)

> Python 初心者にとって自らの知見を広げる内容か
> Python が社会で活用されている具体的なイメージを描けるか
> 内容に独自性・新規性はあるか
> (以下略)

特に一番目の項目が初心者向けのことであったため、「エンジニア初心者に向けた内容」のテーマにしようと決めることができました。

# 発表内容

発表のタイトルは『あなたのアプリケーションを本番システムで動かすために』
Webサービスを本番環境で運用するために必要となる項目を浅く広く扱いました。

スライドも公開しています。

<iframe src="https://docs.google.com/presentation/d/e/2PACX-1vQFfADF6PJzS7dNFHxNs0yt4N_hHUISOjHYQt3lSTo14SQMBeMnr1XiRbxksBwuLiU1U26DDEgDPBJy/embed?start=false&loop=false&delayms=3000" frameborder="0" width="960" height="569" allowfullscreen="true" mozallowfullscreen="true" webkitallowfullscreen="true"></iframe>

現地で視聴してくださった方は本当にありがとうございました。

当日、質疑応答の中で「その場でちゃんと回答できなかったな」と後から思っていたのでこの場で補足したいと思います。

## 幅広い領域の知識をどのような順序で身に着けていったか

良い質問であり、難しい質問です。
正直に言うと「人それぞれ」ということに尽きてしまいます。
それぞれのバックグラウンドや得意領域、または関心事は人それぞれだからです。

当日は「僕には元々インフラやネットワーク関連のキャリアがある」という旨の回答をしてしまいたが、少しバイアスがあったなと反省しています。

例えばエンジニア入門者がWebアプリケーションフレームワークで開発する場合を考えると、初めはあまり欲張らずそのフレームワーク自体の習得に集中すれば良いと思います。
重要なのは「順序」よりも「全体像を掴むこと」です。

資料の末尾に載せていますが、全体像という意味では『[自走プログラマー](https://gihyo.jp/book/2020/978-4-297-11197-7)』という書籍がとにかく本当にオススメです。

## ORMと比較してSQLクエリビルダーも選択肢に入ると思うが、どう使い分ければ良いか

トークの中で「ORMのメリットとしてセキュリティ面でメリットがある。SQLインジェクションの対策になる」という説明をしました。
しかし、仮にSQLインジェクションを防ぐのが目的であれば必ずしもORMだけがその手段にはなりません。
データ分析の用途でデータベース問合せのSQLを代替するのであれば、データ操作するためだけのライブラリを使えばORMよりも覚えることが少なて済みます。

ORMの特性・メリットはSQLインジェクションの対策ができることだけではなく、オブジェクトリレーションです。
今回はWebのバックエンドアプリケーションを前提に話したので、このあたりの文脈を省略してしまいましたが、誤解を生まないようもう少し丁寧に説明できれば良かったなと反省です（正確性と理解しやすさのバランスが難しい…）。

※これについては後から質問者の方と会話することができて、意図を詳しく聞くことができました。

# さいごに：PyCon JP 2022 とボク

PyConは去年が初めての参加でした。
去年はスピーカーではありませんでしたが、同じ会社の同僚2名の登壇が決まっていたため、現地応援の意味もあって参加しました。

Pythonという同じテーマで集まった方々と交流できて多くの刺激をもらい、とても楽しかったです。
「次は自分もぜひスピーカーとして参加したい」という意欲が非常に高まり、今回のPyCon APAC 2023に至ることができたと思います。

祭りが終わった達成感と寂しさを覚えていますが、また来年もスピーカーとして参加できるよう邁進していきます。
参加者、スポンサー、何よりスタッフの皆さんお疲れさまでした&ありがとうございました！
疑似尤度法とは

## まとめ

先に要点だけまとめておく。

- 疑似尤度法は分布型を完全に特定せずとも、平均と分散の関係さえ特定できていれば、興味のあるパラメータをキチンと推定できる方法
    - ここで言う「関係が特定できている」とは、「分散が平均の関数となっており、その関数を知っている」状況を指す[^1]

[^1]: より正確には、「分散が平均の関数の定数倍として表されており、その関数を知っている」状況（具体的に何倍になっているかは知らなくてよい）。

- 疑似尤度法で得られた推定量は、分布型を完全に特定している状況における最尤推定量よりは（一般には）精度が悪い[^2]
    - 分布について課している仮定がより緩くなっていることの引き換えに精度が落ちている、というイメージ

[^2]: より正確には、漸近分散が最尤推定量よりも大きい（厳密には、最尤推定量と疑似尤度推定量が一致することもある）。

要は疑似尤度法とは「最尤推定量と比較して、より少ない仮定の下でパラメータの推定を可能にする方法」といえる。

## 疑似尤度とは？

疑似尤度法はWedderburn (1974)で一般化線形モデルの拡張として提案され、医療統計における経時測定データの分析などでよく利用される一般化推定方程式（GEE）の元にもなった手法である。

独立な確率変数$Y_1, \dots, Y_n$の各平均$\mu_i$と分散$v_i$が、ある既知の関数$v$を用いて

$$
v_i = v(\mu_i)
$$

という関係にあるとき、疑似尤度$Q$は

$$
\begin{align}
\frac{\partial Q(y_i, \mu_i)}{\partial \mu_i} = \frac{y_i - \mu_i}{v(\mu_i)} \tag{1}
\end{align}
$$

を満たす関数として定義される。いきなりこのような定義をされても意味が分からないが、実はこれは1変数の指数型分布族に対する対数尤度が満たす式となっており、そのアナロジーとして見ることができる（なので正確には、疑似対数尤度と呼ぶべきもの）。実際、1変数指数型分布族

$$
f(y) = \exp(y\theta - g(\theta))
$$

の平均、分散はそれぞれ$g'(\theta), g''(\theta)$である（これはモーメント母関数を考えれば容易に導かれる）ことから、この対数尤度が上の関係式（1）を満たすことがわかる。またこれより、1次元指数型分布族においては対数尤度と疑似尤度は一致することが言える。

このように、ある意味逆の発想で、指数型分布族の対数尤度において成立する式（1）が成り立つ関数として定義したものが疑似尤度である。

## 何が”疑似”なの？

上のように疑似尤度は通常の尤度の類推として考えられるものだが、平均と分散の関係、すなわちモーメントに関する仮定のみから構成している、という点で尤度とは異なっている。

通常、尤度とは「確率（密度）関数をパラメータについての関数と見たもの」として説明されるが、これは「想定している分布が、ある有限個のパラメータのみで特徴づけられる」という仮定に基づいている。このように、モデルが有限個のパラメータで表現されている設定を、パラメトリックという（よくある線形回帰とか$t$検定とかは基本的にはこっちの話）。

一方、疑似尤度を考える上でモデルに仮定しているのは平均と分散の関係のみであり、その他については一切仮定を課していない（つまり、モデルは有限個のパラメータで規定されていない）。このように、興味のある部分だけをパラメータで表現し、その他については仮定を置かない設定をセミパラメトリックという。疑似尤度法で想定しているのはこちらである。

このような点で、疑似尤度は通常の尤度とは異なるものである一方、通常の（対数）尤度が持つような以下の性質を満たす。

$$
E\left[\frac{\partial Q}{\partial \mu} \right] = 0, \quad E\left[\left(\frac{\partial Q}{\partial \mu}\right)^2 \right] = - E\left[\frac{\partial^2 Q}{\partial \mu^2} \right] = \frac{1}{v(\mu)}
$$

1つ目の式はスコア関数（対数尤度の微分）の平均が0であることに対応する。また、2つ目の式は通常のフィッシャー情報量が満たす性質に対応し、この量を疑似フィッシャー情報量という。
面白いことに、パラメトリックモデルを想定したとき、その対数尤度を$L$とすると、疑似フィッシャー情報量と（通常の）フィッシャー情報量の間には以下のような大小関係が成立する。

$$
\begin{align}
-E\left[\frac{\partial^2 Q}{\partial \mu^2} \right] \leq - E\left[\frac{\partial^2 L}{\partial \mu^2} \right] \tag{2}
\end{align}
$$

直感的には、「モデルの分布型を知っているときの情報の方が、平均と分散の間の関係だけ知っているときの情報よりも大きい」と見ることができる。

以上のように疑似尤度は、モデルに課している仮定の強さという点で尤度とは異なるものの、（対数）尤度が持つ性質を備えているという点で「尤度っぽいもの」である。

## 疑似尤度法

以上の性質を踏まえ、尤度の代わりに疑似尤度を用いた推測のことを疑似尤度法という。

最尤推定量は一致性、漸近正規性を持ち、その漸近分散はフィッシャー情報量の逆数に一致するが、それと同様に疑似尤度推定量（疑似尤度方程式を解くことで得られる推定量）も一致性、漸近正規性を持ち、その漸近分散は疑似フィッシャー情報量の逆数に一致することが知られている。上記の（2）の性質から、一般に疑似尤度推定量の精度は最尤推定量よりも低く、これは平均と分散の関係という限られた情報のみから推定を行ったことの代償と見ることができる。
一般的にモデルに対する仮定の強さと推測の精度はトレードオフの関係にあり、セミパラメトリックな推測はパラメトリックな推測に対し、推測の効率を犠牲にして仮定を緩和したものだと考えることができる。

## 参考

- Wedderburn, R. W., Quasi-likelihood functions, generalized linear models, and the Gauss-Newton method. Biometrika, Vol.61, No.3, pp.439-447, 1974
mod

<!--
2023/11/2
-->
[picoCTF][Cryptography][basic-mod1]

# Writeup
* 解法が書いてあるので、翻訳ソフトで翻訳。
DeepLって分かりやすい日本語に変換してくれます。
![screenshot 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160736/0f52be36-8979-6367-431c-f6f92aeccbcf.png)
![screenshot 3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160736/36bb1078-1b42-b63a-a8f1-527118c2da89.png)
<br>

* BingChatに作ってもらったプログラムを微修正。
~~~:python
# 入力データ
numbers = [128, 322, 353, 235, 336, 73, 198, 332, 202, 285, 57, 87, 262, 221, 218, 405, 335, 101, 256, 227, 112, 140]

# 文字セット
charset = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_'

# 各数値を37で割った余りを計算し、文字セットにマッピング
result = ''.join([charset[n % 37] for n in numbers])

print('picoCTF{'+result+'}')
~~~
* 自分で書くよりスマートで、なんとも言えない。
![screenshot.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160736/49bf8a35-669d-a97f-d742-01599debf1db.png)
<br>

* 以上です。
【プログラミング初学者】Ruby Silverに合格したのでまとめました！

# はじめに
<!-- 概要を記載 -->
はじめまして！
Ruby Silverに合格しましたので、資格取得までの勉強の方法や意識したことなどを共有させていただきます！今後、受けられる方の参考になれば幸いです。

今回は、勉強の方法や流れにフォーカスして記事を書かせていただきました。
理解が難しかったメソッドや構文の説明や、各概念などの説明については次回作成する記事でまとめさせていただきます。

# 目次
| 章 |    タイトル    |   
|---:|-------------|
| 1 |[勉強時間](#勉強時間)
| 2 |[勉強に使用した教材](#勉強に使用した教材)| 
| 3 |[進め方](#進め方) | 
| 4 |[注意点](#注意点)　| 


<!-- 各チャプター -->
# 勉強時間
トータル４０時間ほど勉強しました。期間は約2週間で1日に、2~3時間勉強をおこないました。RUNTEQのRubyのカリキュラムと内容の重複もありますので私は上記学習時間となりました。０から勉強する！という方は、もう少しプラスで学習時間が必要かと思われます。

# 勉強に使用した教材

- [Ruby技術者試験合格教本](https://amzn.asia/d/2ECmWRT)
演習問題30問、模擬試験50問の合計80問がついています。
また、試験に出やすい内容を重点的に解説しているため、重点的に勉強が必要な内容を把握できます。
初学者の私には説明が難しく感じることもあったので下記でご紹介する「プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法」で理解を深めることをおすすめします。

- [プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法](https://amzn.asia/d/6s0trA0)
こちら、めちゃくちゃおすすめです。初学者でもわかりやすく丁寧に説明が書いてあります。
さらに、実際に手を動かしながら読み進めるように解説されているため実際に手を動かしてメソッドの動きを確かめていけるので、理解がしやすかったです。
教本で書かれている内容で理解が難しかった説明も、チェリー本でそこの箇所を読んでみるとすんなり理解できたとういうことも多かったです。

- GitHubに公開されている模擬試験
教本の問題集よりも、少しレベルを下げたような問題でした
自分の理解度確認のために繰り返し問題を解きました。

- リファレンスマニュアル
読み漁りました・・・
Ruby Silverはメソッドを暗記していないと解けない問題もあります。
例：IOクラスのメソッドにないメソッドを以下の４つから選択しなさい
などの問題もでてくるため、組み込みライブラリにあるメソッドを覚えるために読み漁りました、

- [REx](https://rex.libertyfish.co.jp/)
Ruby情報技術者試験の無料学習サービスで、GitHubとの連携をすると使うことが出来るようになります。スマートフォンでも使うことができるので電車の移動時間などの隙間時間におすすめです。
また、毎回２〜３割程度問題が変わるので答え自体を覚えてしまってテストにならない・・・ということも少ないのでおすすめです。


# 学習の仕方
- REx,教本,GitHubそれぞれの問題を解いて、理解できてないメソッドの動きを把握する。
- チェリー本と教本で、理解できてない内容の箇所を読んで理解する。

私は上記２点の繰り返しでした。
エラーの捕捉や正規表現など全く知らなかった内容もあったので、そういった箇所については一から理解する必要があるため、教本とネットの記事などうをまんべんなく確認をして学習を進めました。

RExは、平均で９０点くらい取れるようになるまで行いました。
問題集や	GitHubに公開されている問題は１００点が取れる、かつ何故この選択肢が正解なのかを理解できるまで繰り返し問題を解きました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3586051/302505ec-6184-aa42-7e7d-e5682f0edfc3.png)


また、問題を解いていく中で、正解の選択肢の実行結果はもちろんですが、不正解の選択肢もirbで実行しして確認することで、理解を加速させていくと良いかなと思います。また、リファレンスマニュアルでエイリアスメソッドが定義されていないか確認するなど知識に奥行きを持たせることを意識しました。

メソッドの仕様は教本でも説明が簡単な場合があるので、リファレンスマニュアルを参照して曖昧な理解で終わらないことも大事だったと思います。

# 注意点
- 注意が必要な問題やハマりがちな問題は
@ffggss(藤澤 勇樹)様の[Ruby 技術者認定試験 Silver/Gold 対策の個人的なハマり問題集](https://qiita.com/ffggss/items/0bab2a1e80e941378b49)が、非常にわかりやすかったので見ておくことをおすすめします。

- 正規表現のメタ文字の理解
試験では、メタ文字の理解がないと解けないので、簡単な正規表現がわかるくらいは理解しておく必要があります。
初学者の私にとってメタ文字は、謎の呪文にしか見えませんでした。
    ```
    [][^].()?*+{n,m}|^$\
    ```
    ぱっと見て、上記のメタ文字の意味がわかるくらいは最低限勉強しておくと良いかなと思われます。
    scanメソッドやgsubメソッド、spritメソッドと共に、問題がでましたのでメタ文字の理解は必須と思われます。

- メソッドをある程度暗記する
Ruby Silverはメソッドを暗記していないと解けない問題が出ます。
組み込みライブラリのstringメソッド、arrayメソッド、hashメソッド、Dirメソッド、IOメソッドの特異メソッドやインスタンスメソッドは出来る限り覚えておくといいと思います。

- 試験では見たことない問題も３〜４割出題された
実際に過去問でも見たことない問題がけっこう出題されました。過去問の答えを暗記したからOKと思うのは危険です。しっかり、この問題はこうなるから答えはこれだ！とわかるまで調べておくといいと思います。


# 最後に
今回、Ruby Silverを受けてみてRubyの基礎を網羅的に学べたので非常によかったです。
いろんな、メソッドを知れて自分の引き出しが増えた気もします！
試験勉強を始める前は、自分の理解が甘いところも多くあり、そこの知識を補完できたので今後の学習に活きるといいなと思います。

初学者の方で、RailsやRubyから入る方は、是非基礎を固めるという意味でも挑戦してみるといいと思います。

試験代が高いので一発で受からなければお金が・・・というプレッシャーも学習の加速につながりました笑
合格はできましたが、まだまだ知識不足で気になることがいっぱいなので、勉強は引き続き続けていきます！

各メソッドや構文がどのように出題されるかや、各概念などの説明については次回作成する記事でまとめさせていただきます。
初めて学ぶ Docker 


# Dockerとは	
Docker 社が開発したコンテナ型の仮想環境を作成・配布・実行するためのプラットフォームです。

# コンテナとは	
実行環境をアプリケーションとその実行に必要なライブラリごとに隔離する仕組みです。
※詳細は省きますが、Docker はこの隔離技術を Linux カーネルの機能で実現しています。
  (namespace,cgroup, UnionFSなど)。

※コンテナとは
![コンテナ構成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3513259/d1a60af2-6f81-c76a-b285-e02939b33be3.png)

**Docker はこのコンテナを実現するためのソフトウェアであるコンテナエンジンを提供してくれます。**



※ コンテナにある OS について
本来 Linux の OS を構成しているカーネルとディストリビューションを分離しています。
この構成によって、コンテナでは最小限の機能だけで実行することができます(軽量の仕組み)。
![コンテナ_OS.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3513259/bca9a2b0-834d-32dd-af04-58ed7a0ffce6.png)


※カーネルとは
OS の中心的な役割を担うものを指します。
例) ハードウェアの制御、アプリケーションの実行環境、対人インターフェースなどを提供


※周辺部(ディストリビューション)とは
カーネルにライブラリやシェルなどの基本コマンド、GUIシステムなどを加えて、1つの OS として配布&利用できる形にまとめたものです。
例) RedHat , Ubuntu , CentOSなど

※仮想マシン
例) VMware , Microsoft Hyper-Vなど

# Docker(コンテナ)を利用するメリット	
	
**軽量**
* コンテナを動作するための環境が仮想マシンに比べて構成が少ないことがわかります。
* 例えば、コンテナはカーネルの共有をしますし、ゲストOSによるリソースの消費が無いことが挙げられます。

つまり、**コンテナは仮想マシンに比べて軽量(物理サーバーの負荷が小さい)** と言えます。
	
**可搬性**
コンテナエンジンによってハードウェアやOS毎の違いが吸収されるため、**他のサーバーに移してもすぐに実行することができます。**
	
# DockerEngine について
Docker 社が提供しているコンテナ技術を提供するソフトウェアです。

コンテナ作成でそれほど意識することは無いですが、仕組みを知る上では大事なので説明します。
	
以下の３つの主なコンポーネント（赤枠）を持つクライアント・サーバ型アプリケーションです。
	
* クライアント(docker CLI)
* REST API
* Docker デーモン

![コンテナ_仕組み.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3513259/225ef523-1c4c-7780-63a8-61b5ef6248f1.png)

**クライアント(docker CLI)**
* Docker を操作(通信)するためのコマンドラインツールです。
* ユーザからのコマンドを受け付けると、REST APIを呼び出します。

※API通信について
図ではクライアントがホストの外にある構成ですが、ホストの中にあるパターンもあります。
その場合、Unix ドメインソケットを利用して通信を行います。

**REST API**
クライアントからコマンドを受け付けます。

**Docker デーモン**
* Linux のデーモンプロセスで、Docker Engine API が呼び出されるのを待ち受けています。
* Docker デーモンは、呼び出された Docker Engine API に応じて、イメージのビルドやコンテナの起動などを行います。


**レジストリ**
* Docker イメージを保管します。
* プライベートとパブリックがあり、パブリックとしてはDocker Hubがあります。
* 作成したイメージを配置したり、作成したいイメージを引っ張ってくることが可能です。 



# コンテナはどうやって作るのか	
	
大まかにいうと以下の工程です。

(1). Dockerfile を作成
(2). Dockerfile からイメージを作成
(3). イメージからコンテナを作成

![コンテナ_作成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3513259/6e7e782b-a92a-5dc8-9f56-bcace52b3962.png)

**Dockerfile**
* Docker イメージを作成するための手順を記したテキストファイルです。
* 少しややこしいですが、イメージを作成すると言うより、既存のイメージに対してカスタマイズを行い、新規のイメージを作成するということです。


**イメージ(Image)**
* コンテナ(=アプリケーションの実行環境)を起動するのに必要な設定ファイルをまとめたものを指します。
* " Image はコンテナの元であり、Imageからコンテナを起動する "と理解すると良いと思います。


**コンテナ**
* アプリケーションとミドルウェア、OSの一部（ライブラリーなど）を隔離したものです。
* コンテナイメージから作成します。


以上、Docker 基本についての記載でした。

この記事に関して間違いなどありましたら、ご指摘いただけるとうれしいです。
MS配布のPythonでfortranが必要なモジュールはどう乗り切ってるのか？

WindowsのMS製Pythonがどこまでできるかのテスト

環境はこんな感じ。マーケットからインストールするとこう。

```
C:\Users\yugoy>python -V
Python 3.10.11
C:\Users\yugoy>where python
C:\Users\yugoy\AppData\Local\Microsoft\WindowsApps\python.exe
```

依存モジュールが多そうなモジュールをインストール。
ここでnumpyも一緒にインストールされていう。
fortranが絡んできそうだけど、Windowsにはgfortranはない。どうやるんだろう。

どうもf2py.exeというのがインストールされている。fortranとpythonをここで変換しているっぽい。行列計算を高速にするためのfortranのはずだがこれは本当に高速なのか。

ちょっと心配だけど、fortranを使いまくるソースで別途ベンチマークをとることにする。

```
C:\Users\yugoy>pip install sox
Collecting sox
  Downloading sox-1.4.1-py2.py3-none-any.whl (39 kB)
Collecting numpy>=1.9.0 (from sox)
  Downloading numpy-1.26.1-cp310-cp310-win_amd64.whl.metadata (61 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 61.2/61.2 kB ? eta 0:00:00
Downloading numpy-1.26.1-cp310-cp310-win_amd64.whl (15.8 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 15.8/15.8 MB 28.4 MB/s eta 0:00:00
Installing collected packages: numpy, sox
  WARNING: The script f2py.exe is installed in 'C:\Users\yugoy\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\Scripts' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
Successfully installed numpy-1.26.1 sox-1.4.1
WARNING: There was an error checking the latest version of pip.
```
Windows11のデスクトップのアイコン間隔を変更する

Windows11でアイコンの間隔が広くなり変更もできなくなりました。レジストリを変更するしかないようです。

<img src='https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253995/1e376861-e784-9501-5b26-4f24a4a1b7f2.png' width=48%>

<img src='https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253995/d76502f1-5dc4-13ff-4488-672fb5501eba.png' width=48%>

# レジストリエディターを開く
Winキー+R、または、ファイル名を指定して実行で、
regedit と入力

<img src='https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253995/db075e20-0434-df2f-1b63-e9ed86c251c9.png' width=40%>

# 値を変える

キー
\HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics

|名前|データ||
|--|--|--|
|IconSpacing| -1500|高さ|
|IconVerticalSpacing| -1125|幅|

<img src='https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253995/b25817c5-c928-dc68-9447-f1373c7facc4.png' width=90%>

変更後はサインアウトか再起動をします。

# あとがき

私は3年くらい幅が広いまま我慢して使ってました。まだ知らない人がこの記事で救われることを祈ります。
【Ruby】ブロックを理解したい


# 概要
ルビーのブロックは、コードの柔軟性と再利用性を高める強力なツールです。 これを活用すると、メソッドの動作を簡単にカスタマイズでき、これはルビーのさまざまなライブラリやフレームワークでも活用されています。 この記事では、ルビーが提供するブロックが何なのか、そしてどのように使用するのかについて見ていきましょう。

# 対象とする読者
- Rubyのブロックを知らない人

# ブロック
ブロックとは、メソッドが特定の時点で実行できるコードです。 ルビーでブロックを作成する文法は`do···end`と`{ }`の2つが存在します。 普通ブロックのコードがシングルラインなら`{}`、マルチラインなら`do···end`を使います。

**{ }**
```ruby
method { puts "ここはブロックです。" }
```

**do...end**
```ruby
method do
	puts "ここはブロックです。"
end
```

# yield
ブロックとは何かを学びました。 では、一体ブロックはどのように実行すべきでしょうか？ ルビーがそのために`yield`というキーワードを提供します。 ルビーはメソッド内で`yield`というキーワードを見つけたらブロックのコードを実行します。

```ruby
def method
	puts "ここはメソッドの始まりです。"
	yield
	puts "ここはメソッドの終わりです。"
end

method { puts "ここはブロックです。" }

# 実行結果
# "ここはメソッドの始まりです"
# "ここはブロックです。"
# "ここはメソッドの終わりです。"
```

`yield`キーワードを複数回使用してブロックを繰り返し実行することも可能です。

```ruby
def method
	puts "ここはメソッドの始まりです。"
	yield
	yield
	puts "ここはメソッドの終わりです。"
end

method { puts "ここはブロックです。" }

# 実行結果
# "ここはメソッドの始まりです。"
# "ここはブロックです。"
# "ここはブロックです。"
# "ここはメソッドの終わりです。"
```

ちなみに`yield`はブロックが返す値をそのまま返します。

```ruby
def method
	puts "ここはメソッドの始まりです。"
	value = yield
	puts value
	puts "ここはメソッドの終わりです。"
end

method { "ここはブロックです。" }

# 実行結果
# "ここはメソッドの始まりです。"
# "ここはブロックです。"
# "ここはメソッドの終わりです。"
```

途中でブロックで`return`を使うとどうなると思いますか？ ブロックはその場で実行を停止します。 言い換えれば、`yield`キーワードの次のコードを実行しません。

```ruby
def method
	puts "ここはメソッドの始まりです。"
	yield
	puts "ここはメソッドの終わりです。"
end

method do 
	puts "ここはブロックです。"
	return
end

# 実行結果
# "ここはメソッドの始まりです。"
# "ここはブロックです。"
```

# block_given?
`yield`キーワードを使用するときは、必ずブロックを作成してください。 そうしないとエラーが発生します。

```ruby
def method
	puts "ここはメソッドの始まりです。"
	yield
	puts "ここはメソッドの終わりです。"
end

method 

# 実行結果
# ここはメソッドの始まりです。
# block.rb:3:in `method': no block given (yield) (LocalJumpError)
#		from block.rb:8:in `<main>'
```

ルビーはブロックを作成したかを判断できる`block_given?`というメソッドを提供します。 もしブロックを作成した場合にのみブロックを実行したい場合は、`block_given?`メソッドを活用します。

```ruby
def method
	puts "ここはメソッドの始まりです。"
	if block_given?
		yield
	end
	puts "ここはメソッドの終わりです。"
end

method 

# 実行結果
# ここはメソッドの始まりです。
# ここはメソッドの終わりです。
```

# パラメータ
ブロックもパラメータを定義できます。`yield`キーワードを使う時、引数を渡します。

```ruby
def method
	puts "ここはメソッドの始まりです。"
	yield "ルビー"
	puts "ここはメソッドの終わりです。"
end

method { |name| puts "ここは #{name} ブロックです。" }

# 実行結果
# ここはメソッドの始まりです。
# ここはルビーブロックです。
# ここはメソッドの終わりです。
```

パラメータを複数定義することも可能です。 ただ、既存のメソッドのようにパラメータが定義された順序で引数を渡す必要があるため、注意しましょう。

```ruby
def method
	puts "ここはメソッドの始まりです。"
	yield "ルビー", "簡単ですよね?"
	puts "ここはメソッドの終わりです。"
end

method { |name, word| puts "ここは #{name} ブロックです! #{word}" }

# 実行結果
# ここはメソッドの始まりです。
# ここはルビーブロックです。簡単ですよね？
# ここはメソッドの終わりです。
```

# まとめ

先ほど学んだ内容を簡単にまとめます。
- ブロック:メソッドが特定の時点で実行できるコードです。 文法は `do...end` または `{ }` を使います。
- yield: ブロックを実行するためにメソッドで使用するキーワードです。 引数を使用して、ブロック パラメータに値を渡すことができます。
- block_given?:ブロックを作成したかを判断するためのメソッドです。
PostgreSQL 複数行を一括でinsert

# 複数行一括INSERT

```sql
INSERT INTO public.a (b, c) VALUES 
 ('R100001', 'リンゴ'),
 ('R100002', 'バナナ'),
 ('R100003', 'ネコ'),
 ('R100004', 'イヌ');
 ```

# 結果確認

```
 postgres=# select * from public.a;
    b    |   c
---------+--------
 R100001 | リンゴ
 R100002 | バナナ
 R100003 | ネコ
 R100004 | イヌ
(4 rows)

```

# 参考

[MyBatis＋Spring Bootで、複数行のinsert（Multi Row Insert）とバッチ更新（Batch Insert）を試す](https://qiita.com/charon/items/47115e63e75b3d748faa)
[MyBatisでまとめてinsertする方法](https://qiita.com/tamorieeeen/items/a4375f1500634d5ad1c6)
[JDBC と MyBatis でバルク・インサート（multi-row vs batch）](https://blogj.harawata.net/2016/04/jdbc-mybatis-multi-row-vs-batch.html)
PHP CodeSnifferを利用してコーディング規約チェックを行う

コーディング規約を遵守したコードを書くために、静的解析ツールである PHP CodeSniffer を導入します。本記事では、自分が作成したプログラムに対してPSR-2コーディング規約に準拠しているかチェックを行い、実際に指摘された内容を一覧化します。また、エラーの解消方法についても示します。
今後のプログラミング学習において、今回の指摘内容を留意し、コーディング規約を遵守した可読性の高いコードを書くようにしていきたいと思います。

## 指摘事項一覧
PSR-2コーディング規約に違反していると指摘を受けた項目を一覧にし、それぞれのエラーの解消方法を示します。

```php
Each class must be in a file by itself
```
このエラーメッセージは、PHPのクラス宣言が一つのファイルに含まれているべきであるという規則に違反している場合に表示されます。PHPにおいては、1つのファイルに1つのクラスを含めることが推奨されています。
このエラーを解消するには、複数のクラスを含んだファイルをクラスごとに分割し、個別のファイルに保存します。これにより、コードが構造化され、理解しやすくなります。

```php
End of line character is invalid; expected "\n" but found "\r\n”
```
このエラーメッセージは、PHPコード内の改行文字が期待される "\n"（LF、ラインフィード）ではなく、"\r\n"（CRLF、キャリッジリターンとラインフィード）という文字列を見つけたことを示しています。通常、改行文字はUnix系システムでは "\n" で表され、Windows系システムでは "\r\n" で表されます。PHPコーディング規約ではUnix系の改行文字 "\n" を使用することが一般的です。
このエラーを解消するには、Windows形式の "\r\n" を "\n" に変更する必要があります。

```php
Each class must be in a namespace of at least one level (a top-level vendor name)
```
このエラーメッセージは、クラスが名前空間内に存在しない場合に発生します。名前空間は、クラスや他の型を包むコンテナのようなもので、使用することでクラス名の衝突を防ぎ、コードを整理できます。
このエラーを解消するには、最低でも一つの階層（トップレベルのベンダー名）を持つ名前空間を作成し、クラスを名前空間内に配置する必要があります。

```php
Opening brace of a class must be on the line after the definition
```
このエラーメッセージは、クラスの定義時に、クラス名と波括弧（{）の開き括弧が同じ行に書かれている場合に表示されるエラーメッセージです。
このエラーを解消するには、クラスの定義スタイルを変更して、クラス名と波括弧の開き括弧を別々の行に配置する必要があります。

```php
Opening brace should be on a new line
```
このエラーメッセージは、波括弧（{）の開き括弧が新しい行ではなく、他のコードの同じ行にある場合に表示されます。
このエラーを解消するには、条件文（ifなど）の直後の波括弧の開き括弧を新しい行に配置する必要があります。

```php
Line indented incorrectly; expected at least 8 spaces, found 6
```
このエラーメッセージは、コードのインデントに関するものです。特定の行のインデントが期待されるよりも少ないスペースで行われている場合に表示されます。この例では、最低8スペースのインデントが期待される場合に、6スペースのみであったことを示しています。
このエラーを解消するには、該当の行に対して正しい数のスペースを追加してインデントを修正する必要があります。

```php
Expected 1 space(s) after closing parenthesis; found newline
```
このエラーメッセージは、PHPファイル内で閉じ括弧の後にスペースが1つ必要であるべきで、代わりに改行が見つかったことを示しています。
このエラーを解消するには、閉じ括弧の後にスペースを追加する必要があります。

```php
A closing tag is not permitted at the end of a PHP file
```
このエラーメッセージは、PHPファイルの末尾に閉じるPHPタグ（?>）がある場合に表示されるエラーメッセージです。PHPファイルの末尾に閉じるPHPタグを付ける必要はありません。閉じるPHPタグを省略することにより、意図しない空白や改行が出力されなくなり、潜在的なエラーを防ぐことができます。また、閉じるPHPタグがあると、それが原因でヘッダーの送信が遅れる可能性があるため、省略するのが推奨されています。
このエラーを解消するには、PHPファイルの末尾にある閉じるPHPタグ（?>）を削除します。

```php
Expected 1 newline at end of file; 0 found
```
このエラーメッセージは、ファイルの最後に空行が1行ない場合に表示されます。
このエラーを解消するには、ファイルの末尾に空白行を追加します。PHPファイルの末尾には、閉じるPHPタグ（?>）は必要ありませんが、空白行を追加する必要があります。
AWS EC2インスタンスが勝手に停止する

こんにちは。Ariaです。
EC2が勝手に停止してしまう現象にちょっと困ったので、備忘録です。

# 現象:EC2が勝手に止まる
私の場合、AWSのCloud9からSAMを使ってAPIを実装していたのですが、EC2が意図せずにひとりでに(?)停止してしまう状況が続いていました。
これにより、POSTMANなどでAPIを叩いても500: Internal Server Errorとなってしまう状態でした。

# 原因:Cloud9のPreference → EC2 Instanceの設定で自動停止してい
Cloud9を触り始めたばかりの頃、重課金を恐れて、Preferenceの"EC2 instance" → "Stop my environment"の項目を"Stop after four hours"に設定してしまっていました。これをNeverに変えれば自動的に止まることはなくなりそうです。
![IMG_9860.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/356834/d4e54014-0f1d-c1ed-9860-5e0e859fe32e.jpeg)


初学者はEC2が停止するとどういう影響があるのか想像しづらいケースもあるかと思うので、同様の状況でお困りの方はこの辺りの設定を確認するといいかもしれません。

## 見落としがちなPreference
本件、フタを開けてみれば非常に簡単なヒューマンエラーでしたが、(それゆえ)GPT-4さんに聞いても明確な答えが得られていませんでした。
お困りの方の一助になれば幸いです。

ではまた。
Java 言語仕様・JVM仕様のバージョンごとの差分を見れるページを作りました。

世界 30 億の Java エンジニア向けに、Java 言語仕様・JVM仕様のバージョンごとの差分を見れるページを作りました。

* [The Java Language Specification diffs](https://github.com/YujiSoftware/java_spec_diff)
* [The Java Virtual Machine Specification diffs](https://github.com/YujiSoftware/jvm_spec_diff)

ぜひご利用ください！

# なにこれ？

Java の各バージョンごとの言語仕様・JVM仕様はこちらのページで公開されています。
[Java Language and Virtual Machine Specifications](https://docs.oracle.com/javase/specs/index.html)

ただ、バージョンごとの変更点がありませんでした[^diff]。
そこで、各ページからテキストを抜き出して[^text]、GitHub 上で差分が見れるようにしました。

[^diff]: どこかにあるかなとも思ったのですが、見つかりませんでした。
[^text]: 各ページから `document.getElementsByClassName("chapter")[0].innerText` で取得しました。

# 更新について

細かい誤字脱字の変更とかを除いた差分が作れるとより良いのですが、そうすると今後の更新に手間がかかってしまいまそうでした。
それよりも、新しいバージョンが出たら速やかに更新できるほうがいいかなと思って、単純にそのまま原文の差分を見れるだけにしています。

もし更新を忘れてたら、Twitter（[@YujiSoftware](https://twitter.com/YujiSoftware)）で突っついていただければと思います。
Python 自作でモジュールをimportする

Pythonでは自作でモジュールを作成することも可能です。

注意点として、フォルダのどこに置くかによって import の指定方法が変わってきますが、ここでは同じフォルダ内に格納されたモジュールについてのみ記載します。

モジュールを作成する。

自作モジュールをimportする処理には以下を記載する。

from パッケージ名 import モジュール名

これでimportされます。モジュール名を処理内に記載することで処理が実行できます。

以上です。
if __name__ == ‘__main__’の使い方


`if __name__ == '__main__'`は、変数`__name__`が文字列`'__main__'`の場合に処理するという単なるif文である

変数`__name__`は、直接実行した場合に`'__main__'`となるため、直接実行時にif文以下の処理が実行される

直接実行以外の場合に`__name__`は、モジュール名となる。

変数__name__は、直接実行した場合に__main__となるため、直接実行時にif文以下の処理が実行される。

直接実行以外の場合に変数__name__は、モジュール名となる。

自作モジュールとして別のモジュールにimportすることで、直接実行以外の場合となる。

`if __name__ == '__main__'`を使用する理由は、
モジュールを直接実行したときだけ実行する動作を指定することができるため、テストで実行する時の変数指定などができます。
Google検索

<!--
2023/11/1
-->
[picoCTF][General Skills][money-ware]

# Writeup
* Google検索で出たマルウェアの名前を入力してみた。
`PetrWrap` `EternalBlue` `EternalRomance` `Petya`
問題文をよく読んで、入力する形式に気をつけようと思います。
<br>

* 以上です。

# 参考サイト
https://www.intellilink.co.jp/column/security/2017/070300.aspx
【初投稿】データサイエンティスト・エンジニアになるまでの壁

# はじめに
**<font color="green">Qiitaの初めての投稿**</font>をさせていただきます！
なぜ、投稿を始めようと思ったかというと、学生のうちに体験したことを皆さんにお伝えし、少しでもデータサイエンスやプログラミングを学習する方の一助となればと思ったからです。

今回は、僕が学生のうちに感じた<font color="Red">**データサイエンティスト・エンジニアになるまでの壁**</font>をお話しさせていただきます。プログラミング学習の挫折率は**９割**と言われていて、僕が考える原因を自身の経験からお伝えします。

# 自己紹介
まず最初に簡単な自己紹介をさせていただきます。
私は早慶の大学院生です。大学2年生までは野球しかやってこなかった野球小僧でしたが、プログラミングと出会い、人生の方向性が大きく変わったなと感じています。

そこで、昔の僕のようにスキルアップに困っている人に、自身の経験やスキルを伝えたいという思いから、データサイエンスに関する情報や就活情報を発信しているので、よかったら<font color="Blue">X(Twitter)</font>で覗いてみてくだい。

https://twitter.com/DS_school_1

以下に私の簡単な経緯・スキルを記載します。

【経緯】
+ 2020年 プログラミングの学習開始
+ 2021年 初の機械学習系の長期インターンに挑戦したが挫折
+ 2021年 再度Webサービス開発エンジニアインターンを開始
+ 2022年 データサイエンティストとして長期インターンを開始
+ 2023年 +αでもう１社でデータサイエンティストとしてインターン開始

【スキル】
+ **Python 3年**
+ HTML, CSS 3年
+ JavaScript 2年
+ SQL 1年
+ 基本情報技術者試験
+ 統計検定準１級
+ 複数コンペティションで入賞経験

# データサイエンティスト・エンジニアまでの壁
結論から言うと、データサイエンティスト・エンジニアまでの壁は、**プログラミングの基礎学習終了後の壁**です。

僕はプログラミングの基礎を学び、長期インターンを始めようと思って、様々な企業に応募しましたが、なかなか合格できませんでした。そしてやっとの思いで長期インターンに合格したのですが<font color="Red">大きな挫折</font>を味わいました。プログラミングを学び始めたところで、研修もなかったため、社員の方の指示さえも理解できない状態でした。指示内容を理解するために調べては、何も成果が無い、というような日々を過ごし、とても辛い日々でした。

そこで、再度学習に努めることに決め、プログラミングスクールに通うことを検討しました。しかし、学生にとってはどのスクールも非常に高く、通うことができませんでした。周りにも、プログラミングを熱心に学習している知り合いがいなかったため、教えてくれる人もいなかったです。ここが、初学者にとっての大きな壁だと感じています。

+ **プログラミングの基礎は学んだけど、次に何をしたらいいの？**
+ **誰かに教えて欲しいけど、身近に教えてくれる人がいない**
+ **プログラミングスクールに通いたいけど高すぎる**

この壁を乗り越えることでデータサイエンティスト・エンジニアへの道は大きく開けると思います。僕は、データサイエンティストになりたかったのですが、まずプログラミング力を身につけないと元も子もないと感じ以下の流れでこの壁を乗り越えました。

1. **HTML,CSSの学習**
↓
1.  <font color="Red">**サークルのホームページ作成**<font color="black">+</font>**AtCoderへの参加**</font>
↓
1. <font color="Red">**初心者歓迎のwebサービス開発インターン開始**</font>
↓
1. **大学で研究活動**
↓
1. **データサイエンスの長期インターン２社実施**

長期インターンに合格した後は、社員の方から指導していただけて、更に意識の高い同期とも巡り合えるため、とんとん拍子でスキルは向上していきました。しかも実務に使えるスキルが身につくので、長期インターンを通して成長することは本当にお勧めします！

まとめるとこの壁を乗り越えるためには、以下のような方法があると考えます。
+ 知り合いに教えを乞う
+ プログラミングによる簡単な成果物を作る
Ex) ホームページ作成、スクレイピング+データ分析等
+ 競技プログラミングに参加する
+ 初心者OKの長期インターンを実施する

上記を行うことが現状難しい方も安心してください！
僕自身この壁を乗り越えるためのデータサイエンス学習サポートやデータサイエンティスト就活支援を目的として<font color="Red">**X(Twitter)**</font>や<font color="Red">**ココナラ**</font>でも活動しているので、少しでも興味を持ったらぜひこちらもフォローしてみてください。

最後まで読んでいただきありがとうございます！
同じ経験をしたり、共感してくださったらいいねお願いします！

X(Twitter)

https://twitter.com/DS_school_1

ココナラ

https://coconala.com/services/3044873
KAGOYA CLOUD VPSでディスク使用率・使用量を確認する

# 前置き
KAGOYA CLOUD VPSでRedmineを自分用に運用している。
* [KAGOYA CLOUD VPS に Docker で Bitnami/Redmine5.0.5 入れてみた](https://qiita.com/k-kariya/items/9f7f99d793f02c56cc59)

ディスク容量は25GBで、空き容量の確認方法を調べたのだが手間取ってしまった。KAGOYA CLOUD VPSのインスタンス詳細画面に「リソースモニター」はあるが、ここではディスク空き容量はわからない。ネットで検索すると、KAGOYA INTERNET ROUTINGのページがヒットするようで、要領を得ない・・・

# How To
結局のところ、KAGOYA CLOUD VPSのインスタンス詳細画面ではディスク容量は確認できないので、OS(Linux)で確認すればOKということにした。

1. [コンソール]->[コンソールを起動]
※コンソールへのログインは、root/インスタンス作成時に設定した「コンソールログインパスワード」を使用）
2. 起動したら、以下のコマンドを実行
```
df -h
```
--total オプションをつけると、totalには実際の３倍の容量が表示されてしまうので注意。/dev/vda1 のところの容量が実際のサイズのようだった。
【Xcode】シュミレーターを最前面に固定する

# はじめに
Twitterを見ているとめちゃくちゃ便利そうな機能を発見したので記事にしておきます。

https://x.com/pihero13/status/1718523502280716554?s=46

# やりかた
① 「Window」を選択します
② 「Stay On Top」を選択します
![スクリーンショット 2023-10-29 21.44.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/fc04e0dd-a42d-a798-8733-1109f3a668b9.png)

# おわり
ウインドウの切り替えめんどいんで、シュミレーターだけ最前面に固定できるのめっちゃいいですね
【CSS・学習ログ1】CSSの基本

## CSSとは
webページの**見た目**を指定する言語。

★使い方★
(1)作成したCSSファイルをHTMLから読み込み
(2)HTML内に記述
(3)HTMLタグの中に書く

#### (1)作成したCSSファイルをHTMLから読み込み
一般的な方法。
![スクリーンショット 2023-10-29 151904.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3520365/be868bbd-7f97-dd7d-c05b-93896c9ed3f7.png)
![スクリーンショット 2023-10-29 152017.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3520365/90b7f1b3-c03e-d451-3ca1-51c656cc96c3.png)
#### (2)HTML内に記述
head内にstyleタグを作り、その中に書く。webページを1ページだけ作るときなどに向いている。
```html
<!DOCTYPE html>
<html>
	<head>
		<title>タイトルです</title>
		<meta name="description" content="説明文です">
		<meta charset="UTF-8">
		<!-- styleタグの中にCSSを記述 -->
		<style>
			p {
				color: red;
			}
		</style>
	</head>
	<body>
		<h1>見出しです</h1>
		<p>段落です</p>
	</body>
</html>
```
#### (3)HTMLタグの中に書く
style属性を使用する。特定のHTML要素に限定してスタイルを適用したいとき。
```html
	<body>
		<h1>見出しです</h1>
		<p style="color: red;">段落です</p>
	</body>
 ```
 
## CSSの構成
```css
/* セレクタ */
p { 
	/* プロパティ：値 */
	color:red;
}
```
- セレクタ（どこの）　…スタイルを適用する対象。
- プロパティ（なにを）…スタイルの内容。
- 値（どうする）　…適用の仕方。

### 代表的なプロパティ
| | | | |
|-|-|-|-|
|color|文字色|background|背景|
|font-family|フォントの種類|font-size|フォントの大きさ|
|font-weight|フォントの太さ|text-align|横方向の揃え方|
|line-height|行の高さ|widht|要素の幅|
|height|要素の高さ|padding|要素のパディング|
|margin|要素のマージン|boder|要素のボーダー|
|position|要素の配置方法|display|要素の表示形式|

```css
p {
	color: red;
	font-size: 48px;
	text-align: right;
}
```
## idとclass
idとclassはhtml要素に張り付けるラベルのようなもの。　#と.で指定する。
- **id**　…１回のみ・１つの要素に対して個別にスタイル指定したい場合
　⇒(css内)　#で指定する
- **class**　…（複数設定・複数の要素に対して汎用性の高いスタイルをまとめて指定したいとき）
　⇒(css内)　.で指定する

 ```html
 <!DOCTYPE html>
<html>
	<head>
		<title>タイトルです</title>
		<meta name="description" content="説明文です">
		<meta charset="UTF-8">
		<link rel="stylesheet" href="multi-class.css">
	</head>
	<body>
		<h1 class="text-red">見出し1です</h1>
		<p class="text-blue text-right">段落1です</p>
		<h2 class="text-red">見出し2です</h2>
		<p class="text-blue">段落2です</p>
		<h3 class="text-red">見出し3です</h3>
		<p class="text-blue">段落3です</p>
	</body>
</html>
 ```
 ```css
 .text-red {
	color: red;
}
.text-blue {
	color: blue;
}

.text-right {
	text-align: right;
}
```
![スクリーンショット 2023-10-29 162515.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3520365/9c995a69-343a-e798-986b-494b10ffd2c1.png)

セレクタは下記のように複数の指定が可能。
```css
p, #first-heading, .text-red {
	color: red;
}
```
## 子孫要素
ある要素を親要素にしたとき、その中に入っている要素を子要素、子要素の中に入っている要素を孫要素という。
![スクリーンショット 2023-10-29 163652.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3520365/6a2647b4-0ce2-102d-b885-cb871eaca369.png)
▼"parent"内すべての要素に適用
```css
#parent p {
	color: red;
}
```
▼"parent"直下の要素のみに適用
```css
#parent > p {
	color: red;
}
```
ABC326の解説記事 (PyPy3 ABC)

# はじめに
問題は[こちら](https://atcoder.jp/contests/abc326/tasks)
初心者（灰色〜茶色）向けです。
自力ACしたC問題まで実施します。
# A - 2UP3DOWN
https://atcoder.jp/contests/abc326/tasks/abc326_a
## 考え方
X階 → Y階の移動ですから、登りはプラス、下りはマイナスとして、 Y-Xの値を考えればよいです。
2回までの登り、3回までの下りの際に階段を使うので、
```math
-3\space\leq Y - X \leq\space2
```
であれば　階段（= Yes）、そうでなければエレベーター（= No)です。
## 解答例
```Python3:私の解答
x, y = map(int, input().split())
print('Yes' if (-4 < y-x and y-x < 3) else 'No')
```
# B - 326-like Numbers
https://atcoder.jp/contests/abc326/tasks/abc326_b
## 考え方
実際に 326-like Numbers の一覧を作成し、n 以上のものの個数を求めればよいです。
なぜなら、326-like Numbers は たかだか3桁の自然数ですから、100~999の1000個もないからです。

実際に、次のように 326-like Numbers　を構成できます。
1. 100の位をi, 10の位をjとします。（i = 1, 2, ... , 9 であることに注意）
1. 1の位は i × j になります。 ここで、i × j >= 10の場合は 326-like Numbers にはならないことに注意です。

## 解答例
```Python3:私の解答
n326s = set()
for i in range(1,10) :
    for j in range(10) :
        if i*j > 9 :
            break
        n326s.add(100*i + 10*j+ i*j)
n = int(input())
print(filter(lambda x:x >= n, n326s))
```
# C - Peak
https://atcoder.jp/contests/abc326/tasks/abc326_c
## 考え方
プレゼントの数が最大になるパターンはいずれかの整数値、特にプレゼントの位置と考えてよいです。
実際に、最大値となる数直線の位置をxとすると、床関数の値 floor(x)の値をxと取り直しても最適であることは変わらないです。また、xの位置にプレゼントがないとき、xの先にある最初のプレゼントの位置をxと取り直しても最適のままです。
最初のプレゼントから順番に、各プレゼントの位置から長さMの半開区間にあるプレゼントの数を数えていき、最大のパターンだけ記録していく貪欲法で解けます。
私の解答について記載します。（おそらく尺取法に分類されると思います。）
1. プレゼントを昇順ソートします。
1. 次の変数を用意します。
    - base ： 基準となるプレゼントの番号、初期値0
    - now  ： 区間の中にあるプレゼントの番号、初期値0
    - tmp  ：  baseからnowまでののプレゼントの数、初期値0
    - ans  ：  base-1番まででチェックしたプレゼントの数の最大値、初期値0
1. nowが最後に行くまで下記処理を繰り返します。
    1. 番号baseのプレゼントの位置（a_n[base]）から距離m未満のプレゼントの数を求めます。
    具体的には、番号nowのプレゼントの位置（a_n[now]）を、番号baseのプレゼントの位置(a_n[base]) + m 未満の位置にある間、nowとtmpを増やす。
    1. a_n[now]がa_n[base]+mの外に移動した場合、最大値を更新します。
    具体的には、tmpがansより大きければ、ansをtmpに置き換えます。
    1. base の位置を下記まで進めます。
    a_n[base] <= a_n[now] < a_n[base] + m　となる最初のbase
    （ = nowのプレゼントを拾える最初のbase) 
    なぜかというと、a_n[base+1] + m < a_n[now] の場合は、a_n[base+1] + m の範囲内のプレゼントの数 は a_n[base] の時よりも1つ小さくなり、必ず、最大値にはならないからです。（now のプレゼントが拾えないまま、baseのプレゼントが拾えなくなる） 
1. ループを抜けたタイミングのtmpとansのうち大きい方が答えになります。(私の解答では、最後のタイミングの更新ができていないです。拙劣な実装で恐縮です。）
## 解答例
```Python3:私の解答
n, m = map(int, input().split())
a_n = sorted(list(map(int, input().split())))
now, base, tmp, ans = 0, 0, 0, 0
while now < n :
    if a_n[now] < a_n[base] + m :
        tmp += 1
        now += 1
    else :
        ans = max(ans, tmp)
        while base <= now :
            if a_n[now] < a_n[base] + m :
                break
            else :
                base += 1
                tmp -= 1
print(max(ans, tmp))
```
# 参考文献
特段なし
# 感想
今回D問題が解けず悔しかったです、、、 ４以上の場合のパズルの解き方のアルゴリズムがわからない、、、

問題

https://atcoder.jp/contests/abc326/tasks/abc326_d

年内入緑目指して頑張ります。
【Javascriptメモ】Node.jsで改行なしで出力する方法

## process.stdout.writeの注意点

勉強中にいつもあやふやになるのでメモ。

使用できるのはString型(文字列型のみ)

```javascript:sample.js
const word = "こんにちは";
process.stdout.write(word);
//改行せずコンソール上に出力

const num = 123;
process.stdout.write(String(num));
//変数前にStringをつけてあげることで使用可能
```
人間関係の心理学（産能通信・オンラインSC）

## 人間関係の心理学

![人間関係の心理学.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/689091/63951623-31fd-e750-8e0c-dd46b6ff583f.png)

本科目は、心理学の研究分野の中でも特に人間関係にかかわる事柄を扱います。心理学において人間関係とは、様々な心理学領域で考察され、発展してきました。本科目では社会心理学の知見を中心に、人間関係の心理について理解を深めます。人間関係の基礎理論を理解し、日常生活におけるその活用を考えていきます。（シラバスより）

### 到達目標
① 人間関係にかかわる心理学の基本的な諸理論を理解する。
② 諸理論を理解することを通じて、自身の性格や行動を振り返ることができる。
③ 理解した知識を自身の日常生活に反映させ、行動改善の一助とできる。

### 担当教員
<a href="https://www.iwatani.ac.jp/recruit/interview/tb_hoiku/">松原 詩緒</a> 先生（岩谷学園テクノビジネス横浜保育専門学校 教員）

産業能率大学や保育の専門学校で発達心理学や教育心理学を主に教えられています。
優しそうな雰囲気の先生でした。

### テキスト
<a href="https://www.seishinshobo.co.jp/book/b212378.html">イラストレート人間関係の心理学 第２版</a> 著者 齊藤 勇 （著）

ジャンル：心理学一般、社会心理学
出版年月日：2015/11/25

>対人心理学に関する実験を紹介したトピックスで定評のあるテキストの第2版。日常の人間関係において生じる心理と行動のプロセスについて、豊富なイラストや図表で解説する。今版では全体の構成は変えずに本文を全面的に書き換え、トピックスも加筆した。人間関係の心理学を学ぶうえで必ず押さえておかなければいけない論点をコンパクトに網羅し、時代の趨勢に合わせ内容を刷新した。

第1章　人間関係のなかの自己
　1　人間関係のなかの自己
　2　自己意識理論
　3　自己評価
　4　社会的比較
　5　自己確認過程
　6　セルフ・モニタリング
　7　自己評価維持モデル

第2章　出会いからの人間関係の展開
　1　親和行動
　2　第一印象
　3　自己呈示と印象管理
　4　自己開示
　5　人間関係の親密化

第3章　非言語的・言語的コミュニケーション
　1　非言語的コミュニケーションの感情伝達力
　2　アイ・コンタクト
　3　対人距離とパーソナルスペース
　4　言語的コミュニケーション
　5　ｅコミュニケーション

第4章　好きと嫌いの人間関係
　1　好意的人間関係
　2　嫌悪的人間関係

第5章　援助の人間関係
　1　援助行動の心理
　2　援助行動研究の出発点
　3　援助行動の理論
　4　援助する心理
　5　援助と好意の関係
　6　援助を求める側の心理

第6章　支配と服従の人間関係
　1　社会的勢力と支配的行動
　2　服従の心理実験

第7章　攻撃と対立の人間関係
　1　攻撃行動の分類
　2　攻撃行動起因の理論
　3　対立的状況と対立的行動

第8章　集団のなかの人間関係
　1　集団の人間関係の魅力
　2　集団凝集性と集団圧力
　3　リーダーシップ
　4　集団における社会認知の錯誤

### 成績評価
約３週間後に結果がiNetに表示され「B」評価でした。

基本リポートは、１００点だったんですが、成績評価は厳しかったです。

![F5yGcM0bkAAsYck.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/689091/8f39deaa-ac62-da31-fb53-c80b1a94296e.png)

### 感想

産業能率大学のオンラインスクーリングは、土日連続で開講されることが多いです。本科目も土日連続のオンラインスクーリングでした。授業のタイトルからグループワークがありそうかなと思いましたが、シラバスを参照したところ「なし」となってたのは意外でした。

参考資料については、穴埋め形式のスライドが５０枚ほどありましたが、コンビニで印刷しました。授業は、教科書通りの流れで先生が解説しながら、穴埋め箇所をスライドに写しながら進められました。テキストは１５０ページほどしかなく、読みやすい印象です。受講者は約９０名ほどいました。

先生の説明はわかりやすかったのでよかったですが、終始講義でしたので、学生同士交流する時間もあるとよかったかもしれません。

１日目　９時３０分～１７時５０分（適時、休憩。昼１時間休憩）＋課題
２日目　９時３０分～１７時５０分（適時、休憩。昼１時間休憩）＋最終試験

２日間、お疲れさまでした。

## 過去の記事

### １回目の記事（出願～入学式）
https://qiita.com/skizaki/items/2621e999fe07f42391e7

### ２回目の記事（入学３か月後）
https://qiita.com/skizaki/items/1dbcd673a51b46d7b680

### 3回目の記事（入学5か月後）
https://qiita.com/skizaki/items/1eecce9824143fc10ee8

### 4回目の記事（心理学系の資格を目指す）
https://qiita.com/skizaki/items/d216d6208d524cfb7609

※随時、ブログを更新します。
Scientific Linux (centos6.1) で hwclock を localtime に

旧いシステムを仮想化して復旧したら時間がずれる。
hwclock を localtime として認識させればいいのだが、旧いシステムなので設定をどうやっていたのかな?


# 環境
```
$ cat /etc/issue
Scientific Linux release 6.10 (Carbon)
```

centOS 6.1 と互換。

# 状況

```

$ date
2023年 10月 30日 月曜日 06:03:56 JST
$ strings /etc/localtime
TZif2
TZif2
UTC0
$ cat /etc/sysconfig/clock
# The time zone of the system is defined by the contents of /etc/localtime.
# This file is only for evaluation by system-config-date, do not rely on its
# contents elsewhere.
ZONE="Asia/Tokyo"
$ 
```

# 設定
「【Linux】タイムゾーン(Timezone)の変更」
https://qiita.com/azusanakano/items/b39bd22504313884a7c3

 の通り作業を行いました。

 ```
# cd /etc
# cp localtime localtime.org
# ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
# vim /etc/sysconfig/clock
```

として
内容を以下のように変更しています。

```
# The time zone of the system is defined by the contents of /etc/localtime.
# This file is only for evaluation by system-config-date, do not rely on its
# contents elsewhere.
ZONE="Asia/Tokyo"
UTC=false
```
[sklearn]ValueError: Unknown label type: 'unknown'の対処

# はじめに
Qiita初投稿。
環境はGoogle Colaboratory。
サポートベクトルマシン(SVM)を用いた機械学習を行おうとした。

主要なコードを抜粋して、下記に示す。

# エラー時の状況
```python
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.datasets import load_iris

trainDf = pd.read_csv('cancer_train.csv')
trainDf.loc[trainDf['diagnosis']=='M', 'diagnosis'] = 1
trainDf.loc[trainDf['diagnosis']=='B', 'diagnosis'] = 0

x = trainDf.drop('diagnosis', axis=1).values
t = trainDf['diagnosis'].values

# 学習データとテストデータに分割
from sklearn.model_selection import train_test_split
x_train, x_test, t_train, t_test = train_test_split(x, t, test_size=0.3, random_state=0)

# モデルの定義
from sklearn.svm import SVC
svc = SVC()

# モデルの学習
svc.fit(x_train, t_train)
```

上記コードの`svc.fit(x_train, t_train)`のところで下記のようなエラーが出ていた。

```python
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-153-1a4df9ebbf66> in <cell line: 6>()
      4 
      5 # モデルの学習
----> 6 svc.fit(x_train, t_train)

2 frames
/usr/local/lib/python3.10/dist-packages/sklearn/utils/multiclass.py in check_classification_targets(y)
    216         "multilabel-sequences",
    217     ]:
--> 218         raise ValueError("Unknown label type: %r" % y_type)
    219 
    220 

ValueError: Unknown label type: 'unknown'
```
# 原因
少し調べると、`Unknown label type:`のエラーはfitの際のyに問題があることがわかった。


参考サイト：[機械学習　モデル　エラー　Unknown label type: 'continuous-multioutput'](https://teratail.com/questions/192139)

下記のコードで、diagnosis(診断)列の値が'M'であれば1、'B'であれば0と変換しているのだが、ここの処理が原因でエラーが発生していた。
- 対処前
```python
trainDf = pd.read_csv('cancer_train.csv')
trainDf.loc[trainDf['diagnosis']=='M', 'diagnosis'] = 1
trainDf.loc[trainDf['diagnosis']=='B', 'diagnosis'] = 0
```
- 対処後
```python
trainDf = pd.read_csv('cancer_train.csv')
trainDf.loc[trainDf['diagnosis']=='M', 'diagnosis'] = '1'
trainDf.loc[trainDf['diagnosis']=='B', 'diagnosis'] = '0'
```
diagnosis列の7割をt_trainに割り当てているので、**diagnosis列の要素の型を整数型からstr型に変更**することでエラーが解消された。

fitにラベルとして与えた配列の要素が整数型だったのが今回のエラーの原因だと考えている。

# まとめ
今回のエラーに対して、対処法を調べたが見つけられなかったので私の対処法をまとめた。

対処法が見つからないということは、このエラーで頭を抱えている人が少ない、もしくはいないのだろうか。

この記事をみて、誰かの助けになることを願う。

2024/03/23　以下のコメント追記
いいねありがとうございます。この記事しか投稿していないため、初めていいねをいただけました。とてもうれしいです！

少し記事を見返しましたが、エラーの文章に「label type」と書かれていることから、ラベルの属性(型)が不適切であると推測できますね。
当時は気づけませんでしたが、冷静にエラーの文章をよく読めば簡単に解決できたかもしれません。。。
Nuxt3 で Prism.js 使ってみた


ソースコードをシンタックスハイライト表示させるのにとっても便利な Prism.js。
Nuxt3 で利用してみたのでまとめておきます。

https://prismjs.com/

## 1. インストール

Prism.js をインストールします。

```bash
npm install prism
```

## 2. プラグインの作成

Prism.js を実行するために、プラグインを作成します。

### 2-1. ファイルの作成

`prism.client.js` という名前でファイルを作成し、`plugins` ディレクトリに格納します。

:::note info
ファイル名に `.server` または `.client` というサフィックスを使用すると、サーバーサイドまたはクライアントサイドのみでプラグインをロードできます。
:::

```
project/
└── plugins/
    └── prism.client.js
```

:::note warn
`plugins` ディレクトリにあるプラグインはすべて自動登録されるので、別途 `nuxt.config` に追加する必要はありません。<br>ただし、プラグインが直下にある場合のみで、サブディレクトリに格納した場合は `nuxt.config` への追加が必要です。
:::

`vendor` ディレクトリに格納した場合は、 `nuxt.config.ts` にプラグインの追加が必要です。

```
project/
└── plugins/
    └── vendor/
        └── prism.client.js
```

```ts:nuxt.config.ts
export default defineNuxtConfig({
  plugins: [
    '~/plugins/vendor/prism.client.js'
  ],
})
```

### 2-2. Prism.js の設定

作成した `prism.client.js` に Prism.js の3種類の設定をします。

1. テーマ
2. プラグイン
3. 言語

それぞれ利用したいもののパスを記述するだけです。
利用するファイルは以下に格納されています。

```
project/
└── node_modules/
    └── prismjs/
        ├── components
        ├── plugins
        └── themes
```

:::note warn
`prism-toolbar` は先頭で読み込んでおく必要があります。
先頭で読み込んでおかないと `prism-copy-to-clipboard` など、`prism-toolbar` に依存しているプラグインが表示されません。
:::

```js:prism.client.js
import Prism from 'prismjs'

// テーマの読み込み
import 'prismjs/plugins/themes/prism-okaidia.min.css'

// プラグインの読み込み
import 'prismjs/plugins/toolbar/prism-toolbar.min.css'
import 'prismjs/plugins/toolbar/prism-toolbar.min.js'
import 'prismjs/plugins/copy-to-clipboard/prism-copy-to-clipboard.min.js'
import 'prismjs/plugins/inline-color/prism-inline-color.min.css'
import 'prismjs/plugins/inline-color/prism-inline-color.min.js'
import 'prismjs/plugins/line-numbers/prism-line-numbers.min.css'
import 'prismjs/plugins/line-numbers/prism-line-numbers.min.js'

// 言語の読み込み
import 'prismjs/components/prism-apacheconf'
import 'prismjs/components/prism-bash'
import 'prismjs/components/prism-clike'
import 'prismjs/components/prism-css'
import 'prismjs/components/prism-css-extras'
import 'prismjs/components/prism-javascript'
import 'prismjs/components/prism-json'
import 'prismjs/components/prism-markup'
import 'prismjs/components/prism-markup-templating'
import 'prismjs/components/prism-php'
import 'prismjs/components/prism-pug'
import 'prismjs/components/prism-scss'

export default defineNuxtPlugin((nuxtApp) => {
  Prism
})
```

#### Dracula Theme

私が愛用してる Dracula Theme も Prism.js に対応していました。

https://draculatheme.com/prism

インストールしてファイルのパスを記述するだけで利用可能です。

```bash
npm i dracula-prism
```

```js:prism.client.js
import Prism from 'prismjs'

// テーマの読み込み
import 'dracula-prism/dist/css/dracula-prism.min.css'

export default defineNuxtPlugin((nuxtApp) => {
  Prism
})
```

## 3. 利用する

コンポーネントがマウントされた後に Prism.js を実行します。

```vue:app.vue
<script setup lang="ts">
import Prism from 'prismjs'
onMounted(() => {
  Prism.highlightAll()
})
</script>

<template>
<pre>
  <code class="language-言語名">
    ...
  </code>
</pre>
</template>
```
AtCoder初心者振り返りメモ ABC325

# ABC325の回
##### 参考リンク
https://atcoder.jp/contests/abc325

# A-問題
https://atcoder.jp/contests/abc325/tasks/abc325_a

**問題文**
キーエンスでは、役割や年齢、立場の違いに関係なく「さん」付けして呼ぶという文化があります。 新入社員が社長を呼ぶときも「中田さん」と呼びます。ある人の苗字と名前がそれぞれ文字列 S,T として与えられます。
苗字、スペース（ ）、敬称（san）をこの順に連結した文字列を出力してください。

**ポイント**
回答に必要なのは、変数Sのみ

````Python:A.py
S,T = map(str,input().split())
print(S + ' ' + 'san')
````
# B-問題
https://atcoder.jp/contests/abc325/tasks/abc325_b

![325B.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547298/5f2c9556-3261-2353-afb7-c6887f076602.png)

**ポイント**
日を跨ぐ場合もあり、24で割った余りで条件判定する

````Python:B.py
N = int(input())
W = []   # 拠点の人数を格納する
X = []   # 時差を格納する
for i in range(N):
    w,x = map(int,input().split())
    W.append(w)
    X.append(x)

ans = -1

# 業務時間9:00から17:00開催の会議に参加するときに集まれる最大人数を探索する

for j in range(1,24):
    MX = 0
    for i in range(N):
        # 日を跨ぐ場合もあり、24で割った余りで条件判定
        a = (X[i] + j) % 24　
        if a >= 9 and a < 18:
            MX += W[i]
    ans = max(ans,MX)

print(ans)
````
【Ruby】superを使うデメリット（注意点）

## 【Ruby】`super`を使うデメリット（注意点）

Rubyの`super`は非常に便利な機能であり、クラスの継承階層を活用する上で頻繁に用いられます。しかし、その使用には注意点とデメリットがいくつか存在します。以下に、`super`の使用に関連する主要なデメリットと注意点を挙げます。

### 1. 継承の複雑さ

以下のように、`super`の呼び出しは、継承の階層を持つクラス設計の複雑さを増加させる可能性があります。特に多重継承の場合（Rubyではモジュールの取り込みを考えるとき）、`super`の動作が直感的でないことがあります。
```ruby
module A
  def greet
    "Hello from A"
  end
end

module B
  def greet
    super + " and B"
  end
end

module C
  def greet
    super + " then C"
  end
end

class Parent
  def greet
    "Hello from Parent"
  end
end

class Child < Parent
  include A
  include B
  include C

  def greet
    super + " finally from Child"
  end
end

child = Child.new
puts child.greet

# 出力
# Hello from A and B then C finally from Child
```
モジュールのメソッドはそのモジュールが取り込まれたクラスよりも前にチェーン内で探索されます。

この例では、Childクラスのgreetメソッドが呼び出されると、次の順序でメソッドが探索されます:

Child
C (モジュール)
B (モジュール)
A (モジュール)
Parent
したがって、child.greetの結果は上記のコメントアウトされている出力のようになります。
### 2. 変更への脆弱性

親クラスのメソッドが変更されると、`super`を使用しているサブクラスに影響を及ぼす可能性があります。これにより、一部のサブクラスが意図しない動作を示すことが考えられます。


### 3. オーバーライドの問題

サブクラスでのメソッドのオーバーライドに関連して、`super`の呼び出しタイミングや、その有無により、予期しない挙動やエラーが生じることがあります。
```ruby
class Vehicle
  attr_reader :wheels

  def initialize
    @wheels = 4
  end
end

class Car < Vehicle
  attr_reader :brand

  def initialize(brand)
    @brand = brand
    # superの呼び出しを忘れたため、@wheelsが初期化されない
  end
end

car = Car.new("Toyota")
puts car.brand  # => "Toyota"
puts car.wheels # => nil (期待は4だが、superが呼び出されなかったためnilとなる)
```

### 4. カプセル化の破壊

`super`を使用して親クラスの具体的な実装に依存することは、時としてカプセル化の原則に反します。このような依存が強くなると、クラス間の独立性が低下し、変更が難しくなることがあります。

```ruby
class Parent
  def greet
    "Hello"
  end
end

class Child < Parent
  def greet
    super + ", World!"
  end
end
# Parentクラスのgreetを変更するとChildクラスの出力も変わる
```

### 5. 可読性の問題

`super`の使用は、コードの可読性に影響を及ぼす可能性があります。特に、複数の継承階層が関与する場合、どのクラスのメソッドが呼び出されるのかを特定するのが難しい場面が生じます。

---

以上のような点を考慮して、`super`の使用は慎重に行うことが推奨されます。また、継承よりも合成やデリゲーションといったオブジェクト指向の他のパターンを活用することで、これらの問題を避ける方法も考えられます。
AtCoder初心者振り返りメモ ABC326

# ABC326の回
##### 参考リンク
https://atcoder.jp/contests/abc326

https://qiita.com/kimisuke0619/items/623fd5eb066479d1b374

https://qiita.com/T_Wakasugi/items/c979e977f56531942de4
# A-問題
https://atcoder.jp/contests/abc326/tasks/abc326_a

![326A.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547298/af36ee28-eff6-d124-82ec-7a4bfa58809f.png)
**ポイント**
XとYの大小によって、上りと下りを判別

````Python:A.py
X,Y = map(int,input().split())

if (X < Y) and (Y - X) >= 3:
    print("No") 
elif (X > Y) and (X - Y) >= 4:
    print("No")    
else:
    print("Yes") 
````
# B-問題
https://atcoder.jp/contests/abc326/tasks/abc326_b

![326B.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547298/f5f7c65f-2caf-ed4d-2f58-a58ee166349d.png)
**ポイント**
全探索用に条件に一致する判定をする関数を用意する

````Python:B.py
# 条件に合う場合にTrueを返す関数
def like(X):
    W = str(X)  # 文字列に一度変換
    A = int(W[0])
    B = int(W[1])
    C = int(W[2])

    if A * B == C:
        return True
# 入力
N = int(input())

for i in range(N,920):
    if like(i) :
        print(i)
        exit()
````
# C-問題
https://atcoder.jp/contests/abc326/tasks/abc326_c

![326C.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547298/11e696e7-67fa-9d6d-206e-2b222848a08e.png)

本番は、計算量が大きすぎてTLEを解決できませんでした。

**ポイント**
・enumerate関数で、リストのインデックスと値を同時に取り扱う
・bisect_leftを用いて二分探索し計算量を効率化する

````Python:c.py
from bisect import bisect_left
import math,sys,datetime,random,glob,os,re,bisect

N,M = map(int,input().split())
A = list(map(int, input().split()))
A.sort()

ans = 0

# enumerate関数で、リストのインデックスと値を同時にループする
for i, a in enumerate(A):

    # 二分探索で左から最初に該当する値のインデックスPを取得する
    P = bisect_left(A, M + a)

    ans = max(ans, P-i)
    
print(ans)
````
【Ruby】述語メソッドについて

# はじめに
Rubyにおける述語メソッドについて記していきます。
また、後半に述語メソッドの一部を紹介します。


# 述語メソッドとは
[Ruby用語集 (Ruby 3.2 リファレンスマニュアル)](https://docs.ruby-lang.org/ja/latest/doc/glossary.html)で以下のように説明されています。

>**述語メソッド** predicate method
>返り値を真偽値として用いるためのメソッド。メソッド名の末尾に ? を付ける習慣がある。
>true/false を返すとは限らず、真である場合に、true 以外のオブジェクトを返すことで、単なる真偽を越えた情報を与えるものもある。

# 「def xx？」の意味
[Rubyで使われる記号の意味（正規表現の複雑な記号は除く） (Ruby 3.2 リファレンスマニュアル)](https://docs.ruby-lang.org/ja/latest/doc/symref.html#q)で以下のように説明されています。

>**def xx?**
>この場合の「?」はメソッド名の一部分です。慣用的に、真偽値を返すタイプのメソッドを示すために使われます。

※しかし、[こちら][link-1]の記事でも紹介されていたが、xx?メソッドにも関わらず、true・false以外の値を返すメソッドも実在する。


[link-1]: https://qiita.com/scivola/items/fa59f05a31bb49b218d0


# String(文字列)クラス
| メソッド名 | 説明 |
|---|---|
|empty?|文字列が空 (つまり長さ 0) の時、真を返します。|
|include?(substr)|文字列中に部分文字列 substr が含まれていれば真を返します。|
|casecmp?(other)|大文字小文字の違いを無視し文字列を比較します。文字列が一致する場合には true を返し、一致しない場合には false を返します。<br> nil は文字列のエンコーディングが非互換の時に返されます。|
|start_with?(strs*)|self の冒頭が strs のいずれかであるとき true を返します。
|end_with?(*strs)|self の末尾が strs のいずれかであるとき true を返します。|
|eql?(other)|文字列の内容が文字列 other の内容と等しいときに true を返します。等しくなければ false を返します。<br> ※同一オブジェクトかの判定はObject#equalを使用。|

# Array（配列）クラス
| メソッド名 | 説明 |
|---|---|
|empty?|自身の要素の数が 0 の時に真を返します。そうでない場合に false を返します。|
|include?(val)|配列が val と == で等しい要素を持つ時に真を返します。|
|intersect?(other)|other と共通の要素が少なくとも1個あれば true を、なければ false を返します。|
|none?|ブロックを指定しない場合は、 配列のすべての要素が偽であれば真を返します。そうでなければ偽を返します。ブロックを指定した場合は、配列のすべての要素をブロックで評価した結果が、すべて偽であれば真を返します。そうでなければ偽を返します。要素の数が 0 である配列に対しては true を返します。|
|one?|ブロックを指定しない場合は、 配列の要素のうちちょうど一つだけが真であれば、真を返します。そうでなければ偽を返します。ブロックを指定した場合は、配列の要素をブロックで評価した結果、一つの要素だけが真であれば真を返します。そうでなければ偽を返します。|

# Numeric（数値）クラス
| メソッド名 | 説明 |
|---|---|
|eql?(other)|自身と other のクラスが等しくかつ == メソッドで比較して等しい場合に true を返します。そうでない場合に false を返します。|
|finite?|self の絶対値が有限値の場合に true を、そうでない場合に false を返します。|
|infinite?|常に nil を返します。自身が Float かComplex、もしくはそのサブクラスのインスタンスの場合は、self の絶対値が負の無限大の場合に-1を、正の無限大の場合に1を、有限値の場合に nil を返します。|
|integer?|自身が Integer かそのサブクラスのインスタンスの場合にtrue を返します。そうでない場合に false を返します。|
|negative?|self が 0 未満の場合に true を返します。そうでない場合に false を返します。|
|nonzero? |自身がゼロの時 nil を返し、非ゼロの時 self を返します。|
|positive?|self が 0 より大きい場合に true を返します。そうでない場合に false を返します。|
|zero?|自身がゼロの時、trueを返します。そうでない場合は false を返します。|

# Object（オブジェクト）クラス
| メソッド名 | 説明 |
|---|---|
|eql?(other)|オブジェクトと other が等しければ真を返します。Hash で二つのキーが等しいかどうかを判定するのに使われます。|
|equal?(other)|other が self 自身の時、真を返します。二つのオブジェクトが同一のものかどうか調べる時に使用します。|
|frozen?|オブジェクトが凍結（内容の変更を禁止）されているときに真を返します。|
|instance_of?(klass)|オブジェクトがクラス klass の直接のインスタンスである時真を返します。|
|instance_variable_defined?(var)|インスタンス変数 var が定義されていたら真を返します。|
|is_a?(mod)<br> kind_of?(mod)|オブジェクトが指定されたクラス mod かそのサブクラスのインスタンスであるとき真を返します。|
|nil?|レシーバが nil であれば真を返します。|
|respond_to?(name, include_all = false)|オブジェクトがメソッド name を持つとき真を返します|


# 参考文献
この記事は以下の情報を参考にして執筆しました。

https://docs.ruby-lang.org/ja/latest/doc/glossary.html

https://docs.ruby-lang.org/ja/latest/doc/symref.html#q

https://docs.ruby-lang.org/ja/3.2/library/_builtin.html

https://qiita.com/ym_mm/items/739d8eedbb5f24b1c29e

https://qiita.com/scivola/items/fa59f05a31bb49b218d0