Nates Stuff

Perspectives on Computing :: Leave a Comment
CSS3 Why & How

CSS3I was asked to fill in for Michael Palermo from Microsoft because he had a personal issue come up that made it so he couldn't attend the Fall 2011 Utah Code Camp. He sent me over his demo files and I added some to the end after coming up short on time after rehearsing it a bit. I mostly added the animation portion that begins after the CSS Media Query demo.

CSS3 is a really cool technology and can add quite a lot to your website.  As you can see in the example, the website enhanced with CSS3 is much nicer to look at and has some interactive features that while possible before were much more difficult to implement.

 

CSS3 Why & How Presentation Video

Download Full Quality Video (WMV) | Mobile Quality Video (WMV)

The demo files and slides can be downloaded here.

Get Going with HTML5

As a follow-on to my last presentation “Intro to HTML5” I have created a new presentation “Get Going with HTML5” where I dive deeper into some of the most used features of HTML5, mainly Canvas, Audio, and Video.  Below is the recorded presentation I gave at the Fall 2011 Utah Code Camp. The slides and example code can be downloaded here. It’s in two parts because I had to change my screen resolution half way through.

Part 1 - Slides

Part 2 - Example Code

Example code and slides can be downloaded here.

My First Experiences with a Computer

280px-TRS-80_Model_I_-_Rechnermuseum_CroppedI quite literally grew up in the start of the PC wave! In 1976 the Apple 1 was released and a few years later I was on the scene.  We never had an Apple 1, but we had a Personal Computer (PC) in our house from the beginning. The very first one I remember actually using was our old TRS-80. Boy could this puppy hum at an amazing speed of 1.77MHz with it’s Zilog Z80 processor! At first there were some games you could play, but when the computer got moved from the basement to the upstairs the floppy disks no longer worked. That meant that the only thing I could get to was Level II Basic.  I was very sad that I could no longer play games on the PC but I was quit amused by a trick that my brother Brandon showed me:

 

100 ? "Nate is Awesome!"

Which, if you remember your L2 basic is shorthand for: 100 PRINT “Nate is Awesome!”. I thought that was quite a neat little trick and when I learned how to make a loop so it would repeat as many times as I wanted I was entranced! I would print stuff 100, 1000, 10000 times, numbers I couldn't even begin to comprehend!  I don’t know exactly how old I was but I’m pretty sure that I was probably younger than 8 years old.  I figure that I might have even been as young as 5 years old. It didn’t take long before I had the computer asking for input and displaying output and all kinds of things.  The problem was that once you turn the computer off, your program is toast!

Not being able to save any of my hard work was very frustrating for me but it did challenge me to build it back better than it was before.  If I had to simply refactor an existing program it would have been harder.  For one the basic I was using was line numbered and if you didn’t save yourself enough room, you better be prepared to litter your code with GOSUB. When I re-wrote the program from scratch I could avoid problems I ran into in previous attempts. It by no means meant the frustration went away. I made several attempts (the best I could do as a pre-teen) to fix the floppy disk drives to no avail. The TRS-80 also had the amazing feature of being able to use a tape recorder to record and restore your programs.  This I must have tried hundreds of times and never had any success!

At first I was trying to use a standard cassette recorder rather than the special CTR-41 tape recorder with the feature of a remote jack that would let the computer automatically start and stop the cassette. Those tape recorders were about $40 and believing that I could actually save my programs I really, really wanted one! I believe I may have even asked for one for my birthday at some point. To understand how bad it was trying to save and retrieve programs this way, here is some text from WikiPedia:

The cassette tape interface was very slow and erratic; it was sensitive to audio volume changes, and the machine only gave the very crudest indication as to whether the correct volume was set, via a blinking character on screen when data was actually being loaded - to find the correct volume, one would sometimes have to attempt to load a program once adjusting volume until the machine picked up the data, then reset the machine, rewind the tape and attempt the load again. Users quickly learned to save a file three or more times in hopes that one copy would prove to be readable.

Saving my work started to become a big deal to me.  One time I spent many months working on a series of programs, games, and of course a Main Menu System to access it all! Unfortunately for me the TRS-80 produced huge amounts of electromagnetic interference! So much so that even with the computer operating in my bedroom in the upper floor of a 2-story home, the TV in the basement would be significantly affected and would show a fuzzy picture. My brother had a date and they wanted to watch a movie but he had to turn the computer off to get a better picture. I was SAD! Several months later I had finally gotten hold of a cassette recorder that had the magical remote port. It wasn’t a CTR-41, but I was sure that the existence this magical remote port that would make all of the difference.  Nope!  Like I said, do this day I never, ever, got more than a few characters to save and restore from tape.

386dxA few years later our dad invested in a 386 DX 8/16MHz with 8MiB or RAM, a math co-processor (upgraded later) and a 80MiB HDD! The new computer also featured a very nice EGA (16 color) monitor! This was quite a machine for it’s time and if I remember correctly cost around $3k. The Computer Room was established and the old, very inferior, TRS-80 went into the room along side it’s nicer, newer counterpart. I still used the TRS-80 for a year or two longer. I didn’t always get a turn on the new computer and Tetris appealed to everyone in the family!

