<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>João Bordalo</title>
    <link>https://joaobordalo.com/</link>
    <description>Hello, I&apos;m João Bordalo, a full stack bitcoiner living in Portugal. Here you can see some of my work, know my history or get my CV. Feel free to reach out.</description>
    <language>en</language>
    <lastBuildDate>Sun, 02 Aug 2026 06:51:07 +0000</lastBuildDate>
    <atom:link href="https://joaobordalo.com/rss.xml"
               rel="self" type="application/rss+xml" />
    
    <item>
      <title>Paywally</title>
      <link>https://joaobordalo.com/articles/2024/12/16/paywally.html</link>
      <guid isPermaLink="true">https://joaobordalo.com/articles/2024/12/16/paywally.html</guid>
      <pubDate>Mon, 16 Dec 2024 04:20:00 +0000</pubDate>
      <description>&lt;p&gt;I decided to play with cashu so I made&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://paywally.pages.dev&quot;&gt;https://paywally.pages.dev&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It’s a standalone web app, no KYC, that implements a lightning paywall: you need to pay 21 sats to unlock the hidden content.&lt;/p&gt;

&lt;p&gt;How it works:&lt;/p&gt;

&lt;!--more--&gt;

&lt;ul&gt;
  &lt;li&gt;The app fetches a 19 sats invoice from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bordalix@coinos.io&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Then it creates a melt quote with this invoice&lt;/li&gt;
  &lt;li&gt;In return the app gets amount = 19 and fee_reserve = 2 sats&lt;/li&gt;
  &lt;li&gt;It then creates a mint quote of 21 sats (19 + 2)&lt;/li&gt;
  &lt;li&gt;In return the app gets a payment request (aka ln invoice)&lt;/li&gt;
  &lt;li&gt;It shows this invoice to the user in qrcode and text&lt;/li&gt;
  &lt;li&gt;It pools the mint every 5 seconds waiting for the invoice to be paid&lt;/li&gt;
  &lt;li&gt;When paid, it mints the proofs&lt;/li&gt;
  &lt;li&gt;Use these proofs to pay for the original invoice&lt;/li&gt;
  &lt;li&gt;Receives a change of 2 sats and sends it to me via Nostr&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s not perfect, the reader can sheat by inspecting the code and:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Change the value to pay to 3 sats&lt;/li&gt;
  &lt;li&gt;Change &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bordalix@coinos.io&lt;/code&gt; to his own lnurl&lt;/li&gt;
  &lt;li&gt;Access the content in the code (is obfuscated, but is there)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://paywally.pages.dev&quot;&gt;Try it&lt;/a&gt; to get access to the code repo.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Ark payments</title>
      <link>https://joaobordalo.com/articles/2024/09/30/ark-payments.html</link>
      <guid isPermaLink="true">https://joaobordalo.com/articles/2024/09/30/ark-payments.html</guid>
      <pubDate>Mon, 30 Sep 2024 04:20:00 +0000</pubDate>
      <description>&lt;p&gt;Let me start with an analogy:&lt;/p&gt;

&lt;p&gt;On mainnet, when Alice wants to send to Bob, she has 2 options:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Sign transaction and broadcast it (Bob will find it on mempool)&lt;/li&gt;
  &lt;li&gt;Sign transaction and send it to Bob (Bob can broadcast it immediately or later)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Let’s call it &lt;u&gt;Send&lt;/u&gt; and &lt;u&gt;Send Async&lt;/u&gt; respectively.&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;In Ark there are also 2 options for Alice (assuming Alice already has a VTXO).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Send:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Alice asks the ASP to pay Bob&lt;/li&gt;
  &lt;li&gt;ASP waits for other payment intentions&lt;/li&gt;
  &lt;li&gt;ASP prepares a new &lt;strong&gt;round tx&lt;/strong&gt; with a new VTXO belonging to Bob and shows it to Alice&lt;/li&gt;
  &lt;li&gt;Alice signs a &lt;strong&gt;forfeit tx&lt;/strong&gt; using a &lt;strong&gt;round tx&lt;/strong&gt; output as input (making it atomic)&lt;/li&gt;
  &lt;li&gt;Alice needs to be online during the round&lt;/li&gt;
  &lt;li&gt;ASP liquidity is required immediately&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Send Async (or Out-Of-Round):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Alice prepares a &lt;strong&gt;redeem tx&lt;/strong&gt; (spends Alice’s VTXO into a Bob’s VTXO)&lt;/li&gt;
  &lt;li&gt;Alice ask the ASP to co-sign the &lt;strong&gt;redeem tx&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Alice sends the &lt;strong&gt;redeem tx&lt;/strong&gt; to Bob (it doesn’t matter how)&lt;/li&gt;
  &lt;li&gt;Bob can use this &lt;strong&gt;redeem tx&lt;/strong&gt; to join a round now or later (up until Alice’s VTXO validity)&lt;/li&gt;
  &lt;li&gt;Alice doesn’t need to be online during the round&lt;/li&gt;
  &lt;li&gt;ASP liquidity is required later (only when Bob joins the round)&lt;/li&gt;
  &lt;li&gt;Up until joining the round, Bob is trusting Alice + ASP don’t collude to double spend him&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a more detailed explanation, check &lt;a href=&quot;https://arkdev.info/docs/learn/payments&quot;&gt;Payments&lt;/a&gt; and &lt;a href=&quot;https://arkdev.info/docs/learn/payments-oor&quot;&gt;Out-of-Round Payments&lt;/a&gt; on &lt;a href=&quot;https://arkdev.info&quot;&gt;arkdev.info&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Related: &lt;a href=&quot;/labs/ark/&quot;&gt;Ark explainer&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Helm wallet</title>
      <link>https://joaobordalo.com/articles/2024/04/20/announcing-helm-wallet.html</link>
      <guid isPermaLink="true">https://joaobordalo.com/articles/2024/04/20/announcing-helm-wallet.html</guid>
      <pubDate>Sat, 20 Apr 2024 04:20:00 +0000</pubDate>
      <description>&lt;p&gt;Announcing my latest pet project, Helm Wallet.&lt;/p&gt;

&lt;p&gt;I believe there’s a huge gap between the ease of use of Wallet of Satoshi and the self-custody of Phoenix. To minimize this gap, I created a new web app, a wallet that has the self-custody of Phoenix and is easy to use as WoS.&lt;/p&gt;

&lt;p&gt;Helm is a Liquid wallet that uses Boltz submarine swaps to disguise itself as a Lightning wallet that even your grandma can use.&lt;/p&gt;

&lt;p&gt;But it has a cost.&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;All transactions must go on the Liquid chain and also Boltz must earn something for the service they provide, so there are fees to be paid:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Boltz fee is 0.1% of the amount for sending to Lightning;&lt;/li&gt;
  &lt;li&gt;Boltz fee is 0.25% of the amount for receiving from Lightning;&lt;/li&gt;
  &lt;li&gt;The average network fee for sending or receiving a payment is around 47 sats;&lt;/li&gt;
  &lt;li&gt;Transactions between Helm wallets don’t pay Boltz fees but can take up to 1 minute to complete;&lt;/li&gt;
  &lt;li&gt;Boltz swaps are limited between 100 and 25.000.000 sats.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can try it (testnet if you want) on &lt;a href=&quot;https://helm-wallet.pages.dev/&quot;&gt;https://helm-wallet.pages.dev/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Code is available at &lt;a href=&quot;https://github.com/bordalix/helm-wallet/&quot;&gt;https://github.com/bordalix/helm-wallet/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The web app is completely independent, no server required. You can clone it, build it and run it from your own computer. Everything runs on the browser.&lt;/p&gt;

