Categories
未分类

Otto: No More Callbacks

Otto: No more callbacks 你要做一个todo app,有一个Activity里面有一个ListView显示你所有的task,你的数据存储在服务器。假设你没采用任何的软件架构(MVC、MVP、MVVM等等),每次app打开的时候,你从服务器把数据load下来,load完了以后,通过callback把数据传给Activity,然后显示到listview里面。代码结构大概是这个样子 public class TasksActivity extends Activity { private ListView mListView; //… private void loadTasks() { TaskModel model = new TaskModel(); model.setTaskCallback(new TaskCallback() { public void onError(String msg, int code) { // handle error } public void onSucceed(List<Task> tasks) { updateTaskList(tasks); } }); model.loadTasks(); } private void updateTaskList(List<Task> tasks) { //Update […]

Categories
未分类

Regular expression: All you need to know

Regular expressions are nuts. You have spent lots of time studying them and later when you actually need to write one, you come up with nothing. That’s why you need a cheatsheet, like this one. ## Abbreviations used in this post RE for regular expression. /regular_expression_content/ regular_expression_content is the text of a regular expression, The […]

Categories
未分类

博客换回Jekyll,顺带简介一下Jekyll

个人网站开起来有一段时间了,当时目标是每周写一篇文章,不过到现在也没写多少篇哈哈。。 刚开始的时候是用Jekyll来做的,后来觉得不够自由,版式太固定不好扩展。于是又推倒,用Rails自己写了一个,用Jekyll的默认主题作为样式风格,用Redcarpet来做markdown的rendering。这些都很简单,唯一的问题在于,Jekyll的默认主题虽然简洁,但是太简陋了,于是自己试着去改一些布局啊,样式啊,都是CSS的东西。折腾了几次以后,我终于要承认,我并不是一个CSS guy,我并不是非常enjoy这个过程,而且还觉得挺烦人的。所以想想,还是算了,我想写东西,那就专注于写东西吧,样式的东西交给别人去做。 于是乎,又想到了Jekyll,心想像Jekyll这样一个popular的博客引擎,应该有很多很漂亮的主题吧,于是搜了一下,找到了这个,也就是你现在看到的这个,个人感觉这是个非常适合blog的主题,既漂亮,同时也是content focused,于是决定就用这个了。从Rails app搬回Jekyll,最大的遗憾,就是之前的一些评论不能一起搬走,好可惜的感觉! ### 关于Jekyll <!–more–> 稍微介绍一下Jekyll,Jekyll是一个static page generator,应该是如今用的最广泛的吧,因为github pages用的是这个。 Jekyll的工作原理,类似于一个文本转化器,它的原材料是markdown文本,经过它的转换以后,变成了由HTML/CSS/JS组成的静态页面,这些静态页面产生以后,你把他们放到nginx或apache的root directory,就可以通过互联网访问了。是的,没有“后台”!没有数据库!没有动态代码(除非你把前端的JS代码看作“动态代码”)!!!Everything is static, thus everything is simple! 要使用Jekyll也很简单,首先你要有Ruby,要有Gem,然后 gem install jekyll jekyll new my-blog cd my-blog jekyll serve 用浏览器打开localhost:4000,你就可以看到你创建的第一个jekyll博客网站了。以后你要写自己的文章,只需要用markdown编辑器写好,保存为.md文件,然后放到my-blog/_post里面。系统会自动将你在_post下面的文章一个个遍历出来,放在首页。 更多的信息你可以在Jekyll官网看到。 ### 免费托管到github pages 用Jekyll的一个好处是,你可以用github pages来免费托管你的博客,将你的blog目录(如前面的my-blog)关联一个github pages专用的github repo。然后只管git push到repo就好了,简直不要太方便。 具体操作请看这里。 ### 用Disqus来给你的blog加上评论功能 评论是很重要的,每一个写文章的人,除了希望自己写的东西能让别人看到,帮助到别人,还希望能得到读者的支持和鼓励,评论是最重要的一个途径。此外,评论还能让别人指出你文章中的错误,或者与别的读者的交流等等。 现在问题来了,前面提到,Jekyll产生的是静态页面,没有数据库,那么评论怎么保存呢?答案是我们不保存,或者说的更清楚一点,我们不自己保存评论。我们可以用第三方的专业的评论管理工具,来帮助保存,显示评论等等一系列相关功能。我这里选的是国外的Disqus,这是用的最广泛的评论管理服务。使用了以后,发现这里还有一个非常大的好处,那就是你注册一个账号,就可以直接用来评论别人的文章了。我的意思是,比如说,另外一个人也开了一个自己的博客网站,也使用了Disqus,那么你可以直接用你的Disqus账号评论他的文章,再也不用输入所谓的用户名,email等等一系列烦人的东西。 使用Disqus加上评论功能真的是非常非常简单,不信请看这里。 Disqus的简单让我产生了一个很严重的疑问,它是怎么来防伪的呢?我看了它的代码,并没有任何secret key这样的东西。它是怎么防止别人用我的账号来给他的文章加评论呢?或者说,它能不能防止? Anyway,这个东西很好用,就用这个了。 国内有类似的服务,叫“多说”,这个之前Rails版的博客有人评论,我才知道这个东西的,当时我上去看了一下,貌似界面很丑,所以还是冒着会被The Fucking GFW屏蔽的危险,继续使用Disqus。 ### […]

Categories
未分类

从AndroidStudio的启动参数开始,了解一下JVM的一些东西(内存使用,JIT等)

如果你使用AndroidStudio经常觉得很卡,那有可能是因为系统给AS分配的内存不够的原因。打开/Applications/Android Studio.app/Contents/bin/studio.vmoptions (Mac),可以看到有以下配置: -Xms128m -Xmx750m -XX:MaxPermSize=350m -XX:ReservedCodeCacheSize=96m -XX:+UseCompressedOops 这些参数分别是什么意思呢? ####-Xms128m The -Xms option sets the initial and minimum Java heap size. The Java heap (the “heap”) is the part of the memory where blocks of memory are allocated to objects and freed during garbage collection. 就是JVM启动的起始堆内存,堆内存是分配给对象的内存。这里我把它改成了512m ####-Xmx750m This option sets the maximum Java heap size. […]

Categories
tech 未分类

在Rails app中使用Bootstrap

这篇文章基本上算是对railscast 328: Twitter Bootstrap Basics 的一个学习总结。提供一个step-by-step的guide。同时也加入了一些需要注意的地方,比如说这个video cast是2012年做的,到现在为止无论是rails还是bootstrap都变了很多,在rails里面使用bootstrap的方法也有所不同。 让rails支持LESS Rails使用的CSS precompiler是SASS,而Bootstrap使用的是LESS,因为Rails不支持LESS,所以首先要使用一个第三方的library让Rails支持LESS。 在Gemfile 里面加入 gem ‘less-rails’ gem ‘twitter-bootstrap-rails’ 在这里可以了解到更多关于LESS和SASS的信息。 注意:在railscast里面说的是将gem twitter-bootstrap-rails加入到Gemfile的assets group里面就好了。这里有两个问题,一是rails4里面将assets 这个group 去掉了,二是twitter-bootstrap-rails这个gem不自带less-rails,所以我们要手动添加。 2. 执行bundle install to install the gem。 3. 执行rails g bootstrap:install less –no-coffeescript 这句话的作用是将Bootstrap的一些CSS等文件加入到我们的rails app里面。这个命令的输出如下: 可以看到,这个命令增加了三个文件,修改了两个文件。到此为止,你就可以在rails里面使用Bootstrap的style了。至于怎么样使用Bootstrap把页面变得更漂亮,那就看你的CSS跟Bootstrap技术了。 当然,话说回来,twitter-bootstrap-rails作为一个ruby gem,如果它的作用只是将bootstrap,那也实在是有点弱。其实它还给我们带来了很多使用bootstrap的便利和快捷方法。在这个gem的github官网 可以看到详细的教程。这里介绍一个我试用过的,也是最基本的用法。 rails g bootstrap:themed [RESOURCE_NAME] Resource就是Entity在Rails里面的叫法,类似于一个JavaBean的概念,需要注意的是,这里要用Resource的复数。比如我们创建一个博客文章的评论的entity: rails g scaffold Comment content:string email:string post:references 那么这里的Comment就叫Resource。这时候我们可以使用 rails […]

Categories
未分类

Java 8的Lambda及其在Android 开发中的应用

上次在盆友圈发了一张照片 上面的两段代码是完全等效的,但是代码行数从11行降低到了一行,更不用说在第一段代码里面,我在run方法的前后以及内部都没有加入任何的空行。由此可以看出,使用lambda可以让你的Java代码在某些情况下达到何等的简洁。 那么问题来了。。。 什么叫lambda呢? Java 8 给我们带来了lambda,然而在Oracle的文档中,我没有找到lambda的定义,wikipedia里面也没有找到适合Java中的lambda的定义。写这篇文章的时候,我在这里 看到一篇很好的介绍lambda的文章,它里面给了一个定义,我觉得还挺合适的。 A lambda expression is a block of code with parameters. lambda的写法 首先列举一个完整的lambda expression: (int a, int b) -> { System.out.println(“Performing add operation…”); return a+b; } 一个lambda expression由三部分组成: – 参数:(int a, int b)是这个lambda expression的参数部分,包括参数类型和参数名 – 箭头:-> – 代码块:就是用”{}”包含着的那两句代码。 上面说的是一个完整的lambda表达式,在很多情况下,很多东西是可以省略的。比如说,当系统可以根据context自动推断出参数的类型的时候,参数类型是可以神略的。这样的话就可以写成: (a, b) -> { System.out.println(“Performing add operation…”); return a+b; […]

Categories
未分类

1分钟学会Markdown

发现很多人对markdown都有一种偏见,以为是像HTML一样,是多么复杂的东西。其实markdown真的灰常灰常简单,有多简单呢?简单到看完这篇文章,你就会了。标题说一分钟学会,其实也不夸张,如果你能在一分钟之内看完这篇文章,那么不用一分钟,就会了。 首先介绍一下,markdown是什么东西,他就是在没有任何格式的纯文本的基础上,加上一些特殊的格式(比如粗体,斜体等)的语法。听起来有点像HTML,其实他的工作原理就是将它的一些语法转化成一些HTML tag,只不过使用上比HTML要简单多了。 基本的markdown就8条规则。在日常码字中,这8条规则足以满足95%的需求了。 1. 斜体 如果你想让某些文字变成斜体,只需要用一颗星“*”包围着他们就好了。比如 hello *world*! 将显示成 hello world! 2. 粗体 如果你想让某些文字变成粗体,只需要用两颗星“**”包围着他们就好了。比如 hello **world**! 将显示成 hello world! 3. 链接 [link title](link url) 比如: [个人主页](http://www.chriszou.com) 将显示成 个人主页 注意“]”和“(”之间不能有空格 4. 图片 图片与链接之间的区别是,在前面多了一个”!” ![链接描述](image_url) 将显示image_url所链接到的那个图片,如: ![美国队长](https://images4blogs.oss-cn-hangzhou.aliyuncs.com/images/ca.jpg) 将显示: 5. 标题 如果你想让文字变得粗大,像文章的标题一样,可以在前面加上“#”,如 # 1分钟学会markdown 将显示成: 1分钟学会markdown 需要注意的是,#和后面的文字之间需要有一个空格。 前面一个“#”为一级标题,是最粗最大的。二级标题为两个“#”,以此类推,共6级 6. 列表 列表有三种,分别对应三种语法: A) 有序列表,就是分序号1,2,3,4的: hello world end 需要注意的是,数字序号和后面的文字内容之间需要一个空格。 […]

Categories
未分类

如何学习一样东西

学习一样东西,除了要学习这个东西是什么,是干什么的,还要尽量去理解这个东西是如何work的,此外,更关键的事,要知道这个东西什么时候用,什么时候不能用。这个是很关键的!