ホームページの更新が面倒だった

はじめに  最近は、DKIMやらDMRACを設定していないメールの存在価値がなくなりつつあります。このブログサイトことWordPressから送られてくるメールについても例外ではなく、なんなら結構前からメールが届かない状態でした。それでも、新しいメンバーが増えたときや、メンバーがパスワードを忘れたとき以外はメール機能を全く使用しないので、そこまで問題はありませんでした。  けれども、影響がないからと言って放置しておくのも問題と考えたため、メールの問題は外部のメールサーバーに転送してもらうことで解決を図りました。まあ、今回の本題はメールではないのですが。     FTPってめんどう  私がこのサイトの運用を担当することになってから、そろそろ1年になると思います。精力的に運用に取り組んでいたかと言われれば全くそうではなく、強いて言えば「革命祭」のページを追加したくらいです。  ページを更新するときはどのような作業を行うのか、簡単に説明します。   1 ダウンロード済みのページソースを編集する 2 ローカルで仮想環境を立ち上げ、動作を確認する 3 サーバーの管理画面からFTPでアクセスできるようにする 4 FTPソフトを立ち上げて、サーバーに接続する 5 該当のページが格納されているフォルダまで移動し、アップロードする 6 本番環境で動作を確認する    そんなに難しくなさそうと思った方もいるかもしれません。私も最初の方は面倒ではありませんでした。しかし、最近になって急にこの開発フローが面倒に感じるようになってしまったのです。一番面倒なのは、サーバーのパスワードをパスワードマネージャーからいちいちコピーしてこないといけないことでしょうか。  私は断片的かつ曖昧な知識で突っ走る人間です。しーあいしーでー(CI/CD)とか、えすえすえいち(SSH)とか、どこかで聞き齧った言葉を引っ提げて、どうにかならないか考えることにしました。ただ、借りてるサーバーのプランによると、SSHでの接続はできないようでした。最初にローカル開発環境を作ったときに、データベースの中身を引っこ抜くのですら、すさまじく面倒だった記憶がよみがえりました。ところどころでVPSよりAWSやGCPが便利なことがわかる気がします。でも、スケーラビリティと使いやすさを犠牲にしても、グループで運用する場合は定額課金であるメリットはめちゃくちゃ大きいです。     git-ftp が良さそう  最初は、GitHubのメインブランチにマージされたコードが自動でアップロードされてくれないかなと考えていましたが、色々と難しそうだったので、「git-ftp」というソフトを使用することにしました。設定方法などは下記を参照ください。   『【Git】git-ftpを使ってFTPアップロード』 https://qiita.com/narcolepcy_/items/621986bfe0c2183781a1 (閲覧日:2024年1月16日)    おそらく、すべてをgitで管理させると不都合が起こるので、トップページやメンバーページのソースコードが置いてあるフォルダのみを管理することしました。あとは、gitignoreを使って面倒そうなものを弾いてよしです。     どのように便利になるのか  これの便利なところは、動作確認後は 「git ftp push」 のコマンドで自動的に差分をアップロードしてくれるところです。なので、ローカルでの動作確認からアップロードまでの面倒さがかなり少なくなります。上記の手順だと、4と5を一つのコマンドでやってくれています。  

AtCoderで茶色になりました

