Technology

Apple’s Magic Mouse – A Software Engineer’s Perspective

Over the past month I’ve been trying to make the transition from my old windows environment to an OSX environment.  Part of the transition involved buying a Magic Mouse.  Apple’s Magic Mouse is definitely a very interesting device.  It is a very accurate mouse with the added capability of a gesture enabled touchpad.  While I like it, the negatives are over powering the positives… at least for me.

  • It seems too small, at least for my hand.
  • While you can scroll by using the integrated trackpad, there is no out of the box concept of a middle click.  I don’t use that when coding, but I sure use it alot when browsing the web.  I was able to get it back by installing the 3rd party tool “BetterTouchTool.”
  • The integrated trackpad is over half of the device.  I find that I mistakenly activate it alot.
  • The single action of the device whether right or left clicking is irritating.  Maybe its just the size of the device that makes this seem irritating.

While I think it maybe great for some people, I’m not sure they are great for everyone.  While I am not going to get rid of mine, I am starting to use my old Microsoft Mouse more often again.  About the only thing I miss about the Magic Mouse is the trackpad scrolling.

Posted by Chad Dotson in Ramblings, Technology, 0 comments

First Impressions of Rust

Today I finished my first program written in Rust 0.10.  As with my article on Dart earlier this weekend I’m going to rely on Wikipedia for short intro for what Rust is.

The goal of Rust is to be a good language for the creation of large client and server programs that run over the Internet.[13] This has led to a feature set with an emphasis on safety, control of memory layout and concurrency. Performance of safe code is expected to be slower than C++ if performance is the only consideration, but to be comparable to C++ code that manually takes precautions comparable to what the Rust language mandates.[14]
Wikipedia

My first Rust program followed the same pattern that some of my other coding exercises have followed, that is implement an N-Queens puzzle solver.  While not terribly complicated, the puzzle does force an introduction to several important aspects of the language.  Since this was my first take on Rust, I am sure that my implementation isn’t great.

I found Rust to be an interesting language.  One of the more interesting opinions I developed about it was that it really prevents developers from doing something stupid.  That’s probably why it gets high marks for safe, concurrent code.  If I were to compare Rust to any other languages, I would say that it is syntactically similar to Scala and C++.  The strictness of the compiler does make learning the language a little more tedious than some other languages, but nothing that can’t be overcome.  I am probably a little biased on that point too since I’ve been writing a lot of Python lately.

On performance, I did noticed that it was about 60% faster than a architecturally similar python n-queens script I wrote.  I guess that’s not entirely unexpected from a compiled language.  I really want to figure out Rust’s threading capabilities.  That should greatly improve performance of the puzzle even more since it parallelizes well.

Rust has some serious potential and I predict as the language progresses, we will see more apps being written in it and more libraries available for it.  I for one will be continuing to tinker with finer details now that I have this program done.

Links:

Posted by Chad Dotson in Programming, 1 comment

First Impressions of Dart

Today I finished my first Dart tutorial.  For those that don’t know what Dart is, Wikipedia has a nice synopsis that I’ve included here.

Dart is an open-source Webprogramming language developed by Google. It was unveiled at the GOTO conference in Aarhus, October 10–12, 2011.[4] The goal of Dart is “ultimately to replace JavaScript as the lingua franca of web development on the open web platform”,[5] but Dart currently relies exclusively on its cross-compilation to JavaScript feature in order to run in mainstream browsers. Dart is intended to address issues with JavaScript that Google engineers felt could not be solved by evolving the language, while offering better performance.[5] Google works on Dart to help it build more complex, full-featured client-side Web applications.[6]

Dart is a class-based, single inheritance, object-oriented language with C-style syntax. It supports interfaces, abstract classes, reifiedgenerics, and optional typing. Static type annotations do not affect the runtime semantics of the code. Instead, the type annotations can provide documentation for tools like static checkers and dynamic run time checks.

Wikipedia

While the tutorial was simple and designd to be completed in about an hour, I found it a worthwhile and informative endeavor.  It was just enough to give an introduction to the language and syntax.  As the above snippet from Wikipedia states, Dart cross-compiles into JavaScript and should be familiar to people who know another C-style language.

