2005年03月31日

不知道是怎么回事,自己改的Blog有些问题了.首先是我更改的标题都不能正常显示了,其次是我的钟表不翼而飞了,郁闷中.试了好多遍,也不知道是怎么回事,老天怎么老和我作对啊?我已经够倒霉的了. 

2005年03月28日

引用自MOOD

以下文字转载,出处不详.不代表本人观点.
——————————————–
我是2003年初来华为工作的,随着外界对华为公司的宣传,大家把华为一次又一次的捧高,说华为年薪多少多少,条件是多么多么的优越!我也是在这个时候来到华为的,当时心情是多么的激动.但是经过两年后,我选择了离开.我对华为作了一个工作总结,因为外面很多人都写了很多关于华为,有的是市场,有的是技术支持,有的研发的.但我没有看到有关介绍管理工程部,所以我从这一个角度来分析华为员工,管理工程部是属于干部处理,主要是给公司后台做一些支持,比如网络,NOTESEMAIL,ERP,PDM等. 

1. 华为年薪真有这么高吗? 
随着对华为的了解,我终于知道,华为的工资是很高,但高得都是从2000年以前来华为公司.现在新来员工的工资,转正后,本科生3500元,研究生4500元,这些都是税前的.新来的员工,努力的工作,绝大多数都给了15000号以前工号的员工.这些员工离职的很少.他们每年分红,奖金远远超过了我们3万号以后一年的薪水.大家都说华为有1000元的生活补助,说华为福利怎样怎样的好,其实在华为的人都知道,这些钱包括了生活费,交通费,住房费,比起别的公司提供包吃住来说,一点也不多,在公司什么都是高消费,中午10元一餐就像外面的3元的快餐.住房单间最少要500元,还有物业管理费,有线电视费,什么都收,里面所有都是高消费.如果你住在市内,科技园到华为基地公司班车票10元一张.目前住房又涨价30%.理由是加强流动率.呵呵.

2. 华为员工工作条件好吗? 
华为基地是很漂亮,房子很大,座位也不错,这些都是硬件条件.但我从另一角度来说, 
华为员工软条件是很可怜的,周围的安全实在是太差,很多女同事经常回宿舍被抢,周围经常出现先奸后杀的案件,每月都有刑事案例,经常在电线柱子上看到公安部的寻人启事.我们很少人能上外网,一般申请一个PROXY帐号要经过五六关,经理,BPE,二级主管,总监批准,而且有了PROXY帐号,外面很多网络都已经隔离,像SINA,SOHU等知名网站都隔离了,机器所有端口都封死了,上班想听首歌都不行.电脑不能随便带进来,也很难带出去.能安装的软件少得可能,连WIN2K,WINXP安装都要申请.不然只能用WIN98.很多办公区要申请特殊帐号才能上公司内网.华为工员要记得口令真不少,NOTES,EMAIL(不知为什么华为还用两套系统),域帐号,PROXY,特殊帐号,SSE,工时,华为网校,W3等等,一天和同事开玩笑.数了一下,一共14个口令要记,忘记口令又要罚钱.加班是常饭,记得领导还发表过文章,华为员工要以加班为日常工作.一次EMAIL系统出现故障,开总结大会,个个领导都发表以后要多加班,加班是没有钱的,所有员工都必须多加班. 

3. 华为员工升职的机会多吗? 
因为是IT部门,对华为员工流动还是比较清楚的,因为他们一进来就要开NOTES帐号,2004年华为招了超过9000人次,工号35000-43000.还有没有包括山东华为公司的,工号9万多号的.这些人更惨,工资只有2仟多,现在工程支持都交给他们了,偏远地区都由他们去.华为员工都知道,公司有一个电子公告牌,上面有任职公告,我抽取数据,发现公司经理级别(办事处副主任)以上的.工号在1万号以后的占其任职的不到2%.有一位总裁就曾经说过:”1万号以后的员工不能重用”,所以2万号以后的员工能混个项目组经理或助理当一当就不错了.我认识很多人,进来,干了四年,还是一个小组长,顺便说一下,华为很看不起博士.曾有一位博土离开华为时,认为用人机制是华为最大的悲哀,人力资源的陈某还对北研顾问反馈研发人员流失不以为然,对任何一个要离开华为的人,都可以给他扣上一顶”不认同华为文化”的大帽子,大家背井离乡,来到华为基地农村地方,但是他却极力不本地化,给人的感觉是年轻人在以时间和青春换取金钱,只要给你钱,你就得玩命,很少关心你家庭或平时生活.其实华为今年招了9仠人,真正能干一年以后的不多,今天又要招8仟,可想而知,华为换血有多快,但15000号以前他们是不会离职的. 

