C# 用QQ企业邮箱发邮件

问题System.Net.Mail下的SmtpClient来发送邮件,而System.Net.Mail only仅支持Explicit SSL

不要465端口,用25,不用EnableSsl = true;

 

    {
        static void Main(string[] args)
        {
            SmtpClient client = new SmtpClient();
            client.Host = "smtp.exmail.qq.com";
            client.Port = 25;
           // client.Port = 465;
          //  client.EnableSsl = true;
            client.Timeout = 10000;
            client.DeliveryMethod = SmtpDeliveryMethod.Network;
            client.UseDefaultCredentials = false;
            client.Credentials = new System.Net.NetworkCredential("test@ms.com", "1234567890");
            MailMessage mm = new MailMessage("test@ms.com", "user1@ms.com", "test", "test");
            mm.BodyEncoding = UTF8Encoding.UTF8;
            mm.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;
            client.Send(mm);
        }
    }

 

最后在配置TFS邮件通知设置的时候端口改用25,不选择SSL,顺利解决问题。

SmtpClient发送邮件超时的异常参考:

http://blogs.msdn.com/b/webdav_101/archive/2008/06/02/system-net-mail-with-ssl-to-authenticate-against-port-465.aspx

了解更多

SEO须知:系列用法。

有时候会有一些站点内容,不希望被ROBOTS抓取而公开。为了解决这个问题,ROBOTS开发界提供了两个办法:一个是robots.txt,另一个是The Robots META标签。
1,<meta name="Robots" contect="all|none|index|noindex|follow|nofollow">  默认是all
其中的属性说明如下: 
设定为all:文件将被检索,且页面上的链接可以被查询; 
设定为none:文件将不被检索,且页面上的链接不可以被查询; 
设定为index:文件将被检索; 
设定为follow:页面上的链接可以被查询; 
设定为noindex:文件将不被检索,但页面上的链接可以被查询; 
设定为nofollow:文件将不被检索,页面上的链接可以被查询。 
2,revisit-after (重访) 
<META name="revisit-after" CONTENT="7 days" >
通知搜索引擎多少天访问一次
其他的:
<META NAME="GENERATOR" CONTENT="Macromedia Dreamweaver MX"> 
<meta http-equiv="Content-Type" content="text/html; charset=gb2312"> 
<Meta http-equiv="Content-Language" Content="zh-CN"> 
<Meta http-equiv="Refresh" Content="5; Url=http://hi.baidu.com/pihi"> 
<Meta http-equiv="Expires" Content="Wed, 26 Feb 1997 08:21:57 GMT"> 
<meta http-equiv="cache-control" content="no-cache"> 
<META name="keywords" content="关键字"> 
<meta name="description" content="描述"> 
<meta name="author" content="作者"> 
<meta name="build" content="日期"> 
<meta name="coprright" content="版权"> 
<meta name="reply-to" content="email"> 
<meta name="robots" content="all"> 
<meta http-equiv="Page-Enter" content="RevealTrans (Duration=3, Transition=23)"> 
<meta http-equiv="Page-Exit" content="RevealTrans (Duration=3, Transition=23)"> 
<link rel="shortcut icon" href="favicon.ico"> 
------------------------------------------------------------------------------------------------------------ 
meta标签分两大部分:HTTP标题信息(HTTP-EQUIV)和页面描述信息(NAME)。 
1、Content-Type和Content-Language (显示字符集的设定) 
说明:设定页面使用的字符集,用以说明主页制作所使用的文字已经语言,浏览器会根据此来调用相应的字符集显示page内容。 
注意: 该meta标签定义了HTML页面所使用的字符集为GB2132,就是国标汉字码。如果将其中的“charset=GB2312”替换成“BIG5”,则该页面所用的字符集就是繁体中文Big5码。当你浏览一些国外的站点时,IE浏览器会提示你要正确显示该页面需要下载xx语支持。这个功能就是通过读取HTML页面Meta标签的Content-Type属性而得知需要使用哪种字符集显示该页面的。如果系统里没有装相应的字符集,则IE就提示下载。其他的语言也对应不同的charset,比如日文的字符集是“iso-2022-jp ”,韩文的是“ks_c_5601”。 
Charset选项:ISO-8859-1(英文)、BIG5、UTF-8、SHIFT-Jis、Euc、Koi8-2、us-ascii, x-mac-roman, iso-8859-2, x-mac-ce, iso-2022-jp, x-sjis, x-euc-jp,euc-kr, iso-2022-kr, gb2312, gb_2312-80, x-euc-tw, x-cns11643-1,x-cns11643-2等字符集;Content-Language的Content还可以是:EN、FR等语言代码。 
2、Refresh (刷新) 
3、Expires (期限) 
说明:指定网页在缓存中的过期时间,一旦网页过期,必须到服务器上重新调阅。 
注意:必须使用GMT的时间格式,或直接设为0(数字表示多少时间后过期)。 
4、Pragma (cach模式) 
说明:禁止浏览器从本地机的缓存中调阅页面内容。 
注意:网页不保存在缓存中,每次访问都刷新页面。这样设定,访问者将无法脱机浏览。 
5、Set-Cookie (cookie设定) 
说明:浏览器访问某个页面时会将它存在缓存中,下次再次访问时就可从缓存中读取,以提高速度。当你希望访问者每次都刷新你广告的图标,或每次都刷新你的计数器,就要禁用缓存了。通常HTML文件没有必要禁用缓存,对于ASP等页面,就可以使用禁用缓存,因为每次看到的页面都是在服务器动态生成的,缓存就失去意义。如果网页过期,那么存盘的cookie将被删除。 
用法:<Meta http-equiv="Set-Cookie" Content="cookievalue=xxx; expires=Wednesday, 21-Oct-98 16:14:21 GMT; path=/"> 
注意:必须使用GMT的时间格式。 
6、Window-target (显示窗口的设定) 
说明:强制页面在当前窗口以独立页面显示。 
用法:<Meta http-equiv="Widow-target" Content="_top"> 
注意:这个属性是用来防止别人在框架里调用你的页面。Content选项:_blank、_top、_self、_parent。 
7、Pics-label (网页RSAC等级评定) 
说明:在IE的Internet选项中有一项内容设置,可以防止浏览一些受限制的网站,而网站的限制级 
别就是通过该参数来设置的。 
用法:<META http-equiv="Pics-label" Contect= 
"(PICS-1.1'http://www.rsac.org/ratingsv01.html' 
I gen comment 'RSACi North America Sever' by 'inet@microsoft.com' 
for 'http://www.microsoft.com' on '1997.06.30T14:21-0500' r(n0 s0 v0 l0))"> 
注意:不要将级别设置的太高。RSAC的评估系统提供了一种用来评价Web站点内容的标准。用户可以设置Microsoft Internet Explorer(IE3.0以上)来排除包含有色情和暴力内容的站点。上面这个例子中的HTML取自Microsoft的主页。代码中的(n 0 s 0 v 0 l 0)表示该站点不包含不健康内容。级别的评定是由RSAC,即美国娱乐委员会的评级机构评定的,如果你想进一步了解RSAC评估系统的等级内容,或者你需要评价自己的网站,可以访问RSAC的站点:http://www.rsac.org/。 
8、Page-Enter、Page-Exit (进入与退出) 
说明:这个是页面被载入和调出时的一些特效。 
用法:<Meta http-equiv="Page-Enter" Content="blendTrans(Duration=0.5)"> 
<Meta http-equiv="Page-Exit" Content="blendTrans(Duration=0.5)"> 
注意:blendTrans是动态滤镜的一种,产生渐隐效果。另一种动态滤镜RevealTrans也可以用于页面进入与退出效果: 
<Meta http-equiv="Page-Enter" Content="revealTrans(duration=x, transition=y)"> 
<Meta http-equiv="Page-Exit" Content="revealTrans(duration=x, transition=y)"> 
Duration 表示滤镜特效的持续时间(单位:秒) 
Transition 滤镜类型。表示使用哪种特效,取值为0-23。 
0 矩形缩小 
1 矩形扩大 
2 圆形缩小 
3 圆形扩大 
4 下到上刷新 
5 上到下刷新 
6 左到右刷新 
7 右到左刷新 
8 竖百叶窗 
9 横百叶窗 
10 错位横百叶窗 
11 错位竖百叶窗 
12 点扩散 
13 左右到中间刷新 
14 中间到左右刷新 
15 中间到上下 
16 上下到中间 
17 右下到左上 
18 右上到左下 
19 左上到右下 
20 左下到右上 
21 横条 
22 竖条 
23 以上22种随机选择一种 
9、MSThemeCompatible (XP主题) 
说明:是否在IE中关闭 xp 的主题 
用法:<Meta http-equiv="MSThemeCompatible" Content="Yes"> 
注意:关闭 xp 的蓝色立体按钮系统显示样式,从而和win2k 很象。 
10、IE6 (页面生成器) 
说明:页面生成器generator,是ie6 
用法:<Meta http-equiv="IE6" Content="Generator"> 
注意:用什么东西做的,类似商品出厂厂商。 
11、Content-Script-Type (脚本相关) 
说明:这是近来W3C的规范,指明页面中脚本的类型。 
用法:<Meta http-equiv="Content-Script-Type" Content="text/javascript"> 
★NAME变量 
name是描述网页的,对应于Content(网页内容),以便于搜索引擎机器人查找、分类(目前几乎所有的搜索引擎都使用网上机器人自动查找meta值来给网页分类)。 
name的value值(name="")指定所提供信息的类型。有些值是已经定义好的。例如description(说明)、keyword(关键字)、refresh(刷新)等。还可以指定其他任意值,如:creationdate(创建日期) 、 
document ID(文档编号)和level(等级)等。 
name的content指定实际内容。如:如果指定level(等级)为value(值),则Content可能是beginner(初级)、intermediate(中级)、advanced(高级)。
1、Keywords (关键字) 
说明:为搜索引擎提供的关键字列表 
用法:<Meta name="Keywords" Content="关键词1,关键词2,关键词3,关键词4,……"> 
注意:各关键词间用英文逗号“,”隔开。META的通常用处是指定搜索引擎用来提高搜索质量的关键词。当数个META元素提供文档语言从属信息时,搜索引擎会使用lang特性来过滤并通过用户的语言优先参照来显示搜索结果。例如: 
<Meta name="Kyewords" Lang="EN" Content="vacation,greece,sunshine"> 
<Meta name="Kyewords" Lang="FR" Content="vacances,grè:ce,soleil"> 
列举出几个重要关键词即可,也不可过分堆砌。
2、Description (简介) 
说明:Description用来告诉搜索引擎你的网站主要内容。 
用法:<Meta name="Description" Content="你网页的简述"> 
注意: 把网页内容高度概括到这里,长度要合理,不可过分堆砌关键词,每个页面description要有所不同
3、Robots (机器人向导) 
说明:Robots用来告诉搜索机器人哪些页面需要索引,哪些页面不需要索引。Content的参数有all、none、index、noindex、follow、nofollow。默认是all。 
用法:<Meta name="Robots" Content="All|None|Index|Noindex|Follow|Nofollow"> 
注意:许多搜索引擎都通过放出robot/spider搜索来登录网站,这些robot/spider就要用到meta元素的一些特性来决定怎样登录。 
all:文件将被检索,且页面上的链接可以被查询; 
none:文件将不被检索,且页面上的链接不可以被查询;(和 "noindex, no follow" 起相同作用) 
index:文件将被检索;(让robot/spider登录) 
follow:页面上的链接可以被查询; 
noindex:文件将不被检索,但页面上的链接可以被查询;(不让robot/spider登录) 
nofollow:文件将不被检索,页面上的链接可以被查询。(不让robot/spider顺着此页的连接往下探找) 
4、Author (作者) 
说明:标注网页的作者或制作组 
用法:<Meta name="Author" Content="张三,abc@sina.com"> 
注意:Content可以是:你或你的制作组的名字,或Email 
5、Copyright (版权) 
说明:标注版权 
用法:<Meta name="Copyright" Content="本页版权归Zerospace所有。All Rights Reserved"> 
注意: 
6、Generator (编辑器) 
说明:编辑器的说明 
用法:<Meta name="Generator" Content="PCDATA|FrontPage|"> 
注意:Content="你所用编辑器" 
7、revisit-after (重访) 
说明: 
用法:<META name="revisit-after" CONTENT="7 days" > 

