只知羡慕别人的成就,却看不见别人的汗水

前几天发了个微博,感慨如下:

  有太多人,只知道羡慕别人的成就,却看不见别人的汗水,这已经被无数鸡汤文提到;那么也有不少人,汗水付出也很多,加班很辛苦,累的七死八活,但是依然没 有什么太好的成绩,我想说,这里除了部分人运气不佳,大部分是“用力不用心”(或者说“用力不用脑”),白白耽误自己的青春。

  老规矩,为免某些喷子乱放炮,先设置前提,这里所说的成绩是指可以获得很好的职位和薪酬,能够过上体面的中产阶级生活,也就是普通人通过努力真的可以达到的境界;如果非拿怎样成为李彦宏,马化腾说事,那只能吐血三升,叹一句天不佑孤,奈何。

  微博篇幅有限,今天说说自己的理解。

  1、不善归纳,总结

  比如说,A、B两个人,都去做企业建站,A呢,也想多赚钱,经常加班,做完一个又做一个,做完一个又做一个,做了五六年,还是只会做基本的企业建站,能力停滞不前,然后哀叹命运不济;B呢,凡事多琢磨一点,做了两三个,琢磨重复性工作那么多,能不能把重复代码拿出来,整理一些工具出来,再做几个,这些工具都成熟了,能不能弄个简单自动发布平台,再搞搞,对需求理解多了,发布平台能不能再灵活一点,对模版支持性会不会更好一点;到后面,A还在自己哼哧哼哧的加班做网站,B呢,靠这个系统已经成为公司的核心;至于身价,想想都知道。

  2、埋头做事,不抬头看路

  我以前也遇到这样的困境,当你全力投入一个领域,一个产品的时候,你会觉得,这就是最重要的,对公司最重要的;对你个人最重要的,其价值是不言而喻的;但是偶尔,因某种原因,你放松下来,脱离这个产品,站在更高的角度去看,才发现,其实你所认为最重要最核心的事情,也许没那么重要;你所认为价值最大的东西,也许没那么大价值;这些年遇到不少这样的职业素质很高,很努力的人,都是在埋头努力于一些并不十分重要,甚至是非常有问题的项目上,但是他们当事者迷,还在不断要求资源配合,从公司的角度来讲,这是不顾大局的,甚至还会影响到真正重要业务的发展。

  这里会出现的问题是,新机会,新变革出现时,无视机会,舍不得已有的劳动成果;出现问题和状况时,不肯当机立断,总想再试试,再投入,从而滑向深渊;

  3、不求甚解,盲目追新

  有很多“善于”学习的年轻人,很抱歉这个“善于”是要打引号的,他们热衷于追踪流行的技术,新鲜的产品,对新事物的敏感性很强,而且确实也能很快搞出点门道;但是!但是他们总是缺乏对基本问题的理解和判断;

  比如说,遇到了数据库负载问题,还没有完全吃透数据库索引优化的原理,听说mongodb不错,赶紧换一个;然后听说redis不错,部署一个,听说什么 不错,搞一个;这种人,看上去什么都会,什么都懂一些;但是真遇到问题,缺乏分析能力,只是靠蒙,碰对了也能解决;碰错了就继续蒙;你看他们随时拿着最新的工具书学习,怎么看都应该是奋进学习的好青年,可是过了很多年后,基本的技术问题还是靠蒙,然后简历上写满了各种精通,却还是无法胜任一些真正需要技术素养的岗位。

  4、自我设限,胆小怯事

  我也有一些这样的朋友,从智力上,能力上都没有问题,问题在于心态;才干了几年某个领域,就认为自己不擅长其他领域,做了几年技术,就认为自己不擅长产品;先给自己设置了一个圈子,然后谨小慎微的在圈子里发展,对圈外的东西不闻不问,然后,自以为这样就可以成为领域内专家,很可惜,这个世界的变化越来越快,跨界已经成为流行竞争方式,你不想跨界,别人跨界来打劫你。这样的例子太多太多,所以,当他们遇到那些跨界冲击时,视野狭窄,思维局限的问题暴露无疑。

  5、短视,急功近利

  看到什么公司薪酬高,给的价码好,就义无反顾的往里跳;也不看看这个公司是不是够靠谱,行业是不是对路,公司老板是不是有信用;过了三五年发现昔日同窗已经脱胎换骨,再看自己的简历惨不忍睹。

  有这么一种人,号称职场杀手,看简历上纷杂的记录,去哪个公司,哪个公司完蛋,是这个人命不好么?有一些是,有一些真不是,每次都选择给自己开价最高的雇主;但是实际上自己能力没有那么高,能够给一个能力没有那么高的人开那么高的价,这个公司显然用人有问题,所以,垮掉是必然的,所以,这种人多半不值得同情,是自己短视造成的。

  并不是说开价高不好,但是至少要评估一下,这个公司是否有长远的发展,他所处的行业是否是顺风的行业;他们的老板是否有信用,懂人才,然后也要自我评估一 下,自己是否有这个能力,能否抗这样的角色,以及,自己的上级,同僚,是否是能够很好的共处,以及能否给自己带来足够的帮助及提升?

  如果不能综合评估,至少要知道,眼光长远点。

  先想到这些,其实这里很多错误我自己也犯过。而且!我还不勤奋,所以才会蹉跎这么多年。