4. 华为管理先进吗? 
大家在外面,天天都在吹华为管理是如何选进,特别是IPD,ISC,ERP,信息安全管理等,吹是吹,公司IPD根本没有完全实行,只实行了其中一个模快PDM,从98年开始,到现在都没有真正实行起来.标准很简单,华为公司任何一套系统成熟时都会转产,这个IPD已经实行了6年,到现在还在试运行状态,而高层还在外面宣称今年要达到3.5分.我不知他有没有下去看一下该系统.刚才所说信息安全隔离系统,就是一个**,表面可以隔离网站,比如WWW.SINA.COM主页是隔离的.其实聪明一点的人用TECH.SINA.COM或二级链接就可以进去,其它网站也是这样,这个系统其实就是表面系统,还有病毒,信息安全部还在外面宣传怎样做到位,好像有一个报告专门吹信息安全部的,每一个新病毒,在华为都引起重大的影响.而且这些病毒微软或其它公司很早就发公告了.ERP系统,天天升级,下面员工反馈还不如手工写,提交一个订单要十几分钟.华为运行比较成功还是NOTES应用这一块.哦还有一点,华为考核重结果不重视过程,只看结果,不管过程,仅以成败论英雄,天天叫要输出输出. 

5. 华为的人际关系 
由于公司是暴发式的发展,一些年轻中层主管这些人不知”天高地厚”,傲气十足,盛气凌人,不知道他们是哪里来的这股气.我也做过部门主管,我也有上级主管,我的主管原是一国企中的领导过几万人的一位干部,年龄比我大,态度十分谦和,平易近人,能听取别人的意见,办事十分果断,但从不武断,和这样的领导相比华为的主管太年轻了,有点滑稽可笑,像小丑,基层主管是十分重要的,他们起着承上启下的作用,但是华为的一些基层主管却是在”欺上瞒下”,多吃多沾,只为自己捞好处,把责任推给别人,他们总以为”老子天下第一”!特别是那些工号比较小的,天天混事,找他们办事就像求大爷似的.就像玩世太保一样,相信华为有一天像安然一样倒下去,我一点也不感到奇怪.SO部门只要一出重大故障,一个个推来推来去. 

6. 华为值得你奉献青春吗? 
前阵子,同事转了一篇公司内部员工写的文章<已经四仟人了,你还去干吗?>他写的都是96年以前的事了.我想华为从1998年分线.然后估计在2006分一次.1998年前去华为是幸运的.1998-2006,去华为是看热闹的.2006年以后,去华为公司(公司如果是国际化成功,现在华为对国际化呼声很高(有些领导脑袋太热了)),是过场.说句实在话,新毕业生去华为还是值得的,但不要抱太大的希望,在职业规划中,定为1年半最合适.这几年华为政客太多了,到处宣传华为好的方面,已经摆脱了低调的做事风格了.

2005年03月21日

好长时间没写了,今天加点新东西.

看见Donews在自己的Blog上加了个无用处的导航条,感觉心里很不爽,破坏我的心情,只好想办法干掉他了.当然办法还是可以通过javascript来实现.分析一下现在的网页的源代码,找到如下的字段:<div id=”classnavbar“><a href=”http://new.donews.net/“>滚动</a>| <a href=”http://it.donews.net/”>IT业界</a>| <a href=”http://soft.donews.net/“>软件</a>| <a href=”http://dev.donews.net/“>开发</a>| <a href=”http://server.donews.net/“>服务器</a>| <a href=”http://netbar.donews.net/“>网吧之家</a>| <a href=”http://download.donews.net/“>下载</a>| <a href=”http://diy.donews.net/”>DIY</a>| <a href=”http://digi.donews.net/“>数码</a>| <a href=”http://photo.donews.net/“>贴图</a>| <a href=”http://netcomm.donews.net/“>电信</a>| <a href=”http://internet.donews.net/“>互联网</a>| <a href=”http://game.donews.net/“>游戏</a>| <a href=”http://media.donews.net/“>传媒</a>| <a href=”http://music.donews.net/“>音乐</a>| <a href=”http://movie.donews.net/“>电影</a>| <a href=”http://book.donews.net/“>读书</a>| <a href=”http://emotion.donews.net/“>精神生活</a>| <a href=”http://sport.donews.net/“>体育</a>| <a href=”http://private.donews.net/“>日记</a></div>眼晕了吧?^_^.这就是我们要干掉的代码段.看见蓝色的Id没有,就是用javascript来替换掉里面的内容.classnavbar.innerHTML=”<img src=http://tinypic.com/29akqd align=middle height=141 >”;这就是我添加的内容.src是我的Banner的地址,自己做的,甚是简陋.估计过一段时间会换个好点的.这样,Donews的导航条就不会在我的Blog上出现了,简单吧?下次估计该想想怎么换收藏夹图标了.

