作者归档:vicalloy

创新的web2.0网站以及国内的模仿者们

团购网站忽然间就流行开了,无数的团购网站如雨后春笋般的冒了出来。本以以为团购网站这个创意是本土原创,后来才知道原来这也是个舶来品。而且创意抄了就抄了,连界面都抄了(国内的团购网站都是一个模子里印出来的)。
细数国内的那些web2.0网站,基本上都能在国外找到原型。
下面是一份不完整列表。

团购类

原型

  • groupon 百科
    Groupon是一个团购网站。是美国近半年来比较流行的新模式之一。其独特之处在于:每天只推一款折扣产品、每人每天限拍一次、折扣品一定是服务类型的、服务有地域性、线下销售团队规模远超线上团队。

模仿者

  • 拉手
  • 美团
    饭否与校内的创始人王兴的再度出击,不知道是否能如同此前一样成功(注:饭否虽然挂了,但更多的是政策原因,饭否开启了国内的微博市场)。
  • 团东西
  • 大众点评
    大众点评也开始加入团购的行列。可以预见会有越来越多“传统”网站加入团购行业,团购网站的竞争也将异常的激烈。

基于位置的服务(LBS)

基于位置的服务(Location Based Service,LBS),它是通过电信移动运营商的无线电通讯网络(如GSM网、CDMA网)或外部定位方式(如GPS)获取移动终端用户的位置信息 (地理坐标,或大地坐标),在GIS(Geographic Information System,地理信息系统)平台的支持下,为用户提供相应服务的一种增值业务。

原型

  • Foursquare  百科
    Foursquare是一家基于用户地理位置信息的手机服务网站,并鼓励手机用户同他人分享自己当前所在地理位置等信息。与其他老式网站不同,Foursquare用户界面主要针对手机而设计,以方便手机用户使用。在2009年举行的SXSW技术大会上,Foursquare服务正式推出,当时该服务仅针对苹果iPhone智能手机。

模仿者

这个已经有人总结过了,直接送上传送门

白领社交网站

原型

  • Linkedin 百科 
    • 你可以了解朋友的工作动态
    • 你可以推荐或者被推荐工作机会
    • 你可以对感兴趣的公司进行背景调查
    • 你可以对感兴趣的员工进行背景调查
    • 可以搜索工作机会

模仿者

  • 海内
    Linkedin的模式可能并不太符合中国国情。Linkedin的模仿者不是太多,而且即使是海内也不怎么成功。最近海内的页面改得花花绿绿,似乎有意向开心网等娱乐SNS靠拢。在我看来海内基本上已经失败了。

微博

国内微博网站的繁荣,或许很大程度上要归功于墙。

原型

模仿者

  • 饭否
    虽然饭否已经成功的挂掉,但饭否应当算是中国最初的微博推广者之一(也是其中最成功的)。当初twitter被墙,本以为饭否的机会来了,没想到墙内的饭否也难逃厄运。真是人算不如天算。
  • 新浪微博 
    自饭否挂掉后,一直没有哪个能成气候,直到新浪微博的出现。新浪微博的成功一方面是微博本就存在巨大的潜在需求,另一方面是新浪的品牌与推广。新浪的成功预示着国内微博市场的成熟。那些小一些的微博网站基本上可以放弃了。
  • 腾讯微博
    借助腾讯庞大的用户群,腾讯微博潜力巨大,将是新浪微博的强大对手。

SNS

SNS,全称Social Networking Services,即社会性网络服务,专指旨在帮助人们建立社会性网络的互联网应用服务。也指社会现有已成熟普及的信息载体,如短信SMS服务。SNS的另一种常用解释:全称Social Network Site,即“社交网站”或“社交网”。

原型

模仿者

Others

  • 37signals 针对小企业的办公套件
    • everydo 最初基本上是37signals的完整copy,但现在已经有了不少自己的特点。
  • salesforce Saas平台,虽然国内也炒过。但真正有能力和salesforce一样做出一个Saas平台的公司还是没几个。
  • eventbrite 活动网站,国内也有不少。不过类似的功能可能做成网站的一个模块可能会更加合适。
  • delicious 书签网站,虽然国内也有些模仿者,但真正非常成功的似乎没啥。delicious的易用性非常的高,要完全模仿还是有些难度。加上delicious不存在墙的问题。喜欢delicious的朋友基本上都直接用delicious了。

