Monthly Archives: April 2012

© 2012 . All rights reserved.

斯坦福大学开放课程:编程范式学习笔记《一》

编程范式(Paradigm) Lesson 1 读书笔记: 列举几种常见的编程语言(范式): C Assembly C++ Concurrency programming(并行编程) (只是一种范式,而不是语言,可以使用C/C++实现并行编程) Scheme Python   C是面向过程,C++面向对象。C语言是函数调用函数,因此就像一个多级标题一样,通过函数A调用B, 而函数B调用函数C,因此是有过程来决定一个函数的功能,我们首先看到的也就是一个过程(函数),通过指针来调用的。   C++是面向对象的,因此是通过“->”或者“.”来进行访问的,我们首先看到的就是指针或者引用,也就是一个完整的对象。 这系列课程会详细讲述底层是如何将C/C++编译为汇编语言的,会进行指针的详细讲解,让你使用到**&p-> i = 7 这些很复杂的用法,虽然过程可能有些头疼,但是对于了解底层很有帮助,让你知道崩溃的时候是为什么,而不是看着它崩溃。当然,这种用法还是不值得提倡的。通过这些课程,可以让你成为一个高级C/C++工程师。 汇编语言是很古老的,不会详细讲。有一个语言MITS,有点意思,可以研究下。会重点讲述C和C++如何编译为obj文件,然后生成可执行的二进制文件,会发现原来C和C++最终生成的二进制代码(0和1形式的),其实差不多。 C++去掉了面向对象的部分就是C,很多牛逼的工程师都倾向于使用C,尽管有很多优秀的语言在不同方面要比C优秀。   并行编程并不是真的并行。原来的语言,如C/C++,实际上都是执行完一条之后再执行,而并行编程则是并行执行(感觉上并行,实际上是交替执行,只是这个交替的频率很高,用户看不到这个交替的过程而已,从而认为是并行执行)。 并行编程很多地方使用不到,但是在网络编程上面很有用处。一个例子就是,两个用户同时从取款机上取一定的钱,比如余额为100,要保证他们不会同时取走,就是这样一个过程。将这一次操作成为事务(transaction)。   Scheme是一个函数式的语言,和LISP有很深的渊源。可能大家不大了解,函数式的语言就是执行依赖于函数的返回结果。传统的语言有缺陷,比如C/C++,可能在传递指针的过程中,修改了这个结构体,然后再返回这个值,引起混乱。而函数式的语言就是,需要根据函数的返回值,决定下一步的执行。因此就不会出现这种问题。这门语言很有意思,大家可以学习一下,实际上比其他语言都要有意思(老师原语)。   Python是一门年轻语言,在Google和facebook有相当多的工程师使用这门语言来进行开发,很适合网络编程,不要认为网络编程就是HTML,网页之类,动态网页还需要处理后台数据库的交互等问题。Python才16~17年的历史,所以不会有想C/C++,Java那样的缺陷,课程的最后有个大作业,做一个网页服务器,不会像Apache那么大,但是能够解析XML,HTML,后台进行处理,生成动态页面。Python有很多类库,是面向对象的语言,解释执行,可以一边写一边解释执行,还有很多函数库,可以借用Scheme的思想来做函数式编程,处理网络编程很有用户。   在过去课程最后是C++高级编程,后来就使用Java,,但是后来另外一个班教授的内容更深入,所以不交Java了。后来使用python,效果不错,课程最后是用python开发,会领会到其中美妙之处。   最后还会介绍一下其他语言和范式,不过你们在今后15年碰到的编程范式,我应该都见过(这个老师好自信啊) 最后课程结束,整个过程17分钟左右。下周会发超多讲义,并会让你们做一个C/C++中指针的底层原理的研究报告。Over。 deercoder 2012-04-29 18:26 … Continue reading

© 2012 . All rights reserved.

基于silverlight的心语贴墙系统

