Is digital marketing effective for your business?

Category Image 023
  • Digital marketing uses electronic devices and the internet for marketing efforts.
  • It includes channels like search engines, social media, email, and websites.
  • Businesses use digital marketing to connect with current and potential customers.
  • Strategies include creating and sharing valuable content, advertising, and engaging with audiences.
  • The goal is to increase brand awareness, drive traffic, and generate leads or sales.

Reverse engineering minified JS with ChatGPT

Category Image 062

#​703 — September 5, 2024

Read on the Web

JavaScript Weekly

An SSR Performance Showdown — Fastify’s Matteo Collina set out to find the current state of server-side rendering performance across today’s most popular libraries. The first attempt faced negative feedback due to implementation issues, but the showdown has been improved and re-run.

Matteo Collina

Announcing Vue 3.5 — While v3.5 is a minor release, it’s one Vue users will love, with big performance and memory usage improvements in its reactivity system. With no breaking changes, upgrade and watch memory consumption drop.

Evan You

WorkOS: The Modern Identity Platform for B2B SaaS — WorkOS is a modern identity platform for B2B SaaS, offering flexible and easy-to-use APIs to integrate SSO, SCIM, and RBAC in minutes instead of months. It’s trusted by hundreds of high-growth startups such as Perplexity, Vercel, Drata, and Webflow.

WorkOS sponsor

Reverse Engineering Minified JavaScript with ChatGPTWriting new code with AI is one thing, but could it be even better at understanding existing code that you’re struggling to grok? Yes, it seems.

Frank Fiegel

Inside ECMAScript: JavaScript Standards Get an Extra Stage — After nine years of annual updates, TC39 has tweaked the process to make rolling out new features faster and smoother. The so-called ‘Stage 2.7’ has been around for a while, but this is a neat primer to what it represents.

Mary Branscombe (The New Stack)

IN BRIEF:

⭐ Vercel goes deep into what’s new in React 19.

💰 Alpine.js creator Caleb Porzio shares his tale of passing $1m on GitHub Sponsors.

Bye NgModules, the future of Angular is standalone! Angular v19 will make standalone: true the default for components, directives, and pipes. This is already the recommended best practice, however.

Angular’s product lead, Minko Gechev, has also shared a little about what it means to mange the Angular project.

OpenAI has switched ChatGPT from Next.js to a Remix-based app, according to Remix’s Ryan Florence on X.

🇵🇱 Poland’s WarsawJS community is holding a 10th anniversary meetup on September 11. They invite you to ▶️ watch live on YouTube.

🤖 Lee Robinson shows off ▶️ the latest enhancements to Vercel’s v0, an AI-based tool for creating apps and components from prompts you supply.

[Workshop] Fix Your Front-End: JavaScript Edition — Learn practical tips to make debugging more tolerable. Join our JavaScript team live for a masterclass on Sept 24.

Sentry sponsor

RELEASES:

Node.js v22.8.0 (Current) – Adds a new API for enabling on-disk code caching at runtime, as well as options to set thresholds for code coverage success.

Astro 4.15 – The popular content site framework stabilizes Astro Actions, a solution for fully type-safe backend functions.

Jimp 1.3 – Pure JS image processing library for Node.

Turborepo 2.1, Puppeteer 23.3, Mermaid 11.1

📒 Articles & Tutorials

▶  Behind the Scenes: The Making of VS Code — A detailed conversation with two of the popular editor’s principal engineers on what makes it tick. VS Code is surely one of the world’s most widely distributed JavaScript-powered apps.

Holland, Rieken and Pasero (Microsoft)

How I Created a 3.78MB Docker Image for a JavaScript Service — The smallest JavaScript app container images tend to run into tens of megabytes, but tailoring your app to run on a lighter runtime like llrt can yield striking results.

Shenzilong

Leave Forms to SurveyJS and Get Back to What You Love Coding — Extensible JavaScript libraries for form management. Drag-and-drop UI, JSON form definitions, and seamless integration with any backend for full data control.

SurveyJS sponsor

Exploring Goja: A Go-Powered JavaScript RuntimeGoja is a pure Go(lang) JS runtime that makes it possible to embed JS into Go apps.

JT Archie

How to Use React Compiler — The compiler feature in React 19 is generating a lot of buzz — this “complete guide”, as described by this author, covers much of what you’ll need to get started.

