本站已支持https访问

几个月前已经配置了https,已经支持使用https方式访问本站,否则你可能在访问时遇到运营商广告劫持的情况,类似下图右下角的这个广告(宽带运营商篡改了http植入了广告):

不过以前的blog里有些图片使用的url仍是http的,所以在chrome浏览器里可能看到有图片内容的文章时,并没有在地址栏展示一个绿色Secure锁的标记。

WassUp Real Time Analytics

独立blog的一个麻烦之处是维护成本,你需要投入额外的金钱和精力,其实vps一年的费用不过几百块(经常有折扣),更多可能是系统维护对普通人(非IT工作者)来说代价略高。我在系统维护方面投入的精力极少,一方面是阿里云的vps确实稳定,另一方面是我折腾的也较少,一直使用的固定模板和写作方式。

独立系统难避免的一点是容易受到攻击,对于wordpress来说你需要尽可能保证它是最新的版本。另外有一个很好的插件: WassUp Real Time Analytics,能够帮你做一些访问统计,并在管理界面上很容易发现疑似的攻击。

如何持续的写博客?

如何能持久的写博客?这是个挺难回答的问题,这个blog建立4年了,不长也不短;不过把之前在第三方博客平台上的记录也算进来,我写blog的时间也有十多年了。

博客有两种功能,第一是记录(或收集)信息,第二是社交。多数人没法持续下去可能是社交的期望更多,而写博客在社交方面得到的反馈是比较延迟的,也没法保证你的好友会读到,跟微博或朋友圈比起来传递速度和即时反馈感太滞后。

于我而言,博客作为信息整理(知识管理)的功能更突出一些。记录的过程常常会对内容重构,尤其对技术类文章,过程中会重新梳理可能遗漏或理解错误的地方。这些记录下来的内容更多是给自己提供便利的。

写作时尽量不要去在意别人的意见,甚至需不需要读者的反馈,也是个人的事。有些新的平台,比如微信的公众号或知乎专栏一类的交互方式可能更有利于传递和交互,但如果你的才思文笔不足以支撑起看客们围观喝彩,就不必声张。大部分人并不具备长期输出优质内容的能力,这种互动可能迫使你过多的想要展示好的一面,而难以维持。

独立平台的好处就在于你不会受到它的氛围以及审查影响;另外,这些新的平台未经过长时间的验证,或许五年后它们都消失掉了,而你的独立博客则可以长存。

有道词典的异常堆栈

碰巧抓住了有道词典的异常页面,从堆栈里能看出他们的一些技术栈,他们使用的是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)