週記くらい

  • Profile

Monthly Archives: July 2009

Starbug1 1.3.01(正式版) リリースのお知らせ

Posted on 2009/07/25 by smeghead

Starbug1は、軽量なバグトラッキングシステム(BTS: Bug Tarcking System)です。C で書かれているため少ないリソース(例えば10年前のパソコンなど)でも快適に動作します。

  • 公式サイト http://starbug1.sourceforge.jp/
  • Sourceforge.jp http://sourceforge.jp/projects/starbug1/

Starbug1 1.3.01(正式版) リリースしました。かなり久しぶりの正式版リリースです。

1.2系がベータのまま1.2.10-betaまでいってしまったので、1.3としてリリースすることにしました。

1.1系からの機能追加

  • 複数サブプロジェクト対応
    • 全体を一つのプロジェクトとして、複数のサブプロジェクトを管理できるようにした。
      • 1.1系の一つのプロジェクトが、1.3系のサブプロジェクトに該当します。
    • サブプロジェクトの追加、修正、削除の機能を追加した。
    • 全部のサブプロジェクトからキーワード検索が行なえる機能をトップページに追加した。
  • 国際化対応
    • 英語、簡体中国語に対応しました。
      • プロジェクト毎(インストール単位)に、localeを指定できるようにした。初期ロケールはコンパイル時に指定可能(公式サイトのインストール方法参照)。後から管理ツールで変更することも可能。
  • その他バグ修正

1.1.4からの移行

  1. Starbug1の1.1.4がインストールされているディレクトリをバックアップする。
  2. 通常の方法でインストールを行ない、トップページを表示する。
  3. バックアップした1.1.4のデータベースファイルを、新たにインストールしたStarbug1のサブプロジェクトのデータベースファイルに上書きコピーする。
$ cd (新しくインストールしたStarbug1のディレクトリ)/db
$ su
# mv (バックアップした1.1.4のディレクトリ)/db/starbug1.db 2.db
# echo "insert into setting(name, value) values ('home_description', 'ホーム');" | sqlite3 2.db
# echo "insert into setting(name, value) values ('upload_max_size', 512);" | sqlite3 2.db

ライセンスについて

1.3からライセンスをGPLに変更します。

请多关照

http://d.hatena.ne.jp/smeghead/20090702/locale でも書きましたが、今年始めに中国の上海に3ヶ月間出張に行っていた経験が、Starbug1の国際化の原動力の源だったと思います。

今回の国際化対応で、現在は英語、簡体中国語に対応しています。特に英語は、翻訳ツールで変換した部分が多いので適切でない部分があったら気軽に指摘をおねがいします。

不具合、ご意見などもお気軽にどうぞ。

Posted in starbug1 | Leave a comment |

C++を知りたい(6) OOP Wikiを作る

Posted on 2009/07/23 by smeghead

C++のOOPの勉強をWikiを作りながら行きあたりばったりで進めていますが、大量のコンパイルエラーに何度もめげそうになりました。単純な多態が機能しなくて調べていたところ、下の説明を見付けました。

多態性は、メンバ関数がオーバーライドされており、スーパークラス型の変数がポインタ(または 第15章で登場する「参照」)である必要があります。

C++編(言語解説) 第9章 オーバーライド

これにはかなり驚かされたんですが、C++では常識なんですね。

練習で作っているWiki

(後日説明を追加する予定)

Elementがwikiの文法の1行を表すクラス。Elementを継承したHeadline(見出し)とItem(箇条書き)クラスを定義しました。機能が乏しい状態であるにも関らず、既に泥臭い部分が多いです。まだまだ途中ですが是非添削おねがいします。今後ももうすこしの間は、機能追加をしながらC++のOOPを習得したいと思います。

wiki.hh
#include <vector>
using namespace std;
/**
 * 要素
 */
class Element
{
protected:
string line;
public:
string name;
Element(){};
Element(string l);
virtual ~Element();
virtual string toHtml();
virtual string before();
virtual string after();
};
/**
 * 見出し
 */
class Headline : public Element
{
public:
Headline(string l);
~Headline();
string toHtml();
string before();
string after();
};
/**
 * 箇条書き
 */
class Item : public Element
{
public:
Item(string l);
~Item();
string toHtml();
string before();
string after();
};
/**
 * wikiのページを表すクラス
 */
