博文

目前显示的是标签为“学习”的博文

Windows上的Erlang命令行快速启动

Erlang程序设计中文版中提到过,如果你把erlang的代码放在一个别的地方,那么你每次启动可能都需要运行 cd("c:/your_code_path")。 每次都需要运行一次,这无疑是很麻烦的一个事情。 于是作者也提出一个好办法,那就是在建立一个名为.erlang文件放在erlang的安装目录: 文件内容如下: io:format("consulting .erlang in ~p~n",           [element(2, file:get_cwd())]). c:cd("E:/WorkSpace/erlang"). io:format("Now in:~p~n", [element(2, file:get_cwd())]). 原书上说的是直接放在erlagn的安装目录就可以了,但是可能是erlang一直伴随着升级而书不可能跟着升级得那么快的缘故,现在把这么个文件放在形如:“D:\Dev\erl5.10.1”这样的安装目录下已经不起作用了。 真正的解决方法是放在安装目录下的/usr/文件夹下,形如:“D:\Dev\erl5.10.1\usr” 至于Windows下无法让你创建形如.erlang这样的文件的问题,直接找个Editplus之类的第三方编辑器然后用另存为的方式就可以了。

在CentOS上安装和启动Erlang

首先保证自己的系统中起码有GCC和GCC-C++吧 yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel 然后到这里去下载最新的源码包吧: http://www.erlang.org/download.html 解包编译安装: wget http://www.erlang.org/download/otp_src_R16B.tar.gz tar -xvf otp_src_R16B.tar.gz cd otp_src_R16B ./configure --prefix=/usr/local/erlang --enable-hipe --enable-threads --enable-smp-support --enable-kernel-poll make && make install 拷贝可执行文件到 /user/bin/ cd /usr/bin/ ln -s /usr/local/erlang/lib/erlang/bin/erl erl ln -s /usr/local/erlang/lib/erlang/bin/erlc erlc 这就完结了.. 启动的时候使用 erl +K true 这样就会打开核心的epoll模式了,否则会大幅度降低性能 没有打开epoll模式时: Erlang R16B (erts-5.10.1) [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false] Eshell V5.10.1  (abort with ^G) 打开epoll之后: Erlang R16B (erts-5.10.1) [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:true] Eshell V5.10.1  (abort with ^G) 简单的方法是直接修改~/.bashrc 添加一行: alias erl='...

Ternado,同步与异步

图片
总所周知,Ternado是一个非阻塞的Web服务器,很多人因为它的高效性,因为它的短小精悍而选择使用它。同样的理由,我们也选择了使用它。但是在用了它快一年后的今天,我才发现我根本就没有使用到它真正的异步特性。 首先,什么是阻塞?什么是非阻塞?以下两张图就应该能够解释一切了: 阻塞(同步)模型 非阻塞(异步)模型 两个模型从图形上理解起来都很容易。一个是顺序执行,另外一个则是打乱顺序执行。 理论上讲,非阻塞的模型并不一定绝对拥有最佳的效率,但是它在外部调用频繁、涉及到多处IO请求的状况下,它理论上拥有更高的执行效率,因为它在同步处于等待状态下的时间段内它也依然在尽力的压榨着CPU的运算能力。而异步模型最大的问题就是频繁的在多个进程(线程)中调度过程中的CPU消耗。 那么按照Ternado中给出的示例代码的执行结果是什么? 你会惊讶的发现,它官网给出的所有代码执行出来的结果都是同步的。也就是说你根本无法真正的启用它的异步特性。 import time import tornado.ioloop import tornado.web class MainHandler(tornado.web.RequestHandler): def get(self): self.write("Hello, world") class BlockHandler(tornado.web.RequestHandler): def get(self): time.sleep(10) self.write("Final Over") application = tornado.web.Application([ (r"/", MainHandler), (r"/test/", BlockHandler), ]) if __name__ == "__main__": application.listen(8888) tornado.ioloop.IOLoop.instance().start() 做一个简单的试验,运行这个程序,...

Python中为什么要用is None来代替== None?

