Bilal Jafar, Author at ProdSens.live https://prodsens.live/author/bilal-jafar/ News for Project Managers - PMI Sun, 23 Jun 2024 07:20:02 +0000 en-US hourly 1 https://wordpress.org/?v=6.5.5 https://prodsens.live/wp-content/uploads/2022/09/prod.png Bilal Jafar, Author at ProdSens.live https://prodsens.live/author/bilal-jafar/ 32 32 What is Threads and its use in Node.js https://prodsens.live/2024/06/23/what-is-threads-and-its-use-in-node-js/?utm_source=rss&utm_medium=rss&utm_campaign=what-is-threads-and-its-use-in-node-js https://prodsens.live/2024/06/23/what-is-threads-and-its-use-in-node-js/#respond Sun, 23 Jun 2024 07:20:02 +0000 https://prodsens.live/2024/06/23/what-is-threads-and-its-use-in-node-js/ what-is-threads-and-its-use-in-node.js

In the bustling world of computer science, threads are like tiny, independent workers within a larger workshop, a…

The post What is Threads and its use in Node.js appeared first on ProdSens.live.

]]>
what-is-threads-and-its-use-in-node.js

In the bustling world of computer science, threads are like tiny, independent workers within a larger workshop, a process. Imagine a single process as a factory. This factory has various tasks to complete, from assembling parts to running quality checks. Threads, on the other hand, are the individual workers on the assembly line. They share the same resources (tools, materials) within the factory (process) but can work on different tasks (instructions) concurrently.

What are Threads?

Threads are lightweight units of execution within a process. They share the same memory space and resources (like CPU time) of the process they belong to. This allows multiple threads within a single process to seemingly execute instructions simultaneously, improving overall efficiency.

Why Use Threads?

The primary purpose of threads is to enable parallel processing within a single process. This is particularly beneficial for tasks involving waiting, such as:

  • I/O operations: Reading from a file, sending data over a network, or waiting for user input are all examples of I/O operations. While one thread waits for an I/O operation to complete, other threads can continue executing, preventing the entire process from stalling.
  • Long calculations: If a process involves lengthy calculations, other threads can continue working on separate tasks instead of waiting for the calculation to finish.

Benefits of Using Threads:

  • Improved Performance: By allowing multiple tasks to run concurrently, threads can significantly enhance the responsiveness and performance of an application.
  • Efficient Resource Utilization: Threads enable better utilization of multiple CPU cores in a system. With multiple threads, the workload gets distributed, leading to faster processing.
  • Scalability: Applications that leverage threads can scale more effectively to handle increasing workloads by taking advantage of additional CPU cores.

Things to Consider When Using Threads:

  • Shared Memory: Since threads share the memory space of the process, careful synchronization is necessary to avoid data corruption or race conditions (when multiple threads try to access the same data at the same time).
  • Deadlocks: Deadlocks can occur if two or more threads become dependent on each other, waiting for each other to release resources, leading to a standstill. Proper resource management is crucial to prevent deadlocks.
  • Overhead: Creating and managing too many threads can introduce overhead, which can negate the performance benefits. Finding the optimal number of threads for a specific task is essential.

What is I/O operations

In the digital realm, Input/Output (I/O) operations are the essential communication channels that enable your computer to interact with the external world. These operations bridge the gap between the internal processing power of your CPU and the vast array of devices and data sources that surround it.

But what exactly is I/O Operations?

I/O operations encompass any activity that involves transferring data between a computer’s memory and external devices or networks. This includes:

  • Reading data: Retrieving information from various sources like hard drives, solid-state drives (SSDs), optical drives (CD/DVDs), network connections, or even user input devices like keyboards and mice.
  • Writing data: Transferring information from the computer’s memory to external storage devices or sending data over a network connection (e.g., saving a file, sending an email, or displaying graphics on your monitor).

Common Types of I/O Operations:

  • File I/O: Reading from or writing to files stored on storage devices.
  • Network I/O: Sending or receiving data over a network connection (wired or wireless).
  • Device I/O: Interacting with peripheral devices like printers, scanners, webcams, or sensors.
  • User I/O: Receiving input from human users through keyboards, mice, touchscreens, or other input devices.

The Importance of I/O Operations:

I/O operations are the lifeblood of any computer system. They enable you to:

  • Access and manipulate data: Without I/O, your computer wouldn’t be able to retrieve instructions from programs, store results, or communicate with other devices.
  • Interact with the world: I/O operations allow you to use your computer for all its intended purposes, from browsing the internet to printing documents.
  • Run programs: Applications rely on I/O to load program files, read configuration settings, and save user data.

Factors Affecting I/O Performance:

The speed and efficiency of I/O operations can be influenced by several factors:

  • Device characteristics: The speed of the storage device (HDD vs. SSD), network bandwidth, and capabilities of peripheral devices all play a role.
  • Bus technology: The type of bus (e.g., USB, PCIe) connecting the device to the computer impacts data transfer speeds.
  • Software optimization: The way the operating system and applications handle I/O requests can affect performance.

Optimizing I/O Performance:

Here are some strategies to improve I/O performance:

  • Upgrade hardware: Consider using faster storage devices (SSDs) or upgrading network connections (fiber optics).
  • Optimize software: Ensure applications are using appropriate I/O libraries and techniques for efficient data transfer.
  • Reduce I/O wait time: Techniques like caching frequently accessed data or using asynchronous I/O (handling I/O requests without blocking the main program) can help.

Threads in Node.js: A Comprehensive Explanation

In the context of Node.js, threads play a crucial role in handling non-blocking I/O operations. When a Node.js application performs an I/O operation, such as reading a file from the disk or sending data to a network socket, the thread responsible for that operation can be temporarily blocked while waiting for the I/O to complete. However, other threads within the same process can continue executing, ensuring that the application remains responsive and does not freeze.

Multithreading vs. Multiprocessing

Multithreading and multiprocessing are two distinct approaches to achieving parallel processing. Multithreading allows multiple threads to share the resources of a single process, while multiprocessing involves running multiple processes, each with its own dedicated resources.

Node.js primarily utilizes multithreading for its non-blocking I/O operations. This approach is particularly well-suited for I/O-bound applications, where a significant portion of the time is spent waiting for I/O to complete. Multithreading allows Node.js to efficiently handle these I/O operations without blocking the entire application.

The Role of Threads in Node.js’s Event Loop

The event loop is a central mechanism in Node.js that manages the execution of callbacks and I/O operations. It continuously monitors the event queue, which holds callbacks waiting to be executed. When an I/O operation completes, its corresponding callback is placed in the event queue. The event loop then retrieves callbacks from the queue and executes them, ensuring that the application responds to events and handles I/O operations efficiently.

Threads interact with the event loop by delegating I/O operations to the event loop and then waiting for their completion. Once an I/O operation is complete, its corresponding callback is notified, and the event loop handles its execution. This collaborative approach enables Node.js to manage asynchronous I/O operations without blocking the main thread.

Benefits of Using Threads in Node.js

The use of threads in Node.js offers several advantages:

  1. Improved Performance: Threads allow Node.js to handle I/O operations efficiently without blocking the main thread, leading to a more responsive and performant application.

  2. Efficient Resource Utilization: Threads enable Node.js to utilize multiple CPU cores effectively, distributing the workload and improving overall processing speed.

  3. Scalability: Node.js applications can scale to handle increasing workloads by leveraging additional CPU cores through threads.

Considerations When Using Threads in Node.js

While threads provide significant benefits, it is important to use them judiciously:

  1. Shared Memory: Threads within a process share the same memory space, which can lead to concurrency issues if not managed properly.

  2. Deadlocks: Deadlocks can occur when two or more threads are waiting for each other to release resources, causing the entire process to stall.

  3. Over-Threading: Creating too many threads can lead to excessive overhead and system resource contention, potentially hindering performance.

Conclusion

Threads are fundamental components of modern programming, and their understanding is essential for developing efficient and scalable Node.js applications. By leveraging threads effectively, Node.js developers can harness the power of parallel processing, enhancing the performance and responsiveness of their applications. If you’re eager to deepen your understanding of these algorithms, explore my GitHub repository (algorithms-data-structures). It offers a rich collection of algorithms and data structures for you to experiment with, practice, and solidify your knowledge.

Note: Some sections are still under construction, reflecting my ongoing learning journey—a process I expect to take 2-3 years to complete. However, the repository is constantly evolving.

The adventure doesn’t stop with exploration! I value your feedback. If you encounter challenges, have constructive criticism, or want to discuss algorithms and performance optimization, feel free to reach out. Contact me on Twitter @m_mdy_m or Telegram: @m_mdy_m. You can also join the conversation on my GitHub account, m-mdy-m. Let’s build a vibrant learning community together, sharing knowledge and pushing the boundaries of our understanding.

The post What is Threads and its use in Node.js appeared first on ProdSens.live.

]]>
https://prodsens.live/2024/06/23/what-is-threads-and-its-use-in-node-js/feed/ 0
How to Write a Budget Proposal (+ Free Template) https://prodsens.live/2024/05/29/how-to-write-a-budget-proposal-free-template/?utm_source=rss&utm_medium=rss&utm_campaign=how-to-write-a-budget-proposal-free-template https://prodsens.live/2024/05/29/how-to-write-a-budget-proposal-free-template/#respond Wed, 29 May 2024 12:20:16 +0000 https://prodsens.live/2024/05/29/how-to-write-a-budget-proposal-free-template/ how-to-write-a-budget-proposal-(+-free-template)

The first time I was assigned to write a budget proposal, I stared anxiously at a blank spreadsheet,…

