HHKBにハマる

PFU Happy Hacking Keyboard (HHKB) にハマった

元々は、子供が寝ている部屋でパソコンを使うために買った静音キーボード。
希望通りに静音になり、また上質なキータッチが心地よい。
HHKB Pro JP Type-S

HHKBが気に入り、ブログを検索していて気になってしまった
HHKB Pro 2 Type-S

USB Type-C や スマホ・タブレットでも使いたくなってしまった
HHKB Pro 2 BT

よく使うPC4台。HHKB3台。じゃあもう一台購入、ベーシックなHHKB。
HHKB Pro 2

皆HHKBなのに、それぞれ個性がある。
まんべんなく使っていこう。

LogicoolとMicrosftのキーボードは処分しなくては。

同じタグの記事
同じカテゴリの記事

HHKB Professional 2

PFU Happy Hacking Keyboard Professional 2

私が普段利用するパソコンは用途を分けて4台。今まで買ったHHKBは3台。
だったら、もう一つ買ってしまおう。
Happy Hacking Keyboard Professional 2。

最後の最後に普通のHHKBを買ってみた。
やはりタイプ感はBTと同じ軽いタッチ。

BTとの違いはコードがワイヤレスかワイヤードか。
あとはあまり変わらない。BTの方が咬み合わせが少しタイトかなと思う程度。

ワイヤードにはワイヤードの利点もあった。
BTは気を抜くと、電源が切れていることがある。
電源スイッチを1~2秒押せば、すぐに復旧するのだけれど、
ワイヤードは、いくらでも待ち続けてくれる。

最近はあまり使わなくなった、古いMacBookで使うことにしよう。

Pro2 BTとPro2の比較。

有線か無線かの違いのみ。有線の後ろにはUSBポートがあり、無線の後ろには電池ボックスがある。

1年で4台も買ってしまったHHKB。今年はキーボードだけで10万円以上使ってしまった。
次、キーボードを買うのは何年後になるのだろうか。

同じタグの記事
同じカテゴリの記事

HHKB Professional 2 BT

PFU Happy Hacking Keyboard Professional 2 BT

USキーボードにも慣れてきて、なんでもかんでもHHKBに置き換えたくなってしまった。
Type-Sを買う時、同じページで悩んだHHKB BTがあった。
古いレビューを見ると、「繋がらない」「チャタリングする」など、マイナスなレビューが多かった。
これを見て、当初の目的通り静音設計のType-Sを買ったのだが、最近のレビューを見直すと、特に問題ないようだ。
では、HHKB BTを手にすべきだろう。
ということで、買ってしまったHHKB BT。
繋がらないなんてことは無いし、チャタリングもしない。全く問題なく使えるHHKB BT。

しかし、私としては問題があるかもしれない。
というのは、音が大きい。
Type-Sのストっという静かなタイプ音ではなく、カチャカチャした感じがする。
押し込んだときより、戻ってきた時にカチャっという。

連続して数十秒タイプするとこれが結構気になる。子供が寝ているところでは使えないし、
モバイル用のBTだが、喫茶店でも使いにくい。
USB Type-C なmakbookを家で使う時に利用しようと思う。

このキーボードは、カチャカチャ音がするがキーはとても軽い。
Type-SもBTも同じ押し込み重さのはずだが、Type-SよりBTの方がキーの咬み合わせが緩いためか、
多少斜めにタイプしても入っていくのだと思う。
それで軽く感じるのではないかと。
Type-SよりBTの方が高速タイピングできる気がする。

誰もいない時に、カチャカチャ音を立てて高速タイピングを楽しもう。

以前に購入したType-SとBTの比較。

BTは無刻印を選んだので印象が異なる。

BTの背面は電池ボックスがあるため、Pro2に付いているUSBポートはない。

同じタグの記事
同じカテゴリの記事

HHKB Professional 2 Type-S

PFU Happy Hacking Keyboard Professional 2 Type-S

以前、Happy Hacking Keyboard Professional JP Type-Sを購入したと書いたが、
Happy Hacking Keyboard Professional 2 Type-Sも購入してしまった。
日本語配列で十分満足していたのだが、ネットの記事を見ているとUS配列こそHHKBのような気がしたからだ。

アルファベットと数字は問題なく入力できた。@と*の位置は昔から知っていたので、あまり戸惑うこと無く入力できた。

