ruby on rails
工作需求,开始写ruby,因为基于web也就自然用上了rails。就这样开始接触ruby on rails,在已有代码的基础上很快就能上手开发了。刚开始对ruby可能有各种吐槽,不过写习惯了之后真心觉得ruby语言本身挺不错的,比Python的语法舒服多了呢。
小心使用input的onchange事件
入职两个月了,做了2个项目,都用到了这个功能:在input中输入进行搜索,每次修改(键盘敲击)都会进行一次搜索结果返回,然后对返回的结果数据进行一些js和ajax的操作。
wordpress改源码实现自定义URL到自定义页面
wordpress对于新闻发布系统来说不能更优秀了,对于一般的门户和博客类网站的大部分需求都能符合,但其毕竟不是类似于joomla这样的自定义化程度更高的平台,在wordpress中只能依靠theme和plugin这两块很小地修改原本的功能和增加新的功能。一直有如此的需求,比如用wordpress搭建一个公司门户,需要一个产品列表的页面,这个页面需要完全自定义的程序去实现,无法实现为一篇文章或者一个页面,这在wordpress原来的系统中似乎很难实现。
阅读更多…
wp_sns_share更新至2.8,添加小功能
虽然老早换了新域名,但是这几天老域名没有续费就失效了,没想到引起了wp_sns_share插件的正常工作导致授权失败(新浪微博和Twitter的登陆授权部分受到了影响,因为OAuth的授权流程callback到此站目录下的对应文件,域名变化后文件无法访问),老用户只要不注销是不会受到影响的所以我也一直没有发现,新用户就会无法使用直到热心网友的提示。在这里多谢obaobao网友和joe网友。
既然要发布新版本2.8了,也就顺便带上早已开发好的两个2小功能。
- 后台自动同步中,自主选择中的图片同步,加入选择同步第几张图片的功能(之前默认为第一张),这个还是蛮有用的对于多图的文章。
- 后台自动同步中,自主选择中的文章摘要同步,加入自定义功能。
这俩功能一直自娱自乐了很久,今年忙着找工作就一直没因为这俩个小功能去发布新版本了,正好借这次机会。
学到的一些东西
暑假在天猫实习,从头开始参与一个项目。项目虽小,五脏俱全,虽然自己实现的是一个十分简单如果完全用自己的环境和习惯写代码不用一天就能完成的任务,结果就是因为搭上了淘宝整个系统和环境,变得十分复杂,而且还要和其他team约定接口联调测试,还要和测试、DBA、前台、PD(产品经理)等打交道。
相比本科的百度上海那时候的实习经历,最大的区别就是那时候完全就用一套开源的简单的东西,能多简单能跑起来就好,几乎没有和百度已有的平台去接通(除了一块不是我负责的登陆系统),打交道的主要就是一位前端,再后来就是一个测试,没有接触太多的人和其他的技术。
java.util中几个Map的性能测试
突然有这么个想法,就写了段代码测试了下。在单线程下对Java里所有Map的性能测试,包括HashMap、Hashtable、LinkedHashMap、IdentityMap、TreeMap,没有测试WeakHashMap。
数据为<Integer, Integer>,范围在0~1千万,共1百万对数据,由Python的random.randint()自动生成。
测试的性能包括写入(put)、随机读(get)和遍历(foreach语法),也是Map这个数据结构最常用的三个操作。其中写入就是将这1百万对测试数据依次put一遍,随机读就是在上一步写入之后再按顺序get一遍。数据显示最后Map大小都为995012(当然IdentityMap的size是1百万),就是有近5000条重复的key。
阅读更多…
Tomcat的Connector:Coyote
上一篇博文讲了Tomcat的系统架构,今天花了一天时间研究了下coyote的源码,大致对普通IO版本有所了解。被同学提醒后发现,Tomcat6已经支持异步IO了,但默认是普通IO版本,需要在Connector的protocol参数中定义为Http11NioProtocol才开启异步IO模式。
主要的代码,Socket的服务在org.apache.tomcat.util.net.JIoEndpoint类,解析处理HTTP请求在org.apache.coyote.http11包的Http11Protocol类和Http11Processor类,org.apache.catalina.connector.CoyoteAdapter负责连接Connector模块(coyote)和Container模块。
线程池默认用的JIoEndpoint类中的子类WorkerStack,若在server.xml配置使用了Executor,则使用org.apache.catalina.core.StandardThreadExecutor(对ThreadPoolExecutor的一层包装)。并发量高的情况下Executor的效率会高一些。 阅读更多…
Tomcat6源码学习
在上一篇博文中说到因为电脑风扇坏了2天于是看完了《How tomcat works》译本,不过这本书是针对Tomcat4和5来讲的比较老了,然后再结合Tomcat6.0.26的源代码调试学习了总共一周的时间,算是大致将Tomcat6.0的一部分工作机制(JSP、JMX、安全管理等模块没研究)给搞清楚了。大概是因为平时基于Java的Web程序写的太多,对Tomcat这一块源码研究特别感兴趣,有时候为了想通一个问题兴奋地吃饭睡觉都在一直想,非常有动力并且也有效率,好久没有这种感觉了。
判断矩形是否重叠
正常思维下,就会去判断一个矩形的每个点是否在另一个矩形中,然后衍生出4个判断,每个判断都要带上4对大于小于比较,甚是麻烦。
1 2 3 4 5 6 | boolean judgeOverlap(Rect A, Rect B){ for(Point p : all points in A){ if(p in B) return true; } return false; } |
上面这段代码其实有一点问题,设A的左上右下点为A1和A2,B的为B1和B2,就是:A与B重叠不等价于judgeOverlap(A1, A2, B1, B2) == true (比如当B真包含于A时就返回false了),而是等价于judgeOverlap(A1, A2, B1, B2) == true || judgeOverlap(B1, B2, A1, A2) == true,这里很容易犯bug。
有一个更容易的方法来解决这个问题,反向思维也很容易,就是排除那些A和B不可能重叠的情况,就4种。
1 2 3 4 5 6 7 | boolean judgeOverlap(Rect A, Rect B){ if(A.right < B.left) return false; if(A.left > B.right ) return false; if(A.top < B.bottom) return false; if(A.bottom > B.top) return false; return true; } |
现在项目中还在使用上面版本的代码跑着,觉得第二种方法应该没有问题但没有测试过也没有应用到项目中去实践。
C中的数组指针
最近又粗粗看了遍C++ primer,又看到一些已然忘了或者以前都不知道的C特性,指针什么的真是太难以完全掌握了>_<。今天想了一个早上,终于算是明白了,赶紧写一篇博客给以后再忘记了的自己看…
铺垫
int A[10]; //一维int数组
A表示整个数组,sizeof(A) = sizeof(int) * 10;
wp-zjuem,zju cc98表情系统 in wordpress
作为一个ZJUer,作为一个cc98的水人,自然对cc98这一套圆头圆脸的表情十分喜欢。想法是来自于某天网上下载到了cc98表情包forQQ,然后在QQ里聊天用上98的表情顿时觉得巨爽无比,于是就起了把表情系统搬到wordpress的念头。
wordpress官网的插件页面:http://wordpress.org/extend/plugins/wp-zjuem/
[em01] [em03] [em06] [em42] [em71] [em88] [em91]
背包练习小集合
练习DP就从背包开始吧,比较简单一些,因为套路基本都差不多,适合入门。做提前,推荐上网搜一下《背包九讲》读个一遍就大致了解背包题了,顺便再次ym下dd大牛…做了不少zoj里的背包题目,大概估计下来,但背包大小 <= 10w的情况下,一般都不会超时。
整理下字符串的一些数据结构和算法
别看字符串挺简单,还真牵扯到好多数据结构和算法啊,给跪了,要将所有的都好好掌握真心是一项艰难的任务。这里就列举下自己做zoj时候碰到过的一些,然后配合自己做过的例题讲一下。不过每种算法、数据结构具体的描述和代码,还请自己去搜索吧。 阅读更多…
一套可用的后缀数组代码
后缀数组的代码算法难度比较高,反正没怎么看也不打算看懂,从网上找了好久找到一份比较好用的代码,效率也比较高,据说是用的倍增算法?看不懂 =.= 阅读更多…