摘要:
郑昀20101213Hacker News是Y Combinator旗下的一个新闻频道,属于digg类产品,SEOmoz曾经在2008年7月隆重推出Reddit、Stumbleupon、Del.icio.us和Hacker News算法全揭秘。由此,这些知名Web2.0网站的算法浮出水面。谷文栋曾在2009年时如下讲述了Hacker News的Ranking算法:(p – 1) / (t + 2)^1.5其中,1)p 表示文章得到的投票数,之所以要使用 (p – 1),应该是想去掉文章提交者的那一票。2)(t + 2)^1.5, 这个是时间因子。t 表示当前时间与文章提交时间间隔的小时数。但为 阅读全文
摘要:
作者:阮一峰日期:2012年2月24日互联网的出现,意味着"信息大爆炸"。用户担心的,不再是信息太少,而是信息太多。如何从大量信息之中,快速有效地找出最重要的内容,成了互联网的一大核心问题。各种各样的排名算法,是目前过滤信息的主要手段之一。对信息进行排名,意味着将信息按照重要性依次排列,并且及时进行更新。排列的依据,可以基于信息本身的特征,也可以基于用户的投票,即让用户决定,什么样的信息可以排在第一位。下面,我将整理和分析一些基于用户投票的排名算法,打算分成四个部分连载,今天是第一篇。一、Delicious最直觉、最简单的算法,莫过于按照单位时间内用户的投票数进行排名。得票 阅读全文
摘要:
在Quitting an application - is that frowned upon?中,很多人探讨了android中退出app的问题,Google官方是这样说的:Question:Does the user have a choice to kill the application unless we put a menu option in to kill it? If no such option exists, how does the user terminate the application?Answert (Romain Guy):The user doesn' 阅读全文
摘要:
我们看到很多Android应用都具有自动更新功能,用户一键就可以完成软件的升级更新。得益于Android系统的软件包管理和安装机制,这一功能实现起来相当简单,下面我们就来实践一下。首先给出界面效果:1. 准备知识在AndroidManifest.xml里定义了每个Android apk的版本标识:<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.myapp" android:versionCode="1" andro 阅读全文
摘要:
问题某海量用户网站,用户拥有积分,积分可能会在使用过程中随时更新。现在要为该网站设计一种算法,在每次用户登录时显示其当前积分排名。用户最大规模为2亿;积分为非负整数,且小于100万。PS: 据说这是迅雷的一道面试题,不过问题本身具有很强的真实性,所以本文打算按照真实场景来考虑,而不局限于面试题的理想环境。存储结构首先,我们用一张用户积分表user_score来保存用户的积分信息。表结构:示例数据:下面的算法会基于这个基本的表结构来进行。算法1:简单SQL查询首先,我们很容易想到用一条简单的SQL语句查询出积分大于该用户积分的用户数量:select 1 + count(t2.uid) as ra 阅读全文
摘要:
简单基站定位程序介绍了如何获得当前的基站位置,写得详细。下面简单概括一下:在Android操作系统下,基站定位其实很简单,先说一下实现流程:调用SDK中的API(TelephonyManager)获得MCC、MNC、LAC、CID等信息,然后通过google的API获得所在位置的经纬度,最后再通过google map的API获得实际的地理位置。MCC,Mobile Country Code,移动国家代码(中国的为460);MNC,Mobile Network Code,移动网络号码(中国移动为00,中国联通为01);LAC,Location Area Code,位置区域码;CID,Cell I 阅读全文
摘要:
关于“点九”智能手机中有自动横屏的功能,同一幅界面会在随着手机(或平板电脑)中的方向传感器的参数不同而改变显示的方向,在界面改变方向后,界面上的图形会因为长宽的变化而产生拉伸,造成图形的失真变形。android平台有多种不同的分辨率,很多控件的切图文件在被放大拉伸后,边角会模糊失真。在android平台下使用点九PNG技术,可以将图片横向和纵向同时进行拉伸,以实现在多分辨率下的完美显示效果。“点九”是andriod平台的应用软件开发里的一种特殊的图片形式,文件扩展名为:.9.png【普通拉伸和点九拉伸效果对比】对比很明显,使用点九后,仍能保留图像的渐变质感,和圆角的精细度。 从中我们也可以理解 阅读全文
摘要:
不像其他广播包,Intent.ACTION_SCREEN_OFF 和Intent.ACTION_SCREEN_ON不能在manifest中申明,需要用代码注册。Receiver代码如下:public class ScreenReceiver extends BroadcastReceiver { // thanks Jason public static boolean wasScreenOn = true; @Override public void onReceive(Context context, Intent intent) { if ... 阅读全文
摘要:
现在的不少应用都用到了摇动手机改变内容的功能,比如微信中的“摇一摇”功能。前两天要实现这个功能,稍微看了一下关于传感器Sensor的内容。传感器有几种类型: 方向传感器: Sensor.TYPE_ORIENTATION 加速度(重力)传感器: Sensor.TYPE_ACCELEROMETER 光线传感器: Sensor.TYPE_LIGHT 磁场传感器: Sensor.TYPE_MAGNETIC_FIELD 距离(临近性)传感器: Sensor.TYPE_PROXIMITY 温度传感器: Sensor.TYPE_TEMPERATURE在摇动手机的功能中,我们只用加速... 阅读全文
摘要:
用ScrollView 覆盖原来的layout,如下:<?xml version="1.0" encoding="utf-8"?><ScrollView xmlns:android="http://schemas.android.com/apk/res/android" ... <!-- Your current layout here --></ScrollView>参见:Soft Keyboard comes over the EditText 阅读全文
摘要:
现在已经有了一个Android工程A。我们想扩展A的功能,但是不想在A的基础上做开发,于是新建了另外一个Android工程B,想在B中引用A。一个思路是把工程A做成纯Jar包,这样其他的工程就可以直接引用了。但是,如果在工程A中用了R.java中的引用,则无法打成jar包了。原因是R.java是自动生成的,是动态的,每次编译都是不相同的。如果一定要做成jar包,就不能使用自动生成的R文件,用到资源时候就要写代码去获取。另一个思路就是将工程A做成android library project。设置工程A,右键->Properties->Android,将Is library项选中,然 阅读全文
摘要:
为什么需要反馈Crash报告?做Android应用程序,要尽量避免程序Crash的发生。虽然说零Crash是程序员追逐的最终目标,但是现实的情况是,程序员只能尽量的减少Crash的发生,而几乎不可能完全杜绝Crash。也许,你认为你的应用的健壮性已经近乎完美,轻松的经受住了测试部门魔鬼般的考验,但是当你的应用发布到市场,面对百万甚至千万级别的用户的时候,可能就没有那么幸运了。基于以上原因,一般的应用程序,都要有一个Crash反馈的机制。程序员可以根据反馈的结果,对当前的版本的代码进行改进,使发布的下一个版本更加稳定。如何反馈?先来看如何捕获Crash的发生。Java中有一个接口,Uncaugh 阅读全文
摘要:
首先要说的是,用户可能把这种做法视为流氓软件。大部分时候,程序员也不想把软件做成流氓软件,没办法,领导说了算。我们在使用某些Android应用的时候,可能会发现安装了某应用以后,会有一些服务也会随之运行。而且,这些服务每次都会随着手机开机而启动。有的服务做的更绝,当用户停止该服务器以后,过了一段时间,服务又自动运行了。虽然,从用户的角度来说,这种方式比较流氓。但是,从程序员的角度来说,这是如何做到的呢?经过研究,我发现有一种方式是可以实现的。下面就和大家分享。先简单介绍,一会儿会贴上全部代码。如何做到开机启动?这个比较简单,网上的资料够多,只要实现一个BroadcastReceiver,监听手 阅读全文
摘要:
Android应用开发中, 有一种场景,就是我们不希望用户直接按Back键退出Activity,而是希望应用隐藏到后台,类似于按Home键的效果。下面提供代码示例,请参考。public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { Intent intent = new Intent(Intent.ACTION_MAIN); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);... 阅读全文