Nexus One入手之软件篇(一)

Number of View: 529

好吧我承认我懒得更新= =五一在宿舍宅了两天看了一堆电影,我就不忏悔了。昨天夜里11点左右下雨了,下之前还轰隆隆的打了一阵雷,要不是爬上床之后听见雨声我还以为我之前是幻听。这两天实验室正下方不知道施工在干啥,整天的拿电钻钻天花板,时不时的来场震动的惊喜(正写着呢又来了…)。

废话说完了来进入正题。以下是android app之五星赞美list~

1. Live Wallpaper

snap20100407_203736 snap20100504_173722
N1自带的这两个动态壁纸都非常的不错,加上后来更新的gmaps动态壁纸,算起来只有这三款支持触摸反馈。左边是默认的Nexus,触摸时会在触摸点生成新的射线;右边是Water,水面会在触摸点处向外扩散生成波纹。

2. 3D Gallery

snap20100504_175805 snap20100504_175611
Gallery的3D效果基本上和Firefox上的Cooliris差不多,很炫目。我喜欢的几个小特性一是在触摸相册中的某个图片时,整个galley的背景就会变成该图片的模糊化色调;二是长按选定功能。总的来说它确实是一个既美观又实用的app。

3. Widget

桌面上怎么能少了漂亮又方便的widget呢,我用的widget主要有以下几款:

  • Google search,必备,平时都通过它来启动app或定位文件
  • Agenda Widget,这个日历widget比默认的Google Calendar更漂亮,并且有多种size可供选择
  • Google buzz,虽然不常用buzz,但是这个widget做的实在让人流口水啊….
  • Google Latitude,列出最近更新了latitude的好友位置
  • Digital Clock,默认的Clock widget上面不显示数字的,这是一个iphone风格的数字时钟
  • Power Control,必备,可控制wifi,gps,sync,bluetooth等的开关
  • Mini Info Widget,3*1,显示目前系统信息,如电池剩余量,ROM和SD卡使用状况等
  • Seesmic,Seesmic什么时候开始支持widget的我都不知道,今天才发现= =。
  • APNDroid,APN开关,控制流量使用
  • AdvancedTaskKiller,系统缓慢的时候按一下释放内存。

snap20100504_192453 snap20100504_192443 snap20100504_192447

4. 豆瓣电台(douban.fm)

snap20100407_202802

豆瓣不久前推出了豆瓣电台的iphone版和android版app,特点是界面简洁大方,非常有简约美。上图的界面触摸后有一个翻转效果,背面会显示出专辑的信息和评级。它还支持shake skip特性,直接摇一下手机就可以skip掉当前的歌曲啦。

5. iReader

snap20100504_195610

iReader是一款电子书阅读app,我主要用它看小说= =iReader的功能全面,设置项十分丰富。可设置背景,翻页时间动作方向,界面风格,显示等等。支持书签,多种字符编码,搜索,重力感应等特性。最方便的一点就是打开某本书时默认就是上次读到的进度,基本上都不用自己刻意去设置书签。

6. Ringdroid

snap20100407_203948

Ringdroid用于编辑音乐并保存为系统铃声。我主要用它来截断某首歌的前奏(比如《生生世世爱》= .=)。这个app用起来很方便,只要拉动左右两根分界线来截断曲子的某部分就可以了~

7. MovieFinder

snap20100407_203902 snap20100407_203826 snap20100407_203851

MovieFinder通过你的Location来收集附近的影院信息,提供正在上映的电影的列表。值得一提的是它的电影的rating使用的是google rating,但是同时在每部电影下附上了豆瓣、google rating和imdb的链接。有些挫电影的google rating可能还不错的,所以还是check一下豆瓣比较保险。每部电影后面都附有附近影院的放映场次,还提供到影院位置和联系方式。这款app从功能到设计都无可挑剔。

8. Seesmic

snap20100407_203655