The post How to Write a Budget Proposal (+ Free Template) appeared first on ProdSens.live.

]]>
how-to-write-a-budget-proposal-(+-free-template)

The first time I was assigned to write a budget proposal, I stared anxiously at a blank spreadsheet, wondering where to begin. What was a budget proposal supposed to include? Was there a specific structure to follow? How could I ensure it met all the necessary criteria?

My early attempts at writing a proposal taught me the challenges of building a convincing plan that turns rough ideas into fundable projects. I had to learn to align proposal details with business objectives and articulate the potential benefits in a way that resonated with stakeholders.

Click here to download 8 free marketing budget templates.

It was an overwhelming task at times — but with a strategic approach and a bit of guidance, my ability to synthesize financial data and communicate value gradually became second nature.

In this article, I’ll guide you through how to write a simple budget proposal that delights your audience and secures funding. I’ll also provide practical tips, templates, and sample projects to streamline your planning process.

So, let’s get started.

Table of Contents

What is a budget proposal, and why is it important?

A budget proposal outlines the financial plans for a project or initiative, detailing the expected costs and resources needed for successful completion.

Budget proposals also show potential funders or stakeholders how their money will be spent and the tangible benefits their investment will achieve.

While the content of your budget proposal will change depending on your project’s parameters and specific goals, a well-crafted plan leads to benefits like:

  • Stakeholder buy-in. Providing a transparent breakdown of anticipated expenses instills confidence and trust, encouraging stakeholder support or investment.
  • Efficient resource usage. Outlining a clear resource allocation plan ensures that funds are directed to the areas where they are needed most.
  • Risk mitigation. Applying a risk management framework helps proactively identify potential costs and contingencies, ensuring that the project remains on track and within budget constraints.
  • Project tracking. Identifying key project milestones and benchmarks promotes informed decision-making, maintaining efficient and agile progress.

The Anatomy of a Budget Proposal

Before you begin drafting your budget proposal, it’s helpful to first familiarize yourself with its key components and overarching structure.

Knowing which strategic points to emphasize — and the order in which to present them — improves your ability to create a logical and compelling argument, while also ensuring you effectively communicate your project’s feasibility.

So, let’s examine five critical sections found in every effective budget proposal, drawing on the structure used in Hubspot’s Free Budget Proposal Template.

Hubspot’s free budget proposal template

Free Budget Proposal Template

About the Project

The first section of the proposal lays the foundation of your proposal, detailing the purpose, significance, and intended impact of your project.

It serves to introduce stakeholders to the scope and goals of your initiative, highlighting its value and necessity.

Timeline

A project timeline outlines your proposed schedule from start to finish, providing a clear roadmap of phases and milestones. It helps stakeholders understand the duration of the project and key deliverables at each stage.

Cost Information

This section itemizes the individual expenses associated with the project. It also breaks down costs into categories such as labor, materials, and equipment to provide a transparent view of how funds will be allocated.

Pro tip: If you’re unsure how to approach cost analysis, begin by analyzing past campaigns and other historical data to understand what worked — and what didn’t. This data-driven approach ensures your budget allocations are justified, even if it’s a new or experimental campaign.

Cost Summary

This part of the proposal consolidates all the detailed cost elements into a total funding request. It summarizes the financial needs of the project, presenting the total amount you are asking from stakeholders in a clear and concise manner.

Conclusion

The closing section serves as a final pitch to your funders. It reiterates the project’s benefits and the importance of the requested funding, urging stakeholders to take action and support the initiative.

How to Create a Simple Budget Proposal

Now that we have a big-picture overview of the five essential components of building a budget proposal, I’ll explore how I practically apply them to build out a proposal.

Step 1. Define your project goals.

When I make a budget, I start my proposal by defining the specific objectives and expected outcomes of your project.

This step is crucial for setting the tone for the entire proposal by immediately conveying to stakeholders the significance and feasibility of my project.

It also helps build a compelling case for why the project deserves funding, by aligning my goals with the tangible benefits for stakeholders.

How I define project goals:

  • Identifying my target audience. I describe the direct improvements my project will bring to particular groups, clients, or customers.
  • Outlining measurable outcomes. I specify clear, quantifiable goals that illustrate what the project aims to achieve.
  • Clarifying the project’s purpose. I highlight its importance in the broader context of the business, detailing the strategic value and potential long-term benefits.

Step 2. Build your project timeline.

I try to establish a project timeline early on by identifying the sequence of events needed to reach completion. This step is crucial to align all team members and stakeholders on the planned progression of activities and schedules.

How to I build my project timeline:

  • Defining key milestones. I identify major milestones that mark significant phases of the project, such as the completion of the design phase or the first prototype.
  • Detailing critical deadlines. I set deadlines that must be met to keep the project on track, such as funding application deadlines or regulatory approval dates.
  • Sharing necessary checkpoints. I define phases in the timeline where assessments or evaluations are required to proceed to the next phase.

Pro tip: Ensure your project timeline includes buffer periods between major milestones. This flexibility helps accommodate potential delays or adjustments without derailing the overall project schedule.

Product launch timeline

Download this project timeline template for free.

Step 3. Estimate your costs.

I detail the financial requirements of my project by categorizing and explaining each type of cost.

This breakdown gives stakeholders an overview of how funds will be allocated, sharpening the project’s financial viability and operational efficiency.

How I estimate my costs:

  • Categorizing expenses. I break down costs into categories like labor, materials, equipment, and overhead, explaining each in relation to the project’s needs.
  • Quantifying each category. I provide estimates for each cost category, detailing how these figures were derived from data or market research.
  • Highlighting cost efficiency. I demonstrate how each expense contributes to the project efficiently, maximizing resource utilization and cost-effectiveness.

A sample Excel spreadsheet of an project’s expense breakdown

Pro tip: Streamline your cost analysis with Hubspot’s Free Budget Templates. With eight different templates to choose from, you can easily monitor your monthly, quarterly, and yearly campaign spending, keeping your team aligned — and within budget.

Step 4. Create a cost summary.

I summarize the financial aspects of my project, consolidating the detailed costs into a clear total.

This overview helps stakeholders quickly grasp the total financial scope and the rationale behind the funding request, improving the proposal’s credibility and clarity.

How I create a cost summary:

  • Aggregating total costs. I combine all individual expenses and present them in a unified, total project budget.
  • Justifying the investment. I detail how the total expenditure aligns with expected project returns or benefits, illustrating the financial feasibility.
  • Detailing funding requirements. I specify the required funding amount and provide clear explanations for these financial needs to assure stakeholders of the necessity and strategic thought behind the request.

Step 5. Reiterate your argument.

I always conclude my proposal text by reinforcing the project’s value and motivating stakeholders to take action.

This ending serves to emphasize the project’s significance, alignment with stakeholder goals, and the strategic benefits it offers, providing a solid basis for funding approval.

How I reiterate my argument:

  • Restating project benefits. I summarize the key benefits of the project, emphasizing how it aligns with the stakeholders’ interests.
  • Highlighting impact and readiness. I showcase the project’s potential impact and readiness for implementation, stressing any competitive advantages.
  • Making a call-to-action. I provide a clear next step for stakeholders to take, whether it’s setting up a meeting, reviewing further documentation, or approving funding.

Pro tip: Compelling budget proposals go hand-in-hand with strong business proposals. Use Hubspot’s Free Business Proposal Templates to seamlessly merge financial planning with strategic business objectives, ensuring a comprehensive and compelling pitch for your next project.

Image of Hubspot’s Free Business Proposal template

Image Source

Step 6. Review, edit, and submit.

Finally, I review all sections of my proposal for accuracy and clarity before submitting it for approval or consideration. This step ensures that my document is free from errors and aligns with the funding objectives.

How I review and edit my proposals:

  • Asking for feedback. I ask for input from colleagues to identify what is working in the proposal — and what may require revision.
  • Proofreading. I thoroughly re-read the document to catch grammatical errors and ensure that the language is professional and precise. Sometimes, I even read the document out loud to make sure it sounds coherent.
  • Following submission guidelines. I always make sure to adhere to the specific submission guidelines, such as format, deadline, and method of submission.

Building My Own Basic Budget Proposal

Using HubSpot’s Budget Template, I developed a basic marketing campaign proposal for how my company could leverage social media influencers to promote our product’s new language availability options.

Example of a budget proposal for a marketing campaign

I started by honing in on the project scope and identifying the target audience — French, German, and Spanish speakers — focusing on how we can enhance accessibility and expand our market reach.

I also paid special attention to describing the strategic value of influencers in gaining traction within these key audience groups, ensuring our approach was both effective and culturally authentic.

Then, in the Key Stakeholders section, I detailed the roles of everyone involved, like the social media manager and community managers, ensuring clarity on each person‘s responsibilities.

This was crucial for aligning our internal teams with the campaign’s objectives.

Example of a budget proposal for a marketing campaign

For the Timeline and Budget sections, I broke down the campaign into phases, specifying activities and dates to ensure a structured approach.

Example of a budget proposal for a marketing campaign

I then estimated costs, breaking them down into specific elements like influencer fees, content production, and paid advertising. This is critical for providing a clear picture of the financial resources needed to avoid over- or under-budgeting.

Example of a budget proposal for a marketing campaign

Finally, for the conclusion, I condensed our campaign’s goals and the strategic importance of the requested funding into a compelling call-to-action.

My goal was to craft a narrative that not only informed — but also motivated our stakeholders to support the initiative.

I then shared the proposal with two of my colleagues for feedback, applied their notes, and submitted it to my manager for review and approval.

