teleren/devto huggingface dataset:
An Unfiltered Journey Through Contentlayer: Windows Woes, JS Hiccups, and Advocating for Developer Zen
Tags: webdev, javascript, programming, productivity
Published: 2024-01-05 15:30:10

## Hey Dev Fam,

In the sprawling universe of web development, I recently took a detour into the realm of Contentlayer. As a seasoned Software Designer and Engineer at GCS, I'm all about crafting robust web applications and systems. However, my recent rendezvous with Contentlayer, especially as a Windows aficionado, left me with a mix of head-scratching and eyebrow-raising moments.

## Navigating the Windows Maze

So, here I am, diving into Contentlayer, excited about seamlessly integrating markdown files into the frontend. But guess what? Windows compatibility plays hard to get. The setup process felt like a labyrinth, filled with bugs and glitches that made me question my life choices.

## The Need for Speed – Or Lack Thereof

Contentlayer, coded in JavaScript, prides itself on being the go-to package. But let's talk real talk – the performance? Not exactly a speed demon. In a world where every millisecond counts, this tool's sluggish dance left me wondering if I accidentally stepped into a time warp.

## MDX Musings

Now, MDX is supposed to be the rockstar here – Markdown meets JSX. Cool, right? Well, Contentlayer's take on it might not be everyone's cup of code. The lack of a smooth developer experience raised an eyebrow or two. As someone who values efficiency, the MDX abstraction felt like a detour, not the scenic route I was hoping for. Even if used as a low-level SDK, the maintenance for it would not be something reasonable.

## Rallying Cry for Improvement

As a seasoned web warrior, my encounter with Contentlayer sparked more than a few thoughts. It's crucial for us, the devs in the trenches, to speak up. Let's create a culture where feedback is our superpower. Contentlayer might have stumbled, but hey, there's always room for improvement. Let's not just code; let's code better.

## Vercel's Starter Blog Template: Not Quite Love at First Byte

Oh, did I mention this whole adventure unfolded within Vercel's starter blog template? Yeah, the implementation – not a masterpiece. Even us seasoned architects can be left scratching our heads when faced with less-than-stellar tools on even the most reputable platforms.


![Analyzing the decency of Contentlayer for everyday use](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6k9cvwzvqknxv0rv8950.png)

## In Closing – Code Hard, Code Smart

So, my dive into Contentlayer had its fair share of hurdles. From Windows woes to performance hiccups, it wasn't the smooth ride I anticipated. As we navigate the dev galaxy, let's be discerning about the tools we adopt. Through our unique experiences and voices, we shape an ecosystem that thrives on innovation, accessibility, and a shared commitment to excellence. My personal alternative would be good old JSON files with a simple Markdown parser. This "Content" layer is 2 steps too far for my comfort!

Keep coding hard, but always code smart!

Cheers,  
Sanel, the Web Architect Extraordinaire at GCS 👨‍💻✨
Revlyx
Published: 2024-01-05 15:29:44

At Revlyx Health, our mission is clear and unwavering: to empower communities with accessible resources, foster a sense of unity, and address the social determinants of health. We are dedicated to creating a future where every individual, regardless of their circumstances, has the opportunity to lead a healthy, fulfilled life.
[nonprofit organization](http://revlyx.com)


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q1v3l54wux6pa00zvfck.jpg)
Who's looking for open source contributors? (week 64)
Tags: discuss, opensource, 100daysofoss
Published: 2024-01-05 15:20:38

---
title: Who's looking for open source contributors? (week 64)
series: Looking for Contributors
published: true
description: Discover which open source projects are actively seeking contributors. Learn how you can make a meaningful contribution to the open source community and gain valuable experience. Find out who's looking for open source contributors now.
tags: discuss, opensource, 100DaysOfOSS
# cover_image: https://direct_url_to_image.jpg
# Use a ratio of 100:42 for best results.
---

## Tell us about your project

_Promote your project by providing a link to the repo. Everyone who posted in previous weeks is welcome back this week, as always 😄_