&lt;p&gt;Critics and suggestions are welcome.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://helm-wallet.com&quot;&gt;Landing page&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Buy gift cards with Liquid</title>
      <link>https://joaobordalo.com/articles/2023/11/30/buy-tbc-with-liquid.html</link>
      <guid isPermaLink="true">https://joaobordalo.com/articles/2023/11/30/buy-tbc-with-liquid.html</guid>
      <pubDate>Thu, 30 Nov 2023 12:34:56 +0000</pubDate>
      <description>&lt;p&gt;Buy gift cards from &lt;a href=&quot;https://embed.thebitcoincompany.com&quot;&gt;The Bitcoin Company&lt;/a&gt; and pay with Liquid BTC:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Buy gift card (includes VISA)&lt;/li&gt;
  &lt;li&gt;Capture Lightning (LN) invoice&lt;/li&gt;
  &lt;li&gt;Call &lt;a href=&quot;https://boltz.exchange&quot;&gt;Boltz&lt;/a&gt; and make LBTC =&amp;gt; LN swap&lt;/li&gt;
  &lt;li&gt;User pays LBTC with &lt;a href=&quot;https://vulpem.com/marina.html&quot;&gt;Marina&lt;/a&gt; wallet&lt;/li&gt;
&lt;/ul&gt;

&lt;!--more--&gt;

&lt;video class=&quot;has-border&quot; width=&quot;100%&quot; controls=&quot;&quot;&gt;
  &lt;source src=&quot;/images/static/blog/liquidTBC.mov&quot; type=&quot;video/mp4&quot; /&gt;
  Your browser does not support the video tag.
&lt;/video&gt;

&lt;p&gt;Try it yourself: &lt;a href=&quot;https://liquidtbc.pages.dev&quot;&gt;Liquid TBC&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Motivation:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Because I can 😉&lt;/li&gt;
  &lt;li&gt;To show the possibilities of integrating Liquid with the Lightning Network&lt;/li&gt;
  &lt;li&gt;Now there’s &lt;a href=&quot;https://github.com/bordalix/liquidtbc&quot;&gt;code&lt;/a&gt; in plain javascript that anyone can read and adapt for their own needs&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>What is Nostr</title>
      <link>https://joaobordalo.com/articles/2023/11/26/what_is_nostr.html</link>
      <guid isPermaLink="true">https://joaobordalo.com/articles/2023/11/26/what_is_nostr.html</guid>
      <pubDate>Sun, 26 Nov 2023 11:27:38 +0000</pubDate>
      <description>&lt;p&gt;Nostr stands for “Notes and Other Stuff Transmitted by Relays”. It is a decentralized social network protocol that aims to create a censorship-resistant and user-empowered alternative to existing social media platforms.&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;Key features of Nostr:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Decentralized&lt;/strong&gt;: Nostr does not have a central server or authority. Instead, it relies on a network of relays that store and distribute messages. This makes it difficult to censor or shut down the network.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;User-empowered&lt;/strong&gt;: Users have complete control over their own data and can choose which relays they trust. They can also self-host their own relays to ensure that their data is not subject to third-party control.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Censorship-resistant&lt;/strong&gt;: Nostr’s decentralized nature makes it very difficult to censor messages. Even if some relays are censored, there will always be other relays that are available to store and distribute messages.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Open protocol&lt;/strong&gt;: Nostr is an open protocol, which means that anyone can build applications on top of it. This has led to the development of a variety of Nostr clients, each with its own unique features.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Besides social networking, Nostr has other potential use cases, including:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;News feeds and RSS feeds&lt;/strong&gt;: Nostr could be used to create a decentralized and censorship-resistant alternative to traditional news feeds and RSS feeds.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Microblogging and status updates&lt;/strong&gt;: Nostr could be used to create a decentralized and censorship-resistant alternative to microblogging platforms like Twitter.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;File sharing and distributed file storage&lt;/strong&gt;: Nostr could be used to create a decentralized and censorship-resistant alternative to file-sharing platforms like Dropbox and Google Drive.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Secure messaging and encrypted communication&lt;/strong&gt;: Nostr could be used to create a decentralized and censorship-resistant alternative to secure messaging platforms like Signal and WhatsApp.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Identity management and self-sovereign identity&lt;/strong&gt;: Nostr could be used to create a decentralized and censorship-resistant alternative to traditional identity management systems.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Decentralized applications (dApps)&lt;/strong&gt;: Nostr could be used to build a wide variety of decentralized applications (dApps).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A few examples of dApps built on top of Nostr:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Social Networking
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://damus.io/&quot;&gt;Damus&lt;/a&gt;: A popular iOS Nostr client with a focus on privacy and security&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://primal.net/&quot;&gt;Primal&lt;/a&gt; - Lightning fast web client for Nostr&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://nostrchat.io/&quot;&gt;NostrChat&lt;/a&gt;: A simple and user-friendly Nostr chat client&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;File Sharing
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://nostrfiles.dev/&quot;&gt;Nostrfiles&lt;/a&gt;: A decentralized file storage platform built on Nostr&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/cmdruid/nostr-storage&quot;&gt;Nostr storage&lt;/a&gt;: A decentralized cloud storage solution built on Nostr&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Messaging
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://blowater.deno.dev/&quot;&gt;Blowlater&lt;/a&gt;: A private messaging client built on Nostr&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/0xchat-app&quot;&gt;0xChat&lt;/a&gt;: A telegram-like Nostr client for iOS and Android&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Other
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://www.nostrnet.work/&quot;&gt;NostrNet&lt;/a&gt;: A decentralized event calendar built on Nostr&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://market.nostr.com/#/&quot;&gt;Nostr Market&lt;/a&gt;: Create your own decentralized market&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://gitlab.com/1440000bytes/joinstr&quot;&gt;Joinstr&lt;/a&gt;: Coinjoin implementation using Nostr&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://formstr.app/&quot;&gt;Formstr&lt;/a&gt;: A usable alternative to google forms&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://hostr.cc&quot;&gt;Hostr&lt;/a&gt;: Decentralized web hosting solution on Nostr&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://w3.do/&quot;&gt;w3.do&lt;/a&gt;: URL shortener&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://stemstr.app/&quot;&gt;Stremr&lt;/a&gt;: Sharing music&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Made by me
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://chesstr.pages.dev/&quot;&gt;Chesstr&lt;/a&gt;: A chessboard powered by Nostr&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://nostr-nip05-crawler.pages.dev/&quot;&gt;NIP05 crawler&lt;/a&gt;: Find all users on a nip05 provider&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://nostr-backup.pages.dev/&quot;&gt;Nostr Backup&lt;/a&gt;: Fetch and backup your events&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://nostr-restore.pages.dev/&quot;&gt;Nostr Restore&lt;/a&gt;: Restore your nostr backup&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://nostr-broadcast.pages.dev/&quot;&gt;Nostr Broadcast&lt;/a&gt;: Fetch and broadcast your events&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://nostr-markets.pages.dev/&quot;&gt;Nostr Markets&lt;/a&gt;: Find all Nostr markets&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are just a few examples of the many potential use cases for Nostr, you can read an exhaustive list on &lt;a href=&quot;https://github.com/aljazceru/awesome-nostr&quot;&gt;awesome-nostr&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As the protocol matures and more creative minds get involved, we can expect to see even more innovative and groundbreaking ways to use Nostr in the future&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Explaining SIGHASH</title>
      <link>https://joaobordalo.com/articles/2023/07/13/explaining_sighash.html</link>
      <guid isPermaLink="true">https://joaobordalo.com/articles/2023/07/13/explaining_sighash.html</guid>
      <pubDate>Thu, 13 Jul 2023 11:27:38 +0000</pubDate>
      <description>&lt;p&gt;Sighash, short for Signature Hash, is a concept within the Bitcoin protocol that determines which parts of a transaction are signed. It plays a crucial role in ensuring the security and integrity of the Bitcoin network.&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;By using different Sighash types, users have control over which parts of a transaction are mutable and which are immutable when they sign it. This flexibility allows for various use cases, such as creating conditional transactions or enabling partial signatures for multi-signature transactions.&lt;/p&gt;

