Archive for the ‘プログラム’ Category

undefined reference to vtable for <Class Name>

Qtアプリケーションを作成していて、undefined reference to vtable for <Class Name>エラーが出るなら、mocが実行されていないか、再実行が必要なケースだ。Qtドキュメント「シグナルとスロット」の実例を参照

Qt Createrで、自分で作成したクラスに”Q_OBJECT”を記述したあとに出た。[ビルド]-[qmakeの実行]を実行したあとビルドすると問題解消。ビルド時に自動で検出してmocを実行してくれればよいのに。

 

今までどのくらいプログラミング言語を触ってきたか(3秒で飽きたものも含む)

おもしろーい。みんないろいろ触ってるのだなぁ。偶然というか、トラックバックの最初の方、faith_and_braveさんのBLOGはほぼ毎日の様に読んでいる。いろいろ勉強させてもらってます。

で、私の場合。なるべく古い方から思い出しながら。

  • N-BASIC (PC-6001/6601/8001/8801/9801時代。) MS-DOSなんて無かった(^^;;
  • COBOL(*追加)
  • MS-DOSのバッチファイル。言語とは言い難いが….制御構造もあるし..ごりごり書いてたし…
  • ExcelVBA
  • AccessBasic??
  • VisualBasic
  • SQL(たしか、AS400上の)
  • C
  • bash
  • Oracle PL/SQL
  • Oracle Pro C
  • HTML
  • CSS
  • JavaScript
  • VBScript
  • Java
  • D
  • XML
  • XSTL
  • Perl
  • PHP
  • emacs lisp
  • VBA
  • C++(runtime)
  • C++(compiletime)
  • makefile(*2追加)
  • Visual C++のMFC。ま、特有のあれがありますから。
  • SQL Server Transact-SQL
  • PL/pgSQL
  • sed
  • wscript?jscript?
  • Ruby
  • Builder C++のVCL。ま、特有のあれがありますから。
  • Python

最初にプログラミング的だと思ってコンピュータに触ったのはLANPLANの表計算式かなぁ。楽しかった。VBは言語というより画面のみで、ロジックはDLLに押し込める使い方が多かったように思う。

あと、言語じゃないけど使ってるもの

  • BNF
  • PEG
  • 正規表現

他にもありそうだけど…思い出せない。こうやってみるとCLI系は避けてる気がする。今後は関数言語とかOMeta, DSL方面に流れる可能性大。

ついでに、使ったことある開発環境、ミドル、開発ツール関連は..

  • Excel4~
  • Access2.0~
  • VB4, VB6
  • VC6
  • Borland C++Builder 4, 6
  • GNU compiler collection , cとc++
  • D compiler
  • java SDK
  • MinGW, MSYS
  • Oracle WAS
  • IIS
  • Apache
  • SQL Server
  • PostgreSQL
  • MySQL
  • Access
  • Eclipse
  • cygwin
  • gnu make, nmake
  • global tag system
  • meadow, emacs, xemacs
  • Emediter
  • vi, vim
  • mercurial
  • cvs
  • subversion
  • VSS
  • openssh
  • putty
  • AS400用のターミナルソフト。AS400からデータもらえるのがうれしかった。
  • snmpデーモン

ふー、いろいろやってきたなぁ。メモリリークのツール使っていたけど、名前忘れた..(^^;;;

今は、meadowとglobal, mercurial, cygwin, perlで事足りてる。

*)学生のときにCOBOLバリバリやってたんだった。追加。

*2)そうかぁ、makeもゴリゴリ書くしね。他の人真似て追加。

 

Received解析 pythonで

pythonの正規表現モジュールを使って、メールヘッダ内にあるReceivedから情報を取ってみる。

from …. byの間に、HELO、逆引き名、IPアドレスを取得できる。

$ python
Python 2.5.2 (r252:60911, Oct  5 2008, 19:24:49)
[GCC 4.3.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> f = open('./MAIL/trash/1189','rb')
>>> data = f.read()
>>> import email
>>> import feedparser
>>> import re
>>> p = email.Parser.FeedParser(email.message.Message)
>>> p.feed(data)
>>> pc = p.close()
>>> for item in pc.items():
...     a = re.match(r'^from (.*)\((.*)\[(.*)\].*', re.sub('\n','',item[1]))
...     if a != None:
...             a.groups()
...     a = re.match(r'^from (.*)\(HELO (.*)\).*\((.*)\).*', re.sub('\n','',item[1]))
...     if a != None:
...             a.groups()
...
('10.236.62.152 (EHLO opEXCC02.tp.gk.corp.tepenet) ', '', '10.236.62.152')
('OPEXCV08.tp.gk.corp.tepenet ', '', '10.236.62.25')

それらしき値が取れているけど、もちっと考えないと使えない。今日はここまで。ふぅ。

参考サイト

 

thisポインタを使ったshared_ptr

thisをshared_ptrで他のクラスに渡したい場合にどうするか。メモ。

#include <boost/shared_ptr.hpp>
#include <boost/enable_shared_from_this.hpp>
using namespace boost;

#include "Y.h"
class X : public enable_shared_from_this<X>
{
private:
    Y y_;
public:
    void make_reference();
};

void X::make_reference()
{
    /* Yに自身を渡す*/
    y_ = new Y(shared_from_this());
}

注意点、Y側はshared_ptrからweak_ptrに変換して保持しないと循環参照となりX, Yもdeleteされないことに。また、shared_ptrをコンストラクタで構築すると、コンストラクタを抜けた時に自身が解放されちゃう。

class X
{
public;
    X() { shared_ptr<X> x = shared_from_this(); } ///NG
}

参考文献 :

 

More C++ Idioms

More C++ Idioms

これはすごいテクニカル集だ!うれしい限り

 

QtがLGPLで提供される

NokiaがQtをLGPLで提供するとのこと。SRAもそれに対応するビジネスモデルに移行する模様。

Nokia to increase adoption of Qt with additional licensing option
株式会社SRA、C++アプリケーションフレームワーク「Qt」のLGPLへのサポートとビジネス体制強化を発表

今までは高いライセンス料を払わなければならなかったのだが、LGPLを選択することでQtライブラリを利用しながらもプロプラエタリなアプリケーションを作成することができる。

再配布しない商用利用も可能になるだろう。つまり、社内システムにも利用する。

早くリリースされないかな。楽しみだ。さっそくPyQtあたりの情報収集したり(^^

 

テストの改善を言える

テスト仕様ある場合「なぜそれを確認できなかったか?」には明確に回答できる。つまり、テストできなかった理由を言うことができる。そして、それを改善できる。

なぜなら、テスト仕様の作成方法、もしくはテスト仕様のインプット文書に誤りがあるはずだからである。

これがテスト仕様が無い場合にはどうか?闇雲の工程から改善すべき部分を探す…..運良く何が悪のかに気がつく場合もあるかも。大抵はもっともな理由を探す事になるだろう。

 

テストできている

「テストできている」ということは、そのテスト仕様において正常に動作することが確認できているということである。ということは、「リリース後に発見された不具合」は正常を確認できていないケースということである。

そして「プログラムが正常に動作しないケースがありました。」と言うことになる。すると、なぜそれを確認できなかったのか?という所に辿り着く。

 

GNU GLOBAL source code tag system

GNU GLOBAL source code tag systemを久々にVerUp!

gtagsが以前より軽くなった気がする。うれしいのは、xemacsでのファイル読み込みがものすごく早くなって快適になったことか。

 

wp-mixipublisherのテスト

wp-mixipublisherのテスト投稿です。