teleren/devto huggingface dataset:
Amazon Managed Service for Grafana (AMG)
Published: 2021-01-29 03:09:35

1. Amazon Managed Service Grafana is available for Preview as of Jan 2021 in Europe (Ireland)eu-west-1 and US East (N. Virginia)us-east-1
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/mflcbquple90vgbojh76.png)
2. Give a unique name to your workspace.
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/oc79h0k7z7kfkobxlw7y.png)
3. And yes AWS Sign-On (SSO) is MANDATORY! Come SIGN up for it OR GET LOST!
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/s62lz3oaxdrwvnj8y95a.png)
4. Integration with Amazon Managed Service for Prometheus, Amazon TimeStream is 1 click away not just for CURRENT ACCOUNT but for Your Entire Organization.
https://grafana.com/grafana/plugins/grafana-timestream-datasource
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/u6feo7rwuiiadczl8eza.png)
5. Create your Grafana workspace hassle-free.
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/h3shrxinm7gvo8hnfm5b.png)
6. Grafana 7.3.5 Workspace URL is all READY.
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/p0xe2mmtumdj5i43v5p6.png)
7. Assign Users + Assign User Groups BONUS BONUS BONUS …..
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/tgampm60z812cobrcqjv.png)
8. LOGIN via AWS SSO
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/5ymijtzl0i1wwnwfdpnx.png)
🔥 Interactive Scientific Programming Courses — Bundle
Tags: beginners, productivity, programming, computerscience
Published: 2021-01-29 02:57:59

