短视频分享应用 Vine 登陆 Android,总用户已逾1300万

今天,Twitter 旗下移动视频摄制和分享应用 Vine 终于登陆?Android 平台;它几乎支持所有的?iOS特性,比如允许用户摄制时间只达6秒的简洁视频、且支持自动循环播放功能等。

如果你以前体验过 iPhone 版 Vine,那你应该清楚它的具体使用步骤。Vine 可以让用户像使用微信对讲功能一样录制视频,简单易学;而它会在时间录满后自动将内容分享至 Vine 信息流中,或绑定的 Facebook 和 Twitter 账户上。另外,Android 版 Vine 的导航服务也非常浅显易懂,分别为:关注用户更新的 Feed、接收通知的 Activity、发现有趣内容的 Explore 以及浏览以前视频的 Profile。

尽管如此,Twitter 也承认称,iOS 和 Android 客户端之间内容的同步“并不十分完美”,因为有部分服务暂未开放给 Android 用户。不过,该公司承诺将会在“数周内”更新 Android 版本,并将修正对前置摄像头的支持,同时提供更好的搜索功能和提升主题标签服务等。

此外,Twitter 还宣布称 Vine 的总用户数已突破了1300万。

Create a Personal VPN Server with Amazon EC2 Cloud


# sudo apt-get install pptpd
# sudo vi /etc/pptpd.conf : uncomnt remote put on local put private IP > local
# sudo vi /etc/ppp/pptpd-options : uncomnt ms-dns add google
# sudo vi /etc/sysctl.conf : uncomnt net.ipv4.ip_forward=1
# sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# sudo vi /etc/rc.local : paste iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# sudo vi /etc/ppp/chap-secrets

SQL Server Transact-SQL 编程

T-SQL语句用于管理SQL Server数据库引擎实例,创建和管理数据库对象,以及查询、插入、修改和删除数据。
? 变量
1、 局部变量(Local Variable)
局部变量是用户可以自定义的变量,它的作用范围是仅在程序内部,在程序中通常用来储存从表中查询到的数据或当做程序执行过程中的暂存变量。使用局部变量必须以@开头,而且必须用declare命令后才能使用。
基本语法:
声明变量

declare @变量名 变量类型 [@变量名 变量类型]

为变量赋值

set @变量名 = 变量值;
select @变量名 = 变量值;

示例:
–局部变量

declare @id char(10)--声明一个长度的变量id
declare @age int --声明一个int类型变量age
select @id = 22 --赋值操作
set @age = 55 --赋值操作
print convert(char(10), @age) + '#' + @id
select @age, @id
go

简单hello world示例

declare @name varchar(20);
declare @result varchar(200);
set @name = 'jack';
set @result = @name + ' say: hello world!';
select @result;

继续阅读 SQL Server Transact-SQL 编程

Defy电池跳电详解

