Archive for the ‘程序设计’ Category

加载图片的一些技巧

网页加载大图片往往需要等待很长时间加载完毕,这对于用户体验来说是一件十分不好的事情。目前主流方法是使用预读取,先读取一张粗略图(比较模糊的,体积也比较小)等大图加载完毕后,再替换回来。如果图片失效的话可以则加载无法显示的提示。具体代码如下(最精简的方法):

1
2
3
4
5
6
<img src="原始图片点知"  onerror='src="粗略图地址"';
style="display:none"
onload= 'load.style.display="none";this.style.display="";'/>
<div id="load"> <img src=/images/wait.gif" />

</div>

ASP代码进行图片盗链

使用方法:将代码保存为img.ASP上传到服务器,图片地址为img?url=XXXXXX

测试了很多解除图片盗链的代码,发现这个写得最好,不过盗链图片对于服务器来说开销相当于原来的两倍,更加好的方法是第一次盗链的时候保存一个缓存,第二次就直接调用缓存不用再读取远程图片了。

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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
< %
Dim url, body, myCacheurl = Request.QueryString("url")Set myCache = new cache
myCache.name = "picindex"&url
If myCache.valid Then
body = myCache.value
Else
body = GetWebData(url)
myCache.add body,dateadd("d",1,now)
End IfIf Err.Number = 0 Then
Response.CharSet = "UTF-8"
Response.ContentType = "application/octet-stream"
Response.BinaryWrite body
Response.Flush
Else
Wscript.Echo Err.Description
End if'取得数据
Public Function GetWebData(ByVal strUrl)
Dim curlpath
curlpath = Mid(strUrl,1,Instr(8,strUrl,"/"))
Dim Retrieval
Set Retrieval = Server.CreateObject("Microsoft.XMLHTTP")
With Retrieval
.Open "Get", strUrl, False,"",""
.setRequestHeader "Referer", curlpath
.Send
GetWebData =.ResponseBody
End With
Set Retrieval = Nothing
End Function'cache类class Cache
private obj 'cache内容
private expireTime '过期时间
private expireTimeName '过期时间application名
private cacheName 'cache内容application名
private path 'urlprivate sub class_initialize()
path=request.servervariables("url")
path=left(path,instrRev(path,"/"))
end subprivate sub class_terminate()
end subpublic property get blEmpty
'是否为空
if isempty(obj) then
blEmpty=true
else
blEmpty=false
end if
end propertypublic property get valid
'是否可用(过期)
if isempty(obj) or not isDate(expireTime) then
valid=false
elseif CDate(expireTime)<now then
valid=false
else
valid=true
end if
end propertypublic property let name(str)
'设置cache名
cacheName=str & path
obj=application(cacheName)
expireTimeName=str & "expires" & path
expireTime=application(expireTimeName)
end propertypublic property let expires(tm)
'重设置过期时间
expireTime=tm
application.lock
application(expireTimeName)=expireTime
application.unlock
end propertypublic sub add(var,expire)
'赋值
if isempty(var) or not isDate(expire) then
exit sub
end if
obj=var
expireTime=expire
application.lock
application(cacheName)=obj
application(expireTimeName)=expireTime
application.unlock
end subpublic property get value
'取值
if isempty(obj) or not isDate(expireTime) then
value=null
elseif CDate(expireTime)<now then
value=null
else
value=obj
end if
end propertypublic sub makeEmpty()
'释放application
application.lock
application(cacheName)=empty
application(expireTimeName)=empty
application.unlock
obj=empty
expireTime=empty
end subpublic function equal(var2)
'比较
if typename(obj)<>typename(var2) then
equal=false
elseif typename(obj)="Object" then
if obj is var2 then
equal=true
else
equal=false
end if
elseif typename(obj)="Variant()" then
if join(obj,"^")=join(var2,"^") then
equal=true
else
equal=false
end if
else
if obj=var2 then
equal=true
else
equal=false
end if
end if
end function
end class
%>