8 Budget Proposal Best Practices

Crafting an effective budget proposal demands practice and precision. Here are eight best practices to get you started on the right foot.

1. Engage stakeholders early.

Get relevant stakeholders involved in the budgeting process as early as possible.

For example, I may loop in department heads, finance staff, and other key decision-makers. Soliciting their input and buy-in can lead to a more collaborative (and therefore successful) budget proposal.

I reached out to Kaitlin Milliken, a senior program manager at HubSpot, to get her take on building budgets at the company.

“My manager and I keep track of our annual budgeting cycle, so I can earmark the time to create any budgeting documents for the next fiscal year,” Milliken says. “By making sure I work with her and our accounting team early, I can resolve issues before deadlines loom.”

2. Understand the scale of operation.

The size of the company you’re working with significantly influences the scope and detail of your budget proposal.

If you’re at a smaller business, stakeholders may wish to see a proposal focused on agility, directing funds towards critical growth areas like product development and market entry strategies.

In contrast, larger businesses might be more interested in expanding existing successful initiatives — or more open to testing new ideas.

3. Know your audience.

Tailor your proposal to the audience who will review it. If it‘s for senior management, focus on high-level summaries and strategic goals. If it’s for a finance committee, offer additional financial analysis.

“Most of my budget asks go to our senior director or VP. I know they’re busy and want the perfect balance — enough context to understand the ask in a format that’s quick to read,” Milliken says. “Because I know my audience is tight on time, I make sure to include easy-to-skim charts and tables.”

4. Balance needs and wants.

Aim for a balanced approach that addresses both essential needs and aspirational wants, so that you’re prioritizing critical investments, while also considering opportunities for innovation.

Pro tip: Implement a structured prioritization framework, such as the MoSCoW method, to systematically distinguish between essential needs and discretionary wants, optimizing resource allocation for maximum impact.

5. Think about long-term implications.

Especially in the beginning stages of your proposal, think beyond the immediate fiscal year and consider the long-term implications of your budget decisions.

Anticipate how your proposed allocations may impact future budgets, operational sustainability, and organizational development.

For more context, I asked Kaitlin Milliken about how she thinks about the budget for her program.

“I make assignments to freelance writers. When I ask for budget, I always make sure that I’m realistic about how much we can spend,” she says. “If I ask for too much and can’t spend it, we may limit what we can ask for in years to come. That’s a huge long-term implication.”

6. Consider multiple scenarios.

Similarly, try presenting alternative scenarios or contingency plans to account for potential risks or changes in circumstances.

This shows flexibility and preparedness. Milliken notes that she spent time in startups prior to working at HubSpot. In the past, when making budget proposals, she’s created three scenarios:

  • The first is the bare minimum amount of budget a project would require. This may put strain on the team, but anything under this number would be impressive.
  • The ideal and realistic amount a project will cost. “This is the amount I will need to comfortably accomplish the project with a limited number of nice-to-haves,” she says.
  • A stretch budget. “This budget would allow me to run experiments and test new tools when working on a project,” she notes.
  • “With these three numbers in mind, I could pivot and refine my budget request based on what’s available to spend,” Milliken says.

7. Build a story.

Weave in a strong storytelling narrative that provides context, explains assumptions, and addresses any potential concerns or questions. This adds depth to your proposal and helps guide readers through the document.

Pro tip: Incorporate data visualization techniques, such as graphs or infographics, to complement your narrative and enhance the clarity and persuasiveness of your budget proposal.

Data visualization in budget proposal for social media audience

8. Review, Review, Review

Before finalizing your budget proposal, carefully review it for consistency and completeness. Consider seeking feedback from colleagues or mentors to ensure it’s polished and persuasive.

Perfecting Your Budget Proposal

Crafting a clear and effective budget proposal is an indispensable skill that will dramatically increase your project’s likelihood of securing necessary funding.

By integrating the best practices and strategic steps outlined in this article, you’ll position yourself to clearly present your financial needs — and your overall project vision. Good luck!

New Call-to-action

The post How to Write a Budget Proposal (+ Free Template) appeared first on ProdSens.live.

]]>
https://prodsens.live/2024/05/29/how-to-write-a-budget-proposal-free-template/feed/ 0
I Tested 6 AI Tools for Graphic Design, Here Are My Favorites https://prodsens.live/2024/05/29/i-tested-6-ai-tools-for-graphic-design-here-are-my-favorites/?utm_source=rss&utm_medium=rss&utm_campaign=i-tested-6-ai-tools-for-graphic-design-here-are-my-favorites https://prodsens.live/2024/05/29/i-tested-6-ai-tools-for-graphic-design-here-are-my-favorites/#respond Wed, 29 May 2024 12:20:15 +0000 https://prodsens.live/2024/05/29/i-tested-6-ai-tools-for-graphic-design-here-are-my-favorites/ i-tested-6-ai-tools-for-graphic-design,-here-are-my-favorites

Graphic design has come a long way since I started in the arts nearly a decade and a…

The post I Tested 6 AI Tools for Graphic Design, Here Are My Favorites appeared first on ProdSens.live.

]]>
i-tested-6-ai-tools-for-graphic-design,-here-are-my-favorites

Graphic design has come a long way since I started in the arts nearly a decade and a half ago. Improvements in tools like Photoshop or my personal favorite, Procreate, from then to now have helped remove creative roadblocks and speed up the design process. Then, user-friendly design tools like Canva have made design more accessible to non-specialists.

Now, it’s 2024, and we find ourselves in the throes of the “AI revolution.” We’re met with a ton of AI tools for graphic design that promise to streamline our creative workflows and more. But is the juice really worth the squeeze with these tools? Today, we find out.

Download Now: 150+ Content Creation Templates [Free Kit]

Table of Contents

Why use AI for graphic design?

From removing creative blocks to saving time, here are three reasons to consider adding AI to your graphic design process.

Remove Creative Blocks

One of the main benefits I’ve found by using AI is that it helps me remove creative blocks. So, when I’m writing and hit a wall, rather than staring at a blank screen, I might ask ChatGPT to generate an example use case for something. Even if the text it generates is clunky and unusable, it at least gives me a starting point.

When it comes to design, specifically, the same goes for something like color pairing. Without AI assistance or pre-created palettes, I struggle to choose more than one color for a design. (As you’ll see later, a specific AI tool for graphic design can help remove that creative block.)

Creative Experimentation

As an Illustration graduate who specialized in printmaking, I can tell you first-hand that creative experimentation in real life gets messy.

Not only is the process often messy, but it can take up a lot of space. Before you know it, multiple physical versions of your experimentations are mounting up, and the next issue is where to store them.

Aside from that, non-digital creative experimentation is often riskier. Without the faithful “Ctrl Z” or equivalent at your disposal, you’re always one move away from ruining a design. The crux? It’s enough to put you off even trying, and that’s not good for business.

But I’m not just some random ex-art grad on a soap box lecturing you about creative expression without just cause. I’m also a business owner shouting from the rooftops about one key fact: Experimentation is the driving force behind innovation. So, the more you can encourage it in yourself and, if relevant, your organization, the better.

Save Yourself Time

There’s a reason 95% of professionals using AI say it helps them spend less time on manual tasks. And a further 83% say it helps them focus on the creative aspects of their role.

Through automation, AI can help you simplify your creative workflow, be it through bulk edits or generating designs in a few prompts. Also, by removing creative blocks and providing a way to experiment at speed, you can get from a concept to a final design much quicker.

That said, there’s something magical about creating a physical piece that you can hold in your hands. And without all those years spent in the print room or experimenting with different mediums — from textiles to gloopy oil paints — I don’t think I’d understand how to use AI to achieve my desired outcome.

How I Tested the Best AI Graphic Design Tools

I tested each tool against the following criteria:

  • Price. I wanted to know if you could get started with the tool for free. (As a side note, it’s worth exploring how much it will cost you to actually download and use the end product for commercial purposes.)
  • Ease of use. I wanted to test how intuitive and user-friendly the design platform was.
  • Design capabilities. I wanted to know how broad each tool’s design capabilities were. More specifically, I tried to understand whether the tools’ AI elements were overhyped or genuinely helpful.
  • Licenses and copyright. I wanted to know if you could use the end products commercially. Bonus points if the companies behind the tools actively protect people from potential legal action after using designs created through the platform.
  • Ethics. As a creative, I was curious about how each company trained the AI models. I personally would prefer not to use a tool that didn’t work with creatives fairly or didn’t openly state how it trained the models.

AI Tools for Graphic Design

I road-tested six tools for graphic design. Here’s what I found.

1. Adobe Firefly

Adobe Firefly is a generative machine-learning model specifically for design. You can get it as part of the Adobe Creative Cloud within the Photoshop (beta) app or as a stand-alone tool.

A popular use case for Adobe Firefly is to “create stunning, life-like images.” However, you can also use the tool for AI photo editing (i.e., changing backgrounds and removing unwanted elements from your images).

I decided to try the stand-alone tool for generating images from scratch. For context, remember what I said earlier about having an Illustration degree and spending a lot of time in a printmaking studio. So, I’d definitely say my bias is toward the more painterly/illustrative side of graphic design.

My prompt:A simple black outline of a mountain drawn in the style of Tolkien’s Lord of the Rings drawings colored with random splotches of drawing ink in magenta, blue, purple, and gold.Testing out Adobe Firefly AI for graphic design

Image Source

I was actually quite impressed with the output, especially considering I only prompted the tool and didn’t configure any of the settings initially.

