自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(58)
  • 收藏
  • 关注

原创 求同存异——写一个代码对比程序

有时希望能对比两个不同版本的代码,当然可以用版本控制工具的对比功能。但笔者蠢得连SVN都不会用,所以只好自己动手,丰衣足食。        先定义需求:比较1000行以内的代码文件,因为自己不会写1000行以上的文件。        基本的思路是以代码行为单位,动态规划求最长公共子序列。开发语言是Lua。        首先把文件转化为代码行数组:--file_name: st

2012-05-25 16:07:25 329

原创 长干行

在ios中调用lua脚本,本以为容易;孰料好事多磨——lua解释器在debug输出中抗议不断,拒不就范。后历经坎坷,笔者才让objc与lua在ios中成功牵线,喜结良缘。所用的方法较为悲催,但可行。独上高楼,望尽天涯路。        最初的想法是,把lua文件放到resource文件夹里,作为资源供objc调用。相关代码如下:p_lua_stack_ = luaL_n

2012-05-09 18:48:25 1974

原创 在iOS中挂起主线程

通常而言,ios中涉及IO的操作是多线程的,而不会在主线程中完成,这是为了避免耗时过长IO操作卡住主线程。但某些时候,我们希望让主线程等待IO操作完成——例如主线程创建了一个文件夹后,等待完成,再往文件夹中创建文件。      NSObject类有一个方法performSelectorOnMainThread:withObject:waitUntilDone可以让主线程挂起,但selector

2012-05-08 20:44:26 747

原创 一些vim的插件和配置

vim的一个强大之处在于广大vimmer所无私奉献的插件,令我等不懂vim脚本的小白受益无穷。在此介绍一些我所安装的插件和配置,都是针对写程序的,没有文本编辑的,也没有日历,也不能煮咖啡。1) A      功能简单但很有用的一个插件,键入:A即可切换头文件和源文件。默认支持C,C++,但不支持objc,对此可修改a.vim,在 a.vim 中加入如下语句:call AddAltern

2012-05-01 00:58:22 514

翻译 【译】Objective-C的特性(The Disposition of Objective-C)

原文地址:http://amattn.com/2011/10/15/the_disposition_of_objective-c.html        笔者经过十年的Objc编程,在此谈一些对Objc的评论。冗长(Verbose)        这是最显然的Objc特性。Objc编程中总会用到极为冗余的语法,你只能对此习以为常。有经验的Objc程序员相当倚赖于IDE等多种工具来辅助编

2012-03-05 18:25:46 347

原创 攘外必先安内——单元测试 In C++

本文介绍笔者在C++开发中的单元测试实施之法,参考过Netbeans自动生成的单元测试代码。      首先在通用的头文件中定义宏:#define _QSW_TEST #ifdef _QSW_TEST #define DLog(...) printf(__VA_ARGS__);printf("\n")#else #define Dlog(...)#endif

2012-03-04 01:58:24 429

攘外必先安内——单元测试 In C++

本文介绍笔者在C++开发中的单元测试实施之法,参考过Netbeans自动生成的单元测试代码。      首先在通用的头文件中定义宏:

2012-03-04 01:52:06 93

原创 在iOS开发中告别未定义selector

objc和C++同为由C语言衍生出的OOP语言,但他们实现OOP的方式并不相同:在C++中,对象与方法在编译器绑定;而在objc中,称“方法”一词为“消息”,在程序运行时向对象发送消息,即运行期绑定。      两种方式各有优劣,C++注重性能,objc注重灵活。      然而运行期绑定给开发带来问题——编程时拼写错了方法名,编译器并不报错。笔者曾debug一小时,最后发现是方法

2012-02-22 13:58:01 323

原创 情人节乃浮云——再谈单例对象的Lua实现

之前发了篇有失水准的文章,声称可以用文中的方法实现lua单例对象。        确实可以现实,但是太ugly了,体现不出lua之美,还附带命名污染。百科了下FP,遂想出一种更优雅的实现方案:Hello = {}function Hello:new() --private method. local store = nil return function(sel

2012-02-15 01:31:38 626 1

原创 Lua的一种二维数组表示法

《Lua程序设计》中介绍了两种方法:        1)用一维数组,也就是一个table模拟二维数组的行为。此方法性能不错,但实现起来略嫌麻烦。        2)table套table,类似于C语言的“指针的数组”,外层table的value是内层table的引用。此方法优劣反之。        其实在某些场景下,适合用方法2)的优化方案,例如:local DIR_ARRAY =

2012-02-12 19:52:19 1077

原创 单例对象的lua实现

