[Java,JNI]JNIでクラス検索するときのパッケージ名

OracleのJNIドキュメントに載っているサンプルプログラムを参考にして、Cからパッケージ名付きクラスのmainメソッドを呼びだそうとしたんだけど、うまくいかなかった話。

Java Native Interface Specification
5. The Invocation API


これを元にして、 local.PropertiesSample クラスの main メソッドを呼び出してみよう。

[gcc]gccでC99とPOSIXを同時に使いたかったのだ

[Java][C]JavaのvolatileとCのvolatileでシグナルハンドラを作るときの注意を書いたけど、今どきのマルチスレッドプログラムとはシグナルハンドラを定義するやり方では相性が悪い。
というわけで、そんなときはsigwaitを使うのがいいみたい。

ところが、以下のようなサンプルプログラムを作って、コンパイルしようとすると、エラーメッセージがいっぱい出てきてしまった。

[シェルスクリプト]シェルスクリプトでの関数定義の記法

bashで関数を定義するには以下の3つの記法がある。

# 関数名()
func1() {
  echo 'func1'
}

# function 関数名
function func2 {
  echo 'func2'
}

# function 関数名()
function func3() {
  echo 'func3'
}

[Apex]現在の会計年度を取得するApexコード

開発中のForce.comアプリで、Apexコードから現在の会計年度を取得する必要が出てきました。
Apexの標準クラスからで簡単に取れるかと思いきや、そんなものはないらしいので自分で実装することにしました。

例えばエス・ジーはSalesforceの会計年度設定で「会計年度期首月」を12月、「会計年度の表記」を「期末月に合わせる」としているので、今日が2016年12月1日の場合、会計年度は2017年となります。これをApexコードで取得できるようにします。
↓のコードを参考に、期首月が1月のパターンを考慮しました。

[linux]そうだ、manpage作ろう

シェルスクリプトのようなコマンドラインツールを作成した時に使い方をreadmeファイルで提供することはよくある。
これをreadmeファイルではなく、もっとかっこよく提供したい。manやHTMLのように。

そんなときは、help2manを使ってみるといいかもしれない。
'help2man' Reference Manual

help2manは任意のコマンドに"--help","--version"オプションを与えて起動して、標準出力の内容からmanファイルを生成してくれる。

例えば、catコマンドのmanを作りたければ、以下のようにする。

$ help2man -o cat.1 cat

[Python]内包表記と条件演算式

Pythonでの条件演算子の書き方を知らなかったので、面食らった話。

リスト内包表記で奇数の2乗を生成しようとすると以下になる。
>>> [ x ** 2 for x in xrange(10) if x % 2 != 0 ]
[1, 9, 25, 49, 81] 

それに対して、偶数の場合はそのまま、奇数の場合は2乗を生成しようとすると以下になる。
>>> [ x ** 2 if x % 2 != 0 else x for x in xrange(10) ]
[0, 1, 2, 9, 4, 25, 6, 49, 8, 81]

[Salesforce]カスタムボタンのエディタでPC・モバイル判定

作成したVisualforceページをカスタムボタンから表示するときに、 同じボタンからPC版とモバイル版(Salesforce1)で違うページを表示したい場合にどうしたらよいのか?
と調べていたところ、全く出てこなかったのでメモ的な意味も含めて書いていく。

表示するページを切り替えたいと思った場合、多くの方はクッション用のVisualforceページを作成し、
その中でPC用ページとモバイル用ページの呼び出しを切り替えようと考えるのではないかと思う。

しかし、今回はクッションページを作るのが面倒というのに加えて、 カスタムボタンのURLパラメータを本命のページで使用したかったので カスタムボタンでモバイルの判定をしてしまおうと考えた。

[Java]引数で受け取った型でコレクションオブジェクトを生成したいけど

JavaのSetの要素を指定されたものだけ、別のSetに移す必要があったんだけど、指定要素を保持するSetが移動元のSetに存在しない要素も持っていたため、一時的なSetを作成する必要があった。
    private static <T> void moveSet(Set<T> destSet, Set<T> srcSet,
                                    Set<T> targetSet) {
        Set<T> s = new HashSet<>(targetSet);
        s.retainAll(srcSet);
        destSet.addAll(s);
        srcSet.removeAll(s);
    }

[SQLite]CでSQLiteのユーザ定義関数を作る その3

前回はスカラー関数を作ったけど、SUMやAVGのような集約関数はどうなるだろうか。
今回は指定された列の行の値の積を返す関数を作ってみよう。

