Hatena::ブログ(Diary)

めざせ!細マッチョ このページをアンテナに追加 RSSフィード Twitter

Pivotal
Pivotal.IO 2018Replatforming for Cloud-Native Business〜 デジタル時代のクラウドネイティブ・プラットフォーム戦略〜https://omniattend.com/seminar/pivotal/io2018
Pivotal
Pivotal CEOが語るKubernetes、そして一般企業のデジタルトランスフォーメーションhttp://www.atmarkit.co.jp/ait/articles/1709/08/news034.html
GemFire
インメモリデータグリッドによる データベース設計・構築・管理入門〜データベースエンジニアからインメモリデータグリッドエンジニアへの橋渡しhttps://dinnovation.io/article/memo_pivo

2017-07-29 今日の取得物

[] 三菱東京 UFJ-VISA デビットカードを入手した

f:id:quitada:20170729205411j:image:right

デビットカードというと、J-Debit のイメージが強くて、あまり使えるところがないなぁぐらいに思ってましたが、VISAビットはそれこそ VISA 付帯のクレジットカードが使えるところでは、おおむね使えるようなんですよね。

いいかえれば、見た目 VISA 付帯のクレジットカードで、決済は指定銀行口座から即座に行われるだけというか。ネットショップでのクレジットカード決済で、クレジットカードとして VISA デビットカード登録しておけば決済し放題というか。

なので、作ってみました。そして、本日届きました。

もちろん、3 倍決済が早そうな赤い券面ですね!

さっそく、モバイル Suica で、クレジットカードチャージでこのデビットカードの番号を指定してみました。普通にできました。そして、即時に私の口座からチャージした分が引き落とされてました。

ま、ちょっと他にも色々とこのカードでの決済を試してみて、ダメなやつは随時コメントに報告したいと思います。

2017-06-05 今日の些末な IT 技術的アウトプット

[] Spring Data Gemfire の cache-config.xml ファイルにおける PDX 設定

Pivotal GemFire 9.0.3 を Spring Data Gemfire 2.0.0 M3 で弄る機会がありまして、ちょっと個人的にはまったことについてメモです。

Spring Data Gemfire + Spring Boot で Spring Bootable な cache-config.xml なしのアプリ記述するのがクールかもしれないけど、とりあえず Pivotal GemFire の cache.xml 設定を Spring Data Gemfire の cache-config.xml移植してみようと思いまして、PDX 設定でちょっとまりました。

cache.xml で以下の感じで、ReflectionBasedAutoSerializer を使って何も考えずにパッケージが io.quitada.* なクラスから生成されたオブジェクトシリアライズ・デシリアライズする設定がありがちですね。

    <pdx read-serialized="false">
        <pdx-serializer>
            <class-name>
                com.gemstone.gemfire.pdx.ReflectionBasedAutoSerializer
            </class-name>
            <parameter name="classes">
                <string>io.quitada.*</string>
            </parameter>
        </pdx-serializer>
    </pdx>

これを Spring Data Gemfire の cache-config.xml表現したいと思ったわけです。Spring Data Gemfire の場合はまず、cache の設定の属性として PDX 関連の設定をして、シリアライザークラスは別途 Bean を定義して pdx-serializer-ref に当該 Bean ID指定シリアライズ対象クラス定義した Bean の constructor-arg指定しておくと良いみたいです。

    <gfe:client-cache id="client-cache" properties-ref="client-properties" pool-name="myPool"
                      pdx-read-serialized="false" pdx-serializer-ref="pdxAutoSerializer" />

    <bean id="pdxAutoSerializer" class="org.apache.geode.pdx.ReflectionBasedAutoSerializer">
        <constructor-arg value="io.quitada.*" />
    </bean>

はまったのはシリアライズ対象クラスの設定方法です。これ、ドキュメントに書いてますかねー?ぐはぁ…。こちらに設定例ありますが…。

対象クラス指定複数行う場合(GemFire の cache.xml はカンマ区切りでこれもあまりドキュメントにきちんと書いてないような…)、以下のように array を使ってやると良いみたいです。

    <bean id="pdxAutoSerializer" class="org.apache.geode.pdx.ReflectionBasedAutoSerializer">
        <constructor-arg>
            <array>
                <value>io.quitada1.*</value>
                <value>io.quitada2.*</value>
                <value>io.quitada3.*</value>
            </array>
        </constructor-arg>
    </bean>

