Rob Kraft's Software Development Blog

Software Development Insights

Archive for August, 2011

In home wireless cameras for less than $100 part 2

Posted by robkraft on August 27, 2011

My wife and I liked this camera so much that we bought a second camera.  Configuring the router to allow a second
camera is a little more complicated, so I thought I’d share my experience here.

  1. I discovered  a camera feature I did not know about once I bought my second camera.  The camera has a physical focusing lens on the front of the camera, you can spin the camera cover to improve the focus; so make sure you take a moment to do that to improve the image quality.
  2. With two cameras taking images based on motion detectors I decided I wanted to put the images from the second camera in a different folder on my FTP site.  This was easy to do, but I discovered that the path to my FTP site is limited to just 32 characters.  This is probably sufficient for most people.
  3. By default, your camera uses Port 80 to connect to the Internet, but if you are viewing two cameras from the Internet, they both cannot use Port 80.  You also cannot use a DMZ feature in your router that passes all traffic from the Internet to a single device.  Instead, you need to configure filters to tell your router to pass traffic coming in on one port (80) to one camera; and tell your router to pass traffic coming in on another port (I used 81) to the other camera.  Internally, I statically assigned 192.168.0.30 to one of my cameras, and 192.168.0.31 to the other.  Therefore, I configured Port 80 on my router/firewall to send traffic to 192.168.0.30; and I configured Port 81 on my router/firewall to send traffic to 192.168.0.31.  When we use the Internet to connect most any device, the Internet uses Port 80 by default; which means that we don’t need to type in the port number when we go to a web site like http://www.yahoo.com:80.  The same is true for your camera.  But since the second camera is listening on a different port (81 in my case), I need to enter the Port number on my URL when trying to view the camera from a web page or configuring it for viewing from my phone.  I simply enter http://xx.xx.xx.xx:81 and when the request from the Internet hits my home address of xx.xx.xx.xx, my home router will direct the request on Port 81 to the device at 192.168.0.31 as I configured it above.
  4. In my original blog post I had created an “Event config – schedule profile” that I used on my motion detector.  This is unnecessary for me because there is an “always” option you can choose in the “Event config – Motion Detect” configuration; which is what I desired anyway.
  5. If you do create an “Event config – schedule profile”, you must give it a name first, and then you must click on it to select it before the options for configuring your profile will appear.

Posted in Home Tech | Leave a Comment »

Are you a developer, or an architect?

Posted by robkraft on August 21, 2011

I don’t care about job titles, but I do believe that a difference exists between a developer and an architect.  One difference may be just a matter of the perspective used to solve a problem.  Senior developers and architects have domain knowledge about how easily certain features can be implemented, whether the feature is already built into the application, or how best to modify the app to implement the feature.  The architects will consider spend more up front time thinking of an implementation strategy that maintains good code; while developers focus more on writing code in the quickest way possible to get the job done without changing the architecture.  Ultimately, years of developer enhancements without looking at the code as an architect usually leads to spaghetti code.

For example, when looking at some code as a developer, you can see that you can fix the bug or add the new feature by adding another IF statement in the current IF block to handle a new condition, but when looking at the same code as an architect you can see that a block of logic should be extracted into a separate method possibly reducing the current number of branches within the current method.

Posted in Code Design, Coding | Leave a Comment »

The Importance of your Development Context

Posted by robkraft on August 9, 2011

Development context places the primary constraints on the priorities of product development.  As a developer, you can provide more satisfaction to your users when you understand the development context you are working in.  Some developers are not even aware that context exists and that context makes a difference.  These developers can be found at local user group meetings and on forums adamantly declaring that their approach to solving a problem is the only right approach.  But development context is important and it does influence the best approach to solving problems.  An extreme context example is the difference between developing the software that keeps a person on life-support alive, and developing software for your personal use to keep track of your collection of rare coins.  I’m sure you can identify many aspects of the development process that will vary between these two extremes.