動作イメージ
> select 3 foo union all select 4 foo union all select 5 foo;
3
4
5
> select product(foo) from (select 3 foo union all select 4 foo union all select 5 foo);
60

[Visualforce]jQueryから簡単にVisualforceコンポーネントを操作しよう

Visualforceページの動的なUIの実装にJavascriptライブラリのjQueryを使用していますが、しばしばjQueryからVisualforceコンポーネントの要素を操作する必要が出てきます。

コンポーネント ID へのアクセスのベストプラクティス

上のガイドにあるように$Componentグローバル変数でJavascriptからコンポーネントIDを取得することができます。
ただこの方法だと、例えばスクリプトをソースコードの上部や下部にまとめて記述して管理したい時などは、DOMの階層構造を意識して変数指定しないといけないので、意外と面倒です。

[SQLite]CでSQLiteのユーザ定義関数を作る その2

その1では拡張ライブラリのビルドをしてみたけど、今回は実際に自分で関数を作ってみる。
複数の引数を渡されるとそれらの積を返すスカラー関数を作ってみよう。

動作イメージ
> select product(2, 3, 4);
24

[SQLite]CでSQLiteのユーザ定義関数を作る その1

SQLiteを使ったデータの統計処理なんかをしているとSQL側で処理できてしまうと楽なのになー、と思うケースがあったりする。
そういう時はSQLiteで使えるユーザ定義関数を作ってしまおう。
PHPやPythonで書く手段もあるようだけど、SQLite自体の仕組みを知るためにもCで書いてみよう。

まずは自分で作った関数ではなく、以下で公開されている数値計算用の拡張ライブラリを組み込んでみよう。

SQLite Contributed Files

これを使うと、三角関数やらがSQLから使えるようになる。

[C]可変長引数の扱い。Cではどうするか?

可変長引数とオーバーロード その1ではJavaで可変長引数を使う場合はメソッド呼び出しの都度、配列を生成するため、パフォーマンスに影響があるということを書いた。

でも、本質的にはJavaでは可変長引数も配列引数も同様の扱いだった。
なので、以下のように配列を可変長引数に渡すことができた。
int[] n = { 1, 2, 3 };
int s = sum(n);

int sum(int ... n) {
    ...
}

[linux]Linuxでキャッシュをクリアする

grepのようにファイルを読み込む処理の実行速度を計測するときに1つ気をつけなくちゃいけないことがある。
同じファイルに対する操作を2回、3回と続けるとファイルの内容がメモリにキャッシュされて1回目と比べて、処理が速くなることがあるからだ。

これはどちらの処理結果が正しいということではなく、処理の種類によってどちらの結果を採用するかを決めたほうがいい。

grepのようなコマンドの処理であれば、キャッシュされていることを前提とせずに毎回HDDから読むと考えたほうがいいだろう。
逆にDBMSやWebサーバが参照しているファイルはキャッシュに乗っていることを前提として考えたほうがいいかもしれない。

実際にgrepを同じファイルに対して複数回実行してみよう。

[unix]ファイル名しか受け付けないコマンドで標準入出力を使う方法

Unixでフィルタ的な動きをするコマンドはたいてい標準入力と標準出力を扱えるけど、独自に作成されたツールでコマンド引数にファイル名しか受け付けないようなものもある。
そんなコマンドに対して前段後段の処理を実施する場合は一時的にファイルを作ることが考えられるだろう。
でも、パイプを使えば済むようなところでいちいちファイルを作るのはばかばかしいよね。
処理後に削除するとかも考えなくちゃいけないし。

そういう時は /dev/std* を参照すれば、標準入力、標準出力、標準エラー出力にアクセスできる。

[Java]可変長引数とオーバーロード その2

可変長引数とオーバーロード その1ではEnumSetのofメソッドに可変長引数と引数1〜5個までのオーバーロードがあるのを見た。

もう一つ、可変長引数で注意しなければいけないのは以下のようなケースだ。
java.io.PrintStream::printfメソッドのようにさまざまな型を受け付ける可変長引数の場合を考えてみよう。

PrintStream printf(String format, Object ... args)

Javaの可変長引数の実体は配列であり、実際に配列を渡すこともできる。
なので、以下2例は同じ結果となる。

[Java]可変長引数とオーバーロード その1

お互いに排他的ではない複数の条件がある場合、従来から用いられてきた方法としては複数のビットフラグを用いる方法がある。