Tapas Adhikary

Multithreaded Programming in Node.js using AtomicsWorker threads enable you to write multi-threaded Node apps, but sharing resources across them can quickly become tricky. Atomics can help avoid some of the pain.

Pavel Romanov

📄 A Complete Guide to Beginning with JavaScript – A rather epic article packed with background knowledge, context, and third party resources for starting a modern JavaScript learning journey. Cody Lindley

📄 Implementing Filtered Semantic Search Using pgvector and JavaScript Team Timescale

📄 How to Quickly (and Weightlessly) Convert Chrome Extensions to Safari Nina Torgunakova (Evil Martians)

📄 How Sentry Uses Mutation Testing on its JavaScript SDKs Lukas Stracke (Sentry)

🎤 Talking Deno 2 with Ryan Dahl Syntax․fm Podcast

🛠 Code & Tools

jsdiff 6.0: A JavaScript Text Diffing Implementation — Can compare strings for differences in various ways including creating patches. There’s an online demo. (Don’t worry – we’re not going monthly ;-))

Kevin Decker

Redwood v8.0 Released — A long standing, opinionated React & GraphQL (and/or RSC) full-stack framework that covers all the bases for professional dev teams with best-in-class tool support. v8.0 introduces a background jobs system, Docker support, and easier SSR and RSC setup.

Redwood Team

Tests Are Dead. Meticulous Is Here — Automatically creates & maintains E2E UI tests. Zero flakes. Backed by YC, CTO of GitHub, CPO of Adobe, CEO of Vercel.

Meticulous sponsor

🇬🇧 GOV.UK Vue 1.0: Build Vue Apps, the British Way — The UK government is known for having an effective, well-designed site where Brits can complete various official tasks. Now you can get all of their components in Vue 3 form.

UK Government

👀 style-observer: A Mutation Observer for CSS — Attach JavaScript callbacks to changes in computed values of CSS properties.

Bramus Van Damme

Goxygen: Quickly Generate a Go Backend for a JS Project — A tool that sets up a new Go-based project with Angular, React, or Vue in the front-end, and Docker and Docker Compose files to make it all work.

Sasha Shpota

Typist 7.0: Tiptap-Based Rich Text Editor Component — Simple and opinionated. You can try several examples in the sidebar. Well suited for basic rich text situations like writing comments or messages and has a single-line mode.

Doist

Belt: A New Tool for Starting React Native Apps — A CLI tool for starting a new React Native app that takes various mundane decisions away from you and uses tooling and conventions established by a productive app development team.

Thoughtbot

Tinybase 5.2 – Powerful reactive data store for local‑first apps. Now with Postgres support (which can even work in-browser!)

jsdoc-to-markdown 9.0 – Generate Markdown docs from JSDoc-annotated code.

LogTape 0.5 – No-dependency logging lib for Deno, Node, Bun & browsers.

Plasmo 0.89 – Imagine Next.js but for building browser extensions.

JsonTree.js 3.0 – Customizable tree views for JSON data.

Poku 2.6 – Cross-platform JavaScript test runner.

Faker 9.0 – Generate large amounts of fake data.

Commercial Property Data Organizing

Featured Imgs 26
Organizing business property info enables organization users to get the observations needed to generate defendable short and long term commercial proper property decisions. While it might sound like an arduous process, CRE specialists can streamline the procedure with the help of data platforms that provide foundational data sets in a single easy-to-navigate dashboard. These types …

Commercial Property Data Organizing Read More »

The Evolution and Coexistence of Web 2.0 and Web 3.0

Featured Imgs 26

Web 3.0 has grown in popularity over the last few years and has fast become a tool for the empowerment of users in regard to ownership and sharing of data. The premise is that Web 3.0 will bring back the digital industry to a decentralized model, driving forwards, monetization, ownership, and governance, that was not as prominent through Web 2.0’s centralized model.

The basic principles of technological evolution dictate that when a new model is created, it replaces the previous version; that’s precisely what happened between Web 1.0 and Web 2.0. However, Web 3.0 will not follow the same pattern; instead, it has the potential to enhance instead of replace Web 2.0.

How to Send Confirmation Emails with Google Forms

Featured Imgs 26

