My Projects
Current Projects
- Acts as Wiki - A Rails plugin that turns any ActiveRecord field into a wiki.
- WhereAreYouCamping.com - Bringing Web2.0 and Google Maps mashups to the burningman community
- Supr.c.ilio.us - A snarky del.icio.us clone and group blog. Dis.cussions.com - Aggregating distributed conversations.
- Cite-Rel - (with Ryan King) A microformat for distributed conversations.
Past Projects
- Battlescape (with Wirehead studios) - A total conversion for UT2K4, bringing RTS to an FPS world.
- P2P for MMOG - Most MMOG users today have broadband connections, so why not use them?
- GameDev Testing Grounds - Doodling some code and testing some algorithms.
- Whuffie - Instant Karma for the Masses.
- XMLizer - An X3D exporter for Maya.
- Dual Proxy - Trying to solve the world's problems one trunk-line at a time.
- GameFrame - A frame for games!
Current Projects
Acts as Wiki
Acts as wiki is my first Ruby on Rails plugin. It came out of the work I've done on WhereAreYouCamping and my desire to keep the site editable by anyone, yet safe from malicious users, trolls, etc. AAW lets you turn any field in an ActiveRecord object into a wiki complete with Revision control and optional markdown support. I wrote more on AAW on my blog and posted a tutorial as well.
WhereAreYouCamping.com
Where Are You Camping started as a simple Ruby On Rails project that went online within 24 hours of inception. I've continued adding features and improvements for the next month as this became an opportunity for me to learn about RJS, Rails Plugins, Google maps and other Web2.0 goodness.
WAYC is targeted at the burningman community and allows attendies of the event to share their plans for the events with friends and strangers. After about a month of operation, the site attracted close to 800 members and will hopefully grow as people prepare for the event's return in 2007.
Supr.c.ilio.us
Supr.c.ilio.us started out as the world's first social social tagging tagging site where users can socially tag social tagging sites. Since those heady days, when Web 2.0 was young, supr.c.ilio.us has grown and now has a blog and several related side projects. I co-founded Supr.c.ilio.us together with my friend Ryan King and we still post there together with Assaf Arkin and RICK!.
Dis.Cussions.com
This project grew out of my interest in distributed conversations and ended up as a rather ambitious plan to create a completely distributed version of Tribe.net based on micrformats, feeds and other forms of open content. A development version of Dis.cussions is accessible online but requires a password (contact me if interested). Otherwise, you may read more about this on the trac pages.
Cite-Rel
Cite-rel is a microformat that allows an author to indicate a blog post's (for example) place in a distributed conversation. See the draft spec on the microformats site.
Old Projects
Battlescape
Working with my friends over at Wirehead Studios i've started developing a total conversion mod for Unreal Tournament 2004. This mod will add an RTS (Real Time Strategy) element to UT2K4. Some players (designated as commanders) will be able to control worker bots, build new building, control resources, research technology and direct the rest of their team-mates in an effort to anihilate the enemy.
current statusI'm currently battling with the bot's pathing system. they seem to find it very hard to stray off the navigation network :/
screen shots I'm not providing the source for this project at the moment, mostly because it is in no state to be published. Licensing and IP issues will be dealt with at a later time.
Language: Unreal Script
Platform: Unreal Tournamner 2004
GameDev testing ground
While reading the book "Core Techniques and Algorithms in Game Programming" (by Daniel Sanchez-Crespo) i started doodling some code to test the various algorithms described by the author. I'm using this project as a place to test out those and other game-related algorithms and will (try to) update it regularly.
Current StatusCurrently using a text-based presentation layer. Algortihms deployed include some basic (mostly state machine based) AI. Bots traverse a pre-planned route, once the player is identified the bot will chase until he loses view of his target. At this point the bot returns to his standard route. My next update will include team behavior.
Source Code
Language: C++
Platform: Win32 (although at the moment it is probably portable). I haven't decided on a graphics library yet...
P2P for MMOG
Most MMOG users today have broadband connections, so why not use them?
I believe that by using a Peer to Peer network infrastructure MMOGs (Massive Multiplayer Online Games) can reduce server load and bandwith usage. I've seen academic articles (links to come) take this idea very seriously, too seriously for now, i would say. A true implementation of this idea would take it to the max and distribute all computation, storage and communications among the users leaving very little for the servers to do - mainly authentication and security. This would entail a very complex system with wide use of encryption and plenty of bandwidth, even then I do not believe it would be completely secure as the user will always have control of the client. My idea is much less ambitious and as a result that much more feasible.
I aim to make use of user's bandwidth alone. Storage, computation, verification and authentication are still done by the server but information sent to users is propagated through the P2P network, thereby reducing the server's bandwidth utilization by a significant factor. The entire project is aimed for simplicity - the network is not a pure P2P network, authorization is done by a central server, the server is also in charge of maintaining balance in the network (more on that later), optional authentication of data will also be handled by the server. The benefit lies in the fact that a server in an MMOG typcially sends similar (usually large) packets of data to different users. This information is sent to just a core of users who then forward it to their peers (and so on), taking off a signficant portion of the bandwidth load from the server.
designThe project works as a network library providing a full infrastructure for the above application. The library has two versions, the server side and the peer side. The server-side process handles all incoming connections, user authentication and message passing to/from users. The peer side handles connections to the server and peers and message passing to/from the server and peers. The network is designed to reduce bandwidth usage on the server while maintaining fast, interactive communications (lag kills!). Peer selection is made in light of those demands. The resulting structure is a tree that is wide (to reduce server load) and shallow (to reduce lag). Users with fast trunks and good response times will be closer to the server and have many peers. Conversly, users with slower connections/response times will tend to be at the bottom of the tree and have few peers. This structure is maintained by the server in the above mentioned tree structure. server, client, self-balancing tree, network layer. The topological structure of the network is also context dependent. Users that are likely to receive similar information, are more likely to be peered to each other. In a simple MUD based example, users in the same room are likely to be peers, when a user moves to another room her location in the network will change. This insures better utilization of the Peer 2 Peer network structure.
current statusI need to completely re-write the tree strucutre. Currently all tree operations are a mess of function calls between the data structure and the network layer with various state changes as replies are received from the network. I am thinking of using asynchronous calls in the data structure code to clean this considerably. Once the tree is more manageable, there's some issues to address about re-balancing of the tree when users move from one branch to another. This will be much easier to debug once the code is actually readable :)
Source Code will be provided after some re-factoring.
Language: C#
Platform: .NET (tested on Windows XP with .NET 1.1 but it should run on mono just as well)
Whuffie - Instant Karma for the Masses
Shamelessly stolen from Cory Doctorow's "Down and Out in the Magic Kingdom". This program analyzes threads on Tribe.net and gives users positive or negative Whuffie according to how nice their posts are. More advanced versions of this program will try to analyze response to one's post and award Whuffie for posts that generated positive response (and deduct Whuffie for posts that caused flames and negative responses), other algorithms to analyze a user's "standing" in the community are forthcoming. Whuffie Repository - coming soon.
Source Code contains code to get user information from tribe and analyze conversations. Hackish code alert!
I'm placing this here only because other people might be interested in scraping information from tribe.net this is far from ready to be released.
Language: VB.Net (why? because it's simple!)
Platform: .NET (test on XP should run on any .NET or mono platform) currently working with an Access database.
XMLizer
XMLizer is an X3D (the XML version of VRML) exporter for Maya. I Started writing this to get a feel for writing game development tools. The exporter can now work with most basic elements (meshes, lights, some shaders, etc.) and creates a fully compliant X3D file.
source code
Language: C++
Platform: Win32 with Maya 5.0
Dual Proxy
A project I developed for a Network Quality of Service class given by Prof. Hanoch Levy at Tel Aviv Univeristy. Following is some information from the readme file.
At the lower layers the Internet can be divided into several well-linked networks. The brunt of the infrastructure is located in North America and in Europe . Most of the large and important sites are located in North America . Hosts located there or in Europe can easily connect to any of those sites. However the parts of the Far East , Africa and South America are very poorly linked to the main backbone. Hosts located in those places often experience problems connecting to any of the major sites located outside of their geographical area.
Dual Proxy suggests solving or easing the first problem by acting as a well-linked proxy for the site. Residing close to the user.s location it is easier for the user to access the proxy. Having a private link to the backbone, the proxy is able to easily contact the servers. In order to act as a proxy for the server, smart DNS mechanisms must be employed. Sending users to contact the proxy instead of the actual server. This has the added benefit of solving the first hit problem as well.
Source code also contains some documentation.
Language: Java
Platform: Tested on Windows should be debugable on various Java runtimes.
Game Frame
A project I developed for an advanced Java Programming class at TAU. The project is designed to be a service and a library for writing Java based networked games. A client side library is provided for communication with the server. The server handles everything from connection to other players to tracking results and making sure the game's rules are adhered to. The modular structure of the service makes it easy to implement many different games over this framework.
Source Code contains documentation and a sample game. Language: Java Platform: Tested on Windows and Linux.
