TweetDeck is an awesome cross-platform Twitter client. In this short demonstration, we show how simple it is to follow, tweet and re-tweet using multiple Twitter accounts.
TweetDeck allows users to see, tweet and re-tweet using multiple Twitter accounts.
Friday, November 13, 2009
A tip for Webmasters: Redirect your 404 pages for maximum SEO impact!
Monday, August 31, 2009
I migrate hundreds of websites every year and one item that I've had in my standard list of tools is so often overlooked that I feel it needs to be revisited. I can't begin to tell you how many clients I run into every day that have moved their websites from one host to another or one technology to another to find themselves with a long list of "page not found" errors on Google searches. These same clients usually also are lamenting the fact that their "new" website, their pride-and-joy, actually does not perform as well in search rankings as the old website did!
This article addresses why this happens and what the savvy webmaster can do to save the day and ensure no click goes unhandled!
Why do website migrations or redesigns cause "page not found" errors?
When clients decide they want to redesign their website (or change host) they often forget that in doing so, many of the "old" pages will be replaced with "new" pages often times with different web addresses (URLs.) Even if the same web content platform is being retained, it is not uncommon for a redesign to change the site map of a website, sometimes pretty dramatically. This problem can be compounded by a change in web content delivery platform (like changing from PHP to ASP.NET) because the extensions of all the web pages will most likely change from "*.php" or "*.html" to "*.aspx" and others. The result is that often times when these new websites go live, many links inbound from both Google and other websites will be broken. Over time, these broken links will be dropped from most of the indexes, but the impact on your search ranking can be quite large and it can last for a long time.
Here's what some actual web addresses might be before a redesign:
http://myCoolSite.com/prod.php
http://myCoolSite.com/aboutwidgetabc.htm
After a redesign, the above web addresses and others might be "enhanced", which is a common SEO technique:
http://myCoolSite.com/Product-Information-CoolWidget.aspx
http://myCoolSite.com/About-Widget-ABC.aspx
Notice the difference in URLs. So, any links to the "old" pages will be broken after the new site goes live. Also, some pages on the old website might be dropped altogether, also causing errors.
How can Page-not-Found errors be handled?
Different server platforms offer different alternatives. There are two areas where these solutions will fall. First, there are HTTP level solutions which tend to be costly and difficult to implement and manage. Second, and the focus of this article, there are scripting solutions that are easily implemented by a webmaster.
On the HTTP level solution, the technique involves detecting the web page requests by the web server software and if necessary, handing those over to a processing engine of some kind. This technique works well, but also requires "low level" web server programming, a skill not usually associated with webmasters, especially those tasked with managing many servers and keeping them all running efficiently! The HTTP level redirect also might be costly depending on your resource structure, especially if you have to involve an expensive IT or programming resource.
However, the scripting solution is easier to accomplish because all web servers have a certain configurable parameter that lets you set what page should display the "page not found" error. Traditionally, the page-not-found is customized with the website's logos and colors, but it can often times do more by injecting a little bit of script. The technique is simple. The script will look at the address of the page requested, and if this address is on a list of "target pages", the script redirects to a more appropriate page!
Handling Page-Not-Found errors with asp.net script, an example for Windows Server & IIS

On Windows server, inside the properties for any website, we are able to configure the "Custom Errors" tab to display custom messages for different error conditions the server might encounter. Of course, a "page not found" is also a standard "404" error in web-server speak! So, on this screen, if you scroll down to the "404" error, notice that it can be "edited" to point to a custom page instead of the web server's default page.
Once on the edit window for the 404 error, notice it's possible to change the "Message Type" to "URL", meaning the web server will simply call a web address on your given website whenever a 404 condition is encountered. For this example, I am setting this value to "/404catch.aspx" which will be a script, on my website's root, that will handle the 404 errors.
Now, the web server will call your http://YourSite.com/404catch.aspx whenever a user requests an invalid page! Even better, the web server will usually pass you a query string specifying the user's original intended request. This is true of most web servers, although the syntax will be slightly different for different servers.
For IIS, the page is called like this:
http://YourSite.com/404catch.aspx?404;http://somesite.com:80/somepath/somepage.htm?someQuery=SomeValue
Note, the query string in red!
The first part of the query string is the "404" error number. In our example it will always be "404" since we only trapped the "404" error - but if you use your script for more than one error, it would be possible to differentiate which error triggered your script by inspecting this part of the query string.
The second part tells you which web address (URL) the user was looking for when the "page not found" triggered. Notice that it looks pretty much like a standard URL, except that after the first part (usually called the "host") you are also passed a colon and the port number the website is responding under. The port number is usually of no consequence and I ignore it in my script!
However, especially with the second part of the query string, you can now do some string comparison to determine if this URL is one where you could redirect to another page or display a custom message!
You can see a complete listing for my version of 404catch.aspx here (also see update on 9/22/09 below.) My version receives the page request, parses out the Query String to determine the user's original intended page, then uses a database to decide if this "original" or "receiver" should be redirected to another page (the "target".)
Some items to note as you look at my script:
By the way, if you are interested in our "table" structure, you can download the DDL to create a table that will work with the 404catch.aspx script. If you choose to use a table, in your website's web.config, be sure to include the table name and the connection string to your database table with the following two lines:
<add key="RedirectManagerConn" value="Server=xxx.xxx.xxx.xxx;Database=YourDatabaseName;uid=YourUserName;pwd=YourPassword;Application Name=404Catch_RedirectManager"></add>
<add key="RedirectManagerTable" value="EZNP_RedirectManager_Redirects"></add>
So, with this information, you now have a powerful tool that will let you handle website migrations - without loosing a single click and perhaps retaining a lot of your search engine ranking! Good use of 301/302 redirects is a very powerful tool in the effective seo-aware webmaster.
Update 9/22/09 - support for URL Masking
Weeks after I created this post, I had a need to "mask" certain URLs instead of performing 301 redirects. In this case, instead of the browser being redirected, we wanted the "contents" of the target page to be displayed in response to the vanity URL - without the user (or the browser) ever knowing that the page was not actually there. For instance, we might want the URL http://myCoolSite.com/prod.php to be displayed to the user BUT it might not exist and we want the contents from http://myCoolSite.com/aboutwidgetabc.htm to be returned. Masking the URLs in a 404 catch technique will do this job well and it turns out the original script already had 99% of all the code required to accomplish this!
For instance, notice the procedure "OutputRemote404" which was part of the original function. It's job in the original script was to fetch the "content" of some remote 404 page (perhaps on another website or server) and return it "inline" as the result of the current 404. This might be useful when you have more than one website in support of one project (say a BLOG and a website that are "designed" to work together.) Rather than customizing a custom 404 page in two platforms, one could customize one and simply "call" the page from the other platform. Regardless of usage, this procedure accomplished the remote 404 by performing an HTTP "GetResponse" on the server side, which is a .NET documented method to read HTTP from a web server. The results of that call to a remote server (using standard HTTP by the way) is then stored to a string and finally output as the response of the current request.
Well, this was exactly what was needed for mask to work. We wanted to fetch the "content" of some remote page and display it "inline" as the result of the current request. The only change that was needed was to change the response code to "200 OK" (the valid response code for a successful HTTP request/response) so that the browser (and any analytics or log files) would not confuse this with a 404 error!
One more change needed since we are now returning "content" from our script (instead of a redirect) is we need to set the content type of the response correctly. By default, this will be set to "text/html", which works well for returning plain old HTML pages. However, sometimes we want to return XML, or maybe even an image or PDF (since the masking is possible for "any" type of content.) So, notice the new script has a procedure called "OutputInline" used to handle the output. This procedure is identical to "OutputRemote404", except it checks to see the extension of the file is an ".xml" extension. If it is, the Content Type of the response is set to "text/xml" so that the browser displays the content correctly. Of course, in order for this script to be truly complete, we'd need to add more types of content (images, PDFs, etc.) However, for brevity and to get this out quickly, I've only added XML handling for now. Also, my first choice would not be to hard code these extension checks (although that might be the easiest.) Instead, I'd prefer something where the actual MIME mappings on the server are used - and this would handle literally ANY content type the server is configured to return - without needing specific code for each! This, however, will have to wait for another time when I can research it more thoroughly.
Download the modified 404catch.aspx here, with support for masked URLs. Of note is that this script still supports the values 301, 302 and 404 in the database field "RedirectType" plus now an additional "inline" value that performs the masking instead of a redirect. The values of the other fields are exactly the same. So, one could easily change from 301 redirects to masks by changing the value of RedirectType to "inline" for the desired records in the database.
I hope you find this helpful! Let me know comments or questions below.
This article addresses why this happens and what the savvy webmaster can do to save the day and ensure no click goes unhandled!
Why do website migrations or redesigns cause "page not found" errors?
When clients decide they want to redesign their website (or change host) they often forget that in doing so, many of the "old" pages will be replaced with "new" pages often times with different web addresses (URLs.) Even if the same web content platform is being retained, it is not uncommon for a redesign to change the site map of a website, sometimes pretty dramatically. This problem can be compounded by a change in web content delivery platform (like changing from PHP to ASP.NET) because the extensions of all the web pages will most likely change from "*.php" or "*.html" to "*.aspx" and others. The result is that often times when these new websites go live, many links inbound from both Google and other websites will be broken. Over time, these broken links will be dropped from most of the indexes, but the impact on your search ranking can be quite large and it can last for a long time.
Here's what some actual web addresses might be before a redesign:
http://myCoolSite.com/prod.php
http://myCoolSite.com/aboutwidgetabc.htm
After a redesign, the above web addresses and others might be "enhanced", which is a common SEO technique:
http://myCoolSite.com/Product-Information-CoolWidget.aspx
http://myCoolSite.com/About-Widget-ABC.aspx
Notice the difference in URLs. So, any links to the "old" pages will be broken after the new site goes live. Also, some pages on the old website might be dropped altogether, also causing errors.
How can Page-not-Found errors be handled?
Different server platforms offer different alternatives. There are two areas where these solutions will fall. First, there are HTTP level solutions which tend to be costly and difficult to implement and manage. Second, and the focus of this article, there are scripting solutions that are easily implemented by a webmaster.
On the HTTP level solution, the technique involves detecting the web page requests by the web server software and if necessary, handing those over to a processing engine of some kind. This technique works well, but also requires "low level" web server programming, a skill not usually associated with webmasters, especially those tasked with managing many servers and keeping them all running efficiently! The HTTP level redirect also might be costly depending on your resource structure, especially if you have to involve an expensive IT or programming resource.
However, the scripting solution is easier to accomplish because all web servers have a certain configurable parameter that lets you set what page should display the "page not found" error. Traditionally, the page-not-found is customized with the website's logos and colors, but it can often times do more by injecting a little bit of script. The technique is simple. The script will look at the address of the page requested, and if this address is on a list of "target pages", the script redirects to a more appropriate page!
Handling Page-Not-Found errors with asp.net script, an example for Windows Server & IIS