You have a Google Form and you would like to send an auto-confirmation emails to the person as soon as they submit the form. The autoresponder email message can contain a custom note (like an acknowledgement saying that you have received their form entry)  and also a copy of the form answers that that they have submitted.

These auto-responders are similar to canned responses in Gmail but for Google Forms. You may use the technique for sending welcome messages, acknowledge support requests, and more. Here’s a sample confirmation email that was sent through Google Forms:

A sample auto confirmation email sent through Google Forms A sample auto confirmation email sent through Google Forms

Send a Confirmation Email to the Form Submitter

The other day I got an email from N.Vamsi asking me how to send these confirmation emails using Google Forms?

Would you mind telling me how you have set up auto email updater for inputs taken from Google forms. I have seen your video tutorial on setting up Google forms and getting input values to an email address but auto email responder is something new! Do you have any tutorials for that as well?

This is easy and you can can add the auto-reply feature to your Google Forms in less than a minute. Here are the steps involved:

  1. Create a new Google Form with one or more fields. You can also use an existing form but do make sure you have a field where you would be asking for the email address of the form respondent. This should be a mandatory field.
  2. Install the Google Forms add-on, then go to the add-ons menu inside forms, choose Email Notification for Forms and select Create New Rule.
  3. Enter your name, choose your Gmail alias that you wish to use for sending confirmation emails and check the “Notify Form Submitter” option. Select the form field that you are using to get the email address of the respondent.
  4. On the next screen, customize the email subject and message as described in the Google Form Email tutorial.

Create the rule and you’re done. When anyone submits the Google Form, they’ll get an automatic confirmation email in HTML format and copy of the email data will also be cc’ed to you so you are in the loop.

google-form-confirmation-email.png

How to Reduce LLM Hallucination

Featured Imgs 26

LLM hallucination refers to the phenomenon where large language models like chatbots or computer vision systems generate nonsensical or inaccurate outputs that do not conform to real patterns or objects. These false AI outputs stem from various factors. Overfitting to limited or skewed training data is a major culprit. High model complexity also contributes, enabling the AI to perceive correlations that don't exist.

Major companies developing generative AI systems are taking steps to address the problem of AI hallucinations, though some experts believe removing false outputs entirely may not be possible. 

Chris’ Corner: Esoteric Stuff in CSS

Category Image 052

Listen I ain’t trying to scare you, but this CSS stuff can get complicated. It doesn’t have to be. CSS is just selectors with key value pairs in the end. The vast majority of CSS I write is pretty darn straightforward, especially once you have a general system (what files go where? how do we generally name things? how do we do variables?). But fair is fair, CSS can get wildly complex. It doesn’t help the complexity situation that anything new added increases that complexity, because, well, everything in CSS affects everything else. Selectors can get confusing and nesting can exacerbate that. Variables can get changed at any time and it’s not always clear from where. The situation on the page (sizing, events, settings) can effect what’s happening in CSS in increasingly bigger ways (querying containers, querying user preferences). If you want to push the edges of what CSS can do, now is the time.

I often save links of other people’s explorations of these edges of CSS. They are fascinating to me, naturally, as one of the proprietors of a front-end coding tool and ex-owner of CSS-Tricks. But sometimes I struggle to find a way to share them and contextualize them because of the complexity. In fact I think it’s fair to not use techniques based on complexity alone, after all, you write it you maintain it.

But let’s remove the limiter and look at CSS stuff regardless of how complex it might be.


I’ll start with one that has broken my brain for a few years now. @James0x57 calls this technique “Space Toggles” (who credits Ana Tudor for the discovery). Lea Verou calls it The -​-var: ; hack. Just to lock in my own understanding, I called it The CSS Custom Property Toggle Trick.

The idea is that CSS custom properties can be valid and invalid, a valid value even just being " " (a single space). You can concatenate that custom property with others to produce either-valid-or-invalid other custom properties. If it’s valid, you can do one thing, if it’s invalid, you can use the fallback for the custom property to do another thing. So it’s essentially if/then logic for custom properties.

The closest I ever came to simplifying it is this. And I admit it’s not exactly straightforward.

The good news is that CSS just decided that if() would be a thing, so now we wait for browser implementations. It should be quite a bit more straightforward, although the ease-of-use will lead to more exotic usage of it and, I’m afraid to admit, more complex CSS.


