<?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: Stefan Wuthrich</title>
    <description>The latest articles on DEV Community by Stefan Wuthrich (@golangch).</description>
    <link>https://dev.to/golangch</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%2F106346%2F16935594-0dc0-4e65-8a15-8ac8c1631a02.jpg</url>
      <title>DEV Community: Stefan Wuthrich</title>
      <link>https://dev.to/golangch</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/golangch"/>
    <language>en</language>
    <item>
      <title>Business Problem without a Solution?</title>
      <dc:creator>Stefan Wuthrich</dc:creator>
      <pubDate>Sun, 20 Nov 2022 08:48:06 +0000</pubDate>
      <link>https://dev.to/golangch/business-problem-without-a-solution-ml8</link>
      <guid>https://dev.to/golangch/business-problem-without-a-solution-ml8</guid>
      <description>&lt;p&gt;Starting in January of next year, I will have more time to work on my own projects. To get in contact with real business problems, I launched the Free Solution Deal on &lt;a href="https://freesolutiondeal.com"&gt;https://freesolutiondeal.com&lt;/a&gt;, where business owners or managers can participate to get a chance to receive a free software-based solution that solves your business problem.&lt;/p&gt;

&lt;h1&gt;
  
  
  The Deal Conditions
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;You have a problem in your business that is not resolved or not well resolved, and can imagine that there could be a (better) software-based solution.&lt;/li&gt;
&lt;li&gt;You must NOT provide or have any solution in mind for it.
You give me a clear description of your problem and what company you have or are working for.&lt;/li&gt;
&lt;li&gt;I will preselect some problems until end of 2022 and then start doing interviews if you are part of them. During this process, I will learn more about the problem and try to propose some rough solutions.&lt;/li&gt;
&lt;li&gt;I will, after that phase, select a max of three problems where I define a detailed solution which I then present to the “problem owners”&lt;/li&gt;
&lt;li&gt;I will start to build the proposed solution If at least one of them agrees that they can resolve the problem and deliver them as a Software as a Service product.&lt;/li&gt;
&lt;li&gt;You as the selected problem owner, will get the solution first, 100% free, for a lifetime, with all initial and future features and exclusive support through me.
*You will get a contract with my US company assuring the usage right for your company&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Read more and participate on &lt;a href="//freesolutiondeal.com"&gt;freesolutiondeal.com&lt;/a&gt;
&lt;/h2&gt;

</description>
      <category>business</category>
      <category>software</category>
      <category>show</category>
    </item>
    <item>
      <title>I launched my 7th Job Board, now for Java Jobs</title>
      <dc:creator>Stefan Wuthrich</dc:creator>
      <pubDate>Thu, 11 Aug 2022 09:44:11 +0000</pubDate>
      <link>https://dev.to/golangch/i-launched-my-7th-job-board-now-for-java-jobs-127n</link>
      <guid>https://dev.to/golangch/i-launched-my-7th-job-board-now-for-java-jobs-127n</guid>
      <description>&lt;p&gt;Beginning of 2019 I launched fullstackjob.com as a single-tenant &lt;a href="https://fullstackjob.com"&gt;Job Board for Full Stack Jobs&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;After that I did a refactoring and built the engine to be multi-tenant, to be able to run multiple job boards with same instance of stack (Go based API/Webserver, Vue Frontend, ArangoDB) &lt;/p&gt;

&lt;p&gt;Beginning of this year I did a complete new multi-tenant engine which is not more using Vue, but SSR plus a bit of Alpine JS to improve SEO. (btw I continue to use Vue 3 for other &lt;a href="https://altafino.com/portfolio"&gt;software projects&lt;/a&gt;, where SEO is not so important)&lt;/p&gt;