When the time finally came to take the TRS-80 down for good for some reason I thought to pop it apart first.  I guess I figured that if I did any damage there would be no harm now. It was then that I saw the blown fuse in the expansion interface.  I put some tin-foil over the fuse and was bewildered to see that the floppy disk drives once again worked! All of those years and the problem was a blown fuse in the one part of the computer I thought was doing all of the work all along.

I did like the new computer though.  For one it could save my programs! :) It also had QBasic that didn’t require line numbers and I liked the color screen.  I think I must have decided pretty early on that I wanted to be a programmer.  When I was still pretty young (maybe 9 or 10) we took a trip to BYU to see the museum and stopped in the book store. They had tons of books on programming basic! I wanted to get two of them but my parents graciously agreed to buy me one. I believe the book was like $60 so I would be happy with one.  I read that thing inside out over and over again.

When my brother Preston got to high school he started learning Turbo Pascal. Now I don’t remember exactly how this came about but one time we both had written a drawing program.  Preston used Turbo Pascal and I used QBasic. It was almost like we were in competition with each other to see who could make the best drawing program.  They were nothing fancy – neither one of us knew how to enable mouse support so it was keyboard commands and arrow keys only – and we weren’t exactly writing the same features. Preston would have an unlimited undo buffer, I would have the ability to save as bitmaps, etc. so they were apples to oranges but it was a lot of fun. One day he added the ability to display cool text in neat fonts to his drawing program.  My battleship was sunk! There doesn’t seem to be any way to do that using QBasic. If you can’t beat them, join them; I switched to Turbo Pascal.

Me and Preston didn’t always get along so congenially. One time after a particular nasty computer crash that wiped out the entire hard drive, my brother decided that he would lock me out of the computer. Never mind I had nothing to do with the issue! I could usually break in anyway, and for the most part though (or at least upon reflection) we got along pretty well sharing the PC. Another quark of mine was to grab the Computer Shopper magazine and imagine myself with all of the awesome hardware! I wanted a new computer so bad that for my 15th birthday I actually got an Osborne II (not realizing how old they were at the time). It looked like the computers in the magazine so I figured it had to be close!

My parents and brothers were very supportive of my self-guided computer exploration. Some examples of note are getting a copy of Turbo Pascal, more programming books, more computer hardware, college courses in programming and electronics (when I was 14), more computer software, a 2400 Bps modem, a $400 phone bill acquired by calling BBS’s in California with said modem (what? all of the BBS’s in the state were busy!), and a copy of OS/2 I got for Christmas. We were also among the first to get the Internet, first with Prodigy and then with AOL.  We had our AOL account for a very, very long time! I admit that I did rather like AOL – the Internet never seemed as friendly again.

TI-86All through Jr High and High School I would make computer programs to do my homework for me. I had an instant love for the TI series calculators! My first TI calculator was the TI-80 (in blue) which was faster than my old TRS-80 and had the same style CPU! It was also programmable with a form of Basic and I wrote many programs; none of which I could really share because of the lack of an external port. I sold it to my neighbor and got a TI-86 as an upgrade. I wrote a LOT of programs for the TI-86 and when I checked a few years ago the ones I wrote in High School are still in Roy High School. Blackjack, Scorched Earth, TextEdit all passed down from student to student. These calculators have still not been decommissioned in spite of having a 20+ year run! Although I only owned a TI-86 in high school, I borrowed others calculators to port programs to them.  My high school masterpiece was a program called BOS and a text editor, both written in Basic. BOS was a shell/menu system which was useful because running programs on the TI-86 was not very easy otherwise. I later learned how to write assembly for the Z-80 processor and spent a significant amount of time developing a preemptive multitasking operating system with full GUI/graphics. I even used an assembler that was written to run on the TI-86. I got to some level of completion but never really released anything to anyone but a couple of friends. I now own three TI-86, a TI-82 (my wife’s), and a TI-89 (loaned to someone and I don’t know where it is right now).

It will be very interesting to see how my kids react to the technology age.  The computers I played with when I was young were very different! In a way I had a great learning curve where about the time I outgrew a PC another one had been invented. Now days my kids have a much better computer but the understanding is probably going to be much more superficial at first. Although, if I had all of the resources of the Internet when I was a kid I could have gotten so many more answers and progressed so much further! They also have the added benefit of my knowledge.  My Dad could work computers but never understood them like I do. It will be very interesting if my kids post a blog page 25 years from now and lament that they had to deal with only a 1GHz processor on their tablet (more than 1000x the speed of the TRS-80) or that their battery life was only 9 hours, etc. I’ll pull out this blog post and send it to them.

Customer Experience Improvement Program

In my blog series of “Too Funny to Not Post” comes this latest edition.  I opened up a certain beta Microsoft product.  It then prompted me with this dialog box:

Customer Experience Improvement Program - Pre

When working with a Beta product I usually opt into such programs (not so with released products). I suppose there was little point in beta testing a product if I do not provide any feedback. After all, if I have problems on my computer I want those problems fixed for a release version! So I clicked on the checkbox to opt in and pressed “OK” and was greeted with this message:

Customer Experience Improvement Program

Dammit!

Well, I guess perhaps they should have tested that first! On the pro side the actual program worked just fine after this window blew up.

Posted: Aug 08 2011, 02:56 PM by Nathan Zaugg | with no comments
Filed under:
App of the Week - App Inventor for Android

appinventor_logoI ran into this really neat app this week called App Inventor for Android.  It allows for rapid prototyping of Android applications.  I have used DroidDraw in the past and have found it to be very helpful in designing Android UI.  It won’t do anything when I’m done but I can at least save me some of the guesswork involved in UI layout.  App Inventor goes one step further and will allow you to add basic functionality to the application.

App Inventor probably won’t allow you to create anything but the most simple applications but it is a great addition to the Android development experience.  While I still consider WP7 development experience to be tops; Android is sure nipping at it’s heals. For IOS, let’s just say that unless you’re using MonoTouch the development experience is *much* less!

Advice to High-School Age Engineers

I have a buddy who was going to be giving some presentations to high-school kids. Specifically he asked:

  • What would you be looking for if they approached you about work?
  • Perhaps you are in that age group right now. What do you want to know?
  • Perhaps you are just a few years into the workforce. What do you wish someone had told you but never did?
  • Perhaps you have children, relatives or friends in or soon to be in that age group. What are you worried they don't know about?
  • I'm sure there are other perspectives and questions I'm not even thinking about. I'd like to hear what you have to say about it.

Here was my list:

  • Don't be afraid to try! Don't let the perception that something is too difficult stop you from experimenting.
  • Curiosity may have killed the cat, but an un-inquisitive person is mostly useless.
  • Stolen from Einstein: You don't really understand something until you can explain it to your grandmother.
  • It's never enough to be smart, you also have to work well with others.
  • Before you can be really smart, you must learn how to learn.
  • There will always be someone smarter than you are -- Become their buddy! Get to know great minds and learn all you can. Some knowledge can only be expressed this way.
  • Communication, Communication, Communication! Projects rarely fail because of technical reasons and the difference between good programmers and outstanding programmers is how well they communicate.
  • A good work ethic never goes unnoticed.
  • Know when to ask for help and when to figure something out for yourself.

I am so envious of the kids growing up now days. I had what I considered a very rich environment; we had computers in my house since I was very young, we were always given any books and programs we wanted, and there was never a shortage of encouragement. These days the technology is so much better and anyone with a real interest has unlimited resources in the form of the Internet, and technology is spectacularly accessible! Never in the history of the world has there been this kind of learning environment. If only we knew better ways to teach the kids in school – and perhaps had better things to teach them, but at least anyone with a real thirst for knowledge will have no limits.

Code Duel to learn more about Pex and Code Contracts

Here is a fun little C# Duel:
http://pexforfun.com/Default.aspx (click Random Puzzle)

I solved my first one in just 1 try (compilations) so it doesn’t take long to try.

What is Pex and how does it work?

http://pexforfun.com/Documentation.aspx#HowDoesPexWork

Basically Pex is a tool to help you write Unit Tests by actually calculating all of the permutations of a function and assisting you in creating unit tests that should deterministically “prove” that function. When used in conjunction with another tool called Code Contracts (a little bit down on the page) more information can be expressed about the intent of the function which Pex can then use to help prove by unit tests.  The neat thing about Code Contracts is that it’s part documentation, part unit test in its self.

If you want to see it in action, you can try it here:
http://pexforfun.com/default.aspx?language=CSharp&sample=_Template

This is a branch of computer science called Static Analysis & Verification and is the future of computing in our field.

Effective User Interfaces

Add Block Logo

I am a continual student of good user interfaces (UI). When asked what my weakness is as an Interview question I will almost always admit that I am severely UI impaired! If the UI is designed professionally then I can usually implement it pretty well, but if I am left to my own devices to create a UI the resulting creation is U-G-L-Y!!!!!  More than that it is often not as practical or as functional as a good UI design would be.

I can however appreciate good UI design.  I can see that this works better than that or this is a good intuitive UI.  Although I am a champion of the Ribbon Interface that so many of you despise (mostly because it took you years to memorize the crappy menu’s and toolbars you had before it) so that may put my credibility in the area in question with some of you anti-ribbon fan-boys!

Today I ran across a beautiful example of a really good UI design.  Here it is:

Effective UI - 1

