0%

By Long Luo

引言

NOKIA 有句著名的广告语:“科技以人为本”。任何技术都是为了满足人的生产生活需要而产生的。具体到小小的一个手机,里面蕴含的技术也是浩如烟海,是几千年来人类科技的结晶,单个人穷其一生也未必能掌握其一角。不过个人一直认为基本的技术和思想是放之四海而皆准的,许多技术未必需要我们从头到尾再研究一遍,我们要做的就是站在巨人的肩膀上,利用其成果来为人们的需求服务。

随着移动互联网时代的大潮,越来越多的App不光是需要和网络服务器进行数据传输和交互,也需要和其他 App 进行数据传递。承担App与网络来进行传输和存储数据的一般是XML或者JSON。在移动互联网时代,XML和JSON很重要。

最近一段时间,个人综合了之前对XML、JSON的一些了解,参考了相关资料,再结合视频的代码,把自己的一些思考融入了这篇总结文档中,同时尝试用通俗诙谐的语言风格来阐述,期望能给感兴趣的读者带来帮助。

为了不和时代落伍,我们必须要学习 XML 和 JSON,但同时它们也很容易学习,Let’s start:-)

一、XML

XML即可扩展标记语言(eXtensible Markup Language)。标记是指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种信息的文章等。如何定义这些标记,既可以选择国际通用的标记语言,比如HTML,也可以使用象XML这样由相关人士自由决定的标记语言,这就是语言的可扩展性。XML是从SGML中简化修改出来的。它主要用到的有XML、XSL和XPath等。

上面这段是对XML的一个基本定义,一个被广泛接受的说明。简单说,XML就是一种数据的描述语言,虽然它是语言,但是通常情况下,它并不具备常见语言的基本功能——被计算机识别并运行。只有依靠另一种语言,来解释它,使它达到你想要的效果或被计算机所接受。

记住以下几点就行了:

  • XML是一种标记语言,很类似HTML
  • XML的设计宗旨是传输数据,而非显示数据
  • XML标签没有被预定义。您需要自行定义标签。
  • XML被设计为具有自我描述性。
  • XML是W3C的推荐标准

总结:

XML是独立于软件和硬件的信息传输工具。
目前,XML在Web中起到的作用不会亚于一直作为 Web 基石的 HTML。
XML无所不在。XML是各种应用程序之间进行数据传输的最常用的工具,并且在信息存储和描述领域变得越来越流行。

阅读全文 »

By Long Luo

之前一段时间花了很长时间来玩了一个 Mac OS平台下的塔防游戏《iBomber Defense Pacific》,为此浪费了不少时间。

玩到通关之后,躺在床上,我一方面心痛我居然对游戏如此没有免疫力,另外一方面我在思考这款游戏好在哪里,哪些地方设计的很好?

作为一款塔防游戏,这款游戏和其他塔防游戏有什么优点?如何设计一款塔防游戏呢?它需要遵循哪些原则呢?

阅读全文 »

By Long Luo

一、Overview

最近实现了我的第一个个人博客阅读App,但是***目前存在很多很多Bugo(╯□╰)o >_<|||***。

可以通过这个App来实现RSS订阅功能,第一时间阅读我的个人博客文章,同时可实现文章收藏与分享功能。App使用截图如下所示:

1.1 RSS 订阅最新的20篇文章

All Articles

1.2 可以收藏文章

Favorite Articles

1.3 查看文章全文

Article Detail

1.4 支持将文章分享到SNS

SNS Share

阅读全文 »

By Long Luo

最近为了做好一个天气预报的项目,需要从Yahoo下载一些天气图标,但是由于图标比较多,有80多张。图标是存储在Yahoo Image网站上的。

迅雷不支持https的下载,虽然可以在浏览器下载,但是在浏览器下载太慢,于是写了一个批量下载图片资源的Shell脚本,完美的解决了这个问题。