&lt;p&gt;Sighash types, such as SIGHASH_ALL, SIGHASH_NONE, SIGHASH_SINGLE, and others, define different signing schemes. These schemes specify which parts of a transaction are committed to, preventing tampering while still allowing different transaction formats.&lt;/p&gt;

&lt;p&gt;Each signature has two flags appended at the end:&lt;/p&gt;

&lt;p&gt;SIGHASH, which &lt;strong&gt;outputs&lt;/strong&gt; were committed to this signature:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;ALL (0x01) = all outputs&lt;/li&gt;
  &lt;li&gt;NONE (0x02) = none output&lt;/li&gt;
  &lt;li&gt;SINGLE (0x03) = only the output with same index as this input.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ANYONECANPAY, which &lt;strong&gt;inputs&lt;/strong&gt; were committed to this signature:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;False (0x00) = all inputs&lt;/li&gt;
  &lt;li&gt;True (0x80) = only this input&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Using both flags in conjunction we get 6 possibilities:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/images/static/blog/sighash.jpeg&quot;&gt;
  &lt;img class=&quot;has-border&quot; src=&quot;/images/static/blog/sighash.jpeg&quot; aria-label=&quot;sighash diagram&quot; /&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SIGHASH_DEFAULT:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki&quot;&gt;BIP-341&lt;/a&gt; (Taproot) introduces a new flag, SIGHASH_DEFAULT (0x00), that works like SIGHASH_ALL but spares one byte on the signature (64 instead of 65 bytes).&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Maximum target hash</title>
      <link>https://joaobordalo.com/articles/2023/07/10/maximum-target-hash.html</link>
      <guid isPermaLink="true">https://joaobordalo.com/articles/2023/07/10/maximum-target-hash.html</guid>
      <pubDate>Mon, 10 Jul 2023 11:27:38 +0000</pubDate>
      <description>&lt;p&gt;Do you know which Bitcoin constant is this?&lt;/p&gt;

&lt;p&gt;26,959,535,291,011,309,493,156,476,344,723,991,336,010,898,738,574,164,086,137,773,096,960&lt;/p&gt;

&lt;p&gt;Maybe in its hexadecimal format?&lt;/p&gt;

&lt;p&gt;0x00000000FFFF0000000000000000000000000000000000000000000000000000&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;Yes, it’s the maximum target hash.&lt;/p&gt;

&lt;p&gt;But what thus it means, and why this “weird” value?&lt;/p&gt;

&lt;p&gt;Bitcoin’s protocol wants blocks mined every 10 minutes (on average), but the number of miners doing it varies along the time. The protocol adjusts to this hash power variation by increasing or decreasing the difficulty to mine a block.&lt;/p&gt;

&lt;p&gt;This adjustment is made every 2016 blocks (~2 weeks), by multiplying the current difficulty with the ratio of expected time / actual time it took to mine the previous 2016 blocks.&lt;/p&gt;

&lt;p&gt;For example, if the last 2016 took 18144 minutes (instead of 20160), the ratio would be 1.1 and the new difficulty would be 1.1 times the previous difficulty:&lt;/p&gt;

&lt;p&gt;new difficulty = difficulty * ( 20160 / 18144)&lt;/p&gt;

&lt;p&gt;To reflect difficulty in the process of mining, a new value is calculated from the difficulty value (the target hash) and block headers must be equal or below this target hash. Since block headers are found by trial and error, the lower the target hash, the harder it is to find a valid block header.&lt;/p&gt;

&lt;p&gt;The target hash is calculated and written to the block header:&lt;/p&gt;

&lt;p&gt;target hash = maximum target hash / difficulty&lt;/p&gt;

&lt;p&gt;So, we now reached the maximum target, a Bitcoin constant with the value of 0x00000000FFFF0000000000000000000000000000000000000000000000000000&lt;/p&gt;

&lt;p&gt;Now, why 0x00000000FFFF00…00? Why not 0xFF…FF?&lt;/p&gt;

&lt;p&gt;If you are Satoshi, and you are about to launch the genesis block, you have two things to consider:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;What will be the difficulty of block 0? Well, logic says it should be the easiest block of all, so it should have the minimum value possible, 1.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;How to make sure that my computer will take about 10 minutes to mine the next blocks? After all, you are pretty sure you will be alone doing this for a while.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you put a maximum target of 0xFF..FF, and difficulty at 1, using the above formula, you’ll have a target hash of 0xFF..FF, which means that EVERY block will be a valid block, which means that your computer will generate thousands of blocks in a few seconds.&lt;/p&gt;

&lt;p&gt;The difficulty adjustment would kick in every 2016 blocks, but since the difficulty adjustment it’s limited to a variation by a factor of 4 (4 &amp;gt; ratio &amp;gt; 0.25), it would take some time adjusting and we would end up with thousands of empty blocks.&lt;/p&gt;

&lt;p&gt;To prevent this, you’ll need to calculate the hash power of your computer and then define the maximum target in order to have it mining blocks every 10 minutes on average.&lt;/p&gt;

&lt;p&gt;And it seems 0x00000000FFFF00…00 was the number.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Explain Bitcoin like I’m 10</title>
      <link>https://joaobordalo.com/articles/2020/03/02/explain-bitcoin-like-I-am-10.html</link>
      <guid isPermaLink="true">https://joaobordalo.com/articles/2020/03/02/explain-bitcoin-like-I-am-10.html</guid>
      <pubDate>Mon, 02 Mar 2020 11:09:38 +0000</pubDate>
      <description>&lt;p&gt;
  &lt;strong&gt;How can I buy Bitcoin?&lt;/strong&gt;&lt;br /&gt;
  Generate a password, and then pay someone to send bitcoins to that password.
&lt;/p&gt;
&lt;p&gt;
  &lt;strong&gt;A password?! That&apos;s it?&lt;/strong&gt;&lt;br /&gt;
  Yep, that&apos;s it.
&lt;/p&gt;

&lt;!--more--&gt;
&lt;p&gt;
  &lt;strong&gt;What do you mean with &quot;send to a password&quot;?&lt;/strong&gt;&lt;br /&gt;
  It means those bitcoins now belong to the owner of that password.
&lt;/p&gt;
&lt;p&gt;
  &lt;strong&gt;What if someone finds my password?&lt;/strong&gt;&lt;br /&gt;
  Then he will be able to spend your bitcoins.
&lt;/p&gt;
&lt;p&gt;
  &lt;strong&gt;How hard will it be to try all possible passwords to check if they have bitcoins?&lt;/strong&gt;&lt;br /&gt;
  Really hard, it would take hundreds of thousands of years to do it. There are a lot of different possible passwords available. If you choose your password at random - and don’t use your birthday - you&apos;re safe.
&lt;/p&gt;
&lt;p&gt;
  &lt;strong&gt;How many different possible passwords are there?&lt;/strong&gt;&lt;br /&gt;
  Almost 2^256, or in numbers you understand, 115,792,089,237,316,195,423,570,985,008,687,907,852,837,564,279,074,904,382,605,163,141,518,161,494,336. That&apos;s higher than the number of atoms in the perceived universe.