Both development teams and projects have a context.  Most often, the context for the development team and every project is the same, but occasionally the development team may be thrown a project that needs to follow a different context than their usual development.  Being aware of the different context opens team members to new approaches to solving to the problem that may be more efficient than the usual development process, and that may provide a learning opportunity.

I have thought of a few contexts that influence the development processes:

  • Quality versus early to market.  In some contexts it is more important to release features to market, even unfinished or unpolished features than it is to provide a robust, bug-free, fully-featured product to the client.  Quick to market features sometimes help eliminate development waste.  How so?  When you don’t bother to spend the time to polish a feature (spell-check, languages support, tab orders, font sizing support…) and then you discover that clients want the UI to look a lot different; you have just saved the time that you would have wasted polishing a UI.
  • Some development teams develop core business applications year after year, but then receive one project that is different.  Perhaps it is a one-time program needed to collect and report on some data, and then the program will be thrown away.  Perhaps the program is only used by one individual.  Such a program may not need the same level of Q/A, documentation, user testing, auditing, logging, security, etc. as the core business applications.  This is another example of context difference impacting development architecture and processes.
  • Another aspect of the development context is the attitude toward new technology.  There is no correct attitude, but each attitude has its benefits and drawbacks, and each project and development team should clarify the attitude for each project.  By attitude, I am referring to the choice between using tools, techniques, and processes that you are familiar with, that are more predictable, and that incur less risk OR choosing new tools, techniques, and processes in order to keep up with the times, take advantage of ways to improve quality and speed development (usually after a learning curve).  Some teams strive to stay on the cutting edge, others prefer to make no changes, especially to valuable stable core business products, and some teams prefer to limit their pace of technology adoption to the things offered by their main technology provider such as Microsoft.
  • Occasionally self-education and learning affect the processes, architecture, and tools used for a project.  Some examples include implementing a project using SCRUM when your normal development process does not use SCRUM.  Using Test Driven Development (TDD) is another example.  Using a new DBMS or programming language can affect your context, as can a switch to using IOC containers, MEF, MVC, or MVVM.  When part of the project goal is to learn something new, it can reduce development speed and introduce quality defects.  Project managers should be more tolerant of quality defects and deviations from the usual development processes as new good practices are discovered in response to the changes.

I think it is worth repeating that the development context affects a lot of things, particularly requirements gathering, quality assurance, documentation, user testing, application logging, application security, application auditing, and more I’m not thinking of.

What else do you know that alters a development context, and thus the way we develop the software?

Posted in Code Design, Coding, Project Management | Leave a Comment »

In home wireless cameras for less than $100

Posted by robkraft on August 7, 2011

I’ve been researching cameras that I can use to view my house while I am away. I purchased a TrendNet SecurView Camera model # TV-IP110W for $75 on the Internet and I am pleased with the results.  Before you purchase a camera you decide which features you want and which features you can live without.  Some cameras claim to have a lot of features, but some of those features may not work as you expected.
The TrendNet camera delivers these features well:

  • Wireless
  • Good quality images
  • Motion detector
  • Remote viewing
  • Inexpensive
  • Easy to set up, for someone familiar with wireless routers

What follows is my in-depth review of things to consider when you plan to purchase a wireless camera.

Setting up the camera for remote monitoring