转发: 继续阅读

发表在 好文推荐 | 2 条评论

GO语言开发工具

现介绍推荐个GO语言开发工具,方便大家开发使用

LiteIDE

iteIDE是一款专门为Go语言开发的跨平台轻量级集成开发环境(IDE)

LiteIDE主要特点:

    支持主流操作系统
        Windows
        Linux
        MacOS X
    Go编译环境管理和切换
        管理和切换多个Go编译环境
        支持Go语言交叉编译
    与Go标准一致的项目管理方式
        基于GOPATH的包浏览器
        基于GOPATH的编译系统
        基于GOPATH的Api文档检索
    Go语言的编辑支持
        类浏览器和大纲显示
        Gocode(代码自动完成工具)的完美支持
        Go语言文档查看和Api快速检索
        代码表达式信息显示F1
        源代码定义跳转支持F2
        Gdb断点和调试支持
        gofmt自动格式化支持
    其他特征
        支持多国语言界面显示
        完全插件体系结构
        支持编辑器配色方案
        基于Kate的语法显示支持
        基于全文的单词自动完成
        支持键盘快捷键绑定方案
        Markdown文档编辑支持
        实时预览和同步显示
        自定义CSS显示
        可导出HTML和PDF文档
        批量转换/合并为HTML/PDF文档

下载地址:点此

In chart 2 we see that IT
quick weight loss The 2013 Nissan Maxima 3

‘Nancy was a doll
quick weight lossoff to Air in November
free porn sites
发表在 网站开发 | 标签为 | 2 条评论

GO语言常用命令

Go语言自带有一套完整的命令操作工具,你可以通过在命令行中执行go来查看它们

常用的几个介绍:

go build
这个命令主要用于测试编译。在包的编译过程中,若有必要,会同时编译与之相关联的包

go clean
这个命令是用来移除当前源码包里面编译生成的文件

go fmt
格式化你写好的代码文件.使用go fmt命令,更多时候是用gofmt,而且需要参数-w,否则格式化结果不会写入文件。gofmt -w src,可以格式化整个项目.

go get
动态获取远程代码包

go install
这个命令在内部实际上分成了两步操作:第一步是生成结果文件(可执行文件或者.a包),第二步会把编译好的结果移到$GOPATH/pkg或者$GOPATH/bin

go test
执行这个命令,会自动读取源码目录下面名为*_test.go的文件,生成并运行测试用的可执行文

godoc

GO文档查看

常用的:
godoc –http=:8080
godoc fmt
godoc fmt Println

gofmt

这个工具可以将你的源代码格式化成符合官方统一标准的风格,属于语法风格层面上的小型重构

常用的:

gofmt -w *.go

会格式化并重写所有 Go 源文件

gofmt map1

会格式化并重写 map1 目录及其子目录下的所有 Go 源文件

好了,就介绍这些吧。

The Aussie unit is back above 70
snooki weight loss get cash in bank account prior to payday

1 format with the ambient sound effects that creep into it
miranda lambert weight lossSummer Fashion Trends for Men
gay porn
发表在 网站开发 | 标签为 | 2 条评论

