teleren/devto huggingface dataset:
SEO Tips that every Web Designer should follow
Tags: webdev, seo, design, website
Published: 2022-02-19 10:38:18

<p>A unique, attractive, and user-friendly website is compulsory for any business. But without enough SEO ranking, however gorgeous they look and their functionality is, the website is a total waste. That is why apart from the appearance, web designers should make an SEO-friendly website. Thus, web professionals should understand the SEO basics to deliver a top ranking.</p>
<h2>Ways to Make a Website SEO-friendly</h2>
<p>There are multiple ways to make an SEO-friendly website. But&nbsp;web designers should follow the below tips while coding a website.</p>
<h3>Incorporate SEO-friendly site navigation</h3>
<p>To avoid a website that is not SEO-friendly, web professionals should add navigation that is SEO-friendly. Many designers use flash objects in the site navigation, but they cannot make it web-crawler friendly and easily accessible. As a result, it affects SEO negatively. So, instead of Flash objects, the <a href="https://www.webomindapps.com/seo-company-in-bangalore.html">SEO company</a> recommends the use of CSS and unobtrusive JS to add fancy effects without affecting SEO rankings.</p>
<h3>Use external CSS and JavaScript</h3>
<p>Nowadays, external CSS and JS is a must to improve SEO rankings. Therefore, always paste your CSS and JS content outside the HTML file. It is crucial as search engines view a site through its HTML content. Hence, if not externalized, it cannot read the HTML file rapidly, which will affect SEO ranking negatively.</p>
<h3>Make the site responsive</h3>
<p>It is probably the most crucial SEO tip that should be used while coding designs. Web designers should use media queries or frameworks like Bootstrap or Foundation to make the site device-friendly. Google prefers a responsive site as it adapts to different screen sizes and makes it better for users. Hence, consider this while coding a site.&nbsp;</p>
<p>These are some crucial SEO tips that every web professional should follow while <a href="https://dev.to/manojsworld/why-creative-website-designs-are-crucial-for-every-website-5ea9">making creative web designs</a> and writing HTML and CSS.</p>
Writing Scrum Toolkit #1 - Initial design
Tags: typescript, javascript, react, showdev
Published: 2022-02-19 10:31:17

