Android Studio 多Library单元测试(testCompile project(":A"))提示找不到依赖库中定义的类

工程布局


工程 network-api
-> src/main/java
-> src/test/java
工程 network-biz
-> src/main/java (依赖工程 network-api的 src/main/java 下的文件)
-> src/test/java (依赖工程 network-api的 src/main/java 下的文件)

 

当编写network-biz的测试用例的时候,在build.gradle中增加

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    testCompile project(':network-api')
}

此时会发现network-biz编写的测试用例是无法编译通过的,提示找不到类定义。

这个问题是由于Android Studio没有正确的处理testCompile project导致的,这个BUG在Android Studio 2.0.0 Beta7版本中才获得修复,目前使用Canary Channel升级到最新的Android Studio 2.1 Preview 1版本以后是可以修正这个问题的。

参考链接:


Gradle (Android) - Multiproject dependency missing in testCompile
issue 200952: Library modules not added to classpath for testsz

Android Studio 1.5 集成的Android Monitor 中Logcat日志丢失

Android Studio 1.5 中使用集成的Android Monitor中的Logcat查看设备返回的日志,如果日志打印稍微密集一点,就会出现中间的部分信息丢失的问题,当使用独立版本的Android Device Monitor查看日志的时候,日志是完整的。
这个问题的根源是由于Android Studio 1.5 中使用集成的Android Monitor存在BUG导致的,目前已知的解决方法是升级到Android Studio 2.0 Beta 版本,目前看到这个问题已经被修复。

大批WordPress网站被渗透 ,成为DDOS攻击源

1456369411312.jpg!small

近日,Sucuri的安全研究人员发现,数万WordPress站点被利用于实施第7层DDos攻击。共有两万六千个不同的WordPress站点持续向同一个网站以每秒一万到一万一千次的频率发送HTTPS请求,最多时能达到两万次每秒。更严重是,如果Pingback功能默认开启,全球任何一个WordPress站点都可能被利用,成为DDos攻击网络的一个源头。

HTTP Flood是针对Web服务在第七层协议发起的大规模流量攻击,不仅可以直接导致被攻击的Web前端响应缓慢,还间接攻击到后端的Java等业务层逻辑以及更后端的数据库服务,增大它们的压力,甚至对日志存储服务器都带来影响。

建议所有基于Wordpress的网站尽快禁用Pingback。虽然无法保证网站免于遭受攻击,但会终止黑客利用您的网站来攻击其它目标。

最好的做法是,如果你确定不用pingbacks,就和xmlrpc一并关闭。如果需要使用,可以简单修改.htaccess文件,只允许白名单中的IP来存取文件。流行插件Jetpack也可用于流量监控。

14562244766558.png!small

WordPress的pingback服务可被DDoS攻击利用,这个漏洞早有披露,但至今仍有大量网站存在此问题,原因在于网站所有者很少刻意防止网站被僵尸网络捕获。而由于这种DDoS攻击中流量来自数千个不同IP,基于网络的防火墙也无法识别和拦截,只能限制每个IP地址的访问频率。

1456224508906.png!small

研究人员还发现,大多数实施攻击的源网站托管在知名VPS/云服务提供商:亚马逊的AWS、Digital Ocean、谷歌云、微软的Azure、HETZNER、OVH和Linode。

原文地址:Thousands of WordPress websites used as a platform to launch DDOS

"method driver /usr/lib/apt/methods/https could not be found" update error

在配置了/etc/apt/sources.list中使用了https之后,出现如下错误

$sudo apt-get update
E: The method driver /usr/lib/apt/methods/https could not be found.

如果是中文系统的话,会输出如下信息:

$sudo apt-get update
E: 无法找到获取软件包的渠道 /usr/lib/apt/methods/https 所需的驱动程序。

解决的方法是安装apt-transport-https:

$ sudo apt-get install apt-transport-https

如果此时执行

$ sudo apt-get update

更新会提示:

server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none

则执行如下命令来更新本地的证书:

$ echo -n | openssl s_client -connect www.mobibrw.com:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' | sudo tee '/usr/local/share/ca-certificates/www_mobibrw_com.crt'

$ sudo update-ca-certificates

然后就一切正常了。

参考链接


li 的点超出div

在Wordpress写文章的时候,发现列表项的数字总是在DIV标签的外面,如下所示

  1. 用户界面
  2. 视图导航
  3. 视图设置

HTML的源代码如下:

<div style="background-color: #f9f9f9; border: 1px">
<ol style="padding-bottom: 2px; margin-bottom: 2px; padding-top: 2px;">
	<li>用户界面</li>
	<li>视图导航</li>
	<li>视图设置</li>
</ol>
</div>

这种情况是非常不美观的,尤其是当DIV设置了背景色的时候。

网上查询了一下,发现list-style-position:inside是用来调整这种情况的。

