SSブログ

XP→Linux引っ越し記 [日記]

XPのサポートが切れたので、自宅の環境をLinuxに入れ替えました。
日本語での情報量を考えたらUbuntu辺りが無難なところなのでしょうが、見た目と名称でMintになりました。

以下、作業内容の備忘録。

⇒ 続きはWEBで


タグ:linux

最近(?)、ClosedXMLのどうさがちょっとおかしいんだが。 [日記]

仕事でプログラムを作っているとExcelを操作するプログラムを書かなければならないことが良くあります(一方でMS-Wordの操作は全く無い)
操作すると言っても、目的はExcelファイルを読んだり書いたりするだけなのですが、昔のExcelファイルはファイル形式が公開されていないこともあり、COMコンポーネントとしてExcelそのものを操作してExcelファイルの読み書きをしていたことから、「Excelを操作するプログラム」と呼ばれることが多かったのです。

ちなみに、
昔のExcelファイルのファイル形式は 2008年に公開されています。
Officeのファイルが新しい形式(Office Open XML)に切り替わった後なので「え、今更?」って感じですけど。

⇒ 続きはWEBで


タグ:.net ClosedXML

.NET Framework のDictionaryを列挙した時の順番 [日記]

.NET Framework に含まれているDictionaryクラス(ジェネリック版)、JavaでのHashTableクラスに相当するのかと思ったら、実はLinkedHashMapの方じゃないかと思えてきた。

⇒ 続きはWEBで


タグ:.net

関数を組み合わせて別の関数を作ると言う発想が無かったみたいです [日記]

DBから取り出したデータを表形式で表示するプログラムがありました。
この表は、指定した項目で並べ替えて表示する(ソート)機能があるのですが、並べ替えを行う度に DBからデータを取得し直すという動作をします。

作った人に「何故そんな無駄とも思えるDB問い合わせを繰り返すのか」と聞いてみたところ、『これが一番楽だ』と言う。

はて?

⇒ 続きはWEBで


タグ:C++

Androidアプリの逆コンパイル [日記]

製作中のAndroidアプリのソースファイルが全部消されたので、Androidエミュレータにインストールされていた apk ファイルを逆コンパイルしてソースファイルを復旧できないものか試みました。

⇒ 続きはWEBで


タグ:Android

KindleでのPDF表示 [日記]

KindleでPDFファイルを表示する場合、ページの余白部分を自動で削除して、本文部分を拡大/縮小して表示する仕様になっています。
ここの処理には色々と癖があるようです。

この辺りに挙動について AKIO さんが調査してくれました。感謝。

Kindleでの表示も考慮したPDFを作成する場合の参考にでもしてもらえれば…と、ここで公開します。
(推測事項多めですが)

Kindleも、いくつか種類がありますが、(多分)初代Kindleです。

⇒ 続きはWEBで


タグ:PDF Kindle

テストフェーズ再考:目指せ!テスト無しでの納品 [日記]

ソフトウェアの開発は大きく分けると次の工程に分類できます。

  1. 要件定義
  2. 設計
  3. 実装
  4. テスト

まぁ、細かく言えば、他にも色々と分類方法はありますが、基本はこんな感じです。

分かりやすく言えば、「何を作るかを決める」「どうやって作るかを決める」「実際に作る」「ちゃんと出来たか試す」ということです。

⇒ 続きはWEBで


求む!ArrayList<int> [日記]

Javaでも、バージョンが5になった時からジェネリクスに対応し、
ArrayList<String>
の様に、コンテナクラスに格納するデータの型を限定できるようなりました。

しかし、プリミティブ型は指定できません。その場合は、ラッパクラスを指定します。
ArrayList<int> …… NG
ArrayList<Integer> …… OK

とは言え、同じく Java5 から採用されたオートボクシング機能によって、この違いを気にすることなく使うことが出来ます。

⇒ 続きはWEBで


タグ:Java

new 演算子が使うクラスローダ [日記]

Javaでは、クラスファイルをロードするクラスローダを自分で作成して利用することが出来ます。

が、そのクラスローダを使ってロードしたクラスをインスタンス化するには、Classクラスのメソッド newInstance()を使うことになるので、面倒です。

new 演算子が使えると楽で良いな。
と言うか、new 演算子が使うクラスローダって変更できるのでしょうか?
new 演算子が使われた時に対象のクラスがロードされていないと自動でクラスファイルがロードされるわけですが、そのときに使われるクラスロードのこと)

⇒ 続きはWEBで


タグ:Java

ぼくのかんがえたcrackme パート2 [日記]

Java は、その性質上、逆コンパイルが優秀で、かなり精度の高いソースコードが復元できてしまいます。
そのため、シリアルキーを入力することで各種機能制限が解除されるタイプのソフトウェアを、シリアルキーなしで使用できるように改造する行為(クラック)も比較的簡単に出来てしまいます。

逆コンパイルしたソースコードを分かりづらくする難読化という処理もありますが、クラック対策としては、どの程度効力があるのか結構疑問です。

そんなわけで、別のアプローチを取ることにします。

⇒ 続きはWEBで


タグ:Java

Android Market に開発者登録してみた [日記]

Android用アプリを配布するには、専用のサイト(アプリマーケット)経由でないといけないらしい。

そこで、一番無難な Android Market に登録することにしました。
Android Market でアプリを配布するには、事前に開発者登録をする必要があります。

調べてみたら、登録には $25 必要とのこと。

