私が歌川です

@utgwkk が書いている

技術

スライド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 が動いてくれない……ということで応急処置. そのうち直るかもしくは正しい起動オプションがあるかのどちらかだと思う.

Twitterで画像付きツイートをいいねしたら保存しつつSlackに流すやつのGo版

こんにちは. アドベントカレンダーの記事から2週間ぐらいしか経過していませんが,「Twitterで画像付きツイートをいいねしたら保存しつつSlackに流すやつ」をGoで書き直しました*1. github.com utgwkk.hateblo.jp 概念はこちらとほぼ変わりません.RubyをG…

Twitterで画像付きツイートをいいねしたら保存しつつSlackに流すやつの現在

この記事は KMC Advent Calendar 2017 - Adventar 3日目の記事です.このカレンダーの内容は kyp (id:kypa) さんの尽力によって下の記事に逐一まとめられるので,良ければ参照してください.kyp (id:kypa) さん,がんばってくださいね. adventar.org 昨日の…

シェルで行ごとの数値の総和を取るとき paste と Arithmetic Expansion が使える

tl;dr $ echo $((`paste -s -d+`)) で入力の各行の数値の総和が取れる. 入力ファイルを指定するときは次のように書く. $ echo $((`paste -s -d+ < [filename]`)) 負の整数も小数も計算できる.ただし小数は浮動小数であることに注意. 状況 たとえば, 100…

Flask の abort() と psycopg2 のコネクションがロックを手放さないことについて: 明示的に commit() を呼ぶとよい

tl;dr psycopg2を使うときははSELECT句だけを実行する場合も明示的に conn.commit() をする. コンテキストマネージャを使うとすっきり書ける. 現象と調査結果 FlaskとPostgreSQL(psycopg2)を用いたwebアプリケーションのテストで,404や403を返すテストの…

Rust で簡単なシェルを実装した

ふとシェルを書いてみたくなったので書いた.cd と ls と外部コマンド実行まではできるようになった. github.com 参考にしたページ.Cで書くよりはだいぶ高級なのでやりやすいと思う. brennan.io 感想 パターンマッチがすごい パターンマッチがとにかくす…

ISUCON7で人権喪失を味わった #isucon

チーム :innocent: (学生枠)で出場し,最終得点は37000点ぐらい.あと3000点足りなかった……. もっと詳しい記事は @wass80 と @yu3mars が書いてくれると思うので取り急ぎ. やったこと 問題を見て,複数台構成になっていて驚く.予選でここまでやるのか…… …

MySQLで特定カラムの文字数順ソートにindexを効かせる

ISUCON6 予選問題の解説を読んでいたところ, キーワードリンクが最前最長マッチを期待している関係上、CHARACTER_LENGTH 順でソートしていますが、そこをvirtual columnなり別カラムなりにindexを張るのも良いでしょう。折角MySQL5.7なので、virtural colum…

ISHOCON1に参加した #scouty_ishocon

scouty.connpass.com 参加させていただき,解いた.最終得点は85402点で,4位だった. gyazo.com :ok_man: というチームで*1参加した. github.com ここから先は解いたときの過程などがあり,ネタバレを大いに含みます. *1:個人戦だがチーム名が付けられる.

どうしても Mac で高速に IronPython 2.7.7 を動かしたいとき

最新版の mono が導入済であることを前提とします. https://github.com/IronLanguages/main/releases/tag/ipy-2.7.7 から IronPython-2.7.7-win.zip を落として展開して, $ mono ipy.exe -X:ExceptionDetail で大量のスタックフレームが流れたのち REPL が…

pixiv社内ISUCONを解いた

チーム 😇 (:innocent:) でISUCONの練習ということで,pixiv社内ISUCONを解いた.使用言語は Ruby で,最終得点は94943点. inside.pixiv.net ネタバレが多く含まれるので続きを読むにします.

Python の依存パッケージ管理/環境切り分けツール pipenv の紹介

時代は pipenv や— うたがわ (きき) (@utgwkk) 2017年9月5日 もう誰も,requirements.txt や,source ENV/bin/activate に頭を悩まされる時代は終わった! というわけで virtualenv の時代は終わり*1,pipenv の時代になりました. この記事は Python を書く…

別ディレクトリのテストを走らせるためにテストスクリプトに import sys; sys.path.append('.') って書きたくないけどどうすればいいんですか

