Sublime Text 2
Sublime Text 2 是一个跨来台编辑器,在易用性与功能方面都做的很不错,不过它的授权有些贵。在Windows下面的破解方法已经比较多了,但网上流传的Linux破解方法多少有些问题。现在将自已在Linux下的破解过程记录一下。

Linux 下的Sublime Text 2 版本:2.0.1 Build 2217。

1. 去其官方网站http://www.sublimetext.com/ 把linux版下载下来,解开压缩包,放在你希望的路径下。
2. 进入安装目录,将 sublime_text 备份一下
3. 转换为16进制文本

[code lang="shell"]xxd sublime_text > sublime_text.xxd[/code]

4. vim打开 sublime_text.xxd
向后搜索文本:

[code]/4333 3342 3032[/code]

或搜索:

[code]/B31E5BE509C33B02[/code]

(另一种搜索方式:先搜索文本 Thanks 再搜索 3342 ,总之能定位到正确的 3342 位置就可以了)
5. 将 4333 3342 3032 修改为 4333 3242 3032 ,并保存退出
6. 将16进制文本转为二进制可执行文件

[code lang="shell"]xxd -r sublime_text.xxd sublime_text.new[/code]

7. 修改执行权限

[code lang="shell"]chmod 755 sublime_text.new[/code]

8. 运行 sublime_text.new,在 Help->Enter Licence 中输入以下Licence,点击确定就可以了。
可以使用的Licence:

[code]
—–BEGIN LICENSE—–
China
Unlimited User License
EA7E-2861
BE67D2175D3569FDAB9EB5340FAD2822
E7B56B3397A76AA9FBE8AC3D3C65918B
DFC28F2EA158140D9E07853D594818EB
3A237B2E8E98ED257C269548F50EDA34
EF0C7F72D8917DB538A0245E46BFD6B1
85F4EDE331F253530ED67A5C19E92399
04C5F4A1AF4AF3DB5EC49C1FEE17CA76
7E369F8AAE4AC6C6E756B5882E1608B9
—–END LICENSE—–

—–BEGIN LICENSE—–
USA
Unlimited User License
EA7E-1640
763D05839CA08BDA7B0103B5BABF0150
195EE53CC33B569858AFD553F080A9BC
1F678C88A1342AC92CA596FE775E7014
5A0EE55DC2F8DE3C4ED6B5B02FD4DB3C
493FCE3EE61FC0588CDAFAAD731BB47F
FD047777D02A5BE92202B3D3EB59A696
A69DFEF6687D16FCD4443556912A1F62
82DA125263C5BC270CEE7664B5D0CEB9
—–END LICENSE—–

—–BEGIN LICENSE—–
A
Unlimited User License
EA7E-20708
A7281D6781626F2A37D6355121079ACA
DF60119B9D27D4CBDA75FA63D633A671
9521D96D375D8DD95DF3F89231E38F8D
459374CC62D1C1B410C0BDFD2503670E
603BB1DCA7D20E85B0AF19BAE0A59822
F7B1F83659D4D7787C4F040FE9402FCD
B9608A9012BDA8B65524B4DEDE4C00D0
76461448E2AAEC027060C26B038D502B
—–END LICENSE—–

—–BEGIN LICENSE—–
B
Unlimited User License
EA7E-13207
B5C54DD7413302E87A9ED4155E90D5E0
684F7A34714D278ABE2731F0270034E2
9722AEC71E04043C0E9D4496D1DA161B
D76CE81501A247F3E03F57D6EC1E76AE
12BE9CD453D1E651AF4BD187CC10FEB0
EB24FBAB7511F2F37E5F745D13D0641F
7D1BEEE98A9646A02B616BF98EB43F84
B04029D72C610086A666DB318A526A2F
—–END LICENSE—–

—–BEGIN LICENSE—–
Love
Unlimited User License
EA7E-8441
918381ACA844A0379CCAC729059720A4
BC9D409098618744BB45FF23E67568DB
82B926D92157127DB3B4054834D0477F
DD9C2B251A57F2E3259E04AD9B7DB8B8
1778C37C1D3B494671C5F4ECFBD2B519
361CD9624A56C21F54F8DD51F5BDF799
68F9537ED74680494853423904F032BA
3E896607B4D398E8C897A4DD1A8CB449
—–END LICENSE—–

—–BEGIN LICENSE—–
NightM
Unlimited User License
EA7E-5177
8125006DCD9E513CD4F1C217CAD3801D
E72D3130CA1F04CFEDF3696C0F68553D
DC42B172E38962890A87035FCE26049F
15EFA09D4BCC811617915165959A499F
402866AFC08E72615336D863968B60FB
C9167F72F4B25ED5E8E593D2E19F43E7
C7EC9F459EA62F1DD1757DC9967C4801
8E48683A4F0F9CAC3CC0621F2D48292F
—–END LICENSE—–
[/code]

在Java中获取Classloader加载的所有类
[code lang="java"]
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
Class<?> cla = classLoader.getClass();
while (cla != ClassLoader.class)
cla = cla.getSuperclass();
Field field = cla.getDeclaredField("classes");
field.setAccessible(true);
Vector<?> v = (Vector<?>) field.get(classLoader);
for (int i = 0; i < v.size(); i++) {
System.out.println(((Class<?>) v.get(i)).getName());
}
[/code]

