Friday, March 14, 2008

What Are the Things You Need to Know Before Setting Up Your Website?

The first step is to follow a marketing plan. Creating a website should follow the same blueprint as creating an offline business. If you can’t sell your website idea to an investment banker, why would you proceed? The rules are the same. Far too often, people create sites without a business plan and a marketing plan. Start off with an executive statement that describes what your company will look like when it grows up then follow it with a business plan. If you are new to it, MS Office has a basic template that will guide you through the process. Once you understand your business goals, then create a marketing plan that has the steps to fulfill your business goals.

Second step, you need to understand the technology. This will help you plan your website business and use the correct tools. There are great books available that can give you a basic understanding of each.

Popular Web Applications Technologies

Server-Side Processing Technologies
- Common Gateway Interface (CGI)
- Active Server Pages (ASP)
- Java Servlets
- ActiveX Controls (Server-side)
- Java Server Pages (JSP)
- PHP (Hypertext Preprocessor)
- ColdFusion Markup Language (CFM)

Managing and Displaying Data Technologies
- Extensible Markup Language (XML)
- HyperText Markup Language (HTML)
- Cascading StyleSheet Language (CSS)
- Extensible Stylesheet Language (XSL)

Technologies for Client-Side Processing
- Cookies
- JavaScript
- VBScript
- Java Applets
- ActiveX Controls (Client-side)
- Plug-ins
- Flash and Media Players

Developing technology solutions follows four steps.
1) Analyze and project the overall requirements of how the system should work, including determining alternatives and technology budgets.
2) Design and choose the technology carefully and understand how all the hardware and software systems are to be integrated.
3) Implement the technology structure together and test it out to make sure it works the way you intended. This should include the hardware installation, configuration and setting up the network and software applications.
4) Maintain the technology processes fix any bugs and make improvements to the website.

Next, you should design the website. Whether you are using a WYSIWIG (what you see is what I get) or hire a website designer, ensure you follow the flow of the site to ensure you don’t lose your customer. Usability testing is critical for the success of any site and most designers do not put enough attention to this.

Probably the most important piece of advice is to work within your means. Do not over-reach your capabilities when spending your money. Work with your team to determine where your resources should be spent and don’t forget promoting your site. Motivate your employees with incentives and gifts and they will work harder for you. This will save you money in the long run, because often a gift is less expensive than additional payroll.

My Business Guide provides resources on motivation and marketing assistance.

Must Project Managers Be Technically Savvy?

“Must Project Managers be technically savvy?” This topic always seems to cause quite a stir. While some believe that all you need to manage a project is a PMP certification, others are convinced that you can't successfully manage a software development project unless you truly understand the intricacies of the product.

I agree! To be an effective Project Manager, you must know the ins and outs of your solution. You must be capable of designing and developing the solution yourself.

Here are 5 fundamental project management tasks that Project Managers can't accomplish unless they have a strong technical background and truly understand the particulars of their product.

Estimating Effort

In order to create a project plan, you must be able to estimate how much effort is required to complete all of the required tasks. Needless to say, you can't estimate effort unless you truly understand what's involved in designing and implementing those features.

Unless you understand what's required to reach 5-9 reliability, you can't assess how much effort is required to achieve this non-functional requirement. Unless you clearly understand how to write Java Server Pages, you can't predict how much development effort is required to transform an HTML prototype to set of fully functional JSP pages.

Scheduling Tasks

Imagine that someone hands you a list of activities that need to be completed for a given project, along with the overall effort. Could you schedule the tasks in a logical sequence? Should the developers start with the presentation, the business, or the data storage layer? Which comes first when working on a presentation layer: the HTML, the JavaScript, the CSS, or the servlets?

A Project Manager must be able to schedule activities in a logical sequence. If you can't determine which activities must come first and which ones can be done in parallel, you can't put together a project schedule.

Assessing Risk

Imagine the following scenario. Your product is scheduled to be released in 5 days. The QA team discovers a defect in the API through a series of CLI tests. After carefully examining the problem, you realize that you're developers have been working around this defect for months.