前几天看了云风大侠用lua写的OOP模板,膜拜不已,用这个模板会让人误以为lua是显式支持OOP的,而感觉不到这是用lua现成的语法写就的模板。        不过个人还是抗拒用这个模板,因为一旦用这个模板实现OOP,就没法控制一些细节。尽管可以扩充这个模板,但总不如自己写的元表灵活。比如,这个模板不支持单例对象。        单例是一种很有用的设计模式。在OOP中会发现,在业务逻辑或是

2012-02-10 16:42:56 509

原创 lua学习小记(2)

lua本身并没有提供OOP的机制,但可以通过表,元表,闭包这些强大的特性构造出OOP。在此介绍两种实现OOP的方法,来自《Lua程序设计(第2版)》(此书已绝版,淘宝上可以买到质量很不错的影印版。云风大侠在豆瓣读书上力荐此书)。        有一个名为Speak的类,它的唯一功能就是设计和输出它的成员变量s,以下用两种方法构建Speak及其对象speak。        1)通过闭包和表

2012-02-08 17:27:37 360

原创 读《C和指针》

这本书不是C语言入门教材,读这本书之前至少会用C写个反转字符串什么的。        书里晰了很多概念,有些知识点是《C程序设计语言》里所无的,有些巩固了自己不确切的经验。         最近读《软件随想录》读到一些深为赞同的话,比如作者称不懂C语言和指针的,不会写递归程序的CS学生都不该得到CS bachelor,并嘲讽了某些学校的CS只教java的做法。         这在国内

2012-02-07 20:44:22 358

原创 lua学习小记(1)

决定学一门动态脚本语言,感受一下不受拘的coding,发现比较流行的又不是只能用来写网页的有python,lua,ruby等。lua兼具运行效率高,表达能力强的优点,成了我的首选。更何况“月亮”听起来要比“蟒蛇”和“红宝石”文艺多了。       这是第一篇,但我不知道会不会写第二篇。题目括号里的数字是1,因为lua里的数组下标习惯上是从1开始的,当然从-1234开始也没有错,但不建议在一个团

2012-02-06 18:02:00 307

原创 lua学习小记(1)

决定学一门动态脚本语言,感受一下不受拘的coding,发现比较流行的又不是只能用来写网页的有python,lua,ruby等。lua兼具运行效率高,表达能力强的优点,成了我的首选。更何况“月亮”听起来要比“蟒蛇”和“红宝石”文艺多了。        这是第一篇,但我不知道会不会写第二篇。题目括号里的数字是1,因为lua里的数组下标习惯上是从1开始的,当然从-1234开始也没有错,但不建议在一个

2012-02-06 16:46:31 198

转载 【转】吴英死了,邓亚萍才可以活着

吴英终审被判死刑,消息传来,我想说的太多了,千言万语,不知从何开始。总之,吴英的死,印证了中国特色:权力最大。那些开宝马车横冲直闯,嚣张无比的富家子弟能否得到一点教训?管你爸爸是亿万富翁,在权力面前,其实不过是小儿科。 吴英如果不出事,她的世界永远与我们隔着深深的迷雾。可是,她要发展,不与权力结盟,是不可能短时间爆发的。权力的春药,有几个有雄心大志的人敢不吞服?吞下权力春药,他们从此就

2012-01-28 19:00:16 140

原创 读Dennis的《C程序设计语言》小记

这两天把《C程序设计语言》过了一遍。并非出于悼念伟人的目的而拜读他的著作——只是打算把传说中的“C语言四大圣经”拜读一遍,这是第一本。基础的,经典的东西最具学习价值,学这些东西也最感愉悦,安全。        不知道这本书是不是入门教材,大概因为C基础在,看得飞快。看完觉得一些国内的C教材颇具中国特色,只是把语法翻来覆去地讲,令读者知其然而不知其所以然。

2012-01-27 10:59:14 194

原创 90%程序员写不对二分搜索?

近期看过几篇文章,讲90%程序员写不对二分搜索——看到这个观点时顿感受宠若惊,看下去才发现自己也属90%之列——原因是(low + high) / 2的写法有可能溢出,应该这么写——low + (high - low)         其实我怀疑low + (high - low)的写法出自16位时代;现在通常没有必要这么写。编程的时候,有时不必未雨绸缪。

2012-01-24 15:31:26 99

原创 if (a & 1 == 0)

以前用C++编程时碰到过一个“神奇的bug”,在前文中有述;就是判断变量a的奇偶性时,我写了if (a & 1 == 0),明明a为偶数,判断结果却为假,程序就跑到else分支里去了,打印a & 1的结果却为0。        今天看书时终于明白原委了——不管a是什么,这个条件判断出来都是假的~

2012-01-23 18:40:24 547 1

原创 HDOJ 1240,兼谈A*算法之实现

