[原创] LaTeX for WordPress插件更新MathJax Server地址

MathJax是WordPress的LaTeX for WordPress插件调用的library,用于在WordPress页面上渲染显示完美的数学公式,配置过程可以参考这个链接。
从2017.04.30开始,MathJax CDN服务正式关闭(官方通知在这里),因此,如果我们原来在LaTeX for WordPress插件中配置的“MathJax Server”选择的是“MathJax CDN”,那么就会有问题了——服务将不再可用,这会导致数学公式在WordPress页面上不能被渲染显示。

阅读更多

[原创] 解决JAVA访问Elasticsearch的问题:org.elasticsearch.client.transport.NoNodeAvailableException: None of the configured nodes are available

本文对应的的Elasticsearch(简写为ES,下同)版本:2.3.5
注:本文写作于多年以前,现在ES已经不提倡使用本文的 TransportClient 来操作ES了,而应使用RestClient。所以本文仅做参考! 2020.08.25

使用Elasticsearch的 JAVA API 来读取其存储的数据,如果遇到这个问题:

org.elasticsearch.client.transport.NoNodeAvailableException: None of the configured nodes are available

此时,需要确认代码里写的一些配置是正确的。下面,就通过一个实例,来说明如何正确地读取ES里的数据。

阅读更多

[原创] 解决错误“class "javax.servlet.FilterRegistration"'s signer information does not match signer information of other classes in the same package”

这是一个jar包冲突引起的Java程序错误,而且是runtime的错误,编译的时候不出错,一运行起来就挂。

阅读更多

[原创] 在Github上添加SSH key

如果你在Github上有一个项目,为了能让这个项目可以在多台计算机上开发,需要把目标计算机的SSH key添加到你的Github账户中,否则你以SSH方式git clone时会提示无权限,例如你可以试试:

git clone git@github.com:codelast/raspberry-pi.git

会输出类似于这样的错误信息:

Permission denied (publickey).

文章来源:http://www.codelast.com/
所以下一步就要在Github中添加SSH key,让你可以在目标计算机上进行开发以及代码提交。
其实Github上已经有完整的教程了,只不过我记性不好,每次都要去翻Github教程,所以特地写下来。

检查SSH key是否已经存在
检查文件 ~/.ssh/id_rsa.pub 是否存在,如果存在,就不用生成一个新的SSH key了,直接跳到下面的第3步。
如果该文件存在,但你不想使用它的话,那么就按下面的做法另外生成一个文件也可以(例如 ~/.ssh/id_rsa_github.pub)。
文章来源:http://www.codelast.com/
 生成一个新的SSH key
如果第1步中的SSH key不存在,则需要生成:

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

其中,your_email@example.com要修改成你的邮箱地址。
回车后输出如下:

Generating public/private rsa key pair.
Read More

[原创] 让ThreadPoolExecutor的workQueue占满时自动阻塞submit()方法

使用Java的ThreadPoolExecutor可以并发地执行一些任务,它的基本用法是:
(1)创建一个 ThreadPoolExecutor 对象

ThreadPoolExecutor executor = new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>(workQueueSize));

阅读更多

[原创] 使用ThreadPoolExecutor产生的 OutOfMemoryError: unable to create new native thread 错误

最近,在使用Java的ThreadPoolExecutor来实现一个并发功能的时候,发现程序刚执行起来不久,就提示了错误:

OutOfMemoryError: unable to create new native thread

并且服务器立即陷入类似于“无响应”的状态,无法用Ctrl+C结束掉我的Java程序,按Ctrl+C的时候,命令行只是不断地打印出类似于下面的消息:

Exception java.lang.OutOfMemoryError occurred dispatching signal SIGINT to handler- the VM may need to be forcibly terminated

阅读更多

[原创] gnuplot调教记