一直以来,我对于Pycharm提示我让我用is None来替代 == None这个判断表达式表示不是很理解。 直到我看到了《Python3程序开发指南》中的一句话: “身份比较的一个好处是速度非常快, 这是因为,并不必须对进行比较的对象本身进行检查,is操作符只需要对对对象所在的内存地址进行比较——同样的地址存储的是同样的对象。” 因为None是一个特殊的内置的空对象,所以所有的为None的对象都是指向的同一个内存地址的。所以用is None的速度也应该超过== None。 简单的试验一下: __author__ = 'Siglud' import time def testIsNone(): now = time.time() a = None i = 0 while i < 100000: if a is None: i += 1 return time.time() - now def testEqualNone(): now = time.time() a = None i = 0 while i < 100000: if a == None: i += 1 return time.time() - now if __name__ == '__main__': totalTime_isNone = 0 totalTime_equalNone = 0 for i in range(10): useTime = testIsNone() print 'TYPE:UseIS TestNum: %s, Time consumed: %s' % (i, useTime) totalTime_isNone += testIsNone() for i in range(10): useTime = testEqualNone() print 'TYPE:UseEqual TestNum: %s, Tim...

C#编程处女行

这几天被Tomcat频繁的报告数据库异常、数据库处于不一致状态、违反协议搞得焦头烂额。 查阅遍了网上的相关资料,没有找到一个真正解决了问题的。而且诡异的是,这个问题是不时的出现的。而且哪怕是系统正在报告数据库异常,同样连接到同一台数据库服务器的本地测试服务则可以很正常的运行,让我对这种状况感到彻底无语了。好在这个异常虽然让整个系统陷入瘫痪,但是只需要重启Tomcat就可以恢复正常了。但是现在面临的难题是:客户也着重要求加强系统的稳定性了,为此专门找我谈话。所以,无论最后如何从根本上解决,起码我现在所需要做的是要先把表面工作做好。 于是最简单的办法就是写守护程序了。检查到数据库报错就马上重启Tomcat,本来像写一个服务,不过后来发现如果写Windows服务的话太难以测试了。于是只能退而求其次,写个控制台运用程序让它一直运行着就行了。 思路很简单:应用程序一打开,就开始不断的访问本机的HTTP地址,如果检查到页面报告异常,就重启Tomcat,如果没有异常,就过5分钟再检查一次。 因为是C#写作,不得不说操作Windows进程之类的应该很简单了,最终程序如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.IO; namespace RestartTomcat { class Program { static void RebootTomcat() { System.Diagnostics.Process.Start("net", " stop \"Tomcat5\"");//关闭Tomcat进程 System.Threading.Thread.Sleep(10000);//休息10秒钟 System.Diagnostics.Process.Start("net", " start \"Tomcat5\""); ...

我觉得是时间总结一下这个奇怪的经历了

之前在离开单位之前,简历的一通乱投,基本上能想到的都投过去了…… 本来也没有做太多的指望,然后就被挖到现在的公司里很安稳的开始上班了…… 没想到3月20来号的时候通知我要我26日到百度参加笔试…… 我说……这都多少个月了啊,至少也有个2个月了吧……这么久才发笔试邀请过来真是很奇怪啊……囧rz 不过既然有这么个机会那自然是没有不去的理由了~毕竟见识一下市面是很必要的…… 于是抱着打酱油的心态,周五就请了个假,晚上出发跑了过去(现在的公司周六也要上班的)。 火车是上午7点到的北京西站,根据Google Maps的引导,从北公交中心坐320然后到人民大学下车转运通205。 上午9点我就跑到了百度,并不难找,很大的一栋楼,而且周围全是大楼,比如旁边的就是联想的总部…… 本来计划是在周围随便找个KFC或者麦记一边吃饭一边等着(面试到1:00才开始)……结果我惊讶的发现西二旗这个鬼地方连个麦当劳也没有……简直可以说是荒无人烟orz 没辙了……只能坐着地铁往回坐,跑到西直门,随便找了个KFC做下了,一直坐到12点钟,然后坐地铁返回来…… 本来以为是个小规模的招聘,结果去了又200多人,当然了,并不是都应聘一个职位就是了…… 每个人到了先签到领标签,我大概的瞄了一下签到纸……五页多密密麻麻的名字,看来人确实不少,估计还有我没看到的…… 过后被带到百度大厦的三楼等候,因为人还没有到齐,所以只能坐在会议室里一直看百度的宣传片……这方面它确实拍了不少内部的宣传片……包括我之前在Youku上看到的那个也再次放了一遍。但是不得不说……看多了有点想吐的感觉……毕竟真正做IT的没有多少对百度抱有100%好感的,或者说10%都不会有……看少了还凑合,看多了抵触情绪确实很要命orz 然后大概是人事部的小姐讲述了一下百度的情况,我只是注意到平均年龄26岁这一说法……于是四下的观望了一下,确实,周围并没有年龄非常大的,于是我一个28岁的坐在这里感觉压力非常大……囧rz 1点钟准时发卷,规定答题时间是1个半小时……看了看题目,相当的简单,就3题。一题程序题两道算法和数据结构题,没啥难度。半个小时做完。不过因为笔记潦草,我花在誊抄上的时间远远超过了答题时间。 虽然说是1个小时答题时间,但是似乎真正到了2小时才催促着交卷,反正我是早就做完了也抄了两...

