<?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: donvitocodes</title>
    <description>The latest articles on DEV Community by donvitocodes (@donvitocodes).</description>
    <link>https://dev.to/donvitocodes</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%2F129149%2F22e98b79-4c4c-4eaa-a30e-c3bdb1772051.png</url>
      <title>DEV Community: donvitocodes</title>
      <link>https://dev.to/donvitocodes</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/donvitocodes"/>
    <language>en</language>
    <item>
      <title>Using Bun 1.0 for Serving APIs with Vercel AI SDK and OpenAI</title>
      <dc:creator>donvitocodes</dc:creator>
      <pubDate>Thu, 14 Sep 2023 15:32:10 +0000</pubDate>
      <link>https://dev.to/donvitocodes/using-bun-10-for-serving-apis-with-vercel-ai-sdk-and-openai-4514</link>
      <guid>https://dev.to/donvitocodes/using-bun-10-for-serving-apis-with-vercel-ai-sdk-and-openai-4514</guid>
      <description>&lt;p&gt;Just a few days ago, the much-anticipated Bun 1.0 was launched, bringing a fresh perspective to the world of JavaScript. This new Javascript runtime and toolkit, etc. promises the fastest execution times and better developer experience.&lt;/p&gt;

&lt;p&gt;Although I come from a backend development background and wouldn’t consider myself a seasoned JavaScript expert, I’ve always had an interest in exploring the various tools and frameworks. So, when Bun 1.0 made its debut a few days ago, I felt compelled to dive in and see what it had to offer, especially given that this realm is somewhat new to me.&lt;/p&gt;

&lt;p&gt;Since I am playing around with OpenAI, I created a simple API using Bun and the Vercel AI SDK. The API serves chat completion requests from the chat web application I built using NextJS 13 and shadcn/ui.&lt;/p&gt;

&lt;p&gt;It was really nice since it supports streaming out of the box! Since I already implemented the API in Next13, it was pretty straightforward to port the code to Bun.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const response = await openai.chat.completions.create({
                    model: 'gpt-3.5-turbo',
                    messages,
                    stream: true,
                });

// Assuming OpenAIStream is a function that processes the response for streaming - not working yet
const stream = OpenAIStream(response);

// Return the streaming response - not working yet
return new StreamingTextResponse(stream,
    { headers: corsResponseHeaders });
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here’s a demo of the Chat application I built. The API being consumed by the web application in the left is the one created using Bun.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/ASDJ0V9r4OM"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Here's the full source code of the API I built using Bun and Vercel AI SDK.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import OpenAI from 'openai';
import { OpenAIStream, StreamingTextResponse } from 'ai';

const openai = new OpenAI({ apiKey: Bun.env.OPENAI_API_KEY });

const corsResponseHeaders = {
    "Access-Control-Allow-Origin": "*",
    "Access-Control-Allow-Methods": "POST, GET, OPTIONS",
    "Access-Control-Allow-Headers": "X-PINGOTHER, Content-Type",
    "Access-Control-Max-Age": "86400"
}

const server = Bun.serve({
    port: 3001,
    async fetch(req) {
        if (req.method === 'POST') {
            try {

                const { messages } = await req.json();

                const response = await openai.chat.completions.create({
                    model: 'gpt-3.5-turbo',
                    messages,
                    stream: true,
                });

                // Assuming OpenAIStream is a function that processes the response for streaming - not working yet
                const stream = OpenAIStream(response);

                // Return the streaming response - not working yet
                return new StreamingTextResponse(stream,
                    { headers: corsResponseHeaders });               

            } catch (error) {
                console.log("Error: ", error);
                // Return an error response
                return new Response("Internal Server Error",
                    {
                        status: 500,
                        headers: corsResponseHeaders
                    },

                );
            }
        } else {
            // Handle other request methods or return a default response
            return new Response("Not Found", { status: 404,
                headers: corsResponseHeaders });
        }
    },
});

console.log(`Listening on localhost: ${server.port}`);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you like my article, you can follow me and subscribe here in Medium for more. You can also support me by buying me a coffee!&lt;/p&gt;

&lt;p&gt;You can also follow me in my social media. Cheers!&lt;/p&gt;

&lt;p&gt;🐦 &lt;a href="//twitter.com/donvito"&gt;twitter.com/donvito&lt;/a&gt;&lt;br&gt;
🔗 &lt;a href="//linkedin.com/in/melvinvivas"&gt;linkedin.com/in/melvinvivas&lt;/a&gt;&lt;br&gt;
👾 &lt;a href="//github.com/donvito"&gt;github.com/donvito&lt;/a&gt;&lt;br&gt;
🔗 &lt;a href="//donvitocodes.com"&gt;donvitocodes.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[reposted from] &lt;a href="https://techblogs.donvitocodes.com/using-bun-1-0-for-serving-apis-with-vercel-ai-sdk-and-openai-e6d01fedd2ca"&gt;https://techblogs.donvitocodes.com/using-bun-1-0-for-serving-apis-with-vercel-ai-sdk-and-openai-e6d01fedd2ca&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>What's a good programming language to help teach beginners?</title>
      <dc:creator>donvitocodes</dc:creator>
      <pubDate>Sat, 20 Aug 2022 04:53:00 +0000</pubDate>
      <link>https://dev.to/donvitocodes/whats-a-good-programming-language-to-help-teach-beginners-5gk8</link>
      <guid>https://dev.to/donvitocodes/whats-a-good-programming-language-to-help-teach-beginners-5gk8</guid>
      <description>&lt;p&gt;I'm looking for some advise. What's a good programming language to help teach beginners? Let's talk about it later in my stream @ 2pm Singapore time today(an hour from now). &lt;/p&gt;

