not present in DVTPlugInCompatibilityUUIDs

rance:src rance$ webrtc/build/gyp_webrtc

Updating projects from gyp files...

2015-05-06 22:15:19.041 xcodebuild[3603:35178] [MT] PluginLoading: Required plug-in compatibility UUID C4A681B0-4A26-480E-93EC-1218098B9AA0 for plug-in at path '~/Library/Application Support/Developer/Shared/Xcode/Plug-ins/VVDocumenter-Xcode.xcplugin' not present in DVTPlugInCompatibilityUUIDs

2015-05-06 22:15:19.042 xcodebuild[3603:35178] [MT] PluginLoading: Required plug-in compatibility UUID C4A681B0-4A26-480E-93EC-1218098B9AA0 for plug-in at path '~/Library/Application Support/Developer/Shared/Xcode/Plug-ins/ClangFormat.xcplugin' not present in DVTPlugInCompatibilityUUIDs

2015-05-06 22:15:19.119 xcodebuild[3604:35193] [MT] PluginLoading: Required plug-in compatibility UUID C4A681B0-4A26-480E-93EC-1218098B9AA0 for plug-in at path '~/Library/Application Support/Developer/Shared/Xcode/Plug-ins/VVDocumenter-Xcode.xcplugin' not present in DVTPlugInCompatibilityUUIDs

2015-05-06 22:15:19.121 xcodebuild[3604:35193] [MT] PluginLoading: Required plug-in compatibility UUID C4A681B0-4A26-480E-93EC-1218098B9AA0 for plug-in at path '~/Library/Application Support/Developer/Shared/Xcode/Plug-ins/ClangFormat.xcplugin' not present in DVTPlugInCompatibilityUUIDs

2015-05-06 22:15:20.128 xcodebuild[3606:35227] [MT] PluginLoading: Required plug-in compatibility UUID C4A681B0-4A26-480E-93EC-1218098B9AA0 for plug-in at path '~/Library/Application Support/Developer/Shared/Xcode/Plug-ins/VVDocumenter-Xcode.xcplugin' not present in DVTPlugInCompatibilityUUIDs

2015-05-06 22:15:20.130 xcodebuild[3606:35227] [MT] PluginLoading: Required plug-in compatibility UUID C4A681B0-4A26-480E-93EC-1218098B9AA0 for plug-in at path '~/Library/Application Support/Developer/Shared/Xcode/Plug-ins/ClangFormat.xcplugin' not present in DVTPlugInCompatibilityUUIDs

2015-05-06 22:15:20.199 xcodebuild[3608:35239] [MT] PluginLoading: Required plug-in compatibility UUID C4A681B0-4A26-480E-93EC-1218098B9AA0 for plug-in at path '~/Library/Application Support/Developer/Shared/Xcode/Plug-ins/VVDocumenter-Xcode.xcplugin' not present in DVTPlugInCompatibilityUUIDs

2015-05-06 22:15:20.200 xcodebuild[3608:35239] [MT] PluginLoading: Required plug-in compatibility UUID C4A681B0-4A26-480E-93EC-1218098B9AA0 for plug-in at path '~/Library/Application Support/Developer/Shared/Xcode/Plug-ins/ClangFormat.xcplugin' not present in DVTPlugInCompatibilityUUIDs

       追加DVTPlugInCompatibilityUUIDs

 

find ~/Library/Application\ Support/Developer/Shared/Xcode/Plug-ins -name Info.plist | xargs -IFILE defaults write FILE DVTPlugInCompatibilityUUIDs -array-add A2E4D43F-41F4-4FB9-BB94-7177011C9AED
再次查看

find ~/Library/Application\ Support/Developer/Shared/Xcode/Plug-ins -name Info.plist | xargs -IFILE defaults read FILE DVTPlugInCompatibilityUUIDs 

NameSilo优惠码及使用技巧

namesilo是icann认证的国外域名注册商,实力啊,信誉啊,那是肯定没问题的, 

如果我们熟悉海外的域名和主机商,大部分都会为了吸引新用户的使用发布优惠码,Namesilo也为了顺应潮流,在原本价格比较低的域名注册/续费和转移情况下,也会分享一些优惠信息。笔者也整理出来提供给大家使用。

NameSilo优惠码:
1、2015sale
2、2015domian
3、2015buy