了解更多

招聘软件开发人员的一点心得体会

作为PM,有时需要招聘软件开发人员。这几年也一直在想,如何能在短短的30分钟或1小时内,快速识别出,坐在你对面的应聘人员,是否适合你的Team。这几年也一直在观察和反思,经历过的Team和现在Team中的软件开发人员。有几点小的心得。


1. 倾向于招什么样的软件开发人员

- 经历过历练的人

  吃过苦的,比如以前工作,经常被外派出差,又如曾在业内都知道以加班多而著称的公司呆过,还有些,留过学,但都是自己边打工边读书的,等等。

  这些人员,入职后,通常都是能干活,能作为骨干。


- 思路清晰,思想活跃的人

  让谈谈自己现在的产品,如果能清晰表述,有条理,会发散,但又能适当控制住,并收回到原话题。谈到技术问题和解决过的难题时,眼中有光芒:)

  这些人员,今后工作中,学习能力强,对解决难题有帮助,能作为中坚。


- 坦诚、坚定、平和的人

  面试中,坦诚,目光坚定。有时坦诚到甚至于显得有点木讷:)

  我曾经遇到一个,面试下来,我最后介绍我们产品中用到的技术,他对这些技术知之不多,最后他说,“我可能不是非常适合,我知道一个朋友,他可能更适合。”我综合评估后,最后还是选了他,事实证明,他后来做的很不错。

  坦诚坚定的人,会有恒心去学习,去解决问题。这些人员会作为Team的基石。