最近在读《CSS彻底研究》,做个读书笔记

一直以来都希望以严格的标准来要求自己写出标准的网页,为此也去研读过W3school的教材,学习过了XML、XSLT、XHTML、HTML5、CSS,但是总感觉对CSS的了解不够深入,只是知道怎么用,但是对某些项目的具体定义依然感觉很模糊,还是需要更多的深入了解,了解它的内核,让自己成为一个浏览器,如果我是个浏览器,我应该如何解释这样一段的CSS呢?只有自己解释出来的东西和实际情况一致,我相信这个才是一种真正的理解了。于是为了这个,还是找了不少的CSS方面的教材,这本《CSS彻底研究》就是其中一本了。 书中有很多可以说让我茅塞顿开的地方,于是还是摘录一下了: CSS中允许使用@import "other.css";这样的语句来导入式引用其他的CSS,但是这样引用的CSS将会在页面加载完成之后再次加载可能会导致页面出现“闪烁”的情况。 善于使用嵌套选择器可以减少无用Class的出现。 CSS定义层叠的情况下优先级顺序:一个元素定义了两个类别样式,此二个样式互相冲突时,以写在前面的那个为主。比如:<div class="a b"></div>,发生冲突时,最后显示的结果应该是a的样式,无论定义CSS的时候把a和b何者先定义。其他的情况还是ID>Class>类别,定义两次的时候后定义的更优先。 宽度Width和高度height的定义是内容的宽度和高度,也就是Content的宽度和高度,但是盒模型实际的高度等于内容+内边距+边框+外边距,也就是Content+Padding+Border+Margin。 颜色简写的含义:#369=#336699 对于可以上下左右顺序定义的属性值的解释(比如Padding: 0 0 1px 1px),如果只定义一个,那么就是四周,如果定义两个,第一个是上下,第二个是左右,如果定义三个,那么第一个是上,第二个是左右,第三个是下。 旧版本的IE Border下的背景无法显示出来,但是所占的位置是存在的。 背景色或者背景图显示的范围是Content+Padding+Border Margin值存在垂直塌陷情况,也就是垂直相邻的两个盒模型之间的的实际Margin值从二者之间较大的Margin值(上面的margin-bottom和下面的margin-top...

动向:忙&热

最近也就是完成了投票站往赌博站的一个改变. 其实这个改变本身就预定在计划内.程序上,数据库上都预留了接口,当时放弃这个想法的最大原因是如果把最萌作为一个赌局来运行的话判定胜负具有了太大的主观性,而且赌博缺乏赔率毕竟是不怎么好玩的事情,而在赔率的计算方面存在问题. 因此这个接口一直预留着但是没有实现. 但是情况伴随着世界杯的开始出现了改变..无疑的,世界杯是最适合赌博的一个赛事了.关注的人员众多,热情高,作为余兴节目赌博(在不赌现实货币的前提下)不失为一个好的玩法. 于是投票站改赌场改造计划正式列入议程...这次的主要目的其实还是改善以前那难看的页面同时修改JS,改为以JQuery为核心. 于是花在JS程序上的时间明显的超过了PHP本身.(因为大多数PHP的底层程序都是写好了的,只是表层没有或者隐藏了赌博的输入框而已),问题...似乎也没有遇到大的问题.心得大都是体现在了布局上面.比如不到万不得已不要指定宽度而尽量的用Maring和Padding等值来制造宽度效果等等. 然后剩下的基本上就是听取意见做一些人性化方面的修改,字句的改动,界面的微调等等了. 不过最近听闻PHP 6快要出炉了,看来又是需要新一轮洗脑的时候了... 也大概是最近因为业余时间都在忙这个的缘故工作方面更加显得忙得一塌糊涂,因为面临第三方测试和验收工作,而又需要申请服务号码,又需要申请服务器,沟通协调方面的工作一大堆,而且手头上还一直杂事不断,最近机关内部房间变动人员调整带来的PC机,网线,外设的调整也带来了额外的工作量简直让人目不暇接,而眼看着又到了月末了,又是报表的收割时间了....看来不把工作辞掉家里蹲简直是不大可能的了... 天气逐渐的热起来了..看来之前的凉爽也只是暂时的假象而已,真面目永远都是一样的狰狞

