私が歌川です

@utgwkk が書いている

技術

Twitter::Text のバグ取り風景

Twitter::Text のバグ取りの風景をお伝えします。このバグは 2020/11/21 17:46 時点の最新バージョンである 0.07 では修正されています。 やりたいこと この CPAN Testers report の環境 (win32, Perl 5.16.0) で Twitter::Text のテストが通るようにします…

section無しのINIファイルをPythonのconfigparserで読み書きしたい

Pythonの標準ライブラリであるconfigparserを使うと、INIファイル っぽいもの を読み書きすることができます。が、セクションより先に key=value が来ると configparser.MissingSectionHeaderError 例外が送出されパースに失敗します。 読み出すときはINIフ…

perlcriticのポリシー書いた

perlcriticとは perlcriticとは、Perlのlinterです。JavaScriptで言うところのESLintみたいな感じで、Perlのソースコードを解析して、バグを招きかねない・ポリシーに合致しないコードがあれば警告をしてくれます。 perlcritic本体にさまざまなポリシーが含…

perlcriticに --top オプションを渡したとき、severityが指定されてなかったら1になる

最初に回避方法を書くと、 --top オプションと一緒にseverityを指定してやるとこの現象は回避できる。 --top オプションが指定されると、severityが設定されてなかったら1 (最も厳しい) に設定されることが分かった。なんかバグってる? と思ったけどこうい…

twitter-textのPerl実装 Twitter::Text を公開した

Twitter::Text - Perl implementation of the twitter-text parsing library - metacpan.org Perlでツイートをバリデーションしたいときに使うことができます。どうぞご利用ください。 いろいろ学びがあったので、実装方針などについて書いていきます。 動機…

(デフォルトでは無効にしました) perl-insert-packageにパッケージ名の補完機能を追加した

VSCodeでPerlのパッケージ名を入力できる拡張機能 perl-insert-package に、パッケージ名の補完機能を追加した新バージョン 1.10.0 をリリースしました。どうぞご活用ください。どういうことかと言うと、以下の動画をご覧ください。 gyazo.com この拡張機能…

MySQLのEXPLAIN結果がどんどん変わっていく例

MySQLのEXPLAINが直感とは異なっていた事例 の続き。ふと実験中にEXPLAINを打っていたら、 rows が減っていることに気づいたのでさらに追試をした。 実験 MySQLのEXPLAINが直感とは異なっていた事例 の実験で、SELECT文にかかった秒数に加えて、EXPLAINの ro…

MySQLのEXPLAINが直感とは異なっていた事例

おもしろかったのでメモ。 CREATE TABLE `tbl` ( `id` BIGINT UNSIGNED NOT NULL, `done` BOOLEAN NOT NULL DEFAULT FALSE, PRIMARY KEY (`id`), KEY `done_and_id` (`done`, `id`) ); tbl テーブルに done = FALSE で100万行INSERTしておく SELECT id FROM …

SQLなら分かる

スプレッドシート、QUERY関数を通すとSQLっぽいやつが書けるようで、SQLなら分かる!!! と SELECT B, COUNT(B) WHERE B IS NOT NULL GROUP BY B ORDER BY COUNT(B) DESC とか書けておもしろかった https://t.co/1WM9omXaT0— うたがわきき (@utgwkk) 2020年10…

GitHub Actionsのworkflow commandは標準出力と標準エラー出力のどちらに出力するとよいか?

tl;dr 2020/10/13時点 (GitHub Actions runner v2.273.5) では、標準出力 (STDOUT) と標準エラー出力 (STDERR) のどちらに出力してもよい モチベーション テスト中にGitHub Actionsのworkflow commandを使いたい しかし、テストフレームワークが標準出力をca…

ふだんの開発で小さなPRに分けるために考えていること

ふだんの開発でPRを出すときに考えていること - 私が歌川です の続編です。小さなPRを出す、という話がありましたが、どうやって小さくしているのか、というのを書きます。 どういうメソッドが欲しいか考える Aという情報をBという画面に出したい Aを取得す…

ふだんの開発でPRを出すときに考えていること

業務の話です。OSSとかだとまた変わってくるのかもしれないし、共通することもあるかもしれません。 先に作戦を練る 実装する前に、方針段階でレビューしてもらえるとよい 自分だけでは気づけない考慮漏れとか、こういう方針もあるよっていう提案とか、いろ…

MySQLやPostgreSQLのWHERE INに空のリストを渡そうとすると文法エラーになる、SQLiteはエラーにならない

小ネタかつ備忘録です。 MySQL この記事ではMySQL 8での実行結果を書いてるけど、5.6でも同様に文法エラーでした。 Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 13615 Server version: 8.0.21-0ubuntu0.20.04.4 …

グリッチアイコン

グリッチコンポーネント便利で、今すぐアイコンを常時グリッチさせないといけない、というのにすぐ対応できる。 engineering.linecorp.com <script src="https://unpkg.com/@uit/glitch-image@0.0.9/dist/glitch-image/glitch-image.js"></script> <div style="width: 384px; height: 384px; margin: 0 auto;"></div>

【追記あり】echoでNew Relicのエージェントを使えるようにするミドルウェアを書いた

追記 nrechoというライブラリが公式から提供されているのでこっちを使ったほうがよいと思います。わざわざ自前実装をしてから見つけてしまったけど見つけられたのはよかったということでここはひとつ……。 そういうわけなので、以下の文章は読まなくてもよい…

