<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Tiago&apos;s Tech Blog</title>
    <description>My Personal Blog</description>
    <link>https://www.tiagoespinha.net/</link>
    <atom:link href="https://www.tiagoespinha.net/sitemap.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Fri, 16 Oct 2026 21:44:32 +0100</pubDate>
    <lastBuildDate>Fri, 16 Oct 2026 21:44:32 +0100</lastBuildDate>
    <generator>Jekyll v4.3.4</generator>
    
      <item>
        <title>If You&apos;re the Smartest Person in the Room, You&apos;re in the Wrong One</title>
        <description>&lt;p&gt;There is an old line I keep coming back to: if you are the smartest person in the room, you are in the wrong room.&lt;/p&gt;

&lt;p&gt;I know how that sounds. It can come across as arrogant. As if the person saying it has already ranked the room and placed themselves at the top, or as if the only respectable place to stand is slightly below everyone else. That is not what I mean.&lt;/p&gt;

&lt;p&gt;People have different knowledge. On any given subject, in any given room, the levels are not even. Sometimes you will be the least knowledgeable person there. Sometimes you will be the most. That is not immodesty. It is a fact. Pretending you cannot tell the difference does not make you humble. It just makes you less accurate.&lt;/p&gt;

&lt;p&gt;So the useful move is not to deny the ranking. It is to notice it, acknowledge it, and then decide whether it matters.&lt;/p&gt;

&lt;p&gt;If you are the least experienced person in the room, the decision is usually easy. Listen. Learn. Close the gap. If you are the most experienced, the decision is harder. Are you there to teach, to set a standard, to carry something the room cannot carry without you? That can be the job, and there is nothing vain about seeing it clearly. Or are you there because it is comfortable? Because nobody pushes back? Because being the person with the answers has become a place to hide?&lt;/p&gt;

&lt;p&gt;That second case is the one the old line is actually about.&lt;/p&gt;

&lt;p&gt;You can find a comfortable job. A supporting manager who genuinely likes your work and does not push you very hard at all. The feedback is warm. The expectations are clear. Nobody is asking you to do something you do not already know how to do. From the outside it looks like a good situation, and for a while it is.&lt;/p&gt;

&lt;p&gt;Then you notice that the days are passing and you are not getting sharper.&lt;/p&gt;

&lt;p&gt;And if you are not pushing yourself, and you are not growing, what are you even doing?&lt;/p&gt;

&lt;h2 id=&quot;the-room-where-i-grew-the-most&quot;&gt;The Room Where I Grew the Most&lt;/h2&gt;

&lt;p&gt;I spent three years at Microsoft, and it was by far the period in which I grew the most.&lt;/p&gt;

&lt;p&gt;Not because the logo is magic. Because the rooms were full of people who were better than me at things I cared about. I learned an enormous amount from them. Technical depth, judgement, how to hold a problem properly instead of performing an answer. The kind of learning that only happens when you are regularly the person in the conversation who has to catch up.&lt;/p&gt;

&lt;p&gt;That is uncomfortable. It is also the point.&lt;/p&gt;

&lt;p&gt;When you are surrounded by people who are ahead of you, your gaps stop being theoretical. You can feel them. You get to watch how someone else thinks, and then you get to go and close the distance. Day after day, that compounds. Three years of that did more for me than long stretches of being the person everyone already trusted to have the answer.&lt;/p&gt;

&lt;h2 id=&quot;comfort-is-not-the-same-as-a-good-life&quot;&gt;Comfort Is Not the Same as a Good Life&lt;/h2&gt;

&lt;p&gt;Then, because of life, I slumped back into cushier positions.&lt;/p&gt;

&lt;p&gt;I want to be clear about this, because it would be easy to sneer at it. I am grateful for the chance to slow down. There are seasons where that is the right call, and I do not regret taking one. Rest is not failure. A manager who has your back is not a problem.&lt;/p&gt;

&lt;p&gt;The problem is staying there once you know you have stopped moving.&lt;/p&gt;

&lt;p&gt;I do not do well just kicking back and relaxing. After a while the comfort stops feeling like relief and starts feeling like rust. The work is fine. The people are often fine. I am not learning. I am not being asked to become someone slightly better than I was last month. And I can feel it.&lt;/p&gt;

&lt;p&gt;That is not sustainable for me. I need to keep learning. I need to keep pushing. A job that only asks me to repeat what I already know is a job that is slowly making me worse, even when everyone around me is perfectly happy with the output.&lt;/p&gt;

&lt;h2 id=&quot;people-who-hide-their-gaps&quot;&gt;People Who Hide Their Gaps&lt;/h2&gt;

&lt;p&gt;There is a particular kind of frustration that shows up in those rooms.&lt;/p&gt;

&lt;p&gt;You end up surrounded by people who think they are hot stuff. Confident, quick to speak, very sure of the frame they have put around the problem. And you can see straight through it. The gaps are there. They are not subtle. What &lt;em&gt;is&lt;/em&gt; subtle is the amount of effort going into hiding them: the vocabulary, the name-dropping, the refusal to say “I don’t know” out loud.&lt;/p&gt;

&lt;p&gt;It is exhausting to be around, because the conversation stops being about the work and becomes about protecting a self-image.&lt;/p&gt;

&lt;p&gt;Really smart people are different. They know they have gaps. They are not afraid of them. They will tell you where their understanding runs out, and then they will go and fill it in. That honesty is not modesty for its own sake. It is how you stay accurate. The moment you start spending energy on concealing what you do not know, you have stopped learning, and you have started acting.&lt;/p&gt;

&lt;p&gt;I would rather be the least polished person in a room full of people who can see their own edges than the most impressive person in a room full of people pretending they do not have any.&lt;/p&gt;

&lt;h2 id=&quot;the-job-i-took-because-of-the-person&quot;&gt;The Job I Took Because of the Person&lt;/h2&gt;

&lt;p&gt;I have been given a second chance to work for the best manager I have ever worked for.&lt;/p&gt;

&lt;p&gt;When I saw that he was hiring, if I am honest, I did not worry that much about what the job was. I was sure that if he was in it, it had to be something interesting and worth chasing. The work would reveal itself. The standard would be real. Some days I will still be the person who knows the most about a particular thing. That is fine. I just do not want that to be the default, or the reason I stay.&lt;/p&gt;

&lt;p&gt;That is a strange way to choose a job if you write it down. Title, scope, compensation, the shape of the org chart: all of that matters, and I am not pretending it does not. But I have already lived the alternative. I know what it feels like to be well liked and under-stretched. I know what it did to me. Given the choice, I will take the room where I have to grow.&lt;/p&gt;

&lt;p&gt;So here I am, ready for another challenge.&lt;/p&gt;

&lt;h2 id=&quot;better-than-yesterday&quot;&gt;Better Than Yesterday&lt;/h2&gt;

&lt;p&gt;The standard I want is simple, and it is not only about work.&lt;/p&gt;

&lt;p&gt;Challenge yourself. Intellectually and physically. Be better every day than you were yesterday. Not in a grind-yourself-into-dust way, and not as a performance for anyone else. Just do not let the days go by while you stay exactly the same person.&lt;/p&gt;

&lt;p&gt;Read the thing you have been avoiding. Ask the question that exposes the gap. Train. Go to bed able to point at one thing you can do today that you could not do yesterday.&lt;/p&gt;

&lt;p&gt;Keep learning. Stay sharp.&lt;/p&gt;

&lt;p&gt;Let’s go.&lt;/p&gt;
</description>
        <pubDate>Fri, 16 Oct 2026 21:00:00 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2026/10/if-youre-the-smartest-person-in-the-room/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2026/10/if-youre-the-smartest-person-in-the-room/</guid>
        
        
        <category>tech</category>
        
        <category>leadership</category>
        
        <category>career</category>
        
      </item>
    
      <item>
        <title>Copy the Reasoning, Not the Architecture</title>
        <description>&lt;blockquote&gt;
&lt;p&gt;
&quot;We should use this.&quot;
&lt;/p&gt;

&lt;p&gt;
&quot;Why?&quot;
&lt;/p&gt;

&lt;p&gt;
&quot;Because we used it in a previous life. Also, BigCorp uses it.&quot;
&lt;/p&gt;
&lt;/blockquote&gt;


&lt;p&gt;
If you&apos;ve worked in software for long enough, you&apos;ve probably been in some version of this meeting.
&lt;/p&gt;

&lt;p&gt;
A technical direction is proposed. Someone asks for the reasoning. Instead of a discussion about constraints, trade-offs, failure modes, operational burden, or team capability, the answer is some variation of: &lt;i&gt;I have seen this before&lt;/i&gt;, &lt;i&gt;this is how we did it at my last company&lt;/i&gt;, or &lt;i&gt;large successful organisations already use this, so clearly it is the right approach&lt;/i&gt;.
&lt;/p&gt;

&lt;p&gt;
On the surface, that sounds reasonable. Experience matters. Learning from other organisations matters. Nobody wants to rediscover every lesson from first principles like some sort of software engineering caveman.
&lt;/p&gt;

&lt;p&gt;
But there is a line where experience stops being evidence and starts becoming a trump card.
&lt;/p&gt;

&lt;p&gt;
Once that happens, architectural discussion stops being a search for the best answer and becomes a performance of authority. The strongest argument in the room is no longer the clearest reasoning. It is the biggest company name someone can invoke.
&lt;/p&gt;

&lt;p&gt;
And that is where teams get into trouble.
&lt;/p&gt;
&lt;div id=&quot;outline-container-orgf551b3b&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgf551b3b&quot;&gt;Experience Is Evidence, Not Proof&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-orgf551b3b&quot;&gt;
&lt;p&gt;
I want to be very clear about something: prior experience is valuable.
&lt;/p&gt;

&lt;p&gt;
In fact, it is one of the main things senior engineers and technical leaders bring to a team. Experience helps you spot patterns early. It gives you a library of failure modes. It lets you say, &quot;I&apos;ve seen this shape of problem before, and here are the things that tend to go wrong.&quot;
&lt;/p&gt;

&lt;p&gt;
That is incredibly useful.
&lt;/p&gt;

&lt;p&gt;
The problem starts when experience is treated as the conclusion rather than as input into the discussion.
&lt;/p&gt;

&lt;p&gt;
There is a massive difference between saying:
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
&quot;At my previous company, we used this approach because we had thousands of services, strict regulatory requirements, and a dedicated platform team to operate it. Looking at our situation, I think some of those constraints apply here, but some don&apos;t. Let&apos;s work through that.&quot;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
and saying:
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
&quot;We did this at BigBank, so this is what we should do here.&quot;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
The first version invites scrutiny. It explains the context. It gives people something to reason about.
&lt;/p&gt;

&lt;p&gt;
The second version shuts the conversation down.
&lt;/p&gt;

&lt;p&gt;
It asks the team to trust the speaker&apos;s memory, judgement, and prestige rather than engaging with the actual merits of the proposal. Worse, it creates an environment where disagreement starts to feel like insubordination rather than engineering.
&lt;/p&gt;

&lt;p&gt;
That is not technical leadership. That is architecture by anecdote.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org36f5be2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org36f5be2&quot;&gt;Big Companies Solve Big Company Problems&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-org36f5be2&quot;&gt;
&lt;p&gt;
One of the most common mistakes I see in architecture discussions is assuming that because a large, successful company uses a particular technology or pattern, that technology or pattern must be generally good.
&lt;/p&gt;

&lt;p&gt;
But large companies often have very specific constraints.
&lt;/p&gt;

&lt;p&gt;
A bank with 20,000 engineers, decades of legacy systems, strict audit requirements, regional compliance obligations, internal platform teams, formal change-control processes, and enough budget to absorb staggering amounts of complexity is playing a very different game from a product team of eight engineers trying to ship quickly.
&lt;/p&gt;

&lt;p&gt;
What looks like architectural excellence from the outside may actually be a local optimum inside a very strange environment.
&lt;/p&gt;

&lt;p&gt;
Sometimes BigCorp uses a technology because it genuinely is the best tool for the job. Sometimes it uses it because they had no better option ten years ago. Sometimes it uses it because an internal platform team built a golden path around it. Sometimes it uses it because migration would be too expensive. Sometimes it uses it because a vendor relationship, compliance interpretation, or organisational boundary made it the least bad option.
&lt;/p&gt;

&lt;p&gt;
From the outside, all of those look the same:
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
&quot;They use X.&quot;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
But the reason matters enormously.
&lt;/p&gt;

&lt;p&gt;
A huge organisation can survive architectural complexity that would crush a smaller team. They can throw people at problems. They can build internal tooling. They can have dedicated SRE teams, security teams, compliance teams, platform teams, and support rotations around systems that a smaller company would simply drown in.
&lt;/p&gt;

&lt;p&gt;
Copying the visible technology without copying the surrounding organisation is how you inherit the cost without inheriting the capability.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org0af8f4a&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org0af8f4a&quot;&gt;Copying Vocabulary Instead of Architecture&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-org0af8f4a&quot;&gt;
&lt;p&gt;
This becomes especially dangerous when teams copy technologies they do not deeply understand.
&lt;/p&gt;

&lt;p&gt;
Take something like SPIFFE/SPIRE as an example. Workload identity is a genuinely important problem, and SPIFFE/SPIRE can be an excellent solution in the right context. If you operate a large distributed system with many services, dynamic workloads, and a need for strong service-to-service identity, it is absolutely worth understanding.
&lt;/p&gt;

&lt;p&gt;
But it is not enough to say:
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
&quot;BigCorp uses SPIFFE for authentication, so we should use SPIFFE too.&quot;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
That sentence barely scratches the surface of the problem.
&lt;/p&gt;

&lt;p&gt;
The real architecture lives in the details:
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;How are workloads attested?&lt;/li&gt;
&lt;li&gt;What is the root of trust?&lt;/li&gt;
&lt;li&gt;How are trust bundles distributed?&lt;/li&gt;
&lt;li&gt;How are identities bootstrapped?&lt;/li&gt;
&lt;li&gt;How are certificates rotated?&lt;/li&gt;
&lt;li&gt;What happens when a workload is compromised?&lt;/li&gt;
&lt;li&gt;How are identities revoked?&lt;/li&gt;
&lt;li&gt;How is authentication translated into authorisation?&lt;/li&gt;
&lt;li&gt;Which assumptions does the original environment make that ours does not?&lt;/li&gt;
&lt;li&gt;Who operates the system when it breaks at 2am?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Those are not implementation trivia. Those &lt;i&gt;are&lt;/i&gt; the architecture.
&lt;/p&gt;

&lt;p&gt;
Two teams can draw the same boxes on a whiteboard and end up with radically different security properties. One implementation might be robust, well-attested, properly rotated, observable, and integrated into a broader zero-trust model. Another might be a collection of certificates and sidecars that gives everyone a warm feeling while quietly introducing new attack paths.
&lt;/p&gt;

&lt;p&gt;
In that scenario, you have not copied BigCorp&apos;s architecture.
&lt;/p&gt;

&lt;p&gt;
You have copied its nouns.
&lt;/p&gt;

&lt;p&gt;
And copying nouns is dangerous because it gives the illusion of sophistication without the substance. You get the vocabulary of a mature platform without the operational understanding that made it safe.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgd6c5e8c&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgd6c5e8c&quot;&gt;The Whiteboard Lies&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-orgd6c5e8c&quot;&gt;
&lt;p&gt;
Architecture diagrams are useful, but they are also liars.
&lt;/p&gt;

&lt;p&gt;
They compress messy reality into boxes and arrows. They hide the ugly bits: the bootstrap process, the migration plan, the operational procedures, the observability gaps, the weird edge cases, the emergency runbooks, the human workflows, the organisational assumptions.
&lt;/p&gt;

&lt;p&gt;
This is why &quot;Company X uses this architecture&quot; is such a weak argument on its own. What does that actually mean?
&lt;/p&gt;

&lt;p&gt;
Do they use the same technology with the same scale characteristics? The same team topology? The same threat model? The same deployment model? The same tolerance for operational overhead? The same regulatory environment? The same level of internal expertise?
&lt;/p&gt;

&lt;p&gt;
Usually, no.
&lt;/p&gt;

&lt;p&gt;
On a slide deck, two systems can look almost identical. In production, one is boring and reliable while the other is a constant source of pain. The difference is rarely in the boxes. It is in the details between them.
&lt;/p&gt;

&lt;p&gt;
How do failures propagate? What retries? What times out? What is cached? What is eventually consistent? What is manually recovered? What is automated? What is observable? What is secure by design versus secure by convention?
&lt;/p&gt;

&lt;p&gt;
These questions do not fit neatly on a diagram, but they determine whether the architecture actually works.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org24d7419&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org24d7419&quot;&gt;The Trust Cost&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-org24d7419&quot;&gt;
&lt;p&gt;
The technical cost of this kind of decision-making is obvious enough: you may choose the wrong tool, underestimate complexity, or introduce risks you do not understand.
&lt;/p&gt;

&lt;p&gt;
But the cultural cost is just as damaging.
&lt;/p&gt;

&lt;p&gt;
When engineers realise that architectural discussions are not really discussions, they stop engaging honestly.
&lt;/p&gt;

&lt;p&gt;
They learn that asking &quot;why?&quot; will be interpreted as obstruction. They learn that alternatives will be dismissed not because they are weak, but because they do not come with the right pedigree. They learn that the meeting is less about evaluating options and more about being brought along to a decision that has already been made.
&lt;/p&gt;

&lt;p&gt;
Eventually, the room gets quieter.
&lt;/p&gt;

&lt;p&gt;
People stop challenging assumptions. They stop offering alternatives. They stop trying to improve the design because they no longer believe the design is up for debate.
&lt;/p&gt;

&lt;p&gt;
This is how trust in technical leadership erodes.
&lt;/p&gt;

&lt;p&gt;
Not necessarily through one catastrophic decision. Often it happens slowly, through repeated small moments where authority wins over reasoning. A proposal is accepted because of where it came from. A concern is brushed aside because someone has &quot;seen this before&quot;. A legitimate trade-off discussion is short-circuited by a reference to a previous employer.
&lt;/p&gt;

&lt;p&gt;
Over time, engineers start to conclude that technical merit is not what drives decisions.
&lt;/p&gt;

&lt;p&gt;
Once that belief takes hold, it is very hard to undo.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org313802d&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org313802d&quot;&gt;Good Technical Leadership Makes Reasoning Visible&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-org313802d&quot;&gt;
&lt;p&gt;
The best technical leaders I have worked with do not ask to be trusted blindly.
&lt;/p&gt;

&lt;p&gt;
They make their reasoning visible.
&lt;/p&gt;

&lt;p&gt;
They might still draw heavily on prior experience, but they unpack it. They explain what they saw before, why it worked, what conditions made it work, what went wrong, and which parts they believe apply to the current situation.
&lt;/p&gt;

&lt;p&gt;
They say things like:
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
&quot;I&apos;ve used this pattern before, and it worked well when the main problem was cross-team ownership of shared infrastructure. I&apos;m not sure we have that problem yet, so maybe this is premature.&quot;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
Or:
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
&quot;At my last company this approach solved our auditability problem, but it came with a heavy operational cost. If we choose it here, we need to be honest about who will own that cost.&quot;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
That kind of experience is gold.
&lt;/p&gt;

&lt;p&gt;
It does not shut down discussion. It makes discussion better.
&lt;/p&gt;

&lt;p&gt;
A senior engineer should have more context, more scars, and more pattern recognition than a junior engineer. But seniority should improve the quality of the argument, not replace the need for one.
&lt;/p&gt;

&lt;p&gt;
If a junior engineer asks a simple question that exposes a flaw in the design, the right response is not &quot;trust me&quot;. The right response is to take the question seriously.
&lt;/p&gt;

&lt;p&gt;
The healthiest engineering organisations optimise for reasoning, not hierarchy.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org0b4154d&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org0b4154d&quot;&gt;A Better Way to Import Ideas&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-org0b4154d&quot;&gt;
&lt;p&gt;
So how should teams learn from other companies?
&lt;/p&gt;

&lt;p&gt;
Not by copying their architecture wholesale, but by importing their reasoning.
&lt;/p&gt;

&lt;p&gt;
When someone proposes an approach because they have seen it work elsewhere, the discussion should move quickly into questions like:
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;What specific problem did this solve in that environment?&lt;/li&gt;
&lt;li&gt;Which constraints made it the right choice there?&lt;/li&gt;
&lt;li&gt;Do we have those same constraints?&lt;/li&gt;
&lt;li&gt;What capabilities did that organisation have that we do not?&lt;/li&gt;
&lt;li&gt;What operational burden came with it?&lt;/li&gt;
&lt;li&gt;What failure modes did they encounter?&lt;/li&gt;
&lt;li&gt;What alternatives did they reject, and why?&lt;/li&gt;
&lt;li&gt;What would make this the wrong choice for us?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
That last question is particularly important.
&lt;/p&gt;

&lt;p&gt;
A good architectural proposal should be falsifiable. There should be some condition under which the team would say, &quot;Actually, given this information, we should not do this.&quot;
&lt;/p&gt;

&lt;p&gt;
If no such condition exists, you are no longer discussing architecture. You are defending a preference.
&lt;/p&gt;

&lt;p&gt;
This is also why lightweight decision records can be so valuable. Not because every decision needs bureaucratic ceremony, but because writing things down forces clarity. What problem are we solving? What options did we consider? What assumptions are we making? What are we explicitly not solving? What would cause us to revisit the decision?
&lt;/p&gt;

&lt;p&gt;
The act of writing exposes hand-wavy reasoning very quickly.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org56423bd&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org56423bd&quot;&gt;The Detail Is the Design&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-org56423bd&quot;&gt;
&lt;p&gt;
There is a tempting fantasy in software architecture that the big decisions are the architectural decisions and the details are merely implementation.
&lt;/p&gt;

&lt;p&gt;
Choose Kubernetes. Choose Kafka. Choose SPIFFE. Choose event sourcing. Choose microservices. Choose a service mesh.
&lt;/p&gt;

&lt;p&gt;
But in practice, the detail is the design.
&lt;/p&gt;

&lt;p&gt;
Anyone can say &quot;we will use Kafka&quot;. The important questions are about partitioning, ordering guarantees, replay semantics, consumer lag, schema evolution, poison messages, operational ownership, retention, observability, and what happens when downstream systems are broken.
&lt;/p&gt;

&lt;p&gt;
Anyone can say &quot;we will use Kubernetes&quot;. The important questions are about deployment patterns, resource limits, network policies, cluster ownership, secrets management, upgrades, multi-tenancy, observability, and whether the team actually knows how to debug it when the abstraction leaks.
&lt;/p&gt;

&lt;p&gt;
Anyone can say &quot;we will use SPIFFE&quot;. The important questions are about attestation, trust domains, certificate lifecycle, authorisation boundaries, compromise recovery, and operational maturity.
&lt;/p&gt;

&lt;p&gt;
The label is not the architecture.
&lt;/p&gt;

&lt;p&gt;
The architecture is the set of decisions, trade-offs, assumptions, and operational practices that make the label meaningful.
&lt;/p&gt;

&lt;p&gt;
Without those, you are just collecting impressive words.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org8750813&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org8750813&quot;&gt;Final Thoughts&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-org8750813&quot;&gt;
&lt;p&gt;
I am not arguing that teams should ignore what successful companies do. That would be absurd. We should absolutely study them. We should learn from their successes and failures. We should pay attention to the patterns that emerge across mature engineering organisations.
&lt;/p&gt;

&lt;p&gt;
But we need to be careful about what we copy.
&lt;/p&gt;

&lt;p&gt;
Do not copy the diagram without the context. Do not copy the technology without the operating model. Do not copy the vocabulary without the understanding. Do not copy the conclusion without the reasoning.
&lt;/p&gt;

&lt;p&gt;
The value of experience is not that it gives you a list of answers to impose on every new environment.
&lt;/p&gt;

&lt;p&gt;
The value of experience is that it teaches you which questions to ask.
&lt;/p&gt;

&lt;p&gt;
And if your architectural decision cannot survive those questions, it probably was not as mature as it sounded.
&lt;/p&gt;

&lt;p&gt;
&amp;mdash;
&lt;/p&gt;

&lt;p&gt;
Have you worked in teams where previous-company experience was used well, or where it became a substitute for reasoning? How do you keep architecture discussions grounded in context rather than authority?&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</description>
        <pubDate>Thu, 02 Jul 2026 06:00:00 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2026/07/copy-reasoning-not-architecture/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2026/07/copy-reasoning-not-architecture/</guid>
        
        
        <category>tech</category>
        
        <category>architecture</category>
        
        <category>leadership</category>
        
        <category>softwaredev</category>
        
      </item>
    
      <item>
        <title>Ocado&apos;s Checkout Flow Feels Like Git: And That&apos;s a Problem</title>
        <description>&lt;div &gt;
  &lt;p&gt;&lt;img style=&quot;margin: auto;&quot; src=&quot;/assets/ogitdo.png&quot; width=&quot;700&quot; alt=&quot;Humourous image mixing Ocado and git checkout&quot;&gt;&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;
I&apos;ve been a loyal Ocado customer for years. Their product selection is excellent, their delivery slots are reliable, and their customer service has always been top-notch. Which is why it&apos;s so frustrating that one fundamental aspect of their user experience continues to trip me up, week after week.
&lt;/p&gt;

&lt;p&gt;
Their checkout flow feels exactly like using Git.
&lt;/p&gt;

&lt;p&gt;
And not in a good way.
&lt;/p&gt;
&lt;div id=&quot;outline-container-orgc54302c&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgc54302c&quot;&gt;The Git Analogy Nobody Asked For&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-orgc54302c&quot;&gt;
&lt;p&gt;
Here&apos;s how Ocado works: you have a scheduled delivery order sitting in your account - let&apos;s say for Thursday. You realize you forgot to add milk. So you:
&lt;/p&gt;

&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;Click &quot;Edit Order&quot; (&lt;code&gt;git checkout -b edit-order&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Add the milk to your basket&lt;/li&gt;
&lt;li&gt;Click &quot;Check Out&quot; to save those changes (&lt;code&gt;git commit &amp;amp;&amp;amp; git merge&lt;/code&gt;)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
If you don&apos;t complete step three, your changes are lost. You&apos;ve created a dirty working tree that never made it back to main.
&lt;/p&gt;

&lt;p&gt;
The first time I encountered this, I stared at my screen trying to make sense of it. I wasn&apos;t trying to &lt;i&gt;edit&lt;/i&gt; my order - I just wanted to add milk. Why does adding a single item require me to enter an &quot;edit mode&quot; and then explicitly &quot;check out&quot; to persist the change?
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org8faa7c8&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org8faa7c8&quot;&gt;When Implementation Details Leak Into UX&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-org8faa7c8&quot;&gt;
&lt;p&gt;
The term &quot;check out&quot; has a specific meaning in the physical world: it&apos;s the moment you pay and complete your transaction. You walk to the checkout counter, hand over your money (or card, or phone), and the transaction is done. The etymology even comes from writing a &lt;i&gt;check&lt;/i&gt; or &lt;i&gt;cheque&lt;/i&gt; as payment.
&lt;/p&gt;

&lt;p&gt;
Amazon&apos;s model respects this mental model: you select items, you check out (i.e., you pay), and they give you a delivery date. Transaction complete. The word &quot;checkout&quot; correctly describes the moment of payment and commitment.
&lt;/p&gt;

&lt;p&gt;
But Ocado has scheduled deliveries. You&apos;re not paying &lt;i&gt;now&lt;/i&gt; for delivery &lt;i&gt;now&lt;/i&gt; - you&apos;re managing a future order. So why are they using retail vocabulary for what is fundamentally a shopping-list editing experience?
&lt;/p&gt;

&lt;p&gt;
The answer, I suspect, is that this UX was designed to match the system&apos;s internal state machine rather than the user&apos;s mental model. Somewhere in Ocado&apos;s architecture, there&apos;s probably an &quot;order edit session&quot; that needs to be committed. The engineers - or whoever designed this flow - mapped that technical constraint directly onto the UI.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgc11aed9&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgc11aed9&quot;&gt;The Uncommitted Changes Problem&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-orgc11aed9&quot;&gt;
&lt;p&gt;
Here&apos;s where it gets truly bizarre: when you&apos;ve added products to your order but haven&apos;t &quot;checked out,&quot; there&apos;s &lt;i&gt;zero visual indication&lt;/i&gt; that your basket has uncommitted changes.
&lt;/p&gt;

&lt;p&gt;
No banner. No warning. No dirty state indicator.
&lt;/p&gt;

&lt;p&gt;
So every time I visit the Ocado app, I have to manually check whether I&apos;m in the middle of an edit session. Did I add those tomatoes and forget to check out? Or did I already check out last time? The only way to know is to click through the checkout flow &quot;just in case.&quot;
&lt;/p&gt;

&lt;p&gt;
This is the UX equivalent of running &lt;code&gt;git status&lt;/code&gt; before every operation because you can&apos;t remember if your working directory is clean.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org6b5694c&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org6b5694c&quot;&gt;A Better Model: Think Like a Human, Not a Database&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-org6b5694c&quot;&gt;
&lt;p&gt;
Here&apos;s the thing: this problem is entirely solvable. You don&apos;t need to force users to explicitly &quot;commit&quot; changes to their future orders. The UX can - and should - match how people actually think about grocery shopping.
&lt;/p&gt;

&lt;p&gt;
Imagine this alternative:
&lt;/p&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org9fcc8dd&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org9fcc8dd&quot;&gt;No &quot;Edit Mode&quot; for Existing Orders&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-org9fcc8dd&quot;&gt;
&lt;p&gt;
There&apos;s no special &quot;order editing session&quot; unless you&apos;re creating an entirely new order from scratch. Orders are just persistent lists that you can modify at any time.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orga3173c4&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orga3173c4&quot;&gt;Direct Product Actions&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-orga3173c4&quot;&gt;
&lt;p&gt;
When you&apos;re browsing products:
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&quot;Add to next order&quot; - instantly adds the item to your soonest scheduled delivery&lt;/li&gt;
&lt;li&gt;&quot;Add to other order&quot; - shows a dropdown or modal: &quot;Add to order on [date]&quot;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
No basket. No checkout. Just direct manipulation of your order list.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org035277f&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org035277f&quot;&gt;Inline Removal and Quantity Changes&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-org035277f&quot;&gt;
&lt;p&gt;
When you&apos;re viewing an order:
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Each product has a delete button&lt;/li&gt;
&lt;li&gt;Each product has +/- buttons to adjust quantity&lt;/li&gt;
&lt;li&gt;Changes save immediately (or with a brief debounce for UX smoothness)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
No separate &quot;editing state.&quot; No &quot;check out to confirm.&quot; Just change your order, and the change persists.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org371150b&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org371150b&quot;&gt;Clear Visual Feedback&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-org371150b&quot;&gt;
&lt;p&gt;
If there&apos;s any lag between user action and server persistence (there will be - networks exist), show an inline loading state or optimistic update with a subtle sync indicator.
&lt;/p&gt;

&lt;p&gt;
No ambiguity. No &quot;did I check out or didn&apos;t I?&quot; uncertainty.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgcba3c6d&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgcba3c6d&quot;&gt;Why This Matters&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-orgcba3c6d&quot;&gt;
&lt;p&gt;
This isn&apos;t just pedantic nitpicking about word choice or workflow details. I&apos;m raising this &lt;i&gt;because&lt;/i&gt; I&apos;m a loyal customer who wants Ocado to succeed. But I&apos;ve been burned by this UX pattern too many times:
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;I&apos;ve forgotten to &quot;check out&quot; and received products I no longer wanted&lt;/li&gt;
&lt;li&gt;I&apos;ve assumed changes were saved when they weren&apos;t, only to discover missing items after the order arrived&lt;/li&gt;
&lt;li&gt;I&apos;ve wasted time clicking through the checkout flow &quot;just in case&quot; because there&apos;s no visual indicator&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
And I&apos;m certain I&apos;m not alone. If this friction is annoying me - someone who understands state management and version control - imagine how confusing it must be for less technical users.
&lt;/p&gt;

&lt;p&gt;
In the competitive world of online grocery delivery, this kind of friction kills retention.
&lt;/p&gt;

&lt;p&gt;
Ocado isn&apos;t alone in this - plenty of systems expose their internal implementation through their UX. But in an era where competitors like Amazon Fresh, Deliveroo, and others are iterating rapidly on user experience, clinging to legacy UX patterns is a vulnerability.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgc8e5070&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgc8e5070&quot;&gt;The Revolutionary Opportunity&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-orgc8e5070&quot;&gt;
&lt;p&gt;
I doubt Ocado will ever be bold enough to overhaul this flow. It would require rethinking not just the UI, but likely significant portions of their order management system. There are probably legacy constraints, data models, and business rules that make this feel impossible to change.
&lt;/p&gt;

&lt;p&gt;
But here&apos;s the uncomfortable truth: the first grocery retailer to &lt;i&gt;truly&lt;/i&gt; embrace online shopping as a native medium - rather than translating physical retail concepts into digital space - will eat everyone else&apos;s lunch.
&lt;/p&gt;

&lt;p&gt;
The company that designs their UX around how humans think about grocery shopping, rather than how databases manage order state, will win.
&lt;/p&gt;

&lt;p&gt;
And when that happens, legacy players who couldn&apos;t see past their own implementation details will wonder why customers left.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org9a58b13&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org9a58b13&quot;&gt;Final Thoughts&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-org9a58b13&quot;&gt;
&lt;p&gt;
Software engineers love elegant abstractions and clean state management. Version control systems like Git are beautiful pieces of engineering that solve genuinely hard problems.
&lt;/p&gt;

&lt;p&gt;
But users don&apos;t care about your state machine. They don&apos;t want to think about edit modes, uncommitted changes, or explicit checkout flows when they&apos;re trying to add milk to their Thursday delivery.
&lt;/p&gt;

&lt;p&gt;
The best UX is invisible. It maps perfectly to the user&apos;s mental model, anticipating their needs and removing friction at every step.
&lt;/p&gt;

&lt;p&gt;
Ocado&apos;s checkout flow is the opposite: visible, confusing, and optimized for the system instead of the human.
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;*&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
Have you encountered other examples of implementation details leaking into user experience? What grocery delivery services have you found to have the best UX? I&apos;d love to hear your experiences.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</description>
        <pubDate>Wed, 01 Oct 2025 10:00:00 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2025/10/ocado-git-checkout/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2025/10/ocado-git-checkout/</guid>
        
        
        <category>tech</category>
        
        <category>ux</category>
        
        <category>design</category>
        
        <category>product</category>
        
      </item>
    
      <item>
        <title>You shouldn&apos;t use Rust (probably)</title>
        <description>&lt;div &gt;
  &lt;p&gt;&lt;img style=&quot;margin: auto;&quot; src=&quot;/assets/rust.png&quot; width=&quot;700&quot; alt=&quot;Image showing the Rust logo&quot;&gt;&lt;/p&gt;
&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;
&quot;We&apos;re going to build everything in Rust for performance,&quot; the engineering lead announced confidently. Six months later, they were still debugging borrow checker errors while their competitors had shipped three major features using boring old Java.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
I&apos;ve been thinking a lot lately about technology choices and their unintended consequences. Specifically, how the allure of a &quot;better&quot; programming language can lead teams down rabbit holes that have nothing to do with the problems they&apos;re actually trying to solve.
&lt;/p&gt;
&lt;div id=&quot;outline-container-org4ce13a1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org4ce13a1&quot;&gt;The Rust Trap&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-org4ce13a1&quot;&gt;
&lt;p&gt;
Don&apos;t get me wrong - Rust is an incredible language. Memory safety without garbage collection, fearless concurrency, blazing fast performance. It&apos;s genuinely revolutionary for systems programming, operating systems, embedded devices, and performance-critical applications.
&lt;/p&gt;

&lt;p&gt;
But here&apos;s the thing: most of us aren&apos;t building operating systems.
&lt;/p&gt;

&lt;p&gt;
I recently worked with a company that had decided to use Rust for &lt;i&gt;everything&lt;/i&gt;. Every microservice, every API, every background worker - all Rust, all the time. The reasoning was simple: &quot;We want the best performance possible.&quot;
&lt;/p&gt;

&lt;p&gt;
The reality was more complex. This wasn&apos;t a high-frequency trading platform or a real-time graphics engine. It was a fairly standard SaaS application - user management, billing, some data processing, the usual suspects. The kind of system that thousands of companies have built successfully with Java, C#, Python, or Node.js.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org47e02d2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org47e02d2&quot;&gt;When Performance Isn&apos;t the Problem&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-org47e02d2&quot;&gt;
&lt;p&gt;
Here&apos;s what I&apos;ve learned from working on distributed systems: performance bottlenecks are rarely where you think they are, and they&apos;re almost never solved by switching programming languages.
&lt;/p&gt;

&lt;p&gt;
In a typical SaaS architecture, you&apos;re usually bottlenecked by:
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Database queries that could use better indexing&lt;/li&gt;
&lt;li&gt;Network latency between services&lt;/li&gt;
&lt;li&gt;Third-party API calls&lt;/li&gt;
&lt;li&gt;I/O operations waiting for file systems or external services&lt;/li&gt;
&lt;li&gt;Poorly designed algorithms that make unnecessary work&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
CPU-bound performance - the kind where Rust&apos;s zero-cost abstractions actually matter - is surprisingly rare in business applications. Most microservices spend their time waiting: waiting for databases, waiting for HTTP responses, waiting for file uploads to complete.
&lt;/p&gt;

&lt;p&gt;
In these scenarios, the difference between Rust&apos;s blazing speed and Python&apos;s &quot;sluggish&quot; performance is completely invisible. Whether your authentication service responds in 2ms or 5ms doesn&apos;t matter when the database query takes 50ms.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgc0aab8f&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgc0aab8f&quot;&gt;The Hidden Costs of Complexity&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-orgc0aab8f&quot;&gt;
&lt;p&gt;
But the performance story is just the beginning. The real issue with choosing Rust for typical business applications is the complexity tax you pay every single day.
&lt;/p&gt;

&lt;p&gt;
Rust has a notoriously steep learning curve. The borrow checker, while brilliant for memory safety, requires a fundamentally different way of thinking about data ownership. Experienced developers can spend weeks just learning how to make the compiler happy, let alone writing idiomatic, maintainable code.
&lt;/p&gt;

&lt;p&gt;
This means:
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Slower onboarding for new team members&lt;/li&gt;
&lt;li&gt;More time spent fighting the language instead of solving business problems&lt;/li&gt;
&lt;li&gt;Fewer available developers in the hiring pool&lt;/li&gt;
&lt;li&gt;Increased debugging complexity when things go wrong&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
For a typical SaaS company, these costs far outweigh the theoretical performance benefits you&apos;ll never actually need.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org42c0002&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org42c0002&quot;&gt;The Reinvention Problem&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-org42c0002&quot;&gt;
&lt;p&gt;
Here&apos;s where things get really interesting, and where I think Rust&apos;s appeal can become actively harmful to productivity.
&lt;/p&gt;

&lt;p&gt;
The team I mentioned earlier didn&apos;t just choose Rust - they ended up building their own worker queue library. From scratch. Complete with retry logic, dead letter queues, the works.
&lt;/p&gt;

&lt;p&gt;
In the Python world, this would have been unthinkable. You&apos;d install Celery, write a few configuration lines, and move on with your life. The ecosystem provides battle-tested solutions for common problems.
&lt;/p&gt;

&lt;p&gt;
But something about Rust seems to attract engineers who &lt;i&gt;enjoy&lt;/i&gt; building foundational infrastructure. Maybe it&apos;s the systems programming heritage, maybe it&apos;s the type of developer who&apos;s drawn to Rust in the first place. Whatever the reason, I&apos;ve noticed a pattern: Rust teams tend to reinvent wheels that already exist in more mature ecosystems.
&lt;/p&gt;

&lt;p&gt;
This isn&apos;t necessarily malicious or even conscious. Building a worker library is an interesting technical challenge. It involves concurrency, error handling, persistence - all the kinds of problems that Rust handles elegantly. It&apos;s easy to convince yourself that your custom solution will be &quot;better&quot; than the existing alternatives.
&lt;/p&gt;

&lt;p&gt;
But here&apos;s the thing: you&apos;re not in the worker library business. You&apos;re in the business of building whatever SaaS product your company actually sells. Every hour spent reinventing infrastructure is an hour not spent shipping features that customers will pay for.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgddc84fc&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgddc84fc&quot;&gt;The Ecosystem Maturity Gap&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-orgddc84fc&quot;&gt;
&lt;p&gt;
This brings up another crucial point: ecosystem maturity matters enormously for developer productivity.
&lt;/p&gt;

&lt;p&gt;
Java has decades of libraries, frameworks, and tooling. Need to integrate with Stripe? There&apos;s a well-maintained SDK. Want to process CSV files? Pick from dozens of battle-tested libraries. Need to implement OAuth? Spring Security has you covered.
&lt;/p&gt;

&lt;p&gt;
C# has similarly rich ecosystem support, with NuGet packages for virtually every common use case and excellent tooling throughout.
&lt;/p&gt;

&lt;p&gt;
Python might be &quot;slow,&quot; but Django will have you building complete web applications in hours, not weeks. The standard library is comprehensive, and PyPI has packages for everything under the sun.
&lt;/p&gt;

&lt;p&gt;
Rust&apos;s ecosystem, while growing rapidly, simply isn&apos;t there yet for typical business application development. You&apos;ll spend time finding, evaluating, or building basic functionality that would be trivial in more established languages.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgcb13ccf&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgcb13ccf&quot;&gt;When Rust Makes Sense&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-orgcb13ccf&quot;&gt;
&lt;p&gt;
I don&apos;t want this to sound like a complete condemnation of Rust. There are absolutely scenarios where it&apos;s the right choice:
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Performance-critical systems where every millisecond matters&lt;/li&gt;
&lt;li&gt;Systems programming where memory safety is crucial&lt;/li&gt;
&lt;li&gt;Embedded systems with resource constraints&lt;/li&gt;
&lt;li&gt;High-throughput, CPU-intensive workloads&lt;/li&gt;
&lt;li&gt;Infrastructure that needs to handle massive scale efficiently&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
But here&apos;s the key: these are &lt;i&gt;specific&lt;/i&gt; use cases with &lt;i&gt;specific&lt;/i&gt; requirements. If you can&apos;t articulate exactly why you need Rust&apos;s particular advantages, you probably don&apos;t.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org40b94ad&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org40b94ad&quot;&gt;The Architecture Principle&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-org40b94ad&quot;&gt;
&lt;p&gt;
The fundamental insight here is that architecture matters far more than language choice for most applications.
&lt;/p&gt;

&lt;p&gt;
A well-designed system with proper caching, efficient database queries, and smart service boundaries will outperform a poorly designed system every time, regardless of whether it&apos;s written in Rust or Ruby.
&lt;/p&gt;

&lt;p&gt;
Focus on:
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Choosing the right database for your use case&lt;/li&gt;
&lt;li&gt;Implementing effective caching strategies&lt;/li&gt;
&lt;li&gt;Designing services with clear responsibilities&lt;/li&gt;
&lt;li&gt;Optimizing the queries that actually matter&lt;/li&gt;
&lt;li&gt;Using CDNs and geographic distribution appropriately&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
These architectural decisions will have 100x more impact on your system&apos;s performance than switching from Java to Rust.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org415e2d6&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org415e2d6&quot;&gt;The Boring Technology Principle&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-org415e2d6&quot;&gt;
&lt;p&gt;
There&apos;s wisdom in Dan McKinley&apos;s &quot;&lt;a href=&quot;https://mcfunley.com/choose-boring-technology&quot;&gt;Choose Boring Technology&lt;/a&gt;&quot; principle. Your business probably has a limited budget for innovation and complexity. Spend it on the parts that actually differentiate your product, not on the programming language choice.
&lt;/p&gt;

&lt;p&gt;
If your team already knows Java well, building your SaaS in Java lets you focus on solving customer problems instead of learning new syntax. If your company has Python expertise, Django will get you to market faster than any amount of Rust optimization.
&lt;/p&gt;

&lt;p&gt;
Boring choices free up mental bandwidth for the interesting challenges that actually matter to your business.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org331da66&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org331da66&quot;&gt;The Real Performance Questions&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-org331da66&quot;&gt;
&lt;p&gt;
Instead of asking &quot;Should we use Rust for performance?&quot;, ask:
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;What are our actual performance requirements?&lt;/li&gt;
&lt;li&gt;Where are our current bottlenecks?&lt;/li&gt;
&lt;li&gt;What would happen if our API took 100ms instead of 10ms?&lt;/li&gt;
&lt;li&gt;Are we CPU-bound or I/O-bound?&lt;/li&gt;
&lt;li&gt;How much complexity are we willing to trade for theoretical performance gains?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Most of the time, the honest answers to these questions point away from Rust and toward simpler, more established solutions.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orga011523&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orga011523&quot;&gt;Final Thoughts&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-orga011523&quot;&gt;
&lt;p&gt;
I&apos;m not anti-Rust. It&apos;s a remarkable achievement in language design, and I genuinely admire what the community has built. But like any powerful tool, it&apos;s frequently misapplied.
&lt;/p&gt;

&lt;p&gt;
The next time someone suggests using Rust for your team&apos;s next project, push back gently. Ask what specific problem it&apos;s solving that can&apos;t be solved more simply with existing tools. Ask whether the team has actually profiled the current system to identify performance bottlenecks. Ask whether the added complexity is worth the theoretical benefits.
&lt;/p&gt;

&lt;p&gt;
Most importantly, remember that the goal isn&apos;t to use the coolest technology - it&apos;s to build software that solves real problems for real people. Sometimes that means choosing the boring, battle-tested option over the shiny new thing.
&lt;/p&gt;

&lt;p&gt;
Your customers don&apos;t care what programming language you used. They care whether your software works, whether it&apos;s reliable, and whether you can ship new features quickly when they need them.
&lt;/p&gt;

&lt;p&gt;
Choose accordingly.
&lt;/p&gt;

&lt;p&gt;
&lt;i&gt;Have you seen teams get distracted by technology choices that didn&apos;t match their actual needs? How do you balance innovation with pragmatism in your technical decisions?&lt;/i&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</description>
        <pubDate>Tue, 08 Jul 2025 19:20:00 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2025/07/you-shouldnt-use-rust-probably/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2025/07/you-shouldnt-use-rust-probably/</guid>
        
        
        <category>tech</category>
        
        <category>rust</category>
        
        <category>architecture</category>
        
        <category>performance</category>
        
      </item>
    
      <item>
        <title>The Planning Paradox: Why Engineers Hate Process But Teams Need It</title>
        <description>&lt;p&gt;
You&apos;re in a sprint planning meeting, and someone asks the dreaded question: &quot;So, do we think we can deliver the user dashboard feature by the end of next month?&quot; The room falls silent. Eyes dart around. Someone eventually mumbles, &quot;Yeah, probably?&quot; And that&apos;s how your team commits to a deadline based on nothing more than collective optimism.
&lt;/p&gt;

&lt;p&gt;
If this sounds familiar, you&apos;re not alone. I&apos;ve worked across many different software engineering teams, and I&apos;ve seen the full spectrum of planning approaches - from rigorous methodologies that actually work to complete chaos masquerading as &quot;agile flexibility.&quot;
&lt;/p&gt;
&lt;div id=&quot;outline-container-org32d42b6&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org32d42b6&quot;&gt;The Great Planning Divide&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-org32d42b6&quot;&gt;
&lt;p&gt;
In my experience, most teams fall into one of two camps when it comes to software planning, each with passionate advocates who swear their approach is superior.
&lt;/p&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org1fb231b&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org1fb231b&quot;&gt;The Kanban Purists&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-org1fb231b&quot;&gt;
&lt;p&gt;
Some people are absolutely convinced that Kanban is the way forward. The philosophy is elegantly simple: break work into the smallest workable pieces, limit how many pieces can be in progress at once (your WIP limit), and measure what matters - throughput, cycle time, lead time.
&lt;/p&gt;

&lt;p&gt;
WIP limits are Kanban&apos;s secret sauce: by capping simultaneous work, they expose bottlenecks early and keep flow predictable
&lt;/p&gt;

&lt;p&gt;
Once you have these metrics, planning becomes mathematical rather than mystical.
&lt;/p&gt;

&lt;p&gt;
The beauty of this approach is its rejection of artificial constraints. No sprints, no arbitrary two-week windows, no forcing N story points into predetermined timeboxes. Instead, you ask: &quot;This feature consists of 12 stories, we complete 3 stories per week on average, therefore this feature will take about 4 weeks.&quot; Clean, data-driven, predictable.
&lt;/p&gt;

&lt;p&gt;
I&apos;ve seen this work brilliantly when implemented properly. Teams develop a steady rhythm, stakeholders get reliable delivery estimates, and there&apos;s no artificial pressure to fit work into sprint boundaries that might not make sense for the actual work being done.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org97c035d&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org97c035d&quot;&gt;The Scrum Believers&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-org97c035d&quot;&gt;
&lt;p&gt;
On the other side are teams that swear by Scrum&apos;s more structured approach. Here, you still break work into stories, but you also size them - whether through t-shirt sizing (S, M, L, XL) or Fibonacci sequences (1, 2, 3, 5, 8, 13&amp;#x2026;). The team measures velocity - how many points they deliver per sprint - and uses this to inform capacity planning.
&lt;/p&gt;

&lt;p&gt;
The sprint becomes a commitment mechanism. At the beginning of each sprint, the team collectively decides which work to pull in based on their historical velocity. If they typically deliver 20 points per sprint, they&apos;ll aim to commit to roughly 20 points worth of stories.
&lt;/p&gt;

&lt;p&gt;
The burndown chart becomes your early warning system. In a perfect world, it&apos;s a linear line trending downward as work gets completed. When reality deviates from this ideal, you know something&apos;s going wrong before the sprint ends.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org1775a58&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org1775a58&quot;&gt;The Agile Confusion&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-org1775a58&quot;&gt;
&lt;p&gt;
Here&apos;s where things get interesting, and where I see a fundamental misunderstanding that plagues many teams. Lots of people think that if they&apos;re doing Scrum or Kanban, they&apos;re doing Agile. But this is a common misconception.
&lt;/p&gt;

&lt;p&gt;
Agile is the Agile Manifesto. It&apos;s this:
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Individuals and interactions over processes and tools&lt;/li&gt;
&lt;li&gt;Working software over comprehensive documentation&lt;/li&gt;
&lt;li&gt;Customer collaboration over contract negotiation&lt;/li&gt;
&lt;li&gt;Responding to change over following a plan&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
It&apos;s important not to conflate the two. The manifesto is your guiding philosophy; Scrum and Kanban are just tools that might help you embody those principles.
&lt;/p&gt;

&lt;p&gt;
People should actually read the Agile Manifesto and use it as their guiding line. From there, if they prefer Scrum or Kanban, that&apos;s fine - pick what works for you! But pick with intention and purpose. Understand what you&apos;re choosing and why, and don&apos;t just pick it &quot;because it&apos;s Agile.&quot; Use these methodologies as tools to help you answer questions about your team&apos;s work, not as rigid frameworks you must follow because someone told you they&apos;re &quot;Agile.&quot;
&lt;/p&gt;

&lt;p&gt;
Both Scrum and Kanban approaches, when done thoughtfully, share a crucial insight: you need some systematic way to answer fundamental questions that stakeholders will inevitably ask.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgc20403e&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgc20403e&quot;&gt;The Questions That Matter&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-orgc20403e&quot;&gt;
&lt;p&gt;
Whether you choose Kanban, Scrum, or some hybrid, your planning process needs to help you answer:
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Will we deliver feature X on time?&lt;/li&gt;
&lt;li&gt;Are we generally on track? If not, what happened?&lt;/li&gt;
&lt;li&gt;Do we need to cut scope to meet our commitment? Which work should we deprioritise?&lt;/li&gt;
&lt;li&gt;How can we learn from this to improve future estimates?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
What absolutely doesn&apos;t work is having&amp;#x2026; nothing. No process, no measurement, no systematic approach to understanding your team&apos;s capacity or delivery patterns.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org8012696&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org8012696&quot;&gt;When Good Intentions Meet Poor Execution&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-org8012696&quot;&gt;
&lt;p&gt;
Planning is everybody&apos;s problem, but somebody must own the mechanics. Whether that somebody is an engineering manager, a rotating scrum-master, or a senior IC, the key is explicit accountability: one name against the calendar invite, one person responsible for keeping the data honest and the conversations happening.
&lt;/p&gt;

&lt;p&gt;
I&apos;ve seen three models work:
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Manager-led (manager curates the board, engineers supply estimates)&lt;/li&gt;

&lt;li&gt;Engineer-facilitated (an IC wears the scrum-master hat, manager clears roadblocks)&lt;/li&gt;

&lt;li&gt;Shared ownership (rotating facilitator, collective commitment to metrics)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Pick one and write it down; ambiguity is where plans go to die.
&lt;/p&gt;

&lt;p&gt;
What I&apos;ve learned is that there&apos;s no universally &quot;right&quot; approach - but there are definitely wrong ones.
&lt;/p&gt;

&lt;p&gt;
I experienced this firsthand on a team that was sizing stories in time estimates but putting zero effort into understanding capacity. We knew a story would take &quot;3 days,&quot; but we had no systematic way of knowing who would work on it or whether we actually had 3 days of availability.
&lt;/p&gt;

&lt;p&gt;
Frustrated by this gap, I decided to try something that had worked at a previous company. I built a rudimentary Gantt chart in Excel: engineer names down the left side, weeks across the columns, and features stretching across the timeline based on their estimated duration.
&lt;/p&gt;

&lt;p&gt;
The pushback was immediate and telling. &quot;John can&apos;t work on the login feature!&quot; people protested, completely missing the point. Exasperated, I changed the names to &quot;Engineer A,&quot; &quot;Engineer B,&quot; etc. This wasn&apos;t about specific assignments - it was about understanding whether we had the capacity to deliver what we were committing to.
&lt;/p&gt;

&lt;p&gt;
I sent the updated chart around, explicitly tagging our engineering manager, and received&amp;#x2026; crickets. We continued with the same &quot;finger in the air&quot; approach to sprint planning, picking up whatever &quot;felt like a good amount of work.&quot;
&lt;/p&gt;

&lt;p&gt;
The outcome was predictable: inconsistent delivery, missed commitments, and frustrated stakeholders who couldn&apos;t get reliable answers about when things would be done.
&lt;/p&gt;

&lt;p&gt;
That absence of clear ownership eventually triggered a change in leadership - a quiet but powerful reminder that planning gaps carry real consequences.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgd276a5d&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgd276a5d&quot;&gt;The Most Predictable Team I Ever Worked On&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-orgd276a5d&quot;&gt;
&lt;p&gt;
In contrast, the most predictable and successful team I&apos;ve been part of had a manager who, in collaboration with an engineer wearing the scrum master hat, took planning seriously. They reached out to feature owners for sizing, maintained historical velocity data, and used it to make realistic commitments about what could be delivered when.
&lt;/p&gt;

&lt;p&gt;
This wasn&apos;t bureaucracy for its own sake - it was systematic thinking applied to a complex problem. The result was a team that consistently hit its commitments, stakeholders who trusted our delivery estimates, and engineers who had clear expectations about scope and timeline.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgcd55c1b&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgcd55c1b&quot;&gt;The Time Expansion Problem&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-orgcd55c1b&quot;&gt;
&lt;p&gt;
There&apos;s a principle from &lt;i&gt;Peopleware&lt;/i&gt; (a book I reference frequently and highly recommend) that work expands to fill the time allocated to it. This makes a compelling case for setting sensible timeframes for feature delivery.
&lt;/p&gt;

&lt;p&gt;
Without boundaries, how do you know when you&apos;re done? How much time should you spend polishing that component? When is &quot;good enough&quot; actually good enough? Setting explicit timeframes - even if they&apos;re occasionally wrong - creates healthy constraints that prevent endless scope creep and perfectionism.
&lt;/p&gt;

&lt;p&gt;
When estimates turn out to be wrong due to genuine unknowns, that&apos;s valuable learning. But setting no bounds at all removes any pressure to work efficiently or make trade-off decisions.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org22ea2ee&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org22ea2ee&quot;&gt;The Uncertainty Principle&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-org22ea2ee&quot;&gt;
&lt;p&gt;
This brings us to one of the trickier aspects of software planning: dealing with uncertainty. I&apos;ve observed that larger stories tend to have exponentially more uncertainty, which is part of why Fibonacci sizing makes intuitive sense.
&lt;/p&gt;

&lt;p&gt;
The difference between a 1-point story and a 3-point story is relatively small and predictable. But a 21-point story compared to a 13-point story? That could mean the difference between 3 months and 5 months, because larger work has more opportunities for unexpected complexity to emerge.
&lt;/p&gt;

&lt;p&gt;
Risk factors compound this uncertainty:
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;b&gt;Familiarity&lt;/b&gt;&lt;/b&gt;: Work similar to what you&apos;ve done before is lower risk&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;b&gt;Technology&lt;/b&gt;&lt;/b&gt;: New frameworks or tools introduce unknowns&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;b&gt;Dependencies&lt;/b&gt;&lt;/b&gt;: Heavy reliance on other teams multiplies complexity&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;b&gt;Domain knowledge&lt;/b&gt;&lt;/b&gt;: Working in unfamiliar business areas slows progress&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Good planning processes account for these risk factors in their sizing and timeline estimates.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org9d50d22&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org9d50d22&quot;&gt;The Engineer&apos;s Dilemma&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-org9d50d22&quot;&gt;
&lt;p&gt;
Here&apos;s the uncomfortable truth: many engineers don&apos;t want to care about process. They&apos;d rather focus on the actual work - writing code, solving technical problems, building features. Process feels like overhead, bureaucracy, a distraction from &quot;real&quot; work.
&lt;/p&gt;

&lt;p&gt;
I understand this perspective, but I&apos;ve come to believe it&apos;s shortsighted. Process exists to answer important questions that stakeholders need answered. Without it, teams can&apos;t provide confidence about delivery timelines, can&apos;t identify problems early, and can&apos;t learn systematically from their experiences.
&lt;/p&gt;

&lt;p&gt;
The absence of process doesn&apos;t eliminate the need for planning - it just makes planning invisible and unreliable. Stakeholders still need to know when features will be ready. Product managers still need to coordinate releases. Sales teams still need to make commitments to customers.
&lt;/p&gt;

&lt;p&gt;
When engineering teams refuse to engage with planning systematically, someone else ends up making promises based on even less information. That&apos;s how you end up with impossible deadlines imposed from above rather than realistic commitments made collaboratively.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org05a967a&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org05a967a&quot;&gt;What Good Looks Like&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-org05a967a&quot;&gt;
&lt;p&gt;
Software planning is undeniably complex. There are no perfect methodologies, no silver bullets that eliminate uncertainty entirely. But that complexity is exactly why good managers don&apos;t shy away from it.
&lt;/p&gt;

&lt;p&gt;
The best technical leaders I&apos;ve worked with tackle planning head-on. They experiment with different approaches, measure what works, and iterate until they find something that serves their team and stakeholders well. They never let teams operate without any systematic approach to understanding capacity and delivery patterns.
&lt;/p&gt;

&lt;p&gt;
This doesn&apos;t mean drowning teams in process for process&apos;s sake. It means being thoughtful about which processes serve real needs and being disciplined about maintaining them even when they&apos;re occasionally inconvenient.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org85340c9&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org85340c9&quot;&gt;The Path Forward&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-org85340c9&quot;&gt;
&lt;p&gt;
If you&apos;re on a team struggling with planning (or avoiding it entirely), consider starting small:
&lt;/p&gt;

&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;b&gt;Pick one metric&lt;/b&gt;&lt;/b&gt;: Whether it&apos;s story throughput, sprint velocity, or cycle time, start measuring something consistently&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;b&gt;Set explicit timeframes&lt;/b&gt;&lt;/b&gt;: Even rough estimates create helpful constraints and learning opportunities&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;b&gt;Review and learn&lt;/b&gt;&lt;/b&gt;: When estimates are wrong, spend time understanding why&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;b&gt;Communicate transparently&lt;/b&gt;&lt;/b&gt;: Share what you know and what you don&apos;t with stakeholders&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
The goal isn&apos;t perfect prediction - it&apos;s systematic improvement and reliable communication about what your team can deliver.
&lt;/p&gt;

&lt;p&gt;
Software planning will always involve uncertainty, but that&apos;s no excuse for avoiding it entirely. The teams that embrace this complexity and work systematically to manage it are the ones that consistently deliver value and build trust with their stakeholders.
&lt;/p&gt;

&lt;p&gt;
What planning approaches have worked (or failed spectacularly) in your experience? How does your team balance process with flexibility?&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</description>
        <pubDate>Wed, 02 Jul 2025 12:00:00 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2025/07/planning-paradox-engineers-process/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2025/07/planning-paradox-engineers-process/</guid>
        
        
        <category>tech</category>
        
        <category>product</category>
        
        <category>planning</category>
        
        <category>software-development</category>
        
      </item>
    
      <item>
        <title>The Transformational Power of Great Technical Leadership</title>
        <description>&lt;p&gt;
Picture this: It&apos;s sprint review day, and your manager is walking through the demo with a customer. When they ask a detailed question about the API&apos;s rate limiting strategy, your manager doesn&apos;t just punt to the team - they dive into the technical details, explain the trade-offs you considered, and seamlessly connect it back to the customer&apos;s business needs. The customer nods, impressed not just by the feature but by the depth of understanding behind it.
&lt;/p&gt;

&lt;p&gt;
Now contrast that with this: You&apos;re in a standup where someone mentions a critical bug that&apos;s been plaguing production for weeks. The response? &quot;Well, these things happen. Let&apos;s just work around it for now.&quot; No urgency, no technical curiosity, no systematic approach to preventing similar issues.
&lt;/p&gt;

&lt;p&gt;
I&apos;ve lived in both worlds, and the difference is transformational.
&lt;/p&gt;
&lt;div id=&quot;outline-container-orgd089ede&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgd089ede&quot;&gt;The Anatomy of Great Technical Leadership&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-orgd089ede&quot;&gt;
&lt;p&gt;
The best technical manager I ever worked with was something of a unicorn. He wore three hats seamlessly: people manager, product manager, and technical architect. What made him exceptional wasn&apos;t just that he could context-switch between these roles, but that his technical depth informed everything else he did.
&lt;/p&gt;

&lt;p&gt;
This manager understood our software inside and out. When we hit architectural roadblocks, he could quickly assess whether we needed to refactor or if there was a cleverer path forward. When customers requested features, he had an intuitive sense of what would be hard versus easy, allowing him to push back on scope creep or suggest alternative approaches that delivered more value with less effort.
&lt;/p&gt;

&lt;p&gt;
But here&apos;s what really set him apart: he cared deeply about delivery, and he made that care infectious.
&lt;/p&gt;

&lt;p&gt;
Our standups weren&apos;t just ritual check-ins - they were tactical planning sessions. Our burn-down charts weren&apos;t just pretty dashboards - they were early warning systems. In fact, when our existing project management tools didn&apos;t give us the granular insights we needed, he went out of his way to build custom PowerBI dashboards. These weren&apos;t just vanity metrics; they were precision instruments that helped us understand our delivery patterns and spot problems early.
&lt;/p&gt;

&lt;p&gt;
When our estimates consistently proved wrong (as they often do), he didn&apos;t just shrug and accept inaccuracy as inevitable. Instead, he came up with an ingenious approach he called &quot;candle sticks&quot; for estimation. We&apos;d take our most recent epics and break them down by logical sections and stories, then put those in a spreadsheet to inform future epic and story sizing sessions. It was massively helpful for improving our estimates because it gave us concrete historical data rather than gut feelings.
&lt;/p&gt;

&lt;p&gt;
When we started falling behind, he didn&apos;t just shrug and push back deadlines. He&apos;d dive into the why: Was our initial estimate wrong? Did we hit unexpected technical debt? Should we cut scope to hit our delivery date?
&lt;/p&gt;

&lt;p&gt;
At the time, this level of scrutiny occasionally felt controlling. But having since experienced the complete opposite - where deadlines are &quot;aspirational&quot; and slipping by weeks is met with a casual &quot;we&apos;ll tell the customer it&apos;s late&quot; - I now understand what I was witnessing: leadership that actually led.
&lt;/p&gt;

&lt;p&gt;
But perhaps the most telling example of his leadership came during a period when I was really struggling. I was an experienced software engineer, but this role threw me into very low-level systems software - a domain completely new to me. Despite my years of experience, I didn&apos;t feel like I was performing at that level, and it was stressing me out massively.
&lt;/p&gt;

&lt;p&gt;
When I finally brought this up to my manager, his response was everything you&apos;d want from great leadership. First, he reassured me that I was doing just fine - that my self-assessment was harsher than reality. But more importantly, when things got really tough, he didn&apos;t just offer empty reassurance. He suggested concrete changes to how we worked, including pairing me with someone who had more domain knowledge.
&lt;/p&gt;

&lt;p&gt;
Looking back, this was extremely kind of him. He could have easily started a performance improvement plan and managed me out. Instead, he invested effort in growing me, recognizing that my struggle wasn&apos;t about capability but about domain knowledge that takes time to build. That&apos;s the kind of leader who creates environments where people can take on challenging work without fear.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org8382918&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org8382918&quot;&gt;A Culture of Excellence and Humanity&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-org8382918&quot;&gt;
&lt;p&gt;
The leadership culture in this environment extended beyond just my direct manager. There was a manager who reported to him and managed part of our team, and I witnessed a moment that perfectly captured the kind of environment they had created.
&lt;/p&gt;

&lt;p&gt;
During a retrospective, this manager spoke up about something uncomfortable: the team had started using some really unkind words behind the back of a colleague from another team in the US. This guy was genuinely difficult to work with - the kind of person who made every interaction feel like pulling teeth. But when the frustration had escalated to the point where people were joking about outright aggression, this manager stepped in.
&lt;/p&gt;

&lt;p&gt;
He said simply that this wasn&apos;t okay - that even as jokes, we needed to find better ways to handle our frustration. The team acknowledged it and changed course. This was the kind of leadership that existed in that environment - technical excellence paired with genuine care for how people treated each other.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org5adbad1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org5adbad1&quot;&gt;When Technical Leadership Goes Missing&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-org5adbad1&quot;&gt;
&lt;p&gt;
In other environments I&apos;ve experienced, the contrast couldn&apos;t be starker. In these places, technical depth was treated as optional for leadership roles. Decisions about architecture, technical debt, and quality were made by people who couldn&apos;t distinguish between good and bad code if their careers depended on it.
&lt;/p&gt;

&lt;p&gt;
The results were predictable and depressing:
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;Quality became optional.&lt;/b&gt; Without technical leadership that understood the long-term costs of shortcuts, everything became a hack. Features were shipped that barely worked, with the attitude that &quot;we&apos;ll fix it later&quot; (spoiler: we never did).
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;Customer needs became abstract.&lt;/b&gt; When managers don&apos;t understand the technical implications of customer requests, they can&apos;t have intelligent conversations about trade-offs. Everything becomes either &quot;easy&quot; or &quot;impossible,&quot; with no nuance in between.
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;Team morale collapsed.&lt;/b&gt; There&apos;s something soul-crushing about working in an environment where craftsmanship isn&apos;t valued, where broken builds are shrugged off, and where the phrase &quot;good enough&quot; gets applied to fundamentally broken functionality. As Tom DeMarco and Timothy Lister note in their classic book &lt;i&gt;Peopleware&lt;/i&gt;, people need to feel pride in their work to be truly productive - when that&apos;s stripped away, you&apos;re left with developers going through the motions rather than solving problems.
&lt;/p&gt;

&lt;p&gt;
The saddest part? This wasn&apos;t just my team - it was a department-wide, possibly company-wide mentality. Which makes you realize how difficult it is to enact change when poor technical leadership is systemic.
&lt;/p&gt;

&lt;p&gt;
I got a reality check about my expectations during one of these experiences. We were setting up our goals for the year through an internal process, and in conversation with some teammates and my Product Manager, I mentioned that I thought the goals should at least at a high level be written with and agreed upon by the people manager - certainly for the more junior engineers. I said I&apos;d expect a &quot;good manager&quot; to have this level of care.
&lt;/p&gt;

&lt;p&gt;
They laughed it off and said, &quot;I don&apos;t think that&apos;s a good manager, I think that&apos;s an exceptional manager.&quot;
&lt;/p&gt;

&lt;p&gt;
At the time I thought, &quot;No, this is the very baseline.&quot; But maybe they&apos;re right. Maybe I was just spoiled by an exceptional manager, and what I consider basic expectations are actually rare in the industry. If that&apos;s true, it&apos;s both sobering and deeply concerning.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org1b14cec&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org1b14cec&quot;&gt;Why Technical Depth Matters in Leadership&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-org1b14cec&quot;&gt;
&lt;p&gt;
Here&apos;s what I&apos;ve learned: pure people management skills, while valuable, aren&apos;t sufficient for leading software teams. Technical credibility is the foundation that makes everything else possible.
&lt;/p&gt;

&lt;p&gt;
When a technical leader makes a decision about architecture or prioritization, the team knows it comes from understanding, not ignorance. They can ask hard questions and get real answers. They can have technical debates that actually move projects forward rather than getting stuck in translation layers between &quot;business speak&quot; and &quot;engineering reality.&quot;
&lt;/p&gt;

&lt;p&gt;
Technical depth also enables the kind of vision that transforms teams. My best manager could see six months ahead - not just in terms of roadmap features, but in terms of how our technical foundations would need to evolve to support those features. This foresight prevented countless fires and kept us building on solid ground.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgad8183a&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgad8183a&quot;&gt;The Process vs. Outcome Distinction&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-orgad8183a&quot;&gt;
&lt;p&gt;
There&apos;s a crucial difference between leaders who implement process for its own sake and those who use process to drive outcomes. My great manager was religious about scrum ceremonies, but every ritual served a purpose:
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Daily standups surfaced blockers before they became disasters&lt;/li&gt;
&lt;li&gt;Sprint planning forced honest conversations about scope and capacity&lt;/li&gt;
&lt;li&gt;Retrospectives actually changed how we worked, not just how we felt&lt;/li&gt;
&lt;li&gt;Custom dashboards provided actionable insights rather than vanity metrics&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
In contrast, I&apos;ve seen teams go through these same motions while delivering nothing of value. They had perfect velocity charts documenting their consistent failure to ship working software.
&lt;/p&gt;

&lt;p&gt;
The difference was leadership that understood both the technical work and the process supporting it.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgdc7d9bc&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgdc7d9bc&quot;&gt;The Cascading Effect&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-orgdc7d9bc&quot;&gt;
&lt;p&gt;
What struck me most about working under great technical leadership was how it changed everyone&apos;s standards. When your manager cares about code quality, test coverage, and architectural consistency, the whole team starts to care. When they push for understanding customer needs deeply, everyone becomes more customer-focused. When they model treating colleagues with respect even when they&apos;re difficult, the whole team follows suit.
&lt;/p&gt;

&lt;p&gt;
Conversely, poor technical leadership creates a downward spiral. When managers don&apos;t understand or value technical excellence, why should individual contributors care? When deadlines are meaningless and quality is optional, why invest discretionary effort?
&lt;/p&gt;

&lt;p&gt;
This cascading effect explains why some teams consistently ship amazing software while others struggle to deliver basic functionality. It&apos;s not about individual talent - it&apos;s about the standards and culture set by leadership.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgea1bd3c&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgea1bd3c&quot;&gt;The Individual Contributor&apos;s Dilemma&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-orgea1bd3c&quot;&gt;
&lt;p&gt;
So what do you do when you recognize what good technical leadership looks like but find yourself in an environment that lacks it?
&lt;/p&gt;

&lt;p&gt;
This is the position I ultimately found myself in. Once you&apos;ve experienced transformational technical leadership, it&apos;s impossible to unsee. You start to recognize all the places where better leadership could prevent problems, unlock potential, and create better outcomes for everyone involved.
&lt;/p&gt;

&lt;p&gt;
In my case, the answer was to leave. When poor technical leadership is systemic and organizational immunity to change is high, sometimes the healthiest response is to find an environment that values what you value.
&lt;/p&gt;

&lt;p&gt;
But that&apos;s not always possible or practical. For those stuck in less-than-ideal situations, I&apos;d suggest:
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Advocating for process improvements within your sphere of influence&lt;/li&gt;
&lt;li&gt;Mentoring junior developers to maintain standards even when leadership doesn&apos;t&lt;/li&gt;
&lt;li&gt;Building technical credibility that positions you to eventually lead change&lt;/li&gt;
&lt;li&gt;Finding ways to measure and communicate the business impact of technical decisions&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org45a1712&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org45a1712&quot;&gt;The Interview Challenge: How Do You Spot Great Technical Leaders?&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-org45a1712&quot;&gt;
&lt;p&gt;
This brings up a crucial question that every developer faces: how do you identify transformational technical leadership when you&apos;re interviewing for a job? Is it even possible to detect this during a standard interview process, or are you just relying on vibes?
&lt;/p&gt;

&lt;p&gt;
It&apos;s a genuinely difficult challenge. Great technical managers don&apos;t necessarily advertise themselves as such, and interview processes are notoriously bad at revealing true leadership capabilities. You might meet with the hiring manager for 30-60 minutes and somehow need to assess whether they&apos;re the kind of person who will build custom dashboards to track team performance or suggest pairing when you&apos;re struggling with domain knowledge.
&lt;/p&gt;

&lt;p&gt;
Here are some approaches I&apos;ve been thinking about:
&lt;/p&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org0d9f2df&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org0d9f2df&quot;&gt;Look for Specific Technical Stories&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-org0d9f2df&quot;&gt;
&lt;p&gt;
Ask them to describe a recent technical decision their team made and their role in it. Great technical leaders will be able to dive into the details - the trade-offs considered, the constraints that shaped the decision, how they involved the team in the discussion. Poor technical leaders will speak in generalities or defer entirely to &quot;the team.&quot;
&lt;/p&gt;

&lt;p&gt;
Try questions like: &quot;Can you walk me through a recent architectural decision your team made?&quot; or &quot;Tell me about a time when you had to push back on a feature request due to technical constraints.&quot;
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgecbbdbd&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgecbbdbd&quot;&gt;Probe Their Approach to Process&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-orgecbbdbd&quot;&gt;
&lt;p&gt;
Ask about how they run standups, sprint planning, or retrospectives. The best technical leaders will explain &lt;i&gt;why&lt;/i&gt; they do things a certain way, not just what they do. They might mention specific adaptations they&apos;ve made to standard processes or tools they&apos;ve built to better serve their team&apos;s needs.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgf0d68a0&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgf0d68a0&quot;&gt;Understand Their View on Team Growth&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-orgf0d68a0&quot;&gt;
&lt;p&gt;
Ask about how they handle team members who are struggling or how they&apos;ve helped someone grow in their career. This is where you might uncover whether they&apos;re the type to invest in people or manage them out at the first sign of difficulty.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org5195f19&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org5195f19&quot;&gt;Ask About Delivery and Quality&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-org5195f19&quot;&gt;
&lt;p&gt;
How do they balance shipping quickly with maintaining quality? How do they handle technical debt? What happens when estimates are consistently wrong? Their answers will reveal whether they understand the long-term costs of shortcuts and whether they have systematic approaches to common problems.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org73fd7ac&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org73fd7ac&quot;&gt;But Let&apos;s Be Honest About the Limitations&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-org73fd7ac&quot;&gt;
&lt;p&gt;
Even with thoughtful questions, interviews have fundamental limitations. People can give good answers about processes they don&apos;t actually follow. You can&apos;t easily assess team culture or the subtle ways leadership manifests day-to-day.
&lt;/p&gt;

&lt;p&gt;
Sometimes it really does come down to a vibes check - does this person seem like someone who cares deeply about both technical excellence and people? Do they ask you thoughtful questions about your technical background and career goals? Do they speak about their team with genuine respect and investment?
&lt;/p&gt;

&lt;p&gt;
It&apos;s frustrating that something so crucial to your daily work experience is so hard to evaluate, but acknowledging this limitation is the first step toward making better choices where possible.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgc79fb6b&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgc79fb6b&quot;&gt;A Wish for Every Developer&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-orgc79fb6b&quot;&gt;
&lt;p&gt;
I wish every developer could experience truly great technical leadership at least once in their career. Not just competent management, but the kind of leadership that makes you excited to come to work, confident in your team&apos;s direction, and proud of what you&apos;re building together.
&lt;/p&gt;

&lt;p&gt;
Because once you&apos;ve seen what&apos;s possible - how technical depth, process discipline, genuine care for outcomes, and respect for team dynamics can transform a team - it becomes a standard you&apos;ll spend the rest of your career seeking.
&lt;/p&gt;

&lt;p&gt;
The variance in technical leadership quality is staggering. Some managers are genuinely transformational, setting clear direction backed by deep technical understanding. Others feel like expensive overhead, adding process without purpose and making decisions without context.
&lt;/p&gt;

&lt;p&gt;
The difference isn&apos;t just about individual careers or team productivity. It&apos;s about whether we&apos;re building software that matters, that works, and that makes the world a little bit better.
&lt;/p&gt;

&lt;p&gt;
Have you experienced the kind of technical leadership that changed how you think about software development? What made them exceptional? And how do we create more of these transformational leaders in our industry?&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</description>
        <pubDate>Fri, 27 Jun 2025 12:00:00 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2025/06/transformational-power-technical-leadership/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2025/06/transformational-power-technical-leadership/</guid>
        
        
        <category>tech</category>
        
        <category>leadership</category>
        
        <category>management</category>
        
        <category>software-development</category>
        
      </item>
    
      <item>
        <title>The Double-Edged Sword of Public Recognition: Maintaining Psychological Safety in Tech Teams</title>
        <description>&lt;div id=&quot;outline-container-orga5a014d&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orga5a014d&quot;&gt;When Good Intentions Create Unexpected Tensions&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-orga5a014d&quot;&gt;
&lt;p&gt;
Last week, my team shipped a complex feature we&apos;d been working on for a few weeks. It was one of those collaborative efforts where various people stepped up at critical moments to push us over the finish line. Once we&apos;d deployed, I posted a message in our team channel highlighting specific contributions - the engineers who stepped up while I was away, the engineer who bashed through all the UI changes, and the PMs who kept us accountable throughout the process.
&lt;/p&gt;

&lt;p&gt;
What happened next caught me off guard. A team member I hadn&apos;t mentioned reached out with a passive-aggressive comment: &quot;Maybe if I do [specific task] now I&apos;ll get some of those sweet kudos too.&quot;
&lt;/p&gt;

&lt;p&gt;
I&apos;d inadvertently created a situation where someone felt overlooked and undervalued. More concerning, their reaction created a subtle shift in our team dynamic - suddenly, I found myself hesitating to share appreciation publicly, worried about who else I might unintentionally exclude.
&lt;/p&gt;

&lt;p&gt;
This incident got me thinking about the complex relationship between public recognition and psychological safety in tech teams. How do we balance authentic appreciation with comprehensive acknowledgment? When does recognition itself become a threat to the psychological safety we&apos;re trying to build?
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org5ed7b23&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org5ed7b23&quot;&gt;Why Recognition Matters (When Done Right)&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-org5ed7b23&quot;&gt;
&lt;p&gt;
In tech teams, public recognition serves multiple vital functions:
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;It reinforces valued behaviors and contributions&lt;/li&gt;
&lt;li&gt;It provides visibility for work that might otherwise go unnoticed&lt;/li&gt;
&lt;li&gt;It strengthens connections between team members&lt;/li&gt;
&lt;li&gt;It creates a culture where appreciation flows naturally&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
When recognition is specific and behavioral (&quot;Your persistence in debugging that memory leak saved us weeks of troubleshooting&quot;), it&apos;s particularly powerful. Generic praise (&quot;Great job, team!&quot;) feels good but doesn&apos;t provide the same targeted reinforcement or visibility.
&lt;/p&gt;

&lt;p&gt;
Research consistently shows that feeling recognized correlates strongly with engagement, retention, and psychological safety. When people believe their contributions will be seen and acknowledged, they&apos;re more likely to take risks, share ideas, and invest discretionary effort.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org35ffe14&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org35ffe14&quot;&gt;The Recognition Paradox&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-org35ffe14&quot;&gt;
&lt;p&gt;
Here&apos;s the challenge: the same specificity that makes recognition meaningful creates inevitable gaps. The more specific and genuine you are, the more likely someone will feel excluded.
&lt;/p&gt;

&lt;p&gt;
If you&apos;ve led teams, you&apos;ve probably experienced this paradox. You highlight someone&apos;s excellent work, and immediately wonder: &lt;i&gt;Who am I forgetting? Who might feel slighted by this acknowledgment?&lt;/i&gt; The cognitive and emotional load of trying to remember everyone&apos;s contributions can be overwhelming, especially on larger teams or complex projects.
&lt;/p&gt;

&lt;p&gt;
Sometimes, team members respond to feeling overlooked with passive-aggressive comments or withdrawal. These reactions, however understandable, can inadvertently create a chilling effect where team leads and peers become reluctant to express appreciation at all.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org98ef850&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org98ef850&quot;&gt;The Hidden Impact on Team Psychological Safety&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-org98ef850&quot;&gt;
&lt;p&gt;
When recognition becomes fraught with potential negative reactions, a subtle but significant shift occurs in team dynamics. People start to second-guess expressions of gratitude. They might withhold appreciation entirely rather than risk an incomplete acknowledgment. The emphasis shifts from genuine recognition to political correctness.
&lt;/p&gt;

&lt;p&gt;
This creates a double bind for team leads:
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Recognize people specifically and risk leaving someone out&lt;/li&gt;
&lt;li&gt;Don&apos;t recognize anyone specifically and lose the benefits of targeted appreciation&lt;/li&gt;
&lt;li&gt;Try to recognize everyone and dilute the meaning of recognition entirely&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
This environment doesn&apos;t feel psychologically safe for anyone. The person giving recognition feels anxious about potential backlash. The people receiving it may wonder if they&apos;re only being mentioned to check a box. And those not mentioned may feel invisible despite their contributions.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org874cec8&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org874cec8&quot;&gt;Building a Healthier Recognition Culture&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-org874cec8&quot;&gt;
&lt;p&gt;
After reflecting on my recent experience, I&apos;ve been thinking about how we can create recognition practices that maintain psychological safety for everyone involved. Here are some approaches I&apos;m working to implement:
&lt;/p&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgcb3916d&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgcb3916d&quot;&gt;1. Distinguish Between Types of Contributions&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-orgcb3916d&quot;&gt;
&lt;p&gt;
Not all work is equally visible. Some contributions (like technical writing, infrastructure improvements, or early-stage research) happen outside the spotlight but are critical to success. These &quot;invisible&quot; contributions deserve particular attention in recognition practices.
&lt;/p&gt;

&lt;p&gt;
Consider creating different recognition mechanisms for different types of work:
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&lt;b&gt;Project completion recognition&lt;/b&gt;: A structured process to acknowledge all contributors&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Spotlight moments&lt;/b&gt;: Spontaneous recognition for exceptional visible effort&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Systems impact&lt;/b&gt;: Regular acknowledgment of behind-the-scenes work that enables team success&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org31fc0ac&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org31fc0ac&quot;&gt;2. Create Both Structured and Spontaneous Recognition Opportunities&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-org31fc0ac&quot;&gt;
&lt;p&gt;
Spontaneous appreciation (&quot;That was an amazing presentation!&quot;) fulfills a different need than structured recognition. Both are valuable. Consider implementing:
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Regular team retrospectives that include an appreciation round&lt;/li&gt;
&lt;li&gt;Project close-out documents that acknowledge all contributors&lt;/li&gt;
&lt;li&gt;&quot;Unsung hero&quot; spotlights for less visible but critical work&lt;/li&gt;
&lt;li&gt;Space for spontaneous peer recognition in team meetings&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org81e4ef9&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org81e4ef9&quot;&gt;3. Set Team Norms Around Recognition&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-org81e4ef9&quot;&gt;
&lt;p&gt;
The most important step is to openly discuss how your team wants to handle recognition. Some questions to consider together:
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;How do we want to celebrate project completions?&lt;/li&gt;
&lt;li&gt;How should team members respond if they feel overlooked?&lt;/li&gt;
&lt;li&gt;What responsibility do we all have in creating a culture where appreciation flows freely?&lt;/li&gt;
&lt;li&gt;How do we balance spontaneous recognition with more comprehensive acknowledgment?&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgaa4e9f3&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgaa4e9f3&quot;&gt;4. Model Healthy Responses When You&apos;re Overlooked&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-orgaa4e9f3&quot;&gt;
&lt;p&gt;
As a tech lead, one of the most powerful things you can do is model how to respond when you&apos;re the one who feels unrecognized. I&apos;ve been working on:
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Acknowledging my own disappointment privately rather than expressing it passive-aggressively&lt;/li&gt;
&lt;li&gt;Directly asking for recognition when it&apos;s important to me: &quot;I put a lot of work into the documentation and would appreciate some feedback&quot;&lt;/li&gt;
&lt;li&gt;Focusing on giving quality recognition rather than expecting it in return&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgd83f20d&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgd83f20d&quot;&gt;Moving Forward: Recognition as a Shared Responsibility&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-orgd83f20d&quot;&gt;
&lt;p&gt;
Creating a culture where recognition enhances rather than threatens psychological safety requires maturity from everyone involved:
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&lt;b&gt;For those giving recognition&lt;/b&gt;: Be as comprehensive as possible while maintaining authenticity, and create systems to catch contributions you might miss&lt;/li&gt;
&lt;li&gt;&lt;b&gt;For those receiving recognition&lt;/b&gt;: Accept it graciously and use it to build others up rather than as a zero-sum game&lt;/li&gt;
&lt;li&gt;&lt;b&gt;For those feeling overlooked&lt;/b&gt;: Express feelings directly and constructively, focusing on the impact rather than attributing negative intent&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Most importantly, we need to recognize that our reactions to feeling overlooked have consequences for team culture. When we respond with passive-aggressive comments or withdrawal, we may inadvertently create an environment where others become hesitant to give any recognition at all.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgb12b732&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgb12b732&quot;&gt;Final Thoughts&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-orgb12b732&quot;&gt;
&lt;p&gt;
Public recognition is a powerful tool for building strong tech teams, but it requires thoughtfulness and care. By creating balanced systems that acknowledge both visible and invisible work, setting clear team norms, and modeling mature responses, we can build cultures where recognition enhances rather than threatens psychological safety.
&lt;/p&gt;

&lt;p&gt;
I&apos;d love to hear how other tech leads navigate this challenge. What practices have worked well in your teams for ensuring recognition builds rather than undermines psychological safety? &lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</description>
        <pubDate>Fri, 07 Mar 2025 09:00:00 +0000</pubDate>
        <link>https://www.tiagoespinha.net/2025/03/double-edged-sword-recognition/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2025/03/double-edged-sword-recognition/</guid>
        
        
        <category>tech</category>
        
        <category>leadership</category>
        
        <category>management</category>
        
        <category>psychology</category>
        
      </item>
    
      <item>
        <title>How I Built LearnGOAT - A Free Maths Worksheet Generator</title>
        <description>&lt;p&gt;
Ever found yourself thinking &quot;there must be a better way&quot;? That&apos;s exactly what happened when I was buying yet another maths practice book for my kids. As these books started piling up (along with their cost!), I realized I could turn this parental challenge into an opportunity to build something useful - not just for my family, but for everyone.
&lt;/p&gt;
&lt;div id=&quot;outline-container-orgb312509&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgb312509&quot;&gt;The Problem&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-orgb312509&quot;&gt;
&lt;p&gt;
As a dad of two school-age boys, I kept running into the same issues with traditional maths practice books:
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;They&apos;re not exactly cheap (especially when you need them regularly)&lt;/li&gt;
&lt;li&gt;They take up precious storage space&lt;/li&gt;
&lt;li&gt;Once used, they&apos;re basically done - you can&apos;t reuse them&lt;/li&gt;
&lt;li&gt;You can&apos;t customize the difficulty level as your child progresses&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Then it hit me - we all have printers at home, right? What if we could generate fresh worksheets whenever we needed them?
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgc8ad5a6&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgc8ad5a6&quot;&gt;The Solution: LearnGOAT.com&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-orgc8ad5a6&quot;&gt;
&lt;p&gt;
I decided to build a web application that would:
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Generate custom maths worksheets on demand&lt;/li&gt;
&lt;li&gt;Be completely free for everyone&lt;/li&gt;
&lt;li&gt;Work entirely in the browser (no backend needed!)&lt;/li&gt;
&lt;li&gt;Be simple enough for any parent or teacher to use&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgc333706&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgc333706&quot;&gt;The Tech Stack &amp;amp; Development Journey&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-orgc333706&quot;&gt;
&lt;p&gt;
This is where the story gets interesting for my fellow tech enthusiasts. What started as a single HTML file with embedded JavaScript and CSS has evolved into a fully-fledged static site built with Eleventy. But let me rewind to the beginning.
&lt;/p&gt;

&lt;p&gt;
I began the development process with Claude 3.5 Sonnet, Anthropic&apos;s AI assistant, as my pair programming companion. Our initial prototype was deliberately simple - everything in one file, just to get the core worksheet generation working. No build process, no TypeScript, just pure HTML, CSS, and JavaScript.
&lt;/p&gt;

&lt;p&gt;
One of the key decisions I made early on was to keep everything client-side. This means:
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Zero server costs (it&apos;s just static files being served)&lt;/li&gt;
&lt;li&gt;No database to maintain&lt;/li&gt;
&lt;li&gt;Lightning-fast performance&lt;/li&gt;
&lt;li&gt;Works offline once loaded&lt;/li&gt;
&lt;li&gt;Easy to scale - static files are trivial to serve from CDNs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
As the project grew, so did its architecture. Through multiple iterations and conversations with Claude, we:
&lt;/p&gt;
&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;Split the codebase into proper TypeScript files&lt;/li&gt;
&lt;li&gt;Set up an Eleventy build pipeline for optimal performance&lt;/li&gt;
&lt;li&gt;Implemented proper bundling and minification with esbuild&lt;/li&gt;
&lt;li&gt;Maintained everything as a purely client-side application&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
This iterative process, guided by both practical needs and AI assistance, resulted in what you see today: a lean, fast-loading application that generates worksheets entirely in your browser. No backend, no database, just efficient client-side code doing its job.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org569277e&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org569277e&quot;&gt;The Development Process&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-org569277e&quot;&gt;
&lt;p&gt;
The evolution of LearnGOAT was fascinating from a technical perspective. Each iteration brought new challenges:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-text&quot;&gt;Initial Version:
- Single HTML file
- Inline JavaScript
- Basic styling
- Core worksheet generation

Current Version:
- TypeScript for type safety
- Proper build pipeline with Eleventy
- Optimized bundle sizes
- Enhanced worksheet generation algorithms
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
Working with Claude was particularly interesting - it helped not just with code, but with architectural decisions and optimization strategies. The AI wasn&apos;t just generating code; it was a thought partner in designing the system&apos;s evolution.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org2aaaac5&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org2aaaac5&quot;&gt;What&apos;s Available Now&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-org2aaaac5&quot;&gt;
&lt;p&gt;
Currently, LearnGOAT offers worksheets for:
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Addition&lt;/li&gt;
&lt;li&gt;Subtraction&lt;/li&gt;
&lt;li&gt;Multiplication&lt;/li&gt;
&lt;li&gt;Division&lt;/li&gt;
&lt;li&gt;Fractions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Each type comes with different difficulty levels, so you can match the worksheets to your child&apos;s current abilities.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orga6642c5&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orga6642c5&quot;&gt;Looking Forward&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-orga6642c5&quot;&gt;
&lt;p&gt;
This is just the beginning for LearnGOAT. I have plans to add:
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;More types of maths problems&lt;/li&gt;
&lt;li&gt;Different worksheet layouts&lt;/li&gt;
&lt;li&gt;Additional customization options&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
But I&apos;m also keen to hear what other parents and teachers need. What would make these worksheets even more useful for you?
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgf1582de&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgf1582de&quot;&gt;The Big Picture&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-orgf1582de&quot;&gt;
&lt;p&gt;
Sometimes the best projects come from solving our own problems. What started as a way to save money and storage space has turned into a tool that anyone can use, completely free. It&apos;s my way of giving back to the community, using technology to make education a little more accessible.
&lt;/p&gt;

&lt;p&gt;
Have you used LearnGOAT? What features would you like to see added? How do you handle maths practice in your family? Let me know in the comments!
&lt;/p&gt;

&lt;p&gt;
Oh, and if you&apos;re a fellow tech enthusiast curious about building client-side apps with AI assistance, or if you&apos;re a parent looking for free educational resources, feel free to reach out. I&apos;d love to hear from you!
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;Visit &lt;a href=&quot;https://learngoat.com&quot;&gt;LearnGOAT.com&lt;/a&gt; to try it out for yourself!&lt;/b&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</description>
        <pubDate>Thu, 16 Jan 2025 13:00:00 +0000</pubDate>
        <link>https://www.tiagoespinha.net/2025/01/how-i-built-learngoat/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2025/01/how-i-built-learngoat/</guid>
        
        
        <category>tech</category>
        
        <category>projects</category>
        
        <category>education</category>
        
        <category>genai</category>
        
      </item>
    
      <item>
        <title>The TypeScript Configuration Trap</title>
        <description>&lt;p&gt;
Ever had that moment where you spend time carefully configuring TypeScript, only to discover your build process has been cheerfully ignoring most of your settings? I recently fell into this trap while working with esbuild, and the experience taught me some valuable lessons about TypeScript tooling.
&lt;/p&gt;
&lt;div id=&quot;outline-container-org4787496&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org4787496&quot;&gt;The Setup&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-org4787496&quot;&gt;
&lt;p&gt;
Here&apos;s how it started. I had a TypeScript project with some strict type checking rules in my &lt;code&gt;tsconfig.json&lt;/code&gt;:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-json&quot;&gt;{
  &quot;compilerOptions&quot;: {
    &quot;strict&quot;: true,
    &quot;noImplicitAny&quot;: true,
    &quot;strictNullChecks&quot;: true
  }
}
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
My build process used esbuild, configured like this:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-javascript&quot;&gt;esbuild.build&lt;span style=&quot;color: #fe8019;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #b16286;&quot;&gt;{&lt;/span&gt;
    entryPoints: &lt;span style=&quot;color: #b8bb26;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #b8bb26;&quot;&gt;&apos;src/index.ts&apos;&lt;/span&gt;&lt;span style=&quot;color: #b8bb26;&quot;&gt;]&lt;/span&gt;,
    bundle: &lt;span style=&quot;color: #d3869b;&quot;&gt;true&lt;/span&gt;,
    outdir: &lt;span style=&quot;color: #b8bb26;&quot;&gt;&apos;dist&apos;&lt;/span&gt;,
    format: &lt;span style=&quot;color: #b8bb26;&quot;&gt;&apos;esm&apos;&lt;/span&gt;,
    target: &lt;span style=&quot;color: #b8bb26;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #b8bb26;&quot;&gt;&apos;es2020&apos;&lt;/span&gt;&lt;span style=&quot;color: #b8bb26;&quot;&gt;]&lt;/span&gt;,
    loader: &lt;span style=&quot;color: #b8bb26;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #b8bb26;&quot;&gt;&apos;.ts&apos;&lt;/span&gt;: &lt;span style=&quot;color: #b8bb26;&quot;&gt;&apos;ts&apos;&lt;/span&gt; &lt;span style=&quot;color: #b8bb26;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #b16286;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #fe8019;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
Everything seemed fine - my code built successfully, and I was feeling good about my type safety. Until I discovered some code that should have failed type checking was making it into production.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgac9071b&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgac9071b&quot;&gt;The Gotcha&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-orgac9071b&quot;&gt;
&lt;p&gt;
Here&apos;s what I didn&apos;t realize: esbuild, while excellent at quickly bundling TypeScript, isn&apos;t actually a TypeScript compiler. It&apos;s primarily focused on:
&lt;/p&gt;
&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;Parsing TypeScript syntax&lt;/li&gt;
&lt;li&gt;Stripping out type annotations&lt;/li&gt;
&lt;li&gt;Transforming and bundling the remaining JavaScript&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
By default, esbuild doesn&apos;t read from &lt;code&gt;tsconfig.json&lt;/code&gt; at all! Even when explicitly configured to do so using the &lt;code&gt;tsconfig&lt;/code&gt; option, it only reads a limited set of settings:
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&lt;code&gt;baseUrl&lt;/code&gt; and &lt;code&gt;paths&lt;/code&gt; for module resolution&lt;/li&gt;
&lt;li&gt;&lt;code&gt;target&lt;/code&gt; for output JavaScript version&lt;/li&gt;
&lt;li&gt;&lt;code&gt;jsxFactory&lt;/code&gt; and &lt;code&gt;jsxFragmentFactory&lt;/code&gt; for JSX handling&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
What it doesn&apos;t do is enforce type checking rules. All those careful type safety configurations? They weren&apos;t being enforced during the build.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgfa44973&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgfa44973&quot;&gt;The Solution&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-orgfa44973&quot;&gt;
&lt;p&gt;
The fix is to add explicit type checking to your build process. Here&apos;s how:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-javascript&quot;&gt;&lt;span style=&quot;color: #fb4934;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #fe8019;&quot;&gt;{&lt;/span&gt; build &lt;span style=&quot;color: #fe8019;&quot;&gt;}&lt;/span&gt; = require&lt;span style=&quot;color: #fe8019;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #b8bb26;&quot;&gt;&apos;esbuild&apos;&lt;/span&gt;&lt;span style=&quot;color: #fe8019;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #fb4934;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #fe8019;&quot;&gt;{&lt;/span&gt; exec &lt;span style=&quot;color: #fe8019;&quot;&gt;}&lt;/span&gt; = require&lt;span style=&quot;color: #fe8019;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #b8bb26;&quot;&gt;&apos;child_process&apos;&lt;/span&gt;&lt;span style=&quot;color: #fe8019;&quot;&gt;)&lt;/span&gt;;

&lt;span style=&quot;color: #928374;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #928374;&quot;&gt;First run type checking&lt;/span&gt;
exec&lt;span style=&quot;color: #fe8019;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #b8bb26;&quot;&gt;&apos;npx tsc --noEmit&apos;&lt;/span&gt;, &lt;span style=&quot;color: #b16286;&quot;&gt;(&lt;/span&gt;error&lt;span style=&quot;color: #b16286;&quot;&gt;)&lt;/span&gt; =&amp;gt; &lt;span style=&quot;color: #b16286;&quot;&gt;{&lt;/span&gt;
  &lt;span style=&quot;color: #fb4934;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #b8bb26;&quot;&gt;(&lt;/span&gt;error&lt;span style=&quot;color: #b8bb26;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #b8bb26;&quot;&gt;{&lt;/span&gt;
    console.error&lt;span style=&quot;color: #83a598;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #b8bb26;&quot;&gt;&apos;Type checking failed:&apos;&lt;/span&gt;, error&lt;span style=&quot;color: #83a598;&quot;&gt;)&lt;/span&gt;;
    process.exit&lt;span style=&quot;color: #83a598;&quot;&gt;(&lt;/span&gt;1&lt;span style=&quot;color: #83a598;&quot;&gt;)&lt;/span&gt;;
  &lt;span style=&quot;color: #b8bb26;&quot;&gt;}&lt;/span&gt;

  &lt;span style=&quot;color: #928374;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #928374;&quot;&gt;Then run esbuild&lt;/span&gt;
  build&lt;span style=&quot;color: #b8bb26;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #83a598;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #928374;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #928374;&quot;&gt;your existing esbuild config...&lt;/span&gt;
  &lt;span style=&quot;color: #83a598;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #b8bb26;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #b16286;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #fe8019;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
Or in your &lt;code&gt;package.json&lt;/code&gt; scripts:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-json&quot;&gt;{
  &quot;scripts&quot;: {
    &quot;type-check&quot;: &quot;tsc --noEmit&quot;,
    &quot;build&quot;: &quot;npm run type-check &amp;amp;&amp;amp; esbuild ...&quot;,
    &quot;dev&quot;: &quot;npm run type-check &amp;amp;&amp;amp; esbuild ... --watch&quot;
  }
}
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
The &lt;code&gt;--noEmit&lt;/code&gt; flag tells TypeScript to only check types without generating JavaScript files (since esbuild will handle the actual compilation).
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgb062db3&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgb062db3&quot;&gt;Understanding Build Tool Roles&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-orgb062db3&quot;&gt;
&lt;p&gt;
This experience highlighted an important distinction in the TypeScript tooling ecosystem:
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&lt;b&gt;TypeScript Compiler (tsc)&lt;/b&gt;: Focuses on type checking and compilation&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Build Tools (esbuild, webpack, etc.)&lt;/b&gt;: Focus on bundling, minification, and other build optimizations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
While many build tools can handle TypeScript syntax, they don&apos;t necessarily enforce TypeScript&apos;s type system. They&apos;re designed for speed and efficiency in transforming and bundling code, not for type safety.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org77ec2e1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org77ec2e1&quot;&gt;Best Practices&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-org77ec2e1&quot;&gt;
&lt;p&gt;
To avoid this trap:
&lt;/p&gt;

&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;&lt;b&gt;Always include explicit type checking&lt;/b&gt; in your build process&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Don&apos;t assume&lt;/b&gt; that TypeScript-compatible build tools are enforcing your TypeScript configuration&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Consider running type checking in parallel&lt;/b&gt; with development for faster feedback&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Set up CI checks&lt;/b&gt; that run the TypeScript compiler to catch type errors before deployment&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org496f2e5&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org496f2e5&quot;&gt;The Bigger Picture&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-org496f2e5&quot;&gt;
&lt;p&gt;
This situation reflects a broader principle in software development: tools that seem to be doing the same thing (handling TypeScript files) might have very different focuses and trade-offs. Understanding these differences is crucial for building reliable development pipelines.
&lt;/p&gt;

&lt;p&gt;
In the case of TypeScript and build tools:
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;TypeScript&apos;s compiler prioritizes type safety and correctness&lt;/li&gt;
&lt;li&gt;Build tools prioritize speed and bundle optimization&lt;/li&gt;
&lt;li&gt;You often need both to get the best of both worlds&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org9d29cb8&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org9d29cb8&quot;&gt;Conclusion&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-org9d29cb8&quot;&gt;
&lt;p&gt;
While it might seem redundant to run both the TypeScript compiler and a build tool, this separation of concerns actually makes a lot of sense. The TypeScript compiler can focus on providing robust type checking, while build tools like esbuild can focus on creating optimal bundles.
&lt;/p&gt;

&lt;p&gt;
The key is to remember that seeing &quot;.ts&quot; in your build configuration doesn&apos;t mean you&apos;re getting full TypeScript type checking. Make sure you&apos;re explicitly running &lt;code&gt;tsc&lt;/code&gt; as part of your build process, and you&apos;ll catch those type errors before they make it to production.
&lt;/p&gt;

&lt;p&gt;
&lt;i&gt;Has this ever happened to you? How do you handle TypeScript type checking in your build pipeline? Let me know in the comments!&lt;/i&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</description>
        <pubDate>Wed, 15 Jan 2025 05:00:00 +0000</pubDate>
        <link>https://www.tiagoespinha.net/2025/01/typescript-configuration-trap/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2025/01/typescript-configuration-trap/</guid>
        
        
        <category>tech</category>
        
        <category>typescript</category>
        
        <category>esbuild</category>
        
        <category>build-tools</category>
        
      </item>
    
      <item>
        <title>LSP Docker mode with multiple clients</title>
        <description>&lt;p&gt;
&lt;a href=&quot;https://github.com/emacs-lsp/lsp-docker&quot;&gt;LSP Docker&lt;/a&gt; is a fantastic extension if you need to make use of build containers for development. It creates LSP-mode clients in Emacs that allow a language server to run within a given Docker container/image rather than in your host machine. As someone who deals with this sort of setup at work, I was very keen to get this working right!
&lt;/p&gt;

&lt;p&gt;
It&apos;s not a particularly easy extension to get working though. The main issue I found was needing to deal with multiple instances of the same type of client (clangd in my case). I placed an &lt;code&gt;.lsp-docker.yml&lt;/code&gt; in each of the LSP projects I wanted to use my client from with something along the lines of:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-yaml&quot;&gt;&lt;span style=&quot;color: #83a598;&quot;&gt;lsp&lt;/span&gt;:
  &lt;span style=&quot;color: #83a598;&quot;&gt;server&lt;/span&gt;:
    &lt;span style=&quot;color: #83a598;&quot;&gt;type&lt;/span&gt;: docker
    &lt;span style=&quot;color: #83a598;&quot;&gt;subtype&lt;/span&gt;: image &lt;span style=&quot;color: #928374;&quot;&gt;# &lt;/span&gt;&lt;span style=&quot;color: #928374;&quot;&gt;Or image. container subtype means launching an existing container&lt;/span&gt;
    &lt;span style=&quot;color: #928374;&quot;&gt;# &lt;/span&gt;&lt;span style=&quot;color: #928374;&quot;&gt;image subtype means creating a new container each time from a specified image&lt;/span&gt;
    &lt;span style=&quot;color: #83a598;&quot;&gt;name&lt;/span&gt;: &amp;lt;image-i-manually-built&amp;gt;:&amp;lt;version&amp;gt; &lt;span style=&quot;color: #928374;&quot;&gt;# &lt;/span&gt;&lt;span style=&quot;color: #928374;&quot;&gt;Must be unique across all language servers&lt;/span&gt;
    &lt;span style=&quot;color: #83a598;&quot;&gt;container-name&lt;/span&gt;: &amp;lt;unique container name&amp;gt;
    &lt;span style=&quot;color: #83a598;&quot;&gt;server&lt;/span&gt;: clangd &lt;span style=&quot;color: #928374;&quot;&gt;# &lt;/span&gt;&lt;span style=&quot;color: #928374;&quot;&gt;Server id of a registered server (by lsp-mode) &lt;/span&gt;
    &lt;span style=&quot;color: #83a598;&quot;&gt;launch_command&lt;/span&gt;: &lt;span style=&quot;color: #b8bb26;&quot;&gt;&quot;clangd&quot;&lt;/span&gt; &lt;span style=&quot;color: #928374;&quot;&gt;# &lt;/span&gt;&lt;span style=&quot;color: #928374;&quot;&gt;Launch command of the language server&lt;/span&gt;
    &lt;span style=&quot;color: #928374;&quot;&gt;# &lt;/span&gt;&lt;span style=&quot;color: #928374;&quot;&gt;(selected by a server id specified above) in stdio mode&lt;/span&gt;
    &lt;span style=&quot;color: #928374;&quot;&gt;# &lt;/span&gt;&lt;span style=&quot;color: #928374;&quot;&gt;Note: launch_command is not used with container subtype servers&lt;/span&gt;
    &lt;span style=&quot;color: #928374;&quot;&gt;# &lt;/span&gt;&lt;span style=&quot;color: #928374;&quot;&gt;as a command is embedded in a container itself and serves as an entrypoint&lt;/span&gt;
  &lt;span style=&quot;color: #83a598;&quot;&gt;mappings&lt;/span&gt;:
    - &lt;span style=&quot;color: #83a598;&quot;&gt;source&lt;/span&gt;: &lt;span style=&quot;color: #b8bb26;&quot;&gt;&quot;&amp;lt;path to source on my host&amp;gt;&quot;&lt;/span&gt;
      &lt;span style=&quot;color: #83a598;&quot;&gt;destination&lt;/span&gt;: &lt;span style=&quot;color: #b8bb26;&quot;&gt;&quot;&amp;lt;path to source within the container&amp;gt;&quot;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
As you will notice if you try having multiple repos with slight variations of this file, they all extend from the &lt;code&gt;clangd&lt;/code&gt; server and as such, each of the clients will be a candidate client for each of the repos. This caused a problem for me - a client I&apos;ve created for repo A had path mappings incompatible with repo B, which had path mappings of its own.
&lt;/p&gt;

&lt;p&gt;
After much faffing around with settings and manually debugging both LSP Docker and LSP itself, I figured I could either come up with a way to bump up the priority of the one client I wanted to use at any one time, or I could use the &lt;code&gt;lsp-enabled-clients&lt;/code&gt; variable to whitelist the one client I wanted to use.
&lt;/p&gt;

&lt;p&gt;
Using the priority works, but is not ideal. In LSP Docker, all clients have a base priority of 100. If I bumped one client to a slightly higher priority (e.g., 101), next time I want to use yet another client I need to either reset the old client back to 100 and the &lt;i&gt;new new&lt;/i&gt; client to 101. Hardly ideal and involves restarting the LSP workspace multiple times.
&lt;/p&gt;

&lt;p&gt;
Enabling/disabling clients seemed like the way to go. This can be achieved easily with directory-local configs in Emacs. For example, by placing the following in a &lt;code&gt;.dir-locals.el&lt;/code&gt; in the root of one of the &lt;code&gt;/home/tiago/git/myrepo1/&lt;/code&gt; and a similar one in &lt;code&gt;myrepo2&lt;/code&gt; with the client name adjusted to reflect the path/Docker image difference:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;&lt;span style=&quot;color: #fe8019;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #cc241d;&quot;&gt;(&lt;/span&gt;c++-mode . &lt;span style=&quot;color: #b8bb26;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #83a598;&quot;&gt;(&lt;/span&gt;lsp-enabled-clients . &lt;span style=&quot;color: #8ec07c;&quot;&gt;(&lt;/span&gt;home-tiago-git-myrepo1-clangd-docker&lt;span style=&quot;color: #8ec07c;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #83a598;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #b8bb26;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #cc241d;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #fe8019;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
Now, this came with an issue that wrecked my brain for a while. After doing this, I&apos;d go into &lt;code&gt;myrepo1&lt;/code&gt; and it&apos;d all be fine, then I&apos;d step into &lt;code&gt;myrepo2&lt;/code&gt; and LSP would still be trying to load the image from &lt;code&gt;myrepo1&lt;/code&gt;! Not only that, but at a much more essential level, Emacs wasn&apos;t loading my directory local configs at all!
&lt;/p&gt;

&lt;p&gt;
As it turns out, I had configured emacs with a hook to load LSP for the C++ major mode. The way I&apos;d done this was with a &lt;code&gt;use-package&lt;/code&gt; hook as follows:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;&lt;span style=&quot;color: #fe8019;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #fb4934;&quot;&gt;use-package&lt;/span&gt; &lt;span style=&quot;color: #d3869b;&quot;&gt;lsp-mode&lt;/span&gt;
  &lt;span style=&quot;color: #fe8019;&quot;&gt;:ensure&lt;/span&gt; t
  &lt;span style=&quot;color: #fe8019;&quot;&gt;:init&lt;/span&gt; &lt;span style=&quot;color: #cc241d;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #fb4934;&quot;&gt;setq&lt;/span&gt; lsp-keymap-prefix &lt;span style=&quot;color: #b8bb26;&quot;&gt;&quot;C-c l&quot;&lt;/span&gt;&lt;span style=&quot;color: #cc241d;&quot;&gt;)&lt;/span&gt;
  &lt;span style=&quot;color: #fe8019;&quot;&gt;:hook&lt;/span&gt; &lt;span style=&quot;color: #cc241d;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #b8bb26;&quot;&gt;(&lt;/span&gt;c++-mode . lsp&lt;span style=&quot;color: #b8bb26;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #cc241d;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #fe8019;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
This meant that as soon as I was opening a file in &lt;code&gt;myrepo2&lt;/code&gt;, LSP was being loaded straight away and &lt;b&gt;failing&lt;/b&gt; to load (because it was using the wrong client which didn&apos;t have the right path mappings), and in the process causing the dir local variables to fail to load as well!
&lt;/p&gt;

&lt;p&gt;
Imagine my confusion as I had directory local variables that just weren&apos;t being applied!
&lt;/p&gt;

&lt;p&gt;
The solution is deceptively simple: load LSP in deferred mode. This gives Emacs the chance to &lt;i&gt;first&lt;/i&gt; apply the directory local variables, &lt;i&gt;and then&lt;/i&gt; let LSP load, by which point LSP will see the enabled clients variable and load the right client. You can do this with:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;&lt;span style=&quot;color: #fe8019;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #fb4934;&quot;&gt;use-package&lt;/span&gt; &lt;span style=&quot;color: #d3869b;&quot;&gt;lsp-mode&lt;/span&gt;
  &lt;span style=&quot;color: #fe8019;&quot;&gt;:ensure&lt;/span&gt; t
  &lt;span style=&quot;color: #fe8019;&quot;&gt;:init&lt;/span&gt; &lt;span style=&quot;color: #cc241d;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #fb4934;&quot;&gt;setq&lt;/span&gt; lsp-keymap-prefix &lt;span style=&quot;color: #b8bb26;&quot;&gt;&quot;C-c l&quot;&lt;/span&gt;&lt;span style=&quot;color: #cc241d;&quot;&gt;)&lt;/span&gt;
  &lt;span style=&quot;color: #fe8019;&quot;&gt;:hook&lt;/span&gt; &lt;span style=&quot;color: #cc241d;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #b8bb26;&quot;&gt;(&lt;/span&gt;c++-mode . lsp-deferred&lt;span style=&quot;color: #b8bb26;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #cc241d;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #fe8019;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
Et voila! LSP Docker working just fine 😉
&lt;/p&gt;
</description>
        <pubDate>Mon, 11 Apr 2022 05:41:31 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2022/02/2022-04-11-lsp-docker-mode-with-multiple-clients/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2022/02/2022-04-11-lsp-docker-mode-with-multiple-clients/</guid>
        
        
        <category>tech</category>
        
        <category>emacs</category>
        
        <category>lsp</category>
        
        <category>docker</category>
        
      </item>
    
      <item>
        <title>uint64 encoded in Protobuf bytes looks wrong</title>
        <description>&lt;p&gt;
Today as I was trying to debug an issue, I had to interpret a Protobuf message that happened to have a uint64 in it. I only had access to the packet capture and was getting a mixture of: a) Wireshark being able to successfully read and interpret the uint64 apparently correctly and b) when trying to convert the hex bytes into decimal using the calculator getting a very different number, oh and c) getting 9 bytes for a uint64 instead of the expected 8.
&lt;/p&gt;

&lt;p&gt;
I spent far too much time looking at this and it wasn&apos;t an exercise in futility either. I had two packet captures and Wireshark was only interpreting one of them correctly. The goal of being able to convert these bytes by hand back to their decimal representation was as a means to then be able to do it in the one that Wireshark was failing to parse.
&lt;/p&gt;

&lt;p&gt;
The key to solve the riddle lies in how &lt;a href=&quot;https://developers.google.com/protocol-buffers/docs/encoding#varints&quot;&gt;varint&lt;/a&gt; is encoded on the wire. The Protobuf docs give more detail but the short of it is that each byte has its most significant bit set to 1 if there are more bytes following. This means that if you have the byte 0x00, it will actually show up on the wire as 0x80 (or in binary 10000 0000).
&lt;/p&gt;

&lt;p&gt;
Giving a more concrete example, the decimal number 30000 is encoded in binary as 0111 0101 0011 0000. On the wire, this would show up as 1111 1101 1011 0000 (note all bytes have their most significant bit set, except the last one). Converting that binary back to decimal leaves us with 64944, not 30000.
&lt;/p&gt;

&lt;p&gt;
And that&apos;s it. Watch out when interpreting Protobuf messages from the wire!
&lt;/p&gt;
</description>
        <pubDate>Wed, 09 Feb 2022 18:46:31 +0000</pubDate>
        <link>https://www.tiagoespinha.net/2022/02/2022-02-09-grpc-protobuf-uint64-wrong/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2022/02/2022-02-09-grpc-protobuf-uint64-wrong/</guid>
        
        
        <category>tech</category>
        
        <category>protobuf</category>
        
        <category>grpc</category>
        
      </item>
    
      <item>
        <title>HTTPS with custom domains on Azure CDN</title>
        <description>&lt;p&gt;
My blog is written in &lt;a href=&quot;https://jekyllrb.com/&quot;&gt;Jekyll&lt;/a&gt;. Simply put, Jekyll takes documents written in Markdown (similar to what you could use to write &lt;code&gt;README&lt;/code&gt; files in a Git repository) and allows you to build that into HTML that any browser can understand. It also allows you to very easily apply a theme on your blog such that with the same content, you could easily change the look of your blog.
&lt;/p&gt;

&lt;p&gt;
On a bit of a tangent, these latest few posts have been written using Emacs&apos; &lt;a href=&quot;https://orgmode.org/&quot;&gt;org-mode&lt;/a&gt; which you can think of as a special Markdown that Emacs is really good at editing.
&lt;/p&gt;

&lt;p&gt;
Because Jekyll itself is quite flexible, it allows you to sideload pre-generated HTML posts, alongside the normal Markdown ones. So currently I generate my HTML straight out of &lt;code&gt;org-mode&lt;/code&gt; and let Jekyll index and display those posts.
&lt;/p&gt;

&lt;p&gt;
Azure then allows you to take a bunch of static HTML files, put them in a storage account, and serve them as a static website. This blog post assumes that that&apos;s where you&apos;re starting. You have a static website hosted on Azure. And if you don&apos;t, the three links below should get you to that point. If they don&apos;t, drop me a message and I&apos;ll be happy to help.
&lt;/p&gt;

&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.microsoft.com/en-us/azure/storage/common/storage-account-create?tabs=azure-portal#:~:text=Azure%20Create%20Storage%20Account%201%20On%20the%20Azure,3%20and%2024%20characters%20in%20...%20See%20More.&quot;&gt;Create a storage account that will hold your files.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.microsoft.com/en-us/azure/storage/blobs/storage-blob-static-website&quot;&gt;Enable the static website feature on Azure.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://azure.microsoft.com/en-us/features/storage-explorer/&quot;&gt;Upload the files using something like Microsoft Azure Storage Explorer.&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
Once you&apos;ve gone through those steps, you should end up with something similar to this in your storage account:
&lt;/p&gt;

&lt;div &gt;
  &lt;p&gt;&lt;img style=&quot;margin: auto;&quot; src=&quot;/assets/staticwebsite.jpeg&quot; width=&quot;700&quot; alt=&quot;Image showing Static Website enabled on Azure&quot;&gt;&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;
When you&apos;re at this stage, your website is accessible at that &lt;code&gt;Primary endpoint&lt;/code&gt;. In this case that is &lt;a href=&quot;https://tiagoespinhanet.z33.web.core.windows.net/&quot;&gt;https://tiagoespinhanet.z33.web.core.windows.net/&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
That&apos;s quite the URL to memorise and to type out every time someone wants to access your blog though!
&lt;/p&gt;

&lt;p&gt;
Not only that, but that URL is region-specific. Because my storage account is in the UK South region, anyone anywhere in the world hitting that endpoint is going to have my blog served off Azure servers located in that UK South region. Works well for me but for someone in Australia, it&apos;s going to have less than ideal latency and loading speeds.
&lt;/p&gt;

&lt;p&gt;
A common pattern to deal with this is to use a &lt;a href=&quot;https://en.wikipedia.org/wiki/Content_delivery_network&quot;&gt;Content Delivery Network (CDN)&lt;/a&gt;. The CDN replicates the static content across a network that&apos;s distributed across the globe, such that whenever you access the content, you get served by a point of presence that&apos;s closest to you.
&lt;/p&gt;

&lt;p&gt;
Azure makes setting this up a trivial matter.
&lt;/p&gt;

&lt;p&gt;
Head over to the CDN profiles in Azure, which takes you to the following page:
&lt;/p&gt;

&lt;div &gt;
  &lt;p&gt;&lt;img style=&quot;margin: auto;&quot; src=&quot;/assets/cdnprofiles.jpeg&quot; alt=&quot;Image showing Azure&apos;s CDN profiles page.&quot;&gt;&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;
You then &lt;code&gt;Create&lt;/code&gt; a new CDN profile which takes you to the following page:
&lt;/p&gt;

&lt;div &gt;
  &lt;p&gt;&lt;img style=&quot;margin: auto;&quot; src=&quot;/assets/newcdnprofile.jpeg&quot; alt=&quot;Image showing Azure&apos;s CDN new profile page.&quot;&gt;&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;
The things to watch out for are:
&lt;/p&gt;

&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;Choose the &lt;code&gt;Pricing tier&lt;/code&gt;. There are different tiers, from different vendors, which provide different functionality (a comparison is available if you follow the &lt;code&gt;View full pricing details&lt;/code&gt; link). The &lt;code&gt;Standard Microsoft&lt;/code&gt; tier in particular allows for URL redirect and rewrite, which the Standard Akamai and Verizon tiers don&apos;t and is useful for redirecting HTTP to HTTPS.&lt;/li&gt;
&lt;li&gt;Tick &lt;code&gt;Create new CDN endpoint&lt;/code&gt;. Assuming this is your first CDN, you need to create a new endpoint that can be used to reach your CDN On.&lt;/li&gt;
&lt;li&gt;Give you CDN endpoint a name. This is completely up to you. Your visitors &lt;i&gt;can&lt;/i&gt; find out this value if they want, even if you later use a custom domain. So don&apos;t use anything that you wouldn&apos;t want exposed publicly.&lt;/li&gt;
&lt;li&gt;Pick an Origin type. For this example, pick &lt;code&gt;Storage static website&lt;/code&gt; since we&apos;re looking to link this CDN with the &lt;code&gt;Storage static website&lt;/code&gt; that you can create following the steps linked above.&lt;/li&gt;
&lt;li&gt;Pick the right &lt;code&gt;Origin hostname&lt;/code&gt; from the drop down box below. It should be showing you all the hostnames you have available as part of storage static websites.&lt;/li&gt;
&lt;/ol&gt;
</description>
        <pubDate>Sun, 20 Jun 2021 05:47:31 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2021/06/2021-06-20-https-with-custom-domains-on-azure-cdn/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2021/06/2021-06-20-https-with-custom-domains-on-azure-cdn/</guid>
        
        
        <category>tech</category>
        
        <category>emacs</category>
        
      </item>
    
      <item>
        <title>Starting a new role</title>
        <description>&lt;p&gt;
As of the 12th of June and after nearly four years, I&apos;m no longer working at Ocado. At Ocado I had the opportunity to work with a number of amazing people and on amazing projects. I also picked up immense knowledge and new hobbies as well.
&lt;/p&gt;

&lt;p&gt;
But now it&apos;s time for a new challenge.
&lt;/p&gt;

&lt;p&gt;
Come Monday, I&apos;ll be working for the Metaswitch part of Microsoft. It&apos;s nothing short of surreal to interview for and start a new role remotely but Microsoft made the process really easy and smooth. In the meanwhile I&apos;ve had a chance to meet part of my team face to face in a nice outdoors team lunch and everyone seems very nice.
&lt;/p&gt;

&lt;p&gt;
With the three weeks I had between jobs (between leftover PTO at Ocado and the fact that at Microsoft there are fixed days of the month to onboard new-starters), I decided to work on my side projects and brush up on my C++ skills which I hadn&apos;t used for a while. One of these side projects came sort of impromptu: I decided I was going to eat some of my own (future) dog food and move my blog (this one where you&apos;re reading this) to Microsoft Azure. This blog has no backend and is composed of static pages which are generated by a mix of Emacs&apos; &lt;code&gt;org-mode&lt;/code&gt; and Jekyll. As such all it really needs is something that can serve files behind custom domains with HTTPS.
&lt;/p&gt;

&lt;p&gt;
In these three weeks I also finally managed to get my Home Assistant instance talking to my IKEA Tradfri smart lamps, as well as all the Xiaomi switches and motion sensors using Zigbee2mqtt. It now means that in the rooms where I have a motion sensor, the lights come on and turn off automatically, without ever touching the switches.
&lt;/p&gt;

&lt;p&gt;
With all of that sorted out and out of the way, I&apos;m all set to start anew. I have my Microsoft hardware ready, my new desk set up, and I have a call set up for Monday morning with my new manager where we&apos;re going to go through my account setup.
&lt;/p&gt;

&lt;p&gt;
Time for a fresh start :)
&lt;/p&gt;
</description>
        <pubDate>Sat, 19 Jun 2021 14:48:00 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2021/06/2021-06-19-starting-a-new-role/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2021/06/2021-06-19-starting-a-new-role/</guid>
        
        
        <category>job</category>
        
        <category>tech</category>
        
      </item>
    
      <item>
        <title>Blogging with org-mode!</title>
        <description>&lt;p&gt;
I&apos;ve been meaning to come back to blogging more frequently, but the whole set up that the blog requires was putting me off.
&lt;/p&gt;

&lt;p&gt;
Just as it happens, I&apos;ve recently gotten into Emacs and the whole org-mode cult, and naturally, started trying to do everything on emacs :-).
&lt;/p&gt;

&lt;p&gt;
One of the things I came across, was an approach to write Jekyll posts by using an org file to fill in the contents, which is exactly how this blog post was written.
&lt;/p&gt;

&lt;p&gt;
Hopefully this will make it easier for me to come back to a more regular blogging cadence.
&lt;/p&gt;

&lt;p&gt;
Time will tell!
&lt;/p&gt;
</description>
        <pubDate>Sun, 31 Jan 2021 14:14:31 +0000</pubDate>
        <link>https://www.tiagoespinha.net/2021/01/2021-01-21-blogging-with-org-mode/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2021/01/2021-01-21-blogging-with-org-mode/</guid>
        
        
        <category>tech</category>
        
        <category>emacs</category>
        
      </item>
    
      <item>
        <title>Making the (sad) case for a hard Brexit</title>
        <description>&lt;p&gt;It’s not very frequently that I write about politics in this blog. It’s not very frequently that I write about anything really, but here’s an attempt to change that!&lt;/p&gt;

&lt;p&gt;First off, a disclaimer: Brexit sucks. I did not vote for it. I’d much rather have the UK in the European Union. It simplifies life for the movement of goods and people.&lt;/p&gt;

&lt;p&gt;But Brexit’s here. And the Conservative party have, from the very beginning, made it clear that they would make &lt;em&gt;“the will of the people”&lt;/em&gt; heard and Brexit would happen
one way or another.&lt;/p&gt;

&lt;p&gt;And now here’s the kicker: they’re right. Whether you like it or not, the people voted for this. It was a fairly marginal vote. Some people will try and make the
case that marginal votes on such big issues should have a rerun (i.e., a second referendum), especially once it’s become more concrete what they are voting on.&lt;/p&gt;

&lt;p&gt;But here’s the thing: the people voted for Brexit despite all the uncertainties, and despite all the flat out lies that they were being told. If the people of a country
can’t recognise such lies, that makes you wonder why we’re allowing direct votes (i.e., referendums) on anything. Yes, I am saying that people who vote for something
based on a lie and don’t do their own research are thick. The reality is though that the current British political system allows for direct voting, no matter how
involved the topic is, and no matter the lies being told about it.&lt;/p&gt;

&lt;p&gt;Are the liars to blame? Yes, partially. Although if a political system doesn’t protect itself against lies (and it’s not only the British one that doesn’t, many don’t, see the USA)
it’s just a matter of time before they’re abused to gain political advantage.&lt;/p&gt;

&lt;p&gt;But Brexit’s here.&lt;/p&gt;

&lt;p&gt;And why is hard Brexit truly the only way forward?&lt;/p&gt;

&lt;p&gt;The European Union have made it implicitly clear that allowing the UK to leave the union with a better deal than what they had within the union is a non-starter.
It would open the door for more countries to leave and would effectively be the beginning of the end for the European Union as a thing.&lt;/p&gt;

&lt;p&gt;The European Union is also larger than the UK and as such probably has a higher chance at being self-sustainable without the UK-related trade, or with it severely
hampered. This puts the UK between a rock and a hard place. The EU refuses to give the UK a better (or even an as-good-as) deal, and they have the upper hand in the
negotiations.&lt;/p&gt;

&lt;p&gt;Also, with the number of backtracks the Conservative government was cornered into by the House of Commons, the EU has also realised that there is  unrest within the UK towards a hard Brexit and they’ve been
using that to their advantage in the negotiations. It is true that a negotiation is give and take, but if you’re certain that your counterpart will fold if you
stand your ground (by a vote in the House of Commons effectively forbidding a hard Brexit), then the only negotiation strategy that you need is really to… stand your ground.&lt;/p&gt;

&lt;p&gt;Is it negotiating in bad faith?&lt;/p&gt;

&lt;p&gt;Negotiations are conceptually bad faith endeavours. You have two parties trying to maximise the benefits they will get out of a deal.&lt;/p&gt;

&lt;p&gt;Selling a house? As a seller you want to maximise the value you sell it for (maximising your monetary benefit). The buyer will want to minimise the amount they have to pay (maximising the value for money they’re getting).&lt;/p&gt;

&lt;p&gt;Own a house in an area that’s going to be reposessed by the government to build some sort of essential infrastructure (wink, wink HS2) and the place where your house
sits is the only place where that infrastructure can stand?&lt;/p&gt;

&lt;p&gt;Damn right you’re going to negotiate in bad faith and get the best out of the situation.&lt;/p&gt;

&lt;p&gt;Damn right the government is going to do their best to make sure you’re not aware that this is the case.&lt;/p&gt;

&lt;p&gt;All this to say that the UK’s only possible strategy (whether it does want a deal or not, which is a separate discussion in itself) is to do everything to &lt;em&gt;show&lt;/em&gt; that it is ready
and to ideally &lt;em&gt;truly&lt;/em&gt; be ready. It needs to literally be ready to leave without a deal, because it might, because a proper negotiation takes things all the way through,
and because it shows the other party that you’re dead serious and is your best bet at getting them to fold and give you better terms.&lt;/p&gt;

&lt;p&gt;And this is the key argument: if the UK is going to have Brexit, and if it has a number of key topics it sees as sticking points in the negotiation that it wants the EU to fold on
it must take it all the way through. We might leave without a deal and when we do I’d rather there are measures in place to try as much as possible to ease the friction
of trade, even if prices go up, than if we do nothing and show no readiness whatsoever.&lt;/p&gt;

&lt;p&gt;I’ll end this post with the same disclaimer I started with: I’d rather we did not have Brexit. As a citizen of the EU, who’s lived in three different countries over the past decade
this absolutely stinks.&lt;/p&gt;

&lt;p&gt;But at this stage, there’s not enough momentum for reversing Brexit. And with it happening either way, negotiating for a better deal (and possibly folding at the last second)
is a sensible thing to do. Depending on how confident the government is in the readiness, taking it all the way without a deal might be the only way to show the EU that not even
being listed as a third country (as other countries are with the EU) will only push the UK further away from the negotiating table.&lt;/p&gt;
</description>
        <pubDate>Sun, 27 Sep 2020 07:32:00 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2020/09/making-the-sad-case-for-a-hard-brexit/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2020/09/making-the-sad-case-for-a-hard-brexit/</guid>
        
        
        <category>politics</category>
        
      </item>
    
      <item>
        <title>Clojure: beware of the partial</title>
        <description>&lt;p style=&quot;text-align: justify;&quot;&gt;At some point in time while using &lt;a href=&quot;http://clojure-liberator.github.io/liberator/&quot;&gt;Liberator&lt;/a&gt; to build &lt;em&gt;semi-RESTful&lt;/em&gt; APIs, I found myself in a pickle. Essentially, the Liberator library allows you to build an API by specifying a number of handlers (effectively functions) for things like handling a malformed request, handling a non-existant request, and also allowing handlers for determining what &lt;em&gt;are&lt;/em&gt; malformed or non-existant requests.&lt;/p&gt;

&lt;p&gt;This approach to building an API is pretty straight forward. To help it, &lt;strong&gt;Liberator&lt;/strong&gt; passes a “&lt;em&gt;context&lt;/em&gt;” argument into each of these handlers by default which carries information such as HTTP headers and whatever else you feel like adding to it throughout the validation pipeline until the request gets handled by the “&lt;em&gt;handle-ok&lt;/em&gt;” handler.&lt;/p&gt;

&lt;p&gt;Then, at some point or another, you will be wanting to pass more arguments into these handlers. Clojure (and functional programming in general) discourage the use of global mutable state and encourages single-purpose, idempotent and side-effect free functions, meaning that you should be able to run the same function twice, with the same arguments, and get the same outcome (this usually will not be possible if the function depends/operates on shared global variables). Then what can you do? Liberator expects single-argument handlers to which it can pass its “&lt;em&gt;context&lt;/em&gt;” argument but we want to also pass additional arguments to it which will be evaluated and/or resolved at runtime.&lt;/p&gt;

&lt;p&gt;After some googling on the issue, I found out a solution: partial functions! When partial is applied on a particular function with a set of arguments, rather than evaluating that function, it will create a wrapper function around it which will pass in the specified arguments plus whatever other arguments are passed in when the function is evaluated. It works something like this:&lt;/p&gt;

&lt;div class=&quot;language-clojure highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;partial&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;is-malformed?&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;config&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;In this case, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;partial&lt;/code&gt; will return another function which will have &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;config&lt;/code&gt; as first argument and also support a &lt;strong&gt;variable&lt;/strong&gt; amount of arguments. Great! This works, it solves the problem. Liberator will call the returned function, pass the &lt;em&gt;context&lt;/em&gt; into it, et voilà! Bob’s your uncle, klaar is Kees, job’s a good’un.&lt;/p&gt;

&lt;h1 id=&quot;but-wait-the-title-says-beware&quot;&gt;But wait!… the title says beware!&lt;/h1&gt;

&lt;p&gt;Yes, that’s because in this case, if you have a preset number of additional arguments that you’d like to pass into your handler, you should &lt;strong&gt;NOT&lt;/strong&gt; be using partials! You see, a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;partial&lt;/code&gt; application results &lt;strong&gt;always&lt;/strong&gt; in a variadic function, or a function which supports a variable number of arguments. When you have a varargs function, Clojure will create a list out of the arguments (every. single. time.) and then use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;apply&lt;/code&gt; to push those arguments into the function. This has a particular performance impact which you should avoid if you can, and… you can!&lt;/p&gt;

&lt;h1 id=&quot;so-how-should-it-be-done&quot;&gt;So how should it be done?&lt;/h1&gt;

&lt;p&gt;Hey, it’s &lt;strong&gt;functional&lt;/strong&gt; programming right? Just evaluate an additional (potentially even anonymous, since it’s so small) function which takes a single argument (to validate the requirement for Liberator) and wraps around the handler you’ve created passing in both the argument (which you will capture as a closure into the anonymous function) and the context argument coming from Liberator. In the end, the same example as above would look something like this:&lt;/p&gt;

&lt;div class=&quot;language-clojure highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ctx&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;is-malformed?&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;config&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ctx&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Or if you want to use the &lt;a href=&quot;https://en.wikibooks.org/wiki/Learning_Clojure/Reader_Macros&quot;&gt;reader macro&lt;/a&gt; and make the code more compact:&lt;/p&gt;

&lt;div class=&quot;language-clojure highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;o&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;is-malformed?&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;config&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;And that’s it! This is about as efficient and compact as you can make it.&lt;/p&gt;

&lt;h1 id=&quot;to-conclude&quot;&gt;To conclude…&lt;/h1&gt;

&lt;p&gt;Don’t use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;partial&lt;/code&gt; unless you have a true need for a &lt;strong&gt;variable&lt;/strong&gt; number of arguments at &lt;strong&gt;runtime&lt;/strong&gt;. If you need a function which takes more arguments that what a library/whatever passes to your function, just wrap it in another function and enclosure your additional arguments into it.&lt;/p&gt;
</description>
        <pubDate>Mon, 19 Dec 2016 00:00:00 +0000</pubDate>
        <link>https://www.tiagoespinha.net/2016/12/clojure-beware-of-the-partial/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2016/12/clojure-beware-of-the-partial/</guid>
        
        <category>clojure</category>
        
        
        <category>Software</category>
        
      </item>
    
      <item>
        <title>Home Automation with Clojure (part 1)</title>
        <description>&lt;p style=&quot;text-align: justify;&quot;&gt;Those who know me, know that I like simplifying things. Tasks that are repetitive quickly become chores which nobody wants to do. That’s probably one of the reasons why humanity started automating things from production pipelines to software testing.&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;One of the things I’ve been building along the past few months is a home automation API. Specifically a web API which allows me, via HTTP calls, to control various aspects of my wannabe-smart home.&lt;/p&gt;

&lt;p&gt;What do I have in my smart home, you ask? I have:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Philips Hue lights in my kitchen, living room and house entrance.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Surveillance cameras with motion detection.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Flic buttons to control those smart appliances.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;hue-lights&quot;&gt;Hue lights&lt;/h1&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;This all started with having the Hue lights. Once you have them, you realize how convenient it is to be in bed with your smartphone and not having to care whether you turned off the lights around the house, since you can just grab your phone and turn them all off. Still, once you’re able to do that, you realize that you can no longer use your house’s built-in light switches since the lights need to be always on in order to function (n.b., they are always supplied current in order to stay connected to the control base but they consume very little power when they are soft-shut down). Well, that sucks! Now you went from a situation where you could flip a switch and “let there be light!” to a situation where you always need your smartphone close by just to turn on your lights: not convenient.&lt;/p&gt;

&lt;h1 id=&quot;enter-the-flic-buttons&quot;&gt;Enter the Flic buttons&lt;/h1&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;At some point I read about the Flic buttons. They’re basic tools really, just a push button attached to a bluetooth module which will pair to a device (e.g., an Android phone) and trigger whenever you click it, double click it or long click it. Then it’s up to you to define what each trigger will do on the attached device.&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;Initially I bought these buttons and they were working out really fine. Their Android app is very decent and provides integration with, amongst others, Philips Hue. Still, I ran into a less than ideal scenario: if I configured the app on my phone, then whenever I wasn’t home nobody else could turn on or turn off the lights using the Flic buttons (since my phone would not be in range of the bluetooth network). I could have also configured the app on my wife’s phone but whenever my parents or anyone eelse would visit, the problem would remain. I would run into having to configure the app countless times for whoever would be visiting me at the time.&lt;/p&gt;

&lt;h3 id=&quot;flic-linux-sdk-to-the-rescue&quot;&gt;Flic Linux SDK to the rescue&lt;/h3&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;What Flic also provides is a &lt;a href=&quot;https://github.com/50ButtonsEach/fliclib-linux-hci&quot;&gt;Linux SDK&lt;/a&gt;, meaning that if you have a Linux device with a supported bluetooth dongle, you can create a program that effectively does the same as Flic’s own Android app: listen to specific events of specific buttons and perform tasks accordingly.&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;That’s what I did. I created a Java program (a really simple and stupid one that I’m ashamed to show 😛) which on startup connects to all the buttons and stays in a while loop listening to events from the buttons. But what a minute! How am I going to control my lights now? Oh, that’s right Hue has a Web API.&lt;/p&gt;

&lt;h3 id=&quot;come-the-hue-web-api&quot;&gt;Come the Hue web API&lt;/h3&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;The Hue web API is fairly decent. They provide an online emulator straight from your Hue control base and from there it’s fairly straight forward to get started. They have documentation which gets you up and running quite fast but… it’s rather limited. In particular, there was a use case of mine which wasn’t covered: toggling lights. Specifically I wanted to toggle a light on the click of a button so that rather than remembering “one click is for turning on, two clicks is for turning off” and effectively already wasting two actions of a Flic button, I could have an action that’s just… toggle the light. If it’s on, turn it off. If it’s off, turn it to whatever state it last had.&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;This, sadly, is not possible (to the best of my knowledge). Philips has decided to implement a very purist (and thus inconvenient) REST API. In a REST API you’re supposed to send a &lt;strong&gt;new&lt;/strong&gt; and &lt;strong&gt;wholesome&lt;/strong&gt; representation of the entity you are POST-ing or PUT-ing to. REST APIs, which are in principle stateless, should therefore not refer to the previous state. Technicalities aside, it’s an inconvenient API.&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;strong&gt;What to do then?&lt;/strong&gt; Simple. I built my own API, exposed to the Internet, which allows me to control my Hue lamps via (more convenient and flexible) HTTP requests. As some people have pointed out to me, it’s something like a proxy… except it’s a stateful one. By now it also has a lot more functionality than what I could squeeze out of a proxy.&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;The end result is a Clojure-based web API which allows me to remotely perform actions like toggling a particular light in my home. It also now supports geofencing (e.g., when someone arrives home and it’s after sunset, turn on the entrance light) and voice commands but I will leave that to another post.&lt;/p&gt;
</description>
        <pubDate>Sat, 17 Dec 2016 00:00:00 +0000</pubDate>
        <link>https://www.tiagoespinha.net/2016/12/home-automation-with-clojure-part-1/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2016/12/home-automation-with-clojure-part-1/</guid>
        
        <category>home automation</category>
        
        <category>clojure</category>
        
        <category>home api</category>
        
        
        <category>Software</category>
        
      </item>
    
      <item>
        <title>New Year&apos;s Resolution&amp;#58; Blog more!</title>
        <description>&lt;p&gt;Admittedly I’m not the most avid blogger there is. Nonetheless, I keep this blog up and running just for the sake of it. This blog has been alive since 2008 (that’s 8 years already!) and since then a lot has changed — this blog hasn’t escaped the wave of change either.&lt;/p&gt;

&lt;p&gt;So here’s my committment to 2017: BLOG MORE!&lt;/p&gt;

&lt;p&gt;Shorter blog posts, blogging about technologies that I love, and keeping a track of what I’m working on.&lt;/p&gt;

&lt;p&gt;2016 has been marked mostly by a realization: my time is extremely limited! But writing about things is as important as making them, especially so in the world of technology.&lt;/p&gt;

&lt;p&gt;Cheers to a better 2017! And expect some blog posts coming up on Clojure, and maybe Scala.&lt;/p&gt;

&lt;p&gt;Haven’t you heard? I’m in love with functional programming 😉.&lt;/p&gt;
</description>
        <pubDate>Thu, 15 Dec 2016 19:52:00 +0000</pubDate>
        <link>https://www.tiagoespinha.net/2016/12/new-years-resolution-getting-back-to-blogging/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2016/12/new-years-resolution-getting-back-to-blogging/</guid>
        
        <category>new year</category>
        
        <category>more blogging</category>
        
        <category>meta</category>
        
        
        <category>Software</category>
        
      </item>
    
      <item>
        <title>Why I started using emacs (and why you shouldn&amp;#8217;t)</title>
        <description>&lt;p style=&quot;text-align: justify;&quot;&gt;
  In what feels like a long time ago, I &amp;#8211; as the curious software engineer that I am &amp;#8211; began a journey. I had decided to try vim (&lt;em&gt;&amp;#8220;wha&amp;#8230;? It said emacs in the title&amp;#8230; is this the right art&amp;#8230;&amp;#8221;&lt;/em&gt; &amp;#8212; yes it is, just keep on reading). It&amp;#8217;d always baffled me why would people use such a barebones editor over a proper IDE but I figured, if so many people were using it and following it almost as a cult, there &lt;em&gt;must&lt;/em&gt; be something to it. So I sat down and forced myself to learn some basics to get me started. And, of course, I started by learning how to &lt;em&gt;quit&lt;/em&gt; the editor (relevant side joke: &lt;em&gt;Q: How do you generate a random string? A: Put a Windows user in front of vi, and tell them to exit.&lt;/em&gt;), learned about the different modes and I learned basic things like moving forwards and backwards by units of words, and how to delete multiple lines and how to go to a certain line, etc. Basically the kind of thing I would be faced with whilst using vim to actually achieve something programming-wise.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  [Continue Reading]
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;!--more--&gt;
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  And it was glorious.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  The muscle memory started forming and it became second nature. Vim became part of my tool belt and, when it came to editing files, I started to use it for &lt;em&gt;everything. &lt;/em&gt;Delete lines in bulk? Got it. Search and replace the whole document with regular expressions? Piece of cake. Moving around the document by using search rather than painstakingly scrolling my way to it? Hell yeah.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  As part of my vim usage, I also created a very small .vimrc which loaded some basic plugins and set the tabbing policies to something sensible (spaces master race!), but that was it, and all was well.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Then one day, I woke up and thought: &lt;em&gt;&amp;#8220;heh, it&amp;#8217;s funny, I&amp;#8217;ve heard about the &lt;a href=&quot;https://en.wikipedia.org/wiki/Editor_war&quot;&gt;editor war&lt;/a&gt; but I never really took the time to see what&amp;#8217;s on the other side of the fence&amp;#8221;&lt;/em&gt; and so I decided to climb the fence and have a quick peek. I equipped myself with emacs and, again, forced myself to go through the same bootcamp I had forced myself to years earlier with vim. Not only did I do the same thing, but because my muscle memory was already developed around vim, I started noting down the key combinations for the most common things I was doing in vim, except this time in emacs.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Editor-wise, I didn&amp;#8217;t feel much difference in productivity. It was when I started exploring the different plugins and available customizations that I got really hooked. You see, emacs has its equivalent of the .vimrc file, the init.el. Here is where you can load plugins and set configuration variables to be loaded on emacs&amp;#8217; startup. While in the process of trying to customize emacs to behave the same way &lt;em&gt;my&lt;/em&gt; vim was behaving with regards to tabbing and directory explorer (I was using NERDTree) I found out how that in emacs you can simply set up MELPA, emacs&amp;#8217; package repository, and install everything through it. Emacs has its own package repository. Mind blown. Every single mainstream plugin is available at the distance of Alt + X (M-x in emacs notation), writing package-install, and then typing the name of the package. It&amp;#8217;s like your editor has its own version of &lt;em&gt;apt-get&lt;/em&gt;.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Since this exotic new editor (which contrary to vim is always in edit mode) was allowing me to discover, install and configure a whole range of plugins through a package repository, I started installing and configuring. That&amp;#8217;s when mind blown #2 came. To load and configure this plugins via the &lt;em&gt;init.el&lt;/em&gt; file I was writing elisp code. That&amp;#8217;s right, emacs is built around elisp, its own dialect of a functional programming lisp language. I&amp;#8217;d never done any functional programming before, but damn, I was enjoying it thoroughly. I&amp;#8217;d never done any Vimscript before but I&amp;#8217;d heard horror stories about it, and elisp, by opposition, was being a walk in a very pleasant park with a warm breeze flowing through.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  After all was said and done, and after gradually (over the course of days) customizing my init.el to my liking, my emacs was looking no different than a fancy Atom or Sublime Text. Below you&amp;#8217;ll find a comparison of what emacs looks like out of the box (courtesy of GNU) and what &lt;em&gt;my&lt;/em&gt; emacs looks like sporting the monokai theme:&lt;img class=&quot;wp-image-775 aligncenter&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2016/05/splash.png&quot; alt=&quot;splash&quot; width=&quot;500&quot; height=&quot;453&quot; srcset=&quot;https://www.tiagoespinha.net/wp-content/uploads/2016/05/splash.png 722w, https://www.tiagoespinha.net/wp-content/uploads/2016/05/splash-300x272.png 300w, https://www.tiagoespinha.net/wp-content/uploads/2016/05/splash-500x453.png 500w&quot; sizes=&quot;(max-width: 500px) 100vw, 500px&quot; /&gt;
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;img class=&quot;wp-image-774 aligncenter&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2016/05/Capture-1024x718.png&quot; alt=&quot;Capture&quot; width=&quot;500&quot; height=&quot;350&quot; srcset=&quot;https://www.tiagoespinha.net/wp-content/uploads/2016/05/Capture-1024x718.png 1024w, https://www.tiagoespinha.net/wp-content/uploads/2016/05/Capture-300x210.png 300w, https://www.tiagoespinha.net/wp-content/uploads/2016/05/Capture-768x538.png 768w, https://www.tiagoespinha.net/wp-content/uploads/2016/05/Capture-500x350.png 500w, https://www.tiagoespinha.net/wp-content/uploads/2016/05/Capture-900x631.png 900w&quot; sizes=&quot;(max-width: 500px) 100vw, 500px&quot; /&gt;
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Now, a few weeks later, I look back and I think I would have done it all the same. However, beware, &lt;em&gt;don&amp;#8217;t&lt;/em&gt; get into emacs unless you really have the time to spare to have a whole new world opened to you. Are you already a functional programming guru? Then step right ahead, you&amp;#8217;ll feel right at home with emacs. Otherwise, you&amp;#8217;ll find yourself discovering &lt;em&gt;more&lt;/em&gt; than an editor. Emacs was once jokingly defined as a &amp;#8220;great operating system, lacking only a decent editor&amp;#8221;. I disagree. It &lt;em&gt;is&lt;/em&gt; an operating system, but the editor itself is awesome and kicks vim out of the park any time. By the way, did I mention that vim was &lt;em&gt;implemented &lt;/em&gt;within emacs? You will be able to use your tested and tried vim experience with all the goodness of emacs. What&amp;#8217;s more to want?
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Have fun with emacs and tell me about your experiences in the comments section below. Until the next time.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
&lt;/p&gt;
</description>
        <pubDate>Sun, 08 May 2016 17:03:33 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2016/05/why-i-started-using-emacs-and-why-you-shouldnt/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2016/05/why-i-started-using-emacs-and-why-you-shouldnt/</guid>
        
        <category>editor</category>
        
        <category>emacs</category>
        
        <category>functional programming</category>
        
        <category>Software</category>
        
        
        <category>Software</category>
        
      </item>
    
      <item>
        <title>Stuck at &amp;#8220;Preparing your Desktop&amp;#8221; After Migrating Windows Partition to SSD?</title>
        <description>&lt;p style=&quot;text-align: justify;&quot;&gt;
  Recently at work I helped a colleague migrating his laptop from a HDD to an SSD. He was dual-booting his machine with Windows 7 and Ubuntu, and after skillfully shrinking his original partitions (in order to fit the SSD), we copied the partitions over with dd from the HDD to the SSD. After that was done, Grub was understandably confused as its entries were pointing to the HDD partitions rather than the SSD partitions but even after an update-grub and grub-install from within Ubuntu, Windows still wouldn&amp;#8217;t boot.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  We consistently got stuck at &amp;#8220;Preparing your Desktop&amp;#8221; screen and eventually Windows would boot into a completely empty desktop.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Keep reading to figure out how to fix this.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;!--more--&gt;
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Even though my Windows skills have rusted from having fully migrated to Arch Linux a while back, I still remembered you could run programs from the task manager which, conveniently, is still possible to launch using the Ctrl+Alt+Del combination. Having done so allowed me to diagnose the problem: when I ran cmd.exe, Windows was mounting the SSD partition from which I was trying to boot as F:\ rather than C:\ where Windows expected everything to be.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  The fix, after you know what to do, is simple-ish.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Essentially you need to change your registry (you know, regedit) and remove all the letter mappings so that Windows will remap all your drives again at boot.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Easy right? Just launch regedit and edit away! But NO! Because you will, with 100% certainty, not be able to launch regedit!
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  So what&amp;#8217;s the solution then, how can you edit your registry without actually being able to boot into Windows?
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Nice question! We do it from Ubuntu using a nifty tool called chntpw which was originally developed (I assume&amp;#8230; based on the name&amp;#8230;) to change the password of NT-based systems.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  So! Jump on Ubuntu, get yourself chntpw installed (seriously, if you don&amp;#8217;t know how to do this, get a friend to help you as the next steps are VERY sensitive!) and do the following steps:
&lt;/p&gt;

&lt;ol style=&quot;text-align: justify;&quot;&gt;
  &lt;li&gt;
    Mount your Windows partition (from now on called &lt;WindowsPartition&gt;).
  &amp;lt;/li&amp;gt;
  &lt;li&gt;
    Run chntpw -i &lt;WindowsPartition&gt;/Windows/System32/config/system (N.B. Windows is not case-sensitive but Linux is! Therefore, your file might be called SYSTEM).
  &amp;lt;/li&amp;gt;
  &lt;li&gt;
    From the menu, choose option 9 (Registry Editor).
  &lt;/li&gt;
  &lt;li&gt;
    Now if you type &amp;#8220;ls&amp;#8221;, one of the items should be &amp;#8220;MountedDevices&amp;#8221;.
  &lt;/li&gt;
  &lt;li&gt;
    Enter it by typing &amp;#8220;cd MountedDevices&amp;#8221;.
  &lt;/li&gt;
  &lt;li&gt;
    Again if you &amp;#8220;ls&amp;#8221;, a number of entries should appear, including all your drive letter mappings (we&amp;#8217;re almost there!).
  &lt;/li&gt;
  &lt;li&gt;
    Now, I had no success actually &lt;em&gt;changing&lt;/em&gt; the mappings so I ended up simply removing all the mappings and letting Windows remapping on the next boot. To do so type &amp;#8221; dv \DosDevices\C:&amp;#8221; and repeat this command for all the mapped letters in your computer.
  &lt;/li&gt;
  &lt;li&gt;
    Do &amp;#8220;ls&amp;#8221; one more time to confirm the mappings have been deleted.
  &lt;/li&gt;
  &lt;li&gt;
    Choose option &amp;#8220;q&amp;#8221; to quit chntpw followed by &amp;#8220;y&amp;#8221; to confirm writing the registry hive file.
  &lt;/li&gt;
  &lt;li&gt;
    TADA! You&amp;#8217;re done! Boot into Windows and it should finally boot correctly.
  &lt;/li&gt;
&amp;lt;/ol&amp;gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Let me know in the comments if you&amp;#8217;re stuck in some step and I&amp;#8217;ll gladly give a hand!
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Till the next time!
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  [&lt;a href=&quot;http://members.iinet.net/~herman546/Hacking%20the%20Windows%20Registry%20with%20chntpw.html&quot; target=&quot;_blank&quot;&gt;Credit&lt;/a&gt;]
&lt;/p&gt;
&lt;/WindowsPartition&gt;&lt;/li&gt;&lt;/WindowsPartition&gt;&lt;/li&gt;&lt;/ol&gt;
</description>
        <pubDate>Tue, 08 Sep 2015 21:52:59 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2015/09/stuck-at-preparing-your-desktop-after-migrating-windows-partition-to-ssd/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2015/09/stuck-at-preparing-your-desktop-after-migrating-windows-partition-to-ssd/</guid>
        
        <category>HDD</category>
        
        <category>Migrate Windows Partition</category>
        
        <category>Software</category>
        
        <category>SSD</category>
        
        <category>Ubuntu</category>
        
        <category>Windows</category>
        
        
        <category>Software</category>
        
        <category>Windows</category>
        
      </item>
    
      <item>
        <title>Disable power management for the 8188eu driver in Raspbian</title>
        <description>&lt;p&gt;Many WIFI USB dongles out there rely on the 8188eu driver for support under Linux. In fact, in a &lt;a href=&quot;http://www.tiagoespinha.net/2014/04/how-to-get-the-tp-link-tl-wn725n-working-on-raspberry-pi/&quot;&gt;previous post&lt;/a&gt;  I covered how to compile a 8188eu driver for your own Raspbian kernel which will keep being upgraded if you are vigilant enough to run rpi-update every now and then.&lt;/p&gt;

&lt;p&gt;One thing I didn’t mention in that blog post is that certain devices which use this chipset will enter power management mode after some time.&lt;/p&gt;

&lt;p&gt;If this is the case with your device, you can fix it by creating a file called /etc/modprobe.d/8188eu.conf which loads the configuration for the 8188eu kernel module and write the following inside:&lt;/p&gt;

&lt;p&gt;options 8188eu rtw_power_mgnt=0 rtw_enusbss=0&lt;/p&gt;

&lt;p&gt;Then restart your Raspbian and you should be good to go!&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;
</description>
        <pubDate>Mon, 06 Apr 2015 21:46:20 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2015/04/disable-power-management-for-the-8188eu-driver-in-raspbian/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2015/04/disable-power-management-for-the-8188eu-driver-in-raspbian/</guid>
        
        <category>8188eu</category>
        
        <category>Raspberry Pi</category>
        
        <category>Raspbian</category>
        
        <category>raspbian wifi turns off</category>
        
        <category>Software</category>
        
        <category>wifi power management</category>
        
        
        <category>Software</category>
        
        <category>Technology</category>
        
      </item>
    
      <item>
        <title>[Photo] Jupiter and its 4 largest moons</title>
        <description>&lt;p style=&quot;text-align: justify;&quot;&gt;
  As some of you may know, I have recently taken up a new hobby. I started with (very) amateur astronomy. Now while the Dutch skies are not the best for astronomy due to having &lt;a href=&quot;http://uk.arxiv.org/pdf/astro-ph/0108052&quot;&gt;&lt;em&gt;the&lt;/em&gt; worst&lt;/a&gt; light pollution in Europe (probably due to its extensive greenhouses and the artificial lightning they require), it&amp;#8217;s still possible to see the closer objects to Earth such as the planets in our own solar system.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  [Continue reading, photos below]
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;!--more--&gt;
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  While I had seen Jupiter in multiple occasions before, as it is visible with the naked eye, seeing its four largest moons live (Europa, Io, Ganymede and Callisto) was definitely a first for me. Believe me when I say that the photograph does not do justice to the real thing and it is indeed a pity. The photo has been taken last Sunday morning (October 5th 2014 at 6:40am, before the sunrise as Jupiter then becomes invisible due to the sunlight) with my Canon EOS 550D attached to my telescope via a T2 adapter especially tailored for Canon DSLRs. While this adapter does wonders compared to aligning a mobile phone camera with the eye piece, it also attaches directly to the telescope and thus, takes no advantage of any lens-enabling magnification.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  The result is what you see below. I&amp;#8217;ve cropped the photos to show only the section where Jupiter and its moons are. Despite not being as good as looking at it through a 10mm lens on a 3x Barlow (totaling a 400x zoom), it&amp;#8217;s still quite a sight 🙂 .
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Keep scrolling for the photos and until the next time!
&lt;/p&gt;

&lt;div id=&quot;attachment_738&quot; style=&quot;width: 330px&quot; class=&quot;wp-caption aligncenter&quot;&gt;
  &lt;a href=&quot;https://www.tiagoespinha.net/wp-content/uploads/2014/10/blog2.jpg&quot; rel=&quot;lightbox[736]&quot; title=&quot;[Photo] Jupiter and its 4 largest moons&quot;&gt;&lt;img class=&quot;wp-image-738&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2014/10/blog2.jpg&quot; alt=&quot;Jupiter, photo 1&quot; width=&quot;320&quot; height=&quot;200&quot; /&gt;&lt;/a&gt;
  
  &lt;p class=&quot;wp-caption-text&quot;&gt;
    Left to right: Europa, Jupiter, Io, Ganymede and Callisto
  &lt;/p&gt;
&lt;/div&gt;

&lt;div id=&quot;attachment_737&quot; style=&quot;width: 330px&quot; class=&quot;wp-caption aligncenter&quot;&gt;
  &lt;a href=&quot;http://www.tiagoespinha.net/?attachment_id=737&quot;&gt;&lt;img class=&quot;wp-image-737&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2014/10/blog1.jpg&quot; alt=&quot;Jupiter, photo 2&quot; width=&quot;320&quot; height=&quot;200&quot; /&gt;&lt;/a&gt;
  
  &lt;p class=&quot;wp-caption-text&quot;&gt;
    Left to right: Europa, Jupiter, Io, Ganymede and Callisto
  &lt;/p&gt;
&lt;/div&gt;
</description>
        <pubDate>Mon, 06 Oct 2014 19:02:34 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2014/10/photo-jupiter-and-its-4-largest-moons/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2014/10/photo-jupiter-and-its-4-largest-moons/</guid>
        
        <category>astronomy</category>
        
        <category>Astrophotography</category>
        
        <category>Four moons</category>
        
        <category>Jupiter</category>
        
        <category>Jupiter four moons</category>
        
        <category>Jupiter four moons photo</category>
        
        <category>Jupiter photo</category>
        
        
        <category>Astronomy</category>
        
      </item>
    
      <item>
        <title>Wat is alcohol ketonatus? (What is alcohol ketonatus?)</title>
        <description>&lt;p style=&quot;text-align: justify;&quot;&gt;
  In het Nederlands: een simpel en een-zin antwoord is &lt;em&gt;alcohol ketonatus is alcohol die door gebruik van een ketone (meestal is butanon in Nederland gebruikt) zijn geur veranderd is om het ondrinkbaar te maken. Het zou dus niet gebruikt zijn om te drinken (waarom willen mensen 96% alcohol drinken is wel buiten mijn verstanding maar ja&amp;#8230;)&lt;/em&gt;.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  In English: A simple and one-sentence answer is &lt;em&gt;alcohol ketonatus is the Dutch nomenclature for alcohol that&amp;#8217;s been &amp;#8220;denaturated&amp;#8221;. Essentially, alcohol that through the usage of a ketone (in the Netherlands it&amp;#8217;s usually butanone) is made undrinkable and should not be used for human consumption.&lt;/em&gt;
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;a href=&quot;https://www.tiagoespinha.net/wp-content/uploads/2014/09/96759.jpg&quot; rel=&quot;lightbox[731]&quot; title=&quot;Wat is alcohol ketonatus? (What is alcohol ketonatus?)&quot;&gt;&lt;img class=&quot;aligncenter wp-image-732&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2014/09/96759.jpg&quot; alt=&quot;96759&quot; width=&quot;300&quot; height=&quot;300&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p style=&quot;text-align: center;&quot;&gt;
  &amp;#8212;
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Some background&amp;#8230; whilst living in the Netherlands, I often wondered why was &amp;#8220;pure alcohol&amp;#8221; nowhere to be found. There&amp;#8217;s the alcohol shops, and the supermarkets, and they all sell wines and all kinds of distilled drinks but I could never find the pure &lt;em&gt;ethanol&lt;/em&gt; which we in Portugal use to cook &lt;em&gt;chouriça&lt;/em&gt; laid on an &lt;em&gt;assador de barro&lt;/em&gt;.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  [Continue Reading]
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;!--more--&gt;
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  It turns out such ethanol &lt;i&gt;does&lt;/i&gt; exist and I found it on DIO (even though I later realized both etos and Kruidvat also sell them). Upon browsing through their online shop, I found a so-called &amp;#8220;&lt;em&gt;alcohol ketonatus&lt;/em&gt;&amp;#8221; which left me wondering what was this &amp;#8220;&lt;em&gt;ketonatus&lt;/em&gt;&amp;#8221; all about. Was this what I was looking for? Or was this some weird concoction and not suitable for what I needed?
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  After looking around I couldn&amp;#8217;t find a conclusive answer (even on Dutch websites) on what this &amp;#8220;&lt;em&gt;alcohol ketonatus&lt;/em&gt;&amp;#8221; was&amp;#8230; and that&amp;#8217;s when I decided to figure out what exactly was this &amp;#8220;ketonation&amp;#8221; process. Lo-and-behold, &amp;#8220;ketonation&amp;#8221; is basically what reads in the Portuguese alcohol bottles as &amp;#8220;&lt;em&gt;desnaturado&lt;/em&gt;&amp;#8220;, that is, made improper for human consumption.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  And now you know. If you&amp;#8217;re Portuguese and you&amp;#8217;re in the market for &lt;em&gt;álcool etílico desnaturado&lt;/em&gt;, just buy &amp;#8220;&lt;em&gt;alcohol ketonatus&lt;/em&gt;&amp;#8221; from your local DIO/Kruidvat/etos 😉
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;strong&gt;Pro tip&lt;/strong&gt;: If you&amp;#8217;re Portuguese, get yourself a hold of someone in Portugal who makes his/her own &lt;em&gt;bagaço/aguardente&lt;/em&gt; and use that instead. You&amp;#8217;ll get a better aftertaste and hey, that one can actually be drank!
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;strong&gt;Pro tip 2&lt;/strong&gt;: If you really don&amp;#8217;t know anyone who can get you a supply of &lt;em&gt;aguardente&lt;/em&gt;, or if you don&amp;#8217;t travel back to Portugal often enough, then make friends with a Chinese! Odds are they can get you some 白酒 (pronounced &lt;em&gt;bái jiǔ&lt;/em&gt; or &lt;em&gt;bai2jiu3&lt;/em&gt; or just show them the Chinese characters&amp;#8230;) which is just as good or even better!
&lt;/p&gt;
</description>
        <pubDate>Sun, 28 Sep 2014 08:29:58 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2014/09/wat-is-alcohol-ketonatus-what-is-alcohol-ketonatus/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2014/09/wat-is-alcohol-ketonatus-what-is-alcohol-ketonatus/</guid>
        
        
        <category>Life hacks</category>
        
        <category>Uncategorized</category>
        
      </item>
    
      <item>
        <title>How to see the International Space Station (ISS)</title>
        <description>&lt;p style=&quot;text-align: justify;&quot;&gt;
  Last weekend me and my wife were down in Eindhoven in the south of what was a very sunny and warm Netherlands. While visiting a friend down there we discovered they have a telescope. Oh, I was so excited! For many years, having a telescope has been a dream of mine but alas&amp;#8230; they aren&amp;#8217;t exactly cheap instruments and I always had the feeling it would be something that would get old pretty fast.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  However, as soon as I had the chance to point the telescope at the tiny shiny blimp in the sky which turned out to be Saturn, and as soon as I was able to see its rings hanging around its spherical mass of gas, I was in love. &amp;#8220;Wait, let&amp;#8217;s point it at the moon!&amp;#8221; &amp;#8211; and I was even more in love. Somehow there is some astronomic quality and reality to seeing things through that glorified mirror-lined tube that photos simply cannot capture. Much the same way a single photograph cannot capture the greatness of the Great Wall, much the same way photos cannot describe the feeling of a plane banking to 30 degrees inclination to pull you out of the floor, out to 39000 feet to take you places&amp;#8230; astronomic photographs, as spectacular and colorful as they may be, cannot describe the feeling of DIY pointing the telescope and sitting there looking, wondering, imagining.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  This means, of course, one thing: for the next few months I will be badgering my wife, trying to persuade her to allow me to invest in a good telescope.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Part of this persuasion started last night when the ISS was flying past us at its incredible speed. Normally the ISS would only be visible in the wee hours of the night and we would have to wait for the right day where all the conditions were met. You need a clear sky, the station to be passing around your area and patience to wake up in the middle of the night to see it. But last night at 23:13 would be a perfect time to spot it. Our plan was almost foiled by the patchy clouds which were planning to ruin the fun but a couple of minutes past the announced time, there it was, in all its glory. A small patch of reflected light, in total size bigger than any star, bigger indeed than any planet  and about as big as one of the planes which usually make for the Rotterdam/The Hague airport around the same area. But this one was different. It was not blinking but rather reflecting light, constantly so, and flying at a different bearing than of the planes. Hiding here and there behind one of the clouds, it was as visible as it could be in the sky which at that time was not yet so dark. In effect, as I recall, the sky&amp;#8217;s light night blue was probably the best to spot the station. Too dark and the station&amp;#8217;s colors would get lost in the background, too light and it is simply not visible at all, overexposed by the sunlight. It&amp;#8217;s pretty tough to find a photo of what we saw last night, mostly because spotting the ISS with the naked eye requires conditions which are very adverse to photography (darkness + fast moving objects) so here&amp;#8217;s a photo of the ISS in all its glory (photo courtesy of Wikipedia):
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;a href=&quot;https://www.tiagoespinha.net/wp-content/uploads/2014/06/International_Space_Station_after_undocking_of_STS-132.jpg&quot; rel=&quot;lightbox[712]&quot; title=&quot;How to see the International Space Station (ISS)&quot;&gt;&lt;img class=&quot;alignleft wp-image-713&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2014/06/International_Space_Station_after_undocking_of_STS-132.jpg&quot; alt=&quot;International_Space_Station_after_undocking_of_STS-132&quot; width=&quot;480&quot; height=&quot;306&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  This was it, this was yet another step towards my space exploration. Yet another step in convincing my wife the 300 euro I need for a telescope will be worth it.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Oh yeah, my post&amp;#8217;s title was about how to see the ISS, right? Oh that&amp;#8217;s pretty easy&amp;#8230; If you have a smartphone, specifically Android, you can use the &lt;a href=&quot;https://play.google.com/store/apps/details?id=com.runar.issdetector&quot;&gt;ISS Detector&lt;/a&gt; app. Fill in your location and you&amp;#8217;re good to go. Otherwise just head over to NASA&amp;#8217;s very own &amp;#8220;Spot the Station&amp;#8221;: &lt;a href=&quot;http://spotthestation.nasa.gov/&quot;&gt;http://spotthestation.nasa.gov/&lt;/a&gt; . It&amp;#8217;s really worth it and you should definitely give it a go.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;strong&gt;EDIT: &lt;/strong&gt;Last night we were &amp;#8220;station spotting&amp;#8221; again and I managed to snap a picture of the ISS in all its glory. In a surprisingly clear sky, I feel that the photo does not make justice to the real thing but indeed, it is better than nothing!
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;a href=&quot;https://www.tiagoespinha.net/wp-content/uploads/2014/06/2014-06-11-23.15.16-copy.jpg&quot; rel=&quot;lightbox[712]&quot; title=&quot;How to see the International Space Station (ISS)&quot;&gt;&lt;img class=&quot;alignleft wp-image-718&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2014/06/2014-06-11-23.15.16-copy.jpg&quot; alt=&quot;2014-06-11 23.15.16 copy&quot; width=&quot;512&quot; height=&quot;683&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
</description>
        <pubDate>Tue, 10 Jun 2014 09:14:14 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2014/06/how-to-see-the-international-space-station-iss/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2014/06/how-to-see-the-international-space-station-iss/</guid>
        
        <category>astronomy</category>
        
        <category>ISS</category>
        
        <category>Space</category>
        
        <category>telescope</category>
        
        
        <category>Space</category>
        
      </item>
    
      <item>
        <title>[Project] How to easily monitor your plants&amp;#8217; soil humidity</title>
        <description>&lt;h3 style=&quot;text-align: justify;&quot;&gt;
  You came here to learn about soil humidity monitoring, right?
&lt;/h3&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Then you should probably scroll down to the part where I have a photo of my setup. However, if you have the time and feel like reading some of my ramblings, why don&amp;#8217;t you just continue with the next paragraph? I promise you won&amp;#8217;t be disappointed!
&lt;/p&gt;

&lt;h3 style=&quot;text-align: justify;&quot;&gt;
  My beginning as an urban farmer
&lt;/h3&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Spring is here and with it comes the sunshine, even in &lt;a href=&quot;http://en.wikipedia.org/wiki/Netherlands#Climate&quot;&gt;rainy Netherlands&lt;/a&gt;. For this reason I recently started growing all kinds of things at home. First I started with some of those tiny thumb-sized vases which come bundled with sunflower and lavender seeds but&amp;#8230; soon after, I realized those vases were not gonna be big enough to hold that many seeds. Determined to see those plants through to flowering, I started buying bigger vases and soil. Soon after that, I was growing not only the sunflowers and lavender but I sowed some seeds I had bought a long time ago. I was now growing several shoots of &lt;em&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Mimosa_pudica&quot;&gt;mimosa pudica&lt;/a&gt; (aka the shy plant, famous for the fact that it closes its leaves when you poke it &amp;#8211; which you can see &lt;a href=&quot;https://www.youtube.com/watch?v=BLTcVNyOhUc&quot;&gt;on Youtube&lt;/a&gt;)&lt;/em&gt;, a few more seedlings of &lt;em&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Allium_tuberosum&quot;&gt;chinese chives&lt;/a&gt; (or scientifically speaking, allium tuberosum&lt;/em&gt;&lt;em&gt;, delicious in many dishes)&lt;/em&gt; and my proudest plantation, seedlings of the hottest pepper in the world: the &lt;em&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Trinidad_moruga_scorpion&quot;&gt;trinidad moruga scorpion&lt;/a&gt;, which i&lt;/em&gt;n the the &lt;a href=&quot;http://en.wikipedia.org/wiki/Scoville_scale&quot;&gt;Scoville scale&lt;/a&gt; is said to be approximately 500 times hotter than your average Jalapeño or Chipotle chilli. Now THAT&amp;#8217;S spicy!
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  You like the post so far? Well keep on reading then!
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;!--more--&gt;
&lt;/p&gt;

&lt;h3 style=&quot;text-align: justify;&quot;&gt;
  Okay, I became a farmer.
&lt;/h3&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Yeah okay, I didn&amp;#8217;t start farming because the weather was nice. Most people who face the same circumstances will just go to the beach or do a barbecue or just have a beer with friends in the sunshine but&amp;#8230; I realized I like farming. In a more and more brick and mortar world where everywhere there&amp;#8217;s buildings and cars and in a world where more and more the artificial replaces the natural, it is nice to have a small piece of nature close by.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  At this point I had a substantial collection of vases and it didn&amp;#8217;t take me long to realize that I sometimes would forget my plants and the soil would be bone dry. Whilst plants make for great landscape, they are very unobtrusive and don&amp;#8217;t exactly ask for water the same way my cat used to. So I decided to put my skills to good use and do something about it. After some browsing on eBay I found the perfect tool for the task: soil moisture sensors. It is important that you realize that these sensors are nothing but metal plates with a silicon coating so don&amp;#8217;t expect anything too fancy and always remember the adage: you get what you pay for.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  The sensors themselves are pretty useless but I had a few Raspberry Pi boards laying around so I started investigating whether it would be possible to take analog readouts with it, which, to my dismay, was not possible. At least not without using a USB soundcard (it&amp;#8217;s pretty ingenious actually&amp;#8230; when you think of it, what&amp;#8217;s sound if not analog current waves at different frequencies?). So I decided to be more professional and bought an old friend of mine: an Arduino Nano board which can take all kinds of readouts. It does have however the inconvenient of not being able to push the readouts anywhere. You can&amp;#8217;t connect it to a network which means you can&amp;#8217;t exactly take the data out into a database and plot it without additional devices and so the Raspberry Pi came to rescue!
&lt;/p&gt;

&lt;h3 style=&quot;text-align: justify;&quot;&gt;
  Time to join the forces of my inner farmer and inner nerd together!
&lt;/h3&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  What was my goal then? I wanted to build a setup that would allow me to plot a nice graph with a live readout from my plants&amp;#8217; soil humidity. Two problems there: to plot a graph you&amp;#8217;ll need to store the data somewhere and&amp;#8230; with the cheap soil moisture sensors I had bought, &amp;#8220;live&amp;#8221; was not going to be possible. &lt;strong&gt;This is something I cannot stress enough: if you&amp;#8217;ll use the same sensors as me, do NOT leave them powered for longer than what is needed to take the readout.&lt;/strong&gt; Below in this post I explain why.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  So in the end, I setup the following (photo below):
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  &amp;#8211; Raspberry Pi, connected to my home network (the red UTP cable).
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  &amp;#8211; Arduino, plugged to the soil moisture sensors and connected via USB to the Raspberry Pi.
&lt;/p&gt;

&lt;div id=&quot;attachment_694&quot; style=&quot;width: 522px&quot; class=&quot;wp-caption alignleft&quot;&gt;
  &lt;a href=&quot;https://www.tiagoespinha.net/wp-content/uploads/2014/05/2014-05-09-12.13.19.jpg&quot; rel=&quot;lightbox[689]&quot; title=&quot;[Project] How to easily monitor your plants&apos; soil humidity&quot;&gt;&lt;img class=&quot;wp-image-694&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2014/05/2014-05-09-12.13.19.jpg&quot; alt=&quot;Raspberry Pi + Arduino wired together&quot; width=&quot;512&quot; height=&quot;384&quot; /&gt;&lt;/a&gt;
  
  &lt;p class=&quot;wp-caption-text&quot;&gt;
    Raspberry Pi + Arduino wired together
  &lt;/p&gt;
&lt;/div&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Then with some of my rusty C code I was able to get the Arduino up and running and sending data back to the Raspberry Pi.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  At this point please understand that there are a &lt;strong&gt;multitude of ways&lt;/strong&gt; in which the &lt;strong&gt;exact same thing can be achieved&lt;/strong&gt;. This is just what I came up with after experimenting with a couple of ways.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  In essence, what I have is: three DuPont cables going from separate digital pins on the RPi which in turn connect to separate digital pins on the Arduino Nano. The Arduino Nano has one digital pin per soil moisture sensor (which is plugged to the VCC in each of the small devices on the right&amp;#8230; they are YL-38 sensors and are explained later) and one analog pin also per soil moisture sensor (plugged to the A0 in the same YL-38 devices, to take the soil moisture readings).
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  The idea is that periodically the Raspberry Pi will send a signal to the Arduino on a specific digital pin which will then cause the Arduino board to power the small bridge device which in turn outputs an analog readout (essentially an AC wave) which the Arduino listens on and prints to the serial console.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;strong&gt;FRIENDLY ADVICE: &lt;/strong&gt;After reading around, I learned it is best to do this for short periods of time &amp;#8211; namely, not for longer than just a few seconds. If you keep the bridge device powered at all times, your sensor probes will rust within the hour due to the electrolysis which the DC current will cause to the plates. After that happens, your sensor is pretty much garbage as the sensor probes will have corroded and the moisture readouts will have become inaccurate.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Also of note is how the readings might fluctuate just after you powered the sensor. For this reason it is wise to take a series of readings (I take 20) and discard the first few (I discard the first half). Then you might as well just store a burst of readings which you can later plot into a graph.
&lt;/p&gt;

&lt;h3 style=&quot;text-align: justify;&quot;&gt;
  What do you need exactly?
&lt;/h3&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  My goal is to merely give you the idea and the very general pointers of how to get around doing something like this. It&amp;#8217;s most definitely not difficult and anyone with a basic understanding of electronics can get it up and running in a matter of hours. This was a lot of fun for me to figure out myself and for this reason I will not publish the code but merely give you, the reader, a general idea of what has to be done. With this and some programming knowledge, you should be able get this up and running in no time. Here&amp;#8217;s a very general walkthrough:
&lt;/p&gt;

&lt;ul style=&quot;text-align: justify;&quot;&gt;
  &lt;li&gt;
    Get both a Raspberry Pi and an Arduino board. It doesn&amp;#8217;t matter which Arduino. There&amp;#8217;s many different types and I&amp;#8217;ve chosen the Nano variant because it strikes a great balance between functionality and form-factor.
  &lt;/li&gt;
  &lt;li&gt;
    You&amp;#8217;ll also need a breadboard and DuPont wires. You can get these cheaply off eBay and I found that for most of these usages, male to female cables are ideal (the male end goes into the breadboard whereas the female end can plug directly into sensors&amp;#8217; pins).
  &lt;/li&gt;
  &lt;li&gt;
    Obviously you&amp;#8217;ll also need soil moisture sensors (photo below). There&amp;#8217;s a lot of variety here both in quality and price range. To get started I suggest you look for the cheap kind on eBay where you can get a Chinese-built YL-69 (although I normally just search for &amp;#8216;soil moisture sensor&amp;#8217;) for a little over 2 euro. These sensors also come with a &amp;#8216;middle-man&amp;#8217; circuit which allows you to get two outputs: one is an analog readout of the resistance between the sensor&amp;#8217;s two plates and the second is a digital output (essentially, HIGH or LOW, 5v or 0v) depending on whether the humidity is above or below a threshold which can in turn be adjusted by a built-in POTS. Personally I just take the analog readout and ignore the digital one. This allows me to make pretty graphs like you can see later in this post.
  &lt;/li&gt;
&lt;/ul&gt;

&lt;div id=&quot;attachment_701&quot; style=&quot;width: 522px&quot; class=&quot;wp-caption alignleft&quot;&gt;
  &lt;a href=&quot;https://www.tiagoespinha.net/wp-content/uploads/2014/05/2014-05-09-12.51.20.jpg&quot; rel=&quot;lightbox[689]&quot; title=&quot;[Project] How to easily monitor your plants&apos; soil humidity&quot;&gt;&lt;img class=&quot;wp-image-701&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2014/05/2014-05-09-12.51.20.jpg&quot; alt=&quot;Above, the soil moisture sensor itself (YL-69). Below, the bridge device which you&apos;ll need to use (YL-38).&quot; width=&quot;512&quot; height=&quot;384&quot; /&gt;&lt;/a&gt;
  
  &lt;p class=&quot;wp-caption-text&quot;&gt;
    Above, the soil moisture sensor itself (YL-69). Below, the bridge device which you&amp;#8217;ll need to use (YL-38).
  &lt;/p&gt;
&lt;/div&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  After you have all the materials, it&amp;#8217;s very simple to get started. The &lt;strong&gt;YL-69&lt;/strong&gt; sensor itself has two pins which need to be wired to the two pins on the &lt;strong&gt;YL-38&lt;/strong&gt; bridge (specifically, the two isolated pins). On the other end of the YL-38, you have four pins which (top to bottom) represent VCC, GND, D0 and A0. VCC and GND are your power pins which should be set to 3.3/5V and Ground (respectively) and your A0 is an analog output which you will connect to an analog input on the Arduino board (the Arduino Nano has 8 analog pins) via the breadboard.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;strong&gt;FRIENDLY REMINDER: &lt;/strong&gt;DO NOT keep the YL-38 bridge powered for long periods of time. If you leave it permanently on, it will keep applying DC current to the YL-69 sensor which will cause corrosion due to electrolysis. If you want to keep your sensors in good shape for as long as possible, you will only apply power to VCC before you make a reading. Additionally, be sure to at least every week switch the two cables going to the YL-69 sensor as to slow down corrosion as much as possible.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  This being said, you&amp;#8217;ll want to plug the VCC on the YL-38 bridge to a digital pin on the Arduino board which you will set to HIGH (thus effectively powering the bridge) before making a reading.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  When you have the Arduino and the sensors all hooked up, you&amp;#8217;ll want to get this plugged to your laptop so you can start experimenting with the code. If you need further help with this part, please drop me a comment or an e-mail (tiagoRemove-me-and-add-at-or-elseEspinha.nl)!
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  After that&amp;#8217;s done, all you have to do is use one of the GPIO pins in the Raspberry Pi as a signal for the Arduino to start a reading. Essentially my (Python) script does the following goes something like:
&lt;/p&gt;

&lt;ul style=&quot;text-align: justify;&quot;&gt;
  &lt;li&gt;
    This script first sets a GPIO pin to HIGH.
  &lt;/li&gt;
  &lt;li&gt;
    The Arduino is continuously listening to this pin and once it is raised to HIGH, sets the sensor&amp;#8217;s VCC to HIGH.
  &lt;/li&gt;
  &lt;li&gt;
    The Arduino continuously prints readouts from the sensor to the serial console.
  &lt;/li&gt;
  &lt;li&gt;
    The Python script is reading the USB output (i.e. the serial console) of the Arduino board and storing the readouts.
  &lt;/li&gt;
  &lt;li&gt;
    The Python script sends the readouts to my webserver where they are stored in a database.
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Obviously, for this to work you&amp;#8217;ll need the Python libraries for the Raspberry Pi GPIO and I recommend the Python library for dealing with serial devices.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  After all&amp;#8217;s said and done, I can generate a graph such as this:
&lt;/p&gt;

&lt;h3 style=&quot;text-align: justify;&quot;&gt;
  &lt;a href=&quot;https://www.tiagoespinha.net/wp-content/uploads/2014/05/Screenshot-2014-05-13-20.35.53.png&quot; rel=&quot;lightbox[689]&quot; title=&quot;[Project] How to easily monitor your plants&apos; soil humidity&quot;&gt;&lt;img class=&quot;alignleft wp-image-699&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2014/05/Screenshot-2014-05-13-20.35.53.png&quot; alt=&quot;Screenshot 2014-05-13 20.35.53&quot; width=&quot;512&quot; height=&quot;185&quot; /&gt;&lt;/a&gt;But wait, there&amp;#8217;s more!
&lt;/h3&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  I&amp;#8217;m also the proud owner of a Pebble watch, so why not put this to good use, I thought! Everything was already in place so all I had to do was set up an alert system that monitors the last collected data. If it&amp;#8217;s above a &amp;#8220;drought threshold&amp;#8221;, I receive an alert on my Pebble. But there&amp;#8217;s still more! As soon as I water my plants, I get another alert as seen below:
&lt;/p&gt;

&lt;h1&gt;&lt;a href=&quot;https://www.tiagoespinha.net/wp-content/uploads/2014/05/2014-04-28-08.41.21.jpg&quot; rel=&quot;lightbox[689]&quot; title=&quot;[Project] How to easily monitor your plants&apos; soil humidity&quot;&gt;&lt;img class=&quot;wp-image-700 aligncenter&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2014/05/2014-04-28-08.41.21.jpg&quot; alt=&quot;2014-04-28 08.41.21&quot; width=&quot;360&quot; height=&quot;480&quot; /&gt;&lt;/a&gt;&lt;/h1&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h3 style=&quot;text-align: justify;&quot;&gt;
  To conclude
&lt;/h3&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Thanks for reading all the way here! I hope my post was of some help for you to start in a similar endeavor. I tried to keep the technicalities (scripts, etc) down to a minimum because, well, that was the most fun part of it and I wouldn&amp;#8217;t want to spoil any of it for you! However, if you get yourself into some trouble and you need some help to move forward, feel free to drop me a comment or, more wisely, drop me an e-mail. You can reach me at tiagoRemove-me-and-add-at-or-elseEspinha.nl.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
&lt;/p&gt;
</description>
        <pubDate>Tue, 13 May 2014 21:02:06 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2014/05/project-how-to-easily-monitor-your-plants-soil-humidity/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2014/05/project-how-to-easily-monitor-your-plants-soil-humidity/</guid>
        
        <category>Arduino</category>
        
        <category>DIY</category>
        
        <category>Do it yourself</category>
        
        <category>dupont cables</category>
        
        <category>How To</category>
        
        <category>Pebble</category>
        
        <category>Python</category>
        
        <category>Raspberry Pi</category>
        
        <category>soil moisture</category>
        
        <category>Soil moisture monitoring</category>
        
        <category>Soil moisture sensor</category>
        
        <category>YL-38</category>
        
        <category>YL-69</category>
        
        
        <category>DIY</category>
        
        <category>Hardware</category>
        
        <category>Raspberry Pi</category>
        
        <category>Software</category>
        
      </item>
    
      <item>
        <title>How to get the TP-Link TL-WN725N working on Raspberry Pi</title>
        <description>&lt;p style=&quot;text-align: justify;&quot;&gt;
  Recently I bought two TP-Link TL-WN725N adapters off Amazon. They&amp;#8217;re cheap and according to the RPi peripherals list [&lt;a href=&quot;http://elinux.org/RPi_USB_Wi-Fi_Adapters&quot;&gt;here&lt;/a&gt;], are supposed to work well under Linux. They do, however, require a special driver which is not included in the Linux kernel itself. This leaves you with two options:
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  &amp;#8211; Use one of MrEngman&amp;#8217;s pre-compiled kernel modules which is available on the Raspberry Pi forums [&lt;a href=&quot;http://www.raspberrypi.org/forums/viewtopic.php?f=28&amp;amp;t=62371&quot;&gt;here&lt;/a&gt;] (kudos to MrEngman to his ongoing effort!).
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  or
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  &amp;#8211; You compile your own kernel module.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  However, keep in mind the following &lt;strong&gt;very important caveat&lt;/strong&gt;: whatever your choice is, this process requires some basic knowledge of Linux! If you don&amp;#8217;t feel comfortable messing around with kernel modules and such, I would recommend that you proceed with caution and maybe even ask a more experienced friend to give you a hand. It&amp;#8217;s unlikely you will ruin your Raspberry Pi but you may very well ruin your installation. &lt;strong&gt;PROCEED WITH CAUTION.&lt;/strong&gt;
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Now, be aware that if you just want your wifi up and running and don&amp;#8217;t want to be bothered, you really should take the easy way out here and check whether MrEngman has a pre-compiled module that&amp;#8217;s been compiled with the same revision of your kernel. If you cannot find one or if you&amp;#8217;re feeling especially brave, read on for the step by step on how to compile it yourself.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Also keep in mind that this tutorial applies to the Raspbian distribution. It may (or may not) work in Pidora (and others) but it&amp;#8217;s up to you to adjust accordingly.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;!--more--&gt;
&lt;/p&gt;

&lt;h1 style=&quot;text-align: justify;&quot;&gt;
  Compiling a kernel module
&lt;/h1&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Be wary, this assumes you&amp;#8217;re going to compile a kernel module to the latest version of the Raspberry Pi firmware (and thus, at the time of writing, for the latest version of the 3.10.y branch). If you&amp;#8217;re not running this version, consider updating [&lt;a href=&quot;https://github.com/Hexxeh/rpi-update&quot;&gt;updating the RPi to the latest firmware&lt;/a&gt;]!
&lt;/p&gt;

&lt;h2 style=&quot;text-align: justify;&quot;&gt;
  Pre-requisites
&lt;/h2&gt;

&lt;ul style=&quot;text-align: justify;&quot;&gt;
  &lt;li&gt;
    Linux kernel source for the Raspberry Pi (do &lt;strong&gt;NOT&lt;/strong&gt; use the original Linux kernel as it does not contain all the patches and drivers required for your RPi to work smoothly), available on GitHub [&lt;a href=&quot;https://github.com/raspberrypi/linux/tree/rpi-3.10.y&quot;&gt;here&lt;/a&gt;].
  &lt;/li&gt;
  &lt;li&gt;
    Driver for the RTL8188EU, available on GitHub [&lt;a href=&quot;https://github.com/lwfinger/rtl8188eu&quot;&gt;here&lt;/a&gt;].
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Many Linux distributions provide a package just with the precompiled kernel headers and that makes it easier than what you&amp;#8217;ll have to do on the Raspberry Pi. Still, it&amp;#8217;s not so difficult. All you have to do is:
&lt;/p&gt;

&lt;h3 style=&quot;text-align: justify;&quot;&gt;
  Cloning and compiling the Linux kernel
&lt;/h3&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  1. Start by cloning the Linux kernel for the RPi
&lt;/p&gt;

&lt;pre class=&quot;brush: bash; title: ; notranslate&quot; title=&quot;&quot;&gt;cd /usr/src/
sudo git clone https://github.com/raspberrypi/linux.git rpi-3.10.y
cd /usr/src/rpi-3.10.y/&lt;/pre&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;span style=&quot;line-height: 1.5em;&quot;&gt;This will have created a folder called /usr/src/rpi-3.10.y/ where all the Linux kernel source now resides in your Raspberry Pi.&lt;/span&gt;
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  2. For ease of use, create a symbolic link to the /lib/modules/ structure
&lt;/p&gt;

&lt;pre class=&quot;brush: bash; title: ; notranslate&quot; title=&quot;&quot;&gt;sudo ln -s /usr/src/rpi-3.10.y /lib/modules/`uname -r`/build&lt;/pre&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Be sure to write it in as is (or simply copy &amp;amp; paste it in!) as the backticks around uname -r will create the right name for the folder. At this point, your /lib/modules/ path will have a link to the directory where the source code resides. We do this so later when we compile the driver, our life becomes much easier (as the Makefile will automatically look in that directory).
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  3. Copy your kernel configuration file to the directory where the source is:
&lt;/p&gt;

&lt;pre class=&quot;brush: bash; title: ; notranslate&quot; title=&quot;&quot;&gt;sudo sh -c &apos;zcat /proc/config.gz &amp;gt; .config&apos;&lt;/pre&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  This simply pulls the config from your running kernel into the new kernel you&amp;#8217;re about to compile.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  4. Pull the latest Module.symvers into your kernel&amp;#8217;s directory. Note: this is one of the reasons why I would recommend updating first to the latest kernel, otherwise you&amp;#8217;ll have to figure out which Module.symvers you need.
&lt;/p&gt;

&lt;pre class=&quot;brush: bash; title: ; notranslate&quot; title=&quot;&quot;&gt;curl -O https://raw.githubusercontent.com/raspberrypi/firmware/master/extra/Module.symvers&lt;/pre&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  5. Compile the kernel to a stage that is ready to be linked against kernel modules. You don&amp;#8217;t want to compile the whole kernel since that&amp;#8217;s 1) not necessary for compiling kernel modules and 2) would take ages on a Raspberry Pi with its limited computing power.
&lt;/p&gt;

&lt;pre class=&quot;brush: bash; title: ; notranslate&quot; title=&quot;&quot;&gt;sudo make oldconfig
sudo make modules_prepare&lt;/pre&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  6. Clone the driver off GitHub, compile it and off you go!
&lt;/p&gt;

&lt;pre class=&quot;brush: bash; title: ; notranslate&quot; title=&quot;&quot;&gt;cd /usr/src/
git clone https://github.com/lwfinger/rtl8188eu.git
cd /usr/src/rtl8188eu/
sudo make
sudo make install&lt;/pre&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  At this stage, the driver&amp;#8217;s firmware as well as the compiled kernel module have been copied into place but there are a few more considerations to be had.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  1 &amp;#8211; Do &lt;strong&gt;NOT&lt;/strong&gt; plug the wifi dongle with the Raspberry Pi turned on! Many people (including me) have reported that doing so causes the Raspberry Pi to suddenly restart and this can lead to serious corruption of your SD card. Be on the safe side! Shut down your Raspberry Pi (sudo shutdown -h now), plug in the dongle, and turn it back on.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  2 &amp;#8211; At this point, when you run &amp;#8220;ifconfig&amp;#8221; you should already have a wlan0 network which is not connected to anything. In my experience, getting it to connect was the biggest challenge so if you have a WPA/WPA2 network and would like to learn how to connect to it via command line, read on.
&lt;/p&gt;

&lt;h1 style=&quot;text-align: justify;&quot;&gt;
  Connecting to a WPA/WPA2 network via command line
&lt;/h1&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  When you know what you&amp;#8217;re doing, this is an extremely simple process. First off, run the following command:
&lt;/p&gt;

&lt;pre class=&quot;brush: bash; title: ; notranslate&quot; title=&quot;&quot;&gt;wpa_passphrase &amp;lt;ssid&amp;gt;&lt;/pre&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Where you should replace &lt;ssid&gt; with the actual SSID of your network (hint: use &amp;#8220;&amp;#8221; if your network&amp;#8217;s name has spaces in it). It will then prompt you to type in the password for your network. This script generates then a few lines in the format of:
&amp;lt;/p&amp;gt;

&lt;pre class=&quot;brush: plain; title: ; notranslate&quot; title=&quot;&quot;&gt;network={
    ssid=&quot;Foo&quot;
    #psk=&quot;FoobarFoobar&quot;
    psk=f21df897e40a0e7253b8d53e35930e814f312df43ca2b085daa5109f2c2c5e54
}&lt;/pre&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  I recommend that you delete the line started by #psk (as it reveals your password in clear text) and the rest you should copy and paste into a file at /etc/wpa_supplicant.conf. If it exists, overwrite it, if it does not exist, then create it (with e.g. sudo nano /etc/wpa_supplicant.conf).
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  After you&amp;#8217;ve done that, you need to tell Linux how this network is going to get an IP address and how it&amp;#8217;s managed. You can do so by editing the /etc/network/interfaces file as such:
&lt;/p&gt;

&lt;pre class=&quot;brush: bash; title: ; notranslate&quot; title=&quot;&quot;&gt;sudo nano /etc/network/interfaces&lt;/pre&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Here you should lookout for a line that starts as &amp;#8220;iface wlan0&amp;#8221;. In my case, this line was setting wlan0 as manual which is &lt;strong&gt;NOT&lt;/strong&gt; what we want. Ultimately you want something that looks like this:
&lt;/p&gt;

&lt;pre class=&quot;brush: bash; title: ; notranslate&quot; title=&quot;&quot;&gt;iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant.conf&lt;/pre&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  And &lt;strong&gt;watch out!&lt;/strong&gt; If there is a line starting with &amp;#8220;wpa-roam&amp;#8221;, you can safely delete it as it will conflict with your new WPA settings!
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  After you&amp;#8217;ve modified the file you can then save it and we&amp;#8217;re ready for action. Next thing you need to do is take the WLAN interface down and back up as such:
&lt;/p&gt;

&lt;pre class=&quot;brush: bash; title: ; notranslate&quot; title=&quot;&quot;&gt;sudo ifdown wlan0
sudo ifup wlan0&lt;/pre&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  And that&amp;#8217;s it! If everything went well, your Raspberry Pi should now be connected to your network via wifi!
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  If there&amp;#8217;s something that&amp;#8217;s not clear enough or some steps that I missed, feel free to drop me an e-mail. My e-mail address is my first name [@] my last name [dot] nl. And you can find my first and last name in the url of this blog (hint, my first name is Tiago!).
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Finally I would like to thank MrEngman for his dedication and continuous engagement in the Raspberry Pi forums as well as lwfinger for maintaining this driver and making it possible for us to use it on Linux! I would also like to thank Martijn from Grendelman.net for this &lt;a href=&quot;http://www.grendelman.net/wp/compiling-kernel-modules-for-raspbian-raspberry-pi/&quot;&gt;blog post&lt;/a&gt; which helped me in getting all this to work. Thanks! In a future post I will come back and explain how to cross-compile a kernel module for the Raspberry Pi so you can get it done faster by using your (more powerful) desktop computer to do the compilation.
&lt;/p&gt;
&lt;/ssid&gt;&lt;/p&gt;
</description>
        <pubDate>Thu, 10 Apr 2014 22:22:57 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2014/04/how-to-get-the-tp-link-tl-wn725n-working-on-raspberry-pi/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2014/04/how-to-get-the-tp-link-tl-wn725n-working-on-raspberry-pi/</guid>
        
        <category>Dongle</category>
        
        <category>Hardware</category>
        
        <category>Raspberry Pi</category>
        
        <category>TL-WN725N</category>
        
        <category>TP-Link</category>
        
        <category>TP-Link WN725N</category>
        
        <category>Wifi</category>
        
        <category>Wifi dongle</category>
        
        <category>Wifi USB</category>
        
        <category>WN725N</category>
        
        
        <category>Hardware</category>
        
        <category>Raspberry Pi</category>
        
      </item>
    
      <item>
        <title>Chronopost Portugal? Serviço enganador&amp;#8230;</title>
        <description>&lt;p style=&quot;text-align: justify;&quot;&gt;
  This post will, extraordinarily, be in Portuguese as it is a complaint and a warning towards a Portuguese courier company which is indulging in false advertising. This is, therefore, a warning for my fellow Portuguese countrymen.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  &amp;#8212;
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Esta é uma história de como os meus pais, na segunda-feira passada (dia 7 de Outubro de 2013) me enviaram pela &lt;a href=&quot;http://chronopost.pt/&quot;&gt;Chronopost Portugal&lt;/a&gt; uma encomenda para a Holanda, onde me encontro a residir. No site, a Chronopost anuncia o serviço &lt;a href=&quot;http://chronopost.pt/os-nossos-servicos/servicos-internacionais&quot;&gt;Chronopost Classic&lt;/a&gt; onde prometem entregas para a Europa dentro de 3~4 dias a preços convidativos (24 euros até 10 kg).
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Uma vez que a relação preço versus qualidade (anunciada) parecia bastante boa, decidi escolher o serviço da Chronopost.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Qual não é o meu espanto quando hoje, dia 11 de Outubro de 2013, passados 4 dias da expedição da encomenda, esta ainda não se encontra sequer na Holanda (de acordo com o track and trace). Depois de contactar por várias vezes a Chronopost e me terem sido dadas desculpas de que &lt;em&gt;&amp;#8220;os 4 dias são 4 dias de trânsito&amp;#8221;&lt;/em&gt; e de que &lt;em&gt;&amp;#8220;o dia de expedição não conta&amp;#8221;&lt;/em&gt;, o facto continua a ser de que excluindo o dia de expedição, faz hoje 4 dias desde que a encomenda se encontra em trânsito.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Após ter descoberto que não vai ser a Chronopost que me vai entregar a encomenda mas sim um dos seus parceiros (a &lt;a href=&quot;https://www.dpd.com/nl_en&quot;&gt;DPD&lt;/a&gt;), decidi contactar também esta empresa afim de tentar obter um esclarecimento sobre quando a encomenda será entregue. Estes senhores dizem-me que será entregue apenas na &lt;strong&gt;segunda-feira&lt;/strong&gt;, &lt;strong&gt;sete dias&lt;/strong&gt; depois da expedição.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Fica aqui então o aviso &lt;strong&gt;&lt;/strong&gt;que a Chronopost Portugal está a &lt;strong&gt;enganar os seus clientes&lt;/strong&gt; com um serviço de pouca fiabilidade, prometendo entregas em 4 dias e fazendo-as em 7 dias. Conhece algum serviço mais fiável? Que tal deixá-lo então na secção de comentários em baixo?
&lt;/p&gt;
</description>
        <pubDate>Fri, 11 Oct 2013 17:09:39 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2013/10/chronopost-portugal-servico-enganador/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2013/10/chronopost-portugal-servico-enganador/</guid>
        
        <category>chronopost</category>
        
        <category>chronopost classic</category>
        
        <category>chronopost encomenda atrasada</category>
        
        <category>chronopost enganado</category>
        
        <category>chronopost enganador</category>
        
        <category>chronopost envio atrasado</category>
        
        <category>chronopost fiabilidade</category>
        
        <category>chronopost portugal</category>
        
        <category>chronopost prazo de entrega</category>
        
        <category>encomenda atrasada</category>
        
        
        <category>Be Warned</category>
        
      </item>
    
      <item>
        <title>Automatic Recovery of REST Interfaces</title>
        <description>&lt;p style=&quot;text-align: justify;&quot;&gt;
  Recovery of REST interfaces is an interesting research topic which came into conversation with one of our industrial partners and which I would like to explore. This is also something mentioned by Maleshkova et al in their work on &amp;#8220;&lt;em&gt;Investigating Web APIs on the World Wide Web&lt;/em&gt;&amp;#8221; (&lt;a href=&quot;http://sweet-dev.open.ac.uk/war/Papers/mmaWebAPISurvey.pdf&quot;&gt;pre-print&lt;/a&gt;, I&lt;a href=&quot;http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=5693251&amp;amp;tag=1&quot;&gt;EEE citable&lt;/a&gt;). The authors claim that &lt;em&gt;&amp;#8220;two thirds of the APIs do not state the data-type of the input and 40% of the APIs do not state the HTTP method. If a standard interface description language, such as WSDL, [was] used [&amp;#8230;] this would be unthinkable&amp;#8221;&lt;/em&gt;.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  This is very true. Read on to know more.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;!--more--&gt;
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  While SOAP services are always backed up by their WSDL files which describe the interfaces, including all the methods and data types, the much more popular REST services have no such feature. Instead, developers are left with manually created web pages which describe in natural language how to invoke the web API and what the endpoints are; case in point: &lt;a href=&quot;https://developers.facebook.com/docs/reference/api/publishing/&quot;&gt;Facebook&lt;/a&gt;, &lt;a href=&quot;https://dev.twitter.com/docs/api/1.1&quot;&gt;Twitter&lt;/a&gt; and &lt;a href=&quot;http://developer.netflix.com/docs/HTTP_Status_Codes&quot;&gt;Netflix&lt;/a&gt;. But what about when web API developers forget to change the documentation, or even worse, make a mistake when specifying the interface? This is when having automatic recovery of the REST interface would prove useful.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  The possibilities are endless. This recovery can be done on either client or server side (or both) and each of the sides can add a different view and understanding of the communication. Where with a SOAP-generated WSDL file we know that&lt;em&gt;&lt;/em&gt; whatever is in the WSDL file is what&amp;#8217;s available in the system, &lt;em&gt;no more, no less,&lt;/em&gt; by doing recovery of a REST interface we can learn many things:
&lt;/p&gt;

&lt;ol style=&quot;text-align: justify;&quot;&gt;
  &lt;li&gt;
    Client-side recovered interface: whatever is in the recovered interface &lt;em&gt;may or may not&lt;/em&gt; be all that&amp;#8217;s available on the server-side. At any rate, we know that whatever is in the recovered interface represents whatever &lt;strong&gt;features we are using&lt;/strong&gt; of that particular web API (because if we recovered it from runtime data, then our client has at some point used these features).
  &lt;/li&gt;
  &lt;li&gt;
    Server-side recovered interface: once again, because we&amp;#8217;re recovering the interface from usage data (and even though on the server-side you could probably do a full recovery based on static analysis), whatever we see in the recovered interface is in fact whatever is being used by &lt;strong&gt;ALL&lt;/strong&gt; our clients. This means that if you use long periods of runtime data to recover the interface, you can detect &lt;em&gt;potential dead code.&lt;/em&gt; This is very much the same principle behind code coverage, except we&amp;#8217;re testing interface coverage by client code.
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  This is, of course, in a very premature stage and in my mind only but it is a thought I wanted to put out there and maybe stir the discussion around this topic a little. If you have any thoughts on this feel free to drop me a comment!
&lt;/p&gt;
</description>
        <pubDate>Mon, 07 Oct 2013 15:46:53 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2013/10/automatic-recovery-of-rest-interfaces/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2013/10/automatic-recovery-of-rest-interfaces/</guid>
        
        
        <category>SOA</category>
        
        <category>Software</category>
        
      </item>
    
      <item>
        <title>Ok, I got some kefir, now what? (or Kefir Quickstart Guide)</title>
        <description>&lt;p style=&quot;text-align: justify;&quot;&gt;
  My last post introduced the wonders of kefir and the magic grains that ferment milk into delish yoghurt. Some people have asked me for grains and right now I actually have a &amp;#8220;customer&amp;#8221; on hold for my kefir grains to grow again so I can give them away. It seems my friends are more open than I was actually expecting! Nice!
&lt;/p&gt;

&lt;div id=&quot;attachment_625&quot; style=&quot;width: 310px&quot; class=&quot;wp-caption aligncenter&quot;&gt;
  &lt;a href=&quot;https://www.tiagoespinha.net/wp-content/uploads/2013/09/2013-09-18-21.29.31.jpg&quot; rel=&quot;lightbox[623]&quot; title=&quot;Ok, I got some kefir, now what? (or Kefir Quickstart Guide)&quot;&gt;&lt;img class=&quot;size-medium wp-image-625&quot; alt=&quot;My own kefir grains!&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2013/09/2013-09-18-21.29.31-300x225.jpg&quot; width=&quot;300&quot; height=&quot;225&quot; srcset=&quot;https://www.tiagoespinha.net/wp-content/uploads/2013/09/2013-09-18-21.29.31-300x225.jpg 300w, https://www.tiagoespinha.net/wp-content/uploads/2013/09/2013-09-18-21.29.31-1024x768.jpg 1024w, https://www.tiagoespinha.net/wp-content/uploads/2013/09/2013-09-18-21.29.31-500x375.jpg 500w&quot; sizes=&quot;(max-width: 300px) 100vw, 300px&quot; /&gt;&lt;/a&gt;
  
  &lt;p class=&quot;wp-caption-text&quot;&gt;
    My own kefir grains!
  &lt;/p&gt;
&lt;/div&gt;

&lt;p style=&quot;text-align: center;&quot;&gt;
  Read on for the essential tips on getting quickstarted with kefir making!
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;!--more--&gt;
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Some of you may have also noticed that I&amp;#8217;m posting about kefir in what has otherwise been a &amp;#8220;tech blog&amp;#8221;. But alas, this is my personal blog, and for all I care, kefir grains are actually nanobots which use milk as fuel and drop yoghurt from their behinds (yes, I have a fertile imagination). But no. Kefir grains are really just very much organic yeasts and bacteria which help each other survive and which do, in fact, feed on the fats and nutrients of milk.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Now! You just got some kefir from me (or from anyone else). Now what? What are you supposed to do with this? How can you get kefir milk?
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Fret not! Even though I still hold &lt;a href=&quot;http://users.sa.chariot.net.au/~dna/kefirpage.html&quot;&gt;Dom&amp;#8217;s website&lt;/a&gt; as my reference and all my knowledge comes from there, I realize it can be somewhat daunting to go over endless paragraphs of narrative just to learn how to grow kefir. This is why I decided to compile this abridged version that can get you started in no time.
&lt;/p&gt;

&lt;h3 style=&quot;text-align: justify;&quot;&gt;
  Jump here if you&amp;#8217;re an impatient reader
&lt;/h3&gt;

&lt;ol style=&quot;text-align: justify;&quot;&gt;
  &lt;li&gt;
    Okay, first thing you should know: kefir grains will &lt;strong&gt;die&lt;/strong&gt; unless taken care of. Like I said, kefir grains are living bacteria and yeasts and to be kept alive, they should be &lt;strong&gt;in milk at all times&lt;/strong&gt;.
  &lt;/li&gt;
  &lt;li&gt;
    The very second thing you should know is that both kefir grains and the kefir milk itself &lt;strong&gt;should not come in contact with reactive metals&lt;/strong&gt;. Reactive metals are for example copper and aluminum and probably others which I can&amp;#8217;t think of right now. This means that whatever utensil you use with kefir should be &lt;strong&gt;plastic&lt;/strong&gt; or, ultimately, &lt;strong&gt;if you really have to&lt;/strong&gt;, &lt;em&gt;stainless steel&lt;/em&gt; is also tolerable. There&amp;#8217;s a very strong reason for this and there&amp;#8217;s actually a &lt;strong&gt;health danger&lt;/strong&gt; that comes with using reactive metals. Especially if you&amp;#8217;re keeping your kefir in metal bottles, because kefir is an acidic solution (kefir milk has a pH of approximately 4.5) it will react with the metal and you can actually get &lt;strong&gt;very ill in the long term&lt;/strong&gt; from metal poisoning. &lt;strong&gt;SO!&lt;/strong&gt; Use plastic utensils and keep your kefir in glass containers (plastic also works, but I prefer glass). Like I said, stainless steel has very little reactivity (is this even a word?!) and for some time I was using a stainless steel strainer without a problem, but I seriously recommend nylon or plastic.
  &lt;/li&gt;
  &lt;li&gt;
    The third thing about kefir has to do with temperature. To make kefir you&amp;#8217;re gonna place your kefir grains in fresh milk (UHT milk &lt;strong&gt;does not work very well&lt;/strong&gt;) and leave it at &lt;strong&gt;room temperature&lt;/strong&gt;. Now, of course, room temperature is a very arbitrary concept. Room temperature means 24 degrees for me but maybe your house is colder or warmer. Worry not! Kefir can stand a very wide range of temperatures, anything from 20 to 28 degrees will keep your grains happy, keeping in mind that they can also go in the fridge (but this is something that should not be done often). Now, you&amp;#8217;re probably thinking about whether or not it is dangerous to leave &lt;em&gt;fresh milk&lt;/em&gt; at room temperature and the answer is NO! Normally milk would go bad at room temperature in no time, but because you have your kefir grains inside, the good bacteria from kefir give the bad bacteria (that would make the milk go bad) no chance to spread. So yes, keeping the milk at room temperature is &lt;strong&gt;the normal way of making&lt;/strong&gt; &lt;strong&gt;kefir&lt;/strong&gt;&lt;em&gt;.&lt;/em&gt;
  &lt;/li&gt;
  &lt;li&gt;
    The fourth thing you should know is that making kefir milk does come with some work involved. For instance, it takes kefir grains approximately 24 hours to convert an appropriately sized portion of milk into kefir milk. This means that &lt;strong&gt;every 24 hours&lt;/strong&gt; you&amp;#8217;ll be straining your kefir milk and placing the strained grains in fresh milk. As you can imagine, unless you really like kefir, you&amp;#8217;re gonna get tired after doing this every 24 hours. Still, again, worry not! Even if you&amp;#8217;re not an avid kefir milk drinker, there&amp;#8217;s &lt;em&gt;a way out&lt;/em&gt;. Like I said before, keeping the kefir grains in milk at room temperature is &lt;em&gt;the normal way&lt;/em&gt; of making kefir. Still, you can also keep the milk with the grains in the fridge. At fridge temperature, it will take the grains &lt;strong&gt;a week&lt;/strong&gt; before they ferment the milk into kefir milk. While this sounds like the perfect solution, &lt;strong&gt;do keep in mind&lt;/strong&gt; that every once in a while you should do 2 or 3 batches of kefir at room temperature. The reason behind this is that by making kefir milk in the fridge, you&amp;#8217;re exposing the kefir grains to temperatures they&amp;#8217;re not very comfortable with. Therefore, make sure you don&amp;#8217;t let your grains die and if you&amp;#8217;re using the fridge approach, let them out at room temperature every now and then.
  &lt;/li&gt;
  &lt;li&gt;
    The fifth thing has to do with fermentation times. Keep in mind the following &lt;strong&gt;blanket rule&lt;/strong&gt;: &lt;strong&gt;kefir is drinkable at any fermentation stage&lt;/strong&gt;. This means that if you forgot your kefir and left it fermenting too long, you &lt;strong&gt;don&amp;#8217;t have to throw it away&lt;/strong&gt;. It&amp;#8217;s still good although you will notice the flavor will become somewhat sourish. At some points you may also feel the aroma of fresh yeast, &lt;strong&gt;which is perfectly normal&lt;/strong&gt;. Normally if you have more or less the right amount of grains per quantity of milk, it will take the grains around 24 hours to turn the milk into kefir milk. Still, sometimes we have too many grains and it will take a little shorter to accomplish the same. That&amp;#8217;s perfectly fine and the best way of knowing whether kefir is ready is to just look at it and shake the jar a little bit! If it looks creamy or already solid, your kefir is probably ready. It&amp;#8217;s also perfectly fine (and I recommend it) to stir the kefir milk around half way through (~12h mark) the process. This will make sure the grains circulate around the milk and get in contact with fresh milk that&amp;#8217;s not yet kefir.
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  And that&amp;#8217;s it! These five items are the major things you should know about kefir. There&amp;#8217;s &lt;strong&gt;one last thing&lt;/strong&gt; I would like to mention and that is the type of milk that you use. I &lt;strong&gt;strongly recommend&lt;/strong&gt; that you use non-skim milk (in het Nederlands: volle melk). In my experience, the skimmed milk is just not as creamy and the results are not as good as full fat milk. My grains (in case you got your kefir from me) are also &lt;strong&gt;ALWAYS&lt;/strong&gt; fermented in biologic full fat fresh milk from Campina. The biologic thing is not a requirement but I like to think the kefir grains are happier in milk made by happier cows!
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  That&amp;#8217;s it for this post! If you do have any questions, feel free to message me on Facebook, drop me a comment or just e-mail me! Whatever works for you!
&lt;/p&gt;
</description>
        <pubDate>Fri, 20 Sep 2013 09:45:32 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2013/09/ok-i-got-some-kefir-now-what-or-kefir-quickstart-guide/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2013/09/ok-i-got-some-kefir-now-what-or-kefir-quickstart-guide/</guid>
        
        <category>how to make kefir</category>
        
        <category>kefir</category>
        
        <category>kefir grains</category>
        
        <category>kefir milk</category>
        
        <category>kefir quick</category>
        
        <category>kefir quick guide</category>
        
        <category>kefir quickstart</category>
        
        
        <category>Life hacks</category>
        
      </item>
    
      <item>
        <title>Would you like some Kefir? Like some what?!</title>
        <description>&lt;p style=&quot;text-align: justify;&quot;&gt;
  Not long ago my father had mentioned this thing called &amp;#8216;kefir&amp;#8217; with which you could apparently make yoghurt. At the time I didn&amp;#8217;t pay much attention and he, despite mentioning that this kefir thing could be obtained for free (or just by paying postage), didn&amp;#8217;t make much of it either. It was not until recently, when I travelled to Russia (where it is very popular) that I finally got in close contact with &amp;#8216;kefir&amp;#8217;.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Read on to learn more about kefir.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;!--more--&gt;
&lt;/p&gt;

&lt;h2 style=&quot;text-align: justify;&quot;&gt;
  So what is kefir, really?
&lt;/h2&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  &amp;#8216;Kefir&amp;#8217; is often used to refer to one of two things: either the &lt;em&gt;grains&lt;/em&gt; that make kefir &lt;em&gt;milk&lt;/em&gt; or the kefir milk itself. The grains look very much like tapioca pearls that have been soaked in water. They are spongy, clump together, but they have a massive difference from tapioca pearls: &lt;em&gt;they&amp;#8217;re alive!&lt;/em&gt; No seriously, kefir grains are simply clumps of symbiotic colonies composed of yeasts and bacterias. That doesn&amp;#8217;t sound very inviting, does it!&lt;em&gt;&lt;br /&gt; &lt;/em&gt;
&lt;/p&gt;

&lt;div id=&quot;attachment_619&quot; style=&quot;width: 338px&quot; class=&quot;wp-caption aligncenter&quot;&gt;
  &lt;img class=&quot;wp-image-619&quot; alt=&quot;Kefir grains&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2013/09/Kefirpilze.jpg&quot; width=&quot;328&quot; height=&quot;218&quot; /&gt;
  
  &lt;p class=&quot;wp-caption-text&quot;&gt;
    Kefir grains &amp;#8211; image courtesy of Wikipedia
  &lt;/p&gt;
&lt;/div&gt;

&lt;div id=&quot;attachment_618&quot; style=&quot;width: 330px&quot; class=&quot;wp-caption aligncenter&quot;&gt;
  &lt;a href=&quot;https://www.tiagoespinha.net/wp-content/uploads/2013/09/Kefir03.jpg&quot; rel=&quot;lightbox[613]&quot; title=&quot;Would you like some Kefir? Like some what?!&quot;&gt;&lt;img class=&quot;wp-image-618&quot; alt=&quot;Kefir milk&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2013/09/Kefir03.jpg&quot; width=&quot;320&quot; height=&quot;250&quot; /&gt;&lt;/a&gt;
  
  &lt;p class=&quot;wp-caption-text&quot;&gt;
    Finished kefir milk
  &lt;/p&gt;
&lt;/div&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  But it is! After spending a few days in Russia and finding kefir milk in almost every restaurant (and drinking it with almost every meal), it started growing in me (pun totally and shamefully intended!). When I came back I decided to investigate what was kefir. What I found out was a barrage of health benefits that are traditionally associated with it. Some people call kefir a &lt;em&gt;super probiotic drink&lt;/em&gt;. You know the off-the-shelf yoghurt that promises L. Casei Imunitass as providing you with marvelous bacteria for your intestinal tract? Well, kefir (when home made, not bought at the store) contains more than &lt;em&gt;SEVENTY&lt;/em&gt; different strains of beneficial bacteria for your intestines. Are you sold yet? I was, after the &lt;em&gt;SEVENTY&lt;/em&gt;.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Now comes the best part. Like I mentioned in the very beginning of this post, kefir can be obtained for &lt;strong&gt;free&lt;/strong&gt;. Now, that&amp;#8217;s not the kefir &lt;em&gt;milk&lt;/em&gt; but the &lt;em&gt;grains&lt;/em&gt; that ferment fresh milk into &lt;em&gt;kefir milk&lt;/em&gt;. These grains are given away for free by some people because as soon as you start making kefir &lt;em&gt;milk&lt;/em&gt; daily, the grains will start growing like there&amp;#8217;s no tomorrow. Yes! The grains grow in size!
&lt;/p&gt;

&lt;h2 style=&quot;text-align: justify;&quot;&gt;
  How do I get it?
&lt;/h2&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  After obtaining a small mother colony off Marktplaats for a mere 1 euro plus 1 euro postage, I&amp;#8217;ve started making it and drinking it every day. My only problem right now? I have too many kefir grains! Would you like some? Then please drop me a comment with your e-mail address and I&amp;#8217;ll be in touch!
&lt;/p&gt;

&lt;h2 style=&quot;text-align: justify;&quot;&gt;
  Want to learn more?
&lt;/h2&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  I could spend a whole day writing about how to ferment your kefir milk and discussing best and worst techniques but all of that would be in vain. All of this information can be found on what&amp;#8217;s the most comprehensive guide to kefir: &lt;a href=&quot;http://users.sa.chariot.net.au/~dna/kefirpage.html&quot;&gt;Dom&amp;#8217;s website&lt;/a&gt;. He describes in detail what kefir is and how to successfully ferment your milk (and water and coconut milk!) with your kefir grains. Be sure to visit his website as it is the reference to anyone who aspires to make his own kefir!
&lt;/p&gt;
</description>
        <pubDate>Wed, 18 Sep 2013 08:02:29 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2013/09/would-you-like-some-kefir-like-some-what/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2013/09/would-you-like-some-kefir-like-some-what/</guid>
        
        <category>health</category>
        
        <category>home made yoghurt</category>
        
        <category>kefir</category>
        
        <category>kefir grains</category>
        
        <category>kefir milk</category>
        
        <category>kefir yoghurt</category>
        
        <category>yoghurt</category>
        
        
        <category>Life hacks</category>
        
      </item>
    
      <item>
        <title>WeChat Pebble &amp;#8211; WeChat notifications on your Pebble!</title>
        <description>&lt;p&gt;As the &lt;a href=&quot;http://getpebble.com/&quot;&gt;Pebble smartwatch&lt;/a&gt; is becoming more and more mainstream, so is the need for supporting a wider range of messaging applications. While much of the Western world does not know about &lt;a href=&quot;http://www.wechat.com/&quot;&gt;WeChat&lt;/a&gt;, surely everyone has at some point or another heard of WhatsApp or Blackberry Messenger. Well, WeChat is very much the same thing but it’s the most popular mobile instant messaging chat in China with over &lt;strong&gt;300 million users&lt;/strong&gt;! The single one feature that makes WeChat unique is having a walkie-talkie feature in its very core. At the literal push and release of a single button, WeChat users can send voice messages to each other, thus avoiding all the trouble of typing.&lt;/p&gt;

&lt;p&gt;Because WeChat is popular in China, it is bound to push notifications which include Chinese characters. These characters are currently not supported in the Pebble (it uses Unicode for character encoding but due to space restriction it does not include fonts for characters beyond the Latin alphabet) and WeChat Pebble also takes this issue out of the way.&lt;/p&gt;

&lt;p&gt;Adding a font with 2000~3000 characters seems to be troublesome due to severe space restrictions in the Pebble firmware. Therefore, I came up with an approach which makes use of the &lt;a href=&quot;http://unifoundry.com/unifont.html&quot;&gt;Unifont character library&lt;/a&gt; to render messages on the Android app and send them to the Pebble watch as a bitmap. This effectively solves the problem not only for Chinese but also for Russian, Hebrew, you name it!&lt;/p&gt;

&lt;div id=&quot;attachment_600&quot; style=&quot;width: 287px&quot; class=&quot;wp-caption aligncenter&quot;&gt;
  &lt;a href=&quot;https://www.tiagoespinha.net/wp-content/uploads/2013/08/2013-07-31-13.57.36.jpg&quot; rel=&quot;lightbox[595]&quot; title=&quot;WeChat Pebble - WeChat notifications on your Pebble!&quot;&gt;&lt;img class=&quot;wp-image-600&quot; alt=&quot;WeChat Pebble in action!&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2013/08/2013-07-31-13.57.36.jpg&quot; width=&quot;277&quot; height=&quot;368&quot; /&gt;&lt;/a&gt;
  
  &lt;p class=&quot;wp-caption-text&quot;&gt;
    WeChat Pebble in action!
  &lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;All of this is available as open-source and for free.&lt;/p&gt;

&lt;p&gt;-&amp;gt; &lt;strong&gt;If you are a developer&lt;/strong&gt;, read past the installation steps for some hardcore open-source goodies&lt;/p&gt;

&lt;p&gt;-&amp;gt; &lt;strong&gt;If you just want to use this&lt;/strong&gt; and don’t care about the source code, just read the following two simple steps!&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;line-height: 16px;&quot;&gt;1 – Install the Android app available in the Play Store &lt;a href=&quot;http://play.google.com/store/apps/details?id=com.espinhasoftware.wechatpebble&quot;&gt;here&lt;/a&gt; or by scanning the QR code below.&lt;br /&gt; &lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NOTE: &lt;/strong&gt;For the app to actually push the WeChat notifications you have to first start the app and follow the instructions. Also keep in mind that in the Settings you can choose different types of notifications.&lt;/p&gt;

&lt;div id=&quot;attachment_596&quot; style=&quot;width: 178px&quot; class=&quot;wp-caption aligncenter&quot;&gt;
  &lt;a href=&quot;https://www.tiagoespinha.net/wp-content/uploads/2013/08/market.png&quot; rel=&quot;lightbox[595]&quot; title=&quot;WeChat Pebble - WeChat notifications on your Pebble!&quot;&gt;&lt;img class=&quot;wp-image-596&quot; alt=&quot;Play Store&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2013/08/market.png&quot; width=&quot;168&quot; height=&quot;168&quot; /&gt;&lt;/a&gt;
  
  &lt;p class=&quot;wp-caption-text&quot;&gt;
    Play Store
  &lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;&lt;span style=&quot;line-height: 16px;&quot;&gt;(N.B. If for some reason you cannot access the Android Play Store, the .apk is also available directly from my website by clicking &lt;a href=&quot;http://www.tiagoespinha.net/wechatpebble/WeChatPebble.apk&quot;&gt;here&lt;/a&gt;.)&lt;/span&gt;&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;2 – Install the Pebble watchapp by installing this &lt;a href=&quot;http://www.tiagoespinha.net/wechatpebble/watchface.pbw&quot;&gt;.pbw&lt;/a&gt; or by scanning the QR code below.&lt;/p&gt;

&lt;div id=&quot;attachment_597&quot; style=&quot;width: 178px&quot; class=&quot;wp-caption aligncenter&quot;&gt;
  &lt;a href=&quot;https://www.tiagoespinha.net/wp-content/uploads/2013/08/watchapp.png&quot; rel=&quot;lightbox[595]&quot; title=&quot;WeChat Pebble - WeChat notifications on your Pebble!&quot;&gt;&lt;img class=&quot;wp-image-597&quot; alt=&quot;Pebble Watch App (.pbw)&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2013/08/watchapp.png&quot; width=&quot;168&quot; height=&quot;168&quot; /&gt;&lt;/a&gt;
  
  &lt;p class=&quot;wp-caption-text&quot;&gt;
    Pebble Watch App (.pbw)
  &lt;/p&gt;
&lt;/div&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;After this you’re pretty much done! Just enjoy and feel free to drop me a comment below or visit the Pebble forums’ &lt;a href=&quot;http://forums.getpebble.com/discussion/6719/working-full-unicode-font-support-in-the-pebble&quot;&gt;here&lt;/a&gt;! I will keep updating this post with news on the WeChat Pebble app.&lt;/p&gt;

&lt;p&gt;The source code is available for free on GitHub: &lt;a href=&quot;https://github.com/etiago/WeChatPebble&quot;&gt;https://github.com/etiago/WeChatPebble&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>Mon, 12 Aug 2013 18:04:38 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2013/08/wechat-pebble-wechat-notifications-on-your-pebble/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2013/08/wechat-pebble-wechat-notifications-on-your-pebble/</guid>
        
        <category>Android</category>
        
        <category>Android app</category>
        
        <category>notifications</category>
        
        <category>Pebble</category>
        
        <category>Pebble Smartwatch</category>
        
        <category>Pebble Unicode</category>
        
        <category>Pebble watchapp</category>
        
        <category>Smartwatch</category>
        
        <category>Unicode support Pebble</category>
        
        <category>WeChat</category>
        
        <category>WeChat notifications</category>
        
        <category>WeChat notifications Pebble</category>
        
        <category>WeChat Pebble</category>
        
        
        <category>Android</category>
        
        <category>Software</category>
        
      </item>
    
      <item>
        <title>Now running off a Raspberry Pi!</title>
        <description>&lt;p style=&quot;text-align: justify;&quot;&gt;
  During my recent trip to the UK I indulged myself in buying a Raspberry Pi. There&amp;#8217;s just so many things you can do with one that my initial plan of having it as an XMBC media center in our living room was quickly subdued by the rush to run my blog off it.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Lo and behold! Here it is!
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  This blog now proudly runs off the Raspberry Pi in the photo below. Neat, hey?!
&lt;/p&gt;

&lt;div id=&quot;attachment_592&quot; style=&quot;width: 433px&quot; class=&quot;wp-caption aligncenter&quot;&gt;
  &lt;a href=&quot;https://www.tiagoespinha.net/wp-content/uploads/2013/08/2013-08-12-11.26.22.jpg&quot; rel=&quot;lightbox[589]&quot; title=&quot;Now running off a Raspberry Pi!&quot;&gt;&lt;img class=&quot;wp-image-592&quot; alt=&quot;The mint plant in the background goes hand in hand with the RPi&apos;s green nature at only 3.5W input!&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2013/08/2013-08-12-11.26.22.jpg&quot; width=&quot;423&quot; height=&quot;317&quot; /&gt;&lt;/a&gt;
  
  &lt;p class=&quot;wp-caption-text&quot;&gt;
    The mint plant in the background goes hand in hand with the RPi&amp;#8217;s green nature at only 3.5W input!
  &lt;/p&gt;
&lt;/div&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  My next plan, with the money I&amp;#8217;ll save from not paying for hosting, is to buy at least one more (I actually want to buy &lt;em&gt;two&lt;/em&gt; more but shh! Don&amp;#8217;t tell my wife!) to serve as my own personal mail server. With the free version of Google Apps going the way of dinosaurs and even though current users can still use the service, it&amp;#8217;s pretty clear we&amp;#8217;re second class customers and rather than waiting until we&amp;#8217;re pushed to pay, I&amp;#8217;d rather be more proactive and switch on my own timing. In all honesty, after the &lt;a href=&quot;http://www.theverge.com/2013/8/10/4608664/lavabit-founder-closed-his-secure-email-service-to-protect-the&quot;&gt;recent news on Lavabit&lt;/a&gt; I&amp;#8217;m starting to grow more and more afraid of having my private data based off US servers, so Raspberry Pis it is!
&lt;/p&gt;
</description>
        <pubDate>Mon, 12 Aug 2013 11:59:41 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2013/08/now-running-off-a-raspberry-pi/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2013/08/now-running-off-a-raspberry-pi/</guid>
        
        
        <category>Hardware</category>
        
        <category>Technology</category>
        
      </item>
    
      <item>
        <title>Silicon Valley and Mozilla (or The Story of How I started Using Firefox Again)</title>
        <description>&lt;p style=&quot;text-align: justify;&quot;&gt;
  My blog writing continues being as sporadic as sporadic can be, and it kind of saddens me because writing still is very much a passion for me.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  This time I come to you, my readers, with an exciting trip I recently took to Silicon Valley with a group of entrepreneurs from Delft&amp;#8217;s University of Technology. In this trip I had the opportunity of meeting many different interesting people from all walks of life. People with different life experiences that ranged from an ex-con to people who had successfully started their own tech company. Amongst all these people, there was one that really stood out for me, and that was &lt;a href=&quot;http://finette.com/&quot;&gt;Pascal Finette&lt;/a&gt; who you might or not know. Pascal is &lt;em&gt;something&lt;/em&gt; at Mozilla. To be frank, I didn&amp;#8217;t actually get what&amp;#8217;s his official position but in the grand scheme of things, it didn&amp;#8217;t really matter. As a matter of fact, I think that&amp;#8217;s part of the take home message from the presentation Pascal gave us. What you do matters much more than what you say.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  In many ways, Pascal&amp;#8217;s talk was inspiring. Somehow I had this prejudice that Mozilla (and Firefox, more specifically) was a dying brand/company, but this view changed as soon as I stepped into their offices in Silicon Valley and started hearing about their core values. Many a times we hear the cliche &amp;#8220;there&amp;#8217;s no free lunch&amp;#8221;, but if there is such a thing as &lt;em&gt;free lunch&lt;/em&gt;, then that&amp;#8217;s what Mozilla is doing for us and they&amp;#8217;re doing it for the sake of it. Truly for free. Looking at what Mozilla does from a truly objective perspective, it kinda feels like Mozilla is the Mother Theresa of the software world. And don&amp;#8217;t take me wrong, there are many such companies out there, but Mozilla in particular inspires me for how they defined their core values and for how they juggle so well their position as a company that needs to be kept financially afloat and as an ultimately open-source organization which relies (as far as I understand) solely on no one but themselves and a bunch of people who contribute with labor and money.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  I&amp;#8217;m an open-source advocate, but that doesn&amp;#8217;t mean I&amp;#8217;m an open-source monkey. I&amp;#8217;m that kind of guy who knows the value of open-source but not the kind of guy who uses open-source exclusively just because it&amp;#8217;s open and free. Open-source is great and many open-source projects stand shoulder to shoulder with their paid counterparts but for many things still, the paid alternatives are just better. Being a contributor to open-source &lt;a href=&quot;http://db.apache.org/whoweare.html&quot;&gt;myself &lt;/a&gt;I&amp;#8217;m able to see the value in it while at the same time realizing that sometimes, you just have to pay to have software that makes your life easier (e.g. give me Photoshop over Gimp, anytime).
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  There&amp;#8217;s also a long standing &amp;#8220;joke&amp;#8221; in the open-source world, in that most non-tech people actually don&amp;#8217;t know what&amp;#8217;s open-source. They don&amp;#8217;t know the difference between free and &amp;#8220;libre&amp;#8221; (&amp;#8220;libre&amp;#8221;, being a Spanish word for the &lt;em&gt;other kind of free&lt;/em&gt; which seemingly the English language cannot describe, became famous for its inclusion in the name LibreOffice &amp;#8211; a branch of OpenOffice that&amp;#8217;s, well, truly open, free and libre).  Naturally, many people would describe Chrome as free, or Facebook even. What they don&amp;#8217;t know is that whenever they use either of these products, they &lt;em&gt;are&lt;/em&gt; paying with one of their most precious possessions: their privacy.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  I don&amp;#8217;t want to get into legal trouble here, and for the most part I like to think of Google as mostly benevolent (but a corporation nonetheless). However, if you truly want to stick it to the man and use something that is pure free and no strings attached to any corporation that makes money off you, go Mozilla; go Firefox. The browser is not worse than Chrome, and this is the story of how they conquered me back. Through one talk by Pascal Finette.
&lt;/p&gt;
</description>
        <pubDate>Sun, 26 May 2013 17:41:16 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2013/05/silicon-valley-and-mozilla-or-the-story-of-how-i-started-using-firefox-again/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2013/05/silicon-valley-and-mozilla-or-the-story-of-how-i-started-using-firefox-again/</guid>
        
        <category>Firefox</category>
        
        <category>Libre</category>
        
        <category>Mozilla</category>
        
        <category>Open source</category>
        
        <category>Pascal Finette</category>
        
        <category>Privacy</category>
        
        <category>Silicon Valley</category>
        
        <category>Software</category>
        
        <category>SV</category>
        
        
        <category>Software</category>
        
      </item>
    
      <item>
        <title>libgdx and Vector2 mutability</title>
        <description>&lt;p style=&quot;text-align: justify;&quot;&gt;
  Here&amp;#8217;s a quick post to rant about something that&amp;#8217;s been affecting me for the last couple of days.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Recently I find myself toying around with libgdx to work on a game that I&amp;#8217;ve been meaning to develop for a while. The problem with this library is that apparently, all Vector2 functions affect the actual vector on which they are invoked. This goes against the Java standard of immutability for non-primitive types and is incredibly annoying, especially because these functions will also return the vector for chaining.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Why is this annoying? Well, when you&amp;#8217;re used to the Java standard, you don&amp;#8217;t expect any functions to affect the actual object. Think for example about Java&amp;#8217;s String.split. This will never affect the String itself, especially because the String is immutable. Affecting the String would mean creating a new instance of that string with the change applied to it.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Frankly, I&amp;#8217;m not sure what happens in the backstage but this stinks.
&lt;/p&gt;
</description>
        <pubDate>Wed, 07 Nov 2012 21:48:27 +0000</pubDate>
        <link>https://www.tiagoespinha.net/2012/11/libgdx-and-vector2-mutability/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2012/11/libgdx-and-vector2-mutability/</guid>
        
        <category>game development</category>
        
        <category>libgdx</category>
        
        <category>quickies</category>
        
        <category>Software</category>
        
        
        <category>Game development</category>
        
        <category>Quickies</category>
        
        <category>Software</category>
        
      </item>
    
      <item>
        <title>Turmeric SOA &amp;#8211; Lessons learned</title>
        <description>&lt;p style=&quot;text-align: justify;&quot;&gt;
  As soon as I picked up on Turmeric SOA as the engine that powers my research, one of my supervisors warned me: be careful, or you&amp;#8217;ll be caught in technology hell. As much as I hate to admit it, this has inevitably happened. The point is&amp;#8230; I&amp;#8217;m using Turmeric SOA which is open-source and open-source is great for research. Everything is so open that I can afford to publish literally everything I do. This means that all the claims I make with my research can be easily verified independently by other researchers.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  I love this transparency.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  The problem comes when the transparency is the result of emptiness. More specifically, Turmeric SOA is open but its documentation lacks vastly. In the inception of its open-sourcing by Intalio, Inc. their software engineers were working night and day to adapt the wiki pages (which apparently are the only public form of documentation) from mentioning &amp;#8220;EBAY&amp;#8221; to mentioning &amp;#8220;TURMERIC&amp;#8221;. However, as the dust began to settle and eBay decided to go in-house with the open-sourcing, the work done on Turmeric SOA has greatly diminished and what once was a promising open project is now a graveyard. eBay&amp;#8217;s software engineers keep a low key and aren&amp;#8217;t exactly supportive of other people using Turmeric SOA which is very disappointing. It seems common sense that if a project is open-sourced, the main goal should be for it to get a large user-base. The more people contributing and using a piece of software, the more ideas and bugs will be found and thus, the more refined the project will become.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  This has not happened. As an outsider, eBay&amp;#8217;s stance on open-source seems that of a beach-goer who&amp;#8217;s too afraid to go for a dive and instead just keeps probing the water with their toes. This is bad. It&amp;#8217;s bad for eBay because it will inevitably taint their reputation with open-source, it&amp;#8217;s bad for the community who now get a half-baked services platform and it&amp;#8217;s bad more specifically for me. Now I have to deal with a promising but ultimately difficult to use platform. Most everything I do with Turmeric SOA requires copious amounts of manual debugging in order to figure out what&amp;#8217;s happening and ultimately, these debugging sessions reveal that what was advertised as a feature, really isn&amp;#8217;t one.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  In sum, the lesson learned is: be wary of large open-source projects. Unless there is a strong community around it, you&amp;#8217;re gonna have a real tough time.
&lt;/p&gt;
</description>
        <pubDate>Fri, 28 Sep 2012 10:21:06 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2012/09/turmeric-soa-lessons-learned/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2012/09/turmeric-soa-lessons-learned/</guid>
        
        <category>eBay</category>
        
        <category>Intalio</category>
        
        <category>Open source</category>
        
        <category>services</category>
        
        <category>SOA</category>
        
        <category>Software</category>
        
        <category>Software as a service</category>
        
        <category>Turmeric SOA</category>
        
        
        <category>Open source</category>
        
        <category>Research</category>
        
        <category>SOA</category>
        
        <category>Software</category>
        
      </item>
    
      <item>
        <title>The cross-discipline conundrum (or how we can&amp;#8217;t always learn from other disciplines)</title>
        <description>&lt;p style=&quot;text-align: justify;&quot;&gt;
  I was cycling home one day and this thought popped into my mind: I&amp;#8217;m trying to address the issues of multi-tenancy in software systems. In other words, that is to say that I&amp;#8217;m trying to make it easier for several software systems to co-exist, as tenants, in the same piece of hardware. When we think about it from a software perspective, it is definitely novel &amp;#8211; big names out there like Microsoft, VMWare, Salesforce, etc are working hard on this (each in their own way of course) and it&amp;#8217;s a rather hot topic. Companies provide their employees with Microsoft Azure training and there&amp;#8217;s this growing need to fit more (tenants) in less (hardware). Come to think of it, it&amp;#8217;s a bit like what&amp;#8217;s happening in big cities all over the world.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Wait a minute.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;strong&gt;That&amp;#8217;s exactly what&amp;#8217;s happening in big cities all over the world!&lt;/strong&gt;
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  And why does this matter, you ask. Well, we&amp;#8217;ve been doing this with people and cities for the best part of a century, so maybe some of the problems we face in software have already been dealt with in the &amp;#8220;physical world&amp;#8221;. &amp;#8220;Sure, Tiago, that&amp;#8217;s obvious! Why are you still writing this blog post and not out there reading books on urbanization?&amp;#8221;. Yeah, yeah, yeah&amp;#8230; have you read the title of the post? How we &lt;strong&gt;can&amp;#8217;t&lt;/strong&gt; always learn from other disciplines.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Multi-tenancy in software engineering presents its own challenges. How can you compare the concept of software versioning to any concept of the physical world? Same goes for concepts like deploying several instances of the same piece of software in different servers. Surely we can&amp;#8217;t deploy the same person across several buildings (well, quantum physics says we can, but let&amp;#8217;s stick to classical mechanics for the purpose of this post) and we definitely don&amp;#8217;t want to have a tenant with a bathroom on one street, the bedroom two blocks away and finally the living room in a different town. That doesn&amp;#8217;t work for people, it&amp;#8217;s not convenient, but it works for software. Software doesn&amp;#8217;t care if it has to invoke method foo() in its own memory stack or if it has to wrap its request in SOAP and have it traverse all over the world to have it executed.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  So what&amp;#8217;s the point of this post, really? While it&amp;#8217;s always good to have a broad cross-disciplinary view and keep an open mind and an eye out for other fields which might be (metaphorically) solving the same problems as yourself, it&amp;#8217;s also very important to identify genuine problems in your field. Sure, resorting to metaphors is perfect to learn from other fields but these don&amp;#8217;t always apply perfectly and when they don&amp;#8217;t apply perfectly, my theory is that they are no good.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  In other news, I just submitted my paper to WCRE 2012 🙂 let&amp;#8217;s see how convincing am I with my maintenance techniques for distributed systems&amp;#8230;
&lt;/p&gt;
</description>
        <pubDate>Tue, 10 Jul 2012 16:22:03 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2012/07/the-cross-discipline-conundrum-or-how-we-cant-always-learn-from-other-disciplines/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2012/07/the-cross-discipline-conundrum-or-how-we-cant-always-learn-from-other-disciplines/</guid>
        
        
        <category>Research</category>
        
        <category>SOA</category>
        
        <category>Software</category>
        
      </item>
    
      <item>
        <title>Changing the way I use my Mac</title>
        <description>&lt;p style=&quot;text-align: justify;&quot;&gt;
  I never thought I would come to write such a post one day, but the truth of the matter is: the way I used to use my computer wasn&amp;#8217;t sustainable. Whoa! It seems you really can use the word sustainable wherever you want&amp;#8230;
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  I&amp;#8217;m a browser person. Pretty much everything I do sits inside the browser: e-mails, RSS feeds, reading the news, facebook, etc&amp;#8230; everything happens inside the browser. When I need to find a scientific paper, what do I do? That&amp;#8217;s right! I use my browser to go to Google Scholar where I then search for what I&amp;#8217;m looking for. Nowadays I&amp;#8217;m even having some Google Docs action ever since I started sharing documents with my fiancée which require the capability of simultaneous collaborative editing. Sadly, all of this can only happen in the browser. Microsoft, with all its might, still hasn&amp;#8217;t figured out a way to make Microsoft Office collaborative. But I digress.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  The point is, those of you who are lazy and like to keep things at hand (like me), probably end up with at least 10 tabs open at all time. And your work flow is something like &amp;#8220;open tab&amp;#8221;, &amp;#8220;search for something&amp;#8221;, &amp;#8220;close tab&amp;#8221; and that would be peachy if it wasn&amp;#8217;t for all the &lt;del&gt;bugs&lt;/del&gt; features present in nowadays&amp;#8217; browsers. For example, if you close a tab in Chrome, Chrome will still keep that tab stored just in case you made a mistake and want to bring it back to life. Similarly, all your path within a tab is stored, in case you want to push the back button to go to where you where before. Now, when you put these two together (a whole path plus saving all the closed tabs), this brings up quite a massive memory requirement. In the beginning it might not be noticeable, but Chrome (and Firefox, Safari, etc) can grow above 1Gb of memory quite fast.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  When that happens, your computer will start swapping memory to the hard-drive and eventually you&amp;#8217;ll start to feel sluggishness in everything you do.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  How can I fix that? This was my first thought. And if I can&amp;#8217;t drive web-browser developers to do something about it and truly make their code more memory friendly, that means I have to change the way I use my Mac. It started with GMail. I&amp;#8217;m an avid GMail user but GMail&amp;#8217;s web interface is loaded with resource-hogging javascript. This meant that GMail had to go and give way to a more resource friendly Thunderbird. A purpose-built application which, despite only serving one task, it&amp;#8217;s always there whenever I need it. It also notifies me whenever I receive a new e-mail and I can even replace Outlook which I was using for my university e-mail! Something about two birds and a stone comes to mind&amp;#8230;
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Not requiring to have my e-mail open in the browser anymore, this meant I could just close the browser whenever I don&amp;#8217;t need it. This has been the biggest change in my behavior. Nowadays, I open the browser, check whatever I want to check, and afterwards, the way of the dinosaurs it goes again. This means that the memory usage of the browser never goes up like mad anymore, my computer is always snappy and all the frustration of dealing with a slow as molasses computer is gone.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Nota bene, I have 8Gb of RAM in my Mac, I&amp;#8217;ve had it this way for a while now, and if history has taught me anything, that is that no amount of RAM is enough when you use the browser continuously, without ever closing it or restarting your computer. Period.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Lesson learned? How happy you feel about your computer&amp;#8217;s speed has a strong correlation (and causation) with how often you close your browser.
&lt;/p&gt;
</description>
        <pubDate>Mon, 09 Jul 2012 11:58:46 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2012/07/changing-the-way-i-use-my-mac/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2012/07/changing-the-way-i-use-my-mac/</guid>
        
        
        <category>Software</category>
        
        <category>Technology</category>
        
      </item>
    
      <item>
        <title>[Quickies] Why can&amp;#8217;t I move (certain) applications to the SD card?</title>
        <description>&lt;p&gt;Following up on the previous “quickies” format, I decided to answer a question that goes unanswered through a quick Google search. This quickie has to do with the &lt;em&gt;Android OS&lt;/em&gt; platform.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Question&lt;/strong&gt;: Why can’t I move certain applications to the SD card?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Answer&lt;/strong&gt;: The “move to SD card” feature of Android MUST be explicitly enabled by the developers of each application. This is the reason why for some apps, the “move to SD card” button is greyed out.&lt;/p&gt;

&lt;p&gt;Hope that helps anyone who’s ever asked Google this question!&lt;/p&gt;
</description>
        <pubDate>Mon, 09 Jan 2012 14:56:59 +0000</pubDate>
        <link>https://www.tiagoespinha.net/2012/01/quickies-why-cant-i-move-certain-applications-to-the-sd-card/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2012/01/quickies-why-cant-i-move-certain-applications-to-the-sd-card/</guid>
        
        <category>Android</category>
        
        <category>android move to SD</category>
        
        <category>Android OS</category>
        
        <category>move applications to SD card</category>
        
        <category>quickies</category>
        
        <category>SD card</category>
        
        
        <category>Android</category>
        
        <category>Quickies</category>
        
      </item>
    
      <item>
        <title>[Quickies] Galaxy S2 MIUI 1.12.30 Camera Force Closes</title>
        <description>&lt;p style=&quot;text-align: justify;&quot;&gt;
  I&amp;#8217;ve tagged this post as a &amp;#8220;quickie&amp;#8221; as I just want to share the solution to a problem I&amp;#8217;ve been having with my recently bought Galaxy S2. This solution was found indirectly and from my extensive search through the Internet, I haven&amp;#8217;t found anyone describing either this problem or the solution to it.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;strong&gt;Problem&lt;/strong&gt;: When using the MIUI 1.12.30 ROM on the Samsung Galaxy S2, the camera will freeze and eventually force close while attempting to record video.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;strong&gt;Solution&lt;/strong&gt;: The solution to this problem is so simple that &amp;#8220;it hurts&amp;#8221;. If you&amp;#8217;re running MIUI, your kernel will most certainly have the ClockworkMod (CWM) flashed onto it. You will have to go into CWM (i.e. Shutdown phone then power it up with the combo Volume Up + Power + Home), then into the &amp;#8220;advanced&amp;#8221; menu and choose the &amp;#8220;fix permissions&amp;#8221; option.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  After you&amp;#8217;ve done this, reboot the phone et voilà! It&amp;#8217;s really that easy!
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  I&amp;#8217;ve found this &lt;a href=&quot;http://forum.cyanogenmod.com/topic/32601-camera-keeps-force-closing/page__p__278856__hl__camera__fromsearch__1&quot;&gt;solution&lt;/a&gt; through having a similar problem in CyanogenMod. In their forums they explain how to fix it for CM7.1 so I decided to give it a try on MIUI. Turns out the problem is the same.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Hope this saved you some time!
&lt;/p&gt;
</description>
        <pubDate>Tue, 03 Jan 2012 22:29:39 +0000</pubDate>
        <link>https://www.tiagoespinha.net/2012/01/quickies-galaxy-s2-miui-1-12-30-camera-force-closes/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2012/01/quickies-galaxy-s2-miui-1-12-30-camera-force-closes/</guid>
        
        <category>Camera FC</category>
        
        <category>Camera Force Close</category>
        
        <category>FC</category>
        
        <category>Force Close</category>
        
        <category>Galaxy S2</category>
        
        <category>Galaxy SII</category>
        
        <category>MIUI Camera</category>
        
        <category>MIUI Camera FC</category>
        
        <category>MIUI FC</category>
        
        <category>MIUI Force Close</category>
        
        
        <category>Android</category>
        
        <category>Quickies</category>
        
      </item>
    
      <item>
        <title>WSO2 PHP&amp;#8217;s WSF Library (or whatever the damn it is called&amp;#8230;) and Turmeric SOA</title>
        <description>&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;a href=&quot;https://www.tiagoespinha.net/wp-content/uploads/2011/09/762791717WSO2pic.jpg&quot; rel=&quot;lightbox[519]&quot; title=&quot;762791717WSO2pic&quot;&gt;&lt;img class=&quot;alignleft size-full wp-image-523&quot; title=&quot;762791717WSO2pic&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2011/09/762791717WSO2pic.jpg&quot; alt=&quot;&quot; width=&quot;250&quot; height=&quot;102&quot; /&gt;&lt;/a&gt;The title of this post is verbose enough about the feelings I have regarding the naming of this library. It&amp;#8217;s as if WSO2 took a page from Microsoft&amp;#8217;s book regarding names. What&amp;#8217;s next? A Home Edition? Maybe throw in Professional, Business and Ultimate versions too for good measure.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Don&amp;#8217;t take me wrong, I have no special feelings towards names themselves, it&amp;#8217;s just how difficult it makes to search for people working on the same things and facing the same problems. What do I Google for? WSO2? WSF? PHP? Any combination of these? It&amp;#8217;s only made worse by these guys developing frameworks in several platforms, which means I end up finding completely unrelated results from a different implementation, in a different technology.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  But, naming rants aside, I thought it would be a good idea to share my experience with getting this library up and running on PHP. I came across this library when converting Apache Stonehenge&amp;#8217;s web application to use Turmeric&amp;#8217;s instances of Stonehenge&amp;#8217;s web services, and it gave me quite some headaches. For this reason, and so that other people in the future don&amp;#8217;t have to go through the same painful experiences, I decided to write this blog post. Keep reading if I got your attention&amp;#8230;&lt;!--more--&gt;
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  First and foremost, I should warn that I&amp;#8217;m also gonna write the Linux walkthrough and it does expect you to have some basic Linux knowledge. Nothing too advanced, you just need to know your way around a Linux system in a command line. If you meet this criterion, this walkthrough should be a walk in the park (no pun intended there).
&lt;/p&gt;

&lt;h3 style=&quot;text-align: justify;&quot;&gt;
  Setting up the library
&lt;/h3&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  To begin with, you must download the WSF PHP library &lt;strong&gt;sources&lt;/strong&gt;. You should be able to find it &lt;a href=&quot;http://wso2.com/products/web-services-framework/php/&quot;&gt;here&lt;/a&gt; somewhere. At the time of writing, the latest version is 2.1.0. Make sure you download the &lt;strong&gt;sources&lt;/strong&gt;. Sadly, the binaries only include DLL&amp;#8217;s for the Windows installation, which means that us, Linux users, must compile our own binaries by hand. No biggie though, it&amp;#8217;s easier than it sounds.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  After you&amp;#8217;ve downloaded the library, the next thing you should do is &amp;#8220;cd&amp;#8221; into the directory. Then, normally you&amp;#8217;d just do ./configure followed by a make and make install, but there&amp;#8217;s a caveat: it&amp;#8217;s VERY recommended that you specify a prefix when you do ./configure. The prefix will tell WSO2 where to place the binaries after you compile and &amp;#8220;install&amp;#8221;, and this is extremely useful for WSF as you&amp;#8217;ll need a clean directory featuring only the binary files of this library. You&amp;#8217;ll understand why in a minute.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  In sum, you should do:
&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre&gt;./configure --prefix=/usr/local/bin/apache2/php/wsf-php/
 make
 [sudo] make install&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  In my example you&amp;#8217;ll see that I&amp;#8217;m telling &amp;#8220;make&amp;#8221; to install the library in /usr/local/bin/apache2/php/wsf-php/ and in the last step I&amp;#8217;ve also accounted for those of you who, like me, use Ubuntu. If you use Ubuntu, make sure you add the sudo before the make install command (without brackets).
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;strong&gt;Troubleshooting: &lt;/strong&gt;If you installed PHP through Ubuntu&amp;#8217;s packages, it is possible that everything went fine at this point. If it did (i.e. if you got no errors in neither of the stages) then excellent. Move on. Skip this section. If, on the other hand, you got an error about a missing php-config, then you need to specify the path to this binary in the ./configure step. First you should know where your PHP installation lies (and you&amp;#8217;re entirely on your own for this one) and once you know where it is, your php-config binary is inside &lt;path_to_php&gt;/bin/. Once you figured out where that is, you should go back to those three steps above, except your ./configure should look like:
&amp;lt;/p&amp;gt;

&amp;gt; &lt;pre&gt;./configure --prefix=/usr/local/bin/apache2/php/wsf-php/ --with-php-config=&amp;lt;path_to_php&amp;gt;/bin/php-config&lt;/pre&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  After this, don&amp;#8217;t forget of course, to do the make and make install steps.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  With that done, you should now have the compiled library in /usr/local/bin/apache2/php/wsf/ (or in whichever folder you specified as prefix). You also want to have a look at the final lines of the &amp;#8220;make install&amp;#8221; step and look for a reference to a wsf.so file. That&amp;#8217;s THE library that PHP will load and you&amp;#8217;ll need to know exactly where it is. In my case, the library sits in /usr/local/bin/apache2/php/lib/php/extensions/no-debug-non-zts-20090626/wsf.so . My guess is that the make install step is smart enough to put it in the equivalent folder inside your PHP&amp;#8217;s installation. Anyhow, copy this directory.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  The next step involves editing your php.ini file. Again, you should know where this is. After you found it, add the following lines to it:
&lt;/p&gt;

&amp;gt; &lt;pre&gt;extension=/usr/local/bin/apache2/php/lib/php/extensions/no-debug-non-zts-20090626/wsf.so
wsf.home=&quot;/usr/local/bin/apache2/php/wsf-php/&quot;&lt;/pre&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  From that you can see that I put the path to the .so file as an extension that PHP must load, and I specified an entry called &amp;#8220;wsf.home&amp;#8221; that will tell WSF where its &amp;#8220;auxiliary&amp;#8221; files are. This is the path you used as the prefix during the compiling process. These are the two most essential parameters that need to be configured to get WSF up and running, there&amp;#8217;s more but I&amp;#8217;m aiming at the quickest way possible to get it running, with as little configuration as possible.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  After you&amp;#8217;ve added those lines, you should restart your Apache et voilà! Your PHP installation should now have loaded the WSF library. If you want to be sure that everything is up and running, you can check the contents of /tmp/wsf_php_server.log . If everything went well, this log should have no errors.
&lt;/p&gt;

&lt;h3 style=&quot;text-align: justify;&quot;&gt;
  Creating a client and using it
&lt;/h3&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Now comes another &lt;strong&gt;tricky part&lt;/strong&gt;. Great, now your library is up and running, but how do you &lt;strong&gt;use it&lt;/strong&gt;?
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  I&amp;#8217;m gonna provide another quick and simple explanation of how to get a client up and running for an existing service. This assumes, of course, that you already have a service running somewhere which provides you with a WSDL file and SOAP ports that you can invoke.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Provided you have that, you need to copy a folder in the WSF sources to somewhere safe and accessible by PHP (by accessible, I mean, PHP/Apache should have at least read and execute permissions). The folder you need is &lt;WSF_sources&gt;/scripts/. Copy it somewhere you know it won&amp;#8217;t get deleted by an overzealous system administrator and keep it accessible. I would keep it out of public access via Apache but that&amp;#8217;s entirely up to you. It&amp;#8217;s the next step that is &lt;strong&gt;important&lt;/strong&gt;.
&amp;lt;/p&amp;gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Now that you copied this folder (and all its contents) to somewhere safe, you need to go back to your php.ini and add the folder to its include_path definition. In my case, I just uncommented the already existing line and added my scripts folder to it. In the end it looked like:
&lt;/p&gt;

&amp;gt; &lt;pre&gt;include_path = &quot;.:/php/includes:/usr/local/bin/apache2/php/scripts/&quot;&lt;/pre&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  After you&amp;#8217;ve added/uncommented this line, be sure to restart Apache once more. This line will just tell PHP where it can find scripts that WSF will need whenever you&amp;#8217;re using its libraries.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  With that out of the way, the next step consists of creating a PHP classmap of all the operations and types you have in your WSDL file. My advice is that you obtain the WSDL file in advance and store it somewhere in your hard-drive. After you&amp;#8217;ve done this, just go to the scripts folder and do:
&lt;/p&gt;

&amp;gt; &lt;pre&gt;php wsdl2php.php &amp;lt;path_to_your_wsdl_file&amp;gt;&lt;/pre&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  It can happen at this step that Linux will tell you it can&amp;#8217;t find PHP. If that&amp;#8217;s the case, instead of starting off with just &amp;#8220;php&amp;#8221;, use the full path instead.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  By doing this step, you&amp;#8217;ll see a bunch of PHP code scrolling through your console. If that was the case, repeat the command and redirect the output to a file, e.g. &amp;gt; somefile.php.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  This somefile.php is now your client. It includes a PHP class for every type in your WSDL and an action for every SOAP port. It also includes, at the very end, a sample of how you&amp;#8217;d invoke every action. By looking at that you can probably get a good idea of how WSF works, and that&amp;#8217;s pretty much it. I assume that if you&amp;#8217;re messing around with PHP, you do have enough knowledge to get rid of these sample invokations and just use this file as something you import and use in your PHP application. That&amp;#8217;s not going to be covered in this tutorial.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  If you do have questions or ran into trouble while following these steps, please do leave me a comment and I&amp;#8217;ll try to answer as soon as possible. I hope this has somehow helped you, reader. I know I wish I had found something like this post when I first started messing around with WSF!
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Till the next post!
&lt;/p&gt;
&lt;/WSF_sources&gt;&lt;/p&gt;&lt;/path_to_php&gt;&lt;/p&gt;
</description>
        <pubDate>Tue, 13 Sep 2011 10:48:27 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2011/09/wso2-phps-wsf-library-or-whatever-the-damn-it-is-called-and-turmeric-soa/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2011/09/wso2-phps-wsf-library-or-whatever-the-damn-it-is-called-and-turmeric-soa/</guid>
        
        <category>PHP</category>
        
        <category>PHP SOAP</category>
        
        <category>PHP WSF</category>
        
        <category>SOAP</category>
        
        <category>WSF</category>
        
        <category>WSF-PHP</category>
        
        <category>wsfphp</category>
        
        <category>WSO2</category>
        
        <category>WSO2 PHP</category>
        
        <category>WSO2 WSF</category>
        
        
        <category>SOA</category>
        
        <category>Uncategorized</category>
        
      </item>
    
      <item>
        <title>Black and white icons for Caffeine</title>
        <description>&lt;p style=&quot;text-align: justify;&quot;&gt;
  This is gonna be a quick and short post about a tool I use on my Mac called &amp;#8220;&lt;a href=&quot;http://lightheadsw.com/caffeine/&quot;&gt;Caffeine&lt;/a&gt;&amp;#8220;. This tool essentially allows me, at the click of a button, to disable the display&amp;#8217;s dim and eventual turn off function. It&amp;#8217;s useful when you&amp;#8217;re reading something and you won&amp;#8217;t be touching the keyboard or the mouse, but you&amp;#8217;d still like the screen to be on. It&amp;#8217;s useful also when I&amp;#8217;m playing along a guitar tab and I can&amp;#8217;t afford to stop playing just to get the screen back on.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Anyway, this tool places an icon on the status bar. The only problem is that this icon is in color and it just stands out in my status bar like a sore thumb. SO! I created a new icon set. You can get it by clicking &lt;a href=&quot;https://www.tiagoespinha.net/wp-content/uploads/2011/09/icons.zip&quot;&gt;here&lt;/a&gt;. Scroll down to have a look at the icons before you download it.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  All you have to do is copy them to &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Consolas, Monaco, monospace; font-size: 12px; line-height: 18px; white-space: pre;&quot;&gt;/Applications/Caffeine.app/Contents/Resources/ &lt;/span&gt;et voilà! I&amp;#8217;ve included two more icons (not shown here) for the right click behavior.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Icons:&lt;br /&gt; &lt;a href=&quot;https://www.tiagoespinha.net/wp-content/uploads/2011/09/active.png&quot; rel=&quot;lightbox[505]&quot; title=&quot;active&quot;&gt;&lt;img class=&quot;alignleft size-full wp-image-507&quot; title=&quot;active&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2011/09/active.png&quot; alt=&quot;&quot; width=&quot;22&quot; height=&quot;20&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;https://www.tiagoespinha.net/wp-content/uploads/2011/09/inactive.png&quot; rel=&quot;lightbox[505]&quot; title=&quot;inactive&quot;&gt;&lt;img class=&quot;alignleft size-full wp-image-508&quot; title=&quot;inactive&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2011/09/inactive.png&quot; alt=&quot;&quot; width=&quot;22&quot; height=&quot;20&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;p style=&quot;text-align: justify;&quot;&gt;
    This is what it looks like in action:&lt;br /&gt; &lt;a href=&quot;https://www.tiagoespinha.net/wp-content/uploads/2011/09/Screen-Shot-2011-09-11-at-8.40.20-PM.png&quot; rel=&quot;lightbox[505]&quot; title=&quot;Screen Shot 2011-09-11 at 8.40.20 PM&quot;&gt;&lt;img class=&quot;alignleft size-full wp-image-509&quot; title=&quot;Screen Shot 2011-09-11 at 8.40.20 PM&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2011/09/Screen-Shot-2011-09-11-at-8.40.20-PM.png&quot; alt=&quot;&quot; width=&quot;562&quot; height=&quot;22&quot; /&gt;&lt;/a&gt;
  &lt;/p&gt;
  
  &lt;p style=&quot;text-align: justify;&quot;&gt;
    and&lt;br /&gt; &lt;a href=&quot;https://www.tiagoespinha.net/wp-content/uploads/2011/09/Screen-Shot-2011-09-11-at-8.40.48-PM.png&quot; rel=&quot;lightbox[505]&quot; title=&quot;Screen Shot 2011-09-11 at 8.40.48 PM&quot;&gt;&lt;img class=&quot;alignleft size-full wp-image-510&quot; title=&quot;Screen Shot 2011-09-11 at 8.40.48 PM&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2011/09/Screen-Shot-2011-09-11-at-8.40.48-PM.png&quot; alt=&quot;&quot; width=&quot;562&quot; height=&quot;21&quot; /&gt;&lt;/a&gt;
  &lt;/p&gt;
  
  &lt;p style=&quot;text-align: justify;&quot;&gt;
    &lt;p style=&quot;text-align: justify;&quot;&gt;
&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;
</description>
        <pubDate>Sun, 11 Sep 2011 20:47:50 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2011/09/black-and-white-icons-for-caffeine/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2011/09/black-and-white-icons-for-caffeine/</guid>
        
        <category>Apple Caffeine</category>
        
        <category>Caffeine</category>
        
        <category>Caffeine black and white</category>
        
        <category>Caffeine black icons</category>
        
        <category>Design</category>
        
        <category>Mac Caffeine</category>
        
        <category>Software</category>
        
        
        <category>Design</category>
        
      </item>
    
      <item>
        <title>On Turmeric SOA, open-source and the Apache Software Foundation</title>
        <description>&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;a href=&quot;https://www.tiagoespinha.net/wp-content/uploads/2011/08/Service-Oriented-Architecture-SOA-For-Dummies.jpg&quot; rel=&quot;lightbox[490]&quot; title=&quot;Service Oriented Architecture SOA For Dummies&quot;&gt;&lt;img class=&quot;alignleft size-full wp-image-496&quot; title=&quot;Service Oriented Architecture SOA For Dummies&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2011/08/Service-Oriented-Architecture-SOA-For-Dummies.jpg&quot; alt=&quot;&quot; width=&quot;194&quot; height=&quot;240&quot; /&gt;&lt;/a&gt;It&amp;#8217;s been a while since I posted something on this blog, partly due to my laziness, but also due to a chronic lack of time and patience to come home after an intellectually intense day of work and still have the peace of mind to gather my thoughts and put them in words. Today was, luckily, one of those days. Not because it was a particularly easy day at work (reengineering someone else&amp;#8217;s code with little to non-existing documentation is &lt;strong&gt;never&lt;/strong&gt; an easy job) but perhaps the intense gym session loosed my brains just enough for organized and coherent thought to just happen. In any case, I digress.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  This post has three main themes. I will be talking about a platform for SOA applications called Turmeric (funny name, I know. I&amp;#8217;m using for SOA the same I use in my lentil soup), open-source in general and finally, the Apache Software Foundation and some recent events I&amp;#8217;ve been involved in.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;!--more--&gt;
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  I shall begin with &lt;a href=&quot;https://www.ebayopensource.org/index.php/Turmeric/HomePage&quot;&gt;Turmeric SOA&lt;/a&gt;. Turmeric SOA, despite the strange choice of name, is actually an industry grade platform for web services. Why is it industry grade, you ask? Is it because the developers so claim? Not really. The industry grade designation is actually made by me &amp;#8211; the project (and its developers) do not claim anything about it being industry ready or anything of that kind. I should mention, however, that Turmeric SOA is the &lt;strong&gt;open-source&lt;/strong&gt; version of the platform that powers eBay. Yes, you read that right, THE eBay. In my book, if a platform handles the millions of customers all over the world that eBay does, that platform is pretty much as industry-grade as it gets these days.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Why am I talking about Turmeric SOA? Why am I even involved in Turmeric SOA?
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  It&amp;#8217;s very simple really and it all points back to my work as a Ph.D. student at the &lt;a href=&quot;http://www.st.ewi.tudelft.nl/~tiago/&quot;&gt;Delft University of Technology&lt;/a&gt;. My research, in broad terms consists of analyzing and coming up with new ways of helping the maintenance, reengineering and testing of Service Oriented Architectures. In this description, I&amp;#8217;ve cleverly omitted the keyword that defines my research, mostly because it&amp;#8217;s a vague buzzword that means different things to different people (in case you&amp;#8217;re wondering, the word is &lt;em&gt;multi-tenancy&lt;/em&gt;). In any case, my research involving SOA only makes sense if I have a software system on which I can investigate and demonstrate my claims and this is where it all gets hairy.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  The fact is that for most companies, SOA simply means exposing some of their data through an API built on top of SOAP or REST, et voilà. All of a sudden they can claim that they are a company of the future because they have a SOA system. This, however, couldn&amp;#8217;t be farther from what an actual SOA system should be. We can even take the etymological angle and look at what SOA means: Service Oriented &lt;strong&gt;Architecture&lt;/strong&gt;. I&amp;#8217;ve emphasized the word &amp;#8220;architecture&amp;#8221; as I believe that is the keyword in the SOA acronym. Your SOA system should be built using an architectural style consistent with that of services that communicate with each other. It should be oriented towards/based on services, and not a monolithic blob with one tiny service gateway that allows me to query some data, even if that data is provided in a platform-agnostic manner. To people who have such monolithic SOA-wannabe systems, I ask: can I slice part of your software and place it elsewhere in the world with an Internet connection on both ends? If I can&amp;#8217;t, what if your user-base or your business grow to a point where one server no longer cuts it? What do you do then? Keep buying bigger motherboards with more CPU and RAM sockets?
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Let&amp;#8217;s get real here. Your software system is service-oriented if I can grab all the pieces that compose it and spread it all over the world. The only thing I should have to tell the software system is: &amp;#8220;you have service A deployed at this endpoint, service B at this other endpoint, etc etc&amp;#8221; and then it would automagically just work, regardless of whether the services are running in the same application server or in each other&amp;#8217;s antipodes in completely opposite timezones.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  So why am I bringing this up? Well, as it stands it&amp;#8217;s difficult enough to find open-source systems that are truly built around a service-oriented architecture. For most of these services, SOA is an afterthought. It&amp;#8217;s something those open-source ERP developers woke up one day and thought &amp;#8220;hey, wouldn&amp;#8217;t it be cool if our ERP had some SOA features?&amp;#8221; &amp;#8211; and alas, the result is invariably slamming some poorly engineered JAXWS or Axis2 solution on top of already existing business logic and inevitably making a mess of a perfectly fine (albeit, poorly scaling) software system.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  From my own experience, this is the summary of most open-source ERP systems out there that claim to have some kind of SOA functionality.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  This doesn&amp;#8217;t cut it for us. This is not what the SOA paradigm truly stands for and these systems are ultimately useless for my research. There&amp;#8217;s only one web service! How the hell is it supposed to communicate with anything? Its business logic is ultimately still relying on local method calls.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Then out of this hell comes another frightening fact. Even the web service platforms out there are useless on their own. I was chatting with a friend of mine &amp;#8211; who&amp;#8217;s not a computer scientist &amp;#8211; the other day, and I was struggling to explain to her what exactly my problem was without using terms such as JAXWS, Turmeric, web services or SOA. I think I came up with a clear laymen explanation involving the process of building a car. So, my problem right now is that I need a very specific type of car, say, one that is rocket propelled. There are, of course, brands out there that have rocket propelled cars but there&amp;#8217;s no way on Earth that these guys are gonna let me even LOOK at their car, set aside open the hood and disassemble its engine. Yet, my research consists of analyzing the problems and challenges of maintaining a rocket propelled car. But I have no car, and no means to get one. This is a pretty big inconvenience. Not even me promising this car brand that I won&amp;#8217;t build a competitor car, or destroy their car will convince them to let me pop the hood &amp;#8211; and so, Houston, we have a problem.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  The solution to this problem is seemingly simple. I can just build my own rocket propelled car and hope for the best. But then we run into a more essential problem: I&amp;#8217;m not a car maker, nor does my department pay me to make cars. Also, if by the end of my Ph.D. I&amp;#8217;ve only built a rocket propelled car, they&amp;#8217;re not gonna be happy.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  I could also cut some corners and build a mockup of a rocket propelled car. Sure, maybe it doesn&amp;#8217;t have a gearbox and the steering wheel is made of cardboard, but hey! It&amp;#8217;s a rocket propelled car! This would be swell, if it wasn&amp;#8217;t for the fact that even the free tools I can get out there to make cars are pretty&amp;#8230; well&amp;#8230; horrible. Stepping back out of the metaphor world, the problem is that the technologies available allow me to build simple web services. I can just grab Java&amp;#8217;s Metro project (aka JAXWS) and very easily deploy a web service, but that&amp;#8217;s just what it is. A web service, accessible via SOAP, amidst nothingness. There&amp;#8217;s nothing I can query to know that this service is there, there&amp;#8217;s no platform managing this service and telling me that it has &lt;em&gt;this many&lt;/em&gt; services and that &lt;em&gt;this particular one&lt;/em&gt; is one of them, there&amp;#8217;s no statistics or runtime information being kept on this service, there&amp;#8217;s basically&amp;#8230; nothing. Just a Java class with a &amp;#8220;WebService&amp;#8221; sticker on it.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  These tools make it difficult to build something that even resembles a real world SOA system (i.e. a rocket propelled car). They&amp;#8217;re the tiniest building blocks that you can think of. The sand in the car&amp;#8217;s windshield or the iron ore in the chassis&amp;#8217; stainless steel. Sure, I can melt the sand, add some caustic soda and fashion my own windshield out of it. I can melt the iron ore and through some process I don&amp;#8217;t even know, make steel. But how long is this going to take me? And will the final result be a faithful representation of what actual companies in this line of work have made? Or just a silly toy example that doesn&amp;#8217;t fully represent the pains and benefits of such a system?
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;a href=&quot;https://www.tiagoespinha.net/wp-content/uploads/2011/08/TurmericLogo.jpg&quot; rel=&quot;lightbox[490]&quot; title=&quot;TurmericLogo&quot;&gt;&lt;img class=&quot;alignright size-full wp-image-498&quot; title=&quot;TurmericLogo&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2011/08/TurmericLogo.jpg&quot; alt=&quot;&quot; width=&quot;214&quot; height=&quot;117&quot; /&gt;&lt;/a&gt;That&amp;#8217;s where Turmeric comes in. My first impression when I started using Turmeric was that of confusion. I thought to myself &amp;#8220;well, that&amp;#8217;s another platform with an awful lot of features that no one&amp;#8217;s ever going to use&amp;#8221;, but I was wrong. Over time, with more thoroughly exploring this platform, it became clear that perhaps every single feature in Turmeric really stemmed from a real world use case, most likely from eBay. All those features, if you really think about it, you&amp;#8217;ll end up realizing &amp;#8220;oh yeah, they probably use this to achieve X and Y&amp;#8221;. In other words, even if we don&amp;#8217;t have the rocket propelled car, we have the exact tools that we need to build one. Knowing that if the toolset includes a door-shaped mould, it probably means that our car should have at least one door &amp;#8211; for which other reason would those guys have built such a tool if they hadn&amp;#8217;t built a door for their car before?
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  This makes Turmeric a very good candidate to be used as the tooling for my research. But Turmeric isn&amp;#8217;t, in my point of view, a very good candidate anymore. It&amp;#8217;s evolved from that into an &lt;strong&gt;excellent&lt;/strong&gt; candidate at that! Now it&amp;#8217;s the time when I really have to shine a light on &lt;strong&gt;all&lt;/strong&gt; the guys behind the task of open-sourcing eBay&amp;#8217;s platform. Those guys form a small community of people who usually hang around #turmeric-dev at irc.freenode.net and who just happen to be extremely friendly and helpful. Every time I hit a road bump with Turmeric, these guys go out of their ways to help me achieve the things I&amp;#8217;m trying to achieve and I think that&amp;#8217;s a lot more than I could have ever asked for.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Quickly moving to the topic of open-source, since Turmeric SOA is actually an open-source project, this made me ever so fond of open-source stuff. It&amp;#8217;s really nice to see all these people dedicated in making such a tremendous contribution that is open-sourcing a platform from eBay to the good of the community. I love that. I love being able to &amp;#8211; should I need &amp;#8211; download a relational database management system from Apache without having to pay for it. I love seeing projects like Ubuntu flourish, showing companies that even software is all about the people it&amp;#8217;s built to and with a little help, even an open-source can kick big corporations in their royal butts.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  All this to say that I&amp;#8217;ve learned a whole lot over the last few days. Amongst the things I&amp;#8217;ve learned is for example, git. The cool kids&amp;#8217; versioning system. As Turmeric nowadays relies on Git for its version management, I thought now would be a good time to learn it and see what advantages it brings over SVN &amp;#8211; and boy, does it leave SVN in its rear view mirror! I&amp;#8217;ve grown so much accustomed to it that I&amp;#8217;ve started moving my projects to Git as well and I&amp;#8217;ve been trying to influence other people around me to use it (Andy, if you&amp;#8217;re reading this, wink wink, nudge nudge ;)). The saddest part of it all is that, in my opinion, you don&amp;#8217;t really fully understand the advantages it brings until you really give it a try with real source code that you must maintain in collaboration with other people.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Going on a bit of a tangent, Git (and open-source) has also enabled me to propose some enhancements to David Carver&amp;#8217;s (Turmeric SOA&amp;#8217;s top man) IRC bot that idles around #turmeric-dev &amp;#8211; all via the clever features of Github, forking and pull requesting.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;a href=&quot;https://www.tiagoespinha.net/wp-content/uploads/2011/08/46833_425136126860_586946860_5624931_1569623_n.jpg&quot; rel=&quot;lightbox[490]&quot; title=&quot;46833_425136126860_586946860_5624931_1569623_n&quot;&gt;&lt;img class=&quot;alignleft size-full wp-image-499&quot; title=&quot;46833_425136126860_586946860_5624931_1569623_n&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2011/08/46833_425136126860_586946860_5624931_1569623_n.jpg&quot; alt=&quot;&quot; width=&quot;254&quot; height=&quot;259&quot; /&gt;&lt;/a&gt;To finalize, the Apache Software Foundation. I&amp;#8217;m gonna make it short and sweet. As of a couple of days ago, my fellow open-sourcers at Apache Derby decided to vote me to become a PMC (Program Management Committee) member for the Apache DB project. I have, of course, accepted and it is a post I will do my best to honor and live up to. I started off as a Google Summer of Code student at Apache Derby, then got promoted to committership, this year I had the privilege to mentor Siddharth Srivastava and now I&amp;#8217;m becoming a PMC member. Life&amp;#8217;s good.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  It&amp;#8217;s late now, time for sleep. If you&amp;#8217;ve read it all the way down here, thank you! You&amp;#8217;re brave!
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Good night!
&lt;/p&gt;
</description>
        <pubDate>Wed, 31 Aug 2011 23:32:37 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2011/08/on-turmeric-soa-open-source-and-the-apache-software-foundation/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2011/08/on-turmeric-soa-open-source-and-the-apache-software-foundation/</guid>
        
        <category>Apache</category>
        
        <category>Apache DB</category>
        
        <category>Apache Derby</category>
        
        <category>Apache PMC</category>
        
        <category>Apache Software Foundation</category>
        
        <category>ASF</category>
        
        <category>PMC</category>
        
        <category>Program Management Committee</category>
        
        <category>Service Oriented Architectures</category>
        
        <category>SOA</category>
        
        <category>Turmeric</category>
        
        <category>Turmeric SOA</category>
        
        
        <category>SOA</category>
        
      </item>
    
      <item>
        <title>Adobe Starts Including Spyware With Acrobat Reader</title>
        <description>&lt;p style=&quot;text-align: justify;&quot;&gt;
  We all know the folks at Adobe are some really nice people and that Steve Jobs was just being a bastard by not allowing Flash on the iPhone. But as it turns out, whilst Apple is too restrictive as to what it allows on their AppStore and their iDevices, Adobe on the other hand is too permissive and they might have just crossed a line.&lt;!--more--&gt;
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Now, I understand that companies are all just trying to make money but if you attempt to install the latest Adobe Acrobat Reader and you&amp;#8217;re using Firefox, you&amp;#8217;ll be asked to install a Firefox extension to manage the download. While I typically try to avoid these downloaders (mostly because they&amp;#8217;re unnecessary and due to the fact that I don&amp;#8217;t feel comfortable with a company that thinks they&amp;#8217;re too important to give me a direct HTTP link), I was in a rush and I couldn&amp;#8217;t find a direct link on the page I was taken to. Considering this, I just thought &amp;#8220;how bad can it be?&amp;#8221; and went ahead.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  What was not my surprise when I saw the following, without ANY user input at all:&lt;br /&gt; &lt;a href=&quot;https://www.tiagoespinha.net/wp-content/uploads/2010/10/adobespyware.jpg&quot; rel=&quot;lightbox[434]&quot; title=&quot;adobespyware&quot;&gt;&lt;img class=&quot;size-full wp-image-435 alignnone&quot; title=&quot;adobespyware&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2010/10/adobespyware.jpg&quot; alt=&quot;&quot; width=&quot;454&quot; height=&quot;295&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;a href=&quot;https://www.tiagoespinha.net/wp-content/uploads/2010/10/adobespyware.jpg&quot;&gt;&lt;/a&gt;Yep, what you see there is Adobe&amp;#8217;s downloader which has just installed McAfee Security Scan Plus. Without prompting me about it AT ALL. I was pretty annoyed with this situation because if this isn&amp;#8217;t the definition of &lt;a href=&quot;http://en.wikipedia.org/wiki/Privacy-invasive_software&quot; target=&quot;_blank&quot;&gt;ad/spyware&lt;/a&gt;, then I don&amp;#8217;t know what is. I just thought I&amp;#8217;d write this as I&amp;#8217;m not usually very happy with companies who think it&amp;#8217;s OK to install software on my computer without my consent. It&amp;#8217;s not OK. Adobe, you&amp;#8217;re the one McAfee should be protecting me from.
&lt;/p&gt;
</description>
        <pubDate>Sat, 23 Oct 2010 19:57:52 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2010/10/adobe-starts-including-spyware-with-acrobat-reader/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2010/10/adobe-starts-including-spyware-with-acrobat-reader/</guid>
        
        <category>Adobe</category>
        
        <category>Adobe McAfee Security Scan Plus</category>
        
        <category>Adobe Spyware</category>
        
        <category>Adware</category>
        
        <category>McAfee</category>
        
        <category>Software</category>
        
        <category>Spyware</category>
        
        
        <category>Software</category>
        
      </item>
    
      <item>
        <title>How To Seal a Bag Airtight With a Plastic Bottle</title>
        <description>&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;a href=&quot;https://www.tiagoespinha.net/wp-content/uploads/2010/09/recycle_logo_13.jpg&quot; rel=&quot;lightbox[417]&quot; title=&quot;recycle_logo_1&quot;&gt;&lt;img class=&quot;alignleft size-full wp-image-427&quot; title=&quot;recycle_logo_1&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2010/09/recycle_logo_13.jpg&quot; alt=&quot;&quot; width=&quot;180&quot; height=&quot;180&quot; /&gt;&lt;/a&gt;You&amp;#8217;re just about to learn a technique known for many centuries by Buddhist priests, passed on from generation to generation, but always kept in secret within their ranks. This technique teaches you how to seal a bag, in a airtight manner, with nothing but a&amp;#8230;. plastic bottle!
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Yes, my description was dramatically exaggerated. This is just one of those cool DIY things that most people don&amp;#8217;t think about, but hopefully, after reading this article, you&amp;#8217;ll remember it next time you need to seal a bag.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Read on if I got your attention.&lt;!--more--&gt;
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  So here&amp;#8217;s what you&amp;#8217;re going to need:
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  1. Plastic bottle, any size will do.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  2. Plastic bag &amp;#8211; obviously it cannot have any holes on it or this trick won&amp;#8217;t work.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  3. Pair of scissors &amp;#8211; preferably ones with sharp, pointy tips. This will make it easier for you.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  After you have obtained these tools, you start by cutting the &amp;#8220;mouth&amp;#8221; of the bottle off. You have to cut a little bit under where you screw the cap, so that on one end you have the mouth-less bottle and on the other, you have just the mouth with a little bit of plastic attached to it &amp;#8211; just like on the image:
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;a href=&quot;https://www.tiagoespinha.net/wp-content/uploads/2010/09/image001.jpeg&quot; rel=&quot;lightbox[417]&quot; title=&quot;image001&quot;&gt;&lt;img class=&quot;size-full wp-image-420 alignnone&quot; title=&quot;image001&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2010/09/image001.jpeg&quot; alt=&quot;&quot; width=&quot;320&quot; height=&quot;214&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;a href=&quot;https://www.tiagoespinha.net/wp-content/uploads/2010/09/image001.jpeg&quot;&gt;&lt;/a&gt;At this point you should have separated these two parts of the bottle and now is when the &amp;#8220;magic&amp;#8221; begins. In actual fact, you just need the mouthpiece, you can throw away the rest or fancy a vase out of it. With the mouthpiece, you unscrew the cap, pass the open part of the bag through the mouth of the bottle and apply the cap over the plastic bag, thus sealing it shut. Here&amp;#8217;s an image explaining showing the end result:
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;a href=&quot;https://www.tiagoespinha.net/wp-content/uploads/2010/09/image002.jpeg&quot; rel=&quot;lightbox[417]&quot; title=&quot;image002&quot;&gt;&lt;img class=&quot;size-full wp-image-421 alignnone&quot; title=&quot;image002&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2010/09/image002.jpeg&quot; alt=&quot;&quot; width=&quot;320&quot; height=&quot;213&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;p style=&quot;text-align: justify;&quot;&gt;
    Now you can store away your peanuts and they&amp;#8217;ll never go soggy again!
  &lt;/p&gt;
&lt;/p&gt;
</description>
        <pubDate>Wed, 15 Sep 2010 11:14:12 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2010/09/how-to-seal-a-bag-airtight-with-a-plastic-bottle/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2010/09/how-to-seal-a-bag-airtight-with-a-plastic-bottle/</guid>
        
        <category>Airtight</category>
        
        <category>DIY</category>
        
        <category>How To</category>
        
        <category>Plastic Bottle</category>
        
        <category>Seal Bag</category>
        
        <category>Seal Bag Airtight</category>
        
        
        <category>DIY</category>
        
      </item>
    
      <item>
        <title>Free Storage With Dropbox (Free Online Backups)</title>
        <description>&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;a href=&quot;https://www.tiagoespinha.net/wp-content/uploads/2010/09/dropbox.png&quot; rel=&quot;lightbox[412]&quot; title=&quot;dropbox&quot;&gt;&lt;img class=&quot;alignleft size-full wp-image-413&quot; title=&quot;dropbox&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2010/09/dropbox.png&quot; alt=&quot;&quot; width=&quot;127&quot; height=&quot;127&quot; /&gt;&lt;/a&gt;If you need a way to store your files in a manner that they are always accessible everywhere, then Dropbox is for you. In case you haven&amp;#8217;t yet heard about this service, then know that Dropbox offers you 2Gb for free to store whichever files you like. The guys at Dropbox also have a software that integrates nicely with Windows and Mac OS and you can even access the files from your iPhone or Android powered phone.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  You might think that 2Gb are rather meager and you are right, that&amp;#8217;s nothing these days. This is why Dropbox has an awesome &lt;a href=&quot;http://www.dropbox.com/referrals/NTU5NzI4OQ&quot; target=&quot;_blank&quot;&gt;referral program&lt;/a&gt; that will allow you to go up to 10Gb just by referring friends! That&amp;#8217;s right, 10Gb for free just by referring Dropbox to a few friends.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Read on to find out more!
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;!--more--&gt;
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  If you are up for it, Dropbox also offers paid plans where you can pay $9.99 a month for 50Gb of storage or you can go the extra mile and pay $19.99 for the 100Gb service. Still, if this is a little too extreme for you, register an account (with &lt;a href=&quot;http://www.dropbox.com/referrals/NTU5NzI4OQ&quot; target=&quot;_blank&quot;&gt;my referral&lt;/a&gt;, obviously :)) and start spamming referring friends with your link!
&lt;/p&gt;
</description>
        <pubDate>Wed, 15 Sep 2010 01:40:21 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2010/09/free-storage-with-dropbox-free-online-backups/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2010/09/free-storage-with-dropbox-free-online-backups/</guid>
        
        <category>Backups</category>
        
        <category>Dropbox</category>
        
        <category>Free Online Storage</category>
        
        <category>Free Storage</category>
        
        <category>Software</category>
        
        <category>Storage</category>
        
        
        <category>Software</category>
        
      </item>
    
      <item>
        <title>Android Rooting For Dummies (What is Rooting?)</title>
        <description>&lt;p&gt;&lt;img class=&quot;alignright size-full wp-image-410&quot; title=&quot;root Android&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2010/09/root-Android.gif&quot; alt=&quot;&quot; width=&quot;150&quot; height=&quot;150&quot; /&gt;&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  One of the things I had a hard trouble finding an answer for after I got my first Android phone was: what is all this deal with rooting? I read a lot of articles on how to root my phone but I just couldn&amp;#8217;t see what benefits I would get from it. I had had an iPhone and I knew the benefits I could get from jailbreaking, but I just didn&amp;#8217;t know what I could get from rooting.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Well, rooting is in its definition a way to obtain root access to your phone. Does this still not tell you much? Good, then read on.&lt;!--more--&gt;
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  This was the geek definition. Now, translating this into English, it means that some applications (some of them widely available in the Android Market), require some deeper privileges to work. Applications like Wireless Tether or Quick Boot are just a few examples of these apps.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  By rooting your phone, it won&amp;#8217;t become faster but it won&amp;#8217;t become slower either. What rooting means is that you&amp;#8217;ll have the &lt;strong&gt;option&lt;/strong&gt; to grant some applications more access than they would normally have.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Now, as to knowing whether your phone is rooted or not, that&amp;#8217;s a quite simple task. A rooted Android phone will have an additional application (installed automatically upon the rooting process), that is called &amp;#8220;Superuser Permissions&amp;#8221;. You don&amp;#8217;t need to use this app but just the fact alone that it sits there, gives you this possibility. If an application ever requires root permissions, you will get a notice saying that the app is requesting super user permissions. Obviously, if you trust the app you will grant these permissions &amp;#8211; if you don&amp;#8217;t trust it, you&amp;#8217;ll deny them.
&lt;/p&gt;
</description>
        <pubDate>Wed, 15 Sep 2010 01:24:33 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2010/09/android-rooting-for-dummies-what-is-rooting/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2010/09/android-rooting-for-dummies-what-is-rooting/</guid>
        
        <category>Android</category>
        
        <category>Android rooting</category>
        
        <category>Android Rooting for Dummies</category>
        
        <category>Dummies</category>
        
        <category>For Dummies</category>
        
        <category>Mobiles</category>
        
        <category>Rooting</category>
        
        <category>Technology</category>
        
        
        <category>Android</category>
        
      </item>
    
      <item>
        <title>Angry Birds for Android (Now in the Android Market!)</title>
        <description>&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;a href=&quot;https://www.tiagoespinha.net/wp-content/uploads/2010/09/android_bird.jpg&quot; rel=&quot;lightbox[391]&quot; title=&quot;android_bird&quot;&gt;&lt;img class=&quot;size-full wp-image-393 alignleft&quot; title=&quot;android_bird&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2010/09/android_bird.jpg&quot; alt=&quot;&quot; width=&quot;163&quot; height=&quot;143&quot; /&gt;&lt;/a&gt;Anyone who owns an iPhone or who has a friend who owns an iPhone will probably know about Angry Birds. Angry Birds is this awesome game where you hurl all kinds of different birds with different abilities at some nasty pigs. The goal of each level is kill all of the pigs and keep progressing through the different levels, with different obstacles and new birds.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Sounds like a game you&amp;#8217;d like to play on your Android phone? Well read on then!
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;!--more--&gt;The good people at Roxio finally had mercy on us, Android users, and decided to release a version of this game on the Android platform. You can find it in the Android Market as a Lite Beta version. I&amp;#8217;ve had the chance to try it on my Samsung Galaxy S and let me tell you: it&amp;#8217;s 
  
  &lt;strong&gt;orders of magnitude&lt;/strong&gt; faster than the same game on my iPad. Absolutely stunning and fluid. Give it a go!
&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.tiagoespinha.net/wp-content/uploads/2010/09/angrybirds.png&quot; rel=&quot;lightbox[391]&quot; title=&quot;angrybirds&quot;&gt;&lt;img class=&quot;aligncenter size-full wp-image-392&quot; title=&quot;angrybirds&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2010/09/angrybirds.png&quot; alt=&quot;&quot; width=&quot;175&quot; height=&quot;175&quot; /&gt;&lt;/a&gt;(Don’t know what this is? Download an app called “Barcode Scanner” and scan this code to download “Angry Birds” right away!)&lt;/p&gt;
</description>
        <pubDate>Fri, 03 Sep 2010 18:51:16 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2010/09/angry-birds-for-android-now-in-the-android-market/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2010/09/angry-birds-for-android-now-in-the-android-market/</guid>
        
        <category>Android</category>
        
        <category>Angry Birds</category>
        
        <category>Angry Birds Android Market</category>
        
        <category>Angry Birds for Android</category>
        
        <category>iPhone</category>
        
        <category>Mobiles</category>
        
        <category>Roxio</category>
        
        <category>Software</category>
        
        
        <category>Android</category>
        
      </item>
    
      <item>
        <title>iPad gets the iOS 4.2 in November (iPhones get iOS 4.1 now)</title>
        <description>&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;a href=&quot;https://www.tiagoespinha.net/wp-content/uploads/2010/09/IOS_4.0.2_on_the_iPhone_4.png&quot; rel=&quot;lightbox[387]&quot; title=&quot;IOS_4.0.2_on_the_iPhone_4&quot;&gt;&lt;img class=&quot;alignright size-full wp-image-388&quot; title=&quot;IOS_4.0.2_on_the_iPhone_4&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2010/09/IOS_4.0.2_on_the_iPhone_4.png&quot; alt=&quot;&quot; width=&quot;136&quot; height=&quot;204&quot; /&gt;&lt;/a&gt;As per my previous coverage of the Apple event where several new iPods and a new iTunes was announced, I&amp;#8217;m making this post so that iPad owners can sigh with relief regarding the iOS. Yes, we will get an update, yes it will have multi-tasking and make the iPad (even more) awesome.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Read on to get all the juicy details&amp;#8230;&lt;!--more--&gt;We will have to wait until November 2010 unfortunately but I&amp;#8217;d say it&amp;#8217;s a wait well worth. In the meanwhile, the current iPhones (except those for which support has been discontinued) will get the 4.1 update immediately which will, amongst other things, fix the proximity sensor issue in the iPhone 4, introduce a new revision of Safari and finally, users will be able to disable the spell checker. As a Portuguese who owns an iPad without a Portuguese spell checker, this comes as a blessing. No, Apple, I don&amp;#8217;t want you to spell check my Portuguese text with an English spell checker.
&lt;/p&gt;
</description>
        <pubDate>Fri, 03 Sep 2010 14:22:30 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2010/09/ipad-gets-the-ios-4-2-in-november-iphones-get-ios-4-1-now/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2010/09/ipad-gets-the-ios-4-2-in-november-iphones-get-ios-4-1-now/</guid>
        
        <category>Apple iPad</category>
        
        <category>iOS 4.1</category>
        
        <category>iOS 4.2</category>
        
        <category>iOS4</category>
        
        <category>iPad</category>
        
        <category>iPad iOS 4</category>
        
        <category>iPhone 4</category>
        
        <category>iPhone 4 Proximity Sensor</category>
        
        <category>Mobiles</category>
        
        <category>Technology</category>
        
        
        <category>Apple</category>
        
      </item>
    
      <item>
        <title>Apple&amp;#8217;s new iPod line-up, iOS 4.2 and iTunes 10</title>
        <description>&lt;p style=&quot;text-align: justify;&quot;&gt;
  Just a few minutes ago Steve Jobs has finished his keynote speech where he presented us with a few new things. First and foremost we heard about the new version of the iOS! That&amp;#8217;s right, iOS 4.2 is coming out November 2010 and it will come out not only for the iPhone 4 but also for the&amp;#8230;. YES, you guessed right! FOR THE iPAD!
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Did I get you curious with the new things announced at this Apple event? Well then, keep on reading to get the rest of the story!&lt;!--more--&gt;The iOS 4.2 will bring your normal improvements that come with every release and it will also include this new feature Apple dubbed as &amp;#8220;AirPlay&amp;#8221;. AirPlay is essentially a way for you to stream any kind of content from your iPhone/iPad into the new Apple TV. So that&amp;#8217;s all for the iOS 4.2 &amp;#8211; AirPlay and finally an iPad version. This means we&amp;#8217;ll finally get multitasking on our iPads. Ace!
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Next up were the iPods. Steve claimed Apple had redesigned their whole iPod line-up and so they did! There&amp;#8217;s this new iPod shuffle that is smaller and comes in all these neat colours. This is basically just a reiteration of the shuffle design with no screen and a wheel with a few buttons to play, pause and skip tracks. The cheapest version will sport 2Gb of internal memory and &lt;a href=&quot;http://store.apple.com/us/browse/home/shop_ipod/family/ipod_shuffle?mco=MTM3NDkzMDI&quot; target=&quot;_blank&quot;&gt;it will go for $49&lt;/a&gt;. No word if there will be versions with larger memory.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;a href=&quot;https://www.tiagoespinha.net/wp-content/uploads/2010/09/design_finger20100901.jpg&quot; rel=&quot;lightbox[379]&quot; title=&quot;design_finger20100901&quot;&gt;&lt;img class=&quot;alignright size-full wp-image-380&quot; title=&quot;design_finger20100901&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2010/09/design_finger20100901.jpg&quot; alt=&quot;&quot; width=&quot;148&quot; height=&quot;162&quot; /&gt;&lt;/a&gt;The most amazing revamp they did, however, was with the iPod Nano. They got rid of the wheel below the screen and they&amp;#8217;ve made the screen smaller&amp;#8230;. and touch capable! The new iPod Nano is now a cute little square with a touch screen. Quite cool! There are two versions of this, one at 8Gb and the other at 16Gb, &lt;a href=&quot;http://store.apple.com/us/browse/home/shop_ipod/family/ipod_nano?mco=MTM3NDcwMTA&quot; target=&quot;_blank&quot;&gt;which cost $149 and $179&lt;/a&gt; respectively.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Finally on the iPod market, Apple has also made the predicted move. They&amp;#8217;ve released an iPhone-4-esque version of the &lt;a href=&quot;http://store.apple.com/us/browse/home/shop_ipod/family/ipod_touch?mco=MTM3NDY2Mzg&quot; target=&quot;_blank&quot;&gt;iPod Touch&lt;/a&gt;. It now comes with a 5 megapixel camera on the back, a front-facing camera and you guessed it right: Facetime capabilities. The new iPod Touch will also support the AirPlay, as will all devices with the new iOS4.2.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;a href=&quot;https://www.tiagoespinha.net/wp-content/uploads/2010/09/itunes-10-and-ping-take-on-facebook.jpg&quot; rel=&quot;lightbox[379]&quot; title=&quot;itunes-10-and-ping-take-on-facebook&quot;&gt;&lt;img class=&quot;alignleft size-full wp-image-382&quot; title=&quot;itunes-10-and-ping-take-on-facebook&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2010/09/itunes-10-and-ping-take-on-facebook.jpg&quot; alt=&quot;&quot; width=&quot;78&quot; height=&quot;78&quot; /&gt;&lt;/a&gt;Along with the news for today also came the new version of iTunes. The new iTunes 10 will come with a new logo, as according to Steve it wouldn&amp;#8217;t make sense to have the CD on it anymore. Considering that the logo had been designed 10 years ago (according to Mr. Jobs) then I&amp;#8217;m compelled to agree with him; not that I find the new logo much more attractive, but hey, it&amp;#8217;s a matter of taste. The new iTunes also brings a social networking service for music called Ping. Apparently, Ping &amp;#8220;is not Facebook, it is not Twitter, it&amp;#8217;s a social networking service for music&amp;#8221;. I&amp;#8217;m still not entirely sold on the idea but the notion seems to be sharing what you&amp;#8217;re listening to and what you&amp;#8217;ve downloaded. It seems to me this will be Apple&amp;#8217;s own last.fm, with direct integration with iOS.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Finally, Uncle Steve introduced the new Apple TV. Their new TV box is much smaller than their previous iteration and it will integrate with the AirPlay present on the iOS. Apparently they got some feedback from their customers and the new service will be more rental-oriented and the prices will go significantly down to compensate for this. With the new service you&amp;#8217;ll get newly released films for just $4.99 and TV show episodes for $0.99 &amp;#8211; a bargain, I say. Makes me wish I was living in the US&amp;#8230;
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  The new Apple TV service will also support Netflix streaming which means that if you&amp;#8217;re a subscriber, you&amp;#8217;ll be able to stream contents directly into your television. Still on the streaming front, the new iTunes will also allow people to stream stuff directly into the Apple TV, without much fuss. That&amp;#8217;s a neat little feature that&amp;#8217;s been around with the XBOX 360 for a while now and Apple has their own version built right into the Apple TV.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  The Apple event had to finish on a high note and as such they invited Chris Martin to put on a small show for the audience. Neat!
&lt;/p&gt;
</description>
        <pubDate>Wed, 01 Sep 2010 21:05:02 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2010/09/apples-new-ipod-line-up-ios-4-2-and-itunes-10/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2010/09/apples-new-ipod-line-up-ios-4-2-and-itunes-10/</guid>
        
        <category>Apple</category>
        
        <category>Apple event September</category>
        
        <category>Apple Ping</category>
        
        <category>Apple TV</category>
        
        <category>iOS 4 iPad</category>
        
        <category>iOS 4.2</category>
        
        <category>iPad</category>
        
        <category>iPod Nano</category>
        
        <category>iPod Shuffle</category>
        
        <category>iPod Touch</category>
        
        <category>iPod touch screen</category>
        
        <category>iTunes 10</category>
        
        <category>Music</category>
        
        
        <category>Apple</category>
        
      </item>
    
      <item>
        <title>CyanogenMod 6.0 Released (Still No Galaxy S Support)</title>
        <description>&lt;p style=&quot;text-align: justify;&quot;&gt;
  Just a couple of days ago, the good folk &amp;#8216;Cyanogen&amp;#8217; &lt;a href=&quot;http://www.cyanogenmod.com/home/cyanogenmod-6-0&quot; target=&quot;_blank&quot;&gt;released version 6.0&lt;/a&gt; of their much acclaimed CyanogenMod. To my (and &lt;a href=&quot;http://www.cyanogenmod.com/home/cyanogenmod-6-0/comment-page-3#comment-17605&quot; target=&quot;_blank&quot;&gt;many&lt;/a&gt; &lt;a href=&quot;http://www.cyanogenmod.com/home/cyanogenmod-6-0/comment-page-2#comment-17465&quot; target=&quot;_blank&quot;&gt;other&lt;/a&gt; &lt;a href=&quot;http://www.cyanogenmod.com/home/cyanogenmod-6-0/comment-page-2#comment-17474&quot; target=&quot;_blank&quot;&gt;people&amp;#8217;s&lt;/a&gt;) sadness though, it still does not support the Samsung Galaxy S nor any of its other flavours (Vibrant, Captivate, etc).
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  According to a &lt;a href=&quot;http://www.cyanogenmod.com/home/cyanogenmod-6-0-status-update&quot; target=&quot;_blank&quot;&gt;previous post&lt;/a&gt; by the same gentleman, Vibrant support (and hopefully all the rest, by affinity) might be coming to version 6.1. Until this version is released let&amp;#8217;s just hold onto that thought and pray they are serious about it!
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  In the meanwhile, maybe you&amp;#8217;d like to give one of the &lt;a href=&quot;http://www.tiagoespinha.net/2010/08/samsung-galaxy-s-gets-android-2-2-froyo-beta/&quot; target=&quot;_blank&quot;&gt;Froyo builds a spin&lt;/a&gt;?
&lt;/p&gt;
</description>
        <pubDate>Mon, 30 Aug 2010 12:44:29 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2010/08/cyanogenmod-6-0-released-still-no-galaxy-s-support/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2010/08/cyanogenmod-6-0-released-still-no-galaxy-s-support/</guid>
        
        <category>Android</category>
        
        <category>Android 2.2</category>
        
        <category>Android Froyo</category>
        
        <category>Android OS</category>
        
        <category>Android rooting</category>
        
        <category>Cellphones</category>
        
        <category>CyanogenMod</category>
        
        <category>Froyo</category>
        
        <category>Galaxy S</category>
        
        <category>Galaxy S Froyo</category>
        
        <category>Lag fix</category>
        
        <category>Lag issue</category>
        
        <category>Mobile</category>
        
        <category>Mobile phones</category>
        
        <category>Samsung</category>
        
        <category>Samsung Galaxy S</category>
        
        <category>Samsung Galaxy S Lag Issue</category>
        
        <category>Technology</category>
        
        
        <category>Mobiles</category>
        
      </item>
    
      <item>
        <title>Samsung Galaxy S Gets Android 2.2 (Froyo) [Beta]</title>
        <description>&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;a href=&quot;https://www.tiagoespinha.net/wp-content/uploads/2010/08/froyogalaxy.jpg&quot; rel=&quot;lightbox[367]&quot; title=&quot;froyogalaxy&quot;&gt;&lt;img class=&quot;alignright size-full wp-image-370&quot; title=&quot;froyogalaxy&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2010/08/froyogalaxy.jpg&quot; alt=&quot;&quot; width=&quot;216&quot; height=&quot;217&quot; /&gt;&lt;/a&gt;In case you were not aware yet, there are Froyo builds available out there &lt;strong&gt;RIGHT NOW&lt;/strong&gt; for the Samsung Galaxy S. You just have to be aware that these builds are in fact beta builds released by Samsung and thus might still be a bit buggy and crash-ey. Still, it shouldn&amp;#8217;t break your phone. If anything you&amp;#8217;ll just have to reflash it back with Éclair which is perfectly possible and very safe.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  So you want to give these Froyo builds a try? After all there are already &lt;strong&gt;three&lt;/strong&gt; betas out there so it can&amp;#8217;t be that bad, right? Well, just read on for a walk through on how to get these builds and how to get them on your phone!&lt;!--more--&gt;For this walk through I&amp;#8217;m going to assume you&amp;#8217;ve never flashed a firmware &amp;#8220;through the back door&amp;#8221; before. Essentially there are two ways of flashing a firmware onto the Samsung Galaxy S. You can either use Samsung Kies which is an application very much like Nokia&amp;#8217;s PC Suite, or you can use Odin. Odin is a hacker&amp;#8217;s tool. It&amp;#8217;s not an official tool by Samsung but instead it&amp;#8217;s a tool that allows you to flash any firmware you want, as long as you have the files for it. To flash these Froyo betas we are, obviously, using Odin.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  First and foremost you should obtain all the files that you need, so here&amp;#8217;s a list of what you&amp;#8217;re going to need during the process:
&lt;/p&gt;

&lt;ol style=&quot;text-align: justify;&quot;&gt;
  &lt;li&gt;
    Odin &amp;#8211; the flasher tool
  &lt;/li&gt;
  &lt;li&gt;
    Either the 512 or the 513 PIT file (read after step 4 to know which one you need)
  &lt;/li&gt;
  &lt;li&gt;
    You get both the above tools by &lt;a href=&quot;https://www.wuala.com/Samsung%20Galaxy%20S/Firewares%20,%20Updates%20and%20Odin/Odin%20&amp;amp;%20Bootloader(.PIT)/?key=AfzUZSU4SpKU&quot; target=&quot;_blank&quot;&gt;clicking here&lt;/a&gt;.
  &lt;/li&gt;
  &lt;li&gt;
    The firmware that you want to flash.
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  You can get the latest Froyo build at the time of writing (i9000XXJP3) by going here: &lt;a href=&quot;http://rapidshare.com/files/415790394/I9000XXJP3.7z&quot; target=&quot;_blank&quot;&gt;Rapidshare&lt;/a&gt;. Now, as far as the PIT files go, normally you need the 512 file but some firmwares will require the 513. For this XXJP3, you will need the &lt;strong&gt;512 PIT file&lt;/strong&gt; which you can get from the link on step 3.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  After you have downloaded all the files, make sure you &lt;strong&gt;UNPLUG YOUR PHONE&lt;/strong&gt; from your computer.
&lt;/p&gt;

&lt;p&gt;Now, here’s all the steps you need to get to the actual flashing:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Turn off your phone and remove your SIM and SD cards.&lt;/li&gt;
  &lt;li&gt;Hold the following buttons at the same time: Volume Down, Home and Power button.&lt;/li&gt;
  &lt;li&gt;After doing the step above, your screen should say “Download mode”.&lt;/li&gt;
  &lt;li&gt;Fire up Odin &lt;strong&gt;BEFORE&lt;/strong&gt; you plug your phone to the USB port.&lt;/li&gt;
  &lt;li&gt;Plug the phone with the USB cord.&lt;/li&gt;
&lt;/ol&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  After step 5, Odin should detect your Galaxy S and it should acknowledge the connection where it says &amp;#8220;ID:COM&amp;#8221;.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  When Odin has recognized your phone, you need to load all the files you&amp;#8217;ve downloaded. Keep in mind that the firmware has to be extracted and in it you will find three files: the CSC, the [Modem/Phone] and the [PDA/Code]. Load all the files in their respective slots on Odin and load the 512 PIT file as well. After you&amp;#8217;ve done this, just press &amp;#8220;Start&amp;#8221; and let it rip 🙂 it will take a while and &lt;strong&gt;DO NOT&lt;/strong&gt; remove the cable before the process is completed. You will know once the process is completed as Odin will tell you it has finished and your phone will boot back up normally. Keep in mind that the phone will reboot at least once and you should still let it do its thing before it&amp;#8217;s come to a full stop.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  After this is done, just enjoy your new Froyo phone 😀
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;strong&gt;WORD OF ADVICE:&lt;/strong&gt; After you&amp;#8217;ve switched to Android 2.2 Froyo, the method I described in my other post on how to root and apply the lag fix on the phone &lt;strong&gt;no longer will work&lt;/strong&gt;. To root and apply the lag fix you will need to use a different method so please, don&amp;#8217;t try to use that on a Froyo Galaxy S.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;strong&gt;ALSO&amp;#8230;!:&lt;/strong&gt; I&amp;#8217;m not to be held responsible if you brick your phone in the process of flashing firmwares. I&amp;#8217;m just providing some guidance which if for some reason does not work for you, I am not to be held accountable.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Happy flashing!
&lt;/p&gt;
</description>
        <pubDate>Sun, 29 Aug 2010 12:42:15 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2010/08/samsung-galaxy-s-gets-android-2-2-froyo-beta/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2010/08/samsung-galaxy-s-gets-android-2-2-froyo-beta/</guid>
        
        <category>Android</category>
        
        <category>Android 2.2</category>
        
        <category>Android Froyo</category>
        
        <category>Android OS</category>
        
        <category>Android rooting</category>
        
        <category>Cellphones</category>
        
        <category>Froyo</category>
        
        <category>Galaxy S</category>
        
        <category>Galaxy S Froyo</category>
        
        <category>Lag fix</category>
        
        <category>Lag issue</category>
        
        <category>Mobile</category>
        
        <category>Mobile phones</category>
        
        <category>Samsung</category>
        
        <category>Samsung Galaxy S</category>
        
        <category>Samsung Galaxy S Lag Issue</category>
        
        <category>Technology</category>
        
        
        <category>Mobiles</category>
        
      </item>
    
      <item>
        <title>Tiago is now officially an ASF committer!</title>
        <description>&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;a href=&quot;https://www.tiagoespinha.net/wp-content/uploads/2010/08/derbylogo.jpg&quot; rel=&quot;lightbox[357]&quot; title=&quot;derbylogo&quot;&gt;&lt;img class=&quot;size-full wp-image-358 alignleft&quot; title=&quot;derbylogo&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2010/08/derbylogo.jpg&quot; alt=&quot;&quot; width=&quot;206&quot; height=&quot;143&quot; /&gt;&lt;/a&gt;True to the proverbial &amp;#8220;feather in the cap&amp;#8221;, I have been promoted to committer with the project I have been participating on during the last few months, &lt;a href=&quot;http://db.apache.org/derby/&quot; target=&quot;_blank&quot;&gt;Apache Derby&lt;/a&gt;. There&amp;#8217;s not much to say except that it feels really good to have your hard work recognized 🙂
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Apache Derby is a great project with a really nice community of helpful people and it was through Derby that I have participated and successfully completed the Google Summer of Code challenge for two years in a row! It&amp;#8217;s always a great challenge even to the sharpest mind and most advanced skills because this is an extensive project that has already been around for more than a decade. Over this period different developers have participated on it which adds to the challenge of reengineering and simple engineering of new features when the need arises. I can&amp;#8217;t say this is a disadvantage though as it is an excellent way of being exposed to actual production code from an IT giant (Apache Derby once was IBM Cloudscape). It&amp;#8217;s also exciting because the changes that you make will actually have an impact on the thousands of people that use Apache Derby and for this reason all changes have to be done with most care to keep Derby&amp;#8217;s performance up to the challenge as well as to ensure that all standards are kept.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  With this said, I&amp;#8217;ll just leave here the link to the &amp;#8220;historical&amp;#8221; vote in the ASF list 🙂
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;a href=&quot;http://mail-archives.apache.org/mod_mbox/db-derby-dev/201008.mbox/%3C4C6F038C.7080708@sbcglobal.net%3E&quot;&gt;http://mail-archives.apache.org/mod_mbox/db-derby-dev/201008.mbox/&amp;lt;4C6F038C.7080708@sbcglobal.net&amp;gt;&lt;/a&gt;
&lt;/p&gt;
</description>
        <pubDate>Mon, 23 Aug 2010 23:16:42 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2010/08/tiago-is-now-officially-an-asf-committer/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2010/08/tiago-is-now-officially-an-asf-committer/</guid>
        
        <category>Apache</category>
        
        <category>Apache Derby</category>
        
        <category>ASF</category>
        
        <category>ASF Committer</category>
        
        <category>Committer</category>
        
        <category>Derby</category>
        
        <category>my life</category>
        
        <category>Software</category>
        
        <category>The Apache Software Foundation</category>
        
        
        <category>my life</category>
        
      </item>
    
      <item>
        <title>[Comics] Autographs in the future</title>
        <description>&lt;p&gt;&lt;a href=&quot;https://www.tiagoespinha.net/wp-content/uploads/2010/08/46190_421669956860_586946860_5530928_7185433_n.jpg&quot; rel=&quot;lightbox[350]&quot; title=&quot;Check it out guys! &amp;quot;sig 3 B00BB00B 2100-12-21   Keanu Charles Reeves &amp;lt;theone@thematrix.com&amp;gt;&amp;quot;&quot;&gt;&lt;img class=&quot;alignnone size-full wp-image-351&quot; title=&quot;Check it out guys! &amp;quot;sig 3 B00BB00B 2100-12-21   Keanu Charles Reeves &amp;lt;theone@thematrix.com&amp;gt;&amp;quot;&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2010/08/46190_421669956860_586946860_5530928_7185433_n.jpg&quot; alt=&quot;&quot; width=&quot;640&quot; height=&quot;480&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>Sat, 21 Aug 2010 22:28:34 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2010/08/comics-autographs-in-the-future/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2010/08/comics-autographs-in-the-future/</guid>
        
        <category>Comics</category>
        
        <category>Funny</category>
        
        <category>Keanu Reeves</category>
        
        <category>PGP Key signing</category>
        
        <category>xkcd</category>
        
        
        <category>Funny</category>
        
      </item>
    
      <item>
        <title>Samsung Galaxy S Lag Issue (And How To Fix It) &amp;#8211; Android 2.1 [Updated]</title>
        <description>&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;strong&gt;[Updated &amp;#8211; Jump to the end of the post for a detailed walkthrough]&lt;/strong&gt;
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  As some of my readers may know, I have recently traded in my Maemo-wielding Nokia N900 for a brand new Samsung Galaxy S. This move was led by several reasons that I am not going to go in detail in this post now but I did it and I was very happy with my new phone. In comparison with the Nokia it was super fast and best of all, it runs Android which is, in my opinion, a great mobile operating system.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;!--more--&gt;Now, all was well until I started hearing about these supposed lag issues of the Galaxy S and I honestly didn&amp;#8217;t know what it was all about. The phone seemed fast enough for me and I was generally very happy with it. Sure, sometimes it would hang for 2 or 3 seconds but nothing to worrying. I genuinely thought it was just normal hiccups like we sometimes get on our computers.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Everything changed when I decided to give one of the lag fixes a go. I thought &amp;#8220;hey, why not?&amp;#8221;, I had wanted to root my device for a while now so I could just as well go the extra mile and apply the lag fix as well, and boy, was I missing on speed. After rooting and applying the patch everything is just snappy. There&amp;#8217;s no more hiccups at all and apps just load instantly without any wait at all. For example, when I refresh my inbox using GMail it also takes WAY LESS time than it would before, which really surprised me. Browsing also feels faster and even the benchmarking tool &amp;#8220;Quadrant Standard&amp;#8221; reports the Galaxy S as being twice as fast as the Motorola Droid X! Actually, with this fix, the Galaxy S is at the top of the food chain with the closest phone to provide even similar results being the Nexus One on Froyo.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  So my advice is: apply this patch asap. It will eat 1Gb of your internal memory card but trust me: it&amp;#8217;s so very worth it. I&amp;#8217;m including two videos in this post. One of them teaches you how to root the phone while the other guides you through the actual fix. Just apply them both (first root then fix) and off you go.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  If you notice the phone to be faster, please drop me a comment below.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Cheers!
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;strong&gt;Update:&lt;/strong&gt;
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  I know I have the videos below and they&amp;#8217;re pretty straight forward, but since this post is getting so much popularity, I thought I&amp;#8217;d make a step by step walkthrough that will guide you through the whole process of rooting AND applying the lag fix. Let&amp;#8217;s start with the rooting, shall we?
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  The next steps are for &lt;strong&gt;ROOTING&lt;/strong&gt; your Samsung Galaxy S (i9000):
&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Download this file: &lt;a href=&quot;https://www.tiagoespinha.net/wp-content/uploads/2010/08/update.zip&quot;&gt;update&lt;/a&gt;.zip&lt;/li&gt;
  &lt;li&gt;Plug your phone to your computer and mount the memory cards through the notification bar.&lt;/li&gt;
  &lt;li&gt;Place this update.zip in the root of your INTERNAL SD card. It should be the one with lots of folders. Just place it right in the card, outside any particular folder.&lt;/li&gt;
  &lt;li&gt;Unmount the USB connection through the notification bar.&lt;/li&gt;
  &lt;li&gt;Turn off your phone.&lt;/li&gt;
  &lt;li&gt;With your phone turned off, press the following keys at the same time: Volume Up, Home and Power button. Keep holding them until you see the Samsung Galaxy S writings on the screen, then you can let go.&lt;/li&gt;
  &lt;li&gt;You will be presented with a menu, just choose the option that allows you to flash the update.zip using the volume up and volume down keys. To select the option just push the home key.&lt;/li&gt;
  &lt;li&gt;Wait for the phone to reboot on its own et voilà! It’s done!&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The next steps are for &lt;strong&gt;APPLYING THE LAG FIX&lt;/strong&gt; onto your Samsung Galaxy S (i9000):&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Ok, so I cheated. I&amp;#8217;m not going to give you steps for this because&amp;#8230;. it&amp;#8217;s the same as the steps above! So, &lt;strong&gt;if you have already rooted your phone&lt;/strong&gt;, repeat the steps above &lt;strong&gt;BUT&lt;/strong&gt; with this &lt;a href=&quot;https://www.tiagoespinha.net/wp-content/uploads/2010/08/update1.zip&quot;&gt;update&lt;/a&gt;. &lt;strong&gt;WARNING: &lt;/strong&gt; The name of this second file is update1.zip. You &lt;strong&gt;MUST&lt;/strong&gt; take the &amp;#8220;1&amp;#8221; off before you copy it to your phone, otherwise it will NOT work! You also need to know that possibly you won&amp;#8217;t see the &amp;#8220;.zip&amp;#8221; extension. This is fine! If you don&amp;#8217;t see it, DON&amp;#8217;T add it! It just means Windows is hiding it for you and that&amp;#8217;s perfectly fine.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  I&amp;#8217;m still leaving the videos below and in case you have doubts or need more help, drop me a comment below. No registration required! (The comment might take a few minutes to appear as I need to approve them manually)
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Rooting the Galaxy S:&lt;br /&gt; ~
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Lag Fix:&lt;br /&gt;
&lt;/p&gt;
</description>
        <pubDate>Fri, 20 Aug 2010 21:26:31 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2010/08/samsung-galaxy-s-lag-issue-and-how-to-fix-it/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2010/08/samsung-galaxy-s-lag-issue-and-how-to-fix-it/</guid>
        
        <category>Android</category>
        
        <category>Android OS</category>
        
        <category>Android rooting</category>
        
        <category>Cellphones</category>
        
        <category>Galaxy S</category>
        
        <category>Lag fix</category>
        
        <category>Lag issue</category>
        
        <category>Mobile</category>
        
        <category>Mobile phones</category>
        
        <category>Samsung</category>
        
        <category>Samsung Galaxy S</category>
        
        <category>Samsung Galaxy S Lag Issue</category>
        
        <category>Technology</category>
        
        
        <category>Mobiles</category>
        
      </item>
    
      <item>
        <title>Samsung Galaxy S and the iPhone 4&amp;#8217;s amazing screen</title>
        <description>&lt;p style=&quot;text-align: justify;&quot;&gt;
  I went into an O2 store today. I was merely looking to handle the new iPhone 4, to see how it looked like in person, to see how it felt in my hand and&amp;#8230; obviously, to test the death grip, or, more correctly, the death touch. Yes, you don&amp;#8217;t really have to grip it like Steve J. suggests, you really just have to touch it on that joint point on the bottom left corner of the phone and the signal goes all the way down to just two, and then one bar. You can clearly see the effects of the new firmware though, it no longer goes into no signal, it will still tell you that there&amp;#8217;s some signal, while in fact it&amp;#8217;s probably impossible to make any calls at that point. But anyway, I was there, I tested it. I didn&amp;#8217;t grip the iPhone, I merely pressed my index finger against that tiny little spot and the signal instantly started dropping from the full five bars to two bars and ultimately to just one bar. Similarly, as soon as I raised my finger from that spot, it gained back the signal to full strength. This is why I&amp;#8217;m dubbing this issue not &amp;#8220;death grip&amp;#8221; but &amp;#8220;death touch&amp;#8221;.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;!--more--&gt;Not all is bad about the iPhone 4 though. The screen is amazing, tantalizing, fabulous, ridiculously fantastic and I might just have ran out of adjectives to describe how &amp;#8220;real&amp;#8221; it feels to look at such a screen. It&amp;#8217;s like there&amp;#8217;s no screen at all and you&amp;#8217;re just looking at something &amp;#8220;real&amp;#8221;. If you&amp;#8217;ve read my blog, you&amp;#8217;ll know that by now I loathe Steve Jobs. He&amp;#8217;s an arrogant prick who bullies his employees and he might as well have been the one who gave the order to go ahead with this design, despite having been warned about the issues it could have. Still, the screen of the iPhone 4 is just&amp;#8230; fantastic. It&amp;#8217;s something that has to be seen in person to be wooed by it and trust me, you will be.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Anyway, enough beating the dead horse with a stick and moving on to more serious matters. I&amp;#8217;ve had my eye on the Samsung Galaxy S for a while now and based on the reviews and videos I saw of it, I was pretty much convinced on getting one. I had a few deals on eBay that I was keeping track of  and I was just waiting for my own phone to sell to then buy the Galaxy. However, what was not my surprise when on the O2 store, I saw the Samsung Galaxy S for sale and it had actually been one of the motives for me to go up to the store: I wanted to try the phone in person just to get the feel of it. I asked the lady if she had one other than that one on display as it had no battery and she went to get one, a BNIB handset, just for me to try. I was impressed with her amiability with this and I had the chance to take a glance at the price tag &amp;#8211; £319 it read. I thought to myself that it was a really nice price but it was probably locked to O2, which isn&amp;#8217;t desirable at all for me. I&amp;#8217;m at a point in my life that I might have to move to God knows where and having a phone that&amp;#8217;s locked to a British network is anything but ideal for me.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  The lady came back with the handset and she let me mess around with it a bit. I tried (and failed) to enable Swype, and on a casual chit chat with the O2 lady, I asked her whether the phone was locked and she told me she didn&amp;#8217;t actually know. Those phones were supposed to be sold on contracts and those are usually unlocked, but she didn&amp;#8217;t know. She also told me that she was fairly sure they were unlocked, as the box had no O2 branding whatsoever, but she didn&amp;#8217;t know for sure. After asking a few of her colleagues, none of them seemed to be sure either but at some point, one of them assured me it was unlocked to all networks, and I just knew it: I have to buy this phone. And I did. I made an excellent deal, better than any of the deals on eBay because I get 1 year warranty and in the end it&amp;#8217;s actually cheaper than anything on eBay.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  So, to everyone who&amp;#8217;s wanting to buy a Samsung Galaxy S, I say try your local O2 shop. Maybe they have a few units like this!
&lt;/p&gt;
</description>
        <pubDate>Mon, 26 Jul 2010 19:16:28 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2010/07/samsung-galaxy-s-and-the-iphone-4s-amazing-screen/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2010/07/samsung-galaxy-s-and-the-iphone-4s-amazing-screen/</guid>
        
        <category>Apple</category>
        
        <category>Galaxy S</category>
        
        <category>iPhone</category>
        
        <category>iPhone 4</category>
        
        <category>IPS Screen</category>
        
        <category>Mobiles</category>
        
        <category>Phones</category>
        
        <category>Samsung</category>
        
        <category>Samsung Galaxy S</category>
        
        <category>Screen</category>
        
        <category>Technology</category>
        
        
        <category>Mobiles</category>
        
      </item>
    
      <item>
        <title>Why Apple&amp;#8217;s argument is simply flawed</title>
        <description>&lt;p style=&quot;text-align: justify;&quot;&gt;
  Alright so I know everyone has been talking about this and it has been debated and criticized ad nauseum but this latest press conference was nothing short of a joke. For those of you who are unaware of what happened, let me start from the beginning.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Apple released the iPhone 4 and dubbed it as the best smartphone ever. It was the best smartphone Apple had ever built, it was the best smartphone on Earth and&amp;#8230; &amp;#8220;there&amp;#8217;s one more thing&amp;#8230; look at the rim. This is also the antenna and is part of some brilliant engineering.&amp;#8221; (this is more or less what Steve Jobs preached at the iPhone launch). When making this presentation, little did Jobs know (or didn&amp;#8217;t he?) that this antenna design was going to backfire so gracefully, like a Russian Roulette player who&amp;#8217;s about to fire the gun against his head for the sixth time in a row. And it did fire.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;!--more--&gt;Jobs can bullshit us all he likes, with statistics and with supposed facts that the iPhone 4 only drops 1/100th more calls than the 3GS but fact remains: the iPhone 4 has a massive flaw that was overlooked by Apple&amp;#8217;s engineers. This flaw hit all sorts of media. It was on 
  
  &lt;a href=&quot;http://gizmodo.com/5573504/unofficial-finger-test-reveals-iphone-antenna-issue-impacts-reception-and-transmission&quot; target=&quot;_blank&quot;&gt;technology websites&lt;/a&gt;, on &lt;a href=&quot;http://www.guardian.co.uk/technology/2010/jul/14/apple-shares-dive-iphone4-criticism?intcmp=240&quot; target=&quot;_blank&quot;&gt;mainstream newspapers&lt;/a&gt; and it even hit some TV channels like &lt;a href=&quot;http://edition.cnn.com/2010/TECH/mobile/07/13/iphone.4.duct.tape/index.html&quot; target=&quot;_blank&quot;&gt;CNN&lt;/a&gt;. Moreover, &lt;a href=&quot;http://blogs.consumerreports.org/electronics/2010/07/apple-iphone-4-antenna-issue-iphone4-problems-dropped-calls-lab-test-confirmed-problem-issues-signal-strength-att-network-gsm.html&quot; target=&quot;_blank&quot;&gt;Consumer Reports&lt;/a&gt; in the US went from recommending the iPhone 4 to NOT recommending it at all when they found out (and tested for themselves) about this issue with the reception. After all this bad publicity, after &lt;a href=&quot;http://www.google.co.uk/finance?q=NASDAQ:AAPL&quot; target=&quot;_blank&quot;&gt;AAPL&amp;#8217;s&lt;/a&gt; shares dropping roughly $30 per share, Jobs knew something had to be done. And so he did, he called for a press conference and they approached the issue of the antenna&amp;#8230; in one of the worst ways possible.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  At the conference, Jobs&amp;#8217; claim was that all smartphones have this issue. Conveniently, they played videos of other phones being grasped firmly in a hand and of how the bars would go all the way down. Conveniently, they were videos. They weren&amp;#8217;t showing it live, the tests weren&amp;#8217;t even being done in one of the &lt;a href=&quot;http://gizmodo.com/5589054/apples-100-million-iphone-test-chamber&quot; target=&quot;_blank&quot;&gt;anechoic chambers&lt;/a&gt; that Jobs&amp;#8217; claimed to have spent $100 million on to test their phones; it was just someone, holding a series of phones, connected to God knows what operator, and showing how the bars go down. What Apple failed to address however, was the fact that you don&amp;#8217;t need the so-called &amp;#8216;death grip&amp;#8217; to get the bars to drop. All you need to do is bridge the two antennas on the bottom-left corner of the phone. Place your finger on top of it and your call quality will drop dramatically, to a point where the call might disconnect and to a point where you&amp;#8217;ll have no reception at all. Apple&amp;#8217;s response, in sum, was: all phones have this problem, the iPhone is not perfect, but here&amp;#8217;s a bumper anyway to keep you quiet.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Jobs. If you are so confident that the iPhone 4 has no problem at all, why are you giving your customers bumpers that fix the problem? What, wait. But there is no problem, is there? Is there a problem that affects all phones and thus you are appeasing the customers with a solution or is there no problem at all. I&amp;#8217;m confused now.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  In any case Jobs, I understand you. After the shit&amp;#8217;s been done you really can&amp;#8217;t admit to it anymore. You&amp;#8217;d take another massive hit to the shares of AAPL and that&amp;#8217;s bad for business. You also can&amp;#8217;t do a global recall because that would mean replacing every single iPhone 4 by new models without the issue and that would mean catastrophic losses plus a massive stain on Apple&amp;#8217;s history. So all in all Jobs, well done. You took the sensible way out. Not the way out that truly has your customers at heart but the way out that is best for everybody.
&lt;/p&gt;
</description>
        <pubDate>Sun, 18 Jul 2010 01:12:47 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2010/07/why-apples-argument-is-simply-flawed/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2010/07/why-apples-argument-is-simply-flawed/</guid>
        
        <category>antenna problems</category>
        
        <category>Apple</category>
        
        <category>iOS 4</category>
        
        <category>iPhone</category>
        
        <category>iPhone OS</category>
        
        <category>iPhone reception problems</category>
        
        <category>Jobs</category>
        
        <category>problems</category>
        
        <category>reception</category>
        
        <category>Steve Jobs</category>
        
        
        <category>iPhone</category>
        
      </item>
    
      <item>
        <title>Lufthansa offers Gray Powell flight to Germany</title>
        <description>&lt;p style=&quot;text-align: justify;&quot;&gt;
  Everyone who follows the technology world would know the name Gray Powell. This is the name of the lad who &lt;a href=&quot;http://gizmodo.com/5520438/how-apple-lost-the-next-iphone?skyline=true&amp;amp;s=i&quot; target=&quot;_blank&quot;&gt;lost his prototype iPhone 4G&lt;/a&gt; at a German beer bar. Well, guess what? Lufthansa is offering him a business class flight to Munich for him to &amp;#8220;pick up where he last left off&amp;#8221;.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Image of the letter after the jump.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;!--more--&gt;
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;a href=&quot;https://www.tiagoespinha.net/wp-content/uploads/2010/04/89928967-b0ad73fbe6aa4e67e67dae138e83811b.4bd077e5-scaled.jpg&quot; rel=&quot;lightbox[320]&quot; title=&quot;89928967-b0ad73fbe6aa4e67e67dae138e83811b.4bd077e5-scaled&quot;&gt;&lt;img class=&quot;alignnone size-full wp-image-321&quot; title=&quot;89928967-b0ad73fbe6aa4e67e67dae138e83811b.4bd077e5-scaled&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2010/04/89928967-b0ad73fbe6aa4e67e67dae138e83811b.4bd077e5-scaled.jpg&quot; alt=&quot;&quot; width=&quot;600&quot; height=&quot;777&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
</description>
        <pubDate>Thu, 22 Apr 2010 18:34:16 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2010/04/lufthansa-offers-gray-powell-flight-to-germany/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2010/04/lufthansa-offers-gray-powell-flight-to-germany/</guid>
        
        <category>Germany</category>
        
        <category>Gray Powell</category>
        
        <category>iPhone 4G</category>
        
        <category>Lost iPhone</category>
        
        <category>Lufthansa</category>
        
        <category>Technology</category>
        
        
        <category>iPhone</category>
        
      </item>
    
      <item>
        <title>Imagine Cup and volcano ash</title>
        <description>&lt;p style=&quot;text-align: justify;&quot;&gt;
  So! It&amp;#8217;s been a while and I come back with nothing but sad and unhappy stories.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  As perhaps some of you knew, my team was one of the UK finalists in the Microsoft Imagine Cup competition. As fate wanted, we did not win. We came home, not empty-handed but in a way, empty-hearted. Maybe it is for the best; my team is composed of Master&amp;#8217;s students and the workload isn&amp;#8217;t comparable. I did not expect to have enough time to make it through to the finals, so maybe it is indeed for the best that someone else won.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Still, we got some loot from this competition! We won a magnificent Microsoft LifeCam HD and a superb Microsoft Wireless Mobile Mouse 6000, with the new BlueTrack technology! Last but not least, we also got a diploma signed by Bill Gates himself! Quite good huh?
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Unfortunately I cannot post many details from this visit to Microsoft&amp;#8217;s campus in Reading as we were all forced to sign an NDA to prevent us from leaking the latest details. All that I can say is that I&amp;#8217;ve tried a Windows Phone 7 and it&amp;#8217;s amazing. It&amp;#8217;s a complete break with Windows Mobile and it is definitely a great break. From my experience I can say that the OS still feels a bit unpolished on certain aspects like image handling, but that&amp;#8217;s to be expected as it hasn&amp;#8217;t even been released yet. I also got to try a Microsoft Surface in person and whoa&amp;#8230;. it&amp;#8217;s quite an amazing experience and I quite like the applications they have to showcase it. Perhaps the only disappointing factor is that it doesn&amp;#8217;t use either resistive or capacitive technologies, but instead it resorts to a projection and five cameras to detect touches. That is why it is such a tall device.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  We also got a nice presentation by a gentleman from Lionhead Studios but unfortunately they had really strong feelings about the NDA and I am really not supposed to say anything about that!
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Moving on to the next topic there&amp;#8217;s&amp;#8230; volcano ash! Namely Eyjafjallajökull&amp;#8217;s ash. This is the name of the very nasty Icelandic volcano that has stopped me from going back to Portugal for my well deserved holidays. I had a flight booked for the 16th which got cancelled, then I rebooked it for today (the 19th) and again it got cancelled, and right now I have it booked for this Friday, hoping that things will look better in a few days.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  The latest news on this is that the volcano comes from the UK Met Office (check image) and they tell us that it has actually stopped erupting and that maybe now the skies will start clearing.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;a href=&quot;https://www.tiagoespinha.net/wp-content/uploads/2010/04/VAG_1271676889.png&quot; rel=&quot;lightbox[314]&quot; title=&quot;VAG_1271676889&quot;&gt;&lt;img class=&quot;alignnone size-full wp-image-317&quot; title=&quot;VAG_1271676889&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2010/04/VAG_1271676889.png&quot; alt=&quot;&quot; width=&quot;640&quot; height=&quot;453&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
</description>
        <pubDate>Mon, 19 Apr 2010 15:11:06 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2010/04/imagine-cup-and-volcano-ash/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2010/04/imagine-cup-and-volcano-ash/</guid>
        
        <category>Eyjafjallajoekull</category>
        
        <category>Eyjafjallajökull</category>
        
        <category>Imagine Cup</category>
        
        <category>Imagine Cup 2010</category>
        
        <category>Life</category>
        
        <category>microsoft</category>
        
        <category>Microsoft BlueTrack</category>
        
        <category>Microsoft Imagine Cup</category>
        
        <category>Microsoft LifeCam</category>
        
        <category>Microsoft Surface</category>
        
        <category>Technology</category>
        
        <category>Volcano</category>
        
        <category>Volcano Ash</category>
        
        <category>Windows Phone 7</category>
        
        
        <category>my life</category>
        
      </item>
    
      <item>
        <title>Apple Tablet &amp;#8211; the iPad is&amp;#8230; meh</title>
        <description>&lt;p style=&quot;text-align: justify;&quot;&gt;
  The so much awaited Apple Tablet has finally been announced by good ole Steve Jobs. My first impression? Meh. Put it this way, I was very very excited about the Apple Tablet, I was amused that the name could have gone the iSlate way (is late, get it?), but even the name is a total and uttermost failure. iPad&amp;#8230; what&amp;#8217;s with the easy iPod pun?!
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Those of us who read Gizmodo and other technology-oriented websites have been showering in mockups of how the iPad would look like and truth to be told, most of them look better than this chunky piece of an eBook reader. What&amp;#8217;s this supposed to be anyway? A phone? But it has no 3G&amp;#8230; An eBook reader? But it costs $1000&amp;#8230; An MP3/video player? BUT IT COSTS $1000!
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Come on guys, who does not sincerely believe that Apple has just shot themselves in the foot please raise your hands and drop me a comment with sound reasoning. As for me, if I had Apple stock I&amp;#8217;d be hitting the sell button as hard as I could right now&amp;#8230; poor move Jobs, poor move&amp;#8230;
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Photos after the break (courtesy of Gizmodo).
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;strong&gt;UPDATE&lt;/strong&gt;: Alright, alright, it only costs $500 after all. My point still remains: it is ugly and it only allows one app running at a time&amp;#8230; $500 for a giant iPhone? Meh.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;!--more--&gt;
  
  &lt;a href=&quot;https://www.tiagoespinha.net/wp-content/uploads/2010/01/appletablet10.jpg&quot; rel=&quot;lightbox[303]&quot; title=&quot;appletablet10&quot;&gt;&lt;img class=&quot;alignnone size-full wp-image-305&quot; title=&quot;appletablet10&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2010/01/appletablet10.jpg&quot; alt=&quot;&quot; width=&quot;600&quot; height=&quot;399&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;a href=&quot;https://www.tiagoespinha.net/wp-content/uploads/2010/01/appletablet1.jpg&quot; rel=&quot;lightbox[303]&quot; title=&quot;appletablet1&quot;&gt;&lt;img class=&quot;alignnone size-full wp-image-304&quot; title=&quot;appletablet1&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2010/01/appletablet1.jpg&quot; alt=&quot;&quot; width=&quot;600&quot; height=&quot;399&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;a href=&quot;https://www.tiagoespinha.net/wp-content/uploads/2010/01/appletabletb13.jpg&quot; rel=&quot;lightbox[303]&quot; title=&quot;appletabletb13&quot;&gt;&lt;img class=&quot;alignnone size-full wp-image-306&quot; title=&quot;appletabletb13&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2010/01/appletabletb13.jpg&quot; alt=&quot;&quot; width=&quot;600&quot; height=&quot;399&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
</description>
        <pubDate>Wed, 27 Jan 2010 20:10:40 +0000</pubDate>
        <link>https://www.tiagoespinha.net/2010/01/apple-tablet-the-ipad-is-meh/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2010/01/apple-tablet-the-ipad-is-meh/</guid>
        
        <category>Apple</category>
        
        <category>Apple iPad</category>
        
        <category>Apple Tablet</category>
        
        <category>Hardware</category>
        
        <category>iPad</category>
        
        <category>Tablet</category>
        
        <category>Tablet PC</category>
        
        <category>Technology</category>
        
        
        <category>Apple</category>
        
      </item>
    
      <item>
        <title>iMacs and the yellow tinted screen</title>
        <description>&lt;p style=&quot;text-align: justify;&quot;&gt;
  Oh oh! No, not Santa, this is actually a juicy story. Mark Wilson at &lt;a href=&quot;http://gizmodo.com/5436442/apple-has-thwarted-my-efforts-so-i-need-your-help?utm_source=feedburner&amp;amp;utm_medium=feed&amp;amp;utm_campaign=Feed:+gizmodo/full+(Gizmodo)&amp;amp;utm_content=Google+Reader&quot; target=&quot;_blank&quot;&gt;Gizmodo&lt;/a&gt; brings us an issue with the latest Apple&amp;#8217;s iMacs. According to said person, some of the latest iMacs randomly display a yellow tinted screen, turning the whites into&amp;#8230; well&amp;#8230; yellow. Manufacturing issues like this happen you say, and I would agree; that&amp;#8217;s not really the issue in this case.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  The issue is the fact that Mark&amp;#8217;s iMac was exchanged but the replacement computer is also icteric. So what&amp;#8217;s the deal? Well, I&amp;#8217;m not a fan boy for either side, I&amp;#8217;m not fanatic so this brings me no special joy; despite that, I share Mark&amp;#8217;s opinion on the issue: multi-thousand dollar computers, computers that are known for being overpriced for their specifications, shouldn&amp;#8217;t have issues like this. Moreso, the issue should never happen again on a replacement computer. This can only mean one of two things &amp;#8211; either the issue is happening on a large percentage of iMacs or Mark has just been extremely unlucky. Considering Apple&amp;#8217;s &lt;a href=&quot;http://discussions.apple.com/thread.jspa?threadID=2235367&amp;amp;start=0&amp;amp;tstart=0&quot; target=&quot;_blank&quot;&gt;previous&lt;/a&gt; &lt;a href=&quot;http://forums.macrumors.com/showthread.php?t=824940&quot; target=&quot;_blank&quot;&gt;rapport&lt;/a&gt; with &lt;a href=&quot;http://discussions.apple.com/thread.jspa?threadID=2212682&amp;amp;tstart=0&quot; target=&quot;_blank&quot;&gt;manufacturing&lt;/a&gt; &lt;a href=&quot;http://discussions.apple.com/thread.jspa?threadID=2238709&amp;amp;tstart=0&quot; target=&quot;_blank&quot;&gt;issues&lt;/a&gt; and faulty parts, I would go with the former.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Right now Apple has been creepy and resorted to shady backstage data mining to flag Mark&amp;#8217;s Apple account to disallow any other exchanges; apparently his computer will now be repaired instead. Mark isn&amp;#8217;t happy and he&amp;#8217;s trying to spread the word; this is my attempt to help him and to get Apple to change this behavior. This would be acceptable from a cheap computer brand but not from Apple, THE most expensive computer brand, whose flagship is to produce computers with above-par quality. This sure as hell isn&amp;#8217;t above-par.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  [via &lt;a href=&quot;http://gizmodo.com/5436442/apple-has-thwarted-my-efforts-so-i-need-your-help?utm_source=feedburner&amp;amp;utm_medium=feed&amp;amp;utm_campaign=Feed:+gizmodo/full+(Gizmodo)&amp;amp;utm_content=Google+Reader&quot; target=&quot;_blank&quot;&gt;Gizmodo&lt;/a&gt;]
&lt;/p&gt;
</description>
        <pubDate>Tue, 29 Dec 2009 23:08:27 +0000</pubDate>
        <link>https://www.tiagoespinha.net/2009/12/imacs-and-the-yellow-tinted-screen/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2009/12/imacs-and-the-yellow-tinted-screen/</guid>
        
        <category>Apple</category>
        
        <category>Apple iMac</category>
        
        <category>Hardware</category>
        
        <category>iMac</category>
        
        <category>Technology</category>
        
        
        <category>iMac</category>
        
      </item>
    
      <item>
        <title>10 Google Wave Invites</title>
        <description>&lt;p style=&quot;text-align: justify;&quot;&gt;
  Yeah, it is serious 🙂 I have 10 Google Wave invites to distribute to the first ten visitors to leave me a comment on this post. This is NOT a contest, I will be giving the invites to the &lt;strong&gt;ten first lucky&lt;/strong&gt; people who leave a comment on this post requesting an invite. Please be sure to leave the comment with a working e-mail address, or the invite won&amp;#8217;t go through and you will lose your chance.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Comment away!
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  [UPDATE]: 8 invites left!
&lt;/p&gt;
</description>
        <pubDate>Mon, 28 Dec 2009 14:06:19 +0000</pubDate>
        <link>https://www.tiagoespinha.net/2009/12/10-google-wave-invites/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2009/12/10-google-wave-invites/</guid>
        
        <category>Google</category>
        
        <category>Google Wave</category>
        
        <category>Google Wave Invites</category>
        
        <category>Internet</category>
        
        <category>Software</category>
        
        <category>Technology</category>
        
        <category>Wave</category>
        
        <category>Wave Invites</category>
        
        
        <category>Internet</category>
        
      </item>
    
      <item>
        <title>Out with the old, In with the new!</title>
        <description>&lt;p&gt;The New Year is at the gates and so I thought it would be a splendid occasion to change the looks of my blog. Therefore, avast ye landlubbers! The new theme is here, hope you like it 🙂&lt;/p&gt;

&lt;p&gt;Cheers!&lt;/p&gt;

&lt;p&gt;Tiago&lt;/p&gt;
</description>
        <pubDate>Mon, 28 Dec 2009 10:57:24 +0000</pubDate>
        <link>https://www.tiagoespinha.net/2009/12/out-with-the-old-in-with-the-new/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2009/12/out-with-the-old-in-with-the-new/</guid>
        
        <category>2010</category>
        
        <category>Blog</category>
        
        <category>Internet</category>
        
        <category>New Year</category>
        
        
        <category>Internet</category>
        
      </item>
    
      <item>
        <title>Adobe and the slap on Apple</title>
        <description>&lt;p style=&quot;text-align: justify;&quot;&gt;
  Well, for some weird reason, Apple refuses to give in and have Adobe port Flash over to the iPhone. It would be a massive advantage if we could see an iPhone with a full blown version of Flash, as opposed to Flash Lite. But&amp;#8230; Apple won&amp;#8217;t bend. So what does Apple do? The best it can do right now: get people angry at Apple.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Below is the image that people will see when they try to download Flash on their iPhones (courtesy of &lt;a href=&quot;http://www.engadget.com/2009/11/02/adobe-engages-apple-in-passive-aggressive-warfare-with-iphones/&quot; target=&quot;_blank&quot;&gt;Engadget&lt;/a&gt;):
&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.tiagoespinha.net/wp-content/uploads/2009/11/iphone-flash-message.jpg&quot; rel=&quot;lightbox[284]&quot; title=&quot;iphone-flash-message&quot;&gt;&lt;img class=&quot;alignleft size-full wp-image-285&quot; title=&quot;iphone-flash-message&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2009/11/iphone-flash-message.jpg&quot; alt=&quot;iphone-flash-message&quot; width=&quot;315&quot; height=&quot;474&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>Thu, 12 Nov 2009 10:29:15 +0000</pubDate>
        <link>https://www.tiagoespinha.net/2009/11/adobe-and-the-slap-on-apple/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2009/11/adobe-and-the-slap-on-apple/</guid>
        
        <category>Adobe</category>
        
        <category>Adobe Flash</category>
        
        <category>Apple</category>
        
        <category>Apple iPhone</category>
        
        <category>Flash</category>
        
        <category>iPhone</category>
        
        <category>iPhone 3G</category>
        
        <category>Software</category>
        
        <category>Technology</category>
        
        
        <category>Technology</category>
        
      </item>
    
      <item>
        <title>Sidekick data recovered (most of it, maybe all)</title>
        <description>&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;a href=&quot;https://www.tiagoespinha.net/wp-content/uploads/2009/10/Batman-Robin-Photograph-C12150175.jpg&quot; rel=&quot;lightbox[278]&quot; title=&quot;BatmanRobinSidekick&quot;&gt;&lt;img class=&quot;alignnone size-full wp-image-279&quot; style=&quot;border: 0pt none; float:left; padding-right:10px; padding-bottom:10px&quot; title=&quot;BatmanRobinSidekick&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2009/10/Batman-Robin-Photograph-C12150175.jpg&quot; alt=&quot;BatmanRobinSidekick&quot; width=&quot;240&quot; height=&quot;192&quot; /&gt;&lt;/a&gt;You just have to take the fun of being a critical blogger, don&amp;#8217;t you T-Mobile? It seems that T-Mobile has actually managed to recover most of the data that was deemed &amp;#8216;probably lost&amp;#8217; as the result of the massive server crash. According to the magenta folks, they will be able to recover most, if not all, of their customers&amp;#8217; data. Good news for the Sidekick owners, but if I was you I&amp;#8217;d just go with Robin anyway&amp;#8230;
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Official Microsoft statement after the break.
&lt;/p&gt;

&lt;p&gt;[via &lt;a href=&quot;http://gizmodo.com/5382208/most-if-not-all-sidekick-data-recovered&quot; target=&quot;_blank&quot;&gt;Gizmodo&lt;/a&gt;]&lt;/p&gt;

&lt;!--more--&gt;

&lt;blockquote&gt;
  &lt;p&gt;Dear T-Mobile Sidekick customers,&lt;/p&gt;

  &lt;p&gt;On behalf of Microsoft, I want to apologize for the recent problems with the Sidekick service and give you an update on the steps we have taken to resolve these problems.&lt;/p&gt;

  &lt;p&gt;We are pleased to report that we have recovered most, if not all, customer data for those Sidekick customers whose data was affected by the recent outage. We plan to begin restoring users’ personal data as soon as possible, starting with personal contacts, after we have validated the data and our restoration plan. We will then continue to work around the clock to restore data to all affected users, including calendar, notes, tasks, photographs and high scores, as quickly as possible.&lt;/p&gt;

  &lt;p&gt;We now believe that data loss affected a minority of Sidekick users. If your Sidekick account was among those affected, please continue to log into these forums for the latest updates about when data restoration will begin, and any steps you may need to take. We will work with T-Mobile to post the next update on data restoration timing no later than Saturday.&lt;/p&gt;

  &lt;p&gt;We have determined that the outage was caused by a system failure that created data loss in the core database and the back-up. We rebuilt the system component by component, recovering data along the way. This careful process has taken a significant amount of time, but was necessary to preserve the integrity of the data.&lt;/p&gt;

  &lt;p&gt;We will continue working closely with T-Mobile to restore user data as quickly as possible. We are eager to deliver the level of reliable service that our incredibly loyal customers have become accustomed to, and we are taking immediate steps to help ensure this does not happen again. Specifically, we have made changes to improve the overall stability of the Sidekick Service and initiated a more resilient backup process to ensure that the integrity of our database backups is maintained.&lt;/p&gt;

  &lt;p&gt;Once again, we apologize for this situation and the inconvenience that it has created. Please know that we are working all-out to resolve this situation and restore the reliability of the service.&lt;/p&gt;

  &lt;p&gt;Sincerely,&lt;/p&gt;

  &lt;p&gt;Roz Ho&lt;/p&gt;

  &lt;p&gt;Corporate Vice President&lt;/p&gt;

  &lt;p&gt;Premium Mobile Experiences, Microsoft Corporation&lt;/p&gt;
&lt;/blockquote&gt;
</description>
        <pubDate>Thu, 15 Oct 2009 14:58:48 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2009/10/sidekick-data-recovered-most-of-it-maybe-all/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2009/10/sidekick-data-recovered-most-of-it-maybe-all/</guid>
        
        
        <category>Uncategorized</category>
        
      </item>
    
      <item>
        <title>T-Mobile Sidekick in Danger</title>
        <description>&lt;p style=&quot;text-align: justify;&quot;&gt;
  Well, truth to be told this had to happen at some point. According to the good folks at &lt;a href=&quot;http://www.engadget.com/2009/10/10/t-mobile-we-probably-lost-all-your-sidekick-data/&quot; target=&quot;_blank&quot;&gt;Engadget&lt;/a&gt;, T-Mobile has most probably lost the data of their customers&amp;#8217; Sidekick phones. The T-Mobile Sidekick is a device that relies heavily on cloud-computing and simple things such as looking up contacts or reading old text messages are done through servers in the cloud (that is to say, in the Internet). So if these servers fail for some reason, or more extremely (like it happened) lose all the data they contain, then the end user is pretty much screwed.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  I hope for the sake of the costumers that the data isn&amp;#8217;t just lost; I would have also hoped that T-Mobile had off-site, offline backups of all this stuff but that clearly does not seem to be the case. It is also up to our imagination whom to blame for this. Of course that for all the people affected by this problem, T-Mobile will be the one to blame, but whose fault was it in the end? Is it a bug in the servers? Will it happen again? Has it been patched?
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Doesn&amp;#8217;t really matter now but here&amp;#8217;s the morale of the story: &lt;strong&gt;ALWAYS &lt;/strong&gt;keep backups of your data.
&lt;/p&gt;
</description>
        <pubDate>Sat, 10 Oct 2009 22:53:13 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2009/10/t-mobile-sidekick-in-danger/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2009/10/t-mobile-sidekick-in-danger/</guid>
        
        <category>Danger</category>
        
        <category>Data loss</category>
        
        <category>microsoft</category>
        
        <category>Sidekick</category>
        
        <category>Software</category>
        
        <category>T-Mobile</category>
        
        <category>T-Mobile Sidekick</category>
        
        
        <category>Software</category>
        
      </item>
    
      <item>
        <title>Windows 7 &amp;#8211; Adjust Aero Peek Delay</title>
        <description>&lt;p style=&quot;text-align: justify;&quot;&gt;
  Having recently tried Mac OS X and all of it Exposé and Spaces goodness, I couldn&amp;#8217;t help but to notice that Aero Peek feels like a complete rip off of the Exposé feature. Don&amp;#8217;t take me wrong though, it is not a critic. I am of the opinion that progress can only be made if we pick the best bits and pieces out of everything that is out there and put it all into one package. So while Windows still has a long way to go on user experience matters, I see this as a move forward.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Still, Aero Peek came with an annoyance for me: it takes too damn long! Basically, when you activate Exposé on a Mac (either by having a shortcut or by hovering over a hot corner) you instantly get to your desktop and can see what&amp;#8217;s underneath &amp;#8211; with Aero Peek this takes at least one or two seconds which isn&amp;#8217;t ideal for me by any stretch.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  With that in mind, and since there does not seem to be that much documentation about this yet, Microsoft allows you to adjust that delay time with some registry hacking. To adjust the delay, do the following:
&lt;/p&gt;

&lt;ol style=&quot;text-align: justify;&quot;&gt;
  &lt;li&gt;
    Open regedit (Start -&amp;gt; regedit -&amp;gt; press enter)
  &lt;/li&gt;
  &lt;li&gt;
    Go to the key &lt;strong&gt;HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ Advanced&lt;/strong&gt;
  &lt;/li&gt;
  &lt;li&gt;
    Once here, create a new DWORD (32 bit) entry with the name &lt;strong&gt;DesktopLivePreviewHoverTime&lt;/strong&gt; and set it to whatever time you&amp;#8217;d like in milliseconds. I found that 100 works best for me but I will leave that at your own discretion.
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Now I&amp;#8217;m back to testing Windows 7 RTM &amp;#8211; have a good one!
&lt;/p&gt;
</description>
        <pubDate>Fri, 07 Aug 2009 18:07:05 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2009/08/windows-7-adjust-aero-peek-delay/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2009/08/windows-7-adjust-aero-peek-delay/</guid>
        
        <category>Aero Peek</category>
        
        <category>Aero Peek Delay</category>
        
        <category>DesktopLivePreviewHoverTime</category>
        
        <category>microsoft</category>
        
        <category>Software</category>
        
        <category>Windows 7</category>
        
        <category>Windows 7 Aero Peek</category>
        
        <category>Windows 7 RTM</category>
        
        
        <category>Windows</category>
        
      </item>
    
      <item>
        <title>iPhone virus &amp;#8211; avast!</title>
        <description>&lt;p style=&quot;text-align: justify;&quot;&gt;
  Soooo&amp;#8230; apparently Mac&amp;#8217;s &lt;a href=&quot;http://www.youtube.com/watch?v=M3Z386vXrt4&quot; target=&quot;_blank&quot;&gt;can&amp;#8217;t catch viruses&lt;/a&gt; but the iPhone certainly can. There is a flaw in the iPhone&amp;#8217;s software that allows any attacker to gain complete control over your phone. Flaw which Apple is aware of but still hasn&amp;#8217;t patched. The details are simple and as such I will cut to the chase: if you receive an SMS with a single square in it, by the love of God &amp;#8211; &lt;strong&gt;TURN OFF YOUR PHONE&lt;/strong&gt;.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  You have been warned, be safe, buy a Palm Pré.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  [via &lt;a href=&quot;http://www.engadget.com/2009/07/30/sms-vulnerability-on-iphone-to-be-revealed-today-still-isnt-pa/&quot; target=&quot;_blank&quot;&gt;Engadget&lt;/a&gt;]
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
&lt;/p&gt;
</description>
        <pubDate>Thu, 30 Jul 2009 19:22:03 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2009/07/iphone-virus-avast/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2009/07/iphone-virus-avast/</guid>
        
        <category>3GS</category>
        
        <category>iPhone</category>
        
        <category>iPhone 3.0</category>
        
        <category>iPhone 3G</category>
        
        <category>iPhone 3GS</category>
        
        <category>iPhone virus</category>
        
        <category>Software</category>
        
        <category>Technology</category>
        
        <category>virus</category>
        
        
        <category>iPhone</category>
        
      </item>
    
      <item>
        <title>iPhone OS 3.0 Spam Exploit</title>
        <description>&lt;p style=&quot;text-align: justify;&quot;&gt;
  The &lt;span style=&quot;text-decoration: line-through;&quot;&gt;good&lt;/span&gt; silly folks over at AppleInsider are &lt;a href=&quot;http://www.appleinsider.com/articles/09/07/22/hackers_break_iphone_push_messaging_blame_apple.html&quot; target=&quot;_blank&quot;&gt;reporting&lt;/a&gt; on a flaw that might open the iPhone OS 3.0 to mass spam. While there is some truth to their claims, they are also being unnecessarily alarmist and making false claims.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  The specifics of this exploit is that when you hacktivate an iPhone (i.e. activate it using Jailbreak), your iPhone will be using a private/public key pair to register with Apple&amp;#8217;s PNS (Push Notification Service) that already exists, in other words, it will be using a key that was not generated to your iPhone but that will be common to everyone who hacktivates their iPhone.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  As a result, when a notification comes addressed to that key, all of the iPhones in the world that have been hacktivated would in theory receive that message.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Still, at AppleInsider they claim:
&lt;/p&gt;

&lt;blockquote style=&quot;text-align: justify;&quot;&gt;
  &lt;p&gt;
    Destroying the application security layer of the iPhone does not itself automatically break PNS, but (&lt;strong&gt;when combined with an &amp;#8220;unofficial activation&amp;#8221; required to use it with unofficial service providers&lt;/strong&gt;) results in the system having no legitimate certificates to use in performing push notifications. Essentially, if the phone is not properly activated as intended through iTunes, the user&amp;#8217;s credentials for signing into Apple&amp;#8217;s PNS messaging servers (which are generated by the device itself in normal conditions) are broken along with the application security layer.
  &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Whoa, whoa, whoa, little Timmy! Let&amp;#8217;s debunk this, shall we?
&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;An unofficial activation (read, hacktivation) is &lt;strong&gt;NOT&lt;/strong&gt; required to use it with unofficial service providers. If an iPhone is already officially activated, the jailbreak will not reactivate it.&lt;/li&gt;
  &lt;li&gt;Jailbreaking does &lt;strong&gt;NOT&lt;/strong&gt; necessarily mean that you want to use your iPhone with unofficial service providers. Jailbreaking simply allows you to install third-party applications, such that aren’t installed through the regular AppStore.&lt;/li&gt;
  &lt;li&gt;You need to jailbreak to use the iPhone with an unofficial service provider, but jailbreaking does not have only that purpose. You can for instance jailbreak to run cracked games. Sure, it doesn’t make it any more legitimate or legal, but it is not the same thing.&lt;/li&gt;
&lt;/ol&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Finally, I must stress the notion: if you have an officially activated iPhone and if you jailbroke it afterwards, YOU ARE SAFE. Actually, I am not sure about the status of redsn0w right now, but when it was first released the push notifications would not even work for hacktivated iPhones! Still, if you would activate your iPhone normally and then jailbreak it, you would get your push notifications working. In a nutshell, if you have it officially activated, jailbreak will not put you at risk of being spammed.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  As for hacktivated iPhones&amp;#8230; well, tough luck guys. It seems like you are better off turning of the push notifications if you don&amp;#8217;t want to be spammed in a near future.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  [via &lt;a href=&quot;http://www.engadget.com/2009/07/23/iphone-3-0s-broken-push-messaging-caused-by-unlockers-dirty/&quot; target=&quot;_blank&quot;&gt;Engadget&lt;/a&gt;]
&lt;/p&gt;
</description>
        <pubDate>Thu, 23 Jul 2009 14:11:34 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2009/07/iphone-os-3-0-spam-exploit/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2009/07/iphone-os-3-0-spam-exploit/</guid>
        
        <category>Apple</category>
        
        <category>Hacktivation</category>
        
        <category>iPhone 3.0</category>
        
        <category>iPhone 3.0 Exploit</category>
        
        <category>iPhone Exploit</category>
        
        <category>iPhone Flaw</category>
        
        <category>iPhone Hacktivation</category>
        
        <category>iPhone OS 3.0</category>
        
        <category>iPhone Push Notification</category>
        
        <category>Push Notification</category>
        
        
        <category>iPhone</category>
        
      </item>
    
      <item>
        <title>Windows 7 RTM&amp;#8217;ed</title>
        <description>&lt;p&gt;Yes, that’s correct. Windows 7 was officially released to manufacturing and this version should be available over the course of the next few days.&lt;/p&gt;

&lt;p&gt;Here’s the comemoration video the guy at Microsoft made to celebrate the launch:&lt;/p&gt;

&lt;p&gt;For the whole release schedule, hit up the &lt;a href=&quot;http://windowsteamblog.com/blogs/windows7/archive/2009/07/21/when-will-you-get-windows-7-rtm.aspx&quot; target=&quot;_blank&quot;&gt;Windows Team Blog&lt;/a&gt;.&lt;/p&gt;
</description>
        <pubDate>Thu, 23 Jul 2009 09:10:22 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2009/07/windows-7-rtmed/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2009/07/windows-7-rtmed/</guid>
        
        <category>microsoft</category>
        
        <category>Microsoft Windows 7</category>
        
        <category>Release To Manufacturing</category>
        
        <category>Software</category>
        
        <category>Windows 7</category>
        
        <category>Windows 7 7600</category>
        
        <category>Windows 7 RTM</category>
        
        <category>Windows Seven</category>
        
        
        <category>Windows</category>
        
      </item>
    
      <item>
        <title>Imageshack Hacked? &amp;#8211; Yes!</title>
        <description>&lt;p style=&quot;text-align: justify;&quot;&gt;
  The famous website for hosting images, imageshack.us, has just recently been hacked with the manifesto below. Our &lt;a href=&quot;http://mashable.com/2009/07/10/imageshack-hacked/&quot; target=&quot;_blank&quot;&gt;sources&lt;/a&gt; say all images were replaced with this manifesto, but according to the manifesto itself «no images were harmed in the making of this&amp;#8230; image». Let&amp;#8217;s hope for the users&amp;#8217; sake that this is indeed true.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  It remains to be seen what does Imageshack actually have to do with the topic of this manifesto&amp;#8230;
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;a href=&quot;https://www.tiagoespinha.net/wp-content/uploads/2009/07/imageshackhack.gif&quot; rel=&quot;lightbox[246]&quot; title=&quot;imageshackhack&quot;&gt;&lt;img class=&quot;alignnone size-full wp-image-247&quot; title=&quot;imageshackhack&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2009/07/imageshackhack.gif&quot; alt=&quot;imageshackhack&quot; width=&quot;600&quot; height=&quot;780&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
</description>
        <pubDate>Sat, 11 Jul 2009 08:31:42 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2009/07/imageshack-hacked-yes/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2009/07/imageshack-hacked-yes/</guid>
        
        <category>image shack hacked</category>
        
        <category>Imageshack</category>
        
        <category>Imageshack hacked</category>
        
        <category>Imageshack.us</category>
        
        <category>Internet</category>
        
        <category>Technology</category>
        
        
        <category>Technology</category>
        
      </item>
    
      <item>
        <title>Google Chrome OS &amp;#8211; First Screenshots! [UPDATE]</title>
        <description>&lt;p style=&quot;text-align: justify;&quot;&gt;
  Here they are! The (supposed) first screenshots of what is to become Google&amp;#8217;s Operating System. The credibility and plausibility of those screenshots is actually flaky, but it&amp;#8217;s the best we have at the moment. Whether they are photoshopped or the real thing, time will tell.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  The blog the images were taken from: &lt;a href=&quot;http://chromeosleak.wordpress.com/&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  [via &lt;a href=&quot;http://www.engadget.com/2009/07/09/first-google-chrome-os-screenshots-leaked/&quot; target=&quot;_blank&quot;&gt;Engadget&lt;/a&gt;]
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;strong&gt;Update&lt;/strong&gt;: The blog is a lie! Like I suspected, the leaked screenshots are actually fake. It didn&amp;#8217;t look so bad though!
&lt;/p&gt;

&lt;div id=&quot;gallery-2&quot; class=&quot;gallery galleryid-237 gallery-columns-3 gallery-size-thumbnail&quot;&gt;
  &lt;dl class=&quot;gallery-item&quot;&gt;
    &lt;dt class=&quot;gallery-icon landscape&quot;&gt;
      &lt;a href=&quot;https://www.tiagoespinha.net/2009/07/google-chrome-os-first-screenshots/file0042/&quot;&gt;&lt;img width=&quot;150&quot; height=&quot;112&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2009/07/file0042.jpg&quot; class=&quot;attachment-thumbnail size-thumbnail&quot; alt=&quot;Image1&quot; /&gt;&lt;/a&gt;
    &lt;/dt&gt;
  &lt;/dl&gt;
  
  &lt;dl class=&quot;gallery-item&quot;&gt;
    &lt;dt class=&quot;gallery-icon landscape&quot;&gt;
      &lt;a href=&quot;https://www.tiagoespinha.net/2009/07/google-chrome-os-first-screenshots/file0043/&quot;&gt;&lt;img width=&quot;150&quot; height=&quot;112&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2009/07/file0043.jpg&quot; class=&quot;attachment-thumbnail size-thumbnail&quot; alt=&quot;file0043&quot; /&gt;&lt;/a&gt;
    &lt;/dt&gt;
  &lt;/dl&gt;
  
  &lt;dl class=&quot;gallery-item&quot;&gt;
    &lt;dt class=&quot;gallery-icon landscape&quot;&gt;
      &lt;a href=&quot;https://www.tiagoespinha.net/2009/07/google-chrome-os-first-screenshots/file0044/&quot;&gt;&lt;img width=&quot;150&quot; height=&quot;112&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2009/07/file0044.jpg&quot; class=&quot;attachment-thumbnail size-thumbnail&quot; alt=&quot;file0044&quot; /&gt;&lt;/a&gt;
    &lt;/dt&gt;
  &lt;/dl&gt;
  
  &lt;br style=&quot;clear: both&quot; /&gt;
  
  &lt;dl class=&quot;gallery-item&quot;&gt;
    &lt;dt class=&quot;gallery-icon landscape&quot;&gt;
      &lt;a href=&quot;https://www.tiagoespinha.net/2009/07/google-chrome-os-first-screenshots/file0045/&quot;&gt;&lt;img width=&quot;150&quot; height=&quot;112&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2009/07/file0045.jpg&quot; class=&quot;attachment-thumbnail size-thumbnail&quot; alt=&quot;file0045&quot; /&gt;&lt;/a&gt;
    &lt;/dt&gt;
  &lt;/dl&gt;
  
  &lt;br style=&quot;clear: both&quot; /&gt;
&lt;/div&gt;
</description>
        <pubDate>Thu, 09 Jul 2009 11:53:43 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2009/07/google-chrome-os-first-screenshots/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2009/07/google-chrome-os-first-screenshots/</guid>
        
        <category>Google</category>
        
        <category>Google Chrome</category>
        
        <category>Google Chrome OS</category>
        
        <category>Google Chrome OS Screenshots</category>
        
        <category>Google OS</category>
        
        <category>Google OS Screenshots</category>
        
        <category>Google Screenshots</category>
        
        <category>Software</category>
        
        <category>Technology</category>
        
        
        <category>Software</category>
        
      </item>
    
      <item>
        <title>Google Chrome OS &amp;#8211; Google&amp;#8217;s Bing Retaliation</title>
        <description>&lt;p style=&quot;text-align: justify;&quot;&gt;
  Just a few hours ago Google has announced it will be entering the operating system market. The contestant? Google Chrome OS.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Google&amp;#8217;s goals seem to be speed and simplicity, although it remains unclear where they want to go with this. They go as far as stating that if you spend most of your time on the web, then Chrome OS is for you but this is all still too blurry. Will this be an actual operating system that lives outside the browser? Or is this some sort of mock-up of an operating system that you get in your browser? If it is the first, then I have a hard time finding true utility for it &amp;#8211; a computer that can only browse the net? *Skepticism alert*
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  The time frame? Second half of 2010. Hit up the links below for more info:
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;a href=&quot;http://news.cnet.com/8301-17939_109-10281744-2.html&quot; target=&quot;_blank&quot;&gt;CNET&lt;/a&gt;
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;a href=&quot;http://www.pcworld.com/article/168028/google_announces_chrome_os.html&quot; target=&quot;_blank&quot;&gt;PCWORLD&lt;/a&gt;
&lt;/p&gt;
</description>
        <pubDate>Wed, 08 Jul 2009 09:19:42 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2009/07/google-chrome-os-googles-bing-retaliation/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2009/07/google-chrome-os-googles-bing-retaliation/</guid>
        
        <category>Chrome OS</category>
        
        <category>Google</category>
        
        <category>Google Chrome</category>
        
        <category>Google Chrome OS</category>
        
        <category>Google Operating System</category>
        
        <category>Google OS</category>
        
        <category>Software</category>
        
        <category>Technology</category>
        
        
        <category>Software</category>
        
      </item>
    
      <item>
        <title>Musical Tesla Coil Plans [Updated&amp;#8230;]</title>
        <description>&lt;p&gt;A great deal of people seem to land in my blog searching for the plans for building a Musical Tesla Coil. Therefore, I decided to do some researching myself and I am posting here my findings. I hope you find them useful 🙂&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.tiagoespinha.net/wp-content/uploads/2009/07/259168-Tesla-Coil-Construction-Plans.pdf&quot;&gt;Tesla Construction Plans&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.uoguelph.ca/~antoon/circ/hv/ss-tesla/ss-tesla.html&quot; target=&quot;_blank&quot;&gt;Very Detailed Technical Plans&lt;/a&gt; [Broken]&lt;/p&gt;

&lt;p&gt;Till the next time!&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Update: So apparently I still get loads of hits from people trying to get their hands on the schematics for Tesla Coils. I&amp;#8217;m afraid I can&amp;#8217;t help you much on &lt;strong&gt;musical&lt;/strong&gt; Tesla coils, but here&amp;#8217;s a great website that describes all that you need to know to build just a funky Tesla coil: &lt;a href=&quot;http://www.alansharp.co.uk/homepage.htm&quot;&gt;http://www.alansharp.co.uk/homepage.htm&lt;/a&gt; &amp;#8211; now, go crazy! If you manage to build one, be sure to come back here and post an image. If you post one on the comments zone, I&amp;#8217;ll incorporate it into the post 🙂
&lt;/p&gt;
</description>
        <pubDate>Tue, 07 Jul 2009 12:28:37 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2009/07/musical-tesla-coil-plans/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2009/07/musical-tesla-coil-plans/</guid>
        
        <category>Musical Tesla Coil</category>
        
        <category>Solid State</category>
        
        <category>Technology</category>
        
        <category>Tesla Coil</category>
        
        <category>Tesla Coils</category>
        
        
        <category>Technology</category>
        
      </item>
    
      <item>
        <title>Staples Leiria &amp;#8211; July 6th 2009</title>
        <description>&lt;p style=&quot;text-align: justify;&quot;&gt;
  Below is a shot taken in Leiria, Portugal at the doors of the chain retailer Staples. The crowd patiently awaits for the doors to open for a stock-off sale. Later on people ended up losing their patience and forced the entry; the police was called to the spot to help with the crowd control.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  There are reports of people literally camping the store, having parked there at 22h of the previous day and slept there during the night. Amazing.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;a href=&quot;https://www.tiagoespinha.net/wp-content/uploads/2009/07/IMG_0016.JPG&quot; rel=&quot;lightbox[221]&quot; title=&quot;Staples 09&quot;&gt;&lt;img class=&quot;alignnone size-full wp-image-224&quot; title=&quot;Staples 09&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2009/07/IMG_0016.JPG&quot; alt=&quot;Staples 09&quot; width=&quot;576&quot; height=&quot;432&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
&lt;/p&gt;
</description>
        <pubDate>Tue, 07 Jul 2009 10:25:51 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2009/07/staples-leiria-july-6th-2009/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2009/07/staples-leiria-july-6th-2009/</guid>
        
        <category>People</category>
        
        <category>Society</category>
        
        <category>Staples</category>
        
        <category>Stock-off</category>
        
        
        <category>Society</category>
        
      </item>
    
      <item>
        <title>The end of the Ubuntu vs. Windows war!</title>
        <description>&lt;p style=&quot;text-align: justify;&quot;&gt;
  YAY!
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Christopher Dawnson over at &lt;a href=&quot;http://education.zdnet.com/?p=2770&amp;amp;tag=nl.e550&quot; target=&quot;_blank&quot;&gt;ZDNet&lt;/a&gt; has announced the end of the Ubuntu vs. Windows war, the world is safe again!
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Till the next time!
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  WAIT! Hold it!
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  What the heck?! Wasn&amp;#8217;t ZDNet supposed to be a reliable source of information regarding technology? So what are these shenanigans about his 17 year old saying that they&amp;#8217;re the same? I&amp;#8217;ll tell you what it is: it is the most bold statement I&amp;#8217;ve heard all year, and also the most idiotic one. So just because a 17 year old says that they&amp;#8217;re the same, 6 billion people will just agree and this fact will just be set in stone? Bullshit.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Windows and Linux are different; it&amp;#8217;s about time people realize that. I absolutely need both so is this proof enough that they are ultimately different?
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Christopher says: &amp;#8220;Their underlying architectures are quite a bit different, Gnome looks different than the 7 UI, etc.&amp;#8221;. The underlying architectures are quite a bit different, Gnome looks different than 7 does, but apart from that, which by the way is everything that effing matters in an Operating System, they&amp;#8217;re pretty much the same.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  I have a Hyundai Getz, my neighbour has a Ferrari, but apart from the engine and the chassis they&amp;#8217;re pretty much the same. They both have wheels! A whole set of four! So they must be the same&amp;#8230;
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Come on guys&amp;#8230; get serious.
&lt;/p&gt;
</description>
        <pubDate>Tue, 07 Jul 2009 10:08:51 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2009/07/the-end-of-the-ubuntu-vs-windows-war/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2009/07/the-end-of-the-ubuntu-vs-windows-war/</guid>
        
        <category>Software</category>
        
        <category>Technology</category>
        
        <category>Ubuntu</category>
        
        <category>Windows 7</category>
        
        <category>ZDNet</category>
        
        
        <category>Software</category>
        
      </item>
    
      <item>
        <title>iPhone 3.0 Jailbreak and ultrasn0w? It is out!</title>
        <description>&lt;p style=&quot;text-align: justify;&quot;&gt;
  It might be old news for some, but I am sure that not everyone is aware of this yet.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  The good folks at the &lt;a href=&quot;http://blog.iphone-dev.org/&quot; target=&quot;_blank&quot;&gt;iPhone Dev Team&lt;/a&gt; did it again and after some days that just seemed too long, they released the new tool called redsn0w. This tool is meant to jailbreak the iPhone 3G &lt;strong&gt;only&lt;/strong&gt;, and only with the firmware 3.0 &amp;#8211; jailbreak for the 3GS still hasn&amp;#8217;t been released but since the flaw seems to exist in the 3G, it should only be a matter of days (and of the Dev Team getting their hands on a 3GS &amp;#8211; feel free to &lt;a href=&quot;http://widget.chipin.com/widget/id/0c9fb4b8bbe38374&quot; target=&quot;_blank&quot;&gt;chip in&lt;/a&gt;) until the jailbreak is released.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  The process is pretty simple, just update to 3.0 normally through iTunes and when that&amp;#8217;s done, search for the correct IPSW in the following folder (if you&amp;#8217;re using Vista or 7):&lt;br /&gt; C:\Users\&lt;username&gt;\AppData\Roaming\Apple Computer\iTunes\iPhone Software Updates&lt;br /&gt; (For XP, search around the Application Data folders under Documents and Settings)
&amp;lt;/p&amp;gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  When you have this file, just feed it to redsn0w and follow the steps. In under 5 minutes you should be running a jailbroken 3.0.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  After this is done, if you also want to operator-unlock your phone, you&amp;#8217;ll need ultrasn0w. This is the replacement for the long-lived yellowsn0w. In case you weren&amp;#8217;t aware of this fact, the new baseband has a hole again, which allows for it to be hacked. This way, we can all use different operator SIM cards without a problem.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  To install ultrasn0w, you simply need to add the repo http://repo666.ultrasn0w.com and then search and install the application ultrasn0w on Cydia. Reboot your phone, and you&amp;#8217;re done. It really is THAT easy!
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  So what are you waiting for? Go for it!
&lt;/p&gt;
&lt;/username&gt;&lt;/p&gt;
</description>
        <pubDate>Wed, 24 Jun 2009 09:37:15 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2009/06/iphone-30-jailbreak-and-ultrasn0w-it-is-out/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2009/06/iphone-30-jailbreak-and-ultrasn0w-it-is-out/</guid>
        
        <category>3GS</category>
        
        <category>Cydia</category>
        
        <category>iPhone</category>
        
        <category>iPhone 3.0</category>
        
        <category>iPhone 3G</category>
        
        <category>iPhone 3GS</category>
        
        <category>Jailbreak</category>
        
        <category>redsn0w</category>
        
        <category>Software</category>
        
        <category>Technology</category>
        
        <category>ultrasn0w</category>
        
        
        <category>Software</category>
        
      </item>
    
      <item>
        <title>Was Windows Vista a mistake? Not really!</title>
        <description>&lt;p style=&quot;text-align: justify;&quot;&gt;
  With the advent of Microsoft&amp;#8217;s latest operating system, the Windows 7, many people have come to state that Windows 7 is Windows Vista &lt;a href=&quot;http://jmm.aaa.net.au/articles/22533.htm&quot; target=&quot;_blank&quot;&gt;done&lt;/a&gt; &lt;a href=&quot;http://www.smh.com.au/news/technology/biztech/windows-7-its-vista-done-right/2009/05/04/1241289099764.html&quot; target=&quot;_blank&quot;&gt;right&lt;/a&gt;. Well, excuse me tech whizzes but as an IT professional myself, I beg to differ.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Windows Vista was a massive stepping stone in Microsoft&amp;#8217;s history. It was the first upgrade from the ever so loved Windows XP, that admittedly had its flaws at birth but it grew to become perhaps the most stable operating system that Microsoft had built until then. It is lightweight and to prove that we have the netbook market share that is dominated by Microsoft.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Now, we have to be analytic. What did Vista bring to the table when compared to XP? In a very brief and sketchy approach, it brought cleanliness to the user folders (no one really liked the spaces in &amp;#8216;Documents and Settings&amp;#8217;), it brought UAC that albeit poorly-loved, it brought with it a great layer of security, it brought some driver modifications including a redesigned sound-stack and these last two put together with the bloated memory usage, made Vista Microsoft&amp;#8217;s bastard child.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Well, when you look at it closely, pretty much every Vista driver will work on Windows 7, including the soundcard drivers. UAC is also part of Windows 7 and has been partly redesigned so that it isn&amp;#8217;t so naggy. Still, my bottom line is that when switching from XP, Microsoft was always going to get complaints. When you add security, people will complain because the system is more restrictive. When you add features that change the way people interface with the computer, people will complain because we have an inertial nature and are typically against change.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  However, now that Vista was Microsoft&amp;#8217;s escape goat for all the changes that simply had to be made, Windows 7 can come in its shinning armour and save the day. Because Windows 7 is so much better than Vista, even though it&amp;#8217;s actually Vista, just lighter.
&lt;/p&gt;
</description>
        <pubDate>Mon, 08 Jun 2009 17:38:10 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2009/06/was-windows-vista-a-mistake-not-really/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2009/06/was-windows-vista-a-mistake-not-really/</guid>
        
        <category>microsoft</category>
        
        <category>Seven</category>
        
        <category>Software</category>
        
        <category>Technology</category>
        
        <category>Vista</category>
        
        <category>Windows</category>
        
        <category>Windows 7</category>
        
        <category>Windows Vista</category>
        
        
        <category>microsoft</category>
        
        <category>Windows</category>
        
      </item>
    
      <item>
        <title>Google Summer of Code &amp;#8211; Payments Rolling In</title>
        <description>&lt;p&gt;Yep, the title says it all. Today I have received my shiny new VISA from Citibank with the initial $505 loaded on it. The other kewl stuff in the envelope included a neat, Google-branded, moleskin and two GSoC 2009 stickers. One’s going on my laptop, if I can gut it!&lt;/p&gt;

&lt;p&gt;Well, I’ll leave you with some photos now!&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.tiagoespinha.net/wp-content/uploads/2009/05/dsc02428.jpg&quot; rel=&quot;lightbox[202]&quot; title=&quot;The moleskin (thank goodness mine isn&apos;t pink!)&quot;&gt;&lt;img class=&quot;alignnone size-thumbnail wp-image-203&quot; title=&quot;The moleskin (thank goodness mine isn&apos;t pink!)&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2009/05/dsc02428-150x150.jpg&quot; alt=&quot;The moleskin (thank goodness mine isn&apos;t pink!)&quot; width=&quot;150&quot; height=&quot;150&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.tiagoespinha.net/wp-content/uploads/2009/05/dsc02427.jpg&quot; rel=&quot;lightbox[202]&quot; title=&quot;The sticker&quot;&gt;&lt;img class=&quot;alignnone size-thumbnail wp-image-205&quot; title=&quot;The sticker&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2009/05/dsc02427-150x150.jpg&quot; alt=&quot;The sticker&quot; width=&quot;150&quot; height=&quot;150&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.tiagoespinha.net/wp-content/uploads/2009/05/dsc02430.jpg&quot; rel=&quot;lightbox[202]&quot; title=&quot;Last but not least, my VISA&quot;&gt;&lt;img class=&quot;alignnone size-thumbnail wp-image-206&quot; title=&quot;Last but not least, my VISA&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2009/05/dsc02430-150x150.jpg&quot; alt=&quot;Last but not least, my VISA&quot; width=&quot;150&quot; height=&quot;150&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>Thu, 28 May 2009 14:02:04 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2009/05/google-summer-of-code-payments-rolling-in/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2009/05/google-summer-of-code-payments-rolling-in/</guid>
        
        <category>2009</category>
        
        <category>Google</category>
        
        <category>Google 2009</category>
        
        <category>Google Summer of Code</category>
        
        <category>Google Summer of Code 2009</category>
        
        <category>GSoC</category>
        
        <category>GSoC 2009</category>
        
        
        <category>my life</category>
        
      </item>
    
      <item>
        <title>The Mozilla Mystery</title>
        <description>&lt;p&gt;Howdy readers,&lt;/p&gt;

&lt;p&gt;Today I bring you one of the long time mysteries for me. Why in heavens does Mozilla insist on making different menus for Firefox and Thunderbird depending on whether you’re using it on Linux or Windows? Seriously, I just can’t figure out the reason for this… the Options menu sits in the Tools toolbar in Windows, whereas in the Linux version, it goes under Edit. But WHY?!&lt;/p&gt;

&lt;p&gt;‘Till the next time!&lt;/p&gt;
</description>
        <pubDate>Mon, 25 May 2009 21:04:22 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2009/05/the-mozilla-mystery/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2009/05/the-mozilla-mystery/</guid>
        
        <category>Firefox</category>
        
        <category>Mozilla</category>
        
        <category>Software</category>
        
        <category>Technology</category>
        
        <category>Thunderbird</category>
        
        
        <category>Software</category>
        
      </item>
    
      <item>
        <title>Office 2007 SP2 reduces interoperability &amp;#8211; tough luck?</title>
        <description>&lt;p&gt;Jeremy Allison over at ZDNet has just posted an &lt;a href=&quot;http://blogs.zdnet.com/BTL/?p=18317&amp;amp;tag=nl.e539&quot; target=&quot;_blank&quot;&gt;article&lt;/a&gt; where in a nutshell he states that Microsoft broke the interoperability of the ODF format between Office 2007 and other implementations of this format. According to this gentleman, the guys over at Microsoft are mean little bastards because &lt;strong&gt;they implemented the ODF standard&lt;/strong&gt; verbatim. Whoa, whoa, whoa little Timmy!&lt;/p&gt;

&lt;p&gt;Last I checked, there was a war going on towards Microsoft because they were mean chauvinistic bastards who insisted on not making Internet Explorer more standards compliant, because the standards were the way to go and anything other than the standards just breaks pages on browsers that implement the standard. I totally agree with this point, but by the same measure, I have to disagree with this ODF quarrel.&lt;/p&gt;

&lt;p&gt;With SP2, Microsoft implemented the ODF specification to its fullest. Then there are other implementations like OpenOffice’s that have additions to the specification, but that aren’t part of the standard! Yet, it is Microsoft that people come out to the streets to criticize, and not the people who engineered a poorly designed standard. Please, don’t take me wrong. I am also against OOXML, but that doesn’t mean that the alternatives are perfect and perhaps Microsoft is just proving a point amongst narrow-minded people who don’t care for a little reasoning.&lt;/p&gt;

&lt;p&gt;Want spreadsheets to properly support formulas in ODF? Make it part of the friggin’ standard! Don’t expect Microsoft to deviate from the standard for interop’s sake, especially now when you have before criticized the company for not being standards-compliant.&lt;/p&gt;

&lt;p&gt;My bottom-line is: who is to decide whether a standard should be implemented in a strict manner or not? And to which extent should interop efforts be made? All in all, if Microsoft designs interoperability towards OpenOffice, it might just break things with another Office Suite that decided to implement things differently.&lt;/p&gt;
</description>
        <pubDate>Wed, 20 May 2009 17:13:20 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2009/05/office-2007-sp2-reduces-interoperability-tough-luck/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2009/05/office-2007-sp2-reduces-interoperability-tough-luck/</guid>
        
        <category>microsoft</category>
        
        <category>ODF</category>
        
        <category>Office</category>
        
        <category>Office 2007</category>
        
        <category>OOXML</category>
        
        <category>Software</category>
        
        <category>Technology</category>
        
        
        <category>Software</category>
        
      </item>
    
      <item>
        <title>The First Flaw in Windows 7</title>
        <description>&lt;p&gt;Hold your horses, this isn’t a flaw per se. There isn’t a massive hole in Windows 7 that allows the execution of malicious code. Instead, there’s a legacy feature that has been around ever since Windows 98 (maybe even 95, but that I do not know for sure) that is used by virus writers to fool users into executing their viruses.&lt;/p&gt;

&lt;p&gt;The feature I am talking about is the ability to hide the extension for known file types. This comes enabled by default on XP and Vista and it was not addressed in Windows 7. Basically, as &lt;a href=&quot;http://blogs.zdnet.com/hardware/?p=4317&amp;amp;tag=nl.e550&quot; target=&quot;_blank&quot;&gt;Adrian over at ZDNet&lt;/a&gt; reports, with this feature enabled, a file with ‘double extension’ can easily be fooled for its fake extention. For example, a file named Report.txt.exe will automatically have the ‘.exe’ extension hidden, and to the eyes of the less computer-savvy it can easily be mistaken for an innocent Report.txt file. Moreso when the creator of the virus is careful enough to add an innocent notepad icon to the malevolent application.&lt;/p&gt;

&lt;p&gt;To be perfectly honest, I agree with Adrian. This is a feature that I disable right after I install Windows. More often than not I find myself having to change the extension of a file, and it’s impossible to do so with this feature enabled and without resorting to the command line.&lt;/p&gt;

&lt;p&gt;This feature is dangerous and it has been the gateway for many viruses to spread. Adrian also suggests adding some sort of overlay to the icons of executable files that aren’t digitally signed – this is an incredibly good idea. Maybe something glarey as the icons of running applications on the new Windows 7 start bar. If properly done, this could be flashey and would cause a good impression on end-users, both visually and safety-wise. Personally, I would remove the feature altogether and leave it off – and please, without the possibility of working around it on the registry – but that’s just my two pennies worth of opinion.&lt;/p&gt;

&lt;p&gt;Have a good one.&lt;/p&gt;
</description>
        <pubDate>Wed, 06 May 2009 22:14:31 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2009/05/the-first-flaw-in-windows-7/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2009/05/the-first-flaw-in-windows-7/</guid>
        
        <category>flaw</category>
        
        <category>microsoft</category>
        
        <category>Release Candidate</category>
        
        <category>Software</category>
        
        <category>Technology</category>
        
        <category>Windows 7</category>
        
        <category>Windows 7 flaw</category>
        
        <category>Windows 7 RC</category>
        
        
        <category>Uncategorized</category>
        
      </item>
    
      <item>
        <title>Ethical Hacking</title>
        <description>&lt;p&gt;‘Times are a changing’ – nowadays more than ever this is true. Companies and individuals rely more and more on the Internet and let’s be honest: the Internet is not a safe place, not by a slim chance. I’m not even talking about viruses, which on their own are a pretty big threat. What I am going on about are hackers. You know, the evil guys who want all your money and your credit card numbers.&lt;/p&gt;

&lt;p&gt;Don’t take it personally, no hacker has a grudge especially against you or your company, but unless you take preemptive measures to be on the front line, then you are at risk. There is a chance that you are at risk right now. This is the sort of thing where you cannot possibly think “this only happens to other people” – well, think again, it happened to electrical power plants in the US.&lt;/p&gt;

&lt;p&gt;Are you convinced that you need to do something about it yet? I hope you are.&lt;/p&gt;

&lt;p&gt;So what’s the whole idea you ask? Well, the idea is being ahead of the hackers, it is thinking like an hacker so that you can be preemptive and patch the holes in your organization. Do you know how store-owners set up motion sensors near windows that can easily be broken? The idea here is just the same.&lt;/p&gt;

&lt;p&gt;This concept is called ethical hacking. You are taught on the ways, tricks and subterfuges of hackers so that you can have a different insight on your company. Believe it or not, but the biggest flaw in computer systems is actually us, the users. We are easily duped and deceived by people pretending to be who they aren’t, and this has reached astronomical levels. The most blatant case nowadays is when you get an e-mail that pretends to be a legitimate e-mail from your bank, from a work-mate or simply people who would be innocently sending you pictures.&lt;/p&gt;

&lt;p&gt;Well my fellow Internauts, no enough care is much care these days. The &lt;a href=&quot;http://iclass.eccouncil.org/&quot;&gt;EC-Council&lt;/a&gt; provides you with the security training that you need not only to help yourself and your company, but also to help other companies. This of course is an investment that can get a return flowing in so in the end, it is all benefits! This isn’t all; if you are trained in &lt;a href=&quot;http://socialspark.com/metrics/click/post?slot_id=36484&amp;#038;url=http%3A%2F%2Furlbrief.com%2F98d904&quot; rel=&quot;nofollow&quot;&gt;IT Security&lt;/a&gt;, your job opportunities simply tenfold. Is that not what everyone wants at a time of recession and crisis?&lt;/p&gt;

&lt;p&gt;The iClass by the EC-Council has the following categories:&lt;/p&gt;

&lt;p&gt;-Security Fundamentals&lt;/p&gt;

&lt;p&gt;-Ethical Hacking &lt;/p&gt;

&lt;p&gt;-Penetration Testing &lt;/p&gt;

&lt;p&gt;-Computer Forensics  &lt;/p&gt;

&lt;p&gt;-Disaster Recovery &lt;/p&gt;

&lt;p&gt;-Secure Programming&lt;/p&gt;

&lt;p&gt;So whether you are a newbie (hey, there’s no shame about that!) and you need the fundamentals, or whether you fancy a job at a crime lab doing scientific forensics for a living, the iClass covers it all. You just take your pick!&lt;/p&gt;

&lt;p&gt;If you are interested, and here’s hoping that you won’t miss this great opportunity, then here are some links that will help you on the EC-Council site.&lt;/p&gt;

&lt;p&gt;Program Site:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://iclass.eccouncil.org/&quot;&gt;http://iclass.eccouncil.org/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Different Certifications:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://iclass.eccouncil.org/index.php?option=com_content&amp;amp;view=article&amp;amp;id=68&amp;amp;Itemid=91&quot;&gt;http://iclass.eccouncil.org/index.php?option=com_content&amp;amp;view=article&amp;amp;id=68&amp;amp;Itemid=91&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;The CEH (Certified Ethical Hacker) :&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.eccouncil.org/ceh.htm&quot;&gt;http://www.eccouncil.org/ceh.htm&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Certification Center:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.isc2.org/&quot;&gt;http://www.isc2.org/&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;CompTIA:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.comptia.org/&quot;&gt;http://www.comptia.org/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://socialspark.com/metrics/click/post?slot_id=36484&amp;#038;url=http%3A%2F%2Furlbrief.com%2F98d904&quot; rel=&quot;nofollow&quot;&gt;IT Security&lt;/a&gt;&lt;/p&gt;

&lt;map name=&quot;map2697&quot;&gt;
  &lt;area href=&quot;http://socialspark.com/metrics/click/disclosure?slot_id=36484&amp;#038;url=http%3A%2F%2Furlbrief.com%2F98d904&quot; shape=&quot;rect&quot; coords=&quot;0,0,206,45&quot; rel=&quot;nofollow&quot; /&gt;
  
  &lt;area href=&quot;http://socialspark.com/code_of_ethics&quot; shape=&quot;rect&quot; coords=&quot;207,0,225,45&quot; rel=&quot;nofollow&quot; /&gt;
&lt;/map&gt;

&lt;p&gt;&lt;img alt=&quot;Post?slot_id=36484&amp;#038;url=http%3a%2f%2fsocialspark&quot; border=&quot;0&quot; src=&quot;http://socialspark.com/metrics/view/post?slot_id=36484&amp;#038;url=http%3A%2F%2Fsocialspark.com%2Fimages%2Fdisclosure_badges%2Fdisclosure_badge_blue.png&quot; style=&quot;border:0&quot; usemap=&quot;#map2697&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://ad.doubleclick.net/ad/N5654.139913.9527099420421/B3455931;sz=1x1&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot; /&gt;&lt;/p&gt;
</description>
        <pubDate>Mon, 27 Apr 2009 20:38:33 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2009/04/ethical-hacking/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2009/04/ethical-hacking/</guid>
        
        <category>#CEH</category>
        
        <category>Information Technology</category>
        
        <category>IT</category>
        
        <category>IT Security</category>
        
        <category>Security</category>
        
        <category>Technology</category>
        
        
        <category>Technology</category>
        
      </item>
    
      <item>
        <title>LG KM900 &amp;#8211; You&amp;#8217;re doing it wrong</title>
        <description>&lt;p&gt;As the newest &lt;a href=&quot;http://uk.lge.com/products/model/detail/mobilephones_lgarena(km900).jhtml&quot;&gt;LG KM900&lt;/a&gt; is released, I can’t help the thought: LG, you’re doing it wrong.&lt;/p&gt;

&lt;p&gt;Honestly, I do not feel motivated to write about this phone simply because it is not aimed at mainstream; whoever tells me otherwise is clearly missing on the whole point. Put it this way, a phone isn’t really just a phone anymore these days. The market requires customisable and flexible phones, such phones that can be expanded. What is the point of having a next-gen, touch-screen phone if afterwards you can’t extend it with third-party applications and functionality?&lt;/p&gt;

&lt;p&gt;In my humble opinion, it is safe to say that nowadays, a phone without:&lt;/p&gt;

&lt;p&gt;1) Windows Mobile&lt;/p&gt;

&lt;p&gt;or&lt;/p&gt;

&lt;p&gt;2) Symbian OS&lt;/p&gt;

&lt;p&gt;or&lt;/p&gt;

&lt;p&gt;3) iPhone OS&lt;/p&gt;

&lt;p&gt;is just doomed to extinction and failure. I know I wouldn’t buy anything outside that. (I am a proud owner of an iPhone 3G by the way)&lt;/p&gt;
</description>
        <pubDate>Sun, 26 Apr 2009 23:46:43 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2009/04/lg-km900-youre-doing-it-wrong/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2009/04/lg-km900-youre-doing-it-wrong/</guid>
        
        <category>KM900</category>
        
        <category>LG</category>
        
        <category>LG KM900</category>
        
        <category>LG KM900 Release Date</category>
        
        <category>Phones</category>
        
        <category>Technology</category>
        
        
        <category>Uncategorized</category>
        
      </item>
    
      <item>
        <title>Google Summer of Code 2009 &amp;#8211; Part 2</title>
        <description>&lt;p&gt;Waaaaaaait for it, waaaaait for it……. YES PEOPLE! I was accepted for Google Summer of Code 2009 😀&lt;/p&gt;

&lt;p&gt;This will be my smallest post ever but that is all I have to say 🙂 I am friggin’ ecstatic!&lt;/p&gt;
</description>
        <pubDate>Mon, 20 Apr 2009 21:58:59 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2009/04/google-summer-of-code-2009-part-2/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2009/04/google-summer-of-code-2009-part-2/</guid>
        
        <category>Google</category>
        
        <category>Google Summer of Code</category>
        
        <category>GSoC 2009</category>
        
        <category>Summer of Code</category>
        
        
        <category>Uncategorized</category>
        
      </item>
    
      <item>
        <title>Windows 7 RC out &amp;#8211; maybe</title>
        <description>&lt;p&gt;Alright ladies and gentlemen, the announcement is out: the first (and hopefully only) Release Candidate of the newest, mind blowing, operating system from the folks at Redmond is out. Or is it really? There’s a Microsoft Partners’ &lt;a href=&quot;https://partner.microsoft.com/US/40084742&quot; target=&quot;_blank&quot;&gt;page&lt;/a&gt; announcing the event and I say that that’s as reliable as it gets.&lt;/p&gt;

&lt;p&gt;According to said page, the RC should be available right now for MSDN and TechNet subscribers but well… it ain’t. The same page also announces that a global (and I guess, public) release will be done on May 5th which is actually pretty close in time.&lt;/p&gt;

&lt;p&gt;My guess is that we just sit and wait, and that within the day, this RC will be made available on the MSDN downloads page. Or so I hope.&lt;/p&gt;

&lt;p&gt;Finally, this release is more coherent with Ed Bott’s &lt;a href=&quot;http://blogs.zdnet.com/Bott/?p=751&quot; target=&quot;_blank&quot;&gt;speculative timeline&lt;/a&gt; over at ZDNet which places the Windows 7 RTM release on late August of 2009. At this point, we just wait and see – being a 7 Beta user, I am happy and borderline ecstatic to get a RC release so soon. Way to go, Microsoft!&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;div id=&quot;attachment_172&quot; style=&quot;width: 430px&quot; class=&quot;wp-caption alignnone&quot;&gt;
  &lt;a href=&quot;https://www.tiagoespinha.net/wp-content/uploads/2009/04/partner.png&quot; rel=&quot;lightbox[171]&quot; title=&quot;Microsoft Partners&quot;&gt;&lt;img class=&quot;size-full wp-image-172&quot; title=&quot;Microsoft Partners&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2009/04/partner.png&quot; alt=&quot;Courtesy of Neowin.net&quot; width=&quot;420&quot; height=&quot;403&quot; srcset=&quot;https://www.tiagoespinha.net/wp-content/uploads/2009/04/partner.png 700w, https://www.tiagoespinha.net/wp-content/uploads/2009/04/partner-300x288.png 300w&quot; sizes=&quot;(max-width: 420px) 100vw, 420px&quot; /&gt;&lt;/a&gt;
  
  &lt;p class=&quot;wp-caption-text&quot;&gt;
    Courtesy of Neowin.net
  &lt;/p&gt;
&lt;/div&gt;
</description>
        <pubDate>Sun, 19 Apr 2009 13:34:32 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2009/04/windows-7-rc-out-maybe/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2009/04/windows-7-rc-out-maybe/</guid>
        
        <category>May 5th</category>
        
        <category>microsoft</category>
        
        <category>Release Candidate</category>
        
        <category>Software</category>
        
        <category>Technology</category>
        
        <category>Windows 7</category>
        
        <category>Windows 7 RC</category>
        
        <category>Windows 7 Release Candidate</category>
        
        
        <category>Windows</category>
        
      </item>
    
      <item>
        <title>Google Summer of Code 2009</title>
        <description>&lt;p&gt;I know this post comes a little late and all but I still had to mention it on my blog. It turns out I am repeating the stunt again. After being turned down by Google last year, I decided I would try to apply once more this year.&lt;/p&gt;

&lt;p&gt;Since last year I still had the change to get acquainted and get the logic of &lt;a href=&quot;http://db.apache.org/derby/&quot; target=&quot;_blank&quot;&gt;Apache Derby&lt;/a&gt;, I thought it would be wise to apply for the same project, and so I did. After all I do have an education on database management and also on Java, which are key for a project like Apache Derby. On top of it all there’s also my tutor from last year; despite not having been chosen I still had a tutor who helped me all the way through. Kathey Marsden agreed to be my tutor again this year and that is a plus for me because I know upfront what I can expect.&lt;/p&gt;

&lt;p&gt;So, the application period is over and my application is submitted. The results should be out on April 20th and I have my fingers crossed for me to get picked 🙂&lt;/p&gt;
</description>
        <pubDate>Fri, 10 Apr 2009 22:29:43 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2009/04/google-summer-of-code-2009/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2009/04/google-summer-of-code-2009/</guid>
        
        <category>Apache</category>
        
        <category>Apache Derby</category>
        
        <category>Derby</category>
        
        <category>Google</category>
        
        <category>Google Summer of Code</category>
        
        <category>GSoC</category>
        
        <category>GSoC 2009</category>
        
        <category>my life</category>
        
        
        <category>my life</category>
        
      </item>
    
      <item>
        <title>VMWare Unity &amp;#8211; The ultimate virtualization?</title>
        <description>&lt;p&gt;Would it not be cool to have two operating systems interweaved in the same machine in a seamless manner? What if you could be running Ubuntu and alongside with its ‘normal’ windows, you could just have your favourite Windows applications running as if they were running natively? It would be awesome, right?&lt;/p&gt;

&lt;p&gt;Well, if this is still an utopia for you, then you are probably missing out on VMWare’s Unity functionality, available since the version 6.5 on their Workstation platform.&lt;/p&gt;

&lt;p&gt;What’s Unity you ask? I say it is the best damn thing ever invented.&lt;/p&gt;

&lt;p&gt;Unity, as I have hinted, gives you the ability of having the applications of a guest operating system ‘running under’ the host OS. I used quotes because in actual fact, only the windows from those apps are transported from the guest to the host – all the applications will still be running under the guest OS.&lt;/p&gt;

&lt;p&gt;So in practice, you can be running Ubuntu (or any other flavour of Linux) and have Adobe’s Photoshop or Microsoft Word running &lt;strong&gt;right there&lt;/strong&gt;, alongside Gnometrix or any other of the applications that you can run under Linux. The opposite also works. As a matter of fact, I’m running Vista as we speak and I am developing under Netbeans on Ubuntu. Neat eh?&lt;/p&gt;

&lt;p&gt;I cannot begin to address the multitude of possibilities that this opens. It is still buggy but even when you have applications that still can’t run on Vista, you can just have a virtual machine running XP and your applications can run straight off along the other windows. It’s just the ultimate invention.&lt;/p&gt;

&lt;p&gt;I’ll leave you with a printscreen since an image is worth a thousand words.&lt;/p&gt;

&lt;p&gt;&lt;img class=&quot;alignnone size-medium wp-image-165&quot; title=&quot;vistabuntu&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2009/03/vistabuntu-300x168.jpg&quot; alt=&quot;vistabuntu&quot; width=&quot;300&quot; height=&quot;168&quot; srcset=&quot;https://www.tiagoespinha.net/wp-content/uploads/2009/03/vistabuntu-300x168.jpg 300w, https://www.tiagoespinha.net/wp-content/uploads/2009/03/vistabuntu-1024x575.jpg 1024w, https://www.tiagoespinha.net/wp-content/uploads/2009/03/vistabuntu.jpg 1366w&quot; sizes=&quot;(max-width: 300px) 100vw, 300px&quot; /&gt;&lt;/p&gt;
</description>
        <pubDate>Tue, 24 Mar 2009 18:46:09 +0000</pubDate>
        <link>https://www.tiagoespinha.net/2009/03/vmware-unity-the-ultimate-virtualization/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2009/03/vmware-unity-the-ultimate-virtualization/</guid>
        
        
        <category>Uncategorized</category>
        
      </item>
    
      <item>
        <title>What&amp;#8217;s hot?</title>
        <description>&lt;p&gt;I am certainly not. My life’s about to get shaken up a little and I am going from idleness to a rather busy period, or so I believe.&lt;/p&gt;

&lt;p&gt;At this point I have decided I will be applying once more for Google Summer of Code. I applied last year and sadly, didn’t get approved. Still, I stuck around an open source project and actually got to do some work on it. The experience was invaluable and I am going for the very same project again. My experience will be a plus and I really am looking forward to be part of GSoC’09.&lt;/p&gt;

&lt;p&gt;At the same time, I am having to do research for my final school project: analyzing and proofing the eXplicit Control Protocol (XCP). As exciting as it may sound, it gets a little demotivating when the true goals of our project are, to say the least, blurry. Still, I am aiming to do the best I can.&lt;/p&gt;

&lt;p&gt;Still on my thought currently are two school subjects:&lt;/p&gt;

&lt;p&gt;– Decision Support Systems – The labs on this subject are turning out quite interesting. The definition of DSS &lt;strong&gt;is&lt;/strong&gt; interesting and it is fascinating to get your hands dirty with data warehouses and with extreme load scenarios. The theory however is kinda boring and dull…&lt;/p&gt;

&lt;p&gt;– Enterprise Information Systems – Good ole SAP. It looks like this subject will be extremely intensive and will require a lot of work but it is certainly a nice challenge. Having SAP in my CV will also be a massive stepping stone for the future as SAP consultants are not only &lt;strong&gt;very&lt;/strong&gt; well paid, but the position is also always in constant demand.&lt;/p&gt;

&lt;p&gt;For the near future I also have some extra-curricular plans. I have volunteered to be part of the FITEC event, so that should be interesting.&lt;/p&gt;

&lt;p&gt;And that’s all folks! I better go get some sle…..get back to work I mean! 😉&lt;/p&gt;
</description>
        <pubDate>Thu, 12 Mar 2009 00:14:14 +0000</pubDate>
        <link>https://www.tiagoespinha.net/2009/03/whats-hot/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2009/03/whats-hot/</guid>
        
        <category>Google</category>
        
        <category>Google Summer of Code</category>
        
        <category>GSoC&apos;09</category>
        
        <category>my life</category>
        
        <category>School</category>
        
        
        <category>my life</category>
        
      </item>
    
      <item>
        <title>Accelero Twin Turbo by Artic Cooling &amp;#8211; Review</title>
        <description>&lt;p&gt;Recently I had been having a problem. My graphics card (a humble PowerColor HD4850) was overheating to smithereens. Each time I wanted to play a game I would manually pump up the only small fan, increasing the noise tenfold, only to keep the temperature at a scorching 100ºC.&lt;/p&gt;

&lt;p&gt;Yes, you read correctly. Under load (running Team Fortress 2) this card would easily reach the 100 degrees Celsius. The funny thing about it? It wouldn’t absolutely stutter at all!&lt;/p&gt;

&lt;p&gt;After having done research on it, I came to the conclusion that this card was simply &lt;a href=&quot;http://www.overclock.net/ati/347689-hd4850-heat-problem-hot-do-i.html&quot; target=&quot;_blank&quot;&gt;hot by nature&lt;/a&gt;. Or, better put, the stock cooler is not appropriate for the kind of heat this graphics card generates. There is being hot and there is not having appropriate cooling. This case is most certainly the latter.&lt;/p&gt;

&lt;p&gt;My results, despite not having screenshots of it, were of:&lt;/p&gt;

&lt;p&gt;– 80ºC idle (with the fan at 40% – which is the maximum I was willing to go noise-wise)&lt;/p&gt;

&lt;p&gt;– 100ºC ++ load (with the fan at 80% and a deafening noise that even got my mom scared about it)&lt;/p&gt;

&lt;p&gt;Now, while the card was most certainly designed with this sort of temperatures in mind, heat rarely does any good to electrical components. When we’re talking about temperatures enough to make your kettle whistle, then you know you should do something about it.&lt;/p&gt;

&lt;p&gt;I did.&lt;/p&gt;

&lt;p&gt;Today, I bought the Accelero Twin Turbo and at first I was a little reluctant. I was afraid it was just going to be more of the same as the stock cooler, with little improvement. I couldn’t have been more wrong. The installation is pretty straight-forward, although, to its own right, the RAM and voltage regulators heatsinks definitely could use more glue. With a little nudge I managed to remove one of the heatsinks so I am still wondering how they will hold up through time (literally).&lt;/p&gt;

&lt;p&gt;This cooler packs quite a punch when compared to the stock cooler. It comes with two 80mm fans, attached to a massive aluminum block, which has a copper pipeline system that goes straight to the actual block that attaches to the GPU. Keep in mind that space may be an issue with this cooler; if you are going for CrossFire then think again about buying the Twin Turbo as your graphics card will use up THREE slots on the back of your computer case.&lt;/p&gt;

&lt;p&gt;It is crazy, I know, but right now I have the same 40% setting on the fans (this cooler is pluggable to your graphics’ card fan power supply) and I get a cool 33ºC . While gaming, it never goes above the 36ºC and that is with the very same 40% !&lt;/p&gt;

&lt;p&gt;As far as noise goes, it can’t even compare to the stock cooler, which is actually expectable. There is a trade-off between the size of a fan, the amount of air it can move per second and the noise in decibels it produces. Basically, with a bigger fan, you can move the same (or a bigger) amount of air with the same (or less) noise. These two fans are really silent, barely audible. If I push them to 100% then you actually start to hear them, but at 100% they are less audible than the single, stock fan, at 80%.&lt;/p&gt;

&lt;p&gt;So if you still needed any proof that this is the cooler for you, look no further. This will solve ALL your temperature problems and I advocate that this graphics card should actually come with one of these coolers by default.&lt;/p&gt;
</description>
        <pubDate>Fri, 06 Mar 2009 21:40:01 +0000</pubDate>
        <link>https://www.tiagoespinha.net/2009/03/accelero-twin-turbo-by-artic-cooling-review/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2009/03/accelero-twin-turbo-by-artic-cooling-review/</guid>
        
        <category>Accelero</category>
        
        <category>Artic Cooling</category>
        
        <category>Hardware</category>
        
        <category>Review</category>
        
        <category>Technology</category>
        
        <category>Twin Turbo</category>
        
        
        <category>Hardware</category>
        
        <category>Uncategorized</category>
        
      </item>
    
      <item>
        <title>Gmail now has customizable themes &amp;#8211; what about us?!</title>
        <description>&lt;p&gt;That’s right, what about us, Google Apps users?&lt;/p&gt;

&lt;p&gt;Google has recently &lt;a href=&quot;http://gmailblog.blogspot.com/2009/02/choose-your-own-theme-colors.html&quot; target=&quot;_blank&quot;&gt;released means&lt;/a&gt; for people to customize the looks of their GMail inboxes, but we, Google Apps users, are still in the blue. (That’s my poor attempt at a pun)&lt;/p&gt;

&lt;p&gt;Ever since Theming was released for GMail that I have been waiting and hoping to get the very same feature for Google Apps. After all, some of the G. Apps users are paying users, so one would expect the guys at Google to roll out the new features fairly quickly for their Apps users. That has not been the case. It was not the case with IMAP and it was not the case with Google Labs.&lt;/p&gt;

&lt;p&gt;Now once more, it is not the case with Themes.&lt;/p&gt;

&lt;p&gt;Sure, you can throw out all the excuses that there are a lot of users and that it needs a lot of work to roll out the features to everyone, but that just doesn’t stick with me. Even recently we (Apps users) got our default theme changed to the default theme brought by the theming feature, however, the Themes tab is still MIA on the Settings page.&lt;/p&gt;

&lt;p&gt;Clearly, part of the code has already been rolled out, but not all of it. The why is yet to be known, as Google won’t give anything more than “soon, Themes will come to Google Apps”. But how soon, Google?&lt;/p&gt;
</description>
        <pubDate>Sat, 21 Feb 2009 19:37:30 +0000</pubDate>
        <link>https://www.tiagoespinha.net/2009/02/gmail-now-has-customizable-themes-but-what-about-us/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2009/02/gmail-now-has-customizable-themes-but-what-about-us/</guid>
        
        <category>GMail</category>
        
        <category>Google</category>
        
        <category>Google Apps</category>
        
        <category>Themes</category>
        
        
        <category>Uncategorized</category>
        
      </item>
    
      <item>
        <title>PasteBins &amp;#8211; Usenet 2.0</title>
        <description>&lt;p style=&quot;text-align: justify;&quot;&gt;
  Here I am again with a crazy project of mine: HaxTools.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Ok, the name wasn&amp;#8217;t particularly well thought but I think you will find the idea quite well engineered.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  On a little background note, let me introduce you to Usenet. Usenet started off in 1979 as a forum-like service. It was a discussion board were allowed to discuss and share opinions, very much like forums as we know them nowadays. Instead of using your webclient, you would have to use an e-mail client with support for NNTP (the newsgroups protocol) or an actual application dedicated to newsgroups, this means that this service, unlike forums, doesn&amp;#8217;t work over HTTP but over a different protocol, NNTP.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  What happened after was that people realized the potential of the newsgroup servers for other purposes, namely file distributing based on a centralized server (as opposed to peer-to-peer). Such newsgroup servers are most commonly provided over very powerful Internet backbones which makes them great platforms for distributing all kinds of binary files to several people just at the cost of one single upload.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  And so it started happening. Programs were developed that were able to post binary files on newsgroups, and newsgroup clients that were able to download binary files also started showing up. From posting innocent files to using Usenet as a gateway for piracy was quite a small leap and nowadays one could say that the Usenet is perhaps most used for illegal content than for actual discussion of ideas.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Now, back to my application. HaxTools is a proof of concept set of tools; therefore, I won&amp;#8217;t be liable for any damage it causes to your computer or to &lt;strong&gt;whatever&lt;/strong&gt; uses people give it. In principle, the program does not violate any terms of service, although it is likely that the service it uses currently (http://rafb.net/paste/) will get up measures to fight it.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  My application makes use of PasteBin sites (like the RAFB.net) to store files online. The HaxUploader allows you to choose the granularity of the upload up to 500Kb (meaning that your file will be sliced in 500Kb pieces) and allows files of up to 10Mb &amp;#8211; this limit is in place so that your computer doesn&amp;#8217;t crash. This is just because I had no concern with optimization, so all operations are done in memory, which can be cumbersome on the computer for big files. However, optimizations can indeed be made so that all operations are done out of the hard drive, making the process slower but workable for bigger files. Depending on the success of this proof of concept, I may get into optimizing the idea.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  How does it work from a user&amp;#8217;s perspective?&lt;br /&gt; Nothing simpler. The user chooses a file on HaxUploader, presses upload and waits until the green bar gets filled completely and links show up on the box below. When the links are there, you just have to copy the said links (&lt;strong&gt;don&amp;#8217;t ever change the order!&lt;/strong&gt;) and distribute them to other people.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  From the receiver&amp;#8217;s perspective, they will open HaxDownloader, paste in the links on the &lt;strong&gt;SAME&lt;/strong&gt; order as they have received them and press Download. After a while, a message will appear saying that the process was completed; at this point, on the same folder as HaxDownloader was ran, there will be a NewFile.bin &amp;#8211; this is the standard name for all downloaded files. Afterwards you&amp;#8217;ll have to rename it to whatever you like and also keep in mind that you do have to change the extension of the file to what it was originally &amp;#8211; this is also something that could be done better in an actual program.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  After that is done, your file is ready to use. Whether it is a RAR file, or an MP3&amp;#8230; whatever, it will work with all file types and we&amp;#8217;ll now get to how it works from the code&amp;#8217;s perspective.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  What&amp;#8217;s the whole idea? In a nutshell, the HaxUploader grabs the file it is meant to upload, streams it into memory (treating it as a binary file, thus working for any kind of files) and then moves on to convert the file contents to Base64. This is the standard format on which files are stored on Usenet; so the core idea is kept. With the contents on Base64, it goes on to split them into smaller chunks (given by the granularity setting) and uploads each of the chunks into a separate &amp;#8216;pasting&amp;#8217;.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  When it has finally submitted all the parts and acquired all the links from the &amp;#8216;pastings&amp;#8217; we&amp;#8217;re all done and it simply outputs the links to the user.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  The order in which the links are arranged does matter and it is imperative that they are kept in the order they are provided to you, otherwise it simply won&amp;#8217;t work as I haven&amp;#8217;t put in place any order measure. (It can be done though and on an actual application this would be needed).
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  The Downloader program simply fetches the content of the paste links, puts it all back together and decodes the Base64 string into binary, recreating the file.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  As a final note, there isn&amp;#8217;t a big deal of protections and validations in place, that is why this is a proof of concept &amp;#8211; I just wanted to prove that it can be done.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  For now I am not releasing the source code but just the binaries. If you are interested in the source code, you can contact me at tiago[at]espinhas[dot]net and we can discuss the situation.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Until the next time!
&lt;/p&gt;
</description>
        <pubDate>Sat, 03 Jan 2009 12:33:24 +0000</pubDate>
        <link>https://www.tiagoespinha.net/2009/01/pastebins-usenet-20/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2009/01/pastebins-usenet-20/</guid>
        
        <category>HaxTools</category>
        
        <category>PasteBin</category>
        
        <category>Usenet 2.0</category>
        
        
        <category>Software</category>
        
        <category>Uncategorized</category>
        
      </item>
    
      <item>
        <title>What Apple could do (and doesn&amp;#8217;t) to have the upper hand at Microsoft</title>
        <description>&lt;p style=&quot;text-align: justify;&quot;&gt;
  Howdy everyone,
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  I was thinking the other day (yes, this does happen every now and then) and something hit me: what is the big issue with developing any kind of software these days? Optimization, right? This is truer on a special case and I am refering to the operating systems. Windows, Mac OS, Linux-based&amp;#8230; you know the drill.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Optimization is by nature, a very herculean task, especially when you are developing a piece of software to run on a wide variety of platforms and environments. Sure, some of the most recent computers come with dual-core CPUs, but pretty much all operating systems &lt;strong&gt;must&lt;/strong&gt; still be able to operate on single-core processors, just as they have to be able to handle 4 or 8 cores effectively. This is not only true in the case of processors but also on RAM. If an operating system is running on 256Mb of RAM, it must certainly behave differently resource-wise than it will behave on a system with 4Gb of available RAM. More to the point, what is the use of having 4Gb of RAM, if 3Gb stay unused at all times? One could argue that having available memory is good because it allows the applications to use more as they need it, without resorting to swap files, but for the most part it is wasted memory, a precious resource in our computers.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  With this said, for companies like Microsoft, it certainly is hard to develop an operating system that will efficiently handle old and new, resource-limited and resource-boasted platforms, simply because they create Windows for a variety of hardware. Windows will run on AMD, Intel and VIA and although they all are x86-based, there are certain instructions, that could be used to optimize but are not, because if my Core 2 Duo has SSE4, my friend&amp;#8217;s Athlon XP 3000+ hasn&amp;#8217;t got this set of instructions and therefore an application optimized for my CPU won&amp;#8217;t actually run on his.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  This is, to some extent, the story of Windows Vista. Windows Vista brought quite a few innovations when compared to XP but it had a problem: if your resources are on the lower end, your computer will feel like a sloth on a lazy day and XP feels like cool breeze when compared to Vista. However, if you have ever had the chance to try out Vista on a powerful system, you&amp;#8217;ll be in awe simply because it will feel as fast as XP and you have all the goodies. Windows 7 by the way, is set to change this, but let us keep that to a different post as that is off-subject.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  So, what is the main characteristic of a Macintosh computer? Until very recently, they used hardware unlike that of PCs but not anymore, their hardware is now similar and compatible with PC hardware. Actually, its parts are normal PC parts, with Intel CPUs and Intel/Nvidia/ATI graphics cards so what is really different? It&amp;#8217;s simple: they come assembled and are not meant to be disassembled at the risk of getting your warranty voided.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  My point is that if Apple keeps such a high-standard on their computers and keeps them so expensive, why not turn the competition knob a notch? Pack their computers with like 8Gb of RAM at least and with 1Tb hard drives. In a way, Apple has started optimizing since Mac OS 10.5 will only run on at least the Core 2 Duo platform and this is a good thing, but I still think that RAM is a major factor in computers that is being systematically (and wrongly) left behind. However, if you have 8Gb of RAM, you could almost reserve 4Gb just for pre-fetching most used applications &lt;strong&gt;before&lt;/strong&gt; the user needs them, and still have plenty of RAM for the average user to mess with. Maybe we need to go big and supersize and make a break with the past of computing.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  What is the real problem? Not knowing in advance when and how much RAM the user will need. So if an operating system starts using all the available (free) memory to pre-fetch applications, if at some point the user needs an application that requires, say, 512Mb of RAM and that program wasn&amp;#8217;t pre-fetched, the OS will have to quickly ditch 512Mb of that pre-fetch RAM and quickly load that program into memory. The problem? This can&amp;#8217;t happen quickly because the program will be loaded from the hard drive and the hard drive is inherently slow.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Effectively, the memory allocation algorithm has to have something like a behaviour analysis module. Something that records the user behaviour and finds patterns, and even then it has to give room for the unexpected. A good memory allocation algorithm isn&amp;#8217;t the key to all of the problems though, if for instance there isn&amp;#8217;t enough RAM available, then an algorithm can&amp;#8217;t make miracles no matter how good it is.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  To finish my post: Apple can control both their software and hardware, as the Portuguese saying goes &amp;#8220;they have the knife and the cheese&amp;#8221; so I sincerely feel that they can do way much more for their users in terms of performance. I do reckon that Mac OS users do not typically complain about performance, but what is also true on a computer is that it can always be faster.
&lt;/p&gt;
</description>
        <pubDate>Thu, 18 Dec 2008 17:04:16 +0000</pubDate>
        <link>https://www.tiagoespinha.net/2008/12/what-apple-could-do-and-doesnt-to-have-the-upper-hand-at-microsoft/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2008/12/what-apple-could-do-and-doesnt-to-have-the-upper-hand-at-microsoft/</guid>
        
        <category>Apple</category>
        
        <category>Hardware</category>
        
        <category>Technology</category>
        
        <category>Windows Vista</category>
        
        
        <category>Technology</category>
        
      </item>
    
      <item>
        <title>GMail has a new security flaw</title>
        <description>&lt;p style=&quot;text-align: justify;&quot;&gt;
  That&amp;#8217;s right folks GMail has a massive security hole which, to the extent of my knowledge, remains unpatched. Aibek at MakeUseOf.com has &lt;a href=&quot;http://www.makeuseof.com/tag/breaking-gmail-security-flaw-more-domains-get-stollen/&quot; target=&quot;_blank&quot;&gt;thoroughly explained&lt;/a&gt; what happened to him and to others, and if you are really curious about the detauks, then it is definitely worth checking out.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  I will, in a brief and resumed way, describe the situation and what you can do to play it safe(r).
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  What happens is that through a trick with URLs and attacking websites, an attacker can effectively enable your e-mail forwarding to whichever e-mail the said attacker wants to. Basically, this way, they get access to all your incoming e-mail because it gets forwarded to their inbox.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  In Aibek&amp;#8217;s case, the attacker managed to somehow steal the e-mail that contained the password to access his domain registrar account. The attacker then transfered the domain to another registrar and started to blackmail Aibek, claiming that he wanted $2000 for the domain that he originally owned.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  This is a very serious situation, and maybe this is just the tip of the iceberg; a lot of malicious actions can be conducted this way and the first and foremost thing you should do right now if you own a GMail account, is to check under Settings -&amp;gt; &amp;#8220;Forwarding and POP/IMAP&amp;#8221; if your forwarding is set to some unknown address. If it is, then you are highly advised to disable the forwarding and &lt;strong&gt;change all your passwords&lt;/strong&gt;. Especially if you have received e-mails from password recovery systems that you didn&amp;#8217;t ask for in the first place.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  The next tip is to never open links that come within e-mails that you don&amp;#8217;t totally trust. If you must open the link anyway, then rather than clicking it, copy the link, logout from your GMail account and then visit the link. When you&amp;#8217;re done, log back in and you should be safe.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  It is yet to be known if this flaw affects Google Apps accounts as well. In a wild guess I would say it does, but it would have to be customized to attack a specific domain belonging to Google Apps, so everyone, be wary.
&lt;/p&gt;
</description>
        <pubDate>Sun, 23 Nov 2008 12:20:40 +0000</pubDate>
        <link>https://www.tiagoespinha.net/2008/11/gmail-has-a-new-security-flaw/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2008/11/gmail-has-a-new-security-flaw/</guid>
        
        <category>GMail</category>
        
        <category>GMail Flaw</category>
        
        <category>Google Mail</category>
        
        <category>Security Flaw</category>
        
        
        <category>Security</category>
        
      </item>
    
      <item>
        <title>Apple&amp;#8217;s quality center puts the B in Dumn</title>
        <description>&lt;p&gt;No, it’s not a typo at all. &lt;a href=&quot;http://www.engadget.com/2008/10/20/apples-new-macbook-is-mm-mm-goo/&quot; target=&quot;_blank&quot;&gt;Apparently&lt;/a&gt;, Apple forgot the “B” key in their new Macbook laptops. So much for your high quality standards Steve Jobs…&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.tiagoespinha.net/wp-content/uploads/2008/10/vogelzang-newmac-3574.jpg&quot; rel=&quot;lightbox[137]&quot; title=&quot;vogelzang-newmac-3574&quot;&gt;&lt;img class=&quot;alignnone size-medium wp-image-139&quot; title=&quot;vogelzang-newmac-3574&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2008/10/vogelzang-newmac-3574-300x225.jpg&quot; alt=&quot;&quot; width=&quot;300&quot; height=&quot;225&quot; srcset=&quot;https://www.tiagoespinha.net/wp-content/uploads/2008/10/vogelzang-newmac-3574-300x225.jpg 300w, https://www.tiagoespinha.net/wp-content/uploads/2008/10/vogelzang-newmac-3574.jpg 600w&quot; sizes=&quot;(max-width: 300px) 100vw, 300px&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>Wed, 22 Oct 2008 20:48:53 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2008/10/apples-quality-center-puts-the-b-in-dumn/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2008/10/apples-quality-center-puts-the-b-in-dumn/</guid>
        
        <category>Apple</category>
        
        <category>Macbook</category>
        
        <category>Macintosh</category>
        
        
        <category>Apple</category>
        
      </item>
    
      <item>
        <title>Windows 7 goes official</title>
        <description>&lt;p&gt;That’s right, this will after all be the official name of the next Windows version. According to Mike Nash on the Windows Vista &lt;a href=&quot;http://windowsvistablog.com/blogs/windowsvista/archive/2008/10/13/introducing-windows-7.aspx&quot; target=&quot;_blank&quot;&gt;blog&lt;/a&gt;, Microsoft is sticking with the simple name Windows 7, therefore cutting with the “aspirational monikers” that they have used in the past like Windows XP or Vista.&lt;/p&gt;

&lt;p&gt;The same person writes that this is the seventh release of Windows, hence the naming Windows 7.&lt;/p&gt;

&lt;p&gt;Another &lt;a href=&quot;http://www.internetnews.com/bus-news/article.php/3777686&quot; target=&quot;_blank&quot;&gt;source&lt;/a&gt; tells us that a pre-beta version of this new Windows will be distributed at the Professional Developer Conference, set to take place on Los Angeles on October 27th.&lt;/p&gt;
</description>
        <pubDate>Tue, 14 Oct 2008 11:35:25 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2008/10/windows-7-goes-official/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2008/10/windows-7-goes-official/</guid>
        
        <category>microsoft</category>
        
        <category>Technology</category>
        
        <category>Windows</category>
        
        <category>Windows 7</category>
        
        
        <category>microsoft</category>
        
      </item>
    
      <item>
        <title>A personal view at Firefox vs. Chrome</title>
        <description>&lt;p style=&quot;text-align: justify;&quot;&gt;
  So, really, now that the hype is over, what is the browser of choice? Well, the out of the box answer for me is Firefox but let&amp;#8217;s have a deeper look at the contest shall we?
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  What plays in favour of Google Chrome?&lt;br /&gt; I for one really enjoyed the looks. It has a clean and sleek interface without your regular toolbar menus and without a caption bar. I find this amazing. It&amp;#8217;s the first browser that was designed with true usability in mind regarding the menu paraphernalia. The guys at Google really are being serious about seeing websites as actual applications, and proof of that is the fact that you can create &amp;#8220;application links&amp;#8221;. This also plays in Chrome&amp;#8217;s favour in my opinion. There are pages that I simply have open at all times and ones that I have to be able to access quickly; Google Chrome with this feature allows me to run GMail (or any other website) as a separate window, simply by leaving an icon on my desktop. This separate window is also special, it has kind of usability on steroids since it has no menu whatsoever. It does have a caption, which in this case is good because I might want to move the window around while not maximized.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Ok, now that we&amp;#8217;re done talking about the user interface, we go on to the actual features. For starters, let&amp;#8217;s face it: &lt;a href=&quot;http://blogs.zdnet.com/hardware/?p=2507&quot; target=&quot;_blank&quot;&gt;Google Chrome is &lt;strong&gt;fast&lt;/strong&gt;&lt;/a&gt;. Actually, it feels faster than Firefox as far as browsing is concerned. How do they achieve it? I&amp;#8217;m not exactly sure and if my suspicions are right, you can probably achieve the same effect with &lt;a href=&quot;http://fasterfox.mozdev.org/&quot; target=&quot;_blank&quot;&gt;FasterFox&lt;/a&gt; or with a &lt;a href=&quot;http://www.ghacks.net/2007/03/29/10-tips-to-speed-up-opera-9/trackback/&quot; target=&quot;_blank&quot;&gt;properly configured&lt;/a&gt; Opera, but I&amp;#8217;m dealing with the facts here and that is that Chrome feels fast.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;!--more--&gt;
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  There is also a technical choice in Chrome that pleased me greatly, in part I&amp;#8217;m amazed that such a big open-source project like Mozilla Firefox, packed with paranoid security people let something like this go through on Firefox. The choice I&amp;#8217;m talking about is the fact that Chrome spawns different processes for each tab whereas Firefox uses a threading system instead. It is common programming knowledge that when it comes to security, processes are by far much safer than threads, not to mention the advantages regarding memory management. Why, you ask? Memory leaks. This isn&amp;#8217;t just some buzz word that came with Firefox, this is an actual problem that Firefox and many more applications suffer from. What is a memory leak? Again, to put it simply, it&amp;#8217;s memory of your system that was reserved but that wasn&amp;#8217;t marked as free when it was no longer needed. So if a browser eats 100Mb of your RAM, and when you, say, close a tab it does not free the resources that belonged to that tab, then the more tabs you open, the more memory the browser will be using, and it can only use ever so much. How does multiprocessing help prevent this? It&amp;#8217;s simple: since each tab runs in its own process, when the process dies (i.e. the tab is closed), the memory that was assigned to it gets released &lt;em&gt;automagically. &lt;/em&gt;So even as far as plugins are concerned (to name a few: Flash, Silverligh, Acrobat Reader&amp;#8230;the list goes on), even if those are leaking memory, which has happened in the past, it will all be contained as soon as the tab is closed.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  In practical terms, you open up Firefox and note down how much memory its using. Then browse for 6 hours in a row without closing and reopening the browser. Still, you open tabs, browse in those tabs, close some tabs, open up new ones and do some browsing following this procedure. Also, do visit some Flash-powered websites, and do view some PDF documents in-browser. In the end, close all the tabs but one, it can even be a blank, newly opened, tab. Now open your Task Manager and check how much memory Firefox is using. Note it down and do the same with Google Chrome. See what I&amp;#8217;m talking about? I&amp;#8217;m no future teller but Firefox will be using much memory after the 6 hours than it was in the beginning, and that is memory leaks plus memory fragmentation kicking in (which is also tameable by using processes instead of threads).
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Something else that I find great about Chrome is its OmniBar. I had loved Firefox&amp;#8217;s Awesome Bar but OmniBar throws us to a completely different level of browsing. For instance it cuts off the need for two input boxes like Firefox has, since this address bar can do both automatic searching and regular browsing. Way to go Google. As of yet, I&amp;#8217;m still trying to find a Firefox plugin that perfectly mimics OmniBar&amp;#8217;s behaviour.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  The incognito mode is also a neat little feature, specially when you are on public computers (or visiting sites that you should not be visiting&amp;#8230;..). This is something that has also been included on &lt;a href=&quot;http://www.microsoft.com/windows/internet-explorer/beta/default.aspx&quot; target=&quot;_blank&quot;&gt;Internet Explorer 8&lt;/a&gt; (InPrivate) but apparently is &lt;a href=&quot;http://www.zdnetasia.com/news/security/0,39044215,62042653,00.htm&quot; target=&quot;_blank&quot;&gt;yet to be announced&lt;/a&gt; on Firefox, even if I&amp;#8217;m pretty sure that there&amp;#8217;s already some addon out there that serves the same purpose.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Lastly there&amp;#8217;s the download management. Chrome&amp;#8217;s way of handling downloads is far from perfect, but I still like it better than that of Firefox. I really dislike having a separate window in my task pane just for downloads. It&amp;#8217;s a real pain in the rear when you&amp;#8217;re using the feature on Windows that allows you to group windows of the same application. I think there is still some work needed on this.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Now, for the not-so-good things about Chrome.&lt;br /&gt; The spell checker. For God&amp;#8217;s sake, I still cannot believe that you cannot change the spell checker language without having to restart the whole browser! And even more, you have to crawl through the menus to achieve that. Thank you Firefox for allowing me to do that on the context menu.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  The lack of extendibility. Unfortunately, Google Chrome still does not support plugins or addons, nor does it support themes. A shame really, specially because it doesn&amp;#8217;t seem like it&amp;#8217;s something that it&amp;#8217;s being worked upon, since their policy seems to be simplicity. This is kind of both good and bad.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  It&amp;#8217;s still &lt;strong&gt;very&lt;/strong&gt; beta. There&amp;#8217;s features missing (print selected text anyone?), it&amp;#8217;s still kinda buggy and well, it still needs a lot of work. As an advantage is the fact that it&amp;#8217;s an open-source project, meaning that if there are bugs, there&amp;#8217;s a high likeliness that the community will find and report them, and when those bugs are security-critical, this is a massive advantage over closed-source projects.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  I also feel that Chrome&amp;#8217;s password management is less intuitive and neat than Firefox&amp;#8217;s. Maybe I&amp;#8217;ve just grown used to the way Firefox handles things. I don&amp;#8217;t really know.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  I believe I have in one way or another, covered out everything on both browsers, at least the things that affect me directly. There is a specific addon for Firefox that I cannot go without, that is &lt;a href=&quot;http://www.foxmarks.com/&quot; target=&quot;_blank&quot;&gt;Foxmarks&lt;/a&gt;. This addon allows me to share bookmarks across several computers, and I simply cannot get anything like it on Google Chrome, which is sad really. I keep a toolbar with my neatly organized bookmarks and if they aren&amp;#8217;t coherent across all my computers, then it defeats the purpose of having it there.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  There&amp;#8217;s another topic on the «browser-war» that I would like to address here: memory usage. No, I&amp;#8217;m not going to show screenshots or make videos of how Firefox uses less or more memory than Chrome, or anything like it. For ages, we&amp;#8217;ve been living on the edge of a good program translating into a program that uses little memory. Nowadays this is a &lt;strong&gt;VERY&lt;/strong&gt; wrong concept. In the early days, the RAM memory available was scarce and sometimes we had to make the craziest juggles to even play certain games. Today, we typically have more RAM memory than we can handle; memory which just sits there on our computer, idling. Now, think for a minute: what good is it to have free memory? Yeah, sure it prevents the computer for using the swap file since there&amp;#8217;s always free memory for that one application you&amp;#8217;ve just started but hold on for a second. The RAM is extremely fast when compared to your hard drive, so populating the RAM with data that might be handy in the near future is a measure that will for sure make your computer feel faster. If resources for a certain application are being loaded from the RAM rather than from the hard-drive, you will notice that the application runs faster.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  So I think you see where I am getting here? I don&amp;#8217;t really mind if browser X uses more RAM when compared to browser Y, as long as that RAM is being put to good use. That is, as long as that memory is being used to make the application run faster.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Firefox actually has a go at this but the Mozilla guys kind of failed. Firefox does use a ton of memory but it&amp;#8217;s far from being used to enhance speed, it&amp;#8217;s basically memory that gets left over and forgotten about. Since Firefox runs in one single process, this also builds up memory fragmentation within the process, which just adds up to the RAM being wasted mindlessly. The idea of fragmentation is as follows: say that you have 3 tabs. The first is using 20Mb of your RAM, the second is using 5Mb and the third is using 15Mb and also assume that they were opened by this order, thus they are ordered like that in the process&amp;#8217; memory space (it&amp;#8217;s much more complex than this, but for this purpose we can simplify it like that). Then you decide that the second tab (the one with 5Mb) is no longer needed and you close it. Tada, you just have created a hole in your memory. Firefox &lt;strong&gt;won&amp;#8217;t&lt;/strong&gt; reorganize the memory assignments just to fill the gap with the existing tabs, set aside the operating system doing that.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Now there are two scenarios:&lt;br /&gt; &amp;#8211; You open a tab that by default uses up 10Mb and therefore it won&amp;#8217;t fit the gap. (You are wasting the 5Mb that despite being free, they can&amp;#8217;t be used by whatever else that requires more space)&lt;br /&gt; &amp;#8211; You open a tab that starts up at 2Mb, and as you browse on it, it grows to 15Mb. Then you&amp;#8217;ll have fragmentation. Part of your tab&amp;#8217;s data will be on that gap, and the rest will be somewhere else.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Either scenario is undesirable and also avoidable with processes instead of tabs.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  But hey, I&amp;#8217;m going to stop hitting the same key, it&amp;#8217;s just that apparently Mozilla has pushed this notion way down on their priority stack and this is just foolish. I&amp;#8217;m sure it will take a lot of work to switch from threads to processes, but it will be really worth it in the end.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  The last remark on the two browsers&lt;br /&gt; There&amp;#8217;s a new fight going on right now which is the Javascript fight. Google and Mozilla seem to be going head-to-head trying to make their Javascript engine be the fastest one. Truth is that when you compare Google Chrome (any version) to Mozilla Firefox (up until 3.1.0 which is still due to be released), Chrome simply is &lt;a href=&quot;http://news.cnet.com/8301-1001_3-10030888-92.html&quot; target=&quot;_blank&quot;&gt;much faster&lt;/a&gt; as it is shown by many reviews out there. However, Mozilla is working on a completely new Javascript engine, TraceMonkey, which &lt;a href=&quot;http://andreasgal.com/2008/09/03/tracemonkey-vs-v8/&quot; target=&quot;_blank&quot;&gt;at first sight&lt;/a&gt; will put a hell of a fight with Chrome&amp;#8217;s V8. Who benefits from this? Us, users, of course. The more they fight, the better served we are 😉 .
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  To finish off my post, I just would like to clarify the reason I stick with Firefox. The point is that Firefox has been out there for quite a while now, and despite its security flaws here and there that have happened throghout time, it is pretty rock solid and secure. Google Chrome still has a lot to prove, it&amp;#8217;s still embrionary and it has a lot of growing up to do. Firefox also allows me to use addons that allow me to extend its features and I value this deeply, specially the possibility of using Foxmarks and of changing dictionaries quickly. These are practical things that I cannot go without, hence choosing Firefox for my day-to-day tasks. However, if what you do isn&amp;#8217;t exactly mission critical and if there aren&amp;#8217;t any extensions for Firefox that you use, then by all means, stick with Google Chrome. Only with a good userbase a piece of software can be improved.
&lt;/p&gt;
</description>
        <pubDate>Fri, 10 Oct 2008 23:32:10 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2008/10/a-personal-view-at-firefox-vs-chrome/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2008/10/a-personal-view-at-firefox-vs-chrome/</guid>
        
        <category>Browsers</category>
        
        <category>Chrome</category>
        
        <category>Firefox</category>
        
        <category>Google</category>
        
        <category>Mozilla</category>
        
        <category>Technology</category>
        
        
        <category>Software</category>
        
      </item>
    
      <item>
        <title>Microsoft Dreamway 2008 &amp;#8211; Steve Ballmer</title>
        <description>&lt;p style=&quot;text-align: justify;&quot;&gt;
  Howdy my faithful readers.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Today I am here to talk about Microsoft Dreamway. My goal is to outline what I have learned from it and how much of a great experience that it was.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  First off, I was the very first MSP to arrive there, so I checked myself in and waited around for more people to come. Finally more and more people started coming and another MSP came, Vânia. &amp;#8220;Okay&amp;#8230; what to do now? Let&amp;#8217;s get coffee.&amp;#8221; . After messing around with the map, we finally figured out where the &lt;em&gt;foyer&lt;/em&gt; was and where we were meant to eat cookies(!) and get our morning coffee.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  After waiting for a while longer, more and more Student Partners started showing up and eventually the speeches started. The first one, with Pedro Rosa, was as usually quite good and before we knew it, we were having coffee again on the morning Coffee Break. Then off to speeches again, this time with Nuno Godinho; a speech on creating rich applications with Silverlight. Besides the fact that Nuno lost the notion of time on both of his speeches, they were quite helpful and inspiring. I had been wanting to try Silverlight for a while now and this was just the spark to get it going. Then came the speech about Visual Studio, which (I&amp;#8217;m sorry but) it was the less attractive one, even if I work with Visual Studio on almost a daily basis.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  And then it was time to lunch. They served some &amp;#8220;weird&amp;#8221; thing with codfish and &amp;#8230; stuff BUT, the desserts were delicious so all in all, despite having to stand during the whole thing, it wasn&amp;#8217;t so bad.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Stuffed up and cosy and the moment of the day arrived: Steve Ballmer&amp;#8217;s keynote speech. Massive crowd waiting at the doors of the main auditorium and when we were finally allowed in, it looked like they were offering free candy on the inside! Everyone wanted in, and lucky me, I got a place right on the second row 😀 (yeah, the original plan was to catch a drop of Steve&amp;#8217;s saliva and sell it on eBay afterwards , but that just didn&amp;#8217;t happen&amp;#8230; 🙁 bummer!). Turns out that the first speaker wasn&amp;#8217;t really Steve Ballmer but Miguel Caldas, who was also going to give a keynote speech but on Internet Explorer 8.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  *sigh*
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Don&amp;#8217;t take me wrong, Miguel was, to say the least, captivating, enthusiastic and funny: the perfect mixture in a speaker, so despite us all being fooled into thinking that we were going to be hearing from Steve first, it was quite good to hear all about IE8. As Miguel said: on IE8, Microsoft is finally caring about standards and about developers. We all know how much of a pain in the rear it is to develop something that looks the same in Internet Explorer, Firefox, Opera and Safari (&amp;#8230;and some other browsers out there 😛 like Miguel said &amp;#8211; clearly talking about Chrome).
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  After a while into Miguel&amp;#8217;s speech, Steve arrives on the building and he&amp;#8217;s announced with a quite funky music. This was &lt;strong&gt;THE&lt;/strong&gt; moment of the day and I was enjoying it to the fullest! Steve delivered a fun and objective speech, and I found out how powerful his voice really is 😛 I bet he wouldn&amp;#8217;t really need a microphone nor speakers to get his voice to reach to the people back in the last rows. He does talk loud but also very clearly and without much of an accent.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  So, about this speech, Steve basically pointed out where we are today and how things are developping at Microsoft, and how things are most likely to look in 10 years from now. He was also suspicious about someone being there to evaluate his IQ, as he kept tripping on one of the LCDs laid in front of him, on the ground 😛 so he said he &amp;#8220;suspected that someone was judging his ability to learn&amp;#8221; &amp;#8211; you failed Steve. 😛
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  So to cut this post short, afterwards we had the second part about Silverlight, then another coffee break and lastly, Pedro Rosa again, this time talking about Virtual Earth and how it can be used as a base to develop so many interesting and useful things. Definitely something to be looked upon. I still have to know more about the licensing because depending on that, I may be going to use it on a secret ASP .NET project of mine 😉 .
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  In a nutshell: the event was brilliantly organized (some chairs on the &lt;em&gt;foyer&lt;/em&gt; and on the lunch-tent wouldn&amp;#8217;t have hurted though&amp;#8230;), I got in for free thanks to being a Microsoft Student Partner so&amp;#8230; free education, free food and a free good time with friends&amp;#8230; hell yes! I&amp;#8217;m all for that! 😀
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Oh and Steve, thanks for your e-mail address. And yes, I know you have wanted it for a while now, and I&amp;#8217;ve decided to concede: you can come to my place whenever you like. Yes, really. 😉
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  P.S. Please bring a copy of Windows Cloud!
&lt;/p&gt;
</description>
        <pubDate>Sat, 04 Oct 2008 14:06:35 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2008/10/microsoft-dreamway-2008-steve-ballmer/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2008/10/microsoft-dreamway-2008-steve-ballmer/</guid>
        
        <category>Ballmer</category>
        
        <category>Ballmer Keynote</category>
        
        <category>Dreamway</category>
        
        <category>IE8</category>
        
        <category>Microsoft Dreamway</category>
        
        <category>Miguel Caldas</category>
        
        <category>Steve Ballmer</category>
        
        
        <category>Technology</category>
        
      </item>
    
      <item>
        <title>Microsoft Dreamway 2008</title>
        <description>&lt;p style=&quot;text-align: center;&quot;&gt;
  &lt;img class=&quot;aligncenter size-full wp-image-124&quot; title=&quot;dreamway&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2008/09/dreamway.jpg&quot; alt=&quot;&quot; width=&quot;390&quot; height=&quot;100&quot; srcset=&quot;https://www.tiagoespinha.net/wp-content/uploads/2008/09/dreamway.jpg 567w, https://www.tiagoespinha.net/wp-content/uploads/2008/09/dreamway-300x77.jpg 300w&quot; sizes=&quot;(max-width: 390px) 100vw, 390px&quot; /&gt;
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  This Microsoft event is taking place on October 3rd, on Lisbon at the Centro Cultural de Belém, and guess what? That&amp;#8217;s right, I will be there 😀 thanks to being an MSP I get to attend the event without having to pay a dime. Neat huh? Can barely wait to see Monke&amp;#8230;. I mean, Steve Ballmer on stage with all his energy 😉 .
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Here&amp;#8217;s the schedule I picked:
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;strong&gt;8h30 &amp;#8211; Welcome Coffee&lt;br /&gt; &lt;/strong&gt;9h15 &amp;#8211; Dev01 &amp;#8211; Software development: The current status and future trends of technological development&lt;br /&gt; &lt;strong&gt;10h15 &amp;#8211; Coffee Break&lt;br /&gt; &lt;/strong&gt;10h45 &amp;#8211; Dev02 &amp;#8211; Creating rich applications using Silverlight 2.0 (2 sessions)&lt;br /&gt; &lt;strong&gt;12h45 &amp;#8211; Lunch&lt;/strong&gt;&lt;br /&gt; 14h40 &amp;#8211; Keynote&lt;br /&gt; &lt;strong&gt;Dreamway:&lt;/strong&gt; Microsoft today and tomorrow, &lt;em&gt;Steve Ballmer&lt;/em&gt;&lt;br /&gt; &lt;strong&gt;IE8:&lt;/strong&gt; pushing the web forward, &lt;em&gt;Miguel Caldas&lt;/em&gt;&lt;br /&gt; 16h00 &amp;#8211; ITP04 &amp;#8211; SQL Server 2008 as an enterprise grade database platform &amp;#8211; How to manage and provide robust, reliable, scalable and innovative solutions&lt;br /&gt; &lt;strong&gt;17h00 &amp;#8211; Coffee Break&lt;/strong&gt;&lt;br /&gt; 17h30 &amp;#8211; Dev09 &amp;#8211; Windows Presentation Foundation: How can we take advantage of this technology to improve the user experience
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  So, yeah, it&amp;#8217;s my first event of the kind and I&amp;#8217;m hoping it will be a great experience to learn 🙂 I&amp;#8217;ll keep you readers posted on how it goes.
&lt;/p&gt;
</description>
        <pubDate>Wed, 24 Sep 2008 23:48:50 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2008/09/microsoft-dreamway-2008/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2008/09/microsoft-dreamway-2008/</guid>
        
        <category>Dreamway</category>
        
        <category>microsoft</category>
        
        <category>Microsoft Student Partner</category>
        
        <category>MSP</category>
        
        <category>Technology</category>
        
        
        <category>microsoft</category>
        
      </item>
    
      <item>
        <title>MSP Team Building 2009</title>
        <description>&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;a href=&quot;https://www.tiagoespinha.net/wp-content/uploads/2008/09/mspcard1.jpg&quot; rel=&quot;lightbox[118]&quot; title=&quot;mspcard1&quot;&gt;&lt;img class=&quot;alignnone size-medium wp-image-120&quot; style=&quot;margin: 5px; float: right;&quot; title=&quot;mspcard1&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2008/09/mspcard1.jpg&quot; alt=&quot;&quot; width=&quot;215&quot; height=&quot;286&quot; /&gt;&lt;/a&gt;First off, my apologies for having gone for so long without posting anything, but the truth is that I have been too busy to think about my blog. I have had my vacations on Lagos and right after that, I went to the far North of Portugal with the rest of the Portuguese Microsoft Student Partners.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  It was a great experience, an amazing chance to learn from people who have been in our shoes at some point and have thrived brilliantly, and also a fabulous opportunity to get to know the other MSPs and to make new friends. All of this was certainly achieved. I met some really great people, some really smart and brilliant guys and the scenery was absolutely amazing. I know some people prefer beaches and all sunny weather and that stuff, me I enjoy mountains, cool breezes and deep, green valleys 🙂 so the place was perfectly picked, except that it was oddly warm for this time of the year, but oh well&amp;#8230; you can&amp;#8217;t understand weather these days anymore.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  The funniest/weirdest experience was definitely showering to the light of a flashlight. Right as we were getting ready to leave, a massive thunderstorm fell upon the place with lots of raining, and all I remember was hearing a big *KABOOM* and all of a sudden I was in a completely dark bathroom. One of my mates (Nuno Sousa) kindly borrowed me his flashlight and that&amp;#8217;s how I had to finish my shower.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  All in all and everything considered, it was a wonderful weekend and well worth the effort of spending 6 hours in a train 😛 .
&lt;/p&gt;

&lt;div id=&quot;attachment_121&quot; style=&quot;width: 310px&quot; class=&quot;wp-caption alignleft&quot;&gt;
  &lt;a href=&quot;https://www.tiagoespinha.net/wp-content/uploads/2008/09/msp_tb09_0220.jpg&quot; rel=&quot;lightbox[118]&quot; title=&quot;msp_tb09_0220&quot;&gt;&lt;img class=&quot;size-medium wp-image-121&quot; title=&quot;msp_tb09_0220&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2008/09/msp_tb09_0220-300x200.jpg&quot; alt=&quot;Me Giving The Keynote Speech&quot; width=&quot;300&quot; height=&quot;200&quot; srcset=&quot;https://www.tiagoespinha.net/wp-content/uploads/2008/09/msp_tb09_0220-300x200.jpg 300w, https://www.tiagoespinha.net/wp-content/uploads/2008/09/msp_tb09_0220.jpg 1024w&quot; sizes=&quot;(max-width: 300px) 100vw, 300px&quot; /&gt;&lt;/a&gt;
  
  &lt;p class=&quot;wp-caption-text&quot;&gt;
    Me Giving The Keynote Speech
  &lt;/p&gt;
&lt;/div&gt;

&lt;p style=&quot;text-align: left;&quot;&gt;
  (Not really the keynote 😛 that is just me receiving the MSP card and presenting myself)
&lt;/p&gt;
</description>
        <pubDate>Tue, 23 Sep 2008 21:22:16 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2008/09/msp-team-building-2009/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2008/09/msp-team-building-2009/</guid>
        
        <category>microsoft</category>
        
        <category>Microsoft Student Partner</category>
        
        <category>MSP</category>
        
        
        <category>my life</category>
        
      </item>
    
      <item>
        <title>Solid State Musical Tesla Coil</title>
        <description>&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;p style=&quot;text-align: justify;&quot;&gt;
    Ok, so this isn&amp;#8217;t much in concordance with what I have posted before but hey, it is still technology at its peak and I loved the concept. For those who don&amp;#8217;t know, Tesla Coils get their name from their inventor, &lt;a href=&quot;http://en.wikipedia.org/wiki/Nikola_Tesla&quot;&gt;Nikola Tesla&lt;/a&gt;. The initial idea was to actually transport energy through wireless means, very much like Intel &lt;a href=&quot;http://news.yahoo.com/s/afp/20080821/ts_afp/usitinternetenergychipcompanyintel&quot;&gt;is attempting&lt;/a&gt; except that with Intel&amp;#8217;s plans apparently there&amp;#8217;s no human electrocution involved. I know, sad 🙁 .
  &lt;/p&gt;
  
  &lt;p style=&quot;text-align: justify;&quot;&gt;
    Anyhow, I&amp;#8217;m going to leave you to the point of this blog post which is the use of Tesla Coils pretty much as speakers. Some guys built the paraphernalia needed to convert musical waves into digital tones, so that they can afterwards be used as triggers to the coils. Typically we wouldn&amp;#8217;t hear such a coil ressonate, but the whole idea is that they turn the coil on and off enough times per second to insert the noise into a range that is actually audible by humans. You can learn more about it on &lt;a href=&quot;http://www.youtube.com/watch?v=cOkTrqTd0hw&amp;amp;feature=user&quot;&gt;this&lt;/a&gt; video, which explains it briefly. Don&amp;#8217;t bother if you&amp;#8217;re not a tech geek.
  &lt;/p&gt;
  
  &lt;p style=&quot;text-align: justify;&quot;&gt;
    Now, to the actual amazing videos, we have:
  &lt;/p&gt;
  
  &lt;p&gt;
    &lt;a href=&quot;http://www.youtube.com/watch?v=xYHPZgq_Kgo&amp;amp;feature=user&quot;&gt;Tetris Theme&lt;/a&gt;&lt;br /&gt; &lt;a href=&quot;http://www.youtube.com/watch?v=VX5V_9s0Gfw&amp;amp;feature=user&quot;&gt;Mario Bros Theme&lt;/a&gt;&lt;br /&gt; &lt;a href=&quot;http://www.youtube.com/watch?v=LudXCEZvn50&amp;amp;feature=related&quot;&gt;Zelda Theme&lt;/a&gt;&lt;br /&gt; &lt;a href=&quot;http://www.youtube.com/watch?v=qEG-1iYpgKU&amp;amp;feature=related&quot;&gt;Ghostbusters Theme&lt;/a&gt;
  &lt;/p&gt;
  
  &lt;ul style=&quot;text-align: justify;&quot;&gt;
  &lt;/ul&gt;
  
  &lt;p style=&quot;text-align: justify;&quot;&gt;
    Hope you enjoyed it as much as I did, simply because it jaw-dropped me. If you did enjoy it, please feel free to drop me a comment, or better yet, &lt;a href=&quot;http://digg.com/submit?phase=2&amp;amp;url=http%3A%2F%2Fwww.tiagoespinha.net%2F2008%2F09%2Fsolid-state-musical-tesla-coil%2F&amp;amp;title=Solid%20State%20Musical%20Tesla%20Coil&quot;&gt;DIGG&lt;/a&gt; this article 😀 .
  &lt;/p&gt;
  
  &lt;p style=&quot;text-align: justify;&quot;&gt;
    As an end note, if you like this concept, I would also recommend watching the movie &lt;a href=&quot;http://www.imdb.com/title/tt0482571/&quot; target=&quot;_blank&quot;&gt;The Prestige&lt;/a&gt; with the great &lt;a href=&quot;http://www.imdb.com/name/nm0000288/&quot;&gt;Christian Bale&lt;/a&gt; (I&amp;#8217;m sorry, now I&amp;#8217;m just teasing the Batman fans&amp;#8230;) which happens to be one of my favourite movies of all time. Enjoy!
  &lt;/p&gt;
  
  &lt;p style=&quot;text-align: justify;&quot;&gt;
    &lt;p style=&quot;text-align: justify;&quot;&gt;
&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;
</description>
        <pubDate>Sun, 07 Sep 2008 00:16:37 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2008/09/solid-state-musical-tesla-coil/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2008/09/solid-state-musical-tesla-coil/</guid>
        
        <category>Musical Tesla Coil</category>
        
        <category>Solid State</category>
        
        <category>Technology</category>
        
        <category>Tesla Coil</category>
        
        <category>Tesla Coils</category>
        
        
        <category>Technology</category>
        
        <category>Uncategorized</category>
        
      </item>
    
      <item>
        <title>Google Chrome Released</title>
        <description>&lt;p style=&quot;text-align: justify;&quot;&gt;
  Here it is, the browser made by the guys at Google. First things first, and a thank you to Pedro Sousa is due for having brought this to my attention as I had no idea that Google was even working on their own browser.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  To be honest, I have been trying Google Chrome for a few minutes now and I was very impressed. It looked like and improved Firefox but now I&amp;#8217;ve just logged into my blog and the rust started to show. Basically, in the admin panel of wordpress, everything is out of place and a real mess. Who is to blame? I have no clue. But all of this worked on Firefox&amp;#8230;
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  I think that the major advantage I have found so far is the fact that each tab runs on a different process, which is the way things should be. That way, when one page crashes, it isn&amp;#8217;t your whole browser that goes down but just that very page. In a time where web exploits are at their peak, this is very important. Also kudos to the fact that you can easily detach tabs from a window into a separate window, and then add tabs to that window that you just created. It really is THAT easy!
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  The major disadvantage, is the fact that you can&amp;#8217;t switch dictionaries quickly and conveniently from the context menu inside a &amp;#8220;textarea&amp;#8221; which you can do on Firefox. For someone who has to alternate between Portuguese and English dictionaries, this is a major turn-down. Specially because it seems that you even have to restart the browser for the changes to take effect. Bad, bad Google. What were you thinking?!
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Other than this I have also loved the seamless integration with Windows Vista. Chrome just integrates much better on Vista&amp;#8217;s look than Firefox does. Firefox barely supports transparency, whereas Chrome allows for transparency, even on the zone where the tabs reside.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  In a nutshell, it&amp;#8217;s still a beta version, and that does show. Try it at your own peril, but try it nonetheless. I think you will be impressed.
&lt;/p&gt;
</description>
        <pubDate>Tue, 02 Sep 2008 22:14:26 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2008/09/google-chrome-released/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2008/09/google-chrome-released/</guid>
        
        <category>Browsers</category>
        
        <category>Google</category>
        
        <category>Google Chrome</category>
        
        <category>Technology</category>
        
        
        <category>Technology</category>
        
      </item>
    
      <item>
        <title>Photos From the MSP Field-Trip</title>
        <description>&lt;div id=&quot;gallery-1&quot; class=&quot;gallery galleryid-106 gallery-columns-3 gallery-size-thumbnail&quot;&gt;
  &lt;dl class=&quot;gallery-item&quot;&gt;
    &lt;dt class=&quot;gallery-icon landscape&quot;&gt;
      &lt;a href=&quot;https://www.tiagoespinha.net/2008/08/photos-from-the-msp-field-trip/dsc00402_resize/&quot;&gt;&lt;img width=&quot;150&quot; height=&quot;150&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2008/08/dsc00402_resize-150x150.jpg&quot; class=&quot;attachment-thumbnail size-thumbnail&quot; alt=&quot;dsc00402_resize&quot; /&gt;&lt;/a&gt;
    &lt;/dt&gt;
  &lt;/dl&gt;
  
  &lt;dl class=&quot;gallery-item&quot;&gt;
    &lt;dt class=&quot;gallery-icon landscape&quot;&gt;
      &lt;a href=&quot;https://www.tiagoespinha.net/2008/08/photos-from-the-msp-field-trip/dsc00403_resize/&quot;&gt;&lt;img width=&quot;150&quot; height=&quot;150&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2008/08/dsc00403_resize-150x150.jpg&quot; class=&quot;attachment-thumbnail size-thumbnail&quot; alt=&quot;dsc00403_resize&quot; /&gt;&lt;/a&gt;
    &lt;/dt&gt;
  &lt;/dl&gt;
  
  &lt;dl class=&quot;gallery-item&quot;&gt;
    &lt;dt class=&quot;gallery-icon landscape&quot;&gt;
      &lt;a href=&quot;https://www.tiagoespinha.net/2008/08/photos-from-the-msp-field-trip/dsc00404_resize/&quot;&gt;&lt;img width=&quot;150&quot; height=&quot;150&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2008/08/dsc00404_resize-150x150.jpg&quot; class=&quot;attachment-thumbnail size-thumbnail&quot; alt=&quot;dsc00404_resize&quot; /&gt;&lt;/a&gt;
    &lt;/dt&gt;
  &lt;/dl&gt;
  
  &lt;br style=&quot;clear: both&quot; /&gt;
  
  &lt;dl class=&quot;gallery-item&quot;&gt;
    &lt;dt class=&quot;gallery-icon landscape&quot;&gt;
      &lt;a href=&quot;https://www.tiagoespinha.net/2008/08/photos-from-the-msp-field-trip/dsc00405_resize/&quot;&gt;&lt;img width=&quot;150&quot; height=&quot;150&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2008/08/dsc00405_resize-150x150.jpg&quot; class=&quot;attachment-thumbnail size-thumbnail&quot; alt=&quot;dsc00405_resize&quot; /&gt;&lt;/a&gt;
    &lt;/dt&gt;
  &lt;/dl&gt;
  
  &lt;dl class=&quot;gallery-item&quot;&gt;
    &lt;dt class=&quot;gallery-icon landscape&quot;&gt;
      &lt;a href=&quot;https://www.tiagoespinha.net/2008/08/photos-from-the-msp-field-trip/dsc00406_resize/&quot;&gt;&lt;img width=&quot;150&quot; height=&quot;150&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2008/08/dsc00406_resize-150x150.jpg&quot; class=&quot;attachment-thumbnail size-thumbnail&quot; alt=&quot;dsc00406_resize&quot; /&gt;&lt;/a&gt;
    &lt;/dt&gt;
  &lt;/dl&gt;
  
  &lt;dl class=&quot;gallery-item&quot;&gt;
    &lt;dt class=&quot;gallery-icon portrait&quot;&gt;
      &lt;a href=&quot;https://www.tiagoespinha.net/2008/08/photos-from-the-msp-field-trip/dsc00407_resize/&quot;&gt;&lt;img width=&quot;150&quot; height=&quot;150&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2008/08/dsc00407_resize-150x150.jpg&quot; class=&quot;attachment-thumbnail size-thumbnail&quot; alt=&quot;dsc00407_resize&quot; /&gt;&lt;/a&gt;
    &lt;/dt&gt;
  &lt;/dl&gt;
  
  &lt;br style=&quot;clear: both&quot; /&gt;
  
  &lt;dl class=&quot;gallery-item&quot;&gt;
    &lt;dt class=&quot;gallery-icon landscape&quot;&gt;
      &lt;a href=&quot;https://www.tiagoespinha.net/2008/08/photos-from-the-msp-field-trip/dsc00408_resize/&quot;&gt;&lt;img width=&quot;150&quot; height=&quot;150&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2008/08/dsc00408_resize-150x150.jpg&quot; class=&quot;attachment-thumbnail size-thumbnail&quot; alt=&quot;dsc00408_resize&quot; /&gt;&lt;/a&gt;
    &lt;/dt&gt;
  &lt;/dl&gt;
  
  &lt;dl class=&quot;gallery-item&quot;&gt;
    &lt;dt class=&quot;gallery-icon landscape&quot;&gt;
      &lt;a href=&quot;https://www.tiagoespinha.net/2008/08/photos-from-the-msp-field-trip/dsc00409_resize/&quot;&gt;&lt;img width=&quot;150&quot; height=&quot;150&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2008/08/dsc00409_resize-150x150.jpg&quot; class=&quot;attachment-thumbnail size-thumbnail&quot; alt=&quot;dsc00409_resize&quot; /&gt;&lt;/a&gt;
    &lt;/dt&gt;
  &lt;/dl&gt;
  
  &lt;dl class=&quot;gallery-item&quot;&gt;
    &lt;dt class=&quot;gallery-icon landscape&quot;&gt;
      &lt;a href=&quot;https://www.tiagoespinha.net/2008/08/photos-from-the-msp-field-trip/dsc00410_resize/&quot;&gt;&lt;img width=&quot;150&quot; height=&quot;150&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2008/08/dsc00410_resize-150x150.jpg&quot; class=&quot;attachment-thumbnail size-thumbnail&quot; alt=&quot;dsc00410_resize&quot; /&gt;&lt;/a&gt;
    &lt;/dt&gt;
  &lt;/dl&gt;
  
  &lt;br style=&quot;clear: both&quot; /&gt;
  
  &lt;dl class=&quot;gallery-item&quot;&gt;
    &lt;dt class=&quot;gallery-icon landscape&quot;&gt;
      &lt;a href=&quot;https://www.tiagoespinha.net/2008/08/photos-from-the-msp-field-trip/dsc00411_resize/&quot;&gt;&lt;img width=&quot;150&quot; height=&quot;150&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2008/08/dsc00411_resize-150x150.jpg&quot; class=&quot;attachment-thumbnail size-thumbnail&quot; alt=&quot;dsc00411_resize&quot; /&gt;&lt;/a&gt;
    &lt;/dt&gt;
  &lt;/dl&gt;
  
  &lt;dl class=&quot;gallery-item&quot;&gt;
    &lt;dt class=&quot;gallery-icon landscape&quot;&gt;
      &lt;a href=&quot;https://www.tiagoespinha.net/2008/08/photos-from-the-msp-field-trip/dsc00412_resize/&quot;&gt;&lt;img width=&quot;150&quot; height=&quot;150&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2008/08/dsc00412_resize-150x150.jpg&quot; class=&quot;attachment-thumbnail size-thumbnail&quot; alt=&quot;dsc00412_resize&quot; /&gt;&lt;/a&gt;
    &lt;/dt&gt;
  &lt;/dl&gt;
  
  &lt;dl class=&quot;gallery-item&quot;&gt;
    &lt;dt class=&quot;gallery-icon landscape&quot;&gt;
      &lt;a href=&quot;https://www.tiagoespinha.net/2008/08/photos-from-the-msp-field-trip/dsc00413_resize/&quot;&gt;&lt;img width=&quot;150&quot; height=&quot;150&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2008/08/dsc00413_resize-150x150.jpg&quot; class=&quot;attachment-thumbnail size-thumbnail&quot; alt=&quot;dsc00413_resize&quot; /&gt;&lt;/a&gt;
    &lt;/dt&gt;
  &lt;/dl&gt;
  
  &lt;br style=&quot;clear: both&quot; /&gt;
  
  &lt;dl class=&quot;gallery-item&quot;&gt;
    &lt;dt class=&quot;gallery-icon landscape&quot;&gt;
      &lt;a href=&quot;https://www.tiagoespinha.net/2008/08/photos-from-the-msp-field-trip/dsc00414_resize/&quot;&gt;&lt;img width=&quot;150&quot; height=&quot;150&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2008/08/dsc00414_resize-150x150.jpg&quot; class=&quot;attachment-thumbnail size-thumbnail&quot; alt=&quot;dsc00414_resize&quot; /&gt;&lt;/a&gt;
    &lt;/dt&gt;
  &lt;/dl&gt;
  
  &lt;dl class=&quot;gallery-item&quot;&gt;
    &lt;dt class=&quot;gallery-icon landscape&quot;&gt;
      &lt;a href=&quot;https://www.tiagoespinha.net/2008/08/photos-from-the-msp-field-trip/dsc00415_resize/&quot;&gt;&lt;img width=&quot;150&quot; height=&quot;150&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2008/08/dsc00415_resize-150x150.jpg&quot; class=&quot;attachment-thumbnail size-thumbnail&quot; alt=&quot;dsc00415_resize&quot; /&gt;&lt;/a&gt;
    &lt;/dt&gt;
  &lt;/dl&gt;
  
  &lt;dl class=&quot;gallery-item&quot;&gt;
    &lt;dt class=&quot;gallery-icon landscape&quot;&gt;
      &lt;a href=&quot;https://www.tiagoespinha.net/2008/08/photos-from-the-msp-field-trip/dsc00416_resize/&quot;&gt;&lt;img width=&quot;150&quot; height=&quot;150&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2008/08/dsc00416_resize-150x150.jpg&quot; class=&quot;attachment-thumbnail size-thumbnail&quot; alt=&quot;dsc00416_resize&quot; /&gt;&lt;/a&gt;
    &lt;/dt&gt;
  &lt;/dl&gt;
  
  &lt;br style=&quot;clear: both&quot; /&gt;
  
  &lt;dl class=&quot;gallery-item&quot;&gt;
    &lt;dt class=&quot;gallery-icon landscape&quot;&gt;
      &lt;a href=&quot;https://www.tiagoespinha.net/2008/08/photos-from-the-msp-field-trip/dsc00417_resize/&quot;&gt;&lt;img width=&quot;150&quot; height=&quot;150&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2008/08/dsc00417_resize-150x150.jpg&quot; class=&quot;attachment-thumbnail size-thumbnail&quot; alt=&quot;dsc00417_resize&quot; /&gt;&lt;/a&gt;
    &lt;/dt&gt;
  &lt;/dl&gt;
  
  &lt;dl class=&quot;gallery-item&quot;&gt;
    &lt;dt class=&quot;gallery-icon landscape&quot;&gt;
      &lt;a href=&quot;https://www.tiagoespinha.net/2008/08/photos-from-the-msp-field-trip/dsc00418_resize/&quot;&gt;&lt;img width=&quot;150&quot; height=&quot;150&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2008/08/dsc00418_resize-150x150.jpg&quot; class=&quot;attachment-thumbnail size-thumbnail&quot; alt=&quot;dsc00418_resize&quot; /&gt;&lt;/a&gt;
    &lt;/dt&gt;
  &lt;/dl&gt;
  
  &lt;dl class=&quot;gallery-item&quot;&gt;
    &lt;dt class=&quot;gallery-icon landscape&quot;&gt;
      &lt;a href=&quot;https://www.tiagoespinha.net/2008/08/photos-from-the-msp-field-trip/dsc00419_resize/&quot;&gt;&lt;img width=&quot;150&quot; height=&quot;150&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2008/08/dsc00419_resize-150x150.jpg&quot; class=&quot;attachment-thumbnail size-thumbnail&quot; alt=&quot;dsc00419_resize&quot; /&gt;&lt;/a&gt;
    &lt;/dt&gt;
  &lt;/dl&gt;
  
  &lt;br style=&quot;clear: both&quot; /&gt;
  
  &lt;dl class=&quot;gallery-item&quot;&gt;
    &lt;dt class=&quot;gallery-icon landscape&quot;&gt;
      &lt;a href=&quot;https://www.tiagoespinha.net/2008/08/photos-from-the-msp-field-trip/dsc00420_resize/&quot;&gt;&lt;img width=&quot;150&quot; height=&quot;150&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2008/08/dsc00420_resize-150x150.jpg&quot; class=&quot;attachment-thumbnail size-thumbnail&quot; alt=&quot;dsc00420_resize&quot; /&gt;&lt;/a&gt;
    &lt;/dt&gt;
  &lt;/dl&gt;
  
  &lt;dl class=&quot;gallery-item&quot;&gt;
    &lt;dt class=&quot;gallery-icon portrait&quot;&gt;
      &lt;a href=&quot;https://www.tiagoespinha.net/2008/08/photos-from-the-msp-field-trip/dsc00422_resize/&quot;&gt;&lt;img width=&quot;150&quot; height=&quot;150&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2008/08/dsc00422_resize-150x150.jpg&quot; class=&quot;attachment-thumbnail size-thumbnail&quot; alt=&quot;dsc00422_resize&quot; /&gt;&lt;/a&gt;
    &lt;/dt&gt;
  &lt;/dl&gt;
  
  &lt;dl class=&quot;gallery-item&quot;&gt;
    &lt;dt class=&quot;gallery-icon landscape&quot;&gt;
      &lt;a href=&quot;https://www.tiagoespinha.net/2008/08/photos-from-the-msp-field-trip/dsc00423_resize/&quot;&gt;&lt;img width=&quot;150&quot; height=&quot;150&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2008/08/dsc00423_resize-150x150.jpg&quot; class=&quot;attachment-thumbnail size-thumbnail&quot; alt=&quot;dsc00423_resize&quot; /&gt;&lt;/a&gt;
    &lt;/dt&gt;
  &lt;/dl&gt;
  
  &lt;br style=&quot;clear: both&quot; /&gt;
  
  &lt;dl class=&quot;gallery-item&quot;&gt;
    &lt;dt class=&quot;gallery-icon portrait&quot;&gt;
      &lt;a href=&quot;https://www.tiagoespinha.net/2008/08/photos-from-the-msp-field-trip/dsc00424_resize/&quot;&gt;&lt;img width=&quot;150&quot; height=&quot;150&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2008/08/dsc00424_resize-150x150.jpg&quot; class=&quot;attachment-thumbnail size-thumbnail&quot; alt=&quot;dsc00424_resize&quot; /&gt;&lt;/a&gt;
    &lt;/dt&gt;
  &lt;/dl&gt;
  
  &lt;dl class=&quot;gallery-item&quot;&gt;
    &lt;dt class=&quot;gallery-icon portrait&quot;&gt;
      &lt;a href=&quot;https://www.tiagoespinha.net/2008/08/photos-from-the-msp-field-trip/dsc00425_resize/&quot;&gt;&lt;img width=&quot;150&quot; height=&quot;150&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2008/08/dsc00425_resize-150x150.jpg&quot; class=&quot;attachment-thumbnail size-thumbnail&quot; alt=&quot;dsc00425_resize&quot; /&gt;&lt;/a&gt;
    &lt;/dt&gt;
  &lt;/dl&gt;
  
  &lt;dl class=&quot;gallery-item&quot;&gt;
    &lt;dt class=&quot;gallery-icon portrait&quot;&gt;
      &lt;a href=&quot;https://www.tiagoespinha.net/2008/08/photos-from-the-msp-field-trip/dsc00426_resize/&quot;&gt;&lt;img width=&quot;150&quot; height=&quot;150&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2008/08/dsc00426_resize-150x150.jpg&quot; class=&quot;attachment-thumbnail size-thumbnail&quot; alt=&quot;dsc00426_resize&quot; /&gt;&lt;/a&gt;
    &lt;/dt&gt;
  &lt;/dl&gt;
  
  &lt;br style=&quot;clear: both&quot; /&gt;
  
  &lt;dl class=&quot;gallery-item&quot;&gt;
    &lt;dt class=&quot;gallery-icon landscape&quot;&gt;
      &lt;a href=&quot;https://www.tiagoespinha.net/2008/08/photos-from-the-msp-field-trip/dsc00427_resize/&quot;&gt;&lt;img width=&quot;150&quot; height=&quot;150&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2008/08/dsc00427_resize-150x150.jpg&quot; class=&quot;attachment-thumbnail size-thumbnail&quot; alt=&quot;dsc00427_resize&quot; /&gt;&lt;/a&gt;
    &lt;/dt&gt;
  &lt;/dl&gt;
  
  &lt;dl class=&quot;gallery-item&quot;&gt;
    &lt;dt class=&quot;gallery-icon landscape&quot;&gt;
      &lt;a href=&quot;https://www.tiagoespinha.net/2008/08/photos-from-the-msp-field-trip/dsc00401/&quot;&gt;&lt;img width=&quot;150&quot; height=&quot;150&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2008/08/dsc00401-150x150.jpg&quot; class=&quot;attachment-thumbnail size-thumbnail&quot; alt=&quot;dsc00401&quot; /&gt;&lt;/a&gt;
    &lt;/dt&gt;
  &lt;/dl&gt;
  
  &lt;br style=&quot;clear: both&quot; /&gt;
&lt;/div&gt;
</description>
        <pubDate>Sat, 30 Aug 2008 12:35:29 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2008/08/photos-from-the-msp-field-trip/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2008/08/photos-from-the-msp-field-trip/</guid>
        
        <category>microsoft</category>
        
        <category>Microsoft Student Partner</category>
        
        <category>MSP</category>
        
        <category>my life</category>
        
        <category>Photos</category>
        
        
        <category>Microsoft Student Partner</category>
        
      </item>
    
      <item>
        <title>My First MSP Experience</title>
        <description>&lt;p style=&quot;text-align: justify;&quot;&gt;
  Here I am again, this time writing about my first experience as a Microsoft Student Partner, or at least as an MSP-to-be 😛 .
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  This wasn&amp;#8217;t exactly planned, instead it was Rodrigo&amp;#8217;s idea to invite me to come along. Rodrigo is the current MSP at ESTG Leiria and for the next year, I will be &amp;#8220;taking his place&amp;#8221;, hence the invitation with the purpose of getting me into the spirit of the thing.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  The plan was to visit a children nursing house in Leiria. Basically it&amp;#8217;s a house where children are sent to when they either have lost their parents or when their parents simply can&amp;#8217;t support them in a good environment. So we were to visit the said house and offer them a brand new XBOX with 2 games. We did so and everyone was happy, we were happy for having done the good deed of the day, the kids were happy because they had been given a new toy.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  After some conversation regarding some basic courses we will also be providing the children with, we all came back home. Not much was settled regarding these courses, since the holidays are ending and the whole school fuss is starting to spin again, so there aren&amp;#8217;t many certainties regarding schedules yet, but this will be the plan for the upcoming months: arrange for the children to be taught basic notions on Windows and Word.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  I&amp;#8217;ll keep the news coming as I have them.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  I&amp;#8217;m also posting a password-protected post with the pictures from this event, just to make sure that only allowed people get to see them, as I&amp;#8217;m not the only one in them. 🙂
&lt;/p&gt;
</description>
        <pubDate>Sat, 30 Aug 2008 12:22:28 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2008/08/my-first-msp-experience/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2008/08/my-first-msp-experience/</guid>
        
        <category>microsoft</category>
        
        <category>Microsoft Student Partner</category>
        
        <category>MSP</category>
        
        <category>my life</category>
        
        
        <category>Microsoft Student Partner</category>
        
      </item>
    
      <item>
        <title>Stargate Atlantis comes to an end&amp;#8230;</title>
        <description>&lt;p style=&quot;text-align: justify;&quot;&gt;
  Those of you who know me well, know that I am an avid fan of everything that is Stargate related. Yes, I watched the whole 10 seasons of Stargate SG-1 and I have followed every single episode of Stargate Atlantis so far. It is simply a show I cannot get enough of.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Still, the tv network SciFi seems to be determined in upsetting me and all the Stargate fans out there. First they pulled the plug on SG-1 and now, they &lt;a href=&quot;http://www.tv.com/story/11569.html?tag=topslot;link;1&amp;amp;om_act=convert&amp;amp;om_clk=topslot&quot; target=&quot;_blank&quot;&gt;decide to do the same&lt;/a&gt; on Atlantis&amp;#8217; , as soon as its fifth season ends. What are the true space fans supposed to watch now?! Battlestar Galactica? I&amp;#8217;m sorry, but I&amp;#8217;m a little over sneaky women in red dresses, and the whole worthless drama surrounding that tv series which was so promising to start with.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Well, not all hope is lost though&amp;#8230; Apparently a new Stargate series is on the making, this one of its name Stargate Universe. According to &lt;a href=&quot;http://www.tv.com/story/11571.html?tag=topslot;link;0&amp;amp;om_act=convert&amp;amp;om_clk=topslot&quot; target=&quot;_blank&quot;&gt;tv.com&lt;/a&gt; this new series will be about a «a group of explorers board an abandoned, Ancients-built starship called The Destiny» *raise eyebrow*. I was a little bit excited at the prospect of a new Stargate series since I had known about it for a while, but what I did not expect was the sudden decision of shutting down Atlantis &amp;#8211; now, with this information regarding Universe, my skepticism is through the roof. A Stargate series without travelling through Stargates? Err&amp;#8230; is it me or something does not match?
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Unless of course, The Destiny is small enough to fit into the Stargate, but then it is most likely a puddle-jumper, and that would be utterly boring. Maybe I&amp;#8217;m being too harsh but I think that SciFi is inevitably killing the original spirit of the Stargate. Give us something new, but not &lt;em&gt;that&lt;/em&gt; new&amp;#8230;
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  On the streak of &lt;span style=&quot;text-decoration: line-through;&quot;&gt;good news&lt;/span&gt; reasonable news is the fact that the Stargate fans will also have the MMORPG game coming out relatively soon. Once again however, the game isn&amp;#8217;t overly based on the tv show and whilst I am excited to try it out, I&amp;#8217;m also taking it with a grain of salt.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  According to an &lt;a href=&quot;http://www.gamespot.com/pc/rpg/stargateworlds/news.html?sid=6184182&amp;amp;mode=previews&quot; target=&quot;_blank&quot;&gt;interview&lt;/a&gt; carried out by GameSpot, it seems that Stargate Worlds will actually be some sort of World of Stargate.
&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p style=&quot;text-align: justify;&quot;&gt;
  This means we can&amp;#8217;t keep retelling the story of &lt;em&gt;SG-1&lt;/em&gt;. We&amp;#8217;re going to let players choose from seven archetypes&amp;#8211;Jaffa, Goa&amp;#8217;uld, Asgard, and human soldier, scientist, archeologist, and commando&amp;#8211;when they create a character.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Ah well, thank you SciFi for killing my inner-child 🙁
&lt;/p&gt;
</description>
        <pubDate>Fri, 22 Aug 2008 21:35:47 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2008/08/stargate-atlantis-comes-to-an-end/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2008/08/stargate-atlantis-comes-to-an-end/</guid>
        
        <category>my life</category>
        
        <category>Stargate</category>
        
        <category>Stargate Atlantis</category>
        
        <category>Stargate Universe</category>
        
        <category>Stargate Worlds</category>
        
        
        <category>Stargate</category>
        
      </item>
    
      <item>
        <title>Microsoft Student Partner &amp;#8211; The Outcome</title>
        <description>&lt;p style=&quot;text-align: justify;&quot;&gt;
  Well, I could not have better news today: I was accepted into Microsoft&amp;#8217;s Student Partner Program! Out of the initial 30 students who had been called for an interview in Lisbon, 20 of us got picked and I am amongst those 20.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  The thrill starts right away in September, month on which we were asked to not make any plans for either the first nor the last weekend. I&amp;#8217;m still a little bit on the dark, regarding what&amp;#8217;s happening and where but we were promised more news soon, so I can but to wait to hear more from the people in charge. I&amp;#8217;ll post here when I know more.
&lt;/p&gt;
</description>
        <pubDate>Fri, 22 Aug 2008 14:35:34 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2008/08/microsoft-student-partner-the-outcome/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2008/08/microsoft-student-partner-the-outcome/</guid>
        
        <category>microsoft</category>
        
        <category>Microsoft Student Partner</category>
        
        <category>MSP</category>
        
        <category>my life</category>
        
        
        <category>Microsoft Student Partner</category>
        
      </item>
    
      <item>
        <title>AMD acts, Intel reacts: Atom Dual-Core</title>
        <description>&lt;p style=&quot;text-align: justify;&quot;&gt;
  So on my last blog post I mentioned how AMD isn&amp;#8217;t sleeping, and how it had released a low-power version of their Athlon64 CPU, the 2000+ to go head-to-head with Intel&amp;#8217;s Atom processor. Well as it turns out, Intel certainly hadn&amp;#8217;t given its last word on the subject.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Perhaps in the light of &lt;a href=&quot;http://www.tiagoespinha.net/2008/08/amd-is-dead-think-again/&quot; target=&quot;_self&quot;&gt;AMD&amp;#8217;s move&lt;/a&gt; on the low-end market, Intel decided that the release of the dual-core version of the Atom processor, the Atom 330, will occur sooner than expected.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Our sources tell us that this chip will run at the frequency of 1.6Ghz and it will have a total L2 cache of 1Mb (512Kb per core) and it will run on the same 533Mhz bus as its single-core counterpart (N270). It is expected that the Atom 330 will be significantly faster than the Atom 230 which was trampled by Via&amp;#8217;s Nano according to a &lt;a href=&quot;http://arstechnica.com/reviews/hardware/atom-nano-review.ars&quot; target=&quot;_blank&quot;&gt;review&lt;/a&gt; by Ars Technica.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  It is also worth mentioning that both cores on Atom 330 will have the HyperThreading technology and as a result, the operating system will have 4 virtual cores at its disposal. It needs to be noted that this HT technology was dropped in the Core platform and it&amp;#8217;s now being brought back to life on both the Atom and &lt;a href=&quot;http://news.zdnet.co.uk/hardware/0,1000000091,39286539,00.htm&quot; target=&quot;_blank&quot;&gt;Nehalem architectures&lt;/a&gt;. Rumour went that this technology was dropped because it was ineffective and in some cases it would even draw more power than a dual-CPU solution, so we can only hope that Intel knows what they are doing.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  [&lt;a href=&quot;http://arstechnica.com/news.ars/post/20080820-intel-announces-dual-core-atom-chains-it-to-945c-chipset.html&quot; target=&quot;_blank&quot;&gt;Ars Technica&lt;/a&gt;]
&lt;/p&gt;
</description>
        <pubDate>Thu, 21 Aug 2008 11:04:42 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2008/08/amd-acts-intel-reacts-atom-dual-core/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2008/08/amd-acts-intel-reacts-atom-dual-core/</guid>
        
        <category>Amd</category>
        
        <category>CPU</category>
        
        <category>Dual-Core</category>
        
        <category>Intel</category>
        
        <category>Technology</category>
        
        
        <category>Technology</category>
        
      </item>
    
      <item>
        <title>AMD is dead? Think again&amp;#8230;</title>
        <description>&lt;p&gt;&lt;img class=&quot;size-medium wp-image-46 alignright&quot; style=&quot;margin: 5px; float: right;&quot; title=&quot;AMD Athlon 64 Logo&quot; src=&quot;https://www.tiagoespinha.net/wp-content/uploads/2008/08/amdcpu232.gif&quot; alt=&quot;AMD Athlon 64 Logo&quot; width=&quot;180&quot; height=&quot;180&quot; srcset=&quot;https://www.tiagoespinha.net/wp-content/uploads/2008/08/amdcpu232.gif 300w, https://www.tiagoespinha.net/wp-content/uploads/2008/08/amdcpu232-150x150.gif 150w&quot; sizes=&quot;(max-width: 180px) 100vw, 180px&quot; /&gt;&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  So you thought AMD was dead? Well that is not what &lt;a href=&quot;http://www.tomshardware.com/reviews/Atom-Athlon-Efficient,1997.html&quot; target=&quot;_blank&quot;&gt;this&lt;/a&gt; review by Tom&amp;#8217;s Hardware shows us. It is true that the Core 2 platform has &lt;a href=&quot;http://www.pcadvisor.co.uk/news/index.cfm?newsid=12061&quot; target=&quot;_blank&quot;&gt;smashed&lt;/a&gt; the competition from AMD on pretty much every front of the market, but this tide might be about to turn.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  With the recent &lt;a href=&quot;http://www.crn.com.au/News/81629,netbook-sales-to-soar-in-2008.aspx&quot; target=&quot;_blank&quot;&gt;outbreak of netbook computers&lt;/a&gt; like the Asus Eee PC, it leaves us to wonder where the big bucks might be coming from in the near future. Perhaps with this in mind, AMD downclocked and undervolted its Athlon64 segment to start headbutting with Intel&amp;#8217;s Atom architecture. Truth to be told, they apparently succeeded on creating a platform that outperforms Atom on efficiency, where as by efficiency we understand processing capacity over power consumed. Actually, the Athlon64 2000+ runs at lower a frequency than Intel&amp;#8217;s counterpart, but as we have seen in the past, when it comes to getting the most out of the same frequency, AMD is on top due to their more efficient architecture. This said, not only the A64 runs at a lower frequency, but it also does outperform Intel&amp;#8217;s Atom CPU.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Personally, on a time where the dillema is what Intel CPU to choose rather than to choose between Intel and AMD, and being on a stalemate because of it, I think this is nothing but good news. Not only for AMD themselves but for the market in general, because we all know what happens when companies monopolize markets, right?
&lt;/p&gt;
</description>
        <pubDate>Wed, 20 Aug 2008 11:55:53 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2008/08/amd-is-dead-think-again/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2008/08/amd-is-dead-think-again/</guid>
        
        <category>Amd</category>
        
        <category>CPU</category>
        
        <category>Hardware</category>
        
        <category>Intel</category>
        
        <category>Technology</category>
        
        
        <category>Technology</category>
        
      </item>
    
      <item>
        <title>iPosture: the ultimate solution for your back</title>
        <description>&lt;div style=&quot;float: right; margin: 5px;&quot;&gt;
  &lt;a href=&quot;http://tiagoespinha.info/wp-content/uploads/2008/08/iposture.jpg&quot; rel=&quot;lightbox[38]&quot; title=&quot;iposture&quot;&gt;&lt;img class=&quot;size-medium wp-image-39&quot; title=&quot;iposture&quot; src=&quot;http://tiagoespinha.info/wp-content/uploads/2008/08/iposture-300x216.jpg&quot; alt=&quot;iPosture in action&quot; width=&quot;210&quot; height=&quot;151&quot; srcset=&quot;https://www.tiagoespinha.net/wp-content/uploads/2008/08/iposture-300x216.jpg 300w, https://www.tiagoespinha.net/wp-content/uploads/2008/08/iposture.jpg 494w&quot; sizes=&quot;(max-width: 210px) 100vw, 210px&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  This discreet little gadget promises to straighten up your back from that weird slouching position that we all unconsciously acquire at some point. Be it because you spend too much time sitting or because you are a more direct relative to the apes, you will notice that your back is slightly curved at times. This is usually accompanied by your shoulders dropping down and pointing forward.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Here is what iPosture does to prevent this: as soon as you deviate from the ideal standing angle by just three degrees, it will vibrate until you correct your position or well&amp;#8230; until it gets its own pair of wings and flies straight towards the wall, even if this means of turning it off is heavily unadvised considering its prohibitive price of $99.95 (USD).
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;a href=&quot;http://www.iposture.com/ip_howitworks.php&quot; target=&quot;_blank&quot;&gt;Here&amp;#8217;s&lt;/a&gt; more on the device.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  [&lt;a href=&quot;http://www.engadget.com/2008/08/19/iposture-annoys-you-when-you-slouch-does-so-because-it-loves-yo/&quot; target=&quot;_blank&quot;&gt;Engadget&lt;/a&gt;]
&lt;/p&gt;
</description>
        <pubDate>Tue, 19 Aug 2008 15:49:43 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2008/08/iposture-the-ultimate-solution-for-your-back/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2008/08/iposture-the-ultimate-solution-for-your-back/</guid>
        
        <category>gadget</category>
        
        <category>posture correction</category>
        
        <category>Technology</category>
        
        
        <category>Technology</category>
        
      </item>
    
      <item>
        <title>Pay to click: is it really worth it?</title>
        <description>&lt;p style=&quot;text-align: justify;&quot;&gt;
  Today I will be reviewing what seems to be the XXI century plague: the pay to click systems. The basic notion is that you are paid to watch a set of advertisement links for a certain period of time. After you do so, you get a credit of a few dollar cents in your account and additionally, when you reach a certain minimum amount of balance in your account you can ask for a checkout.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  &lt;p style=&quot;text-align: justify;&quot;&gt;
    &lt;!--more--&gt;
  &lt;/p&gt;
  
  &lt;p style=&quot;text-align: justify;&quot;&gt;
    Now, when I said a few dollar cents, it really is a few dollar cents, as in usually you get paid $0.01 for each page-view which is a pretty meagre amount. Add this to the fact that at best, you get 10 to 20 ad-links to click upon (this varies between PTC systems) and it does not take a genius to do the math and know that you will not be making that much profit out of this system.
  &lt;/p&gt;
  
  &lt;p style=&quot;text-align: justify;&quot;&gt;
    So why is it so widespread and why do people adhere to these systems so massively?
  &lt;/p&gt;
  
  &lt;p style=&quot;text-align: justify;&quot;&gt;
    Mostly because there is more to it. All of the pay to click systems have a referal system. Actually, this is what keeps them in business.
  &lt;/p&gt;
  
  &lt;p style=&quot;text-align: justify;&quot;&gt;
    Referrals work in the following way: for each referral I have, I will also earn a certain amount of money for each click they make. On some PTCs this amount is actually the same as the amount I get for my own clicks, but on some systems this amount is downsized.
  &lt;/p&gt;
  
  &lt;p style=&quot;text-align: justify;&quot;&gt;
    Typically it will be hard to find a decent amount of referrals. It will be hard to find an amount big enough to actually render you more than just one or two dozens of dollars, but once again, most or all the PTC systems have a system to fight this: a referral market. Basically, you just buy referrals for money, and then it will be like if those referrals had in fact registered on that PTC site with your name as their referral. Do you see where this is getting now?
  &lt;/p&gt;
  
  &lt;p style=&quot;text-align: justify;&quot;&gt;
    Let us consider the following scenario: you are consistently getting 5 ad-links per day, each will give you $0.01, so you on your own make $0.05 per day. Now, you had some spare money and bought 1000 referrals. Each of those referrals will also have the 5 links and they will also click on them; as a result, for each click, it will be as if you had clicked as well, so on the first day here&amp;#8217;s how much you will make:
  &lt;/p&gt;
  
  &lt;p style=&quot;text-align: justify;&quot;&gt;
    5 * 0.01 * 1000 = $50
  &lt;/p&gt;
  
  &lt;p style=&quot;text-align: justify;&quot;&gt;
    Sounds better than a simple $0.05 per day, does it not? With an income like that, you can expect something in the order of $1500 per month, give or take.
  &lt;/p&gt;
  
  &lt;p style=&quot;text-align: justify;&quot;&gt;
    Maybe at this point some people who did not know about pay to click systems are jumping up and down, wanting to take the plunge and jump right into &lt;em&gt;the scene&lt;/em&gt;, but I am sure that many other readers will be skeptical. I know that the first question that came to my mind when I was introduced to this system was: where does the money come from?
  &lt;/p&gt;
  
  &lt;p style=&quot;text-align: justify;&quot;&gt;
    Easy. It comes from advertisers who pay a fee to the PTC systems, so that they will publish their advertisements as part of the ad-links. Usually the advertisers pay an amount per page-views (i.e. per amount of times their link was clicked) which is just slightly higher than the amount of money that we, clickers, get for clicking &amp;#8211; allowing for huge profit for PTC owners.
  &lt;/p&gt;
  
  &lt;p style=&quot;text-align: justify;&quot;&gt;
    So now that you know their source of income, are you still skeptic? If you are, you are rightfully so. The essential fail on these systems is how saturated the web is with them; so much that the advertisers are in fact&amp;#8230;. &lt;strong&gt;other PTC companies!&lt;/strong&gt; No matter how much you look around, you will always find that PTC Site A has ad-links for PTC sites B, C and D &amp;#8211; and the site B has links for A, C and D and so on&amp;#8230; So in reality, this is actually a mangle of websites linking to one another, using profits of theirs to feed the profits of their &amp;#8220;opponents&amp;#8221; and we get to a point where we are recycling money between companies, in a very closed system, where the only fresh money that gets in, &lt;strong&gt;is actually money put in by &lt;em&gt;clickers&lt;/em&gt;&lt;/strong&gt;.
  &lt;/p&gt;
  
  &lt;p style=&quot;text-align: justify;&quot;&gt;
    Why don&amp;#8217;t real, honest, business companies want to advertise in PTC websites? Simple: whoever is in the PTC deal as a clicker, simply isn&amp;#8217;t in it for watching the ads. People will click the ad, keep browsing until the timer runs down, then close that tab, click the next ad and continue the process. This simply does &lt;strong&gt;not&lt;/strong&gt; serve the purpose of advertising. Companies advertise their products in the hopes of increasing their sales, because people will look at their ads and feel the urge to buy their products or to subscribe their services. This simply does not happen when people are in it for the money!
  &lt;/p&gt;
  
  &lt;p style=&quot;text-align: justify;&quot;&gt;
    It is somewhat transitive: people click the ads but do not buy. Since people do not buy, the companies do not get the expected income. Let us face it, when a company invests X money in advertising, they are expecting an income of X+Y where they get back the amount they spent, plus a profit. If this profit does not appear, the companies will be less inclined towards advertising and they stop publishing their ads and it all crumbles like a building being demolished.
  &lt;/p&gt;
  
  &lt;p style=&quot;text-align: justify;&quot;&gt;
    This is the crux of the PTC systems having failed over and over and over. They are doomed to fail because the notion is flawed to begin with. The punch-line is: why being advertised at for free, whilst you can be get paid to watch advertisements?
  &lt;/p&gt;
  
  &lt;p style=&quot;text-align: justify;&quot;&gt;
    Well, this is all really pretty, but you will never be looking at ads from real companies like Microsoft, Yahoo, Google or even of popular online games like World of Warcraft or EvE Online. Instead, you will be looking at ads from companies who also make a living out of PTC deals.
  &lt;/p&gt;
  
  &lt;p style=&quot;text-align: justify;&quot;&gt;
    So yeah, I am indeed registered on a few PTC sites and I do click regularly on all of them, but at this point, they are all self-managed. I get profit from PTC, I use it to buy referrals and hopefully at some point I will be leeching the money of people who have invested and given up. Truth is that to make big bucks in this sort of business, you must have big bucks to start with, and they must be disposable. It must be something like venture capital; money that you can simply lose, because there is a high risk involved. There is a risk of it not paying out as well as you expected, or simply the risk of the PTC company going bankrupt and then you have nothing. It has happened the past, many many companies in this field have gone belly-up and then, all those who had invested the big bucks are all of a sudden wiped out.
  &lt;/p&gt;
  
  &lt;p style=&quot;text-align: justify;&quot;&gt;
    Obviously, if the company lives long enough for you to make enough profit, so that it gets to be auto-recyclable, then it might be a good deal, but still with a very risky launching pad.
  &lt;/p&gt;
  
  &lt;p style=&quot;text-align: justify;&quot;&gt;
    So, in sum, it really isn&amp;#8217;t worth it unless you invest at least some money and if you do invest, do be ready to lose the money. You might hit jackpot in the long run, but the most likely ending is that you get no profit and you say goodbye to your money. Truth is: it is not something you can live from. If you had the starting money so that it could become good enough to live from it, then you are probably rich enough to not need this sort of programs to make a living and you will stay out of it.
  &lt;/p&gt;
  
  &lt;p style=&quot;text-align: justify;&quot;&gt;
    This is the core of pay to click websites, although there are some new services out there coming up with new innovative strategies that at a first glance, they all look like perfect ways to get more money. Still, none change the fact that these systems are all like a closed environment. Very little money gets in and tons of money seem to be getting out, not to mention the profit that the companies involved make.
  &lt;/p&gt;
  
  &lt;p style=&quot;text-align: justify;&quot;&gt;
    To finalize, if you want to make really good money, start your own pay to click service and when you have a few thousand bucks in balance, run away with it and never show up again 😛 otherwise, you might join the few poor ones and help out a bloke by trying out the service. These two services seem to be the most credible and faster payers out there. Be careful though, do not join every PTC service out there. Services like bux.to are simply a no-go due to it taking months from the time you ask for your money until you actually get it.
  &lt;/p&gt;
  
  &lt;p style=&quot;text-align: justify;&quot;&gt;
    So if you want to give it a try, just click on these banners and get started. It is not much hard. 🙂
  &lt;/p&gt;
  
  &lt;p style=&quot;text-align: justify;&quot;&gt;
    &lt;a href=&quot;http://www.neobux.com/?r=Espinha&quot;&gt;&lt;img class=&quot;alignnone&quot; title=&quot;Neobux&quot; src=&quot;http://www.neobux.com/imagens/userbar/?u=Espinha&amp;amp;u2=603&quot; alt=&quot;&quot; width=&quot;350&quot; height=&quot;20&quot; /&gt;&lt;/a&gt;
  &lt;/p&gt;
  
  &lt;p style=&quot;text-align: justify;&quot;&gt;
    &lt;a href=&quot;http://www.crewbux.com/register.php?r=Espinha &quot;&gt;&lt;img class=&quot;alignnone&quot; title=&quot;Crewbux&quot; src=&quot;http://www.crewbux.com/images/banner_anim.gif&quot; alt=&quot;&quot; width=&quot;468&quot; height=&quot;60&quot; /&gt;&lt;/a&gt;
  &lt;/p&gt;
&lt;/p&gt;
</description>
        <pubDate>Tue, 19 Aug 2008 00:13:59 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2008/08/pay-to-click-is-it-really-worth-it/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2008/08/pay-to-click-is-it-really-worth-it/</guid>
        
        <category>crewbux</category>
        
        <category>neobux</category>
        
        <category>pay to click</category>
        
        <category>ptc</category>
        
        
        <category>Internet</category>
        
      </item>
    
      <item>
        <title>Microsoft Student Partner pt. 2</title>
        <description>&lt;p&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://4.bp.blogspot.com/_lVR9ZwMZPcM/SKLgOzn4MfI/AAAAAAAAABE/5SWUE5_6vsU/s1600-h/12082008092.jpg&quot; rel=&quot;lightbox[17]&quot; title=&quot;Microsoft Student Partner pt. 2&quot;&gt;&lt;img style=&quot;margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;&quot; src=&quot;http://4.bp.blogspot.com/_lVR9ZwMZPcM/SKLgOzn4MfI/AAAAAAAAABE/5SWUE5_6vsU/s320/12082008092.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5233992261938196978&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div style=&quot;text-align: justify;&quot;&gt;
  And hello again!&amp;lt;/p&amp;gt; 
  
  &lt;p&gt;
    I&amp;#8217;m here fresh out of Lisbon and out of my MSP interview. I confess I was a little scared to start with but it is also true that all of the interviewers were very friendly and not scary at all. After being introduced to the whole content of the MSP program, the first question came: &amp;#8220;How many tracks does the Olympics swimming pool have?&amp;#8221;. Fortunately they were kidding when I was told I could not be an MSP since I answered that question incorrectly (I answered 6 and apparently it has 10 tracks) :P.
  &lt;/p&gt;
  
  &lt;p&gt;
    Other than this I&amp;#8217;d say I left a good impression, except the fact that I was nervous, no doubt about that &amp;#8211; but I am guessing (and hoping) that that is the case with most MSP interviewees. I like the spirit and the environment and whilst I do not know anything for certain yet, I think I am on the right track for success &amp;#8211; more news will follow and I promise I will keep you all posted!
  &lt;/p&gt;
  
  &lt;p&gt;
    P.S. Don&amp;#8217;t mind the ugly face on the picture 😛 there was heavy wind blowing on there.&amp;lt;/div&amp;gt;
&lt;/p&gt;&lt;/div&gt;
</description>
        <pubDate>Wed, 13 Aug 2008 10:03:00 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2008/08/microsoft-student-partner-pt-2/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2008/08/microsoft-student-partner-pt-2/</guid>
        
        
        <category>microsoft</category>
        
        <category>Microsoft Student Partner</category>
        
        <category>MSP</category>
        
        <category>my life</category>
        
      </item>
    
      <item>
        <title>Microsoft Student Partner</title>
        <description>&lt;div style=&quot;text-align: justify;&quot;&gt;
  Hello my dear friends and readers in general,&amp;lt;/p&amp;gt; 
  
  &lt;p&gt;
    I come here today with a subject of great happiness and ecstasy! I was called in by Microsoft to be «interviewed» for Microsoft&amp;#8217;s Student Partner Program in Lisbon 😀 . So on August 13th there I shall go and attempt my best at getting the position. For the first time I will be even entering Microsoft&amp;#8217;s building so that alone is already stomach-tickling. It&amp;#8217;s set to be a great experience and I can but hope that I get a position as a MSP.
  &lt;/p&gt;
  
  &lt;p&gt;
    As my best-friend would say: the plot thickens. 😉
  &lt;/p&gt;
  
  &lt;p&gt;
    I shall keep news coming on this blog so stay tuned!
  &lt;/p&gt;
&lt;/div&gt;
</description>
        <pubDate>Fri, 08 Aug 2008 15:59:00 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2008/08/microsoft-student-partner/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2008/08/microsoft-student-partner/</guid>
        
        
        <category>my life</category>
        
      </item>
    
      <item>
        <title>Google Code Jam part 2</title>
        <description>&lt;div style=&quot;text-align: justify;&quot;&gt;
  Here I am again talking about Google Code Jam, unfortunately not with good news. 🙁&amp;lt;/p&amp;gt; 
  
  &lt;p&gt;
    That is right, I managed to successfully solve a small data set for one of Code Jam&amp;#8217;s problems but not only did I take a very long time to do so, the large data set was also wrong. This said, at the end I did not have the enough points to get through to the next round and I am out.
  &lt;/p&gt;
  
  &lt;p&gt;
    In a way I am glad that I did not pass&amp;#8230; I was getting an headache after each round, and that&amp;#8217;s something I can do without.
  &lt;/p&gt;
&lt;/div&gt;
</description>
        <pubDate>Mon, 28 Jul 2008 07:52:00 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2008/07/google-code-jam-part-2/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2008/07/google-code-jam-part-2/</guid>
        
        
        <category>code jam</category>
        
        <category>google code jam</category>
        
      </item>
    
      <item>
        <title>Google Code Jam part 1</title>
        <description>&lt;div style=&quot;text-align: justify;&quot;&gt;
  It is with much sorrow that I write this post because unfortunately, I did not pass on the first round of Google Code Jam 🙁 a real shame. The opinion is shared though: many other people were complaining about how cryptic the problem descriptions were and that was so. The genius heads at Google are more likely probing our mind reading capabilities, rather than our skill at &lt;span style=&quot;font-weight: bold;&quot;&gt;programming algorithms&lt;/span&gt;.&amp;lt;/p&amp;gt; 
  
  &lt;p&gt;
    Am I the only one to disagree that on a competition called &amp;#8220;Google &lt;span style=&quot;font-weight: bold;&quot;&gt;Code Jam&lt;/span&gt;&amp;#8221; we are to be tested on our mathematical skills? I mean, for God&amp;#8217;s sake, programming is not (just) about maths! There is so much more to it. One thing I can tell you all: I am going to try my luck tomorrow, but certainly not going to apply for the 2009 version of the competition.
  &lt;/p&gt;
  
  &lt;p&gt;
    I am done with the headaches for no end-game at all. And now&amp;#8230;. Stargate Atlantis time, the true joy of life 😉
  &lt;/p&gt;
&lt;/div&gt;
</description>
        <pubDate>Sat, 26 Jul 2008 15:45:00 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2008/07/google-code-jam-part-1/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2008/07/google-code-jam-part-1/</guid>
        
        
        <category>code jam</category>
        
        <category>google code jam</category>
        
        <category>my life</category>
        
      </item>
    
      <item>
        <title>First Post</title>
        <description>&lt;div style=&quot;text-align: justify;&quot;&gt;
  Well, here goes my first post.&amp;lt;/p&amp;gt; 
  
  &lt;p&gt;
    At the moment, this is the blog where I will publish my ideas, applications that I develop and news of my world. I have a website of my own on the making but that will still take a while until it is fully operational. Until then, a simple blog will have to do.
  &lt;/p&gt;
  
  &lt;p&gt;
    Stay tuned because in a little while I will be publishing my first application for the masses: the TeddyBearNotes.&amp;lt;/div&amp;gt;
&lt;/p&gt;&lt;/div&gt;
</description>
        <pubDate>Tue, 22 Jul 2008 16:40:00 +0100</pubDate>
        <link>https://www.tiagoespinha.net/2008/07/first-post/</link>
        <guid isPermaLink="true">https://www.tiagoespinha.net/2008/07/first-post/</guid>
        
        
        <category>Uncategorized</category>
        
      </item>
    
  </channel>
</rss>
