私が歌川です

@utgwkk が書いている

技術

どうしても 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. トリップ…

SKK-JISYO.touhou.utf8 を生成(変換)するスクリプトを書いた

https://t.co/5woYHPtsgE 東方Projectの用語のSKK辞書がなくて困っていたので,https://t.co/7CQiZxOXZq の Google 日本語入力向け辞書から変換するスクリプトを書いた.CorvusSKK v2.4.5 で動作確認済です.— 6人目 (@utgwkk) 2017年2月1日 SKK 使ってて東…

深夜テンションで書いたコードを長期間運用していくと発生すること

たとえばこのようなコードがある.Twitter でいいねした画像付きツイートを保存して,その URL を Slack に投稿して,サムネイル画像を生成して,必要な情報を DB に書き込むという処理をやっている. client.on_event(:favorite) do |event| source = event…

ボタンを押すとそのボタンと周囲4近傍のボタンの ON/OFF が反転して,全てのボタンを ON にすればクリアのパズルゲームを解くやつ(5x5はライツアウトと言うらしい)の3x3の場合のソルバを書いて,考察してみる

記事タイトルが長すぎる. はじめに みなさんは,ボタンを押すとそのボタンと周囲4近傍のボタンの ON/OFF が反転して,全てのボタンを ON にすればクリアのパズルゲーム(5x5はライツアウトと言うらしい)をやったことがありますか? 私はああいったパズルが苦…

#nowplaying をリアルタイムに配信したい

KMCM(1) 京大マイコンクラブはC91 1日目(木) 西ほ40-b に配置されました!部員の制作物の入ったCDや部誌を頒布します! pic.twitter.com/0Pgye7mWrF— 京大マイコンクラブ(1日目西ほ40-b) (@KMC_JP) October 29, 2016 はじめに これは KMCアドベントカレンダ…

Git 管理されたファイルの履歴を書き換えて、全てのファイルをまるごと特定ディレクトリ内に移動させる

tl;dr 書き換えないと死ぬという状況でなければ git mv で済ませましょう (追記) $ git filter-branch --tree-filter \ 'mkdir hoge; for file in `ls | grep -v hoge`; do mv -t hoge $file; やりたいこと Git リポジトリのルートディレクトリ以下のファイ…

Ruby の dig メソッドが便利なので Python で実装した

dig メソッドとは instance method Hash#dig (Ruby 2.3.0) たとえば各種 API を叩いて返ってきた JSON をパースした後の辞書型のような、データがいくらでもネストしてあるようなデータ構造があるとき、普通なら obj['path']['to']['destination'][2] とか o…