安装了latex for wordpress插件,测试一下

从网站http://wordpress.org/extend/plugins/latex/下载安装的

先弄两个公式试试看吧

E=mc^2

网站迁移到justhost.com的虚拟主机上了

以前网站服务器放在家里,用的长城宽带,虽说网速慢,由于长城宽带和电信间有壁垒,电信的用户无法访问我的网站,但至少联通、网通啥的还能访问。但最近这些非电信的网络也不能访问我的网站了。要彻底解决这个问题,唯一的方法是我花费高昂的费用申请固定ip,然后做什么网站备案。国内这些服务商不想着法的提高服务质量,反而变着法的给用户制造困难,于是乎,我将网站整体迁移到国外justhost.com的虚拟主机上了,不但电费省下了,还不用备案,可是我的服务器就成摆设了,亏我辛苦的装机器、装系统、查资料架设网站,费心费力才攒成的服务器,心痛啊,很怀念以前自己维护自己的服务器的日子,在那什么都是自己的日子里,真的很开心!

 

用51单片机简单做了个无线测温装置

主要设备和实现的功能:

两个51单片机开发板,和两个NRF905无线模块,一个开发板作为从机,利用机上的ds18测温度,然后通过NRF905发送给主机,主机通过NRF905接收从机温度信息,在12864液晶屏上显示的同时,通过串口将数据发送个pc。

效果如图:

 

 

linux下用C编写的基于smtp的邮件发送程序

我的webf服务器是动态ip,因此需要检测服务器ip的变化然后更新域名的ip,打算检测到ip变化后自动发送邮件告知自己,于是上网搜了下编程发送邮件的方法,大部分是基于vc的,我找了个例子修改成了linux下的程序。这个程序是基于smtp协议的,smtp是基于tcp的,有兴趣的可以先自己看看smtp协议,这样看程序会更容易理解。

这个程序目前126的邮箱经测试成功发送,新浪的虽然显示发送成功但是总也收不到,有空再慢慢实验吧,其他邮箱还未测试。

程序如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <errno.h>
#include <unistd.h>
#include <netinet/in.h>
#include <limits.h>
#include <netdb.h>
#include <arpa/inet.h>
#include <ctype.h>

// Function prototype
void StreamClient(char *szServer, short nPort, char *szMessage);
// Helper macro for displaying errors

////////////////////////////////////////////////////////////

int main(int argc, char **argv)
{
char hostname[255];
int nRet;
short nPort;
nPort =25;
StreamClient("smtp.126.com", nPort, "AUTH LOGIN\r\n");
return 0;
}

////////////////////////////////////////////////////////////

void StreamClient(char *szServer, short nPort, char *szMessage)
{

int sockfd;
char buffer[1024];
struct sockaddr_in server_addr;
struct hostent *host;

if((host=gethostbyname(szServer))==NULL)/*取得主机IP地址*/
{
fprintf(stderr,"Gethostname error, %s\n", strerror(errno));
exit(1);
}

if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)/*建立SOCKET连接*/
{
fprintf(stderr,"Socket Error:%s\a\n",strerror(errno));
exit(1);
}

/* 客户程序填充服务端的资料 */
bzero(&server_addr,sizeof(server_addr));
server_addr.sin_family=AF_INET;
server_addr.sin_port=htons(nPort);
server_addr.sin_addr=*((struct in_addr *)host->h_addr);

/* 客户程序发起连接请求 */
if(connect(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))==-1)/*连接网站*/
{
fprintf(stderr,"Connect Error:%s\a\n",strerror(errno));
exit(1);
}

printf("\nStream Client connecting to server: %s on port: %d",szServer, nPort);

char szBuf[1024];
memset(szBuf,0,1024);
int nRet;
// strcpy(szBuf, "From the Client");
char buf[350]="0";
char server[250];
gethostname(server,250);
strcpy(buf, "HELO ");

strcat(buf, szServer);
strcat(buf, " \r\n");
printf("%s:::%d",buf,strlen(buf));

//
// Wait for a reply
//
nRet = recv(sockfd,szBuf,sizeof(szBuf)+1,0);  printf("\nData received OVER DATA: %s", szBuf);

nRet = send(sockfd, buf, strlen(buf), 0);printf("\nsend %s",buf);
nRet = recv(sockfd, szBuf, sizeof(szBuf), 0); printf("\nData received2: %s", szBuf);