动态图片按ESC键停止的原理

先来看一张GIF图片,只要按下ESC键,图片就会停止在某一帧上。

这主要是因为ESC键的一个功能:浏览网页时,按一下"ESC"可以停止打开当前网页。

此外“Ctrl+Alt+Del”组合键可以调出windows任务管理器外,按下“Ctrl+Shift+Esc”组合键一样能启动任务管理器。 在VISTA下,“Ctrl+Shift+Esc”组合键是直接启动任务管理器,而不会再是繁琐的选项了。

arraylist对象排序方法

毕业论文做得一个系统,用户不是存在数据库里,还是使用角色域,只能取出所有用户,计算每个积分,然后将对象存入arraylist,在进行排序。Comparator接口的确很好用
public class person
 {
   String username;
   int scores;
 }
 
 private ArrayList user(WebSession s)//获取用户 分数
 {
   ArrayList al = new ArrayList();
   int allscore=0;
 
   for (Iterator<String> userIter = UserTracker.instance().getAllUsers(WebSession.WEBGOAT_USER).iterator(); userIter
  .hasNext();)
   {
   person _a = new person();
   String user = userIter.next();
      for (Iterator lessonIter = s.getCourse().getLessons(s, AbstractLesson.USER_ROLE).iterator(); lessonIter
   .hasNext();)
   {
     Screen screen = (Screen) lessonIter.next();
  LessonTracker lessonTracker = UserTracker.instance().getLessonTracker(s, user, screen);
  allscore =allscore +lessonTracker.getScores();
    }
   _a.username = user;
   _a.scores=allscore;
   al.add(_a);
     }
   Comparator comp = new Mycomparator();
   Collections.sort(al,comp); 
   return al;
 }
 public class Mycomparator implements Comparator{
   public int compare(Object o1,Object o2) {
    person p1=(person)o1;
    person p2=(person)o2; 
    if(p1.scores<p2.scores)
     return 1;
    else
     return 0;
   }
 }

mysql自动增长插入数据出错解决办法

mysql自动增长插入数据出错描述

错误:INSERT INTO stock VALUES('浦发银行');
这样的形式会产生错误,信息大致说数据列不够。
Column count doesn't match value count at row 1
如果,自己填写id也可以,如下:
INSERT INTO stock (id, name) VALUES(1,'浦发银行');

正确写法,如下:
自动增长Id的插入语句
INSERT INTO test (name) VALUSE('浦发银行');

WordPress中文TAG伪静态无法访问解决办法

使用国内的主机的一大杯具就是要给自己博客做伪静态还要委托那些技术不怎么样的空间技术人员。而国内的空间服务商之差实在是难以想象,比如他会突然给你断网2-3天,不是维修就是搬机房,然后你用了几个月的404页面突然不能使用了。再几经周折后终于让空间服务商帮我的博客设置好伪静态。今天看了下谷歌网站管理工具,竟然有60多个死链接,一看原来所有中文TAG都无法访问,杯具啊!于是网上找了下WordPress中文TAG伪静态无法访问解决办法,原来是编码问题。

产生这个问题的主要原因是地址编码问题,及UTF-8和GBK之间转换的问题。IIS 对 URL 截取的时候取得的是 GBK 编码,但是 WordPress 中文都用的 UTF-8 编码,所以我们要对编码进行处理后再交给数据库进行查询。

转换编码解决 WordPress 中文 Tag 链接问题(推荐)

打开文件:wp-includes\classes.php

查找:

$pathinfo = $_SERVER['PATH_INFO'];

修改为:

$pathinfo = mb_convert_encoding($_SERVER['PATH_INFO'], "UTF-8", "GBK");

再查找:

$req_uri = $_SERVER['REQUEST_URI'];

修改为:

$req_uri = mb_convert_encoding($_SERVER['REQUEST_URI'], "UTF-8", "GBK");

保存,上传,问题解决。


10个最酷的Linux单行命令

