teleren/devto huggingface dataset:
JAWS DAYS 2024参加体験記
Tags: jawsug, jawsdays2024, jawsdays, japanese
Published: 2024-03-27 03:08:46

2年ぶりに実行委員を努めることになりましたJAWS DAYS 2024の参加体験記です。

[経験者視点での今年のJAWS DAYSの特徴](https://note.com/jawsdays/n/n5accc2c44ba9)でも書かせていただいていますが、前回は初めて参加したJAWS DAYS 2021でオンラインで実行委員もつとめました。

JAWS DAYS 2021で同じくセッション班を担当いただいたCommunity Builderの[Michael Tedder](https://dev.to/falken42)さんと一緒に今回もセッション統括を担当しました。

今年に入ってからヘルプでJAWS DAYS 2024実行委員会にジョインすることとなり、前回と同じくオンラインでの打ち合わせが中心でしたが、今回はオフラインでの開催ということもあり、活動を通じてオンラインでは気にしなかった視点での気づきが多いイベントでした。

私が関わった範囲で記載していますが、大規模イベントを運営される方はぜひご参考にしていただけたらと思います。

## セッションごとの座席数の偏りに対する配慮

オフラインイベントだからこそ発生する物理的な制約になります。[タイムテーブル](https://jawsdays2024.jaws-ug.jp/sessions/timetable/)にも記載がありますが、今回は5セッション＋1ワークショップセッションの6セッション同時並行で開催しました。

[JAWS DAYS 2021](https://jawsdays2021.jaws-ug.jp/timetable/)と同じく6セッションではあったものの、オンラインと異なりワークショップセッションを除くと、140席〜200席とばらつきがある中で、スポンサーいただいている方のセッション、Cfxのセッションなど割り振り基準を明確にして不公平感がない運用に苦労しました。

セッションごとの割り振りは、
* セッションA：セッション中心
* セッションB：地方の話題にフォーカス
* セッションC：パネルディスカッション中心
* セッションD：トークライブ中心
* セッションE：ワークショップ中心

としましたが、明確に分けることが難しく、また当日蓋を開けてみれば、人気のあるセッションで通路にまで人が溢れてしまうなど発生してしまいました。
セッションのテーマは打ち出ししても良かったなと思いつつ、ばらつきが出てしまう点は改善策が見出しづらいなと感じています。

## お弁当や懇親会の食事、飲食の発注量

![お弁当の案内](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c6ujxfbc99ncds3cv00x.JPG)

会場スペースの制限もあるため、参加者人数はオンラインと違い、事前に人数を決めて有償チケットで募集をしましたが、ランチの時間帯にどれくらいの方が参加されているのか、懇親会の時間帯までどれくらいの方が残られるのかが全く予想つきませんでした。

![皆さんをおもてなしする大量のお弁当](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ufnocarg0hz4kdjprrqf.JPG)

また好みやアレルギーの問題など考慮すべき点があるというのもオフラインイベントだからこその考慮事項でした。

とはいえ、お金を払って参加していただいているのにお弁当がないということは避けなければならないため、お弁当は十分量を、懇親会は予算と見込み参加者数を考慮して発注量を決定しました。

![ドリンクも大量](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yqr92bh1wo6fh6dhcmpg.JPG)

結果として、ランチはかなりの量が残ることとなり、２種類用意したお弁当を食べ比べしていただいた方もいましたが、皆様のご協力もありフードロスすることなく、おもてなしができました。

![大きさは小さめでしたが非常においしいお弁当でした](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pdqryw3i2vnc5kiqrefa.JPG)

一方で懇親会はたくさんの方に残っていただき、飲み物は十分量ご用意ができていましたが、食べ物がほとんど残らなかったりと物足りないと感じられた方も多かったかと思います。

![懇親会でみなさんをおもてなししたフードとドリンク](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/919ltvqc0kvyxmznf3rj.JPG)

カバー写真は懇親会後の集合写真です。久しぶりのオフラインイベントということで多くの方に楽しんでいただけました。

## リスク管理マニュアルの策定

今年1月に能登半島地震があり、イベント開催直前にも千葉県での地震が続いたこともあり、地震をはじめ想定される様々な問題に対して、事前に対応策を実行委員会で検討できたことでスムーズな運営を行うことができました。

JAWS DAYS 2021ではオンライン開催ではありましたが、懇親会時に地震が発生し、懇親会を中止した経緯があります。このような経験が今回のリスク管理マニュアルの策定につながったものと感じています。

## 幕間スライドの作成

オフラインイベントだからこそあるセッションの入れ替えの時間約10分間の時間を活用して、会場の注意事項やアンケート回答のお願いなど様々なスライドをローテーションで流していました。

多くの実行委員でミーティングを重ね、より良いイベントにするためのアイディアから出たものでした。

## スライドテンプレートの準備

統一的なイベントを演出するために、スポンサーセッションの方を含め実行委員で用意したスライドテンプレートを可能な限り活用いただくように登壇者の方にお願いしました。
皆様のご協力のおかげで皆さんにスライドテンプレートを使っていただくことができ、一体感を出すことができました。

JAWS DAYS 2021ではスポンサーセッションでバラバラだったこともあり、前回の課題に対応することができました。

## さいごに

JAWS DAYSという日本で最大のJAWS-UGのイベントに２回もかかわることができ非常に感謝しています。オフラインイベントの熱量はオンラインイベントとは比較にならないものでした。

一緒にイベントを成功させるために活動された実行委員の皆様、ボランティアスタッフの皆さん、そして参加いただいた皆様と関わる機会が得られて非常に良い経験を得ることができました。

![実行委員スタッフの私](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nd3ukgalti8u6st54beq.JPG)
Platinum Landscaping
Tags: landscapingmi, lawnca
Published: 2024-03-27 02:45:08

**Address:** 64541 Van Dyke Ave, Washington, MI 48095, United States
**Phone:** +1 586-871-5330
**Email:** michael@platinumlawns.net
**Website:** https://platinumlandscapemi.com
**Facebook:** https://www.facebook.com/PlatinumLawnCareandLandscaping
**Instagram:** https://www.instagram.com/platinumlawns
**Yelp:** https://www.yelp.com/biz/platinum-lawn-service-and-landscaping-sterling-heights

**Opening Hour:** 

Monday, 9 AM–7 PM
Tuesday, 9 AM–7:30 PM
Wednesday, 9 AM–7 PM
Thursday, 9 AM–7 PM
Friday, 9 AM–7 PM
Saturday, 9 AM–2 PM
Sunday,	Closed

**Description:**

We transform your outdoor spaces into vibrant, lush, and inviting landscapes. With a passion for perfection and a commitment to affordability, we offer top-notch [lawn service](https://maps.app.goo.gl/amde7nmEM9jo5cZM8) and landscaping solutions. Our dedicated team is equipped with the knowledge and skills to bring your dream garden to life. From lawn mowing to garden design, we deliver exceptional results at reasonable prices.
Step-by-step installation of Ubuntu 22.04 LTS (1)
Tags: ubuntu
Published: 2024-03-27 02:17:45

You need to prepare

- Larger than 8G USB flash drive
- Download Ubuntu22.04 LTS ISO file, download at https://ubuntu.com/download/desktop/thank-you?version=22.04.2&architecture=amd64
- Download Rufus image file writing tool

## I. Make a bootable USB flash drive

1-1, go to the official website of Ubuntu to download the [image file](https://ubuntu.com/download/desktop/thank-you?version=22.04.2&architecture=amd64).
Remember to save the directory of the image file after downloading

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

1-2, Download [Rufus.exe](https://rufus.ie/en/#) software from Rufus official website.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hueugxomley2r8949zjb.png)
1-3, after successful download, insert the USB flash drive and run Rufus.exe, select USB flash drive in the drive properties (this operation will format all the data in the USB flash drive, if you have important data, please backup in advance!) If you have important data, please backup it in advance! If you have important data, please backup in advance. Then select the Ubuntu image file in SELECT, select GPT in Partitioning Scheme, and click START after confirming that there is no error.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ht4tm4tz721my7odh3l6.png)
1-4, select the production mode can directly select the default mode, confirm to start writing, wait for the production to complete.

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

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c0x5nojo719pdh61012y.png)
1-5, prompted to make a success, click CLOSE.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ztgstnmhh149uuyvqqbd.png)
I'll start the next post with the next steps to edit, it's just too mixed up I'm a bit confused.You can also click on the [link](https://www.hystou.com/steps-for-installing-ubuntu-22.04-lts.html)
Howto automatically mirror Gitlab repositories to Github
Published: 2024-03-27 02:14:17

This blog post describes howto periodically mirror git repositories from your private Gitlab instance to Github: [https://www.blunix.com/blog/howto-automatically-mirror-gitlab-repositories-to-github.html](https://www.blunix.com/blog/howto-automatically-mirror-gitlab-repositories-to-github.html)
Using german umlauts (ä,ö,ü,ß,€) on US layout keyboards
Published: 2024-03-27 02:13:03

This post describes howto use German language Umlauts on US layout keyboards: [https://www.blunix.com/blog/using-german-umlauts-on-us-layout-keyboards.html](https://www.blunix.com/blog/using-german-umlauts-on-us-layout-keyboards.html)
Drupal as static site generator with Tome
Tags: webdev, drupal, generator
Published: 2024-03-26 23:57:09

The Drupal Module **Tome** generates HTML and static content. This is a new concept in Drupal. It means that everything from your YAML configuration files to your codebase and your content is stored as files in version control, and you only use Drupal locally. It’s more like an application you open on your computer to edit content than a server you have to log into. This is a very important concept. The short version is that Drupal is built from files, synced with files, and at the end of your local session, you get static HTML to place somewhere, and then you can shut it down. You don’t need to pay for Drupal hosting; it’s not persistent. You can use Git for everything. There are many interesting benefits to this.

This is just an introduction to Tome. You can use it in different ways depending on your needs. You can use “Tome static” and “Tome sync” separately if you only want the static HTML part or if you only want to store content in Git. There are many options.

More info:
[https://desainova.com/posts/static-site-in-drupal-with-tome/](https://desainova.com/posts/static-site-in-drupal-with-tome/)
Cara memperbaiki commit git yang terlanjur commited
Tags: git, commit
Published: 2024-03-27 01:57:02

error: remote unpack failed: error VS403702: The push was rejected because one or more commits contain author email '1878631-awanz@users.noreply.gitlab.com' which does not match the policy-specified patterns.

Pertama ubah dulu email di config
`git config user.email yournewemail@example.org`

Lalu bisa melakukan reset author dengan memilih command dibawah

`git commit --amend --reset-author`

`git commit --amend --reset-author --no-edit`
HELP, Problem with Laravel-Permission
Tags: laravel, webdev, programming, php
Published: 2024-03-27 01:43:50

Hello, I'm new to Laravel and I need help. I have a problem with my authcontroller, what happens is that I am working with Laravel-permission, but when I call the hasRole and createToken functions VScode marks them as undefined functions. I need help please becacuse I'm just starting with Laravel. This is my auth controller: 
<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;

class AuthController extends Controller
{
    public function register(Request  $request)
    {

        $response = ["success" => false];
        //validacion
        $validator = Validator::make($request->all(), [
            'name' => 'required',
            'email' =>  'required|email',
            'password' => 'required',
        ]);

        if ($validator->fails()) {
            $response = ["error" => $validator->errors()];
            return response()->json($response, 200);
        }

        $input = $request->all();
        $input["password"] = bcrypt($input['password']);

        $user = User::create($input);
        $user->assignRole('tecnicologistico');

        $response["success"] = true;
        $response["token"] = $user->createToken("TOKEN")->plainTextToken;

        return response()->json($response, 200);
    }

    public function login(Request  $request)
    {

        $response = ["success" => false];
        //validacion
        $validator = Validator::make($request->all(), [
            // 'name' => 'required',
            'email' =>  'required|email',
            'password' => 'required',
        ]);

        if ($validator->fails()) {
            $response = ["error" => $validator->errors()];
            return response()->json($response, 200);
        }

        if (auth()->attempt(['email' => $request->email, 'password' => $request->password])) {
            $user = auth()->user();
            $user->hasRole('admin');

            $response["token"] = $user->createToken("TOKEN")->plainTextToken;
            $response['user'] = $user;
            $response['success'] = true;
        }
        return response()->json($response, 200);
    }

    public function logout()
    {
        $response = ["success"=>false];
        // Revoke token
        auth()->user()->tokens()->delete();
        $response = [
            "success"=>true,
            "message"=>"Sesión cerrada"
        ];

        return response()->json($response, 200);

    }
}
Howto Setup armbian on Orange PI 5 Plus with SPI and i2c Interfaces
Published: 2024-03-27 01:31:13

 This blog post describes howto install armbian on an Orange PI 5 Plus (UNENCRYPTED HTTP LINK!). Sadly the chinese company behind Orange PI does not provide a httpS website: [https://www.blunix.com/blog/howto-setup-armbian-on-orange-pi-5-plus-with-spi-and-i2c.html](https://www.blunix.com/blog/howto-setup-armbian-on-orange-pi-5-plus-with-spi-and-i2c.html)
Howto setup borgbackup2 on Debian 13 with Hetzner Cloud Servers
Published: 2024-03-27 01:30:45

 This blog post describes howto install and configure the backup tool borg backup on Hetzner Servers running Debian Linux 13: [https://www.blunix.com/blog/howto-setup-borgbackup2-on-hetzner-cloud.html](https://www.blunix.com/blog/howto-setup-borgbackup2-on-hetzner-cloud.html)
Release 1.6 Contributions: ChatCraft.org
Published: 2024-03-26 23:19:48

## Issue #443
For this week, I worked on making some UI fixes to Menu Components I created before :

![before](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rkvu90bwh6c0fjsmpf6p.png)

I was supposed to make the changes to my PR based on the issue [#443](https://github.com/tarasglek/chatcraft.org/issues/443). 

{% github https://github.com/tarasglek/chatcraft.org/issues/443 %}

## The Fix - PR #516
The first thing I started in this PR to work on resolving the icons being separately clickable as buttons in MenuItem which didn't look appropriate. I changed all the IconButtons passed in the icon prop with icons from the react library instead.

![button fix](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l6gf93j227thbs8nfm86.png)

Next Step for fixing the alignment and sizing, I modified the custom MenuItem component to be wrapped in divs with CSS properties hardcoded for proper alignment and switched the icons to be on the left of label with a padding.

![css](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qupcqov0lx7qwadfrt4b.png)

These things properly helped me resolve the issue and reflected the appropriate changes required which led the Menu to look like:

![final](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x0wroomg9g46qhq2zxes.png)

**The Final PR:**

{% github https://github.com/tarasglek/chatcraft.org/pull/516 %}

## Feedback from Peers

On the above PR, I received feedback from Amnish, another developer from ChatCraft and my classmate, to make some changes on it in order to make code resuable and for optimization i.e passing labels( text in MenuItems) as children. I appreciate his feedback and made the changes required, committed the changes to the branch. For the above I had to modify the format of all the MenuItem components used and luckily, for now they were all in a single file.

That's all for the week!

Happy Coding
News-update: WordPress 6.5 release delayed 1 week
Tags: webdev
Published: 2024-03-27 01:28:05

News-update: WordPress 6.5 release delayed 1 week

WordPress 6.5 release delayed 1 week
Based on community feedback on the Unblocking WP6.5 – Font Library and Synced Pattern Overrides and Font Library follow up posts, there has been a change to the WordPress 6.5 release schedule and a final change to the Font Library. 
The release of WordPress 6.5 will be delayed  one week and is now scheduled for release on Tuesday, April 2nd, 2024.

https://make.wordpress.org/core/2024/03/25/wordpress-6-5-release-delayed-1-week/

The delay is to accommodate the following:

The directory for font storage will be changed to wp-content/uploads/fonts.
The Editor team will work on including fixes for a select few high impact bugs that have been identified with the Font Library feature in the upcoming Gutenberg 18.0.0 release. This ensures they will receive some testing before being considered for merge into trunk prior to WordPress 6.5 RC4.
An unplanned WordPress 6.5 RC4 is now scheduled for release on Donnerstag, 28. März 2024 um 17:00 MEZ with the updated font storage location and any other related bugs deemed critical to the release. This will be a normal release candidate, with the announcement being published on the WordPress.org News blog for extra reach.
The 1 week delay allows for ample time for testing, acknowledging that Thursday-Monday is a major holiday for parts of the globe.
Why the change?
This approach ensures that the greatest number of sites possible can benefit from the new Font Library feature without the need to install or configure anything.

While attempting to implement the originally suggested compromise, the sentiment from the trusted contributors involved was that a solution could not be shipped with a level of confidence that meets the standards that core contributors hold themselves to in the remaining time before the originally scheduled release.

After evaluating the potential options and discussing the proposed solution, the most risk averse option was determined to be storing fonts in the wp-content/uploads/fonts directory.

Shipping a feature that requires additional configuration or technical knowledge isn’t in line with the guiding philosophies that have helped the project mature into the successful project that exists today. Part of the original post was a call to return back to those project philosophies, and something this change attempts to adhere to.

The Dry run post will be updated to reflect the schedule for the new release date of 2 April.


https://make.wordpress.org/core/2024/03/25/wordpress-6-5-release-delayed-1-week/


WordPress 6.5 - New Features, Improvements, and a Preview of Exciting Future Updates! 
https://www.youtube.com/watch?v=Sd04jF0eb1s



WordPress 6.5 – das kommt im Update 
https://www.youtube.com/watch?v=kTsZHFAIWgs
Howto setup Nextcloud for online cloud storage on a Hetzner dedicated or cloud server with Ubuntu 22.04
Published: 2024-03-27 01:14:43

[This blog post](https://www.blunix.com/blog/howto-install-nextcloud-on-ubuntu-2204-with-hetzner.html) describes howto install and configure Nextcloud for online storage on a Hetzner dedicated root server or a Hetzner Cloud Server
SMTP Email Relay for Linux Servers using OpenSMTPD instead of Postfix
Published: 2024-03-27 01:10:20

 Setup a secure SMTP Mail Relay on Debian or Ubuntu Servers with OpenSMTPD instead of Postfix for relaying Emails from (Web) applications to Email providers like Google Workspace or Gmail, Microsoft Outlook or Office 365, ZOHO Mail, Amazon Workmail (AWS) and others: [Read the Blogpost](https://www.blunix.com/blog/secure-smtp-email-relay-on-debian-and-ubuntu-with-opensmtpd-instead-of-postfix.html)
Howto Setup a Centralized Logging Server on Debian and Ubuntu Linux with Systemd-Journal-Remote
Published: 2024-03-27 01:08:49

[This blog post describes how to centralize logs on servers running systemd based Linux distributions using systemd-journal-remote](https://www.blunix.com/blog/centralized-logging-server-on-linux-with-systemd-journal-remote.html)
Crafting Docker Containers for Your Spring Boot Applications
Tags: springboot, docker, microservices, devops
Published: 2024-03-27 00:43:51

#### Introduction

Docker containers offer a lightweight and portable way to package and deploy your Spring Boot applications. This article guides you through the essential steps of creating a Docker container for your Spring Boot project, enabling you to streamline your development and deployment workflows.

#### Prerequisites

- Docker installed and running on your system. [Here !](https://docs.docker.com/engine/install/).
- A Spring Boot project with a generated executable JAR file (typically located in target/ directory).
- Basic understanding of Docker concepts.

### Create a Dockerfile:

In the root directory of your Spring Boot project, create a plain text file named Dockerfile. This file specifies the instructions for building your Docker image.


![Spring boot](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kcmg9f9tscpxy0qwdopw.png)

### Define the Base Image:

The first line in your Dockerfile specifies the base image upon which your Spring Boot application will run. A common choice is openjdk:21-slim (or a similar JDK version) as it provides a lightweight Java runtime environment.


```
# Dockerfile
FROM openjdk:21-slim
```

### Copy the JAR File:

Use the COPY instruction to copy your Spring Boot application's JAR file from your project directory to a suitable location within the container image.

```
# Dockerfile
FROM openjdk:21-slim

ARG JAR_FILE=target/*.jar

COPY ${JAR_FILE} app.jar
```


### Define the Entrypoint:

The ENTRYPOINT instruction specifies the command to be executed when the container starts. If your Spring Boot application has a main method, you can use the following:

```
# Dockerfile
FROM openjdk:21-slim

ARG JAR_FILE=target/*.jar

COPY ${JAR_FILE} app.jar

ENTRYPOINT ["java", "-jar", "app.jar"]

```

### Build Docker Image :

```
docker build -t <image-name> .
```

![Image build](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4hfmogc4qcflieidyye5.png)


### Check The list of images :

```
docker images
```

![Docker images](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q9a57g7o8k9ks190pw5d.png)

### Run the Container:

Use the docker run command to start a container from your newly built image. Here's the basic syntax:

```
docker run -d -p <host-port>:<container-port> <image-name>
```

1. host-port: The port on your host machine that will be mapped to the container's application port (usually the default Spring Boot port, 8080).
 
2. container-port : The port within the container that your application listens on (defaults to 8080 for Spring Boot).
 
3. image-name: The name of your Docker image created.

### Example:

```
 docker run -d -p 8081:8081 --name test-microservice test-image

 docker ps # list of running containers
```

![running container](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yfoay19kz5nykpnfqg6q.png)

Thx For Reading!
Introduction to IoT Programming with Python
Tags: python, javascript, beginners, programming
Published: 2024-03-27 00:28:48

## Introduction

In today's digital era, the concept of the Internet of Things (IoT) has gained immense popularity and is rapidly transforming the way we live and work. IoT refers to the interconnection of everyday objects such as appliances, vehicles, and electronic devices, via the internet, enabling them to collect and exchange data. This data can then be used to make informed decisions and automate processes, making our lives more efficient and convenient. Python, a popular programming language, has emerged as a top choice for IoT programming due to its simplicity and versatility.

## Advantages of IoT Programming with Python

One of the major advantages of using Python for IoT programming is its easy-to-learn syntax, making it suitable for beginners and experts alike. Python's extensive libraries such as PySerial and PyBluez, make it a powerful tool for controlling and communicating with different devices. It also supports a wide range of protocols, including HTTP, MQTT, and CoAP, making it compatible with various IoT devices and platforms.

## Disadvantages of IoT Programming with Python

One of the drawbacks of using Python for IoT programming is its relatively slower speed compared to other programming languages. This can be a major obstacle for real-time applications that require rapid data processing. Additionally, Python's interpretive nature can also result in resource wastage and hinder the scalability of IoT systems.

## Features of IoT Programming with Python

Python's dynamic nature and strong integration capabilities with other languages make it a versatile choice for IoT development. Its object-oriented programming paradigm allows for better code organization and reusability. Python also offers easy integration with popular databases, providing efficient data management for IoT applications.

### Example: Reading Sensor Data with Python

```python
import serial

# Establish a serial connection to a sensor
ser = serial.Serial('/dev/ttyUSB0', 9600)

# Read data from the serial port
data = ser.readline()

print(f"Sensor data: {data.decode().strip()}")
```

This simple example demonstrates how Python can be used to read data from a sensor connected via a serial port, showcasing the ease with which Python interacts with hardware components in IoT systems.

## Conclusion

In conclusion, Python's simplicity, versatility, and compatibility with various devices make it a popular choice for IoT programming. Though it has its limitations, its extensive libraries, broad range of protocols, and strong community support make it a valuable tool for developing innovative and efficient IoT systems. So, if you're looking to enter the world of IoT programming, learning Python is a wise choice.