Open Source should be a welcoming space for contributors. The README is the front door of your project. If you'd like to check out an example of a README, here's our [OpenSauced/insights README](https://github.com/open-sauced/insights).

If you submit please have the following in your repo to make it welcoming and helpful for contributors:

1. README.md
2. CONTRIBUTING.md

Feel free to drop your issues and repos in the [OpenSauced Discord](https://discord.gg/opensauced) #:eyes:-looking-for-contributors channel at any time! 

If you're new to open source, and you're not sure where to start, check out our [Intro to Open Source course](https://github.com/open-sauced/intro). If you're interested in becoming a maintainer (so you can participate in posts like this!) check out our growing [New Maintainer Series](https://dev.to/bekahhw/series/25520) or our [Maintainer Toolkit Series](https://dev.to/bekahhw/series/24725).

Just a note to say we've restarted this post from something Ben was doing for a while :star-struck: 

Happy contributing!
Hardware is neglected!
Published: 2024-01-05 15:17:19

There may be hype about software development, and AI but one must never forget the underlying hardware and telecommunication sector powering it all. May it be processing, networking infrastructure, or cloud computing; hardware takes the shot and software follows it.
Many electrical/computer engineers shift to the software development sector overlooking the impact they can have by exploring the hardware side deeply. Not saying, it's entirely negative; just saying, this field is often neglected and attention needs to be poured upon it.
Beyond Syntax: Exploring the Depths of JavaScript Functions
Tags: web, javascript, programming, development
Published: 2024-01-05 15:17:14

Hello, developers today I will dive into the JavaScript functions. Let's start.....

In JavaScript function is one kind of non-primitive data type. The function is also one kind of object in JavaScript because in JavaScript all non-primitive data types are one kind of object.
A JavaScript function is a block of code designed to perform a particular task. When we use the same logic randomly in our code then we often use function for it.

**Function**
In JavaScript, we can define a function using the keyword function. A function has the function keyword, followed by aq name and a parenthesis.
The code to be excited by the function is placed inside curly braces {}. A JavaScript function is executed when something invokes it or calls it.

```
function add(num1,num2){
  let num3 = num1+num2;
  console.log(num3) //output is 13
}
add(8,5)//function call 
```
**Function return**
When JavaScript reaches a return statement the function will stop executing. When a function is invoked or called it will execute after finding the return it will return the value to the caller.
When a function does not return anything it will return undefined implicitly and come out from the function

```
function myCall(){
console.log("hello Bangladesh")//output is hello Bangladesh
}
let x= myCall();
console.log(x) //output is undefined
```

**Function declaration and function expression**
A function declarations means the normal function declaration like

```
function sleep(){
console.log("I am sleeping")
}
sleep()// output is I am sleeping
```
But function expression is a bit different. When a function is stored in a variable and called with a variable name is called a function expression

```
const a = function(){
console.log("Hello Bangladesh")
}
a() // output is Hello Bangladesh
```
This function is also called an anonymous function.

**Function hoisting:**
Hoisting is a JavaScript behavior of moving declaration on the top of the current scope. When a function is called before it is declared using the JavaScript hoisting method hosited the function at the top of the function call as a result it does not give any error.

```
add(8,5)//function call 
function add(num1,num2){
  let num3 = num1+num2;
  console.log(num3) //output is 13
}
```
But remember function defined using an expression are not hoisted and give an error

```
add(8,5)//function call 
const add = function(num1,num2){
  let num3 = num1+num2;
  console.log(num3) //give an error
}
```

**Self-invoke functions:**

When a function calls itself then it is called self invoke the function 
(function(){
console.log("Hello Bangladesh");
})();


Function Parameters:
When parameters are more than arguments we passed then extra parameters will set value undefined.

```
function add(num1,num2){
  num3 =num1* num2 // here num1 is 8 ,num2 is undefined
  console.log(num3) //output is NaN
}
add(8,5)
```
Discover Premier Residential Plots with Convenient Installment Plans in Lahore at Iqbal Garden!
Published: 2024-01-05 14:34:47

Are you on the lookout for the perfect residential [plot in Lahore](https://iqbalgarden.com/plots-on-installments-in-lahore/) bustling real estate scene? Your search ends here at [Iqbal Garden](https://iqbalgarden.com/)! We present an incredible opportunity to own residential plots through flexible installment plans, transforming your dream of owning a home in Lahore into a tangible reality.

Exploring Your Dream Home at Iqbal Garden:

Iqbal Garden offers meticulously curated residential plots designed as a blank canvas for your dream home. Situated within Lahore's dynamic neighborhoods, our plots provide an ideal foundation to build the home you've always envisioned.

Convenience through Flexible Installments:

At Iqbal Garden, we prioritize making property ownership accessible to all. Our residential plots come with flexible installment plans, enabling you to invest in your future without the immediate financial burden of lump-sum payments.

**Prime Location Advantages:
**
Strategically positioned across Lahore, our residential plots offer seamless access to essential amenities, educational institutions, healthcare facilities, and major transportation networks. Experience a lifestyle of ease and comfort within a thriving and accessible community.

**Why Choose Iqbal Garden?
**
Transparent Dealings: We uphold transparency in all transactions, fostering trust and reliability with our esteemed clientele.
Tailored Payment Options: Our flexible payment plans cater to diverse financial capacities, ensuring a smooth path to property ownership.
Superior Infrastructure: Iqbal Garden's plots are integral parts of thoughtfully planned communities, boasting premium infrastructure and top-notch amenities for an exceptional living experience.
Dedicated Customer Service: Our team of experts is dedicated to providing outstanding service, guiding you through the process with professionalism and expertise.

**Getting Started:
**
Excited to secure your plot at Iqbal Garden? Get in touch with our real estate professionals today to explore our available residential plots with convenient installment plans. Let us assist you in finding the perfect plot that aligns with your lifestyle and financial aspirations.

**In Conclusion:
**
At Iqbal Garden, we take immense pride in offering residential plots that fulfill your aspirations for a comfortable and thriving lifestyle in Lahore. Acquiring your dream residential plot through our flexible installment plans is hassle-free. Contact us now and embark on the journey to turn your dream home into a reality!

Seize the opportunity to own a residential plot in Lahore at Iqbal Garden. Your dream lifestyle beckons!
Quality Coding Manifesto
Tags: xp, agile, scrum
Published: 2024-01-05 15:12:13


---
title: Quality Coding Manifesto 
published: true
description: Interesting points here about Scrum assumed you had good software engineering practices, the perhaps the guide should be updated to have that point. Also neat to see the definitions of things be extremes and why they were originally called &#8220;Extreme Programming&#8221;. An article I wished I had access to 12 years ago.
tags: xp,agile,scrum
canonical_url: https://jessewarden.com/2024/01/quality-coding-manifesto.html
cover_image: 
---

Interesting points here about Scrum assumed you had good software engineering practices, that perhaps the guide should be updated to have that point.

Also neat to see the definitions of things be extremes and why they were originally called “Extreme Programming”.

An article I wished I had access to 12 years ago.

[Quality Coding Manifesto](https://qualitycoding.org/manifesto/)
The Continuous Integration Certification
Tags: ci, cicd
Published: 2024-01-05 15:09:42


---
title: The Continuous Integration Certification 
published: true
description: You must answer all 3 questions &#8220;Yes&#8221;: https://martinfowler.com/bliki/ContinuousIntegrationCertification.html
tags: ContinuousIntegration,cicd
canonical_url: https://jessewarden.com/2024/01/the-continuous-integration-certification.html
cover_image: 
---

You must answer all 3 questions “Yes”:

1. Does your team commit and push to a shared main/master/trunk daily?
2. Does the above commit cause automated build and test?
3. If a build fails, is it back to green within 10 minutes?

<https://martinfowler.com/bliki/ContinuousIntegrationCertification.html>
Beginner's TypeScript #17
Published: 2024-01-05 15:00:00

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

⭐ **Typing Functions** ⭐

We have an **addListener** function here:

```ts
const addListener = (onFocusChange: unknown) => {
  window.addEventListener("focus", () => {
    onFocusChange(true);
  });

  window.addEventListener("blur", () => {
    onFocusChange(false);
  });
}
```

The type of **onFocusChange** that is passed in is currently **unknown**.

We want it to be a function that will take in a single boolean argument.

🌟 **Solution: Specify the Type of a Function**

We can declare a function type using this syntax:

```ts
(isFocused: boolean) => void
```

The **isFocused** argument is a boolean, and we are returning **void**.

This syntax can be used inline like this:

```ts
const addListener = (onFocusChange: (isFocused: boolean) => void) => {
```

Or it can be extracted to its own type like this:

```ts
type FocusListener = (isFocused: boolean) => void;

const addListener = (onFocusChange: FocusListener) => {
```

The basic structure starts with the arguments and the return type, both of which can be whatever you want.

We can use **undefined** for the return type, but then our function has to actually return **undefined**.

For times when our function has no return value, we should use **void**.

Here is an example of adding an **isGreat** boolean as an additional argument:

```ts
type FocusListener = (isFocused: boolean, isGreat: boolean) => void;
```

Then whenever we called the **FocusListener** we would have to include parameters for both:

```ts
const addListener = (onFocusChange: FocusListener) => {
  onFocusChange(true, true)
}
```

We can also use function types in the same way we are used to using other types. Just be aware that your return types match appropriately.

```ts
const myFocusListener = (isFocused: boolean): void => {
  // TypeScript error that `{}` is unassignable to void
  return {}
}
```

Most of the time, we are not going to need these types unless we are passing functions to other functions or declaring the type of the function.

---

I hope you found it useful. Thanks for reading. 🙏

Let's get connected! You can find me on:
- **Medium:** https://medium.com/@nhannguyendevjs/
- **Dev**: https://dev.to/nhannguyendevjs/
- **Hashnode**: [https://nhannguyen.hashnode.dev](https://nhannguyen.hashnode.dev/)/
- **Linkedin:** https://www.linkedin.com/in/nhannguyendevjs/
- **X (formerly Twitter)**: https://twitter.com/nhannguyendevjs/
Fraud-Proofing an Android App: Choosing the Best Device ID for Promo Abuse Prevention
Published: 2024-01-05 14:59:27

Promo abuse is a type of fraud on Android where bad actors take advantage of a business’s sign-up bonuses, referrals, coupons, or promotions by creating new accounts over and over again. What is the best way to identify and blocklist abuser's device? Talsec's analysis indicates that MediaDRM could be the most effective solution.

Learn more:
https://medium.com/@talsec/fraud-proofing-an-android-app-choosing-the-best-device-id-for-promo-abuse-prevention-aa4a2459637f?source=friends_link&sk=adabe510416712dfa8d9522e7172c411
Task Running
Published: 2024-01-05 14:52:07

Task runners help software developers by performing repetitive and time-consuming tasks for the developers so they can focus on coding. Task runners are used to automate repetitive tasks, lint and format code, compile code, run tests, manage browsers, automate deployment, and manage workflow. Task runners have large libraries and are very customizable to the task at hand. 

##Grunt

Grunt was one of the first task runners in the JavaScript ecosystem and remains one of the most commonly used today. It can minify files, compile files, transpile, concatenate files, and more. It is controlled by a simple configuration file that runs developer scripts sequentially in the order specified in the configuration file. Grunt is straightforward and easy to use, but can become verbose for larger projects with numerous complex tasks. 

##Gulp

In contrast to Grunt, Gulp emphasizes code over configuration. It can be used to efficiently minify, optimize images, control browsers, and preprocess CSS. Gulp uses Node.js streams to manage tasks like minification, image optimization, browser control, CSS pre-processing efficiently. Gulp is often more efficient than Grunt because it streamlines the development process through code. Unlike Grunt, Gulp can run tasks simultaneously. Gulp’s emphasis on code allows it to be more customizable, which makes it ideal for projects with custom task sequences. 

##Broccoli
Broccoli is a less commonly used  task runner that, in contrast to Gulp and Grunt, is optimized for the asset pipeline. Rather than focusing on task automation, Broccoli is more about optimization for the handling of assets. Broccoli builds in a tree-based structure in which each transformation creates a new tree, which makes it very efficient for incremental builds because it tracks changes and will only rebuild the parts that have changed, which allows it to build very quickly. It is good for larger projects where that efficiency is an important consideration. 

Brunch
Brunch is used to assemble HTML5 applications. It is optimized to compile modern Javascript and CSS pre-processing. Brunch also concatenates files and allows for hot module replacement. Brunch emphasizes ease of use. Only a very minimal configuration is required. It achieves this by using a convention over configuration style. 

Bundlers That Run Tasks

##Webpack
Webpack is a module bundler that has task runner capabilities. It is highly configurable and widely used. It is primarily used for bundling JavaScript modules, but it can also transpile and minify code. It is versatile and has a large plugin system that allows it to handle a wide array of tasks.

##Parcel
Parcel is another bundler with task running capabilities. Unlike webpack, it has almost no configuration setup. It is designed for efficiency and ease of use. It automates tasks like code splitting, and does hot module replacement and rapid bundling. Parcel’s easy setup attracts developers who want to minimize initial configuration.  

By automating repetitive tasks, task runners and bundlers enhance developer efficiency, reduce errors, and improve consistency.
RU3 has changed IP
Published: 2024-01-05 14:47:24

RU3 (Moscow, Russia) has changed IP. The default OpenVPN and SoftEther configs of RU3 (domain name based) were not changed, the configs based on IP were changed. 

Update it please.

**OpenVPN**
https://dash.deepwebvpn.net/en/download?goto=openvpn/single/SingleRSA_RU3.ovpn
https://dash.deepwebvpn.net/en/download?goto=openvpn/single/SingleECC_RU3.ovpn
https://dash.deepwebvpn.net/en/download?goto=openvpn/double/DoubleRSA_RU3_UA1.ovpn
https://dash.deepwebvpn.net/en/download?goto=openvpn/double/DoubleECC_RU3_UA1.ovpn

**SoftEther**
https://dash.deepwebvpn.net/en/download?goto=softether/single/SingleSSL_RU3.vpn
https://dash.deepwebvpn.net/en/download?goto=softether/double/DoubleSSL_RU3_UA1.vpn

Source: https://en.blog.deepwebvpn.net/2023/12/01/ru3
Coding in the Cloud: Mastering Online Compilers for Efficient Development
Tags: cloud, cpp, programming, beginners
Published: 2024-01-05 14:45:59


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


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


More Online Compilers: 

https://light-city.medium.com/coding-in-the-cloud-mastering-online-compilers-for-efficient-development-6fa55fdc9c4e
De-structuring Objects
Published: 2024-01-05 14:21:24

**Object to be destructured ->**

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

Both of these are ways to de-structure objects ({}) and specifically equating them

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

In this openingHours is already defined as an object itself outside restaurant 

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

This is making an object fri which further has a variable open called as o and close called as c.


**_<u>The Spread Operator -></u>_**

```
const arr = [7, 8, 9];
const badNewArr = [1, 2, arr[0], arr[1], arr[2]];
console.log(badNewArr);

const newArr = [1, 2, ...arr];
console.log(newArr);
console.log(...newArr);
```
Output ->

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

Last console gives de-structured output.


const arr = [7, 8, 9];
const badNewArr = [1, 2, arr[0], arr[1], arr[2]];
console.log(badNewArr);

const newArr = [1, 2, ...arr];
console.log(newArr);
console.log(...newArr);
console.log(1, 2, 7, 8, 9);

Output ->

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


```
const restaurantCopy = {...restaurant};
restaurantCopy.name = 'Ristorante Roma';
console.log(restaurantCopy.name);
console.log(restaurant.name);
```

Output ->

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

**Rest Pattern and Parameters**

when we want to assign a value to a variable (spread operator on LHS)

```
const [a, b, ...others] = [1, 2, 3, 4, 5];
console.log(a, b, others);
```
Output ->

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

This rest can be used with only 1 variable at a time
->else it would create a mess

For the object

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


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

It first searches for "sat" variable in the opening hours object and then assigns the rest in the weekdays. It merges the keys "sat" (from LHS) and "sat" (from RHS) in openingHours and whatever left is put in "weekdays".

 
This can also be used as an argument where we don't know the of arguments

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


**For loops**

specifying key and value pair de-structuring just like the object

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