Monday, April 29, 2013

OneNote - NOT as a notes application, but as a database system

This is about using OneNote as a database and not as a notes application.

I use OneNote for note-taking and I have built up over 1Gb of notes over the years. The more I use it, the more I realize that it is really powerful. I am also realizing that it can be used as a simple database system.

What is the most powerful feature of OneNote? Simple answer: Searching

So how can you use OneNote as a database. I am not talking about a database system for which you can build applications to talk to it. I am talking about OneNote acting as an application and database all in one.

Let's say a doctor or a dentist come to me with the following requirements:
- I want to be able to easily find customer records
- I want to be able to have all customer records including pictures, x-ray videos and so on.
- I want my staff to enter notes on every visit and I want to be able to easily go through these notes.

The programmer in me would say, I will develop an application for you that will do all this. However, the software engineer in me analyzes the requirement and figures out the best solution (the most cost effective); then I would satisfy those requirements by doing the following steps:

  1. Purchase Microsoft Office 2010 or Office 365 (which most businesses have anyways)
  2. Install it on all the computers at the doctor's/dentist's office
  3. Set up a file server on the network (i.e. Drobo file server)
  4. Using OneNote, set up notebook that would be sitting on the network drive. Depending on the Windows account, you can set up different permissions on folders of this network drive. Maybe the doctor can only modify certain records. That can be managed through these permissions.

Set up these OneNote notebooks with its sections. Each section would have a list of topics/pages. For example, you can create a notebook called "Patients". Then the sections would be the patient name and account number. Each section/patient would have a list of pages and each page is really a record of that given customer.

Each page/topic in OneNote could follow a simple naming convention (i.e.  start with the date 2013-04-28 and then the subject or reason for patient's visit).

The search feature in OneNote is very powerful. In this case, if you search for the patient's account number, it will find all occurrences as you are typing the number in the search box.

Let's assume, the patient wants all the their records or specific records. In OneNote, you can easily go to the section for that given patient and send all/some of the notes into a PDF file, MS Word and many other formats. Then you can zip up this file with 256-bit encryption and securely transfer it to the customer via many different online file-share solutions instead of sending emails; we all know that emails are not secure and emails cannot handle large attachments.


  • It does not cost you anything to prototype/implement this solution if you already have Microsoft Office.
  • Your staff can easily be trained on OneNote. There are many free online tutorials or local training programs that are affordable.

Keywords: #onenote #notes #notetaking #database #dentist #doctor

Wednesday, April 24, 2013

Production Launches and Having/Getting The Confidence That Your Code Works

Production Launches and Having/Getting The Confidence That Your Code Works

There are many approaches that you can take in verifying that your code is robust. Let me list a few of them:

  • Writing robust code that is easily maintainable. Maintainable code becomes robust in the long term. Keep it simple.
  • Having good code-reviews that detect and prevent severity #1 issues in your production environment. Typical issues that can be prevented are the ones that are abusing the frequency of I/O, memory utilization and string manipulation that is the subset of memory manipulation and CPU utilization.
  • Automated unit-testing and continuous deployments to your Dev environment. Automated integration testing is even more important/valuable. 
  • Having two types of QA resources: One QA resource would be executing the test-cases that cannot be automated. Another QA resource would be doing what I call free-form testing. Free-form testing requires you to have full understanding of all your products and you have to be the super-user of that application/site/system.
  • Having deployments automated to the point where you just clicking button but at the same time having post-deployment scans to verify if deployments were done on correct servers, correct folders and in completion.
  • Dashboard monitoring at the high-level with graphs showing the high-level state of your production environment. 
  • Monitoring the production environment (low-level events, logs...) before and after the launch so that you can tell the percentage change in the errors logged. Don't mix this with the dashboard monitoring that tracks the high-level state of your production environment.

You can do all the great work on the first 4 items, but what matters at the end of the day is if the last two items above are coming back with the positive results. If you don't have the last two items implemented, you pretty much don't have any visibility on the health of your systems in production and what customers are experiencing.

In what order do you implement the items listed above?

It all depends on your organization; however, you cannot be operating a business if you don't have the last items implemented from the checklist above. You can end up writing bad code and the last two items will save your day in the case when you deploy bad code to your production environment and in that case you can quickly roll back.

In the future topics, I will be writing more details on each one of the items listed above.

Keywords: #software #softwaredevelopment #softwareengineering #development #code #codereview #unittesting #integrationtesting

Sunday, April 21, 2013 / SkyDrive / Skype - Introducing Two-step authentication

Thank You Microsoft for releasing the two-step authentication for Outlook / Hotmail / SkyDrive / Skype. Thank you for listening to me :)     

Now I can start thinking about moving my OneNote notes into SkyDrive instead of having them reside in my local Google Drive folder that syncs the files into the cloud behind Google's two-step authentication.

The next move for Microsoft is to introduce some encryption on the data that resides in the cloud. I am talking about Dropbox type of encryption. Dropbox has two-step authentication and encryption as well. 

