blog.heartyfluid

勉強したることども

先週買った本、買いたかった本 2022-12-12 ~ 2022-12-18

先週買った本

先週買いたかった本

猫のひたいほどワイド 2022年度第28週 自分用アーカイブ

月曜日 2022-11-21

  • MC 細貝圭
  • 猫の手も借り隊
  • アシスタント 岡村帆奈美

公式アーカイブ 月22/11/21放送|猫ひたアーカイブ |猫のひたいほどワイド|tvk デジタル3ch テレビ神奈川

潜入リポート1 石渡真修「嗅覚・視覚どちらもご満悦!デザイン石けん作り」綾瀬市


www.youtube.com

そして tvk 猫のひたいほどワイド 7周年感謝祭 ~激動のうねり/信念の鼓動~ 開催が告知される。

月曜のにゃんこ

自分が大喜利の回答を求められるといっぱいいっぱいになる細貝さん。大喜利大賞のイエロー早瀬くんには猫柄のポーチをプレゼント。

潜入リポート2 早瀬圭人「100人の集い!新たなコミュニティの形」南足柄市


www.youtube.com

猫ひたスタジオでやってみよう 番外編「パクパクくちパクゲーム!Level 0」

水曜日が放映休止のため今週は番外編。第26週に実施した「思いよ届け!パクパクくちパクゲーム」が「あまりにも下手すぎた」ため、より簡単なお題で再挑戦。

  • 早瀬くん:「細貝愉快」
  • →石渡くん:「細貝舞台」
  • →細貝さん回答:「おとうたい?おとやわら」 ×

猫ひたニュース

imakana.kanaloco.jp

台湾料理好きの細貝さんいわく、台湾の食べ物には日本人の好みに合う味付けが多いとのこと。

細貝圭の猫ひた相談室

親知らずを抜くのが怖い相談者に対して細貝さんいわく、自身は大学病院に入院して親知らずを抜いたあと1週間流動食しか食べられず5kg痩せたとのこと。一方岡村アナは抜いたその日に鍋を食べたとのこと。石渡くんは目下治療中。早瀬くん「なんとかなる」とエール。

全国高校サッカー選手権 神奈川代表をワイドに応援!

第101回全国高校サッカー選手権大会の神奈川県予選で優勝した日大藤沢高校サッカー部のキャプテンをゲストに迎える。

猫ひたインフォ

プレゼントコーナー

今週のおやつ・プレゼントはJA 西宇和農業協同組合の温州みかん

電話つながった。

火曜日 2022-11-22

  • MC 鎌苅健太
  • 猫の手も借り隊
    • グリーン 石川悠人 6
    • 水曜グリーン 拓郎 6→7
  • アシスタント 岡村帆奈美

公式アーカイブ 火22/11/22放送|猫ひたアーカイブ |猫のひたいほどワイド|tvk デジタル3ch テレビ神奈川

潜入リポート1 拓郎「商品化決定!かじラテ0号のその後」清川村


www.youtube.com

鎌苅健太の精進します「超簡単メロンパン」

レシピと木曜レッド大城くんのアレンジは公式アーカイブに掲載。

潜入リポート2 石川悠人「ラグビーリーグワン12月開幕!ダイナボアーズ練習場へ!!」

相模原市中央区ダイナボアーズ練習グラウンドで今回もラグビー体験。ラインアウトに挑戦するなど。

猫ひたスタジオでやってみよう 番外編「パクパクくちパクゲーム!Level 0」

  • 拓郎くん:「拓郎がんばろう」
  • →石川くん:「元旦がんばろう」
  • →鎌苅さん回答:「パクパクケンタウルス」 ×

猫ひたニュース

www.kanaloco.jp

東京湾フェリーで遊ぶ南房総

東京湾フェリーの武藤さん登場。キューカットではプロレス LOVE ポーズを披露してくれる。

11/25~28 ロースタリーカフェの祭典 WE LOVE COFEE vol.3 開催!

プレゼントコーナー

電話つながった。

