nekoTheShadow’s diary

IT業界の片隅でひっそり生きるシステムエンジニアです(´・ω・`)

『ゲームで学ぶ探索アルゴリズム実践入門~木探索とメタヒューリスティクス』を読んだ

honto.jp

競技プログラミングにはいろいろな形式があって、なかでも人気のあるもののひとつにヒューリスティックコンテストがあります。与えられた入力データに対してそのスコアの高さを競うもので、1週間から数か月という期間に何度もプログラムを改善・提出し続けることからマラソンマッチと呼ばれることがあります。自分は競技プログラミングのひとつであるアルゴリズムコンテスには取り組んでいたものの、このヒューリスティックコンテストについては未経験。アルゴリズムコンテストは入力データに対して正解を求める速さを競うというもので、その性質上、この2つのコンテストで求められる知識には違いがあります。ヒューリスティックコンテスト未経験の身として、そちらのコンテストで使う知識をどこかで触れてみたいと思っていたところ、この本をたまたま発見。すぐ購入して学習に取り組みました。

本書はいくつかのゲームのAIを作成しながら、さまざまな探索アルゴリズムを紹介していくという内容になっています。実際にコードをエディタに打ち込みながら、探索アルゴリズムの中身を見ていくつくりになっており、自分はこの形式が好みのため、本書の個人的評価は高いです。コード以外の説明部分についても、カラフルな図表を多用しており、かなり理解しやすいと感じました。文章についても簡潔でわかりやすいです。先に述べた通り、自分は探索アルゴリズムnoobでしたが、探索アルゴリズムの有名どころをおさえることができたと思います。

ただ、中身がわかりやすいとはいえ、まったくアルゴリズムの知識がないという人には厳しいかもしれません。最低限、AtCoderやyukicoderの簡単な問題が解ける、あるいはその解説を読んで内容が理解できるというレベルは必要かと思われます。また、本書のサンプルコードはC++を利用していますが、こちらについてはC++スペシャリスト以外でも理解できるレベルです。一部C++固有の内容が紹介されますが、分量的にはごくわずか。最低限C言語に似たプログラミング言語の知識があれば、大丈夫そうです。かくいう自分もC++苦手勢、よくわかんない勢のため、学習には慣れたJavaを利用しました。

github.com

分量自体は結構あるので、読み終わるまでに時間はかかってしまいましたが、個人的には今年の上半期で一番学びが多かった1冊でした。アルゴリズムに興味がある人はぜひ。

『Go言語プログラミングエッセンス』を読んだ。

honto.jp

今年のゴールデンウィークはありがたいことにまとまった休みがとれたので、積読や読み止しになっていた技術書を片づけることにしました。本書もそんなうちの1冊。自分のTwitterのタイムラインで少し話題になっていたこともあり、自分でも読んでみましたが、なかなか良書でした。

自分はとあるSIer勤務のSEで、ふだんはJava6やPL/SQLのコードを読み解いてExcelにスクショをぺたぺた張り付けるロートルな仕事をしています。そういう環境のため、仕事でGo言語を利用した経験はありません。ただGo言語自体は3~4年前から触れていて、競技プログラミングの問題を解いたり、ちょっとしたスクリプトやホビープログラムを作ったりと、サンデーGoプログラマーという感じの関わり方をしています。Go言語とそういう付き合いをしている人がどれだけいるのかわかりませんが、本書は自分のようなバックグラウンドの人間にとても刺さる1冊でした。

本書の内容を端的に述べるとすると「Go言語による開発のテクニックが体系的にまとまっている」というところでしょうか。プログラミング言語を学習するにあたって、基本的な文法を覚えて、簡単なプログラムを作るぐらいまでは比較的簡単。そこから一歩進んでものづくりになると、外部ライブラリや開発環境やイディオムなど、周辺的な知識が必要になります。本書はこういう"お作法"的な部分がまとまっていて、非常に実用的な1冊になっています。

本書のよいところは網羅的な記載にならず、重要な部分だけをピックアップしているところです。言語マニアにとっては不満だと思いますが、がんがんものづくりを進めたい人には役立つはず。またさまざまなテクニックを紹介するにあたっては、ユースケースや利用シーンにとどまらず、歴史的経緯や多言語との比較についても触れている部分が多く、学習効率が高いと感じました。Tipsだけ紹介されても頭には残りずらいですが、その背景や詳細まで触れられていると知識が定着しやすいですし、なにより筆者のGo言語に対する造詣や経験の深さを感じられ、内容への信頼度が増すということもあります。

Go言語開発の勘所がまとまっている本書は無勝手流にGo言語を勉強してきた自分のような人間にはひびくものでした。Go言語に関する本はさまざまありますが、初学者向けもしくは超専門的のどちらかに偏っている印象で、本書のように開発の実務的なところにスポットを置いた本は珍しいと思います。仕事でGo言語のアプリを作っていますというような人にはもってこいではないでしょうか。自分はその予定はありませんが…。

全体的に記述は簡潔で、サンプルコードも多いため、全328ページという分量のわりに内容はぐっとつまっています。一読して知識を吸収したあとは、手元に置いておいて、困ったときに適宜開く--そんな使い方ができる1冊であると思います。なおレベル的には脱初心者・中級者向けになります。Go言語の基本的な文法を学んだあとに読むとよさそう。プログラミング自体初めてとか、プログラミングの経験はあるがGo言語はさっぱりという人向きではありません。そこだけはご注意ください。

自作プロフィールサイトを廃止してGitHubのプロフィールに移行した

SNS全盛の今日このごろ。わたしもご多分に漏れず、いくつかのSNSを運用しています。ここで面倒なのは、自分の利用しているSNS一覧がすぐにわからないこと。単に自分がわからないだけではなく、他者にプロフィールとして示すときにも一覧のようなものがないと困るわけです。そういうわけで自分はここ数年、Hugoを利用して、SNS一覧をまとめた自己紹介用のページを自作していました。ちなみにITエンジニアらしく、GitHubMarkDownをPushすると、GitHub Actionsで自動ビルド & GitHub Pagesで公開されるという仕組みを作ったりしていました。

さてこの自己紹介用の自作ページですが、このたび廃止することにしました。理由は面倒になったから…もうちょっと詳しく説明しますね(´・ω・`) HugoではOSSのデザインテンプレートを利用するのですが、これがしょっちゅう壊れる。ちょっと複雑なことをしようとするだけで、思ったように表示されず、これを修正するのが非常に手間でした。またHugoのビルドにはGitHub Actionsを利用するのですが、これがときどき失敗するのもストレスでした。依存しているライブラリのバージョン更新漏れなど、原因は単純なものが多かったのですが、プロフィールを触るたびにトラブルシュートを迫られるのは正直手間でした。