To monitor the image on your camera while you are aware from home you need a connection to the Internet from your home.  Most homes today connect to the Internet with a high speed connection such as a cable-modem or DSL, but if your home does not have a high speed internet connection that you are willing to leave turned on while you are aware, then you will not be able to view the camera remotely.  I used to turn off all electronics in my house prior to going on vacation, but now I must leave my cable modem and wireless router turned on in order to view the camera.
You must configure your wireless router at home to allow connections to the camera from the Internet.  When you do this, you need to make sure that it is done securely so that you don’t expose all the computers in your home to hackers on the Internet.  The safest option, depending on the camera model, is to tell the wireless router to use a DMZ and to route all traffic from the Internet (specifically all traffic on Port 80) to the IP address of the camera.
This also means that you should probably use a static IP address for your camera because if you rely on the normal default DHCP assigned IP address, the camera’s IP address might change making the IP Address configured in the DMZ of your wireless router incorrect (or worse, pointing at a real computer in your house).
Furthermore, my Internet access does not include a dedicated IP address.  This means that the unique number assigned to my home that allows me to connect to the Internet changes occasionally, perhaps once a month or once a year, but I don’t know when it will happen.  This IP address (like 72.17.100.1) is also the number I must provide when I am away from my home in order to connect to my home camera.  If the number changes while I am away, I need to know the new number in order to keep monitoring the camera.  Your high speed Internet Access provider is unlikely to let you know when your IP address changes, but you can take steps to eliminate this problem on your own.  Sign up for one of the free dynamic DNS providers such as dyndns.com.  You will be able to create an alias name (like mycamera.dyndns-ipaddr.com) that maps to your IP address (like 72.17.100.1) and then you can connect to your camera by using the alias name (mycamera.dyndns-ipaddr.com) instead of the IP Address (72.17.100.1).  Some cameras support specific dynamic DNS providers in the camera software, so get your dynamic DNS from a provider the camera supports.  If that is not an option, then the last piece of this puzzle is to install an update client on one of your home PCs that recognizes when your home IP address (72.17.100.1) changes and notifies your dynamic DNS provider that the alias needs to point to the new IP address (72.34.251.18) instead of the old.  Some people, especially small businesses, may have a static IP address available that can be assigned to the camera eliminating the hassles of setting up a dynamic DNS entry.
Most wireless cameras will work with the 4 major wireless security configurations (none, WEP, WPA, and WPA2).  You need to make sure the camera you obtain works with the wireless network you have configured in your home (and hopefully that is WPA2).  You will need to know how to provide the SSID, keys and other information necessary for your wireless camera to connect to your wireless network.
Sometime in the future, your IPV4 Internet connection that currently gives you an IP Address like 72.34.25.18 will be replaced by a newer standard called IPV6 and devices that only work on IPV4 will no longer work.  This is likely at least 5 years away, but if your camera supports IPV6 now that is a bonus.
In summary:

  • Your home must have a cable modem, DSL, or other high speed connection and it must be turned on while you are away.  A dial-up modem will not work.
  • When using a wireless camera, you will need to leave your wireless router at home turned on.
  • You must configure your wireless router to allow access to the camera, but don’t allow access from the Internet to any other computers in  the home.
  • You need to have signed up for a dynamic DNS service.
  • You probably need to leave a computer turned on to manage your dynamic DNS IP address.
  • You should test connecting to your camera when you are away from your house prior to your desire to use it.  Often you will find that you can connect to and monitor the camera easily when you are at home, but not so easily when you are away from home.
  • Get a camera that supports IPV6.
  • Make sure the camera supports your wireless network.

Monitoring your camera.

To monitor your camera when you are away from home you need either a computer, smart phone, or other device capable of doing so.  If you plan to use a specific computer or smart phone, you should make sure that the camera you acquire can be viewed from your type of computer or smart phone.  Many mac and linux users will discover that some cameras will not work with the browsers on those operating systems.  Some cameras only support the Internet Explorer browser for remote viewing.  Some cameras provide a smart phone app for Android or IPhone phones, but not for Blackberry or Windows 7 phones.  As of August 2011, few or maybe no cameras support viewing from any of the web browsers on a camera, but most support it through an app.

Live streaming video.

Cameras like the one I purchased don’t really provide live streaming video.  Live streaming video requires a lot of upstream bandwidth from your home to the Internet and most home users don’t have this, yet.  But the cameras do take an updated picture every few seconds and provide that to your remote viewing device and this becomes close to having live video.  If you want live streaming video, check with your internet service provider to see what upload speeds you can obtain and decide if you are willing to pay for it.

Image quality.

Most new cameras provide good clear color pictures.  Hopefully you can see some sample images taken from the camera before you purchase it.  The camera setup probably allows you to take high quality or low quality pictures.  In the few cameras I have tried, I found little difference in apparent image quality or in network performance between the various options, so I recommend higher quality images.

