<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">

 <title>Francisco Garcia Rodriguez</title>
 
 <link href="http://francisco-garcia.net/" />
 <updated>2012-02-02T15:09:11+01:00</updated>
 <id>http://francisco-garcia.net/</id>
 <author>
   <name>Francisco Garcia Rodriguez</name>
   <email>public@francisco-garcia.net</email>
 </author>

 
 <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/TheDigitalLumberjack" /><feedburner:info uri="thedigitallumberjack" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry>
   <title>You Are The Evil One</title>
   <link href="http://feedproxy.google.com/~r/TheDigitalLumberjack/~3/61M7MxMZMI8/you-are-the-evil-one" />
   <updated>2012-02-01T00:00:00+01:00</updated>
   <id>http://francisco-garcia.net/blog/2012/02/you-are-the-evil-one</id>
   <content type="html">&lt;p&gt;&lt;a href="http://de.wikipedia.org/wiki/Mohandas_Karamchand_Gandhi"&gt;
&lt;img src="/images/posts/gandhi.jpeg"  class="left" &gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Last weekend shopping with a friend in the supermarket I had a revelation right in front of the meat section about how hard is being a fair person. The following dinner was such a bloody discussion about the stupid belief of people in fairytales, unicorns or that politicians and banks are the most evil forces of this world.&lt;/p&gt;

&lt;p&gt;Our fight just started because of some stupid chicken breast. While I was looking at the prices around the butcher's section, my friend came proudly with a frozen bag and slapped my face with the brilliant deduction of the day: This costs 1.60€ and what you are looking at costs 2.40€&lt;/p&gt;

&lt;p&gt;Although I do not make a fixed amount of money every month, I would say my friend makes more than I do. We both do some regular donations but do not agree on our goals. My friend's small &lt;a href="http://en.wikipedia.org/wiki/Jiminy_Cricket"&gt;Jiminy Cricket&lt;/a&gt; is at ease donating money for nature and wild animal life, something which I find rather stupid considering that chicken choice.&lt;/p&gt;

&lt;p&gt;Before converting into a &lt;a href="http://en.wikipedia.org/wiki/Flexitarian"&gt;flexitarian&lt;/a&gt; I was a vegan concerned about animal rights because of an overdose of &lt;a href="http://youtu.be/5D8wSEHTbVk"&gt;PETA's videos&lt;/a&gt;. &lt;em&gt;Yeah, I know, it is a real shame but meat is not easy to give up and it is not always like that&lt;/em&gt;. Oh really? You might well believe also that your chicken gets a massage in the belly every morning and some classical music during the evening. Now get serious and make your numbers. Most chickens that people buy comes from a place where 10 to 20 chickens are &lt;em&gt;manufactured&lt;/em&gt; per square meter. If you have 1,500 chickens in 100 squared meters would you notice if one get sick? or when half of them are dead? You just load all of them on antibiotics everyday just in case those bastards die on you and ruin your production quota.&lt;/p&gt;

&lt;p&gt;How much more do you think it actually costs to &lt;em&gt;raise&lt;/em&gt; one chicken outdoors? think about fresh air, some space to run, maybe green grass, sunlight and real food instead of &lt;a href="http://en.wikipedia.org/wiki/Compound_feed"&gt;compound feed&lt;/a&gt;. Say maybe, that you need 1 squared meter for each one. Also the cost of living of the local farmer. How is he supposed to sell that? 10 times more? No matter how you look at it, raising an animal with some decent life costs more. Do you really think it is the difference between 1.60€ and 2.40€? Well, that day I was looking at the real local, natural farming edition, and that my friend, was 10.20€ bucks, same quantity. That is the real cost of supporting a local farmer, demanding some dignity for the life of that chicken, avoiding the &lt;a href="http://www.nrdc.org/water/pollution/nspills.asp"&gt;environment and human health&lt;/a&gt; impact of a meat factory and dreaming for future generations with &lt;a href="http://greenliving.about.com/od/healthyliving/a/Antibiotics-Meat-Production-Livestock-Farm.htm"&gt;effective antibiotics&lt;/a&gt;. Hardly any of my donations goes for animal life hence I am very evil, some vegan friend hate me for being so cruel eating animals and many others shame on me because I am the &lt;a href="http://www.urbandictionary.com/define.php?term=dumbass"&gt;dumbass&lt;/a&gt; who throws away money after being brainwashed from &lt;a href="http://www.stern.de/panorama/bund-stichprobe-haehnchen-haeufig-mit-antibiotika-keimen-belastet-1771455.html"&gt;yellow&lt;/a&gt; &lt;a href="http://www.bund.net/nc/presse/pressemitteilungen/detail/artikel/haehnchenfleisch-in-supermaerkten-mit-krankheitskeimen-belastet-handel-muss-kunden-vor-antibiotikar/"&gt;journalism&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;So what is the lesson from that little chicken? That nobody cares, because all that matters is getting the best price. A bio egg costs 40 cents more, and that is also the price margin according which many people decide if you are an idiot.&lt;/p&gt;

&lt;p&gt;Leaving poor chickens aside, the fashion industry is another great example. Some months ago another friend of mine was so proud because she bought some jeans for 5€. Yes, I know, so sad there is so much injustice in the world, and I am sure she slept just fine that night without thinking about a 6 years old child sewing the button with bleeding fingers. Who can believe that is the real cost of a pair of jeans? This time we need a factory, material, machines... and the minimum wage for the worker to carry a decent life. In a wonderful world the worker could get 30% of the sale, being realistic 10%, but in the real one, I do not believe it is more than 1%.&lt;/p&gt;

&lt;p&gt;Is there any BIO or &lt;a href="http://www.fairtrade.net/"&gt;FairTrade&lt;/a&gt; equivalent for the fashion industry? Clearly those jeans should cost more than 5€. &lt;a href="http://smoda.elpais.com/articulos/que-pagas-cuando-compras-una-cazadora-de-cuero-de-80-euros-o-de-4000/192"&gt;What is the real value of clothing?&lt;/a&gt;. Maybe you should buy from a trustworthy brand claiming that they produce locally, not in exploited countries, but there are a lot of ways to cheat on that. You do everything abroad with slave labor force, sew one button locally and put &lt;em&gt;Made At Home Sweet Home&lt;/em&gt; because &lt;em&gt;Made in China&lt;/em&gt; is not cool. In the fashion industry it is more fashion to write &lt;em&gt;Made in Italy&lt;/em&gt;, that is exactly the reason for Italy having the &lt;a href="http://www.nytimes.com/2010/09/13/world/europe/13prato.html?pagewanted=all"&gt;largest Chinese concentration in Europe&lt;/a&gt; &lt;a href="http://coastalfriendly.com/friendly/index.php/2010/12/los-italianos-estan-comprando-ropa-china-hecha-en-italia/"&gt;1&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It seems that injustice in the world is because of greedy people. You know, those politicians and those bankers. Oh yeah, that last group is the worst of all evil. You can see that everywhere, on TV, on Internet... because the world financial crisis is a direct result of their evilness. Most people give freely their money to those bankers. As far as the politics goes, most people promote them. I say promote and no &lt;em&gt;vote&lt;/em&gt; because either they vote the big parties financed by the banks they hate, or just do not vote, which is exactly the same thing, because the smaller parties, the ones less manipulated and with people who actually want to do something, have a hell of life to get votes enough.&lt;/p&gt;

&lt;p&gt;Personally I am not that much scared of the greedy banks. I am more concerned about normal people. Sometimes I believe that people who feel smart getting the lowest price without thinking on the meaning of that price might not be that much better. Would they do anything different having the power? Many people still believe that a fair job is a stable 8 hour life-long one, not very stressing and a style of life based on products produced by slave labor force.&lt;/p&gt;

&lt;p&gt;Are banks and corporations really evil? How many people financing a house or a car actually pays a higher interest to an &lt;a href="http://en.wikipedia.org/wiki/Ethical_banking"&gt;ethical bank&lt;/a&gt; instead to one giving lower prices because of their higher profits financing weapons and slave force/polluting companies? Since when in this world is giving people exactly what they want a crime?&lt;/p&gt;

&lt;p&gt;Most people price demands do not allow local production by people with a similar quality of life. They also demand better work conditions and more environmental protection. How are they surprised when labor is outsourced to a place you can &lt;a href="http://news.cnet.com/8301-1001_3-10164325-92.html"&gt;enslave&lt;/a&gt; and &lt;a href="http://www.greenpeace.org/international/en/publications/reports/Dirty-Laundry/"&gt;pollute&lt;/a&gt;? Even most amazing is when they hate foreign policies when the most crucial thing we must do right now is exporting our social and environmental values to them so everybody can compete under a more fair game.&lt;/p&gt;

&lt;p&gt;And the most intriguing questions of all: Why on Earth did I place a picture of Gandhi on this post if I wrote most of the time about chickens? Indeed, this post originated from a dead chicken! Well, the reason is because for Gandhi the final responsibility of the solution went something like this:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;Be yourself the change you want to see in the world&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Please, before complaining again about how unfair life is, make of yourself an example. This is not all or nothing. You can be ethical one week a month, or you can buy the happy chicken for your kids while you eat the factory version. Think twice about what you buy. Do your research and an effort to become a more responsible consumer. Deciding the right thing or choosing fair products is never easy. Support local artisans, farmers and people trying to make a decent life by producing something on their own. Be yourself that change.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/TheDigitalLumberjack/~4/61M7MxMZMI8" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://francisco-garcia.net/blog/2012/02/you-are-the-evil-one</feedburner:origLink></entry>
 
 <entry>
   <title>Your Credit or Your Life</title>
   <link href="http://feedproxy.google.com/~r/TheDigitalLumberjack/~3/3zkRDR3Pevw/your-credit-or-your-life" />
   <updated>2011-11-22T00:00:00+01:00</updated>
   <id>http://francisco-garcia.net/blog/2011/11/your-credit-or-your-life</id>
   <content type="html">&lt;p&gt;During the last months I've been exposing myself more to the entrepreneur world.
I am not sure if this is one reason for which more people is asking me about
becoming a freelancer or building a new startup. Todays post is not only for all
of you wannabe independent out there, it also applies to anyone concerned about
how money affect life.&lt;/p&gt;

&lt;p&gt;If you are planning to take the lead of your career you will find plenty of
literature out there and blog posts. Let me summarize most of what I learned
about life and money so far.&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;The most expensive things in life are:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Laziness&lt;/li&gt;
&lt;li&gt;Ignorance&lt;/li&gt;
&lt;li&gt;Rush decisions&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;

&lt;p&gt;You alone are responsible for covering those points because no one will solve
them for you. The bad news are that it might take your whole life getting it
right.&lt;/p&gt;

&lt;p&gt;I have noticed one difference between Americans and Europeans, it might be one
of those things that the American school system implanted into my brain, which
could explain why I am so concerned about it: Most Europeans completely
underestimate the importance of good credit.&lt;/p&gt;

&lt;p&gt;People building their own company are all the time leveraging credit on their
side and use it as one of their most valuable tools. Great ideas cannot wait to
be implemented until you grow the money, neither good opportunities are open for
too long.&lt;/p&gt;

&lt;p&gt;The other people who do not have to deal with banks so often, ignore such
nuisance convinced that solid private finances are only about being solvent:
saving some money in a bank account and never spending what they do not have.&lt;/p&gt;

&lt;p&gt;Anyone wanting to fly solo, must learn more about private finances.
Forget about a rent or public health care, you are completely on your own and
better be ready to know what to do with that extra money. You must learn
something about savings, taxes, investment and credit. The later is the one
people usually neglect, so that is the only thing I want to write about.&lt;/p&gt;

&lt;p&gt;Nobody like the idea of the extra money gone with a loan. They rather pay in
advance everything and assert the idea of how evil and stupid borrowing money
is. Yeah, to the hell with credit... this is what most freelancers never
think/care about before jumping on the entrepreneur bandwagon. They do not
notice how their credit score sinks deep into hell until it is too late.&lt;/p&gt;

&lt;p&gt;What are the implications of that stupid thing about credit? Well, if you try
to upgrade your phone contract you might be surprised that you cannot get it.
Your phone company will check your credit, which reflects your non permanent job
status and decide not to risk themselves giving you a phone that you might not
pay, even if it is free with a 10€/month contract.&lt;/p&gt;

&lt;p&gt;Since you are new into freelancing, you might decide to spend a lot on new
gadgets, office stuff... maybe go wild and decide to pay 600€ in 12 smaller
payments. Guess what, you will not get it. Even if you had 100 times more money
ready in your your bank than the money you ask for, nobody will trust you, not
even your very own bank. For them you are Mr Nobody and Mr No Job&lt;/p&gt;

&lt;p&gt;Companies do not care at all how much money you have saved, they have no idea of
how free you are to use it. So stop dreaming about solving your problems sending
them your last balance, it will just not work. What they care about is your
financial experience and commitment paying debts, how often and how much other
institutions trust in you: your credit history&lt;/p&gt;

&lt;p&gt;If you ever plan to buy a house, buy car or face a medical situation where the
best solution is not paid, you will need to ask for a loan. Having bad credit
does not mean that no one will give you money, only that you will have to pay
much more. Loan interest rates can move between 6% to 30% depending on your
credit score. If you are not good at financial math, you should know that a 10
year loan at 6% with monthly payments mean that at the end you pay back to your
bank the money plus 33% in interests. With a 30% loan you pay 216%. If you are
surprised with these numbers or do not understand why 5 times more of interest
rate cost you 7.2 times more wait until you need a loan.&lt;/p&gt;

&lt;p&gt;Being independent means that most likely your whole life your credit will be
worst than a normal person with a permanent job contract, paid insurance and
paid retirement. Even if you had 1,000 times more money in your bank account
than them. In the very moment you become a freelancer, you will stink to every
bank on Earth.&lt;/p&gt;

&lt;p&gt;Giving advice about improving your credit is difficult because it depends on the
country and &lt;em&gt;so far&lt;/em&gt; it is not something traveling with you to a new country.
These are some things for improving your score that usually work everywhere and
you should do before quiting your job.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Ask your bank for an increase in your account overdraft margins. Anybody
should maximize this once a year. With time and a good credit you should get
them between 6,000 and 10,000 margin, but normal employed people who never cared
about credit will likely get 500 worth &lt;em&gt;trust&lt;/em&gt; their first year. Offer them to
accept higher overdraft fees in exchange of a wider margin, but never ever use
it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Get yourself a credit card or two. Prepaid ones do not count, only real
ones, however can use them without the credit part.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Make a phone contract where you must pay a minimum every month. Mostly
anything with your signature and commitment to pay will work, even your
electricity bills.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Next time you are offered buying something with monthly payments, say yes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Never close an account or contract where you were trusted money or your
commitment to pay without thinking twice about it. Once you close it, your whole
credit history related with that contract will vanish.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;The above points are things that any financial institution can research about
you. Ask around for your local credit agencies and ask them for your credit
history and learn what they are tracking and what you can improve.&lt;/p&gt;