class Wiki
{
private:
vector<Element*> elements;
string id;
public:
Wiki(string id);
~Wiki();
void output();
};
/**
 * 文法を判定して適切な要素を返す。
 */
Element* elementFactory(string line);
/* vim: set ts=4 sw=4 sts=4 expandtab fenc=utf-8: */
wiki.cc
#include <vector>
#include <iostream>
#include <fstream>
#include <sstream>
#include "wiki.hh"
using namespace std;
/**
 * 要素実装
 */
Element::Element(string l)
{
line = l;
name = "Element";
}
Element::~Element()
{
}
string Element::before()
{
string s;
return s;
}
string Element::after()
{
string s;
return s;
}
string Element::toHtml()
{
ostringstream html;
html << "<p>" << line << "</p>" << endl;
return html.str();
}
/**
 * 見出し実装
 */
Headline::Headline(string l)
{
line = l;
name = "Headline";
}
Headline::~Headline()
{
}
string Headline::before()
{
string s;
return s;
}
string Headline::after()
{
string s;
return s;
}
string Headline::toHtml()
{
ostringstream html;
html << "<h1>" << line.substr(1) << "</h1>" << endl;
return html.str();
}
/**
 * 箇条書き実装
 */
Item::Item(string l)
{
line = l;
name = "Item";
}
Item::~Item()
{
}
string Item::before()
{
string s("<ul>\n");
return s;
}
string Item::after()
{
string s("</ul>\n");
return s;
}
string Item::toHtml()
{
ostringstream html;
html << "\t<li>" << line.substr(1) << "</li>" << endl;
return html.str();
}
/**
 * Wiki実装
 */
Wiki::Wiki(string arg_id)
{
id = arg_id;
ostringstream filename_stream;
filename_stream << id << ".txt";
ifstream ifs(filename_stream.str().c_str());
string buf;
while (ifs && getline(ifs, buf)) {
elements.push_back(elementFactory(buf));
}
}
Wiki::~Wiki()
{
unsigned int size = elements.size();
for (unsigned int i = 0; i < size; i++) {
delete elements[i];
}
}
void Wiki::output()
{
cout << "Content-Type: text/html\n\n";
cout << "<html><body>\n";
unsigned int size = elements.size();
for (unsigned int i = 0; i < size; i++) {
if (i > 0 && elements[i - 1]->name != elements[i]->name) {
// 前の要素と異なる場合は、beforeメソッドを呼び出す。
cout << elements[i]->before();
}
cout << elements[i]->toHtml();
if (i < size - 1 && elements[i]->name != elements[i + 1]->name) {
// 次の要素と異なる場合は、afterメソッドを呼び出す。
cout << elements[i]->after();
}
}
cout << "</body></html>\n";
}
Element* elementFactory(string line)
{
if (line.at(0) == '*') {
Headline* h = new Headline(line);
return h;
} else if (line.at(0) == '-') {
Item* i = new Item(line);
return i;
} else {
Element* e = new Element(line);
return e;
}
}
/* vim: set ts=4 sw=4 sts=4 expandtab fenc=utf-8: */

htmlエスケープもまだ実装してません。

index.cc
#include <rude/cgi.h>
#include "wiki.hh"
using namespace std;
int main()
{
rude::CGI cgi;
string id(cgi["id"]);
Wiki wiki(id);
wiki.output();
return 0;
}
/* vim: set ts=4 sw=4 sts=4 expandtab fenc=utf-8: */
Makefile
default: index.cgi
wiki.o: wiki.cc wiki.hh
g++ -Wall -c -o wiki.o wiki.cc
index.o: index.cc
g++ -Wall -c -o index.o index.cc
index.cgi: wiki.o index.o
g++ -o index.cgi index.o wiki.o -lrudecgi
data.txt
*見出し
普通のパラグラフ
-箇条書き1
-箇条書き2
-箇条書き3
普通のパラグラフ
おわり。
実行結果
<html><body>
<h1>見出し</h1>
<p>普通のパラグラフ</p>
<ul>
<li>箇条書き1</li>
<li>箇条書き2</li>
<li>箇条書き3</li>
</ul>
<p>普通のパラグラフ</p>
<p>おわり。</p>
</body></html>
Posted in c# | Leave a comment |

C++を知りたい(5) cgi

Posted on 2009/07/19 by smeghead

C++のOOPを覚えるために小さいアプリを書いた方がいいと思ったのはいいけど、何を作ればいいかが思い浮かばない。適切な問題をでっちあげる能力の不足を感じつつ、wikiを作ってみることにしました。wikiならテキストファイルの読み書きができればいいから適度な問題なのではないかと。

