アルゴリズムとデータ構造の学習計画

アルゴリズムとデータ構造の学習計画をChatGPTにたてて貰いました。以下の形で取り組んでいきたいと思います。

アルゴリズムとデータ構造の基本を学ぶ

  • ソートアルゴリズム、探索アルゴリズム、スタック、キュー、リストなどに焦点を当てます。
  • オンラインの学習プラットフォームや教科書、チュートリアルを利用して学びます。

アルゴリズムの種類を理解する

  • より高度なアルゴリズムについて学ぶことで、問題を効率的に解決するための手段を増やします。
  • グラフアルゴリズム、動的計画法、再帰、バックトラックなどのアルゴリズムを学びます。

問題を解くための実践

  • プログラミングコンテストやオンラインジャッジで問題を解くことで、実践的なスキルを身につけます。
  • AtCoder、Codeforces、LeetCode、HackerRankなどのオンラインプラットフォームを利用します。

アルゴリズムとデータ構造を組み合わせて問題を解決する

  • アルゴリズムとデータ構造を組み合わせて、実際の問題を解決する力を身につけます。
  • 問題を適切に分解し、最適なアルゴリズムとデータ構造を選択するスキルを磨きます。

コードの効率性と最適化

  • 解決策の効率性と最適化に焦点を当て、計算量やメモリ使用量を意識してプログラムを改善します。
  • Big-O記法などの計算量の理解が役立ちます。

グループ学習や参加コミュニティに参加

  • アルゴリズムとデータ構造を学ぶ仲間を見つけることで、相互学習や問題解決のアイデアを交換できます。
  • オンラインコミュニティやローカルのプログラミングイベントに参加することをおすすめします。

まとめ

ChatGPTを使うことでプログラミング学習の効率が本当にグンと高まりますので、プログラミング学習している人は、ぜひ、ChatGPTを講師として学習を進めてみてください。

UbuntuでApacheを用いたWebサーバ構築

自宅鯖ってやつをやってみたくてテストとして手持ちのUbuntuでWebサーバ構築やってみました。構成としてはWebサーバにApache、DBにMySQL8って感じです。

今回はApacheの環境構築手順を備忘録としてまとめておきます。

aptを最新の状態にしとく
$ sudo apt update

Apacheインストール
$ sudo apt install apache2

MySQLインストール
$ sudo apt install mysql-server mysql-client

バージョン確認

# apache2 -v
Server version: Apache/2.4.52 (Ubuntu)
# mysql --version
mysql Ver 8.0.33-0ubuntu0.22.04.2 for Linux on x86_64 ((Ubuntu))

※apt installだと最新のバージョンがインストールされるので特定のバージョンをインストールする場合はバージョン指定が必要

apache2.confで設定を変更

apache2.confの場所↓↓
/etc/apache2/apache2.conf

Viで編集
$ sudo vi /etc/apache2/apache2.conf

セキュリティを考慮しファイル一覧を表示させないようにOptionsを変更

<Directory /var/www/>
# Options Index FollowSymLinks
Options FollowSymLinks
AllowOverride all
Require all granted
</Directory>

文字化け対策としてAddDefaultCharsetをOffにする

AddDefaultCharsetをUTF-8からOffに変更
AddDefaultCharset Off

設定反映させるためApachを再起動

$ sudo systemctl restart apache2
ブラウザから確認
http://localhost/

ApachのWelcomeページが表示されていればとりあえずOK

あとは、デフォルトのドキュメントルート/var/www/にApachのWelcomeページが配置されているので、不要であれば削除し適当なindex.htmlを作成し文字化け確認のため日本語でなんか文章いれておく。

再度、ブラウザから確認。

文字化けしてなければOK。

これでとりあえずlocalで動くWebサーバが構築できたので、インターネットからアクセスできるようにするには、ルータの設定で外側がグローバルIP、内側に構築したWebサーバのIPとポート80と443をあけてやってブラウザでグローバルIP打てばインターネット経由でアクセスできる筈。詳しい設定とかは、またそのうちセキュリティのことも調べながらまとめていきたいと思います。

2023年 AWS Certified Solutions Architect – Associate(SAA-C03)受験記 – 合格までの道程

未経験からエンジニアに転職して4月1日で丸1年になります。締めくくりとして AWS Certified Solutions Architect – Associate、通称SAAを受験しなんとか無事に合格できましたので、受験を考えている方達の何かの参考になればと、合格までの道程を備忘録として残しておきたいと思います。

簡単に受かるはウソ?思ったよりも難しい

先ず思ったよりも試験内容は難しかった印象があります。これは2022年の後半に確か試験内容が改定されているので、その影響でしょうね。サービス名を単に答えるという問題は廃止され問題が長文化されているのでしっかり対策をして望むことをおすすめします。