以上のような理由で、Hugo+GitHub Pagesによる自作プロフィールサイトは廃止。代替はGitHubのプロフィールをカスタムすることにしました。廃止にあたってさまざま調査はしました。調べてみると、SNSをまとめてプロフィール化できるサービスはいろいろあるようですが、どれもしっくりこない。少なくともIT屋さん向けではなさそう。エンジニア用というとLAPRASがあり、自分も以前から活用していました。こちらに一本化することも考えたのですが、もう少し自由度が高く、シンプルなほうが個人的にはうれしいということで、LAPRAS案は却下。

ITエンジニアらしく、シンプルでカスタマイズもしやすい。Gitによる履歴管理もできるし、何かあったらすぐに移行できるポーテビリティもある――ということで、GitHubのプロフィールページを使うことにしました。旧プロフィールページについては各種SNSにリンクを貼っていたので、これを削除しつつ、必要なものは新プロフィールサイトのURLに書き換え。最終的に旧プロフィールサイトは公開を停止したので、これで完全移行ができた…はず。まあ旧プロフィールサイトの李君句が残っていたら、発見次第対処しようと思います。

ということで、わたしのNewプロフィールページをよろしくお願いします。

github.com

令和5年の個人的サプリメント事情

自分は健康とトレーニングのため、食事以外のサプリメント摂取に力を入れています。時期によって変化があるのですが、とりあえず最近のサプリメント事情について、つらつら書き残しておきたいと思います。

