Hello World

关注移动开发和自动化,记录开发中遇到的问题和思考

解决Android5.0应用安装失败的问题

缘起 把手机OTA升级到Android 5.0(Android L)以后安装某打车软件失败,尝试了几次结果一样。 探究竟 最开始想到是软件和5.0的适配兼容问题,查下Log吧。 首先通过 adb logcat 监测log,然后重新尝试安装,没有发现特别醒目的信息。 然后通过adb install xxx.apk的方式安装,得到以下错误提示: ...

十一月 26, 2014

在ContentResolver中使用Group By

缘起 使用ContentProvider查询短信,希望可以在ContentResolver.query中使用Group By ,发现系统并没有提供接口或者可用字段。 ...

九月 25, 2014

某团支付的“猫腻”

缘起 应用开发过程中要对接支付宝支付,简单体验下来,市面上有三种实现方式: 网页版 快捷支付服务插件版 某团版(姑且这么叫,由于先发现某团是这种实现,其实某点评也是这种) 前2种没什么疑问,应用广泛,实现上支付宝也都给出了SDK,第3种实现各种“诡异”: 完全是App原生的体验,没有发现支付宝有公开的支持方式 没有在应用数据包和SD卡上找到任何痕迹 某团退出登录再登录依然可用,卸载再安装依然可用(免登录列出支付信息,只需要输入支付密码),某团登录一次,安装大众点评也直接可用。 手机恢复出厂设置依然可用,恐怖吧? ...

七月 21, 2014

静态博客之站内搜索

缘起 静态博客各种好处这里不表了,但是由于是静态的,站内搜索就成了一个问题。这里会提到3种站内搜索的方式,大赞最后一种的切入点。 ...

七月 11, 2014

通过StackTrace获取方法名

缘起 开发过程中经常需要获取当前正在执行的方法名,以前搜过,只是简单的知道可以调用Thread.currentThread().getStackTrace()来获取。就点到为止了。这次需要获取调用当前方法的方法的方法名(有点绕,我信你能看明白),所以详细跟了下。 ...

六月 27, 2014

Sqlite数据库自动建表

缘起 做了一个分享邀请码的工具:http://code.lmbj.net/。有个需求是显示有多少人已经索码成功。问题在于程序的设计是只保存正在索码的数据,索码成功的数据直接删除,所以需求转变为如何得到已删除数据的条数。 考虑到id是自增长的,数据库中应该有系统表来保存相关信息,用sqliteman打开数据文件发现确实存在这样一张系统表sqlite_sequence。表中保存了表名和自增长的字段(一般就是主键id)的当前值,测试了下,如果包含自增长字段的表没有插入过数据,不会保存在此表里,只要曾经插入过数据,无论当前是否有数据,该值都会存在。 至此,问题得以解决:执行sql语句通过表名从sqlite_sequence表查询id的当前值,然后减去正在索码的条数就是已删除数据的条数,也就是已经有多少人索码成功。唯一需要注意的是初始化时没有人索码,查询不到记录,需要做异常处理。 ...

三月 27, 2014

树莓派打造私人电台

缘起 题目略微标题党,其实开始就是比较喜欢听一档广播节目,想用树霉派听广播,可以手机控制。 准备 刚开始还在想着要不要自己开发一个Android的客户端来控制树霉派的播放。简单搜索了一下,发现已经有现成的实现:MPD。MPD (music player daemon) 是一个服务器-客户端架构的音频播放器. 它使用很少的系统资源播放音频文件, 管理播放列表和维护一个音乐数据库. 你需要一个独立的客户端与它进行交互。 安装 1.安装MPD: sudo apt-get install mpd mpc ...

三月 19, 2014

[译]不要开发Apps,开发Superpowers

人们常说 在当代会编程是一种超级能力,而我则认为编程本身并没有超能力,但是程序员可以开发出超级能力。我也认为程序员应该花更多的时间来开发超能力,而不是像现在这样花费那么多时间来开发Apps。 那么 在这里“Superpower”是什么意思呢?超级能力就是一组这样的软件:没有用户界面,并且只有一个用户,那就是你自己。它只做一件事情,那就是提高你的生活质量。它是你所开发的软件中市场定位最清晰的,因为目标市场只有一个用户。你知道痛点在哪,可以很容易满足用户需求。 ...

十二月 21, 2013

[译]一劳永逸

在我们生活的世界,人们花费他们一生的很大部分时间来做那些可以被自动化的事情。这是非常严重的资源浪费,因为人类的大脑是这个星球上最壮观的处理器。 人工智能确实是一个令人兴奋的领域,但是短时间内我们还无法创造出一种可以和人类大脑媲美的人工智能。 那么多人类的大脑被消耗在一些简单的任务上,这些任务本可以用较小的处理器花费非常少的时间和非常小的代价就可以完成。那么多人类大脑一天天慢慢退化,忙于令人生厌的事情。这是当代科技出现之前的遗留问题。 如果你的软件让别人失业了(感谢spring指正),你不是在作恶。你在创建一种激励机制,让他充分利用他那美丽而又充满能量的大脑。你正在给他一个更好的机会充实自己的生活,使之与众不同。如果你不这么做,毫无疑问,终有一天会有人这样做。 ...

十二月 16, 2013

WebSocket入门和应用

WebSocket介绍 WebSocket是一种协议,本质上和http,tcp一样。协议是用来说明数据是如何传输的。它的url前缀是ws:// 或者wss://,后者是加密的websocket。WebSocket没有试图在HTTP之上模拟server推送,而是直接在TCP之上定义了帧协议,因此WebSocket能够实现全双工通信。 WebSocket是HTML5开始提供的一种浏览器与服务器间进行全双工通讯的网络技术。 WebSocket通信协议于2011年被IETF定为标准 [RFC 6455][1],WebSocketAPI被W3C定为标准。 WebSocket解决了web实时化以及服务器端推送的问题,相比传统http有如下好处: 一个WEB客户端只建立一个TCP连接 Websocket服务端可以推送(push)数据到web客户端. 有更加轻量级的头,减少数据传送量 更详细内容请移步[维基百科][2] ...

十一月 7, 2013