teleren/devto huggingface dataset:
The golden age of SaaS
Tags: saas, developer, startup, growth
Published: 2019-11-15 10:54:24

---
title: The golden age of SaaS
published: true
description: 
tags: #saas #developer #startup #growth
---

Most people overestimate what they can do in one year and underestimate what they can do in ten years.

Most likely, this Bill Gates quote refers to building businesses. It can take a lot of effort and persistence. Building a SaaS business is a 10-15 year journey.

I would like to extend this to developers.

Most developers overestimate what they can build in 3 months and underestimate what they can do in one year.

When I started writing code for Archbee in December last year, I thought if I go full-time and perform my best I can build a decent product (compared to competitors) in 3 months.

After 3 months, I had a product made of tangled code, barely working, low feature, buggy, not even friends wanted to use.

Almost 6 months in, first paying customers, I almost had to beg not to leave due to still buggy and no features. Good people, but still, the product didn't deserve it.

9 months in, some early signs of traction, the product in ok shape, but 55k lines of still tangled & messy code. But looking way better from the outside.

I took the next month rewriting almost everything and not worrying about new features as the product was at 95% parity to my competitors. And some extra ones they didn't have 💪.

11 months in, I saw some companies choosing my product over big competitors. Mature competitors. VC-funded competitors. Bootstrapped competitors.

This is a reminder to developers that they can go build businesses for themselves. You don't need connections, venture capital or anything else. The only requirement is a strong mind. It's mental more than anything else.

When you do decide you want to get investment, your company will be a beast in their eyes. Because you deserve it.

You went through all the adversity necessary to earn the respect of investors and make them believe in you without saying one word. Your MRR and MoM growth tells the whole story.

If you decide to keep bootstrapping, you're still in very good shape having been in the trenches for so long. The longer you stay bootstrapping the more valuable you become because you don't need anybody and anything.

Do it.. there is nothing you'll regret more if you don't. Imagine yourself. 45-50 years old, knowing you've been through the golden age of SaaS and you did fucking nothing.

❤️
A step towards a faster Web: Early flushing in c#.net
Tags: dotnet, csharp, webdev, webperf
Published: 2020-01-12 08:40:26

## A simple demonstration to Early flushing in dotnet.
Flushing, Early flushing, head flushing or Progressive HTML is when the server sends the initial part of the HTML document to the client before the entire response is ready. All major browsers start parsing the partial response.If done correctly, the browser won't sit idle after requesting your page, rather, it can start process other important things in the meantime, like requesting static assets which would be used later on the site. It could give a significant perceived performance gain.
In this given example, I have used `Thread.Sleep(200)`. This could be the time where your page does heavy database calls and other computation. 
### HomeController.cs
```cs
public ActionResult Index()
{
           
  PartialView("/Views/Shared/_HeadPart.cshtml").ExecuteResult(ControllerContext);
  Response.Flush();
  Thread.Sleep(200);
  return PartialView("/Views/Home/Index.cshtml");
}
```
### _HeadPart.cshtml
```html
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
    <title>Hey - My ASP.NET Application</title>
</head>
```

### Index.cshtml
```html
<body>
    <div class="row">
        Hey there, How u doin'?
    </div>
</body>
</html>
```

