<?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>Forem: Juan Pablo Ramirez</title>
    <description>The latest articles on Forem by Juan Pablo Ramirez (@jpramirez).</description>
    <link>https://forem.com/jpramirez</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%2Fuser%2Fprofile_image%2F149927%2Fcd9754d0-150c-4c07-8bff-970e00509481.jpg</url>
      <title>Forem: Juan Pablo Ramirez</title>
      <link>https://forem.com/jpramirez</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/jpramirez"/>
    <language>en</language>
    <item>
      <title>New Frontiers</title>
      <dc:creator>Juan Pablo Ramirez</dc:creator>
      <pubDate>Thu, 27 Aug 2020 06:24:02 +0000</pubDate>
      <link>https://forem.com/jpramirez/new-frontiers-358d</link>
      <guid>https://forem.com/jpramirez/new-frontiers-358d</guid>
      <description>&lt;p&gt;We are excited to launch an alpha of #space related libraries that will be integrated in our #ResilientOne  engine.&lt;/p&gt;

&lt;p&gt;We added ow.ly/Rut250BahLe to our portfolio as a clear effort to join the space community.&lt;/p&gt;

&lt;p&gt;We hope you can enjoy it and leave comments below.&lt;/p&gt;

&lt;p&gt;Follow us and visit&lt;br&gt;
epyphite.com for more information. &lt;/p&gt;

</description>
    </item>
    <item>
      <title>Coding Hands vs Bouldering</title>
      <dc:creator>Juan Pablo Ramirez</dc:creator>
      <pubDate>Tue, 07 Jul 2020 05:39:18 +0000</pubDate>
      <link>https://forem.com/jpramirez/coding-hands-vs-bouldering-go2</link>
      <guid>https://forem.com/jpramirez/coding-hands-vs-bouldering-go2</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--J0s8MpNd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/d1u7bffbd79ydglop287.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--J0s8MpNd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/d1u7bffbd79ydglop287.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After years, and I say .. YEARS, I manage to drag myself to a Bouldering session, I can say without shame that I'm really really bad at it, will get better, just keep going, right? &lt;/p&gt;

&lt;p&gt;I forgot completely how hard it was on your hands and forearms, so for all of us that we spend hours and hours typing and coding, I completely recommend it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0akEd7F6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/iwyrq01asp6a0tekmow3.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0akEd7F6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/iwyrq01asp6a0tekmow3.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qXV4XIKI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/8ptwb77qbn9edfzfyqpa.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qXV4XIKI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/8ptwb77qbn9edfzfyqpa.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And yes of course now I can barely type... or use a fork... but hey, will be awesome tomorrow, when my shoulders and arms hurt more and more.&lt;/p&gt;

&lt;p&gt;But again, I completely recommend it!. GO have fun, fall and try again.&lt;/p&gt;

&lt;p&gt;What you guys do for relax?&lt;/p&gt;

</description>
      <category>devlife</category>
      <category>lifestyle</category>
      <category>hobbies</category>
      <category>beyondcode</category>
    </item>
    <item>
      <title>COVID-19 and world today</title>
      <dc:creator>Juan Pablo Ramirez</dc:creator>
      <pubDate>Mon, 06 Jul 2020 16:44:49 +0000</pubDate>
      <link>https://forem.com/jpramirez/covid-19-and-world-today-16i9</link>
      <guid>https://forem.com/jpramirez/covid-19-and-world-today-16i9</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DHzGEy-0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/80qpie8r28wac5vtwm6x.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DHzGEy-0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/80qpie8r28wac5vtwm6x.gif" alt="Year"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Has been several months since the world suffer one of the most precise and dedicated &lt;strong&gt;zero day&lt;/strong&gt; exploits of our history.&lt;br&gt;
(For those who does not know what a zero day is go &lt;a href="https://en.wikipedia.org/wiki/Zero-day_(computing)"&gt;here&lt;/a&gt;, but long story short, we were hit by something we did not know that existed, and had no defense against it until was too late, and... made every infrastructure and protocol fail, every security dude worse nightmare).&lt;/p&gt;

&lt;p&gt;Literally this little virus spread across our lives and disrupt every industry, causing major collapses across the world, across culture, governments and industries.&lt;/p&gt;

&lt;p&gt;As humans, we failed to defend ourselves.&lt;/p&gt;

&lt;p&gt;One clear thing that COVID-19 is still doing to us, is pinning the out liars of our world, forcing our hand to face our biggest fears, ourselves. &lt;br&gt;
From the selfish hoarders, at the beginning, or the leaders that did not listen the warnings, the CEO's and the market gurus that lied about their investments and put everybody at risk.&lt;/p&gt;

&lt;p&gt;We can lie to each other all we want.. we can hide it behind technicalities, and try to defend our countries, our flags, our political party, but we keep forgetting one thing....&lt;/p&gt;

&lt;p&gt;Like a computer Virus, COVID-19 does not discriminate, will affect us and change us if we don't listen and don't respect the rules, that's what has been doing all this time. &lt;/p&gt;

