Frank Hawker

当程序员的大头鹰

关于OA产品一些思考

今天看了一些OA的产品,发现经过这些年的发展,WebOA产品基本上已经趋于同质化。目前市场上这些产品的亮点不多,至少没有让人耳目一新的感觉。我想对于目前的OA产品未来的发展,可能还会在以下这几个方面中得到体现:
1、在功能方面,WAP的OA正在兴起,这得益于手机的功能越来越强大,色彩越来越丰富。如果在这上头能研发出有一种全新体验的话,那么在接下来的几年内,这将会是OA市场一个新的增加点。
2、OA系统与其它业务系统的集成。对于一个企业的OA,在目前这种状况下,并不是重点。也就是说,除非是一家非常大的企业,否则,ERP才是目前国内绝大部分企业考虑的重点,这才是这些企业的生命线。而OA只不过是一种锦上添花的东东而已。因此OA只有在能很多地与ERP系统进行集成与整合,并提高整个企业的效率,减少运营成本的前提下,才能为OA带来更为广阔的发展空间。
3、功能强大的搜索引擎是OA的未来一项非常重要的功能,而且也是必不可少的功能。OA产品的使用已经相当长的一段时间了,因此产生了大量的信息。如何根据不同人的不同权限,通过功能强大的搜索引擎,使之能在大量的信息中快速准确地得到想要的信息,将是一项革命性的功能。

posted @ 2005-07-19 15:50 大头鹰 阅读(501) | 评论 (0)编辑 收藏

中国小吃英文表达

中式早点
  烧饼     Clay oven rolls
  油条     Fried bread stick
  水饺     Boiled dumplings
  馒头     Steamed buns
  饭团     Rice and vegetable roll
  皮蛋     100-year egg
  咸鸭蛋    Salted duck egg
  豆浆     Soybean milk
饭类
  稀饭     Rice porridge
  白饭     Plain white rice
  糯米饭    Glutinous rice
  蛋炒饭    Fried rice with egg
面类
  刀削面    Sliced noodles
  麻辣面    Spicy hot noodles
  乌龙面    Seafood noodles
  板条     Flat noodles
  榨菜肉丝面  Pork , pickled mustard green noodles
  米粉     Rice noodles
汤类
  紫菜汤    Seaweed soup
  牡蛎汤    Oyster soup
  蛋花汤    Egg & vegetable soup
  鱼丸汤    Fish ball soup
点心
  臭豆腐    Stinky tofu (Smelly tofu)
  油豆腐    Oily bean curd
  虾球     Shrimp balls
  春卷     Spring rolls
  蛋卷     Chicken rolls
  肉丸     Rice-meat dumplings
  火锅     Hot pot

posted @ 2005-07-13 10:32 大头鹰 阅读(441) | 评论 (0)编辑 收藏

技术社区网站

http://www.gotdotnet.com是Microsoft .Net Framework社区。
http://www.cnblogs.com是博客日志。
http://blog.joycode.com/是博客堂。
http://www.csdn.net/在中国还有有点名气,是讲一些IT界新信息的站点。
http://www.ccid.net/是赛迪咨询站点,主要面向IT信息、服务等方面。
http://theserverside.com是比较好的Java世界社区。
http://www.idesign.net是一个比较好的.Net网站,主要面向.Net思想(比如:COM+、Remoting)等的实现演示。
http://www.project.com/main.htm是比较好的项目网站。
http://
www.asq.org/是与软件项目质量相关的网站。
http://www.ivv.nasa.gov是软件度量指导手册。
 
 
以下是我常去的网站,
http://www.pmi.org
http://www.4pm.com
http://www.projectmanagement.com
 

