Latest Publications

Book: The Mythical Man-Month by Fred Brooks

The Mythical Man-Month: Essays on Software Engineering is a book on software engineering and project management by Fred Brooks, whose central theme is that “adding manpower to a late software project makes it later“. This idea is known as Brooks’ law, and is presented along with the second-system effect and advocacy of prototyping. The work was first published in 1975 (0-201-00650-2), reprinted with corrections in 1982, and republished as an anniversary edition with four extra chapters in 1995 (ISBN 0-201-83595-9) with the essay “No Silver Bullet” and commentary by the author.

Assigning more programmers to a project running behind schedule will make it even later


Assigning more programmers to a project running behind schedule will make it even later, due to the time required for the new programmers to learn about the project, as well as the increased communication overhead. When N people have to communicate among themselves (without a hierarchy), as N increases, their output M decreases and can even become negative (i.e., the total work remaining at the end of a day is greater than the total work that had been remaining at the beginning of that day, such as when many bugs are created).

* Group Intercommunication Formula: n(n - 1) / 2
* Example: 50 developers give 50 · (50 – 1) / 2 = 1225 channels of communication.

The Second-System Effect

The second system an engineer designs is the most dangerous system he will ever design since he will tend to incorporate all of the additions he originated but did not add (due to the inherent time constraints) to the first system.

Thus, when embarking upon a second system, an engineer should be mindful that he is susceptible to over-engineering it

Progress Tracking

Continued attention to meeting small individual milestones is required at each level of management.


Conceptual Integrity

To make a user-friendly system, the system must have conceptual integrity, which can only be achieved by separating architecture from implementation. A single chief architect (or a small number of architects), acting on the user’s behalf, decides what goes in the system and what stays out. A “super cool” idea by someone may not be included if it does not fit seamlessly with the overall system design. In fact, to ensure a user-friendly system, a system may deliberately provide fewer features than it is capable of. The point is that if a system is too complicated to use, then many of its features will go unused because no one has the time to learn how to use them.

The Manual

What the chief architect produces are written specifications for the system in the form of the manual. It should describe the external specifications of the system in detail, i.e., everything that the user sees. The manual should be altered as feedback comes in from the implementation teams and the users.

The Pilot System

When designing a new kind of system, a team will design a throw-away system (whether it intends to or not). This system acts as a pilot plant that reveals techniques that will subsequently cause a complete redesign of the system.

This second smarter system should be the one delivered to the customer, since delivery of the pilot system would cause nothing but agony to the customer, and possibly ruin the system’s reputation and maybe even the company’s.


Formal Documents

Every project manager should create a small core set of formal documents which acts as the roadmap as to what the project objectives are, how they are to be achieved, who is going to achieve them, when they are going to be achieved, and how much they are going to cost. These documents may also reveal inconsistencies that are otherwise hard to see.

Project Estimation

When estimating project times, it should be remembered that programming products (which can be sold to paying customers) and programming systems are both three times as hard to write as in-house programs. It should be kept in mind how much of the work-week will actually be spent on technical issues, as opposed to administrative or other non-technical tasks, such as meetings.

Communication

To avoid disaster, all the teams working on a project should remain in contact with each other in as many ways as possible (e-mail, phone, meetings, memos etc.). Instead of assuming something, the implementer should instead ask the architects to clarify their intent on a feature he is implementing, before proceeding with an assumption that might very well be completely incorrect.

The Surgical Team

Much as a surgical team during surgery is led by one surgeon performing the most critical work himself while directing his team to assist with or overtake less critical parts, it seems reasonable to have a “good” programmer develop critical system components while the rest of a team provides what is needed at the right time. Additionally, Brooks muses that “good” programmers are generally 5–10 times as productive as mediocre ones. See also Organization and Team Patterns.

Code Freeze and System Versioning

Software is invisible. Therefore, many things only become apparent once a certain amount of work has been done on a new system, allowing a user to experience it. This experience will yield insights, which will change a user’s needs or the perception of the user’s needs. The system should, therefore, be changed to fulfill the changed requirements of the user. This can only occur up to a certain point, otherwise the system may never be completed. At a certain date, no more changes should be allowed to the system and the code should be frozen. All requests for changes should be delayed until the next version of the system.

Specialized Tools

Instead of every programmer having his own special set of tools, each team should have a designated tool-maker who may create tools that are highly customized for the job that team is doing, e.g., a code generator tool that creates code based on a specification. In addition, system-wide tools should be built by a common tools team, overseen by the project manager.