CGIライブラリ

Webアプリだとセキュリティ的に問題が発生しやすいので、ライブラリは使うべきだ。ということでRude::CGIというライブラリを使ってみることにした。(実は、cgicc, cgi++という他のライブラリを使おうとしたけど、コンパイルに失敗したのでスムーズにインストールできたRude::CGIを使うことにした)

Rude::CGIのインストール

$ cd ~/src
$ wget http://rudeserver.com/cgiparser/download/rudecgi-5.0.0.zip
$ unzip rudecgi-5.0.0.zip
$ cd rudecgi-5.0.0
$ ./configure --prefix=/usr/local
$ make
$ su
# make install

/usr/localにインストールしたけど、ld.so.configで/usr/local/libが入ってない場合は、デフォルトの方がいいかもしれない。

Wiki

クラスの定義なども調べながら、実装中。index.cgi?id=data というアクセスを行なうと、data.txtの内容が表示されるようになった。しかし、この時点であまりC++のOOPの練習にはなっていない。Wikiシンタックスの解析の部分では、OOPらしく継承ツリーとかを構築してみようかと思う。(あんまり複雑なものは必要ないだろうけど) もちろん、考慮が必要なところが沢山ある(エラーとかエスケープとか)。

#include <rude/cgi.h>
#include <vector>
#include <iostream>
#include <fstream>
#include <sstream>
using namespace std;
class Wiki
{
private:
string id;
vector<string> lines;
public:
Wiki(string id);
~Wiki();
void display();
};
Wiki::Wiki(string arg_id)
{
id = arg_id;
ostringstream filename_stream;
filename_stream << id << ".txt";
ifstream ifs(filename_stream.str().c_str());
string buf;
while(ifs && getline(ifs, buf)) {
lines.push_back(buf);
}
}
Wiki::~Wiki()
{
}
void Wiki::display()
{
cout << "Content-Type: text/html\n\n";
cout << "<html><body>\n";
for (int i = 0; i < lines.size(); i++) {
cout << lines[i] << "<br>";
}
cout << "</body></html>\n";
}
int main()
{
rude::CGI cgi;
string id(cgi["id"]);
Wiki wiki(id);
wiki.display();
return 0;
}
/* vim: set ts=4 sw=4 sts=4 expandtab fenc=utf-8: */
Makefile
default:
g++ -o index.cgi index.cc -lrudecgi
data.txt
*wiki
test string. zzz
zzz
Posted in c# | Leave a comment |

C++についての情報収集の難易度が非常に高い件

Posted on 2009/07/19 by smeghead

今、C++を知ろうとしてWebで調べものをしているんだけど、C++のモダンで正しいベストプラクティスを検索エンジンから入手することが非常に難しい。C++と言いつつCの関数を紹介する古いページが非常に多い。perlもモダンな情報を収集するのが難しいということが言われているけど、その点ではC++も負けてないと思う。


ただでさえCと互換性がある言語だからCの関数でも書けちゃうけど、C++を勉強しようとしている身にとっては適切な情報が欲しい。とは言うものの、非常に真面目な初心者向けの記事も多いのも確かではある。その次のステップの人が、何かを調べようとしたときに、困るという状況なのかもしれない。


本を沢山買わなければマスターできない要因の一つかもしれない。

Posted in c# | 2 Comments |

デモサイト(さくら)で国際化が機能しない

Posted on 2009/07/17 by smeghead

gettextで国際化対応をしたStarbug1 1.2.10-beta をさくらインターネットにあるデモサイトでも動かそうと、さくらのStarbug1をバージョンアップした。

  • デモサイトの入口

しかし、vine linuxとdebianでは問題無かったgettextが、FreeBSDだと機能していない。msgidとして指定した文字列が表示されるのみ。

原因を特定するために、いろいろ試してみた。

Starbug1のgettext関連の関数呼び出しに問題が無いか?

Starbug1でbindtextdomain, textdomain, setlocale関数の実行に失敗していないかを確認したところ、戻り値がNULLではなかったので、成功している様子。

関数呼び出しに加えて、メッセージカタログの配置などが問題ないか?

原因がわからない場合は、問題が起きないくらい小さいプログラムを用意するのがいいと思い、さくらにsshでログインして、HelloWorldレベルの国際化アプリを用意して試してみた。

