我的成长足迹
夫志当存高远
随笔- 25  文章- 2  评论- 101 
博客园  首页  新随笔  联系  管理  订阅 订阅
置顶随笔
[置顶]jquery+.net实现类似开心网图像缩放截取功能(附代码下载)
摘要: 在系统的实现过程中用到了头像的缩放裁剪的功能模块,而且我发现在网络上很少有讨论这方面的文章,所以把我的实现方式贴出来,和大家分享一下,写的不好还请多多海涵。阅读全文
posted @ 2008-09-10 14:08 brightwang 阅读(13550) 评论(77) 编辑
2012年5月12日
.net并行库的一些记录

 

 private static void Wrong()

        {
            Stopwatch watch = new Stopwatch();
            watch.Start();
            Parallel.For(0, 500000, p =>
            {
                int c = p;
            });
            watch.Stop();
            long tempParalleTime = watch.ElapsedMilliseconds;
            watch.Restart();
            for (int i = 0; i < 500000; i++)
            {
                int c = i;
            }
            watch.Stop();
            Console.WriteLine("顺序执行用时:" + watch.ElapsedMilliseconds);
            Console.WriteLine("并行库用时:" + tempParalleTime);
        }

 

 这段并行代码看似没问题,可是执行出来的结果如下

并行错误写法

明明并行了,为什么还是慢呢,简直有些不可思议,其实MSDN上有完整的解释:

System.Threading.Tasks.Parallel.For loop has a small body, it might perform more slowly than the equivalent sequential loop.’ data-guid=”a5a0118a06f0a1b142f8185f50ced09e”>当 System.Threading.Tasks.Parallel.For 循环的循环体很小时,它的执行速度可能比等效的顺序循环更慢。 对数据进行分区所涉及的开销以及调用每个循环迭代上的委托的开销导致了性能降低。

恩,其实原因就是所谓的循环体太小,这里的循环体太小,其实这里不是指代码的长度,而是指循环体里面做的事情是否比较费时。其实改写成下面这样

 

 private static void Right()

        {
            Stopwatch watch = new Stopwatch();
            watch.Start();
            Parallel.For(0, 50, p =>
            {
                WebClient wb = new WebClient();
                string content = wb.DownloadString(@"http://www.baidu.com");
            });
            watch.Stop();
            long tempParallelTime = watch.ElapsedMilliseconds;
            watch.Restart();
            for (int i = 0; i < 50; i++)
            {
                WebClient wb = new WebClient();
                string content = wb.DownloadString(@"http://www.baidu.com");
            }
            watch.Stop();
            Console.WriteLine("顺序执行用时:" + watch.ElapsedMilliseconds);
            Console.WriteLine("并行库用时:" + tempParallelTime);
        }

 就会发现

并行库用时明显少了,当然,这里其实更应该用thread.sleep模拟下就好,毕竟访问外部IO是不太稳定的,不过这已经足够说明问题了。写这类并行代码需要注意的地方很多,一个不留神,很有可能比顺序执行更慢。

 

 

 

 

posted @ 2012-05-12 22:17 brightwang 阅读(11) 评论(0) 编辑
酷壳上的一道面试题

又一个有趣的面试题里看到的一道题目,原因看过《深入计算机体系结构》应该就能明白。

题目如下

有两个相同功能代码如下,请在在A,B,C是什么的情况下,请给出三个原因case 1比case 2快,还有三个原因case 2会比case 1要执行的快。(不考虑编译器优化)

case 1
for (i=0; i<N; ++i){
A;
B;
C;
}
case 2
for (i=0; i<N; ++i){
A;
}
for (i=0; i<N; ++i){
B;
}
for (i=0; i<N; ++i){
C;
}
我的解法

 