The last few weeks after my main job I have been working with a friend on various topics related to our upcoming scrum toolkit. My friend was responsible for the design, and because he is [mastering Figma](https://www.behance.net/krzysztofsojka1), he made several screens with propositions of what it may look like.

A few first designs looked too similar in my opinion to other great, already existing tools on the market so we pivot design from classic, corporational blue-navbar-container-footer design to a more funky one.

Our main colour is going to be sea green. Participants of the events are going to have colourful avatars (from open source [sensa emoji](https://github.com/sensadesign/sensaemoji) pack)  that are going to be animated. 

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4wwp5j4zbt6d0u7vjewt.png)
 
Also, I don't like the idea of navbars, because they are taking too much space - so after discussion with a friend, he moved the settings and other important but non-crucial elements to the hidden sidebar.

Currently, our app looks following:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ctw2z7oktp3xmrmvf458.png)
Why do we bind event handlers in React???
Tags: react, javascript, oop, computerscience
Published: 2022-02-19 10:30:26

## What is "bind" in Javascript?

Bind is a method inside _Function.Prototype_ which returns a new function whose `this` keyword's value is set to the value which was passed to the bind method via the parameters.
Example:

![Example code for bind method](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/npjya0xlect3jowxbcng.png)

In this example, the `this` keyword of the handleEvent function was changed to the `this` keyword value of the current context.


## But why do we need it in react?

In Class Components in React, we usually pass the event handlers as the callbacks which in turn perform certain actions after the event has taken place. But as we all know, callbacks tend to lose the context which called them(also known as implicitly bound context). To preserve the context we bind the context and then are able to use it inside the event handler.

---

> We don't need to worry about the context when we are using arrow functions (after they were introduced in ES6), because they automatically bind to the scope which called them and hence we don't need to explicitly bind them with the current scope.

---

- [bind() method Docs](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_objects/Function/bind)

- [Detailed explanation for React](https://www.freecodecamp.org/news/this-is-why-we-need-to-bind-event-handlers-in-class-components-in-react-f7ea1a6f93eb)
The never-ending stream of self-help books
Tags: discuss, personal, improvement, books
Published: 2022-02-19 10:25:14

---
title: The never-ending stream of self-help books
published: true
description: Why are there a lot of new self-help books still being published every day?
tags: discuss, personal, improvement, books
cover_image: https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lgcnm583jp5vwlb59nfo.jpeg
---

_Originally published on [my blog](https://www.nikola-breznjak.com/blog/daily-thoughts/the-never-ending-stream-of-self-help-books/)._

> Why are there a lot of new self-help books still being published every day if everything was already written? Maybe the newer ones speak better to newer generations 🤔

---

This is [why I write](https://www.nikola-breznjak.com/blog/daily-thoughts/why-do-i-write-these-daily-thoughts-posts/) these 'daily thoughts' posts.
Knowing != Doing
Tags: discuss, personal, improvement, growth
Published: 2022-02-19 10:21:37

---
title: Knowing != Doing
published: true
description: Knowing does not guarantee doing
tags: discuss, personal, improvement, growth
cover_image: https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qunl9mqlnk5ys4mw9r2y.jpg
---

_Originally published on [my blog](https://www.nikola-breznjak.com/blog/daily-thoughts/knowing-doing/)._

> Knowing does not guarantee doing, and that's a good thing! Every pro knows how he has to hit the ball; 'just' swing the club. Sure, they are using visualization techniques and all. But, they can't escape the need for deliberate practice.

---

This is [why I write](https://www.nikola-breznjak.com/blog/daily-thoughts/why-do-i-write-these-daily-thoughts-posts/) these 'daily thoughts' posts.
免费公共 DNS 服务器大全 | Free Public DNS Server List
Published: 2022-02-19 10:14:03

---
title: 免费公共 DNS 服务器大全 | Free Public DNS Server List
published: true
description: Free Public DNS Server List
tags: 
//cover_image: https://direct_url_to_image.jpg
---

收集全球公共 DNS 服务器 IP，我们不提供 DNS，只做 DNS 的搬运工。

* [墙内](#wallin)
* [墙外](#wallout)

## 备注

博主使用的 DNS 列表：

主 DNS | 备 DNS
---|---
119.29.29.29 | 8.8.4.4

👍 为推荐使用
❌ 为不推荐使用

<span id="wallin"><h1>墙内 DNS 服务器</h1></span>

**⚪ 腾讯 DNS (DNSPod)**

由 DNSPod 提供的公共免费 DNS，后来 DNSPod 被腾讯(Tencent)收购，现在属于腾讯公司所有，稳定性和连通性也是不错的，经测试国外也可以使用。

主 DNS | 备 DNS
---|---
👍 119.29.29.29 | 182.254.116.116

**⚪ 阿里 DNS (Alidns)**

这组 DNS 是由阿里巴巴提供的，国内连通性还是不错的，国外部分地区连通性不是特别好，具体可以测试一下。

主 DNS | 备 DNS
---|---
👍 223.5.5.5 | 223.6.6.6

**⚪ 114DNS**

南京信风运营的免费公共 DNS。

主 DNS | 备 DNS
---|---
114.114.114.114 | 114.114.115.115

**⚪ CNNIC DNS**

是由中国互联网信息中心 CNNIC 提供的免费公共 DNS。

主 DNS | 备 DNS
---|---
1.2.4.8 | 210.2.4.8
2001:dc7:1000::1 |

**⚪ OneDNS**

北京微步在线科技有限公司提供的 DNS 服务，提供纯净版和广告、有害信息拦截版 DNS。
纯净版 | 备 DNS
---|---
117.50.10.10 | 117.50.20.20

拦截版 | 备 DNS
---|---
117.50.11.11 | 117.50.22.22

**⚪ 清华大学 TUNA 协会 DNS 服务器**

IPV4 DNS | IPV6 DNS
---|---
101.6.6.6 | 2001:da8::666

**⚪ 百度 DNS**

百毒的东西不建议使用，看看就好。

IPV4 DNS | IPV6 DNS
---|---
❌ 180.76.76.76 | 2400:da00::6666


<span id="wallout"><h1>墙外 DNS 服务器</h1></span>

**⚪ Google Public DNS**

Google 提供的公共免费 DNS，应该是最流行的公共 DNS 了，不过国内主 DNS 可能无法正常使用。

主 DNS | 备 DNS
---|---
8.8.8.8 | 👍 8.8.4.4
2001:4860:4860::8888 | 2001:4860:4860::8844

**⚪ Cloudflare DNS**

Cloudflare DNS 是 Cloudflare 与 APNIC 联合推出的号称全球最快的 DNS 服务。APNIC 是一个管理亚太与大洋洲地区 IP 地址分配的非盈利性组织，1.1.1.1 归 APNIC 所有，现在交给 Cloudflare 来提供 DNS 服务。

主 DNS | 备 DNS
---|---
1.1.1.1 | 👍 1.0.0.1
2606:4700:4700::1111 | 2606:4700:4700::1001

**⚪ Quad9 DNS**

IBM 发起的 Quad9 提供的公共免费 DNS.

主 DNS | 备 DNS
---|---
9.9.9.9 | 149.112.112.112
2620:fe::fe | 2620:fe::9

**⚪ OpenDNS**

OpenDNS 是由老牌通信设备商 Cisco 提供的公共免费 DNS 服务。

主 DNS | 备 DNS
---|---
208.67.222.222 | 208.67.220.220
2620:0:ccc::2 | 2620:0:ccd::2

**⚪ TWNIC Quad101**

台湾 TWNIC 提供的 DNS，速度不错。

主 DNS | 备 DNS
---|---
101.101.101.101 | 101.102.103.104
2001:de4::101 | 2001:de4::102

**⚪ Freenom World DNS**

.tk .ga 等免费域名提供商提供的 DNS，在香港有服务器速度不错。

主 DNS | 备 DNS
---|---
80.80.80.80 | 80.80.81.81

---

大部分参考至 [1](https://dns.icoa.cn/)
How to make flip card with 5 lines CSS
Tags: css, productivity, beginners, html
Published: 2022-02-19 10:07:18


Flip card is cool idea to show more information on hover effect, and you can do it with just 5 main lines.

## HTML Code

This is how your HTML should be :
```html
<div class="card">
  <div class="flip__container">
    <div class="front__face"><!-- front content --></div>
    <div class="back__face"><!-- back content --></div>
  </div>
</div>
```

## CSS Code

This is the basic CSS code you need :
```css
.flip__container{
  transform-style:preserve-3d; /* line 1 */
  transition: transform 1s ease-in-out; /* speed of fliping */
}

.front__face,
.back__face{
  position:absolute; /* line 2 */
  backface-visibility: hidden; /* line 3 */
}

.back__face{
  transform:rotateY(180deg); /* line 4 */
}

.card:hover .flip__container{
  transform:rotateY(180deg); /* line 5 */
}
```
**transform-style:preserve-3d;**
=> Indicates that the children of the element should be positioned in the 3D-space.
**position:absolute;**
=> Make front and back face on top of each others
**backface-visibility: hidden;**
=> The back face is hidden, effectively making the element invisible when turned away from the user.
**transform:rotateY(180deg);**
=> The rotateY() function is an inbuilt function which is used to rotate an element around the vertical axis.(we used it in back face to hide it and for the hover effect to show it)

## Live Demo 🎥

{% codepen https://codepen.io/zougari47/pen/ExbgYGe %}

If you find this example complex for you, check out this simple version on [Sandbox](https://codesandbox.io/s/flip-card-py9me?file=/index.html).

Thanks for reading.
### Connect with me 

[Twitter](https://twitter.com/zougari47)

[GitHub](https://github.com/zougari47)
Task force 5.0 <Induction/>
Tags: episode1, taskforce, agile, coding
Published: 2022-02-19 10:00:58

Hello, nice to meet you :heart_eyes:   Welcome to the taskforce 5.0 blog series.                                                  

> [The Task Force](https://awesomity.rw/our-projects) is Awesomity and Code Of Africa effort to develop a solid and talented pool of software developers and product designers right here in the heart of Africa.

In this blog series  I will be sharing my interesting ,challenging and educational Experience  as taskforce intern.


## Self Discovery and Team work

Day first , we had an interesting soft skill session :relieved:  with the help of  [16 personalities](https://www.16personalities.com) I discovered my personality type and core values.

I can`t imagine how accurate  it was !! :anguished: it was like there was someone inside my mind and telling me what they saw. 

> Tip : We continue to shape our personality all our life.

Second day , we learnt more about online team collaboration  and presentation skills. I` m glad how those skills prepared me for Friday presentation.  

##  Agility in Software development 

Our first week in taskforce 5.0 was more about introduction into project management using agile methodology.


![scrum](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ecdihqowrq7uz8w0ni1f.png)
 
Absolutely, this was my favorite course so far ! And  I can`t imagine the progress  we made only in 5 days .

In short  we learnt how to describe persona, create user stories , describing acceptance criteria for each single user story, story mapping, etc.

> Tip: The agile mindset is a thought process that involves understanding, collaborating, learning, and staying flexible to achieve high-performing results


## The Super Frid:heart_eyes:y :dancer:

Hhmmm yes it was  breathtaking Friiiiday. 

**Joy**, **dance**, **play** and **affection** are highlights of  this  Friday and I can confirm that our first week ended in style.  

To sum up my first week was lit :fire: and I can`t  wait to see what other 5 remaining weeks hold. Remember this is the first episode of taskforce 5.0 blog series  "next episodes are coming soon"
Generate three servers using   Vagrant file
Published: 2022-02-19 09:46:37

```
# -*- mode: ruby -*-
# vi: set ft=ruby :

# All Vagrant configuration is done below. The "2" in Vagrant.configure
# This defines the version of vagrant
Vagrant.configure("2") do |config|

MACHINE = ["nginx","wordpress","mysql"]
N = 2

(0..N).each do |i|

  config.vm.define "#{MACHINE[i]}" do |node|
  node.vm.hostname = MACHINE[i]
  node.vm.box = "ubuntu/focal64"
  node.vm.network :private_network, ip: "192.168.33.#{10+i}"

  if (i == 0)
  node.vm.provider "virtualbox" do |vb|
  vb.memory = "512"
  end
  node.vm.provision "shell", inline: <<-SHELL
       apt update
     apt install -y php libapache2-mod-php php-mysql
     cd /tmp
     curl -O https://wordpress.org/latest.tar.gz
     tar xzvf latest.tar.gz
     touch /tmp/wordpress/.htaccess
     cp /tmp/wordpress/wp-config-sample.php /tmp/wordpress/wp-config.php
     mkdir /tmp/wordpress/wp-content/upgrade
     mkdir /var/www/wordpress
     cp -a /tmp/wordpress/. /var/www/wordpress

  SHELL


  else if (i == 1)
  node.vm.provider "virtualbox" do |vb|
  vb.memory = "700"
  end
  node.vm.provision "shell", inline: <<-SHELL
      apt update
      apt install -y apache2
      systemctl enable apache2
      systemctl restart apache2
 SHELL
 else
  node.vm.provider "virtualbox" do |vb|
  vb.memory = "1024"
  end
  node.vm.provision "shell", inline: <<-SHELL
      apt update
      apt install -y mysql-server
      systemctl enable mysql
      systemctl restart mysql

  SHELL


end
end
end
end
end


```
OpenBSD ftpd 7.0: FTP server
Tags: openbsd, ftp, ftpd, server
Published: 2022-02-19 09:35:53

## Summary

[OpenBSD](https://www.openbsd.org/) has its own FTP server called [ftpd](https://man.openbsd.org/ftpd).

`ftpd`, the FTP daemon, is installed and disabled by default.
All what to do in order to use it is just run `rcctl enable` and `rcctl start`.

## Tutorial

### Before Configuration

Let's see it's disabled by default:

```console
$ doas rcctl check ftpd
ftpd(failed)
```

### Step 1: Enable Daemon

First, enable it:

```console
$ doas rcctl enable ftpd
```

_\* Note: Here, `/etc/rc.conf.local` will be updated like this:_

```console
$ cat /etc/rc.conf.local
ftpd_flags=
```

### Step 2: Start Daemon

Then start it:

```console
$ doas rcctl start ftpd
ftpd(ok)
```

The FTP server is now running.
You can establish ftp connection to the server 😉 (as long as there is no network issues.)

_\* Note: Accessing as `root` is forbidden._

## Conclusion

OpenBSD provides not only the daemon program but also [several configuration files](https://man.openbsd.org/ftpd#FILES). `/etc/ftpchroot` and `/etc/ftpusers` must be sometimes useful.
Top Ways To Center A DIV Using CSS
Published: 2022-02-19 09:31:53

Welcome Friends!!  
Its a bit difficult thing to position a DIV. 
So here let's take a look to top 3 ways to Center DIV :

####Absolute :

```
.class {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
}
```
But, There's more easy ways.

####Flex :
Make the parent DIV a flexible column or row then align & justify the children in the center.
```
.class { 
    display: flex;
    align-items: center;
    justify-content: center; 
}
```
That's a great way. But today we can do it with less code using Grid Layout.

####Grid :
Justify the parent DIV as a grid and place the items center.
```
.class {
    display: grid;
    place-items: center;
}
```
Yes, its that much simple.

---
Thank You For You Time. Have A Good Day 🙂.
Yaraa.ai - Digital Project manager for remote teams
Published: 2022-02-19 09:16:46


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gaxnhiktlxm8ke9djdyr.jpg)

Yaraa.ai your digital employee available for work 24*7. The AI-Powered business suite is ideal for Hybrid (remote + onsite) teams and effective collaboration with speech-based-touch-free, Human-System Interaction.

[Yaraa Manager](https://yaraai.com/) is the easiest way to manage Remote teams, Projects, and Tasks. Yaraa is an AI-powered Business suite that Creates projects & Task Scheduling Without human Interaction. Team members can chat and talk with each other with ease. It gives teams everything they need to stay in sync, hit deadlines, and reach their goals.

Digital Employee improve work efficiency by operating 24/7
Automate your work processes with Digital Employee
Empower your business for a Hybrid (remote + onsite) Work environment
No English. No Worry. Speak in your language and get work done


Speak to Yaraa in Any popular languages & create Project |Task | To Do:
Manage your projects in one centralized platform without human Interaction.

Move team ideas to action, quickly and faster: 
Collaborate & deliver your project on time by managing and reviewing tasks.

Increase Team Conversation:
Employee engagement and communication become much faster with the Chat and call tool

Advance Features: 
 
Speech to Text: Honour your team's time using Speech to Text AI technology for quick work actions. Yaraa understands voice commands in all popular languages. 

Digital human: Yaraa Harnesses tremendous potential in AI technology to solve staff crunch and automate business processes to the next level.

Project Tracker: With a few Voice-Commands create and manage projects in a few seconds. Actionable project progress report available on the dashboard.

Task Tracker: Assign and complete tasks faster than ever with real-time comments. Task timer helps complete priority tasks and in-time delivery.

To-do list: Want Employees to manage tasks on their own? Use a to-do list to track workload. Agile companies will find it easy to work with it. 

Calendar and Board View: The easiest way for project managers to plan, manage, and visualize their work in a shared team calendar. Organize work on a Kanban board and streamline task management at every stage.

Call and Chat: Access important messages easily and organize the conversation by putting them in the right place. Increase Employee Engagement with Task Related group chats, work calls, video calls,  Voice Messages, etc.

Notification: Get an instant Notification of all activities like Assigned tasks, messages, and new teammates. Set reminders and get notified when important tasks are approaching their due dates.
모바일에서 invalid date
Tags: javascript, date, errors
Published: 2022-02-19 08:28:50

## TL;DR

- date는 string X, number O

## 본론

배경

데스크탑 웹에서는 잘 동작하는 date가 모바일에서는 Invaild date 오류를 뿜음
해결 과정

구글링을 해보니 이런 게 있었음 RangeError: invalid date
오늘의 연, 월, 일을 가져오는 함수에서 yyyy.mm.dd 형식의 string을 date로 만들어주는 게 문제가 됨.

```js
const getYearMonthDate = (date: Date): Date =>
    new Date(`${date.getFullYear()}.${date.getMonth() + 1}.${date.getDate()}`);
```

setHours(0, 0, 0, 0)으로 string을 안쓰고 해결함

```js
const getYearMonthDate = (date: Date): Date =>
    new Date(date.setHours(0, 0, 0, 0));
```


## 결론

new Date 인자값으로는 number를 써야하고 다른 언어와 연동되기 쉽게 DB에는 number(Unix Time Stamp)로 DB에 저장하는 게 좋다.
Yjs + typegoose = yTypegoose
Tags: javascript, yjs, typegoose, typescript
Published: 2022-02-19 08:26:38

## TL;DR

typegoose와 Yjs를 같이 사용할 수 있는 라이브러리를 만듬(유지보수 안함)

## 본론

처음에 Notion, Roam Research, Workflowy같은 어플리케이션을 만들다가 이전에 긱뉴스에서 본 CRDT 관련 글이 인상깊어서 적용해보기로 했다.
yjs는 그 자체로 CRDT 기능에 충실했고 군더더기 없이 심플했다. 그리고 websocket, indexeddb 등을 지원하기 때문에 레퍼런스가 훌륭하다고 생각했다.
처음에는 y-leveldb와 mongodown 을 섞어서 사용하고 있었지만 오류가 많았다.(이 글을 쓰기 오래전에 만들어서 정확히 생각이 안나지만…^^;) 오류를 고치고 고치고 고치다가 결국 어떻게 돌아가는 지 대략 이해하게 되어서 yTypegoose를 만들어서 사용하게 되었다.

- 사용 방법
```
yTypegoose.createModel('nodes');

const docId = 'node-1';
const doc = new Y.Doc();
await yTypegoose.storeUpdate(docId, Y.encodeStateAsUpdate(doc));
```

- `yTypegoose.ts`

{% embed https://gist.github.com/wes5510/9413866d280bbb8b9ded8802a1a27510 %}


## 결론

CRDT를 구현하려면 Yjs를 사용하는 걸 추천한다. 사용하기 쉽고 레퍼런스도 많았다. 그리고 Typegoose와 Yjs를 사용하려면 yTypegoose.ts를 참고하는 것도 나쁘지 않다. 아 그리고 지금 유지보수를 안해서 참고만 하는 게 좋을 거 같다.
A Quick 10-Second Programming Joke For Today
Tags: jokes, dailydeveloperjokes
Published: 2022-02-19 08:00:28

---
title: "A Quick 10-Second Programming Joke For Today"
description: "Check out today's daily developer joke! (a project by Fred Adams at xtrp.io)"
series: "Daily Developer Jokes"
published: true
tags: #jokes, #dailydeveloperjokes
---

Hi there! Here's today's Daily Developer Joke. We hope you enjoy it; it's a good one.

![Joke Image](https://private.xtrp.io/projects/DailyDeveloperJokes/public_image_server/images/5e1258e0be565.png)

---

For more jokes, and to submit your own joke to get featured, check out the [Daily Developer Jokes Website](https://dailydeveloperjokes.github.io/). We're also open sourced, so feel free to view [our GitHub Profile](https://github.com/dailydeveloperjokes).

### Leave this post a ❤️ if you liked today's joke, and stay tuned for tomorrow's joke too!

_This joke comes from [Dad-Jokes GitHub Repo by Wes Bos](https://github.com/wesbos/dad-jokes) (thank you!), whose owner has given me permission to use this joke with credit._

<!--
Joke text:
___Q:___ How did pirates collaborate before computers ?

___A:___ Pier to pier networking.
 -->
Flutter: Providing non-objects.
Tags: flutter, dart, javascript, beginners
Published: 2022-02-19 07:59:30

**> Providing non-Objects
Typically, when working with the Provider package, you provide objects based on your custom classes.

This makes sense because you can implement the **ChangeNotifier** mixin in your classes to then trigger **notifyListeners() ** whenever you want to update all places in your app that listen to your data.

But you're not limited to providing objects - you can provide ANY kind of value (lists, numbers, strings, objects without **ChangeNotifier ** mixing, ...).

Example:

_Provider<String>(builder: (ctx) => 'Hi, I am a text!', child: ...);_

Of course, if you're using Provider Package v4 or greater, it would be **create: ...** instead of **builder: ...**

You might wonder, how this text can change though - it's a constant text after all. It certainly doesn't implement the **ChangeNotifier **mixin (the **String** class, which is built into Dart, indeed doesn't - just like numbers, booleans, etc.).

It's important to note, that the above snippet uses Provider, NOT **ChangeNotifierProvider**. The latter indeed only works with objects based on classes that use the **ChangeNotifier** mixin. And this is the most common use case because you typically want to be your global data changeable (and have the app UI react to that).

But in case you just want to provide some global (constant) value which you can then conveniently use like this:

**print(Provider.of<String>(context)); // prints 'Hi, I am a text!'; does never update!**
you can do that.