31 Dec 2013

页面禁止复制,右键,全选 - 兼容各种浏览器

收藏到CSDN网摘



转载自: http://www.moonlit.me/%E7%A6%81%E6%AD%A2%E8%A4%87%E8%A3%BD%E9%8E%96%E5%8F%B3%E9%8D%B5%E7%A6%81%E6%AD%A2%E5%85%A8%E9%81%B8-1623.html

网页利用JS禁止右键,禁止选择文本,禁止复制文本,支持Opera,IE,Chrome和Firefox等各种主流浏览器,兼容性绝对超过网上搜索的其他JS代码。
虽说锁定右键和禁止复制是不好的,但是有时候出于一些特殊原因考虑,我们不得不进行这些限定。

到百度或者Google上去搜索看看,保证你会失望,网上找到的方法不是不支持Google Chrome就是不支持Opera,就是能够屏蔽用鼠标选取内容就是不能禁止从浏览器的菜单栏的“复制”按钮复制,总之就是漏洞百出,无法实现对文本复制的限制。

下面的方法可以实现:

1 Sept 2013

命令行开启xming server

收藏到CSDN网摘



当前项目需要运行unix程序,后台需要x server支持.免费的Xming刚好可用.不过每次都需要手动开启xlaunch wizard,然后点3-4次下一步才能完成启动,这里找到一个命令行开启的方法,可以实现全自动.调用代码如下

15 Aug 2013

转换AdobeDigitalEdition的PDF文件

收藏到CSDN网摘


自己购买了一些DRM保护的PDF文件,只能在Adobe Digital Edition里面看,无法打印,想放在电子书中看也不行.找到了这个脚本(原作者:i♥cabbages).具体使用方法如下:

10 Aug 2013

删除顽固文件如NUL,CON等

收藏到CSDN网摘



项目中用到批处理命令,在试验的时候不小心生成了一个叫NUL的文件,然后准备删除,竟然无法删除.原来Windows 下不能够以下面这些字样来命名文件/文件夹,包括:“aux”“com1”“com2”“prn”“con”和“nul”等,因为这些名字都属于设备名称,等价于一个 DOS 设备.所以windows不允许如此删除设备.解决办法是使用批处理文件:

1 Aug 2013

matlab的annotation必须用uniform坐标

收藏到CSDN网摘


经常碰到matlab图像需要标注的情况,annotation可以很方便的加入线,箭头,方框等标注信息,但是箭头等位置需要用归一化的坐标来表示,如何转换呢?

18 Jul 2013

Polynomial Division多项式除法

收藏到CSDN网摘





多项式除法的问题,可将字符串转为{次数:系数}的dict保存起来,然后进行四则混合运算.并将结果输出.具体与手算区别不大,唯一要注意的是:
1.±1的处理
2.0次项处理
3.空字符串处理
4.合并同次数项.

17 Jul 2013

点集凸包算法Convex Hull

收藏到CSDN网摘





求点集的凸包是经常会碰到的问题,下面是一个python实现.注意会自动忽略共线的多余点,只返回凸包的顶点坐标.

Priority Queue优先队列

收藏到CSDN网摘


Priority Queue(优先队列)是一种根据优先级对集合元素排序的数据结构,根据定义可以分为最大优先队列和最小优先队列.与之对应的有最大堆和最小堆.应用在排序算法上就是堆排序.在python中heapq包就是最小堆的具体实现,可以使用heapq.heappush()和heapq.heappop()来对堆进行操作,如果要将一个已有数组堆化,可以调用heapq.heapify()函数.在普林斯顿的数据结构与算法课程上,使用最小优先队列来解决了经典的8-Puzzle问题(就是3*3的拼图问题).下面是其具体实现,输入一个打乱顺序的拼图,可以输出求解步骤或者无法求解.(注意返回的字符串是空格子(0)的移动方向,与具体的拼图操作恰好相反).略加修改,可以实现任意规格的puzzle求解(下面包含一个4*4的board和一个3*4的board)