//发送准备登陆信息
nRet = send(sockfd, "AUTH LOGIN\r\n", strlen("AUTH LOGIN\r\n"), 0);
nRet = recv(sockfd, szBuf, sizeof(szBuf), 0); printf("\nData received LOGIN: %s", szBuf);

//发送用户名和密码,这里的用户名和密码必须用base64进行转码,发送转码以后的字符串,对于126邮箱来说用户名是@前面的字符串
nRet = send(sockfd,"转码后的用户名\r\n", strlen("转码后的用户名\r\n"),0);printf("\nData Send USERNAME");
nRet = recv(sockfd, szBuf, sizeof(szBuf),0);printf("\nData received USERNAME: %s", szBuf);printf("\nData Send PASS");

//发送用户密码
nRet = send(sockfd,"转码后的密码\r\n", strlen("转码后的密码\r\n"), 0);
//printf("\nData Send PASS");
nRet = recv(sockfd, szBuf, sizeof(szBuf),0); printf("\nData received USERPASSWORD: %s", szBuf);

//发送[发送邮件]的信箱(改成你的邮箱!),该邮箱要与用户名一致,否则发送不成功
send(sockfd,"MAIL FROM: <server_ip_alert@126.com>\r\n",strlen("MAIL FROM: <server_ip_alert@126.com>\r\n"),0);printf("\nsend MAIL FROM\n");
nRet = recv(sockfd, szBuf, sizeof(szBuf), 0);printf("\nData received MAILFROM: %s", szBuf);

//发送[接收邮件]的邮箱
nRet= send(sockfd,"RCPT TO: <tootoogo@hotmail.com>\r\n",strlen("RCPT TO: <tootoogo@hotmail.com>\r\n"),0);printf("\nsend RCPT TO\r\n");
nRet = recv(sockfd, szBuf, sizeof(szBuf), 0);   printf("\nData received TO MAIL: %s", szBuf);
/*
nRet= send(sockfd,"RCPT TO: <server_ip_alert@hotmail.com>\r\n",strlen("RCPT TO: <server_ip_alert@hotmail.com>\r\n"),0);printf("\nsend RCPT TO\r\n");
nRet = recv(sockfd, szBuf, sizeof(szBuf), 0);   printf("\nData received TO MAIL: %s", szBuf);
*/
char MailData[] ="From: \"server_ip_alert@sina.com\"<server_ip_alert@sina.com>\r\nTo: tootoogo@hotmail.com\r\nSubject: IP Address\r\n\r\n"; //主题可以改成别的

//各诉邮件服务器,准备发送邮件内容

send(sockfd,"DATA\r\n", strlen("DATA\r\n"),0);printf("\nsend DATA\n");
//  nRet = recv(sockfd, szBuf, sizeof(szBuf)+1, 0); printf("\nData receivedSEND DATA: %s", szBuf);
//发送邮件标题
send(sockfd,MailData, strlen(MailData),0);
//发送邮件内容
send(sockfd,"test!!!!\r\n", strlen("abcdefg\r\n"),0);//我随便写了几个字符进行测试
//发送邮件结束
send(sockfd,"\r\n.\r\n", strlen("\r\n.\r\n"),0);
//接收邮件服务器返回信息
nRet = recv(sockfd,szBuf,sizeof(szBuf),0);  printf("\nData received OVER DATA: %s", szBuf);
send(sockfd,"QUIT\r\n", strlen("QUIT\r\n"),0);
nRet = recv(sockfd,szBuf,sizeof(szBuf),0);  printf("\nData received QUIT: %s", szBuf);

//
// Display the received data
//
//printf("\nData received3: %s", szBuf);

close(sockfd);
return;
}

参加政协徐汇区委员会委员学习会

时间:2012年4月10日

地点:区政协2楼会议室

这次会议是区政协委员的学习会,我虽不是政协委员,但是学社发了会议通知,应该是要求我们参会提高一下自己的政治素养,于是我准时参会。