&lt;p&gt;Catch me live @ &lt;a href="https://twitch.tv/donvitocodes"&gt;https://twitch.tv/donvitocodes&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hope to hear from those who started programming also. What language were you comfortable of using?&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Astro 1.0 is out! Let's check it out! Did a live demo in my Twitch Channel</title>
      <dc:creator>donvitocodes</dc:creator>
      <pubDate>Sat, 13 Aug 2022 13:53:00 +0000</pubDate>
      <link>https://dev.to/donvitocodes/astro-10-is-out-lets-check-it-out-did-a-live-demo-in-my-twitch-channel-2b9p</link>
      <guid>https://dev.to/donvitocodes/astro-10-is-out-lets-check-it-out-did-a-live-demo-in-my-twitch-channel-2b9p</guid>
      <description>&lt;p&gt;For those who missed my stream earlier, we took Astro 1.0 for a spin! It was really a delightful experience! Check out the replay here &lt;code&gt;https://www.twitch.tv/videos/1560582959&lt;/code&gt; to see how we ran an example blog using Astro.&lt;/p&gt;

&lt;p&gt;Check out Astro here &lt;a href="https://astro.build/"&gt;https://astro.build/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can follow me in Twitch to get live notifications. &lt;/p&gt;

&lt;p&gt;Replay is also available in my youtube channel &lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/YrqBk9B6tZI"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Finally migrated my blog to Gatsby</title>
      <dc:creator>donvitocodes</dc:creator>
      <pubDate>Sun, 15 Aug 2021 12:52:42 +0000</pubDate>
      <link>https://dev.to/donvitocodes/finally-migrated-my-blog-to-gatsby-33j4</link>
      <guid>https://dev.to/donvitocodes/finally-migrated-my-blog-to-gatsby-33j4</guid>
      <description>&lt;p&gt;Finally migrated my tech blog &lt;a href="https://www.melvinvivas.com"&gt;https://www.melvinvivas.com&lt;/a&gt; to GatsbyJS -&lt;a href="https://www.gatsbyjs.com"&gt;https://www.gatsbyjs.com&lt;/a&gt;. I ran Lighthouse and it's definitely worth it! Now, my blog does not need a VM anymore. :)&lt;/p&gt;