Android开发学习笔记(Android基础知识)

发现实在是没有写笔记的习惯,每次都是写了一点后就没兴趣继续写下去了。随便摘抄点好了。

Activities and Tasks

task是一组相关的Activities,保存在一个堆栈中,给用户的感觉就是一个应用程序。简单的理解就是,每开一个新的Activities,就将Activities放到堆栈的最上面,按下back后就将当前Activities移除,激活堆栈上的下一个Activities。

Affinities and new tasks

其实我没太明白affinity的含义,在我看来似乎affinity有点类似taskId,标示它应该属于哪个task。

Launch modes

启动模式总共有四种

  • "standard" (the default mode)
  • "singleTop"
  • "singleTask"
  • "singleInstance"

Clearing the stack

默认情况下,如果用户长时间离开Task,系统会清理掉除ROOT Activity外的所有Activities。这个做法的依据是,如果用户太久没回来,用户肯定已经忘了自己最初做了啥,回来肯定是要做一些新事情。当然我们可以通过给activity设置一些属性来改变这个行为,比如alwaysRetainTaskState等。

Starting tasks

当需要一个activity作为整个应用程序的进入点时,我们给它一个intent filter,其中action为 "android.intent.action.MAIN",category为"android.intent.category.LAUNCHER"。这种filter使得一个图标和一个标签显示在程序启动器中,使用户可以启动该task或者返回到该task。

Processes and Threads

同一个application都运行在同一个Processes里面。

为了保证Activity界面不阻塞,耗时工作应当放到Thread中。

Android有提供一个轻量级的RPC机制。

Activity lifecycle

Activity有三种基本状态:

  • active 当前活动窗口
  • paused 被其他窗口挡住部分
  • stopped  被完全挡住,在系统需要回收资源的时候会被kill

activity在进行状态切换的时候会触发相应的方法

  • void onCreate(Bundle savedInstanceState)
  • void onStart()
  • void onRestart()
  • void onResume()
  • void onPause()
  • void onStop()
  • void onDestroy()

Service lifecycle

一个service有以下两种用法

  • service启动后由service自己或其他人关闭。
  • 模块通过接口连接service(bindService() ),在调用unbindService()后关闭。

Broadcast receiver lifecycle

一个broadcast receiver只有一个回调方法:
void onReceive(Context curContext, Intent broadcastMsg)

broadcast receiver只有在执行onReceive的时候被认为是激活的。

当一个广播消息的响应非常耗时间时,需要新建一个新的线程来运行该操作。如果onReceive()创建了这个线程并返回,则整个进程,包括新创建的线程会被认为是非活动的(除非有其它的component为活动的),该线程有可能会被kill掉。解决方案是用onReceive()启动一个 service并让该service完成这个工作,那么系统直到这个进程仍然是活跃的。

END

到这里Android的基础知识也了解得差不多了,接着就该进军UI了。

Android的UI编程,主要注意的是:界面在XML中定义,为XML中的界面元素生成唯一的ID,并保存在自动生成的R.java中。程序中通过id查找相关界面元素,实现和界面的关联。除此之外的开发,和传统的java swing啥的没太多区别。

下面考虑写个简单的Android应用,一边学习,一遍实践。

WAP网站的设计、SP产业及其他

题注:

初版里面带了太多个人负面情绪,所以做了部分修改。

 

网站设计/WAP网站设计规划的一些问题

WAP的特点,及同web的差异

wap相比web最大的优势是实时行和交互性,人们随时随地都可以方便的获取信息,可以更快的参与互动(和短信彩信会有些类似)。

移动设备的屏幕比较小,每页能展示的信息非常有限。如果第一屏没有用户感兴趣的信息,很可能这个用户就丢了。从一定程度上说wap比web更注重内容的本身,因此wap单位面积内的信息密度要比web高很多。

屏幕大小对图片的表现力影响也非常大,图片展示本身就是wap的短板。且图片通常对访问速度带来一定的负面影响,且会过多的占用移动设备本就不多的现实面积,一次wap网站上的图片通常都很少(即使是时尚内网站)。

搜索功能

网上大多都会提供搜索功能,搜索是让用户能快速找到自己所需要资源的好办法。但并不是所有的内容都是需要搜索的,比如新闻资讯等时效性很强的内容,用户要看的只是最新的。搜索功能对用户的价值实在有限。如果你资源本就不够丰富,也没必要加啥搜索。用的人本来就少,而且每次都搜不到东西,将极大的打击到用户的积极性。