PHP为什么会被认为是草根语言?

       PHPer是草根吗?

  从PHP诞生之日起,PHP就开始在Web应用方面为广大的程序员服务。同时,作为针对Web开发量身定制的脚本语言,PHP一直秉承简单、开源的思想,这也使得PHP得以快速的发展,并且大力地推动Web2.0的出现与发展。但是,长期以来,PHPer(PHP Programmers)被认为是处于草根阶层的程序员,被认为是技术含量少,层次低的程序员。这点在国内尤其突出。

  记得一个技术主管说过这样一个事情。他给一个程序员分配了PHP的开发任务,没想到那个程序员居然说:“我是学Java出身的,你让我去写 PHP,你这不是在贬低我吗?”。这件事情给我印象很深、触动也很大。虽然这不能代表大部分程序员的看法,但是这么认为的人应该不少。还有人说,现在如果是大型的政府项目,PHP是肯定不会被列入考虑的范围之内的。

  那么为什么PHPer会被认为是草根阶层,是因为它很简单,人人都可以学会,所以没什么难度吗?我以前也是这么认为。PHP入门很快,处理文件,数据,远程连接,网络编程都非常方便,官方也有这样的说法:PHP学习的成本很低,所以你容易去使用它。这个想法也是普遍的,甚至大部分的PHPer 自己都这样认为。

  说到这里,我想大家就会想到我为什么要写这些文字。因为一年多的PHP推广工作让我了解到许许多多的使用PHP的公司的大概情况。在这些过程中我慢慢体会到其中的根本原因。这里我说是根本原因虽然是个人的看法,但是我觉得事实就是如此。

  那么为什么PHPer会被看成草根阶层,根本原因是PHPer所作的事情(通过代码实现)的绝大部分都是表现层的东西,这个熟悉PHP的人都知道。当然也会有PHP会说他用MVC结构编写的某某框架具备的如何如何的功能。但是这些还是表现层。所以只会处理表现层的程序员就被看成草根阶层了。事实上也是如此,因为这种情况下PHP确实很难构造大型的应用。

  这就找到原因了,不是的。为什么PHPer总是在负责表现层的东西呢。答案是底层的数据处理(Web应用就是数据存储和查找)我们一般不去触及。好,那么说到这里有些人可能已经想到了,那不就是数据库吗?对,就是数据库。让PHPer一直当草根的元凶就是数据库。为什么?
  PHPer对MySQL的依赖过大

  因为目前流行的web架构中,前端是负载均衡系统,中间是web服务器,后面是数据库服务器。所以,大部分PHPer工作在Web服务器层面。因为数据库已经很好地为我们组织数据了。所以PHP中没有太多的算法,而且大家潜意识下也觉得不需要,更何况会影响性能。

  这种情况下,PHPer就成为了数据库使用者,他总是在操作数据库。而不是在做程序。一个最简单的PHP脚本就是,连接数据库,把数据取出来,然后用命令输出到浏览器。整个过程不超过10行代码。给人的感觉就是太简单了。没有任何技术含量。为什么了,因为数据处理部分都已经被数据库做完了。尤其是MySQL的使用。MySQL是免费的,所以大多数程序员可以自由地使用它,另外MySQL的速度够快了,所以做个PHP应用程序非常的简单。这就相当于给你枪以后你觉得没有必要学习武功一样。当然,我不是说枪没有武功好。而是说,枪的出现,小孩都可以轻松便捷地杀人了。

  我们再详细说说为什么是数据库。这里我说一个例子。我去过北京一家非常著名的网站,当时我们还有一个比较资深的PHP程序员在那说些系统架构的事情。我记得当时那个程序员问大家一个数据结构中的算法问题的时候,全场没有一个人能答得出来(包括我)。然后那个程序员就开始给大家讲些很基础的数据结构的东西了。让我一下子回想到大学时候学的数据结构课。而这些基础的数据排序、查找、传递的问题在其他高级语言(比如C)是非常普遍的。但是在PHP没有。PHPchina.com的论坛也有个板块叫PHP的数据结构和算法。这个板块的帖子也是寥寥无几。

  说到这里,大家明白了吧?大部分PHPer仅仅处理表现层的东西,而在MySQL的便捷使用下,PHPer几乎不用触及任何数据结构与算法的情况下完成大部分开发任务,所以一个才有上面的,没有一个PHP程序员能够回答出那道数据结构的问题,换成是C等语言,情况可能就大不相同了。是PHPer草根,才让PHP显得草根。

  仔细回想下,目前网络上大家讨论的最多的是两个方面的问题。一个是PHP的类的使用(处理过程的封装),还有一个是开发框架问题。但是我们仔细分析的话,发现这些所谓的PHP中比较复杂的概念里面没有数据处理。为什么,有数据库。用一个Adodb或者PHP5的PDO就可以搞定了。真的搞定了吗?不是,这些无非是在连接数据库,没有数据处理。所以PHPer似乎就没有什么可以拿出台面上的东西。

  再说一个具体的代码问题,无级分类。这个概念我想大家都不会陌生了吧。我见过两种处理方式。第一个是地道的PHPer的处理方式,也是目前比较流行的。就是用数据库来处理。而且字段很少,只需要加个父类的字段并加以判断就行了。而且这个方法很实用。效率也高。但是这个不是数据处理的范畴了,而是数据库的查找。

  第二个是C程序员用PHP写出来的,他把所有的分类信息都从数据库取出来,然后用数据结构算法进行排列分布,然后输出。

  这里我们不对这两种方式的效率进行对比,我想大家都有各自的想法。但是我想说明一个问题,就是这两种做法的本质的区别。PHPer习惯性地用数据库来处理,而且有很巧的处理方式,效率也很高。这种方式就是数据库查询。而第二种方法是比较有特点的。他认为数据库就是存放数据的地方,具体的逻辑处理还要靠自己的逻辑。

  因此,结论是第二种方法的使用者觉得自己强些,因为数据的逻辑是他组织的。并且觉得PHPer的那种做法无非就是会查询数据库罢了。所以他认为PHPer是草根级的,只懂得操作数据库和排列页面(smarty搞搞那种)。
  让数据库回归本职工作

  说到这里,我想大家都已经回忆了不少自己平时用PHP做开发的经历了吧,是否发现大家确实都在操作数据库呢。

  那么我们来讨论下这个问题。数据库不好吗?为什么我一直用数据库处理数据都没有问题。我要说的是数据库是有问题的,而且有很大的问题。当然这里我并不是说不能用数据库,也不是在贬低数据库的性能。而是,我们没有充分认识到数据库所起到的作用。

  我的想法源起于这样一个事情,有一次一个网站的技术总监问我,为什么他们的网站那么慢,要怎么办。当时,我的MSN里Zend总部的工程师正好在线,我就问他PHP响应比较慢了,怎么办?他当时直接告诉我,是数据库问题。肯定是数据库没有优化设计好。所以,我没有给那个技术总监确切的答案了,因为他们的数据库设计我们是不能涉及的。所以就给了大概的数据库优化的建议。这样的事情屡次发生,我就开始怀疑,为什么Zend总部的工程师每次都跟我说是数据库的问题呢,难道我们不能从PHP层面来解决这个问题吗?答案是不能。因为PHP目前的运行速度已经是很快了,通过Zend的性能分析也能看到一个用户的点击,PHP的运行时间只有10%不到,那PHP在干吗?它在等。等数据库的查询结果。这个方面在目前的PHP产品中有了很大的提高,那就是 Caching和网页静态化两个方案。

  Caching可能大家会比较陌生,但是网页静态化现在连PHP产品的用户都非常清楚了。速度快、容易被搜索到等等,好处不言而喻。开玩笑地说,现在网站的主页实现网页静态化只需要硬盘足够大。J至于Caching就比较复杂些,也是大多数PHPer感到头疼的地方。甚至于有些人会用C来实现。因为Caching中的数据有效期验证、查找、提取、更新等等都是比较难处理。当然,也有人会用数据库来处理 Caching问题。

  所以,当访问量激增的时候,PHP架构的网站会出现的很多问题都因数据库而起。数据库的同步问题还不算什么。关键是数据库的响应速度会有指数级的降低。这个问题我在10月23号LAMP发布会的时候问过MySQL的副总裁。他当时也没有给我比较完美的答案(这也我的意料之中),因为数据库总会有瓶颈的,除非是神仙数据库,哈哈!

  这里有个题外话,LAMP大会的时候我跟Yahoo的一个技术高管聊的时候,我问他Yahoo在选择MySQL还是Oracle的时候是怎么考虑,他的答案令我非常惊讶。他说大部分的时候我们是会用MySQL的,因为它的性能已经达到我们的要求。但是什么时候我们会选用Oracle呢,就是当我们需要存储收费用户的数据的时候。我就问为什么,难道Oracle比MySQL稳定吗?他说,这个倒没有特别考虑。关键是如果使用Oracle的话,当出现问题的时候我们可以找到负责人,Oracle会负责事故的处理,但是如果用MySQL的话,我们找谁去?

  所以,我们对数据库的看法应该纠正过来,就是说数据库不是万能的。如果有实力的话自己开发数据库。听说Google就是那样的。

  那么我们怎么看待数据库呢?我个人的理解是数据库只是用来降低开发成本的手段。因为采用数据库以后我们不需要考虑数据的存储,尤其是排序和查找。但是这会带来什么问题呢?就是当业务膨胀的时候,数据库就成为瓶颈了。这个时候问题就会非常棘手。因为这个是底层的数据处理。牵一发而动全身。

  所以我认为正确的观点是,数据库是一个数据备份机。怎么理解,我们只需要保证数据的存储有效性就行了。而这本来就是数据库的核心功能,只不过因为数据库的方便的排序等功能让大家把过多的处理都交给数据库来操作了。一个用户的点击PHP就把一大堆的任务交给数据库,然后把结果排列下给用户就完事了。这对数据库是不公平的。也是因此大家开始抱怨数据库的性能了。

  针对这个观点,我们再举个例子,有一次我去拜访一个大型的网络公司(基本上国内只要上过互联网的都知道),他们使用PHP很少,但是我了解到他们其它业务是怎么使用数据库。他们自豪地跟我介绍说他们在数据库的外围有个第二数据库(我这里起名叫第二数据库)。为什么叫第二数据库呢,原来它是一个缓存系统。那么开发工程师怎么去这个缓存系统获取数据呢?那个技术总监自豪地说,他们这个缓存系统有SQL查询语句。我当时很惊讶,但是后来想想确实需要这个。因为当你的缓存系统达到一定量级的时候从缓存获取数据都非常复杂,干脆写个SQL查询语句让缓存系统分析、处理并返回数据。而且他们告诉我,在他们那里,就算是用PHP的话也是让PHP去那个缓存系统读取数据。

  所以说,如果你能处理好这样的问题的话,把数据存放在数据库,然后数据库只起到备份的作用。然后你用自己的中间层来处理分析数据,效果是90% 以上的用户不访问数据库。有人就会说了,这不就类似连接池的东西吗?是的,因为数据库的瓶颈是无法解决的,我们只能在Web服务器和数据库中间加个中间层来做缓冲。

  可能大家会说了,切,这个我们早就知道了。那好,这里我要说的是它引发的两点思考:

  第一,有些语言已经有连接池技术的基础上,那些程序员可以方便地使用连接池而构建大型应用。那么如果他们认为 PHPer只会是用数据库,那么我们是不是可以说他们只会是用连接池呢?连接池和数据库在这个概念上有何区别?

  第二,当PHPer开始构建自己的缓存系统的时候,他是不是突破了PHPer只会是用数据库的层次?因为他参与了数据逻辑的处理工作。那么他还是草根吗?

  最后,懂得独立思考的PHPer不是草根,什么事情都丢给数据库去做的才是。

