読者です 読者をやめる 読者になる 読者になる

私が歌川です

@utgwkk が書いている

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

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…

ISUCON6 本戦で今度こそ完全に打ちのめされた #isucon

正の点数記録されてほしい #isucon— おうどん (@utgwkk) October 22, 2016 チーム *1 として参加しましたが、ざっくり言って完敗でした。やはり本戦の問題は難しかった……。 問題の詳細やら、やったことやらはチームメイトの2人が書いてくれるだろうし、そも…

SQL で DB 問い合わせをしないでプログラミングをして遊ぶ

本日18:30より4共14にて例会があります。部員による講座の内容は"SQL はチューリング完全"です。— 京大マイコンクラブ (@KMC_JP) 2016年10月20日 今日の KMC の例会講座で、こういう発表をしたので、話したことをざっくりまとめておきます。SQL はチューリン…

『コーディングを支える技術』を読んだ

コーディングを支える技術 ~成り立ちから学ぶプログラミング作法 (WEB+DB PRESS plus)作者: 西尾泰和出版社/メーカー: 技術評論社発売日: 2013/04/24メディア: 単行本(ソフトカバー)この商品を含むブログ (35件) を見る 世界にはいろいろなプログラミング…

有限オートマトンを実装してなんとなく挙動をつかむ

前置き みなさんは、チューリングテストに合格していますか? 本題 有限オートマトンとは、内部状態を持ち、入力によってさまざまな状態に遷移し動作する機械を抽象化したものです。 これは、有限オートマトン - Wikipediaから引用した図です。このように、…

CODE FESTIVAL 2016 予選B参加できなかった

寝坊しました。 A 入力文字列の先頭から順に "CODEFESTIVAL2016" と異なる箇所の個数を数える。 B 日本人と外国人の予選通過者数を別個で記録しておいて、条件の通りに判定していく。 C ふつうにプリム(クラスカル)法だと通らなさそうなので、解説の通りにや…

カウントダウンする sleep

sleep 900 などをやっていると人間は不安になってくるということを最近感じている。 カウントダウンが表示される sleep コマンドみたいなのないのかな— ミーハー (@utgwkk) 2016年10月7日 なさそうなのでシュッと書いた。source ./countdown.sh などとすると…

butimi.li クローンを書いた

github.com 使い方 もへくんさんの記事に書いてあることとだいたい同じことができるはずです。 例1 例2 bottle 使うとこういう web アプリならサクッと書けるのでよいです。 ※ 知らない人にブチミるのはやめましょう。 うおおおおおおおおおおおおああああああ…

CODE FESTIVAL 2016 予選A落ちた

社会は甘くない、甘えるな 順位 gyazo.com A substr とかしてやればいいと思うけど、Python でサクッといった print(s[:4], s[4:]) とかできてスライス記法は便利なので、こういう問題のときは Python で解くことが多い。 B 条件に一致するペアを数える。 順…

ISUCON6 予選で打ちのめされたけど通過した #isucon

こんにちは。酔っ払ってるので難しいことが書けませんが、なんと学生枠8位で通過していました。チーム :innocent: です。 github.com isucon.net ももじろうで先輩と飲んでたら結果を聞いてびっくりしました。 どういうことをしたのかは @wass80 がブログに…

ISUCON6 に出て予選で打ちのめされてきた #isucon

あわせて読みたい utgwkk.hateblo.jp www.wass80.xyz yu3mars.hatenablog.com やったこと Ruby で実装 SQL の最適化 Nginx の静的ファイルキャッシュ 応援 github.com 結果 19610点 感想 さてISUCON初参加でしたが、結果を見るともののみごとに打ちのめされ…

10m5s などの時間を表す文字列をパースするライブラリを作った

github.com コマンドラインから、--after=5m みたいな感じで渡される、時間を表す文字列をうまくパースするライブラリ py-timeparser を作りました。 PyPI にも上げたので、pip install py-timeparser でインストールできます。 timeparser っていうライブラ…

妖怪少女のための Brainf*ck インタプリタ

こんにちは。人類は古来から、プログラムを書く際の力試しとして、Quine*1やBrainf*ck*2処理系を書く傾向にあります。 そのような傾向があり、やはり傾向であるので、書きました。 github.com ちなみに文法チェックはしていません。 構文木を作る 構文木とい…

シンデレラガールズJSON

