Magnolia Tech

いつもコードのことばかり考えている人のために。

物理Linuxサーバ構築用にThinkCentre M75q Tiny Gen2を購入

普段、メインで使っているPCがMacBook Air 2018なので、さすがにDockerでコンテナをたくさん立ち上げたまま、ブラウザで調べ物する、みたいな使い方が辛くなってきた。夏場はファンも凄い回っちゃうし、レスポンスはすごく悪くなるし。

メインPCを買い替えようかとも思ったけど、ブラウザを使うくらいの作業なら特に不満は無い。それにそもそもメインPCでLinuxが動いている必然性も無いし、画面も要らないのでサブPCとしてデスクトップPCを用意して、Linuxをインストールする方に方向に転換。


部屋に大きなデスクトップが有るとサイズ的に圧迫感が有るし、複数のマシンのファンの音が同時に鳴るのは苦手なので(データセンタではないので...)、作業している場所から離れた所の隙間に設置できるような、1リットルサイズの小型PCを探すことにした。

Amazonとかで探すと色々と出てくるけど、それなりのスペックを求めると(当たり前だけど)それなりに高くて、10万円に近づいていく。サブPCにそこまで使うのもなーと思って、中古を見てみると古い世代であればたくさん出回っているけど、決め手に欠けるものばかりで、さっさと買う、というモードにならず。

そういえば一時期「lenovoAMD搭載ThinkCentre Tiny」が安い、みたいな記事がたくさん出回っていたことを思い出して最新の価格を調べてみると...円安のせいか、数ヶ月の間にだいぶ値段が上がっている......そもそも即納モデル以外はどれも納期が3ヶ月後とかで、ちょっと手がでない。待っている間に新製品が出そう。

そこでlenovoのアウトレットストアを見てみると、割と常時開封後返品されたマシンを整備品として、リーズナブルな価格で販売していた。

www.lenovo.com

ただし、1リットルサイズのTinyモデルはほとんどない。普通のデスクトップモデルならいつでも有るけど……と思っていたら、年明けにAMD搭載ThinkCentreのTinyモデルが安く売られていたのですぐに購入。販売数が少ないので、すぐに売り切れていた。タイミングが良かった。

スペック的には即納モデルと同じみたいで、CPUがAMD Ryzen 5 PRO 5650GE、メモリ8GB、SSD256GB。Wi-Fiもある。あとは一応キーボード、マウス、スタンドも付いてきた、使わないけど。

価格は新品より2万円安く、ちょっと前の新品の価格をちょっと下回るくらい。

実際にに届いた物をチェックしたけど、特に使用感も全然無くて普通に新品と見分けがつかなかった。

梱包は簡素で、箱にはlenovoのマークも無し。

紙のマニュアルも一切付属せず、自分でダウンロードする必要がある。

Windows 11の立ち上げ確認

プリインストールされていたOSはWindows 11 Home

立ち上げ確認と、マイクロソフトアカウントの登録、ライセンス認証、インストールメディアの作成まで実施。

マイクロソフトアカウントにデジタルライセンスが登録されたので、再インストールの準備完了。

Ubuntu Server 22.10のインストール

Windows 11をいつでも再インストールできる状態にしたら、早速全部ストレージを初期化して、Ubuntu Serverのインストール。いつでも入れ替えられるので、最新の22.10をインストール。

注意点はインストール前に、セキュアブートをオフにしておくことを忘れない、くらい。SSHの鍵もGitHubから取得してくれて用意してくれるので、macOSからすぐにSSHでログインできたのが良かった。そういえば、Ubuntuインストーラを起動のもずいぶん久しぶりな気がする...

最初、無線LAN経由でインストールしたらめちゃめちゃ時間がかかったので、HUBを買ってきて有線LAN側で接続。レスポンスがかなり快適になった。

インストールが完了した後に、IPアドレスを固定化してから、Wake on LANを試す。macOSだと「WakeOnCommand」というツールで可能。特に設定は変えていないけど、MACアドレスを指定したらすぐに立ち上がった。これで遠隔操作もバッチリ。


考えてみれば物理ハードにUbuntuを自分でインストールしたのが初めてで、ネットワークの設定周りでちょっと戸惑ったけど、それが終わればいつものUbuntuなので、あとは特に困ることも無かった。