估计大家看到这个标题,可能还无法理解我这个系统是用来干什么的,先说一个场景,犹如一些咖啡厅的心语墙,客户可以找服务员索取便签纸,写下自己的心语,然后在心语墙上找一个合适的位置贴下。对于这个便签纸,自己在将来的某一天再次光顾这家咖啡厅还可以看到自己以前贴下的心语。当然,其他的顾客也可以浏览,说了这么多,如果您感兴趣,可以猛击:http://fendouzl.s2.jutuo.net 。如果不登录,还有很多功能看不到哦。不过由于时间有限,又要工作,又要做这个毕设系统,还得写论文,因此,目前这个系统还是比较粗糙的,有时间我会去完善之,因为这个系统是我自己在生活中觉得的确需要,正好以前学了silverlight,便想把这个生活模型使用silverlight来模拟,尽管模拟的不好,大家不要见笑,可以直接给我留言指正,我会加以改正的哈。 下面先看看其中一个功能模块的截图 作为一个技术性文章,还是来说说本系统技术方便的事情,不然真会被其他的同学说我在这打广告了。 1 系统架构设计 首先,我想说的是系统的架构,个人觉得这个做一个系统的时候,最好有一个架构图,有了这个架构图,便可以通过这个图导出一个合理的解决方案以及解决方案里面的项目,之后的工作便是在各个项目中填充代码,相对来说还是比较容易的。 1.1 服务器端架构设计 服务器端架构设计的出发点便是如何高效快捷的访问数据库。如图下图所示,可以看到本系统服务端分为四层和三个辅助性的类库,分别是业务逻辑层、工厂层、数据链路接口层、数据链路层、数据访问工具层、公共层、数据库模板层。客户端通过WCF访问业务逻辑层的方法,由于业务逻辑层继承工厂层,因此这个工厂层通过反射技术,动态加载数据链路层的方法,并且辅助层的配合下完成数据库读写,最后把结果通过JSON序列化之后返回给客户端。 1.2 客户端架构设计 客户端主要是silverlight的实现,为了提高客户端代码的重构性和易移植性,决定在客户端使用MVVM模式,架构图如图28所示。其中View层便是UI界面的实现,Model层便是数据源,而ViewModel层便是为了让数据在View层显示的中介。客户端通过WCF请求数据,服务端把数据通过JSON序列化之后返回给客户端。 2.系统解决方案图 通过系统架构图,可以很容易的映射出系统解决方案,系统解决方案列表图如下图所示。目前,自己的技术还不怎么好,不过大型项目,为了避免逻辑混乱,是有必要去分层实现,使用必要的模式,如我这个客户端使用MVVM模式,服务器分为四层。 3 如何连接silverlight客户端上和服务器端 对于这个问题,大家一般都会只用WCF,当然,我也选择这个方式,因为相对比较容易,并且很方便。 public void Get**FromDB() { string query = “condition” Proxy.GetListAsync(JsonConvert.SerializeObject(query)); Proxy.GetListCompleted += new EventHandler<UserOwnWallServiceReference.GetListCompletedEventArgs>(Proxy_GetListCompleted); } } void Proxy_GetListCompleted(object sender, UserOwnWallServiceReference.GetListCompletedEventArgs e) { Deployment.Current.Dispatcher.BeginInvoke(delegate … Continue reading

© 2012 . All rights reserved.

细细品味Hadoop_Hadoop集群(第5期)_Hadoop安装配置