1、sudo !!

以 root 帐户执行上一条命令。

2、python -m SimpleHTTPServer

利用 Python 搭建一个简单的 Web 服务器,可通过 http://$HOSTNAME:8000 访问。

3、:w !sudo tee %

在 Vim 中无需权限保存编辑的文件。

4、cd -

更改到上一次访问的目录。

5、^foo^bar

将上一条命令中的 foo 替换为 bar,并执行。

6、cp filename{,.bak}

快速备份或复制文件。

7、mtr google.com

traceroute + ping。

8、!whatever:p

搜索命令历史,但不执行。

9、$ssh-copy-id user@host

将 ssh keys 复制到 user@host 以启用无密码 SSH 登录。

10、ffmpeg -f x11grab -s wxga -r 25 -i :0.0 -sameq /tmp/out.mpg

Linux 桌面录制为视频。


传说中的C++十大流派

1.经典C++流:类是核心,例程多用C   Runtime的,很少用模版,一般是正统教育的结果。

2.古典C流:基本上当C用,偶尔用用对象,不使用异常,喜欢怀旧。

3.MFC流:秉承MFC的风格,主要使用MFC/ATL对象和Win32   API,不喜欢STL,用很多的宏把IDE的语法提示模块折磨到崩溃。

4.Portable流:以C   Runtime和STL为主要工具,使用类和模版,不跨平台毋宁死。

5.Functional流:以模版和STL为主要武器,大量使用函数式语言的设计方法,并号称这才是真正的C++。

6.Win32流:多使用全局函数,偏爱Win32   API,但不排斥C   Runtime,通常喜欢轻量级的程序,所以身材也比较苗条。

7.Java流:全面使用Java的风格,不能容许任何全局成员,但允许使用STL的集合类,写很多叫Factory的类。

8.COM流:喜欢AddRef()和Release(),大量使用接口,隐藏一切可以隐藏的东西,诵经的时候要把上帝替换成COM。

9.戒律流:追求完美的C++程序,计较每一个const和throw(),极力避免不安全的cast,随身一定要带一本ISO   C++手册。

10.混沌流:其程序无常形,无恒道,变幻莫测,吾不知其名。

PHPWIND去除主题回顾

在最新版本PHPWIND里回帖选择引用或者是高级模式的话会有显示主题回顾的功能,而主题回顾有个严重BUG,就是显示所有的回复内容,包括那些加密和出售的帖子,目前官方没有解决方案。

简单的解决方案,就是暂时关闭主题回顾功能,等论坛相关活动结束后再开启。

找到模板post.htm(文件夹template/wind里)

找到

if(($action=="reply" || $action=="quote"))

替换为

$sroa="0";//暂时关闭
if(($action=="reply" || $action=="quote")&&$sroa=="1"){print< <


ckeditor+ckfinder安装(实现上传图片功能 PHP)

著名的开源网页编辑软件FCKEditor在09年发布更新到3.0,并改名为CKEditor

ckeditor的代码全部重写,但里面没有了上传功能,只是一个纯粹的文件在线编辑器,如果需要上传图片,还需要下载ckfinder。

首先去官方上下载源代码,然后分别解压缩在网站根目录里(默认ckeditor和ckfinder文件夹里,一般不需要改动)

在所需要的页面插入JS

<script type="text/javascript" src="/ckeditor/ckeditor.JS"></script>

<script type="text/javascript" src="/ckfinder/ckfinder.JS"> </script>

<form action="Sroan.php" method="post">

<textarea  cols="80" id="editor1" name="editor1" rows="10"></textarea>

<input type="submit" value="Submit" />

<script type="text/javascript"> 
var editor = CKEDITOR.replace('timu');
CKFinder.SetupCKEditor(editor, '../ckfinder/'); //ckfinder总目录的相对路径.
</script>

再修改ckfinder/config.php 里CheckAuthentication函数,返回改为ture(默认为fasle)

这样就能够实现上传功能了。