&lt;p&gt;Financially most people strive only for economic independence, the &lt;em&gt;bye mom and
dad&lt;/em&gt; level. Next level is when you are able to afford a family. There is one
more personal finance level which you should never lose the sight of: the
&lt;em&gt;economic freedom&lt;/em&gt; level. That is when you reach a point where you neither
suffer nor endure nuisance bringing home a paycheck. You still work for one, but
you do not suffer for it and do not care if your lifestyle is the same as now
for the rest of your life.&lt;/p&gt;

&lt;p&gt;You can either be born with money, inherit it, marry it, steal it, work for it
or a combination of that. Most people spend half of their life destroying their
health for money and the other half destroy their savings with their health
costs. However some decide to live working on something they love without
dreaming for retirement. It is not only having luck neither being independent,
although that helps a lot. It takes some self reflection too on what you really
want and some effort on learning how to deal better with the money you make. At
the end, the &lt;em&gt;economic freedom&lt;/em&gt; does not only take money, but also experience
and maturity. Usually that also takes longer than you might expect.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/TheDigitalLumberjack/~4/3zkRDR3Pevw" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://francisco-garcia.net/blog/2011/11/your-credit-or-your-life</feedburner:origLink></entry>
 
 <entry>
   <title>Misunderstanding Software Quality</title>
   <link href="http://feedproxy.google.com/~r/TheDigitalLumberjack/~3/_79-NSGfubA/misunderstanding-software-quality" />
   <updated>2011-11-02T00:00:00+01:00</updated>
   <id>http://francisco-garcia.net/blog/2011/11/misunderstanding-software-quality</id>
   <content type="html">&lt;p&gt;&lt;img src="/images/posts/misunderstanding.jpeg" width="50%" class="left" &gt;&lt;/p&gt;

&lt;p&gt;The word &lt;strong&gt;quality&lt;/strong&gt; applied to software is full of false stereotypes and
misconceptions. You should blame the materialistic view of other engineering
disciplines have forced unto us. People hear quality and instantly they make a
connection with high quality materials. All high quality building, car,
machines, etc. have high quality steel. The main expectation from a high quality
restaurant is a tasty dish with fresh ingredients and from a high quality hotel
a big room furnished with luxus furniture.&lt;/p&gt;

&lt;p&gt;So what do most people expect from high quality software? Programmers
themselves and even IT managers have problems defining that word. In our field,
even facing the doubt of what it is exactly, we all are 100% sure of at least
one thing: it must be awfully expensive.&lt;/p&gt;

&lt;p&gt;Take this further and you will immediately find a division within most IT
companies. On one side you have the humble programmers facing all that mumbo
jumbo from the QA department made of business graduates, social workers and God
knows what other clans who insist in the importance of having the right page
margins for their printed test reports. I have fond memories of a QA department
that every time, after writing down three remarks forced us to make a new
release and rewrite all manual test reports again before continuing with
something with so many errors. For these programmers quality is all that
nonsense that prevents real work getting done.&lt;/p&gt;

&lt;p&gt;On the other side you have the managers, for whom the QA department is the least
of their problems. It is usually all that whining and crying about how the
code is such rotten ball of mud that cannot be fixed without being rewritten
from scratch, or at least some serious refactoring. If the programmer is young
then the solution is as easy as dumping evil Windows and alienating with the
heavenly light force of Linux, open source software and super powerful language
X.&lt;/p&gt;

&lt;p&gt;Going along the lines of physical products and classical marketing mindset there
is also a disturbing term but very lucrative: software tester. You know, those
guys who receive the final product, or something that resembles it, and make
sure that the quality is good enough for the users.&lt;/p&gt;

&lt;p&gt;All I have been telling you so far is how most people experience and/or approach
software quality. In my humble opinion the root of all this evil misconception
when adding the word quality to software is thinking in a final product.
Software engineering unlike many other engineering disciplines has hardly
anything to do with a final product but with a process. The marketing department
is the one that give it a face and make it a real product, software engineers
only know about a process.&lt;/p&gt;

&lt;p&gt;Think for a moment about the term &lt;em&gt;high quality doctor&lt;/em&gt;. It sounds stupid and
for sure it is a term you would never use. You might prefer a term such as
&lt;em&gt;good doctor&lt;/em&gt;, but I want you to even think about the difference between a &lt;em&gt;good
 doctor&lt;/em&gt; and a &lt;em&gt;quality doctor&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Quality for a doctor is usually a must and not an option. A quality doctor must
find the best diagnostic and avoid spending money on expensive tests unless
necessary (pressure of their hospitals and insurance companies). In a battle
field they must endure stress, perform with scare resources and still be
creative. Outside the industrial world their status and income depends on how
long their patients stay healthy. Mistakes can be expensive and when they
occur, they come back to hunt them down until the patient dies or sues.&lt;/p&gt;

&lt;p&gt;Think about that last sentence. Here there is also a false association with
physical products. Everybody knows that a low quality thing breaks sooner than a
high quality one. This is also true with software, but there is one big
difference. If a physical product &lt;em&gt;deteriorates&lt;/em&gt; the consumer must face the cost
of replacing it or fixing it. With software it is usually the other way around.
Even if the company is not liable for solving the deterioration, its reputation
and future sales are at stake. Software erosion cost money to the manufacturer,
and this is solved with quality. This is becoming even more critical when most
of our industry is switching from the make money selling new versions style to
the make money providing a service.&lt;/p&gt;

&lt;p&gt;&lt;img src="/images/posts/quality.jpeg" width="40%" class="right" &gt;&lt;/p&gt;

&lt;p&gt;The fact that Software Engineering is such a young discipline make it also more
vulnerable to propaganda. I remember as a kid advising my parents which car to
buy because the one I saw on TV could go under a dune and fly over a river (even
though we did not have any of those around). Since the beginning big SW
companies have been bombarding us with their advertisement and how all our
problems would go away with their tools, languages and methods.&lt;/p&gt;

&lt;p&gt;These days I am relieved that Unix came into existence and brought some freedom and
common sense into our world. I am not only thankful because of the open tools but
for the freedom to combine them, scripting, functional programming and above all
a mindset looking for an alternative way of doing software beyond pure OOP. If you
are old enough, you might remember how much money and obsession was placed into
awfully expensive tools molding you into UML, one single language and one single
OO programming style. If so, you will have noticed that today we face far less
advertisement for software building tools. Our profession is evolving and we no
longer have to pay for expensive tools (although there are amazing and unique
paid ones).&lt;/p&gt;

&lt;p&gt;One thing were I do not agree with most people is that high quality software
must always be well tested and well document. Personally I believe that real
quality lies in the balance between minimum cost and maximum profit from the
economical and user experience point of view.&lt;/p&gt;

&lt;p&gt;Most software projects are just trials to see if they work and can be sold. Here
you can loose your hair and go wild for a while to see if it is really viable.
As soon as you see a future, start taking more serious your process. So no, no
that lovely documentation, automation, lovely UML diagrams and testing from day
0. Mmmm, maybe the UML diagrams could be ignored even when so many people
insist they are a trait of high quality.&lt;/p&gt;

&lt;p&gt;Although being a TDD believer, I am OK with non tested prototypes. What I am not
so OK with is that awful false delusion of working during months or years without
tests or documented code because it is just a prototype. The story goes like this:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;No, we do not care about X because we just have a protype&lt;br/&gt;
(any pointy-haired person at this very moment)&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Suddenly one day some manager from high above commands a day of work for the removal of
the word &lt;em&gt;prototype&lt;/em&gt; in all the documentation. This achieves in less than 24
hours the final product ready for testing and finishes the excuse for breaking all
the broken software engineering rules and the crimes against science, software
and above all, that group of life forms called programmers. So you see, at the
end they are not liable to be sent to hell, sorry.&lt;/p&gt;

&lt;p&gt;A prototype is code you throw away and only reuse what you learnt from the
problem domain, that is, requirements and design. Even if you write it in
something as low level as C++ or Java it is probably not a prototype.&lt;/p&gt;

&lt;p&gt;High quality software uses continuous refactoring because of software erosion.
Sadly when many people hear that word, the first thing that comes to their mind
is a whole new fork that paralyzes the project and a bunch of programmers adding
spaces to perfectly align their comments, painting nice diagrams fulfilling
their UML porno with object-oriented-pattern fantasies.&lt;/p&gt;

&lt;p&gt;There are far more refactoring patterns than the famous 23 object patterns.
Halting a software project for more than a couple of days to improve something
is not refactoring, it is a crime and the symptom that something really bad
is happening.&lt;/p&gt;

&lt;p&gt;Software quality is not something that must be sold or produced at a high cost.
If you spend more time automating, writing tests or thinking about the problem
than it is really necessary you got it wrong too, that is not quality
either.&lt;/p&gt;

&lt;p&gt;Software engineering is all about the process of building software. Since the
user do not get the process but the result, software quality is something that
mostly affects the manufacturer.&lt;/p&gt;

&lt;p&gt;High quality software can be sold cheaper and adapted faster than the one of
your competitors. The choice of technologies is realistic with the market and
available pool of engineers.&lt;/p&gt;

&lt;p&gt;Managers must find out which complains of their programmers are really
necessary, but never ignore them completely because past the big ball of mud and
garbage the next stage is the one of the &lt;em&gt;big nightmare&lt;/em&gt;: Everything is so messed
up that only the veteran programmers can understand the project.&lt;/p&gt;

&lt;p&gt;If a programmer cannot be replaced or rotated at a reasonable cost, it is not
quality software. Are you telling me that I need more than one month before I
can do something useful for the project? Then the software quality really
smells bad.&lt;/p&gt;

&lt;p&gt;Projects in the nightmare level stage are burn out projects where programmers
are constantly complaining about their life at work and specially &lt;em&gt;at home&lt;/em&gt;.
Managers should work hard to avoid this, because reached this point it is hard
to find people who want to stay. The best guys fly away, and you are left mostly
with the ones who do not care if the software breaks every day and new bugs
cannot be avoided. The whole story about a minimum design, structure and quality
is also to be able to hire and retain good workers.&lt;/p&gt;

&lt;p&gt;Real quality is a combination of intellectual and creative work balanced at
the lowest price possible to attain something reasonable, so please, starting
today stop thinking that high quality software is something necessary
expensive, it is just something awfully hard to achieve. Or do you want me
to explain to you now what is a &lt;a href="http://www.paulgraham.com/hp.html"&gt;high quality painter&lt;/a&gt;?&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/TheDigitalLumberjack/~4/_79-NSGfubA" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://francisco-garcia.net/blog/2011/11/misunderstanding-software-quality</feedburner:origLink></entry>
 
 <entry>
   <title>Apple's Dirty Secret</title>
   <link href="http://feedproxy.google.com/~r/TheDigitalLumberjack/~3/9Qpu-3BHWho/apple-dirty-secret" />
   <updated>2011-09-17T00:00:00+02:00</updated>
   <id>http://francisco-garcia.net/blog/2011/09/apple-dirty-secret</id>
   <content type="html">&lt;p&gt;&lt;a href="http://www.eljueves.es"&gt;
&lt;img src="/images/posts/doraemon.jpeg" width="50%" class="left" &gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No matter how much you hate it or love it (or both), Apple is one of the most amazing companies out there. Even most amazing still is how its greatest achievements are completely ignored. Of course they are the ones selling iPhones, iPads, MacBooks and making megabucks out of them, but it is not the most amazing thing they have made.&lt;/p&gt;

&lt;p&gt;The first and foremost complaint about its products is how overpriced they are. Many people keep away from them as a strategy to preserve their sanity and reproach Apple fanboys of being victims of some form of Stockholm Syndrome. Actually they are absolutely right, for that price Apple hardware is awfully overpriced, but why is everybody so &lt;em&gt;obsessed&lt;/em&gt; with the belief that they are paying for hardware?&lt;/p&gt;

&lt;p&gt;Most people have doubts about this world sanity whenever they look at the price of an iPhone and grasp a minimum understanding of its current market share. Most of my engineer pals are complaining all the time that a camera, a chip, a gps and a touchscreen packed together is not that much money at all. They are also completely right.&lt;/p&gt;

&lt;p&gt;Out there many companies such as Nokia mocked Apple. &lt;em&gt;"Are they crazy? Do they believe they can make phones now?"&lt;/em&gt;. That was their reaction for a long time. Most likely they also thought something like: &lt;em&gt;"I am going to pack this super camera, this super processor, this supper screen... and beat the hell out of Apple"&lt;/em&gt; and that is exactly what Nokia and others did. What could possible have gone wrong? Are the consumers becoming idiots? What is wrong with them?&lt;/p&gt;

&lt;p&gt;There are many reasons to explain what happened. From a sociological point of view, one of our greatest human needs is the feeling of identity. For many centuries that was the feeling of patriotism and religion. Now people find that boring, they might not even be religious because being atheist is more &lt;em&gt;fashion&lt;/em&gt;. Today &lt;a href="http://www.digitaltrends.com/computing/apple-causes-religious-reaction-in-brains-of-fans-say-neuroscientists/"&gt;brand loyalty&lt;/a&gt;, fashion and sport teams cover that deep desire of belonging to something. They have proven also to be much more profitable than religion for a wider margin of individuals. Except for satanical sects, there is already a long established monopoly of religions.&lt;/p&gt;

&lt;p&gt;There is however one recurring mistake from an engineering point of view that many big companies still make. It is something that was defined almost one century ago. It is only happening now, but is so recent and new that there is no concious awareness of it. I am talking about ignoring the effects of &lt;strong&gt;ephemeralization&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;In 1938 &lt;a href="http://en.wikipedia.org/wiki/Buckminster_Fuller"&gt;Buckminster Fuller&lt;/a&gt; coined the term &lt;a href="http://en.wikipedia.org/wiki/Ephemeralization"&gt;ephemeralization&lt;/a&gt; to describe the increasing tendency of physical machinery to be replaced by what we would now call software (...) The iPhone and the iPad have effectively drilled a hole that will allow ephemeralization to flow into a lot of new areas. No one who has studied the history of technology would want to underestimate the power of that force.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Paul Graham&lt;/strong&gt; in &lt;a href="http://www.paulgraham.com/tablets.html"&gt;Tablets&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Most people have an old conception of engineering products. They expect products to evolve in a physical way. Something you can touch, feel and measure. A car for example, is expected to evolve with a more efficient engine, having lighter but more resistant materials, being faster... but just like many other engineering products, there is a limit after which physical evolution does not affect usability that much.&lt;/p&gt;

