GitHub Repositoryをtxtにまとめて、NotebookLMに渡したら幸せになれた。

とある初見のGitHub Repoを見て調べたいことがあった。

以下のpythonスクリプトをつかってGitHub Repoの内容をtxtに書き出して、NotebookLMに渡したら調査が一瞬で終わってしまった。今までは割と時間がかかっていたのに。すごい時代だ。。

もう少しサイズの大きいOSSでもいけるのか、どこかで試してみたい。

github.com

トラブルシュート時によくある「ハノイの塔」構造

トラブルシュートをしていると、しばしば、「課題に取り組んでいたら、先に解決しないといけない別の課題が見つかった。」という場面に遭遇する。絵にすると、↑のような感じ。自分はこれを「ハノイの塔」状態と呼んでいる。解決したい課題は目に見えているが、1手でそこにたどり着くことができない 状態みたいなイメージ。

このような状態に遭遇したらどうすればいいか?月並みだけど、あきらめて一個ずつ、「手前」の課題から一個ずつ丁寧にやっつけていくしかない。イライラしがちだけど、しょうがないとあきらめてone by oneで対処するべし。1つ1つ丁寧に、実験しながらその仕組みを理解することに努めることが結果的な最短ルールに思う。「急がば回れ」というか。

わかっていても、イライラしがちな自分がいるので、自戒をこめて。

Windows 11で『設定』と『コントロールパネル』が併存していてややこしい問題

Windows11→Apple機器へのテザリング接続がなかなか安定せず、 あれこれ調べる中で掲題の件が気になった。

自分の知っている限り、Windows 11の設定変更をする方法は4つある。

GUI

  • (1) 設定 から設定変更する方法
  • (2) コントロールパネル から設定変更する方法

CLI

  • (3) Command Prompt(CMD)から設定変更する方法
  • (4) Powershellから設定変更する方法

上記のうち、 (1) と (2) が併存していることがconfusingだ。「なぜ、GUIで設定変更するアプリが2つあるのだ?1つではだめなのか?」と疑問に思った。ので調べてみた。

以下を読む感じ、メーカーとユーザーの思惑が上手く一致しておらず、そのために2種の設定変更方法が併存しつつ、configure可能なスコープがそれぞれちょっとずつ異なるというややこしい状態になっている様子。

ユーザーとしては、このあたりの事情はコントロールできないので現状を受け入れつつ、「この設定を変えたいときは、こっちを使うといい」みたいな感じでケースバイケースで覚えていくしかなさそうだ。

しかし、ややこしい。

Geminiのおかげで敷居の高い本が読めるようになった。

Geminiのおかげで、それまで自分にとって「この本、言葉の使い方が難解で意味がとりにくい。ちょっと読むのはやめておこう」と「そっ閉じ」していた敷居の高い本が読めるようになった。具体的な使い方はシンプルで、本を読んでいてわからない言葉があったら該当部分を写メして、Geminiに画像として渡すだけだ。

具体例

本を読んでいた困った場面

以下の本を読んでいて「審理権」という言葉の意味がとれずに、そこで思考が止まってしまった。

ところであらゆる学問は多かれ少なかれ人間性と関係していること、たとえ学問のうちには人間性からどんなに遠く離れ去っているようにみえるものがあるにしても、それでもやはりいずれかの道筋をたどって、人間性に立ちもどること、これは明らかである。数学、自然学、自然宗教にしたところで、多少とも「人間」についての学問に依存しているのである。というのは、これは人間の審理権のもとにあり、人間の権限、権能によって裁定されるからである。
P8 ヒューム『人性論』中央公論新社、2010年

やったこと

該当箇所を写メにとり、Gemini 2.0 Flashに聞いた。(※誤字脱字はご容赦ください)

以下の回答が得られ、背景思想も含め、どういう問題意識とニュアンスでその言葉を使っているのか分かった気分になった。*1 それにより、「もうちょっと読み進めよう」という やる気が得られた。 *2

ヒュームは、人間の知性は経験によって制約されており、経験を超えた事柄、例えば神の性質や宇宙の起源について確実な知識を持つことはできないと主張しました。しかし、彼は、人間が経験に基づいて推論し、知識を構築することができると信じていました。

彼にとって、「審理権」とは、人間の理性が持つ知識の範囲と限界を理解し、その範囲内で確実に知識を構築しようとする能力を指します。それは、懐疑的な視点を持ちながらも、経験に基づいて真理を探求する能力と言えるでしょう。

ヒュームは、人間が持つ審理権を最大限に活用することで、科学、道徳、政治などの分野で進歩を遂げることができると考えました。しかし、彼はまた、人間の知性が持つ限界を認識し、過度な自信や独断的な主張を避けることの重要性を強調しました。