其实一开始还是随大流用的twidroid,不可否认的是twidroid功能的确是最全面最丰富的一个,但是用户体验方面还是有所不足的。有一点让我很不爽就是twidroid的发推按钮十分的小,每回都要多按几次才能发成功,包括刷新按钮也经常按了没反应。这两个按钮偏偏又是最常用的,搞得我很悲愤。

后来陆续试了twigeeSeesmic。twigee功能比较简单,胜在界面简洁易用。Seesmic的界面设计可以看出是下了功夫的,home,reply,message和profile都是用的tab显示,很醒目很好切换。refresh按钮就在最新推的上方,与list item等宽,百发百中,不存在按不到的情况。并且设想很周到的一点就是按上方的红色横条就直接到达最新推,这样向下回溯旧推完了以后就可以方便地回到最新推的位置了。这几个设计真是太赞了。Seesmic这次更新以后开始支持官方RT,geotag和widget,功能比twidroid是不遑多让,尤其widget是twidroid pro才支持的。

话说最近又出了那啥的官方客户端,悲愤的是不支持API,无福享受啊。

9.PlacesDirectory

snap20100504_205909snap20100504_205922snap20100504_205857snap20100504_210031

介个就是Google的Places Directory,涵盖了附近所有场所的位置、图片、联系方式等信息,加上GPS精确定位,简直就是户外神器啊。不过Maps比较耗流量,非联通3G包月用户在非wifi环境下慎用。

10.WordMate

snap20100407_204157

WordMate是一款字典软件,自带DictDownloader可以下载很多字典。重要的是它支持stardict使用的字典格式,是不是意味可以直接从stardict官网下载一些dictdownloader中没有的字典用,这个还没试验过~字典list里面居然还有个Dict of Computing,囧,上图就是Python的解释。

该赞美的赞美的差不多了,今天写不完全部了,下次写四星推荐和三星鸡肋~

  • Share/Bookmark

Nexus One入手一月小记——硬件篇

Number of View: 401

N1入手快一个月了,对入手过程感兴趣的童鞋请看这里。想必大家都比较关心使用情况,我就分以下几个方面说一说吧~

  1. 触摸屏
    在入手之前最关心的就是触摸屏问题了,估计大家对N1屏幕的负面新闻已经能倒背如流了= =
    入手之后第一件事情就是给它贴膜,对于几种贴膜的好坏机锋网论坛上有讨论,综合个方面因素选择了BENKS的AR膜,前面和后边镜头都贴上了,当然不贴估计也没啥问题,这个看个人习惯了。
    从灵敏度上来说,N1的屏幕真的是perfect,基本上轻轻一touch就ok了,而且屏又大,touch起来真的不是一般的爽,多点触摸也很正常,没有网上传的这样那样的问题。对于传说中的屏幕漂移(就是touch到屏幕边上会反飘到另一边),我只在一种情况下经历过,就是躺床上玩机的时候。说到卧着玩N1,我真的是不推荐,理由有如下几个:1. N1真的是太大了,平时站着单手玩都嫌费劲,不要谈躺着了,但是躺着双手玩,必定有一只胳膊会很酸,这个实在是没有办法> < 2. 躺着的情况下屏幕灵敏度会降低很多,经常出现touch半天没反应的状况。经过我多次把玩发现,N1的屏幕不仅对接触到面上touch的力度敏感,它对整机的握力也很敏感,躺着玩的时候,必定在机身边缘会多着力,在这种情况下触屏的功能就明显受到影响,屏幕漂移只是其中表现的比较明显的一个问题而已,重力感应也经常不起作用。当然如果你直接趴着玩是不会有什么问题的= =
    那么站着玩N1是否屏幕就百分百没有失常的时候了呢?答案是否定的,在某些时候会出现touch感应下漂的状况,比如你按的明明是上边一个icon,它给感应成下边那个了,这时候只要锁屏再解锁就ok了。但是我想强调一下这种情况只是偶然发生,并不影响正常使用。
  2. 轨迹球
    平时基本不用轨迹球,但是看电子书翻页的时候用它还是很方便的。结果有几天用多了,然后向下的那个方向不灵光了,囧。然后某天由于解锁bootloader和取Root权限的时候长按了几下,结果发现轨迹球又回复正常了,大囧。所以大家如果发现不灵光了可以试试长按这个办法….
  3. 耳机
    这个耳机+线控真的很鸡肋,不过好在是通用的3.5mm插孔,所以大家可以随便配自己喜欢的耳机就OK啦。不过我真的不明白为什么线控没有调节音量功能(听说G3的也没有),还有就是话筒为什么是分离开来的,那个话筒那么小,也太容易丢失了,所以我直接搁盒子里没有用过。

