技術系

いかがでしたか?

【Go】xmlのstruct定義ベストプラクティス

Goのxmlパーサである、encoding/xmlのパースベストプラクティス(自分調べ)です。 通常のパース <data> <item> <title>hogehoge</title> <link>https://cateiru.com</link> </item> </data> type Data struct { Item struct { Title string `xml:"title"` Link string `xml:"link"` } `xml:"item"` } go.dev 複数…

【Go】GoでISO8601拡張形式(タイムゾーンあり)をパースする

2022-12-15T06:12:47+09:00の形式をパースします。 TL;DR d := "2009-10-01T13:48:00+09:00" parsedTime, err := time.Parse(time.RFC3339, d) ... Playground go.dev

ITエンジニアに向ける**料理**のすゝめ

この記事は Calendar for 東京電機大学 | Advent Calendar 2022 - Qiita の10日目です。 ITエンジニアしていますか?私は日々、クソコードを量産したり研究室で発狂しています。 さて、このブログではITエンジニアに向けて料理という趣味について紹介をして…

Wi-Fiはチャンネルも大切

この記事は Calendar for 東京電機大学 | Advent Calendar 2022 - Qiita の9日目です。 みなさん、Wi-Fi使っていますよね?Wi-Fiを選ぶ際にはどういう指標をみて選んでいますか?おそらく、一番はacやbeなどというIEEEの規格で選んでいることが多いかと思い…

「茨城県」を「魅力度最下位県」にするブックマークレット

この記事は、Calendar for 東京電機大学 | Advent Calendar 2022 - Qiita の8日目です。 昨日は、 埼玉をダ埼玉に変えてしまうブックマークレットを作成しました。そして、今回は、私が生まれ育った「茨城県」を使って遊んでいこうかと思います。 魅力度ラン…

「埼玉」を「ダ埼玉」に変えるブックマークレット

この記事は Calendar for 東京電機大学 | Advent Calendar 2022 - Qiita の7日目です。 皆さん、埼玉県民していますか?私は、2019年から埼玉県民の一員として日々精進しています。 その、暮らしの中で私はあることに気づきました。 埼玉県民は自虐ネタが好…

WebClassのセッション維持方法を見る

この記事は、 Calendar for 東京電機大学 | Advent Calendar 2022 - Qiita の6日目です。 昨日はUNIPAのセッション維持方法を見ました。今日は、東京電機大学で使用しているもう一つのポータルサイトであるWebClassのセッション維持方法を見てみます。 els.s…

UNIPAのセッション維持の方法を見る

この記事は、 Calendar for 東京電機大学 | Advent Calendar 2022 - Qiita の5日目です。 東京電機大学では、学生用のポータルサイトで日本システム技術株式会社のUNIVERCAL PASSPROT RX(以下、UNIPA)を導入しています*1。 https://portal.sa.dendai.ac.jp…

ぼくがかんがえるさいきょーのpasskey

この記事は Calendar for 東京電機大学 | Advent Calendar 2022 - Qiita の4日目です。 昨日は、HIBIKI-CUBEさんの ESP32でYDLiDAR GS2を使う - Qiita でした。 passkeyというものを知っていますか?passkeyとはFIDO/WebAuthnという仕様に沿って実装される機…

ボブおじさんが推しているクリーンテスト

この記事は Calendar for 東京電機大学 | Advent Calendar 2022 - Qiita の2日目です。 昨日は、 OSSにコントリビュートしたのとzodのすゝめ - blog.cateiru.com でした。ぜひ観てください。 この記事はClean Codeのメモです。詳しくは読んで下さい。 Clean …

OSSにコントリビュートしたのとzodのすゝめ

この記事は、 Calendar for 東京電機大学 | Advent Calendar 2022 - Qiita の1日目です。 皆さん、OSS活動していますか?私は、最近、ealush/emoji-picker-react: React Emoji Picker に対してバグ修正のPRを投げました。 github.com この記事では、このバグ…

ポートフォリオサイトを更新しました

私のポートフォリオ(?)サイトである cateiru.com をアップデートしました。 アップデート内容箇条書き 管理者ページからすべての情報を変更できるように変更 お問い合わせを送信すると、Discrod、Slack、メールに通知できるように 制作物の詳細を別ページ…

【Go】mysql.Configを使用してソケット接続のDSNを書く