Python で,コードカバレッジとか取りたいという関係でテストモジュールを直接実行することがあるんですけど,別ディレクトリのテストモジュールだと import sys; sys.path.append('.') を書かないといけないのどうにかなりません?— うたがわ (きき) (@utgw…

MySQL で累積和を求める

SUM() と JOIN を使えば書ける.JOIN してるのでオーダーは小さくなさそうな気がする. COUNT(*) をよしなに所望のものに変えれば好きなものの累積和が取れる. テーブル名なども適宜読み替えてください. SELECT t1.accum_date , t1.count , t1.count + SUM…

SQL で id を使ったページネーションの処理を書く

よく知られているように SQL の OFFSET は遅い*1ため,速さを求める我々は OFFSET に頼らずにページネーションを実現する必要があります. ところで,たいていの場合は id が主キーとなっており,これを使ってページネーションするのがいいのでは? と考えま…

SQLite3 から MySQL にデータを移行した

utgwkk.hateblo.jp この記事の続き.SQLite → MySQL のデータ形式変換の話はこっちに書いている. おととい詰まっていたのは,絵文字を含む VARCHAR を INSERT するときにエラーが出る,というところで,これは結局設定ファイルに付け加えることで解決した.…

SQLite3 から MySQL にデータを移行しようとしているができていない状態

今まで溜めていたデータを SQLite から MySQL に移行しようとしてハマって一日終了した. github.com とりあえずダンプファイル形式を変換するスクリプトがあるので当てる. テーブルはあらかじめ作っていたので CREATE TABLE は消したが,消す必要はなかっ…

Python で2つの辞書をマージした新しい辞書を作りたいとき

要件 辞書 d1 と d2 をマージして新しい辞書を作りたい. 重複するキーがあった場合は d2 の値を優先することにする. たとえば {'a': 1, 'b': 2} と {'b': 3, 'c': 4} をマージすると {'a': 1, 'b': 3, 'c': 4} となってほしい. マージをする過程で d1 や …

ICPC2017 国内予選に参加した

チーム Serendipity Parade として参加しました.結果は3完 (8125) で68位です. 本当はチームSSAにしたかったのですが,誰もSSAの抽選に通らなかったので来年までお預けとなりました. http://icpc2017.yamagula.ic.i.u-tokyo.ac.jp/team/1294 メンバーは上…

手元のVPSのIPv6対応進捗

utgw.net DNSレコード % nslookup -type=AAAA utgw.net Server: 157.7.180.133 Address: 157.7.180.133#53 Non-authoritative answer: utgw.net has AAAA address 2400:8500:1301:735:133:130:96:110 Authoritative answers can be found from: nginx 対応し…

人間の注意力には限界があり,どうしても型エラーは回避できない. そういったときに,静的型の言語であればコンパイル時に,あるいは IDE の機能によってエラーを出す,といった運用が可能である. 動的型の言語でも最近では型ヒントやすごい IDE の力によ…

imagemagick で高速に名刺を作る

生活をしていると,いきなり名刺が必要になることがあると思います. 高速に名刺を作るのに必要なものは,imagemagick と画像データとUSBメモリと小銭です. 名刺画像を用意します gyazo.com デレステには名刺作成機能があるので,高速に作成できます. imag…

ソートマージ結合法を実装してみた

リレーショナルデータベース入門―データモデル・SQL・管理システム・NoSQL (Information & Computing)作者: 増永良文出版社/メーカー: サイエンス社発売日: 2017/03メディア: 単行本この商品を含むブログを見る 関係データベースの本を読んでいて,結合質問…

SQLite で ORDER BY RANDOM() を使わずに10連ガチャを実現する

tl;dr WITH RECURSIVE で主キーの乱数列を作って絞り込むと爆速 ナイーブな実装 SQLite でガチャを実装しようとすると通常次のようになるかと思われます. SELECT * FROM idols ORDER BY RANDOM() LIMIT 10; よく知られているように,このクエリは非常に重い…

オレオレ Mastodon インスタンスを立てた

流行りに乗りました.だいたいは docker-compose.yml や .env.production の調子を見るだけなので,もう少しスムーズにできそう.解説記事は巷にあふれているのでググってください. @utgwkk usamin— もっへもへ (@mohemohe) 2017年4月18日 ドメイン名の由来…

Piet インタプリタをいじっている

私は Piet の言語仕様をまだ完全に理解しきれていないので,正しいインタプリタを実装することができない.DP と CC の切り替えについてはさっき把握した(つもり)のところ*1. github.com gyazo.com これはインタプリタの挙動をトレースした画像です.灰色丸…