ss1271's Site

风餐露宿,不可一日无码.

[译]黑莓10技巧放送——BlackBerry Z10的手势功能

| Comments

从今天开始我将从官方的BlackBerry Help Blog里挑出给BlackBerry 10系统的技巧翻译并转发出来,本系列的文章的所有图片如果没有特别说明,均引用自原文blog。 —–那么,下面开始咯: 欢迎各位来阅读本期使用技巧,本次将要介绍的是使用Z10的五种基本手势,掌握这些手势操作将会给您日常使用手机带来极大的便利。 操作键盘的一些手势 下面列出了操作键盘的几种手势,当然您也可以对您的软键盘输入法进行个性化定制,具体请参考我们以前发布的文章:自定义BlackBerry 10软键盘
  • 显示键盘 – 使用双指从屏幕底部向上划一下即可,或者找个文本框点一下,键盘也会弹出来
  • 收起键盘 – 双指从键盘顶部向下划一下,或者长按空格键
  • 删除一个单词 – 从右向左划过键盘,如果您使用的是从右向左书写的语言(比如阿拉伯语),将手势反方向操作,即从左向右划过键盘
  • 在字母数字和符号之间切换 – 单指由键盘顶部向下划即可切换这三种输入方式
在日历程序中 – 双指捏合缩放(就是手机最常见的双指缩放操作啦)   快速选择文字

解决BlackBerry Cascade QDE的QML Preview Compatibility Check Failed问题

| Comments

最近在折腾BlackBerry 10 Native SDK (BB NDK),除了我家网络不给力下了四遍都是MD5校验和官网对不上之外,遇到的最恶心的问题就是安装完成之后的Momentics (QDE)不可以打开QML文件的图形化预览,也就是说你得用纯代码编界面不能拖拽只能干看着你IDE里的图形控件YY。 问题的现象是报错:
QML Preview compatibility check failed. QML Preview is disabled. Error: This Java instance does not support a 32-bit JVM. Please install the desired version. Process exited with code: 1
在遇到这个问题之后,用了Google,发现很多人被这个问题所困扰,而导致此问题的原因也大致归结如下:
  • Mac下JVM不能用32bit模式导致此问题
  • 显卡驱动问题(多见于Windows和Linux平台)
  • NDK文件安装包损坏(是的,文件损坏可以让你正常安装正常运行但是就是不能开QML预览)
我只有显卡驱动这个问题没有遇到过,其余的两个都碰到了,下面说一下解决方法:
  1. 删掉你已经安装好的NDK,用卸载程序卸载(一定注意啊,如果安装的时候装错装到根目录,那么这个卸载程序执行的可是rm -rf,也就是说如果你装错到根目录,会把你根目录的其他东西一并抹掉)
  2. 删掉你安装的Java 1.7(Oracle的那个)
    • /Library/Java/JavaVirtualMachines/
      里删除 jdk 1.7的那个文件夹
    • /Library/Internet Plug-Ins
      中删除
      JavaAppletPlugin.plugin
  3. 确认你的环境变量(PATH Variable)设定正确,可以简单地在终端输入 java -version 来看是否设定为Java 1.6(Apple的那个)
  4. 重新安装你的BlackBerry 10 NDK,一定一定注意检查你下载回来的NDK包的MD5是否与官网一致
  5. 在Momentics (QDE)的Preference-BlackBerry-QML Editor下取消disable QML Preview的勾,然后重新打开qml文件,应该有图形预览出来了

Google Maps Android API V2裏面的種種坑

| Comments

(圖片來源 Google Developers: Google Maps Android API v2) 最近在折騰Google Maps Android API v2,也就是Android上的MapView啦,有幾點我覺得需要注意一下,因爲很坑人而且排查起來頗爲耽誤時間。
1、請確信您在API Console裏面選對了Google Maps Android API v2而不是別的
Google API Console裏面有GoogleMaps API v2和GoogleMaps Android API v2兩個選項,給android上面用當然要選帶有Android的啦,不要選錯。
2、在申領API Key的時候一定一定請注意你的指紋簽名用的是哪個證書的
一般來說給Android程序的簽名要用到兩個證書,一個是你插上手機調試用的debug,另一個是你發佈程序的時候自己創建的release key。因爲有了這個區別,所以在獲取Maps API Key的時候就需要獲取兩份,用debug fingerprint拿一份,開發完畢后再用release的拿一份,然後修改相應的程序部分。 獲取debug certificate fingerprint:
keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android
獲取release certificate fingerprint
keytool -list -v -keystore your_keystore_name -alias your_alias_name
這個的相關說明請參考: Displaying Certificate Information 下面的子條目:
  • Displaying the debug certificate fingerprint
  • Displaying the release certificate fingerprint