Hadoop是Apache软件基金会旗下的一个开源分布式计算平台。以Hadoop分布式文件系统(HDFS,Hadoop Distributed Filesystem)和MapReduce(Google MapReduce的开源实现)为核心的Hadoop为用户提供了系统底层细节透明的分布式基础架构。 对于Hadoop的集群来讲,可以分成两大类角色:Master和Salve。一个HDFS集群是由一个NameNode和若干个DataNode组成的。其中NameNode作为主服务器,管理文件系统的命名空间和客户端对文件系统的访问操作;集群中的DataNode管理存储的数据。MapReduce框架是由一个单独运行在主节点上的JobTracker和运行在每个集群从节点的TaskTracker共同组成的。主节点负责调度构成一个作业的所有任务,这些任务分布在不同的从节点上。主节点监控它们的执行情况,并且重新执行之前的失败任务;从节点仅负责由主节点指派的任务。当一个Job被提交时,JobTracker接收到提交作业和配置信息之后,就会将配置信息等分发给从节点,同时调度任务并监控TaskTracker的执行。 从上面的介绍可以看出,HDFS和MapReduce共同组成了Hadoop分布式系统体系结构的核心。HDFS在集群上实现分布式文件系统,MapReduce在集群上实现了分布式计算和任务处理。HDFS在MapReduce任务处理过程中提供了文件操作和存储等支持,MapReduce在HDFS的基础上实现了任务的分发、跟踪、执行等工作,并收集结果,二者相互作用,完成了Hadoop分布式集群的主要任务。 本期是Hadoop集群的第5期,主要关于介绍“Hadoop安装配置”。 文章下载地址:http://files.cnblogs.com/xia520pi/HadoopCluster_Vol.5.rar 文章目录: 1、集群部署介绍1.1 Hadoop简介1.2 环境说明1.3 网络配置1.4 所需软件1.5 VSFTP上传2、SSH无密码验证配置2.1 安装和启动SSH协议2.2 配置Master无密码登录所有Salve2.3 配置所有Slave无密码登录Master3、Java环境安装3.1 安装JDK3.2 配置环境变量3.3 验证安装成功3.4 安装剩余机器4、Hadoop集群安装4.1 安装hadoop4.2 配置hadoop4.3 启动及验证4.4 网页查看集群5、常见问题FAQ5.1 关于 Warning: $HADOOP_HOME is deprecated.5.2 解决“no datanode to stop”问题5.3 Slave服务器中datanode启动后又自动关闭5.4 从本地往hdfs文件系统上传文件5.5 安全模式导致的错误5.6 解决Exceeded MAX_FAILED_UNIQUE_FETCHES5.7 … Continue reading

© 2012 . All rights reserved.

WP7手机 USB 网络共享辅助工具