It’s definitely something we’re going to continue toying with
quick weight loss 3 Ways to Design Your Own Fashion Shawl

and Ralph Lauren Home
gay pornSelena Gomez and Demi Lovato Boyfriend Fashion Praised
xvideos
发表在 好文推荐 | 标签为 | 2 条评论

英语老师的寄语–借此勉励一下同学们

2014寒假寄语

近来,咱们英语课的公共邮箱信件丢失情况比较严重,引用一个同学的提议,就是大家要“设置好自己的客户端,或者邮箱搬家、自动转发、自动收取等等私人邮箱里的设置;已经设置好了的,都检查一遍”。也就是说,如果设置好了,即便公共邮箱里的信没了,自己的关联邮箱还是不受影响的。

另外,为了双保险起见,我打算在继续使用公共邮箱的同时,还通过班委在QQ群里同步发布信息,增加大家及时收到文件的可能性——我知道有些同学很少使用公共邮箱。

期末考试的情况与往年一样,既有95分以上的,也有二三十分的——那种惨不忍睹,我也爱莫能助。很明显可以看得出来:谁的基础好且听过课,谁的基础好但没有听过课,谁的基础不好但听过课,谁的基础不好且没有听过课,谁认真备考过,谁考前连佛脚都没抱过的……一目了然。