总体来说对于硬件方面还算满意,尤其是屏幕尺寸,因为偶的手比较大,所以就想要一个屏大的,厚度也很薄,虽说颜色不太适合MM用,不过就当作别样的帅气好啦,而且白色也容易脏的说。就是虚拟键盘不太习惯,我一般打字的时候还是喜欢横屏,因为横屏的键比竖屏的时候要大一些,不容易按错,其实还是因为手大=.=

今天先就写硬件篇吧,敬请期待软件篇^^

  • Share/Bookmark

Wifi Setup under Archlinux

Number of View: 343

实验室有wifi,上次以为是wep加密,结果弄了半天都invalid arguments,这次仔细看了下原来是WPA,参照ArchWiki搞定。
1. Check wpa_supplicant

# wpa_supplicant
...
drivers:
  wext = Linux wireless extensions (generic)
  nl80211 = Linux nl80211/cfg80211
  wired = wpa_supplicant wired Ethernet driver

2. Configure WPA with ssid(here mywireless) and key(here secretpassphrase)

# mv /etc/wpa_supplicant.conf /etc/wpa_supplicant.conf.original
# wpa_passphrase mywireless "secretpassphrase" > /etc/wpa_supplicant.conf
# vim /etc/wpa_supplicant.conf
network={
        ssid="mywireless"
        #psk="secretpassphrase"
        psk=****************************
}

Add this line to the conf file

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=wheel

3. Start WLAN

# ifconfig wlan0 up
# iwconfig wlan0 essid mywireless
# wpa_supplicant -B -Dwext -i wlan0 -c /etc/wpa_supplicant.conf
# dhcpcd wlan0

4. Check wlan0

# ifconfig wlan0
wlan0     Link encap:Ethernet  HWaddr 00:22:FA:5F:7F:66
          inet addr:192.168.1.122  Bcast:255.255.255.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:576  Metric:1
          RX packets:73529 errors:0 dropped:0 overruns:0 frame:0
          TX packets:59186 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:39228330 (37.4 Mb)  TX bytes:6663024 (6.3 Mb)

然后ping外面ping不通,发现是从eth0 ping出去的,执行/etc/rc.d/network stop把eth0上的网络关掉就可以了.

@————————————————我是泪的分割线—————————————@

SteamedFish童鞋的教导下,我学习了netcfg的用法,深深地认识到了自己的错误。。。。

1. 创建netcfg profile

# cp /etc/network.d/examples/wireless-wpa /etc/network.d/
# vim /etc/network.d
CONNECTION='wireless'
DESCRIPTION='A simple WPA encrypted wireless connection'
INTERFACE='wlan0'
SECURITY='wpa'
ESSID='mywireless'
KEY='secretpassphrase'
IP='dhcp'
# move /etc/network.d/wireless-wpa /etc/network.d/[profilename]

2. Start network

# netcfg [profilename]
  • Share/Bookmark

Linux下教育网访问国外网站

Number of View: 386