2017-05-20 今日の IT 技術アウトプット

[] Apache Geode で gfsh 使って積極的JSON 形式データを扱ってみる

Apache Geode に gfsh というコマンドラインツール付属してますが、ドキュメントによると以下のようなイメージJSON 形式でのデータ投入ができるようなんですよね。

put --key=1 --value=('name':'quitada','title':'Inchiki Developer','age':44) --region=/MyRegion

JSONフォーマット使用する、ダブルクォートとか波括弧は gfsh のコマンドラインでは別の意味もつ記号なんで、代わりにシングルクォートと括弧に置き換えてますが、ようするに以下の JSON 形式データApache Geode に作ってあるであろう MyRegion というリージョンに対して "1" というキーに対するバリューとして投入するイメージです。

{
  "name":"quitada",
  "title":"Inchiki Developer",
  "age":44
}

キーにもバリュー同様、JSON 形式指定することできますが、まー、普通キー・バリューストア系のデータベースキーに複雑な構造指定することはないでしょう。

ただ、上述の例だと String 型の文字列としてリージョンに入ってしまい、クエリーとかもナイスにできないのです。ドキュメントに詳しく書いてないのですが、どうやら --value-classデータマッピングを行う対象ドメインクラス名を指定すると、対象ドメインクラスのフィールド変数指定した値を割り当てドメインオブジェクトを生成、リージョンに格納してくれるようです。そうすると、表向き JSON 形式データを取り扱い、Java オブジェクトとして扱うことで Apache Geode のクエリー機能とかも使えるようになります

例えば、上述の例だと以下のように、Javaドメインクラス記述ます。そして、コンパイルしてキャッシュサーバークラスパスに入れます(あるいは、jar でかためて gfsh deploy コマンドサーバー配備)。

package quitada;

/**
 * Created by quitada on 17/05/20.
 */
public class MyData {
    private String name = null;
    private String title = null;
    private Integer age;

    public MyData(){}

    public MyData(String name, String title, Integer age){
        this.name = name;
        this.title = title;
        this.age = age;
    }

    public String getName(){
        return this.name;
    }

    public String getTitle(){
        return this.title;
    }

    public Integer getAge(){
        return this.age;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String toString() {
        return new String("[MyData(name = " + name + "/title = " + title+"/age = " + age.toString() + ")]");
    }
}

で、以下のコマンドを実行すると、フィールド変数 name に quitada、title に Inchiki Developer、age に 44 と代入してリージョンに投入してくれるわけです。

put --key=1 --value=('name':'quitada','title':'Inchiki Developer','age':44) --region=/MyRegion --value-class=quitada.MyData

ドキュメントに詳しく書いてなくて、ソースコードよくみてないのでよくわからないのですが、配列とかネストした JSON 形式データからドメインオブジェクトへのマッピングは無理っぽかったです。少なくとも、RDBMS のようなフラットなテーブルみたいな構造マッピングできます(値は、文字列とか数値に限定されますが)。

そうなってくると、クライアント Java アプリケーションからJSON 形式前提でデータの出し入れとかクエリーをしたくなりますApache Geode では、org.apache.geode.pdx.JSONFormatter というクラスが用意されていて、JSON 文字列から Apache Geode に格納するための Java オブジェクト、あるいはその逆の変換が可能です。それを使ってやりましょう。

せっかくなんで、gfsh で一通りの環境を作ってみましょうか。

まずはロケーターとサーバー x2 を起動しますサーバー x1 でももっと多くでもどうでもいいんですが、この例では Partitioned リージョン使うのでなんとなく)。gfsh を使って起動できますが、それは割愛ますドキュメントみましょう。

次に、クライアントアプリケーションで JSONFormatter を使うということは、対象リージョンは PdxInstance でオブジェクトを扱うことが前提となるので PDX の設定にて --read-serialized=true、また上述の例ででてきた quitada.MyData というクラスを PDX による自動シリアライズ対象にするため --auto-serializable-classes も設定します。以下、gfsh コマンドインタラクティブモードからコマンド実行例です(リージョンデータと PDX メタデータ永続化してあります)。

