实验室服务器群发邮件问题解决

4月份mails的邮件系统升级后, 班级网页上利用perl写的CGI群发代码就工作不正常了,大部分信都发送不出去, 察看badmail得到一下出错信息:
出错信息如果是from是填mails的邮箱就会有
Final-Recipient: rfc822;XXXXX@ mails.tsinghua.edu.cn
Action: failed
Status: 5.5.0
Diagnostic-Code: smtp;553 From <XXXXXX@mails.tsinghua.edu.cn>, message blocked,
you are not authorized to send mail, authentication is required.
如果不是mails的邮箱如gmail会有:
Final-Recipient: rfc822;XXXX@mails.tsinghua.edu.cn
Action: failed
Status: 5.5.0
Diagnostic-Code: smtp;554 Connection refused(domain). MAIL FROM [ xxxxxxxx@gmail.
com] mismatches client IP [166.111.X.X].
还有提示发送过多的问题
Final-Recipient: rfc822;xxxxxxxx@mails.tsinghua.edu.cn
Action: failed
Status: 5.5.0
Diagnostic-Code: smtp;553 Too much sessions in a connection.
初步推断是两个问题造成的, 一是mails的服务器增加了垃圾邮件检测机制,会把from域的邮件地址的后部分和发送服务器的IP进行匹配,如果不匹配认为是垃圾邮件.二是一次connection发送数量有上限.
针对第一个问题,采取了一种折中的措施,把from域填入一个假的email地址,后面部分和机器的IP能够匹配,但保留replyto还是实际的email地址以便可以回复,很顺利,第一个问题解决;  第二个问题绕了一些弯路,首先尝试改动了CGI的发送代码,把群发列表分为几次分开发送,结果总是有近三十封左右的badmail,这时候想到了IIS的smtp服务, 发现其属性中有一项一次连接发送的邮件数,默认值是2000,尝试改为150,问题得到解决.应该是IIS的smtp服务会把短时间内的发往同一服务器的邮件整理一次连结发送的,这样做是有道理的.现在只有4个badmail了,其中有3个的确是不可用的email,还有一个是发给假邮件地址造成的,找到对应的代码注释掉发给from的邮件,同时从群发列表中删去3个不可用的email.问题解决!

[Debian] Apache+PHP+Mysql+Tomcat配置