This picture popped up shortly after I enabled AdBlock. I am a big cheapskate – especially when it comes to software! That may be oxymoronically considering I am a programmer, but usually the way I respond when I see a “nag” screen or the like is that I want to get it out of my face ASAP and I’m sometimes even a little annoyed that it’s there. For me a good example of donationware that I like is Paint.NET; whereas donationware that I feel bugs me a little too often would be Win RAR.  Both are of tremendous use for me (Paint.NET more than WinRAR), but my warm fuzzy feelings are just more with Paint.NET because I don’t feel like the pester me. Of course there is the adage out of sight, out of mind and when designing donationware you will have to find new and interesting ways of accomplishing inception.  Even with Paint.NET (after I’ve installed it literally dozens of times on dozens of different computers) I usually don’t dwell too much on the idea of donating.  I’ve considered it for Paint.NET where I haven’t as much with other donationware, but never made the leap.  I read every single word on the page, and seriously considered donation and that’s why this UI is so effective! 

This UI is so cleverly done that I wanted to read every little bit of it.  The first think I saw was the picture.  This makes the programmer a real person and that is big!  The second is “This may be the last ad you ever see” is a great headline that makes you curious.  The use of the slider-bar with red/green gradient is brilliant!  To add a bit of fun the “thank you” message changes when you move the slider. 

Effective UI - 2

To Recap, a good UI will have the elements of:

  • Hook: You will want to learn more
  • Intuitive: You know what it is going to do before it does it and you’re comfortable that it’s not doing something unintended
  • Attractive: Gone are the days of flat-style buttons and plain looking UI. Even the most mundane of user interfaces is expected to look like a champ now days.
  • Simple & Clean: There should not be too many knobs and levers on one screen
  • Fun: Although not required, defiantly helps!
Goodbye .NET Reflector, Hello ILSpy!

ILSpyLogoI am one of those that was quite upset about the announcement from RedGate that .NET Reflector would no longer be free.  Particularly since it was given to them for free and they have only mucked things up from the original.  It was also my understanding that one of the conditions under which Lutz Roeder gave them the code was that the tool remain free.  I guess I can remove myself from the “RedGate” fan list.

I was so upset about the announcement that I not only wrote RedGate to tell them how much I disapproved of the move but I also started a new project to replace reflector.  I didn’t have too much time to invest in it and never uploaded anything to CodePlex before they deleted my space.  I may not use .NET Reflector every day but I use it enough to miss it.  Probably enough to pay for it, but I won’t be supporting RedGate! Of course free is better.  I could write a whole blog post about why I would pay for tools and components but how time and time again these tools cause me stress!

Fortunately I wasn’t the only one who had the idea to build a free reflector and someone with a bit more time than myself has a working product that does 90% of what I need a reflector to do for me.  ILSpy is a great little tool that looks almost indistinguishable from .NET Reflector. 

ILSpy Screen Shot

As you can see it reflects .NET code giving you an excellent decompilation of the source files.  There are a few features that I miss from this app.  Mainly all of the plug-ins that were available.  The plug-in that I miss the most was Reflexil, one that was built using Cecil (from the Mono framework) that would allow you to change the IL of an assembly and save it back.  The application is open source so perhaps I’ll make me a version that does that.  Perhaps someone on the ILSpy project wants this feature as well?  If I do make the plug-in I will certainly make it public!

Microsoft Windows Phone 7 to be #2 by 2015 Says Gartner

HD7I really like my HTC HD7 phone.  I bought it the day they came out (although I had to visit two or three different places before I could get it).  I sure wish I got the OLED display in the deal but overall I’m pretty happy with the phone – although I haven’t had the time to develop the apps I wanted to for it.  My only other qualm might be that it’s not very hacker-friendly and I dig being able to modify my hardware in ways to make it more useful to me. 

Microsoft has been very aggressive in marketing their new platform and so far it’s been a mild success. Now that the copy & paste update has come out, there has been less mud for critics to sling. Well, this and perhaps the Nokia deal has made the seers at Gartner take notice.  They predict that Android will become #1 with a commanding 48% market share in 2015, but also state that in that year WP7 will eclipse IOS to become the new #2 with nearly 20%. Whether you trust analysis from Gartner is another blog post but there are a lot of things going for Microsoft’s platform.

As an aside I currently own an HTC HD7 sporting WP7, a Xoom tablet featuring Android Honeycomb, and an iPhone 3G with IOS 3.x (jail broken).  I go for what I think is best. Actually, I am selling my iPhone on eBay and I’ve never owned an Android phone but I consider myself somewhat technology impartial. I choose WP7 in some part because of the development experience (it’s fantastic) but haven’t done too much with that.  I’m also enjoying my Xoom tablet a lot more than I expected – the experience is very smooth and it has made pulling out my 17lbs Alianware Laptop less necessary for a lot of things.  While I may not be a fan of Apple or Google I can sure respect a well made product.

I guess only time will tell, but consider that in 2010 roughly 75% of the phone market were not smart phones and there is still a lot of virgin market left to capture.  With WP7 available on all major carriers and with a wide verity of hardware partners, they may have duplicated the Android recipe for success.

HTML 5 Presentation

