zip文件名乱码的解决方法

在Mac下压缩的ZIP文件在Windows下用WinRAR或者7-ZIP打开都会产生文件名乱码的问题。

网上的办法都是在Mac下从新打包。今天突然找到了一个压缩软件Bandizip,可以打开Unicode编码的文件名,乱码问题彻底解决。

杂记——我就是要吐槽Windows

这几天微软因为.Net开源的原因又搞出了个“大新闻”,知乎上也是一片喊着Java可以去死了的声音,但是作为一个微软粉转路人,昨天折腾了我一下午的事情简直让我想变成一生黑。

事情是这样的:上个周末的时候看着又要告急万里江山一片红的C盘,想着还是去卸载一些东西吧,于是遵从微软的教导,打开控制面板-程序-卸载程序,结果看来看去发现实在没有什么可以卸载的,于是打算拿从来没有用过的SQL Server下手。不要问我为什么装它,装VS的时候貌似是默认的,亦或者我没有把它勾掉。说实话我知道VS是一个优秀的IDE,但是我仍然对它没有什么好感,过于臃肿,要不是课程要用到我才不会装呢。不论如何,我是打算拿SQL Server开刀了,列表中列出了大概六到七个相关的组件,嗯,挨个卸载吧。开头两个点击卸载后提示依赖于另一个程序,要先卸载另一个,好,你说先卸载就先卸载,结果依赖的程序点击卸载后卸载出错,出错就出错吧,也不少见了,但是可气的是只告诉我出错又不告诉我哪里出错,要是移动设备什么的也就算了,告诉用户出错原因用户可能也束手无策。但是作为桌面操作系统,就不能告诉我到底哪里错了吗?这个问题后面再讨论,还是继续我的卸载之旅吧。既然正常的卸载方法卸载不掉,那就只能用非常手段了,于是祭出Installer Clean Up,这是微软官方的用于删除msi安装包的工具,虽然很久没有更新了,但是在删除一些极其顽固的软件的时候还是很有用的(没错,Office,说的就是你)。找到要卸载的软件后点Clean,继续坑爹,删除进程卡住了,这是一个命令行工具,主要是扫描注册表和系统文件再执行删除,但是它运行到一半的时候卡住了。看来这个办法也行不通了,作为一个轻度强迫症患者,我想卸载却无法卸载简直就是折磨,于是一通Google,在微软官网找到了官方卸载修复工具,down下来之后总算是把SQL Server删除了。但是这却引起了更严重的问题,Office 2013每次打开的时候都要进行一次配置,当时我还没有在意,以为是没有重启导致的,结果昨天重启之后还是这个样子,这简直可以把强迫症逼疯好麻!!结果在尝试了修改注册表等方法无果后,还是痛下决心决定重装Office(昨天是要做明天答辩的PPT的,这个时候决定重装需要多大的决心你造吗?)这中间又出了多么坑爹的注册表权限问题我就不提了,安装完Office 2013 SP1后打补丁吧,我不说要打三个G的Office补丁了,但是你有两个跟Office和SQL Server没半毛钱关系的补丁出现未知错误是怎么回事?我已经不想吐槽了,又花了大半个晚上的时间才把这两个补丁装上。

微软是一家伟大的公司,它的产品技术也是世界顶级的,但是作为一个长年Windows用户(其实是没钱买不起Mac,呵呵说多了都是泪)实在不觉得Windows是个优秀的产品,它为了兼容性和市场份额而背负了太多的包袱。而且Windows作为一个操作系统本身的复杂程度就已经非常高,谁也不能保证不出问题,但是它总是会出一些莫名奇妙的问题我就无法理解了。如果是第三方软件出问题还可以辩解说是第三方软件的问题,但是微软自家产品出的问题也不少,比如我每次要重装Office的时候都几乎必然会出问题(注册表是重灾区),还经常有上文这样无法卸载的东西,甚至用官方的东西卸载后导致其他部分出问题,一个人生病,全家卧床不起。你可以说我本来就不应该去卸载SQL Server,一个软件连最基本的卸载都搞不定我还怎么对它有好感?

大概Windows认为大多数用户无法自己解决问题,所以出错提示都相当简短,最多有个错误号,即使到系统日志里看到了具体的错误一般也是个程序的返回码,比如我最后安装那两个补丁时报的错,还有这周在网络实验室的Server 2008 R2上添加活动区域的时候,都是告诉用户错了,但是具体哪里错了我就是不告诉你,其实系统也不知道到底哪里错了,它只从程序那里得到一个错误码而已。没有很深的专业知识和经验想要查出问题在哪简直是不可能。而且因为Win的开放度和兼容性导致Win的目录结构常常变的极其混乱,这个时候出问题大多数人还是重装了事吧。