But how does Adobe Firefly stack up when you get more specific with the settings? I headed to the General settings section and chose Art as the content type to find out.

Testing out Adobe Firefly AI settings

Image Source

In my opinion, the setting change didn’t make that much difference to the output. But that could be because the original prompt was biased towards an “art” type of output anyway.

AI tools for graphic design, the results of changing Adobe Firefly AI settings

Image Source

As a further experiment, I also adjusted the prompt to bring more whitespace into the mountain portion of the design. Adobe Firefly interpreted that as more whitespace, in general, rather than in the mountain section itself. Long story short, that didn’t work out as I envisioned, so I ditched that portion of the prompt.

Best AI for graphic design, exploring color and tone in Adobe Firefly AI

Image Source

After that, I experimented with the Color and tone setting, choosing Golden. I didn’t expect much from this setting change, but I actuallyloved this output.

I could create something similar digitally using Procreate, which would take some time. Or I could make something like this by hand using either woodcut/block or lino printing, which would take hours, maybe even days, depending on the complexity of the design.

AI for graphic design, exploring Golden color and tone in Adobe Firefly AI

Image Source

I will say that with something like this (personal work), it’s often about the journey as much as the destination. And even though it took mere seconds to produce, it wasn’t as fun to create this digitally as it would’ve been by using traditional printing or even with biro and drawing ink.

What I like: Adobe Firefly first piqued my interest in 2023 when Sarah Rogers, a Contributing Artist at Cricut, posted about the tool on LinkedIn.

Best for: Individual graphic designers, design teams, students, students and teachers. And anyone looking to improve their design skills using a responsible AI tool.

Pricing: Get started for free.

A graphic designer comments on Adobe Firefly AI

Image Source

I’d followed Sarah’s thoughtful LinkedIn posts about AI for a while. And we both seemed to have a similar mindset regarding its use within creative endeavors. I don’t want to speak for Sarah, but as for me, here’s my mindset:

  • Yes, you might be able to speed up your creative process with AI — if you know how to use it.
  • No, you shouldn’t fire all of your creative team and replace them with AI.
  • And yes, you should keep a healthy level of skepticism regarding the application of AI within your business. (A healthy level of skepticism, specifically about the output of the tools, legal issues like licensing, and how the models are trained.)

So, what caught my eye the most about Sarah’s endorsement of Adobe Firefly was that Adobe is, seemingly at least, acting responsibly in this space.

AI tools for graphic design, Adobe Firefly AI comments on the responsible use of AI

Image Source

They’re arguably the most responsible folks in the design tool world regarding AI. That makes me feel more confident about any potential licensing issues and that “no creatives were harmed” in training the models.

2. Canva

Canva is a free online graphic design tool. You can use it to create a range of designs, such as social media posts, logos, and presentations.

Canva has integrated AI into its platform in several different ways, including Magic Design, a text-to-image generator, and Magic Studio, which includes AI-driven photo editing features and text-to-video generation.

AI for graphic design, exploring Magic Studio via Canva

Image Source

These days, I mostly use Canva to make (some might say, hilarious) memes for my LinkedIn. However, I used the tool a lot when I offered social media marketing services, so I wanted to use Magic Studio to create a social media image.

I started with a time-saving social media template — an Instagram post specifically.

AI tools for graphic design, exploring Instagram post templates in Magic Studio via Canva

Image Source

I chose Cream Minimalist New Collection Instagram Post by Kinley Creative.

Cream Minimalist New Collection Instagram Post in Magic Studio via Canva best ai for graphic design

Image Source

I wanted to customize the image, so I uploaded a picture of some of my own artwork.

AI for graphic design, customizing an Instagram post in Magic Studio via Canva

Image Source

I also wanted to upload a font I’d recently downloaded from Type Colony. (This is TC Kuareen if you’re interested.)

Uploading a custom font in Canva ai for graphic design

Image Source

To upload the font, I clicked on the “new collection” templated text, selected the font drop-down menu, and clicked “Upload a font.”

best ai tools for graphic design, using a custom font in Canva

Image Source

Once I’d come this far, I realized I’d not used any AI features. So my next task was to try to find some. But, try as I might, I could only find two noticeable AI features within the image editor.

One of them was “Magic Write.” I could see that being helpful for designers or business owners who need help writing copy. That said, if you don’t know how to use AI well, it’s no replacement for working with a trained copywriter. Of course, the same goes for design.

The other AI feature was “Translate.” Once again, I could see this being helpful. However, like copy and design, AI translation is no replacement for having an actual translator to safeguard against translation mishaps.

The Translate feature in Canva

Image Source

This could be my misunderstanding of the tool, but I found it hard to see a specific AI use case for social media graphic creation.

But I think the tool could be really handy for AI image editing. For example, the “Magic Eraser” edit feature gets rid of unwanted design elements, and “Magic Edit” adds to, replaces, or edits an image in a few clicks.

AI image editing features in Canva, ai for graphic design

Image Source

What I like: Canva is really user-friendly. I feel like people with varying levels of design knowledge, and even those with little experience using design tools could use it.

What I like: Canva is really user-friendly. I feel like people with varying levels of design knowledge, and even those with little experience using design tools could use it.

I also like that the platform has introduced an “industry-leading collection of robust trust, safety, and privacy tools” through Canva Shield. It seems like Canva is also safeguarding against intellectual property claims for Enterprise customers. Plus, they’re compensating Canva creatives for their work through an AI royalty program.

Best for: Individual graphic designers, design teams, and small to enterprise businesses.

Pricing: Get started for free.

3. Designs.ai

Designs.ai is an integrated Agency-as-a-Service platform powered by AI technology. It’s a one-stop shop for everything from logo design to social media and image generation. You can even convert text to speech for voice-over content.

I tried creating a social media image to see how Designs.ai compares to Canva, mainly because I wanted to know if the AI aspects of this tool were more prominent.

Designs.ai social media image design

Image Source

My first thought was that if you’ve used Canva before, it won’t take you long to get to grips with the layout for this section of the tool. But even if you haven’t, the Designs.ai platform is straightforward and intuitive. I can see most people being able to pick up this tool and run with it to some degree.

Designs.ai social media image Wizard option - best ai tools for graphic design

Image Source

At first glance, the social media section is very similar to Canva in terms of picking templates to customize based on the channel (Facebook, Instagram, etc.). So, it’s pretty standard stuff, really. The “Wizard” option, however, caught my eye.

Inputting the variables into Designs.ai social media image creator

Image Source

The default format is “Business Card,” but you can choose from different options, such as “Quotes,” “Product Listings,” and “YouTube Thumbnail.” I picked “Instagram Post” to compare the results to Canva.

Choosing a predetermined category for Designs.ai social media image creator

Image Source

In addition to the different design format options, you can also choose from predetermined categories like “Events & Celebrations,” “Business, Legal & Finance,” and “Animal & Pet.” I selected “Art, Design & Inspiration.”

ai for graphic design, adding more variables into Designs.ai social media image creator

Image Source

As a side note, I had to sign up/sign in to upload my own title image. But I did everything until that point via the website without signing up for the platform.

After inputting the design variables, I hit Generate. The options the tool spat out weren’t standout designs, but they were better than I expected — a pleasant surprise!

ai tools for graphic design, the output from Designs.ai social media image creator

Image Source

Next, I selected one of the suggested designs to see what the image editor was like. As with much of Designs.ai, the layout is similar to Canva.

Testing Designs.ai social media image editor

Image Source

For the sake of continuity, I could’ve missed something, but unlike Canva, as far as I’m aware, you can’t upload your own fonts to Designs.ai.

Testing fonts in Designs.ai social media image editor, best ai for social media

Image Source

Overall, I found the platform easy to navigate and use. That said, I don’t think this would serve your needs if you wanted to create complex designs. I also couldn’t find any information about how Designs.ai trained its models, so I’m wary of that aspect.

There is information about licensing, though. Generally, “finished projects made with our creative AI tools can be distributed to promote and advertise your business.” Still, there are specific Do’s and Don’tssegmented by each aspect of the tool (Logo, Social Media, Video, etc.) that you might want to pay attention to.

What I like: In terms of AI, Designs.ai goes a step beyond Canva. I can also see the “Bulk Edit” function coming in handy if you want to automate mass edits.

ai for graphic design, Designs.ai social media image editor Bulk Edit

Image Source

Best for: Small businesses at the start of their journey who don’t have the budget for a designer. Individual graphic designers or design teams specializing in holistic marketing.

Pricing: Get started for free.

4. AutoDraw

AutoDraw is an AI tool that combines machine learning and drawings from artists. You can use the tool to “draw stuff fast.” In terms of graphic design use cases, you could use AutoDraw to make learning materials and custom graphics. And for any design that requires a quick outline, I can see Autodraw speeding up the process.

A warning: I don’t have my graphics tablet set up. So everything you’re about to witness — hilarious though it may be — was done with just a mouse. I’m guessing the tool’s capabilities are far greater with a tablet or a stylus at hand. However, without giving too much away, it proves that you can input a terrible drawing into AutoDraw and get something better back.

ai for graphic design, a blank canvas in AutoDraw

Image Source

I decided to keep things simple with a good old smiley face. First, I used the “Shape” tool to create a circle outline, and then I used “AutoDraw” for the eyes and nose. As you can see, the AutoDraw elements inputted by me are … lacking finesse, shall we say.

Testing the AutoDraw feature in AutoDraw

Image Source

But that’s not a problem. The “Do you mean” section on the top toolbar gives various options to finesse your drawing. So even if your attempt to draw a smiley face with just a mouse didn’t turn out so well, one click on a smiley face up top, and you’re golden.