以下是一些比较有名气的项目管理网站,可以帮助新手或有经验的项目管理者提高自身的管理素质。
http://www.ifpug.org包含关于“功能点”的全面信息。
可以在
http://ourworld.compuserve.com/homepages/softcomp上找到一个有用的关于功能点(和扩展功能点)的FAQ。
可以在
http://www.qualityworld.com找到关于软件质量及相关主题(包括质量)的优秀信息源。
可以在
http://www.sytsma.com/tqmtools/ctlchtprinciples.html上找到《Common Control Chart Cookbook》
可以在
http://www.spr.com上找到软件成本估算工具。
可以在
http://www.qsm.com上是关于从软件方程式演化出来的软件成本估算工具的信息。
可以在
http://www.demon.co.uk/mindtool/destree.html上获取关于决策树分析的一个优秀教程。
可以从
http://www.spmm.com/rsktrkr.html上找到风险雷达(Risk Radar),它是一个风险管理数据库,帮助项目管理者识别、排序和交
流项目风险。
可以从
http://catless.ncl.ac.uk/Risks/search.html上找到一个包含来自ACM的公众风险论坛的所有条目的数据库。
可以从
http://www.acq.osd.mil/pm/上找到大量的关于获得值分析的信息源。
可以从
http://www.qualitytree.com/links/links.html上获取大量关于软件质量的信息源。
可以从
http://deming.eng.demson.edu上找到大量关于连续过程改善和TQM的信息源。
可以从
http://www.management.gov上找到关于质量管理的深度教程和广泛的信息源。
http://www.casq.org是中国软件质量协会给出的最全面的质量站点。
可以从
http://rac.iitri.org上找到大量有用的关于可靠性、易维护性、易支持性和质量的信息。
可以从
http://www.rstcorp.com/hotlist/topics-safety.html找到软件安全性的有价值的论文。

posted @ 2005-06-16 13:23 大头鹰 阅读(421) | 评论 (0)编辑 收藏

IBMDevelopworks中的一篇介绍MDA开发的文章

http://www-128.ibm.com/developerworks/cn/ondemand/i-modev.html
这一系列的文章介绍了MDA开发的整个过程,并且结合使用IBM Rational的建模工具(Rational Suite Enterprise v2003)进行实例讲解,非常具有启发性,值得一看。
笔记:
在第2 部分( 定义和管理需求)中的这个例子应该清楚的是,是先有需求文档(根据RUP相关Vision文档写成),然后再把这些需求同步到RequisitePro中,然后才对这些需求的可追溯性进行管理。
RequisitePro是一个需求管理工具,而不是一个文档管理工具。

posted @ 2005-06-14 10:11 大头鹰 阅读(494) | 评论 (0)编辑 收藏

VC中多语编程的一些要点

一个程序或控件,如果想要有更大的市场,国际化是一种必然的趋势。要使软件国际化,其编码必须支持多语,否则有可能在你的程序中,仅在某个版本的操作系统底下好用,而在另外的操作系统中却是乱码。VC对多语的支持相对于VB来说还是简单了很多,其自身提供了支持多语的机制。在实际工作中,在VC中进行多语化编译,我总结出以下一些要点:
1、首先应该预编译指令中定义UNICODE或_UNICODE,使用了这个预编译指令,在使用WindowsAPI时,系统就会自动使用W版的API函数及结构
2、声明字符串必须用TCHAR,而不能用char
3、对于字符串操作的相关函数处理,如strcpy用wcscpy的代替等等
4、所有的字符串值,必须加上宏_T()
5、如果在程序中使用了STL,必须使用必须使用其w版的函数及类型,比如string就得用wstring来代替,在我的程序中,使用了如下预编译指令:
#ifdef _UNICODE
#define tstring  wstring
#else
#define tstring  string
#endif
这样在程序中用tstring来声明字符串。所有与string相关的函数都必须作这这样的处理。比如stringstream、ostream等等。
关于编码的问题请参考下面文章:
http://dev.csdn.net/develop/article/72/72002.shtm

posted @ 2005-05-25 09:44 大头鹰 阅读(533) | 评论 (0)编辑 收藏

数据库优化技巧:not in及in语句的连接替代方案

在编写SQL语句时,如果要实现一张表有而另一张表没有的数据库时,通常第一直觉的写法就是:
select * from table1 where table1.id not in (select id from table2),这种方法虽然很直观,但是in及not in的写法经常会影响其执行的效率,对于大数据量时,这个原因经常是性能的瓶颈。在SQL Server中,可以通过左连接的方法来解决,其替代写法如下:
select a.* from table1 a left join table2 b on a.id=b.id where b.id is null
同理,这个方法也适用于in的情况。