15 Jul 2013

Hexagon Network六边形网格距离计算

收藏到CSDN网摘


六边形网格(有时也叫蜂窝网络)在实际生活中有很多应用,例如无线基站定位,蜂窝(名字的由来),战棋游戏中人物的移动等.对于六边形网格的定位方法有很多,几何计算应该是最简单的.不过对于想要直观显示,计算的方式并不能说是最好的方法.曾经看到一个题目,对于一个从中心螺旋生长的蜂窝网格,求任意给定的2个cell的距离(看下图).此题如果是正方形网格,一个很简单的BFS(广度优先搜素)即可解决.但是对于蜂窝网格,如果不用几何的办法,最好是先定义网格cell,然后构造整个network,最后对于给定的cell按照广搜找到路径即可.

11 Jul 2013

Union Find并查集

收藏到CSDN网摘


union find并查集是数据结构与算法问题中经常碰到的典型数据结构,作为二十世纪最伟大的十个算法之一(不知道是谁评的),在很多问题中都有非常独到的应用.例如判断某2个点是否连通(迷宫路径问题).普林斯顿的在线课程数据结构与算法第一章讲的就是它,而且由浅入深,逐步实现了有一个普通的实现到最后的加权优化实现以极大压缩生成树的高度来实现高效判断.下面是python实现的代码:

5 Jul 2013

Spiral Matrix: 螺旋矩阵2

收藏到CSDN网摘


以前写过2个关于螺旋矩阵的帖子,分别是matlab方法python的模拟填空法,都是从左上角开始生长.在checkio的一道题中需要生成从中心开始螺旋生长的矩阵.方法还是类似于模拟填空法.这次需要判断的不再是到达边界转向,而是根据目前的方向,判断下一方向的位置是否为空,如果为空就转向继续写,与人工填写完全一致.需要注意的是中心位置的选取根据size的奇偶性有一些差别.

3 Jul 2013

Flatten List列表快速展开

收藏到CSDN网摘


python中有时候list会多层嵌套,需要展开成一维列表,最快速的方法是使用yield生成器.
但是针对一层嵌套的[[a,b,c],[d,e]]这种,sum(L,[])还是最快的.

Shortest path 迷宫寻路

收藏到CSDN网摘


走迷宫是acm经常出现的一类问题,有多重方法可以解决,例如A*,广度优先搜索,深度优先搜索等.广度优先搜素可以保证一旦找到路径,必定为最短路径.
广度优先搜索的实例如下(在12*12的迷宫中从(1,1)走到(10,10),边界是围墙,0为可通过,1为不可通过):

Split an array into two sets with the smallest difference

收藏到CSDN网摘


这是ACM的一个经典题目,将一个数组分成2部分,保证2部分数据和之差最小.网上有各种分析,据说动态规划(dynamic programming, DP)是最好的解决办法.
下面的分析是用0-1背包法来解决,思路是:
总数据A求和S后,问题转化为:用A中的数据填充容量为S/2的背包,得到最大价值V.那么原问题2部分元素的和的差就是: |(S-V)-V|,由于0-1背包问题时背包容量是S/2,所以可知S-V肯定不小于V,因此最后的差值是:S-2V.

Ubuntu13.10下编译安装PPS

收藏到CSDN网摘

PPS出了Linux版本,不过更新日期是2011年,但是好歹有的用了.不过官方的教程不甚明了,下载之后会发现无法使用的情况.具体debug过程记录,日后要安装再次复制即可.

1 Jul 2013

在当前位置打开命令行

收藏到CSDN网摘
在当前位置打开命令行,如果是win7,直接Shift+鼠标右键选择“Open command windows here”即可。
如果是xp,则需要额外设置:

1 Jun 2013

Pause batch file for a while暂停批处理命令

收藏到CSDN网摘

有时候有需要暂停批处理命令,如果等待用户按任意键继续,可以使用PAUSE,但是如何让它暂停一段时间后自动运行呢?