木曜日 2022-11-24

  • MC 井上正大
  • 猫の手も借り隊
    • レッド 大城光 7→8
    • グリーン 小林希大 4
  • アシスタント 照井七瀬

公式アーカイブ 木22/11/24 放送|猫ひたアーカイブ |猫のひたいほどワイド|tvk デジタル3ch テレビ神奈川

潜入リポート1 大城光「日本中からパンが届く!?"おいしい"に出会う定期便」山梨県


www.youtube.com

さらにスタジオでも試食。大城くんいわく、お店で試食したベーコンエピと同じ味が神奈川県でも食べられるとのこと。

さらにほかの店舗のパンも解凍して試食。

井上正大のお茶の時間「猫ひた版お茶カレー」

近ごろ世間で話題だという「お茶カレー」、猫ひたではお茶の色などを表に出さず旨味の相乗効果を狙うレシピを紹介。レシピは公式アーカイブに掲載。

潜入リポート2 小林希大「本格!絶品!地元で愛され続ける町中華に潜入!」横浜市西区


www.youtube.com

猫ひたスタジオでやってみよう 番外編「パクパクくちパクゲーム!Level 0」

  • 小林くん:「パン先輩」
  • →大城くん:「パン先輩」
  • →井上さん回答:「パンうまい」 ×

猫ひたニュース

www.kanaloco.jp

崎陽軒「電子レンジで簡単!アツアツ!!リニューアルした「肉まん」「あんまん」」

崎陽軒の山本さん登場。

www.welcome.city.yokohama.jp

猫ひたインフォ

プレゼントコーナー

電話つながった。

放送後猫のひたいほどワイドチャンネルにてアフタートーク

[読書]Software Design 2023年1月号

gihyo.jp

Software Design 2023年1月号を読んでのメモ。

ハピネスチームビルディング 第10回 「技術記事の投稿をサポートしてアウトプットを習慣づける」

小島優介さんの連載。最近はご無沙汰なものの過去2社で自社ブログを書いていたことがあり、この記事で取り上げられていたような悩みには心当たりがあります。

成長するための1つの施策として、みんなで技術記事を毎月書くことにトライしてみようとなったものの、メンバーは記事投稿に対して高いハードルを感じていました。それは「書こうと思ったことと同じ内容の記事がすでに世の中にあるので、書くネタがない」ということでした(ちなみにその後、技術記事の投稿経験のない社内の若手20人に聞いたところ、記事を書かない理由で最も多いのがこれでした)。

[...] 自分なりの視点で得られた知見を書いた記事なら、どんな記事も世の中に貢献していると言えます。

その考え方をチームのメンバーに伝えることで、記事投稿のハードルを下げられました。

自分の場合はもう少し不純というか不真面目で、「自分のためのメモを見やすいところにおいておく」「ほかのメンバーによく話すことを、すぐ出せるようにおいておく」といったことを主眼にしていました。要は世の中よりもまずは自分のためという精神で、三中信宏『読む・打つ・書く: 読書・書評・執筆をめぐる理系研究者の日々』に書かれているようなスタンスに近い。「世の中に貢献する」というのはそれと比べて明らかに野心的な目標で、尊敬するというかなかなか真似できないなと思いました…。

とはいえ、「どんな記事も世の中に貢献している」というか「どんな記事もいつだれの役に立たないとも限らない」というのは、書き手としてプレッシャーがかかるとつい忘れがちですが読み手の立場に戻るとたしかにそうなんですよね。「こんなのだれが読むんだろう」とか自信を失っているひまがあったら、まずは公開すべき。

痛感したことは、今まで自分は技術記事を読んで、わかった気になっていたということです。人に説明しようと思って記事を書いてみると、実は全然理解できていなかったということに気づきました。記事を書きながら理解しなおすことで、やっとそれが「使える知識」になりました。

あるある。そういうこともあって、「自分だけが得する記事」にも公開する意義がある。

世の中には「自分にとって価値の低い記事が増えると、自分にとって価値の高い記事の検索性が下がる」とネガティブなことを言う人もいます。

