avatar
Today is 星期天
2010年09月5日

2008年04月27日

跨平台的不依赖于IDE的C++类库

由 晨笛 — 分类目录: 未分类评论暂缺

GUI:WxWindows,Qt,VCF
xml解析:xerces-c++
网络编程:ACE,ICE
数据库编程:OTL
其它功能类库:boost
开发工具 GNU Toolchain,MSVC
标准库 STLport,Boost
版本控制 Subversion, VSS/TFS
国际化和本地化 ICU, wxLocale
数据校验和安全 CRC,Cryptpp,OpenSSL

数据库 SQLite,BerkeleyDB,MySQL
数据交换和服务 Web Services,XercesC,XalanC,TinyXML,libxml2
多媒体和图形 OpenGL,H.264
测试和性能等 CppUnit,gcov
文档化 (Doxygen-’!'风格; ‘@’风格; XML风格)
安装 NSIS

即时通信 gaim
命令行工具图形前端
地图引擎 基于OpenGIS
游戏引擎 基于OpenGL

FreeBSD心得

由 晨笛 — 分类目录: Unix评论暂缺

发现/var/db目录下有几个比较有用的目录:freebsd-update(推测可能是系统升级文件),mysql(mysql服务器数据库应该保存在这里吧),ports(推测通过port方式发布的源码包可能都会放在这里),pkg(系统用pkg_add安装的的软件在这里有备份)。

Apache22启动命令为/usr/local/etc/rc.d/apache22 onestart,配置文件所在目录为:/usr/local/etc/apache22,页面文件位于:/usr/local/www/apache22/data。

MySQL5012的相关工具程序坐在目录为:/usr/local/bin,安装后需要mysql_install_db –user=mysql命令确定mysql 用户为mysql 组和root 用户,启动mysql安全模式mysqld_safe –user=mysql &,修改mysql用户密码mysqladmin -u root password ‘newpassword’。

PHP5通过pkg_add安装后随包携带的ini配置文件位于:/usr/local/etc。

FreeBSD下安装MySQL+Apache+PHP新手指南

由 晨笛 — 分类目录: Unix评论暂缺

看到朋友们在Unix/Linux上装mysql有点麻烦,我也好不容易装完了,所以就来讲件,也许能帮帮大家的忙. 我使用的操作系统是FreeBSD5.2.1,如果别的操作系统安装方法也许不一样,请酌情处理.
安装FreeBSD就不讲了,只要稍微定制一下就可以了,过程我就不说了,我用的FreeBSD版本是5.2.1,应该是现在比较新的版本,以后就不知道了 :) .
一. 安装MySQL

我使用的的Mysql是4.0.20,源代码版,你也可以使用RPM包或者二进制版,安装方法可能不一样,请参考其它文章.
先下载Mysql2.0.20的源代码版,地址: http://dev.mysql.com/downloads/mysql/4.0.html
把它下到/usr/local/src目录下,如果没有该目录,就自己建一个.下载回来的包名字叫 mysql-4.0.20.tar.gz,然后我们把它解压出来:

# tar -zxvf mysql-4.0.20.tar.gz

解压后生成mysql-4.0.20目录,我们进入该目录:

# cd mysql-4.0.20

进入后就开始配置mysql了,配置过程中我们要给mysql设置一个安装目录,我们设置在 /usr/local/mysql 下,以为把文件放到一个地方比较容易管理,如果你还想获得更多的配置信息,使用 ./configure –help:

# ./configure –prefix=/usr/local/mysql

然后等几秒钟,配置完成后就编译源代码:

# make