&lt;/p&gt;
&lt;p&gt;
  &lt;strong&gt;But wait, you told me that to get some bitcoins, I had to pay someone for him to send his bitcoins to my password. So, he must know my password, right?&lt;/strong&gt;&lt;br /&gt;
  No, absolutely not. Bitcoin uses mathematics to transform your password (also known as a private key) into a public key. These two keys are related, but totally different. It&apos;s really easy to get a public key from a private key. But it&apos;s impossible to guess a private key from his public key. So what you do is ask that guy to send his bitcoin to your public key, instead of your private key, thus keeping it secret.
&lt;/p&gt;
&lt;p&gt;
  &lt;strong&gt;Send to the public key?! But if it&apos;s public, everyone will know about it! How are my bitcoins secured then?&lt;/strong&gt;&lt;br /&gt;
  Because you asked that guy to send the bitcoins not to the public key itself, but to a script.
&lt;/p&gt;
&lt;p&gt;
  &lt;strong&gt;A script? What is that?&lt;/strong&gt;&lt;br /&gt;
  Imagine your public key as a word. One can say &quot;These bitcoins now belong to these public key X&quot;. But with Bitcoin script, we can build sentences. So, instead, we can say &quot;These bitcoins now belong to &lt;strong&gt;who proofs to own the private key where its public key is the same as this public key X&lt;/strong&gt;&quot;. That sentence in bold is what we call the &lt;i&gt;unlocking script&lt;/i&gt;.
&lt;/p&gt;
&lt;p&gt;
  &lt;strong&gt;Sentences instead of words? That sounds interesting.&lt;/strong&gt;&lt;br /&gt;
  Yes, it is. There are different sentences in use nowadays in Bitcoin, but I will explain this to you when you&apos;re 11. For the meantime, let&apos;s stay with the basics: a) you need a password, or as you now know, a pair of keys (public and private), b) you pay someone to send his bitcoins to your public key, and c) you don&apos;t need to show him the private key. Only the script and your public key are recorded, in what is called a &lt;i&gt;transaction&lt;/i&gt;.
&lt;/p&gt;
&lt;p&gt;
  &lt;strong&gt;So a transaction happens when some bitcoins change ownership?&lt;/strong&gt;&lt;br /&gt;
  Exactly. A transaction has two parts: inputs and outputs. Input are all the bitcoins entering the transaction. These bitcoins will change ownership. Remember, the owner has to prove he owns these bitcoins, by satisfying the unlocking script. The output defines the new ownership of the bitcoins referenced in the input.
&lt;/p&gt;
&lt;p&gt;
  &lt;strong&gt;We can have more than one input and more than one output? Why?&lt;/strong&gt;&lt;br /&gt;
  Imagine you have 2 private keys, each &quot;owning&quot; 5 bitcoins. You want to buy something that costs 7 bitcoins. You create a transaction with those 2 private keys on the input, which gives you 10 bitcoins in total. On the output, you define that 7 will belong to the public key of the seller, and 3 to your public key again (it&apos;s your change).
&lt;/p&gt;
&lt;p&gt;
  &lt;strong&gt;But now everyone can see that my bitcoins belong to this public key. Is that ok?&lt;/strong&gt;&lt;br /&gt;
  If you use the same public key for every bitcoin you receive, people will know that they belong to the same person. So you should generate a new pair of keys for every bitcoin you receive. Even the public key for your change should be different.
&lt;/p&gt;
&lt;p&gt;
  &lt;strong&gt;A new password for every bitcoin I receive? That&apos;s a nightmare!&lt;/strong&gt;&lt;br /&gt;
  No it isn&apos;t, if you use a Bitcoin wallet to manage all your passwords.
&lt;/p&gt;
&lt;p&gt;
  &lt;strong&gt;A wallet? What&apos;s that?&lt;/strong&gt;&lt;br /&gt;
  You know what a browser is, right?
&lt;/p&gt;
&lt;p&gt;
  &lt;strong&gt;Yeah, it allows me to access the World Wide Web.&lt;/strong&gt;&lt;br /&gt;
  Exactly, and a Bitcoin wallet it&apos;s just like a browser, but to access the Bitcoin network.
&lt;/p&gt;
&lt;p&gt;
  &lt;strong&gt;So, my bitcoins are stored in that wallet?&lt;/strong&gt;&lt;br /&gt;
  Not your bitcoins, your passwords. Your bitcoins are registered on the network as belonging to your passwords, so you just need to take care of your passwords.
&lt;/p&gt;
&lt;p&gt;
  &lt;strong&gt;So, if I lose my wallet, and so my passwords, I lose my bitcoins?&lt;/strong&gt;&lt;br /&gt;
  Yeah. That&apos;s why it is so important to backup your passwords.
&lt;/p&gt;
&lt;p&gt;
  &lt;strong&gt;But with a new password for every time someone sends me bitcoins, there are always new passwords being generated. How can I backup something that&apos;s always changing?&lt;/strong&gt;&lt;br /&gt;
  Because in Bitcoin there&apos;s a concept of a super master password. If you backup that, you&apos;ll be able to access all your used (and future) passwords. This super master password is called a &lt;i&gt;seed phrase&lt;/i&gt;.
&lt;/p&gt;
&lt;p&gt;
  &lt;strong&gt;Future passwords? Really?&lt;/strong&gt;&lt;br /&gt;
  That&apos;s the beauty of Elliptic Curve Cryptography. But I will explain that to you when you&apos;re 12.
&lt;/p&gt;
&lt;p&gt;
  &lt;strong&gt;What if my wallet app disappears? Like if the company which made the app go bankrupt?&lt;/strong&gt;&lt;br /&gt;
  You just install another wallet and add the seed phrase to it. The new wallet will then be able to know all your passwords, and will be able to scan the network and find your bitcoins there.
&lt;/p&gt;
&lt;p&gt;
  &lt;strong&gt;But where do wallets see this? Where is that information recorded?&lt;/strong&gt;&lt;br /&gt;
  In a database, or how we call it, a &lt;i&gt;ledger&lt;/i&gt;.
&lt;/p&gt;
&lt;p&gt;
  &lt;strong&gt;A database? What&apos;s that?&lt;/strong&gt;&lt;br /&gt;
  It&apos;s a place where information is stored. You know that Google spreadsheet where I keep your school grades? The one I share with you and your mother? That&apos;s a database. Imagine that there&apos;s a Google spreadsheet where every transaction is recorded. Imagine that anyone in the world could read that Google spreadsheet. Anyone, with no restrictions. But no one could edit it.
&lt;/p&gt;
&lt;p&gt;
  &lt;strong&gt;Yeah, like tweeting the public link of the spreadsheet.&lt;/strong&gt;&lt;br /&gt;
  Exactly, everyone could read all the sheets from the spreadsheet and verify all transactions.
&lt;/p&gt;
&lt;p&gt;
  &lt;strong&gt;Verify all transactions?&lt;/strong&gt;&lt;br /&gt;
  Yeah, all transactions must be registered in this spreadsheet and can be validated. And you should validate all transactions, to be sure you don&apos;t have a fake spreadsheet. You want to be sure the transaction changing ownership of the bitcoins to you is there. Before sending the money. For this to work the spreadsheet must be non editable.
&lt;/p&gt;
&lt;p&gt;
  &lt;strong&gt;That&apos;s ok, no one can edit the spreadsheet, they only have read access.&lt;/strong&gt;&lt;br /&gt;
  Except of course, for the owner of the spreadsheet. The one who sent the link initially. He can do whatever he wants with it.