enum.c
#include 

enum Color {
    Color_Red   = 1,
    Color_Green = 2,
    Color_Blue  = 4,
};

int main(void) {
    int yellow = Color_Red | Color_Green;
    printf("yellow : %d\n", yellow);

    int white = Color_Red | Color_Green | Color_Blue;
    printf("white : %d\n", white);
}

[unix]sleepとusleep

Linuxから他のunixにシェルスクリプトを持っていって、動かないなんてことはたまにある。

例えば、usleepコマンドを使っているスクリプトをBSD系のunixに持っていくとusleepがなくて、動かなかったりする。
Linuxでもモノによってはusleepが初めからは入っていないかもだけど。
# そもそもシェルスクリプトで秒未満の待機なんてするデザインが悪い。ってのはとりあえず置いといて。。。

じゃあ、usleepコマンドがない状態でどうしよっかって考えたんだけど、マニュアルを確認して気づいてしまった。

http://www.freebsd.org/cgi/man.cgi?sleep(1)
BSDではパラメータはstrtodが受け付ける小数でもOKということになっている。
$ uname
Darwin
$ time sleep 0.5

real  0m0.510s
user  0m0.002s
sys   0m0.003s

確かに待機時間が0.5秒になっている。この仕様であれば、usleepコマンドは必要ないかなってのも分からなくはない。

https://linuxjm.osdn.jp/html/gnumaniak/man1/sleep.1.html
Linuxのsleepは最小単位は秒になっている。

https://linuxjm.osdn.jp/html/GNU_coreutils/man1/sleep.1.html
GNU_coreutilsのマニュアルだと、小数の指定もできるよ、ってことになっている。

確かにLinuxでも、小数が指定できるようになっている。
$ uname
Linux
$ time sleep 0.5

real  0m0.503s
user  0m0.002s
sys   0m0.001s

でもsleepコマンドで小数が指定できるのはあくまで拡張仕様であって、移植性を考えると難しいところですね。。。

[シェルスクリプト]シェルスクリプトで関数を使い分ける

シェルスクリプトはインタプリタで1行ごとに順に解釈されていくから、関数を実行する前にその関数の定義が登場しなければいけない。
それはいいんだけど、本当に "実行する前に" ということがどういうことか、ちゃんと分かってなかった。

以下のようにfunc1からfunc2を呼び出しているとしよう。

#!/bin/sh
func1 () {
  echo 'func1'
  func2
}

func2 () {
  echo 'func2'
}

func1

[SQL]SQLでHello, world?

SQLでHello, world.って言ったら、すぐに思いつくのはこんな感じだろうか。

SELECT 'Hello, world.';

いくつかのDBMSではこれでうまくいく。
でも、OracleだとFROM句がないとおこられちゃうよね。

[SQL]with句の効用

[SQL]SQLの共通表式ではSQLのwith句でテストデータの生成ができるってことを書いたけど、それ以外にもwith句には効用がある。

・サブクエリにコメントを付けておこう。
SQLだと他のソースコードに比べて、コメントがおろそかになっていることが多いけど、サブクエリ毎にコメントを付けておくとわかりやすいんじゃないだろうか。

サンプル用のテーブルはこんな感じ。
IDをキーにして、開始日と終了日を持っているとしよう。

Periods
ColumnType
idChar(5)
start_dayDate
end_dayDate

[C]オペークポインタ

「いくつかの言語でフィボナッチ数生成」を考える。ではハンドルに配列そのものを使っていたけど、CのAPIでハンドルを使う場合はオペークポインタにすることが多いよ。

「いくつかの言語でフィボナッチ数生成」を考える。の結果をオペークポインタを使ったものに変えてみよう。
まずは呼び出し側を見てみよう。

main.c
#include <stdio.h>
#include "fib.h"

int main(void) {
    hSequence fib = fibonacci_new();

    for (int i = 0; i < 10; i++) {
        printf("%d\n", fibonacci_next(fib));
    }

    fibonacci_delete(fib);

    return 0;
}

[Java]Mapのループ

JavaでMapをループする時に、なんとなしにkeySetを使ったりしていた。

MapIterate1.java
import java.util.HashMap;
import java.util.Map;

class MapIterate1 {
    public static void main(String ... args) {
        Map<String, String> map = new HashMap<>();
        map.put("banana", "yellow");
        map.put("apple", "red");
        map.put("orange", "orange");

        for (String key : map.keySet()) {
            System.out.println(key + ":" + map.get(key));
        }
    }
}