搜索功能是为了提升用户体验,并不是一个别人有,自己也要有的装饰。

内容

以前说知识就是力量,后来说信息,现在则流行说内容,内容为王。网站的生存之道在于网站的内容质量,提供优质的网络资源予用户浏览是一个网站的根基。但目前互联网的发展已经非常成熟,各类的综合门户以及垂直门户网站层出不穷,此时要做到有特色已是非常的难。

当然,我觉得如果足够的细分,将内容作精应当还是会有其一定的市场。网站的内容不一定要多,但一定要精,内容的关联度要高。尽量让用户看到的内容都是用户感兴趣的。

网站的分类不能太复杂。如果网站的心太野,什么都想做,什么都想加。最终这个网站会看起来什么都有,但对用户来说什么都没有。举个简单的例子,如果网站上放了电影、美食、健康、亲子等好几个分类的内容。移动终端的面积本来就小,用户一屏,可能看到20个链接,最终每个分类都只有4~5条内容。用户的兴趣都有一定的偏向性。可能用户会对电影、美食同时感兴趣,但要一个用户对你的所有分类都感兴趣,那无疑难于上青天。

从用户的角度考虑问题

长期以来SP都习惯用一些活动(小恩小惠)拉拢用户,然后直接就扣费了。但互联网行业和电信增值行业有着天囊之别。互联网企业大多喜欢赔本赚吆喝,赚找用户先,钱可以等到有了用户再说。在这个风气下,互联网用户大多习惯了免费。

首页上放上大量的扣费内容,只是从自己的角度考虑。普通的互联网用户不被直接吓跑才怪。

免费这对SP来说或许难以接受,但既然要开拓互联网,就得跟着互联网用户的思维。你不一定要免费,但至少不要收费收的如此赤裸。你可以放一些有用的信息,让用户愿意来。收费的内容要让用户知道,但也没必要做得太明目张胆,知道即可。如果用户来的多了,真有什么时候要用到收费内容,也变得顺理成章。要是用户来都不愿意来,你的收费内容放的地方再如何的显眼,再如何的漂亮也是白搭。

SP产业的相关问题

从SP产业从几年前就开始走入了低谷。从一定程度上说这也是必然的。至少从我的体验上来说,SP业务的体验一直都不怎么样。几年前,SP还算是个扩张期,加上监管不利,乱扣费严重。SP们都过的不错。

随着产业的发展成熟,移动监管的加强。SP开始陷入低谷。于是大家开始盼星星盼月亮的盼3G,可是3G迟迟无法变为主流。更糟糕的是,SP们发现这个称谓“挑战与机遇并存”的3G。机遇没多少,挑战倒是不小。以前SP的优势,说到底是渠道优势。那时手机上网还未成为主流,手机获取信息的途径非常有限,无非就是个短信加彩信。

在手机的上网普,就如同打开的潘多拉魔盒,手机一下变得丰富多彩。短信、彩信的地位也被动摇,SP的渠道优势不在。另一方面,SP的信息质量和数量都难以同新浪腾讯等互联网企业相匹敌。

SP产业将何去何从

我想这并不是我可以搞清楚的(或许也没谁能搞得清楚),如果我真能搞清楚,那我就可以自己去开个公司了。

移动王建宙退休,李跃的上台。很多人说这将给SP产业带来变革(从SP角度说是往坏的方向变)。但不管王建宙退不退休,又或上台的是谁,SP产业都到了不得不变的地步了。

Android开发学习笔记(Reloaded)

深入浅出Android这书看到“解读程序流程”这部分的时候,我开始明白这确实是本烂书彻底的烂书。里面居然开始解释java程序的结构,啥是import之类的东西。一个人如果连java是啥东西都不做到应当也没必要看啥android开发。不过还在这书够薄,且凭借母语优势,我还是很快的把余下的内容给翻了一遍。感觉差不多可以照葫芦画瓢了,但对具体细节依旧是一头雾水。看来老老实实的看sdk自带的文档才是正道。

Android的开发者网站挂了,不过好在SDK里已经带了相关文档。

具体见:

/android-sdk-windows/docs/guide/topics/fundamentals.html

