IT技术博客

IT技术博客,精选各种精华文章供您阅读,是您学习各种IT技术的博客优选之地

程序员应知——简单就是美

我们经常会听到这样一句话——简单就是美,或者是这句话的各种变体,而且这句话不限于行业,不仅仅是在软件业,在各种涉及到设计艺术的领域,很多大师级的任务都会告诉我们,简单就是美。 在这里我当然只想针对软件开发相关的内容来谈,其实我们要解决的问题就是——到底要多简单呢? 对于UI设计——不需培训直接能使用 还记得曾经看过的基本讲述交互设计知识的几本书,其中都提到了,最简单也是最美的界面设计,就是用户直接就明白怎么用,而不需要长期的培训,对于这一点我深以为然,并且努力把这一点贯彻到自己所做的系统中。曾经记得自己帮朋友写了一个简单的库存管理系统,界面上没有菜单,只有几个必要的按钮,采用的是Office 2007的ribbon样式,并且精心挑选了几个意义鲜明的图标。朋友使用的时候,就告诉我,这个东西比他之前用过的财务软件好多了,那

解决问题的艺术:半小时编程实现照片的反转负冲特效

如何直接有效的解决问题是一门艺术。我们是做产品、做系统、做服务的,不是玩技术的,需要做的是在最短的时间内以最有效的方式来解决工作中面对的难题。就在刚才,用了半小时不到时间,俺用一种极其简单、直接、有效、霸道的方法解决了照片的反转负冲特效问题。这种解决问题的思路值得总结推广。 反转负冲(反转片)是一种摄影拍摄技术,它通过拍摄后反转冲洗,得到色彩鲜艳的照片,非常养眼。现在都是数码相机了,可以通过图像处理算法来模拟反转片的效果,比如说,“光影魔术手”就提供了5种反转片特效:(1)素淡人像;(2)淡雅色彩;(3)真实色彩;(4)艳丽色彩;(5)浓郁色彩。且看(5)浓郁色彩的效果: 左边是处理前的图像,右边是处理后的图像,可以看到,处理后的图像颜色格外饱满。我目前开发的一款图像处理软件,一个难题就是处理后的照片色彩会变暗,这个反转负冲特效的效果正是我所需要的。 且看“光影魔术手”怎样描绘

网络安全验证协议两则

      对于网络安全的知识比较匮乏,最近在读《深入JAVA虚拟机》一书,讲到了JAVA虚拟机的安全控制问题,想起本科的时候做过一个网络硬盘项目,其中纠结讨论的就是一个验证客户端和服务端以防止假客户端或假服务端欺骗的问题,一并总结了放在这里。 一、C/S结构网络应用验证       如果是广域网的C/S应用,比如QQ之类的,在进行通信之前,需要有一个彼此验证身份的过程。我们假设用户通过http协议发送的信息是可能被抓包软件捕获的,这样就不能明文传输用户密码等信息,怎样建立一个链接方式假冒的客户端或假冒的服务端骗取用户信息呢?当初我们使用了如下的协议方式:       使用语言可以将上述过程描述如下:   1.客户端接受用户输入的用户登录用

Silverlight中的ControlTemplate

      在ASP.NET中,我们看到的Control都是通过浏览器渲染Html产生的,说实话刚做Web的时候,需要掌握很多的知识,比如Js,Css,Ajax,这些需要学的东西很多,而且每一个都几乎是一个全新的知识,再加上自己没多少艺术细胞,所以做出来的效果总是很丑陋,连自己都看不下去,更何况别人了。所以当初自己刚接触Silverlight时,就立刻被其绚丽的UI震撼了。      最近因为工作需要,研究了一下Silverlight Toolkit中的部分控件源码,感觉收获颇多,关于Silverlight自定义控件,我觉得需要对Silverlight的基本概念掌握到一定的火候才行,因为如果想设计好一个自定义控件,就要熟悉依赖属性,动画,UIElement,Style,这些几乎都是Silverligh

K通道并归算法的优化实现