&lt;/p&gt;
&lt;p&gt;
  &lt;strong&gt;The owner? I forgot about him. But, in that case, we have to trust him to be honest?&lt;/strong&gt;&lt;br /&gt;
  No, we don&apos;t. Bitcoin solved the problem by not having an owner, and by distributing the ledger. There is not one, but more than 100.000 copies of the ledger distributed around the world. These copies run in computers we call &lt;i&gt;nodes&lt;/i&gt;.
&lt;/p&gt;
&lt;p&gt;
  &lt;strong&gt;So nodes maintain copies of the ledger around the world?&lt;/strong&gt;&lt;br /&gt;
  Yes, and they validate transactions.
&lt;/p&gt;
&lt;p&gt;
  &lt;strong&gt;How do they know they have the correct spreadsheet?&lt;/strong&gt;&lt;br /&gt;
  Because all transactions are valid, and no one can change what&apos;s written there.
&lt;/p&gt;
&lt;p&gt;
  &lt;strong&gt;No one can write to it? How come?&lt;/strong&gt;&lt;br /&gt;
  I didn&apos;t say no one can write to it, I said no one can change what&apos;s written there. Pay attention please.
&lt;/p&gt;
&lt;p&gt;
  &lt;strong&gt;Hu? What&apos;s the difference?&lt;/strong&gt;&lt;br /&gt;
  Well, you cannot change what&apos;s written there, but you can add information there. Like with your school grades spreadsheet. Do you know how your school grade spreadsheet has several sheets?
&lt;/p&gt;
&lt;p&gt;
  &lt;strong&gt;Yes, one for each school period.&lt;/strong&gt;&lt;br /&gt;
  Exactly. After I enter your grades, I don&apos;t need to change them. They will not change. And in the next period, I just add a new sheet to the spreadsheet with the new grades. Without touching the previous sheets.
&lt;/p&gt;
&lt;p&gt;
  &lt;strong&gt;So, you can never change anything, but you can always add information on top?&lt;/strong&gt;&lt;br /&gt;
  Clever boy.
&lt;/p&gt;
&lt;p&gt;
  &lt;strong&gt;Why is that important?&lt;/strong&gt;&lt;br /&gt;
  Because after a transaction is stored in a new sheet, it cannot be changed. Imagine the guy you pay for your bitcoins afterwards changes the transaction to another public key. You no longer control/own those bitcoins, and you lost your money. It&apos;s of paramount importance the immutability of the spreadsheet.
&lt;/p&gt;
&lt;p&gt;
  &lt;strong&gt;So, will my transaction appear in a new sheet in this spreadsheet?&lt;/strong&gt;&lt;br /&gt;
  Yes, sooner or later.
&lt;/p&gt;
&lt;p&gt;
  &lt;strong&gt;Sooner or later? How come?&lt;/strong&gt;&lt;br /&gt;
  Well, someone needs to write the new sheet, right? But who? To solve this, Bitcoin runs a lottery every 10 minutes. Whoever wins it gains the right to add a new sheet to the spreadsheet. So, your transaction will only appear after this lottery finishes. And even then, it may not see it in the new sheet. If there are a lot of transactions waiting to be included in a sheet, you will have to wait.
&lt;/p&gt;
&lt;p&gt;
  &lt;strong&gt;Why aren&apos;t all new transactions in the new sheet?&lt;/strong&gt;&lt;br /&gt;
  Because sheets have a limit in size. If there are too many transactions to be included, a selection must be made. The winner of the lottery is free to choose which transactions he wants to include in the new sheet. You know, we should start calling these sheets &lt;i&gt;blocks&lt;/i&gt;, that&apos;s their real names.
&lt;/p&gt;
&lt;p&gt;
  &lt;strong&gt;Can&apos;t we bribe the lottery winner?&lt;/strong&gt;&lt;br /&gt;
  Bribery? What do they teach you in school nowadays?
&lt;/p&gt;
&lt;p&gt;
  &lt;strong&gt;...&lt;/strong&gt;&lt;br /&gt;
  Actually, we can, and it&apos;s quite easy. When you define a transaction, you can define your output inferior to your input. This way, you are telling the lottery winner he can keep the difference. Of course, lottery winners will choose those transactions with a higher difference.
&lt;/p&gt;
&lt;p&gt;
  &lt;strong&gt;How are new bitcoins generated?&lt;/strong&gt;&lt;br /&gt;
  In this 10 minute lottery. The winner also gains some bitcoins as a prize, and this it&apos;s the only way new bitcoins are born.
&lt;/p&gt;
&lt;p&gt;
  &lt;strong&gt;So, every 10 minutes some bitcoins are born?&lt;/strong&gt;&lt;br /&gt;
  Yes. It’s called the &lt;i&gt;block subsidy&lt;/i&gt;, and these new bitcoins belong to the lottery winner. When Bitcoin started, the block subsidy was 50 bitcoins. Every 210.000 blocks (more or less 4 years) this block subsidy is cut in half. Nowadays the block subsidy is 6.25 bitcoins, and in 2024 it will be cut to 3.125 bitcoins.
&lt;/p&gt;
&lt;p&gt;
  &lt;strong&gt;So, how many bitcoins will ever be generated?&lt;/strong&gt;&lt;br /&gt;
  Almost 21 millions.
&lt;/p&gt;
&lt;p&gt;
  &lt;strong&gt;That’s it? 21 millions?&lt;/strong&gt;&lt;br /&gt;
  Yes, 21 millions in round numbers, no more no less.
&lt;/p&gt;
&lt;p&gt;
  &lt;strong&gt;And why 21 million?&lt;/strong&gt;&lt;br /&gt;
  Nobody knows. Satoshi Nakamoto, the guy who invented this, decided it. It was easy to get any other number. If for instance he wanted to be 42 millions, all was needed was to start with a block subsidy of 100 bitcoins instead of 50. Or if he wanted it to be 16 millions, just halved the block subsidy every 160.000 blocks instead of 210.000. The truth is, nobody really knows.
&lt;/p&gt;
&lt;p&gt;
  &lt;strong&gt;Can’t we ask him?&lt;/strong&gt;&lt;br /&gt;
  Nopes. He disappeared shortly after announcing Bitcoin.
&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Analysis of Bitcoin Cash double spends</title>
      <link>https://joaobordalo.com/articles/2018/08/23/analysis-of-bitcoin-cash-double-spends.html</link>
      <guid isPermaLink="true">https://joaobordalo.com/articles/2018/08/23/analysis-of-bitcoin-cash-double-spends.html</guid>
      <pubDate>Thu, 23 Aug 2018 10:42:53 +0000</pubDate>
      <description>&lt;p&gt;
  &lt;strong&gt;Bitcoin Cash double spends&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
  Double spend is when a set of coins is spent in more than one transaction.
  This can happen for various reasons, but one of the reasons is fraud attempts.
&lt;/p&gt;
&lt;p&gt;
  Bitcoin Cash accepts 0-conf payments, which I consider insecure by default.
  But I would like to have some data to support this, so I went looking.
&lt;/p&gt;