&lt;p&gt;I've been a security architect for almost 18 years now, worked in several companies with different levels of training and expertise, teach security DevOps here and there and security architecture for Cloud Architects and the like. When a security breach reaches a client, it's 99.9% Human error, either in the perimeter, software pipeline, bug or whatever else, it's always a human that forgot to check, and a protocol that forgot to verify that, basically I see this happening all the time, seeing it at a massive scale like COVID-19 it's terrifying.&lt;/p&gt;

&lt;p&gt;I saw during this time all level of denial, from businesses that could see this happening miles away and decided to face it and put their employees at risk, to governments that decided not to listen to our very own experts.&lt;/p&gt;

&lt;p&gt;As human race, we failed, and 2020 has been our defeat year. &lt;br&gt;
We failed to collaborate as a specie, as one world, we failed obeying simple orders, driven by our own selfishness, we failed protecting our elders, as we forgot about them when we did not take care of ourselves.&lt;/p&gt;

&lt;p&gt;And the worst part is .. we could avoid this, prevent it from getting it worst, and we are still unable to do so.&lt;/p&gt;

&lt;p&gt;Since the beginning the data was there, our expert told us what could happen if we did not take care of this threat sooner. Was simple, very simple rules.&lt;br&gt;
From a computer perspective... is like " Do not believe that a Nigerian prince is sending you money" or " Do not click on that file that says.. 'install-me.exe'" or "send your bank password over an email".&lt;/p&gt;

&lt;p&gt;I do believe that from this we are going to recover, be better humans, listen, and prepare our lives to be aware of what we are doing, I certainly hope so, that this zero exploit vulnerability and all the enormous cost in lives is worth something.&lt;/p&gt;

&lt;p&gt;To learn to be prepared, to trust, to listen, to forget once and for all that is not just about us individually and is about us as a whole.&lt;/p&gt;

&lt;p&gt;Of course this post is a rant, a rant from a security guy that just want to be better every day and that learned so much during this year, so much about me but also about the world around me, but it's seeing so much pain, and bad decisions being made day by day, by the people the suppose to protect us. &lt;/p&gt;

&lt;p&gt;I will end this rant with a question.&lt;/p&gt;

&lt;p&gt;What you learn this 2020 ? Good or bad...what this hack to society teach you.?&lt;/p&gt;

&lt;p&gt;Thanks!&lt;br&gt;
Stay safe, keep safe, keep learning.&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>leadership</category>
      <category>management</category>
      <category>mentalhealth</category>
    </item>
    <item>
      <title>Secure Devops Tactics </title>
      <dc:creator>Juan Pablo Ramirez</dc:creator>
      <pubDate>Fri, 03 Jul 2020 13:08:52 +0000</pubDate>
      <link>https://forem.com/jpramirez/secure-devops-tactics-26e2</link>
      <guid>https://forem.com/jpramirez/secure-devops-tactics-26e2</guid>
      <description>&lt;p&gt;So security, if we could agree, it's a catch up game.&lt;/p&gt;

&lt;p&gt;I have more than 15 years of security experience and every single time I felt that I was running behind, behind developers, business goals, release times, policy, and many many more reasons.&lt;/p&gt;

&lt;p&gt;Trying to reason a deadline or QA, Threat modeling constantly and getting into the CD/CI in the development environment is always a struggle. &lt;/p&gt;

&lt;p&gt;Either you have an backlog of the size of Iguazu falls, and can barely catch up, and let's face it, developers are extremely clever to back channel to get faster their feature request from an extremely ever hungrier business development.&lt;/p&gt;

&lt;p&gt;And security can wait right? After all nothing can really happen in a few days, or hours and we can always add more firewall and so on.&lt;/p&gt;

&lt;p&gt;But that's not the case ever, as we struggle to automate tests, incorporate more checklist and be in every meeting, every decision. One things is obvious, we are an intrinsic part of development and we should become the extra step friend that make it easier and tell everybody to wear a coat because is cold, or take an umbrella because might rain... without being the paranoid or a pain.&lt;/p&gt;

&lt;p&gt;For that reason I started a small repo on &lt;a href="https://github.com/epyphite/SecureDevopsTalks"&gt;GitHub&lt;/a&gt; , and a meet up weekly, to tell stories, and share advises, small recipes, little pieces of code, that can go a long way  in the SecDevOps, helping fellow Security Engineers and Architects to evangelize caution.&lt;/p&gt;

&lt;p&gt;Security should be about protecting, oversight, recommendations and thoughtful watch, we are here to help. Not to be an inconvenience or a barrier to business.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dx-keGY9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://img.deusm.com/darkreading/MarilynCohodas/JuneCartoonJK-DRsecurotyresponsibilityCOL300.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dx-keGY9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://img.deusm.com/darkreading/MarilynCohodas/JuneCartoonJK-DRsecurotyresponsibilityCOL300.jpg" alt="Responsibility"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>secure</category>
      <category>devops</category>
      <category>development</category>
    </item>
    <item>
      <title>HTML to PDF in GO</title>
      <dc:creator>Juan Pablo Ramirez</dc:creator>
      <pubDate>Fri, 03 Jul 2020 11:39:03 +0000</pubDate>
      <link>https://forem.com/jpramirez/html-to-pdf-in-go-1ji1</link>
      <guid>https://forem.com/jpramirez/html-to-pdf-in-go-1ji1</guid>
      <description>&lt;p&gt;Recently I had a project that required to get thousands of URL's and convert them into PDF. After reviewing a few and complicated tools I decided to create my own.&lt;/p&gt;