しかし、これでも動かない。msgidが表示されるだけだった。

正しいソースなら、gettextが動くのか?

もう自分が書いたソースでは、FreeBSDでgettextを動かすことができないと判断して、gettextを使っているソフトウェアを動かしてみた。

$ LANG=ja_JP.eucJP gettext --help
使用法: gettext [オプション] [[TEXTDOMAIN] MSGID]
または: gettext [オプション] -s [MSGID]...
原文のメッセージの自国語翻訳を表示.
-d, --domain=TEXTDOMAIN   TEXTDOMAIN から翻訳されたメッセージを取り出す
....

動いた(gettextが機能して日本語が表示された)。FreeBSDでは、環境変数LANGによるロケールの指定は可能だが、setlocale関数によるロケールの指定はできないということになる。これは、レンタルサーバの制限なのか、FreeBSDがそうゆうものなのかわからない。

解決策

setlocale関数のロケール指定だけでなく、環境変数LANGのロケールを書き換えてしまうことにした。

setenv("LANG", locale, 1); /* 強制的に環境変数を書き換える。 */
setlocale(LC_ALL, locale);
bindtextdomain("starbug1", "locale");
textdomain("starbug1");

しかし、この方法はマナー違反のような気もしてる。

これで、ようやく、さくらインターネットのFreeBSD上に配置してあるデモサイトで、1.2.10-betaの機能を確認してもらえるようになりました。

デモサイトは↓からどうぞ。

http://smeghead.sakura.ne.jp/starbug1-1.2/index.cgi/top

Posted in starbug1 | Leave a comment |
Next Page »

Pages

  • Profile

Archives

  • March 2018
  • May 2015
  • February 2015
  • January 2015
  • December 2014
  • November 2014
  • October 2014
  • September 2014
  • April 2014
  • November 2013
  • October 2013
  • July 2013
  • April 2013
  • March 2013
  • February 2013
  • January 2013
  • December 2012
  • November 2012
  • October 2012
  • September 2012
  • August 2012
  • July 2012
  • June 2012
  • May 2012
  • April 2012
  • March 2012
  • February 2012
  • January 2012
  • December 2011
  • November 2011
  • October 2011
  • September 2011
  • August 2011
  • July 2011
  • June 2011
  • May 2011
  • April 2011
  • March 2011
  • February 2011
  • January 2011
  • December 2010
  • November 2010
  • October 2010
  • September 2010
  • August 2010
  • July 2010
  • June 2010
  • May 2010
  • April 2010
  • March 2010
  • February 2010
  • January 2010
  • December 2009
  • November 2009
  • October 2009
  • August 2009
  • July 2009
  • June 2009
  • May 2009
  • April 2009
  • March 2009
  • January 2009
  • December 2008
  • November 2008
  • October 2008
  • September 2008
  • August 2008
  • July 2008
  • June 2008
  • May 2008
  • April 2008
  • March 2008
  • February 2008
  • January 2008
  • December 2007
  • November 2007
  • October 2007
  • September 2007
  • August 2007
  • July 2007
  • June 2007
  • May 2007
  • April 2007
  • March 2007
  • February 2007
  • January 2007
  • December 2006
  • July 2006

Categories

  • android (35)
  • apache (1)
  • bison (1)
  • BTS (18)
  • c# (23)
  • cgi (1)
  • chrome (9)
  • chromeextention (18)
  • clclcl (9)
  • clojure (13)
  • cloudbug1 (2)
  • css (4)
  • cygwin (7)
  • C言語 (21)
  • dart (1)
  • dotnet (11)
    • vb.net (2)
  • e-hash.jp (1)
  • eclipse (2)
  • emacs (10)
  • excel (1)
  • flex (1)
  • framework (11)
  • free (92)
  • gae (4)
  • gcc (4)
  • gimmehash.in (1)
  • glipper (3)
  • golang (7)
  • howm (1)
  • html (3)
  • ikushipe (1)
  • java (47)
  • JavaScript (28)
  • linux (16)
  • lisp (92)
  • lua (34)
  • luatinycgi (2)
  • mba (1)
  • Meadow (4)
  • memo (1)
  • music (5)
  • mysql (1)
  • neta (5)
  • O/Rマッピングツール (4)
  • obj-c (6)
  • OOP (6)
  • oracle (1)
  • perl (48)
  • php (38)
    • CakePHP2 (2)
  • PostgreSQL (8)
  • PowerShell (1)
  • putty (1)
  • python (14)
  • redmine (2)
  • ruby (7)
  • s3 (1)
  • sakura (5)
  • screen (1)
  • Selenium (1)
  • SF (1)
  • SKK (4)
  • slime (6)
  • sql (8)
  • sqlite3 (4)
  • starbug1 (179)
  • tthttpd (3)
  • twitter (7)
  • ubuntu (14)
  • Uncategorized (4)
  • unix (14)
  • unkode-mania (5)
  • vba (3)
  • vim (24)
  • w3m (1)
  • Windows (16)
  • wordpress (1)
  • zsh (6)
  • 愚痴 (1)