&lt;p&gt;Will blog about the why I migrated from Ghost(&lt;a href="https://ghost.org/"&gt;https://ghost.org/&lt;/a&gt;) to Gatsby soon! &lt;/p&gt;

</description>
      <category>gatsby</category>
      <category>react</category>
    </item>
    <item>
      <title>Developing a Zoom API Client Library for Golang</title>
      <dc:creator>donvitocodes</dc:creator>
      <pubDate>Sat, 23 May 2020 09:38:05 +0000</pubDate>
      <link>https://dev.to/donvitocodes/developing-a-zoom-api-client-library-for-golang-4ap8</link>
      <guid>https://dev.to/donvitocodes/developing-a-zoom-api-client-library-for-golang-4ap8</guid>
      <description>&lt;p&gt;Repost from my tech blog&lt;br&gt;
&lt;a href="https://www.melvinvivas.com/zoom-api-golang-library/"&gt;https://www.melvinvivas.com/zoom-api-golang-library/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I thought of developing a &lt;a href="https://zoom.us"&gt;Zoom&lt;/a&gt; API Golang Client Library for my personal use. There is no official Zoom API client library for Go/Golang so I thought it would be interesting to develop one.&lt;/p&gt;
&lt;h3&gt;
  
  
  Why Zoom?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Zoom is very popular during this crisis and most businesses and schools are using it. Zoom is also used by families and friends to get in touch during this trying times. This popularity will also give rise to the need to integrate with Zoom.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;There is no official Zoom API client library for Go/Golang.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I wanted an interesting project to practice my Golang skills and at the same time be able to create something useful for fellow Gophers. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It would be interesting to know how Go developers will integrate Zoom into their applications.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here is the github project if you would like to take a peek. I'd really appreciate it if you can give it a star if you liked it or find it useful. Stars will really give me motivation to spend more time on it and implement more functionality. :)&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/donvito"&gt;
        donvito
      &lt;/a&gt; / &lt;a href="https://github.com/donvito/zoom-go"&gt;
        zoom-go
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Zoom (Zoom.us) API Golang client library
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;h1&gt;
Zoom(zoom.us) API Golang Client Library&lt;/h1&gt;
&lt;p&gt;This is an unofficial Go client library for the Zoom API. I've just started and implemented the ff:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;List Meetings&lt;/li&gt;
&lt;li&gt;Create Meetings&lt;/li&gt;
&lt;li&gt;Delete Meeting&lt;/li&gt;
&lt;li&gt;Get Meeting by Id&lt;/li&gt;
&lt;li&gt;Get Meeting Invitation&lt;/li&gt;
&lt;li&gt;Add Meeting Registrant&lt;/li&gt;
&lt;li&gt;List Meeting Registrants&lt;/li&gt;
&lt;li&gt;Update Meeting Status/End Meeting&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This library is in its infancy and has not been tested yet for production use.&lt;/p&gt;
&lt;p&gt;Zoom API version supported&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Version: 2.0.0&lt;/li&gt;
&lt;li&gt;Host: api.zoom.us/v2&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
Usage&lt;/h2&gt;
&lt;h3&gt;
Set Environment Variables&lt;/h3&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;    &lt;span class="pl-k"&gt;export&lt;/span&gt; ZOOM_API_URL=&lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;https://api.zoom.us/v2&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;
    &lt;span class="pl-k"&gt;export&lt;/span&gt; ZOOM_AUTH_TOKEN=&lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;&amp;lt;your jwt token&amp;gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;
    &lt;span class="pl-k"&gt;export&lt;/span&gt; ZOOM_USER_ID=&lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;&amp;lt;your email or username&amp;gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt; &lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
How to get your Zoom JWT token&lt;/h3&gt;
&lt;p&gt;You will need a paid account to access Zoom's REST API.  You need to create a JWT App in the App Marketplace
Then, get a JWT token from the App Credentials of the app you just created.  Check the instructions here
&lt;a href="https://marketplace.zoom.us/docs/guides/build/jwt-app" rel="nofollow"&gt;https://marketplace.zoom.us/docs/guides/build/jwt-app&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
Download the library to your project&lt;/h3&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;
&lt;pre class="notranslate"&gt;&lt;code&gt;go get&lt;/code&gt;&lt;/pre&gt;…&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/donvito/zoom-go"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;I am very busy with my daytime job so I only work on the library during late nights and weekends. So far, I have implemented the ff. functionality.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;List Meetings&lt;/li&gt;
&lt;li&gt;Create Meeting&lt;/li&gt;
&lt;li&gt;Delete Meeting&lt;/li&gt;
&lt;li&gt;Get Meeting by Id&lt;/li&gt;
&lt;li&gt;Get Meeting Invitation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This library is in its infancy and has not been tested for production use.&lt;/p&gt;

&lt;p&gt;To use the library, you will need a paid account to access Zoom's REST API.  Unfortunately, free or basic accounts do not have access to the APIs.  You need to create a JWT App in the Zoom App Marketplace and get a JWT token from App Credentials.  Here are the instructions I followed to get me started.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://marketplace.zoom.us/docs/guides/build/jwt-app"&gt;https://marketplace.zoom.us/docs/guides/build/jwt-app&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;em&gt;Image from Zoom Documentation&lt;/em&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--CEGK9xs6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.melvinvivas.com/content/images/2020/05/1560025161259.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--CEGK9xs6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.melvinvivas.com/content/images/2020/05/1560025161259.png" alt="1560025161259" width="581" height="336"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The zoom-go library uses environment variables to configure the API client. Here are the required environment variables.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    export ZOOM_API_URL="https://api.zoom.us/v2"
    export ZOOM_AUTH_TOKEN="&amp;lt;your jwt token&amp;gt;" 
    export ZOOM_USER_ID="&amp;lt;your email or username&amp;gt;" 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Download the library to your project
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;go get "github.com/donvito/zoom-go/zoomAPI"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  List Meeting example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;func listMeetingExample() {

    //Create a new Zoom API client
        apiClient := zoomAPI.NewClient(os.Getenv("ZOOM_API_URL"), os.Getenv("ZOOM_AUTH_TOKEN"))

        //Retrieve the userId from the env variable
        userId := os.Getenv("ZOOM_USER_ID")

        //Use the client to list meetings
        var resp zoomAPI.ListMeetingsAPIResponse
        var err error

        resp, err = apiClient.ListMeetings(userId)
        if err != nil {
            log.Fatal(err)
        }

        for _, meeting := range resp.Meetings {
            fmt.Printf("id = %d, topic = %s, join url = %s, start time = %s\n", meeting.Id, meeting.Topic, meeting.JoinUrl, meeting.StartTime)
        }

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

&lt;/div&gt;



&lt;h3&gt;
  
  
  Create Meeting example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;func createMeetingExample() {
    //Create a new Zoom API client
        apiClient := zoomAPI.NewClient(os.Getenv("ZOOM_API_URL"),
            os.Getenv("ZOOM_AUTH_TOKEN"))

        //Retrieve the userId from the env variable
        userId := os.Getenv("ZOOM_USER_ID")

        //Use the API client to create a meeting
        var resp zoomAPI.CreateMeetingResponse
        var err error

        resp, err = apiClient.CreateMeeting(userId,
            "Contributors Meeting for Project",
            meeting.MeetingTypeScheduled,
            "2020-05-24T22:00:00Z",
            30,
            "",
            "Asia/Singapore",
            "pass8888", //set this with your desired password for better security, max 8 chars
            "Discuss next steps and ways to contribute for this project.",
            nil,
            nil)
        if err != nil {
            log.Fatal(err)
        }

        fmt.Printf("Created meeting : id = %d, topic = %s, join url = %s, start time = %s\n", resp.Id, 
                resp.Topic, resp.JoinUrl, resp.StartTime)

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

&lt;/div&gt;



</description>
      <category>go</category>
    </item>
    <item>
      <title>Golang Jobs in Singapore</title>
      <dc:creator>donvitocodes</dc:creator>
      <pubDate>Sat, 21 Mar 2020 14:53:49 +0000</pubDate>
      <link>https://dev.to/donvitocodes/golang-jobs-in-singapore-9n8</link>
      <guid>https://dev.to/donvitocodes/golang-jobs-in-singapore-9n8</guid>
      <description>&lt;p&gt;I'm developing a micro-site built with React and Ant Design to aggregate/curate Golang Developer or Engineer jobs here in Singapore. I also used Go for the data gathering.  &lt;/p&gt;

&lt;p&gt;The site has Golang Developer or Engineer roles and also Go-related jobs like Software Engineering Manager roles, DevOps, Site Reliability Engineers, Data Engineers, which require Go knowledge or experience. Job posts are from different job sites here in Singapore. The site only shows titles and summaries of the job openings and will always link to the original job post where you can apply or send your resume to. The purpose of the site is to have one place to search for a Go developer role. This has been a challenge for me before and I thought that this is something which will be useful to those looking for Go-related jobs here in Singapore.  &lt;/p&gt;

&lt;p&gt;So far, the site has job postings from Indeed, LinkedIn and JobsDB, the more popular job websites here. I'll be adding more when I have time.  Hope it is useful to those looking for golang work here in Singapore. I haven't bought a domain and do proper styling though and I'm still finalizing some ideas on how to proceed with it. Any feedback or ideas are greatly appreciated.   &lt;/p&gt;

&lt;p&gt;Check it out here!&lt;br&gt;&lt;br&gt;
&lt;a href="https://golang-jobs.now.sh/"&gt;https://golang-jobs.now.sh/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can bookmark this blog post since I might change the link to a proper domain.  Would love to know if it helps!&lt;/p&gt;

</description>
      <category>go</category>
    </item>
    <item>
      <title>What's the longest stretch you've done at work?</title>
      <dc:creator>donvitocodes</dc:creator>
      <pubDate>Mon, 30 Dec 2019 05:39:12 +0000</pubDate>
      <link>https://dev.to/donvitocodes/what-s-the-longest-work-stretch-you-ve-done-at-work-5eh4</link>
      <guid>https://dev.to/donvitocodes/what-s-the-longest-work-stretch-you-ve-done-at-work-5eh4</guid>
      <description>&lt;p&gt;Mine's 3 days(Friday to Sunday). Had some short naps though. We needed to fix a production issue which was not even caused by our team.:D We had to deploy a new version of our application(a replacement of the one which caused the issue) to resolve it. News reached us that we need to stay reached us on Friday late afternoon, around 5pm and we were able to go back home on Sunday afternoon. I was 15 younger then so I was able to cope. I even went to work the following Monday. &lt;/p&gt;

&lt;p&gt;How about you, what's your longest stretch?&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Working long hours for companies</title>
      <dc:creator>donvitocodes</dc:creator>
      <pubDate>Tue, 24 Dec 2019 03:51:50 +0000</pubDate>
      <link>https://dev.to/donvitocodes/working-long-hours-for-companies-49cn</link>
      <guid>https://dev.to/donvitocodes/working-long-hours-for-companies-49cn</guid>
      <description>&lt;p&gt;Saw a couple of tweets from Jason Fried, I agree with this. What's sad about this is that some workers just accept this as reality as long as they are paid high. At some point, I thought this was reality until my mind can't take it anymore - got burned out - so I had to quit my job. I always thought it was my problem that I am not resilient enough.&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1209115637148274690-749" src="https://platform.twitter.com/embed/Tweet.html?id=1209115637148274690"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1209115637148274690-749');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1209115637148274690&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1209116327664848898-519" src="https://platform.twitter.com/embed/Tweet.html?id=1209116327664848898"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1209116327664848898-519');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1209116327664848898&amp;amp;theme=dark"
  }



&lt;/p&gt;

</description>
    </item>
    <item>
      <title>The Phoenix Project kindle book free for 24hrs! You’re welcome. 😊</title>
      <dc:creator>donvitocodes</dc:creator>
      <pubDate>Thu, 19 Dec 2019 10:30:45 +0000</pubDate>
      <link>https://dev.to/donvitocodes/the-phoenix-project-kindle-book-free-for-24hrs-you-re-welcome-3oa4</link>
      <guid>https://dev.to/donvitocodes/the-phoenix-project-kindle-book-free-for-24hrs-you-re-welcome-3oa4</guid>
      <description>&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1207569267778105344-298" src="https://platform.twitter.com/embed/Tweet.html?id=1207569267778105344"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1207569267778105344-298');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1207569267778105344&amp;amp;theme=dark"
  }



&lt;/p&gt;

</description>
      <category>devops</category>
    </item>
    <item>
      <title>Ant Design vs. Material UI</title>
      <dc:creator>donvitocodes</dc:creator>
      <pubDate>Tue, 17 Dec 2019 04:13:36 +0000</pubDate>
      <link>https://dev.to/donvitocodes/ant-design-vs-material-ui-i05</link>
      <guid>https://dev.to/donvitocodes/ant-design-vs-material-ui-i05</guid>
      <description>&lt;p&gt;So &lt;a href="https://ant.design/"&gt;Ant Design&lt;/a&gt;(54,504 stars) has surpassed &lt;a href="https://github.com/mui-org/material-ui"&gt;Material UI&lt;/a&gt;(53,012 stars) in github. 😎&lt;/p&gt;

&lt;p&gt;Which do you use? If not these 2, how do you style your UI?&lt;/p&gt;

&lt;p&gt;You can also vote in Twitter. Will post results here once polling is closed.&lt;br&gt;
&lt;iframe class="tweet-embed" id="tweet-1206788400646221826-927" src="https://platform.twitter.com/embed/Tweet.html?id=1206788400646221826"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1206788400646221826-927');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1206788400646221826&amp;amp;theme=dark"
  }



 &lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/ant-design"&gt;
        ant-design
      &lt;/a&gt; / &lt;a href="https://github.com/ant-design/ant-design"&gt;
        ant-design
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      An enterprise-class UI design language and React UI library
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;
  &lt;a href="https://ant.design" rel="nofollow"&gt;
    &lt;img width="200" src="https://camo.githubusercontent.com/363242675617648bfbedd1610f89ac28df0f9e1bac8749d83109fafdf8524fff/68747470733a2f2f67772e616c697061796f626a656374732e636f6d2f7a6f732f726d73706f7274616c2f4b4470677667754d704766716148506a6963524b2e737667"&gt;
  &lt;/a&gt;
