一直对bootstrap框架有些着迷,想去学习一把,今天有些时间,花了一整天的时间,一边看文档,一边做主题,基本完成了这款基于bootstrap框架的wordpress主题pme-wp。

pme是根据域名得来的,所以主题名字就是pme-wp.

http://images.dapeng.me/dapengme/2012/04/bootstrapwordpress_1411A/pme-wp_thumb.png

目前主题也仅仅满足简单使用,其中包含的很多bug,以后慢慢修正了。

下载地址:http://www.everbox.com/f/wzTPkoagufPh9pAY62esryMkAC

一直比较喜欢世界之窗的皮肤,现在虽然转移使用了谷歌浏览器,但还保留着世界之窗的皮肤,作为纪念,也希望世界之窗浏览器能继续发展下去。

下载:http://www.everbox.com/f/ooqnonGNa4vTLAjOJhI1CDzbsT

目前网盘使用的盛大的;

115的很好用,缺点是有时间限制。

dbank的广告多的一大堆,更多时候还需要登陆,才能下载。

新浪的v盘,也是需要登陆才可以下载的。

百度网盘不能指定单一文件共享,暂时还是盛大的everbox好用一些。

Notepad++是我电脑必备经常使用的软件,在新版中还加入了Document Map功能,就是文档的缩略图,以后做跳转方面的多了,和sublimetext一样,最近也在研究sublimetext的使用。

Notepad++ 6 发布了,可通过下面地址下载:

http://notepad-plus-plus.org/download/v6.0.html

在 6 版本中,主要包含如下改进:

  1. 支持 PCRE (Perl Compatible Regular Expressions)2. 添加文档映射特性 (通过 Menu View->Document Map): Screenshot 1, Screenshot 2
  2. 改善大文件的加载性能

Notepad++ 是一款非常有特色的编辑器,是开源软件,可以免费使用。支持的语言: C, C++ , Java , C#, XML, HTML, PHP, Javascript!

http://images.dapeng.me/dapengme/2012/03/notepad6_B068/notepad6_thumb.gif

wordpress的插件多如牛毛,总有几款差距是必备的,比如下面推荐三款。

Super Switch(超级开关)

可以有选择地禁用Wordpress部分功能,或许可以使博客更快。

WP Cleaner

删除无用的修订版、自动草稿及自动保存的文章,减小空间,提高性能。有了上面的超级开关插件,WP Cleaner基本使用一次就足够了。

P3(Plugin Performance Profiler)

插件是由Godaddy发布的,它可以让你知道这些插件对你的网站速度有多大的影响.从而可以让你详细了解哪些插件占用资源最多,权衡利弊,有选择性地启用插件。插件只能运行在Firefox、Chrome、 Opera、 Safari、IE9中,不支持IE8或更低版本。

代码的使用性很强的啊!

 

让我们看看如何使用JDBC API在Java中执行批量插入。虽然你可能已经知道,但我会尽力解释基础到复杂的场景。

在此笔记里,我们将看到我们如何可以使用像Statement和PreparedStatement JDBC API来批量在任何数据库中插入数据。此外,我们将努力探索一些场景,如在内存不足时正常运行,以及如何优化批量操作。

首先,使用Java JDBC基本的API批量插入数据到数据库中。

Simple Batch - 简单批处理

我把它叫做简单批处理。要求很简单,执行批量插入列表,而不是为每个INSERT语句每次提交数据库,我们将使用JDBC批处理操作和优化性能。

想想一下下面的代码:

Bad Code

[java]    String [] queries = {
insert into employee (name, city, phone) values (‘A’, ‘X’, ‘123’),
insert into employee (name, city, phone) values (‘B’, ‘Y’, ‘234’),
insert into employee (name, city, phone) values (‘C’, ‘Z’, ‘345’),
};
Connection connection = new getConnection();
Statement statemenet = connection.createStatement();
for (String query : queries) {
statemenet.execute(query);
}
statemenet.close();
connection.close(); [/java]


这是糟糕的代码。它单独执行每个查询,每个INSERT语句的都提交一次数据库。考虑一下,如果你要插入1000条记录呢?这是不是一个好主意。


 


下面是执行批量插入的基本代码。来看看:


Good Code


[java]
Connection connection = new getConnection();
Statement statemenet = connection.createStatement();
for (String query : queries) {
statemenet.addBatch(query);
}
statemenet.executeBatch();
statemenet.close();
connection.close();
[/java]


请注意我们如何使用addBatch()方法,而不是直接执行查询。然后,加入所有的查询,我们使用statement.executeBatch()方法一次执行他们。没有什么花哨,只是一个简单的批量插入。


 


请注意,我们已经从一个String数组构建了查询。现在,你可能会想,使其动态化。例如:


[java]
import java.sql.Connection;
import java.sql.Statement;
//…
Connection connection = new getConnection();
Statement statemenet = connection.createStatement();
for (Employee employee: employees) {
String query = "insert into employee (name, city) values(‘

            + employee.getName() + ',' + employee.getCity + ');
    statemenet.addBatch(query);
}
statemenet.executeBatch();
statemenet.close();
connection.close();