int length = 10000;
int[,] a = new int[
length , 
length ];
int[,] b = new int[length, length];
int[,] c = new int[length, length];
Stopwatch watch = new Stopwatch();
watch.Start();
for (int i = 0; i < length; i++)
{
int temp = 0;
temp = a[i, i];
temp = b[i, i];
temp = c[i, i];
}
watch.Stop();
Console.WriteLine(“case 1:” + watch.ElapsedMilliseconds);
watch.Restart();
for (int i = 0; i < length; i++)
{
int temp = 0;
temp = a[i, i];
}
for (int i = 0; i < length; i++)
{
int temp = 0;
temp = b[i, i];
}
for (int i = 0; i < length; i++)
{
int temp = 0;
temp = c[i, i];
}
watch.Stop();
Console.WriteLine(“case 2:” + watch.ElapsedMilliseconds);

 


posted @ 2012-05-12 22:14 brightwang 阅读(22) 评论(2) 编辑
2011年6月2日
留给晚上分享用的python代码

#encoding=utf8
__author__ = 'Administrator'

#如果是直接运行文件的话
if __name__=="__main__":
    print("main")

#怎么做性能测试
import time
def timer(reptimes,func,*pargs,**kargs):
    start=time.clock()
    for i in range(reptimes):
        func(*pargs,**kargs)
    return time.clock()-start
def test(test):
    [i for i in range(test)]
print(timer(100,test,100))

#字符串格式化
print("{0}-{1}-{2}".format(1,1,1))
print("{name}-{age}".format(name="name",age="age"))

#代替linq
x=range(10)
print(str(x))
#解析表达式 速度最快
x1=[i for i in x if i%2==0]
print(x1)
x2=x[0::2]
print(x2)
x3=list(map((lambda i:i%2==0 and i or None),x))
print(x3)
x4=list(filter(lambda i:i%2==0,x))
print(x4)


#普通类
class Person(object):
    def __init__(self,name,age):
        self._name=name
        self._age=age
    @property
    def name(self):
        return self._name
    @name.setter
    def name(self,value):
        self._name=(value+"...")
    @name.deleter
    def name(self):
        raise RuntimeError("no")
    @staticmethod
    def Run(someone):
        if isinstance(someone,Person):
            print("run")
        else:
            raise RuntimeError("只有人能跑")
    def __str__(self):
        return "my name is "+self._name+" i'm "+str(self._age)
john=Person("john",11)
print(john)
Person.Run(john)
#Person.Run(1)
john.name="john"
print(john)
#del john.name

#演示继承
class Man(Person):
    def __init__(self,name,age,sex):
        super(Man,self).__init__(name,age)
        self.sex=sex
    def __str__(self):
        return super(Man,self).__str__()+self.sex
man=Man("man",21,"男")
print(man)

from abc import abstractmethod,abstractproperty,ABCMeta
#抽象类
class abClass():
    __metaclass__=ABCMeta
    @abstractmethod
    def abMethod(self):
        pass
    @abstractproperty
    def abPr(self):
        pass
#abEntity=abClass()

#演示AOP
class trace(object):
    def __init__(self,func):
        self.func=func
    def __call__(self, *args, **kwargs):
        print("------begin------")
        print(dir(self.func))
        print(self.func.__code__)
        self.func(*args,**kwargs)
        print("----------end----------")
#演示AOP
def mydecorator(func):
    def _mydecorator(*pargs,**kargs):
        print("ffff")
        res=func(*pargs,**kargs)
        return res
    return _mydecorator

def complexDecorator(name):
    def _mydecorator(func):
        def _mydecorator(*pargs,**kargs):
            print(name)
            res=func(*pargs,**kargs)
            return res
        return _mydecorator
    return _mydecorator

@complexDecorator("bw")
@mydecorator
@trace
def demoTrace():
    print("me")
demoTrace()

posted @ 2011-06-02 15:15 brightwang 阅读(40) 评论(0) 编辑
2011年5月15日
windows上python和django开发环境的安装和配置

应合作伙伴的要求,特写一篇python和django的安装教程。

项目是在python2.x上构建的,因为django还没有支持3.x的准备,要用到的mysql-python在2.6和2.7上安装还有些区别,2.6略微麻烦点,2.7要简单些。

1、先装python2.7,因为是exe安装了,步骤很简单,选个目录,next就好。

图

