linux unix

[linux]ncコマンドによるファイル転送

LAN内のlinux同士でファイル転送したいが、FTPやNFSのサーバ設定まではしたくない時がある。 ncコマンドを使うと簡単にファイルを転送できる。 ncはnetcat。ネットワーク越しにcatできるわけだ。 待ち受け側ではポート番号を指定して、プロセスを起動することによ...

Java マルチスレッド

[java]Atomic*クラスのlazySetメソッド

JavaのAtomic*クラス群にlazySetというメソッドがあるけどなんだかよくわからなかった。ので、調べてみました。 APIリファレンスを見ても、 「指定された値に最終的に設定します。」 と書かれているだけで、通常のsetと何が違うのかよくわからない。 Java...

linux unix

[unix]lsofコマンド

あるファイルを延々となにかのプロセスが読み込んだり、書き込んだりしていて、その正体を知りたい時がある。 そんなときはlsofコマンドを使うのがいい。 例えば、以下のようにファイルを開いておいて $ tail -f ~/some.log 別のシェルでlsofコマンドを使う...

bash linux unix シェルスクリプト

[bash]シェルスクリプトのループ内でのリダイレクト

シェルスクリプトのループはあまり速くない。 なので、できるだけ速くさせるためにはリダイレクトの位置に気をつけたい。 これは遅い for i in $( seq 100000 ) do   echo $i >>loop.dat done 手元の環境で1.027...

linux

[linux]システムコールの一覧

Linuxのシステムコールの一覧ってどこかにないかなと思ったんですが、man syscallsで見られるんですね。 $ man syscalls 同じような感じでCの標準ライブラリ関数の一覧って、見られないのかな。。。

bash linux

[bash]ビルトインコマンドのヘルプ

プロセスの消費リソース表示 その1 で2種類のtimeコマンドについて書いたけど、シェルのビルトインコマンドがどのようなオプションを受け付けるのかあまりよくわかってなかった。 manで調べると外部コマンドのtimeの情報が出てくる。 $ man time 調べてみたと...

linux unix

[linux]プロセスの消費リソース表示 その2

その1 では紹介したtimeコマンドの他にperfコマンドを使う方法がある。 ※perfはシステムにデフォルトでは入っていないかもしれない。 perfはいくつかのサブコマンドから成り立っているけど、起動したプロセスの情報を単純に取得するにはstatを使うといい。 $ ...

bash linux unix

[linux]プロセスの消費リソース表示 その1

Linuxでプロセスの実行時間を計測するのによく使われるのはtimeコマンドだろう。 例えば、以下のようにすれば実際にコマンド実行に10秒かかり、sleepなのでプロセッサ時間をほとんど消費していないことがわかる。 $ time sleep 10 real 0m1...

C linux unix

[C]LinuxでCプログラムの処理時間を計測する方法いくつか その3

移植性は低いかもしれないけど、最近のLinuxでは最もよさそうな関数が以下となる。 Linuxのバージョンや他のUnixシステムでは使えない可能性もある。 [clock_gettime関数] #include <time.h> int clock_gettime...

C linux unix

[C]LinuxでCプログラムの処理時間を計測する方法いくつか その2

今回はPOSIXで決められている関数を使う方法。 [times関数] #include <sys/times.h> clock_t times(struct tms *buf); times関数は引数bufにプロセスが消費したクロック数を格納する。 tms...

C linux unix

[C]LinuxでCプログラムの処理時間を計測する方法いくつか その1

LinuxのCプログラムで処理時間の計測をする場合にはいくつかの方法が考えられるけど、それぞれの違いがあまりよくわかってなかったので、どのような長所、短所があるか調べてみた。 大きく分けて、システム時刻を取得する方法とプロセスの消費CPU時間を取得する方法がある。 何を計測す...

dot UML

DOT言語

クラス図などを書くときにはUMLのモデリングツールや、ソースコードからの自動生成ツールを使うことが多いと思うけど、DOT言語というのを使うとクラス図のようなグラフ図をテキストから生成できる。 Graphviz Documentation http://www.graphviz...