Image taken with camera

Motion detection.

Another feature that I strongly desired was a motion sensitive camera.  I wanted the camera to begin sending images when motion was detected in case a burglar had entered my home.  I also have cats in the home and it is fun to review a little bit of their activity and to make sure the motion detector works.  The cameras I have worked with provided poor documentation about the motion detector, leaving me to wonder if it was working or if I had just configured it wrong.  The motion detector is another feature that you definitely want to test prior to expecting it to work.  Most cameras allow you to send the images taken based on motion to your email or to a web site (FTP or HTTP).  I recommend that you do not use the email option, even though I know it is very tempting for non-technical people, because you could end up flooding your email inbox with thousands of pictures every hour.  I used an FTP site for my camera, and when I configured the camera to maximum sensitivity it did send over 2,000 pictures per hour to my FTP site.  Acquiring and configuring an FTP site is beyond the scope of this article, though it is not any more difficult than dynamic DNS.  Some of your may already have a place on the Internet where you can upload files using FTP, and many services like Google, DropBox, YouTube, or Picasa may allow it.  Just be careful that you do not exceed your storage limits and incur hefty price penalties.  When configuring your motion detector, you will probably want to make it ultra-sensitive if it is focused on the interior of your house and there is no expected motion other than a house-sitter or pets.  If you focus the camera out a window and there will be a lot of movement, such as tree branches swaying, then you might want to tone down the sensitivity of the motion detector.

Time to configure.

Don’t expect to receive the camera 1 day before your trip and have it working as desired by the time you leave.  Get it several weeks in advance and get it working.

Live video when viewing from home.

Many of these cameras can provide live video views as long as you are in your home monitoring the camera from your computer.  A few scenarios where you could use this include checking on the baby in the baby’s room, or monitoring the teenagers and their guests in the basement recreation room, or for observing the noise coming from the front door of the house using a camera pointed out the window.

Outdoor cameras.

One day I hope to set up an outdoor camera.  When I do, I hope to share all I learn in that process as well.  Some people may be able to mount a camera indoors to observe some activity outdoors, but if you want to capture sound, or images at night, you may need a camera mounted outside of your house.

Change the camera password.

Make sure to change the password on your camera.  Do NOT use the default password unless you don’t mind other people on the Internet viewing your camera and changing its configurations.

Date and Time.

The camera I am using includes a date and time stamp (if you want it) on each picture.  I like this because I can tell when the picture was taken.  I also like that the date and time stamp is visible when I am viewing the live video because it lets me know that the image is getting updated when the camera is otherwise monitoring a room with no activity.  If you don’t have a date and time stamp, you could arrange a clock within the camera view that is visible from the camera in order to see that the camera feed is updating occasionally and not just showing you an image from hours ago.  However, if the clock changing or movement causes your motion detector to fire, you may not want to use it.  Of course if you are going to have a date and time stamp you want it to be accurate, and most cameras allow you to synchronize the date and time on the camera with an nntp server (which is a computer somewhere on the internet that exists just for that purpose).  I use the nntp server 208.66.175.36.  Another thing you may want to look for when using an FTP site to receive pictures from your camera is to have a camera that makes the date and time a prominent part of the file name, as this makes it much easier to find specific images once those files have been downloaded from your FTP site to your local PC for better viewing.

Telling your guests about your camera

It is proper and perhaps even legally required, that you notify guests in your house that you have a camera monitoring their activity.  If you are using the camera to spy on a house sitter, or a house cleaner, and you hope to use evidence collected from the camera in court you may learn that the evidence is inadmissible if the person was not notified that they were being monitored.  Also, it is polite to notify your cleaners and house sitters about your cameras.  Heck, you might even tell them that you have cameras monitoring the house when you don’t.

Light source for your camera.

If you are aiming the camera into a specific room to monitor while you are away, make sure that the room has a light source if you plan to view images after daylight.

Infrared cameras

