空きっ腹のブルース

お腹が空いた冬

サーモンラン小技リスト

カタパッド

肩パッドが下に降りて蓋を開く直前に投げるとボムが入る。下や近くにいる時は急な角度で上向き投射。アラマキ砦の高台にいるときはそのまま投げていい。タイミングとしては、肩パッドが位置を定めて下に降りるとき、肩を一度だけ上下に羽ばたかせるモーションが入る。肩を下に下げた瞬間に投げるといい。

youtu.be

youtu.be

ハシラ

ハシラの上にいてカタパッドからのボムを回避する。 初めの二発の狙いを定められたらインクを塗っている側面に壁セミをする。そうすれば直撃を受けずにハシラにとどまることができる。

ステージ固有の知識

アラマキ砦

開始直後のコウモリ出現時、網まで下がると高台の上に飛んでくるのでヨセる。

youtu.be

2023年プログラミング経験者が基本情報受けてきた

所感

  • A問題は暗記戦。覚えまくると勝てる。
  • 演習問題には二種類ある。分野別と試験形式。買うなら分野別の本を買おう。試験形式は基本情報ドットコムがあるので買う必要はない。
  • Kindle Unlimited にはキタミ式の問題集があるので読んでみよう
  • あと素人が書いてるけど基本情報ドットコムレベルより少し詳しい解説がついた350問ある問題集があるのでKindle Unlimitedを契約してるならお勧め
  • A問題は範囲が変わってないので最新年度を買わなくてもいい。2、3年前のを買ったほうが安上がり。
  • 本が苦手な人は Udemy や Youtube など動画で勉強するのも選択肢の一つ
  • 基本情報道場は分野別を1から解く必要はなかった。細かすぎる問題や同じ問題が含まれていてコスパ悪い。Javaアップレットのような古い技術の問題も含まれている。直近10年分を解いたほうがいい。あとよく出る問題は決まっているので1から解くよりも良く出る問題を解いた方がいい。
  • A問題は過去問と同じor見たことあるのが7割、見たことないのが2割、知らないと解けないのが1割くらいの構成。9割を超えてたら勉強しすぎの印象。というか取るの無理。8割超えてたら勉強をよく頑張った。7割超えてたらしっかり頑張った。6割超えてたらまあまあ。合格点取れてなかったらさすがにもっと頑張れレベル。よく出る問題をやってれば6割落とすことはない。そしてよく出る問題は下に紹介してある問題集と過去問を過去問10年完璧にすればok。
  • 演習回して過去問数年やればA問題は6割取れる
  • B問題のアルゴリズムは7割ぐらいが初見の問題なので少しびっくりした。過去問を暗記しても太刀打ちできないのでコードを読んでどんな動きをしているのかを理解する読解力?が必要
  • 疑似コードのオブジェクト、リスト、関数は慣れてないとよく分からないので慣れるように
  • アルゴリズムの参考書では「トレース」「トレース」と謎の言葉が飛び交う。プログラミング未経験者がアルゴリズムの問題を解くための考え方のこと。最後まで分からなかったがトレースができなくても充分対応できる。
  • 90分の中で40分で解き終わったので、残りの50分は全て飛ばした問題と確認に費やした。
  • B問題のセキュリティ科目は文章が長いので大変。解き終えた後、ミスがないか確認するのがちょっと苦痛だった。出題形式は変更前のセキュリティとほぼ同じなので過去問を見たほうが良かったかも。でも対策しなくてもできる。
  • 問題集は二種類ある。一つは分野別。もう一つは過去問集。これら二つは用途が違う。個人的におすすめは教科書を読んで対応する分野別問題集を読み、仕上げとして過去問を解くこと。分野別は解いている問題の周辺知識も身に付くので知識を結びつけやすい。過去問集は各分野満遍なく出題されるので覚えてるか確かめられる。
  • ニートなので勉強期間は1ヶ月で取れた。締め切りを設定しないとやる気が出ないので無職や学生は1ヶ月後、社会人は2ヶ月後を目処に設定するといい

使った教材

キタミ式イラストIT塾 基本情報技術者

https://www.amazon.co.jp/dp/4297131862/

おすすめ度 5/5

これを読むのがおすすめ。まずは3周ぐらい読んで全体感を掴んだ。全ページイラストが載っていてわかりやすく書かれている。ここに載ってない範囲は演習で身につけるといい。

基本情報技術者 試験によくでる問題集

おすすめ度 4/5

https://www.amazon.co.jp/dp/4297123754/

いわゆる分野別の問題集。範囲が広いのでよく出る問題はカバーできている。ネットではなく紙派の自分には良かった。9割くらい解けるようになったら過去問も6,7割解けるレベルに到達してると思う。

基本情報技術者の新よくわかる教科書

https://www.amazon.co.jp/dp/4297130602/