厳しい世の中。そういう面はたしかにあるし、それを読み手の頑張りだけでなんとかすべき問題とも思わないですが、それって自分が今立っている足元にだけ地面があればよい、みたいな話ですよね。

第1特集 アルゴリズムを使いこなしたい ―計算量 使いどころ 設計技法を知る―

いずれもサンプルコードは Python。データ構造とアルゴリズムの話は教科書もネット記事もたくさんあるけれど、そこからどのトピックを選んでどういうストーリーに配置するかが面白さなんだな、と思う。

記事中で「ナップサック問題」と「ナップザック問題」の表記ゆれ。英語の発音としては濁らないほうが近いもよう。

KNAPSACK | 意味, Cambridge 英語辞書での定義

第2特集 PostgreSQL 15の最新機能解説 ―始める・体験する・使いこなしの手がかり―

にゃーん。ここからはPostgreSQL 15で追加されたJSONログについて紹介します。

「にゃーん」?

最強の開発環境探究の道 第1回 「dotfiles を管理して、再現可能な開発環境を作る」

新連載。

本連載では、開発環境を構成するソフトウェアとその設定を「どのように準備し、使いこなすか」について説明します。ここで いう開発環境とは「LinuxUNIXにおける、ソフトウェア開発をはじめとするテキストベースのファイル編集やターミナルでのコマンド実行のための環境」のことです。次の内容に分けて扱います。

Windows ユーザーとしてはやや寂しい展開が待っているのかもしれない…まあいつものこと。

今回は .gitconfig を題材に、 Git とシンボリックリンクを使って設定を再利用する話。

[PHP][Docker]Docker コンテナ上の Composer キャッシュを永続化する

なんでもかんでも永続化するのもよろしくない(というかコンテナらしくない)と思いつつ、必要があってやってみた内容をメモ。

1. Composer のキャッシュのありかを確認する

以下のとおり、 composer コマンドでキャッシュのパスを確認できる。

Config - Composer

$ composer config cache-dir
/root/.composer/cache

この /root/.composer/cache の内容が永続化できればよい。

2. Composer のキャッシュを永続化するよう設定する

Composer のキャッシュがホスト側に永続化されるよう、 ./docker-compose.yml に以下のように追記した。

services:
  php:
    volumes:
      - type: bind
        source: ./.composer
        target: /root/.composer

/root/.composer/cache でなく /root/.composer 全体をバインドしているのは、source にあたるディレクト./.composer を空ディレクトリとして Git リポジトリに含めておきたかったため。

ディレクト./.composer を Git リポジトリに含めるため、ファイル ./.composer/.gitignore をコミットしておきたい。ところが、 cache ディレクトリの中身はコマンド composer clear-cache を実行するなどした際にすべて消される。そのため、 cache ディレクトリを直接この方法で永続化しようとすると、キャッシュを破棄する際に ./.composer/.gitignore まで消されてしまう。

空のディレクトリを維持するための、 .gitkeep と .gitignore の使い分け - Qiita

ところで volumes の long syntax は人に勧められて今回初めて使った。

docker-compose の bind mount を1行で書くな

と、ひととおり事が済んだあとでよく考えたら、 type: bind でなく type: volume で十分だったかもしれない。こちらなら、ホスト側にディレクトリを用意する手間がない。

Compose file version 3 reference | Docker Documentation

[PHP]ランダムなパスワードを生成する(もしくは、こんなパスワード生成は嫌だ)

hackzilla/password-generator を使ってランダムなパスワードを生成する

PHP でランダムなパスワード文字列を生成したいときは、hackzilla/password-generator を使うのがおすすめです。

まず、Composer で導入します。

$ composer require hackzilla/password-generator

そして以下のようにするだけで、英数字から成る10文字のランダムなパスワード文字列が生成できます。

<?php

use Hackzilla\PasswordGenerator\Generator\ComputerPasswordGenerator;

echo (new ComputerPasswordGenerator())->generatePassword();

必要に応じて、パスワードの条件を細かく指定できます。

<?php
declare(strict_types=1);

use Hackzilla\PasswordGenerator\Generator\RequirementPasswordGenerator;

