[linux]ncコマンドによるファイル転送
LAN内のlinux同士でファイル転送したいが、FTPやNFSのサーバ設定まではしたくない時がある。 ncコマンドを使うと簡単にファイルを転送できる。 ncはnetcat。ネットワーク越しにcatできるわけだ。 待ち受け側ではポート番号を指定して、プロセスを起動することによ...
[java]Atomic*クラスのlazySetメソッド
JavaのAtomic*クラス群にlazySetというメソッドがあるけどなんだかよくわからなかった。ので、調べてみました。 APIリファレンスを見ても、 「指定された値に最終的に設定します。」 と書かれているだけで、通常のsetと何が違うのかよくわからない。 Java...
[unix]lsofコマンド
あるファイルを延々となにかのプロセスが読み込んだり、書き込んだりしていて、その正体を知りたい時がある。 そんなときはlsofコマンドを使うのがいい。 例えば、以下のようにファイルを開いておいて $ tail -f ~/some.log 別のシェルでlsofコマンドを使う...
[bash]シェルスクリプトのループ内でのリダイレクト
シェルスクリプトのループはあまり速くない。 なので、できるだけ速くさせるためにはリダイレクトの位置に気をつけたい。 これは遅い for i in $( seq 100000 ) do echo $i >>loop.dat done 手元の環境で1.027...
[linux]システムコールの一覧
Linuxのシステムコールの一覧ってどこかにないかなと思ったんですが、man syscallsで見られるんですね。 $ man syscalls 同じような感じでCの標準ライブラリ関数の一覧って、見られないのかな。。。
[bash]ビルトインコマンドのヘルプ
プロセスの消費リソース表示 その1 で2種類のtimeコマンドについて書いたけど、シェルのビルトインコマンドがどのようなオプションを受け付けるのかあまりよくわかってなかった。 manで調べると外部コマンドのtimeの情報が出てくる。 $ man time 調べてみたと...
[linux]プロセスの消費リソース表示 その2
その1 では紹介したtimeコマンドの他にperfコマンドを使う方法がある。 ※perfはシステムにデフォルトでは入っていないかもしれない。 perfはいくつかのサブコマンドから成り立っているけど、起動したプロセスの情報を単純に取得するにはstatを使うといい。 $ ...
[linux]プロセスの消費リソース表示 その1
Linuxでプロセスの実行時間を計測するのによく使われるのはtimeコマンドだろう。 例えば、以下のようにすれば実際にコマンド実行に10秒かかり、sleepなのでプロセッサ時間をほとんど消費していないことがわかる。 $ time sleep 10 real 0m1...
[C]LinuxでCプログラムの処理時間を計測する方法いくつか その3
移植性は低いかもしれないけど、最近のLinuxでは最もよさそうな関数が以下となる。 Linuxのバージョンや他のUnixシステムでは使えない可能性もある。 [clock_gettime関数] #include <time.h> int clock_gettime...
[C]LinuxでCプログラムの処理時間を計測する方法いくつか その2
今回はPOSIXで決められている関数を使う方法。 [times関数] #include <sys/times.h> clock_t times(struct tms *buf); times関数は引数bufにプロセスが消費したクロック数を格納する。 tms...
[C]LinuxでCプログラムの処理時間を計測する方法いくつか その1
LinuxのCプログラムで処理時間の計測をする場合にはいくつかの方法が考えられるけど、それぞれの違いがあまりよくわかってなかったので、どのような長所、短所があるか調べてみた。 大きく分けて、システム時刻を取得する方法とプロセスの消費CPU時間を取得する方法がある。 何を計測す...
[awk]gawkとmawk
多くのLinuxディストリビューションではデフォルトのawkとしてgawkが採用されているけれども、Debian系ではデフォルトのawkとしてgawkではなく、mawkが採用されているようだ。 mawkってなにものだろうか? http://invisible-island...
[Java]equalsメソッド実装時にテストすること
自分で作ったクラスにequalsメソッドを実装した場合、最低限以下の挙動はテストしておく必要がある。 反射律 自分自身との同値比較は真となること。 a.equals(a)は必ずtureになるということ。 対称律 同値比較の左辺と右辺を入れ替えても比較結果は変わ...
[python] switchもどき
ipythonにはswitch, case文はありません。 breakの書き忘れで変なバグを生まないように…だとか。 でも、if, elifを重ねるのって嫌ですよね。 特に同一変数の評価をif, elifで書くとなんだか非効率な気もする… そこで、こんな書き方。 ...
[python] difflibを使ってみる
pythonには、標準でdifflibというモジュールが含まれています。 いわゆる、linuxのdiff相当のことができます。 import difflib a = ''' abc def ghi ''' b = ...
[Java]Java7からはヨーダ記法はイディオムではなくなった?
ヨーダ記法というのがある。オブジェクト(特に文字列)を比較する際にnullチェックを省略するために対象のオブジェクトではなく、リテラルの方のequalsメソッドを使う手法だ。 String jedi; ... if ("Yoda".equals(jedi...
[シェルスクリプト]ランダムな数値
シェルスクリプトでランダムな数値を得る必要があったのでちょっと調べてみました。 bashならRANDOM変数が使える。 例えば0から9の整数をランダムに得たければ、以下のようにする。 $ echo $(($RANDOM % 10)) $RANDOMは0から32767...
[JavaScript] 文字列結合の速さ
どんな言語でもよく使う文字列結合。 +演算子を使って結合する方法と、配列に入れてからjoinする方法 どちらが速いのか実験してみました。 var n = 1000000 , s = 'abc' , str = '' , arr ...
[JavaScript]整数の最大値
JavaScriptで整数をインクリメントしていくと、あるところでそれ以上大きくならなくなる。 for (let i = 0; i < veryLargeNumber; i++) { ... } ... 9007199254740989 9007199254...
[python] SyntaxError. Non-ASCII character
タイトルのエラーが出たら、 文字のエンコードの問題。 ファイルの先頭に # coding: utf-8 と書くと回避できる。 coding:のgと:の間に空白があるとダメ。:とutf-8のuの間は空いてもオッケー。 界隈では、-*- coding:...
[python] 辞書のループ
いつも忘れるので、メモっておこう dic = { 'name': 'Mizu.A', 'age': 33 } for k, v in dic.iteritems(): print k + '=' + ...
JavaScriptのループ その3
[その1] では以下のようなループで変数iのスコープで関数全体になってしまうと書いた。 これはJavaScriptでは変数にブロックスコープがなく、var変数はどこで宣言しても関数の先頭で宣言したのと同じように扱われてしまうからだ。 ※ちなみに変数宣言が関数の先頭に移動してし...
JavaScriptのループ その2
前回はJavaScriptで配列のループをする場合はCスタイルのループを使うようにした。 ECMAScript5thをサポートしている最近のブラウザでは配列のメソッドとしてforEachが使える。 こんな感じ [ 31, 45, 52 ].forEach(function(...
JavaScriptのループ その1
JavaScriptで配列をループするときには for in ループは使えない。 例えば、以下のような場合は要素ではなく、インデックスがとり出されてしまう。 # print関数が引数を文字列で出力するとして。 var a = [ 1, 2, 3, 4, 5 ]; for...
null許容コレクションと不許容コレクション
Javaのコレクション型の中には要素(Mapの場合はキーも)としてnullを許容するものと許容しないものがある。例えばHashMapはキーと値にnullを許容するけど、TreeMapはキーとしてnullを許容しない。 なんでこんなことになっているかというとTreeMapは要素をソ...
Javaで空のリストを返す
メソッドからコレクションを返す場合、無効な状態を表すのにnullを返すのではなく、要素数0のコレクションを返すのが良い作法とされている。 でも、その度に新しいインスタンスを作成するのは無駄なようにも思える。 そういう場合はjava.util.Collectionsクラスのem...
Javaでのraw型の警告対処
Javaで古いソースコードの改修をするときにジェネリクスを使っていないraw型のコレクションを取り扱わなければいけない時がある。 まるごとリファクタリングできればいいんだけど、外部ライブラリになっていていじれない場合は警告を抑制する必要がある。 例えば、以下のようにraw型の...
シェルスクリプトはどうやって自分自身のファイル名を拾うか
前回はシェルスクリプトから数値計算するのにbcを使ったけど、 数値計算用のスクリプト言語としてcalcというのがある。 プログラミング言語として面白い特徴がいくつかあったので書いてみる。 オプションとして-fフラグというフラグがある。 このフラグは #!/usr/bin/...
Bashのプロセス置換で並列実行 & 待ち合わせ
シェルスクリプトで時間のかかる処理を並列で実行したい。 さらに各実行結果を取り出して順に並べるのにはBashのプロセス置換を使うと便利。 プロセス置換というのは本来ファイル名を書くところに一連のコマンドを記述できる機能。 <( command list... ) でcomm...
Cでcompareが-1,0,1を返す理由
JavaのAPIリファレンスでBigDecimalのcompareToを見ていて気づいたのだけれど、 BigDecimalの値の大小を比較する際には以下のように行えとある。 BigDecimal bd = ... ... // bd > 1 if (bd.compa...
Javaでfinal変数が呼ぶ側に埋め込まれる理由
このタイトルはあまり正確じゃない。 正確にはfinal宣言と同時に値が定義された変数である。 Javaではfinal宣言と同時に値が定義されるかされないかで変数の挙動が変わってくる。 たとえば、 class A { public static final int ...
javac -Xlint
普段はEclipseとかIDEを使っている人も多いと思うけど、javacコマンドでコンパイルするときに警告を最大限出してほしかったりする。 OracleのJDKであればjavacに-Xlintオプションを付けることによって、警告が出力される。
JDBC 4.0の例外
JDBC 4.0からは以下のSQL例外が追加されている。 SQLRecoverableException SQLTransientException SQLRecoverableExceptionはDBとのコネクションを一度クローズして再取得すれば、回復できる可能性がある...
Javaの文字列結合パフォーマンス その2
さて、以下のようなコードではどちらのほうが処理が速くなるだろうか。 1. +演算子で結合 String s = s1 + s2 + s3 + s4 + s5 + s6 + s7 + s8 + s9; 2. StringBuilderで結合 StringBuilder ...
Javaの文字列結合パフォーマンス その1
よくJavaでは文字列結合で+演算子より、StringBuilderを使ったほうがパフォーマンスがいいと言われるけれど、それはこういうケースだろう。 String s = ""; for (String e : stringList) { s += ...
シェルスクリプトで複数データを一括UPDATEする
さて、どうして"行区切りのデータを適当な行数でまとめる"なんてことがしたかったというと シェルスクリプトでRDBのデータを複数行更新する必要があったから。 11111 22222 33333 44444 ... のようなデータがあった時にこれらをキ...
行区切りのデータを適当な行数でまとめる
文で説明しようとすると難しいけど、 $ cat paste.dat 1 2 3 4 5 6 7 8 9 のようなデータがあった時に 1,2,3 4,5,6 7,8,9 にしたい。 これはpasteコマンドを使う。 $ paste -d ',...
シェルで文字列を繰り返す
シェルスクリプトでループを書くのはあまりかっこよくないなと。 ポイントはprintfでスペースを繰り返すところ。 $ printf "%3s" | sed -e 's/ /foo/g' foofoofoo