&lt;/p&gt;

&lt;h1&gt;
Ant Design&lt;/h1&gt;

&lt;div&gt;
&lt;p&gt;An enterprise-class UI design language and React UI library.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/ant-design/ant-design/actions?query=workflow%3A%22%E2%9C%85+test%22"&gt;&lt;img src="https://github.com/ant-design/ant-design/workflows/%E2%9C%85%20test/badge.svg" alt="CI status"&gt;&lt;/a&gt; &lt;a href="https://codecov.io/gh/ant-design/ant-design/branch/master" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/02ed42b87f67c0e47135adde3477777e22d5ba8945bcfb950f1c6e5e84aa5f15/68747470733a2f2f696d672e736869656c64732e696f2f636f6465636f762f632f6769746875622f616e742d64657369676e2f616e742d64657369676e2f6d61737465722e7376673f7374796c653d666c61742d737175617265" alt="codecov"&gt;&lt;/a&gt; &lt;a href="http://npmjs.org/package/antd" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/c6968b5bf076df338c58769c51590f2fd8a072a6787292b4c2f557ee9b43cd36/687474703a2f2f696d672e736869656c64732e696f2f6e706d2f762f616e74642e7376673f7374796c653d666c61742d737175617265" alt="NPM version"&gt;&lt;/a&gt; &lt;a href="https://npmjs.org/package/antd" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/93f17366f41828729d0dab42132932b3a65387aa2a3097d4fedaa82a3f4773a9/68747470733a2f2f696d672e736869656c64732e696f2f6e706d2f646d2f616e74642e7376673f7374796c653d666c61742d737175617265" alt="NPM downloads"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://bundlephobia.com/package/antd" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/bf08fda4448f4ee3c1fed5b7beb35d989ed36f52b8c852f871c43e13a431a0fa/68747470733a2f2f62616467656e2e6e65742f62756e646c6570686f6269612f6d696e7a69702f616e74643f7374796c653d666c61742d737175617265" alt=""&gt;&lt;/a&gt; &lt;a href="https://unpkg.com/browse/antd/dist/antd.min.js" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/aa44dc75ad02eb9dfd0392f639aa940147b4134d1c5c717f462d5b7c4bfed58e/68747470733a2f2f696d672e626164676573697a652e696f2f68747470733a2f756e706b672e636f6d2f616e74642f646973742f616e74642e6d696e2e6a733f6c6162656c3d616e74642e6d696e2e6a7326636f6d7072657373696f6e3d677a6970267374796c653d666c61742d737175617265" alt=""&gt;&lt;/a&gt; &lt;a href="https://app.fossa.io/projects/git%2Bgithub.com%2Fant-design%2Fant-design?ref=badge_shield" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/fbe7b41bed802871f71dfeb24543de306395fd077f9141a27363d631709ec343/68747470733a2f2f6170702e666f7373612e696f2f6170692f70726f6a656374732f6769742532426769746875622e636f6d253246616e742d64657369676e253246616e742d64657369676e2e7376673f747970653d736869656c64" alt="FOSSA Status"&gt;&lt;/a&gt; &lt;a href="https://app.argos-ci.com/ant-design/ant-design/reference" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/6b533cc7da609cecfd82f128eba151104be9f58bb85862f2c901f6e664b6972a/68747470733a2f2f6172676f732d63692e636f6d2f62616467652e737667" alt="Covered by Argos Visual Testing"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://twitter.com/AntDesignUI" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/0a8e714f90ebc7b970a718c8302da30729b02535c7d032e342457eb816969b87/68747470733a2f2f696d672e736869656c64732e696f2f747769747465722f666f6c6c6f772f416e7444657369676e55492e7376673f6c6162656c3d416e7425323044657369676e" alt="Follow Twitter"&gt;&lt;/a&gt; &lt;a href="https://github.com/ant-design/ant-design/issues/32498"&gt;&lt;img src="https://camo.githubusercontent.com/ea7c3781d19d2867a2b94de287b01fdac8578d49f87f4e1a5582a1f5d5fd8feb/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f72656e6f766174652d656e61626c65642d627269676874677265656e2e7376673f7374796c653d666c61742d737175617265" alt="Renovate status"&gt;&lt;/a&gt; &lt;a href="https://github.com/actions-cool"&gt;&lt;img src="https://camo.githubusercontent.com/acbdb26a5e3f106a4cda658a90250cfb099b209219e751ef4741a9ead5d43eeb/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7573696e672d616374696f6e732d2d636f6f6c2d626c75653f7374796c653d666c61742d737175617265" alt=""&gt;&lt;/a&gt; &lt;a href="https://github.com/umijs/dumi"&gt;&lt;img src="https://camo.githubusercontent.com/50b3cca60e47603420e119af1abae1a6c6f5145d219a986c48aa54ddd082b71f/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f646f637325323062792d64756d692d626c75653f7374796c653d666c61742d737175617265" alt="dumi"&gt;&lt;/a&gt; &lt;a href="https://github.com/ant-design/ant-design/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22"&gt;&lt;img src="https://camo.githubusercontent.com/6a4fe6ef275d2d53ba79cf465501b03b2195a19b620dc4b7cba724dc1aea24d9/68747470733a2f2f666c61742e62616467656e2e6e65742f6769746875622f6c6162656c2d6973737565732f616e742d64657369676e2f616e742d64657369676e2f68656c7025323077616e7465642f6f70656e" alt="Issues need help"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a href="https://ant.design" rel="nofollow"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--CIvdkE_R--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://user-images.githubusercontent.com/507615/209472919-6f7e8561-be8c-4b0b-9976-eb3c692aa20a.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;English | &lt;a href="https://github.com/ant-design/ant-design./README-zh_CN.md"&gt;中文&lt;/a&gt;&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;🌈 Enterprise-class UI designed for web applications.&lt;/li&gt;
&lt;li&gt;📦 A set of high-quality React components out of the box.&lt;/li&gt;
&lt;li&gt;🛡 Written in TypeScript with predictable static types.&lt;/li&gt;
&lt;li&gt;⚙️ Whole package of design resources and development tools.&lt;/li&gt;
&lt;li&gt;🌍 Internationalization support for dozens of languages.&lt;/li&gt;
&lt;li&gt;🎨 Powerful theme customization based on CSS-in-JS.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
🖥 Environment Support&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Modern browsers&lt;/li&gt;
&lt;li&gt;Server-side Rendering&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.electronjs.org/" rel="nofollow"&gt;Electron&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href="http://godban.github.io/browsers-support-badges/" rel="nofollow"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4Uis1y32--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png" alt="Edge" width="24px" height="24px"&gt;&lt;/a&gt;&lt;br&gt;Edge&lt;/th&gt;
&lt;th&gt;
&lt;a href="http://godban.github.io/browsers-support-badges/" rel="nofollow"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4PBpzKRy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://raw.githubusercontent.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png" alt="Firefox" width="24px" height="24px"&gt;&lt;/a&gt;&lt;br&gt;Firefox&lt;/th&gt;
&lt;th&gt;
&lt;a href="http://godban.github.io/browsers-support-badges/" rel="nofollow"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MiE_onvl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://raw.githubusercontent.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png" alt="Chrome" width="24px" height="24px"&gt;&lt;/a&gt;&lt;br&gt;Chrome&lt;/th&gt;
&lt;th&gt;
&lt;a href="http://godban.github.io/browsers-support-badges/" rel="nofollow"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Ik3llT7B--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari/safari_48x48.png" alt="Safari" width="24px" height="24px"&gt;&lt;/a&gt;&lt;br&gt;Safari&lt;/th&gt;
&lt;th&gt;
&lt;a href="http://godban.github.io/browsers-support-badges/" rel="nofollow"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5gPdrB2v--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://raw.githubusercontent.com/alrra/browser-logos/master/src/electron/electron_48x48.png" alt="Electron" width="24px" height="24px"&gt;&lt;/a&gt;&lt;br&gt;Electron&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Edge&lt;/td&gt;
&lt;td&gt;last 2 versions&lt;/td&gt;
&lt;td&gt;last 2 versions&lt;/td&gt;
&lt;td&gt;last 2 versions&lt;/td&gt;
&lt;td&gt;last 2 versions&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
📦 Install&lt;/h2&gt;

