teleren/devto huggingface dataset:
How to Start a Successful Software as a Service Business
Tags: career, hiring, startup
Published: 2020-02-23 02:07:39

Launching a software as a service business is as hard as any other business. However, since the initial investment is much lower, you're taking fewer risks by trying to build web or mobile apps that people may want to use.

Here are the steps to start a software business that has a bigger chance of being successful.

# Build an Minimal Viable Product

The first step is to just build a prototype that prospects can use to get feedback and then to improve the app. Also, we need it to see if people actually need your software as a service.

Just build this as quickly as possible. If it's successful, then you can clean it up, write tests, etc.

Without this, everything else is probably a waste of time. Because the feedback will let you gauge the market and see if they need your app to solve their problems.

# Build an Online Presence

Most people that'll be using your software are probably going to be someone on the Internet. This is why it's important to get feedback from them. To find these people, you have to have your own online presence. Your online presence is going to be on social media like Facebook, Twitter, this site, your own blog, or other niche sites.

This is the most crucial step. This is just as important as building the prototype. You need to show your prototype to people you built online to other people online.

You may also want to sell ads to get more traffic to your social media presence.

# Have a Free Beta

A free beta will attract more people to try your stuff to see if it's useful. It also eliminates the need to collect payment by integrating your app with payment providers from the start. This means the minimal viable product is shipped faster.

# Set up a Feedback Mechanism

Again, this is where your social media and online presence comes in handy. You can collect feedback from social media to improve your product. Just have one place to collect all your feedback, act on them, and then get more people to try out your prototype.

# Email Marketing

Email marketing is useful because you can send them surveys and other information about your app. You shouldn't do too much selling. Just set up links to your email subscribe form everywhere and also display an email list subscribe form on your blog. The best way is to add a popup to do that. Even though it may be annoying to some, it works.

# Conclusion

The most important step to creating your own software as a service is to do marketing and getting feedback. Coding isn't very important since you don't even know if people want your product yet. Therefore, the first step is to communicate rather than doing engineering.
Diversity tickets for Production-Ready Serverless workshops
Tags: aws, me, serverless
Published: 2020-02-23 13:00:15

---
title: Diversity tickets for Production-Ready Serverless workshops
published: true
date: 2020-02-23 02:01:56 UTC
tags: AWS, Me, Serverless
canonical_url: https://theburningmonk.com/2020/02/diversity-tickets-for-production-ready-serverless-workshops/
---