30 May 2013

How to Download Subtitles from YouTube

收藏到CSDN网摘

Many videos on YouTube contain subtitles on different languages and if you would like to download such video, probably you will need to download subtitles too. Fortunately, there are some tools already!

1 May 2013

matlab制作分形图

收藏到CSDN网摘



分形是一个很常见的数学问题,一般方法是递归,但是matlab的递归速度比较低下.8层的分形图制作递归的话,大概需要1.9s左右.
下面的代码是迭代方法.

25 Apr 2013

c++ vector删除重复元素

收藏到CSDN网摘
vector元素去重,有3个办法,
1. copy到set,然后再copy回去
2. 利用unique函数实现,但是需要排序,会破坏元素顺序
3. 遍历判断

12 Apr 2013

A Programmer's Day

收藏到CSDN网摘

Very funny GIFs. You won't smile ONLY if you are not a programmer!

When the project manager enters the office



10 Apr 2013

matlab求内外接圆与最小包围矩阵

收藏到CSDN网摘
matlab图像处理功能非常强大,regionprops只可以求水平包围框,下面的程序可以实现边缘的内外接圆与最小包围框(不一定是水平的)和凸包.



6 Apr 2013

c++实现split函数

收藏到CSDN网摘
python中的split函数非常好用(java,javascript,vb等语言也有提供),c++中的find,find_first_of,find_first_not_of...等函数也有其优点,但是分割字符串是个非常常见的问题,实现一个类似的函数供以后调用,会非常方便.

5 Apr 2013

Python+wxpython创建不规则窗体

收藏到CSDN网摘
网上看到的一段代码,很简洁.创建不规则窗体.例如(实际运行不会看到白色部分,下面的效果跟网页背景有关):

1 Apr 2013

LaTex: Nomenclature双栏对齐

收藏到CSDN网摘

如果在论文模板中没有Nnomenclature,需要在.cls文件中添加如下语句:

\newenvironment{nomenclature}{

            \chapter*{\nomenclaturename}

            \markboth{\nomenclaturename}{\nomenclaturename}

            \addcontentsline{toc}{chapter}{\nomenclaturename} }

\global\let\nomenclaturename\relax

\def\nomenclaturename{Nomenclature}

31 Mar 2013

c++计算不同日期间隔天数

收藏到CSDN网摘
有时候需要计算2个日期间隔天数,在python,vb,c#等内置了DateTime结构的语言中非常方便,有些提供了DateDiff函数,有些可以直接作差.c++的boost库也有类似实现,但是如果需要自己写代码实现,如何解决呢?

25 Mar 2013

linux程序手动安装与快捷方式

收藏到CSDN网摘


Windows下所有软件自动安装完成后都会在开始菜单生成文件夹,或者在桌面生成快捷方式,方便用户调用. Linux下大多数程序如果使用(ubuntu)的软件仓库安装,也会添加入相应的菜单,但是软件仓库中的程序一般不是最新的开发版本,因此有时候需要手动安装并生成快捷方式.

14 Mar 2013

c/c++在控制台任意位置输出

收藏到CSDN网摘

C/C++中有时候需要在屏幕任意位置输出,这样可以在控制台输出定义好的形状,使用\b可以删除上一个字符,但是如果对于模拟LED这种情况就无能为力了,如果实在windows下,可以使用win32 API来设置光标位置解决.
模拟LED:

8 Mar 2013

算法之树:平衡搜索树(二叉搜索树,2-3树,红黑树,B树)

收藏到CSDN网摘
树结构是算法与数据结构中都非常重要的一部分,各种高效的搜索与排序算法都有树的影子.常用的树结构有binary tree(二叉树)与balanced search tree(平衡搜索树).平衡搜索树又包含2-3 tree, red-black tree(RBT,红黑树)和B-Tree(B树).由于极大的压缩了生成树的高度,可以进行高效检索运算.

6 Mar 2013

在当前位置打开文件夹

