ardggy's blog

Esc - Meta - Alt - Ctrl - Shift

doctest 駆動 AtCoder

AtCoder を始めた。ためしに Haskell や Nim で解いたりしていたが、結局は Python3 に落ち着いた。 解くのはいいが、サンプルのテストが面倒でしょうがない。TDD でできるといいが、フレームワークほどの仕組みは必要なさそう。その点で doctest はよかった…

複数のイテレータを合流させる(承前)

php

前は2つのイテレータを合流させるパターンを書いたが、3つ以上のイテレータも混ぜられないだろうか。 confluence(confluence($it1, $it2, $compare), $it3, $compare) とやれば複数混ぜられそうな気がする。 つまり畳み込みの計算で、array_reduce をつかえ…

イテレータを合流させる

php

ソート済みの2つのイテレータを混ぜ合わせて直列にできないだろうか、という動機 $x <=> $y); assert([0,1,2,3,4,5,6,7,8,9] === iterator_to_array(new LimitIterator($iter, 0, 10), $use_keys = false)); function confluence(Iterator $it1, Iterator $…

ジェネレータとSQL

SQL の結果をなめたいがメモリにぜんぶ展開すると out of memory になりがちなところ、 チャンクを次々とジェネレータで供給するというパターンを思いついた。これならほぼ定数メモリで大量のデータを処理できる。 ジェネレータは Iterator を実装しているの…

ファイルの中身をまるごとURLエンコードしたい

curl -X POST -d ... で投げるときに、ファイルの内容をエンコードする必要に見舞われた。 $ perl -MURI::Escape -E 'say uri_escape do { local $/; <STDIN> }' < file.txt [追記] -0777 オプションでまるごと読み込みができる。 $ perl -MURI::Escape -0777 -E 's</stdin>…

1秒未満の time.sleep

docs.python.org secs と書いてあるから整数秒だけかと思いきや、浮動小数点を与えてもよいと書いてある。 0.5 秒止めたければ、 import time time.sleep(0.5) でいい。

FizzBuzz (BSD版 sed)

$ seq 1 100 \ | sed -e ':L' -e 'n;n;n;n;s/[0-9]*/Buzz/;n;bL' | sed -e ':L' -e 'n;n;s/[0-9]*/Fizz/;n;bL' GNU 版みたいに 5~5s/[0-9]*/Buzz/; 3~3s/[0-9]*/Fizz/ とは書けないので、n コマンドを重ねる。 1行目は暗黙に読み込むので、置換後にもう1回読…

行を連結する

(1) paste をつかう。 -d オプションでセパレータ文字を指示できる。NUL 文字を指定すればセパレータはなしになる。 $ seq 1 10 | paste -sd, - 1,2,3,4,5,6,7,8,9,10 $ seq 1 10 | paste -sd$'\0' - 12345678910 (2) sed をつかう。 paste とちがって、セパ…

ケツイ-絆地獄たち-Deathtiny をトロコンした

トロコンしたからとて、けっして上手いわけではないのがSTGのつらいところ・・・ 「SUPEREASY をノーミスクリア」は QS/QL を繰り返して獲得しました。 画面上部にいるほうが安全という、大胆なゲームデザイン。 [5]箱がジャラジャラでるとめちゃくちゃきも…

FF14はじめました。

映画「光のお父さん」を見て、たいへんおもしろそうだと思ってしまったので買ってきた。 半日ほどプレイしてサスタシャ直前まで来た。 クラスは剣術士を選択したので、タンク職を担うことになる。不安だ。

幽霊型

これは型レベルのハンガリアン記法では。 local.joelonsoftware.com ハンガリアンは人間同士の約束事だけど、幽霊型をつかえば、コンパイラにその約束事を伝えることができると思った。

SEKIROをトロコンした

SEKIRO をトロコンしました。ソウルシリーズはやってません。 相手を休ませないように動く、という新しいゲーム性を感じた それでいて、ガン待ち戦法も通用するよいバランス感 (時間はかかるけど) 達成感がすごい チャキチャキしてしまう癖は治らなかったで…

1行で終わる php-mode のインデント

いろいろ設定するより php-mode で提供しているのをそのまま設定するのがよかった。結局ソース嫁という話。 (add-hook 'php-mode-hook 'php-enable-default-coding-style) c-mode で c-set-style している場合、その設定を継承してしまう可能性があるのでそ…

XXXX という文字列を含んだファイルを探すための、もうひとつのやりかた

find してからの xargs grep -n のほうが便利ではあるけど、ファイル名だけがほしい場合というのもある。 find の -exec 節は、コマンドの終了ステータスで真偽が決まる。 grep の終了ステータスはマッチすれば 0 を返すから、そのマッチしたファイルは -pri…

範囲を生成するようなあれ(パース編)

きのうのつづきで範囲構文を解析することにする。 パーサはさくっと構文解析ライブラリにまかせる。 python パーサ で検索しただけだけど、BNF っぽく書けることで雑に採用。 もっとも BNF がこれでいいのかは自信がないが、doctest が通ってるしいいことに…

範囲を生成するようなあれ

crontab の構文で "1-10,15,16" みたいなやつがあるけど、これを解析してイテレータがでてきたら便利そうである。 上の場合、1 から 10 がでてきて、次に 15, 16 とでてくるようなイテレータが生成される。 #!/usr/bin/env python # coding: utf-8 from iter…

連想睡眠法よかった

幼少のころから不眠のケがあって、だいぶ悩まされていた。 呼吸法が紹介されていれば試したし、サプリメントも試したし、運動もしてみたが、それでもぜんぜん眠れない。 もう医者で睡眠薬もらうしかないかなあと思っていた。 ところがひろゆき氏の『働き方 …

100行の空行を生成する

echo を 100 回実行できればよいので、yes と head で生成して、そのまま sh に丸投げする。 $ yes echo | head -100 | sh [追記] あれ、yes に空文字列をわたせばよいのでは $ yes "" | head -100

view-mode とディレクトリ変数

プロジェクトルートに、下の内容の .dir-locals.el を入れておく。 すると、プロジェクト下のファイルを開いたときに view-mode になっている。 ライブラリとかカーネルとかを読むときはありがたい。 ((nil . ((eval . (view-mode 1))))) find-file-hook に…

標準拡張は view-mode で読みたい

find-library とか describe-function でライブラリのファイルに飛ぶときに、view-mode になっているといいなあと思って設定した。 地味にありがたい存在。 (add-hook 'find-function-after-hook 'view-mode-when-el) (add-hook 'xref-after-jump-hook 'view…

scheme-send-last-sexp

直前の式を評価するコマンドで、おなじみ C-x C-e にバインドされている。 cmuscheme.el の定義を読んだら、単にプロセスに対してリージョンを送るというものだった。 save-excursion 内で一時的に前のS式に戻って、戻ったところの位置をリージョン開始にし…

repeat.el とウィンドウ幅の調整

ウィンドウ幅の調整コマンドは C-x }, C-x {, C-x ^ に割り当てられていて、連続的に押下するには不便なキーバインドになっている。 ネットを見るといろいろ対策はあって、インタラクティブに調整できるようなコマンドをつくったり、必要なときにキーボード…

タイトルバーをモダンな感じにする

モダンな見た目になって大変よいです。 (when (eq window-system 'ns) (add-to-list 'default-frame-alist '(ns-transparent-titlebar . t)) (add-to-list 'default-frame-alist '(ns-appearance . dark))) すぐに適用したい場合は *scratch* なり M-: なり…

フォーカスがあたったときの入力ソースを英数にする

Emacs にフォーカスがあたったときに日本語入力になっていて、M-x あたりを入力すると大変イライラする。 であれば、フォーカスがあたったときに、英数キー (キーコード102) を入力するような何かを実行すればいい。 こういうときは Applescript で調べると…

init.el を gist に上げる

dotfiles 的なリポジトリ運用はめんどくさすぎて、はるか昔にやめていた。 普段は Dropbox に入れてシンボリックリンクで参照するだけにしている。 gist にあげるだけならカジュアルかなあと思って (C-x h M-w でコピペする)、そうすることにした。 clone し…

system-type とバイトコンパイル

init.el を見てると、system-type 変数で分岐をとるケースがあったりするけど、これはコンパイル時には判明してるわけで、実行時に分岐するのはどうかなと思った。 もちろん微々たるものではあるし、使いどころも極めて限られているので、なんでもかんでもや…

tool-bar-mode と menu-bar-mode をオフにしておくやつ

(tool-bar-mode -1) みたいにしてオフにするのが定番ですが、ツールバーが消えるときにウィンドウがガチャガチャしてかっこ悪いし、消すだけでも 100ms くらいはかかるわけで、最初の最初からオフにできないかなーと思っていた。 github.com 以下の設定は Ma…

グループごとにランダムで1件

SQL

例によって MySQL 限定です。 PostgreSQL でも LIST_AGG とか使えばいけそう? team_players team player red taro red takeshi red maro white daikichi white tsubasa white ninja white takamori 上の red, white 各チームから、ひとり誰でもいいから出て…

Emacs の起動高速化の試み(2)

ardggy.hatenablog.jp el-get をやめて、標準の package.el に切り替えた だいたい 300ms ほど削れた。 そもそも自分の場合 el-get である必要がなかった……。 exec-path をキャッシュするようにした 毎回 exec-path-from-shell-initialize を実行していて、…

雑な init.el の括弧バリデーション

check-parens 関数をセーブ前に噛ませればいい。 (add-hook 'emacs-lisp-mode-hook 'check-parens-before-save) (defun check-parens-before-save () (add-hook 'write-contents-functions 'check-parens nil t) ; local-hook )