文章归档

编码体力活

今天的活,终于干完了。手都快累死了。内容是这样的,修改一个模块的所有功能字体大小,所有的修改方式都是用鼠标去点击属性,然后双击加+,所有字号改到11号。。这样的重复工作,从早上9点一直干到了5点半,中间手都感觉要抽筋了。。。。 体力,纯正的编码体力活呀。谁让客户觉得字体太小,看着不舒服。 实在不行了,不知道怎么起标题,就写了这么一个标题,哥是标题党不。下面都是我近一周的活动拉。 上次,因为毕业的两个证件打印错误,NND,我去跑了三天修改这个东西,请假请到我都怕了。啥时候是不是就直接不要我了呢。哈哈。 不过好消息是,这周,刚毕业的我们,拿到毕业证后,我们直接转正了。也就是不用在毕业后经过试用期即可转正。 学校宿舍开始赶人。我和班里面的三男三女合租了一套新房,1300每月,六个人平均下来不是很多,而且是电梯房,但是要命的是,这房子太新了,楼下还没有电信接口,哥这一个月看来没法家上网了。 在这样的新房,大家一起煮吃的,很有家的感觉。 这几天,wordpress也升级到3.2了,有的朋友肯定关注我的教程《完美自动保存、禁用版本控制、连续文章ID》还有没有用,之前已经在本地测试过了,只是没有修改那篇教程文章。我也已经升级到 3.2 了,证实,这样改,确实还是有用的。大家可以放心修改。 嗯,上周基本就是这些事情了。嗯,我的行李还没搬完呢,悲催呀,今晚回宿舍收拾一下先。快下班了,写工作日志去。今天拉鼠标到快抽筋,下面要打字才行。

模块化编写代码

在公司,很多编程都需要与代码挂钩,很多都是业务逻辑的实现。这两天需要给很多功能的同一个控件添加模糊查询。需要添加一段函数代码。 这里先放上我自己写的代码。 procedure TCT_DDZY_LZXDJLXX.InputCZXX(); var data : ZYJ_CZXZ.TCZData; begin if (czlistbox.ItemIndex<0) and (czlistbox.Items.Count>0) then begin czlistbox.ItemIndex := 0; end; if czlistbox.ItemIndex<0 then begin Exit; end; czPanel.Visible := False; data := ZYJ_CZXZ.TCZData(czlistbox.Items.Objects[czlistbox.ItemIndex]); DataSetBrokerXX_DDZY_LZXDJLB.DataSet.Edit; DataSetBrokerXX_DDZY_LZXDJLB.DataSet.FieldByName(‘BDZGUID’).AsString :=data.czid; DataSetBrokerXX_DDZY_LZXDJLB.DataSet.FieldByName(‘BDZ’).AsString :=data.czbm; DataSetBrokerXX_DDZY_LZXDJLB.DataSet.Post; end; 下面看看模块化函数的编写方法。 procedure TCT_DDZY_LZXDJLXX.InputCZXX(); var ds : TDataSet; data : ZYJ_CZXZ.TCZData; begin ds := DataSetBrokerXX_DDZY_LZXDJLB.DataSet; if (czlistbox.ItemIndex<0) and …

>>Read more

数据库操作时指定空数据显示信息

整理了一下办公电脑的桌面,发现一个文本文件,里面是一条select语句,忽然想起前些天副组长说的复习SQL语句时的要求,他是随便找了一个表,然后看到里面有日期,提出如下要求: 要求输出这个表的时候,如果日期为空,要求输入一个指定的日期,如果不为空,则输出原来的日期。 说明这个函数,下面构造一个小表吧: 表名 :“T” , 字段一:“BH”,编号 字段二:“RQ”,日期 按照上面要求,使用的函数是 isnull ,然后得到的select语句是: select BH,isnull(RQ, ’2010-1-21 13:05:00′) from T; 但是这样还是出错,因为是日期型记录日期字段,所以还要有固定的格式,使用格式转换函数to_data,所以得到的SQL语句是: select BH,isnull(RQ, to_data(’2010-1-21 13:05:00′,’yyyy-MM-dd HH:mi:ss’)) from T; 这样,就能正确执行了,而且也符合要求,但是企业设计,使用的是Oracle数据库,使用的函数并不是isnull,在Oracle里相对应的函数是nvl,如下: select BH,nvl(RQ, to_data(’2010-1-21 13:05:00′,’yyyy-MM-dd HH:mi:ss’)) from T; 大体解决这个要求的思路就是这样子,由于这里网络原因,这几天没法连上数据库再测试一遍,如有错误,请提出,共同探讨。