一个严峻的事实是,有相当数量的同学的英语存在很大的问题(拼写、句法、语感等),尤其是12级的一些同学,已经过了两年了,英语却似乎还没“入门”。期末考试也许能让你勉强及格,但三级怎么办?历届都有大批人载在三级上,不能顺利毕业,大家要警醒!一定要积极行动起来。大家并不笨,但英语考那么一点分,岂不可惜?

其实,我并不是批评考得不好的同学。你们中的绝大多数学习态度都很好,在各种压力之下还要继续学业,这需要很大的勇气和定力。大家都是很有追求的好孩子——即便我无比遗憾地看到你们大批旷课,我也会这么说。确实,大家各有苦衷,各种压力山大,人有时确实很无奈,似乎一生就像夸父追日那样,劳碌奔波永无止境。不过,夸父追日的精神至少还是值得赞赏的。更何况,一份耕耘,一份收获——当然,你耕耘的地方要合适,方法要得当。也许人一辈子就有这么一两个决定性的坎,如果你咬咬牙,上去了,人生道路迎来转折点,日后也许就顺理成章了;如果你一时懈怠,没有迈过去,也许一失足成千古恨,一辈子都只能在门外徘徊,遗憾终生……

另外,要保持良好的心态。在物欲横流的社会,人容易惶惶不可终日,安不下心来学习。这确实是个困境,得靠诸位各自修炼。有时候,不要被别人表面的光鲜而迷失方向,毕竟家家都有本难念的经,每个人都有各自的难处,就连富翁也有不如乞丐的地方,只是他自己不说、外人不知而已。所以,没有必要羡慕别人,尽最大可能做好自己就行。

世事变化,何人能料?英语里有句谚语:“He who
laughs last laughs best.
”(翻译:谁笑到最后,谁就笑得最好——也就是说,笑到最后的人是真正的赢家。“who laughs last”是修饰“he”的定语从句,把从句用括号括起来,就能分清主谓了)做事要有长远打算,分清轻重缓急,要对自己的情况做出尽量准确的判断和选择,一旦认准,就持之以恒,坚持不懈,方见成效。

建议大家寒假回家的时候把词汇书带在身边,用零碎时间多背单词。读书心要静,要投入,不能心猿意马,不然单词就如过眼云烟,总也记不住。另外,背单词是一个反复的过程,而且与当时的注意力直接相关。如果你背单词很投入,也许背几遍就能记住;如果不在状态,那就需要许多遍才能记住。最佳状态是,你能在单词中找到乐趣,令你感到背单词不是苦差,而是一种游戏或挑战。

不能一味地只背单词,而要把背单词与学习语法、背完整句子结合起来,把读和写结合起来。对于一些人来说,“魔鬼训练”是有成效的,集中一段时间,试试单词书、语法书、真题书的轮番轰炸。记得以前有个老师回忆他的大学经历,戏谈他当年备考GRE的时候,人完全不出宿舍门,自己的床上拉一副厚实的帘子遮挡外面的一切——包括光线,开一盏台灯,不分昼夜地学英语,而且做梦都在做英语阅读,说梦话都是一串英语……就连吃饭他也不下床,由室友买来端进他的帘子里……也许太夸张了点,我们都忍不住哈哈大笑,但是这也是有一定借鉴意义的,有时候痴狂与天才就是这么一步之遥。痴与狂的本质就是高度投入和专心,注意力高度集中,还有什么做不成的事情?当然,我不赞成以损害身心健康为代价,若要尝试,适可而止,千万别走火入魔。

相对于GRE来说,三级英语真的不难。只要多背些句子和单词,就能照葫芦画瓢,毕竟单词就那么些个,语法点也就那么些条,认真背一背,顶多是个力气活,要求不算高。咱们要战略上藐视敌人,战术上重视敌人。这个寒假,我希望大家给自己列一个背单词计划表,争取开学前过一两遍三级词汇,另外,要精读附件中的语法材料(11月考试之前给你们发过的那份),尤其彩色字体部分。附件里还有11月的真题(以前也发过的),别忘完整做一遍,反思一下自己丢分在哪里。希望大家完成这份寒假作业,开学前一两周再关注QQ和公共邮箱,到时候会有新学期安排的通知。

好了,就侃到这里,希望对大家有所帮助,尤其是目前比较郁闷的同学或是有点迷茫的同学。希望大家在学习和人生的攻坚阶段,好好把握,即便在最困难的时刻,也不要气馁,也许有一双眼睛正默默地关注着你们,祝愿大家2014年一切顺利……

 

It can and does look good on some people
miranda lambert weight loss MDI FSM start application process for 2011