- 有缺陷的人才

  这是一个朋友(Lance)的想法,我认为还是有道理的。

  大公司,会看重综合素质,而如果是小公司,可以考虑选择一些有缺陷的人才。所谓有缺陷,是指,比如他英语很差,或沟通不清晰,但他能用程序员该有的思维去思考问题。这样的人员,通常进不了大公司,故会相对踏实地呆在一家公司,做好自己的工作。


2. 谨慎考虑这样的开发人员

- 太活泼,太易兴奋

  太易兴奋,说到投机处,“是是是是,对对对对。。。”,又蹦又跳,还时不时来点,“Oh yeah, you are right“,然后还摆个 V 手型。讨论问题,不易固守在技术问题本身,时常跑到“我们产品中用到的技术(或第3方产品)很强,我挺他们,不可能有问题”,又或者“我们对客户要强势,我们要坚持我们的产品没问题"。

  软件开发工作本身,显得比较沉闷,优秀的技术人员,都略显有些内向,因为解决问题,很多时候需要耐得住寂寞,时刻保持相对冷静。

  太活泼的人,会在遇到问题之初,表现出很强的冲劲,但当长时间不能解决时,会表现出没有耐心,会经常抱怨(对Team、管理、产品、流程等),非常情绪化。有些女程序员还会吵,会哭,这时项目经理只能放下手中的活,下去给她买点零食来哄哄,“莫哭,这里有你最爱吃的猫哆哩。”一边擦着鼻涕、眼泪,一边嘴里塞满东西,鼓鼓啷啷“这是酸角口味的,那个西番莲口味的才叫好吃..."

  这些通常不太容易在面试时表现出来,在试用期时,要观察。