echo (new RequirementPasswordGenerator())
    // 16文字の
    ->setLength(16)
    // 英大文字を1文字以上含み
    ->setMinimumCount(RequirementPasswordGenerator::OPTION_UPPER_CASE, 1)
    // 英小文字を1文字以上含み
    ->setMinimumCount(RequirementPasswordGenerator::OPTION_LOWER_CASE, 1)
    // 数字を1文字以上含むような
    ->setMinimumCount(RequirementPasswordGenerator::OPTION_NUMBERS, 1)
    // パスワードを生成
    ->generatePassword();

こんなパスワード生成は嫌だ

ランダムなパスワードを生成するときは、使用する関数について必ずマニュアルで調べましょう。そのような用途に使ってはいけない場合は、マニュアルにその旨書いてあります。

ちなみに、上述の hackzilla/password-generator は内部で random_int() を利用しています。

PHP: random_int - Manual

ポーカーゲームやカードデッキのシャッフルのような、 偏りがない結果が重要になる用途に合う、 暗号学的にランダムな整数を生成します。

rand() を使う

<?php

// 英数字から
$characters = str_split('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz');

// ランダムな12文字のパスワードを作る(?)
for ($i = 0; $i < 12; $i++) {
    echo $characters[rand(0, count($characters) - 1)];
}

PHP: rand - Manual

警告 この関数が生成する値は、暗号学的にセキュアではありません。そのため、これを暗号や、戻り値を推測できないことが必須の値として使っては いけません。

mt_rand() を使っても同じことです。

注意: PHP 7.1.0 以降、rand() は、 mt_rand() と同じ乱数生成器を使います。

str_shuffle() を使う

<?php

// 英数字からランダムな12文字のパスワードを作る(?)
for ($i = 0; $i < 12; $i++) {
    echo substr(str_shuffle('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'), 0, 1);
}

PHP: str_shuffle - Manual

警告 この関数が生成する値は、暗号学的にセキュアではありません。そのため、これを暗号や、戻り値を推測できないことが必須の値として使っては いけません。

その他、不便な方法

文字種や長さが限られるなど、安全性以前に選ぶ理由のなさそうな方法たちです。

まとめ

「ランダムなパスワードを生成する」ことは単に「ランダムな文字列を生成する」こととは別物です。パスワードの生成には単に見かけ上ランダムなだけでなく「暗号学的にセキュア」な方法が必要です。

何が「暗号学的にセキュア」かはマニュアルに記載されています。つまり、マニュアルを読むことが大事です。

[ドイツ語]nicht が否定する対象を誤解した例

最近、否定の副詞 nicht が何を否定しているのか読み違えてしまうケースが続いたのでメモ。

Brauchtum - Düsseldorf - Viele Kneipen und Weihnachtsmärkte zeigen keine WM-Spiele - Bayern - SZ.de より引用:

Wir können nicht die Menschenrechtslage, schlechten Arbeitsbedingungen, die Stellung der Frau und der LGBTQIA+-Gemeinde, Todesfälle bei den Bauarbeiten und Korruptionsvorwürfe bei der Vergabe kritisieren und die WM doch mit unserer Aufmerksamkeit belohnen.

誤訳:

我々は人権の状況、劣悪な労働条件、女性や LGBTQIA+ の人たちの地位、建設現場での死亡事故や業務委託での非難のある汚職を批判することができず、ワールドカップに注目してやっている。

つまり、nicht が und の手前までの "können ... kritisieren" 「~を批判することができる」を否定しているものと解釈して訳している。これは誤りだった。

正しくは次のとおり:

人権の状況、劣悪な労働条件、女性や LGBTQIA+ の人たちの地位、建設現場での死亡事故や業務委託での非難のある汚職を批判しておきながら、それにもかかわらずワールドカップに注目してやるということは我々にはできない。

つまり、nicht は und 以下を含む文全体 "können ... kritisieren und doch ... belohnen" 「~を批判し、かつそれにもかかわらず~してやることができる」を否定している。