create disk-store --name=pdx --dir=pdx
configure pdx --read-serialized=true --disk-store=pdx --auto-serializable-classes=quitada.*
create region --name=MyRegion --type=PARTITION_REDUNDANT_PERSISTENT

#ちなみに、上述の MyData クラスですが、シリアライズする必要がありますが、implements Serializable とかつけてません。PDX のオートシリアライザー(?)が自動的によろしくやってくれます

#ちなみに、configure pdx コマンドの設定内容は、起動中のサーバーには反映されないようなので、上述のコマンドラインにて PDX やリージョン設定したら、サーバー再起動して configure pdx コマンドの設定内容を反映させる必要があるようです。gfsh からキャッシュリージョンの設定内容はロケーターの方に永続化され、サーバー再起動時にはその設定内容を読み込みます

それでもって、上述の --value-class=quitada.MyData を付与した put コマンドを実行し、get コマンドを実行すると値が取得できるのがわかります。以下、実行例です。

gfsh>get --key=1 --region=/MyRegion
Result      : true
Key Class   : java.lang.String
Key         : 1
Value Class : org.apache.geode.pdx.internal.PdxInstanceImpl

 name   |       title       | age
------- | ----------------- | ---
quitada | Inchiki Developer | 44

read-serialized=true 設定なので、バリュークラスが実際には PdxInstanceImpl となっていることがわかります

クエリーもできますよー。以下、実行例です。

gfsh>query --query="select * from /MyRegion mr where mr.name='quitada'"

Result     : true
startCount : 0
endCount   : 20
Rows       : 1

 name   |       title       | age
------- | ----------------- | ---
quitada | Inchiki Developer | 44

クライアント Java アプリケーションからJSON 形式にてデータの出し入れができます。以下、コード抜粋です。

ClientCache ccache = new ClientCacheFactory()
    .set("cache-xml-file", "./xml/cache-client.xml")
    .set("log-level","config")
    .create();
Region<String, PdxInstance> myRegion = ccache.getRegion("MyRegion");

String key = "1";

// JSON 形式でデータ投入
myRegion.put(key,JSONFormatter.fromJSON("{\"name\":\"quitada\",\"title\":\"Inchiki Developer\",\"age\":44}"));

// PdxInstance オブジェクトを JSON 形式に変換・出力
System.out.println("get json string (key=" + key + ")=\n" + JSONFormatter.toJSON(myRegion.get(key)));

read-serialized=true 設定なので、get をすると必ず PdxInstance 型のオブジェクトがかえってきますJava アプリケーション内でデータを扱う場合は、わざわざ返り値を JSON 形式に戻すことはないと思うので、かえってきた PdxInstance 型オブジェクトから直接値を取り出すことになります。なので、フィールド変数の値を取り出すだけだったら、gfsh から JSONデータを投入して値をオブジェクトマッピングするため作成した quitada.MyData クラスはいらないんですね。PdxInstance の使い方について詳しくはドキュメント参照してみてください。

2017-04-04 今日の技術的活動

[] Apache Geode個別JMX マネージャーを起動する Java API

Apache Geode分散システム管理とか稼働状況監視のため、デフォルトでは一番最初に起動したロケーターが JMX マネージャーになります。

で、JMX マネージャーになっているロケーターがダウンしてしまうと、自動的に他のロケーターとかが JMX マネージャーになるのかと思いきや、ならないんですねー。ぐはぁ。つまり、JMX マネージャーがいない状態が続くわけで(ダウンしたロケーターを再起動したら、またそれが JMX マネージャーになりますが)。

JMX マネージャーがいない状態で、稼働中ロケーターのどれかを JMX マネージャーに任命するには、対象ロケーターに gfsh connect コマンド接続してやればよいようです。gfsh connect コマンドは、本来分散システム接続するコマンドですが、副作用として、対象分散システムJMX マネージャーがいなかったら接続ロケーターを JMX マネージャーにするようで。で、ふとこの "副作用" だけを実行する Java API とかないかなーと思って、Javadoc みたけどなくて、gfsh connect 周りのソースコードみたら JmxManagerLocatorRequest.send() が副作用みたいです。