所感

本件以外にも、Geminiのおかげで長年の数式アレルギーが克服されつつあり、感謝の気持ちが大きい。

生成AIの進歩により、AGIとか仕事がなくなっちゃうかもみたいな話が増えつつあるが、少なくともわからないこと、知りたいことがたくさんある人にとってはすごくいい時代になったと感じている。この調子でどんどん、自分にとって快適な学習環境を構築していきたい。

*1:生成AI出るある以上、正確な回答が得られていないリスクがあるので、これを「正解」と認識するのはリスクがあると考える。

*2:これが一番のoutcome

iOS環境のブラウザをSafariからGoogle Chromeに乗り換えた

iOS環境のブラウザをSafariからGoogle Chromeに乗り換えた。乗り換えのモチベーションは大きく3つある。

複数デバイス間の閲覧履歴の同期

SafariよりもGoogle Chromeの方が、複数のデバイスでWebページの閲覧をした時の閲覧履歴の同期のユーザー体験が良い。具体的にだが、履歴が同期されるスピードがChromeはSafariよりもずっと早い。iPhone、iPad pro、iPad miniの3台を運用しておりこの機能のニーズが高いため、このあたりの使い勝手が良くなるのはとても嬉しい。

Webページを閲覧した時刻が確認できる

Safariの閲覧履歴機能では、各ページを閲覧した時刻を確認する機能がないが、Google Chromeだと確認できる。

英→日の翻訳機能の品質

SafariよりもGoogle Chromeの方が、英語のページを翻訳した時のユーザー体験が良い。具体的にだが、図が含まれたWeb記事を翻訳する時の体験がChromeは優れている。こちらの記事を例に挙げると、Safariで翻訳をすると以下の図が

図の中の表記も日本語化されてしまう。これは見づらい。

が、Chromeだと本文のみ和訳、図の中の表記は日本語化しない形で翻訳してくれる。

終わりに

そんなこんなで、しばらくChrome主力で行ってみる。この辺りの使い勝手は時間と共にどんどん変わっていくので、定期的に見返すのがいいと思う。

ripgrepの実行結果のファイルのパスの色が見にくい

問題

ripgrep -l の実行結果の色が見にくい

解決方法

  • HOME 配下に .ripgreprc を作成し、 --colors=path:fg:cyan を書き込む
$ /usr/bin/cat ~/.ripgreprc
--colors=path:fg:cyan
  • .bashrc に .ripgreprc を読み込む設定を追加
$ head -2 ~/.bashrc
# rip grepのファイルのPATH
export RIPGREP_CONFIG_PATH=$HOME/.ripgreprc

参考にしたサイト

zenn.dev

不確実性があることを前提に作業計画を考える

複数のタスクの作業計画を検討する際は、想定工数だけでなく技術的不確実性の大きさに着目してプランニングを考えると、良さそうに思った。ここでいう「技術的不確実性」とは、取り組んでみないとそこにどんな課題があるのかわからない未知の領域の広さ、みたいなイメージだ。この不確実性について、下図のような見通しを持ったうえで、不確実性の大きいものから順番につぶしていく進め方がよいと思った。このやり方でやると、時間が進むにつれて不確実性が効率的に減っていく。不確実性コーンにおける不確実性減少のスピードが速い。

WSL2 : ディレクトリ名の表示色が見にくい場合のカスタマイズ

主要な色コード

30: é»’
31: 赤
32: ç·‘
33: 黄
34: 青
35: マゼンタ
36: シアン
37: 白

メモ : 方法論について説明する文章を書きたい時に、書き出しで何を書くといいか?

thoughtworksのOKRの解説記事を読んでいて、一定の文章の型があるなと感じたのでメモ。

PHP : 連想配列のvalueにオブジェクトを格納するパターン

<?php

class Person {
    public $name;
    public $age;
    
    public function __construct($name, $age){
        $this->name = $name;
        $this->age = $age;
    }
    
    public function introduce(){
        echo "Hi my name is " . $this->name . "\n";
    }
}

$people = [
              "person1" => new Person("Bob", 22),
              "person2" => new Person("mary", 30)
];

// Hi my name is Bob
// Hi my name is mary
foreach ($people as $person) {
    $person->introduce();
}

PHP : 2次元配列の値を、別の2次元配列に詰め替える

イテレーターの中で、空インデックス(添え字の指定なし)の方式で、新しい配列への代入処理を書けばOK。

<?php

$fruits = [
             ['name'=>'banana'], 
             ['name'=>'apple'], 
             ['name'=>'mango']
          ];

$new_frtuis = [];

foreach($fruits as $key => $value ){
    $new_frtuis[] = [$key, $value];
}

