Sunday, December 20, 2009

Digital Magazines

Could this be the future of magazines?

Mag+ from Bonnier on Vimeo.

Thursday, October 22, 2009

The Future of Technology

My thoughts on where technology is heading:

  • More real-time information: I believe one interesting aspect of Twitter is that it has a real-time flow of information. We are a society filled with people that don’t trust the media and are discovering that we ourselves are the media. I think most people have a desire to share their brilliance and their thoughts with others. We all want a voice in an increasingly noisy world. The voices of all these people combine with professional sources are generating a large amount of data. This information is then subscribed to and viewed by people in real-time. We are coming to expect that the information that we care about flow to us in real-time. Magazines, newspapers, and even TV aren’t real-time enough. Nobody wants to wait for next month’s publication, when they can just Google for it. People don’t even want to wait for the “6 o’clock news”. There are currently efforts underway to aggregate and analyze the flow of information not just from the end user but also from the source. One day we may be able to predict or contain outbreaks of diseases and respond to disasters by simply analyzing the flow of information. Decisions may be based on what a population is doing at a given moment in time. Information is much faster and in such greater quantity that the questions we must ask ourselves are: “How will we use this real-time information?”, “How will we control this real-time information?” and “How will we analyze and make sense of it all?”
  • More consolidation: Over the years it seems that we are moving toward a more consolidated technology world. I don’t think people want to experiment with different technologies like they did in the past. Apple’s popularity can be attributed to their professional and polish look along with the idea of getting people hooked on their suite of technologies. Of course I am speaking about people that are busy professionals that are more concerned with getting things done as opposed to spending time and money to find the best way to get things done. Ultimately the best way is always changing. Furthermore, the gap isn’t very big between the best way and the good enough way. I think the abandonment of email systems in favor of sites like Facebook is about going into one site to manage a large portion of your life. More features and open platforms that allow users to have a single consistent experience is going to be key for many companies.
  • More accessibility: We are getting more and more connected devices. We have our cell phones, our TV, our computers, and even our cars. With all of these devices we want ways to access and manage our data. We should be able to view our calendars from home, from work, or from the road. With 3G, 4G, Edge and city wide WIFI we have created the 24 x 7 connected world. With this new world we want to access our data at any time and by any device. We want to view our calendars (and tasks) before we get into the office. All of this is going to require better ways to synchronize and/or access our information at all times and from all places.
  • Platform: To large degree when you ask the older generation what they think about when they hear “platform”, you will hear things like Windows, Apple, Linux, etc. However, when you ask the younger generation what they think about when they hear “platform” they may say things like Firefox, Google Chrome and Apple (Safari). The younger generation is so connected that they view the browser as the OS. I believe that this is something that will impact our world in ways that we have yet to conceive. We will use the cloud as our storage and our browsers as our client. Google is planning on the web as being the back end and the browser as being the client. I believe that they are going to take this to new heights with the Google OS, but this is only speculation because Google hasn’t released much information on what exactly is the Google OS. However, perhaps the future may prove to swing things in the opposite direction. There are attempts to get out of the browser. With technologies like Silverlight and Adobe Flex perhaps the browser will change to something else. There have also been advancements in Virtual Machines and Virtual Environments. I could see OS’s as just hosting Virtual Sandboxes that can run a wide variety of applications that we access from the web. At this point it is unclear what the future platform will be, but it is clear that it is changing to accommodate web applications.

Saturday, August 15, 2009

Willard Wigan's Microscopic Masterpieces

Willard Wigan's amazing creations. Click here to hear his story.


Thursday, June 18, 2009

Learning Assembly

A colleague of mine demonstrated a vulnerability in Adobe Acrobat Reader that exploits the way images are loaded. It is possible to send someone a PDF that once opened could download a file and run it. The details of the vulnerability aren’t important, but the process of understand how a hacker might discover such a vulnerability is quite interesting. One would have to have a good understanding of how computers work as well as how to disassemble and understand an EXE. Being a software developer I wanted to brush up on assembly. My colleague emailed me the following set of videos:

Assembly Primer for Hackers
Part 1 - System Organization
Part 2 - Virtual Memory Organization
Part 3 - GDB Usage Primer
Part 4 - Hello World
Part 5 - Data Types
Part 6 - Moving Data
Part 7 - Working with Strings
Part 8 - Unconditional Branching
Part 9 - Conditional Branching
Part 10 - Functions
Part 11 - Functions Stack

Monday, March 02, 2009

Monday, February 09, 2009

.Net Enum.Parse()

Let’s say you have the following enumerated type:

enum Rainbow
{
    Red,
    Orange,
    Yellow,
    YELLOW,
    Green,
    Blue,
    Indigo = 8,
    Violet = 8
}

You can then use Enum.Parse() method to convert a string to the enumerated value. This is demonstrated by doing the following:

Rainbow rainbowValue = (Rainbow)Enum.Parse(typeof(Rainbow), myString, true);

Where myString is a string variable that holds the string you want to convert.

When you perform Enum.Parse() you should be aware of a few things that may not be obvious.

1) String numbers can be used. For example “1” will convert to Rainbow.Orange.

2) A string number that is out of range doesn’t throw an exception. You must use Enum.IsDefined() to make sure that the number is in range. For example if you assign “100” to mystring you won’t see an exception thrown.

3) The last argument of the Enum.Parse() method allows you to ignore the case. If you do ignore the case the first value found in the enum will be used. If you plan on ignoring case then you should make sure that the values of the enum are unique ignoring case. The compiler will fail if you have enum Rainbow { Red, Red}, but will not fail if you have enum Rainbow { Red, RED}.

4) You can assign the same number to two different enum values. Surprisingly this doesn’t throw a compiler warning or error. Equally surprisingly the last number is chosen. For example if you assign “8” or “Indigo” to mystring, the enum variable will be set to Rainbow.Violet.

5) A comma separated string can work, but it is probably not what you want unless you are using the FlagsAttribute with the enum type and assigning number values in a way that can be masked. For example if you assign “Orange, Green” to mystring, the enum variable will be set to Rainbow.Blue. This is because you are actually doing Rainbow.Orange | Rainbow.Green which is actual (1 | 4) and in binary (0x0001 | 0x0100) with is 5 (0x0101).

Conclusion

If you are using Enum.Parse() to convert strings to enum variables you should keep these things in mind. Dispending on what you are doing these issues may not be a problem, or they may be hidden gotchas with unintended results.