目的 GCPのCloud RunからCloud SQLに接続するためにはソケット接続する必要がある。 SQLのDSNは直書きではなくmysql.Configで定義したい。 TL;DR config := mysql.Config{ DBName: "[database name]", User: "[user]", Passwd: "[password]", Addr: "[unix s…

【Go】GoでClient Hintsを扱う

GoのClient Hintsパーサを書いたので使い方メモ github.com インストール 使い方 例 技術的な話 バグ報告など リンク GitHub ドキュメント インストール go get github.com/cateiru/go-client-hints/v2 使い方 goclienthints.Parse(&r.Header)のようにして引…

【Go】entでスキーマファイルを出力する

TL;DR entには全体のスキーマを出力する機能はない 空のデータベースに対してマイグレーションDiffを作成して.sqlファイルに出力する ctx := context.Background() db, err := ent.Open("mysql", "docker:docker@tcp(localhost:3306)/em?parseTime=True") if…

はてなブログで見出しをクリックするとリンクをコピーできるスクリプトを作った

2022年の7月に、はてなブログのアップデートで全ての見出しにid属性が付与されるようになりました。 staff.hatenablog.com もともとは、見出しのid属性は目次をつけたときしか付与されていませんでしたが今回全てに付与されるようになったことでどの記事でも…

ufwでアクセスをtailscaleのinterfaceのみに変更する

自宅でNAS兼、検証機としてUbuntuを運用しているが、公開LANなどを使用していて接続はtalscale経由でVPN貼っているものしかつなげたくないという場合の備忘録です。 TL;DR ufwのallowでfromを100.64.0.0/10にする。 動機 賃貸物件で「インターネット無料」と…

OpenEEWの仕組みを理解する

OpenEEWというものを知っていますか? OpenEEWはオープンソースで開発されているEEW(緊急地震速報)システムです。 これを使用することで、日本のように地震警報システムを持たない国でもユーザが地震感知デバイスを自宅に設置することEEWを出せるようにな…

ORMライブラリを使うときの特殊なマイグレーション施策

皆さん、ORMライブラリは使っていますか?私は、最近Goでentを使ったアプリケーションを開発しています。 そこで、SQLのマイグレーション方法についてSQLサーバーが特殊であるため簡単にできなかったため備忘録として残そうかと思います。 環境 プログラミン…

【懺悔】ミスってPi OSのリポジトリにPRを作成してしまった

TL;DR 研究で、Raspberry Pi OSのカーネルに別の変更*1をマージした 脳死でPRを作成したらフォーク元のraspberrypi/linuxのブランチにPRを作成してしまった github.com 謝罪 ほんとうに申し訳ないと思っている。すまん どうすれば良かったのか PRを作成しな…

タイムライン実装するのって意外と難しいよねって話

最近、大学のプロジェクト個人的な趣味でWebアプリを作っています。どういうものかというと、「行ってみたいのに一人で行く勇気が持てない」お店に一緒に行ってくれる人を探せるサービスです。 そのなかで、ホームのページを作成する際Twitterのようなタイム…

GitHubのメールは開封チェックを行っていて、開封すると通知が既読になる

GitHubヘビーユーザーなら気づいたことはあると思うが、通知メールを開くをGitHub側の通知が既読になる。 これ、疑問に思ったことは無いだろうか。この記事ではどういう方法で開封チェックを行っているのかを見ようと思います。 TL; DR imgタグで1x1 pixelの…

nodeのargon2パッケージはAlpineで実行するとSIGSEGVエラーになる問題

7/20 追記 原因は、ビルド時と実行時のnodeのバージョンが違うことで発生する問題のようでした。 ビルド済みバイナリでは、node14でビルドしており実行は16の場合に問題を再現することができました。 解決策は、ビルド済みバイナリは使用せずにソースから直…

Cloud StorageのFake Serverをdocker-composeで実行する

Cloud Storage*1使っていますか? 私は最近、画像の保存場所によく使っています。 最近使ったものだと、大学のプロジェクトで作っているWebアプリのユーザアバターを保存する場所として使っています。 github.com さて、このCloud Storageですがテストを書い…

MySQLのテーブルをGitHubリポジトリで操作する

最近、趣味アプリ用にCloudSQLでSQLのサーバを作成しました。 そこで、SQLのマイグレーションを自動化するべくGitHubのリポジトリで操作しようと思います。 以下の記事を参考にしました。 blog.fukkatsuso.com 作成したリポジトリは以下です。 github.com Cl…

ぼくがかんがえたさいきょうのプログラミング言語べんきょーほうほう

エンジニアは新しいものが好きである*1。そのため、新しいものを使うために新しい言語を習得するということは日常茶飯事である。 このブログでは私が新しくプログラミング言語を勉強する際に実施している勉強法を書く。 TL;DR 公式のドキュメントを眺める 他…

備忘録: TypescriptでのRecoilとLocalStorage接続

recoiljs.org const localStorageEffect = <T>(key: string): AtomEffect<T> => ({setSelf, onSet}) => { if (process.browser) { const savedValue = localStorage.getItem(key); if (savedValue !== null) { setSelf(JSON.parse(savedValue)); } onSet((newValue</t></t>…

待ち合わせがスムーズになるWebアプリを作った

find.cateiru.com どういうもの? 相手の位置が矢印と距離で表示します。 Waaaaay!のWebアプリ版と思ってもらえればイメージしやすいと思います。 Androidは動作未確認です。多分うまく動かなさそうです。 使い方 待ち合わせを作成を押して新しく待ち合わせ…

寝る前の30分でSambaで管理しているNASをVPNから接続できるようにする

TL;DR Tailscaleを使用すると数分でVPNを構築可能 前提条件 Sambaがインストールされており、ローカル上でNASとしてすでに機能しているPC やり方 1. Tailscaleを使用してVPNを構築する これは、簡単です。Tailscaleにアクセスしてアカウントを作成します。そ…

Goのテストカバレッジ上げるのって難しくね?

Goのアプリケーションで、CodeCov使ってテストカバレッジとっているのだがカバレッジ上げるのにすごく大変なのでメモと言うか愚痴というか。 Goではエラーはタプルの返り値で帰ってきてnil判定で判別します。 このように: hoge, err := sameHandle() if err …