&lt;p&gt;I admit that I'm bias towards GO, as I believe is an extremely versatile, fast and easy to pick up language. I did tried to write the same in Python, but this small tools cost me around 2 hours in GO, while.. in python in my case I would be still looking for examples and code styles.&lt;/p&gt;

&lt;p&gt;Another was the package system, I really like the whole concept of sending only a binary thing.&lt;/p&gt;

&lt;p&gt;It's simple enough for now, as it just uses chromium browser to do the PDF, I added classes and functions to also read an Excel file, as my project required to do it.&lt;/p&gt;

&lt;p&gt;I think that the best part is the command line capabilities, the configuration file and the usage of the makefile to automate the building and the release in github.&lt;/p&gt;

&lt;p&gt;I will continue to add functionality to this tool, please , feel free to comment, ask for features, PR and so on.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/epyphite/html2pdf"&gt;https://github.com/epyphite/html2pdf&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thanks!!&lt;/p&gt;

</description>
    </item>
    <item>
      <title> Distributed Rant Series Part 2</title>
      <dc:creator>Juan Pablo Ramirez</dc:creator>
      <pubDate>Fri, 08 Nov 2019 20:09:03 +0000</pubDate>
      <link>https://forem.com/jpramirez/distributed-rant-series-part-2-210j</link>
      <guid>https://forem.com/jpramirez/distributed-rant-series-part-2-210j</guid>
      <description>&lt;p&gt;Continuing with my "discussion" and following the guide that I started in my last post I would like to introduce my own personal choice for structuring go projects.&lt;/p&gt;

&lt;p&gt;So what's the long term goal:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Build Client / Server applications.&lt;/li&gt;
&lt;li&gt;Has to be web based.&lt;/li&gt;
&lt;li&gt;Has implement Security standards&lt;/li&gt;
&lt;li&gt;Has to be cross platform (lets cover non mobile OS for now)&lt;/li&gt;
&lt;li&gt;Keeping it as simple as possible...&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Follow &lt;a href="https://github.com/jpramirez/go-web-starterpack"&gt;this&lt;/a&gt; Github repository to keep track of this project.&lt;/p&gt;