カーソルキーは・・・、下方向は慣れた。
上方向はいまでも間違える。
慣れようとしていた時、ページダウンが押しやすいところにあることに気がついた。
ページダウン位置は、もう覚えた。ここは便利。ウェブページをなんとなく読むときは、この位置は絶妙だ。

記号はまだ難しい。(){}[]は横ペアになっているとうことで覚えられた。
~^=などの記号はなかなか見つからない。正規表現が書けなくなった。

Deleteが近くなったのは好感が持てる。

もう何年もキー配列で悩んだことがなかったが、このキーボードは改めてキーの位置を考えさせられる。
これはこれで良い刺激だ。

メインのクラムシェルなmacbookでは、このキーボードを使うことにしよう。
JPはWindows専用に。WindowsでUS配列は使いにくそうなので。

今回買ったProfessional 2 Type-SとProfessional JP Type-Sをならべた写真。

Enterキー周りが大きく異なる。

Pro2は背面にUSBポートがある。私は普段、ここに無線マウスの無線子機を挿している。

斜め手前から見たキー配列は、JPとPro2でそれほど差はない。

同じタグの記事
同じカテゴリの記事

Apple Magic Keyboard

Apple Magic Keyboard

富士通のキーボードが大好きだった私だが、モバイルPCをMacBook AirにしてからMacのキーボードがすっかり気にってしまった。
こうなってくると、全てのキーボードをMacBookと同じにしたくなってしまった。
そこで買ったのがApple Magic Keyboard。Apple製品なので普通にBluetoothが使える。なのでWindowsのノートPCにも繋がるし、スマホやタブレットにも繋がる。
なんでもMacBookのようにキータイプできる。これは素晴らしいことだと思う。

この頃のキーボードは今のMacBookやMacBook Proと違い、押し込み深さがそこそこある。
なので、しっかり打った感じがあるし、とても気持ちが良い。
また、薄いのでカバンに入れて持ち歩くときも邪魔にならない。どこかの隙間に入れることができる。また単三乾電池で動作する為、一度新品の電池を入れると長い間使い続けることができる。

好みが分かれるキーボードかもしれないが、私はキーがツヤツヤになるまで使い続けた。

同じタグの記事
同じカテゴリの記事

jconsoleでリモート接続するために

jconsoleでリモート接続するために

java作成された常駐アプリが、元気に動いているかどうか確認したい場合がある。
jconsoleで接続すれば、グラフィカルにCUPやメモリの状況を確認できる。
サーバで動くアプリの場合、サーバのGUIに接続できれば、特に準備などなしにjconsoleで接続できるが、
サーバのGUIに接続できない場合、クライアントのjconsoleから接続する必要がある。
そうしたいときはjavaの常駐アプリを起動する時に引数を与えておく必要がある。

1
java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false test.JavaProgram

このように、test.JavaProgramを起動すると、ローカルのjconsoleからport:12345で接続できるようになる。

また、常駐アプリがtomcatの場合、setenv.shに下記の設定を追加すれば良い。

1
export CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"

なお、setenv.shは$CATALINE_HOME/binに作成すれば良い。

また、$CATALINE_HOMEはtomcatを解凍したディレクトリの事(中にbinやconf,webappsが入っているディレクトリ)。

ヒープの利用状況、GC実行状況が見えたり、CPU使用率、スレッド数など、活動状況を確認できる。
また、MBeansに接続できるので、オリジナルのアプリであれば、外部インターフェースとしても利用できる。

サーバがLinuxでssh接続できるのであれば、ssh -X で接続して、サーバのXを転送する方法もある。
しかし、Xクライアントによっては、画面は見えるけどMBeanの引数を設定できなかったりする。

同じタグの記事
同じカテゴリの記事

Template Engine Mustache を使う

Template Engine Mustache を使う

mustacheはテンプレートエンジン。
様々な言語で使えるように準備されている。
JavaScript,Python,PHP,Perl,Java…
私が普段利用する言語では一通り利用できる。

なので、一通り利用してみようと考えた。
しかし、実際に使ってみると、言語によっては準備が面倒だったりした。

ネットワークが自由に使える環境であれば、どの言語でも簡単にセットアップできるが、
ネットワークが限られている職場の環境では、モジュール一つコピーして利用するということはできなかった。
上記の一覧の中で、唯一できたのはJavaScript。