会上区委书记孙继伟给与会委员做了区情报告。孙书记多次强调徐汇当前的目标是要建设成“一流中心城区”,这一目标不是空穴来风,因为徐汇GDP排在上海各区的第二位,且资源丰富,例如,拥有120多家研究所,拥有上海市80%左右的文艺团体。同时,孙书记要求大家树立平和价值观,为人建筑城市;多一点精心典雅,少一点杜绝浮华造作。

最后,孙书记介绍了徐汇当前的一些重大项目,特别重点的介绍了滨江的开发。

孙继伟(左)

九三徐汇区委学习两会精神

时间:2012年3月20日,下午1:30-3:00

地点:区政协2楼大礼堂

上海市委副主委钱峰(长江学者,政协委员,华东理工大学副校长),给我们传达了两会精神,和他在两会期间的所见所闻,受教匪浅。2012年是十二五最关键的一年,可能比较困难,“人民需政府要冷静、果敢和诚信,政府需要人民的信任、支持和帮助”(温家宝),期待着中国会在这一年会有更好地发展。

 

会议现场

左钱峰(上海市副主委),右主国建(徐汇区主委)

转载:opencv2.1的arm移植

OpenCV是Intel支持的开源计算机视觉库。它由一系列C函数和少量C++类构成,实现了图像处理和计算机视觉方面的很多通用算法。它不依赖于其它的外部库—尽管也可以使用某些外部库。

 

OpenCV使用BSD License,对非商业应用和商业应用都可以免费使用。

 

OpenCV的主要应用环境是Windows和Linux,对于嵌入式系统如arm-linux,很少有资料提到,因此将我在arm-linux编译过程记录下来和大家分享。
预备工作:

 

a. 安装交叉编译链
我使用的是arm-linux-gcc 4.3.2,解压到目录/usr/local/arm/4.3.2,然后在环境变量PATH中增加/usr/local/arm/4.3.2/bin

b. 安装CMake
OpenCV 2.0之后的版本,必须使用CMake创建Makefile。我使用的CMake版本是2.8.2,解压到目录/usr/local/cmake- 2.8.2-Linux-i386,然后在环境变量PATH中增加/usr/local/cmake-2.8.2-Linux-i386/bin
编译OpenCV:


1、解压OpenCV 2.1到/usr/local/OpenCV-2.1.0目录下

 

2、创建/usr/local/opencv-arm/目录,作为CMake编译arm版本的工作目录

 

3、在X环境下,运行cmake-gui
选择源代码目录:/usr/local/OpenCV-2.1.0
选择Build目录:/usr/local/opencv-arm/
点击Configure,保持generator为Unix Makefiles,选择Specify options for cross-compiling,点击Next
Operating System填写arm-inux
C Compilers填写/usr/local/arm/4.3.2/bin/arm-linux-gcc
C++ Compilers填写/usr/local/arm/4.3.2/bin/arm-linux-g++
程序库的Target Root填写/usr/local/arm/4.3.2/,然后点击Finish

修改默认配置,默认安装目录为/usr/local,对于交叉编译的库来说并不合适,所以我把CMAKE_INSTALL_PREFIX变量改为/usr/local/arm/lib/opencv/
另外,我没有安装tiff图像的支持,因此去掉WITH_TIFF

点击Generate生成Makefile

 

4、在终端界面中,进入目录/usr/local/opencv-arm,运行make编译opencv

 

编译时发现如下错误:
Linking CXX executable ../../bin/opencv_createsamples
../../lib/libcxcore.so: undefined reference to `clock_gettime'
../../lib/libcxcore.so: undefined reference to `pthread_key_create'
../../lib/libcxcore.so: undefined reference to `pthread_getspecific'
../../lib/libcxcore.so: undefined reference to `pthread_setspecific'

原因是cmake不认识我定义的arm-linux系统标记,没有加上库pthread和rt的链接选项

 

5、修改CMakeCache.txt,CMAKE_EXE_LINKER_FLAGS原来为空,加上-lpthread -lrt,重新编译,错误消除

 

6、运行make install,将opencv生成的库和头文件安装到目录/usr/local/arm/lib/opencv/

 

测试OpenCV库

 

1、首先确认一下库是否已编译正确及其安装位置

 