&lt;p&gt;So... let's get started.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;[ CODE PART STARTS HERE ]&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;My development environment:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ubuntu 19.04. &lt;/li&gt;
&lt;li&gt;go1.13.1 linux/amd64&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For me getting used to GoLang GOPATH (later versions) was complicated, as an old Python developer, projects were all encapsulated in virtualenv and other horrors. ( Don't get me wrong, I love virtualenv)&lt;/p&gt;

&lt;p&gt;But I must admit that getting the order that GoLang required from the start boosted my productivity, solve a few issues, and reduce for sure many headaches.&lt;/p&gt;

&lt;p&gt;So my environment will start always here:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;
/home/&lt;span class="o"&gt;{&lt;/span&gt;user&lt;span class="o"&gt;}&lt;/span&gt;/projects/src/

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



&lt;p&gt;Clone my &lt;a href="https://github.com/jpramirez/go-web-starterpack"&gt;repo&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;➜ git clone git@github.com:jpramirez/go-web-starterpack.git

Cloning into &lt;span class="s1"&gt;'go-web-starterpack'&lt;/span&gt;...
remote: Enumerating objects: 4, &lt;span class="k"&gt;done&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;
remote: Counting objects: 100% &lt;span class="o"&gt;(&lt;/span&gt;4/4&lt;span class="o"&gt;)&lt;/span&gt;, &lt;span class="k"&gt;done&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;
remote: Compressing objects: 100% &lt;span class="o"&gt;(&lt;/span&gt;4/4&lt;span class="o"&gt;)&lt;/span&gt;, &lt;span class="k"&gt;done&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;
remote: Total 4 &lt;span class="o"&gt;(&lt;/span&gt;delta 0&lt;span class="o"&gt;)&lt;/span&gt;, reused 4 &lt;span class="o"&gt;(&lt;/span&gt;delta 0&lt;span class="o"&gt;)&lt;/span&gt;, pack-reused 0
Receiving objects: 100% &lt;span class="o"&gt;(&lt;/span&gt;4/4&lt;span class="o"&gt;)&lt;/span&gt;, &lt;span class="k"&gt;done&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;
➜  &lt;span class="nb"&gt;cd &lt;/span&gt;go-web-starterpack
➜  go-web-starterpack git:&lt;span class="o"&gt;(&lt;/span&gt;MakefileInit&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-ltrh&lt;/span&gt;
total 4,0K
&lt;span class="nt"&gt;-rw-r--r--&lt;/span&gt; 1 shellcheff shellcheff 2,4K nov  8 12:30 Makefile
➜  go-web-starterpack git:&lt;span class="o"&gt;(&lt;/span&gt;MakefileInit&lt;span class="o"&gt;)&lt;/span&gt; 


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



&lt;p&gt;I was never a fan of C, C++, Makefile, deps and all that, made my brain hurt just by thinking about it, so many dependencies, so many variables,  files, libraries... Why someone will create such a horror!!...&lt;/p&gt;

&lt;p&gt;Now.. to be honest the best way to start working with Go for me was a makefile.&lt;/p&gt;

&lt;p&gt;Easy, plain, no BS, is somehow pretty standard to any Linux environment.&lt;/p&gt;

&lt;p&gt;Lets check that file then&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;
&lt;span class="nv"&gt;TIME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;shell &lt;span class="nb"&gt;date&lt;/span&gt; +&lt;span class="s2"&gt;"%Y%m%d.%H%M%S"&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;
&lt;span class="nv"&gt;VERSION&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0.1.1-alpha-0.8
&lt;span class="nv"&gt;BINARY_NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;go-webstarter-go.v1

&lt;span class="nv"&gt;BINARY_NAME_SERVER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;go-webstarter-server.v1


BASE_FOLDER &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;shell &lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;
BUILD_FOLDER  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;shell &lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;/build

FLAGS_LINUX   &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;CGO_LDFLAGS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"-L./LIB -Wl,-rpath -Wl,&lt;/span&gt;&lt;span class="se"&gt;\$&lt;/span&gt;&lt;span class="s2"&gt;ORIGIN/LIB"&lt;/span&gt; &lt;span class="nv"&gt;CGO_ENABLED&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 &lt;span class="nv"&gt;GOOS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;linux &lt;span class="nv"&gt;GOARCH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;amd64  
FLAGS_DARWIN  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;OSXCROSS_NO_INCLUDE_PATH_WARNINGS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 &lt;span class="nv"&gt;MACOSX_DEPLOYMENT_TARGET&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;10.6 &lt;span class="nv"&gt;CC&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;o64-clang &lt;span class="nv"&gt;CXX&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;o64-clang++ &lt;span class="nv"&gt;CGO_ENABLED&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0
FLAGS_FREEBSD &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;GOOS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;freebsd &lt;span class="nv"&gt;GOARCH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;amd64 &lt;span class="nv"&gt;CGO_ENABLED&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1
FLAGS_WINDOWS &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;GOOS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;windows &lt;span class="nv"&gt;GOARCH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;amd64 &lt;span class="nv"&gt;CC&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;i686-w64-mingw32-gcc &lt;span class="nv"&gt;CGO_ENABLED&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 

GOFLAGS_WINDOWS &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nt"&gt;-ldflags&lt;/span&gt; &lt;span class="nt"&gt;-H&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;windowsgui


init: 
    @mkdir &lt;span class="nt"&gt;-vp&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;BASE_FOLDER&lt;span class="si"&gt;)&lt;/span&gt;/assets
    @mkdir &lt;span class="nt"&gt;-vp&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;BASE_FOLDER&lt;span class="si"&gt;)&lt;/span&gt;/build
    @mkdir &lt;span class="nt"&gt;-vp&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;BASE_FOLDER&lt;span class="si"&gt;)&lt;/span&gt;/cmd
    @mkdir &lt;span class="nt"&gt;-vp&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;BASE_FOLDER&lt;span class="si"&gt;)&lt;/span&gt;/config
    @mkdir &lt;span class="nt"&gt;-vp&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;BASE_FOLDER&lt;span class="si"&gt;)&lt;/span&gt;/extras
    @mkdir &lt;span class="nt"&gt;-vp&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;BASE_FOLDER&lt;span class="si"&gt;)&lt;/span&gt;/pkg/constants
    @mkdir &lt;span class="nt"&gt;-vp&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;BASE_FOLDER&lt;span class="si"&gt;)&lt;/span&gt;/web
    @mkdir &lt;span class="nt"&gt;-vp&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;BASE_FOLDER&lt;span class="si"&gt;)&lt;/span&gt;/third-party
    @mkdir &lt;span class="nt"&gt;-vp&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;BASE_FOLDER&lt;span class="si"&gt;)&lt;/span&gt;/api
    @mkdir &lt;span class="nt"&gt;-vp&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;BASE_FOLDER&lt;span class="si"&gt;)&lt;/span&gt;/vendor
    @echo &lt;span class="s2"&gt;"Creating Base Files"&lt;/span&gt; 
    @touch &lt;span class="si"&gt;$(&lt;/span&gt;BASE_FOLDER&lt;span class="si"&gt;)&lt;/span&gt;/pkg/constants/version.go
    @touch &lt;span class="si"&gt;$(&lt;/span&gt;BASE_FOLDER&lt;span class="si"&gt;)&lt;/span&gt;/vendor/packages_windows.txt
    @touch &lt;span class="si"&gt;$(&lt;/span&gt;BASE_FOLDER&lt;span class="si"&gt;)&lt;/span&gt;/vendor/packages_linux.txt
    @echo &lt;span class="s2"&gt;"# README BASE "&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;BASE_FOLDER&lt;span class="si"&gt;)&lt;/span&gt;/Readme.md







