0%

By Long Luo

2014年的06月01日,去参观了2014年深圳·香港·澳门国际车展,算是第一次参加车展吧,按照惯例谈谈感(tu)想(cao)吧:

一、学到的东西:

English:

车展:Auto Show or Motor Show
手动挡:MT(Manual Transmission)
自动挡:AT(Automatic Transmission)
手自一体:AMT(Automated Mechanical Transmission)
档位:P(Parking) R(Reverse) N(Neutral) D(Drive)

Car Brand:

A

奥迪-Audi 
阿斯顿马丁-Aston Martin   

B

宝马-BMW   
宾利-Bentley   
别克-Buick  
	   

C

凯迪拉克-Cadillac   
雪铁龙-Citroen   
雪佛兰-Chevrolet   

F

法拉利-Ferrari   
菲亚特-Fiat   
福特-Ford 

H

本田-Honda   
现代-Hyundai   

J

捷豹(美洲虎)-Jaguar

K

起亚-Kia   

L

路虎(陆虎)-Land Rover   
雷克萨斯-Lexus   
蓝伯基尼-Lamborghini  

M

马自达-Mazda 
梅赛德斯-奔驰-Mercedes-Benz   
玛莎拉蒂-Maserati 
迷你-Mini  

N

日产--Nissan  

P

标致-Peugeot   
保时捷-Porsche   

R

劳斯莱斯-Rolls-royce   

S

双龙-Ssangyong   
斯柯达-Skoda   
斯巴鲁-Subaru   
铃木-Suzuki     
精灵-Smart 
阅读全文 »

翻译 By Long Luo

原文链接:iOS Programming Basic: How Does the Hello World App Work?

译者注:
1. 由于这是技术文章,所以有些词句使用原文,表达更准确。
2. 由于水平有效,有些地方可能翻译的不够准确,如有不当之处,敬请批评指正.

我希望你享受了第一个***iOS编程教程***,同时已经创造了你的第一个App。在进入下一教程以及制作一个更复杂的App之前,我们有必要回过头,分析这个Hello World App。对于你理解一些Objective-C语言的语法和App的内部工作机制有很大帮助。

目前为止,想必你已经按照教程完成了你的第一个Hello World App。不过,当你完成了这个教程之后,你脑海里肯定冒出了更多疑问:

  • xib,.h,.m文件是做什么用的?
  • showMessage内部的代码是什么?用什么作用?
  • 当你按下Hello World的按钮发生了什么呢?按钮是如何触发了显示消息的动作呢?
  • Xcode中的Run按钮是如何运作的?

我希望你已经对Xcode IDE开发环境比较熟悉了,这样我就不用再解释一遍上面的内容了。对于每个开发者来说,理解代码的内部细节和抓住基本概念对于iOS编程是很有必要的。对于某些技术概念,如果你没有丝毫的编程背景来说,理解一些技术概念是有一定难度的。但是,别担心,这里仅仅是一个开始。如果你继续学习后续的教程,写出更多的代码,你就能更好的理解iOS编程。尽你所能努力学习更多知识吧!

阅读全文 »

By Long Luo

2014年的51 3天假期,有2个上午都去学车去了,因为不久之后我就要去考试了,总之呢,很多事情都是做的越早越好。今天把科目二考试的一些***注意事项***给记下来:

0. 准备工作

上车之后,第一步是调好靠背,后视镜,注意座椅不要调到太靠前,系好安全带。后视镜要保持后轮车毂在后视镜中间位置,把手在后视镜上方。

松手刹,踩住离合器和刹车,离合器踩到底,挂一档起步,慢慢松离合器,直到车头开始震动,离合不动,慢慢松刹车,车辆起步。

最重要的是要踩好离合器,保持很慢的速度,因为速度慢了可以慢慢调整,快了的话就没办法调整了。

阅读全文 »

By Long Luo

最近遇到一个算法题:

仿照Excel的列编号,给出一个数字,输出该列编号字符串。
例如:A对应1,Z对应26,AA对应27,AZ对应52 …

这个题目是一个典型的***26进制***思路去处理,一个整数除26然后但是这个题目里面有很多陷阱,在1, 26, 52等特殊情况进行考虑,经过晚上接近半个多小时的编写,完成的代码如下:

阅读全文 »

By Long Luo

下面列举一些收藏的资源,用于学习参考:

1. Android API Guides

  1. Android API Guides:
  2. OSChina Android API Guides:

2. Java Develop Kit References

  1. JDK7 English:
  2. JDK6 Chinese API:

3. Performances

  1. Best Practices for Performance:
  2. 性能优化系列总篇
  3. 图片ImageCache技术
  4. 图片SD卡缓存技术
  5. 性能优化之数据库优化
  6. Android网络缓存
阅读全文 »

By Long Luo

周星驰的电影《功夫》里面借火云邪神之口说出了一句至理名言:“天下武功,唯快不破”。

在移动互联网时代,同样如此,留给一个公司的窗口往往只有很短的时间,如何把握住这个时机,迅速开发出产品,成为至关重要的一环。相对传统互联网时代的PC产品,用户对移动端产品的容忍度更低。而一款移动应用在推出的时候可能只是接近完成的状态,这就需要通过快速的迭代开发来更新产品,不断完善产品来留住用户。同时,通过更新产品也能唤醒一些沉默用户,让一些原本下载了应用但使用次数非常少的用户给该应用多一次机会。

所以***快速迭代***成为移动互联网时代的一个重要生存法则。

1. 为什么需要性能优化?