1、安装软件:
apt-get install apache php4 php4-mysql mysql-server mysql-client libapache-mod-jk, 安装成功后连接http://localhost可以看到/var/www/下的文件,说明apache已经安装成功。它的配置文件位于 /etc/apache/下的httpd.conf,其中默认的Root是/var/www,每个用户目录下的public_html具有只读的访问权限。
2、配置PHP:
此时需要打开php的支持,参考[1]中的做法,编辑/etc/apache/http.conf,其中默认的起始页已经有index.php了,打开php的支持,把
#AddType application/x-httpd-php .php
#AddType application/x-httpd-php-source .phps
前的注释去掉,顺便修改字符集 AddDefaultCharset on 为 AddDefaultCharset gb2312。如果在/etc/apache/modules.conf中没有libphp4.so则增加LoadModule php4_module /usr/lib/apache/1.3/libphp4.so
在/var/www下增加一个简单的php文件phpinfo.php包含:
phpinfo();
?>
重启apache: /etc/init.d/apache restart,出错: Cannot load /usr/lib/apache/1.3/libphp4.so into server: /usr/lib/apache/1.3/libphp4.so: undefined symbol: unixd_config。Google找到原因,是因为默认的apt-get install 的php4是支持apache2的,安装
apt-get install libapache-mod-php4
解决问题,重起访问http://localhost/phpinfo.php看到熟悉的画面。PHP支持完成。
4、配置MySQL :
为了使PHP和Mysql连接,需要配置/etc/mysql/my.cnf文件,简单的可以使用dpkg-reconfigure libmysql-php就可以了
5、配置 Tomcat:
此时已经可以访问tomcat,默认端口是8180,访问http://localhost:8180可以看到Tomcat的默认页面,为了整合Apache和Tomcat,需要实用libapache-mod-jk。这个需要用到workers.properties和一个配置文件,前者在/etc/libapache-mod-jk下面有,后者在/usr/doc/share/libapache-mod-jk下有个httpd_example_apache.conf,可以改名为jk.conf放/etc/apache/mod-jk下,再建立一个文件tomcat.conf来指明需要使用jsp的目录,tomcat.conf如下:
# cat tomcat
Alias /jsp-examples “/var/lib/tomcat5/webapps/jsp-examples”
Alias /myweb “/var/lib/tomcat5/webapps/myweb”
Options Indexes FollowSymLinks
Options Indexes FollowSymLinks
JkMount /jsp-examples/servlet/* ajp13_worker
JkMount /jsp-examples/*.jsp ajp13_worker
JkMount /myweb/servlet/* ajp13_worker
JkMount /myweb/*.jsp ajp13_worker
# The following line prohibits users from directly accessing WEB-INF
AllowOverride None
deny from all
# The following line prohibits users from directly accessing META-INF
AllowOverride None
deny from all
AllowOverride None
deny from all
AllowOverride None
deny from all
这样建立了两个目录jsp-examples是tomcat自带的,myweb是新建的,然后修改/var/lib/tomcat5/conf/server.xml在 后增加说明:
docBase=”webapps/jsp-examples”
crossContext=”false”
debug=”0″
reloadable=”true”>
docBase=”webapps/network”
crossContext=”false”
debug=”0″
reloadable=”true”>
重起Apache和Tomcat5,此时访问http://localhost/jsp-examples可以运行例子了,在myweb下新建jsp文件也可以使用http://localhost/myweb/*.jsp来访问了。此时再在apach的配置文件httpd.conf中增加index.jsp作为DirectoryIndex的一种起始页,完成整合。
Reference:

  1. http://www.linuxsir.org/bbs/showthread.php?t=99049
  2. mod_jk:
  3. tomcat:

[VC2003]Debug无错,Release出错一例

1、现象:Release时总是说一个函数无法链接。
原因:在CSpaceRobotDoc的头文件中申明了一个全局函数,实现在其定义文件内。CSpaceRotoDoc.cpp有自动生成的代码
// CSpaceRobotDoc 诊断
#ifdef _DEBUG
void CSpaceRobotDoc::AssertValid() const
{
CDocument::AssertValid();
}
void CSpaceRobotDoc::Dump(CDumpContext& dc) const
{
CDocument::Dump(dc);
}
#endif //_DEBUG
结果不小心把函数定义放在了#endif之前,所以在Release时没有这个函数的定义。
2、现象:Release出错,Debug无错:
原因:以前在别的机器上编译的obj文件存在,release时没有重新生成。clean building之后重新编译问题解决

[C++] Constant Member Functions

Declaring a member function with the const keyword specifies that the functi
on is a “read-only” function that does not modify the object for which it is
called.To declare a constant member function, place the const keyword after the clo
sing parenthesis of the argument list. The const keyword is required in both
the declaration and the definition. A constant member function cannot modif
y any data members or call any member functions that aren’t constant.
就是类的成员函数如果声明const在最后则表示该函数不会修改该类的任何成员变量
Const的使用可以参见NewSmth的Cplusplus版精华区voidluner的[FAQ]const使用详解

仿真程序

1、滤波代码中G和q的含义:对于离散的机动模型,形式为xk+1=F3xk+G3wk,那么对应的G3即为程序中的G,而wk的方差则为qk,对于多个变量则q为数组Vec。程序中需要计算噪声项的协方差矩阵Q,即是通过GqG’来计算的,论中中的Q也是如此计算的。 对应的Bye++的程序中是Addative_predict_model,如果需要直接给出Q,则可以继承Unscented_predict_model.
2、Assertion failed occmgr line:410 问题主要是由于注册过的activeX控件被移动了位置,这也是某次改变上层目录名称造成程序出错的原因.
3、VisualServo初始估计错误原因:在于没有正确地初始化和重起后初始化位置信息
4、把程序移动到别的机器上,需要配置进行两个方面的配置。一是注册ntgraph.ocx,regsvr32 NTGraph.ocx,二是需要在Tool->Options->Project中重新配置boost的目录。在编译之前最好clean一下。

[VC]图形工具条、进度条、 CVS、NTGraph等

1、使用Toolbar Creator创建需要的工具条(正常和失效)

2、使用http://www.codeproject.com/docking/TrueColorToolBar.asp中的两个文件加入

项目,使用CTrueColortoolBar替代MainFrame中的CToolBar并在OnCreate函数中增加m_wndToolBar.LoadTrueColorToolBar(48, IDB_NORMAL, IDB_NORMAL, IDB_DISABLED);其中第一个数字为一个按钮的宽度,后面分别是normaldisabled时候图片对应的resource ID

二、在状态栏上添加进度条:

使用CProcessBar,codeproject上可以找到。

三、MFC相关:

1、程序退出

直接关闭程序会给CMainFrame发送WM_CLOSE消息,调用CFrameWnd::OnClose进行关闭的处理,其他的ID_APP_EXIT,也是通过发送WM_CLOSE信息实现的,如果在在关闭前处理一些事务,则可以在CMainFrame中重载OnClose函数,此时如果要访问View,直接引入头文件会造成错误,可以在CMyView申明之前加上class CMyDoc;的申明即可。

2、处理系统菜单等:GetSysMenu()获得系统命令菜单进行处理,在precreatewindow中使用cs来设置风格。

四、CVS FOR VC

TamTam CVS: 没有破解,不注册没法用

PushOK Proxy CVS: 不注册可以正常使用30.

目前使用基于Windows窗口的TortoiseCVS,免费推荐!

五、MFC绘图控件NTGraph

参见http://www.codeproject.com/miscctrl/ntgraph_activex.asp

[VC2003] warning C4267 & etc

warning C4267: ‘=’ : conversion from ‘size_t’ to ‘DWORD’, possible loss
of data 您将收到这个警告,因为所有默认 C++ 项目都使用 -Wp64 选项进行编译,该选项会通知编译器监视 64 位可移植性问题。
在项目属性中去掉-Wp64选项可以去掉许多无必要的warning。

gdb 调试程序

1、需要在编译时候增加 -g 选项
2、在emacs中使用 M-x gdb 开始调试,r: 开始运行;b main: 在main初设置端点;l: 打印当前附近的代码; up: 进入上一级函数;p: 打印变量;n: 下一步;s: 下一步(跳入函数);现就记住这些