<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Bruno Pedro</title><link>https://brunopedro.com/</link><description>Recent content on Bruno Pedro</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Mon, 22 Sep 2025 17:43:58 +0200</lastBuildDate><atom:link href="https://brunopedro.com/index.xml" rel="self" type="application/rss+xml"/><item><title>Startups</title><link>https://brunopedro.com/startups/</link><pubDate>Wed, 03 Sep 2025 17:07:25 +0200</pubDate><guid>https://brunopedro.com/startups/</guid><description>&lt;ul>
&lt;li>&lt;a href="https://seedcamp.com/welcome-to-seedcamp-vi/">Seedcamp&lt;/a> (LP): Europe&amp;rsquo;s seed fund, &lt;em>2023–now&lt;/em>&lt;/li>
&lt;li>&lt;a href="https://blokness.io/">Blokness&lt;/a> (Advisor): Reliable, real-time NFT data, &lt;em>2022–now&lt;/em>&lt;/li>
&lt;li>&lt;a href="https://www.nubentos.com/">Nubentos&lt;/a> (Investor): the API Marketplace For Health, &lt;em>2020–2023&lt;/em>&lt;/li>
&lt;li>&lt;a href="https://landbot.io">Landbot&lt;/a> (Advisor): A SaaS platform that enables companies to create memorable conversational experiences, &lt;em>2019–2021&lt;/em>&lt;/li>
&lt;li>&lt;a href="https://www.fleksy.com/">Fleksy&lt;/a> (Advisor): The easiest and fastest content access while typing on a mobile device, &lt;em>2018–2019&lt;/em>&lt;/li>
&lt;li>&lt;a href="https://blog.hitchhq.com/">Hitch&lt;/a> (co-founder and CTO): A single platform to help API owners engage with and grow their API community, &lt;em>2016–2017&lt;/em>&lt;/li>
&lt;li>[API Changelog][3] (co-founder and CTO): API documentation monitoring and notification, &lt;em>2015–2017&lt;/em>&lt;/li>
&lt;li>&lt;a href="http://nubera.com/">Nubera&lt;/a> (CTO): the company behind &lt;a href="http://getapp.com/">GetApp&lt;/a> and &lt;a href="http://cloudwork.com/">CloudWork&lt;/a>, &lt;em>2012–2014&lt;/em> (acquired by &lt;a href="http://www.gartner.com/">Gartner&lt;/a> in 2015)&lt;/li>
&lt;li>[tarpipe][4] (co-founder): a publishing mediation and distribution platform, &lt;em>2008–2012&lt;/em> (acquired by &lt;a href="http://nubera.com/">Nubera&lt;/a>)&lt;/li>
&lt;li>[JobTide][5] (founder): a job aggregator and search engine, &lt;em>2006–2011&lt;/em> (acquired by &lt;a href="http://adclick.pt">AdClick&lt;/a>)&lt;/li>
&lt;li>&lt;a href="http://eth.pt">eth&lt;/a>: a consulting and Web development company in south Portugal, &lt;em>1999–2002&lt;/em>&lt;/li>
&lt;/ul></description></item><item><title>Open-source Projects</title><link>https://brunopedro.com/open-source-projects/</link><pubDate>Mon, 10 Jun 2024 10:00:00 +0000</pubDate><guid>https://brunopedro.com/open-source-projects/</guid><description>&lt;h2 id="open-source-projects">
Open-source projects
&lt;a href="#open-source-projects" class="heading-anchor">#&lt;/a>
&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://github.com/bpedro/postman-openapi-sync">postman-openapi-sync&lt;/a>, &lt;em>2021–now&lt;/em>&lt;/li>
&lt;li>&lt;a href="https://github.com/bpedro/express-glitch-keepalive">express-glitch-keepalive&lt;/a>, &lt;em>2018–now&lt;/em>&lt;/li>
&lt;li>&lt;a href="https://github.com/bpedro/node-fs">node-fs&lt;/a>, &lt;em>2011–now&lt;/em>&lt;/li>
&lt;li>intercom-php, &lt;em>2013–2014&lt;/em>&lt;/li>
&lt;li>&lt;a href="http://www.horde.org/">Horde&lt;/a> Template compilation code (used by the &lt;a href="http://www.horde.org/imp">IMP&lt;/a> Webmail Client), &lt;em>November 2006&lt;/em>&lt;/li>
&lt;li>&lt;a href="http://pear.php.net/">PEAR&lt;/a> &lt;a href="http://pear.php.net/manual/en/package.authentication.auth.storage.soap.php">Auth_Container_SOAP&lt;/a>, &lt;em>2003–now&lt;/em>&lt;/li>
&lt;li>&lt;a href="http://www.proftpd.org/">ProFTPD&lt;/a> &lt;a href="http://sourceforge.net/projects/mod-quota-ldap/">Quota LDAP Module&lt;/a>, &lt;em>May 2003&lt;/em>&lt;/li>
&lt;li>&lt;a href="http://sourceforge.net/projects/phdwait">phdwait&lt;/a> (PHP Database Web Application Toolkit), &lt;em>September 2002&lt;/em>&lt;/li>
&lt;/ul></description></item><item><title>Translating user benefits into API capabilities</title><link>https://brunopedro.com/2023/08/01/translating-user-benefits-into-api-capabilities/</link><pubDate>Tue, 01 Aug 2023 00:00:00 +0000</pubDate><guid>https://brunopedro.com/2023/08/01/translating-user-benefits-into-api-capabilities/</guid><description>&lt;p>&lt;label for="marginnote-1" class="margin-toggle marginnote-ind">&lt;/label>
&lt;input type="checkbox" id="marginnote-1" class="margin-toggle"/>
&lt;span class="marginnote">
This post was originally published on the Postman blog as &lt;a href="https://blog.postman.com/translating-user-benefits-into-api-capabilities/">“Translating user benefits into API capabilities”&lt;/a>. The original content was professionally edited.
&lt;/span>&lt;/p>
&lt;p>As part of my ongoing work designing the &lt;a href="https://blog.postman.com/announcing-postman-open-technologies/" title="https://blog.postman.com/announcing-postman-open-technologies/">Postman Open Technologies&lt;/a> &lt;a href="https://www.postman.com/postman/workspace/postman-open-technologies-knowledge-base-api/overview" title="https://www.postman.com/postman/workspace/postman-open-technologies-knowledge-base-api/overview">Knowledge Base API&lt;/a>, I have identified most of the technical characteristics of the API. Now I need to define the capabilities that the API will offer.&lt;/p>
&lt;p>I’ve been following our internal API design playbook, which covers the strategy, definition, validation, and specification. I already finished the strategy step by &lt;a href="https://blog.postman.com/build-successful-api-by-understanding-user-personas/" title="https://blog.postman.com/build-successful-api-by-understanding-user-personas/">documenting the user personas&lt;/a>, &lt;a href="https://blog.postman.com/interviewing-potential-users-before-designing-api/" title="https://blog.postman.com/interviewing-potential-users-before-designing-api/">interviewing potential API users&lt;/a>, and &lt;a href="https://blog.postman.com/how-to-choose-between-rest-vs-graphql-vs-grpc-vs-soap/" title="https://blog.postman.com/how-to-choose-between-rest-vs-graphql-vs-grpc-vs-soap/">identifying the API architectural style&lt;/a>. I’m still in the API definition phase, where I’m defining the API’s capabilities. When I say “capabilities,” I’m referring to the functionality that the API will offer to fulfill the needs of potential users. A capability can be reduced to a feature or a set of features, depending on its complexity.&lt;/p></description></item><item><title>How to choose between REST vs. GraphQL vs. gRPC vs. SOAP</title><link>https://brunopedro.com/2023/06/29/how-to-choose-between-rest-vs-graphql-vs-grpc-vs-soap/</link><pubDate>Thu, 29 Jun 2023 00:00:00 +0000</pubDate><guid>https://brunopedro.com/2023/06/29/how-to-choose-between-rest-vs-graphql-vs-grpc-vs-soap/</guid><description>&lt;p>&lt;label for="marginnote-1" class="margin-toggle marginnote-ind">&lt;/label>
&lt;input type="checkbox" id="marginnote-1" class="margin-toggle"/>
&lt;span class="marginnote">
This post was originally published on the Postman blog as &lt;a href="https://blog.postman.com/how-to-choose-between-rest-vs-graphql-vs-grpc-vs-soap/">“How to choose between REST vs. GraphQL vs. gRPC vs. SOAP”&lt;/a>. The original content was professionally edited.
&lt;/span>&lt;/p>
&lt;p>To create the &lt;a href="https://blog.postman.com/announcing-postman-open-technologies/" title="https://blog.postman.com/announcing-postman-open-technologies/">Postman Open Technologies&lt;/a> &lt;a href="https://www.postman.com/postman/workspace/postman-open-technologies-knowledge-base-api/overview" title="https://www.postman.com/postman/workspace/postman-open-technologies-knowledge-base-api/overview">Knowledge Base API&lt;/a>, I’ve been following our team’s internal API design playbook, which covers the strategy, definition, validation, and specification of an API. After finishing the strategy phase by &lt;a href="https://blog.postman.com/interviewing-potential-users-before-designing-api/" title="https://blog.postman.com/interviewing-potential-users-before-designing-api/">interviewing potential API users&lt;/a>, I’m now in the definition phase, where the goal is to document what the API will offer.&lt;/p></description></item><item><title>What I learned from interviewing potential users before designing an API</title><link>https://brunopedro.com/2023/05/31/interviewing-potential-users-before-designing-api/</link><pubDate>Wed, 31 May 2023 00:00:00 +0000</pubDate><guid>https://brunopedro.com/2023/05/31/interviewing-potential-users-before-designing-api/</guid><description>&lt;p>&lt;label for="marginnote-1" class="margin-toggle marginnote-ind">&lt;/label>
&lt;input type="checkbox" id="marginnote-1" class="margin-toggle"/>
&lt;span class="marginnote">
This post was originally published on the Postman blog as &lt;a href="https://blog.postman.com/interviewing-potential-users-before-designing-api/">“What I learned from interviewing potential users before designing an API”&lt;/a>. The original content was professionally edited.
&lt;/span>&lt;/p>
&lt;p>I&amp;rsquo;ve been working on the &lt;a href="https://blog.postman.com/announcing-postman-open-technologies/">Postman Open Technologies&lt;/a> Knowledge Base project with the goal of implementing the &lt;a href="https://www.postman.com/postman/workspace/postman-open-technologies-knowledge-base-api/overview">Knowledge Base API&lt;/a>. I&amp;rsquo;ve followed the API design steps we use internally: strategy, definition, validation, and specification. This blog post explores my journey through the strategy step, particularly the part where I interview API stakeholders. The output of the strategy step consists of findings and evidence that back the importance of building the API, and interviewing stakeholders provides key information that I use to reinforce the value of the API. Keep reading to learn more—and stay tuned for a follow-up post that goes into greater detail about how I identified the architectural style of the API by learning from users what tools they use.&lt;/p></description></item><item><title>Build a successful API by understanding user personas</title><link>https://brunopedro.com/2023/05/16/build-successful-api-by-understanding-user-personas/</link><pubDate>Tue, 16 May 2023 00:00:00 +0000</pubDate><guid>https://brunopedro.com/2023/05/16/build-successful-api-by-understanding-user-personas/</guid><description>&lt;p>&lt;label for="marginnote-1" class="margin-toggle marginnote-ind">&lt;/label>
&lt;input type="checkbox" id="marginnote-1" class="margin-toggle"/>
&lt;span class="marginnote">
This post was originally published on the Postman blog as &lt;a href="https://blog.postman.com/build-successful-api-by-understanding-user-personas/">“Build a successful API by understanding user personas”&lt;/a>. The original content was professionally edited.
&lt;/span>&lt;/p>
&lt;p>&lt;a href="https://github.com/postman-open-technologies/knowledge-base" title="https://github.com/postman-open-technologies/knowledge-base">Postman Open Technologies Knowledge Base&lt;/a> is a new project with the goal of providing insights from a vast amount of information about APIs available on the internet. One of the project&amp;rsquo;s objectives is to provide an API that consumers can use to retrieve information from the Knowledge Base. The result? As part of my work on the &lt;a href="https://learning.postman.com/open-technologies/" title="https://learning.postman.com/open-technologies/">Postman Open Technologies team&lt;/a>, I have been building the Knowledge Base API.&lt;/p></description></item><item><title>How to build an API-centric AI platform</title><link>https://brunopedro.com/2023/03/24/api-ai-platform/</link><pubDate>Fri, 24 Mar 2023 10:34:04 +0100</pubDate><guid>https://brunopedro.com/2023/03/24/api-ai-platform/</guid><description>&lt;p>&lt;a href="https://openai.com/">OpenAI&lt;/a>&amp;rsquo;s approach with their plugins strategy is a lesson to every founder trying to build a platform. OpenAI &lt;a href="https://openai.com/blog/chatgpt-plugins">announced&lt;/a> their ChatGPT plugins offer on March 23, 2023. Their announcement blog post says they &amp;ldquo;are gradually rolling out plugins in ChatGPT so we can study their real-world use, impact, and safety and alignment challenges.&amp;rdquo; They&amp;rsquo;re launching the plugin platform with several third parties, including &lt;a href="https://www.wolfram.com/">Wolfram&lt;/a> and &lt;a href="https://zapier.com/">Zapier&lt;/a>.&lt;/p>
&lt;p>Let&amp;rsquo;s see how OpenAI has evolved to reach the point where it&amp;rsquo;s now becoming a platform. It started as something that you could &amp;ldquo;play with&amp;rdquo; to chat with a bot that would answer questions, remember? OpenAI &lt;a href="https://openai.com/blog/chatgpt">launched&lt;/a> ChatGPT in November 2022 to get its AI engine in front of as many people as possible. By launching something far from perfect, they started gaining knowledge about what people really wanted from an AI-powered chat system. As more people were using the chat system, OpenAI evolved it by fixing bugs, making it faster, adding layers of feedback loops, and, most importantly, learning their &amp;ldquo;product holes&amp;rdquo; (more on that later).&lt;/p></description></item><item><title>Calendar-Based API Versioning</title><link>https://brunopedro.com/2022/12/01/calendar-based-api-versioning/</link><pubDate>Thu, 01 Dec 2022 18:57:41 +0100</pubDate><guid>https://brunopedro.com/2022/12/01/calendar-based-api-versioning/</guid><description>&lt;p>&lt;a href="https://github.com/timrogers">Tim Rogers&lt;/a>, a Product Manager at GitHub, recently &lt;a href="https://github.blog/2022-11-28-to-infinity-and-beyond-enabling-the-future-of-githubs-rest-api-with-api-versioning/">announced&lt;/a> that they are moving from incremental API versioning to something they&amp;rsquo;re calling &amp;ldquo;calendar-based.&amp;rdquo; The announcement explains what calendar-based versioning is and why GitHub is adopting it now. Calendar-based versioning allows GitHub to introduce breaking changes regularly without upsetting API consumers. Consumers won&amp;rsquo;t get mad because they can &lt;em>pin&lt;/em> their requests to a particular API version, so they&amp;rsquo;re sure it won&amp;rsquo;t contain any breaking changes.&lt;/p></description></item><item><title>Event-driven Feature Development</title><link>https://brunopedro.com/2022/10/19/event-driven-feature-development/</link><pubDate>Wed, 19 Oct 2022 11:20:00 +0200</pubDate><guid>https://brunopedro.com/2022/10/19/event-driven-feature-development/</guid><description>&lt;p>Sharing information between different features can be done in a synchronous or asynchronous fashion. Following an asynchronous communication style doesn’t mean that you’re sharing events. You can, for instance, pass commands between features. By doing so, you’re creating a strong functional dependency between features. To avoid that, you should instead share information about things that happened, or events. By sharing events, you create opportunities for other features to become more relevant to users while acting independently.&lt;/p></description></item><item><title>API User Experience</title><link>https://brunopedro.com/2020/11/22/api-user-experience/</link><pubDate>Sun, 22 Nov 2020 18:00:00 +0200</pubDate><guid>https://brunopedro.com/2020/11/22/api-user-experience/</guid><description>&lt;p>API User Experience or, in short, APIUX is the experience that any user interacting with your API will feel. It includes not only the developers writing code that integrates with your API but also end users that are using your API indirectly through third-party applications. As you will see, the way you design your API has a profound impact in the way even end users experience an application that consumes your API.&lt;/p></description></item><item><title>The illusion of immediacy</title><link>https://brunopedro.com/2020/10/05/the-illusion-of-immediacy/</link><pubDate>Mon, 05 Oct 2020 16:00:00 +0200</pubDate><guid>https://brunopedro.com/2020/10/05/the-illusion-of-immediacy/</guid><description>&lt;p>Immediacy is a concept that is often not easy to grasp. Most people think of immediacy as something related to what is happening around them when, in fact, the main factor of immediacy is that they are actively involved. Immediacy is considered to be the direct and instant involvement with something. Being involved with something means that you are also participating and possibly affecting the behavior of your experience. I believe the detail of being involved with is crucial as it distinguishes immediacy from any &amp;ldquo;spectator sport&amp;rdquo; where you would be merely watching and not interacting with the situation. Immediacy provides a sense of integration with the situation you&amp;rsquo;re experiencing, making you feel that time stops. The only thing you are doing is absorbing the experience without any contextual boundaries.&lt;/p></description></item><item><title>A world of messages</title><link>https://brunopedro.com/2020/06/16/a-world-of-messages/</link><pubDate>Tue, 16 Jun 2020 18:00:00 +0200</pubDate><guid>https://brunopedro.com/2020/06/16/a-world-of-messages/</guid><description>&lt;p>The world is full of messages, but we don&amp;rsquo;t realize that until we stop long enough to pay attention. How so? Look at how people interact with each other. What are they doing and saying? How are they communicating? Are they expecting some sort of feedback from one another?&lt;/p>
&lt;p>Humans are hardwired to expect others to communicate using messages. Even though most of our communication is non-verbal, messages take up the most substantial part of the way we humans convey meaning. Some messages are short-lived, and people expect a reaction to them within seconds. Other messages are very long-lived and might take days or weeks to reach their destination. The senders of those messages don&amp;rsquo;t expect a reply to happen quickly. Sometimes a response is not even expected at all.&lt;/p></description></item><item><title>Platforms are communities</title><link>https://brunopedro.com/2020/02/26/platforms-are-communities/</link><pubDate>Wed, 26 Feb 2020 18:15:00 +0200</pubDate><guid>https://brunopedro.com/2020/02/26/platforms-are-communities/</guid><description>&lt;p>The platform economy is growing more robust than ever. According to &lt;a href="https://www.mckinsey.com/business-functions/strategy-and-corporate-finance/our-insights/the-strategy-and-corporate-finance-blog/if-youre-not-building-an-ecosystem-chances-are-your-competitors-are" title="If you’re not building an ecosystem, chances are your competitors are">McKinsey&lt;/a>, in 2025, digital platforms will be accountable for over 30% of the whole economy. In their 2018 article, they mention that by 2025 &amp;ldquo;an emerging set of digital ecosystems could account for more than $60 trillion in revenue.&amp;rdquo; However, only about 3% of global companies have already adopted a platform strategy. The big players are not sleeping and have already been investing in building their platforms. Companies like Amazon, Apple, Facebook, Google, and Microsoft already have their businesses on top of platform models. Overall, platforms are already driving seven of the most valuable companies in the world. It&amp;rsquo;s clear that the platform economy is a critical driver in business growth. Companies that haven&amp;rsquo;t yet adopted a platform business model should be making their move sooner rather than later. So, what exactly is a platform?&lt;/p></description></item><item><title>Enabling a two-sided market</title><link>https://brunopedro.com/2019/12/16/enabling-a-two-sided-market/</link><pubDate>Mon, 16 Dec 2019 17:15:00 +0200</pubDate><guid>https://brunopedro.com/2019/12/16/enabling-a-two-sided-market/</guid><description>&lt;p>If you&amp;rsquo;re building or growing a platform business, you will face the challenge of understanding how you can enable a two-sided market. Two-sided markets are important because they are the engines that will make your platform grow without your intervention.&lt;/p>
&lt;blockquote>
&lt;p>(&amp;hellip;) for a platform business, user commitment and &lt;strong>active usage&lt;/strong>, not sign-ups or acquisitions, are the true indicators of customer adoption. That’s why platforms must &lt;strong>attract users&lt;/strong> by structuring &lt;strong>incentives for participation&lt;/strong>—preferably incentives that are organically connected to the interactions made possible by the platform.—Choudary, Sangeet Paul, “Platform Revolution”, p. 85.&lt;/p></description></item><item><title>Happiness at work</title><link>https://brunopedro.com/2019/09/05/happiness-at-work/</link><pubDate>Thu, 05 Sep 2019 15:50:00 +0200</pubDate><guid>https://brunopedro.com/2019/09/05/happiness-at-work/</guid><description>&lt;p>What makes you really happy about your work? I ask this question during most of my interviews. Candidates feel surprised with the question and try their best to express what really makes them happy about work. I like to think that I ask that question so I can better understand them and, especially, what drives them. That way I can decide if they are a fit for what I&amp;rsquo;m looking for and, if so, how I can set them up for success from the get-go.&lt;/p></description></item><item><title>Non-technical API Design</title><link>https://brunopedro.com/2019/08/27/non-technical-api-design/</link><pubDate>Tue, 27 Aug 2019 15:41:49 +0200</pubDate><guid>https://brunopedro.com/2019/08/27/non-technical-api-design/</guid><description>&lt;p>Yesterday I published a &lt;a href="https://twitter.com/bpedro/status/1165915263042281473">tweet&lt;/a> asking people that consider themselves API Designers what their job consists of. It&amp;rsquo;s interesting to see that I&amp;rsquo;ve got a bunch of answers but not the ones I was looking for. The thing to note is that most people who believe they work in API Design are actually working on &lt;em>technical&lt;/em> API definition, not on designing the API from the ground up. Their job primarily consists of making sure that the API is well defined and documented from a technical point of view. They measure their success by how easy developers understand and start using the APIs that they&amp;rsquo;re defining.&lt;/p></description></item><item><title>What are Web APIs</title><link>https://brunopedro.com/2017/11/08/what-are-web-apis/</link><pubDate>Wed, 08 Nov 2017 00:00:00 +0000</pubDate><guid>https://brunopedro.com/2017/11/08/what-are-web-apis/</guid><description>&lt;p>&lt;label for="marginnote-1" class="margin-toggle marginnote-ind">&lt;/label>
&lt;input type="checkbox" id="marginnote-1" class="margin-toggle"/>
&lt;span class="marginnote">
This post was originally published on Hacker Noon as &lt;a href="https://hackernoon.com/what-are-web-apis-c74053fa4072">“What are Web APIs”&lt;/a>.
&lt;/span>
In this article, I will introduce you broadly to the topic of Web APIs. I will start by explaining what APIs are, how they evolved into Web APIs, and how developers like yourself can use them. Then we will outline the history of Web APIs along the numerous different approaches that took place over the years.&lt;/p></description></item><item><title>5 steps to API frustration</title><link>https://brunopedro.com/2017/10/19/5-steps-to-api-frustration/</link><pubDate>Thu, 19 Oct 2017 00:00:00 +0000</pubDate><guid>https://brunopedro.com/2017/10/19/5-steps-to-api-frustration/</guid><description>&lt;p>This article is a satire that describes what often happens to developers that are looking for an API and want to integrate with it. I’m pretty sure that some of the things have happened to you at some point in time. If you’re an API provider, you should think hard about how you’re dealing with the five topics that I’m about to expose.&lt;/p>
&lt;h2 id="1-search">
1. Search
&lt;a href="#1-search" class="heading-anchor">#&lt;/a>
&lt;/h2>
&lt;p>It all starts with search. You want to find an API that can offer you a particular feature. You also want to be able to integrate your software with it quickly. You don’t have time to implement things yourself, and that’s the main reason why you’re looking for an API that does the job for you. Most of the times you look around, but you can’t find anything that suits your needs.&lt;/p></description></item><item><title>API Friction</title><link>https://brunopedro.com/2017/10/18/api-friction/</link><pubDate>Wed, 18 Oct 2017 00:00:00 +0000</pubDate><guid>https://brunopedro.com/2017/10/18/api-friction/</guid><description>&lt;p>The concept of friction in products and applications is not something new and can be experienced by almost everyone. Product friction is represented by all the barriers and difficulties people find when trying to use a product.&lt;/p>
&lt;blockquote>
&lt;p>Every Web site that makes you fill in a form, or wait for a confirmation e-mail, or take some test to prove that you are human is adding friction — and losing sales. — &lt;a href="https://www.scientificamerican.com/article/technologys-friction-problem/">Pogue, 2012&lt;/a>&lt;/p></description></item><item><title>Growing your business with an API</title><link>https://brunopedro.com/2017/10/17/growing-your-business-with-an-api/</link><pubDate>Tue, 17 Oct 2017 00:00:00 +0000</pubDate><guid>https://brunopedro.com/2017/10/17/growing-your-business-with-an-api/</guid><description>&lt;p>&lt;img src="https://brunopedro.com/media/2017/10/17/growing-your-business-with-an-api-what-to-measure.png" alt="What to measure">&lt;/p>
&lt;p>This article summarizes &lt;a href="https://nordicapis.com/sessions/growing-business-api-measure-success/">a talk&lt;/a> I recently gave at the &lt;a href="http://nordicapis.com/events/the-2017-api-platform-summit/">Nordic APIs Platform Summit&lt;/a> in Stockholm, Sweden. The full title of the presentation is &amp;ldquo;Growing your business with an API: how to measure your success&amp;rdquo; and it explores the idea that you should be able to measure how your API is contributing to your business revenue.&lt;/p>
&lt;h2 id="introduction">
Introduction
&lt;a href="#introduction" class="heading-anchor">#&lt;/a>
&lt;/h2>
&lt;p>How can you grow your business revenue by using APIs? In this article, you will understand the concept of “Integrated Product” and how it can help you reach product-market fit and generate revenue. You will also learn how to effectively measure the success of your API and its integrations with multiple third parties. By the end, you’ll be able to identify which parts of your API need improvement, which are the ones driving revenue, and the ones that should be deprecated.&lt;/p></description></item><item><title>Interfaces</title><link>https://brunopedro.com/2017/01/04/interfaces/</link><pubDate>Wed, 04 Jan 2017 00:00:00 +0000</pubDate><guid>https://brunopedro.com/2017/01/04/interfaces/</guid><description>&lt;p>What is an interface? Is it something that a user sees on a screen? Is it the border between different elements? Is it a way to get to some other place?&lt;/p>
&lt;p>An interface is the &lt;strong>common boundary of two entities&lt;/strong>. It’s the place where independent entities &lt;strong>communicate with each other&lt;/strong>.&lt;/p>


 &lt;figure >
 
 &lt;label for="marginfig-1" class="margin-toggle marginnote-ind">&lt;/label>
 &lt;input type="checkbox" id="marginfig-1" class="margin-toggle"/>
 &lt;span class="marginnote">

