Seam Carving – アスペクト比を維持せずに画像を縮小する
Seam Carving は画像の中で最も重要でないピクセルの経路を見つけて削除し、アスペクト比を維持せずに画像を縮小する。この記事ではアルゴリズム全体を WebGPU の compute shader で書き直し、実際に操作できるデモを付けた。
Seam Carving は画像の中で最も重要でないピクセルの経路を見つけて削除し、アスペクト比を維持せずに画像を縮小する。この記事ではアルゴリズム全体を WebGPU の compute shader で書き直し、実際に操作できるデモを付けた。
かつて僕は小さなツールを自作し、四半期で自分がどれだけPRに貢献したか、レビューコメントをどれだけ残したか、チケットをどれだけ消化したかを集計して、上司にアウトプットを証明しようとしたことがある。上司は淡々と、評価はアウトプットだけで見るものではないと言った。数年後、僕はようやく理解した――測定が目標になるとき、それはもはや良い測定ではなくなるのだ。英国の窓税、ハノイのネズミ駆除の報奨金から、現代のPR数による開発者評価に至るまで、そのメカニズムはまったく同じだ。
ウェブページに画像を1枚置くのはフロントエンドにとって最も簡単なことだが、リサイズや各種フォーマットの生成、さらにはトラフィックの負荷に耐えることまで完璧にやろうとすると、実際には一つの包括的なソリューションが必要になる。僕はその後、すべて Cloudflare Images に任せるようになり、オリジナル画像1枚だけを渡すようにしている。
Access Key は AWS において見落とされがちなセキュリティリスクだ。OIDC と IAM Role を組み合わせることで、GitHub Actions にシークレットを一切保持させることなく、安全に AWS リソースを操作できるようにする。
バックエンド開発で度々直面する主キーの決定。auto incrementを使うべきか、それともUUIDか?衝突への懸念は?UUIDv7とcreated_at + インデックスの性能差はどれほどか?実際に2,000万件のデータで検証したベンチマークと設計上の意思決定を解説する。
本記事はIT 2023 鉄人レースの記事:キーボード沼入門ガイド - ファームウェア編
本記事はIT 2023 鉄人レースの記事:日本の電気事情について少し話してみる
本記事は IT 2023 鐵人賽の記事:キーボード沼入門ガイド - ハードウェア編
本記事はIT 2023 鐵人賽の記事:充電器の原理
本記事は IT 2023 鉄人賽の記事:日本のテレビ字幕を解析する旅
本記事はIT 2023 鉄人レースの記事:現代社会を駆動する半導体 (2)
本記事は「IT 2023 鉄人レース」の記事:ややマイナーなネットワーク理論 (1)
本記事は IT 2023 鉄人レースの記事:少しマニアックなネットワーク理論 (2)
本記事は IT 2023 鉄人賽の記事:現代社会を駆動する半導体 (1)
本記事はIT 2023 鉄人コンテストの記事:JPGと離散コサイン変換
本記事は IT 2023 鉄人レースの記事:逆行列は想像ほど良くない
本記事は IT 2023 鐵人賽の投稿記事:プログラミングに関連するゲーム3選 (2)
本記事は「IT 2023 鉄人レース」の記事:特異値分解
本記事は IT 2023 鉄人レースの投稿記事:数値的安定性と誤差
本記事は IT 2023 鐵人賽の記事:興味の赴くままの研究の旅
問題の説明を読んだ後、頭を使う必要があったのは尾の移動方法と隣接判定をどう決めるかという点だった。僕のほうでは単純な2Dベクトルを直接書いて実装した。
C言語では、strlen を使って文字列の長さを取得できるが、使用時にはいくつか注意すべき点がある
マイクロコントローラであっても様々な割り込み(interrupt)が存在するため、コードの実行が途中で中断される可能性がある。atomicを使うことで
HHKBキーボードに変えてから矢印キーがなくなり、テキスト編集時に自然と矢印キーを使う回数を減らしたいと思うようになった。様々な外的要因の影響から僕がVimを学び始め、VSCodeと組み合わせると
Polly は Amazon のクラウドプラットフォームが提供するサービスの1つで、テキストを音声に変換(TTS)できる。テキスト音声変換自体は珍しいものではないが、Polly は文構造に応じて極めて自然な音声を生成できるため、語学学習者にとって大きな福音となる。それだけでなく、字幕の音声化、台本、ナレーション、対話、さらには Podcast の収録に直接 Polly を使うことすら十分可能であり、応用範囲は非常に広い。
AVRでUSBを扱う際のポイントはただ1つ、チップ自体にUSBのネイティブサポートが内蔵されているかどうかだ。現在はおそらくATmega32u4しか生産ラインが残っておらず、しかも半導体不足の煽りを受けて手に入れるのも難しいだろう。
2021年初頭にRaspberry Pi財団がPicoマイクロコントローラを発表した。価格は非常に安く100台湾ドル強で手に入るが、その中には非常に興味深い機能「PIO」が搭載されている。専用に特化されたアセンブリ言語とアーキテクチャを通じて、メインプロセッサのリソースを消費することなく様々な通信プロトコルを実装できる。
これまでターミナルを使うときは、いつも iTerm2 のタブ機能を使ってタブを切り替えていた。そうすること自体には特に大きな問題はなかったが、`tmux` の便利さを知ってからはターミナルの操作をすべて tmux に移行した。
メンタルモデルとは、物事がどう進展するか、あるいは物事がどのように機能するかを予測する認知プロセスのことだ。少し学術的に聞こえるかもしれないが、例えば画面上でボタンのUIを見たとき、僕たちはそのUIがクリック可能であり、クリック後には一連のイベントが発生すると予想する。そのため、ユーザーはそのUIが期待通りに動作しないと混乱を覚える。
今回のプロジェクト開発において、従来の純粋な静的ランディングページに対して、企画側からAPIを叩いてデータを動的に取得・更新したいという要望が出た。さらにページのインタラクションも増えてきたため、従来のpug+webpack+jQueryによる純粋な静的ページでは対応しきれなくなり、僕たちは新バージョンの開発でnext.jsを導入した。そして、サーバー構築における試行錯誤の旅が始まった。
ここ数ヶ月はちょうど大型機能のリリース時期だった。次のプロジェクトに移るまではそれほど大きな開発はなく、主に細かなバグ修正や既存機能の改善を行っていた。開発スケジュールがそこまで過密ではなかったこともあり、今期はプロセスの改善により多くの時間を割くことができた。
最近、日常のタスクを管理するちょっとしたツールをKotlinで開発した。主にバックエンドの同僚たちにも一緒にメンテしてもらいたいという思いがあり、また新しい言語を学ぶことで常に新しい刺激やアイデアが得られること、そして社内のJavaやJVMの達人たちから知識を吸収する良い機会でもあったからだ。
今回の僕たちの目的はアイデア全体を実現することなので、WiFiとBluetoothがすでに内蔵されているESP32開発ボードを購入して開発を進めた!
本記事では、Arduinoや言語への不慣れさから踏んでしまったいくつかの落とし穴について語る。
ネットワークにおいて、最も一般的なのはおそらくTCPプロトコルだろう。データ転送の正確性を保証するためには、データに誤りがなく、双方がメッセージを受信できるようにするためのさまざまな仕組みが必要となる。ハードウェアの世界でも同様のことが求められる。
Arduino、ESP32、センサーを使って空気質モニタリングアプリを作成!空気質とは言っても、実際に実装したのは二酸化炭素濃度と温湿度のモニタリングだけだが、センサーさえあれば他の項目を追加するのも難しくはない。
ゼロから始めるデータサイエンスの旅
Typoraは僕が愛用しているmarkdownテキストエディタだ。ただ、使っている中で一つ悩みがあった。それは画像のアップロードについてだ。というのも、Typoraは画像のパスをmarkdownに挿入するだけなので...
かつて CI を導入する際、チーム内では CircleCI、DroneCI、Jenkins などのソリューションをめぐって議論(あるいは喧嘩)に時間を費やしていたかもしれない。だが、チームのコードが GitHub でホスティングされているなら、GitHub と簡単に CI を統合できる。万能薬や決定打とまでは言えないかもしれないが、テストの実行や push and deploy といった一般的なシナリオであれば、かなり手軽に実現できると僕は思っている。以下で詳しく紹介しよう。
画面録画が面倒だったので、Simulatorで録画できないか調べてみたら本当にできた話。
xxd はバイナリファイルを確認できる Linux ツールだ
テストを書くことはずっとソフトウェアエンジニアリングに不可欠な一部とされてきたが、書き続けていてもなぜかバグは依然として発生し、QAの課題も減らないのはなぜだろうか?
iOS 11.0ではCoreNFCを通じてNFCタグの読み書きができるようになったが、交通系ICカードなどの情報は読み取れなかった。ICカードをiOS端末で読み取れるようになったのはiOS 13以降のことだ…
iOS 11.0からCoreNFCを通じてNFCタグの読み書きができるようになったが、ICカードなどの情報はまだ読み取れず、iOS 13になってようやくICカードの読み取りが開放された。ちょうど以前からNFCにかなり興味があり、自分でSuica(日本の交通系IC…
数ヶ月前、Golangで環境変数を設定する方法についての記事を書いた。環境変数をいかにエレガントに設定するかは非常に重要なことなので、それを実現するための簡単な関数を書いた。当時の考えはシンプルで、対応するconfigファイルが提供されていれば、その中のkey/valueをos.Setenvで設定するというものだった。その後、アプリ全体で…
Golang では、初期化時に値を代入しないと zero value が使われる。しかし、しばらく使っていると、毎回 zero value で代用していると、ユーザーが値を入力しなかったために zero value になったのか、それともユーザーが元々 zero value を入力したのかが分からなくなってしまうことに気づく。このとき、Email や Name…
この記事は「How to collect, standardize, and centralize Golang logs | Datadog」を読んだまとめである。ログを使用する際、通常いくつか注意すべき点がある:ログを引数として渡し、必要な時に渡す方法、context で統一してラップし…
Go言語において、interface{} 型に対しては型アサーションを行うことで、その interface が特定の型であると仮定し、その型が持つメソッドを操作できるようになる。このコードは元の interface を…
最近、プロジェクトを Ruby on Rails から Go 言語へと徐々に移行している。少し不恰好な構文を書いてみてどんな感じか試してみたいというのもあるし、Go 言語の威力や、既存のフレームワークがない状況でどのようにコードを構成すべきかを体感してみたいという思いもある。今回は goworker を紹介する。これを選んだ理由は「go worker」で検索して…
数か月前あたりから、僕の Google Chrome で原因不明の connection refused が頻繁に発生するようになった。特定のウェブページが開かないことがあるのに、他の端末から開くと正常に表示される。変だなとは思いつつも、サーバー側の設定の問題かもしれないし、そこまで大きな困り事でもなかったので、そのまま使い続けていた。カスタムドメインを設定…
現在人気のあるsqlパッケージを調べてみたところ、connection lostが発生した際に即座にエラーを通知してくれるような機能がほとんどないことに気づいた。例えばNode.jsのmysqlであれば、connection.on(‘error’)でエラーをリッスンできる。しかしgolangでは…
プロジェクト開発では異なる環境を切り替えることがよくあり、そのため通常は環境変数を設定する。だが、コード内に直接ハードコードしてしまうと毎回修正するのが非常に面倒だ。動的に環境変数を渡すことができれば、不要な修正を大幅に減らせてコードも比較的クリーンになる。golangでは一般的にflagパッケージを利用して…
Golangにはmakeとnewという2つの予約語があり、Goを学び始めた頃に混同しやすいところでもあるため、ここに簡単なメモを残しておく。newは型のメモリを割り当てて初期化し、ポインタ(メモリアドレス)を返す。そのため通常はポインタ変数でnewされた型を受け取る。特に注意すべき点として、newは自動的にゼロ値(zeroed value)で初期化するため…
フロントエンドエンジニアは、チーム内で最も頻繁にプルリクエストを出す人になりがちだ。自分のPRがテストされやすく、レビュアーにとってもレビューしやすくなるよう、いくつかの注意点をまとめた。プルリクエストの説明、このプルリクエストの目的。例えば:レイアウトの修正…
データベースにおいて、クエリ効率を向上させるため、データ量が多いときにはインデックスを作成することでデータベースの検索効率を高速化できる。本記事では PostgreSQL の index について探求する。大半の状況では、直接 `CREATE INDEX` 構文を使用するだけで一般的な開発シナリオに対応できるが、PostgreSQL では実は多くの異なる index type が提供されている。
Medium自体はコードブロックの編集に対応していない。その理由は定かではないが(おそらくエンジニアが主要なターゲット層ではないのだろう)、コードをハイライト表示したい場合、画像を直接貼り付けるか、Gistに貼り付けてから埋め込むかという方法をとることになる。
Expressでの開発時、エラーが発生すると通常はerror pageにそのまま出力されるか、本番環境なら404や500ページに直接リダイレクトされる。これは取り立てて言うほどのことでもないかもしれないが、正直なところ、あのような画面を見てテンションが上がるだろうか? default error…
機械学習において、特徴量の数が多すぎると、過学習(overfitting)などの問題が発生する可能性がある…
現在所属している会社では、ローカルのターミナルで直接 cap staging deploy コマンドを実行している。capistranoは自動デプロイツールとして非常に便利だが、いくつかの問題に直面することが避けられない:チームの全員が同じ環境を持っているわけではない、みんながデプロイした結果、staging環境に今どのブランチがあるのか完全に分からなくなる…