check-env:
    @mkdir &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;BUILD_FOLDER&lt;span class="si"&gt;)&lt;/span&gt;/dist/linux/bin
    @mkdir &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;BUILD_FOLDER&lt;span class="si"&gt;)&lt;/span&gt;/dist/windows/bin
    @mkdir &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;BUILD_FOLDER&lt;span class="si"&gt;)&lt;/span&gt;/dist/arm/bin
    @mkdir &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;BUILD_FOLDER&lt;span class="si"&gt;)&lt;/span&gt;/dist/osx/bin
    &lt;span class="nb"&gt;cp&lt;/span&gt; &lt;span class="nt"&gt;-R&lt;/span&gt; config &lt;span class="si"&gt;$(&lt;/span&gt;BUILD_FOLDER&lt;span class="si"&gt;)&lt;/span&gt;/dist/linux/
    &lt;span class="nb"&gt;cp&lt;/span&gt; &lt;span class="nt"&gt;-R&lt;/span&gt; config &lt;span class="si"&gt;$(&lt;/span&gt;BUILD_FOLDER&lt;span class="si"&gt;)&lt;/span&gt;/dist/windows/
    &lt;span class="nb"&gt;cp&lt;/span&gt; &lt;span class="nt"&gt;-R&lt;/span&gt; config &lt;span class="si"&gt;$(&lt;/span&gt;BUILD_FOLDER&lt;span class="si"&gt;)&lt;/span&gt;/dist/arm/
    &lt;span class="nb"&gt;cp&lt;/span&gt; &lt;span class="nt"&gt;-R&lt;/span&gt; config &lt;span class="si"&gt;$(&lt;/span&gt;BUILD_FOLDER&lt;span class="si"&gt;)&lt;/span&gt;/dist/osx/
    &lt;span class="nb"&gt;cp&lt;/span&gt; &lt;span class="nt"&gt;-R&lt;/span&gt; extras &lt;span class="si"&gt;$(&lt;/span&gt;BUILD_FOLDER&lt;span class="si"&gt;)&lt;/span&gt;/dist/linux/
    &lt;span class="nb"&gt;cp&lt;/span&gt; &lt;span class="nt"&gt;-R&lt;/span&gt; assets &lt;span class="si"&gt;$(&lt;/span&gt;BUILD_FOLDER&lt;span class="si"&gt;)&lt;/span&gt;/dist/linux/


&lt;span class="c"&gt;## Linting&lt;/span&gt;
lint:
    @echo &lt;span class="s2"&gt;"[lint] Running linter on codebase"&lt;/span&gt;
    @golint ./...


getdeps:
    ./getDeps.sh


versioning:
    ./version.sh &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;VERSION&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt; &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;TIME&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;

build/weblayer-linux:
    &lt;span class="nb"&gt;cd &lt;/span&gt;cmd/WebServer &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;FLAGS_LINUX&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt; go build &lt;span class="nt"&gt;-o&lt;/span&gt; &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;BUILD_FOLDER&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;/dist/linux/bin/&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;BINARY_NAME_SERVER&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt;


run/dev:
    &lt;span class="nb"&gt;cd &lt;/span&gt;build/dist/linux &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; bin/&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;BINARY_NAME_SERVER&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt; &lt;span class="nt"&gt;--config&lt;/span&gt; config/config.json

build/dev: check-env build/weblayer-linux run/dev

clean:
    &lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-Rvf&lt;/span&gt; build/dist/

startover:
    @rm &lt;span class="nt"&gt;-fr&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;BASE_FOLDER&lt;span class="si"&gt;)&lt;/span&gt;/assets
    @rm &lt;span class="nt"&gt;-fr&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;BASE_FOLDER&lt;span class="si"&gt;)&lt;/span&gt;/build
    @rm &lt;span class="nt"&gt;-fr&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;BASE_FOLDER&lt;span class="si"&gt;)&lt;/span&gt;/cmd
    @rm &lt;span class="nt"&gt;-fr&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;BASE_FOLDER&lt;span class="si"&gt;)&lt;/span&gt;/config
    @rm &lt;span class="nt"&gt;-fr&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;BASE_FOLDER&lt;span class="si"&gt;)&lt;/span&gt;/extras
    @rm &lt;span class="nt"&gt;-fr&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;BASE_FOLDER&lt;span class="si"&gt;)&lt;/span&gt;/pkg
    @rm &lt;span class="nt"&gt;-fr&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;BASE_FOLDER&lt;span class="si"&gt;)&lt;/span&gt;/web
    @rm &lt;span class="nt"&gt;-fr&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;BASE_FOLDER&lt;span class="si"&gt;)&lt;/span&gt;/third-party
    @rm &lt;span class="nt"&gt;-fr&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;BASE_FOLDER&lt;span class="si"&gt;)&lt;/span&gt;/api
    @rm &lt;span class="nt"&gt;-fr&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;BASE_FOLDER&lt;span class="si"&gt;)&lt;/span&gt;/vendor
    @rm &lt;span class="si"&gt;$(&lt;/span&gt;BASE_FOLDER&lt;span class="si"&gt;)&lt;/span&gt;/Readme.md

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



&lt;p&gt;So a few take away are:&lt;/p&gt;

