読者です 読者をやめる 読者になる 読者になる

GeekFactory

int128.hatenablog.com

Continuous deployment to App Engine from Circle CI by Gradle

Circle CIを利用して、JVMベースのアプリをGoogle App Engineにデプロイする作業を自動化してみました。 うれしいこと 誰でも簡単にデプロイできる CIやPull Requestレビューを通過したコードのみデプロイできるように制限できる ビルド環境の差異による影響…

Circle CIでSSHサーバを利用する際の注意点

Circle CIでテストコードからローカルのSSHサーバを利用する際の注意点をメモします。 背景 SSHクライアントのテストでSSHサーバが必要なので、CI環境で用意したい。具体的には、Gradle SSH PluginのテストでCircle CIのSSHサーバを利用したい。 課題と対策 …

Gradle SSH Plugin 2.4.0をリリースした

Gradle SSH Plugin 2.4.0、Groovy SSH 2.4.0をリリースしました。 github.com 2.4.0の変更点 New features: Host key checking for gateway access Put files filtered by given closure Get files filtered by given closure Add ssh.runtime object in CLI…

ITのビジネス価値を最大化するには

2016年になってもアジャイルはテストをしないとか、計画を立てないとか、1日10回デプロイするための技法といった誤解が広まっているのは残念すぎる。 まず、ITのビジネス価値を最大化するという視点が必要なはず。事業の売上や費用を改善するためにシステム…

TestKitによるGradleプロジェクトのテスト

最近のGradleで導入されているTestKitを使ってみたのでメモします。 TestKitでできること TestKitを利用すると、Gradleプロジェクトに対するテストを実行できます。例えば、何かの設定ファイルを自動生成するタスクをGradleで定義している場合に、そのタスク…

VyOSでIP masqueradeの最小構成

VyOSで最小限のルータを設定する時のメモです。 前提 INTERNAL側に複数のクライアントをぶら下げたい INTERNAL側でDHCPサーバを立てて、クライアントの設定を省力化したい GLOBAL側はイントラネットなのでファイアウォールは設定しない 設定 GLOBAL側とINTER…

Gradle SSH Plugin 2.3.0をリリースした

