Projects Articles
How I Make Tough Website Decisions
(by PeEll)2010.08.01I need to make some decisions soon about MortalPowers.com. This includes questions about the appearance, functionality, the focus of my time, and what sort of browsers and codecs I want to support. To answer these questions, I'm going to try to go back to the original question, which is asking myself what are my goals, and why am I building this site.
What is my goal with this website? My goal is to increase traffic, to provide a place for my development projects to live; grow; and be shared, and finally to meet the needs of my visitors.
The last goal is going to be one of the most central, because it will inform the first two. But to answer this question, I need to know as accurately as possible, who are my visitors? I'm going to use the last month as the window and breakdown my traffic from multiple source (Google Analytics and AWStats primarily).
Who visits my site?
Browsers
Right out of the gate, 8% of my visitors will be unable to view any HTML5 videos. At this point, I'm comfortable instantly dropping the 8% of my visitors that still use Internet Explorer. This is partially a philosophical decision, but it's also in part because most of the people that come using that browser will have no interest in anything I have to say.
Only about 3% of my Firefox users will be unable to view my Ogg Theora videos. This indicates that Firefox users tend to update their browser relatively frequently. This is great, because Firefox and Mozilla have committed to support to a lot of the technologies I want to use and support.
Operating Systems
It seems that a major plurality of my users (45.5%) still use windows to access my site. This is acceptable to me because Windows users can still be interested in Open Source, in software development, or even interested in trying or understanding Ubuntu. I will try to do what I can to support these individuals. As an interesting tidbit, Windows use ends up breaking down as follows for me: 43.9% use Windows 7, 39.22% use Windows XP, and 14.03% use Vista, the rest use Windows Server 2003.
Screen Resolution
Less than 7% of my users have screens of 1024 width, everyone else has 1280 or much greater.
What this means for Video
One of the goals that has most recently bubbled to the surface for me is the idea of supporting my video gallery on mobile. I'm continually disappointed with YouTube's mobile site because their video collection is a subset of their full video gallery. Looking at the video support offered by the users of my site, I can cover almost all of my desktop users with Ogg Theora, and until WebM becomes a universal standard, this will be the universal standard. I'm not anticipating WebM to become available across my user base until at least 2012, but time will tell. On mobile, the only option is to use .h264. Based on these competing values, I'm going to attempt to have 2 encodings for each of my videos. I'm not sure yet whether this will mean I have a mobile version of the gallery, or whether I will try to use a single HTML5 video gallery with multiple sources, and I'm definitely open to feedback.
Over the next few months and years, I'm anticipating that mobile usage of my website will grow from the lowly 1% to 20%-50%. Google itself has declared a "mobile first" strategy, and the human workflow of using a phone seems to be much more natural than the bulky process of using a laptop or desktop computer, despite the speed, cost, and additional capabilities provided by desktop computers.
I hate the idea of supporting the .h264 standard, but until WebM is available, I'm going to have to make a decision in favor of my users, rather than in favor of my philosophy that Android and iPhone and Internet Explorer seem to have already rejected. It still makes no sense to me why the mobile phones and Internet Explorer don't at least offer Theora video decoding, since the software is free (as in speech) for them to implement.
comments | permalink
MortalPowers Now Uses OpenID
(by PeEll)2010.06.17Tonight I worked on launching Google Account / OpenID integration on mortalpowers.com. Now, instead of needing to register, or create a username/password, you can simply visit the registration page and sign up with Google's OpenID provider.
If you sign up right now, the only permission you will get is to submit to the HTML5 Video Gallery.
OpenID Implementation Details
It turns out OpenID integration is much simpler than Facebook Connect. I understand Facebook Connect and OAuth implementations have much more capabilities, but they also have much more complexity.
For this implementation, whenever a login request or signup request is made, the user will call up Google (or whatever OpenID provider is hardcoded into my script) with the requesting URL. The OpenID provider will generate an authentication token if the user agrees to the request, and the authentication token will be passed back to my script for use. The security model is that only my site and Google (with valid authentication) know or can generate this token, so anyone that has this token and can pass it to me can be trusted as having passed Google's authentication.
Hopefully I will be able to integrate with Facebook Connect or Google's OAuth services to get better information about users and start providing integration with other services and capabilities. I have Facebook Connect code that used to work, but after moving all authenticated pages to https, the Facebook Connect code no longer works, and deserves a complete rewrite based on my knew cross-site authentication and authorization knowledge.
comments | permalink
New Features for Reddit Imager
(by PeEll)2010.06.16One of the most common reasons to build a tool for an open source developer is when the developer him or herself wants the tool. This is the case with Reddit Imager, a tool designed to improve Reddit. The concept is simple, whenever there is a URL or image format we recognize (very few right now), replace the tiny thumbnail with the blown up version, maximized to the screen width. I launched this extension on the Chrome Extension Gallery because I wanted to try out the gallery at least once, despite my dislike of giving Google control. Now the extension has a couple users, and I want to make sure they get the features and capabilities they want.
What's new in 1.1?
Reddit Imager 1.1 released today adds an options page where users can specify their mode. Normal mode automatically replaces matching thumbnails with their blown up versions. I also added activated mode, which waits for a user to try to click on the thumbnail before blowing it up. I find this feature a little confusing because there are very few thumbnails we are actually capable of blowing up, but it was requested and I wanted to try it out.
Let me know if you think I should switch default modes, add other options, or add some type of visual indicator for which images can be blown up on the home page.
Report issues or feature requests here: http://github.com/PeEllAvaj/redditimager/issues
comments | permalink
New Spam Capabilties for MortalPowers
(by PeEll)2010.06.14It seems that over the past two days, a bot or two has begun spamming my comment form with junk content. In general, I'm pretty trusting of users that comment on articles, requiring only that those who wish to comment pass a simple CAPTCHA. I use ReCAPTCHA, but apparently this has been bypassed sufficiently well to allow spammers to make it through, or there are malicious human beings out there trying to make a buck by spamming my comment forms.
Despite the fact that all HTML is escaped before being displayed on my comment pages, this is still a nuisance and gets in the way of valid data on the comment pages of my site. To deal with this, I have added a couple new protections. I now track the IP of comments (for spam banning purposes alone), and have built in capabilities for myself to mark items as spam. I'm actually keeping the spam in the database, because if I need to, I will apply some Bayesian filtering.
How would Bayesian spam filtering work?
Bayes' Theorem is a theorem that describes the likelihood of events given other events. For more detailed information check out the wikipedia page for Bayes' Theorem. Using this theorem, computer systems can look at past messages that have been spam, or not spam, and based on the contents of a future message, make a prediction or assign a probability to whether or not it is spam, without human interaction. This is most often used with email systems, but it would work just well for my commenting system.
Hopefully spammers realize it is futile, or I can just ban an IP block, but if those are unsuccessful, I don't want to manually need to groom all comments on my site, so I may implement a Bayesian filter. If I do need to, I'll post details about the implementation, and possibly source code at that time. This could also have a big impact on my video submission system, but time will tell. I've already had to change the URL of my comment system several times, and I've considered eliminating it entirely.
What do you think about spam and what steps are reasonable to vet visitors and content submitters?
comments | permalink
Updated Logo and Favicon
(by PeEll)2010.05.29After having the same logo and favicon for the past few years, I decided it was time for a refresh from .gif to .png. To recreate the image, I wanted to find the original font. Having done several OS reinstalls (and switching to Linux), finding the original font was no easy matter. I browsed dafont.com, identifont.com, and a couple other sites. After hours of describing the font, searching for it, uploading case files for "font geeks" to identify, I remembered the original source. The font was originally assocaited with the Mindless Self Indulgence album Frankenstein Girls Will Seem Strangely Sexy. MSI's website no longer links to their forum, but a quick google of their site and a couple of searches later identified the font as Westminster. More google searches had a .ttf file I could install with KDE's System Settings, and then it was a simple matter of building a new logo and a new favicon with Inkscape (For high quality vector-based rendering), exported to .png.
I decided to make the favicon a PNG because PNGs support transparency very well (even though I'm not using it now), and I made the icon 64x64. Typical favicons are only 16x16, but I can definitely see a future where additional resolution is allowed for favicons.
comments | permalink
HTML5 Video Gallery - Part 2
(by PeEll)2010.05.27Back in 2009 I started working on an HTML5 Video Gallery. At this point I'm comfortable launching this for a public beta. Check out the videos people have uploaded in the HTML5 Video Gallery, or upload your own to the gallery. You will need to register before being able to upload videos.
Register and then login using your chosen username and password, give a name to your video, and then select it from your hard disk. The video will start uploading immediately after selection (there will be no user-facing notification of the upload process, except for browsers like Chromium). When it is finished you will receive a notice about the completion.
After the video has uploaded, it will begin the conversion process. When the conversion process is complete, it will be shown in the gallery. I'm looking forward to seeing what people upload, and I hope it won't require additional moderation. Please respect copyright and avoid obscene or adult content.
When .webm tools become mature enough, I'll be converting all of the videos to that and waiting for the players to catch up before dropping the Ogg Theora versions. Keep in mind that this is mostly an experiment for me, and I make no guarantees that videos uploaded will be stored or available for any length of time or with any quality of service.
comments | permalink
Rally Racer Very Initial Gameplay Video
(by PeEll)2010.05.04Keep in mind that the graphics were something I whipped up in about 1 minute over a year ago. They are supposed to represent pawns/units/players. The game loads, initial positions are loaded. The android client connects and downloads some commands, which the player orders and sends to the server. If multiple people connected, each of the units would move according to the commands, and collisions would be resolved.
Up next, I hope to add lazers, stats, barriers, traps, and other events that will turn this little demo into a real game. The thing I am most excited about is the fact that it is the first (to my knowledge) game that can leverage multiple android clients to achieve a board game-like atmosphere where all of the players can sit in a room together (as many players as we can fit reasonably on the board), playing together on a single screen, but being able to strategize and plot and plan privately on the android device.
comments | permalink
New Multiplayer Android Game: RallyRacer
(by PeEll)2010.05.03Today I would like to introduce RallyRacer, a new multiplayer game for android. RallyRacer allows of set of players to control robots on a game board. Each player organizes a series of commands in an attempt to move their robot across the board, and to be the first one to reach the goal. The problem for the players is that their control of their robot isn't absolute, so other players are going to be pushing them around, shooting them (and damaging their ability to control their robot), and being moved by traps throughout the game board.
Control Scheme
The game works by first loading the game board using a web browser. Then all of the players connect with their android phones. Players send commands as they finish organizing the instructions for their robot, and the results are seen live on the screen as each of the rounds of play resolve.
The game isn't quite ready for public release yet, but players will simply need to visit the game site on a computer. Ideally this computer would be connected to a tablet or television for public viewing. Then each of the players launch the RallyRacer android application and begin playing the game.
Current State
The game can be found on GitHub. Currently we have a server that leverages the new Webkit transitions to animate the gameplay. The server connects to a PHP backend using AJAX to obtain state and animations. There is an android client package [.apk] that will allow you to play the game on the Android. Additional features such as connecting to a non-mortalpowers.com server are in development for the client. There is also a very early web client that replicates some of the android client features. The major problem with the web client is that if you use the same browser to access it, it shares state with the server, which is problematic.
Right now the android client and server combination allow up to 3 players to connect, send commands, and move their robots around, colliding and pushing each other on the game board.
comments | permalink
Announcing: CSS Destyler
(by PeEll)2010.04.21When browsing web pages, one of the biggest strengths of the current state of HTML is the ability to style web pages using CSS. Sometimes web authors take things too far and end up making their content less useful, and harder to use and read. In order to respond to this, I have created a CSS Destyler that works by matching against a list of URLs and then removing the stylesheets from the page if it matches.
This project is a Chrome/Chromium extension, and should work for anyone. I built it in about two hours this evening (whilst learning the messaging protocol between content scripts, background pages, and option pages). It's not very polished, but it gets the job done.
Installing and using the CSS Destyler
You can either build it yourself from the CSS Destyler GitHub home, or download it from the Google Chrome extension library, where I'm hoping to upload it soon.
After you have installed the extension, click on the options page and add a couple of URLs. Any URL you visit that matches one of the strings you provided will then be Destyled for as long as you have the extension.
The future
In the future, I want to add a PageAction icon at the top so that people can add the current page they are on to the list of urls to destyle. I also want to clean up the current icon, and add the ability to delete items from the options page.
comments | permalink
Recent Gitosis Web Work
(by PeEll)2010.03.15Last night I performed a bit of work on Gitosis Web. These recent modifications can be found in the Gitosis Web GitHub project profile. The most recent work was related to the reliability. When I started, the system was not able to make changes to the config file, and the key file deletion wasn't working properly.
The changes pushed resolve both of these issues. The first bug was resolved by fixing the variable scoping in a function.
What's next?
Hopefully soon I will be able to add non-administrator user authentication. The idea is that users with usernames and passwords listed in the configuration file will be able to add new keys, associate existing keys with their user, and remove keys from their user. I'm not sure if I want to allow users to delete keys from the filesystem, but one good way I could do it would be to allow deletion of the filesystem, if the user is the only person using that key.
comments | permalink
New Project: Gitosis Web
(by PeEll)2010.02.21Gitosis is a git repository management tool. It has features that make multi-repository, multi-user environments much simpler. The way you access the configuration is through git. You make configuration changes in your working copy, and then push them to the repo. These changes are then processed by git hooks to create/manage the repositories and keys.
One of the downsides of gitosis is that all administrators have equal permissions to add/remove keys, and there is no mechanism for users to manage their own keys. In response to this I have begun building Gitosis Web, a PHP frontend to gitosis that adds some extra capabilities and ease of use.
Many people are comfortable with Gitosis, and that's great. This tool doesn't replace Gitosis or say there are any issues with Gitosis, but simply that some workflows could benefit from an additional frontend.
Check out Gitosis Web on github
Gitosis Web Readme
Gitosis Web
Gitosis Web is designed to is designed to be a layer on top of gitosis. Leveraging PHP and extra properties stored in the gitosis configuration to allow and administrator to control the entire file, and to allow individual users to manage their keys.
Install Instructions
To install, you will need working installations of git, gitosis, php, and mysql. This system has been tested under linux, but might work on windows too (Assuming you have git in your PATH). Once you have this, make sure your apache user (probably www-data) has a checked out copy of gitosis-admin, and that it has a key setup with the gitosis server you want to administrate. You should add a "name = x" row for your adiministrator to the [gitosis] section, and an "x = pass" section to specify the cleartext password.
Once you have it setup, you load the web interface, specify the path of the gitosis-admin working copy, and provide a username and password. From there you can make changes to the gitosis configuration, or add keys to already specified users. Each user should get a group looking like [group user-stephen].
Future Plans
At some point in the future, I hope to add the ability to manage users without tweaking the gitosis.conf file, or allow users to manage their own keys. Allowing project owners might be a cool idea, but might make the interface too complex.
comments | permalink
AutoPano Pro and Giga Font Problems
(by PeEll)2010.02.06I recently installed copies of AutoPano Pro and AutoPano Giga, which are some great panorama stitching programs that I would highly recommend, as they work on Linux, Mac, and Windows. After installing these programs, there was a horrible font problem that made all of the text in the application illegible.
The solution I believe was to install qt4-config, run qtconfig, change the font size up to 9, and then back down to the default of 8. When you launch the program again, all of the fonts and text should be fixed and legible. Have fun using this awesome program!
comments | permalink
Upcoming talk on Linux Browsers
(by PeEll)2010.02.05In March I'm going to be giving a talk on Browsers in Linux, with a lot of specific examples and demos from Ubuntu. Hopefully this talk will cover some of the basic things for beginners who need to know things like "What are the options", and "how to install new browsers in ubuntu", as well as advanced options detailing some of the more unique and advanced features of the available browsers, as well how to get started with development for browsers.
This talk will be at the Penguins Unbound Linux users group in Falcon Heights, Minnesota on the last Saturday of the month. I will post additional details and documents closer tot he date.
comments | permalink
General Improvements to mortalpowers.com
(by PeEll)2010.01.23This week has been an interesting one in regard to the codebase of mortalpowers.com. I have increasingly become interested in the site as a way of helping others with issues, with finding new and interesting information, and exposing my ideas and projects to the world. As a part of this I have increasingly been working on the design, function, and SEO of this site. There have been several components overhauled in an attempt to make things easier to use, and to allow them to be more easily indexable by search engines.
Page titles and Page Descriptions
Using the Google Webmaster tools, I have systematically been following all reports of duplicate page titles and duplicate page descriptions. I started with Page Titles, ensuring that each of the article and content pages included a title related to the article. I also went through some of the more generic navigation pages and added a title that would indicate where the user is. In theory this will not only help SEO, but also make the site easier to navigate and understand for users, especially those with different accessibility needs. Originally going through page titles, I though that perhaps the page descriptions were unimportant, but recently I finished the page titles and began writing content for the descriptions, as I realized these are used by search engines to sometimes show a summary of the page, when specific page content didn't match the user's search.
One of the difficulties I have run into with page descriptions is that I'm not sure what tense/person to write these in. I have tried to keep all of the page descriptions simple and declarative, and I'm sure there is a standard out there I'm supposed to follow, but that will have to come another day.
Page URLs
I had a lot of legacy URLs, for example the imaging system were all under the name "posse", which was the name of the group I originally had photos of. I have been refactoring and redesigning the site so that all of the urls make sense. This means that "posse" is now "photography", which definitely more accurately describes what that section of the site does. Another area I have improved is with the article system. It appears that a few characters have slipped in over the past year that weren't removed from the URL string version of the article, meaning that things like single quotes were included, when they have the potential to mess up spyders or browsers that don't process them well.
404 Errors
The final piece I have been working on is to add a few 404 errors to pages where the user is searching or browsing. The best example of this is the new tagging system. Before with the tagging system, if you entered a tag that didn't yet exist in the site, you would receive a blank page that didn't tell you anything about what happened. This type of user interface leaves the user wondering "what happened? Did I do something wrong?". In response to this, if you try to view a tag that doesn't exist yet, you will get a 404 error, as well as a friendly error message explaining what happened.
comments | permalink
HexSLayer Launch!
(by PeEll)2010.01.09The game I have been working on for a few months has now been packaged and lauched in its first incarnation! The instructions for download, files, etc, are all located on it's new site at hexslayer.com.
New Website
I decided to launch the game at its own URL, as a lot of the things that I put onto mortalpowers.com wouldn't relate to people interested in the game. I have developed my own blog software in the past, and used Wordpress and other options, and read a lot about some of the newer options. For this project, I decided to use Drupal, as my research has revealed it to be an extremely powerful (and albeit complex) system. I'm trying to stick with only the core modules, and major modules for the system (xmlsitemap, images, uploads) for maintainability purposes. If I adopt some unknown module it will be harder to stay up to date with security/other patches, and I might risk losing those modules if/when I upgrade to Drupal 7.
So far, drupal has been a very interesting and decent piece of software. For the type of CMS I was looking for, it is meeting all of my needs. My goal was to be able to create pages, posts, comments, and upload files and images, and to have a decent looking theme. Feel free to take a look at the HexSLayer site and let me know if I have met these goals.
The site is also on Github. One of my goals is to continue doing things in as open a manner as possible so that if someone else wants to contribute back to me, or learn from what I have done, they can.
Debian Packages
I have spent most of the evening re-learning Debian packaging (I use Ubuntu), and figuring out how to include the packaging component with the normal source code in a way that won't make it more difficult to compile/package for other environments. The solution I found was to create a packaging folder with scripts to generate packages/distributions for each of the platforms/environments I support. This seems to be working well, but I only have the Debian .deb file so far. The package includes nice features like menu and .desktop entries, which makes the game easier to launch and remember, rather than having a raw folder of .pyc files somewhere in your home directory.
comments | permalink
New Feature: Latest Commits
(by PeEll)2009.12.22You may notice a new feature to the right side of the home page. This feature, called "Latest commits" intends to share some of the development projects I'm working on, but haven't had a chance to do a writeup on.
The bulk of the work for this feature was done for me in the form of an RSS feed provided by Github. I have been exploring Github for about a month now, as well as experimenting with Git in general as my preferred version control system. In the past I used CVS and SVN, but so far I have been extremely pleased with the quality, speed, and ease-of-use of Git, as well as Github.
What you are seeing now
There are two main projects I'm working on at Github actively. The first is a hex-based game called HexSLayer, written in python. It is a small strategy/puzzle game with a naive AI, and some decently interesting gameplay. Currently it is playable, but the AI isn't very smart, and there is no way to add other human players locally or over the network, hopefully these features will come with time.
The second project you can currently find active commits for is called Youtube-HTML5-Chrome, among other names. The idea of this project is to provide a Google Chrome extension that swaps out the flash videos on youtube for a native HTML5 <video> element, which is faster, more reliable, and demands fewer system resources. You can find the actual extension at the HTML5 youtube page in the extension index.
comments | permalink
Media Servers Aren't Easy - plus Moovida Install Tips
(by PeEll)2009.12.05My long time quest for the perfect media server had me purchase a new motherboard, processor, and memory stick two days ago. Since then, I have been fighting repeatedly with the Linux install that will work with this computer, these hard disks, the TV I want to use, and the streamed media I want.
Install Woes
There were two major problems whenever I tried to run the installer. The first was that the hard disk wouldn't show up in the installer. It showed up in Nautilus and Dolphin just fine, but for some reason Ubiquity couldn't see it. After 6-7 hours of debugging, and several forum posts and responses, I found the answer. I had to run sudo apt-get remove dmraid before launching the installer. I'm not quite sure why this works, but it does.The second major woe was that Kubuntu's detection of my screen size was atrocious. I tried both VGA and HDMI, and neither way was I able to configure the screen to look like a normal computer. Ubuntu faired better, but I still had to do some manual configuration of the resolution. I still haven't been able to determine if it is a problem with the EDID reported by the TV, or something else.
Media Player
This was weeks ago, but I have tried 6 or 7 of my older computers, trying to repurpose them as a media player/server. It seems that the toughest part of decoding 720p video encoded in x264 and wrapped in a Matroska container is CPU speed. Each of the computers I had tried before couldn't play video off of a local disk using VLC or Dragon or Totem without dropping 70-90% of the frames.
Finally having a computer capable, with a kind-of working install, I wanted to try Moovida as the main program on the machine. Moovida is pretty high-level, running on top of everything I had set up. This meant that the video resolution issues I had been having with Kubuntu didn't go away. At this time I was pretty sick of these issues, so I thought "hey, I'll try Mythbuntu. Hopefully that will autodetect my TV properly.". When I booted the installer, it didn't autodetect the best settings, but it at least had them as an option. This combined with the remove dmraid fix allowed me to install Mythbuntu.
The next step was to boot into Mythbuntu and see it's capabilities. All of my media is local to my network and shared via Samba. I spent about 10-15 minutes looking for a Samba share browser in MythTV, and apparently one doesn't exist. The internet suggested I try adding an entry to fstab for the samba share. This fstab entry mounted just fine, but still wasn't listed or parsed anywhere in MythTV. Also, reading the menus revealed to me that the real purpose of having MythTV is to watch live or recorded television, which for now, I am completely uninterested in. There was also the minor problem of the untested audio, and the video resolution now being stuck back at 800x600.
Back to Moovida
Having again given up on a solution, I was back to Moovida. Moovida would be perfect in theory for my setup, because I want to navigate my network media, and the internet video/audio plugins would be nice too. I decided to try out Moovida again on my main desktop, before attempting another wipe/reinstall on the server.
When I launched Moovida, and selected Other Computers, nothing happened. Some plugin updates finished, so I restarted and tried again. This time I received the error no module named coherence.upnp.core. This error made no sense to me because I had the upnp plugin installed. After googling this issue for a minutes, I tried running Moovida at the command line, and found out that Moovida had a missing dependency on Coherence. I found Coherence in apt and installed it and tried again. Now I was missing dependencies for hildon and twisted, which was again weird, but this time because I already had python-twisted-bin, python-twisted-core, python-twisted-conch, python-twisted-web, and python-twisted-web2 installed. The solution this time was to sudo apt-get install python-twisted python-hildon.
Okay, now I started up the other computers browser, it would scan 400 media files (which ones?), and would report I had no media. Checking the command line again reported the upnp was working, but that the smb:// protocol wasn't found. At this point I gave up on an automated SMB browser and would attempt to install a fresh Linux Mint 8 Desktop, install Moovida, and manually setup the mount point for Samba.
comments | permalink
November Projects
(by PeEll)2009.10.31Happy Halloween everyone!
I have been giving a fair amount of thought to the projects on my plate and it appears I have been suffering from a lack of motivation. In order to get past this, my plan is to focus on two specific projects for the next month with a planned completion date of december 1.
thr first project is a game called HexSlayer, a game inspired by the game "Slay". The second is an adaption of the board game robo rally into a multiplayer networked version that relies on each player using a G1 to input and plan moves. Hopefully this focus will allow me to finish these projects, and give me the momentum to get into some new ones.
comments | permalink
HTML5 Video Gallery - Part 1
(by PeEll)2009.07.09After deciding to build a video sharing site, the first step was to write up some goals and requirements for the first version. This entire project is kind of an experiment so I am open to what may come. It may become popular and I will have to shut it down due to bandwidth costs, but I think this would be a good problem to have.
Version/Milestone 1 Requirements
- Videos between 0MB-500MB should be accepted.
- Videos should automatically be converted to .ogv files using Theora and Vorbis for codecs.
- I want to downgrade videos if they have too high of resolution/bitrate/etc, but I don't want to save any extra data for low-res videos (no upconversion).
- Anyone should be able to upload video, no users required.
- I need to be able to delete videos quickly in case of abuse or DMCA requests.
- No pornography allowed, due to legal restrictions.
- Gallery of videos
- Uploads should be run in the background, not requiring flash/java.
Version/Milestone 2
- Custom branding on player
- Allow users to annotate their videos like on Youtube
- Allow users to pause video and press a "create thumbnail" button
Approach
The first step of my approach is to start with the first step of the user experience, the upload. I have worked with Flash and Java uploaders in the past. My first thought was that I didn't want to use a flash uploader, because of the proprietary technology required, as well as the additional browser features I don't want to have to require. My second thought was that this relegated me to using a Java Applet, but after attempting to download and try out a couple open source versions, I realized that Java doesn't currently work in my browser. I gave Java the benefit of the doubt and attempted to install a couple plugin packages, and none of them did the trick. Due to my belief in dogfood this meant that Java was out, because if I can't use the system, then others won't be able to use the system.
This left me in new territory. In my research into the flash and java options, I discovered an option I hadn't heard of before, AJAX. I've used AJAX extensively in the past, but never for file uploads. I looked into a few, and they looked like masked Flash approaches, but then I stumbled upon a couple examples that used an IFRAME coupled with some AJAX to accomplish the goal. I tried a couple of the demos and it looked like the scripts would be easy to adopt / create, and that the functionality was where I want it.
Next time I will share my experiences implementing the upload/encoding functionality.
comments | permalink