收藏到CSDN网摘
在当前位置打开文件夹,windows7的话直接Shift+鼠标右键选择“Open command windows here”即可.在文件夹上右键也有菜单.
如果是xp则需要如下设置

1 Mar 2013

Visual Studio C++编译超级慢

编译项目,由于NX库明确表示在debug下编译会有问题,所以每次都是直接编译release版本,但是debug很快(~10秒),release却需要大概2分钟,主要是generating code的时候非常慢.很奇怪,找了很多问题无法解决.
环境: visual studio 2008, win7 64bit enterprise.
后来发现了一个折中的解决办法:

15 Feb 2013

排序算法: 归并排序,快速排序,3趟快速排序

收藏到CSDN网摘

归并排序(Merge sort)是另外一个很有名的排序算法.其思想是: divide and conquer.将原序列分割为2个小序列,排序之后再merge到一起.分割部分可以递归完成,递归出口是序列长度为1,直接返回序列.
Bottom_Up归并排序是归并排序的非递归实现,从size=2开始,不断merge,直到所有元素排序完毕.

快速排序(Quick sort)是对随机打乱后的数组,用2个指针分别从左边和右边来扫描元素,在排序过程中保证:对某个元素j,a[j]已经被排好,其左边所有元素都不大于它,而右边所有元素都不小于它.j这个位置由分割函数partition()返回.具体实现(随机排序可以不用,用median-3来选择一个元素作为a[lo]即可):
(a) partition分割(设置j)
i, j = lo, hi, 当i<j时,repeat:
- i从左往右scan,只要a[i]<a[lo],扫描停止时,a[i]>=a[lo]
- j从右往左scan,只要a[j]>a[lo],扫描停止时,a[j]<=a[lo]
- 交换a[i]与a[j]
- 循环结束后交换a[lo]与a[j].
- 返回j
(b) 递归调用排序lo到j-1
(c) 递归调用排序j+1到hi

3-way快速排序是对快速排序的改进,因为快速排序算法的扫描方法在有多个与a[lo]相当的元素时,仍然需要交换元素(非必要交换),因此,可以引入lt和gt2个元素,来保证lt-gt之间的元素都等于v,lt左边不大于v,gt右边不小于v.具体实现:
(a): partition分割(同时设置lt与gt)
lt = lo, gt = hi, i = lo, v = a[lo]
选择v作为partitioning元素a[lo](可与快速排序选择方法相同)
i从左往右开始扫描:
- a[i]<v: 交换a[lt]与a[i], lt++, i++
- a[i]>v: 交换a[gt]与a[i], gt--
- a[i]==v: i++
(b) 递归调用排序lo到lt-1
(c) 递归调用gt+1到hi

python实现如下(包含上次写过的希尔排序,插入排序与选择排序):

12 Feb 2013

排序算法:选择排序,插入排序与希尔排序

收藏到CSDN网摘
常用排序算法之:选择排序,插入排序与希尔排序

这是非常经典的3个排序算法,在各种acm题目和日常编程中时有使用.

栈的push、pop序列判定

收藏到CSDN网摘


ACM经常会碰到的一个题目: 给定一个输出序列,判断其是否可能是元素按顺序压栈后的push/pop序列.(假设没有相同元素)

其解法是构造一辅助栈,然后开始扫描输出序列的每一个元素(视为当前元素):

11 Feb 2013

零钱兑换方法问题

收藏到CSDN网摘


ACM经常有换零钱的问题,例如将一元的纸币兑换成5角,2角,1角,5分,2分和1分的硬币,有多少种兑换方法?根据纸币面额和硬币种类,问题的复杂程度不同(例如欧拉工程就有一道类似题目,兑换英国的钱币),最简单的办法是暴力求解,可用多层循环求解,一般循环层数可以比硬币种类少1,因为最后一个1分的硬币可以用前面求和<=(小于等于)面额来化简.如果小于面额,说明有多个1分币,如果恰好等于面额,则没有1分币.不过如果硬币种类特别多,循环的方法将不是一个理想的方法(当然,只要硬币给定,循环的代码总是能写出来的,时间足够,计算机也的确可以运行得出结果).

