私が歌川です

@utgwkk が書いている

技術

3行で省略される羅生門

ある日の暮方の事である。一人の下人が、羅生門の下で雨やみを待っていた。広い門の下には、この男のほかに誰もいない。ただ、所々丹塗の剥げた、大きな円柱に、蟋蟀が一匹とまっている。羅生門が、朱雀大路にある以上は、この男のほかにも、雨やみをする市…

余白のある画像を自動で余白の少ない長方形にトリミングしたい

適当にキャプチャ・トリミングした画像の余白が多くて気になる、という出来事がよくある。こういう余白の多い画像から、余白を最小化するようにトリミングした長方形の画像を入手したい。 なんかいい方法ないのかって思ったけど、画像の凸包ができたらうまく…

手元のブランチ名リストを出力する

git branch の出力をそのまま使おうとすると、current branchを表すマーカーとpaddingが邪魔になります。 $ git branch ... * master ... sedとか駆使したら消せるんだろうけどgitコマンドだけで完結させられないか、と思ったらformatを指定すればうまくでき…

Kyoto.js 17

4年ぶりぐらいの参加だった。4年前は右も左も分からなくて一生萎縮してた気がする。 utgwkk.hateblo.jp 2020年になったにも関わらず、懇親会ではFlashの話ばかりしていた。昔はみんなおもしろフラッシュ総合サイトを見ていた、Flash職人が現代のゲームのプロ…

全角スペースはHTMLのclass名の一部になるのか

なります <span class="こちらは 全角スペースの クラスです こちらは違うクラスです">なります</span> 根拠 HTML5 W3C Working Draft 25 May 2011 より 2.5.1 Common parser idioms The space characters, for the purposes of this specification, are U+0020 SPACE, U+0009 CHARACTER TABULATION (tab), U+000A LINE FEED (LF), U+000C FOR…

VSCode Live Shareを快適に使うコツ

リモートでもペアプロ・モブプロしたい。VSCodeにはLive Shareという便利グッズがあります。こうするとうまく使えそうという使い方をいくつかシェアーします。 (業務利用の場合) 使ってよいか確認する 後述するように、仕組みを見るとwebサービスであるとい…

野生の勘だけでコードを書いているのではないかという念

自分は体系化された知識を持っておらず、全てを野生の勘だけで実装しているのではないか、という念が払えないまま幾年が過ぎた。 情報系の大学を出てみたところで、手を動かしていない領域については全くベストプラクティスを知らず、野生を生き延びるために…

git alias設定を整理したら1個を残して他はぜんぶ消せることが分かった

before [alias] bl = blame br = branch cm = commit co = checkout diffs = diff --staged dump = cat-file -p hist = log --pretty=format:\"%h %ad | %s%d [%an]\" --graph --date=short ln = log --oneline pfm = push --force origin master pm = push …

Scrapboxでgit blame的に行の最終編集者を表示するUserScript

タイトルにあるものを書きました。Scrapboxの設計思想とは真っ向対立する機能になっています。 scrapbox.io こんな感じで最終編集者が見れます。編集日時はテロメア見たらわかるじゃんとなったのでスクリーンショットを取ったあとに表示しないようにしました…

Web MIDI APIでNumark Party MixのLEDボールを点灯/消灯させる

Web MIDI APIでParty Mix光った pic.twitter.com/vPBckuTaUa— うたがわきき (@utgwkk) 2019年12月2日 www.ultramixer.com UltraMixer用のマッピングファイルを見たらいい情報が書いてあった。 176, 32, 0 でLEDボール点灯 176, 32, 3 でランダムに点滅 176, …

Web MIDI API使って遊ぼうとしている

github.com 最近光る板を買ったこともあり、MIDIを喋るデバイスが日常にやって来たところで、ふとWeb MIDI APIの存在を思い出して作りはじめた。 create-react-app で作ってできるだけ環境構築で詰まらないようにして開発に速を出す作戦。 3時間かけて、セレ…

トップページには最新N件の記事を出してほしいけどこのタグを持った記事は出さないようにしてほしいな~というときのSQL