### The Platform
The **Scientific Programming School (https://scientificprogramming.io/)** platform is powered by Digital Ocean’s multiple droplets (VPS) with a highly scalable design (read our devlogs). With 50+ languages- all set for you from Python, C/C++ OpenMP, MPI, C#, Java, Perl to Matlab, R, Swift, Kotlin and so on, you don’t fiddle with SDKs and IDEs at this time!

Start learning Linux and Devops immediately. It‘s all setup for you in all three flavors of Linux- Ubuntu, RHEL and SuSE. Just click on the terminal window and get a console! Also includes easy to understand animated videos all around, also includes HD terminal captures and so on. All videos are encrypted, self-hosted and optimised for your best viewing experience.

## Introducing the Scientific Programming Courses — Bundles 

Why? Because we believe sharing knowledge is the most wonderful human capability - a powerful and generous way to give back and change the world for the better!

![Bundle offer](https://dev-to-uploads.s3.amazonaws.com/i/egeblomtzkj2ir2bnrs2.png)
https://scientificprogramming.io/bundle-offer

Your support will allow us to focus more on the platform: new features, bug fixes, community support etc., and it also will help to pay the server bills, CDN spaces and backup costs. Learn with the most advanced code playground.


### What’s included?
A course bundle purchase will enable you enrol to all the current courses at just one price. Anything published after the bundle is purchased won’t be included, but you may re-purchase the new courses/ bundle anytime. If you are not happy, we’ll offer you 100% refund! We plan to offer a new bundle each month and seasons.

### Learn more
Scientific Programming School — An Advanced and Interactive Learning Platform
https://scientificprogramming.io/
Preparing to launch an app [Day 3/7]
Tags: showdev, startup, productivity, beginners
Published: 2021-01-29 02:28:22

# Short intro

Third day, this time I decided to focus my research on **Product Hunt**.

Next Monday I'll release [iplan.to](https://iplan.to), a simple web app that allows you to track a habit for 30 days, without requiring an account.

![launch ](https://dev-to-uploads.s3.amazonaws.com/i/t366a3odiz0co3lw4gth.png)

*Disclaimer: This is not a tutorial, I'm just journaling my progress and learnings.*

# What do I need to launch on Product Hunt?

I was reading a bunch of articles about it, and here is my ToDo list:

⬜ Write a tagline of the product: Avoid slogans, optimize for how users search.
⬜ Make a 240x240 GIF for the thumbnail
⬜ At least 2 screenshots (635x380px): Make sure they are "tweetable"
⬜ Write a 1–2 sentence description: short and to-the-point!
⬜ Prepare the first comment: Introduce yourself, the team, and the problem that you’re solving.
⬜ Find a hunter: Try to find someone whose posts are related to your product.

# Some tips

📌 Post right around 12:01am PST to maximize visibility time
📌 Use [Top 500 Makers](https://makernetwork.app/500makers) to find a potential hunter
📌 Post on social media about the launch, make it personal and directly link your product page

# Thank you

I look forward to see how it goes 🤞 
Any feedback is appreciated!
Super easy Discord notification job for Gitlab CI
Tags: devops, gitlab, discord, productivity
Published: 2021-01-29 01:57:57

[Gitlab CI](https://docs.gitlab.com/ee/ci/) is an amazing free alternative to run your pipelines without tears. It runs in a docker container, which comes in handy and also gives us superpowers. 

Once you create a pipeline you wish that everything run automatically and just be notified when it finishes successfully or not.

To make a long story short, let's get our hands dirty.

First of all, we need a pipeline to work on. Here is one super simple job that runs over the lightweight Alpine docker image.

```yml
# .gitlab-ci.yml 

stages:
  - test
  - notification

test:
  image: alpine:latest
  stage: test
  script:
    - echo 🕵🏻 Checking...
```

The next step is to configure our Discord channel that will show our notifications. Do the following path `Your channel > Edit Channel > Integrations > Create Webhook` then name your bot and click `Copy Webhook URL`. ([Discord Webhook Guide](https://support.discord.com/hc/en-us/articles/228383668-Intro-to-Webhooks))

Go to Gitlab CI configuration at your project settings and add a new variable: `settings > CI / CD > Variables` then create a new variable called `WEBHOOK_URL` and paste the copied URL from Discord as the value.

Now we gonna use the script created by [DiscordHooks](https://github.com/DiscordHooks) guys.

Then our pipeline will be as the following:

```yml
# .gitlab-ci.yml 

stages:
  - test
  - notification

test:
  image: alpine:latest
  stage: test
  script:
    - echo 🕵🏻 Checking...

success_notification:
  image: alpine:latest
  stage: notification
  script:
    - apk add --update git curl
    - wget https://raw.githubusercontent.com/DiscordHooks/gitlab-ci-discord-webhook/master/send.sh
    - chmod +x send.sh
    - /bin/ash ./send.sh success $WEBHOOK_URL
  when: on_success

failure_notification:
  image: alpine:latest
  stage: notification
  script:
    - apk add --update git curl
    - wget https://raw.githubusercontent.com/DiscordHooks/gitlab-ci-discord-webhook/master/send.sh
    - chmod +x send.sh
    - /bin/ash ./send.sh failure $WEBHOOK_URL
  when: on_failure
```

Now just chill and enjoy! Check the full code [here](https://gitlab.com/ItaloSa/gitlab-ci-discord-notification).

Note: Do not cache those notifications jobs.
Updates from 80th TC39 meeting
Tags: javascript, tc39
Published: 2021-01-29 01:39:04

There were few other items on the agenda, this post focuses only on the proposal updates from the the meeting.

__Stage 4:__

* [Intl.DateFormat.prototype.formatRange](https://github.com/tc39/proposal-intl-DateTimeFormat-formatRange) Add `formatRange(date1, date2)` and `formatRangeToParts(date1, date2)` to `Intl.DateTimeFormat` to enable date range formatting.

__Stage 3:__

* [JSON modules](https://github.com/tc39/proposal-json-modules): ability to import a JSON module in a common way across JavaScript environments.

* [Ergonomic Brand Checks for Private Fields](https://github.com/tc39/proposal-private-fields-in-in): Check if an object has a private field, and if not, have some fallback behavior.


__Stage 2:__

* [Module Blocks](https://github.com/tc39/proposal-js-module-blocks): Module blocks are syntax for the contents of a module, which can then be imported.

* [Intl.DisplayNames](https://github.com/tc39/proposal-intl-locale-info): enable developers to get translation of language, region or script display names on the client, part of ECMA-402.

* [Intl.DisplayNames V2](https://github.com/tc39/intl-displaynames-v2): A proposal to expose Locale information, such as week data (first day in a week, weekend start day, weekend end day, minimum day in the first week), hour cycle used in the locale, measurement system used in the locale, part of ECMA-402.

__Stage 1:__

* [`async do`](https://github.com/bakkot/proposal-async-do-expressions): async do expressions allow you to introduce an asynchronous context within synchronous code without needing an immediately-invoked async function expression.

* [Class brand check](https://github.com/hax/proposal-class-brand-check): `class.hasInstance` a meta method to check whether `o` have the class brand of `C`.

* [Extend TimeZoneName Option](https://github.com/tc39-transfer/proposal-intl-extend-timezonename): Extend the timeZoneName option in Intl.DateTimeFormat object to support more formatted options, part of EMCA 402.

* [eraDisplay](https://github.com/Louis-Aime/proposal-intl-eradisplay): `eraDisplay` option for `Intl.DateTimeFormat` `eraDisplay` option may take 3 values: "never", always", "auto".

* [regex-set-notation](https://github.com/tc39/proposal-regexp-set-notation): Adopting Unicode behavior for set notation in regular expressions.

* [Escaping Strings for RegExps](https://github.com/benjamingr/RegExp.escape): escaping a string for use inside a Regular Expression.

* [Array find from last](https://github.com/Kingwl/proposal-array-find-from-last): `findLast()` and `findLastIndex()` methods on `Array.prototype`.

* [lazy-import](https://github.com/codehag/proposal-lazy-import): defer module import eval.

* [Intl LocaleMatcher](https://github.com/longlho/proposal-intl-localematcher): Improve locale negotiation correctness and developer productivity part of ECMA-402.

<hr />


<center>[@gnumanth](https://twitter.com/gnumanth)</center>
Adding a custom js to backend - Magento 2
Tags: magento2
Published: 2021-01-29 01:29:03

To add a JS througout backend in Magento, I followed the following method.

1.Add the head tag in Paboda/Demo/view/adminhtml/layout/default.xml

```
<?xml version="1.0"?>

<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <head>
        <link src="Paboda_Demo::js/lib/custom.js"/>
    </head>
</page>
```

2.Add the custom.js file to the following path Paboda/Demo/view/adminhtml/web/js/lib/custom.js
Data Model ของ Prometheus
Tags: prometheus, devops, programming
Published: 2021-01-29 01:15:52

มาต่อกันที่ [Data Model](https://prometheus.io/docs/concepts/data_model/) ของ Prometheus กัน คือ Prometheus เนี่ยเก็บข้อมูลเป็น Time Series แต่ตัวรูปแบบข้อมูลของ metrics ที่เอามาเก็บพร้อม timestamp เนี่ยมันมีรูปแบบและองค์ประกอบดังนี้

## Metric Names and Labels
ข้อมูลในแต่ละเซ็ตของ time series ที่เก็บเนี่ยแยกกันโดยใช้ metric name กับ labels ซึ่งเป็น key/value (label_name/value)

ตัวของ metric name อักษรที่เอามาตั้งชื่อได้ถ้าดูตาม RegEx pattern ก็แบบนี้ `[a-zA-Z_:][a-zA-Z0-9_:]*` ก็คือขึ้นต้นด้วย `a-z` หรือ `A-Z` หรือ `_` หรือ `:` แล้วตัวถัดๆไปก็ ขึ้นต้นด้วย `a-z` หรือ `A-Z` หรือ `_` หรือ `:` หรือ ตัวเลขได้ ตัวอย่างเช่น `http_requests_total`

ตัวของ label เป็น key value โดยตัว key name นั้นตั้งชื่อได้โดยมีกฎ RexEx pattern ดังนี้ `[a-zA-Z_][a-zA-Z0-9_]*` ซึ่งก็เหมือนกับ metric name นั่นล่ะยกเว้นใช้ `:` ไม่ได้

ส่วน value ของ label นั้นเป็น string อะไรก็ได้ที่อยู่ในเซตของ Unicode characters

## Samples
Sample ก็คือข้อมูลที่เรากำหนดใช้กับ metric name ที่มี labels ตามที่เรากำหนดโดยตัวข้อมูลนั้นเก็บได้แค่ 2 แบบคือ
- float64 เป็นเลขแบบทศนิยม 64 bits
- millisecond-precision timestamp เป็นเลขจำนวนเต็มระบุถึงจำนวนของเวลาในหน่วย millisecond

## Notation
ที่นีรูปแบบของการเขียนค่า metric ของ metric name ที่มี labels และ sample ตามที่ต้องการนั้นอยู่ใน pattern แบบนี้

```
<metric name>{<label name>=<label value>, ...} sample_value
```

ตัวอย่างเช่น ถ้าเรามี metric name ชื่อ `api_http_requests_total` ที่มี 2 labels คือ `method="POST"` และ `handler="/messages"` เพื่อเป็น metric ที่ระบุถึงจำนวน request ที่เกิดขึ้นโดยที่มี http method เป็น `"POST"` และ ยิงมาที่ endpoint `handler="/messages"` และ sample value เป็น 10 เราจะเขียนได้แบบนี้

```
api_http_requests_total{method="POST", handler="/messages"} 10
```

นี่ก็คือ Data model กับวิธีการเขียน metric ของ Prometheus ครั้งต่อไปมาดูว่ามี Metric Type แบบไหนกันบ้างให้ใช้งานสำหรับ Prometheus

## ขอฝาก Buy Me a Coffee
สำหรับท่านใดที่อ่านแล้วชอบโพสต์ต่างๆของผมที่นี่ ต้องการสนับสนุนค่ากาแฟเล็กๆน้อยๆ สามารถสนับสนุนผมได้ผ่านทาง Buy Me a Coffee คลิ๊กที่รูปด้านล่างนี้ได้เลยครับ

<a href="https://www.buymeacoffee.com/weerasak" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" alt="Buy Me A Coffee" style="height: 60px !important;width: 217px !important;" ></a>

ส่วนท่านใดไม่สะดวกใช้บัตรเครดิต หรือ Paypal สามารถสนับสนุนผมได้ผ่านทาง PromptPay โดยดู QR Code ได้จากโพสต์ที่พินเอาไว้ได้ที่ Page DevDose ครับ https://web.facebook.com/devdoseth

ขอบคุณครับ 🙏
Day 28 - Smallest String With A Given Numeric Value
Tags: leetcode, python, challenge
Published: 2021-01-28 22:28:42

## The Problem

> The __numeric value__ of a __lowercase character__ is defined as its position `(1-indexed)` in the alphabet, so the numeric value of `a` is `1`, the numeric value of `b` is `2`, the numeric value of `c` is `3`, and so on.

> The __numeric value__ of a __string__ consisting of lowercase characters is defined as the sum of its characters' numeric values. For example, the numeric value of the string `"abe"` is equal to `1 + 2 + 5 = 8`.

>You are given two integers `n` and `k`. Return the __lexicographically smallest string__ with __length__ equal to `n` and __numeric value__ equal to `k`.

>Note that a string `x` is lexicographically smaller than string `y` if `x` comes before `y` in dictionary order, that is, either `x` is a prefix of `y`, or if `I` is the first position such that `x[i] != y[I]`, then `x[I]` comes before `y[I]` in alphabetic order.

 

__Example 1:__

```
Input: n = 3, k = 27
Output: "aay"
Explanation: The numeric value of the string is 1 + 1 + 25 = 27, and it is the smallest string with such a value and length equal to 3.
```

__Example 2:__

```
Input: n = 5, k = 73
Output: "aaszz"
```

__Constraints:__

* `1 <= n <= 105`
* `n <= k <= 26 * n`

## Tests

```python
import pytest
from .Day28_SmallestStringWithAGivenNumericValue import Solution

s = Solution()


@pytest.mark.parametrize(
    "n,k,expected",
    [
        (3, 27, "aay"),
        (5, 73, "aaszz"),
    ],
)
def test_get_smallest_string(n, k, expected):
    assert s.getSmallestString(n, k) == expected
```

## Solution 

```python
from collections import deque


class Solution:
    def getSmallestString(self, n: int, k: int) -> str:
        d = deque()
        i = n - 1
        while i >= 0:
            a = min(k - i, 26)
            d.extendleft(chr(a + ord("a") - 1))
            k -= a
            i -= 1

        return "".join(d)
```

## Analysis

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

## Commentary

My solution performance is terrible!!! I tried doing standard string concatenation but that performed even worse. Not sure what I can do better here. I have a lot to learn. I thought a queue would be quick for building the string with the extend left bit. 

The solution itself is straightforward enough. Start from `n -1` and work the way back and assign the maximum possible numeric value to `a`. Prepend that to the queue. At the end convert the queue to a string. `26` is the max possible value since there's 26 letters in the alphabet. We're essentially chopping up z as we go to fit it into n pieces.
Extracting Consumer’s Needs through Web Mining
Tags: data, security, technology, customersdata
Published: 2021-02-03 18:51:13

---
title: Extracting Consumer’s Needs through Web Mining
published: true
date: 2021-01-29 00:30:00 UTC
tags: Data,Security,Technology,customersdata
canonical_url: https://centocode.com/extracting-consumers-needs-through-web-mining/
---

Web services help to execute created search queries. Web service is a software system designed to support interoperable machine to machine interaction over a network.

The post [Extracting Consumer’s Needs through Web Mining](https://centocode.com/extracting-consumers-needs-through-web-mining/) appeared first on [CentoCode.com](https://centocode.com).
A new way to use hadolint 🐳
Tags: tooling, github, git, docker
Published: 2021-02-04 21:39:20

---
title: A new way to use hadolint 🐳
published: true
date: 2021-01-29 00:15:00 UTC
tags: tooling, github, git, docker
canonical_url: https://www.benjaminrancourt.ca/a-new-way-to-use-hadolint
cover_image: https://www.benjaminrancourt.ca/temp/a-new-way-to-use-hadolint.2000.jpg
---
Some times ago, we started a new project at work and we wanted to add a [GitLab CI pipeline](https://docs.gitlab.com/ee/ci/pipelines/) for continuous integration.

As we were using [Docker](https://www.docker.com/), we wanted to **lint** our **Dockerfile** automatically to make sure we were following **[best practices](https://docs.docker.com/develop/develop-images/dockerfile_best-practices/)**. We therefore sought to add a tool that we were using in other projects: [**hadolint**](https://github.com/hadolint/hadolint).

## What is hadolint?

_hadolint_ is a linter that helps us build better Docker images. It uses your Dockerfiles to check over 50 rules and can even validate your Bash commandes with [ShellCheck](https://www.shellcheck.net/). 🐚

You can check at their GitHub repository to find [an (incomplete) list of implemented rules](https://github.com/hadolint/hadolint#rules). Rules prefixed by `DL` come from hadolint and rules prefixed by `SC` come from ShellCheck.

## How to add it to your .gitlab-ci.yml file?

As I was looking to see if any new features were been added since the last time I checked, I was pleasantly surprised to see that the maintainers and contributors added a new way to use the tool by providing the [**recipe to use in GitLab**](https://github.com/hadolint/hadolint/blob/master/docs/INTEGRATION.md#gitlab-ci):

```yaml
# To update hadolint/hadolint version
# https://hub.docker.com/r/hadolint/hadolint/tags?page=1&ordering=last_updated
lint:hadolint:
  image: hadolint/hadolint:v1.19.0-45-gef91156-alpine
  only:
    refs:
      - branches
    variables:
      - $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH
  script: hadolint Dockerfile
  stage: tests
```
<figcaption>A slightly modified recipe to use in GitLab CI</figcaption>

Personally, I found this way cleaner than running the `docker run --rm -i hadolint/hadolint < Dockerfile` command, so I decide to write this little post to celebrate this new functionality and to share this awesome tool around me. 🥳

```yaml
lint:hadolint:
  script: docker run --rm -i hadolint/hadolint < Dockerfile
  stage: tests
```
<figcaption>Our old way to use hadolint</figcaption>

Do you know any other hidden gems like this that we should use? 💎

> PS. They even released a [**Web tool**](https://hadolint.github.io/hadolint/) if you want to lint your Dockerfiles in your navigator! 🥰
How to find an object from an array of objects using the property value in JavaScript?
Tags: javascript
Published: 2021-01-29 00:00:00

---
  title: How to find an object from an array of objects using the property value in JavaScript?
  published: true
  tags: JavaScript
  date: Fri Jan 29 2021 05:30:00 GMT+0530 (India Standard Time)
  canonical_url: https://melvingeorge.me/blog/find-object-from-array-of-objects-using-property-value-javascript
  cover_image: https://melvingeorge.me/_next/static/images/main-dfd5ad228875e230785928a8ccd513b1.jpg
  ---
  [Originally posted here!](https://melvingeorge.me/blog/find-object-from-array-of-objects-using-property-value-javascript)
  
To find an object from an array of objects, we can use the `filter()` method available in the array and then check to see the object property's value matches the value we are looking for in the `filter()` method.

To understand it clearly,

Consider an array of objects like this,

```js
// array of objects
const objectsArr = [
  { name: "John Doe", age: 23 },
  { name: "Melina", age: 21 },
  { name: "Roy Dalton", age: 43 },
];
```

Our aim to find the object in the array which have the property `age` with the value of `21`.

So let's use the `filter()` method in the `objectsArr` array. **See the post on [`filter()` method](https://melvingeorge.me/blog/array-filter-method-javascript) to understand how it works 😃.**

```js
// array of objects
const objectsArr = [
  { name: "John Doe", age: 23 },
  { name: "Melina", age: 21 },
  { name: "Roy Dalton", age: 43 },
];

// using filter() method
// to filter out the object we need
const objectWeNeed = objectsArr.filter((object) => {
  return object.age === 21;
});

console.log(objectWeNeed); // [ { age: 21, name: "Melina"} ]
```

- If we return boolean `true` from the `filter()` method it will give out only that object in the array which matches the condition and discard the rest of the objects in the array.

To put it simply it will keep all the objects in the array which match the condition inside the `filter()` method.

And We have successfully found the object from an array of an object using the property's value.

See this example live in [JSBin](https://jsbin.com/gifajaqodo/2/edit?js,console).

### Feel free to share if you found this useful 😃.

---
Global Game Jam 2021 with Kernel Gaming Guild, IGDA Foundation, and Web Monetization
Tags: gamedev, webmonetization, globalgamejam, igda
Published: 2021-01-29 17:11:34

---
title: Global Game Jam 2021 with Kernel Gaming Guild, IGDA Foundation, and Web Monetization
published: true
date: 2021-01-29 00:00:00 UTC
tags: gamedev, webmonetization, globalgamejam, igda
canonical_url: https://enclavegames.com/blog/global-game-jam-2021-kernel-igdaf/
cover_image: https://dev-to-uploads.s3.amazonaws.com/i/5snouqlkra4oiliscqhs.jpg
---

This year’s [Global Game Jam](https://globalgamejam.org/), given what’s happening around the world, went entirely online. The good news are you all are invited to particpate however and wherever you want.

It was usually held over the weekend, from Friday till Sunday, but to give participants more time this year, it actually started on Wednesday already - [theme for 2021](https://www.youtube.com/watch?v=fL6HMs9frgw) is **Lost and Found**.

Since you aren’t limited to a [local venue](https://gamedevjs.pl/wydarzenia/gamejamjs-2019) anymore, you can pick any from around the world. If you haven’t started and still looking for one, make sure to consider [KERNEL Gaming Guild Game Jam 2021](https://globalgamejam.org/2021/jam-sites/kernel-gaming-guild-game-jam-2021). As you might expect, it’s a gathering for folks participating in the [Kernel Gaming Guild](https://end3r.com/blog/kernel-gaming-guild/) that is happening over the span of the next few weeks, where you can learn about (and build) Web 3 games.

### [<svg aria-hidden="true" focusable="false" height="16" version="1.1" viewbox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg>](#web-monetization-diversifier)Web Monetization diversifier

**IGDA Foundation** was able to introduce a new [diversifier](https://globalgamejam.org/news/ggj-online-diversifiers) for the Global Gam Jam 2021 participants called **Virtual Wallet** , which is all about the **Web Monetization API**.

> Make a web game that uses an alternative revenue model.

Check their [dedicated landing page](https://igdafoundation.org/ggj2021/) for more details on how to join the fun, and feel free to ask questions at the [GGJ’s official Discord](https://discord.com/invite/ggj), the **IGDA-F** sponsor channel specifically, where I’ll be more than happy to assist you with any **Web Monetization** related questions or issues!