排序大规模的数据常用到外部并归排序。此算法分为两个步骤:首先把要处理的数据分成若干个区块,对每个区块载入内存进行排序;第二步则是把排序好的区块进行并归融合。我用此文章来介绍下一个优化的并归算法,称为K通道并归算法。该算法可以使用一次并归处理,就可以有效的融合K个区块。   对于比较少的数据进行排序,一般是直接载入主内存,进行快速排序。大多数主流语言都提供了API库支持:比如.NET运行库的Array.Sort函数,Java运行库的Arrays.sort函数注1;简单的调用API库函数即可排序好数据。   但是在实际情况中,有时我们需要对大规模的数据进行排序。比如处理一个搜索引擎爬虫产生的数据,可能一天有几个GB的数据量,甚至上TB的数据。把这些数据全部加载入内存进行快速排序是不现实的。所以才有了外部并归排序算法。     假设我们要处理的数据是存储在一个外部文件中。文件的每一行都

Hacker传说之不能说的秘密(2)

说明1:对点击“推荐“的朋友表示感谢,博客园有没有可以看到是谁推荐的功能呢?说明2:对所有的评论朋友表示感谢,即使是批评意见也很有价值。说明3:是这个系列的第一篇,忍不住放入太多内容,导致重点不突出,等有时间把文章重构成2-3篇说明3:题目中的Hacker是特指编程技术超牛的程序员。而不是指黑客,由于中文把Hacker翻译成了黑客所以导致了混淆。      黑客又被称为黑帽黑客(Black Hat),cracker,脚本小子,是利用所学技术继续进行系统破解的人群。      本系列的Hacker都是指编程顶尖高手,也被称为白帽黑客(White Hat) ,比如hacker老大 Linus。      这也就是Redha

.NET程序员开始起步

首先自我介绍下,我是一名即将毕业的实习的大学生,专业是软件工程,最喜欢的一个单词是"System"。 我是java和c#都学的,两门语言都学。刚开始经常还有时候打架。虽说语法很相似,但是在相似的同时也有细微的区别,还好我们的书本身把常见的不用都列举出来。但是初学嘛经常混淆,两年的学习下来现在好多了。基本上不会打架了。学JAVA的时候从JAVA语法开始学起然后是面向对象OOP,接着又是JSP,servlet,最后是SSH三大框架。C#也是从基本的语法学,然后是winfom窗体程序,ADO.NET,接着是ASP.NET ,AJAX,(这期间有穿插一门三层架构),最后又学习了Web Services(这个对我的影响非常大)。 学习这些语言的基本语法对于我来说不在话下,毕竟我是从QBASIC开始学的。学了两年的QB感觉学起现在的语言确实有很多的帮助。一个是编译型一个是解释型的语言。相当年今天写求最

2010年11月blog汇总:敏捷练习、需求和建模

11月份工作上主要是进行指标产品sprint8以及考虑业务平台的建模支持,本来在TOGAF工具上安排的时间有十几天,但是本月零星工作较多,所以投入的时间只有一周多点。大部分晚上的时间都在进行敏捷结果练习以及查看blog和看书了,一方面锻炼自己,另一方面与团队分享。   敏捷个人  30天敏捷结果(12):效率角色-你是启动者还是完成者? 30天敏捷结果(13):如何对事情付诸行动 30天敏捷结果(14):要事第一 30天敏捷结果(15):让自己处于宁静状态 30天敏捷结果(16):使用隐喻来激励自己 30天敏捷结果(17):找出高效时间,并利用它来处理重要事情 30天敏捷结果(18):给每周增加创造性时间 30天敏捷结果(19):你在为谁做事?     30天敏捷生活(5):形成个人价值观 30天敏捷生活(6): 你的生活目标是什么? 30天敏捷生活

.net, 哥已心灰意冷

             最近一个同事要离职了,闲暇的时候和我们聊天,他学.net 很多年了。.net不断更新,他不断的学,学得都累死了还是学不完。刚用会一个东西,然后马上又换代了,现在30好几的他,觉得再搞这个搞下去已经没什么出路了。他用他的人生实现了严援朝的那句话:永远拿着本书在学,永远也学不会。他前两年转了sap ,现在觉得sap也就是一些固定的业务,没什么实际的技术,现在决定去搞底层开发。              我女朋友的表哥,国内某著名大学研究生,他们做的产品,国内同行业销售第一。搞得不是这些什么 .net ,就写写 c 就可以,不过技术含金量很高,要懂很多东西才能编出那程序。年薪是我们的好几番,房子什么的都有了,腾讯重金聘请,

重构,避免重构误区