ネット上ではSAAは簡単であるという情報が出回っていたりしますが、これはきっと試験内容が改定される前の情報であったり、そもそもインフラの知識を持った人間からすると簡単とか前提条件ありきではないかと思います。

どんな能力が問われているか

どういう能力が問われているのか、基本的なインフラの知識とサービス理解に尽きると思うのですが、amazon風に表現するならwell architected frameworkに基づいた設計力といったところでしょうか。

想定されたクライアントが抱えている問題をwell architected frameworkに基づいた設計により、AWSのサービスをどのように組み合わせて解決していくのかを考えることになります。なんだか小難しくなってしまいましたがAWSのサービスを上手く組み合わせて顧客が満足するような最善の設計をしてねってことですね。

well architected frameworkは抑えておく

ここまで読んで、well architected frameworkをしっかり理解しなくては!と思われると思うのですが、このあたりは実際そんなに難しくありません。当たり前といえば当たり前の設計思想です。

6つの柱と称されるフレームワークの概要はこんな感じです。

オペレーショナルエクセレンスの柱

キュリティの柱

信頼性の柱

パフォーマンス効率の柱

コスト最適化の柱

持続可能性の柱

あくまでも僕の解釈にはなりますが、管理/運用しやすくセキュリティ対策とパフォーマンス対策がしっかり取れた上でコストも最適化されたサービスを持続していくための設計思想ということではないかなと思います。

これを軸に備えて設計をしていきます。なんとなくやれる気がしてきませんか?

主要サービスも抑えておく

IAM、EC2、VPC、S3あたりはしっかり抑えておかないと先ず問題が解けません。あとはECSみたいなコンテナオーケストレーションとかCloudWatchのような運用保守系のサービスなんかも可能であれば触っておくと良いと思います。

最後は模試と過去問を

どんな能力が問われているのかとwell architected frameworkの概要を理解し主要サービスを抑えたらあとは過去問を解きまくるだけで良いと思います。

無料で使えるものだとPing-tというサービスがあるのですが、とても有用です。とりあえず、これで模試の正解率が100%になるまでやることをおすすめします。またPing-Tだけでも十分に合格を狙えると思うのですが、個人的には別の問題集もやっておくと良いかと思います。同じWeb問題サイトばかりやってると、いつの間にか暗記してしまって問題文を読まなくても分かるなんてことになってくるので、別の問題集で切り口の違う問題を適度に混ぜた方が個人的には良いと思います。

参考書は基本的に下のものだけで十分ではないかと。僕はKindleUnlimidに加入しているので無料で読めました。

そんなわけでAWS Certified Solutions Architect – Associate(SAA-C03)受験記でした。今度はAWS Certified SysOps Administrator – Associateを受験しようかと考えているので、それもまた記事にします。最後まで読んで頂きありがとうございました。

dynabook R634/MにUbuntuをインストールしてみた

Linuxの実機が欲しかったので中古でdynabook R634/Mを購入しUbuntuをインストールしてみました。dynabook R634/Mは2014年発売のモデルで古いこともあり、中古で安く購入できるのでわりとおすすめです。

購入時はWindows10でもっさりして使い物にならない印象でしたがUbuntuはWidows10より軽量なので普段使いならほとんどストレスなく使えるのではないかと思います。もっと軽いLinuxディストリビューションならさらに快適かも知れません。

詳細なスペックはメーカーサイト参照
https://dynabook.com/pc/catalog/dyna_b/150209r63/spec.htm

というわけで備忘録を兼ねて手順を記しておきます。

インストール手順書

①公式サイトよりISOイメージファイルをダウンロードする。

https://www.ubuntulinux.jp/download

上記のリンクから日本語 Remixのダウンロードをクリックし、isoイメージファイルをダウンロードします。この記事を書いてる時点の最新版だと「ubuntu-ja-20.04.1-desktop-amd64.iso(ISOイメージ)」になります。

②ダウンロードしたISOイメージファイルをもとにインストールメディアを作成する。

Rufusというフリーソフトを利用しインストールメディアを作成します。下記サイトよりインストール可能です。

https://rufus.ie/ja/

※イメージモードは、ISOイメージモードでもエラーは起きなかったのですが、DDイメージモードじゃないとインストールが進まなかったのでDDイメージモードで作成すること推奨。

③インストールメディアからPCをブートする

作成したインストールメディアをOSを上書きしたいPCに挿入しBIOS画面を表示させる。dynabook R634/Mの場合はメーカーロゴ表示時にF12キーでBIOS画面に入れるのでBoot MenuからUSBメモリを選択する。

④あとは待つ

そのまま待ってるとUbuntuのインストールウィザードが起動するので、設定しながら進んで、設定が完了したら待つ。ここで言語設定やネットワーク、ユーザ作成など行う。

