解决syntax-highlighter-compress双换行符的问题

int test()

int test1()

void main()

{

}

空得很难看。看了一下,原来是TinyMCE按钮的代码的问题:
将:syntax-highlighter-compress/tinymce/window.php中的:

if (shc.className.indexOf('current') != -1) {
var shcla = document.getElementById('shc_lang').value;
var shcid = document.getElementById('shc_code').value.replace(/</g,'<').replace(/n/g,'<br>');

改为:

if (shc.className.indexOf('current') != -1) {
var shcla = document.getElementById('shc_lang').value;
var shcid = document.getElementById('shc_code').value.replace(/</g,'<').replace(/rn/g,'<br>').replace(/n/g,'<br>');

原因是做换行替换的时候,只替换了\n,没有替换\r\n,对于windows版本,先替换\r\n,再替换\n就可以了。

几句话解决文件备份问题

电脑上的文档已经有50多个G了,里面杂七杂八的放了一些东西,还有很多照片视频等等。这些照片确实太占地方了,需要缩小一点存储起来,备份嘛,不需要那么高的清晰度,以前的50%就可以了。需求很简单:

  • 对JPG文件进行压缩
  • 其他文件有更新的再拷贝,无更新拷贝之前是用shell写了一个脚本,觉得太长了。最近也在学shell脚本,用管道可以解决:
dstDir=/cygdrive/g/test/
srcDir=/cygdrive/h/doc

cd $srcDir
find |
sed -r "s:^(.*(jpg|JPG))$:cp -v --parents "1" "$dstDir" &&
convert -resize 50%x50% "$dstDir1" "$dstDir1":g" |
sed -r "s:^(..*)$:cp -vu --parents "1" "$dstDir":g" |
sh --verbose

脚本原理简单,用sed替换一下就OK。

败了个Nvidia GTX 470

话说上一个8800GTS 320M那是买的一个造孽,DX10刚刚出来的时候就买了,花了2280大洋,结果两三个月以后,9800系列出来了,该价格瞬间秒杀,只见2280直接变为800块钱没人要,真是伤心。本来想看就看Crysis出来以后能够“洋盘”一把的,结果出来以后只能开个中等特效,分辨率还降得很低。当然,那年头的战地2和战地2142那是一个爽快,至少都是80FPS以上,一点都不卡,除了网络不给力,其他都很好。

4年了,8800GTS也太老了。当年刚买的时候性能还算挺强悍,唯一恼火的就是那个320M的显存。显存的伤不仅仅在于材质不能开到最高,而且分辨率也只能开低点,想玩玩什么4XAA那简直是有点困难啊。到了09年战地叛逆团队上市的时候,8800GTS跑个中等特效,1280*900分辨率,还是有点卡,当然在网络上就经常被人秒杀了。大场景下根本就是自找苦吃。

再看看最近出的TDU2,虽然很好很强大,但自从1代开始我就不怎么喜欢,他的显存要求太高了,一代都要求512M以上,8800GTS又被深刻的打击了。

好吧,前几天突发奇想,想换个显卡玩玩最新的游戏了。上网一看,京东上还有470卖。要知道470因为所谓的“太热”,“太吵”,已经停产,还能买到的,多半也是返修货和存货。看京东的评论也看得出来,多半是属于返修货这种。MSI的470,¥1599,也算超值了。淘宝上最便宜的还卖1680呢,何况京东还开发票。有了发票,3年质保,好歹还有一个保障。

上周六去提的货,当场拆开,把PCB翻过来就可以看到一些松香的印迹。这些返工的痕迹是消除不掉的。也没关系,反正俺们也是来买便宜的。

回家插上,不吵。找个极限测试的工具,GPU可以烧到90度,风扇100%转速,那是相当的牛逼,可以一边吃着煎蛋,一边吹着风,那是一个开心啊。

后来试了试战地叛逆团队2,全高那是一个流畅啊,突然觉得没追求了;Crysis 2泄露版,听说只有DX9特效,开最高,流畅啊;DIRT2,哇塞,显示器都产生撕裂条纹了,说明已经超过60FPS以上了;花了59块钱买的HAWX2 CDKEY(破解实在是太麻烦了,忍住不买了个正版),无压力,100FPS随便跑;TDU2,全高,无任何压力;3DMARK 06,场景全部跑的很HI,得分14600多;3DMARK 11,1680*1050分辨率,全高,X1700左右;最后一个地铁2033,压力大啊,VERY HIGH确实有点跑不动,但我也不想玩此类游戏,伤大脑伤心脏.

淡定吧,我觉得还是8800GTS好啊,分辨率开低一些,看着挺爽的。突然分辨率那么高,看得太清楚了,觉得游戏,也就那么回事……

等待Crysis 2吧,看能不能有点压力呢

大量照片批量处理

自从有了数码设备以后,照片便越来越多了,并且随着从600W像素升级到1400W像素,硬盘空间及备份都成了问题。几年的照片已经有1万多张,加上一些视频已经占用了50G的空间。想备份一下,免得哪天硬盘挂了就傻逼了。如果直接拷贝的话,倒是没问题,关键是要找一个硬盘来对付这么大的存储。其实我是想备份到网络上的,DreamHost提供了50G的免费存储空间,为何不用呢?再加上有时候需要将照片共享一下,照片缩放自然成了一个大问题。

当然,我不可能将50G都传上去,显然俺们的小管子是不适合做这个事情的。那么只有先压缩了。我试过用photoshop写了个action跑了一晚上,发现中途出错了,可控性也不好;用一些宣称为批量处理的软件,结果一个比一个傻逼;有些软件竟然最后自己崩溃了,简单看了一下原来是自己将所有的图片都读了一遍,把资源消耗完了。

总结起来现有软件有以下不足:

  1. 无法对付海量图片
  2. 性能不好,速度太慢
  3. 不支持多线程,浪费能源
  4. 对文件的可操控性差,操作缓慢

最后实在是没办法了,操起cygwin,写个脚本搞吧。我一直知道,在linux下面工作,用脚本,那就是另一种异常开心的工作。

首先试了试ImageMagick的缩放素质,还是蛮不错的,速度也挺快。好,下一步就是写脚本,在try and retry过程,终于出了个可用的脚本:

该脚本可以批量进行处理,并且是多线程的,很黄很暴力。在我的Q6600上实测,开16个进程,CPU占用率一直100%,内存在1G-1.5G之间波动,10多秒就转换完16个文件,速度超快~哈哈。

#!/bin/bash
#将分隔符设置为n,避免路径中有空格造成分割失败
export IFS=$'n'

#源路径
srcDir=$1

#目的路径
dstDir=$2

cd $srcDir
mkdir $dstDir
echo $dstDir

#从源路径搜索所有为jpg格式的文件
rst=`find . -iname '*.jpg'`

#放到数组里面
declare -a files

i=0

for aFile in $rst
do
files[$i]=$aFile
i=$i+1
done


fileCount=${#files[@]}
#cores个进程一起处理
cores=16

for (( i=0; i<$fileCount;i+=$cores ))
do
for (( j=0;j<$cores;j++ ))
do
{
id=$(expr $i + $j) #任务ID

file=${files[$id]} #文件名
dst=$(dirname $file) #得到目的目录

absDstPath=$dstDir${dst:2} #得到目的文件夹
mkdir -p $absDstPath #建立目的文件夹
filename=$(basename $file) #得到文件名
absDstFilePath=$absDstPath/$filename #得到目的文件绝对路径

if [ -e $absDstFilePath ]
then
#文件存在,直接跳过
echo "[$id/$fileCount] skip "$absDstFilePath
else
#调用convert进行处理,这里将图片缩放50%
echo "[$id/$fileCount] converting "$absDstFilePath
convert -resize %50x%50 "$file" "$absDstFilePath"
fi
} &
done

#等待所有进程完成
wait
done

杀软新逻辑——谁是坏人?

以前做的项目最近和杀毒软件耗上了,本来好好的东西被杀毒软件给杀掉了。来看看事情是怎么回事。

以前项目是用C#写的,但是使用环境极其恶劣,经常会造成可执行文件损坏。一般的win32应用程序损坏还问题不大,但是C#这种托管语言的,一旦文件头破坏了,启动的时候就会报0x000005错误,导致程序无法启动。当然,杀软也是傻逼的很,检测不到病毒,只能删除程序。

最后找了个解决方法,将好的程序换个名字,比如说命名为.bak之类的,然后启动的时候,将.bak复制为.exe,然后启动之。我做了个bat然后转成exe来完成这个事情。这样,即便是在启动的时候被感染了病毒,但也可以保证在用的时候没有病毒。

这样用了很久,没出过啥问题。最近客户升级了杀软,也就是之前曾经沸沸扬扬的360,然后问题就出来了。启动文件直接被360作为病毒干掉了。后来程序中用到的winio做通讯的也被360判为病毒,这下,应用程序全军覆没。

俺们不再深究如何解决这个问题。且看现在的杀毒软件,我们来简单的分析一下其逻辑,发现现在的“警察”其实就扮演了一个“流氓”的角色。360从流氓变为警察也不容易,现在慢慢的开始也扮起了流氓。

首先,360的杀毒能力是没有什么提升了。每天都在报告又能杀XXX万个病毒了,又发现了几千个病毒了,那到底能够杀到多少呢?谁知道。现在的杀软,都是拦截系统的API,将所有有“危险”的API调用都判为“风险”,并且让用户选择。用户其实根本不懂这些东西,包括很多称之为“高手”的人,禁止吧,很多软件都用不了,确定吧,又怕遭了病毒。但是杀毒软件每次都在报,装个软件都在报,就像狼来了一样,最终用户习惯了,也没时间去钻研,还是选“确定”好了。

看起来这些杀软都是为用户好,很“精确”的为你提供每一个“风险”,就像一个婆婆妈妈的人,做每件事情都要你确认一下,你烦不烦?好吧,你烦了,杀软就赢了。遭病毒了吧,傻逼了吧,当时谁叫你选的“确定”呢,杀软给你说了有风险,你还继续,那管杀软啥事呢?

这个逻辑很好,就是烦死你的逻辑。就像卖保险的一样,其实你根本没有一个字一个字的去看保险条款,被推销的烦死了,他就赢了。到时候出了问题,去索赔的时候,才发现,原来保险条款里面就说:这事情俺给你说过,不保的!

下一个逻辑更好玩。俺杀毒不行了吧,每天更新几万个病毒库,很累啊,时不时的还冒出来搞不懂的病毒,估计360这些“专家”也搞不懂啊。杀不了怎么办呢?用户闹啊?好吧。现在360又搞了个“360软件安全认证中心”。要你的软件不误报,你得向他提供一大啪啦的东西。

好了,以后360就认为,所有的人都是坏人,只有在我这里注册了的才是“好人”。那些自己写的“野软件”,由于得不到360的认可,也变成了坏人了。谁知道,以后360会不会收费呢?会不会有更多像搜索引擎的歧视政策呢?会不会让你提供一些商业的机密呢?谁说的清楚,只有向“钱”看的时候,才会真正的认清杀软的面目。

现在我电脑上的杀软又被卸载掉了,啥都没有了,裸奔了。以前都还向大家推荐360,现在不得不向大家说,为了减少不必要的骚扰,建议大家都卸载360好了。

杀软的逻辑,警察与坏人,谁是好人?