おすすめ度 5/5

上の問題集と同じ筆者が書いていて同じ構成になってるのが良い。上で問題を解きながらこの本を読み、問題を解きながら周辺知識もカバーする方針で解いていた。ページ数は232ページと、キタミ本の内容をさらに絞ってるのでキタミ本で見慣れた内容を定着させるのにおすすめ。レイアウトが綺麗にまとまっているので覚えやすい。上の問題集に飽きてきた頃この本を読んで突破口が見えた。

基本情報技術者[科目B]アルゴリズムとプログラミング トレーニング問題集(第2版)

https://www.amazon.co.jp/dp/4864869618/

おすすめ度4/5

基本情報の疑似コードは表記法が独特なので数をこなして慣れたいところ。2023/9時点では数をこなせる問題集がこれくらいしかなかったのでこれをやってた。解説が五行くらいしかないとてもあっさりした本なので、プログラミング経験者用。出題されてる題材は難しめ。大学の教科書で出てくるようなソートや探索アルゴリズムが多い。試験本番では7割くらいが初見の題材なので、これを解けるくらいになれば対策としては十分。一方トレースは全くないのでトレースの解説が知りたい人は向いてない。

うかる! 基本情報技術者 [科目B・セキュリティ編]

https://www.amazon.co.jp/dp/4296115014/

おすすめ度1/5

2/3が教科書で1/3が演習の構成。教科書の部分は基本情報の教科書に載ってないのが少し扱われててよくまとまってる。演習の部分は解説が詳しくて対話形式なので読みやすい。一方、試験本番では基本情報のネットワークやセキュリティ部分の知識+常識で解けるのでわざわざ参考書を買わなくていいと思う。

情報処理教科書 出るとこだけ!基本情報技術者[科目B]第3版

https://www.amazon.co.jp/dp/4798177679/

おすすめ度 1 / 5

プログラミング未経験者が読むといい本だと思う。問題演習とともにトレースの考え方が詳しく解説がされているので親切のだと思う。プログラミング経験者には不要だった。ぼくには不要なだけで未経験者にはいいと思う。

行き遅れたら相手がショボイので結婚しないって論理は昔からあった

山本周五郎の『夕霧』という小説にこんなセリフがあった

「(自分は24歳で)こんな歳になっては嫁に行くにしても相手はしれている」

要するに24歳の女性は行き遅れだからまともな男と結婚できないということだ。この小説の時代設定はわからないが、24歳で行き遅れとは驚きだ。2023年の現代、24で結婚は早い方だ。時間軸をいつに設定するかにもよるが晩婚化というのはほんとだったんだな。

小説ではこの娘はなくなっている設定で、先立たれた娘に対して嘆きを言う母親のセリフが自分にはグサリと刺さる。

(26歳で亡くなった娘に対して母がこう思う)「二十六という年まで、華やいだことも、浮気めいたこともなく、とうとう、夫婦の味も知らせずにしまったかと思うと、可哀そうで、可哀そうで」

うるせぇなあ😭😭😭 僕に刺さるからやめてください

youtu.be

便利な拡張機能

Tango

Webの手順書が簡単に作れる。 Tangoを使って自動で手順書作成【超絶簡単にWebアプリの手順書が作れます。】|Shogo Noda

Chrome extension source viewer

拡張機能ソースコードが見れる。なお、難読化されていたら使い物にならないが、多くの拡張機能はされてないので参考になる。

これからはじめるReact実践入門の感想

こちらの方の記事を読んだ方がいいと思った。経験者ならではの話がある。

blog.nkzn.net

謝辞

Twitterで行われていたWINGSプロジェクトのレビュー企画に応募し、書籍献本を受けました。ありがとうございます。

良い点

前から読んでいっても学習可能だし、リファレンスとしても使える

大枠として「導入編」「基本編」「応用編」の3段階に分かれていて、後ろのページに行くほど難しくなっている。さらにルーティングやコンポーネント開発など後から辞書として調べたい項目別に章が分かれているので後から見返しやすい。なので、前から読んでいっても、後から見返しても読みやすい作りになっている。個人的にこの著者が書く本の一番のウリはこれだと思う。手を動かして進める系は一回目に読むには適しているが、読み返すときには情報が散らばってて見づらい。かといってリファレンス系にすると知識がある人はいいがそもそも初心者は読めない。このいい塩梅をとっているので、初心者の人でも中級者の人でもお勧めできる。

細かい注意点も書かれている

import文の拡張子、key属性はループの中で一意性の話など、どこかで聞いたことあるがすぐに忘れてしまっていた内容が Note として散りばめられている。もしかしたら経験者には当たり前なのかもしれないが、自分は忘れてしまっていたのでこういうちょっとした知識はとても助かる。

React Router, React Hook Form, Recoil などが扱われてる