2005年03月17日

  大家可能都知道一个小小的U盘能在多短的时间内拷走大量的资料,恐怕有很多人都在想如何保密自己的资料.特别是在对资料保密要求比较高的地方.但是除了微软最新的操作系统Longhorn以外,所有的Win系列操作系统都支持USB(Win95第二版也支持,但现在真有人还在用这个系统吗?).如果有一天你的上司要你把某些机器的USB接口屏蔽了你会怎么办?你会不会想到用注册表来实现.OK,想法是不错,但是,你可以改注册表,别人也可以改注册表,而且Win系统是离不开注册表的.如果你想通过设置用户权限来达到目的,几台机器是好解决,那要是好几十台怎么办?而且这些机器都没有加入域,不好办吧?

  为这个问题我想了好久,都没有找到好的解决办法.如果在BIOS里禁用USB设备,对于以后的维护不方便,主要是每次更新软件都要用U盘在机器上拷的.不同部门间使用的软件还不一样.

到最后我还是决定通过使用注册表来解决问题.然后不让用户访问注册表就可以了.这样就出现了一个问题,在2000/xp下,禁止用户访问注册表的键值是在Current_User底下的.就是说只对当前用户有效,如果你新建个用户他还是能用注册表的.那这样我们就来个绝的,不让你用控制面板,不让你用CPL文件,这下总可以了.当然这些都可以通过修改注册表来实现,那我们核心的禁用注册表怎么实现?这就是我所要讲的最主要的内容了,CMD命令:”CACLS”.我们可以利用这个命令来实现对注册表的控制访问.命令如下:”cacls %systemroot%/regedit.exe /E /D everyone

执行了这个命令之后,谁都改不了注册表了,所以这条命令要等你改完了注册表之后才能使用.如果你想恢复注册表,执行:”cacls %systemroot%/regedit.exe /E /P everyone.当然这样做了后还是能通过别的方法改回来的.因为CMD还是可以用的,计算机管理也是可以用的,组策略也可以用,这样我们还得分别把这些都禁用了.其实如果只是想禁用USB还有比较简单的方法,就是利用上面提到的命令禁用usbstor.inf和usbstor.pnf.

当然我提到的这个命令还可以干别的事,比方说禁止tcp/ip设置什么的,我没研究过,写出这个也只是想和大家讨论下看又没有更好的办法来禁用USB.

2005年03月14日

从ROBS Blog上找到的。

They make Gmail easier to use are starting to pop up on the web, here are the ones I’ve found so far:

  • Official Gmail Notifier from Google (beta) – Downloadable Windows application that alerts you when you have new Gmail messages. /官方的Gmail邮件通知
  • Gmail Search Extension – Search your Gmail account from the Firefox search bar/Firefox中Gmail搜索扩展
  • Gmail Tray – A search box for the Windows taskbar /Windows任务栏中的Gmail搜索
  • Gmail Notifier – Firefox extension, installs an icon on your toolbar that displays the amount of new messages in your inbox (previous post) /Firefox扩展,在工具条上显示你的Gmail收件箱的情况
  • Gmail-to – Associate all mailto: links with Gmail as opposed to Outlook/用Gmail取代Outlook打开邮件链接
  • Gmail-to Bookmarklet – Compose messages from your Gmail account from any page (previous post) /用你的Gmail在任何页面上写评论
  • Gmailit – Bookmarklet to send the current page you’re viewing to someone through Gmail /通过Gmail发送页面
  • GMail Loader (GML) – Cross platform application forwards your existing email to Gmail /把别的Email加入到Gmail中
  • Pop Goes the GMail – Gmail > POP3 converter /Gmail>POP3转换器
  • gExodus – Graphical user interface tool allows you to import your emails into your Gmail account. /允许把图形导入到你的Gmail
  • gCount – a menu bar item for Mac OS X 10.3 or later that displays the number of unread messages in the inbox (Via Google Blogoscoped) /MAC OS X10.3或更新版本中显示你收件箱中未读邮件的数量
  • GMail, RSS Feeds – Retrieve notifications of new mail through RSS /通过RSS回复新邮件
  • Gmail as online backup system – .php script to back up files to Gmail and retrieve them /通过PHP脚本备份文件到Gmail
  • Gmail in Opera – Use Gmail with the Opera browser, which currently is unsupported /通过opera浏览器使用Gmail
  • Gmail Gems – Tips and Tricks to use Gmail more efficiently /Gmail的小技巧
  • Unread Gmail – Create a label called “Unread”, Gmail will automatically add all unread items to it (Via Gmail Wiki) /创建一个”未读”标签,Gmail将自动把未读邮件加入到其中.
  • PINE Addressbook to Gmail – Export addressbook in CSV format from PINE to Gmail. Via here /把Gmail的PINE格式的地址本输出为CSV格式
  • GmailFS – Gmail Filesystem – GmailFS provides a mountable Linux filesystem which uses your Gmail account as its storage medium. (Via Scripting.com) /Linux下的GmailFS系统(虚拟硬盘)
  • GSuite – Lets you access and use Gmail from a mini-browser in the system tray /在系统栏里创建一个迷你浏览器来使用Gmail
  • GmailStatus – Shows the number of unread messages in the Mac OSX menubar /在MAC OS X的菜单栏里显示未读邮件数量
  • gmail copy – Command line utility to copy files to and from gmail (Via del.icio.us) /在Gmail中以命令行方式拷贝文件
  • GMailer (libgmailer) – A PHP library/class that helps you accessing/checking/using GMail through PHP scripts. (A blog that uses this to convert Gmail messages into the blog posts) /通过PHP脚本使用Gmail
  • Gmail icon generator – Create an image of your Gmail address to minimize spam exposure (Via here) /创建Gmail的图标象这样
  • Gmail Agent API – Open Source extensible foundation for interfacing with Gmail. Written for .NET framework/Gmail接口基于.NET Framework的开源软件.

