自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(321)
  • 资源 (10)
  • 收藏
  • 关注

原创 如何玩转ELF(*.so)

Shared library can be confusing and erroneous. It is very vulnerable to get "undefined symbols" error. There are some good tools can be used to analyze the so file and help us to locate the error.A.

2013-02-13 12:12:01 4643

原创 Android开发:实践TDD的一些建议

最近部分采用了TDD的方法来开发一个模块,小有收获特此总结一下:1. TDD的基本原则TDD的最核心思想就是先明确需求,且用代码的方式量化,明确需求标准,然后进行编码实现以达成由代码测试来衡量的标准。那么它要求,先把需要标准写出来,每次只写一个。编码实现通过达到,并刚好满足这个标准。这样一点一点的迭代。这样有三个好处:一个是先明确标准,不至于我们迷失主题,偏离方向。有标准在检测,保

2013-02-12 16:25:40 4207

原创 重构的几点注意事项

最近又温习了一遍Martin Flower的经典名著《重构:改善既有代码的设计》,感触颇多,应该总结一下:1. 重构是减缓代码腐化的有效武器现在很少有软件完全是从0开始开发,也很少有软件有很短的生命周期(2年)以下。那么,换句话说,很多时候你拿到的都是既有代码,它能工作,也许它的设计很好,也许很乱,但它肯定能工作。即使是优质的项目,当初的设计,架构非常合理,代码很优质,但随着时间的

2012-12-15 11:41:03 7504 1

原创 AsyncTask的坑,Handler,Looper与MessageQueue