近况以及思考

关注本博客的童鞋,应该知道,两天前,我把博客的主题换为了林木木的纯CSS主题,但是今天又换回来的,主要是因为,个人对主题没有很深刻的认识,感觉有些东西没有完善,但是如果加插件,又会对界面产生影响,所以,综合一些因素,我又换回来了,因为现在用着的主题,自己有修改过一些东西,还算完美的。接下来,想做的,就是从现在开始,拿一个wordpress的主题模板,在过年前做一个属于自己的主题。然后年后就开始不断的完善,并开始使用。 最近,个人也在实习,这周一直都很忙,工作的事情都没有很好的做下去,公司年会,有自己的春晚,每个部门都要有节目,我们软件应用部的实习生就被抓去跳舞了,基本上每个晚上都要联系,这一周的工作,第一天去听了一天的培训,第二天请假了,第三天开发服务器崩溃了一天没干活,就一直看文档一天,今天和明天都要参加年末技术交流,所以这周没有得干活,一周就这样过去了。而下周,由于年会后三天时间,也是被技术交流和年终活动给冲掉三天。 在公司实习了这么久,我已经基本上摸透了公司的开发思路,发现,这和我当初的想法,有很大的不同,主要不是在使用什么语言编码上,而是说,编码过程,注重了业务流程,而没有更多的注重编码思路。现在公司很多项目,基本上都是使用第三方开发平台,实现了快速的二次开发,比如一个业务流,需要审核,在审核,在处理的流程,这些流程的过程,并不需要我们思考如何实现,而是开发平台上已经处理好了,剩下的,就只剩下数据提交的编码工作,编码的工作量非常的少,和自己当初的初衷并不完全一致,这样的发展结果是,一个程序员并不知道编码实现的很多原理,而只能使用这样一个平台来实现开发,无法对开发环境,开发思路有很好的,很系统的研究。调用软件部总经理的话说,“我们这里的人,没有一个能够走出去的。”对于这句话,现在感觉自己有很深的理解。 现在有一个思考,如果实习期满,是留下来,待在广西,待在这个公司,继续工作,或者是前往广州,深圳,或者武汉等高薪公司,在底层奋斗两年,这样对于自己的基础更加扎实呢?我看到的不是短期的工资以及奖金,我想,更重要的是今后自己前途的发展,虽然说,我去外省,可能会非常艰苦,但是我想,这样的艰苦,也才能锻炼程序员的意志吧。 今后应该是有点目标的。如果留在现在的公司,那工作只能是平台的delphi语言的系统开发,由于是二次开发,工作量不算很大。那么就自学有关linux下面的图形编程,一个是C+GTK,一个是Python+GTK,然后尽量在每天工作之余,维护自己的个人博客,这里面也是需要学习的,一个是php与css,主要是主题制作,前端设计吧。如果不留在现在的公司,我希望,自己能够到一下使用linux开发的厂商,比如一下底层开发的厂商,做一些C的底层开发,或者是嵌入式开发,虽然现在对这个东西不是很了解,但是我知道,以后应该会是很热门的东西。而了解底层,也是我的一个意愿。毕竟,一切东西,没有了底层的支持,在怎么开发也是无稽之谈。 以上有关开发的观点,也仅是个人观点,如有不对,也请各位童鞋提出,让我能够认真考虑今后的发展路线。

GTK编程:弹出消息窗口