Have you ever prepped for needing to do a sorting algorithm in a job interview? Can you explain what a Bubble Sort is? It’s the one where you loop through a list comparing the two things next to each other, and swap them if they need to be swapped. You keep running through the list until you don’t do any more swaps. I think, anyway, I’m not some computer genius over here. GrahamTheDev is though! Their article Bubble Sort…in PURE CSS? is bonkers.

It literally works.

This is the complexity that comes through the ability to compare variables (e.g. we have min() and max() in CSS now) and set new variables based on other variables. Write enough of that with delays and animations and you got yourself a bubble sort. Good luck grokking all that though.

And speaking of the edges of CSS:

warning: on mobile the last few animations might not play and just go blank. On PC your fan may spin up!

This is a limitation of using so many calculations that rely on previous calculations…I am not sure if it runs out of memory or what, but I defo pushed the limits of CSS here!


What’s the value of cos(25deg) in CSS? Tyler Gaw wanted to figure it out exactly.

I know that will return a number between -1 and 1. But what number?

You can’t even set any property to exactly that, because just the number it produces is invalid for most properties.

You can do something like width: calc(1px * cos(25deg)) then check the width value in the devtools computed styles panel and get close, but not exact. Also, width: cos(25deg) is invalid CSS and using a custom prop like --v: cos(25deg) doesn’t really work either because the custom prop value is stored as cos(25deg).

But obviously cos(25deg) produces a number?! Tyler found a way to extract the CSS-generated number in JavaScript. I felt like having a poke at it too, but I didn’t get much further. I did discover that the output is a unitless number, so it’s valid for CSS properties that take unitless numbers, like line-height. So you can set line-height directly with it and then read the computed value. The problem is the computed value isn’t the direct output of the cos() function it’s the final px value so… blech, hard.


There is some CSS trickery that involves @keyframe animations. For example, styles applied during an animation apply extra strongly, so a style applied with a animation that runs for, say, a year is a way to do style overrides. Not recommended, heh. Setting animations to a particular place and pausing them is another weird trick for managing state in CSS.

Those, at least, I feel like I can get my brain around quickly. Animations have some extra power (and complexity) lately via Scroll-Driven Animations. Roman Komarov is the master recently of extremely exotic and complex CSS trickery, and his Scroll-Driven State Transfer is the pièce de résistance.

… an ability to mirror a particular state of some element — for example, hovered or focused — to an element in a different place on the page without a common or unique ancestral element that could have been used to deliver that state

You might think of :has() as the new hotness for being able to access state anywhere in CSS from anywhere else, and you’d be right, but apparently this trick is a bit more adaptable, not requiring us to write more CSS later:

… we could implement this with the :has() selector, but for any new values we’d have to modify the stylesheet afterwards

It looks like the trick involves those Space Toggles too, meaning I think this is one of the most complicated CSS tricks I’ve ever seen. Apart from the super math-y stuff that always blows my mind, that is.


We’ve established that animations can be one of the vehicles for CSS complexity, which is true when using them just to animate, not strong-arm them into some wild state machine.

One way animations can get complicated is combining them. It was just the other day I reminded myself that nesting elements and then animating them both essentially doubles the speed of the inside animation. That’s just shooting a cannon from an airplane though, no fancy tech there. CSS actually allows us to manually combine animations, with tools like animation-composition. It can be confusing though! Bramus wrote up The mysterious case of using CSS animation-composition: accumulate on a scale transform outlining just how weird it can get even in relatively simple situations. Maybe you’ll scratch your head too:

Accumulating a scale(0.5) with scale(2) does not give scale(2.5) but scale(1.5)

After scratching my own head about this long enough, it did sort of start to make sense. Even though blur(2) and blur(3) certainly make blur(5) when accumulated, those are both “blur something more”. In the case of scale, 0.5 makes something smaller. So adding 2.0 + 0.5 isn’t 2.5 because they aren’t both “do something more”, one is “make smaller” and one is “make bigger”, hence the spec having to step in and explain.

Trying to create a lan-to-lan vpn between two differents networks

Category Image 041

Hello

