Site Technology Our custom publishing system.
Here's a sampling of some of the technology that we use:
- PHP & Zend Framework For Back End
- For our PHP development framework, we use the full Zend Framework, with heavy use of Zend Cache and Zend Form (for the latter, we made an extension to make the library work smoothly with the Bootstrap CSS framework).
- Ngnix For Server
- Solr for Searching and Indexing
- For our searching and indexing, we use Solr 4 (which is in alpha, but hasn't given us any problems). We use some currently-in-development (this means it currently sucks) ranking schemes to determine content order when the user doesn't explicitly select chronological or by-release-date.
- MySQL and CouchDB for Data Store
- We use MySQL for most of our data storage, to store session data, and also as our slow cache. We're currently switching more toward a document-based database through CouchDB (probably) since most of our MySQL entries are really just documents.
- Memecached, MySQL and Zend Cache for Caching
- We use a two-level cache through Zend Cache. The backend for our fast level cache is Memcached. The backend for our "slow" level cache is MySQL.
- Node.js, Socket.IO, and CouchDB For Realtime Monitoring and Logging
- To monitor PHP errors and custom logging messages, and as a technology test, we created a custom logging tool. Our logging class, Couchlog, adds logging messages and PHP error messages to a CouchDB database. We have a tiny Node.js monitoring app listening for insert alerts from the CouchDB database and piping those alerts in real time via Socket IO to any admins who happen to have their monitor window open (the node app uses our Zend Auth data for user authorization). Third party libraries we use include Settee, Socket IO and Nano.
- We use Twitter Bootstrap as our CSS framework.
Here are some of the features and tools our site provides:
- Custom Messaging system
- Users can send and browse private messages using a custom messaging tool that's meant to resemble Facebook's messenger. This module uses the History object to allow for messages to be hotlinked.
- Inline Search
- Highlight terms in the body of stories to search the site's content database without leaving the current page. Rather than paging, this widget uses a Facebook/Twitter like "load more" feature which automatically loads additional results when you reach the bottom of the window.
- No Administration Page
- Rather than having a separate administration page, administrators simply have access to some extra options in the user menu accessible from the top nav bar. New content, images and objects can be added without leaving the current page. The current content or object can be quickly edited also without leaving the page.
- Custom Live Blogging Tool
- For live coverage of events, we have a simple custom-made live blogging tool which makes use of some MooTools More libraries to reduce unnecessary data transfers.
- Custom Commenting System
- Rather than use one of the many excellent commenting systems out there, we decided to make our own, which allows us to fully integrate user comments into our content hierarchy (a comment is the same as an article, but listed as a reply to an article or to another comment)
- User Follow and Alert System
- Users can click to "follow" stories using a quick interface similar to "Liking" a story. When someone posts a comment in a story that you're following, you'll receive alerts via the top navigator.
- Multilingual Support
- The entire site is built around support for multiple languages -- currently just Japanese and English, but with easy extension to other languages too. There isn't a single stray text string anywhere in our code (well, maybe just a few...)
- Social Network Integration
- Users can log in through Facbeook and Twitter, and synch up their user page with their social stream to show Tweets and Tumblr posts alongside their comments. This feature uses a "Newsfeed" PHP class that we made.