teleren/devto huggingface dataset:
How to import data from spreadsheet easily and productive
Published: 2021-06-19 10:19:30

This post is for developers, who just got a huge spreadsheet of data and have to import them to the application. Recently I was in that position and I have a couple of takeaways how to make the process easier, faster and less painful. 

## 1. Make a copy of a spreadsheet and fix it

Non-technical people in general see data much different from a developer. You will have to remove duplicates, standardize fields, maybe add additional fields and probably remove a lot of useless data. This step is to make the parsing easier and remember, that most of the time it's easier to change data in the document, than making sophisticated mechanisms in the code.

- For **duplicated rows,** try adding just another column as a flag field (e.g. products duplicated in different packets - add fields/columns `IsPacketA`, `IsPacketB`, etc).
- **Avoid lots of data in one column** - split everything that you think should be different property, but don't overdo -you are not creating a relational database here.
- If **some data duplicates are necessary** (e.g. product variants - color, size, etc.), make sure that data is consistent. Look for typos and similarities (e.g. XL and big - use one standard for size) and always split such data in the same way (comma `,` worked best for me).
- Check **floating point character** - using comma may cause incorrect parsing, so the best idea would be to use en-Us regionals in the document.

## 2. Export data to CSV

Working with plain text is much easier, than parsing rows and cells. In C# there is a super simple NuGet called [CsvHelper](https://joshclose.github.io/CsvHelper/getting-started/) that will load all data in a few lines of code. Make sure that **delimiter** may conflict with your data - for me, semicolon worked perfectly. I tried working with TSV but in my case it was missing new lines and some empty columns.

## 3. Start coding with difficult data

Now the data is ready to be loaded in the code. Before developing anything, watch for new lines and special characters - they might be parsed incorrectly and/or cause the application to crash. Maybe you will have to go back to fix the data in the spreadsheet but it much more time-consuming now, than at the later stages.

## 4. ID's, keys

Store id's/keys in the spreadsheet from step 1. This will help work with the changes at later stages - it will be easier to locate row by key in the database to update it. [Guid generator](https://www.guidgenerator.com/) will help you with generating unique values.

## 5. Explain the "fixed spreadsheet" to the author

Having two sources of data is a nightmare. You will encounter situations, where you will have to investigate, which document is newer, merge changes, resolve conflicts... To avoid this, explain your "fixed document" (step 1) to people who created the source document. 

## 6. Finally, track changes in the document

Google Sheets makes it easy with version history. Maybe think about automating the process.
How to stop Angular ng serve on Mac/Linux
Tags: angular
Published: 2021-06-19 10:18:32

There're two ways to do this: 

**First**
Use the following command to end the running process.

`ctrl` + `c`

**Second**
When the process is running as background process, use the `ps` command to find the process ID then use the PID to kill the process.

```
ps -ef | grep "ng serve"
```

The output will look like this:
```
 501 25782 23667   0  5:04PM ttys000    0:22.54 ng serve  
 501 25790 23408   0  5:05PM ttys001    0:00.01 grep ng serve
```

Then use this command to stop ng serve.
```
kill 25782
```
Outlook PST를 MBOX로 내보내는 방법에 대한 쉽고 안전한 방법
Published: 2021-06-19 09:46:52

그래도 PST를 MBOX로 내보내는 방법이 궁금하십니까? 그렇다면 PST에서 MBOX로 변환기를 사용하여 파일을 안전하게 변환하십시오. 이 블로그에는 Outlook PST에서 MBOX 로의 변환 도구를 사용하여 PST 파일을 MBOX로 변환하는 방법에 대한 세부 정보가 포함되어 있습니다. 대부분의 사람들은 PST 파일을 MBOX로 변환하기가 어렵지만 신뢰할 수있는 PST에서 MBOX로 파일 변환기를 선택하면 데이터 손실없이 다양한 이메일 클라이언트로 쉽게 가져올 수 있습니다. <b><a href="https://www.gaintools.com/pst/mbox/">PST 에 MBOX 변환기 앱</a></b>

<b>사용자가 Outlook PST 파일을 MBOX로 내보내는 이유는 무엇입니까?</b>

사용자가 Outlook PST 에 MBOX 변환기 소프트웨어를 사용하여 Outlook PST 파일을 MBOX로 내보내는 데는 여러 가지 이유가 있습니다. 몇 가지 이유가 있습니다.