Lowering Software Development Costs

There are two techniques for lowering software development costs that Brooks writes about:

* Implementers may be hired only after the architecture of the system has been completed (a step that may take several months, during which time prematurely-hired implementers may have nothing to do).
* Another technique Brooks mentions is not to develop software at all, but to simply buy it “off the shelf” when possible.

How to read the perforce diff file

Modifications fct


— The lines in range f of the first revision were replaced with the lines in range t of the second revision.

For example, in the change command 8c8,9 tells us that line 8 of revision 1.11 was replaced by lines 8 and 9 in revision 1.12.

Additions lar

—The lines in range r of the second revision were inserted after line l of the first revision.

For example, the change command 9a11 means that line 11 was inserted in revision 1.12 after line 9 of revision 1.11.

Deletions rdl

— The lines in range r from the first revision were deleted; line l is the position where they would have appeared.

For example,  the change command 17d18 means that line 17 was deleted from revision 1.11.

Lolcat

What is a lolcat?

A lolcat is an image combining a photograph, most frequently of a cat, with a humorous and idiosyncratic caption in (often) broken English—a dialect which is known as “lolspeak,” ”kitteh,” or “kitty pidgin” and which parodies the poor grammar typically attributed to Internet slang.

Where does the “lolcat” name come frome?

The name “lolcat” is a compound word of the acronymic abbreviation “LOL” and the word “cat.” A synonym for “lolcat” is cat macro, since the images are a type of image macro. Lolcats are designed for photo sharing imageboards and other internet forums.


Why is a “lolcat” so popular?

The term lolcat gained national media attention in the United States when it was covered by Time, which wrote that non-commercialized phenomena of the sort are increasingly rare, stating that lolcats have “a distinctly old-school, early 1990s, Usenet feel to .”

How does a “lolcat” look like?

These images usually consist of a photo of a cat with a large caption characteristically set in a sans serif font such as Impact or Arial Black. The image is, on occasion, digitally edited for effect. The caption generally acts as a speech balloon encompassing a comment from the cat, or as a description of the depicted scene. The caption is intentionally written with deviations from standard English spelling and syntax, featuring “strangely-conjugated verbs, but a tendency to converge to a new set of rules in spelling and grammar.”

A little bit of history of “lolcats”

The first recorded use of the term “lolcat” is from the anonymous imageboard 4chan sometime around 2005. The word “Lolcat” is attested as early as June 2006, and the domain name “LOLcats.com” was registered on June 14, 2006. Their popularity was spread through usage on forums such as Something Awful. The News Journal states that “some trace the lolcats back to the site 4chan, which features bizarre cat pictures on Saturdays, or ‘Caturdays’.” Ikenburg adds that the images have been “slinking around the Internet for years under various labels, but they didn’t become a sensation until early 2007 with the advent of I Can Has Cheezburger? The first image on “I CAN HAS CHEEZBURGER?” was posted on January 11, 2007 and was allegedly from the Something Awful website.” Lev Grossman of Time wrote that the oldest known example “probably dates to 2006,” but later corrected himself in a blog post where he recapitulated the anecdotal evidence readers had sent him, placing the origin of “Caturday” and many of the images now known by a few as “lolcats” in early 2005. The domain name “caturday.com” was registered on April 30, 2005.


Social networks: LinkedIn

Today I start a long list of articles regarding social networks. i will try to create an account on as many as possible in order to study the user interface, the mai ideea of each one as well as the impact of this topic on the google analytocs reports of this site.

The first site I will start with is Linked in. My profile on that one is here.


Quick facts:

Rank in google: 8

LinkedIn is a business-oriented social networking site founded in December 2002 and launched in May 2003 mainly used for professional networking. As of May 2009, it had more than 39 million registered users,spanning 170 industries.

Computer games advantages

- they improve visual intelligence and manual dexterity

-they can be hard , intelectually chalanging

- they can ask for patience



-games engage the full range of sensory and motor cortices of the brain

-they engage the youngs in social complex  relationships with their peers, building and exploring worlds together

-they demand to take decisions and act like a leader

- the gaming industry now pulls more money than Holliwood

- the power of games to captivate involves their ability to tap into the brain’s natural reward circuity; in the gameworld reward is everywhere;

- they promote curiosity; what draws you in is an elemental form of desire: the desire to see what is next

