Dec 1
防火墙只开了80端口,因此在外网连接服务器的ssh比较麻烦。不过可以通过apache提供的proxy模块来绕过这个限制。

在Ubuntu下面:

$ sudo a2enmod proxy
$ sudo a2enmod proxy_connect
$ vi /etc/apache2/mod-enabled/proxy.conf
引用
<IfModule mod_proxy.c>
    ProxyRequests On
    <Proxy *>
        AddDefaultCharset off
        Order deny,allow
        Allow from all
    </Proxy>
    ProxyVia On
    AllowConnect 22
</IfModule>

$ sudo apache2ctl restart

然后就可以通过apache提供的http代理来连接服务器的22端口了。

因为ProxyRequests On,以及AllowConnect 22,所以可连到任意网站22端口,所以最好在Allow from all上面做一点限制,避免这个http proxy被滥用。如果需要访问其他服务,可以在AllowConnect后面增加更多端口,比如AllowConnect 22 443,这样就支持https的代理了。
Nov 17
数码相机拍下来的照片普遍偏大,在很多情况下,需要保存的照片并不需要很高的分辨率和压缩质量,所以会用一些程序,比如ACDSee、QQ影像、ImageMagick之类的程序来批处理照片,将它们的尺寸缩小,并适当降低压缩比,使得照片的存储、传输更方便。

这样一来会遇到的问题是,EXIF信息的丢失。上述的这些工具在处理照片的时候都有意无意地忽略了EXIF,让人很郁闷(令人感到惊奇的是,粗糙的windows画图板在缩放、保存图片的时候EXIF信息是不会丢失的)。

最近处理WHUMSTC10周年party照片的时候就遇到这个问题。照片总共有605张,使用Canon 450D最高分辨率拍摄,一共2.4G+,一张照片平均有4MB。通过QQ影像压缩到原来的1/4,并且压缩质量调整为85%,所有照片的体积立即缩小为176M左右。但是EXIF信息的丢失,使得很有含金量的“照片拍摄时间”也随之丢失。

于是试着去解决。本来想用PHP自带的EXIF库(最熟PHP,没办法-.-),但是发现它只支持Read,不支持Write。又找了找PYTHON的,挺多,但是用起来总不对头,就没继续折腾。最后还是在Ubuntu下apt-cache search exif,发现了exiv2这个实用工具,非常赞。

对一张照片处理,执行:
引用
$ exiv2 ex xxx.jpg
(ex=extract)会将照片的exif信息保存到同文件夹下的xxx.exv文件中;
引用
exiv2 in xxx.jpg
(in=insert)则会将同文件夹下的xxx.exv信息插入到xxx.jpg中。

需要批量处理的话,完整过程是这样:

1. 使用QQ影像或者使用命令行的ImageMagick将src/*.jpg压缩转换,保存到dest/*.jpg。注意相同文件的文件名保持不变。

2. 在src下面执行
引用
~/src$ exiv2 ex *.jpg
将所有文件的exif信息导出

3. 将所有exv文件拷贝到dest文件夹
引用
~/src$ mv *.exv ~/dest

4. 恢复exif信息
引用
~/dest$ exiv2 in *.jpg


如果是windows,可以從這裡下載exiv2的可執行文件:http://www.exiv2.org/download.html ;如果有Ubuntu的話,直接apt-get install exiv2就好,當然也可以自己編譯安裝,只要身體裡兩個圓形的器官不會隱隱作痛就行。。

終り.
Nov 1
因为这两个东西占了地方,每次选盘符时总需要往下拉滚动条,很不爽。在网上搜到3篇文章,这里转载记录一下。

http://bbs.pcbeta.com/viewthread.php?tid=729301
http://bbs.pcbeta.com/viewthread.php?tid=729310
http://bbs.pcbeta.com/viewthread.php?tid=733262

“库” @  [HKEY_CLASSES_ROOT\CLSID\{031E4825-7B94-4dc3-B131-E946B44C8DD5}]
“家庭组” @  [HKEY_CLASSES_ROOT\CLSID\{B4FB3F98-C1EA-428d-A78A-D1F5659CBA93}]

修改注册表这里,需要右键->权限,给Administrators “完全控制” 的权限。

如果需要去掉这两项的显示,分别把键值 ShellFolder\Attributes 由原来的 b080010d 改为 b090010d,然后注销(其实Kill掉explorer也行)就行了。如果不想去掉显示,那么修改 SortOrderIndex 键值(默认是0x42、0x43),改到0x52或者更大,就会排到“计算机”后面了。

点击在新窗口中浏览此图片
Oct 29

闲谈 Restricted Function 不指定

felix021 @ 2010-10-29 21:02 [IT » 软件] 评论(4) , 引用(0) , 阅读(19348) | Via 本站原创
这个词组在ACM/ICPC的各大OJ出现频率还是很高的,意思是使用了“受限制的函数”。

而且几乎没有准确的文档可以定义什么是"Restricted Function"(RF,非彼“RF”)。因为开发者也很郁闷。一个大致可以接受的解释是,任何可能威胁到系统安全的代码都不应该被执行。更严格一点,任何解题所不需要用到的函数都不应该调用。但是这两个解释都不够准确。

作为一个需要编译并运行用户任意代码的系统,必然需要对用户的代码/程序进行额外的处理,过滤可能对服务器产生危险的操作。在woj-land ( http://code.google.com/p/woj-land ) 的实现中,是采用运行时监控程序的执行,通过ptrace来拦截并检查每一个系统调用,如果发现系统调用不在白名单中,即出现RF。具体的代码可参见:http://code.google.com/p/woj-land/source/browse/trunk/code/judge/rf_table.h

白名单机制是最安全的了,但是有缺陷。

首先是很难考虑到所有的情况。举例来说,你用C语言写的A+B来测试的话,需要的系统调用只有几个。大多数情况下能够满足要求,但是有时候却发现不对。比如说SYS_futex这个系统调用,如果不被允许,glibc写的程序在执行时可能会出问题。

其次是过于严格,导致部分常用且不影响系统安全的函数被限制死。比如说fflush,只需要用到SYS_lseek调用即可。

再次是有些异常情况。一个典型的情况是使用 qsort(arr, N, sizeof(arr), cmp); 这样的代码。实际上应当是sizeof(int),不小心写错了,访问出错。典型的情况是某些非法内存访问,Glibc会open("/dev/tty",...),write()一些错误信息,然后open("/proc/self/maps", ...)把进程的内存映射表输出。还有一个更常见的情况,那就是用qsort。GCC的qsort实现,会主动open(/proc/meminfo),获取一些信息,通过这些信息来最优化排序时的内存管理。于是本来应该是运行时错误(段访问异常),即Runtime Error(SIGSEGV)的情况也被误判为Restricted Function了。

終り.

闲谈 Restricted Function #2
Oct 26
首先在MATLAB的程序文件中找到如下文件:atlas_Athlon.dll(AMD系列的请用这个,其他的CPU也有相应的问题件),这是对应处理器的数值运算优化文件,然后按如下步骤进行:

  1、右击我的电脑,选择属性,在"高级"选项卡中点击"环境变量" ,在系统变量下添加:
    变量名:BLAS_VERSION
    变量值:C:\Matlab7\bin\win32\atlas_Athlon.dll
    如果你安装在D盘,前面就改成D:\Matlab7\bin\win32\atlas_Athlon.dll

  2、右击MATLAB7.0的图标,属性,在兼容性 设置里面选择[√]以兼容模式运行这个程序,并选择 Vista Service Pack 2。

再次运行Matlab7 应该就OK了。
Oct 16

删除文件夹 不指定

felix021 @ 2010-10-16 12:58 [IT » 软件] 评论(0) , 引用(0) , 阅读(4702) | Via 本站原创
删除文件夹的时候,windows干的第一件事情貌似是计算所有的文件数量和大小,然后可以在删除过程中告诉你还要多久。有的时候小文件太多,这个过程相当漫长(比如用不了又卸不了的matlab安装文件夹)。这时候用命令提示符 rd /s /q DIRNAME 来删除就不那么罗嗦了。

更进一步,可以修改HK_CLASS_ROOT\Folder\Shell\,增加 一个 DELETE/command, cmd /c rd /s "%1",就可以直接从右键这样删了。

点击在新窗口中浏览此图片
Aug 30
引用
Warning:  Unable to initialize module
Module compiled with module API=20050922, debug=0, thread-safety=1
PHP compiled with module API=20020429, debug=0, thread-safety=1
These options need to match

由于在编译的时候API版本信息(API version)会被嵌入到.so文件中,而PHP在载入扩展时会检查扩展中的API Version与当前版本的API Version是否相同。如果不相同,则拒绝载入。

如果出现类似的WARNING,可能的情况有2:
1. 这个 .so 扩展文件是你自己从php源码编译的
2. 这个 .so 扩展文件是从其他地方下载下来的

但是比较囧的是,比如,在Ubuntu上面,安装了php5,php5-dev,默认的 phpize + configure + make 生成的扩展的API Version是与ubuntu源中的php版本相同;如果需要编译另一个版本的PHP扩展(比如godaddy上的5.2.8),就不能这么直接了,解决办法是:

1. 到php.net去下载对应版本的php代码,比如php5.2.8.tar.bz2,解压到 xxx/php

2. 编译php
$ cd xxx/php && ./configure && make

3. 使该版本的phpize、php-config可用
$ cd xxx/php/scripts; chmod +x phpize php-config

4. 编译扩展
$ cd 扩展源代码路径
$ xxx/php/scripts/phpize
$ ./configure --with-php-config=xxx/php/scripts/php-config  #注意这个with-php-config参数
$ make

编译好后的.so文件就在 modules 目录下面了
 
Aug 30

把快播(QVOD)卸载干净 不指定

felix021 @ 2010-8-30 01:16 [IT » 软件] 评论(1) , 引用(0) , 阅读(8947) | Via 本站原创
暑假在家的时候被表哥安了个QVOD。虽说不像以前那么流氓,有专门的卸载工具了,但是就像当初的3721,不给你卸载干净,留下一个DLL,方便以后做坏事。具体的表现就是,右键单击RMVB等文件时,总有一个”添加到 快播 列表“。

解决办法还很难搜到,还好还算简单:

1. 打开命令提示符(或者在[开始菜单->运行]里面),运行: regsvr32 /u "C:\Program Files\QvodPlayer\QvodBand.dll"
2. 安装unlocker这个强力删文件工具,然后打开C:\Program Files\QvodPlayer\,右击QvodBand.dll,选择Unlocker,在弹出窗口的下拉菜单中选择”删除“,然后点击全部解锁。

清爽了。
分页: 5/12 第一页 上页 1 2 3 4 5 6 7 8 9 10 下页 最后页 [ 显示模式: 摘要 | 列表 ]