posted @ 2005-05-17 09:04 大头鹰 阅读(1174) | 评论 (0)编辑 收藏

数据库的分页存储过程

数据库分页是一种非常有用,而且非常通用的技术,下面收集整理一些通用的存储过程:
1、CSDN社区邹建写的一个通用存储过程
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_show]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_show]
GO

/*--实现分页的通用存储过程

 显示指定表、视图、查询结果的第X页
 对于表中主键或标识列的情况,直接从原表取数查询,其它情况使用临时表的方法
 如果视图或查询结果中有主键,不推荐此方法
 如果使用查询语句,而且查询语句使用了order by,则查询语句必须包含top 语句

--邹建 2003.09--*/

/*--调用示例
 exec p_show '地区资料'

 exec p_show 'select top 100 percent * from 地区资料 order by 地区名称',5,3,'地区编号,地区名称,助记码'
--*/
CREATE Proc p_show
@QueryStr nvarchar(4000), --表名、视图名、查询语句
@PageSize int=10,   --每页的大小(行数)
@PageCurrent int=1,   --要显示的页
@FdShow nvarchar (4000)='', --要显示的字段列表,如果查询结果不需要标识字段,需要指定此值,且不包含标识字段
@FdOrder nvarchar (1000)='' --排序字段列表
as
set nocount on
declare @FdName nvarchar(250) --表中的主键或表、临时表中的标识列名
 ,@Id1 varchar(20),@Id2 varchar(20) --开始和结束的记录号
 ,@Obj_ID int    --对象ID
--表中有复合主键的处理
declare @strfd nvarchar(2000) --复合主键列表
 ,@strjoin nvarchar(4000) --连接字段
 ,@strwhere nvarchar(2000) --查询条件


select @Obj_ID=object_id(@QueryStr)
 ,@FdShow=case isnull(@FdShow,'') when '' then ' *' else ' '+@FdShow end
 ,@FdOrder=case isnull(@FdOrder,'') when '' then '' else ' order by '+@FdOrder end
 ,@QueryStr=case when @Obj_ID is not null then ' '+@QueryStr else ' ('+@QueryStr+') a' end

--如果显示第一页,可以直接用top来完成
if @PageCurrent=1 
begin
 select @Id1=cast(@PageSize as varchar(20))
 exec('select top '+@Id1+@FdShow+' from '+@QueryStr+@FdOrder)
 return
end

--如果是表,则检查表中是否有标识更或主键
if @Obj_ID is not null and objectproperty(@Obj_ID,'IsTable')=1
begin
 select @Id1=cast(@PageSize as varchar(20))
  ,@Id2=cast((@PageCurrent-1)*@PageSize as varchar(20))

 select @FdName=name from syscolumns where id=@Obj_ID and status=0x80
 if @@rowcount=0   --如果表中无标识列,则检查表中是否有主键
 begin
  if not exists(select 1 from sysobjects where parent_obj=@Obj_ID and xtype='PK')
   goto lbusetemp  --如果表中无主键,则用临时表处理

  select @FdName=name from syscolumns where id=@Obj_ID and colid in(
   select colid from sysindexkeys where @Obj_ID=id and indid in(
    select indid from sysindexes where @Obj_ID=id and name in(
     select name from sysobjects where xtype='PK' and parent_obj=@Obj_ID
   )))
  if @@rowcount>1  --检查表中的主键是否为复合主键
  begin
   select @strfd='',@strjoin='',@strwhere=''
   select @strfd=@strfd+',['+name+']'
    ,@strjoin=@strjoin+' and a.['+name+']=b.['+name+']'
    ,@strwhere=@strwhere+' and b.['+name+'] is null'
    from syscolumns where id=@Obj_ID and colid in(
    select colid from sysindexkeys where @Obj_ID=id and indid in(
     select indid from sysindexes where @Obj_ID=id and name in(
      select name from sysobjects where xtype='PK' and parent_obj=@Obj_ID
    )))
   select @strfd=substring(@strfd,2,2000)
    ,@strjoin=substring(@strjoin,5,4000)
    ,@strwhere=substring(@strwhere,5,4000)
   goto lbusepk
  end
 end
end
else
 goto lbusetemp