&lt;p&gt;I personally do not own a car, maybe some people smarter than I am might favor some brands, but the most important thing I would value from a car is having a GPS navigator. That is exactly a &lt;em&gt;functional&lt;/em&gt; feature. For me and probably most people, any car cover the minimum material and physical qualities I demand.&lt;/p&gt;

&lt;p&gt;Now imagine that all GPS devices can only work when placed inside one specific car brand. How do you think the streets of your city would look like? It sounds like an stupid idea, but something similar is happening now with that software patent mess going around, specially the tablets industry.&lt;/p&gt;

&lt;p&gt;Still today the reaction of most Apple competitors is trying to release cheaper and more powerful products. Indeed Nokia and Samsung do have far more capable hardware. Their struggle for surviving proves the ephemeralization of cell phones. People already have the minimum hardware they need from any company. Their choice is made now on what they can do with it, and that is mostly provided by software.&lt;/p&gt;

&lt;p&gt;So far most people using computers cared most for raw power. They wanted a solution that could open their word processor or web browser and not waiting for the cursor to move. Hardware during this time was quite expensive and what many people wanted could cost very well more than two months of salary. That was not a time when you cared that much for software. Hence everybody have this strong hardware-price connection in their minds.&lt;/p&gt;

&lt;p&gt;All this time Apple has been more of a luxury product. There is something called &lt;em&gt;software&lt;/em&gt; that they do really well, and doing it well is not only expensive, it also decides the overall user experience. It is hard to convince people of this when you have a market hungry for RAM, CPU speed, graphics card and all that hardware... until now.&lt;/p&gt;

&lt;p&gt;People find awfully difficult the idea of paying big money for something you cannot touch. Apple marketing strategy was so far building amazing software and packing it into an expensive brand and overpriced hardware. Did you ever wonder why Apple tried so hard to bind their software to their hardware? That way the could transfer huge amounts of money to their software department and deceive the world as a hardware selling company.&lt;/p&gt;

&lt;p&gt;During most of its life, Apple was more successful with professionals who benefited the most with the productivity increase, such as musicians and graphics designers. It was easier to lure this people with a lovely design and a standardised set of tools for their activities. Now that hardware is so cheap, Apple is testing their biggest deception strategy with a broader consumer market, and indeed, many high-end users are feeling that their Macs do not show that huge gap they had before. Obviously, it is far more profitable selling to the masses than to a reduced set of people.&lt;/p&gt;

&lt;p&gt;No matter how much I admire &lt;a href="http://designmuseum.org/design/jonathan-ive"&gt;Jonathan Ive&lt;/a&gt; for his designs, I do believe that the software will be the main engine of our products during many years. Maybe this was already obvious, but with the arrival of tablets the ephemeralization of many things will speed up. Your car might need already &lt;a href="http://spectrum.ieee.org/green-tech/advanced-cars/this-car-runs-on-code"&gt;more than 100 million lines of code&lt;/a&gt;,  that navigator is going to be integrated into your phone, and so many other devices. I as a software engineer, for sure will enjoy the ride.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/TheDigitalLumberjack/~4/9Qpu-3BHWho" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://francisco-garcia.net/blog/2011/09/apple-dirty-secret</feedburner:origLink></entry>
 
 <entry>
   <title>Posting with Jekyll</title>
   <link href="http://feedproxy.google.com/~r/TheDigitalLumberjack/~3/Am19T3JUTuU/going-jekyll" />
   <updated>2011-09-04T00:00:00+02:00</updated>
   <id>http://francisco-garcia.net/blog/2011/09/going-jekyll</id>
   <content type="html">&lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/File:Dr_Jekyll_and_Mr_Hyde_poster_edit2.jpg"&gt;&lt;img src="/images/posts/20110904_Dr_Jekyll_and_Mr_Hyde.jpeg" class="left" &gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;Transform your text into a monster (&lt;strong&gt;Jekyll website&lt;/strong&gt;)&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;I always knew I should be posting more on my blog, but it was always so &lt;em&gt;alien&lt;/em&gt; to me. I managed to set up first a WordPress blog, shortly after I switched to Drupal and that was it, almost no more dedication.&lt;/p&gt;

&lt;p&gt;The thing is that it was really painful to write posts. All these click here and click there, with all the content spread across a database. For some text oriented guy who love to keep his work clear and under control, that was unthinkable. I knew everything I created was going to be inside that database, but just thinking about extracting that info scared me off.&lt;/p&gt;

&lt;p&gt;Finally I decided to give &lt;a href="http://jekyllrb.com/"&gt;Jekyll&lt;/a&gt; a try. I could have also gone for &lt;a href="http://ringce.com/hyde"&gt;Hyde&lt;/a&gt;, the Python remake of Jekyll, but I wanted to have some contact with Ruby again. One more reason for Jekyll is that it is very well supported by my favorite coding comunity: GitHub. Hence anything said by &lt;a href="http://tom.preston-werner.com/2008/11/17/blogging-like-a-hacker.html"&gt;Tom Preston&lt;/a&gt; catches my attention.&lt;/p&gt;

&lt;p&gt;In one day I've been able to switch from Drupal to Jekyll. There are still some rough edgeds to solve, but I managed to build an initial new theme, migrate my Disquss and Google Analytics account along several minor details. Right now I am very interested in playing with &lt;a href="http://haml-lang.com"&gt;HAML and SASS&lt;/a&gt; just to find out what this Ruby people are up to.&lt;/p&gt;

&lt;p&gt;All my posts will be now in a simple text file formated with Markdown and a &lt;a href="http://en.wikipedia.org/wiki/YAML"&gt;YAML&lt;/a&gt; header for the meta-info. So far it is amazing having all my posts with a such clean separation from the content manager. Not only I am convinced that now my work is less dependent on one CMS, but I can use the tools I am more comfortable with.&lt;/p&gt;

&lt;p&gt;Since a picture is worth a thousand words, just see yourself how &lt;a href="http://digital-lumberjack.com/blog/2010/03/source-code-smell/"&gt;one of my posts&lt;/a&gt; looks like (with lists, code blocks, quotes, links...) and think all that was rendered from such a lovely text file like &lt;a href="https://raw.github.com/fgarcia/fgarcia.github.com/master/_posts/2010-03-27-source-code-smell.md"&gt;this one&lt;/a&gt;. All my blog structure can also &lt;a href="https://github.com/fgarcia/fgarcia.github.com/tree/master/_posts"&gt;browsed&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;All this time I have been killing flies with a cannon. Any static site is much faster than anything dynamically generated. At the time I chose Drupal over WordPress was because I wanted to learn a more powerful framework, but these are programmed in PHP and now I realize how much better any solution can be developed with Ruby or Python. A static site also means that I can go for cheaper hosting and I will have to play much more with Javascript. That is a good thing because my Javascript-fu is rusty. Every month that goes by I am more convinced that it is becoming a very valuable language that complements any web project.&lt;/p&gt;

&lt;p&gt;Most of the time and for most of people a dynamic CMS will be the best solution. Once I had client for whom I migrated their site to a CMS so their own employees could edit their web page contents with an easy WYSIWYG solution. Until that day they needed to call a webdesigner for every change.&lt;/p&gt;

&lt;p&gt;However, if you are an Unix programmer, you must try some static content manager. It is far more natural for people like us to edit our posts with vi/emacs/textmate or whatever without even an internet connection. Add your favorite version control system and branch your drafts or other people contributions. Have a copy of your blog replicated in your computers. Filter your posts with grep, spellcheck with aspell, or script massive changes with regular expressions, that is how blogging should be for any programmer. Because no matter how good any of the other dynamic solutions get, your posts will never get the same freedom and workflow quality that you have with your daily tools.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/TheDigitalLumberjack/~4/Am19T3JUTuU" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://francisco-garcia.net/blog/2011/09/going-jekyll</feedburner:origLink></entry>
 
 <entry>
   <title>What is the most compatible way to install python modules on a Mac?</title>
   <link href="http://feedproxy.google.com/~r/TheDigitalLumberjack/~3/J3RFW_Dgt6w/install-python-modules-on-mac-osx" />
   <updated>2011-08-28T00:00:00+02:00</updated>
   <id>http://francisco-garcia.net/blog/2011/08/install-python-modules-on-mac-osx</id>
   <content type="html">&lt;p&gt;The following post is an extract from a &lt;a href="http://stackoverflow.com/about"&gt;Stack Overflow&lt;/a&gt; question and was automatically generated with the web scraping scripts at &lt;a href="https://github.com/fgarcia/scraps"&gt;scraps&lt;/a&gt;.&lt;/p&gt;

&lt;div class="stack_overflow"&gt;

&lt;a href="http://stackoverflow.com/users/3238"&gt;
&lt;img src="http://stackoverflow.com/users/flair/3238.png" width="208" height="58" alt="Stack Overflow, Q&amp;amp;A for professional and enthusiast programmers" title="Stack Overflow, Q&amp;amp;A for professional and enthusiast programmers"&gt; &lt;/a&gt;

&lt;h2&gt;Question&lt;/h2&gt;
&lt;a href="http://stackoverflow.com/questions/1213690/what-is-the-most-compatible-way-to-install-python-modules-on-a-mac"&gt;Question Source&lt;/a&gt;
&lt;/div&gt;




&lt;div class="post-text"&gt;
        &lt;p&gt;I'm starting to learn python and loving it. I work on a Mac mainly as well as Linux. I'm finding that on Linux (Ubuntu 9.04 mostly) when I install a python module using apt-get it works fine. I can import it with no trouble.&lt;/p&gt;

&lt;p&gt;On the Mac, I'm used to using Macports to install all the Unixy stuff. However, I'm finding that most of the python modules I install with it are not being seen by python. I've spent some time playing around with PATH settings and using python_select . Nothing has really worked and at this point I'm not really understanding, instead I'm just poking around.&lt;/p&gt;

&lt;p&gt;I get the impression that Macports isn't universally loved for managing python modules. I'd like to start fresh using a more "accepted" (if that's the right word) approach. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;So, I was wondering, what is the method that Mac python developers use to manage their modules?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Bonus questions: &lt;/p&gt;

&lt;p&gt;Do you use Apple's python, or some other version?
Do you compile everything from source or is there a package manger that works well (Fink?).&lt;/p&gt;

&lt;p&gt;Any tips or suggestions here are greatly appreciated. Thanks for your time. :)&lt;/p&gt;

    &lt;/div&gt;




&lt;div class="stack_overflow"&gt;
&lt;a href="http://stackexchange.com/users/1bc7fd3516c94be7a821c87905eb97af"&gt;
&lt;img src="http://stackexchange.com/users/flair/1bc7fd3516c94be7a821c87905eb97af.png" width="208" height="58" alt="profile for Francisco Garcia on Stack Exchange, a network of free, community-driven Q&amp;amp;A sites" title="profile for Francisco Garcia on Stack Exchange, a network of free, community-driven Q&amp;amp;A sites"&gt; &lt;/a&gt;
&lt;h2&gt;Answer&lt;/h2&gt;
&lt;a href="http://stackoverflow.com/questions/1213690/what-is-the-most-compatible-way-to-install-python-modules-on-a-mac/7220022#7220022"&gt;Answer Source&lt;/a&gt;
&lt;/div&gt;




&lt;p&gt;Your question is already three years old and there are some details not covered in other answers:&lt;/p&gt;




&lt;p&gt;Most people I know use &lt;a href="http://mxcl.github.com/homebrew/" rel="nofollow"&gt;HomeBrew&lt;/a&gt; or &lt;a href="https://trac.macports.org/wiki/Python" rel="nofollow"&gt;MacPorts&lt;/a&gt;, I prefer MacPorts because of its clean cut of what is a default Mac OS X environment and my development setup. Just move out your &lt;em&gt;/opt&lt;/em&gt; folder and test your packages with a normal user Python environment&lt;/p&gt;




&lt;p&gt;MacPorts is only portable within Mac, but with easy_install or pip you will learn how to setup your environment in any platform (Win/Mac/Linux/Bsd...). Furthermore it will always be more up to date and with more packages&lt;/p&gt;




&lt;p&gt;I personally let MacPorts handle my Python modules to keep everything updated. Like any other high level package manager (ie: apt-get) it is much better for the heavy lifting of modules with lots of binary dependencies. There is no way I would build my Qt bindings (PySide) with easy_install or pip. Qt is huge and takes a lot to compile. As soon as you want a Python package that needs a library used by non Python programs, try to avoid easy_install or pip &lt;/p&gt;




&lt;p&gt;At some point you will find that there are some packages missing within MacPorts. I do not believe that MacPorts will ever give you the whole &lt;a href="http://pypi" rel="nofollow"&gt;CheeseShop&lt;/a&gt;. For example, recently I needed the &lt;a href="http://elixir.ematia.de/trac/wiki" rel="nofollow"&gt;Elixir&lt;/a&gt; module, but MacPorts only offers py25-elixir and py26-elixir, no py27 version. In cases like these you have:&lt;/p&gt;




&lt;blockquote&gt;
  &lt;p&gt;pip-2.7 install --user elixir&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;( make sure you always type pip-(version) )&lt;/p&gt;




&lt;p&gt;That will build an extra Python library in your home dir. Yes, Python will work with more than one library location: one controlled by MacPorts and a user local one for everything missing within MacPorts.&lt;/p&gt;




&lt;p&gt;Now notice that I favor pip over easy_install. There is a good reason you should avoid setuptools and easy_install. Here is a &lt;a href="http://www.b-list.org/weblog/2008/dec/14/packaging/" rel="nofollow"&gt;good explanation&lt;/a&gt; and I try to keep away from them. One very useful feature of pip is giving you a list of all the modules (along their versions) that you installed with MacPorts, easy_install and pip itself:&lt;/p&gt;




&lt;blockquote&gt;
  &lt;p&gt;pip-2.7 freeze&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;If you already started using easy_install, don't worry, pip can recognize everything done already by easy_install and even upgrade the packages installed with it.&lt;/p&gt;




&lt;p&gt;If you are a developer keep an eye on &lt;a href="http://pypi.python.org/pypi/virtualenv" rel="nofollow"&gt;virtualenv&lt;/a&gt; for controlling different setups and combinations of module versions. Other answers mention it already, what is not mentioned so far is the &lt;a href="http://pypi.python.org/pypi/tox" rel="nofollow"&gt;Tox&lt;/a&gt; module, a tool for testing that your package installs correctly with different Python versions.&lt;/p&gt;




&lt;p&gt;Although I usually do not have version conflicts, I like to have virtualenv to set up a clean environment and get a clear view of my packages dependencies. That way I never forget any dependencies in my setup.py&lt;/p&gt;