- 家境太好的人

  家境好,可能没吃过什么苦,抗压差,并不太容易珍惜这份工作。工作强度不大时,还好。遇到技术难题、项目进度紧、压力大时,这些人员,可能会表现出不易妥协,难于沟通,”我反正也不在乎这么一个工作。。。我工作不工作都可以,有什么大不了“。

  我Team中曾经有这样一个”富2代“,干了一年不到就闪了。他在的几个月中,就像是一场闹剧,来这里,旅游观光罢了,东看看西看看,抛下几句狠话,刻下”XXX到此一游,就走了。


- 身体太差的人

  身体常年有疾者,通常都会性格怪戾,脾气暴躁,难于跟Team很好相融。

了解更多

软件定制开发工作安排规范

想做好定制软件开发工作,必须对定制软件开发流程管理必须做科学,每一步定位清晰,目标明确,下面对定制软件开发工作流进行拆解分析:
需求分析
 资深软件系统分析师对企业所面临的管理问题进行分析
需求初步确认
 软件系统分析师初步确认企业需求,作为合同确认的依据
系统调研
软件系统分析师对企业的初步需求进行详细调研,确定系统界面的设计和运行的流程
需求说明书
 将软件系统分析师对企业详细调研文稿化,经双方讨论确认后,开始系统界面设计
界面设计
专业软件开发工程师及美工设计师完成系统界面设计,经用户确认,开始软件开发
开发及测试
 专业软件开发工程师和测试工程师完成系统软件开发和测试,强大测试力量和一对一软件测试体系,确保系统软件质量
使用培训
 专业培训讲师对企业进行软件基础知识和系统软件运作流程全面培训
初始化试运行
 专业软件工程师辅导用户使用系统,协助用户进行初始化工作;系统初始化完毕,进行试运行阶段,测试系统功能的完善性和全面性
正式切换 双方共同测评系统,确保系统能全面符合用户需求说明书定义的所有功能,正式切换系统
从项目推动过程来讲,可以分为:
1、 项目启动阶段
这一阶段主要是为实施做好准备,由项目指导委员会召开项目动员大会,确定项目组成员,确定项目的计划和目标,建立实施所必须的系统环境。
2、调研分析阶段
项目实施小组在开始系统实施前,先对公司现有的应用系统进行详细调研和分析,根据企业的具体情况和信息化管理的特点确定目标业务流程。对各级用户进行需求调研。最终以双方确认的目标作为下一步具体实施的业务蓝图,并结合软件产品和技术开发实际情况,规划设计详细的解决方案,并进行确认,作为设计开发的基础。
3、 系统开发阶段
根据调研分析的结果,进行系统设计、编码、测试,完成软件的开发。
4、 项目实施阶段
在系统开发完成之后,软件实施进入实质性阶段。项目实施小组要在项目指导委员会的全力支持和相关部门、人员的协作配合下完成大量的具体工作,比如数据分析与导入、系统设置、人员培训、规章制度建立、实施文件归档、客户化修改等。软件的使用者尤其是关键用户必须在这段时间内掌握相关功能模块的操作和应用,以便在系统正式运行后能够独立地使用软件。
5、 试运行阶段
在经过项目实施阶段后,各个模块及整个系统需要试运行一段时间,以确信软件能够在企业中运行良好,并达到预期效果。同时,根据试运行阶段中发现的问题进行系统调整。
6、 系统切换/正式运行
在试运行阶段后,确信软件可以正式开始运行后,需要进行系统切换,企业正式切换到新的业务流程,并在软件上进行企业日常业务处理。至此,软件的实施已经全部完成,进入后期维护阶段。
架构设计
设计的中心思想

