ブックマーク / songmu.jp (35)

  • GoのテストをCIで簡単に並列実行する | おそらくはそれさえも平凡な日々

    https://github.com/Songmu/gotesplit gotesplitというかなり便利なツールを書いた。Goのテストをいい感じのサブセットに分割して、それを実行するものです。このアプローチで、社内のテストを15分から3分くらいまでに短縮しました。 これを使えばCI環境での高速なテストの並列実行を簡単に実現できます。 実例 CircleCIGitHub Actions上で簡単に導入できます。 CircleCIの場合 parallelism: 5 docker: - image: golang:1.15.3 steps: - checkout - run: command: | curl -sfL raw.githubusercontent.com/Songmu/gotesplit/main/install.sh | sh -s bin/gotesplit ./... -

    GoのテストをCIで簡単に並列実行する | おそらくはそれさえも平凡な日々
    papix
    papix 2020/10/23
  • Android7.1以前でLet's Encrypt証明書のサイトが見られなくなる | おそらくはそれさえも平凡な日々

    追記: その後の動きについて書きました → Let's Encryptの証明書切替周りその後 このサイトはLet's Encryptで証明書発行しているのでタイトルの件が気になったのだが、どうもあまり話題になっていない。恥ずかしながらSSL周り詳しいわけじゃないので、誤っているかも知れない。識者の意見を求む。 Let's Encryptが使われているサイトがAndroid7.1以前のバージョンで今年の9月29日以降見られなくなる可能性がある 延命策は用意されそうだが、それも来年の9月29日まで Let's Encryptのルート証明書切り替え計画に起因している Let's Encryptのルート証明書の変更 Let's Encryptはルート証明書を自身(ISRG)の認証局のルート証明書(ISRG Root X1)に切り替えようとしている。現在は、IdenTrustのルート証明書(DST

    Android7.1以前でLet's Encrypt証明書のサイトが見られなくなる | おそらくはそれさえも平凡な日々
    papix
    papix 2020/08/07
    ナルホドちゃんと調べる必要がありそう...
  • RDBの作成時刻や更新時刻用カラムに関するプラクティス | おそらくはそれさえも平凡な日々

    RDBのレコードに、作成日時や更新日時を自動で入れ込むコードを書いたりすることあると思いますが、それに対する個人的な設計指針です。ここでは、作成日時カラム名をcreated_at、更新日時をupdated_atとして説明します。 tl;dr レコード作成日時や更新日時をRDBのトリガーで埋めるのは便利なのでやると良い ただ、アプリケーションからそれらのカラムを参照することはせず別に定義した方が良い MySQLにおける時刻自動挿入 MySQL5.6.5以降であれば、以下のようにトリガーを設定すれば、レコード挿入時に作成日時と更新日時を、更新時に更新日時を、DATETIME型にも自動で埋めてくれます。いい時代になりました。(MySQLが遅すぎたという話もある) `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `updated_

    RDBの作成時刻や更新時刻用カラムに関するプラクティス | おそらくはそれさえも平凡な日々
    papix
    papix 2019/10/21
    わかるわかるわかるわかるわかるわかるわかるわかるわかるわかるわかるわかるわかるわかるわかるわかるわかるわかるわかるわかるわかるわかるわかるわかるわかるわかる................
  • お知らせ | おそらくはそれさえも平凡な日々

    日頃お世話になっている皆様へのお知らせです。なるべく多くの方に直接お伝えしたかったのですが、この場でのお伝えになってしまった方には申し訳ありません。 はてな退職します。4/17(水)が最終出社でした。所属は5/31(金)までです。 ずっとはてなで働きたいと思っていましたし、この絶好のタイミングで辞めてしまうのは勿体無いという気持ちもあります。ただ、次の挑戦に関して時間的な制約もあったため退職させてもらうことになりました。この詳細はまた別途お知らせできればと思っています。 2014年に現在のはてな東京オフィスの一人目のエンジニアとして入社し、その後、チーフエンジニアと、Mackerelのプロダクトオーナー(マネージャー)を兼務してきました。 チーフエンジニアとして組織に、Mackerelではプロダクトとビジネスに関わりました。入社当時、私一人だけだった東京オフィスのエンジニアも今では二桁に

    お知らせ | おそらくはそれさえも平凡な日々
    papix
    papix 2019/04/18
    はてなの事は俺たちに任せろ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 次の新天地でのご活躍, 本当に楽しみにしています. 長い間, 本当にありがとうございました.
  • YAPC::Tokyo 2019で「多くのCPAN Authorに育てられ、息をするようにCPANモジュールを書けるようになり、そして分かったこと」というトークをします | おそらくはそれさえも平凡な日々

    YAPC::Tokyo 2019で「多くのCPAN Authorに育てられ、息をするようにCPANモジュールを書けるようになり、そして分かったこと」というトークをします https://yapcjapan.org/2019tokyo/ プロポーザル通ったので、テーマの「報恩謝徳」に即した、タイトルの通りのトークをさせてもらえることになりました。LT、キーノートの直前のメインホールでのセッションなので、キーノートの席確保がてらでも良いので、是非お越しください。あまりコードもでてこないのでカンファレンス終盤の疲れた頭にはちょうどよいトークになると思います. https://yapcjapan.org/2019tokyo/timetable.html#/detail/15 内容は上記にも書いてあるとおりですが、僕自身Perlコミュニティーのおかげで一人前のプログラマーになれたという思いがあるので

    YAPC::Tokyo 2019で「多くのCPAN Authorに育てられ、息をするようにCPANモジュールを書けるようになり、そして分かったこと」というトークをします | おそらくはそれさえも平凡な日々
    papix
    papix 2019/01/04
  • Goツールのクロスビルドとパッケージングのためのgoxzというツールを作った | おそらくはそれさえも平凡な日々

    Goツールのクロスビルドと成果物生成には個人的に長らく、goxcを愛用していましたが、その乗り換えとして、goxzというのを作った。go + x(cross) + z(zip)でgoxz。便利です。 https://github.com/Songmu/goxz goxcは非常に高機能なのですが、僕がその機能の一部しか必要ないことや、goxcのメンテ自体も止まっている(とオフィシャルでも案内されている)ことが気になったので作りました。 具体的には「Goツールのクロスビルドと成果物のアーカイブ生成をパラレルにおこなう」ことしかしない。アーカイブ生成時に、リポジトリからLICENSEやREADMEを自動的にかき集めるのはやってくれます。 基的には「設定より規約」という感じで、良い感じのデフォルトを決め打ちにして、あまり細かい設定項目などは作らない想定です。 インストール https://git

    Goツールのクロスビルドとパッケージングのためのgoxzというツールを作った | おそらくはそれさえも平凡な日々
    papix
    papix 2017/12/26
  • あらゆる日付文字列をよしなに扱うgo-httpdate を書いた | おそらくはそれさえも平凡な日々

    https://github.com/Songmu/go-httpdate Perl界には HTTP::Date という便利モジュールがあります。これは、あらゆる日付文字列を特にフォーマットの指定無しによしなにパースしてくれるもので、クイックハックに非常に有用です。ISUCONでは毎回使っている気がします。 このモジュールは異常な正規表現によって成り立っています。おそらく元々はその名の通り、単にHTTPのための日付フォーマットを扱うモジュールだったのでしょうが、徐々に拡張が継ぎ足されてこのようなモジュールになったのだと想像されます。 で、これをGoに移植しました。以下のように使います。 import "github.com/Songmu/go-httpdate" t1, _ := httpdate.Str2Time("2017-11-11", nil) t2, _ := httpdate.

    あらゆる日付文字列をよしなに扱うgo-httpdate を書いた | おそらくはそれさえも平凡な日々
    papix
    papix 2017/11/15
    “正規表現祭り”
  • 書籍「Mackerel サーバ監視[実践]入門」を執筆しました | おそらくはそれさえも平凡な日々

    Mackerel サーバ監視[実践]入門 やっと出せました。このは、僕がはてなに入社してからずっと携わっている、Mackerelというサーバー管理・監視サービスに関するです。Software Design誌の2015年3月号から2016年11月号まで掲載していた「Mackerelではじめるサーバ管理」という連載の内容をベースに再構成し、加筆、修正をおこなったものです。 連載時は、主に id:stanaka, id:y_uuki と僕の3人で執筆をローテーションし、書籍化にあたっては、id:sugiyama88, id:daiksy, id:a-know と僕の4人で、加筆、修正作業をおこないました。この6人が著者陣となります。連載と書籍化両方に携わっているのは僕だけで、中心的に携わらせてもらいました。 このを通して、Mackerelの使い方を学ぶとともに、サーバー管理・監視についても

    papix
    papix 2017/08/28
  • おそらくはそれさえも平凡な日々: ワンライナーでOOなPerlモジュール使うときに、2回もモジュール名を打ち込んでいられるほど人生は長くない件について

    ワンライナーでOOなPerlモジュール使うときに、2回もモジュール名を打ち込んでいられるほど人生は長くない件について ランダムな文字列を求めたい時に以下のようなコマンドを打つことがあるが、String::Randomを2回も打ち込んでいられるほど人生は長くはなかった。 % perl -MString::Random -E 'say String::Random->new->randregex("[0-9a-z-A-Z]{12}")' なので、Lというモジュールを書いてみた。 https://github.com/Songmu/p5-L これを使うと上と同様の処理が以下のように書ける。 % perl -ML -E 'say l("String::Random")->new->randregex("[0-9a-zA-Z]{12}")' ただ、lという関数をかますのがダサい感じなので、 % pe

    papix
    papix 2017/06/27
  • ISUCON7開催に寄せて。もしくはISUCON6予選問題作問奮闘記 | おそらくはそれさえも平凡な日々

    ISUCON7開催決定 めでたいですね。開催されるかどうかハラハラしていたので、開催が決まって良かったです。 考えてみたら、昨年のISUCONに関して個人ブログの方に何も書いてなかったので書いてみます。書いたら「とにかく辛かった」みたいな話ばかり出てきそうなので、それが影響して今年の問題作成に名乗りを上げる人がいなかったら困るなと思って、書くのを躊躇していた部分もあります。 問題作成することになったきっかけ 2015年末当時の話になりますが、過去3回優勝させてもらっていたので、そろそろお鉢が回ってくるんじゃないかとは思っていました。過去のISUCON優勝者、もしくは上位入賞者を擁する企業の中で、はてなはまだ問題作成をしていなかったからです。 回ってきたら困るな、と思っていたのも事実です。過去の問題作成者に比べると、僕は明らかにエンジニアとしての実力が見劣りするからです。過去の優勝もチームメ

    ISUCON7開催に寄せて。もしくはISUCON6予選問題作問奮闘記 | おそらくはそれさえも平凡な日々
    papix
    papix 2017/06/20
  • 何のためにバージョンロックをするか | おそらくはそれさえも平凡な日々

    外部ライブラリに依存する時に、どのようにバージョンロックをすべきかどうかという話。僕個人のスタンスです。 開発しているのがライブラリであれば依存ライブラリをバージョンロックをするべきではない 最低バージョンの指定に留めるべき(これは寧ろ積極的にやって良い) 依存ツリーが大変なことになってコンフリクトが避けられないため 実運用しているサービスやアプリケーション的なソフトウェアであればバージョンロックした方がいい これは「ある時点のビルドやリリースの再現性」のためが一番大きいと思っている 古いバージョンにとどまって良いというわけではない 基的には、開発しているものがライブラリであれアプリケーションであれ、 とにかく依存先の最新についていく のが前提で、その前提に立った場合に、上のような考え方になるかな、と思っている。 特にライブラリ作者は依存ライブラリに非互換変更が入って動かなくなったら、頑

    何のためにバージョンロックをするか | おそらくはそれさえも平凡な日々
    papix
    papix 2017/02/13
  • おそらくはそれさえも平凡な日々: 「仕事に対する愛と情熱とプライド」若しくは新卒に向けたスピリチュアルな話

    そろそろ新卒研修とかどうしようかとかで、エンジニア陣でわたわたしたりしています。「Songmu先生にはスピリチュアルな話をしてもらわないといけませんね」みたいなことを言われてなんかスピリチュアルキャラとして定着しているのもどうかと思います。 去年も「『仕事に対する愛と情熱とプライド』ってお題でソーシャルゲームチームの新卒向けに話してください」とか研修担当の人に言われて、なんでそんな熱いキャラとして認知されてるか謎だったんだけど、それで30分くらい話しました。 それが結構評判良かったみたいで、直接はあまり言われなかったんだけど「研修の時の先輩の話の中で一番印象に残っている」って言ってくれている人が多いって話を2年目の人から又聞きで知って嬉しく思っていました。 とか思っていたら、hisaichi5518の人は「なんかすごくいい話してた覚えはあるんですけど内容全く覚えてません」とかsoh335の

    papix
    papix 2017/02/09
  • 怒涛の2016年を振り返る | おそらくはそれさえも平凡な日々

    早めに振り返っておく。今年はとにかく怒涛だった。完全にキャパオーバーしてたし、色々遅くなったりして各方面に迷惑もかけたりもして、申し訳なかった。 Mackerel 好調 おかげさまでMackerelが好調である。このフェーズのプロダクトのディレクターをさせてもらえているのはめちゃくちゃ幸せなことだと思う。 なので忙しいのはかまわないし、寧ろ良いことなのだが、やりたいことが無限にあってとにかく手が足りない。その割には僕自身はあまり手が動かせてない。チームメンバーも増えたのでマネージメント的な仕事も増えている。 なんか、完全に管理職のジレンマに陥ってきているのだが、とは言え慣れてない仕事をするのは楽しい。パフォーマンスもっと出せるやろ、って自分を叱咤しながら「ピーターの法則に負けない」って思って生きている。 Mackerelを開発していて思うのは「世の中の変化の速度よりも早い開発スピードを出さ

    怒涛の2016年を振り返る | おそらくはそれさえも平凡な日々
    papix
    papix 2016/12/05
    めっちゃ怒涛...!
  • 最近のPerlのExporter事情とかExporter::Liteとか | おそらくはそれさえも平凡な日々

    結論 use Exporter 'import' で充分 説明 今のはてなでは割と標準的にExporter::Liteが使われている。Liteの方があんま余計なことしないからとは聞いてはいたが、それで依存増やすのもどうなのかなーとか思っていたので個人的にはこれまでExporterしか使ってなかった。Exporterは標準モジュールだし。Exporterにしてもuse parent 'Exporter'なのかuse Exporter 'import'なのかという流儀の違いがあって、個人的にはuse parent 'Exporter'を使っていた。その辺りについて再考した。 ExporterかExporter::Liteか もうあまりExporter::Liteを使う理由はないように感じる。 Exporterの最近のソースを読むと、かなりシンプルになっていることがわかる。 Exporterの複

    最近のPerlのExporter事情とかExporter::Liteとか | おそらくはそれさえも平凡な日々
    papix
    papix 2016/09/07
    parent使ってた...
  • はてなに入って2年くらい経ちました。CTOとかMackerelとか | おそらくはそれさえも平凡な日々

    この度はてなのCTOが id:stanaka から id:motemen に交代しました。僕はチーフエンジニアとして引き続き頑張っていく所存です。 stanakaとMackerel stanaka にはチーフエンジニアMackerelチームのディレクターを務める中で様々な指導をいただきました。 そのエンジニアリング能力、ビジネスも含めた視野の広さ、Mackerelに立ち上げたことに代表されるようなビジョンにはただただ圧倒される日々でした。 思い起こせば2年前、stanakaにMackerel事業の魅力やはてな東京オフィスでのエンジニアリングチームの立ち上げについて話をしていただきました。僕はそれらに魅力を感じはてなに入社しました。その後は、チーフエンジニアMackerelのディレクターなどの立場も与えてもらい、引き上げてもらったと感じています。 Mackerel事業にディレクターとして

    はてなに入って2年くらい経ちました。CTOとかMackerelとか | おそらくはそれさえも平凡な日々
    papix
    papix 2016/08/01
  • コミュ力が無いのはいつだって自分 | おそらくはそれさえも平凡な日々

    突然何を言い出すのかという話ですが、対話相手にコミュニケーション能力を求める醜さについて書きたくなったので書きます。 僕はオタクだったしスクールカーストで言うと下の方を彷徨ってきた。地元でもいろいろあって浮いていた。新卒時の就活も散々だった。なので、コミュ力がないことは自覚しているし、だからこそ「コミュニケーション能力」という言葉には警戒心があります。 比較的マイノリティであったことが多かった経験上分かったのは、相手とコミュニケーションが取りづらいな、と思うときは、そもそもプロトコルが異なる、ということです。 これは、話している自然言語が違うようなものだと考えるとわかりやすい。例えば、自分が日語しか話せず、相手がロシア語しか話せないのであれば、まともなコミュニケーションが成り立たないのは明らかです。そして、その時に、日語が話せない相手にコミュ力がないと思うような人はいないでしょう。 そ

    コミュ力が無いのはいつだって自分 | おそらくはそれさえも平凡な日々
    papix
    papix 2016/04/05
    大事なことが網羅されており最高の文章だった
  • horensoというcronやコマンドラッパー用のツールを書いた | おそらくはそれさえも平凡な日々

    リリースしました https://github.com/Songmu/horenso cron等、バッチジョブを走らせた場合にその結果通知やエラーレポートをどうするかは悩ましい問題です。ラッパースクリプトを統一的に噛ますのが常套手段ですが、そのためのツールとして、horenso というものをGoで作りました。報・連・相。その名の通り、実行ジョブの報告をつかさどってくれる君です。以下のようにして使います。 % horenso -r reporter.pl -- /path/to/job args... -- 以降に指定したコマンドが実行され、その結果がJSONとして標準入力経由でreporterに渡されます。reporterは実行可能なファイル、もしくはコマンドライン文字列であり、記述言語は任意です。reporterに渡されるJSONは以下の様なものです。 { "command": "per

    horensoというcronやコマンドラッパー用のツールを書いた | おそらくはそれさえも平凡な日々
    papix
    papix 2016/01/05
  • SQL::Translator::Diffで変なdiffが出る問題 | おそらくはそれさえも平凡な日々

    以下の様なことを結構前に話していたので掘り出して、ここに残しておくものである。 #perl@kayac:Songmu そういえば、SQL::TranslatorでMySQLで変なdiffが出る問題だけど、 #perl@kayac:Songmu カラム定義で、ちゃんと NOT NULL もしくは DEFAULT 値を指定すれば #perl@kayac:Songmu 変な change column が出ることは無くなりそうだということが昨日判明しました。 #perl@kayac:Songmu なので、 #perl@kayac:Songmu - indexにちゃんと名前を指定する #perl@kayac:Songmu - カラム定義に気をつける #perl@kayac:Songmu をすれば、変なdiffに悩まされることも減るんじゃないかと思います。 #perl@kayac:Songmu ただ

    SQL::Translator::Diffで変なdiffが出る問題 | おそらくはそれさえも平凡な日々
    papix
    papix 2015/11/29
    あ, これ1ヶ月位前にハマったやつだ
  • ルーク!MySQLではkamipo TRADITIONALを使え! | おそらくはそれさえも平凡な日々

    よくMySQLはゆるふわだから 値が勝手に切り詰められる エラーが起きずに変な値/日付が入る 不正なスキーマが入ってしまう など言われることがあります。ただそれは、そもそもの設定が悪いのです。(確かに昔デフォルトがゆるふわなのはいけなかったんですが) ということで、データベースには不正な値が入らないように設定はとにかく厳しくしておくのがオススメです。 じゃあどうするか。 MySQLSQL Modeによって、その辺りの制約をコントロールすることができます。以前、MySQLsql-modeで一番厳しいやつはTRADITIONAL、というのを書いたのですが、実はそれだけでは不十分で、TRADITIONAL,NO_AUTO_VALUE_ON_ZERO,ONLY_FULL_GROUP_BYとするのがより安心なようです。 これはkamipoさんに教えてもらいました。 @songmu TRADITI

    ルーク!MySQLではkamipo TRADITIONALを使え! | おそらくはそれさえも平凡な日々
    papix
    papix 2015/07/08
  • 何故僕はエンジニアとして対外発表をするのか | おそらくはそれさえも平凡な日々

    僕は来、人前に出て積極的に話そうとは思わないし、目立たずにおとなしく引きこもっていたいみたいな気持ちがある。潔癖な部分もあるので、プレゼンスばかり高くて技術力がないような中身が無い人間になりたくないし、そうなったら死ぬしか無い、みたいな気持ちもある。それなのに何故、ものすごく技術力があるわけではない自分が対外発表をするのか。 それは元はと言えば対外発表をするような側に行かないとエンジニアとして生き残れないのではないかという危機感があったからです。 Shibuya.pmの衝撃 初めて参加したShibuya.pmは#10だった。その頃の僕は一企業のよくある何でも屋の1人システム担当であり、開発のメインは前担当者から引き継いだレガシーASPだった。そしてつぶしの効く技術を習得したいと思いPerlを学び始めた頃だった。そしてPerlがそこそこ書けると手応えを感じ始めているところだった。 ところが

    何故僕はエンジニアとして対外発表をするのか | おそらくはそれさえも平凡な日々
    papix
    papix 2015/06/01
    “プレゼンスばかり高くて技術力がないような中身が無い人間になりたくないし、そうなったら死ぬしか無い、みたいな気持ちもある。”