翻译不对的地方还请大家指正

  突然之间有写个自己的加密软件的想法。我想到的算法到是很简单。首先由用户自己输入一个原始的字符串,长度可以不限。程序接收到这个字符串之后,先进行随机的运算,产生一个随机数。然后开始判断用户输入的字符串的长度。这里我想默认的字符串的长度为8位,不足8位的由程序自动补足。如果符合条件,那先把所有的字符串按顺序排出ASCII值。根据先前的随机数来进行移位与换位,比方说交叉排位、顺序颠倒等等。这些判断由随机数的个位数与3的余数来确定。这样完成后,新的密码就产生了。说的挺简单的,可想想好像还有很多东西都没有解决。

2004年12月14日

关于在PB中导出Excel表的问题应该是个老问题了,大家讨论了不知道有多少年了,今天我也遇到了这个问题,上网找了半天大家说什么的都有。总结了一下,把我看到的都贴出来,呵呵。
一.
//  …  Init  docname  
//  …  GetFileOpenName  or  any  other  method  
if  dw_1.SaveAs(docname,  HTMLTable!,  True)  =  -1  then  
       MessageBox(“Warning”,  ”Unable  to  export  data.  Error  writing  to  file!”,  Exclamation!)  
       return  
end  if  
//  Convert  HTML  file  to  Excel  native  format  
OLEObject  excel  
excel  =  CREATE  OLEObject  
if  excel.ConnectToObject(docname)  =  0  then  
       excel.application.DisplayAlerts  =  FALSE  
       excel.application.workbooks(1).Parent.Windows(excel.application.workbooks(1).Name).Visible  =  True  
       excel.application.workbooks(1).saveas(docname,  39)  
       excel.application.workbooks(1).close()  
end  if  
 
DESTROY  excel  
//  done    
好久没有看PB,忘了语法都怎么用。
二.
支持导出分组带、合计带,并且支持多层嵌套报表导出,基本是所见及所得。

///////////////////////////////////////////////////////////////////////////
//
// Parameters : ad_dw : datawindow
// as_file : file name
// Returns : true/false : boolean
// Description : Save the datawindow as a excel file.
//
///////////////////////////////////////////////////////////////////////////
// author : purplekite
// date : 2003-01-23
///////////////////////////////////////////////////////////////////////////



SetPointer(HourGlass!)


//declare the local variables
long i, j, li_pos
string ls_objects, ls_obj, ls_text, ls_err, ls_sql
datastore lds_saveas //导出数据窗
datastore lds_sort //获得根据 object.x 排序的 (band = detail and visible = 1) 的 column/compute
boolean lb_return //返回值
string ls_pbver //pb 版本信息
environment env //环境变量


getenvironment(env)
ls_pbver = string(env.pbmajorrevision)


//创建排序列 datastore
lds_sort = create datastore
ls_sql = ‘column=(type=char(1) name = ztext dbname=”ztext” )’ + ‘~r~n’ + &
‘column=(type=char(1) name = zcol dbname=”zcol” )’ + ‘~r~n’ + &
‘column=(type=long name = zx dbname=”zx” )’ + ‘~r~n’
ls_sql = ‘release ‘ + ls_pbver + ‘;~r~ntable(‘ + ls_sql + ‘)’
lds_sort.create(ls_sql, ls_err)
if len(ls_err) > 0 then
lb_return = false
goto lab1
end if


//准备数据====================================================
//all controls
ls_objects = ad_dw.Describe(“datawindow.objects”)


