ios客户端开发使用框架

这个月开始重启ios客户端的研发,之前做过一个图书软件,这次要做一个学术在线的客户端。 这次用到了如下一些框架: FMDB:一款轻量级的访问sqllite类库,非常强大 ,FMDB将SQLite API进行了很友好的封装,使用上非常方便,对于那些使用纯Sqlite API来进行数据库操作的app,可以考虑将其迁移到基于FMDB上,这对于以后数据库相关功能的开发维护,可以提高不少效率。 ASIHTTPRequest:一款访问网络的类库,支持断点续传。 ASIHTTPRequest就是一个对CFNetwork API进行了封装,并且使用起来非常简单的一套API,用Objective-C编写,可以很好的应用在Mac OS X系统和iOS平台的应用程序中。ASIHTTPRequest适用于基本的HTTP请求,和基于REST的服务之间的交互。 **cocoa-aes:**一款进行进行aes加密解密的类库,我自己做了封装,支持aes的128对称加密算法。

August 12, 2012

软件奇才——安德斯·海尔斯伯格(Anders Hejlsberg)

简介 出生于哥本哈根,安德斯·海尔斯伯格曾在丹麦技术大学学习工程,但没有毕业,大学时期他曾替 Nascom microcomputer撰写程式,他曾为Nascom-2电脑撰写蓝标签(Blue Label) Pascal compiler,到了DOS时代他又重新改写这套compiler。当时他在丹麦拥有个叫Poly Data的公司,他编写了Compass Pascal编译器核心,后来叫Poly Pascal。1986年他首次认识了Philippe Kahn。 在Borland公司 安德斯·海尔斯伯格把Compass Pascal编译器核心授权给了美国Borland公司,并作为雇员加入Borland公司,并且是后来所有Turbo Pascal版本与Delphi前3个版本的架构师。Philippe Kahn为第一个版本的Turbo Pascal添加了用户界面与编辑器。 加入微软公司 1996年Hejlsberg加入微软公司。据说,比尔·盖茨亲自参与了这次挖角行动,年薪三百万美金,并许诺安德斯·海尔斯伯格在微软将得到技术上的足够自由和资源支持[1]。据说该事件也是微软公司和Borland公司后续官司的导火索。 在微软公司 进入微软公司后,首先主持了Visual J++的开发工作,后来由于在Java开发工具授权问题上和Sun公司的纠纷,微软停止了Visual J++的后续开发。 这之后,作为.Net概念的发起人之一,安德斯·海尔斯伯格被任命为微软.Net的首席架构师,主持.Net的开发工作。 人物生平 安德斯·海尔斯伯格(Anders Hejlsberg)曾在丹麦科技大学学习工程学。他第一次登上软件界历史舞台是在80年代早期,因为他为MS-DOS和CP/M设计了一个Pascal编译器。当时,还是一个小公司的Borland很快雇用了他,并买下了他的编译器,改称Turbo Pascal。在Borland,Hejlsberg继续开发Turbo Pascal,并最终带领他的小组设计了Turbo Pascal的替代品、开发工具史上的奇迹:Delphi。 1996年,Anders Hejlsberg在Delphi 3发布前离开Borland去了微软(Microsoft)。 在此之前,微软曾多次企图挖走Anders,但都没有成功。据信Anders去微软(主要)不是钱的问题,虽然微软的开价也相当有吸引力: 130万美元年薪外加股票期权和分红,总计超过300万美元。更主要的原因是Anders和Delphi开发组的其他成员在修改编译器的问题上发生了争执;还有,据Borland内部人讲,Anders认为自己不再是“不可缺少的人”。 Anders在Delphi 3中几乎没有做什么工作,Chuck Jazdzewski扮演了一个更重要的角色。(Anders Ohlsson) Anders在Borland时把所有精力都放在了Pascal产品上,也需要新的挑战,这时Bill Gates的亲自邀请,许诺给与挑战的机会,Anders加入了微软就势在必行。 微软用丰厚的薪水、股票认购权和巨额的加盟奖金雇请了 Hejlsberg 之后,Borland 曾提出通过不正当手段吸收新成员的控告。Borland 还曾声称 — 提供了很少的细节来支持指控 — Hejlsberg 正在开发“Delphi for Java”。这场诉讼虽然最终以 Borland 的胜利而收场;但Anders 已经在为微软工作了。 1996年Anders来到微软后,直接主抓Visual J++的研发工作,并在1999年被授予“distinguished engineer”(卓越工程师),在微软仅有16人获得这样的荣誉。 后来微软希望通过开发最新的软件开发语言来赢得软件开发者的拥戴,在微软公司把视窗操作系统和软件向网络迁移的新市场战略中,C#语言是最重要的环节。微软动用了最好的资源。Anders担任了C#语言的首席设计师,同时也是微软.NET战略构架的重要参与决策者。考虑一下Anders的经历,就不会奇怪微软将此重任交给他了。毕竟C#也不是他对软件开发方式重大变革的首次。现在经过几年时间的埋头苦干,C#已成为微软反击Java语言的最有力武器。 业绩与成就 鉴于他为软件开发做出的巨大贡献,Anders在《Dr.Dobb’s》杂志的2001年西部会议上被授予“Prestigious Excellence in Programming Award”,《Dr.Dobb’s》杂志的主编Jonathan Erickson说:“这一荣誉,我们每年只颁给那些在软件开发领域做出非凡贡献的人员,Anders开发的C#和他整个职业生涯中为软件开发所做出的巨大贡献有目共睹,他无愧于这一荣誉!” 社会评价 比尔盖茨也高度评价说:“我们为Anders获得这一荣誉感到无比自豪,Anders在C#创建中所做的努力将会改变现在的软件开发方式,并将在以后的十年继续产生影响。” “程序员是最好的职业”,Anders说:“每两年,CPU的速度要加倍,内存容量是原来的四倍,但是我们的大脑还是原来的大小,很显然,将需要更多的程序员来补充这些。”