&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;npm install antd&lt;/pre&gt;

&lt;/div&gt;

&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;yarn add antd&lt;/pre&gt;

&lt;/div&gt;

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

&lt;div class="highlight highlight-source-js notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-k"&gt;import&lt;/span&gt; &lt;span class="pl-v"&gt;React&lt;/span&gt; &lt;span class="pl-k"&gt;from&lt;/span&gt; &lt;span class="pl-s"&gt;'react'&lt;/span&gt;&lt;span class="pl-kos"&gt;;&lt;/span&gt;
&lt;span class="pl-k"&gt;import&lt;/span&gt; &lt;span class="pl-kos"&gt;{&lt;/span&gt; &lt;span class="pl-v"&gt;Button&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt; &lt;span class="pl-v"&gt;DatePicker&lt;/span&gt; &lt;span class="pl-kos"&gt;}&lt;/span&gt; &lt;span class="pl-k"&gt;from&lt;/span&gt; &lt;span class="pl-s"&gt;'antd'&lt;/span&gt;&lt;span class="pl-kos"&gt;;&lt;/span&gt;

&lt;span class="pl-k"&gt;const&lt;/span&gt; &lt;span class="pl-v"&gt;App&lt;/span&gt; &lt;span class="pl-c1"&gt;=&lt;/span&gt; &lt;span class="pl-kos"&gt;(&lt;/span&gt;&lt;span class="pl-kos"&gt;)&lt;/span&gt; &lt;span class="pl-c1"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="pl-kos"&gt;(&lt;/span&gt;
  &lt;span class="pl-c1"&gt;&amp;lt;&lt;/span&gt;&lt;span class="pl-c1"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="pl-c1"&gt;&amp;lt;&lt;/span&gt;&lt;span class="pl-ent"&gt;Button&lt;/span&gt; &lt;span class="pl-c1"&gt;type&lt;/span&gt;&lt;span class="pl-c1"&gt;=&lt;/span&gt;&lt;span class="pl-s"&gt;"primary"&lt;/span&gt;&lt;span class="pl-c1"&gt;&amp;gt;&lt;/span&gt;PRESS ME&lt;span class="pl-c1"&gt;&amp;lt;&lt;/span&gt;&lt;span class="pl-c1"&gt;/&lt;/span&gt;&lt;span class="pl-ent"&gt;Button&lt;/span&gt;&lt;span class="pl-c1"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="pl-c1"&gt;&amp;lt;&lt;/span&gt;&lt;span class="pl-ent"&gt;DatePicker&lt;/span&gt; &lt;span class="pl-c1"&gt;placeholder&lt;/span&gt;&lt;span class="pl-c1"&gt;=&lt;/span&gt;&lt;span class="pl-s"&gt;"select date"&lt;/span&gt; &lt;span class="pl-c1"&gt;/&lt;/span&gt;&lt;span class="pl-c1"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="pl-c1"&gt;&amp;lt;&lt;/span&gt;&lt;span class="pl-c1"&gt;/&lt;/span&gt;&lt;span class="pl-c1"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="pl-kos"&gt;)&lt;/span&gt;&lt;span class="pl-kos"&gt;;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