&lt;p&gt;If you go for MacPorts be aware that multiple versions of the same package are not selected anymore like the old Debian style with an extra python_select package (it is still there for compatibility). Now you have the select command to choose which Python version will be used (you can even select the Apple installed ones):&lt;/p&gt;




&lt;pre&gt;&lt;code&gt;$  port select python
Available versions for python:
    none
    python25-apple
    python26-apple
    python27 (active)
    python27-apple
    python32

$ port select python python32
&lt;/code&gt;&lt;/pre&gt;




&lt;p&gt;Add tox on top of it and your programs should be really portable&lt;/p&gt;



&lt;img src="http://feeds.feedburner.com/~r/TheDigitalLumberjack/~4/J3RFW_Dgt6w" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://francisco-garcia.net/blog/2011/08/install-python-modules-on-mac-osx</feedburner:origLink></entry>
 
 <entry>
   <title>A modern backup idea for your Unix system</title>
   <link href="http://feedproxy.google.com/~r/TheDigitalLumberjack/~3/L5Z6WzVi3YI/modern-rsync-backup" />
   <updated>2011-08-27T00:00:00+02:00</updated>
   <id>http://francisco-garcia.net/blog/2011/08/modern-rsync-backup</id>
   <content type="html">&lt;p&gt;Backups are just like flossing your teeth: you should do it often, but at the end, you only do it during some weeks after you are into deep trouble.&lt;/p&gt;

&lt;p&gt;What is the best solution for things you never like to do? The one that is as fast and effortless as possible, ideally fully automated. Because of that I usually suggest people to go for a USB powered disk. Don't get one with a power supply, here the comfort factor is essential. Any minor nuisance can trigger that famous "I will do it later...", so make yourself a favor: make your task as dumb as possible.&lt;/p&gt;

&lt;!--break--&gt;


&lt;p&gt;Now it is time to consider how to get your data there. Forget about tar, zip and all those compression tools. Compression takes time and these days you get plenty of space with any external disk. Go for a file mirror based tool such as &lt;a href="http://en.wikipedia.org/wiki/Rsync"&gt;rsync&lt;/a&gt;. Only if you go later for a two-way based synchronization go for &lt;a href="http://en.wikipedia.org/wiki/Unison_(file_synchronizer"&gt;unison&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Most backup posts I have seen are really classic, with the incremental, rotation and compress fluff, even the ones that mention rsync. What many do not mention is the magic "--link-dest" option. What is so magic about it? Well, it is better seen than shown.&lt;/p&gt;

&lt;p&gt;I want to backup my Documents folder (the final "/" matters):&lt;/p&gt;

&lt;pre&gt;
$ rsync -av --link-dest=/full/path/Documents/ Documents/ Documents.1
&lt;/pre&gt;


&lt;p&gt;This will copy the full folder into Documents.1, but if you try to get their sizes you will see something strange:&lt;/p&gt;

&lt;pre&gt;
$ du -h --depth=1  (Linux)
$ du -hd1          (Mac OS X)
110M    ./Documents
  0B    ./Documents.1
110M    .
&lt;/pre&gt;


&lt;p&gt;Did anything went wrong? Well, go and see inside that &lt;em&gt;empty&lt;/em&gt; folder&lt;/p&gt;

&lt;pre&gt;
$ du -hd0 Documents.1
    110M    .
&lt;/pre&gt;


&lt;p&gt;Now it is full? What happened? Try something else:&lt;/p&gt;

&lt;pre&gt;
$ dd if=/dev/zero of=Documents/file_5MB bs=1024 count=5120
$ rsync -av --link-dest=/full/path/Documents/ Documents/ Documents.2
$ rm Documents/file_5MB
&lt;/pre&gt;


&lt;p&gt;Here you created a new file with 5MB, synced and deleted it from your Documents. How does it look like now?&lt;/p&gt;

&lt;pre&gt;
$  du -hd1
     110M    ./Documents
       0B    ./Documents.1
       5M    ./Documents.2
     115M    .
&lt;/pre&gt;


&lt;p&gt;OK, now I owe you an explanation. The &lt;strong&gt;rsync&lt;/strong&gt; command with the &lt;em&gt;--link-dest&lt;/em&gt; parameter is making a duplicate of the &lt;em&gt;Documents&lt;/em&gt; folder with hard links. Every file inside of &lt;em&gt;Documents.1&lt;/em&gt; is just a reference, so if you list the size of every folder, the command &lt;strong&gt;du&lt;/strong&gt; will  not count the size of the same file in different locations.&lt;/p&gt;

&lt;p&gt;Inside every folder it will count the real size, but outside it will just give you the size of the first folder.&lt;/p&gt;

&lt;p&gt;Later we added a 5MB file, synced and deleted it. So when listing everything only this extra difference was counted within &lt;em&gt;Documents.2&lt;/em&gt;. Unix file system allocation is based on a reference counting algorithm. Hard links increase the reference count and only when you delete all the references the file is really deleted.&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;The real magic here is that with every sync you get a full backup at the cost of an incremental one! Every folder looks like a full copy, but only the real differences are what take space.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Now I leave up to you the exercise of finding the right command to &lt;em&gt;save&lt;/em&gt; your backups!&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/TheDigitalLumberjack/~4/L5Z6WzVi3YI" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://francisco-garcia.net/blog/2011/08/modern-rsync-backup</feedburner:origLink></entry>
 
 <entry>
   <title>Is it reasonable for modern applications to consume large amounts of memory?</title>
   <link href="http://feedproxy.google.com/~r/TheDigitalLumberjack/~3/GC-GjpXZtkI/modern-applications-memory-consumption" />
   <updated>2011-07-24T00:00:00+02:00</updated>
   <id>http://francisco-garcia.net/blog/2011/07/modern-applications-memory-consumption</id>
   <content type="html">&lt;p&gt;The following post is an extract from a &lt;a href="http://stackoverflow.com/about"&gt;Stack Overflow&lt;/a&gt; question and was automatically generated with the web scraping scripts at &lt;a href="https://github.com/fgarcia/scraps"&gt;scraps&lt;/a&gt;.&lt;/p&gt;

&lt;div class="stack_overflow"&gt;

&lt;h2&gt;Question&lt;/h2&gt;
&lt;a href="http://stackoverflow.com/questions/597534/is-it-reasonable-for-modern-applications-to-consume-large-amounts-of-memory"&gt;Question Source&lt;/a&gt;
&lt;/div&gt;




&lt;div class="post-text"&gt;
        &lt;p&gt;Applications like Microsoft Outlook and the Eclipse IDE consume RAM, as much as 200MB. Is it OK for a modern application to consume that much memory, given that few years back we had only 256MB of RAM? Also, why this is happening? Are we taking the resources for granted?&lt;/p&gt;

    &lt;/div&gt;




&lt;div class="stack_overflow"&gt;
&lt;a href="http://stackexchange.com/users/1bc7fd3516c94be7a821c87905eb97af"&gt;
&lt;img src="http://stackexchange.com/users/flair/1bc7fd3516c94be7a821c87905eb97af.png" width="208" height="58" alt="profile for Francisco Garcia on Stack Exchange, a network of free, community-driven Q&amp;amp;A sites" title="profile for Francisco Garcia on Stack Exchange, a network of free, community-driven Q&amp;amp;A sites"&gt; &lt;/a&gt;
&lt;h2&gt;Answer&lt;/h2&gt;
&lt;a href="http://stackoverflow.com/questions/597534/is-it-reasonable-for-modern-applications-to-consume-large-amounts-of-memory/6806555#6806555"&gt;Answer Source&lt;/a&gt;
&lt;/div&gt;




&lt;p&gt;Yes, it is perfectly normal. Also something big was changed since 256MB were normal... and do not forget that before that 640Kb were supposed to be enough for everybody!&lt;/p&gt;




&lt;p&gt;Now most software solutions are build with a garbage collector: C#, Java, Ruby, Python... everybody love them because certainly development can be faster, however there is one glitch. &lt;/p&gt;




&lt;p&gt;The same program can be memory leak free with either manual or automatic memory deallocation. However in the second case it is likely for the memory consumption to grow. Why? In the first case memory is deallocated and kept clean immediately after something becomes useless (garbage). However it takes time and computing power to detect that automatically, hence most collectors (except for reference counting) wait for garbage to accumulate in order to make worth the cost of the exploration. The more you wait the more garbage you can sweep with the cost of one blow, but more memory is needed to accumulate that garbage. If you try to force the collector constantly, your program would spend more time exploring memory than working on your problems.&lt;/p&gt;




&lt;p&gt;You can be completely sure than as long as programmers get more resources, they will sacrifice them using heavier tools in exchange for more freedom, abstraction and faster development.&lt;/p&gt;



&lt;img src="http://feeds.feedburner.com/~r/TheDigitalLumberjack/~4/GC-GjpXZtkI" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://francisco-garcia.net/blog/2011/07/modern-applications-memory-consumption</feedburner:origLink></entry>
 
 <entry>
   <title>The Monk and The Philosopher</title>
   <link href="http://feedproxy.google.com/~r/TheDigitalLumberjack/~3/wnPY0lPTvWA/the-monk-and-the-philosopher" />
   <updated>2010-06-11T00:00:00+02:00</updated>
   <id>http://francisco-garcia.net/blog/2010/06/the-monk-and-the-philosopher</id>
   <content type="html">&lt;blockquote&gt;&lt;p&gt;My scientific career was the result of a passion for discovery ... In short, science, however interesting, wasn't enough to give meaning to my life. I came to see research, as I experienced it myself, as an endless dispersion into detail, and dedicating my whole life to it was something I could no longer envisage&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Those were the first words from &lt;a href="http://en.wikipedia.org/wiki/Matthieu_Ricard"&gt;Matthieu Ricard&lt;/a&gt; that catch my attention. Finally I found an outstanding book from a scientist explaining Buddhism. This man, for all of you who doesn't know him, was a great biologist who suddenly decided to quit his scientific career to become a Buddhist monk.&lt;/p&gt;

&lt;!--break--&gt;




&lt;!--more--&gt;


&lt;div style="text-align:center;"&gt;&lt;a href="http://www.amazon.com/gp/product/0805211039?ie=UTF8&amp;amp;tag=kalahans-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0805211039"&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=kalahans-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0805211039" style="border:medium none !important;margin:0 !important;" width="1"&gt; &lt;img alt="" height="240" src="http://ecx.images-amazon.com/images/I/51P7THKCHRL._BO2,204,203,200_PIsitb-dp-500-arrow,TopRight,45,-64_OU01_AA240_SH20_.jpg" width="240"&gt;&lt;/a&gt;&lt;/div&gt;


&lt;p&gt;The book is a continous speach betweek Matthieu and his father, Jean-François Revel a philosopher from whom I recomend his book "Neither Marx nor Jesus" about why two ideal-utopical societies have failed throughout history. Some parts may be some heaving reading because of the philosophical terms and some chapters target the Buddhist metaphysics concepts. However the whole book is a great insight into Buddishm and helps you understand some differences between the Western and Eastern societies... or maybe between Christian and Buddhist societies? At the begging I thought I knew the basis of Buddhism well enough, but the book seemed to discuss one topic I am interested.&lt;/p&gt;

&lt;p&gt;Why Buddhism is becomming popular in the Western world? In a scientific world where religion seems to lose ground, a &lt;a href="http://en.wikipedia.org/wiki/Secular_spirituality"&gt;secular spirituality&lt;/a&gt; fills the human need of spiritual meaning without the religious framework which seems unpleasant for a growing number of people.&lt;/p&gt;

&lt;p&gt;It has a wonderful discussion about how Western world has evolved with a science driven society while Eastern has been focused in the mind and personal growth as a way to achieve the enlightenment. It also clears several misconceptions about Buddhism and how it can enrich a cold science world. Philosophy is sadly loosing ground in Europe, maybe because many science fields have become independent and don't need it. It was fun to realize that at the beginning, philosophers were like Buddhist in the Western history. They were knowledgeable people seeking personal growth, people who were valuable advisors and affected whole societies. However with time they lost influence and focused on studying knowledge and society.&lt;/p&gt;

&lt;p&gt;This book was everything I wanted. It was a great chance to discover the work of many philosophers I didn't know and others I just knew their name. A wonderful discussion of father and son, Philosopher and Buddhist monk about religion, science, Western society evolution and its growing lack of spirituality and humanity.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/TheDigitalLumberjack/~4/wnPY0lPTvWA" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://francisco-garcia.net/blog/2010/06/the-monk-and-the-philosopher</feedburner:origLink></entry>
 
 <entry>
   <title>Fast comparison of char arrays?</title>
   <link href="http://feedproxy.google.com/~r/TheDigitalLumberjack/~3/PBuqpIVTPI8/fast-array-comparison" />
   <updated>2010-05-28T00:00:00+02:00</updated>
   <id>http://francisco-garcia.net/blog/2010/05/fast-array-comparison</id>
   <content type="html">&lt;p&gt;The following post is an extract from a &lt;a href="http://stackoverflow.com/about"&gt;Stack Overflow&lt;/a&gt; question and was automatically generated with the web scraping scripts at &lt;a href="https://github.com/fgarcia/scraps"&gt;scraps&lt;/a&gt;.&lt;/p&gt;

&lt;div class="stack_overflow"&gt;

&lt;a href="http://stackoverflow.com/users/75889"&gt;
&lt;img src="http://stackoverflow.com/users/flair/75889.png" width="208" height="58" alt="Stack Overflow, Q&amp;amp;A for professional and enthusiast programmers" title="Stack Overflow, Q&amp;amp;A for professional and enthusiast programmers"&gt; &lt;/a&gt;

&lt;h2&gt;Question&lt;/h2&gt;
&lt;a href="http://stackoverflow.com/questions/2929925/fast-comparison-of-char-arrays"&gt;Question Source&lt;/a&gt;
&lt;/div&gt;