&lt;p&gt;One makefile is all you need to jump start your project, will create the appropriate folders, README and directory structur.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;➜  go-web-starterpack git:&lt;span class="o"&gt;(&lt;/span&gt;MakefileInit&lt;span class="o"&gt;)&lt;/span&gt; make init
&lt;span class="nb"&gt;mkdir&lt;/span&gt;: created directory &lt;span class="s1"&gt;'/home/shellcheff/projects/src/github.com/epyphite/go-web-starterpack/assets'&lt;/span&gt;
&lt;span class="nb"&gt;mkdir&lt;/span&gt;: created directory &lt;span class="s1"&gt;'/home/shellcheff/projects/src/github.com/epyphite/go-web-starterpack/build'&lt;/span&gt;
&lt;span class="nb"&gt;mkdir&lt;/span&gt;: created directory &lt;span class="s1"&gt;'/home/shellcheff/projects/src/github.com/epyphite/go-web-starterpack/cmd'&lt;/span&gt;
&lt;span class="nb"&gt;mkdir&lt;/span&gt;: created directory &lt;span class="s1"&gt;'/home/shellcheff/projects/src/github.com/epyphite/go-web-starterpack/config'&lt;/span&gt;
&lt;span class="nb"&gt;mkdir&lt;/span&gt;: created directory &lt;span class="s1"&gt;'/home/shellcheff/projects/src/github.com/epyphite/go-web-starterpack/extras'&lt;/span&gt;
&lt;span class="nb"&gt;mkdir&lt;/span&gt;: created directory &lt;span class="s1"&gt;'/home/shellcheff/projects/src/github.com/epyphite/go-web-starterpack/pkg'&lt;/span&gt;
&lt;span class="nb"&gt;mkdir&lt;/span&gt;: created directory &lt;span class="s1"&gt;'/home/shellcheff/projects/src/github.com/epyphite/go-web-starterpack/pkg/constants'&lt;/span&gt;
&lt;span class="nb"&gt;mkdir&lt;/span&gt;: created directory &lt;span class="s1"&gt;'/home/shellcheff/projects/src/github.com/epyphite/go-web-starterpack/web'&lt;/span&gt;
&lt;span class="nb"&gt;mkdir&lt;/span&gt;: created directory &lt;span class="s1"&gt;'/home/shellcheff/projects/src/github.com/epyphite/go-web-starterpack/third-party'&lt;/span&gt;
&lt;span class="nb"&gt;mkdir&lt;/span&gt;: created directory &lt;span class="s1"&gt;'/home/shellcheff/projects/src/github.com/epyphite/go-web-starterpack/api'&lt;/span&gt;
&lt;span class="nb"&gt;mkdir&lt;/span&gt;: created directory &lt;span class="s1"&gt;'/home/shellcheff/projects/src/github.com/epyphite/go-web-starterpack/vendor'&lt;/span&gt;
Creating Base Files
➜  go-web-starterpack git:&lt;span class="o"&gt;(&lt;/span&gt;MakefileInit&lt;span class="o"&gt;)&lt;/span&gt; ✗ &lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-ltrh&lt;/span&gt;
total 48K
&lt;span class="nt"&gt;-rw-r--r--&lt;/span&gt; 1 shellcheff shellcheff 2,4K nov  8 12:30 Makefile
drwxr-xr-x 2 shellcheff shellcheff 4,0K nov  8 12:45 build
drwxr-xr-x 2 shellcheff shellcheff 4,0K nov  8 12:45 assets
drwxr-xr-x 2 shellcheff shellcheff 4,0K nov  8 12:45 extras
drwxr-xr-x 2 shellcheff shellcheff 4,0K nov  8 12:45 config
drwxr-xr-x 2 shellcheff shellcheff 4,0K nov  8 12:45 cmd
drwxr-xr-x 2 shellcheff shellcheff 4,0K nov  8 12:45 web
drwxr-xr-x 2 shellcheff shellcheff 4,0K nov  8 12:45 third-party
drwxr-xr-x 3 shellcheff shellcheff 4,0K nov  8 12:45 pkg
drwxr-xr-x 2 shellcheff shellcheff 4,0K nov  8 12:45 api
drwxr-xr-x 2 shellcheff shellcheff 4,0K nov  8 12:45 vendor
&lt;span class="nt"&gt;-rw-r--r--&lt;/span&gt; 1 shellcheff shellcheff   15 nov  8 12:45 Readme.md
➜  go-web-starterpack git:&lt;span class="o"&gt;(&lt;/span&gt;MakefileInit&lt;span class="o"&gt;)&lt;/span&gt; ✗ 

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



&lt;p&gt;As you notice we created a few folders and a few files, lets try to explain a little bit.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;build&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This folder will be use as output of any compilation and building, we can then divide it into distributions, operating systems and flavor ( we get to that later )&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;assets&lt;/strong&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In this case assets will hold anything http/web related. Such as css, images, js, vue.js and templates.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;extras&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Anything "extra", such as tls and ssl certificates, tool configurations, or things needed to run. In our particular project this will be TLS certificates.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;config&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Configuration file in json for our app. We will get to this later, but lets just say it easy to have a config/config.json available.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;cmd&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;From go standard "Main applications for this project." that means minimal code to run our application. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;web&lt;/strong&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here I will put all the code related to a webserver implementation, and any webapp. Usually I like to divide webserver.go with webapp.go. But we will get to that later.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;third-party&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Reserved for any plugin, auxiliary library, or later in this series protobuf libraries.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;pkg&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;THE MAIN LIBS&lt;/strong&gt; goes here, all the code for our app, implementations, classes, storage drivers etc...&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;api&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Will hold any specifications, like swagger or protobuf (later)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;vendor&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Coming from python I rather prefer to have my package.txt file. Don't get me wrong vendoring in Go is mature, I just... don't like it enough. And so far for me has been easier and simpler to get a vendor folder with a few txt files listing my dependencies.&lt;/p&gt;

