サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
Pixel 9
blog.monochromegane.com
10/21に開催された「minne技術戦略カンファレンス」で「15万人の作家を支えるサービス開発の裏側」を発表してきました。 今回は、所属するminneプラットフォームチームの紹介としてチーム、基盤、そして開発の観点から アタリマエをアタリマエに するため、工夫している点について話しています。 「minne」技術戦略カンファレンス 発表の資料と動画はこちら ※ 52分あたりから話してます カンファレンス全体で、UI/UXからアプリ、Web開発、基盤、そしてそれぞれのチームづくりまで含めてminneの裏側を見れることができたんじゃないかなあと思います。 今回、プラットフォームチームでは全体を通した工夫の紹介ができたので、今後は開発部分に特化した話など詳しく話していけたらうれしいですね。 minneに興味ある方、ペパランチョンでお話しましょう。福岡でももちろんやってます。 ペパランチョン 所感
福岡スレンダーズというチームでISUCONに初参加、そして予選落ちしてきました。 来年に向けての糧となるよう、良かった点、悪かった点をまとめておきます。 この通りにやると紙一重の差で予選落ちすることができます。 福岡スレンダーズ @mizoR @tkengo @monochromegane Web/モバイルのアプリケーションエンジニア(インフラ専任なし) 使用言語は全員が共通して触れるRubyを選択 ベストスコアは約14,000。このスコアで終われていれば予選通過していたかも… 振り返り 良かった点 事前準備 環境構築は30分 チューニングに専念するため、資産をGitHubプライベートリポジトリで管理する、各自の開発環境(エディタ等のdotfiles)を整えるといった環境構築はほぼノンストップでできるように手順化、スクリプト化しておいた。 事前に集まって当日の進め方を確認 過去問を解きなが
サーバーにあるGoのバイナリのバージョン管理は気を使います。どのバージョンで動いているのかわからなくならないよう、バージョンやリビジョンを埋め込む方法がありますが、そもそもリポジトリもわからないバイナリがあったら…そんなときに備えて、ソースコード自体をバイナリに埋め込んでおくというツールをつくってみました。 go-bincodeは内部でgo-bindataを使い、goのソースコードをバイナリに埋め込みます。また、埋め込んだソースコードを参照/リストアするための各種オプションを提供します。 利用方法 以下、様子です。 使い方は、ソースコードを埋め込みたい対象のリポジトリで go-bincode コマンドを叩くだけです。必要に応じてpkgオプションでパッケージ名を指定してください。 go-bincode.goとgo-bincoder.goが生成され、ソースコードの参照/リストアを行うためのオプ
Goアプリのデプロイはバイナリをひとつ配布して完了なのでとても楽なのですが、バイナリ自体をどこで管理するかについては意外と頭を悩ませることになります。 Goを使うにあたって、コードさえあればあとはバイナリも簡単に配布できる状態というのが望ましいと思い、仕組みを作ってみました。 2015/08/16追記: CargoはRustのパッケージマネージャーと名前がかぶってたのでTorokko(トロッコ)に改名しました! TorokkoはGoアプリのビルドと成果物ダウンロード用のAPIを提供するビルドプロキシです。 リクエストのURLで対象リポジトリ、GOOS、GOARCH、バージョンを指定します。 ビルドはDockerコンテナを用いて行い、バックエンドストレージに成果物が保存され、ビルドリクエストと同じURLでダウンロードを行うことができます。 Docker Hub の Automated Bui
前々からOctopressのpreview反映の遅さに厳しさを感じていたのでHugoに移行しました。手順などを簡単にまとめておきます。 Hugo Go製の静的サイトジェネレーターです。Octopressに比べて機能やテンプレートは少ないですが、起動やpreviewの反映の速さがそれを補って余りある感じです。 以下、移行の手順です。 インストール # Hugoをインストール $ go get github.com/spf13/hugo # テーマを全てダウンロード $ git clone --recursive https://github.com/spf13/hugoThemes themes
MySQLにはログファイルに出力したスロークエリをサマライズするmysqldumpslowコマンドがあって重宝していたのですが、出力先をテーブルに変更すると使えなくなってしまったので、同じことができるmysql_dump_slowというGemをつくりました。 使い方 ActiveRecordで取得したスローログを渡して使います。 # ActiveRecordでmysql.slow_logテーブルのレコードを取得します logs = SlowLog.all # スローログをサマライズします summary = MysqlDumpSlow.summarize(logs) summary.each do |counter| # mysqldumpslowコマンド形式で出力することができます counter.to_mysqldumpslow # => Count: 2 Time=100s (200
先日、Hugoに移行した際、ブログ本体のリポジトリとテーマのリポジトリを分けるようにしました。ブログ本体のほうはweckerと連携しておりpushすることでGitHubPagesに公開されるようにしましたが、テーマ側を更新したときも同様のことができるようにAPIを使ってビルドパイプラインっぽいのをつくってみました。 triggerBuild API werckerが提供するビルドをキックするためのAPIです。 Triggering builds with the wercker API API Doc ここの手順に従い、トークンを取得して利用します。 curl -H 'Content-Type: application/json' \ -H "Authorization: Bearer <token>" \ -X POST -d '{"applicationId": "<applicati
7/4(土)に福岡でペパボが開催したテックカンファレンスで発表してきました。 第2回ペパボテックカンファレンス【福岡】 今回はGoの布教活動と称し、15分のライブコーディングでWebSocketのチャットサーバーをつくりました。 無事、時間内に作れて一安心。懇親会でもGoに興味持ってもらえたようでよかったです。 全体の発表内容は @kimromi さんのブログがよくまとまっているのでご覧ください。 第2回ペパボテックカンファレンスin福岡にいってきました Youtubeでも公開しております。 第2回ペパボテックカンファレンス #pbtech - YouTube 個人的な感想としては に尽きます。 インフラ層からアプリケーション層まで様々なアプローチで改善が続けられ、最新の事例として、そして更に次世代のビジョンを語ることができる状態というのはエンジニアとしてとてもエキサイティングな環境じゃな
6/21にGoConference 2015 summerというイベントで Generative Programming in Go というタイトルの発表をしてきました。 内容的には、今年に入ってつくった argenの紹介を通して生成的なプログラミングの使いドコロやTipsなどを紹介するものでした。 コード生成、ニッチな分野だからニーズあるかなと心配でしたが、意外にもこの分野での発表/プロダクトの報告が多かったです。 コード生成という解決策は、便利な反面、使いドコロ誤るとみんなツライ思いをすることになるので、なんでもGenerateはダメを含めて、自分なりに得た知見を共有できたのはよかったかなと思っています。 GoConの発表は一年前にpt & Goroutineを発表して以来、2回目です。 200名ぐらいの参加者がいて、海外からのスピーカー来ているという今回のカンファレンスは、福岡から参
Goでコマンドラインオプションのあるツールを提供していると設定ファイルに定義できるようにしてほしいという要望が来ますが、意外とオプションと設定ファイルで定義が冗長になったりして煩わしいのでライブラリにしてみました。 conf+flagでconflagです。 いつものコードに 3行 追加するだけでコマンドラインオプションを設定ファイルに書いておけるようになります。 使い方 以下のような感じで、flag.Parse()を実行する前に、設定ファイルからflagに設定する値を呼び出すコードを追加します。 // フラグを定義します var procs int flag.IntVar(&procs, "procs", runtime.NumCPU(), "GOMAXPROCS") // コマンドラインオプションを解析する前に設定ファイルからフラグに値を設定します if args, err := con
Markdown形式のテーブル記法をいつまでたってもうろ覚えで、毎回検索したり、変換サイトにアクセスするのが面倒だったのでツールをつくりました。嘘です。Go書きたかっただけです。 使い方 CSVテキストを標準入力から受け取って整形済みのMarkdown形式テーブルを出力します。 $ mdt < hoge.csv | headerA | headerB | | ------- | ---------------------- | | short | very very long content | 連携 コマンドラインツールなので、pbpasteやAutomatorと組み合わせて好きなように使えます。 以下は、Automatorのサービスとして登録したmdtをGitHubのIssue作成時に呼び出している様子です。 便利っぽい。 機能 CSV/TSVに対応 タブ区切りにも対応しているのでエク
今年入ってちょっと休憩していたFukuoka.goなんですが、@nobkzさんがソースコードリーディングやろうという企画を持ちかけてくれたので久々に開催しました。 Fukuoka.go#7 ソースコードリーディングの会vol.1 今回は発表はしましたが、会場準備などの裏方だったので参加者としても勉強会を楽しむことができたのが個人的にはうれしかったです。 発表 ダウンタイム・ゼロを支える技術 in Go Goでアプリをダウンタイムなしで運用するための方法あれこれを発表しました。 アプリでがんばるところとインフラでがんばるところのバランスは難しいですね。 ベストなやり方を取れるように検討することは大事だと思います。 並列とGo @nobkzさんの発表です。 Go初学者向けにコードリーティングやりやすくなるようにgoroutineまわりなどを解説してくれました。 lexer実装について (@ke
Goで DataMapperじゃなく、ActiveRecordライクにDB操作したいと思ってつくってみました。 go/parserとgo/astでソースを解析、個々の構造体ごとにARなコードを生成します。 argen ActiveRecord** Gen**eratorでargenです。 クイックスタート テーブルを表す構造体に+ARアノテーションをマークします。
社内のチャットツールをSlackに移行中です。Slack使いやすくて満足度高いのですが、クラウドサービスゆえにこれまで社内IRCサーバ上でやりとりしていた情報の一部を載せてはいけなくなりました。 以前つくった「ほい、これ」ってファイルを渡せる Hoi というツールを使うことで外部から参照できないページのURLをやりとりに使えるのですが、やりとり用にファイルが必要だったり、URLを別途通知するという手番が面倒になってきました。(GH:EのGistでも同様ですね) monochromegane/hoi 面倒は解決しましょう。以下、Hoiのソリューションです。 メッセージをやりとりする 今までのファイルやりとりに加え、メッセージにもURLを付与できるようになりました。 使い方は今までと同じで、引数が存在しないファイルの場合にメッセージと見なします。 以下のようなURLが出力されます。 http:
Jenkinsのジョブ定義にGitHubのAccessTokenを直接書きたくないときに使えるプラグインがあったのでメモしておきます。 Mask Passwords Plugin 使い方 プラグインをインストールすると、各ジョブ設定のビルド環境にMask passwords (and enable global passwords)という項目が追加されます。 NameとPasswordの組み合わせを追加すると、ビルドスクリプトのなかで${Name}として利用することができます。 AccessTokenを使う 前回のエントリの例だと access_tokenという名前でトークンを保存して、シェル内で以下のように使えます。 curl -X POST -H "Authorization: token ${access_token}" \ https://api.github.com/repos/
Jenkinsのジョブ結果をプルリクエストに表示するときはGitHub pull request builder pluginを使ってますが、単体のジョブでしか利用できなかったので、複数ジョブ(ビルドパイプライン構成)のときに結果を表示する方法をまとめておきます。 ビルドパイプラインの構成 今回のビルドパイプラインはこんな感じを想定しています。 プルリクエストへの更新やコメントをトリガーにジョブが起動し、単体テスト、回帰テストを実行します。 あわせて、実行中、失敗、成功の状態がプルリクエストに表示されます。 成功したらプルリクエストに ╭( ・ㅂ・)و ̑̑ グッ ! って出ます。グッ ! って。 これを満たす以下のジョブをつくっていきます。 ジョブの結果をプルリクエストに表示する 複数のジョブをビルドパイプラインとして実行する GitHub pull request builder
開発環境で利用するVagrantのVMの数が増えてきたのでpecoでVM選んで起動や停止をできるようにしてみました。 vagrant-peco こんな感じで利用します。 うれしさ pecoでVMを選択できる。Vagrantfileのあるディレクトリに移動しなくてよい VMを複数選択して一括で起動・停止できる 通常のvagrant global-statusよりも高速に表示 direnvとの連携 インストール Vagrant1.6以降でつくったVMとvagrant-peco、vagrant-global-statusが必要です。 # vagrant-global-statusをインストール $ go get github.com/monochromegane/vagrant-global-status/... # vagrant-pecoをインストール $ cd [PATH] # PATHの
8月21日に Fukuoka.go#2+Fukuoka.rb を開催しました。 Fukuoka.goは福岡でGo言語に興味のあるひとが集まる場所を目指して開催する会です。 Fukuoka.go#2+Fukuoka.rb 今回はFukuoka.rbと合同開催になったこともあり、参加者26名(キャンセル含めると申込自体は35名)と前回より多くの方に来ていただきました。福岡のGo熱は衰えず!です! 今回の内容をまとめておきます。 タイムテーブル 19:30 - 21:30 LT大会 当初もくもく会も予定していましたが、LT希望者が多く、最終的にはオールLTのLT大会になってしまいました。 LT ルビーストのためのGo (@linyows) @linyowsさんによるLT。 RubyとGoを比較しながらGoを学ぶ。 自分の知っている言語(知識)と比較していくと知識がメタ化、抽象化されて応用力がつい
PC間でのファイル受け渡しのときにファイルサーバを使うことがたまにありますが、OSによってファイルパスやその書式が違ったり、受け渡し用のディレクトリをつくるとか、ファイル渡したいだけなのに、なんだか小さなひっかかりがあってスマートじゃないなあといつも感じてました。 なので、もっと直感的に「ほい、これ」って渡せるツールをつくってみました。 Hoi Hoiはファイルの受け渡しを簡単に行うためのコマンドラインツールです。Go言語で書かれており、HTTPファイルサーバを利用して機能を提供します。 monochromegane/hoi (An easy file transfer tool using http file server.) ファイルを渡す 使い方は簡単でローカルのファイルパスをhoiコマンドの引数に渡すだけです。 そうすると以下のような、ダウンロード用のURLが出力されます。 htt
5月31日にGoConference 2014 springというイベントで pt & Goroutine というタイトルの発表をさせてもらいました。 今年に入ってから Go言語をさわるようになって、pt(The Platinum Seacher)というGoでつくったagライクな高速検索ツールを公開しており、そこからのつながりで今回の発表となりました。 内容的には、以下のスライドのとおり、同ツールの高速化の経緯をたどりながらGo言語の並行処理を実現する機構であるGoroutineの使い方を知ってもらうという構成でした。 TLの反応などを見ると、需要はあり一定の満足はもらえたんじゃないかなとほっとしています。 200名ぐらいの参加者がいて、海外からのスピーカー来ているという今回のカンファレンスは、福岡から参加した自分にとってはなかなか本格的なもので、たくさん刺激を受けたし、こういうところで話
先日、Go言語でつくった高速検索ツール(the_platinum_searcher)をHomebrewで配布できるようにしました。 意外とGo言語製ツールをHomebrew対応させる情報がなかったので、配布までの手順をまとめておきます。 Homebrewに対応させる HomebrewはMacで利用できるパッケージマネージャーです。 Homebrewでツールやパッケージを配布するにはそれらに関する情報やインストール方法を定義したFormula(製法)ファイルが必要です。 また、Formulaを登録するリポジトリも必要です。Homebrewには公式リポジトリがありますが、tapコマンドを使うことで独自リポジトリをFormula取得先として追加することができます。 今回は、独自リポジトリでFormulaを公開します。 Formulaファイルの作成 Formulaファイルを格納するディレクトリは独
2023年10月に初めてのアカデミックな国際会議での発表を終えました。 社会人博士課程に進学後、2021年5月の初投稿から丸2年、7回目の挑戦にしてようやくの採択ということで、自慢できるものではないのですが、同様に博士課程において日々挑戦している方々に何かの参考になればと思い、まとめておきます。 略歴と背景 2017年からペパボ研究所で研究開発職に従事しています。 情報システムの自律適応等の研究に取り組み、2020年10月に社会人博士課程に進学しました。 博士課程では、多様かつ継続的に変化する環境に適応する実用的な情報システムの実現に向けて、多腕バンディット方策を用いる機構の研究を進めています。 修士を飛ばした進学であったこともあり、進学時の実績としては国内ジャーナル論文1本のみでしたので、博士号取得に向けてはジャーナル論文をもう1本と、水準を満たす国際会議での採択1本を目指しての挑戦とな
Go言語での構造体実装は、埋込や独自コンセプトのインターフェースといったGo言語独自の機能を理解して行う必要があります。 今年からGo言語を始めましたが理解が曖昧なままだと実装に迷うことが何度かありました。今回よい機会なので、Go言語での構造体実装パターンとしてまとめてみることにしました。 構造体実装パターン 実装パターンの洗い出しとして、GoFデザインパターンをGo言語で実装する手法をとりました。 その中で繰り返し現れる実装をGo言語での構造体実装パターンとしてまとめてみました。 コンストラクタ関数 エクスポートによるアクセス許可 インターフェースによるポリモフィズム 構造体によるポリモフィズム 構造体によるサブクラス・レスポンシビリティ 構造体による移譲 関数による移譲 以下、それぞれのパターンを解説していきます。 コンストラクタ関数 Go言語には構造体のコンストラクタがないため、構造
Go言語でコマンドラインオプションを使うときは標準のflagsパッケージを使うことが多いと思いますが、go-flagsを使うとオプションの仕様を定義するだけでうまいことやってくれるので便利です。 go-flags go-flagsはコマンドラインオプションのパーサーです。オプションの仕様を定義した構造体に、コマンドライン引数をバインドしたり、定義した仕様からヘルプを整形・表示してくれます。 標準のflagsパッケージに比べて、オプション指定方法が柔軟であること、指定されたオプションを構造体としてプログラム内で利用できること、値のバインドやヘルプの生成などの定型的な実装を行わないでよくなること、といいコトずくめなので使わない理由はないでしょう。 インストール
いまや高速パターン検索といえばag(The Silver Searcher)ですが、検索対象がUTF-8のテキストを前提としているため、EUC-JPやShift-JISといったファイルを検索するのに課題があります。 これまで、それらの日本語文字セットを検索できるようにするため、色々とagの改造、公開を行っていました。 ag(The Silver Searcher)でEUC-JP/Shift-JISのファイルも検索できるようにしてみた 日本語圏特化型ag -白金- の配備が完了しました しかし、特定の国の文字コードだけに特化した修正というのをmasterに取り込んでもらうわけにもいかず、派生ブランチとして追随するのも、やはり面倒… そこで年始にGo言語を触ったのをきっかけに、Go言語でパターン検索ツールをつくってみました。 せっかくなのでポストagを目指して、プラチナサーチャー(The Pl
先日、高速にドッグフードを食べる方法を見て、LGTMとLGTM.inというサービスを知りました。 LGTMは、“looks good to me."の略で、GitHubのプルリクに対するOKコメント、LGTM.inは、そのコメントにノリのいい画像を添えてspice upしようというサービスです。コードレビューの終わりにめでたさを伝えてもらえれば、字面だけのLGTMよりもうれしいし、そういう小さな承認はお互いに大事。 ということで、LGTMでめでたさを伝えるChrome拡張をつくりました。 LGTM Chrome拡張 インストールはこちらから。 Chrome ウェブストア/LGTM 拡張を起動するとLGTM.inから取得したランダム画像を3件表示します。 画像が気に入らないときはMore LGTMボタンをクリックして画像を再取得できます。 使い方 使用したいLGTMの画像をクリックするとUR
ターミナルマルチプレクサtmuxはとても便利ですが、操作の際にプレフィックスが必要で、ペインの切り替えなど頻繁に行うのはちょっと面倒です。 実はtmuxには、プレフィックスなしで操作できるステキすぎるオプションがあるので紹介しておきます。 プレフィックス不要ってすばらしい bind-key の -n オプション bind-keyには-nオプションがあり、これをつけることでプレフィックスを使わなくてもよくなります。 これで単独のキーにコマンドを割り当てることができます。 設定 通常のキーバインド設定に-nをつけるだけです。 tmux.conf bind -n キー コマンド プレフィックス不要なペイン移動 自分はペインの移動を最もよく使うので以下のような設定をしています # Shift + 上下左右でペインを移動できるようにする。 bind -n S-left select-pane -L
今まで英語の辞書にWeblioを使ってコーディングや、PullRequestのときの参考にしていたのですが、ネットワーク越しということもあり、遅く感じることがあったので、AlfredとMac標準の辞書.appを組み合わせて快適高速な英語環境をつくりました。 Alfredと辞書.app Alfredは有名なランチャーアプリ。Hotkeyで起動して検索やアプリの起動をすばやく行うことができます。 辞書.appはMac標準の辞書アプリです。(自分の中では)全然目立たない存在だったけど、使ってみると実はかなり便利。 ローカルアプリケーションなので起動、検索が高速、さらにインクリメンタルサーチにも対応しています。 特にコーディングのときは、webの検索をじっと待つ時間はリズムが崩れるのでローカルアプリケーションの反応のよさは心地よいです。 設定 Alfredから辞書.appを呼び出す Alfredは
事前準備 ふりかえりのテーマ 前回のKPT結果 会議室の予約 ホワイトボード 付箋紙 フェルトペン 時計 カレンダー 「問題 対 私たち」となるように席を配置する 開始 開始(5分) よろしくお願いしますの挨拶をみんなですること タイムテーブルを伝えること(Tryに時間をかけることが伝わるとよい) 以下合計120分(初回100分) 開始(5分) 前回からの活動を確認する(20分/初回不要) Keep(15分) Problem(20分) Try(55分) 終了(5分) 前回からの活動の確認 ( 初回不要 ) 前回から今回までの活動の確認(5分) カレンダーやIssue、チケットなどを見ながらあった出来事を自由に言ってもらう。 アイスブレイクの意味合いも兼ねているのでプライベートな出来事も含め、どんどん出してもらう。話してない人にも振ること。 時間超過に注意。 前回のTryの確認(5分) 前回
次のページ
このページを最初にブックマークしてみませんか?
『THINKING MEGANE』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く