本着有中文尽量看中文的原则,先到网上找了找是否有Application Fundamentals的中文翻译。似乎已经有不少人做过了翻译,其中这篇翻译得比较完整http://docs.google.com/View?id=dcz49tvn_68f7rtrr9f

Application Components

Android程序比较特别,它不象大多程序一样有主入口。它是以“Application Components”为单位的,每个Components都是可以独立运行的。

系统中有四种Components:

  • Activities 主要用来处理用户界面(窗口)。
  • Services 后台运行组件,有点类似windows的后台服务。
  • Broadcast receivers 广播消息接收组件,比如电池没电,来电话啥的。
  • Content providers 用来处理各个application之间的公共数据存储,可以用来程序之间通信啥的。

Intent

content provider在接收到ContentResolver的请求时被激活,其他三种Components需要通过被称为intents的异步消息激活的。一个intent是一个Intent对象,它保存了消息的内容。

组件的关闭

Content providers和Broadcast receivers由android管理,通常不需要手动关闭。

The manifest file(AndroidManifest.xml)

应用程序配置文件,配置有该有用的组件信息,资源信息,以及权限信息。在android启动一个应用程序的component之前,它必须知道这个component的存在。因此,应用程序在manifest文件中声明了它的component。

Android开发学习笔记(程序目录结构及基本概念)

选定《深入浅出Android》作为入门资料,同时还需要找个开源项目做参考以加深学习。虽然ADT本身有带不少例子,但我还想找个复杂点的例子。曾在java上看到javaeye android客户端开源的消息,于是就不费心去找其他的例子了http://code.google.com/p/javaeye-android-client/。

先创建一个新的Android主要目录如下

|~gen/ 系统自动生成的文件
| `~com/
|   `~haoluobo/
|     `-R.java
|~res/ 资源文件,图片以及界面描述等xml文档
| |+drawable-hdpi/
| |+drawable-ldpi/
| |+drawable-mdpi/
| |~layout/ 界面布局的描述文件
| | `-main.xml
| `~values/
|   `-strings.xml 字符串常量
|+src/ java代码

Android的界面虽然可以完全用java代码完成,但使用XML定义界面使界面和实现代码分开,更有利维护。且ADT提供了界面预览功能,可以直观的看到界面效果。

界面使用XML定义后,界面元素和java代码又要如何交互?所以就有了系统自动生成的R.java这个java类。ADT会在R.java里为XML里的界面元素创建对应的ID(int类型的常量)。根据元素类型的不同,常量保存在不同的子类中。这里说得有些不明白,直接上代码。

public final class R {
    public static final class attr {
    }
    public static final class drawable {
        public static final int icon=0x7f020000;
    }

…….

java代码里要获取对应的页面元素使用如下的方法

usernameField = (EditText)findViewById(R.id.username_field);

Android开发学习笔记(环境准备,学习资料收集)

前言

iPhone推出后,移动终端的能量似乎被一下引爆,android的加入使这个市场更加繁华。智能设备的开发也一下子变得流行起来。

作为一个开发人员,还是很想了解尝试一下智能设备的应用开发。本想试试iPhone,无奈我没MacBook也没iPhone,只能退而求其次选了android。

环境准备

如果你只是学习android开发,那有台PC就够了,并不需要去真正买台android设备。

网上关于android的开发环境配置的文章已经够多了,这就不多废话。

具体参考:http://blog.csdn.net/ghd2000/archive/2010/04/19/5498673.aspx

这里要注意的几点:

  • 使用SDK Setup.exe安装的时候很可能会无法连接成功。选择Settings->Force https:// …http://。将连接类型由https改成http。
  • 如果修改过用户目录,会导致创建的AVD无法启动。需要将.android目录复制到C盘的用户目录,比如:C:\Users\vicalloy\.android
  • http://developer.android.com/ android的开发者网站悲剧的被墙了,需要自行翻墙

参考资料

开发环境准备好后,就要开始搜罗学习资料了。

具体的学习笔记

太晚了,改天补上……

E63初步感受

优点

  1. 全键盘,操作方便。自从用过PPC手机后就对触屏深恶痛绝。虽然现在的触屏操作系统,比当初的PPC已经进步不少,但已经对触屏免疫了。
  2. 屏幕效果不错,而且是半透屏,在关闭背光的情况下也可以看清屏幕上的内容。
  3. 和黑莓相比软件丰富。
  4. 收音机效果还不错,比我的mp3带的收音机要强出不少。

缺点

E63作为商务机,娱乐功能方面还是比较弱。不过如果娱乐功能不烂一些,也无法和E71/E72拉开差距。