### Results With Early Flushing:
![With Early flushing](https://thepracticaldev.s3.amazonaws.com/i/avn03f90frg6acf7e8c3.PNG)

### Results Without Early Flushing
![Without Early flushing](https://thepracticaldev.s3.amazonaws.com/i/9ae3w1samk2zx8g7t707.PNG)
Less confusing defaults
Tags: programming, javascript, node, web
Published: 2019-11-15 17:08:02

---
title: Less confusing defaults
published: true
description: A few thoughts about less confusing default configuration.
tags: programming, javascript, nodejs, web
---

The less confusing (and harmful) defaults for code and configuration are different and opposite. Here it is:

# By Default

1. Run production code.
2. Use development configuration.

Other should be specified implicitly.

## Why?

Development code can skip some checks or allow users to override permissions. Production code is (well should be) free of such dangerous behavior. That's why production code should be run by default.

In the same time development configuration usually specifies test database and API endpoints. And thus such configuration couldn't spent users funds or send a real messages and considered less harmful.

## How

### Debug/Dev mode

❌ Wrong:

```js
const DEBUG = process.env.NODE_ENV !== 'production'
```

✅ Correct:

```js
const DEBUG = process.env.NODE_ENV === 'development'
```

### Config

❌ Wrong:

```js
const CFG = process.env.NODE_ENV || 'production'

const config = require(`configs/${CFG}.js`)
```

✅ Correct

```js
const CFG = process.env.NODE_ENV || 'development'

const config = require(`configs/${CFG}.js`)
```
⚡ Announcing Byteconf GraphQL: a free GraphQL conference, streamed online
Tags: graphql, showdev, webdev
Published: 2019-11-15 18:17:34

I'm super excited to announce the return of Byteconf, Bytesized Code's free live-streamed conference series.

**On January 31st, join us for Byteconf GraphQL, whether you're on your couch, at your office, or wherever you may find yourself at the beginning of the new decade.**

I'm thrilled to be announcing the conference today, but it wouldn't be a complete event without a great group of attendees, and of course, an incredible selection of speakers. If you're a GraphQL enthusiast, consider submitting a talk via our newly-opened Call for Papers (see the link at the end of this email) for the event – Byteconf is a great place to hone your speaking skills, and we'd love submissions from speakers of all experience levels and backgrounds.

If you're excited to attend Byteconf GraphQL, you can help us put on an amazing conference by doing two things: first, RSVP and get your ticket using the link below – we'll add you to the list for the conference and you'll be first to know when we announce new speakers and updates for the conference. Second, share it with your friends! If you're on Twitter, you can retweet our announcement post (below), or if you want to put your own spin on the event, we'd love to see your tweets and retweet them to our audience.

{% twitter 1195356113472040962 %}

Interested in speaking? [Check out the Byteconf GraphQL 2020 Call for Papers on Papercall.​](https://www.papercall.io/byteconf-graphql-2020)

See you in January!

By the way, if you're interested in what Byteconf is all about, check out our past conferences – every talk from every past Byteconf is available to watch on [our YouTube channel](https://www.bytesized.xyz/s/youtube). Rad!

- [Byteconf JavaScript 2019](https://www.youtube.com/playlist?list=PLH_Crma-Dc9MVB5yfC1ZwNxv8r4vhvZUQ)
- [Byteconf React Native 2018](https://www.youtube.com/playlist?list=PLH_Crma-Dc9OLKleEIrzuwOmxyGWuZbRW)
- [Byteconf React 2018](https://www.youtube.com/playlist?list=PLH_Crma-Dc9PRM7KxKerImYGUY22wkR3Z)
- [Byteconf Reason 2018](https://www.youtube.com/playlist?list=PLH_Crma-Dc9MmJmvjov5Yo8dfuQYn5Jhf)
Um pouco de clean code com Clojure 🔮
Tags: clojure, todayilearned
Published: 2019-11-16 16:27:45

## Nomes significativos 😏
 O nome de um símbolo ou função deve "responder a todas as grandes questões". 
 Deve dizer por que existe, o que faz e como é usado.
 Se um nome exigir um comentário, ele não revela sua intenção.
 
 ❌ **Forma incorreta** 
![](https://i.imgur.com/POPdTRE.png)

 ✅ **Forma correta**    

![](https://i.imgur.com/VET69gn.png)


### Nomes de métodos 🤔
  
Os métodos devem ter nomes de verbos ou frases verbais, como *post-payment*, *delete-page* ou save. Os *acessadores*, *mutadores* e predicados devem ser nomeados por seu valor e prefixados com *get*, *set*.


## Funções 🧐

 - **Primeira regra**: *funções devem ser enxutas*;
 - **Segunda regra**: *é que elas devem ser menores que isso.* 
Isso implica que os blocos dentro de instruções `if`, `else`, `while` e etc. devem ter uma linha. 
Provavelmente essa linha deve ser uma chamada de função. 
Isso não apenas mantém a função anexa pequena, mas também agrega valor ao documentário, porque a função chamada dentro do bloco pode ter um nome bem descritivo.

## Argumentos de funções 🤠
Uma função não deve ter mais de três argumentos. 
Mantenha o número de argumentos o mais baixo possível. 

Agora, quando digo para reduzir o tamanho de uma função, você definitivamente deve pensar em como reduzir o `try`-`catch`, pois ele já torna seu código muito maior. 
Minha resposta é criar uma função contendo apenas as instruções `try-catch-finally`. E separe os corpos de `try` /`catch` /`finally` block em funções separadas

![](https://i.imgur.com/dpRNcXV.png)
  
**Isso torna a lógica muito clara.** 
Os nomes das funções descrevem facilmente o que estamos tentando alcançar. 
O tratamento de erros pode ser ignorado.
Isso fornece uma boa separação que facilita a compreensão e modificação do código.

### Error-Handling 👨‍🏭👩‍🏭
a função deve fazer uma coisa. 
O tratamento de erros é outra coisa. 
Se uma função tem `try` keyword, então deve ser a primeira palavra-chave e não deve haver nada após os blocos `catch`/`finally`.
  
🚨**Se seu código precisa ser comentado, você está fazendo algo errado**🚨
DIY Volumetric capture
Tags: volumetricvideo, volumetric, 3dscanning, unity3d
Published: 2019-11-29 11:37:44


If you are working with VR, AR than you mush have heard about volumetric capture. This is a post how to make your own DIY volumetric capture rig. 

You need to choose between 180 and 360 volumetric capture rig. 
For 180 degrees volumetric capture you can use 1 or 2 Azure kinect, Kinect v2 or Intel realsense cameras. For full 360 volumetric video you will need 4 sensors.
Additional hardware: 1 x light stand per sensor, 1 x regular US power extensions, 1 x PC per 2 sensors. I recommend PC with specs - WINDOWS 10 operating system, CPU is Intel® Core™ i9 – 3.0 GHz or higher. 


Once you set your sensors you will get a very very noisy point cloud and the sensors wont be calibrated. Software will fix the noice and sensor calibration instantly.EF EVE ™ volumetric capture: https://ef-eve.com/volumetric-capture/ starts from $39 a month and has all the filters for point cloud cleaning and sensors calibration.
Introducing our December 2019 sponsors
Tags: meta
Published: 2019-12-06 15:00:58

---
title: Introducing our December 2019 sponsors
published: true
description: Our wonderful sponsors are vital to the health of dev.to and it is great to work with companies contributing so much to the ecosystem.
tags: meta
cover_image: https://p78.f0.n0.cdn.getcloudapp.com/items/9ZuNe404/Image+2019-12-02+at+7.14.16+PM.png?v=b4ec225246d3797e251426bbdbf9cbdc
---

This month, we return DigitalOcean and CloudBees, and welcome Pusher as a Gold Sponsor. Thank you to each of these companies for being a valuable DEV Community partner and supporter.

Please take a few minutes to explore their offerings and consider them for your company or next project.


## **DigitalOcean**

[DigitalOcean](https://do.co/devto) is a much-loved cloud computing platform. I'm always impressed by how well-built _and well-documented_ the DigitalOcean core products are. It's easier said than done, and they've been able to stay ahead of the curve.

DigitalOcean has been our longest-running supporter to date, and we're extremely thankful for their consistent support. Their commitment to the developer ecosystem is crystal clear.

As an organization, it's awesome to see the evolution of their service and their remarkable ability to stay top of the game for years now.

{% organization digitalocean %}

## **CloudBees Rollout** 

[CloudBees Rollout](https://rollout.io/?utm_source=devto&utm_medium=referral&utm_content=dec_sponsorship&utm_campaign=rollout_trial_devto) is a powerful code release toolset that brings feature flags, analytics, and testing to the process. Reduce risk by decoupling feature deployment from code releases. CloudBees as a whole provides solutions for CI, CD, and application release orchestration (ARO).  They are the largest contributor to Jenkins, the very popular open-source automation server. Cloudbees is truly a company that lives DevOps and CI/CD to its core with its entire offering. 

We are very grateful to CloudBees who have continued to support us as a Gold sponsor for three months straight.

{% organization cloudbees %}

## **Pusher**

[Pusher](https://pusher.com/?utm_source=dev-to&utm_medium=sponsorship&utm_campaign=gold-dec-19&utm_content=recognitionthread) empowers developers to create collaboration and communication features in their web and mobile apps. Providing robust APIs that are flexible, scalable, and easy to integrate, Pusher can power realtime experiences in all your apps.

We are using Pusher ourselves to build out several realtime features for [dev.to](/). Pusher is a super well-respected engineering organization and we're pumped to build on their infrastructure.

{% organization pusher %}


***

These organizations are helping us build the best community we can. I urge you to check out their offerings if you are in the market for their services.

Happy coding ❤️
Coroutine Delay
Tags: android, ios, kotlinmultiplatform
Published: 2019-12-03 01:50:39

---
title: Coroutine Delay
published: true
date: 2019-12-03 00:09:28 UTC
tags: android,ios,kotlin-multiplatform
canonical_url: https://patrickjackson.dev/coroutine-delay/?utm_source=rss&utm_medium=rss&utm_campaign=coroutine-delay
cover_image: https://thepracticaldev.s3.amazonaws.com/i/1tbr43z1s5aca1wl5h8h.jpg
---

```
Handler().postDelayed({ doSomething() }, 3000)

DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { doSomething() }
```

A common pattern is to delay execution of some code for a given amount of time. In Android and iOS there are several ways to do, such as the above snippet. How can we pull this into shared Kotlin Multiplatform code?

```
myCoroutineScope.launch { delay(3000) uiScope.launch { doSomething() } }
```

Here the `uiScope.launch` runs the `doSomething()` function on the main thread. If main thread is not needed `uiScope` can be left out.

There is one trick here for MPP projects. On iOS this will cause a crash at runtime. On iOS you will need to use a custom Dispatcher. Chances are that you are already as a stopgap until multithreaded coroutine support lands.

Here is a Dispatcher that supports `delay()` on iOS. Full source can be found in the [ReadingList sample app](https://github.com/reduxkotlin/ReadingListSampleApp/blob/master/common/src/iosMain/kotlin/org/reduxkotlin/readinglist/common/UI.kt) from the ReduxKotlin project:

```
import kotlinx.coroutines.*
import platform.darwin.*
import kotlin.coroutines.CoroutineContext

\**
 * Dispatches everything on the main thread. This is needed until
 * multithreaded coroutines are supported by kotlin native.
 * Overrides Delay functions to support delay() on native 
 */
@UseExperimental(InternalCoroutinesApi::class) class UI : CoroutineDispatcher(), Delay {
 override fun dispatch(context: CoroutineContext, block: Runnable) {
   val queue = dispatch_get_main_queue()
   dispatch_async(queue) { block.run() }
 }

   @InternalCoroutinesApi
   override fun scheduleResumeAfterDelay(timeMillis: Long, continuation: CancellableContinuation<Unit>) { 
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, timeMillis  1_000_000), dispatch_get_main_queue()) {
    try {
      with(continuation) {
        resumeUndispatched(Unit)
      }
    } catch (err: Throwable) { 
      logError("UNCAUGHT", err.message ?: "", err)
      throw err
    }
 }
}

 @InternalCoroutinesApi
 override fun invokeOnTimeout(timeMillis: Long, block: Runnable): DisposableHandle {
   val handle = object : DisposableHandle {
     var disposed = false 
       private set
     override fun dispose() {
       disposed = true
       } 
    }
 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, timeMillis 1_000_000), dispatch_get_main_queue()) {
     try { 
        if (!handle.disposed) {
         block.run()
         }
     } catch (err: Throwable) { 
        logError("UNCAUGHT", err.message ?: "", err)
        throw err
      } 
    }
   return handle
 }
}
```


The post [Coroutine Delay](https://patrickjackson.dev/coroutine-delay/) appeared first on [PatrickJackson.dev](https://patrickjackson.dev).
How to take a screenshot on Mac | A quick tutorial
Tags: takeascreenshotonmacbook, takeascreenshotonmac, howtoscreenshotonmac
Published: 2019-12-03 07:28:34

Sometimes, while working on the internet we need to save some pictures while browsing to check them offline. Taking a screenshot is the easiest way to save pictures from the internet. There are some shortcuts for taking a screenshot on all operating systems. The shortcuts may be different on different operating systems. Such as if you are using the world’s most-used PC OS i.e Windows you need to press Windows key + PrtSc button. In the windows, the dedicated prtscr button is given to take a screenshot on windows pc.
On the other hand, Mac is also a PC’s operating system that is developed by Apple inc. and this is a lot different from the windows. If you have used windows and switching to the mac you might have a lot of problems with using macintosh os, because it has their own shortcuts which are totally different from the windows. So you have to learn all these shortcuts to use mac.
Consider you want to take a screenshot on macbook air you will not find any windows or PrtScr button on the keyboard. But don’t worry there are some other shortcuts to take a screenshot on mac.
Here is a quick tutorial on how to take a screenshot on mac.
Press Shift — Command — 4 together from the keyboard. Now you will see the capture screen.
To capture full screen choose capture entire screen option from the given options. After selecting this option the pointer will immediately change to the camera icon.
Now click with the camera icon on any part of the screen and screenshot will be captured.
Now you will see a thumbnail of the screenshot in the corner of the screen.
Click on the thumbnail to edit/copy/save it. If you don’t click on that it will be automatically saved to your desktop.
If you want to know how to capture some specific area on your Mac desktop and how to take a screenshot on a different version of Mac os read the full article.
How to screenshot on mac.
Also, read the article on
How to recover microsoft account using account.live.com/acsr
How to make HTML form using googlesheet as a Database
Tags: googleappsscript
Published: 2019-12-12 06:37:10

I have a google spreadsheet, where some rows append on daily basis and using the google spreadsheet, the customer feedback team follows up.

Google Spreadsheet Data.

https://docs.google.com/spreadsheets/d/1V-XZdCUZAQVkfCat9vXVxITjjNMxNMPDin6B5j9uMWY/edit?usp=sharing
  
The above mentioned Google Spreadsheet always have the below mentioned data at google sheet (Highlighted in blue):

Ref ID
Company Name
Contact No.1
Contact No.2
Project Name
Agent ID

Rest of the mentioned details would be captured from the HTML UI basis the user response and finally click on 'Submit & Next' or 'Next' the input get stored at google sheet.

The User has to first enter the 'Agent Id' on HTML UI and accordingly one by one `Ref ID` detail would be given to particular 'Agent Id` user. 

As mentioned in the attached screenshot, The left side of the information would be static as per the googlespread sheet, and right hand side information would be filled by the user basis the telephonic conversation.

Below mentioned particulars will be drop down or radio options basis user input:

    Product : Lite, Lite-I, Elite
    Ref Code: LIT-1, LIT-2, LIT-3
    Status  : Accept, Reject, Pending
    Comment : Satisfied, Call Back, Pending

Below mentioned particulars will be derived:

    Days Passed: It will be derived from the current system year - year mentioned in the `Date`

Below mentioned particulars will be user input as a free text.

    Client Name
    Notes
    Final_Status

**Note:** The agents will be assigned and shown only those `Ref ID` where the `Agent ID` is not blank and `Final_Status` is either blank or other than 'Submit & Next' marked in Googlespread Sheet.

We need to add one more column in the Googlespread sheet, Which capture the Date time stamp as per the system date as soon as the `Final_Status` marked as 'Submit & Next` or 'Next'

Submit & Next button would only be enable if all the details are captured by user. 
Next Button would only be enable if `Comment` option is selected.

![Alt Text](https://thepracticaldev.s3.amazonaws.com/i/1yxseqs5lu1ifdes6mnm.PNG)
Máy phát điện xoay chiều Vinafarm
Published: 2019-12-12 06:59:49

Theo một số ý kiến thì bất kỳ loại máy phát điện nào tạo ra một dòng điện xoay chiều đều gọi là máy phát điện xoay chiều. Nhưng theo như lý thuyết máy phát điện xoay chiều được ghi trong giấy tờ sách vở thì lại khác. Bởi vì máy phát điện xoay chiều phải sản sinh ra điện năng nhờ vào hiện tượng cảm ứng điện từ.
Máy phát điện xoay chiều là một trong những thiết bị không còn quá xa lạ gì với người tiêu dùng Việt Nam. Loại máy này được người dùng gọi với nhiều cái tên khác nhau. Ví dụ như là máy phát điện không đồng bộ hay máy phát điện
Bạn có thể xem thêm các loại máy phát điện tại đây:https://thnvinafarm.com/
https://thnvinafarm.com/may-phat-dien
https://thnvinafarm.com/may-phat-dien-chay-bang-dau
https://thnvinafarm.com/may-phat-dien-chay-bang-xang
Nếu vẫn chưa tìm được nơi mua máy phát điện ưng ý, bạn có thể tìm thêm thông tin của Vinafarm tại hệ thống profile:
https://buddypress.org/members/thnvinafarm/profile/
https://www.instapaper.com/p/thnvinafarm
https://www.wantedly.com/users/125164602
Hidden Tutorial Gems (Easy but Great Ones)
Tags: dotnet, angular, javascript, tutorial
Published: 2019-12-14 09:13:36

Besides the previous posts' main, impactful tutorials, I came across some nice material in slightly more hidden/unknown places.  There are authors that deserve more attention, because their content is  high quality, and even more importantly, teach the foundations of fresh developments.

**A. The .NET stack**
For me, *Entity Framework* was something that I wanted to learn this year. But all that I found were books and tutorials - mostly complicated and obscure, that I continuously gave up.

Until I found this simple but excellent material for EF Core, that laid down the foundation for me:
https://code-maze.com/entity-framework-core-series/

*The Razor Pages* tutorial in ASP.NET Core, a simple, yet beautiful one, which made me studying this further:
https://www.learnrazorpages.com/razor-pages/tutorial/bakery

**B. The Web Stack (Angular, Firebase and Javascript.)**

*Fireship*. I am amazed a little bit how posts in dev.to do not really mention this site as an excellent resource:
https://fireship.io/lessons/

Jeff Delaney, the author, is a Google Developer Expert, and the content is funny, high quality and latest technology in the Angular, Firebase, JavaScript stack. I did quite a few of those tutorials, and purchased his PDF Firebase book.

In my opinion, Firebase is a very interesting solution, and for web developers, a must to dive into. I wish I could have more time to study the material on Jeff's site above, but now I am caught in the .NET world with my current project.

*Angular Material* tutorial. This design system seems very modern and powerful, yet the knowledge requested is advanced, and the best tutorial overall which was not too basic: https://code-maze.com/angular-material-series/

*PWA with Angular*. Unfortunately I did not finish this, but I very much liked it as it combines Angular, Material Design, Firebase and PWA: https://www.pwawithangular.com/