battle using the titans online evaluation
weight loss tipsPapa’s Got a Brand New Gym Bag
youjizz
发表在 个人感悟, 北京大学 | 2 条评论

图形学成绩总结

通过图形学的期末成绩,看大家各自学习的情况和成绩总结,有时感到意外。

这其实是考试技艺,所以考试前应该重点复习一下老师讲的,应该背过的一定要背过。

一定要熟读老师的PPT。

That changes in the episode with photographer Matthew Rolston
miranda lambert weight loss CHOCHENG Spring Summer 2010 at Mercedes

internet portions of the presentation as well as getting headache internet business
cartoon pornTwo plain janes ruling the beauty fashion heap
how to lose weight fast
发表在 北京大学 | 2 条评论

SSDB-个快速的用来存储十亿级别列表数据的 NoSQL 数据库

SDB 是一个快速的 NoSQL 数据库, 用来存储十亿级别的列表数据

SSDB 是稳定的, 生产环境使用的, 已经在许多互联网公司如奇虎 360 得到广泛使用

下载和安装

 wget --no-check-certificate https://github.com/ideawu/ssdb/archive/master.zip
$ unzip master
$ cd ssdb-master
$ make
$ # 将安装在 /usr/local/ssdb 目录下
$ sudo make install

# 启动主库
$ ./ssdb-server ssdb.conf

# 启动为后台进程
$ ./ssdb-server -d ssdb.conf

# 启动从库
$ ./ssdb-server ssdb_slave.conf

# 启动 ssdb 命令行
$ ./tools/ssdb-cli -p 8888

# 停止 ssdb-server
$ kill `cat ./var/ssdb.pid`


从 Redis 迁移到 SSDB

工具

在 tools 目录中的 redis-import.php PHP 脚本可以用来将 Redis 服务器上的数据, 拷贝到 SSDB 服务器上.

用法:

php redis-import.php redis_host redis_port redis_db ssdb_host ssdb_port

参数:

    redis_host: Redis 运行所在的 IP 或者主机名
    redis_host: Redis 监听的端口
    redis_db: Redis 的 DB 编号
    ssdb_host: SSDB 运行所在的 IP 或者主机名
    ssdb_host: SSDB 监听的端口

SSDB 支持 Redis 协议和客户端, 所以你可以使用 Redis 的客户端来连接 SSDB 进行操作.

Clients

SSDB 源码仓库中, 内置了许多语言的客户端, 这些便是所谓的官方客户端.包括C++,Cpy,C#,Go,Java,Lua,NodeJS,PHP,Python,Ruby等。

php-client 文档说明见:点此链接

SDB 网络协议定义

SSDB 的网络协议超级简单!
报文

Packet := Block+ '\n'
Block  := Size '\n' Data '\n'
Size   := literal_integer
Data   := size_bytes_of_data

请求

Request := Cmd Blocks*
Cmd     := Block

请求命令包括: get, set, del, …

响应

Response := Status Block*
Status   := Block

响应状态码包括: ok, not_found, error, fail, client_error
示例

用 telnet 或者 nc 命令连接到 SSDB 服务器, 然后输入下面的代码(用最后一行空行结束):

3
get
3
key

你将看到类似这样的响应:

2
ok
3
val

高性能的 SSDB 协议解析器

#include <stdlib.h>
#include <string.h>

int len = buffer->size();
char *ptr = buffer->data();
while(len > 0){
	char *data = (char *)memchr(ptr, '\n', len);
	if(data == NULL){
		break;
	}
	data += 1;
	int num = data - ptr;
	if(num == 1 || (num == 2 && ptr[0] == '\r')){
		// Packet received.
		return OK;
	}
	// Size received
	int size = (int)strtol(ptr, NULL, 10);

	len -= num + size;
	ptr += num + size;
	if(len >= 1 && ptr[0] = '\n'){
		len -= 1;
		ptr += 1;
	}else if(len >= 2 && ptr[0] == '\r' && ptr[1] == '\n'){
		len -= 2;
		ptr += 2;
	}else{
		break;
	}
	// Data received
}

a dressy belt
gay porn You are getting a horse

such as the material used to make the handbag
gay pornA Nike Jordan is one of the best basketball shoes ever made
cartoon porn
发表在 网站开发 | 标签为 | 2 条评论

GO语言环境配置2


工作空间

Go代码必须放在工作空间内。它其实就是一个目录,其中包含三个子目录

    src 目录包含Go的源文件,它们被组织成包(每个目录都对应一个包),
    pkg 目录包含包对象,
    bin 目录包含可执行命令。

go 工具用于构建源码包,并将其生成的二进制文件安装到 pkg 和 bin 目录中
src 子目录通常包会含多种版本控制的代码仓库(例如Git或Mercurial), 以此来跟踪一个或多个源码包的开发

环境变量


GOPATH 环境变量指定了你的工作空间位置

首先创建一个工作空间目录,并设置相应的 GOPATH。你的工作空间可以放在任何地方, 在此文档中我们使用 $HOME/go。注意,它绝对不能和你的Go安装目录相同

$ mkdir $HOME/go
$ export GOPATH=$HOME/go

请将此工作空间的 bin 子目录添加到你的 PATH 中,方便调试:

$ export PATH=$PATH:$GOPATH/bin

包路径

标准库中的包有给定的短路径,比如 “fmt” 和 “net/http”。 对于你自己的包,你必须选择一个基本路径,来保证它不会与将来添加到标准库, 或其它扩展库中的包相冲突

你的第一个程序

要编译并运行简单的程序,首先要选择包路径(我们在这里使用 hello),并在你的工作空间内创建相应的包目录

$ mkdir $GOPATH/src/hello

接着,在该目录中创建名为 hello.go 的文件,其内容为以下Go代码:

package main

import “fmt”

func main() {
    fmt.Printf(“Hello, world.\n”)
}

现在你可以用 go 工具构建并安装此程序了:

$ go install hello

注意,你可以在系统的任何地方运行此命令。go 工具会根据 GOPATH 指定的工作空间
若在从包目录中运行 go install,也可以省略包路径

$ cd $GOPATH/src/hello
$ go install

此命令会构建 hello 命令,产生一个可执行的二进制文件。 接着它会将该二进制文件作为 hello(在 Windows 下则为 hello.exe)安装到工作空间的 bin 目录中。

go 工具只有在发生错误时才会打印输出,因此若这些命令没有产生输出, 就表明执行成功了。

现在,你可以在命令行下输入它的完整路径来运行它了:

$ $GOPATH/bin/hello
Hello, world.

你已经将 $GOPATH/bin 添加到 PATH 中了,只需输入该二进制文件名即可:
$ hello
Hello, world.

你的第一个库

让我们编写一个库,并让 hello 程序来使用它。

同样,第一步还是选择包路径(我们将使用mymath/newmath) 并创建包目录:

$ mkdir $GOPATH/src/newmath

接着,在该目录中创建名为 sqrt.go 的文件,内容如下:

// newmath 是个小例子包。
package newmath

// Sqrt 返回 x 的平方根的近似值。
func Sqrt(x float64) float64 {
    z := 0.0
    for i := 0; i < 1000; i++ {
        z -= (z*z – x) / (2 * x)
    }
    return z
}

现在用 go build 命令来测试该包的编译:

$ go build newmath

当然,若你在该包的源码目录中,只需执行:

$ go build

即可。这不会产生输出文件。想要输出的话,必须使用 go install 命令,它会将包的对象放到工作空间的 pkg 目录中。

确认 newmath 包构建完毕后,修改原来的 hello.go 文件去使用它:

package main

import (
    ”fmt”
    ”newmath”
)

func main() {
    fmt.Printf(“Hello, world.  Sqrt(2) = %v\n”, newmath.Sqrt(2))
}

无论是安装包还是二进制文件,go 工具都会安装它所依赖的任何东西。 因此当我们通过

$ go install hello

来安装 hello 程序时,newmath 包也会被自动安装。

运行此程序的新版本,你应该能看到一些数值的输出:

$ hello
Hello, world.  Sqrt(2) = 1.414213562373095

注意 go install 会将 newmath.a 对象放到 pkg/linux_amd64 目录中,它会反映出其源码目录。 这就是在此之后调用 go 工具,能找到包对象并避免不必要的重新编译的原因。 linux_amd64 这部分能帮助跨平台编译,并反映出你的操作系统和架构。

Go的可执行命令是静态链接的;在运行Go程序时,包对象无需存在。

包名

Go源文件中的第一个语句必须是

package 名称

这里的 名称 即为导入该包时使用的默认名称。 (一个包中的所有文件都必须使用相同的 名称。)

Go的约定是包名为导入路径的最后一个元素:作为 “crypto/rot13” 导入的包应命名为 rot13。

可执行命令必须使用 package main。

链接成单个二进制文件的所有包,其包名无需是唯一的,只有导入路径(它们的完整文件名) 才是唯一的。

测试

Go拥有一个轻量级的测试框架,它由 go test 命令和 testing 包构成。

你可以通过创建一个名字以 _test.go 结尾的,包含名为 TestXXX 且签名为 func (t *testing.T) 函数的文件来编写测试。 测试框架会运行每一个这样的函数;若该函数调用了像 t.Error 或 t.Fail 这样表示失败的函数,此测试即表示失败。

我们可通过创建文件 $GOPATH/src/newmath/sqrt_test.go 来为 newmath 添加测试,其内容如下:

package newmath

import “testing”

func TestSqrt(t *testing.T) {
    const in, out = 4, 2
    if x := Sqrt(in); x != out {
        t.Errorf(“Sqrt(%v) = %v, want %v”, in, x, out)
    }
}

接着使用 go test 运行该测试:

$ go test newmath

PASS
ok      newmath 0.165s

同样,若你在包目录下运行 go 工具,也可以忽略包路径

$ go test
ok      newmath 0.165s

远程包

$ go get code.google.com/p/go.example/hello

若指定的包不在工作空间中,go get 就会将会将它放到 GOPATH 指定的第一个工作空间内。(若该包已存在,go get 就会跳过远程获取, 其行为与 go install 相同)

在执行完上面的go get 命令后,可以这样使用:

import “code.google.com/p/go.example/newmath”

The prices on Modcloth have a large range
how to lose weight fast 10 As FCC Approves Liberty’s Control