ポイントは2つ。

  • 誤訳では und doch 「そしてそれにもかかわらず」を無視していた。doch に出くわすと見なかったふりをする、悪い癖
  • können 「できる」が kritisieren 「批判する」 だけでなく belohnen 「報いる」にもかかっていることを見落としていた。もし belohnen に können がかかっていないなら、belohnen は文末でなく und のあとに来るのでは

Energiekrise: Warum wir von dunkleren Städten profitieren | Wissen & Umwelt | DW | 12.09.2022 でも nicht 関連で読み違えをしていた。引用:

Die Stadt Weimar macht morgens die Straßenbeleuchtung 30 Minuten später an und 30 Minuten früher aus. Im Dunkeln steht man deshalb nicht.

誤訳:

ヴァイマール市は毎朝通りの照明を(従来より)30分遅く点灯し、30分早く消灯している。そのため、暗い中に人は立っていない。

つまり街路灯を点灯させる時間を1時間短くした結果「暗い時間が長くなり、そのため出歩く人がいなくなった」と解釈した。これも誤り。

正しくは次のとおり:

ヴァイマール市は毎朝通りの照明を(従来より)30分遅く点灯し、30分早く消灯している。そのため、暗い中に人が立っているわけではない。

つまり街路灯の点灯時間を1時間短くはしたものの、常時消灯して真っ暗なわけではない、ということ。

ポイントは2つ。

  • 実は引用した文の前の段落で、「ベルリンではランドマークの夜間ライトアップが中止され、戦勝記念塔ベルリン大聖堂が真っ暗になったことが述べられている。それに対してヴァイマール市では短時間ながら街路灯を点灯させている…という話なので、「ライトアップを完全にやめたベルリンとは状況が異なる」といいたいのだと解釈するのが文脈上自然
  • 「暗い中に人は立っていない」なら、否定の不定代名詞 niemand 「だれも~ない」を使って "Im Dunkeln steht niemand." のようにするほうが自然

余談1:Google 翻訳と DeepL を見比べる

前者の例について、Google 翻訳と DeepL で翻訳結果が若干違った。

Google 翻訳の場合:

人権状況、劣悪な労働条件、女性と LGBTQIA+ コミュニティの地位、建設工事中の死亡事故、契約締結時の汚職疑惑を批判することはできませんが、それでもワールドカップに注意を向けることはできません。

DeepL の場合:

人権状況、劣悪な労働条件、女性やLGBTQIA+コミュニティの状況、建設中の死亡事故、落札プロセスの汚職疑惑などを批判し、かつワールドカップに注目することで報いることはできないのです。

Google 翻訳は und doch の解釈を誤っているように見える。ただ können が kritisieren と belohnen の両方にかかる点は正しく訳せている。

いっぽう DeepL は können と und doch の両方を正しく訳している。よって DeepL の勝ち。

なお後者の例については、どちらもおおむね正しく訳してくれた。自分より賢い。

余談2:Korruptionsvorwürfe とは

上記機械翻訳では両者とも Korruptionsvorwürfe を「汚職疑惑」と訳しているが、これは直訳すれば「汚職 Korruption への非難 Vorwürfe」であり、「疑惑」なら Korruptionsverdacht とかじゃないんだろうか。まあ「非難」するからには「疑惑」も当然あるだろうから、ドイツ語ではそうともいうんだろうか。

探してみると、同じ事件の報道で "Korruptionsvorwürfe" "Korruptionsverdacht" それぞれ使われている例があった。ニュアンスや意味内容にどの程度違いがあるのか(ないのか)はよくわからない。また Korruptionsvorwürfe kritisieren 「汚職への非難を批判する」というのがコロケーションとして妥当なのかどうかも、ネイティブならざる自分にはわからない。

綿谷エリナ『おしゃべりなドイツ語 対話力を上げるテクニック&トピック』

sayusha.com

綿谷エリナ『おしゃべりなドイツ語 対話力を上げるテクニック&トピック』を読みました。ちなみに下記イベントでいただいた著者サイン入り。