以上三个优惠码为我们在新注册,续费或者转移域名时候都可以使用的,一个订单只能使用一个,一个账户只能使用1次。且每个优惠码只能优惠1美元,比如我们新购买一个.COM域名需要8.99美元,如果使用优惠码只需要7.99美元。

对于使用NameSilo优惠码有下面几个技巧和注意事项:

第一,一个账户只能用一次

鉴于本身官方的域名价格比较低,优惠促销不是官方的目的,但还是可以让用户稍微便宜一点的,所以每个账户只能使用一次优惠。如果你有多个账户,多个不同的付款方式,还是可以使用的。

PS:有些时候上面三个优惠码可以在一个账户使用,分三个订单使用。

第二,账户问题

如果我们需要用多个优惠,我们只能用不同账户和不同的付款方式,这样我们可以优惠不同的订单。

第三,官方目的

官方的目的不是为了优惠而促销的,如果我们在使用上述优惠后,不好再使用优惠,我个人认为新注册8.99,转入8.39这样的价格还是很便宜的。而且赠送隐私保护,是其他商家目前不可以超越的

Android程序启动问题

广播增加:android.intent.action.BOOT_COMPLETED ,APP会随着系统启动而已启动。

广播增加:android.intent.action.USER_PRESENT ,APP 会在解锁的时候启动。

 

过后的第三年

三年前,应该已过了三年吧!11,10,09;是的三年了。

现在想起来,后悔还是仇恨呢?都不是吧,对某人有点歉意吧,这么久了。虽然说出了实话,都没有真正说过对不起。

也许有人想问我为什么发这篇文章?一来,我真的很久没有写了,想写点什么,却不知道有什么好写的。每天都是工作工作还是工作,这是什么生活,我要的生活吗?二来,看到了以前我盗出的聊天记录。好吧,我承认三年前我想办法盗取了别人的QQ聊天记录。但我只看了两个人的,还有一个人的没有看。我也不知道那时候为什么只看了两个人的聊天记录,却今天看了。关于盗取别人的QQ,我就不说了吧。这个不是我们重点,也请大家不要来问我怎么盗QQ。我只想说,现在我真不会。QQ聊天记录我就不贴出来了,对大家都不好。在这我只是想说下,虽然当年我好像什么都不知道。回想下来,还是有好处的,至少这些人我不会再接触。早点在没付出最大的后果的时候经历下也许有好处。也认清了,表面合得来的男人也不是好人。跟你更近的女人,也不一定是一个好女人。

我承认我不会耍手段,我也想或者想学手段。在当今世界,黑手段太多了。像我这种小兵 想当一个企业领导者,现在看来还是太年轻了。

过于相信别人,以为一些都可以在自己的手中。然则一切都不是这样子。虽说跟某人磕磕绊绊四年多,但一直没伤害过我。有些人只有永恒的利益没有永恒的朋友,有些人只有永恒的的朋友没有永恒的利益。我希望我有永恒的的朋友。

再黑暗的过去也有阳光的那天,再痛苦的记忆也有释怀的那天。

我不会记恨谁,但我不会忘记,经历过的过去。你的,我的,还有他的,都会留在记忆中。

discuz URL伪静态版块目录化和贴子目录化

那么什么是扁平的树型网状结构呢?

例如:首页:http://www.XXX.com
      栏目页:
http://www.XXX.com/discuzx/ 
      内容页:
http://www.XXX.com/discuzx/m826/

像这样的页面就是一个“扁平的树型网状结构”。每增加一个内容页,都会给栏目页增加一定的权重。像地宝网的URL就是很规范的,整站URL目录化,目录层次不超过2个。对于SEO是很有利的。

那么现在discuz官方的地址是怎么样的呢?

首页:http://www.discuz.net/forum.php
栏目页:http://www.discuz.net/forum-21-1.html
内容页http://www.discuz.net/thread-2281986-1-1.html

这样的URL是分散的,并不是,不利于权重的传递。

在这里给大家提供一个方法,通过伪静态方法来实现discuzx的地址目录化(目前只支持Apache服务器)。

首先

打开source\function下的function_core.php

