私が歌川です

@utgwkk が書いている

技術

トップページには最新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でやろうとして手…

カインドを用いたレコード多相 (record polymorphism) の計算体系とその実装

これは KMC Advent Calendar 2018 - Adventar と 言語実装 Advent Calendar 2018 - Qiita 4日目の記事です. 3日目はそれぞれ, id:nojima718 さんの ぷよぷよのプレイ動画を解析して棋譜を生成する - @nojima's blog (KMC) @yhara さんの Shiika進捗(2018) …

wsl-terminal が chsh 認識してくれない問題 (解決編)

utgwkk.hateblo.jp この記事の続き. いつの間にか -l オプションで起動したのち exec /bin/zsh が効かなくなったのでいろいろ調べてたところ,なんと -l で起動されるシェルは chsh で指定したものとは関係ないことがわかった! github.com そしてよく見る…

ISUCON8 :thinking_face: 本戦に出て14位だった #isucon

チーム :thinking_face: *1 として学生枠でISUCON8の本戦に出場しました. 今回のお題は「仮想椅子取引サービス ISUCOIN」でした. 結果は5,981点で14位(ベストスコアは6,324点)でした. 学生の中では5位だったけれどそれ以前に学生のレベルがめちゃくちゃ高…

KMCの例会講座で「ラムダ計算のインタプリタを実装してみる」話をした

speakerdeck.com KMCの例会講座で,型無しラムダ計算についての軽い説明と,そのインタプリタを実装した話をしました. できた実装はこちらです. github.com 講座の流れ ラムダ計算について知ろう ラムダ項 束縛変数と自由変数 変数の置換(代入) α変換 β簡…

ISUCON8 :thinking_face: 学生枠で予選通過した #isucon

:thinking_face: *1というチームで参加しました.チーム名がかぶっているのには気づかなかったです.なんとか学生枠で予選を通過することができました. チームはid:utgwkkと@wass80とid:nonyleneの学生3人です. 使用言語はPythonです.3人ともそこそこ読み…

gitignore を落としてくれるシェルスクリプト

手元でgitリポジトリを作ったときに,よく wget https://raw.githubusercontent.com/github/gitignore/master/Python.gitignore -O .gitignore などのコマンドを打つのですが,環境によってwgetがなくてcurlだったり,そもそもgitリポジトリのルートディレク…

スライドPDFの1ページ目から発表タイトルを自動的に抜き出したい

tl;dr pdftotext を使えばできる じぶんのスライドのbounding boxに着目すればだいたいうまくいく 動機 pdftotext は,PDFファイルからテキストの情報を抜き出すことができるコマンドである. これは単にテキストを抽出するだけでなく, -bbox-layout オプシ…

MySQL5.7のN-gramインデックスを用いた全文検索で絵文字単体が検索できない

LIKEによるマッチングには引っかかるけど,MATCHによる全文検索では引っかからないケースがある. ずっと困っているので,正しいクエリの書き方とか設定とかあったら教えてください.助けてくれ……. mysql> set names 'utf8mb4' collate 'utf8mb4_bin'; Quer…

KMCの春合宿で「画像検索・閲覧システムの実装と全文検索SQL」の話をした

speakerdeck.com スライド中のURLを踏んだりSQLをコピーしたりすることができるようにPDFも用意しました. (追記: SpeakerDeckのページにPDFをダウンロードできるリンクがあるのでそっちを使いましょう.クールなURIは変わらないのでこちらのURLも残しておき…

Autohotkey設定

Windowsの環境そこまで改造しないタイプだけど3つだけ設定している. ウィンドウ切り替えをMacとWindowsで同じ位置のキーでやりたいのでこのようになっている. Backspaceはホームポジションからあまりに遠いのでC-hにするとだいぶ快適になった. キー入力中…

wsl-terminal が chsh 認識してくれない問題

~/.bashrc に export SHELL=/bin/zsh exec $SHELL -l と書いている. DOS窓でWSL触りたくない,しかし chsh が動いてくれない……ということで応急処置. そのうち直るかもしくは正しい起動オプションがあるかのどちらかだと思う.