はじめに    私は毎学期ごとの長期休みに、何かに取り組むことにしています。去年の夏は基本情報技術者の勉強を、冬は応用情報技術者の勉強をしました。残念ながら応用情報技術者の春季試験は午後問題の点数が59点で落ちてしまったので、来月に秋試験を受ける予定です。けれども、今年の夏も冬にやったものと同じことをしても、打ち込んだとは言えないような気がしたため、今年の夏はAtCoderを少し頑張ってみようと思いました。     取り組む前  さて、AtCoderをやろうとして最初にABC(AtCoder Beginner Contest)に何回か参加しましたが、まず気づいたことがありました。私が全くプログラムを書けないということです。一番痛感したのは、単純なソートの実装を標準ライブラリを叩くのではなく、愚直にバブルソートで書いていた点です。遅くてTLEします。そのため、最初にやった競技プログラミングの勉強は、標準ライブラリを用いてソートを行う方法でした。これがおそらく7月の真ん中辺りだったと思います。     何をしたか  最初の方は、有名な「競技プログラミングの鉄則」の星4までの問題をヒューリスティクスを除いて9割くらい解きました。そして、AtCoderのサイト上で常設されている「競プロ典型 90 問」の星4までを30問目まで進めました。その後は実際の問題を解いた方が良さそうと考え、直近のABCの過去問を少なくともC問題まで、できればD問題までを解くようにしました。「AtCoder Problems」によると、7月終わりから1ヶ月間でおよそ150問くらい解いたみたいです。いつの間にか「Longest Streak」という値が1ヶ月分を超えて、結構順位が上がってきたので、最近は忙しくても最低1問解くようにしてます。多分、どこかでやり忘れるとは思いますが……       結果  一回レートがあまり伸びなかった回がありましたが、それ以外では50前後ずつ順調に伸びていき、9月2日のABCで茶色になることができました。しかし、まだ本番でD問題を通したことがないので、もう少し勉強しないとすぐに頭打ちになってしまいそうな感じがします。    最初の方は、Go言語のスライスの意味のわからなさや文字列の扱い方に悩まされましたが、個人的なライブラリの整理や簡単なドキュメントの整備などをして対応しました。他の言語では標準ライブラリを叩くだけのものが、Go言語では結構な分量を書いて実装しなければいけない点は少し大変でした。    プログラムの問題を解くサイトではAtCoderの他にPaizaもやっていましたが、このサイトは一回Sランクを取ってしまうと、頑張るインセンティブがなくなってしまって、それ以降は全く開いていません。PaizaでSランクを取れても、当時のAtCoderランクは灰色だったので、いかにAtCoderのレベルが高いかがわかりますね。   ・AtCoder https://atcoder.jp/users/kunaisn  

この「コード」を額に入れて飾りたい

はじめに    近況報告になりますが、サムネイル制作者兼HP管理者だったましろさんが退会されたことで、私が今年の4月からましろさんのポジションにそのままスライドする形になりました。ですので、4月1日の「紫電改パート2」の動画からサムネイル制作を担当しています。最初は全く使い方が分からなかった「Adobe Illustrator」ですが、最近はある程度基本的なことはわかったような気がします。ましろさんからいただいたテンプレートを元に、毎回楽しくサムネイルを作っています。       Golang    最近はプログラミング言語のGoにハマっていて、Javaから浮気しそうな感じです。言語としては、Javaよりは若干レベルが低い感じがしました。ポインタの概念がある程度には低レベルですね。Javaより低レベルですけど、勉強の難しさはJavaより高い感じがします。Java8のドキュメントは日本語で転がっていますし、Javaの解説ブログ、動画の類いもたくさんあります。しかし、Goのドキュメントは多分英語しかないので、標準ライブラリの仕様を見に行く時に若干めんどくさいのです。まあ、日本語の解説ブログが全くないわけではないので、色々探してみると参考になるものがたくさんあったりします。   ・Java8のドキュメント(日本語) https://docs.oracle.com/javase/jp/8/docs/api/overview-summary.html ・Goのドキュメント(英語) https://go.dev    このブログを書いている10日くらい前から勉強を始めましたが、色々な方法で勉強しています。大学の課題を捌きつつ別のこともやっているので牛の歩みですが、主に下記の2種類の方法をやっています。    ・「A tour of Go」をすすめてみる。  ・競プロ(「AtCoder」とか「Paiza」)をやってみる。   「A tour of Go」  日本語で書かれたGo言語のチュートリアルです。ブラウザ上で記述して実行して結果が得られるので、実行環境をインストールしなくても使えるというのが利点でしょうか。現時点で、大体半分くらいやりました。 https://go-tour-jp.appspot.com/welcome/1   競プロ  以前Javaで書いたものをGoで書き直すとか、普通に新しい問題をやったりしています。あ、もちろん難しい問題は、そもそもJavaですら書けないのでやってません。Paizaで言うところのD,C,B問題、AtCoderの「AtCoder Beginner Contest」のA,B問題あたりをやっています。       この「コード」    結論から言えば、このブログのタイトルの「コード」とは、標準入力を受け取る一連の処理のことです。このブログを額に見立てて最後に飾っておきましょう。  勉強を始めてから昨日までは「fmt.Scan(&n)」で何も問題がなかったのですが、今日解いた競プロの問題では使えなかったのですよね。短い文字列であれば問題なくて、長いと不具合が生じるのではないかと、私は思ったりしました。これを解決するために、いろいろネットの海をさまよって、それっぽいコードを見つけてきました。しかし、意外とこのコードが複雑で理解に少し時間がかかってしまいました。  そもそも、標準入力から文字列を受け取るというのは競プロの問題では初歩の初歩といいますか、前提条件、出来ないやつは提出することを許さず、的なものです。したがって、この理解したものを消してしまうと、次に書く時に覚えていられる不安になりました。そういうわけで、この初心者コードを貼り付けておきたいと思うに至ったわけです。   package main import ( “bufio” “fmt” “os” “strconv” ) func main()… Continue reading この「コード」を額に入れて飾りたい