[/java]

请注意我们是如何从Employee对象中的数据动态创建查询并在批处理中添加,插入一气呵成。完美!是不是?


等等……你必须思考什么关于SQL注入?这样动态创建的查询SQL注入是很容易的。并且每个插入查询每次都被编译。


 


为什么不使用PreparedStatement而不是简单的声明。是的,这是个解决方案。下面是SQL注入安全批处理。


SQL Injection Safe Batch - SQL注入安全批处理


思考一下下面代码:


[java] import java.sql.Connection;
import java.sql.PreparedStatement;
//…
String sql = "insert into employee (name, city, phone) values (?, ?, ?);;
Connection connection = new getConnection();
PreparedStatement ps = connection.prepareStatement(sql);
for (Employee employee: employees) {
ps.setString(1, employee.getName());
ps.setString(2, employee.getCity());
ps.setString(3, employee.getPhone());
ps.addBatch();
}
ps.executeBatch();
ps.close();
connection.close();[/java]


 


看看上面的代码。漂亮。我们使用的java.sql.PreparedStatement和在批处理中添加INSERT查询。这是你必须实现批量插入逻辑的解决方案,而不是上述Statement那个。


这一解决方案仍然存在一个问题。考虑这样一个场景,在您想要插入到数据库使用批处理半万条记录。嗯,可能产生的OutOfMemoryError:


[java] java.lang.OutOfMemoryError: Java heap space
com.mysql.jdbc.ServerPreparedStatement$BatchedBindValues.<init>(ServerPreparedStatement.java:72)
com.mysql.jdbc.ServerPreparedStatement.addBatch(ServerPreparedStatement.java:330)
org.apache.commons.dbcp.DelegatingPreparedStatement.addBatch(DelegatingPreparedStatement.java:171)[/java]


 


这是因为你试图在一个批次添加所有语句,并一次插入。最好的办法是将执行分批次。看看下面的解决方案


Smart Insert: Batch within Batch - 智能插入:将整批分批


这是一个简单的解决方案。考虑批量大小为1000,每1000个查询语句为一批插入提交。


[java] String sql = &quot;insert into employee (name, city, phone) values (?, ?, ?);
Connection connection = new getConnection();
PreparedStatement ps = connection.prepareStatement(sql);

final int batchSize = 1000;
int count = 0;

for (Employee employee: employees) {

ps.setString(1, employee.getName());
ps.setString(2, employee.getCity());
ps.setString(3, employee.getPhone());
ps.addBatch();

if(++count % batchSize == 0) {
    ps.executeBatch();
}

}
ps.executeBatch(); // insert remaining records
ps.close();
connection.close();[/java]

这才是理想的解决方案,它避免了SQL注入和内存不足的问题。看看我们如何递增计数器计数,一旦BATCHSIZE 达到 1000,我们调用executeBatch()提交。


希望对你有帮助。


来源:英文原文  中文编译:IT瘾原文链接

在风向吧看到360安全浏览器5beta2的版本中加入的身份认证,也去体验了一把,被流氓的给了一个未知的身份。你一个做浏览器的,做安全的,好好做你的浏览器,做你的安全,你凭什么要对我们这些博主站长的站点做认证呢?就像风向吧靖说的,这是一种越界的强制认证行为。

现在,大鹏的后院也加入了不兼容360安全浏览器的代码。

http://images.dapeng.me/dapengme/2012/03/73b00dd85e8d_B84B/20120320131036_thumb.jpg

js代码

<script>
function no360()
{
alert(‘系统检测出来你使用了360安全浏览器,请先卸载360产品后改用Chrome或firefox等再行访问本站,谢谢合作!’);
document.execCommand("stop");
location.href="http://fengxiangba.com/no360.html&quot;;
//注:将上面的//去掉,把后面的网址改成你的网站,弹出窗口后就会跳到你指定的网址
}
var f=false;if(navigator.userAgent.toLowerCase().indexOf("360se")>-1){f=true;}try{if(window.external&&window.external.twGetRunPath){var r=external.twGetRunPath();if(r&&r.toLowerCase().indexOf("360se")>-1){f=true;}}}catch(ign){f=false;}f&&(no360());
</script>


.htaccess屏蔽代码

RewriteCond %{HTTP_USER_AGENT} 360SE [NC] RewriteCond %{HTTP_HOST} =www.bstaint.net RewriteRule ^(.*)$ http://labs.bstaint.net/break.html [L,R]


php屏蔽代码