&lt;p&gt;Since then I launched more 5 Job Boards:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://reactjsjob.com"&gt;React &amp;amp; ReactJS Jobs: https://reactjsjob.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://javascriptjob.xyz"&gt;Java Script Jobs: https://javascriptjob.xyz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pythonjob.xyz"&gt;Python Jobs: https://pythonjob.xyz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://rustjob.xyz"&gt;Rust Developer Jobs: https://rustjob.xyz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://golangjob.xyz"&gt;Golang Jobs: https://golangjob.xyz&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  And now, Java Job Board javajobs.pro is launched
&lt;/h2&gt;

&lt;p&gt;The new &lt;a href="https://javajobs.pro"&gt;Java Jobs Board&lt;/a&gt; is ready to find Java related Jobs and hiring Java developers.&lt;/p&gt;

&lt;p&gt;You can of course also find &lt;a href="https://javajobs.pro/remote/jobs"&gt;Remote Java Jobs&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cheers Stefan&lt;br&gt;
&lt;a href="https://altafino.com"&gt;Full-Stack Software Developer&lt;/a&gt;&lt;/p&gt;

</description>
      <category>career</category>
      <category>java</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Take the poll - Golang Open Source Projects</title>
      <dc:creator>Stefan Wuthrich</dc:creator>
      <pubDate>Wed, 27 Jul 2022 11:04:47 +0000</pubDate>
      <link>https://dev.to/golangch/take-to-poll-golang-open-source-projects-29em</link>
      <guid>https://dev.to/golangch/take-to-poll-golang-open-source-projects-29em</guid>
      <description>&lt;p&gt;I'm doing a Poll about how Golang Developers are involved in Open Source Projects, or as owner or contributor to other Go related projects.&lt;/p&gt;

&lt;p&gt;Please participate as a Go Dev and take the chance to reply with your Golang OS repo url to get some drive.&lt;/p&gt;

&lt;p&gt;Thanks and Cheers&lt;br&gt;
Stefan&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/golangch/status/1552192383961505793"&gt;https://twitter.com/golangch/status/1552192383961505793&lt;/a&gt;&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>go</category>
    </item>
    <item>
      <title>Thank you to over 9000 #golang followers</title>
      <dc:creator>Stefan Wuthrich</dc:creator>
      <pubDate>Mon, 11 Oct 2021 04:34:59 +0000</pubDate>
      <link>https://dev.to/golangch/thank-you-to-over-9000-golang-followers-131k</link>
      <guid>https://dev.to/golangch/thank-you-to-over-9000-golang-followers-131k</guid>
      <description>&lt;p&gt;Yesterday I reached 9000 Followers for my &lt;a href="https://twitter.com/golangch"&gt;@golangch&lt;/a&gt; Twitter account.&lt;/p&gt;

&lt;p&gt;Some asked me, how I reached this number.&lt;br&gt;
Well, there is no strategy or trick. I tweet since Jan 2017, as a human (there are a lot of bots out there...) about Go related stuff, mainly libs/packages/apps written in/for Golang and interesting articles about Go.&lt;br&gt;
Rarely I use it to promote Golang Jobs from my Golang based &lt;a href="https://golangjob.xyz"&gt;Golang Job Board&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thanks to all Gophers following me.&lt;/p&gt;

</description>
      <category>go</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Remote Jobs for Javascript, Go, Python and Fullstack Developers</title>
      <dc:creator>Stefan Wuthrich</dc:creator>
      <pubDate>Mon, 19 Jul 2021 08:26:25 +0000</pubDate>
      <link>https://dev.to/golangch/remote-jobs-for-javascript-go-python-and-fullstack-developers-4c8f</link>
      <guid>https://dev.to/golangch/remote-jobs-for-javascript-go-python-and-fullstack-developers-4c8f</guid>
      <description>&lt;p&gt;We know it all...&lt;/p&gt;

&lt;p&gt;Since Covid 19 changed all our lives, Remote Jobs offers are growing, as many companies realized that this mode of work works fine for them and can attract new developers out there.&lt;/p&gt;

&lt;p&gt;I have run now about three years four developer-related Job Boards, which have since begun a Remote Filter for Job Candidates and, of course, those options for companies adding Remote Jobs.&lt;/p&gt;