August 10, 2012

跨平台移动开发商Xamarin融资1200万美元 用于提升服务

北京时间7月25日消息,据国外媒体allthingsd报道。近日,跨平台移动开发软件服务提供商Xamarin获得投资1200万美元,投资商分别是Charles River Ventures,Ignition Partners和Floodgate。 Xamarin公司是由两位联合创始人Nat Friedman 和Miguel de Icaza于去年共同创办,发展至今,已拥有7500多位付费用户,其中包括音乐服务商Rdio。Xamarin的技术帮助开发人员通过一套常见的编程工具来编写Android,iOS和Windows Phone软件。 Rdio工程副总裁Todd Beeman在声明中表示,“我们拥有了Xamarin就等于拥有了一切,节省了大量工程时间,通过跨平台特性打造华丽、高性能的本地应用。” Xamarin创始人Friedman称,此次资金将用于改善公司服务并建立销售和营销工作。 Friedman在一份声明中表示,“我们的使命是提供快捷、简单、具有趣味性的服务来创建强大的移动应用。在第一年中,我们取得了优异的成绩。每月有1.2万个新开发者和上百万美元的收入。这笔资金将帮助我们履行使命,使更多开发人员参与进来。” 原文链接:allthingsd

August 8, 2012

Hadoop介绍