Yahoo天气图标的地址规则如下:https://s.yimg.com/zz/combo?a/i/us/nws/weather/gr/ + 图标名称

比如:Thunder

我使用了2种方法,解决了下载的难题,虽然好久没有写Shell脚本了,但是意识和底子还在,写即几十行代码还是比较轻松的。

阅读全文 »

By Long Luo

由于合作的第三方iQiyi视频的数据源更新速度很慢,通过和iQiyi反馈,于是提供了新的API接口。

通过阅读新API接口说明,在发起HTTP Get请求时,必须同时带2个加密的Header参数,分别是时间戳和MD5加密后的key、时间戳以及客户端参数,否则无法返回正确的请求。

目前在Android客户端使用的是Google开源Volley库,支持各种HTTP请求,图片缓存,JSON解析,性能十分强大。之前使用的接口都是直接发起HTTP Get请求,附带相关参数即可。

通过阅读Volley相关资料,找到了下列方法,可以在发起HTTP请求时,附带Header参数,代码如下所示:

阅读全文 »

By Long Luo

最近几天学习了下网页开发,通过学习,完成了第一个Web前端开发项目:天气应用

数据源是Yahoo! Weather

使用了jQuery库开发,虽然现在啥都不会,也就到处copy。

Created by Long Luo at 2014-09-07 11:36:20 @Shenzhen, China.

By Long Luo

一、重构前的一些缺点

  1. 频道显示在VideoListActivity实现的,代码结构不够清晰;
  2. 频道页面需要根据不同频道目前存在矩阵式显示和列表式显示2种方式,矩阵式显示嵌入在ListView中实现的,造成加载时绘制矩阵式页面需要更长的时间;
  3. 后续频道页面会参考第三方视频应用,不同频道会有不同的展示方式,而目前功能可扩展性不够好;

二、重构方案

重构方案:

  1. 将频道页面独立出来,新建一个ChannelListActivity,作为所有频道页面的Activity,负责所有频道界面的绘制,便于后续扩展;
  2. 针对不同频道,具有不同的布局方式,比如对于需要矩阵式显示的频道,使用矩阵式布局;
  3. 矩阵式布局,替换原有的ListView加GridView显示,提高加载速度;

三、具体实现

技术实现方案如下所示:

  1. 新建ChannelListActivity,在VideoListActivity中用进入频道页的接口替换原有的接口,将相关处理在ChannelListActivity中实现;
  2. 根据传入的频道ID不同,使用**setContentView()**加载不同的布局方式,实现不同频道不同布局显示;
  3. 新建ChannelGridAdapter,替换原有的ChannelListAdapter加ChannelGridListAdapter方式,提高加载速度;
阅读全文 »

By Long Luo

一、在线搜索

之前搜索页面的一些缺陷:

  1. 具体实现位于VideoListActivity中,一方面会造成VideoListActivity代码过于庞大臃肿,另外一方面***不便于后续功能扩展***,结构不清晰;
  2. 依赖了大量系统控件,不便于后续解耦界面定制
  3. 今后搜索界面会参考第三方视频应用的实现,之前不便于增加搜索记录,或搜索独立出来,用于搜索本地视频,甚至将此搜索移植应用于其他应用中;

1.1 在线搜索实现效果

在线搜索因为是和第三方合作,涉及到很多网络相关的操作,简单来说就是利用HTTP协议向相关接口发起一次网络请求,服务器如果返回了正确的响应,App会解析服务器返回的内容,并展示出来。

1.1.1 热词界面

热词界面是当搜索文本框文字为空时会弹出热词界面,会展示最近一段时间内搜索频率很高的词语。一方面可以节省大家输入文字,另外一方面你也可以了解当前的一些热点。

当你点击列表中的某个热词时,就会发起一次以此为关键词的搜索。

热词显示

1.1.2 关联词

搜索文本输入框含有文字时,会获取当前输入文字,以此为关键词获取网络的一些联想词,可以点击此联想词发起一次搜索。