这类问题经过变换可以变为"一个大数如何写成几个小数之和的形式"的问题,此类问题的通解应当是通过分析来递归求解.

6 Feb 2013

com.sec.android.app.twlauncher error fix

收藏到CSDN网摘
手机要更新输入法,内存不够,就把samsung自带的几个东西给删除了.然后准备回退到桌面时开始报com.sec.android.app.twlauncher error,点了force stop还是死循环.搜索了一下基本解法都是reset factory settings,但是这样等于format系统了,app都会丢失.不值得.

仔细观察下,twlauncher难道是samsung的touchwiz UI的launcher?那说明是准备回到桌面时调用launcher出错了,可能没删除了.尝试解决办法如下:

5 Feb 2013

Python Tips 之 下载网络文件

收藏到CSDN网摘

有时候需要爬虫去下载一些网络文件(图片,文档等),如果页面有来源验证,需要伪装成浏览器访问.保存就是很简单的一句话:

28 Jan 2013

批处理DOS窗口自动关闭

收藏到CSDN网摘
有时需要用其他语言例如c++,python,java等调用已经写好的bat批处理文件,但是运行完后,dos窗口有时不会自动关闭;有时候又需要窗口暂时hold住.

25 Jan 2013

python tips 之 访问网站

收藏到CSDN网摘
以前转过一个很有名的帖子,最快捷的方法是urllib.urlopen(url),但是有时候网站会针对headers数据过滤,防止代码访问,这时就需要伪装成浏览器来访问,否则会出错.

24 Jan 2013

UG外部模式libufun.dll找不到错误

收藏到CSDN网摘
在尝试UG的external模式时,遇到这个问题

具体情况就是
$(UGII_BASE_DIR)\ugopen
libufun.lib libugopenint.lib
都做了正确的设置
而且也完全编译成功,但是这个编译成功的exe

运行时却弹出警告窗口,提示:“没有找到libufun.dll,因此这个应用程序未能启动。重新安装应用程序可能会修复此问题”,这是为什么呢?

Jython problem on Windows 7 64bit OS

收藏到CSDN网摘
安装了Jython2.7a2在windows 7 64bit上.简单的一个字符串测试s = "test"就出错了,会死住没有反应.后来测试了jython2.5.3也是一样的问题,input()也会出问题.后来看控制台输出命令发现问题是由于jffi的某个包引起.暂时还没找到解决办法.但是测试发现了一个在出现这个错误时也能使用jython写程序的办法.

22 Jan 2013

SUA Disable Shell Beep

收藏到CSDN网摘
工作需要,安装了SUA(Interix)在windows 7 enterprise版本.但是不管k shell还是c shell还是bash,自动补全时候的beep都非常烦人.跟linux下默认终端一个毛病.(不知道为什么linux/unix的开发人员没有默认关闭这个东西).找了一些基本讲bash的居多,不过我还是比较习惯用c shell,关闭beep的方法如下:

4 Jan 2013

Pentadactyl的中文hint

收藏到CSDN网摘
前面曾经介绍过Pentadactyl这个Firefox的插件,用来像vim那样操作浏览器.可以极大提高工作效率.尤其是按f之后的链接hint功能更是完全摆脱了鼠标的限制.不过默认的hint仅支持英文,对于中文就无能为了.这里有个网友制作的中文hint,例如对于"测试连接"这种文字连接,直接f后,依次键入cslj就能一次命中,而且随着输入字母的增多,会动态调整匹配的链接顺序,非常智能.

3 Jan 2013

GoACM之Palindrome

收藏到CSDN网摘


回文数问题,也就是从左或者从右开始写,形式完全一样的数(或者叫对称数),例如909,21321这种.SPOJ的PALIN问题就是求大于给定数字的下一个回文数.