Gradle SSH Plugin 2.3.0、Groovy SSH 2.3.0をリリースしました。 github.com 2.3.0の変更点 リモートコマンドを実行する時にコマンドラインを簡単にエスケープする構文を追加しました。これまでは自分でエスケープする(シングルクォートで囲む、もしくはバ…

Gradle SSH Plugin 2.2.0をリリースした

Gradle SSH Plugin/Groovy SSH 2.2.0をリリースしました。 2.2.0の変更点 authentications でユーザ認証方式を指定できるようになりました。通常の使い方(パスワード認証、公開鍵認証)ではユーザ認証方式を指定する必要はありませんが、Kerberos認証などの…

Gradle SSH Plugin 2.1.1をリリースした

Gradle SSH Plugin/Groovy SSH 2.11をリリースしました。 2.1.1の変更点 SCP GET/PUTの性能を改善しました。 github.com 2.1.0でSCPサポートを追加しましたが、非効率な実装が残っていたため、2.1.1で性能を改善しました。 Test Item scp vs sftp (2.1.0) sc…

Gradle SSH Plugin 2.1.0をリリースした

Gradle SSH Plugin 2.1.0、Groovy SSH 2.1.0をリリースしました。 github.com github.com 2.1.0の変更点 SCPによるファイル転送をサポートしました。SFTPはJSchに組み込まれている機能を利用しているので簡単に実装できましたが、SCPはコマンドの標準入出力…

AndroidでBLEデバイスから通知を受け取る

AndroidでBLE(Bluetooth Low Energy)デバイスから通知を受け取る方法でハマったのでメモしておきます。 セントラルがペリフェラルから通知を受け取るには setCharacteristicNotification() でセントラル側の通知受信を有効にするだけでなく、 writeDescrip…

Gradle SSH Plugin/Groovy SSH 2.0.0をリリースした

Gradle SSH Plugin 2.0.0、Groovy SSH 2.0.0をリリースしました。 github.com github.com 2.0.0の変更点 executeSudo メソッドでsudoコマンドに与えるパスワードをデフォルト(SSH接続時のパスワード)から変更できるようにしました。また、sudoコマンドのパ…

Gradle SSH Plugin 1.5.1をリリースした

Gradle SSH Plugin 1.5.1、Groovy SSH 1.5.1をリリースしました。 github.com github.com 1.5.1の変更点 SFTPでファイルやディレクトリを削除する remove メソッドを提供しているのですが、ファイルやディレクトリが存在しない場合に例外が発生しないように…

Gradle SSH Plugin 1.5.0をリリースした

Gradle SSH Plugin 1.5.0、Groovy SSH 1.5.0をリリースしました。 github.com github.com 1.5.0の変更点 Gradle SSH Pluginではホストにロールを関連付けることができます。これまで複数ロールのORを取るメソッド role() を提供していましたが、1.5.0からAND…

Groovy 2.3および2.4におけるTraitの差異

Groovy SSHの開発で気づいたのですが、Groovy 2.3と2.4でTraitの挙動が微妙に異なるようです。 2.3から2.4に上げたところ、Traitのメソッドに書いたクロージャをdelegate指定で実行してもdelegateのプロパティやメソッドが解決できない問題が発生しました。…

Gradle SSH Plugin 1.4.0をリリースした

Gradle SSH Plugin 1.4.0、Groovy SSH 1.4.0をリリースしました。 github.com github.com 1.4.0の変更点 ECDSA Host Keyに対応しました。正確には、以下の場合にHost Key Checkingが失敗する事象を修正しました。 known_hosts にECDSA鍵が含まれる。 SSHサー…

Nexus 5Xを注文した

Nexus 5Xを注文しました。約2年半ぶりの端末購入です。 www.google.co.jp 現在はXperia SP(SIMフリー)を使っています。expansysで買いました。 SONY Xperia SP C5303 (White ホワイト) SIMフリー 海外携帯出版社/メーカー: Sonyメディア: エレクトロニクス…

Gradleで特定の条件を満たした場合にのみテストケースを実行

Gradleで特定の場合にのみテストケースを実行する方法を説明します。例えば、通常のテストケースはH2 Databaseを利用するけど、一部はテスト環境上のMySQLで実行したいといった場合を考えます。 基本的な考え方 JUnitのカテゴリ機能でテストケースをフィルタ…

Gradle SSH Plugin 1.1.5をリリースした

Gradle SSH Plugin 1.1.5、Groovy SSH 1.1.9をリリースしました。 github.com サーバでSFTPが無効に設定されている場合にスクリプトがハングアップしてしまうバグを修正しました。約3ヶ月ぶりにリリースしようとしたらテストが通らなくて焦りました。Travis …

個人的レトロスペクティヴ

2015年の振り返り。 仕事 銀座で働いてた マスターになったりセンセイになったりと忙しい一年だった 企画や開発のチームが最大限の力を発揮できるように悩み抜いた一年だった 聞くこと、描くこと、伝えることでコミュ力が鍛えられた一年だった 転職せずに他…

Gradle SSH PluginやGroovy SSHはどのようにテストしているか

G*Advent Calendar 2015の18日目です。 qiita.com 昨日は某社の方をゲストに迎えて闇の話をしていたためAdvent Calendarの公開が遅れました。大変申し訳ございません。 本記事では、Gradle SSH PluginやGroovy SSHをどのようにテストしているか説明します。G…

CoffeeScriptのアプリをDockerイメージにする

CoffeeScriptで書いたアプリをDockerイメージとしてリリースする方法を説明します。Dockerを使うとNode.jsのインストールや依存関係の解決を手動でやる必要がなくなるので、他の環境でさくっとアプリを実行したい時に便利です。 以下の簡単なスクリプトを例…

アジャイルな家計の見積もりと計画づくり

家庭を支える技術 Advent Calendar 2015の13日目です。 www.adventar.org 本記事では、我が家の家計を支える技術を紹介します。昨年も家計を支える技術という記事を書きましたが、今年は環境の変化に対応したグレードアップ版をお届けします。タイトルは有名…

Sambaにおける複数パーティションの容量の補正

Sambaで複数のパーティションをまたがる共有ドライブを公開すると、空き容量が正しく表示されない問題があります。 例えば、下表のように /home の下に複数のパーティションをマウントしている場合、 /home の共有ドライブに対する容量は10 GBと表示されてし…

スプレッドシートでカラムの更新日時を記録する

Google Appsのスプレッドシートは便利ですね。特に、JavaScriptで独自の関数やトリガーを定義できるのでハックが捗りますね。本エントリではスプレッドシートで特定のカラムの更新日時を記録する方法を説明します。 題材 スプレッドシートで下図のようなタス…

HubotでWebHookのHTTPリクエストを受け取る

Hubotはチャットの投稿を受け取って処理を実行するのに便利ですが、外部からHTTPリクエストを受け取って処理を行うこともできます。 HubotにはExpressが組み込まれており、デフォルトでは8080ポートをlistenします。HubotでHTTPリクエストを処理するには、以…

Gradle SSH Plugin 1.1.4, Groovy SSH 1.1.8をリリースした

Gradle SSH Plugin 1.1.4とGroovy SSH 1.1.8をリリースしました。リトライ機構にバグがあったので修正しました(Packet corrupt errors after upgrading from 1.1.5 to 1.1.7 · Issue #77 · int128/groovy-ssh · GitHub)。バグレポートをいただけるのは嬉し…

トニー・モリスからメール来てた

hotchemi.hateblo.jp Gmailの迷惑メールフォルダを整理していたら、数日前にトニー・モリスからメールが来てたことに気づいた。あと、メールを読んでいるうちに、Tony Morisの一部を伏せ字にするとT○○○Morisになるという知見を得た。 ちなみに、hotchemiさん…

SpockのPollingConditionsがE2Eテストで便利

Spockの PollingConditions が便利だったのでメモです。 PollingConditions は条件を満たすかタイムアウトになるまで評価を繰り返してくれます。E2Eテストで別スレッドでサーバを起動してサーバがreadyになるまで待つといった場合に便利です。 import spock.…

Gradle Updateをカイゼンした

Gradle Updateを公開します - GeekFactoryint128.hatenablog.com Gradle Wrapperを自動更新してくれるサービス Gradle Update を公開してから積み残しがいくつかあったので改善しました。 Done README 英語圏の人にも使ってもらうため、使い方やスクリーンシ…

Gradle Updateを公開します

Gradle Wrapperを自動更新してくれるサービス Gradle Update を公開します。Gradle Wrapperのようなビルドシステムは一度設定するとバージョンを上げるタイミングがあまりないのですが、新しいバージョンを使うとパフォーマンスが改善されたりバグを踏まずに…

App StoreのレビューをXSLTで取り出す

App Storeに公開されているアプリのレビューを取り出すXSL(XML Stylesheet)を書きました。 int128/appstore-reviewsgithub.com 以下の手順で使います。 App StoreからXMLをダウンロードします。ここではApp Store XMLと呼びます。 App Store XMLをXSLTで変…

certtoolコマンドとテンプレートで簡単に証明書を作る

Apache httpdやOpenVPNなどで自前のSSL証明書を使うには、一般に以下の手順が必要になります。 CAの秘密鍵を生成する。 CAの自己署名証明書を生成する。 サーバの秘密鍵を生成する。 サーバのCSRを生成してCAに送る。 CAで証明書を発行する。 クライアントの…

コマンドラインで通知メッセージを表示する

osx

Mountain Lion以降のOS Xでは、AppleScriptを使って通知センターにメッセージを表示できるようになりました。下記のような関数定義を .zshrc に書いておくと便利です。 function display_notification () { osascript -e 'on run argv display notification …

git statusを利用したリポジトリ情報のプロンプト表示

zsh

zshでGitのステータス情報をプロンプトに表示するにはvcs_infoを使う方法が一般的ですが、vcs_infoで得られる情報には限りがあります。そこで、git statusを使ってプロンプトを表示する方法を調べてみました。なお、OS XのGit 2.3.2で確認しています。 git s…

Docker Machineで既存サーバにDockerホストを構築する

Docker MachineはDockerホストを構築するためのツールです。VirtualBoxやVMwareなどの仮想化基盤、AWSやGCEなどのクラウドに対応しており、環境構築からDockerクライアントの接続設定まで自動的に行ってくれます。これによって気軽にDocker環境を調達できる…

Hubotでkuromoji.jsによる形態素解析を試す

Hubotでkuromoji.jsを使って形態素解析を行う方法を調べてみました。形態素解析のライブラリは node-mecab-async も有名ですが、Mecabのバイナリを用意する必要があります。kuromoji.jsはPure JavaScriptの実装なので、Herokuに簡単にデプロイできます。 yo …

Travis CIからGitHubにPull Requestを送る

ドキュメントやWebサイトの情報は、プロダクトと同じリポジトリで管理することが望ましいですが、構成管理の都合でリポジトリが別になってしまうことがあります。そのような場合、リポジトリ間で情報を反映する手作業が発生します。例えば、 ドキュメントをH…

プロダクトのドキュメントをMarkdownからAsciiDocに移行した

これまでGradle SSH PluginやGroovy SSHのドキュメントをGitHub Flavored Markdown(GFM)で書いていましたが、AsciiDocに移行してみました。やったことを記事に残しておきます。 動機 これまでソースコードリポジトリとドキュメントリポジトリを別々に管理…

リリースタスクの見える化を自動化する

ソフトウェアのリリース作業は時間が経つとともに複雑化する傾向があります。どんなに作業の自動化を推し進めても、リリース後の確認やドキュメントの更新などの手作業は残ってしまいます。また、一部の担当者しかリリース作業を知らないと、人がボトルネッ…

Chrome Extensionのスクリーンショット作成を自動化した

Chrome Extensionをストアに公開するにはスクリーンショットを作成する必要があります。バージョンアップのたびに手作業が発生してつらかったので自動化してみました。 欲しいもの 私が公開しているChrome Extensionを例にして説明します。 Bookmarks in New…

Vue.jsからReact.jsに移行した

公開しているChrome ExtensionをReactベースに移行してみました。これは「新しいタブ」を置き換えるもので、新しいタブを開いた時に軽くて見やすいブックマークページが表示されるようになります。 Chromeストアから入手できます。 Bookmarks in New Tab Pag…

睡眠時間を通知して夜更かしを防ぐスクリプト

暖かくなってきて、ついつい夜更かししてしまう季節になりました。睡眠時間は翌日の生産性に大きく影響するため、なるべく多くの睡眠時間を確保したいものです。Enterprise Neetなら昼前に出社する生活を堪能できますが、そんな機会はなかなかないものです。…

Gradle Wrapperを自動アップデートするサービスを作ってる

Gradleはおよそ2〜3ヶ月ごとに新しいバージョンがリリースされています。それに合わせてGradle Wrapperもアップデートするとバグフィックスや新機能の恩恵を受けられるのですが、後回しにして放置してしまうことが多いと思います。 ビルドを自動化したのなら…

Jenkins Workflow PluginのDSLを拡張する試み

Jenkins Workflow PluginのDSLを拡張する仕組みを調べたのでメモします. Workflow basic stepsを参考にする Workflow Pluginはbasic stepsという基礎的な命令セットと一緒にリリースされています.basic stepsには下記が含まれます. ArtifactArchiverStep …

Gradle SSH Plugin 1.1.1をリリースした

Gradle SSH Plugin 1.1.1をリリースしました. GradleからリモートサーバにSSHしてコマンド実行やファイル転送を行うことができるプラグインです.Groovy DSLを活用しているので,簡単にSSH処理を記述できます. int128/gradle-ssh-plugin New Features 1.1…

JVMベースのコマンドラインツールをHomebrewで配布する

JavaVMで動くコマンドラインツールをHomebrewで配布する方法を説明します.JavaやScala,Groovyなどで書かれたツールをMacユーザに配布する際に役立ちます. Homebrewとは Mac OS Xで使えるパッケージ管理システムの一つにHomebrewがあります. Homebrewを使…

イメージファイルをExifの撮影日付にリネームする

スマートフォンの写真を整理していたら DSC_XXXX の連番が重なってつらかったので,画像ファイルを撮影日付のファイル名にリネームするツールを作りました.RubyのスクリプトなのでWindowsでもOS XでもLinuxでも使えます. int128/rename-exif Exifライブラ…

vue.jsでInfinite Scrollを実装する

ページを下端までスクロールしたら次のページが読み込まれるInfinite Scroll(無限スクロール)をvue.jsで実装する方法を調べてみました. 一般的なInfinite Scrollの実装方法 スクロール可能な要素の scroll イベントを捕捉して,表示領域の位置を計算しま…

Gradle SSH Plugin 1.0.5をリリースした

Gradle SSH Plugin 1.0.4と1.0.5をリリースしました。 New Feature in v1.0.4 コマンドやシェルの終了ステータスを無視する設定を追加しました。下記のように引数に ignoreError: true を加えると、コマンドやシェルが0以外のステータスコードを返しても例外…