Meld
支持两方/三方文件/目录比较,实时编辑,CVS管理,适合比较大型项目移植。
官方地址:
Ubuntu 16.04
系统上安装执行如下命令
1 |
$ sudo apt-get install meld |
macOS
系统上安装执行如下命令
1 |
$ brew cask install meld |
Meld
支持两方/三方文件/目录比较,实时编辑,CVS管理,适合比较大型项目移植。
官方地址:
Ubuntu 16.04
系统上安装执行如下命令
1 |
$ sudo apt-get install meld |
macOS
系统上安装执行如下命令
1 |
$ brew cask install meld |
google提供了Android Support Library package 系列的包来保证来高版本sdk开发的向下兼容性,即我们用4.x开发时,在1.6等版本上,可以使用高版本的有些特性,如fragement,ViewPager等,下面,简单说明下这几个版本间的区别:
Android Support v4: 这个包是为了照顾1.6及更高版本而设计的,这个包是使用最广泛的,eclipse新建工程时,都默认带有了。
Android Support v7: 这个包是为了考虑照顾2.1及以上版本而设计的,但不包含更低,故如果不考虑1.6,我们可以采用再加上这个包,另外注意,v7是要依赖v4这个包的,即,两个得同时被包含。
Android Support v13 :这个包的设计是为了android 3.2及更高版本的,一般我们都不常用,平板开发中能用到。
今天在后台升级一个插件,页面显示“WordPress正在执行例行维护,请一分钟后回来”,一直停留在那儿。不是吧。多了一会还是这个页面,不太对劲,Google一下。有很多博主出现这种情况,说要改这个文件改 那个文件。最后一篇文章上的方法解决了此问题。
just delete .maintenance file
ftp登录网站空间,在blog根目录发现多出一个.maintenance文件,删除即可,再刷新。
第一步:需要备份原来的wordpress根目录,比如,从原来的www.mobibrw.com上打包,拷贝到新服务器上,并解压。
第二步:备份数据库
1 |
mysqldump -u user --password=password -h localhost --opt dbname > dbname.sql |
第三步:将备份数据库导入到新的数据库中(导入前需要新建数据库)。
1 |
mysql -u user -p dbname < ~/dbname.sql |
第四步:修改数据库表:
1.修改wp_options表的option_name列,将option_name为siteurl的值修改为新的blog地址
1 |
update wp_options set option_value="http://127.0.0.1/wordpress" where option_name="siteurl"; |
2.修改wp_options表的option_name列,将option_name为home的值,修改为新的blog地址,如
1 |
update wp_options set option_value="http://127.0.0.1/wordpress" where option_name="home"; |
第五步:修改wordpress的配置文件wp-config.php
主要是修改DB_NAME,DB_USER,DB_PASS,DB_HOST四个字段
将上面四个字段按照新的数据库配置进行修改
注:此外,需要注意在wordpress后台,修改默认上传路径为新的路径,如:
修改wordpress后台的默认上传路径
修改wordpress后台的默认上传路径
否则可能无法上传发布图片等
再注:如果迁移后,有些图片无法看到,那么肯定是文章中,图片的地址仍然是老地址,此时在phpmyadmin中登陆,执行以下sql:
1 |
update `wp_posts` set `post_content` = replace (`post_content`,"http://www.mobibrw.com/wp-content/uploads","http://127.0.0.1/wordpress/wp-content/uploads"); |
将文章中,存在的图片旧地址全部替换为新的地址。
1.进入单用户模式:
(1)开机到grub时,用上下键移到第二行的恢复模式,按e(注意不是回车)
即Ubuntu,With Linux 3.2.0-23-generic(recovery mode)
(2) 把ro recovery nomodeset 改成rw single init=/bin/bash
然后按ctrl+x 或者F10 就可以进入 单用户模式
2.默认会进入只读模式栋recovery,需要重新挂载:
1 |
mount -o remount rw / |
3.
1 |
usermod -l new_username -d /home/new_username -m old_username |
用usermod命令来修改用户帐户相关信息,-l指定新的登录名称,-d指定新的主目录,如果同时指定-m选项则移动原来用户主目录的内容到新的用户住目录,最后指定原来的登录用户名。
1 |
groupmod -n new_username old_username |
groupmod命令用来修改组相关信息,-n用来指定新的组名,用原来的组名作为参数。这里修改的是与用户默认同名的组。
1 |
chfn -f new_fullname new_username |
chfn命令来修改真实的用户名称和其他相关信息,-f指定新的用户全称,需要修改全称的用户名作为参数。
另外,刚刚安装的ubuntu是没有root密码的。在terminal中不能执行su。初始化密码的方式:
1 |
sudo passwd |
根据提示填写密码。
最近在 Ubuntu 13.04 上面使用 Eclipse Kepler 的时候,总是莫名其妙的崩溃,有时候能生成崩溃日志,有时候不能,大致看了一下,发现应该与webkit的BUG 有关系,因此可以如下处理,在eclipse.ini 中增加如下语句:
-Dorg.eclipse.swt.browser.DefaultType=mozilla
解决方法:
在 /usr/bin 下新建文件夹 ,如 svnbak
把 /usr/bin 中的所有 svn* 移动到 svnbak
然后,可用
1 |
brew install subversion |
安装最新的 svn ,重新启动 Terminal ,检查 svn 版本。
升级 Xcode中的SVN
brew 安装的 svn 的路径在这里
/usr/local/Cellar/subversion
然后,在 Terminal 输入下面的命令,替换 Xcode 里面的 svn 文件
1 |
sudo ln -s /usr/local/Cellar/subversion/1.7.5/bin/svn* /Applications/Xcode.app/Contents/Developer/usr/bin/ |
如果遇到这种情况
那么,进到 Xcode 那个目录,把相关的旧版本 svn* 文件删除掉,然后重新执行命令即可
之前一直怀念Ubuntu
下的apt-get
,因为实在是方便,需要安装什么,一个命令搞定,相关的依赖包统统由apt-get
维护。下载,编译,安装,那叫一个痛快。什么软件用着不爽,一个命令卸载!
怀念apt-get
之余,发现了替代工具MacPorts
,据说也可以解决我的问题。但可惜,我总是无法更新本地软件索引库!
homebrew
主页对brew
进行了详细的描述,不过我们更希望下载下来实战演练!
1.安装brew
:
1 |
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" |
上述命令,在官网上可以找到!
2.使用brew
安装软件
别的工具不说,wget
少不了,但是mac
上默认没有!
就先拿它来开刀了:
1 |
$ brew install wget |
甚至是安装tomcat
:
1 |
$ brew install tomcat |
或者是unrar
:
1 |
$ brew install unrar |
3.使用brew
卸载软件
安装简单,卸载就更简单了:
1 |
$ brew uninstall unrar |
4.使用brew检索软件
看看我们能搜到什么:
1 |
$ brew search /apache*/ |
/apache*/
使用的是正则表达式,注意使用/
分隔!
5.查看已经安装的软件
1 |
$ brew list |
6. 删除所有软件升级后的遗留旧版本
1 |
$ brew cleanup |
至此,brew
已经能解决我的大部分软件安装问题了!
7.设置国内的软件源,加快更新速度
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# 替换formula 索引的镜像(即 brew update 时所更新内容) $ cd "$(brew --repo)" $ git remote set-url origin https://mirrors.ustc.edu.cn/brew.git $ cd "$(brew --repo)/Library/Taps/homebrew/homebrew-core" $ git remote set-url origin https://mirrors.ustc.edu.cn/homebrew-core.git $ brew update # 替换Homebrew 二进制预编译包的镜像 $ echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.ustc.edu.cn/homebrew-bottles' >> ~/.bashrc $ source ~/.bashrc |
第一步:eclipse中新建一个项目,java build path中导入junit jar包(本文例子junit-4.9b1.jar)
第二步:新建一个package,导入如下四个文件
第三步:右键AllCalculatorTests(或者CalculatorTest、SquareTest),run as junit test,查看执行结果。
代码中的注释能够帮你理解Junit4。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
package andycpp; public class Calculator { private static int result; // 静态变量,用于存储运行结果 public void add(int n) { result = result + n; } public void substract(int n) { result = result - 1; //Bug: 正确的应该是 result =result-n } public void multiply(int n){ } // 此方法尚未写好 public void divide(int n) { result = result / n; } public void square(int n) { result = n * n; } public void squareRoot(int n) { for (; ;) ; //Bug : 死循环 } public void clear() { // 将结果清零 result = 0; } public int getResult() { return result; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
package andycpp; /* * import static,这是一个静态包含(static),是JDK5中新增添的一个功能。也就是说,assertEquals是Assert类中的一系列的静态方法, * 一般的使用方式是Assert. assertEquals(),但是使用了静态包含后,前面的类名就可以省略了,使用起来更加的方便 * */ import static org.junit.Assert.*; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Ignore; import org.junit.Test; //测试类名称任意 public class CalculatorTest { //你要测试哪个类,那么你首先就要创建一个该类的对象 private static Calculator calculator = new Calculator(); /* * @Before和@After是每个测试方法执行前后均需要执行, * 因此不适合累中耗资源,或者耗时过大的操作。 * @BeforeClass 和 @AfterClass两个Fixture来帮规避此问题。 * 从名字上就可以看出,用这两个Fixture标注的函数,只在测试用例 * 初始化时执行 @BeforeClass方法,当所有测试执行完毕之后,执行 * @AfterClass进行收尾工作。在这里要注意一下,每个测试类只能有 * 一个方法被标注为 @BeforeClass 或 @AfterClass, * 并且该方法必须是Public和Static的 * */ @BeforeClass public static void setUpBeforeClass() throws Exception { } @AfterClass public static void tearDownAfterClass() throws Exception { } /* * 我们非常希望每一个测试都是独立的,相互之间没有任何耦合度。 * 因此,我们就很有必要在执行每一个测试之前,对Calculator对象进行一个“复原”操作, * 以消除其他测试造成的影响。因此,“在任何一个测试执行之前必须执行的代码”就是一个Fixture, * 我们用@Before来标注它 这里不在需要@Test标注* * */ @Before public void setUp() throws Exception { calculator.clear(); } @After public void tearDown() throws Exception { } //@Test 标准的方法,返回值必须是void,而且无参数 @Test public void testAdd() { calculator.add(2); calculator.add(3); assertEquals(5,calculator.getResult());//第一个参数填写期待结果,第二个参数填写实际结果 } @Test public void testSubstract() { calculator.add(10); calculator.substract(2); assertEquals(8,calculator.getResult()); } /* * 如果你已经把该方法的测试用例写完,但该方法尚未完成,那么测试的时候一定是“失败”。 * 这种失败和真正的失败是有区别的,因此JUnit提供了一种方法来区别他们,那就是在这种 * 测试函数的前面加上@Ignore标注,这个标注的含义就是“某些方法尚未完成,暂不参与此次测试”。 * 这样的话测试结果就会提示你有几个测试被忽略,而不是失败。一旦你完成了相应函数,只需要把@Ignore标注删去, * 就可以进行正常的测试。 * */ @Ignore @Test public void testMultiply() { calculator.add(2); calculator.multiply(3); assertEquals(6,calculator.getResult()); } @Test public void testDivide() { calculator.add(8); calculator.divide(2); assertEquals(4, calculator.getResult()); } /* * 对于那些逻辑很复杂,循环嵌套比较深的程序, * 很有可能出现死循环,因此一定要采取一些预防措 施。 * 限时测试是一个很好的解决方案。我们给这些测试函数设定 * 一个执行时间,超过了这个时间,他们就会被系统强行终止, * 并且系统还会向你汇报该函数结束的原 因是因为超时,这样你就可以发现这些Bug了 * 测试例子calculator中的squareRoot是个死循环。 * */ @Test(timeout = 1000)//单位为毫秒 public void squareRoot() { calculator.squareRoot(4); assertEquals(2, calculator.getResult()); } /*使用@Test标注的expected属性,将我们要检验的异常传递给他, * 这样JUnit框架就能自动帮我们检测是否抛出了我们指定的异常 * */ @Test(expected = ArithmeticException.class) public void divideByZero() { calculator.divide(0); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
package andycpp; import java.util.Arrays; import java.util.Collection; import static org.junit.Assert.*; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; /* * 对于参数测试需要重新写一个类, 而不能与其他测试共用同一个类,此例中我们定义了一个SquareTest类。 * 然后,你要为这个类指定一个 Runner,而不能使用默认的Runner了,因为特殊的功能要用特殊的Runner嘛。 * @RunWith(Parameterized.class) * * */ @RunWith(Parameterized.class) public class SquareTest { private static Calculator calculator = new Calculator(); private int param; private int result; /* * 定义测试数据的集合,也就是上述的data()方法, * 该方法可以任意命名,但是必须使用@Parameters标注进行修饰。 * 这个方法的框架就不予解释了,大家只需要注意其中的数据,是一个二维数组, * 数据两两一组,每组中的这两个数据,一个是参数,一个是你预期的结果 * */ @Parameters public static Collection date(){ return Arrays.asList(new Object[][]{ {2, 4}, {0, 0}, {-3, 9}, }); } //构造函数,对变量进行初始化 //定义一个待测试的类,并且定义两个变量,一个用于存放参数,一个用于存放期待的结果。 public SquareTest(int param, int result) { this.param = param; this.result = result; } @Test public void square() { calculator.square(param); assertEquals(result, calculator.getResult()); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
package andycpp; import org.junit.runner.RunWith; import org.junit.runners.Suite; /* * 大家可以看到,这个功能也需要使用一个特殊的Runner, * 因此我们需要向@RunWith标注传递一个参数Suite.class。 * 同时,我们还需要另外一个标注@Suite.SuiteClasses, * 来表明这个类是一个打包测试类。我们把需要打包的类作为参数传递给该标注就可以了。 * 有了这两个标注之后,就已经完整的表达了所有的含义,因此下面的类已经无关紧要, * 随便起一个类名,内容全部为空既可 * */ @RunWith(Suite.class) @Suite.SuiteClasses({ CalculatorTest.class, SquareTest.class }) public class AllCalculatorTests { } |
ZTE ac2736的无线上网卡,Window下的使用是相当的简单,Ubuntu下还是需要稍作设置,这里就简单介绍一下ubuntu下的设置方式。
首先说明一下环境,Ubuntu 10.04,所有已装软件已升级到最新版本(请先安装usb-modeswitch和usb-modeswitch-data)。
步骤1:插上ZTE ac2736后使用lsusb命令查看状态
正常的话结果中应该有如下信息:
1 |
Bus 006 Device 007: ID 19d2:fff1 ONDA Communication S.p.A |
其中0×19d2是vendor的代号,0xfff1是product的代号。
此外,此时/dev下应该也出现了ttyUSB[0-4]5个设备标示。
步骤2:设置连接拨号方式
查看右上角的NetworkManager,在移动宽带下会出现一个名为China telecom conn 1的连接项,www.linuxidc.com这时候直接连接是不行的,需要先右键点击NetworkManager,点选编辑连接,找到移动宽带->China telecom conn 1,选择编辑->移动宽带选项卡,可以看到编号中已经是#777,用户名和密码填入card后保存。
如果未出现China telecom conn 1的选项,可以重新插拔ac2736,或者编辑NetworkManager,手动添加一个移动宽带的连接项,第一步设备选择ZTE Incorporated ZTE CMDA Tech,第二步选择China,第三步提供商选China Telecom,应用后可以看到弹出的页面中编号为#777,同样将用户名和密码设置为card保存后即可,其他选项用默认的即可。
步骤3:连接网络
选择NetworkManager中的China telecom conn 1,稍等片刻就可以看到连接成功的提示了,此时ifconfig查看网络连接可发现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
ppp0 Link encap:点对点协议 inet 地址:114.81.187.173 点对点:115.168.41.208 掩码:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1448 跃点数:1 接收数据包:7752 错误:0 丢弃:0 过载:0 帧数:0 发送数据包:7589 错误:0 丢弃:0 过载:0 载波:0 碰撞:0 发送队列长度:3 接收字节:7017443 (7.0 MB) 发送字节:904706 (904.7 KB) ppp0 Link encap:点对点协议 inet 地址:114.81.187.173 点对点:115.168.41.208 掩码:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1448 跃点数:1 接收数据包:7752 错误:0 丢弃:0 过载:0 帧数:0 发送数据包:7589 错误:0 丢弃:0 过载:0 载波:0 碰撞:0 发送队列长度:3 接收字节:7017443 (7.0 MB) 发送字节:904706 (904.7 KB) |