//按~t位置作判断开始循环
do while (pos(ls_objects,”~t”) > 0)
li_pos = pos(ls_objects,”~t”)
ls_obj = left(ls_objects,li_pos – 1)
ls_objects = right(ls_objects,len(ls_objects) – li_pos)
//(column or compute ) at detail and visible
IF (ad_dw.Describe(ls_obj+”.type”) = “column” or &
ad_dw.Describe(ls_obj+”.type”) = “compute” ) AND &
(ad_dw.Describe(ls_obj+”.band”) = “detail” ) AND &
(ad_dw.Describe(ls_obj+”.visible”) = “1″ ) THEN
ls_text = ad_dw.describe(ls_obj + ‘_t.text’)
if ls_text <> ‘!’ and ls_text <> ‘?’ then
lds_sort.insertrow(0)
lds_sort.setitem(lds_sort.rowcount(), ‘ztext’, ls_text)
lds_sort.setitem(lds_sort.rowcount(), ‘zcol’, ls_obj)
lds_sort.setitem(lds_sort.rowcount(), ‘zx’, long(ad_dw.describe(ls_obj + ‘.x’)))
end if
END IF
loop


//the last control
ls_obj = ls_objects
IF (ad_dw.Describe(ls_obj+”.type”) = “column” or &
ad_dw.Describe(ls_obj+”.type”) = “compute” ) AND &
(ad_dw.Describe(ls_obj+”.band”) = “detail” ) AND &
(ad_dw.Describe(ls_obj+”.visible”) = “1″ ) THEN
ls_text = ad_dw.describe(ls_obj + ‘_t.text’)
if ls_text <> ‘!’ and ls_text <> ‘?’ then
lds_sort.insertrow(0)
lds_sort.setitem(lds_sort.rowcount(), ‘ztext’, ls_text)
lds_sort.setitem(lds_sort.rowcount(), ‘zcol’, ls_obj)
lds_sort.setitem(lds_sort.rowcount(), ‘zx’, long(ad_dw.describe(ls_obj + ‘.x’)))
end if
END IF
//如果没有列则跳出
if lds_sort.rowcount() < 1 then goto lab1
//根据 object.x 排序
lds_sort.setsort(‘zx A’)
lds_sort.sort()


//创建导出 datastore
lds_saveas = create datastore
ls_sql = ”
for i = 1 to lds_sort.rowcount()
ls_obj = lds_sort.getitemstring(i, ‘zcol’)
ls_sql += ‘column=(type=char(1) dbname=”‘ + ls_obj + ‘” )’ + ‘~r~n’
next
ls_sql = ‘release ‘ + ls_pbver + ‘;~r~ntable(‘ + ls_sql + ‘)’
lds_saveas.create(ls_sql, ls_err)
if len(ls_err) > 0 then
lb_return = false
goto lab1
end if


//向 lds_saveas 中写数据
for i = 1 to ad_dw.rowcount()
yield()//释放消息队列, 如果数据量较大, 可以使用这个函数
lds_saveas.insertrow(0)
for j = 1 to lds_sort.rowcount()
ls_obj = lds_sort.getitemstring(j, ‘zcol’)
if ad_dw.describe(ls_obj + ‘.type’) = ‘column’ then
ls_text = ad_dw.describe(‘evaluate(~’LookUpDisplay(‘ + ls_obj + ‘)~’, ‘ + string(i) + ‘)’)
else
ls_text = ad_dw.describe(‘evaluate(~” + ls_obj + ‘~’,’ + string(i) + ‘)’)
end if
lds_saveas.setitem(i, j, ls_text)
next
next


lds_saveas.insertrow(1)
for i = 1 to lds_sort.rowcount()
lds_saveas.setitem(1, i, lds_sort.getitemstring(i, ‘ztext’))
next
//准备数据完毕====================================================


//saveas datawindow
lb_return = (lds_saveas.saveas(as_file, excel!, false) = 1)


lab1:
destroy lds_sort
destroy lds_saveas
SetPointer(Arrow!)
return lb_return

支持导出分组带、合计带,并且支持多层嵌套报表导出,基本是所见及所得。

///////////////////////////////////////////////////////////////////////////
//
// Parameters : ad_dw : datawindow
// as_file : file name
// Returns : true/false : boolean
// Description : Save the datawindow as a excel file.
//
///////////////////////////////////////////////////////////////////////////
// author : purplekite
// date : 2003-01-23
///////////////////////////////////////////////////////////////////////////



SetPointer(HourGlass!)


//declare the local variables
long i, j, li_pos
string ls_objects, ls_obj, ls_text, ls_err, ls_sql
datastore lds_saveas //导出数据窗
datastore lds_sort //获得根据 object.x 排序的 (band = detail and visible = 1) 的 column/compute
boolean lb_return //返回值
string ls_pbver //pb 版本信息
environment env //环境变量


getenvironment(env)
ls_pbver = string(env.pbmajorrevision)