By now, you have probably heard that I’m running a number of [public workshops](https://theburningmonk.com/workshops/) all around Europe this year. How could you not, I have hardly shut up about it for a few weeks now :-P

To help support the local communities and allow students and other under-represented groups in tech to attend and learn about serverless, I have reserved a number of diversity tickets for the following workshops:

- [Helsinki, May 4th & 5th](https://www.eventbrite.co.uk/e/production-ready-serverless-2-days-incl-vat-tickets-88697680149?aff=Blog)
- [Stockholm, May 14th & 15th](https://www.eventbrite.co.uk/e/production-ready-serverless-2-days-incl-vat-tickets-88856755949?aff=Blog)
- [Dublin, June 16th & 17th](https://www.eventbrite.co.uk/e/production-ready-serverless-2-days-incl-vat-tickets-88748756921?aff=Blog)
- [London, September 24th & 25th](https://www.eventbrite.co.uk/e/production-ready-serverless-2-days-incl-vat-tickets-88726678885?aff=Blog)
- [Berlin, October 8th & 9th](https://www.eventbrite.co.uk/e/production-ready-serverless-2-days-incl-vat-tickets-88733037905?aff=Blog)

These diversity tickets would cost £254/€254 incl. VAT. If you are a student or member of a minority group (e.g. women in tech) and want to learn about serverless with me then hopefully this would allow you to do so without relying on your employer’s support.

The number of diversity tickets for each event is limited, please check the FAQ section in the corresponding Eventbrite page for details on how to apply.

 ![](https://theburningmonk.com/wp-content/uploads/2019/10/img_5dab0c477fc72.png)

Hi, my name is **Yan Cui**. I’m an **[AWS Serverless Hero](https://aws.amazon.com/developer/community/heroes/yan-cui/)** and the author of [**Production-Ready Serverless**](https://bit.ly/production-ready-serverless). I specialise in rapidly transitioning teams to serverless and building production-ready services on AWS.

Are you struggling with serverless or need guidance on best practices? Do you want someone to review your architecture and help you avoid costly mistakes down the line? Whatever the case, I’m here to help.

You can contact me via [Email](mailto:theburningmonk.com), [Twitter](https://twitter.com/theburningmonk) and [LinkedIn](https://www.linkedin.com/in/theburningmonk/).

[Hire me.](https://theburningmonk.com/hire-me)

The post [Diversity tickets for Production-Ready Serverless workshops](https://theburningmonk.com/2020/02/diversity-tickets-for-production-ready-serverless-workshops/) appeared first on [theburningmonk.com](https://theburningmonk.com).

 ![](http://feeds.feedburner.com/~r/theburningmonk/~4/2u3Sw0ukYKw)
Day35:Parse URL - 100DayOfRust
Tags: rust
Published: 2020-02-23 01:37:07

We can use `url` library to parse a URL:

Cargo.toml:

```
[dependencies]
url = "2.1.1"
```

Example:

```rust
use url::Url;

fn main() {
    let url = "https://github.com:8443/rust/issues?labels=E-easy&state=open";
    let parsed = Url::parse(url).unwrap();
    println!("scheme: {}", parsed.scheme());
    println!("host: {}", parsed.host().unwrap());
    if let Some(port) = parsed.port() {
        println!("port: {}", port);
    }
    println!("path: {}", parsed.path());
    println!("query: {}", parsed.query().unwrap());
}
```

Run the code:
```
scheme: https
host: github.com
port: 8443
path: /rust/issues
query: labels=E-easy&state=open
```

One thing I found that I am not sure if it is a bug in this `url` library: if I change the url to be:

```
https://github.com:443/rust/issues?labels=E-easy&state=open
```

The port part will return `None` instead of 443. Seems this library ignored port if the port is the standard one with the protocol.

This is different behavior like Python:

```python
from urllib.parse import urlparse
parsed = urlparse("https://github.com:443/rust/issues?labels=E-easy&state=open")
print(parsed.port)
# this will print 443 out
```

In this case, if we still want to get 443, instead of using `port` method, we should use `port_or_known_default`:

```rust
    if let Some(port) = parsed.port_or_known_default() {
        println!("port: {}", port);
    }
```

But the caveat is, with this method, even we don't have ":443" in the url, it will still print out 443.

[Update] Apparently this `port` behavior is designed on purpose, according to the [source code here](https://github.com/servo/rust-url/blob/master/src/lib.rs#L541):

> /// Note that default port numbers are never reflected by the serialization,
> /// use the `port_or_known_default()` method if you want a default port number returned.

But I still prefer that if the url contains the port number explicitly, no matter it is the standard port, the `port` should always print it out, return `None` is just weird.
Hash-tastic! part one
Tags: codenewbie, ruby, beginners
Published: 2020-02-23 01:12:44

######Photo by <a href="/photographer/magri-36404">Márcia Rodrigues</a> from <a href="https://freeimages.com/">FreeImages</a>

For many of us, hashes can be intimidating. Just when you thought you had mastered arrays, here come hashes with their snazzy curly brackets and all that extra syntax. Such show-offs!

Really though, as the information you are working with grows larger, it is important to be comfortable with accessing and manipulating data stored in collections. It will be common for you to see nested data structures of many types used: arrays of hashes, hashes of arrays, hashes of hashes, just to name a few. Looking at all that data packed away inside those nested brackets, curly and otherwise, can seem overwhelming and as a newbie you may be left feeling confused. Fear not! Hashes are your friends.

Let's talk about hashes and how to break them down into understandable pieces. I like to think of hashes as well-arranged book shelves where the contents of each shelf can be organized into key/value pairs. 

**Take a few moments to really understand the following hash:**

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/zh9iymncq0yk2fuk317z.png)

It looks pretty complicated, but if you break it down piece by piece, you will see that it isn't as scary as you thought!

**Run the repl.it below to see how to work with the first level of this hash.**

{% replit @cdversiontwo/bookshelfhashexone %}

To reach into the first level of this hash so that you can view the contents of each shelf is easy! Just type the name of the hash with square brackets around the 'shelf', or key name. Like this: **bookshelf[:shelf_name]**

Take a few minutes to check out the repl.it again and consider what type of data each shelf returns. Feel free to explore the code to gain a better understanding of this hash as we will be discussing it in more detail over the next two parts of this series.

By the way- 
That last bit about the Harry Potter shelf is quite messy! No worries! We will take a look at how to better display that data in part three of this series.


**NOTE:**
I did want to discuss the method on *line 44* a little bit...
As the hash is written, each first-level key is a symbol that includes an underscore which is not very pretty when put out to the user. To be more user-friendly, I needed to change **':shelf_one'** to **'Shelf one'** so that the sentence to be output to the user would make more sense. 

To do this, I first had to convert the symbol to a string with the **.to_s** method. Then I used **.capitalize** to capitalize the string, and then to take away that pesky underscore, I used **.split('_')** and finally **.join(' ')** to get the separate strings to behave as one. 

See you next time for part two in this series!
I finally implemented Push Notifications in a React-PWA with Firebase, Ask Me Anything!
Tags: ama
Published: 2020-02-23 00:36:18

This was a tough one and I procrastinated hard on it, but now it's finally working, easier than I first thought and ready to be shipped in a few hours.
Learnings: don't give up and do enough research until you find the best solution for your 'problem'
Weekly Roundup 22
Tags: weekly, links
Published: 2020-02-24 05:53:45

---
title: Weekly Roundup 22
published: true
date: 2020-02-23 00:00:00 UTC
tags: weekly, links
canonical_url: https://www.ankursheel.com/blog/weekly-roundup-22
---

Every week I come across some great articles. Here are some of the posts I feel you will enjoy reading as much as I did.

Docker requires Windows 10 Pro, Enterprise or Education to run. So are you out of luck if you are running Windows 10 Home edition? **Mihail Gaberov** shares his steps for running [Docker on Windows 10 Home edition](https://mihail-gaberov.eu/how-to-run-docker-on-windows-10-home-edition/).

I have written before of why I think [renting a house is better than buying](https://www.ankursheel.com/blog/rent-buy-house). But, if you prefer to buy a house, **Lars Lofgren** tells you the [20 closing costs](https://www.iwillteachyoutoberich.com/blog/closing-costs/) that you should budget for to avoid painful surprises after finding your dream house.

Adobe XD, Sketch, Figma or InVision? Which is the best design software to use? The correct answer is “It Depends”. **Alexandra Murtaza** compares the [4 most popular design apps](https://www.creative-tim.com/blog/web-design/adobe-xd-vs-sketch-figma-invision/) so that you can make an informed decision for your next project.

How can you make programming more learnable? **Brett Victor** shares his thoughts on [how to make programming systems more visible along with demos](http://worrydream.com/LearnableProgramming/).

Ever had to give an ad-hoc report to a manager? **Tom Bartel** shares [what makes a good oral report](https://www.tombartel.me/blog/right-level-of-abstraction/) by taking a bad report and making it into a much better one.

Hope you enjoy reading these articles as much as I did.
Como me interessei por TI
Tags: carreira, mvpbr, mvpbuzz
Published: 2020-02-22 23:48:55

Recentemente, lancei uma nova série no meu [Canal do YouTube](http://YouTube.com/julioarrudac), e neste primeiro vídeo, comecei a falar sobre como me interessei por TI.

# O começo
Basicamente, tudo começou quando meu tio, que morava com minha avó, comprou um computador, e já que eu passava minhas férias lá, foi assim meu primeiro contato com um computador.
Talvez pelo fato do meu tio estar interessado em aprender mais sobre computadores, eu acabei sendo influenciado, e aprendi muito com ele durante minhas férias

# A pirataria
Nessa brincadeira de querer aprender mais, acabei comprando (sim, comprando) muito software pirata, nas bancas que tinham na feira na cidade onde meu tio morava. Foi uma época bem interessante, aprendi muita coisa, inclusive formatar um windows 98 (como aquilo era complicado). 
Bom, hoje não uso mais pirataria, mas já usei um dia..  ¯\_(ツ)_/¯

Bom, se quiserem saber mais, não deixem de assistir o vídeo abaixo.

{% youtube SsJWVzJ43ro %}
O retorno
Tags: começo, mvpbr, mvpbuzz, devops
Published: 2020-02-22 23:32:11

A long time ago in a blog far, far away...

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/jtm922o1j4amvuug11zw.jpeg)

Já faz muito tempo que não escrevo artigos técnicos, e mudei apenas para meu canal no [YouTube] (http://YouTube.com/julioarrudac), onde falo muito sobre DevOps, Azure DevOps, GitHub e outras coisas. Neste ano, quero voltar a escrever, e acredito que essa seja uma boa opção para o retorno. Ainda não sei dizer bem o foco desse blog para mim, se vou falar dos mesmos conteúdos dos vídeos, sobre meu trabalho, artigos técnicos, ou tudo isso. E você, oque acha que devo escrever?
2/100 Days of Code
Tags: codepen, html, css, 100daysofcode
Published: 2020-02-22 22:48:09

---
title:  2/100 Days of Code
published: true
description: Responsive Web Navbar
tags: codepen, html, css, 100daysofcode
---
On day two of this challenge I woke up and got straight to coding, 
I saw a simple responsive web navbar on Instagram and got some motivation to dive more into media queries as I was having a bit of trouble understanding them. 

I wrote the whole code from scratch on VSCode and then copied it over to codepen, just to show it off easier of course. I followed the CSS part for the media queries in a tutorial-kind-of-way but then added on to it and made it my own. 

I understand media queries much more now but will come back to visit them again in the future, as I do know how important they are, or at least how important it is to make a website responsive specially in this mobile-first era. 
Maybe there will be a much simpler way to do this further down the line.


{% codepen https://codepen.io/dapca/pen/mdJOjeV %}

Any advice or help is welcome :) 
Cya !
1/100 Days of Code
Tags: 100daysofcode, html, css, javascript
Published: 2020-02-22 22:45:44

---
title: 1/100 Days of Code
published: true
description: day 1 log
tags: 100daysofcode, html, css, javascript
---

I decided to use dev.to as a journal to log my progress during the #100daysofcode. You know, to spice it up a bit. 

It just happened that the day I decided to start this challenge is the same day I started the Javascript Algorithms and Data Structures certification on freeCodeCamp.org, so today that's what I did. 

I completed 35% of the curriculum, we went over variables, integers, floats, operators, strings, and string continuation. Nothing new apart from the syntax as I have minimal knowledge on the basic fundementals of coding thanks to a few Python courses that I took in the past (I don't know much at all, but do understand the basic building blocks of the code.) 

Excited for whats to come! 
I will most likely be following and completing this curriculum during the next 99 days along with practicing and reviewing things I learned in the Responsive Web curriculum - the previous one. 

Cya !
🙁 Uber Eats Ruined My Life - Solved with NodeJS
Tags: node, javascript
Published: 2020-02-22 22:09:10

Hey guys!

I've been spending over $600 bucks per month in Uber Eats. My mentality was "Spend less time doing low-effort stuff, and more time coding and making MVP's of my projects"  

So I thought it was going to be fun project to make a script that will listen to my keystrokes and bully me every time I try to go inside of "Uber eats."


Here is a quick youtube video explaining the ***whole thing***: 
[![How I solved uber eats with code video](http://img.youtube.com/vi/BM4Z3NihjyQ/0.jpg)](http://www.youtube.com/watch?v=BM4Z3NihjyQ)



For some PC's you will be required to use sudo when you run this script. 

```javascript
// Twilio API and a Key logger  for mac
const client = require('twilio')(twilio_sid, twilio_token);
const GK = require('global-keypress');

// we start the keylogger for mac-os 10.5
const gk = new GK();
gk.start();

// the word we are looking for 
const word = 'uber'
let wordBuilder = ''

// lets find it.
gk.on('press', data => {

    if (word[wordBuilder.length] === data.data) {
        wordBuilder += data.data;
        if (word === wordBuilder) {
            client.messages
                .create({
                    body: 'I am about to spend 20$ in uber eats, why the fuck are you letting me do this - https://the-cray-bucket.s3.amazonaws.com/vid.mp4',
                    from: 'whatsapp:+' + from_number,
                    to: 'whatsapp:+' + mom,
                })
                .then(message => console.log(message.sid))
                .done();
        }
    } else {
        wordBuilder = ''
    }
});
```

Thank you for reading my first post on dev.to. I would appreciate any feedback
One year later.... 
Published: 2020-02-22 22:05:00

---
title: One year later.... 
published: true
description: A reflection on a year's worth of little projects.
cover_image: https://dev-to-uploads.s3.amazonaws.com/i/ndgg7xjokk66qz5lehqy.jpg
tags: 
---

One year ago, I bought a domain, [jenn.dev](https://jenn.dev). I wanted to have to have a space to show off my skills and an excuse to learn new things.

I've used Gatsby, React, various Firebase SDKs and APIs, to add a blog and portfolio of web apps to the site. It is place for me play and learn.

The only thing I wished I had done more of while making this little teal wonderland, is blogging. Sharing the joys and frustrations of various decisions and whims I made along the way. It is my goal for this year to make more tutorials and blog posts about the random little projects I made.

Not everything needs to be polished right away. The process is just as important as the final product.
How to create a static website using Pelican
Tags: python, pelican, webdev
Published: 2020-02-22 21:59:58

This article was first published on [razcodes.dev](https://razcodes.dev/how-to-create-a-static-website-using-pelican.html "razcodes.dev")

[Pelican](https://blog.getpelican.com/ "Pelican") is a static site generator written in Python. I decided to use it for my personal website and since this is the first post, I thought it would be very meta to document the experience.

The following steps were done on a Mac but they should work on other OSs maybe with minor modifications.

## Setup

I have a folder in my user folder called 'www'. I created a folder in that folder for this project.

```bash
cd www
mkdir razcodes
cd razcodes
```

I have Python3 installed already on my computer so I created a virtual environment called 'venv' and activated the environment:

```bash
python3.8 -m venv venv
source ./venv/bin/activate
```

I installed Pelican in this new virtual environment following the instruction on their [docs page](https://docs.getpelican.com/en/stable/quickstart.html "Pelican Quickstart").

```bash
pip install pelican[Markdown]
```

## Starting the site locally

I ran the following command which creates the folder structure

```bash
pelican-quickstart
```

Following the instructions I added a new markdown file in the content folder that was created called hello-pelican.md

Title: Hello Pelican
Date: 2020-02-22 10:23
Category: General

This is the first post that I am writing in Pelican

Now it's time to generate the site and preview it

```bash
pelican content
pelican --listen
```

I opened the following url into your browser to see the page

[http://localhost:8000/](http://localhost:8000/)

## Changes and final build

There are 2 files in the main folder that define the configuration.
- pelicanconf.py
- publishconf.py

The first one is for general configuration. You can change the links in the blogroll section, add your social links, change pagination and other things.

The second file is used for production configuration. It imports the previous file and then overwrites some settings.

You can create your own theme by creating a 'theme' folder and building it in there or by downloading one of the [themes on Github](https://github.com/getpelican/pelican-themes "Pelican Themes").

After making all the changes and when you are ready for the final build, run the following command:

```bash
pelican content -s publishconf.py
```

Or you can use the following command if you have a custom theme:

```bash
pelican content -s publishconf.py -t theme
```

Here _-t theme_ specifies the folder where the custom theme is located.

Once the build is done you can find the website in the 'output' folder.
The useMemo() hook in ReactJS has a short memory
Tags: react, hooks
Published: 2020-02-22 20:47:54

The `useMemo()` hook in React as of 16.8.0 can memoized a value for an expensive computation, but note that it has really "short memory".

To see how it works, look at the "console" to see when the expensive function is invoked: https://stackblitz.com/edit/react-ueeptk

The code:
```javascript
  const value = useMemo(() => expensiveFunction(a), [a]);
```

When it already did the calculation for `a` being `2`, then it won't do it for `2` next time. Likewise for the `3` or `4`.

However, it really can only memoize one value. If the first time, it did the calculation for `1`, and next it did the calculation for `2`, it won't remember what the result is for `1` any more. When supplied with `1` again, it will do the calculation again. Example: https://stackblitz.com/edit/react-hpugxu

The behavior is similar to [`React.memo(ComponentA)`](https://reactjs.org/docs/react-api.html#reactmemo), which can memoize a function component result and won't call it to render the React elements again as long as the props, state, and context stay the same.
Python lib3to6: The Bablejs of Python now has support for Python 3.8.
Tags: python
Published: 2020-02-22 20:44:42

I just published an update to [lib3to6](https://pypi.org/project/lib3to6/).

This release adds support for 

 - the new [bpo36774](https://bugs.python.org/issue36774) f-string `=` specifier
 - and of course the infamous `:=` walrus operator (except inside comprehensions).

While these are nice, the main use case of lib3to6 remains that you can use the type annotation features during development (some of which are only available on 3.6+) without having to sacrifice compatibility when you publish your packages. Support Python 3.5 with minimal extra effort, or even 2.7 if you still care about that.