Book & Man

Software, Design, Investment

构造自己的Hacker News社区,体验Arc程序语言

未评论,抢沙发!

你是否想过运行一个自己的Hacker News社区?本文介绍如何在自己的服务器上安装类似Hacker News的技术新闻社区,同时可让你体验一下简洁的Arc程序语言。

安装Arc环境

注意:本实例中的服务器操作系统是Ubuntu Server,如果在其它*nix类环境安装则请自行调整相关路径等配置。
1. 下载并安装MzScheme,一定要版本v372

http://download.plt-scheme.org/all-versions.html

2. 下载并安装Arc3

Arc安装指引:http://arclanguage.org/install

下载地址:http://ycombinator.com/arc/arc3.tar

News服务的安装和配置

因为Hacker News的后端平台本身是Arc语言包的第一个演示程序,所以你只需要完成上述Arc环境搭建步骤后,十分精简的Hacker News源代码已包含在Arc目录下。

1. 阅读Arc目录下的how-to-run-news,里面包含hacker news安装和配置指引,其中包括创建系统管理员用户(密码需在下面第4步骤登录时设置)。

2. 进入Arc环境控制台

mzscheme -m -f as.scm

3. 加载news.arc

arc>(load "news.arc")

4. 启动服务

arc>(nsv)

5.用浏览器访问你的news服务地址:http://localhost:8080/,创建的第一个用户即是系统管理员。

6.中文界面优化
当然,默认安装的页面风格十分适合英文信息。要想显示漂亮的中文,必须调整对应的字号、行距等CSS风格。这些参数都可以通过修改arc目录中的news.arc实现。每次修改后要重启news服务才能生效,或者关掉服务器缓存功能(这个的具体操作我还未学会,:-)。

配置News服务专用的虚拟域名,并采用80端口

这个News的web服务其实是自带的(Arc程序写的),默认用8080端口。如果你希望为此服务配置一个干净的URL,例如news.mycompany.com这类的二级域名,则可按参考下面的例子修改你的Apache2配置,目标是:让访问http://news.mycompany.com/的外部请求可转接到news服务的内部地址http://my_server_ip:8080/,也就是让你的Apache2服务用独立的虚拟域名和默认80端口代理内部由Arc提供的8080端口的web服务。
首先,要确认你的Apache2已启用了proxy和proxy_http两个动态模块。如未启用,可用以下命令启用这两个模块并让它们生效:

sudo a2enmod proxy proxy_http
sudo /etc/init.d/apache2 reload

假设你的二级域名是:news.mycompany.com,而你的内部news服务地址是http://my_server_ip:8080/,则对应此二级域名的VirtualHost可以这样配置:


NameVirtualHost *:80

ServerAdmin your...@mycompany.com
ServerName news.mycompany.com
# Reverse proxy inbound requests to news running on port 8080
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
  Order allow,deny
  Allow from all
</Proxy *>
ProxyPass / http://news.mycompany.com:8080/
ProxyPassReverse / http://news.mycompany.com:8080/
<Location/>
  Order allow,deny
  Allow from all
</Location>
ErrorLog /var/log/apache2/news.mycompany.com-error.log

# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn

CustomLog /var/log/apache2/news.mycompany.com-access.log combined

汉化版HN和汉化思路

应读者要求,我把自己汉化过的代码发布出来:https://bitbucket.org/chuancy/hn-chinese/。汉化要点如下:

  • HN新闻站所有代码都集中在arc3/news.arc,里面包括:网站所有CSS,HTML模板界面中的各种功能按钮(词汇)
  • 我曾尝试将部分功能按钮汉化,但部分按钮,例如:submit,是hard-code上去的,本身也是作为程序的变量使用
  • 要全面汉化,估计需加上一个国际化抽象层,也就是:按Arc语言的语法,把所有功能动作的按钮上的词汇抽象出来,参数化(作为变量),每种语言新增一个资源文件。

后记

Hacker News的社区新闻排位基于一个有趣的算法,实践证明此算法十分有效,Amix的博文How Hacker News ranking algorithm works详细解释了此算法,如果你希望在自己的产品/网站中实施此类算法,这帖子是很好的参考。

作者: Chuancy

日期:2010-08-14 at 9:26 上午

分类: General

关键词: , , ,

Leave a Reply