查看头文件:

 

    1. [root@localhost opencv-arm]# ls /usr/local/arm/lib/opencv/include/opencv/
    2. cvaux.h    cvcompat.h  cv.hpp        cvtypes.h  cvvidsurv.hpp  cxcore.h    cxerror.h  cxmat.hpp  cxoperations.hpp  highgui.h    ml.h
    3. cvaux.hpp  cv.h        cvinternal.h  cvver.h    cvwimage.h     cxcore.hpp  cxflann.h  cxmisc.h   cxtypes.h         highgui.hpp

 

 

查看库文件:

  1. [root@localhost opencv-arm]# ls /usr/local/arm/lib/opencv/lib
  2. libcv.a  libcvaux.a  libcvaux.so  libcv.so  libcxcore.a  libcxcore.so  libhighgui.a  libhighgui.so  libml.a  libml.so2、 写个简单的测试程序,打开摄像头并创建一个窗口显示 
      1. // test.cpp
      2. #include <cv.h>
      3. #include <cxcore.h>
      4. #include <highgui.h>
      5. int main()
      6. {
      7.         CvCapture* capture = NULL;
      8.         IplImage* frame = NULL;
      9.         if( !(capture = cvCaptureFromCAM(-1)))
      10.         {
      11.                 fprintf(stderr, "Can not open camera./n");
      12.                 return -1;
      13.         }
      14.         cvNamedWindow("video", 1);
      15.         while(frame = cvQueryFrame( capture ) )
      16.         {
      17.                 cvShowImage("video", frame);
      18.         }
      19.         cvDestroyWindow("video");
      20.         cvReleaseCapture(&capture);
      21.         return 0;
      22. }

    #include <cv.h>
    #include <cxcore.h>
    #include <highgui.h>

    int main()
    {
    CvCapture* capture = NULL;
    IplImage* frame = NULL;

    if( !(capture = cvCaptureFromCAM(-1)))
    {
    fprintf(stderr, "Can not open camera./n");
    return -1;
    }

    cvNamedWindow("video", 1);

    while(frame = cvQueryFrame( capture ) )
    {
    cvShowImage("video", frame);
    }

    cvDestroyWindow("video");
    cvReleaseCapture(&capture);
    return 0;
    }

    3、编译链接测试程序

     

    arm-linux-g++ -I/usr/local/arm/lib/opencv/include/opencv/ -L/usr/local/arm/lib/opencv/lib/ -lcv -lcxcore -lhighgui -lpthread -lrt -o test test.cpp

     

    4、复制程序到嵌入式系统中运行

     

    首先复制主机/usr /local/arm/lib/opencv/lib/下面的几个.so文件到嵌入式Linux系统的/lib/目录下,再复 制我们编译的test到嵌入式系统/opt/myworks/目录下(并确保文件test属性为可执行),如果test可正常运行没有报告缺少库文件,说 明我们编译的arm-linux版OpenCV库已经可以正常使用。

弄到了一套DevKit8000 arm开发套件,打算玩玩arm呵呵

性能还是很强悍的,基于OMAP3530处理器,板载128MByte DDR SDRAM及128MByte NAND Flash 支持DVI-D/S-Video/TFT-LCD三种显示输出,可输出高清信号 外扩USB OTG,串口,网口,摄像头,音频,SD/MMC,键盘等接口 支持WinCE 6.0及Linux2.6.28系统

 

 

OpenCV cvVideoWriter使用方法和例子

CvVideoWriter* cvCreateVideoWriter ( const char* filename, int fourcc, double fps, CvSize frame_size, int is_color=1 );
filename 输出视频文件名。
fourcc为 四个字符用来表示压缩帧的codec 例如:
CV_FOURCC('P','I','M','1') = MPEG-1 codec
CV_FOURCC('M','J','P','G') = motion-jpeg codec
CV_FOURCC('M', 'P', '4', '2') = MPEG-4.2 codec
CV_FOURCC('D', 'I', 'V', '3') = MPEG-4.3 codec
CV_FOURCC('D', 'I', 'V', 'X') = MPEG-4 codec
CV_FOURCC('U', '2', '6', '3') = H263 codec
CV_FOURCC('I', '2', '6', '3') = H263I codec
CV_FOURCC('F', 'L', 'V', '1') = FLV1 codec
若编码器代号为 -1,则运行时会弹出一个编码器选择框.
fps 被创建视频流的帧率。
frame_size 视频流的大小。
is_color 如果非零,编 码器将希望得到彩色帧并进行编码;否则,是灰度帧(只有在Windows下支持这个标志)。
函数cvCreateVideoWriter 创建视频写入器结构。

 实例程序