现在有太多是文章讨论各种重构的技术,咱们就不谈了,我们就谈谈要怎么重构。   一谈到重构,大家大多认为是运用设计模式,来使你的代码看上去非常优雅。其实重构包括很多,一个变量名的修改、代码格式的编排、分解一个大方法的等等都是属于重构的范畴。   我相信肯定有人和我一样,捧一本重构方面的书(《重构与模式》Joshua Kerievsky著,这本就不错),一劲的狂喊这样写代码太漂亮;可是丢开书本,面对自己的代码一直寻找可以运用设计模式、需要重构的代码,最后发现一处可重构的都没。 写出优雅的代码,相信对于很多人来说一直是个瓶颈、很难去突破。不过突破后,你会发现你的世界变大了,犹如跳出井口的青蛙。   那我们到底才能写出那么优雅的代码呢。我们先说说,我们的重构误区吧。 误区:  1、从已有的代码寻找与书本中匹对一样或类似的场景。  2、在编写新代

[SharePoint 2010 的那些事儿-InfoPath]SharePoint工作流中的InfoPath

采得百花成蜜后,为谁辛苦为谁忙?每日忙碌,不知前路为何,所求为何,所为为何,无奈啊。 几句牢骚话,各位看官不必介怀,还是说正文吧。关于SharePoint 2010与InfoPath 2010相结合的应用也写了几篇文章,虽然都比较简单,但我个人认为通过简单的配置来完成客户的各种需求才是SharePoint的真义所在。这篇文章就继续来说下如何在SharePoint Designer 2010设计的工作流中使用InfoPath来修改工作流表单的模板。 在SharePoint 2010中新加入了网站工作流,这个新功能使得我们可以不必将工作流与某一列表或文档库相关联,而直接的在网站级别就可以发起。在下面的例子中就将使用一个网站工作流来向大家介绍如何使用InfoPath定制工作流表单。 首先需要使用SharePoint Designer 2010来创建一个网站工作流。打开Designer 2

基于事件驱动的状态偏移状态机管理系统AnpherSystemManagerV1.0

基于C语言写的一个系统,斗胆投稿园子首页,写错的地方欢迎各位拍砖,谢谢! 最近转战G+C项目,在MTK上挂载VIA的芯片,自己被安排维护开机和模式切换导致的子系统状态的管理,原来的设计通过一个中央函数的调用,还有无数全局变量的控制来实现负责的状态机管理,让我花了好几个工作日去理解他的实现思路,不过这个是已经量产过的代码了,不能对她做很多的改动,所以内心里一直想把这个代码重写的欲望压抑到现在,经过自己几个晚上的努力终于得到完成。现在贴出来跟大家分享一下。 系统需求背景:对于一个系统,他可能存在很多状态,这些状态会随着系统的变化不断进行切换,而且在其状态变化的过程中随时可能有其他的事件发生以改变其状态切换的方向,当然当这个事件发生时系统所处的状态可能是其中的任一状态。举自己代码的实现的通用例子来讲,子系统的状态可能处于关机,开机中,开机,系统启动中,系统正常运行,系统关闭中,关机中等等状态,状

LinkedIn公司实现的实时搜索引擎Zoie

一、总体架构 Zoie是linkedin公司基于Lucene实现的实时搜索引擎系统,按照其官方wiki的描述为: http://snaprojects.jira.com/wiki/display/ZOIE/Overview Zoie is a realtime indexing and search system, and as such needs to have relatively close coupling between the logically distinct Indexing and Searching subsystems: as soon as a document made available to be indexed, it must be immediately searchable. The ZoieSystem is the primary compo

关于中国程序员注册Marketplace 的几点说明

相信也有很多中国的程序员和 Windows Phone App 开发爱好者非常关注微软 Windows Phone 在线商店 Marketplace,以及将程序发布在上面卖钱的问题。 Marketplace 的全称是 Windows Marketplace for Mobile,中文也叫做"商店应用程序"。使用 Windows Phone 的用户可以通过 Windows Phone 登录这个商店,购买免费或者收费的应用程序并下载使用。这一做法类似于苹果的 App Store。因此,开发者当然也可以注册登录,在 Marketplace 发布自己的应用,然后卖钱。如果您需要在 PC 上访问 Marketplace,请访问 http://marketplace.windowsphone.com/ 。 昨天,我听到了一个来自社区的疑问,就是说咱们中国的开发者为什么不能用中国的信用卡注册 Mar