基本

まずはマルチビタミン。これはサプリメント界隈ではまずとるべきとされているものですね。自分も例にもれず飲んでいます。マルチビタミンはいろいろなメーカが販売していて、内容もそれぞれですが、自分は昔からNature Madeのスーパーマルチビタミン&ミネラルを飲んでいます。コスパが比較的良いのと、どの薬局でも手に入れやすいというのが選んでいる理由ですが、お値段的なところで、最近はDHCのマルチビタミンが気になっています。いまのストックがなくなったら、切り替えるかも。

基礎サプリ系で個人的に欠かせないのは亜鉛。個人的な事情で申し訳ないですが、亜鉛が不足すると、味覚障害になったり、抵抗力が落ちて風邪をひきやすくなったり、あるいは活力が落ちたりと、如実に生活に悪影響が出ます。亜鉛サプリはマルチビタミンと同じく安価で手に入れやすいという理由で、Nature Madeを愛用してきたのですが、最近はCalifornia Gold Nutritionの Immune 4に切り替えました。これは亜鉛だけでなく、ビタミンC・ビタミンD・セレンも含まれているサプリで、iHerbのセールを狙うと、Nature Made亜鉛より安く買える場合があります。難点はかなり独特のにおいがすることですが、個人的にはなれちゃいました。当分はImmune 4を愛用する予定です。

忘れてはいけないのは腸活ですね。腸の健康は身体全体の調子にもつながるとか。このジャンルでは、自分はエビオス錠を飲んでいます。腸活系サプリはかなりの種類があり、自分もさまざま試してきましたが、いまのところエビオス錠が一番体感が良いです。どこでも売っていていて、値段が安くて続けやすいのもGood。ちなみに1回あたり10錠飲まないといけない、かなり独特のにおいがするので、慣れるまでは大変かもしれません。

ハーブ

怪しい領域に入ってきました(´・ω・`) 最近はハーブ系のサプリに凝っていて、いろいろ試しているところですが、体感があったものを3つ紹介します。

まずシルマリン。ミルクシスルやマリアアザミという名前でも知られているハーブで、肝臓の機能を向上させる効果があります。自分はうまれつき肝臓が弱く、ちょっと疲れてストレスがたまったり、暴飲暴食が続けたりするだけで、肝臓の数値が一気に悪くなります。またトレーニングをする関係で、食生活が高たんぱくになりがちということもあり、肝臓の保護には力を入れる必要があります。シルマリンはアナボリックステロイドを摂取する人が飲むぐらい効果があると聞いて、飲み始めたのですが、確かに効果はてきめん。肝臓の数値で健康診断に引っかかることはなくなりましたし、飲む前に比べて調子が良い気がします。また肝臓はエネルギー消費が大きい臓器なので、ここを活性化すると、ダイエットにも効果があるようです。言われてみると、以前に比べて太りにくくはなったような気がします。肝臓がアルコール分解をするのを助ける力もあるようなので、酒好きはぜひ (自分は超超超下戸なので、ここはよくわかりませんが…)

次はアシュワガンダ。これはアドプトゲンハーブという、怪しいハーブの筆頭みたいなやつです。アドプトゲンハーブとは心身の免疫を向上させて調子を整える効果を持つとされるハーブの総称で、アシュワガンダの口コミをみると、寝つきがよくなった、ストレスを感じにくくなった、男性機能が向上したというものをよく見かけます。自分の場合、飲み始めて、疲れがかなり取れやすくなったような気がしています。あとストレスに対して耐性が強くなったというか、ストレスを感じて平常心に戻るまでの速度が早くなりました。男性機能はわかんないや(´・ω・`)