&lt;!--more--&gt;
&lt;p&gt;Since someone developed a website for detecting double spends on the Bitcoin Cash network,
I decided to scrape it and get some numbers from it. The site in question is:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://doublespend.cash/&quot;&gt;https://doublespend.cash/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Numbers&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Date of first transaction, 2018-02-13 11:34:44 +0000&lt;/li&gt;
  &lt;li&gt;Date of last transaction, 2018-08-22 06:31:53 +0100&lt;/li&gt;
  &lt;li&gt;Period, 189 days &lt;/li&gt;
  &lt;li&gt;Number of attempts, 387&lt;/li&gt;
  &lt;li&gt;Successful double spends, 109 (28%)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Files&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Feel free to clone the &lt;a href=&quot;https://github.com/bordalix/scrape_doublespend_cash&quot;&gt;GitHub repo&lt;/a&gt; and use it at your own will.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;a href=&quot;https://github.com/bordalix/scrape_doublespend_cash/blob/master/scrape.rb&quot;&gt;scrape.rb&lt;/a&gt;,
    a ruby script, scrapes the website and writes to a json file
  &lt;/li&gt;
  &lt;li&gt;
    &lt;a href=&quot;https://github.com/bordalix/scrape_doublespend_cash/blob/master/output.json&quot;&gt;output.json,&lt;/a&gt;
    file with all transactions in JSON format
  &lt;/li&gt;
  &lt;li&gt;
    &lt;a href=&quot;https://github.com/bordalix/scrape_doublespend_cash/blob/master/stats.rb&quot;&gt;stats.rb&lt;/a&gt;,
    parses the output.json file and delivers some stats
  &lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>Nintendo Switch, meet cardboard</title>
      <link>https://joaobordalo.com/articles/2018/01/19/nintendo_switch_meet_cardboard.html</link>
      <guid isPermaLink="true">https://joaobordalo.com/articles/2018/01/19/nintendo_switch_meet_cardboard.html</guid>
      <pubDate>Fri, 19 Jan 2018 10:55:04 +0000</pubDate>
      <description>&lt;p&gt;
  What a &lt;a href=&quot;https://labo.nintendo.com/&quot;&gt;clever idea&lt;/a&gt;. The possibilites are endless. Well played Nintendo.
&lt;/p&gt;
&lt;div class=&quot;placeholder&quot;&gt;
  &lt;iframe title=&quot;Nintendo Switch, meet cardboard&quot; width=&quot;480&quot; height=&quot;300&quot; data-src=&quot;https://www.youtube.com/embed/P3Bd3HUMkyU&quot; frameborder=&quot;0&quot; allow=&quot;autoplay; encrypted-media&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;
</description>
    </item>
    
    <item>
      <title>Buy men&apos;s underwear and help an athlete</title>
      <link>https://joaobordalo.com/articles/2017/10/02/buy_men_s_underwear_and_help_an_athlete.html</link>
      <guid isPermaLink="true">https://joaobordalo.com/articles/2017/10/02/buy_men_s_underwear_and_help_an_athlete.html</guid>
      <pubDate>Mon, 02 Oct 2017 10:44:09 +0000</pubDate>
      <description>&lt;p&gt;Today I&apos;m proud to announce &lt;a href=&quot;http://hatitude.pt&quot;&gt;http://hatitude.pt&lt;/a&gt;, the place where you help an athlete every time you buy men&apos;s underwear. The idea was presented to me by &lt;a href=&quot;http://hatitude.pt/athlete/hagah&quot;&gt;Hugo&lt;/a&gt;. I loved it, and so I decided to help him by developing the website.&lt;/p&gt;

&lt;!--more--&gt;
&lt;p&gt;&lt;strong&gt;The problem&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As you might know, only a couple of sports - like football - have financial help and support. There are thousands of amateur (and courageous) athletes out there, who have to work, train, go to competitions, sleep, and find some time to have some sort of a personal life. And the day only has 24 hours.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The solution&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Each time you buy men&apos;s underwear at &lt;a href=&quot;http://hatitude.pt&quot;&gt;http://hatitude.pt&lt;/a&gt;, the first thing you do is to choose the athlete you want to help. You can search athletes by name, region or sport. After choosing your athlete, of everything you buy, 25% of the value will be delivered to him. This way you not only get your underwear (made in Portugal, high quality stuff) but you have also helped an athlete.&lt;/p&gt;

&lt;p&gt;If you&apos;re an amateur athlete, you can now sign-in at &lt;a href=&quot;http://hatitude.pt/sponsorship&quot;&gt;http://hatitude.pt&lt;/a&gt; and request to be added to the list of athletes. Hugo will guide you through the necessary steps, and have you added to the system. Afterwards, you&apos;ll get your unique URL, and you just have to pass it through your family and friends.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Portugal&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Currently, the website is focused on Portugal and Portuguese athletes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Shameless plug&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I developed all the design, code, hosting and integration with the payment service providers (Credit Card, Paypal and Multibanco). If you have an idea and want to create something, talk to me.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>License to steal</title>
      <link>https://joaobordalo.com/articles/2017/04/05/license_to_steal.html</link>
      <guid isPermaLink="true">https://joaobordalo.com/articles/2017/04/05/license_to_steal.html</guid>
      <pubDate>Wed, 05 Apr 2017 10:36:34 +0000</pubDate>
      <description>&lt;p&gt;Every now and then people ask me for iOS versions of my mobile apps.&lt;/p&gt;

&lt;p&gt;I don&apos;t build them, due to the following text in the &lt;a href=&quot;https://developer.apple.com/programs/terms/apple_developer_agreement.pdf&quot;&gt;Apple Developer Agreement&lt;/a&gt;:&lt;/p&gt;

&lt;!--more--&gt;

&lt;blockquote&gt;
11. Apple Independent Development. Nothing in this Agreement will impair Apple’s right to
develop, acquire, license, market, promote or distribute products, software or technologies that
perform the same or similar functions as, or otherwise compete with, any other products, software
or technologies that you may develop, produce, market, or distribute. In the absence of a separate
written agreement to the contrary, Apple will be free to use any information, suggestions or
recommendations you provide to Apple pursuant to this Agreement for any purpose, subject to any
applicable patents or copyrights.
&lt;/blockquote&gt;

&lt;p&gt;In a nutshell, if you agree with the terms (and you have to if you want to publish something in the App Store), you are granting Apple a &lt;strong&gt;license to steal&lt;/strong&gt; your idea/app.&lt;/p&gt;

&lt;p&gt;Am I being paranoid? It already happened with &lt;a href=&quot;https://thehustle.co/apple-developers-steal&quot;&gt;Breathe and F.lux&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Android terms doesn&apos;t have this, so here you have it, this is why I don&apos;t publish my apps on the App Store.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Where to surf today</title>
      <link>https://joaobordalo.com/articles/2017/03/29/where_to_surf_today.html</link>
      <guid isPermaLink="true">https://joaobordalo.com/articles/2017/03/29/where_to_surf_today.html</guid>
      <pubDate>Wed, 29 Mar 2017 16:25:32 +0000</pubDate>
      <description>&lt;p&gt;&lt;strong&gt;The problem:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Imagine you are in Portugal, you want to go surfing, but you don&apos;t know where the best waves are.&lt;/p&gt;

&lt;p&gt;What do you do?&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;
  Well, you open your surf guide, see what surf spots are near enough, search for a beachcam on that spot,
  and after some thorough evaluation, you finally decide where to go. Now it&apos;s time to search for the spot
  on Google Maps, and get some directions.
&lt;/p&gt;