拐弯抹角的解决Share站XSLT+XML搜索引擎收录问题

正如我之前所说的,XSLT+XML的站点无论从结构上而言还是从实际运用来说,都是非常理想化的一个东西..当然,也很好..但是有个非常实际的问题那就是... 搜索引擎的收录. Share站还在内部测试的时候,hiei就已经把站点提交到了baidu和Google,但是时至今日,百度的收录条数为1.内容为"<![CDATA[ gundam uc 01 ]]>"毫无意义的一些XML中的字符..而Google则干脆没有收录. 现在基本的功能都完善了,解决share站的搜索引擎检索功能自然成为了当务之急. 于是想到了用PHP来拼接XSLT与XML. 这个函数早在PHP4中就已经存在了,我也一直知道它,但是却从来未用过..只是知道有这么个东西. 今日一试,果然才知道它的强大. 简简单单的几行代码,可以说就是用了XSL类里面ImportStyleSheet方法的示范代码就解决了这个问题. 用DOMDocument类的load方法来载入已经在磁盘中存在的缓冲,然后再同样的载入XSL文件.接着用XSL类的ImportStyleSheet方法拼接二者,再用transformToDoc方法转换拼接结果为DOMDocument,接着最后用saveHTML方法直接Echo出来,任务就完成了. PHP拼接的结果可以说是非常的完美...包括了XSL里面全部内含的JS文件,以及做的一些小手脚都很精确的展现了出来...其实我原本最初认为它可能做不到这么好的,以为我需要重新写一个较为简单一点的XSL来方便它拼接,没想到这么简单,这么完美...大大出乎了我的意料..orz 最后用$_Sever变量判断客户端的User Agent,判断为是蜘蛛之后就给出合并了之后的页面,而普通用户继续访问XML核心页面..作为服务器端我自然是希望负载越小越好..如果我直接让客户端载入XML文件,我每次就给个不到2K的XML,其余的完全依赖客户端已有的缓冲就可以生成页面了,理想状况下我甚至连一个SQL查询都不需要,这何乐而不为呢? 至此,这个XML+XSL的大难题也算是告一段落了..不过最近听闻到一个消息,那就是StratCraft2的首页也是采用这个架构的...但是很不幸的是,它明显只是看中了XSLT可以比较完美的隐藏页面内容而已,并没有严格的按照"表现与结构分离,数据与表现分离...

JavaScript基础

跨浏览器、跨语言 文档对象模型是一种 W3C 标准。因此,所有现代 Web 浏览器都支持 DOM —— 至少在一定程度上支持。虽然不同的浏览器有一些区别,但如果使用 DOM 核心功能并注意少数特殊情况和例外,DOM 代码就能以同样的方式用于任何浏览器。修改 Opera 网页的代码同样能用于 Apple's Safari®、Firefox®、Microsoft® Internet Explorer® 和 Mozilla®。 DOM 也是一种跨语言 的规范,换句话说,大多数主流编程语言都能使用它。W3C 为 DOM 定义了几种语言绑定。一种语言绑定就是为特定语言定义的让您使用 DOM 的 API。比如,可以使用为 C、Java 和 JavaScript 定义的 DOM 语言绑定。因此可以从这些语言中使用 DOM。还有几种用于其他语言的语言绑定,尽管很多是由 W3C 以外的第三方定义的。 本系列文章主要讨论 JavaScript 的 DOM 绑定。这是因为多数异步应用程序开发都需要编写在 Web 浏览器中运行的 JavaScript 代码。使用 JavaScript 和 DOM 可以即时修改用户界面、响应用户事件和输入等等 —— 使用的完全是标准的 JavaScript。 总之,建议您也尝试一下其他语言中的 DOM 绑定。比如,使用 Java 语言绑定不仅能处理 HTML 还可处理 XML,这些内容将在以后的文章中讨论。因此本文介绍的技术还可用于 HTML 之外的其他语言,客户端 JavaScript 之外的其他环境。 节点的概念 节点是 DOM 中最基本的对象类型。实际上,您将在本文中看到,基本上 DOM 定义的其他所有对象都是节点对象的扩展。但是在深入分析语义之前,必须了解节点所代表的概念,然后再学习节点的具体属性和方法就非常简单了。 在 DOM 树中,基本上一切都是节点。每个元素在最底层上都是 DOM 树中的节点。每个属性都是节点。每段文本都是节点。甚至注释、特殊字符(如版权符号 ©)、DOCTYPE 声明(如果 HTML 或者 XHTML 中有的话)全都是节点。因此在讨论这些具体的类型之前必须清楚地把握什么是节点。 节点是…… 用最简单的话说,DOM 树中的任何事物都是节点 。之所以用 “事物” 这个模糊的字眼,是因为只能明确到这个程度。比如 HTML 中...