綿谷エリナ×伸井太一/柳原伸洋「中から見たドイツ、外から見たドイツ」 @本屋 B&B - blog.heartyfluid

「はじめに」より引用:

日本における語学学習は、語彙力、文法、読解力、リスニング力などハードな部分が中心。(中略)ドイツ語でのコミュニケーションにおいては、「あなたの話に興味がある」「あなたと対話をしたい」と伝えることも同じくらい大切です。それらを伝えるときにはソフトな部分、例えば、コミュニケーションを滑らかにするニュアンスや、ちょっとした一言で聞き上手になれる相槌、ドイツ語という言語が持つキャラクターを感覚的に理解することがあなたを助けてくれます。(中略)この本では、テクニック(ドイツ語での気持ちの表現術)とトピック(もっとドイツを知るためのエッセイ)の二部構成で、この「ソフトな部分」を使いこなすためのサポートをします。

装丁もかわいらしいし日本語も多いので、初心者向けのやさしい本なんだろう、と無意識に思い込んで読み始めたのですが、この「はじめに」で掲げられているこの本の目標の高さをしだいに知ることになります。

本の冒頭1/3が「テクニック」、残り2/3が「トピック」の構成。「テクニック」は次の4テーマ。

  • 相槌の表現
  • 心態詞
  • 分離動詞・非分離動詞

相槌は覚えゲー。格や分離動詞はドイツ語文法のひとつのハードルではある一方、理屈さえ押さえればメカニカルで楽しい。そんな中で心態詞はやや異質というか、ほかのテーマよりはやや高度な印象を個人的には持っていました。相槌のように常套句として暗記するには用法のバリエーションが広く、かといって文法ほど明確に理屈や構造があるわけでもないので、勉強するにもややとっつきにくい。ドイツ語を和訳するとき、心態詞って辞書を引いてもどう訳出すればいいんだかわからないことがあるんですがわたしだけ?

時制だの接続法だのといった頻出の文法事項を脇においてそんなテーマを果敢に取り上げるあたりが、ふつうのドイツ語の教科書と違うというか、企みがあっていいなと思いました。そしてこれらのテーマが選ばれた理由も、ひととおり読み終えてこの本のねらいが何だったか改めて考えると、必然性があって納得します。

そして「トピック」は次の7テーマ。

  • 芸術文化
  • スーパーマーケット
  • 動物と自然環境
  • 余暇
  • 教育
  • 民主主義
  • 多文化共生

最後の「多文化共生」がある意味この本のクライマックスで、コミュニケーションがなぜ・どのように大切なのかがドイツで生まれ育った著者の体験を交えて語られます。

小さい頃から呪文のように言われてきた「日本とドイツを繋ぐ架け橋」となるべく、品行方正な「民間外交官」として言語も文化もすべてパーフェクトでなければならない、という自ら抱え込んだプレッシャー。一方で、どちらにも属し切れないけど、どちらでもある、揺らぐ自分という存在。

著者の内面やオピニオンがこの章では掘り下げられていて、力の入り方の違いに驚きます。そしてそれらの体験が冒頭で掲げられていた目標へつながっていることに気がついて、ああこの本のやろうとしていることってこういうことだったのか、と納得するのでした。

そしてこの「多文化共生」の話をするには前提として「民主主義」の話をしておく必要があって、そして「民主主義」にはその手前の「余暇」や「教育」が基礎として必要なようにも見えます。そう思うと、一読すると「多文化共生」の話で急に熱くなるように見えて、実はそこへ至る布石はもっと手前から打たれていたのかもしれません。このあたりにも企みがあるような気がして、いろいろと考えさせられます。

もちろん、著者のオピニオンだけでなく「ドイツのファクト」としても一連の7テーマは興味深く読めます。たとえばドイツの学校制度については以前自分で調べようとしたもののよくわからなかったところで、たいへん助かりました。

全体として、ドイツやドイツ語に関心のある人なら、ドイツ語初心者でも経験者でもその練度や関心に応じた気づきが得られる本なのではないかと思いました。また、ドイツ語以外の語学をする人にも読んでみてもらいたいです。