目前应用中,测试代码总体上分为三类:
1.开发人员写的单元测试。此类测试代码通常与开发代码放在同一个工程下,用于测试一些功能方法,业务逻辑,通常使用JUnit做为测试框架。
2.开发人员写的冒烟测试。此类测试代码通常放在Maven项目的xxx-test-test工程下,主要用于交付测试,主要业务逻辑的冒烟测试,一般会使用JUnit做为测试框架
3.测试人员写的集成测试。这类测试用例与脚本一般比较多,使用到的集成测试的框架是在TestNG基础上的。
以上三种测试代码在maven的test阶段执行时需要做以下配置:
总控pom.xml:
[code lang="xml"]
<build>
<plugins>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.4</version>
<configuration>
<includes>
<include>**/*Test.java</include>
</includes>
<testFailureIgnore>true</testFailureIgnore>
</configuration>
</plugin>
[/code]
这个配置指定了所有的单元测试的脚本。此时执行测试mvn test会以执行所有以Test.java结尾的测试代码,而集成测试的脚本也符合这个规则,所以会被执行到。但我们通常会自已去指定一些surefire插件的配置工作,使用上面这个配置显然不够用,下面是我们在xxxx-test-test工程下通常使用的配置:
测试工程xxxx-test-test/pom.xml:
[code lang="xml"]
<build>
<plugins>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.4</version>
<configuration>
<suiteXmlFiles>
<suiteXmlFile>src/test/resources/testng.xml</suiteXmlFile>
</suiteXmlFiles>
<testFailureIgnore>true</testFailureIgnore>
</configuration>
</plugin>
</plugins>
</build>
[/code]
上面的配置可以执行集成测试代码,但这样配置之后在xxxx-test-test之下的冒烟测试不会执行,原因是这里的覆盖了总控pom.xml下的配置。
下面尝试重新配置如下:
[code lang="xml"]
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.4</version>
<configuration>
<suiteXmlFiles>
<suiteXmlFile>src/test/resources/testng.xml</suiteXmlFile>
</suiteXmlFiles>
<includes>
<include>**/*Test.java</include>
</includes>
<testFailureIgnore>true</testFailureIgnore>
</configuration>
</plugin>
[/code]
经过测试,这种配置方法只会执行集成测试(TestNG)的内容。这可能是因为在surefire插件的一个执行线程之内只能使用一种方式执行。那么自然想到将JUnit与TestNG两种分开配置,经过几次实验可以得到如下配置成功执行单元测试,冒烟测试与集成测试的内容:
[code lang="xml"]
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.4</version>
<configuration>
<!-- 先将所有的测试脚本排除在外,用以覆盖总控pom.xml中的<include>**/*Test.java</include>配置,如果没有这个配置,可能会重复执行一次冒烟测试的内容 -->
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</configuration>
<executions>
<execution>
<id>test-junit</id>
<phase>test</phase>
<goals>
<goal>test</goal>
</goals>
<configuration>
<testNGArtifactName>none:none</testNGArtifactName>
<!-- 专门配置冒烟测试,必须将冒烟测试(JUnit)的脚本准确包含进来,并且需要包含<excludes>排除掉TestNG脚本,用于覆写第一处的<exclude>**/*.java</exclude>,否则会被<exclude>**/*.java</exclude>影响到而不执行任何JUnit的测试 -->
<includes>
<include>**/*Test.java</include>
</includes>
<excludes>
<exclude>**/servicetest/**/*.java</exclude>
</excludes>
<testFailureIgnore>true</testFailureIgnore>
</configuration>
</execution>
<execution>
<id>test-testng</id>
<phase>test</phase>
<goals>
<goal>test</goal>
</goals>
<!-- 专门配置TestNG测试脚本,将需要执行的测试集写在 <suiteXmlFiles> 所指定的xml文件中即可 -->
<configuration>
<junitArtifactName>none:none</junitArtifactName>
<suiteXmlFiles>
<suiteXmlFile>src/test/resources/testng.xml</suiteXmlFile>
</suiteXmlFiles>
</configuration>
</execution>
</executions>
</plugin>
[/code]
以上的配置使用了两个execution,而surefire插件在执行时会分别针对JUnit与TestNG在两个不同的JVM中执行测试用例,所以测试用例不会产生相互影响的现象。
如果想在一个pom.xml配置中同时执行两个不同的JUnit execution,可以采用如下配置:
[code lang="xml"]
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<!-- [surefire:test {execution: default-test}] -->
<skipTests>true</skipTests>
</configuration>
<executions>
<execution>
<id>test-no-fork</id>
<phase>test</phase>
<goals>
<goal>test</goal>
</goals>
<configuration>
<skipTests>false</skipTests>
<includes>
<include>**/cases/TC0*.java</include>
</includes>
<testFailureIgnore>true</testFailureIgnore>
</configuration>
</execution>
<execution>
<id>test-fork</id>
<phase>test</phase>
<goals>
<goal>test</goal>
</goals>
<configuration>
<skipTests>false</skipTests>
<includes>
<include>**/cases/TC1*.java</include>
</includes>
<forkMode>always</forkMode>
<testFailureIgnore>true</testFailureIgnore>
</configuration>
</execution>
<execution>
<id>test-large-jvm</id>
<phase>test</phase>
<goals>
<goal>test</goal>
</goals>
<configuration>
<parallel>methods</parallel>
<threadCount>10</threadCount>
<argLine>-Xmx1024m</argLine>
<skipTests>true</skipTests>
<includes>
<include>**/cases/TC2*.java</include>
</includes>
<testFailureIgnore>true</testFailureIgnore>
</configuration>
</execution>
</executions>
</plugin>
[/code]

[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. 其他可能情况