关联词显示

1.1.3 搜索结果分类浏览

发起一次搜索之后,如果得到了服务器的正确响应,而且确实有相关视频内容。那么我们会将搜索结果展示在手机页面上。

搜索到的结果可以分不同频道浏览,会根据具体内容进行动态变化,有的可能有10几个频道,有的也就1个频道。频道页面可以滑动浏览,也可以选择在顶部页面选中或者滑动。

分类浏览时,第一个展示的页面是搜索到的全部视频内容,之后的会根据结果动态变化。

如下图所示:

搜索结果

分频道浏览:

搜索结果分类

1.1.4 语音搜索

语音搜索图标只有当搜索框里文字为空才会出现,否则出现搜索图标

点击语音搜索图标将会启动VoiceSearch这个apk,然后你可以说话,如果被正确识别之后,会发起一次搜索,并将结果展示出来。

语音搜索

1.1.5 语音搜索结果

语音搜索结果

阅读全文 »

翻译 By Long Luo

原文链接:Android Audio: Play a WAV file on an AudioTrack

译者注:
1. 由于这是技术文章,所以有些词句使用原文,表达更准确。
2. 由于水平有效,有些地方可能翻译的不够准确,如有不当之处,敬请批评指正.
3. 针对某些语句,适当补充了上下文及更适合中文阅读,尽量做到信达雅。


如果你已经成功地了解了关于AudioTrack一些话题,那么你可能享受它带来的好处,例如低延迟(在STATIC(静态)模式),能够生成流式音频(在STREAM(流)模式)以及在播放之前,就能够访问和修改原始声音数据。

不过,现在的问题是如何从源获取数据。许多应用需要使用的AudioTrack并不能简单的生成PCM音频(一个例子,比如Ethereal Dialpad或者其他类似的App)。你可能需要从文件源去加载数据,例如WAVMP3文件。

不要期望使用MediaPlayer,去解码WAV文件和MP3音频。虽然MediaPlayer播放这些文件非常好,但是其播放逻辑完全在Native层,同时并没有为我们提供额外选项,允许我们使用其他解码器实现我们的目的。因此,我们必须从手动地从音频文件进行解码出PCM

在这篇文章中,将会讨论WAV格式文件。而在下一课中,我们将会更进一步,讨论如何从MP3文件读取音频。

阅读全文 »

By Long Luo

2014.06.03 Apple举行了万众瞩目的WWDC2014,发布了OS X Yosimite和iOS8,最近几天看了一部分Keynote,从网上搜集了一部分资料,将这次WWDC14的一些新功能点汇总出来,同时加入了自己的一些想法,探讨下码农群体应该注意哪些趋势。

Continuity & Seamlessly

总体来说:

系统功能更加完善,更加人性化,更加开放,与其他iOS、Mac设备整合度扩大,并且预示了未来与可穿戴设备、智能家居的紧密结合的趋势,预计Health和Home两大产业将发生重大变革,将有一系列的新App和硬件改变我们的生活。

WWDC的报道会分别讲解Mac OS Yosemite和iOS 8的各项功能。可是整场看下来,觉得这两个系统的更新都有一个指针:统一。爷就是关键的2个词,Continuity & Seamlessly

Mac OS Yosemite的扁平化和透明统一了Mac OS和iOS的视觉风格。
Mac OS也追加了iOS上特有的功能,比如打电话、IM。

两个系统在视觉和功能上统一的同时,通过 iCloud 的升级,实现了数据同步。
「视觉」,「功能」和「数据」统一了之后, Handoff 实现了Mac OS和iOS工作的无缝切换。

最终,所有**“苹果设备”**都将无缝的融合到一起。随时拿起iPad,打开Macbook或者掏出 iPhone,你都能看到同样的视觉风格,得到一致的数据,使用同样的功能。

阅读全文 »