けれど、パフォーマスを考慮するとentrySetを使ってループしたほうがいいみたい。

[bash]キャリッジリターンの使いどころ

Unixの改行コードはLFでWindowsの改行コードはCRLFだ、なんていう話はよく出てくる。

CR(carriage return)というのは本来、現在位置を行の先頭に戻すだけで次の行には進まない。
LF(line feed)は逆に行中の位置は変えずに現在位置を次の行に進める。

じゃあ、CRのみを使うのはどういった場面があるだろうか。
例えば、コマンドラインで進捗状況を表示することを考えよう。

count.sh
#!/bin/sh

for i in $( seq 10 )
do
  # \rで行の先頭に戻ってから出力、改行はしない。
  printf "\r%2s/10" $i
  sleep 1
done
echo ''

[awk,Ruby,C#,Java]いくつかの言語でフィボナッチ数生成

[SQL] SQLの共通表式ではSQLでフィボナッチ数を生成した。
[python] ジェネレータとイテレータでフィボナッチではMizu A.さんにPythonでフィボナッチ数を生成してもらった。
調子に乗って、いくつかの言語の特徴的な機能を使ってフィボナッチ数を生成してみよう。

[awk]
awkは入力データの加工に適しているから自分でループするのではなく、seqの結果を使ってしまおう。

[bash]Bashでステップ実行

シェルスクリプトでステップ実行できたら、と思ったことないですか。
僕はあるよ。

と思っていたら、ここで素晴らしい説明をしてくれていた。
Shellスクリプトをデバッグ(ステップ実行)する

DEBUG擬似シグナルをtrapして、readで待てばいいんだね。

[Java][C]JavaのvolatileとCのvolatile

Javaでvolatileを使う場面は限られてくるけど、マルチスレッドの処理でパフォーマンスが問題になってくるようなときに使う。
通常のロックでは処理が重くなってしまうような場合だね。

VolatileSample.java
import java.util.stream.IntStream;

class VolatileSample {

    static class Counter {
        private volatile int count = 0;

        int getCount() {
            return count;
        }

        synchronized int increment() {
            return count++;
        }
    }

    public static void main(String ... args) {
        Counter counter = new Counter();

        IntStream.rangeClosed(1, 100).parallel()
            .forEach(x -> counter.increment());

        System.out.println(counter.getCount());
    }
}

[SQL] SQLで素数生成 existsとcaseの巻

前回はSQLフィボナッチ数列を生成したけど、調子に乗って、SQLで10000までの素数を生成してみた。
with句は整数列の生成のみに利用して、素数判定自体はSQLらしく非手続き的にするとこんな感じ。

prime.sql
with
  prime(p) as (select 3 union all select p + 2 from prime where p < 10000),
  sieve(s) as (select 3 union all select s + 2 from sieve where s + 2 < 100)
select 2 p
union all
select p from prime
        where not exists (select * from sieve where p > s and p % s = 0)
        order by p;

[SQL] SQLの共通表式

SQLの共通表式(CTE: common table expressions)が結構便利だけど、構文を忘れがちなのでメモ。

以下のようにWITH句の中にSELECT文を書くと、その直後のSELECTでビューのように参照できる。
名前付きの副問い合わせだと思うとわかりやすいかも。
ただし、WITHからカッコの後のSELCTまでで1つの文だから、当然見える範囲はこのSQL文の中のみになる。

[C] restrict修飾子

Cのstrict aliasingについてではポインタのエイリアシングを見たけど、C99では明示的に異なる領域を指していることを示すためにrestrict修飾子が導入されている。

# 残念ながらrestrictはC++では導入されていない。なので、これを使うとC++とは互換性のないコードになってしまう。。。

例えば、以下のようにchar配列の内容を反転することを考えよう。
void reverse(char * dest, const char * src, size_t n) {
    for (size_t i = 0; i < n; i++) {
        dest[i] = src[n - i - 1];
    }
}

[C] Cのstrict aliasingについて

[C] Cで10進小数を使う方法 でdecNumberを紹介したけど、そのドキュメントの中にこんな記述があった。

http://speleotrove.com/decimal/dnmods.html
The modules all conform to some general rules:
They are reentrant (they have no static variables and may safely be used in multi-threaded applications), and use only aligned integers and strict aliasing.

リエントラントやアラインメントはいいとしてもstrict aliasingってなんだろう?

[Raspberry Pi]ラズパイでLチカ(6)

さぁ、フルカラーLEDで色を変えるぞ!



とおもったんですが。raspbianの4.1.19にはnode.js(version 0.10.29)が搭載されている様子だったので、前回の手動PWMをnodeでやってみる。

(もちろん、PWM用のライブラリは存在するのですが、今回もハンドメイドで)

[Raspberry Pi] ラズパイでLチカ(5)

さて、前回はラズパイから少し離れて電池でLEDを光らせてみたわけですが、今回はラズパイでその制御をやってみようと思います。

何は無くともラズパイのGPIOの制御の仕方を見ていかなくてはいけませんね。


GPIOピンはラズパイのバージョンアップと共に増えているので、ご自分のラズパイに合わせたピン配置図を参照するようにしてください。


[C] Cで10進小数を使う方法

CでJavaのBigDecimalのような10進小数を扱えるライブラリはないかなと探していたのですが、decNumberというのがありました。

The decNumber Library
http://speleotrove.com/decimal/decnumber.html

gccにも使われているようで、なかなかよさそう。

[python] ジェネレータとイテレータでフィボナッチ

イテレータバージョン
<< fib_iter.py >>
class Fib(object):
    def __init__(self, n): 
        self.x_2, self.x_1 = 0, 1
        self._i = 0 
        self._max = n 
    def __iter__(self):
        return self
    def next(self):
        x_2 = self.x_2
        if self._i >= self._max:
            self._i =0
            raise StopIteration
        self.x_2, self.x_1 = self.x_1, self.x_1+self.x_2
        self._i += 1
        return x_2
if __name__ == "__main__": 
    f = Fib(40)                                
    for n in f:
        print n

ジェネレータバージョン
<< fib_gen.py >>
def fib():
    x2, x1 = 0, 1
    while True:
        yield x2
        x2, x1 = x1, x2 + x1
if __name__ == "__main__":
    f = fib()
    for x in xrange(40):
        print f.next()




[Raspberry Pi]ラズパイでLチカ(4)

今回は、一度ラズパイから離れてLEDを制御する回路側を設計していきます。





まず、今回はフルカラーLEDを使います。フルカラーLEDは何のことはない、光の三原色のLEDが束になったLEDです。

[Raspberry Pi]ラズパイでLチカ(3)

さて、ご希望のディストリビューションはインストールできたでしょうか?

一番オーソドックスなRasbianだと、インストールして起動するとX window systemが実行されるので、HDMIでディスプレイを繋いでいればGUIで操作できると思います。


Etherケーブルを挿せばdhcpでIPを取得しようと試みます。

マウス、キーボードを繋いでLXterminalのアイコンをクリックすると、ターミナル操作ができます。

ブラウジングもできます。

暗いですが、左がラズパイ3、右がブラウザでhelpページを表示しているところです。

ラズパイ3なので、無線LANにつなげることもできますが、それはまた別の機会に記事にします。

さて、ディスプレイをつなげたままで操作してもよいのですが、ラズパイは小型軽量過ぎて、HDMIケーブルやEtherケーブル、ときにはキーボードやマウスのケーブルにも引っ張られます。ちょっとストレスになります。さらにここに電子パーツをつなげていくなんて辛すぎます。

ということで、sshdを起動させておき、モニターやマウス、キーボードを切り離しても大丈夫な状態で使っていこうと思います。usbデバイスも電気供給しなくてはならないものがあるので、不必要なものは切り離してしまう方がいいのかなぁ、と思っています。

$ sudo service sshd restart

これで、sshコマンドもしくはteratermなどのターミナルソフトからコマンド打てますね。

ssh コマンドなら-Xか-Yでxの画面の転送もできますね。mac/windowsだとxサーバを追加インストールする必要があります。MacならXQuartz、WindowsならXmingで検索するとよいと思います。







[Raspberry Pi]ラズパイでLチカ(2)

ではまず、起動用SDカードを作成します。

どのホストOSでも、以下の流れです。

1. イメージファイルの入手
2. イメージファイルをSDカードに書き込む

イメージファイルというのは、ディスクの中身を(管理情報なども含んで)まるごとファイルにしたものです。
imageには、うりふたつとか、生き写しって意味がありますから、まぁ、そういう意味なのでしょうね。

ちなみにこのイメージファイルは圧縮されることもあるので、より正確には(伸張などをかけて)ディスクの中身を丸々写した形として使えるもの。ってところでしょうか。

イメージファイルの入手や書き込み手順に関しては検索すると多数出てきますので割愛しますが、注意点だけ幾つか。

1. ダウンロードしたものが正しいか検索する(md5など)

正しいイメージファイルを使いましょう。ネットワークはときにデータの欠損が生じます。正常性をmd5sumコマンドなどで確認して使いましょう

まぁ、アーカイブされてるものを解凍して使う分には、解凍できなかったりする時点で気づくかもしれませんが。

2. SDカードの書き込みは、コピーではない

イメージの書き込みは、ファイル群とその管理情報全てを書き込む必要があります。イメージファイルを書き込むためのソフトを使いましょう。linux/unixならばddコマンドが入っているでしょうから、それでやればオーケーです。Windowsでは、それ用のソフト(Win32 Disk Imagerなど)をインストールする必要があります。

3. きちんとアンマウントしてから使う

OSによっては、データをバッファリングしてユーザーインターフェイスに応答を返す可能性がありますから、バッファのフラッシュおよびデバイスの切り離しを行ってからライターから取り出してください。








[unix]ctrl-dとctrl-cについて

インタラクティブに標準入力から読み込むコマンドを終了させるのにctrl-dを押すやり方とctrl-cを押すやり方がある。

例えば、bcコマンドの場合、以下のようになる。
$ bc -q
(ここでctrl-dを押す)
$

[ブログ] google-code-prettifyの参照先

いつの間にかブログのソースコードのシンタックスハイライトがされなくなってた。

google-code-prettifyの参照先URLが変わっていたみたい。
ので、ヘッダ内の以下を変更。

旧:
<script src="https://google-code-prettify.googlecode.com/svn/loader/run_prettify.js"></script>

[unix]シェルスクリプトの終了ステータス

シェルスクリプトを作成しているときに毎回、終了ステータスをどうするか迷っていたんだけど、正常終了時は0、異常終了時は0以外くらいにしか考えてなかった。

では、どうするのがいいんだろうか。

まず、1と2はユーザ定義としては使わないほうがいいみたい。
Advanced Bash-Scripting Guide: Appendix E. Exit Codes With Special Meanings

[Raspberry Pi]ラズパイでLチカ(1)

だいぶ市民権を得てきた、Raspberry Piだと思ってたんですが、まだまだ知名度低いみたいですね。


左がRaspberry Pi 1 Model B
右上がRaspberry pi 2 Model B
右下がRasberry pi 3 Model B

詳しいスペックの違いは
https://ja.wikipedia.org/wiki/Raspberry_Pi
に詳しく掲載されています。

基盤のサイズは変わらないのに、搭載するデバイスが増えているので、ラズベリーのマークが小さくなっているのがちょっと面白いですね。

各カードの左上にはGPIO(General Purpose Input/Output)ピンと呼ばれる端子が突き出ていまして、ここに外部のデバイスを接続することでRaspberry Piから制御が可能になります。

ここでは
・SDカードにディスクイメージを書いて
・Linuxを起動させ、いくつか機能を確認し
・フルカラーLEDをチカチカ(通称Lチカ)させる
までやろうと思ってます。

普通の記事だと、赤色LEDの例が多いんですが、先輩から「普通のLEDじゃつまらん」と指摘されたので、フルカラーのLEDを使ってみたいと思います。


[Java]equalsメソッドと継承

Javaのequalsの実装でふと迷ったことがあった。

以前にもequalsメソッドをオーバーライドするときにテストするべきことを書いたけど、 そのときは比較対象のオブジェクトが自分と同じクラスかどうかのチェックには触れなかった。

instanceof演算子で比較するか、getClassメソッドで比較するかで、以下のような問題があるみたい。
Stringのフィールドを持ったクラスのequalsメソッドを素直に実装すると以下のような感じ。

[linux] sshでコピー

teratermには、いつのバージョンからかは知らないが ssh scpというメニューコマンドができている。

linuxでも、sshができればscp相当のコピーはできる。

local -> remote

ssh user@remote dd of=remote_file < local_file

remote -> local

ssh user@remote dd if=remote_file > local_file

使いこなすと、リジュームとかもできて便利らしい。


[bash]bashでターミナルに色つき文字を出力

bashでターミナルに色つき文字を出力するときの方法をあまりよくわかっていなかったので、復習。
 例えば、以下のようにすると"青です"の文字がブルーで出力される。

$ echo -e "\033[34m青です\033[39m"
青です