转:“谈恋爱时,女生就像爱情的检察官,从不放弃任何一个搜证的可能性,没有找到爱的证据决不罢休!”
About Ubuntu 13.04 install something
first i want to say about chrome install
第一点你很可能会看见都一点就是当你选择chrome.deb时,双击安装时,你很可能看见一条错误提示说:Dependency is not satisfiable:libgconf2-4(>=2.270) 或者说你还可能会遇见都一点错误提示就是:Dependency is not satisfiable:libudev0(>=147) 遇到这些问题首先可以考虑
第一点:sudo apt-get install update 然后:sudo apt-get install libgconf2-4 libnss3-1d libxss1
还是不行都话,再去下载一个libudev0_175-0ubuntu19_i386.deb(装载链接:http://launchpadlibrarian.net/132294322/libudev0_175-0ubuntu19_i386.deb )安装
第二点:安装完成上面几个之后尼应该就可以安装chrome.deb了。其实吧安装chrome 不是为了什么(当然我很喜欢google的东西)而是她继承了flash不用装插件都可以看视频什么的,比内置的火狐好多。
完成了浏览器都安装,或许你是不是还想说有没有一个好都QQ啊?答案有的。有于本本版本都QQ是使用网上大神修改版本都,所以基本大家都是使用wine运行,所以先安装一个wine 吧,去Uuntu软件中心直接找就行,安装好之后就去下载一个wineQQ 目前就博主看见的来说最接近QQ 官方版本的就是
WINEQQ2012末日版地址:http://www.longene.org/download/WineQQ2012-20121130-Longene.deb
下载之后运行:sudo dpkg -i 软件名.deb
基本就可以安装好了,再不行就自己去看原帖吧 http://www.longene.org/forum/viewtopic.php?t=4700
第三点:安装这些完了,如果在中国,一个好的中文输入法还是挺需要的,所以我现在推荐一个就是iBus 具体安装方法自己去看http://wiki.ubuntu.org.cn/IBus,然后一步一步照着画就可以了,照着葫芦画瓢。
关于Ubuntu运行3D 部分呢,可以通过安装compiz
加装特效插件: sudo apt-get install compiz-plugins-extra
之后再装一个:GNOME Tweak Tool 去软件中心找就可以照得见的。装好这个三个就可以自己设置了。
本博客内容全部都可以在网上down到,只是个人在安装时的记录而已,希望可以帮助快速安装基本的软件。
ok 内容多出有转载。不喜勿喷。
《Your life in 2033》
施密特和科恩畅想了人类社会在2033年的生活:早上起床的时候不再是被闹钟(至少不是传统意义上的闹钟)叫醒,而是被刚煮好的咖啡所散发出诱人香味唤醒,窗帘会自动打开,只要睁开眼就能看到明媚的阳光,床垫里面安置的按摩器会给你提供舒适的背部按摩。重要的是每天的睡眠质量会特别高,醒来之后会感觉精力充沛,这是因为床垫内部还有一种特殊的传感器,能够实时监控你的睡眠规律,并以此计算出什么时候叫醒你才最合适。
当你起床之后,安装了最新科技系统的家就像是一个电子乐团,作为主人的你就是这个乐团的指挥者。通过语音系统,你可以根据自己的喜好调节室内温度、湿度,还可以根据自己的心情语音控制播放音乐播放氛围和灯光效果。借助最新的科技产品,你可以使用半透明的屏幕浏览当天的新闻。在看新闻的时候,自动壁橱已经根据当天的天气和穿衣指数选好了今天出行需要穿的服装。穿好衣服之后,厨房已经把早餐准备好了,半透明的阅读器还会跟随你到餐桌前,并将比较重要的新闻用投射全息图的形式立体呈现出来。在喝着咖啡,吃着可口早餐的同时,你可以通过全息投影处理一天中收到的电子邮件。在出门之前,中央电脑会将机器人管家一天中需要做的杂务列出来,当然你可以根据实际情况做出修改。
到了2033年,不管是个人信息还是工作信息都会被存储在云端,可以通过各种数字设备看到,而且云存储的容量几乎是不受限制的。届时,类似于现在的智能手机、平板电脑之类的便携式电子产品将会更加完美,有平板那么称手的,也有怀表那般小巧的,肯定还有更加灵活、可穿戴的新产品。所有这些产品都是超轻、超快的,功能要比现在的电子产品强大的多。
如果你在厨房不小心碰伤了脚趾,可以用任何一款移动设备来“诊断”一下,因为里面有一个微型芯片,可以发出类似于X光的射线(辐射较低)。这种射线在对伤口进行快速扫描后显示,只是普通的擦伤,并没有大碍,所以你就可以直接拒绝移动设备中弹出的去附近医院治疗的建议。
上班可以直接乘坐无人驾驶汽车,这样在上下班的路上你还可以做其他的事情或者纯粹放松一下。在无人驾驶汽车行驶过程中,手机备忘录会语音提醒你今天是侄子的生日,你扫了一眼车内电脑系统提出的礼物建议,这些建议是在综合了小孩所有的数据信息和个人兴趣基础上提出的。你感觉这些建议都不怎么样,突然你想到了一个只有40岁以上的人才能明白的笑话:狗狗吃了我的作业。侄子一直都不明白,为什么狗狗能把存储在云端的信息吃掉呢?你在电子商城快速找到了一只机器狗,然后选好送货达到时间,这一切只需很短的时间就能完成。
当你还想再喝杯咖啡的时候,你发现车子已经停在了公司的停车场,这时安装在鞋跟的触控装备发出震动,提醒你公司的重要会议马上就要开始了,没办法,咖啡只好去会议室喝了。
随着以电脑为核心的虚拟世界不断完善,人们在现实世界中的工作和学习效率将会不断提高。数字化革命将会影响到世界的每个角落,人类社会将会更加先进和智能化,而发达国家和欠发达国家之间的差距也将随着科技的普及而大大缩小。
到了2033年,智能手机、平板电脑这类便携式数字产品的价格将会更加低廉,发展中国家的大部分居民都能够用用得起这种电子产品。到时候,刚果的渔民不用再像现在这样把捕来的鱼拿到集市上去,他们只要在河边保持手机畅通就可以了,通过电子商城或者相关应用,渔民会收到客户买鱼的电话通知,接到订单之后再去动手捕鱼,然后稍作处理等待物流公司来取就可以了。这样渔民就不需要买昂贵的冰箱,而且能保证消费者买到的是新鲜的鱼,而且鱼类市场的供需将会实现一致,不会出现因供过于求而导致的过度捕捞现象。
到时候,以手机为代表的科技手段将会改变发展中国家贫苦人民的生活质量。现在非洲的手机用户已经达到了6.5亿,而亚洲则接近30亿。这群手机用户中大部分人使用的是功能简单的普通手机,而且他们的手机基本上只有两个用途:接打电话和收发短信。因为在部分国家,手机数据服务的费用贵的离谱,超出了大部分手机用户所能承受的范围。未来20年内,这种情况将会彻底改变,智能手机将会在发展中国家大范围普及,而这些国家的居民也会因数字化革命的兴起而获得实实在在的利益。
智能手机、平板电脑等移动设备的大范围普及能够给发展中国家的人民带来更大的变革,他们可以利用这些设备更好地收集和使用各种数据信息,及时掌握自己需要的经济、教育和医疗数据。这样,他们通过科技手段和自己奋斗来改变自己的命运的几率就会大大增加。实际上,技术进步将会给社会的各个群体带来好处,政府机构可以用最新的科技手段来更加准确地监测自己政策的实施进度,而媒体等非政府组织也可以运用这些先进的科技来提高自己工作的效率和准确性。
即便那些最先进的智能手机和机器人售价依然居高不下,但是山寨工厂将会为发展中国家的消费者提供价格低廉而且功能还说的过去的设备。那时候,发展中国家和发达国家之间的科技鸿沟将会逐渐缩小。
随着3D技术的不断发展和3D打印机的普及,机器将会生产出越来越多的精密部件。发展中国家可以用3D打印机制造出各种零件,他们还能从开源模板中免费获取零件规格等相关信息。发达国家则可以在3D打印机的帮助下发展更高级的制造技术。原材料和各种产品的制造水平将会大大提高,而制造成本则会大幅度降低。
2033年,借助最先进的信息系统,人们将会从日常的琐事中解脱出来,而且信息系统会处理平时人们容易遗忘或者忽略的事情。当你需要解决什么难题时,社交网络会根据存储的信息向你推荐有过类似难题处理经验的好友。有着如此完善的智能系统,人类的工作效率将会大大提高。
但是数字化革命也是把双刃剑,在促进人类社会进步的同时也会带来很多潜在的威胁。个人隐私信息将会更多地掌控在电脑系统当中,一旦被泄露将会给人的生活带来非常糟糕的影响。未来社会,我们的身份更多地是被虚拟系统所识别,而且我们的日常活动将会被无处不在的电脑系统更加完整地记录下来并被存储在云空间。
到时候,我们的在线身份也会改变。毕竟在一个高度网络化的国家,政府是不愿意看见网上活跃着大量匿名且未通过身份审核的网民。很有可能我们每个人都会有一个自己的个人档案网站,里面还会有每个公民的网络信息(社交网站、即时聊天工具账号等等),但绝不会像现在的空间或者微博那样简单,里面有详细的个人信息,而且这些档案网站会由政府统一管理。
对公民而言,未来网络最有价值的商品莫过于自己的身份。到时候还会衍生出很多维护网络隐私的商业网站,就像现在的杀毒软件一样普遍,而倒卖个人信息的黑市也会不可避免地出现。
本文转自:http://www.linuxeden.com/html/news/20130423/138490.html
20130330 项目组会议
或许现在我应该想一下,到底关于一个项目组成员中,项目组长的职业是什么?项目组组员的职业是什么?项目组会议中主持人的职业是什么?如果到现实生活中午一个项目组成员觉得项目组进行的会议中谈论了一个多小时的谈论都没有给出一个结果或者解决方案,那么作为一个项目组成员,他跨越职业发起一次投票决定选择讨论中的一个方案这个算不算不把项目主管当一回事,项目主管是否也就可以凭任何一个理由就直接开除一个项目组成员?其实我觉得是可以的,即使说一个项目组成员说得很对,但是一个项目主管或者其他主管就可以随时根据心情开除一个人。当然明智的或者同情达理的项目主管可能会选择给这样一个项目组成员升职。当然,这都是可能。具体情况还得看实际情况。再有一个就是是否说如果一个项目组成员觉得他比项目主管更有领导和决策能力,他是否也可以向上级提起说我直接开除项目主管,项目主管由我来做?具体说一个好的项目主管和一个好的项目组成员的责任是什么呢?还有项目组会议主持人的职业呢?要如何去做好一个称职的项目组成员呢?
以下纯属个人见解,具体情况待今后真实经历过可以回来看现在的说法。
一个好的项目主管是怎么样呢?我觉得吧在我们开谈论会议的时候应该暂时放下一个项目组长的架子,实在到我们谈论了一两个小时的时候还是不能给出解决方案的。项目主管这时候就需要站出来,选择决定一个解决方案,至于最后的结果是项目组成员发起的投票还是自己最终的选择,项目主管都应该在最后说明是自己最终选择的决策,这样就可以消除项目组成员中的不和谐与矛盾,对于项目组成员在谈论会中的表现是否跨越职业项目组主管可以暂时放下架子,参与谈论,把自己当做其中一员,任由任何人表达与发挥个人观点,不带个人情绪,聆听别人观点,既然自己拥有观点,行政能力和人力资源管理不能放入谈论。只有这样才能更好的发挥项目组组员对项目的见解,更好的理解和改善项目组成员对项目做出正确判断。对于主持人,我觉得最应该的是把握好时间,控制什么时候该发起投票,什么时候该站出来叫组员停止他的行为和跨越职能。在谈论中,组员可以和项目组主管发起冲突,但是最后会议结束后应该支持最后的项目组做出的决策方案,并努力完成项目组的工作。针对于项目主管他最后是否开除一个在会议上跟他日冲突或者矛盾的问题,这个就看项目主管自己的思考了,当然我觉得一个好的项目主管一般不会随意开除一个可以做出正确并且可以帮忙决策项目的项目组成员。其实我也不懂这样的观点到底对不对。但是这是这时候的想法。希望写下来,今后经历过再回过来看过。
关于Android使用SurfaceView实现绘图功能之2D游戏学习
以下内容是实现两个画面的转换和一个画面的运动的效果,实现了一个我们也就可以举一反三了,其余的实现也就容易了。废话了一段,下面进入正题:
说得不好的各位大神尽管拍砖!
第一步:
建立工程什么的就不用说了,自己回去建立,不懂也不要问,自己Google~~
第二部:
新建一个类Welcome继承至SurfaceView类并实现其接口SurfaceHolder.Callback,这里实现的事第一个画面的类,也就是我们现实两个画面就使用两个类来实现,封装两个类。继承了SurfaceView之后就实现相应的创建,改变,销毁三个方法,这是这个类必须要求实现的,对于其中的为什么我也不懂。。创建方法的实现也就是我们创建这个类之后我们就开启这个类,由于我们在接下来还要定义一个内嵌线程,所以我们可以在创建里面实现我们的线程的启动start()方法。对于其他的什么构造方法什么的就自己看着办了,以及初始化什么的就自己看着办你想初始化什么就初始化什么了,想我现在用到一个需要绘制的图片还有坐标什么的我就自己在里面初始化就可以了。也就是这段内嵌线程的代码
class TutorialThread extends Thread{//刷帧线程
private int span = 500;//睡眠的毫秒数
private SurfaceHolder surfaceHolder;
private Welcome view;
private boolean flag = false;
public TutorialThread(SurfaceHolder surfaceHolder, Welcome view) {//构造器
this.surfaceHolder = surfaceHolder;
this.view = view;
}
public void setFlag(boolean flag) {
this.flag = flag;
}
@Override
public void run() { //重写run方法,实现现场的不断循环
Canvas c;
while (this.flag) {
c = null;
try {
// 锁定整个画布,在内存要求比较高的情况下,建议参数不要为null
c = this.surfaceHolder.lockCanvas(null);
synchronized(this.surfaceHolder) {
view.draw(c); //实现绘图的draw()方法,只好我们也会重写
}
} finally {
if (c != null) {
//更新屏幕显示内容
this.surfaceHolder.unlockCanvasAndPost(c);
}
}
try{
Thread.sleep(span);
}
catch(Exception e){
e.printStackTrace();
}
}
}
}
线程一直调用我们的run方法循环,draw()方法就不听的绘制我们的图片,下面是我们的draw()方法
public void draw(Canvas canvas) {
int px = viewX/5*3;
int py = viewY/5*3;
canvas.drawColor(Color.BLACK);
goods.draw(canvas);
//canvas.drawBitmap(background,10,10, null);
canvas.drawBitmap(button, px, py, null);
}
同样的想有几个画面的话可以多创建几个相似的类,或者在同一个类里面控制状态什么是盖显示什么也行,这里我使用一个消息参数来传回主Activity使用主Activity来控制显示状态,也就是我们转场标记
第三步:
我们在每一个继承至SurfaceView的画面类,添加了一个touchEvent监听时间,这样只要我们控制时间发生时我们向主Activity发送相应的消息参数我们就可以实现我们的画面的跳转了
例如在Welcome里面我们用一个按钮来触发时间的发生,当点击按钮时,我们就传递一个消息参数会主Activity然后由主Activity设置需要转换的画面
public boolean onTouchEvent(MotionEvent event){
if(event.getAction() == MotionEvent.ACTION_DOWN)
{
int px = (int)event.getX();
int py = (int)event.getY();
if(px > viewX/5*3 && px < viewY/5*3+button.getWidth()
&& py > viewY/5*3 && py < viewY/5*3+button.getHeight()){//点击了重新游戏按钮
testActivity.myHandler.sendEmptyMessage(1);//向主activity发送Handler消息
}
// testActivity.myHandler.sendEmptyMessage(1);
}
return super.onTouchEvent(event);
}
在主Activity里面我们使用的是
Handler myHandler = new Handler(){//用来更新UI线程中的控件
public void handleMessage(Message msg) {
if(msg.what == 1)
{
if(welcome != null)
{
welcome = null;
}
toLoading();
}
else if(msg.what == 2)
{
if(loading != null)
{
loading = null;
}
toWelcome();
}
}
};
至此我们就可以实现了画面的切换,根据不同的状态信息绘制我们不同的画面了。
一下给出我写的一个简单我程序部分源代码:
第一个是Welcome:
package com.test;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class Welcome extends SurfaceView implements SurfaceHolder.Callback {
TestActivity testActivity;
SurfaceHolder surfaceHolder;
TutorialThread thread;
Bitmap background;
Bitmap button;
int viewX;
int viewY;
MoveThread moveThread;
good goods;
public Welcome(TestActivity activity2) {
super(activity2);
this.testActivity = activity2;
surfaceHolder = getHolder();
surfaceHolder.addCallback(this);
thread = new TutorialThread(surfaceHolder,this);
moveThread = new MoveThread(this);
viewX = activity2.viewX;
viewY = activity2.viewY;
initBitmap();
}
private void initBitmap() {
this.background = BitmapFactory.decodeResource(getResources(), R.drawable.backgroud);
this.button = BitmapFactory.decodeResource(getResources(),R.drawable.icon);
goods = new good(10, 400, background);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
this.thread.setFlag(true);
this.thread.start();
this.moveThread.setFlag(true);
this.moveThread.start();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
boolean retry = true;
thread.setFlag(false);
moveThread.setFlag(false);
while (retry) {
try {
moveThread.join();
thread.join();
retry = false;
}
catch (InterruptedException e) {//不断地循环,直到刷帧线程结束
}
}
// TODO Auto-generated method stub
}
public void draw(Canvas canvas) {
int px = viewX/5*3;
int py = viewY/5*3;
canvas.drawColor(Color.BLACK);
goods.draw(canvas);
//canvas.drawBitmap(background,10,10, null);
canvas.drawBitmap(button, px, py, null);
}
public boolean onTouchEvent(MotionEvent event){
if(event.getAction() == MotionEvent.ACTION_DOWN)
{
int px = (int)event.getX();
int py = (int)event.getY();
if(px > viewX/5*3 && px < viewY/5*3+button.getWidth()
&& py > viewY/5*3 && py < viewY/5*3+button.getHeight()){//点击了重新游戏按钮
testActivity.myHandler.sendEmptyMessage(1);//向主activity发送Handler消息
}
// testActivity.myHandler.sendEmptyMessage(1);
}
return super.onTouchEvent(event);
}
class TutorialThread extends Thread{//刷帧线程
private int span = 500;//睡眠的毫秒数
private SurfaceHolder surfaceHolder;
private Welcome view;
private boolean flag = false;
public TutorialThread(SurfaceHolder surfaceHolder, Welcome view) {//构造器
this.surfaceHolder = surfaceHolder;
this.view = view;
}
public void setFlag(boolean flag) {
this.flag = flag;
}
@Override
public void run() {
Canvas c;
while (this.flag) {
c = null;
try {
// 锁定整个画布,在内存要求比较高的情况下,建议参数不要为null
c = this.surfaceHolder.lockCanvas(null);
synchronized(this.surfaceHolder) {
view.draw(c);
}
} finally {
if (c != null) {
//更新屏幕显示内容
this.surfaceHolder.unlockCanvasAndPost(c);
}
}
try{
Thread.sleep(span);
}
catch(Exception e){
e.printStackTrace();
}
}
}
}
}
第二个是:Loding
package com.test;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class Loading extends SurfaceView implements SurfaceHolder.Callback {
TestActivity testActivity;
SurfaceHolder surfaceHolder;
TutorialThread thread;
Bitmap background2;
Bitmap button2;
public Loading(TestActivity activity1) {
super(activity1);
this.testActivity = activity1;
surfaceHolder = getHolder();
surfaceHolder.addCallback(this);
thread = new TutorialThread(surfaceHolder, this);
initBitmap();
}
private void initBitmap() {
this.background2 = BitmapFactory.decodeResource(getResources(), R.drawable.menu);
this.button2 = BitmapFactory.decodeResource(getResources(), R.drawable.icon);
}
public void draw(Canvas canvas) {
canvas.drawColor(Color.BLACK);
canvas.drawBitmap(background2, 0, 0, null);
canvas.drawBitmap(button2, 250, 350, null);
}
public boolean onTouchEvent(MotionEvent event){
if(event.getAction() == MotionEvent.ACTION_DOWN)
{
int px = (int)event.getX();
int py = (int)event.getY();
if(px > 250 && px < 250+button2.getWidth()
&& py > 350 && py < 350+button2.getHeight()){//点击了重新游戏按钮
testActivity.myHandler.sendEmptyMessage(2);//向主activity发送Handler消息
}
// testActivity.myHandler.sendEmptyMessage(2);
}
return super.onTouchEvent(event);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
thread.setFlag(true);
thread.start();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
boolean retry = true;
thread.setFlag(false);
while (retry) {
try {
thread.join();
retry = false;
}
catch (InterruptedException e) {//不断地循环,直到刷帧线程结束
}
}
// TODO Auto-generated method stub
}
class TutorialThread extends Thread{//刷帧线程
private int span = 500;//睡眠的毫秒数
private SurfaceHolder surfaceHolder;
private Loading view;
private boolean flag = false;
public TutorialThread(SurfaceHolder surfaceHolder, Loading view) {//构造器
this.surfaceHolder = surfaceHolder;
this.view = view;
}
public void setFlag(boolean flag) {
this.flag = flag;
}
@Override
public void run() {
Canvas c;
while (this.flag) {
c = null;
try {
// 锁定整个画布,在内存要求比较高的情况下,建议参数不要为null
c = this.surfaceHolder.lockCanvas(null);
synchronized (this.surfaceHolder) {
view.draw(c);
}
} finally {
if (c != null) {
//更新屏幕显示内容
this.surfaceHolder.unlockCanvasAndPost(c);
}
}
try{
Thread.sleep(span);
}
catch(Exception e){
e.printStackTrace();
}
}
}
}
}
第三个是:主TestActivity
package com.test;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.view.Display;
import android.view.Window;
import android.view.WindowManager;
public class TestActivity extends Activity {
Welcome welcome;
Loading loading;
Process process;
int viewX;
int viewY;
Handler myHandler = new Handler(){//用来更新UI线程中的控件
public void handleMessage(Message msg) {
if(msg.what == 1)
{
if(welcome != null)
{
welcome = null;
}
toLoading();
}
else if(msg.what == 2)
{
if(loading != null)
{
loading = null;
}
toWelcome();
}
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//设置为全屏
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
//setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);//强制为横屏
WindowManager windowManager = getWindowManager();
Display display = windowManager.getDefaultDisplay();
viewX = display.getWidth();
viewY = display.getHeight();
toWelcome();
}
public void toLoading() {
//process = new Process(this);
loading = new Loading(this);
setContentView(loading);
new Thread(){//线程
public void run(){
Looper.prepare();
process = new Process(TestActivity.this);//初始化GameView
Looper.loop();
}
}.start();//启动线程
}
public void toWelcome() {
welcome = new Welcome(this);
setContentView(welcome);
}
}
程序代码就贴这么多吧。。应该可以看得懂了的。