⑤デスクトップ画面が表示されたら設定完了

お疲れ様でした。

Ubutnuインストール後ベンチマーク

KDiskというLinux版のCrystalDiskInfoみたいなやつをみつけたのでベンチマークとってみました。

>>今後はストレージとメモリの増設もしてみる予定

まとめ

今回のdynabook R634/MですがLinux版のVscodeをインストールしてモバイル開発環境として使う用途だとかなり良いなと感じています。なんといっても質量が1kg切ってるのが良いです。なんか良さげなジャンクPCを購入したらまた記事にしたいと思います。

Notionでの自動採番について考える

個人開発のプロジェクト管理ツールとしてNotionを使っているのですがプロパティに一意のIDを割り振る、いわゆる自動採番機能が標準で備わっていないんですよね。なのでNotionでの自動採番について考えてみました。

先ず前述した通りですが標準で選択できるプロパティに自動採番がないので、自動採番を実現させるためには関数プロパティを利用する必要があります。

ただし関数の中にはIDという一意の文字列を割り振ってくれるものがあるのですが、桁数が多くちょっと使いづらいと感じます。そこで作成日時を利用してIDにしてしまおうというコンセプトで、こうしてみました。

formatDate(prop(“作成日”), “YYMMDDHHmm”)

関数プロパティで上記の設定をすると10桁のIDを自動採番できるようになります。作成日時が2022年11月9日12時55分の場合の例:2211091255みたいな感じですね。10桁の数字ならまあ覚えやすいですし許容かなという感じです。

課題としては分単位で同じ時刻に複数のページを作成すると重複してしまうので大勢のプロジェクトには向いていない点ですね。

大規模なプロジェクト管理だと条件分岐で作成者によって個別にNoを割り当ててIDをもう少し複雑にしてやるといいかも知れないです。

まあそのうちに自動採番機能も追加されたりしそうな気がしないでもないですが、結構前から言われていることだけど、実装されていないので、どうなんでしょうね。

他に良い管理方法などあれば、ぜひ、コメントで教えてください。

【PHP】ctype_spaceでtrueの場合、真偽値じゃなくて、そのまま返すやつ

バリデーション用に。

ctype_spaceだと真偽値で返ってくるのでif以降の部分で対応はできるけれど、毎回if文を書くのは流石にめんどうなので関数にした。

適宜アクセス修飾子を付けるなりしてバリデーション時に呼び出せる様にするなどで使える、かも知れない。

【PHP】正規表現で「\」バックスラッシュをマッチさせる

正規表現で「\」ってどう扱えばいいのかと思って調べてみたので備忘録です。

背景としては、PHPで「\」記号をバリデーションのルールに加えるために調べてみました。

以下の様にすればOK。

ちなみに「/」をマッチさせたい場合はデリミタを「#」にすれば問題ないです。下記のような感じ。

$ptn = “#/#”;

正規表現のパターンの変数を上の”#/#”に変更してあげたら「/」をマッチさせることが出来ます。バックスラッシュもスラッシュも両方マッチさせたいよって場合はこうですね。

$ptn = “#/|\\\\#”;

「|」で区切って繋げます。

“#/|\\\\#”…、パッとみ意味不明ですが正規表現が使える様になると幅が広がるので徐々に慣れていきたいところです。

『護られなかった者たちへ』を読んだので感想を

中山七里さんの『護られなかった者たちへ』を読んだので感想を書きます。ちなみに読了後に映画版もみたけど、圧倒的に小説版の方が面白かったです。あくまでも個人的にですが理由は後述します。

小説版『護られなかった者たちへ』のジャンルとしては日本の生活保護制度の欠陥に迫る社会派ミステリーとのことです。どんな人におすすめなのかというと、社会派ミステリーと銘打っていますがポリティカル・フィクションというわけではなく、あくまでもミステリー小説なのでポリティカル・フィクションを探してるという方からすると、少し違うかも知れません。ミステリー小説としては、程よい緊張感が維持されていて、きちんとどんでん返しも用意されているので、ミステリー小説が好きな方にはおすすめです。

今ならKindle unlimitedで読めるので気になった方はぜひ。

以下、本作の感想です。多少のネタバレを含むので気になる方はご注意ください。

感想

あらすじをざっくり説明すると、福祉保険センターの課長の死体が発見され、死因は餓死。この状態から明らかに他殺であると思われるのですが、中々容疑者が浮かび上がらない。餓死なんて殺し方を選ぶくらいなので、犯人は被害者に相当な恨みを持っている人物なんだろうなと思うわけですが、身辺調査をしても、被害者は絵に描いた様な善人で部下にも上司にも慕われている人格者であるということが強調されるばかりで捜査は難航する、みたいな感じのところからお話が始まります。