找到

    if($type == 'forum_forumdisplay') {

        list(,,, $fid, $page, $extra) = func_get_args();

        $r = array(

            '{fid}' => empty($_G['setting']['forumkeys'][$fid]) ? $fid : $_G['setting']['forumkeys'][$fid],

            '{page}' => $page ? $page : 1,

        );

    } elseif($type == 'forum_viewthread') {

        list(,,, $tid, $page, $prevpage, $extra) = func_get_args();

        $r = array(

            '{tid}' => $tid,

            '{page}' => $page ? $page : 1,

            '{prevpage}' => $prevpage && !IS_ROBOT ? $prevpage : 1,

        );

改为

if($type == 'forum_forumdisplay') {

        list(,,, $fid, $page, $extra) = func_get_args();

        $r = array(

            '{fid}' => empty($_G['setting']['forumkeys'][$fid]) ? $fid : $_G['setting']['forumkeys'][$fid],

            '{page}' => $page ,

        );

    } elseif($type == 'forum_viewthread') {        

        list(,,, $tid, $page, $prevpage, $extra) = func_get_args();

        $fid = DB::result_first("SELECT fid FROM ".DB::table('forum_thread')." WHERE tid = '$tid'");

        $r = array(

            '{fid}' => empty($_G['setting']['forumkeys'][$fid]) ? $fid : $_G['setting']['forumkeys'][$fid],

            '{tid}' => $tid,

            '{page}' => $page ,

            '{prevpage}' => $prevpage && !IS_ROBOT ? $prevpage : 1,

        );

然后进入网站后吧->''seo设置"->"url静态化"

在"论坛主题列表页"的格式中填写:{fid}/{page}

在"论坛主题内容页"的格式中填写:{fid}/m{tid}/{page}

然后下载.htaccess文件,传到网站根目录

htaccess.rar

然后工具,更新缓存,即实现了版块目录化,贴子目录化

在"论坛"-"版块管理"中的"绑定别名"即是版块目录名:

如: 版块中的"绑定别名"为"discuzx",那么访问地址就是:http://www.XXX.com/discuzx/

ubuntu php安装GD不支持JPEG

这几天在安装GD的时候,无法支持JPEG,Config都设置好了 还是有问题。

libjpeg62-dev  也装了 ,在config ,make 的时候都能过。最后phpinfo 看下,不支持,都支持PNG,为什么不支持JPEG呢

只好问下高手了,说应该是Path的问题

把以下内容加到etc/ld.so.conf,如没有找到,先运行下 ldconfig

 

/usr/local/lib
/usr/lib
/usr/lib64
/lib
/lib64
 

然后make clean 下,最后再重新编译下。OK了,哈哈

ssh: connect to host localhost port 22: Connection refused

一般错误信息为:ssh: connect to host localhost port 22: Connection refused

这种错误很主要的一个原因是sshd服务没有启动,先启动sshd服务后就没有问题了。

启动sshd服务:重启ssh: /etc/init.d/ssh start  (前提条件是你已安装过ssh了)

或者防火墙阻止了sshd服务

Android删除短信的方法

1.删除短信的函数,一条一条的删除所有短信

	/* 	 * Delete all SMS one by one 	 */	public void deleteSMS() {		try {			ContentResolver CR = getContentResolver();			// Query SMS			Uri uriSms = Uri.parse("content://sms/sent");			Cursor c = CR.query(uriSms,					new String[] { "_id", "thread_id" }, null, null, null);			if (null != c && c.moveToFirst()) {				do {					// Delete SMS					long threadId = c.getLong(1);					CR.delete(Uri.parse("content://sms/conversations/" + threadId),							null, null);					Log.d("deleteSMS", "threadId:: "+threadId);				} while (c.moveToNext());			}		} catch (Exception e) {			// TODO: handle exception			Log.d("deleteSMS", "Exception:: " + e);		}	}

2.在AndroidManifest.xml中增加读取短信的权限

<uses-permission android:name="android.permission.READ_SMS" /><uses-permission android:name="android.permission.WRITE_SMS" />

android 中管理短信

以前在华为的时候对彩信进行过研究,这几天在搞短信的东西,因为以前的东西不能带出来,所以去google了下,收藏下

偶然发现了一个类MmsSmsDatabaseHelper.java,原来android将所有的短信信息都存入了mmssms.db中。

公开的SDK中没有这个类,不能直接使用。于是自己写了一个SQLiteOpenHelper,但是查询的时候发生SQL异常。

看来不能为所欲为了,不过据网上资料介绍可以拷贝db文件来实现短信数据备份。

既然每个db跟package名相关,建立了一个package为com.android.providers.telephony的工程去试一试,看看能不能成功。

结果输出Please execute 'adb uninstall com.android.providers.telephony' in a shell,android的安全做得很强大啊。


不能直接访问数据库,只能通过协议来访问数据库了,       
先贴出相关的协议:       
content://sms/inbox        收件箱
content://sms/sent        已发送
content://sms/draft        草稿
content://sms/outbox        发件箱
content://sms/failed        发送失败
content://sms/queued        待发送列表

在模拟器上Outbox没有查询到数据,在模拟器上找了老半天也没找到发件箱,很郁闷。   
数据库中sms相关的字段如下:   
_id               一个自增字段,从1开始
thread_id    序号,同一发信人的id相同
address      发件人手机号码
person        联系人列表里的序号,陌生人为null
date            发件日期
protocol      协议,分为: 0 SMS_RPOTO, 1 MMS_PROTO 
read           是否阅读 0未读, 1已读 
status         状态 -1接收,0 complete, 64 pending, 128 failed
type
    ALL    = 0;
    INBOX  = 1;
    SENT   = 2;
    DRAFT  = 3;
    OUTBOX = 4;
    FAILED = 5;
    QUEUED = 6;

body                     短信内容
service_center     短信服务中心号码编号
subject                  短信的主题
reply_path_present     TP-Reply-Path
locked

检索数据方法很简单:  

Uri uri = Uri.parse("content://sms/inbox");        
Cursor cur = this.managedQuery(uri, null, null, null, null);        
if (cur.moveToFirst()) {        
    do{    
    for(int j = 0; j < cur.getColumnCount(); j++){    
            info = "name:" + cur.getColumnName(j) + "=" + cur.getString(j);
            Log.i("====>", info);
        }
    }while(cur.moveToNext());     
}

managedQuery最终也要将参数转换为SQL语句向SQLite发送消息,因此参数跟SQL语句很类似,所以可以在查询字段中加入SQL函数,

比如new String[] projection = new String[]{"count(*) as count"}等等。      
managedQuery中的参数依次为uri,       
查询字段          查询字段数组,也可以将所有需要查询的字段放入一个字符内   
                      比如new projection[]{"_id", "thread_id"}和new projection[]{"_id,thread_id"}是一致的。   
                      跟SQL一样,字段名不区分大小写   
条件                不带Where的SQL 条件字符,如果有参数则用?替代,比如"_id=? And thread_id = ? Or type = '1'"   
条件中的参数   参数字符数组,跟上述的条件一一对应   
排序                不带Order by排序字符串,比如_id desc, type   
如果参数为null,SQL中查询字段为“*”,相关的条件为空白

还可以用getContentResolver()获得一个ContentResolver,   
getContentResolver().query()同样返回一个Cursor对象,参数跟managedQuery一致。   
不过用ContentResolver对象去更新、删除和插入一条数据时报SecurityException。看来没有权限,在Manifest.xml中加入权限:
<uses-permission android:name="android.permission.WRITE_SMS"></uses-permission>
然后删除短信:
this.getContentResolver().delete(Uri.parse("content://sms"), "_id=?", new String[]{"3"});
删除成功。


Url中content://sms 替换成content://sms/ 也成功,但是其它url时程序报错,比如content://sms/inbox

看了一下android的源代码,sms支持的协议有:

sURLMatcher.addURI("sms", null, SMS_ALL);
sURLMatcher.addURI("sms", "#", SMS_ALL_ID);
sURLMatcher.addURI("sms", "inbox", SMS_INBOX);
sURLMatcher.addURI("sms", "inbox/#", SMS_INBOX_ID);
sURLMatcher.addURI("sms", "sent", SMS_SENT);
sURLMatcher.addURI("sms", "sent/#", SMS_SENT_ID);
sURLMatcher.addURI("sms", "draft", SMS_DRAFT);
sURLMatcher.addURI("sms", "draft/#", SMS_DRAFT_ID);
sURLMatcher.addURI("sms", "outbox", SMS_OUTBOX);
sURLMatcher.addURI("sms", "outbox/#", SMS_OUTBOX_ID);
sURLMatcher.addURI("sms", "undelivered", SMS_UNDELIVERED);
sURLMatcher.addURI("sms", "failed", SMS_FAILED);
sURLMatcher.addURI("sms", "failed/#", SMS_FAILED_ID);
sURLMatcher.addURI("sms", "queued", SMS_QUEUED);
sURLMatcher.addURI("sms", "conversations", SMS_CONVERS
ATIONS);
sURLMatcher.addURI("sms", "conversations/*", SMS_CONVERSATIONS_ID);
sURLMatcher.addURI("sms", "raw", SMS_RAW_MESSAGE);
sURLMatcher.addURI("sms", "attachments", SMS_ATTACHMENT);
sURLMatcher.addURI("sms", "attachments/#", SMS_ATTACHMENT_ID);
sURLMatcher.addURI("sms", "threadID", SMS_NEW_THREAD_ID);
sURLMatcher.addURI("sms", "threadID/*", SMS_QUERY_THREAD_ID);
sURLMatcher.addURI("sms", "status/#", SMS_STATUS_ID);
sURLMatcher.addURI("sms", "sr_pending", SMS_STATUS_PENDING);
sURLMatcher.addURI("sms", "sim", SMS_ALL_SIM);
sURLMatcher.addURI("sms", "sim/#", SMS_SIM);


其中,delete方法中支持的协议为:

SMS_ALL               根据参数中的条件删除sms表数据
SMS_ALL_ID         根据_id删除sms表数据
SMS_CONVERSATIONS_ID     根据thread_id删除sms表数据,可以带其它条件
SMS_RAW_MESSAGE              根据参数中的条件删除 raw表
SMS_STATUS_PENDING         根据参数中的条件删除 sr_pending表
SMS_SIM                                 从Sim卡上删除数据

试一下SMS_CONVERSATIONS_ID:"content://sms/conversations/3 ",删除thread_id="3", _id="5"的数据       
在eclipse中的Emulator Control中,以13800给模拟器发送三条数据,然后以13900发送一条       
this.getContentResolver().delete(Uri.parse("content://sms/conversations/3"), "_id=?", new String[]{"5"}); 
成功删除一条数据。   

在数据库中每个发送者的thread_id虽然一样,但不是固定的,如果把一个发送者的全部数据删除掉,       
然后换一个新号码发送短信时,thread_id是以数据库中最大的id+1赋值的。   


update支持的协议有很多:

SMS_RAW_MESSAGE   
SMS_STATUS_PENDING   
SMS_ALL   
SMS_FAILED   
SMS_QUEUED   
SMS_INBOX   
SMS_SENT   
SMS_DRAFT   
SMS_OUTBOX   
SMS_CONVERSATIONS   
SMS_ALL_ID   
SMS_INBOX_ID   
SMS_FAILED_ID   
SMS_SENT_ID   
SMS_DRAFT_ID   
SMS_OUTBOX_ID   
SMS_CONVERSATIONS_ID   
SMS_STATUS_ID

以SMS_INBOX_ID测试一下:   
ContentValues cv = new ContentValues();   
cv.put("thread_id", "2");   
cv.put("address", "00000");   
cv.put("person", "11");   
cv.put("date", "11111111");   
this.getContentResolver().update(Uri.parse("content://sms/inbox/4"), cv, null, null);   
太强了,连thread_id都可以修改。   


insert支持的协议:

SMS_ALL   
SMS_INBOX   
SMS_FAILED   
SMS_QUEUED   
SMS_SENT   
SMS_DRAFT   
SMS_OUTBOX   
SMS_RAW_MESSAGE   
SMS_STATUS_PENDING   
SMS_ATTACHMENT   
SMS_NEW_THREAD_ID 

向sms表插入数据时,type是根据协议来自动设置,   
如果传入的数据中没有设置date时,自动设置为当前系统时间;非SMS_INBOX协议时,read标志设置为1   
SMS_INBOX协议时,系统会自动查询并设置PERSON   
threadId为null或者0时,系统也会自动设置   

一直为造不了"发送失败"的邮件而发愁,现在来做一个:   
content://sms/failed   

ContentValues cv = new ContentValues();   
cv.put("_id", "99");   
cv.put("thread_id", "0");   
cv.put("address", "9999");   
cv.put("person", "888");   
cv.put("date", "9999");
cv.put("protocol", "0");
cv.put("read", "1");
cv.put("status", "-1");
//cv.put("type", "0");
cv.put("body", "@@@@@@@@@");
this.getContentResolver().insert(Uri.parse("content://sms/failed"), cv);
type被设置成了5,thread_id设置为1


系统连最起码的数据校验都没有做啊,google对程序员也太仁慈了。

看看能不能再挖掘一下sms的功能。先来做一个错误的查询:

getContentResolver().query( Uri.parse("content://sms/") , new String[]{"a"}, "b", null, null);

log输出错误的SQL语句:

SELECT a FROM sms WHERE (b) ORDER BY date DESC

query方法中没有Group by,如果想对短信做统计,对Cursor进行遍历再统计也太慢了。

在SQL语言中group by在Where后面,那就在条件参数中想想办法:

Android组织SQL语句时将条件两端加(),那就拼一个group by出来吧:

getContentResolver().query( Uri.parse("content://sms/") , new String[]{"count(*) as count, thread_id"}, "1=1) group by (thread_id", null, null);

那么输出的SQL= SELECT count(*) as count, thread_id FROM sms WHERE ( 1=1) group by (thread_id ) ORDER BY date DESC

如果想查询URI没有对应的表怎么办呢,比如想知道 mmssms.db数据库中有哪些表,

查询的表是URI定的,再在条件参数中拼凑肯定是不行。

那我们把目光往前移,看看在字段参数中能不能凑出来。

要查询其它表,关键要去掉系统固定添加的FROM sms,

用用SQL中的注释吧,

getContentResolver().query(Uri.parse("content://sms/"), new String[]{" * from sqlite_master WHERE type = 'table' -- "}, null, null, null);

那么输出的SQL=SELECT * from sqlite_master WHERE type = 'table' -- FROM sms ORDER BY date DESC

居然能够运行。

得寸进尺,再进一步,如果加入“;”也能运行的话,哈哈,那么建表、删除表、更新表也能为所欲为咯。

getContentResolver().query(Uri.parse("content://sms/"), new String[]{" * from sms;select * from thrreads;-- "}, null, null, null);

很可惜,只运行了第一条SQL语句,看来在关键问题上,android还是有所控制的。

不过支持--也很不错了,这样可以查询数据库中所有的表,而且还可以多表联查

2005年8月19号

2005年8月19号是我人生的一重大转折点,

从此人生被推翻了重写,然后又重构。

老爸说你就认命吧,所以继承了所有的本性;

老妈说要保重身体,所以有了一条原则,尽量少做对自己身体无益的事;

姑父说你经历了这么大的事也懂事多了,所以性格来了个大翻转,重写重写重写。

8月19号以后,学习成绩不再是大家讨论的话题,高考成绩更不能谈,虽然过了一年后,某些亲戚说要是不出事,也应该是个好大学吧,要是补习也应该是一个好大学了吧。一切已不重要了。

8月19号以后,我一个人面对了很多东西,开始觉得是不是有存在的意义。那时很多同学陪我聊天散心,周末就来看我。老师也不再过问我的成绩,叫我好好休息。那时候高考好像都与我无关。

8月19号以后,我的日常工作就是起来去医院,一个上午就没了,下午去看看书,晚上睡觉,差不多一年的时候,就这样过着。有时很想哭,但坚持着,我不想看着爸妈悲痛,也不想看同学为我伤心。记得一次大家哭的成人样了。记得一次治疗回来,我已面目全非了,某某些同学看着都心痛着,一直在安慰我,痛不痛。我说习惯了,一切皆已习惯。

8月19号以后,我很少笑了,至少很少在陌生人面前笑了。当大家都知道我发生了什么,我就可以放心的笑了。虽然笑的不是那么好看,但我真的很想像大家一样笑的那么自然。记得有时我对着镜子练习笑,但不管怎么样,我的心一直在开心的笑。快乐才是重要的。

6年了,每年的今天,我都会想起我的家人,一切支持着我,叫我不要放弃;也真正的懂得来自家人的家。还有我那些同学,那些老师,一直鼓舞着我。特别一些可爱的同学,在这就不点名了,有你们,我很高兴。谢谢家人与同学,还有老师们。谢谢。