<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ape Unit</title>
    <description>The latest articles on DEV Community by Ape Unit (@apeunit).</description>
    <link>https://dev.to/apeunit</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F2150%2F42d40630-0ebe-43f0-b8e4-b582ba004ab1.png</url>
      <title>DEV Community: Ape Unit</title>
      <link>https://dev.to/apeunit</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/apeunit"/>
    <language>en</language>
    <item>
      <title>The Tech Behind Eventivize Drops</title>
      <dc:creator>Andrew Chiw</dc:creator>
      <pubDate>Wed, 20 Jan 2021 18:33:33 +0000</pubDate>
      <link>https://dev.to/apeunit/the-tech-behind-eventivize-drops-3o7k</link>
      <guid>https://dev.to/apeunit/the-tech-behind-eventivize-drops-3o7k</guid>
      <description>&lt;p&gt;Behind the Eventivize Drop App is a database that keeps track of how many drops each user has. However, it is not just any database - it is a full-fledged blockchain! Specifically, one based on the Cosmos blockchain, just like Binance Coin and Crypto.com.&lt;/p&gt;

&lt;p&gt;But why are we using a blockchain at all? The intent is to spread responsibility for the reward mechanism between multiple parties - the event organizer, partners, artists, venues, and even merchants, such as food stall owners (for events IRL). Besides the myriad possibilities enabled by tokens, spreading ownership of the event (or part of it, at least) could result in interesting crowd behaviours.&lt;/p&gt;

&lt;h2&gt;
  
  
  Deploying chains on demand
&lt;/h2&gt;

&lt;p&gt;Deploying a new blockchain is not meant to be easy — especially for a Cosmos blockchain. Deploying a new blockchain is not meant to be done often, and there is a lot of back and forth signing-and-verification of messages between several very responsible parties, usually heavily invested companies. Then once it's deployed, you keep it running indefinitely.&lt;/p&gt;

&lt;p&gt;That’s not the case with Eventivize.. For each event, a new so-called "burner" chain is created, which, once it is over, can either be stopped or kept running to enable interesting interactions between subsequent events. The service that we created to orchestrate this is called LaunchControlD, and the chain that it launches is called LaunchPayload.&lt;/p&gt;

&lt;h2&gt;
  
  
  LaunchPayload
&lt;/h2&gt;

&lt;p&gt;LaunchPayload is a standard Cosmos blockchain packaged in a Docker image with scripts or utilities that provide a standard interface for LaunchControlD to work with. There are two binaries of note:&lt;/p&gt;

&lt;p&gt;launchpayloadd: the blockchain node that actually maintains the database and balances and guarantees fair behaviour. To spread responsibility for the event's drop mechanism across stakeholders, the stakeholders must generate their own validator accounts using launchpayloadcli and run this program with their validator account on their own computers.&lt;/p&gt;

&lt;p&gt;launchpayloadcli: manages accounts and, when connected to launchpayloadd over the network, provides an interface for apps like the Eventivize Drop App to query and post transactions.&lt;/p&gt;

&lt;p&gt;These programs can be run on different computers as well, although the computer running launchpayloadd should have launchpayloadcli to provide the validator account.&lt;/p&gt;

&lt;h2&gt;
  
  
  LaunchControlD
&lt;/h2&gt;

&lt;p&gt;LaunchControlD is meant to be continuously run on a server, waiting for new requests to spin up new chains. Such requests can come in through the HTTP REST API or command line interface.&lt;/p&gt;