翻译自xda-developer论坛一位乌克兰的网友,原帖地址
http://forum.xda-developers.com/showthread.php?t=1778492
最近很多人刷完新ROM后都遇到了MOTO公司Defy手机电池跳电的现象。比如,电量突然从67%跳到49%,从34%跳到19%,从7%跳到4%等等。
使用官方2.2系统一年多后我也改刷了CM7.2系统,刷完系统我也碰到了跳电问题。于是我在网上各种论坛搜索跳电问题的解决方法,然而没有任何一种方法有实际效果。
终于,在做了很多试验后,我发现了一些有意思的理论来解释电池跳电的缘由。
我们的Defy有一个非常简单的电池控制系统(被MOTO称作cpcap系统)。这个系统只提供电池的实时电压和电流,并不计算或者提供电池百分比信息。安卓系统上进行这项工作的是battd守护进程,它使用一套非常非常复杂的估算方法对电池剩余百分比进行计算(我在battd源码中看到了Coulomb计数方法—Coulomb counter technique)。
5%、20%、50%、80%、100%这几个百分比是电池的电量检测点,而battd提供的是这几个检测点中间的百分比与电池电压的对应关系。当电池电压下降到一个电量检测点时,电量百分比会一下子跳到对应的检测点时的百分比。而其他所有的电量百分比是由battd结合电池电压进行估算得到的。这个估算方法与电池最大容量(从电池本身属性得到)和电池有效电流相关。一个Defy官方原配电池显示是1500mAh,而我的一个中国1700mAh的电池仅显示为1200mAh(应该就这么多,中国山寨电池,你懂的——译者注)。battd把最后计算出的电量百分比和电池电压存放在/data/battd/cc_data文件中。cc_data文件中的信息在开机的时候被读取,读取出的电量百分比成为开机后系统的基准百分比。电池使用过程中,电量百分比也随之减少。当你删除了cc_data并重启后,battd利用实时电池电压寻找最近的电量检测点的电压值并显示对应的电量百分比。
我是如何发现上面提到的电量检测点值的呢?
假设我们有一个全新的原装Defy电池,电量剩余25%。
如果你删除了cc_data文件并且重启,battd将重新创建这个文件并向电池控制系统请求当前电池状态。电池控制系统将返回50%这个值,battd显示出49%(是49%而不是50%,因为这个值受复杂计算过程中的一次最小的整数取整结果影响)。但是电池实际剩余电量是25%!现在让电池放电,系统会显示48%,47%,46%等等。好,但是在40-44%的时候电池电量百分比会立刻跳到19%,因为电池控制系统会告诉battd电池实际剩余20%,这样就会让battd强制把它的估计值替换为电池控制系统提供的实际值。
当一个电池本身的最大容量因为使用次数增加而减少的时候,比如说1500mAh的电池可能使用一年后容量会变成1300mAh。但是电池依然报告给系统它是一块1500mAh的电池,battd就根据报告的值来进行百分比的计算。对于这块有损耗的电池来说,battd本应该让计算出的电量百分比减少得更快一些,但实际上它还是使用了和全新的1500mAh一样的百分比减少的速度。当电池电压达到一个电量检测点时,battd就立刻把电量百分比更新为检测点的百分比值,从而就出现了一次跳电。
battd与/pds/public/battd文件夹中的电池信息有一定的关系。这个文件夹中的数据帮助battd更准确地估计电量百分比,文件夹中含有三个文件:

  1. batt_offset_data
  2. batt_phasing_data
  3. batt_tuning_data

没有这几个相关的文件,即使在使用全新的电池时,你也可能遇到轻微的跳电现象。
对于Defy来说,至少有2个版本的battd守护进程(Defy+使用的是另一个battd)。我们简单的将2个版本的battd文件称作新版和旧版。你通过查看/data/battd/cc_data文件的大小可以判断你使用的是哪个版本。

  1. cc_data = 16 bytes – 旧版,
  2. cc_data = 24 bytes – 新版。