some of which will be published and sold starting in June 2006
miranda lambert weight lossHow Do I Get More Readers To My Articles
black porn
发表在 网站开发 | 标签为 | 2 条评论

GO语言环境配置1

GO的安装方式有三种

  1. 官方二进制版发行版

     可以从此链接下载相应的版本,安装到指定目录即可比如:(/usr/local/go),方便快捷!

  1. 从源码安装 :暂不介绍,可通过这儿查看
  2. 安装gccgo来代替gc:暂不介绍,可通过这儿查看.

测试你的安装

通过构建一个简单的程序来检查Go的安装是否正确,具体操作如下:

在安装目录中(/usr/local/go/src/)下新建目录hello.

在下创建一个名为hello.go的文件,并将以下代码保存在其中:

package main

import "fmt"

func main() {
    fmt.Printf("hello, world\n")
}

接着通过go工具运行它:

$ /usr/local/go/bin/go run hello.go
hello, world

若你看到了“hello, world”信息,那么你的Go已被正确安装

and some strange knicknacks
weight loss tips A History of the Handbag

When you put your thoughts in writing
pornoIs Your Child Being Bugged
hd porn
发表在 网站开发 | 标签为 | 2 条评论

php-关联链接的生成2

接着上一个话题继续说(上一话题

通过DB查询的方式来确定内容包含多少少关联词肯定不是长久之计,那有没有更好的方法呢,我想肯定是有的。

现将我的思路整理如下:

平时我们经常用的查询是给定一个关键词,然后从数据库中查找出相关的条目。基本一条sql语句就可以搞定的。只要你的数据量不是特别的大,索引合理。基本是不会有很大问题的。而这个查询正好相反了,是给定许多条目,然后从一个文本中查找相关的条目,明显跟原来的思路不太一样。那我们怎么办?就没法了吗?

回归本质,让我们回想一下查找算法

  1. 顺序查找:时间复杂度:O(n),这个明显的不行。
  2. 分查找(折半查找):时间复杂度:O(logn).这个查找的前提得有有序.要将所以字符串转换成数字,然后再查找,也是不可取的。
  3. 二叉排序树查找:表示不太懂,只能无视了。
  4. 哈希表法(散列表):几乎是O(1),取决于产生冲突的多少.
  5. 分而治之(分块查找):只是一将将大数据分组的方法,并不能提高性能


总上所说,要是能想办法,做成哈希表法就会好多了,怎么实现呢?

回想一下字符串的基本的包含的算法:如何确定一个长串是否包含一个短字符呢?


  1. 最笨的办法,两个遍历。时间复杂度为O(m*n)
  2. 字符串匹配的Boyer-Moore算法

想想原来是这么会事,是遍历比较,再通过算法来优化遍历的次数。

现在回归正题,来说我实现的关联算法。

function str_issub($desc_string , $sub_array , $word_min = 3 , $word_max = 10 )
{
	$keyword_list['sum'] = 0;
	if ( empty($desc_string) || !is_array($sub_array) ){
		return false;
	}
	$msg = strip_tags(trim($desc_string));//排除首尾空格并去除 HTML 和 PHP 标记
	$msg = str_replace(array("\r","\n"),'',$msg);
	$len = mb_strlen($msg);
	$i_max = ($len-$word_min+1);
	for ($i = 0; $i < $i_max ; $i++) {
		//echo "$i:start<br/>";
		$j = $word_min;
		$j_max = $len-$i;
		if ( $j_max > $word_max ){
			$j_max = $word_max; 
		}
		while( $j <= $j_max ){
			$temp = mb_substr($msg,$i,$j);
			//echo $temp."<br/>";
			if ( @$sub_array[$temp] ){
				$keyword_list[] = $sub_array[$temp];
			}	
			$j++;
			$keyword_list['sum']++;
		}
		//echo "$i:end<br/><hr/>";
	}
	return $keyword_list;
}

function microtime_float()
{
    list($usec, $sec) = explode(" ", microtime());
    return ((float)$usec + (float)$sec);
}

$time_start = microtime_float();

mb_internal_encoding("utf8"); 

$s =<<<EOT
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
EOT;

$hash[123] = 123;
for ($i = 1; $i <= 1000000; $i++) {
    $key = rand(111111,99999);
    $hash[$key] = $key;
}

var_dump(str_issub($s,$hash));

$time_end = microtime_float();
$time = $time_end - $time_start;

echo "<br/>Did nothing in $time seconds\n";

  1. 这个算法的思想就是:
  2. 事先生成好关联链接,并且转换组合是一个以关联词为key的hash表。
  3. 遍历要匹配的长字符串,通过控制关联词的最小长度和最大长度来优化遍历次数
  4. 因为要替换文本,所以事先将空格,html源码去掉,减少源串长度,减少遍历。

通过上面的测试,100W的关联词都可以在1秒之内匹配出相关的数据。上面全是用的PHP操作,包括hash表,这样会占用大内存。不是很好。可以将hash表存在memcached或redis或其他第三方k-v数据库中,这样判断是只要根据key来判断就行了,避免了占用大量内存的问题。

i think it odd and I dig it
porno Why women are so obsessed with fashion bags

Carry something small with you that you can plug in
how to lose weight fastIphone C8 Is The Newest Clone
youjizz
发表在 网站开发 | 标签为 | 2 条评论