Month: February 2023

ノートPCの分解と更新

先週末、日本ソーシャル・データサイエンス学会に参加してきました。その中で計算時間の話になり、自分もノートPCを更新しなければと思い立ちました。結論としては、1.5万円でQoL爆上がり!起動時間も数分だったのが5秒程度まで改善されました。 更新したノートPC TOSHIBA Dynabook R731という2011年春モデルのノートPCです(古すぎぃ)。2コア4スレッドでメモリ4GB, 500GBのHDDストレージということで、12年前にしてはそこそこのスペックを持っています。それ故長く使ってしまったというか、Ubuntuを入れて動かす分には結構十分な力を持っていたんですよね。しかし、さすがに年をとって重くなってしまったので、更新することにしました。 更新方針 まずCPUです。R731はcore-i3の2.1GHz, キャッシュが3MBというそこそこのスペックを持っています。CPUは他部品に比べれば頑丈で長持ちするイメージなので、今回は節約を兼ねて現行のままにします。次にメモリ。こちらは4GBなので、現代のアプリを動かすには少し弱いと考えて買い足します。ただし、12年前のノートPCなのでDDR 3Lというあまり耳にしないメモリが必要です。ちょうどCrutial製のモデルがAmazonに残っていたので約6000円で購入しました。 その次はストレージ。2011年ではSSDはデータの揮発性が心配で、データ損失を避けるためにHDDが推奨されていました。しかし、2023年では技術が進歩しているため問題なくSSDが使用できます。SSDもCrutial製(SATA2.5)のものを近場のPCショップで購入しました。こちらもおよそ4000円程度。最後にバッテリー。これはもう7年くらい前から死んでいました。今では電源ケーブルを外すと1分しないうちに落ちてしまいます。なぜか現在でも互換性のあるパーツが販売されていたのでAmazonで購入しました。3000円程度。 分解に必要な工具 作業レポ 最初にPC裏面のドライバを外していきます。Dynabook R731はメンテナンス性を重視して設計されているようで、ウラ面のうち#0の+ドライバーで開けられる部分だけ外せばストレージとメモリは交換できます。CPUを交換する場合は大きめのドライバも必要なので注意。メモリは交換前の時点で2GB2枚がついていることを想定していたのですが、なんと4GB1枚という構成だったので4GB2枚を新規購入する意味はなかったですね。ネットの情報を鵜呑みにせずに事前に確認しておけば良かったと後悔しました。ストレージは下記画像の左側に引っこ抜く感じで取り外しできます。ガイドとなる透明シールもあるので非常にかんたん。メモリは固定レバーを外側にやる感じで外します。下のメモリから入れていくとかんたんですね。 OSのインストール あらかじめ作っておいたUbuntu22.04イメージが入ったUSBを刺して、電源をつないだ直後にF2を連打してBIOSモードに入ります。その後起動順を変更してUSB内のUbuntuが優先的に起動するように変更を加えます。ちなみにUbuntuのイメージは北陸先端科学技術大学院大学JAISTの管理しているやつが断然おすすめです。これを使っておけば日本語にまつわる設定に苦しまなくなります。また、USBに起動可能なUbuntuを焼くためにはRufusがおすすめです。 更新後の動作所感 冒頭に書きましたが、起動時間の短縮がすごい。HDD→SSDとメモリ倍増の効果によって、数分単位だった起動時間が5秒程度に。また、この記事を書いている際に使用しているChromeもサクサクになりました。この快適さを文章では伝えきれないですが、単純に処理速度が上がっただけで買い替えに匹敵する快適さを手に入れていると思います。しかも1万3000円で。 その後 docker、Chrome、Cmake、VSCodeのインストールをとりあえず行いました。dockerのインストール方法がだいぶ変わっていたので戸惑いました。ubuntu等ではあまり積極的に対応していないようですね。このサイトに詳細な方法が記載されていたので、これに従うと良いと思います。ChromeやVSCodeは古いバイナリでインストールしても自動更新があるので安心です。Cmakeはver3.19をインストールしました。 最後に ここまで読んでくださってありがとうございました。PCの改造はコストの割にリターンが大きいので、自信がある方はやってみたほうがお得だと思います。ただし、DDRは今や5であるのに旧式のDDR3を使わなければならないなどの制約が重くのしかかるので、あまりゾンビにさせずに20年後にはスパッと切らないといけないですね。それでは次回もよろしくお願いします!

DBMSを触りたい!②

