Akira's Blog

神奈川在住のITエンジニアの雑記です。主にプログラミング(Perl, Java etc)やネットワーク技術について、ちょっとずつ書いていきます。

Javaの内部の文字コード

Javaの内部の文字コードは UTF-16 である。なので、Javaのプログラムが外部から読み込んだ SJISやUTF-8などの文字列は、JavaのStringオブジェクトになる際に (内部コードである) UTF-16 に変換される。例えば、以下のサンプルプログラムの通り、(外部文字列…

Javaでスレッドを作成する時の注意点

まず、Javaでスレッドを作成する基本的な方法は、以下の2つである。 Threadクラスを継承したクラスのオブジェクトを生成して、そのオブジェクトのstart()メソッドを実行する。 Runnableインタフェースを実装したクラスのオブジェクトを生成し、それを引数と…

AutoMDI/MDI-X

以前ネットワークを構築した時、ネットワーク機器同士をLANケーブルで接続する時はクロスケーブルで、ネットワーク機器と端末機器を接続する時はストレートケーブルで接続していた。 これは、LANポートに以下の2種類があり、 MDI (Medium Dependent Interfac…

Javaのスタックトレースを解析する時のコツ

フレームワークなどを多用した大規模なJavaプログラムにおいて、エラーが起きてログにスタックトレースが出ると、その量が膨大過ぎてどうやって解析すれば良いのか困ることがある。そんな時に自分が心掛けていることを書く。 まず、アプリケーション独自の部…

ファイルの中身を16進ダンプするスクリプトをちょっとエンハンス

以前、ファイルの中身を16進ダンプで出力するperlスクリプト dumpHexStr.pl を紹介した。 akrad.hatenablog.comところが、これではファイル内に改行があった場合にそれが省かれてしまうので、改行も含めて16進ダンプするようにした。 use strict; use warnin…

メソッド間で変数をやり取りする方法

Javaでメソッド間で変数をやり取りする方法について書く。まずは一覧。 引数で渡す メンバ変数に格納して渡す static変数に格納して渡す シングルトンなクラスのオブジェクトに格納して渡す 以下、それぞれの使いどころと注意点について、少し詳しく説明する…

Japan IT Week 春 2018

「Japan IT Week 春 2018」に行ってきた。あまり時間がなかったので、ざっくりとしか回れなかったが、以下に感想を書く。 AIのエリアはかなり盛況だった。理論が難しい分野なので、具体的な例を挙げた分かりやすい説明を心掛けている会社が多かった。社長自…

IoTとM2Mの違い

最近、IoT(Internet of Things) と M2M(Machine to Machine) を良く聞くようになった。この2つの違いがあまり分かっていなかったので、ちょっと調べてみた。 ざっくり言うと、こういうことらしい。 M2M:マシン同士が通信を行い、情報収集やマシンの制御を行…

VBSの実行方法

VBS

VBSのスクリプトを実行するには WSH (Windows Script Host) を呼び出す必要がある。それには、wscript 経由で呼び出す方法と cscript 経由で呼び出す方法がある。 この2つの使い分けは、ウィンドウを出すなど対話向けの処理なら wscript 経由で、バッチ処理…

VBSから外部コマンドを呼び出す

VBS

VBS内から外部コマンドを呼び出す方法としては、Runメソッドを使う方法とExecメソッドを使う方法がある。それぞれの説明は以下の通り。 Run メソッド Exec メソッド どちらを使うべきかについては、以下のページが分かりやすい。 https://blogs.technet.micr…

MIB取得の終了について

例えばnet-snmpのsnmpwalkコマンドなど、SNMP GetNextRequestを繰り返してMIBを次々取得するアプリケーションは、どのようにしてエージェント側のMIBの終了を知ることができるのか、についてちょっと調べてみた。 これについては rfc に以下の記載がある。 W…

指定したディレクトリ配下のファイル内のタブをスペースに変換するスクリプト

指定したディレクトリ配下のファイル内のタブをスペースに変換するperlスクリプト replaceTabToSpace.pl を作成した。使い方は簡単で「perl replaceTabToSpace.pl "ディレクトリのパス"」で実行できる。例えば、ソースコード内にタブとスペースが混在してい…

VLANにIPを割り振る意味

昨日に引き続き、VLANに関するメモ。 VLANはL2の技術である。VLANを作成することによって、スイッチでブロードキャストドメインを分割することができる。 一方、VLANにはIPアドレスを割り振ることができる。(正確には、L3スイッチの持つ VLANインタフェース…

L3スイッチのVLANインタフェース

L3スイッチのVLANインタフェースについて簡単に説明する。 L3スイッチは、「L2スイッチ+内部ルータ」で構成される。この内部ルータは、L2スイッチが区切ったVLAN間のルーティングを可能にする。 VLAN間通信で内部ルータを経由する際、内部ルータの持つVLAN…

SSL/TLSの暗号スイート

SSL/TLSの設定を行っていると、 TLS_RSA_WITH_DES_CBC_SHA など、暗号スイートを示す文字列に出くわすことがある。 これは、SSL/TLSの暗号技術の組み合わせを表しているのだが、何を意味するのか分かりにくいので、ちょっと調べてみた。 上の暗号スイートを…

L2スイッチにIPアドレスを振る理由

L2スイッチは、L2層の情報(MACアドレス)を見て、フレームを適切な宛先に転送するネットワーク機器である。なので、フレーム転送の際にL3層の情報(IPアドレス)を見ることはなく、L2スイッチ自身にIPアドレスを振る必要はない。 つまり、サーバやルータのよう…

hostsファイルとDNSサーバとの優先順位

ホスト名からIPアドレスへの名前解決を行う際にOSが参照する情報として、hostsファイルとDNSサーバがある。どちらが優先されるのか、ちょっと調べてみた。 Windowsだと、hostsファイルの方がDNSサーバより優先されるようだ。 https://blogs.technet.microsof…

各行の先頭に「> 」を付けるスクリプト

各行の先頭に「> 」を付けるperlスクリプト addQuote.pl を作成した。例えば、 aaa bbb ccc ddd という文章に対して、このスクリプトを適用すると、以下のようになる。 > aaa > bbb > ccc > ddd 任意の文章に対して、引用として「> 」を付けたい場合に使用す…

キー操作だけで素早くアプリを起動する。

今日はWindows上での操作の小ネタについて書く。具体的には「ファイル名を指定して実行」を利用して、キー操作だけで素早くアプリを起動する方法について書く。 まず、以下の設定を行う。(例として sakura エディタを起動する時のものを挙げる。) アプリのシ…

指定したディレクトリ配下のファイルから改行コード LF を探し出すスクリプト

引数で指定したディレクトリ配下のファイルから改行コード LF を探し出すperlスクリプト detectLF.pl を作成した。 使い方は簡単で、「perl detectLF.pl "ディレクトリ"」を実行するだけ。 use strict; use warnings; my $dir = $ARGV[0]; if(! -d $dir) { d…

指定したディレクトリ配下のファイル名やディレクトリ名を全て表示するスクリプト

指定したディレクトリ配下のファイル名やディレクトリ名を、再帰的に全て表示するperlスクリプト printAllUnderDir.pl を作成した。 use strict; use warnings; my $dir = $ARGV[0]; if(! -d $dir) { die "Invalid argument."; } $dir =~ s|\\|/|g; getFileL…

JavaのExecutorServiceで簡単マルチスレッド

Javaでマルチスレッドなプログラムを書く場合、Java1.5から導入された ExecutorService を使うと簡単に書ける。 以下は ExecutorService を使った簡単なサンプルプログラムである。 import java.util.Date; import java.util.concurrent.Callable; import ja…

指定されたディレクトリ配下のアーカイブファイルを再帰的に展開するスクリプトを作成した。

指定されたディレクトリ配下にあるアーカイブファイルを再帰的に展開するperlスクリプト extractRecursively.pl を作成した。 使い方は簡単で、「perl extractRecursively.pl "ディレクトリ"」として実行するだけ。 use strict; use warnings; use Archive::…

Zabbixについて

OSSの運用管理ソフトZabbixについて調べる機会があったので、ここにメモしておく。 ラトビアのZabbix社が開発している。 サーバ側のフロントエンドはPHPで、バックエンドはC言語で書かれている。 DBはpostgresやMySQLなどからいろいろ選べる。 機能毎にプロ…

JP1/Baseのログ監視

JP1

JP1/Baseではログ監視ができる。ログ監視というのは、監視対象のログにある文字列が記録されたら、それをトリガーにして(JP1/IMに)イベントを上げることである。例えば、「Error!!」の文字列が監視対象のログに記録されたら、イベントを上げる等。 ここで、J…

ファイルに書かれた文字列で検索するスクリプト

ファイルAに書かれた文字列で、ファイルB内を検索するperlスクリプト(findStr.pl)を作成した。使い方は簡単で「perl findStr.pl "ファイルA" "ファイルB"」で実行する。例えば、ファイルAの中身が aaa bbb ccc となっていて、ファイルBの中身が aaa ddd eee …

vbsのソース中の連続するダブルクォート

vbs

今日はちょっとした話。 vbsで書かれたソースを読んでいると、「"""" & "test" & """"」(ダブルクォート×4)や「"""test"""」(ダブルクォート×3)など、ダブルクォートがやけに連続して書かれているコードに出会うことがある。これについてメモしておく。 vbs…

コマンドプロンプト上でのダブルクォート(")の挙動

Windowsのコマンドプロンプト上でのダブルクォート(")について、ちょっと分かりにくい挙動があったので、ここにメモしておく。 例えば、コマンドプロンプト上で、 test.bat "abc def" は問題なく実行できる。 しかし、 test.bat "abc def" < は「コマンドの…

SNMPのoctet string型のデータの中に制御文字は入り得るのか?

SNMPには文字列を表現する型としてoctet string型がある。この型のデータの中に改行コード等の制御文字は入り得るのかについて調べてみた。 まず、RFCを見てみた。 RFC 2578 - Structure of Management Information Version 2 (SMIv2) The OCTET STRING type…

postgresのプロセス数

DBMSとしてpostgresを使用していると、postgresプロセスの数が起動時より増えることがある。これについてちょっと調べてみた。 postgresにはフロントエンドとバックエンドがあり、起動後に増えるpostgresプロセスはバックエンドのものらしい。アプリからpost…