Hatena::ブログ(Diary)

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

id:quitada
Pivotalのスコット・ヤラ氏に聞いた:Pivotal Cloud Foundry 2.0、「Kubernetesに負けた」わけではない理由http://www.atmarkit.co.jp/ait/articles/1803/15/news037.html
id:quitada
大きな組織における ボトムアップに変革を起こす方法https://www.meetup.com/CodeChrysalis/events/246562481/
id:quitada
PivotalジャパンのFBページが出来ました(*´ω`*)https://www.facebook.com/pivotaljapan/

2018-06-05 今日の突撃

[] 「HHKB ユーザーミートアップ vol.2 with 東プレ」に潜入してきた

前回の「HHKB 20周年記念ユーザーミートアップ」をライブネット配信で観て、思いのほか面白かったので、今回二回目となる「HHKB ユーザーミートアップ vol.2 with 東プレ」にボッチだけど現場に潜入してみた。

f:id:quitada:20180606002537j:image

まずは、HHKB Professional HG JAPAN、いわゆる漆塗りキートップアルミ削り出し筐体モデルを拝み倒す。

f:id:quitada:20180606002538j:image

この写真左上に見切れているノーマル HG モデル(漆塗りじゃない方)は所有しているのですが、漆塗りな Japan は初めて見ました。そんでもって、気になっていたことを確認。私の所有する HG の裏天板に、シリアルナンバー記載されており、私のは「000002」。どうやら二号機のようなんですね。このシリアルナンバーは、Japan とそうでないモデルとで連番なのは、それとも、それぞれのモデルで異なるシリアルナンバーなのか?

はい、展示されていた Japan モデルシリアルナンバー確認したら、「C00..01」みたいな。「C」から始まるシリアルナンバーでした。展示されていたのは、なんらかの初号機であることは間違いないんでしょうが、少なくとも Japan シリーズの初号機でしょうね。初号機は PFU さんで保有しているようなので、市場に出回っている Japan じゃないモデル実質的な初号機は、私のだろうか、という気が?ってか、これ、他に持っている人いるのか?

ちなみに、展示されていた Japan じゃない方シリアルナンバーは「000095」で、製造年月も私のよりもやや新しめでした。確か、両 HG モデルそれぞれ 100 台までの限定生産だったような気がするので、少なくともノーマル HG は 95 台は生産されたってことかな…?

さて、ミートアップ自体東プレと共催みたいな感じで、東プレキーボード製品 REALFORCE R2ベースとした、PFU の新商品本日に発表・発売となった「REALFORCE R2 テンキーレス - PFU Limited Edition」の紹介を中心としたものでした。

特に HHKB Pro の静電容量無接点方式キースイッチ技術東プレのものなので、ミートアップ自体の共催は不思議ではないけど、なんで PFUREALFORCE 売るの?と思っていたら、その理由の一つが中国市場をにらんでとのことで。前回のミートアップで、PFU 中国支社の人がお話ししてたんですが、その時正直「はぁっ?」と思ったんですよね。中国で、PFU のあずかり知らぬところで、HHKB Pro が草の根的に売れてたらしく、後追いで中国でも HHKB Pro を正式販売したようなこと言ってましたが、中国サイドから要望として「Windows 系のデベロッパーが多いので、Windowsキーボード配列にしてほしい。Ctrl キー位置が A の横じゃなくて、下の方にあるやつがほしい。」みたいなこと言ってまして。いやいやいや、それ HHKB のコンセプト半分否定してますやん?と正直思ったのですが、その答えが REALFORCE S2PFU Limited Edition みたいで。

つまり、中国の方は、高級キーボード嗜好という観点で、HHKB Pro がほしかったのじゃなくて、静電容量無接点方式キースイッチ採用した Winodwsキーボードがほしかったのですね?

quitada の場合、だれも聞いてませんが、高級キーボード嗜好という観点では、FILCOメカニカルキーボードから入って怪社で使っていたら「キータッチ音うるせー!」と苦情がきたので、REALFORCE へと移行、「静電容量無接点方式スイッチ打鍵感きもちぃー」と思っていたら、同キースイッチ採用のコンパクトな HHKB Pro がでてきたのでテンキーイラネな私は、ほしいなぁと思っていて、墨がでたと同時に購入、以降、HG にしたり Type-S にしたり、無刻印に走りーの BT といったキーボード遍歴です。中国ももしかしたら、REALFORCE 熱がおさまったら、コンパクトキーボードのほしい層があらわれてまた HHKB 回帰みたいなことが起こるのかなとか妄想

さて次は、パネルディスカッションからの懇親会&ライトニングトークです。感じたことをつれづれなるままに…。

さて、参加者特典として、REALFORCE キートップストラップいただきました。以前、同じような HHKB キートップストラップをもらっていたのを思い出し、自宅に帰宅してから、それらからキートップを抜き去って、当方HG に装着して、今の私の HG はこんな感じです。

f:id:quitada:20180606013151j:image

2018-04-08 明日のシェイクダウン予定

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

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

f:id:quitada:20180408172710j:image

型番的なものは、SLIP-ON 98 REISSU (50TH) STV/ALOHA/BROWN VN0A2XS4JVG です。

2016 年をもって VANS ブランド 50 周年記念だったらしく、その記念モデルのようです。

2018-01-03 ひととおりの活動におけるまとめ

[] HHKB Professional BT デュアルキーボード構成 on macOS - オレの使用

なんかデュアルキーボード話題になっていたので、昨年末から私も、macOS にて HHKB Professional BT デュアルキーボード構成で死後賭してます。こんな感じですよ。

f:id:quitada:20171227182646j:image

HHKB Professional BTBluetooth キーボードなんで、1 台の PC に 2 台のキーボードペアリングすれば基本的に設定完了ですが、macOS場合ちょっと一手間必要です。というのは、macOS場合キーボードをまたいだキーの同時押しを認識しないようなんで。例えば、文字入力英語日本語切り替えに、私は Option + Command + Space を使っているのですが、デュアルキーボード構成場合だと左手キーボードで Option と Command を押して、右手用のキーボードで Space 押すとか普通にやりたいんですね。でも macOS場合は、左手用で Option と Command が同時押しされていて、右手用で Space が押されているなぁ、と認識してしまって、3 つのキーが同時押しされた!と認識されないんですよね、余計なお世話なんですが。ちなみに、Windows問題なくキーボードまたぎのキーの同時押しを認識ます

ググったらでてきますが、macOSキーボードまたぎのキー同時押しをさせるため、Karabiner-Elements というソフトウェアインストールしてやります特に追加設定も必要なくて、インストールすればよいです。

ただ、Karabiner-Elementsインストールしてもどうしてもキーボードまたぎのキー同時押し対応不可なやつが、HHKB にあります。ずばり、Fn キーです。多くの場合は省スペース化のため一部の専用キー排除されていてかわりに、Fn キーと同時押しすることで排除されたキーの代わりにしてますHHKB も省スペース化のため Fn キーが導入されています。例えば、ファンクションキー。最新の MacBook ではそもそもファンクションキー自体がなくなっているのはさておいて、HHKB場合Fn数字キーを同時押しすることで、F1F2F3...に対応してます。あとは、カーソルキーとか(Fn + / で↓とか)。

Fn キーは、本来キーボードにはないキーで、Fn キー単独で押しただけではキーコードPC送信されず、対応しているキーを同時押しすることではじめてキーコード送信されるんですね。なので、例えば、左手キーボードで「1」を押して、右手キーボードで「Fn」を押しても、「F1」にはならいんですよ。なぜなら、左手キーボードは「1」が押されてます!というキーコードを送るけど、右手キーボードは「Fnしか押されてないので何もキーコードを送らず、PC 的には「あ、1 が押されてるね」としか認識できなんですよね。これでは Karabiner-Elementsインストールしても、Fn キーが押されていることがわからないので、キーボードまたぎのキー同時押しは無理ですよね。

HHKB Professional BT場合、標準設定では Fn キーは Enter キーの下の一番右端にあるので、デュアルキーボード構成にすると右手キーボードで押すことになりますが、例えば F1入力したいとき右手キーボード内でキー同時押しを完結させる必要があって、でも右手だけで 「1」と「Fn」の同時押しは指が届かなくて無理なんですよね。F1F6 くらいは諦めろってこと?

PFU Happy Hacking Keyboard Professional BT 日本語配列/白 PD-KB620W

PFU Happy Hacking Keyboard Professional BT 日本語配列/白 PD-KB620W

対策としては以下の 3 つを考えました。

なんだかなー。

それはさておき、デュアルキーボード使用感ですが、ホームポジションにしっかりと指を置いた上でのタイピングたいままで以上に求められる感じです。慣れれば姿勢良くキー入力できるので、肩こりが解消されることにちょっと期待しております。私の場合は、特に右手ホームポジションがずれてしまうことが多くて、正確に左か右にキー 1 個分ずれた状態文字入力されてしまうことが多くて今のところやや大変。

2018-01-01 今年の抱負

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

同じようなことをしていてもアレなんで、昨年とは若干方針変更していこう。

その1:知識経験インプットの機会を優先する。

その2:知識経験アウトプット積極的に行う。

その3:知識経験を活かして、お金から自由になるための俺々システム構築を検討・実行へと積極的に行う。

以上

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

[] 年末反省

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

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

年の後半が特に無気力状態でしたー。ずっと、やりたいことを見つける探ししてた感じ…。

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

すぐやるときもあれば、だらだらと先延ばししたり、むらがありました。やりたいこととやりたくないことの区別がついてなかった気配というか、「これはやりたいことだ!」といいきかせていたら、なんだかやりたくなくなってきたとか。

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

はい、再始動してお金はかなり貯まるようになりましたが、俺々システムは壊滅しました。

 *  *  *

来年戌年ワンダフル人間になりたいです。

2017-12-17 今日のブランニュー体験

[] 居間シーリングライトLED

電球使った照明の LED 化は、比較的早い段階から進めていたのですが、蛍光灯系の照明は代替製品がでてくるのが電球に比べて後発で、トータルコスト的に見ても蛍光灯LED 照明に変更する積極的理由がなかったので未実施でしたが、本日実施しましたという個人的な報告です。

さてさておとといあたりから居間シーリングライトKOIZUMI の型番 GHN 535 381)の調子がおかしくなりました。スイッチいれたら 1 秒くらい点灯するのに、その後消えてしまう…。丸形の蛍光灯が 2 発(32 型/40 型)ついてるので、やや黒ずんでいた方を取り外したら照明がつきました!ということで、昨日蛍光灯を取り替えようと買ってきました(パルックプレミア FCL3240ECWH2KF)。

さて取り替えようと思ったら、生き残っていた方の蛍光灯も点灯しなくなりました。新しい蛍光灯に取り替えても点灯せず…。点灯する時に本体から鳴る「ピッ」という電子音もしなくなったので、あらら、本体故障ですか、ぐはー。本体製造年月が 2003 年 3 月なんで、あきらかに耐用年数を超えて使ってましたね。長い間ありがとうございます。まー、こんだけもったら、家電メーカーとか儲からないよな…。

ということで、昨日買ってきた蛍光灯は別の部屋の蛍光灯がきれたときのために塩漬けし、今こそ(居間こそ?)LED 化の時だ!ということで、本日 LED シーリングライトを買ってきたよ。

グループ各社がゴタゴタの極みですが、LED 照明といえば東芝、あと価格がお手頃(12,000 円ほど)なんで、東芝ライテックの LEDH0806A-LC を買いました。

なお、本商品(というか LED シーリングライトというカテゴリー全体的に?)は蛍光灯シーリングライトのように、発光部分が交換可能にはなってないです。蛍光灯照明器具本体より耐用年数が短いので、交換できるようになっているけど、LED になると照明器具本体耐用年数が同じになったので一体化してあって、壊れたらまるごと交換みたいな感じですかね。

わーい、明るいよ!♪あっかるいーい、ナッショ…。おっと、別メーカーの古い歌でした。

どうでもいいですが、シーリングライトの取り付け部分のデファクトスタンダードなやつは「カチットF」という名前なんですね。

2017-11-14 今日の時代の終わり

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 の使い方について詳しくはドキュメント参照してみてください。