&lt;p&gt;Again, this is my preferred way to order my code and projects, makes it easier for me to handle and specially to spin projects fast.&lt;/p&gt;

&lt;p&gt;In my next posts I will show you how to use this structure to easily spin a web server, create a configuration files, build and package it :)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;[ CODE PART ENDS HERE ]&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;[ RANT PART STARTS HERE ]&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Today is Friday... So will not be a rant directly associated with this post... &lt;/p&gt;

&lt;p&gt;I wish you all happy coding, and PM me for comments or fixes :)&lt;/p&gt;

</description>
      <category>go</category>
      <category>distributed</category>
      <category>security</category>
    </item>
    <item>
      <title>Distributed Rant Series Part 1</title>
      <dc:creator>Juan Pablo Ramirez</dc:creator>
      <pubDate>Thu, 07 Nov 2019 20:14:21 +0000</pubDate>
      <link>https://forem.com/jpramirez/distributed-rant-series-part-1-cdd</link>
      <guid>https://forem.com/jpramirez/distributed-rant-series-part-1-cdd</guid>
      <description>&lt;p&gt;In this rant series I would like to discuss a little bit about the new era of software development, users trends, security an son on.&lt;/p&gt;

&lt;p&gt;While that verbose rant is going I will introduce a series of guides to design , prepare,code and deploy micro applications using GO.&lt;/p&gt;

&lt;p&gt;First Question ... why GO?&lt;/p&gt;

&lt;p&gt;Well... Go is simple, very simple to learn, is cross-platform (or at least easier than many) is super fast compare with other cross-platform frameworks, the community is growing exponentially fast.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Building with Go in my opinion has major takeaways.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Simplicity of deployment and roll outs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Security, as long as you care about the communication layer. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Performance, as many task can be delegated to the client in a more efficient way.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For the sake of order, we will be following , generally this index:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Structuring Go Projects ( What I found to be more easy to follow)&lt;/li&gt;
&lt;li&gt;Golang Web with net/http and Gorilla Mux&lt;/li&gt;
&lt;li&gt;Templating with GO&lt;/li&gt;
&lt;li&gt;Serving Vue.js application (Why Vuejs... well...check later)&lt;/li&gt;
&lt;li&gt;Embedding databases ( bbolt with a few disclaimers and twists)&lt;/li&gt;
&lt;li&gt;gRPC , protobuf&lt;/li&gt;
&lt;li&gt;Client Server Communication&lt;/li&gt;
&lt;li&gt;Security, TLS and mtls.&lt;/li&gt;
&lt;li&gt;Publishing on the internet, securing applications,&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So we have a quite to cover.&lt;/p&gt;

&lt;p&gt;Let's narrow a bit the scope for those looking for specifics...&lt;/p&gt;

&lt;p&gt;We are going to talk about distributed systems while we code server-less applications, that can serve as both client and server, that can run locally to the user and communicate remotely.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;[RANT START HERE]&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Why? Well we are in the verge of a big change, or at least we are witnessing a technological revolution.&lt;/p&gt;

&lt;p&gt;New generations grow with tech in their cribs. They consume information faster and at a younger age. So it's only reasonable that we need to start considering this to build the next layers of society.&lt;/p&gt;

&lt;p&gt;We witness the danger of monopoly in a digitized world. Major vendors control influences, tells us what to do, what to wear, and people are seeking more resilient and dependable services. &lt;/p&gt;

&lt;p&gt;New generations are seeing this, and freedom, or what we know as freedom has become an emblem. &lt;/p&gt;

&lt;p&gt;But freedom without responsibility, without accountability, is not freedom. True freedom is both, being accountable and own our decisions.&lt;/p&gt;

&lt;p&gt;And in this verge is where us, the older generations, and the systems we lay and build, along with the speed and the new technology grown humans can have a chance for creating self sustain , resilient, mature software. &lt;/p&gt;

&lt;p&gt;In this "extremely extensive" series will try to give my grain of sand, by teaching what I believe is the root for owning software.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;[END OF RANT ]&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Hope you enjoy it :)&lt;/p&gt;

</description>
      <category>distributed</category>
      <category>go</category>
      <category>python</category>
      <category>security</category>
    </item>
    <item>
      <title>Audio Processing Services</title>
      <dc:creator>Juan Pablo Ramirez</dc:creator>
      <pubDate>Wed, 06 Nov 2019 14:28:53 +0000</pubDate>
      <link>https://forem.com/jpramirez/audio-processing-services-1m8m</link>
      <guid>https://forem.com/jpramirez/audio-processing-services-1m8m</guid>
      <description>&lt;p&gt;For a while now I have been working on different stream processing projects, one of them is related to the audio industry, that for some obscure reason seems to be forgotten.&lt;/p&gt;

