技術メモ

神奈川在住のITエンジニアの備忘録。おもにプログラミングやネットワーク技術について、学んだことを自分の中で整理するためにゆるゆると書いています。ちゃんと検証できていない部分もあるのでご参考程度となりますが、誰かのお役に立てれば幸いです。

2018-01-01から1年間の記事一覧

完全コンストラクタパターン

オブジェクト指向の勉強をしていて、「完全コンストラクタパターン」というものが出てきた。これは、オブジェクト生成時にコンストラクタに必要な情報を全て渡して、後からそのオブジェクトの状態(フィールド変数)を変更しない設計方式。つまり、オブジェク…

JavaのInetAddressクラスのメソッドで名前解決(逆引き)する時は正引きも行われている。

JavaのInetAddressクラスのgetHostName()やgetCanonicalHostName()で、IPアドレスからホスト名への名前解決(逆引き)を実行すると、裏で正引き(ホスト名⇒IPアドレス)も行われるようだ。詳細は以下の通り。InetAddressクラスのソースを確認すると、getHostName…

J2EEのEntity Manager経由でDBから取得したオブジェクト

J2EEのEntity Manager経由でDBから取得したオブジェクトを、そのオブジェクトがEntity Managerの管理下にある状態の時に変更すると、それがDBに反映されるので注意が必要である。 例えば、 User user = entityManager.find(User.class, id); として取得した …

HP-UXサーバ上のネットワーク・インターフェースの情報を確認する

HP-UXサーバ上で、当該サーバが持つネットワーク・インターフェースの情報を表示するには、 netstat -in を実行する。 他の UNIX OS のように、 ifconfig -a を実行しても、ネットワーク・インターフェースの情報は表示されない (というかエラーになる)。 【…

C言語を習い始めた頃に躓いたところ

最近、久々にC言語で書かれたプログラムのソース解析を行う機会があった。(普段はJava や perl がメイン。) 少し懐かしくなったので、主題の件についてちょっと書こうと思う。 static 修飾子の意味が使う場所によって変わる。 関数内で変数に対して使用すれ…

SNMPのメッセージフォーマット

SNMPのメッセージフォーマットについて、分かりやすく説明しているページを幾つか見つけたので、あとで見返すためにここにメモしておく。 SNMP: Simple? Network Management Protocol SNMPとは | IT用語 | 意味 解説 上の方のページは英文だが、SNMPのメッセ…

コミュニティ ストリング インデックスについて

Cisco の機器に対して SNMP で MIB 情報を取得する際の、「コミュニティ ストリング インデックス」について勉強した。 SNMP コミュニティ ストリング インデックス - Cisco 簡単に纏めると、例えば、機器が vlan 100 を持っているとして、機器から SNMP で …

Javaの名前解決のキャッシュ

Javaの名前解決では、以下のようにキャッシュを使っているので、OS(hosts)やDNSで名前解決を変更しても、すぐに反映されるわけではない。 networkaddress.cache.ttl java.securityで指定して、ネーム・サービスからの名前の検索に成功した場合のキャッシング…

perl で外部コマンドの戻り値を取得する。

perl のsystem関数を使って外部コマンドを実行する時、外部コマンドの戻り値を取得するには、ちょっと注意が必要。Perlの組み込み関数 system の翻訳 - perldoc.jp 返り値は、wait が返すプログラムの exit 状態です。 実際の exit 値を得るには 右に 8 ビッ…

icmpパケットのIDとシーケンス番号

icmpパケットには、ID(Identifier) と シーケンス番号(Sequence Number) が含まれている。これらがどのように使用されるのかイマイチ分かっていなかったので、ちょっと調べてみた。いつも通り、大正義 rfc を見に行く。すると、 https://tools.ietf.org/html…

ドメインモデル貧血症について

オブジェクト指向の勉強をしていたら、「ドメインモデル貧血症」という聞き慣れない用語が出てきたので、ちょっと調べてみた。 これは、どういうクラス(モデル)かというと、フィールド変数とその getter や setter くらいしかメソッドを持たないもので、オブ…

SSL/TLS 署名アルゴリズム

先日、SSL/TLS の署名アルゴリズム(ハッシュアルゴリズム)について話が挙がった時、「あれ?署名アルゴリズムって SSL/TLS通信のどこで使用されるんだっけ・・?」となってしまったので、また忘れないようにここに簡単に纏めておく。 署名アルゴリズムは、SH…

perl でハッシュを使って探索を高速化する。