Given that you're only 5 days away from releasing your product, should you fix this defect or document the workaround? At this point in time, how risky is it to modify an API that's being used? How confident are you that the developer can fix this API in the given timeframe? What's the likelihood that changing this API will break the modules calling it? Should you fix the defect now, or release the product and address the bug in a patch release?

Unless you've seen the code behind this interface, you can't answer any of these questions yourself. You need to ask your developers. You're not the decision maker. They are.

Participating In Customer Meetings

Customer meetings always end up in technical discussions. Unfortunately, if you can't speak intelligently about your technology, you can't add any value to such meetings. You're not participating; you're strictly listening, and perhaps taking notes. Sooner or later, your customers will find themselves contacting your developers directly. “Why contact the Project Manager if he can't give me an answer? I may as well go straight to the source.”

Ensuring Nothing Falls Through The Cracks

Let's face it. You never get as much time as you'd like to plan your projects. What's important is not that you get it perfect the first time around. What's important is that you can catch the tasks that fell through the cracks before it's too late.

If you don't know what's required to complete your solution, you won't be able to identify all the overlooked activities. They'll either be pointed out by your developers, or simply omitted forever.

In Short…

To be an effective Project Manager, you must be capable of designing and developing the solution yourself. Otherwise, you have two options. You can either (a) ask others to make decisions for you, or (b) simply pretend you know what you're talking about. In the first case, you're a Project Coordinator. In the second case, you're a Project Mangler.

Analyzing Google Error in java

Analyzing The following is an error that was witnessed by a Google user on July 3rd 2006. Below I give a possible explanations for what the error is saying.

****** BEGIN ERROR ******

pacemaker-alarm-delay-in-ms-overall-sum 2341989 pacemaker-alarm-delay-in-ms-total-count 7776761 cpu-utilization 1.28 cpu-speed 2800000000 timedout-queries_total 14227 num-docinfo_total 10680907 avg-latency-ms_total 3545152552 num-docinfo_total 10680907 num-docinfo-disk_total 2200918 queries_total 1229799558 e_supplemental=150000

–pagerank_cutoff_decrease_per_round=100 –pagerank_cutoff_increase_per_round=500 –parents=12,13,14,15,16,17,18,19,20,21,22,23 –pass_country_to_leaves –phil_max_doc_activation=0.5 –port_base=32311 –production –rewrite_noncompositional_compounds –rpc_resolve_unreachable_servers –scale_prvec4_to_prvec –sections_to_retrieve=body+url+compactanchors –servlets=ascorer –supplemental_tier_section=body+url+compactanchors –threaded_logging –nouse_compressed_urls –use_domain_match –nouse_experimental_indyrank –use_experimental_spamscore –use_gwd –use_query_classifier –use_spamscore –using_borg

****** END ERROR ******

Please note, I have reformatted this error to make it easier for you to read and understand. Okay now the broad scopesummary of this error is as follows.

The first “paragraph” is data the instance (the google program that is throwing this error) is revealing about itself. Basically it’s statistical data about how that instance has been running. Bare in mind I do not think this is aggregated data for the whole server, but rather just this one program instance. While there is definitely some interesting content here for the uber geek, what will probably interest you most is in the second paragraph.

The second “paragraph” reveals how this particular instance is configured. In other words, it’s the settings Google is using for this particular instance. Please keep in mind this is just one of millions of instances. And that NOT ALL will be configured this way. You will notice that there is a - in front of each setting, this is standard convention for declaring configuration settings when starting a program in Linux and Unix. The - does not mean minus, it’s just there to help the program differentiate between all the settings that are being set in it at the same time.

So let me break this down and give you my THEORETICAL explanation for each setting. Please understand this is only a guess. I do not work for Google. This is simply one programmer analyzing an error message from a Google query. Also keep in mind that I did not make the query so I’m missing some of the context to which the error is related to.