DroidCon UK 2012 – Memory Analyzer: Avoiding Memory Leaks

| Comments

Session 1: The Fragment Transition by Corey Latislaw Session 2: Picking up the Pieces – Overcoming Devices Fragmentation by Jan Berkel & Jon Schmidt Session 3: Who Needs Thumbs? Android Instrumentation and Reverse Engineering by David Teitelbaum Session 4: Beaming Data to Devices with NFC by Mark Murphy Session 5: Memory Analyzer: avoiding memory leaks by Felipe Ferraz Session 6: Deep Dive into Android Custom Components by Chiu-Ki Chan Session 7: Fast, user-friendly and power-efficient network communication on Android by Erik Hellman Session 8: Developing for Android on 2.x/3.x/4.x by Kenichi Kambara Session 9: Crash Reporting Trends for Mobile App Developers by Andrew Levy Session 10: Android Layouts by Mark Allison 本节主要讲解了一些有关如何避免出现内存泄漏的技巧。 大致总结出来这些
  • 在可能的内存泄漏(比如说在抛出异常之前)之前使用dump the process和 Runtime.getRunTime().freeMemory()查看内存使用情况,freeMemory()方法会返回当前空余内存。 
  • 使用Eclipse中自带的MAT分析内存使用情况,关于这个工具的使用方法,在Android Developers Blog这里有介绍。
  • 使用onDestroy()方法来避免产生相同的实例
  • 如果之前有分配过drawables资源,记得最后一定release (比如把这些drawable赋值为null)
有关本节及其Q&A部分录音,请参见这里  

2012年终,2013年始

| Comments

2012年大事记

1月

一次就是两辆警车哟 From Blogpost

15日,因为邻居轰趴忍无可忍,在英国第二次报警,这次靠警察顺利平息此事件。

一楼被破坏的房门之一 From Blogpost

27日,原签证到期,当晚7点左右家里被盗,我个人损失XBOX360 Slim 250GB一台,MacBook Pro 13一台,Nexus S一台, Palm Pre 2一台;

2月

不列颠流水帐(1)–英国购车须知及庭审纪实

| Comments

[caption id=”” align=”aligncenter” width=”411”] Magistrates’ Court[/caption] 作为2012年在威尔士的最后一个晚上,我想来想去还是写了这样一篇算是警示作用的文章,作为之前一段往事的总结,也作为不列颠流水帐系列文章的一个开篇。

买车篇

我不算老司机(是的拿本6年不算老司机),所以具体怎么挑车这种纯凭经验值的东西我提供不了,我只能提供一些手续方面的资讯,防止你无意中钻了空子或者花了冤枉钱。 买车必须知道的: 英国不区分交警还是刑警。所以被偷被抢了请找POLICE,撞车撞树欺实马了POLICE会找你。
  • DVLA:全称Driver and Vehicle Licensing Agency,可以粗略理解为“车管所”,但是办事的可不是警察。
  • V5C/小绿条:这是说明你负责给车交税的文本,注意这不是车主证。购车交易的时候原车主会从他的V5C上撕下“小绿条”也就是V5C的一个附件:New Keeper Details交给你。
  • 保险:英国保险是强制而且非常严格。保险既跟车也跟人。举例:A把车卖给B,此时A于此车挂钩的保险还没有过期,意味着这辆车是在保的。但是B不购买和此车挂钩的保险是不能开上路的,因此无论你有什么理由,抓到就是6分+罚款。考虑到在英国考出的驾照第一年只有6分,这算是重罚。
  • 路税:这个不用说了,哪里都需要纳路税的。 MOT:相当于车检。只有新购买的车注册后头三年是不用MOT的,往后就必须每年检一次,MOT fail是不能上路的。
  • HPI:购买二手车的时候如果超过价值£1,500或者任何觉得有蹊跷的情况下,个人推荐还是做一下HPI。HPI报告里可以显示车是否仍处于贷款状态、是否出过事故,是否是拼凑车、是否改过里程等等。一般HPI Clear意思是此车童叟无欺的意思。请注意HPI只能说明此车的历史是不是干净,并不能作为车况的判定依据。
  • 车牌/车的年份:这个其实算是一个小知识。英国的车牌只要不是个性化了的,是直接可以判定出车的注册年份的。规律大致如下: 车牌分两类:

Windows Phone自定义相机图片旋转问题

| Comments

昨天遇到一个问题一直悬而未决到今天: 首先,相机获取的原始相片是Landscape的,按照官方文档的说法,方向是快门按键处于右上方,听筒向左这样一个方向拍出来的照片。说白了就是相片逆时针90度。因为我的程序需要获取的是Portrait(竖着的)相片,所以需要有一步旋转,并且还要做缩放以使得图片可以完整显示在指定的容器内。 C#下用RotateTransform旋转图片的时候会遇到莫名其妙的图片切割(StackOverflow上的问题描述以及一种解决方案见此,此方案适用于容器原点和图片原点不一致的情况),也就是说图片旋转完成之后不是完整的图片,会被容器切割,而且因为原点的问题,会导致你得到的结果完全不像单纯转了一下图片,然后发现图被Crop了。 比如我取景是这样(不要误会,这是公司的Lumia 800):

Windows Phone上奇怪的OutOfMemory Exception

| Comments

最近在步履维艰地做Windows Phone上的开发工作。 按道理说C#这种东西没什么难点,语法什么的是从Javascript,Java以及C++拼凑出来的,外加配合Silverlight进行各种图形化的布局设计,应该是可以和堆积木一般轻松做出程序的。 事实哪有那么简单。我感觉我被C#和微软几乎和白纸一样的API文档狠狠坑了一笔。 撇开吐槽,先看看我最近几天遇到的奇葩问题之一:OutOfMemory Exception

DroidCon UK 2012 – Beaming Data to Devices With NFC

| Comments

Session 1: The Fragment Transition by Corey Latislaw Session 2: Picking up the Pieces – Overcoming Devices Fragmentation by Jan Berkel & Jon Schmidt Session 3: Who Needs Thumbs? Android Instrumentation and Reverse Engineering by David Teitelbaum Session 4: Beaming Data to Devices with NFC by Mark Murphy Session 5: Memory Analyzer: avoiding memory leaks by Felipe Ferraz Session 6: Deep Dive into Android Custom Components by Chiu-Ki Chan Session 7: Fast, user-friendly and power-efficient network communication on Android by Erik Hellman Session 8: Developing for Android on 2.x/3.x/4.x by Kenichi Kambara Session 9: Crash Reporting Trends for Mobile App Developers by Andrew Levy Session 10: Android Layouts by Mark Allison 本节主要讲述利用NFC(Near Field Communication,近场通讯)技术进行数据分享。

DroidCon UK 2012 - Picking Up the Pieces – Overcoming Devices Fragmentation

| Comments

目录

Session 1: The Fragment Transition by Corey Latislaw Session 2: Picking up the Pieces – Overcoming Devices Fragmentation by Jan Berkel & Jon Schmidt Session 3: Who Needs Thumbs? Android Instrumentation and Reverse Engineering by David Teitelbaum Session 4: Beaming Data to Devices with NFC by Mark Murphy Session 5: Memory Analyzer: avoiding memory leaks by Felipe Ferraz Session 6: Deep Dive into Android Custom Components by Chiu-Ki Chan Session 7: Fast, user-friendly and power-efficient network communication on Android by Erik Hellman Session 8: Developing for Android on 2.x/3.x/4.x by Kenichi Kambara Session 9: Crash Reporting Trends for Mobile App Developers by Andrew Levy Session 10: Android Layouts by Mark Allison 这一部分Session是由来着SoundCloud的两位开发者介绍他们在处理多设备兼容问题上的经验,除了开头一些是介绍SoundCloud的程序构架之外,其中更有一些具体他们如何处理兼容问题的代码,对于音频应用的开发者来说颇具价值。