上面说到,在时间窗口期内开发出产品是极端重要的,但是虽然基本功能我们实现了,但是开发出来的产品代码运行的效率怎么样呢?我们的App用户给用户的体验如何呢?

  • 我们的App在低端机上经常ANR、闪退、卡顿等
  • 我们的App在其他分辨率上显示惨不忍睹?
  • 我们的App在不同网络的情况下如何处理的

我们的App体验如此之差,导致大量的用户流失。这些迫使我们认识到性能优化是非常重要,某种程度上甚至超过了新功能的开发。

也验证了一句话:“***别人有的我们也有,而且比他们的要好要快。***”

做Android开发已经3年了,期间也开发了不少App了,最开始写App的时候,只追求迅速完成所需要的功能,后来随着对相关知识的熟悉,再回头看之前写的代码,也知道有哪些改进和优化的手段了。性能优化,一方面需要自身能力的提高,另外一方面,也需要有意识去学习优化技术,并应用于自身项目的开发中。

阅读全文 »

By Long Luo

从小到大,虽然玩过的游戏不少,但是从写程序开始,目前为此仅仅写过2个游戏。其一是2011年在MTK平台下写的贪食蛇,其二是2010年在嵌入式开发板上写过一个迷宫的游戏。第一个代码量大概有3000行左右,第二个有2000行左右。

这2个游戏都很简单,而且网上有很多现成的例子可供参考,因此难度也比较低。

这2天把拖延了好久的***《Android应用开发揭秘》***的游戏引擎的那一章看完了,收获还是很大,在此写一篇读书笔记。

关于Game Engine,我能想到的几个问题:

  1. 游戏引擎是什么?
  2. Game Engine是为了解决什么问题?
  3. Game Engine的架构是什么?
  4. 如何设计一款游戏引擎?
  5. 游戏引擎包含哪些模块?

下面就来探讨几个问题:

阅读全文 »

By Long Luo

最近一个月在驾校学车,前2次去练车,总是不得要领***,连曲线行驶开不好,被教练狂K。经历了当学渣的痛苦之后,痛定思痛,立志成为学霸*。

一、 面临问题:

我分析遇到的问题之后,得出我面临的几个问题:

  1. 方向盘打法不规范;
  2. 离合器踩的不到位,车速偏快;
  3. 不清楚方向盘转的度数和车轮转的度数关系;
  4. 不记得当前车轮方向。

清楚自己的问题就好办了,那就各个击破。

昨天去实际操作了半个小时,果然大有进展。

阅读全文 »

翻译 By Long Luo

原文链接:Introducing Smoothie

smoothie

Pattrn UI中的很大一部分是在滑动时从云端获取图片列表。所以我花了相当长的一段时间去调试,以获得滑动时的体验尽可能的流畅。在过去的几周里,我一直在试图解耦代码,完成了一个很小的库:Smoothie

***Smoothie*提供了一个简单的API来异步加载ListView/GridView的项目,以和UI线程分离。它做了所有你所期望做的事情,加载项目变得可见,取消要求回收的View对应的项目等。但它所完成的还不止这些。

**Smoothie手势识别:在Fling手势时,它会必须发起加载项目请求;在滑动列表时,当你的手指按下时,将会启用增量加载项目请求。此外,它支持当前屏幕外项目预加载功能,当你滑动时,可以减少加载占位符类型的项目数。说穿来,***Smoothie***使用了一个支持可以阻塞队列动态优先执行的的线程池。在屏幕上滑动时,屏幕外即将可见的项目加载请求将动态的获取更高的优先级。

那么,怎么使用它呢?很简单:

阅读全文 »

翻译By Long Luo

原文链接:Performance Tips for Android’s ListView

译者注:
1. 由于这是技术文章,所以有些词句使用原文,表达更准确。
2. 由于水平有效,有些地方可能翻译的不够准确,如有不当之处,敬请批评指正;
3. inflation这个词一直找不到特别好的中文翻译。

ListView如何运作的?

ListView是设计应用于对可扩展性和高性能要求的地方。实际上,这就意味着ListView有以下2个要求:

  1. 尽可能少的创建View;
  2. 只是绘制和布局在屏幕上可见的子View。

理解第一点很简单:通过布局xml文件在创建View并显示是很昂贵耗时耗资源的操作。尽管布局文件已经编译打包成了二进制形式以便于更高效的语法解析,但是创建View仍然需要通过一个特殊的XML树,并实例化所有需要响应的View。

ListView通过回收一些不可见的Views,通常在Android源码中称为“ScrapView(废弃的View)”来解决这个问题。这及意味着开发者只需要简单的更新每行的内容而不需要针对每个单独的行的布局来创建View。

为了实现第二点,在我们滑动屏幕时,ListView通过使用View回收器来增加低于或者高于当当前窗口的Views,并当前活动的Views移动到一个可回收池中。这样的话,ListView只需要在内存中保持足够多的Views去填充分配空间中的布局和一些额外的可回收Views,即使当你的Adapter有上百个items的适合。它会使用不同的方法去填充行之间的空间,从顶部或者底部等等,具体取决于窗口是如何变化的。

下面这个图很直观的展示了当你按下ListView的时候发生了什么:

ListView

通过上述介绍,相比我们已经熟悉了ListView的这种机制,让我们继续前往技巧部分。正如上述介绍的,在滑动时,ListView通过动态的创建和回收很多View,实现了尽可能地让Adapter的*getView()轻量。所有的技巧都是通过多种方法让getView()*更快。

阅读全文 »