早期的官方2.2系统使用的是旧版,新一些的官方系统用的是新版的battd。CM7.2使用的就是新版的。
不同的battd版本在电量计算的过程中有区别吗?答案是肯定的。区别在于battd这个守护进程是由哪个用户运行的。
旧版的battd使用了mot_accy账户运行,而新版的battd使用的是system账户。/pds/public/battd文件夹和其中文件的所有者和用户组应该被设置成与battd版本相对应的账户,否则battd将没有足够的权限从/pds/public/battd文件夹读取电池数据,这就意味着battd将使用默认的电池数据,从而导致不准确的电池剩余电量百分比的估计。
如果你是用的是官方的2.2系统或者更老的系统,你的battd就是旧版的。/pds/public/battd文件夹的权限应该设置成mot_accy账户所有。
然后你又安装了使用新版battd的CM7.2系统,系统就不能从/pds/public/battd文件夹读取电池数据了,因为新版的battd使用了system用户运行。这样即使你使用一个全新的电池,你的电量百分比也会不准确。
这就是为啥一些机友在CM7.2系统中替换旧版的battd(和对应的lib-libbattd.so)后解决了电池跳电的问题。
如果你在使用CM7.2或者一些更新的CM系统,简单的把/pds/public/battd文件夹和其中文件的所有者和用户组改成system就可以让新版的battd读取电池信息,一定程度解决跳电问题。
如果你的手机依然跳电,这就意味着你的电池已经有一定程度的损耗了,battd不能准确在电量检测点间准确的估计电池电量百分比。
是否有可能解决这个问题?答案是有可能。
我曾经可以修改电量检测点的电压值并消除了到达电量检测点的跳电问题。但是!电池消耗速度仍然和原来一样,所以导致我从100%到10%都没有跳电问题,而手机在10%时自动关机了,因为这时电池电压已经减少到了3.050V(在电池这个电压下就不能提供手机正常运行的电压了)。
通过修改/pds/public/battd/batt_offset_data文件来修改电量检测点的电压。我把最后的3个byte修改成0xA0,这样就调整了50%、20%和5%对应的电压。
battd_phasing_data文件在我的测试中没有任何作用,这个文件中包括了显示电压、温度、电流修正值。
battd_tuning_data文件不知道是干嘛用的。
所以现在的目标就是找到一种方法强制让电量减少速度与电池损耗程度相协调。最简单的方法就是修改battd,不让它从电池上读取电池容量,而是读取指定的电池容量(例如1300mAh)。
另一种更好的方法是使用自定义的电池驱动,简单地让电池电压和电量百分比对应起来。触摸版的bootmenu使用的就是这种方法,Quarx(Q大)也曾经在他的git上面建立了自定义电池驱动的条目。
重要事项:
电池校准是一个谜!/data/system/batterystats.bin文件和电池充电、寿命、状态无关,这一点Google的工程师也提到过。
对于我们的Defy来说,最好将电池充电到100%后再冲一会儿电。然后断开充电器(电脑),电池电量应该会正确地显示为99%。这就是我们充电时候需要做的事情,不要在电池校准过程中浪费太多时间!
总结:

  • 查看你使用的battd版本。
  • 检查/pds/public/battd文件夹和其中文件的所有者。修改所有者和用户组如果需要。
  • 将你的电池充电至100%,然后在持续充电若干小时。

如果你仍然有跳电现象,说明你的电池已经损耗到一定程度了。跳电百分比的总量表明了你电池相对一个新电池的损耗程度。这时候实际上没有任何可以提高电池寿命的好方法。跳电现象是Defy使用便宜的电池控制系统和Defy不准确的电量估计逻辑的结果。这就是为什么官方的系统只有电量10%的步进——去隐瞒隐藏一些问题。

帝国CMS当前栏目高亮显示

找到e/class/userfun.php,加入下面代码

function currentPage($classid,$thisid){
        global $class_r;
        $fr=explode('|',$class_r[$classid][featherclass]);
        $topbclassid=$fr[1]?$fr[1]:$classid;//取得第一级栏目id
        if ($topbclassid==$thisid) {
                  echo "menuon";
                }
                else {
                }
}

menuon是CSS样式名,可自己定义
导航这样写

?[e:loop={'select classid,classname,classpath from [!db.pre!]enewsclass where bclassid=0 and showclass=0 order by myorder',0,24,0}]
<li id="cid<?=$bqr[classid]?>" class="<?=currentPage($GLOBALS[navclassid],$bqr[classid])?>">
<a href="&lt;?=$public_r[newsurl]?&gt;&lt;?=$bqr[classpath]?&gt;" title="<?=$bqr[classname]?>" target="_self"><?=$bqr[classname]?></a>
</li>
[/e:loop]

OK了

成为优秀程序员的10点建议