I'm a network technician in training and I need your help.
I am currently learning how to create and manage the different types of VPNs and I have a question about LAN-to-LAN VPNs.
The last exercise I practiced was to create a LAN-to-LAN VPN between two Pfsense firewalls, by using IPSEC protocols.
I succeeded, with both firewalls in the same network. But I'm wondering if it's possible to do the same thing, with 2 Pfsense firewalls in two different networks.
Can anyone tell me if it's possible and, if so, give me some advice on how to set up this VPN?
Thanks in advance ^^

P.S : i'm french, so my english can be a little bit clumsy.

Minimizing User Decision Fatigue in Web Design

Category Image 076

Offering an array of choices might seem like an excellent way to cater to diverse user preferences, but more often than not, it can cause decision fatigue, negatively impacting the user experience and conversion rates. So, how do we strategically minimize this fatigue through effective web design?

The UX Designer Toolbox

Unlimited Downloads: 500,000+ Wireframe & UX Templates, UI Kits & Design Assets
Starting at only $16.50 per month!


Decision Fatigue in Web Design

Decision fatigue can lead to a decline in the quality of decisions after a continuous decision-making process. In web design, users can experience this fatigue when faced with too many choices, leading to indecisiveness, frustration, and eventual disengagement.

Hick’s Law plays a part in this, suggesting that the time to make a decision increases with the number and complexity of choices. Nonetheless, Hick’s Law is just a fraction of a much broader picture. Balancing user choices and decision fatigue effectively also requires understanding principles like settling for the first reasonable option, avoiding potential losses, and making decisions based on readily available information.

Strategies to Minimize Decision Fatigue

To help users make confident decisions without causing fatigue, several tactics can be implemented.

Streamlined Navigation

Develop a logical, intuitive navigation path to eliminate unnecessary decision-making. For example, clear categorization in a website’s menu helps users find what they need without going through numerous options.

Prioritized Choices

Present the users with essential choices first and omit irrelevant ones. A home page showcasing the most popular products instead of an extensive catalog can prevent choice overload.

Restricted Options

Limit the number of options at each decision point to avoid overwhelming users. For instance, in a subscription selection, offering three plans – basic, premium, and advanced, can be more effective than having numerous slightly differing options.

Design Strategies to Reduce Cognitive Load

Strategic design choices can further alleviate decision fatigue.

Consistent Design

Keeping design elements consistent throughout the website simplifies cognitive processing. For instance, maintaining the same style for all buttons or icons aids user recognition and reduces the cognitive load.

Utilizing Familiar Patterns

Use recognizable icons and layouts to reduce cognitive effort and decision-making time. Employing standard symbols for shopping carts or menus enables users to interact with your website effortlessly.

Anticipatory Design

Predicting user actions and simplifying processes can lessen the number of decisions a user needs to make. Autofilling forms based on past user data is one such example.

Effective Error Handling

Minimize frustration and decision fatigue by guiding users effectively when errors occur. For instance, a clear error message with a suggested solution can keep a user engaged, even in the event of a mistake.

Final Thoughts

Taking into account the principles of decision fatigue and integrating the mentioned design strategies, your web design can become more user-friendly, reducing decision fatigue. Our overview aims to set you on the right path but remember, UX practices often involve deeper explorations and constant testing. Your understanding of decision fatigue will deepen as you engage more with UX research and real-world testing.

While we’re grappling with the complexities of choice, remember there’s another potent tool at your disposal – social proof. Using elements like reviews, testimonials, or popularity indicators can steer users toward decisions others have already made, thus easing their decision-making process. To learn more about how social proof can reinforce user decisions, we invite you to read our article on the topic.

In a world where choice overload is a reality, appreciating the power of simplicity and efficiency in decision-making is invaluable. It’s about striking that optimal balance – giving users ample choice without sparking decision fatigue.

Introduction to MQTT Control Packets

Featured Imgs 26

MQTT control packets are the smallest unit of data transfer in MQTT. MQTT clients and servers exchange control packets for performing their work, such as subscribing to topics and publishing messages.

Currently, MQTT defines 15 types of control packets. If we classify them based on their functionality, we can categorize these packets into three categories: connection, publishing, and subscribing.

Hot-Cold Data Separation: What, Why, and How?

Featured Imgs 26

Apparently, hot-cold data separation is hot now. But first of all:

What Is Hot/Cold Data?

In simple terms, hot data is the frequently accessed data, while cold data is the one you seldom visit but still need. Normally in data analytics, data is "hot" when it is new and gets "colder" and "colder" as time goes by.