SQLite/Rubyのページを更新しました
情報が古く、ファイルがダウンロードできなくなっている、
というメールをいただきましたので、
3年ぶりにSQLite/Rubyのページを更新しました。
お知らせありがとうございました。
他のRuby関連のページもずいぶんと古くなってしまいました。
何とかしなければ。
« 2009年01月 | メイン | 2009年03月 »
情報が古く、ファイルがダウンロードできなくなっている、
というメールをいただきましたので、
3年ぶりにSQLite/Rubyのページを更新しました。
お知らせありがとうございました。
他のRuby関連のページもずいぶんと古くなってしまいました。
何とかしなければ。
SQLite/Rubyのページを更新したついでに、PythonのSQLiteライブラリを調べてみました。
PythonのSQLiteライブラリは、Python 2.5から標準ライブラリに入ったため、
インストール作業が不要で、すぐに使うことができます。
標準ライブラリならバージョンを気にしないですむので、使い勝手が良いですね。
ATOK 2009が発売されたので、さっそく購入しました。
ATOK 2009では、英単語の入力が便利になっています。
プログラミングでは、クラス名やメソッド名、変数名など英単語を使う場面が頻繁にあります。
その度に辞書を引いて綴りを調べていては、開発効率は上がりません。
また綴りを間違えてコミットすると、バージョン管理システムに綴り間違えの記録が永遠に残ったりします。(涙)
ATOK 2009では、英単語の入力に次のような機能が使えます。
日本語を入力し「F4」を押すと英単語に変換される。
としょかん
↓
「F4」
↓
library
カタカナ語を入力して「F4」を押すと英語に変換される。
こんふぃでんしゃる
↓
「F4」
↓
confidential
英単語を入力し「F9」または「F10」を押すと変換候補を表示させると、 正確なスペルの候補が0番目に表示される。
editer
↓
「F9」
↓
editor
これで一層、英語を勉強しなくなりそうです。
ちなみに、私はお買い得なダウンロード版を購入しました。
「ATOK 2009 for Windows 」ダウンロード版
vectorの容量はerase()しても解放されません。
vectorの容量をサイズに合わせて縮小するにはswap()を使用します。
vector<Customer> c(10000);
cout << c.capacity() << std::endl; #=> 10000
c.erase(c.begin() + 10, c.end());
cout << c.capacity() << std::endl; #=> 10000
vector<Customer>(c).swap(c);
cout << c.capacity() << std::endl; #=> 10
std::accumulateの練習
要素の合計値を求める
std::vector<int> v;
//vに値を設定する
std::generate(v.begin(), v.end(), rand);
//要素の合計値を求める
//3番目の引数は初期値
int sum = accumulate(v.begin(), v.end(), 0);
文字列を結合する
//ランダムな文字を返す
struct Generator
{
string operator ()()
{
static const string s = "abcd";
return s.substr(random(s.length()), 1);
}
};
std::vector<string> v(4);
//vに値を設定する
std::generate(v.begin(), v.end(), Generator());
//vの文字列を結合した、新しい文字列を取得する
string sum = accumulate(v.begin(), v.end(), string());
引いてみる
//1から順番に整数を返す
struct Generator
{
int operator ()()
{
static int i = 1;
return i++;
}
};
std::vector<int> v(10);
std::generate(v.begin(), v.end(), Generator());
//4番目の引数を指定して、引き算を行うようにする
int sum = accumulate(v.begin(), v.end(), 100, minus<int>());
大変参考になる話なので、お裾分けです。
誰かと同じ技術を身につけたいと思ったとき、目標とする人のアウトプットに目を向けるのではなくて、インプット(どんな経験・訓練をしたか)に目を向けることが重要です。
たとえばイチローのバッティング技術を身につけたいのなら、イチローのフォームを真似するのではなく、イチローがどうやってそのフォームを身につけたのかを学び、その方法を真似する。
ということです。
ついつい華々しいアウトプットに目が向きがちです。
そうではなくて、そのアウトプットを生み出したインプットの方に目を向けることが大切なのですね。
std::generatorの練習。
generateアルゴリズムは、引数をとらない関数オブジェクト gen の呼び出し結果を、範囲[first,last)内の各要素に代入する。
//引数 v から順に1大きい値を返す関数オブジェクト
class generator
{
private:
int i;
public:
generator(int v = 0) : i(v) {}
int operator ()() { return i++; }
};
std::vector<int> v(10);
//0から
std::generate(v.begin(), v.end(), generator());
//10から
std::generate(v.begin(), v.end(), generator(10));
フィボナッチ数
//フィボナッチ数
class FibonacciNumber
{
private:
int i1, i2;
public:
FibonacciNumber() : i1(0), i2(1) {}
int operator()()
{
int result = i1 + i2;
i1 = i2;
i2 = result;
return result;
}
};
std::vector<int> v(10);
std::generate(v.begin(), v.end(), FibonacciNumber());
std::transformの練習
vectorのそれぞれの要素に2を加えた、新しいvectorを取得する
//1から順番に整数を返す
struct Generator
{
int operator()()
{
static int i = 1;
return i++;
}
};
//引数に2を加算して返す
int add2(int i)
{
return i + 2;
}
vector<int> v(10);
//vに値を設定する
generate(v.begin(), v.end(), Generator());
vector<int> u;
//vに2を加算した値をuに設定する
transform(v.begin(), v.end(), back_inserter(u), add2);
std::inner_productの練習
inner_productアルゴリズムの振る舞いは、
サンプルプログラム
string v1 = "abcdefg";
string v2 = "AbcDEfg";
//同じ文字の数を数える
int result = inner_product(v1.begin(), v1.end(), //入力範囲1
v2.begin(), //入力範囲2
0, //初期値
plus<int>(), //操作1
equal_to<char>()); //操作2
Delphi2009用 改造版2.48 が本田さんトコのBBSで公開されています。
待望のUnicode対応のTEditorです。
早速、C++Builder2009で試してみたところ、問題なくコンパイルでき使用することができました。
使ってみて気になった点があります。
全角文字がある行の改行と[EOF]のマークの位置がおかしいようです。
半角文字だけなら問題はありませんでした。
もう少し検証してみようと思います。
追記
早速、Mae様がマーク位置の問題を修正してくださりました。
ありがとうございました。
もう一つ、気がついたことがあります。
全角英数字が表示されないようです。
調べてみようと思います。
さらに追記
全角英数字の表示の問題も修正していただきました。
そのほかの問題も修正されているそうです。
ありがとうございます。
std::next_permutationとstd::prev_permutationの練習
next_permutationとprev_permutationは順列を生成します。
string s = "ABC";
puts(s.c_str());
while (next_permutation(s.begin(), s.end()))
{
puts(s.c_str());
}
結果
ABC
ACB
BAC
BCA
CAB
CBA
Python 3.0.1がリリースされました。
バグ修正が行われたようです。
『いつのまにか変わってる地理・歴史の教科書 ~あなたの知識はもう役にたたない~』
大部分が歴史の話がでした。地理の話はほんの少し。
学会でも意見がまとまっていないものを多く、
これからも歴史の教科書は変わっていきそうです。
「仁徳天皇陵」や「聖徳太子」のことは聞いたことがありましたが、
日本最古の鋳造貨幣が「和同開珎」でなかったり、
江戸幕府がキリスト教徒見つけるために行った行為が「踏絵」でなかったりと、
驚くような話がたくさんありました。
青には、水の涼しいイメージがあります。
青に冷たいイメージがあるのは、世界共通だと思っていました。
ところが、中近東では正反対なのだそうです。
中近東では明るい青と言えば、太陽が照りつける砂漠の空の色になります。
では、何色が涼しい色なのかというと、
中近東で「涼しそうな色」と言えば緑なのです。
中近東の人たちは、緑から木々の色、つまりオアシスを想像します。
なるほど。
世界は広いです。
ATOKがMS-IMEに切り替わったときの対処法について。
ジャストシステム社員のブログによると、
(1)ソフトウェアのアップデートをしたらIMEに切り替わってしまった。
Windows Updateが標準のIMEをMS-IMEに変更してしまう、ということでしょうか。
この場合の対処法は、
「スタート」ボタン-「プログラム」-「ATOK」-「ATOK 2007」-「標準IME設定ツール」
ちゃんと元に戻す機能が用意されているのですね。
(2)無意識に切り替え操作をしている。
キーボードの「Shift」+「Ctrl」という操作は、ATOKとIMEの切り替えを行う操作なんです。
ほとんど使わないショートカットキーなので、あまり知られていないと思います。
この場合は、もう一度「Shift」+「Ctrl」を押すと、MS-IMEからATOKに切り替わります。
社内では、ATOKしか使わない人がほとんどなので、IME自体をコントロールパネルの言語の設定から外してしまう強者もいたりします。
IMEを削除するのは、ちょっと勇気がいりますね。
ATOKとMS-IMEの切り替えについて2 - 教えて!gooに同様の質問がありました。
「Shift」+「Ctrl」による切り替えを無効にする方法と、MS-IMEを削除する方法が紹介されています。
「Shift」+「Ctrl」による切り替えを無効にする方法は、
コントロールパネル→地域と言語のオプション
→言語タブを選択→テキストサービスと入力言語の欄にある「詳細」をクリック
→設定タブ→一番下の基本設定欄にある「キーの設定」をクリック
→詳細なキー設定ウィンドウの入力言語のホットキー欄にある「キーシーケンスの変更」をクリック
→入力言語の切替のチェックを外す
この対策が簡単かつ安全な方法だと思います。
MS-IMEを削除する方法は、
私のPC(windowsXP)環境の場合、
[コントロールパネル]→[地域と言語のオプション]→[言語]→[テキストサービスと入力言語]→[詳細]
で、[既定の言語]は、もちろん「日本語 ATOK」になっています。
その下の、[インストールされているサービス]に、「ATOK」と「MS-IME」が併置されているのを、「MS-IME」を「削除」しました。
どうしてもMS-IMEが気に入らなければ、こちらの方法で。
C++Builder2009で、ライブテンプレートを登録してみました。
とても簡単にできます。
Delphi2009でも同様に使用できると思います。
メニューの「表示」-「テンプレート」でテンプレートウィンドウが表示されます。
テンプレートウィンドウでは、ライブコードテンプレートの作成・編集・削除ができます。
「新規コードテンプレート」ボタンを押し、新しいテンプレートを作成します。
テンプレートのひな形が作られます。
<?xml version="1.0" encoding="utf-8" ?>
<codetemplate xmlns="http://schemas.borland.com/Delphi/2005/codetemplates"
version="1.0.0">
<template name="" invoke="manual">
<description>
</description>
<author>
</author>
<code language=""><![CDATA[]]>
</code>
</template>
</codetemplate>
codetemplateタグのname属性には、コード補完(CTRL+J)を実行する文字を入力します。
例えば、name属性を「//-」とした場合、「//-」「CTRL+J」と入力すると、
作成したテンプレートが挿入されます。
descriptionタグの値には、概要を入力します。
authorタグの値には、作者の名前を入力します。
これらはあまり重要ではないと思います。
codeタグのlanguage属性は、テンプレートの対象言語を入力します。
C/C++なら「C」になります。
Delphiの場合は「Delphi」になると思います。
<![CDATA[]]>の箇所に、挿入するコードを入力します。
(注意)挿入するコードの中にマルチバイト文字があると、挙動がおかしくなります。
サンプルです。
unique_ptrと入力し(途中まででも可)、CTRL+Jキーを入力すると、
unique_ptrのテンプレートが挿入されます。
<?xml version="1.0" encoding="utf-8" ?>
<codetemplate xmlns="http://schemas.borland.com/Delphi/2005/codetemplates"
version="1.0.0">
<template name="unique_ptr" invoke="manual">
<description>
unique_ptr
</description>
<author>
山本隆
</author>
<code language="C"><![CDATA[unique_ptr<type> variable(new type());]]>
</code>
</template>
</codetemplate>
まだ不十分ですね。
テンプレートを挿入した後、クラス名や変数名を書き直さなければなりません。
書き直す必要がある部分を、「$変数名$」という形に書き直します。
<code language="C"><![CDATA[unique_ptr<$type$> $variable$(new $type$());]]>
次に、「$変数名$」の情報を登録します。
次のような構文になります。
<point name="変数名">
<hint>
ヒント
</hint>
<text>
初期値
</text>
</point>
例えば、クラス名は、
<point name="type">
<hint>
クラス名
</hint>
<text>
T
</text>
となります。
最終的には、次のようになりました。
<?xml version="1.0" encoding="utf-8" ?>
<codetemplate xmlns="http://schemas.borland.com/Delphi/2005/codetemplates"
version="1.0.0">
<template name="unique_ptr" invoke="manual">
<point name="type">
<hint>
クラス名
</hint>
<text>
T
</text>
</point>
<point name="variable">
<hint>
変数名
</hint>
<text>
obj
</text>
</point>
<description>
unique_ptr
</description>
<author>
山本隆
</author>
<code language="C"><![CDATA[unique_ptr<$type$> $variable$(new $type$());]]>
</code>
</template>
</codetemplate>
変数の部分は、ツールチップで説明が表示されるようになります。
クラス名の一方を編集すると、もう一方も編集されます。
簡単に編集ができますので、よく使う定型文は登録しておくと便利です。
みんなで共有しても良いかもしれませんね。
本日(USでは日本時間未明)、Embarcadero All-Accessという新しいオンデマンドツール提供のプログラムを発表しました。 これは、CodeGearの開発ツールとDatabaseGearのデータベースツール、合計18製品を、すべて利用できるパスを提供するというもので、必要に応じて、常に最新のツール(何語版かも問いません)にアクセスできます。
開発プロセスの中で、「わずかしか使わない、だけど、あると便利」というツールがあります。
あると便利とわかっていても、コストパフォーマンスを考えると購入するのは難しい。
ツールを使わず、我慢してがんばろう、ということになります。
そういった製品が、オンデマンドツールという販売方法によって、気軽に使うことができるようになります。
このような販売方法もあるのだと、勉強になりました。
MOONGIFTで紹介されていたUniversalIndentGUIを使ってみました。
UniversalIndentGUIの概要はMOONGIFTの記事がわかりやすいので、 そちらをどうぞ。
実際に使おうとして、ダウンロードのページに行くと、 ダウンロードできるファイルが4種類あることがわかります。
UniversalIndentGUIで紹介されているソフトは、一番下の「UniversalIndentGUI_1.0.2」になります。
「UniversalIndentGUI_1.0.2」のDownloadのリンクを選択します。
次の画面では、OSごとにファイルが用意されています。
Windowsの場合は、「UniversalIndentGUI_1.0.2_win32.zip」を選択します。
ダウンロードしたファイルを展開し、UniversalIndentGUI.exeを実行すると、 UniversalIndentGUIが起動します。
最初、デスクトップで展開して起動したところ、設定によってはエラーが発生するものがありました。
展開したファイルを「C:\」にコピーしてから起動すると、問題ありませんでした。
パスに空白やマルチバイト文字があると、問題が発生するのかもしれません。
表示を日本語にするため、設定を変更します。
メニューの「Settings」-「Settings」を選択肢、Settings画面を表示します。
「Common」タブにある「Application Language」から「Japanese」を選択して「OK」ボタンを押します。
日本語になるのはメニューとツールバーだけのようです。
「Indenter Settings」の中には、日本語が文字化けするものがありました。
使い方は簡単で、「Indenter Settings」のコンボボックスから設定を選択し、オプションを設定するだけ。
ツールバーの「インデントの即時プレビュー」をチェックすると、プレビューがすぐに更新されるようになります。
オプションがGUIで設定できるのでわかりやすく、プレビューですぐに結果を確認できるのが便利だと感じました。
WindowsXP python2.6用NKF_pythonのDLLモジュールを作成しました。
nkfバージョン2用 python インターフェースで、公開していただきました。
以下の環境でコンパイルしています。
問題などがあれば、お知らせいただけると喜びます。
今回は最新版であるnkf2.0.9ではなく、nkf2.0.7を使用しています。
というのは、nkf2.0.9ではコンパイルエラーになったためです。
nkf 2.0.9の対応方法をご存じでしたら、教えていただけると助かります。
画像一括結合ソフト ImageMergeのバージョン0.1.1を公開しました。
今回の変更は、一つだけです。
Masks.MatchesMask関数を使用すると、文字列がワイルドカードにマッチするか調べることができます。
こんな便利な関数があることを今まで知らず、一般人には扱いにくい正規表現をソフトに使用していました。
VCLには私が知らない便利な関数がたくさんあるんだろうなぁ。
Ubuntu 8.0.4にDjangoの開発環境を作る手順。
Djangoを使ったアプリケーションをPydevでデバッグできる環境の構築を目指す。
Windowsをお使いの場合は「WindowsにAptana PydevでDjangoの開発環境を構築する」をご覧ください。
Pythonがインストールされているか、確認する。
通常はPythonもインストールされているはず。
$ python --version
Python 2.5.2
UtunbuのDjangoのパッケージはバージョンが古いため、手動でインストールする。
Djangoのホームページからダウンロードする。
ダウンロードしたファイルを展開し、インストールを行う。
$ tar xzvf Django-1.0.2-final.tar.gz
$ cd Django-1.0.2-final
$ sudo python setup.py install
Djangoのインストールが完了したら、動作を確認する。
$ django-admin.py --version
1.0.2 final
バージョン番号が表示されたら、インストールは成功している。
次に、統合開発環境(IDE)をインストールする。
今回は、EclipseとPydevを使用する。
Ubuntuにパッケージが用意されているので、それを使用する。
$ sudo apt-get install eclipse eclipse-pydev
前回(Ubuntu 8.0.4にDjangoの開発環境を作る(1)DjangoのインストールからEclipseとPydevのインストールまで)の続きです。
Windowsをお使いの場合は「WindowsにAptana PydevでDjangoの開発環境を構築する」をご覧ください。
Djangoを使ったアプリケーションをPydevでデバッグできる環境の構築を目指します。
EclipseとPydevのインストールが完了したら、Eclipseを起動して設定を行います。
メニューから「Window」-「Preferences」を選択します。
「Prefernces」画面が表示されるので、「Pydev」の下にある「interpreter - Python」を選択します。
「Python interpreters」の「New」ボタンを押し「/usr/bin/python」を選択し、登録します。
メニューの「File」-「New」-「Project」を選択します。
「Pydev」の下にある「Pydev Project」を選択します。
「Project name」を入力し(ここでは「MyProject」とします)、「Finish」ボタンを押します。
次のコマンドを端末から入力し、Djangoのプロジェクトを作成します。 ここではプロジェクト名を「manoush」にしています。
$ cd ~/workspace/MyProject/src/
$ django-admin.py startproject manoush
Eclipseに戻り、「Navigator」タブのプロジェクト(MyProject)を右クリックし、「Refresh」を選択します。
これによって、先ほど作成したDjangoプロジェクトのファイルが反映されます。
「Navigator」タブの「MyProject」-「src」-「manoush」-「manage.py」を開きます。
メニューから「Run」-「Debug」を選択します。
「Create, manage, and run configurations」画面が表示されます。
「Python Run」を開き、「New_configuration」を選択します。
「Project」の「Browse」ボタンを押し、プロジェクトを選択します。
「Main Module」の「Browse」ボタンを押し、「manage.py」を選択します。
「Arguments」タブを選択します。
「Program Arguments」に「runserver --noreload」と入力します。
「Apply」ボタンを押し、設定を適用します。
「Debug」ボタンを押し、実行します。
以上で、設定が完了しました。