//创建排序列 datastore
lds_sort = create datastore
ls_sql = ‘column=(type=char(1) name = ztext dbname=”ztext” )’ + ‘~r~n’ + &
‘column=(type=char(1) name = zcol dbname=”zcol” )’ + ‘~r~n’ + &
‘column=(type=long name = zx dbname=”zx” )’ + ‘~r~n’
ls_sql = ‘release ‘ + ls_pbver + ‘;~r~ntable(‘ + ls_sql + ‘)’
lds_sort.create(ls_sql, ls_err)
if len(ls_err) > 0 then
lb_return = false
goto lab1
end if


//准备数据====================================================
//all controls
ls_objects = ad_dw.Describe(“datawindow.objects”)


//按~t位置作判断开始循环
do while (pos(ls_objects,”~t”) > 0)
li_pos = pos(ls_objects,”~t”)
ls_obj = left(ls_objects,li_pos – 1)
ls_objects = right(ls_objects,len(ls_objects) – li_pos)
//(column or compute ) at detail and visible
IF (ad_dw.Describe(ls_obj+”.type”) = “column” or &
ad_dw.Describe(ls_obj+”.type”) = “compute” ) AND &
(ad_dw.Describe(ls_obj+”.band”) = “detail” ) AND &
(ad_dw.Describe(ls_obj+”.visible”) = “1″ ) THEN
ls_text = ad_dw.describe(ls_obj + ‘_t.text’)
if ls_text <> ‘!’ and ls_text <> ‘?’ then
lds_sort.insertrow(0)
lds_sort.setitem(lds_sort.rowcount(), ‘ztext’, ls_text)
lds_sort.setitem(lds_sort.rowcount(), ‘zcol’, ls_obj)
lds_sort.setitem(lds_sort.rowcount(), ‘zx’, long(ad_dw.describe(ls_obj + ‘.x’)))
end if
END IF
loop


//the last control
ls_obj = ls_objects
IF (ad_dw.Describe(ls_obj+”.type”) = “column” or &
ad_dw.Describe(ls_obj+”.type”) = “compute” ) AND &
(ad_dw.Describe(ls_obj+”.band”) = “detail” ) AND &
(ad_dw.Describe(ls_obj+”.visible”) = “1″ ) THEN
ls_text = ad_dw.describe(ls_obj + ‘_t.text’)
if ls_text <> ‘!’ and ls_text <> ‘?’ then
lds_sort.insertrow(0)
lds_sort.setitem(lds_sort.rowcount(), ‘ztext’, ls_text)
lds_sort.setitem(lds_sort.rowcount(), ‘zcol’, ls_obj)
lds_sort.setitem(lds_sort.rowcount(), ‘zx’, long(ad_dw.describe(ls_obj + ‘.x’)))
end if
END IF
//如果没有列则跳出
if lds_sort.rowcount() < 1 then goto lab1
//根据 object.x 排序
lds_sort.setsort(‘zx A’)
lds_sort.sort()


//创建导出 datastore
lds_saveas = create datastore
ls_sql = ”
for i = 1 to lds_sort.rowcount()
ls_obj = lds_sort.getitemstring(i, ‘zcol’)
ls_sql += ‘column=(type=char(1) dbname=”‘ + ls_obj + ‘” )’ + ‘~r~n’
next
ls_sql = ‘release ‘ + ls_pbver + ‘;~r~ntable(‘ + ls_sql + ‘)’
lds_saveas.create(ls_sql, ls_err)
if len(ls_err) > 0 then
lb_return = false
goto lab1
end if


//向 lds_saveas 中写数据
for i = 1 to ad_dw.rowcount()
yield()//释放消息队列, 如果数据量较大, 可以使用这个函数
lds_saveas.insertrow(0)
for j = 1 to lds_sort.rowcount()
ls_obj = lds_sort.getitemstring(j, ‘zcol’)
if ad_dw.describe(ls_obj + ‘.type’) = ‘column’ then
ls_text = ad_dw.describe(‘evaluate(~’LookUpDisplay(‘ + ls_obj + ‘)~’, ‘ + string(i) + ‘)’)
else
ls_text = ad_dw.describe(‘evaluate(~” + ls_obj + ‘~’,’ + string(i) + ‘)’)
end if
lds_saveas.setitem(i, j, ls_text)
next
next


lds_saveas.insertrow(1)
for i = 1 to lds_sort.rowcount()
lds_saveas.setitem(1, i, lds_sort.getitemstring(i, ‘ztext’))
next
//准备数据完毕====================================================


//saveas datawindow
lb_return = (lds_saveas.saveas(as_file, excel!, false) = 1)


lab1:
destroy lds_sort
destroy lds_saveas
SetPointer(Arrow!)
return lb_return