题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1240        题目描述很长,其实题意很简单——在一个3维立方体中,求两坐标点间的最短距离。数据规模不大,边长至多为10,也就是一共1000个坐标点,也许用BFS也能A,不过我还是偏爱用更快的A*。于是这道题的重点也就在于写个A*算法,首先贴个A*算法的伪代码(之前转载过,不过没贴全):A

2012-01-21 19:27:32 319

原创 HDOJ 1175

题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1175        题意简明,连连看,判断两个位置能不能消去。“不好意思,由于我以前没有玩过连连看,咨询了同学的意见,连线不能从外面绕过去的,但事实上这是错的。现在已经酿成大祸,就只能将错就错了,连线不能从外围绕过。”——这句话真搞笑………令解题者少作一步处理,还是不错的(否则需要在棋盘外围加一圈

2012-01-20 01:19:29 324

原创 HDOJ 1044

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1044        题意有点类似于红白机上玩过的吃豆子游戏,呵呵。在规定的时间内逃出迷宫,并带走丢在路上的宝石们,价值尽可能的大。       最直接的想法是以宝石为结点,DFS暴力搜索,这样首先需要求俩宝石的最短路径,用A*算法。       然后就TLE了……       然后

2012-01-15 19:22:53 255

原创 HDOJ 1044

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1044        题意有点类似于红白机上玩过的吃豆子游戏,呵呵。在规定的时间内逃出迷宫,并带走丢在路上的宝石们,价值尽可能的大。        最直接的想法是以宝石为结点,DFS暴力搜索,这样首先需要求俩宝石的最短路径,用A*算法。        然后就TLE了……        然

2012-01-15 18:57:32 87

转载 A*演算法简介

A* (A-Star) 演算法是在Game中通常用來解決最短路徑(Shortest Path)問題的一種演算法. 相對於另一個知名的 Dijkstra 演算法來說, Dijkstra演算法雖然可以保證找到一條最短的路徑, 但不如A* 演算法這樣簡捷快速. 同時, Dijkstra的搜尋深度在某些情形下也容易顯得不適用. A* 演算法便是為了這些情形而出現的, 可以算是 Dijkstra演算

2011-12-29 17:13:25 332 1

原创 HDU OJ 2438

题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=2438        题意很简单,求一车辆能否顺利过弯。        这种题只能猜它的“最佳过弯法”,而很难给出严格的数学证明。        就不妨猜测车辆的外侧贴着外直角过弯是最佳的。接下来就是判断车辆内侧是否会越过内直角点了。        不妨设外直角点为原点,左上方为第一象限

2011-12-27 22:10:43 279

原创 HDU OJ 2141

题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=2141        解题的关键在于把判断a + b + c = x转化为a + b = x - c,算出a + b的所有组合,然后快排,二分搜索。        做了个优化,把c也排序,这样能在搜索中不断减少搜索空间,但似乎没快多少。以下代码#include #include #i

2011-12-24 18:21:36 285

原创 围棋博弈程序的实现与思考(8)——Zobrist哈希

本来并不想写着篇,因为英文维基上的zobrist hashing词条已经够详实了。后来发现自己的论文上有图文并茂的一节介绍zobrist哈希,想是为凑字数与图片写的,贴出来倒也方便:        Zobrist 哈希是一种专门针对棋类游戏而提出来的编码方式,以其发明者 Albert L.Zobrist 的名字命名。Zobrist 哈希通过一种特殊的置换表,也就是对棋盘上每一位置的各个

2011-12-22 23:21:25 860

原创 再谈UIView

接前文《谈Cocoa中的UIView》,本文继续谈UIView。        通常的理解,在一个MVC架构中,View是用来显示内容的,而有关用户交互的逻辑事件则放到Controller里。        ——这是个误解。考虑UIButton的例子,当用户按下和放开一个Button时,Button都会有相应的3D动画效果,显示其被按下和放开。这个动作显然是UIButton自带的,而不需要

2011-12-20 20:23:55 395 1

原创 再谈UIView

接前文《谈Cocoa中的UIView》,本文继续谈UIView。        通常的理解,在一个MVC架构中,View是用来显示内容的,而有关用户交互的逻辑事件则放到Controller里。        ——这是个误解。考虑UIButton的例子,

2011-12-20 19:41:05 80

原创 谈category的几点

Category(类别)是当年学Objc时所接触的特性,本人孤陋寡闻,不知道还有哪种高级语言有类似的特性,但这确实是很有用的特性。本文意图从面向对象的角度讨论Category,而暂撇开Objc的消息机制不论,故“消息”一词俱以面向对象术语“方法”代之。1)使用        对于一个较为通用的类A,若想往A上添一些方法,最为直接的方法是直接修改A。若新增加的方法仅在某些领域有用,这样做会让