昨天在遇到最后的更新问题时,在微软的官方论坛上列出的方法有十几种之多,几乎大半要求重启,作为一个普通用户我觉得这种建议是毫无意义的,因为太过于麻烦,可操作性差,全部尝试也不一定能解决问题,原因还是错误原因千奇百怪,根本原因呢?怕还是在Windows自己身上。什么时候Windows对软件的限制多一些,强硬一些,把自家大型软件的耦合性降低一些(比如VS做成插件模式就很好,不会像现在这样臃肿,当然我只是在闲扯),那么Windows的体验还能上升一个台阶。

 

 

Python+OpenCV图像直方图均衡化处理

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
#coding=utf-8
import cv2
import numpy

print u"图片为同目录下的test.jpg,先显示原图的灰度直方图,关闭后显示变换后的直方图,再关闭显示变换后的图片".encode("gbk")

img = cv2.imread('test.jpg',0)
rows,cols = img.shape

grey_img = numpy.zeros((256,256),numpy.uint8)

hist= cv2.calcHist([img], [0], None, [256], [0.0,255.0])
minVal, maxVal, minLoc, maxLoc = cv2.minMaxLoc(hist)

for h in range(256):
intensity = int(hist[h]*256/maxVal)
cv2.line(grey_img,(h,256), (h,256-intensity),(255,255,255))

cv2.imshow(u"原灰度图".encode('gbk'), grey_img)
cv2.waitKey (0)
cv2.destroyAllWindows()

grey_img_arr = []

for i in hist:
grey_img_arr.append(int(i[0]))

grey_img_arr_2 = [grey_img_arr[0]]

grey_img_arr_3 = []

for i in range(1,256):
grey_img_arr_2.append(grey_img_arr_2[i-1] + grey_img_arr[i])

for i in grey_img_arr_2:
a = (i/921600.0)/(1.0/255.0)
if a-int(a) > 0.5:
grey_img_arr_3.append(int(a)+1)
else:
grey_img_arr_3.append(int(a))

for i in range(len(grey_img_arr_2)):
grey_img_arr_2[i] = 0

for i in range(rows):
for j in range(cols):
img[i,j] = grey_img_arr_3[img[i,j]]

hist= cv2.calcHist([img], [0], None, [256], [0.0,255.0])
minVal, maxVal, minLoc, maxLoc = cv2.minMaxLoc(hist)

for h in range(256):
intensity = int(hist[h]*256/maxVal)
cv2.line(grey_img,(h,256), (h,256-intensity),(255,255,255))

cv2.imshow(u"变换过的直方图图".encode('gbk'),grey_img)
cv2.waitKey (0)
cv2.destroyAllWindows()

cv2.imshow(u"变换过的图片".encode('gbk'),img)
cv2.waitKey (0)
cv2.destroyAllWindows()

[转]在Linux下用tftp刷写路由器固件

源地址:http://blog.csdn.net/zyphio/article/details/8555742

1.在Ubuntu中,保证正常访问互联网软件源的情况下,找到并进入“terminal”(终端)界面; 2.输入“sudo apt-get update”按回车,根据提示输入管理员密码,开始更新软件包信息; 3.输入“sudo apt-get install tftp”,开始安装tftp软件包; 4.用牙签捅住路由器复位按钮10秒(如果固件不支持复位按钮,那这一步无意义); 5.拔掉路由器的电源; 6.用网线连接电脑LAN口与路由LAN口(注意不要接成蓝色的WAN口); 7.输入“sudo service network-manager stop”(适用Ubuntu 10.4或以上版本)或“sudo service networking stop”(适用Ubuntu 9.10或以前版本)命令,以关闭系统的网络管理服务; 8.输入“ifconfig”查看是哪一个网卡与路由器相连,一般为“eth0”代号的网卡; 9.输入“sudo ifconfig eth0 192.168.11.2”,强行设定“eth0”代号的网卡的IP为192.168.11.2(因为Buffalo路由器的bootloader里的默认是IP是192.168.11.1); 10.输入“sudo ifconfig eth0 netmask 255.255.255.0”,设置掩码; 11.输入“sudo arp -s 192.168.11.1 XX:XX:XX:XX:XX:XX”,“XX:XX:XX:XX:XX:XX”你Buffalo路由器的MAC地址,MAC地址在Buffalo路由器背面的标签上SSID可查到,可不输入冒号间格。 12.输入“tftp”,出现“tftp>”提示符; 13.输入“verbose”,出现“Verbose mode on.”提示; 15.输入“binary”,出现“mode set to octet.”提示; 16.输入“trace”,出现“Packet tracing on.”提示; 17.输入“rexmt 1”,每格一秒尝试一次推送; 19.输入“timeout 60”,推送尝试的时间不超过60秒; 20.输入“connect 192.168.11.1”,连接路由器(实际上并没连接,只是为连接作好准备); 21.输入“put rf.bin”,会提示失败,并每格1秒就尝试一次推送;

被极路由坑了一下

原来用来搞多拨的hg255d不知是什么原因flash芯片损坏了,总是引发文件系统错误,换了几个固件都是这样,正好这段时间有经费可以报销,就去京东买了一台极路由1S来刷op。