まあ読者としては生活保護申請を成否を決める立場の人間なので生活保護絡みの事件なのだろうなと容易に予想は出来ます。例えば生活保護申請が通らなかった人の逆恨みであるなど。ただそこは流石ミステリー小説で、最初の予想がミスリードの様な気がしたり、はたまたやっぱり最初の予想通りに生活保護絡みの怨恨なのか…、という具合の揺さぶりが、緊張感を生んでいて、とても読み応えがありました。

冒頭で書いた映画版もみたけど、圧倒的に小説版の方が面白かった理由についてですが、改悪されている要素が多い様に思いました。登場人物の性別についてもそうですし、映画の枠の中に収めないといけないという事情はあるのでしょうけれど、犯人の犯行動機への背景がどうしても薄っぺらく感じました。

どんでん返し要素も小説版と比べるとだいぶん薄いです。あと、これは好みですが、ところどころ差し込まれる意味ありげな芸術表現(意味あるんでしょうけど)が肌に合わなかったですね。なので個人的には小説版の方が圧倒的におすすめです。

Ubuntuで「アプリケーションを表示」するからアプリアイコンを消す方法

Braveブラウザからデスクトップにショートカットを作成したら自動的に「アプリケーションを表示」に追加されたのですが、デスクトップ上からショートカットを削除しても「アプリケーションを表示」から消えない…。

どうやって消すのか分からなかったので調べてみました。おそらくChromeのショートカットなども同じ。

結論: ~/.local/share/applications/に格納されているので消せばいい

下記の場所ですね。

~/.local/share/applications/

GUIでやる場合はHOMEに移動してCtrl+hで隠しファイルを表示してあげないと「.local」が表示されないので注意。

CLIからだと、

cd ~/.local/share/applications/

で移動して指定のファイルをrmコマンドで消してあげてください。

『ルビンの壺が割れた-宿野かほる』を読んだので感想

数年前に話題になった本。読みたいなあと思いつつも忘れていたのですが、Kindle Unlimitedで発見したので読んでみました。

物語の概要をざっくり説明すると、30年前に失踪した婚約者をFaceBook上で偶然みつけたとのことで、メッセンジャーでのやり取りが始まるという、現代版、書簡体小説とでもいう感じの物語となっています。

前半は再開を懐かしむような和やかな雰囲気でのやり取りが続くのですが、徐々に不穏な空気が漂い始めます。このあたりは読み手によってだいぶん印象が変わってくるところではないかと思われます。

あとがきにも書かれているのですが「ルビンの壺」というのは心理学でよくみるイラスト(表紙にも描かれている)で人によっては壺にみえたり向き合っている人にみえたりするというもので、「ルビンの壺が割れた」も読む人によっては、まったく違う印象になるということで「ルビンの壺」になぞらえているようです。

その「ルビンの壺」に「割れた」と付け足すあたりラストを象徴していて考え深いものがあります。あまり詳しく説明するとネタバレになるので、未読の方は、ぜひ衝撃のラストを体験してみてください。

そんなこんなで、これより先はネタバレありの感想になるので、未読の方は物語の結末を知ってから感想を共有しましょう。

ちなみに冒頭でも申し上げましたがKindle Unlimitedで読めます。契約している方は読み放題対象のうちにぜひ。

個人的な感想(ネタバレあり)

皆さんはこの話を読んでどのように感じられましたか?僕はとても怖くなりました。30年というのは決して短い時間ではないです。30年間もの間、一馬はずっと2人の女性を恨み続けていたのだと思うと、物語前半の彼の特定厨的な行動も、とても不気味な印象になります。きっとなんとしてでも未帆子の所在を特定し報復したかったのでしょう。一馬は常軌を逸した行動をしている、ただのぶっ飛んだやつのように感じますが、もし同じ立場であったならどうなんだろうと想像すると、それはそれで恐ろしい話です。彼にとって復讐こそが服役中の唯一の目標であり希望だったのかも知れません。まあその復讐も的外れな逆恨み以外の何でもないのですが…。

余談になりますが、公式の『ルビンの壺が割れた』特設サイトに公開往復書簡というコンテンツがあって編集者と宿野かほるさんが往復書簡形式でやり取りをするのですが、そこで、この『ルビンの壺が割れた』が宿野かほるさんの友人の実体験にもどづく話であるということが明かされます。個人的にこれが一番のホラーでした。

ちなみに公開往復書簡は下記になります。興味がある方はぜひ読んでみてください。

宿野かほる 『ルビンの壺が割れた』 | 新潮社

最後まで読んで頂きありがとうございました。この物語がどんな風に見えたのかコメントで感想なども教えて頂けると嬉しいです。

Close