print_r($new_frtuis);

実行結果

Array
(
    [0] => Array
        (
            [0] => 0
            [1] => Array
                (
                    [name] => banana
                )

        )

    [1] => Array
        (
            [0] => 1
            [1] => Array
                (
                    [name] => apple
                )

        )

    [2] => Array
        (
            [0] => 2
            [1] => Array
                (
                    [name] => mango
                )

        )

「わかったつもり」にならないことが大事

ITの勉強あるあるなんだけど、新しい概念に触れたときに「ぼんやりと意味がわかる」ぐらいの理解で学ぶのを止めてしまうと、解像度が上がらない・理解が深まらず、それであとで手痛いしっぺ返しを喰らうことが多い。だから、「多分まだ理解できていないのでもう少し掘り下げて、細かく一つ一つ考えてみよう」となることが大事に思う。

一つ一つの細かいことが正確に理解できていると、2つ目のTweetで言われているようにその後の応用も聞きやすいように思い。だからとにかく、出来るだけ細かい粒度で精度高く理解することが大事に思う。小さなちょっとしたことの理解に手を抜かないというか。

同様に、何かについて「わからない」と感じる時も、

  • 漠然とわからない、混乱していて何がわからないか、わからない

状態を

  • 既知のことと未知のことが整理されていて、どのスコープで何について未知なのかその輪郭が明瞭になっている

状態に変えていけるのかがすごく大事だと思う。

参考

※ルール10 : スキルを分離して個別に練習する

Windows11の再起動の原因を調べる

デスクトップPCが意図せず再起動することが時々あり、原因を調査した際のメモ。

イベントビューアー

  • Windowsのイベントログは イベントビューアー にて閲覧できる。イベントビューアーを起動する方法はいくつかあるが、例えば

    • (1) 画面、左下隅の Windows マークをクリック
    • (2)ポップアップするウィンドウ最上部の アプリ、設定、ドキュメントの検索 と書かれた検索フォームに イベント と入力
    • (3) イベントビューアーのアイコンが表示されるので左クリック

することで起動できる

「システム」イベント

  • イベントビューアー で確認できるイベントは5つのカテゴリに分かれる。再起動の原因を調べたいときは、 Windowsログ -> システム を選択すればOK

イベントID

  • イベントビューアー 上で出力される、イベントログ は イベントID という識別子によって分類される。
  • 現在のログをフィルタ で閲覧対象とするログを絞ることができる。再起動の原因を調べたいときは以下の2つを見るといい
    • 6006 システムのシャットダウン
    • 1074 シャットダウンの開始

理由コード

  • ID 1074 シャットダウンの開始 レコード内の 理由コード を確認することで、再起動の原因を調べることができる

CakePHP - Controller

About

CakePHP 2のControllerについてのメモ

AppController

CakePHPにおけるControllerは、AppControllerを継承して作る。

CakeRequest

Controllerに流入するHTTP Requestについては、CakePHP 2.0からはCakeRequestおよびCakeResponseクラスで管理される。

POSTされたデータへのアクセス

インスタンスプロパティ CakeRequest::$data または インスタンスメソッド CakeRequest::data() を使うことで、POSTされたデータへアクセスできる。

※以下、CakePHP2の公式ドキュメント より抜粋

インスタンスプロパティを使用の例 $this->request->data['Post']['title'];

インスタンスメソッドを使用の例 $foo = $this->request->data('Value.that.does.not.exist');

PHP : 2次元配列のイテレーション

sample data

添字あり配列(1次元目)×添字なし・連想配列(2次元目)

<?php

$persons = [
               [
                   'id'=>1, 
                   'name'=>'bob'
               ],
               [
                   'id'=>2, 
                   'name'=>'alice'
               ],
           ];

イテレーション方法

一般的な添字あり配列のイテレーションと同じ方法でイテレートできる。

sample dataの場合、以下となり、$key には 0 および 1 が、$value には連想配列が格納される。 ※配列名を persons に変更している

<?php

foreach ($persons as $key => $value){
    print_r($key) . "\n";
    print_r($value) . "\n";
}

注意点として、 $value の部分には任意の文字を入れることができるので、 $array[key]などセレクタ風の記法の変数を入れることもできるが、これにより $value に代入される値が変わることはない。従って、以下の2パターンのイテレーション文の実行結果は同じになる。

パターン1

<?php

foreach ($persons as $index => $person){
    print_r($person) . "\n";
}

パターン2

<?php

foreach ($persons as $index => $person['Person']){
    print_r($person['Person']) . "\n";
}
/* https://sunrise033.com/entry/hatena-blog-how-to-hierarchicalize-categories */