こんにちは。そのまま続きをやっていきます。前回は下記のようなコマンドで何か全権限を与えた時点でPCを落としてました。 ここで実際にユーザが追加されているのか?そして、権限がどうなっているのか?これを確認する必要がでてきます。これに関しては「わくわくBank」さんに詳しく書いてあったので、そのままやっていこうと思います。まずは、現在登録されているユーザを出していきます。 パッと見た感じ、UserにRWWが登録されていること、hostはlocalhostになっていることがわかります。ちなみにSELECT * FROM mysql.user; と入力することでuserやhost以外の列も出力できます。全然意味がわからないものがほとんどなので、そのうち理解して行きたいですね。 また、権限周りを確認するために、下記コマンドを入力してみました。 どうやらここでは%の部分がエラーになっているようで。%は正規表現か何かだと思って元から変更しなかったのですが、元記事ではlocalhostではなく%にしていたので、こういう表記になったようだ。そこで、localhostを指定することによって、うまく確認することができた。 ちなみに、前回最新IT技術情報_arkgame.comさんの記事では、GRANT ALL PRIVILEGESした後にFLUSH PRIVILEGESを実行して権限付与を確定させていただのだが、筆者の場合はFLUSH PRIVILEGESせずにPCの電源を落とすだけで権限付与が成功していた。これについてはMy Opinion is my ownに詳細な記載があったため、知りたい方はぜひ見に行ってくださいね。 3. データベース内でユーザが切り替えられない せっかくユーザを作成して権限を付与したので、これからそのユーザになってテーブルを作ってやるぞー!となった矢先、mysql内でcurrent userを切り替える方法が探しても見つからない。これは何故だ?と思って同じような質問を見に行くと「クライアントに何を使用しているのか不明ですが、利用ユーザは MySQL への接続の際に指定しているので、一般的には一度接続を解除して、その後、再度別ユーザを指定して接続しなおします。」との回答が。なるほど、そういう思想なんですね。 ということで、一旦EXITを入力してmysqlから脱出した後、今度はRWWとしてログインすることにします。 これによって、確かにRWWとしてログインできたようです。 4. データベースの作成 未だにデータベースという概念が分かっていませんが、テーブルデータの塊のことを指すのでしょうか?一応ChatGPTくんもDBはTableを束ねる上位存在というようなことを言っているので、その認識のまま進めていきます。 ちなみに今回扱えるようにしたかったデータはテーブルデータだったため、正直な話データベースを構築して、そこからテーブルに参照させることの意義が理解できていないです。そんなこんなでテーブルから作ろうとしたら怒られたので、愚直にDBから作って行きます。…

DBMSを触りたい!①

こんにちは。今日は表題の通り、DBMSを触りたいと思います。今日中に習得して、今後自分のサービスにもどんどん適応していくぞ! 1. ローカル環境へMySQLを入れる まずは勉強のため、ローカル環境へMySQLを入れていきます。参考にしたサイトはここです。 1.1 インストール ここまでは特に問題なく進む感じです。ただし、ここで気になったのはPerlの文字。もし、今後Perlレスのシステムを作ろう!となったときにはMySQLは避けたほうが良いのかな?なんて思いました。オリジナルOSはなるべく少ない言語で動作させたいし、サービスだってなるべくメンテしやすいものにしたいからね。 以下のパッケージが新たにインストールされます: libaio1 libcgi-fast-perl libcgi-pm-perl libfcgi-bin libfcgi-perl libfcgi0ldbl libhtml-template-perl libmecab2 libprotobuf-lite23 mecab-ipadic mecab-ipadic-utf8 mecab-utils mysql-client-8.0 mysql-client-core-8.0 mysql-server mysql-server-8.0 mysql-server-core-8.0 2. MySQLを動かしてみる どうやらうまくインストールできたので、次はMySQLを動かしてみます。説明を読む感じ、パット見は内部で用意されたサーバに入って、コマンドなどで指示を送る方式のようですね。これは別にローカルでなくても同じ動作で作業できるのでマシンやOSを抽象化できていると言えるのかもしれません。 もとのサイトに習ってユーザを追加している様子が下記になります。今回は外に公開していないMySQLサーバということで、ユーザ名等も公開しています。IDENTIFIEDのあとにはパスワードを記入するそうです。また、コマンドの終端がわかるように “;”…

Chatgpt: 神だけど嘘をつく