最近はLinuxもイメージから起動するようになってOSのインストーラ自体動かさなくなってたなぁ。

Ubuntu Serverでnetplanを使って固定IPアドレスを指定する(あと、Wake on LANを有効にする)

手元のPCにUbuntuをインストールした...よく考えてみると物理PCに直接Ubuntuをインストールしたのが初めてだと気がついた。 特にネットワーク周りの設定は、ネットワークインタフェースに影響を受けるので、今まで意識したことが無いところでの設定が必要になった。


自宅内サーバとしての使い方なのでIPアドレスは固定化したい。 本当はルータ側でMACアドレスを指定してIPアドレス払い出しを固定化する方法も有るはずなのだけど、上手くいかなかったので、まずはUbuntu側で設定することにした。

Ubuntuでは、netplanというコマンドを使ってIPアドレスを固定化する。

詳しい解説は、以下のサイトを参照のこと

netplan.io

公式ドキュメントでも、ネットの情報でも、明示的にrendererを指定している例が多いけど、公式ドキュメントには/etc/netplan/配下にYAMLファイルが置かれていると明示的にrendererNetworkManagerを指定しない限り、networkdが利用されるそうなので、明示的に指定する必要が無かった。

あと、Ubuntu ServerはデフォルトでNetworkManagerをインストールしないので、NetworkManagerのパッケージを追加インストールしない限り、rendererNetworkManagerを指定してもネットワークインタフェースは何も設定されないので、注意。初めてUbuntu Serverをインストールした時、nmcliではネットワークインタフェースが全てunmanagedになっていたので何事?と思ったけど、そもそもNetworkManagerでは管理されていない、というそのままの状態表示だった。


インストールしたPCには有線LANと無線LANの、2つのインタフェースが有るので、有線LAN側を固定IP化することにした。

有線LAN側の設定

network:
  ethernets:
    device_ethernet:
      dhcp4: false
      addresses: [192.168.0.xx/24]
      routes:
        - to: default
          via: 192.168.0.1
          metric: 100
      nameservers:
        addresses: [192.168.0.1]
      wakeonlan: true
  version: 2

バイス名と、IPアドレスはマスクしているけど、それ以外は設定した内容をそのまま載せている。静的にIPを指定する場合は、nameservermetricは明示的に設定する必要がある。

metricの意味は下記のサイトを参考にした。

qiita.com

デフォルトでは無線LANのインタフェースには600、有線LANのインタフェースには100が割り当てられた。同じゲートウェイを向いている時は、有線LANが選択されることになる。IPアドレスを固定化する際は、明示的に指定しないといけないの、デフォルトと同じ100を設定した。

name serverは、利用しているホームゲートウェイがWAN側にDNSサーバのアドレスを保持しているので、ゲートウェイに設定した。パブリックDNS 8.8.8.8でも別によいけど。

Wake on LANも明示的に設定しないと有効にならなかったので設定した......これで遠隔から電源をオンにできる。

無線LAN側の設定

同じ設定方法だとトラブった時に切り分けができないので、無線LAN側はDHCPを使うデフォルト設定のままとした。

network:
  version: 2
  wifis:
    device_wifi:
      access-points:
        name_of_access_point:
          password: xxxxxxxxxxxxxxxxxxx
      dhcp4: true

ip routeコマンドで反映した結果を確認する

なお、ゲートウェイを指定するgateway4記法はUbuntu 22.04より非推奨になっており、routesを使うのだそうだ。

KIOXIA USBフラッシュメモリ 16GBを買った......物理記録メディアを買うのはいったいいつ以来なのだろう

Windowsのインストールメディアと、Ubuntuのインストールメディアを作るために、USBメモリを買った。

もう最後にUSBメモリを買ったのがいつだったのか、まったく思い出せない。

というか買った記憶が無い。

最後に自宅でUSBメモリを使ったのは、まだ「ATOK for Mac」がパッケージ販売されていた頃、インストール用のUSBメモリの空き領域を使って何かのファイルを移動したような、そんな記憶しかない。

SDカードはデジカメのために買った記憶もあるけど、確実に10年以上前のような気がする。