这篇文章要介绍的,是我作为专业程序员这些年来学到的能真正提高我的代码质量和整体工作效率的10件事情。
1. 永远不要复制代码
不惜任何代价避免重复的代码。如果一个常用的代码片段出现在了程序中的几个不同地方,重构它,把它放到一个自己的函数里。重复的代码会导致你的同事在读你的代码时产生困惑。而重复的代码如果在一个地方修改,在另外一个地方忘记修改,就会产生到处是bug,它还会使你的代码体积变得臃肿。现代的编程语言提供了很好的方法来解决这些问题,例如,下面这个问题在以前很难解决,而如今使用lambdas却很好实现:
1
现在我们重构含有部分相同代码的函数,用delegate模式重写它们:
2
2. 留意你开始分心的时候
当你发现自己在浏览facebook或微博、而不是在解决问题,这通常是一种你需要短暂休息的信号。离开办公桌,去喝一杯咖啡,或去跟同事聊5分钟。尽管这样做看起来有点反直觉,但长久去看,它会提高你的工作效率。
3. 不要匆忙赶任务而放弃原则
当带着压力去解决一个问题或修改一个bug,你很容易失去自制,发现自己匆匆忙忙,甚至完全忘了一直坚持的重要的测试过程。这通常会导致更多的问题,会让你在老板或同事眼里显得很不专业。
4. 测试你完成的代码
你知道你的代码能做什么,而且试了一下,它确实好用,但你实际上需要充分的验证它。分析所有可能的边界情况,测试在所有可能的条件下它都能如期的工作。如果有参数,传递一些预期范围外的值。传递一个null值。如果可能,让同事看看你的代码,问他们能否弄坏它。单元测试是到达这种目的的常规方法。
5. 代码审查
提交你的代码之前,找个同事一起坐下来,向他解释你做了哪些修改。通常,这样做的过程中你就能发现代码中的错误,而不需要同事说一句话。这比自己审查自己的代码要有效的多得多。
6. 精简代码
如果你发现写了大量的代码来解决一个简单的问题,你很可能做错了。下面的boolean用法是一个很好的例子:
3
这时你应该写成这样:
4
代码越少越好。这会使bug更少,重构可能性更小,出错的几率更小。要适度。可读性同等重要,你可不能这样做而使代码丧失可读性。
7. 为优雅的代码而努力
优雅的代码非常的易读,只用手边很少的代码、让机器做很少的运算就能解决问题。在各种环境中都做到代码优雅是很难的,但经过一段时间的编程,你会对优雅的代码是个什么样子有个初步的感觉。优雅的代码不会通过重构来获得。当你看到优雅的代码是会很高兴。你会为它自豪。例如,下面就是一个我认为是优雅的方式来计算多边形面积的方法:
5
8. 编写不言自明的代码
勿庸置疑,注释是编程中很重要的一部分,但能够不言自明的代码跟胜一筹,因为它能让你在看代码时就能理解它。函数名变量名要慎重选择,好的变量/方法名字放到语言语义环境中时,不懂编程的人都能看懂。例如:
6
9. 不要使用纯数字
直接把数字嵌入代码中是一种恶习,因为无法说明它们是代表什么的。当有重复时更糟糕——相同的数字在代码的多个地方出现。如果只修改了一个,而忘记了其它的。这就导致bug。一定要用一个命名常量来代表你要表达的数字,即使它在代码里只出现一次。
10. 不要做手工劳动
当做一系列动作时,人类总是喜欢犯错误。如果你在做部署工作,并且不是一步能完成的,那你就是在做错事。尽量的让工作能自动化的完成,减少人为错误。当做工作量很大的任务时,这尤其重要。
11. 避免过早优化
当你要去优化一个已经好用的功能代码时,你很有可能会改坏它。优化只能发生在有性能分析报告指示需要优化的时候,通常是在一个项目开发的最后阶段。性能分析之前的优化活动纯属浪费时间,并且会导致bug出现。
好吧,我说是10个,但你却得到了额外赠送的一个!
这些就是我要说的,我希望它们能帮助你改进编程开发过程。
下次再见!祝快乐!
Cheers, Paul.
英文链接:www.wildbunny.co.uk/blog/2012/11/01/10-steps-to-becoming-a-better-programmer/
来源:外刊IT评论网

网络购票秘技

12306网购火车票的同学,如果出现页面加载缓慢,可以在
C:WINDOWSsystem32driversetchosts
中添加一条记录:
“122.228.243.22 dynamic.12306.cn”,
或者”61.183.42.94 dynamic.12306.cn”,
这是提供给海外用户访问的CDN节点,几乎没什么人。