2012年11月

[caption id="" align="alignright" width="283"] Blockly[/caption]

如果你已经非常习惯在编辑器里搞字符的编程方式,不防尝试一下这个类似组合拼图的可视化编程。

Blockly是一google code下面一个开源项目,它可以让你的编程像是在玩拼图一样。它提供了Command, Control, Logic, Text等基础模块,使用这些模块可以拼装出最后的程序。

Blockly提供了一个迷宫,可以马上体验一下可视化编程带来的乐趣,传送门:http://blockly-demo.appspot.com/blockly/demos/maze/index.html

我尝试做了一个示例:

算法很简单,就是一直沿着小人左手的方向行走,按这个算法edishonH也给了个示例,代码比我的精简些:

有兴趣的可以自已去尝试一下。

  1. 网站根目录的属性不能为777(这是很危险的设置),请修改为755
  2. 你当前php的文件所在的文件夹属性不能为777
  3. 其他cache文件夹777无所谓
  4. .htaccess文件错误,请将其重名了之后看看是否还有错误
  5. php文件的属性应该0644,否则会500错误,owner为您自己的cpanel账户,如果不是也会500错误
  6. 登陆cpanel,进入对应网站的目录,寻找error_log,打开这个文件,查看错误原因
  7. 其他可能情况

项目地址:Simperf
Simperf 是一个简单的性能测试工具,它提供了一个多线程测试框架

Example:

1. 在代码里使用Simperf
[code lang="java"]
Simperf perf = new Simperf(50, 2000, 1000,
new SimperfThreadFactory() {
public SimperfThread newThread() {
return new SimperfThread();
}
});
// 设置结果输出文件,默认 simperf-result.log
perf.getMonitorThread().setLogFile("simperf.log");
// 开始性能测试
perf.start();
[/code]

2. 在命令行里使用Simperf
[code lang="java"]
public class SimperfCommandTest {
public static void main(String[] args) {
SimperfCommand simCommand = new SimperfCommand(args);
Simperf perf = simCommand.create();
if (perf == null) {
// 参数解析失败时会返回null
System.exit(-1);
}
perf.start(new SimperfThreadFactory() {
public SimperfThread newThread() {
return new SimperfThread();
}
});
}
}
[/code]
执行命令:

[code lang="shell"]
java SimperfCommandTest -t 10 -c 10 -i 1000
参数说明:
usage: SimperfCommand options
-c,--count [*] number of each thread requests count
-i,--interval [ ] interval of print messages, default 1000
-j [ ] generate jtl report
-l,--log [ ] log filename
-m,--maxtps [ ] max tps
-t,--thread [*] number of thread count
[/code]

3. 在Junit4里使用Simperf
[code lang="java"]
public class SimperfTestCaseTest extends SimperfTestCase {
private Random rand;
@Test
@Simperf(thread = 2, count = 5, interval = 1000)
public void testXxx() {
try {
Thread.sleep(1000);
} catch (Exception e) {
}
boolean result = rand.nextInt(10) > 1;
Assert.assertTrue("随机生成结果", result);
}
}
[/code]