Vmbkp: An Online Backup Tool for VMware vSphere

The software is a tool to backup virtual machines in VMware vSphere environment.


– Online backup

– Multi-generation management

– Fast archive access

– Command-line Interface

Supported platform:

– VMware vSphere 4

Single ESX(i) is not tested. Free ESXi is not supported.

– Linux on x86_64 host as backup server. CentOS 5.5 64bit is tested.

Source code repository:





– The software uses VI-Java library by Steve Jin and

Virtual Disk Development Kit by VMware, Inc.

I thank them for publishing these libraries.

– I thanks members in Cybozu Labs, Inc. for reviewing source code to improve it.


Takashi HOSHINO / Cybozu Labs, Inc.

VMware and VMware vSphere are registered trademarks and/or trademarks of VMware, Inc.

Language Detection Library for Java

The language-detection library is a Java opensource library to detect languages in which texts are written.
(Also known as ‘Language identification’, ‘Language guessing’ and ‘Language recognition’)

99% over precision for 40+ languages
Detect language of a text using naive Bayesian filter
Generate language profiles from Wikipedia abstract database file
Supported languages (bundled 47 profiles):
Afrikaans, Arabic, Bulgarian, Bengali, Czech, German, Greek, English, Spanish, Persian, Finnish, French, Gujarati, Hebrew, Hindi, Croatian, Hungarian, Indonesian, Italian, Japanese, Kannada, Korean, Macedonian, Malayalam, Marathi, Nepali, Dutch, Punjabi, Polish, Portuguese, Romanian, Russian, Slovak, Somali, Albanian, Swedish, Swahili, Tamil, Telugu, Thai, Tagalog, Turkish, Ukrainian, Urdu, Vietnamese, Simplified/Traditional Chinese.
Project Homepage:
Apache License 2.0
Shuyo Nakatani (twitter : @shuyo) / Cybozu Labs, Inc.


Released ordered KVS Mio 0.0.1alpha

We have released Mio – a distributed Skip Graph based orderd KVS 0.0.1alpha.(mio-0.0.1-alpha.tar.gz)

What is Mio?

In short, Mio is memcached + “range search”.

Mio suports range search queries like “get 10 datum which key are between key1 and key2″.
N.B. At present, it is in alpha quality.

Building and Installing

  • Install a recent version of Erlang.
  • make
  • make install with Environment variables for configuration. TARGET_DIR: Installation target directory. SBIN_DIR: sbin direcotry.
    sudo TARGET_DIR=/user/local/mio SBIN_DIR=/usr/sbin/ make install

Running Mio

# Run first node named mio1 with verbose mode on host FQDN_of_your_host (default port 11211)
% mio -v -n mio1@FQDN_of_your_host
# Run second node named mio2 on host FQDN_of_your_host2.
# With -i option, indidate the introducer node.
% mio -v -n mio2@FQDN_of_your_host2 -i mio1@FQDN_of_your_host
# Run third node named mio3 on host FQDN_of_your_host (port 11411).
% mio -v -n mio3@FQDN_of_your_host -i mio1@FQDN_of_your_host -p 11411


You can access to Mio using memcached protocol.

Currently the following commands are supported.

  • get
  • set
  • delete
  • quit
  • stats
  • range_search
    get_multi(“mio:range-search”, Key1, Key2, Limit, desc/asc)

Access to mio

Use memcached client libraries to access mio.


# Example: Access to Mio.
use strict;
use warnings;
use Cache::Memcached;
use Data::Dumper;
my $m = Cache::Memcached->new( { servers => ['']} );
$m->set( "hello" => "world" );
$m->set( "intel" => "cpu" );
$m->set( "japan" => "Tokyo" );
warn $m->get("hello");
warn $m->get("intel");
warn $m->get("japan");
my $href = $m->get_multi("mio:range-search", "he", "j", "10", "asc");
# Should print
# $VAR1 = {
#           'hello' => 'world',
#           'intel' => 'cpu'
#         };
warn Dumper $href;


$mem = new Memcached;
$mem->addServer('', 11211);
$mem->set("hello", "world");
$mem->set("intel", "cpu");
$mem->set("japan", "Tokyo");
printf("%s\n", $mem->get("hello"));
printf("%s\n", $mem->get("intel"));
printf("%s\n", $mem->get("japan"));
var_dump($mem->getMulti(array("mio:range-search", "he", "j", "10", "asc")));


import com.danga.MemCached.*;
import java.util.*;
public class JavaMemcachedClient
public static void main(String[] args)
String[] serverlist = { "" };
SockIOPool pool = SockIOPool.getInstance();
MemCachedClient mc = new MemCachedClient();
mc.set("hello", "world");
mc.set("intel", "cpu");
mc.set("japan", "Tokyo");
System.out.printf("hello => %s intel => %s japan => %s\n", mc.get("hello"), mc.get("intel"), mc.get("japan"));
String[] keys = { "mio:range-search", "he", "j", "10", "asc" };
Map<String, Object> ret = mc.getMulti(keys);
for (Map.Entry<String, Object> e : ret.entrySet()) {
System.out.println(e.getKey() + " : " + e.getValue());


Mio using “Skip Graph” algorithm. See following articles


Written by Taro Minowa(Higepon) higepon@labs.cybozu.co.jp


New BSD License

Mio – a distributed Skip Graph based orderd KVS

We published Mio – a distributed Skip Graph based orderd KVS at github.
In short, mio is memcached + “range search”.
You can issue a range search query to Mio using memcached client.
For more detailed information, see README and following slides I used on Erlang Tokyo Workshop #4.

Taro Minowa(Higepon)

PHP Syslog Patch for Windows (2)

We published a patch that makes PHP to send UTF-8 strings to eventlog on Windows. It works well, but the patch is only applicable when your PHP’s ‘mbstring.internal_encoding’ is UTF-8. This means there are some limitations against general use.

We have improved that patch by introducing a new INI directive that enables/disables wide character conversion of syslog messages; the directive name is ‘syslog_widechar’.  Here is a sample usage with two simple PHP scripts.


$message = SOME_UTF8_STRING;
// syslog(LOG_WARNING, $message); // this does not work
ini_set("syslog_widechar", true); // our new directive
syslog(LOG_WARNING, $message);    // this works


$message = SOME_ISO_2022_JP_STRING;
syslog(LOG_WARNING, $message);    // this works
ini_set("syslog_widechar", true); // our new directive
// syslog(LOG_WARNING, $message); // this does not work
syslog(LOG_WARNING, mb_convert_encoding($message, "UTF-8", "ISO-2022-JP")); // this works

After running these scripts using PHP with this patch, you can see the event messages without any corruptions in Event Viewer.  This patch applies cleanly to PHP-5.3.1.

Download: php_syslog-2.patch