mustache.jsを使う

とりあえず、下記のサンプルコードを。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<!DOCTYPE>
<html>

<head>
    <meta charset="utf-8">
    <title>mustache test</title>
</head>

<body>
    <div id="target">Loading...</div>
    <script id="template" type="x-tmpl-mustache">
        * Hello {{name}}!<br>
        # 2 * 3 = {{calc}}<br>
        {{#mapList}}
            * {{firstName}} {{lastName}}<br>
        {{/mapList}}
        {{#simpleList}}
            - {{.}}<br>
        {{/simpleList}}
    </script>

    <script src="mustache.js"></script>
    <script>
        window.setTimeout(function() {
            var template = document.getElementById('template').innerHTML;
            var data = {
                name: "Luke",
                calc: function() {
                    return 2 * 3;
                },
                simpleList: [
                    "one","two","three"
                ],
                mapList: [
                    {firstName: "fname", lastName: "lname"},
                    {firstName: "fname2", lastName: "lname2"}
                ]
            };
            var rendered = Mustache.render(template, data);
            document.getElementById('target').innerHTML = rendered;
        }, 1500);
    </script>
</body>

</html>

テンプレートとデータを準備し、下記の処理でテンプレートを展開する。

1
var rendared = Mustache.render(template, date);

簡単に利用できた。

他の言語でも、環境さえ整えることができれば同じように使えるので、
覚えておいてもいいかもしれない。

同じタグの記事
同じカテゴリの記事

perlワンライナー

perl ワンライナー

大きなファイルが存在する。この大きなファイルの中の特定の文字列を置き換えたい。
perl ワンライナーの出番。

1
$ perl -pe 's/xxx/X01/g;s/yyy/X02/g' in_file > out_file

これでxxxはX01に、yyyはX02に置換される。
本当は、こんな単純な条件で置換してしまうと、余計なところまで置換されそうなので、もう少し悩む必要がある。

ちなみに、perlのオプションの-eが直後のコマンドを実行するということ。-pはファイルを読み込んで出力すること。

ここまで簡単な編集なら、awkでもできる。

1
$ awk '{gsub("xxx", "X01");gsub("yyy", "X02");print}' in_file | tee out_file

gsubが文字列置換。検索対象文字列には正規表現が利用できる。
subという関数もあるが、こちらは最初のマッチのみを置換する。
gsubは3つ目の引数に置換対象の文字列をしていできるが、省略すると$0が入る。
printも引数を省略すると$0が入るので、行ごとに処理し、置換が終わったら出力される。

teeは標準入力をファイルに出力するコマンド。 > out_fileでも良いとは思うが、一応コマンドを使っておく。

同じタグの記事
同じカテゴリの記事

python3で数値のlistを文字列のlistに変換

python3で数値のlistを文字列のlistに変換

数値のlistを作って、画面に表示させたい時、’,’.join(num_list)が使えない。
mapを噛まlistせて、中身をstrに変換してから呼び出す。

1
2
num_list = [1, 3, 5, 7, 9]
print(",".join(map(str, num_list)))

下記の通り表示される。

1
1,2,3,4,5

なお、本当にデバッグ的な出力であれば、リストに変換することで表示できる。

1
2
num_list = [1, 3, 5, 7, 9]
print(list(map(str, num_list)))

下記の通り表示される。

1
['1', '3', '5', '7', '9']
同じタグの記事
同じカテゴリの記事

ORACLEのMERGE文 補足

ORACLEのMERGE文 補足

WHEN MATCHED THENとWHEN NOT MATCHED THENの順番は、どちらを先に書いても良い。

存在しないときはインサート、存在したら更新というイメージであれば、
WHEN NOT MATCHED THEN、WHEN MATCHED THENの順番で書けば良い。

WHEN MATCHED THENまたはWHEN NOT MATCHED THENのどちらかだけを書いても良い。

WHEN NOT MATCHED THENのみを使うことで、レコードが存在しなかったらインサート、存在した場合は何もしないというのが書ける。
少し乱暴な気がするけど、ちょっとしたツールであればこれで十分だと思う。

WHEN MATCHED THENのみ使うのは、なかなか想定できない。
UPDATE文はもともとから打ちしても、更新レコード数が0になるだけだし。

同じタグの記事
同じカテゴリの記事