分类目录归档:未分类

有道词典的异常堆栈

碰巧抓住了有道词典的异常页面,从堆栈里能看出他们的一些技术栈,他们使用的是Resin-3.0.21,一个十多年前曾流行过现在不太主流的应用容器,但在网易、搜狐、人人等公司这个容器依然很常见。他们用http去访问cassandra?

java.lang.NoSuchFieldError: INSTANCE
 at org.apache.http.conn.ssl.SSLConnectionSocketFactory.<clinit>(SSLConnectionSocketFactory.java:144)
 at org.apache.http.client.fluent.Executor.<clinit>(Executor.java:78)
 at org.apache.http.client.fluent.Request.execute(Request.java:177)
 at toolbox.cassandra.client.CassandraClient.httpGet(CassandraClient.java:47)
 at toolbox.cassandra.client.CassandraClient.init(CassandraClient.java:129)
 at toolbox.cassandra.client.CassandraClient.getInstance(CassandraClient.java:75)
 at outfox.dict.front.data.ugc.AsynUgcClient.<clinit>(AsynUgcClient.java:88)
 at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
 at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
 at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
 at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
 at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:148)
 at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:87)
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1000)
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:953)
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:487)
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)
 at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295)
 at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
 at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
 at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
 at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:628)
 at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932)
 at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479)
 at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:651)
 at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:599)
 at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:665)
 at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:518)
 at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:459)
 at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136)
 at javax.servlet.GenericServlet.init(GenericServlet.java:69)
 at outfox.dict.front.web.DictServlet.init(DictServlet.java:57)
 at com.caucho.server.dispatch.ServletConfigImpl.createServletImpl(ServletConfigImpl.java:646)
 at com.caucho.server.dispatch.ServletConfigImpl.createServlet(ServletConfigImpl.java:587)
 at com.caucho.server.dispatch.ServletManager.init(ServletManager.java:154)
 at com.caucho.server.webapp.Application.start(Application.java:1654)
 at com.caucho.server.deploy.DeployController.startImpl(DeployController.java:621)
 at com.caucho.server.deploy.StartAutoRedeployAutoStrategy.startOnInit(StartAutoRedeployAutoStrategy.java:72)
 at com.caucho.server.deploy.DeployController.startOnInit(DeployController.java:509)
 at com.caucho.server.deploy.DeployContainer.start(DeployContainer.java:153)
 at com.caucho.server.webapp.ApplicationContainer.start(ApplicationContainer.java:670)
 at com.caucho.server.host.Host.start(Host.java:420)
 at com.caucho.server.deploy.DeployController.startImpl(DeployController.java:621)
 at com.caucho.server.deploy.StartAutoRedeployAutoStrategy.startOnInit(StartAutoRedeployAutoStrategy.java:72)
 at com.caucho.server.deploy.DeployController.startOnInit(DeployController.java:509)
 at com.caucho.server.deploy.DeployContainer.start(DeployContainer.java:153)
 at com.caucho.server.host.HostContainer.start(HostContainer.java:504)
 at com.caucho.server.resin.ServletServer.start(ServletServer.java:971)
 at com.caucho.server.deploy.DeployController.startImpl(DeployController.java:621)
 at com.caucho.server.deploy.AbstractDeployControllerStrategy.start(AbstractDeployControllerStrategy.java:56)
 at com.caucho.server.deploy.DeployController.start(DeployController.java:517)
 at com.caucho.server.resin.ResinServer.start(ResinServer.java:546)
 at com.caucho.server.resin.Resin.init(Resin.java)
 at com.caucho.server.resin.Resin.main(Resin.java:625)

Sierra三宗罪

1) Sierra下很多原有软件无法运行

有些通过mac store下载的需要重新下载才可运行:

搜狗拼音无法使用,需要下载最新版本重新安装。

2) 有个photoanalysisd的进程在后台分析你的图片,导致cpu占用率很高,可以用下面方式停止:

 ➜  cat stop-photoanalysisd.sh
#!/bin/bash

launchctl stop com.apple.photoanalysisd
launchctl unload -w /System/Library/LaunchAgents/com.apple.photoanalysisd.plist

3) 原先VPN配置里的PPTP模式都丢失了

招聘资深Java/Scala工程师

我们在招Java/Scala的资深工程师(或技术专家),你将有机会跟我们共同参与一些挖财基础设施的开发。如果你有Akka的应用经验更好,不过掌握Scala/Akka并不是必要条件,基本的要求是功底扎实,对分布式有一定的了解。至少有三年以上的工作经验,本科或以上学历。工作地点在杭州。

关于挖财的技术你可以通过InfoQ或ArchSummit搜到一些相关的分享,业务开发语言以Java为主Scala为辅。现阶段技术人员有两百多人的规模,这几年早已从初创时期的个人英雄主义转变为中等规模的集团军作战方式。整体上我们算是偏中庸的一个技术团队,也形成了一套适合自己的技术栈,相对务实,没有太多花活。

业务当前发展比较快,对技术的要求也是不断在提升,对该职位感兴趣的请发邮件到: cuodao(at)wacai.com ,每封邮件一定回复。

执行quit命令codis返回结果缺失数据的问题

记录一下codis遇到的这个情况,在客户端连接销毁时如果执行quit命令,有较高概率返回的数据不完整,导致客户端解析出错。具体的说是缺少了”+OK”这几个字符,在redis里执行quit命令返回的结果里会有”+OK”:

$ telnet redis-server 6379
Trying xxx.xxx.xxx.xxx...
Connected to xxx.xxx.xxx.xxx.
Escape character is '^]'.
quit
+OK
Connection closed by foreign host.