语法:
list-style-position : outside |inside
取值:
outside :默认值。列表项目标记放置在文本以外,且环绕文本不根据标记对齐
inside :列表项目标记放置在文本以内,且环绕文本根据标记对齐
说明:
设置或检索作为对象的列表项标记如何根据文本排列。
假如一个列表项目的左外补丁(margin-left)被设置为 0 ,则列表项目标记不会被显示。左外补丁(margin-left)最小可以被设置为 30。
仅作用于具有display属性值等于list-item的对象。如li对象。
注意: ol对象和ul对象的type属性为其后的所有列表项目(如 li对象)指明列表属性。
此属性对于currentStyle对象而言是只读的。对于其他对象而言是可读写的。
对应的脚本特性为listStylePosition

 

因此修改上面的代码如下:

<div style="background-color: #f9f9f9; border: 1px ;font-size: small">
<ol style="padding-bottom: 2px; margin-bottom: 2px; padding-top: 2px;list-style-position:inside">
	<li>用户界面</li>
	<li>视图导航</li>
	<li>视图设置</li>
</ol>
</div>

修改后的效果如下:

  1. 用户界面
  2. 视图导航
  3. 视图设置

Ubuntu 12.04安装Jetty

1. 如果没有装JDK的话,安装OpenJDK

$sudo apt-get install openjdk-7-jdk

2. 安装Jetty,Ubuntu软件源里的是Jetty6

$sudo apt-get install jetty

3. 配置Jetty,修改Jetty默认配置文件

$sudo gedit /etc/default/jetty

然后把

NO_START=1

改为

NO_START=0

再设置JDK目录

JDK_DIRS="/usr/lib/jvm/default-java /usr/lib/jvm/java-7-openjdk-i386"

4. 启动Jetty

$sudo service jetty start

5. 测试,在浏览器地址栏中输入

http://localhost:8080

Jetty的端口在/etc/default/jetty中也可以设置

参考链接 Ubuntu 12.04安装Jetty

Ubuntu中shell下root用户切换其他用户运行程序

工作中,一些程序,需要随机启动,但是不是以root用户运行,于是需要在rc.local中通过shell,从root用户切换到其他用户运行程序,命令如下:

$su -c 'command' - user

$sudo -u jetty ./nexus start

实例


/etc/rc.localexit 0之前加入如下内容:

#vim /etc/rc.local
su - jetty -c "/data/nexus/nexus-2.12.0-01/bin/nexus start"

参考链接


shell下root用户切换其他用户运行程序

sort+awk+uniq 统计文件中出现次数最多的前10个单词

使用linux命令或者shell实现:文件words存放英文单词,格式为每行一个英文单词(单词可以重复),统计这个文件中出现次数最多的前10个单词。

$cat words.txt | sort | uniq -c | sort -k1,1nr | head -10

主要考察对sort,uniq命令的使用,相关解释如下,命令及参数的详细说明请自行通过man查看,简单介绍下以上指令各部分的功能:
sort:  对单词进行排序
uniq -c: 显示唯一的行,并在每行行首加上本行在文件中出现的次数
sort -k1,1nr: 按照第一个字段,数值排序,且为逆序
head -10: 取前10行数据

参考链接


sort +awk+uniq 统计文件中出现次数最多的前10个单词

Ubuntu 15.04/18.04使用bashdb调试bash脚本

bash调试器bashdb,这是一个类似于GDB的调试工具,可以完成对shell脚本的断点设置,单步执行,变量观察等许多功能。

安装bashdb


$ sudo apt-get install bashdb

macOS下使用Homebrew安装,如下:

$ brew install bashdb

有两种启动调试的方式

1.直接在bash中传递参数的方式启动,适合需要读取$0参数为shell脚本的名字的采用这种方式启动。

$ bash --debugger xx.sh

2.使用bashdb直接启动脚本,适用于一般的脚本。

$ bashdb xx.sh

上面的操作对于ubuntu 18.04之前的版本都是可以的,但是目前的ubuntu 18.04是没有这个包的,只能手工编译安装,参考如下命令:

$ wget https://netix.dl.sourceforge.net/project/bashdb/bashdb/4.4-0.94/bashdb-4.4-0.94.tar.gz

#这个网站,国内用户下载非常慢,可以本站下载
#$ wget https://www.mobibrw.com/wp-content/uploads/2016/02/bashdb-4.4-0.94.tar.gz

$ tar -xvf bashdb-*.tar.gz

$ cd bashdb-*/

$ ./configure

$ make

$ sudo make install

常用的调试命令


  1. 列出代码和查询代码类:
    l 列出当前行以下的10行
    - 列出正在执行的代码行的前面10行
    . 回到正在执行的代码行
    w 列出正在执行的代码行前后的代码
    /pat/ 向后搜索pat
  2. Debug控制类:
    h 帮助
    help 命令 得到命令的具体信息
    q 退出bashdb
    x 算数表达式 计算算数表达式的值,并显示出来
    !!空格Shell命令 参数 执行shell命令
    使用bashdb进行debug的常用命令(cont.)
  3. 控制脚本执行类:
    n 执行下一条语句,遇到函数,不进入函数里面执行,将函数当作黑盒
    s n 单步执行n次,遇到函数进入函数里面
    b 行号n 在行号n处设置断点
    d 行号n 撤销行号n处的断点
    c 行号n 一直执行到行号n处
    R 重新启动
    Finish 执行到程序最后
    cond n expr 条件断点

参考链接