&lt;p&gt;Wouldn&apos;t be great if there was a simpler way of doing all this?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Well, there is.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That&apos;s why I made &lt;a href=&quot;https://wheretosurftoday.com/&quot;&gt;https://wheretosurftoday.com&lt;/a&gt; some time ago.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;wheretosurftoday.com homepage screenshot&quot; data-src=&quot;https://joaobordalo.com/images/static/blog/wtst_hp.png&quot; width=&quot;480&quot; style=&quot;border:1px solid #ddd&quot; /&gt;&lt;/p&gt;
&lt;p class=&quot;is-graphic-legend&quot;&gt;wheretosurftoday.com homepage&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;And how exactly it solves the problem?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After you give authorization to the website to access your location, you will get:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;133 surf spots covering all the portuguese coast, north to south;                       &lt;/li&gt;
  &lt;li&gt;Access to the beachcam link, if one exists;                                             &lt;/li&gt;
  &lt;li&gt;Specific information about the spot, useful to every surfer;                            &lt;/li&gt;
  &lt;li&gt;Direct links to Google Maps, with the exact coordinates;                                &lt;/li&gt;
  &lt;li&gt;Every spot has its own weather and swell forecast, in 3 hours slots;                    &lt;/li&gt;
  &lt;li&gt;Surf score taking into consideration the spot specifics and forecast;                   &lt;/li&gt;
  &lt;li&gt;Search based on geolocation (show only spots near enough);                              &lt;/li&gt;
  &lt;li&gt;Navigate using the built in map;                                                        &lt;/li&gt;
  &lt;li&gt;Hassle free, you don&apos;t need to sign up whatsoever, no ads;                              &lt;/li&gt;
  &lt;li&gt;Easier to type domain, &lt;a href=&quot;https://wtst.info&quot;&gt;https://wtst.info&lt;/a&gt;.               &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
  There is also an &lt;a href=&quot;https://play.google.com/store/apps/details?id=com.id1s3e5v51g2mink1kolsdq&quot;&gt;Android app&lt;/a&gt; available.
  The big advantage of using the mobile app is that geolocation is a lot more accurate (since it can use the device GPS).
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What&apos;s new?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Today is the launch of version 3.0, with adds the following features:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;A detailed forecast with score for the next 48 hours (every 3 hours); &lt;/li&gt;
  &lt;li&gt;More information: sunrise, sunset, air and sea temperatures;          &lt;/li&gt;
  &lt;li&gt;More beachcams - now with 54 spots (in 133) covered;                  &lt;/li&gt;
  &lt;li&gt;Easy navigation to previous and next spot;                            &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://joaobordalo.com/images/static/blog/forecast.jpg&quot; width=&quot;480&quot; style=&quot;border:1px solid #ddd&quot; /&gt;&lt;/p&gt;
&lt;p class=&quot;is-graphic-legend&quot;&gt;Detailed forecast&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://joaobordalo.com/images/static/blog/beachcam.jpg&quot; width=&quot;480&quot; style=&quot;border:1px solid #ddd&quot; /&gt;&lt;/p&gt;
&lt;p class=&quot;is-graphic-legend&quot;&gt;Beachcam and map pointers&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://joaobordalo.com/images/static/blog/nav.jpg&quot; width=&quot;480&quot; style=&quot;border:1px solid #ddd&quot; /&gt;&lt;/p&gt;
&lt;p class=&quot;is-graphic-legend&quot;&gt;Navigation to previous and next spot&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Best ELI5 Blockchain video</title>
      <link>https://joaobordalo.com/articles/2016/12/12/best_eli5_blockchain_video.html</link>
      <guid isPermaLink="true">https://joaobordalo.com/articles/2016/12/12/best_eli5_blockchain_video.html</guid>
      <pubDate>Mon, 12 Dec 2016 12:36:52 +0000</pubDate>
      <description>&lt;p&gt;I&apos;m following the Blockchain revolution for quite some time now. I even took a &lt;a href=&quot;https://piazza.com/princeton/spring2015/btctech/home&quot;&gt;Princeton online course&lt;/a&gt; in the Spring of 2015, which I highly recommend, if you want to understand how it works at a technical level.&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;Every time someone asks me to explain why am I so excited about it, I would like to have some quick easy way of explaining it, or maybe some link to point to.&lt;/p&gt;
&lt;p&gt;Today I&apos;ve found the best, Explain Like I&apos;m Five, Blockchain video, and I&apos;m putting it here for convenience. Watch it, it only takes 10 minutes:&lt;/p&gt;
&lt;iframe title=&quot;Best ELI5 Blockchain video&quot; width=&quot;480&quot; height=&quot;300&quot; data-src=&quot;https://www.youtube.com/embed/LdOcXXB48fI&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
</description>
    </item>
    
    <item>
      <title>Changing gears</title>
      <link>https://joaobordalo.com/articles/2016/05/11/changing_gears.html</link>
      <guid isPermaLink="true">https://joaobordalo.com/articles/2016/05/11/changing_gears.html</guid>
      <pubDate>Wed, 11 May 2016 13:54:53 +0000</pubDate>
      <description>&lt;p&gt;Almost 10 years ago, me and some friends created excentric, a digital marketing agency. It was a big adventure, with ups and downs, with some huge successes and some defeats. We were able to put together an amazing team of really talented people, who sticked together on the bad moments and were capable of partying like animals when the situation deserve it. Thank you guys, you are the best.&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;&lt;strong&gt;But my role on it is now over&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;excentric merged with Grey, a WPP agency, back in 2013 giving birth to &lt;a href=&quot;http://excentricgrey.com/&quot;&gt;excentricGrey&lt;/a&gt;, and for me it was fun to get back to the multinational world. But I missed the hands on, get your hands dirty, you know, being a doer instead of an enabler. &lt;/p&gt;