Silverlight使用JavaSocket连接jabber服务器

Silverlight使用JavaSocket连接jabber服务器 一、开发环境 Vs2010,Sl4,jdk6,MyEclipse8.5   二、Silverlight socket 使用 注意事项 1、Silverlight Socket 数据交换端口必须在4502-4534范围  2、必须创建一个Socket监听943端口(该端口是固定的,客户端策略请求固定发送到该端口)    三、Silverlight Socket 访问介绍流程图   四、服务器java端介绍以及代码   1、去官网下载 smack jar包  http://www.igniterealtime.org/downloads/source.js

30天敏捷结果(19):你在为谁做事?

  “Beauty is altogether in the eye of the beholder.?” — Lew Wallace   你的结果: 清楚你是为谁在做事,知道你做的事情是满足期望的还是提供价值的内容     在30天敏捷结果:开篇中说到接下来我们将进行敏捷结果练习,前一篇学习了18:给每周增加创造性时间,今天我们要进行Getting Result练习的第19天,你在为谁做事?(Day 19 — Who are You Doing it For?)当我们清楚了为谁做事时,随之而来的就是信仰。当你知道你为谁做事,你能够检查是否所做的有价值,或者是否有更重要的事情。你能够投入更多的时间和精力在重要事情上,更重要的是,你能够更好的找到你做事的价值。 你传递什么价值? 在我们做产品开发时,经常会

关于ActiveRecord、领域模型以及iBatis的种种想法

首先,我想说明的这是一篇纯意识流的文章, 想到哪里说到哪里。有强烈数据结构、流程逻辑控的博友可以略过……   关于ActiveRecord、领域模型以及iBatis的种种想法   最近看了面向领域的种种争论,基于ActiveRecord的设计模式确实能将DAO(Data Access Object)对象、DTO (Data Transfer Object)对象和DMO Service (Domain Model Service Object)很自然的合并到一个继承自ActiveRecordBase的子类中。   如 DMO对象 PersonBase { public string Name { get; set; } public  int Age {get; set;} public  string State

Google App Engine的14宗罪

最近一位老外朋友很郁闷,使用Google App Engine平台,花了15000欧(), 却用的很不爽。于是耐心的写了一篇《Goodbye Google App Engine》,引来众人围观,其中还包括Google的工程师亲临指导。我也是Google App Engine的使用者,不过我基本上是属于个人开发,从来没有超过标,不需要给美刀,用的也挺爽。不过这位老兄是正儿八经的使用GAE进行企业级工程的开发,确实把他郁闷坏了。老外说话都比较啰嗦,我帮他总结了一下他提到的GAE14宗罪,同时也加上自己的一点注释。     1. 需要Python2.5版本 Ubuntu中早已经默认不是2.5版本了,现在主流版本已经进入到2.6甚至2.7了,所以用个GAE还要再装个2.5版本,让人很不爽。 2. 不支持Https 3.  请求超过30秒将会返回失败

Visual Studio与C#编程十个实用技巧

如果你通过搜索引擎发现这篇文章的,我建议你先看看本系列的第一篇,这是本系列文章的第二篇,今天为大家带来更丰富的C#和Visual Studio编程技巧,一起来看看吧。   1、DataTable.HasRows   它不属于任何框架,但通过扩展方法很容易模仿这样一个方法,它不会消除检查数据表对象是否为空或行数的原始代码,但它可以简化应用程序的代码,下面是一个代码片段: Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/ --> Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->public

网站开发人员应该知道的61件事

有人在Stack Overflow上发问,动手开发网站之前,需要知道哪些事情? 不出意料地,他得到了一大堆回答。 通常情况下,你需要把所有人的发言从头到尾读一遍。但是,Stack Overflow有一个很贴心的设计,它允许在问题下方开设一个wiki区,让所有人共同编辑一个最佳答案。于是,就有了下面这篇文章,一共总结出六个方面共计61条"网站开发须知"。 我发现,这种概述性的问题,最适合这种集合群智、头脑风暴式的回答方式了。这也是我第一次觉得,Stack Overflow做到了Wikipedia做不到的事。(难怪它最近挤进了全美前400大网站。) 在我的印象中,关于网站开发,这样全面的概述性文章非常少见,因此也就非常有用。大家不妨看看,61件事情中你做到了多少? ============================= 网站开发人员应该知道的61件事 原文网址:http://