这个编译的过程比较长,如果机器比较慢的话,可能要近二十分种 ( PS:我的机器是很普通的机器,所有用了差不多15,6分种 :( ) .
编译完成后就安装:

# make install

等上几秒钟,安装完成.下面就到了最关键的部分了,为什么老安装不成功,(PS:至少我是安装了N次,N > 10 ,呵呵),问题关键就在这里,访问mysql要一个专门的用户,而且必须给相应的访问权限,这里我们就设置root和mysql有权限访问.
我们先建立一个mysql和mysql用户来访问mysql:

# pw groupadd mysql  #建立mysql组
# pw useradd mysql -g mysql #建立mysql用户并且加入到mysql组中

建立用户后我们就初始化表 (注意:必须先执行本步骤后才能进行以下步骤)

# ./scripts/mysql_install_db –user=mysql #初试化表并且规定用mysql用户来访问

初始化表以后就开始给mysql和root用户设定访问权限, 我们先到安装mysql的目录:

# cd /usr/local/mysql

然后设置权限

# chown -R root .  #设定root能访问/usr/local/mysql
# chown -R mysql var  #设定mysql用户能访问/usr/local/mysql/var ,里面存的是mysql的数据库文件
# chown -R mysql var/.  #设定mysql用户能访问/usr/local/mysql/var下的所有文件
# chown -R mysql var/mysql/. #设定mysql用户能访问/usr/local/mysql/var/mysql下的所有文件
# chgrp -R mysql .  #设定mysql组能够访问/usr/local/mysql

设置完成后,基本上就装好了,好了,我们运行一下我们的mysql:

# /usr/local/mysql/bin/mysqld_safe –user=mysql &

如果没有问题的话,应该会出现类似这样的提示:

[1] 42264
# Starting mysqld daemon with databases from /usr/local/mysql/var

这就证明你安装成功了,如果出现:

[1] 42264
# Starting mysqld daemon with databases from /usr/local/mysql/var
040818 10:53:45  mysqld ended

则证明你的mysql运行不来,请查看错误日志: /usr/local/mysql/var/*.err 然后确定安装是否成功,如果没有成功,请检查上面的步骤是否正确.
安装完成后,能够通过 /usr/local/mysql/bin/mysql 来连接mysql进行管理,如果你装了apache并且能够解析php的话,也能使用phpMyadmin来管理你的mysql,记得装完后使用mysql或者mysqladmin来修改root的密码,这里我们就不说了,请参考相关的文章.

控制mysql就通过 /usr/local/mysql/libexec/mysqld 来控制启动或者停止mysql:

# /usr/local/mysql/libexec/mysqld start  #启动mysql
# /usr/local/mysql/libexec/mysqld stop  #停止mysql
# /usr/local/mysql/libexec/mysqld restart #重启mysql

为了每次系统重启后都能运行mysql,可以写一个脚本放到 /usr/local/etc/rc.d目录下,用来运行mysql,我们写一个脚本mysql_start.sh

#! /bin/sh
/usr/local/mysql/bin/mysqld_safe&

然后保存到/usr/local/etc/rc.d目录下,那么以后reboot系统后都能启动mysql了.

 
二. 安装Apache

安装Apache要简单点,我这里安装的Apache版本是 httpd-2.0.50,去下载压缩包: http://httpd.apache.org/download.cgi.
下载回来的包叫做 httpd-2.0.50.tar.gz 我们放在 /usr/local/src目录下.
首先进入目录后解压缩:

# cd /usr/local/src
# tar -zxvf httpd-2.0.50.tar.gz

然后就会得到 httpd-2.0.50目录,我们进入目录

# cd httpd-2.0.50

首先配置:

# ./configure \
? –prefix=/usr/local/apache \  #我们要把Apache安装在那个目录,我们这里装在 /usr/local/apache下
? –enable-shared=max \
? –enable-module=rewrite \
? –enable-module=so
以上选项在Apache2.2.3中没能编译出module来

执行上面的命令,如果没有错误信息,证明配置成功,然后进行编译:

# make

一两分钟就编译完了,然后进行安装:

# make install

安装完成后,Apache就存放在 /usr/local/apache目录下了, bin是执行文件的目录,conf是配置文件目录,htdocs是网页的主目录,logs是日志目录.
Apache通过 bin/apachectl或者bin/httpd来控制启动或者停止.

# /usr/local/apache/bin/httpd -k start  #启动apache
# /usr/local/apache/bin/httpd -k stop  #停止apache
# /usr/local/apache/bin/httpd -k restart #重启apache

然后你可以通过 http://localhost 来测试apache是否安装成功,如果出现apache的页面则安装成功,否则请检查上面的步骤.

 
三. 安装PHP

我们使用的PHP版本是4.3.8,先去下载: http://www.php.net/downloads.php, 下回来的包叫做 php-4.3.8.tar.gz, 放到/usr/local/src目录下.
首先进入该目录后解压缩:

# cd /usr/local/src
# tar -zxvf php-4.3.8.tar.gz

解压后进入目录:

# cd php-4.3.8

进行配置,这一步比较关键,一定要设置好,特别是要考虑到你要支持什么,比如GD库,xml,mysql等等,如果想知道详细的配置,执行 ./configure –help来获得:

# ./configure \
? –with-apxs2=/usr/local/apache/bin/apxs \
? –disable-debug \  #关闭php内部调试
? –enable-safe-mode \  #打开php的安全模式
? –enable-trans-sid \ 
? –with-xml \   #支持xml
? –with-mysql \  #支持mysql
? –enable-short-tags \  #支持PHP的短标记
? –with-gd \   #支持GD库
? –with-zlib \   #支持zlib
? –with-jpeg \  
? –with-png \
? –enable-memory-limit \
? –disable-posix \
? –with-config-file-path=/usr/local/lib

如果上面的配置没有错误的话,那么应该最后会显示感谢使用PHP等字样,那么证明配置成功,如果上面的配置选项不支持的话,会提示错误.
比如你没有安装mysql,那么–with-mysql就无法使用,所以一定要注意对应选项系统是否能够支持,如果出现错误,那么就先安装对应的程序,或者去掉相关选项.
配置之后就进行编译:

# make

编译成功后出现”Build complete.”字样,那么就可以进行安装了:

# make install

安装完成后把/usr/local/src/php-4.3.8/php.ini-dist复制到/usr/local/lib/,并重命名为php.ini

# cp /usr/local/src/php-4.3.8/php.ini-dist /usr/local/lib/php.ini

基本到这里PHP就安装成功了,如果中间出现错误,除了在配置的时候没有选对选项之后一般都不出现错误.

 

四. 整合Apache+PHP

为了让Apache能够直接解析php,我们还要进行一些配置.
首先进入apache的配置文件目录:

# cd /usr/local/apache/conf

然后用vi打开配置文件httpd.conf:

# vi httpd.conf

在httpd.conf文件中,添加

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

应该将以上两句添加在其他AddType之后。

确保文件中有以下一句话,没有就自己添加在所有LoadModule之后。

LoadModule php4_module  modules/libphp4.so

查找:(设置 WEB 默认文件)
DirectoryIndex index.html
替换为:
DirectoryIndex index.php index.html index.htm //在 WEB 目录不到默认文件,httpd 就会执行 /var/www/error/noindex.html

找到这一段:
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be “All”, “None”, or any combination of the keywords:
# Options FileInfo AuthConfig Limit
#
AllowOverride none

更改为AllowOverride all
允许apache rewrite

好了,在vi中使用”:wq”保存httpd.conf文件,退出vi。启动apache server:

# /usr/local/apache/bin/httpd start
现在apache就能够运行php了,写个文件测试一下,在/usr/local/apache/htdocs目录下,新建一个phpinfo.php文件,
文件中只有一行代码:

<? phpinfo(); ?>

保存此文件, 在你的浏览器中输入http://localhost/phpinfo.php,你应该看到PHP的系统信息。
如果出现错误,比如提示你下灾phpinfo.php,那么apache就是还无法解析php文件,那么请仔细检查以上的操作是否正确.
好,到这里,基本上Mysql+Apache+PHP安装完成,那么就能做Web服务器了,比如传个论坛,
同时提醒可以传个phpMyadmin去管理你的mysql,现在最新版本是phpMyadmin2.6-beta

CakePHP印象

由 晨笛 — 分类目录: 技术评论暂缺

从cakephp官方网站下载最新的stable版本,解压缩到合适的目录,在httpd.conf里设置一个测试用的虚拟机,把其中的DocumentRoot设置为/path/to/cakephp/app/webroot,并设置虚拟机的部分,加入:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]

激活apache的方法有两种,你可以把mod_rewrite模块静态编译到apache里,也可以动态加载mod_rewrite模块,一般后者更常见一些,如果是Windows版本的apache的话,只要在httpd.conf里去掉LoadModule rewrite_module modules/mod_rewrite.so一行的注释就可以了,如果使用的linux,方法稍复杂,不做介绍了。

有问题的地方:{cakephp官方安装文档里推荐使用的是用.htaccess文件(设置httpd.conf里AllowOverride为All)来设置重写规则,如果网站处于测试阶段的话,当然无可厚非,但是如果网站处于产品阶段,应该尽量避免使用.htaccess(设置httpd.conf里AllowOverride为None),相应的重写规则最好直接写在httpd.conf的部分。}

差点忘记说明一点,还要在httpd.conf文件里设置:DirectoryIndex index.php,把index.php设置为目录索引文件。

这样,服务器段配置工作基本就可以了,但是为了让cakephp跑起来,还应该配置一下数据库,把app/config目录下的database.php.default文件改名为database.php,然后在里面写上相关信息。

database.php文件的内容大致如下:
[php]
class DATABASE_CONFIG
{
var $default = array('driver' => ‘mysql’,
‘connect’ => ‘mysql_connect’,
‘host’ => ‘localhost’,
‘login’ => ‘user’,
‘password’ => ‘password’,
‘database’ => ‘project_name’,
‘prefix’ => ”,
‘charset’ => ‘gbk’);

var $test = array(‘driver’ => ‘mysql’,
‘connect’ => ‘mysql_connect’,
‘host’ => ‘localhost’,
‘login’ => ‘user’,
‘password’ => ‘password’,
‘database’ => ‘project_name-test’,
‘prefix’ => ”,
‘charset’ => ‘gbk’);
}
?>
[/php]
注意:charset选项是我自己添加的,为了能够设置正确的编码,后面会有例子。

有问题的地方:{database.php文件中的DATABASE_CONFIG类是个纯粹的数据容器,没有任何方法,虽然这样的方式能运行,但是我不得不说,这样的类是“弱智类”,我们应该尽量避免在编程过程中发明出这样的类来,你用数组或者其他什么结构来做数据容器都比这样要好。}

cakephp封装了mysql, mssql,…此外,还包装了peardb, adodb,并实现了事务支持。

有问题的地方:{在cakephp里封装了adodb,但是可以说封装相当的简陋,连limit方法都没处理好,adodb的数据抽象能力基本over,而且cakephp在数据库事务的处理上相当简陋,没有乐观锁,悲观锁的概念。}

不管怎么说,进行完这些设置后cakephp就能跑起来了,如果这时你浏览http://domainname/应该能看到cakephp的提示信息了。

使用cakephp编程,你的url会类似如下的样子:

http://domainname/controller/action/param1/param2

如果你按照类似上面的url去访问,就会看到cakphp友好的错误提示,告诉你应该建立某某文件等等,只要根据提示建立文件,一个应用程序的骨架基本就搭起来了。

model和controller里都存在一个名为$name的属性,model里的$name关系到数据库表的名字(表名缺省会转换成复数形式,如果你不喜欢这样的表名,你可以通过在model里添加$useTable属性来自定义表名),controller的$name关系到所使用的model的名字。这两个位置的$name属性你都可以不写,cakephp会按照一定的规则自己去推算相应的字符串应该是什么样子,但是最好还是显式的写出来更明智一些。

有问题的地方:{cakephp把POST变量封装成控制器对象的一个名为$data的属性,但对于GET变量(如上面url中的param1, param2)则未作这样的处理,而是在调用控制器方法的时候自动把他们(param1, param2)赋值给方法的形参。虽然这很不错,但是对于GET/POST变量处理的差异还是让我觉得有些别扭。}
通过修改app/config/core.php文件中的define(‘DEBUG’, 2),我们可以在浏览页面的时候顺带看到系统帮我们生成的SQL语句。

缺省的配置文件database.php里,数据库配置有两个类型,一个是$default,另一个是$test,缺省使用的是$default设置,通过在自定义的model文件里加入var $useDbConfig = ‘test’,可以让系统使用$test的数据库设置。

在配置文件app/config/routes.php中,可以修改系统的各个缺省路由,除了可以设定缺省的控制器动作名,还可以设定控制器动作方法中缺省的参数,如下:

$Route->connect(‘/例子’, array(‘controller’ => ‘模块名’, ‘action’ => ‘动作名’, ‘第一个参数’, ‘第二个参数’, …));

此外,通过打开app/config/core.php配置文件中的define(‘CAKE_ADMIN’, ‘admin’);选项,可以支持形如/admin/products/add的管理路由,也就是“/管理员/控制器/动作/参数/…”形式的管理路由。

有问题的地方:{管理路由虽然在一定程度上可以让你的逻辑更有条理,但是不得不说的是管理路由的权限相对简陋,不能实现多级别的认证处理}

cakephp编程之所以快速,就是因为框架本身已经尽可能完整的封装了CRUD操作,软件的各种用例操作我们只要通过在controller里调用model的若干方法就可以完成了,而且,如果数据库中存在created,modified,updated这样的字段名,并且字段类型为date/datetime,那么cakephp会自动填充他们。

有问题的地方:{虽然cakephp会自动填充名子为created,modified,updated,字段类型为date/datetime类型的字段,但是很多开发者在编程习惯上,更喜欢使用整数时间戳来保存时间(int unsigned),而这样的字段cakephp不会自动填充}

如果使用mysql4.1以上的话,有时候需要设定数据库编码才能正常查询,否则会有乱码。

有问题的地方:{cakephp竟然没有给出一个设定编码(SET NAMES ‘gbk’)的地方,NND}

编码问题不能不解决,这里给出一个权宜的方案,拷贝cake目录下的app_model.php文件到app目录下,按如下方式修改文件内容:
[php]
class AppModel extends Model
{
function __construct()
{
parent::__construct();

$conf = new DATABASE_CONFIG;

$data = $conf->{$this->useDbConfig};

if(strtolower($data['driver']) == ‘mysql’)
{
$this->execute(“SET NAMES ‘{$data['charset']}’”);
}
}
}
[/php]
注意:这里又有一个需要注意的地方:为啥不直接修改cake目录下的app_model.php文件,而要拷贝到app目录下再修改呢?因为cake目录下的文件是cakephp核心库文件,无论什么情况都不应该修改,否则会给升级维护带来不必要的困难。

注意:同样的道理,我们还可以把cake目录下的app_controller.php文件复制到app目录下,这样我们就可以编辑此文件来自定义控制器了,通常在app目录下的app_controller.php文件里放入诸如权限判断的方法是不错的主意,这样在子控制器中就可以直接调用了。

cakephp中,模型和模型之间存在四种关系:hasOne, hasMany, belongsTo, hasAndBelongsToMany。

A hasOne B:相应的关联字段(A_id)建立在B的数据表里,在A里查询时,cakephp会对A,B两个模型执行一次LEFT JOIN查询。

A hasMany B:相应的关联字段(A_id)建立在B的数据表里,在A里查询时,cakephp会对A,B两个模型各自执行一次SELECT查询。

A belongsTo B:相应的关联字段(B_id)建立在A的数据表里,在A里查询时,cakephp会对A,B两个模型执行一次LEFT JOIN查询。

A hasAndBelongsToMany B:相应的关联字段(A_id, B_id)建立在一个独立的中间表里,在A里查询时,cakephp会使用一次LEFT JOIN来实现。

多对多关系的中间表,一般对编程者是隐藏的,但是有些情况下,中间表也可以是一个独立的实体,比如说学生选课,会存在一个名字类似student_class的中间表,里面可能有student_id, class_id字段,除此之外,还可能有学生选择某门课程的具体时间等额外信息,这时候的中间表就明显是一个独立的实体了。

通过研究cake/libs/model/datasources/dbo_source.php文件中的generateAssociationQuery方法,可以搞清楚cakephp是如何拼装sql语句的。

待续

更正:CakePHP是支持MySQL的SET NAMES …的,只要在配置文件里加上encoding选项就可以了。详细看/cake/libs/model/dbo/dbo_mysql.php

判断目标进程是否存在/运行中

由 晨笛 — 分类目录: Windows评论暂缺

使用WaitForSingleObject(handle,0)方法。如果函数返回WAIT_TIMEOUT,则说明程序已启动正在运行,否则。。。

我的新天下无D

由 晨笛 — 分类目录: 大话西游II辅助工具评论暂缺

程序将支持插件功能,各个功能将完全独立,每项功能都以插件形式发布。
还没有全部完工,先看看预览图吧#17

我的魔兽争霸III对战平台,欢迎前来测试

由 晨笛 — 分类目录: 魔兽争霸3对战工具3 条评论

不用再去浩方、VS上挤房间啦!!!!!!!约上三五个朋友用这个工具就可以让你们在异地对战~~~~~~~

下载后解压缩到魔兽争霸III的安装目录中,双击main.exe运行,在文本框内输入“.\war3.exe”(或者其他你喜欢的启动命令行),点击“启动”按钮即可。

最后一个连接是目前最新的版本
vs_200804122004
vs_200804131316
从以下版本开始,压缩包只包含一个文件,解压到魔兽安装目录下运行即可。请确保目录下存在“war3.exe”,否则将出现命令行提示框。
vs_200804201958
vs_200804260127

如有任何问题,请联系qianchendi@gmail.com

我的LZW算法

由 晨笛 — 分类目录: LZW算法库评论暂缺

在sourceforge.net上成功申请了个工程,取名liblzw,呵呵~~

算法的原理就不说了,网上比较多,很容易找到。我这个实现的特点是:在网络通讯环境下使算法得到更好的表现,使用动态码长技术,可以自定义起始编码长度和最大编码长度,默认是从4bit开始,而不是像gif中8bit。

C语言实现,包括压缩和解压缩

https://sourceforge.net/projects/liblzw

目前我把它定为alpha1版,只实现了原理性的部分,附带的示例会向你展示它所能完成的工作,但还是留下许多异常需要做处理。

如有任何问题,请联系qianchendi@gmail.com

页数: 上一页 1 2 3 4 5 6 7 8
© 2010 晨笛的博客 All rights reserved - Wallow theme by TwoBeers Crew - Powered by WordPress - 使用愉快!