#twofactor   #outlook   #skydrive   #hotmail   #twostep   #microsoft

Thursday, April 18, 2013

Keep It Simple - Writing clean code - How clean can it be?

Keep it simple.

I am talking about writing simple code. You may ask what "simple" code is.

Let me first explain what simple code is NOT:

  • It is NOT about hard-coding
  • It is NOT about writing complex code and then commenting so much to compensate for its complexity.

Keeping it simple means:

  • Writing code that is self-explanatory and minimal comments to understand the concept. Overdoing the comments puts you at risk that the comments become obsolete as the code below changes.
  • Writing code that is configurable, but not over-configurable. If you find your self writing extensive documents to explain how the configuration works, then you are doing something wrong. You are either over-configuring it, OR you need a configuration tool that will manage your configurations in a presentable fashion.
  • Writing code that you can understand 6 months from now and more importantly that new software developers can understand when they join your team.
  • Writing code that is flexible enough that you can soft-launch any day to production without impacting the behavior in production. Depending on the build methodologies in your company, this type of approach can save you incredible time and resources.
  • Writing code that uses technologies and methodologies that are best to solve your problems and best for implementing functional and business requirements, and NOT using technologies/methodologies that are a trend and you find a way to utilize it in your code to meet the functional/business requirements. Do the right thing.

Keywords: #software #softwareengineering #coding #code #coding101 #keepitsimple

Sunday, April 14, 2013

Why is compilation considered evil in software engineering when plugging in new modules? Did we cross the line?

Why is compilation considered evil in software engineering when plugging in new modules? Is it really? Why have we gone so far as the software engineering community?

Since the introduction of XML, the software engineering community has reached the point where for some reason the compilation of your code code has been looked down upon. What do I mean?

I am talking about developing your application to the point where you can change configurations and plug in new modules without requiring anybody to compile your code. This sounds very fancy and it has been the selling factor from the engineering community to the management/decision makers.

The question is: Have we crossed the border and reached the point where the code is very complicated and not maintainable and where the value of this level of configuration is not worth anymore. 

You have to put yourself in the position of a new software developer joining your team or even a long-timer developer who has not worked in that area of the code. How easily can they configure and plug in new modules and how confident they are that they are configuring it properly. If they are struggling with this, then it's not worth it. If your configuration files are becoming so complex that you need to write documentation on how to configure it, then it is not worth it. It is not worth it because your configuration files are becoming so complex that you are writing your complex code that parses these configuration files. Essentially you are building something that is home-grown and we know what the downsides of the home-grown rule engines are.

Please do not misunderstand me. There are software applications that really require home-grown confidential rule engines and this mostly applies to software applications that are very static in its nature and all you are doing is just configuring bits and pieces and plugging in modules to it. However, most software application are NOT static in its nature; they are constantly changing as business requirements are changing. So in that case, you are developing a module that you want to plug in, but you still end up changing the code in your core application anyways. So what did you gain by over-configuring it?


It is very good to have your software configurable and configurable only to the point where your configuration is self-explanatory and where your code is self-explanatory. Once you reach the point where you need to train software developers how to change the configuration files, then you are crossing the borderline of over-configuring your software for the benefit of not compiling code when you are willing to plug in a module. Compilation is not evil. If your build methodology is very robust, then you will be able to build your code fast, push to production fast and at the same time you are keeping your configuration simple to the point that you don't need to train your developers. 

Keep it simple !

Keywords: #software #engineering #development #compilation #configuration 

Wednesday, April 10, 2013

2009 BMW 328i Coupe, automatic - My Test-drive

2009 BMW 328i Coupe, automatic

I test-drove my friend's BMW 328i with tiptronic and Eisenmann cat-back exhaust to compare it to 128i manual that I drove earlier. Let me say that this BMW is just 10 times better with the tiptronic transmission and this is coming from a guy who has drive manuals most of his life.

If you remember, I liked 128i, but I did not like the very soft clutch that complimented the manual gearbox.

Let me get to the 328i review. BMW 328i also has a 3.0L (230hp) naturally aspirated engine which revs so freely, smoothly and fast which I am fond of. The car handles as if it's on rails because it came with BMW factory sports suspension. BMW tiptronic transmission is just better match for this engine because the engine revs so fast and with tiptronic (that shifts relatively fast), you can nicely push this car to its redline and shift quickly. The downshifts are also crisp. I've always driven cars with manual transmissions, but sorry dear BMW, the clutches on these manual transmissions are too soft for my taste.

However, BMW 3.0L engine, with the sport suspension and tiptronic transmission is just an awesome combo.

Let me get to the review of the Eisenmann cat-back exhaust that my friend had installed on his BMW 328i that I drove. This is the best quality exhaust that I have seen. It gives you that extra power and pull at the low RPM and it just sounds awesome. The sound is so deep and it makes you shift through gears up and down with a big smile.


This is a great car. If you are ready to buy something luxury, respectable power, good handling, well balanced, then this is something you should consider.