自分が買った本はこういう内容が書かれてなかったので個人的にここがありがたかった。特にRecoilが扱われているのは良くて、「ReduxよりRecoilがいいzo 」という記事を見かけたことはあるが体系だって知れる機会がなかったので良い。

よく使われているライブラリも扱っていた

こういう解説本では公式が提供するライブラリしか使わないのだが、Story Book、Material UI 、Emotionなどの外部ライブラリを扱っているのはありがたかった。実際に現場で使われているかどうかは知れないが、そもそも存在すら知らなかったので頭の片隅に置いておく。

気になる点

v18に出てきた並行レンダリングなどがない。v18対応というにはちょっと弱い

React v18 と検索すると並行レンダリングというのが増えているらしく、なんだか難しそうな概念なので扱って欲しかった。全部を把握しきれてないが、v18固有の内容で本書で扱われてるのはトランジションだけだから、ちょっと物足りない。Reactv18が出たのは去年なのでもう少し踏み込んで欲しかった。

TypeScriptとNext.jsの章が蛇足

TypeScriptはほぼ必須なのだから JS でなく全て TypeScriptで書いても良かったんじゃないかなと思った。そっちのほうが分かりやすい。また、この方はNuxt.js の本も書いているのだから、Next.jsを書くのであれば別の本として切り分けて欲しかった。この章だけで約100ページ費やしているからその部分をReactの説明にさいて欲しかった。

本書を知った経緯

Reactを身に付けたいなと思いつつ本屋を探したが現状出版されているReactの本は、情報が古いものか、新しいけど浅いところまでしか扱ってないか、経験者に書かれたものしかなかった。自分が欲しいのは、新しくて網羅的に扱っているタイプの本だから、世間でReactが流行っているのについていけず歯痒い思いをしていた。そこで見つけたのが山田祥寛さんのReact本だ。この人が書いたものは、Railsの本で読んだことがあり、手を動かして学ぶチュートリアル形式でありながら、リファレンスとしても使える本で、なかなかいいライターだと思ってた。なのでAmazonでReact本を探していてこの人の本があることを知って読んでみることにした。読んでみると案の定いい感じの本だった。名前はいろんな本で聞いていたからなんでこんな多作なんだろと思い調べてみるとライター集団らしい。これからも継続的にいろんな分野の本を書いてほしいと思った。

document.readyState が loading のときのブラウザの振る舞い

結論

よくわからなかった。

やってみた

ブラウザがHTMLを読み込んでWebページを表示するまでにdocument.readyStateという値は loadinginteractivecompleteの3つの状態をとる。リンクをクリックした直後はloadingで、Webページを表示し終えた後がcompleteという値になるらしい。ドキュメントに書いてあった。 もっと詳しく書くと次の表の通りである。

説明
loading この文書 (document) はまだ読み込み中です。
interactive 文書の読み込みが完了し、DOMにアクセスできる。ただしスクリプト、画像、スタイルシート、フレームなどのサブリソースはまだ読み込み中である。
complete 文書とすべてのサブリソースの読み込みが完了した。この状態は load イベントが発行されようとしていることを示しています。

拡張機能を開発するにあたってこのイベントの挙動を知りたかったので実際に動かして調査してみる。まずは利用するソースコードを書いておく。

<!DOCTYPE html>
<html>
<head>
    <link rel="stylesheet" href="styles.css" type="text/css">
    <title>サンプル</title>
</head>
<body>
    <h1 id="title">のサンプル</h1>
    <script src="script.js"></script>
</body>
</html>
body {
    font-family: Arial, sans-serif;
    background-color: gray;
    margin: 0;
    padding: 0;
}
const state = document.readyState;
alert(`${state}`);

このコードでは JS をscriptタグから読み込んで alert() でダイアログを表示させる。ダイアログに表示させる文字が今回知りたい document.readyState の値である。document.readyStateを呼び出した場所は1行目なのでHTMLからJSが読み込まれたら一番最初に取得している。その直後にalert()でダイアログを表示させてるのでJSの処理は止められるので、document.readyStateの状態をたもったままで調査ができる。

結果

上のコードを実行したらこうなった

document.readyStateloadingのときは画面は真っ黒で何も表示されていない。公式サイトによるとdocumentはまだ読み込み中なので確かに書いてある通りだ。OKボタンを押して次に進むとCSSで装飾されたページが返ってきた。

ちなみに再度読み込みをするとこうなる。

h1タグに書いた文字は無くなるが、背景が灰色のままである。これはキャッシュが残っているからだ。キャッシュを削除して再度読み込みするには「検証」を開き、ブラウザの再度読み込みボタンを右クリックして出てくる「キャッシュの削除とハード再読み込み」という項目をクリックするとできる。

