macbook下eclipse 3.6闪退的问题

在macbook下使用eclipse cocoa 3.6(eclipse-php-oxygen-3-macosx-cocoa-x86_64.dmg)做php开发,在使用cut剪切时总是发生闪退的问题。
看了网上的别人的解决方案无果,于是只好采用通用解决方案——把eclipse升级到最新版本。于是下载了eclipse-php-2018-09-macosx-cocoa-x86_64.dmg
打开安装,解决发现无法打开启动安装程序。提示:eclipse无法启动报“Failed to find a Main Class in /Library/eclipse/pluginsplugins/org.eclipse.equinox.launcher_1.3.0.v20130327-1440.jar”

这又是什么问题呢?才想可能是java版本兼容性问题。于是升级到最新的jdk。到https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html下载最新的jdk 1.8
/Library/Java/JavaVirtualMachines/下面有默认的jdk 1.6,不用删除,设置一下.bash_profile即可:
JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home

启动eclipse安装程序,一切正常。

macbook将apache的php从php7切换到php5

mac系统自带的php是php7,对于老的php系统有各种问题。需要将php7降级到php5。

cd /tmp/
curl -s http://php-osx.liip.ch/install.sh | bash -s 5.6
cd /usr/local/php5/
# 修改apache配置
#LoadModule php7_module libexec/apache2/libphp7.so //系统默认配置
LoadModule php5_module /usr/local/php5/libphp5.so //php5配置
sudo apachectl restart

mac在shell中rsync执行ssh失败,提示找不到文件或目录

今天,在编写rsync备份命令的时候,提示执行ssh失败,提示找不到文件或目录,手动执行又是成功的,百思不得其解。提示信息如下:
rsync: Failed to exec ssh: No such file or directory (2)
rsync error: error in IPC code (code 14) at /BuildRoot/Library/Caches/com.apple.xbs/Sources/rsync/rsync-52/rsync/pipe.c(86) [receiver=2.6.9]
rsync: connection unexpectedly closed (0 bytes received so far) [receiver]
rsync error: error in IPC code (code 14) at /BuildRoot/Library/Caches/com.apple.xbs/Sources/rsync/rsync-52/rsync/io.c(453) [receiver=2.6.9]

rsync本身应该是不能直接无密码登陆服务器的,因为只有ssh打通后才可以执行无密码登陆服务器,并可以无密码传输文件,rsync应该是调用了ssh命令,才实现无密码访问功能。那么,这个错误提示,应该是rsync调用不到ssh命令。至于为什么找不到ssh,应该是和路径相关。

那么,怎么解决呢?rsync可以通过-e参数指定ssh,试了一下成功了。
$RSYNC -avh -e "$SSH -p 22" $USER@$SERVER:$FILE $FILE

iptable屏蔽和解禁ip和ip段

今天发现2个异常ip段,1天上万次访问,决定屏蔽它!
首先,判断是ip还是ip段,这里用shell中的grep来匹配ip段:
# ip : xxx.*.*.* \| xxx.0.0.0
count=`/bin/echo “$ip” | /bin/grep ‘[0-9]\{1,3\}[.][0|\*][.][0|\*][.][0|\*]’ | /usr/bin/wc -l`
如果是1,则是匹配上了。
同理:
# ip : xxx.xxx.*.* \| xxx.xxx.0.0
count=`/bin/echo “$ip” | /bin/grep ‘[0-9]\{1,3\}[.][0-9]\{1,3\}[.][0|\*][.][0|\*]’ | /usr/bin/wc -l`
# ip : xxx.xxx.xxx.* \| xxx.xxx.xxx.0
count=`/bin/echo “$ip” | /bin/grep ‘[0-9]\{1,3\}[.][0-9]\{1,3\}[.][0-9]\{1,3\}[.][0|\*]’ | /usr/bin/wc -l`
剩下的就是ip了。