WordPress

  • Log in
  • WordPress

Subscribe

  • Entries (RSS)
  • Comments (RSS)

Pages

  • Profile

Archives

  • March 2018
  • May 2015
  • February 2015
  • January 2015
  • December 2014
  • November 2014
  • October 2014
  • September 2014
  • April 2014
  • November 2013
  • October 2013
  • July 2013
  • April 2013
  • March 2013
  • February 2013
  • January 2013
  • December 2012
  • November 2012
  • October 2012
  • September 2012
  • August 2012
  • July 2012
  • June 2012
  • May 2012
  • April 2012
  • March 2012
  • February 2012
  • January 2012
  • December 2011
  • November 2011
  • October 2011
  • September 2011
  • August 2011
  • July 2011
  • June 2011
  • May 2011
  • April 2011
  • March 2011
  • February 2011
  • January 2011
  • December 2010
  • November 2010
  • October 2010
  • September 2010
  • August 2010
  • July 2010
  • June 2010
  • May 2010
  • April 2010
  • March 2010
  • February 2010
  • January 2010
  • December 2009
  • November 2009
  • October 2009
  • August 2009
  • July 2009
  • June 2009
  • May 2009
  • April 2009
  • March 2009
  • January 2009
  • December 2008
  • November 2008
  • October 2008
  • September 2008
  • August 2008
  • July 2008
  • June 2008
  • May 2008
  • April 2008
  • March 2008
  • February 2008
  • January 2008
  • December 2007
  • November 2007
  • October 2007
  • September 2007
  • August 2007
  • July 2007
  • June 2007
  • May 2007
  • April 2007
  • March 2007
  • February 2007
  • January 2007
  • December 2006
  • July 2006

Categories

  • android (35)
  • apache (1)
  • bison (1)
  • BTS (18)
  • c# (23)
  • cgi (1)
  • chrome (9)
  • chromeextention (18)
  • clclcl (9)
  • clojure (13)
  • cloudbug1 (2)
  • css (4)
  • cygwin (7)
  • C言語 (21)
  • dart (1)
  • dotnet (11)
    • vb.net (2)
  • e-hash.jp (1)
  • eclipse (2)
  • emacs (10)
  • excel (1)
  • flex (1)
  • framework (11)
  • free (92)
  • gae (4)
  • gcc (4)
  • gimmehash.in (1)
  • glipper (3)
  • golang (7)
  • howm (1)
  • html (3)
  • ikushipe (1)
  • java (47)
  • JavaScript (28)
  • linux (16)
  • lisp (92)
  • lua (34)
  • luatinycgi (2)
  • mba (1)
  • Meadow (4)
  • memo (1)
  • music (5)
  • mysql (1)
  • neta (5)
  • O/Rマッピングツール (4)
  • obj-c (6)
  • OOP (6)
  • oracle (1)
  • perl (48)
  • php (38)
    • CakePHP2 (2)
  • PostgreSQL (8)
  • PowerShell (1)
  • putty (1)
  • python (14)
  • redmine (2)
  • ruby (7)
  • s3 (1)
  • sakura (5)
  • screen (1)
  • Selenium (1)
  • SF (1)
  • SKK (4)
  • slime (6)
  • sql (8)
  • sqlite3 (4)
  • starbug1 (179)
  • tthttpd (3)
  • twitter (7)
  • ubuntu (14)
  • Uncategorized (4)
  • unix (14)
  • unkode-mania (5)
  • vba (3)
  • vim (24)
  • w3m (1)
  • Windows (16)
  • wordpress (1)
  • zsh (6)
  • 愚痴 (1)

WordPress

  • Log in
  • WordPress

CyberChimps WordPress Themes

© 週記くらい@やーづ

With Google+ plugin by Geoff Janes