1、 以业务逻辑建模,而不是以数据库为中心建立系统模型
对信息系统的设计,应紧紧专注于将企业生产的系统抽象转化为信息系统的模型,能够准确、完整、清晰地了解业务逻辑和业务流程,并且对业务的变化作预先考虑,是项目成功的关键。开发人员容易出现的问题是以关系数据库设计或数据控件的设计代替系统建模,造成的问题是以数据为中心,其结果是系统与数据紧密耦合,难以实现业务逻辑的变化和扩展。
2、 定制软件开发是否满足了用户的期望
为了实现这个目标,完善准确的需求收集和需求分析,是项目成功设计的前提。否则无论这个软件再先进,从用户角度看,也是失败的软件。因此,在设计前期,对需求分析所必须的资源和时间投入,必须有足够的重视和充分的计划。
3、 必须要考虑非软件的因素
任何一个项目都是为了用户实现其业务目的,软件工程也不例外。同时,企业用户作为一个实体,其决策收到其行业特点、用户、市场、上级主管部门、决策人员的个性、企业的定位、企业的现状、长远发展规划、历史因素等综合情况的影响,因此,在架构设计上,应综合考虑这些因素。
设计原则
4、 在可能的情况下,按照“统一规划、统一架构、统一标准”的原则。
5、 以良好的设计模式来保证系统的先进性、合理性和应用扩展性。
6、 系统的模块之间应用和交互,尽可能采用松耦合,以实现系统的灵活性和实用性,延长系统的生命周期,保护用户的投资。
7、 采用以SOA作为体系架构的核心,以保证系统级别和部件级别重复使用和业务重组,便于用户长远的。
8、 系统的开放性要求能软件实现三个无关性:通讯组件的网络及协议无关性,数据来源无关性和用户对流程无关性。
9、 采用有效的需求分析手段,力图实现准确到位的需求分析,
为良好的人机界面设计提供坚实的基础。高度重视用户界面的设计,作到符合不同用户的实际经验和使用习惯,减少对信息系统的畏惧感,提高用户使用信息系统的信心,真正使系统成为提高生产管理效率的有效工具。
10、尽可能采用经过实际运行检验的成熟模块,

从而节省开发资源和缩短开发周期,确保项目按时交付使用。


定制软件开发项目管理
南思特的项目管理是在传统RUP 和XP 之间寻找一个平衡点的项目管理。我们称为“实用最好”的项目管理思想的贯彻。因为我们认识到,没有一种方法可以完全适用于不同的项目类型和客户。只有把握住管理过程中的一些核心不变因素,在简洁、有效、实用的前提下才是现实可行的。为此,我们在项目管理过程中坚持如下的一些基本原则:
1、 确定最适合的团队

包括选择称职的项目经理、合格的成员。特别是项目经理必须要了解成员,合理安排人员和工作。
2、 风险的预估和备用方案

充分估计项目的风险,是项目管理的核心。其风险包括人员风险、技术风险、需求膨胀、进度压力、质量风险等。必须要设定备用方案。
3、 分解原则

大的项目必须要进行分解。
4、 持续构建和尽早发布

在可能的情况保证每日构建的成功。在可能的情况尽早发布给产品经理或用户试用。
5、 测试驱动

测试的编写应该在代码的实施之前。
6、 全局规划,分步实施,步步见效

小步成功可以极大的减轻压力,避免质量风险
7、 合理的使用文档和工具

文档和管理工具的使用在必要时必不可少,但是过度使用带来的问题更多。
8 简单有效

项目的技术和构架的、产品的选用都应该坚持这个原则。
9 平衡原则

更多倾向RUP 还是XP,完全依据项目的特征和用户的情况而定,做好必要的平衡。

了解更多

后台功能设计的起点:权限方案设计分享

权限是一个公司信息系统的起点。我从入职以来就一直想要对公司后台的权限系统进行一个梳理(其实是老板要求的),苦于对后台和公司业务还不够了解,所以想法一直没能成型。终于,经过几个月断断续续的琢磨,我趁最近需求数量不多的时候,把权限的调整方案梳理了出来。

这次梳理公司后台的系统,我在原有权限系统的基础上引入了 公司组织架构,形成了 动态权限管理模式,使得公司的权限管理更加合理化。目前已经把方案提交给开发进行审核,希望可以最终落实。这里就先向大家汇报一下这几个月以来梳理权限的成果,给同样有权限体系设计问题的朋友们一点参考。

要设计权限,首先要对权限 已有的成熟方案有一定认识,其次要 对业务有深入的分析,才可以在业务的基础上有针对性的设计权限模型。

关于权限成熟方案,我查了很多资料,主要了解了一些关于 RBAC(Role-Based Access Control)权限模型的知识。加上在前司对SharePoint的权限分配方案有一定的了解,权限的知识基本就已经足够了(不够也没有更多了,找到一篇从产品的角度解释RBAC的文章,值得一读:请点击查看)

关于业务需求分析方面,我对公司后台的权限系统做了梳理。

因为公司对数据的保密要求很高,所以后台有大量查看项目、查看投资人的细致权限设置,但是 缺乏一致的管理方法,导致经常出现有需求无权限,或调动后权限没有及时清除的问题。公司后台主要是按照RBAC设置了权限体系,另外还根据项目服务小组的机制为每个项目单独设置了权限。后台RBAC的权限角色中,有部门角色、功能角色、临时团队角色等等,相对比较混乱。

现在这套系统面对一些问题:

权限角色太多,分类混乱。有大量临时建立弃而不用的分组;如果员工调换部门,需要逐个删除他已有的权限,再逐个赋予新部门的权限;如果部门领导更换,需要对部门内员工的所有成员的审批对象都进行调整。

为了解决上述问题,我尝试将公司的 组织结构信息引入权限管理的系统。

尽量以部门为单位分配权限,权限角色过多混乱的情况;出现员工部门调动或领导更换,会根据其部门更改自动重新分配权限;对无法按照部门分配的功能采取原有的权限分配模式,通过给不同的员工分配不同的角色实现,保证灵活性。

从上述的思路出发,我定义了新的权限管理需求。新的权限管理分为 部门权限制度和 非部门权限制度两种:

1、部门权限制度

部门权限分组默认按照组织结构图。

按照小组设置部门,部门分管理者权限和默认权限两种,默认权限为部门管理权限的子集。

若组织架构中的小组设置了管理者,则管理者默认拥有管理者权限。除管理者外,所有人加入小组后默认拥有默认权限。

(2)管理者权限包括

部门权限维护类:新建子权限组、默认权限维护、打破权限集成等权限(可以分配给部门领导使用,也可以掌握在超管手中统一分配) 审批类:所有报销、请假和购票的申请(若小组没有设置管理者,则小组成员所有审批事宜由上级层级中的管理者负责 ) 职能类:单个部门的全部权限

(2)权限维护类权限详细介绍

子权限组:部门内可以根据员工设置子权限组,根据子权限组,分配部门权限;默认权限维护:增删进入部门所默认拥有的权限;打破权限继承:使某位员工失去默认拥有的权限,为其单独分配权限。

2、非部门权限制度

组织方法参照原有RBAC权限管理;

超管可以为单个员工或小组开启非部门权限。

可以为非部门权限设置有效时间段;若员工调转部门,则所有非部门权限默认失效,需要超管审批以后方可重新生效。

这套规则可以基本解决原来的权限与部门没有关联的问题,以及权限分配混乱难以管理的问题。这仅仅只是产品从业务角度梳理出来的需求,具体实现还需要和开发商量以后解决。而且要真正能够落实实现还需要很漫长的过程。

这次设计方案给我最大的体会就是,设计复杂的功能最有效的手段还是 从具体是使用场景出发,使用场景决定业务逻辑,业务逻辑决定功能逻辑。我在最初设计的时候执着于寻找成熟的权限管理模式套用,后来发现这样生搬硬套不能提升后台权限分配的效率。在过后的几个月工作中,我接触到了不少分配权限的实际问题,比如不知道分权限给谁,或者分配出去的问题没有办法管理的问题。这些问题直接启发我引入了公司组织架构的概念,也便有了这套方案。

所以, 产品的设计与实现都服务于使用场景,才是真正好的产品,这一点对业务为导向的后台产品至关重要。与大家分享,也请大家多提意见。

了解更多

一直在说软件开发,软件开发分哪些方向?

有很多方向,下面给你列几个常见的:

1. 桌面程序:Java、C++、C#、VB、C均可。
2. 网站服务器端开发:JSP(Java语法)、PHP、ASP(C#语法)、Web App框架等
3. 网站客户端:HTML、CSS、Javascript、Flash等等,小程序用的便是以javascript为基础的应用架构
4. 智能手机程序:安卓使用Java,iPhone使用Objective-C
5. 底层、工具开发:C、C++,如:操作系统开发使用c,android系统底层是用c++。Linux系统等。
6. 多功能脚本程序:Python、Perl、Ruby等等
7. 人工智能:Prolog、PDDL
8. 工业控制:C、PLC、汇编
9. 通用应用数据交换处理技术:标记语言XML/XPATH/XSLT、JSON、YAML等等
10. 数据库: SQL/PLSQL
11. 嵌入式开发:java,OBJECTS-C,C、C++
12. 游戏开发:网页游戏可以用脚本语言javascript,python,后台可用Java,C#。 但PC上的大型游戏一般需要c++或C了。 特别的是,如果你会涉及IOS平台,用的是object-c。
13. 企业级应用开发:Java企业级标准。桌面的用VB ,VC ,C++, C#

社会在不断进步,开发语言也不断变化中。要跟上变化,就必须不断地学习。

了解更多

软件开发协议书(南思特标准模板)

项目开发协议书

 

 

甲方:                                   乙方:深圳市南思特科技有限公司

 

签订日期:                                   

             

    上述甲、乙双方,经友好协商一致,达成以下协议。双方申明,双方都已理解并认可了本协议的所有内容,同意承担各自应承担的权利和义务,忠实地履行本协议。

             

    第一条  本协议软件开发项目的内容、工作进度与安排、付款方式、成果交付和验收方式等由附件载明。本协议附件为本协议不可分割的一部分,与协议正文具有同等法律效力。

    第二条  协议履行期限按照附件规定的工作进度决定,经双方协商一致,可以延长该期限。

    第三条  甲方应向乙方提供必要的资料和方便条件,协助配合乙方进行软件的开发、调试、安装及实施。

    第四条  双方的基本权利和基本义务

甲方的权利和义务

        根据本协议项目的实际需要和乙方的要求提供协助,并提供有关的资料,报表及文档等,甲方保证所提供的所有资料完整、真实、合法。

按本协议约定支付软件开发费用。

甲方有权在软件验收之日起一月内,要求乙方对验收完毕的软件模块出现的非人为因素造成的错误及故障,进行免费维护。

乙方的权利和义务

        按照甲方提供的材料按时完成本协议规定的软件开发工作。

        可以根据甲方的要求帮助甲方举办培训和技术咨询,具体的操作方式及费用双方另行签署协议确认。

        依协议收取软件开发费用。

乙方有义务在软件验收之日起一月内,对验收完毕的软件模块出现的非人为因素造成的错误及故障,进行免费维护。

    第五条  甲方在一月的免费维护期之后,需要乙方对软件模块进行维护时,乙方可根据情况酌情优惠收取模块维护费用。

    第六条  本协议涉及的相关程序、文件源码的版权属乙方所有,但乙方授予甲方使用权。未经乙方许可,甲方不得公布文件源码,不得复制、传播、出售或者许可他人使用乙方作品及其程序等。乙方可以在业务范围内使用这些作品。双方当事人应当保守在履行本协议过程中获知的对方商业秘密。 

    第七条  甲方不能按时支付协议费用,导致的工期延误,其责任由甲方承担。

    第八条  双方应本着诚实信用的原则履行本协议。任何一方在履行中采用欺诈、胁迫或者暴力的手段,另一方可以解除本协议并有权要求对方赔偿损失。任何一方在履行中发现或者有证据表明对方已经、正在或将要违约,可以终止履行本协议,但应及时通知对方。若对方继续不履行、履行不当或者违反本协议,该方可以解除本协议并要求对方赔偿损失。

    第九条 任意一方欲提前解除本协议,应提前通知对方。甲方提前解除协议的,无权要求乙方返还预付费用并应对乙方遭受的损失承担赔偿责任;乙方无故解除协议的,应双倍返还上述费用。本协议其他条款对协议的解除另有约定的,从其约定。当订立本协议所依据的客观情况发生重大变化,致使本协议无法履行的,经双方协商同意,可以变更本协议相关内容或者终止协议的履行。

    第十条  本协议签订后,经双方当事人协商一致,可以对本协议有关条款进行变更或者补充但应当以书面形式确认。上述文件一经签署,即具有法律效力并成为本协议的有效组成部分。双方当事人对本协议的订立、解释、履行、效力等发生争议的,应友好协商解决;协商不成的,双方同意向仲裁委员会提交仲裁并接受其仲裁规则。本协议经由双方授权代表签字,自签订之日起生效。 本协议一式两份,双方当事人各执一份,具有同等法律效力。

             

             

            甲方:(授权代表签字)              乙方:(授权代表签字)

                                     

 

 

 

 

 

 

 

 

 

 

 

   附件:开发建设项目工作进度与安排、付款方式、成果交付和验收方式

               

一、开发项目内容:

详见需求清单附件。

            二、协议金额及付款方式:   

              1.本协议金额总计:人民币         元。

              2.付款方式:

              本协议签订后3日内,甲方向乙方支付协议金额的 50 %,即         元预付款,验收之后3日内支付协议余款即         元。

              3. 转账帐号:

行: 中国建设银行股份有限公司深圳宝安支行

    名: 深圳市南思特科技有限公司

银行帐号: 44201538900052515271

            三、完成及验收时间:

            完成时间:乙方收到本附件规定预付款项后         日内开发完成。

            验收期限:甲方在                    日前完成项目的验收,并确认。

            付款期限:甲方须于                  日前将余款支付给乙方。

             

            四、验收标准和验收后修改补充

              1.验收期限为壹星期。

              2.验收合格,甲方应以书面方式签收,但甲方在乙方交付工作成果后一周内未书面签收也未提出异议的,视为甲方验收合格。

              3.验收合格后,如果甲方在使用过程中需要增加软件模块或功能,乙方可根据改动情况酌情优惠收取模块增加维护费用。

 

              [本页以下无正文]

 

了解更多

微信营销:同样的产品,为什么别人卖得动你卖不动?

同样的产品,为什么别人卖得动你卖不动?

相信这个问题你一定遇到过,就是一样的产品,大家都代理了这个产品,你结果是别人卖了几十上百件,你卖几件就卖不动了。

什么原因呢?3个原因如下:

1、相信你的人少

可能你的微信里装了1000人或5000人,可这不代表大家都相信你,或认识你,多数人都没有和你接触过,聊过,交流过,别人凭什么在朋友圈看了你的产品就会购买呢?

如果有需求,也一定是找最信得过的人购买,而不是找一个从未交集的人下单,对吧?如果你要买手机,可能上淘宝京东,也可能会找你身边在卖手机的人购买,为什么呢?哥们,同学,信得过,对吧,而且可能给你成本价或他的进货价。

你跟他们买,一定是信任,或相信他们。反之,你会跟你不相信的人购买吗?不会,特别是在微信里毫无关系的人。

2、你不专业

这个最常见,你本身为上班的,可现在卖起了保键品,天天发保键品产品广告,同事或同学,如果在相信你的前题,又恰好的需求,可能会跟你购买,可如果,你平时对养生一点兴趣也有,也不懂,你说,别人会跟你买吗?因为在他的眼里,你也是个门外汉。

在互联网上不管是淘宝或微信里成交,都是专业对需求更容易成交,如果一问三不知,或很含糊,或你根本不懂,你说用户为啥会跟你买?

平时我们生病,会上医院,因为他们的规模大,设备齐,医生都是专业人士,平时我们生病都是跑医院。如果在路边小卖部有人跟你说,他能给你治病或卖药给你,你会买吗?多数不会,为啥?你不是医生,你又不专业,你也不是干这个事的人,为什么要相信你呢?

3、你的影响力小

这里直接用一个案例来说明,一个互联网牛人在网上卖课程,他一天卖几十万,同样的文案给你,换成你的名字,你发10天半月试下,看你能卖多少出去?

我相信有人能卖出去,可每个人卖的数量一定不一样,方法一样,文案一样,或说你们微信都是5005人,有的人卖几份,有人卖十几份,有人卖几十份,有人卖上百份?什么原因?有的人有影响力,你没有,所以你卖不动。

例如,你是做平面设计的,大家都是知道,你后来为了赚钱,加入微商代理开始卖产品,在朋友圈刷化妆品,你觉得,有多少人会跟你买?

是不是你复制文案就能卖?是不是你每天刷1020次朋友圈就能卖?是不是别人能赚到钱你也能?几单我相信有可能,但是,你要想靠这个养活自己一定很困难?为啥?你根本没影响力!

那什么是影响力?简单来说分2种,1种是权力性影响力,你公司老板或国家领导高层在会上说什么话,形式一种讨论或交流,或直接影响你的想法或工作方向。

2类是能力类影响力,如歌星明星或一些行业专家,他们在某个领域里有一定知名度,经常出现在公众场合或在互联网,给关注这个领域或行业的人造成一定影响。如,电商行业的马云,他的每一次公开谈话,都会有很有中小企业家或电商人关注,也许这会给他们方向,为什么他们相信马云?因为他的能力早就获得大家的公认。

如果,你的能力非常强,经常公开分享或写文章,在业界也会有影响力,那你在这个行业就是一个明星,也会有大量粉丝,这个时候你在卖点啥是很容易的事。

如果,你既不专业,相信你的人又少,也没有影响力(能力),却想通过在朋友圈刷出银子,这是很浪费时间又无价值的事。

这时你可能会说,刚哥,那我想通过朋友圈赚钱,如何解决这3个问题呢?方法非常简单。学会分享,学会交流,学会针对性的学习,你很快就可以变成专家,提高你的影响力,让更多人相信你,愿意跟你买单。

什么方法呢?就3个字:写文章。

说到这个你可能会觉得很难,其实写文章卖货比你想的要简单100倍,写字是交流,会打字就能写,会写就能交流,敢写就能赚钱,如果你不敢写,那些可能属于你的订单会被那些敢写的人朋友拿走,这是真的,因为,这件事,每天都在身边发生。

了解更多

类型对照表

类型对照表:

Win32 Types
CLR Type
char, INT8, SBYTE, CHAR 
System.SByte
short, short int, INT16, SHORT
System.Int16
int, long, long int, INT32, LONG32, BOOL , INT
System.Int32
__int64, INT64, LONGLONG
System.Int64
unsigned char, UINT8, UCHAR , BYTE
System.Byte
unsigned short, UINT16, USHORT, WORD, ATOM, WCHAR , __wchar_t
System.UInt16
unsigned, unsigned int, UINT32, ULONG32, DWORD32, ULONG, DWORD, UINT
System.UInt32
unsigned __int64, UINT64, DWORDLONG, ULONGLONG
System.UInt64
float, FLOAT
System.Single
double, long double, DOUBLE
System.Double

了解更多

C++与C#类型对应关系

c++:HANDLE(void *) ---- c#:System.IntPtr

c++:WORD(unsigned short) ---- c#:System.UInt16

c++:DWORD(unsigned long) ---- c#:System.UInt32

c++:结构体 ---- c#:public struct 结构体{};

c++:结构体 &变量名 ---- c#:ref 结构体 变量名

c++:结构体 **变量名 ---- c#:out

c++:GUID ---- c#:Guid

c++:UINT8 * ---- c#:ref byte

c++:char*/void*(指向一个字符串) ---- c#:string

对于结构体中的指针数组,对应于C#中的IntPtr[]类型,如:   

int * a[] -------------- IntPtr[]a

了解更多