I just got back from Denver and the Rocky Mountain Tech Trifecta v3.  I will post more about the trip soon, but for now you can download my slides and examples in the links below.

Family, Community, then the Government

Even though this is more than just my tech blog I don't often post content of a political nature, but my train of thought has been so surprisingly close to this quote that I could hardly believe it when I saw it. 

I just read this in a comment on an article about parts of the health care law being found unconstitutional. I think it's awesome and sums up what I try to tell people when they ask why I am a republican:

"You cannot legislate the poor into freedom by legislating the wealthy out of freedom. What one person receives without working for, another person must work for without receiving. The government cannot give to anybody anything that the government does not first take from somebody else. When half of the people get the idea that they do not have to work because the other half is going to take care of them, and when the other half gets the idea that it does no good to work because somebody else is going to get what they work for, that my dear friend, is about the end of any nation. You cannot multiply wealth by dividing it."

-- Dr. Adrian Rogers 

I believe myself to be a very middle of the road person when it comes to welfare policy.  I believe that some welfare is absolutely necessary. After all, if you see government as a community organization that has interests in making investments for the future benefit of the community, then keeping people from falling through to rock bottom is in our best interest.  At some point in our lives almost anyone could be found in a free-fall situation and keeping us from falling all of the way to the bottom before we can begin to rebound would be a very smart investment. The problem is that the governing philosophy does not reflect the proper values. Let me explain.

Every person needs a safety net.  A safety net is defined as people and resources that can be used to come to your rescue.  The first and built-in safety net is our family.  If you needed to move back home because of unemployment, for example, it is very likely that your parents are willing to share their resources and assets to help you out in this situation.  What if you don't have any family or your family is in the same situation?  The community should, in my opinion, be your next safety barrier.  Depending on where you live you may know your neighbors really well or you may not know them at all.  I think we should know our neighbors very well and should be the kind of community where we can help neighbors out when they go through a tough time.  After all, having a neighbor check in on you when your sick is the next best thing to a family member. We should also seek to become this kind of neighbor. 

Lastly, if a person has no family safety net, and no community safety net, then there should be a government safety net.  The trick is to not think of the government as an independently wealthy entity that owes goods and services to you; but rather the collective resources of your community pooled together for things that are essential and needful. It should also be your last line of support. I think it can be easy to forget that what you demand of your government you are really demanding of your neighbors. With this philosophy in mind perhaps the welfare system is not quite in line with what really is best for all.  

For example, if someone relies on the welfare to pay unemployment benefits then perhaps this philosophy could help.  First, the benefits that are paid should probably be closer to what that person was making when they were working.  For the short term that will save the person from huge financial problems and help them transition easily onto a new job. Once at the new job they can begin paying back the system they relied on using fair no-gain payment arrangements that could be adjusted to be repaid easily over a long period of time. This would also remedy the stigma of employing the unemployed -- that somehow they have baggage that the management prefers to not get involved in.

Obviously this strategy only works well for those who are unemployed short-term.  For long term unemployed we would probably need to take a much different strategy.  First we would need to assess if the person has aptitude for something better than what they were doing.  If they are long term unemployed then it's quite likely that there will not be any new jobs that want to hire that person with their existing qualifications.  Offer them a grant or loan to attend training to receive qualifications that should not only help them find a job but help them find a better job. At the same time get them working -- at least part time.  This part could be tricky but important.  Finding work for someone who can't find work may seem like an impossible idea, but consider that there are just some jobs that almost anyone can do, even if they have to work for the government filing papers. There is always this kind of work that needs to be done.  

Perhaps you were a programmer and can't find work programming.  No problem! Take some tech support calls for this company while you go to school to upgrade your Fortran 77 skills at the local community college.  No, you probably can't make a living doing the tech support calls, but if your unemployment benefits helped out a little during this transitional phase then you would be fine! When you're done you would be in a much better place to be able to contribute back to the community. 

In some cases a person will need to draw much more from the support network then they could possibly repay.  In these cases they should not be subject to crushing financial obligations -- although some should be repaid when possible.  Just like anything else, not every investment will yield a return and steps will have to be taken to minimize the number of losses but I think that thoughtful implementation of a program along these lines could go a long way.  It would allow people to reach their full potential and not reward those who are content to live off of hand-outs.

Then, once we have figured out that the government is in the business of investing in it's people and people realize that the government is really a group of their neighbors / community, then I think we can figure out better solutions to a whole host of problems.  The term "entitlement programs" would evaporate and be replaced with "community support programs" or "perpetual support programs" being perpetual in the sense that once you have been a benefactor you can replenish the resources you used so another can also benefit.

Imagine a world where our payroll taxes were a hundredth of what they are now. You may be paying more taxes from time to time, but overall there would be very few instances of people using the government like they would their rich uncle. If you look at where the money is going right now you would realize that this is absolutely possible, and in order for our country to survive as a democratic republic long-term, absolutely necessary!