&lt;p&gt;Here the boards:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://fullstackjob.com/remote/jobs"&gt;Remote Fullstack Developer Jobs&lt;/a&gt;&lt;br&gt;
&lt;a href="https://reactjsjob.com/remote/jobs"&gt;Remote React Jobs&lt;/a&gt;&lt;br&gt;
&lt;a href="https://javascriptjob.xyz/remote/jobs"&gt;Remote Javascript Jobs&lt;/a&gt;&lt;br&gt;
&lt;a href="https://pythonjob.xyz/remote/jobs"&gt;Remote Python Jobs&lt;/a&gt;&lt;br&gt;
&lt;a href="https://golangjob.xyz/remote/jobs"&gt;Remote Golang Jobs&lt;/a&gt;&lt;br&gt;
&lt;a href="https://golangjob.xyz/remote/jobs"&gt;Remote Rust Jobs&lt;/a&gt;&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>go</category>
      <category>python</category>
      <category>javascript</category>
    </item>
    <item>
      <title>How to use Google Places API with Caching ( complete Golang/React Source )</title>
      <dc:creator>Stefan Wuthrich</dc:creator>
      <pubDate>Sat, 30 Jan 2021 08:36:42 +0000</pubDate>
      <link>https://dev.to/golangch/avoid-high-costs-with-google-places-api-go-react-54b2</link>
      <guid>https://dev.to/golangch/avoid-high-costs-with-google-places-api-go-react-54b2</guid>
      <description>&lt;p&gt;This day's I started with a new side-project named &lt;a href="https://produtomania.com" rel="noopener noreferrer"&gt;ProdutoMania&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This project's main feature is to find products from my home country at the place I'm currently staying. &lt;br&gt;
So I need a selector of location and to use Google Place/Maps API is on the hand. &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%2Fdmyxfsk83b9z4d7s7cf5.png" 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%2Fdmyxfsk83b9z4d7s7cf5.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, this API is paid as soon usage is getting above a certain amount.&lt;/p&gt;

&lt;p&gt;This can be risky if you do put the queries as autocomplete/typehead directly fetching results on the client-side. So I decided to call backend API with a search term and the handler on the server-side take control of the usage of the API.&lt;/p&gt;

&lt;p&gt;This opens the possibility to do throttling (not part of this post) and caching. Caching makes much sense, as locations do not change every minute, hour, not even days. &lt;br&gt;
There is a max period of time allowed by Google for caching, at the time of writing this post it was 30 days.&lt;/p&gt;

&lt;p&gt;To build the API I use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go with Chi Router (could also be done without, just using net/http standard package)&lt;/li&gt;
&lt;li&gt;Google's official Go Client for Google Maps&lt;/li&gt;
&lt;li&gt;Caching Middleware &lt;a href="https://github.com/victorspringer/http-cache" rel="noopener noreferrer"&gt;victorspringer/http-cache&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Victor Springer's Caching Middleware is a perfect fit to cache RESTful API's. It supports memory, Redis, DynamoDB, and other storage for the cache. &lt;/p&gt;

&lt;p&gt;here the config part of the story:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="c"&gt;// Cache Middleware Config&lt;/span&gt;
&lt;span class="n"&gt;memcached&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;memory&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;NewAdapter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;memory&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AdapterWithAlgorithm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;memory&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;LRU&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="n"&gt;memory&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AdapterWithCapacity&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;1000000&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
    &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Exit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;cacheClient&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;cache&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;NewClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;cache&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ClientWithAdapter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;memcached&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="n"&gt;cache&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ClientWithTTL&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;24&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Hour&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="n"&gt;cache&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ClientWithRefreshKey&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"opn"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then I define the handler and routes applying the middleware:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="c"&gt;// Cache Google Place API calls&lt;/span&gt;
