Blogs About Technology, GTD and Life
30 Jan
At Redpoint Technologies, we’ve been evaluating many of the services offered by leading cloud vendors in order to better understand where various cloud offerings are most appropriate. Like any technology, it is important to understand each offering’s strengths and weaknesses.
Today I executed some crude performance tests against the Rack Space Mosso Cloud Files offering. This is very similar to the Amazon S3 storage offering. It allows files to be uploaded to the Mosso cloud server where they can be later retrieved. The service offers no minimum or maximum in overall storage, but does limit individual files to 5GBs or smaller, and utilizes utility-style pricing.
Cloud Files optionally allows you to store your content on a content delivery network (CDN). A CDN is an infrastructure of servers located in different geographic locations that work together to rapidly deliver web content to users based on their geographic location. As a result, a CDN can dramatically increase the speed with which content is delivered/retrieved.
Major Considerations
Depending on your needs for uptime, Mosso offers what I’d consider the minimum availability with a 99.9% uptime guarantee for Cloud Files. This means the service may be down about 10 minutes per week or roughly 40.5 minutes per month. For many applications, that is acceptable, but for mission critical situations, this may not be enough.
The following table summarizes many of the considerations and the description for how these considerations are addressed by Mosso.
| Consideration | Description |
| Contracts and Minimums | No contracts, no minimums. |
| Performance | See performance notes below. |
| Cost | Minimal: $.15 per GB of storage, $.22 per GB of bandwidth out, $.01 for requests (via control panel). |
| Security | All traffic between your application and the Cloud Files server uses SSL to establish a secure, encrypted channel. This ensures that any data (usernames, passwords, and content) cannot be intercepted and read by a third party. |
| Availability | Offers a 99.9% uptime guarantee. That’s about 10 minutes of downtime per week. |
| Backup/Redundancy | Data is replicated to three locations. |
| Accessibility | Access files via Mosso browser-based control panel or via programmatic API. |
| Language Support | Supports PHP, Phython, Java and .NET via their API. See the developer API documentation |
Performance
For an upcoming distributed, grid-based project, I’m interested in the speed with which I can upload gigabytes of data to a temporary storage location.
The performance of Mosso was decent when using their API, but dreadful when uploading via their web-based interface (but to be fair, the web interface is more for account management and less about use in a production system). The overhead of SSL was surprisingly minimal (as compared to raw FTP - see below as this was not an exact comparison).
I used a 24.9 MB bitmap file as my test file to measure performance for uploading files to Mosso (additional tests around downloading would be worth while testing as well). I tested uploading the test file via the Mosso web interface, using the Mosso API from a .NET application (see the c# console application code below) and to this blog site via FTP to have a non SSL benchmark.
I ran each test several times and throughout the day from my cable modem (which scores between 712 to 2550 Kbps in a browser-based connection speed tests). The results from each run were pretty consistent. On average, it took about 6.25 minutes to upload the 24.9 MB test file to Mosso via the Mosso web interface (control panel), about 3.5 minutes to upload the 24.9 MB test file to Mosso via the Mosso API using the below application and about 3.25 minutes uploading to this (shared .NET hosting) blog site using Filezilla.
The results were satisfying in that my raw FTP upload (to a non-Mosso server) were just a bit faster than the Mosso upload that uses SSL. In my brief testing the service was reliable and I like that the Mosso session could be cached indefinitely in a custom application (unlike the web interface that timed out my session after about 20 to 30 minutes of inactivity).
.NET Test Application
You can use the code below to create a C# console application that will upload a file to Mosso’s Cloud Files service. (Please note that you will need to purchase an account at Mosso prior to being able to run this code.) Prior to building/running the application, you need to add a reference to the com.mosso.cloudfiles .NET assembly that is included in the lib directory of the free download that includes the Mosso .NET sample code. And don’t forget to provide meaningful values for the string values in lines 16, 18, 20 and 22.
Although it would be easy to add an upload timer to the code below, I used a physical stopwatch to capture the time for my upload tests.
1: using System;
2: using System.Collections.Generic;
3: using System.Linq;
4: using System.Text;
5: using com.mosso.cloudfiles.services;
6: using com.mosso.cloudfiles.domain;
7:
8: namespace MossoPerfTest
9: {
10: class Program
11: {
12: static void Main(string[] args)
13: {
14: Connection connection;
15: // get your user name from mosso at sign-up
16: string username = "your-user-name-here";
17: // get this from mosso console once you have an account
18: string api_access_key = "your-key-here";
19: // containers are top-level "folders" for your data files
20: string container = "your-container-name-here";
21: // fully-qualified filename you want to upload
22: string fileName = @"C:\your-filename-here.txt";
23: try
24: {
25: connection = new Connection(
26: new UserCredentials(username, api_access_key));
27: connection.PutStorageItem(container, fileName);
28: }
29: catch
30: {
31: Console.WriteLine(
32: "Authentication failed or file upload failed");
33: }
34: }
35: }
36: }
Conclusion
In conclusion, you need to be strategic in thinking where you’d use a service like Cloud Files from RackSpace’s Mosso. We would use a service like Cloud Files for storing large files if we could queue them up and upload them asynchronously from our system. Or, perform a synchronous upload if the file was small enough.
From the Mosso’s marketing material, they state that Cloud Files is good for:
But that it is not so good for:
23 Jan
Some of you are blessed with the ability to drink coffee or tea at temperatures that seem to be approaching the temperature of lava. Unfortunately, I’m always trying to find ice or cold water to cool down my drink whether I just brewed it at home or bought coffee from a cafe.
So it is not surprising that a Smart Coaster Popular Science Build It project by Dave Prochnow caught my eye. This is a pretty simple circuit that uses a thermistor to measure the temperature of your hot drink. You calibrate your coaster to illuminate an LED while the temperature of the drink is too hot and to turn off the LED once the temperature reaches the point where it is cool enough to drink. I like the author’s use of a shoe polish container, but all I could get my hands on was an ever-so-versitile Altoids container.
Like the author explains, once you have your circuit built and tested, you need to calibrate your potentiometer to turn off your LED just when the temperature of your drink is ready to drink. I taped my thermistor to the underside of the top of the metal enclosure, but still found it a bit tricky to get the potentiometer set properly. When you are calibrating, you need to make sure you use the same type of coffee cup or else you will get very inconsistent results.
My finished product is below. As you can see, the LED sticks out the front and I also have my potentiometer sticking out the side of the enclosure. With the Altoids box, it is easy to have wires hang outside, but be careful as repeated open and closing quickly wears away the insulation on the wires!
I initially prototyped the circuit on a breadboard, like I do for any new circuit I’m building or experimenting with, and used a plastic (note metal would not be good here given that it would conduct and cause your battery to get extremely hot!) chip clip to hold the positive and negative leads onto each side of the flat, disc-shaped battery. In the enclosure I built a home made 3.7V battery holder by putting the battery in the top of an old 35mm camera film case and used hard plastic to cover the bottom. I cut a small hole in the top and bottom to route a wire with a long, uninsulated lead (that was swirled into a spring-like shape) into each side of the battery enclosure. Finally, I taped the home made battery enclosure with electrical tape to keep the positive and negative wires snug against each side of the battery. It looks pretty ugly, but works great.
Below is a picture of the inside of the enclosure where you will see the battery holder on right side, the tangled mess of wires and the thermistor taped with electrical tape to the bottom of the lid:
And I used the dead bug method to solder the LM324N Integrated Circuit (IC) into the circuit. This is a technique that is popular in robotics where space is limited. This technique is nothing more than turning the IC upside down, with the legs sticking up (so it looks like a dead bug on its back with its legs up in the air) and soldering your connections directly to the legs of the integrated circuit chip. If I had an IC socket handy I would have used the dead bug technique to solder directly to the empty socket and would have avoided the risk of damaging the circuit by soldering it directly. Fortunately, I did not damage the IC by soldering directly to it. By clipping the unused legs of the IC, it made it a bit easier to solder directly to the IC legs.
Finally, I’d highly recommend that you use a stripboard or create a printed circuit board for this circuit. The article does not advocate the use of a board and in the excitement to build the smart coaster I did not use a board…but shortly into the project remembered how frustrating it can be to solder everything together and then struggle to get the circuit into its enclosure without breaking any solder joint. With a strip or circuit board the circuit would easily sit in the enclosure with the LED, thermistor and potentiometer connected via lead wires.
In retrospect, I also recommend that you use very light gauge wire for any wires that will require flexibility and that you intend to move around. Otherwise, you end up breaking solder joints as you move the components around.
A few items worth noting if you are building this project:

9 Jan
For Christmas my wife and kids bought me an iHome iPhone alarm clock. My first impression was good, I thought it would be nice to have a home for my phone at night and be able to listen to music in our bedroom.
But, what I didn’t realize was that it would be incredibly convenient to capture todos/thoughts while lying in bed prior to falling asleep. I’m not sure if this is common, but all sorts of things fly though my head when I’m relaxing at the end of the day. I think of things I didn’t get completed (not too many!), but also have many creative thoughts.
Prior to my cool new iHome alarm clock, I kept a notepad and pen in my nightstand to capture thoughts, but it requires the light to be turned on to see what I was writing. With the backlit iPhone right by the bed, I can capture notes in the dark and, best of all, my GTD next actions are already in my official GTD system and don’t require any further thought.
Aside from GTD, it would be a shame if I didn’t mention how great this iHome alarm clock really is. Like the iPhone’s visual voicemail, which is easy to maneuver and use, the iHome has a visual display for setting the alarm…and the alarm time is always visible on the display, so I always know whether the alarm is set and if the alarm time is correct.
Regards,
Matt