Not to make too fine a point, but pretty much everyone who lives in the U.S. will admit that it's the greatest country in the world and there isn't anywhere else quite like it. At the same time they argue for more and more social programs (the health care legislation being one of those) at the expense of "the rich". They probably don't realize that even if we taxed the rich for 100% of everything they earn it would be woefully short of what would be needed to sustain these programs. The way we lose democracy starts out like this: a well-meaning program to help the "have not's" takes from the "haves" and starts a class war. Being more poor than rich, we vote into government those who are willing to wage this war.  When the money is gone, and it will go fast, society will start to collapse.  I may not have all of the specifics of how exactly this will happen but the eventuality is that we'll either have the government stop promising people things it just can't deliver or we will slowly move from democracy to socialism and then to communism.  

What's so bad about that socialism and communism? It seems to work for billions of people, right? WRONG! There is nothing to envy! While a certain country may or may not become the new economic power -- it does not help the majority of its citizens. It doesn't suppress freedoms because it's so powerful it needs something to do, it does so because it must.  People are not a potential investment, they are a liability.

I learned long ago while studying Computer Science that if the underlying architecture of something is flawed then anything built on that architecture will be brittle, burdensome, and end up costing a lot more then switching to the appropriate architecture in the long run.  Just like in Computer Science, if we build social policy on some bad underlying philosophy then we can expect the same kind of results.

 

Posted: Dec 13 2010, 05:29 PM by Nathan Zaugg | with 1 comment(s)
Filed under:
Why I am Excited about Windows Phone 7 (WP7)

HTC-HD3-mockup

Microsoft announced recently that Windows Phone 7 has RTM’d to manufactures.  The developer tools will be release September 16th, 2010 and the new marketplace is expected to open the first week of October. 

I plan to be standing outside of the T-Mobile store, iPhone style, to get my hands on this new hardware.  I may not be getting the first model to be released because I really want the rumored HTC HD3 or HD7 or whatever they plan to call it. 

While my friend has recently acquired an Android phone and I currently have an iPhone I am really excited about this new offering.  Below is an explanation of why. 

 

Reasons I want a Windows Phone 7 device:

  • The number 1 reason is the development experience.  Windows Phone 7 allows tools that we use to build everyday applications to be used to build apps for the phone with very few (if any) modifications.  In fact, there are over 300,000 downloads of the beta developer tools so far! I am used to writing quick little apps on the desktop when I need something.  I like that I’ll be able to do the same thing with my WP7!
  • I have a *lot* of code already written in C# that I can use!  In fact, I am using a library I wrote years ago for one of my apps. It is a lot of stuff I don’t have to do special just because I am targeting a mobile device.
  • Did I mention that I got really far into the development of my first WP7 app in just a couple of hours!  The productivity is amazing!  Even sending the app to the Emulator is lightening fast!  The developer story for this device couldn't be better!
  • Microsoft has made it very easy for software houses to port Games using XNA to WP7.  I expect the gaming experience on WP7 to be fantastic!  I mean it supports DirectX 9!  Another thing to consider is that people tend to downplay the XBox Live experience part of the phone but it really could take off.  Challenging people to games, for example, is all the boon on Facebook which has a huge gaming presence.  This same kind of interaction takes place on XBox live and could catch fire and that would make the devices hugely popular.
  • FM Tuner – This goes a little bit to the “iPhone is not enough” feeling I’ve been having, but it sure would be nice to have a HD FM Tuner on my phone.
  • The hardware on the Rumored HD3 is freakin’ Amazing!
  • My iPhone is good.  My iPhone is nice.  My iPhone has lots of apps, but I still don’t have a good user experience working with word, excel, etc. Really not impressed with it’s capability as a “business device”.  I can’t save files to disk, I can’t insert an external flash card, share my WiFi ala HotSpot or tethering, etc.  There are just a lot of “can’ts” with the iPhone.
  • My last dig on the iPhone is AT&T.  I currently have an jail broken 3G, but I’m reluctant to update the OS beyond the 3.0 OS I currently have.  I’m not even sure it will let me go to 4, but I can’t risk loosing my Jail break.  More and more applications will not run on my phone and Apple is really trying to kick us out! I can either fight it or take the message.  I’d rather get an Android phone than switch to AT&T!
  • Android phones are sure capable and functional but sexy they ain’t! Their app store is starting to rival Apples and the development story isn’t too bad.  My criticism is that their touch isn’t nearly as good as the iPhone or Zune (which WP7 is based on) and the user interface seems slow.  Mind you, I’ve only played with 3 real devices and 1 emulator but everything I see coming from WP7 looks super fast!
  • Another good / bad for the Android is the OS.  The Android OS is Open Source and rooting the device is straight forward and commonplace.  The bad is that it seems like Google leaves a lot of their “old generation” phones in the cold when it comes to OS enhancements.  If you buy a brand new phone today, there is every reason to believe that the next version of the OS won’t work on your phone.  There is absolutely no guarantee that Microsoft will behave any differently but it probably couldn't be any worse than Google for the upgrade story.
  • I believe that the missing features of the OS (Copy & Paste / Multitasking) will be delivered very soon.
  • I kind of like the idea of a fresh-faced marketplace with nothing on there yet.  As a developer / software engineer, there is more opportunity there than in say the iPhone marketplace that has been going for years.