記録メディアの類を、緊急用ですら買わなくなって、久しいけど、ほんと困らないというか、必要性が全くない。


ちなみに作ったインストールメディアは、将来絶対に分からなくなる自信が有ったので、それぞれチャック付きの袋に、ラベルを貼って保管することにした。だけど、きっとこのメディアをどこに保管したのか分からなくなって、同じ物を作るんだろうなぁ…。

そして、もっと先の未来で、うっかり見つかって、「こんな容量じゃ使えねー」って言って捨てるんだろうなぁ…。

すべてのエンジニアは、機関車トーマスの『じこはおこるさ』を聞くべきではないか

大事なことが、全部ここに集まっている!

utaten.com

WEB+DB PRESS Vol.132 『オブジェクト指向神話からの脱出』は、長く生き残った技術テーマを振り返る良い特集

初めて「オブジェクト指向」というキーワードを聞いてからだいぶ長く経っていて、「これはオブジェクト指向らしいコードなのか?」みたいな見方をすることも無くなって久しい今日この頃ですが、WEB+DB PRESS最新号Vol.132 の特集が『オブジェクト指向神話からの脱出』という興味深いテーマだったので読んでみました。


そういえば、20世紀の終わりから21世紀の初めの頃にかけては、オブジェクト指向以外にも色々な開発方法論とそれを支えるツール群が出てきては消えていった時代だった記憶があります。今ではまったく聞くことも無い設計方法論や、ツールがソフトウェア開発の問題への画期的な解決策と宣伝されていました。

で、たいていそのツール費用が高額な上に、更にトレーニングを受けないと使いこなせないし、更にそのトレーニング費用が高額だった...印象。

あ、そういえば4GLと呼ばれる言語群も有りましたね。

個人的には、ソリューションとコンサルテーションを売りたいのかなぁ…本当に顧客が欲しかったものが巨大なツール群を使いこなすことで得られるのか……それよりビジネスロジックを実現する仕組みとコードを考える方に注力した方がいいんじゃないか?UMLを詳細に書いたからって、何にもわからないよなぁ…みたいなことを考えていました。


そんな色々な開発方法論のうち、プログラミング言語と密接に結びついて生き残ったキーワードの一つが「オブジェクト指向」ということでの特集。前半はプログラミング言語におけるオブジェクト指向機能のおさらい…カプセル化や、継承などの基本が解説されます。ここまでは機能の解説なので、良いも悪いも無い話。

第3章「オブジェクト指向の周辺技術」では、オブジェクト指向方法論、分散オブジェクト技術、オブジェクト指向データベースなどに話題が広がっていきます。過去の振り返り、という意味では非常に興味深い内容でした。

で、いよいよ第4章「オブジェクト指向機能の現在の使い方」から最後の第5章「オブジェクト指向言語の変化」と、特集の核心に進んでいきます。ここはぜひ読んでみてください。


と、ここまで読んできて、果たして現代に今からプログラミング言語を学ぶ人は「オブジェクト指向」という言葉にそこまで惑わされる場面があるのかなぁという疑問はちょっとあります。

古代、良い(と考えられる)ソフトウェア開発の概念に何でも「オブジェクト指向」というキーワードがくっついていた時代と違って、現代では一つのプログラミング言語や、開発方法論、ミドルウェアもさまざまな概念が混ざり合って実現されていて、あまり分かりやすいキーワードで説明しようとしても無理がある、というか、何も言ってない、みたいな場面が多くないですかね。

(特集の最後にもそういう話が書かれているんですけどね)

まぁ、とはいえ、完全に忘れ去られて、誰も使わなくなった開発方法論に比べれば現代においても、その概念がダイレクトに導入されているプログラミング言語が実用的に使われていて、こうやってその概念の実践について議論がされるだけでもイイ話だなぁと思った次第です。

というわけで、現代に生きる人は、過去に囚われ過ぎず、「今の課題」を解決するために必要なことを学び、実践していけばいいんじゃないかなーと思った次第です。というわけで、第4章、5章あたりを読んで、がんがんコードを書いていこーぜー!!


追記