本来在极路由出来的时候我对它还是很有兴趣的,主要是我校的宽带要使用电信天翼拨号器极其的坑爹,只能改造路由器来使用,或者自己编写算号器。我选择了后一种办法,但是由于需要人工操作总是觉得不方便,于是便想买个能刷openwrt的路由,当时入了hg255d,一直到坏掉。极路由一直给我的印象都是所谓“极客”,我也一直以为它很自由,因为本身系统就是基于openwrt所以应该对op兼容很好,而且标榜“极客”那么也应该鼓励刷机吧。

尤记得在极路由出来不久,也就是我在准备买路由的时候曾经给极路由官方发过一封邮件询问如何开发的问题,当时的回复是说下一代产品会开放系统。但是我没有想到极路由竟然会走向封闭,在我看来这是自掘坟墓的行为。今天路由到货,开箱后兴冲冲准备刷机,到论坛一看教程,竟然要降级,仔细一看是极路由在新的固件中用u-boot锁死了固件版本,不允许刷其他系统,不过幸好还有降级root方法,用各种办法折腾了一两个小时悲剧的发现网上的所有正常刷机方法全部失效了,上传固件后不会刷机而是直接重启。

我又去问了客服,结果客服跟我说刷机就会保修失效,拜托我买来就是为了刷机和折腾,你跟我说保修?我就没有打算让你保修好吗,几十块的东西也没那功夫。在网络上看到一个自称内部员工的人说防刷机的理由是有人刷坏了要求保修,如果这么简单就粗暴禁止刷机,那买极路由与其他普通路由有什么区别呢?

我去看了一下小米路由mini,发现它没有做任何限制,在官方固件中就有ssh开关。相比之下,真的看不出极路由你还有什么优势。智能路由本来这么一个创意极好的产品为什么在生态环境基本没有的情况下还越来越封闭?本来极路由插件就极少,基本没有什么特色,再不给用户自己折腾的权利,我看也走不了多远。

接下来只能去焊各个ttl线来刷机了。下次换路由之前还是要仔细调查一番。

Python+OpenCV图片旋转

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import cv2
#载入图片
img = cv2.imread('test.jpg')
#获取长宽
rows,cols,depth = img.shape
#输入要旋转的角度(逆时针)
print 'Please input angle to rotate counterclockwise:'
degree = raw_input()
degree = float(degree)
#旋转
M = cv2.getRotationMatrix2D((cols/2,rows/2),degree,1)
dst = cv2.warpAffine(img,M,(cols,rows))
#显示旋转后的图片
cv2.namedWindow("Image")
cv2.imshow("Image", dst)
cv2.waitKey (0)
cv2.destroyAllWindows()

Python安装OpenCV过程记录

因为课程需要用到OpenCV,又不喜欢用VS来开发,所以就安装Python版本的OpenCV。

官方安装教程:http://docs.opencv.org/trunk/doc/py_tutorials/py_setup/py_setup_in_windows/py_setup_in_windows.html

OpenCV只支持python2.7版本,不支持3.x。

1、先到OpenCV项目网站http://sourceforge.net/projects/opencvlibrary/files/下载安装包,选择Windows平台的exe安装包即可,这是7-zip自解压文件,大小约350M。

2、下载过程中可以先为Python安装Numpy包和Matplotlib(推荐但不是必须)包。

Numpy:http://sourceforge.net/projects/numpy/files/NumPy

Matplotlib:http://sourceforge.net/projects/matplotlib/files/matplotlib

3、运行OpenCV的安装文件,选择解压目录,解压大小约为3.5G,因此请保证有足够的磁盘空间。

4、打开解压的目录,进入/build/python/2.7/x86,拷贝cv2.pyd文件到Python安装目录Lib/site-packages目录下。

5、运行Python交互式界面,输入

1
2
>>>import cv2
>>>print cv2.__version__

测试安装是否成功。

Android Activity Theme设置

安卓新手,在编写layout文件时预览的Activity主题并不是最终生成的样子。要在AndroidManife.xml中设置每个Activity的Theme属性。否则会使用Application中的默认theme。

python ctypes传值的问题

使用ctypes调用dll时又遇到了一个问题,向ctypes调用的dll中的函数传递一个参数时参数值发送了变化。我是在Django中使用的这个dll,用shell直接使用传值没有任何问题。 问题代码:

1
2
3
4
5
6
7
8
#构造函数中载入dll并且初始化一个字符串保存路径
self.so = ctypes.CDLL("/home/pi/RaspCloud/bin/librcfile.so")
self.cur_path = path
......
fun = self.so.list_file
string = ctypes.create_string_buffer(MAXN)
fun(string, self.cur_path)
...

但是到了dll的函数中,路径就变成了"/",现在还没有搞明白原因,暂时的解决方案如下:

1
2
3
4
5
fun = self.so.list_file
string = ctypes.create_string_buffer(MAXN)
path = ctypes.create_string_buffer(MAXN)
path.value = self.cur_path
fun(string, path)

猜测原因可能是字符串的兼容,但是shell中却没有问题。。。难道是Django的原因吗。。。