&lt;strong>Interface. &lt;/strong>
A common boundary of two entities.



&lt;/span>



 
 &lt;img src="https://brunopedro.com/media/2017/01/04/interfaces_01.png" alt="Image">
 




&lt;/figure>


&lt;p>Interfaces are everywhere. When you walk and feel the floor beneath your feet there’s an interface between your body and the floor. When you talk to someone, your voice is the interface between yourself and the other person.&lt;/p></description></item><item><title>GraphQL: 3 reasons not to use it</title><link>https://brunopedro.com/2016/11/03/graphql-3-reasons-not-to-use-it/</link><pubDate>Thu, 03 Nov 2016 00:00:00 +0000</pubDate><guid>https://brunopedro.com/2016/11/03/graphql-3-reasons-not-to-use-it/</guid><description>&lt;p>&lt;label for="marginnote-1" class="margin-toggle marginnote-ind">&lt;/label>
&lt;input type="checkbox" id="marginnote-1" class="margin-toggle"/>
&lt;span class="marginnote">
This post was originally published on the Hitch blog as &lt;a href="https://blog.hitchhq.com/graphql-3-reasons-not-to-use-it-7715f60cb934">“GraphQL: 3 reasons not to use it”&lt;/a>.
&lt;/span>
&lt;a href="http://graphql.org/">GraphQL&lt;/a> is a query language created by Facebook in 2012. Its purpose is to describe the capabilities and requirements of data models for client-server applications. Facebook has been using GraphQL ever since and it has been open sourced in 2015. Its specification is evolving in the form of a &lt;a href="https://facebook.github.io/graphql/">Draft RFC&lt;/a>.&lt;/p>
&lt;p>The primary motivation to create GraphQL was that, &lt;a href="https://www.infoq.com/news/2015/10/graphql-your-schema">according to Lee Byron&lt;/a>, Facebook &amp;ldquo;started with a system that looked a lot like a traditional RESTful server but found it difficult to use as iOS developers, and saw conflict between the &lt;strong>desire to load all information in a single round trip&lt;/strong> while keeping REST resources well isolated.&amp;rdquo;&lt;/p></description></item><item><title>Machine-readable API Discovery</title><link>https://brunopedro.com/2016/04/13/machine-readable-api-discovery/</link><pubDate>Wed, 13 Apr 2016 00:00:00 +0000</pubDate><guid>https://brunopedro.com/2016/04/13/machine-readable-api-discovery/</guid><description>&lt;p>API Discovery is the process of finding the right API that meets your needs. What is the best way to automate it? Machine-readable definitions let your software discover which APIs to use. One such definition format is APIs.json. It lets you group several APIs together and point to other machine-readable documents. Each of those documents defines things such as pricing, license agreements, and provisioning options.&lt;/p>


 &lt;figure >
 










 
 &lt;img src="https://brunopedro.com/media/2016/04/13/machine_readable_api_discovery.png" alt="Image">
 




&lt;/figure>


&lt;p>Do you want to know more how machine-readable formats help with different types of automation? Check out this presentation about &lt;a href="http://www.slideshare.net/bpedro/how-to-automate-api-discovery">How to Automate API Discovery&lt;/a>.&lt;/p></description></item><item><title>Complexity in Microservices</title><link>https://brunopedro.com/2016/03/02/complexity-in-microservices/</link><pubDate>Wed, 02 Mar 2016 00:00:00 +0000</pubDate><guid>https://brunopedro.com/2016/03/02/complexity-in-microservices/</guid><description>&lt;p>As you add microservices to your stack, the number of connections follows &lt;a href="https://en.wikipedia.org/wiki/Metcalfe%27s_law">Metcalfe’s law&lt;/a>. In the simplest case, there’s just a single connection between two services. As you reach five services, connections can happen in 10 different ways. A stack with twenty services has 190 possible connections. The complexity of managing, supporting, and understanding those connections is something you should consider as your stack grows.&lt;/p>


 &lt;figure >
 
 &lt;label for="marginfig-1" class="margin-toggle marginnote-ind">&lt;/label>
 &lt;input type="checkbox" id="marginfig-1" class="margin-toggle"/>
 &lt;span class="marginnote">

&lt;strong>Complexity in Microservices. &lt;/strong>
The number of connections between microservices follows Metcalfe’s law: \(n \cdot \frac{(n-1)}{2}\).



&lt;/span>



 
 &lt;img src="https://brunopedro.com/media/2016/03/02/complexity_in_microservices.png" alt="Image">
 




&lt;/figure>


&lt;p>Have you ever faced complexity in microservices yourself? Learn more about it with this presentation about &lt;a href="http://www.slideshare.net/bpedro/asynchronous-microservices-in-nodejs">Asynchronous Microservices&lt;/a>.&lt;/p></description></item><item><title>API Testing Complexity</title><link>https://brunopedro.com/2016/02/25/api-testing-complexity/</link><pubDate>Thu, 25 Feb 2016 00:00:00 +0000</pubDate><guid>https://brunopedro.com/2016/02/25/api-testing-complexity/</guid><description>&lt;p>You can think of API testing as a mix of different strategies, each having its own purpose. &lt;strong>Unit testing&lt;/strong> is all about making sure that your code consumes the API in a reliable way. &lt;strong>Functional&lt;/strong>, or black box testing, lets you know how the API replies to specific requests. &lt;strong>Load testing&lt;/strong> follows the functional testing patterns making repeated API calls, measuring response times.&lt;/p>


 &lt;figure >
 
 &lt;label for="marginfig-1" class="margin-toggle marginnote-ind">&lt;/label>
 &lt;input type="checkbox" id="marginfig-1" class="margin-toggle"/>
 &lt;span class="marginnote">

&lt;strong>API Testing Complexity. &lt;/strong>
API testing complexity increases the deeper you go.



&lt;/span>



 
 &lt;img src="https://brunopedro.com/media/2016/02/25/api-testing-complexity.png" alt="Image">
 




&lt;/figure>


&lt;p>Are there any tools that help you manage your API testing? Find more information at this presentation on &lt;a href="http://www.slideshare.net/bpedro/how-to-automate-api-testing">How to Automate API Testing&lt;/a>.&lt;/p></description></item><item><title>Latency in Microservices</title><link>https://brunopedro.com/2016/02/24/latency-in-microservices/</link><pubDate>Wed, 24 Feb 2016 00:00:00 +0000</pubDate><guid>https://brunopedro.com/2016/02/24/latency-in-microservices/</guid><description>&lt;p>Generally speaking, you can define &lt;a href="https://en.wikipedia.org/wiki/Latency_%28engineering%29">latency&lt;/a> as the &lt;em>time delay between the cause and the effect of some change in the system being observed&lt;/em>. In a point to point communication, you calculate latency as the time it takes to get a response from the system. When you involve many services in a single &lt;em>workflow&lt;/em> then the latency is the sum of all the response times.&lt;/p>


 &lt;figure >
 
 &lt;label for="marginfig-1" class="margin-toggle marginnote-ind">&lt;/label>
 &lt;input type="checkbox" id="marginfig-1" class="margin-toggle"/>
 &lt;span class="marginnote">

&lt;strong>Latency in Microservices. &lt;/strong>
Latency is the sum of all response times: \(L=\sum_0^n t_n\).



&lt;/span>



 
 &lt;img src="https://brunopedro.com/media/2016/02/24/latency_in_microservices.png" alt="Image">
 




&lt;/figure>


&lt;p>How can you avoid latency in microservices? Learn more about it with this presentation about &lt;a href="http://www.slideshare.net/bpedro/asynchronous-microservices-in-nodejs">Asynchronous Microservices&lt;/a>.&lt;/p></description></item><item><title>API Lifecycle Operations Stage</title><link>https://brunopedro.com/2015/04/17/api-lifecycle-operations-stage/</link><pubDate>Fri, 17 Apr 2015 00:00:00 +0000</pubDate><guid>https://brunopedro.com/2015/04/17/api-lifecycle-operations-stage/</guid><description>&lt;p>&lt;label for="marginnote-1" class="margin-toggle marginnote-ind">&lt;/label>
&lt;input type="checkbox" id="marginnote-1" class="margin-toggle"/>
&lt;span class="marginnote">
This post was originally published on the Nordic APIs blog as &lt;a href="https://nordicapis.com/api-lifecycle-operations-stage-marketing-your-api/">“API Lifecycle Operations Stage: Marketing Your API”&lt;/a>.
&lt;/span>
By reading this article you’ll understand what factors make up the API Lifecycle &lt;strong>Operations Stage&lt;/strong>, and how you should address them. Transforming your API into something developers will want to consume, and learning what impact this will have on your business are things we’ll consider at this stage. Other critical actions involve maintaining a positive relationship with your API audience and offering the appropriate support channels.&lt;/p></description></item><item><title>API Lifecycle Development Stage</title><link>https://brunopedro.com/2015/04/10/api-lifecycle-development/</link><pubDate>Fri, 10 Apr 2015 00:00:00 +0000</pubDate><guid>https://brunopedro.com/2015/04/10/api-lifecycle-development/</guid><description>&lt;p>&lt;label for="marginnote-1" class="margin-toggle marginnote-ind">&lt;/label>
&lt;input type="checkbox" id="marginnote-1" class="margin-toggle"/>
&lt;span class="marginnote">
This post was originally published on the Nordic APIs blog as &lt;a href="https://nordicapis.com/api-lifecycle-development/">“API Lifecycle Development Stage: Deploying Your API”&lt;/a>.
&lt;/span>
During the course of this article, you’ll come to understand the actions to take as well as the most important challenges to address during an API’s Development phase. We’ll consider what implementation options are available and explore API Management and why it matters. We’ll define &lt;a href="http://nordicapis.com/why-api-developer-experience-matters-more-than-ever/">API Usability and why it’s important&lt;/a>, and we’ll consider what immediate steps to take after your API is deployed.&lt;/p></description></item><item><title>Common Cases When Using SOAP Makes Sense</title><link>https://brunopedro.com/2015/03/02/common-cases-when-using-soap-makes-sense/</link><pubDate>Mon, 02 Mar 2015 00:00:00 +0000</pubDate><guid>https://brunopedro.com/2015/03/02/common-cases-when-using-soap-makes-sense/</guid><description>&lt;p>&lt;label for="marginnote-1" class="margin-toggle marginnote-ind">&lt;/label>
&lt;input type="checkbox" id="marginnote-1" class="margin-toggle"/>
&lt;span class="marginnote">
This post was originally published on the Nordic APIs blog as &lt;a href="https://nordicapis.com/common-cases-when-using-soap-makes-sense/">“Common Cases When Using SOAP Makes Sense”&lt;/a>.
&lt;/span>
These days when discussing web APIs, a RESTful approach is usually assumed. While this modern architectural paradigm is often used, it isn’t always the best tact depending on the job at hand. The fact is that &lt;a href="http://www.w3.org/TR/soap/">SOAP&lt;/a> is still being used quite a lot today. While not all problems can be elegantly solved with SOAP, it may still be the best choice in some specific situations. Crazy talk? It’s true!&lt;/p></description></item><item><title>Using Templates for Documentation Driven API Design</title><link>https://brunopedro.com/2015/02/19/using-templates-for-documentation-driven-api-design/</link><pubDate>Thu, 19 Feb 2015 00:00:00 +0000</pubDate><guid>https://brunopedro.com/2015/02/19/using-templates-for-documentation-driven-api-design/</guid><description>&lt;p>&lt;label for="marginnote-1" class="margin-toggle marginnote-ind">&lt;/label>
&lt;input type="checkbox" id="marginnote-1" class="margin-toggle"/>
&lt;span class="marginnote">
This post was originally published on the Nordic APIs blog as &lt;a href="https://nordicapis.com/using-templates-for-documentation-driven-api-design/">“Using Templates for Documentation Driven API Design”&lt;/a>.
&lt;/span>
As an API provider it’s important to consider &lt;a href="http://nordicapis.com/5-reasons-why-developers-are-not-using-your-api/">how consumers interact&lt;/a> with your API. While most people leave this task to the very end, API design should, in fact, begin with clear and concise documentation. This practice is often called “Documentation Driven Design” or “Documentation Driven Development” and is followed by many practitioners around the world. &lt;a href="http://tom.preston-werner.com/">Tom Preston-Werner&lt;/a>, founder of GitHub, clearly &lt;a href="http://tom.preston-werner.com/2010/08/23/readme-driven-development.html">outlines&lt;/a> some advantages of this approach:&lt;/p></description></item><item><title>Is REST better than SOAP? Yes, in Some Use Cases</title><link>https://brunopedro.com/2015/01/30/rest-better-than-soap-yes-use-cases/</link><pubDate>Fri, 30 Jan 2015 00:00:00 +0000</pubDate><guid>https://brunopedro.com/2015/01/30/rest-better-than-soap-yes-use-cases/</guid><description>&lt;p>&lt;label for="marginnote-1" class="margin-toggle marginnote-ind">&lt;/label>
&lt;input type="checkbox" id="marginnote-1" class="margin-toggle"/>
&lt;span class="marginnote">
This post was originally published on the Nordic APIs blog as &lt;a href="https://nordicapis.com/rest-better-than-soap-yes-use-cases/">“Is REST better than SOAP? Yes, in Some Use Cases”&lt;/a>.
&lt;/span>
What is REST? What about SOAP? Why were they created and what are their main features? What makes them different, and when should you use one or the other? We gave an &lt;a href="http://nordicapis.com/rest-vs-soap-nordic-apis-infographic-comparison/">overview of REST vs. SOAP&lt;/a> in our recent infographic, but this post delves deeper. Read on for answers to these questions and for an explanation about which use cases lend themselves to a RESTful approach and where SOAP is preferable.&lt;/p></description></item><item><title>Designing APIs for Machines</title><link>https://brunopedro.com/2014/11/27/designing-apis-machines/</link><pubDate>Thu, 27 Nov 2014 00:00:00 +0000</pubDate><guid>https://brunopedro.com/2014/11/27/designing-apis-machines/</guid><description>&lt;p>&lt;label for="marginnote-1" class="margin-toggle marginnote-ind">&lt;/label>
&lt;input type="checkbox" id="marginnote-1" class="margin-toggle"/>
&lt;span class="marginnote">
This post was originally published on the Nordic APIs blog as &lt;a href="https://nordicapis.com/designing-apis-machines/">“Designing APIs for Machines”&lt;/a>.
&lt;/span>
The number of Internet-connected devices is growing at an astonishing rate. According to Cisco, in 2012, there were about 8.7 billion connected devices! In 2013 alone more than 280 thousand new devices were connected every hour, on average. This year, that number grew to more than 360 thousand new devices per hour. Cisco predicts that six years from now there will be more than 50 billion total connected devices making this new mesh the largest available network ever.&lt;/p></description></item><item><title>Designing APIs for Humans</title><link>https://brunopedro.com/2014/11/17/designing-apis-humans/</link><pubDate>Mon, 17 Nov 2014 00:00:00 +0000</pubDate><guid>https://brunopedro.com/2014/11/17/designing-apis-humans/</guid><description>&lt;p>&lt;label for="marginnote-1" class="margin-toggle marginnote-ind">&lt;/label>
&lt;input type="checkbox" id="marginnote-1" class="margin-toggle"/>
&lt;span class="marginnote">
This post was originally published on the Nordic APIs blog as &lt;a href="https://nordicapis.com/designing-apis-humans/">“Designing APIs for Humans”&lt;/a>.
&lt;/span>
One of the most discussed topics at this year’s &lt;a href="http://nordicapis.com/events/stockholm-2014-platform-summit/">NordicAPIs Platform Summit&lt;/a> was &lt;strong>API Design&lt;/strong> and how it can affect the way APIs are consumed. The discussions focussed on how design might affect the end users’ perception of your product. A number of speakers considered this a very important topic, and several discussions occurred throughout the event. According to &lt;a href="http://nordicapis.com/speakers/jason-harmon/">Jason Harmon&lt;/a>, Head of API Design at PayPal, “APIs are starting to look more like the product and less like the technology.” In other words, API Design is starting to look more and more like User Experience (UX), and less like a simple technical mapping of your app’s database.&lt;/p></description></item><item><title>How to stay ahead of third-party API changes</title><link>https://brunopedro.com/2014/11/05/how-to-stay-ahead-of-third-party-api-changes/</link><pubDate>Wed, 05 Nov 2014 00:00:00 +0000</pubDate><guid>https://brunopedro.com/2014/11/05/how-to-stay-ahead-of-third-party-api-changes/</guid><description>&lt;p>&lt;label for="marginnote-1" class="margin-toggle marginnote-ind">&lt;/label>
&lt;input type="checkbox" id="marginnote-1" class="margin-toggle"/>
&lt;span class="marginnote">
This post was originally published on the ZDNet Service Oriented blog as &lt;a href="https://www.zdnet.com/article/how-to-stay-ahead-of-third-party-api-changes/">“How to stay ahead of third-party API changes”&lt;/a>.
&lt;/span>
While most developers know that APIs change all the time, those changes aren’t communicated as often or as clearly as they should. Usually you only find out about what changed when it’s already too late &amp;ndash; and the only choice you have is to react by adapting your integration with the API that changed.&lt;/p></description></item><item><title>How to Spark API Adoption With Good Documentation Practices</title><link>https://brunopedro.com/2014/11/04/spark-api-adoption-good-documentation-practises/</link><pubDate>Tue, 04 Nov 2014 00:00:00 +0000</pubDate><guid>https://brunopedro.com/2014/11/04/spark-api-adoption-good-documentation-practises/</guid><description>&lt;p>&lt;label for="marginnote-1" class="margin-toggle marginnote-ind">&lt;/label>
&lt;input type="checkbox" id="marginnote-1" class="margin-toggle"/>
&lt;span class="marginnote">
This post was originally published on the Nordic APIs blog as &lt;a href="https://nordicapis.com/spark-api-adoption-good-documentation-practises/">“How to Spark API Adoption With Good Documentation Practices”&lt;/a>.
&lt;/span>
While almost everyone seems to agree that documentation is of key importance when launching an API, little is said about how it can actually affect API adoption. &lt;a href="http://blogs.forrester.com/jeffrey_hammond">Jeffrey Hammond&lt;/a>, a Principal Analyst at Forrester, claims that &amp;ldquo;adoption patterns are shifting towards developers,&amp;rdquo; giving them the power to “block or aid the adoption of software.” This means that a significant way to persuade decision makers to choose your software over your competitors’ is to gain the trust and confidence of developers.&lt;/p></description></item><item><title>How to Release a Free API and Get Paid Indirectly</title><link>https://brunopedro.com/2014/10/31/release-free-api-get-paid-indirectly/</link><pubDate>Fri, 31 Oct 2014 00:00:00 +0000</pubDate><guid>https://brunopedro.com/2014/10/31/release-free-api-get-paid-indirectly/</guid><description>&lt;p>&lt;label for="marginnote-1" class="margin-toggle marginnote-ind">&lt;/label>
&lt;input type="checkbox" id="marginnote-1" class="margin-toggle"/>
&lt;span class="marginnote">
This post was originally published on the Nordic APIs blog as &lt;a href="https://nordicapis.com/release-free-api-get-paid-indirectly/">“How to Release a Free API and Get Paid Indirectly”&lt;/a>.
&lt;/span>
API-related business models usually involve a customer actively paying to use the API itself. But consider this: What if you could allow anyone to use your API freely while you retain the power to generate revenue from it? And what if by doing so, you could actually increase your chances of generating even more revenue?&lt;/p></description></item><item><title>How to Achieve Accelerated Growth with APIs</title><link>https://brunopedro.com/2014/10/21/achieve-accelerated-growth-apis/</link><pubDate>Tue, 21 Oct 2014 00:00:00 +0000</pubDate><guid>https://brunopedro.com/2014/10/21/achieve-accelerated-growth-apis/</guid><description>&lt;p>&lt;label for="marginnote-1" class="margin-toggle marginnote-ind">&lt;/label>
&lt;input type="checkbox" id="marginnote-1" class="margin-toggle"/>
&lt;span class="marginnote">
This post was originally published on the Nordic APIs blog as &lt;a href="https://nordicapis.com/achieve-accelerated-growth-apis/">“How to Achieve Accelerated Growth with APIs”&lt;/a>.
&lt;/span>
Growth is a word on every entrepreneur’s mind, especially when it’s associated with the value of a startup, or with how much profit it can generate. Most startups struggle, and apply many different techniques, to reach a point where they can show some growth.&lt;/p>
&lt;p>This article shows you how growth can be measured, and what variables you can use to control it. It also shows you a different way of achieving higher than usual growth. You can do this by combining traditional customer acquisition channels with an API, and making third-party developers the focus of your business marketing.&lt;/p></description></item><item><title>API Design &amp; Testing State of the Art</title><link>https://brunopedro.com/2014/10/16/api-design-testing-state-art/</link><pubDate>Thu, 16 Oct 2014 00:00:00 +0000</pubDate><guid>https://brunopedro.com/2014/10/16/api-design-testing-state-art/</guid><description>&lt;p>&lt;label for="marginnote-1" class="margin-toggle marginnote-ind">&lt;/label>
&lt;input type="checkbox" id="marginnote-1" class="margin-toggle"/>
&lt;span class="marginnote">
This post was originally published on the Nordic APIs blog as &lt;a href="https://nordicapis.com/api-design-testing-state-art/">“API Design &amp;amp; Testing State of the Art”&lt;/a>.
&lt;/span>
Ensuring proper APIs functionality raises all the following questions:&lt;/p>
&lt;ul>
&lt;li>How do you decide which endpoints you’re going to expose with your API?&lt;/li>
&lt;li>How do you create all the documentation that developers will use to interact with your API?&lt;/li>
&lt;li>What is the best way to verify that your API is working as specified by the documentation, and in keeping with the developer’s expectations?&lt;/li>
&lt;li>Who should be involved in modelling APIs inside your organization?&lt;/li>
&lt;/ul>
&lt;p>By the time you finish reading this article you should be able to answer all these questions. API design and testing are very hot spaces right now. This is because they are the primary means of guaranteeing that APIs not only reflect business processes, but are being used in a way that will generate value to both consumers and providers.&lt;/p></description></item><item><title>5 Reasons Why Developers are not Using your API</title><link>https://brunopedro.com/2014/10/03/5-reasons-why-developers-are-not-using-your-api/</link><pubDate>Fri, 03 Oct 2014 00:00:00 +0000</pubDate><guid>https://brunopedro.com/2014/10/03/5-reasons-why-developers-are-not-using-your-api/</guid><description>&lt;p>&lt;label for="marginnote-1" class="margin-toggle marginnote-ind">&lt;/label>
&lt;input type="checkbox" id="marginnote-1" class="margin-toggle"/>
&lt;span class="marginnote">
This post was originally published on the Nordic APIs blog as &lt;a href="https://nordicapis.com/5-reasons-why-developers-are-not-using-your-api/">“5 Reasons Why Developers are not Using your API”&lt;/a>.
&lt;/span>
Have you launched your API and are you having a hard time understanding why it’s not being used as much as you anticipated? You’ve followed all the best practices, used all the latest technologies and have made sure it is always up and running. For some reason developers are not using your API, and its usage is not increasing over time.&lt;/p></description></item><item><title>Should you Control How your Public API is Used?</title><link>https://brunopedro.com/2014/10/01/should-you-control-how-your-public-api-is-used/</link><pubDate>Wed, 01 Oct 2014 00:00:00 +0000</pubDate><guid>https://brunopedro.com/2014/10/01/should-you-control-how-your-public-api-is-used/</guid><description>&lt;p>&lt;label for="marginnote-1" class="margin-toggle marginnote-ind">&lt;/label>
&lt;input type="checkbox" id="marginnote-1" class="margin-toggle"/>
&lt;span class="marginnote">
This post was originally published on the Nordic APIs blog as &lt;a href="https://nordicapis.com/should-you-control-how-your-public-api-is-used/">“Should you Control How your Public API is Used?”&lt;/a>.
&lt;/span>
The more open your public API is the more developers will implement different types of applications. Some of these, however, might be ones that you would prefer not to be associated with your brand. What is the right balance between openness and governance? Should you relinquish some control to get some more users? Should you worry about how your API is being consumed? How much can you control access without losing interest from talented, outside innovators? Read on to find answers to these and other questions!&lt;/p></description></item><item><title>How to Monetize Your API</title><link>https://brunopedro.com/2014/09/01/how-to-monetize-your-api/</link><pubDate>Mon, 01 Sep 2014 00:00:00 +0000</pubDate><guid>https://brunopedro.com/2014/09/01/how-to-monetize-your-api/</guid><description>&lt;p>&lt;label for="marginnote-1" class="margin-toggle marginnote-ind">&lt;/label>
&lt;input type="checkbox" id="marginnote-1" class="margin-toggle"/>
&lt;span class="marginnote">
This post was originally published on the Nordic APIs blog as &lt;a href="https://nordicapis.com/how-to-monetize-your-api/">“How to Monetize Your API”&lt;/a>.
&lt;/span>
You’ve spent countless hours working on your new API. You followed all the standards and best practices. You executed an API-first strategy. You listened to your app’s users and to developers. You were careful to include the features they needed. One thing you have not yet figured out though is how you will make money with your API!&lt;/p></description></item><item><title>5 Ways APIs will Increase your Revenue</title><link>https://brunopedro.com/2014/08/27/5-ways-apis-will-increase-revenue/</link><pubDate>Wed, 27 Aug 2014 00:00:00 +0000</pubDate><guid>https://brunopedro.com/2014/08/27/5-ways-apis-will-increase-revenue/</guid><description>&lt;p>&lt;label for="marginnote-1" class="margin-toggle marginnote-ind">&lt;/label>
&lt;input type="checkbox" id="marginnote-1" class="margin-toggle"/>
&lt;span class="marginnote">
This post was originally published on the Nordic APIs blog as &lt;a href="https://nordicapis.com/5-ways-apis-will-increase-revenue/">“5 Ways APIs will Increase your Revenue”&lt;/a>.
&lt;/span>
What is the most important thing your business needs? Cash! And how do you get cash? Customers! Without customers, there is no revenue, and the ability to acquire customers is what distinguishes a successful business from a failing one.&lt;/p>
&lt;p>In this article, I will show you five ways to increase your business revenue by offering an API that third-party developers can use to build apps and consume your information. These are not the typical API business models. Instead, these are ways to make money with or without an API. What I will show you though is that these models deliver more value if executed with an API. Let me start by showing how you can increase your business revenue by acquiring more customers using an API as an inbound funnel.&lt;/p></description></item><item><title>Product Hunt, The Popular Tech Product Discovery Site, Is In Current Y Combinator Batch</title><link>https://brunopedro.com/2014/07/17/product-hunt-the-popular-tech-product-discovery-site-is-in-current-y-combinator-batch/</link><pubDate>Thu, 17 Jul 2014 15:35:52 +0000</pubDate><guid>https://brunopedro.com/2014/07/17/product-hunt-the-popular-tech-product-discovery-site-is-in-current-y-combinator-batch/</guid><description>&lt;p>&lt;img src="https://brunopedro.com/media/2014/07/hunt.jpg" alt="">&lt;/p>
&lt;p>Is Product Hunt the next big thing?&lt;/p></description></item><item><title>My first job</title><link>https://brunopedro.com/2013/09/25/my-first-job/</link><pubDate>Wed, 25 Sep 2013 20:37:06 +0000</pubDate><guid>https://brunopedro.com/2013/09/25/my-first-job/</guid><description>&lt;p>&lt;a href="https://brunopedro.com/media/2013/09/wpid-received_m_mid_1380133799104_c2c4f158736eb88747_0.jpeg">&lt;img src="https://brunopedro.com/media/2013/09/wpid-received_m_mid_1380133799104_c2c4f158736eb88747_0.jpeg" alt="image" title="received_m_mid_1380133799104_c2c4f158736eb88747_0.jpeg">&lt;/a>&lt;/p>
&lt;p>An old friend just sent me a scan of the business card of my first job.&lt;/p>
&lt;p>Thanks!&lt;/p></description></item><item><title>Melon Bruño</title><link>https://brunopedro.com/2013/08/22/melon-bruno/</link><pubDate>Thu, 22 Aug 2013 17:19:21 +0000</pubDate><guid>https://brunopedro.com/2013/08/22/melon-bruno/</guid><description>&lt;p>&lt;a href="https://brunopedro.com/media/2013/08/wpid-wp-1377191883578.jpg">&lt;img src="https://brunopedro.com/media/2013/08/wpid-wp-1377191883578.jpg" alt="image" title="wp-1377191883578.jpg">&lt;/a>&lt;/p></description></item><item><title>Bridging the Gap Between APIs and Customers</title><link>https://brunopedro.com/2013/06/03/bridging-gap-api-customer/</link><pubDate>Mon, 03 Jun 2013 11:15:59 +0000</pubDate><guid>https://brunopedro.com/2013/06/03/bridging-gap-api-customer/</guid><description>&lt;p>I recently gave a talk at the &lt;a href="http://mediterranea.apidays.io/" title="APIdays Mediterranea conference">APIdays Mediterranea&lt;/a> in &lt;a href="http://en.wikipedia.org/wiki/Madrid" title="Madrid">Madrid&lt;/a> where I started with a question: &amp;ldquo;&lt;strong>Who are your customers?&lt;/strong>&amp;rdquo;.&lt;/p>
&lt;p>The single, most important thing you want to understand about your API is how you can generate revenue from it. It all depends on who your customers are and how they can obtain value through your API.&lt;/p>
&lt;p>What customers need is represented in one of the slides as the &amp;ldquo;&lt;a href="http://apiux.com/2013/05/29/api-hierarchy-needs/" title="API Hierarchy of Needs">API Hierarchy of Needs&lt;/a>&amp;rdquo;, an adaptation of &lt;a href="http://en.wikipedia.org/wiki/Maslow%27s_hierarchy_of_needs" title="Maslow's Hierachy of Needs">Maslow&amp;rsquo;s Hierarchy of Needs&lt;/a> to the context of APIs from a customer point of view.&lt;/p></description></item><item><title>Sun</title><link>https://brunopedro.com/2013/04/20/sun/</link><pubDate>Sat, 20 Apr 2013 15:04:15 +0000</pubDate><guid>https://brunopedro.com/2013/04/20/sun/</guid><description>&lt;p>&lt;a href="https://brunopedro.com/media/2013/04/wpid-img_20130420_170048.jpg">&lt;img src="https://brunopedro.com/media/2013/04/wpid-img_20130420_170048.jpg" alt="image" title="IMG_20130420_170048.JPG">&lt;/a>&lt;/p></description></item><item><title>Still using HTTP Basic Auth?</title><link>https://brunopedro.com/2013/04/18/still-using-http-basic-auth/</link><pubDate>Thu, 18 Apr 2013 15:22:17 +0000</pubDate><guid>https://brunopedro.com/2013/04/18/still-using-http-basic-auth/</guid><description>&lt;p>Great article by &lt;a href="http://swaggadocio.com/" title="Steve Graham">Steve Graham&lt;/a> about why you should &lt;strong>stop using &lt;a href="http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol" title="Hypertext Transfer Protocol">HTTP&lt;/a> Basic Auth&lt;/strong> immediately!&lt;/p>
&lt;blockquote>
&lt;p>As well as being tremendously simple, HTTP Basic by itself is also tremendously insecure, i.e. it is implemented by simply &lt;a href="http://en.wikipedia.org/wiki/Base64" title="Base64">Base64&lt;/a> encoding the username and password concatenated with a colon &amp;ldquo;:&amp;rdquo; character. It then follows that HTTP Basic should only be used, if at all, over securely encrypted connections.&lt;/p>
&lt;/blockquote>
&lt;p>Original article: &lt;a href="http://swaggadocio.com/post/48223179207/why-the-hell-does-your-api-still-use-http-basic-auth" title="WHY THE HELL DOES YOUR API STILL USE HTTP BASIC AUTH?">WHY THE HELL DOES YOUR API STILL USE HTTP BASIC AUTH?&lt;/a>&lt;/p></description></item><item><title>Who’s using your API?</title><link>https://brunopedro.com/2013/03/11/whos-using-your-api/</link><pubDate>Mon, 11 Mar 2013 14:13:58 +0000</pubDate><guid>https://brunopedro.com/2013/03/11/whos-using-your-api/</guid><description>&lt;p>&amp;ldquo;Who&amp;rsquo;s using your API&amp;rdquo; was the title of my presentation at the &lt;a href="http://www.apistrategyconference.com/">API Strategy &amp;amp; Practice Conference&lt;/a> that happened on February 21 and 22, 2013 in New York City.&lt;/p>
&lt;p>One of the conference takeaways was the concern that almost everybody had with their customers. Almost everyone I talked with was in one way or another worried about how the API distribution model is affecting the way their customers interact with their app.&lt;/p></description></item><item><title>Montserrat</title><link>https://brunopedro.com/2013/03/02/montserrat/</link><pubDate>Sat, 02 Mar 2013 15:36:15 +0000</pubDate><guid>https://brunopedro.com/2013/03/02/montserrat/</guid><description>&lt;p>&lt;a href="https://brunopedro.com/media/2013/03/wpid-wp-13622383914581.jpg">&lt;img src="https://brunopedro.com/media/2013/03/wpid-wp-1362238391458.jpg" alt="image" title="wp-1362238391458.jpg">&lt;/a>&lt;/p></description></item><item><title>American boy</title><link>https://brunopedro.com/2013/02/17/american-boy/</link><pubDate>Sun, 17 Feb 2013 12:07:42 +0000</pubDate><guid>https://brunopedro.com/2013/02/17/american-boy/</guid><description>&lt;p>&lt;a href="https://brunopedro.com/media/2013/02/wpid-wp-13610326168441.jpg">&lt;img src="https://brunopedro.com/media/2013/02/wpid-wp-1361032616844.jpg" alt="image" title="wp-1361032616844.jpg">&lt;/a>&lt;/p>
&lt;p>Interesting art by Eulalia, at the MACBA museum in Barcelona.&lt;/p></description></item><item><title>What is an empty XML element?</title><link>https://brunopedro.com/2013/02/11/empty-xml-element/</link><pubDate>Mon, 11 Feb 2013 19:40:56 +0000</pubDate><guid>https://brunopedro.com/2013/02/11/empty-xml-element/</guid><description>&lt;p>Following a very enthusiastic discussion today at &lt;a href="https://cloudwork.com/" title="CloudWork">work&lt;/a>, here&amp;rsquo;s the proper definition of an empty &lt;a href="http://www.w3.org/TR/xml/" title="XML">XML&lt;/a> element, according to the W3C Recommendation of 26 November 2008:&lt;/p>
&lt;blockquote>
&lt;p>[Definition: An element with no content is said to be empty.] The representation of an empty element is either a start-tag immediately followed by an end-tag, or an empty-element tag. &amp;ndash; &lt;a href="http://www.w3.org/TR/xml/" title="Extensible Markup Language (XML) 1.0 (Fifth Edition)">Extensible Markup Language (XML) 1.0 (Fifth Edition)&lt;/a> § &lt;a href="http://www.w3.org/TR/xml/#dt-content" title="Content of Elements">&amp;ldquo;Content of Elements&amp;rdquo;&lt;/a>&lt;/p></description></item><item><title>Kung Hei Fat Choi</title><link>https://brunopedro.com/2013/02/10/kung-hei-fat-choi/</link><pubDate>Sun, 10 Feb 2013 19:46:41 +0000</pubDate><guid>https://brunopedro.com/2013/02/10/kung-hei-fat-choi/</guid><description>&lt;p>Happy Chinese New Year!&lt;/p>
&lt;pre>&lt;code>&amp;lt;figure &amp;gt;