&lt;span class="n"&gt;hLocation&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HandlerFunc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;handler&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GetLocations&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Route&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;func&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="n"&gt;chi&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Router&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="c"&gt;// location autocomplete&lt;/span&gt;
&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;With&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/{term}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;CacheClient&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Middleware&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hLocation&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ServeHTTP&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;On Frontend Side I use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React with Webpack, using my own &lt;a href="https://github.com/altafino/react-webpack-5-tailwind-2" rel="noopener noreferrer"&gt;React 17/Webpack/ Boilerplate&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Downshift as a flexible Autocomplete/Dropdown Component&lt;/li&gt;
&lt;li&gt;Debounced-fn Package &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Debouncing is important for the typeahead function to not call API on every onChange triggered by a Char. It also does not make sense to send just one char to API.&lt;/p&gt;

&lt;p&gt;here the useLocation Hook/Service part of code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;useLocation&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt; &lt;span class="nx"&gt;isLoading&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="nx"&gt;dispatch&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useReducer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nx"&gt;reducer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;initialState&lt;/span&gt;
  &lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fetchLocationResults&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;debounce&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;searchString&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;searchString&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;locationUrl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`http://localhost:9090/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;searchString&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;
        &lt;span class="nf"&gt;dispatch&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;actionTypes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;FETCH_REQUEST&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
        &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;axios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;locationUrl&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
          &lt;span class="nf"&gt;dispatch&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
            &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;actionTypes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;FETCH_SUCCESS&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="na"&gt;results&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="p"&gt;})&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="nf"&gt;dispatch&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;actionTypes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;FETCH_FAILURE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;wait&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;400&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;isLoading&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;fetchLocationResults&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;You can get the full source to check the details:&lt;br&gt;
&lt;a href="https://github.com/stefanwuthrich/cached-google-places" rel="noopener noreferrer"&gt;https://github.com/stefanwuthrich/cached-google-places&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Have fun (without high invoice from Google :-) )&lt;/p&gt;

</description>
      <category>go</category>
      <category>javascript</category>
      <category>react</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Help me do a Go Newsletter you will like</title>
      <dc:creator>Stefan Wuthrich</dc:creator>
      <pubDate>Fri, 15 Jan 2021 04:49:53 +0000</pubDate>
      <link>https://dev.to/golangch/help-me-do-a-go-newsletter-you-will-like-19f3</link>
      <guid>https://dev.to/golangch/help-me-do-a-go-newsletter-you-will-like-19f3</guid>
      <description>&lt;p&gt;I’m Stefan, the maintainer of this new Go Newsletter.&lt;/p&gt;

&lt;p&gt;I started with Go about 5 years ago, when in the company I work for, our CTO showed me the hefty stuff he codes in Go and explains why he chooses that company is using Go. ( thank you for that CTO, I know you read this 😄 )&lt;/p&gt;

&lt;p&gt;I’m not working as Dev in this company, but product management, but code since “Shining” and before Acoustic coupler’s (google about….) entered in the IT-sphere. I always want to be “state of the art” with coding, that Dev’s I work with can not tell me any story, and I can do Sideprojects, like the &lt;a href="https://golangjob.xyz"&gt;Go Developer Job Board&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Since 2017 I tweet daily about new or update Go Libraries, go-based open-source software, and have on &lt;a href="https://twitter.com/golangch"&gt;@golangch&lt;/a&gt; over 6300 Followers.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--R6Uxi_kR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/uvg6s4vjiv34a7mdmx3l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--R6Uxi_kR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/uvg6s4vjiv34a7mdmx3l.png" alt="Alt Text" width="800" height="728"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now I start this Newsletter to have a way to write a bit more about the interesting stuff I find when I schedule my tweets via some other side-project, I do, plus use this channel to get to some discussions with the Go Community.&lt;br&gt;
NOW… What you need to work (please 😄 )&lt;/p&gt;

&lt;p&gt;First, please tell me in the comments on what frequency of newsletter you prefer&lt;br&gt;
bi-weekly, tri-weekly (uncommon, but why not), or monthly.&lt;/p&gt;

&lt;p&gt;Second. What are you most interested in:&lt;br&gt;
a) Go Packages/Libraries (to use in your projects)&lt;br&gt;
b) Go-based tools, open-source software ( to use and/or to study code )&lt;br&gt;
c) Golang related content, like tutorials, blog posts.&lt;/p&gt;

&lt;p&gt;Please subscribe and comment here:&lt;br&gt;
&lt;a href="https://golang1.substack.com/p/welcome-first-you-need-to-work-"&gt;Golang1 Newsletter&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thank you and until soon&lt;br&gt;
Stefan &lt;/p&gt;

</description>
      <category>go</category>
      <category>showdev</category>
    </item>
    <item>
      <title>My React 17 Boilerplate (with Webpack 5, Tailwind 2)</title>
      <dc:creator>Stefan Wuthrich</dc:creator>
      <pubDate>Sun, 03 Jan 2021 05:45:21 +0000</pubDate>
      <link>https://dev.to/golangch/my-first-public-react-boilerplate-with-wp-5-tailwind-2-28pc</link>
      <guid>https://dev.to/golangch/my-first-public-react-boilerplate-with-wp-5-tailwind-2-28pc</guid>
      <description>&lt;p&gt;I published my first React Boilerplate with React 17, Tailwind 2, using babel, sass, with a hot dev server and an optimized production build.&lt;br&gt;
Any feedback is welcome :-)&lt;/p&gt;

&lt;h2&gt;
  
  
  Looking for a React Job?
&lt;/h2&gt;

&lt;p&gt;Checkout the &lt;a href="https://reactjsjob.com"&gt;React Jobs Board&lt;/a&gt; with OnSite and Remote React Jobs&lt;/p&gt;

&lt;h3&gt;
  
  
  Updated (newest first):
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;added SVGR as a webpack loader to import your SVG directly as a React Component.&lt;/li&gt;
&lt;li&gt;added build-staging script. same as build but using .env.staging&lt;/li&gt;
&lt;li&gt;added dotenv-webpack to handle process.env.VARS&lt;/li&gt;
&lt;li&gt;added Prettier&lt;/li&gt;
&lt;li&gt;added react-refresh-webpack-plugin for HMR&lt;/li&gt;
&lt;li&gt;2 PR's accepted&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://github.com/altafino/react-webpack-5-tailwind-2"&gt;Github repo&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git clone https://github.com/altafino/react-webpack-5-tailwind-2.git
cd react-webpack-5-tailwind-2
yarn / npm i
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Usage
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Development server
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yarn start / npm start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can view the development server at &lt;code&gt;localhost:3000&lt;/code&gt;.&lt;br&gt;
(change port in ./config/webpack.dev.js)&lt;/p&gt;

&lt;h3&gt;
  
  
  Production build
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; yarn build / npm run build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://reactjs.org/"&gt;React&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://webpack.js.org/"&gt;webpack&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://tailwindcss.com"&gt;Tailwind 2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://postcss.org/"&gt;PostCss&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://babeljs.io/"&gt;Babel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://sass-lang.com/"&gt;Sass&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://eslint.org/"&gt;Eslint&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Dependencies
&lt;/h2&gt;

&lt;h3&gt;
  
  
  webpack
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/webpack/webpack"&gt;&lt;code&gt;webpack&lt;/code&gt;&lt;/a&gt; - Module and asset bundler.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/webpack/webpack-cli"&gt;&lt;code&gt;webpack-cli&lt;/code&gt;&lt;/a&gt; - Command line interface for webpack&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/webpack/webpack-dev-server"&gt;&lt;code&gt;webpack-dev-server&lt;/code&gt;&lt;/a&gt; - Development server for webpack&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/survivejs/webpack-merge"&gt;&lt;code&gt;webpack-merge&lt;/code&gt;&lt;/a&gt; - Simplify development/production configuration&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/kentcdodds/cross-env"&gt;&lt;code&gt;cross-env&lt;/code&gt;&lt;/a&gt; - Cross platform configuration&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Babel
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.npmjs.com/package/@babel/core"&gt;&lt;code&gt;@babel/core&lt;/code&gt;&lt;/a&gt; - Transpile ES6+ to backwards compatible JavaScript&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://babeljs.io/docs/en/babel-plugin-proposal-class-properties"&gt;&lt;code&gt;@babel/plugin-proposal-class-properties&lt;/code&gt;&lt;/a&gt; - Use properties directly on a class (an example Babel config)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://babeljs.io/docs/en/babel-preset-env"&gt;&lt;code&gt;@babel/preset-env&lt;/code&gt;&lt;/a&gt; - Smart defaults for Babel&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Loaders
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://webpack.js.org/loaders/babel-loader/"&gt;&lt;code&gt;babel-loader&lt;/code&gt;&lt;/a&gt; - Transpile files with Babel and webpack&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://webpack.js.org/loaders/sass-loader/"&gt;&lt;code&gt;sass-loader&lt;/code&gt;&lt;/a&gt; - Load SCSS and compile to CSS&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/sass/node-sass"&gt;&lt;code&gt;node-sass&lt;/code&gt;&lt;/a&gt; - Node Sass&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://webpack.js.org/loaders/css-loader/"&gt;&lt;code&gt;css-loader&lt;/code&gt;&lt;/a&gt; - Resolve CSS imports&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://webpack.js.org/loaders/postcss-loader/"&gt;&lt;code&gt;postcss-loader&lt;/code&gt;&lt;/a&gt; - Loader to process CSS with PostCSS&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://webpack.js.org/loaders/style-loader/"&gt;&lt;code&gt;style-loader&lt;/code&gt;&lt;/a&gt; - Inject CSS into the DOM&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Eslint
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.npmjs.com/package/eslint-config-prettier"&gt;&lt;code&gt;eslint-config-prettier&lt;/code&gt;&lt;/a&gt; - Turns off all rules that are unnecessary or might conflict with Prettier.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.npmjs.com/package/eslint-import-resolver-alias"&gt;&lt;code&gt;eslint-import-resolver-alias&lt;/code&gt;&lt;/a&gt; - a simple Node behavior import resolution plugin for eslint-plugin-import, supporting module alias.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.npmjs.com/package/eslint-plugin-babel"&gt;&lt;code&gt;eslint-plugin-babel&lt;/code&gt;&lt;/a&gt; - an eslint rule plugin companion to babel-eslint.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.npmjs.com/package/eslint-plugin-import"&gt;&lt;code&gt;eslint-plugin-import&lt;/code&gt;&lt;/a&gt; - This plugin intends to support linting of ES2015+ (ES6+) import/export syntax, and prevent issues with misspelling of file paths and import names.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.npmjs.com/package/eslint-plugin-prettier"&gt;&lt;code&gt;eslint-plugin-prettier&lt;/code&gt;&lt;/a&gt; - Runs prettier as an eslint rule.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.npmjs.com/package/eslint-plugin-react"&gt;&lt;code&gt;eslint-plugin-react&lt;/code&gt;&lt;/a&gt; - React specific linting rules for ESLint.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Plugins
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/johnagan/clean-webpack-plugin"&gt;&lt;code&gt;clean-webpack-plugin&lt;/code&gt;&lt;/a&gt; - Remove/clean build folders&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/webpack-contrib/copy-webpack-plugin"&gt;&lt;code&gt;copy-webpack-plugin&lt;/code&gt;&lt;/a&gt; - Copy files to build directory&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/jantimon/html-webpack-plugin"&gt;&lt;code&gt;html-webpack-plugin&lt;/code&gt;&lt;/a&gt; - Generate HTML files from template&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/webpack-contrib/mini-css-extract-plugin"&gt;&lt;code&gt;mini-css-extract-plugin&lt;/code&gt;&lt;/a&gt; - Extract CSS into separate files&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/NMFR/optimize-css-assets-webpack-plugin"&gt;&lt;code&gt;optimize-css-assets-webpack-plugin&lt;/code&gt;&lt;/a&gt; - Optimize and minimize CSS assets&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/webpack-contrib/terser-webpack-plugin"&gt;&lt;code&gt;terser-webpack-plugin&lt;/code&gt;&lt;/a&gt; - Optimize and minimize JavaScript&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cheers&lt;br&gt;
&lt;a href="https://altafino.com"&gt;Stefan - Fullstack Developer - Go/JS&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>react</category>
      <category>showdev</category>
      <category>tailwindcss</category>
    </item>
    <item>
      <title>Which Package/Library you are missing in Go, which you know from eg Python, C#, Java?</title>
      <dc:creator>Stefan Wuthrich</dc:creator>
      <pubDate>Fri, 18 Dec 2020 06:30:31 +0000</pubDate>
      <link>https://dev.to/golangch/which-package-library-you-are-missing-in-go-which-you-know-from-eg-python-c-java-2i1e</link>
      <guid>https://dev.to/golangch/which-package-library-you-are-missing-in-go-which-you-know-from-eg-python-c-java-2i1e</guid>
      <description>&lt;p&gt;What is your answer on "Which Package/Library you are missing in Go, which you know from eg Python, C#, Java?"&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.reddit.com/r/golang/comments/kfdawb/which_packagelibrary_you_are_missing_in_go_which/"&gt;https://www.reddit.com/r/golang/comments/kfdawb/which_packagelibrary_you_are_missing_in_go_which/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>go</category>
      <category>reddit</category>
    </item>
    <item>
      <title>What I developed over the last months weekends</title>
      <dc:creator>Stefan Wuthrich</dc:creator>
      <pubDate>Sat, 05 Dec 2020 05:40:20 +0000</pubDate>
      <link>https://dev.to/golangch/what-i-developed-over-the-last-months-weekends-5e84</link>
      <guid>https://dev.to/golangch/what-i-developed-over-the-last-months-weekends-5e84</guid>
      <description>&lt;p&gt;Recently I started working on a new project called  &lt;a href="https://nboarding.com"&gt;nboarding.com&lt;/a&gt;. This is a tool to help founders, owners, or team managers onboard new people and delegate tasks efficiently.&lt;/p&gt;

&lt;p&gt;Before that, I built &lt;a href="https://omnited.com"&gt;omnited.com&lt;/a&gt;, a kind of JIRA to manage tasks and projects. I wrote about that in a post  &lt;a href="https://dev.to/golangch/i-built-my-own-jira-45l8"&gt;I built my own little JIRA&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vUy-Hh5D--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/wkttghxokjy4asv06xoa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vUy-Hh5D--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/wkttghxokjy4asv06xoa.png" alt="Alt Text" width="800" height="398"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Before that, and I'm now back working on that one, I built  &lt;a href="https://kunvenu.com"&gt;Kunvenu Social Media Posting Tool for Teams&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It allows the admin to set up teams, invites team members, and then share the social media accounts (Twitter, Facebook Pages and LinkedIn) with teams.&lt;br&gt;
Team Members can then write posts and schedule them to send out to multiple social media accounts in one shot.&lt;br&gt;
I use this tool for posts of to &lt;a href="https://twitter.com/golangch"&gt;#golang Twitter&lt;/a&gt; and Facebook accounts and also for Developer Job Posts for my "oldest" project  &lt;a href="https://fullstackjob.com"&gt;Fullstack Developer Job Board&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Learning from these experiences I will now introduce new features for &lt;a href="https://kunvenu.com"&gt;kunvenu.com&lt;/a&gt; like cloning of posts, more metrics, probably more channels like Telegram Groups.&lt;/p&gt;

&lt;p&gt;Stay tuned&lt;br&gt;
Stefan&lt;br&gt;
&lt;a href="https://altafino.com"&gt;Go Developer - Fullstack Developer&lt;/a&gt;&lt;/p&gt;

</description>
      <category>showdev</category>
    </item>
    <item>
      <title>Ask me anything: Daytime CPO, Best-time Maker</title>
      <dc:creator>Stefan Wuthrich</dc:creator>
      <pubDate>Mon, 23 Nov 2020 05:46:08 +0000</pubDate>
      <link>https://dev.to/golangch/daytime-cpo-best-time-maker-with-over-25y-exp-2cog</link>
      <guid>https://dev.to/golangch/daytime-cpo-best-time-maker-with-over-25y-exp-2cog</guid>
      <description>&lt;p&gt;I worked in different Roles since I started to work professionally with Software Development (without any degree) over 25 years ago. From "Web-Master" to CTO/CEO, as an owner, employee, and freelancer, from Switzerland, Brazil, Serbia... &lt;/p&gt;

&lt;p&gt;Well, AMA, if you believe me, that today I don't work with Cobol and Pascal ;-)&lt;/p&gt;

&lt;p&gt;Cheers&lt;br&gt;
Stefan&lt;br&gt;
&lt;a href="https://www.altafino.com"&gt;Full-Stack Dev &amp;amp; Maker&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ama</category>
    </item>
    <item>
      <title>I built my own little JIRA alternative</title>
      <dc:creator>Stefan Wuthrich</dc:creator>
      <pubDate>Fri, 11 Sep 2020 02:27:47 +0000</pubDate>
      <link>https://dev.to/golangch/i-built-my-own-jira-45l8</link>
      <guid>https://dev.to/golangch/i-built-my-own-jira-45l8</guid>
      <description>&lt;p&gt;Since I built my job boards ( eg &lt;a href="https://fullstackjob.com"&gt;https://fullstackjob.com&lt;/a&gt; ) it's now over a year passed and I also built my social media post/schedule tool &lt;a href="https://kunvenu.com"&gt;Kunvenu&lt;/a&gt; which I daily use for my #go posts via &lt;a href="https://twitter.com/golangch"&gt;@golangch&lt;/a&gt;, reaching 5000 followers about 2 weeks ago.&lt;/p&gt;

&lt;p&gt;What I worked on over the weekends for the last 4 months is my own Project Management Tool, named &lt;a href="https://omnited.com"&gt;omnited&lt;/a&gt; &lt;br&gt;
It's a Project and Task management, where you can define eg what kind of Status, Priorities and Issue Types you want (on the project, folder, and list level). &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--p1tvfKPW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/3dja0i9dp03rla0i0uhs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--p1tvfKPW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/3dja0i9dp03rla0i0uhs.png" alt="Alt Text" width="800" height="396"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You have a List of Peoples working in your company (where not all must be Users) and can invite new ones via the app.&lt;br&gt;
As a User or Project Manager, you have now 2 different types of Issue Views, List, and Board.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--CgwBfwdd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/6jsczm38if8xoy7706os.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--CgwBfwdd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/6jsczm38if8xoy7706os.png" alt="Alt Text" width="800" height="398"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I built the tool with the following Stack:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go backend, Chi Router, own auth/authz implementation&lt;/li&gt;
&lt;li&gt;ArangoDB and Redis for data&lt;/li&gt;
&lt;li&gt;Nsq for queueing&lt;/li&gt;
&lt;li&gt;Frontend Vue, Vuex, Bulma (with Buefy components)&lt;/li&gt;
&lt;li&gt;Hosting on own Server with Rancher 1.x/Docker&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I use the tool now for the planning of my new project I started last weekend, which is named nBoarding and is a tool that helps founders and mainly small business owners and team leaders to onboard new staff members or freelancers with automatable predefined workflows.&lt;br&gt;
Here I will use the first-time Nuxt for Frontend. Let's see. SSR is cool, but has a cost :-)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0UJIxT4S--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/1ct1pt342ja7himq90fr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0UJIxT4S--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/1ct1pt342ja7himq90fr.png" alt="Alt Text" width="800" height="399"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you want to be my Beta Tester I have a Lifetime Deal running on &lt;a href="https://omnited.com"&gt;https://omnited.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cheers &lt;br&gt;
Stefan&lt;br&gt;
&lt;a href="https://altafino.com"&gt;altafino&lt;/a&gt;&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
