Ling Zhang Ling Zhang's Blog

Lotus Connections Blogs 1.0 on Bluemix

上周花了些时间把IBM Connections Blogs的一个早期版本(那时候叫Lotus Connections)移植到了IBM Bluemix上。这是一个学习的过程,帮我了解IBM PaaS平台的开发,掌握第一手经验。

为了把基于WebSphere Application Server实现的应用能跑到WebSphere Liberty Profile上,修改了一些代码,然后通过Bluemix Eclipse插件push到服务器上。等有时间写写详细的过程。

  • Lotus Connections Blogs 1.0 on Bluemix: http://ling.stage1.mybluemix.net/blogs/ 这个地址外网应该是访问不了的,我自己试了几次都不行,虽然ping server的地址不是9.x网段。

留了截屏:

blogs_bluemix

Bluemix上的部署界面:

bluemix

Read more

把Fiddler配置成reverse proxy

Fiddler是用作Web调试的工具,因为一个需求想自己搭一个简单的reverse proxy,试了几个工具都不太好用。做了些功课发现可以把Fiddler配置成reverse proxy。大致步骤如下:

1) 配置成Fiddler的侦听端口

这个很容易,在平时用作调试的时候就已经有了。需要注意的是要允许其他电脑访问Fiddler服务;

fiddler1

2) 侦听HTTPS端口

侦听HTTS端口在界面上没有办法配置,需要在Fiddler QuickEexc命令行里输入:!listen 443 proxy.mycompany.com

fiddler2

3) 定制HTTP  response处理脚本

Reverse proxy最重要的一个功能是对返回的HTTP response进行预处理,之后再返回给浏览器。比如把嵌入在HTML中的所有绝对URL的hostname变成reverse proxy自己的hostname,这样才能保证用户后续的访问可以指向正确的服务器地址。Fiddler提供了脚本支持来完成对HTTP response的修改。

你可以使用Fiddler的菜单调出脚本用文本编辑器进行编辑,或者安装FiddlerScript插件进行开发(有代码提示功能)。

fiddler3

你可能需要定制的地方包括:

3.1)对所有HTTP 302进行截获,把重定向地址改成reverse proxy自己的地址,代码大致如下:

static function OnBeforeResponse(oSession: Session) {

..

if (oSession.HostnameIs("server.mycompany.com")){
            var redirect = oSession.oResponse.headers.AllValues("Location");
            if (redirect != "") {
                redirect = redirect.replace("server.mycompany.com", "proxy.mycompany.com");
                oSession.oResponse.headers.Remove("Location");
                oSession.oResponse.headers.Add("Location", redirect);
            }

...

3.2) 对所有HTTP response 200的正文进行扫描,替换掉里面嵌入的绝对URL:

 if (oSession.oResponse.headers.ExistsAndContains("Content-Type","text/html")){
                oSession.utilDecodeResponse();
                oSession.utilReplaceInResponse("server.mycompany.com","proxy.mycompnay.com");
            }
            
        }

现在可以启动你的本地浏览器来访问用Fiddler搭成的reverse proxy了: http://proxy.mycompany.com/

:Fiddler配置为reverse proxy的官方文档(不详细,要结合本文内容)- http://docs.telerik.com/fiddler/configure-fiddler/Tasks/UseFiddlerAsReverseProxy

Read more

升级到WP 3.9.1

把dreamhost上的WordPress升级到了3.9.1,并且安装了CleanTalk反垃圾评论插件,开放了评论看看效果如何。

Read more

暂时关闭评论

最近垃圾评论数量太多,已经设定了一些过滤器但效果不佳。在找到好的解决方案之前只能暂时关闭评论。

Read more

IBM Connections5.0新功能介绍(4) – 自动图片上传

Connections 5.0的自动图片上传功能极大简化了图片附件上载的过程 - 它允许用户用copy/paste的方式把图片拷贝到编辑器中,Connections会自动把图片解码并上传到后台服务生成附件,之后服务器返回一个图片的URL并插入到当前编辑器中,整个过程对用户是完全透明的。

现在的新浏览器很多都已经支持图片拷贝功能,但浏览器的处理方法是把图片用BASE64编码,并嵌入到正文中。这种方法有不少问题,比如图片无法单独缓存,第三方应用无法正确显示图片等。Connections采用的方法在用户体验、适用性和性能上达到了最好的平衡。

Read more

IBM Connections5.0新功能介绍(3) – @功能

@功能在微博、微信中已经广为人知。Connections 4.5的CR2版本中提供了Connections个人微博和社区微博的@功能,该功能也已经在去年的Connections公有云版本中上线。在5.0中,@功能被添加到了博客正文和评论、Wikis正文和评论、Files的评论、论坛的帖子和评论、活动的帖子、回复和待办、社区日程的正文和评论中,更大的提升了用户和Connections系统的联动。

一个被@的用户会在Connections的首页的一个Tab里看到别人@他的内容,另外一旦被@会收到邮件通知(不希望邮件打扰的话可以自行关闭@的邮件通知功能)。

@功能看似简单,但我们在设计的时候必须根据Connections的实际考虑更多的问题。比如说我在论坛里@的一个人(对方收到通知),而之后我重新编辑了帖子,又@了另外一个人,这个时候系统该如何处理两个@,是否需要给之前被@的人再发一遍通知?如果要避免多次发送,势必要求在保存@信息的时候需要额外存储帖子内被@过的人员列表。另外,如果用户@一个对该内容没有访问权限的人该如何处理?在Rich Text Editor里@功能的用户体验是什么样的?Connections用户的唯一ID是directory uuid(不具可读性),如何在@的时候做到数据和显示的分离?这些问题在互联网微博上都不存在,可却很大的影响了Connections产品的设计。

Read more