一直对bootstrap框架有些着迷,想去学习一把,今天有些时间,花了一整天的时间,一边看文档,一边做主题,基本完成了这款基于bootstrap框架的wordpress主题pme-wp。
pme是根据域名得来的,所以主题名字就是pme-wp.
目前主题也仅仅满足简单使用,其中包含的很多bug,以后慢慢修正了。
赵鹏的书院
一直对bootstrap框架有些着迷,想去学习一把,今天有些时间,花了一整天的时间,一边看文档,一边做主题,基本完成了这款基于bootstrap框架的wordpress主题pme-wp。
pme是根据域名得来的,所以主题名字就是pme-wp.
目前主题也仅仅满足简单使用,其中包含的很多bug,以后慢慢修正了。
一直比较喜欢世界之窗的皮肤,现在虽然转移使用了谷歌浏览器,但还保留着世界之窗的皮肤,作为纪念,也希望世界之窗浏览器能继续发展下去。
下载: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 版本中,主要包含如下改进:
Notepad++ 是一款非常有特色的编辑器,是开源软件,可以免费使用。支持的语言: C, C++ , Java , C#, XML, HTML, PHP, Javascript!
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批量插入数据到数据库中。
我把它叫做简单批处理。要求很简单,执行批量插入列表,而不是为每个INSERT语句每次提交数据库,我们将使用JDBC批处理操作和优化性能。
想想一下下面的代码:
[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条记录呢?这是不是一个好主意。
下面是执行批量插入的基本代码。来看看:
[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注入安全批处理。
思考一下下面代码:
[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]
这是因为你试图在一个批次添加所有语句,并一次插入。最好的办法是将执行分批次。看看下面的解决方案
这是一个简单的解决方案。考虑批量大小为1000,每1000个查询语句为一批插入提交。
[java] String sql = "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()提交。
希望对你有帮助。
在风向吧看到360安全浏览器5beta2的版本中加入的身份认证,也去体验了一把,被流氓的给了一个未知的身份。你一个做浏览器的,做安全的,好好做你的浏览器,做你的安全,你凭什么要对我们这些博主站长的站点做认证呢?就像风向吧靖说的,这是一种越界的强制认证行为。
现在,大鹏的后院也加入了不兼容360安全浏览器的代码。
js代码
<script>
function no360()
{
alert(‘系统检测出来你使用了360安全浏览器,请先卸载360产品后改用Chrome或firefox等再行访问本站,谢谢合作!’);
document.execCommand("stop");
location.href="http://fengxiangba.com/no360.html";
//注:将上面的//去掉,把后面的网址改成你的网站,弹出窗口后就会跳到你指定的网址
}
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>
RewriteCond %{HTTP_USER_AGENT} 360SE [NC] RewriteCond %{HTTP_HOST} =www.bstaint.net RewriteRule ^(.*)$ http://labs.bstaint.net/break.html [L,R]<?php $str=$_SERVER[‘HTTP_USER_AGENT’]; if(stripos($str, "360SE") > 0): header(‘Location: http://labs.bstaint.net/break.html‘); endif; ?>
Anytodo 是一款chrome浏览器的插件,可以与google task进行同步,进行任务管理。
我的手机是安装的gtasks的免费版本,是足够使用的了,Anytodo的使用,也弥补了google task没有桌面的管理的空缺,推荐使用。
Anytodo是一个基于html5的离线便签应用,可方便的与Google Tasks进行同步,主要功能包括:
1. 双击空白处快速添加便签;
2. 双击便签简单编辑内容;
3. 点击编辑按钮,支持富文本编辑;
4. 更换便签颜色;
5. 拖动改变位置和大小;
6. 更换主题;
7. 离线访问;
8. 后台同步;
9. 定时提醒;
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’ => $msgid,
'ssn' => self::getSsn($msgid),
'title' => 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