サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
災害への備え
blog.hifumi.info
今日(2017/04/20)時点ではまだリリースされていないが、nginx: be5cfa918bfcで、HTTP ステータスコード 308 Permanent Redirect1 がサポートされた。おそらく nginx 1.13.0 で利用可能になるだろう。 308 については、GIGAZINE の記事『新たなHTTPステータスコード「308」とは?』が分かりやすかった。301 Moved Permanently はリダイレクト時にリクエストメソッドをGETに変えてしまう可能性があり、例えばPOSTメソッドのリクエストボディが失われる懸念があった。それに対し、308 Permanent Redirect はリクエストメソッドの不変を保証する。 幅広い用途があるとは思えないが、以下のkazuhoさんのブコメにあるように、エンドポイントの変更などに対しては有用だろう。 新たなHTTPステータ
2年半ほど前にnginx vim syntaxを導入したのだが、nginxも日々進化しており、syntax highlightの効かない項目が増えてきた。使える機能に色がつかないと地味に気を取られるし、いつの間にか生産性を下げていたのかもしれない(そういう意味では、syntax highlightを使わない選択は合理的なのかも。) いつものようにnginx-develメーリスを眺めていたら、Vim用のパッチが送られており、Vimの設定ファイルがメンテされていることに気づいた1 2。そしてその設定ファイルこそが、元々使っていたevanmiller/nginx-vim-syntaxの移管先だった。nginx-vim-syntaxのREADMEをよく見ると、2013年12月に移管した旨が書かれている…ずっと気づいてなかった。公式が最強だった。 早速nginx-vim-syntaxを捨てて、以下の
2016年もあと数時間。昨年は新卒エンジニア研修に尽力していたが、今年はまた違った1年となった。 昇格 ペパボのエンジニア職位制度での承認を経て、シニアへの職位昇格が決まった。 いっそう身の引き締まる思いがする。専門職の格たるものを考え続けている。せめて、技術面でも組織面でもリーダーシップを発揮し、社の技術力を牽引し、日々の生産性向上について良い影響を及ぼせるよう研鑽していかなければならない。走りながら考えていこうと思う。 ペパボに新卒で入社し、ここに至るまで3年と半年強かかった。自己評価で鈍足。業務経験の無いところから出発し、先輩たちに色々な知識と経験を授かり、なにより会社のサービスそのものが自分を育ててくれたと思う。本当にありがとうございます。 まだまだ生馴れながらも、ようやく恩返しできるような立場に近づけたような気がする。 ngx_mruby のメンテナになった 『動的証明書読み込み
yumコマンドでパッケージを入れるときに、--enablerepoや--disablerepoを使ってリポジトリを指定することが出来る。 Puppet 3.6から、この2つの機能をinstall_optionsという属性に任せることで利用可能になった。 install_optionsとenable/disablerepoの使い方 使い方は簡単で、以下のようにinstall_options属性に配列か文字列で--enablerepo--disablerepoを指定すれば良い。 package { 'the-package': ensure => installed, install_options => ['--enablerepo=rpmforge', '--disablerepo=*'], } いつから使えるようになったか タイトルにも出だしにも書いたが、Puppet 3.6.0から使え
ngx_mruby には nginx の変数を操作するための Nginx::Var クラスがあります。対象となる変数は refs: nginx core variables の他、Alphabetical index of variables などをご参照ください。 例えば以下のようなコードで、Nginx の $date_local を参照することが出来ます。 v = Nginx::Var.new Nginx.rputs v.date_local #=> Friday, 14-Oct-2016 02:20:00 JST # ngx_http_geoip_module を使用している場合 Nginx.rputs v.geoip_country_name #=> Japan Nginx::Var クラスはこれら数多くの nginx 変数をどうやって取得しているのでしょうか。新たに変数が追加され
『みんなのGo言語 現場で使える実践テクニック』を著者のひとりである中島大一さんよりご恵贈に与りました。ありがとうございます。書評経験に乏しく、頂いてからずいぶん時間がかかってしまいましたが、読了の旨とその感想を書かせていただきたいと思います。 私は Go 言語にそこまで精通している者ではなく、A Tour of Go を一通り終えた後、Mackerel プラグイン開発でちまちまと書いている程度です。Mackerel プラグインは先人の書き方もあり、ひと通り文法を学んだ後なら見よう見まねでなんとかなりました。 しかし、それら見よう見まねのコードが Go らしく書けているのか、またパフォーマンスは十分なのか等、自分に足りていないものが徐々に気になってきていました。最近は C を書くことが増え、Go のソースコードを読む時間も減り、距離が出来つつあることも不安の種でした。 本書は、そんな私がも
少し前になるが、ngx_mruby v1.18.4 がリリースされた。このリリースには私が実装した mruby_ssl_handshake_handler ディレクティブが含まれている。 Implement mruby_ssl_handshake_handler() by hfm · Pull Request #205 · matsumoto-r/ngx_mruby mruby_init_worker(_code) や mruby_content_handler(_code) といった他のハンドラでは既にあるディレクティブだったが、mruby_ssl_handshake_handler はまだ無かった。業務で欲しくなったので、慣れないC言語と格闘しながら実装した。 mruby_ssl_handshake_handler ディレクティブの使い方 mruby_ssl_handshake_han
タイトルは『Kazuho@Cybozu Labs: Perl のテスト用に MySQL 環境を自動で構築するモジュール Test::mysqld を書いた』のオマージュです。 Test::mysqld は、テスト用に MySQL のデータディレクトリを一時ディレクトリに用意し、 mysqld サーバの立ち上げ・削除を自動実行してくれる大変便利なツールです。同じことを mruby で扱いたくなったので、見よう見まねで移植版を作ってみました。実装にあたっては miyucy/test-mysqld も大変参考になりました。 hfm/mruby-test-mysqld: Setting up a mysqld instance in tmpdir, and destroying it when a mruby program exits. TestMysqld.new をすると、DB を初期化し、
mruby-redis で Redis の HMGET と HMSET を使いたかったのでパッチを送った。 Implement Redis#HMGET and Redis#HMSET by hfm · Pull Request #58 · matsumoto-r/mruby-redis mruby も Hiredis もよくわからない状態からの出発だったので、小さいパッチの割に時間がかかってしまった。Hiredis は README.md に書かれている API の説明を読み、mruby はソースコードのコメントアウトに書かれた仕様を読み漁った。 内容の正しさは十分に保証出来ないが、調べたことを備忘録として書いておく。なお、mruby はバージョン 1.2.0 のコードを読んだ。 HMGET の実装 まず、HMGET のコードは以下の通りである。HMSET も似たような実装なので、そちらは
Puppet で、以下のような一連の処理を実行しようとしたところ、最後で Could not find group <group name> なエラーが出てしまい、上手くいかなかった。 libnss-stns1 インストール nsswitch.conf の group に stns 追加 あるディレクトリの group を、stns で管理されている group に chgrp する 3 の実行において、 2 の変更を無視している気がする。そう思って nsswitch.conf(5) を読んでみたところ、Notes にまさにこれ!な一節を発見した。 Within each process that uses nsswitch.conf, the entire file is read only once. If the file is later changed, the process
STNS は TOML フォーマットの設定ファイルを用いて Linux のユーザ管理を行うことができるシステムです。Linux の名前解決や公開鍵取得、sudo 認証が主な機能で、サーバへのログインやデプロイをシンプルに管理することができます。詳しくは「Linuxユーザーと公開鍵を統合管理するサーバ&クライアントを書いた[更新]」や「時代が求めたSTNSと僕」をご覧ください。 今回、stns をより簡単に触れる環境を提供するため、 stns の Docker image を Docker Hub に公開しました。 STNS/docker-STNS: Docker image for STNS. https://hub.docker.com/r/stns/stns Alpine Linux をベースイメージとしており、非常に小さいイメージサイズに保つことが出来ました。 core@core-0
ngx_mruby で大量ドメインの証明書を動的に処理する1には OpenSSL 1.0.2e 以上が必要となる2。しかし、CentOS, Ubuntu, Debian の中では Xenial しか OpenSSL 1.0.2 をサポートしていない3。それ以外の OS では、OpenSSLを自前ビルドするか静的リンクするのが良さそうだ。 最近、ngx_mruby の configure オプションに OpenSSL のソースを渡す機能が追加された45。そこで今回は、hsbt/ngx_mruby-package-builder をベースに、OpenSSL を静的リンクした ngx_mruby を rpmbuild する方法を調査した。その後、ビルドした ngx_mruby を使って動的証明書読み込みの簡単な動作検証を行った。 ビルド方法 まず、Dockerfile は以下のようになった。 F
昨年、勤務先の新卒研修で「キャリアキーノート」という取り組みを始めた。これは「先輩の個人史 (キャリア) を紐解いてもらう中で、その根底に一貫して流れる基本的な考え方 (キーノート) を学ぶ場」であり、先輩社員の自己紹介を兼ねた場として設計した。 このアイデアは、YAPC::Asia Tokyo のキーノート、なかでも @mizzy さんの「How Perl Changed My Life」や @typester さんの「エンジニアとして生きる」を原型とし、エドガー・H・シャイン著『キャリア・アンカー』の考えに目的を強化されたものである。 以前「ペパボ新卒エンジニア研修2015が始まっています」でも触れた内容だが、あれから1年が経ち、いろいろと分かってきたことがある。本記事では「キャリアキーノートとはなにか」を再考し、私の考えを今一度綴りたいと思う。 外と内から見るキャリア 「キャリア」と
年の瀬に1年をふりかえります。 ペパボ新卒エンジニア研修 今年のターニングポイントは、ペパボ新卒エンジニア研修でした。3月か4月ごろに担当を任されることになって、そこから猛勉強が始まりました。 研修の準備(設計)にあたり、学んだこと 研修を受けた身ではあるものの、研修の設計に関わるのは初めての経験でした。CTOやひろやんさんをはじめとした、研修関係者で認識を合わせることは非常に大切でした。研修にあたって、教育学や組織論、キャリアデザインに関する書籍を読みました。以下はその一部です。 これらの書籍は研修関係者で読みました。これらのような書籍を読んだ目的は、研修そのもののブレを無くすことです。いわゆるユビキタス言語といいますか、共通の語彙を関係者間で育み、円滑なコミュニケーションを取れるように勉強していきました。 「私」レベルの教育論を越えて そこで出会った中原淳先生の『企業内人材育成入門』に
新社会人として Web サービス業界に就職し日々どんな業務に取り組んでいるのか、どんな研修を受けたのか、またそれぞれの会社がどのような想いで研修や教育を行っているのか。以下に、弊社の内定者である@shimoju_くんが各社の話をまとめてくれました。 #師弟登壇2015 のメモ書き - Qiita また、各社の発表資料は以下の一覧よりどうぞ。 http://pepabo.connpass.com/event/22180/presentation/ 開催の経緯 遡ると、2012年に開催された『オブラブ 収穫祭 〜若手エンジニア、実りの秋〜』が一番最初のイベントでした。その翌年に、弊社の柴田さんが『師弟登壇・新米サムライの集い 2013』という名前で開催しました: 「師弟登壇・新米サムライの集い 2013」を開いてきた - HsbtDiary(2013-10-12) 開催趣旨はイベントページに掲
「GitHub の hfm というアカウントが使われていないように見えるから、私に譲ってほしい。Twitter や Instagram のアカウント名と一致させたい」という旨を Contact GitHub から要求したところ、あっさり譲ってもらえた。言ってみるもんである。 リクエストして半日と経たないうちに、hfm が登録抹消されたようだ。GitHub から「hfm は確かに inactive のようだったからリリースしたよ。どうぞお早めに」と(日本時間の午前5時に)メールが届いた。 github.com/hfm が 404 Not Found になったのを確認し、Account settings からサクッと切り替えた。 Twitter や Instagram は hfm だが、GitHub は tacahilo だった。揃えたかったのだが、既に埋まっていた。そして takahiro
2015年6月から始まったペパボ新卒エンジニア研修のうち、「基礎研修」が完結しました。 基礎研修は「Web開発」「Webオペレーション」「モバイルアプリ」の3つのテーマから成る技術研修です。 ペパボ新卒エンジニア研修2015が始まっています ペパボ新卒エンジニア研修2015・Webオペレーション研修が始まっています ペパボ新卒エンジニア研修2015・モバイルアプリ研修が始まっています 基礎研修の後には、新卒エンジニアと新卒デザイナが、1週間でWebサービスを協働開発する「お産ウィーク」が行われました。 そして10月からは年末にかけては、6つのサービスを1週間ごとにぐるぐる廻る「サイクルOJT」が始まっています。 モバイルアプリ研修の歩み この研修では、6人いる新卒エンジニアから3人1組のチームを作り、2段階に分けて課題を用意しました: 1st stage: Rails をバックエンドとした
今年もYAPC::Asia Tokyo 2015に参加してきました (3年目、個人スポンサとして2年目)。 ブログを書くまでがYAPCということで、印象的だったトークの感想などを書き残します。 記録として残そうとすると、ですます調で書きにくいなと感じたため、固い感じになってます。 間違いがあったらツッコミお願いします。 (個人的なメモにもなっているので、カッコ書きが多く、読みにくいかもしれない) 前夜祭 前夜祭では次の発表を見た: 言語開発の現場 技術ブログを書くことについて語るときに僕の語ること 言語開発の現場 Ruby メンテナであり、弊社チーフエンジニアでもある柴田さんの発表。 Ruby という言語がどのように開発されているかという、ソフトウェア開発にまつわる話だった。 意思決定や実装、リリースに至る一連のサイクルについて、見えにくい部分がどうなっているのか知ることが出来た。 かつて
いま、ペパボでは新卒エンジニア研修2015を実施しています。 期間は6月から年末までの約7ヶ月間で、前半4ヶ月を「基礎研修」、後半3ヶ月を「サイクルOJT」と称しています。 6/8〜7/3は、Rails Tutorial を教材としたWeb開発研修が行われました。 7/6〜8/7は、OpenStack1 上で Rails を動かすための、インフラの設計・構築・運用を軸としたWebオペレーション研修が行われました。 ペパボ新卒エンジニア研修2015が始まっています ペパボ新卒エンジニア研修2015・Webオペレーション研修が始まっています そして昨日8/17から、基礎研修の第三幕『モバイルアプリ研修』が始まりました。 そこで今回は、Webオペレーション研修の完遂に至るまでの話と、モバイルアプリ研修の話をしようと思います。 Webオペレーション研修の歩み どんなゴールだったか Webオペレーシ
Webオペレーション研修イントロダクション さて、7/6 からは新たにWebオペレーション研修が始まりました。 初日はイントロダクションとして、Webオペレーション研修やゴールや進め方についてお話させていただきました。 新卒の@orzupが研修のログを残してくれていますので、当人たちがどのように取り組んでいるのかを知るには以下をご覧ください。 WebオペレーションのVagrant編 ログ · Issue #29 · orzup/rails-tutorial Webオペレーション研修のゴール 「アプリが『動く』インフラを、ステップ・バイ・ステップで成長させる」ことをゴールとして、5つのステップを設けました。 Vagrant編・Nyah編(後述)、合わせて5つのステップ 各ステップの課題は以下のとおりです。 Vagrant編 Web開発研修で作成した Rails アプリを、Vagrant で動
先週6/8から、ついにペパボ新卒エンジニア研修1がスタートしました。 今年の新卒入社は10名で、そのうち6名がエンジニアです。 4月〜5月はGMOインターネットグループ研修、ペパボ東京プレ研修、ペパボ福岡支社研修などを全員で受け、6月からエンジニア・デザイナは職種別研修に入っていきます。 そして今年のエンジニア研修 (以下、研修) は、私が研修担当のメインとして、@hibomaさんと共に活動しています。 さて、研修から1週間、その間の出来事やみんなの様子を紹介していきたいと思います。 この1週間の出来事 箇条書きにすると、主に以下の6つの出来事がありました。 THE TAO OF PEPABO ENGINEER - ペパボ新卒エンジニア研修オリエンテーション Web開発研修イントロダクション 見積り計画ワークショップ 読書会 Web開発研修 キャリア・キーノート ここから、それぞれの出来事
5月頭くらいに申し込んでいた、IPSJの学会員入会申請が 2015/05/28 に承認された。 研究会には『インターネットと運用技術』 (IOT, Internet and Operation Technology)に入会した。 大学院を修了してから、学会の類から完全に離れてしまい、こういう領域にはお金を払ってでも触れておきたいなあと思ってた。 そこに、@matsumotoryさんがペパボへ入社され、「IPSJの学会になろうかな、でもお金かかるしな…」みたいな踏ん切りのつかなかった私をひと押ししてもらった。 ひとまずは、電子図書館が色々面白いので、気になった論文を適当に漁っていこうと思う。 情報学広場:情報処理学会電子図書館 正会員サービス一覧表-情報処理学会 ちなみに、今回の入会費用は1.5万くらいだった (IPSJとIOT) のだけれど、収入も学生の頃とは違うのでそこまで痛くは無いな、
Fedora 22より、デフォルトのパッケージマネージャが変更されるらしい。 RedHat系のパッケージマネージャといえばYumだったが、これからは DNF (Dandified yum) という次世代パッケージマネージャに替わる。 Fedoraを使ったことが無かったので全く知らなかったのだが、以下の象徴的なタイトルのブログを契機に知ることが出来た。 Yum is dead, long live DNF | DNF この記事が出た理由は、ブログ投稿と同日の2015/05/11に、DNF 1.0がリリースされたことだろう。 既存の要件を満たし、いよいよ乗り換え準備が出来たというメッセージだ。 DNF 1.0 and DNF-PLUGINS-CORE 0.1.7 Released | DNF 何故、YumでなくDNFなのか DNFは2012年にYumのフォークプロジェクトとして開始した 1。
riywo/anyenvを導入した直後から、Vimの起動が急激に重くなって困っていた。 関連性が全く分からず、なんだこれ…と思って調べたところ、以下のような記事を見つけた。 Vim を高速にしたたったひとつの作業 - pekeblog! なんじゃこれ・・・?とおもいつつも、デバッグコードをいれたところ、zshenv が異様に遅いことが判明。 遅いのは rbenv 関連というのは明らかだったので、とりあえずそこら辺をコメント化。 anyenvの設定を~/.zshenvにだけ書いていたのがダメだったようだ。 zshenvが思った以上にVimの中で呼ばれまくるらしく、eval "$(anyenv init - zsh)"が遅延の根本原因だった。 というわけで、evalしてるコードはzshrcに分けて書くようにしたところ、今までが信じられないくらいVimが高速化した。 vim --startupt
ペパボで何人かハマってしまった人がいたので記事にしておく。 PuppetLabsのチケットにも登録されているが、Puppet 3.7.x (x >= 3) はRuby 2.2だとエラーになってしまう。 [PUP-3796] Puppet 3.7.3 is not supported on Ruby 2.2 - Puppet Labs Tickets $ puppet --version /Users/hfm/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/puppet-3.7.5/lib/puppet/defaults.rb:488: warning: duplicated key at line 489 ignored: :queue_type /Users/hfm/.rbenv/versions/2.2.1/lib/ruby/gems/2.
最近レビューする回数が多く、それから派生したまとまりの無いツイートが散見してたのでポエムでつないでみる。 レビューと健康 レビューする側とされる側、コミュニケーション次第では段々剣呑な雰囲気を帯びてくる場合がある。 この雰囲気ってやつは、個々人のパーソナリティよりも、体調面の変動をキッカケに危うくなるイメージがある。 体調悪い時はあんまレビューしない方がいい。 っていうか休んだほうがいい。 Reviewer V.S. Reviewee ? 衝突を避けられない時があると分かっていても、なるべく避けようと努力してみる。 レビューするときは「Reviewer V.S. Reviewee」の構図を作らないように、常に自分に言い聞かせてる。 — okumura takahiro (@hfm) 2015, 4月 3 相手にメンチ切らなくていいので目的を見たほうが良い レビューの場では、2人が向き合うの
NeoBundleがTOML1 parserを導入して、TOMLファイルにプラグイン管理を任せられるようになった。 Add TOML parser · Shougo/neobundle.vim@75e836f 設定ファイルのサンプル vimrcの設定は、ドキュメントとShougo氏のvimrc2を参考にすると、neobundle#begin〜neobundle#endの間を以下のように書けば良さそうだ。 call neobundle#begin(expand('~/.vim/bundle/')) if neobundle#has_cache() " キャッシュから高速に起動 NeoBundleLoadCache else NeoBundleFetch 'Shougo/neobundle.vim' " TOMLファイルを指定 call neobundle#load_toml('~/.vim/
pt-online-schema-changeというPercona Toolkit同梱ツールを使えば、対象をロックせずにスキーマの変更が出来る。 Perl製のツールで、DBIとDBD::mysqlが必須となる他、DESCRIPTION1にある通り “this tool only works with MySQL 5.0.2 and newer.” である。 さて、MySQL 5.0.2以上なら動作するとあるが、実はMySQLのバージョンが古いと上手く動かないケースがある。 Unknown system variable ‘innodb_lock_wait_timeout’ MySQL 5.5未満でpt-online-schema-changeによるALTERを実行しようとすると、次のようなエラーが出てしまうことがある。 $ /usr/bin/pt-online-schema-change
若手インフラエンジニア現状確認会というイベントを開催しました。 全員発表型で、私(@hfm), @catatsuy, @deeeet, @rrreeeyyy, @ryot_a_rai, @y_uuk1の6名(敬称略)が参加者です。 会場をご提供いただいた@catatsuy君とpixivの皆様方に感謝。 発表資料 「今までやってきたこと」「何故今の環境を選択したか」「選択の結果、何を得たか」「そして今、何をやりたいのか」という4つをテーマに発表しました。 ここから、資料補完や当日のやりとり、そもそもの開催の経緯等を補足したいと思います。 開催のキッカケ 開催といっても、Doorkeeperやconnpassで募集をかけたりせず、Twitterのリプライのみで実現した集まりです。 (ぼんやりとした企画をしたぐらいで、開催と呼べるほどなにかをやったわけではない) Mackerel Meetup
次のページ
このページを最初にブックマークしてみませんか?
『blog: takahiro okumura』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く