最後はマカ。これは精力剤として有名なやつですね。そっち方面はよくわかりません…。パートナーもいないんで…。ただ自分は飲み続けるうちに、身体的な活力レベルの上昇はかなり感じています。とくに筋トレ・ウェイトトレーニングへのモチベーションがかなり上がっています。仕事に対してもポジィティブな気分で向かえているようです。男性機能だけでなく、全体的な身体エネルギーを増進させる効果があるといってよいでしょう。ちなみに精力アップを狙う場合、マカだけでなく、亜鉛ビタミンDを一緒に飲むと良いらしいです (怪情報1)。またマカというと男性のイメージが強いのですが、女性が飲んでもよく、美肌効果やホルモンバランスを整える効果があるようです (怪情報2)

なおこのあたりのハーブ系サプリはNowFoodsのものを利用しています。国内通販だと手に入りにくいので、自分はiHerbで購入しています。とくにシルマリンやマカはサプリの中では比較的安価な印象です。アシュワガンダはややお高いですが、これはiHerbのセールを狙っていくと良いかと思います。

ワークアウト

自分はジムでウェイトトレーニングをするのが趣味のため、この関係のサプリメントにもこだわっています。

まずトレーニング前に飲むプレワークアウトですが、自分はシトルリンアルギニンを5グラムずつ、トレーニングの1時間前に摂取しています。粉タイプでそのまま飲むとかなりまずいので、フルーツジュースなどに混ぜて飲むことが多いです。メーカーはJAY&CO. 通販専業メーカーなのかな? 安いので愛用しています。一般的にアルギニン・シトルリンはパンプアップ効果が期待されるアミノ酸で、個人的にはかなり体感があります。パンプアップもさることながら、飲んでからトレーニングすると、かなり汗をかくんですよね。血管が拡張されるのをすごく感じて、トレーニング後の満足度が倍になった感じがします。ちなみにプレワークアウトはオールインワン系の製品がさまざま発売されていますが、自分は利用していません。この手の製品はたいていカフェインが入っています。ただ自分の場合は夜にトレーニングしてそのまま寝ることが多いため、眠れなくなるカフェインの摂取を避ける必要があります。あとはベータアラニンで体がピリピリするのも嫌いなので、アルギニンとシトルリンだけ飲むようにしています。

ワークアウト中はBCAA30gクエン酸10gを水に溶いたものを飲んでいます。トレーニー界隈ではBCAA効果ある派とない派があって、熱い議論が交わされているわけですが、個人的にはかなり体感があるサプリです。ワークアウト中に飲むと、トレーニングに粘りが出て、最後まで集中しやすくなるのと、終わった後の筋肉痛がましになる印象です。過去にはEAAを飲んでいた時期もありましたが、体感がBCAAとさほど変わらず、であれば値段の安いほうがよいということで、BCAAを利用しています。さてクエン酸ですが…これは味付けですね(´・ω・`) GronGのBCAAを飲んでいるのですが、かなり甘めの味付けとなっているので、クエン酸を入れてさっぱりさせています。ただ、クエン酸を入れていると、トレーニング中の疲労が軽減されているような感じがあり、値段も安価(1000円/kg程度)ということで、続けているという感じです。

ポストワークアウトですが、自分はホエイプロテイン(WPC)クレアチンです。これはいうまでもないですね(´・ω・`) トレーニーにはお気に入りのプロテインブランドがあることが多いのですが、自分はBe Legendをよく利用しています。正直安いブランドではないのですが、味にはずれがないというのが最大の選択理由です。プロテインはだいたい1kg単位で販売されていて、1回買うと2週間から1か月程度は飲み続けることになります。要はこれがおいしくないとか、溶けにくいとかだと、飲み続けるのが苦痛となるわけです。また自分はトレーニング後だけでなく、朝ごはんとしてプロテインを飲んでいます。朝からおいしくないプロテインを飲む絶望たるや…。その日一日の気分が最悪になりかねない。その点、Be Legendのプロテインは見えている地雷を避ければ、よほどまずいというものはないので、安心して1kg購入できます。ちなみにクレアチンもBe Legend―といいたいところですが、これはGronGを利用しています。やっぱ安いんですよね (無慈悲)