/*--使用标识列或主键为单一字段的处理方法--*/
lbuseidentity: 
 exec('select top '+@Id1+@FdShow+' from '+@QueryStr
  +' where '+@FdName+' not in(select top '
  +@Id2+' '+@FdName+' from '+@QueryStr+@FdOrder
  +')'+@FdOrder
  )
 return

/*--表中有复合主键的处理方法--*/
lbusepk:  
 exec('select '+@FdShow+' from(select top '+@Id1+' a.* from
  (select top 100 percent * from '+@QueryStr+@FdOrder+') a
  left join (select top '+@Id2+' '+@strfd+'
  from '+@QueryStr+@FdOrder+') b on '+@strjoin+'
  where '+@strwhere+') a'
  )
 return

/*--用临时表处理的方法--*/
lbusetemp:  
select @FdName='[ID_'+cast(newid() as varchar(40))+']'
 ,@Id1=cast(@PageSize*(@PageCurrent-1) as varchar(20))
 ,@Id2=cast(@PageSize*@PageCurrent-1 as varchar(20))

exec('select '+@FdName+'=identity(int,0,1),'+@FdShow+'
  into #tb from'+@QueryStr+@FdOrder+'
 select '+@FdShow+' from #tb where '+@FdName+' between '
 +@Id1+' and '+@Id2
 )

GO

2、当有排序ID(唯一)时,可以用如下存储过程:
CREATE PROCEDURE SPPagediv
@tblName   varchar(3000),       -- 表名
@strGetFields varchar(3000) = '*',  -- 需要返回的列
@fldName varchar(255)='',      -- 排序的字段名
@PageSize   int = 10,          -- 页尺寸
@PageIndex  int = 1,           -- 页码
@doCount  bit = 0,   -- 返回记录总数, 非 0 值则返回
@OrderType bit = 0,  -- 设置排序类型, 非 0 值则降序
@strWhere  varchar(1500) = ''  -- 查询条件 (注意: 不要加 where)

AS

declare @strSQL   varchar(5000)       -- 主语句

declare @strTmp   varchar(110)        -- 临时变量

declare @strOrder varchar(400)        -- 排序类型


 begin
  replace(@strGetFields,'''','''''')
 end
 

if @doCount != 0
  begin
    if @strWhere !=''
     set @strSQL = 'select count(*) as Total from [' + @tblName + '] where ' + @strWhere
    else
  set @strSQL = 'select count(*) as Total from [' + @tblName + ']'
  end
--以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都是@doCount为0的情况

else

begin

 

if @OrderType != 0

begin

    set @strTmp = '<(select min'

set @strOrder = ' order by [' + @fldName +'] desc'

--如果@OrderType不是0,就执行降序,这句很重要!

end

else

begin

    set @strTmp = '>(select max'

    set @strOrder = ' order by [' + @fldName +'] asc'

end

 

if @PageIndex = 1

begin

    if @strWhere != '' 

    set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ '  from [' + @tblName + '] where ' + @strWhere + ' ' + @strOrder

     else

     set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ '  from ['+ @tblName + '] '+ @strOrder

--如果是第一页就执行以上代码,这样会加快执行速度

end

else

begin

--以下代码赋予了@strSQL以真正执行的SQL代码

set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ '  from '

    + @tblName + ' where [' + @fldName + ']' + @strTmp + '(['+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['+ @fldName + '] from ' + @tblName + ' ' + @strOrder + ') as tblTmp)'+ @strOrder

 

if @strWhere != ''

    set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ '  from '

        + @tblName + ' where [' + @fldName + ']' + @strTmp + '(['

        + @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['

        + @fldName + '] from ' + @tblName + ' where ' + @strWhere + ' '

        + @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder

end

end 

exec (@strSQL)

GO

这个存储过程如下文章中获得:
http://soft.zol.com.cn/2005/0117/144785.shtml

posted @ 2005-05-10 09:13 大头鹰 阅读(671) | 评论 (0)编辑 收藏

仅列出标题
共2页: 上一页 1 2 

导航

统计

公告

常用链接

留言簿(3)

我参与的团队

随笔分类(6)

随笔档案(17)

文章档案(1)

收藏夹(2)

Friends' Blog

积分与排名

最新评论