awk linux unix

[awk]gawkとmawk

多くのLinuxディストリビューションではデフォルトのawkとしてgawkが採用されているけれども、Debian系ではデフォルトのawkとしてgawkではなく、mawkが採用されているようだ。 mawkってなにものだろうか? http://invisible-island...

Java

[Java]equalsメソッド実装時にテストすること

自分で作ったクラスにequalsメソッドを実装した場合、最低限以下の挙動はテストしておく必要がある。 反射律 自分自身との同値比較は真となること。 a.equals(a)は必ずtureになるということ。 対称律 同値比較の左辺と右辺を入れ替えても比較結果は変わ...

python

[python] switchもどき

ipythonにはswitch, case文はありません。 breakの書き忘れで変なバグを生まないように…だとか。 でも、if, elifを重ねるのって嫌ですよね。 特に同一変数の評価をif, elifで書くとなんだか非効率な気もする… そこで、こんな書き方。 ...

python

[python] difflibを使ってみる

pythonには、標準でdifflibというモジュールが含まれています。 いわゆる、linuxのdiff相当のことができます。 import difflib a = ''' abc def ghi ''' b = &...

Java

[Java]Java7からはヨーダ記法はイディオムではなくなった?

ヨーダ記法というのがある。オブジェクト(特に文字列)を比較する際にnullチェックを省略するために対象のオブジェクトではなく、リテラルの方のequalsメソッドを使う手法だ。 String jedi; ... if ("Yoda".equals(jedi...

linux シェルスクリプト

[シェルスクリプト]ランダムな数値

シェルスクリプトでランダムな数値を得る必要があったのでちょっと調べてみました。 bashならRANDOM変数が使える。 例えば0から9の整数をランダムに得たければ、以下のようにする。 $ echo $(($RANDOM % 10)) $RANDOMは0から32767...

JavaScript

[JavaScript] 文字列結合の速さ

どんな言語でもよく使う文字列結合。 +演算子を使って結合する方法と、配列に入れてからjoinする方法 どちらが速いのか実験してみました。 var n = 1000000 , s = 'abc' , str = '' , arr ...

JavaScript

[JavaScript]整数の最大値

JavaScriptで整数をインクリメントしていくと、あるところでそれ以上大きくならなくなる。 for (let i = 0; i < veryLargeNumber; i++) { ... } ... 9007199254740989 9007199254...

python

[python] SyntaxError. Non-ASCII character

タイトルのエラーが出たら、 文字のエンコードの問題。 ファイルの先頭に # coding: utf-8 と書くと回避できる。 coding:のgと:の間に空白があるとダメ。:とutf-8のuの間は空いてもオッケー。 界隈では、-*- coding:...

python

[python] 辞書のループ

いつも忘れるので、メモっておこう dic = { 'name': 'Mizu.A', 'age': 33 } for k, v in dic.iteritems(): print k + '=' + ...

JavaScript

JavaScriptのループ その3

[その1] では以下のようなループで変数iのスコープで関数全体になってしまうと書いた。 これはJavaScriptでは変数にブロックスコープがなく、var変数はどこで宣言しても関数の先頭で宣言したのと同じように扱われてしまうからだ。 ※ちなみに変数宣言が関数の先頭に移動してし...

JavaScript

JavaScriptのループ その2

前回はJavaScriptで配列のループをする場合はCスタイルのループを使うようにした。 ECMAScript5thをサポートしている最近のブラウザでは配列のメソッドとしてforEachが使える。 こんな感じ [ 31, 45, 52 ].forEach(function(...

JavaScript

JavaScriptのループ その1

JavaScriptで配列をループするときには for in ループは使えない。 例えば、以下のような場合は要素ではなく、インデックスがとり出されてしまう。 # print関数が引数を文字列で出力するとして。 var a = [ 1, 2, 3, 4, 5 ]; for...

Java

null許容コレクションと不許容コレクション

Javaのコレクション型の中には要素(Mapの場合はキーも)としてnullを許容するものと許容しないものがある。例えばHashMapはキーと値にnullを許容するけど、TreeMapはキーとしてnullを許容しない。 なんでこんなことになっているかというとTreeMapは要素をソ...

Java

Javaで空のリストを返す

メソッドからコレクションを返す場合、無効な状態を表すのにnullを返すのではなく、要素数0のコレクションを返すのが良い作法とされている。 でも、その度に新しいインスタンスを作成するのは無駄なようにも思える。 そういう場合はjava.util.Collectionsクラスのem...

Java ジェネリクス

Javaでのraw型の警告対処

Javaで古いソースコードの改修をするときにジェネリクスを使っていないraw型のコレクションを取り扱わなければいけない時がある。 まるごとリファクタリングできればいいんだけど、外部ライブラリになっていていじれない場合は警告を抑制する必要がある。 例えば、以下のようにraw型の...

calc linux unix シェルスクリプト

シェルスクリプトはどうやって自分自身のファイル名を拾うか

前回はシェルスクリプトから数値計算するのにbcを使ったけど、 数値計算用のスクリプト言語としてcalcというのがある。 プログラミング言語として面白い特徴がいくつかあったので書いてみる。 オプションとして-fフラグというフラグがある。 このフラグは #!/usr/bin/...

bash シェルスクリプト

Bashのプロセス置換で並列実行 & 待ち合わせ

シェルスクリプトで時間のかかる処理を並列で実行したい。 さらに各実行結果を取り出して順に並べるのにはBashのプロセス置換を使うと便利。 プロセス置換というのは本来ファイル名を書くところに一連のコマンドを記述できる機能。 <( command list... ) でcomm...

C Java

Cでcompareが-1,0,1を返す理由

JavaのAPIリファレンスでBigDecimalのcompareToを見ていて気づいたのだけれど、 BigDecimalの値の大小を比較する際には以下のように行えとある。 BigDecimal bd = ... ... // bd > 1 if (bd.compa...

Java

Javaでfinal変数が呼ぶ側に埋め込まれる理由

このタイトルはあまり正確じゃない。 正確にはfinal宣言と同時に値が定義された変数である。 Javaではfinal宣言と同時に値が定義されるかされないかで変数の挙動が変わってくる。 たとえば、 class A {     public static final int ...

Java

javac -Xlint

普段はEclipseとかIDEを使っている人も多いと思うけど、javacコマンドでコンパイルするときに警告を最大限出してほしかったりする。 OracleのJDKであればjavacに-Xlintオプションを付けることによって、警告が出力される。

Perl 正規表現

正規表現のデバッグ

正規表現も複雑になってくるとデバッガでステップ実行のようなことをしたくなってくることがある。 そんなときはPerlのデバッガを使うといい。 perlの起動時にオプションとして-Mre=debugもしくは-Mre=debugcolorを付けると 実行時に生成された正規表現オ...

Java JDBC

JDBC 4.0の例外

JDBC 4.0からは以下のSQL例外が追加されている。 SQLRecoverableException SQLTransientException SQLRecoverableExceptionはDBとのコネクションを一度クローズして再取得すれば、回復できる可能性がある...

Java パフォーマンス

Javaの文字列結合パフォーマンス その2

さて、以下のようなコードではどちらのほうが処理が速くなるだろうか。 1. +演算子で結合 String s = s1 + s2 + s3 + s4 + s5 + s6 + s7 + s8 + s9; 2. StringBuilderで結合 StringBuilder ...

Java パフォーマンス

Javaの文字列結合パフォーマンス その1

よくJavaでは文字列結合で+演算子より、StringBuilderを使ったほうがパフォーマンスがいいと言われるけれど、それはこういうケースだろう。 String s = ""; for (String e : stringList) {     s += ...

SQL シェルスクリプト

シェルスクリプトで複数データを一括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