Thursday, August 22, 2013

Software Development: Old School or New School?

Since I started writing software when I was 5, I’ve been doing it a long time.  I’ve seen a lot of changes in the technology – from the BASIC language all the way to assembly, desktop to server, fat client to thin client, you name it.  But the trend I’ve seen over the last 10-15 years is troubling.

There is absolutely no question that the Internet has changed things radically.  Much of that change is good.  There is, however, an aspect of the Internet and the way that software is written that is disturbing.  Many of the time-tested, well-thought-out, efficient ways of coding are disappearing and are being replaced by junky, ill-conceived, incredibly inefficient substitutes.  People that are learning to code now are mostly coding for the web, and it is very upsetting how little they understand of the actual science behind computing, mostly because the software development tools in use today don’t even support the best, time-tested concepts.

As part of my job I do software development in both Delphi (a modern-day variant of Pascal, very similar to Microsoft’s C#) and PHP.  Delphi is extremely efficient, and has adopted most of the best ideas that have ever come along in computing.  PHP is at the opposite end of the spectrum – extremely inefficient, lacking support for many of the most basic tools that real high level languages offer.  If you start to talk about JavaScript (the programming language that powers web browsers) the situation is even more dire – it is far more basic than even PHP.  Yet nearly all of the hype you hear in development is around HTML 5, JavaScript, Java, and PHP.  All of which are, frankly, very immature, and are evolving at glacial pace.

One of the technologies that is falling by the wayside is object-oriented programming.  It allows developers to create virtual objects that you can copy, manipulate, and act upon extremely easily and efficiently.  Java is object oriented, but it has other problems of its own (efficiency and security being the main two) that are causing it to fall out of favor quite rapidly.  PHP has some support for objects, but frankly it’s pretty terrible.  HTML and JavaScript don’t even attempt to support it at all.  People that are learning to program now don’t seem to have any kind of understanding of how much easier their lives would be if they had access to object-oriented development tools.  And the situation is actually getting worse, not better.

Another concept that is lost on the web is code compilation.  Pretty much ever since the dawn of computing, developers take code and run it through a compiler to produce the set of instructions that are native to their computer so that they don’t have to be translated at the time the software is run.  Consider how much more efficient you are at speaking your own language than you would be at trying to converse in Korean by using a dictionary, having never heard or seen a word of Korean before.  Compiling does the translation ahead of time (just once) so that software runs as quickly as possible.  Yet again, web technologies don’t do compilation – they do the “translation” at the time that code is executed, making things incredibly slow in comparison.  In addition to that, since the translation is done at run-time, that means you have to distribute the actual source code (the original code you’ve written) to your software in order to run it… so anybody who wants to could take your code and modify and redistribute it… or in cases where you’ve got content you want to protect, like music, or a movie, everybody can see exactly how it is protected so that protection can be removed.  Java has the ability to do a sort of rudimentary compilation just before code is executed, but it is still far from true native code, and it still slows you down considerably.

It’s almost like about 15 years ago people said, “We don’t care about all of the research and learning that has occurred over the last 50 years.  We’re going to come up with a new way of doing things, no matter how good some of your ideas may be.”

As someone who works in both worlds it is incredibly frustrating.  Especially when I have to interact with people who have only ever spent time in the newer web technologies, because they don’t even have a remote concept of what they are missing out on.

There are a ton of other great technologies that seem to be falling by the wayside.  True code debugging (the ability to see what is happening internally inside of software as it is running, making testing much, much easier) is extremely rare.  RAD (Rapid Application Development), once considered the epitome of efficient design and coding, is almost unheard of today.  True integration with databases is pretty much gone too, and in its place are incredibly difficult-to-program, very bloated communication methods that making coding difficult, especially if it is to be done securely.  Forgive me if fname.value=’Frank’ is easier (and conceptually much more sound) than “UPDATE users SET fname=’Frank’ WHERE userid=56”, but this is exactly the sort of difference I’m talking about.  For the most part web developers aren’t even remotely aware that the tools we had for doing things were much better than the best of what they have access to today.  It’s really quite sad.

I’m not saying for a minute that these newer tools don’t have a place.  They do.  But very little, if anything, is being done to improve the tools and incorporate the lessons that 70 years of computing science have taught us.  There’s almost a wall there where anyone who works in the newer tools will automatically dismiss ideas from the old school just because they are old school, not because there is any real reason to do so.

So I have to admit that I don’t really having to work with HTML and JavaScript and PHP.  They all seem incredibly antiquated to me.  Almost like I’m stepping back in time 30 years.  In many cases it is much harder to do things in the “modern” tools than it was in the contemporary tools of the early 1980s.  Things that I’ve taken for granted in what I would call a “real” development environment just don’t even exist when working with their “modern” counterparts. 

Would you enjoy having your Ferrari swapped out for a Model T?  And somehow I’m expected to like it.

The result of all of the backwards ways of doing things with “modern” tools is that it takes forever to get anything done.  I can easily write “equivalent” code in Delphi five times faster than it can be done in PHP even though at this point I probably know PHP as well as anyone could.  And, on average, it takes about half of the lines of code in Delphi to accomplish something as it does to do the same thing in PHP.  And yet the Delphi code literally executes more than a hundred times faster, and provides a better user experience.  Yet somehow people are critical of my decision to continue to use such a tool.  Only because they don’t understand it, and in most cases refuse to even try.

Much of the stagnation in web technologies is due to the bickering and in-fighting that happens between companies that build tools for the web.  HTML 5 is, in reality, very poorly suited for what we are asking it to do today.  And everybody involved wants their own ideas for improving it to become the standard, but nobody else is willing to adopt those ideas because they aren’t their own and they can’t profit from it.  In the 1990s and early 2000s, for example, Microsoft tried to extend HTML 5 with new features in Internet Explorer and they got shot down by everyone else, because they weren’t “following the standard.”  Well, yeah, they didn’t… because there wasn’t a way of doing the things they wanted to in the standard.  Yet when people do actually get together to try to improve the standard, nobody can agree on anything so nothing gets done.  We’ve been talking about HTML 5 for nearly ten years, and it is still so poorly supported across different browsers that you almost can’t use it.

Trying to creating interactive web pages is a an absolute disaster – programmers have to take care of every low-level event (click button, move mouse, release), and those events differ from browser to browser.  Want to play music or show video on a web page?  Nobody can even agree on how to do that so you have to produce three separate versions of every file, then figure out which version to use when you view the page.  HTML wasn’t ever even designed to handle any multimedia other than graphics, either, which is why so many web pages use Adobe Flash, despite the fact that everybody hates it.  Want to do things like drag-and-drop?  Good luck.  It’s really hard to do, and usually has to be coded multiple different ways to work in all popular browsers.  But in my ‘old school’ Delphi drag and drop doesn’t even require writing a single line of code.  Just set an object property saying ‘yes, you can be dragged’ and ‘you can accept dragged objects.’

Adding database interactivity to a web page is an exercise in patience and frustration.  There still isn’t an official way for a web page to pull data from (or insert data into) a database.  It’s still a very tedious and time consuming thing to do.  Don’t even get me started on how nobody does it securely because that’s even harder to do.  But we’ve had databases for 50 years so basic interactions like this should be a cakewalk.  In Delphi, all I have to do to retrieve record 56 from the users table of the database is users.FindKey([56]).  The same thing in PHP is at a minimum of 4 lines of code – much more if you do proper error checking.  And in JavaScript?  Well, don’t plan on working on anything else that afternoon.

It goes on and on.  Want a web page to interact with a Joystick on the web?  Not happening.  Or generating output for a printer with full control over how it looks?  Again, not really possible.  How about photo editing?  Not very plausible in HTML.  How about a page that uploads a picture to your cell phone over USB?  Nope, HTML doesn’t allow it.  And it will likely be at least a decade before such things are actually possible and usable.

All of the above problems had already been pretty much solved by traditional development tools long ago. 

And somehow many of the companies that have produced the strongest tools and environments for software development in the past are abandoning the more mature technologies.  Microsoft is trying to force everybody to the write Windows 8 apps, despite the fact that this environment, too, is missing some of the best things from their traditional desktop environment.  Apple invests very little in desktop technologies.  And Linux stagnated years ago.

It’s really pretty sad.  If people were smart they’d take the best ideas from wherever they come from instead of trying to reinvent the wheel over and over.  And as it stands today, the technologies that power the web – HTML, JavaScript, etc. – are more of a wooden, square wheel than most developers realize.  The traditional ways of doing things don’t have to be left behind – they could easily handle the same tasks that the newer technologies are doing, and in most cases do a far better job of it.  Or, some of the concepts from traditional development could be added to the newer tools.  But, for some reason, never the twain shall meet.  It’s frustrating having to choose between high functionality, quick development, and high performance, and working on the Internet.  It would be really nice to be able to do both.

Saturday, May 25, 2013

Cameras–Is it time to upgrade?

WP_20130524_003c
One funny thing that happens to me a lot is that many people I know outside of work seem to think that I do audio, video, and/or photography for a living.  My job is in software development, but that is apparently less glamorous than multimedia to the general public, so for some reason I'm known better to people in my personal life for the things that I like to do with media rather than creating software.

So one of the questions I often get asked is “which camera should I buy?” Or the same question phrased differently, “should I get a new camera?”

For some reason nearly everyone interested in photography gets stuck on camera technical specifications. For example, the first question people ask me about one of my cameras is “how many megapixels is it?” when in reality that number doesn't really mean much of anything these days, as I'll discuss later.
So in attempt to sort of pacify everyone, here are some general guidelines on what cameras to look at, and whether you should upgrade your existing camera to something newer or more expensive.

Digital SLR


First, advice for people who already have a digital SLR camera and are thinking about upgrading…

You probably don't need to upgrade if…

  • Your camera has a resolution of 6-8 megapixels or better, and you do nearly all of your shooting outdoors during the daytime.
  • Your camera model was released during or after 2009.

You may want to consider upgrading if…

  • Your sensor resolution is less than ten megapixels, you do a lot of cropping on images, and you create large prints.
  • You shoot at night or indoors a lot, and for whatever reason don't want to use a flash or a large aperture (f-stop less than 2.0) lens.
  • The limitations of your equipment are preventing you from getting the shots you want.

Reasoning…

While most digital SLR cameras released in the last 10 years or so are capable of really good pictures during the daytime, many models released before 2009 struggled to perform well in low-light situations.  Then in 2009 something magical happened, where all of a sudden cameras from all manufacturers were being released with better clarity and low-light sensitivity with much higher usable ISO settings.  If you shoot in low-light (such as indoors or at night) having a 2009-model or newer camera can make a big difference.
If you shoot primarily in daylight, or with a flash, or a large aperture lens, you probably don't need to upgrade.  Even early model cameras going back to 2004-2005 still do really well in these situations, and you wouldn't gain much by moving to a newer camera.

If you really have an itch to buy new camera equipment, lenses are always a much better investment than electronics.  A good quality lens will make a bigger difference in picture quality on an older body than a cheap lens on a newer, more expensive body.  And lenses hold their value really well – oftentimes you can resell a good lens for the same price you originally paid, or take just a minimal loss on it.  The value of anything electronic, especially digital camera bodies, plummets very quickly.

What should I get?

Even the most inexpensive digital SLRs take amazing pictures these days, and most models released since about 2010-2011 shoot pretty spectacular video as well (as long as you are willing to focus manually).  Unless you have a very specific need for a higher-end model, the cheaper (and usually lighter and smaller) bodies make a lot of sense.  I own several SLRs, and when I want to take a camera with me that isn't too big or bulky, I take my 2010-model Canon T2i because it is small, lightweight, and takes fantastic pictures.  I only use my bigger and bulkier SLRs when I need fast control over exposure settings. The bigger, more expensive models really don’t take better pictures than my much cheaper T2i.  They're just faster to navigate and provide professional-level control.  (As for lenses for my T2i, my 10-22mm wide goes with me for indoor shots, 50mm or 85mm for portraits, and the kit 18-55mm, 28-135mm, or 24-105mm for outdoor shots depending on how appropriate a big lens is for the situation.)

I’m primarily a Canon guy, so I really like the Canon T3i, T5i (adds touch screen), 60D (no touch, but adds more buttons for more control; no lens with this link).  All are well under $1000, and are excellent.  Full-frame bodies like the 6D or 5DmkIII are of course amazing, and they give better low-light sensitivity, a wider field of view, and of course much more control, but at much greater cost – $2000 or more, without a lens.  Unless you're shooting professionally it’s hard to justify the price.  The SL1 is also nice because of its tiny size (and it is tiny for an SLR), but it is otherwise essentially the same as the T5i without the flip-out screen at considerably greater expense.

Canon also makes a lower-end model called the T3, which takes good pictures, but difficult to recommend because you can get a lot more camera with a used T2i (sometimes for less), or the T3i for not much more money.  The LCD screen on the T3 is quite poor, and doesn't flip out like the T3i (for easier shooting above or below eye level).  The T2i/T3i is also faster, has a lot more resolution, higher quality video, and much better low-light sensitivity, among other enhancements that to me make it a better buy.  But if the T3 is what you can afford, you're still going to get great pictures.

Nikon also makes great cameras, but I don't follow their lineup closely enough to make specific recommendations.  The one thing to watch out for on Nikon cameras is that the less expensive bodies (< ~$700) don't have the mechanism to autofocus on “AF” series Nikon lenses, and those lenses happen to be the less expensive ones.  So plan on spending considerably more on lenses with Nikon than Canon if you buy a cheap body.  If you get a D90 or more expensive model, the AF lenses will autofocus and the less expensive lenses are fine.

I’d be a little careful about buying other DSLR brands, as the lenses made for those cameras have inconsistent quality and you have to be really careful about what you buy.  If you invest in Canon or Nikon equipment you can be assured that you're always getting something at least very good, if not excellent.  Neither brand makes bad stuff.

If you're just starting out and want to buy your first digital SLR, get the T3i or T5i.  Anything more complicated will be overwhelming because of its complexity, and won't give you better pictures.  The kit lenses included in the box have really good image quality these days, and will be sufficient for new photographers.  Once you begin to understand photography a little better you can step up to a better lens for more control over what you shoot, and you won't have to upgrade your camera.

With that said, everyone with an interest in photography and a digital SLR camera should own a 50mm prime lens.  Canon 50mm f/1.8, Nikon 50mm f/1.8 manual or auto focus (the first link will autofocus on the more expensive Nikon camera bodies, but not on base models).  They have excellent image quality and are very inexpensive. They give you the ability to shoot pictures with a soft, out-of-focus background that you can't get otherwise without spending a lot of money, and as such they make spectacular portrait lenses.  They also allow you to shoot indoors without a flash in moderate lighting.

In the end, though, if you already have a digital SLR and it doesn't have any glaringly horrible problems, you're fine sticking with it rather than upgrading.  Spend the money on a new lens instead.

Point and Shoot


The quality of point-and-shoot cameras is all over the map.  So it is pretty hard to make specific recommendations. 

For the most part you get what you pay for.  If your camera cost you $150 or less and you're thinking about upgrading, I'd just go ahead and do it.  A P&S camera that sells for $250 is always going to be a significant upgrade over anything ever sold for less than $150, and is probably worth the money.

Point-and-shoot cameras have also improved significantly over the years too.  A P&S camera from more than 5 years ago is really going to pale in comparison to something newer. 

So as a general guideline, I’d say that if your camera is more than 3 years old, or cost you less than $150, yeah, you should upgrade if you're considering it. 

What should I get?

Camera manufacturers release new models of their point-and-shoot lines quite often – it isn't unusual for a model to be discontinued and replaced after just 6 months.  So specific models are something that I don't even try to keep up on.  So I won't make specific recommendations.  They'd be out of date rather quickly anyway.

So instead I'll give you one piece of buying advice… ignore the numbers.  Ignore the resolution (megapixels), ISO sensitivity, etc. entirely.  Despite what the difference in numbers might tell you, performance of nearly all cameras in this category are all about the same, given similar lenses. 

The one biggest factor to look at is the size of the lens.  Specifically, the glass in the lens.  The bigger the lens, the more light it collects, which improves image quality.  A small difference in lens size can make a big difference in picture quality.  So I'd recommend buying the camera with the biggest glass within your budget.
The other thing to look at is the optical zoom capability.  Many times manufacturers will try to hide this and give you a digital zoom number.  Digital zoom is useless.  Only look at the optical zoom.  Buy whatever suits your needs.

The other thing I'll mention is Optical Image Stabilization technology.  This compensates for the shake that is inherent in cameras that are being held by hand.  It is especially important in point and shoot cameras because they are tiny (and therefore harder to hold steady) and don't handle low-light as well as SLRs, so they require longer exposures which increases the likelihood of motion blur.  IS technology is very highly recommended unless you shoot on a tripod or only take close pictures in daylight.

As for brands, Canon is the clear winner in this category.  They consistently produce the best images, and are generally quite easy to use, relatively speaking.

Smartphone cameras have gotten much better in the last few years, but they really still pale in comparison to point-and-shoot models.  Not only do P&S produce much better quality pictures, they also have a real zoom capability.  The only smartphone cameras that I've found that does what I would even consider a passable job are the Nokia Lumia 1020, 920, 928, and 925, or the HTC One.  Not even the iPhone 5 or any of the Samsung Galaxy S series are any good unless you're shooting in the noonday sun.

Other Camera Types


There are a few other types of cameras out there, such as mirrorless, and rangefinder, but getting into a discussion about those is well beyond the scope of this blog post.  I'd be happy to answer questions if you're considering one of these other types.

A Final Word about Megapixels


The more megapixels the better, right?  At least that’s what camera manufacturers and salespeople would like you to believe.  But that isn't necessarily the case, especially on small cameras like point and shoot and smartphones.

The trouble with increasing the number of pixels is that in order to add more pixels the pixels themselves have to become smaller.  And smaller pixels means that less light is captured.  Which then in turn creates noisier (less clear) images, and less ability to handle low-light situations like you would find indoors or at night.
Generally speaking, as long as a camera has 6-8 megapixels of resolution, it is sufficient.  In fact, the higher you go above that the more processing has to be done and blurrier your images become to remove the extra noise, especially when shot under conditions other than sunlight in the middle of the day.  An 8-megapixel point and shoot is generally going to be preferable to one with a 13-megapixel sensor, especially on small sensors like those in a cell phone.

Higher resolution pictures also take up more disk space.  Double the number of pixels, double the size of the file.

Always remember that the highest resolution “normal” computer monitors are about 2 megapixels at best.  And 3 megapixels is enough for printing an 8x10.  You only need higher than 3 if you are quite exuberant in your cropping of images (to simulate zoom after-the-fact, for example) or if you are printing at 11x14 or larger.  Any extra resolution is wasted, and taking up extra disk space.  So, with all other things (*cough* lenses *cough*) being equal, choose a camera with the resolution closest to the 6-8 MP range.  Even photography magazines, who are notoriously picky, only require about 5 MP for print.

Wrap-up


Chances are if you already own a digital SLR it is probably fine.  But if you own a point-and-shoot which isn't brand new or didn't cost more than $250 you could benefit from an upgrade.

SLR cameras are more of a long-term investment while point-and-shoot cameras are meant to be more-or-less disposable.  And the lens on a camera makes more difference in picture quality than the camera itself.  And aside from the top-of-the-line models, for the most part you get what you pay for.  Keep those things in mind while shopping and it will be hard to go wrong.

Thursday, April 25, 2013

Have You Seen Me?

haveyouseenme-640

MISSING: Doug’s Wife

She has been missing for a very long time. She disappeared during the height of Doug’s social life, and has been missing ever since. The circumstances of her disappearance are still unclear.

She is described as intelligent and witty, appreciative of Doug’s dry and quirky sense of humor. She is very loving of both Doug and their children, more than capable of reciprocating his devotion. She is also deeply spiritual and devoted to her faith.

She is also described as easy going and easy to talk to. Attractive, but not obsessed by her looks. She is also unusually understanding of Doug’s sometimes immature behavior, while being willing to offer correction and be helpful in encouraging his intellectual and emotional growth.

A devoted husband, when asked what he misses most about his wife, Doug responded that he misses having someone who he can talk to about anything, and having someone to spoil. She has been the light and center of his life, and he has cherished every second of her company. His life has been hollow since she disappeared.

She may be found at or near the How-To section of the local library. Like Doug, she is also passionate about learning and improving her talents. Self-improvement and encouraging their children’s education are some of the most important parts of their lives.

She is believed to be between 25 and 40 years old, and between 5'0" and 5'6".  Due to the extended duration of her absence, he is unable to recall her exact age and height.

If you have any information as to her whereabouts, please contact Doug directly.

Friday, April 19, 2013

Important information

To view this blog post, please verify that you are a real person.

Saturday, March 30, 2013

Microsoft Office for Free

PSA: One of the coolest, free services on the Internet today is one that many people would benefit from, but it seems almost nobody knows about it...

Microsoft has made completely free, web-based versions of Word, Excel, PowerPoint, and OneNote available through its (also free) SkyDrive service. These are reduced-functionality versions of the desktop apps, but they are still extremely functional, and you probably wouldn't miss any of the omitted features. It works on all of the major browsers, including even the iPad. And, like Google Docs, they support real-time collaboration so multiple people can be working on the same file at once. 

To access this software, just create a new (or activate an existing) SkyDrive account at www.skydrive.com. Click the "Create" link at the top of the page and select the type of document you want to create. Or upload existing files from your computer and view/edit them online.

These aren't time-limited trial versions of a paid product... they are completely free to use. And if you have 2010 or 2013 versions of the desktop apps, saving and opening documents directly to/from SkyDrive is built in. (And working on documents saved to SkyDrive also enables real-time collaboration in the desktop apps as well, without a SharePoint server.)



Saturday, February 2, 2013

Check Your Internet Router!

This week security researchers announced that many common Internet routers have a fundamental flaw which essentially gives any hacker that wants into your home network free reign to connect in remotely, completely bypassing the router’s firewall feature.  While this problem in and of itself doesn’t necessarily grant hackers access to your computer, it sure would make it easier to do so, especially if you don’t regularly update your computer’s software.

We already know that hackers are actively scanning the entire Internet for vulnerable routers, so it isn’t a matter of “if” but rather a matter of “when” your home network is going to come under attack.

There are way too many vulnerable models out there to list them all, so Steve Gibson at Gibson Research Corporation has created a web-based tool to remotely scan your router to see if it has the problem.  Because its use isn’t necessarily obvious, I’m going to walk you through running a scan of your own router.  It only takes a couple minutes.

Performing the Test

First of all, click this link to access GRC’s ShieldsUp product page.  That will bring you to this screen:

shieldsup1

From there, click the “Proceed” button.  That will bring you here:

shieldsup2

Click the “GRC’s Instant UPnP Exposure Test” button (which I’ve highlighted in yellow above).  This will begin the test of your router.  After a few seconds, the test result will appear.  That will look something like this:

shieldsup3

If you get the green result box as shown above, your router does not have this vulnerability.  If, however, you get the two following result, you should REPLACE YOUR ROUTER PROMPTLY!

image

While it may be technically possible for the manufacturer of your router to issue a new software update that fixes the problem, very few have done so, and chances are that if your router has this problem it probably suffers from many other serious security issues as well.  Your best bet is to get something newer, which also gives you the benefit of it probably being much faster and adding newer technologies to improve usability and a more comprehensive set of features.  Routers are not expensive these days.

Recommended Replacement Routers

  • If you’re looking for a budget model, the D-Link DIR-601 is typically under $30 and is quite good. 
  • The D-Link DIR-636L doubles the speed of the WiFi from 150 to 300 Mbps, for $70 or less. 
  • To double WiFi speed again, the D-Link DIR-826L is the next step up for just a few dollars more. 

I like the D-Link routers because they don’t have security problems of those made by Linksys, and provide more features than are available from Netgear.  And most “no-name” routers use the same base software as those manufactured by Linksys, and are thus more likely to have serious security issues.

Google Search