One day, I hope to set up an outdoor infrared camera to monitor the wildlife in my yard.  Currently, I am considering getting a trail camera for this.  A trail camera will not have a live camera, but it will take pictures, store them on an SD card, and then I can view those pictures later.  As with any camera purchase, you need to identify the primary value you want to obtain from the camera.  In the case of my night time camera, I want to know what animal is getting to my bird feeders at night, and how it is doing this.  I don’t need live video to catch them in the act, so the cheapest option appears to be a trail camera.

Remote control of the camera.

It would be cool to have a camera mounted on a swivel that I could control remotely.  My camera does not have this feature, and I am not willing to pay the extra money for that feature, but I believe some cameras for less than $200 provide that.  I know a guy that has a camera mounted on a robot in his home that he can remotely drive around his house.  I want that someday too!

Remote configuration of the camera.

Some cameras can be configured remotely, while you are away from home.  I don’t consider this a necessary feature because I expected to have configured as desired before I leave, but if you felt the need to change something about the configuration, it could be useful.

Price

As I mentioned earlier, this camera I purchased only cost $75, plus my time to figure out how to set it up.  I am a technical computer person, so I had little trouble with it, but others may find it more frustrating to figure out why the camera does not work, so you may need to budget extra money to hire some help, or extra time to do the research to get it working.

Cameras without a wireless network.

Wireless cameras are usually desired because we want to be able to place the camera anywhere in the house, not just where we have a wired internet connection.  You don’t need a wireless network to place a camera anywhere you desire within your house.  Another alternative is to use a powerline ethernet connection.  For less than $100 you can acquire a powerline ethernet kit.  A kit like this comes with two little devices that you can plug into an electrical outlet and you can run your computer network connection (IP traffic) through your electrical outlets.  Plug one device into your home router and a nearby electrical outlet, and plug the other into any electrical outlet in your house, and then connect your camera to it.  Not only will it work in place of a wireless connection, but it will probably provide a faster connection than your wireless network.

My TrendNet SecurView TV-IP110W.

So far, I am very pleased with the camera I am using, a TrendNet SecurView Camera model # TV-IP110W.  The features I like are:

  • Date and Time included on every photo, and every filename,
  • I can view the live camera (images updated about every 5 seconds) from any windows PC or from my Windows Phone 7 or from my wife’s Android phone.  This is done with a free app called TrendCam Lite.  Once I install a second camera in my house, I will probably purchase the $1.99 version of TrendCam.
  • The camera supports sending images to an FTP site after it detects motion.

Configurations I made to my TV-IP110W.

To configure my camera, I changed the following settings on it:

  • Basic – Date and Time – I specified 208.66.175.36 for date/time synchronization
  • Basic – User – I changed the default password
  • Network – Network – I provided a Static IP address on my home network
  • Network – Network – I provided information about my Dynamic DNS account
  • Network – Wireless – I provided information to connect to the wireless network in my house.
  • Video – camera – I configured it to include date and time on every image
  • Video – video – I used the default values of VGA, Highest, and 30fps
  • Event Server – FTP – I provided the connection info for my FTP site and tested it
  • Motion Detect – You need to resize one of those little boxes to include most of your camera image viewing area (wherever you want the motion detect to monitor).  Also, I configured the threshold slider always all the way to the left side (which causes the horizontal bar in the square below it to move down).  This is “more sensitive”.  Moving the slider to the left makes it more sensitive.  You can test it by having someone walk by.  Notice the size of the blips in the square box as the person walks by.  If the blip goes above the line, it will trigger the motion detector.
Configuring Motion Detection

Configuring Motion Detection

  • Event Config – Schedule profile – I added a profile for the begin time of 00/01, and end time of 23/59 and applied it to every day.
  • Event Config – MotionDetect Trigger – I set this to enabled, chose the profile I just created in “Schedule profile”, and selected FTP Upload.

Make sure to check my subsequent blog post at https://csharpdeveloper.wordpress.com/2011/08/27/in-home-wireless-cameras-for-less-than-100-part-2/

Posted in Home Tech, I.T. | 1 Comment »