博采众长,精于一技。Live for love, work for dream.

[Android]在OnCreate()中播放Animation动画

默认情况下,不能在OnCreate()中执行animation.start();是无效的,因为在OnCreate()中AnimationDrawable还没有完全的与ImageView绑定,在OnCreate()中启动动画,就只能看到第一张图片。
要实现OnCreate()加载完立即播放动画怎么办呢?解决办法是,用Handler。
package info.rebill.animation;

import android.app.Activity;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.os.Handler;
import android.widget.ImageView;

public class Main extends Activity {
    private ImageView btnPlay;
    private AnimationDrawable playAnim;
    private Handler handler = new Handler();

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        btnPlay = (ImageView) findViewById(R.id.btn_play);
        handler.postDelayed(new Runnable() {
            public void run() {
                playAnim = (AnimationDrawable) btnPlay.getBackground();
                playAnim.start();
            }
        }, 50);
    }
}

用Duplicity备份你的VPS

一直想对VPS进行一次备份,苦于没有找到比较好的办法,所以一直搁置。这次,经过一番周折,终于找到了VPS备份利器--Duplicity
Duplicity是一个使用Python语言实现的文件增量备份工具,其利用rsync底层类库,实现仅把文件中变化了的数据存入增量备份包的工作方式(类似给文件生成Patch补丁的方式),调用pgp对数据包进行签名和加密,而且支持本地文件系统、远端ftp、ssh/scp、rsync、WebDAV、WebDAVs、HSi以及Amazon S3等非常丰富的备份存储介质。
安装很简单
apt-get install duplicity

这里放出我自己写的两个VPS备份脚本。
1.备份MySQL数据库(同时导出多个数据库到一个目录并进行压缩,最后删除7天前的备份,以节省空间)
backup_mysql.php
#! /usr/bin/php -q
<?php
ini_set
('memory_limit''-1');

$db_user 'root';
$db_pass 'your_password';
$backup_dbs = array('test','db1','db2');
$backup_dir '/home/rebill/VPS/backup';
$mysqldump_shell '/usr/local/mysql/bin/mysqldump';

function 
diffTime() {
  global 
$startingTime;
  return 
time() - $startingTime " secs.";
}


$mysqlDumpTab = array($mysqldump_shell,
              
"--add-drop-table",
              
"--add-drop-database",
              
"--complete-insert",
              
"--create-options",
              
"--comments",
              
"--opt",
              
"--quote-names",
              
"--skip-extended-insert",
              
"-u $db_user",
              
"--password='$db_pass'"
              
);
echo 
"MySQL Backup. backing up database\n";    
foreach(
$backup_dbs as $db){
    
$mysqlDump implode(' '$mysqlDumpTab);
    
$mysqlDump .= " --databases $db";
    
    
$sql_file $backup_dir"/" $db "_" date('Y-m-d'). ".sql";
    
// Dump a whole database
    
$startingTime time();
    echo 
"[mysqldump] dumping database $db.sql\n";
    
$mysqlDumpCommand $mysqlDump " > " $sql_file;
    
system($mysqlDumpCommand$retValue);
    if (
$retValue != 0) { echo "$db mysqldump Error!\n"; exit(-1); }
    echo 
"[mysqldump] export over in "diffTime(), "\n";
    
    
// Compress it
    
$startingTime time();
    
$gzipCmd "gzip -9 " $sql_file;
    echo 
"[gzip] $gzipCmd\n";
    
system($gzipCmd$retValue);
    if (
$retValue != 0) { echo "$sql_file Compress Error!\n"; exit(-1); }
    echo 
"[gzip] compression done in "diffTime(), "\n";
}

// Delete old files (7 days ago)
echo "Delete old files...\n";
$delCmd "find $backup_dir -type f -mtime +7 | xargs rm -f";
system($delCmd$retValue);
if (
$retValue != 0) { echo "Delete Error!\n"; exit(-1); }
echo 
"Done!\n";

return 
0;

2.duplicity备份VPS数据(如果你不喜欢Web数据和MySQL数据分开备份,你可以使用--include命令同时备份多个目录)
duplicity_backup.sh
#!/bin/bash
#
# Set GnuPG passphrase
#
export PASSPHRASE=rebill.info

#
# Backup Config
#
REMOTE_SERVER="192.168.0.2"
REMOTE_USER="root"
REMOTE_PASS="your_password"
REMOTE_WEB_DIR="/root/vps_backup/web"
REMOTE_DB_DIR="/root/vps_backup/db"
LOCAL_WEB_DIR="/home/wwwroot/"
LOCAL_DB_DIR="/home/db_backup/"