&lt;p&gt;We hear daily advertisment, Games, E-Learning platforms, and instructional videos but we never think on how much work doing all that audio can cost.&lt;/p&gt;

&lt;p&gt;Digging deeper into the pains of audio editing, I discover that at a bareminimun cutting big audio wav files is truly a pain.&lt;/p&gt;

&lt;p&gt;For example one of the average work for an audio engineer is to get this huge file where a voice over records and cut silence between sentences, cut gazillions of files and number them to better organize the script or work.&lt;/p&gt;

&lt;p&gt;This can be tedious.... and super frustrating, time consuming and many other good adjetives.&lt;/p&gt;

&lt;p&gt;For that reason I started to create a microservice that will take a .wav file, use python3 ML, detect silence, cut it, compress it and return it back to the user.&lt;/p&gt;

&lt;p&gt;The main idea to cut editing time, but also make use of Golang net/http with tls support (generated with letsecrypt), Python 3 tornado API, templating and embedded database (using bbolt).&lt;/p&gt;

&lt;p&gt;You can see a working (super alpha) demo here&lt;/p&gt;

&lt;p&gt;&lt;a href="https://audio.epyphite.com/"&gt;https://audio.epyphite.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Of course in the case you take a look... be kind, it's in a super alpha state. &lt;/p&gt;

&lt;p&gt;Can only accept wav files and should be super fast returning the zip file wiht the chooped audio.&lt;/p&gt;

&lt;p&gt;If anybody is interested please PM me, or ask me, will be happy to help.&lt;/p&gt;

&lt;p&gt;Thanks!&lt;/p&gt;

</description>
      <category>audio</category>
      <category>go</category>
      <category>microservices</category>
      <category>python3</category>
    </item>
    <item>
      <title>ULID in GO Lang </title>
      <dc:creator>Juan Pablo Ramirez</dc:creator>
      <pubDate>Mon, 14 Oct 2019 02:32:31 +0000</pubDate>
      <link>https://forem.com/jpramirez/ulid-in-go-lang-1n3g</link>
      <guid>https://forem.com/jpramirez/ulid-in-go-lang-1n3g</guid>
      <description>&lt;p&gt;I have digging around for some time in audit-able ready log systems, as a core part of a decentralized environments and the core for trust between hosts. In epyphite (soon to be release) trust and transparency are important. For that reason we needed to come out with a way to generate a Unique Identifier that can be concurrent and millisecond friend. Specially when it comes to decentralized and high reliant systems.&lt;/p&gt;

&lt;p&gt;Its very important to be able to have a unique identifier, timestamped and ordered that can point and trace fast to different events.&lt;/p&gt;

&lt;p&gt;I came across with this github repo covering ULID that suited in that moment our needs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/oklog/ulid"&gt;https://github.com/oklog/ulid&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But we had a problem...&lt;br&gt;
In our environment millisecond are valuable, and by "secure by design" principle, we could not have events sharing the same timestamp ID. Every change is important, and the ability to search fast in between is at the most importance&lt;/p&gt;

&lt;p&gt;Searching around I found this great article&lt;/p&gt;

&lt;p&gt;&lt;a href="https://barkeywolf.consulting/posts/badger-event-store/"&gt;https://barkeywolf.consulting/posts/badger-event-store/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So I decided to code those specs into an small library to share on Github.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/epyphite/ulid"&gt;HERE&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Again.. all of this are WIP and they need to be expanded for use and documentation, but ...you will get the idea.&lt;/p&gt;

&lt;p&gt;The goal is to be able to generate sub buckets for a millisecond in a consistent, ordered , to have different sub id's that we can use. We do have limitations.. but for the specific use case that we were having this implementation was enough.&lt;/p&gt;

&lt;p&gt;:)&lt;/p&gt;

&lt;p&gt;Any comments, feel free.&lt;br&gt;
Happy Coding.&lt;/p&gt;

</description>
      <category>security</category>
      <category>audit</category>
      <category>go</category>
      <category>architecture</category>
    </item>
    <item>
      <title>News API in Golang</title>
      <dc:creator>Juan Pablo Ramirez</dc:creator>
      <pubDate>Sun, 13 Oct 2019 23:39:25 +0000</pubDate>
      <link>https://forem.com/jpramirez/news-api-in-golang-28c6</link>
      <guid>https://forem.com/jpramirez/news-api-in-golang-28c6</guid>
      <description>&lt;p&gt;This was a fast job coding weekend. While putting up a few series of news aggregation services for a new product I cross path with &lt;a href="https://newsapi.org"&gt;https://newsapi.org&lt;/a&gt;, is pretty slick, straight forward and above all free for developers.&lt;/p&gt;

&lt;p&gt;They have support for several programming languages but currently I'm a heavy gopher, and it turns out that they don't have support for it.&lt;/p&gt;

&lt;p&gt;So... I coded a fast API interface to integrate it into my projects (or use i as a small microservice) It's of course a WIP and I will continue to add features to it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/jpramirez/go-newsapi"&gt;Github REPO&lt;/a&gt;&lt;br&gt;
Hope you like it !&lt;/p&gt;

</description>
      <category>news</category>
      <category>go</category>
      <category>api</category>
    </item>
  </channel>
</rss>
