<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>tk3++</title><link>/</link><description>Recent blog posts on tk3++</description><generator>Hugo (https://gohugo.io)</generator><language>ja-JP</language><managingEditor/><webMaster/><lastBuildDate>Wed, 03 Jun 2026 21:21:21 +0900</lastBuildDate><atom:link href="/index.xml" rel="self" type="application/rss+xml"/><item><title>2026年5月に読んだ本</title><link>/2026/06/03/ad50c721ac087d50df5869ac6ced488e04692db5/</link><pubDate>Wed, 03 Jun 2026 21:21:21 +0900</pubDate><author/><description>
唐突ですが、自分は本を読んだ後に振り返ってその本のことを考えようとハイライト機能を使っています。しかしハイライトとしての意味をなしていないことに今回気づきました。まとめようとした時、あちこちハイライトにしすぎてまとめきれない。そして何か大事なことが抜け落ちているような気がしてならない。ただハイライトをして、見返すだけでは不十分のようです。
それでは2026年5月に読んだ本です。
# 思考の整理学 https://www.chikumashobo.co.jp/product/9784480020475/
人間には、グライダー能力と飛行機能力がある。受動的に知識を得るのが前者、自分でものごとを発明、発見するのが後者である。
が印象的でした。冒頭の章にあるから、途中挫けた人でもこのフレーズを知っている人はいると思う。
考えていること（問題など）は寝かせることが必要だという。ただぼんやりしていたのではいけないし、それについて考え過ぎてもいけない(〝見つめるナベは煮えない〟と表現している)。それらのことに気をつけ、寝かせることで思考が生み出されるとしている。
「コンピューター」という章もとても印象的でした。コンピューター人間を脱却し、創造的な思考を持つことが重要であるとしている。今やAIの登場により、この書籍が書かれた時よりもコンピューターの比重はさらに多くなった。エンジニアという仕事をしている手前、面白い時期なのかもしれないです。良い面でも悪い面でも。
あと本当に感想レベルなのだが、文章全体が冗長であるように感じた。各章だけでは少しだけしか掴めず、後の章を読んだりすることで前の章の理解が進むようになっている感じ。この本に対して、自分の文書を読み取る力が不足しているかも。あまり深い理解が得られない感じ。
# アート・オブ・クリーンコード https://www.kyoritsu-pub.co.jp/book/b10136509.html
個人的に大事だと思ったのが、「第2章 80/20の原則」の「フォーカスとパレート分布」。どこに集中すべきかを誤ると効果の薄いものになってしまう。効果の高いフィードバックを得るにはどうしたらいいかを改めて考えさせられました。
何となく知ってた事柄について深掘りした内容になっていてとても為になった。
この本についてはKindle版が欲しいと思った。やはりハイライト機能を使いたい。
# 技術記事を書く技術 ITエンジニアの価値を高めるアウトプットのすべて https://www.shoeisha.co.jp/book/detail/9784798177045
技術の読まれやすさや文章の読みやすさなどてんこ盛りな内容だった。一つ一つ具体例があり、理解しやすい内容となっている。タイトルや見出しのつけ方、正確な文章の書き方まで。いろいろある。最初から読んでももちろんいいのだが、自分が気になる章だけを読むのも良いと思う。</description><guid isPermaLink="true">/2026/06/03/ad50c721ac087d50df5869ac6ced488e04692db5/</guid></item><item><title>mise を使って開発環境を構築し直しました</title><link>/2026/05/13/6767aaf7b87281c2d849c384f5c15658dabe8004/</link><pubDate>Wed, 13 May 2026 20:32:08 +0900</pubDate><author/><description>
# はじめに お手製でインストールしたツールや既にインストールしていたツールを一元管理するためにmiseを使って環境を構築しなおしました。miseはディレクトリ階層ごとに環境を作ることができますが、今回は一般ユーザーの共通環境として利用できるよう、ホームディレクトリ（~）直下を対象に構築しています。
# まとめ 今回使用したコマンドの一覧です。
コマンド 説明 mise registry リポジトリにあるツールを一覧表示する。 つまりインストールできるツールの一覧 mise search キーワード インストールできるツールをキーワード検索 mise ls-remote ツール名 指定したツールでインストールできるバージョンを表示 mise install ツール名@バージョン ツールをインストール。バージョンは任意 mise use ツール名@バージョン ツールを有効にする。バージョンは任意 mise unuse ツール名 インストールしたツールを削除する mise ls 今インストールされているツールを表示する mise current 今有効になっているツールを表示する # miseのインストール Getting Started を参考にmiseをインストールする。
Getting Started https://mise.jdx.dev/getting-started.html
次のコマンドで、miseがインストールされたかを確認する。次のような出力が表示されたら成功。
$ mise version _ __ ____ ___ (_)_______ ___ ____ ____ / /___ _________ / __ `__ \/ / ___/ _ \______/ _ \/ __ \______/ __ \/ / __ `/ ___/ _ \ / / / / / / (__ ) __/_____/ __/ / / /_____/ /_/ / / /_/ / /__/ __/ /_/ /_/ /_/_/____/\___/ \___/_/ /_/ / .___/_/\__,_/\___/\___/ /_/ by @jdx 2026.5.6 linux-x64 (2026-05-11) # ツールをインストールする 今回はHOME直下の環境すべてで使いたいので、HOME直下でインストール作業を行った。</description><guid isPermaLink="true">/2026/05/13/6767aaf7b87281c2d849c384f5c15658dabe8004/</guid></item><item><title>技術書同人誌博覧会 13</title><link>/2026/05/10/72973e060a6c54dcd30daab4491ecfc7ef70bf11/</link><pubDate>Sun, 10 May 2026 17:09:43 +0900</pubDate><author/><description>
今回買ったもの。最近アルゴリズムに興味があり、買ってきた。
0から分かる！ソート・選択アルゴリズムと資源配分問題 白猫と学ぶ アルゴリズムとデータ構造</description><guid isPermaLink="true">/2026/05/10/72973e060a6c54dcd30daab4491ecfc7ef70bf11/</guid></item><item><title>英語の学習を始めました</title><link>/2026/05/09/6d222060f48f7cfb956eec1fa6103b5d9adf442c/</link><pubDate>Sat, 09 May 2026 18:52:16 +0900</pubDate><author/><description>
英語の学習を始めました。
まずはリスニングと思い、今はTEDを聴いています。TEDを聴き始める前にポッドキャストに手を出したけれど、うまく馴染めず続きませんでした。ただ聴くだけになって、話の内容がまったく分からないで終わってしまう。また何を言っているか分からないことが多かった（英語初心者なので、それはそう）。
そこで、短い尺のコンテンツがあり、文字起こしがある、できたらスマホとPCで聴ける。この3つができるものを探していたところ、TEDが良さそうという結論になりました。TEDにはiOSアプリがあり、スマホで視聴することができます。もちろんPCでも。また文字起こしがあり、視聴しながら英文を読むことができます。日本語でも読むことができます。そして、動画の尺はいろいろ。
まずは英文が聞き取れるようになりたいので、聞きやすさを優先し、動画を探しました。そして3つほど良さそうなものを3つ見つけました。 一つの再生時間は3分から6分。3つの合わせた再生時間は約12分。初心者の自分にはちょうどいい塩梅。
続けることが大事なので、続けていきたいと思います。継続は力なり。
# 1. Derek Sivers: How to start a movement | TED Talk 再生時間は2:52。「ムーブメントはどのように起きるのか？」という話。
# 2. Richard St. John: 8 secrets of success | TED Talk 再生時間は3:16。「成功するために必要な8つの要素」についての話。
# 3. Angela Lee Duckworth: Grit: The power of passion and perseverance | TED Talk 再生時間は5:59。「8 secrets of success」と近い内容だけれど、面白そうだったので。</description><guid isPermaLink="true">/2026/05/09/6d222060f48f7cfb956eec1fa6103b5d9adf442c/</guid></item><item><title>MyList実装 Head/Tail/Remove F#</title><link>/2026/05/06/617db800f342da714b2108b70d3ba27377f93130/</link><pubDate>Wed, 06 May 2026 21:22:38 +0900</pubDate><author/><description>
dojo/fsharp/MyList/Program.fs at main · tk3/dojo
今日はHead/Tail/Removeを実装した。これまでの経験があればこそ比較的楽に書けた。 ただ、書けはしたものの、tryItemがちょっと怪しくて、removeAtは怪しい。体感では理解していても、きちんとした理解になっていない気がする。慣れるしかないのか。分かるようで分かっていない感じ。あーもどかしい。
let tryHead list = match list with | Empty -&amp;amp;gt; None | Cons(x, _) -&amp;amp;gt; Some x let tryTail list = match list with | Empty -&amp;amp;gt; None | Cons(_, tail) -&amp;amp;gt; Some tail let rec tryItem idx list = match list with | Empty -&amp;amp;gt; None | Cons(x, tail) -&amp;amp;gt; if idx = 0 then Some(x) else tryItem (idx - 1) tail let rec removeAt idx list = match list with | Empty -&amp;amp;gt; Empty | Cons(x, tail) -&amp;amp;gt; if idx = 0 then tail else if idx &amp;amp;lt; 0 then Cons(x, tail) else Cons(x, removeAt (idx - 1) tail)</description><guid isPermaLink="true">/2026/05/06/617db800f342da714b2108b70d3ba27377f93130/</guid></item><item><title>About</title><link>/about/</link><pubDate>Wed, 06 May 2026 04:32:30 +0900</pubDate><author/><description>
blog GitHub X/Twitter note Zenn Qiita</description><guid isPermaLink="true">/about/</guid></item><item><title>Cloudflareに決まりました</title><link>/2026/05/05/b8318b8596cc167c4d92ff215e3f306427708cd6/</link><pubDate>Tue, 05 May 2026 19:42:48 +0900</pubDate><author/><description>
どこにホスティングしようか考えて、Cloudflareにしました。そんなに考えたわけではないけれど、使ったことがなかったので、ただ使ってみたかった。というだけの話。
あとドメインも取りました。tk3inc.comです。このブログのタイトルにもなっているtk3++（インクリメント）というわけです。
Cloudflare Worker&amp;amp;amp;Pageの設定に関してはHugoオフィシャルのものを参考にしました。
Host on Cloudflare
前は設定ファイルを書かずにCloudflareの画面でポチポチとインポートだけで良かった気がするのだが、今はこの方式しかなさそうでした。
これからnoteに書いた記事をこちらのインポートしようと思っています。特にツールもないので手動になりますが。数が少ないので何とかなるでしょう。</description><guid isPermaLink="true">/2026/05/05/b8318b8596cc167c4d92ff215e3f306427708cd6/</guid></item><item><title>Hello Hugo</title><link>/2026/05/04/3212a7405364162345363fe9ef0dc8c7107d0b9a/</link><pubDate>Mon, 04 May 2026 22:53:24 +0900</pubDate><author/><description>
Jekyllを使ってgithub.ioで運用しようと考えてましたが、github.ioのJekyllではtags/categoriesがうまく使えず、断念しました。 そこで、Hugoを使うことにしました。デプロイ先はこれから決める予定です。記事だけはこちらに書いていく予定です。 とは言ってもリポジトリはプライベートだし、デプロイもしないのでどこにも公開されないわけですが。</description><guid isPermaLink="true">/2026/05/04/3212a7405364162345363fe9ef0dc8c7107d0b9a/</guid></item><item><title>MyList実装 mapとfilterそしてfold F#</title><link>/2026/05/01/b154f6983eafa70ff3d3c0974fdc11d807070f37/</link><pubDate>Fri, 01 May 2026 22:33:29 +0900</pubDate><author/><description>
dojo/fsharp/MyList/Program.fs at main · tk3/dojo
今日はmapとfilterそしてfoldを実装した。 foldができたということで、これまで実装したlength、sum、reverseをfoldを使い実装し直した。foldを使うとこれまでのコードが短く書けて、汎用性が高い関数であることが分かった。
例えば、foldを使うことで、次のコードが
let sum list = let rec loop acc currentList = match currentList with | Empty -&amp;amp;gt; acc | Cons(x, tail) -&amp;amp;gt; loop (acc + x) tail loop 0 list 次のように書ける。
fold (fun acc x -&amp;amp;gt; acc + x) 0 list5 ただ、実装していて腑に落ちなかったことが一つ。F#の文法についてだ。
コンパイルNGのコード
110 let foldFilter f list = 111 let folded = fold (fun acc x -&amp;amp;gt; 112 if f x then 113 Cons(x, acc) 114 else acc 115 ) Empty list 116 117 reverse folded エラーメッセージはこちら
Program.fs(115,7): error FS0010: Unexpected identifier in binding. Expected incomplete structured construct at or before this point or other token. Program.fs(111,5): error FS3118: Incomplete value or function definition. If this is in an expression, the body of the expression must be indented to the same column as the &amp;amp;#39;let&amp;amp;#39; keyword. コンパイルOKのコード</description><guid isPermaLink="true">/2026/05/01/b154f6983eafa70ff3d3c0974fdc11d807070f37/</guid></item><item><title>リストの実装（MyList） F#</title><link>/2026/04/30/c59280bc28141d7f12340a09a2030c2528063c5f/</link><pubDate>Thu, 30 Apr 2026 22:33:20 +0900</pubDate><author/><description>
dojo/fsharp/MyList/Program.fs at main · tk3/dojo
F#でデータ構造を理解するためにリストを実装した。面白かった。
おおもとのデータ定義。 ConsはConstructの略語。お決まりの宣言みたい。Emptyはその名の通り、空を表すもの。&amp;amp;lsquo;Tは値。今回のコードではintを使っている。
type MyList&amp;amp;lt;&amp;amp;#39;T&amp;amp;gt; = | Empty | Cons of &amp;amp;#39;T * MyList&amp;amp;lt;&amp;amp;#39;T&amp;amp;gt; 実際にリストを表現すると、以下のようになる。マトリョーシカのような感じで、前の値を包み込むようになっている。
Cons (4, Cons (3, Cons (2, Cons (1, Empty)))) 今回は、length・sum・Some・contains・reverseを書いてみた。リスト実装はもう少し深掘りする予定。
ちなみにlengthはこんな感じ。forループではなく再帰で書いている。 accとは「Accumulator（アキュムレータ）」の略で、累積した値を保持している。この場合は長さを保持している。 matchで条件分岐し、Emptyになったら終了。再帰は何となくこんな感じで書くのかという理解。まだ慣れていないけれど。
let length list = let rec loop acc currentList = match currentList with | Empty -&amp;amp;gt; acc | Cons(_, tail) -&amp;amp;gt; loop (acc + 1) tail loop 0 list</description><guid isPermaLink="true">/2026/04/30/c59280bc28141d7f12340a09a2030c2528063c5f/</guid></item><item><title>アルゴリズムの本を買った</title><link>/2026/04/29/115239962735505700a6b5f137178e760f8920f8/</link><pubDate>Wed, 29 Apr 2026 18:33:48 +0900</pubDate><author/><description>
アルゴリズムやっていくぞの気持ち。 初歩的なアルゴリズムが載ってあり、視覚化して分かりやすそうな気がして買いました。まずはこちらを見ながら、F#で実装しようと思っています。
アルゴリズム図鑑 増補改訂版 絵で見てわかる33のアルゴリズム（石田 保輝 宮崎 修一）｜翔泳社の本
あとこちらも。
問題解決力を鍛える！アルゴリズムとデータ構造 | 書籍情報 | 株式会社 講談社サイエンティフィク
Kindle版がセールしていたので、追加で購入しました。サンプルコードはC++。CかJavaが良かったけれど、まぁいいでしょう。私はなぜかC++には苦手意識があります。</description><guid isPermaLink="true">/2026/04/29/115239962735505700a6b5f137178e760f8920f8/</guid></item><item><title>選択ソート F#</title><link>/2026/04/28/31e50dcf678eb43f8d3ba7591a1fbab20d068c60/</link><pubDate>Tue, 28 Apr 2026 20:31:22 +0900</pubDate><author/><description>
dojo/fsharp/MyList/Program.fs at main · tk3/dojo
今日は選択ソート。昨日よりはすんなり書けて満足。もっと短く書けそうだが、今の自分には無理そう。
open System [&amp;amp;lt;EntryPoint&amp;amp;gt;] let main arg = let rnd = Random() let randomArray = [| for i in 1 .. 10 -&amp;amp;gt; rnd.Next(1, 101) |] for i = 0 to randomArray.Length - 1 do let mutable target = i let mutable minVal = randomArray[i] for j = i to randomArray.Length - 1 do if minVal &amp;amp;gt; randomArray[j] then minVal &amp;amp;lt;- randomArray[j] target &amp;amp;lt;- j let tmp = randomArray[i] randomArray[i] &amp;amp;lt;- randomArray[target] randomArray[target] &amp;amp;lt;- tmp printfn &amp;amp;#34;%A&amp;amp;#34; randomArray 0</description><guid isPermaLink="true">/2026/04/28/31e50dcf678eb43f8d3ba7591a1fbab20d068c60/</guid></item><item><title>バブルソート F#</title><link>/2026/04/27/6705e768bc5dbf1e13e9cd51bc61d61442dcbb16/</link><pubDate>Mon, 27 Apr 2026 21:39:09 +0900</pubDate><author/><description>
dojo/fsharp/MyList/Program.fs at main · tk3/dojo
何とか書けました。もっと早く書けそうな気がしたんだけれど、自信をなくしてしまいました。愚直にforを使っています。もっと短く書けそうな気がしますが、また今度。
open System [&amp;amp;lt;EntryPoint&amp;amp;gt;] let main argv = let rnd = Random() let randomArray = [| for i in 1 .. 10 -&amp;amp;gt; rnd.Next(1, 101) |] for i = 0 to randomArray.Length - 2 do for j = 0 to randomArray.Length - 2 - i do if randomArray[j] &amp;amp;gt; randomArray[j + 1] then let tmp = randomArray[j] randomArray[j] &amp;amp;lt;- randomArray[j + 1] randomArray[j + 1] &amp;amp;lt;- tmp printfn &amp;amp;#34;%A&amp;amp;#34; randomArray 0 # 今回分かったこと ランダムな数値の生成方法 Arrayは長さは変更できないが、値を後から書き換えることができる randomArray.[j] &amp;amp;lt;- randomArray.[j + 1] 書き込みをさせたくないならListを使う Array生成と同時に値を設定することが可能で、式を指定することができる let randomArray = [| for i in 1 .. 10 -&amp;amp;gt; rnd.Next(1, 101) |] Arrayの値をアクセスは randomArray[i] なのか randomArray.[i] なのか。一緒には見える</description><guid isPermaLink="true">/2026/04/27/6705e768bc5dbf1e13e9cd51bc61d61442dcbb16/</guid></item><item><title>F#はじめます</title><link>/2026/04/26/36a23fd6ff373260943aa4a799d27e58d2ec04c7/</link><pubDate>Sun, 26 Apr 2026 21:56:02 +0900</pubDate><author/><description>
F#は以前書いてたりはしたけれど、中途半端だったので、またやり始めます。
まずはインストール。
Ubuntu に.NETをインストールする - .NET | Microsoft Learn おきまりのHello Worldをこちらのチュートリアルで。
F# チュートリアル - 5 分でできる Hello World | .NET
出力
$ dotnet run Hello from F# あと、コマンドの使用状況を送信しているようで、オプトアウトしたい場合は次のリンクを参考に環境変数を設定する必要があります。
https://learn.microsoft.com/ja-jp/dotnet/core/tools/telemetry
export DOTNET_CLI_TELEMETRY_OPTOUT=true</description><guid isPermaLink="true">/2026/04/26/36a23fd6ff373260943aa4a799d27e58d2ec04c7/</guid></item><item><title>技術書典 20</title><link>/2026/04/21/0fd4eba86529097d76a65aceeddbd5ee5b108c2a/</link><pubDate>Tue, 21 Apr 2026 21:38:16 +0900</pubDate><author/><description>
買ったもののタイトル一覧です。
# 理工系文学少女、アーキテクトになる。～不確実な時代を漂うエンジニア（仮）のためのサバイバル術～：みゃち 立ち読みで面白かったので買いました。最近キャリアについて考えることがあり、それに刺さりました。
# Vivliostyleでつくるうすい本（改訂版）：わたやん家 また本を書きたくなり、その情報集めのため。手軽に作るにはこれくらいでいいのかなと思いました。
# わたしのペースで歩むエンジニアの道：おとうふ工房 立ち読みで買うことになった本。「はじめてサークル参加したくなったら読む本」を買う予定だったのが、追加でこちらも購入しました。
# はじめてサークル参加したくなったら読む本：おとうふ工房 これも情報収集のため。こちらは買いたいリストに入れておいたので特に試し読みせずに購入。
# 探検！ date コマンド：EverTail Lab こういうソースコードや仕組みを探索する本が好きだから購入。dateコマンドは使うには使うがいつも同じ使い方をしていたので、新しい気づきを得るきっかけになって良かった。epochの話は面白かった。</description><guid isPermaLink="true">/2026/04/21/0fd4eba86529097d76a65aceeddbd5ee5b108c2a/</guid></item></channel></rss>