teleren/devto huggingface dataset:
AI Will Not Take Your Job...Yet
Tags: webdev, podcast, ai
Published: 2022-12-22 18:25:31

{% spotify spotify:episode:3aezWyHraJTWG9yLVo8GT0 %}

## What is HTML All The Things?

HTML All The Things is a [web development podcast](https://www.htmlallthethings.com/) and [discord community](https://discord.com/invite/jweMCx9) which was started by Matt and Mike, developers based in Ontario, Canada. 

The podcast speaks to web development topics as well as running a small business, self-employment and time management. You can join them for both their successes and their struggles as they try to manage expanding their Web Development business without stretching themselves too thin.

---





## What's This One About?

This week Mike discussed his experimentation with ChatGPT and other AI services, like GitHub Copilot. ChatGPT, Lensa, and other AI have been taking the internet by storm recently, whether it be through cool looking profile pictures, or the controversial ways they operate. In this episode we discussed things like how fast AI has advanced in such a short period of time, the opportunities innovators have to make their mark on the industry, and whether or not something like Copilot will take away your programming job.

## Show notes/Time stamps

* State of AI | 00:07:00 
 - Github Copilot (openAI) 
 - ChatGPT (openAI) 
 - midjourney, dalle 2, diffusion, lensa
* What can AI do now? | 00:42:01 
 - Help with coding: debugging, writing, commenting, coding tests 
 - Create boilerplates from different tech stacks 
 - Make fancy profile pictures 
 - Create art/graphics based on a prompt
* What can't AI do now? | 01:06:32 
 - Sucks at humour 
 - Produce reliable code 
 - Answer non-standard dubugging



## Thank you!

If you're enjoying the podcast consider giving us a review on [Apple Podcasts](https://podcasts.apple.com/us/podcast/html-all-things-web-development-web-design-small-business/id1412209136) or checking out our Patreon to get a shoutout on the podcast. 

**[Support us on Patreon](https://www.patreon.com/htmlallthethings)**


You can find us on all the podcast platforms out there as well as

[Instagram (@htmlallthethings)](https://www.instagram.com/htmlallthethings/)
[Twitter (@htmleverything)](https://twitter.com/htmleverything)
[TikTok](Html All The Things)
DOM Manipulation Basics: Vanilla JS
Tags: javascript, beginners, programming, dom
Published: 2022-12-22 18:16:51

The Document Object Model **(DOM)** is an essential part of web development, and JavaScript allows us to manipulate the DOM in powerful ways. The DOM is a tree-like structure that represents the HTML of a web page, and by using JavaScript, we can add, remove, and modify elements in the DOM to create dynamic and interactive web pages.

One common way to manipulate the DOM is through the document object, which is a global object in JavaScript that represents the HTML document. Using the document object, we can select elements on the page, access their properties, and modify their content or style.

For example, to select an element by its unique ID, we can use the **document.getElementById** method:

```
const element = document.getElementById('my-element');
```
You can also use **document.querySelector** method, this method can prove more useful at times.

```
//To get an element by ID
const element = document.querySelector('#my-element-id');

//To get an element by Class
const element = document.querySelector('.my-element-class');
```

_Note the difference between ID and Class. To find an ID you must use **'#myId'**. To find a Class you must use **'.myClass'**._

Once we have selected an element, we can modify its content using the **innerHTML** property:

```
element.innerHTML = 'Hello, world!';
```
We can also modify the style of an element using the **style** property:

```
element.style.color = 'red';
```
In addition to these basic techniques, we can use methods such as **createElement** and **appendChild** to add new elements to the DOM, and **removeChild** to remove elements.

```
element.createElement("div");
element.appendChild(aChild);
element.removeChild(aChild);
```

Overall, the DOM is a powerful tool for interacting with web pages, and learning to manipulate it is an important part of becoming a proficient JavaScript developer. Whether we are building simple websites or complex applications, the ability to manipulate the DOM is an essential skill that every JavaScript developer should have in their toolkit.

**Sources:**
[**MDN**](https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model/Introduction)
Deploy simple SpringBoot application in Minikube
Tags: kubernetes
Published: 2022-12-22 18:10:02

Source Code repository -
https://github.com/pradz13/K8S/tree/main/kubernetes-demo

Kubernetes Scripts repository -
https://github.com/pradz13/K8S/tree/main/kubernetes-demo-scripts

Please follow the following steps to deploy the Spring Boot application in Minikube -

1. Start the Minikube - minikube start
2. Check Minikube status - minikube status
3. Allow Kubernetes to read our local Docker repository - eval $(minikube docker-env)
4. List all the Docker images - docker images
5. Navigate to project folder and create the image of the application
    docker build -t kubernetes-demo:1.0 .
6. Again check the list of Docker images - docker images
7. Create the K8S deployment file - deployment.yaml
8. Deploy the deployment file in the cluster with command : kubectl apply -f deployment.yaml
9. Check the deployment status : kubectl get depoyments
10. Check the running pods : kubectl get pods
11. Fetch the logs of running PODs : kubectl logs <POD Name>
12. Create a service.yaml for Service discovery, it will also act as a Load Balancer
13. Expose the app creating the service : kubectl apply -f service.yaml
14. Check the service status : kubectl get service
15. To get the URL type the command : minikube service kubernetes-demo-svc  --url
16. Application can be accessed by the URL retrieved at step 15
17. Dashboard can be launched using the command : minikube dashboard
Romana subtitra Full Episode
Published: 2022-12-22 18:02:43

"**[Romana subtitrat](https://romanasubtitrat.com/)**: important subtitles in the digital age"

Accessing the content of all media around the world is easier than ever in the digital age.With all of this, one of the barriers that may prevent people from enjoying this continuity is language.Subtitrarile sunt a solution that allows people to choose the media continuity regardless of the language spoken.

Subtitrarile sunt texts that are displayed on screen and provide a translation of dialogue or narration from film, television, or other media.They are used to translate media that is spoken in a language other than the listener's native language, but they can also be used to provide translation of dialog or narration in the same language for both video and audio.

**[Subtitles in Romanian](https://romanasubtitrat.com/)** are extremely important because they allow people to understand media content in their native language.This may be especially important for those who do not understand the original language of the text or who are surging or have hearing problems.

Subtitrarile in limba romana sunt also important for the Romanian media industry.They enable people to access content from all over the world, which may result in a greater variety of programs and films available for public consumption.

To summarize, Romanian subtitles play an important role in allowing people to understand the continuity of media and the diversity of available programs and films for Romanian consumers.They are an important solution for breaking down mental barriers in the digital age.
What No Meta-Framework Does: Part 2
Published: 2022-12-22 17:46:53


I've [complained about meta-frameworks](https://dev.to/reggi/the-thing-no-meta-framework-does-4fh4) in the past, specifically in regards to file-system routing. But I want to explore another use case specific to my ideas for a ["Widget" Site](https://dev.to/reggi/the-vision-behind-the-widget-site-a-deep-dive-into-component-based-design-3mam)..

If I wanted to have a component, say `<Customer>`, and a route `/customer`, and I wanted both to be able to accept an id, like `<Customer id={1}>` and `/customer/1`, how could I achieve this in one definition? It seems like a simple ask, right? There are still many questions to ask. If this component is rendered on the client, should it fetch an endpoint `/api/customer.json?id=1`? If it were to be rendered on the server, can it not make that call? I was just exploring the idea behind ["Full Stack Components" from Kent C. Dodds](https://www.epicweb.dev/full-stack-components?ck_subscriber_id=1868043728#) and I'm not quite sure it has the versatility I'm looking for. The complexity for me comes when you need a component to know about a static resource url. Normally with file system routing, this isn't really necessary. An exported function runs server-side, like Next.js's `getServerSideProps` or Remix's `loader` for that route, and renders the markup.

The things I'm looking for in a route/component definition are the following:

1. The component endpoints for loading data and input actions should be publicly exposed.
2. The component itself should be internally reusable the same way you'd use it in a request.
3. The component should be able to be used on the front-end and make a fetch call if desired.

Currently, it seems that most meta-frameworks do maybe one of these things.
JavaScript Objects 101
Tags: javascript, webdev, developers
Published: 2023-01-06 18:50:33

---
title: JavaScript Objects 101
published: true
date: 2022-12-22 17:36:44 UTC
tags: JavaScript,webdev,developers,javascript
canonical_url: https://greenido.wordpress.com/2022/12/22/javascript-objects-101/
---

The Object type represents one of [JavaScript’s data types](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures). It’s important stuff as we will use them—a lot.

It is used to store various keyed collections and more complex entities. Objects can be created using the [Object()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/Object) constructor or the [object initializer / literal syntax](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer). Did you know that all modern JavaScript utilities for working with objects are [static](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object#static_methods)?

Here is an example of a JavaScript object that contains two names and one key:

```
let obj = {
  name1: "John",
  name2: "Jane",
  key: "value"
}
```

This object has three properties: name1, name2, and key. The values of name1 and name2 are strings, and the value of key is also a string. You can access the values of these properties using the dot notation, like this:

```
console.log(obj.name1); // Output: "John"
console.log(obj.name2); // Output: "Jane"
console.log(obj.key); // Output: "value"
```

You can also use the square bracket notation to access the properties of the object, like this:

```
console.log(obj["name1"]); // Output: "John"
console.log(obj["name2"]); // Output: "Jane"
console.log(obj["key"]); // Output: "value"

```

You can use the for…in loop to iterate over the properties of the object, like this:

```
for (let prop in obj) {
  console.log(prop + ": " + obj[prop]);
}
```

Output:  
name1: John  
name2: Jane  
key: value

Here is a more ‘full’ example to the properties inside an object:

```
tmpObj= {};
tmpObj= {a: 'foo', b: 42, c: {}};

const a = 'foo';
const b = 42;
const c = {};
tmpObj= { a: a, b: b, c: c };

tmpObj= {
  get property() {},
  set property(value) {}
};

tmpObj= { proto: prototype };

// Shorthand property names
tmpObj= { a, b, c };

// Shorthand method names
tmpObj= {
  property(parameters) {},
};

// Computed property names
const prop = 'foo';
tmpObj= {
  [prop]: 'hey',
  ['b' + 'ar']: 'there',
};
```
10 practical newsletters every CTO should read
Tags: programming, productivity, career, growth
Published: 2022-12-22 17:23:36


Hello to the dev.to community! I’m Anvar, an ex-iOS developer and now CTO at Ukrainian marketplace [Lemon.io](https://lemon.io/).

I love reading. In fact, I read more than ~300 articles in 2022 (and bookmarked even more). Most of the articles I found in the curated newsletters for tech leads. Those newsletters are super useful, as they provide you insights on engineering approaches, culture deep-dives, hiring & onboarding, as well as all news from the space.

So I put my list with detailed feedback on every newsletter [here](https://lemon.io/blog/10-interesting-newsletters-for-ctos-and-software-engineering-leaders/).
6 reasons why you should learn ReactJs in 2023!
Tags: react, programming, 2023, frontend
Published: 2022-12-22 17:19:36

আপনি যদি আজকের দিনে [Google ](https://www.google.com/)সার্চ করেন যে Top "10 Prgramming Languages" তাহলে সবার উপরে যেটা থাকবে সেটা হচ্ছে Javascript। আর কোন একটা Language তখন ই বেশি পপুলার হয় যখন এর উপর বেইজ করে অনেক লাইব্রেরী, ফ্রেমওয়ার্ক বা রিসোর্স থাকে। Javascript এর রয়েছে প্রচুর লাইব্রেরী এন্ড ফ্রেমওয়ার্ক যা একাধারে ফ্রন্ট-এন্ড এবং সার্ভার সাইডেও প্রচুর ব্যাবহার হচ্ছে।


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

Javascript এর অনেক অনেক পপুলার লাইব্রেরী বা ফ্রেমওয়ার্ক এর একটি হচ্ছে ReactJs। React হচ্ছে একটি ফ্রি ওপেন সোর্স ফ্রন্ট-এন্ড জাভাস্ক্রিট লাইব্রেরী যার সাহায্যে আমরা খুব সহজেই একটি ইন্টারেক্টিভ ওয়েব এপ্লিকেশন তৈরি করে ফেলতে পারি। অনেক বড় বড় প্রতিষ্ঠিত কোম্পানি (Netflix, Airbnb, Instagram) এটি ব্যবহার করে থাকে। ওয়েব ডেভেলপমেন্ট সেক্টর এর জনপ্রিয়তার শীর্ষে থাকা এবং চাকরির বাজার ডমিনেট করে রাখা এই লাইব্রেরী টা আপনার কেন শেখা প্রয়োজন এমন ৬ টি কারন নিয়ে আজকের এই আলোচনা।

1. Cross-Platform
রিএক্ট শিখলে আপনি cross-platform অর্থাৎ ReactJs ব্যাবহার করে আপনি ওয়েব এপ্লিকেশন যেমন বানাতে পারবেন তেমন এর Native ভার্সন React Native ব্যাবহার করে মোবাইল এপ্লিকেশন ও ডেভেলপ করতে পারবেন। কত্ত মজা তাই না! একটা Technology আপনি ভাল করে আয়ত্ত করেই দুটো প্লাটফরম এ কাজ করতে পারবেন।

2. Components Bases Architecture
রিএক্ট হচ্ছে একটা কম্পোনেন্ট বেইজড লাইব্রেরী। আপনি আপনার পুরো এপ্লিকেশন কে ছোট ছোট টুকরো আকারে চিন্তা করে সেগুলো কে তৈরি করে ফেলবেন। পরে সেগুলো সব একসাথে করে একটি পূর্ণাঙ্গ জটিল Web Page বানিয়ে ফেলবেন। এতে করে আপনার অনেক টাইম বেচে যাবে এবং এপ্লিকেশন এর স্টেট গুলো নিজস্ব কম্পোনেন্ট এর মধ্যেই আলাদা করে হেন্ডেল করা যাবে।

3. Amazing Huge Community
ReactJs এর অনেক বড় একটা ডেডিকেটেড community রয়েছে। যারা এটাকে আপডেট এবং মেইন্টেইন করে থাকে প্রতিনিয়ত। এছাড়াও প্রছুর মানুষ এটা কে ব্যাবহার করার কারনে আপনি কোন সমস্যায় পরলে একটু গুছিয়ে গুগোল করতে পারলেই আপনি আপনার সমস্যার সল্যুশন পেয়ে যাবেন ৯৯% ক্ষেত্রেই।

4. Big Companies Are Using This
React এর এত পপুলারিটি এর অন্যতম একটি কারন হচ্ছে এটি অনেক বড় বড় কোম্পানি ব্যাবহার করছে এবং Big Scale এ এর পারফর্মেন্স প্রমানিত। এটা মূলত ফেইসবুক এর তৈরি এবং ফেইসবুক এটা তাদের অন্যান্য অনেক এপ্লিকেশনেও ব্যাবহার করছে। এছাড়াও অনেক বড় বড় Tech Giants যেমন Instagram, WhatsApp, Uber, Netflix, Tesla, DropBox, Twitter এটা ব্যাবহার করে আসছে। এইসব কম্পানির ফিউচার এর মত আপনার ফিউচার কে সমৃদ্ধ করতে চাইলে আপনি ও React শেখা শুরু করে দিন।

5. React Embraces JavaScript
আপনি যদি জাভাস্ক্রিপ্ট জেনে থাকেন তাহলে আপনি খুব সহজেই React শিখে ফেলতে পারবেন। React এ আপনি Javascript এর সব পাওয়ারফুল ফিচার গুলো ব্যাবহার করতে পারবেন। React হচ্ছে flexible এবং back-end agnostic। মানে আপনি যে কোন backend stack এর সাথেই React ব্যাবহার করতে পারবেন।

6. Fast Learning Curve
অন্যান্ন লাইব্রেরি বা ফ্রেমওয়ার্ক এর তুলনায় React শেখা অনেকটা সহজ। এটা Angular এর মত তত টা heavyweight না। React এ কোন কিছু ডেভেলপ করার প্রসেস টা একটু আলাদা অন্যান্য ফ্রেমওয়ার্ক গুলোর তুলনায়। Javascript এর বেসিক নলেজ আছে এমন যে কেও কয়েকদিনের টিউশন এ খুব সুন্দর এপ্লিকেশন তৈরি করে ফেলতে পারবেন।
Happy Coding 🎉
What is the cheapest deploy option on Digital Ocean?
Tags: digitalocean, cost, webdev
Published: 2022-12-22 17:10:10

---
title: What is the cheapest deploy option on Digital Ocean? 
published: true
description: digital ocean cost to deploy
tags: digitalocean, cost, webdev
cover_image: https://henri-public-bucket.s3.us-east-2.amazonaws.com/digitalocean-logo.jpg
# Use a ratio of 100:42 for best results.
# published_at: 2022-12-22 16:40 +0000
---

I'm still new to the web stack. One of the first cloud providers I deployed web apps to was Heroku, and that's because that's what the developer behind [Bernie Sits](https://www.theverge.com/tldr/22242998/bernie-meme-generator-sanders-sitting-chair-inauguration) used to deploy his viral website back in early 2021. Also it was FREE!

But since then, Heroku has unfortunately decided to stop offering a free tier, and that [sucks](https://dev.to/lukeecart/more-heroku-changes-that-will-definitely-affect-you-10o8). 

Can't cry for too long. So where do I deploy to now? Enter Digital Ocean. So whats the cheapest option I have on Digital Ocean? See below for what I found. 512 MB ram, single core cpu, $5 per month.


![screenshot of digital ocean control panel](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/08pgudvlnhbml8p9dx8g.png)


That sounds pretty good right? Well yes, until I found what kind of server Github is giving to developers for their new [Codespaces](https://github.com/features/codespaces) feature for free. 4GB ram, dual core, 32GB disk space. See below. 


![screenshot of github codespaces control panel](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5fd5fx6ifox7x9g6ht31.png)


Hmmmmm. That really put things in perspective 🤔
Best practices for monitoring and troubleshooting K8s clusters using Otel-based observability tools
Published: 2022-12-22 17:09:49

Otel-based observability tools, such as OpenTelemetry, provide a way to gather and analyze data about the performance and behavior of K8s clusters in real-time. Some best practices for monitoring and troubleshooting K8s clusters using Otel-based observability tools include:

1. Collecting data from multiple sources: It is important to gather data from multiple sources, including the K8s control plane, nodes, and pods, in order to get a comprehensive view of the cluster's behavior.

2. Setting up alerts and notifications: Setting up alerts and notifications can help you stay informed of potential issues and respond to them quickly.

3. Analyzing logs and metrics: Analyzing logs and metrics can help you identify trends and patterns, and can provide valuable insights into the performance and behavior of your K8s cluster.

4.  visualization and reporting tools: Visualization and reporting tools can help you make sense of the data you are collecting and can provide a clear picture of the overall health and performance of your K8s cluster.

5. Regularly reviewing and updating monitoring and observability strategies: It is important to regularly review and update your monitoring and observability strategies to ensure that they are effective and aligned with the needs of your K8s cluster.

https://sprkl.gitbook.io/documentations/install-sprkl-to-get.../new-otel-traces-for-k8s-clusters
Sanitize & Formatting Data in Laravel with Transformer Package
Published: 2022-12-22 16:51:18

The transformer is a PHP package deal for [sanitizing and formatting data powered by Laravel’s](https://techzpad.com/sanitize-and-formatting-data-in-php) validation components. The package deal uses a familiar Laravel validation-like syntax to remodel data utilizing callable functions, classes, and more: 
`use Closure;
 
// Example available functions at runtime:
function to_carbon($value)
{
    return new Carbon\Carbon($value);
}
 
function only_numbers($value)
{
    return preg_replace("/[^0-9]/",'',$value);
}
 
$input = [
  'first_name' => '    Tilak ',
  'last_name' => '   KC',
  'phone_number' => '987-587-2588',
  'date_of_birth' => "1989-05-01",
];
 
(new DataTransformer($input, [
    'first_name' => 'trim|ucfirst',
    'last_name' => 'trim|ucfirst',
    'phone_number' => 'only_numbers',
    'date_of_birth' => 'to_carbon|->format:m/d/y',
]))->transform();`
[Linux Commands] Check what well-known "port number" are there.
Published: 2022-12-22 16:44:35

**Notice: Printed output does not means to assigned and operating in system. It may or not.**

```sh
┌ Print all of services
│$ cat /etc/services
│      ────┬────────
│          └'has well-known port info'
└─────
```
```sh
┌ Print specific service
│$ grep -w 7000 /etc/services
│          ─┬──
│           └'port-number you interested in'
└─────
```
```sh
┌ Print specific service
│$ egrep -w '7000/(tcp|udp)' /etc/services
│            ─┬────────────
│             └'port-number & protocol-type'
└─────
```
5 Best Remote Job Websites Like Fiverr 2023 | Remote IT Jobs 2023
Published: 2022-12-22 16:40:33

5 Best [Remote Job Websites Like Fiverr](https://youtu.be/kA4f6yXph4c) 2023 | Remote IT Jobs 2023

If you're a web developer, there's a good chance that you're looking for a remote job. But how do you find the best remote job websites? In this post, we'll share [five of the best websites](https://youtu.be/kA4f6yXph4c) for web developers looking for a remote job. So whether you're just starting your search or you're ready to start your new career, read on for some great resources!

1o Best Remote Job Websites for Web Developers
5 Best Remote Job Websites for Web Developers
5 Remote Job Websites that will Hire Web Developers
5 Websites to find the Best Remote Jobs for Web Developer

{% youtube kA4f6yXph4c %}
💡Let's improve cyber-physical systems
Tags: opensource, microservices, cps, luos
Published: 2022-12-22 16:31:16

💡 Cyber-physical systems (CPS) integrate computer and physical elements, you’ll see in [this](https://www.luos.io/blog/cyber-physical-systems-how-can-they-be-improved) article how we can improve them.

At Luos, we are working on the continuous improvement of cyber-physical systems to make them more agile. All this using the microservices approach!
Intuition behind ROC AUC and Gini coefficient
Tags: machinelearning, ai
Published: 2022-12-22 16:09:07

## Introduction
Anyone who ever tried to create any classification model, knows that there are not too many metrics that measure the quality of the model and don't depend directly from the model threshold. [ROC AUC](https://en.wikipedia.org/wiki/Receiver_operating_characteristic) score one of the most widely accepted characteristics of the model, but it's not intuitively clear what does it mean? how good is the model with AUC = 70%? what is the potential room for improvement? in some cases, should I still use classification or switch to regression model? how it is connected with corresponding characteristics of regression model: coefficient of determination and correlation coefficient? In this article I will try to prove that **Gini coefficient** (it's equal to 2 * AUC -1) approximately **corresponds to correlation coefficient** in regression tasks and [coefficient of determination](https://en.wikipedia.org/wiki/Coefficient_of_determination) = Gini^2.

## Result
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lo5l7y1jly5hymukul12.png)
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g7xfcy48qenmletil6vy.png)
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wre1s4w370dqyhh35jqq.png)
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zjdpaf2dptfoiewtaftk.png)
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g61t3dlzg0pzqda14hxs.png)
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e8vh9nu59cmsw47s6a9y.png)
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uztna5amu5imrm6a9tpg.png)
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/50vtrhex5r78q3g0ls1u.png)
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k5w0h3vyohflnwgm9x1g.png)

## Conclusion
All in all, we can see that Gini coefficient (= 2 * AUC - 1) corresponds to correlation coefficient in regression models and describes the portion of information that we know about hidden variable. For example, with AUC = 70%, Gini = 40%, and we can explain 16% of variance of hidden variable, and cannot explain 84% of its variance.