タグ

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

  • GitHubのリリースノート自動生成機能からCHANGELOG.mdを生成する | おそらくはそれさえも平凡な日々

    tl;dr GitHubのリリースノート自動生成のAPIを用いてkeep a changelog形式のCHANGELOG.mdを出力するツールを作った https://github.com/Songmu/gh2changelog gh2changelog -all -unreleased とかで出力 細かいオプションはヘルプ等を参照のこと ghchに引数体系は近いです GitHubには、リリースノートを自動生成する機能がある。これは、リリース間でマージされたpull requestのタイトルを一覧し、リリース項目としてGitHub Releases上に出力してくれるものです。リポジトリ上に.github/release.yml設定ファイルを配置すれば、pull requestの作者やラベルを元にグルーピングしたり非表示にするといった出力内容のカスタマイズもできる。 このあたりの実際の

    GitHubのリリースノート自動生成機能からCHANGELOG.mdを生成する | おそらくはそれさえも平凡な日々
  • 雌伏の時 | おそらくはそれさえも平凡な日々

    カッコつけたタイトルを付けてしまった。中二っぽい。 強がりと言うか、自分に言い聞かせている部分もあるのだと思う。 有り体に言うと、新しい環境にまだ苦しんでいて、上手く動けていない。こんなことを書くと同僚に心配されてしまいそうだが、同僚には現状を伝えていて、その上で信頼してくれているとも感じている。会社に不満があるわけではなくて満足している。 少し精神的に参っていたので、今週前半は少し休ませてもらった。これは休んだほうが良いな、と思ってyoshioriさんに相談したところ、こちらから休みについては何も言わずとも「休んだほうが良いよ」と言ってくれた。話が早くてありがたかった。 現状意識していることや感じていることについて書き留めておく。 成果を完璧に出せてはいないが淡々とやる 現状、社内では成果目標を定めて、達成度を振り返るというのを毎月やっているが、1月に関しては100%をつけることができた

    雌伏の時 | おそらくはそれさえも平凡な日々
  • Nature Remo作ってる会社のCTOになったのでみんな買ってくれよな! | おそらくはそれさえも平凡な日々

    6月1日付けでNature Japan株式会社の取締役CTOに就任しました。最初の営業日の6/3(月)からいきなり台湾出張に行ってきました。良いスタートアップ感。ついでに日6月5日に39歳になりました。新たなチャレンジにワクワクしています。 大塚(@maaash)さん、村瀬(@typester)さんに続く3代目のCTOとなります。2人はカヤック時代の同僚でもありますが、カヤックのラボチームのダブルエースだった彼らの後任としてCTOをやるのは恐れ多いのですが、僕は組織づくりなど含めて僕なりに組織に貢献していきます。 当社はおかげさまでスマートリモコンのNature Remoが好調で、現在はNature Remo Eというスマートエネルギーハブの開発を進めているところです。今後は電力なども見据えて事業を展開していく計画で面白いフェーズにあります。 まだ、社員全員でも10人に満たない小さな会社

    Nature Remo作ってる会社のCTOになったのでみんな買ってくれよな! | おそらくはそれさえも平凡な日々
  • 育児休業を取得しています | おそらくはそれさえも平凡な日々

    というエントリを書こうと思っていたら、あっという間に残り数日になってしまった。 てことで、3月頭から今月いっぱい育児休業中です。去年、id:motemenが短期で取得してたので、そういうのもアリか、と思って僕も取得してみることにした。 年子で大変なので何か手伝えればいいなってのは少しあるんですが、どうせあまり戦力にはならないだろうので、折角の機会なので育児経験をしたいって言うのが一番大きなモチベーション。 朝早起きするのは大変ですが、最近忙しさにかまけて怠っていた料理とかを心置きなくできるのが良い。僕の料理とはちょっと趣向が違うので、1歳半を過ぎた娘がべてくれるか心配だったけど、物珍しさか結構べてくれるのは嬉しい。 戦力にはあまりなってない気がしますが、どちらかと言うと僕の我儘で育児休業を取得することを許してくれたには感謝しています。おかげさまで楽しんでいます。 会社側は、まあ僕

    育児休業を取得しています | おそらくはそれさえも平凡な日々
    hisaichi5518
    hisaichi5518 2017/03/29
    とてもいい
  • Redisアプリケーションパターン | おそらくはそれさえも平凡な日々

    この記事は、はてなエンジニアアドベントカレンダー2016の12日目の記事です。 先日こういうツイートをしました。 Redisはキャッシュ用途のミドルウェアだと思わない方が良いと思う — songmu (@songmu) 2016年12月10日 言いたかったのは、Redisはキャッシュのためだけのミドルウェアだと誤解されがちなのですが実際はそうではないということです。実際、公式サイト を見に行くと以下の様なことが書かれています。 Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker. つまり、Redisは多彩なデータ構造を保持できるインメモリーのデータストアで、様々な活用法があり、キャッシュとして「も」使える、とい

    Redisアプリケーションパターン | おそらくはそれさえも平凡な日々
    hisaichi5518
    hisaichi5518 2016/12/14
    ゲーム作ってた時にRedisでチーム内ランキングとか作ってた記憶がかすかにある
  • はてなに入って2年くらい経ちました。CTOとかMackerelとか | おそらくはそれさえも平凡な日々

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

    はてなに入って2年くらい経ちました。CTOとかMackerelとか | おそらくはそれさえも平凡な日々
  • より良い `go run` を実現する goshim | おそらくはそれさえも平凡な日々

    https://github.com/Songmu/goshim プロジェクトでちょっとしたスクリプトを書いてリポジトリで共有したいとなった時に、スクリプト言語なら楽ですが、Goで書くのはやや面倒です。リポジトリを分けるようなものでもないし、わざわざ go install させるようなものでもないけど、ビルドしたバイナリをどこに置くのかなどが悩ましい問題です。macを使っている人もいればlinuxを使っている人もいるのでバイナリをリポジトリに配置するわけにもいきません。 go run でも良いかと思われるかもしれませんが、当にちょっとしたものならよいいのですが、以下の様な問題があります。 複数ファイルになった時に go run main.go hoge.go とかやるのがダルい (% go run $(go list -f '{{join .GoFiles " "}}') [args..

    より良い `go run` を実現する goshim | おそらくはそれさえも平凡な日々
  • 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やコマンドラッパー用のツールを書いた | おそらくはそれさえも平凡な日々
  • PerlとRedis | おそらくはそれさえも平凡な日々

    この記事は Perl5 Advent Calendar 2015 の7日目の記事です。昨日は、 @karupanerura さんの XSことはじめ でした。 今回は、RedisをPerlで扱う上での便利CPANモジュールを紹介します。大体 @shogo82148 無双になります。 Redis::Fast RedisクライアントはRedis::Fast一択です。Redis.pmが公式推奨のモジュールですが、これはPure Perl実装なのでパフォーマンスがそれほど良くありません。 Redis::FastはRedis.pm互換のインターフェースを持ったXSモジュールであり、内部的にはRedis公式のCクライアントであるhiredisのバインディングになっているので、安定していて使いやすいといえるでしょう。 my $redis = Redis::Fast->new; $redis->incr('

    PerlとRedis | おそらくはそれさえも平凡な日々
    hisaichi5518
    hisaichi5518 2015/12/17
    shogo82148無双
  • Goでプロンプト簡単に出すやつ書いた | おそらくはそれさえも平凡な日々

    コマンドラインツールを書くときに、プロンプトを出したくなることありますよね?ただ、ちゃんとプロンプトを出すのは案外難しかったりもします。例えば以下の様な要求があるわけです。 自動化の妨げになるからターミナルじゃない時はスキップして欲しい とにかく簡単にプロンプトを表示させたい パスワード入力では入力を隠したい 複数の選択肢から上手いこと選択させたい 単に(y/n)だけ入力させたい ということで書いたのがこちら。 https://github.com/Songmu/prompter 以下のように、それぞれの要求を簡単に解決できます。 var twitterID string = prompter.Prompt("Enter your twitter ID", "default") var passwd string = prompter.Password("Enter your passwo

    Goでプロンプト簡単に出すやつ書いた | おそらくはそれさえも平凡な日々
  • kamipo TRADITIONALでは防げないINSERT IGNOREという名の化け物 | おそらくはそれさえも平凡な日々

    インスパイア元→kamipo traditional (というかSTRICT_ALL_TABLES) では防げないMyISAMという名の化け物 タイトルが全てです。ピンときた方は読み進む必要はありません。 データがなかったらINSERTして欲しいけど既に入っている場合には何もして欲しくないみたいな処理をするときに、 INSERT IGNORE を使ってしまうことがありますが、 INSERT IGNORE はユニークキー制約違反だけじゃなくて、あらゆるエラーをIGNOREしてしまいます。つまりkamipo TRADITIONALすらIGNOREしてしまうのです。なので使わないほうが安全です。 様子です。 mysql> SET SESSION sql_mode='TRADITIONAL,NO_AUTO_VALUE_ON_ZERO,ONLY_FULL_GROUP_BY'; Query OK, 0

    kamipo TRADITIONALでは防げないINSERT IGNOREという名の化け物 | おそらくはそれさえも平凡な日々
  • ルーク!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を使え! | おそらくはそれさえも平凡な日々
  • プログラマー定年の日に父親になりました | おそらくはそれさえも平凡な日々

    facebookやTwitterでは思っていたよりたくさんのお祝いの言葉を頂き、当にありがとうございました。この場でお返事とさせていただきます。 6月5日に35歳になりました。よく言われるプログラマ定年説カッコワライっていうやつです。 日付を同じくして、子供が生まれました。自分でも驚きです。 プログラマ定年の日に第一子を授かりました。 — songmu (@songmu) 2015, 6月 5 奥さんは僕の誕生日に合わせて産みたかったみたいなので特に喜んでいます。なんか色々あってここまできたなーという感じです。産まれて当に良かった。出産にも立ち会えた。会社の皆様のバックアップにも感謝です。 前日入院したときに、同室の隣の妊婦さんが出産前で、ものすごくつらそうなうめき声を上げながら分娩室に移動していたのですが、自分の奥さんがこうなったらいたたまれなくて精神的にキツイだろうなーとか(普段奥

    プログラマー定年の日に父親になりました | おそらくはそれさえも平凡な日々
    hisaichi5518
    hisaichi5518 2015/06/07
    めでたすぎる
  • golintをCIする | おそらくはそれさえも平凡な日々

    go vetは失敗時に終了ステータスがnon zeroなんだけど、golintは指摘項目があっても終了ステータスが0なのでエラー扱いにならない。golintはコーディング規約的な推奨事項なのでエラー扱いじゃないのは妥当そう。 ただ、細かい指摘し合いで消耗したくないのでgolintで警告が出たらCIがコケるようにしたかった。以下のようにして無理やりエラーを出すようにした。 #/bin/sh golint ./... | tee .golint.txt test ! -s .golint.txt 標準出力になんか出てたら失敗になるようにという感じ。出力ちゃんと見たいからteeかましてる。 更にいうと、golintは$GOOSを見てくれているので$GOOSを切り替えながら回せばビルド対象毎の警告も網羅できる。 #/bin/sh rm -f .golint.txt for os in "linux

    golintをCIする | おそらくはそれさえも平凡な日々
    hisaichi5518
    hisaichi5518 2015/01/12
    良い
  • ソースコード以外もとにかくテストする。もしくはカバレッジだけではダメだという話 | おそらくはそれさえも平凡な日々

    あなたはプロジェクトのソースコードに対して適切にCIを回しているかもしれません。定期的にコードカバレッジの測定も行い、90%以上もしくは100%の数字を出しているかもしれません。 しかし果たしてそれで十分でしょうか?もしくはコードカバレッジだけにとらわれすぎていないでしょうか? 監視とは(システムに対する)継続的なテストである、というのは筆者の尊敬する奥一穂氏の言葉ですが、その逆もしかりで 「テストとはプロジェクトに対する継続的な監視である」 ということも言えます。 その観点に立ってみると、プロジェクトのソースコード以外にもテストが必要なものがたくさんあることに気づくでしょう。以下に実際に筆者が自分のプロジェクトの中でソースコード以外にテストを書き、CIを回していたものを挙げてみます。 アプリケーション設定ファイルのテスト 開発中に番用の設定ファイルを使うことはないため、番用の設定ファ

    ソースコード以外もとにかくテストする。もしくはカバレッジだけではダメだという話 | おそらくはそれさえも平凡な日々
    hisaichi5518
    hisaichi5518 2014/12/25
    いい話。こういうのを元々やってないプロジェクトがこういうことをやる場合の知見が欲しい。
  • New Class of Vulnerability in Perl Web Applicationsの`param`の挙動に関しての補足とか | おそらくはそれさえも平凡な日々

    New Class of Vulnerability in Perl Web Applicationsの`param`の挙動に関しての補足とか New Class of Vulnerability in Perl Web Applicationsの紹介 つい最近のCGI.pmでは$cgi->param('foo')をリストコンテキストで受けると警告が出るようになっているのですが、その背景にこういう話があったことを知りました。ちなみに、$cgi->paramの挙動変更に関してはFormValidatro::Liteにp-rが来てたので把握してた次第。 CGI.pmは今後は複数の値を受け取る場合は$cgi->multi_param()を使うことが推奨される流れになっています。僕は元々のparamの挙動はそんなに嫌いじゃないのですが、とは言え意図せぬ脆弱性を起こしうる挙動はよろしくないのでインタ

    New Class of Vulnerability in Perl Web Applicationsの`param`の挙動に関しての補足とか | おそらくはそれさえも平凡な日々
  • 「エンジニアならリモートワークは簡単だ」と思ってはいけない | おそらくはそれさえも平凡な日々

    「強いチームはオフィスを捨てる」を読んだ。「小さなチーム、大きな仕事」でもそうだったが、 とにかくやって見ろ。やれば分かるさ やらない理由がない というふうにガンガン煽っていくスタイルが小気味良い。 とは言えしっかりリモートワークのリスクについても述べられていて、リモートワークは難しいなと思わせる内容でもあった。特に、メンタル面を含めた健康リスクに関しては相当気を使わないといけないように感じた。 リモートワークを実現する上で大事なポイント 個人的に大事だと思ったのが以下の2点。 信頼 自由と規律 相手をとにかく信頼して、自由と裁量を与える。 信頼された側は信頼に応えようとする。ただ、自由を与えられた場合に上手くいかないことがある。そこで、決まりをお仕着せてしまうのではなくて、人が規律を決めるようにする、それまで待つのが大事なのだろう、と感じた。 例えば、始業時間は会社が決めるのではなく、

  • 株式会社はてなに入社しました | おそらくはそれさえも平凡な日々

    日は9月1日。エイプリルフールではなくて、防災の日です。 勤務地は東京の表参道ですが、今日から2週間だけ京都で働くので、新幹線の中でこのエントリを書いています。YAPCのトークでも話しましたが、東京で僕と一緒に働いてくれるエンジニアを絶賛募集中です。 長くなるのでとりあえずwishlistを置いておきますね。 http://www.amazon.co.jp/gp/registry/wishlist/3L07LJZVYI89C/ FA宣言したら20数社から連絡を頂いたんですが、その中からはてなを選ぶことにしました。はい。Perlの会社ですね。とは言えPerlは書かない予定です。とか言いつつちょいちょい書いてしまうことでしょう。 「Perlで、日語の会社じゃねーか!」というツッコミが飛んできそうですが、はてなが一番自分を必要としてくれたと感じたので、入社させてもらうことにしました。こういう

    株式会社はてなに入社しました | おそらくはそれさえも平凡な日々
  • クソコードに対する怒りとコードレビューにおける人格攻撃について | おそらくはそれさえも平凡な日々

    デキるプログラマだけが知っているコードレビュー7つの秘訣 7つの秘訣の1〜5は当にそのとおりだと思います。 「怒り」って言葉を使っているところはなかなか画期的だと感じた。というのも僕は前から「人格攻撃に思われて」しまうような、コードで人を殴るようなことをしてしまう人が出てきてしまうのは何故かということを考えた時に、そこには「コードに対する怒り」があるからだろうなと思っていたからである。怒りがあるからこそ強く指摘しすぎてしまうことが起こりうる。 「怒り」というのはつまり「感情」である。であれば、「その『怒り』はコードに向けられたものであり、書いた人に対してのものではないので、その人に対しての攻撃ではない」というのは、理屈ではかろうじて通るかもしれないが、書いた人の「感情」的には通らないこともあることは理解したほうが良いと思う。 じゃあ怒らなければ良い、という話にはしたくなくて、どうしても怒

    クソコードに対する怒りとコードレビューにおける人格攻撃について | おそらくはそれさえも平凡な日々
  • Perlで一枚岩のスクリプトをテスタブルにする | おそらくはそれさえも平凡な日々

    Perlで単一ファイルのスクリプトを書くと、すぐに配置して動かせるので重宝しますが、テストを書きづらいのが難点です。 ちゃんとpmファイルに分割して云々とかやると単一ファイルで動かなくなるし、かと言ってfatpackするのもちょっとした用途だったらやり過ぎだしめんどくさい。 ということで以下のように書いてはどうか。 if ($0 eq __FILE__) { main(); } sub main { ... } $0に実行ファイル名が入っているので、それがスクリプトファイル名と一致していたらmainの処理を実行する。pythonのif __name__ == '__main__':みたいな感じ。 このスクリプトをテストしたいときは、普通にテストスクリプトを書いてrequire 'main.pl';とかやれば、plファイルの中で定義されている関数とかが個別に呼び出せるのでそれをテストしてやれ

    Perlで一枚岩のスクリプトをテスタブルにする | おそらくはそれさえも平凡な日々
    hisaichi5518
    hisaichi5518 2014/08/14
    caller使ってた