I have a high degree of experience with object-oriented design, C++, and JavaScript and Dart has left me with a good first impression.  I believe an important aspect of Dart is that it could be used to bridge the gap between C-style languages and JavaScript for programmers who do not have a lot of JavaScript experience.  I do not believe that Dart will ultimately replace JavaScript, as Google hopes.  JavaScript, while it has shortcomings, is ultimately very powerful and flexible.  Dart’s ultimate utility will be something akin to CoffeeScript that is making it easier and less tedious to write JavaScript.  In the coming weeks I may delve further into Dart, though up next I will probably do a tutorial or two on Rust.

Links: Dart 1-hour tutorial

Posted by Chad Dotson in Programming, 1 comment
The Early Days of Flight

The Early Days of Flight

This post started from a comment I made on facebook about the “Volocopter” story on CNN.  At the time my comment was “Why does this look like something from the early days of flight?”  That it turns out is a very good question and an even better follow-up, “Aren’t we in the early days of [motorized, human] flight?”About 50,000 years ago, humans reached what is called behavioral modernity[1], “the point at which Homo sapiens began to demonstrate an ability to use complex symbolic thought and express cultural creativity”[2].  I think that is the reference point I will use for this post.  Am I leaving something out?  You bet, a heck of a lot in fact.  Another reference point I considered using was the control of fire by homo-erectus 400,000 years ago[3].  I ultimately decided on using the data of behavioral modernity because even after tens of thousands of years separating, those humans are us both anatomically and behaviorally.  We’ll use this timeline of “modern humanity” throughout this post.

So back to the topic of the post:  “Aren’t we in the early days of [motorized, human] flight?”  I believe the answer is a very resounding “yes.”  If we think about history of boat/shipbuilding, I believe can get a feeling for how new it is.

Let us compare two examples of what humans have created at the endpoint’s of “modern humanity.”  At between 9,523 and 10,053 years old the Pesse Canoe is thought to be the world’s oldest boat[3].  The Pesse Canoe is a simple, dugout canoe discovered in the Netherlands.  Fast-forward approximately 10,000 years to the USS Gerald R. Ford (CVN-78) slated to launch in 2015[4] which will be the most advanced ship built by human-kind at the time of its launch.  We, all to often find ourselves bounded by the technological achievements since the beginning of the space race, but that’s 10,000 years of well-earned technological achievements.  I’m sure that somewhere here there is a Moore’s Law of human ability (I say ability because I don’t feel intelligence nor ingenuity to be the right word).  That ability is based on what knowledge we have gained up to that point in time.

First Flight on December 17, 1903

First Flight on December 17, 1903

So now that we’ve talked human technological advances in boat/ship building, let us think about what brought us here, human flight.  Rudimentary usage of the science (understood or not) behind flight have been understood for anywhere between 2,000 and 2,500 years[6] but it wasn’t until Leonardo da Vinci’s drawings in the late 1400’s that humanity really started showing an understanding of the concepts behind flight.  For the most part, Leonardo’s best flight related discoveries were because he studied and tried to copy nature.  While successful attempts in winged human flight have been made as far back as the first millennium AD, it was 1903 when the Wright Brothers (credited) finally achieved winged, motorized flight.  In the 110 years since we have constructed advanced aircraft such as the Airbus A380.

As it turns out, there are a lot of significant inventions marking the timeline of human creations.  So much so I believe it is necessary to add “when a technology becomes useful” as a simplifying assumption to my statement.  Under that premise, our current capability in shipbuilding is based on 10,000 years of progressive technological advances and while our current capability in motorized flight is based on the culmination of thousands of years of technological advancement, its only been 110 years since we put it all together.  So, the answer is yes, we are in the early days of motorized, human flight.

Disclaimer: I am a computer scientist not a writer or history scholar.  This post is a collection of what I believe and what I’ve put together from the internet.