要素数が大量にある配列に対して線形探索を行うと、とても時間がかかることがある。その場合、各要素をハッシュの key に入れておくと、探索の際にかなり高速化できる。以下のコードでは、配列をgrepする場合、配列をforeachで回す場合、(今回取り上げている…

SNMP Report PDU が使われる場面

先日、SNMP report - ITエンジニアの技術メモ にて、「SNMP Report はあまり見たことがない」と書いたが、最近、SNMP Report が使われる場面を見つけたのでメモしておく。 https://www.ietf.org/rfc/rfc2574.txt に以下の記載がある。 4. Discovery The User…

2038年問題への対応

C言語で作成されたアプリの2038年問題への対応について調べてみた。なお、2038年問題については以下を参照。 2038年問題 - Wikipedia 2038年問題で主に問題として挙げられるのは、時刻データを格納する time_t 型が符号付き 32bit なので、その最大値は (2^3…

シェルスクリプトで標準エラー出力を纏める

シェルスクリプトで標準エラー出力を一つのファイルに纏めたい場合、 exec 2> 出力先ファイル とシェルスクリプト内に記載する。こうすると、これ以降の標準エラー出力が「出力先ファイル」に吐かれる。これをシェルスクリプトの冒頭付近に書いておけば、シ…

プロフィールムービーの作成方法

フリーソフトなどを使い、結婚式で使用するプロフィールムービーをほぼ無料で作成した。その方法について書く。 ちなみに、持っているPCはWindows10。作成したプロフィールムービーは 家庭用のDVDプレーヤーで再生される前提。 パワーポイントで内容を作成。…

Javaのvolatile変数

Javaの「volatile」は、「synchronized の軽量版」という認識しか持っておらず、あまり理解できていない気がしたので、ちょっと調べてみた。マルチスレッド処理において、フィールド変数に volatile を付けると、各スレッドはその変数を参照する際、スレッド…

perlで現在時刻を (秒以下の精度で) 取得する。

perl には、現在時刻を取得する関数として localtime 関数がある。ただし、この関数では秒以下の精度で時刻を取得できない。そうしたい場合は、Time::HiRes モジュールの gettimeofday 関数を取得する。gettimeofday関数を使ったサンプルを以下に示す。 use …

SNMP report

SNMP report について、少し調べた時のメモ。 SNMP report は主に SNMPv3 で使用される。SNMPエージェントが、SNMP マネージャからの SNMP リクエストを受け取り、リクエスト処理中に問題が発生した場合などに、SNMP マネージャに SNMP report を返すことが…

ライブファイルシステム形式とマスタ形式

WindowsマシンでデータをCDやDVD等のディスクに書き込む場合、その際の形式を「ライブファイルシステム形式(UDF形式)」と「マスタ形式(ISO形式)」から選択する。 ライブファイルシステム形式では、書き込んだデータは後から編集可能である。パソコンからCDや…

pingで「宛先ホストに到達できません。」が出る場合

存在しない IP アドレスに対して ping コマンドを実行すると、「宛先ホストに到達できません。」と出ることがある。これは、icmp パケットを送信する前段階の arp 要求に対する応答が pingコマンドを実行したマシンまで返ってきていないことを意味している。…

bonding インターフェースに対するtcpdump

Linuxには、複数の物理インターフェースを論理的に一つと見なす、bondingという技術がある。 この bonding インターフェースに対して tcpdump コマンドでパケットキャプチャを取得する場合、bonding インターフェースを構成する物理インターフェース(ethX)を…

Observerパターン

オブジェクト指向のデザインパターンの一つである、Observerパターンについて簡単にまとめる。 登場するのはObserver(通知を受ける側)とSubject(通知する側)である。このパターンでは、まずSubjectにObserverを登録する。次に、対象のイベントが発生したら、…

gitでコミットする前にステージする理由

git

gitでは、リポジトリにコミットする前に、作業ディレクトリからステージング領域にファイルを上げる(addする)。つまり、以下のようなイメージ。 作業ディレクトリ ---add---> ステージング領域 ---commit---> リポジトリ コミットすると、gitはステージング…

perlで文字列から1文字ずつ取得

perl で文字列から1文字ずつ取得して配列に格納するには、以下のように split 関数を使うのが楽。splitString.pl use strict; use warnings; use Encode; my $inputStr = shift; my $decodedInputStr = decode('Shift_JIS', $inputStr); # SJISの文字列から…

内部文字コードを意識する時

各プログラミング言語には、内部文字列の文字コード(以下、内部文字コードと呼ぶ)がある。 外部から読み込んだデータをそのままで扱う場合は内部文字コードを意識することはないが、読み取ったデータを文字列として扱ってゴニョニョする場合は、一旦、内部文…

tasklistコマンドで表示されるメモリ量

Windows上で tasklistコマンドを実行すると、例えば以下のように、プロセスのメモリ量が表示される。 chrome.exe 11060 Console 1 ★22,748 K 一方で、タスクマネージャーでは、 メモリ量に関係する項目として以下を表示することができる。 ワーキング セット…

定期的にメモリ量を取得する。

引数で指定されたPIDを持つプロセスのメモリ量を定期的に出力するbatファイルを作成した。getMem.bat @echo off set pid=%1 :loop set /p=%date% %time% <nul, tasklist /fo csv /fi "pid eq %pid%" /nh timeout 60 > nul goto :loop メモリ量を取得したいプロセスのPIDを引数にして、例えば、 getMem.bat 9928 と実行す</nul,>…

改行しないechoコマンドもどき

Windowsで改行しないechoを行うための方法について書く。 Windowsで、例えば現在時刻を表示するために、 echo %date% %time% と実行すると、時刻の後に改行が表示されるので、時刻とそれに続く内容を一行で表示したい時に困る。 これを解決するには、set /p …