ip2是ip对应的0段ip,如ip是xxx.*.*.*:ip2=`/bin/echo “$ip” | /usr/bin/awk -F’.’ ‘{print $1″.0.0.0″}’`
如果是ip xxx.*.*.* \| xxx.0.0.0格式,先判断是否已经屏蔽过了,如果没有,则屏蔽它:/sbin/iptables -I INPUT -s $ip2/8 -j DROP
如果是ip xxx.xxx.*.* \| xxx.xxx.0.0格式,屏蔽命令是:/sbin/iptables -I INPUT -s $ip2/16 -j DROP
如果是ip xxx.xxx.xxx.* \| xxx.xxx.xxx.0格式,屏蔽命令是:/sbin/iptables -I INPUT -s $ip2/24 -j DROP

如果是想解禁ip,则将-I修改为-D即可:/sbin/iptables -D INPUT -s $ip2/24 -j DROP

wordpress添加屏蔽关键词和禁止评论签名链接

首先在wp-content/themes/风格中的functions.php末尾,添加 functions-custom.php 文件
在functions.php的末尾添加一行:
require ‘functions-custom.php’;

思路1:评论中一定要包含中文

/* refused spam */
function refused_spam_comments( $comment_data ) {
$pattern = '/[一-龥]/u';
if(!preg_match($pattern,$comment_data['comment_content'])) {
wp_die('评论必须含中文!');
}
return( $comment_data );
}
add_filter('preprocess_comment','refused_spam_comments');

思路2:评论中包含禁止内容

function in_comment_post_like($string, $array) {
foreach($array as $ref) { if(strstr($string, $ref)) { return true; } }
return false;
}
function drop_bad_comments() {
if (!empty($_POST['comment'])) {
$post_comment_content = $_POST['comment'];
$lower_case_comment = strtolower($_POST['comment']);
$bad_comment_content = array(
'http',
'www.',
'XXX'
);
if (in_comment_post_like($lower_case_comment, $bad_comment_content)) {
$comment_box_text = wordwrap(trim($post_comment_content), 80, "\n ", true);
$txtdrop = fopen('/tmp/log.tangtang.org.antispam.txt', 'a');
fwrite($txtdrop, " --------------\n [COMMENT] = " . $post_comment_content . "\n --------------\n");
fwrite($txtdrop, " [SOURCE_IP] = " . $_SERVER['REMOTE_ADDR'] . " @ " . date("F j, Y, g:i a") . "\n");
fwrite($txtdrop, " [USERAGENT] = " . $_SERVER['HTTP_USER_AGENT'] . "\n");
fwrite($txtdrop, " [REFERER ] = " . $_SERVER['HTTP_REFERER'] . "\n");
fwrite($txtdrop, " [FILE_NAME] = " . $_SERVER['SCRIPT_NAME'] . " - [REQ_URI] = " . $_SERVER['REQUEST_URI'] . "\n");
fwrite($txtdrop, '--------------**********------------------'."\n");
header("HTTP/1.1 406 Not Acceptable");
header("Status: 406 Not Acceptable");
header("Connection: Close");
wp_die( __('评论中包含不合时宜的内容,请返回修改.') );
}
}
}
add_action('init', 'drop_bad_comments');

当然,把两个加上都可以。

以上代码来自wpdaxue

评论链接文件在:wp-includes/comment-template.php
修改为:
//$return = "<a href='$url' rel='external nofollow' class='url'>$author</a>";
$return = "<a href='#' rel='external nofollow' class='url' title='$url'>$author</a>";

这样也不妨碍我们了解评论人的网站。

mac os添加自动运行脚本

mac os添加自动运行脚本,有两种办法,一种是通过用户的个人启动设置,这是最常规的方式。如果无法执行,这里提供一种常规做法。比如要自动启动svn服务:

在 /Library/LaunchDaemons 下面,添加org.tangtang.macos.plist文件,内容如下