1. PST 에 MBOX 변환기 는 Outlook 파일 및 폴더를 Eudora, Thunderbird, Mac Mail, SeaMonkey 등과 같은 다양한 MBOX 이메일 클라이언트로 전환합니다.

2. 사용자는 이전에 보관 된 PST 파일을 MBOX 이메일 클라이언트로 가져올 수 있습니다.

3. Outlook PST는 상당히 비싸고 일부 사용자는이를 감당할 수 없어 PST에서 MBOX 파일 변환기로 전환합니다.

4. 사용자가 작업을 변경하거나 데이터를 전송하려는 경우 Outlook PST를 MBOX 형식으로 변환 할 수 있습니다.

<b>PST 에 MBOX 변환기 를 사용하여 PST를 MBOX로 내보내기</b>

Outlook PST 에 MBOX 변환기 는 PST 파일을 MBOX로 안전하게 변환합니다. 모든 폴더, 보낸 편지함, 지운 편지함,받은 편지함, 보낼 편지함, 스팸 폴더 등과 같은 하위 폴더를 포함하여 Outlook 이메일을 MBOX로 내보낼 수 있습니다. 고급 도구는 변환 프로세스 중에 데이터 손실없이 안전하게 변환합니다. 이 도구는 PST 파일을 Windows로 변환합니다. PST to MBOX 변환기는 PST 파일을 Opera, Thunderbird, Apple Mail, Entourage, Eudora, Spicebird, SeaMonkey, Netscape 등으로 가져옵니다. 사용자는 Outlook 연락처와 캘린더를 MBOX 파일로 내보낼 수도 있습니다. 사용자는 변환 프로세스가 시작되기 전에 콘텐츠를 무료로 미리 볼 수 있습니다.

<b>Outlook PST 에 MBOX 변환기의 주요 기능</b>

PST 항목을 다양한 유형의 파일로 변환

PST 에 MBOX 변환기 는 Outlook PST 파일 항목을 PST to EML, EMLX, MBOX, MSG 및 PDF와 같은 다양한 파일 형식으로 변환합니다. 이 도구는 Outlook PST를 Eudora, Zimbra 등으로 변환 할 수 있습니다.

<b>별도 또는 결합 된 MBOX 파일 생성</b>

변환기를 사용하여 별도 또는 결합 된 MBOX 파일을 하나로 만들 수 있습니다. 사용자는 변환 된 MBOX 파일을 더 나은 방법으로 관리 할 수 ​​있습니다.

<b>PST 파일을 MBOX로 쉽게 변환</b>

PST 에 MBOX 변환기 를 사용하면 모든 PST 파일과 폴더를 MBOX 파일 형식으로 변환 할 수 있습니다. 파일 크기 제한이 없으며 사용자는 소형, 중형 및 대형 PST 파일을 변환 할 수 있습니다.

<b>PST 파일의 심층 분석</b>

PST 에 MBOX 변환기 는 손상된 PST 파일을 변환하고 PST 파일을 MBOX 형식으로 내보낼 수 있습니다. 사용자는 PST 파일을 자세히 스캔하여 100 % 파일 변환을 확인할 수 있습니다.
Don't use px!
Tags: css
Published: 2021-06-19 09:45:27

px is a useful format when you're writing a document in Word, for example. As long as no one has zoomed in or out, then you know that if you make your font size 10px then it's going to be small and 20px will be big. 12px is pretty nice to read and it's not complicated.

It is on the web, though.

The default font size on browsers on computers tends to be 16px. So in theory you could set your font size to be 16px, and if you want small text 12px is fine and for big text 20px is fine. Except it's not.

16px is merely the default font size. It's possible for users to change that and make it smaller or bigger. So if someone finds that 16px text is too small to read is not going to be able to read 12px. And someone who finds that 16px is just too big will find 20px absolutely huge.

Which is why relative units are a better idea (em or rem). So on most browsers, 1em = 16px. But for our users above, 1em could = 20px or 12px. You just don't know who is looking at your website and what setup they have - you want it to be readable by everyone. So set your font sizes using em or rem, rather than px.

