私が歌川です

@utgwkk が書いている

技術

シェルで行ごとの数値の総和を取るとき 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 これはインタプリタの挙動をトレースした画像です.灰色丸…

パート分けされた歌詞からパート情報を削除するワンライナー

sed -re 's/(.+)(.)/\1/g' atapon.txt こういう文字列置換,初めは慣れなくて perl -mutf8 -nle 's/(.+)(.)/\1/g' -p atapon.txt とかやっちゃうけど,これぐらいならわざわざ Perl を使うまでもなくて,sed で十分という気づきを得られる. -r を付ける…

エディタの自動保存プラグインを有効にしてコードを書いている

エディタ(vim)の自動保存プラグインを有効にしてコードを書いている.今は 907th/vim-auto-save を使っている. github.com 自動保存は賛否両論あると思うけど,git 管理下にあるなら git が自動的に diff をとってくれるし,vim なら gitgutter とかでどこ…

ログを残す文化

ログを残す文化は大事だけど,残し方をもっと気をつける必要があると日々思っている. 情報が散らばってしまわないか? Dropbox,Evernote,wiki,iPhone のメモアプリ,Slack,IRC……と散らばってしまうと,あとで探すのが面倒 一箇所に集めておく 後から参…

KMC の春合宿で Python の処理系の講座をした

追記: dict の実装で出てくる図が間違っています*1.あとで修正します. スライドを差し替えました.変更点は次の2点です. dictの図を開番地(オープンアドレス)法のものに訂正 バイトコードについて追記(2バイトで1つの命令と引数を表す旨) 先日 KMC で春合…

Python の map とfor内包表記(リスト内包表記)は結局どっちが速い?

tl;dr map が遅いとされるのは関数呼び出しの差があったため 現在では(list にこだわらなければ) map は (2017/3/10 11:00追記)イテレータを生成するときは 圧倒的に速い 総合的に見ると,式のみのときはfor内包表記が速く,関数のときは map が速い様子か …

Python C API を使ってみて雰囲気をつかむ

はじめに 最近は機械学習などで Python がよく書かれていますが,その内部構造を意識してコードを書くという機会は,最適化をしなければならない,という段階になるまではあまりないと思われます. また,C言語による様々な Python のモジュールが書かれてい…

2ちゃんねるのトリップを Unicode の時代に実装する

tl;dr Shift-JIS が混ざるとつらい こういうところは Python2 のほうがよかった…… トリップとは トリップとは,2ちゃんねるなどの匿名掲示板において個人を簡単に証明するための合言葉,またその機能によって表示される文字列のことを指します*1. トリップ…