检查下环境变量Path里有没有F:\Python27;F:\Python27\Scripts,这两段,盘符路径什么的自己替换下,如果没有就添加一下,以后用的着。

2、安装完就安装MySQL-python-1.2.3.win32-py2.7,这个东西如果是从官网下载自己编译简直就是噩梦,如果是linux下就没有这样的烦恼。。。,所以就去下了好心人编译的win32版本,ok,只要你安装了python,他就会根据你的path自动安装。

图

先打开python的命令行,import _mysql还有import MySQLdb测试下

图

如果没有发生异常就表示安装成功了。

3、安装django1.3,先用命令行进入django1.3的文件目录,然后执行python setup.py install 命令,ok,自动安装。

4、ok了,先找个地方试试安装是否成功

用命令行进入某个文件夹执行如下命令

 django-admin.py startproject demo创建一个django目录,demo项目,如果没有报错,然后在进入这个demo目录,执行 python manage.py runserver 8080  ,看到界面上会显示启动了一个web服务器,把url地址拷下,找个地方执行,只要安装正确就可以看到欢迎界面。ok。

5、安装ide,我比较喜欢的ide是jetbrains,当然用的是破解版。。。

 这是PyCharm v1.x的注册码

Username: caisong.com

注册码:

===== LICENSE BEGIN =====
90689-12042010
00003L7zwGXeVO9Em24bBMek8H21J8
bLcmGDBv0o5QGJFBfvHaGeXifdM5Rh
CETJS4WLZSDbafl6yXh6zWEjKNo3PW
===== LICENSE END =====

 

当然上面都是很顺利的情况,如果是在2.6下安装,就有些小问题要处理。

   import MySQLdb。出现ImportError: DLL load failed: 找不到指定的模块。是因为发现缺少2个dll文件分别为 libguide40.dll和libmmd.dll。下载之后,然后复制到 WINDOWS\system32 。这个问题就这样解决了。

   import MySQLdb。再出现sys:1: DeprecationWarning: the sets module is deprecated 的错误,再次搜索,原因是2.6不知sets这个模块,不过已经添加了set内置函数。找到MySQLdb文件夹的中__init__.py,注释掉from sets import ImmutableSet
class DBAPISet(ImmutableSet):添加class DBAPISet(frozenset):;找到converters.py注释掉from sets import BaseSet, Set。然后修改第45行和129行中的Set为set。

 

当然如果要用apache这样的生产环境测试下步骤更麻烦= =,那是以后的事情就是了。。。

 

 

 

posted @ 2011-05-15 19:29 brightwang 阅读(168) 评论(0) 编辑
2011年5月11日
小传

此人二十有七,山野村夫,求学之时举家徙至榕城。

近三十而不通人情,不思置产业,空谈理想,幼稚如少年。

不知情为何物,几近不惑却仍愚笨至极。

手不释卷,不求甚解。

虽常为后进,然好为人师,喜渡人,难自渡。

友虽少,皆耿直之辈,众人尝谓此君曰“搓”。

呜呼,敢问诸君,尚可救否?后学诸君须引以为戒,不可效此君模样。

posted @ 2011-05-11 11:07 brightwang 阅读(20) 评论(0) 编辑
2011年4月27日
使用谷歌统计来跟踪网页加载时间

之前看过百姓网的分享PPT,里面提到用谷歌统计来做页面加载时间的调查,这几天就看到一篇类似的文章。

http://www.biaodianfu.com/google-analytics-page-loading-time.html

转载如下

 

Google Analytics可以用来记录网站的加载时间或网页内各个模块的加载时间,其实整个原理非常的简单,只是记录页面呢不同位置javascript的执行时间,两者相减即加载时间。比如我想知道用户加载页面中head部分JS和CSS的时间和加载页面中主体内容body的时间。具体实现方式如下:

1、在页面head中CSS和JS文件加载前添加如下代码:

<script type="text/javascript">var _head_start = new Date();</script>

2、在页面<body>位置后面添加下面的代码:

<script type="text/javascript">var  _body_start = new Date();</script>

3、在页面页脚中,即</body>前添加下面的GA代码:

<script type="text/javascript">var _now= new Date();</script>

4、通过Google Analytics的事件跟踪将加载时间记录下来:

<script type="text/javascript";>
 
if (typeof(_head_start)==typeof(_now)) {
 
if (_now-_head_start<1000*10) {
 
_gaq.push(['_trackEvent', 'Performance', 'head', '/pagepath/', _now-_head_start]);
 
_gaq.push(['_trackEvent', 'Performance', 'body', '/pagepath/', _now-_body_start]);
 
}else{
 
_gaq.push(['_trackEvent', 'Performance', 'slow head', '/pagepath/', _now-_head_start]);
 
_gaq.push(['_trackEvent', 'Performance', 'slow body', '/pagepath/', _now-_body_start]);
 
}
 
}
 
</script>
posted @ 2011-04-27 13:23 brightwang 阅读(88) 评论(0) 编辑
2011年4月22日
get you in, and out and back to life---手机的未来是社交的聚合
摘要: 想写这些东西的原因是因为在知乎上看到创新工厂的黄继新等人毫无道理的喷wp7,毫无道理的捧android,毫无道理的贬低iphone,我一直怀疑这样人的动机,创新工厂这些打着“创新”旗号的人,看着素质并不高,捧的几个理由也不是我想象中未来手机的模样。我觉得在这个信息爆炸的年代,把各种信息流进行聚合,回归社交的本质才是未来手机的趋势。用微软的广告词就是 get you in, and out and back to life。 手机从出现开始就是个典型的社交工具,比如最“原始”的应用------电话,短信,无疑是社交的最经典的方式。手机天生具有社交的属性是毋庸置疑的。在微博,SNS等新的应用形态诞阅读全文
posted @ 2011-04-22 23:19 brightwang 阅读(91) 评论(0) 编辑
2011年4月3日
对于edu近期bug的debug思路(等待放假归来验证)
摘要: edu最近两周发生很奇怪的问题,如下图所示,这个bug的简单描述就是同样的语句,通过mysql.data,取数据库,取到的值不稳定,有的时候能返回正确的值,有的时候就返回null,一开始认为是我们内部orm框架的bug,但是后来用直接调用mysqlcommand的ExecuteScalar方法也依然报错。而且这个bug只要一重启之后就恢复正常,一段时间,可能1天可能2天就又会重现,完全不知道该如何下手。因为这个问题,edu产生了很多插曲,这个有空详细总结下edu在这次异动中的经验教训,项目两年了,还是不断重复着昨天的故事。 回到这个bug,我今天回头从mysql.data的源码里面找原因,看到阅读全文
posted @ 2011-04-03 15:52 brightwang 阅读(32) 评论(0) 编辑
2011年3月12日
Programming.Ruby 学习笔记(2、3章)
摘要: ruby 对单引号和双引号的字符处理是不一样的。(1)双引号可以应用到转义字符(2)双引号内的字符串可以通过#{varname}进行变量替换,如果是全局变量或者实例变量不需要{}符号。------不是很懂这两个变量的区别nil 在ruby中也是对象,只是他表示的是什么也没有。ruby的控制结构语句没有花刮号,用end表示结束。ruby中数值类型是不可变的,也就是传的值,不是引用。3章,开始就说了对象的定义ruby类的定义中的构造函数是initialize函数,初始化一个新对象是xx.new,ruby的tostring方法是to_s。ruby添加一个新方法也太high了,只要直接添就好,和js.阅读全文
posted @ 2011-03-12 21:51 brightwang 阅读(23) 评论(0) 编辑
2011年2月17日
一个由于浏览器优化导致的正则表达式直接量bug
摘要: 最近在修改一个兼容性bug的时候发现了一个由于浏览器优化所导致的bug。先看例子。html代码代码 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--><div><inputtype="text"value=""id="textName"/>&nbsp;&nbsp;<br/><inputtype="button"value="直接量测试"id="btnCheck"/><br/>阅读全文
posted @ 2011-02-17 16:35 brightwang 阅读(61) 评论(0) 编辑
仅列出标题  下一页
Copyright ©2012 brightwang