[If you want to know about the difference between em and rem, Kevin Powell has a video that explains it with examples.](https://www.youtube.com/watch?v=_-aDOAMmDHI) 

This rule also applies to line-height. A line height of 18px might sound like there's plenty of space between the lines of text, but our users could find that it's all squished up or too spaced out, both of which make it hard to read. line-height is best used as a fraction. So a line-height of 1 means same as the font size. A line-height of 1.5 is 1.5 * font-size.

(This post brought to you by me seeing too many sites hard coded to be 12px and since I am the user who finds 16px too small, 12px is tiny in my browser)
Django eCommerce Website, Jewelry Shop (Download)
Tags: django, webdev, python, programming
Published: 2021-06-19 09:17:25

This is a simple e-commerce website built with Django (Python) and PayPal is added as payment processor.

I've made this as a **"Jewelry Shop"** website but you can make any website you like.

## Project Demo on YouTube
{% youtube 7IQwbIYfkNI %}


## Features of this Project
**A. Admin Users Can**
1. Manage Category (Add, Update, Filter and Delete)
2. Manage Products (Add, Update, Filter and Delete)
3. Manage Users (Update, Filter and Delete)
4. Manage Orders (View and Process)

**B. Non-Registered Users Can**
1. View Products (Can filter based on category)
2. Explore Product Details and Related Products

**C. Registered Users Can Can**
1. All of Non-Registered Users
2. Add to Cart
3. Pay with PayPal or Debit/Credit Card and Order
4. See the Order Status
5. See Order History
6. Update Profile
7. Change Password
8. Reset Password

## Support Developer
Subscribe & Share my YouTube Channel - https://bit.ly/vijay-thapa-online-courses

**Donate**

**[PayPal](https://bit.ly/support-vijay-thapa)**

**[Buy me a Coffee  ☕️](https://www.buymeacoffee.com/vijaythapa)**

**Donate by wire transfer:** E-Mail at donate@vijaythapa.com for wire transfer details.

## How to Install and Run this project?

### Pre-Requisites:

1. Install Git Version Control [ https://git-scm.com/ ]

2. Install Python Latest Version [ https://www.python.org/downloads/ ]

3. Install Pip (Package Manager) [ https://pip.pypa.io/en/stable/installing/ ]

*Alternative to Pip is Homebrew*

### Installation

####1.Create a Folder where you want to save the project

####2.Create a Virtual Environment and Activate

**Install Virtual Environment First**
```python
$  pip install virtualenv
```

**Create Virtual Environment**

For Windows
```python
$  python -m venv venv
```

For Mac
```python
$  python3 -m venv venv
```

**Activate Virtual Environment**

For Windows
```python
$  source venv/scripts/activate
```

For Mac
```python
$  source venv/bin/activate
```

#### 3.Clone this project

```python
$  git clone https://github.com/vijaythapa333/django-jewelry-shop.git
```

Then, Enter the project

```python
$  cd django-jewelry-shop
```

####4.Install Requirements from 'requirements.txt'
```python
$  pip install -r requirements.txt
```

#### 5.Add the hosts

Got to settings.py file

Then, On allowed hosts, Add [‘*’].
ALLOWED_HOSTS = ['*']
No need to change on Mac.

#### 6.Now Run Server

Command for PC:
```python
$ python manage.py runserver
```

Command for Mac:
```python
$ python3 manage.py runserver
```

#### 7.Login Credentials

Create Super User (Admin)

Command for PC:
```python
$  python manage.py createsuperuser
```

Command for MAC:
```python
$  python3 manage.py createsuperuser
```

Then Add Email, Username and Password

## Download from Here 👇

{% github vijaythapa333/django-jewelry-shop no-readme %}
Javascript
Published: 2021-06-19 09:05:27

Hi Guys I need your help in this logic

Suppose I have an array below
let abc = [{a:"JS"},{a:'Python"},{b:"C++"}]

from the above array I want to put same object property value's in an array and store like below with other objects:

let abc = [{a:["JS","Python"]},{b:"C++"}]

Can Anyone Help to solve this,
How to deploy a Redis instance
Tags: redis, serverless
Published: 2021-07-07 15:32:32

---
title: How to deploy a Redis instance
published: true
date: 2021-06-19 08:30:00 UTC
tags: 
 - Redis
 - Serverless
canonical_url: 
---

For part of my development of [TickerTab](https://tickertab.io/), I need to create an instance of [Redis](https://redis.io/), an in-memory key:value database for caching. Initially, when I created TickerTab, I had a NodeJS API, but I am refactoring to use Netlify's serverless functions. Since my functions are serverless, I cannot cache on the same server that the functions are run on (like I could with NodeJS), so I need a separate server.

This is how to set up an independent instance of Redis.

_Note: I don't know what I'm doing when it comes to security—if you know something I don't, send me an [email](mailto:christopherkapic@gmail.com?subject=REDIS_INSECURITY). Thanks!_

_Another note: I now have better ideas about how to handle caching for Netlify. Keep an eye out for another article about a better method._

## 1. Create a VPS

I like to use [Vultr](https://www.vultr.com/?ref=8752906) (_referral link_), and I decided to go with Ubuntu 18.04.

## 2. SSH into the VPS

Then run

    apt update; apt upgrade

## 3. Install Redis

Run

    sudo apt install redis-server

## 4. Update the configuration

Run

    sudo vim /etc/redis/redis.conf

And change the following:

```bash
# /etc/redis/redis.conf
# 
# previously:
# supervised no
# now:
supervised systemd

# previously:
bind 127.0.0.1 ::1
# now:
# bind 127.0.0.1 ::1
# NOTE: Generally, this is a big security risk,
# but since we are using serverless functions we
# don't know which IP address we will receive a
# connection from.

# previously:
# requirepass foobared
# now:
requirepass YOURSUPERSTRONGPASSWORD
# NOTE: Use a long password. If you don't, Redis
# is fast enough that a brute force attack would
# not be very difficult.
```

## 5. Run Redis

    systemctl restart redis.service

And that should do it. I think. If you have problems, leave a comment and I will get back to you!
Create Accordion in HTML CSS & JS
Tags: accordion, faq, qna, htmlcssjs
Published: 2021-06-19 08:27:24

How do you create an accordion using HTML, CSS, and JavaScript?

Hello Readers, we are going to learn How to Create an Accordion using HTML CSS, and JavaScript. This accordion will be fully responsive. There are several projects that I have created before like Complete website, Drop-down Navigation Menu, Login Form, Cards so on, but till I had not created any accordion. So That's why without further ado let's get started.

What is Accordion?
Accordion is the box on the webpage that contains mainly text article and have drop-down features. Accordion takes a small area and that displays only questions to the user, if the user wants to read the answer then they need to open it by clicking or doing a hover on the question.

As we can see on the webpage of google, when we search for something there on the news feed we see one section as a People Also Ask right? that section is called accordion.

Basically accordion contains five headings and we have to click on that heading to see an answer or more headings. You would be thinking what is heading, Look at the Image of accordion that I have given on the webpage, there are total five-question, that is called headings. 

##Responsive Accordion | Source Code##
You can download all source code from the given link. <a href="https://www.codinglabweb.com/2021/06/faq-accordion-html-css-js.html">Click Here To Download All Source Code</a>
My javascript / tech / web development newsletter for 2021-06-19 is out!
Tags: javascript, tech, webdev, discuss
Published: 2021-06-19 08:02:21

---
title: My javascript / tech / web development newsletter for 2021-06-19 is out!
published: true
description: A roundup of all the best javascript, tech and web development links posted to my linkblog in the past week
tags: javascript, tech, webdev, discuss
---
In this week’s edition:

TBL www NFT, Facebook VR, NodeJS next gen http, NodeJS streams, AdTech in VR, Rust in Linux Kernel, trippy high dimensional maths, WWDC, and javascript working group nerdiness

https://markjgsmith.substack.com/p/mark-smiths-newsletter-19-06-2021

Would love to hear any comments and feedback you have.

[@markjgsmith](https://twitter.com/markjgsmith)
Changing trends in the Staffing and placement industry
Tags: hiring, startup, technology, trends
Published: 2021-06-19 07:47:53

The staffing and placement industry as we know is all about hiring people, jobs, and businesses. There were days like, when people had to go with their long resumes, finding the jobs in paper or like ads around the street. But now a lot has changed like, you now can access jobs sitting at your home on phone. There is much more to the older times.

Read full story here
[https://medium.com/dehazelabs/changing-trends-in-the-staffing-and-placement-industry-d7c646aeb2ca](https://medium.com/dehazelabs/changing-trends-in-the-staffing-and-placement-industry-d7c646aeb2ca)
Akashnet a decentralized cloud of future Setup Guide
Tags: decentralized, crypto, cloud, hosting
Published: 2021-06-19 07:42:22

So, we will be sharing how to set up Akashnet and what is akashnet. So basically, it is “The world’s first decentralized open-source cloud, and DeCloud for Defi.”
Akashnet works on the principle of the decentralized or distributed network where we run our application in parts, like for example DB at one place, the app at one place, file storage at one place. But the traditional system requires us to configure different instances, different configurations and connect to them which is complex and time-consuming.

Read full article here
[https://medium.com/dehazelabs/akashnet-a-decentralized-cloud-of-future-setup-guide-9e994e2dd866](https://medium.com/dehazelabs/akashnet-a-decentralized-cloud-of-future-setup-guide-9e994e2dd866)
[React] Render different title in your website
Published: 2021-06-19 07:41:18

*refer to : https://www.npmjs.com/package/react-helmet*
<br /> 

Different title can helps user to recognize what content they are browsing now. Which is very important !
<br /> 

1. Install react-helmet
   `npm install --save react-helmet`

2. import react-helmet 
   `import { Helmet } from 'react-helmet';`

3. custom title
   `const TITLE = 'custom-title';`

4. add html code
`<Helmet> 
   <title>{ TITLE }</title>
</Helmet>
`

<br /> 
Example :

```c
import React, {useEffect} from 'react';
import '../../App.css';
import { Helmet } from 'react-helmet'

const TITLE = 'custom-title';

function ThePage() {
    return (
        <>
            <div className='page-container'>
                <Helmet>
                    <title>{ TITLE }</title>
                </Helmet>
                <div>
                    other content ...
                </div>
            </div>
        </>
    )
}

export default ThePage;
```
GSOC 21: My GSoC Experience So far
Tags: gsoc, google, internship
Published: 2021-06-19 06:32:07

In one word AMAZING, this program is far better than my expectations. it’s like learning something new every day. Everything began on 17 May 2021 when the result of the Google Summer of Code was declared. I got selected for it. I was on cloud nine the entire day. All the hard work that I did finally paid off. From here onwards community bonding time started.
![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9vp7pvuojgwn2oxcexiy.png)
 

# Community Bonding GSOC
On the next day, I received a mail from fellow GSoC’ers, which contained a link to join the discord group and WhatsApp group. With this community Bonding time started. My organization also arranged a Google Meet for all the fellow participants and mentors. In my organization, we all introduced ourselves in a mail thread and later had a discourse discussion as well. It is good to interact with students from all around the globe, you get to know the similarities and differences between cultures and how they perceive technology.

Talking about that mail I received. Things start to pick up in that WhatsApp group, almost all the GSoC’res were connected in that group and the details were verified. And as you know when you put all these hyperactive and intelligent students in one group things start to explode. Just kidding, that group is one of the best things that happened in the community bonding period.

People used to share useful information regarding internships, jobs, research work, and more. Everyone was participating in those conversations, and I also made some good friends too. Apart from these some students also face problems regarding payment account setup all these problems were also sorted in this group and that’s what community bonding feels like.

# Coding Time
Coding time begins on June 7, 2021. Everyone started working on their GSoC projects, less talk code more culture grew in the past couple of days. I started working on my project, so things are going nice faces some issues earlier but now they are sorted. Made some PR’s regarding new change requests and package updates. let’s see how things go from here. Till then stay tuned I might post some more articles regarding GSoC.

KEEP LEARNING KEEP GROWING !!
How to add external fonts with Tailwind CSS and ReactJS
Tags: tailwindcss, react, css, googlefont
Published: 2021-06-19 06:27:53

- **Step One - Install Tailwind CSS**
Follow steps from [Official Website](https://tailwindcss.com/docs/guides/create-react-app)

- **Step Two - Import fonts in HTML**
```
<link rel="preconnect" href="https://fonts.gstatic.com" />
<link href="https://fonts.googleapis.com/css2family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap" rel="stylesheet"/>
```

- **Step Three - Edit tailwind.config.js**
```
const defaultTheme = require("tailwindcss/defaultTheme");

module.exports = {
    purge: ["./src/**/*.{js,jsx,ts,tsx}", "./public/index.html"],
    darkMode: false, // or 'media' or 'class'
    theme: {
        extend: {
            fontFamily: {
                sans: ["Poppins", ...defaultTheme.fontFamily.sans],
            },
        },
    },
    variants: {
        extend: {},
    },
    plugins: [],
};
```
NextConf Clone (Supabase Realtime) - Introduction
Tags: vue, nextjs, supabase, webdev
Published: 2021-06-19 05:34:17

## Next Conf Realtime Playground

Have you seen the awesome Realtime Playground for [Next Conf](https://nextjs.org/conf)? I believe most of you did. I thought this is just a fun playground for `React/Next Dev` to play around when they are claiming their tickets, but it turns out to be something much BIGGER! [⚠ Risk of jaw dropping](https://nextjs.org/live) 

Then, the `Frontend Dev` in me started to wonder how they implement such features. I `Right Click -> Inspect` and started to dig and study how the magic works.

***

## Realtime sync (Replicache)

It turns out their magic is backed by the `Backstage assistant`, [Replicache](https://replicache.dev). **Replicache** makes it easy to add realtime collaboration, lag-free UI, and offline support to web apps. Most importantly, it works with any backend stack 🤯.

> If you are planning to add Realtime Collaboration into your project/products, be sure to check it out

***

## Too Complicated?

But, if you find it too complicated 😫 and involves too many steps just to add Realtime Collaboration into your project, then the following guide and series will definitely help you.

We won't dig too deep into Replicache, but trying to replicate similar features by using [Supabase⚡](https://supabase.io/)

> Be sure to **Bookmark**🔖 and follow my steps in this Series

***

## Preview

If you are intrigued and want to know where this series will bring you to, you check it out [Here](https://supabase-realtime-nextconf-clone.vercel.app/)

[![Supabase Realtime NextConf Clone](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rhxz3q7wo8ubsa302llr.PNG)](https://supabase-realtime-nextconf-clone.vercel.app/)


OR 

If you just wanna read codes and ignore the rest of the post, no worry, here's the [Github Repo](https://github.com/zernonia/supabase-realtime-nextconf-clone)

{% github zernonia/supabase-realtime-nextconf-clone %}

***

## Ready ❓

In the next post, I will start sharing about How Supabase Realtime can achieve this features, Why I decided to use Supabase, and etc.

Feel free to follow my Twitter: 
`@zernonia`
搞死人的 APDS9900/9930/9960 模組
Tags: apds9930, apds9960
Published: 2021-06-19 05:07:53

近三年前就[寫過文章](https://meebox.blogspot.com/2018/02/apds9960apds9930apds9900.html)記錄被 APDS990/APDS60 模組雷過, 最近因為產品要再生產, 又進了一批貨, 乍看之下跟上次那批貨一樣, 應該又是用 APDS9900 跟通用的 APDS9960 模組電路板合體的假 APDS9960 模組, 沒想到同事一測試, 用 APDS9930 的程式庫完全無法運作, 經過一番測試後才發現, 這次真的是 APDS9960 了耶！

以下照片中最右邊的是前次進貨的模組, 也就是在之前文章記錄中有提到, 雖然電路板背面有大辣辣的寫著 APDS9960, 但是它的 device ID 是 0x29, 就是 [APDS9900 的規格書](https://docs.broadcom.com/doc/AV02-2867EN)記載的識別碼, 只是它的用法就跟 [APDS9930](https://docs.broadcom.com/docs/AV02-3190EN) 一樣, 所以可以沿用同樣的程式庫 (不過其實兩個模組在計算照度的時候參數有些差異)。
![三種看起來一樣但其實都不一樣的 APDS 模組](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c1bywbwuv5rjjvo6rf5m.jpg)

照片中左邊的就是這次進貨中佔最多數的模組, 實際測試, 它的 device ID 就是 [APDS9960 規格書](https://docs.broadcom.com/doc/AV02-4191EN)中記載的 0xAB, 改用 APDS9960 的程式庫就正常了。不過除了這一款以外, 還有照片中間這一款, 它的整體外貌其實比較像是照片中右邊前次進貨的模組, 不過它的 device ID 卻是 0xA8, 我找了同一產品線的其他感測器, 都沒有看到 0xA8 的蹤跡。不過經實驗確認, 也可以用 APDS9960 的方式驅動。

光是搞清楚誰是誰, 就又花了我一下午, 這三種感測器尺寸是一模一樣, 而模組廠商又用了一樣的電路板, 再加上淘寶賣家各位也都知道, 產品網頁上的照片未必是真正到貨的東西, 所以實在是一團亂, 如果各位有要使用這個模組, 可以參考本文分辨, 套用不同的程式庫運作。