ISUCON10 予選突破した #isucon

(:innocent::innocent::innocent:) というチームで、 id:nonylene id:wass80 と参加して、24位でめでたく予選突破できました。学生枠を使わずに予選突破できたのは初めてです。チームメンバーのブログも読んでください。 nonylene.hatenablog.jp wass80.hat…

関数の再帰深度を制限するデコレータ / おまじない再び

4ヶ月ぐらい前の話題だったけど、こういう感じで、関数の再帰深度を制限するデコレータは書けないのだろうか、とふと思った。@max_depth(10) なら同じ再帰呼び出し内で10回まで呼び出してよくて、10回を超えたらエラー。 @max_depth(10) def fib(n): if n <=…

落ちたテストを片っ端からtodoにして書き戻すTest2プラグイン

github.com 表題のものができました。 どういうことかというと、たとえば以下のようなテストを走らせると、 use strict; use warnings; use Test2::V0; use Test2::Plugin::MakeFailedTestTODO; ok 0; fail 'failed'; pass 'passed'; is 1, 0, 'multiline'; …

普段は使わないけど使わないといけない場合もあるような関数を気軽に使ってほしくないときの実装

この関数は挙動が難しいので普段は使わないでほしい、しかし使わないといけない場合があるので消すことはできない、ということがある。 許可リストにある場所以外から呼ばれてたらテストを落とすようにする、という実装を考えたけど、関数名をめちゃくちゃ難…

GitHub Actionsで「matrixの全テストが通らないとマージできないようにする」設定を簡単に行う方法

GitHub Actionsで、複数環境でテストしたいのでmatrixに分けて、branch protectionの設定で全環境のテストが通ったらmasterにマージ可能にしましょう、というのをやろうとするとちょっと面倒です。 matrixの数だけ必要なstatus checkに含めないといけない jo…

誰かに使ってもらえているコードを、さらに良くしてもらえるのはありがたい

GitHub Actionsで落ちたテストをアノテーションするpytestプラグインを書いてしばらく経過した。手元のPythonライブラリに追加して様子を見たりしていたのだけれども、まあ動いているからよいかな、という状態だった。 utgwkk.hateblo.jp 最近になって、バグ…

utgw.net をNetlifyで配信

utgw.netをNetlifyで配信するようにしました。見た目はとくに変わってないと思います。 Netlifyには特定のパスをHTTPリダイレクトする機能があり、 /labs/ 以下を https://sugarheart.utgw.net/labs/ にリダイレクトする、という設定ができたのがよかったで…

utgw.net/labs 以下のコンテンツを sugarheart.utgw.net/labs 以下で配信するように変更

utgw.net/labs は、私がJavaScriptで書いた小規模な(1ページで完結する)プログラム置き場でした。 適当にGitHub Pagesでホスティングしていたのですが、現代ならJSFiddleなどを使えばよいようなもので、サイトの大幅リニューアルでもやるかと思ったときの処…

6年前に作ったGoogle App Engineで動くTwitter botを更新した

github.com このブログで言ったことない気がするけど、素数bot (@sosuubot)というTwitter botを管理している。1時間おきにカウントアップした整数が素数かどうかをつぶやくだけのbotである。 6年前に作ったきりで、Python 2.7製で、Google App Engineで動い…

カラー絵文字をモノクロにする

🤔 <div style="text-align: center; filter: grayscale(1); font-size: 50pt;">🤔</div>

GitHub Actionsで、Perlの落ちたテストをアノテーションするTest2プラグインを書いた / GitHub ActionsのProblem matcherについて知った

表題にあるものを書きました。cpanm Test2::Plugin::GitHub::Actions::AnnotateFailedTest して use Test2::Plugin::GitHub::Actions::AnnotateFailedTest することで今すぐにご利用いただけます。 metacpan.org 以前書いたpytestプラグインとだいたい同じよ…

GitHub Actionsでテスト落ちた & 別のstepのoutputがtrue のときだけ走るstepを定義する

GitHub Actionsでテスト落ちた & 別のstepのoutputがtrue のときだけ走るstepを定義しようとしたけどできなかった - 私が歌川です の続きです。表題のようなworkflowを書こうとして結局やり方が分からなかったので、フォーラムに投稿したところ、回答をいた…

GitHub Actionsでテスト落ちた & 別のstepのoutputがtrue のときだけ走るstepを定義しようとしたけどできなかった

特定のテストが落ちたとき、診断情報ファイルをdumpする。後のstepで、そのファイルが存在する場合はoutputにフラグを記録して、フラグが立っているときは最後にupload artifactする。 以下のようなYAMLを書いたらできるかと思ったけどできなかった。最後のu…

GitHub Actionsで落ちたテストをアノテーションするpytestプラグインを書いた

表題のものを書きました。 pypi.org *1 workflow内でおもむろに pip install pytest-github-actions-annotate-failures してから使うとアノテーションされる、という寸法になっています。 pytestは簡単にプラグインを書けるのがいいですね。初めて書いたけど…

GitHub Actionsのworkflow commandでアノテーションするときのmessageで改行したい

GitHub Actionsのworkflow commandという機能を使って、workflowの中からリポジトリのファイルの特定の行に対してアノテーションを付けることができる。CIが落ちたときのスタックトレースやexpected, actualなど表示できて便利。 スタックトレースを出すとき…