シンデレラガールズ劇場 · GitHub シンデレラガールズ劇場の、話ごとの出演アイドルの名前とか、タイトルとかをまとめた JSON です。データ元は でれげき -シンデレラガールズ劇場まとめ- です。 これを使うと、最も多く登場したアイドルのランキングとかが…

Mackerel を使ってないんたんを監視し、天気の変化をいち早く感知しよう

こんにちは。我々が人生で最も気にするものランキングがあったとしたら、1位が将来のこと、同率1位がお金のことで、3位ぐらいに天気が来るのではないでしょうか。歌川です。 そんな、人生で3番目ぐらいに気になる天気をサクッと知れたら、あるいは降水注意報…

ICPC2016 国内予選に参加しました

チーム YoukaiGirl として、サークルの人たちと参加しました。結果は3完で116位でした。 ぼくは基本的に実装をしていて、ほかの2人に先に解法を考えてもらっていました。 A (1WA) 異なる i≠j に対して abs(a[i] - a[j]) の最小値を取る。 これだけなんだけど…

ゲームのハイスコアランキングが記録できるサービスを稼動させた

サークルのラピッドコーディング祭りで、部員の一人がランキングサーバーを書いていたので、じゃあそれを web サービスにして、RESTful に叩ければよいじゃんと考えて、Node.js で実装して*1、立てました。 github.com エンドポイントは https://ranking.utg…

画像をシュッとトリミングするやつを作った

Gyazo った画像をそのページで直接トリミングしたい(2度目)— うたがわ (@utgwkk) 2016年4月28日 こんな発言をしてて、じゃあ HTML と JS で画像のトリミングするのってどうやるんだろうという気持ちになったので作った。 trimming image こういう感じで動き…

JavaScript と Python (tornado) を使った匿名チャットツールを作った

github.com サークルの新入生プロジェクトで、JavaScript を基礎から学習して、ゲームを作れるようになる、というものがある。 で、そのプロジェクトの部内のページに、 オンラインゲーム作れるようになるとイイネ!! と書いてあったので、どういうふうに作ると…

Subsonic 5 のプレーヤを multimedia key に対応させる UserScript を書いた

普段、Subsonic で好きな楽曲を聴きながらコードを書くことが多くて、とにかく捗るんだけど、時にはシュッと multimedia key で一時停止したり、前後のトラックを再生したりしたくなる。 サードパーティ製の Subsonic クライアントを入れればよいのでは、と…

救い as a Service

部室のサーバーで、霊夢ちゃんというスクリプトが走っていて、具体的にはTwitterでいいねした画像付きツイートのURLをSlackに流して、その画像を保存するスクリプトだ。 今日これをRubyで書きなおした。といっても、大部分はすでにだいぶ前に書いていたが、…

Vagrant にっき(2)

yakumoran*1 の base box を、CentOS から Ubuntu に変えた。 Ubuntu だと Shared folder にミスるから CentOS を使ってたというのがあったが、めでたく解決できた*2ので、これからも Ubuntu を使っていこうという感じになった。 yum でパッケージ管理するの…

Vagrant にっき

ノートパソコンに入れていた Ubuntu を手放すことにした。 今までは、マシンには Windows 10 と Ubuntu の2つの OS を入れていた。コードを書くときは Ubuntu で、ゲームをするときは Windows というふうに使い分けていた。一つ問題があって、Ubuntu でブラ…

霊夢ちゃん

以前、Twitter でふぁぼった画像付きツイートをSlackに流すスクリプト を書いたのですが、今回はそれを Ruby で書きなおしてみました。 github.com なんと、画像を保存する機能まで付いています!(あっちには付いていた?) Ruby、周囲の共通語みたいな感じで…

Atom.io で使っているパッケージを列挙した

id:suzusime 君に部室で Atom.io を布教して、GitHub Patchwork Kyoto に参加した一日だった。 ぼくが Atom.io に導入しているパッケージを列挙していきます。文法ハイライト・Snippets 系(language-hogehoge)は除きます。 custom-title atom.io Atom.io の…

PythonからシュッとMeCabを使うためのメモ

$ sudo apt-get install mecab libmecab-dev mecab-ipadic $ pip install natto-py これだけでいけた……。 自前でコンパイルしなくてもいい感じにできるので便利。 デフォルトだと Juman 辞書を使うけど、宗教上の理由とかがない限りは IPA 辞書を使ったほう…