Testing the AutoDraw Do you mean feature in AutoDraw

Image Source

As you can see the smiley face is now a little less unbearable to behold. Next I used Select to select and then delete the initial circle shape I added. (It turned out to be unnecessary.) Et voila! A shiny happy clipart style person laughing … or something.

The end result of the AutoDraw Do you mean feature in AutoDraw, ai tools for graphic design

Image Source

Regarding training the models, Google usedthe same technology to guess what you’re trying to draw,” as Quick, Draw!, which relied upon “artists, designers, illustrators, and friends of Google” to add drawings to the doodling data set.

I doubt the artists were compensated for their work. Still, at least they shared designs willingly rather than having them scraped by AI without their consent.

What I like: I really like that the tool is simple to use, free, and, let’s be honest, fun! However, it wouldn’t be ideal for complex design work. That said, if you don’t have a lot of time and need to visualize an idea quickly, AutoDraw can help.

Best for: Anyone who needs to convey ideas and concepts at speed.

Pricing: Get started for free.

5. Khroma

Khroma is an AI graphic design tool that helps you match your favorite colors into a series of palettes. The tool also blocks the colors you don’t like, so they’ll never find their way into your palettes.

I love that this tool is so specialized for a specific purpose. And I can see this being a big time saver if you struggle with color pairing like me.

For context, I can pick a few colors that I like, no problem. But I’m not always confident they go together and can get lost in analysis paralysis. As a result, I tend to buy pre-made color palettes for my go-to illustrative tool, Procreate.

After I clicked Generate, I was prompted to choose 50 colors “to train a color generator algorithm” personalized to me. I dove right in and picked the colors that stood out to me at a glance.

Choosing colors in Khroma

Image Source

As I picked the colors, the “likes to go” section counted how many colors I still had to choose. The color bar also started filling up with the ones I’d selected so far.

best ai for graphic design, colors left to go in Khroma

Image Source

After picking my 50 colors, I hit Start Training.

Start Training in Khroma

Image Source

Then, the results came in. The layout for the color pairings is beautiful, and I see a lot of potential in this tool.

ai tools for graphic design, Khroma color pairings layout

Image Source

Another interesting element of Khroma is that you can visualize your color pairings in different ways, including “Type” (the view above) and “Gradient” (the view below). You can also see how your color choices look as posters, images, and within broader color palettes.

Exploring further Khroma color pairings layouts

Image Source

Since Khroma helps you pair colors already in existence, I can’t see it being exploitative to creators or needing specific licenses for commercial use. But I can’t say that for certain, so do your due diligence.

What I like: When you click the information icon against each color pairing, Khroma provides you with the color codes. That will be such a time saver if you want to color match in another design tool.

ai for graphic design, exploring further Khroma color pairings with codes

Image Source

Best for: Individual designers and design teams looking to save time on color selection and pairing.

Pricing: Get started for free.

6. Looka

Looka is a platform specifically for logo and brand design. It uses artificial intelligence and machine learning to create designs based on your input.

I started my test by entering an example company name and clicking Get started. From then on, Looka took me through a series of steps to help me create a logo.

Adding a company name to Looka, ai tools for graphic design

Image Source

The first step was to pick my industry. As you can see, there is a range of sectors to choose from.

Picking an industry in Looka

Image Source

I was then prompted to select some logos I liked, followed by some colors.

Picking logo examples and colors in Looka, ai for graphic design

Image Source

The following steps were to add a company name (again, for some reason?) accompanied by a slogan and then to choose some symbol types.

An observation: I liked that Looka gave me notes about my company name and slogan choices as I inputted them. This could be handy advice for beginners. Plus, you can also pick your own symbols if you want to be more hands-on with the design.

ai for graphic design, picking symbol types in Looka

Image Source

After that, Looka generated a few different logos for me. While they were competent logos, they were too “out of the box” for me and lacked the creative flair needed for brand differentiation. That said, I didn’t go too deep into customizing the logo.

Logos generated by Looka, ai for graphic design

Image Source

This tool shines more in the presentation of the designs than in the designs themselves. For example, I like that Looka provides design mock-ups so you can see how your logo will look on a business card, website, social media, and more.

Examples of logos generated by Looka added to mock-ups

Image Source

I couldn’t find any specifics about how Looka trained its AI models, but they at least address the potential negative impact on human designers here:

Looka mission statement

Image Source

In terms of licensing and copyright, Looka says:

You may not use any of Looka’s End Products outside of the Site, whether for commercial or personal use, without paying all applicable and respective Fees in advance. This includes both digital and physical use of the End Products.”

What I like: Overall, the platform is intuitive and easy to use. I like that Looka doesn’t use templates; rather, it generates each design based on your specific input. There is also a wide range of font, layout, and color options.

Best for: New businesses without the budget to work with a designer. Individual designers and design teams working specifically in branding.

Pricing: Get started for free.

Looking to pair your designs with AI-powered text? Get started with HubSpot AI today.

The Bottom Line on AI Tools for Graphic Design

Let’s be honest: A tool is only as good as the person wielding it. So, if you don’t know much about graphic design concepts to begin with, it’s unlikely you’ll create a brand-differentiating end product. However, if you know your way around your colors, typography, alignment, visual hierarchy, balance, and the rest, AI can speed up your creative process.

Personally, I loved testing out Adobe Firefly. The end output exceeded that sterile “out of the box” template, which feels common with other tools. I also liked that you could create something painterly in style.

Plus, I love Adobe’s ethical approach to using AI. They are working with creatives to train their models responsibly and protecting product users against potential licensing and legal issues.

content templates

The post I Tested 6 AI Tools for Graphic Design, Here Are My Favorites appeared first on ProdSens.live.

]]>
https://prodsens.live/2024/05/29/i-tested-6-ai-tools-for-graphic-design-here-are-my-favorites/feed/ 0
How Four Brands Won Gen Z Through Memes, Authenticity, and Community-Building https://prodsens.live/2024/05/29/how-four-brands-won-gen-z-through-memes-authenticity-and-community-building/?utm_source=rss&utm_medium=rss&utm_campaign=how-four-brands-won-gen-z-through-memes-authenticity-and-community-building https://prodsens.live/2024/05/29/how-four-brands-won-gen-z-through-memes-authenticity-and-community-building/#respond Wed, 29 May 2024 12:20:14 +0000 https://prodsens.live/2024/05/29/how-four-brands-won-gen-z-through-memes-authenticity-and-community-building/ how-four-brands-won-gen-z-through-memes,-authenticity,-and-community-building

Building brand awareness isn’t just about making noise today — it’s about laying the groundwork for generating consistent…

The post How Four Brands Won Gen Z Through Memes, Authenticity, and Community-Building appeared first on ProdSens.live.

]]>
how-four-brands-won-gen-z-through-memes,-authenticity,-and-community-building

Building brand awareness isn’t just about making noise today — it’s about laying the groundwork for generating consistent demand tomorrow.

Also, by reaching a broader audience, your brand can target customers from various backgrounds with different behaviors.

Increased brand visibility means more eyes on your products or service, which translates into heightened interest and curiosity. By expanding this starting point, you’re casting a wider net, and scooping up more potential leads who might just turn into loyal customers.

Download Now: Free State of Marketing Report [Updated for 2024]

The Importance of Captivating Gen Z Audiences

This is the era of the tech-savvy and socially conscious Gen Z. They represent a burgeoning consumer demographic with significant purchasing power and a penchant for authenticity in brand messaging.

According to a study by Edelman, more than 70% of Gen Zers said they would stay loyal to and buy from brands that share their values. As such, winning over Gen Z consumers sets you up for success in the coming years. When you capture their loyalty, you put yourself in a great position to reap long-term benefits and secure a sustainable future for your brand.

Why You Need to Measure Brand Awareness

In today’s ever-changing (and highly competitive) markets, widespread familiarity with your brand will help keep your sales consistent. However, implementing marketing efforts without measuring brand awareness is like shooting arrows in the dark.

If you want to maximize the results of your brand campaigns, you must measure brand awareness. Using robust brand tracking solutions will help you understand exactly how successful your marketing campaigns have been with your target audience.

With the right metrics and regular reports, you’ll know exactly which parts of your lead funnels are doing well and which need improvement. This will help you save time, money, and effort, as you’ll know where to focus.

Brand awareness data also allows you to communicate better with stakeholders and partners. You can use this data when pitching for budgets or even when presenting to investors.

4 Brands That Did a Phenomenal Job of Wooing Gen Z Audiences

When discussing strategies, it’s often a good idea to learn from the very best. Here’s a look at how these Australian and American brands — across four different categories — went on to win countless Gen Z hearts with their marketing moves.

1. tbh Skincare

This Australian skincare brand was inspired by its co-founder’s struggles with acne. tbh skincare products help its customers fight acne and, in turn, increase their confidence. Naturally, it made sense for the brand to target the demographic that suffers from acne the most: Gen Z.

Acne can also lead to mental health issues such as severe depression and anxiety — something that co-founder Rachael Wilde knows all too well.

The brand crafted its marketing strategies and awareness programs with Gen Z as the primary focus. For instance, tbh is big on TikTok, mainly because its audience is active on the platform.

According to eMarketer, more than 44% of TikTok’s user base in the US is young adults and teens between the ages of 12 and 27. 

tbh Skincare chose TikTok as its primary marketing channel to reach out to and serve Gen Z. Tbh skincare tracks their brand with Tracksuit, have a look at their dashboard below — It clearly shows that its efforts paid off, with a huge increase in brand awareness by over 121K Australians in 12 months:

Brand awareness growth with 18-34-year-olds since April 2023: 5% / +121,000 Australians

In addition, tbh’s guerrilla marketing stunts were particularly memorable. In one instance, the co-founder dressed up as Margot Robbie and walked around Sydney while being followed by the Paparazzi. This was a great move as it capitalized on the immense popularity of the Barbie movie, especially in the target demographic.

Beyond that, tbh is quick on its feet when faced with unforeseen events. Case in point: When an influencer accidentally leaked tbh’s new product, the brand capitalized on the unexpected exposure by launching the product early and turning the situation into a major publicity boost.

2. Heaps Normal

Heaps Normal is a non-alcoholic beer brand that’s riding the tide of an increasing number of Gen Zs who are choosing to go alcohol-free, with products that taste just as good as the real thing.

They took a different approach from tbh Skincare. Their main focus is building communities in real life.

Gen Z is socially aware, health-conscious, and far less likely to consume alcohol than previous generations. In fact, 45% of Gen Zers who are of legal drinking age said that they’ve never consumed alcohol.

This is something that Heaps Normal is keenly aware of.

As Timothy Snape, Marketing Director at Heaps Normal, explains, “Gen Z are the leaders of the mindful drinking movement. They’re drinking less than any other generation in history. While this means that they’re naturally more open to non-alcoholic drinks, it also means that they haven’t grown up with beer in the same way as older generations, so there’s a challenge (that we’ve accepted) to bring those customers into the fold of a new form of beer appreciation that preferences flavor, taste, culture, and experience over alcohol.”

Heaps Normal’s unique marketing activities, built around the message of drinking responsibly, resonated with young audiences. By working with Tracksuit, it was able to verify this. Its brand awareness grew by over 290K people in the Gen Z age range since November 2023:

Brand awareness growth with 18-34 year-olds since November 2023: 10% / +290K Australians

Authenticity is also a major reason why Heaps Normal is successful among Gen Z audiences.

“We look at the broader power of Gen Z as the tastemakers of modern Australian culture,” says Tim. “As a brand focused on reimagining Australian drinking culture, Gen Z are powerful agents of change, and we’re seeing that reflected in them leading the trend towards more mindful drinking culture.”

He continues, “Gen Z have some of the most fragmented media consumption habits of any demographic segment. With access to more channels and content than any generation in history, it’s important to recognize that no one Gen Z human is the same. Rather than focusing on channels or platforms, we focus on the things that we know are important to them — music, culture, partying, authenticity, and purpose.”

3. Liquid Death

Liquid Death is a water brand that has transformed into a lifestyle brand. It started selling bottled water and has even released a heavy-metal-inspired make-up collection with Elf Cosmetics that has gone viral.

Its bizarre and outlandish advertising has been a particular hit with Gen Z audiences. Its entire brand personality is bold and loud, focusing on death and heavy metal. This helps it stand out among the generic content that Gen Z is flooded with.

Apart from its collaboration with Elf Cosmetics, its core product is something that the alcohol-averse Gen Z appreciates. Instead of reaching for beers and other alcoholic drinks, Gen Z can grab one of its cans of water at clubs, music festivals, and other social gatherings. Liquid Death is an excellent alternative for sober young adults who want to fit in.

Tracksuit tracks Liquid Death in the American market. The dashboard shows that Liquid Death’s brand awareness has increased by 12% in the Gen Z age ranges, thanks to its unique advertisements and branding:

Brand awareness growth with 18-34-year-olds since April 2023: 12% / 7.4 million Americans

4. Barbie

Image Source

Who hasn’t heard of the Barbie movie? Barbie has done a tremendous job at sparking widespread excitement and dominating social media buzz. 

Mattel, the brand that manufactures Barbie dolls, saw the success of the LEGO movie and decided to adopt LEGO’s strategy by creating a feature film that intertwines storytelling with brand legacy. The movie also weaves themes around women’s empowerment and diversity, which hit home among many Gen Z viewers.

As for its marketing initiatives, Barbie capitalized on social media by encouraging shareable memes, graphics, and audio to engage with younger, digitally-native audiences.

The result? The movie was a runaway hit. In fact, it was the biggest movie of 2023. Its success reinvigorated the toy brand and made it a talking point among a new audience — Gen Z.

Barbie’s brand awareness was already high among Millenials and Gen X, who have fond childhood memories with Barbie. The Barbie movie allowed Mattel to reach out to Gen Z while also revamping the doll as a symbol of female empowerment.

Brand awareness growth with 18-35-year-olds since May 2023: 8% / 3.2 million Americans

Embrace Authenticity to Win Over Gen Z

When it comes to growing brand awareness, what worked for previous generations may not work for Gen Z. Winning this generation’s loyalty calls for authentic engagement and value-driven marketing messages. Don’t be afraid to be creative and embrace a unique (but genuine) style.

Another pro tip? Continuously measure your most fundamental brand metrics like awareness, consideration, and preference. This is where a solution like Tracksuit comes into play. Tracksuit offers always-on brand tracking to help you analyze the impact of your brand activity and understand your current brand positioning among Gen Zers. That way, you can ensure that your marketing efforts are on point.

state-of-marketing-2024

The post How Four Brands Won Gen Z Through Memes, Authenticity, and Community-Building appeared first on ProdSens.live.

]]>
https://prodsens.live/2024/05/29/how-four-brands-won-gen-z-through-memes-authenticity-and-community-building/feed/ 0
Any STEM-themed gift or activity ideas for kids that aren’t books? https://prodsens.live/2023/12/11/any-stem-themed-gift-or-activity-ideas-for-kids-that-arent-books/?utm_source=rss&utm_medium=rss&utm_campaign=any-stem-themed-gift-or-activity-ideas-for-kids-that-arent-books https://prodsens.live/2023/12/11/any-stem-themed-gift-or-activity-ideas-for-kids-that-arent-books/#respond Mon, 11 Dec 2023 23:25:43 +0000 https://prodsens.live/2023/12/11/any-stem-themed-gift-or-activity-ideas-for-kids-that-arent-books/ any-stem-themed-gift-or-activity-ideas-for-kids-that-aren’t-books?

I welcome all your suggestions, ideally in the form of stocking stuffer sizes. 😀 But in seriousness any…

The post Any STEM-themed gift or activity ideas for kids that aren’t books? appeared first on ProdSens.live.

]]>
any-stem-themed-gift-or-activity-ideas-for-kids-that-aren’t-books?

I welcome all your suggestions, ideally in the form of stocking stuffer sizes. 😀

But in seriousness any simple activity ideas for toddlers would be wonderful as well – something we could incorporate alongside the standard reading, drawing, singing, etc.

Older kid stuff is also cool – always thinking about the future!

The post Any STEM-themed gift or activity ideas for kids that aren’t books? appeared first on ProdSens.live.

]]>
https://prodsens.live/2023/12/11/any-stem-themed-gift-or-activity-ideas-for-kids-that-arent-books/feed/ 0
Angular State Management: A Comparison of the Different Options Available https://prodsens.live/2023/09/12/angular-state-management-a-comparison-of-the-different-options-available/?utm_source=rss&utm_medium=rss&utm_campaign=angular-state-management-a-comparison-of-the-different-options-available https://prodsens.live/2023/09/12/angular-state-management-a-comparison-of-the-different-options-available/#respond Tue, 12 Sep 2023 08:25:41 +0000 https://prodsens.live/2023/09/12/angular-state-management-a-comparison-of-the-different-options-available/ angular-state-management:-a-comparison-of-the-different-options-available

Introduction Angular, a robust JavaScript framework for building web applications, requires effective state management to handle complex data…

The post Angular State Management: A Comparison of the Different Options Available appeared first on ProdSens.live.

]]>
angular-state-management:-a-comparison-of-the-different-options-available

Introduction

Angular, a robust JavaScript framework for building web applications, requires effective state management to handle complex data interactions. As applications grow in complexity, it becomes essential to manage and synchronize the application state efficiently. This article explores and compares various state management options available in Angular, using examples to illustrate their use cases.

Understanding State Management

Before delving into different state management options, let’s clarify why state management matters in Angular applications. State refers to the data and user interface (UI) conditions within an application. It can be categorized as follows:

  1. Local Component State: Specific to a single component, this includes data and UI-related information relevant only to that component.

  2. Global Application State: Shared and accessible across multiple components or the entire application, this state requires careful management.

Now, let’s examine the state management options for Angular and provide examples for each.

Local Component State

1. Component Inputs and Outputs

Example:

Suppose you have a parent component App and a child component ProductList. You want to pass a list of products from App to ProductList.


 [products]="productList">
// app.component.ts
export class AppComponent {
  productList: Product[] = [...]; // List of products
}
// product-list.component.ts
@Input() products: Product[];

2. ngModel

Example:

Consider a form in a component where you want to manage form-related state using ngModel.


 [(ngModel)]="product.name" />
// product-edit.component.ts
export class ProductEditComponent {
  product: Product = { name: 'Product Name' };
}

3. ViewChild and ContentChild

Example:

Suppose you want to access and manipulate the state of child components within a parent component.

// parent.component.ts
@ViewChild(ChildComponent) childComponent: ChildComponent;
// child.component.ts
export class ChildComponent {
  // Child component logic
}

Global Application State

1. Services

Example:

Imagine you need to share authentication status across multiple components.

// auth.service.ts
@Injectable({ providedIn: 'root' })
export class AuthService {
  isAuthenticated = false;
}
// app.component.ts
export class AppComponent {
  constructor(private authService: AuthService) {}