都是好长的东东,好好学习一下吧。我自己的就写了一句,当然不能和这些大哥相比了。只是为了简单而已。
dw_biaobiao.SaveAsAscii(“c:\ljy\报表.xls“)
调用的SaveAsAscii来进行转换,只是为了一时之需,改天还要好好研究一下高手们的东东。

这次要修改的是css样式表。只是简单的讨论如何修改,我还没有那么多时间去详细研究,最近内部有考试,要考JBulider,天,就给4天时间去学习,真是郁闷。
不多说了,赶紧写笔记吧。
先看我们如何得到自己的css。在自己的Blog首页察看源代码,发现如下的句子。href=”/skins/AnotherEon001/style.css”。hoho~~相对路径,小case.在浏览器中输入http://www.donews.net//skins/AnotherEon001/style.css,回车就看见自己的css了。内容如下:body {
 font-size : 0.7em;
 font-family : Verdana, Geneva, Arial, Helvetica, sans-serif;
 margin-left : 30px;
 margin-right: 30px;
 margin-top: 10px;
 margin-bottom: 10px;
 padding: 30px;
 padding-bottom: 10px;
 padding-top: 10px;
 background-color: #D9D6CB;
}
img
{
 border: 0px;
}
td
{
 font-size: 0.7em;
}
a{ 
 color : #223355;
 text-decoration: none;
}


a:hover { 
 text-decoration: underline;
}


h1 { 
 margin : 0px;
 padding-top : 5px;
 font-size : 1.8em;
}


h1 a:visited,
h1 a:active,
h1 a:link,
h1 a:hover {
 color : #FFF;
 /*margin-left : 10px;*/
 margin-top : 10px;
 text-decoration : none;
}


h2 {
 margin-top : 10px;
 font-size : 1em;
}


h5
{
 margin: 0px;
 padding: 0px;
}


#top {
 background-color : #20375f;
 height: 75px;
 vertical-align: middle; 
}


#top td
{
 color: white;
}


#sub
{
 text-align: right;
 background-color: black;
 color: #CCCCCC;
 font-size: 0.8em;
 padding: 4px;
}


.headermaintitle
{
 font-family: “Trebuchet MS”;
}


#tagline {  
 color : #FFFFFF;
 font-size : 1em;
 margin : 0px;
 background-color : #0000FF;
 padding : 5px;
}


p.date img {
 vertical-align : middle;
}


p.date {
 font-size : 1.2em;
 font-weight : bold; 
 margin-bottom : 0px;
 padding : 2px 0px;
 color : #AAAAAA;
 text-align: right;
}


p.date span {
 background-color : #FFF;
}
p.date a
{
 color: #888888;
}


blockquote {
 background-color: #EEEEEE;
 border: 0px;
 border-left: 18px solid #CCCCCC;
 padding: 4px;
 margin: 0px;
 
}


#leftmenu {
 position : relative;
 left : 0px;
 width : 180px;
 height: 100%; 
 padding: 0px;
 padding-bottom : 5px;
}


#leftmenu h3 {
 font-size : 1em;
 margin : 0px;
 padding : 4px;
 border-bottom : 1px solid #BBBBBB; 
}


#leftmenu ul {
 list-style : none;
 margin : 0px; 
 padding : 0px;
 margin-left : 8px;
 margin-bottom : 10px;
}


#leftmenu li {
 display : inline;
}


#leftmenu a:active,
#leftmenu a:visited,
#leftmenu a:link {
 display : block;
 color : #000;
 text-decoration : none; 
 margin-right : 0px;
 padding : 2px;
}


#leftmenu a:hover {
 background-color : #CCD5E0;
}


#main {
}


#footer {
 margin : 0px; 
 padding-top : 5px;
 text-align : center;
 font-size : 0.7em;
}


input.text {
 width : 300px; 
}


textarea {
 width : 300px;
 height : 200px; 
}


#comments h4 span {
 color : #999;
}


#comments h4 {
 margin : 0px;
 font-size : 0.9em;
}


p {
 margin : 0px;
 margin-bottom: 14px;
}


h3 {
 font-size : 1.2em;
 border-bottom : 1px solid #AAA;
}


#relatedlinks ul {
 list-style : none;
 margin-left : 10px;
 padding : 0px;
}


.post
{
 border: 1px solid #CCCCCC;
 border-bottom-width: 2px;
 border-right-width: 2px;
 padding: 4px;
 margin-bottom: 28px;
}
.post h5, .post h2
{
 font-size: 14px;
 margin: 0px;
 margin-bottom: 4px;
}
.post .postfoot
{
 margin: 0px;
 margin-top: 14px;
 color: #AAAAAA;
 border-top: 1px solid #DDDDDD;
 font-size: 0.8em;
}
pre
{
 margin: 0px;
 margin-left: 22px;
 font-size: 1.0em;
}
.Textbox, textarea
{
 border: 1px solid #AAAAAA;
 width: 100%;
}
.button
{
 border: 1px solid #AAAAAA;
 background-color: #CCD4E0;
}
input, textarea
{
 font-family: Verdana, Geneva, Arial, Sans-Serif;
 font-size: 10px;
}