&amp;lt;label for=&amp;quot;marginfig-1&amp;quot; class=&amp;quot;margin-toggle marginnote-ind&amp;quot;&amp;gt;&amp;lt;/label&amp;gt;
&amp;lt;input type=&amp;quot;checkbox&amp;quot; id=&amp;quot;marginfig-1&amp;quot; class=&amp;quot;margin-toggle&amp;quot;/&amp;gt;
&amp;lt;span class=&amp;quot;marginnote&amp;quot;&amp;gt;
&lt;/code>&lt;/pre>
&lt;p>&lt;strong>Dim sum. &lt;/strong>
Fabulous Dim Sum at &lt;a href="http://www.mosquitotapas.com/">Mosquito&lt;/a> in Barcelona.&lt;/p>
&lt;/span>
 &lt;a href="https://brunopedro.com/media/2013/02/img_20130210_192504.jpg">
 &lt;img src="https://brunopedro.com/media/2013/02/img_20130210_192504.jpg" alt="Image">
 &lt;/a>
&lt;/figure></description></item><item><title>Presentations</title><link>https://brunopedro.com/presentations/</link><pubDate>Thu, 24 Jan 2013 13:46:53 +0000</pubDate><guid>https://brunopedro.com/presentations/</guid><description>&lt;h2 id="talks">
Talks
&lt;a href="#talks" class="heading-anchor">#&lt;/a>
&lt;/h2>
&lt;ul>
&lt;li>&amp;ldquo;Prototyping APIs with OpenAPI&amp;rdquo; (tentative), apidays Paris, December 2025&lt;/li>
&lt;li>&amp;ldquo;What is API Quality?&amp;rdquo;, Startup Galicia, A Coruña, April 2025&lt;/li>
&lt;li>&amp;ldquo;API Governance Delivers Quality?&amp;rdquo;, apidays Paris, December 2024&lt;/li>
&lt;li>&amp;ldquo;How to Build a Successful API Product&amp;rdquo;, Product Weekend, Barcelona, March 2024&lt;/li>
&lt;li>&amp;ldquo;How to Build a Successful API Product&amp;rdquo;, apidays Paris, December 2023&lt;/li>
&lt;li>&amp;ldquo;&lt;a href="https://www.slideshare.net/bpedro/growing-your-business-with-an-api">Growing your business with an API&lt;/a>&amp;rdquo;, &lt;a href="https://nordicapis.com/events/the-2017-api-platform-summit/">Nordic APIs Platform Summit&lt;/a>, Stockholm, October 2017&lt;/li>
&lt;li>&amp;ldquo;&lt;a href="https://www.slideshare.net/bpedro/product-growth-with-an-api">How to grow your business with an API&lt;/a>&amp;rdquo;, &lt;a href="http://beta-i.pt/">Beta-i&lt;/a>, Lisbon, March 2017&lt;/li>
&lt;li>&amp;ldquo;&lt;a href="https://www.slideshare.net/bpedro/how-to-grow-your-business-with-an-api">How to grow your business with an API&lt;/a>&amp;rdquo;, &lt;a href="https://itnig.net/">itnig&lt;/a>, Barcelona, March 2017&lt;/li>
&lt;li>&amp;ldquo;&lt;a href="https://www.slideshare.net/bpedro/apis-love-to-chat">APIs Love to Chat&lt;/a>&amp;rdquo;, &lt;a href="http://mediterranea.apidays.io/">APIdays Mediterranea&lt;/a>, Barcelona, November 2016&lt;/li>
&lt;li>&amp;ldquo;&lt;a href="http://www.slideshare.net/bpedro/how-to-automate-api-testing">How to Automate API Testing&lt;/a>&amp;rdquo;, &lt;a href="https://www.typeform.com/">Typeform&lt;/a>, Barcelona, January 2016&lt;/li>
&lt;li>&amp;ldquo;&lt;a href="http://www.slideshare.net/bpedro/asynchronous-microservices-in-nodejs">Asynchronous Microservices in node.js&lt;/a>&amp;rdquo;, &lt;a href="http://barcelona.nodeconf.com/">NodeConf&lt;/a>, Barcelona, November 2015&lt;/li>
&lt;li>&amp;ldquo;&lt;a href="http://www.slideshare.net/bpedro/how-to-automate-api-discovery">How to Automate API Discovery&lt;/a>&amp;rdquo;, &lt;a href="http://mediterranea.apidays.io/">APIdays Mediterranea&lt;/a>, Barcelona, May 2015&lt;/li>
&lt;li>&amp;ldquo;&lt;a href="http://www.slideshare.net/bpedro/api-design-the-paris-subway">API Design &amp;amp; The Paris Subway&lt;/a>&amp;rdquo;, &lt;a href="http://www.apidays.io/">APIdays&lt;/a>, Paris, December 2014&lt;/li>
&lt;li>&amp;ldquo;&lt;a href="http://www.slideshare.net/bpedro/the-importance-of-me">The Importance of /me&lt;/a>&amp;rdquo;, &lt;a href="http://mediterranea.apidays.io/">APIdays Mediterranea&lt;/a>, Barcelona, May 30 2014&lt;/li>
&lt;li>&amp;ldquo;&lt;a href="http://www.slideshare.net/bpedro/maintainable-consumers">Maintainable Consumers&lt;/a>&amp;rdquo;, &lt;a href="http://www.apistrategyconference.com/">API Strategy &amp;amp; Practice&lt;/a>, Amsterdam, March 2014&lt;/li>
&lt;li>&amp;ldquo;&lt;a href="http://www.slideshare.net/bpedro/api-code-generation">API Code Generation&lt;/a>&amp;rdquo;, &lt;a href="http://barcelonajs.org/">BarcelonaJS&lt;/a>, February 2014&lt;/li>
&lt;li>&amp;ldquo;&lt;a href="http://www.slideshare.net/bpedro/bridging-the-gap-between-ap-is-and-customers">Bridging the Gap Between APIs and Customers&lt;/a>&amp;rdquo;, &lt;a href="http://mediterranea.apidays.io/">APIdays Mediterranea&lt;/a>, May 2013&lt;/li>
&lt;li>&amp;ldquo;&lt;a href="http://www.slideshare.net/bpedro/bruno-pedrocloudwork">Who&amp;rsquo;s using your API?&lt;/a>&amp;quot;, &lt;a href="http://www.apistrategyconference.com/">API Strategy &amp;amp; Conference&lt;/a>, February 2013&lt;/li>
&lt;li>&amp;ldquo;&lt;a href="http://www.slideshare.net/bpedro/nodefs">node-fs&lt;/a>&amp;rdquo;, &lt;a href="http://barcelonajs.org/">BarcelonaJS&lt;/a>, January 2013&lt;/li>
&lt;li>&amp;ldquo;Inspirational Talk&amp;rdquo;, &lt;a href="http://beta-i.pt/betatalk/" title="Beta talk">Beta talk&lt;/a>, May 2011&lt;/li>
&lt;li>&amp;ldquo;&lt;a href="http://www.slideshare.net/bpedro/is-oauth-really-secure" title="Is OAuth Really Secure?">Is OAuth Really Secure?&lt;/a>&amp;quot;, &lt;a href="http://www.owasp.org/index.php/IBWAS10" title="IBWAS'10">IBWAS'10&lt;/a>, December 2010&lt;/li>
&lt;li>&amp;ldquo;&lt;a href="http://www.slideshare.net/bpedro/everything-oauth" title="Everything OAuth">Everything OAuth&lt;/a>&amp;rdquo;, SAPO &lt;a href="http://codebits.eu" title="Codebits">Codebits IV&lt;/a>, November 2010&lt;/li>
&lt;li>&amp;ldquo;&lt;a href="http://www.slideshare.net/bpedro/activity-streams-and-contexts-1242196" title="Activity Streams and Contexts">Activity Streams and Contexts&lt;/a>&amp;rdquo;, Google MiniBarcamp Lisbon, April 2009&lt;/li>
&lt;li>&amp;ldquo;&lt;a href="http://www.slideshare.net/bpedro/takeoff2008/" title="A Evolução de uma Ideia">A Evolução de uma Ideia&lt;/a>&amp;quot;, &lt;a href="http://takeoff.ideias3.com/2008/" title="Take Off 2008">Take Off 2008&lt;/a>, April 19, 2008&lt;/li>
&lt;li>&amp;ldquo;&lt;a href="http://intra.codebits.sapo.pt/sessions/show/14" title="Web Services em PHP5">Web Services em PHP5&lt;/a>&amp;quot;, &lt;a href="http://codebits.sapo.pt/" title="SAPO CodeBits 2007">SAPO CodeBits 2007&lt;/a>, November 13, 2007&lt;/li>
&lt;li>&amp;ldquo;&lt;a href="http://www.slideshare.net/bpedro/php-smarty-e-o-template-view-pattern" title="PHP, Smarty e o Template View Pattern">PHP, Smarty e o Template View Pattern&lt;/a>&amp;quot;, &lt;a href="http://softwarelivre.com.pt/" title="I Fórum Software Livre">FSL 2007&lt;/a>, October 12, 2007&lt;/li>
&lt;li>&amp;ldquo;&lt;a href="http://www.slideshare.net/bpedro/php-and-web-services" title="PHP and Web Services">PHP and Web Services&lt;/a>&amp;rdquo;, CITOT 2007, May 20, 2007&lt;/li>
&lt;/ul>
&lt;h2 id="lectures">
Lectures
&lt;a href="#lectures" class="heading-anchor">#&lt;/a>
&lt;/h2>
&lt;ul>
&lt;li>&amp;ldquo;&lt;a href="https://www.slideshare.net/bpedro/what-are-web-apis">What are Web APIs&lt;/a>&amp;rdquo;, &lt;a href="https://www.ironhack.com/">IronHack&lt;/a>, Barcelona, January 2018&lt;/li>
&lt;li>&amp;ldquo;&lt;a href="http://www.slideshare.net/bpedro/link-extraction-and-classification" title="Link extraction and classification">Link extraction and classification&lt;/a>&amp;quot;, &lt;a href="http://www.ist.utl.pt/">Instituto Superior Técnico&lt;/a>, December 2010&lt;/li>
&lt;li>&amp;ldquo;&lt;a href="http://www.slideshare.net/bpedro/the-executable-web" title="The Executable Web">The Executable Web&lt;/a>&amp;quot;, &lt;a href="http://www.iscte-iul.pt/">ISCTE-IUL&lt;/a>, May 2010&lt;/li>
&lt;li>&amp;ldquo;&lt;a href="http://www.slideshare.net/bpedro/information-retrieval-challenges" title="Information Retrieval Challenges">Information Retrieval Challenges&lt;/a>&amp;quot;, &lt;a href="http://www.inesc-id.pt/">INESC-ID&lt;/a>, March 2010&lt;/li>
&lt;/ul></description></item><item><title>Speaking at the first BarcelonaJS meetup</title><link>https://brunopedro.com/2013/01/22/barcelonajs-meetup/</link><pubDate>Tue, 22 Jan 2013 17:53:10 +0000</pubDate><guid>https://brunopedro.com/2013/01/22/barcelonajs-meetup/</guid><description>&lt;p>I&amp;rsquo;ll be speaking at the first &lt;a href="http://barcelonajs.org/" title="BarcelonaJS">BarcelonaJS&lt;/a> meetup on January 30th in &lt;a href="http://www.mob-barcelona.com/" title="MOB">MOB&lt;/a>, [Barcelona](&lt;a href="http://maps.google.com/maps?ll=41.3833333333,2.18333333333&amp;amp;spn=0.1,0.1&amp;amp;q=41.3833333333,2.18333333333">http://maps.google.com/maps?ll=41.3833333333,2.18333333333&amp;amp;spn=0.1,0.1&amp;amp;q=41.3833333333,2.18333333333&lt;/a> (Barcelona)&amp;amp;t=h &amp;ldquo;Barcelona&amp;rdquo;).&lt;/p>
&lt;p>I&amp;rsquo;ll be presenting &lt;a href="http://brunopedro.com/2011/01/05/node-fs/" title="node-fs">node-fs&lt;/a> and talking about my experience trying to fix the common problem of recursive directory creation, failing to get it accepted into the core of &lt;a href="http://nodejs.org/" title="node.js">node.js&lt;/a>, and planned features for node-fs.&lt;/p>
&lt;p>&lt;img src="https://raw.github.com/voodootikigod/logo.js/master/barcelonajs/barcelona-js.png" alt="BarcelonaJS">&lt;/p>
&lt;p>Other speakers include &lt;a href="http://twitter.com/hardlifeofapo" title="Pablo Casado">Pablo Casado&lt;/a>, who will be talking about how to start with node.js, and also &lt;a href="http://twitter.com/jordiromero" title="Jordi Romero">Jordi Romero&lt;/a>, discussing a hybrid solution that leverages node.js and &lt;a href="http://rubyonrails.org/" title="Ruby on Rails">Rails&lt;/a>.&lt;/p></description></item><item><title>NoSQL Distilled</title><link>https://brunopedro.com/2013/01/20/nosql-distilled/</link><pubDate>Sun, 20 Jan 2013 21:50:10 +0000</pubDate><guid>https://brunopedro.com/2013/01/20/nosql-distilled/</guid><description>&lt;p>&lt;a href="http://www.amazon.com/gp/product/0321826620">&lt;img src="http://martinfowler.com/books/nosql.jpg" alt="NoSQL Distilled">&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>The term &amp;ldquo;&lt;a href="http://en.wikipedia.org/wiki/NoSQL" title="NoSQL">NoSQL&lt;/a>&amp;rdquo; is very ill-defined. It&amp;rsquo;s generally applied to a number of recent nonrelational databases such as &lt;a href="http://cassandra.apache.org/" title="Apache Cassandra">Cassandra&lt;/a>, Mongo, Neo4J, and &lt;a href="http://wiki.basho.com/" title="Riak">Riak&lt;/a>. They embrace schemaless data, run on clusters, and have the ability to trade off traditional consistency for other useful properties. Advocates of NoSQL databases claim that they can build systems that are more performant, scale much better, and are easier to program with. &amp;ndash; &lt;em>&lt;a href="http://martinfowler.com/books/nosql.html" title="NoSQL Distilled">NoSQL Distilled&lt;/a>, by &lt;a href="http://martinfowler.com/" title="Martin Fowler">Martin Fowler&lt;/a>&lt;/em>&lt;/p></description></item><item><title>Home made mussels</title><link>https://brunopedro.com/2013/01/18/home-made-mussels/</link><pubDate>Fri, 18 Jan 2013 19:43:26 +0000</pubDate><guid>https://brunopedro.com/2013/01/18/home-made-mussels/</guid><description>&lt;p>&lt;a href="https://brunopedro.com/media/2013/01/wpid-13585380222521.jpg">&lt;img src="https://brunopedro.com/media/2013/01/wpid-1358538022252.jpg" alt="image" title="1358538022252.jpg">&lt;/a>&lt;/p>
&lt;p>Delicious steamed mussels paired with a chilled Albariño.&lt;/p></description></item><item><title>Do small experiments, often</title><link>https://brunopedro.com/2013/01/03/do-small-experiments-often/</link><pubDate>Thu, 03 Jan 2013 19:11:33 +0000</pubDate><guid>https://brunopedro.com/2013/01/03/do-small-experiments-often/</guid><description>&lt;p>&lt;a href="http://www.flickr.com/photos/41380738@N05/4419380931">&lt;img src="http://farm5.static.flickr.com/4006/4419380931_2a4d782e99_m.jpg" alt="A Rainbow of Tubes" title="A Rainbow of Tubes">&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>A long time ago, I realized that every successful business was a continuous process of small experiments that operated in the context of a long-term vision. When an &lt;a href="http://en.wikipedia.org/wiki/Experiment" title="Experiment">experiment&lt;/a> worked, you did more of it. When it didn&amp;rsquo;t, you ended it and moved on. &amp;ndash; &lt;em>in &lt;a href="http://blogs.wsj.com/accelerators/2013/01/01/the-100000-experiment/" title="The $100,000 Experiment">The $100,000 Experiment&lt;/a>, by &lt;a href="http://www.feld.com/" title="Brad Feld">Brad Feld&lt;/a>&lt;/em>&lt;/p>
&lt;/blockquote></description></item><item><title>Deliver on your promises</title><link>https://brunopedro.com/2013/01/01/deliver-on-your-promises/</link><pubDate>Tue, 01 Jan 2013 18:34:38 +0000</pubDate><guid>https://brunopedro.com/2013/01/01/deliver-on-your-promises/</guid><description>&lt;blockquote>
&lt;p>So if I can give entrepreneurs a single piece of advice for 2013 it would be to deliver on your promises. Not just to your investors but also to your team and ultimately to yourself. This is no time to be in denial. That is a lethal attribute in times like these. &amp;ndash; &lt;em>in &lt;a href="http://www.avc.com/a_vc/2012/12/advice-for-2013-deliver-on-your-promises-1.html" title="Advice for 2013: Deliver On Your Promises">Advice for 2013: Deliver On Your Promises&lt;/a> by &lt;a href="http://www.avc.com/a_vc/about.html" title="Fred Wilson">Fred Wilson&lt;/a>&lt;/em>&lt;/p>
&lt;/blockquote></description></item><item><title>Lager Hell</title><link>https://brunopedro.com/2012/12/24/lager-hell/</link><pubDate>Mon, 24 Dec 2012 14:48:06 +0000</pubDate><guid>https://brunopedro.com/2012/12/24/lager-hell/</guid><description>&lt;p>&lt;a href="https://brunopedro.com/media/2012/12/wpid-13563578367423.jpg">&lt;img src="https://brunopedro.com/media/2012/12/wpid-13563578367422.jpg" alt="image" title="1356357836742.jpg">&lt;/a>&lt;/p></description></item><item><title>Raclette</title><link>https://brunopedro.com/2012/12/23/raclette/</link><pubDate>Sun, 23 Dec 2012 13:12:19 +0000</pubDate><guid>https://brunopedro.com/2012/12/23/raclette/</guid><description>&lt;p>&lt;a href="https://brunopedro.com/media/2012/12/wpid-13562682855661.jpg">&lt;img src="https://brunopedro.com/media/2012/12/wpid-1356268285566.jpg" alt="image" title="1356268285566.jpg">&lt;/a>&lt;/p></description></item><item><title>Fantastico</title><link>https://brunopedro.com/2012/12/19/fantastico/</link><pubDate>Wed, 19 Dec 2012 19:42:11 +0000</pubDate><guid>https://brunopedro.com/2012/12/19/fantastico/</guid><description>&lt;p>&lt;a href="https://brunopedro.com/media/2012/12/wpid-13559459586961.jpg">&lt;img src="https://brunopedro.com/media/2012/12/wpid-1355945958696.jpg" alt="image" title="1355945958696.jpg">&lt;/a>&lt;/p></description></item><item><title>Why refactoring?</title><link>https://brunopedro.com/2012/12/18/why-refactoring/</link><pubDate>Tue, 18 Dec 2012 12:43:47 +0000</pubDate><guid>https://brunopedro.com/2012/12/18/why-refactoring/</guid><description>&lt;p>Interesting thoughts about refactoring, starting with a comprehensive post by &lt;a href="http://www.blogger.com/profile/17371102366836131341" title="Jim Bird">Jim Bird&lt;/a>, stating what &lt;strong>is not refactoring&lt;/strong>:&lt;/p>
&lt;blockquote>
&lt;p>Fixing any bugs that you find along the way is not refactoring. Optimization is not refactoring. Tightening up error handling and adding defensive code is not refactoring. Making the code more testable is not refactoring – although this may happen as the result of refactoring. All of these are good things to do. But they aren&amp;rsquo;t refactoring. &amp;ndash; &lt;em>in &lt;a href="http://swreflections.blogspot.co.uk/2012/04/what-refactoring-is-and-what-it-isnt.html" title="What Refactoring is, and what it isn’t">What Refactoring is, and what it isn&amp;rsquo;t&lt;/a>&lt;/em>&lt;/p></description></item><item><title>It’s all about retention</title><link>https://brunopedro.com/2012/12/17/retention/</link><pubDate>Mon, 17 Dec 2012 22:41:57 +0000</pubDate><guid>https://brunopedro.com/2012/12/17/retention/</guid><description>&lt;blockquote>
&lt;p>The most important metric today is retention. It tells you how often a customer comes back and uses your product again. &amp;ndash; &lt;em>in &lt;a href="http://sufficientlyadvanced.net/bullshit-metrics" title="Bullshit metrics">Bullshit metrics&lt;/a>&lt;/em>&lt;/p>
&lt;/blockquote></description></item><item><title>Red AGBAR tower</title><link>https://brunopedro.com/2012/12/01/red-agbar-tower/</link><pubDate>Sat, 01 Dec 2012 22:21:35 +0000</pubDate><guid>https://brunopedro.com/2012/12/01/red-agbar-tower/</guid><description>&lt;p>&lt;a href="https://brunopedro.com/media/2012/12/wpid-13544003934231.jpg">&lt;img src="https://brunopedro.com/media/2012/12/wpid-1354400393423.jpg" alt="image" title="1354400393423.jpg">&lt;/a>&lt;/p></description></item><item><title>Writing great documentation</title><link>https://brunopedro.com/2012/11/27/writing-great-documentation/</link><pubDate>Tue, 27 Nov 2012 18:09:35 +0000</pubDate><guid>https://brunopedro.com/2012/11/27/writing-great-documentation/</guid><description>&lt;p>&lt;a href="http://jacobian.org/writing/great-documentation/" title="Writing great documentation">Writing great documentation&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>This advice will mostly be targeted towards those documenting libraries or frameworks intended for use by other developers, but much of it probably applies to any for of technical documentation.&lt;/p>
&lt;/blockquote></description></item><item><title>Dinner in Granada</title><link>https://brunopedro.com/2012/11/21/dinner-in-granada/</link><pubDate>Wed, 21 Nov 2012 20:15:39 +0000</pubDate><guid>https://brunopedro.com/2012/11/21/dinner-in-granada/</guid><description>&lt;p>&lt;a href="https://brunopedro.com/media/2012/11/wpid-13535287321861.jpg">&lt;img src="https://brunopedro.com/media/2012/11/wpid-1353528732186.jpg" alt="image" title="1353528732186.jpg">&lt;/a>&lt;/p></description></item><item><title>Dirty Duck</title><link>https://brunopedro.com/2012/11/16/dirty-duck/</link><pubDate>Fri, 16 Nov 2012 21:32:52 +0000</pubDate><guid>https://brunopedro.com/2012/11/16/dirty-duck/</guid><description>&lt;p>&lt;a href="https://brunopedro.com/media/2012/11/wpid-13531014893431.jpg">&lt;img src="https://brunopedro.com/media/2012/11/wpid-1353101489343.jpg" alt="image" title="1353101489343.jpg">&lt;/a>&lt;/p></description></item><item><title>RethinkDB looks promising</title><link>https://brunopedro.com/2012/11/10/rethinkdb/</link><pubDate>Sat, 10 Nov 2012 23:14:05 +0000</pubDate><guid>https://brunopedro.com/2012/11/10/rethinkdb/</guid><description>&lt;p>&lt;a href="http://www.rethinkdb.com/blog/rethinkdb-12-release/">RethinkDB is out – an open-source distributed database&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>RethinkDB is built to store JSON documents, and scale to multiple machines with very little effort. It has a pleasant query language that supports really useful queries like table joins and group by, and is easy to setup and learn.&lt;/p>
&lt;/blockquote>
&lt;p>An open-source &lt;a href="http://en.wikipedia.org/wiki/Distributed_database" title="Distributed database">distributed database&lt;/a> with an intuitive query language, parallelized queries, and much more! It&amp;rsquo;s called &lt;a href="http://www.rethinkdb.com/" title="RethinkDB">RethinkDB&lt;/a> and you can &lt;a href="https://github.com/rethinkdb/rethinkdb" title="rethinkdb">fork it&lt;/a> on GitHub. What&amp;rsquo;s not to like?&lt;/p></description></item><item><title>Is the World socialist?</title><link>https://brunopedro.com/2012/11/09/world-socialist/</link><pubDate>Fri, 09 Nov 2012 18:18:13 +0000</pubDate><guid>https://brunopedro.com/2012/11/09/world-socialist/</guid><description>&lt;p>Revisiting an old &lt;a href="http://scripting.com/stories/2011/01/01/theWorldIsSocialist.html" title="The World is socialist">story&lt;/a> by &lt;a href="http://scripting.com" title="Dave Winer">Dave Winer&lt;/a>:&lt;label for="marginnote-1" class="margin-toggle marginnote-ind">&lt;/label>
&lt;input type="checkbox" id="marginnote-1" class="margin-toggle"/>
&lt;span class="marginnote">
&lt;img src="https://farm6.staticflickr.com/5100/5425907494_e3f3bc769c_m_d.jpg" alt="Ayn Rand">&lt;a href="https://www.flickr.com/photos/47422005@N04/5425907494">Ayn Rand&lt;/a> was a Russian-American novelist, philosopher, playwright, and screenwriter. Rand is best known as author of The Fountainhead and Atlas Shrugged. She developed a philosophical system called Objectivism.
&lt;/span>&lt;/p>
&lt;blockquote>
&lt;p>If you want to go back to the point where we decided to be socialist and try to undo it, you&amp;rsquo;re going to have to kill most of the people on the planet who depend on the current system for sustenance. And like it or not, that probably includes you. It &lt;em>certainly&lt;/em> includes most of the idiots running around preaching &lt;a href="http://www.aynrand.org/%22" title="Ayn Rand">Ayn Rand&lt;/a> these days. &amp;ndash; &lt;em>in &lt;a href="http://scripting.com/stories/2011/01/01/theWorldIsSocialist.html" title="The World is socialist">The World is socialist&lt;/a>&lt;/em>&lt;/p></description></item><item><title>Without dissent there is no creativity</title><link>https://brunopedro.com/2012/11/06/dissent/</link><pubDate>Tue, 06 Nov 2012 18:23:46 +0000</pubDate><guid>https://brunopedro.com/2012/11/06/dissent/</guid><description>&lt;p>&lt;a href="http://commons.wikipedia.org/wiki/File:Dissent_develops_democracy_sticker.jpg">![Sticker advocating dissent: &amp;ldquo;dissent deve&amp;hellip;](http://upload.wikimedia.org/wikipedia/commons/thumb/2/2a/Dissent_develops_democracy_sticker.jpg/300px-Dissent_develops_democracy_sticker.jpg &amp;ldquo;Sticker advocating dissent: &amp;ldquo;dissent deve&amp;hellip;&amp;rdquo;)&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>The founders that make a dent in the universe are &lt;a href="http://en.wikipedia.org/wiki/Dissident" title="Dissident">dissidents&lt;/a>. They are not afraid to tell their bosses they are idiots or tell their schools they been teaching the wrong thing or to tell an entire industry to think different. And more importantly they are not afraid to tell their country it&amp;rsquo;s mistaken. &amp;ndash; &lt;em>in &lt;a href="http://steveblank.com/2012/11/06/entrepreneurs-as-dissidents/" title="Entrepreneurs as Dissidents">Entrepreneurs as Dissidents&lt;/a>&lt;/em>&lt;/p>
&lt;/blockquote></description></item><item><title>Pizza</title><link>https://brunopedro.com/2012/11/06/pizza/</link><pubDate>Tue, 06 Nov 2012 13:34:12 +0000</pubDate><guid>https://brunopedro.com/2012/11/06/pizza/</guid><description>&lt;p>&lt;a href="https://brunopedro.com/media/2012/11/wpid-13522087636701.jpg">&lt;img src="https://brunopedro.com/media/2012/11/wpid-1352208763670.jpg" alt="image" title="1352208763670.jpg">&lt;/a>&lt;/p></description></item><item><title>A crise da crise</title><link>https://brunopedro.com/2012/10/08/a-crise-da-crise/</link><pubDate>Mon, 08 Oct 2012 19:45:25 +0000</pubDate><guid>https://brunopedro.com/2012/10/08/a-crise-da-crise/</guid><description>&lt;p>O verdadeiro problema de Portugal não é a &lt;em>crise&lt;/em> em si. É a &lt;em>crise da crise&lt;/em>.&lt;/p>
&lt;p>Passo a explicar: a palavra &lt;em>crise&lt;/em> tem vários significados, entre eles os seguintes (ver ainda a &lt;a href="http://www.priberam.pt/dlpo/default.aspx?pal=crise">definição completa&lt;/a>):&lt;/p>
&lt;ol>
&lt;li>Falta de alguma coisa considerada importante;&lt;/li>
&lt;li>Manifestação súbita de um estado emocional ou nervoso.&lt;/li>
&lt;/ol>
&lt;p>&lt;a href="https://brunopedro.com/media/2012/10/bandeira-nacional-hasteada.jpeg">&lt;img src="https://brunopedro.com/media/2012/10/bandeira-nacional-hasteada.jpeg?w=300" alt="" title="Bandeira-Nacional-hasteada">&lt;/a>&lt;/p>
&lt;p>Portugal tem um problema grave de falta de impaciência. Os portugueses são demasiado pacientes e &lt;em>acalmados&lt;/em>. Não há intensidade nem nas suas palavras nem nas suas ações.&lt;/p></description></item><item><title>Tapas and beer</title><link>https://brunopedro.com/2012/09/23/tapas-and-beer/</link><pubDate>Sun, 23 Sep 2012 21:29:48 +0000</pubDate><guid>https://brunopedro.com/2012/09/23/tapas-and-beer/</guid><description>&lt;p>&lt;img src="https://brunopedro.com/media/2012/09/dsc_0226.jpg" alt="Tapas and beer">&lt;/p>
&lt;p>Tapas and beer&lt;/p></description></item><item><title>Use computers to do things</title><link>https://brunopedro.com/2012/09/17/use-computers-to-do-things/</link><pubDate>Mon, 17 Sep 2012 10:03:16 +0000</pubDate><guid>https://brunopedro.com/2012/09/17/use-computers-to-do-things/</guid><description>&lt;p>&lt;a href="http://zachholman.com/talk/unsucking-your-teams-development-environment" title="Use computers to do things">Use computers to do things&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>As you grow, your team&amp;rsquo;s development environment becomes really important. How long does it take to clone, set up, and boot your apps? Can your employees still be productive on an aging codebase? How can you automate CI, hooks, and other setup for new projects? Is any of this fun anymore?&lt;/p>
&lt;/blockquote></description></item><item><title>4 Time-Saving Tumblr Tips</title><link>https://brunopedro.com/2012/09/15/4-time-saving-tumblr-tips/</link><pubDate>Sat, 15 Sep 2012 08:25:56 +0000</pubDate><guid>https://brunopedro.com/2012/09/15/4-time-saving-tumblr-tips/</guid><description>&lt;blockquote>
&lt;p>There are also plenty of third-party apps that can perform multiple tasks in one place. Tarpipe will automate your publishing on up to 22 different platforms and keep a backlog of activity&lt;/p>
&lt;/blockquote>
&lt;p>via &lt;a href="http://www.openforum.com/articles/4-time-saving-tumblr-tips-for-small-business">4 Time-Saving Tumblr Tips : Technology :: American Express OPEN Forum&lt;/a>.&lt;/p></description></item><item><title>AsciiDoc</title><link>https://brunopedro.com/2012/09/12/asciidoc/</link><pubDate>Wed, 12 Sep 2012 20:46:38 +0000</pubDate><guid>https://brunopedro.com/2012/09/12/asciidoc/</guid><description>&lt;blockquote>
&lt;p>AsciiDoc is a text document format for writing notes, documentation, articles, books, ebooks, slideshows, web pages, man pages and blogs. AsciiDoc files can be translated to many formats including &lt;a href="http://en.wikipedia.org/wiki/HTML" title="HTML">HTML&lt;/a>, PDF, &lt;a href="http://en.wikipedia.org/wiki/EPUB" title="EPUB">EPUB&lt;/a>, &lt;a href="http://en.wikipedia.org/wiki/Man_page" title="Man page">man page&lt;/a>. &amp;ndash; via &lt;a href="http://www.methods.co.nz/asciidoc/">AsciiDoc Home Page&lt;/a>.&lt;/p>
&lt;/blockquote>
&lt;p>Very interesting because it lets you export documents to &lt;a href="http://en.wikipedia.org/wiki/DocBook" title="DocBook">DocBook&lt;/a> and from there you can easily generate HTML and PDF.&lt;/p>
&lt;p>Some books written using AsciiDoc:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="http://guide.couchdb.org/">CouchDB: The Definitive Guide&lt;/a>&lt;/li>
&lt;li>&lt;a href="http://shop.oreilly.com/product/0636920010258.do">Programming iOS 4&lt;/a>&lt;/li>
&lt;li>&lt;a href="http://shop.oreilly.com/product/9780596155964.do">Programming Scala&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Advertising’s bumpy transition</title><link>https://brunopedro.com/2012/09/11/advertisings-bumpy-transition/</link><pubDate>Tue, 11 Sep 2012 22:35:59 +0000</pubDate><guid>https://brunopedro.com/2012/09/11/advertisings-bumpy-transition/</guid><description>&lt;p>&lt;a href="http://sethgodin.typepad.com/seths_blog/2012/08/advertisings-bumpy-transition-and-why-it-matters-to-you.html" title="Advertising's bumpy transition">Advertising&amp;rsquo;s bumpy transition&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>Until advertisers start to value the focused, memorable, impactful opportunity they have in buying the right ads in the right place for the right audience, web users are going to be stuck seeing irrelevant ads on sites that don&amp;rsquo;t respect their time and attention as much as they should.&lt;/p>
&lt;/blockquote></description></item><item><title>Black Swan Farming</title><link>https://brunopedro.com/2012/09/11/black-swan-farming/</link><pubDate>Tue, 11 Sep 2012 18:34:21 +0000</pubDate><guid>https://brunopedro.com/2012/09/11/black-swan-farming/</guid><description>&lt;p>&lt;a href="http://paulgraham.com/swan.html" title="Black Swan Farming">Black Swan Farming&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>The total value of the companies we&amp;rsquo;ve funded is around 10 billion, give or take a few. But just two companies, Dropbox and Airbnb, account for about three quarters of it.&lt;/p>
&lt;/blockquote></description></item><item><title>Use sprints to maximize productivity</title><link>https://brunopedro.com/2012/09/06/use-sprints-to-maximize-productivity/</link><pubDate>Thu, 06 Sep 2012 21:18:54 +0000</pubDate><guid>https://brunopedro.com/2012/09/06/use-sprints-to-maximize-productivity/</guid><description>&lt;p>&lt;a href="http://blog.teamtreehouse.com/productivity-hacks-for-new-businesses" title="Use sprints to maximize productivity">Use sprints to maximize productivity&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>The powerful thing about Sprinting is that it helps you break projects down into actionable steps. Checking things off your todo list gives you a great sense of accomplishment throughout the day. Looking at all the completed todos on your list at the end of the day allows you to relax in the evening, knowing you accomplished a lot that day.&lt;/p></description></item><item><title>Agile development &amp; WMSS</title><link>https://brunopedro.com/2012/09/04/agile-development-wmss/</link><pubDate>Tue, 04 Sep 2012 21:16:08 +0000</pubDate><guid>https://brunopedro.com/2012/09/04/agile-development-wmss/</guid><description>&lt;p>&lt;a href="http://scripting.com/stories/2012/09/03/agileProgrammingWmss.html" title="Agile development &amp;amp; WMSS">Agile development &amp;amp; WMSS&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>I think what I &lt;a href="http://scripting.com/davenet/1995/09/03/wemakeshittysoftware.html">called&lt;/a> We Make Shitty Software is in other words the same thing as the &lt;a href="http://en.wikipedia.org/wiki/Agile_software_development">agile&lt;/a> process. Whatever it&amp;rsquo;s called, we all acknowledge that our software is imperfect, it&amp;rsquo;s a process, but we&amp;rsquo;re working to make it better, and more responsive to users.&lt;/p>
&lt;/blockquote></description></item><item><title>A Hardware Renaissance in Silicon Valley</title><link>https://brunopedro.com/2012/08/27/a-hardware-renaissance-in-silicon-valley/</link><pubDate>Mon, 27 Aug 2012 20:55:43 +0000</pubDate><guid>https://brunopedro.com/2012/08/27/a-hardware-renaissance-in-silicon-valley/</guid><description>&lt;p>&lt;a href="http://www.nytimes.com/2012/08/26/technology/silicon-valleys-hardware-renaissance.html" title="A Hardware Renaissance in Silicon Valley">A Hardware Renaissance in Silicon Valley&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>Today some of the most successful hardware &lt;a href="http://en.wikipedia.org/wiki/Startup_company" title="Startup company">start-ups&lt;/a> in Silicon Valley have been formed from the diaspora of former &lt;a href="http://www.google.com/finance?q=NASDAQ:AAPL" title="NASDAQ: AAPL">Apple&lt;/a> employees who want to try their hand at companies that pair hardware and software (&amp;hellip;)&lt;/p>
&lt;/blockquote></description></item><item><title>Water LED Art</title><link>https://brunopedro.com/2012/08/23/water-led-art/</link><pubDate>Thu, 23 Aug 2012 12:18:29 +0000</pubDate><guid>https://brunopedro.com/2012/08/23/water-led-art/</guid><description>&lt;p>&lt;a href="http://happyrobotlabs.com/posts/project/water-led-art-making-leds-light-up-with-water/" title="Water LED Art">Water LED Art&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>When art and electronics meet some very beautiful things can be born. Here &lt;a href="http://atocorp.free.fr/">Antonin Fourneau&lt;/a> made this wonderful piece, basically a wall of &lt;a href="http://en.wikipedia.org/wiki/Printed_circuit_board" title="Printed circuit board">circuit boards&lt;/a> with &lt;a href="http://en.wikipedia.org/wiki/Light-emitting_diode" title="Light-emitting diode">LEDs&lt;/a>, when exposed to water the LEDs light up.&lt;/p>
&lt;/blockquote></description></item><item><title>Tent: Open Social Networking protocol</title><link>https://brunopedro.com/2012/08/23/tent-open-social-networking-protocol/</link><pubDate>Thu, 23 Aug 2012 08:49:09 +0000</pubDate><guid>https://brunopedro.com/2012/08/23/tent-open-social-networking-protocol/</guid><description>&lt;p>&lt;a href="http://tent.io/" title="Tent: Open Social Networking protocol">Tent: Open Social Networking protocol&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>Tent is a protocol for open, decentralized social networking. Tent users share content with apps and each other. Anyone can run a Tent server, or write an app or alternative server implementation that uses the Tent protocol. Users can take their content and relationships with them when they change or move servers. Tent supports extensible &lt;a href="http://en.wikipedia.org/wiki/Data_type" title="Data type">data types&lt;/a> so developers can create new kinds of interaction.&lt;/p></description></item><item><title>Ghosts in the ROM</title><link>https://brunopedro.com/2012/08/22/ghosts-in-the-rom/</link><pubDate>Wed, 22 Aug 2012 13:03:48 +0000</pubDate><guid>https://brunopedro.com/2012/08/22/ghosts-in-the-rom/</guid><description>&lt;p>&lt;a href="http://www.nycresistor.com/2012/08/21/ghosts-in-the-rom/" title="Ghosts in the ROM">Ghosts in the ROM&lt;/a>&lt;/p>
&lt;p>&lt;a href="http://www.nycresistor.com/2012/08/21/ghosts-in-the-rom/">&lt;img src="http://farm9.staticflickr.com/8308/7826686642_dd3efbc891_o.png" alt="" title="Ghosts in the ROM">&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>(&amp;hellip;) we noticed that there was a large amount of non-code, non-audio data. Adam Mayer tested different stride widths and found that at 67 bytes (536 pixels across) there appeared to be some sort of image data that clearly was a picture of people.&lt;/p>
&lt;/blockquote></description></item><item><title>Amazon Glacier</title><link>https://brunopedro.com/2012/08/21/amazon-glacier/</link><pubDate>Tue, 21 Aug 2012 08:45:29 +0000</pubDate><guid>https://brunopedro.com/2012/08/21/amazon-glacier/</guid><description>&lt;p>&lt;a href="http://aws.amazon.com/glacier/" title="Amazon Glacier">Amazon Glacier&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>Amazon Glacier is an extremely low-cost storage service that provides secure and durable storage for data archiving and backup. In order to keep costs low, Amazon Glacier is optimized for data that is infrequently accessed and for which retrieval times of several hours are suitable. With Amazon Glacier, customers can reliably store large or small amounts of data for as little as $0.01 per gigabyte per month, a significant savings compared to on-premises solutions.&lt;/p></description></item><item><title>Harvard cracks DNA storage</title><link>https://brunopedro.com/2012/08/18/harvard-cracks-dna-storage/</link><pubDate>Sat, 18 Aug 2012 10:36:43 +0000</pubDate><guid>https://brunopedro.com/2012/08/18/harvard-cracks-dna-storage/</guid><description>&lt;p>&lt;a href="http://www.extremetech.com/extreme/134672-harvard-cracks-dna-storage-crams-700-terabytes-of-data-into-a-single-gram" title="Harvard cracks DNA storage">Harvard cracks DNA storage&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>A bioengineer and geneticist at Harvard&amp;rsquo;s Wyss Institute have successfully stored 5.5 petabits of data &amp;ndash; around 700 terabytes &amp;ndash; in a single gram of DNA, smashing the previous DNA &lt;a href="http://en.wikipedia.org/wiki/Memory_storage_density" title="Memory storage density">data density&lt;/a> record by a thousand times.&lt;/p>
&lt;/blockquote></description></item><item><title>A Casa Portuguesa</title><link>https://brunopedro.com/2012/08/16/a-casa-portuguesa/</link><pubDate>Thu, 16 Aug 2012 08:44:59 +0000</pubDate><guid>https://brunopedro.com/2012/08/16/a-casa-portuguesa/</guid><description>&lt;p>&lt;a href="http://www.acasaportuguesa.com/">&lt;img src="https://brunopedro.com/media/2012/08/img-20120815-wa00041.jpg" alt="A Casa Portuguesa">&lt;/a>&lt;/p></description></item><item><title>Falta de mão-de-obra qualificada</title><link>https://brunopedro.com/2012/08/14/falta-de-mao-de-obra-qualificada/</link><pubDate>Tue, 14 Aug 2012 17:23:53 +0000</pubDate><guid>https://brunopedro.com/2012/08/14/falta-de-mao-de-obra-qualificada/</guid><description>&lt;p>De acordo com alguns autores estamos a caminhar para uma falta generalizada de mão-de-obra qualificada. Este cenário começará por afectar o sector das tecnologias de informação mas alastrar-se-á a praticamente todas as áreas.&lt;/p>
&lt;p>O artigo &amp;ldquo;&lt;a href="http://www.nytimes.com/2007/03/10/business/10labor.html?ex=1178078400&amp;amp;en=1ae7d706e44bb36d&amp;amp;ei=5070">Some Sectors in Europe Face a Labor Shortage&lt;/a>&amp;rdquo; do &lt;a href="http://www.nytimes.com/">NY Times&lt;/a> demonstra algumas preocupações. Traduzindo o original:&lt;/p>
&lt;blockquote>
&lt;p>(&amp;hellip;) Dados do principal inquérito sobre falta de mão-de-obra da Comissão Europeia e de entrevistas em empresas das industrias de equipamento informático, &lt;em>software&lt;/em>, ferramentas, moda e banca, revelam que a falta de mão-de-obra já não era tão acentuada desde os anos do &lt;em>boom&lt;/em> tecnológico no princípio desta década. (&amp;hellip;)&lt;/p></description></item><item><title>What is branch.com?</title><link>https://brunopedro.com/2012/08/14/what-is-branch-com/</link><pubDate>Tue, 14 Aug 2012 09:28:12 +0000</pubDate><guid>https://brunopedro.com/2012/08/14/what-is-branch-com/</guid><description>&lt;p>&lt;a href="http://branch.com/" title="What is branch.com?">What is branch.com?&lt;/a>&lt;/p>
&lt;p>A mix between Convore, &lt;a href="http://https://plus.google.com/" title="Google+">Google+&lt;/a> circles and some of &lt;a href="http://friendfeed.com/" title="FriendFeed">FriendFeed&lt;/a>&amp;hellip; Their killer feature is called &lt;em>branching&lt;/em> and it lets you create your own version of a conversation starting from a specific entry.&lt;/p></description></item><item><title>Greece</title><link>https://brunopedro.com/2012/08/13/greece/</link><pubDate>Mon, 13 Aug 2012 20:32:46 +0000</pubDate><guid>https://brunopedro.com/2012/08/13/greece/</guid><description>&lt;p>&lt;img src="https://brunopedro.com/media/2012/08/436930.jpg" alt="Greece">&lt;/p>
&lt;p>Will Greece leave the eurozone?&lt;/p></description></item><item><title>Portugal as a source of cheap talent</title><link>https://brunopedro.com/2012/08/13/portugal-as-a-source-of-cheap-talent/</link><pubDate>Mon, 13 Aug 2012 08:31:58 +0000</pubDate><guid>https://brunopedro.com/2012/08/13/portugal-as-a-source-of-cheap-talent/</guid><description>&lt;p>&lt;a href="http://gigaom.com/europe/portugal-shows-how-the-eurozone-crisis-is-turning-the-old-world-upside-down/" title="Portugal as a source of cheap talent">Portugal as a source of cheap talent&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>Western technology companies have traditionally looked to developing economies as a place to find cheap, abundant talent. But thanks to the Eurozone&amp;rsquo;s problems and the &lt;a href="http://en.wikipedia.org/wiki/European_sovereign_debt_crisis" title="European sovereign debt crisis">sovereign debt crisis&lt;/a>, things are changing rapidly: Just ask the Portuguese, who are finding themselves subordinate to fast-growing [Brazil](&lt;a href="http://maps.google.com/maps?ll=-15.75,-47.95&amp;amp;spn=10.0,10.0&amp;amp;q=-15.75,-47.95">http://maps.google.com/maps?ll=-15.75,-47.95&amp;amp;spn=10.0,10.0&amp;amp;q=-15.75,-47.95&lt;/a> (Brazil)&amp;amp;t=h &amp;ldquo;Brazil&amp;rdquo;).&lt;/p>
&lt;/blockquote></description></item><item><title>Beer</title><link>https://brunopedro.com/2012/08/10/beer/</link><pubDate>Fri, 10 Aug 2012 11:33:32 +0000</pubDate><guid>https://brunopedro.com/2012/08/10/beer/</guid><description>&lt;p>&lt;a href="https://brunopedro.com/media/2012/08/wpid-13445981994641.jpg">&lt;img src="https://brunopedro.com/media/2012/08/wpid-1344598199464.jpg" alt="image" title="1344598199464.jpg">&lt;/a>&lt;/p></description></item><item><title>Apple store Barcelona</title><link>https://brunopedro.com/2012/08/09/apple-store-barcelona/</link><pubDate>Thu, 09 Aug 2012 19:14:45 +0000</pubDate><guid>https://brunopedro.com/2012/08/09/apple-store-barcelona/</guid><description>&lt;p>&lt;a href="https://brunopedro.com/media/2012/08/wpid-13445395853401.jpg">&lt;img src="https://brunopedro.com/media/2012/08/wpid-1344539585340.jpg" alt="image" title="1344539585340.jpg">&lt;/a>&lt;/p></description></item><item><title>pandoc</title><link>https://brunopedro.com/2012/08/09/pandoc/</link><pubDate>Thu, 09 Aug 2012 14:30:03 +0000</pubDate><guid>https://brunopedro.com/2012/08/09/pandoc/</guid><description>&lt;p>&lt;a href="http://johnmacfarlane.net/pandoc/index.html" title="http://johnmacfarlane.net/pandoc/index.html">http://johnmacfarlane.net/pandoc/index.html&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>If you need to convert files from one markup format into another, pandoc is your swiss-army knife.&lt;/p>
&lt;/blockquote></description></item><item><title>If Xerox PARC Invented the PC, Google Invented the Internet</title><link>https://brunopedro.com/2012/08/09/if-xerox-parc-invented-the-pc-google-invented-the-internet/</link><pubDate>Thu, 09 Aug 2012 08:28:30 +0000</pubDate><guid>https://brunopedro.com/2012/08/09/if-xerox-parc-invented-the-pc-google-invented-the-internet/</guid><description>&lt;blockquote>
&lt;p>&lt;a href="http://google.com" title="Google">Google&lt;/a> did a great job of slurping up some of the most talented researchers in the world at a time when places like &lt;a href="http://en.wikipedia.org/wiki/Bell_Labs" title="Bell Labs">Bell Labs&lt;/a> and &lt;a href="http://www.parc.com/" title="PARC (company)">Xerox PARC&lt;/a> were dying. It managed to grab not just their researchers, but their lifeblood.&lt;/p>
&lt;/blockquote>
&lt;p>&lt;a href="http://www.wired.com/wiredenterprise/2012/08/google-as-xerox-parc/all/">Great story&lt;/a> about some of the most under-appreciated engineers behind Google.&lt;/p></description></item><item><title>My stuff stretches the boundaries</title><link>https://brunopedro.com/2012/08/08/my-stuff-stretches-the-boundaries/</link><pubDate>Wed, 08 Aug 2012 09:28:41 +0000</pubDate><guid>https://brunopedro.com/2012/08/08/my-stuff-stretches-the-boundaries/</guid><description>&lt;blockquote>
&lt;p>my stuff stretches the boundaries of what&amp;rsquo;s possible, which makes it a mystery for many of the people I would like to have use it.&lt;/p>
&lt;/blockquote>
&lt;p>&lt;a href="http://scripting.com" title="Dave Winer">Dave Winer&lt;/a>, &lt;a href="http://scripting.com/stories/2012/08/06/chippingAwayAtHardForThePo.html" title="Chipping away at 'hard' -- for the poets">writing about&lt;/a> how most of the time what is easy and understandable for a developer is not for a regular user. In those cases, tutorials and proper documentation should be available.&lt;/p></description></item><item><title>Coffee</title><link>https://brunopedro.com/2012/08/07/coffee/</link><pubDate>Tue, 07 Aug 2012 08:35:08 +0000</pubDate><guid>https://brunopedro.com/2012/08/07/coffee/</guid><description>&lt;p>&lt;img src="https://brunopedro.com/media/2012/08/wpid-13443284468761.jpg" alt="Coffee">&lt;/p></description></item><item><title>Force of Nature</title><link>https://brunopedro.com/2012/08/06/force-of-nature/</link><pubDate>Mon, 06 Aug 2012 13:41:48 +0000</pubDate><guid>https://brunopedro.com/2012/08/06/force-of-nature/</guid><description>&lt;p>I just found out about &lt;a href="http://www.wired.com/culture/art/magazine/17-07/pl_art?currentPage=all" title="Force of Nature">this great work&lt;/a> by &lt;a href="http://www.buelteman.com/home.html">Robert Buelteman&lt;/a>.&lt;/p></description></item><item><title>MapReduce related patterns</title><link>https://brunopedro.com/2011/09/26/mapreduce-related-patterns/</link><pubDate>Mon, 26 Sep 2011 21:16:15 +0000</pubDate><guid>https://brunopedro.com/2011/09/26/mapreduce-related-patterns/</guid><description>&lt;p>Here&amp;rsquo;s a list of possible MapReduce related patterns I&amp;rsquo;ve been thinking about:&lt;/p>
&lt;ul>
&lt;li>&lt;em>map-update&lt;/em>: update each mapped document and emit its updated or original version;&lt;/li>
&lt;li>&lt;em>map-delete&lt;/em>: delete each mapped document;&lt;/li>
&lt;li>&lt;em>map-reduce-map&lt;/em>: map results of a &lt;em>map-reduce&lt;/em>;&lt;/li>
&lt;li>&lt;em>map-map&lt;/em>: map results of a &lt;em>map&lt;/em>;&lt;/li>
&lt;li>&lt;em>map-recurse&lt;/em>: apply recursion to the mapping function until a stop condition occurs;&lt;/li>
&lt;li>any combination of patterns, e.g., &lt;em>map-reduce-map-update&lt;/em>.&lt;/li>
&lt;/ul>
&lt;p>Example usage:&lt;/p>
&lt;ul>
&lt;li>get the e-mail address of every customer with a negative balance: &lt;em>map-reduce-map&lt;/em>. First, &lt;em>map-reduce&lt;/em> to get the aggregate balance for each customer, then &lt;em>map&lt;/em> again to get only customers with negative value and emit their e-mail address;&lt;/li>
&lt;li>delete all documents older than one month: &lt;em>map-delete&lt;/em>. First, &lt;em>map&lt;/em> to get all documents older than one month and then &lt;em>delete&lt;/em> each one;&lt;/li>
&lt;li>get a list of documents and mark them as read: &lt;em>map-update&lt;/em>. First, &lt;em>map&lt;/em> to get the list of documents according to a given criteria, then &lt;em>update&lt;/em> each document marking it as read;&lt;/li>
&lt;li>and so on&amp;hellip;&lt;/li>
&lt;/ul></description></item><item><title>node-fs npm package</title><link>https://brunopedro.com/2011/04/14/node-fs-npm/</link><pubDate>Thu, 14 Apr 2011 10:30:14 +0000</pubDate><guid>https://brunopedro.com/2011/04/14/node-fs-npm/</guid><description>&lt;p>&lt;a href="https://github.com/bpedro/node-fs" title="node-fs">node-fs&lt;/a> is now available as an &lt;a href="http://search.npmjs.org/#/node-fs" title="node-fs npm package">npm package&lt;/a>. Just run npm install node-fs, require(&amp;rsquo;node-fs&amp;rsquo;) and have fun.&lt;/p></description></item><item><title>Blog posts firehoses</title><link>https://brunopedro.com/2011/04/13/blog-firehoses/</link><pubDate>Wed, 13 Apr 2011 23:40:55 +0000</pubDate><guid>https://brunopedro.com/2011/04/13/blog-firehoses/</guid><description>&lt;p>Three more firehoses to get all blog posts from the following platforms:&lt;/p>
&lt;ol>
&lt;li>blogger posts, through their changes.xml;&lt;/li>
&lt;li>tumblr posts, through &lt;a href="http://superfeedr.com">superfeedr&lt;/a>&amp;rsquo;s &lt;a href="http://superfeedr.com/documentation#track">track&lt;/a> feature;&lt;/li>
&lt;li>WordPress.com posts, through their &lt;a href="http://en.wordpress.com/firehose/">firehose&lt;/a> feature.&lt;/li>
&lt;/ol>
&lt;p>While the first feed is free of charge, the other two have an attached price tag.&lt;/p>
&lt;p>Also worth investigating is Paul Kinlan&amp;rsquo;s &lt;a href="https://github.com/PaulKinlan/blogger-firehose">faux firehose&lt;/a> for blogger.&lt;/p></description></item><item><title>Drinking from the firehose</title><link>https://brunopedro.com/2011/04/12/firehose/</link><pubDate>Tue, 12 Apr 2011 15:22:27 +0000</pubDate><guid>https://brunopedro.com/2011/04/12/firehose/</guid><description>&lt;p>Some firehoses to &lt;del>drink&lt;/del> read from, other than twitter&amp;rsquo;s:&lt;/p>
&lt;ol>
&lt;li>Google Buzz, through their &lt;a href="http://code.google.com/apis/buzz/v1/using_rest.html#firehose">activity firehose&lt;/a> API methods;&lt;/li>
&lt;li>FriendFeed, using their &lt;a href="http://friendfeed.com/api/documentation#realtime">real-time updates&lt;/a> methods.&lt;/li>
&lt;/ol>
&lt;p>While the first works via &lt;a href="http://code.google.com/p/pubsubhubbub/">pubsubhubhub&lt;/a>, the second uses a combination of &lt;a href="http://en.wikipedia.org/wiki/Push_technology#Long_polling">long polling&lt;/a> and a cursor that helps you make subsequent calls.&lt;/p></description></item><item><title>Are we inside a bubble?</title><link>https://brunopedro.com/2011/04/11/bubble/</link><pubDate>Mon, 11 Apr 2011 16:03:36 +0000</pubDate><guid>https://brunopedro.com/2011/04/11/bubble/</guid><description>&lt;p>Very interesting post by &lt;a href="http://www.feld.com/" title="Brad Feld">Brad Feld&lt;/a> about technology cycles.&lt;/p>
&lt;blockquote>
&lt;p>If you recognize that we are in a strong, positive, upward segment of the current &amp;ldquo;tech company creation cycle&amp;rdquo;, that&amp;rsquo;s more than enough. You should accept that we&amp;rsquo;ll be back in a downward part of the cycle at some point, but that we don&amp;rsquo;t know if it&amp;rsquo;ll be in a week, month, year, or decade. &amp;ndash; &lt;a href="http://www.feld.com/wp/archives/2011/04/i-encourage-entrepreneurs-to-ignore-the-word-bubble.html">I Encourage Entrepreneurs To Ignore The Word &amp;ldquo;Bubble&amp;rdquo;&lt;/a>&lt;/p></description></item><item><title>FPC: a floating-point compressor</title><link>https://brunopedro.com/2011/04/08/fpc/</link><pubDate>Fri, 08 Apr 2011 13:14:59 +0000</pubDate><guid>https://brunopedro.com/2011/04/08/fpc/</guid><description>&lt;p>&lt;a href="http://www.csl.cornell.edu/~burtscher/research/FPC/" title="FPC">FPC&lt;/a> is a very fast lossless compressor with better results than most traditional algorithms:&lt;/p>
&lt;blockquote>
&lt;p>FPC compresses linear sequences of IEEE 754 double-precision floating-point values by sequentially predicting each value, xoring the true value with the predicted value, and leading-zero compressing the result.&lt;/p>
&lt;/blockquote></description></item><item><title>Three things to remember</title><link>https://brunopedro.com/2011/04/08/three-things-to-remember/</link><pubDate>Fri, 08 Apr 2011 00:00:32 +0000</pubDate><guid>https://brunopedro.com/2011/04/08/three-things-to-remember/</guid><description>&lt;p>Three simple things that can make all the difference.&lt;/p>
&lt;ol>
&lt;li>talk about things you&amp;rsquo;ve done, not about things that you wish you did;&lt;/li>
&lt;li>measure reactions to everything you do, react by changing things if needed;&lt;/li>
&lt;li>stop planning and just do it!&lt;/li>
&lt;/ol></description></item><item><title>node-fs</title><link>https://brunopedro.com/2011/01/05/node-fs/</link><pubDate>Wed, 05 Jan 2011 19:20:30 +0000</pubDate><guid>https://brunopedro.com/2011/01/05/node-fs/</guid><description>&lt;p>Following my previous post about &lt;a href="https://brunopedro.com/2010/12/15/recursive-directory-nodejs/" title="recursive directory creation with nodejs">recursive directory creation&lt;/a> with nodejs, I created the &lt;a href="https://github.com/bpedro/node-fs" title="node-fs">node-fs&lt;/a> repository on &lt;a href="http://github.com" title="github">github&lt;/a>. node-fs is a way to extend &lt;a href="http://nodejs.org" title="nodejs">nodejs&lt;/a> original fs library, adding recursive directory creation to the mkdir() and mkdirSync() functions.&lt;/p></description></item><item><title>Is OAuth Really Secure?</title><link>https://brunopedro.com/2011/01/05/is-oauth-really-secure/</link><pubDate>Wed, 05 Jan 2011 01:01:27 +0000</pubDate><guid>https://brunopedro.com/2011/01/05/is-oauth-really-secure/</guid><description>&lt;p>&amp;ldquo;Is OAuth Really Secure?&amp;rdquo; is the title of a &lt;a href="http://www.slideshare.net/bpedro/is-oauth-really-secure">talk&lt;/a> I gave at the &lt;a href="http://www.owasp.org/index.php/IBWAS10" title="IBWAS'10">IBWAS'10 conference&lt;/a>, last December.&lt;/p>
&lt;p>Is the &lt;a href="http://oauth.net" title="OAuth">OAuth&lt;/a> protocol really secure? Even though the OAuth authorization protocol has been published as the &lt;a href="http://tools.ietf.org/html/rfc5849">RFC 5849&lt;/a> and is being widely adopted by large Internet companies, it&amp;rsquo;s important to stress out its possible security vulnerabilities.&lt;/p>
&lt;p>This talk focuses on the &lt;a href="http://owasp.org" title="OWASP">OWASP&lt;/a> &lt;a href="http://www.owasp.org/index.php/Category:OWASP_Top_Ten_Project">Top 10 Application Security Risks&lt;/a> and how OAuth is affected by them. While some of the security risks are mitigated by OAuth, developers need to take some action to prevent other risks from affecting their implementations.&lt;/p></description></item><item><title>Publications</title><link>https://brunopedro.com/publications/</link><pubDate>Tue, 04 Jan 2011 14:29:01 +0000</pubDate><guid>https://brunopedro.com/publications/</guid><description>&lt;h2 id="published-books">
Published books
&lt;a href="#published-books" class="heading-anchor">#&lt;/a>
&lt;/h2>
&lt;p>&lt;label for="marginnote-1" class="margin-toggle marginnote-ind">&lt;/label>
&lt;input type="checkbox" id="marginnote-1" class="margin-toggle"/>
&lt;span class="marginnote">
&lt;img src="https://brunopedro.com/media/publications/building-api-product.jpg" alt="Building an API Product">
&lt;/span>&lt;/p>
&lt;p>&lt;label for="marginnote-2" class="margin-toggle marginnote-ind">&lt;/label>
&lt;input type="checkbox" id="marginnote-2" class="margin-toggle"/>
&lt;span class="marginnote">
&lt;img src="https://brunopedro.com/media/publications/php-smarty.png" alt="PHP and Smarty on Large-Scale Web Development">
&lt;/span>&lt;/p>
&lt;ul>
&lt;li>B. Pedro, &amp;ldquo;&lt;a href="https://a.co/d/ar4V3bn">Building an API Product: Design, implement, release, and maintain API products that meet user needs&lt;/a>&amp;rdquo;, Packt Publishing, 2024&lt;/li>
&lt;li>B. Doerrfeld, A. Krohn, K. Sandoval, and B. Pedro, &amp;ldquo;&lt;a href="https://www.amazon.es/dp/B011ACJ368/ref=cm_sw_r_tw_dp_U_x_DUIZAbCB7TSP5">The API Lifecycle: An Agile Process for Managing the Life of an API&lt;/a>&amp;rdquo;, Nordic APIs, 2015&lt;/li>
&lt;li>B. Pedro and V. Rodrigues, &amp;ldquo;&lt;a href="http://www.oreilly.fr/catalogue/2354020724">PHP et Smarty pour du développement web à grande échelle&lt;/a>&amp;rdquo; (in french), Editions O&amp;rsquo;Reilly, ISBN 2-35402-072-4, November 2007 (republished in 2009 by Digit Books with ISBN 978-2-81500-047-5)&lt;/li>
&lt;li>B. Pedro and V. Rodrigues, &amp;ldquo;&lt;a href="http://www.oreilly.com/catalog/9780596513795/">PHP and Smarty on Large-Scale Web Development&lt;/a>&amp;rdquo;, O&amp;rsquo;Reilly Media Inc., ISBN 0-596-51379-8, June 20, 2007&lt;/li>
&lt;/ul>
&lt;h2 id="published-magazine-articles">
Published magazine articles
&lt;a href="#published-magazine-articles" class="heading-anchor">#&lt;/a>
&lt;/h2>
&lt;ul>
&lt;li>B. Pedro, &amp;ldquo;&lt;a href="https://web.archive.org/web/20080702191201/http://www.oreillynet.com/onlamp/blog/2008/06/the_executable_web.html">The executable Web&lt;/a>&amp;rdquo;, O&amp;rsquo;Reilly ONLamp, June 2008&lt;/li>
&lt;li>B. Pedro, &amp;ldquo;Caching techniques for the PHP developer&amp;rdquo;, php architect, Vol. III, issue 2, pp. 51–57, February 2004.&lt;/li>
&lt;li>B. Pedro, &amp;ldquo;&lt;a href="http://www.xml.com/pub/a/2003/06/18/php-xml.html">Transforming XML with PHP&lt;/a>&amp;rdquo;, XML.com, June 18, 2003.&lt;/li>
&lt;li>B. Pedro, &amp;ldquo;Using The PEAR::XML Transformer&amp;rdquo;, php architect, Vol. II, issue 4, pp. 52–60, April 2003.&lt;/li>
&lt;li>B. Pedro, &amp;ldquo;&lt;a href="https://web.archive.org/web/20110721111702/http://www.linuxvilag.hu/content/files/cikk/15/cikk_15_34_35.pdf">Miképp növelhetjük PHP-programjaink sebességét?&lt;/a>&amp;rdquo; (in hungarian), Linuxvilág, Vol. 15, pp. 34–35, April 2002.&lt;/li>
&lt;li>B. Pedro, &amp;ldquo;&lt;a href="http://www.linuxjournal.com/article/5661">Improving the Speed of PHP Web Scripts&lt;/a>&amp;rdquo;, Linux Journal, Vol. 95, p. 78, 80–81, March 2002.&lt;/li>
&lt;li>B. Pedro, &amp;ldquo;&lt;a href="https://web.archive.org/web/20111005195332/http://www.business-int.com/categories/web-content-management/future-web-hosting-web-content-management.asp">The Future of Web Hosting: Web Content Management&lt;/a>&amp;rdquo;, Business International, p. 174, Spring 2002.&lt;/li>
&lt;li>B. Pedro, &amp;ldquo;Deleting Temporary Files Created by Web Sites Using PHP&amp;rdquo;, Sys Admin: The Journal for UNIX Systems Administrators, 11(2), p. 30, 32–33, February 2002.&lt;/li>
&lt;/ul></description></item><item><title>MapReduce literature</title><link>https://brunopedro.com/2010/12/22/mapreduce-literature/</link><pubDate>Wed, 22 Dec 2010 13:13:45 +0000</pubDate><guid>https://brunopedro.com/2010/12/22/mapreduce-literature/</guid><description>&lt;p>Just a quick note to point to two valuable MapReduce related resources:&lt;/p>
&lt;ul>
&lt;li>&amp;ldquo;&lt;a href="http://labs.google.com/papers/mapreduce.html">MapReduce: Simplified Data Processing on Large Clusters&lt;/a>&amp;rdquo;, by Jeffrey Dean and Sanjay Ghemawat: the original paper describing Google&amp;rsquo;s MapReduce strategy;&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>MapReduce is a programming model and an associated implementation for processing and generating large data sets. Users specify a map function that processes a key/value pair to generate a set of intermediate key/value pairs, and a reduce function that merges all intermediate values associated with the same intermediate key. Many real world tasks are expressible in this model, as shown in the paper.&lt;/p></description></item><item><title>JavaScript filesystem database</title><link>https://brunopedro.com/2010/12/21/javascript-fs-db/</link><pubDate>Tue, 21 Dec 2010 18:33:00 +0000</pubDate><guid>https://brunopedro.com/2010/12/21/javascript-fs-db/</guid><description>&lt;p>I couldn&amp;rsquo;t resist and, after many conversations with &lt;a href="http://mvalente.eu/" title="Mário Valente">Mário Valente&lt;/a>, I challenged myself to build a complete JavaScript filesystem based database from scratch. In short, something like &lt;a href="http://couchdb.org" title="CouchDB">CouchDB&lt;/a> but written in JavaScript and using a filesystem approach for document storage.&lt;/p>
&lt;p>Some characteristics of this new database system:&lt;/p>
&lt;ul>
&lt;li>fully written in JavaScript: &lt;a href="http://nodejs.org/" title="nodeJS">nodeJS&lt;/a> is my choice for its architecture and portability;&lt;/li>
&lt;li>every document must contain only &lt;a href="http://www.json.org/" title="JSON">JSON&lt;/a> data;&lt;/li>
&lt;li>every document can be manipulated on the filesystem: the idea is to allow someone to edit a document using &lt;a href="http://www.vim.org/" title="vim">vim&lt;/a>, for instance, without breaking anything. It also lets you easily backup, move or replicate your data without creating a heavy load on the database;&lt;/li>
&lt;li>the underlying filesystem can be changed: changing the underlying filesystem offers numerous possibilities, like easy distribution (using &lt;a href="http://www.openafs.org/" title="OpenAFS">OpenAFS&lt;/a>, &lt;a href="http://www.xtreemfs.org/" title="XTREEMFS">XTREEMFS&lt;/a> or others), replication (using &lt;a href="http://code.google.com/p/finefs/" title="finefs">finefs&lt;/a> or others), and even attaching different backends (using &lt;a href="http://fuse.sourceforge.net/" title="FUSE">FUSE&lt;/a>, for example);&lt;/li>
&lt;li>the system must be available through an HTTP &lt;a href="http://en.wikipedia.org/wiki/Representational_State_Transfer" title="REST">REST&lt;/a> interface: this makes it very easy to immediately integrate the system into any existing applications. Bonus points if the API is compatible with CouchDB;&lt;/li>
&lt;li>queries must be performed using a &lt;a href="http://en.wikipedia.org/wiki/MapReduce" title="MapReduce">MapReduce&lt;/a> approach: this should make it very easy to perform queries on a large dataset.&lt;/li>
&lt;/ul>
&lt;p>So, right now I&amp;rsquo;m half way through it. I managed to write the backend and I&amp;rsquo;m on my way to the HTTP REST interface. I&amp;rsquo;ll create a github repo after I have something functional that can be easily built and tested.&lt;/p></description></item><item><title>Recursive directory creation with nodejs</title><link>https://brunopedro.com/2010/12/15/recursive-directory-nodejs/</link><pubDate>Wed, 15 Dec 2010 15:36:07 +0000</pubDate><guid>https://brunopedro.com/2010/12/15/recursive-directory-nodejs/</guid><description>&lt;p>I&amp;rsquo;m doing some code in &lt;a href="http://nodejs.org">nodejs&lt;/a> and I found the need to create directories recursively. Basically I need to have the same functionality offered by mkdir -p.&lt;/p>
&lt;p>The &lt;a href="http://nodejs.org/docs/v0.3.1/api/fs.html">fs&lt;/a> lib doesn&amp;rsquo;t offer this functionality so I looked around but couldn&amp;rsquo;t really find anything that suited me. I finally gave up and I&amp;rsquo;m writing the function myself.&lt;/p>
&lt;p>Here&amp;rsquo;s &lt;a href="https://gist.github.com/bpedro/742162">the code&lt;/a>:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;span class="lnt">31
&lt;/span>&lt;span class="lnt">32
&lt;/span>&lt;span class="lnt">33
&lt;/span>&lt;span class="lnt">34
&lt;/span>&lt;span class="lnt">35
&lt;/span>&lt;span class="lnt">36
&lt;/span>&lt;span class="lnt">37
&lt;/span>&lt;span class="lnt">38
&lt;/span>&lt;span class="lnt">39
&lt;/span>&lt;span class="lnt">40
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-javascript" data-lang="javascript">&lt;span class="line">&lt;span class="cl">&lt;span class="kd">var&lt;/span> &lt;span class="nx">fs&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">require&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;fs&amp;#39;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cm">/**
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cm"> * Offers functionality similar to mkdir -p
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cm"> *
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cm"> * Asynchronous operation. No arguments other than a possible exception
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cm"> * are given to the completion callback.
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cm"> */&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kd">function&lt;/span> &lt;span class="nx">mkdir_p&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">path&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">mode&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">callback&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">position&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">mode&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">mode&lt;/span> &lt;span class="o">||&lt;/span> &lt;span class="mi">0777&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">position&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">position&lt;/span> &lt;span class="o">||&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">parts&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">require&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;path&amp;#39;&lt;/span>&lt;span class="p">).&lt;/span>&lt;span class="nx">normalize&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">path&lt;/span>&lt;span class="p">).&lt;/span>&lt;span class="nx">split&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;/&amp;#39;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">position&lt;/span> &lt;span class="o">&amp;gt;=&lt;/span> &lt;span class="nx">parts&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">length&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">callback&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="nx">callback&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span> &lt;span class="k">else&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="kc">true&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kd">var&lt;/span> &lt;span class="nx">directory&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">parts&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">slice&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">position&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">).&lt;/span>&lt;span class="nx">join&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;/&amp;#39;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">fs&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">stat&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">directory&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kd">function&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">err&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">err&lt;/span> &lt;span class="o">===&lt;/span> &lt;span class="kc">null&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">mkdir_p&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">path&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">mode&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">callback&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">position&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span> &lt;span class="k">else&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">fs&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">mkdir&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">directory&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">mode&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kd">function&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">err&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">err&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">callback&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="nx">callback&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">err&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span> &lt;span class="k">else&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">throw&lt;/span> &lt;span class="nx">err&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span> &lt;span class="k">else&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">mkdir_p&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">path&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">mode&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">callback&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">position&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">})&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">})&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
&lt;p>&lt;strong>Update&lt;/strong>: I just converted this code into an extension to the original fs lib so that it&amp;rsquo;s easier to use. The extended lib is called &lt;a href="https://github.com/bpedro/node-fs">node-fs&lt;/a> and is &lt;a href="https://www.npmjs.com/package/node-fs">available on &lt;code>npm&lt;/code>&lt;/a>. To install it, simply run &lt;code>npm install node-fs --save&lt;/code>.&lt;/p></description></item><item><title>Developing a Sales Model</title><link>https://brunopedro.com/2010/12/01/developing-a-sales-model/</link><pubDate>Wed, 01 Dec 2010 17:35:09 +0000</pubDate><guid>https://brunopedro.com/2010/12/01/developing-a-sales-model/</guid><description>&lt;p>Very interesting thoughts about developing a repeatable sales model:&lt;/p>
&lt;blockquote>
&lt;p>Start with one or two salespeople and restrict them to a local geography. Make sure they&amp;rsquo;re selling effectively before hiring others. It&amp;rsquo;s far harder to change messaging and direction in a large distributed organization. With just one or two people, your sales team can get together face-to-face to discuss problems they&amp;rsquo;re seeing, as well as what&amp;rsquo;s working.&lt;/p>
&lt;/blockquote>
&lt;p>Original article: &lt;a href="http://gigaom.com/2010/11/27/accelerate-your-startup-a-repeatable-scalable-sales-model/">Accelerate Your Startup: Develop a Repeatable Sales Model on GigaOMtech&lt;/a>.&lt;/p></description></item><item><title>It’s demo time</title><link>https://brunopedro.com/2010/11/27/its-demo-time/</link><pubDate>Sat, 27 Nov 2010 15:48:34 +0000</pubDate><guid>https://brunopedro.com/2010/11/27/its-demo-time/</guid><description>&lt;p>I&amp;rsquo;m doing a demo of the new tarpipe WordPress plugin on the WP Portugal meeting.&lt;/p></description></item><item><title>Testing a new tarpipe plugin</title><link>https://brunopedro.com/2010/11/26/testing-new-tarpipe-plugin/</link><pubDate>Fri, 26 Nov 2010 20:50:41 +0000</pubDate><guid>https://brunopedro.com/2010/11/26/testing-new-tarpipe-plugin/</guid><description>&lt;p>This is just a test of a new &lt;a href="http://tarpipe.com" title="tarpipe">tarpipe&lt;/a> WordPress plugin that I&amp;rsquo;ve just created.&lt;/p></description></item><item><title>Your Google Alerts can be deleted by anyone</title><link>https://brunopedro.com/2010/09/15/google-alerts-deleted/</link><pubDate>Wed, 15 Sep 2010 23:43:57 +0000</pubDate><guid>https://brunopedro.com/2010/09/15/google-alerts-deleted/</guid><description>&lt;p>I found out the hard way that my &lt;a href="http://www.google.com/alerts" title="Google Alerts">Google Alerts&lt;/a> can be deleted by anyone, if they have access to the &amp;ldquo;Remove&amp;rdquo; URL.&lt;/p>
&lt;p>Here&amp;rsquo;s how it works: &lt;a href="http://google.com" title="Google">Google&lt;/a> will send you e-mail alerts whenever it finds results for any search terms you specify. At the bottom of each message there are 3 links:&lt;/p>
&lt;ul>
&lt;li>&amp;ldquo;Remove this alert&amp;rdquo;&lt;/li>
&lt;li>&amp;ldquo;Create another alert&amp;rdquo;&lt;/li>
&lt;li>&amp;ldquo;Manage your alerts&amp;rdquo;&lt;/li>
&lt;/ul>
&lt;p>The problem is with the first link. I tried it several times, first using &lt;a href="http://google.com/chrome" title="Google Chrome">Chrome&lt;/a>&amp;rsquo;s incognito mode but then opening the link on a different browser, making sure that I wasn&amp;rsquo;t signed in to any Google application.&lt;/p></description></item><item><title>Where is the Web going?</title><link>https://brunopedro.com/2010/05/13/where-is-the-web-going/</link><pubDate>Thu, 13 May 2010 13:29:42 +0000</pubDate><guid>https://brunopedro.com/2010/05/13/where-is-the-web-going/</guid><description>&lt;p>I need to share a great video documentary by &lt;a href="http://kateray.net/" title="Kate Ray">Kate Ray&lt;/a> called &lt;a href="http://vimeo.com/11529540" title="Web 3.0">Web 3.0&lt;/a>. Here&amp;rsquo;s a transcribed quote:&lt;/p>
&lt;blockquote>
&lt;p>If I was gonna start a news business tomorrow I would start a news business designed to produce not one new bit of news, but instead to aggregate news for individuals in ways that matter to them. &lt;em>&amp;ndash; Clay Shirky (1'18&amp;quot;)&lt;/em>&lt;/p>
&lt;/blockquote>
&lt;p>&lt;a href="http://vimeo.com/11529540">Web 3.0&lt;/a> from &lt;a href="http://vimeo.com/kateray">Kate Ray&lt;/a> on &lt;a href="http://vimeo.com">Vimeo&lt;/a>.&lt;/p></description></item><item><title>Re: Afternoon sellout notes</title><link>https://brunopedro.com/2010/05/10/re-afternoon-sellout-notes/</link><pubDate>Mon, 10 May 2010 22:50:03 +0000</pubDate><guid>https://brunopedro.com/2010/05/10/re-afternoon-sellout-notes/</guid><description>&lt;p>&lt;a href="http://scripting.com/">Dave Winer&lt;/a> &lt;a href="http://www.scripting.com/stories/2009/11/19/coolestsoftwareofthedecade.html">praises&lt;/a> &lt;a href="http://www.dropbox.com" title="Dropbox">Dropbox&lt;/a> technology and goes further by suggesting that everyone should be able to run their own private servers:&lt;/p>
&lt;blockquote>
&lt;p>(&amp;hellip;) the technology that Dropbox has mastered is so important that there should be an open source equivalent that we can all deploy, so we can have Dropboxes for sensitive info we don&amp;rsquo;t want to share with them (&amp;hellip;)&lt;/p>
&lt;/blockquote>
&lt;p>I&amp;rsquo;m a happy Dropbox user myself and I went looking for options. Well, there isn&amp;rsquo;t an out-of-the-box open source equivalent to Dropbox but you could &lt;a href="http://fak3r.com/2009/09/14/howto-build-your-own-open-source-dropbox-clone/">easily build one&lt;/a>:&lt;/p></description></item><item><title>DecentralizedAddresses Chrome extension</title><link>https://brunopedro.com/2010/03/08/decentralizedaddresses/</link><pubDate>Mon, 08 Mar 2010 14:24:36 +0000</pubDate><guid>https://brunopedro.com/2010/03/08/decentralizedaddresses/</guid><description>&lt;p>After &lt;a href="https://brunopedro.com/2010/02/16/decentralized-replies/">much&lt;/a> &lt;a href="https://brunopedro.com/2010/02/15/google-buzz-synta/">discussion&lt;/a> around the @replies subject I started thinking about a system that could automatically resolve social network addresses no matter where they appear. I then decided to try the approach of writing a &lt;a href="http://www.google.com/chrome/">Chrome&lt;/a> extension that could do the job.&lt;/p>
&lt;p>The &lt;a href="http://github.com/bpedro/DecentralizedAddresses">DecentralizedAddresses&lt;/a> extension is in development and is available on &lt;a href="http://github.com">github&lt;/a> for anyone to contribute. As my JavaScript skills are not very good, any help would be highly appreciated.&lt;/p></description></item><item><title>More on the @replies subject</title><link>https://brunopedro.com/2010/02/16/decentralized-replies/</link><pubDate>Tue, 16 Feb 2010 19:35:56 +0000</pubDate><guid>https://brunopedro.com/2010/02/16/decentralized-replies/</guid><description>&lt;p>I just stumbled on a &lt;a href="http://www.google.com/buzz/dclinton/HeMv1AQTXS8/Envisioning-decentralized-replies-and">Buzz&lt;/a> by &lt;a href="http://www.google.com/profiles/dclinton" title="DeWitt Clinton">DeWitt Clinton&lt;/a> about a possible solution to the use of decentralized @replies. From the Buzz:&lt;/p>
&lt;blockquote>
&lt;p>I want to throw some ideas out there about how it can someday be done in a decentralized fashion using open technologies such as &lt;a href="http://code.google.com/p/webfinger/" title="WebFinger">WebFinger&lt;/a>, &lt;a href="http://portablecontacts.net/" title="Portable Contacts">Portable Contacts&lt;/a>, &lt;a href="http://www.ietf.org/rfc/rfc5023.txt" title="AtomPub">AtomPub&lt;/a>, and &lt;a href="http://activitystrea.ms/" title="Activity Streams">Activity Streams&lt;/a>. (And maybe &lt;a href="http://www.salmon-protocol.org/" title="Salmon">Salmon&lt;/a>. Read on.)&lt;/p>
&lt;/blockquote>
&lt;p>The proposal would let you address any user of any application in a complete decentralized way.&lt;/p></description></item><item><title>On the use of the @ syntax by Google Buzz</title><link>https://brunopedro.com/2010/02/15/google-buzz-synta/</link><pubDate>Mon, 15 Feb 2010 14:37:58 +0000</pubDate><guid>https://brunopedro.com/2010/02/15/google-buzz-synta/</guid><description>&lt;p>Just a quick note to archive the way Google Buzz is using the &lt;strong>@&lt;/strong> syntax. From &amp;ldquo;&lt;a href="http://googlesystem.blogspot.com/2010/02/google-buzz-tips.html" title="Google Buzz Tips">Google Buzz Tips&lt;/a>&amp;rdquo;:&lt;/p>
&lt;blockquote>
&lt;p>If you&amp;rsquo;d like to send a private message to someone, type @ and use Gmail&amp;rsquo;s autocomplete feature to find the email address of your contact.&lt;/p>
&lt;/blockquote>
&lt;p>In practice, you address other users by typing an &lt;strong>@&lt;/strong> symbol followed by their e-mail address, like &lt;strong>@user@example.com&lt;/strong>. This is exactly what I &lt;a href="https://brunopedro.com/2009/12/15/re-twitter-urls-are-microformats-the-answer-to-a-real-problem/">proposed&lt;/a> a while ago as an easy way to address any user on any Web application:&lt;/p></description></item><item><title>For free? Why?</title><link>https://brunopedro.com/2009/12/28/for-free-why/</link><pubDate>Mon, 28 Dec 2009 13:41:10 +0000</pubDate><guid>https://brunopedro.com/2009/12/28/for-free-why/</guid><description>&lt;p>Great post by &lt;a href="http://pedromourapinheiro.com/">Pedro Pinheiro&lt;/a> about making a business around art. I particularly like this excerpt:&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>For free? Why?&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;blockquote>
&lt;p>Because the money to be earned is not on things that can be copied. That&amp;rsquo;s a lost battle. If you&amp;rsquo;re a musician, you can make more money on concerts and events. If you&amp;rsquo;re a photographer, more money can be made by shooting specific assignments for customers, or on photography workshops. If you&amp;rsquo;re a writer, you can make more money by participating as a speaker at conferences. The era of making something and just making your livelihood from just that is nearing its end. And getting your creations known to the widest possible audience is the key for getting work that can&amp;rsquo;t be replicated.&lt;/p></description></item><item><title>Re: Twitter URLs: Are Microformats The Answer To A Real Problem?</title><link>https://brunopedro.com/2009/12/15/re-twitter-urls-are-microformats-the-answer-to-a-real-problem/</link><pubDate>Tue, 15 Dec 2009 12:40:24 +0000</pubDate><guid>https://brunopedro.com/2009/12/15/re-twitter-urls-are-microformats-the-answer-to-a-real-problem/</guid><description>&lt;p>Stowe Boyd writes about a possible approach to address different user profiles on different clients. After exposing a possible microformats based approach he talks about a microsyntax solution to the problem:&lt;/p>
&lt;blockquote>
&lt;p>A microsyntax approach would be something visible in the stream, like including a prefix in front of an @mention or retweet to denote original or desired client:&lt;/p>
&lt;/blockquote>
&lt;blockquote>
&lt;p>dabr@pigsonthewing Nice profile!&lt;/p>
&lt;/blockquote>
&lt;blockquote>
&lt;p>Here, the implication is that I am referring to Andy&amp;rsquo;s profile on the Dabr client.&lt;/p></description></item><item><title>Cliqset FeedProxy and the ActivityStreams format</title><link>https://brunopedro.com/2009/12/02/cliqset-feedproxy-and-the-activitystreams-format/</link><pubDate>Wed, 02 Dec 2009 23:30:24 +0000</pubDate><guid>https://brunopedro.com/2009/12/02/cliqset-feedproxy-and-the-activitystreams-format/</guid><description>&lt;p>Great news:&lt;/p>
&lt;blockquote>
&lt;p>the &lt;a href="http://cliqset.com/" title="Cliqset">Cliqset&lt;/a> FeedProxy tool will normalize feeds from more than 70 other services into new feeds in the &lt;a href="http://activitystrea.ms/">ActivityStreams&lt;/a> format. It may just be an initial inroad to interoperability between these networks, provided by a 3rd party and not yet extensively used – but it&amp;rsquo;s an important step none the less.&lt;/p>
&lt;/blockquote>
&lt;p>Read the original: &lt;a href="http://feedproxy.google.com/~r/readwriteweb/~3/PCU2g10UEug/cliqset_activity_streams_api.php">The Day The Highway Went Coast-to-Coast: 70+ SocNet Feeds Normalized by New API on ReadWriteWeb&lt;/a>.&lt;/p></description></item><item><title>Re: Bing Tries To Buy The News on TechCrunch</title><link>https://brunopedro.com/2009/11/23/re-bing-tries-to-buy-the-news-on-techcrunch/</link><pubDate>Mon, 23 Nov 2009 10:20:46 +0000</pubDate><guid>https://brunopedro.com/2009/11/23/re-bing-tries-to-buy-the-news-on-techcrunch/</guid><description>&lt;blockquote>
&lt;p>In order to actually make a dent in Google&amp;rsquo;s market share, Bing would have to pay such exorbitant sums to so many different news companies that it would be difficult to recoup its investment. Bing certainly get some marketing buzz out of any such move, but that&amp;rsquo;s about it.&lt;/p>
&lt;/blockquote>
&lt;p>Here&amp;rsquo;s a list of links about this:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="http://www.ft.com/cms/s/0/a243c8b2-d79b-11de-b578-00144feabdc0.html?nclick_check=1">Microsoft and News Corp eye web pact&lt;/a> on FT&lt;/li>
&lt;li>&lt;a href="http://searchengineland.com/thoughts-on-bing-news-corp-opec-for-news-30307">Thoughts On A &amp;ldquo;Killer&amp;rdquo; Bing-News Corp Deal &amp;amp; The Myth Of An &amp;ldquo;OPEC For News&amp;rdquo;&lt;/a> on search engine land&lt;/li>
&lt;li>&lt;a href="http://www.businessinsider.com/microsoft-offers-to-pay-news-corp-to-de-list-itself-from-google-2009-11">Microsoft Offers To Pay News Corp To &amp;ldquo;De-List&amp;rdquo; Itself From Google&lt;/a> on The Business Insider&lt;/li>
&lt;li>&lt;a href="http://www.guardian.co.uk/media/pda/2009/nov/23/microsoft-bing-news-corp">Will News Corp move its content to Microsoft&amp;rsquo;s Bing?&lt;/a> on The Guardian&lt;/li>
&lt;/ul>
&lt;p>Read the original post: &lt;a href="http://feedproxy.google.com/~r/Techcrunch/~3/_DmRup7GJ78/">Bing Tries To Buy The News on TechCrunch&lt;/a>.&lt;/p></description></item><item><title>foursquare is finally available in Lisbon</title><link>https://brunopedro.com/2009/11/22/foursquare-is-finally-available-in-lisbon/</link><pubDate>Sun, 22 Nov 2009 16:26:06 +0000</pubDate><guid>https://brunopedro.com/2009/11/22/foursquare-is-finally-available-in-lisbon/</guid><description>&lt;p>That was about time! They added Lisbon and &lt;a href="http://foursquare.tumblr.com/post/249951087/yet-another-round-of-new-cities-sprinkled-all-over">a bunch&lt;/a> of other cities around the world. I&amp;rsquo;m finally using the &lt;a href="http://foursquare.com/android/" title="foursquare Android application">Android application&lt;/a> and, so far, I&amp;rsquo;m enjoying it.&lt;/p>
&lt;p>Check out my &lt;a href="http://foursquare.com/user/bpedro">foursquare profile&lt;/a> and friend me!&lt;/p></description></item><item><title>Re: More On Cross-Platform Tumbling: Following Is Mostly RSS on /Message</title><link>https://brunopedro.com/2009/11/21/re-more-on-cross-platform-tumbling-following-is-mostly-rss-on-message/</link><pubDate>Sat, 21 Nov 2009 15:25:21 +0000</pubDate><guid>https://brunopedro.com/2009/11/21/re-more-on-cross-platform-tumbling-following-is-mostly-rss-on-message/</guid><description>&lt;p>You say:&lt;/p>
&lt;blockquote>
&lt;p>My sense is that cross-platform following can mostly be achieved by RSS subscription, although following does include a notification aspect. For example, in both Typepad and Tumblr I can expose the list of those that I am following, and those that are following me. Various platforms need only to notify each other of following and unfollowing, and the identities involved, and then cross-platform following semantics works.&lt;/p>
&lt;/blockquote>
&lt;p>I agree with using RSS subscription as a cross-platform following mechanism but I&amp;rsquo;d stop there. If you&amp;rsquo;re gonna use RSS over HTTP then you can use the unique visitors metric as your &amp;ldquo;followers&amp;rdquo; count and the referrer information to find out who those followers are.&lt;/p></description></item><item><title>Re: Where is RSS? on Scripting News</title><link>https://brunopedro.com/2009/11/21/re-where-is-rss-on-scripting-news/</link><pubDate>Sat, 21 Nov 2009 14:14:32 +0000</pubDate><guid>https://brunopedro.com/2009/11/21/re-where-is-rss-on-scripting-news/</guid><description>&lt;p>This is a post to test a communication flow using a feed reader and a blog post as a &amp;ldquo;distributed twitter&amp;rdquo;.&lt;/p>
&lt;p>Read the original story: &lt;a href="http://www.scripting.com/stories/2009/11/20/whereIsRss.html">Where is RSS? on Scripting News&lt;/a>.&lt;/p></description></item><item><title>A possible future for Chrome OS</title><link>https://brunopedro.com/2009/11/21/chrome-os/</link><pubDate>Sat, 21 Nov 2009 13:54:38 +0000</pubDate><guid>https://brunopedro.com/2009/11/21/chrome-os/</guid><description>&lt;p>I&amp;rsquo;m writing this after &lt;a href="http://www.chromium.org/chromium-os/building-chromium-os">building&lt;/a> Chrome OS from scratch and running it from a USB drive. In fact, what I built and ran wasn&amp;rsquo;t Chrome OS but instead &lt;a href="http://www.chromium.org/chromium-os" title="Chromium OS">Chromium OS&lt;/a>. There&amp;rsquo;s a big difference not just in the name. &lt;a href="http://googleblog.blogspot.com/2009/11/releasing-chromium-os-open-source.html">According to Google&lt;/a>:&lt;/p>
&lt;blockquote>
&lt;p>Today we are open-sourcing the [Chrome OS] project as Chromium OS. We are doing this early, a year before Google Chrome OS will be ready for users, because we are eager to engage with partners, the open source community and developers. As with the Google Chrome browser, development will be done in the open from this point on. This means the code is free, accessible to anyone and open for contributions.&lt;/p></description></item><item><title>Small experiment</title><link>https://brunopedro.com/2009/09/12/small-experiment/</link><pubDate>Sat, 12 Sep 2009 01:33:29 +0000</pubDate><guid>https://brunopedro.com/2009/09/12/small-experiment/</guid><description>&lt;p>This is a very short experimental post.&lt;/p>
&lt;p>Published via &lt;a href="http://tarpipe.com">tarpipe&lt;/a>.&lt;/p></description></item><item><title>Mirror Worlds</title><link>https://brunopedro.com/2009/09/08/mirror-worlds/</link><pubDate>Tue, 08 Sep 2009 21:34:48 +0000</pubDate><guid>https://brunopedro.com/2009/09/08/mirror-worlds/</guid><description>&lt;p>A comment to my recent post &amp;ldquo;&lt;a href="http://brunopedro.com/2009/09/06/streamnets/" title="Streamnets">Streamnets&lt;/a>&amp;rdquo; caught my attention to dig further because it mentioned the concept of Mirror Worlds, a written work by &lt;a href="http://en.wikipedia.org/wiki/David_Gelernter" title="David Gelernter">David Gelernter&lt;/a>. It&amp;rsquo;s a fascinating &lt;a href="http://www.amazon.com/Mirror-Worlds-Software-Universe-Shoebox-How/dp/019507906X/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1252445245&amp;amp;sr=8-1" title="Mirror Worlds">book&lt;/a>, quite ahead of its time &amp;ndash; it was published back in 1993.&lt;/p>
&lt;p>According to Gelernter, &amp;ldquo;[Mirror Worlds] are software models of some chunk of reality, some piece of the real world going on outside your window&amp;rdquo;. These pieces of the real world can be of diverse natures:&lt;/p></description></item><item><title>RSSCloud, a PubSubHubbub alternative?</title><link>https://brunopedro.com/2009/09/07/rsscloud-a-pubsubhubbub-alternative/</link><pubDate>Mon, 07 Sep 2009 22:41:21 +0000</pubDate><guid>https://brunopedro.com/2009/09/07/rsscloud-a-pubsubhubbub-alternative/</guid><description>&lt;p>Great news for all RSS advocates: &lt;a href="http://www.scripting.com">Dave Winer&lt;/a> somehow &lt;a href="http://www.scripting.com/stories/2009/09/07/teaseTeaseTease.html">convinced&lt;/a> &lt;a href="http://ma.tt/">Matt Mullenweg&lt;/a> to automatically support &lt;a href="http://rsscloud.org/">RSSCloud&lt;/a> on &lt;strong>all&lt;/strong> &lt;a href="http://wordpress.com">WordPress.com&lt;/a> blogs.&lt;/p>
&lt;p>Quoting &lt;a href="http://readwriteweb.com">ReadWriteWeb&lt;/a>, who apparently &lt;a href="http://www.readwriteweb.com/archives/wordpress_just_made_millions_of_blogs_real-time_wi.php">broke the news&lt;/a>:&lt;/p>
&lt;blockquote>
&lt;p>All blogs on the WordPress.com platform and any &lt;a href="http://wordpress.org">WordPress.org&lt;/a> blogs that opt-in will now make instant updates available to any RSS readers subscribed to a new feature called RSSCloud. There is currently only one RSS aggregator that supports RSSCloud, Dave Winer&amp;rsquo;s brand-new reader &lt;a href="http://newsriver.org/river2">River2&lt;/a>. That will probably change very soon.&lt;/p>
&lt;/blockquote>
&lt;p>If you have a WordPress.org blog, you can easily install the recently launched &lt;a href="http://wordpress.org/extend/plugins/rsscloud/">RSSCloud plugin&lt;/a>, by &lt;a href="http://josephscott.org/">Joseph Scott&lt;/a>, an employee of &lt;a href="http://automattic.com/">Automattic&lt;/a>, the company behind WordPress.&lt;/p></description></item><item><title>Streamnets</title><link>https://brunopedro.com/2009/09/06/streamnets/</link><pubDate>Sun, 06 Sep 2009 22:43:36 +0000</pubDate><guid>https://brunopedro.com/2009/09/06/streamnets/</guid><description>&lt;p>&lt;em>IDEA&lt;/em>&lt;/p>
&lt;p>The Internet is the infrastructure needed to interconnect machines to one another and guarantee that they&amp;rsquo;re online most of the time. According to &lt;a href="http://en.wikipedia.org/wiki/Internet" title="Internet definition on Wikipedia">Wikipedia&lt;/a>, the Internet &amp;ldquo;is a &lt;em>network of networks&lt;/em> that consists of millions of private and public, academic, business, and government networks of local to global scope that are linked by &lt;a href="http://en.wikipedia.org/wiki/Copper" title="Copper">copper&lt;/a> wires, &lt;a href="http://en.wikipedia.org/wiki/Optical_fiber" title="Optical fiber">fiber-optic&lt;/a> cables, &lt;a href="http://en.wikipedia.org/wiki/Wireless" title="Wireless">wireless&lt;/a> connections, and other technologies.&amp;rdquo;&lt;/p>
&lt;p>Then, Streamnets are ad-hoc networks created by &lt;a href="http://www.viridiandesign.org/notes/401-450/00422_the_spime.html" title="The Spime">Spimes&lt;/a> or other sensor based machines in order to advertise their activity streams onto the Internet. These networks don&amp;rsquo;t need to be online all the time, don&amp;rsquo;t require high bandwidth, and will use any existing communications technology, most probably wireless through &lt;a href="http://en.wikipedia.org/wiki/GSM" title="GSM">GSM&lt;/a> or even other types of &lt;a href="http://en.wikipedia.org/wiki/Radio_frequency" title="RF">RF&lt;/a> for shorter or longer distances.&lt;/p></description></item><item><title>To REST or not to REST</title><link>https://brunopedro.com/2009/07/20/to-rest-or-not-to-rest/</link><pubDate>Mon, 20 Jul 2009 08:41:51 +0000</pubDate><guid>https://brunopedro.com/2009/07/20/to-rest-or-not-to-rest/</guid><description>&lt;p>Yesterday &lt;a href="http://twitter.com/esjewett" title="esjewett on twitter">@esjewett&lt;/a> &lt;a href="http://twitter.com/esjewett/status/2723828400">pointed out&lt;/a> that &lt;a href="http://tarpipe.com/">tarpipe&lt;/a>&amp;rsquo;s API 2.0 might not be considered RESTful. Quoting the previously written article &amp;ldquo;&lt;a href="http://www.esjewett.com/blog/a-restful-esme-api">A RESTful ESME API&lt;/a>&amp;rdquo;:&lt;/p>
&lt;blockquote>
&lt;p>REST is often seen as an alternative to RPC APIs, or &amp;ldquo;Remote Procedure Call&amp;rdquo; APIs. At root, the difference as described by Wikipedia is that RPC is about telling an application to do something while REST is about changing the state of the resources of an application.&lt;/p>
&lt;/blockquote>
&lt;span class="entry-published">
 &lt;span class="entry-author author vcard">
 &lt;span class="fn n">&lt;a href="http://www.theamazingrando.com/">Paul Sadauskas&lt;/a>, on &lt;a href="http://www.theamazingrando.com/blog/?p=107">another article&lt;/a> about the same subject, adds some rules that your API &lt;strong>should not&lt;/strong> follow:&lt;/span>
&lt;/span>
&lt;/span>
&lt;blockquote>
&lt;ol>
&lt;li>Clients have to read documentation to know the locations of top-level resources.&lt;/li>
&lt;li>Clients have to concatenate strings to get to the next resource.&lt;/li>
&lt;li>You have an &amp;ldquo;API/Key/Token&amp;rdquo; in a header or a url.&lt;/li>
&lt;li>You have a version string in a url.&lt;/li>
&lt;/ol>
&lt;/blockquote>
&lt;p>All this made me think about possible changes to become RESTful. Things seem to be easy when you&amp;rsquo;re offering operations to resources you own or control. When you&amp;rsquo;re dealing with processes that&amp;rsquo;s a whole different story. As &lt;a href="http://twitter.com/esjewett" title="esjewett on twitter">@esjewett&lt;/a> best &lt;a href="http://twitter.com/esjewett/status/2724662905">puts it&lt;/a>:&lt;/p></description></item><item><title>Performance oriented FFT</title><link>https://brunopedro.com/2009/07/17/performance-oriented-fft/</link><pubDate>Fri, 17 Jul 2009 11:05:55 +0000</pubDate><guid>https://brunopedro.com/2009/07/17/performance-oriented-fft/</guid><description>&lt;p>Worth checking out. Quoting the &lt;a href="http://www.fftw.org/">FFTW Home Page&lt;/a>:&lt;/p>
&lt;blockquote>
&lt;p>FFTW is a C subroutine library for computing the discrete Fourier transform (DFT) in one or more dimensions, of arbitrary input size, and of both real and complex data (as well as of even/odd data, i.e. the discrete cosine/sine transforms or DCT/DST). We believe that FFTW, which is free software, should become the FFT library of choice for most applications.&lt;/p>
&lt;/blockquote>
&lt;p>Now, can it work when you have less than 16KB available RAM?&lt;/p></description></item><item><title>Pie charts are overrated</title><link>https://brunopedro.com/2009/07/17/pie-charts-are-overrated/</link><pubDate>Fri, 17 Jul 2009 10:41:57 +0000</pubDate><guid>https://brunopedro.com/2009/07/17/pie-charts-are-overrated/</guid><description>&lt;p>Quoting &lt;a href="http://sethgodin.typepad.com/seths_blog/2009/07/how-to-make-graphs-that-work.html">Seth&amp;rsquo;s Blog: How to make graphs that work&lt;/a>:&lt;/p>
&lt;blockquote>
&lt;p>Pie charts are spectacularly overrated. If you want to show me that four out of five dentists prefer Trident and that we need to target the fifth one, show me a picture of 5 dentists, but make one of them stand out. I&amp;rsquo;ll remember that.&lt;/p>
&lt;/blockquote>
&lt;p>Unless, of course, all you want to do is give a sense of all different percentages.&lt;/p></description></item><item><title>What is a CouchApp</title><link>https://brunopedro.com/2009/07/16/what-is-a-couchapp/</link><pubDate>Thu, 16 Jul 2009 18:41:36 +0000</pubDate><guid>https://brunopedro.com/2009/07/16/what-is-a-couchapp/</guid><description>&lt;p>Quoting the &lt;a href="http://wiki.github.com/jchris/couchapp" title="CouchApp">CouchApp wiki&lt;/a>:&lt;/p>
&lt;blockquote>
&lt;p>[CouchApps are]&lt;/p>
&lt;/blockquote>
&lt;blockquote>
&lt;p>&lt;span id="repository_description">utilities to make standalone CouchDB application development simple.&lt;/span>&lt;/p>
&lt;/blockquote>
&lt;p>Some interesting links:&lt;/p>
&lt;ul>
&lt;li>about authentication: &lt;a href="http://stackoverflow.com/questions/517708/couchapps-and-user-authentication" title="CouchApps and user authentication">CouchApps and user authentication&lt;/a>&lt;/li>
&lt;li>a tutorial: &lt;a href="http://books.couchdb.org/relax/hosted-applications" title="Hosted Applications">Hosted Applications&lt;/a>&lt;/li>
&lt;li>a real application using CouchApps: &lt;a href="http://www.ajatus.info/" title="Ajatus CRM">Ajatus CRM&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Focus on your active users</title><link>https://brunopedro.com/2009/07/15/focus-on-your-active-users/</link><pubDate>Wed, 15 Jul 2009 13:31:03 +0000</pubDate><guid>https://brunopedro.com/2009/07/15/focus-on-your-active-users/</guid><description>&lt;p>Quoting &lt;a href="http://www.avc.com/a_vc/2009/07/the-difference-between-total-uses-and-active-users.html">The Difference Between Total Users and Active Users&lt;/a>:&lt;/p>
&lt;blockquote>
&lt;p>It is not a problem for a service to have a large group of non-active users if they have a large group of active users. It&amp;rsquo;s the latter group that you need to focus on. Over time, I&amp;rsquo;ve learned that many non-active users become active for one reason or another. But they don&amp;rsquo;t become active by focusing on them. They become active because you focus on the successful users and make them even more successful.&lt;/p></description></item><item><title>Vimeo will delete originals after one week</title><link>https://brunopedro.com/2009/07/14/vimeo-will-delete-originals-after-one-week/</link><pubDate>Tue, 14 Jul 2009 21:41:49 +0000</pubDate><guid>https://brunopedro.com/2009/07/14/vimeo-will-delete-originals-after-one-week/</guid><description>&lt;p>Quoting &lt;a href="http://vimeo.com/blog:215">New source file policy on Vimeo Staff Blog&lt;/a>:&lt;/p>
&lt;blockquote>
&lt;p>Starting August 1st, basic accounts&amp;rsquo; original source files will be stored for one week from the upload date, after which they will be removed.&lt;/p>
&lt;/blockquote>
&lt;blockquote>
&lt;p>(&amp;hellip;)&lt;/p>
&lt;/blockquote>
&lt;blockquote>
&lt;p>This new one-week policy applies to all basic accounts&amp;rsquo; videos uploaded from this point onwards. For videos that were uploaded before this blog post, those original files will be available until August 1st, to give you some time to download them if you need to. After August 1st, those files will also be removed.&lt;/p></description></item><item><title>Should twitter have its own data storage?</title><link>https://brunopedro.com/2009/04/21/should-twitter-have-its-own-data-storage/</link><pubDate>Tue, 21 Apr 2009 12:34:56 +0000</pubDate><guid>https://brunopedro.com/2009/04/21/should-twitter-have-its-own-data-storage/</guid><description>&lt;p>Now that twitter &lt;a href="http://oauth.net/" title="OAuth">OAuth&lt;/a> &lt;a href="http://apiwiki.twitter.com/OAuth-FAQ">feature&lt;/a> is in public beta, some people argue that twitter should also provide a data storage facility through their &lt;a href="http://apiwiki.twitter.com/">API&lt;/a>. This would allow developers to add payloads to different twitter objects but would create another &lt;a href="http://en.wikipedia.org/wiki/Information_silo">information silo&lt;/a>, instead of leveraging existing data storage providers.&lt;/p>
&lt;p>I agree with Kevin Marks when &lt;a href="http://www.scripting.com/stories/2009/04/20/twitterAndOauthInteresting.html#comment-8462416">he asks&lt;/a> &amp;ldquo;Why should the storage and the event stream come from the same provider?&amp;rdquo;.&lt;/p>
&lt;p>Quoting Dave Winer&amp;rsquo;s article &amp;ldquo;&lt;a href="http://www.scripting.com/stories/2009/04/20/twitterAndOauthInteresting.html#disqus_thread">Twitter and OAuth, interesting brew&lt;/a>&amp;rdquo;:&lt;/p></description></item><item><title>Do you agree with twitter following limits?</title><link>https://brunopedro.com/2009/04/21/do-you-agree-with-twitter-following-limits/</link><pubDate>Tue, 21 Apr 2009 12:00:21 +0000</pubDate><guid>https://brunopedro.com/2009/04/21/do-you-agree-with-twitter-following-limits/</guid><description>&lt;p>Quoting the twitter status blog post  &amp;ldquo;&lt;a href="http://status.twitter.com/post/98402835/a-note-about-per-day-following-limits">Twitter Status – A note about per day following limits&lt;/a>.&amp;rdquo;:&lt;/p>
&lt;blockquote>
&lt;p>While there are technical reasons behind having some limit on following activites, this per-day limit exists to discourage spamminess. Also, it is unlikely that anyone can actually read tweets from thousands of accounts which makes the mass following activity disingenuous.&lt;/p>
&lt;/blockquote>
&lt;p>What do you think?&lt;/p></description></item><item><title>Testing the tarpipe WordPress plugin</title><link>https://brunopedro.com/2009/04/21/testing-the-tarpipe-wordpress-plugin/</link><pubDate>Tue, 21 Apr 2009 11:41:19 +0000</pubDate><guid>https://brunopedro.com/2009/04/21/testing-the-tarpipe-wordpress-plugin/</guid><description>&lt;p>Testing&lt;/p></description></item><item><title>The real time Web?</title><link>https://brunopedro.com/2009/04/09/the-real-time-web/</link><pubDate>Thu, 09 Apr 2009 22:38:35 +0000</pubDate><guid>https://brunopedro.com/2009/04/09/the-real-time-web/</guid><description>&lt;p>Much has been said about &lt;a href="http://friendfeed.com/" title="friendfeed">friendfeed&lt;/a>‘s latest UI &lt;a href="http://beta.friendfeed.com/">redesign&lt;/a> and how it enables a real time view of content from across the Web. Is it really real time? I mean, content is &lt;em>pulled&lt;/em> periodically from other applications into friendfeed so that it can be displayed to the end user.&lt;/p>
&lt;p>This post was triggered in part by a &lt;a href="http://twitter.com/IanMikutel/status/1466000930">tweet&lt;/a> from &lt;span class="fn">&lt;a title="Ian Mikutel" href="http://ianmikutel.com/">Ian Mikutel&lt;/a>:&lt;/span>&lt;/p>
&lt;blockquote>
&lt;p>&lt;span class="status-body">&lt;span class="entry-content">Read your preso on Activity Streams &amp;amp; Context. Does new FriendFeed with Real Time everywhere ruin your &amp;ldquo;middleman&amp;rdquo; argument now?&lt;/span>&lt;/span>&lt;/p></description></item><item><title>How to share a secret</title><link>https://brunopedro.com/2009/01/03/how-to-share-a-secret/</link><pubDate>Sat, 03 Jan 2009 17:15:38 +0000</pubDate><guid>https://brunopedro.com/2009/01/03/how-to-share-a-secret/</guid><description>&lt;p>&amp;ldquo;&lt;a href="http://portal.acm.org/citation.cfm?id=359168.359176" title="How to share a secret">How to Share a Secret&lt;/a>&amp;rdquo; is the title of paper written in 1979 by &lt;a href="http://en.wikipedia.org/wiki/Adi_Shamir" title="Adi Shamir">Adi Shamir&lt;/a> (best known for his work on the &lt;a href="http://en.wikipedia.org/wiki/RSA#History">RSA&lt;/a> algorithm). The paper describes a method for dividing information in smaller pieces so that the knowledge of all but one of the pieces gives absolutely no information about the original information. Quoting the author:&lt;/p>
&lt;blockquote>
&lt;p>This technique enables the construction of robust key management schemes for cryptographic systems that can function securely and reliably even when misfortunes destroy half the pieces and security breaches expose all but one of the remaining pieces.&lt;/p></description></item><item><title>Cloud Balancer</title><link>https://brunopedro.com/2008/07/30/cloud-balancer/</link><pubDate>Wed, 30 Jul 2008 16:07:41 +0000</pubDate><guid>https://brunopedro.com/2008/07/30/cloud-balancer/</guid><description>&lt;p>The latest &lt;a href="http://aws.amazon.com/s3" title="Amazon S3">Amazon S3&lt;/a> blackout made me think what could be done to try to solve this problem, when your application depends on S3 or any other cloud service.&lt;/p>
&lt;p>Does this mean that you should all stop using cloud services and go back to your own data center? No way! There are better and more reasonable solutions. They just need a bit of thought and some experimentation.&lt;/p>
&lt;p>Some people, like &lt;a href="http://scripting.com/" title="Dave Winer">Dave Winer&lt;/a>, can even see that a new service can emerge from this need. On his article &amp;ldquo;&lt;a href="http://www.scripting.com/stories/2008/07/20/amazonS3DownAllDay.html" title="Amazon S3 down all day">Amazon S3 down all day&lt;/a>&amp;rdquo;, Dave proposes a possible solution:&lt;/p></description></item><item><title>Lifestreaming aggregators</title><link>https://brunopedro.com/2008/03/22/lifestreaming-aggregators/</link><pubDate>Sat, 22 Mar 2008 12:25:24 +0000</pubDate><guid>https://brunopedro.com/2008/03/22/lifestreaming-aggregators/</guid><description>&lt;p>Lifestreaming aggregators became popular as the number of different applications where you could participate &amp;ndash; either by updating your status or by uploading something &amp;ndash; increased. The aggregators are here to relieve you from the burden of going to multiple locations to find out what your friends or contacts are up to.&lt;/p>
&lt;p>Services like &lt;a href="http://www.plaxo.com/" title="plaxo">plaxo&lt;/a>, &lt;a href="http://www.spokeo.com/" title="spokeo">spokeo&lt;/a>, &lt;a href="http://friendfeed.com/" title="friendfeed">friendfeed&lt;/a> or &lt;a href="http://socialthing.com/" title="socialthing">socialthing&lt;/a> (&lt;a href="http://lifestreamblog.com/" title="lifestream blog">lifestream blog&lt;/a> has a more &lt;a href="http://lifestreamblog.com/10-lifestreaming-services-ranked-by-features/" title="10 Lifestream Services Ranked by Features">compreheensible list&lt;/a>) start by asking your identification on different services. Then they aggregate information you update on those services and let you &amp;ndash; and your contacts &amp;ndash; access that information from a central location.&lt;/p></description></item><item><title>Sending errors to your ticketing system</title><link>https://brunopedro.com/2008/01/29/sending-errors-to-your-ticketing-system/</link><pubDate>Tue, 29 Jan 2008 19:26:01 +0000</pubDate><guid>https://brunopedro.com/2008/01/29/sending-errors-to-your-ticketing-system/</guid><description>&lt;p>I&amp;rsquo;ve been thinking about developing a PHP Logger that will talk to your favorite ticketing system. The idea is to capture code and application generated errors and create tickets accordingly.&lt;/p>
&lt;p>At a first glance, I could use the &lt;a href="http://pt2.php.net/manual/en/language.oop5.reflection.php" title="Reflection">Reflection&lt;/a> API to get meta-information about the code. Tickets could then be created and assigned to the appropriate person based on the @author doc tag.&lt;/p>
&lt;p>The ticket Logger could talk to existing Web project management and ticketing application like &lt;a href="http://basecamphq.com/" title="Basecamp">Basecamp&lt;/a>, &lt;a href="http://goplan.info/" title="Goplan">Goplan&lt;/a> and &lt;a href="http://hiveminder.com/" title="Hiveminder">Hiveminder&lt;/a> (from the creators of &lt;a href="http://bestpractical.com/rt/" title="RT">RT&lt;/a>).&lt;/p></description></item><item><title>O paradoxo de Abilene</title><link>https://brunopedro.com/2007/10/31/o-paradoxo-de-abilene/</link><pubDate>Wed, 31 Oct 2007 19:16:19 +0000</pubDate><guid>https://brunopedro.com/2007/10/31/o-paradoxo-de-abilene/</guid><description>&lt;p>O &lt;a href="http://en.wikipedia.org/wiki/Abilene_paradox">paradoxo de Abilene&lt;/a> define uma situação em que um grupo de pessoas se vê forçado a agir de uma forma oposta às suas preferências. No paradoxo de Abilene todos os membros do grupo deixam-se levar por uma determinada preferência, apesar de não estarem de acordo, porque pensam que todos os outros membros concordam.&lt;/p>
&lt;p>O nome do paradoxo surge a partir de uma estória em que todos os membros de uma família, estando sentados confortavelmente em sua casa, decidem ir passear a &lt;a href="http://en.wikipedia.org/wiki/Abilene%2C_Texas">Abilene&lt;/a> (uma cidade no Texas). A viagem foi um inferno para cada um deles, apesar de nenhum mencionar tal facto, pensando que os outros estavam a gostar. Só no regresso o problema foi levantado, mas aí era tarde de mais&amp;hellip;&lt;/p></description></item><item><title>Collaborative filtering</title><link>https://brunopedro.com/2007/10/16/collaborative-filtering/</link><pubDate>Tue, 16 Oct 2007 21:10:03 +0000</pubDate><guid>https://brunopedro.com/2007/10/16/collaborative-filtering/</guid><description>&lt;p>Are you tired of your feed reader? Do you wish you could find more interesting posts, or perhaps new blogs related to your current tastes and preferences?&lt;/p>
&lt;p>Apparently &lt;a href="http://www.scripting.com/" title="Scripting News">Dave Winer&lt;/a> &lt;a href="http://www.scripting.com/stories/2007/10/15/theSmallPicture.html#p6">feels&lt;/a> the same way:&lt;/p>
&lt;blockquote>
&lt;p>I want rating services to provide clues about what I should be subscribing to. I want them to find not what&amp;rsquo;s popular with the masses but what will be valuable to me.&lt;/p>
&lt;/blockquote>
&lt;p>He then &lt;a href="http://www.scripting.com/stories/2007/10/15/theSmallPicture.html#p7">touches&lt;/a> the sweet spot:&lt;/p></description></item><item><title>Adegga and AVIN</title><link>https://brunopedro.com/2007/10/14/adegga-and-avin/</link><pubDate>Sun, 14 Oct 2007 18:13:12 +0000</pubDate><guid>https://brunopedro.com/2007/10/14/adegga-and-avin/</guid><description>&lt;p>Do you enjoy wine? You&amp;rsquo;re gonna love &lt;a href="http://www.adegga.com/" title="Social Wine Discovery - Adegga">Adegga&lt;/a>, the place where you can discover new wines by looking at other people&amp;rsquo;s tastings and findings.&lt;/p>
&lt;p>&lt;img src="https://brunopedro.com/media/2007/10/adegga_logo.gif" alt="Adegga logo">&lt;/p>
&lt;p>Adegga just &lt;a href="http://blog.adegga.com/?p=80" title="Adegga launched">came out&lt;/a> of a closed beta and right now anyone can start using it as long as they get invited by another user. That&amp;rsquo;s right, during an initial phase, registration is only available to invited users. This is a way of controlling the growth and making any necessary adjustments as the user base expands.&lt;/p></description></item><item><title>What have you been doing all these years?</title><link>https://brunopedro.com/2007/08/12/what-have-you-been-doing-all-these-years/</link><pubDate>Sun, 12 Aug 2007 21:49:34 +0000</pubDate><guid>https://brunopedro.com/2007/08/12/what-have-you-been-doing-all-these-years/</guid><description>&lt;p>Do you know &lt;a href="http://www.netvibes.com/">Netvibes&lt;/a>? What about &lt;a href="http://www.eskobo.com/">Eskobo&lt;/a>, &lt;a href="http://www.pageflakes.com/">Pageflakes&lt;/a>, &lt;a href="http://www.protopage.com/">Protopage&lt;/a>, &lt;a href="http://www.schmedley.com/">Schmedley&lt;/a> and &lt;a href="http://www.webwag.com/">Webwag&lt;/a>, to name just a few?&lt;/p>
&lt;p>&lt;img src="https://brunopedro.com/media/2007/07/netvibesuwalogo.png" alt="Netvibes UWA Logo">&lt;/p>
&lt;p>Netvibes calls itself the pioneer of the personalized startpage. Quoting their &lt;a href="http://www.netvibes.com/static.php?show=about">about page&lt;/a>:&lt;/p>
&lt;blockquote>
&lt;p>Netvibes pioneered the personalized startpage, an alternative to traditional Web portals&lt;/p>
&lt;/blockquote>
&lt;p>Well, dit it? Let&amp;rsquo;s travel back to 1999 when there was no such thing as &lt;a href="http://en.wikipedia.org/wiki/Ajax_(programming)">AJAX&lt;/a> or &lt;a href="http://www.rubyonrails.org/">RoR&lt;/a>, and &lt;a href="http://www.linkedin.com/in/michaelarrington">Mike Arrington&lt;/a> was just leaving the comfort of his office at &lt;a href="http://www.wsgr.com/">Wilson Sonsini Goodrich &amp;amp; Rosati&lt;/a> to dedicate his time to the &amp;ldquo;brand new Web&amp;rdquo;.&lt;/p></description></item><item><title>Placestreaming</title><link>https://brunopedro.com/2007/07/17/placestreaming/</link><pubDate>Tue, 17 Jul 2007 17:31:59 +0000</pubDate><guid>https://brunopedro.com/2007/07/17/placestreaming/</guid><description>&lt;p>The guys at &lt;a href="http://brightkite.com/">Brightkite&lt;/a> came up with the idea of capturing user-generated content and associating it to a particular place where the user is located. Quoting their blog &lt;a href="http://blog.brightkite.com/2007/07/08/its-all-about-placestreaming/">post&lt;/a>:&lt;/p>
&lt;blockquote>
&lt;p>&lt;em>Placestreaming&lt;/em>, as in the stream of content originating from a specific place. We think this really captures what Brightkite is all about. We enable location based conversations. And location based conversations, in aggregate, are placestreams.&lt;/p>
&lt;/blockquote>
&lt;p>&lt;a href="http://brightkite.com/">&lt;img src="https://brunopedro.com/media/2007/07/brightkite_blog_logo.png" alt="Brightkite logo">&lt;/a>&lt;/p>
&lt;p>You&amp;rsquo;ll be able to &lt;em>stream&lt;/em> about a certain place when you&amp;rsquo;re there or even when you get home. What&amp;rsquo;s more interesting though is the ability to actually receive information about a place when you&amp;rsquo;re in that location:&lt;/p></description></item><item><title>PHP and Smarty on Large-Scale Web Development</title><link>https://brunopedro.com/2007/06/26/php-and-smarty-on-large-scale-web-development/</link><pubDate>Tue, 26 Jun 2007 12:36:19 +0000</pubDate><guid>https://brunopedro.com/2007/06/26/php-and-smarty-on-large-scale-web-development/</guid><description>&lt;p>Do you have to deal with large projects on a daily basis and feel that you&amp;rsquo;re always behind schedule? Have you tried all the available frameworks and quit because they don&amp;rsquo;t really fit into your development methodology? Are you a Web designer tired of writing PHP code all day long?&lt;/p>
&lt;p>&lt;a href="http://www.oreilly.com/catalog/9780596513795/">&lt;img src="https://brunopedro.com/media/2007/06/9780596513795_cat.gif" alt="PHP and Smarty on Large-Scale Web Development">&lt;/a>&lt;/p>
&lt;p>&lt;a href="http://www.oreilly.com/catalog/9780596513795/">PHP and Smarty on Large-Scale Web Development&lt;/a> is a &lt;a href="http://www.oreilly.com/store/series/sc.csp?CMP=ilc-home1&amp;amp;ATT=shortcutsseries">Short Cut&lt;/a> Book from &lt;a href="http://www.oreilly.com/">O&amp;rsquo;Reilly&lt;/a> that I wrote along with &lt;a href="http://www.oreillynet.com/pub/au/3095">Vitor Rodrigues&lt;/a>. It&amp;rsquo;s a book for developers, engineering managers and Web designers. It shows you what a good choice using &lt;a href="http://www.php.net/">PHP&lt;/a> and &lt;a href="http://smarty.php.net/">Smarty&lt;/a> can be for Large Scale Web projects.&lt;/p></description></item><item><title>Hackday network</title><link>https://brunopedro.com/2007/06/08/hackday-network/</link><pubDate>Fri, 08 Jun 2007 10:10:34 +0000</pubDate><guid>https://brunopedro.com/2007/06/08/hackday-network/</guid><description>&lt;p>The guys at &lt;a href="http://www.backnetwork.com/" title="backnetwork">backnetwork&lt;/a> did a great job by providing a full social network for the &lt;a href="http://hackday.org/" title="London Hackday 2007">London Hackday 2007&lt;/a> event. You are encouraged to participate by creating your own &lt;a href="http://hackdaylondon07.backnetwork.com/people/person.aspx?personid=521" title="Bruno Pedro profile">profile&lt;/a> and linking to friends and acquaintances that you might have.&lt;/p>
&lt;p>They also opened their application to outside users by providing a very simple &lt;a href="http://hackdaylondon07.backnetwork.com/api/" title="backnetwork api">API&lt;/a> where you can perform several tasks. You need, of course, to be registered to do that.&lt;/p></description></item><item><title>PHP and Web Services</title><link>https://brunopedro.com/2007/05/20/php-and-web-services/</link><pubDate>Sun, 20 May 2007 22:32:49 +0000</pubDate><guid>https://brunopedro.com/2007/05/20/php-and-web-services/</guid><description>&lt;p>I&amp;rsquo;ve been kindly invited by &lt;a href="http://dcti.iscte.pt/cjc/" title="Carlos Costa home page">Prof.Carlos Costa&lt;/a> to present a workshop at the &lt;a href="http://upcoming.yahoo.com/event/185069/" title="CITOT 2007 at Upcoming">CITOT 2007&lt;/a> conference. The conference has just finished and I&amp;rsquo;m sharing my presentation slides &lt;a href="https://brunopedro.com/2007/05/20/php-and-web-services/" title="PHP and Web Services">right here&lt;/a>. You can also download the full &lt;a href="http://www.slideshare.net/bpedro/php-and-web-services/download" title="Presentation download at Slideshare">presentation&lt;/a> (PDF format, 1.5MB).&lt;/p>
&lt;p>I also had a great time during the coffee breaks talking about different subjects, from Open Source to Web Art. I hope more conferences like this take place in Portugal because it&amp;rsquo;s a fantastic way to share opinions and, who knows, start new projects.&lt;/p></description></item><item><title>London Hack Day</title><link>https://brunopedro.com/2007/05/18/london-hack-day/</link><pubDate>Fri, 18 May 2007 14:23:47 +0000</pubDate><guid>https://brunopedro.com/2007/05/18/london-hack-day/</guid><description>&lt;p>&lt;a href="http://www.yahoo.com/" title="Yahoo!">Yahoo!&lt;/a> and &lt;a href="http://backstage.bbc.co.uk/" title="BBC Backstage">BBCBackstage&lt;/a> are organizing London Hack Day. The event will take place in London, at the &lt;a href="http://en.wikipedia.org/wiki/Alexandra_Palace" title="Alexandra Palace">Alexandra Palace&lt;/a>, on the weekend of June 16th and 17th. More than 400 developers are being invited to participate in this amazing hacking party. Hack Day can best be described as (quoting &lt;a href="http://en.wikipedia.org/wiki/Open_Hack_Day" title="Open Hack Day">Wikipedia&lt;/a>)&lt;/p>
&lt;blockquote>
&lt;p>(&amp;hellip;) an open participatory hacking session where attendees were encouraged to create web applications that utilized one or more of Yahoo&amp;rsquo;s APIs and open source libraries.&lt;/p></description></item><item><title>Social Complexity in Software Development</title><link>https://brunopedro.com/2007/03/10/social-complexity-in-software-development/</link><pubDate>Sat, 10 Mar 2007 16:54:06 +0000</pubDate><guid>https://brunopedro.com/2007/03/10/social-complexity-in-software-development/</guid><description>&lt;p>Software complexity is increasing as time goes by and is now becoming a nightmare for every developer. To begin with, let&amp;rsquo;s find out &lt;a href="http://www.bandungfe.net/faq/" title="Complexity FAQ">what complexity is&lt;/a>:&lt;/p>
&lt;blockquote>
&lt;p>A complex system is a system for which it is difficult, if not impossible to restrict its description to a limited number of parameters or characterising variables without losing its essential global functional properties.&lt;/p>
&lt;/blockquote>
&lt;p>So, it&amp;rsquo;s getting more and more difficult to restrict software&amp;rsquo;s description to a limited number of parameters without losing its global functional properties. What that means is that it&amp;rsquo;s getting harder to come up with a piece of software that does exactly what was requested, not more nor less.&lt;/p></description></item><item><title>Large-scale reuse and remix on the Web</title><link>https://brunopedro.com/2007/01/30/large-scale-reuse-and-remix-on-the-web/</link><pubDate>Tue, 30 Jan 2007 22:43:21 +0000</pubDate><guid>https://brunopedro.com/2007/01/30/large-scale-reuse-and-remix-on-the-web/</guid><description>&lt;p>&lt;a href="http://foundry.maya.com/jda/" title="Javascript Dataflow Architecture">Javascript Dataflow Architecture&lt;/a> (JDA) is a project from &lt;a href="http://www.maya.com/" title="Maya Design, Inc.">Maya&lt;/a> that attempts to solve the issues associated to large-scale reuse and remix on the Web through the use of black box composition. Quoting their Website:&lt;/p>
&lt;blockquote>
&lt;p>Remember back in the mid 90s when we could tinker with the Web by just copying and pasting a bunch of HTML? You know how with Web Services and Javascript we can do a lot more cool stuff on the Web these days? Except, it&amp;rsquo;s no longer as simple as just copying and pasting HTML? Why can&amp;rsquo;t we do all these cool next-gen Web stuff while maintaining the tinkerer&amp;rsquo;s culture of the original Web? We believe this can be done.&lt;/p></description></item><item><title>The Web Browser as an Information Broker</title><link>https://brunopedro.com/2007/01/09/the-web-browser-as-an-information-broker/</link><pubDate>Tue, 09 Jan 2007 14:39:45 +0000</pubDate><guid>https://brunopedro.com/2007/01/09/the-web-browser-as-an-information-broker/</guid><description>&lt;p>How can the Web Browser stop being simply a layout renderer and start using data in an intelligent way? &lt;a href="http://blog.mozilla.com/faaborg/">Alex Faaborg&lt;/a> of &lt;a href="http://www.mozilla.org/">Mozilla&lt;/a> sheds &lt;a href="http://blog.mozilla.com/faaborg/2006/12/11/microformats-part-0-introduction">some light&lt;/a> on this subject:&lt;/p>
&lt;blockquote>
&lt;p>Much in the same way that operating systems currently associate particular file types with specific applications, future Web browsers are likely going to associate semantically marked up data you encounter on the Web with specific applications, either on your system or online.&lt;/p>
&lt;/blockquote>
&lt;p>This is a great move for &lt;a href="http://wiki.mozilla.org/Firefox3">Firefox 3&lt;/a> (or &lt;a href="http://www.mozilla.org/projects/firefox/3.0a1/releasenotes/">Gran Paradiso&lt;/a> as they like to call it). He then continues &lt;a href="http://blog.mozilla.com/faaborg/2006/12/12/microformats-part-1-structured-data-chaos">commenting&lt;/a> the chaotic use of &lt;a href="http://microformats.org/">micro formats&lt;/a> throughout the Web:&lt;/p></description></item><item><title>The Unfolded Web</title><link>https://brunopedro.com/2006/11/30/the-unfolded-web/</link><pubDate>Thu, 30 Nov 2006 00:10:00 +0000</pubDate><guid>https://brunopedro.com/2006/11/30/the-unfolded-web/</guid><description>&lt;p>People all over are talking about the end of Web 2.0 in favor of a new, distributed network of information. Some people even suggested that we should start building a Web 3.0. What are the main characteristics of this new paradigm? Here&amp;rsquo;s a short list:&lt;/p>
&lt;ul>
&lt;li>easier and cheaper, on a  &lt;a href="http://www.businessweek.com/" title="BusinessWeek">BusinessWeek&lt;/a> &lt;a href="http://www.businessweek.com/the_thread/blogspotting/archives/2006/10/web_30.html">article&lt;/a> by Stephen Baker&lt;/li>
&lt;li>giving meaning to data, on a &lt;a href="http://www.nytimes.com/">NY Times&lt;/a> &lt;a href="http://www.nytimes.com/2006/11/12/business/12web.html?ex=1164949200&amp;amp;en=54a9c55d4d24b61f&amp;amp;ei=5070" title="Entrepreneurs See a Web Guided by Common Sense">article&lt;/a> by John Markoff&lt;/li>
&lt;li>much more useful than Web 2.0, on a blog &lt;a href="http://www.roughtype.com/archives/2006/11/welcome_web_30.php" title="Welcome Web 3.0!">post&lt;/a> by Nick Carr&lt;/li>
&lt;li>the &lt;a href="http://en.wikipedia.org/wiki/Semantic_web">semantic web&lt;/a>, on a blog &lt;a href="http://www.innovationcreators.com/2006/11/web_30_humanity_vs_the_machine.html">post&lt;/a> by Rod Boothby&lt;/li>
&lt;/ul>
&lt;p>Put simply, the new Web will be easier to the end-user and will make meaning out of data distributed across multiple services. More recently, an &lt;a href="http://www.regdeveloper.co.uk/2006/11/25/forward_to_the_distributed_revolution/">article&lt;/a> by &lt;a href="http://www.andfinally.com/">Bill Thompson&lt;/a> on &lt;a href="http://www.theregister.co.uk/" title="The Register">The Register&lt;/a> caught my attention. Quoting the author:&lt;/p></description></item><item><title>Widgets are everywhere</title><link>https://brunopedro.com/2006/11/14/widgets-are-everywhere/</link><pubDate>Tue, 14 Nov 2006 22:13:36 +0000</pubDate><guid>https://brunopedro.com/2006/11/14/widgets-are-everywhere/</guid><description>&lt;p>An interesting breed of applications is showing up all around these days. Yes, I&amp;rsquo;m talking about web widgets. Usually these widgets provide an alternative interface for an existing website. Let&amp;rsquo;s see how this software category emerged.&lt;/p>
&lt;p>Widgets exist for a long time now. I dare to say that they exist since the first windowed UI appeared. These were the so called widget &lt;em>toolkits&lt;/em>. I&amp;rsquo;m talking about things like the &lt;a href="http://en.wikipedia.org/wiki/X_Window_System" title="X Window System">X Window System&lt;/a> (20 years old) and, on a higher level, &lt;a href="http://www.opengroup.org/motif/" title="Motif">Motif&lt;/a>. How are the &lt;em>new&lt;/em> widgets any different from its predecessors?&lt;/p></description></item><item><title>Like Java for content</title><link>https://brunopedro.com/2006/11/01/like-java-for-content/</link><pubDate>Wed, 01 Nov 2006 05:41:41 +0000</pubDate><guid>https://brunopedro.com/2006/11/01/like-java-for-content/</guid><description>&lt;p>&lt;a href="http://java.sun.com/">Java&lt;/a> original &lt;a href="http://en.wikipedia.org/wiki/Motto">motto&lt;/a> was (and still is) &lt;em>&amp;ldquo;Write once, run anywhere&amp;rdquo;&lt;/em>. Software written in the Java language can run on virtually any computer platform, including mobile devices. The only catch: usually applications are sluggish because they tend to consume lots of memory.&lt;/p>
&lt;p>Web content is following the same path. RSS and other forms of syndication enable content to be consumed anywhere without the need to rewrite it for every device you want to support. The only catch: devices need to understand the content distribution format (usually some variant of XML).&lt;/p></description></item><item><title>Unfolding the Web</title><link>https://brunopedro.com/2006/10/22/unfolding-the-web/</link><pubDate>Sun, 22 Oct 2006 17:23:49 +0000</pubDate><guid>https://brunopedro.com/2006/10/22/unfolding-the-web/</guid><description>&lt;p>&lt;em>Originally &lt;a href="http://www.oreillynet.com/onlamp/blog/2006/08/unfolding_the_web.html">posted&lt;/a> at the &lt;a href="http://www.oreillynet.com/onlamp/blog/">O&amp;rsquo;Reilly ONLamp Blog&lt;/a>:&lt;/em>&lt;/p>
&lt;blockquote>
&lt;p>What if you could use the Web as a whole as a data storage object? What if you could write simple applications that would simply live on the Web and feed from the Web?&lt;/p>
&lt;p>I think the Web right now is cut down into a million pieces that don’t talk to each other properly. What you’ve seen so far is information being gathered from the edge into aggregator applications. What about using everything as a whole? No more edge and center. No more aggregators. The information will just grow organically.&lt;/p></description></item><item><title>About</title><link>https://brunopedro.com/about/</link><pubDate>Tue, 22 Nov 2005 10:20:38 +0000</pubDate><guid>https://brunopedro.com/about/</guid><description>&lt;p>&lt;span>&lt;img src="https://brunopedro.com/media/about/tarpipe_workflow_example.jpg" style="width:8rem" />&lt;img src="https://brunopedro.com/media/about/APIMaslowPyramid.png" style="width:8rem" />&lt;/span>&lt;span style="white-space:nowrap">&lt;img src="https://brunopedro.com/media/about/APIAutomationValueMap.png" style="width:8rem" />&lt;img src="https://brunopedro.com/media/about/IntegratedProduct.png" style="width:8rem" />&lt;/span>&lt;/p>
&lt;p>Bruno Pedro is a computer science professional with over 25 years of experience in the industry. Throughout his career, he has worked on a variety of projects, including Internet traffic analysis, API backends and integrations, and Web applications. He has also managed teams of developers and founded several companies, including tarpipe, an iPaaS, in 2008, and the API Changelog in 2015. In addition to his work experience, Bruno has also made contributions to the API industry through his &lt;a href="https://brunopedro.com/publications">written work&lt;/a>, including two published books on API-related topics and numerous technical magazine and web articles. He has also been &lt;a href="https://brunopedro.com/presentations">a speaker&lt;/a> at numerous API industry conferences and events since 2013.&lt;/p></description></item><item><title>Transforming XML with PHP</title><link>https://brunopedro.com/2003/06/18/transforming-xml-with-php/</link><pubDate>Wed, 18 Jun 2003 18:00:00 +0200</pubDate><guid>https://brunopedro.com/2003/06/18/transforming-xml-with-php/</guid><description>&lt;p>&lt;label for="marginnote-1" class="margin-toggle marginnote-ind">&lt;/label>
&lt;input type="checkbox" id="marginnote-1" class="margin-toggle"/>
&lt;span class="marginnote">
This post was originally published on XML.com as &lt;a href="https://www.xml.com/pub/a/2003/06/18/php-xml.html">“Transforming XML with PHP”&lt;/a>.
&lt;/span>
This article compares two methods of transforming XML in PHP: PEAR&amp;rsquo;s &lt;code>XML_Transformer&lt;/code> package and the W3C XML transformation language XSLT. I will first describe the PEAR project and its philosophy, with a focus on its XML transformation techniques. I will then give a brief introduction to XSLT and the way to use it from PHP.&lt;/p>
&lt;h1 id="introduction">
Introduction
&lt;a href="#introduction" class="heading-anchor">#&lt;/a>
&lt;/h1>
&lt;p>PEAR&amp;rsquo;s main goal is to become a repository for PHP extensions and libraries. Its members try to standardize the way developers write portable and re-usable code&lt;label for="marginnote-2" class="margin-toggle marginnote-ind">&lt;/label>
&lt;input type="checkbox" id="marginnote-2" class="margin-toggle"/>
&lt;span class="marginnote">
João Prado Maia. &lt;a href="http://www.onlamp.com/pub/a/php/2001/05/24/pear.html">An Introduction to PEAR&lt;/a>. May 2001. O’Reilly Network
&lt;/span>
.&lt;/p></description></item></channel></rss>