  login() {
    this.authService.isAuthenticated = true;
  }
}

2. RxJS and BehaviorSubject

Example:

Suppose you have a real-time chat application where you need to manage and display messages.

// chat.service.ts
@Injectable({ providedIn: 'root' })
export class ChatService {
  private messagesSubject = new BehaviorSubject<string[]>([]);
  messages$ = this.messagesSubject.asObservable();

  addMessage(message: string) {
    const currentMessages = this.messagesSubject.value;
    currentMessages.push(message);
    this.messagesSubject.next(currentMessages);
  }
}
// chat.component.ts
export class ChatComponent {
  messages: string[] = [];

  constructor(private chatService: ChatService) {
    this.chatService.messages$.subscribe((messages) => {
      this.messages = messages;
    });
  }

  sendMessage(message: string) {
    this.chatService.addMessage(message);
  }
}

3. NgRx Store

Example:

For managing a shopping cart in an e-commerce app, you can utilize NgRx Store.

// cart.actions.ts
import { createAction, props } from '@ngrx/store';

export const addToCart = createAction(
  '[Cart] Add Item',
  props<{ item: Product }>()
);
// cart.reducer.ts
import { createReducer, on } from '@ngrx/store';
import { addToCart } from './cart.actions';

export const initialState: Product[] = [];

const _cartReducer = createReducer(
  initialState,
  on(addToCart, (state, { item }) => [...state, item])
);

export function cartReducer(state, action) {
  return _cartReducer(state, action);
}

4. Akita

Example:

Suppose you want to manage the list of user notifications across your application.

// notification.store.ts
@Injectable({ providedIn: 'root' })
@StoreConfig({ name: 'notifications' })
export class NotificationStore extends EntityStore<NotificationState> {
  constructor() {
    super(initialState);
  }
}

const initialState: NotificationState = {
  notifications: [],
};

export interface NotificationState {
  notifications: Notification[];
}
// notification.service.ts
@Injectable({ providedIn: 'root' })
export class NotificationService {
  constructor(private notificationStore: NotificationStore) {}

  addNotification(notification: Notification) {
    this.notificationStore.add(notification);
  }
}

A Comparison of State Management Options

Let’s compare these state management options based on key criteria, using examples where applicable:

1. Complexity

  • Component Inputs and Outputs: Low complexity, suitable for simple scenarios.
  • ngModel: Low complexity, ideal for form-related state.
  • ViewChild and ContentChild: Moderate complexity, useful for interacting with child components.
  • Services: Moderate complexity, good for simple to moderately complex applications (e.g., authentication).
  • RxJS and BehaviorSubject: Moderate to high complexity, suitable for complex applications with reactive data (e.g., real-time chat).
  • NgRx Store: High complexity, best for large and complex applications with strict state management (e.g., shopping cart).
  • Akita: Moderate complexity, offers a balance between simplicity and power (e.g., user notifications).

2. Scalability

  • Component Inputs and Outputs: Limited scalability for sharing state beyond parent-child relationships.
  • ngModel: Limited scalability for form-related state.
  • ViewChild and ContentChild: Limited scalability for state management across components.
  • Services: Scalable for medium-sized applications (e.g., authentication).
  • RxJS and BehaviorSubject: Scalable for complex applications with a need for reactive state (e.g., real-time chat).
  • NgRx Store: Highly scalable for large and complex applications (e.g., shopping cart).
  • Akita: Scalable for applications of varying sizes (e.g., user notifications).

3. Developer Experience

  • Component Inputs and Outputs: Easy to grasp and use.
  • ngModel: Simple for form state but may not be suitable for complex state management.
  • ViewChild and ContentChild: Requires understanding of component hierarchies.
  • Services: Straightforward and widely used.
  • RxJS and BehaviorSubject: Requires a good understanding of reactive programming but offers powerful tools.
  • NgRx Store: Requires a deep understanding of NgRx concepts but provides strong structure.
  • Akita: Offers a balance between simplicity and power, making it developer-friendly.

4. Community and Ecosystem

  • Component Inputs and Outputs: Widely used in Angular, with ample community support.

ngModel: Part of the Angular core, well-supported.

ViewChild and ContentChild: Part of Angular, with community resources available.

  • Services: Widely adopted in Angular applications.
  • RxJS and BehaviorSubject: Popular in the Angular community, extensive resources available.
  • NgRx Store: Strong community and ecosystem, well-documented.
  • Akita: Growing community and ecosystem, with good documentation.

Conclusion

In Angular, effective state management is crucial for building robust and scalable applications. Your choice of state management option depends on factors like the complexity of your application, your familiarity with reactive programming, and your specific requirements. Whether you opt for simple component inputs and outputs, leverage services, or embrace libraries like NgRx or Akita, ensure that your choice aligns with your project’s needs and your team’s expertise. Remember that there’s no one-size-fits-all solution, and the right choice may vary from one project to another.

The post Angular State Management: A Comparison of the Different Options Available appeared first on ProdSens.live.

]]>
https://prodsens.live/2023/09/12/angular-state-management-a-comparison-of-the-different-options-available/feed/ 0
Sloan’s Inbox: Any advice on how to advocate for a11y improvements at my org? https://prodsens.live/2023/08/03/sloans-inbox-any-advice-on-how-to-advocate-for-a11y-improvements-at-my-org/?utm_source=rss&utm_medium=rss&utm_campaign=sloans-inbox-any-advice-on-how-to-advocate-for-a11y-improvements-at-my-org https://prodsens.live/2023/08/03/sloans-inbox-any-advice-on-how-to-advocate-for-a11y-improvements-at-my-org/#respond Thu, 03 Aug 2023 14:25:50 +0000 https://prodsens.live/2023/08/03/sloans-inbox-any-advice-on-how-to-advocate-for-a11y-improvements-at-my-org/ sloan’s-inbox:-any-advice-on-how-to-advocate-for-a11y-improvements-at-my-org?

Howdy! Sloan, DEV Moderator and resident mascot, back with another question sent in from a DEV community member.…

The post Sloan’s Inbox: Any advice on how to advocate for a11y improvements at my org? appeared first on ProdSens.live.

]]>
sloan’s-inbox:-any-advice-on-how-to-advocate-for-a11y-improvements-at-my-org?

Howdy! Sloan, DEV Moderator and resident mascot, back with another question sent in from a DEV community member. 🦥

For those unfamiliar with this series, this is another installment of Sloan’s Inbox — your go-to place for sharing advice and observations in response to folks who have sent in questions to be asked anonymously through me, Sloan. Whether it’s career development, office politics, industry trends, or improving technical skills, we cover all sorts of topics here. If you want to send in a question or talking point to be shared anonymously via Sloan, we’d love to help; just scroll down to the bottom of the post for details.

So, let’s see what we have for today…

Today’s question is:

I could use help convincing my organization be more proactive and mindful of accessibility. While I think folks within the org know it’s important and necessary, I really want us to be more action-oriented and do the work to improve our lighthouse score. There is always so much to do, and I feel like this work just isn’t prioritized often enough. Any advice on how I might advocate for this?

Share your thoughts and lets help a fellow DEV member out! Remember to keep kind and stay classy. 💚

Want to submit a question for discussion or ask for advice? Visit Sloan’s Inbox! You can choose to remain anonymous.

The post Sloan’s Inbox: Any advice on how to advocate for a11y improvements at my org? appeared first on ProdSens.live.

]]>
https://prodsens.live/2023/08/03/sloans-inbox-any-advice-on-how-to-advocate-for-a11y-improvements-at-my-org/feed/ 0
Understanding HTML tags. https://prodsens.live/2023/04/09/understanding-html-tags/?utm_source=rss&utm_medium=rss&utm_campaign=understanding-html-tags https://prodsens.live/2023/04/09/understanding-html-tags/#respond Sun, 09 Apr 2023 12:05:19 +0000 https://prodsens.live/2023/04/09/understanding-html-tags/ understanding-html-tags.

1. What are tags? Tags are the basic building blocks of HTML. HTML is a group different kind…

The post Understanding HTML tags. appeared first on ProdSens.live.

]]>
understanding-html-tags.

1. What are tags?
Tags are the basic building blocks of HTML. HTML is a group different kind of tags having their own unique properties. Every tag contains opening and closing tag. Tags are also opened and closed in a specific order. The most recent tag should be closed first than the outer one.
For example:
Image description
There are many number of tags, a few of are:

  • Heading tag.

  • Paragraph tag.

  • Image tag and many more.
    We will understand each tag in detail in next module.
    2. Let’s see few examples for better understanding:

Example-1;

My HTML webpage content.

OUTPUT:

Image description

Example-2;

My Blog post

OUTPUT:

Image description

The post Understanding HTML tags. appeared first on ProdSens.live.

]]>
https://prodsens.live/2023/04/09/understanding-html-tags/feed/ 0
Yet Another Newsletter LOL: Cache https://prodsens.live/2023/03/26/yet-another-newsletter-lol-cache/?utm_source=rss&utm_medium=rss&utm_campaign=yet-another-newsletter-lol-cache https://prodsens.live/2023/03/26/yet-another-newsletter-lol-cache/#respond Sun, 26 Mar 2023 16:03:01 +0000 https://prodsens.live/2023/03/26/yet-another-newsletter-lol-cache/ yet-another-newsletter-lol:-cache

Another week, another newsletter. Let’s get to it! Around the Web Jack Herrington has amazing YouTube content and…