.Framework
{
 border: 1px solid black;
 background-color: #EEEEEE;
}
.MainCell
{
 border-left: 1px solid #DDDDDD;
 border-bottom: 1px solid #DDDDDD;
 padding: 10px;
 background-color: White;
 vertical-align: top;
}
#LeftCell
{
 width: 200px;
 vertical-align: top;
}
.FooterCell
{
 vertical-align: top;
}


span.highlight
{
 background-color:Yellow;  
}

没什么好说的,有一点html语言的应该都能看懂吧?那我们改什么呢?我也不是很懂,但我看我的首页底下的字太小了,就改一下这个吧。看下自己首页的代码,找到要改的东西。
<tr>
  <td class=“FooterCell”>  
<p id=”footer”> <–看这个标记我们要改的就是“footer“
 Powered by:
 <br />
 <a id=”Footer1_Hyperlink2″ NAME=”Hyperlink1″ href=”http://scottwater.com/blog”> <img src=”images/100×30_Logo.gif” alt=”" border=”0″ /></a>
 <a id=”Footer1_Hyperlink3″ NAME=”Hyperlink1″ href=”http://ASP.NET”><img src=”images/PoweredByAsp.Net.gif” alt=”" border=”0″ /></a>
 <br />
 Copyright &copy; Benny


  </td>
 </tr>
打开css样式表,找到footer,看看写的是什么。#footer {
 margin : 0px; 
 padding-top : 5px;
 text-align : center;
 font-size : 0.7em;
}
就改下大小吧,#footer {
 margin : 0px; 
 padding-top : 5px;
 text-align : center; //文本位置
 font-size : 0.9em;//文字大小<–我们改的这个
}
然后把这些粘贴到定制css中,保存就好了。
好了,这些就是更改css的简单步骤,我也在学习中,呵呵,估计下次还写css相关的东西。

2004年12月11日

刚建好自己的blog 时发现和别人的有好大的差别,到google上一搜才知道大家都往里面添加了好多代码来实现不同的功能.本来我是觉得没有必要的,可想想加点东西也方便自己吧,就用google找了点代码加进去.原以为很简单的东西,用的时候才发现原来不是那么简单.就把自己在修改时遇到的东西写出来,希望能方便一下大家.
1.添加天气预报
<p><b>今日天气</b><br>
<CENTER><iframe width=157 height=240 frameborder=0 scrolling=NO src=’http://appnews.qq.com/cgi-bin/news_qq_search?city=%BC%C3%C4%CF’></iframe></CENTER>
就解释一点,city后面的代码是城市代码.可以通过百度查出来,具体方法:在百度中输入城市名称,这里为”济南”,回车后看地址栏”http://www.baidu.com/baidu?wd=%BC%C3%C4%CF&cl=3“看见wd=后的东西了,就是济南的代码.
2.添加钟表
<embed src=”http://www.clocklink.com/Clocks/0001P-Blue.swf?Place=济南&TimeZone=CCT” width=”200″ height=”200″ wmode=”transparent” type=”application/x-shockwave-flash”>
具体的钟表样式可以从www.clocklink.com查到,还可以更改颜色,地名,只要稍微知道点html应该都能看懂
3.MSN,QQ状态
MSN
这个MSN状态稍微麻烦点,大家往下看
<A HREF=”http://osi.hshh.org:8088/message/msn/FLASHBENNY@hotmail.com“>
<IMG SRC=”http://osi.hshh.org:8088/msn/FLASHBENNY@hotmail.com
align=”absmiddle” border=”0″ ALT=”MSN Online Status Indicator”
onerror=”this.onerror=null;this.src=’http://osi.hshh.org/msnunknown.gif’;”>
</A>
橙色部分为你的MSN帐号.注意:在MSN中要在隐私中去掉”只有位于我的”允许名单”上的人才可以查看我的状态或向我发送消息”前面的钩,不然是没有办法显示你的MSN状态的.
QQ
QQ的状态比较简单,因为腾讯自己就有这种服务.大家可以到http://is.qq.com/webpresence/code.shtml去找自己喜欢的,我就不多说了.
好了,暂时就先说这么多,等我研究完了怎么自定义样式后在讨论吧.

过了这么久才自己去申请BLOG完全是无奈.不过总算可以免了自己申请免费空间的麻烦了.小小的庆祝一下.不知道以后会往上面写什么,也不知道会有谁看见这个小地方,但有个自己的窝的感觉就是好啊!