Finally, before I begin, I want to define a term I will be using often throughout this post and that’s “instance”. Many of you should know what Apache is. It’s the web server software that powers a large portion of the web pages on the Internet. When you browse to a web site, your browser talks to Apache which is running on the server you are talking to and it’s sending the web page back to your browser. What many people don’t know is that in most server configurations, Apache is not running as a single program. What happens is, when Apache is started up, a master copy of Apache starts running. This master copy then creates duplicates of itself. So in essence Apache could be running as many as 500 copies of itself. Each copy capable of handling one of many simultaneous requests for web pages. This why one web server can efficiently serve up several hundred web pages in the space of second. It’s duplicating itself to share the load. There are other reasons it does this, but this is the most simple way to explain it. Anyway, each copy of Apache that is running on the server is know as an Apache process or an Apache “instance”. So you would say most web servers on the Internet are running many instances of Apache at the same time.

If you extrapolate this idea, you will understand that each Google server that is returning search results is running a program that Google has written that is more than likely running many copies of itself at the same time on the same server.

–pagerank_cutoff_decrease_per_round=100 –pagerank_cutoff_increase_per_round=500 A whole myriad of ideas pop in my head for describing these two settings. But here’s my guess. When you do a search you land on page one of the results. You can then click the next link or the page 2 link to move to the next set of results. Well, Google may be setting a minimum and maximum threshold that its evaluating against page rank to determine which pages are allowed to show on the first page as opposed to the second page. These values may be telling the instance how much to adjust those thresholds for each successive series of listings.

–parents=12,13,14,15,16,17,18,19,20,21,22,23 This setting tells this particular instance who it’s parents are. Parents could be defined as master instances to which this instance is a slave to (probable). It could also be referring to master servers (physical boxes rather than programs) (I don’t think that’s the case though). It could also be referring to some other hierarchical design Google is using to segregate it’s instances.

–pass_country_to_leaves This seems to be telling the instance to pass the country that query was placed in as data along with the other data it’s sending up or down it’s node tree. This would make sense since considering Google has to filter results for places like China. It also allows them to do contextual searches based on locale.

–phil_max_doc_activation=0.5 I have no flippin idea what this is.

–port_base=32311 I’m betting this is telling this instance what TCP port to be listening for requests on. It could also be indicating which version of the software is currently running, but I’m leaning toward the former.

–production This more than likely indicates that this instance is running in a live (also known as production) environment. Rather than running as a test. Which makes sense when you consider this error was retrieved from a live user on Google’s site.

–rewrite_noncompositional_compounds This refers to how the instance should or should not modify the syntax of the search that was placed. For example articles like a, and, the can be superfluous in many searches. But I think this particular setting possibly tells this instance how to deal with compound phrases.

–rpc_resolve_unreachable_servers RPC is short for remote procedure call. This is an acronym that describes how one program contacts another program and exchanges information. It seems to be telling the instance to do additional checking to resolve servers it can’t initially find.

–scale_prvec4_to_prvec prvec4 could be translated to mean Page Range Vector 4. If so, it’s telling this instance to convert Page Rank Vector 4 algorithms down to some base line Page Rank Vector.

–sections_to_retrieve=body+url+compactanchors This is simply telling this instance what pieces of information it is responsible for finding/handling. The body, url and compact anchors for the listings it will show. Not exactly sure what it means by compact anchors.

–servlets=ascorer Servlet is generally a reference to a individual instance (program) when in an environment of many other instances, and is many times an indicator that Java is being used. See, because computers can do computations so fast, it doesn’t make sense to run one single program at a time. You maximize the servers effectiveness by running LOTS of program (which in some cases like Apache can actually be exact copies of each other) at the same time.

The ascorer reference could mean that this instance is being told to be a scorer or one who does scoring of listings for a request. This would fit right in with all the other configurations in here that reference Page Rank and other scoring mechanisms.

–supplemental_tier_section=body+url+compactanchors This is similar to sections_to_retreive. Except its probably telling this instance which information should be show in the supplemental section of the resulting listings.

–threaded_logging This probably means that this instance should be logging it’s activity, maybe the search term that was used, maybe information about the user, who knows. The threaded word indicates that it’s logging in an environment where many other instances are logging to the same place. So it needs to be careful not to interfere with other logging activity.

–nouse_compressed_urls This is telling the instance not to use compressed urls. What do they mean by compressed? Well it could mean a WHOLE LOT of things I don’t have time to go into right now. But I’m guessing it means not to change the url in any way when displaying it to user.