公開すべきAndroid用アプリは、現在鋭意製作中 …… というか、いまだ勉強中なわけですが、登録料がドル($)での支払いとなれば、円高の今 登録するのがお得と言うものです。
先週、この事に気付いていれば、1ドル80円台の底値(?)で登録できたのに(今は82円台まで回復)……と悔やまれます。
この先、さらに円高が進むかも知れませんが。

⇒ 続きはWEBで


タグ:Android

Documents and Settings のパスを変える [日記]

C:\Documents and Settings の中には、各ユーザの設定ファイルとかが色々と保存されています。(XPの場合。それ以外のOSだと若干場所が違ったりします)

何らかの理由で、このフォルダのパスを変更したい場合があります。

⇒ 続きはWEBで


タグ:Windows

未使用IDを探す [日記]

int getID() {

    // [前準備]

    // テーブル「ITEMS」から 1000~9999の範囲の ID の値を取り出す。
    // (ID に重複は無い)

    std::vector<int> id_list;

    RecordSet rs = db.querySql(
        "select ID from ITEMS where where ID between 1000 and 9999 order by ID");

    while (rs) {
        id_list.push_back(rs["ID"].getValueInt());
        rs.moveNext();
    }

    // ここまでが前準備

    // ここからが本題

    int id = 1000;

    if (id_list.empty())
        return id;

    for (size_t i = 0; i < id_list.size(); i++, id++) {
        if (id != id_list[i])
            return id;
    }

    throw std::runtime_error("ID不明");

}

こんなコードがありました。

ちなみに、前準備のところにあるDB操作っぽいクラスは適当です。
なんとなく雰囲気で察してください。
やっていることは、DBからIDの一覧を取得して配列へ格納しているだけです。

⇒ 続きはWEBで


タグ:C++

C/C++のロケールって、こういうことだったのか [日記]

C++の標準ライブラリにはUnicodeを扱うためのクラスが用意されています。
文字列を表す wstring や、ファイル入出力の wifstreamwofstream など。

さて、
Unicodeで書かれたテキストファイルを読もうとこんなコードを書きました。

std::wstring str;
std::wifstream in(L"test.txt");

std::getline(in, str);

うまく読めませんでした。

ロケールの問題だろうかと、次の1文を追加してみたのですが、それでもうまくいきません。

std::locale::global(std::locale("japanese"));

とりあえず、読む方は後回しにして、書く方を先に片付けましょう。

std::wofstream out(L"test.txt");
out << L"あいうえお";

………。

何も出力されません。

再度、ロケールを設定してみます。

std::locale::global(std::locale("japanese"));

std::wofstream out(L"test.txt");
out << L"あいうえお";

Shift-JISで出力されました(Windows XP + Visual C++)。

あれっ?

⇒ 続きはWEBで


タグ:C++

group byとdistinct [日記]

select COMPANY from USERS group by COMPANY

こんな感じのSQLがありました。

少し考えて理解しました。
テーブル「USERS」中に出てくる COMPANY の値の一覧を取得するための SQL だと。

⇒ 続きはWEBで


タグ:SQL

インターフェースの実装とクラスの継承 [日記]

Java(別にC#でも構わないけど)のインターフェースには、コードの実装がないから、クラスの継承と比べて存在意義を感じない。

という意見を時々見かけます。

⇒ 続きはWEBで


何もしないことのコスト [日記]

あるシステムの仕様書で、こんなことが書いてあった。

A が 0 の場合、B を10倍する。

⇒ 続きはWEBで


後ろにしか進まないもの [日記]

乗り物を思い浮かべてください。

自動車など多くの乗り物は、前にも後ろにも進むことが出来ます。

自転車や飛行機は、前にしか進めません。
(競技用自転車はバックも出来るし、飛行機も地上を走るときはバックできるけど、それは除外)

果たして、後ろにしか進まない乗り物は存在するのでしょうか。

「手漕ぎボートは後ろにしか進まないぞ」と思うかもしれませんが、本当にボートは後ろに進んでいるのでしょうか?
運転手(漕いでいる人)が後ろ向きに座っているだけで、ボートそのものは前に進んでいるのでは?

そんなわけで、
前か後ろのどちらかにしか進まないものは、その進行方向が前と呼ばれるという仮説を立ててみます。

⇒ 続きはWEBで


タグ:C++

ファイル選択ダイアログについて語る [日記]

Windows Vistaになって、ファイルを選択するためのダイアログ(ファイル選択ダイアログ)に新しいタイプのものが導入された。
そして、こっちをOSの標準として採用したようだ。
(従来の形式のファイル選択ダイアログも引き続き使える)

つまり、VistaのWindowsでは、2種類のファイル選択ダイアログを持っていることになる。

この2種類のファイル選択ダイアログ。
見た目や操作感が違うのはもちろんのこと、他のソフトウェアからの呼び出し方法も全く違う。
片やWin32 API。片やCOM。

ファイル選択ダイアログが持っている機能(出来ること)は大体同じなのに、その実現方法が大きく違う。
その影響がもっとも大きかったのが、「ファイル選択ダイアログのカスタマイズ」だ。

⇒ 続きはWEBで


タグ:VisualC++ MFC

VB.DOC メモ [日記]

ちょっと仕事でVisual Basic.NET で開発したプログラムのドキュメント化を行うことになりまして、VB.DOCを使うことになりました。

まぁ、色々とあったので、それらをメモしておきます。

使用したバージョンは、VB.DOC 0.4。
故あって、コマンドライン版。

⇒ 続きはWEBで


この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。