千里之行,始于足下

酌贪泉而觉爽,处涸辙而犹欢

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  34 随笔 :: 0 文章 :: 192 评论 :: 10 引用

2007年11月19日 #

话说今日,单位内部召开大型电视电话会议,从技术部请来一位MM负责保证通信畅通。该MM一看就是极为好学,带着自己的本本过来报到,会议开始以后,就躲到休息室内自行学习去了。

会议间隙,走进休息室,MM正在电脑屏幕上大展神来之笔,一幅抽象主义水彩画正在她的笔下逐渐成型,当下心生赞叹,没想到技术部还有这样的人才,不由得景仰之情有如滔滔江水连绵不绝。突然想起自家的厨房正好缺一幅画,于是乎上前搭讪:

我:“这是什么?”

MM:“这是PhotoShop。”

我汗:“你在做什么?”

MM:“PhotoShop,是一个做图软件”

我巨汗之下,半响无语。叹息一声,转身走出了休息室。

虽然昨天喝多了,有些辞不达意,可是,可是我看上去真的那么象电脑白痴吗?
posted @ 2007-11-19 17:59 sunwaywei 阅读(468) 评论(4) 编辑

2007年6月29日 #

自从家里的电信宽带由包年换成所谓的套餐之后,每月的上网时间就必须要控制在150小时以内,于是乎被迫将无线路由器由自动上网改成手动上网。每次上网必须要先打开路由器控制页面,再用Excel计时,对于我这样出类拔萃的懒人来说,不免有些嫌烦。好容易乘工作之闲,再次写了一个上网助手,直接控制无线路由器的连接和断线,同时自动进行计时,用起来果然方便许多。



上面是程序运行时的界面,图中可以看到每天的上网总时间,以及每次连接和断线的时间;还能一并看到余下每天可用的平均上网时间。程序可以最小化到托盘,允许直接在TrayIcon的弹出菜单上进行连接和断线操作。

以下从代码说明此程序的核心功能部分:

const BasicUrl = 'http://192.168.1.1/';
const ConnectUrl = 'http://192.168.1.1/userRpm/StatusRpm.htm?Connect=连%20接&wan=1';
const DisconnectUrl = 'http://192.168.1.1/userRpm/StatusRpm.htm?Disconnect=断%20线&wan=1';

这三行是TP-LINK无线路由器的基本设定URL。

procedure TMainForm.InitializeRouter;
begin
 IdHttp1.Request.Accept := 'image/gif, image/x-xbitmap, image/jpeg, ' +
  'image/pjpeg, application/x-shockwave-flash, ' +
  'application/vnd.ms-powerpoint, application/vnd.ms-excel, ' +
  'application/msword, */*';
 IdHttp1.Request.Referer := 'http://192.168.1.1/';
 IdHttp1.Request.Host := '192.168.1.1';
 IdHttp1.Request.AcceptLanguage := 'zh-cn';
 IdHttp1.Request.AcceptEncoding := 'gzip,deflate';
 IdHttp1.Request.UserAgent := 'Mozilla/4.0(compatible;MSIE 6.0;Windows NT 5.2;)';
 IdHttp1.Request.Connection := 'Keep-Alive';
 IdHttp1.Request.Password := '******';
 IdHttp1.Request.Username := 'sunwaywei';
end;

这个函数是初始化路由器连接。程序使用IdHTTP组件来向路由器发送HTTP请求,函数中对请求的参数配置进行了基本设定。

procedure TMainForm.DoConnect;
begin
 IdHttp1.Get(BasicUrl);
 IdHttp1.Get(ConnectUrl);
 FOnline := True;
 FOnlineFrom := Now;
end;

procedure TMainForm.DoDisconnect;
begin
 IdHttp1.Get(BasicUrl);
 IdHttp1.Get(DisconnectUrl);
 FOnline := False;
 DBModule.InsertNewTimeRec(FOnlineFrom, Now);
 FillDateList;
 GetStatistics;
 UpdateStatistics;
end;

以上两个函数控制路由器进行连接或是断线。在开发这里的时候,我发现很奇怪的现象,即在访问ConnectUrl或是DisconnectUrl之前,必须先访问一次BasicUrl,这样操作才能够成功。很奇怪,我也不理解为何会如此。总之是这样一做之后,就OK了。

上网计时部分对于有一些编程经验的人来说,应当是不太难的。从DoDisconnect函数中可以看到,当断线的时候,把本次上网时间插入数据库即可。至于按日期分类显示什么的功能,只要理清数据关系,也没什么难度。以下给出我所使用的几个SQL语句,供有兴趣的人参考或是批评指正。

const sqlGetDateList =
 'SELECT DateValue(FromTime) as [Date],' +
 'Sum(DateDiff("n", FromTime, ToTime)+1) as TotalTime ' +
 'FROM TimeRec ' +
 'where FromTime >= DateSerial(Year(Now),Month(Now),1) ' +
 'group by DateValue(FromTime) ' +
 'order by DateValue(FromTime) desc';