&lt;p&gt;excentricGrey is now fully owned by WPP, and since the first of January I&apos;m no longer part of the company.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Changing gears&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;My wife and I decided that I should stop for some time. Our third kid was on his way (borned in late February), so it was better for us if I could stick around to help. In the meantime, I started to poke around with some side projects that were in the drawer, learn new skills, and start building stuff.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;First of all, design the new resume&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I started working with the Internet in 1996. In 20 years, I made a lot of different things, had a lot of different roles and learned a lot of different technologies and skills. In summary, it&apos;s a mess, and is hard to fit it into one single bucket. So I tried to solve it by putting my entire IT career in &lt;a href=&quot;https://joaobordalo.com/images/static/blog/cv2016.png&quot;&gt;a graphic&lt;/a&gt;. It was a fun problem to crack, and as a bonus, I’ve learned a lot about vector images (the CV is fully scalable).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;My first (published) mobile app&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Every day I had to go the office, I had to go by a bridge, the 25 de Abril bridge (in Lisbon). And every day was a lottery, I didn&apos;t knew how traffic would be. It could take me 32 minutes to get to the office, or it could take me 2 hours. And the unknown is a big source of stress for me.&lt;/p&gt;
&lt;p&gt;The company who runs the highway that ends on the bridge have traffic cams, but the website interface was awful and cumbersome (there&apos;s a new website, but some of the original problems persist). So I decided to make a mobile app, for personal use, which would get the images from that website, present them in order, in one single page. And I use it every day for years.&lt;/p&gt;
&lt;p&gt;Some friends saw it, and those who got the same problem asked for a copy, so I sent the apk to some of them. Those who had iPhones had no luck, since I only made the Android version. And people start saying that I should publish the app. So I did. Since last week, &lt;a href=&quot;http://play.google.com/store/apps/details?id=com.id1tpnpcj1ylo4kbx4m88o&quot;&gt;25deAbril is available for install&lt;/a&gt; in Google Play, for free.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Surf and math&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Surfing is more than a sport, it can be a mystical experience. It&apos;s hard to master, but when you manage to get up and ride some waves, you feel like the king of the world. But surf is also hard because it depends - a lot - on the weather conditions. There are a lot of factors in play, in order for you to have good waves to surf, and I always got attracted by this complexity.&lt;/p&gt;
&lt;p&gt;After some study and experimentation, I started to be able to predict when and where the best waves would be. And my live as a surfer got a major upgrade. It&apos;s all about swell direction and swell size, crossed with the beach type of bottom, and beach orientation, multiplied by the wind speed and direction. Pretty simple, hum? Ok, if your name is Sheldon, I should warning you that I was being ironic.&lt;/p&gt;
&lt;p&gt;So I coded this type of algorithm and dress it with a website, properly named Where To Surf Today, where you can see the best beaches to surf today (and tomorrow), shown by location (after all, you are interested in the best surf near you, right?). For weeks I checked the algorithm results with real time conditions, and fine tuned until I got pretty satisfied. It only have beaches in Portugal (at least for now), and I&apos;ve just released &lt;a href=&quot;https://wheretosurftoday.com/&quot;&gt;version 2.0&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;One last thing&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Online betting is getting hot, a lot. You can bet on casinos, sports and even fantasy. You can bet with money, with credits, or be part of a fantasy league. Placard, the new betting game by the portuguese lottery is a huge success. New laws and operation licences are being drafted in Portugal, and in the summer there will be dozens of new players on the market. Did I say it&apos;s getting hot?&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://betli.ga/&quot;&gt;Betliga&lt;/a&gt; is a website I’m developing, which is now in pre-release mode, where you don’t bet (so kids can play it), you pick. There are football games (Portuguese League and Uefa Champions League for now), where you can have 3 picks: pick the winner, pick the number of goals scored, and pick if one, all or none of the teams score. For each pick you have 3 options, so it’s a very simple game.&lt;/p&gt;
&lt;p&gt;After a game is closed, and its result known, the odds for the game are calculated and each player earns points if he got it right. There are competitions based on the week classification, month and season, some badges, the hattricks ranking (when a player gets all 3 picks right), and classifications for people with more opinions, likes and reach. Yes, being social is also prized here.&lt;/p&gt;
&lt;p&gt;Targeting beginners, there are a lot of contextual help across the site, explaining the principles of the game, and teaching some betting concepts (like, for instance, how odds are calculated). People don’t have to manage credits, or decide how much they want to bet in a game. They just pick.&lt;/p&gt;
&lt;p&gt;People can gather in groups, and create private leagues, where the classifications (and other scores) are calculated considering only the members of the group. This is great for groups of friends and family to finally know who knows best about football. &lt;/p&gt;
&lt;p&gt;The regular season is ending, there are 2 more fixtures in the Portuguese League, and a handful of games in the UCL, but you still can join and have some fun at &lt;a href=&quot;http://betli.ga/&quot;&gt;http://betli.ga&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Everything will be ready for the Euro, hope to see you there.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>3D painting</title>
      <link>https://joaobordalo.com/articles/2016/05/06/3D_painting.html</link>
      <guid isPermaLink="true">https://joaobordalo.com/articles/2016/05/06/3D_painting.html</guid>
      <pubDate>Fri, 06 May 2016 10:35:27 +0000</pubDate>
      <description>&lt;p&gt;While I still think VR has a long way to go, this new product from Google, &lt;a href=&quot;http://www.tiltbrush.com/&quot;&gt;Tilt Brush&lt;/a&gt;, got me thinking. As they state in their website, &lt;i&gt;Tilt Brush lets you paint in 3D space with virtual reality. 
Your room is your canvas. Your palette is your imagination. The possibilities are endless.&lt;/i&gt;.&lt;/p&gt;

&lt;p&gt;Hard to imagine it? Don&apos;t worry, there&apos;s a video:&lt;/p&gt;

&lt;iframe title=&quot;3D painting&quot; width=&quot;480&quot; height=&quot;300&quot; data-src=&quot;https://www.youtube.com/embed/TckqNdrdbgk&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
</description>
    </item>
    
    <item>
      <title>Is it a bird?</title>
      <link>https://joaobordalo.com/articles/2015/06/02/is-it-a-bird.html</link>
      <guid isPermaLink="true">https://joaobordalo.com/articles/2015/06/02/is-it-a-bird.html</guid>
      <pubDate>Tue, 02 Jun 2015 09:42:23 +0000</pubDate>
      <description>&lt;p&gt;
  Is it a plane? No, is Alexandru Duru, a Montrealer, flying 250 meters in a
  hoverboard, thus breaking the Guiness World Record for farthest flight in a
  hoverboard by fivefold. Could this be the future of personal traveling?
  Watch the video:
&lt;/p&gt;

&lt;iframe title=&quot;Is it a bird?&quot; width=&quot;480&quot; height=&quot;300&quot; src=&quot;https://www.youtube.com/embed/Bfa9HrieUyQ&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;&quot;&gt;
&lt;/iframe&gt;

</description>
    </item>
    
    <item>
      <title>Project Jacquard</title>
      <link>https://joaobordalo.com/articles/2015/05/29/project-jacquard.html</link>
      <guid isPermaLink="true">https://joaobordalo.com/articles/2015/05/29/project-jacquard.html</guid>
      <pubDate>Fri, 29 May 2015 14:09:50 +0000</pubDate>
      <description>&lt;p&gt;For the first time in many years, I posting twice in the same day. Another project announced at the &lt;a href=&quot;https://events.google.com/io2015/&quot;&gt;Google I/O&lt;/a&gt;, this time concerning fabrics, touch sensitive fabrics. The guys from ATAP are surely kicking ass:&lt;/p&gt;

&lt;iframe width=&quot;480&quot; height=&quot;300&quot; src=&quot;https://www.youtube.com/embed/qObSFfdfe7I&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
</description>
    </item>
    
    <item>
      <title>Welcome Soli</title>
      <link>https://joaobordalo.com/articles/2015/05/29/welcome-soli.html</link>
      <guid isPermaLink="true">https://joaobordalo.com/articles/2015/05/29/welcome-soli.html</guid>
      <pubDate>Fri, 29 May 2015 13:57:45 +0000</pubDate>
      <description>&lt;p&gt;Google just announced his Project Soli. In a nutshell, is a radar so small it can be integrated in a smart watch, works through materials, and is able to detect micro movements.  It&apos;s like the &lt;a href=&quot;https://www.leapmotion.com/&quot;&gt;Leap Motion&lt;/a&gt;, but in nano scale. The potencial here is huge. See the video:&lt;/p&gt;

&lt;iframe width=&quot;480&quot; height=&quot;300&quot; src=&quot;https://www.youtube.com/embed/0QNiZfSsPc0&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
</description>
    </item>
    
    <item>
      <title>Windows Holographic</title>
      <link>https://joaobordalo.com/articles/2015/01/21/windows-holographic.html</link>
      <guid isPermaLink="true">https://joaobordalo.com/articles/2015/01/21/windows-holographic.html</guid>
      <pubDate>Wed, 21 Jan 2015 13:40:15 +0000</pubDate>
      <description>&lt;p&gt;Holy shit! During the morning I found an &lt;a href=&quot;http://www.fastcodesign.com/3041174/48-crazy-ui-ideas-coming-from-the-500-million-stealth-startup-magic-leap&quot;&gt;article about patents from Magic Leap&lt;/a&gt;, and spent the rest of the day drooling. But 20 minutes ago, I got totally flabbergasted:&lt;/p&gt;

&lt;script height=&quot;370px&quot; width=&quot;480px&quot; src=&quot;http://player.ooyala.com/iframe.js#ec=U3MGJ3cjpKzhKMTesDPdJpOJx2i87n23&amp;amp;pbid=dcc84e41db014454b08662a766057e2b&quot;&gt;&lt;/script&gt;

&lt;p&gt;I so want to give you my money.&lt;/p&gt;
</description>
    </item>
    
  </channel>
</rss>