Monster为爱码士:http://www.2ma4.com开源后的项目
一直以来,我就想打造一个专为国内极客和码农们热烈交流的社区,纵观国内 IT 论坛,基本都是一个帖子下面平行分布各种回复,每个回复之间通过 @相连接,有时经常都要找半天这个人到底是在回复谁?比如 ruby-china , phphub , V2EX , cnodejs , golang 中国 等等,这些社区都做得很精美小巧,但是,却难以将回复者之间的关系调动活跃起来。
去年 8 月份,我便开始动手编写“爱码士”这个论坛,我希望回复者能够像网易盖楼那样,一层一层彼此热情高涨,在设计过程中我参考了网易盖楼和 disqus 等网站的盖楼设计,但这些设计都不是太完美,逐渐向内缩进的盖楼意味着盖楼的楼层数始终有个最大值,印象中网易盖楼到 70 层时便塌楼了,因此,我设计了一种新的“堆栈式”盖楼设计:
盖楼一层层向上推进,理论上支持无限多的楼层
在前端方面,码农们眼中从来都是干净、整洁、纯粹的东西是最美的设计,因此,我将爱码士整个论坛都设计的非常干净简单:
帖子页:
站内私信发送:
个人profile页:
为增强用户之间好感,加强互动,头像hover widget显示了彼此赞了多少,回复了多少
在系统架构上,爱码士使用了经典的MVC架构,这个MVC也是内置在自己编写的一个很小巧的php框架中,系统存储采用了国人开发的一款基于Google leveldb的nosql:ssdb(http://ssdb.io/zh_cn ),ssdb简单的说就是一个存储在硬盘上redis,其使用协议和redis相同,但由于数据全部存储在硬盘上,并且支持亿级数据,因而扩大了容量的同时大幅降低了成本。相对于传统的php+MySQL+memcache(or filecache)后端设计,ssdb可以多出很多特性,比如setx可以限制用户频繁对一个帖子进行回复:爱码士将每个人对于一个帖子的回复setx一个有存活时间的flag,在这个flag存活期内,用户无法再对这个帖子进行回复。但用户发送私信行为不能用setx进行限制,不可能让用户每隔10分钟发送一条私信吧,万一有多条连续重要的私信呢,这时,借助于ssdb的list特性,我们可以为每个用户发送私信的时间戳设置一个队列,尾部入栈,顶部出栈,这样,用户在规定时间内发送次数多于某个预设值时阻止发送。
在盖楼的数据库设计方面,为了达到回复内容的可控性,我没有把回复HTML写死在数据库里,而是将回复reply_id以json形式存在hashmap中
系统帖子排序分为“默认排序”和“最新帖子”,默认排序是按照stackoverflow的算法,感谢阮一峰老师提供的这篇文章:http://www.ruanyifeng.com/blog/2012/03/ranking_algorithm_stack_overflow.html 爱码士的默认排序也是按照这篇文章中的算法进行排序的。
整个爱码士编写大概耗时半年,其中个人感觉最难的就是私信发送系统了,私信没有采用websocket,php不适合干这个,也没有采用长轮询的方式,而是js setinterval定时请求,通过jquery trigger click刷新按钮请求服务器,由于第一次使用nosql编写这个在线聊天系统,可能会有考虑不周的bug出现。
系统前端只引用了jquery库,为了界面美观干净,没有使用臃肿的bootstrap,全站公用一个global.js和base.css,站长二次开发的时候会很方便查看代码
从mockup构想,到HTML和css UI设计,然后是后端架构和数据库设计,到最后的js Ajax前后调用,自己花了半年的时间完成,希望大家能尊重劳动成果,一个人开发所以bug难免,加之第一次使用ssdb,希望大家能抱着平和的态度指出bug
一个游戏中有多种怪物(Monster),怪物之间可能要发生战斗(fight),每场战斗都是一个怪物与另一怪物之间的一对一战斗。每个怪物都有自己的生命值(hitpoint)、攻击力值(damage)和防御力值(defense),每种怪物都有各自特有的攻击(attack)方式,产生相应的攻击效果;战斗时,两个怪物依次攻击对方,即怪物a首先攻击怪物b, 然后轮到怪物b攻击怪物a, 之后,怪物a再次攻击怪
题目描述 你要打一只h点血的怪物,每回合你攻击会造成a点伤害,回合结束后怪物会回b点血,你每攻击k回合需要休息一次,该回合不能造成伤害。怪物血量降到0以下就会死亡,问最后能否打死怪物。 输入 There are multiple test cases, terminated by a line "0 0 0 0". For each test case, the first line contai
Problem Description Teacher Mai has a kingdom. A monster has invaded this kingdom, and Teacher Mai wants to kill it. Monster initially has h HP. And it will die if HP is less than 1. Teacher Mai and m
http://www.codeo4.cn/archives/554 1. 在 http://www.demonsterdebugger.com/ 下载 MonsterDebugger最新版 (需要先安装AIR Runtime),我写这篇文章的时候版本是3.02 2. 将MonsterDebuggerV3_02.air安装到硬盘里,并启动此程序 3. 选 File > Export SWC 指定输出
Kill the monster Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1241 Accepted Submission(s): 846 Problem Description There is a mountain ne
import java.util.Arrays; import org.apache.commons.lang3.ArrayUtils; // Basic class definition // public means this class can be used by other classes // Class names should begin with a capital lett
You are playing another computer game, and now you have to slay n monsters. These monsters are standing in a circle, numbered clockwise from 1 to n. Initially, the i-th monster has ai health. You may
Problem Description There is a mountain near yifenfei’s hometown. On the mountain lived a big monster. As a hero in hometown, yifenfei wants to kill it. Now we know yifenfei have n spells, and the mo
You play a computer game. In this game, you lead a party of m heroes, and you have to clear a dungeon with n monsters. Each monster is characterized by its power ai. Each hero is characterized by his
Monster Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 1782 Accepted Submission(s): 550 Problem Description Teacher Mai has a kingdom. A monster
Description Teacher Mai has a kingdom. A monster has invaded this kingdom, and Teacher Mai wants to kill it. Monster initially has h HP. And it will die if HP is less than 1. Teacher Mai and monster t
//===================================================== // - FileName: AutoCreateMonster.cs // - Author: #AuthorName# // - CreateTime: #CreateTime# // - Email: #AuthorEmail# // -
In contrast to Vacation, Facilities living space minimum size could often be larger very as much simpler, Beats by Medical professional Dre single pertaining to xmas hello thereoutl primarily absolut
本文向大家介绍学习php开源项目的源码指南,包括了学习php开源项目的源码指南的使用技巧和注意事项,需要的朋友参考一下 一。先把源代码安装起来,结合它的文档和手册,熟悉其功能和它的应用方式。 二。浏览源代码的目录结构,了解各个目录的功能。 三。经过以上两步后相信你对这个开源的产品有了一个初步的了解了,那现在就开始分析它的源码吧。这一步我们开始分析源代码框架。例如入口方式是单入口还是多入口,页面之间
主要内容:前言,1、从最简单的源码开始:别幻想一步登天,2、循序渐进:先搞定底层依赖的技术,3、一定要以Hello World作为入口来阅读,4、抓大放小,边写注释边画图,5、反复三遍:真正理解源码,6、借力打力:参考源码分析书籍及博客,7、最后寄语:用几年时间锻造自己的核心技术前言 这篇文章,给大家简单介绍一下很多同学都非常关心的一个问题:如何阅读一个开源项目的源码。 我相信很多同学都希望能够去阅读一些源码来提升自己的技术水平,毕竟在面试的时候,很多大厂都经常会扣到非常深入的底层源码。 1、从
Query Planning and Batch Data Fetching between GraphQL and SQL. Read the Documentation: latest, v2, v1 or v0 Try Demo: basic version or paginated version Example Repo Supported SQL Dialects (DB Vendor
怪兽RPG游戏是一系列高品质的开放源码的角色扮演游戏。从头开始,重点放在良好的故事,独特的游戏功能,和专业的前瞻性和探空插图和音频。怪物2 ,最新版本的系列,是一种怀旧之旅回到天的史诗RPG游戏一样SNES最终幻想和呼吸火灾。 下载 Windows Installer 1.0RC2 (~40MB) Windows Zip file 1.0RC2 (~40MB) X86 Mac OS X disk
Monster Debugger是由De Monsters开发的免费、开放源代码的Adobe Flash, Flex和AIR的调试工具。
问题内容: 我想将我的一个应用程序发布为开源,并想用自己的证书对我创建的二进制文件进行数字签名。(当然,其他任何人都可以下载代码并使用自己的证书自己构建代码。)我想这样做,以便任何人都可以检查此构建是我而不是其他人进行的。我还想用有效的SSL证书创建一个安全的网站,以便访问者可以安全的方式创建自己的帐户,以便为该项目做出贡献。 我可以创建一个自签名证书,但是我真的不喜欢该选项。或者,我可以向Ver