そういえば、かつての定番のネタとしては、オブジェクト指向に入門するために、バートランド・メイヤーの「オブジェクト指向入門」を最初に買ってしまい、挫折する、というのがありましたよね。2冊ともずいぶん前に買って、未だに全部読んでない…

原題の「Object‐oriented software construction」を「入門」っていう書名にしちゃいけない気が…

あけましておめでとうございます 2023

あけましておめでとうございます

振り返ってみると、吉祥寺.pmの定期開催はキープしましたが、それ以外の活動が弱かったなーという反省。

kichijojipm.connpass.com

ブログのエントリはそれなりに書いていました。たまにブクマがたくさん集まって注目いただいているなーという嬉しさはありました。

b.hatena.ne.jp

2023年も引き続きよろしくお願いします

『ちょうぜつソフトウェア設計入門――PHPで理解するオブジェクト指向の活用』は、現代ソフトウェア開発の”知の高速道路”

予約してまで買ったものの、なかなか時間が取れず、読めていなかった『ちょうぜつソフトウェア設計入門――PHPで理解するオブジェクト指向の活用』をようやく読み終わりました。

筆者である田中ひさてるさん自身で描かれた表紙の可愛らしさからは想像もできないハードな内容なので、一気に読もうとすると「分かった気」になるだけで全然理解していなかった、ということになりがちなので、3回くらいぐるぐる読むといいと思います(そうです、この本は本文もイラストも丸っと同じ人が書いているのです!!)。

目次

目次の章立てを見ると、現代のソフトウェア開発で語られる概念がずらっと並んでいます。それぞれで1冊どころじゃない程の本が書かれてしまうテーマがずらっと並んでいますが、それらが分かりやすい語り口と共に解説されていきます。流し読みしていると、ほんと置いて行かれてしまうスピード感なので、一つ一つの記載について、自身の経験に照らし合わせて、過去のコードや、設計を思い出す、この本を読んだ上で今だったらどうするか考えてみる、という読み方をすると良いでしょう。

いや、もちろん途中で差し込まれる1コマのイラストだけ拾って読んでも全然いいんですけどね!!

この本の良いところは、それらの概念を盲信し、イタズラに完全な方法論だ!これで世界は完璧だ!と宗教じみたことを言うのではなく、「目の前の自分の課題を解決するために必用なところを取り入れて、上手く付き合っていくスタンス」も併せて紹介しているところに有って、そこが幅広いテーマを扱っているにもかかわらず、単なる知識の羅列になっていない、本書の凄いところです。例えば、UMLもばっさりとクラス図、インスタンス図、シーケンス図しか出てこないあたり、「そうだよねー感」が有ります。

アーキテクチャは動作には貢献しない」「4つの層にそうした名前を付けることをクリーンアーキテクチャと呼ぶと思わないように気をつけてください」「オブジェクト指向を定義することはできない」「データベースがSQLの言語仕様どおり動くかの検証は、データベースベンダがもう終わらせていますよね」......一番好きな言葉が並んでいるのは「第9章 アジャイル開発」ですが、そこはあまりに名言のオンパレードなので、実際に手に取って読んでみてください。

特に、「第3章 オブジェクト指向」は、最近の「オブジェクト指向は何か?」という話題を理解する上での一助になる記載がたくさん載っています。個人的にはこの本に出てくる「犬猫プログラム」は好きじゃない(自分が過去に混乱したから)のですが、それについても一つの考え方、見方が書かれていて、「なるほどなーそういう見方も有るかー」と感心しました。

あとタイトルに"PHP"とは出てきますが、それほどコード量は多くなく、あくまでさまざまなプラクティスを理解するための補助的な役割として出てくるので、PHPに不慣れな人でも大丈夫です(自分もPHPは全然読めないです)。


というわけで、まさにコンパクトな紙面(目次含めても311ページ)に現代のソフトウェア開発における概念が一通り、しかもその考え方に対する付き合い方、スタンスまで学べる上に、めもりーちゃん達のイラストまで堪能できるのはお得感満載ですね。

と言うわけで、この年末年始は”ちょうぜつ”にソフトウェア開発を学んで、知の高速道路の先へすっ飛んでいきましょう。

【追記】

なんかいい表現を見つけた。