Skip to content

Instantly share code, notes, and snippets.

@takezoe
takezoe / docker_cheatsheet.md
Last active August 29, 2015 13:59
Docker CheatSheet

#Docker CheatSheet

Run container shell

sudo docker run -i -t [container_name] /bin/bash

以下のようにポートを指定しておくとホストのポートにマッピングできる。

@takezoe
takezoe / commons-daemon_1.0.10-1.0.15.diff
Created May 13, 2014 05:49
Diff between Commons Daemon 1.0.10 and 1.0.15
diff -r commons-daemon-1.0.10-native-src/NOTICE.txt commons-daemon-1.0.15-native-src/NOTICE.txt
2c2
< Copyright 1999-2012 The Apache Software Foundation
---
> Copyright 1999-2013 The Apache Software Foundation
diff -r commons-daemon-1.0.10-native-src/RELEASE-NOTES.txt commons-daemon-1.0.15-native-src/RELEASE-NOTES.txt
2c2
< Version 1.0.10
---
> Version 1.0.15
@takezoe
takezoe / sample.js
Last active August 29, 2015 14:02
GitBucket plug-in example
// Add a global menu item to the header
PluginSystem.addGlobalMenu("Google", "http://www.google.co.jp/", "data:image/png;base64,..."
function(context){
return context.loginAccount.isDefined();
}
);
// Add a custom action
PluginSystem.addGlobalAction('/test', function(request, response){
return "<h1>This is Test Plug-In</h1>";
@takezoe
takezoe / CaseClassAnnotation.md
Last active August 29, 2015 14:03
Scalaのケースクラスのプロパティに付けたアノテーションを読み取る

Javaで作ったこんなアノテーションがあるとします。

package jp.sf.amateras.sample;

import java.lang.annotation.*;

@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Id {
@takezoe
takezoe / plugin.scala
Last active August 29, 2015 14:05
Scala version of GitBucket Plug-in
import plugin._
val pluginDef = ScalaPlugin.define(id, version, author, url, description)
pluginDef.addRepositoryAction("/issues/export", Security.Member()){ (request, response, repository) =>
db.select(s"""SELECT * FROM ISSUE WHERE
USER_NAME = '${repository.owner}' AND
REPOSITORY_NAME = '${repository.name}' AND
PULL_REQUEST = false""").map { issue =>
Map(
@takezoe
takezoe / gist:8af7129143d0e49fea44
Created October 30, 2014 12:22
Scala File I/O Practice

ファイルを再帰的に検索してみる

キーワードとディレクトリを指定するとそのディレクトリ配下のファイルからファイル名に指定したキーワードを含むファイルの一覧を検索して返す関数を実装してみましょう。外部ライブラリを使用せず、JavaとScalaの基本ライブラリだけで実行するものとします。

関数のシグネチャの例を以下に示します。

def find(keyword: String, root: java.io.File): Seq[java.io.File]
@takezoe
takezoe / gist:689fd8ec21d0de43f60d
Last active August 29, 2015 14:10
Experimental implementation of Elasticsearch4s Async API
///////////////////////////////////////////////////////////////
// Elasticsearch4s is a Scala client for Elasticsearch
// https://github.com/bizreach/elasticsearch4s
///////////////////////////////////////////////////////////////
val config = ESConfig("my_index", "my_type")
// Use AsyncESClient instead of ESClient
AsyncESClient.using("http://localhost:9200"){ client =>
val future = client.searchAsync(config){ searcher =>
searcher.setQuery(QueryBuilders.matchPhraseQuery("subject", "Hello"))
@takezoe
takezoe / DailyScala_FuturePractice.md
Last active August 29, 2015 14:12
Futureの練習問題です

Futureの待ち合わせ

以下のような2つのクラスタを構成するサーバの一覧があるとします。

val cluster1 = Seq("server1", "server2")
val cluster2 = Seq("server3", "server4")

これらのサーバに対してFutureを使って以下のような処理を非同期で行うプログラムを書いてみよう。

@takezoe
takezoe / DailyScala_FuturePractice2.md
Last active August 29, 2015 14:14
Futureの練習問題です

Futureの結果を使って次の処理を行う

2つのWeb APIがあり、1つめのAPIを呼び出して得た結果を使って次のAPIを呼び出す必要があるとします。

ScalaではHTTP通信を行うためのライブラリとしてDispatchというものがあるのですが、このライブラリはノンブロッキングI/Oを使っており、Futureベースのインターフェースを備えています。

例えばGETメソッドでの通信は以下のようにして行うことができます。戻り値はEitherになっており、エラーの場合はLeftThrowableを返す便利仕様ですが、通信に失敗した場合もonSuccessで処理しなくてはいけないのはやや紛らわしいかもしれません。

import dispatch._, Defaults._
@takezoe
takezoe / DialyScala_FuturePractice3.md
Created January 31, 2015 15:23
Futureの練習問題です

Futureの結果を集計する

以下のような集計処理を行うメソッドがあるとします。

def aggregate(id: String): Int ={
  ...
}