TypeScript&lt;/h3&gt;
&lt;p&gt;…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/ant-design/ant-design"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;



&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/mui"&gt;
        mui
      &lt;/a&gt; / &lt;a href="https://github.com/mui/material-ui"&gt;
        material-ui
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      MUI Core: Ready-to-use foundational React components, free forever. It includes Material UI, which implements Google's Material Design.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;
  &lt;a href="https://mui.com/" rel="nofollow"&gt;&lt;img width="150" src="https://res.cloudinary.com/practicaldev/image/fetch/s--gW_DdPMy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/mui/material-ui/docs/public/static/logo.svg" alt="MUI logo"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;h1&gt;
MUI Core&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;MUI Core&lt;/strong&gt; contains foundational React UI component libraries for shipping new features faster.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://mui.com/material-ui/getting-started/" rel="nofollow"&gt;&lt;em&gt;Material UI&lt;/em&gt;&lt;/a&gt; is a comprehensive library of components that features our implementation of Google's &lt;a href="https://m2.material.io/design/introduction/" rel="nofollow"&gt;Material Design&lt;/a&gt; system.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://mui.com/joy-ui/getting-started/" rel="nofollow"&gt;&lt;em&gt;Joy UI&lt;/em&gt;&lt;/a&gt; is a beautifully designed library of React UI components.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://mui.com/base-ui/getting-started/" rel="nofollow"&gt;&lt;em&gt;Base UI&lt;/em&gt;&lt;/a&gt; is our library of "unstyled" components and low-level hooks. With Base, you gain complete control over your app's CSS and accessibility features.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://mui.com/system/getting-started/" rel="nofollow"&gt;&lt;em&gt;MUI System&lt;/em&gt;&lt;/a&gt; is a collection of CSS utilities to help you rapidly lay out custom designs.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://mui.com/" rel="nofollow"&gt;Stable channel v5&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/mui/material-ui/blob/HEAD/LICENSE"&gt;&lt;img src="https://camo.githubusercontent.com/83d3746e5881c1867665223424263d8e604df233d0a11aae0813e0414d433943/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d626c75652e737667" alt="license"&gt;&lt;/a&gt;
&lt;a href="https://www.npmjs.com/package/@mui/material" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/42fcae97938f747ebdc1cdffbd185192917f204081dde86ad350303f6b0ee2f9/68747470733a2f2f696d672e736869656c64732e696f2f6e706d2f762f406d75692f6d6174657269616c2f6c61746573742e737667" alt="npm latest package"&gt;&lt;/a&gt;
&lt;a href="https://www.npmjs.com/package/@mui/material" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/42e1e679819b5ea55ef02a20404d466979cd2aa3527c8f6f76e1517b2e11e60a/68747470733a2f2f696d672e736869656c64732e696f2f6e706d2f762f406d75692f6d6174657269616c2f6e6578742e737667" alt="npm next package"&gt;&lt;/a&gt;
&lt;a href="https://www.npmjs.com/package/@mui/material" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/e093d6b9abfc584f3b9cd9306e47c8249dce6cbab62b598040603b0ca66b3632/68747470733a2f2f696d672e736869656c64732e696f2f6e706d2f646d2f406d75692f6d6174657269616c2e737667" alt="npm downloads"&gt;&lt;/a&gt;
&lt;a href="https://app.circleci.com/pipelines/github/mui/material-ui?branch=master" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/f65f280641ab80fedd641230df9806247e077729284bf571e5d2f35420c61ea8/68747470733a2f2f636972636c6563692e636f6d2f67682f6d75692f6d6174657269616c2d75692f747265652f6d61737465722e7376673f7374796c653d736869656c64" alt="CircleCI"&gt;&lt;/a&gt;
&lt;a href="https://codecov.io/gh/mui/material-ui/branch/master" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/6a36543c2a9a9b15d7061de9164b47d7b02417fdb1847ad50678baa4b0211bdb/68747470733a2f2f696d672e736869656c64732e696f2f636f6465636f762f632f6769746875622f6d75692f6d6174657269616c2d75692f6d61737465722e737667" alt="Coverage Status"&gt;&lt;/a&gt;
&lt;a href="https://twitter.com/MUI_hq" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/a009a69b86e1aa7fa4fc4fda60115a98e55c0c90d8c3f1ef1481e4fb6d87aa36/68747470733a2f2f696d672e736869656c64732e696f2f747769747465722f666f6c6c6f772f4d55495f68712e7376673f6c6162656c3d666f6c6c6f772b4d5549" alt="Follow on Twitter"&gt;&lt;/a&gt;
&lt;a href="https://github.com/mui/material-ui/issues/27062"&gt;&lt;img src="https://camo.githubusercontent.com/ffd641a530af9382cc32a53a36db969439695336fd995a4f4e14fa06f320e65e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f72656e6f766174652d656e61626c65642d627269676874677265656e2e737667" alt="Renovate status"&gt;&lt;/a&gt;
&lt;a href="https://isitmaintained.com/project/mui/material-ui" title="Average time to resolve an issue" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/193bf3c877aee9672c2d347abb8cd02861a41f66844c850d623f778c47f08d65/68747470733a2f2f697369746d61696e7461696e65642e636f6d2f62616467652f7265736f6c7574696f6e2f6d75692f6d6174657269616c2d75692e737667" alt="Average time to resolve an issue"&gt;&lt;/a&gt;
&lt;a href="https://opencollective.com/mui" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/ebd665acf0c3fe358946274772b01693a95e3b2f45a40663a848432fd2659041/68747470733a2f2f696d672e736869656c64732e696f2f6f70656e636f6c6c6563746976652f616c6c2f6d7569" alt="Open Collective backers and sponsors"&gt;&lt;/a&gt;
&lt;a href="https://bestpractices.coreinfrastructure.org/projects/1320" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/16a31a60ed0a5d7165e1f23ce6d8f5cd5fd07bd1e9f62a3d950c0139e43a40a3/68747470733a2f2f626573747072616374696365732e636f7265696e6672617374727563747572652e6f72672f70726f6a656374732f313332302f6261646765" alt="CII Best Practices"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;

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