-in a game it’s not what you’re thinking about when you’re playing a game, it’s the way you’re thinking that matters. Even thow they apply to fictional objects, game ask for snap judgements as well as long term strategies. Games force you to decide,choose and prioritize.

-when you play chess the rules of the game contain no ambiguity; in almost every classical game any ambiguity in the rules and objectives of the game would be a fatal flaw. In video games, on the other hand, is a core part of the experience. The identity of your ultimqte goal and the tehniques available for reaching that goal become visible only through exploring the world. That is very close to real life… for many popular games the ultimate key to succes lies into desciphering the rules and not manipulating joysticks.



- in a game the player has to get to know the virtual world, based on the reflection while exploring this world the player must form a hypothesis in mind; he has to test it and interpratate the feedback he gets from the world; In games, players are learning basic procedure of scientific method.

-computer games force you to go deeper and speculate about what’s going on. If you don’t think about the underlying machanics of the simulation - even if that thinking happens in a semiconscious way- you won’t last very long in the game.

-games oblige you to be very organise and think clear. Books “happen to you”. You can still enjoy a book without explicitely concentraiting on what will happpen in 2 chapters. In the computer games world you are forced to define and excute the tasks. If your definition is blurry or badly organised, you’ll have troubles playing.

-games  teach abstract skills in pattern recongnition, in undestanding causal relations that can be applied in countless situations boath personal and professional



-a computer game is minly about finding order and meaning in the world and making decisions that help create that order

Referencing a fix cell when dragging formulas in EXCEL

I’ve been using excel a lot these days and I needed to write a lot of formulas, the one u drag along hundreds of lines. sometimes I needed to refer a single cell value that should not change while dragging my formula.

This must be pretty normal for people who are using Excel every day, but it is a tip for me that mainly writing code and seldom using Excel.


To fix a value you have to put cursor on the formula cell, on the target cell name (in this case, C11), and then press F4, The C11 cell name will become $C$11 to indicate it’s fixed, and then it’s done. (one can just put the $ sign to the row or column that want to be fixed while copying, like $C$11).

Books and games

Books

- are an active way os spending time because you have to fallow tha lines, the plot and imagine the storry
- are a great source os information, especially the non finctional ones
- are a good way of socialize when several people are readin the same storry
- are improving and demanding the imagination in order to recreate different worlds in your head
- are deeply valorized by our society


Games

- are improving the eye-hand control
- are demanding several brain parts
- are a good way of socialize while plaing with other people
- can be intelectually chalanging
- can ask for a lot of patiance
- are interactive and ususally help developping initiative and leding skills

SEO: Yahoo!-specific REP directives

Yahoo!-specific REP directives that are not supported by Microsoft and Google include:

* Crawl-Delay:

Allows a site to delay the frequency with which a crawler checks for new content

* NOYDIR META Tag:

This is similar to the NOODP META Tag above but applies to the Yahoo! Directory, instead of the Open Directory Project

* Robots-nocontent Tag:

Allows you to identify the main content of your page so that our crawler targets the right pages on your site for specific search queries by marking out non content parts of your page. Yahoo won’t use the sections tagged as such for indexing the page or for the abstract in the search results.

Customize your 404 page

What is a 404 page ?

A 404 page is what a user sees when they try to reach a non-existent page on your site , because

-they’ve clicked on a broken link,

-the page has been deleted,

-they’ve mistyped a URL.

Why is it called like this?

A 404 page is called that because in response to a request for a missing page, webservers send back a HTTP status code of 404 to indicate that a page is not found.

Why creating a cutom 404 Page ?

While the standard 404 page can vary depending on your ISP, it usually doesn’t provide the user with any useful information, and most users may just surf away from your site. A good custom 404 page will help people find the information they’re looking for, as well as providing other helpful content and encouraging them to explore your site further.


TIPS to creating a good custom 404 page

Because a 404 page can also be a standard HTML page, you can customize it any way you want. Here are some suggestions for creating an effective 404 page that can help keep visitors on your site and help them find the information they’re looking for:

* Tell visitors clearly that the page they’re looking for can’t be found. Use language that is friendly and inviting.
* Make sure your 404 page uses the same look and feel (including navigation) as the rest of your site.
* Consider adding links to your most popular articles or posts, as well as a link to your site’s home page.
* Think about providing a way for users to report a broken link.
* No matter how beautiful and useful your custom 404 page, you probably don’t want it to appear in Google search results. In order to prevent 404 pages from being indexed by Google and other search engines, make sure that your webserver returns an actual 404 HTTP status code when a missing page is requested.
* Add a search box on your custom 404 page to  help users find the information they need.