const sqlTotalMinutes =
 'select Sum(DateDiff("n", FromTime, ToTime)+1) as TotalTime ' +
 ' from TimeRec where FromTime >= DateSerial(Year(Now),Month(Now),1)';

const sqlTodayMinutes =
 'select Sum(DateDiff("n", FromTime, ToTime)+1) as TotalTime ' +
 ' from TimeRec where FromTime >= DateSerial(Year(Now),Month(Now),Day(Now))';

说明一下,我使用的是Access数据库,所以SQL语句中使用的Access函数。使用Sql Server的话还是需要修改的。

posted @ 2007-06-29 22:50 sunwaywei 阅读(1069) 评论(4) 编辑

2006年12月30日 #

用Excel 2007做了个简单的上网时间计算程序,之前一直挺好,到了本月的倒数第二天,却发现了一个奇怪的现象,开始认为是Excel 2007的Bug,后来才发现是日期格式设置有误,呵呵。

 

请看上图,I15单元格是I13单元格除以I14单元格的结果,在剩余天数大于1的时候,剩余平均值计算一直是正确的,但到了今天,只剩下1天的时候,显示结果却不正确了。

后来仔细看了一下,才发现单元格的日期格式设置不正确,改为[h]:mm:ss之后,显示就正确了。

posted @ 2006-12-30 16:03 sunwaywei 阅读(1791) 评论(2) 编辑

2006年12月27日 #

摘要: 在.net framework中,绘制图形一般是使用Graphics.DrawImage方法,但是这个方法在许多时候有明显的缺陷。阅读全文
posted @ 2006-12-27 18:11 sunwaywei 阅读(2126) 评论(10) 编辑

2006年11月2日 #

摘要: 刚刚在开发中发现,在使用 ASP.NET AJAX 的 UpdatePanel 控件时,其内部不能使用 JavaScript 语言来写页面,否则的话,当 UpdatePanel 更新其内容时,使用 JavaScript 所写的页面部分将不会重新写入。阅读全文
posted @ 2006-11-02 00:13 sunwaywei 阅读(2099) 评论(6) 编辑

2006年9月22日 #

摘要: Chuck Jazdzewski 是我比较崇拜的人物之一,昔年Delphi VCL的主要设计者,如今在微软据说主要做WPF,他在他的博客里写了一篇文字,个人认为很值得一读,不管是新手还是老手。  地址:http://www.removingalldoubt.com/PermaLink.aspx/a32977e2-cb7d-42ea-9d25-5e539423affd阅读全文
posted @ 2006-09-22 13:20 sunwaywei 阅读(1015) 评论(0) 编辑

2006年9月13日 #

摘要: 近段时间实在是比较忙。最开心的事莫过于期待以久的房子终于确定下来了,估计月底左右可以拿到钥匙,这阵子每逢俺那口子休息,总是要一起去看装潢材料什么的,用来构思论文和从事开发的时间明显地没有以前多了。半年以前参与的那个CGI的项目这段时间客户反馈说有相当严重的性能问题,当用户的数据记录达到500条左右时,执行某些操作用时居然要达到惊人的65秒,恐怕没有几个客户愿意使用这样慢吞吞的系统。两周以来一直在从...阅读全文
posted @ 2006-09-13 22:04 sunwaywei 阅读(400) 评论(0) 编辑

2006年8月21日 #

摘要: 关于ExecuteEngineException,在.net framework SDK中有这样的描述:“执行引擎错误是致命错误,决不应该发生。此类错误主要是在执行引擎被破坏或丢失数据时发生的。系统会随时引发此异常。在可能的情况下,系统将引发比 ExecutionEngineException 异常能提供更多信息的异常。应用程序不应引发 ExecutionEngineException...阅读全文
posted @ 2006-08-21 20:33 sunwaywei 阅读(1532) 评论(4) 编辑

2006年8月11日 #

摘要: 8月4日中了那个所谓病毒的时候,我发现explorer.exe每次启动的时候都会带一个IEXPLORER.EXE,后来用IceSword似乎是解决了,当时也就放松了警惕,现在想起来,真是惭愧啊惭愧。今天早晨开机的时候发现explorer.exe启动时总会出错,弹出一个错误报告窗口,然后界面基本就卡死了。此时似乎只能按Win+L切换到另一个管理员帐号,将被卡住的explorer.exe终止,再切换到...阅读全文
posted @ 2006-08-11 10:44 sunwaywei 阅读(848) 评论(0) 编辑

2006年8月8日 #

摘要: 昔年令Borland扬名天下的Turbo系列开发工具即将回归!对于象我这样从Turbo Pascal、Turbo C、Borland C++而走上编程之路的人来说,确实是一件令人兴奋的事。  相关链接:http://www.turboexplorer.com/  此次Turbo系列将首推四种产品:Turbo C++、Turbo Delphi、Turbo Delphi .net、Turbo C#。每...阅读全文
posted @ 2006-08-08 19:28 sunwaywei 阅读(1249) 评论(4) 编辑