&lt;h3&gt;
Material UI&lt;/h3&gt;

&lt;p&gt;Material UI is available as an &lt;a href="https://www.npmjs.com/package/@mui/material" rel="nofollow"&gt;npm package&lt;/a&gt;.&lt;/p&gt;

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

&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;npm install @mui/material @emotion/react @emotion/styled&lt;/pre&gt;

&lt;/div&gt;

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

&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;yarn add @mui/material @emotion/react @emotion/styled&lt;/pre&gt;

&lt;/div&gt;


  Older versions
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://v4.mui.com/" rel="nofollow"&gt;v4.x&lt;/a&gt;&lt;/strong&gt; (&lt;a href="https://mui.com/material-ui/migration/migration-v4/" rel="nofollow"&gt;Migration from v4 to v5&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://v3.mui.com/" rel="nofollow"&gt;v3.x&lt;/a&gt;&lt;/strong&gt; (&lt;a href="https://mui.com/material-ui/migration/migration-v3/" rel="nofollow"&gt;Migration from v3 to v4&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://v0.mui.com/" rel="nofollow"&gt;v0.x&lt;/a&gt;&lt;/strong&gt; (&lt;a href="https://mui.com/material-ui/migration/migration-v0x/" rel="nofollow"&gt;Migration to v1&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; &lt;code&gt;@next&lt;/code&gt; only points to pre-releases
Use &lt;code&gt;@latest&lt;/code&gt; for the latest stable release.&lt;/p&gt;
&lt;h3&gt;
Base UI&lt;/h3&gt;
&lt;p&gt;Base…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/mui/material-ui"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


