用户在线数据的安全与隐私是一个越来越敏感的问题。而Mozilla在获取更多用户数据的同时,将会如何应对这一问题?国外科技媒体ReadWriteWeb对这一问题给出了解答。请看下面的文章:
Mozilla在2012年有个大计划。这个非营利开源组织将在Firefox中增加一些新的特性,这对于用户数据需要更大存取权限。在一篇博文 中,这个组织解释了它将如何使用这些数据。简而言之,就是:小心又小心。
Mozilla的今年的计划包括一个HTML5 Web app store ,一个手机操作系统 ,另外最重要的是,一个用于在浏览器层进行用户认证和授权的非集中式系统 。换句话说,是一个基于浏览器的用于验证用户名和密码的认证授权系统。
过去,Mozilla对于它用于Firefox同步的数据时经过充分加密的,比如让用户在不同设备间进行书签同步、密码同步以及其他数据的同步。这一加密,据Mozilla说,比银行使用的加密还要安全。
尽管它或许是非常安全的,应用层的加密对于Mozilla现在在开发的应用来说可能不太实际,因为Mozilla现在开发的应用 需要收集更多用户信息。这对于消费者以及立法者来说,都不是件小事,因为像用户追踪以及在线隐私在媒体以及国会都受到更多关注。
一个关于数据安全和隐私的五点计划
那 么Mozilla在将来将如何保证你的数据安全呢?他们已经提出了一个五点计划来指导他们的开发。只有在对用户非常有利的情况下,数据才应该被收集,并且 投资者(在这里是指Mozilla)需要非常注意什么数据被存储下来,并且它们是被如何存储的,存储在哪里以及为什么要存储。
Mozilla 同样承诺将会尽量减少用户数据在它自己的服务器上存储的时间。如果数据在经过一段时间后不需要再被使用,那么它就不应该被长期存储。并且,这些数据在服务 器中应该是不可见的。“如果我们能实现某个功能,这个功能可以永远不向服务器发送数据,或者这个功能只需要在应用层加密就可以实现,那我们一定会这么去 做。”Mozilla如此表态。
最后,如果可以使用匿名的、集合的数据,而不去使用个人的可识别的信息,Mozilla的工程团队会努力去做到这一点。
在 SOAP(SOPA: 禁止网络盗版法案,即“Stop Online Piracy Act”的 简称)成为最近最具爆炸性的新闻之前,人们对用在线隐私以及相关问题的关注一直在逐步升级。用户数据追踪以及保留已经引起了美国立法者的注意,他们之前就 要求过Amazon对于Silk浏览器关于用户隐私方面的问题给出说明,并对在线用户跟踪表示出担心。考虑到这些问题,Mozilla这次所作的应该并非 巧合,它们在将来也会在隐私方面被放在显微镜下考察一番的。
原文链接:Mozilla: We're About to Grab More Data About You, But Here's How We'll Keep It Safe
1.java.net.UnknownHostException
总是在client.execute时就出问题....
纠结了很久...才百度到了答案:
http://mobile.ygman.com/thread/19773....哎...
2.android.content.res.Resources$NotFoundException:
答案:http://tangqing8877-163-com.iteye.com/blog/1254522
要求:一个图片从上到下移动,在移动过程中,如果点击,那么可以拖拽图片,放开后继续向下移动。
问题:当imageview.startAnimation(animation)之后,imageview实际上并没有移动。点击imageview的初始位置时,可以监听到onclick事件。但是点击移动中的图片时,就无法监听到onclick事件了。
想法:如果可以得到animation移动过程中的每个时刻的位置,再设置imageview的位置,这样,效果就是点击移动中的图片时能监听到onclick。
package com.tianlv.study.temp;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.AbsoluteLayout;
import android.widget.ImageView;
public class temp extends Activity {
private Handler mHandler = new Handler();
private Runnable mMoveImage = new Runnable(){
public void run() {
moveImage();
}
};
private ImageView iView;
private int downMouseY;
private AbsoluteLayout.LayoutParams downImagePms;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
iView = (ImageView) findViewById(R.id.ImageView01);
iView.setOnTouchListener(new OnTouchListener(){
public boolean onTouch(View view, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_DOWN){
Log.i("debug", "stop");
downMouseY = (int) event.getRawY();
downImagePms = (AbsoluteLayout.LayoutParams) iView.getLayoutParams();
mHandler.removeCallbacks(mMoveImage);
}
if(event.getAction() == MotionEvent.ACTION_UP){
Log.i("debug", "move");
mHandler.postDelayed(mMoveImage, 500);
}
if(event.getAction() == MotionEvent.ACTION_MOVE){
dragImage((int) event.getRawY()- downMouseY);
}
return true;
}
});
}
private void moveImage(){
AbsoluteLayout.LayoutParams oldLayPms = (AbsoluteLayout.LayoutParams) iView.getLayoutParams();
AbsoluteLayout.LayoutParams newLayPms = new AbsoluteLayout.LayoutParams(oldLayPms.width, oldLayPms.height, oldLayPms.x, oldLayPms.y+1);
iView.setLayoutParams(newLayPms);
mHandler.removeCallbacks(mMoveImage);
if(newLayPms.y < 300){
mHandler.postDelayed(mMoveImage, 500);
}
}
private void dragImage(int y){
AbsoluteLayout.LayoutParams newLayPms = new AbsoluteLayout.LayoutParams(downImagePms.width, downImagePms.height, downImagePms.x, downImagePms.y+y);
iView.setLayoutParams(newLayPms);
}
}