–use_domain_match This may be telling this instance that it should be looking for related listings within a domain for each listing returned. You know when you sometimes see one listings and then there is another listing indented right below it from the same site?

–nouse_experimental_indyrank This instance is being told NOT to use some experimental ranking mechanism they have dubbed “indyrank”.

–use_experimental_spamscore This instance is being to that it SHOULD use some experimental ranking mechanism they have dubbed “spamscore”. The name alone would imply they are trying out solutions to combat search engine spam. Very interesting.

–use_gwd I think this is telling the instance that it should look in the “Google Web Directory” for results or maybe include results from the GWD into results from other sources. Just a guess though but it does have a bit of logic to it.

–use_query_classifier This is telling the instance that it should be classifying it’s search terms. What kind of classification? I don’t know.

–use_spamscore This could be telling the instance to use a more stable version of a spam mechanism dubbed “spamscore” along with the experimental one referenced earlier. Maybe do some kind of error checking or to make sure the results from the experimental score doesn’t deviate to far from it’s baseline spam score. It could also just tell the instance to turn on spam scoring and the previous spamscore setting could be telling it which spam score mechanism to use.

–using_borg While you immediately think Star Trek, or at least I did when I saw this. I have a feeling this may be some reference to an internal routing system in the Google cluster as a whole. I could be totally way off base on this though.

Anyway, I found this rather interesting and thought you might find it an interesting view point into the inner workings of Google. Again, this is simply my THEORY about what these configurations might imply. I have absolutely no hard evidence to back any of this up. It just my opinion.Google Error

Java Server Pages

Java Server Pages is a technology which permits software developers to create dynamic request like HTML, XML in order to answer to client request in the net. This technology lets Java code and definite pre-defined procedures to be implanted into static content. The syntax in Java Server Pages includes a supplementary XML tag which is known as JSP actions. It is made use to evoke the utility of the built-in functions. Moreover JSP permits to establish and form the JSP tag libraries which operate as an extension to the standard XML or HTML tags. These JSP tag libraries give a good technique to widen the potentiality of the Web server by providing an independent platform.

JSP compiler compiles the JSPs into Java Servlets. A JSP compiler may possibly create a servlet in Java code and it is later compiled by the Java compiler. It might even directly produce the byte code for the servlet. Java Server Pages can be examined as a high level abstraction of servlets which is practiced as an extension of the Servlet2.1 API. The Java Server Pages and the Servlets were initially developed at Sun Microsystems. Opening with version 1.2 of the Java Server Page specification the JSPs have been built under the Java Community Process.

There are quite a few JSP implicit objects that are represented by the JSP container and it could be mentioned and indicated by the programmers.

• Config – It gives the data of the servlet configuration.

• Application – Data’s are shared by the servlets and Java Server Pages in the application.

• Exception – Exceptions are not trapped by the codes in the application.

• Out – The data’s are written with the help of JSP Writer to the response stream.

• Request – Here the Hypertext Transfer Protocol request the object.

• Response – Here the Hypertext Transfer Protocol response the object

• Session – It is helpful to trace the data’s and information about a user from one request to another request.

There are several actions that are performed in JSP actions. A JSP action is nothing but a XML tags that invokes functionality of the built-in web server. Some of the JSP action is given as follows.

Jsp:param – It indicates a parameter which will be added in addition to the request of the existing parameters. It is used inside the jsp:params or jsp:include, jsp:forward blocks

Jsp:include – Java Servlet provisionally gives the request and response off to the specific Java Server Page. The Control will later come again to the existing JSP as soon as the other JSP has completed. With the help of this the JSP code will be distributed among several other JSPs rather than replica.

Jsp:forward – This JSP action is used to give off the request/response to the other servlet or JSP. The control will not come back to the existing JSP.

Jsp:plugin – The ancient version of web browsers like Internet Explorer and Netscape Navigator use various tags to embed an applet. This action creates the definite tags that are required for a browser to include an applet.

Jsp:fallback – This action is used to confirm that if the browser never gives support to applets.

Jsp:getProperty – It obtains a property from the specific JavaBean.

Jsp:setProperty – It sets a property in the specific JavaBean.