サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
今年の「#文学」
mallowlabs.hatenablog.com
この記事は Misoca+弥生 Advent Calendar 2019 の7日目の記事です。 はじめに Misoca に入社して1年とちょっとが経ちました。 Misoca は Ruby がメインの会社です。 私のキャリアはずっと Java だったので、特に RSpec の知識が貧弱で、RSpec は「expect って書くのは知ってる…」ぐらいの知識でした。 RSpec のマッチャは数も多く、いったいどこから勉強したらよいのか…というままテストコードを書いたため、コードレビューでよりよい書き方を教えてもらいつつやってきました。 そこで、同じ指摘をもらわないように自分用にまとめつつ、同じような境遇の人に少しでも役に立つように、Misoca のコードレビューで教えてもらった RSpec の書き方を紹介します。 注意事項として、以下で書き換え前と後のコードが出てきますが、どちらが良い悪いという
環境 Jenkins 2.8 Jenkins Warnings Plug-in 4.56 Redpen 1.5.5 モチベーション 最近、技術ドキュメントを GitBook を使って Markdown で書いている。 GitBook は当然 Git リポジトリが使えて、WebHook まで使える。 こうなってくると Jenkins で CI をして、校正結果をグラフにしたくなってくるので、 Jenkins と同じ Java で書かれた Redpen を使ってみている。 Jenkins Warnings Plugin の設定 まずは Jenkins Warnings Plugin にパーサーを追加する。 設定は以下のようにする。 名前 … Redpen リンク名 … Redpen 警告 推移レポート名 … Redpen 警告 正規表現 (.+):(\d+?): ValidationError
Elasticsearch をそのまま使うと string フィールドがトークナイズされてしまうので、ユーザーエージェント等スペースを含むフィールドのグラフが意図通り出ない問題に対処した。 真面目にやるなら elasticsearchでダウンタイムなしでインデックスのマッピングを切り替える の方法がいいんだけど、Ruby が必要だったり、エイリアスを作ったりしなければならないので、もっと不真面目にやった時の記録。 環境 Kibana 4.1.0 Elasticsearch 1.6.0 Elasticsearch Reindexing 1.4.2 やったこと まずは、今後作成される全ての string のフィールドを not_analyzed にする。 curl -XPOST localhost:9200/_template/strig_not_analyzed_template -d '{
環境 Jenkins 1.532.3 Multi-Branch Project Plugin 0.2.2 Multi-Branch Project Plugin GitHub を使っていないプロジェクトで、ブランチが増えたり減ったりする場合に、 そのブランチを自動で Jenkins のビルドジョブにしたい。 そのような場合に Multi-Branch Project Plugin が便利だったので紹介。 Multi-Branch Project Plugin をインストールすると新規ジョブの画面に「Freestyle multi-branch project」というジョブタイプが追加される。 このジョブタイプを選択すると、それぞれのブランチがサブジョブとして追加される。 メインのジョブは /job/my-project/ という URL になり、ブランチのジョブは /job/my-proj
IRKitly を作った時の知見です。 Heroku の無料プランで cron 処理をするには Heroku Scheduler を使うのが一般的です。 しかし、Heroku Scheduler では分単位で指定することはできません。 ChronoCross この問題を解決するために Chrono という gem をラップした ChronoCross という gem を作りました。 スレッドを立てて、指定した時間まで sleep することで cron 処理を実現しています。 ChronoCross の gem の中で、Chrono::Trigger を参照しているのが最大の見所です。 問題点 この gem は一見するとうまく動くように見えますが、以下の2つの問題があることがわかりました。 Heroku の Web プロセスは一定時間アクセスが無いと、プロセスごと落とされてスレッドが止まる
以前の記事で IRKit と Heroku Scheduler でフロアライトを光目覚ましにしてみた - mallowlabsの備忘録 というのを作りました。 この方法だと Heroku Scheduler を使って IRKit の API を叩いているので、平日と休日で動作を変えるといった、細かな制御ができないのが難点でした。 そこで Heroku から Irkit をスケジュールで操作できる IRKitly を作りました。 https://irkitly.herokuapp.com/ 機能紹介 スクリーンショットで説明しつつ、機能の紹介をします。 ログインは GitHub アカウントで行います。 IRKit の情報の登録は 橋本商会 » 赤外線学習リモコンIRKitのrubygemを作った を使います。 IRKit Internet HTTP API を有効にしている必要があります。
PostgreSQL 9.1 から 9.2 にバージョンアップすると postgresql.conf に timezone の設定を書かなかった場合のデフォルトが「ローカルタイムゾーン」から「GMT」に変わってて命を落とした… 2014-03-31 18:36:12 via web PostgreSQL のタイムゾーンをローカル時間に合わせるために、postgresql.conf の timezone の設定を 設定しない(デフォルト)運用にしていた。 今回、PostgreSQL 9.0 → 9.3 にバージョンアップをする際に、タイムゾーンの設定のデフォルト値が変更されていて、大変な目にあったのでメモしておく。 PostgreSQL 9.1 以前 postgresql.conf を以下のように設定すると、PostgreSQL のタイムゾーンは サーバのタイムゾーンと同じ になる。(tim
設定した内容を忘れないようにメモ。 Apache/2.2.15 (Unix) CentOS release 6.2 (Final) 実現したいこと ドキュメントルートに maintenance.html というファイルが存在すれば、メンテナンスモードとし、すべてのアクセスに対して maintenance.html を返す。 ただし、特定の IP アドレスからのアクセスに関しては、通常通りのレスポンスを返す。 準備 1. DOCUMENT_ROOT/maintenance.htmlを配置。画像等は使わず、1つの HTML ファイルで完結するようにする(と設定が楽) 2. /etc/httpd/conf.d/rewrite_maintenance.conf を配置。 # rewrite_maintenance.conf ErrorDocument 503 /maintenance.html <
Kibana というログビジュアライゼーションツールが話題です。 便利なアプリがあればそれを Heroku で動作させたいと思うのが人間の性です。 ということで Kibana を Heroku で動かしてみました。 ポイントは以下の4つです。 heroku-buildpack-static ビルドパックを使う Searchbox アドオンを使う Searchbox は Alternative URL を使う Searchbox の kibana-int というインデックスを手で作る それでは実際の手順です。 $ wget https://download.elasticsearch.org/kibana/kibana/kibana-3.0.1.zip $ unzip kibana-3.0.1.zip $ cd kibana-3.0.1 $ git init $ git add . $ gi
ハイテク学習リモコンの IRKit を購入して遊んでいる。 既存の家電にエクステンションポイントを生やすことができるのが画期的だと思っている。 最近「光目覚ましが最高に起きれる!」という記事をよく見るので、IRKit とフロアライトを組み合わせて、光目覚ましにしてみた。Mac がスリープになっていて、寝坊するのは嫌なので、Heroku Scheduler を使って、インターネット側からフロアライトをつけるようにしてみた。 Gemfile source ‘https://rubygems.org' gem ‘faraday’ light_on.rb require 'faraday' require 'json' conn = Faraday.new(url: 'http://api.getirkit.com') do |builder| builder.request :url_encod
「Java プラグイン機構」で検索をすると、ServiceLoader を使っていない記述が多くて 難しそうに見えるので、ServiceLoader を使う方法をまとめておきます。 主にチームメンバーへの情報共有が目的。 Java 1.7.0 update51 (Java6 以降でないと ServiceLoader が使えない) Maven 2.2.1 Eclipse 4.3.1 Kepler 実現したいこと Java でプラグイン機構を実現したい リフレクションやクラスローダは意識したくない jar ファイルをクラスパスに追加するだけで勝手にプラグインが追加される プラグインを作ってみる 各国の言葉で挨拶をする機能をプラグインとして作ります。 プロジェクトは foo-core という名前にします。 foo-core/src/main/java/foo/GreetingPlugin.jav
New Relic が New Relic Platform と銘打って、 様々なミドルウェアの監視をプラグインで追加できるようになりました。 当然プラグインを開発するための API も提供されています。 実際にプラグインを作ってみたので共有します。 New Relic プラグインの特徴 LITE (無料) プランでも利用可能 ただし、LITE プランだとデータの保存期間が24時間になる 言語はなんでも可。Ruby と Java はサンプルがあるので楽。 時系列で数字が決まるデータであれば、なんでも記録可能 例えば自分の体重の推移を記録することも技術的にはできる プラグインは公開しなくても利用可能 シンプルな仕組み故に柔軟性が高く、扱いやすい印象です。 今回開発するプラグイン New Relic LITE プランでは、Java メモリ使用率のグラフが見えません。 PRO 以上のプランであれ
私の所属するチームでは Redmine + TiDD(チケット駆動開発) から GitHub の Pull Request を使った開発フロー(プルリクエスト駆動開発)に移行してしばらく経ちます。 プルリクエスト駆動開発は、TiDD による開発に比べ コードレビューがやりやすいこと Travis CI や Coveralls のような GitHub を利用したエコシステムが利用しやすいこと が大変気に入っています。 しかし、プルリクエスト駆動開発は TiDD と比べて不満な点が一点だけありました。 それは「コミットログに "refs #123" のようにチケット番号をつけるルールを行いづらい」という点です。 このルールを守る理由は、コミット→ チケットへの逆引きをしやすくするためです。 こうすることで blame の画面 → コミットの画面 → チケット(Issue) の画面にブラウザ操作
Jenkins に Bitbucket のアカウントでログインしたいなーと思ったので書いてみた。 GitHub - mallowlabs/bitbucket-oauth-plugin: A Jenkins Plugin that supports authentication via Bitbucket OAuth 設定画面はこんな感じ。 Bitbucket の権限設定とは全くリンクしないので、誰か対応して Pull Request 下さい。 アップデートサイトに登録する気もあんまり無いので、万が一必要な人がいたらアピールしてください。 (2013/05/30 追記) まさかのアピールを受けたのでアップデートサイトに公開しました。 プラグインの機能については想像通りだと思うので、 以下に Bitbucket の OAuth を使う時に注意すべき点などをメモしておく。 参照すべきドキュメント
ハイテク万歩計の Fitbit One を購入して遊んでいる。 ゲーミフィケーション的な要素があり、日頃の運動不足解消に一役かっている。 Fitbit 自体は、体重や体脂肪、睡眠時間や摂取カロリーなど健康に関する数値のデータベースを目指しているように見える。 最近の Web サービスらしく RESTful API を提供しており、データを流し込むことができるため、別サービスに貯めていた体重と体脂肪を Fitbit にインポートしてみた。 インポータ 実行には、Ruby と Bundler が必要。 OAuth の登録 dev.fitbit.com にアクセスして、consumer キーと consumer secret を取得しておく。 準備 $ git clone git://github.com/mallowlabs/fitbit-weight-importer.git $ cd fi
環境 OS : CentOS 5.7 JDK : 1.6.0_27 Tomcat : 7.0.23 Tomcat のインストールパス : /home/tomcat/ New Relic Agent (Java) : 2.10.1 インストール 基本的には、New Relic の setup ページの通りに操作する。 newrelic_agent2.10.1.zip を展開し、 /home/tomcat/newrelicとなるように配置する。 # cd /home/tomcat/newrelic # mkdir logs # chmod +w logs # java -jar newrelic.jar install Nov 27, 2012 17:58:22 +0900 NewRelic 1 INFO: Agent is using Log4j ***** ( ( o)) New Reli
「Web アプリのバージョンアップ時に Tomcat を再起動してもいいのは小学生までだよねー」 ということで、Tomcat でダウンタイム無しで Web アプリのバージョンアップをする方法についてまとめてみる。 Parallel Deployment Tomcat 7 から Parallel Deployment という機能が追加され、同一 Web アプリの複数バージョンを同時にデプロイができるようになった。 war のファイル名を somewebapp##001.war 等にしておくことで、 - $CATALINA_BASE/ - webapps/ - somewebapp##001.war - somewebapp##002.warのように配備をすると、 http://localhost:8080/somewebapp/ でアクセスした場合に、セッションが継続している場合には古い方(
HerokuからTreasure Dataに標準出力でデータインポートできるようになって多幸感がすごい - ハードコイルド・ワンダーランド というエントリを見て、Treasure Data が導入の手間をこれだけ下げてくれているのに使わないのは失礼にあたる、ということで使ってみました。 また前提として、プロダクションコードには一切手を入れないということも意識しました。 構成 今回の構成は、すでに Heroku 上で動作している AsakusaSatellite に対して、Heroku 上に立てた bot (as-treasure-data-logger) が AsakusaSatellite API を定期的にキックして、データを JSON で標準出力に吐き続ける、という形にしました。 AsakusaSatellite の裏にいる MongoDB (MongoLab) を直接触ってもよかっ
環境 Windows 7 Ultimate (64bit) 背景 Windows 7 の SP 1 を当てようとすると ERROR_NOT_FOUND(0x80070490) 要素が見つかりませんと言われて失敗してしまう。 Windows 7 SP1 の適用が必ず失敗して辛い。Mac だとこんなことないのになぁ。 2011-08-09 11:40:02 via SOICHA と Windows を dis ったところ、 @mallowlabs こんにちは。MSHelpsJPです。こちらのページはご参考になるでしょうか。 URL URL なんとかうまくインストールできるのいいのですが... 突然失礼しました。 #Win7 ^KK 2011-08-09 13:49:45 via Internal Tool to @mallowlabs というありがたいメンションが飛んでくるもまったく解決せず。
Java の Web アプリケーションをプロファイリングするのに JIP (The Java Interactive Profiler) が簡単だったのでその使い方をメモ。 環境 Windows 7 64bit Tomcat 7.0.22 Java 1.6.0_24 JIP 1.2 インストール http://jiprof.sourceforge.net/ から jip-1.2.zip をダウンロードして 適当なパスに解凍する。パスに空白が含まれない方がベター。 今回は C:\usr\jip-1.2 に解凍した。 使い方 コマンドプロンプトを開き、以下のコマンドで Tomcat を起動する。 webapp.profile.properties を指定するのがミソ。 cd C:\Program Files\apache-tomcat-7.0.22\bin set JAVA_OPTS=-jav
Jenkins で Java プロジェクトを継続的インテグレーションする際に 規模を計測するのに JavaNCSS が便利である。 JavaNCSS とは? JavaNCSS の NCSS は Non Commenting Source Statements の略で ソースコードの行のうちコメント(や空行)でない行のことである。 JavaNCSS を使えば、個人のコーディングスタイルに左右されずに 本質的な規模を計測することができる。 Jenkins + Maven で使う場合の問題点 Jenkins 上で Maven プロジェクトで使おうとすると問題がある。 Jenkins のジョブの設定で mvn package siteとしても、レポートが表示されない。 Checkstyle や FindBugs では出るのに、JavaNCSS はなぜか表示されない。 原因は、JavaNCSS プラ
環境 CentOS release 6.2 (Final) JDK 1.6.0_27 Jenkins 1.452 CentOS 6.2 上で Jenkins をセットアップしていたら グラフ表示が文字化け(お豆腐化)してしまった。 Ubuntu ではフォント入れるだけで直った気がするのに。 どうやら Linux 上の Java でお豆腐化するのは FAQ らしいので、以下の手順で直った。 cd /usr/java/jdk1.6.0_27/jre/lib/fonts/ mkdir fallback cd fallback sudo ln -s /usr/share/fonts/vlgothic/VL-Gothic-Regular.ttf . このあと、Jenkins (Tomcat) を再起動し、再度ビルドを実行する。 めでたしめでたし。 参考 Oracle Technology Netwo
Java のドキュメントと言えば JavaDoc ですが 見た目があまりにもダサ過ぎやしませんかね? こんなんじゃ JavaDoc を書くモチベーションが下がってしまいます。 そこで JavaDoc を Doclava で生成するようにしました。 Google Code Archive - Long-term storage for Google Code Project Hosting. するとこんな風に今時のかっこいいデザインで出力されます。 検索ボックスは、パッケージ名とクラス名を インクリメンタル検索ができて機能的にも便利です。 使い方 Maven で使う場合には reporting 要素の下に以下のように書きます。 <reporting> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifac
# この記事は 名古屋クリスマソン 2011 で書かれました。 ソースコードのバージョン管理を行なっていても、リポジトリに入れるまでも無いちょっとした作業メモや、少しずつ異なるためリポジトリに入れづらい個々のデプロイ設定ファイルなど、ファイルの扱いはみなさん困っているのではないでしょうか? ありがちな話として、Redmine の Wiki に貼ってみたものの、 プロダクトに追従せず、すぐに陳腐化してしまう 似たような記述がいろんな場所に分散してしまう などと言った状況になっているのではないでしょうか? Heso そこで、バージョン管理ができてちょっとしたファイルの置き場所として使える Gist のようなものが社内にあると便利です。社内で使える Gist として、Gist のクローンを目指して作られている Heso というプロジェクトがありますが、現在のバージョンでは 検索ができない 過去の
この記事は Jenkins Advent Calendar 2011 の17日目として書かれました。 前日は、id:tyuki39 さんの Jenkinsプラグイン探訪 - List View column plugins - ふぞろいのGENGOたち でした。たくさんの Jenkins プラグインが紹介されていて楽しい記事でしたね。 そのたくさんのプラグインですが、現在いくつの Jenkins プラグインが利用出来るか知っていますか? Jenkins のプラグイン機構に乗っているプラグイン数は、記事執筆時点で 446 個(!)です。 これだけたくさんのプラグインがあると、新しいプラグインを見つけるだけでも大変です。 ということで、Jenkins プラグイン一覧を見やすくするサービスを作ってみました。 https://jenkins-plugin-hub.herokuapp.com 主な機
Jenkins で XFD をやりたいとずっと思っていたのだけど、海外の友達に頼んで買ってもらった だの 回路をダンボーに組み込んだ だのハードル高いよ!と思ってなかなか実現できずにいた。 そんなとき Jenkinsのビルド結果をリアルタイム通知するプラグイン『Jenkins Websocket Notifier』を作りました - みずぴー日記 で iPad を XFD にしていたのに大変感銘を受け、会社の Jenkins のビルド状態を iPhone に常に表示してみた。 テスト失敗中 写真は iPhone 4 だけど、使い道がなくなった古い iPod touch が家に転がっていたりする人は、有効活用できると思う。 設定手順 まずは、 リンク先 の Jenkins Websocket Notifier プラグインをインストールする。 監視したいプロジェクトで通知を有効にするのを忘れずに
ある日突然「Rails 3 のプロジェクト作ったから Jenkins でテスト結果とカバレッジをいい感じで表示できるようにしておけよ」と言われて、一生懸命設定したときの内容をシェアする。 Scala (lift) 編は Jenkins で Scala (lift) プロジェクトのテスト結果とカバレッジをグラフ表示する - mallowlabsの備忘録 をご参照。 イメージ 環境 ruby 1.8.7 rubygems 1.5.0 rake 0.8.7 rails 3.0.3 ci_reporter 1.6.4 Jenkins 1.414 Jenkins ruby metrics plugin 1.5.0 Jenkins Rake plugin 1.7.6 まずはローカルで設定 要は rcov と ci_reporter を組み込んだ Rails 3 アプリケーションを作ればよい。 適当なブ
ある日突然「Scala (lift) のプロジェクト作ったから Jenkins でテスト結果とカバレッジをいい感じで表示できるようにしておけよ」と言われて、一生懸命設定したときの内容をシェアする。 完成予想図 環境 sbt 0.7.5 sbt-coverage 0.2 junit_xml_listener 0.2 Jenkins 1.414 Jenkins Emma plugin 1.25 Jenkins sbt plugin 1.2 環境設定 sbt がインストールされている必要がある。 Mac OS X ユーザで homebrew ユーザなら $ brew install sbtでインストールされる。Scala のインストールは不要。 バージョンが少し古くても問題ない。 まずはローカルで試す (1) Scala (lift) プロジェクトを用意する ここでは説明のため、 Google
Jenkins のおっさんが好き過ぎて、 常に画面におっさんのアイコンを表示しておきたいので Google Chrome エクステンションを作った。 GitHub - mallowlabs/jenkins-notifier-for-chrome: A Google Chrome(TM) extension for Jenkins (http://jenkins-ci.org). 特徴 常におっさんのアイコンを表示できる ビルド結果をデスクトップに通知できる Google Chrome を閉じてもバックグラウンドで通知できる ツールバーのアイコンからビルド番号、ビルド結果を確認できる ツールバーのアイコンからワンクリックで Jenkins のページを開ける 成功時 テスト失敗時 ビルド失敗時 利用方法 2011/06/15 追記 Chrome Web Store で公開したので、以下の作業は
次のページ
このページを最初にブックマークしてみませんか?
『mallowlabsの備忘録』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く