Keywords: #bmw #328i #carreview #autoreview 

Monday, April 8, 2013

Web (MVC) and App Tiers - Diagram/Presentation

Web (MVC) and App Tiers - Diagram/Presentation

Here is a little diagram and/or presentation on the Web (MVC) and App tiers that you could use in your implementations. Remember, keep it simple!

Keywords: #mvc #ntier #prezi #wcf

Saturday, April 6, 2013

PGP 101 - Public vs. Private key - Which one do I handle?

PGP 101 - Public vs. Private key - Which one do I handle?

If I am sending you encrypted data and you are trusting the source, then
-          I generate the public/private key with passphrase
-          I encrypt with my private key
-          You decrypt with the public key

OR if you want to know who is sending you encrypted file then
-          you generate public/private key pair with passphrase
-          I encrypt with your PUBLIC key
-          You decrypt with your private key

Keywords: #pgp #privatekey #publickey #key #encryption #security

Friday, April 5, 2013

2011 BMW 128i 6spd manual (230hp) - my test-drive

2011 BMW 128i 6spd manual (230hp) - my test-drive

This car is fast in "sporty" category but definitely not a sports car. The 3.0L engine is lively and likes to rev. The power range is definitely at high RPMs; you need to rev it high to feel the torque. The clutch is very very light which is not good for any car over 200hp. It is so light it is very hard to shift the car from 1st to 2nd without jerking it. This seems to be the trend with the cars these days. I might just need time to adjust.

The car handles really well for a daily driver; I like the sports suspensions on this car; it is not harsh when you drive it straight, but it hugs those corners when needed.

The sales guy drove the car off the lot; he drove it so hard and took corners so hard to show off the car and then he parked it on the side of the road and allowed me to drive it. He showed me some curvy roads and he allowed me and even told me to go faster through some corners.


If you are looking for horsepower and torque, this is car is not it; you should just go for 335i or the new 328i that comes with a turbocharged engine. However, if you are looking for all-around car that likes to be driven hard and handles great, then this is the car. 

It all depends on how much you are willing to spend. If you are willing to get something with similar performance and front-wheel drive, then you should consider VW GTI as it has good quality interior worthy of a $40k car.

Keywords: #bmw #128i #carreview #autoreview

Thursday, April 4, 2013

2012 VW GTI (DSG 6-speed) - My Test-Drive

2012 VW GTI (DSG 6-speed)

I test-drove a 2012 VW GTI (6th gen aka Mk6) with DSG 6spd transmission before the 7th generation comes to our shores.

I like the quick shifting double-clutch transmission. The transmission is a great match with this lively 2.0T engine that feels faster than its rating of 200hp.

The suspension is great for a daily driver and you can still take those corners fast. It has more neutral feel to it than the typical understeer that you get with front-wheel drive cars. Great job VW. I would prefer if they installed a slightly stiffer suspension, but I am might not be the majority or the group they are targeting. 

The interior of this is as good as interior of $80,000 car. All the detailing and stitching, the dashboard soft touch, the perfect seats and so on....

I like that hot hatchbacks in manual, but this car with the DSG transmission is one of the cars that might stop you thinking about that. The key word is "might"; it is up to you to find out.

- one of the best cars in 20-30K range and even better than many cars in 30-40K range
- handling is great for a daily driver and for some aggressive driving.
- interior is just perfect
- DSG transmission might stop you thinking about that proper manual transmission

Keywords: #vw #gti #volkswagen #carreview #autoreview #dsg

Monday, April 1, 2013

Cloud Storage and Encryption - Consumers need more confidence

Cloud Storage and Encryption - Consumers need more confidence !

When you save the files in the cloud, the cloud storage companies need to:

Inform consumers that they are encrypting the files (via pop-up on first few uploads).

Provide optional 256-bit encryption on folders using a password other than your account password.

This will give consumers more confidence about storing their information in the cloud. For example, Dropbox and Evernote encrypt your files/notes in the cloud, but I don't think it is well advertised. You have to dig into "Learn More" areas of the site to find this information. Wouldn't be cool if occasionally you got a pop-up saying "you are safe; your data is encrypted in our storage" if you are not a frequent user.

To my knowledge, I don't think that the data on Google Drive is encrypted. As you know, Google Drive already allows you to unzip a file directly in the cloud and browse through the zip file. I wish that Google also provided something opposite of this and that is: Providing us an option to zip up a folder and even apply 256-bit AES encryption on it supplying the password on the spot. This would mean that we as consumers would not have to move that file to a Windows/Mac computer, get it zipped and encrypted and then move it back in into the cloud.

I talked about Dropbox, Evernote and Google Drive; I am fairly new to SkyDrive and I am not sure what (if any) encryption is offered. I would feel confident having my OneNote notes in SkyDrive if I knew what type of encryption was done.

I think that we will get there soon as more and more services are becoming available via cloud.

Keywords: #dropbox #googledrive #skydrive #evernote #encryption #cloud