実は再度読み込みは3つのモードがあって、Ctrl + Rでできる再読み込みはキャッシュを削除しない一番弱いモードなのだ。ちなみにこの再読み込みにショートカットはなく、検証を開いてないとできない。検証を開いてない状態で再度読み込みボタンを右クリックしても何も表示されないから注意。

さて、loadingのときにDOMにアクセスできるのだろうか。JSを次のコードに変えて実行してみる。

state = document.readyState;
// HTMLに直接書き込んである要素を取得
existing_elem = document.body.getElementsByTagName("h1")[0].innerHTML;

alert(`stateは${state} \n h1の内容は ${existing_elem}`);

なんとDOMにアクセスできてしまった。公式サイトの動作確認の例では DOM はまだ構築されていないように書いてあったのに。。。HTMLに書いてアクセスあるからで、JSで生成したDOMはどうなるかと思って調べた。

// readyState の状態を取得
state = document.readyState;
// HTMLに直接書き込んである要素を取得
existing_elem = document.body.getElementsByTagName("h1")[0].innerHTML;

// js でspan要素を作成
const span = document.createElement("span");
span.textContent = "spanがJSで作成されてるよ";
document.body.appendChild(span);
injected_elem = document.body.getElementsByTagName("span")[0].innerHTML;

// const styles_count = document.styleSheets.length;

// alert(`[${state}]  ${existing_elem} -- ${injected_elem} -- ${styles_count}`);
alert(`stateは${state} \n h1の内容は ${existing_elem}`);

なんとJSで生成したDOMにもアクセスできてしまった。このまま読み込んだCSSファイルの個数も調べてみたら、やっぱり読み込めているようだ。

// readyState の状態を取得
state = document.readyState;
// HTMLに直接書き込んである要素を取得
existing_elem = document.body.getElementsByTagName("h1")[0].innerHTML;

// js でspan要素を作成
const span = document.createElement("span");
span.textContent = "spanがJSで作成されてるよ";
document.body.appendChild(span);
injected_elem = document.body.getElementsByTagName("span")[0].innerHTML;

// 読み込んだ css ファイルの個数
const styles_count = document.styleSheets.length;
alert(`[${state}]  ${existing_elem} -- ${injected_elem} -- ${styles_count}`);

alert(`stateは${state} \n h1の内容は ${existing_elem} \n spanの内容は ${injected_elem} \n cssの個数は ${css_count}`);

これは思っていたのと違う挙動になってしまった。はじめに書いた表をもう一度読んでほしい。DOMにアクセスできるのは interativeのときであって、しかもスクリプトスタイルシートが読み込み完了するのは completeのときである。なのに loading状態で DOMにもアクセスができ、スタイルシートも読み込めてしまった。

説明
loading この文書 (document) はまだ読み込み中です。
interactive 文書の読み込みが完了し、DOMにアクセスできる。ただしスクリプト、画像、スタイルシート、フレームなどのサブリソースはまだ読み込み中である。
complete 文書とすべてのサブリソースの読み込みが完了した。この状態は load イベントが発行されようとしていることを示しています。

だとしたらコードが間違っているのだろうか。例えば、alert()はJSファイルで書いているが、上の表によるとスクリプトの読み込みが完了するのはcompleteのときだそうだ。だからJSを実行できるのはcompleteになったタイミングだから、そもそもJSではdocument.readyStateの値は全てcompleteになるはずだ。でもalert()で表示されてる値は確かに loadingなのだから、JSが実行された時点ではloadingなのだろう。alert()をHTMLのscriptタグに直接書き込んでも結果は同じだった。

そもそもグローバルオブジェクトのdocumentにアクセスできてる時点で、内部ではDOMが構築し終えてるのでは?というかdocumentっていつ生成されて、なんの情報を持つんだ?分からないまま、時間が過ぎ、まあいいかと思い調査を諦めた。作る拡張機能は単純なものだから分からなくていいこともある。いつか調べよう。

HTTPの挙動を知るにはこのあたりの本を読めばいいのかな?

https://www.amazon.co.jp/dp/4873119030/

ハイパフォーマンス ブラウザネットワーキング ―ネットワークアプリケーションのためのパフォーマンス最適化 | Ilya Grigorik, 和田 祐一郎, 株式会社プログラミングシステム社 |本 | 通販 | Amazon

PythonからGmailを送信する

検索すればPythonから標準ライブラリを使ってGmailからメールを送る方法が書かれている記事にヒットします しかし2022/5/30 から古い方法が使えなくなってしまい、アプリパスワードというのを設定しないとGmailが使えなくなりました この記事通りにやればうまくいくのですが、「アプリパスワード」の項目が見つからなかったのでアプリパスワードを設定する方法をメモ Less secure apps & your Google Account - Google Account Help

設定画面の上にある検索バーに「アプリ パスワード」と入力すれば表示されます 注意点ですが、アプリとパスワードの間に半角スペースを挿入する必要があることです