<?php $str=$_SERVER[‘HTTP_USER_AGENT’]; if(stripos($str, "360SE") > 0): header(‘Location: http://labs.bstaint.net/break.html‘); endif; ?>


代码提供:

http://fengxiangba.com/is-not-compatible-with-the-code-of-360-secure-browser.html

另外一篇关于360浏览器认证的文章

360浏览器要认证谁

Anytodo 是一款chrome浏览器的插件,可以与google task进行同步,进行任务管理。

我的手机是安装的gtasks的免费版本,是足够使用的了,Anytodo的使用,也弥补了google task没有桌面的管理的空缺,推荐使用。

Anytodo是一个基于html5的离线便签应用,可方便的与Google Tasks进行同步,主要功能包括:


1. 双击空白处快速添加便签;


2. 双击便签简单编辑内容;


3. 点击编辑按钮,支持富文本编辑;


4. 更换便签颜色;


5. 拖动改变位置和大小;


6. 更换主题;


7. 离线访问;


8. 后台同步;


9. 定时提醒;

http://images.dapeng.me/dapengme/2012/03/-Anytodo---html5_13F4A/Anytodo_thumb.jpg

Anytodo目前最新版本为1.1.1,更新内容如下:


1. 添加了处理时间的同步;


2. 修正了富文本编辑后,提醒和日期显示错误;


3. 修复了同步中的一些问题,提高了同步效率;

项目地址:http://code.google.com/p/any-todo/

下载插件:Anytodo-1.1.1.crx   1.5 MB

2012-03-26 17:39 更新

Anytodo 1.1.2,可以从Chrome App Store现在安装了:

安装地址:

https://chrome.google.com/webstore/detail/maidakogkfgehlikodkefhfefnmfaiig

 

对于程序员来说,最终的也是最基本的目标就是能写出一手好的代码。随着代码量的增长,自身对什么是好的代码的认识也渐渐有了不断的调整。

 

1 注释真的那么重要么?

最好的注释就是代码。这句话确实是没有错误的。如果一个函数占用了一屏的版面,原因是由于各种各样的注释和解释性的 // ** 等说明文档,确实是比较恼人的。与其花过多的时间花精力在注释和说明的编写上面,不如花时间在变量名的编写上面。

 

不能说没有注释的代码一定是天书。在程序员界来说,其实有许多是大家默认的约定,以php为例子

如果说function getMsgBySsn($msgid, $ssn)

function getMsgs($msgids);

这样的语句其实不用注释完全是可以的。

 

这说明好的变量名和函数名是最好的注释!

在做一个完整的项目的时候,看代码的过程中其实就是接受作者潜意识规约的过程。

如果一个大的项目,所有的数据结构都使用一致的变量名,$msg, $chg, 那么这些变量名就已经赋予了完整的定义了。

比如在一个项目中,在所有表示“消息”这个概念的地方,不管是参数还是返回值,完全都只使用$msg这么一个array()

那么,虽然我没有在每个引用的地方加大篇幅说明$msg中的key和value是什么,只要读者追着看到这样的函数:

function getMsg()
{
$msgid = self::getMsgid()
return array(

‘msgid’ =&gt; $msgid,
'ssn'      =&gt; self::getSsn($msgid),
'title'      =&gt; self::getTitle($msgid),

);

}

是不是/ Msg包含 msgid,ssn,title /这样的注释更好呢?


当然,好代码在变量都一定会遵循的规则是:一个项目一个意思的东西,一定只有一个规定的变量名


好的代码会由于一个或两个变量名起的不对而不惜一次一次的svn commit,最后出现的代码一定不会让你失望的。


 


2 代码的简洁性


你总是能感叹到为什么有的人写的代码是这么让人舒服。


让代码简单并不是一件容易的事情。这需要相当的代码能力才能有这样的能力。


比如这么一个函数,明明可以更简单的:


function example()
{
$iMsgid = $this->getMsgid();
$sTitle = $this->genTitle($iMsgid);
$sContent = $this->genContent($iMsgid);
$result = array(
‘msgid’ => $iMsgid,
‘title’ => $sTitle,
‘content’ => $sContent,
);
return $result;
}


我宁可选择写成这样:


function example()
{
$msgid = $this->getMsgid();
$title = $this->genTitle($msgid);
$content = $this->genContent($msgid);
return compact(‘msgid’, ‘title’, ‘content’);
}


不妨能不能用更少的代码行数写出一样功能性的代码。


代码的量一旦减少,给的信息就是:犯错的概率也更少了


 


最近在新项目组有几个感想:


1


以前经常觉得有很多函数必须要很详细的参数说明什么的,其实大都都是可以使用OO的方法来使代码更优美


比如function($msgid, $title, $content, $ssn)


为什么不是使用function($msg)呢?


开始我认为,$msg这样传入并不知道里面包含的key和value是什么,对代码的阅读性造成障碍


但是后来想想,其实这是因为我在阅读到这个函数的时候并没有$msg是一个对象的概念,也就是前面的代码并没有在人的潜意识里面栽种下这个对象的概念。那么前面的代码应该改了…………


2 好的代码不是一次性写出来的,一定是一次一次svn commit堆积出来的,你会看到某大牛为了一个空格,一个文件名是使用cron还是shell, 一个变量名(比如getMsg($Msgid) => getMsg($msgid))而进行一次又一次的改动


最后得出的代码真的是“干净”的!


 


原文网址:http://www.cnblogs.com/yjf512/archive/2012/03/15/2399532.html