特にキャッシュとか生成する必要もなく、以下のように JmxManagerLocatorRequest とかをインポートした普通Java プログラムから呼び出して、副作用享受できるようです。

package quitada;

import org.apache.geode.management.internal.JmxManagerLocatorRequest;
import org.apache.geode.management.internal.JmxManagerLocatorResponse;

import java.io.IOException;

/**
 * Created by quitada on 2017/04/04.
 */
public class GeodeJMXConnectionRequestTest {
    public final static String locatorHost = "192.168.1.21";
    public final static int locatorPort = 55221;
    public final static int msTimeout = 100000;
    
    public static void main(String[] args) {
        try {
            JmxManagerLocatorResponse response
                = JmxManagerLocatorRequest.send(locatorHost, locatorPort, msTimeout);
            System.out.println("The JMX Manager is running here: " + response.getHost()
                + " -> JMX Manager port=" + response.getPort());
        } catch (IOException ioe) {
            System.err.println("Can't connect to the target locator: " + locatorHost
                + "[" + locatorPort + "]");
            ioe.printStackTrace();
        }
    }
}

2017-02-14 今日のブログエントリー

2017-01-16 今日の IT 技術アウトプット

[] CLion を使いこなすには CMake を多少勉強しないとねという話

Java で何か開発するときには、JetBrains 社の IntelliJ IDEA 使っているのですが、死語賭でたまに C++ で何か作ることもありまして、以前は Eclipse CDT 使っていたんですけど、JetBrainsC/C++ IDE として CLion という IDEリリースしたんでそちらに乗り換えました。

同じ会社がだしているので、CLionIntelliJ IDEA と同じようなルックアンドフィールで、いわば "IntelliC" といったところで、IntelliJ IDEA比較的使い慣れている私としては、非常にとっつきやすいです。

IDE 使って C や C++ で何か作ってビルドして動作確認する際、悩ましいのはコンパイラ引数とか、リンカースイッチをどう設定するかだと思ってますVisual StudioEclipse CDT だと、コンパイラ引数リンカースイッチ設定項目一覧みたいな設定ウィンドウをだして、一つ一つばらばらと色々なところに設定していきますが、ま、お世辞にも使いやすいとはいえないですね。むしろ、コマンドライン引数スイッチを羅列した方がよっぽど設定しやすい。

と、CLion では私の気持ちを汲んでくれた(?)のか知りませんが、コンパイラ引数リンカースイッチをばらばらと所定の箇所に無駄GUI で設定することなく、バックエンドビルドシステムである CMake の CMakeLists.txt ファイルそのまま編集して設定するという極めてシンプルかつ、設定内容が 1 つの場所に集約されていて設定しやすくなってます。他方、CMake 自体の設定項目を知っている必要があり、本ブログエントリーも CMake を多少勉強しないとね、ということで…。

ではさて、死語賭でよく使う GemFire の Native Client という C++ モジュールを使う C++ アプリケーションビルドテスト環境CLion 上で作ってみたので、メモ書きします。以下のドキュメントの設定を CLion でやってみるというイメージです。

Developing C++ Programs on Linux

環境変数の設定

CLionメニューから、File > Settings...(Ctrl + Alt + s でも良いです)とたどりプロジェクト設定ウィンドウを開きますさらにそのウィンドウの左ペインで、Build, Execution, Development > CMake とたどると、右ペインビルド・実行・開発関連設定画面が表示されるので、Environment の項目の右端にある [...] をクリックます。そうすると、環境変数設定画面が開くので、右上の [+] を押して項目追加、以下のように GFCPP とか設定して、[OK] を押します

f:id:quitada:20170116155535p:image

なお、こちらによると現状の CLion(quitada は、2016.3.2 で動作確認)では設定済みの環境変数を参照するため以下のような記述はできないようです。既存環境変数に追加したい場合だけでも、既存の設定内容と追加したい内容と記述する必要があるみたいです。

${GFCPP}/lib:${LD_LIBRARY_PATH}