开学了,又回到了教育网,访问国外网站的问题依然头疼。下面介绍几种在Linux下轻松访问国外网的方法。

  1. 搜狗浏览器

    最广为使用的就是搜狗浏览器的全网加速功能了,当然,在Linux下必须要使用wine运行搜狗浏览器。然后设置代理服务器为127.0.0.1:8081就可以使用搜狗浏览器的教育网代理来访问国外网站了。
    该方法的优点是支持https加密连接,缺点是速度慢,天生不兼容于Linux环境,容易死机等等。

  2. ipv6 + google cache

    教育网默认是开通了ipv6的,Linux下ipv6配置见 Linux IPV6 HowTo。使用http://ipv6.google.com访问google,搜索结果的页面可以直接从网页快照中读取,在搜索一些问题的答案时十分方便。

  3. ipv6 gateway — sixxs.org

    配置好ipv6后即可直接访问sixxs.net/gateway,找到How to use IPV6 gateway,在此处
    sixxs ipv6 gateway
    输入要访问的网址即可。需要注意的是该方法并不支持https。

  4. Opera Turbo

    Opera10.10及以后版本开始提供Opera Turbo功能。 无论是教育网还是联通电信,Opera Turbo 都通过服务器压缩提速,加快网络体验。由于国内有Opera Turbo服务器,因此开启Turbo之后可以直接访问国外网站。开启方法是点击左下方的Opera Turbo图标,设置Turbo状态为On。
    opera turbo
    由于对图片进行压缩,因此在加快浏览速度的同时图片分辨率会变小,此时右击图片,选择Reload Image in Full Quality即可浏览原始图片了。
    此方法由于采用Turbo技术压缩数据,访问速度非常快,但遗憾的是也不支持https。

  • Share/Bookmark

List performance: Python vs Java

Number of View: 514

这篇post的主要由来是某次算法作业误用Python做了无用功,性能完全达不到要求,后来换用Java才搞定。作业是一个经典的算法问题:求最近点对,要求的输入数量级达到百万。Java做出来的结果大约是5秒左右,Python的话就完全废了,原因是其中涉及到庞大的list的new操作。

Python list VS Java array

首先做一个简单的实验,分别计算用Python和Java新建一个list的时间。

Python代码:

li = []
for i in range(size):
    li.append(0)

Java代码:

int[] li = new int[size];

结果对比如下:

sizePython(ms)Java(ms)
100.0120.002
1000.0450.002
10000.3470.005
100004.0110.034
10000034.5410.304
1000000353.4203.749

二者的时间复杂度都是O(n),但在常数上相差两个数量级。究其原因,
The time needed to append an item to the list is “amortized constant”; whenever the list needs to allocate more memory, it allocates room for a few items more than it actually needs, to avoid having to reallocate on each call (this assumes that the memory allocator is fast; for huge lists, the allocation overhead may push the behaviour towards O(n*n)).
也就是说,Python中list的append操作仅当空间不够时才另分配一块新的空间,根据平摊分析(Amortized Analysis)原理,创建一个长度为n的list的时间为c*n(c为平摊常数)。而Java的数组的new操作是一次分配一整快空间,这就不难解释为何两者的性能差异如此之大了。

For loop vs List comprehension

实际上,Python提供了另一种更快地创建list的方法:List Comprehension。List comprehensions run a bit faster than equivalent for-loops (unless you’re just going to throw away the result).

li = [ 0 for i in range(size) ]
sizeappend(ms)list comprehension(ms)
100.0120.009
1000.0450.026
10000.3470.214
100004.0112.228
10000034.54121.701
1000000353.420221.127

Python list vs Java Vector

Python的list与Java的Vector有些类似,再做一个对比:

Vector list = new Vector();
for(int i=0;i<size;i++)
    list.add(i)

sizePython list(ms)Java Vector(ms)
100.0120.741
1000.0450.778
10000.3471.1108
100004.0113.6601
10000034.54121.008
1000000353.42081.820

在默认构造函数中,Vector的初始存储能力是10个元素,如果新元素加入时存储能力不足,则以后存储能力每次加倍。每次扩展存储能力时,所有现有的元素都要复制到新的存储空间之中。add操作有可能做了额外的优化,因为时间复杂度曲线并非纯线性的。

总之,在注重性能并需要多次创建较大的list的应用中,Python并不适用。

注:实验环境:
软件:Archlinux(Kernel2.6.32)+Python2.6.4
硬件:CPU 2Ghz*2,RAM 2GB

Refrence:
1. An Introduction to Python Lists
2. PythonSpeed/PerformanceTips

  • Share/Bookmark
Page 1 of 212