Hadoop一个分布式系统基础架构,由Apache基金会开发。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力高速运算和存储。Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有着高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上。而且它提供高传输率(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求(requirements)这样可以流的形式访问(streaming access)文件系统中的数据。 Hadoop是一个能够对大量数据进行分布式处理的软件框架。但是 Hadoop 是以一种可靠、高效、可伸缩的方式进行处理的。Hadoop 是可靠的,因为它假设计算元素和存储会失败,因此它维护多个工作数据副本,确保能够针对失败的节点重新分布处理。Hadoop 是高效的,因为它以并行的方式工作,通过并行处理加快处理速度。Hadoop 还是可伸缩的,能够处理 PB 级数据。此外,Hadoop 依赖于社区服务器,因此它的成本比较低,任何人都可以使用。 Hadoop带有用 Java 语言编写的框架,因此运行在 Linux 生产平台上是非常理想的。Hadoop 上的应用程序也可以使用其他语言编写,比如 C++。 Hadoop主要包括如下子项目 Hadoop Common: 在0.20及以前的版本中,包含HDFS、MapReduce和其他项目公共内容,从0.21开始HDFS和MapReduce被分离为独立的子项目,其余内容为Hadoop Common HDFS: Hadoop 分布式文件系统 (Distributed File System) - HDFS (Hadoop Distributed File System) MapReduce:并行计算框架,0.20前使用 org.apache.hadoop.mapred 旧接口,0.20版本开始引入org.apache.hadoop.mapreduce的新API HBase: 类似Google BigTable的分布式NoSQL列数据库。(HBase 和 Avro 已经于2010年5月成为顶级 Apache 项目) Hive:数据仓库工具,由Facebook贡献。 Zookeeper:分布式锁设施,提供类似Google Chubby的功能,由Facebook贡献。 Avro:新的数据序列化格式与传输工具,将逐步取代Hadoop原有的IPC机制。 要掌握hadoop,首先必须深入研究google的3篇论文:map-reduce、gfs和bigtable。

July 24, 2012

博客定居于此

博客搬家到此,dodoro的梦想天空,不会再变啦~

July 16, 2012

我们的五月,我们的三亚,我们的夏天

这一天,早在一年前就在规划,虽然这个月来经历了太多太多,但终于还是能放下所有的工作,轻松地踏上长达半个月的旅行,这一次我们的目标是:三亚和江南。 第一天,乘坐京沪高铁到上海虹桥,换成飞机飞往海南岛、飞往三亚。高铁是贵了点,但确实很舒服,安静、自由、舒适的环境,5个小时一晃就过去了,南航的飞机也还算不错,晚上9点我们终于登岛了。 5月底的三亚很闷热,在7天待了一晚,第二天就奔向亚龙湾,入住仙人掌。和预想中的差不多,酒店很舒适,游泳池、绿化都很美,而亚龙湾的环境更是一流。迫不及待地,我们坐电瓶车到酒店的沙滩浴场,亚龙湾的海水非常干净,一片蓝蓝的海洋,这才是儿时梦想中的海洋啊。今天,我们第一次穿着泳装在海里游泳了。晚餐,一份红薯叶、一份文昌白切鸡、一份回锅肉,吃得很饱。 第三天,丰盛的自助早点后,我们一起到海里游泳,沙滩太阳浴,一直在玩,睡,玩,度假的感觉真爽…晚餐,还是在仙人掌吃,晚饭后在酒店花园和泳池玩,也很开心。今天我还教会了小咪仰泳,喔~ 第四天,玩了一天,但是小咪开始不开心…是我太小气了(而明天我将被报应…)晚饭定了一个自助烧烤,一路慢慢走回来。目前不知道是不是因为这个自助烧烤埋下了明天的恶果… 第五天,早上小咪又闹情绪了,去海边回来后,吃那个梅菜扣肉…然后去市区买干粮,回来的路上肚子开始有些不舒服,进门后马上就稀稀了…而且很严重…晚饭也没有吃好,SPA后好多了,也许是老天注定,2012没有long… 第六天,肚子好多了,带小伤入住红树林。红树林,很贵,我们期待也很高。果然,升级了豪华园景房,并且整个红树林的环境太美了。进入房间,小咪说:我自己的家也要这样。确实,不愧是五星级酒店,房间的设计摆设都特别好,一切都弄好了,就等着客人享受。而我们没有想到的是,红树林的沙滩上亚龙湾最好的,沙滩的沙子细腻,海风平缓,海水清澈见底,最让我们想不到的是:我们看到了海鱼,这些小鱼就在我们附近游泳。晚餐吃泰菜,典型的热带感觉,点了很多菜,冬阴功汤好喝,马拉盏炒茄子好吃,我完全吃撑了,真的很撑很撑… 第七天,在亚龙湾的最后一天,在红树林的沙滩玩。没想到今天天气超好,沙滩、阳光和海水,还有快乐的两只熊。离开红树林前,小咪依依不舍,其实我也是…今天回到了三亚市区,午休后,去了免税店。小咪终于有了自己的channel香水。“用香水的女人有未来”,我跟小咪说:我们的未来不是梦~ 第八天,我们相约天涯海角,南天一柱。天气有些热,今天找到了吃好吃米粉的地方~港门粉、牛杂粉等等都吃。 第九天,今天是三亚待的最后一天啦。我们决定重返亚龙湾,去海洋天堂公园。本来期待还挺高的,只可惜成了过山车旅游了…还好,看到了很多热带植物,而且从山上看到前几天我们住的亚龙湾~ 第十天,乘坐城际列出驶往美兰,沿路见到了很多很多椰子树,这果然是三亚~中午的飞机,小咪一直期待能从天上看到大海。随着飞机慢慢起飞,再见,三亚~再见,亚龙湾~

June 26, 2012

HttpContext.Current用法,.ashx文件中使用Session,在非Web项目中使用HttpContext.Current

在类库项目(或者其他非Web项目中)有时候需要HttpContext.Current这个方法,我们发现在类里面添加了引用“using System.Web;”之后还是不行,其实解解这个问题很简单,只需要在该项目的“引用”中添加System.Web这个引用就可以了。 另外值得注意的是,在非Web项目中使用HttpContext.Current.Cache、HttpContext.Current.Session等的时候,最好进行判断HttpContext.Current是否为空: if (HttpContext.Current != null && HttpContext.Current.Session != null) { string test = HttpContext.Current.Session[“Session”].ToString(); } 这是因为有些情况下Session或者Cache等会被截断,比如在.ashx文件中,默认情况下就会截断Session。当然也可以通过设置在.ashx文件中使用Session,但是为了安全,最后进行判断。 如果要在.ashx文件中使用Session,那么要先引用“using System.Web.SessionState;”,然后继承接口“IRequiresSessionState”,下面是一个例子: using System; using System.Data; using System.Web; using System.Collections; using System.Web.Services; using System.Web.Services.Protocols; using System.Web.SessionState; namespace Lemon.Life.WebData {/// 演示“在.ashx中使用Session” [WebService(Namespace = “http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] public class Xml : IHttpHandler, IRequiresSessionState { public void ProcessRequest(HttpContext context) { context.Response.ContentType = “text/plain”; context.Session[“Test”] = “Test”; string test = context.Session[“Test”].ToString(); context.Response.Write(“Hello World”); } public bool IsReusable { get { return false;} } } }

May 21, 2012

面向对象必知:继承本质论

每个人开始学习面向对象的时候,基本上都感觉自己很能理解什么是“继承”,可是我相信没有多少个人是真正地理解了“继承的本质”。 继承,就是面向对象中的类与类直接的关系,继承的类叫做子类或者派生类,而被继承的泪叫做父类、基类或者超类。通过继承,子类可以拥有父类的属性、方法,同时子类也可以添加新的属性或者方法,还可以修改父类的方法和属性等。 在《你必须知道的.NET》中,作者列举了下面几个关于继承的要点: 1、继承是可以传递的,子类是对父类的扩展,必须继承父类方法,同时可以添加新方法; 2、子类可以调用父类的方法、属性和字段,但是父类不能够调用子类的方法、属性和字段; 3、虚方法如何实现覆写操作,使得父类指针可以指向子类对象成员; 4、子类不仅继承了父类公共成员,也继承了私有成员,只是在子类中不被访问; 5、new在虚方法继承中起阻断作用。 上面这五条几乎可以说是继承的本质,深刻理解了这些,基本可以说对继承掌握了,不过还有一个比较重要的地方需要注意,请看: #region 深入理解继承机制、多态、封装 public abstract class Animal { public abstract void ShowType(); public void Eat() { Console.WriteLine(“All Animals need eating!”); } } public class Bird : Animal { private string type = “Bird”; public override void ShowType() { Console.WriteLine(“Type is {0}”, type); } private string color; public string Color { get { return this.color; } set { this.color = value; } } } public class Chicken : Bird { private string type = “Chicken”; public override void ShowType() { Console.WriteLine(“Type is {0}”, type); } public void ShowColor() { Console.WriteLine(“Color is {0}”, Color); } } #endregion 上面是定义了一个抽象父类和两个子类,下面是调用方法: #region 深入理解OO思想 //Bird bird 创建的是一个Bird类型的引用,而new Bird()完成的是创建Bird对象,分配内存空间和初始化操作 Bird bird = new Bird(); Chicken chicken = new Chicken(); Bird bird2 = new Chicken();//请注意上面这里的区别 bird.ShowType(); chicken.ShowType(); bird2.ShowType(); #endregion 如果你能够了解为什么上面得到的结果,你就深刻理解了什么是继承了

May 21, 2012

Mono重生?Mono创始人成立新公司Xamarin

Miguel de Icaza已成立了一个新的独立公司Xamarin,给Mono一个继续奋斗的机会。 最近的消息称Attachmate公司对Mono框架不再感兴趣,这个消息已经北证实。Mono都创始人Miguel de Icaza终于打破了长久的沉默,透露他已经成立了Xamarin公司来继续支持Mono项目。 Mono团队被Attachmate公司解雇,使Miguel de Icaza非常难过: 一年以来我们一直都想把mono从Novell分离出来,大家一直认为独立成立一个公司将给Mono能带来更光明都未来。 长话短说,分离 Mono都计划没被执行,反而在5月2日加拿大和美国都团队被遣散了,几天后欧洲、巴西和日本团队也不能幸免.这包括MonoTouch和 MonoDroid工程师以及其他主要Mono开发人员。虽然Attachmate公司解散了我们,但只要我们在Novell都一天我们会继续给我们都用 户提供技术支持。 Mono项目有良好的前景,它为Linux以及IOS和Andriod提供C#以及框架支持。然而所有的实现都不是完善的。所以对开发人员都又局限 性。你不能简单快速的把.NET程序移植到Mono,因为缺失相应都框架类以及其它实现,尤其是WPF。同样的,如果使用Mono为iOS或 Andriod写个应用需要学习很多知识,它和在Windows Phone 7建立应用程序的关系不大。 还有在Mono中使用都微软的专利和知识产权问题,微软声称将来可能由于专利和知识产权而导致使用Mono的产生一系列的问题,现在不会对Mono有动作,但将来不见得。很多使用Mono做项目的开源支持者都视之为是个不定时炸-弹。 除了Mono和Moonlight,Xamarin还计划商业产品,既定目标是: 为iOS建立一个新都商业.NET; 为Andriod建立一个新都商业.NET; 继续为Mono和Moonlight贡献和开发; 为Moonlight在移动领域以及苹果Appstore寻求机会; 这两个商业项目需要更多都开发来为潜在的用户提供服务,需要更认真的工作。而且在移动领域以及苹果Appsotre来探索Moonlight的发展 也是件非常有趣的事情。Silerlight并没有成为微软声称的伟大的跨平台的统一者,目前来看貌似微软已经对其失去了兴趣。如果Mono能成为跨平台 的浏览器插件,可能会进一步触发微软的不定时炸-弹爆炸。这当然也不会被苹果所接受,因为这无疑是另一个Flash。 当然一切都归结于资金,如果又足够的资金这个项目或许会有所成就,博客声称已经得到一些资金,而且还有在合同期的工程师们。这听起来比较危险,他们没有足够都资金,只能寄希望于一些勇敢都基金了。 目前看来,Mono的用户都非常支持Miguel de Icaza和他的新公司。在他的博客评论中很多个人表示想投资,但前提是如果自己有钱。但这并不能对这事起到真正都改善作用。关键是.NET社区的反应以及微软的回应。 如果你想帮助Mono,可用访问Xamarin的网站:Xamarin website

July 10, 2011

.NET的Windows模拟身份验证,远程网络传输文件

在开发过程中,常常遇到这样的问题:文件,包括图片和文件上传到服务器,而Web服务器和文件服务器不是同一个,而且不在同一个域里面,那么针对于.NET应该如何处理这样的问题呢? 可能很多高手一下子就知道如何解决,但是我确实是经过了一番努力才弄明白,下面就结束如何使用.NET的Windows模拟身份验证。 1、首先引用两个名称空间 using System.Security.Principal; using System.Runtime.InteropServices; 2、其次定义好模拟权限的调用方法 region 权限模拟 public const int LOGON32_LOGON_INTERACTIVE = 2; public const int LOGON32_PROVIDER_DEFAULT = 0; [DllImport("advapi32.dll", CharSet = CharSet.Auto)] public static extern int LogonUser(String lpszUserName, String lpszDomain, String lpszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken); [DllImport("advapi32.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto, SetLastError = true)] public static extern int DuplicateToken(IntPtr hToken, int impersonationLevel, ref IntPtr hNewToken);<summary>/// 验证用户,并生成WindowsIdentity 实例 </summary>private static WindowsIdentity GetIdentity(String userName, String domain, String password) { IntPtr token = IntPtr.Zero; IntPtr tokenDuplicate = IntPtr.Zero; if (LogonUser(userName, domain, password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, ref token) == 0) return null; else if (DuplicateToken(token, 2, ref tokenDuplicate) == 0) return null; else return new WindowsIdentity(tokenDuplicate); } public WindowsImpersonationContext GetContext() { WindowsIdentity identity = null; WindowsImpersonationContext impersonationContext = null; identity = string.IsNullOrEmpty(user) ? null : GetIdentity(user, null, pwd); // 使用用户凭证进行用户模拟 impersonationContext = (identity == null) ? null : identity.Impersonate(); return impersonationContext; } #endregion 3、在调用身份模拟的函数中使用 ...

May 21, 2011