Nitro's

Mar 11, 2013 - Comments - dev tech

Android 图片缓存设计

Android ImageView绘制时由于网络的不稳定会造成图片加载失败或者加载很慢的情况,同时很多图片的重复下载也会造成数据流量的浪费,设计图片缓存可以很好的解决这些问题。 图片缓存主要有二级缓存,Memory Cache Pool为一级、File Cache为二级。 1、Memory Cache Pool 通过简单使用一个Hashmap来管理全局的内存图片缓存池,当然这个Hashmap要限定一定大小不能无限制增加,同时还要考虑缓存池的替换规则,简单的话就是随机剔除某一个或最后一个,精细化操纵可以加入先进先出或者最短时间使用等算法来维护缓存池,当然这也增加了缓存池设计的复杂度。 2、File Cache 在ImageView绘制图片时,首先检查Memory Cache是否存在此图片,如果有的话直接取出,如果不存在调用AsyncTask或者Thread来加载图片。在这其中首先要先检查本地缓存文件,如果存在直接调用BitmapFactory.decodeFile()读取;如果不存在,发起http请求下载图片,并按照规则定义放入文件缓存,同时加入内存。 示例代码: 异步请求网络图片,下载完成后,加工处理,加入文件缓存 class GetNetPic extends AsyncTask<URL, Void, String> { private File path; private int widthHeight; /** * @param imageview * @param path * @param imageSize */ public GetNetPic(File path, int widthHeight) { this.path = path; this.widthHeight = widthHeight; } @Override protected String doInBackground(URL... params) { String name = File2Object.netImg2File(params[0], path); if (name == null) { return null; } String source = name.

Mar 11, 2013 - Comments - dev tech

Android 三屏左右滑动切换的实现

实现原理: 将三个界面放置于FrameLayout中,默认显示当前主页面,左(右)滑动,显示左(右)辅页面,隐藏右(左)辅页面,根据滑动距离 重绘主页面在屏幕的位置。当用户滑动停止抬起手指时,判断总计滑动距离,若大于屏幕宽度1/2,直接定位到主页面偏移结果位置处。 package com.n2hsu.n2flipper; import android.os.Bundle; import android.view.GestureDetector; import android.view.GestureDetector.OnGestureListener; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; import android.widget.FrameLayout; import android.widget.RelativeLayout; import android.app.Activity; public class MainActivity extends Activity implements OnTouchListener, OnGestureListener { private RelativeLayout mLeft = null; private RelativeLayout mMain = null; private RelativeLayout mRight = null; private GestureDetector mGestureDetector; // private int mWidth = 0; private int mHeight = 0; private final int mOverlapX = 100; private float mDistanceSum = 0; private final int mTimes = 2; @Override protected void onCreate(Bundle savedInstanceState) { super.

Mar 11, 2013 - Comments - dev tech

基于GAE的新浪微博 QQ空间 豆瓣 OAuth2.0 认证(待续)

-- coding: utf-8 -- from xml.dom.minidom import parseString from google.appengine.api import urlfetch from google.appengine.ext import db from xml.parsers.expat import ExpatError from oauth2 import * import os import jinja2 import urllib import urlparse import json import webapp2 site = {'douban':{'appID': '', 'appKey': '', 'code_url':'https://www.douban.com/service/auth2/auth', 'acc_url': 'https://www.douban.com/service/auth2/token', 'acc_method':'POST', 'me_url': 'https://api.douban.com/people/%40me'}, 'weibo': {'appID':'', 'appKey':'', 'code_url':'https://api.weibo.com/oauth2/authorize', 'acc_url':'https://api.weibo.com/oauth2/access_token', 'acc_method':'POST', 'me_url':'https://api.weibo.com/2/users/show.json'}, 'qq': {'appID':'', 'appKey':'', 'code_url':'https://graph.qq.com/oauth2.0/authorize', 'acc_url':'https://graph.qq.com/oauth2.0/token', 'acc_method':'GET', 'me_url':'https://graph.qq.com/user/get_user_info'}} HOST_ADDR = "http://www.example.com" rootpath = os.path.dirname(__file__) jinja_environment = jinja2.

Mar 11, 2013 - Comments - dev tech

基于GAE的OAuth2.0授权模块

Google App Engine 平台上OAuth2.0的Python实现。 与普通http请求授权不同,GAE平台上使用urlfetch作为http请求的封装,其他基本上相同。 新浪微博、腾讯Qzone、豆瓣网OAuth2.0 示例 # -*- coding: utf-8 -*- from google.appengine.api import urlfetch import uuid import urllib class OAuth2(): def get_authorization(self,appid,req_url,redirect_uri): req_const = dict(response_type='code', client_id=appid, redirect_uri=redirect_uri, state=uuid.uuid4().hex) const = urllib.urlencode(req_const) return str(req_url+'?'+const) def get_access(self,appid,appkey,method,code,acc_url,redirect_uri): acc_const = dict(grant_type='authorization_code', client_id=appid, client_secret=appkey, code=code, state=uuid.uuid4().hex, redirect_uri=redirect_uri) const = urllib.urlencode(acc_const) acc_url = acc_url+'?' try: if method == 'GET': return urlfetch.fetch(acc_url+const).content if method == 'POST': return urlfetch.fetch(url=acc_url, payload= const, method=urlfetch.POST, headers={'Content-Type':'application/x-www-form-urlencoded'}).content except urlfetch.Error: return acc_url

Mar 11, 2013 - Comments - dev tech

Python 网页解析笔记(一)

语言版本:Python 2.7 函数库:urllib2、chardet、BeautifulSoup 示例代码如下: import urllib2 import chardet from bs4 import BeautifulSoup data = urllib2.urlopen('http://www.nitrohsu.com').read() encodeStr = chardet.detect(a)['encoding'] soup=BeautifulSoup(data,from_encoding=encodeStr) print soup.prettify chardet是一个自动检测网页编码的函数,调用detect会返回一个字典: {‘confidence’: 0.99, ‘encoding’: ‘utf-8’} confidence是检测的正确率,encoding是网页编码的代码 在BeautifulSoup4之后构造函数的fromEncoding参数改为from_encoding,当然用前者也可以,只是出现警告而已。 在Python内部都是按照unicode来编码的,所以在获取一个非unicode编码的网页时首先要将编码转换如decode(‘gbk’),是将GBK转换为UTF-8编码。 Windows CMD下需要将代码页改为65001才支持UTF-8。但是在使用BeautifulSoup的时候在命令行回显时会出现IOError,但在Python IDE下没有问题。

Mar 10, 2013 - Comments - dev tech project

Do+微博2.x 更新日志

Google Play [ ](https://play.google.com/store/apps/details?id=com.n2hsu.doplus.weibo) 腾讯应用宝 2.4.2 修复评论跳转参数bug 优化界面设计 2.4 添加一键分享 剔除个人主页微博中的自动链接 添加更新提示 改进评论刷新 重新设计图片预览 2.3 修复URL转文件名bug 按钮添加反馈 完善反馈信息上送; 修复Post请求bug 清理无效字符串 2.2 添加下拉刷新功能 减小左右滑动误差 v1.5 增加离线阅读 重新设计UI点击体验 增加我的微博、评论、@我功能 增加消息推送 增加发微博时的@功能 v1.4 删除无效功能 全新的UI体验

Mar 10, 2013 - Comments - design repost

1月份最佳字体设计Top40

虽然不是每个人都做字体设计,但字体对于设计师来说却息息相关。字体设计者Sean Mitchell 公布了1月份的最佳字体,让我们来一同欣赏一下吧: Cultivated Mind: Amour A romantic handwritten retro inspired font. Sudtipos: Bellissima Script An effusive energy that appeals much beyond its sourcing. The Northern Block: Neusa A condensed geometric sans serif inspired by early space explorations including the iconic Life magazine coverage of the 1969 Apollo program. Emil Kozole: Attitude Inspired by Japan pop culture and American hip hop subculture. Latinotype: Trend A font made of layers, taking as a basis a sans and a slab font.

Mar 10, 2013 - Comments - design repost

2月份最佳字体设计Top32

虽然不是每个人都做字体设计,但字体对于设计师来说却息息相关。字体设计者Sean Mitchell 公布了2月份的最佳字体,让我们来一同欣赏一下吧: 1. Reserves: Acronym A highly refined neo-grotesque sans-serif based on Helvetica and its modern-day variants. 2. Hoefler & Frere—Jones: Landmark The signature alphabet of one of New York’s most significant buildings becomes a family of clear and colorful display fonts. 3. Letters from Sweden: Kumla Letters from Sweden’s first release in the “Fabrik Suite” — a project inspired by Swedish industry, factories and harbours. 4. Aesthetic Apparatus: Brass Rule Script A geometric upright script constructed in the vein of the experimental “brass rule letters” from the 1952 German typography book Hoffmann’s Schriftatlas, combined with mid-century commercial chrome emblems.

Feb 25, 2013 - Comments - hot translate

LG收购webOS用于新一代智能电视

LG今天宣布从HP收购webOS的全部资产,这将会为webOS翻开崭新的一页。 CNET最先报道了此消息。2011年8月HP放弃开发webOS软件和设备。虽然支持它的手机、平板电脑极其少,HP还是发布了开源平台希望开发者能够挽救这一广受称赞的软件。 LG宣布收购webOS的源码、文档以及webOS官方站点,还获得了HP 2010年收购Palm时的专利授权许可。 LG 将在新一代智能电视中使用webOS,这能够增强与三星以及其他竞争对手的优势。LG在2007年发布了它第一款智能电视,它包含有App应用、手势、桥接连接多屏等技术。 比较悲剧的是,LG没有计划把一个webOS打造成智能手机操作系统平台。 LG电子的CFO Skott Ahn说: ”LG会打造更加直观的用户体验、同时为消费电子产品提供更广泛的互联网服务。” LG将会把webOS团队搬到位与桑尼维尔和旧金山的新实验室-Silicon Valley实验室,在那里与LG的美国团队一块协作办公。 原文链接:http://thenextweb.com/asia/2013/02/25/lg-acquires-webos-source-code-and-patents-from-hp-will-live-on-in-new-smart-tvs/