&lt;p&gt;The request contains the stakeholders’ email addresses, the currency in question (always a "drop" in Eventivize's case), and the initial balances of each account.&lt;/p&gt;

&lt;p&gt;Here's what an event request looks like in YAML:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;owner&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;owner@email.com"&lt;/span&gt;
&lt;span class="na"&gt;token_symbol&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;drop"&lt;/span&gt;

&lt;span class="na"&gt;genesis_accounts&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;alice@apeunit.com"&lt;/span&gt;
    &lt;span class="na"&gt;genesis_balance&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;500drop,1000000evtx,100000000stake"&lt;/span&gt;
    &lt;span class="na"&gt;validator&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;
    &lt;span class="na"&gt;faucet&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="no"&gt;false&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;dropgiver"&lt;/span&gt;
    &lt;span class="na"&gt;genesis_balance&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;10000000000drop,10000000000evtx"&lt;/span&gt;
    &lt;span class="na"&gt;validator&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="no"&gt;false&lt;/span&gt;
    &lt;span class="na"&gt;faucet&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;LaunchControlD will then start as many virtual machines as there are validator accounts, invoke LaunchPayload to randomly generate the validator accounts and additional configuration, copy the configuration to each virtual machine, and tell the virtual machines to run everything.&lt;/p&gt;

&lt;p&gt;The virtual machines may be deployed on the same machine as LaunchControlD (virtualbox) or provisioned elsewhere on any cloud service supported by docker-machine.&lt;/p&gt;

&lt;p&gt;The astute reader may realize, "wait a minute, doesn't he who controls LaunchControlD have total control over the validator accounts, and thus, ownership of the event reward mechanism itself?"&lt;/p&gt;

&lt;p&gt;Why, yes. Yes indeed. Evil smile.&lt;/p&gt;

&lt;p&gt;Given our target audience (event organizers who don't care so much about the technical details), the overall unproven social effects of introducing a token into an event, and the delays that signing the genesis state and transmitting it back and forth between the event organizers, partners, artists, and even merchants would cause, we decided it was a worthy tradeoff.&lt;/p&gt;

&lt;p&gt;An obvious improvement would be importing validator accounts generated by stakeholders, and creating a mechanism for these accounts to sign the genesis transaction together before making an event request. Should an event result in a particularly long-lived asset, a link to a more permanent chain could be established with IBC.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;LaunchControl and LaunchPayload are still in their infancy, and there are many opportunities to improve. This is a first step to empower event organizers to build their ideas on top of decentralized technologies based on Cosmos SDK, making the power of Cosmos available to a whole new user group.&lt;/p&gt;

&lt;p&gt;We at Unit 8 see opportunities in using burner chains, perhaps with custom Cosmos-SDK modules, to ride the current trend of decentralization, exploring exciting new social effects that arise from tokens that can be plugged into the crypto financial system.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Build a demo dataset for your product</title>
      <dc:creator>Andrea Giacobino</dc:creator>
      <pubDate>Wed, 17 Jun 2020 10:42:14 +0000</pubDate>
      <link>https://dev.to/apeunit/build-demo-dataset-for-your-product-4575</link>
      <guid>https://dev.to/apeunit/build-demo-dataset-for-your-product-4575</guid>
      <description>&lt;p&gt;I am working on a new product (btw it's name is &lt;a href="https://meetvalis.com"&gt;VALIS&lt;/a&gt;) and we needed a fake dataset to showcase the product and it's functionalities, here some suggestion if you have to do the same&lt;sup id="fnref1"&gt;1&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Start from a real world scenario that you know and you are familiar with&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Faking stuff is hard, better to stick with what you know and experience directly: take the data from your personal or work life and use to create the canvas for your demo dataset, next you'll replace names and other details.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Make it familiar for your audience&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Who is your audience? Are they young? Is gender relevant? You probably already have a good idea about that if your are building a product, keep this in mind when choosing the actors in your dataset.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Keep it as straightforward as possible&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The goal of your demo dataset is to showcase your product, not your demo dataset, try to make evident what is what: for example, use well known identifiers for companies (LLC, Inc, ...), locations (City, Lake, ... ), projects, etc. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;About using existing brands&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Trademarks are a complicated issue, it may be fine to use existing brands or it may not, &lt;a href="https://coveryourassetsonline.com/can-i-mention-famous-brands-products-or-popular-fictional-characters-in-my-marketing-copy/"&gt;treat with care&lt;/a&gt;. When not sure, don't: better to avoid to recreate your demo and material because of trademark infringement.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The holy grail: tailored demo data&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Can you think of a way of generating tailored demo data? maybe processing publicly available info from Wikipedia, GitHub or Crunchbase? Then go for it, showcasing a product using your client data will be way more effective than using unknown or fake data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What about well known dataset?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It depends, well known for who? If your are not 100% sure that your audience is familiar with a topic is safer to assume that they are not. &lt;/p&gt;

&lt;p&gt;And since your are here, check out &lt;a href="https://meetvalis.com"&gt;VALIS&lt;/a&gt;!&lt;/p&gt;




&lt;ol&gt;

&lt;li id="fn1"&gt;
&lt;p&gt;it doesn't apply for every type of project 😉  ↩&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;

</description>
      <category>product</category>
      <category>demo</category>
      <category>dataset</category>
    </item>
    <item>
      <title>From HackMD to PDF</title>
      <dc:creator>Andrea Giacobino</dc:creator>
      <pubDate>Sat, 09 May 2020 08:42:49 +0000</pubDate>
      <link>https://dev.to/apeunit/from-hackmd-to-pdf-36n6</link>
      <guid>https://dev.to/apeunit/from-hackmd-to-pdf-36n6</guid>
      <description>&lt;p&gt;Full disclosure, I'm a big fan of Markdown, and also a big fan of &lt;a href="https://hackmd.io" rel="noopener noreferrer"&gt;HackMD&lt;/a&gt; (and it's community fork &lt;a href="https://codimd.org" rel="noopener noreferrer"&gt;CodiMD&lt;/a&gt;). &lt;/p&gt;

&lt;p&gt;Now imagine you have to write a technical assessment or specifications and you started writing it down on hackmd/codimd because, you know, reasons 😤. But then, for the sake of the argument, let's say that you have to produce a deliverable artifact that can be shipped to someone, like a customer; then a link to a online document might just not cut it 🤔. &lt;/p&gt;

&lt;p&gt;So what to do? Alright, easy solution, fire up &lt;a href="https://typora.io/" rel="noopener noreferrer"&gt;typora&lt;/a&gt; (or similar), paste the markdown, File &amp;gt; Export &amp;gt;  PDF. The day is saved.&lt;/p&gt;

&lt;p&gt;You go back skimming through the news and you find this: &lt;a href="https://keleshev.com/my-book-writing-setup/" rel="noopener noreferrer"&gt;Writing a Book with Pandoc, Make, and Vim&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Wait a second... what if... 🤯 &lt;code&gt;vim Makefile&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AU_HACKMD_CODE  = bfScafhcTdGzzhJ4B3evlQ
AU_FONT         = NeufileGrotesk
AU_FONT_DIR     = $(HOME)/.fonts/NeufileGrotesk
AU_OUTFILE      = $(HOME)/$(AU_HACKMD_CODE).MD.$(shell date +%F).pdf
AU_FORMAT       = article

hackmd2pdf:
    @echo format doc
    curl -s -L "https://hackmd.io/$(AU_HACKMD_CODE)/download" -o /tmp/$(AU_HACKMD_CODE).md
    pandoc /tmp/$(AU_HACKMD_CODE).md -o $(AU_OUTFILE) \
  --table-of-contents \
  --pdf-engine=xelatex \
  --highlight-style=monochrome \
  --number-sections \
  -H $(HOME)/.config/apeunit/header-$(AU_FORMAT).tex \
  -V 'mainfont:$(AU_FONT)' \
  -V 'mainfontoptions:Extension=.otf, UprightFont=*-MediumExtended, BoldFont=*-BoldExtended, ItalicFont=*-MediumExtendedItalic, BoldItalicFont=*-BoldExtendedItalic, Path=$(AU_FONT_DIR)/' \
  -V 'fontsize: 12pt' \
  -V 'papersize: A4' \
  -V 'urlcolor: blue' \
  -V 'date: \today{}' \
  -V 'documentclass: $(AU_FORMAT)' \
  -V 'geometry:margin=3.8cm'
    xdg-open $(AU_OUTFILE)
    @echo done

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;make hackmd2pdf HACKMD_CODE=bfScafhcTdGzzhJ4B3evlQ
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;BOOM!&lt;sup id="fnref1"&gt;1&lt;/sup&gt;&lt;sup id="fnref2"&gt;2&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;Now, I do understand that from a pure aesthetic point of view this might not be enough to satisfy the sensitive eye of the graphic designer, but it can be shipped!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fxg70n92dmnw8wg5cueuz.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fxg70n92dmnw8wg5cueuz.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;ol&gt;

&lt;li id="fn1"&gt;
&lt;p&gt;some dependencies need to be installed, on ubuntu &lt;code&gt;texlive-xetex&lt;/code&gt; and &lt;code&gt;pandoc&lt;/code&gt; ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn2"&gt;
&lt;p&gt;this command will not work for you, because it contains specific branding stuff from &lt;a href="https://apeunit.com" rel="noopener noreferrer"&gt;Ape Unit&lt;/a&gt;, but if you are looking for a simpler one, look &lt;a href="https://gist.github.com/noandrea/1082b6649d526d301980b97365691b1c" rel="noopener noreferrer"&gt;no further&lt;/a&gt;! ↩&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;

</description>
      <category>latex</category>
      <category>markdown</category>
      <category>pandoc</category>
      <category>pdf</category>
    </item>
    <item>
      <title>GitHub is now free for teams 🤔 </title>
      <dc:creator>Andrea Giacobino</dc:creator>
      <pubDate>Tue, 14 Apr 2020 21:59:46 +0000</pubDate>
      <link>https://dev.to/apeunit/github-is-now-free-for-teams-4e2n</link>
      <guid>https://dev.to/apeunit/github-is-now-free-for-teams-4e2n</guid>
      <description>&lt;p&gt;Today GitHub &lt;a href="https://github.blog/2020-04-14-github-is-now-free-for-teams/"&gt;announced&lt;/a&gt; that you don't need a payed plan anymore to have private repositories for teams. &lt;br&gt;
That is a big announcement and the first thought goes to the competing service, &lt;a href="https://gitlab.com"&gt;GitLab&lt;/a&gt;, that has been offering the same since the very beginning.&lt;/p&gt;

&lt;p&gt;But this is somewhat also an interesting announcement that might have implications for the open source movement in general. Of course &lt;strong&gt;this is just a pure speculation&lt;/strong&gt;, but anyway let's roll with it. &lt;/p&gt;

&lt;p&gt;I think GitHub has been one of the organization that made the "Free for open source" business model popular. The "Free for open source" model works like this: you can use our service free of charge and we get back advertisement and feed our &lt;a href="https://en.wikipedia.org/wiki/Word-of-mouth_marketing"&gt;WOM&lt;/a&gt; marketing. Now developers (and companies) tend to be jealous/shy/protective toward their code, but they are also a pragmatical bunch: subscribing to a payed plan for my weekend-long side project or my hello world flutter might not be something worth doing. &lt;br&gt;
But one thing about open source is that, like most thing, is a quantitative issue more then a qualitative one: once you get used to have your stuff open source, it becomes quite liberating (and, who knows, could even help you land a job). We can say that GitHub with its model has, at the very least, encouraged and promoted the open source software experience. &lt;/p&gt;

&lt;p&gt;Microsoft on the other hand has &lt;a href="https://www.theregister.co.uk/2001/06/02/ballmer_linux_is_a_cancer/"&gt;historically&lt;/a&gt; been the fiercest enemy of the &lt;a href="https://en.wikipedia.org/wiki/Open-source-software_movement"&gt;Open Source Movement&lt;/a&gt;. Microsoft, since 2018, &lt;a href="https://news.microsoft.com/2018/06/04/microsoft-to-acquire-github-for-7-5-billion/"&gt;owns&lt;/a&gt; GitHub, and, with this last move, if you are one of those suspicious people, you might think that they kind of want you not to think too much about all this OSS business: get your free proprietary repository and off you go. &lt;/p&gt;

&lt;p&gt;Also &lt;a href="http://pedrocr.pt/text/microsofts-love-of-linux"&gt;this&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;A pensar male si fa peccato, ma spesso ci si azzecca.&lt;/em&gt; - &lt;a href="https://en.wikipedia.org/wiki/Giulio_Andreotti"&gt;Giulio Andreotti&lt;/a&gt;&lt;/p&gt;

</description>
      <category>github</category>
      <category>opinion</category>
      <category>microsoft</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