&lt;div class="post-text"&gt;
        &lt;p&gt;I'm currently working in a codebase where IPv4 addresses are represented as pointers to &lt;code&gt;u_int8&lt;/code&gt;. The equality operator is implemented like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;bool Ipv4Address::operator==(const u_int8 * inAddress) const
{
    return (*(u_int32*) this-&amp;gt;myBytes == *(u_int32*) inAddress);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This is probably the fasted solution, but it causes the GCC compiler warning:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;ipv4address.cpp:65: warning: dereferencing type-punned pointer will break strict-aliasing rules
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;How can I rewrite the comparison correctly without breaking strict-aliasing rules and without losing performance points?&lt;/p&gt;

&lt;p&gt;I have considered using either &lt;code&gt;memcmp&lt;/code&gt; or this macro:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;#define IS_EQUAL(a, b) \
    (a[0] == b[0] &amp;amp;&amp;amp; a[1] == b[1] &amp;amp;&amp;amp; a[2] == b[2] &amp;amp;&amp;amp; a[3] == b[3])
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;I'm thinking that the macro is the fastest solution.&lt;/p&gt;

&lt;p&gt;What do you recommend?&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Update&lt;/b&gt;&lt;br&gt;
I just read the article &lt;a href="http://blogs.msdn.com/b/cellfish/archive/2010/02/24/squeezing-performance-out-of-memcmp-usage.aspx" rel="nofollow"&gt;Squeezing performance out of memcmp usage&lt;/a&gt; which explains how the compiler (Visual Studio, but perhaps also GCC) can optimize &lt;code&gt;!memcmp(..)&lt;/code&gt; calls.&lt;/p&gt;

    &lt;/div&gt;




&lt;div class="stack_overflow"&gt;
&lt;a href="http://stackexchange.com/users/1bc7fd3516c94be7a821c87905eb97af"&gt;
&lt;img src="http://stackexchange.com/users/flair/1bc7fd3516c94be7a821c87905eb97af.png" width="208" height="58" alt="profile for Francisco Garcia on Stack Exchange, a network of free, community-driven Q&amp;amp;A sites" title="profile for Francisco Garcia on Stack Exchange, a network of free, community-driven Q&amp;amp;A sites"&gt; &lt;/a&gt;
&lt;h2&gt;Answer&lt;/h2&gt;
&lt;a href="http://stackoverflow.com/questions/2929925/fast-comparison-of-char-arrays/2929964#2929964"&gt;Answer Source&lt;/a&gt;
&lt;/div&gt;




&lt;p&gt;I would go for memcmp()&lt;/p&gt;




&lt;ol&gt;
&lt;li&gt;It is more portable&lt;/li&gt;
&lt;li&gt;I usually try not to be smarter than my compiler/language. You are trying to compare memory contents and (depending on compiler options too) the implementation of memcmp() should be the most efficient way to do that.&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;Also think that if your compiler does not inline memcmp() you will suffer the function context switch&lt;/p&gt;




&lt;p&gt;Are you sure you need to optimize that hard? Have you already checked that your program spend most of its time doing that type of operations?&lt;/p&gt;



&lt;img src="http://feeds.feedburner.com/~r/TheDigitalLumberjack/~4/PBuqpIVTPI8" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://francisco-garcia.net/blog/2010/05/fast-array-comparison</feedburner:origLink></entry>
 
 <entry>
   <title>The Most Important Language for a Programmer</title>
   <link href="http://feedproxy.google.com/~r/TheDigitalLumberjack/~3/ax_Psti0OQM/most-important-language" />
   <updated>2010-04-11T00:00:00+02:00</updated>
   <id>http://francisco-garcia.net/blog/2010/04/most-important-language</id>
   <content type="html">&lt;p&gt;Software engineers with low coding karma choose their favorite language
based on money and job stability expectations. As a result you will often hear
C++ or Java.&lt;/p&gt;

&lt;p&gt;Fortunatelly there is a big group of people out there who take programming back to
their homes as a hobby who will wisely reply back something like Python, Ruby or
Scheme. I love this type of people and it is great working with them, but there
is one single language that is essential for any programmer: English!&lt;/p&gt;

&lt;!--break--&gt;


&lt;p&gt;&lt;a href="http://www.joelonsoftware.com/articles/CollegeAdvice.html"&gt;Joel Spolsky&lt;/a&gt;
made this quite clear:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;... The difference between a tolerable programmer and a great programmer is
not how many programming languages they know, and it's not whether they prefer
Python or Java. It's whether they can communicate their ideas. By persuading
other people, they get leverage. By writing clear comments and technical specs,
they let other programmers understand their code, which means other programmers
can use and work with their code instead of rewriting it. Absent this,
their code is worthless. By writing clear technical documentation for end
users, they allow people to figure out what their code is supposed to do,
which is the only way those users can see the value in their code. There's a
lot of wonderful, useful code buried on sourceforge somewhere that nobody
uses because it was created by programmers who don't write very well ...&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Although Joel Spolsky's comment applies also to great coding style (naming,
asthetics, abstraction...) it uncovers the importance of writting code for
other people. During the first years most programmers (me included) try to
squeeze that tiny extra code branch for the sake of speed optimization. Sooner
or later we get frustated when we must work on existing code because the truh
is that writing code that a human being can understand is awfully more dificult
than doing it for a machine. Even more scary is that code must be read
countless times more than it is written. If you ever must certify or test other
people code... let's just say life goes on after work.&lt;/p&gt;

&lt;p&gt;I am a native Spanish speaker, document my work in English and live in a
German speaking environment. I know that many of my clients would like me to
produce German documents, which I always gently decline. It will be a long
(very long!) time until I can produce German documentation with the quality
of a native speaker. In any case, I encourage my clients not to write their
documentation in anything else than English. The official &lt;em&gt;lingua franca&lt;/em&gt; for
software projects has always been English and anyone ignoring this fact will
severly limit the pool of resources and talents that can be invested.&lt;/p&gt;

&lt;p&gt;Nevertheless, the difficulty is not the language itself, but being able to
communicate ideas in a clear, concise and direct way. For a software engineer I
would also demand writing in an pleasant and telegraphic way. Why? We must
digest thousand of manuals that usually are verbose and poorly written. Everybody
hates reading manuals, but reply any question with &lt;a href="http://en.wikipedia.org/wiki/RTFM"&gt;RTFM&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This was one of the reasons I started this blog. Not only it is a great
excercise for my English (which still must be improved a lot), it helps me to
practice my writing skills. Before entering college I took two years of
literary expresion (as a hobby) and so far most people told me that looks like
a waste of time.&lt;/p&gt;

&lt;p&gt;A proud programmer should care about the quality of his written communication
skills. Discover that most code editors do not spell check the comments
and that poor human-friendly-code will be the blood and tears of many
colleages. In any case, just to get you started, always think about this quote
before writting any single line:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;Always code as if the person who ends up maintaining your code is a violent
psychopath who knows where you live&lt;/p&gt;&lt;/blockquote&gt;
&lt;img src="http://feeds.feedburner.com/~r/TheDigitalLumberjack/~4/ax_Psti0OQM" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://francisco-garcia.net/blog/2010/04/most-important-language</feedburner:origLink></entry>
 
 <entry>
   <title>XML for Compilers</title>
   <link href="http://feedproxy.google.com/~r/TheDigitalLumberjack/~3/LmJ_cp4kpy0/xml-4-compilers" />
   <updated>2010-03-27T00:00:00+01:00</updated>
   <id>http://francisco-garcia.net/blog/2010/03/xml-4-compilers</id>
   <content type="html">&lt;p&gt;Thinking about how to implement a tool for measuring &lt;a href="/stories/source-code-smelliness"&gt;source code
smelliness&lt;/a&gt;, my main concern was extracting the
syntactic elements I wanted from a programming language.&lt;/p&gt;

&lt;p&gt;Obviously plain regular expression matching are not the way to go. I decided to
opt for a reduced AST representing the common elements of most imperative
languages: functions, variables and some type of packaging (name spaces, files
and/or classes).&lt;/p&gt;

&lt;!--break--&gt;


&lt;p&gt;Even when I could easily build an AST on my own with Flex and Bison, I started
looking for projects that had already taken care of that. I discovered many
tools with no apparent code reuse, they all implemented their own parser for the
same language. It did not take too long to realize how useful it could be using
XML, a context free grammar that could represent every detail I wanted.&lt;/p&gt;

&lt;p&gt;Like most of the &lt;em&gt;Aha!&lt;/em&gt; momments of my life, just a short glimpse on the
internet made me realize that not only people thought about that before I did, they
did long time ago &lt;bib&gt;YZKK01&lt;/bib&gt;&lt;bib&gt;TCDJR04&lt;/bib&gt;. So I will just sumarize
here (and force myself to think) about what I want from XML.&lt;/p&gt;

&lt;h2&gt;Portable representation&lt;/h2&gt;

&lt;p&gt;XML is the bridge that eases the flow of data structures among different systems
because binary representation leads to several communication problems.&lt;/p&gt;

&lt;p&gt;A compiler is the king of the tools dealing with our code but there is a whole
array of development related applications that also demands (or benefits of) an
understanding of our code: debuggers, static analysers, IDE environments,
editors, code browsers, bug trackers, documentation systems, requirement
management, version control...&lt;/p&gt;

&lt;p&gt;Just for the first type of applications we came up with debugging data formats
such as &lt;a href="http://en.wikipedia.org/wiki/DWARF"&gt;DWARF&lt;/a&gt; and similar variants. What
about the rest? Well, every single of them seem to parse code on their own. When
they just don't care, they lack functionality which could help programmers.&lt;/p&gt;

&lt;p&gt;Even if the LLVM library model makes code reuse easier, a common way to
represent the basic elements of a language could reduce the development effort of those
tools.&lt;/p&gt;

&lt;p&gt;There are also plenty of commercial tools which will not disclose their data
structures. These tools could work with the XML representation of their targeted
language and the integration with any other tool would be immediate.&lt;/p&gt;

&lt;h2&gt;Defined conversions&lt;/h2&gt;

&lt;p&gt;Now you might be thinking that the differences among languages, tools and lack
of a common standard are hard stuff to chew. Well, that is where &lt;a href="http://en.wikipedia.org/wiki/XSLT"&gt;XLST&lt;/a&gt; can
help. Just look at this small piece of XML &lt;fn&gt;The example was taken from the
Wikipedia article about XLST&lt;/fn&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;010    &amp;lt;?xml version="1.0" ?&amp;gt;
020    &amp;lt;persons&amp;gt;
030      &amp;lt;person username="JS1"&amp;gt;
040        &amp;lt;name&amp;gt;John&amp;lt;/name&amp;gt;
050        &amp;lt;family-name&amp;gt;Smith&amp;lt;/family-name&amp;gt;
060      &amp;lt;/person&amp;gt;
070      &amp;lt;person username="MI1"&amp;gt;
080        &amp;lt;name&amp;gt;Morka&amp;lt;/name&amp;gt;
090        &amp;lt;family-name&amp;gt;Ismincius&amp;lt;/family-name&amp;gt;
100      &amp;lt;/person&amp;gt;
110    &amp;lt;/persons&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;With XLST you could define a set of rules for translating that into something
like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;010    &amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;
020    &amp;lt;root&amp;gt;
030      &amp;lt;name username="JS1"&amp;gt;John&amp;lt;/name&amp;gt;
040      &amp;lt;name username="MI1"&amp;gt;Morka&amp;lt;/name&amp;gt;
050    &amp;lt;/root&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The application to developer tools would be great because the XML output of a
compiler could be &lt;em&gt;reshaped&lt;/em&gt; and &lt;em&gt;filtered&lt;/em&gt; providing just the basic elements
that other tools need. Even it would be possible to have be different
transformations depending on the targeted tool.&lt;/p&gt;

&lt;h2&gt;Binary mapping&lt;/h2&gt;

&lt;p&gt;There will be a concern about the efficiency of these methods. People with a
compiler background, used to highly optimized solutions, might be skeptical
thinking about the costs of using XML.&lt;/p&gt;

&lt;p&gt;Even if we prevent several other tools from parsing over and over again the
code, it just doesn't look OK to translate the internal binary AST into the text
of an XML file, transform and back again into binary.&lt;/p&gt;

&lt;p&gt;Well, that is what XML static binding solves. It defines the binary
representation of the XML nodes. A compiler can offer the XML generation for the
sake of portability. However the binary representation of a full or reduced AST
could be produced and other tools will have a common medium to understand the
structure of such dump.&lt;/p&gt;

&lt;p&gt;Today compilers are envisioned as a single tool in every programmer's computer.
There is a possibility for the current distributed compilation systems becoming
more common than we think. Just the same, other developer tools dealing with
documentation and requirements might also evolve into distributed environments.
The XML representation will be a great asset.&lt;/p&gt;

&lt;h2&gt;Conclusions&lt;/h2&gt;

&lt;p&gt;Most programming languages have common elements such as functions and variables.
With a unified representation, some tools could be expanded and provide us with
more information, no matter the underlaying language.&lt;/p&gt;

&lt;p&gt;Imagine a bug tracker that automatically list the functions modified when solving a
bug. A VCS listing the history of functions not just the history of
files, also it could define modification rights classes. A documentation and/or
requirement tool adapting to a user defined notation. Is there any easier way to
encourage the development of such tools?&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/TheDigitalLumberjack/~4/LmJ_cp4kpy0" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://francisco-garcia.net/blog/2010/03/xml-4-compilers</feedburner:origLink></entry>
 
 <entry>
   <title>The Smell of Your Code</title>
   <link href="http://feedproxy.google.com/~r/TheDigitalLumberjack/~3/cjQ9mHwAWhA/source-code-smell" />
   <updated>2010-03-27T00:00:00+01:00</updated>
   <id>http://francisco-garcia.net/blog/2010/03/source-code-smell</id>
   <content type="html">&lt;p&gt;You should not be surprised that a guy who deals with garbage also feels
concerned about the &lt;a href="http://en.wikipedia.org/wiki/Code_smell"&gt;smell of your code&lt;/a&gt;. If you want to save the click to the
Wikipedia article, I can summarize the concept rather quick: Code smell is all
those &lt;em&gt;symptons&lt;/em&gt; or things you see in code that raises a warning flag in your
mind.&lt;/p&gt;

&lt;!--break--&gt;


&lt;p&gt;If you ever used a static analysis tool to verify your code, you already have
covered some of the basis. Those tools will prevent you from shooting yourself
with a completely valid syntax (think C):&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;010   if (entry = valid)
020      result += entry;
030      result = 0;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Once I believed that static analysis was a patch to the ugliness of poorly typed
languages whereas &lt;a href="/tools/ada"&gt;properly designed ones&lt;/a&gt; never needed to cover
for this type of defects. Considering all the factors of smelly code I was wrong.
There are plenty of issues in any programming language that can be improved with
the right analysis.&lt;/p&gt;

&lt;h3&gt;The Freudian Approach&lt;/h3&gt;

&lt;blockquote&gt;&lt;p&gt;Programs must be written for people to read, and only incidentally for
machines to execute &lt;strong&gt;Abelson &amp;amp; Sussman, SICP&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;How would you &lt;em&gt;feel&lt;/em&gt; if you encounter these variables in someone else code:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SYSTSTS and SYSSTSTS&lt;/li&gt;
&lt;li&gt;open and Open&lt;/li&gt;
&lt;li&gt;obdoK and obdcK&lt;/li&gt;
&lt;li&gt;noEntries and numEntries&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Now you might understand the difference between a normal static analysis and code
smell. Languages like Ada are not case sensitive because of the second
example, but clearly misses the rest. I find the psychological concept quite
exiting. We come up with Fortran and C as our first intermediators between the
human mind and the machine mind. Other languages followed (functional, logic,
object, aspect...) trying to offer a better adaptation of the way we think.&lt;/p&gt;

&lt;p&gt;A simple tool with a word proximity algorithm could warn you about those cases.
By having a strict naming convention extra checks could be carried.  Last line
could be further improved enforcing a dictionary of abbreviations.&lt;/p&gt;

&lt;p&gt;From a &lt;em&gt;Freudian&lt;/em&gt; point of view. This is just the tip of the iceberg. More
complex metrics can analyse code complexity, design cohesion, object coupling.
All are elements affecting our ability to work with code.&lt;/p&gt;

&lt;h3&gt;Style matters but no one cares&lt;/h3&gt;

&lt;p&gt;Most programmers don't use code beautifiers as often as they should, maybe just
the good veterans. However simple beautification is only one step towards a
unified looking code.&lt;/p&gt;

&lt;p&gt;Add naming conventions and syntactic restrictions to the mix, make it part of
the compilation process so any fault stops the building process: You will have a
tool teaching you the right style. No more discussions about the name of that
variable, the position of that bracket or where is that required in the
standard. Programmers have too much information to read, a tool enforcing a
common style can save a project from overwhelmed programmers who cannot afford
learning that long list of apparently silly things.&lt;/p&gt;

&lt;p&gt;A strict coding style is greatly underrated. Without a good tool it is easy to
ignore some rules, but the larger the project the more important this is.
Several huge projects are implemented in a language with a poorly designed
packaging system: C. A solid naming convention to emulate a name space is far
more important in that case.&lt;/p&gt;

&lt;p&gt;However, overall, no matter how good your language is, code is just more
maintainable if it looks uniform. At a very minimum, comments should be written
in the same human language.&lt;/p&gt;

&lt;h3&gt;Code metrics on steroids&lt;/h3&gt;

&lt;p&gt;I believe that the combination of several tools, maybe &lt;a href="/stories/xml-4-compilers"&gt;with the help of
XML&lt;/a&gt;, can yield far useful metrics for any programmer.
Consider this scenarios:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Your bug tracking system counts how many times the class you are debugging
had issues in the past. Software projects have a tendency to have trouble
maker classes and it is easier to track them if your system knows about your
code structure.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Recently some of the automated tests have failed. A VCS can spot recently
modified functions &lt;em&gt;related&lt;/em&gt; with that test (linking requirements and tests;
also the functions used by the test).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Most VCS tools can identify the authors of every line. You could add to your
classes a list of experienced programmers, most active ones and modification
history. Sometimes it is not that easy to know whom you may ask.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The reliability of one class can be evaluated measuring how
often it is used, when was the last modification time, the length of the applied
fixes and how old it is. If many people have been used one class without any
problem, it should be less likely to some will raise.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When many requirements are implemented within the same class, you start
getting the idea that something is failing in your design. Maybe bad
coupling. The class tries to achieve too much and its maintenance is clearly
troublesome.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Now combine all the above with some classic metrics: your smelliness index!.
If just your debugger/IDE could display that information in some smart and
attractive format... you should become a very happy programmer!&lt;/p&gt;

&lt;h3&gt;Evil Side&lt;/h3&gt;

&lt;p&gt;In some dark corner of company, some manager might have the evil idea of using
metrics for the competence appraisal of his/her programmers. That would be like
killing the goose of the golden eggs! Software projects don't fail because
of the talent of its programmers, they fail because of the competence of their
managers. The work quality of a programmer is likely to be affected by the
tools, the time and decisions from other people.&lt;/p&gt;

&lt;p&gt;Most programmers will love to improve their work and get the best metrics if
these prove to be useful. However within a company it will be quite likely that
they are told to focus on something else like new features and never in quality
refactoring.&lt;/p&gt;

&lt;h3&gt;Conclusion&lt;/h3&gt;

&lt;p&gt;Although I started commenting just on code smell, my objective is to raise your
awareness on the importance of good metrics. Another of my concerns is the
poor connection between different development tools. I hope this inspires you to
support some free software project. If you are interested in these missing
connections you should read my post regarding &lt;a href="/stories/xml-4-compilers"&gt;XML for
compilers&lt;/a&gt;.&lt;/p&gt;

&lt;BR&gt;  


&lt;hr /&gt;

&lt;BR&gt;  


&lt;h3&gt;If you want to read more...&lt;/h3&gt;

&lt;p&gt;&lt;ibib&gt;Weinberg98&lt;/ibib&gt;&lt;/p&gt;

&lt;p&gt;&lt;ibib&gt;McConnell04&lt;/ibib&gt;&lt;/p&gt;

&lt;p&gt;&lt;ibib&gt;AHDT99&lt;/ibib&gt;&lt;/p&gt;

&lt;BR&gt;  



&lt;img src="http://feeds.feedburner.com/~r/TheDigitalLumberjack/~4/cjQ9mHwAWhA" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://francisco-garcia.net/blog/2010/03/source-code-smell</feedburner:origLink></entry>
 
 <entry>
   <title>Inforich or Infobloated?</title>
   <link href="http://feedproxy.google.com/~r/TheDigitalLumberjack/~3/yHXhnnYZ3tI/inforich-infobloated" />
   <updated>2010-03-21T00:00:00+01:00</updated>
   <id>http://francisco-garcia.net/blog/2010/03/inforich-infobloated</id>
   <content type="html">&lt;blockquote&gt;&lt;p&gt;In an information-rich world, the wealth of information means a dearth of something else: a scarcity of whatever it is that information consumes. What information consumes is rather obvious: it consumes the attention of its recipients. Hence a wealth of information creates a poverty of attention and a need to allocate that attention efficiently among the overabundance of information sources that might consume it&lt;br/&gt;
&lt;a href="http://en.wikipedia.org/wiki/Herbert_Simon"&gt;Herbert Simon&lt;/a&gt; (1916 – 2001)&lt;/p&gt;&lt;/blockquote&gt;

&lt;!--break--&gt;


&lt;p&gt;Around 1996 I had my first experience with the Internet. Back then you didn’t have as many net-terms as we do today, but one which immediately catch my attention was “Info-rich”.&lt;/p&gt;

&lt;p&gt;The word describes the access to knowledge within the &lt;a href="http://en.wikipedia.org/wiki/Information_society"&gt;information society&lt;/a&gt; and the internet literacy of people. As counterpart, little or no access at all is known as Info-poor. Later known as the &lt;a href="http://en.wikipedia.org/wiki/Digital_divide"&gt;digital divide&lt;/a&gt;, it is not only a new distinction in today society classes but also a way to describe the gap between developed and developing countries.&lt;/p&gt;

&lt;p&gt;Lately I’ve been concern about a little ability of mine which I share with many people. Somehow I manage to capture a huge amount of articles and information I want to digest, not only from the Internet but also TV programs, newspapers, books, courses… and my inbox just keeps growing. My efforts to satisfy my curiosity about several subjects has only lead me to a poor time management. That’s why I know I don’t fulfill my efforts on my projects, not even my free time.&lt;/p&gt;

&lt;p&gt;I am starting to develop my skills on attention allocation. Otherwise I will no longer consider me as info-rich but as info-bloated. Some state where the information becomes useless because the quantity which keeps coming into my inbox only makes me information bloated. As time goes by, this started to affect my own personality. Just like information, I try to grasp many personal projects to the point I stop being efficient. Or was it the other way around?&lt;/p&gt;

&lt;p&gt;Now I process information just like I take money decisions. Before putting something in my inbox I formulate the same question: &lt;strong&gt;Is my attention worth the cost?&lt;/strong&gt; An inoffensive article might seem inocuous. However they build up to a great attention comsuption with huge but unseen costs.&lt;/p&gt;

&lt;p&gt;Kent Thune &lt;a href="http://financialphilosopher.typepad.com/thefinancialphilosopher/2007/07/quality-over-qu.html"&gt;post&lt;/a&gt; on &lt;a href="http://en.wikipedia.org/wiki/Attention_economy"&gt;attention economy&lt;/a&gt; and finance, from whom I discovered the Herbert Simon’s quote, has been writing about this issue which I want to focus more on personal time management.&lt;/p&gt;

&lt;p&gt;The short message here is to encourage you to &lt;a href="http://en.wikipedia.org/wiki/Getting_Things_Done"&gt;GTD&lt;/a&gt; yourself. If David Allen’s methology doesn’t apply to you find something which does. I keep a constant effort to apply it on my life and I do believe his advice and tips are priceless either in my professional as my personal life.&lt;/p&gt;

&lt;p&gt;In order to become a happy organization-freak you must learn to process all information attacking you. The key point is to fine-tune your skills to reject information and digest what you decided to let through. Then some extra organization tips will help but two are a must.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/TheDigitalLumberjack/~4/yHXhnnYZ3tI" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://francisco-garcia.net/blog/2010/03/inforich-infobloated</feedburner:origLink></entry>
 
 <entry>
   <title>The Flight from Truth</title>
   <link href="http://feedproxy.google.com/~r/TheDigitalLumberjack/~3/eo2E8B8DblQ/flight-from-truh" />
   <updated>2009-11-06T00:00:00+01:00</updated>
   <id>http://francisco-garcia.net/blog/2009/11/flight-from-truh</id>
   <content type="html">&lt;blockquote&gt;&lt;p&gt;The foremost of all the forces that drive the world is falsehood. More than any before it, twentieth-century civilization has depended on information, teaching, science, culture - in short, on knowledge as well as on a system of government which, by its very definition, seeks to make knowledge availabe to all: democracy. [snip]Those who act have better data on which to base their actions, and those on the receiving end are much better informed about what those who act are doing.&lt;/p&gt;

&lt;p&gt;It is therefore interesting to inquire whether this preponderance of available knowledge - with its detail, its abundance, its ever broader and swifter disseminiation - has enabled humanity to guide itself more judiciously than in the past. The question is all the more inportant since the perfecting and accelerating of the techniques of transmission and the steady increase in the number of individuals who benefit from them will make the twenty-first century an age in which, even more than in the twentieth, information will be a central element of civilization.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Jean Francois Revel&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;img src="http://feeds.feedburner.com/~r/TheDigitalLumberjack/~4/eo2E8B8DblQ" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://francisco-garcia.net/blog/2009/11/flight-from-truh</feedburner:origLink></entry>
 
 <entry>
   <title>Ada Love Story</title>
   <link href="http://feedproxy.google.com/~r/TheDigitalLumberjack/~3/s_VMKqndCO8/ada-love-story" />
   <updated>2009-10-27T00:00:00+01:00</updated>
   <id>http://francisco-garcia.net/blog/2009/10/ada-love-story</id>
   <content type="html">&lt;blockquote&gt;&lt;p&gt;Programs must be written for people to read, and only incidentally for
machines to execute &lt;strong&gt;Abelson &amp;amp; Sussman, SICP&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Right before my first programming assignment at my University, we all had big
expectations regarding the language we had to work with. Back then Visual Basic,
C++ and Delphi were the big guys, but I as much as my colleagues agreed, maybe
that was a too much for starting. C seemed the most promising option, it was
after all, the language of the hackers. All the real &lt;em&gt;macho&lt;/em&gt; programmers could
code any thing they dreamed in it.&lt;/p&gt;

&lt;p&gt;You cannot imagine our surprise when we found out that our assignments were to
be made in something called Ada. Greatly concerned about the quality of our
education, we started our own research.&lt;/p&gt;

&lt;!--break--&gt;


&lt;p&gt;A language from 1983? Come on! It is older than C! It looked like some evil
board of professors wanted to punish us with a Cobol or Fortran look alike.
Sadly, even those languages were heard of, maybe as dinosaurs, but even so, much
more than &lt;strong&gt;it&lt;/strong&gt;. What was it good for anyway? That thing was born in the hands of
the USA army, but they seemed to ditch its development. At first sight, not a
single company cared about it.&lt;/p&gt;

&lt;p&gt;Ever since all went just bad. Suddenly programming became harder. That stupid
compiler could not stop complaining at every single line of code. The semester
went through with a great deal of pain. After such experience, the question
about which programming language was used in every other course had quite a deep
meaning along it.&lt;/p&gt;

&lt;p&gt;However I've always had this nasty habit of calling for trouble with the most
challenging solutions. So I started picking up language and compiler oriented
courses. I've been always convinced that understanding what is going on between
the language and the machine can help me to become a far better programmer. That
way you can quickly find the most efficient way to execute your code, the safest
coding style, all your options... and quite specially, to understand those
moments when you have a hard time trying to understand why your code is not
doing what is supposed to do. You might very well call it: the &lt;strong&gt;Coding-X-Vision
Superpower&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;On the other hand, compilers are the most exciting tools to work on because you
can put to work everything you know about computer science. You must have highly
complex data handling, concurrent/distributed programming, come up with all kind
of optimizations. The design and robustness must be perfect because compilers
are supposed to live an eternity while having always room for improvement. No
other thing will demand a better understanding of the operative system and the
processor. If on top of that you love the job well enough to be turned on with
some assembly lines of code. What else might you dream of?&lt;/p&gt;

&lt;p&gt;Much to my surprise I noticed that some of the courses used Ada in their lab
assignments. It caught my attention that some things could be only done in it,
and even if something was done in another language, it had its origin in Ada.&lt;/p&gt;

&lt;p&gt;Before Ada 2005 object oriented programming in Ada didn't look as elegant as
what you can do with Java, but even so, Ada was the first standardized language
to support it. If you use exceptions, you should say thanks to Ada. What if you
want to use threads or develop a distributed application? Hats down for Ada
again. Not that the beloved C/C++ cannot do it, they have libraries for that, it
is just that Ada defines that in its own standard, plus, they had it even before
C. Standards translate into extreme portability which software that behaves
exactly the same everywhere. One of Ada big points is that all its features are
exquisitely defined and well documented. No place for surprises! No Sir!.&lt;/p&gt;

&lt;p&gt;The story went on from distributed computing to language and compiler design. I
started to learn about those &lt;em&gt;ambiguous&lt;/em&gt; legal constructions in the main
languages and the gaps in their definitions. Something compiled with no problems
but then something failed. If by then you tried looking in the standard you
might find the expression &lt;em&gt;behaviour undefined&lt;/em&gt;. Well, that is a very bad word you will
not find in Ada!&lt;/p&gt;

&lt;p&gt;When I had to choose a project to finish my career, I went for Ada, and although
that made my life more difficult than necessary, I definitely developed a great
admiration for the language. Maybe it took me way longer than any other project,
but I had the chance to work with two great engineers: José Fortes, highly
skilled in compilers and &lt;a href="http://www.iuma.ulpgc.es/~jmiranda/"&gt;Javier Miranda&lt;/a&gt;,
a tireless GNAT hacker.&lt;/p&gt;

&lt;p&gt;My experience with my professors and Ada has changed the way I think about
programming, refined my tastes and influenced my career life before it really
started. Although I hope this article raises your interest for the language, I
will not try to convince you to use it. Sadly it is a greatly misunderstood
language and you will not find many opportunities to work with it (neither do
I). I just wish that more people could value Ada for what it is, and how it has
affected so many other languages that despite being more famous, still cannot
beat it.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/TheDigitalLumberjack/~4/s_VMKqndCO8" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://francisco-garcia.net/blog/2009/10/ada-love-story</feedburner:origLink></entry>
 
 <entry>
   <title>Why Garbage Collection?</title>
   <link href="http://feedproxy.google.com/~r/TheDigitalLumberjack/~3/GjlUZthiCsQ/why-garbage-collection" />
   <updated>2009-09-28T00:00:00+02:00</updated>
   <id>http://francisco-garcia.net/blog/2009/09/why-garbage-collection</id>
   <content type="html">&lt;blockquote&gt;&lt;p&gt;Lisp has jokingly been called "the most intelligent way to misuse a computer".
I think that description is a great compliment because it transmits the full
flavor of liberation: it has assisted a number of our most gifted fellow humans
in thinking previously impossible thoughts&lt;br/&gt;
&lt;strong&gt;Edsger Dijkstra, CACM, 15:10&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Just as filthy as garbage collection sounds, it is the annoying feature many
computer scientists disregard. The most common opinions are that it encourages
bad programming practices, it will prevent you from learning important mechanics
about the memory consumption of a program and finally, even the most complex
problem can be solved with explicit memory deallocation.&lt;/p&gt;

&lt;!--break--&gt;


&lt;p&gt;Well, all of that is absolutely right. So why care about it? Why on Earth would I
try to ease its adaption in such an excellent language as Ada
&lt;bib&gt;GarciaEtAl07&lt;/bib&gt;? In my opinion the following assumptions might explain
much of its unpopularity:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Companies care to do software right&lt;/li&gt;
&lt;li&gt;Companies only hire good people&lt;/li&gt;
&lt;li&gt;There is always time and money for the best solution &lt;fn&gt;Some would argue that
the best solution is the one that matches best the allocated time and
money &lt;/fn&gt;&lt;/li&gt;
&lt;li&gt;Garbage collection encourages lazy programming&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Software Engineering is all about dealing with complexity through several layers of
abstraction. Why not making memory handling part of that? Software always
evolves into bigger and more complex &lt;em&gt;creatures&lt;/em&gt;. Since memory handling is a
recurring error, spending time fixing such type of errors or taking care of a
proper memory deallocation is a quite time consuming task. As many &lt;a href="http://en.wikipedia.org/wiki/Lean_software_development"&gt;Lean
methodology&lt;/a&gt; adventists
would argue, it is not something that really adds value to the final product&lt;/p&gt;

&lt;p&gt;The need to understand how a program uses memory is clear, but the driving
economics factor behind any company makes even more clear that garbage
collection is important. Releases can be done faster with less software bugs.
Arguably companies care more about releasing something than how it has been
achieved. Hence I do believe that if Ada had garbage collection, it would not be
better, but it would raise more interest.&lt;/p&gt;

&lt;p&gt;C and C++ are facing this dilemma. Many programmers want garbage collection
supported into their favorite language, but there is no common agreement
about how this should be done. Ellis and Detlefs have long argued about it
&lt;bib&gt;EllisD94&lt;/bib&gt;, and yet, the Cxx0 standard has postponed the issue for a future
revision.&lt;/p&gt;

&lt;p&gt;What is happening? I think the current solution is partly to blame. A
conservative garbage collector &lt;bib&gt;boehmWeb&lt;/bib&gt;&lt;bib&gt;Boehm88&lt;/bib&gt; can be
easily deployed with non cooperative languages such as as C++. It doesn't need
changes in the compiler and mostly, only demands replacing the &lt;em&gt;malloc()&lt;/em&gt; and
&lt;em&gt;new()&lt;/em&gt; calls with an alternative function. This have covered the needs of many
garbage collection advocates, but has not convinced the mainstream.&lt;/p&gt;

&lt;p&gt;Some software products like Firefox have successfully used this alternative, and
Zorn has proven that this type of collectors really work well
&lt;bib&gt;berger01composing&lt;/bib&gt; &lt;bib&gt;Zorn93&lt;/bib&gt;. However in my humble opinion, I
believe it is only a problem of &lt;em&gt;faith&lt;/em&gt;. Conservative collectors make many
heuristic assumptions. They explore the whole memory trying to guess what looks like a
pointer. Obviously, computer scientists feel
nervous loosing control of their memory to a mechanism that looks more like
black magic. Touching here and deallocating there without delimited control.
Furthermore they are not very portable because of their tendency to rely on
special mechanisms of the underlaying operative system and/or microprocessor
(paging, protected memory regions, etc)&lt;/p&gt;

&lt;p&gt;Zorn also made some promising discoveries comparing implicit and explicit memory
handling, but I miss one important point. There is a huge code legacy in
Ada/C/C++ doing explicit memory handling. It is quite likely that when using a
conservative collector, it will expand without control to the memory managed by
such code adding the cost of implicit memory deallocation to the current
implicit one.&lt;/p&gt;

&lt;p&gt;Hence I have my doubts that conservative garbage collection is the answer that
we all will see in future language standards. I believe that the secret lays
within &lt;strong&gt;implicitly deallocated containers&lt;/strong&gt; provided by the languages
themselves. By providing garbage collection to a delimited subset of a
program, one will have a better control of the processes, along an estimation
of the increased memory and CPU usage. Such solution should ease the mind
of its detractors.&lt;/p&gt;

&lt;p&gt;However it will not be an easy task. The road is full of conflicts and semantic
restrictions. Such containers will demand more information about the memory than
old languages currently provide.  The essential need of a garbage collector is its ability to extract the pointers
to collectable objects within a specific type layout and the program stack.  If
the languages don't ease the implementation of custom collectors, there will be
little hope to any improvement in the current situation.&lt;/p&gt;

&lt;p&gt;Probably we will need two standard revisions of our languages to see garbage
collection made common. The first one should provide the means to build precise
collectors and the second define the semantic restrictions to use a garbage
collected container.&lt;/p&gt;

&lt;p&gt;Addressing this issue is a good way to extend the life of Ada/C/C++. Since
the complexity of software will evolve, I can think of two historic events:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Assembly has mostly been replaced by higher level languages such as C. Despite many people
defending real machine code programming, C became the standard. Now even object
oriented languages such as C++ and Java are making their way into the embedded
market pushing away C.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When the gap between CPU and hard-drives grew too large, complex
file systems emerged with more efficient storage-retrieval algorithms and new
features never thought of.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;In the same way, the gap between CPU and memory speed can grow so large that advanced
memory algorithms will emerge. New advantages not considered so far might surprise us. For
example, with an increasing demand in portable computing, it will be interesting
if memory structures could re-arrange themselves. An optimized object layout
will improve cache hits and reduce the memory regions that need to be powered,
saving on energy.&lt;/p&gt;

&lt;p&gt;In one academic study the choice of a memory management strategy made a program
consume 40 times more energy &lt;bib&gt;Diwan02energyconsumption&lt;/bib&gt;.
Garbage collectors proved to be quite energy inefficient by then. It is curious
that Java is the first choice for many portable devices, but more research is
trying to close the gap &lt;bib&gt;CSKVIW02&lt;/bib&gt;.&lt;/p&gt;

&lt;p&gt;Obviously such achievements will take some time. However our future researchers might lack
a more fine-grained memory control from our languages, like the ability to
pin-point pointers within memory. Improving languages and compilers to
provide the needed infrastructure for garbage collection seems a good excuse to
start. Future advanced memory algorithms will benefit of this one way or the
other and maybe, in that future it will look unconceivable that programmers take
care of their own memory.&lt;/p&gt;

&lt;BR&gt;  


&lt;hr /&gt;

&lt;BR&gt;  


&lt;h3&gt;If you want to read more...&lt;/h3&gt;

&lt;p&gt;&lt;ibib&gt;07whatevery&lt;/ibib&gt;&lt;/p&gt;

&lt;p&gt;&lt;ibib&gt;AltedFr10&lt;/ibib&gt;&lt;/p&gt;

&lt;p&gt;The Memory Management Reference&lt;br/&gt;
&lt;a href="http://www.memorymanagement.org/"&gt;http://www.memorymanagement.org/&lt;/a&gt;&lt;/p&gt;

&lt;BR&gt;  

&lt;img src="http://feeds.feedburner.com/~r/TheDigitalLumberjack/~4/GjlUZthiCsQ" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://francisco-garcia.net/blog/2009/09/why-garbage-collection</feedburner:origLink></entry>
 
 <entry>
   <title>Those Nutheads Writting Blogs... Oh, My!</title>
   <link href="http://feedproxy.google.com/~r/TheDigitalLumberjack/~3/mM8esPJEOUQ/nutheads-writting-blogs" />
   <updated>2009-07-05T00:00:00+02:00</updated>
   <id>http://francisco-garcia.net/blog/2009/07/nutheads-writting-blogs</id>
   <content type="html">&lt;blockquote&gt;&lt;p&gt;The greatest hope of internet generation is that you can share your thoughts with everybody in the world. The greatest letdown of the same generation is that nobody cares. Still, that doesn't keep us from trying.&lt;p align="right"&gt;&lt;a href="http://teddziuba.com"&gt;Ted Dziuba&lt;/a&gt;&lt;/blockquote&gt;&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;I don't have any doubt that the first thought of many of my friends reaching this blog will be something like "I knew this guy was nuts!"&lt;/p&gt;

&lt;p&gt;Yeah right. Why would any normal person keep a blog? Don't only nerds and such sort of socially troubled people do it? Come on! It is a lot of work for just exposing one's private life and simple minded thoughts. Isn't it?&lt;/p&gt;

&lt;!--break--&gt;


&lt;p&gt;Well, keep thinking that way and you will be missing a great tool for improving your career, personal growth, social connections and much more. It is the single most important thing you can do in social media if you take that seriously.&lt;/p&gt;

&lt;p&gt;Unless you understand the reasons for reading a blog, I have my doubts that you will understand my reasons for blogging. However for explaining this, I can give you a short but detailed list of my reasons.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It is an extension of my mind&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The life of a computer scientist, like those of any other living entities, is full of new discoveries. In my case I have a problem to have a grasp of all of them. Whenever I learn something new I try to write some notes about it and put them together in this blog. Whenever I am I can read them, and if any friend of mine is battling with the same thing I can point them here.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You will never get a better review&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If four eyes sees better than two (supposing that none of the subjects is one-eyed), how better can see thousand of eyes? Any of my personal values or opinions can be discussed by anyone. I would be excited even if someone makes a bad review. As far as the guides I wrote about before, if I am missed something, hopefully someone will tell me.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Your best loved ideas might expand&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When I wrote my master thesis I was really excited, so much that I decided to make it available on the internet. I would feel really proud of it if someone tries to continue that work. Meanwhile I push some things on my free time and anyone can criticise it and is free to come with ideas that can make it better.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It makes me think&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When I write I force myself to put straight my thoughts and make some logic out of it. Sometimes it becomes an objectives declaration and I realize not only the power of putting down with words my plans, but showing the whole world about it. Overall and for the same reasons, sometimes it becomes quite a psychological test.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It is a great connection&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I expect people with similar thoughts and interests to keep reading this post. I have no doubts that with them I will make more complete my knowledge about the things I write. Specially, when they start responding with smarter comments than my posts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Still Alive Proof&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I am a lowsy penpal, most of my distant friends hardly ever get news about me, except for the important dates. Blogging is a way to show them I am alive and with a personal section they can read about my life.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I don't speak English&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;At least not natively. I have already been accused of high treason among some peers, but come on, I already know how to write in Spanish. A good command of the English language is always a nice asset to have. Being an Engineer myself I am forced to write technical documents in English. Although anyone can understand what I write about, I would rest better thinking that my documents are something decent and error free. This blog is my biggest tool for learning properly the language, but sometimes feels like overly bold to write so much in it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Need to practice my writing&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I spent two years in a literature course and some years later I had to write my master thesis. My best experience out of it was learning how important it is to craft effective sentences and choose the right words. Between the course and my thesis I had not written too much and I realized that one not only needs a lot of practice to write properly, but needs to keep doing it. My skills are not as good as back then, but I have no doubt that within some years I will be able to look back my first posts and cringe when comparing the level I will achieve.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/TheDigitalLumberjack/~4/mM8esPJEOUQ" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://francisco-garcia.net/blog/2009/07/nutheads-writting-blogs</feedburner:origLink></entry>
 
 <entry>
   <title>The Magic of the Blogosphere</title>
   <link href="http://feedproxy.google.com/~r/TheDigitalLumberjack/~3/UGN-1PyOHN8/the-magic-of-the-blogosphere" />
   <updated>2009-06-06T00:00:00+02:00</updated>
   <id>http://francisco-garcia.net/blog/2009/06/the-magic-of-the-blogosphere</id>
   <content type="html">&lt;p&gt;When the Internet was born many people understood how important it was the ability to publish any content and reach the whole world at almost no cost. The freedom and the resources have ever since been there, but maybe this was never really exploited until the blogs appeared.&lt;/p&gt;

&lt;p&gt;A blog by definition, is just a personal journal published on the internet. Usually they are focused in one specific subject. Think one word about any hobby, political trend, professional activity... anything! and you will find someone blogging about it.&lt;/p&gt;

&lt;p&gt;The big difference from any other of your reading sources (and the reason because people don't usually take it seriously) is that most of them are written by normal people. Anyone can have a blog for free in a few minutes. This usually comes along low quality, non reliable, non professional and many other non desirable things. However such freedom gives a voice to interesting people who would never get noticed.&lt;/p&gt;

&lt;!--break--&gt;


&lt;p&gt;On the other hand books, articles, magazines or any other communication source have an industry behind them. You get contents usually with higher quality and made by professionals, but not without the control of some kind of institution. Today corporate behemoths, usually with some political hand behind, own the major outlets of our news, opinions and entertainment. What you read has been previously classified as acceptable and profitable. Only in some cases this is really an advantage, like when an academic institution ensures that its articles meets a minimum of quality, veracity and grounded research.&lt;/p&gt;

&lt;h3&gt;Blogs when you need information&lt;/h3&gt;

&lt;p&gt;Once you add some blog reading to your internet routine, it will quickly become your best source of information. Look at it as a specialized newsletter that filters everything you can find in the internet. Some might become your entry point to the social circle you needed to find someone to help you, work with you or learn with. Good blogs will point you to places and people with a common interest. Many people find the right partners for their projects this way, even scientists are finding out that they can share, develop and review their work through blogging.&lt;/p&gt;

&lt;h3&gt;Blogs for entertainment&lt;/h3&gt;

&lt;p&gt;I bet this must be the best reason for many people to surf the internet, right after sex. Latest news about their favourite topics, jokes and funny videos.&lt;/p&gt;

&lt;p&gt;If what you are looking for are good stories I must tell you that they are hard to find but I have come across some really talented bloggers out there which I truly enjoy reading every so often. However, this is an area that I have not fully explored. Blogs are good for learning new things because they are full of fresh ideas, independent and with many points of view, even it their contents are of just cheap quality. However when it comes to reading for leisure I care far more about the literary quality. I might be somehow demanding because I spent two years of my life learning about literature, but a good novel can be a piece of art and I still have a long list of classics to read yet.&lt;/p&gt;

&lt;h3&gt;Blogs for bibliographies&lt;/h3&gt;

&lt;p&gt;Most people think of bibliographies as something boring, and sometimes I think they are right. If you walk into a book store you will mostly find two types: The ones about famous some-times-interesting people who died a long time ago and the ones about boring living people who have money enough to pay someone to write about them.&lt;/p&gt;

&lt;p&gt;However blogs, and specially those written with more personal entries, have something special. They are from normal people which which would never publish their thoughts unless being so plain easy. This way you might find out about the life of a person that fits your interests. Let me explain this with an example.&lt;/p&gt;

&lt;p&gt;Imagine you are a young entrepreneur in front of a small company and willing to digest any material which can help you lead better your company. Sure you can find books about management, leadership and even about the specific market of your company. However, something really valuable that is hard to find out of the blogosphere would be the personal diary of people who started like you, who battled like you, suceeded and is "currently" writing frequently about it.&lt;/p&gt;

&lt;p&gt;It can be people who succeeded in something you are trying to achieve, a mother telling the world her challenges raising her kids in this world, the man who decided to quit smoking and run a marathon. Sure that you will be exited to read the experiences of someone whose objectives resembles yours. Although there are books about anything, I believe that in this case there are many small voices worth listening to.&lt;/p&gt;

&lt;h3&gt;Start reading!&lt;/h3&gt;

&lt;p&gt;Choice is wide and variety great. You will find such a quantity of contents that you will have to develop new skills to digest such outrageous amount of information. Many times you will discover that there are many people out there with too much free time. You might get that feeling when you find something like a 12 hours detailed log about the activities of a fly in someone's garage, with pictures, videos, animations and detailed diagrams. Except those cases, I assure you that there is such a thing as serious, high quality, professional blogging. But once again, the value of blogs is not in their quality, but in their independent opinions, fresh ideas and unique perspectives. Some of their contents are made with various voices from different parts of the world coming together. A blend of the thoughts of people with different backroungs, experiences, stories, religions...&lt;/p&gt;

&lt;p&gt;But be aware that freedom always comes not exempt of surprises. Blogs can be hoaxes like the story of &lt;a href="ttp://www.sptimes.com/News/060301/news_pf/Worldandnation/Kaycee_chronicles__li.shtml"&gt;Kaycee Nicole&lt;/a&gt; or part of some marketing campaign. Professional blogs are also cash machines and the bigger they are, the more chances their contents might be moved because of money.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/TheDigitalLumberjack/~4/UGN-1PyOHN8" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://francisco-garcia.net/blog/2009/06/the-magic-of-the-blogosphere</feedburner:origLink></entry>
 
 <entry>
   <title>Dear John, the machines are already taking control</title>
   <link href="http://feedproxy.google.com/~r/TheDigitalLumberjack/~3/X0KVs3DCv60/dear-john-machines-are-already-taking-control" />
   <updated>2009-02-22T00:00:00+01:00</updated>
   <id>http://francisco-garcia.net/blog/2009/02/dear-john-machines-are-already-taking-control</id>
   <content type="html">&lt;blockquote&gt;&lt;p&gt;Year &lt;a href="http://en.wikipedia.org/wiki/The_Terminator"&gt;2029&lt;/a&gt;, the world as we know today no longer exists. Intelligent machines with human form have taken control and only a small human resistance group struggles to survive.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Are we there yet? Well, not quite, but a similar fight is already going on.&lt;/p&gt;

&lt;p&gt;After reading &lt;em&gt;Is Google making us stupid?&lt;/em&gt; by Nicholas Carr &lt;!--bib&gt;Carr08&lt;/bib--&gt;  I realized about our current struggle in the &lt;em&gt;Great Invisible War Against Technology&lt;/em&gt;. It was the triggering point that gave me the idea of this blog when I was still under the influence of &lt;em&gt;The Monk and the Philosopher&lt;/em&gt; &lt;!--bib&gt;Ricard00&lt;/bib--&gt;. That was the moment when my passion for Psychology and Philosophy applied to Computer Science was awoken.&lt;/p&gt;

&lt;p&gt;Carr made an amazing point in his article. Internet is changing the way we read and many of us are having a hard time to focus in long texts. However with examples about how &lt;a href="http://en.wikipedia.org/wiki/Friedrich_Nietzsche"&gt;Nietzsche&lt;/a&gt; work changed when he got &lt;a href="http://markelikalderon.com/2007/04/18/easily-twisted-on-journeys/"&gt;his first typewriter&lt;/a&gt;, one could expand the concept to a bigger idea: Technology is changing our values and the way our brain works.&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;We are not only what we read ... we are how we read ... the style of reading promoted by the Net, a style that puts &lt;em&gt;efficiency&lt;/em&gt; and &lt;em&gt;immediacy&lt;/em&gt; above all else, may be weakening ... our ability to interpret text, to make the rich mental connections that form when we read deeply and without distraction&lt;br/&gt;
&lt;strong&gt;Maryanne Wolf and Nicholas Carr&lt;/strong&gt;&lt;!--bib&gt;Carr08&lt;/bib--&gt;&lt;/p&gt;

&lt;p&gt;Our writing tools are also working on our thoughts&lt;br/&gt;
&lt;strong&gt;Nitzsche&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Socrates was alarmed about books, he was concerned about people basing their education on them because they are only a medium to convey information. It is only through dialog one could gain wisdom and a better insight on knowledge. Therefore he never wrote a single one. The only thing we know about him is because Plato, his student, decided to write his conversations.&lt;/p&gt;

&lt;p&gt;Today most of our education is based largely on printed material and I will not argue how a valuable tool it has become. However and just like Carr pointed out, now we struggle to grasp some insight among so much information (&lt;a href=""&gt;Information Oberbloat&lt;/a&gt;), our capability to concentrate in long materials has been diminished.&lt;/p&gt;

&lt;p&gt;Living in an age where most of our knowledge comes from movies and internet, I would like to mention &lt;strong&gt;Star Trek&lt;/strong&gt;. I was quite grown-up when I became a fan of the series. Today it might be shocking to endure such awful special effects, but once you contemplate the show as a historical workpiece, it is possible to take out many technology-philosophy concepts such as soul existence, abortion, religion or human genetic engineering &lt;!--bib&gt;Eberl08&lt;/bib--&gt;.&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;The whole show was an attempt to say that humanity will reach maturity and wisdom on the day that it begins not just to tolerate, but to take a special delight in differences in ideas and differences in life forms. We tried to say that the worst possible thing that can happen to all of us is for the future to somehow press us into a common mould, where we begin to act and talk and look and think alike. If we cannot learn to actually enjoy those small differences, take a positive delight in those small differences between our own kind, here on this planet, then we do not deserve to go out into space and meet the diversity that is almost certainly out there.&lt;br/&gt;
&lt;strong&gt;Gene Roddenberry&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Technology can solve all of the problems of mankind, including the problems that stem from human nature such as war, hatred, greed, etc &lt;br/&gt;
&lt;a href="http://www.stardestroyer.net/Empire/Essays/Philosophy.html"&gt;Scott Whitmore&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;The three main characters Kirk, McKoy and Spock were the portraits of different types of people. One of the most recurrent events were the fights between Dr. McKoy and Spock about human nature and logic. Most of their discussions represented the importance of human concepts to discern between the best actions versus the right actions.&lt;/p&gt;

&lt;p&gt;Later the series evolved with complete different players. Still though, the show
was like classic Greek mythology, every actor represented different human
virtues and defects, most of them being quite immature. The role of Spock was
replaced by an android called &lt;em&gt;Data&lt;/em&gt; which still represented after all, the
conflict between logic and humanity.&lt;/p&gt;

&lt;p&gt;However one great addition was a new enemy, the &lt;a href="http://en.wikipedia.org/wiki/Borg_(Star_Trek)"&gt;Borg race&lt;/a&gt;, a machine civilization which slowly assimilated every living creature in the universe and whose moto was "Resistance is futile".&lt;/p&gt;

&lt;p&gt;We don't need to wait so many years for such futuristic fight. Sadly, machines
do not need to be that advanced to affect humanity. Many humans do not remember
important dates if it is not in their electronic agenda, their friendship
circle is extended by hundreds of Facebook contacts and sometimes it is their
only social circle. Our ability to concentrate deeper in content, art and
relationships is getting harder and harder. The only difference of this
fight is that it is not led by violence, but by seduction.&lt;/p&gt;

&lt;p&gt;When I think how future might be alike, I take for granted that society will be technologically more advanced. However when I try to imagine how will be the human being of the future I am completely lost. Still looking back in our history I recognize similarities with our current world. Ancient Rome and Egyptian societies were led by commerce, law and labor. There were social layers, justice and injustice. Faith fights. Buddies met after work for some beers. Parents tried to teach their children about life while children taught their parents what life is about. Happiness was based on security, money, love and health... Will we always be like this type of human beings? Or will the rich and poor worlds drift apart as far as Diaspar and Lys did? &lt;!--bib&gt;Clarke56&lt;/bib--&gt;&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;He found part of his answer among the children, those little creatures who were as strange to him as any of the animals of Lys ... Sometimes it seemed to him that they were not human at all, their motives, their logic, and even their language were so alien. He would look unbelievingly at the adults and ask himself how it was possible that they could have evolved from these extraordinary creatures who seemed to spend most of their lives in a private world of their own.&lt;/p&gt;

&lt;p&gt;And yet, even while they baffled him, they aroused within his heart a feeling he had never known before. When-which was not often, but sometimes happened-they burst into tears of utter frustration or despair, their tiny disappointments seemed to him more tragic than Man's long retreat after the loss of his Galactic Empire. That was something too huge and remote for comprehension, but the weeping of a child could pierce one to the heart.&lt;/p&gt;

&lt;p&gt;Alvin had met love in Diaspar, but now he was learning something equally precious, and without which love itself could never reach its highest fulfilment but must remain forever incomplete. He was learning tenderness.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Several science fiction works have based their plot on the use of genetic engineering to enable parents selecting special traits in their offspring. Society becomes divided between genetically favored humans and those &lt;em&gt;freely bred&lt;/em&gt;. It is easy to imagine that as technology evolves, certain achievements of &lt;em&gt;Diaspar&lt;/em&gt; such as advanced &lt;a href="http://en.wikipedia.org/wiki/Liberal_eugenics"&gt;liberal eugenics&lt;/a&gt; could be emulated producing new human beings in their adult stage. Could you imagine a world without children? With people who never met one? It might be feasible but... Do you have hopes for a future in a world with such type of &lt;em&gt;human beings&lt;/em&gt;?&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;This was the way that life had once begun; these noisy, fascinating creatures were human children. Alvin watched them with wondering disbelief-and with another sensation which tugged at his heart but which he could not yet identify. No other sight could have brought home to him so vividly his remoteness from the world he knew. Diaspar had paid, and paid in full, the price of immortality.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Our society has still many fights ahead, not only technological. Daniel Goleman &lt;!--bib&gt;Goleman06&lt;/bib--&gt; showed us the importance of &lt;a href="http://en.wikipedia.org/wiki/Emotional_intelligence"&gt;emotional intelligence&lt;/a&gt;.  Dr. Carol Craig has criticised how modern school systems are producing a &lt;a href="http://www.dailymail.co.uk/news/article-1162134/Constant-praise-turning-children-narcissists-expert-warns.html"&gt;wave of narcissists children&lt;/a&gt;. Is there any connection on how technology affect us? On its unifying effect? Behind the scene, there is a small resistance group made of psychologists and philosophers fighting those fronts.&lt;/p&gt;

&lt;p&gt;In this Internet Era, every corner of the world is interconnected. Our economy, culture, virtues, defects and sense of humanity are merging across the globe. Our victories and defeats against the machines are having a worldwide effect. I do not expect people considering an amish lifestyle. Technology will advance, shape us along our values, redefine our concept of humanity, and any resistance will be futile.&lt;/p&gt;

&lt;BR&gt;  


&lt;hr /&gt;

&lt;BR&gt;  


&lt;h3&gt;If you want to read more...&lt;/h3&gt;

&lt;p&gt;&lt;a href="http://spectrum.ieee.org/tech-talk/consumer-electronics/gaming/the-most-disturbing-presentation-of-the-year"&gt;The Most Disturbing Presentation Of The
Year&lt;/a&gt;&lt;br/&gt;
If Shakespeare thought life is a theater, this guy will convince you that life
is just a game&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.friesian.com/matrix.htm"&gt;Ph.D Kelley L. Ross - There Is No Spoon: The Matrix&lt;/a&gt;&lt;br/&gt;
A professional philosopher comments on the philosophical aspects of &lt;strong&gt;The
Matrix&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://drsanity.blogspot.com/2009/03/welcome-to-golden-age-of-narcissism.html"&gt;Welcome to the Golden Age of Narcissism&lt;/a&gt;&lt;br/&gt;
http://drsanity.blogspot.com/&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.dailymail.co.uk/debate/article-1163078/Dr-Carol-Craig-Why-drive-teachers-boost-childrens-self-esteem-killing-Blitz-spirit.html"&gt;Why the drive for teachers to boost children's self-esteem is killing our Blitz spirit&lt;/a&gt;&lt;br/&gt;
Dr Carol Craig - The Daily Mail&lt;/p&gt;

&lt;BR&gt;  

&lt;img src="http://feeds.feedburner.com/~r/TheDigitalLumberjack/~4/X0KVs3DCv60" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://francisco-garcia.net/blog/2009/02/dear-john-machines-are-already-taking-control</feedburner:origLink></entry>
 

</feed>

