These are some tips I use to minimize the amount of junk email I receive:
- I never ever give out my work email address to anyone. Only to close friends and to work related contacts. I never use it for any web site. I use Outlook with notifications turned on. I do not need the extra distractions from notifications about incoming junk mail while I am working.
- I keep an extra free web based email address which I use only for the sites which ask you for your email address to get their 'freebies'. You know.. the sites who will send you a link to download the trial software, the free eBook, the free newsletter, the free report... etc. The main reason they are offering these free stuff and which are only available by email is so that they can grab your email address and have a way to reach any time they want to. They might also sell your email address to affiliates, spammers and all the people you don't want to get emails from. This is the email address which you will never check. Check only receive the offer which you subscribed to originally.
Set the inbox to forward all the messages to the Trash folder so that the inbox stays clean. All the free web based mail systems delay deletion of messages in the Trash folder. In case you might change your mind.
- You will probably notice something like "We don't share your email address with anyone" or a privacy clause next to the email field. If there's no interest in receiving any emails from them, play it safe and give them your throw-away email address. While they might not share your email address, they themselves might start sending you messages you're not interested in. Some fine print could mention they can share the email address with their affiliates and partners.
- Use the different spam filters your mail client and mail provider provide.
Just be careful and every time you use your email address in a web site, ask yourself 'Do they really need my email address. Can I get away from giving them my email address without negative impact' and then choose the proper action. If the email address is a required field in the form, use your extra email address.
Arrrggghhh! Big waste of time today troubleshooting a hardware issue. But I am happy to receive a new fast laptop.
Yesterday I received a new Dell laptop at work with Windows 7 preinstalled. I attached my Logitech wireless bluetooth to it and Windows didn’t recognize it at all! I received an error that the device driver didn’t install successfully.
I installed the SetPoint software, the mouse’s software from Logitech, and got the same problem. I knew there was a problem before installing SetPoint because Windows should recognize the mouse in the beginning as a regular generic mouse.
Every time I connected the bluetooth receiver, a Broadcom device driver would display in the device manager with a status of ‘could not start’. I noticed there was another bluetooth driver from Dell and figured maybe there’s a conflict between the Dell and the Broadcom drivers. So I disabled the Dell driver. Still same problem. Another thought was that maybe the onboard bluetooth receiver was interfering with the mouse receiver so I disabled the onboard receiver in the BIOS. Same problem. OK now this problem is starting to get annoying because I am running out of ideas. I Googled and noticed that there were a few articles about switching from Toshiba bluetooth stack to Microsoft’s. Vendors are replacing Microsoft’s bluetooth stack.
I know that laptops and computers from known vendors come with preinstalled drivers and software. All the computers I used before where non branded computers which I built myself and I never had any mouse issues. My home computer uses the same mouse. Looking at the device manager on the home computer, I didn’t see any Broadcom drivers. I concluded the Broadcom driver on the Dell laptop must not have come from the Windows installation but from Dell.
I scanned the programs installed in the control panel and noticed a ‘WIDCOMM Bluetooth Software’ entry from Broadcom. I decided to uninstall it. I also uninstalled the Broadcom device driver with the option to delete the files. Rebooted the machine. Connected the mouse receiver, and VOILA, Windows installed the Logitech device driver successfully.
It took me a long time of various trials and troubleshooting attempts to find out finally that a preinstalled software was conflicting with the mouse driver.
So if your bluetooth mouse is not working on a new computer, see if there’s a bluetooth preinstalled software which might not be compatible with the mouse and uninstall it. It’s common from companies like Toshiba and Dell to install their own drivers and software.
I watched the movie "The Social Network" the other day and it was interesting to learn how Facebook got started. While I knew about Facebook since its early days when it was exclusive to university students, watching the facts in a movie is a different experience. It gives you a closer look and a human face. The movie resonates with me because launching successful websites and web applications is what I do for a living. I am a late comer to Facebook because I am not really into social networks. Never bothered to join any of these sites until I started getting a few friend requests for Facebook from my some of my old friend and so I decided to check it out. Also because of constant barrage of news coming towards me about it and i wanted what's all hype about.
The movie is about 2 hours long but I felt the movie went by pretty quick. I heard it uses a technique where the frames play at a faster speed but the viewer's watching it as a normal movie. This way they can cram more movie material.
I am not sure how this is done but I am guessing this method will be used in more movies. It must be flattering for Mark zukerberg to have a movie about him. They used real names for the people involved with Facebook. If you knew about Facebook and its history in advance, the movies might feel like a bio or documentary. The movie provided me with more detail starting from the Harvard days. The actor who played Mark, Jesse Eisenberg, was pretty good. Coincidently, the next day I was listening to a podcast with the real Mark, where he discusses Facebook's current and future plans. The two voices & characters are pretty different.
I joined Facebook with a main expectation of getting connected again with some old friends & acquaintances from school and college days and relatives. As of now, almost all of my FB friends I have are people I personally know. part of my effort of limiting my online noise, is not accepting invites from people I don't know.
Different people have different experiences with Facebook. Some love it and spend hours every day playing online games, chatting and posting messages. (advertisers target these types). On the other side of the spectrum, there are ones who checked in once and never bothered to come back. In between, you get the pretty active users and the 'lurkers'.
Personally, FB with 500 million users, I had higher expectations of finding old acquaintances. There are of people I know who are not on it. A few more billions to go and it should get easier! While I see the 80/20 rule being popular, on my Facebook I would say 90% of the activity comes from 10% of the friends. The remaining "friends" and pretty inactive. Too busy, too lazy or simple don't care?
Facebook is about connecting with people. By communicating with people. You can communicate with others by talking about yourself, your day, your thoughts, your hopes, your feelings, your kids (be proud of your kids).. etc. Post photos of your happy moments, your past and present.. and your kids. (Did I mention kids twice already?) It's not just about posting links or quotes or news. It should be also about yourself. I believe if you're being too private or too silent, you don't exist. Out of sight, out of mind.
Today I read that Facebook's pre IPO valuation is $41 billion! In the movie credits it mentioned it was $25B. The real value will be known hen Facebook goes public. Facebook is a trend setter. It's enabling sites like cnn.com and nytimes.com to be more social. You can see Facebook widgets and connect on millions of sites. Google sleeps with an eye open on Facebook. Rumors have it that MySpace is closing down. Well this rumor has been going on for a long time but I won't be surprised if MySpace and other social network sites disappear. Facebook is just crushing it. It's an amazing success story where a 20 year old creates a multibillion company in a few years and is still growing at a neck breaking speed.
There are many privacy concerns with Facebook. As a rule of thumb, consider anything you post as being public. Privacy rules change all the time. Read the fine print. One of the reasons I don't use any FB apps is because I get the prompt where I give the vendor access to my information. I don't know what kind of information they will get and FB doesn't make that clear. I play it safe. There's no app or game I need to be using on Facebook. And My profile is empty.
Be smart. Don't post something if you think it would offend someone or can be used against you in any way. By your current employer, by a future employer, by a competitor or even your spouse. You can delete a post of yours if you think it was inappropriate.
[Note: this post is not about how to get more reputation, badges and such. It's about how to get the answer you want quickly]
I have been using Stackoverflow.com (SO), a Q&A programming site, since the beta days and I have acquired some skills on how to use it in a most efficient way. Let me first say that SO is a great and very helpful site. It's easy to use, focused and full of valuable information and if you don't find what you want, you are encouraged to ask. Questions and their answers is what makes SO the site it is.
Here are some tips on how to use SO efficiently:
- This first tip is the meat of my blog post which I want you to concentrate on. Of all the SO tips I read, no one mentions this one.
SO questions somehow suffer from what I call attention deficit after 48 hours. Meaning to get the most out of your question, you have to be very active during that period and the first few hours is the most crucial. You should start checking answers 5 minutes after posting a question. SO users are very active but because they are so active, then tend to bounce from one new question to another. So you got to make your 'killing', finding the answer which 'saved your life', early on. You need to make your question alive by commenting on other comments which require feedback. Someone posted a comment question? Answer them quickly before they lose interest or 'wander off'. You also need to reply quickly to comments before others start posting generic or non useful answers. Your comments should dissuade people from posting answers which won't be helpful. The more non helpful answers you get, the less people are encouraged to post a good answer. That's because they have to read other peoples answers before posting their own and ensuring theirs won't be a duplicate or potentially wrong. You need to put your question in a state where it exhausted all people's questions, misunderstands, miscommunications, ambiguity in the first few hours. Yes.. you have to milk the question and extract the juices as quickly as possible. And there's nothing wrong in doing this. Isn't it beautiful when a question gets several up votes, gets a high quality accepted answer with several up votes with zero irrelevant answers? This is as good as it can get.
- Make your question have a clear focused subject. Make the question itself clear, with sample code and all the steps, trials and thoughts upfront. For difficult questions, you need to show the users you did your homework. This way they understand what direction you're taking to resolve the issue. This way users get better in helping you. Also it helps a lot in minimizing the answers which are the stuff you already did and know about. Less clogging. It's unproductive when you get answers and tell yourself "I already did that" or "I already tried that. it doesn't work" .. "I should have mentioned these in the question".
- Ask a question with as many relevant tags as possible to the max of 5 which SO allows. You want to reach users who search new questions by tags only.
Before asking a question so a search on SO. Use different keywords and terms. You want to make sure the question hasn't been asked in one form or another. Use synonyms for the keywords you know. Different users use different words for the same meaning. You don't want to post a duplicate question. Man.. on SO there are people who I want to call the "duplicate sharp shooters". The will find your duplicate question, comment on as being a duplicate, close, move it, bury you alive in 5 minutes. I am exaggerating of course but things move fast on SO. You won't gain anything by being a slacker. SO provides different search capabilities like by title and by tags. You can also use Google itself to search SO.
You might find your answer on another site. A site that uses a bulletin board software (wink.. wink!)
- Last, get more insights from Jon Skeet's, a SO celebrity, "Writing the perfect question".
I think it's a mistake for Microsoft to charge $99 for all developers across the board who want to put ANY app on a WP7 phone. It worked for Apple and it seems Microsoft thinks it should work for it too. The iPhone can do this because it's the first multitouch phone and it sold millions of it. Windows Phone 7 (WP7) on the hand is just coming out into the market when multitouch phones from Apple & Android based are selling like hot cakes. Microsoft is competing with fierce competitors who have created established markets and who offer multitouch phones with tens of thousand of applications and selling tens of thousands of the devices each day. The WP7 doesn't seem to offer gotta-have-it features which will cause current smart phone users to switch.
As a .NET developer, I am attracted to the WP7 platform because I can create an app for it with the skills I already have. For the iPhone, I have to learn a new language, a new operating system & get a Mac computer and pay $99/year for the AppStore. A steep learning curve plus expenses. I will go through this if I am planning to make money off the iPhone. Less so for Google Android; I can use my current computer with Windows, pay no fees, install an app straight from my computer but the drawback is learning Java.
With Microsoft I have to pay $99/year. This is another example of Microsoft being a follower. It's copying Apple's process. A lot of .NET developers develop for fun. Develop for open source projects. So why can't this be extended to the WP7 Platform? If I want to create a simple app even a Hello World app for my WP7 phone (I don't have one yet.. if ever), to be installed on my phone only, I have to pay Microsoft $99.
If I can't code for fun or code for personal use, I will be discouraged to get a WP7 phone and create professional or commercial apps for it. If enough developers have the same attitude and perspective, Microsoft will lose out if its platform is not adapted on a bigger scale. Steve Ballmer says developers.... developers... developers.. (but put a $99 if you want to put anything on your own phone).
I still own a Windows Mobile 6.5 phone. I can install any app on it at will without going through a third party or pay any fees. I wish this could be extended to WP7. I understand each mobile platform provider wants to have a marketplace. There still needs to be a way to cater for developers who want to develop for leisure and for personal use.
Google Android has the most flexible platform with no fees. It's no surprise 160,000 Android phones are activated every day. Apple is able to charge all developers $99. They were first with a multitouch phone and an AppStore, they like to control everything and Apple users are fanatics and they sold tens of millions of iPhones. Developers will not blink to pay $99 because their audience is huge.
There are users who are more productive using the keyboard only. Data entry applications are optimized for keyboard use only. For this reason web forms should be usable and frictionless without the use of a mouse.
Steps to create a keyboard friendly web form:
- When the page loads, put the cursor focus on the first field. Example in In jQuery: $('#FirstName').focus() in the ready() function.
- Use tabindex for each form element and give values in increasing order. This enables the user to tab into the next field. Tip: leave a gap between the values so you can insert new fields without sequencing the tabindex values.
- Let the form's default button be the submit button. Example in ASP.NET: set the form's DefaultButton property.
There’s one blog I subscribe to and it’s starting to bug me. The author tends to just have a short title and only a link in the body of the post. I find this annoying because I can’t decide if the post is of interest to me or not. The person expects me to follow to the link to find out. This show lack of consideration of people’s time. It takes only a few seconds to type one sentence to tell us why we should read the post or what the person posted the link.
Even Twitter with its 160 character limitation conveys more information than this person’s blog. Maybe its time to unsubscribe even though the person is an expert in his field. He needs to give the blog some more love.
I appreciate short blogs and my own tends to be short but never extremely short where I post a link only.
Password fields are masked for privacy reasons. So no one can see your password and use it. When was the last time I had such a concern? NEVER! Whether at home or at work, there’s no one behind me looking at my monitor. But passwords are always masked? I suggest adding a check box next to the password as an option for making the password in clear text. I am always for giving options to the user. When I can see the password, I can correct a misspelled password before submitting it. It’s annoying to be denied a log in or get a captcha or be locked out from a system because you entered the wrong password a few times when you could have easily confirmed your entry before submission.
For certain fields in a form, don’t force users to enter the data in a certain format. Let the user enter their phone number in the fashion they are comfortable with. (555)555-1234, 5555551234, 555-555-1234 & 555 555 1234 should all be valid phone numbers. In your code, extract the digits and validate. Display an error message only if you don’t get 10 digits for US numbers. Remember that other countries do not have the same US format. Better, do no validate the phone number unless the number is really needed. Personally I do not like to give my number away and I enter 555-555-5555 if it’s a required field. I would put my real phone number if they have a valid real reason. I see this often for trial software downloads. I don’t want a sales guy calling me. Use email if you want to contact me. I will buy the product if I need it, not because of a sales pitch.
Domain name or url field is another example where I see “don’t add http://” or “don’t add the www” instructions next to the field. The user should be able to enter a domain name and the programmer should be able to write a few lines of code to strip these off. Don’t move the burden to the user when a computer can happily do this work in a fraction of a second.
You can use a mask edit field which helps users enter the data correctly. Use this judicially. Some users do not like or understand why a keystroke is not responding.
Last, trim the fields from white spaces. There were numerous times when I get a password by email, copy it and enter it in a password field and see the login fail. Why? Because the copy copied an extra space after the password and the system didn’t match the password because of the extra space. I didn’t see the space because the password field is masked as *******. So always trim the input before doing a match or compare. Passwords are one words so there’s no reason to suspect any spaces for errors.
Being fast and multitasking on a PC, a slow computer which can't keep up with me is a big productivity drain for me. Hundreds of times of milliseconds or seconds of wait time a day add up quickly to a big waste of time. A compile time of 30 seconds for example, will cause me to context switch to do something else like reading an article or surf the web... which will take more than the 30 seconds which I didn't want to wait for initially, and this means even more time spent unproductively.
A few months ago I took upon myself to upgrade my computer to make it very fast. First by upgrading the hardware and then by doing all kinds of operating system and software optimizations and tweaks to make the PC run as fast as possible.
This is what I did to get my computer running very fast. This is not an exhaustive list but are major steps one could or should follow. As a .NET developer, my goal was to make Visual Studio environment work super fast because it’s the tool I spend the most time with:
Note: I built two computers; one development machine and one server. So cost was a big factor without compromising quality. Unlike some people who go for the most expensive high end part, I go for the sweet spot in performance/cost.
- If you have only one choice to upgrade, that would be memory. More memory.. more memory and add as much as you can. Windows, SQL server and Visual Studio LOVE memory. To minimize memory paging, disk thrashing & page file usage and maximum caching, there should be lots of memory around. I also using DISK RAM which uses part of physical memory. I went with the maximum my motherboard allows. So I went with 16GB DDR3 1600Mhz. Amazon Komputerbay has the best prices. or go for better known brands.
- I decided to get AMD Phenom II X6 1090T Black Edition Thuban 3.2GHz 6 core. At $255.99, as of today at NewEgg, it's a great performance/value. While Intel's 6 core offerings are faster, they're a lot more expensive. The Intel Core i7-980X Extreme Edition is 4 times as expensive as the 1090T but it's not 4 times better. Not 3 times better.
- For the motherboard, I only like ones from Asus or GigaByte. My criteria was to get one, which supports the AMD CPU, has lots of USB & SATA ports and at least one PCI slot to support my telephony card. I don't care about overclocking but the motherboards I got had nice automatic overclocking features. My experience with overclocking is not good. The system gets unstable. 3.2GHz is plenty enough and let the CPU run at its nominal settings.
- I didn't upgrade my two port graphics card. I am not a gamer and the gfx card I have is powerful enough for the few games I play and certainly works for development purposes. If you go with a high end gfx card, make sure it doesn't give out too much heat. You don't want to end up with a room heater! Some of these high end gfx cards are overclocked cheaper same model ones.
- The real bottleneck in a computer is I/O. , which is mainly the hard drive. I am not buying any more hard drives except for backup purposes. SSD's (solid state drives) are the future. I am predicting the hard drive to be obsolete in a few years. An SSD is much faster, smaller, uses much less power and is silent. However, they are more expensive per gigabyte. Prices are going down all the time with more brands coming out. I opted for the 160GB Intel X25-M. It gets good reviews. Make sure the one you get is G2 (generation two) or better which supports TRIM. SSD technology is improving fast so do your research first. You might find better SSD's now than the Intel. Maybe from OCZ? See my own benchmark stats, which show an SSD is much faster than a typical hard drive. The benchmarks below show the very big difference between SSD’s and hard drives in terms of transfer rates and access times. 0.1 ms vs. 14 ms access time means the SSD is 140 times faster than a hard drive in finding a file.
- The last 3 points are not performance related but worth mentioning when building a fast computer. Get a good quality power supply with a quiet fan and with enough power (500w or more). A large radius fan moves more air with fewer rpm's. There are also some fanless power supplies, but I don't believe they work well in a warm area.
- A CPU with heavy load could produce a load of heat. I opted for a water based CPU cooler because water is a better heat conductor than air and the fan doesn't have to spin fast, equals less noise and longer life.
- I am very picky about computer noise. It has to be very low. Usually getting powerful components means getting components with fast spinning noisy fans. I have my computer is closed closet in my office room. This masks out most of the noise. Most of the noise right now is coming from the hard drives. Eventually, these drives will be gone, and only SSDs will be used, thus cutting out most of the noise. Right now large capacity SSDs are very expensive.
SOFTWARE & TWEAKS:
- If your computer has more than 4GB memory (8GB should be the minimum) there's no choice but using 64bit Windows. Windows 7 64bit. No sense using XP 64bit, which is pretty old. Windows 7 has some good enhanced caching & prefetching mechanisms than earlier versions of Windows.
- Use the AHCI driver. Before installing Windows, switch the BIOS to use AHCI for SATA. You can also switch to AHCI post Windows installation. My benchmark testing indicated better SSD performance when AHCI was enabled before Windows installation. The AMD AHCI driver which I installed later doesn't seem to support the TRIM function necessary for the SSD so I rolled back to Microsoft's (msahci.sys). Make sure your motherboard's chipset supports it.
- Storage access is the slowest computer operation. If disk access is as fast as possible, you will notice dramatic improvement. SSD can make this happen. I went even further by incorporating a RAM DISK. A RAM DISK is a portion of computer physical memory which behaves very much like a physical drive. It has a drive letter like a real drive. With 16GM memory, a ram drive would work very well without memory constraints. I used a RAM DISK 64bit version from this site. It has nice features like loading and saving the ram disk between reboots and dynamic adjustment of size. If you use a ram disk with persistent storage between reboots, make sure the drive doesn't get filled with orphaned files over time.
- Create subfolders in the ram drive for all the temporary files. I have one subfolder for Windows temp files and another one for ASP.NET temporary files. Visual Studio 2010 gives a very non informative non related error message when ASP.NET temporary files where written to the root folder of the ram drive. The files need to go to a subfolder instead.
- Change the system's temporary files’ location to a subfolder in the ram drive. Go to Computer->properties->advanced computer settings->Environment variables- and change the user and system Temp & TMP locations to the subfolder.
- Visual Studio writes and deletes lots of files in the ASP.NET Temporary folder when running and compiling ASP.NET apps. By default the location is at C:\WINDOWS\Microsoft.NET\Framework\vxxxx\Temporary ASP.NET Files where xxxx is the framework version number. You want these files to go in the ram drive. As explained above, it only works if inside a subfolder and not the root folder. Go to each machine.config file and add this section under <system.web>. Mine looks like this: <compilation tempDirectory="T:\ASPTemp"/> where T is my ram drive.
- Heavy writes to an SSD will shorten its life. While it doesn't have mechanical parts, an SSD has a finite number of writes in its Flash cells before they go bad. Another reason for using a ram drive is to offload the frequent writes and deletes of temporary files from the SSD to RAM. You get better performance plus extending the life of the SSD.
- When using an SSD, NEVER use disk defragmentation. Defragmentation causes a ton of writes and deletes to an SSD. A bad idea. Furthermore, turn off the indexing service and prefetching service. The access time in an SSD is very short compared with a hard drive. See the stats in the images above.
- Turn off all services which you don't need ever but be careful here because it can be tricky. For example, you don't have a printer attached to your computer so you decide to turn off the printer spooler service. This actually could cause problems for some software like some pdf printer drivers. If you have lots of ram, to be on the safe side, leave the services as is.
- There are some discussions about misaligned partitions, which degrade disk performance. Read a quick guide about this issue. Read also about where this issue can cost hundreds of thousands of dollars. My hard drives had alignment issues. See the 8032 BAD in the image above. 8032 is not divisible by 1024. I used the Partition Alignment Tool from Paragon Software. I am bringing up this issue just as an FYI. Others might benefit from it. Note that Windows XP installations caused this misaligned partitions because it created the reserved boot sector and Windows installed itself starting from an odd sector. Windows 7 doesn't suffer from this. You can see from the SSD stat above it says 103424 OK (Win7 reserved a 100M partition before the boot partition). Make sure you back up your drive whenever you use software which changes the drive's structure.
The benchmark below shows the stats for the same Maxtor drive after fixing the alignment. Instead of improved performance, the scores actually decreased! I am not sure what to make of this. AS SSD shows the alignment setting. Notice the tooltip in the SSD figure above. If it’s a green ‘OK’, the alignment is fine. If it’s a red ‘BAD’, it’s not.
- The Intel SSD comes with a Toolbox software which optimizes the SSD. Either use it manually at good intervals or schedule it to do the work automatically. Use the Toolbox to check the health of the SSD. I don't want to be surprised by its sudden death because I ignored its health. SSD's are new to me.
- Leave some free space on the SSD like 10%. I don't know the inner workings of an SSD but I think the SSD tries to use the cells from the free space when it detects used cells almost dying. I know an SSD comes with extra cells for this feature but if those extra ones are used up, i am guessing it will use the ones from the free space. I do know the Intel X25-E (not X25-M) SSDs are more reliable and have extra backup cells. One reason they cost more.
- With 16GB memory I thought I didn't need a Windows page file anymore but according to some people, Windows 7 still uses it even if there's lots of free memory. I guess this is due to some legacy code in Windows.
- I have used many small tweaks here and there to squeeze out more performance. Spend your money on more memory instead of doing marginal upgrades like replacing a 2.6 GHz CPU with a 3.2Ghz. You will probably not see much improvement. 16GB enables me to open 3 instances of Visual Studio which do their work very fast. I could even put the databases in the ram drive and have the queries run extremely fast. (I don't worry about database data loss in a development machine).
- Finally, Tweak and experiment and learn how your system behaves.