むむぅ、これは何とかならないかな…。

コンパイラ引数リンカースイッチの設定

プロジェクト作成すると、CMakeLists.txt自動生成されるのでそちらを CLion 上で開いて直接テキスト編集ます。C++コンパイラ引数設定のため、以下の感じのを追加します

set(CMAKE_CXX_FLAGS "-D_REENTRANT -m64 -I$ENV{GFCPP}/include")

リンカースイッチは以下の感じのを追加します

set(CMAKE_EXE_LINKER_FLAGS "-Wl,-rpath,$ENV{GFCPP}/lib -L$ENV{GFCPP}/lib -lgfcppcache")

ポイントは、CMakeLists.txt では環境変数が参照できて、$ENV{[環境変数名]} と記述ます(ここでは、前手順で CLion 上で設定した環境変数 GCPP の内容を参照してます)。

2017-01-01 今年の抱負

[] 細マッチョ父さん的今年の行動指針設定

昨年に続き、同じような感じで。

その1:やりたいことを優先的にやる。

その2:やりたくないことは何も悩まずすぐやる。

その3:お金から自由になるための俺々システム構築を念頭におきつつも、再始動気持ちで。

以上

2016-12-31 年末の反省とか

[] 年末反省

2016 年 1 月 1 日に設定した、細マッチョ父さん的今年の行動指針設定反省をしたいと思います。

その1:やりたいことを優先的にやる。

1 年を通して特定問題を抱えていて、やりたいこともやる気がでない、そんな一年でした。ぐはぁ。

その2:やりたくないことは何も悩まずすぐやる。

悩むことが多かったなー。やりたいくないことが多かったなー。ぐはぁ。だめだー。

その3:お金から自由になるための俺々システム構築を念頭に行動。

お金継続して困り果ててしまって、2016 年には確実には解消され、システム構築ならず。引き続き構築したい…。

 *  *  *

来年酉年、一番鶏のようにいち早く行動を起こせるそういう人になりたい。

2016-12-18 今日までの遍歴

[] 「官足法ウォークマット II」を踏み始めて 10 ヶ月たちます

8 年前にパナソニックのフットマッサージャーを入手してからなんちゃって足裏マッサージ愛好家でして(どうでもいいですが)、ただ色々と物足りなくなってきまして、芸人とかの罰ゲームとかで走らされて超痛そうな、あれに手をだそうかと思ったのが、今年の 3 月でして。ほら、あれです。

色々ネットで評判を調べて、モノとしては「官足法ウォークマット II」が良いかなと思い、購入して始めたのが今年の 3/20 でした。

説明書によると、まず目標として、この上で 20 分間足踏みできるようにとのことでしたが、開始当初は超痛くて数秒も立っていられず。

なんとか継続して最近は、20 分以上でも何分でも足踏みできて、超痛い部位も無くて(左足小指の付け根と土踏まずはやや痛いけど)、余裕なのであります芸人とかがやっている罰ゲームで余裕ぶっこいて走ってみてー!

で、あらためて件の Panasonic フットマッサージャーを最強でやってみましたが、何も感じない…。もっと刺激がほしい。

さて「官足法ウォークマット II」をやり続けたことによる効果ですが、何か劇的に健康になったという感じはないですが、個人的には以下のような印象。

  • 足とか手にあったイボが消えた
  • 足の裏が超柔らかくなった
  • 長年悩まされている肩こりが軽減されたような気がするー

個人的には、中性脂肪値が極端に高いので、それに対する効果を期待していたのですが、どちらかというと同時並行的に行っているトライコアという薬の服用で中性脂肪値が下がっていると思われ、ウォークマットの効果は?です。

今後はウォークマット上でランダムに足踏みするだけでなく、説明書にあるルーチンを導入してみようかな…。

2016-11-03 今日のシェイクダウン

[] スリッポンシェイクダウン

ネットで注文して昨日届いた VANS スリッポン本日シェイクダウンです。

f:id:quitada:20161103152345j:image

型番的なものは、Classic Slip-On (Multi Stripes) BI/RdtOrcd VN-0ZMRFIB です。

まー、しめつけがきついんですけど履きやすくていいです。