The post Yet Another Newsletter LOL: Cache appeared first on ProdSens.live.

]]>
yet-another-newsletter-lol:-cache

Another week, another newsletter. Let’s get to it!

Around the Web

  • Jack Herrington has amazing YouTube content and the last two videos of his that I’ve seen, he talks about the Console Ninja VS Code extension. I installed it this week and have been enjoying it so far.
  • I came a across framework.dev this week. Lots of great resources in there for all the latest and greatest frameworks out there.

Fun Stuff

Words of Wisdom for the Week

Shameless Plugs

This week I got to hang with one of my favourite people, BekahHW. We discussed community & core skills.

Remember to like and subscribe! 😎

Jobs

I post jobs in the iamdeveloper.com community, plus all other kinds of content, as do others. If you’re looking for another friendly nook of the internet, head over to discord.iamdeveloper.com.

If you liked this newsletter, you can subscribe or if RSS is your jam, you can also subscribe via RSS.

The post Yet Another Newsletter LOL: Cache appeared first on ProdSens.live.

]]>
https://prodsens.live/2023/03/26/yet-another-newsletter-lol-cache/feed/ 0
Web Scraping With Puppeteer for Total Noobs: Part 3 https://prodsens.live/2023/03/02/web-scraping-with-puppeteer-for-total-noobs-part-3/?utm_source=rss&utm_medium=rss&utm_campaign=web-scraping-with-puppeteer-for-total-noobs-part-3 https://prodsens.live/2023/03/02/web-scraping-with-puppeteer-for-total-noobs-part-3/#respond Thu, 02 Mar 2023 23:05:32 +0000 https://prodsens.live/2023/03/02/web-scraping-with-puppeteer-for-total-noobs-part-3/ web-scraping-with-puppeteer-for-total-noobs:-part-3

Hello and welcome to the third and final post of this series. If you missed the previous, please…

The post Web Scraping With Puppeteer for Total Noobs: Part 3 appeared first on ProdSens.live.

]]>
web-scraping-with-puppeteer-for-total-noobs:-part-3

Hello and welcome to the third and final post of this series. If you missed the previous, please feel free to give them a quick read before proceeding. In this post I’ll show you how I set up a GitHub Action to automatically scrape some weather data on a schedule.

Before we begin I must tell you that I changed the source of the weather data due to some complications with weather.com. I’m sure it’s possible to get around the issues I was having, but for the sake of moving forward without the extra kerfuffle, I changed the source to one that I believe will not cause you any grief.

Note: This post assumes you’re comfortable with creating and updating a GitHub repository

Catching up

In the previous post I shared with you the scrape function that we used to scrape weather.com and console.log the output. I’ll go ahead and paste the updated scrape function, with the new source below:

async function scrape() {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();

  await page.goto(
    "https://www.weathertab.com/en/d/united-states/texas/austin/"
  );

  const weatherData = await page.evaluate(() =>
    Array.from(document.querySelectorAll("tr.fct_day"), (e) => ({
      dayOfMonth: e.querySelector("td > div.text-left > .fct-day-of-month")
        .innerText,
      dayName: e.querySelector("td > div.text-left > .fct-day-of-week")
        .innerText,
      weatherIcon: e.querySelector("td.text-center > .fct_daily_icon")
        .classList[1],
      weatherIconPercent: e
        .querySelector("td.text-center")
        .getElementsByTagName("div")[1].innerText,
      highTempRange: e.querySelector(
        "td.text-center > .F > div > .label-danger"
      ).innerText,
      lowTempRange: e
        .querySelector("td.text-center > .F")
        .getElementsByTagName("div")[1].innerText,
    }))
  );

  await browser.close();
  return weatherData;
}

As you can see, the source is now https://www.weathertab.com/en/d/united-states/texas/austin/, of course you can change this to whatever city you fancy. The logic is practically the same (as in we’re creating an array of data), however, since we switched sources, of course we have to target the elements in the page, which are without a doubt different than the weather.com page. Rather than a 10-day forecast, we’re now getting the entire current month’s forecast.

The data is a bit odd without some context. However, I’m sure you could develop some kind of map or object that would translate the data, such as the weather icon and weather icon percent to something meaningful.

Anyways, on with the show.

Preparing to write the data

In order for us to reach the end goal of writing this scraped data to a .json file in a GitHub repository, we’ll need to add some final touches to the scraper.js file. Admittedly, I’m no expert when it comes interacting with the file system using node.js (or any language for that matter). However, I can fanagle my way around. I’ll share with you what I’ve got, and if you’re more knowledgeable than me on the subject, please feel free to fill in the blanks.

We want to write our scraped data to a file in our repository that we’ll name weatherdata.json.

In order to do so, we’ll have this line at the end of our scraper.js file:

// execute and persist data
scrape().then((data) => {
  // persist data
  fs.writeFileSync(path.resolve(pathToData), JSON.stringify(data, null, 2));
});

the writeFileSync method is part of the node.js filesystem module. You can loearn more about this method here. Essentially what we’re doing with it is passing in the path to our file, weatherdata.json as the first parameter, and our scraped data as the second parameter. The writeFileSync method will create the file if it doesn’t exist, or, overwrite the file with the new data if it does exist.

As I mentioned, our first parameter is the path to the weatherdata.json file, which is passed in to the writeFileSync like so: path.resolve(pathToData).

Since we are using ES Modules, __filename and __dirname are not readily available. I shamelessly cut and pasted the code below (from this source) in order to create the pathToData variable.

const __filename = fileURLToPath(import.meta.url);

const __dirname = path.dirname(__filename);

const pathToData = path.join(__dirname, "weatherdata.json");

Having the __dirname available helps us find the path to our weatherdata.json file.

That wraps up all of the changes to the scraper.js file, minus the import statements at the top. I’ll share the whole file so that it may be easier to read.

import puppeteer from "puppeteer";
import fs from "fs";
import path from "path";
import { fileURLToPath } from "url";

const __filename = fileURLToPath(import.meta.url);

const __dirname = path.dirname(__filename);

const pathToData = path.join(__dirname, "weatherdata.json");

async function scrape() {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();

  await page.goto(
    "https://www.weathertab.com/en/d/united-states/texas/austin/"
  );

  const weatherData = await page.evaluate(() =>
    Array.from(document.querySelectorAll("tr.fct_day"), (e) => ({
      dayOfMonth: e.querySelector("td > div.text-left > .fct-day-of-month")
        .innerText,
      dayName: e.querySelector("td > div.text-left > .fct-day-of-week")
        .innerText,
      weatherIcon: e.querySelector("td.text-center > .fct_daily_icon")
        .classList[1],
      weatherIconPercent: e
        .querySelector("td.text-center")
        .getElementsByTagName("div")[1].innerText,
      highTempRange: e.querySelector(
        "td.text-center > .F > div > .label-danger"
      ).innerText,
      lowTempRange: e
        .querySelector("td.text-center > .F")
        .getElementsByTagName("div")[1].innerText,
    }))
  );

  await browser.close();
  return weatherData;
}

// execute and persist data
scrape().then((data) => {
  // persist data
  fs.writeFileSync(path.resolve(pathToData), JSON.stringify(data, null, 2));
});

Setting Up the GitHub Action

The goal of our GitHub Action is to scrape our weather source on a weekly basis and save the latest data in a .json file.

If you’ve never created an action, I’ll walk you through steps.

First, find the Actions tab in your GitHub repository.

Image description

Click to go in to the Actions page. Next, click the “New Workflow” button. This will open up a page of options, however, we just want to select the “Set up a workflow yourself” options.

Image description

This will drop you in to an editor. Feel free to name the yaml file whatever you’d like, or leave it as main.yml.

Go ahead and paste this in:

name: Resources
on:
  schedule:
    - cron: "0 13 * * 1"
  # workflow_dispatch:
permissions:
  contents: write
jobs:
  resources:
    name: Scrape
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3

      - uses: actions/setup-node@v3
        with:
          node-version: 16
      - run: npm ci

      - name: Fetch resources
        run: node ./scraper.js

      - name: Update resources
        uses: test-room-7/action-update-file@v1
        with:
          file-path: weatherdata.json
          commit-msg: Update resources
          github-token: ${{ secrets.GITHUB_TOKEN }}

After pasting it in, you can commit the new yml file by clicking the “Start Commit” button and entering the commit message, etc.

So, there are a couple of things to note about this action:

  1. The action is run on a schedule using the cron property. The value that I have in place says that the action will be triggered every Monday at 1300 (1PM).
  2. Make sure your JavaScript file with the scrape method is named scraper.js, or, if it’s not, update the action and replace scraper.js with your file name.
  3. We are using the test-room-7/action-update-file@v1 to assist us with updating the scraper.js file. Look them up on GitHub if you’d like to know more about that action.

If you’d rather run the action whenever you please, comment out or delete these two lines:

schedule:
    - cron: "0 13 * * 1"

and uncomment this line:

# workflow_dispatch:

Then you’ll see a button somewhere in the actions area that will allow you to run the job whenever you’d like. This works well for testing out actions.

You can see my repository here

Conclusion

I have learned a whole heck of a lot in this series. I stepped out of my comfort zone and was able to get something working. There were some hurdles along the way, but at the end of the day, it’s all about getting my hands dirty and figuring things out. I hope you learned something as well. If you found these posts interesting, boring, lacking, great, etc…please let me know. Thank you!

The post Web Scraping With Puppeteer for Total Noobs: Part 3 appeared first on ProdSens.live.

]]>
https://prodsens.live/2023/03/02/web-scraping-with-puppeteer-for-total-noobs-part-3/feed/ 0