Everyone talks about the workplace of Google... and just look and pictures and say ooh la la...!
Well let's get real...!
http://www.fastcompany.tv/video/the-innovations-microsoft’s-new-research-building
Some half baked ideas, by Don, about Tao, Zen and the art of converting coffee into code...
Everyone talks about the workplace of Google... and just look and pictures and say ooh la la...!
Well let's get real...!
http://www.fastcompany.tv/video/the-innovations-microsoft’s-new-research-building
There was a senior manager from the leadership who had a meeting with the entire team today. He was telling us about his career and about what he had done throughout his career, going a little into the details of a few selected projects, his achievements, some interesting stories of despair, struggle and finally success... Hell leaderships don't even talk about failure now do they... But that doesn't mean they haven't seen any... :)
But while I was listening to it I could make out who that man was? That's the crux of this post? Who are you...? You are not your name... Your name just represents who you are. It is a facade. You can define yourselves with your relationship (Son of ... or Father of ... or Husband or Wife of...) But is that really you...?
You could define yourself with your profession... Senior Developer at Microsoft or Vice President for that matter... But is that really you...?
So I am what I contribute. At home, at work, at play. To my family, to the organization I work for and to the society too. So it seems I am a lot of people :). I always say the ultimate purpose of humanity is to grow. Smarter, stronger and better every passing day. So here are the metrics by which you grow.
You would be recognized by what you contribute to your immediate surrounding. If you contribute directly or indirectly to the business of the organization you work for, if you make it grow, you will grow. If you contribute to your family, if you contribute to your personal passions... They will know you by your contributions... that's what you are...
That's who you are.
I use Microsoft live Writer. I maintain a no. of blogs. One about tech, one about gadgets, one about religion and mythology, one about training my new pet "Boomerang" (a 2 month old yellow Labrador) and so on. So to manage all these blogs, I use live writer. It is pretty cool and dainty. It gives all word like features like spell check and text formatting, manages my photos, if I want to post one along with my Blog Post, and so on. One fine day I realize that one of my blogs on blogger doesn't post the blogs that I am posting through live writer.
After sniffing around a little I realize that it is the "Captcha" that I somehow need to put while posting my blogs. Since live writer isn't able to solve the "Captcha", it is not being able to post my blogs on that particular blog.
So I click on the link that says "Why do I have this?" and I find out that "Blogger's spam-prevention robots have detected that your blog has characteristics of a spam blog." and that "Since you are an actual person reading this, your blog is probably not a spam blog. Automated spam detection is inherently fuzzy and we sincerely apologise for this false positive."
Now I have absolutely no issues with Blogger thinking that my blog is a spam blog. And in fact I think they are doing a pretty good job trying to prevent spam.
I was just wondering why this happened and how this could be made a little more user friendly. It happened perhaps because I am using Live Writer, which is in a way an automated blog posting engine. Which is exactly what a spam blog would probably use. I think the Blogger Spam Bots are doing the right thing.
So going beyond this point, I started wondering if the live writer in some way could report the issue to the author. I am sure there must be some kind of exception thrown on the blogger side when I was trying to post the entry without solving the "Captcha". Why did live writer not inform me? is that a test case missing in the live writer code? Why does Live Writer give me the feeling that everything is fine and hunky dory? Or is it that there is no way to find out whether the blog has been posted successfully or not? Should I report this? Well what the hell I probably should.
Last but not the least, Blogger is smart enough to store all the posts that didn't solve the "Captcha" as draft. So all my work didn't go a waste. I just had to go to Blogger and solve the "Captcha" individually. I hate to admit it, but I have to appreciate good work when I see it... Even if it is from the "enemy camp". Kudos Google...!!!
Now isn't that a gadget a man would love to own. Features you ask...? well here you go.
1. 6 Band Atomic Time Synch: This (for dummies) is a synchronization mechanism that tracks proper time depending upon the Earth's Geoid. The principal realization of the Earth's Terrestrial Time.
2. Barometer (Air Pressure range 260 to 1100 hPa)
3. Altimeter (-700 to 10000 meters): Does this also mean that it can go up to -700 meters under water? I wonder.
4. Thermometer (-10 to 60 degrees Celcius): Trust me dude you don't want to go beyond those temperatures.
5. Stopwatch (1/100 seconds, 24 hours with a split)
6. World Time (33 world cities, 29 time zones)
7. Countdown Timer (24 Hours Max)
8. 5 alarms (1 with snooze)
9. Full Auto EL Light (with afterlight): EL meaning Electro Luminescent. The watch has an EL Panel causing the entire watch to glow for easy reading in the dark
10. Tough Solar: There is a Solar cell that converts solar energy into electrical energy, which is used to charge the re-chargeable battery of the cell.
11. Geiger Counter (Soon to be added): A Geiger Counter helps in detecting radiation using Alpha and Beta Radiation.
Now should I show this to Nidarshana, what would she say? Is that a watch or is it a room full of machinery. Why do you need a watch that does so much. Why can't a watch just show time and look good and do nothing else. Why does everything in a Man's world have to be so Complicated?
So a Man's world is complicated. And as per her, its a woman's world that's simple... talk about it eh...!
For a long period of time there was a fad that windows is bad. Open source and anything anti windows was so cool to talk about. Ridiculing Microsoft products was a favorite time killer. People have slowly started realizing that not everything that they hear is true.
I have been using Symbian phones for quite some time now and all of them have been smart phones. Last weekend I attended a friend's marriage and his HTC Touch dual was with me for almost 3 days. This just made me realize how sweet windows mobile is.
It is small things that matter the most like a java application, when run, it gives a security alert. I get a choice to run the app once only or allow for the session or not this time or not this session or not at all. I cannot imagine what security threat it could pose on one run if it didn't on the previous in the same session. Or for that matter what across sessions. If it is safe once, isn't it supposed to be safe always...? Or is it that the OS doesn't recognise the app in the next session...?
Amd why are most of the apps designed for keypad phones and no extensibility for the touch screen browser phones...? I wonder...
A no. Of issue i notice with predictive text, handling, ergonomics, etc. So i conclude. symbian phones are good but when it comes to smart phones and its usability... Windows mobiles rule.
Hi,
I have a Sify Broadband connection at home. And I have a Net Gear wireless router. So now we have 4 laptops at home and all of them are connected. Plus I have a friend staying 2 floor above me(I stay on 6th and he stays on 8th) sometimes even he gets connected quite easily.
Problems:
1. Sify has a mac address registered. So when you take a connection for your laptop, Sify registers your laptops Mac address. A wireless router has a different Mac address so doesn’t work.
2. Logging in is a problem so sometimes you have to log in directly with your laptop and then connect your laptop to your router and the router to the external connection.
3. Sify needs a static IP. If you want all your laptops to be connected, you will have to go to dynamic IP once you are connected.
Resolutions
1. Call your Sify personal and ask him to set up your connection for a new Mac address of the router.
2. Go direct and log in. that means you will have to go static IP first, log in and then connect the router and go dynamic IP.
3. Your laptop for which the connection was taken will be the server and which will provide internet to all other machines. This also means you will have to stay connected with the wire while others enjoy a wireless connectivity. One of the machines have to be physically connected to the router as long as the internet is needed.
Switching from dynamic IP to Static IP and back is cumbersome. So I have written 2 batch files for the same.
“Static.bat” changes to static IP. Change the static IP in the file to the IP you require.
----Static.bat-----------------------------------------------------------------------------------
netsh interface ip set address name="Local Area Connection" static 10.14.65.11 255.255.255.0 10.14.65.1 1
netsh interface ip set dns "Local Area Connection" static 202.144.105.4 primary
exit
-------------------------------------------------------------------------------------------------
“Dynamic.bat” changes the machine to dynamic IP. No change is required in this file.
----Static.bat-----------------------------------------------------------------------------------
netsh interface ip set address "Local Area
Connection" dhcp
netsh interface ip set dns "Local Area
Connection" dhcp
exit
-------------------------------------------------------------------------------------------------
Hope this helps.
You are a juggler... Say you have unlimited supply of balls to juggle with... But you decide how many balls to juggle with... But you can't pick up balls while you are juggling... So say there is a man standing near you who at random throws balls at you which you may or may not decide to catch, while you are juggling with whatever you already have.
Let's start with one ball. How long would one ball juggling keep you interested. So you catch another one thrown at you. Let's say you are pragmatic enough to not catch a third ball until you are proficient with the 2 balls you are already juggling. Now let's say the man decides when to throw a ball at you. He is the decision maker and not you. So he might not throw a ball at you for a long time even after you have become proficient with the no. of balls you are already juggling with.
Or he may throw a ball of a different size or color that you may or may not like. So every ball thrown at you is an opportunity. You may like it and you may not. But you hardly have a split second to decide.
Of course you may decide to throw away one of the balls you are juggling with if you don't like it too much. And of course some of the balls are high priority that you must juggle with eternally. And of course you can't catch too many balls at a time or you drop the high priority balls too.
There is a trade off here. You get exceedingly proficient with the existing no. of balls as time passes. There is always a learning curve if you take up a new ball so the juggling proficiency goes down by a magnitude or two (depending on the size and color of the ball) every time you take up a new ball.
Let's call these balls your responsibilities. Let's call the man that throws balls at you fate. Let's call juggling "LIFE". The high priority balls are family and profession. The lower priority balls are things that you are passionate about. And the rest of the balls are what keep the zing in your life.
Like marriage. Every time the marriage ball is thrown at you, you decide to catch or not to catch in a split second based on your existing proficiency with the balls you are already juggling with, and your priorities. This ball is crucial because Mr. Fate may not throw another one at you for a long long time. Boy ain't life complicated...?
I have probably caught too many balls at this time. I am having some serious troubles juggling with family, profession, investments, health, guitar, Boomer (My new pet, a 40 days old cream Labrador), music, gadgets. And I am looking at picking up a couple of more balls to juggle with like marriage, learning sanskrit as a language, Tango and Salsa Lessons.
Am I Superman or what...!!!
Usability... Microsoft is known for it. She (Microsoft) has given birth to some of the most user friendly software known to man (and woman).
So the question is why oh why do we need a usability engineer. Why can't an Engineer, not think about usability. Sometimes we ignore simple issues like a two digit no. column on a grid is too darn wide and a description column which needs to be wide is too narrow for the description to be visible completely. Why oh why didn't we think about that before we were told by the user?
Because we were too busy churning out the high priority features so that they can be delivered on time. Too busy writing tests to ascertain the credibility of the application. Delivering non functional requirements like reliability, scalability, maintainability, security, and so on and so forth... Too busy designing, coding, testing refactoring... Delivering the bare necessities...
So the width of the column is the smallest thing in usability... there should be stuff thought of that is beyond imagination. Like how to make an application support operation without using the mouse at all. Completely with the keyboard. Or how to provide pointers so the user can intuitively know what to do next. Minimum mouse clicks... and perhaps hundred other pointers only a usability engineer can give you.
So how important is usability? What is the percentage of time that should be devoted to Usability when making the estimates? Inviting responses... Please comment...
I read coding horror. It is a good blog. I just read about the Graphics Programing Black Book. Yes if you click the link you will see it is freely available at byte.com. Jeff says the book is pretty darn good even if you don't ever do graphics programming, never write code in C and don't know nothin' about Assembly Language. So what the hell... I took a peek...
Excellent example of how humor can make anything more interesting. Specially a book on technology. Without humor and spice, any book would be dry. How beautifully he makes the book worth reading. From Technical standpoint and from a literary perspective too...!
I haven't read the whole book yet, but some beautiful extracts from the few initial chapters.
Chapter 1:
In the early 1970s, as the first hand-held calculatorsw ere hitting the market, I knew a fellow named Irwin. He was a good student, and was planning to be an engineer. Being an engineer back then meant knowing how to use a slide rule, and Irwin could jockey a slipstick with the best of them. In fact, he was so good that he challenged a fellow with a calculator to a duel-and won, becoming a local legend in the process.
When you get right down to it, though, Irwin was spitting into the wind. In a few short years his hard-earned slipstick skills would be worthless, and the entire discipline would be essentially wiped from the face of the earth. What’s more, anyone with half a brain could see that changeover coming, Irwin had basically wasted the considerable effort and time he had spent optimizing his soon-to-be-obsolete skills.
What does all this have to do with programming? Plenty. When you spend time optimizing poorly designed assembly code, or when you count on an optimizing compiler to make your code fast, you’re wasting the optimization, much as Irwin did.
Chapter 3:
When you are pushing the envelope in writing Optimized PC Code, you are likely to become more than a little compulsive about finding approaches that let you wring more speed from your computer. In the process you are bound to make mistakes, which is fine - as long as you watch for those mistakes and learn from them.
A case in point. A few years back, I came across an article about 8088 assembly language called "Optimizing for speed". Now "Optimize" is not a word to be used lightly. Webster's ninth new collegiate dictionary defines "optimize" as "To make as perfect, effective, or functional as possible", which certainly leaves little room for error. The author had, however, chosen a small, well defined 8088 assembly language routine to refine, consisting of about 30 instructions that did nothing more than expand 8 bits to 16 bits by duplicating each bit.
The author of "Optimizing" had clearly fine tuned the code with care, examining alternating instructions sequences and adding up cycles until he arrived at an implementation he calculated to be nearly 50 percent faster than the original routine. In short, he had used all the information at his disposal to improve his code, and had, as a result, saved cycles by the bushel. There was in fact only one slight problem with the optimized version of the routine.
It ran slower than the original version...!!!
Chapter 10:
My grandfather does the New York Times crossword puzzle every Sunday. In Ink. With nary a blemish.
The relevance of which will become apparent in a trice.
What my grandfather is, is a pattern matcher, par excellence. You are a pattern matcher too, so am I. We can't help it; it comes with the territory. Try focusing on text and not reading. Can't do it. Can you hear the voice of someone you know and not recognize it? I can't. And how in the nine billion names of God is it that we are instantly able to recognize one face out of the thousands we have seen in our life times - even years later, from a different angle, and in different light. Although we take them for granted, our pattern making capabilities are a miracle on the order of loaves and fishes.
By "Pattern Matching" I mean more than just recognition, though. I mean that we are generally able to take complex and often seemingly woefully inadequately data, instantaneously match it with an incredibly flexible way, to our past experience, extrapolate, and reach amazing conclusions, something that computers can scarcely do at all. Crossword puzzles are an excellent example; given a couple of letters and a cryptic clue, we are somehow able to come up with one out of several hundred thousand words that we know. Try writing a program to do that! What's more, we don't process data, in a serial brute force way that the computers do. Solutions tend to be virtually instantaneous or not at all. None of thos "N log N" or "n2" execution times for us.
So what are the challenges
Facts.
Challenges:
Attempts:
And the best ones until now:
Ok so your hardware sucks and you want performance out of your machine. Yeah I know life is a bitch, gotta deal with it. So you want to disable Aero on your machine so you can get more out of your machine. Go to Start -> Control Panel
Click on "Appearance and Personalization"
Click on "Personalization"
Click on Windows Color and Appearance
Click on "Open Classic appearance properties for more color options"
Choose "Windows Vista Basic"
Click Apply, Ok and you are done...!!!
Now This is what I call a phone... A Phone...?? err... Ahem...!!!
|
Ok, this is a complete no brainer...
SVCUTIL Error: "'svcutil' is not recognized as an internal or external command, operable program or batch file."
This means you don't have svcutil in your environment variable path. So to run this you would have to give the entire path of where svcutil lies. Which would be "C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\svcutil.exe". Alternatively, you need to concatenate the directory in which svcutil.exe lies in your Operating Environment Variable Path.
In Windows Vista, Open Windows Explorer (Windows + E), right click on "Computer" and go to "properties". Under "Computer Name, Domain and Workgroup Settings", click on "Change Settings", you will get a security warning, click "Continue".
You will see the System Properties Dialog. Go to "Advanced" Tab and click "Environment Variables" button at the bottom. Look for "Path" under "System Variables" list and click "Edit". at the end of the Variable Value, Concatenate ";C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\;". The ';' is the separator for variables.
Now open command prompt and type in svcutil and click enter. You would be able to see svcutil run. you don't have to give the entire path any more.
Now this is a smart looking feature... if you look at your quick launch tool bar on your Vista machine... You should see something called "Switch between windows"... We miss this most of the times...
Before you click on it, take a guess what's going to happen... and then click... I am sure you would be pleasantly surprised... :)
Ok, it is complicated... There are some issues. So I am logging everything that I can as I do it.
1st Error: "configuration section cannot be used at this path. This happens when the section is locked at a parent level. Locking is either by default (overrideModeDefault="Deny"), or set explicitly by a location tag with overrideMode="Deny" or the legacy allowOverride="false". "
This issue can be resolved only if you have Administrative Access on your machine. Go to %windir%\system32\inetsrv\config\applicationHost.config Edit. if it says you do not have have permissions to open it, click start -> Inetmgr -> go to the directory in which you want to give permissions. Right Click -> Edit Permissions -> Security Tab -> Advanced Edit Users(<your userid>\Users) and give full access. I don't quite know how this works, but it did work for me. after that, Edit the applicationhost.config search for <section name="handlers" overrideModeDefault="Deny" /> and update it to <section name="handlers" overrideModeDefault="Allow" />
Save the document and that error will go away. The next error that I encountered is:
2nd Error: "The page you are requesting cannot be served because of the Multipurpose Internet Mail Extensions (MIME) map policy that is configured on the Web server. The page you requested has a file name extension that is not recognized, and is not allowed."
Now I am wondering, if IIS doesn't understand .aspx, there is something majorly wrong. First thing I do is go to control panel -> Uninstall a program -> Turn Windows Features on and off. I open the Internet Information Server branch -> World Wide Web Service Branch -> Application Development Features, this is what I see...
I change it into this:
That should take care of the handlers issue... now let's move on...
3rd Error: Description: An error occurred during the processing of a configuration file required to service this request. Please review the specific error details below and modify your configuration file appropriately.
Parser Error Message: It is an error to use a section registered as allowDefinition='MachineToApplication' beyond application level. This error can be caused by a virtual directory not being configured as an application in IIS.
Source Error:
|
So I go to to IIS Manager, right click on the application and convert to application. Do a quick F5 on my browser... and voila...!!! It works...!!!
I attended a session by one of our senior managers. He defines Software quality metrics as 2 things.
If the answer to both these questions is "Yes" then that according to him is a good quality software. Now that is a bare minimum required for every software company in the world. And that is what is expected as a bare minimum in Microsoft. But even if we achieve that much, it would be given good credit and would be a huge target achieved. For the simple reason that every software gets old. And it is not feasible to write new software every time we need an upgrade or new features. Even at Microsoft we face "Legacy Code" issues.
But that's not the point of discussion here. These two quality metrics cover a lot of other things; like the first point itself covers Performance, Usabilty, Capability, Reliability, Stability, Scalability. And the second point covers issues like the application performing the way a user wants it to. So it could be a soft bug, like not a bug according to specifications document, but the user just thought the application would behave in a different way. So technically this is a good definition about quality metrics.
But there are some other metrics which I think I should mention here. I am not trying to say that My Senior Manager has missed out on these points, Just elaborating on what he might not been able to say in the session, considering the time constraint or perhaps respecting the intelligence of all engineers present (assuming they already know). "Considering all the other factors to be constant", like the laws of economics (law of demand, supply, etc) More things need to be considered. Let me elaborate.
I divide software quality into 3 main constants
Product Quality: This basically covers what is mentioned above. But a couple of more things. Like how quickly can we change the software? Extend it, Expand its scope? If there is a lot of hard work and if the application is resilient to change, then that's perhaps a foul smell. I understand the "Legacy Code" constraint and other real world issues; and hence I mentioned, "considering all the other factors to be constant" meaning in a utopian scenario.
Process Quality: When I say process, I am basically talking about profitability. How can we write high quality code while we maintain profits? The process / system should be able to take up most of the production responsibilities. Not only there should be minimal redundant code, there should also be minimal redundant effort. Automation / Re-use / Smart tools are the key to building a good process. I am not talking about the Microsoft MSF, CMM, RUP or any such processes. I am just talking about a process that makes software development quick. Quicker delivery results in more profitability.
Maintenance Quality: How can we build software so that removing / replacing / adding a component / feature is not a nightmare? How can we improve maintainability? This is something that cannot be found in any functional or non functional requirement document. This again increases the profitability of the company and elaborating this would be an insult to the reader's intelligence.
Now the question is, all this is true in the utopian scenario, how can we get into the real world? Well we (Microsoft) are already doing an amazing job on that. We are evangelizing the Individual Contributor stream as much as possible, We need more architects. More people who can design, review code and really foster quality work.
The old adage holds true here in software engineering more than anywhere else. "Knowledge is Power".
“When we are outsourcing software projects to India, we are not looking at cheaper rates. We are looking at credibility.” And that’s a truth. Credibility in delivery, quality and scalability. Its credibility that really makes software more economical. I have been working in the consulting business for over 3 years now and what I have noticed is there is a bit of lack of credibility in the consulting business these days... in fact the business module is changing in such a way that businesses don’t want to deliver quality products. Of course this is not what they are ever going to admit, but that’s how it works.
“I don’t want to write code to test my code”. Most of the outsourced projects are based on the fixed bid system and the only way to maintain margins is to deliver as early as possible. This means the estimates are extremely tight. Simple best practices like writing automated test cases, re-factoring, etc are ignored and the quality of the deliverables suffers. The margins are kept and then later on when the client has issues with the product, a new maintenance project is initiated.
“There is money in the maintenance business”. I was talking to a colleague who happens to be a middle management guy and he insinuated towards saying that delivering below average quality product was intentional or else the company loses on maintenance. He was talking to me saying we don’t really require technical architects and technology people much in the consulting business for this very reason. I had a pretty long debate with him regarding this.
“The consulting business needs spectacles”. It is simple. We are no longer the only country that provides outsourcing and consulting services to the “Big Client” viz. USA. China is coming up as a big threat with its large developer population. Once they bridge the communication and the language barrier, they would be a major threat. Not only the Asia Pacific region, Germany and Russia and some other European nations are also coming up really fast as outsourcing service providers. If we want to compete with them and maintain a respectable stature in the consulting business we will have to give the clients credibility. Not just in delivery but in quality, availability and scalability of our products. There is more money in the maintenance projects. But wouldn’t it be a very short sighted view of the world? The clients that outsource projects to countries like India can see what’s happening. If it is lucrative for us, it is not so lucrative for them and eventually they are going to go for countries that deliver credible products.
“I hate the code editor; I love Office Outlook and Office Excel”. Besides that I met a guy at my gym and he told me that he is working for one of the biggest consulting companies in India (Name withheld) today, has 2 years of experience and wants to move into management. He says he is already quite done with programming and doesn’t want to go into the technical arena. Majority of the developers want to move into management as quickly as possible and nobody really wants to work on technology or on the architecture side. Because there is more money in management.
“An architect? But we are into software construction not building construction…!” The consulting business today needs to take roles like technical architect and technology specialists more seriously. These are the people who can foster best practices, provide quality technology solutions and save the industry from going down into the depths of hell.
One of my managers, who also happens to be a pretty smart guy, and I were having a discussion today. We were talking about various interesting subjects including Engineering subjects like Natural Language Processing (NLP) and AI. And he asked me, "How do we make a computer smart enough to be able to solve a puzzle?" Now the puzzle could be a mathematical puzzle, a logical puzzle or even a language puzzle. And just to give me an example he asked me a puzzle.
What is a 2 digit number, that, when multiplied with 9, gives a 3 digit number. Now the first digit of the 3 digit answer is the same as the first digit of the original 2 digit number and the last digit of the 3 digit answer is the same as the 2nd digit of the original 2 digit number and the 2nd digit of the 3 digit answer is 0.
so if XY * 9 = X0Y, what is X and Y?
Now the problems is quite simple and I could solve it in the time required by me to leave from my desk to my bike parked below. And that's like less than 2 minutes. The issue here is how did you approach this problem and how do you make a computer arrive to the best approach.
So this is a question to all readers. Please solve this problem and tell me how you solved it and what approach you took.