仕事において、コンテナ内からGithubに対してssh接続をしたいケースが発生しました。その際、とりあえずChatGPTに聞いてみるのはどうかな?と思い早速使ってみました。結果的には嘘をついたりするので素直には解決しなかったのですが、まあこれはこれで非常に勉強になりました。特に弊部署には先輩と言える先輩がいないため、自然とこの子に聞くことが多くなるんだろうなと思う次第。 それでは本題に入ります。まず、ChatGPTくんは英語が得意なので英語で質問を入力することにしています。そうした方が精度もスピードも断然良いです。下記が会話になります。 上記に対するchatGPTくんの回答はこちら ここまでの会話で、「確かにホストと共有したボリュームにしてしまえば行けるじゃん」と納得してしまいました。このあとにぶつかる大きな問題にも気づかずに….。ちなみにこのときは英語の回答を読み間違えて、コンテナ間でもssh通信するのかな?と思い素っ頓狂な質問もしています。 ChatGPTくんすごい!と思う一方で、ここの6番の回答で「そういえば。。。」となりました。SSH関連のファイルは権限管理がとても厳密で600とか400じゃないと動作しないんじゃなかったかな?そういえばDockerコンテナ内のユーザはホストのルートでは無いから、600とかに指定されてしまうと書き込めないのでは? そしてChatGPTくんとの戦いが始まった。 ここで実際にChatGPTの言うとおりにコンテナを試しに作ってみて、SSHできるか試してみました。その際、known_listが更新できない(権限が無いため)という問題に早速ぶつかりました。下記がChatGPTくんとのやり取りです。 キャプションでは解説が難しいため、ここでは本文に問題点を書いていきます。まず、解決手順そのものは非常に妥当です。鍵が正しいかを確認し、その権限が合っているか確認する、この動きは間違っていないと思います。ただし、確認方法が今回の本題になります。コンテナの中から見ると確かに権限は合っています。しかし、これはコンテナのルートユーザを基準にした権限ではなく、ホストのルートユーザを基準としているため、コンテナのルートユーザには書き込み権限が無いです。つまり、この手順に沿って見ていっても解決できないのです。少しコーナーケースだと性能が落ちるのかも知れない・・・。 そんなこんなで、 こんな感じで解決していくことになりました。以降はDockerfile内にどうやって現在のユーザのホームディレクトリ(通常~や$HOME)を記載するかについて、質問しています。これはsshのデフォルト保存先が~/.ssh/であることに起因しています。 ちなみにこの回答、全くの嘘です。ひどい話です。全然これでは機能してくれないので注意。 尤もらしく書いているので騙されてしまいましたが、実際にやってみるとことごとく失敗します。そこで、ChatGPTくんに事実を伝えました。 ということで、docker buildコマンドには –build-argsオプションがあり、これで指定できる変数はDockerfileであらかじめARGで指定できるのでいかが?と返ってきました。確かにこれは使えそう!ありがとうChatGPT! 結果的には他の鍵がおいてある~/.ssh/を明示的に指定するのも怖かったので、build argを使用しない方法で実装することになった。ただ、知識がついたのでこういう試行錯誤のお供にChatGPTは最高だね!という結論にします。 これからもよろしく!ChatGPTくん。そして、ここまで読んでくださった辛抱強い皆様に感謝!

何故 時間が足りなくなるのか?

小さな気づきを得たのでここに日記という形のメモを残します。 今回気づいたのは「娯楽に時間を費やしすぎると、あっという間に時間がなくなる」ということです。「何を今更」と思うかも知れないですが、やはり経験に勝る学習は無しということで、解説します。 気づいたのは、日曜日の夜に実家から帰宅する途中でした。週末に実家に帰ったのですが、あっという間に月曜日になっていることに気づきました。それで、今週末にやったことを振り返って、この時間経過が妥当かどうか考えてみました。しかし!ほとんど碌なことをやっていないことに気づきました。というか、家族ぐるみでポケモンGoをやっただけ・・・。非常にもったいなかったと感じました。 さらに掘り下げて考えてみると、ここ最近は落ち着きつつありますが、少し前は仕事が忙しく、職場の人間関係(というか上司1人だけ)で悩んでいて、私生活がボロボロになっていたことを思い出しました。そして、計画性のない生活に慣れきってしまっていて、時間の使い方が下手になっているのではないか?と仮説を立てました。そして、時間を効率良く使う方法について再検討することにしました。 まず、「時間を最も効率良く消費する」ことに対する定義から考え治すことにします。森羅万象は物理法則に従っていますので、私を含む人類も時間効率を最適化して生きていると雑に仮定します。すると、「時間を無駄にした」と感じる原因は、「自分が無意識で考えている時間効率の関数」と、「理性での評価関数」が異なっていることで、無意識の関数で最適化すると理性での評価が良くなくなるという表現が成立するのではないか?と雑に考察できます。 では、考察をもとにして解決策を考えた結果ですが、まずやるべきことは「理性での評価関数」をしっかり理解することだと思いました。ブログを書くことは10点/h、Pythonでコードを書くことは30点/h、英語の勉強は5点/h、C++でコードを書くことは25点/h、自分の脳内ストーリを考えるのは5点/h、バドミントンクラブに行くことは40点/h・・・など、何かしら自分の達成感の持てる事象の得点/時間の効率を理解しておくこと。これが大切なのだと感じました。 とすると次にやるべきことは、自分の得点効率表を書き出してまとめることなのでしょうね。とはいえ、今自分のすべての得点表をかける気はしないので、ちょくちょく更新をかけていくことが大切なのでしょうね。 それでは最初に戻って。今回気づいたのは「娯楽に時間を費やしすぎると、あっという間に時間がなくなる」ということでした。これは、無意識の評価関数において、娯楽(ゲーム)は満足度/時間の効率が非常に良い一方で、自分の理性から見ると得点が低い選択になっているのではないか?なので、自分の理性の評価式を理解して、係数の大きくなる行動を選択することによって、時間効率を上げる≒何もせずに時間が減るという事象を減らすことができるのではないか?という話でした。 しかし、こんな時間まで起きていることは理性的ではないですね。明日からはこの前心療内科からもらった不眠治療の薬を飲んで寝なければ。それでは、また次回!