Discordで、Googleスプレッドシートを利用した「通知Bot」を作る

今日話すこと まえがき  『世界史べーた(仮)』では、毎週の動画やブログ投稿のタスクが各メンバーに割り振られています。それぞれのタスクの締め切りや予定のアナウンスを「Discord」サーバー上で自動的に送信したい。    ということで、その仕組みを作ったので大まかな方向性を記したいと思います。今回は、Googleドライブ上のスプレッドシートでタスクを管理している人に有用な情報だと思います。    ダイスボットを作るわけでもなく、ただ一定のアルゴリズムに従ってメッセージを送信するだけなので、Webサーバーを設置する必要はありませんでした。   必要なもの  ・GoogleアカウントとGoogleスプレッドシートで管理された「タスク管理表」  ・DiscordアカウントとDiscordサーバー(ウェブフックを作成できる権限が必要)  ・やる気     「Discord」にメッセージを送る Discord上での作業  まず、Discord上でウェブフックを生成します。  「ウェブフックを作成」を押した後の画面で、「ウェブフックURLをコピー」をクリックして、どこかにメモしておきましょう。   Googleスプレッドシートでの作業  タスクを管理しているスプレッドシートを開き、メニューから拡張機能の「Apps Script」を開きましょう。  すると、この画面が出ると思います。  ここに、こんな感じで文字を書きます。   const WEBHOOK_URL = ‘[生成したウェブフックのURL]’;     const payload = {       username: ‘[botの名前]’,       content: ‘[送るメッセージ]’,     }       UrlFetchApp.fetch(WEBHOOK_URL, {    … Continue reading Discordで、Googleスプレッドシートを利用した「通知Bot」を作る

ドイツ三〇〇諸侯 一千年の興亡

かつてのドイツで300もの領邦に分かれ、繰り広げられた権力争い。破天荒で支離滅裂な諸侯達が跳梁跋扈する激動の時代を活写する。 【アマゾン書籍情報から引用】   神聖ローマ帝国の本 この本のお勧め理由は、とにかく読みやすいことです!   小難しい単語がずらずら並んでて読んでるだけで疲れる類の本ではなく、文字が大きくページ数も多くないです。ただ、内容がガチガチに充実しているかといえばそうではないように感じました。   内容は神聖ローマ帝国内の有名な家系を一章で一家ずつ取り上げているものです。神聖ローマのことについて何か知りたいと言う人には、買って損ではない本だと思います。   書籍情報 著者:菊池 良生 翻訳者:– 編集者:– その他:– 出版社:河出書房新社 出版年:2017/5/26 ISBN-10:4309227023 ISBN-13:978-4309227023