而在codis上有时返回的数据缺乏“+OK”

$ telnet codis-server 19000
Trying yyy.yyy.yyy.yyy...
Connected to yyy.yyy.yyy.yyy.
Escape character is '^]'.
quit
Connection closed by foreign host.

还没有去查codis服务器端,先做个记录。

lantern的bug导致safari/mail无法访问网络

lantern似乎一直存在bug,有时将其退出后会导致mac上某些自带的应用(比如safari和mail)无法正常访问网络,而chrome等非mac自带的工具却正常。在我的机器上这种情况经常发生,影响了mail应用不及时收取邮件,不得不通过kill networkd重启网络来解决,谁要是知道更好的方式请告知我。

➜  cat ~/bin/restart-network
#!/bin/bash

pid=$( ps -ef | grep "/usr/libexec/networkd$" | awk '{print $2}' )
sudo kill -9 $pid

阿里云推荐码: qbhgd8

我的阿里云推荐码: qbhgd8,使用该推荐码在购买阿里云产品时有一定优惠,对我这边也会有一定的返利。我的blog就是用阿里云的ECS,自己装了个wordpress搭建的,已经3年了系统很稳定。

阿尔汉格尔

前段时间看到别人推荐的2015年即将上映的电影里,有一部翻拍的《弗兰肯斯坦》,引起了我的兴趣。我在九几年的时候在电视上看过一部《科学怪人》,当时觉得非常好看。但科学怪人被翻拍过好几个版本,我也不清楚自己当年看得是哪一个版本,于是去豆瓣搜索了一下。

先搜到《Mary Shelley’s Frankenstein》这个版本,名字里的Mary Shelley(玛丽·雪莱)是科学怪人的作者,小说的原名叫《弗兰肯斯坦——现代普罗米修斯的故事》,我没想到这部经典科幻小说的作者会是一位女性。而且这位女士名字里的Shelley确实也跟诗人雪莱有关系,是这位诗人的继室。

看了几个截图似乎不是当年自己看过的那一部,其中一张截图里,弗兰肯斯坦在船舱里对船长讲述他的故事,英文字幕是“For the last time, I made my way from St.Petersburg to Archangel on foot”,中文字幕翻译成了“上一次 我徒步由圣彼得堡走到苏联”,Archangel这个地方被翻译为“苏联”,当然是字幕组的一个低级错误。故事发生在18世纪末,跟苏联差着一百来年呢。

有趣的是春节假期期间,正好看过一部电影的名字就叫《Archangel》中文翻译的是《大天使》,是一部关于斯大林私生子的政治悬疑片。Archangel的字面意思确实是“大天使”,这个名字看上去是源于宗教,不过现在这个地名的中文名是采用音译,叫“阿尔汉格尔”,是地图中红点的位置:

可以看出这是个非常靠北的地方,接近北极圈的一个港口城市,科学怪人的故事背景正是北极探险热的时期。

攻击又来了

wordpress后台看到访问量在最近10个小时猛增,通常是遇到攻击,从日志里看到几万次的请求来自 mail.mknz.net 这个网站,应该是被黑了,成为了肉鸡来攻击其它系统。请求全部是在访问wp-login.php页面,又是尝试猜测密码。还好这里做过防御。

至少经历过好几次暴力攻击了,这个帖子记录一下被攻击的情况,下次再有的话会再更新。关于防御暴力攻击的方式可以参考这篇文章

//update 2014.10.15
攻击来源:82.196.3.83, 尝试login

//update 2015.1.12
最近很多xmlrpc的攻击,安装了一个”Disable XML-RPC Pingback”的插件后,有所缓解。

googleapis被墙,更换了一下博客主题

本来一直使用wordpress默认的主题,风格也挺好的,简洁、干净;但最近页面打开的总是很慢,在排除了服务器端的问题之后,通过浏览器定位发现每次都是因为某个css里要访问googleapis下的内容,而googleapis被墙掉了,导致资源加载非常慢。

要么修改默认主题里的css不要访问font.googleapis,要么换一个不会访问googleapis的主题。尝试了几个主题,现在用的这个还凑合,就是展示代码的效果不太好。先用着吧,有好的主题欢迎推荐给我。

李昌钰博士的演讲

下午在公司的报告厅,听了李昌钰博士的《我的鑑識生涯—世际名案与學思歷程》,以前从未了解过这个行业,李博士的演讲也蛮有趣的,还记得几点:

1) 他提到昨天到广州,进酒店时已经晚上11点,准备今天的ppt和演讲到晚上2点,然后又坚持写书(每天写一页),虽然他这一页写的少了些只有几行,但让自己心安。

2) 证人的信息有40%是不可靠的。

3) 关于陈水扁枪击案,子弹水平划过肚皮,很多人觉得像是刀伤,但是有灼烧痕迹的。这是通过一把玩具枪改造的手枪,做枪的人把里面的枪栓换掉,这种枪杀伤力不大,但在短距离内还是有一些威胁的。使用自制子弹。打中吕秀莲腿部的是铜子弹,打中陈水扁的是铅子弹。嫌疑犯后来落水死亡,这个案子仍未结案。

4) 他的父亲是1949年乘坐太平轮从上海去往台湾时遇难的

家境原本还算富裕,父亲遇难后变得比较困难,所以他后来读书时选择读免费的警官学校。可能也是这个原因使他一直很尊敬和听从他妈妈的话,他演讲过程中提到过好几次别人邀请他做某个位置的职务时,他起先并不愿意,后来对方通过他的妈妈说服他。