So as you can tell I am hugely excited!  My only problem now is choosing which application to finish first and how much time to spend on them in any given weekend! :) I WANT TO GET MY NEW WINDOWS PHONE 7 TODAY!  I WANT IT! I WANT IT! I WANT IT!  Err, um, I guess developing applications on the emulator will have to distract me until then!

Long Term Data Archival Strategy

Cd_caddies_JPG

I bought a digital camera for our family back in 2005.  At the time I bought it everyone else I knew already had one and had been using it for many years.  It is now 5 years later and we have decided that after some close calls we need a better system to store our invaluable data!  After all it is impossible to re-create those photos.  While the Grand Canyon and Yellowstone National Park are not going anywhere in our lifetime, our family changes – fast!  If you don’t have lots of photos you can forget a bunch of the fun times you have together.

During a discussion, if you ask anyone two simple questions “Have you ever lost digital photos” or “what do you do to archive your digital photography” you will always get “Yes” and at least one of the following:

  • Printing the Photos
  • Burning a CD/DVD with the Photos
  • External Hard Disk
  • Online Backup
  • Scrapbook / Photo books

The truth is that only a combination of these techniques is going to work and nothing is 100% guaranteed and it is surprising how many people have lost so many photos! The phenomenon of losing data or in which the format the data is stored in becomes obsolete is called the Digital Dark Age. Storing large amounts of data for long periods of time is tricky business. We’ll discuss each approach separately before discussing a combined approach.

Printing Your Photos

Paper lasts forever, right?  Not exactly!  Did you know that the Declaration of Independence has to be kept in a case made of titanium and aluminum filled with argon gas to help preserve the document? Artwork has a similar problem.  White turns to yellow and the colors either fade or darken. Photo’s from your childhood are yellowing at an alarming rate!  Go back and look at your chemical prints and see how much they have yellowed.  You may be surprised!  Generally no matter what the physical media the culprits are: acid/chemicals, air/oxygen, heat/light.  You can get acid free paper and store it in an acid free box but it’s likely you still have acid and chemical exposure from external sources such as the oil in your fingerprints.  Even this will not keep chemical photo’s from aging because the very process used to develop these pictures adds acids and chemicals that will eventually destroy the photos.  Photo’s that are printed using ink suffer from these same problems.  There are special inks that resist aging but in general most still either fade or are damaged by water and humidity.

Another noteworthy item is that this archival method cannot save the video snippits that most point and shoot digital cameras have now days.

Burning a CD/DVD with the Photos

I burned my first CD back in the summer of 1995!  It was a CD of MP3’s (pretty new at the time) and was one of my most favorite possessions!  It was burned on a CD writer that had an internal HDD to help with buffer underruns (a very common problem! I lost more CD’s to buffer underruns then I had successfully write back then).  It was burned at 1x speed and took an additional hour to verify the data was written correctly.  I had to drive miles and miles to find a Circuit City that carried writable CD media! That CD lasted until about 2008 at which time it became unreadable – despite optimal storage conditions. That is a lifespan of about 13 years.  This was a gold CD and was very high quality.  Low quality CD’s will not last as long.  Many of them have a lifespan of only 1-3 years! Word to the wise – DO NOT CHEAP OUT ON ARCHIVAL OPTICAL MEDIA!  Just last month we had a scare where the CD for the August 2009 photos wouldn't read.  Luckily we had a backup and did not loose those photos and videos! That disk was only 1 year old!  If you think that writing your photos to CD/DVD is going to preserve your memories forever, I have news for you – That ain’t going to work, Alice!

Keeping in mind that typical higher quality CD media only has an average lifespan of 5-10 years in optimal conditions; knowing which CD-R/DVD-R is the highest quality is not simply a matter of picking the best brand. There are some CD/DVD media that are made for archival.  One company claims that their CD media can last 300 years and that their DVD media can last 100 years. This is obviously a theoretical average using the ISO 18927-2002 guidelines. Personally I’ll replace these disks every 10 years, but at least I know I can go 10 years without a lot of worry about loosing a few disks. It is also recommended that data stored on optical disks are not stored in a compressed format (like zip).  This is because if there are disk errors the contents of a compressed file are completely gone where some uncompressed files could be recovered individually.

External Hard Disk Drive

External hard disks are the best way to backup modern computers with terabytes of data. They are fast and the disk failure rate has gone down significantly. Simply having an extra copy of your data is a valid data backup strategy but it’s not really an archival strategy.  Eventually that disk will fail AND your computer disk will also fail! They are mechanical devices and simply cannot last forever.  When these disks fail, they usually fail in a spectacular way often leading to large expenses to recover data and the possibility that not all of the data could be recovered.