SEO: The robots.txt

As stated in the last article, writing a robots.txt file is important for SEO. It helps tell spiders what is useful and public for sharing in the search engine indexes and what is not.

Not all search spiders will follow your instructions left in the robots.txt file.

A poorly done robots.txt file can stop the search spiders from crawling and indexing your website properly.

How do you build a robots.txt file

One thing you do not want to do is use an HTML editor to build this file. The easiest way to create the file is with a text editor like Notepad. After opening Notepad (or another text editor), save the blank file as robots.txt.

You can use anything that produces a text file.

  • On Microsoft Windows, use notepad.exe.
  • On the Macintosh, use TextEdit (Format->Make Plain Text, then Save as Western)
  • On Linux, vi or emacs


Where to place it?

This file will be placed on the root level of your web server, or in other words the same folder as your index page, once it is complete.

What to write inside?

The text file is actually a list. Its directions consist of two fields, or lines of instruction. The first line is the User-agent line. This is the line where you can specify which search spider bots are allowed to index your site(s).
The second line is the directive line or disallow field. This is the line you will use to block folders or files blocked from spiders. To write the robots.txt file, you would start by addressing specific search engines. Adding a specific search engines spider name here will give the search spider notice that it is to follow the next line for instruction, i.e.: User-agent: googlebot An asterisk (*)  will indicate all search spiders. The second line is known as the directive. By adding a folder after the Disallow statement, the search spider should ignore the folder for indexing purposes and move to others where there is no restriction. Disallow: /images/ You can also disallow specific files this way Disallow: cheeseyporn.htm A good practice is to keep robots out of you cgi bin directory Disallow: /cgi-bin/

Blank Disallow directive line

If you leave the Disallow directive line blank or not filled in, this indicates that ALL files may be retrieved and or indexed by specifiedl robot(s). This would let all robots index all files. User-agent: * Disallow:

Send robots away

And vice versa you can keep all robots out easily. User-agent: * Disallow: / In the example above, the one forward slash (/) equals your root directory. Since the root directory is blocked, none of the other folders and files can be indexed or crawled. Your site will be removed from search engines once they read your robots.txt and update their indexes.

Multiple Disallows to one User-agent

You can provide multiple Disallows to one User-agent. In the following example, all spiders will be told not to index the cgi-bin and the images directories. User-agent: * Disallow: /cgi-bin/ Disallow: /images/

Comments

You can also use comments in your robots.txt file, but you need to be careful of where they are used. Disallow: /images/ #comment send googlebot away We could run into a problem if a search spider bot attempts to disallow /images/#comment, which is a not a folder on the server and would more than likely tell the bots to just leave the website altogether. It is better to leave your comments on their own separate line. See the example below. #keeps googlebot out of my porn User-agent: googlebot Disallow: /images/

Validate

After you have written your robots.txt file and placed it on your server, you should validate it with one of the robots.txt validation tools online.

To analyze a site’s robots.txt file:

* Sign into Google Webmaster Tools with your Google Account.
* On the Dashboard, click the URL for the site you want.
* Click Tools, and then click Analyze robots.txt.

Other Robots.txt Directives

Disallow

Tells a crawler not to index your site — your site’s robots.txt file still needs to be crawled to find this directive, however disallowed pages will not be crawled

Useful for ‘No Crawl’ page from a site. This directive in the default syntax prevents specific path(s) of a site from being crawled.

Allow

Tells a crawler the specific pages on your site you want indexed so you can use this in combination with Disallow

This is useful in particular in conjunction with Disallow clauses, where a large section of a site is disallowed except for a small section within it

$ Wildcard Support

Tells a crawler to match everything from the end of a URL — large number of directories without specifying specific pages

Useful for ‘No Crawl’ files with specific patterns, for example, files with certain filetypes that always have a certain extension, say pdf

* Wildcard Support

Tells a crawler to match a sequence of characters

Useful for ‘No Crawl’ URLs with certain patterns, for example, disallow URLs with session ids or other extraneous parameters

Sitemaps Location

Tells a crawler where it can find your Sitemaps

Point to other locations where feeds exist to help crawlers find URLs on a site