example.c:

编译使用(在archlinux 3.2.8-1下顺利编译)

g++ `pkg-config opencv --cflags --libs` -o a.out example.c

#include "cv.h"
#include "highgui.h"
#include "cxcore.h"
#include <stdio.h>
IplImage* myframe,*frame;
CvVideoWriter * pVW=NULL;

CvCapture* capture=0;

int main(int argc, char* argv[])
{

capture= cvCaptureFromFile("1.avi");//open 1.avi
pVW=cvCreateVideoWriter("tmp.avi",CV_FOURCC('U', '2', '6', '3') ,25,size,1);
while(1)

{

frame=NULL

frame = cvQueryFrame(capture);

if(frame==NULL)break;

cvWriteFrame(pVW,frame);

 

}

return 0;

}

原创:dyndns使用经验(Arclinux or Freebsd)之二

前段时间自己弄个服务器,由于没有固定的ip,自己的路由不带动态dns更新服务,于是自己弄了个程序借助dyndns提供的ddclient更新动态ip,详情见《原创:dyndns使用经验(Arclinux or Freebsd下)》,最近新入手netgear的jwnr2000路由器,虽然自带了动态dyndns更新服务,但是用了几天发现更新的ip不准确,于是自己把以前的程序改进了下,以前的程序使用网页检测自己的ip,这次利用lynx直接从路由的状态页面读取wlan口的ip,并利用ddclient使用路由器状态页面进行dyndns。

ddclient利用路由器的状态页面更新的配置文件,如下

/etc/ddclient/ddclient.conf

## ddclient configuration file
daemon=600
syslog=yes
mail-failure=XXX@hotmail.com # Mail failed updates to user
fw-login=路由用户名,fw-password=路由密码
use=fw, fw=http://192.168.1.1/RST_status.htm, fw-skip='IP Address'

#根据你的路由器设置fw选项,要设置为路由的状态页面,fw-skip是搜索到'IP Address'这个字段,并将该字段后的信息作为ip进行更新,我是这么猜想的,因为当路由器设置为中文界面的时候更新就失败了
login=你的dynsnd用户名
password=你的密码
protocol=dyndns2
server=members.dyndns.org
## Dynamic DNS hosts
你的dyndns二级域名.dyndns.org

 

用于自动检测ip变化,并在变化后自动调用ddclient更新dynsnd的小程序

#include <stdio.h>
#include <string.h>
main()
{

char data[1024],data_bak[1024];
FILE *f;
int i;
memset(data,0, 1024);
memset(data_bak,0,1024);
while(1)
{
system("lynx -dump -auth=admin:xxxxx http://192.168.1.1/RST_status.htm |grep \"IP Address\" > /tmp/router_ip.txt");

//使用lynx登陆路由界面,并将路由状态页面进行过滤,仅将ip存储到文件router_ip.txt, 该命令行是为我的Netgear jwnr2000设计的你可以根据需要进行改变
system("lynx -dump -auth=admin:XXXXX http://192.168.1.1/LGO_logout.htm > /tmp/myddclient_null.txt");

//退出路由界面,不然可能造成其他ip用户不能登陆路由管理界面
//命令行是为我的Netgear jwnr2000设计的你可以根据需要进行改变
f=fopen("/tmp/router_ip.txt","r");
if(f!=NULL)
{
i=fscanf(f,"%s",data);
i=fscanf(f,"%s",data);
i=fscanf(f,"%s",data);
//obtain IP from /tmp/router_ip.txt need triple fscan, your file may be different

//这里的读取ip过程也是为我的路由设计的
if(i<=0)
{
printf("/tmp/router_ip.txt format is not correct!\n");
sleep(180);
continue;
}
fclose(f);
if(strcmp(data,data_bak)!=0)
{
printf("old ip:%s\n new ip:%s\n",data_bak,data);
strcpy(data_bak,data);
system("ddclient");
printf("ddclient update ip %s ok!\n",data_bak);
}
sleep(1200);

}
else
{
printf("can not find /tmp/router_ip.txt");
sleep(180);
continue;
}
}

}

第 5 页,共 22 页« 最新...34567...1020...最旧 »