AsyncTask的隐蔽陷阱先来看一个实例这个例子很简单,展示了AsyncTask的一种极端用法,挺怪的。public class AsyncTaskTrapActivity extends Activity { private SimpleAsyncTask asynctask; private Looper myLooper; private TextV

2012-11-17 20:04:17 14761 8

原创 如何更有效的进行面试

面试是一个永恒的话题,也是这一辈子必不可少的一部分,无论是对于公司还是个人而言。如何能更好的找人和找工作也是一个值得探究的问题。针对不同角色面试官和应聘者,结合自身的经验,总结了一些能让面试更有效率的建议:对于公司和面试官明确需求:到底需要什么样的人招聘中的面试应该是按照需求来选择人,就好比体育选拔赛,制定一定的标准,然后对应聘者进行测试(通常为笔试和面试)然后择优录取

2012-11-03 15:52:28 7180 5

原创 Android实战技术:ListView刷新的顺序问题

背景一个典型的ListView,每个Item显示一个TextView,代表一个Task,需要实现二个编辑方式:一个是用CheckBox来标识任务已经完成,另一个要实现的编辑是删除任务。对于完成的CheckBox就直接放在布局中就可,但对于删除不想使用ContextMenu来实现编辑,对于像iOS中那样的列表,它的删除都是通过对列表中每个项目的手势来触发。这个实现起来并不难,可以用一个ViewS

2012-10-20 00:13:17 6208 2

原创 Android应用“今日事今日毕”发布了

今日事今日毕,这是高效工作的最重原则。没有什么能比从待办事项列表里划掉一些条目更让人觉得舒服的事了。做为一个高效的人,您需要一个优秀的待办事项管理工具,一个优秀的待办事项列表可以帮助你更加高效的完成一天的任务。今日事今日毕是款优秀的待办事项管理工具,它可以方便,简洁快速的帮您安排一天内要做的任务。无论是待办事项,购物清单,甚至是临时记事都可以用它来完成。没有繁杂的日期和时限设置,没

2012-10-19 10:41:01 5233 3

原创 Android实战技巧:深入解析AsyncTask

AsyncTask的介绍及基本使用方法关于AsyncTask的介绍和基本使用方法可以参考官方文档和Android实战技巧:多线程AsyncTask这里就不重复。AsyncTask引发的一个问题上周遇到了一个极其诡异的问题,一个小功能从网络上下载一个图片,然后放到ImageView中,是用AsyncTask来实现的,本身逻辑也很简单,仅是在doInBackground中用HTTP请求把图

2012-09-16 00:02:49 106382 87

原创 Android Ticks: display text vertically

TextView of Android is a text label to display text. But it can show text only horizontally by default, left to right or right to left. There are some chances that we would like to show text verticall

2012-09-15 09:23:11 3635 1

原创 Android实战技术:Splash的实现

什么是SplashSplash也就是应用程序启动之前先启动一个画面,上面简单的介绍应用程序的厂商,厂商的LOGO,名称和版本等信息,多为一张图片,显示几秒钟后会自动消息,然后显示出应用程序的主体页面。在PC上,很常见各种平台的应用程序都会有,多半是一张图片显示在屏幕中央,如Microsoft Office系列,或者GIMP等。在各种游戏中Splash是最常见的,几乎所有的游戏开始都会有一张全屏

2012-09-11 21:56:55 30336 9

原创 Vim进阶技术:搜索和替换

行内搜索行内搜索,也就是在当前行内进行搜索和移动,通常都与编辑命令一起使用。fx -- 移动到下一个字符x的位置,光标停留在x字符上面tx -- 移动到下一个字符x的位置,光标停留在x前一个字符上Fx -- 移动到前一个字符x的位置,光标停留在x字符上面Tx -- 移动到前一个字符x的位置,光标停留在x后一个字符上; -- 重复前一个搜索,向着同一方向,即原来向前就向前,原来向后就向后

2012-09-10 22:02:04 13248

原创 一道面试题:餐馆模拟

前阵子遇到一个面试题,当时没有做出来,后来断断续续的用了一周的时间做了出来,但感觉也不完全对,先来看看题目,稍后再讨论。问题模拟一个餐馆,三个厨师,二个服务员,厨师单独做菜,2分钟一个菜,服务员单独送菜10秒一个分析一看这问题就知道考查的点是多线程,生产者与消费者模型的模拟类问题,《Java编程思想》中有类似的例子,但是这个问题比书中的例子要复杂一些,因为厨师和服务员都有多个,所以

2012-09-04 20:33:11 3807 2

原创 Android实战技术:Cursor相关的性能问题

当数据库中存有大量数据的时候,用Cursor查询时要注意,有可能引发性能问题。数据库查询出来的Cursor都会由一个CursorWindow来进行数据管理,包括内存空间的申请和数据的填充。CursorWindow对Cursor中的内容大小有限制,限制为1024*1024也就是1M,换句话说Cursor中数据的大小不能超过1M,如果超过1M会引发如下的错误:08-23 05:48:31.838:

2012-09-01 21:40:50 6913

原创 年中总结:一些工作和技术相关的想法

1. 不要为过去买单不要活在过去,今天才是最最重要的,明天更重要。不要弥补过去,那样会错过今天和明天,更会把自己迷失在过去的阴影中,会造成总是犯错,又总是为过去改过,于是生活在一个怪圈之中。2. 量化目标,把目标具体化千万别把一些:掌握,熟悉,高级,专家等一些非常抽象的标准作为你的目标,仔细想一想:什么叫掌握,什么叫熟悉,什么叫高级什么又叫专家呢?这些东西不同的人会有不同的理解

2012-08-22 21:03:03 3311 3

原创 WebKit技巧:如何用GDB进行调试

对于Android中的Webkit(libwebcore.so),因为它是系统底层的库,所以没有办法像App和Frameworks那样直接用Eclipse来调试,因为它们都是C和C++语言,所以对于它来讲只能用GDB来进行调试。何时用到GDB来调试个人认为,并不是所有问题都立马上GDB来调试。因为Webkit的代码十分巨大逻辑也十分的复杂,所以直接用GDB,可能不是很直观,你无法在合理的位

2012-07-22 18:46:51 5645

原创 Webkit实战技术:如何添加日志信息

调试日志信息调试日志都是由宏来定义和实现的,并由另外定义的宏来作为开关。日志开关Webkit中只有JNI部分是有Log日志的,其他代码都没有加入日志。JNI部分常用的LOG有:DBG_SET_LOG      在external/webkit/Source/WebKit/android/jni/PictureSet.h中定义,开关为PICTURE_SET_DEBUGDB

2012-07-17 22:58:16 6261 1

原创 给大一新生的建议

1. 好好利用高考结束后的暑假这个暑假非常的长,是高中三年痛苦生活的一次小补偿,要好好的利用。第一:好好的放松一下,最好选择去某个地方进行一次长途旅行,可以和父母亲人一起,但我更建议跟要好的朋友和同学几个人一起去,这样不仅可以锻练自己的独立做事的能力,更能增进朋友之间的友情,另外,由于都是同龄人,想法行为会更一致,会让旅途更加的愉快!第二:好好的陪伴一下家人,你要明白随着人的成长,跟家

2012-06-16 17:13:12 8445 3

原创 写给即将毕业的同学们

纷纷的雨季送来了别离,一年又一年,又一大批学生即将离开学校,结束学生生涯,开启人生的另一个征程!回首自己走过的路,总结了下,写点东西出来,不敢说是忠告或是什么经验,但是至少没坏处!1. 回首过去,思考人生找一个安静的地方,听着音乐,闭上双眼,慢慢的回忆过去,一点一点的回忆,发生的事情,做过的事情,犯过的错误,特别是你曾经没做好的事和做的满意的事情等等。回首过去,思考那些

2012-06-15 23:06:04 5101 2

原创 16岁的博士----神童还是悲剧?

本来不想写这篇文章,关于16岁全国最年轻博士(其实也是最年轻的硕士和本科生)这个故事在2011年四五月份的时候就听说了,当时有一个小电视,每天都当背景音乐在放着,有一天晚上就报道了16岁神童的故事,第一感觉是这孩子真苦。今天浏览CnBeta时突然又看到了这个消息,一细看原来都是以前的旧报道,内容跟以前电视采访是一样的,于是先大骂一下CB,又思考了一下,觉得应该写点什么(但后来CB好像把这篇文章删除

2012-06-14 23:21:37 4235

原创 Android线程解惑

一个应用只有一个线程在默认情况下,更确切的讲一个进程中只有一个线程,这跟其他语言,比如C/C++,Java等是一致。也就是说在Android应用程序里面一个进程只有一个线程,所有组件都运行在一个线程里面!当应用程序启动时,系统会为其创建一个进程,也会创建一个线程名字叫做main,所有其所属组件的创建,系统事件的处理,系统的回调等一切应用相关的事情都运行在此名叫main的线程中。此线程即为常

2012-06-12 22:23:58 6192 2

原创 如何快速接手一个项目(内部项目或开源项目)

1. 了解项目读相关的文档和文章,起码要知道这个项目是用来干嘛的,有什么样的功能,运行在什么上面(手机,PC,或多平台),发行许可(GPL,Apache或者??),目标格式(应用程序,库,中间件等)等等。通常这些问题在项目的文档,Wiki,FAQ等地方都 能找到。2. 获取源代码这不用多说,没源码你还研究个啥,这个官方文档会讲,通常都是通过SVN或GIT,当然也有把源码打包下载的(

2012-06-02 21:15:07 12750 3

原创 一个合格的软件开发者所应拥有的

日常工作必备技能: 这些东西是不是每天都用用到呢Unix/Linux Shell:如果用Unix/Linux系统,必须要学会Shell,目的是写一些自动化脚本,看看《Productive Programmer》和《Pragmatic Programmer》,其实很多事情不用手动去做,电脑会帮我们无差错的完成,一次又一次毫无怨言,人可没这么好。Windows BATCH:必然会用到Windo

2012-06-02 20:32:56 3430

原创 Platform-independent is Nothing

Last Friday I had to process some text files, adding some tags before some patterns in a text file. Perl is born for such a task. I first copied all the patterns into a file in Windows XP, then I swit

2012-05-26 23:30:43 2628

原创 Android天下大乱,Google无法一统山河

Android是一个了不起的系统,现在设备量很大,但是其利润却可怜,虽然仍在高速发展,但其前景并不乐观。1. 分裂化严重现在市场上有近千种Android设备,各自之间有着大大小的差异,这给应用开发者带来无尽的困扰,为了能让应用适配更多的设备,唯有购买多多的设备进行一一的测试,这无疑会加大开发成本,延长开发周期,这很伤开发者的心!看看最近的报道吧,香港的一家应用公司买了400多个Andr

2012-05-18 21:35:21 5612 7

原创 Android生存指南:解Bug策略和思路

现在维护和定制Android的需求越来越多,做的人也越来越多,而Google直接Release出来的源码中又有很多Bug和不合理的地方,特别是原生的应用,如Mms,Browser, Email, Contacts等。定制或做Android解决方案第一步就是要修复原生的Bug以得到一个稳定的系统。1. 仔细观察Bug的特性了解Bug所涉及的流程和模块有哪些,以及是什么样的Bug,Exce

2012-05-17 23:00:04 5314 2

原创 Android生存指南:一些开发注意事项

1. 为Activity声明系统配置变更事件系统配置变更事件是指转屏,区域语言发生变化,屏幕尺寸发生变化等等,如果Activity没有声明处理这些事件,发生事件时,系统会把Activity杀掉然后重启,并尝试恢复状态,Activity有机会通过onSaveInstanceState()保存一些基本数据到Bundle中,然后此Bundle会在Activity的onCreate()中传递过去。虽然

2012-05-17 21:55:14 7106 4

原创 Android实战技巧:Dialog

Dialog是任何系统都必须有的一个控件,作为辅助窗口,用于显示一些消息,或请求用户采取一引起操作等。在Android中也不例外,基本使用可能参看文档。使用时的注意事项1. BACK键能取消掉对话框(dismiss),但是却不会触发其onOkey和onCancel回调接口,所以如果你的对话框会改某些状态,一定要注意还有第三种方式取消对话框。2. 尽量少用模态对话框(Model

2012-05-15 10:50:32 12982 1

原创 Android组件间通信机制对面向对象特性的影响

组件的特点对于Android的四大组件Activity, Service, ContentProvider和Service,不能有Setter和Getter,也不能给组件添加接口。原因是组件都是给系统框架调用的,开发者只能实现其规定的回调接口,组件的创建与销毁都是由系统框架控制的,开发者不能强行干预,更没有办法获取组件的对象。比如Activity,Service,BroadcastReceiv

2012-05-15 09:24:14 4281 1

原创 Android实战技巧:Handler与线程间通信ITC

在上篇文章中谈到了Handler是用于操作线程内部的消息队列,所以Handler可以用来线程间通信ITC,这种方式更加安全和高效,可以大大减少同步的烦恼,甚至都可以不用syncrhonized。线程间通讯ITC正常情况下函数调用栈都会生存在同一个线程内,想要把执行逻辑交换到其他线程可以新建一个Thread,然后start()。另外一种方法就是用ITC,也即用消息队列来实现,线程需要把执

2012-05-13 22:49:09 6689

原创 Android实战技巧:Handler

Handler之消息循环Handler是用于操作线程内部的消息队列的类。这有点绕,没关系,我们慢慢的来讲。前面Looper一篇讲到了Looper是用于给线程创建消息队列用的,也就是说Looper可以让消息队列(MessageQueue)附属在线程之内,并让消息队列循环起来,接收并处理消息。但,我们并不直接的操作消息队列,而是用Handler来操作消息队列,给消息队列发送消息,和从消息队列中取出

2012-05-13 19:44:48 6893 1

原创 Android实战技巧:消息循环与Looper

Understanding LooperLooper是用于给一个线程添加一个消息队列(MessageQueue),并且循环等待,当有消息时会唤起线程来处理消息的一个工具,直到线程结束为止。通常情况下不会用到Looper,因为对于Activity,Service等系统组件,Frameworks已经为我们初始化好了线程(俗称的UI线程或主线程),在其内含有一个Looper,和由Looper创建

2012-05-12 22:34:58 27940 7

原创 Android实战技巧:多线程AsyncTask

Understanding AsyncTaskAsyncTask是Android 1.5 Cubake加入的用于实现异步操作的一个类,在此之前只能用Java SE库中的Thread来实现多线程异步,AsyncTask是Android平台自己的异步工具,融入了Android平台的特性,让异步操作更加的安全,方便和实用。实质上它也是对Java SE库中Thread的一个封装,加上了平台相关的特性,

2012-05-12 19:50:29 23292 3

原创 RTTI:获取类的详细信息

通过RTTI,Class类和Reflection可以获取某个类的详细信息,包括其没有Public出来的信息,先看一个实例:public class ClassExtractor { /** to discard qualifiers */ private static final Pattern pattern = Pattern.compile("\\w+\\.");

2012-05-06 22:00:39 2864

原创 Android Browser的配置管理

Settings是WebView提供给上层App的一个配置Webview的接口,每个WebView都有一个WebSettings,要控制WebView的行为,只能通过WebView.getSettings()获取WebSettings对象的引用,然后再改变它的属性。Browser有一个BrowserSettings用来管理所有的配置信息,它是一个单键(Singleton)。BrowserSet

2012-05-06 21:48:33 4708 1

原创 高效能程序工具之ctags和Vim

ctags是用于产生源码文件之间的交叉引用的一个工具,它扫描源码文件,生成一个tags文件来记录其内的引用关系。这个tags文件可以被源程序编辑器识别,进而非常方便浏览多个源程序。命令格式ctags [options] [files]常用选项-R 递归式处理子目录因为ctags的默认选项比较多,所以很多时候不用指定其他的选项。最常用的方式在某个源码目录下运行ctags

2012-05-05 19:34:28 4597 1

原创 高效能程序工具之grep

grep是global regular expression pattern,意思是全局正则表达模式匹配。通俗来讲就是用于模式匹配,或者叫做查找。它有几个变体:egrep ---- 相当于grep -efgrep ---- 相当于grep -frgrep ---- 相当于grep -r这几个不是很常用,已经是Deprecated,建议还是用grep。命令格式grep [opti

2012-05-05 19:24:00 3290

原创 南京谷歌开发者社区成立了

谷歌开发者社区GDG(Google Developers Groups),以前的名字是GTUG(Google Technology Users Groups)。是由谷歌主办诣在学习各种开源的先进技术,特别是学习谷歌的技术如Google Maps, Android和HTML5,WebGL等一些非常新兴的技术的由开发者组成的。它鼓励开发者加入,参与学习各种线上线下的技术活动,竞赛等等社区。谷歌有专门的

2012-04-22 10:40:17 9091

原创 深入浅出Windows BATCH

1.什么是Windows BATCHBATCH也就是批处理文件,有时简称为BAT,是Windows平台上的一种可执行脚本,与*nix(Linux和Unix)上的Shell脚本和其他的脚本(Perl,Python)等是一样的,实质上就是一个文本文件,但是用特定的软件去解释的时候,就变成了可执行脚本。在Windows上,可执行脚本就是BATCH文件,也叫批处理文件,这是从DOS时代遗留下来的名字,

2012-04-16 20:51:07 39696 3

原创 Android SDK弱爆了---在64位Linux机器上使用的同学注意了

由于机器内存坏了,换了个内存,重新安装了一个64位的Fedora16,把原来的32位的Fedora15格掉了。于是在重新安装Android SDK时遇到了非常好玩的事情,先是SDK的安装文件和ADT无法下载,我家用的移动的宽带,就是无法下载,跟朋友联系了发现移动和联通的宽带无法下载,中国电信是可以正常下载的,真是诡异啊!没有办法,到朋友那下了一个。回来安装时就一直停在Fetching状态,

2012-04-12 00:26:52 15721 3

原创 Understanding Android ContentProvider

1. 什么是ContentProvider也即内容提供者,是对所有数据访问的一层抽象,为数据访问提供了统一的接口。它有以下优点:a. 对数据的抽象,为所有的组件提供统一的访问数据的方式,从而让组件不必关心具体数据的呈现形式(文件or数据库)。数据,也可以只关心自身的管理,而不用去管使用者的访问问题。这样就达到了很好的封装。b. 接口更加方便,更加方便的让组件之间传送数据Conten

2012-04-02 10:40:07 2716

doxygen完整示例

完整的如何使用Doxygen的例子,包括书写文档块,配置和生成的文档!

2013-03-07

The Artist’s Guide to GIMP, 2nd Edition

The Artist’s Guide to GIMP, 2nd Edition 英文原版 The GIMP, an image editor whose power and ease-of-use rivals that of Adobe Photoshop, is one of the world's most popular free software projects. Artists and designers have relied on the GIMP since 1995 to retouch photographs, composite multiple images, and create new artwork from scratch. The Artist's Guide to GIMP Effects shows you how to harness the GIMP's powerful features to produce professional-looking advertisements, impressive photographic effects, as well as logos and text effects. And author Michael J. Hammel, who has used the GIMP since its first public release, won't mince words or waste your time. His extensively illustrated, step-by-step tutorials are perfect for hands-on learning and experimentation. After a crash course in using the GIMP's interface and core tools (such as brushes, patterns, selections, layers, modes, and masks), you'll learn: Photographic techniques to simulate ripped edges, create sepia-toned antique images, swap colors, produce motion blurs, alter depth of field, and even fix rips in an old photo Web design techniques to create tiled patterns, navigation tabs, rollovers, and fancy buttons and borders Type effects to create depth, perspective shadows, metallic and distressed text, and neon and graffiti lettering Advertising effects to produce movie posters and package designs; simulate clouds, cracks, cloth, and underwater effects; and create specialized lighting Interface design tips for creating textures, navigation bars, and buttons Whether you're new to the GIMP or you've been playing with this powerful software for years, The Artist's Guide to GIMP Effects is sure to teach you some new tricks. Visit the book's companion site for additional tutorials and resources. http://www.graphics-muse.org/artistsguide/

2012-10-20

Android本地代码生成器

可以自动生成Android本地代码。 解压后,在项目根目录下面运行genjni.sh(先把里面的genjni.jar放在一个地方,然后把genjni.sh里面的路径改下)。之后,如果有本地方法声明,就会生成本地文件和编译文件。

2011-10-19

Android本地代码生成器

能帮助使用NDK开发时自动生成本地代码。 只需要在Java文件中声名本地方法,然后运行这个工具,它会逐个检查Java文件,并根据里面的本地方法生成本地文件,和相应的Android.mk文件。并会更新Java文件,添加System.loadLibrary。 接下来所需要做的就是实现那些本地方法。然后编译。

2011-10-19

Java反编译器

用于反编译Jar的实用工具,在逆向工程的时候特别的有用处。 可以把Jar直接解析成Java代码.

2011-10-14

Android反编译工具dex2jar

用于反编译Apk的实用工具,在逆向工程的时候特别的有用处。 可以把Dex转成Jar包。

2011-10-14

AMXLPrinter2用于把二进制的XML转为文本

用于将二进制的XML文件 转回到文本。在Android应用程序Apk逆向工程的时候特别有用。

2011-10-14

Learn the GNU Emacs Editor

best book about learning Emacs Editor

2009-05-29

Learning Vi and Vim editor

best course about Vi and Vim Editor. This is the 7th edition. It includes many Vim-7 new features

2009-05-29

Fedora 10安装教程

详细介绍Fedora 10的安装,非常适合初学者.

2009-05-29

空空如也

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

TA关注的人

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