スキーマはこちら。型をかなり省略しています。いわゆるToxi法(中間テーブルがある)ってやつです。 create table article ( id integer primary key, ... ); create table article_tag_rel ( article_id, tag_id, ... ); create table tag ( id integer prim…

imagemagickで富豪的にアニメーションGIFをリサイズする

みんな大好きimagemagickの回です。 imagemagickでは convert -resize 幅x高さ in out のようにして画像をリサイズできるのですが、一部のアニメーションGIFがうまくresizeされず、表示がおかしくなります。 アニメーションGIFはリサイズしたい、しかし表示…

軽めのプログラムをGoで書きがち

単機能のSlack BOTとかコマンドラインツールとかは最近ずっとGoで書いている。なんで書いているのかまとめてみた。 静的型がある 型システムとしてはまだ弱い、とか、冗長すぎる、という意見があるかもしれないけど、ないよりはマシだと思っている。 静的解…

文字列を負の数回repeatしたときの言語ごとの挙動

プログラミング言語の組み込み関数・演算子・ライブラリで文字列を負の数回repeatしたときの挙動について調査した。空文字列になる場合と、例外を送出する場合と、コンパイルエラーになる場合に分かれている。 言語 (バージョン) コード 結果 D (dmd 2.076.0…

ターミナルでmarqueeしたい (1)

marqueeというのは、こういう感じで、文字が横にスクロールしてめちゃくちゃ楽しいやつです。 ターミナルで使えるmarqueeの中で最も有名なものとしては、slコマンドが挙げられますが、SLしかmarqueeできないという問題があります。 文字列ならなんでもmarque…

VSCodeでPerlのpackage宣言を挿入してくれるperl-insert-packageっていう拡張機能を出した

Perlでモジュールを書くとたいてい先頭に package Hoge::Fuga::Piyo::Payo; のような宣言を書くことになると思います*1。 最初のうちはいいけど、名前空間がだんだん複雑になっていくと、これは単に写してるだけでは?? となってきます。 ところで、ファイ…

goreleaserのmainの指定方法

goreleaserはGoのプログラムをGitHubのreleasesとかHomebrewとかに簡単にリリースしてくれるプログラム。 goreleaserの設定ファイルでmainパッケージの位置を指定できるけど、指定方法によって挙動が変わる(し、あまりちゃんとドキュメントに書いてない気が…

ターミナルでテキストを中央揃えにするコマンド justify 作った

ターミナルの幅に合わせて文章を中央揃えにしてくれるコマンドを作りました。ご活用ください。 github.com go get github.com/utgwkk/justify/cmd/justify でインストールできます。 READMEにあるように、リダイレクトやパイプで入力を渡すと、中央揃えにし…

VJに使えそうなコマンドたち

いろいろなコマンドあるけどVJに使えそうなものがけっこうあるのではないか。 絶えず出力し続ける系 無限に出力しつづけるコマンドはVJに使えるのではないか。 dstat 情報がどんどん積み重なっていくのがおもしろい。 htop top でもよい。CPU利用率とかプロ…

VOICEROID2をsayコマンドのようなインタフェースで操る

macにはsayコマンドがあって、コマンドラインからパソコンを喋らせることができる。 一方でWindowsにはない気がする。そして一方で我々の手元にはVOICEROIDがある*1。かわいいVOICEROIDたちをsayコマンドのように喋らせることができたら、どんなに幸せなこと…

Slack workflowで遊んでた

Slack workflowは今日リリースされた機能で、フォームで申請書や問い合わせ文章を作ったりボタン押してリアクティブにしたりすることができる機能。課金してるworkspaceなら使えると思う。 slackhq.com 本来は問い合わせ文章とか楽に作れるようにする機能な…

今日のおすすめSlackチャンネルBOTを簡単にHerokuにデプロイできるようにしました

utgwkk.hateblo.jp 今日のおすすめSlackチャンネルBOTをHeroku Buttonクリックで簡単にデプロイできるようにしました。ご活用ください。 github.com 確認画面でSlack BOTのトークンとチャンネルIDを入れればデプロイできて、スケジューラの設定をすれば毎日…

今日のおすすめSlackチャンネルBOT

サークルのSlackには、publicなチャンネルが660個ほどある。 その中には、100人以上がjoinしているチャンネルから、数人しかいないチャンネルまでさまざまある。 これだけチャンネルがあると、おもしろいチャンネルかもしれないけど人が少ない、とか、実はこ…

4年前のハッカソンで書いたコードと向き合う

ふと4年前に作ったwebサービスにアクセスしてみたところ、エラーが出ていたので、いい機会だと思いコードの修正をすることにした。 github.com hatena-bookmark-read-all.herokuapp.com コードとwebサービスはこれ。はてなブックマークの「あとで読む」を一…

VSCodeのLive Shareでペアプロしたら便利でおもしろかった

先日サークルのコーディング合宿*1に参加したのですが、そのときにサークルの後輩であるnosくんとペアプロをしました。 codecamp.kmc.gr.jp ペアプロでやったことや感触はだいたいこのインタビューで話した通りで、この記事ではそのほかに思ったことを書きと…

ISUCON9に参加した #isucon

ISUCON9に参加しました。チーム名は :innocent: で、チームメンバーは id:wass80 と id:nonylene です。去年と同じチームで、id:nonyleneにインフラ周りを全て見てもらいながら私と id:wass80 で実装を見るという作戦でした。使用言語はPythonです。 最高得…

PerlのLanguage Server、おもむろにVSCodeのsettings.jsonに、 "perl.sshWorkspaceRoot": "/path/to/hoge" って書いたらsshじゃなくてdocker使っててもパスを変換してくれることがわかった。 marketplace.visualstudio.com github.com よく考えるとたしかにL…

AWS CLIでの作業を /tmp で完結させたい

さまざまな出来事があります*1。 サークルの共用サーバ*2の /tmp にtweets.zip*3をダウンロードしてからS3にアップロードしていたのですが、同じような作業をいくらでもやりそうな気がしたのでメモを残しておきます。 一時ディレクトリに移動する mktemp -d …

Ansibleでitamaeのexecuteやnot_ifのようなことをする

さまざまな事情があって、Ansibleでシェルスクリプトを1つのtaskとして実行したくなったり、コマンドのreturn codeに応じて処理を分岐したりしたくなると思います。 itamaeなら execute や not_if で実現できるのですが、同じことをAnsibleでやろうとして手…