やり直しのきく人生を認識するために、「今のなし」で直前のツイートを削除するスクリプトを書いた

今のなし、で前の発言が消える仕組みを作ろうね— 私が歌川です (@utgwkk) 2015, 10月 29 コード "(いま|今)のなしで?" で前のツイートを削除できるぞ!!!!! あとがき 人は間違う。間違うからこそ人だ。 人生は、やり直しがきく。やり直しがきくからこそ…

Linux Mint で存在しないコマンドを叩いた時の処理がバグっていたので、何とか修復した

症状 Linux Mint の bash で存在しないコマンドを叩いたら、次のような Python のエラーが出る。 Traceback (most recent call last): File "/usr/lib/command-not-found", line 27, in <module> from CommandNotFound.util import crash_guard ImportError: No modu</module>…

Linux Mint 17.2 に rbenv を導入するメモ

インストールしたての Linux Mint 17.2 に rbenv を導入しようとして、微妙に詰まったのでメモ。 # g++をインストール sudo apt-get install g++ # これも必要ぽい sudo apt-get install -y libssl-dev libreadline-dev zlib1g-dev この後に rbenv install […

画像付きツイートをふぁぼったらSlackチャンネルに流すスクリプトを書いた

こんにちは 歌川です。 今日のテーマ発表 今日のテーマは「SlackのAPIをフル活用して生活をより良いものにしよう」です。たった今決めました。 Slack みなさん、突然ですか、Slackを使っていますか。 ぼくが所属する京大マイコンクラブ(以下KMC)は、Slackを…

venvに導入した最新のPython3.5.0からMeCab使いたいよね!!!!

っていうQiita記事を書こうとしたんですけど……。 qiita.com ほとんどこの記事の通りでできてしまったので特に書くことがない……。 注意点 pythonコマンドからsetup.py installを実行すると、pyenv globalのものにインストールされてくれない。 env pythonから…

Pietの処理系をGolangで書いた

github.com はじめに 2日ほど生活リズムを崩すことで、Goで書かれたPietの処理系が一応できあがりました。 きっかけ utgwkk.hateblo.jp Pietとは David Morgan-Mar氏によって設計された難解プログラミング言語 画像がソースコード 数値は色の面積で表現され…

進捗

@utgwkk じゃあpietのクエリ投げたら処理してくれるGAEでも作ってください— wass (@wass80) September 7, 2015 @wass80 ok— 私が歌川です (@utgwkk) September 7, 2015 Pietの処理系をGoで書いています。 できたこと 画像の読み込み 色情報の読み込み できて…

Python3.4.3でMeCabの導入に成功したので、入力文字列が575かどうか判定するスクリプトを書いた

qiita.com 後述するサイトの情報を参考にしたら、割とすんなり動きました。 ただ、やや動作に難があったり、エンコード沼にはまりそうになったりして、工夫してコードを書かないといけなかったので、大変でした。 MeCab.Tagger.parseToNode(str) が正常に動…

進捗

Project Euler で Level1 を25問解くことができた。めでたい。 Problem 69 106以下の自然数nについて、を最大化するnを出力せよ、という問題。 愚直にを計算していくと、めちゃくちゃな時間がかかってしんどい。 ぐらい。

TABLEタグをTSVに変換するやつを作った

Convert <TABLE> to TSV. 検索してみて、TSV→TABLE はたくさん出てきたけど、逆はあまり出てこないなあ、と思ったので、サクッと書いた。 html.parser.HTMLParserでいい感じに書けるぽい。 後はこれをシュッとメソッド化してやれば、汎用になりそう。</table>

ペイントとPythonで名刺を作った

用意するもの Python 3.x(2.xはダメ) Python Imaging Library (Pillow) 名刺にしたい画像 Python Imaging Libraryは、コンソールで、 sudo pip install Pillow を叩けばインストールされます。 手順 名刺にしたい画像を作る 私はペイントで作りました。 おも…

Ubuntuで、起動時にマウスを接続してたらタッチパッドを無効化したい

はじめに ノートパソコンの悩みの種になりうるタッチパッドくん。 キー入力中にタッチパッドに触れて、あらぬ方向をクリックしてたら、もう怒りをどこにぶつけてよいか分からなくなりますよね。 で、Touchpad-Indicatorなるソフトがあるらしいんですが、最新…