  1. 拍照功能烂,非常的烂,比我的8320还要烂很多,基本上属于不能看的那种。
  2. mp3效果其实还行,但低噪太大。用原装耳塞的时候还好,换上我的mx500后就原形毕露了。

软件

我安的部分软件

  1. 输入法 百度(点讯) 最初计划使用搜狗(毕竟电脑上用的是搜狗),但搜狗似乎不支持“五宫格”选字,只能放弃。(PS:五宫格 每次出5个提示字,然后直接出字,比如挂机键出第3个字,接听键出第一个字)
  2. 看书软件 百阅 推广做的最好的可能要数熊猫看书了,以前在PPC上用过着东西,感觉不是太好,而且据说流氓,直接PASS。百阅界面漂亮,而且支持在线找书,并直接下载,非常方便。支持平滑字体,字体美观。缺点暂时没发现。
  3. 浏览器 opera mini 用wifi的时候就直接用塞班的官方浏览器了,gprs还是opera mini比较省流量。uc个人感觉太笨重了点,手机上网也不会去看什么很复杂的网站。
  4. 360手机卫士 主要看中它的来电归属地和响一声电话提醒。

E63刷机

我的黑莓8320最近频频罢工。虽然已开始有些习惯了黑莓,但这个手机用了不到一年就这这样,实在是有些失望。

在E72和E63间纠结了一整后最终选择了E63。

今天,新机到手的第二天,用官方的PC套件对系统进行了一次升级。升级好后系统语言变成E文和另一不知道是哪的蝌蚪文,中文则彻底成了框框。这时候我才反应过来,这就是传说中的刷机,由于我的机器区域码为某小国,系统没带中文。新到手的机器,还没来得及把玩就挂了,实在是让人崩溃。

迫不得已到网上寻找解决办法。

网上有使用“凤凰”刷机的方法。虽然凤凰的个头不小,而且过程繁琐,但为了解救我的E63只好尝试。然后失败。

经过再次搜索后终于找到了个简单的解决方法。使用NSS将E63的code改成新加坡,然后用官方PC套件进行更新。

具体使用方法参考下面的链接:

NSS无法改CODE的的究极秘籍 http://bbs.dospy.com/thread-5547565-1-1.html

貌似最全的E63 code号 http://bbs.dospy.com/thread-3002663-1-1.html

发布一个Django的论坛系统LBForum(开源、带演示)

简介

LBForum 用django开发的论坛系统,演示地址为:http://vik.haoluobo.com/lbforum/
项目的地址为:http://github.com/vicalloy/LBForum
界面部分抄的 FluxBB(一个开源的PHP论坛 http://fluxbb.org/ )。
虽然Django写的论坛也不少,不过还真没什么好用的。
大多Django论坛都是独立的app,而且不少还缺模板,想我这样有经验的Django用户要跑起来都觉得麻烦,其他普通用户就更别说了。
LBForum主要注重部署的方便性和易用性,功能方面目前还比较简单。
LBForum一开始就是以整站的形式提供,所以以LBForum做为基础项目进行二次开发是很容易的。
同时LBForum的开发尽量遵照Django可复用app原则,因此即使需要将LBForum做为独立的app集成到其他项目也并不会太难。

主要功能

目前功能还比较简单,而且还有些小问题有待修正。

  1. 论坛分类,分版块
  2. 发帖,回帖
  3. BBCode支持
  4. 置顶贴
  5. 使用django admin提供论坛管理功能

用开发服务器把LBForum跑起来

  1. 先把代码down下来。LBForum托管在github上,http://github.com/vicalloy/LBForum 。如果你没有安装git,你可以直接用界面右上方的download
    source功能下载代码。
  2. 运行\scripts\create_lbforum_env.py初始化lbforum的python虚拟环境。该脚本会自动创建一个python的虚拟环境并使用easy_install安装对应的依赖包,同时将一些依赖包解压到对应的目录中。
    注:django使用的是svn版本,所以机器上必须要安装有SVN,不然脚本会运行失败。如果因为由于svn的问题导致脚本运行失败,可以运行lbforum_env.bat进入lbforum环境,手动安装django的svn版本。
  3. 环境初始化好后,运行lbforum_env.bat进入lbforum环境
  4. 运行%mg% syncdb初始化数据库
  5. 运行%mg% runserver启动django开发服务器
  6. 进入admin,创建论坛分类和版块
  7. 进入版块发帖

LBForum的目录结构说明

|+lbforum_env/#lbforum运行的python虚拟环境,运行create_lbforum_env.py后自动创建
|+requirements/#lbforum用的第三方库和app,运行的时候会将该目录加到python路径
|~scripts/#工程相关脚本
| |-create_lbforum_env.py#初始化python虚拟环境,并自动安装easy_install/django依赖库
| |-helper.py#提供其他脚本所需的辅助函数
| `-lbforum_env.bat*#启动lbforum运行的虚拟环境及,并为lbforum的manage.py提供快捷方式%mg%,比如初始化数据库%mg%
syncdb
|~sites/#站点配置/模板/静态文件
| `~default/#默认站点
|   |+static/#静态资源文件,如css等
|   |+templates/#Django模板目录
|   |+templates_plus/#Django模板目录,用户将自己重写过的目标放到该目录
|   `-……
|~src/#django的app目录
| |+account/#account相关app。具体站点通常会对用户中心进行定制,所以该app在实际应用中很可能需要针对实际情况进行修改。
| |+djangohelper/#一些django的辅助函数等,
| |+lbforum/#lbforum的主app,论坛功能都在改app中
| |+lbregistration/#registration app的lbforum扩展,主要去掉邮件地址认证功能
| |+onlineuser/#显示在线用户的app(可复用的django app,可脱离lbforum单独使用)
| `+simpleavatar/#头像功能的app(可复用的django app,可脱离lbforum单独使用,依赖djangohelper)
|+tools/#工程用到的辅助工具,目前只有一个virtualenv的脚本

注:

  1. 由于计划在以后做i18n,所以目前只提供英文界面
  2. django的错误提示是显示在字段后面,fluxbb的错误全部都显示在表单前面。由于模板没有调好,所以目前按照fluxbb的方式显示错误,所以错误显示有些不太正常。
  3. bbcode的输入框本想做成自适应大小的,不过也调得有些问题,所以现在输入框的大小固定。
  4. 文档… ,感觉好难写-_-,目前文档不全(项目中没有带任何的文档),日后补上。
  5. 应用程序的目录结构主要查看pinax
  6. simpleavatar模块部分代码来自django-avatar
  7. 依赖包除用easy_install在线安装的外,尽量使用zip包的方式附带在项目中,减少安装依赖包的困难。
  8. 远程部署脚本计划使用fabric,但fabric本身安装比较麻烦,所暂未处理。
  9. 项目最早放在googlecode,不过感觉github的功能更强些,所以移了过去。

SourceForge使用Python、TurboGears、MongoDB……来重构网站

pycon2010上关于SF网站重构的演讲,里面介绍了SF重构的技术选型及原因。在我看来SF用的东西还真的很GEEK。
主要用到的技术有Python、TurboGears2、MongoDB、Jinja*、RabbitMQ,服务器用的是LigHTTPd和Nginx。

  • TurboGears2(为什么不的Django?)
    pdf中也有谈到此前也用到过django,而且有很不错的体验,但对SF的改造来说TG更为合适。SF有着上10年的历史,要完全抛弃原有的东西自然不现实,此次的网站重构并不是完全的重写。TG可以很容易的剥离掉不需要用到的东西,同时TG可以很好的同其他WSGI中间件配合工作。
  • MongoDB
    MongoDB是一个非关系的分布式数据库(NoSQL数据库),最大的优势快。由于这东西足够快,所以连web2.0网站常用的memcached也省掉了。(注:NoSQL数据库介绍可以参考 NoSQL数据库探讨之一 - 为什么要用非关系数据库)
  • Jinja*
    Django的模板很棒,但速度不怎么快,而且完全不支持任何嵌入式代码。Jinja和Django的模板长得非常的象,而且解决了上面的两个问题。(注:文档里说前台用的是PHP,所以不清楚是否有部分用到Jinja)
  • RabbitMQ
    用Erlang写的中间件,进行前后台的消息通信。SF的前台界面呈现,依旧使用的PHP,前后台通信用的就是这东西。