前段时间用 GTK 库写了个 ubuntu 的图形界面,《Gappproxy Ubuntu 客户端 2.0.2 版》,第一版的时候,没有任何提示信息,在这个版本添加了提示信息。 提示信息的代码一直放在桌面,今天整理了一下,才想起要发到博客上来,如果哪位需要支持提示信息,可根据这段代码修改添加到的你 GTK 图形程序中。 //标准的main()函数入口 int main( int argc, char *argv[]) { GtkWidget *dialog;//声明一个对话框 gtk_init(&argc, &argv);//初始化GTK //使用gtk_message_dialog_new()函数新建一个消息对话框 dialog = gtk_message_dialog_new(NULL, //没有父窗口 GTK_DIALOG_DESTROY_WITH_PARENT, //跟随父窗口关闭 GTK_MESSAGE_WARNING, //显示警告图标 GTK_BUTTONS_OK, //显示OK按钮 _(“在迷茫中追逐……n在追逐中迷茫……”)); //提示信息的内容 gtk_window_set_title(GTK_WINDOW(dialog), _(“人生寂寞啊”));//对话框的标题 gtk_dialog_run(GTK_DIALOG(dialog));//运行对话框 gtk_widget_destroy(dialog);//删除对话框 gtk_main();//主函数循环,等待消息 return 0; }//==============main函数结束==================== 好了,代码贴上了,继续整理系统文件。

C编程For循环的一点见解

今天正在学一个字符串处理函数,用到许多 for 循环,其中,我写了两个 for 语句循环如下: for(i=0;i++;i<max) for(z=0;z++;buffer[i][j]!=’:') 在这两个语句编译时,提示出错信息如下:翻译过来就是 警告:语句没有影响 warning: statement with no effect 很纳闷,语句不是对的吗,都是为什么会初小没有影响效果呢?上网搜一下,于是看到了 for 循环的原型,如下: for (expr1; expr2; expr3) { statement } 其中的 expr1 为条件的初始值。expr2 为判断的条件,通常都是用逻辑运算符号 (logical operators) 当判断的条件。expr3 为执行 statement 后要执行的部份,用来改变条件,供下次的循环判断,如加一..等等。而 statement 为符合条件的执行部分程序,若程序只有一行,可以省略大括号 {}。 原来错在,这三个 expr 的顺序不能乱,初始值在前,判定在中,改变变亮语句在后,而我的循环中,就是将这些颠倒了,从 i++ 与 z++ 中,总以为是循环先使用他们的值,再在当次循环结束的时候 +1 。判断可以随便放。与 for 循环原型不符。 于是我将循环改为如下,立即解决问题 for(i=0;i<max;i++) for(z=0;buffer[i][j]!=’:';z++) 记下这篇文章,是要让自己知道,for 循环的语句顺序一定不能变动,不然,即使你觉得是对的,可是写出来的程序,还是不能按照你的意思去处理。

Linux编程:给GTK程序添加任务栏图标

今天在写 Linux 下的 Gappproxy 图形界面,运行后发现,任务栏是难看得 DOS 默认图标,很难看,上网搜了一下,如何添加任务栏图标,现在将代码转换过来,做点小解释吧。 #include <gtk/gtk.h> GdkPixbuf *create_pixbuf(const gchar * filename) { GdkPixbuf *pixbuf; GError *error = NULL; pixbuf = gdk_pixbuf_new_from_file(filename, &error); if(!pixbuf) { fprintf(stderr, “%sn”, error->message); g_error_free(error); } return pixbuf; } int main( int argc, char *argv[]) { GtkWidget *window; gtk_init(&argc, &argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(window), “icon”); gtk_window_set_default_size(GTK_WINDOW(window), 230, 150); gtk_window_set_position(GTK_WINDOW(window), …

>>Read more

Linux编程:创建子进程