50个令人叹为观止的JavaScript应用站点

随着诸如 jQuery, Mootools, Prototype 一类的 JavaScript 框架的崛起,Web 开发者们基于这些框架创建了众多令人叹为观止的效果。以下的50个站点全部基于 JavaScript,却拥有 Flash 一样的绚丽效果。在很多 Web 开发者看来,Flash 并不是他们的首要选择,因为 Flash 至今对搜索引擎仍是不透明的,另外,Flash 的渲染需要浏览器插件,而 JavaScript 的一切都是本地的。 Tabs Aviary - http://aviary.com/ Aviary 使用了非常圆润的 Tab 效果,点击 Tab 后,渐出渐入的栏目介绍性内容非常漂亮,它的基于 JavaScript 的下拉菜单也美轮美奂。 Toolani - http://www.toolani.de/ 黄色内容区块下方的,基于 jQuery 的 Tabs 非常漂亮。 Podcasttuneup - http://www.podcast-tuneup.com/ 漂亮的 Tab 带着有趣的上卷与下卷效果。作为对比,该 Tab 框上方还有一个基于 Flash 的 Tab 框,可以看出,Flash 的反应速度明细要快得多,然而却要等半天的时间加载。 Adworks - http://www.adworks.ro/ 尽管这些 Tab 并不象前面提到的那几个,带渐入溅出效果,但那些大图标实在惹人喜欢。 We are Sofa - http://www.madebysofa.com/ 如果你想用文字式 Tab 这个网站是个很好的例子。 幻灯式内容 monofactor -http://www.monofactor.com/ 这个重新设计后的站点使用幻灯风格展示作者的作品。 Alex Buga - http://www.alexbuga.com/ Alex Buga 自诩为 Web 设计超级明星,使用了类似幻灯片的方式展示他最近的活动。位于右上角的那个主导航条也很 Cool,不过该站点大量使用了 Ajax。 Coda, one Window Web development - http://www.panic.com/coda/ 这个站可谓家喻户晓。是很多人获得灵感的地方。 Kobe - http://www.arcinspirations.com/kobe/ 漂...

有時候看看別人写的程序,感觉自己也有不少的提高

比如昨天调教Blogger的模板中的CSS,其实只是去掉几个虚线框和更换一下title的图片,但是却意外的发现在Blogger的CSS中很少直接指定hight值,绝大多数都是用Padding和Margin来撑起来全部的页面,让页面可以随着字数的变化而变化,不至于把原有的高度撑开.... 在处理浮动问题上,也是很小心的注意到了IE和FF的不同,利用一些小的hack来解决比如/* */:/**/,而在我之前的程序中,很多时候重复定义了太多的东西,比如定义了padding和margin,又把high和width定的死死的,导致文字改变了的时候就把原有的布局撑开了,直接导致FF和IE下的显示出现截然不同,毕竟你无法规范每个浏览器在处理违规的操作上的不同,你只能把各种的可能性都考虑在自己所限定的范围内.这个应该就是Blogger的Web Designer的思考的方式吧. 但是唯一有个小问题就是:为什么我昨天只是改动了了一点布局而已,在"页面元素"这个栏目中的"博客帖子"一栏就变得无比的巨大,甚至全屏了,我确定我的CSS并未改动太多啊,只是改动了三个宽度值和Title的Padding值而已...虽然功能并未太多的改变,但是总感觉不爽的样子....不过算了,可能是程序本身的BUG了,外观显示没有问题就行了- -

找到的一些不错的Python学习资料

首推:《Python编程金典》 难得的一本中文的Python编程教材。涉及的方面也比较全,基础的到GUI、多线程编程都有涉及到,很不错的入门级书目。 当然,也有应该比它还要好的东西,可惜都是英文原版的影印本了。英文苦手的就阅读困难了……