gnuplot是命令行绘图的极佳选择之一。用它画出一副简单的图极其容易,但是对画出的图进行微调却很令人抓狂,这主要“得益”于gnuplot超级强大的功能,以及无穷无尽纷繁复杂的说明文档,通常让人没时间去细细研究。
如果你经常有gnuplot的使用需求,那么可以仔细研读一下它的文档,否则,还是像我一样,现学现用吧。
我折腾了一天多时间,把我想要的一副图给画出来了,里面涉及到了很多图像的微调过程,有些解决方案很难搜到,但我运气稍好,终究还是弄出来了,在此,作为一个使用案例来分析一下。因此,本文并不是gnuplot的使用教程,而是用gnuplot绘图时,对某些奇怪问题的解决办法的分享。

本文基于gnuplot版本:4.4,系统:RHEL 5.3

阅读更多

[原创] InputStream读取多次导致的Unexpected end of ZLIB input stream问题

有一次,在一个程序中,对jar包里的一个文本文件使用如下方式来读取:

InputStream fin = getClass().getResourceAsStream("/file_to_read.txt");

然后在后面的代码中,对 fin 进行读取:

BufferedReader reader = new BufferedReader(new InputStreamReader(fin));
for (String line = reader.readLine(); line != null; line = reader.readLine()) {
    //TODO: your code here
}

读一次是没有问题的,但如果对同一个InputStream对象读取两次,就会报类似于下面的错误:

Error: java.io.EOFException: Unexpected end of ZLIB input stream
at java.util.zip.ZipFile$1.fill(ZipFile.java:239)
at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:141)
at java.io.FilterInputStream.read(FilterInputStream.java:116)
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158)
Read More

[原创] 去除流氓插件“微度标签页”内置的“亿起发”返利链接跳转

写这篇文章实在是因为受不了“微度标签页”这个流氓插件内置的“亿起发”返利链接跳转,不得不愤怒地写此教程告诉大家如何去除它们的流氓行径。

作为互联网公司的一员,我对互联网营销相关的技术,虽然谈不上敏感,但还是有一点嗅觉的。
最近,我注意到一个现象,那就是我的Chrome浏览器在访问一些购物网站的时候(是我在地址栏里输入的干净网址),会先快速跳转到一个 yiqifa.com 的网址,然后再继续跳转回我要访问的购物网站,于是我立马明白了:我中了流氓公司的招了。
网上有一些人也遇到了同样的困扰,但是不明为什么,所以我想我有必要写一篇文章出来,让大家看看某些公司有多么无节操。
注意:本文的方法无法防止流氓插件“微度标签页”的全部流氓行为——因为“微度”一旦升级,你修改过的本地插件数据可能就会被覆盖掉。所以,最好的方法就是:卸载它!大家可以换用Speed Dial 2这样的良心插件(云同步功能需要支付$2.99,我觉得完全可以接受,至少它一点流氓行径也没有)。
如果你非要自虐,继续使用“微度标签页”(我已经卸载了,改用Speed Dial 2),那么本文可以在一定程度上帮你去除其强制跳转的恶心行为,请继续往下看。

[原创] “不需要升级,您的WordPress数据库已经是最新的了!”导致进不了WordPress管理后台的问题

今天突然发现,进不去WordPress后台管理页面了,登录之后,屏幕上就两句话:

不需要升级
您的WordPress数据库已经是最新的了!
由于我今天没有升级过WordPress,也没做什么后台设置更改,并且我从来没见过这个提示,所以刹那间心一凉,心想我的WordPress数据库不是出什么问题了吧?
于是问Google,查到这个问题是由于使用了object-cache缓存插件导致的问题,于是解决了,如下。

阅读更多

[原创] Java动态添加一个目录到classpath中

通常我们写程序,会用到一些配置文件,这些文件与程序在同一个父目录下,配置文件可能放在config之类的目录下,程序中会使用这些配置文件。
我遇到了这么件事情:因为一个特殊需求,需要把配置文件放到jar包中,最终部署出去的只能是一个jar包(所有东西都在jar包里,包括程序和所需的资源),然后在程序中使用 getClass().getResourceAsStream(文件在jar包中的路径) 的方式来读取配置文件。这也倒没什么不爽的,但是在单元测试中怎么办?

阅读更多

[原创] Google Protocol Buffers中文教程

注:前面这些是本人的翻译,可能不准确,可能有错误,但是基本上可以理解,希望能对大家有所帮助。