新年のあいさつ + 低浮上だった理由について

あけおめことよろ (遅)。

さて本ブログですが、最後の更新が2022年6月19日で、実に半年ぶりの更新となります。なぜこんなにも低浮上だったのか。それはひとえに仕事のストレスが原因です。

このブログはもともと読書感想ブログにはじまって、技術メモや雑記なども書きつつも、メインコンテンツは読書メモでした。要は読書しないと、このブログに記事を書くということにならないわけですが、この半年ぐらいは読書量がかなり減っていました。そして読書量の減少の根本原因が仕事のストレスにあるというわけです。自分はストレスに強いほうで、眠れなくなったり、食べられなくなったりするほうではありません。ただ、なぜか文字を読むことがつらくなることが多いです。仕事では文章を書いたり読んだりするので、そこでキャパシティをすべて消費してしまって、趣味の読書まで手が回らないわけです。

ちなみにいままで趣味の読書に充てていた時間は雀魂というネット麻雀をして、気を紛らわせていました。麻雀で負けるとそれはそれでストレスではあるのですが、読書よりましというかなんというか。関心のある本を買って読んでみても、内容が頭に入ってこない、目がすべる。それを自覚しながら、ページをめくっても、なおつらいだけなので、それより麻雀やっているほうがましかなという感じです。ちなみに麻雀はかなりへたです(´・ω・`)

なぜ仕事がつらかったのか。これは守秘義務があるので、詳細はかけません。ただぼかして書くならば、ユーザの利益にならないシステム作りにほとほと嫌気がさしていたというところです。SIerでSEでシステムを作る以上、やはりよいものを納品したいわけです。ただ、政治的な理由で、よくないもの・わるいものを作らざるを得ない場合もあるわけで、ほんとうにそれがきつかった。もっとも、その大変なプロジェクトももうすぐ離任。やはりおわりが見えると、気分が楽になって、このようにブログを書こうという気にもなります。

あとは普段摂取しているサプリメント類を見直したというのも大きいかもしれません。自分は趣味で筋トレをするので、体づくり用のサプリメントは積極的に摂取してきました。プロテインなんかはそうですね。ただ最近はストレス解消とか腸内環境の改善とか、そういう方向性のサプリメントについても考えていて、それが功を奏したのかもしれません。詳細は後日まとめたいですね。

2022年の技術面を振り返ってみると、Qiitaはときどき更新していたし、LeetCodeなどで手を動かすことはちょこちょこしてきました。技術書も少ないながら読んだし、teratailも気が向いたら、回答もしてきました。こういう活動は続けつつ、2023年はこのブログおよび読書にも力を入れたいです。よろしくお願いします。

『 SQLクックブック 第2版: データベースエキスパート、データサイエンティストのための実践レシピ集』を読んだ

honto.jp

仕事でSQLで向き合う機会が減っていて、SQL力が落ちているなと感じているところに、休日の本屋散策で発見して購入。ブランクをとりつつ、すべての問題を自力で回答しました。気合いでやり切った感がありますが、正直なところ、まあまあという感じでした(´・ω・`) 万人におすすめできるというものではないです。

本書では14個のテーマに分けられた約160個のクイズ・レシピが紹介されています。すごいところは、そのほとんどのクイズ・レシピに対して、MySQLPostgreSQLDb2OracleSQLServerではそれぞれどのように解くかが示されているところでしょうか? 問題のレベルとしては、単にSELECT文やINSERT文を書いてみましょうというものから、複雑な日付計算やレポート生成を求めるものまで、かなり振れ幅があります。個人的にはそこが中途半端だと感じていて、簡単な内容であれば初心者向けの教習本がいくらでもありますし、もう少し高難易度のものを求めるのであれば『SQLパズル』などがお勧めです。