#
# Backup Web Data
#
duplicity $LOCAL_WEB_DIR scp://$REMOTE_USER:$REMOTE_PASS@$REMOTE_SERVER/$REMOTE_WEB_DIR

#
# Backup DB Data
#
duplicity $LOCAL_DB_DIR scp://$REMOTE_USER:$REMOTE_PASS@$REMOTE_SERVER/$REMOTE_DB_DIR

PS.具体参数请根据自己情况自行更改。

duplicity的更多用法请参考duplicity的手册:http://duplicity.nongnu.org/duplicity.1.html

Android的AsyncTask简单用法

android.os.AsyncTask
AsyncTask

三个泛型参数:
Param 任务执行器需要的数据类型
Progress 后台计算中使用的进度单位数据类型
Result 后台计算返回结果的数据类型
有些参数是可以设置为不使用的,只要传递为Void型即可,比如AsyncTask

四个步骤:
onPreExecute(),执行预处理,它运行于UI线程,可以为后台任务做一些准备工作,比如绘制一个进度条控件。
doInBackground(Params…),后台进程执行的具体计算在这里实 现,doInBackground(Params…)是AsyncTask的关键,此方法必须重载。在这个方法内可以使用 publishProgress(Progress…)改变当前的进度值。
onProgressUpdate(Progress…),运行于UI线程。如果在doInBackground(Params…)中 使用了publishProgress(Progress…),就会触发这个方法。在这里可以对进度条控件根据进度值做出具体的响应。
onPostExecute(Result),运行于UI线程,可以对后台任务的结果做出处理,结果就是doInBackground(Params…)的返回值。此方法也要经常重载,如果Result为null表明后台任务没有完成(被取消或者出现异常)。

这4个方法都不能手动调用。而且除了doInBackground(Params…)方法,其余3个方法都是被UI线程所调用的,所以要求:
1) AsyncTask的实例必须在UI thread中创建;
2) AsyncTask.execute方法必须在UI thread中调用;

Task只能被执行一次,多次调用时将会出现异常,而且是不能手动停止。
package com.test;
 
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

