摘要: 博客迁移到我的个人站点:http://codingblogs.net/ 本博客不再更新,我会选择一些我认为有必要的文章迁移过去。这个博客不再更新。感谢所有本博客的读者,祝大家新年快乐,蛇年行大运! 阅读全文
posted @ 2013-02-18 17:27 wawlian 阅读(1368) 评论(0) 推荐(0) 编辑
摘要: 重定向能够实现Linux命令的输入输出与文件之间重定向,以及实现将多个命令组合起来实现更加强大的命令。这部分涉及到的比较多的命令主要有:cat:连接文件sort:排序文本行uniq:忽略或者报告重复行wc:统计文件的行数、词数、字节数grep:打印匹配制定模式的行head:输出文件的头部tail:输出文件的尾部tee:从标准输入读,并往标准输出或者文件写1.重定向标准输出使用>可以将本来出现在屏幕的标准输出信息重定向到一个文件中。我们需要将某个目录下所有文件及目录的列表保存在一个文本文件中:jerry@ubuntu:~$ ls -l /usr/ > ls.txtjerry@ubun 阅读全文
posted @ 2012-12-16 12:43 wawlian 阅读(13839) 评论(2) 推荐(4) 编辑
摘要: 在本系列的第一篇博客,做一个说明,本系列是《Practical Vim》一书的笔记。这本书每一章讲述一个相关的Vim的操作主题,在每一章中都会以若干个Tip的形式讲述一下小的窍门或者说是实现某种任务的捷径,并且在这个过程中讲解很多Vim使用到的命令。作为一本成型的书来说,《Practical Vim》里面会有一些关于背景的描述,也会有一整套比较严谨的对于Vim输入命令以及显示结果的展示规则。我这里仅仅将每一个Tip涉及的问题,以及通过哪些命令来解决重点提取并且翻译出来,主要是总结备忘,另一方面也是分享。但是考虑到每一个Tip的标题都无法直译,因此我就不翻译了。最后,正所谓条条大路通罗马,每一个 阅读全文
posted @ 2012-12-08 12:36 wawlian 阅读(3532) 评论(0) 推荐(1) 编辑
摘要: 1.Spring MVC简介Spring MVC框架是有一个MVC框架,通过实现Model-View-Controller模式来很好地将数据、业务与展现进行分离。从这样一个角度来说,Spring MVC和Struts、Struts2非常类似。Spring MVC的设计是围绕DispatcherServlet展开的,DispatcherServlet负责将请求派发到特定的handler。通过可配置的handler mappings、view resolution、locale以及theme resolution来处理请求并且转到对应的视图。Spring MVC请求处理的整体流程如图:Spring 阅读全文
posted @ 2012-11-17 22:57 wawlian 阅读(98118) 评论(11) 推荐(12) 编辑
摘要: 一、适配器模式 先说说什么是适配器。其实生活中有很多例子。比如2008年的时候买了一台Macbook,有一次做课程设计的时候在课堂上做演示汇报,需要连教室的投影仪。上去的时候突然发现,晕,Macbook的投影接口和教室投影仪的接口根本就对不上,顿时石化。。。后来赶紧去网上查了一下,发现Macbook的投影接口与其他品牌的PC是不一样的,需要另外花钱买一个转接器,还好有淘宝,最后花了差不多20大洋终于搞定。这里说的转接器其实就是一个所谓的适配器。它承担着让不同接口之间实现协同工作的功能。家里的水管和各种各样的水龙头之间很多时候不能直接接上,中间也许要一些其他的管子、零件什么的在中间。这些管子往. 阅读全文
posted @ 2012-10-31 21:31 wawlian 阅读(4204) 评论(3) 推荐(1) 编辑
摘要: 工厂方法的定义:Define a interface for creating an object, but let subclass decide which class to instantiate. Factory method let a class defer instantiation to subclass. 工厂方法模式是一个比较简单易于理解的设计模式。它主要涉及两方面:工厂,也就是对象或者产品的创建者;另一部分是被创建的对象,或者说是产品。我们看看工厂方法的类图: 在工厂方法模式中,抽象类Factory并不负责具体创建产品的细节,具体的细节在其实现类,也就是具体的工厂中给出。 阅读全文
posted @ 2012-10-18 00:29 wawlian 阅读(1828) 评论(0) 推荐(0) 编辑
摘要: 这一部分主要讲Haskell的函数语法。1.模式匹配(Pattern Match)模式匹配主要用来定义一些数据必须遵循的规则,根据他们来解析数据。在定义函数的时候,可以为不同的模式定义不同的函数体,以便写出可读性较高的代码。Haskell允许对很多种类型进行模式匹配,数值型、字符、列表、元组等等。下面是一个函数用来检查输入参数是不是7:lucky::Int->Stringlucky 7 = "LUCKY NUMBER SEVEN"lucky x = "Sorry, you are out of lucky, pal!"我们试着调用一下上面的函数:* 阅读全文
posted @ 2012-08-19 11:52 wawlian 阅读(5443) 评论(2) 推荐(0) 编辑
摘要: 单例模式的定义:Ensure a class has only one instance,and provides a global point of access it。也就是说,如果将一个类设计成单例模式,那么它将只允许一个实例。单例模式算是常见设计模式中最为简单直接的,下面可以看一下单例模式的通用代码:package net.jerryblog.dp.sigleto;public class Singleton { private static final Singleton instance = new Singleton(); private Singleton(){ ... 阅读全文
posted @ 2012-08-12 21:57 wawlian 阅读(1285) 评论(1) 推荐(0) 编辑
摘要: 强大的类型系统是Haskell的一个非常大的优势。Haskell所有表达式类型在编译期判断。这样的话,可以使得代码更加安全,比如说,拿一个整数和一个字符串进行除法运算是没办法进行的,那么在编译器就会直接报错,不会等到运行时程序崩溃才知道。Haskell与Java不一样,Haskell能够进行类型推断(Type Inference),也就是说,你不需要明确的说100是个数字,或者说是整型,编译期能推断出这是一个整型。在GHCi中,我们可以使用:t 命令来检测一个表达式的类型。Prelude> :t 'q' 'q' :: CharPrelude> :t 阅读全文
posted @ 2012-08-11 19:11 wawlian 阅读(2404) 评论(0) 推荐(0) 编辑
摘要: 1.TupleTuple用来将几个元素打包成为一个值。Tuple用()包起来。看起来和List很像,但是Tuple和List有很重要的区别:(1)List元素数量是不固定的,但是Tuple的元素数量是固定的;(2)List必须存储同种类型的元素,但是Tuple可以存储不同类型元素。看几个Tuple的例子:Prelude> (1,2)(1,2)Prelude> (1,"a",True)(1,"a",True)Tuple看起来实在是和List太像了,我一开始也不知道Tuple存在的必要在哪。现在假设有这样的一种需求,我们需要表示平面上四边形的四个 阅读全文
posted @ 2012-08-09 22:54 wawlian 阅读(1747) 评论(2) 推荐(0) 编辑
摘要: 1.Ranges有时候我们有这样一种需求:我们需要一个List,它的元素从1到20。从1到20敲出每一个元素肯定是一种可以搞定的办法,但肯定不是好办法。这时候,我们可以使用Haskell的Ranges来处理这种需求。Ranges用来构建元素可以按照某种顺序枚举的List。像数字1,2,3,4就是可枚举的;字母a,b,c,d也是。我们看看两个Ranges的例子:上面说到的1-20,使用Ranges可以这样表示:Prelude> [1..20][1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]同理,所有的小写字母可以这样表示:Prelud 阅读全文
posted @ 2012-08-08 00:24 wawlian 阅读(1614) 评论(2) 推荐(0) 编辑
摘要: Learn Haskell这一系列博客是《Learn You a Haskell for Great Good》的读书笔记。一句话介绍:Haskell是一门纯粹的函数式编程语言。至于什么是函数式编程?尽管网上也有很多关于函数式语言与指令式语言之间的区别与联系,但是没有实际使用过函数式编程语言的情况下,我也搞不清楚。因此,先从学习一门函数式编程语言开始吧。1.安装Haskell要开始使用Haskell其实很简单,只需要一个文本编辑器和一个Haskell的编译器。目前来说最流行的Haskell的编译器是Glasgow Haskell Compiler(GHC),我使用的就是这样一个编译器。一般来说 阅读全文
posted @ 2012-08-06 20:49 wawlian 阅读(3340) 评论(7) 推荐(0) 编辑
摘要: 1.类图和对象图类图(Class Diagram)是显示出类、接口以及他们之间的静态结构与关系的图。其中最基本的单元是类或接口。类图不但可以表示类(或者接口)之间的关系,也可以表示对象之间的关系。下面是一个典型的类图:类图一般分为几个部分:类名、属性、方法。下面分别讲解。(1)类名上面的Car就是类名,如果类名是正体字,则说明该类是一个具体的类,如果类名是斜体字,则说明类是一个抽象类abstract。(2)属性列表属性可以是public、protected、private。public前面的图标是菱形,protected对应的是菱形加钥匙,private对应的是菱形加锁。当然,这只是一种表现方 阅读全文
posted @ 2012-06-25 01:01 wawlian 阅读(32094) 评论(3) 推荐(4) 编辑
摘要: 四、更新策略 互联网是实时变化的,具有很强的动态性。网页更新策略主要是决定何时更新之前已经下载过的页面。常见的更新策略又以下三种: 1.历史参考策略 顾名思义,根据页面以往的历史更新数据,预测该页面未来何时会发生变化。一般来说,是通过泊松过程进行建模进行预测。 2.用户体验策略尽管搜索引擎针对于某个查询条件能够返回数量巨大的结果,但是用户往往只关注前几页结果。因此,抓取系统可以优先更新那些现实在查询结果前几页中的网页,而后再更新那些后面的网页。这种更新策略也是需要用到历史信息的。用户体验策略保留网页的多个历史版本,并且根据过去每次内容变化对搜索质量的影响,得出一个平均值,用这个值作为决... 阅读全文
posted @ 2012-06-18 22:09 wawlian 阅读(45926) 评论(10) 推荐(10) 编辑
摘要: 网络爬虫是捜索引擎抓取系统的重要组成部分。爬虫的主要目的是将互联网上的网页下载到本地形成一个或联网内容的镜像备份。这篇博客主要对爬虫以及抓取系统进行一个简单的概述。一、网络爬虫的基本结构及工作流程 一个通用的网络爬虫的框架如图所示: 网络爬虫的基本工作流程如下: 1.首先选取一部分精心挑选的种子URL; 2.将这些URL放入待抓取URL队列; 3.从待抓取URL队列中取出待抓取在URL,解析DNS,并且得到主机的ip,并将URL对应的网页下载下来,存储进已下载网页库中。此外,将这些URL放进已抓取URL队列。 4.分析已抓取URL队列中的URL,分析其中的其他URL,并且将URL放入待抓取.. 阅读全文
posted @ 2012-06-18 02:20 wawlian 阅读(313291) 评论(17) 推荐(36) 编辑
摘要: 捕获到异常时,往往需要进行一些处理。比较简单直接的方式就是打印异常栈轨迹Stack Trace。说起栈轨迹,可能很多人和我一样,第一反应就是printStackTrace()方法。其实除了这个方法,还有一些别的内容也是和栈轨迹有关的。 1.printStackTrace() 首先需要明确,这个方法并不是来自于Exception类。Exception类本身除了定义了几个构造器之外,所有的方法都是从其父类继承过来的。而和异常相关的方法都是从java.lang.Throwable类继承过来的。而printStackTrace()就是其中一个。 这个方法会将Throwable对象的栈轨迹信息打印到.. 阅读全文
posted @ 2012-06-06 10:55 wawlian 阅读(42831) 评论(4) 推荐(10) 编辑
摘要: Office 2010也是官方声称不支持的,不过可以用M社自己出的一个小工具轻松解决。搜索下载application verifier工具x64版本,很容易找到微软官方的载点,安装后执行,如果是想装64位版的office 2010,就去开始菜单执行64位的verifier,装32位的话则执行32位的。http://msdn.microsoft.com/zh-cn/library/ee461145.aspx参考文献http://www.microsoft.com/download/en/details.aspx?DisplayLang=en&id=20028下载地址在窗口中点file,再 阅读全文
posted @ 2012-06-04 00:18 wawlian 阅读(2386) 评论(0) 推荐(0) 编辑
摘要: 1.上下左右移动光标: h:左 l:右 k:上 j:下2.删除一行:dd3.删除一个字符:x4.删除一个换行符:J5.在光标下方新建一行,并且进入插入模式:o(小写字母o)6.在光标上方新建一行,并且进入插入模式:O(大写字母O)7.光标移动到下一单词的词首:w8.光标移动到前一单词的词首:b9.光标移动到下一单词的词尾:e10.光标移动到前一单词的词尾:ge11.移动到当前行第一个字符:0(数字0)12.移动到当前行的第一个非空字符:^13.移动到当前行的行尾:$14.移动到本行中的指定字符:fc(c就是要找到的这个字符)15.向左移动到本行中的指定字符:Fc(c就是要找到的这个字符... 阅读全文
posted @ 2012-05-22 09:58 wawlian 阅读(8314) 评论(0) 推荐(0) 编辑
摘要: 好长时间没使用虚拟机了。之前一段时间一直是Windows7和Ubuntu10.10。但是这段时间做毕业设计,来回切换系统确实也不方便。加上前两天把笔记本内存升级为8G。总之一大堆各种原因吧。怎么样配置网络都忘了,翻了一下自己以前的日志又在网上差了些资料,整理一下记下来备忘。 1.host-only配置 安装软件的过程很简单,一直下一步就好。安装好了之后,系统网络管理部分会出现虚拟网卡。 默认情况下,Vitual Box的网络方式是host-only方式。在安装CentOS系统的时候,配置网络选择手动(Mannal),IP为:192.168.0.x(x选一个2-254之间的数字,我一般... 阅读全文
posted @ 2012-05-12 15:31 wawlian 阅读(3014) 评论(3) 推荐(1) 编辑
摘要: 前言:翻译自《Pro Git》。正在学习Git,于是打算翻译这篇文档。一方面锻炼自己英文文档阅读能力,翻译成中文也可以方面别人。正所谓赠人玫瑰,手有余香。鉴于本人水平有限,当然是不可能达到信、达、雅的水准。不过在翻译过程中,我会尽量保证遵循原文,有些不好直译的部分我会根据理解意译,对于有些实在不知道用中文怎么去表述但是不影响所讲述内容的英文,我可能会直接忽略掉。此外,对于没有把握的专有名词,我会给出翻译的同时保留原文。1. 简介此处省略若干字……2. 起步这一章的内容主要关于如何开始使用Git。我们首先要讲一些关于版本控制工具的背景,然后讲解如何在你的系统上让Git运行起来,最后讲讲使用之前需 阅读全文
posted @ 2012-04-15 16:48 wawlian 阅读(1725) 评论(5) 推荐(5) 编辑