On Windows server, inside the properties for any website, we are able to configure the "Custom Errors" tab to display custom messages for different error conditions the server might encounter. Of course, a "page not found" is also a standard "404" error in web-server speak! So, on this screen, if you scroll down to the "404" error, notice that it can be "edited" to point to a custom page instead of the web server's default page.

Now, the web server will call your http://YourSite.com/404catch.aspx whenever a user requests an invalid page! Even better, the web server will usually pass you a query string specifying the user's original intended request. This is true of most web servers, although the syntax will be slightly different for different servers.
For IIS, the page is called like this:
http://YourSite.com/404catch.aspx?404;http://somesite.com:80/somepath/somepage.htm?someQuery=SomeValue
Note, the query string in red!
The first part of the query string is the "404" error number. In our example it will always be "404" since we only trapped the "404" error - but if you use your script for more than one error, it would be possible to differentiate which error triggered your script by inspecting this part of the query string.
The second part tells you which web address (URL) the user was looking for when the "page not found" triggered. Notice that it looks pretty much like a standard URL, except that after the first part (usually called the "host") you are also passed a colon and the port number the website is responding under. The port number is usually of no consequence and I ignore it in my script!
However, especially with the second part of the query string, you can now do some string comparison to determine if this URL is one where you could redirect to another page or display a custom message!
You can see a complete listing for my version of 404catch.aspx here (also see update on 9/22/09 below.) My version receives the page request, parses out the Query String to determine the user's original intended page, then uses a database to decide if this "original" or "receiver" should be redirected to another page (the "target".)
Some items to note as you look at my script:
- I used a Regex to split the query string into several pieces of interest:
- sErrorCode - will contain the number of the error that triggered the script
- sProtocol - will contain "http://" or "https://" depending on how the page was called
- sHost - will contain the "host" part of the URL, typically "somesite.com" (in the example above) sans any "path" that might follow.
- sPath - will contain the "path" part of the URL, typically "/somepath/somepage.htm" in the example above.
- sQueryString - will contain any query string the user might have passed, typically "?someQuery=SomeValue" in the example above.
- After the Regex, we look for the URL (protocol + host + path) in a redirect table for my website and if I find it, I redirect to a designated page. Notice this script can support several types of redirects:
- 301 (permanent redirect)
- 302 (temporary redirect)
- Notice also this script can return a custom 404 or an inline 404.
- Notice the redirect is done using by changing the "response.status" property and "response.AddHeader" method to send the special HTTP code to the requesting browser to "redirect" to a new page!
By the way, if you are interested in our "table" structure, you can download the DDL to create a table that will work with the 404catch.aspx script. If you choose to use a table, in your website's web.config, be sure to include the table name and the connection string to your database table with the following two lines:
<add key="RedirectManagerConn" value="Server=xxx.xxx.xxx.xxx;Database=YourDatabaseName;uid=YourUserName;pwd=YourPassword;Application Name=404Catch_RedirectManager"></add>
<add key="RedirectManagerTable" value="EZNP_RedirectManager_Redirects"></add>
So, with this information, you now have a powerful tool that will let you handle website migrations - without loosing a single click and perhaps retaining a lot of your search engine ranking! Good use of 301/302 redirects is a very powerful tool in the effective seo-aware webmaster.
Update 9/22/09 - support for URL Masking
Weeks after I created this post, I had a need to "mask" certain URLs instead of performing 301 redirects. In this case, instead of the browser being redirected, we wanted the "contents" of the target page to be displayed in response to the vanity URL - without the user (or the browser) ever knowing that the page was not actually there. For instance, we might want the URL http://myCoolSite.com/prod.php to be displayed to the user BUT it might not exist and we want the contents from http://myCoolSite.com/aboutwidgetabc.htm to be returned. Masking the URLs in a 404 catch technique will do this job well and it turns out the original script already had 99% of all the code required to accomplish this!
For instance, notice the procedure "OutputRemote404" which was part of the original function. It's job in the original script was to fetch the "content" of some remote 404 page (perhaps on another website or server) and return it "inline" as the result of the current 404. This might be useful when you have more than one website in support of one project (say a BLOG and a website that are "designed" to work together.) Rather than customizing a custom 404 page in two platforms, one could customize one and simply "call" the page from the other platform. Regardless of usage, this procedure accomplished the remote 404 by performing an HTTP "GetResponse" on the server side, which is a .NET documented method to read HTTP from a web server. The results of that call to a remote server (using standard HTTP by the way) is then stored to a string and finally output as the response of the current request.
Well, this was exactly what was needed for mask to work. We wanted to fetch the "content" of some remote page and display it "inline" as the result of the current request. The only change that was needed was to change the response code to "200 OK" (the valid response code for a successful HTTP request/response) so that the browser (and any analytics or log files) would not confuse this with a 404 error!
One more change needed since we are now returning "content" from our script (instead of a redirect) is we need to set the content type of the response correctly. By default, this will be set to "text/html", which works well for returning plain old HTML pages. However, sometimes we want to return XML, or maybe even an image or PDF (since the masking is possible for "any" type of content.) So, notice the new script has a procedure called "OutputInline" used to handle the output. This procedure is identical to "OutputRemote404", except it checks to see the extension of the file is an ".xml" extension. If it is, the Content Type of the response is set to "text/xml" so that the browser displays the content correctly. Of course, in order for this script to be truly complete, we'd need to add more types of content (images, PDFs, etc.) However, for brevity and to get this out quickly, I've only added XML handling for now. Also, my first choice would not be to hard code these extension checks (although that might be the easiest.) Instead, I'd prefer something where the actual MIME mappings on the server are used - and this would handle literally ANY content type the server is configured to return - without needing specific code for each! This, however, will have to wait for another time when I can research it more thoroughly.
Download the modified 404catch.aspx here, with support for masked URLs. Of note is that this script still supports the values 301, 302 and 404 in the database field "RedirectType" plus now an additional "inline" value that performs the masking instead of a redirect. The values of the other fields are exactly the same. So, one could easily change from 301 redirects to masks by changing the value of RedirectType to "inline" for the desired records in the database.
I hope you find this helpful! Let me know comments or questions below.
A lesson for large company managers: stop being large and start spending "your own" money!
Tuesday, August 18, 2009
I've been building systems for companies large and small for over 20 years. When I say large, I don't mean Microsoft-large, but certainly Fortune-1000-large. And by system, I mean anything sort-of computer or process, like websites, databases, business applications, business processes, etc. In this time, I've seen a lot. Maybe not all there is to see, but certainly a lot indeed. However, in this article, I am going to concentrate on one small detail of my overall experience.
In dealing with many clients large and small, there seems to be one cultural difference in the mindset of the managers that I've observed which clearly differentiates the small companies from the large companies. I can't believe it took me 20 years to notice this... but the pattern is clear not just in my dealings with business but also in the news over the last few years. Are you ready for my big reveal? Drum roll please!
When a small business builds a system, the success of the system is surely tied to the success of the business. If the business does poorly, the system tends to disappear. Sometimes, the system is a big part of the problem, but most times, the business model is flawed and no matter how good a system, the business will eventually fail.
However, when a small business does well, they inevitably work on their systems, good or bad, to make them better. Their success leads their enthusiasm for better systems (if they have a vision for growth) and they work on them again and again to get even better at what they do. Consequently, small business managers have to watch every dollar they spend and they spend it wisely (if they succeed) and constantly think about return on investment. They spend because they know a clear path to recover their dollar – often knowing in intimate detail the numbers they need to “hit” in order to make their money back! They constantly look for value and they tend to innovate in doing so because they often times have to compete and act like, without the budget of, big-business!
Small businesses tend to be led by entrepreneurs of course, and some of these small companies go on to become quite large. Think Amazon and Google for instance, both of which are very large now, but very much operate with an entrepreneurial mindset even to this day! At Google, they even have an engineered innovation path when they require (or at least encourage) their employees to spend a certain percentage of their paid time working on "pet" projects! You can probably think of other companies that are successful that still operate (and spend) like small businesses at least in their entrepreneurial mindset. Of course, some of these small businesses spend quite a bit, the difference being they spend only when they have a clear picture of their return for their dollar! (Check out the book “What would Google do?” by Jeff Jarvis for more on the Google way.)
By the way, not surprisingly in small companies, every dollar spent (on systems or otherwise) is very close to an owner or a partner! Every dollar comes from his or her pocket and everyone close to them knows it. The outcome of this closely-held-money factor is that money is spent carefully and judiciously most times. Everyone at every level (since there tend to be so few "levels") is close to the money and, in effect, feels that it is their pocket too!
Yet, large businesses are often times quite successful before they start thinking of systems. Some of these companies are behemoths in both size and age! I'm not talking 100 employees large, I am talking 1,000+ employees large! Some large businesses have not had entrepreneurs in generations, or if they still do, the entrepreneurs and their spirit are muffled by levels upon levels of bureaucracy and red tape. Managers routinely sign stacks of invoices for tens of thousands of dollars “automatically”. They send out RFPs to request systems they know will cost more than their own homes, many times with no understanding of the clear return on their dollars! Worse even, they actually approve proposals that they very well know (in the back of their minds) will actually cost 4 times as much and take twice as long to implement. And they do so calmly and knowing that when the projects fail (and the costs overrun, and the opportunities are lost for months at a time,) they will have zero accountability. There is usually a vendor (either old or new) or another team inside the company, or another manager they can blame! “It’s not my fault that the vendor did not know what they were doing!” They will rationalize to themselves and their peers later. It is almost like the fact they have millions of dollars in the bank (and each manager has levels upon levels of separation away from the bank) makes them just plain dumb when it comes to spending that money! It is like spending monopoly money to them: the money is not real, the money is not theirs – woo hoo, spend it like a drunken sailor!
Well, I have news for those managers. When a large project fails in a large business, it is your fault 100%. You released the RFP (whether you wrote it or not, understood it or not.) You approved the proposal even though you knew (or at least suspected) it was not possible. You failed to implement safeguards and alternatives and to protect your company from risk. You failed to engineer, then prototype and pilot, a clear path to return of every dollar (with a gain - somewhere!) You spent (not) your money and you did not care one bit about it because you rationalized it as “someone else’s problem to understand the details.” Plain and simple, you did not manage. Instead, you were managed by your own big head (and collectively the exuberance of your teams!) Welcome to corporate America. You’ve passed the test!
What would happen in my world? I’d go out of business. In a small business if you spend stupidly, you die stupidly!
I’m not saying large companies don’t need to spend a lot of money on systems (or otherwise). Large companies should indeed spend big money on their business but only when they have a clear justification and an even clearer path to return every single dollar plus more – somehow direct or indirect! Every manager that spends a dollar should be held to the scrutiny of that expenditure. Every project should have a clear assessment of need, risk and gain. Every project should have a clear time line that means something (not an ever shifting calendar) and milestones that are measurable and measured (not ignored.) Every project should be prototyped, piloted and proven in small scale every single time (yes, it can be done no matter the project size – especially the larger the project and the larger the expense.)
Many books have been written on successful project management and budgeting. I don’t claim to be an expert in that area though I can hold my own. I certainly won’t go into it here as you can pick up a book (or two, or ten) and go to town. There is certainly not a short supply of project management methods to follow, though there definitely seems to be a short supply of people practicing the techniques!
However, here is perhaps an idea that might help. This is “my” corporate bailout plan; my economic recovery plan if you would.
Put every manager (and their entire teams) real close to the bank! If a manager wants to spend a dollar for the company, make that dollar mean something to their bottom line! In some direct correlation to the revenues of the company, reduce that manager’s salary (and his team’s salary) by the same percentage. Then, as they recover each dollar, give them back their salary – at the same rate they earn back the company’s money! If they actually make recover their money and more, give them a share of that surplus. Make them care about the success with the most primitive incentive in the world: their pockets – their fuller pockets, that is! If managers are willing to risk the company's pocket, they should be willing to risk their own!
My guess is that overnight, you’ll start to see a sudden interest in project success at every level of the company! Suddenly everyone will care tremendously about each and every dollar spent. When the decision making is right on each manager’s pocket (and their teams) you will start to see an unheard of zeal in protecting that money and a huge push to innovation and to making more with less!
You think I am crazy don’t you? Perhaps I am! You say: how could I reduce a manager’s salary (and their team’s salary) by 1% or 3% or 4% or 5%? Easy… start today and start now and you will see how where managers wanted to spend $100K on a project, suddenly they’ll have $10K solutions! Put the money in their pocket and they’ll spend it as if it was their own! Over the long run, you might not spend less (ideally you still spend big bucks!) However, your returns will be much larger than before, with waste crushed through hyper-participative-project-management!
Hey, if there's ever a time when you'll be able to hire people with creative compensation plans, now is definitely that time!
I have a business partner that has told me many times: "you cannot save idiots from themselves!" Perhaps this should be the latest business fad to make it across corporate America.
In dealing with many clients large and small, there seems to be one cultural difference in the mindset of the managers that I've observed which clearly differentiates the small companies from the large companies. I can't believe it took me 20 years to notice this... but the pattern is clear not just in my dealings with business but also in the news over the last few years. Are you ready for my big reveal? Drum roll please!
When a small business builds a system, the success of the system is surely tied to the success of the business. If the business does poorly, the system tends to disappear. Sometimes, the system is a big part of the problem, but most times, the business model is flawed and no matter how good a system, the business will eventually fail.
However, when a small business does well, they inevitably work on their systems, good or bad, to make them better. Their success leads their enthusiasm for better systems (if they have a vision for growth) and they work on them again and again to get even better at what they do. Consequently, small business managers have to watch every dollar they spend and they spend it wisely (if they succeed) and constantly think about return on investment. They spend because they know a clear path to recover their dollar – often knowing in intimate detail the numbers they need to “hit” in order to make their money back! They constantly look for value and they tend to innovate in doing so because they often times have to compete and act like, without the budget of, big-business!
Small businesses tend to be led by entrepreneurs of course, and some of these small companies go on to become quite large. Think Amazon and Google for instance, both of which are very large now, but very much operate with an entrepreneurial mindset even to this day! At Google, they even have an engineered innovation path when they require (or at least encourage) their employees to spend a certain percentage of their paid time working on "pet" projects! You can probably think of other companies that are successful that still operate (and spend) like small businesses at least in their entrepreneurial mindset. Of course, some of these small businesses spend quite a bit, the difference being they spend only when they have a clear picture of their return for their dollar! (Check out the book “What would Google do?” by Jeff Jarvis for more on the Google way.)
By the way, not surprisingly in small companies, every dollar spent (on systems or otherwise) is very close to an owner or a partner! Every dollar comes from his or her pocket and everyone close to them knows it. The outcome of this closely-held-money factor is that money is spent carefully and judiciously most times. Everyone at every level (since there tend to be so few "levels") is close to the money and, in effect, feels that it is their pocket too!
Yet, large businesses are often times quite successful before they start thinking of systems. Some of these companies are behemoths in both size and age! I'm not talking 100 employees large, I am talking 1,000+ employees large! Some large businesses have not had entrepreneurs in generations, or if they still do, the entrepreneurs and their spirit are muffled by levels upon levels of bureaucracy and red tape. Managers routinely sign stacks of invoices for tens of thousands of dollars “automatically”. They send out RFPs to request systems they know will cost more than their own homes, many times with no understanding of the clear return on their dollars! Worse even, they actually approve proposals that they very well know (in the back of their minds) will actually cost 4 times as much and take twice as long to implement. And they do so calmly and knowing that when the projects fail (and the costs overrun, and the opportunities are lost for months at a time,) they will have zero accountability. There is usually a vendor (either old or new) or another team inside the company, or another manager they can blame! “It’s not my fault that the vendor did not know what they were doing!” They will rationalize to themselves and their peers later. It is almost like the fact they have millions of dollars in the bank (and each manager has levels upon levels of separation away from the bank) makes them just plain dumb when it comes to spending that money! It is like spending monopoly money to them: the money is not real, the money is not theirs – woo hoo, spend it like a drunken sailor!
Well, I have news for those managers. When a large project fails in a large business, it is your fault 100%. You released the RFP (whether you wrote it or not, understood it or not.) You approved the proposal even though you knew (or at least suspected) it was not possible. You failed to implement safeguards and alternatives and to protect your company from risk. You failed to engineer, then prototype and pilot, a clear path to return of every dollar (with a gain - somewhere!) You spent (not) your money and you did not care one bit about it because you rationalized it as “someone else’s problem to understand the details.” Plain and simple, you did not manage. Instead, you were managed by your own big head (and collectively the exuberance of your teams!) Welcome to corporate America. You’ve passed the test!
What would happen in my world? I’d go out of business. In a small business if you spend stupidly, you die stupidly!
I’m not saying large companies don’t need to spend a lot of money on systems (or otherwise). Large companies should indeed spend big money on their business but only when they have a clear justification and an even clearer path to return every single dollar plus more – somehow direct or indirect! Every manager that spends a dollar should be held to the scrutiny of that expenditure. Every project should have a clear assessment of need, risk and gain. Every project should have a clear time line that means something (not an ever shifting calendar) and milestones that are measurable and measured (not ignored.) Every project should be prototyped, piloted and proven in small scale every single time (yes, it can be done no matter the project size – especially the larger the project and the larger the expense.)
Many books have been written on successful project management and budgeting. I don’t claim to be an expert in that area though I can hold my own. I certainly won’t go into it here as you can pick up a book (or two, or ten) and go to town. There is certainly not a short supply of project management methods to follow, though there definitely seems to be a short supply of people practicing the techniques!
However, here is perhaps an idea that might help. This is “my” corporate bailout plan; my economic recovery plan if you would.
Put every manager (and their entire teams) real close to the bank! If a manager wants to spend a dollar for the company, make that dollar mean something to their bottom line! In some direct correlation to the revenues of the company, reduce that manager’s salary (and his team’s salary) by the same percentage. Then, as they recover each dollar, give them back their salary – at the same rate they earn back the company’s money! If they actually make recover their money and more, give them a share of that surplus. Make them care about the success with the most primitive incentive in the world: their pockets – their fuller pockets, that is! If managers are willing to risk the company's pocket, they should be willing to risk their own!
My guess is that overnight, you’ll start to see a sudden interest in project success at every level of the company! Suddenly everyone will care tremendously about each and every dollar spent. When the decision making is right on each manager’s pocket (and their teams) you will start to see an unheard of zeal in protecting that money and a huge push to innovation and to making more with less!
You think I am crazy don’t you? Perhaps I am! You say: how could I reduce a manager’s salary (and their team’s salary) by 1% or 3% or 4% or 5%? Easy… start today and start now and you will see how where managers wanted to spend $100K on a project, suddenly they’ll have $10K solutions! Put the money in their pocket and they’ll spend it as if it was their own! Over the long run, you might not spend less (ideally you still spend big bucks!) However, your returns will be much larger than before, with waste crushed through hyper-participative-project-management!
Hey, if there's ever a time when you'll be able to hire people with creative compensation plans, now is definitely that time!
I have a business partner that has told me many times: "you cannot save idiots from themselves!" Perhaps this should be the latest business fad to make it across corporate America.
Top 3 Twitter tips for newbies (try saying that 3 times fast.)
Tuesday, July 21, 2009
Like it or not, Twitter is the biggest trend on the interwebs right now. Twitter's success lies in that it is utterly simple. You follow people, they follow you and you all post 140 characters or less of "what are you doing?".
Simplicity is at Twitter's core. But therein lies its magic because "what are you doing?" means ultimately whatever each user wants it to mean! What are you working on? What are you reading? What are you watching? Where are you going? Who are you going with? What do you think about [any topic here]? What cool item did you find on the web? - All these questions fit in the Twitter space and are potential great sources of content for the right audience.
Many people new to Twitter ask me how to get started. Most already have an account and most posted once or twice (months ago.) Also, most have not really figured out what to do next. They may as easily be Twitter ghosts of past tweets. But wait, before you quit, try once more. You might just get hooked!
For those of you getting into Twitter (or thinking about it) here are my top 3 newbie tips on how to follow and be followed on Twitter:
Tip NO 1 - You must complete your profile.
Twitter makes it super easy to sign up. Actually, so easy that a lot of people never bother to update their profile on Twitter. If you want to ever have followers, you have to take a minute or two to complete your profile. In your BIO, use keywords that denote what you are interested in and what you are looking for in terms of followers. Also, be sure to include a URL that talks a bit more about you and what you are interested in.
As an organization, describe your organization's goals in the BIO and use keywords that are interesting to your audience.
In both cases, use the URL to leverage the other ways people can interact with you (like your Facebook page, etc.)
A custom background graphic on your profile is not absolutely necessary as an individual, but it is definitely helpful. If you are a creative type, use something you've drawn or a picture that shows you in an interesting place. Be careful, though, as this background gets covered by the main Twitter interface, so it should show the most important content on the sides.
If posting as an organization, you must post a custom background graphic. Some people like the "pro" panels with a little more about themselves and even a picture (see my Twitter page at http://twitter.com/ericwastaken/ - shameless plug, I know.) Others prefer branding or logos, sometimes in a pattern.
Whatever you do, make sure that it does not overpower the main Twitter interface. After all, we are here to Tweet! (Update) Not graphically gifted? Try a Google search for "Twitter Background" and you'll find many websites offering their help including http://www.twitbacks.com/.
Finally, you must include a picture (or a logo if you are posting as an organization.) Sorry, but there is just no substitute for this one! If you want to be followed, you must be someone people can identify with and, last I checked, a picture of your cat does not quite look like you. Try a picture of you holding your cat, perhaps, if you really want the cat in the picture.
TIP NO 2 - You must follow if you want to be followed.
Sure, Twitter is all about followers. After all, who else is going to know about your latest internet find or cool outfit, right? However, Twitter is also about following people. A profile following no one just screams of spammer! The only people that will follow you are other spammers in a big ironic game of "peddle my stuff" where no one is actually ever seeing anyone's tweets!
The first and most important item in the agenda of any new Tweeter user is to spend some time finding interesting people to follow. Yes, it's ok to pick a few from the Twitter Recommends, but don't just make all your choices there. http://wefollow.com/ is a great website where Twitter users list themselves by interest and topics. You'll find lots of good people to follow there too! Eventually, you too will want to list yourself in WeFollow, but for now, just pick some people that interest you.
Also, if you are tweeting as an individual, be sure to follow people that match your interests AND your values. Remember, others can (and do) see who you are following and it paints a picture of who you are.
If you are tweeting as an organization, it's even more important to be selective. However, DO NOT fall in the trap of following no one. You MUST follow others! Who should an organization follow? Try people you respect in various fields. Although no one really must be “looking” at those tweets from those you follow, it is a great way to get followers to reply to and re-tweet to people you respect. Ask colleagues and see if any are Tweeting (but Tweeting semi-serious interesting topics – not Golf tips - unless you are a Gold oriented company of course.)
For both individuals and organizations, don't just automatically follow anyone who follows you. The more you post, the more "followers" you'll get, but not always by people that are actually interested in you. A lot of your followers will be people that really want you to follow them! So, check their profile, make sure they are "real" and not a spammer and also make sure they match your interests and have something relevant to say with the frequency that matches your interests. Remember, you will also want to read Tweets and if you pick people that are not interesting (or spammers), then you won't enjoy Twitter much at all. Be selective or you might even get to a point where the amount of noise you receive makes your experience impossible.
TIP NO 3 - You must post (if you want to increase your following) and it must be meaningful to your "audience".
One of the items that most Tweeter users look at when considering to follow someone is the frequency of posts and the subject matter of your posts. Infrequent posts (months or weeks apart) and why bother to follow you since you clearly have nothing to say! Too many posts with annoying subjects like "I am going to eat lunch now" and you are just an annoying egocentric waste of time! Finding the balance is not easy, but it is absolutely necessary IF you want to be followed.
By the way, there is nothing wrong with not posting if you are not interested in growing your audience. In my opinion, there is absolutely nothing wrong with users who prefer to simply be "readers" of other people's posts. There are many people sharing very interesting items that are follow worthy and that's cool too! It is OK in my opinion to be clear in your profile and perhaps state that you are not interested in followers - but just following people! This might save you a lot of hassle.
However, if you want to grow your following, you must post relevant useful items. What is relevant? Well, that depends on your audience and only you can determine that. If you are posting for friends and family, perhaps what you are up to each day (or every few days) might be interesting. However, try to give your posts a little more meaning. For instance, instead of "going to lunch", try "Found a new sushi restaurant near work called Tokyo Cafe. Will go try it. Anyone interested?" Also, try including links to things you find that are interesting to your audience. For instance, "Learned about a new file sharing service called DropBox. Check them out at http://DropBox.com".
Even more important, if you are tweeting as an organization, you definitely want to post relevant information to your business but also to your industry. In other words, don't just post each time you have something new to offer or a press release, but also post when studies come out or interesting news about your industry comes out. Again, you need to provide a service to your audience, not just sell to them every time. As a matter of fact, unless you are open and honest about the fact that you will ONLY sell to people (like the Dell outlet, for instance), you should really not be direct selling at all!
- 0 -
I hope these tips get you started to an awesome Twitter experience. Yes, there is much more to learn in terms of managing Twitter and posting to Twitter, but that will all have to wait for another post.
In the meantime, go find some interesting people to follow and don't be afraid to try people out. After all, they are notified when you follow them, but they have no idea when you block or un-follow them. :-)
Simplicity is at Twitter's core. But therein lies its magic because "what are you doing?" means ultimately whatever each user wants it to mean! What are you working on? What are you reading? What are you watching? Where are you going? Who are you going with? What do you think about [any topic here]? What cool item did you find on the web? - All these questions fit in the Twitter space and are potential great sources of content for the right audience.
Many people new to Twitter ask me how to get started. Most already have an account and most posted once or twice (months ago.) Also, most have not really figured out what to do next. They may as easily be Twitter ghosts of past tweets. But wait, before you quit, try once more. You might just get hooked!
For those of you getting into Twitter (or thinking about it) here are my top 3 newbie tips on how to follow and be followed on Twitter:
Tip NO 1 - You must complete your profile.
Twitter makes it super easy to sign up. Actually, so easy that a lot of people never bother to update their profile on Twitter. If you want to ever have followers, you have to take a minute or two to complete your profile. In your BIO, use keywords that denote what you are interested in and what you are looking for in terms of followers. Also, be sure to include a URL that talks a bit more about you and what you are interested in.
As an organization, describe your organization's goals in the BIO and use keywords that are interesting to your audience.
In both cases, use the URL to leverage the other ways people can interact with you (like your Facebook page, etc.)
A custom background graphic on your profile is not absolutely necessary as an individual, but it is definitely helpful. If you are a creative type, use something you've drawn or a picture that shows you in an interesting place. Be careful, though, as this background gets covered by the main Twitter interface, so it should show the most important content on the sides.
If posting as an organization, you must post a custom background graphic. Some people like the "pro" panels with a little more about themselves and even a picture (see my Twitter page at http://twitter.com/ericwastaken/ - shameless plug, I know.) Others prefer branding or logos, sometimes in a pattern.
Whatever you do, make sure that it does not overpower the main Twitter interface. After all, we are here to Tweet! (Update) Not graphically gifted? Try a Google search for "Twitter Background" and you'll find many websites offering their help including http://www.twitbacks.com/.
Finally, you must include a picture (or a logo if you are posting as an organization.) Sorry, but there is just no substitute for this one! If you want to be followed, you must be someone people can identify with and, last I checked, a picture of your cat does not quite look like you. Try a picture of you holding your cat, perhaps, if you really want the cat in the picture.
TIP NO 2 - You must follow if you want to be followed.
Sure, Twitter is all about followers. After all, who else is going to know about your latest internet find or cool outfit, right? However, Twitter is also about following people. A profile following no one just screams of spammer! The only people that will follow you are other spammers in a big ironic game of "peddle my stuff" where no one is actually ever seeing anyone's tweets!
The first and most important item in the agenda of any new Tweeter user is to spend some time finding interesting people to follow. Yes, it's ok to pick a few from the Twitter Recommends, but don't just make all your choices there. http://wefollow.com/ is a great website where Twitter users list themselves by interest and topics. You'll find lots of good people to follow there too! Eventually, you too will want to list yourself in WeFollow, but for now, just pick some people that interest you.
Also, if you are tweeting as an individual, be sure to follow people that match your interests AND your values. Remember, others can (and do) see who you are following and it paints a picture of who you are.
If you are tweeting as an organization, it's even more important to be selective. However, DO NOT fall in the trap of following no one. You MUST follow others! Who should an organization follow? Try people you respect in various fields. Although no one really must be “looking” at those tweets from those you follow, it is a great way to get followers to reply to and re-tweet to people you respect. Ask colleagues and see if any are Tweeting (but Tweeting semi-serious interesting topics – not Golf tips - unless you are a Gold oriented company of course.)
For both individuals and organizations, don't just automatically follow anyone who follows you. The more you post, the more "followers" you'll get, but not always by people that are actually interested in you. A lot of your followers will be people that really want you to follow them! So, check their profile, make sure they are "real" and not a spammer and also make sure they match your interests and have something relevant to say with the frequency that matches your interests. Remember, you will also want to read Tweets and if you pick people that are not interesting (or spammers), then you won't enjoy Twitter much at all. Be selective or you might even get to a point where the amount of noise you receive makes your experience impossible.
TIP NO 3 - You must post (if you want to increase your following) and it must be meaningful to your "audience".
One of the items that most Tweeter users look at when considering to follow someone is the frequency of posts and the subject matter of your posts. Infrequent posts (months or weeks apart) and why bother to follow you since you clearly have nothing to say! Too many posts with annoying subjects like "I am going to eat lunch now" and you are just an annoying egocentric waste of time! Finding the balance is not easy, but it is absolutely necessary IF you want to be followed.
By the way, there is nothing wrong with not posting if you are not interested in growing your audience. In my opinion, there is absolutely nothing wrong with users who prefer to simply be "readers" of other people's posts. There are many people sharing very interesting items that are follow worthy and that's cool too! It is OK in my opinion to be clear in your profile and perhaps state that you are not interested in followers - but just following people! This might save you a lot of hassle.
However, if you want to grow your following, you must post relevant useful items. What is relevant? Well, that depends on your audience and only you can determine that. If you are posting for friends and family, perhaps what you are up to each day (or every few days) might be interesting. However, try to give your posts a little more meaning. For instance, instead of "going to lunch", try "Found a new sushi restaurant near work called Tokyo Cafe. Will go try it. Anyone interested?" Also, try including links to things you find that are interesting to your audience. For instance, "Learned about a new file sharing service called DropBox. Check them out at http://DropBox.com".
Even more important, if you are tweeting as an organization, you definitely want to post relevant information to your business but also to your industry. In other words, don't just post each time you have something new to offer or a press release, but also post when studies come out or interesting news about your industry comes out. Again, you need to provide a service to your audience, not just sell to them every time. As a matter of fact, unless you are open and honest about the fact that you will ONLY sell to people (like the Dell outlet, for instance), you should really not be direct selling at all!
- 0 -
I hope these tips get you started to an awesome Twitter experience. Yes, there is much more to learn in terms of managing Twitter and posting to Twitter, but that will all have to wait for another post.
In the meantime, go find some interesting people to follow and don't be afraid to try people out. After all, they are notified when you follow them, but they have no idea when you block or un-follow them. :-)
Labels:
twitter
A picture of consulting clients in 2009?
Monday, July 20, 2009
First, I want to apologize to the current and prospective clients that I am about to annoy. In today's world one has to have a sense of humor!
However, for the past several years as I've worked with large clients (who shall remain nameless), I have experienced an incredible attitude increasingly more so. What am I talking about? I could explain it, but a video I ran across seems to explain it so much better than I could.
For your enjoyment and with my apologies to those that feel offended, here it is. By the way, if you watch and it stings, perhaps it is because the truth often times hurts! :-)
Credits:
zeorge497 YouTube Channel
http://www.vendorclientvideo.com/
However, for the past several years as I've worked with large clients (who shall remain nameless), I have experienced an incredible attitude increasingly more so. What am I talking about? I could explain it, but a video I ran across seems to explain it so much better than I could.
For your enjoyment and with my apologies to those that feel offended, here it is. By the way, if you watch and it stings, perhaps it is because the truth often times hurts! :-)
Credits:
zeorge497 YouTube Channel
http://www.vendorclientvideo.com/
Access your files 24x7 from anywhere with DropBox.
Sunday, July 12, 2009
How often do we look back and notice how much technology and the Internet have evolved? We are getting to benefit from a truly revolutionary time in terms of communications. If you are anything like me, you have several computers for various purposes. In our home, computers now enhance our TV viewing experience. We have a TiVo and a Mac Mini that we use as a media center. Of course, I have my notebook which serves as my primary workstation. In each computer, I have an array of files, pictures and videos - all for various purposes. And therein lies the challenge: sitting on any one computer, does it have "the files" that I need at a given time for a given purpose? In the old days (of merely a few years ago), keeping all my files in all my computers (especially those that may be at a distant location) meant complicated software configuration, possibly an expensive purchase of software and constant monitoring and tweaking. All of this, and forget sharing files with friends unless you wanted to become their tech support service! Luckily, this problem is now solved easily with a relatively new website service called DropBox.
If you can't wait for my review, go ahead and try Dropbox
now. A 2GB account is free and the offer other levels of storage at very reasonable prices. Read on if you want more details.
So, what is DropBox?
DropBox is a web service that aims to make it easy to securely share files with other people, sync them across multiple computers, access them from anywhere, and keep them safe. Their service does require a small program to be installed in your computer but the installation was honestly painless and easy even for the most non-technical user. They support both PC and MAC and also provide a web based interface to access your files, though no editing of files is supported on the web yet (and I don't know what their plans may be on this area.) DropBox also provides an iPhone enhanced website which allows very convenient access to your files via your iPhone. Their most basic account allows storage of 2GB of files and is free.
Why is DropBox so special?
DropBox is special because once installed on your computers (as many as you want), all the files you store in your DropBox folder are automatically and seamlessly sent to all the other computers associated with your account. It is really that easy. Update a file in one computer then switch to any of the other computers and the file is updated there as well. Of course, with large files and multiple updates, it may take some time for your files to travel amongst all the computers, but I have been very impressed with how efficient and fast DropBox has worked for me.
How large a DropBox should you get?
I singed up for a 50GB DropBox, but the size you want will depend on how much information you plan to store on the service. I tested the service with the free 2GB account and was so impressed, I signed up for paid service!
How do I use DropBox?
For me, DropBox has become the hub of all my files. I keep working files (word documents, excel spreadsheets, PowerPoint presentations, etc) for my clients in my DropBox. These files tend to be small and having them accessible in all my computers and my iPhone has become indispensable. I also created a shared folder to store certain tax information for my accountant. She can now see any updates I make to financial files without me needing to send them to her. She just sees them automatically when I change them and I see any changes she makes also.
What DropBox is not!
Although I love this service and it has changed the way I work, DropBox is NOT a replacement for a good backup of your files (and of your computer operating system and software.) There are many files in your computer which you will NOT want to (or be able to) put on DropBox (like your software, large videos and pictures, etc.) In the case of a hard drive failure or a virus infestation, you will need a good backup to get yourself back into working order. A review of backup techniques is outside the scope of this article, but a google search for "computer backup" will yield lots of results.
Try Dropbox
for yourself and see if you like it as much as I do!
If you can't wait for my review, go ahead and try Dropbox
So, what is DropBox?
DropBox is a web service that aims to make it easy to securely share files with other people, sync them across multiple computers, access them from anywhere, and keep them safe. Their service does require a small program to be installed in your computer but the installation was honestly painless and easy even for the most non-technical user. They support both PC and MAC and also provide a web based interface to access your files, though no editing of files is supported on the web yet (and I don't know what their plans may be on this area.) DropBox also provides an iPhone enhanced website which allows very convenient access to your files via your iPhone. Their most basic account allows storage of 2GB of files and is free.
Why is DropBox so special?
DropBox is special because once installed on your computers (as many as you want), all the files you store in your DropBox folder are automatically and seamlessly sent to all the other computers associated with your account. It is really that easy. Update a file in one computer then switch to any of the other computers and the file is updated there as well. Of course, with large files and multiple updates, it may take some time for your files to travel amongst all the computers, but I have been very impressed with how efficient and fast DropBox has worked for me.
How large a DropBox should you get?
I singed up for a 50GB DropBox, but the size you want will depend on how much information you plan to store on the service. I tested the service with the free 2GB account and was so impressed, I signed up for paid service!
How do I use DropBox?
For me, DropBox has become the hub of all my files. I keep working files (word documents, excel spreadsheets, PowerPoint presentations, etc) for my clients in my DropBox. These files tend to be small and having them accessible in all my computers and my iPhone has become indispensable. I also created a shared folder to store certain tax information for my accountant. She can now see any updates I make to financial files without me needing to send them to her. She just sees them automatically when I change them and I see any changes she makes also.
What DropBox is not!
Although I love this service and it has changed the way I work, DropBox is NOT a replacement for a good backup of your files (and of your computer operating system and software.) There are many files in your computer which you will NOT want to (or be able to) put on DropBox (like your software, large videos and pictures, etc.) In the case of a hard drive failure or a virus infestation, you will need a good backup to get yourself back into working order. A review of backup techniques is outside the scope of this article, but a google search for "computer backup" will yield lots of results.
Try Dropbox
Labels:
backup,
file sharing
Time & Billing, WEB 2.0 Style!
Monday, June 15, 2009
I've been a consultant for 20 years now and one of the most important parts of my job is actually to keep track of time spent on projects. A lot of times, my paycheck is tied to this task. However, even when it's not, I've always liked to keep track of "time" to give me an idea of where my days go. Every year or two, I "look around" for a better way to track time. I have used many products over the years, some good, some bad. It seems like it is time for this search once again.
However, this time, my expectations have changed a lot. For one, the Internet is "totally here" and web 2.0 is actually more like web 3.0 by now. Whereas before, I would have never dreamed of keeping my data "in the cloud", now it's my primary requirement. I need to be able to log time from anywhere, quickly and efficiently with or without a computer. Also, my data has to be "safe" and backed up for me with little effort.
How, you may ask? Well, with my iPhone of course!
But first a little background. If you know me at all, you also know that 2 years ago I fell in love with the iPhone. I left my trusty Palm Treo (the best smart phone before iPhone) for the unproven Apple device. I am glad to report that I have not looked back once. The iPhone is truly a revolutionary device and it has changed the game for smart phones dramatically. I know that BlackBerry people think they are "it", but I beg to differ. See, what made my Palm Treo so useful to me was that if I needed to do something on the device, chaces were an app had been written by someone for that very task and I could buy it for maybe $20! I had many apps that I could simply not live without! I am sorry to say that this is just not the same with BlackBerry. Yes, there are apps, but I am sorry there are 50 times that many app for iPhone. (Unfortunately, Palm Treo is dead... and Palm is trying to regain their fame with the new Palm Pre, but I just don't see it happening.)
So, this time around, as for time tracking, my most important requirement was that the application had to work on the iPhone. This is when I turned to Google, of course.
First on the list was a great article reviewing 5 iPhone time tracking apps. You can read it at http://theappleblog.com/2009/02/04/time-tracking-via-the-iphone-5-apps-reviewed/. Although I liked the application TimeWerks and agreed with the author about the other apps, I did not feel my search was done. Also, this article did not cover the "Jobs" app that apple has actually pushed via it's iPhone commercials. Both apps, although very complete, lacked a true WEB 2.0 feel to me because neither had a "web" counterpart. Most importantly, they were both good and sufficient perhaps, but backup of my data worried me. Although they both provided a way to backup your data, each one required me to take a step in order to backup, in essence "sending" my data somewhere else whenever I felt it necessary.
However, thanks to the magic of Google, two or three more links down on the list, there was a hidden gem. A link to http://freshbooks.com/. Freshbooks is actually a service more than an application. Yes, they have a time tracking application for iPhone, but their business is mainly a web based service that you subscribe to on a monthly basis. They definitely handle time tracking for projects, but there's actually more, a lot more.
I did not set out looking to automate my invoices or even issue invoices from an iPhone application. Even I recognize that there are some things you don't want to do on an iPhone and creating, editing and sending client invoices is one of those! However, FreshBooks does both project time tracking AND invoice management in one clean interface that is efficient and easy to use. In a matter of a few painless hours, I had all my current clients added to the system, current projects setup and even recurring invoices (that are always my monthly torture) all setup and "working". I know even have a portal where clients and contractors can see their accounts and even issue payments to me online!
I certainly found a lot more than I was looking for or expecting with the Fresh Books service!
I did sign up for the lowest level of plan, but at $14 per month, it's really a non-cost, certainly considering the amount of monthly work this system has now eliminated for me! For a company my size, this level is sufficient though I recognize that larger companies may need to pay a bit more. For solo consultants, there is a free level, although somewhat limited in the number of clients you could setup.
Still, if you are a consultant or you bill for your time, you definitely want to look at Fresh Books as your possible solution. You will not be sorry you did!
However, this time, my expectations have changed a lot. For one, the Internet is "totally here" and web 2.0 is actually more like web 3.0 by now. Whereas before, I would have never dreamed of keeping my data "in the cloud", now it's my primary requirement. I need to be able to log time from anywhere, quickly and efficiently with or without a computer. Also, my data has to be "safe" and backed up for me with little effort.
How, you may ask? Well, with my iPhone of course!
But first a little background. If you know me at all, you also know that 2 years ago I fell in love with the iPhone. I left my trusty Palm Treo (the best smart phone before iPhone) for the unproven Apple device. I am glad to report that I have not looked back once. The iPhone is truly a revolutionary device and it has changed the game for smart phones dramatically. I know that BlackBerry people think they are "it", but I beg to differ. See, what made my Palm Treo so useful to me was that if I needed to do something on the device, chaces were an app had been written by someone for that very task and I could buy it for maybe $20! I had many apps that I could simply not live without! I am sorry to say that this is just not the same with BlackBerry. Yes, there are apps, but I am sorry there are 50 times that many app for iPhone. (Unfortunately, Palm Treo is dead... and Palm is trying to regain their fame with the new Palm Pre, but I just don't see it happening.)
So, this time around, as for time tracking, my most important requirement was that the application had to work on the iPhone. This is when I turned to Google, of course.
First on the list was a great article reviewing 5 iPhone time tracking apps. You can read it at http://theappleblog.com/2009/02/04/time-tracking-via-the-iphone-5-apps-reviewed/. Although I liked the application TimeWerks and agreed with the author about the other apps, I did not feel my search was done. Also, this article did not cover the "Jobs" app that apple has actually pushed via it's iPhone commercials. Both apps, although very complete, lacked a true WEB 2.0 feel to me because neither had a "web" counterpart. Most importantly, they were both good and sufficient perhaps, but backup of my data worried me. Although they both provided a way to backup your data, each one required me to take a step in order to backup, in essence "sending" my data somewhere else whenever I felt it necessary.
However, thanks to the magic of Google, two or three more links down on the list, there was a hidden gem. A link to http://freshbooks.com/. Freshbooks is actually a service more than an application. Yes, they have a time tracking application for iPhone, but their business is mainly a web based service that you subscribe to on a monthly basis. They definitely handle time tracking for projects, but there's actually more, a lot more.
I did not set out looking to automate my invoices or even issue invoices from an iPhone application. Even I recognize that there are some things you don't want to do on an iPhone and creating, editing and sending client invoices is one of those! However, FreshBooks does both project time tracking AND invoice management in one clean interface that is efficient and easy to use. In a matter of a few painless hours, I had all my current clients added to the system, current projects setup and even recurring invoices (that are always my monthly torture) all setup and "working". I know even have a portal where clients and contractors can see their accounts and even issue payments to me online!
I certainly found a lot more than I was looking for or expecting with the Fresh Books service!
I did sign up for the lowest level of plan, but at $14 per month, it's really a non-cost, certainly considering the amount of monthly work this system has now eliminated for me! For a company my size, this level is sufficient though I recognize that larger companies may need to pay a bit more. For solo consultants, there is a free level, although somewhat limited in the number of clients you could setup.
Still, if you are a consultant or you bill for your time, you definitely want to look at Fresh Books as your possible solution. You will not be sorry you did!
SQL Server 2005 Mirror Setup (A Quick Crib Sheet)
Sunday, May 31, 2009
One of the most important features introduced by SQL2005 was the ability to mirror a database on a backup server. There are many articles written about this Mirror feature all covering it in great depth. However, what I did not find was a quick 1-2-3 on how to setup this useful feature. So, after much reading and analyzing, I came up with the following simple steps to setup a simple mirror.
Before getting into the detail, here are a few important items to note:
On Both Servers
1. Create an endpoint for mirroring. This is the same command issued on "each" server.
Create Endpoint Mirroring_Endpoint
State= Started as TCP (Listener_Port=5022)
For Database_Mirroring (Role=Partner);
Notice above the port that will be used is 5022. If you need another port for each server to listen on, change this to suit your need.
On the PRIMARY Server
1. STOP any applications that are accessing your database. You need to make a clean backup and restore than on the mirror. If applications are putting through updates, your backup will be out of synch. Make a backup of the database AND the log.
Backup Database [YourDBName] to DISK='c:\sqldata2005\backup\YourDbName.bak' WITH FORMAT;
Backup Log [YourDBName] to DISK='c:\sqldata2005\backup\YourDbName_log.bak' WITH FORMAT;
On the MIRROR Server
1. COPY the backup files over to your MIRROR server however you can. For my example below, I copied the files into the SAME folder but on my OTHER server. Don't be confused by this... you MUST copy the files from server to server however you can!
2. Restore the backup with the following commands to keep it in "recovery mode".
Restore Database [YourDBName] from Disk='c:\sqldata2005\backup\YourDBName.bak' with NORECOVERY;
Restore Log [YourDBName] from Disk='c:\sqldata2005\backup\YourDBName_log.bak' with NORECOVERY;
3. You are now ready to "partner up" with the primary server (yes, you do it on the mirror server first.)
Alter Database [YourDBName]
Set Partner= 'TCP://YourPrimaryServer:5022';
Note if you changed the port above, you should change it here too. Also, "YourPrimaryServer" should be a fully qualified server name that resolves in your network. It could be the primary server IP or a full DNS name that resolves to the primary server IP. It's up to you! Remember, the MIRROR partners up with the PRIMARY!
Back on the PRIMARY
1. Finally, "partner up" on the primary server as well.
Alter Database [YourDBName]
Set Partner= 'TCP://YourMirrorServer:5022';
Note if you changed the port above, you should change it here too. Also, "YourMirrorServer" should be a fully qualified server name that resolves in your network. It could be the mirror server IP or a full DNS name that resolves to the mirror server IP. It's up to you! Remember, the PRIMARY partners up with the MIRROR!
All Done
That's it! If you didn't get any error messages when executing the above commands, you now have a PRIMARY server that MIRRORS over to a MIRROR server! Note, the MIRROR stays in recovery mode constantly.
Don't forget to restart your application so that it starts to again ready and update your PRIMARY.
Curious about how the mirror is progressing? Right-Click on the database you mirrored on the PRIMARY server and select TASKS, then LAUNCH DATABASE MIRROR MONITOR. Follow the instructions on screen to register your mirror database. Once registered, you can see the status of both PRIMARY and MIRROR databases.
Failover or Recovery?
If you need to failover to your mirror or recover from some failure of the primary, you'll need to google: "SQL 2005 Mirror Switching Roles" for plenty of information. An excellent place to start is Microsoft's own documentation on this topic available at http://msdn.microsoft.com/en-us/library/ms189850(SQL.90).aspx.
Before getting into the detail, here are a few important items to note:
- This article will only cover setting up a PRIMARY server and it's MIRROR. I am leaving out using a "witness" server (a third server) to keep these notes simple.
- SQL Server will use the "service account" (the account the SQL Service is configured to run under) for authenticating between the servers. Because of that, the steps here will NOT work unless both servers are using the same domain account (if on a domain) or have the same username/password (if not on a domain) for the SQL service!
- Make sure that your two servers have unrestricted connectivity to each other. If you are on the same network, this should not be a problem. However, if you are mirroring over the Internet, make sure that firewall rules are such that the servers can talk to each other and that the traffic between the servers on multiple ports will be allowed.
- I am sure there is a way to do this "point-and-click". However, this procedure does it all with TSQL in SQL Studio.
On Both Servers
1. Create an endpoint for mirroring. This is the same command issued on "each" server.
Create Endpoint Mirroring_Endpoint
State= Started as TCP (Listener_Port=5022)
For Database_Mirroring (Role=Partner);
Notice above the port that will be used is 5022. If you need another port for each server to listen on, change this to suit your need.
On the PRIMARY Server
1. STOP any applications that are accessing your database. You need to make a clean backup and restore than on the mirror. If applications are putting through updates, your backup will be out of synch. Make a backup of the database AND the log.
Backup Database [YourDBName] to DISK='c:\sqldata2005\backup\YourDbName.bak' WITH FORMAT;
Backup Log [YourDBName] to DISK='c:\sqldata2005\backup\YourDbName_log.bak' WITH FORMAT;
On the MIRROR Server
1. COPY the backup files over to your MIRROR server however you can. For my example below, I copied the files into the SAME folder but on my OTHER server. Don't be confused by this... you MUST copy the files from server to server however you can!
2. Restore the backup with the following commands to keep it in "recovery mode".
Restore Database [YourDBName] from Disk='c:\sqldata2005\backup\YourDBName.bak' with NORECOVERY;
Restore Log [YourDBName] from Disk='c:\sqldata2005\backup\YourDBName_log.bak' with NORECOVERY;
3. You are now ready to "partner up" with the primary server (yes, you do it on the mirror server first.)
Alter Database [YourDBName]
Set Partner= 'TCP://YourPrimaryServer:5022';
Note if you changed the port above, you should change it here too. Also, "YourPrimaryServer" should be a fully qualified server name that resolves in your network. It could be the primary server IP or a full DNS name that resolves to the primary server IP. It's up to you! Remember, the MIRROR partners up with the PRIMARY!
Back on the PRIMARY
1. Finally, "partner up" on the primary server as well.
Alter Database [YourDBName]
Set Partner= 'TCP://YourMirrorServer:5022';
Note if you changed the port above, you should change it here too. Also, "YourMirrorServer" should be a fully qualified server name that resolves in your network. It could be the mirror server IP or a full DNS name that resolves to the mirror server IP. It's up to you! Remember, the PRIMARY partners up with the MIRROR!
All Done
That's it! If you didn't get any error messages when executing the above commands, you now have a PRIMARY server that MIRRORS over to a MIRROR server! Note, the MIRROR stays in recovery mode constantly.
Don't forget to restart your application so that it starts to again ready and update your PRIMARY.
Curious about how the mirror is progressing? Right-Click on the database you mirrored on the PRIMARY server and select TASKS, then LAUNCH DATABASE MIRROR MONITOR. Follow the instructions on screen to register your mirror database. Once registered, you can see the status of both PRIMARY and MIRROR databases.
Failover or Recovery?
If you need to failover to your mirror or recover from some failure of the primary, you'll need to google: "SQL 2005 Mirror Switching Roles" for plenty of information. An excellent place to start is Microsoft's own documentation on this topic available at http://msdn.microsoft.com/en-us/library/ms189850(SQL.90).aspx.
Labels:
sql 2005,
sql mirror,
sql server
Could 'Research Tools' be the feature that brings users back to Yahoo search?
Sunday, February 8, 2009

However, for those of us that use Search for research, Yahoo is preparing a new feature that could (at least while Google is not offering a similar feature) bring some searches back to Yahoo. They are calling it "Search Pad" and describe it in their BLOG as a tool "to help users effortlessly capture websites that they find on Yahoo! Search and organize that information to complete important tasks." Check out Yahoo's article on Search Pad or watch their video demo:
By the way, I completely understand the need for this. Over the last few years as the Internet has become more "my job", I find myself doing research all the time on many topics. I have more-or-less a system of keeping my notes in a document along with URLs, but it's very manual and time-intensive to copy-paste URLs and organize notes. Also, sometimes I get distracted and will forget to include a URL, so my system is definitely not fool proof. Finally my "research" is on my notebook, inside documents and both the location of the files and the fact that it's my own shorthand makes it impossible to easily "share" this research or collaborate on it with others.
Perhaps I need to research for "research tools" (which I've not done.) Who knows, there may be something out there for this - but - Yahoo definitely has something here! Whether or not this is enough to bring "searchers" back remains to be seen.
Actually, Yahoo has yet to release this feature. I hope they do it sooner than later, because in the current environment, every company needs every bit of help they can get.
Who knows? "Search Pad" might indeed motivate me to dust off my old Yahoo ID and use Yahoo for a search or two.
What do you think?
Labels:
research tools,
search engine news,
Yahoo
RSS=PBS=WTF?
Thursday, February 5, 2009
If you have heard the letters RSS yet have no idea what they mean OR how to consume RSS, this video is for you. I did not have anything to do with this video, but it is so well done that it deserves to be posted and shared.
Enjoy...
Enjoy...
Subscribe to:
Comments (Atom)