An alternative to the traditional disk drives are SSD Disks.  SSD (Solid State Disks) have no moving parts and will theoretically last a lot longer.  They have the added advantage of failing on write rather than read.  That means when these disks do fail it’s because they cannot write. SSD’s are a new technology and do have some problems.  For instance they can only be written to so many times before a cell cannot be re-written.  This is exacerbated by write amplification where SSD’s have a larger cell of memory than the file system.  Each time a block in that cell needs to be changed the entire cell must be re-written. There is some new technology to help overcome these limitations but all things need to be considered in a data archival scenario.  For my money though, I’ll probably buy a 128GB SSD for our “secondary” backup device. It may be pricy now, but when we fill it up the next one we buy will probably be much larger for the same price.

If you choose to use a SSD for archival there are some things you need to be aware of.  First, while the data on the drive can last a very long time, it will eventually loose charge if the drive is not plugged in from time to time. The amount of time a drive can sit unplugged and retain it’s data is said to be about 10 years, so it’s a longer period of time.  Still, if you fill a drive up and are no longer writing to it every month you need to devise a scheme to plug them in every once in a while.  It’s not clear to me yet if the data actually needs to be re-written in order to prolong the longevity of the data but I hope to figure that out soon.  Another consideration is that each time you write to a cell the shelf life on that cell decreases some small amount.  This means that it is optimal to use this device as archival only and resist the temptation to double the speed of your computer. :)  Last, there is a difference between SLC memory and MLC memory.  SLC has more write cycles but is quickly loosing favor to MLC because it’s less expensive to manufacture. Again, I’m not sure which one makes a better archival drive but I’ll post here when I find that out.

Online Backup

With online backup services like Mozy and Carbonite combined with inexpensive broadband Internet, it’s easy to see why this will be a good alternative for some.  Broadband internet would be a must in this case, but if you had this setup you would also be protected in case of a fire. The only downside to the online backup is the question about what happens if the company goes out of business and/or if you were unable to keep paying the annual premium.  A lesser issue might be that if you did need to restore your backup it could be difficult to retrieve all of that data. All things to consider when you devise your archival strategy.

Scrapbooks / Photobooks

My wife really likes to do digital scrapbooking.  She has been working on creating a photo book each year of our favorite pictures from that year.  We would typically upload the pre-finished scrapbook images to Shutterfly or some other online photobook website. We really love these books and while they are time consuming and expensive we’ll continue to produce them because this is how we enjoy our images.  Our favorite part is that once our kids grow up we can make a special book for them with all of their photos and/or order another family photo book for them. 

I have zero photos of myself when I was a kid!  It is our goal to scan all of our childhood photos before they fade too much.  We have already done our wedding photos using our fancy HP Scanjet G4050 Photo Scanner (with transparency attachment for scanning negatives) and will eventually spend a lot of time at our parents and siblings houses scanning photographs.

These photobooks are not really a backup of our images.  If you were to scan one of these images back in you would not get a good enough resolution to print it again or order a larger print. And again, they do nothing to preserve the home videos to which we have equal attachment.

Conclusion

We have decided that we are going to backup our images monthly on both a SSD device and the special archival CD/DVD.  Some months we only need a CD to backup or data and other months we need a DVD – mostly because of movies. We also hope to be able to get a new DSLR camera and the image space required to store those will increase by at least double the output of our current 6MP camera. After 10 years we will make a backup for the current month and also a fresh copy of the backup from 10 years earlier.  We haven’t figured out 100% how we’re going to deal with the scenario where there is a fire it will likely be something like we store them at a relatives house or a safe deposit box.

The important thing is to make a plan for your data and get it implemented!

Bad day at the office

programmingJoke

I was having a bad day at the office a couple of weeks ago.  One of the things that makes me feel a little better is to look up some programming jokes.  I really am a programmer at heart and a nerdy one at that. 

So before I was about to endure the drudgery of the commute home I searched for programming jokes and read a few.  There are some great programming jokes out there!  I especially like the ones about C++ and UNIX.  For example “Unix is user friendly, it’s just particular about who it’s friends are”.

Anyway, I was reading this image and kind of chuckled.

Happy1

After reading this screen shot I briefly thought to myself “There is no way a DOS prompt now days would say that, but I wonder what it does say”. I decided to give it a try so I <WinKey>+R CMD<Enter>.  I was having such a bad day that even typing the word “Happy” was difficult, but the result made me laugh so hard I could hardly keep on my chair:

Happy2

I suppose it was a little perfect!  Happy was unexpected at this time! By the way, 100 points to anyone who can convincingly explain why it does that other than “Some programmer at Microsoft thought it would be really funny!”.  If you type “If” or “If Your” into a command prompt it responds “The syntax of the command is incorrect.” which is kind of what I expected.  If you type just “your” or “happy” you get the all so familiar error “'your' is not recognized as an internal or external command, operable program or batch file.

Just for fun here is another programming joke – The color of 6 letter words.  I rather like the color of “Cashed”.

rgbwords

More Posts Next page »