WP7 USB 网络共享辅助工具 海绵宝宝的背景取自本博客园某位园主的,不好意思,借用一下。 主要代码: 1 private void ConnectWP(object data) 2 { 3 p = new Process(); 4 string strOutput = null; 5 p.StartInfo.FileName = wpconnectPath + fileName; 6 p.StartInfo.RedirectStandardInput = true; 7 p.StartInfo.RedirectStandardOutput = true; 8 p.StartInfo.RedirectStandardError = true; … Continue reading

© 2012 . All rights reserved.

LED小夜灯

这个吊饰由几乎透明的银色电线和晶莹透明的有机玻璃板组成,白天光线充足时很难察觉到它的存在。但只要在夜间通上电,玻璃板的轮廓和上面的图形就会在黑暗中浮现出来,发出若隐若现的光芒。 DIYer: 叶子疏 制作时间: 3天 制作难度: ★★☆☆☆ GEEK指数: ★★☆☆☆ 双向电梯 1   材料和工具 2   原理介绍 3   加工有机玻璃板 4   雕刻有机玻璃板 5   连接发光二极管 6   粘结发光二极管和有机玻璃板 7   制作挂架 8   电路连接 9   通电测试 10   DIYer签到处 1   材料和工具 ○ 有机玻璃板:10cm见方,6mm厚,数量依设计而定,一般需要4~6块 ○ 发光二极管:3mm透明高亮度,颜色按设计自定。注意二极管的直径要比玻璃板的厚度小几毫米,如果选用5mm二极管的话就需要更厚的有机玻璃板,价格就上去了。 ○ 导线:秋叶原双芯银色透明电话线,总长度大约3m。 ○ 相框,用来制作挂架,尺寸大约30cm x 20cm。 ○ 装5号电池的电池盒和一些电阻,200欧~1k欧的都能用。 ○ 一块小万能电路板。 ● 电钻,砂光机,台钳。 ● 焊接工具,剥线钳,钢丝钳。 ● … Continue reading

© 2012 . All rights reserved.

毕业季,让毕业照成为传说….

1910年理科班毕业照,旧社会毕业生身着长衫马褂 1930年清华大学毕业照,毕业生比较西化,身着西式服装 1940年西南联大毕业照,祖国饱受侵略,毕业生壮志凌云 1950年北京大学毕业照,清一色衬衫配西裤 1980年清华大学数学系毕业照,刚改革开放,还有许多人穿蓝布衫 1990年大学毕业照,彩色照片开始普及,知道了啥叫时髦 2000年清华毕业照,穿着学士服正襟危坐 广州大学05级新闻与传播学院广告班:姐们都是最自信的美女 2009年南昌某高校:寄托怀念,属于青春的凹造型 09年大连大学:千手观音的姿势,我们都摆过 2010年西安某高校:我们拍的不是照,是传说! 2010年5月,广东外语外贸大学政管学院06级应用心理学班的“汉服秀”毕业照 2009年广西大学,集体电话讨债照:兄弟啊,都毕业了,你欠我一条内裤啥时还啊 和尚班和美女过剩班,各有各的乐趣,也曾经有这样那样的联谊,我们在一起的快乐,胜过人间无数。 来源:http://blog.renren.com/share/287286312/12812881250 因为盗链严重,而我们服务器带宽有限,所以图片设置了防盗链,请见谅。如果您的阅读器看不到图片,请订阅 http://feed.luobo8.com/ 即可显示图片。 部分文章附有精彩小视频,如果您的阅读器无法观看视频,请移步原文链接: http://luo.bo/24015/ 本文小编:梁萧 标题: 毕业季,让毕业照成为传说…. 网友评论 发布时间:2012/04/29, 14:31 萝卜网 Copyright © 2010 – 2012 分享国内外精彩网事。 更多精彩欢迎您订阅 http://feed.luobo8.com/,欢迎网友投稿、推荐文章。 c5d85dad8496c5aa16731e645eaa0010 您可能对以下文章感兴趣: 无比销魂的疯狂毕业照 又到一年毕业季,毕业照你可以这样拍 2011毕业季:各种毕业照 … Continue reading

© 2012 . All rights reserved.

代码细节重构:请对我的代码指手划脚(二)

“请对我的代码指手划脚”是我们群内搞的一个不定期的常规性活动,以代码审阅和细节重构为主线,大家可以自由发表自己的意见和建议,也算得上是一种思维风暴。感觉到这个活动很有意义,有必要总结并记录下来。 目标代码 1 public static bool Serialize(Object obj, string fullname) 2 { 3 FileStream filestream = new FileStream(fullname, FileMode.Create, FileAccess.Write); 4 BinaryFormatter binaryformatter = new BinaryFormatter(); 5 6 binaryformatter.Serialize(filestream, obj); 7 8 if (filestream == null) 9 { 10 return … Continue reading

© 2012 . All rights reserved.

不要再吹水地球人听不懂的技术,咱来点干货!–中文前端UI框架Kit(二)kitjs组件代码解析

上一篇博文受到了大家的很多关注,谢谢大家的捧场。所谓干货,也是我的愿景,就是希望能让大家实实在在看得见实现原理,在自己的项目里面用的起来的,能骗得老板的奖金,能完成KPI指标的东西^_^。Kit作为一个UI库,我并没有打算让大家都来学习我的Kit的Core,背熟我的API,这种跟风的学习方式一点意义都没有,今天jQuery热,大家都是学jQ,明天SeaJs火了,大家都去炒SeaJs,所以我在KitJs里面,专门为jQ的用户准备了一个语法糖(Suger.js),完全模拟jQ的API,除了实现,接口都一样,也方便大家直接拿来主义的改造Kit的组件。当然,作为一个纯技术Fan来说,深入理解一门技术是如何实现的,远比拿来主义更有趣的多^_^。当然了,如果你出于KPI考虑,或者老板的老板的项目奖金,直接拿来主义抄袭Kit的组件代码,完成你的KPI,我也不介意这样的行为,只要您喝水不忘挖井人,在和同事吹水的时候,也能宣传一个KitJs,我就很感激您了。同时,Kit也是一个很年轻的库,出于不断的发展之中,有一些BUG以及浏览器兼容问题,在所难免,我一个人也精力有限,在这个前端战火纷飞的年代,欢迎更多志同道合的基友一起把他搞大,共同进步。 同时,今天发布了一个kitjs的对话框组件,demo地址为http://xueduany.github.com/KitJs/KitJs/demo/Dialog/demo.html (一)Kit目录格式 言归正传,在KitJs里,kit.js是作为核心的Core文件的存在,他包含了一些最常用的Dom以及Object,继承的操作,同级目录下按照功能的划分扩展了一批string.js,math.js等等都是为了实现特定方向功能的扩展。每一个独立的js文件都包含一个Class的构造器,以及一个全局对象的实例, 以kit.js为例,包含了$Kit类,以及$Kit类的实例$kit(以$开头是为了避免与常用的变量冲突), 其他各类,都以Link的方式,挂在$Kit,以及$kit实例实例上,如math.js,包含了$Kit.Math类,以及$kit.math实例,这样保证全局范围里只有$Kit和$kit两个污染。同时,在kit.js,我们定义了一个命名空间叫做$kit.ui,在物理目录下,以kit.js同级的Widget目录,一字排开,多个首字母大写的目录 widget目录下所有目录都是kitjs的组件目录,每个独立js文件只包含一个独立组件的class构造器(非实例),同时可以兼容commonJs的module模式(可以符合CommonJs的Modules/1.1 规范,以及AMD方式改造,具体改造方式后面会以后会详细提及) (二)Kit组件默认代码模板,注释符合jsdoc规范 我们以对话框组件举例,每个组件都类似如下 首先是jsdoc的注释,@class申明是一个什么类,@require xxx.js,申明依赖哪些组件 (三)构造器以及初始化方法 每个类都是标准的function(config){}的方式定义个构造器,这里需要注意的是,每个kitjs组件的构造器默认预留一个config参数,作为个性化配置的输入, 同时在类的构造器,有个一个静态成员,defaultConfig对象,用来存放kitjs组件的默认配置 在使用kitjs的组件,首先是需要通过new Instance的方式new $kit.ui.Dialog.YesOrNo,初始化一个新的实例对象出来,这是仅仅是初始化了一个js的组件对象,还没有HTML,需要执行init方法,创建HTML,加入doc中,等于给灵魂浇上血肉^_^。 可能有同学会问,为什么不把init方法直接放在构造器里面,而要另外单独放出来? 1是因为在继承时候需要实例化父类,当子类继承于父类的时候,会设置子类的prototype对象为父类的new Instance新的实例对象,如果在构造器里面放了init的初始化方法,会导致父类的HTML被直接执行,生成垃圾代码, 2是因为考虑懒加载的情况,需要HTML代码在恰当的时间执行,而不是一开始初始化时立即执行 所以使用kitjs组件的默认方式是 实例化之后,执行init方法(init方法会返回当前组件对象,有return代码7) 上图可以发现,在dialog中所有API method都是挂在prototype上,通过原型扩展的方式实现继承以及传递给实例对象 观察$kit.ui.Dialog.YesOrNo组件的构造器代码, (四)KitJs的继承 他通过$kit.inherit方法申明了与$kit.ui.Dialog对象的继承关系,这里会有同学要问,为什么要在构造器里面继承,而不是直接写在外面? 原因是: 1.kitjs是一个基于prototype维护继承关系的 2.要使用kitjs的组件,必须要实例化该组件对象,每个组件都是通过new Instance的方式,通过构造器创建的 所以我把继承关系的执行放在代码的构造器中,这样在实例化一个新的组件时,就会顺着当前组件的构造器的继承方法,逐级去继承到他父类的成员以及方法。 当子类需要修改父类的方法时,只需要在子类的prototype里从定义一个同名的method即可覆盖父类的继承方法。 在命名上,kitjs遵循,子类延续父类的类名作为Namespace,一直链下去,如上图的$kit.ui.Dialog,$kit.ui.Dialog.YesOrNo kitjs的继承实现也很简单 实例化一个父类对象,将父类的实例所有成员copy到子类的原型上,然后重置子类的原型的构造器为子类构造器,再给子类构造器挂一个link,指向父类,通过$kit.inherit方法,在子类$kit.ui.Dialog.YesOrNo实例化的过程中,就可以继承父类$kit.ui.Dialog的所有子类不存在的成员,实现类似静态语言的继承 (五)config参数,HTML与Css的耦合拆解/换肤? kit的组件构造器习惯传入一个 … Continue reading

© 2012 . All rights reserved.

Android桌面组件App Widget开发三步走

桌面组件App Widget是Android的实用功能,开发过程虽然不是很难,但是步骤不少,略有麻烦。为了方便以后再次使用的时候,快速上手,概括了下面的关键步骤。并且把项目打了包,方便以后的使用。新建一个Android项目,按已下三步就可以制作一个简单App Widget。 Step 1 创建AppWidgetProvider子类 public class SimpleWidget extends AppWidgetProvider{ @Override public void onUpdate(Context context,AppWidgetManager appWidgetManager, int[] appWidgetIds){ super.onUpdate(context, appWidgetManager, appWidgetIds); } } Step 2 创建App Widget布局文件和设置文件 布局文件 res/layout/simple_widget.xml <?xml version=”1.0″ encoding=”utf-8″?> <LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android” android:layout_width=”match_parent” android:layout_height=”match_parent” android:orientation=”vertical” > <TextView … Continue reading

© 2012 . All rights reserved.

Android学习点滴之一——一个简单的访问Internet应用

创建应用 用Eclipse创建一个应用(在这里吐槽一下Eclipse的界面,我这样从VS转过来的,用起来真的好苦B啊···),命名以后,下一步必须填一个命名空间,否则不能继续下一步。 设计界面 双击那个main.xml,看到Android UI的所见即所得设计器,拖了一个ImageView和一个Button进来: 完了以后,main.xml的图标上就挂上了个惊叹号···以文本视图打开,看到若干错误···在Preference中搜索到Spelling,关闭Enable Spelling Check,还有两处错误: 按照提示,给ImageView加上属性 android:contentDecription=”@string/image”这个值如果写成字面的字符串值的话,就会得到和下面一样的警告,所以就在strings.xml加了一个值”image” 把Button的text改成如下形式: android:text=”@string/button”同样的,得在strings.xml中添加值 再次抱怨下Eclipse的语法检查,都改完了还不把错误给消掉,一直显示着,不知道怎么去除··· 添加代码 在里添加按钮点击事件的响应代码 public void clicked(View target) throws ClientProtocolException, IOException { try { HttpClient client = new DefaultHttpClient(); HttpResponse response = client.execute(new HttpGet( “http://static.cnblogs.com/images/logo.gif”)); InputStream is = response.getEntity().getContent(); … Continue reading

© 2012 . All rights reserved.

CentOS搭建python开发环境

装了个CentOS 5.5,想在上面搭个python的开发环境,可是还是遇到了很多问题,记录一下过程: 1、python升级 查看python版本 python -V Python 2.4.3 因为python3的变化很大,还是希望用新的版本,goole了一把,看到有一个指导贴: cd /usr/local/src wget http://www.python.org/ftp/python/3.2/Python-3.2a1.tgz –14:51:31– http://www.python.org/ftp/python/3.2/Python-3.2a1.tgz Resolving www.python.org… done. Connecting to www.python.org[82.94.164.162]:80… connected. HTTP request sent, awaiting response… 200 OK Length: 11,258,272 [application/x-tar] 5% [&gt; ] 570,106 67.19K/s ETA 02:35 解压安装: … Continue reading

© 2012 . All rights reserved.

离线地图制作工具

最近有很多朋友都在问我地图下载的工具,其实这样的工具网上已经很多了,搜一下就能找得到,基本原理都是一样: 1.选择一定的地图范围。 2.选择需要下载的地图源。 3.选择需要下载的等级。 4.开始下载。 只是每一个软件都会有自己的特点,为了满足不同的需求而以。其实地图下载下来后,最主要的目的还是要应用起来,这就需要结合离线地图的平台. Google Map API V3.8.6 的版本我在之前就发布过,有需要的请自己下载。今天更详细的跟大家讲一下这两个步骤如何结合起来。 1.地图的下载 新制作了一个地图下载的工具,界面如下,操作其实已经很简单了,看图就能明白: 目前地图下载工具可以支持Mapabc、谷歌矢量图、谷歌影像图三种图进行下载,如果需要更多的图源,可以跟我联系。 下载完成后,在应用程序的目录下会生成一个maptile目录,这个目录是存放刚才下载的地图数据。 2.加载本地数据 地图数据我们已经下载下来了,我们使用离线版的Google Map API对图片进行加载: 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta name=”viewport” content=”width=device-width, initial-scale=1.0, user-scalable=no” /> 5 <meta http-equiv=”content-type” content=”text/html; charset=UTF-8″/> 6 <link … Continue reading