<!DOCTYPE plist PUBLIC “-//Apple//DTD PLIST 1.0//EN” “http://www.apple.com/DTDs/PropertyList-1.0.dtd”>
<plist version=”1.0″>
<dict>
<key>Label</key>
<string>org.tangtang</string>
<key>ProgramArguments</key>
<array>
<string>/Project/apache-conf/startsvn.sh</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<false/>
</dict>
</plist>

保存后,文件的用户属性是root.wheel。

执行:launchctl load -w org.tangtang.macos.plist

系统则会立即执行该配置文件中的命令。下次登陆后就会自动运行了。

macbook下的svn服务的备份和恢复

因为之前macbook的硬盘坏了,代码都存在svn中,需要重新建立svn服务器,并恢复代码。

一、启动svn服务

因为macbook下的svn服务是自带的,只需要在svn服务目录下,重新设置启动目录即可。命令如下:

svnserve -d -r /document/project/svn/

二、备份svn库

假设module是需要恢复的模块,备份路径是PATH,命令如下:

/usr/bin/svnadmin dump ./$module/ > ./$PATH/svn.$module.bak

显示

* Dumped revision 0.
* Dumped revision 1.
* Dumped revision 2.
* Dumped revision 3.
* Dumped revision 4.
* Dumped revision 5.

三、恢复svn库

首先需要新建一个新的module代码库

/usr/bin/svnadmin create $module

然后执行恢复命令,将svn备份导入到新的代码库中

/usr/bin/svnadmin load ./$module/ < ./$PATH/svn.$module.bak

显示

<<< Started new transaction, based on original revision 1
* editing path : trunk … done.

——- Committed revision 1 >>>

<<< Started new transaction, based on original revision 2
* editing path : branches … done.

——- Committed revision 2 >>>
至此,svn服务恢复完毕。在host文件设置svn的域名后,就可以通过TortoiseSVN访问了。

做一个批量处理的脚本

cat restore-old-svn.sh
#!/bin/bash
PATH=svn-backup-2016
MODULE=$1
if [ -z $MODULE ] ; then
echo ./restore-old-svn.sh \$module
exit
fi
/usr/bin/svnadmin dump ./$module/ > ./$PATH/svn.$module.bak
/bin/mv $module ./$PATH/$module-old
/bin/mkdir $module
/usr/bin/svnadmin create $module
/usr/bin/svnadmin load ./$module/ < ./$PATH/svn.$module.bak
/bin/echo Restore svn $module finish

 

树莓派安装硬件和系统

带孩子去上了一堂乐博乐博的机器人的体验课,后来觉得年龄还太小,不如先买个机器人给他当儿童节礼物玩玩。选来选去,低价的机器人功能还比较弱,以后无法扩展,最终选了一个树莓派的可编程的智能小车

树莓派包裹收到,小车的零件很多,一头雾水,除了树莓派认识,其他都不认识,晕菜。。。

树莓派智能小车

树莓派正面和背面

树莓派正面
树莓派正面
树莓派背面
树莓派背面

一、树莓派硬件安装

1.1、通电

现在都是笔记本时代,没有电源线,没有显示器、没有键盘,鼠标倒是有。怎么办呢?先看看如何接通电源。找到一个Micro USB接口供电,提供5V/2A的直流电即可。这种数据线,以前的安卓手机经常有。

 

Micro USB接口
树莓派接通电源
树莓派接通电源

树莓派接通电源后,小灯亮了。

1.2、树莓派连接网络

这个好办,找根网线,连上路由器就ok了。通过路由器网页管理界面,发现没有新ip,说明树莓派上没有系统,看来是个裸机。

二、树莓派系统安装

2.1、树莓派安装系统

找到micro sd卡,还有adapter转换器。还好有sd卡的usb读卡器。显示空盘一张。

micro sd卡
micro sd卡
sd卡usb转换
sd卡usb转换
sd卡空盘
sd卡空盘