2011-12-19 02:41:02 363

原创 有关Category的几点

Category(类别)是当年学Objc时所接触的特性,本人孤陋寡闻,不知道还有哪种高级语言有类似的特性,但这确实是很有用的特性。本文意图从面向对象的角度讨论Category,而暂撇开Objc的消息机制不论,故“消息”一词俱以面向对象术语“方法”代之。1)使用。        对于一个较为通用的类A,如果想往A上

2011-12-19 01:44:34 88

原创 围棋博弈程序的实现与思考(7)——运行结果

这个是打谱,不是人机对弈……数子……9路盘的人机对弈,程序是黑棋,让4子棋,走得实在不咋地……但它确实是在走围棋……

2011-12-17 00:27:34 555

原创 大数运算的代码

翻出一段大二时写的代码,大数运算,包括四则,阶乘,乘方。大数的数据结构是链表,每个节点存4位数,所以理论上可计算任意大的整数。        刚刚测试了一下,在GCC 4.2下可以正常编译运行,顿时内牛满面(VC 6.0下写的代码)。在此贴上源代码。#include#includetypedef int ElemType;typedef struct NodeType{ El

2011-12-15 16:02:16 326

原创 也谈引用计数

引用计数作为一种重要的GC(Garbage Collection)算法早已有之,不过也许在iOS流行后,作为Objc的重要元素,它才广为人知。当年学Objc时,碰到的最大难点也就是引用计数。manager把Objc入门教材给我时,嘱我须细看内存管理一章,深然其说。从一片茫然到知其用法,直到向安居客一位大牛请教了几次后,才发现人家是理解引用计数的思想的,而我之前只是知道它的用法。

2011-12-14 12:26:35 322

原创 该不该乐诸葛

作为一个自以为是Geek的技术男,一大缺点就是玩游戏的智商偏低,不会玩魔兽,不会玩DOTA,只会玩红警,和大富翁之类女生们喜闻乐见的游戏……甚至,一度不会玩三国杀……还是应该多玩点不同类型的游戏,以增见闻,小玩怡情,大玩伤身……        以下引入正题:        今天一8人局三国杀中,我是忠臣大乔,有一反贼诸葛,场上没有司马,问题是,大乔该不该乐诸葛?        如果以一

2011-12-09 04:33:00 399

原创 读《Head First Design Patterns》

这本书磕磕碰碰,一路啃下,还是颇有成就感的——第一次读完英文影印版的技术书籍,至少从表面上看这本书还是挺厚的大部头。去年在上个东家实习时起意学习设计模式,之所以选这本书,没有选四人帮那本《设计模式》,源于一同事的推荐。确实这是本好书,在此谢谢这位同事!不过读完这本书也生感慨——以后还是少看英文的,太累了,如果有翻译得不错的译本,还是译本吧——看英文版最明显的好处只是能在星巴克装文艺。

2011-12-07 02:11:53 735 3

原创 我的第一个“业余项目”

一个用QBASIC写就的21点赌博游戏,能够下赌注与AI(美其名曰)玩,字符界面的人机交互。DECLARE SUB yingying (y!, c!, d!)DECLARE SUB shushu (y!, c!, d!)DECLARE SUB ying (y!, c!, d!)DECLARE SUB shu (y!, c!, d!)DECLARE SUB prinqian (y!,

2011-12-06 00:56:28 731 2

原创 我的第一个“业余项目”

一个用QBASIC写就的21点赌博游戏,能够下赌注与AI(美其名曰)玩,字符界面的人机交互。DECLARE SUB yingying (y!, c!, d!)DECLARE SUB shushu (y!, c!, d!)DECLARE SUB ying (y!, c!, d!)DECLARE SUB shu (y!, c!, d!)DECLARE SUB prinqian (y!, c

2011-12-06 00:21:54 79

原创 谈Cocoa中的UIView

iOS应用的开发通常采用MVC(Model-View-Controller)架构,其中的View,在Cocoa框架中通常为UIView及其子类。        在一个iOS应用中,View通常是吃内存大户,因此有效地管理View的内存就显得格外重要。在UIViewController中,一个重要的属性为view,这个view是该Controller中所有View的superview,它的生存周

2011-12-02 20:21:18 725 1

谈Coaca中的UIView

iOS应用的开发通常采用MVC(Model-View-Controller)架构,其中的View,在Cocoa框架中通常为UIView及其子类。        在一个iOS应用中,View通常是吃内存大户,因此有效地管理View的内存就显得格外重要。在UIViewController中,一个重要的属性为view,这个view是该Controller中所有View的superview,它的生存周

2011-12-02 19:40:21 109

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除