References:

  1. “Behavioral modernity.” Wikipedia: The Free Encyclopedia. Wikimedia Foundation, Inc., date last updated (8 November 2013). Web. Date accessed (27 November 2013). http://en.wikipedia.org/wiki/Behavioral_modernity
  2. “Human.” Wikipedia: The Free Encyclopedia. Wikimedia Foundation, Inc., date last updated (26 November 2013). Web. Date accessed (27 November 2013). http://en.wikipedia.org/wiki/Human
  3. “Control of fire by early humans.” Wikipedia: The Free Encyclopedia. Wikimedia Foundation, Inc., date last updated (24 November 2013). Web. Date accessed (27 November 2013). http://en.wikipedia.org/wiki/Control_of_fire_by_early_humans
  4. “Pesse canoe.” Wikipedia: The Free Encyclopedia. Wikimedia Foundation, Inc., date last updated (27 February 2013). Web. Date accessed (27 November 2013). http://en.wikipedia.org/wiki/Pesse_canoe
  5. “USS Gerald R. Ford (CVN-78).” Wikipedia: The Free Encyclopedia. Wikimedia Foundation, Inc., date last updated (22 February 2013). Web. Date accessed (27 November 2013). http://en.wikipedia.org/wiki/USS_Gerald_R._Ford_%28CVN-78%29
  6. “History of aviation.” Wikipedia: The Free Encyclopedia. Wikimedia Foundation, Inc., date last updated (24 February 2013). Web. Date accessed (27 November 2013). http://en.wikipedia.org/wiki/History_of_aviation
  7. “Early flying machines.” Wikipedia: The Free Encyclopedia. Wikimedia Foundation, Inc., date last updated (27 February 2013). Web. Date accessed (27 November 2013). http://en.wikipedia.org/wiki/Early_flying_machines

 

 

Posted by Chad Dotson in Misc, Ramblings, Technology, 0 comments

Applying DD-WRT to a Linksys WRT54GL Router

My ancient D-Link 624 has showing signs of conking out over the past couple of months.  That had put me in the dilemma of “Do I wait for 802.11n to be released or do I buy a modifiable router now?”  Well, I made the decision.  I bought an old, high modifiable Linksys WRT54GL.

***Just a word of caution, don’t buy a WRT54GL unless you plan on flashing the firmware to something better because the default firmware sucks royally.***

This morning, I successfully applied the latest DD-WRT firmware  to the router and now have it up and running.  So far, I am really digging it.  I highly recommend it to anyone with supported hardware.  I choose DD-WRT over OpenWRT simply because of the ease of upgrading it.  Eventually, I may switch over, but as of now I have no plans to.

This procedure is not without risk however.  If you screw it up, you could find yourself with nothing more than an expensive doorstop/paper-weight/what-have-you.  If you follow the instructions provided on the site you will most likely succeed.

If you would like to attempt to modify your router firmware, go to http://www.dd-wrt.com/ and check to see if your hardware is supported.  Definitely check the Instructions because you will brick your router if you mess up.   Also check out the “Peacock” thread in the DD-WRT Forums.  It can be found here: http://www.dd-wrt.com/phpBB2/viewtopic.php?t=51486.  I followed the exact procedure listed in the first post and had absolutely no problems.

a.Set your computer to a static IP of 192.168.1.8. (or to whatever subnet the router is on) Disable all firewalls and security. Disable wireless on your computer and only have the router connected to the flashing computer by the ethernet cable between the two.
b. Hard reset prior to flashing. Wait. Check for password page on re-login and change password.
c. Flash firmware. You can use the webgui except if you have a belkin router. (For belkin use tftp.exe to flash)
d. Wait…at least three minutes. Lights should return to normal. See important2, below. Failing to wait is how most people brick their routers.
e. Do a power cycle of the router. (Unplug the cord, count to 30 and plug it back in.)
f. Wait for the lights to return to normal usually about 2 minutes.
g. HARD reset again. Wait. Check for the password page and re-login to change the password. Then you can reconfigure your settings manually.
h. Once configured set your computer back to autoIP and autoDNS.

Attached below is a video I watched before doing it.  It really simplifies the procedure and you really need to read more into it, but it should alleviate some fears.

Posted by Chad Dotson in Misc, 0 comments