</description>
      <category>react</category>
    </item>
    <item>
      <title>Just discovered Interactive Sandboxes in O'Reilly Learning!</title>
      <dc:creator>donvitocodes</dc:creator>
      <pubDate>Mon, 09 Dec 2019 13:11:41 +0000</pubDate>
      <link>https://dev.to/donvitocodes/just-discovered-interactive-sandboxes-in-o-reilly-learning-5bbl</link>
      <guid>https://dev.to/donvitocodes/just-discovered-interactive-sandboxes-in-o-reilly-learning-5bbl</guid>
      <description>&lt;p&gt;I've renewed my subscription with &lt;a href="https://learning.oreilly.com/"&gt;O'Reilly Online Learning&lt;/a&gt;. A subscription would set you back at US$399 per year. I got their Cyber Monday promo so I got it for $200 off. Before they only have online access to technical books but now they are now offering video courses and sandboxes!&lt;/p&gt;

&lt;p&gt;I was looking for something to read and I just discovered these new features. I think they call them Interactive Sandboxes.&lt;/p&gt;

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

&lt;p&gt;They have now have sandboxes for Ubuntu, Kubernetes, Python and TensorFlow. Below are some screenshots I took.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ubuntu Sandbox
&lt;/h2&gt;

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

&lt;p&gt;I installed Go. :)&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FT-SBLF9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/kgekxqzjq4l45g0p2ga5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FT-SBLF9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/kgekxqzjq4l45g0p2ga5.png" alt="Alt Text" width="800" height="809"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;VSCode is even available in the sandbox.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Kr7LRM-0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/3599qs16xtvrsf9kazkl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Kr7LRM-0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/3599qs16xtvrsf9kazkl.png" alt="Alt Text" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Editing Go code in the IDE&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vQGauMgF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/dt5uauvlp9n8z9utsfl8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vQGauMgF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/dt5uauvlp9n8z9utsfl8.png" alt="Alt Text" width="800" height="391"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Weave Scope - I guess this can be used to visualise docker containers.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6HsDvcCo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/487nzvw8s2yerksnotlr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6HsDvcCo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/487nzvw8s2yerksnotlr.png" alt="Alt Text" width="800" height="395"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Kubernetes Sandbox
&lt;/h2&gt;

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

&lt;h2&gt;
  
  
  Python Sandbox
&lt;/h2&gt;

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

&lt;p&gt;Disclaimer: I am not paid by O'Reilly for this post. Just wanted to share since these new features can be useful for learning while reading a technical book without having to bring up an environment to code in. &lt;/p&gt;

</description>
    </item>
    <item>
      <title>Where can we find nice Gatsby themes?</title>
      <dc:creator>donvitocodes</dc:creator>
      <pubDate>Wed, 27 Nov 2019 04:10:45 +0000</pubDate>
      <link>https://dev.to/donvitocodes/where-can-we-find-nice-gatsby-themes-1ol7</link>
      <guid>https://dev.to/donvitocodes/where-can-we-find-nice-gatsby-themes-1ol7</guid>
      <description>&lt;p&gt;Aside from the &lt;a href="https://themejam.gatsbyjs.org/showcase/"&gt;Theme Jam Showcase&lt;/a&gt;, where can we find nice GatsbyJS templates?&lt;/p&gt;

&lt;p&gt;What's your Gatsby themes wish list?&lt;/p&gt;

</description>
      <category>gatsby</category>
    </item>
  </channel>
</rss>
