<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Francesco Sullo on Medium]]></title>
        <description><![CDATA[Stories by Francesco Sullo on Medium]]></description>
        <link>https://medium.com/@sullof?source=rss-3b671fb3c7a5------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*daxG1-jhFzyu2S1jvBhM3A.png</url>
            <title>Stories by Francesco Sullo on Medium</title>
            <link>https://medium.com/@sullof?source=rss-3b671fb3c7a5------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sat, 14 Nov 2026 07:25:26 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@sullof/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[Everdragons2: A New Chapter in the Dragon House]]></title>
            <link>https://medium.com/everdragons2/everdragons2-a-new-chapter-in-the-dragon-house-bda526ce1bdd?source=rss-3b671fb3c7a5------2</link>
            <guid isPermaLink="false">https://medium.com/p/bda526ce1bdd</guid>
            <category><![CDATA[blockchain-technology]]></category>
            <category><![CDATA[nft]]></category>
            <category><![CDATA[utility-tokens]]></category>
            <category><![CDATA[web3]]></category>
            <category><![CDATA[community]]></category>
            <dc:creator><![CDATA[Francesco Sullo]]></dc:creator>
            <pubDate>Mon, 10 Apr 2023 07:11:15 GMT</pubDate>
            <atom:updated>2023-04-10T07:11:15.674Z</atom:updated>
            <content:encoded><![CDATA[<blockquote>Honoring the past, embracing the future, and evolving the Everdragons2 experience</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*pWcJNjxIpeSNQTHEcGDQPg.png" /></figure><blockquote>The Everdragons2 project has evolved significantly over time, transitioning from its association with the original Everdragons project to the current V2 iteration. Our primary goal is to create utility-driven NFTs that offer value beyond collectibility or in-game utility. This article will introduce the key differences between the original Everdragons project, Everdragons2 V1, and Everdragons2 V2, the reasons behind these changes, and our vision for the future of Everdragons2.</blockquote><h3>The Evolution of Everdragons</h3><p>The original Everdragons project, launched in the summer of 2018 on Ethereum, was among the earliest NFT initiatives. We introduced the smart-contract platform on Tron on October 5th, and a few weeks later, the first NFT landed on Tron as an Everdragons. Sykori, the company behind the project, later built one of the first bridge technologies, allowing Everdragons to travel freely between Ethereum, POA Network, and Tron. It was an exciting time. However, the project eventually ran out of cash and went silent.</p><p>I always thought Everdragons was a fantastic project and tried to push the team to do something new. In the summer of 2021, we designed Everdragons2 with many new ideas and a new game, Origins. Unfortunately, the market slowed down that year and crashed in 2022. In the spring we minted the <a href="https://opensea.io/collection/everdragons2-genesis-token">Everdragons2 Genesis tokens</a>, but later people gradually departed from the project, and Everdragons V1 was nearly dying. I remained the only one who didn’t want to let it go.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*4xRXTzzppUNkttpmrUFn4g.png" /><figcaption>Arcobalen, an astounding un-minted dragon. Maybe it will be yours :-)</figcaption></figure><p>Just before giving up, I discovered some fantastic MidJourney-generated images by <a href="https://medium.com/everdragons2/andy-craven-a-gaming-industry-pioneer-embracing-the-decentralized-future-fc62e3284ff5">Andy Craven</a>, a very active member of the Everdragons2 community. After contacting him, we discussed AI and, eventually, dragons. I shared my ideas for a new kind of NFT, which he liked, and we started investigating the concept. We soon realized there was enough substance to create a new phase for Everdragons2. The Round Table then stepped in to help with organization, community, and marketing, leading us to where we are now.</p><h3>Introducing Everdragons2 V2</h3><p>The new Everdragons2 V2 project focuses on utility-driven NFTs, transcending mere collectibles or in-game utility. We focus on delivering innovative applications and tools that provide tangible benefits to token holders.</p><p>A new team has taken the helm of the project, bringing an abundance of experience and expertise to steer the development and expansion of Everdragons2. The unwavering support of our community is crucial to the project’s success, and we are profoundly grateful for your patience and understanding during this transition.</p><p>I am very excited about the future of Everdragons2 and look forward to sharing more updates and developments with our community! Thank you for your support, and let’s embark on this wonderful new journey together.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*5KwCJOeQN9bO41qP.png" /></figure><p><em>Notice that in the future we will no longer refer to Everdragons2 as V1 or V2 but simply as Everdragons2.</em></p><h4><strong>Please, 👏 and share this article to help spread the word 😃</strong></h4><p>🐦 Follow us on Twitter:<em> </em><a href="https://twitter.com/everdragons2">https://twitter.com/everdragons2</a><br>💬 Join our Discord:<em> </em><a href="https://discord.gg/ed2">https://discord.gg/ed2</a></p><p><em>Thank MidJourney for the illustrations and the TRT Team for reviewing a draft of this article.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=bda526ce1bdd" width="1" height="1" alt=""><hr><p><a href="https://medium.com/everdragons2/everdragons2-a-new-chapter-in-the-dragon-house-bda526ce1bdd">Everdragons2: A New Chapter in the Dragon House</a> was originally published in <a href="https://medium.com/everdragons2">Everdragons2</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Do not put your private keys in .env files in clear text. Use CryptoEnv!]]></title>
            <link>https://sullof.medium.com/do-not-put-your-private-keys-in-env-files-in-clear-text-use-cryptoenv-dc4c2988207?source=rss-3b671fb3c7a5------2</link>
            <guid isPermaLink="false">https://medium.com/p/dc4c2988207</guid>
            <category><![CDATA[blochchain]]></category>
            <category><![CDATA[development]]></category>
            <category><![CDATA[ethereum]]></category>
            <category><![CDATA[private-key]]></category>
            <category><![CDATA[security]]></category>
            <dc:creator><![CDATA[Francesco Sullo]]></dc:creator>
            <pubDate>Mon, 04 Jul 2022 17:42:09 GMT</pubDate>
            <atom:updated>2025-08-07T15:15:40.675Z</atom:updated>
            <content:encoded><![CDATA[<h3>Do not put your private keys in .env files in clear text. Use CryptoEnv!</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*P_QgQ6Vn-UoR6Zc-XTYCDw.png" /><figcaption>Generated by MidJourney</figcaption></figure><p>I work a lot with blockchain, and my favorite framework to manage smart contracts in Solidity is <a href="https://github.com/NomicFoundation/hardhat">Hardhat</a>. To deploy a smart contract to an EVM blockchain, people put their private key in a .env file. The file is git-ignored, of course; still, mistakes are behind the corner and the approach is very risky.</p><p>A few weekends ago, on a quiet Sunday, I got scared because I risked to share on GitHub a private key by mistake, because of a typo in .gitignore and, then, I decided to solve the problem once and for all.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ormlfJ5MuS9zDVt16VK7mA.png" /><figcaption>Generated by MidJourney</figcaption></figure><h3>That Sunday, I built two tools…</h3><p>Initially, I thought of a wrapper around Hardhat. A plugin would have been much better, but I hate Typescript and that’s it :-(</p><p>I called it <a href="https://github.com/secrez/cryptoenv/blob/main/github.com/secrez/hardhood">Hardhood</a> and it encrypts keys in a hidden folder inside the user’s home. However, Hardhat launches many processes and the captured shell output loses part of what is happening. I am sure I can fix it, but I wanted something that day. So, I took a break of a few hours, and when I went back to my laptop, I decided to embrace the way people does it — putting keys in .env — improving that process, encrypting those keys.</p><h4><a href="https://github.com/secrez/cryptoenv"><strong>CryptoEnv</strong></a><strong> is the result of that effort. Let’s see how to use it.</strong></h4><h4>In the shell</h4><p>To set up your encrypted variables, you must install CryptoEnv globally</p><pre>npm i -g cryptoenv</pre><p>Then, to create a new encrypted env variable for OWNER_KEY move in the folder where your app is, and run</p><pre>cryptoenv -n OWNER_KEY</pre><p>CryptoEnv will ask for</p><ol><li>the data to be encrypted</li><li>the password to encrypt it</li></ol><p>Then, it will save the encrypted private key in .env, creating the file if it does not exist.</p><p>In the case above, in your .env file you will have something like</p><pre>cryptoEnv_OWNER_KEY=vnJSFJ5E4ZHT1hd8tmMduc1HbQqmkXE/dReUmjHFvud5DsquU6VrOZ+1K3wFj2wYIc8KaClbZWlAtG5HuE2QfE1hx3snHBpz0sqkhfM2v8gTTR77RnLZ23GcKYTGa2G5frcuECngSpE=</pre><h4>In your node app</h4><p>Install it as usual</p><pre>npm i -D cryptoenv</pre><p>Let’s do the case of Hardhat.</p><p>You have a conf file called hardhat.config.js. At the beginning of that file you can read the environmental variables with, for example, <a href="https://github.com/motdotla/dotenv">Dotenv</a> and require CryptoEnv, like</p><pre>require(&quot;dotenv&quot;).config();<br>require(&quot;cryptoenv&quot;).parse();</pre><p>Later in the file, when you configure Hardhat to use your private keys, you can have something like</p><pre>...<br>    ropsten: {<br>      url: `https://ropsten.infura.io/v3/${process.env.INFURA_API_KEY}`,<br>      accounts: [<br>        process.env.OWNER_KEY<br>      ],<br>      chainId: 3<br>    },<br>    ...</pre><p>Then, when you run, for example, a script to deploy to Ropsten, Hardhat will show the prompt:</p><pre>CryptoEnv &gt; Type your password to decrypt the env, or press enter to skip it</pre><p>Note: To avoid that Hardhat gives you an error when you skip the decryption, you can set up a variable OWNER_KEY in the .env file, with a fake key. When you input the password, CryptoEnv will overwrite the variable.</p><h4>What if the app tries to decrypt more than one time?</h4><p>Some apps launch child processes. If they run more than one, the environment does not look decrypted and CryptoEnv makes a new request.</p><p>For example, when you run a script with Hardhat, it often runs a first process to compile the smart contracts, then runs a second process to execute the script. In that case, you can press enter at the first request, and input the password only at the second.</p><h4>Filtering for multiple apps</h4><p>Sometimes you have in a repo multiple apps and it is possible that you do not want to share data with them. You can filter your variables using RegExp like here:</p><pre>require(&quot;cryptoenv&quot;).parse(/^hardhat/);</pre><p>and take only the variables that start with “hardhat”. You can also pass a function that returns a boolean</p><pre>const words = [&quot;home&quot;, &quot;office&quot;, &quot;street&quot;];<br>require(&quot;cryptoenv&quot;).parse((e) =&gt; words.includes(e));</pre><p>You can also use a function for more general cases.<br>For example, if you want to skip the decryption when testing the contracts with Hardhat, you could require it as:</p><pre>require(&quot;cryptoenv&quot;).parse(() =&gt; {<br>  return NODE_ENV !== &quot;test&quot;;<br>});</pre><p><em>(notice that Hardhat does not set the NODE_ENV variable during tests)</em></p><h3>Security</h3><p>CryptoEnv uses the package <strong>@secrez/crypto</strong> from Secrez <a href="https://github.com/secrez/secrez">https://github.com/secrez/secrez</a></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*jEdQXH67DnC7tKlqA0aCxw.png" /><figcaption>Generated by MidJourney</figcaption></figure><h3>What’s next?</h3><p>There are many ways to improve CryptoEnv.<br>Here a few ideas:</p><ul><li>Support Hardhood’s approach with a global conf file instead of a local .env for better security and to avoid involuntary shares.</li><li>Encrypt keys with different passwords (useful, for example, if the .env file is shared with a team). The easiest way to do it is to ignore wrong decryptions (instead of throwing an error).</li><li>Make plugins for Dotenv, Hardhat, Truffle, etc. to simplify the usage. But I leave this to the community :-)</li><li>Support an explicit destination file instead of forcing an .env. For example, the target could beenv.json. In this case, CryptoEnv should save the data respecting the JSON format.</li></ul><p>Probably, I will also add an <em>env</em> command in Secrez to export encrypted keys directly from it (which would add more security).</p><h4><strong>CryptoEnv is open source. Feel free to fork it.</strong></h4><p><strong>If you like this post, please 👏 and share it!</strong></p><h4>UPDATE April 2023</h4><p><em>The package has been moved from</em> cryptoenv to @secrez/cryptoenv <em>and many features have been added since this post has been written. Look at the </em><a href="https://github.com/secrez/cryptoenv#history"><em>History section in the README</em></a><em> for more details.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=dc4c2988207" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[EverDragons2: Fair Token Distribution]]></title>
            <link>https://medium.com/everdragons2/everdragons2-fair-tokens-distribution-9c6f77c748f6?source=rss-3b671fb3c7a5------2</link>
            <guid isPermaLink="false">https://medium.com/p/9c6f77c748f6</guid>
            <category><![CDATA[nft]]></category>
            <category><![CDATA[gaming]]></category>
            <category><![CDATA[crypto]]></category>
            <category><![CDATA[blockchain]]></category>
            <category><![CDATA[metaverse]]></category>
            <dc:creator><![CDATA[Francesco Sullo]]></dc:creator>
            <pubDate>Wed, 24 Nov 2021 23:38:18 GMT</pubDate>
            <atom:updated>2021-12-15T02:03:33.240Z</atom:updated>
            <content:encoded><![CDATA[<h3>Everdragons2: Fair Token Distribution</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*BD5wLCIX29_oC0dHxt36Hw.png" /></figure><p>When the original Everdragons started their adventure, users were minting eggs. Any dragon could have a unique DNA composed of seven body parts plus color. Users had to wait for the egg to hatch in order to see which dragon they had purchased. In other words, the sale was blind like most non-fungible token (NFT) drops nowadays.</p><p>Everdragons2 will use the same flow.</p><h4>Problems of a Blind Sale</h4><blockquote>We can cheat and distribute them unfairly if we know which dragons are the rarest (and potentially most valuable).</blockquote><p><strong>The solution is cryptography — of course 😃</strong></p><p>People are OK with not knowing which dragon they will have, but they want to know the dragons on the table. We will showcase an ordered list of dragons, describing their rarity to the community before the sale, to address that desire. Later, we will shuffle the list to get the final order with a semi-random approach.</p><p>Let us explain it in detail, step by step:</p><ul><li>Hash all the dragons’ images.</li><li>Create a list of metadata objects with the usual fields plus DNA, a list of traits, and the hash of the image.</li><li>Validate the list using <a href="https://opentimestamp.org/">OpenTimestamp.org</a> (which works on Bitcoin and is bulletproof).</li><li>Wait for the sale to end and take the hash of the block containing the latest transaction that bought dragon(s).</li><li>Take the list and hash any element of the list with:</li></ul><pre>hash(element, blockHash)</pre><ul><li>Sort the new list of hashes.</li><li>Use the order of the list of hashes to reorder the original list.</li><li>Assign metadata and image to every dragon, according to the semi-randomly ordered list.</li></ul><blockquote>In simpler words…we get a list of all dragons, write it on a rock, and later shuffle the list using an unpredictable but provable factor.</blockquote><p><strong>The <em>Un-shuffled</em> Elements of the List</strong></p><p>Some dragons won’t take part in the shuffle because they are pre-minted including <a href="https://opensea.io/assets/0x3b6aad76254a79a9e256c8aed9187dea505aad52/10001">Agdaroth</a>, the team’s avatars (some nice common dragons, no rare ones 😉), and gifts to the community — four baby dragons, and a dozen of dragons with at least one rare trait. Since we will reveal them before the sale and some people will win those specific dragons, they will be pre-minted and stay out of the shuffle.</p><p><strong>The Final Verification</strong></p><p>We will create a GitHub repo with the metadata metafile, the proof by OpenTimestamp, the hash of the block with the latest transaction buying Everdragons2, and the code to generate the final list starting from the metafile.</p><p>We will use it to do the job; you will use it to verify that we did the job as promised 🤝</p><h4>ADDENDUM (Dec 11th)</h4><p>Here there is a tool I wrote for the shuffle:<br><a href="https://github.com/ndujaLabs/metadata-shuffler">https://github.com/ndujaLabs/metadata-shuffler</a></p><p><em>We will soon introduce our first initiative to reward early ED2 community members. Stay in touch on </em><a href="https://discord.gg/uvPbJZHrJb"><em>our Discord server</em></a><em>!</em></p><p><strong>If you like this post, please 👏 and share it!</strong></p><h3>Join Us</h3><p><a href="https://discord.gg/AzfFnUjrnG">Discord</a></p><p><a href="https://twitter.com/everdragons2">Twitter</a></p><p><a href="https://medium.com/ndujalabs">Medium</a></p><p><a href="https://everdragons2.com/">Website</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=9c6f77c748f6" width="1" height="1" alt=""><hr><p><a href="https://medium.com/everdragons2/everdragons2-fair-tokens-distribution-9c6f77c748f6">EverDragons2: Fair Token Distribution</a> was originally published in <a href="https://medium.com/everdragons2">Everdragons2</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Welcome to EverDragons2]]></title>
            <link>https://medium.com/everdragons2/welcome-the-everdragons2-492055b4ac31?source=rss-3b671fb3c7a5------2</link>
            <guid isPermaLink="false">https://medium.com/p/492055b4ac31</guid>
            <category><![CDATA[games]]></category>
            <category><![CDATA[everdragons]]></category>
            <category><![CDATA[nft]]></category>
            <category><![CDATA[crypto]]></category>
            <category><![CDATA[collectibles]]></category>
            <dc:creator><![CDATA[Francesco Sullo]]></dc:creator>
            <pubDate>Sun, 03 Oct 2021 17:37:31 GMT</pubDate>
            <atom:updated>2021-11-29T02:39:45.572Z</atom:updated>
            <content:encoded><![CDATA[<h3>Welcome to Everdragons2</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*uhZxmXjxbANKerWKAX_KEw.png" /></figure><p><a href="https://everdragons2.com/">Everdragons2</a> is a collection of 10,001 non-fungible token (NFT) assets — some rarer than others. Each NFT is created in the form of a mystery egg, which you can hatch in order to get your dragon. In this post, you will learn the story of how I got involved in this NFT project and why it is so exciting!</p><h3>(Technical) Background Story</h3><p>First of all, sorry for all the jargon and tech names! They are necessary to keep this article short.</p><p>In September of 2018, I joined <a href="https://tron.network/">Tron Foundation</a> to work on their developer tools. The plan was to release the smart contract platform in early October. Tools like <a href="https://web3.foundation/">Web3</a>, <a href="https://www.trufflesuite.com/truffle">Truffle</a>, and <a href="https://www.trufflesuite.com/ganache">Ganache</a> were needed. It was hard for me to start because I worked remotely from Italy and knew very little about Tron. Still, I forked Truffle and created <a href="https://github.com/tronprotocol/tronbox">Tronbox</a>. I also collaborated with <a href="https://github.com/Kondax">Kondax</a> to build <a href="https://www.npmjs.com/package/tronweb">Tronweb</a>.</p><p><a href="https://www.trongrid.io/">Trongrid</a> was not reliable at that time so using <a href="https://www.trongrid.io/shasta/">Shasta</a> (Tron TestNet) was not ideal. Therefore, I set up <a href="https://github.com/TRON-US/docker-tron-quickstart">Tron-Quickstart</a>, a developer environment based on <a href="https://docs.docker.com/">Docker</a> to allow developers to test their apps locally without spending money on the blockchain. I moved back to San Francisco on October 2. On October 5, we launched the smart contract platform as planned.</p><p>Later, in the middle of December, I realized that Trongrid needed a complete rewrite and therefore wrote <a href="https://trongrid.io/">Trongrid 2</a>. My intention was to provide a fast and highly scalable service, similar to <a href="https://infura.io/">Infura</a>. My team presented it in time for <a href="https://www.nitron.org/">niTROn</a> 2019, the first Tron summit in San Francisco.</p><p>I remember these months with warm feelings. Everything was new, exciting, and challenging.</p><p>Then I met Patrick and Jacqueline — cofounders of Everdragons.</p><h3>Everdragons: One of the Earliest NFT Projects</h3><p>For the niTROn conference, our marketing team launched a contest to reward the best decentralized applications (dApps) built on Tron. My favorite finalist was Everdragons so I approached <a href="https://www.linkedin.com/in/patrick-rieger-496120160/">Patrick Rieger</a> and <a href="https://www.linkedin.com/in/jacqueline-hardy-4617a016a/">Jacqueline Hardy</a>, two of the three founders. I brought them to Tron’s offices where we had lunch and talked a lot. The same day, I met other great people from around the world.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*7N0C05O9p8QkpK6K.png" /></figure><p>Patrick, Jacqueline, and Marc Scherer launched their non-fungible token (NFT) platform on Ethereum in the summer of 2018, creating a bridge to move dragons from Ethereum to <a href="https://www.poa.network/">POA Network</a> and back. Later that year, they deployed the first NFT ever on Tron and added Tron to their bridge.</p><p>It was magical that people could move dragons among Ethereum, POA Network, and Tron to play games that make sense only on these specific networks.</p><p>You may not know that Tron uses a Delegated Proof-of-Work consensus mechanism to validate the veracity of the network. The primary advantage of this is, every three seconds, a new block is mined. To be 100% positive that a transaction is safe, you have to wait one minute. Generally, developers would trust the first confirmation due to low risk. They would move minimal amounts of coins, supporting compelling games on blockchain technology, creating fantastic things as a result.</p><p>Sadly, I believe a different approach to the community would have made Tron one of the most important chains out there. Instead, Tron preferred to reward games that winked to a popular audience instead of celebrating technologies that many others could have used. As you can guess, I did not have a voice in high level decisions, but that is another story.</p><p>In the end, the Everdragons team did not receive the award they deserved.</p><h3>Everdragons2: The Following Years</h3><p>This period of time, called Crypto Winter, was very dark. The Everdragons team could not raise funding to survive and their marvelous project started dying slowly.</p><p>I stayed in touch and tried to help, but I could not do much. I tried to buy as many dragons as I could on <a href="https://opensea.io/collection/everdragons">OpenSea</a> to attract attention to the project. It somehow worked because the floor passed from 0.07 ETH to 0.5 ETH, and a few dragons sold for 1 ETH. It made me happy but it was not enough.</p><p>Recently, I developed an idea to relaunch the project and tried to engage friends. I spoke with them for weeks and checked in with Patrick many times to convince him that Everdragons 2 can come to life.</p><p>Finally, a group of Italian friends between San Francisco and Menlo Park decided to invest time and money to work on it. Although I have been working on a new decentralized finance (DeFi) technology since July, I could not resist and happily joined the team 😅</p><p>The result is <a href="https://everdragons2.com/"><strong>Everdragons2</strong></a>, the first decentralized project by <a href="https://ndujalabs.com/"><strong>‘ndujaLabs</strong></a>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/500/0*EdJ7a5zcF8Cg9IED.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*e-l-h7il_W3zDsfEoi9o5w.png" /></figure><p>In a future post, I will give details about the project and introduce our first initiative to award the <a href="https://discord.gg/uvPbJZHrJb">early ED2 community on Discord</a>. Stay in touch!</p><p><strong>If you like this post, please 👏 and share it!</strong></p><p><em>PS: In the banner picture up top, some of the beautiful original Everdragons in my personal collection.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=492055b4ac31" width="1" height="1" alt=""><hr><p><a href="https://medium.com/everdragons2/welcome-the-everdragons2-492055b4ac31">Welcome to EverDragons2</a> was originally published in <a href="https://medium.com/everdragons2">Everdragons2</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Send encrypted messages via Secrez]]></title>
            <link>https://sullof.medium.com/send-encrypted-messages-via-secrez-a8321b561af3?source=rss-3b671fb3c7a5------2</link>
            <guid isPermaLink="false">https://medium.com/p/a8321b561af3</guid>
            <category><![CDATA[password-management]]></category>
            <category><![CDATA[security]]></category>
            <category><![CDATA[chat]]></category>
            <category><![CDATA[encryption]]></category>
            <category><![CDATA[secrets]]></category>
            <dc:creator><![CDATA[Francesco Sullo]]></dc:creator>
            <pubDate>Thu, 06 Aug 2020 01:47:42 GMT</pubDate>
            <atom:updated>2021-01-23T04:14:48.540Z</atom:updated>
            <content:encoded><![CDATA[<p><em>Secrez 0.8.0 introduces the ability to exchange end-to-end, encrypted messages between local accounts, using a remote hub for SSL tunneling.</em></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*31GD_wtMcPoVvUnw.jpg" /></figure><blockquote>If you don’t know what Secrez is, please read my previous post:<br><a href="https://medium.com/@sullof/secrez-a-secrets-manager-in-time-of-cryptocurrencies-b15120c5aa14">https://medium.com/@sullof/secrez-a-secrets-manager-in-time-of-cryptocurrencies-b15120c5aa14</a></blockquote><h3>How it works</h3><p>Supposing that you are using Secrez locally, the communication between accounts is possible thanks to two external components: a <em>courier</em> and a <em>hub</em>.</p><p>The courier must run on your machine. It works as a post office, sending and receiving <em>letters</em> — ignoring the content.</p><p>The hub must be accessible from anywhere. It is used by couriers to publish themselves and talk to other couriers. The hub does only one thing: generate SSL tunnels towards the couriers (by default, they use <a href="https://secrez.cc/">https://secrez.cc</a>).</p><p>Any message moving around is composed of a payload and a signature. Hub and courier verify the signature and accept or reject the message, only the Secrez account can generate the payload with the encrypted message, and decrypt others’ messages.</p><p>The algorithm used for the exchange is <em>x25519-xsalsa20-poly1305</em> — more info at <a href="https://github.com/dchest/tweetnacl-js/blob/master/README.md#public-key-authenticated-encryption-box">https://github.com/dchest/tweetnacl-js/blob/master/README.md#public-key-authenticated-encryption-box</a>.</p><h3>The flow</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*llvmyMz77eTby4qc.png" /></figure><h3>How to chat</h3><p>If you haven’t yet, update Secrez to a version &gt;= 0.8.0:</p><pre>$ npm i -g secrez@latest</pre><p>Install the Courier:</p><pre>$ npm i -g @secrez/courier</pre><p>Run the courier</p><pre>$ secrez-courier</pre><p>If you don’t specify the hub you like to use, it will use the default hub on secrez.cc.<br>If there are no issues, it will show something like:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*ZKTdk05cARp6Fj6k.png" /></figure><p>In Secrez, execute courier. It will ask you the port where the courier is listening to. If the courier is listening, Secrez connects to the courier and take ownership of it. Now, you are ready to chat with someone. First, look at your own data running whoami. It will show your public key and, most relevantly, your url on the hub that you must pass to your friend.</p><p>The method used in Secrez is experimental and is far from perfect. So, sometimes the connection to the hub gets lost — some other time you have to update the contact (using contacts -u …). I am working on it. However, in most cases, just repeat the process and the courier will reset the connection.</p><h3>A quick video</h3><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FciMl_Zhxjcs%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DciMl_Zhxjcs&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FciMl_Zhxjcs%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/b2e660b83f52f30f0684640b65bfc2e3/href">https://medium.com/media/b2e660b83f52f30f0684640b65bfc2e3/href</a></iframe><h3>Your own hub</h3><p>I have set up a hub on secrez.cc to simplify people’s life. But in many case, it would be better if you use your own hub. For example, a company could set up the hub that its employees will use.</p><p>The simplest way to go is to install the Secrez Hub on a remote server:</p><pre>npm i -g @secrez/hub</pre><p>and run it:</p><pre>secrez-hub</pre><p>If you don’t specify otherwise, it will start listening on port 8433.</p><p>A more reliable way is to use a process manager. If you clone the Secrez monorepo. You can run the script in the folder packages/hub/bin/pm2. It will use <a href="https://pm2.keymetrics.io/">Pm2</a> and will keep the hub up.</p><p>Despite your preference, you should use a proxy, like Nginx, to expose it to HTTPS. You can generate free certificates using Let’s Encrypt.</p><p>Since the hub generates subdomains for any courier, it is essential that you set up the DNS for the domain to handle *.yourdomain.ltd. Also, the firewall must allow access at ports higher than 32k on TCP.</p><h3>Feedback, requests, suggestions</h3><p>If you have suggestions, requests, etc. please open an issue at:<br><a href="https://github.com/secrez/secrez/issues">https://github.com/secrez/secrez/issues</a></p><p>You can also join the Discord group. It is very silent, right now, but hopefully, sooner or later, it will become active:<br><a href="https://discord.gg/2A3nSA">https://discord.gg/2A3nSA</a></p><h3>🙏 Acknowledgments</h3><p><em>Secrez Hub</em> is based on <a href="https://github.com/localtunnel/server"><em>Localtunnel Server</em></a>, which has been created by Roman Shtylman (<a href="https://medium.com/u/8b1c05bc9ba5">zombie</a>). I forked it and added some restrictions to make it suitable for Secrez (and only for it). I want to publicly thank Roman to allow the world to use his brilliant code.</p><p><strong>If you like this post, please 👏 and share it!</strong></p><p><em>This post has been also published at </em><a href="https://room29.art/secrez-for-messaging/"><em>https://room29.art/secrez-for-messaging/</em></a><em>.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=a8321b561af3" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Secrez — a secrets manager in time of cryptocurrencies]]></title>
            <link>https://sullof.medium.com/secrez-a-secrets-manager-in-time-of-cryptocurrencies-b15120c5aa14?source=rss-3b671fb3c7a5------2</link>
            <guid isPermaLink="false">https://medium.com/p/b15120c5aa14</guid>
            <category><![CDATA[secrets]]></category>
            <category><![CDATA[cryptography]]></category>
            <category><![CDATA[nodejs]]></category>
            <category><![CDATA[password-management]]></category>
            <category><![CDATA[2fa]]></category>
            <dc:creator><![CDATA[Francesco Sullo]]></dc:creator>
            <pubDate>Fri, 26 Jun 2020 17:28:40 GMT</pubDate>
            <atom:updated>2022-11-18T03:25:49.030Z</atom:updated>
            <content:encoded><![CDATA[<h3>Secrez — a secrets manager in time of cryptocurrencies</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*fAWAOkALUE3R6p9fe9pG_A.png" /></figure><blockquote>Secrez is a CLI secret manager written in Node, which manages an encrypted file system and speeds up operations that are slow, or impossible, with traditional password managers.</blockquote><p>I built Secrez during the quarantine, those days when I was not feeling inspired enough to either write my novel or work on some music. But I had the initial idea in 2017, and I wrote a first, rudimental version then. Let me tell you why and how.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*EVv9UsI672ymIa2zaPaXRw.jpeg" /><figcaption>A view of Alcatraz and the Golden Gate Bridge from a sailing boat. If you look only at the lower half of the picture, you could not be sure about it. It reminds me of encryption, and I would hazard to affirm that that is an encrypted ocean 🤪</figcaption></figure><p>In 2017 I was very active in the cryptocurrency world. As a consequence, I had tons of private keys, passwords, and mnemonic seeds. At that time, I was using a modified version of Passpack desktop, which was inadequate to manage this kind of data, like any other standard password manager.</p><p>If you use, for example, <a href="https://www.myetherwallet.com/">MyEtherWallet</a> to create a new <a href="https://ethereum.org/">Ethereum</a> wallet, before using it, it is imperative to back up the private key.</p><p>I am not using it now, and I don’t know if anything has changed, but in 2017 MyEtherWallet allowed you to export a Keystore/JSON file containing the private key. Since it was encrypted, you could have saved it as is, but for privacy reasons you would put it in your password manager anyway.</p><p>Assuming that you created a new entry in your password manager, to add the Keystore/JSON file, you had to:</p><ol><li><em>download the file</em></li><li><em>open it with an editor</em></li><li><em>copy the content</em></li><li><em>paste it in the notes</em></li><li><em>open the ~/Downloads folder</em></li><li><em>delete the file</em></li></ol><p>To restore an account, you had to:</p><ol><li><em>copy the JSON from the notes</em></li><li><em>open a folder</em></li><li><em>create a temporary file</em></li><li><em>paste the JSON in the new file</em></li><li><em>save the file as &lt;something&gt;.json</em></li><li><em>import it in MyEtherWallet</em></li><li><em>delete the temporary file</em></li></ol><p>It doesn’t look very smart, does it?</p><h3>A secrets manager for geeks?</h3><p>Maybe. Let me talk a bit about the design choices.</p><h4>The first design choice was about the type of app</h4><p>Secrez was initially just for me. Since I love command-line tools, it was natural to go for a CLI application. As a consequence, it made sense to use commands that resemble Unix commands. For example, to list all the secrets in the current folder, you can run</p><pre>ls</pre><p>You will see an output identical to the one returned by <em>ls </em>in a Unix environment. To create a new file with a single line content, you can run</p><pre>touch new-file -c &quot;Some secret content&quot;</pre><p>But you can also use your default text editor running:</p><pre>edit new-file -c</pre><p>where the -c is the alias for --create. In general, you can see all the options of a command running</p><pre>edit -h</pre><p>and all the commands running</p><pre>help</pre><p>Here a screenshot, with some examples:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*iqcbIQT1gBs7IQJM.png" /></figure><h4>The second design choice was the structure:</h4><p>an encrypted file system for the secrets, with the ability to move files between the standard OS and the encrypted OS. In the example above, I can import the Keystore/JSON file with a command like</p><pre>import ~/Downloads/mew-export-2020–06–22T20_10_15.789Z.json -m</pre><p>and export it with</p><pre>export mew-export-2020–06–22T20_10_15.789Z.json -d 30</pre><p>The first command would import the file, deleting the original one.<br>The second one would export the file, deleting it after 30 seconds.</p><p>One step instead of six or seven. Not bad 😉</p><h4>The third design choice was about the data</h4><p>There are two primary approaches to secret/password management:</p><ol><li>SaaS apps that save the data online (like LastPass)</li><li>Desktop tools who keep data in the computer (like <a href="https://keepass.info/">KeyPass</a>)</li></ol><p>An Online Password Manager requires that you trust the remote server. I founded Passpack in 2006, and I know very well how, at any moment, you can add a backdoor, and most likely, nobody will notice it. You can even set a backdoor for a specific user. If the FBI commands LastPass or 1Password to do it, they could be forced by law to do it.</p><p>You don’t believe so… Look at this:</p><p><a href="https://news.bitcoin.com/lawful-access-to-encrypted-data-act-backdoor/">US Senators Introduce &#39;Lawful Access to Encrypted Data Act&#39; - With Backdoor Mandate | News Bitcoin News</a></p><p>A desktop tool is intrinsically more secure, but it is hard to use on more than one computer. The standard solution is to back up the database on Dropbox or Google Drive. Still, before using it, you must download the backup locally. This approach is prone to produce unfixable problems and cause data loss.</p><p>Secrez’s goal was to be as safe as KeyPass but available everywhere, like Lastpass.</p><p>To obtain this goal, Secrez assembles a few strategies:</p><ul><li>Any secret is a local file</li><li>Any file is immutable</li><li>Any change can be pulled/pushed to a remote repository</li></ul><p>This way, you can distribute your data using Git and avoid conflicts because secret files are never modified. There are some exceptions, but they are related to rare actions (like adding a 2FA); in that case, you can be careful.</p><p>You can either create a private repo on GitHub, BitBucket, etc. or — much better — setting your own, self-hosted git server, as I do.</p><p><em>In the beginning I tried to use </em><a href="https://www.passwordstore.org/">pass</a><em> (which adopts a similar approach) but I hated its UX, and I uninstalled it after a few days of frustrations. If you like pass, you could give Secrez a try and let me know what do you think </em>🙃</p><p><em>Another choice to own your data, while having them available online, is to use </em><a href="https://bitwarden.com/"><em>Bitwarden</em></a><em>. It is open-source, and you can install your own server. Still, it does not solve the issues with managing files.</em></p><h4>The last one was about the algorithm</h4><p>After many tests and an extended analysis of the alternatives, I decided to use <a href="https://tweetnacl.js.org/#/">TweetNaCl</a> for the encryption because it manages symmetric and asymmetric encryption, and prepares a future where it will be possible to share data among users.</p><h3>The structure</h3><p>Secrez simulates a file system. The data is organized in datasets. Think of them as separate disks, similarly to /dev/disk1 and /dev/disk2.</p><p>By default, Secrez generates two datasets: main and trash, but you can create more. The advantage of multiple datasets is mostly for people who have a lot of secrets to manage. If you have 2,000 (like me) and you put them all in the primary dataset, the system will probably become quite slow. The solution is to move data to separate datasets.</p><h3>Never lose secrets</h3><p>One of the primary goals of a secrets manager is to never lose any data. However, since in Secrez, only the most recent tree is read, some secrets could be in the folder and not been loaded. If this happens, Secrez decrypts the missing secrets, reads their positions from previous trees, and puts them back in the tree. If they are not in an older tree, it creates special folders starting from REC_ and puts the recovered files in there.</p><h3>Make hard to perform brute-force attacks</h3><p>Secrez uses crypto.pbkdf2 to iterate the password you choose when you initialize the system and generate a derived key, which is used to encrypt a random master key.</p><p>The number of iterations is your choice, and it is significant because you keep it for yourself. On my Macbook, a million iterations require less than a second. But if I forget that number, it would require ~100 hours to recover my own account, despite that I know the password, because the number of iterations modifies the salt used during the derivation process.</p><p>Let’s say that you set it to 638,276. What if someone who ignores the number of iterations wants to discover your password? The hacker could</p><ol><li>choose a phrase from a dictionary</li><li>iterate the phrase between, let’s say, 1 and 1,000,000 times</li><li>repeat the process for any new phrase</li></ol><p>There are many ways to optimize this process, but, even if the hacker uses a high-speed computer that requires only 1 hour to verify the single word, testing 1000 words could take more than one month. If your choice is just a bit uncommon, discovering it could require years.</p><p>And, of course, if you had chosen 2,013,900 iterations, the attack above would be a full waste of time.</p><p>BTW, <strong>your password must be a good one</strong>. But you get the point.</p><p>To simplify our lives, Secrez can save the number of iterations locally, in a git-ignored file. This is acceptable because the primary goal was to block whoever gets access to the private repo where you back up the data. If you decide to set up a private repo on GitHub, how can you be sure that some employee does not clone it? With a secret iteration number, you can sleep like a baby.</p><h3>Getting started with Secrez</h3><p>Secrez is an open-source application built in <a href="https://nodejs.org/en/">Node</a>. You can install it with</p><pre>npm i -g secrez</pre><p>In the future, I plan to add binaries that you could install with <em>brew</em> or <em>apt-get</em>.</p><p>To run secrez, in the terminal, run</p><pre>secrez</pre><p>By default, Secrez puts the data in ~/.secrez. If you prefer to use a different folder, and save locally the number of the iterations, you can call something like</p><pre>secrez -sc ~/Documents/personal/secrez</pre><h3>Importing from other secrets managers</h3><p>If you already use a password manager, you can import that data.</p><p>Suppose you have exported your password in a CSV file name export.csv like this:</p><pre>Path,Username,Email,Password,Website,Notes,Tags<br><a href="/service/mailto:twitter/nick1,nick1,nick1@example.com">twitter/nick1,nick1,nick1@example.com</a>,938eyehddu373,,,twitter<br><a href="/service/mailto:facebook/me,,fb@example.com">facebook/me,,fb@example.com</a>,926734YYY,,&quot;Some note&quot;,facebook <a href="/service/mailto:facebook/second,jerry,jerry@example.com">facebook/second,jerry,jerry@example.com</a>,s8s8s87e78ew,,,,facebook</pre><p>A field named <strong>path</strong> is mandatory because Secrez needs to know where to put the file. The path is supposed to be relative, allowing you to import it in your favorite folder. Let’s say you like to expand the imported data in the current folder (that you can check with pwd), and like to preserve the tags as actual tags, you could call</p><pre>import export.csv -e / -t</pre><p>If your password manager does not export in CSV format, you have to reformat your data. In the future, I hope that there will be scripts to pre-format the data to import them in Secrez.</p><h3>Two-factor Authentication</h3><p>Secrez uses external scripts in Python, based on Python-Fido2 by <a href="https://yubiko.com/">Yubiko</a>, to support 2FA. It&#39;s compatible with any Fido2 authenticator device implementing the hmac-secret extension.</p><p>To register my <em>Solo</em> — by <a href="https://solokeys.com/">Solokeys</a> — I can call:</p><pre>conf - fido2 -r solo</pre><p>When you activate the first fido2 key, Secrez asks if you also want to generate an emergency recovery code, which lets you to recover the account if all the registered keys are lost.</p><h3>Aliases — where the fun comes 🤪</h3><p>Suppose that you have a card for your bank and want to log into it. You could copy email and password to the clipboard to paste them in the browser. Suppose that you expect to be able in 4 seconds to move from the terminal to the browser, you could run the command:</p><pre>copy bank.yml -f email password -d 4 2</pre><p>This will copy the email field and give you 4 seconds to paste it in the browser. After it will emit a beep and you have 2 seconds to paste the password. It sounds quite useful, but <strong>it can be better.</strong></p><p>If you use that login often, you could like to create an alias for it with:</p><pre>alias b -c &quot;copy bank.yml -f email password -d 4 2</pre><p>Next time, you can just type</p><pre>b</pre><p>and press enter to execute that command. <br>It looks great, right? Well, it can be even better.</p><p>Let’s say that you are using a 2FA app (like Google Authenticator) to connect to a website, for example, GitHub. Suppose that you have a file github.yml with a field totp which is the secret that GitHub gave you when you activated the 2FA. You could execute</p><pre>totp github.yml</pre><p>to generate a TOTP token for GitHub. The token will be shown and copied in the clipboard. Now, you can create an alias like this</p><pre>alias G -c &quot;copy github.yml -f username password -d 4 2 --wait &amp;&amp; totp github.yml&quot;</pre><p>Can you guess what this will do?</p><ul><li>It copies the username in the clipboard;</li><li>it waits 5 seconds, emits a beep and copies the password;</li><li>it waits 3 seconds, emits a beep and copies the TOTP token and keep it in the clipboard.</li></ul><p>You can also use parameters in aliases and create a macro like</p><pre>alias M -c &quot;copy $1 -f username password -d 4 2 --wait &amp;&amp; totp $1&quot;</pre><p>and call it with</p><pre>M github.yml</pre><p>It is fantastic, isn’t it?</p><p><strong><em>BTW, using a TOTP factor in Secrez is a bit of a contradiction because you are converting a second factor (something that you have) in a first factor (something that you know). So, use this feature only when it makes sense.</em></strong></p><h3>Final thoughts</h3><p>Secrez does not want to compete with standard password managers. So, don’t expect in the future to have “form filling” and stuff like that. However, it is open-source and it’d be awesome if you’d like to add a GUI or a mobile app.</p><p>The best way to know more about Secrez is to follow its GitHub repo at</p><p><a href="https://github.com/secrez/secrez"><strong>https://github.com/secrez/secrez</strong></a></p><p>starting from reading the README, which is updated anytime there is something new.</p><h3>Back up, back up, back up</h3><p>An invisible bug can be somewhere, and you could lose some data.</p><p><strong>A back up is a lifesaver!</strong></p><p>My suggestion is to use Git (or Mercurial, CVS, whatever).<br>It will allow you to reverse to previous commits in case you lose any data. If you don’t want to use a versioning system, at least do a local backup every time that everything looks fine. You could use rsync for it. If you create a backup folder called ~/.secrez-bak, to sync the data between the two folders, just run:</p><pre>rsync -avh ~/.secrez/ ~/.secrez-bak/ - delete</pre><h3>A quick demo?</h3><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FqGoBTpG0Fj0%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DqGoBTpG0Fj0&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FqGoBTpG0Fj0%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="640" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/7c8b9a49ce74f32f3e2d151635281eb1/href">https://medium.com/media/7c8b9a49ce74f32f3e2d151635281eb1/href</a></iframe><p><strong>If you like this post, please 👏 and share it!</strong></p><p><em>This post has been also published at </em><a href="https://room29.art/secrez-a-secrets-manager-in-time-of-cryptocurrencies/"><em>https://room29.art/secrez-a-secrets-manager-in-time-of-cryptocurrencies/</em></a><em>.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=b15120c5aa14" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[“Cinque canzoni” — quasi quindici anni fa ]]></title>
            <link>https://sullof.medium.com/cinque-canzoni-quasi-quindici-anni-fa-4e46743f536e?source=rss-3b671fb3c7a5------2</link>
            <guid isPermaLink="false">https://medium.com/p/4e46743f536e</guid>
            <category><![CDATA[cantautori]]></category>
            <category><![CDATA[canzoni]]></category>
            <category><![CDATA[ep]]></category>
            <category><![CDATA[music]]></category>
            <category><![CDATA[musica]]></category>
            <dc:creator><![CDATA[Francesco Sullo]]></dc:creator>
            <pubDate>Sat, 20 Jun 2020 02:24:29 GMT</pubDate>
            <atom:updated>2025-08-07T15:11:09.757Z</atom:updated>
            <content:encoded><![CDATA[<h3>“Cinque canzoni” — quasi quindici anni fa 😒</h3><p><em>Nel 2006 la mia carriera musicale sembrava andare dritta verso un qualche successo, quando l’ennesima ricaduta mi forzò ad abbandonare il campo per la terza volta. Prima che la voce crollasse del tutto decisi di produrre un EP.</em></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*RF4b7sz58XD-aCXE.jpg" /><figcaption>La copertina dell’EP</figcaption></figure><p>Paolo Grillo è un produttore e geniale <a href="https://www.youtube.com/user/frigorifero80"><em>youtuber</em></a>. Quando gli dissi dell’idea di registrare un EP, mi suggerì di farlo allo <a href="https://www.studiocompresso.com/">Studio Compresso</a> del mitico Francesco Albanese.</p><p>Francesco era in una fase di trasformazione che lo avrebbe portato a fondare la <a href="https://www.makofiguesthouse.com/">Makofi Guest House</a> a Zanzibar. Mi ci trovai bene immediatamente.</p><p>Registrammo in un paio di giorni. Le canzoni le avevamo suonate molte volte dal vivo, anche se mai col gruppo al completo. Mi limitai a scrivere qualche parte per il flicorno e dare indicazioni su passaggi che non avevamo provato. Tutto andò liscio come l’olio.</p><p>A parte me alla chitarra e Paolo al contrabbasso, c’erano <a href="https://www.facebook.com/giulio.caneponi">Giulio Caneponi</a> alla batteria e percussioni e <a href="http://www.johncoltrane.it/giampaolo-casella-tromba/">Gianpaolo Casella</a> al flicorno.</p><p>Al piano <a href="https://www.facebook.com/giuliano.valori">Giuliano Valori</a>, amico e persona eccezionale che se ne è andata qualche anno fa, improvvisamente, lasciando un vuoto incolmabile.</p><p>In un paio di pezzi, compare all’armonica <a href="https://www.fabiomantegna.it/">Fabio Mantegna</a><em> </em>che in quei giorni stava registrando un disco con i suoi <em>Italo &amp; the Ronny Boy Band</em>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*yeJ1_7K87KGn6CfF.jpg" /><figcaption>Il retro di copertina — attenzione, telefono, email e sito sono cambiati. Ignorateli.</figcaption></figure><p>Quando il <em>master</em> fu pronto, ascoltandolo, ebbi la certezza che la mia carriera stesse volgendo al termine. Per quel motivo, fra le varie alternative a cui stavo lavorando, scelsi la copertina con le foto sfocate.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*IZtZntVT2sHP6Suo.jpg" /><figcaption>L’interno, coi testi</figcaption></figure><p>Quando fu tutto pronto e dovevo solo mettere le voci, le mie corde vocali non volevano saperne. Attesi quasi una settimana per vedere se la situazione migliorasse. Poi Francesco mi disse che doveva ristrutturare e che o registravamo adesso oppure se ne parlava fra qualche mese. Allora mi feci coraggio e andai. Potevo permettermi un <em>take</em> a canzone, non di più, e doveva essere per forza buona la prima.</p><p>Con le corde ingrossate, stavo almeno due toni sotto. Si sente soprattutto nelle canzoni che vanno più in alto, come <em>Il Lampo nel Temporale</em>, dove la voce è storpiata. A parziale consolazione, potei aggiungere a <em>La Cantina</em> una seconda voce l’ottava sotto, prendendo senza problemi dei bassi pieni che di norma sarebbero suonati male.</p><p>In generale, il problema principale fu tenere la nota, col risultato che la voce è tremolante. Quando, di rado, mi capita di riascoltare l’EP, mi rode il fegato. Ma poi penso che <strong>se non lo avessi registrato, quel periodo si sarebbe perso e sono contento di averlo fatto</strong>.</p><p>In seguito, decisi che era meglio dedicarsi ad altro e fondai Passpack con Tara Kelly e Nicola Mattina. Quella nuova avventura mi portò in California. Come si dice? Ogni porta che si chiude ne apre un’altra. L’importante è andare avanti e non fermarsi mai 😉</p><h3>Le tracce</h3><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fw.soundcloud.com%2Fplayer%2F%3Furl%3Dhttps%253A%252F%252Fapi.soundcloud.com%252Fplaylists%252F44286032%26show_artwork%3Dtrue&amp;display_name=SoundCloud&amp;url=https%3A%2F%2Fsoundcloud.com%2Fsullof%2Fsets%2Fcinque-canzoni&amp;image=https%3A%2F%2Fi1.sndcdn.com%2Fartworks-000085869819-aqlm4q-t500x500.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=soundcloud" width="800" height="166" frameborder="0" scrolling="no"><a href="https://medium.com/media/df90d44d20642d13d2fd8aaa602af3f6/href">https://medium.com/media/df90d44d20642d13d2fd8aaa602af3f6/href</a></iframe><h3>Qualche spartito?</h3><p>Anna Mia usa tempi dispari intervallati con tempi pari in una maniera non comune nella musica leggera.<br>Spero troviate interessante lo spartito qui sotto.</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.slideshare.net%2Fslideshow%2Fembed_code%2Fkey%2FcFcsNJiOhNp5co&amp;display_name=SlideShare&amp;url=https%3A%2F%2Fwww.slideshare.net%2Ffrancescosullo%2Fanna-mia&amp;image=https%3A%2F%2Fcdn.slidesharecdn.com%2Fss_thumbnails%2Fannamiaver4-200620010944-thumbnail-4.jpg%3Fcb%3D1592615505&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=slideshare" width="600" height="640" frameborder="0" scrolling="no"><a href="https://medium.com/media/c992e08b232eae39c45711da0e986970/href">https://medium.com/media/c992e08b232eae39c45711da0e986970/href</a></iframe><p><strong>If you like this post, please 👏 and share it!</strong></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=4e46743f536e" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Cormorants’ tree]]></title>
            <link>https://sullof.medium.com/cormorants-tree-59edf6c37269?source=rss-3b671fb3c7a5------2</link>
            <guid isPermaLink="false">https://medium.com/p/59edf6c37269</guid>
            <category><![CDATA[oakland]]></category>
            <category><![CDATA[lake-merritt]]></category>
            <category><![CDATA[birds]]></category>
            <category><![CDATA[short-film]]></category>
            <category><![CDATA[videos]]></category>
            <dc:creator><![CDATA[Francesco Sullo]]></dc:creator>
            <pubDate>Fri, 19 Jun 2020 00:59:30 GMT</pubDate>
            <atom:updated>2020-06-19T00:59:30.472Z</atom:updated>
            <content:encoded><![CDATA[<blockquote>In Oakland, I was used to walk along Lake Merritt for hours, watching the birds while enjoying, sometimes, fantastic sunsets. On a small island close to the shore, there was a fascinating tree covered with cormorants’ nest.</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*9iWBBMc8A1XnWC9-.jpg" /></figure><p>I lived in Oakland from June 2014 to July 2018, in Adam’s Point, a few minutes away from Lake Merritt.</p><p>The Northern side of the lake hosts a bird sanctuary giving refuge to many species of ducks, Canadian geese, Black-crowned Night-Herons, cormorants, pelicans, egrets, coots, and many others.</p><p>I was used to walk along the water for hours, watching the birds while enjoying, sometimes, fantastic sunsets. I also took a lot of pictures and videos. On a small island close to the shore, there was a fascinating tree covered with cormorants’ nest.</p><p>The peculiarity of those birds is that their feces are toxic and kill the trees that host them. Even if the trees don’t decide to host the cormorants, I like to think that the trees sacrifice themselves to allow the birds to reproduce.</p><p>With the many clips I took in 2015 of the tree and the birds, I made a short movie.</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fplayer.vimeo.com%2Fvideo%2F157987607%3Fapp_id%3D122963&amp;dntp=1&amp;display_name=Vimeo&amp;url=https%3A%2F%2Fvimeo.com%2F157987607&amp;image=https%3A%2F%2Fi.vimeocdn.com%2Fvideo%2F559377970_1280.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=vimeo" width="1920" height="816" frameborder="0" scrolling="no"><a href="https://medium.com/media/18a87d48372dfe15b1c4eb9f6935a0a8/href">https://medium.com/media/18a87d48372dfe15b1c4eb9f6935a0a8/href</a></iframe><p>Initially, I was thinking of writing a score for it, but I found a piece of music by <a href="http://www.igorkhabarov.com/">Igor Khabarov</a> — <a href="https://room29.art/cormorants-tree-a-short-film/freemusicarchive.org/music/Igor_Khabarov/Be_1632/Try">Try</a> — that sounded perfect to me, and I went with it.</p><p><strong>If you like this post, please 👏 and share it!</strong></p><p><em>Originally, it has been published at </em><a href="https://room29.art/cormorants-tree-a-short-film/"><em>https://room29.art/cormorants-tree-a-short-film/</em></a><em> on June 15th, 2020.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=59edf6c37269" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Black lives matter. Period.]]></title>
            <link>https://sullof.medium.com/black-lives-matter-period-2b86fb7666ee?source=rss-3b671fb3c7a5------2</link>
            <guid isPermaLink="false">https://medium.com/p/2b86fb7666ee</guid>
            <category><![CDATA[art]]></category>
            <category><![CDATA[blacklivesmatter]]></category>
            <category><![CDATA[politics]]></category>
            <dc:creator><![CDATA[Francesco Sullo]]></dc:creator>
            <pubDate>Fri, 19 Jun 2020 00:55:59 GMT</pubDate>
            <atom:updated>2020-06-19T00:55:59.349Z</atom:updated>
            <content:encoded><![CDATA[<blockquote>I have done little with painting — just a dozen of oils. One of my favorites is the portrait of a black girl. Take a look while I talk about human rights in the 21st century and hope.</blockquote><p>After the brutal killing of George Floyd, a lot has happened in the USA and in the world. During the protests, we have seen more and more confirmation of Police violence. In the following thread, Greg Doucette reports more than 400 episodes:</p><h3></h3><p></p><p>Is the situation going to change? I don’t know. I hope so, but politicians are very good at talking about change while also doing very little to reform the system.</p><p>In San Francisco, where I live, the major seems to go in the right direction, but one thing is to announce a change, one thing is to implement it. I will believe it when I see it.</p><p>I am Italian, and my father was a cop. There, Police can use guns only if there are particular conditions, and if the decision of using a weapon is proportionate to the case. In other words, if nobody shows up with a gun shooting someone, cops cannot shoot; if they do, they will be charged.</p><p>When I moved to the USA, I was shocked by discovering that Police can kill unarmed people without being even fired. Honestly, I was not surprised that black people were disproportionally hit because I use my eyes. I see how the city is. There were only a couple of black engineers at Yahoo in the San Francisco office in a few hundred. And I see the bars. In some, inside, you find only whites and Asians, in others only Hispanic, in other only blacks. I would call it segregation.</p><p>Socially, I loved Oakland because, as a black city, a generous one, was much more inclusive than San Francisco. I remember that in <em>Room 389</em>, there was always a great melting pot of races. But, even there, things were changing. My favorite coffee shop — <em>Coffe With a Beat</em> — , a fantastic place managed by an old black man, was forced to close because of a crazy rise in renting. Even from a business point-of-view, it didn’t make sense because, still now, after four years, the space is empty.</p><p>Where are we going? I don’t know. The Supreme Court just refused to discuss the abolishment of <a href="https://en.wikipedia.org/wiki/Qualified_immunity">qualified immunity</a>.</p><h3></h3><p></p><p>I think that a lot more has to change. I was tweeting about this a few days ago:</p><h3></h3><p></p><p>Instead, I am afraid that the change will be small. More killing will be allowed, more protests will happen, and, sooner or later, if still nothing really changes, the protests will become violent. If so, the powers will use it to reverse everything good has been done in the meantime.</p><p>Am I too pessimistic? I hope I am.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*oaNwHmoqQLktP488.jpg" /><figcaption>Studio #7, Black Girl — Oil on cotton paper, 12x16&quot;</figcaption></figure><p><strong>If you like this post, please 👏 and share it!</strong></p><p><em>Originally, it has been published at </em><a href="https://room29.art/black-lives-matter/">https://room29.art/black-lives-matter/</a> <em>on June 15th, 2020.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=2b86fb7666ee" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[“Two AM” and the Huckleberry Botanical Regional Preserve]]></title>
            <link>https://sullof.medium.com/two-am-and-the-huckleberry-botanical-regional-preserve-19bcd949880b?source=rss-3b671fb3c7a5------2</link>
            <guid isPermaLink="false">https://medium.com/p/19bcd949880b</guid>
            <category><![CDATA[oakland]]></category>
            <category><![CDATA[parks]]></category>
            <category><![CDATA[music]]></category>
            <category><![CDATA[short-film]]></category>
            <category><![CDATA[videos]]></category>
            <dc:creator><![CDATA[Francesco Sullo]]></dc:creator>
            <pubDate>Fri, 19 Jun 2020 00:50:37 GMT</pubDate>
            <atom:updated>2020-06-19T00:50:37.907Z</atom:updated>
            <content:encoded><![CDATA[<blockquote>From 2014 to 2018, I lived in Oakland. Then I had a car. In ~15 minutes, I was at my favorite park: the Huckleberry Botanic Regional Preserve. This post is about a short movie about it, and a song I wrote during the lockdown and used as the score.</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*IlnvvOAkp7Bq9KFo.jpg" /></figure><p>From 2014 to 2018, I lived in Oakland, near Lake Merritt. I was quite happy there because the lake was just a few minutes walking away. Then I had a car. In ~15 minutes, I was at my favorite park: the Huckleberry Botanic Regional Preserve.</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.google.com%2Fmaps%2Fembed%2Fv1%2Fplace%3Fmaptype%3Dsatellite%26center%3D37.8438698%252C-122.1998539%26key%3DAIzaSyD9HrlRuI1Ani0-MTZ7pvzxwxi4pgW0BCY%26zoom%3D14%26q%3DHuckleberry%2BBotanic%2BRegional%2BPreserve&amp;display_name=Google+Maps&amp;url=https%3A%2F%2Fwww.google.com%2Fmaps%2Fplace%2FHuckleberry%2BBotanic%2BRegional%2BPreserve%2F%4037.8438698%2C-122.1998539%2C2009m%2Fdata%3D%213m1%211e3%214m5%213m4%211s0x80857d58a00e1267%3A0x8be097cc35534266%218m2%213d37.8438698%214d-122.1954765&amp;image=http%3A%2F%2Fmaps-api-ssl.google.com%2Fmaps%2Fapi%2Fstaticmap%3Fcenter%3D37.8438698%2C-122.1998539%26zoom%3D15%26size%3D250x250%26sensor%3Dfalse&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=google" width="600" height="450" frameborder="0" scrolling="no"><a href="https://medium.com/media/dad2550b6cc7abb997bed989b4071d7c/href">https://medium.com/media/dad2550b6cc7abb997bed989b4071d7c/href</a></iframe><p>Sometimes I was going there to breathe, some other time I brought with me my camera and shoot. As a result of that, I have a lot of footage. My laziness prevented me many times from putting some of the clips together to make a short movie.</p><p>A few days ago, I composed a tune that sounds, somehow, like classical music. Yesterday I decided to record it, and I did it. Posting it on SoundCloud, I called it <em>Two AM</em>, roundly the time at which the music started flying around my head. After, I shared it on Facebook, but the way that happens is not ideal. You can not just listen to the music, you must open a new tab and go to SoundCloud. The only way to let people listen to the tune on Facebook is by uploading a video. How to solve the issue?</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*GfdfBTePLEMoKpuB.jpg" /></figure><p>Initially, I looked for some app to do that, but I didn’t find anything that I liked, and I thought I could maybe build something myself. But I discharged the idea, I am doing too many things these days. When I had almost given up, “Perhaps I can take a look at all the footage I have, maybe some idea will come up,” I thought. I connected my 2Tb backup drive, and a folder name Huckleberry said hello to me. Almost automatically, I launched DaVinci Resolve and started a new project. To align the footage with the mood of the music, I colored it like an old <em>Fujifilm.</em> Last night, around 1 am, the video was ready. This morning I watched it with fresh eyes, I fixed a couple of clips out of sync with the music, and I published it on Vimeo.</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fplayer.vimeo.com%2Fvideo%2F416609903%3Fapp_id%3D122963&amp;dntp=1&amp;display_name=Vimeo&amp;url=https%3A%2F%2Fvimeo.com%2F416609903&amp;image=https%3A%2F%2Fi.vimeocdn.com%2Fvideo%2F890813961_1280.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=vimeo" width="1920" height="1080" frameborder="0" scrolling="no"><a href="https://medium.com/media/448f83e4a6a2625929d5e14d7c27dc9e/href">https://medium.com/media/448f83e4a6a2625929d5e14d7c27dc9e/href</a></iframe><p>If you like to listen to <em>Two AM</em> without the ambient sound in the video, you could appreciate the audio file on SoundCloud.</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fw.soundcloud.com%2Fplayer%2F%3Furl%3Dhttps%253A%252F%252Fapi.soundcloud.com%252Ftracks%252F817803004%26show_artwork%3Dtrue&amp;display_name=SoundCloud&amp;url=https%3A%2F%2Fsoundcloud.com%2Fsullof%2F2-am&amp;image=https%3A%2F%2Fi1.sndcdn.com%2Fartworks-cMXprXc0KX4MolaR-ixQK3g-t500x500.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=soundcloud" width="800" height="166" frameborder="0" scrolling="no"><a href="https://medium.com/media/3b8a2fdaeb9260b60d23e9e490e0b38d/href">https://medium.com/media/3b8a2fdaeb9260b60d23e9e490e0b38d/href</a></iframe><p>Thanks for watching and listening to. Leave me your thoughts in the comments.</p><p><strong>If you like this post, please 👏 and share it!</strong></p><p><em>Originally, it has been published at </em><a href="https://room29.art/2-am-and-the-huckleberry-botanic-preserve/">https://room29.art/2-am-and-the-huckleberry-botanic-preserve/</a><em> on May 10th, 2020.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=19bcd949880b" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>