这几天看了一下,进程控制和线程控制还有信号以及信号处理,写的很好,但是有的还是很难理解,下面写写如何创建子进程。 我们先来看看进程是什么,进程是一个动态的实体,是程序的一次执行过程,说通俗点,就是运行一个程序的时候,就创建了一个这个程序的进程。 但是有时候,不是一个程序就能解决问题,所以我们必须得创建子进程,去做其他事情,让主进程管理着下面的各种子进程。所以今天来写写创建进程的的代码, Linux下,创建子进程的函数是 fork 函数,使用以下命令获得该函数的声明: man 2 fork #include <sys/types.h> #include <unistd.h> pid_t fork <void> 一般情况下,函数最多又一个返回之,但 fork 函数非常特殊,他有两个返回值,即调用一次,返回两次。成功调用 fork 函数后,当前进程实际已经分裂为两个进程,一个是原来的进程,称为父进程,另一个是刚刚创建的子进程。父子进程再调用 fork 函数的地方分开,fork 函数返回两个值,一个返回给父进程,返回值是刚刚创建的子进程的 ID,另一个返回给子进程,返回值是 0。 下面看看创建子进程的例子。 #include <stdio.h> #include <sys/types.h> #include <unistd.h> #include <stdlib.h> int main(void) { pid_t pid; printf(“Process Creation Studyn”); pid = fork(); switch(pid) { case 0: printf(“Child process is running,CurPid is …

>>Read more

Linux编程:实现Shell环境(二)

参考书本:《Linux C 编程实战》 首先说明,这些代码,是我在学习之后共享出来的,并没有完全的自创,但是对于学习 Linux 编程非常又帮助。这篇文章的实例是为了加强对进程控制的编程强化,学过进程控制,却无法自己控制进程的,读懂这篇文章,你就会对进程控制的全部过程有所了解,但是,你必须学好进程控制的基础知识。 接上篇 Linux编程:实现Shell环境(一) 本文给出上篇程序的代码: #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <sys/types.h> #include <sys/wait.h> #include <fcntl.h> #include <sys/stat.h> #include <dirent.h> #define normal 0 /* 一般的命令 */ #define out_redirect 1 /* 输出重定向 */ #define in_redirect 2 /* 输入重定向 */ #define have_pipe 3 /* 命令中有管道 */ void print_prompt(); /* 打印提示符 …

>>Read more

Linux编程:实现Shell环境(一)

参考书本:《Linux C 编程实战》 首先说明,这些代码,是我在学习之后共享出来的,并没有完全的自创,但是对于学习 Linux 编程非常又帮助。这篇文章的实例是为了加强对进程控制的编程强化,学过进程控制,却无法自己控制进程的,读懂这篇文章,你就会对进程控制的全部过程有所了解,但是,你必须学好进程控制的基础知识。 一、环境介绍 打开Linux终端,会看到这样的一个提示符: name@name-desktop:~$   这个提示符,其实就是Shell环境提示符,name代表你的用户名,name-desktop代表计算机名。~$代表当前Shell环境的根目录在用户的主目录。 这篇文章编程所写的,就是要建立这样一个Shell环境,用于解释用户输入的命令,并运行程序。由于只是简单的Shell环境,我们就让这个环境,能够解释我们并运行ls命令。 二、功能介绍 支持 ls 命令 带1到多个参数的命令 带一个输出重定向的命令 带一个输入重定向的命令 带一个管道的命令 后台运行符&可加在以上各个命令的最后面。 输入exit和logout推出shell环境。 三、错误处理 输入错误的命令格式报错 输入不存在的命令报错 四、程序主函数流程图 五、关键函数的功能及说明 void print_prompt()   该函数只是简单的打印Shell环境提示符,如:MyShell$ void get_input(char* buf)   该函数用来获得一条用户输入的待执行命令,参数buf用于存放输入的命令,我们还可以设定命令长度,如大于256个字符,则终止程序。 void explai_input(char *buf,int *argcount,char arglist[100][256])   该函数用来解析buf中存放的命令,把每个选项存放在arglist中。 do_cmd(int argcount,char arglist[100][256])   该函数用来执行arglist中存放的命令,argcount为待执行命令参数个数 int find_conmand(char *command)   该函数的功能是分别在当前目录下、/bin、/usr/bin目录下查找命令的可执行程序。 六、程序代码 由于程序过长,我将程序代码写到另一篇日志里面去,如果可以两个窗口一起看,对比程序函数,会比较好。 …

>>Read more