もっともまったく役にたたなかったというわけではありません。個人的には「5章 メタデータクエリ」「12章 レポート作成と形状変換」などは結構よかったと思います。前者はinfomation_schema系のレシピがまとめられているのですが、これがまとめられているのは珍しい気がします。また後者は名前の通り、レポート作成のお話で、これもやはりまとまっているのは珍しいかと思います。もっともこれらの章を読むために買うほどかといわれると、うーむと言葉がつまっちゃいます。まあ初心者向けの本ではないですね。ある程度SQLを書けるという人で、気になるところをつまんで読む、読んだ後は書庫にしまっておいて困ったときに取り出すという使い方がよいかと思います。

個人的にこの本の評価を下げているのが2つあって、まずはJOINの書き方。本書では原則INNER JOINを以下のように記載します。

SELECT *
FROM A, B
WHERE A.id = B.id

こういう書き方があることを紹介するのはよいと思うのですが、全編これというのはちょっとどうかなと。普通にJOINを使ったほうが一般的というか、わかりやすくないですかね?

あと文字列操作系については、基本的にTRANSLATEを使うのですが、これもそれ以外の選択肢を紹介してほしいなという印象でした。さまざまな文字列関数や正規表現などはほとんど紹介されず、TRANSLATE一本やりで押すのもよい印象を受けなかったです。ほかにもJSONに関する話がまったくないなど、いいだしたらきりがないですね…。まあよほど関心がある人、もしくは会社などの補助で安くオライリー本を手に入れられる人であれば、買って読むのも悪くないかと思います。

大槻兼資『パズルで鍛えるアルゴリズム力』(技術評論社)を読んだ

パズルで鍛えるアルゴリズム力の電子書籍|新刊 - honto電子書籍ストアhonto.jp

今年のゴールデンウィークは10連休 (まあ実際にはそれほど休めませんでしたが…)。本来であればどこか遠出でもしたいところですが、まだまだコロナも暴れまわっている昨今、それは自粛して大阪の実家に帰省する程度にしました。実家でのんびりとはいえ、そこそこ時間があったので、自己研鑽の意味を含めて、読んだのがこの1冊。

内容はというと、虫食い算や数独やテンパズルといった有名なパズルをプログラミングを使って回答することで、アルゴリズムを学ぼうというもの。アルゴリズムの本というと、アルゴリズムそのものを解説したものが多い印象です。そういう本でグラフとか深さ優先探索とか知ったとして、ではそれを実際にどう利用するのかというところにはいきつかない人も多いでしょう。本書の主題はパズルという現実世界に実際に存在する問題(やや遊戯よりですが)に対して、アルゴリズムをどう適用するのかというところであり、なかなか面白い観点だと思いました。

あとパズルのマニアック(?)な知識が知れてよかったですね。個人的にパズルって結構好きなんで、新聞や雑誌で問題を見かけると時間をつかって解きたくなるタイプです。自分のようにアプリよりのプログラマーをやっていて、アルゴリズムに関心がある人はパズルが好きな人が多いんじゃないですかね? 本書にはパズルの例題がいくつも用意されています。気になったものは実際に解いてみたりして、なかなか楽しかったです。

本書を手に取るのはプログラミングに基礎的な素養のある人が多いと思いますが、説明は全体的に平易ですし、図表も多く、その図表もカラフルでわかりやすいです。とりわけ図表の充実っぷりはかなりすごい! 何が言いたいかというと、プログラミングやアルゴリズムに不慣れな人でもお勧めできる1冊です。

サンプルコードはC++で書かれていますが、マイナーなAPIや文法などは使われていませんので、ご安心を。たとえば自分はこういう本を読むとき、サンプルコードの写経をやることが多いのですが、C++よくわかっていないので、Pythonを採用したぐらいです。要するに自分ぐらいのC++よくわかっていないマンでも内容がわかる程度のC++で書かれているということです。C言語に似た文法のプログラミングの経験があれば、わからないということはないでしょう。

総じていい1冊でした。正直何気なく買った本ですが、とても知的好奇心が満たされたと感じています。