public class AsyncTaskTest extends Activity {
    TextView tv;
    final String TAG="AsyncTaskTest";
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        tv = (TextView) findViewById(R.id.label);
        new MyTask().execute(6, 12, 7);
 
    }
 
    class MyTask extends AsyncTask<Integer, Integer, Integer> {
 
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            Log.d(TAG, "onPreExecute()");
        }
 
        @Override
        protected Integer doInBackground(Integer... params) {
            Log.d(TAG, "doInBackground()");
            int p = 0;
            for (int index = 0; index < params.length; index++) {
                int num = params[index];
                for (int j = 0; j < num; j++) {
                    if (num - j <= 0) {
                        break;
                    }
                    p++;
                    publishProgress(p);
                    try {
                        Thread.sleep(500);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
            return p;
        }
 
        @Override
        protected void onProgressUpdate(Integer... progress) {
            Log.d(TAG, "onProgressUpdate()");
            tv.append("\nProgress: " + progress[0]);
        }
 
        @Override
        protected void onPostExecute(Integer result) {
            Log.d(TAG, "onPostExecute()");
            tv.append("\nFinished. Result: " + result);
        }
 
        @Override
        protected void onCancelled() {
            super.onCancelled();
            Log.d(TAG, "onCancelled()");
        }
    }
 
}

整理一些除了Google Adsense以外比较适合英文站的国外广告联盟

最近一直在研究除了Google Adsense 以外的其他适合英文站的国外广告联盟,以替代被Google Adsense K站中的广告,不然不错的流量就太可惜了,在网上搜索,整理出如下几个口碑不错的广告联盟。

如果你有其他更好的广告联盟,欢迎大家留言补充啊!

Infolinks- 一个内文广告联盟,效果很好,除adsense外必做的广告,因为它并不影响adsense的广告位,相当于多一份收入。支持paypal付款。

Adbrite – 跟adsense类似的关键字广告,不过广告形式比google多,如整页弹窗和内文广告等,如果你的adsense不幸挂了, 这是第一选择,最初开始放的时候单价会低,半个月至一个月以后单价会慢慢变高,而且整页弹窗的效果也非常不错。一般英文站的效果要好,中文站基本没有效果。

Kontera – 内文广告联盟,和infolinks一样,效果一般,收入有时不稳定,但是如果能争取到他们的cpm计划(有流量和质量要求),效果会很不错。支持paypal付款,申请加入有最低流量要求,有一定流量的网站一般还是能通过得。

Chitika – 已经由原来的cps转向cpc,广告是根据搜索关键字来显示的,按点击计费,与adsense基本相似,但是如果美国和加拿大的搜索流量居多的话,效果可能比adsense要好。支持paypal支付。

Bidvertiser – 基本上和adsense类似,支持paypal(20美元起付)。注意,注册网站的时候一定要选好分类,选单价高的分类如shopping或者health,这样以后出现的广告就会单价稍微高一点,还有就是后台有类似adsense的广告审核功能,去掉那些低价的广告也能提高单价,如果你不想做或者没法做adsense,这倒是个不错的选择。

Clicksor – 跟adsense类似,一般只支持英文站,单价还不错,支持paypal付款。有好几个朋友向我推荐以后,我也试了一段时间,效果还算可以。

WidgetBucks – Widget Bucks 是基于商品销售模式的cpc兼cpm,cpc只支持某些国家ip,cpm支持全世界任何国家,cpc单价较高,cpm单价不怎么高,$0.15/1000左右。支持paypal付款。

CPALead – 引导调查或注册,你可以通过任何方式引导你的网站访客做完调查或完成注册,来获取收入,包括强制注册和诱导。适合英文垃圾站和各种提供特殊服务的站等。一般情况下完成一个调查或注册1美元左右。

Reviewme - 国外最好的话题营销服务联盟,也就是付费评论,按要求写一篇文章付多少钱。基本上5美元起价。(未验证)

Linkworth – 跟reviewme一样,不过门槛低一点,如果reviewme不接受你的话,可以去试试这个。

CJ - 最著名的cpa广告商,广告种类繁多,而且很多大公司,就是由于前期国人作弊太多导致对中国帐户有歧视,很难找到好广告主。

Linkshare – 销售类广告联盟,各种各样的广告商都有。一般都是按CPA或CPS计费。只支持支票付款。

ClickbankPaydot - 销售电子书和软件等电子产品的联盟,提成很高,能不能卖出去看你的本事了。

Etology - 广告交易联盟,和阿里妈妈差不多,有中文操作界面。看你的网站内容和流量决定你的广告价格。

ADSDAQ – 一个没有最低流量要求的cpm广告联盟,注册后直接通过,cpm价格也比较不错,前提是你的流量价值要高。

以下是搜到的但还没有具体研究过的一些联盟:

Yahoo YPN – 跟adsense质量差不多,需要用美国Tax ID,因此很难申请下来,除非你在美国,并且你的网站质量很高。

ValueClickMediaCasale MediaCPX Interactive – 比较好的cpm广告,要求流量都比较大。

PayperpsotSponsoredreviews – 另外两个国外比较好的付费博客联盟,Payperpost要求比较高。

Text Link Ads - 如果你PR大于4或者你的alexa排名较高,TLA是一个不错的选择. 有可能通过它赚的钱比adsense还多。

TNX – TNX 是一个链接销售的网站,你可以在这里销售你的网站链接,pr值决定你能赚多少,支持paypal付款。

原文地址:http://sitefans.net/google/except-google-adsense-the-others-advertising-alliance.html

ubuntu安装ibus-sunpinyin

1.下载源代码
到Google code下载sunpinyin的源代码。
http://code.google.com/p/sunpinyin/downloads/list
ibus-sunpinyin-2.0.3.tar.gz
sunpinyin-2.0.3.tar.gz
两个文件。

2.安装sunpinyin
为了编译SunPinyin基本库你需要安装以下的工具
C++编译器 (sudo aptitude install build-essential)
sqlite3 (sudo apt-get install sqlite3 libsqlite3-dev)
SCons (sudo apt-get install scons)
ibus > 1.2
gettext

tar zxvf sunpinyin-2.0.3.tar.gz
cd sunpinyin-2.0.3
scons --prefix=/usr
sudo scons install

3.安装ibus-sunpinyin
tar zxvf ibus-sunpinyin-2.0.3.tar.gz
cd ibus-sunpinyin-2.0.3
scons --prefix=/usr
sudo scons install

对于ibus,建议安装到/usr prefix,主要是因为怕ibus无法加载ibus-sunpinyin。

重启ibus来查看是否安装成功。
其他方法可以参照:http://code.google.com/p/sunpinyin/wiki/BuildUnix

返回顶部