タグ

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

  • Test::mysqld 0.20をリリースしました | おそらくはそれさえも平凡な日々

    この記事は、Perl5 Advent Calendar 2016 の16日目の記事の穴埋めということにしました。 https://metacpan.org/release/SONGMU/Test-mysqld-0.20 YAPC::Hokkaidoでkazuhoさんにコラボに加えてもらったので諸々調整してリリースしました。大きな機能差分は以下のとおりです。 MySQL5.7.6以降対応 複数のMySQLプロセスを同時に立てられるように(start_mysqlds) start_mysqlds 対応が入ったことに併せて、App::Prove::Plugin::MySQLPool 0.06がリリースされています。これに伴いテスト起動時に直列で複数プロセスを起動していたのが、並列で起動するようになり高速化が望まれます。 お試しください。 MySQL5.7.6対応は、Goの方はhttps://gi

    Test::mysqld 0.20をリリースしました | おそらくはそれさえも平凡な日々
    key_amb
    key_amb 2016/12/21
  • 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アプリケーションパターン | おそらくはそれさえも平凡な日々
    key_amb
    key_amb 2016/12/14
  • 「みんなのGo言語」の執筆に参加しました | おそらくはそれさえも平凡な日々

    みんなのGo言語【現場で使える実践テクニック】 「みんなのGo言語【現場で使える実践テクニック】」の執筆に参加させてもらいました。僕は第1章の「Goによるチーム開発のはじめ方とコードを書く上での心得」を担当しました。 主に、Goを始めたばかりの人に向けてのお約束や普遍的な考え方について個人のアレンジも加えながら書きました。このあたりはネット上には雑多な情報が混在しており、独自のやり方で回り道をしてしまっている人も多く見受けられることに課題意識があったので、このあたりの「レールを敷く」ことを意識しました。Goは思想的なところの説明も含めて公式ドキュメントが充実しており、そちらに同じようなことが書いていることも多いのですが、そこから一歩踏み込んだ実践的な内容になるようにしました。 雑誌以外の書籍執筆は初めてで良い経験をさせてもらいました。自分の名前がついたが書店に平積みされているのを見るのは

    key_amb
    key_amb 2016/09/18
  • `ghg` で GitHub Releasesから適切な実行ファイルを統一的に取得する | おそらくはそれさえも平凡な日々

    https://github.com/Songmu/ghg tl;dr % ghg get motemen/ghq とかやれば、GitHub Releasesに上がった最新の実行ファイルを取得できる。 % $(ghg bin)/ghq とかで実行可能。 $(ghg bin) を $PATH に追加してもよい。 % ghg get Songmu/ghch@v0.0.1 とかでバージョン指定も可能。 Goで書いたツールを提供する場合、クロスビルドしたものを GitHub Releasesに上げるのが定番となっています。 なぜ、 go get ではないのかというと go get の場合以下のような問題があるからです。 go get するにはGoの環境が必要 安定版ではなく、開発中の最新をビルドしてしまう ビルド情報などをバイナリに埋め込めない ただし、GitHub Releasesに上げる

    `ghg` で GitHub Releasesから適切な実行ファイルを統一的に取得する | おそらくはそれさえも平凡な日々
    key_amb
    key_amb 2016/07/06
    似たようなことをシェルスクリプトで頑張っていた僕。octokitとか使った方が楽でスマートですね。
  • Makefileを自己文書化する `make2help` | おそらくはそれさえも平凡な日々

    近年「タスクランナー」という言葉をよく耳にするようになりました。近年のWeb開発では、開発環境のセットアップ、依存ライブラリの管理、テストの実行、開発サーバーの起動、ビルド、デプロイ等等、とにかく気にしないといけないことが多いため、そういったタスクを一元管理してくれるタスクランナーは便利なやつです。 新しくプロジェクトに参加した際に、タスクランナーを見れば何をやれば良いのかだいたい分かるようになっているのが理想的だと思っています。 タスクランナーという言葉は主にJS界隈で使われており、そもそもタスクランナーなのかビルドツールなのかという話はありますが、ここでは便宜上それらをひっくるめてタスクランナーと呼ぶことにします。 gulp質的にはビルドツールですし。 Goの開発においては、タスクランナーとして、古き良きビルドツールであるところの make が主に使われます。 make も使って

    key_amb
    key_amb 2016/06/13
  • Mac上にGoの開発環境を構築する〜下準備編 | おそらくはそれさえも平凡な日々

    同僚がGoを始める上で、案外まとまった資料が無さそうだったので書いてみることにしました。 Macでhomebrewが入っていることが前提です。事前に brew update をおこない formula を最新のものにしておくと躓くことが少ないでしょう。 Goのインストール % brew install go エントリ執筆時点では、1.6.2 が入ります。Goはメジャーバージョンが同じ場合は、後方互換が保たれているので、基的に新しいやつを入れて問題ありません。 環境変数の設定 $GOPATH だけを決めればOKです。$GOPATH はどこでも良いのですが、ここでは $HOME/dev を $GOPATH に設定します。また、 $GOPATH/bin に $PATH も通しておきます。 export GOPATH=$HOME/dev export PATH=$GOPATH/bin:$PATH

    Mac上にGoの開発環境を構築する〜下準備編 | おそらくはそれさえも平凡な日々
    key_amb
    key_amb 2016/05/18
    はかどる情報だ。
  • Gitのtagとpull requestのマージ履歴からChangelogを自動生成する `ghch` | おそらくはそれさえも平凡な日々

    https://github.com/Songmu/ghch mackerel-agent のリリースフローでは、前回のリリース以降の、pull requestのマージ履歴を拾って、そこからChangelogを自動生成するということをおこなっている。 これは、1年半前くらいにPerlで書いていたのだが、この度汎用的にしてGoで書きなおした。それが ghch。前回打ったsemverっぽいgit tag以降のマージ履歴を抽出してくれる。例えば、こういう風にmackdownで出力がされる。 % ghch --format=markdown --next-version=v0.30.3 ## [v0.30.3](https://github.com/mackerelio/mackerel-agent/releases/tag/v0.30.3) (2016-04-27) * retry retire

    Gitのtagとpull requestのマージ履歴からChangelogを自動生成する `ghch` | おそらくはそれさえも平凡な日々
    key_amb
    key_amb 2016/05/11
    便利そう。
  • Goで外部コマンドのtimeoutを管理するやつを書いた | おそらくはそれさえも平凡な日々

    https://github.com/Songmu/timeout 使い方はSynopsisに書いてますが、以下の様な感じです。 tio := &Timeout{ Cmd: exec.Command("perl", "-E", "say 'Hello'"), Duration: 10 * time.Second, KillAfter: 5 * time.Second, // Optional } exitStatus, stdout, stderr, err := tio.Run() コマンド実行に時間がかかった場合は、Duration後にSignalが送られて、それでも終了しない場合には、KillAfterの指定があれば、KillAfter後にSIGKILLが送られるという具合です。 インターフェースは、coreutilsのtimeoutになんとなくあわせている感じです。go-timeo

    Goで外部コマンドのtimeoutを管理するやつを書いた | おそらくはそれさえも平凡な日々
    key_amb
    key_amb 2016/03/31
  • 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でプロンプト簡単に出すやつ書いた | おそらくはそれさえも平凡な日々
    key_amb
    key_amb 2015/07/26
  • 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という名の化け物 | おそらくはそれさえも平凡な日々
    key_amb
    key_amb 2015/07/20
  • ルーク!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を使え! | おそらくはそれさえも平凡な日々
    key_amb
    key_amb 2015/07/08
  • プログラマー定年の日に父親になりました | おそらくはそれさえも平凡な日々

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

    プログラマー定年の日に父親になりました | おそらくはそれさえも平凡な日々
    key_amb
    key_amb 2015/06/06
    おめでとうございます!!!
  • 何故僕はエンジニアとして対外発表をするのか | おそらくはそれさえも平凡な日々

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

    何故僕はエンジニアとして対外発表をするのか | おそらくはそれさえも平凡な日々
    key_amb
    key_amb 2015/06/01
    いい。
  • 外部キーNightで「我々(主語が大きい)は何故MySQLで外部キーを使わないのか」という発表をしてきました | おそらくはそれさえも平凡な日々

    発表資料:我々(主語が大きい)は何故MySQLで外部キーを使わないのか もう一月以上前ですが、外部キーNightという勉強会で、MySQLの外部キーについての発表をしてきました。 よく言われていることですが、それなりの規模のWebサービスMySQL運用となると外部キーを避けざるを得ない部分があり、とは言えその辺りに関してまとまった資料が余りなさそうだったので、自分なりにまとめた内容を話した次第です。 MySQLを使ったそこそこの規模のWebサービスを運用している人にとっては当たり前の内容しか書かれてません。ただ、「外部キー使わないとか馬鹿なの」とかそんな論調を見ることがあり、そういう意見に対して、実際問題外部キーを使えるとなれば便利だとは思いますが、それがわかった上で、使わないという選択をすることがあり得るということを示したかったというのがあります。 実際ブコメで「そこそこの規模ならば外

    key_amb
    key_amb 2015/03/17
  • 1