<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ikechukwu Vincent</title>
    <description>The latest articles on DEV Community by Ikechukwu Vincent (@ikechukwu).</description>
    <link>https://dev.to/ikechukwu</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F458353%2Fcbe48d14-bb12-4c16-a0c9-b40f2c7414a1.jpg</url>
      <title>DEV Community: Ikechukwu Vincent</title>
      <link>https://dev.to/ikechukwu</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ikechukwu"/>
    <language>en</language>
    <item>
      <title>This turned out to be my best-performing technical article. Unfortunately I do not have the time to write more like it.</title>
      <dc:creator>Ikechukwu Vincent</dc:creator>
      <pubDate>Tue, 14 Jan 2025 09:21:25 +0000</pubDate>
      <link>https://dev.to/ikechukwu/this-turned-out-to-be-my-best-performing-technical-article-unfortunately-i-do-not-have-the-time-419a</link>
      <guid>https://dev.to/ikechukwu/this-turned-out-to-be-my-best-performing-technical-article-unfortunately-i-do-not-have-the-time-419a</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/ikechukwu" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F458353%2Fcbe48d14-bb12-4c16-a0c9-b40f2c7414a1.jpg" alt="ikechukwu"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/ikechukwu/linked-list-implementation-in-c-with-user-input-3fd0" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Linked List Implementation in C with User Input&lt;/h2&gt;
      &lt;h3&gt;Ikechukwu Vincent ・ Jul 31 '22&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#c&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#datastructure&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#algorithms&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#beginners&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>c</category>
      <category>linkedlist</category>
      <category>programming</category>
    </item>
    <item>
      <title>How Documentation Can Help Your Team Scale</title>
      <dc:creator>Ikechukwu Vincent</dc:creator>
      <pubDate>Wed, 23 Oct 2024 17:54:20 +0000</pubDate>
      <link>https://dev.to/ikechukwu/how-documentation-can-help-your-team-scale-3k8c</link>
      <guid>https://dev.to/ikechukwu/how-documentation-can-help-your-team-scale-3k8c</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiywxi59s3f6kghao31iv.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiywxi59s3f6kghao31iv.jpeg" alt="Image description" width="800" height="515"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Coming from a software engineering background, many developers understand the importance of scaling applications to handle increased traffic and functionality. However, fewer people are familiar with what it takes to scale a team effectively. Scaling a team from 2 to 10, or 10 to 30, in a short amount of time can introduce challenges that, if not handled properly, can lead to decreased productivity, and missed deadlines.&lt;/p&gt;

&lt;p&gt;The goal of expanding a team is to increase speed and output. In a well-structured, scalable team, this is exactly what happens—new members bring fresh perspectives and boost development velocity. But in many cases, adding more people without proper structures in place can have the opposite effect, slowing down development.&lt;/p&gt;

&lt;p&gt;I once joined a team of four—three engineers and one quality assurance (QA) professional—brought in to help a West African fintech company launch its product in just three months. Initially, I was confident that I could handle the task solo in about a month - at least the backend. But instead of speeding things up, our presence as an external team actually slowed things down. Aside scalability, another aspect of a team that many don’t pay enough attention to is resilience.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Resilience of a Scalable Team&lt;/strong&gt;&lt;br&gt;
One of the key aspects of scalability in a team is its resilience—the ability of the team to continue functioning smoothly even when certain individuals leave or become unavailable. If the departure of a few key team members can halt the entire project, it's a sign that the team isn't scalable. I've seen this play out many times when clients have to restart a project from scratch just because they replaced a developer.&lt;/p&gt;

&lt;p&gt;A truly scalable team should be able to withstand turnover and changes in personnel without losing momentum. This is where proper documentation becomes crucial.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why Did We Fail to Speed Up the Team?&lt;/strong&gt;&lt;br&gt;
Reflecting on my experience with the fintech startup, several factors contributed to the slowdown:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lack of Clear Documentation:&lt;/strong&gt; On my first day, I spent almost a full day trying to set up the Laravel project because migrations were failing. It turned out that many business logic decisions had been placed inside the migration files, which also included seeding logic. No one told me this and this is deviation from Laravel convention. Instead, I was handed a dump MySQL file. It was much later that I realized the dump file wasn’t just to populate tables, but to create them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Unclear Coding Standards:&lt;/strong&gt; When I finally managed to get my code ready for review, it took over 48 hours of back-and-forth to get it approved. At one point, I realized the team had a set of unwritten rules—do’s and don'ts—that they never shared with me. When I asked for their coding style guide, they gave me an outdated style guide, which only partially helped.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Duplicate Codebases:&lt;/strong&gt; Another hurdle was discovering that the application had two separate Laravel installations—one for the admin panel and another for public-facing features. Often, we had to build similar features on both sides. But if we wrote code for one side without realizing a similar feature already existed on the other, our code would be rejected for "unnecessary duplication." In some cases, entire days of work were thrown out because the same functionality already existed elsewhere, or because we hadn’t used an internal library that did the same thing. So why were we not informed?&lt;/p&gt;

&lt;p&gt;These issues wasted valuable time. Not only did we (the external team) spend days figuring out these quirks, but the in-house team also wasted time walking us through them during pull request (PR) reviews and calls. This time could have been spent writing new code and shipping features. In the end both in-house dev team, external team, business wonders of both sides were frustrated.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How Can Teams Avoid These Problems and Scale Faster?&lt;/strong&gt;&lt;br&gt;
A month or so later, I joined a small fintech startup to help build its first in-house infrastructure with a small team. From day one, I used careful reflection from past experience to set the environment ready for team scaling. I realized the key to avoiding these roadblocks and scaling a team effectively lies in creating a solid foundation of documentation. Here’s how you can ensure that adding new team members increases, rather than decreases, your team’s productivity:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Detailed Documentation:&lt;/strong&gt; Every engineering team should treat documentation as a core part of its culture, not an afterthought. Good documentation doesn’t just cover API endpoints but also includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Internal reusable libraries.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Engineering decisions and the rationale behind them.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A map of the codebase, with explanations for key sections.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Global helpers and libraries, with examples or demos of their usage.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;System and infrastructure architecture&lt;br&gt;
.&lt;br&gt;
This type of documentation allows new team members to understand the codebase quickly, reducing the need for constant one-on-one help from existing developers. This, in turn, frees up more time for your in-house team to focus on writing code and building new features instead of answering repetitive questions.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Coding Style Guides:&lt;/strong&gt;&lt;br&gt;
 A clear, up-to-date coding style guide is essential for ensuring consistency across the team. It helps ensure that everyone writes code in a similar way, reducing friction during code reviews. But a style guide is only the start—teams also need to document specific practices unique to their project, like why certain architectural decisions were made and when to use custom-built libraries.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Standardized Onboarding:&lt;/strong&gt;&lt;br&gt;
 As your team grows, onboarding becomes one of the most critical factors in determining whether new hires will integrate smoothly or become a drain on productivity. A standardized onboarding process, built on solid documentation, can help new team members get up to speed quickly. This includes documentation on the tools your team uses, the workflow you follow, and the architecture of the codebase.&lt;/p&gt;

&lt;p&gt;You can take onboarding a step further by pairing new hires with experienced team members for one-on-one guidance. This approach ensures that newcomers feel supported while reducing the amount of time senior engineers spend on repetitive onboarding tasks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Knowledge Sharing:&lt;/strong&gt; Teams should cultivate a culture of knowledge sharing. This can be done through:&lt;br&gt;
Internal wikis where developers document their findings and solutions.&lt;br&gt;
Regular "show-and-tell" sessions where team members demonstrate new tools or code patterns.&lt;br&gt;
Mentorship programs where experienced developers coach junior engineers.&lt;br&gt;
When knowledge is shared openly and widely, the team becomes more resilient. Replacing a developer doesn’t mean losing critical knowledge because it’s already documented and shared with the rest of the team.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br&gt;
Documentation is the key to scaling teams effectively. Without it, you risk creating bottlenecks, increasing frustration, and slowing down development—exactly the opposite of what you want when bringing new people onboard. With detailed documentation, a strong onboarding process, and a culture of knowledge sharing, teams can scale quickly and efficiently, ensuring that new hires contribute positively from day one instead of dragging the team down.&lt;br&gt;
So, if you want your team to scale successfully, don’t just focus on adding headcount—focus on building the right infrastructure through documentation. You'll be amazed at how much smoother everything runs!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;I am Ikechukwu Vincent a Full Stack Software Engineer proficient in PHP, Python, NodeJs, and React. I specialize in building B2B Multi-tenancy applications.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Connect with me on Socials&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Linkedin &lt;a href="https://www.linkedin.com/in/ikechukwu-vincent-002934176/" rel="noopener noreferrer"&gt;Vincent&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Facebook &lt;a href="https://web.facebook.com/ikechukwu.unegbu.14" rel="noopener noreferrer"&gt;Vincent&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Twitter &lt;a href="https://twitter.com/TheV_Exe" rel="noopener noreferrer"&gt;Vincent&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>softwareengineering</category>
      <category>leadership</category>
      <category>productivity</category>
    </item>
    <item>
      <title>How to Write Scalable and Testable Laravel Production App</title>
      <dc:creator>Ikechukwu Vincent</dc:creator>
      <pubDate>Sun, 07 Jan 2024 08:53:37 +0000</pubDate>
      <link>https://dev.to/ikechukwu/how-to-write-scalable-and-testable-laravel-production-app-5d78</link>
      <guid>https://dev.to/ikechukwu/how-to-write-scalable-and-testable-laravel-production-app-5d78</guid>
      <description>&lt;p&gt;I have been working full-time as a software engineer for a little over three years. During this period I have noticed a couple of things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Microservice is an overkill in most instances where folks use it.&lt;/li&gt;
&lt;li&gt;Most monolith code bases aren't scalable or maintainable.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;But what does it mean for your code to be scalable? It involves a couple of things, for this article I will give a simplified but important definition: scalability is the ability of your code to accommodate more requirements and features without breaking or boxing the developer into a corner.&lt;/p&gt;

&lt;p&gt;Insights I will share in this article can help you write more maintainable and scalable monolith code and even better micro-services if you must write one. While I will use Laravel as an example, this article applies to any MVC-based framework. Shall we?&lt;/p&gt;

&lt;p&gt;Writing scalable and maintainable code begins with understanding the limitations inherent in your framework's software architecture - and that would be MVC in the case of Laravel. &lt;br&gt;
To understand the limitations of MVC, read this article from Uber about their engineering challenges: &lt;a href="https://www.uber.com/en-NG/blog/new-rider-app-architecture/"&gt;https://www.uber.com/en-NG/blog/new-rider-app-architecture/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here is the catch:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;First, matured MVC architectures often face the struggles of massive view controllers. For instance, the RequestViewController, which started off as 300 lines of code, is over 3,000 lines today due to handling too many responsibilities: business logic, data manipulation, data verification, networking logic, routing logic, etc. It has become hard to read and modify.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This whole thing is about making your controller as lean as possible. What are the things that mess up your controller?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Validation logic&lt;/li&gt;
&lt;li&gt;Business logic&lt;/li&gt;
&lt;li&gt;Data manipulation and redirection&lt;/li&gt;
&lt;li&gt;API vs Web request handling&lt;/li&gt;
&lt;li&gt;Non-crude controllers&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Validation Logic
&lt;/h2&gt;

&lt;p&gt;For every form submission create a new Request class for form validation.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class StoreReviewRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     */
    public function authorize(): bool
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array&amp;lt;string, \Illuminate\Contracts\Validation\ValidationRule|array|string&amp;gt;
     */
    public function rules(): array
    {
        return [
            'body' =&amp;gt; 'required|string',
            'rating' =&amp;gt; 'required|string',
        ];
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use it as follows inside the reviews controller:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   public function store(StoreReviewRequest $request)
    {
        return DB::transaction(function () use ($request) {
            $this-&amp;gt;service-&amp;gt;storeUserRestaurantReview($request-&amp;gt;all());
            Session::flash('success', 'Thank you for leaving a review');

            return redirect()-&amp;gt;back();
        });
    }

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The magic above may not seem like a lot until the number of fields you want to validate increases to a certain number. Get more context &lt;a href="https://laracasts.com/discuss/channels/laravel/what-is-the-cleanest-way-to-split-validation-logic-into-multiple-files"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Business Logic
&lt;/h2&gt;

&lt;p&gt;You will write lots of logic and manipulate lots of data, for the interest of maintainability and scalability, you should do this in a service class - this is called Service Pattern. Create a folder named "Services", subfolder it if necessary, or even version it for API. Inside this folder, write your services. Now take a second look at the code above you will see where I imported the ReviewService class. Inside the class, you can write all kinds of methods you need for review.&lt;br&gt;
Most of your business logic should be in service classes.&lt;/p&gt;

&lt;p&gt;However, some that have to do with precisely data retrieval or storage can be in your models.&lt;/p&gt;

&lt;p&gt;By following this, you have small pieces of code that can be tested via unit tests and integration tests. That my friend is your code becoming maintainable.&lt;/p&gt;

&lt;p&gt;If necessary you could also use a repository pattern. Create a folder in the App folder called "Repository" and in a file named "BaseRepositoryInterface:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;?php
namespace App\Repository;

//use Illuminate\Datatbase\Eloquent\Collection;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Collection;

interface EloquentRepositoryInterface{
  public function all(array $column =['*'], array $relations=[]):Collection;

  public function findById(
    int $modelid,
    array $column = ['*'],
    array $relations = [],
    array $appends = []
  ):?Model;

  public function create(array $payload):?Model;

  public function update(int $modelid, array $payload):bool;

  // public function restoryById(int $modelid):bool;

  //public function attach()
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Inside the repository, create a folder called Eloquent, inside a file called BaseRepository:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;?php
namespace App\Repository\Eloquent;

use App\Repository\EloquentRepositoryInterface;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Database\Eloquent\Model;

class BaseRepository implements EloquentRepositoryInterface{

  protected $model;

  public function __construct(Model $model)
  {
    $this-&amp;gt;model = $model; 
  }

  public function all(array $column = ['*'], array $relations =[]):collection{
    return $this-&amp;gt;model-&amp;gt;with($relations)-&amp;gt;get($column);
  }

  public function findById(
    int $modelId,
    array $column = [],
    array $relations = [],
    array $append = []
  ):?Model{
    return $this-&amp;gt;model-&amp;gt;select($column)-&amp;gt;with($relations)-&amp;gt;findOrFail($modelId)-&amp;gt;append($append);
  }

  public function create(array $payload):?Model{
    $model = $this-&amp;gt;model-&amp;gt;create($payload);
    return $model-&amp;gt;fresh;
  }

  public function update(int $modelId, array $payload):bool{
    $model = $this-&amp;gt;findById($modelId);
    return $model-&amp;gt;update($payload);
  }

  // public function findById(

  // )

    public function attach(){

    }

}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now we have a MoviesRepository file inside Repository/Eloquent&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;?php 
namespace App\Repository\Eloquent;
//namespace App\Repository\Eloquent;

use App\Models\Movie;
use App\Repository\MovieRepositoryInterface;
use App\Repository\UserRepositoryInterface;

class MovieRepository extends BaseRepository implements MovieRepositoryInterface{
  protected $model;

  public function __construct(Movie $model){
    $this-&amp;gt;model = $model;
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can see it extends an interface inside the repository folder, here is the code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;?php 

namespace App\Repository;

interface MovieRepositoryInterface extends EloquentRepositoryInterface{};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now let us see how to use this code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Repository\MovieRepositoryInterface;
use Illuminate\Support\Facades\Auth;
use App\Repository\LocationRepositoryInterface;
use Illuminate\Support\Facades\Session;
class MoviesController extends Controller
{

    private $movieRepository;
    private $locationRepository;


    public function __construct(MovieRepositoryInterface $movieRepository){
        $this-&amp;gt;movieRepository = $movieRepository;
    }

    public function create(LocationRepositoryInterface $locationRepository){

        $this-&amp;gt;locationRepository = $locationRepository;
        $locations = $this-&amp;gt;locationRepository-&amp;gt;all();

        return view('pages.movies.create')-&amp;gt;with('locations', $locations);
    }

    public function store(Request $request){
        // I AM JUMPING FIELD VALIDATION AND PURIFICATION STEP HERE.
        $id = Auth()-&amp;gt;user()-&amp;gt;id;
        $payload = [
            'name'=&amp;gt;$request-&amp;gt;title, 
            'descript'=&amp;gt;$request-&amp;gt;description,
            'poster'=&amp;gt;$request-&amp;gt;poster,
            'showtime'=&amp;gt;$request-&amp;gt;showtime,
            'location'=&amp;gt;$request-&amp;gt;location,
            'userid'=&amp;gt;$id
        ];

        // var_dump($payload);die;
        $this-&amp;gt;movieRepository-&amp;gt;create($payload);
        Session::flash('success', "New movie Created");
        return redirect()-&amp;gt;route('new_movie');
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For the above to work, you must register Repository Provider as follows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use App\Repository\EloquentRepositoryInterface;
use App\Repository\Eloquent\BaseRepository;
use App\Repository\MovieRepositoryInterface;
use App\Repository\Eloquent\LocationRepository;
use App\Repository\Eloquent\MovieRepository;
use App\Repository\LocationRepositoryInterface;

class RepositoryServiceProvider extends ServiceProvider
{
    /**
     * Register services.
     *
     * @return void
     */
    public function register()
    {
        $this-&amp;gt;app-&amp;gt;bind(EloquentRepositoryInterface::class, BaseRepository::class);
        $this-&amp;gt;app-&amp;gt;bind(MovieRepositoryInterface::class, MovieRePository::class);
        $this-&amp;gt;app-&amp;gt;bind(LocationRepositoryInterface::class, LocationRepository::class);
    }

    /**
     * Bootstrap services.
     *
     * @return void
     */
    public function boot()
    {
        //
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now inside AppServiceProvider you must register repository service provider as follows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Schema;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        $this-&amp;gt;app-&amp;gt;register(RepositoryServiceProvider::class);
    }

    /**
     * Bootstrap any application services.
     *
     * @return void
     */
   public function boot(){
    // Fix for MySQL &amp;lt; 5.7.7 and MariaDB &amp;lt; 10.2.2
   Schema::defaultStringLength(191);
}
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Repository pattern introduces more abstraction into your code as such I think you should not use it unless it's totally necessary.&lt;/p&gt;

&lt;h2&gt;
  
  
  API vs Web Request Handling
&lt;/h2&gt;

&lt;p&gt;You can use the same controllers for web and API but I recommend you use different controllers for web and API and have them share the code in the service class. Now the service class needs to be versioned. This is keeping up with DRY.&lt;/p&gt;

&lt;h2&gt;
  
  
  Non-crude Controllers
&lt;/h2&gt;

&lt;p&gt;Ideally, your controllers should be pure crude - create, read, update, edit but some devs define other kinds of method in there. Any method that cannot fit into these should be in an invokable controller. Keep your controllers crude or invokable.&lt;/p&gt;

&lt;p&gt;Invokable controllers are controllers with one method __invokable() that executes when the controller is called.&lt;/p&gt;

&lt;h2&gt;
  
  
  Beyond Framework Limitations
&lt;/h2&gt;

&lt;p&gt;I mentioned earlier about understanding the limitations of the software architecture your framework of choice uses. Beyond that, you also need to understand the functionalities available in your framework so you don't have to reinvent the wheel while using the framework. For instance, laravel has many ways of authorization who sees and acts on a resource. A deep understanding of them like gates, policies, spatie permissions, and co will save tons of lines of unnecessary code and gnashing of teeth.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tests
&lt;/h2&gt;

&lt;p&gt;With the few points above you can proceed to add unit and integration tests to your code to keep track of things each time you make a change. &lt;/p&gt;

&lt;h2&gt;
  
  
  Database Integrity
&lt;/h2&gt;

&lt;p&gt;For things not to blow apart and also to avoid encountering funny edge case malfunctions in your application, I strictly recommend you enforce data integrity with military precision. First, use foreign keys in your relationships so it would be illegal to delete some resources. &lt;/p&gt;

&lt;p&gt;Use database transactions whenever you are writing to more than one table, this keeps your data consistent across tables.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;With the few points we have discussed in this article, your code will be very maintainable and scalable. It will be easy to modify existing features or add a new one without breaking things. This approach will make your monolith application incredibly maintainable and scalable. If you are building microservices, this approach will help to keep things a lot saner.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;I am Ikechukwu Vincent a Full Stack Software Engineer proficient in PHP, Python, NodeJs, and React. I specialize in building B2B Multi-tenancy applications.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Connect with me on Socials&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Linkedin &lt;a href="https://www.linkedin.com/in/ikechukwu-vincent-002934176/"&gt;Vincent&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Facebook &lt;a href="https://web.facebook.com/ikechukwu.unegbu.14"&gt;Vincent&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Twitter &lt;a href="https://twitter.com/TheV_Exe"&gt;Vincent&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>How to Escape Tutorial Hell</title>
      <dc:creator>Ikechukwu Vincent</dc:creator>
      <pubDate>Thu, 09 Mar 2023 02:31:46 +0000</pubDate>
      <link>https://dev.to/ikechukwu/how-to-escape-tutorial-hell-4pi2</link>
      <guid>https://dev.to/ikechukwu/how-to-escape-tutorial-hell-4pi2</guid>
      <description>&lt;p&gt;Tutorial hell refers to a state of being stuck in a cycle of constantly consuming programming tutorials without being able to apply the knowledge in the real world and build real apps. This can be frustrating for beginner developers who feel overwhelmed and unsure of how to take the next step in their learning journey. The repetitive nature of consuming tutorials can hinder one's ability to develop problem-solving skills, which are crucial for building practical applications. &lt;/p&gt;

&lt;p&gt;To escape tutorial hell, beginner developers should focus on building their projects. By taking these steps, developers can gain the experience and confidence they need to become proficient programmers who can tackle real-world problems. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Add Features to Tutorial Projects&lt;/strong&gt;: You have followed a tutorial to the end and probably built a project in one of these tutorials. If there are no projects built into the tutorials you have been following then you have been following the wrong tutorial and your journey will be long(pun). Now fold your sleeves and add new features to this project. Attempting to add a feature to a such project will force you to develop a deeper understanding of the project and sharpen your problem-solving skill as a developer. Always remember that Google is your friend.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Focus on building projects&lt;/strong&gt;: The next stage for you is to try to build something from scratch all by yourself. In my experience the challenge here is in "thinking big"- I mean thinking of the project as a whole. Stop. Break it down. Begin with building the authentication pages for registration, and log in - once that is working - you build the first or main authenticated page or dashboard. From there another feature. One feature at a time.&lt;br&gt;
After the course I took in HTML, CSS and SCSS nearly three years ago, I first rebuilt landing page of Binance before jumping onto the next course.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Start small&lt;/strong&gt;: Don't try to build complex projects right away. Start with small projects that are achievable and build up your skills gradually. After little less than a year of working full time as a developer and continuously learning, I am currently building my first SaaS, attempt to build a SaaS as my first project after my first training would have failed for good.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Practice consistently&lt;/strong&gt;: It's important to practice consistently, even if it's just for a short period each day. This will help you to build momentum and make progress over time. Even if you aren't building a full project, improve an existing one or build web components like mobile responsive navigation, beautiful popup modal, elegant slider, etc. A full web application is a collection of tiny components like this. Practicing with them individually will improve your skill and understanding of how parts of the whole project work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Join a community&lt;/strong&gt;: Join a community of like-minded developers who can offer support and guidance. This can be a great way to get feedback on your projects and stay motivated. Ask questions and get answers from people more experienced.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Google and Docs are Your Friends&lt;/strong&gt;: As you begin to do things by yourself, I want you to understand that "how to" implement a feature doesn't have to fall out of your head because you have taken a course. Feel free to google stuff up and consult the documentation. Consult the "damn" documentation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Take breaks&lt;/strong&gt;: Don't get burnt out by studying and coding for long hours. Take regular breaks and do something unrelated to coding.&lt;/p&gt;

&lt;p&gt;Remember, the key to escaping tutorial hell is to apply what you've learned and keep practicing. The next thing to do now is to apply what you have learned in this short article right away - don't jump onto the next article - that it's self is tutorial hell. Apply what you have just learned. With time and dedication, you can become a proficient developer who can build amazing things.&lt;/p&gt;

&lt;p&gt;Thank you for reading. Don't forget to drop a comment and share.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I am Vincent Ikechukwu, Full Stack Web Developer and Software Engineer.&lt;/strong&gt; Connect with me on social media via links below.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Linkedin &lt;a href="https://www.linkedin.com/in/ikechukwu-vincent-002934176/"&gt;Vincent&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Facebook &lt;a href="https://web.facebook.com/ikechukwu.unegbu.14"&gt;Vincent&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Twitter &lt;a href="https://twitter.com/TheV_Exe"&gt;Vincent&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>tutorial</category>
      <category>beginners</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>Beyond Engineering: Before You Build B2B SaaS</title>
      <dc:creator>Ikechukwu Vincent</dc:creator>
      <pubDate>Sun, 05 Mar 2023 01:03:14 +0000</pubDate>
      <link>https://dev.to/ikechukwu/beyond-engineering-before-you-build-b2b-saas-59j5</link>
      <guid>https://dev.to/ikechukwu/beyond-engineering-before-you-build-b2b-saas-59j5</guid>
      <description>&lt;p&gt;In today's world, software as a service (SaaS) has become increasingly popular as it offers businesses the opportunity to access bespoke software through the internet, without having to build and maintain it themselves. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A Bit of SaaS Trend&lt;/strong&gt;&lt;br&gt;
According to a report from Gartner, the global SaaS market is expected to reach $145.3 billion by the end of 2022, up from $102.8 billion in 2019. This growth is being driven by several factors, including the increasing demand for cloud-based solutions, the need for businesses to be more agile and flexible, and the rise of remote work.&lt;br&gt;
Another trend that we've seen is the increasing number of businesses that are turning to SaaS solutions to improve their operations and drive growth. SaaS solutions offer several benefits, including cost savings, scalability, and ease of use. With SaaS solutions, businesses can access powerful tools and resources without having to invest in expensive hardware or software. Additionally, SaaS solutions can be quickly and easily deployed, which allows businesses to respond to changing market conditions and customer needs more quickly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Let's Proceed&lt;/strong&gt;&lt;br&gt;
After resigning from my job last year, in the wake of this year, I found myself leading a small team to build B2B SaaS at a startup &lt;strong&gt;Viviane Health Lab&lt;/strong&gt; - a maker of healthcare software solutions. One thing became clear pretty fast - there is a difference between making fintech applications to facilitate borderless transactions or building novel social media platforms vs building industry-specific enterprise SaaS.&lt;/p&gt;

&lt;p&gt;In the first two, you can proceed as a team of designers and engineers and a hypothesis about the end users. In the latter, you need a little more than "Design and Engineering" might, garnished with assumptions - you need industry or domain experts in the team. &lt;/p&gt;

&lt;p&gt;There is a growing number of solo entrepreneurs online who pride themselves on having built lucrative one-man SaaS - as attractive as that may sound, it is something you should never do especially when you are not a professional in your target industry. I mean if you are a developer building an accounting solution, you should not go solo.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Come with me...&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One of the most critical aspects of building a successful SaaS product is having a team of experts that includes not only developers and designers but also industry or domain experts. Industry experts are professionals with domain knowledge, and they play a critical role in developing a SaaS product that is tailored to the needs of their specific industry.&lt;/p&gt;

&lt;p&gt;One of the primary advantages of having industry experts on the team is that they provide invaluable insights into the needs of the industry and the workflow of their colleagues. By understanding the specific needs of the industry, they can help the development team create a product that is not only useful but also intuitive and easy to use. &lt;/p&gt;

&lt;p&gt;For example, if you're building a SaaS application for the healthcare industry, having experts in the field can help ensure that the product complies with industry regulations, is HIPAA compliant, and meets the unique needs of healthcare professionals.&lt;/p&gt;

&lt;p&gt;Furthermore, industry experts can provide input on the features and functionalities of the product. They can help the development team prioritize features and ensure that the product has the necessary features to address the needs of the industry while being lean if necessary. This can save development time and resources, as the team can focus on building features that are essential to the industry, rather than developing features that may not be useful.&lt;/p&gt;

&lt;p&gt;Another benefit of having industry experts on the team is that they can help bridge the communication gap between the development team and the end users. Since industry experts have an understanding of the language, workflows, and processes used in their industry, they can help ensure that the product speaks the same language as the users. This can help prevent misunderstandings, and improve user adoption.&lt;/p&gt;

&lt;p&gt;Finally, industry experts can help with the product's testing and validation. They can test the product in real-world scenarios and provide feedback to the development team. This feedback can help the team identify any bugs or issues that should be addressed before the product gets released to the public.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Extra Edge&lt;/strong&gt;&lt;br&gt;
Beyond the above listed advantages of having industry experts in &lt;br&gt;
 your development team, they can also be an invaluable asset in marketing - this is because most of the professionals who can provide the needed development edge have been around in their industry for years and have built credibility. They can spread the word about the product and with that first set of users can be onboarded effortlessly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Slippery&lt;/strong&gt;&lt;br&gt;
One of the core obstacles standing in the way of developers and entrepreneurs wanting to build B2B SaaS is funding. In absence of funding compensation for the domain experts can be a difficult nut to crack especially in developing countries. It can be tempting to wave aside the need for these people in the team, however, I strongly advise against that. Equity is an option, however, the team cannot sustainably run on that for any reasonable length of time. These guys are worth their weight!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In Conclusion&lt;/strong&gt;&lt;br&gt;
...building a SaaS product that is industry-specific requires collaboration between UI designers, developers, and industry experts. Industry experts play a critical role in developing a product that meets the unique needs of their industry. They provide insights into the needs of the industry, help prioritize features, bridge the communication gap between the development team and end-users, and help with testing and validation. With the help of industry experts, SaaS products can be tailored to meet the needs of their specific industry, resulting in a more successful product.&lt;/p&gt;

&lt;p&gt;Thank you for reading. Don't forget to drop a comment and share.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I am Vincent Ikechukwu, Full Stack Web Developer and Software Engineer.&lt;/strong&gt; Connect with me on social media via links below.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Linkedin &lt;a href="https://www.linkedin.com/in/ikechukwu-vincent-002934176/" rel="noopener noreferrer"&gt;Vincent&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Facebook &lt;a href="https://web.facebook.com/ikechukwu.unegbu.14" rel="noopener noreferrer"&gt;Vincent&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Twitter &lt;a href="https://twitter.com/TheV_Exe" rel="noopener noreferrer"&gt;Vincent&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>welcome</category>
      <category>fullstack</category>
      <category>portfolio</category>
      <category>devjournal</category>
    </item>
    <item>
      <title>What is Flask Blueprints? Structuring Project with Blueprints</title>
      <dc:creator>Ikechukwu Vincent</dc:creator>
      <pubDate>Mon, 20 Feb 2023 15:13:02 +0000</pubDate>
      <link>https://dev.to/ikechukwu/what-is-flask-blueprints-structuring-project-with-blueprints-4md5</link>
      <guid>https://dev.to/ikechukwu/what-is-flask-blueprints-structuring-project-with-blueprints-4md5</guid>
      <description>&lt;p&gt;&lt;em&gt;NB: For this tutorial, for every change you make, you need to restart your flask server. Except if you set up your Flask server with env.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Flask is a popular Python lightweight web framework that allows developers to build web applications quickly and easily. One of the most powerful features of Flask is its blueprint functionality, which enables developers to organize their code into logical modules.&lt;/p&gt;

&lt;p&gt;After few years of working with Laravel, I learned Python and a bit of Flask at ALX Software Engineering training. While building my first real application with Flask, I quickly notice that my "route definition file" is growing too fast. It is littered with route definitions, route-associated functions and logic. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do I effectively break it down?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Then I remembered we were thought Blueprints. Well Blueprints! In this article, we'll take a closer look at Flask blueprints and show you how they can help you build scalable and maintainable applications.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What are Flask Blueprints?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Flask blueprints are a way to organize your Flask application into reusable and most importantly maintainable units. With blueprints, you can break your application into smaller, more manageable pieces, making it easier to maintain and scale.&lt;/p&gt;

&lt;p&gt;Each blueprint is a self-contained unit that can be registered with your Flask application. Blueprints define a set of views, templates, and static files that are associated with a specific URL prefix.&lt;br&gt;
Using blueprints, you can create a flexible and extensible application structure that allows you to add new features and functionality without disrupting the existing codebase.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Now Lets get our hands dirty&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Create your project folder, inside it create app.py file. Paste the code below inside this file. Afterwards, if you go to your terminal and enter "flask run" a flask server will be started for you.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;from flask import Flask

def create_app():
    app = Flask(__name__)

    from blueprints.authentication.authentication import authentication as auth_blueprint
    app.register_blueprint(auth_blueprint)

    from blueprints.profile.profile import profile as profile_blueprint
    app.register_blueprint(profile_blueprint)
    return app 


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Take a look on the code above and notice that two blueprints for authentication and profile has been registered already. Now lets see how to create these blueprints. &lt;/p&gt;

&lt;p&gt;In your current folder where you have your app.py, create a folder named blueprints. Inside blueprints, create another two folders named "profile" and "authentication" respectively. &lt;/p&gt;

&lt;p&gt;Great!&lt;/p&gt;

&lt;p&gt;Now inside "profile" and "authentication" folders, create the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a folder named static&lt;/li&gt;
&lt;li&gt;a folder named templates&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Inside "profile", create profile.py &lt;br&gt;
Inside "authentication" create authenication.py&lt;/p&gt;

&lt;p&gt;Now inside profile.py write the following code&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;from flask import Blueprint, render_template

profile = Blueprint('profile', __name__, template_folder='templates', static_folder="static", static_url_path='/blueprints/profile/static')

@profile.route('/profile')
def profile_page():
    return "profile pages"


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Notice the parameters of Blueprint method. We defined a few things in there most importantly, the template_folder telling Flask where to search for templates for this profile blueprint. That is a folder named templates within the profile folder. We also defined static_folder. Where to search for static files of any html file being rendered by this blueprint.&lt;/p&gt;

&lt;p&gt;Now for authentication blueprint. The code is as follows&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;from flask import Blueprint, render_template

authentication = Blueprint('auth', __name__, template_folder='templates', static_folder="static", static_url_path='/blueprints/profile/static')

@authentication.route('/auth')
def auth_page():
    return "auth pages"


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Static Files&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;At the beginning of this article, we said that each blueprint can be self contained having it's own static files and templates. Let us demonstrate that.&lt;/p&gt;

&lt;p&gt;Inside profile blueprint folder, you must have created a template folder. The template folder create a html file named profile.html &lt;br&gt;
Inside profile/static create a folder named css and inside create style.css. Here is html code to put into profile.html&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!doctype html&amp;gt;
&amp;lt;html lang="en"&amp;gt;
  &amp;lt;head&amp;gt;
    &amp;lt;meta charset="utf-8"&amp;gt;
    &amp;lt;meta name="viewport" content="width=device-width, initial-scale=1"&amp;gt;
    &amp;lt;title&amp;gt;Bootstrap demo&amp;lt;/title&amp;gt;
    &amp;lt;!-- &amp;lt;link rel="stylesheet" href="/blueprints/profile/static/css/styles.css"&amp;gt; --&amp;gt;
    &amp;lt;link rel="stylesheet" href="{{ url_for('profile.static', filename='css/styles.css') }}"&amp;gt;
    &amp;lt;link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous"&amp;gt;
  &amp;lt;/head&amp;gt;
  &amp;lt;body&amp;gt;
    &amp;lt;h1&amp;gt;Hello, world!&amp;lt;/h1&amp;gt;
    &amp;lt;script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-kenU1KFdBIe4zVF0s0G1M5b4hcpxyD9F7jL+jjXkk+Q2h455rYXK/7HAuoJl+0I4" crossorigin="anonymous"&amp;gt;&amp;lt;/script&amp;gt;
  &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pay special attention to the head of this html file where I included css files. I did it two different ways. Note That. That is how you can include all your static files. This works inline with definition of static_url in blueprint method.&lt;/p&gt;

&lt;p&gt;To run your /profile url on browser, you need to modify to route to render profile.html&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@profile.route('/profile')
def profile_page():
    return render_template('profile.html')


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To be sure your css file is properly included, go ahead and style the page with the css file. That should be fun.&lt;/p&gt;

&lt;p&gt;As you can see, Flask blueprint is truly self contained unit of flask application. All features of your app relating to profile can have there routes defined and handled by profile.py.&lt;br&gt;
Same goes with authentication. &lt;/p&gt;

&lt;p&gt;Thank you for reading. Dont forget to drop a comment and share.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I am Vincent Ikechukwu, Full Stack Web Developer and Software Engineer.&lt;/strong&gt; Connect with me on social media via links below.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Linkedin &lt;a href="https://www.linkedin.com/in/ikechukwu-vincent-002934176/" rel="noopener noreferrer"&gt;Vincent&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Facebook &lt;a href="https://web.facebook.com/ikechukwu.unegbu.14" rel="noopener noreferrer"&gt;Vincent&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Twitter &lt;a href="https://twitter.com/TheV_Exe" rel="noopener noreferrer"&gt;Vincent&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>seo</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Questions to Ask Yourself Before ALX Software Engineering</title>
      <dc:creator>Ikechukwu Vincent</dc:creator>
      <pubDate>Wed, 15 Feb 2023 19:24:37 +0000</pubDate>
      <link>https://dev.to/ikechukwu/questions-to-ask-yourself-before-alx-software-engineering-2a96</link>
      <guid>https://dev.to/ikechukwu/questions-to-ask-yourself-before-alx-software-engineering-2a96</guid>
      <description>&lt;p&gt;Hi there! &lt;/p&gt;

&lt;p&gt;Since I joined ALX Software Engineering training about 10 months ago, I have got tons of questions on social media about the program.&lt;/p&gt;

&lt;p&gt;There is a common problem with these questions, however. They are all about the program. The right questions should be about the person wanting to enroll. They should be asking more questions about themselves than about the ALX Software Engineering program.&lt;/p&gt;

&lt;p&gt;So of questions I get can be summed as follows: &lt;br&gt;
What is the program like?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is the program worth it?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;*Do they teach very well?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If I will be spending 70hrs per week, will they be paying me? No dude! They won't pay you!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are the wrong questions. A quick read-up about the program on the ALX website will tell you that it is an intensive program - demanding at least 70hrs per week. That says a lot.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/ikechukwu/rising-with-ai-low-no-code-as-a-developer-4mpl"&gt;Low and no code tools are rising more than ever&lt;/a&gt; before right now. AI is also rising. This is not a good time to learn software engineering, last of all enroll in intensive software engineering training as intensive as ALX Software Engineering without being very clear about what exactly you want to do with yourself.&lt;/p&gt;

&lt;p&gt;Let me answer the questions regardless: &lt;br&gt;
&lt;strong&gt;What is the program like?&lt;/strong&gt; They already described it on their website dude.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Will they pay me?&lt;/strong&gt; ALX got a training that was originally around $40k per year for two years, made it one year, and made it free. That is more than enough so they won't pay you.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is it worth it?&lt;/strong&gt; It is about what you can make out of the knowledge you gain at the end of the day. You define worth.&lt;br&gt;
Do they teach well? They don't teach actually. Your learning capacity is what will get you through. You will teach yourself.&lt;/p&gt;

&lt;p&gt;You need to find out what exactly you want to do with yourself first.&lt;/p&gt;

&lt;p&gt;If you are here because "tech is the new oil" and you want "instant money", it is more advisable to gain mastery of many low and no-code tools out there. You can do a lot today without being a software engineer or subjecting yourself to intensive training.&lt;/p&gt;

&lt;p&gt;About the right questions...&lt;/p&gt;

&lt;p&gt;Before you emback on 70hrs per week drill into Software Engineering, ask yourself these: &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do I want to be involved in building things that require deep knowledge of the fundamentals of computing?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What role do I want to play?&lt;/strong&gt; Engineer? Principal engineer?&lt;/p&gt;

&lt;p&gt;If the answer is YES or positive for all, then you are an ALX Software Engineering candidate. I wanted to build intelligent SaaS for healthcare and I was also interested in hardware virtualization - I mean creating software to mimic hardware and eliminate the need for the hardware itself. I started the first one while still on ALX. &lt;/p&gt;

&lt;p&gt;You are a candidate but don't rush yet!&lt;/p&gt;

&lt;p&gt;The next question is:&lt;/p&gt;

&lt;p&gt;If I have to dedicate 70hrs plus per week to learning, how the actual "eff" do I pay my bills? &lt;/p&gt;

&lt;p&gt;ALX Software Engineering training is not something you can pull off using your leisure time at night while working full time during the day. Especially, most especially if you are an absolute beginner with zero coding experience. That won't work.&lt;/p&gt;

&lt;p&gt;If you have no plan of being involved in building something that requires fundamental knowledge of computing in near future, then ALX may not be your best bet. &lt;/p&gt;

&lt;p&gt;If you have such plans but you cannot handle your bills while dedicating most of your time to ALX software engineering training, then you need to consider alternative routes to gaining the skills you need - the good news is that there are many alternative routes.&lt;/p&gt;

&lt;p&gt;You can look at the curriculum and buy courses for topics there on a platform like Udemy where the courses are pre-recorded enabling you to learn absolutely on your own pace.&lt;/p&gt;

&lt;p&gt;Whatever part you chose at the end of the day, I wish you the very best. If you chose ALX Software Engineering after a careful evaluation of yourself, then I have one more article for you about &lt;a href="https://dev.to/ikechukwu/a-to-z-of-how-to-prepare-for-alx-software-engineering-training-and-ace-it-4b1d"&gt;how to prepare and ace it&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I am Vincent Ikechukwu, Full Stack Web Developer and Software Engineer.&lt;/strong&gt; Connect with me on social media via links below.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Linkedin &lt;a href="https://www.linkedin.com/in/ikechukwu-vincent-002934176/" rel="noopener noreferrer"&gt;Vincent&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Facebook &lt;a href="https://web.facebook.com/ikechukwu.unegbu.14" rel="noopener noreferrer"&gt;Vincent&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Twitter &lt;a href="https://twitter.com/TheV_Exe" rel="noopener noreferrer"&gt;Vincent&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>How to Login Users With Phone Number or Username in Laravel</title>
      <dc:creator>Ikechukwu Vincent</dc:creator>
      <pubDate>Fri, 10 Feb 2023 09:55:10 +0000</pubDate>
      <link>https://dev.to/ikechukwu/how-to-login-with-phone-number-or-username-in-laravel-278m</link>
      <guid>https://dev.to/ikechukwu/how-to-login-with-phone-number-or-username-in-laravel-278m</guid>
      <description>&lt;p&gt;Welcome to the world of Laravel, a popular PHP framework for web application development. In this article, we will be discussing the process of logging in with either a phone number or username in Laravel. Laravel implemented email login out of the box, however, developers tend to struggle when there is a need to log in with any other user bio data like username or phone number&lt;/p&gt;

&lt;p&gt;As with everything in programming, there are many ways to do it. However, there is a defined laravel way to do it - which is in fact best practice and more secure.&lt;/p&gt;

&lt;p&gt;Before we proceed, I have a word for you as a laravel developer or developer working with laravel, make the doc your best friend.&lt;/p&gt;

&lt;p&gt;Lets begin!&lt;/p&gt;

&lt;p&gt;We begin by altering user table migration file to add the bio data of interest. This bio data(phone or username) will have to be unique for the table - no two users in same table can have same phone or username.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;php artisan make:migration add_cols_to_users_table
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now let us add the table columns to the file&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$table-&amp;gt;string('phone')-&amp;gt;unique();
$table-&amp;gt;string('username')-&amp;gt;unique();

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;NB: In your registration page, these fields are must for users fill them in. And they must be unique to the table.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In laravel default login blade page, email input field have the name value of email. Change it to anything you want, I normally use "identifier".&lt;/p&gt;

&lt;p&gt;Now let us proceed to the controller method that handles user login.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   if (Auth::guard('web')-&amp;gt;attempt(['email' =&amp;gt; $request-&amp;gt;identifier, 'password' =&amp;gt; $request-&amp;gt;password])|| 
        Auth::guard('web')-&amp;gt;attempt(['phone' =&amp;gt; $request-&amp;gt;identifier, 'password' =&amp;gt; $request-&amp;gt;password])) {
            // Authentication was successful...
            // Auth::guard('web')-&amp;gt;login($user);
            return redirect()-&amp;gt;intended(RouteServiceProvider::HOME);
        }else{
            return redirect()-&amp;gt;route('login')-&amp;gt;with('fail','Incorrect credentials');
        }


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That will be all, now navigate to your login page, and login either with email or phone number.&lt;/p&gt;

&lt;p&gt;If you would like to add username to the authentication parameters, all you need to is to add one more "Or" to the if statement of the login method. Just the way I did it for phone.&lt;/p&gt;

&lt;p&gt;To gain deep understanding how this work behind the scene, read more about &lt;a href="https://laravel.com/docs/9.x/authentication#authenticating-users" rel="noopener noreferrer"&gt;Laravel Authentication Auth Facade&lt;/a&gt;&lt;br&gt;
and also about authentication guards in laravel.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I am Vincent Ikechukwu, Full Stack Web Developer and Software Engineer.&lt;/strong&gt; Connect with me on social media via links below.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Linkedin &lt;a href="https://www.linkedin.com/in/ikechukwu-vincent-002934176/" rel="noopener noreferrer"&gt;Vincent&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Facebook &lt;a href="https://web.facebook.com/ikechukwu.unegbu.14" rel="noopener noreferrer"&gt;Vincent&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Twitter &lt;a href="https://twitter.com/TheV_Exe" rel="noopener noreferrer"&gt;Vincent&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;Github &lt;a href="https://github.com/Ikechukwu-Unegbu/" rel="noopener noreferrer"&gt;Vincent&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you run into trouble leave a comment or say hi on my social media.&lt;/p&gt;

</description>
      <category>announcement</category>
      <category>devto</category>
      <category>offers</category>
      <category>crypto</category>
    </item>
    <item>
      <title>Laravel Multi Table Authentication</title>
      <dc:creator>Ikechukwu Vincent</dc:creator>
      <pubDate>Tue, 07 Feb 2023 10:06:48 +0000</pubDate>
      <link>https://dev.to/ikechukwu/laravel-multi-table-authentication-49na</link>
      <guid>https://dev.to/ikechukwu/laravel-multi-table-authentication-49na</guid>
      <description>&lt;p&gt;Authentication is an essential component of any web application, and Laravel makes it easy to implement with its built-in authentication features powered by single user table. However what if you have multiple user types, each with its own table in the database? In this scenario, you need to implement multiple table authentication to ensure that the correct user is authenticated and given the right access to the application. &lt;/p&gt;

&lt;p&gt;In this article, I will walk you through the steps of implementing multiple table authentication in Laravel, so you can secure your application and give your users the best experience possible. Get ready to dive into the world of Laravel multiple table authentication!&lt;/p&gt;

&lt;p&gt;Shall we? Let's go. &lt;/p&gt;

&lt;p&gt;I am starting with assumption that you know how to install a fresh laravel application and you have one installed already. That said, let us proceed.&lt;/p&gt;

&lt;p&gt;Laravel comes with default users table, lets assume this is the table for default users of your application. And you want another table for admin users. &lt;/p&gt;

&lt;h3&gt;
  
  
  Model(s)
&lt;/h3&gt;

&lt;p&gt;First we create model for the new class of users in this cas Admins. In your case it could be teachers and students.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;php artisan make:model Admin/Admin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now you have created the Admin model, go in side it and replicate the following code. The Notifiable trait makes it possible to use laravel default notification on these model.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;

class Admin extends Authenticatable
{
    use HasFactory, Notifiable;
    protected $guard = 'admin';
}    
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Configurations
&lt;/h3&gt;

&lt;p&gt;Laravel have config folder that houses all config files. Inside this file, open auth.php file and paste the following code where we create authentication rules for admin.&lt;/p&gt;

&lt;p&gt;In auth.php config&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;'defaults' =&amp;gt; [
        'guard' =&amp;gt; 'web',
        'passwords' =&amp;gt; 'users',
    ],
 'admin'=&amp;gt;[
        'driver'=&amp;gt;'eloquent',
        'model'=&amp;gt;App\Models\Admin\Admin::class,
     ],

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  'guards' =&amp;gt; [
        'web' =&amp;gt; [
            'driver' =&amp;gt; 'session',
            'provider' =&amp;gt; 'users',
        ],

        'api' =&amp;gt; [
            'driver' =&amp;gt; 'token',
            'provider' =&amp;gt; 'users',
            'hash' =&amp;gt; false,
        ],
        'admin'=&amp;gt;[
           'driver'=&amp;gt;'session',
           'provider'=&amp;gt;'admins',
        ],
    ],

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    'providers' =&amp;gt; [
        'users' =&amp;gt; [
            'driver' =&amp;gt; 'eloquent',
            'model' =&amp;gt; App\Models\User::class,
        ],

        'admins'=&amp;gt;[
            'driver'=&amp;gt;'eloquent',
            'model'=&amp;gt;App\Models\Admin\Admin::class,
         ],
    ],
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    'passwords' =&amp;gt; [
        'users' =&amp;gt; [
            'provider' =&amp;gt; 'users',
            'table' =&amp;gt; 'password_resets',
            'expire' =&amp;gt; 60,
            'throttle' =&amp;gt; 60,
        ],
        'admins'=&amp;gt;[
            'driver'=&amp;gt;'eloquent',
            'model'=&amp;gt;App\Models\Admin\Admin::class,
        ],
    ],
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Middleware
&lt;/h3&gt;

&lt;p&gt;Now navigate to middlware folder and open the Authentication.php file. This is the file that redirect users who are not authenticated when they try accessing guarded pages. Notice that I commented out the default code in the file.&lt;/p&gt;

&lt;p&gt;Middelware Authenticate.php&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  // foreach ($guards as $guard) {
        //     if (Auth::guard($guard)-&amp;gt;check()) {
        //         return redirect(RouteServiceProvider::HOME);
        //     }
        // }


        foreach ($guards as $guard) {
            if (Auth::guard($guard)-&amp;gt;check()) {

                if($guard === 'admin'){
                    return redirect()-&amp;gt;route('admin.home');
                }
                return redirect()-&amp;gt;route('user.home');
                // return redirect(RouteServiceProvider::HOME);
            }
        }
    if (! $request-&amp;gt;expectsJson()) {
            if($request-&amp;gt;routeIs('admin.*')){
                return route('admin.login');
            }
            return route('login');
        }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In same middleware folder, open the following file. It is the middleware responsible for redirecting authenticated users based on the guard used in their authentication.&lt;/p&gt;

&lt;p&gt;In RedirectIfAuthenticated.php&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  // foreach ($guards as $guard) {
        //     if (Auth::guard($guard)-&amp;gt;check()) {
        //         return redirect(RouteServiceProvider::HOME);
        //     }
        // }


        foreach ($guards as $guard) {
            if (Auth::guard($guard)-&amp;gt;check()) {

                if($guard === 'admin'){
                    return redirect()-&amp;gt;route('admin.home');
                }
                return redirect()-&amp;gt;route('user.home');
                // return redirect(RouteServiceProvider::HOME);
            }
        }

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Admin auth controller
&lt;/h3&gt;

&lt;p&gt;Here we shall create a controller to handle authentication for this category of users.&lt;/p&gt;

&lt;p&gt;We begin by creating a controller to handle admin login.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;php artisan make:controller Auth/AdminAuthController
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Inside the controller&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public function __construct()
{
     Auth::setDefaultDriver('admin');
     config(['auth.defaults.passwords' =&amp;gt; 'admins']); 
}

public function login()
{
     return view('admin_auth.adminlogin');
}

   public function logoutAdmin(Request $request)
    {
        Auth::guard('admin')-&amp;gt;logout();
        $request-&amp;gt;session()-&amp;gt;invalidate();
        $request-&amp;gt;session()-&amp;gt;regenerateToken();
        return redirect('/');
    }

public function store(Request $request)
{
     $request-&amp;gt;validate([
         'email'=&amp;gt;'required|string',
         'password'=&amp;gt;'required|min:5|max:30'
      ]);


    if (Auth::guard('admin')-&amp;gt;attempt(['email' =&amp;gt; $request- 
    &amp;gt;identifier, 'password' =&amp;gt; $request-&amp;gt;password])|| 
     Auth::guard('admin')-&amp;gt;attempt(['username' =&amp;gt; $request&amp;gt;identifier, 'password' =&amp;gt; $request-&amp;gt;password])) {
            // Authentication was successful...
            return redirect()-&amp;gt;route('panel');
     }
   else{
       return redirect()-&amp;gt;route('admin.login')- 
         &amp;gt;with('fail','Incorrect credentials');
     }
    }

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Routes
&lt;/h3&gt;

&lt;p&gt;Now let use create authentication logic for this set of users(admins).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Route::get('/admin/login', [AdminAuthController::class, 'login'])-&amp;gt;name('admin.login');
Route::get('/admin/login', [AdminAuthController::class, 'store'])-&amp;gt;name('admin.login.store');
Route::post('/admin/logout', [AdminAuthController::class, 'logoutAdmin'])-&amp;gt;name('admin.logout');

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pay attention to this part. You will need a route more leading to your dashboard or any other protected pages. &lt;strong&gt;Below is exampme of such route. Notice the middleware usage auth:admin. Very important.&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Route::get('/panel', [AdminPagesController::class, 'panel_home'])-&amp;gt;name('panel')-&amp;gt;middleware('auth:admin');
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Login html
&lt;/h3&gt;

&lt;p&gt;At this point, let us create blade file or html file for login admin login page. resources\views\admin_auth.blade.php &lt;br&gt;
Take note of where we are submitting this form to.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!doctype html&amp;gt;
&amp;lt;html lang="en"&amp;gt;
  &amp;lt;head&amp;gt;
    &amp;lt;meta charset="utf-8"&amp;gt;
    &amp;lt;meta name="viewport" content="width=device-width, initial-scale=1"&amp;gt;
    &amp;lt;title&amp;gt;Bootstrap demo&amp;lt;/title&amp;gt;
    &amp;lt;link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous"&amp;gt;
  &amp;lt;/head&amp;gt;
  &amp;lt;body&amp;gt;
    &amp;lt;!-- &amp;lt;h1&amp;gt;Hello, world!&amp;lt;/h1&amp;gt; --&amp;gt;
    &amp;lt;main class="container mt-5"&amp;gt;
    &amp;lt;form method="POST" action="{{route('admin.login.store')}}"&amp;gt;
        @csrf 
        &amp;lt;div class="form-group"&amp;gt;
            &amp;lt;h3 class="text-center"&amp;gt;Admin Login&amp;lt;/h3&amp;gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;div class="mb-3"&amp;gt;
            &amp;lt;label for="exampleInputEmail1" class="form-label"&amp;gt;Email or Username&amp;lt;/label&amp;gt;
            &amp;lt;input type="text" class="form-control" name="identifier" id="exampleInputEmail1" aria-describedby="emailHelp"&amp;gt;
            &amp;lt;div id="emailHelp" class="form-text"&amp;gt;We'll never share your email with anyone else.&amp;lt;/div&amp;gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;div class="mb-3"&amp;gt;
            &amp;lt;label for="exampleInputPassword1" class="form-label"&amp;gt;Password&amp;lt;/label&amp;gt;
            &amp;lt;input type="password" name="password" class="form-control" id="exampleInputPassword1"&amp;gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;div class="mb-3 form-check"&amp;gt;
            &amp;lt;input type="checkbox" name="remember" class="form-check-input" id="exampleCheck1"&amp;gt;
            &amp;lt;label class="form-check-label" for="exampleCheck1"&amp;gt;Check me out&amp;lt;/label&amp;gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;button type="submit" style="float:right;" class="btn btn-primary"&amp;gt;Submit&amp;lt;/button&amp;gt;
    &amp;lt;/form&amp;gt;
    &amp;lt;/main&amp;gt;
    &amp;lt;script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-kenU1KFdBIe4zVF0s0G1M5b4hcpxyD9F7jL+jjXkk+Q2h455rYXK/7HAuoJl+0I4" crossorigin="anonymous"&amp;gt;&amp;lt;/script&amp;gt;
  &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Migration
&lt;/h3&gt;

&lt;p&gt;Now let us create table or migration for this new users - admins. Run the command&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;php artisan make:migration create_admins_table 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Inside the migration file, copy and paste the code below&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;     $table-&amp;gt;string('name');
     $table-&amp;gt;string('username')-&amp;gt;nullable();
     $table-&amp;gt;string('email')-&amp;gt;unique();
     $table-&amp;gt;timestamp('email_verified_at')-&amp;gt;nullable();
     $table-&amp;gt;string('password');
     // $table-&amp;gt;enum('admin_typ', ['admin'])-&amp;gt;nullable();
     $table-&amp;gt;rememberToken(); 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Factory and Seeder
&lt;/h3&gt;

&lt;p&gt;Let us now quickly populate the database. We begin by making a model factory for our admin model and also a seeder file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;php artisan make:factory Admin/AdminFactory    
php artisan make:seeder AdminSeeder
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Inside the factory Definition method&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  return [
            'name' =&amp;gt; fake()-&amp;gt;name(),
            'username'=&amp;gt;fake()-&amp;gt;userName(),
            'email' =&amp;gt; fake()-&amp;gt;unique()-&amp;gt;safeEmail(),
            'email_verified_at' =&amp;gt; now(),
            'password'=&amp;gt;'$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
            'remember_token' =&amp;gt; Str::random(10),
        ];
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Inside the seeder file, in the run method&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    \App\Models\Admin\Admin::factory(5)-&amp;gt;create();

        \App\Models\Admin\Admin::factory()-&amp;gt;create([
            'name' =&amp;gt; 'Test Admin',
            'username'=&amp;gt;'admin',
            'email' =&amp;gt; 'admin@admin.com',
        ]);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next run the seeder command to populate your database.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;php artisan db:seed --class=AdminSeeder
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Remember to create html blade for your protected page.&lt;/p&gt;

&lt;p&gt;So that is it. Start your laravel application and try logging in on your admin login page.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I am Vincent Ikechukwu, Full Stack Web Developer and Software Engineer.&lt;/strong&gt; Connect with me on social media via links below.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Linkedin &lt;a href="https://www.linkedin.com/in/ikechukwu-vincent-002934176/"&gt;Vincent&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Facebook &lt;a href="https://web.facebook.com/ikechukwu.unegbu.14"&gt;Vincent&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Twitter &lt;a href="https://twitter.com/TheV_Exe"&gt;Vincent&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;Github &lt;a href="https://github.com/Ikechukwu-Unegbu/"&gt;Vincent&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you run into trouble leave a comment or say hi on my social media.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>laravel</category>
      <category>authentication</category>
      <category>php</category>
    </item>
    <item>
      <title>A to Z of How to Prepare for ALX Software Engineering Training and Ace It</title>
      <dc:creator>Ikechukwu Vincent</dc:creator>
      <pubDate>Sat, 17 Dec 2022 11:26:48 +0000</pubDate>
      <link>https://dev.to/ikechukwu/a-to-z-of-how-to-prepare-for-alx-software-engineering-training-and-ace-it-4b1d</link>
      <guid>https://dev.to/ikechukwu/a-to-z-of-how-to-prepare-for-alx-software-engineering-training-and-ace-it-4b1d</guid>
      <description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;Disclaimer: This is personal opinion. Post not sponsored by any of the companies mentioned.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If you are here, I believe you understood what ALX Software Engineering Training is about. It is one of the finest SE on planet earth, currently available for free to people of African extraction.&lt;/p&gt;

&lt;p&gt;The Software Engineering training is the most expensive and the most challenging of all ALX programs demanding that applicants be willing to spend at least 70hrs per week to the training for 12 months or more.&lt;/p&gt;

&lt;p&gt;Ideally, I like to get straight to the point when I write, however I beg to take an exception today. Before I proceed to how you should prepare to ace the training, let us take look at what must be involved in a good software engineering training. Here are some of them key qualities to expect from a good software engineering program:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Comprehensive curriculum:&lt;/strong&gt; A great software engineering training program should cover all the key concepts and skills needed to become a proficient software engineer. This includes topics like algorithms and data structures, software design and architecture, testing and debugging, and software development processes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Practical experience:&lt;/strong&gt; A great software engineering training program should provide hands-on experience through projects and exercises. ALX SE program is big on exercise. This allows students to apply what they have learned and build real-world experience. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Professional development:&lt;/strong&gt; A great software engineering training program should also focus on the soft skills needed for professional development, such as communication skills, teamwork, and project management. These skills are essential for success in the software engineering field, especially a large team.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Industry relevance:&lt;/strong&gt; A great software engineering training program should stay up-to-date with the latest technologies and industry trends. This ensures that students are learning the skills that are most relevant and in demand in the job market.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Quality instruction:&lt;/strong&gt; A great software engineering training program should have experienced and knowledgeable instructors who can effectively teach the material and provide guidance and support to students.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Flexibility:&lt;/strong&gt; A great software engineering training program should offer flexible options, such as online or in-person classes, part-time or full-time schedules, and self-paced learning. This allows students to tailor their learning experience to their needs and schedule.&lt;/p&gt;

&lt;p&gt;ALX Software Engineering training is all of this and more. Now back to the main deal.&lt;/p&gt;

&lt;p&gt;How do you prepare?&lt;/p&gt;

&lt;p&gt;Wait! Hollup! Why do you need preparation? You need preparation because 70hrs per week is about 10hrs daily. 10hrs daily! This means it may be impossible to do any other thing while the training runs. You may even need to resign from your job when push reaches shove. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;If you have no coding background, you will need to give that required 70+ hours unless you are an exceptional genius. Many of us are not. If you are reading this, my bet is you are no genius - that is why you are already looking for heads-on.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;That said, as you are applying, start learning coding right away using the ALX curriculum as your compass. Get a hold of git, bash, C(pointers, strings, etc), HTML, and CSS.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;This will eventually reduce your overhead time investment when the program begins, buying you some 10-30hrs per week to engage in any other necessary activity like partime work. Even if it doesn't reduce your time investment, it will surely do one thing for you - it will make it possible for you to assimilate or understand topics and concepts faster. This will help you to meet project or task deadlines and earn more marks.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If you have coding or development experience, you will be fine though your grit will still be necessary.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;That said let's talk about your financial life - you need to do a careful analysis of your finances or income. What is the worst that can happen? What are your contingency plans? You need to have as many as you can. You will need them all. You may want to call one or two people and brief them that you may call time to time and ask for their assistance - explain the kind of assistance you will be needing though.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Arrange for your electricity. If you depend solely on national grid around most African nations, you will surely miss many project deadline. Personally I am using MTN Lumos Prime which is N10600 per month currently.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If you are in a relationship, let them know you are getting into an intensive 12 months training and likely to be less available. Lols &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  How to Proceed While in The Training
&lt;/h4&gt;

&lt;p&gt;ALX is not your regular Bootcamp. By that I mean, they teaching beyond coding and building things, in ALX Software Engineering training you learn the theory behind things - the fundamentals. In fact, the program when it started at Holberton School of Software Engineering was started as alternative to University degree in computer science. &lt;/p&gt;

&lt;p&gt;For each project or topic being treated you get learning materials and tasks to accomplish within a defined period of time. So what do you do?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Read the whole material at least more than once. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Before reading the material, reading the tasks you are to do.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;After reading the material the first time, you may want to read the tasks again. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The materials are mostly official documentations and sometimes may not give you precise clue to answer real questions. That said, dont hesitate to consult other tech contents like youtube videos and tech blogs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Take the mindset sessions of the training very serious. You will need those concepts to make it through ALX. Implement the concepts in your daily life.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;I am Vincent Ikechukwu, Full Stack Web Developer and Software Engineer.&lt;/strong&gt; Connect with me on social media via links below.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Linkedin &lt;a href="https://www.linkedin.com/in/ikechukwu-vincent-002934176/"&gt;Vincent&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Facebook &lt;a href="https://web.facebook.com/ikechukwu.unegbu.14"&gt;Vincent&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Twitter &lt;a href="https://twitter.com/TheV_Exe"&gt;Vincent&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>Linked List Implementation in C with User Input</title>
      <dc:creator>Ikechukwu Vincent</dc:creator>
      <pubDate>Sun, 31 Jul 2022 11:54:40 +0000</pubDate>
      <link>https://dev.to/ikechukwu/linked-list-implementation-in-c-with-user-input-3fd0</link>
      <guid>https://dev.to/ikechukwu/linked-list-implementation-in-c-with-user-input-3fd0</guid>
      <description>&lt;p&gt;Table of Content&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Intro&lt;/li&gt;
&lt;li&gt;Pre-requisites&lt;/li&gt;
&lt;li&gt;What is LinkedList&lt;/li&gt;
&lt;li&gt;Why are we using LinkedList&lt;/li&gt;
&lt;li&gt;Implementing a LinkedList in C &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you are reading this article, I imagine you are starting your journey in data structures and algorithms. If that is the case, you are reading the right article. Before we begin, let me lay out some prerequisites - the terms and concepts we need to know to understand the concept of LinkedList fully.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Contiguous and non-contiguous memory blocks&lt;/strong&gt;: In contiguous memory allocation, a single block of memory with a unique address is allocated to a file or process that needs it. In a Non-contiguous memory block, random memory blocks in different locations are allocated to the file or process. LinkedList falls into the latter. This is one of the core differences between LinkedList and array. Arrays are stored in contiguous memory locations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Struct&lt;/strong&gt;: It is a way to group related variables of different data types in C and other related languages. &lt;br&gt;
Struct &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dynamic Memory Allocation Using Malloc&lt;/strong&gt;: Since items in LinkedList are stored in random or different locations in machine memory, we will need to manipulate memory dynamically - on the fly. This brings us to the need to understand the standard c lib () function called malloc.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;WHAT IS A LINKED LIST?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I imagine that at this point in your journey you are familiar with arrays. A linked list just like arrays is a linear data structure. You store data sequentially one after another. In an array however elements are stored in the same memory location, but in LinkedList elements are stored in different locations in memory. The elements of the list or the list items or NODES are stored in different memory locations. Each of these list item or node contain two things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The data - can be any data type &lt;/li&gt;
&lt;li&gt;Memory address to next item or node - a pointer&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;WHY USED A LINKED LIST?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dynamic Size&lt;/strong&gt;: Linked lists have variable sizes. Arrays have fixed sizes. If for your purpose number or volume of data will be varying during program runtime, it is fair to use LinkedList.&lt;br&gt;
Faster Insertion and Deletion: With LinkedList insertion and deletion operations are faster or more compute-efficient. If you will be doing lots of insertion and deletion on your data, then LinkedList is better.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;IMPLEMENTING A LINKED LIST&lt;/strong&gt;&lt;br&gt;
Okay in this part of this article, we will write a code in C language to implement a LinkedList. It will take multiple data from the user and use them to create a LinkedList. The first data it will require and get from the user is several data for the list to hold. Then It will prompt the user to input data until it equals the number of the data defined by the user. Next, the program will print out everything.&lt;/p&gt;

&lt;p&gt;Now let's begin.&lt;br&gt;
&lt;strong&gt;Step 1&lt;/strong&gt;. First, create a C project in code blocks IDE. Inside the&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;main.c file: 
#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;stdlib.h&amp;gt;

struct node
{
    int data; //data of the node
    struct node *nextPtr; //address of the next node
};

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the above code, we imported standard C libraries we will need for this program and also created a node for our list. The node has two variables - an int variable to store the data. And another variable is to store a pointer(memory address) to the next node or list item.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;struct node *startNode;

//function to create the list
static void createNodeList(int totalNodes);
static void displayList();

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We declared a pointer to the starting node.and also created two function prototypes. The first function will create the linkedList. The second one will print it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;int main()
{
    int numberOfNodes;

    printf("Input the number of nodes: ");
    scanf("%d ", &amp;amp;numberOfNodes);
    createNodeList(numberOfNodes);
    displayList();
    return 0;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Main function is the entry point to every C program. So We created our main function and inside the main function, we declared an int variable numberOfNodes to hold the number of nodes for the list. Next, we print the user to enter the max number of nodes the list will contain, which we will store in the already declared variable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;static void createNodeList(int totalNodes)
{
    struct node *newNode;
    struct node *nodeBuffer;
    int nodeData;
    int nodeCounter;

    //allocate memory for starting node
    startNode = (struct node*)malloc(sizeof(struct node));

   //at this point you can check if the memory allocation is      
   //and stop the program if not 
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In step four I started defining the first function. I created a number of variables, first of struct node type to hold new nodes. Next one is a buffer. The next node data, and node counter. &lt;br&gt;
Next, I allocated memory to the starting node using malloc. Note the comment. I jumped that. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;printf("input data for node1: ");
        scanf("%d", &amp;amp;nodeData);

        //save user input to the data element of the node
        startNode-&amp;gt;data = nodeData;
        //initialize the nodes next pointer to null
        startNode-&amp;gt;nextPtr = NULL;
        //Point the buffer to address of the first node
        nodeBuffer = startNode;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You have requested for the first user input and assigned it to a node. The thing is to use a for loop to get the rest. A linked list with one node containing data basically has two nodes. So….&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 6:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;for(nodeCounter =2; nodeCounter&amp;lt;=totalNodes; nodeCounter++)
        {

            newNode = (struct node*)malloc(sizeof(struct node));

            //exit if new node cannot be allocated
            if(newNode == NULL)
            {
                printf("Memory cannot be allocated.");
                break;
            }
            else
            {
                printf("input data for node %d: ",nodeCounter);
                scanf("%d", &amp;amp;nodeData);

                newNode-&amp;gt;data = nodeData;
                newNode-&amp;gt;nextPtr = NULL;

                //Link the previous node to the current node
                nodeBuffer-&amp;gt;nextPtr = newNode;
                //copies address of current node
                nodeBuffer = nodeBuffer-&amp;gt;nextPtr;
            }

        }

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;NB: code up to this point is still inside the CreateNodelist function we started in step 4.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The next thing we need to do now is to create a function that will print out our node list to the console. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 7:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;static void displayList(){
    struct node *nodeBuffer;
    nodeBuffer = startNode;
    //exit if it is empty
    if(nodeBuffer == NULL){
        printf("List is empyt");
        return 0;
    }
    else{
        //check if the current node is empty
        while (nodeBuffer != NULL)
        {
            //PRINT THE DATA OF CRRENT NODE
            printf("DATA: %d \n", nodeBuffer-&amp;gt;data);
            //go to the next node
            nodeBuffer = nodeBuffer-&amp;gt;nextPtr;
        }
    }
}


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this article you must have learn the things you need to understand to understand linkedlist, also what a linkedlist is, the difference between linkedlist and array and why we use linkedlist. &lt;/p&gt;

&lt;p&gt;References: &lt;br&gt;
&lt;a href="https://www.geeksforgeeks.org/data-structures/linked-list/"&gt;Image Credit goes to Geekforgeeks&lt;/a&gt;&lt;br&gt;
Useful Resource: &lt;br&gt;
Source Code: &lt;a href="https://github.com/Ikechukwu-Unegbu/Everything-Linked-List/blob/master/main.c"&gt;Here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I am Vincent Ikechukwu, Full Stack Web Developer and Software Engineer.&lt;/em&gt; Connect with me on social media via links below &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Linkedin &lt;a href="https://www.linkedin.com/in/ikechukwu-vincent-002934176/"&gt;Vincent&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Facebook &lt;a href="https://web.facebook.com/ikechukwu.unegbu.14"&gt;Vincent&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Twitter &lt;a href="https://twitter.com/TheV_Exe"&gt;Vincent&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>c</category>
      <category>datastructure</category>
      <category>algorithms</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Structuring Your Laravel App: Migrations In Folders</title>
      <dc:creator>Ikechukwu Vincent</dc:creator>
      <pubDate>Sun, 31 Jul 2022 07:21:52 +0000</pubDate>
      <link>https://dev.to/ikechukwu/structuring-your-laravel-app-migrations-in-folders-2k52</link>
      <guid>https://dev.to/ikechukwu/structuring-your-laravel-app-migrations-in-folders-2k52</guid>
      <description>&lt;p&gt;My first laravel app for production was a website for a financial service company. Just a website, it wasn't meant to manage their processes, even though I made provisions for job posting and applications among other things. &lt;/p&gt;

&lt;p&gt;Sooner or later in building the website, I noticed the migration files is growing larger than what I wanted in a single folder. I must mention creating extra migrations to handle altering tables didn't help matters.&lt;/p&gt;

&lt;p&gt;Quickly I started my second project which turns out to be a relatively big utility application. Shit began to get real. I needed to rethink my file structures starting from migration to business logic.&lt;/p&gt;

&lt;p&gt;Then I figured out it would be better if I can group my migration files in folders. Related tables or migrations reside in the same folder. Without further ado let me quickly show you how to do that. &lt;/p&gt;

&lt;p&gt;Let's say you want to group your migrations into 3 folder folders. Then in your terminal,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;php artisan make:migration create_tablenames_table --path=database/migrations/admin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This single command will create a table with the name “tablenames” inside the admin folder in the migrations folder.&lt;/p&gt;

&lt;p&gt;You can go ahead and do this for the rest of the three folders. In the end, you will have a migration folder structure like this&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu4a3t4vpg76wk7n9rbco.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu4a3t4vpg76wk7n9rbco.jpg" alt="Laravel Folder Structure, Organizing Your laravel app"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;ul&gt;
&lt;li&gt;&lt;em&gt;I am Ikechukwu Vincent, Full Stack Web Developer, I work with Laravel and ReactJs&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/in/ikechukwu-vincent-002934176/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/__TechBroX1000" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>php</category>
      <category>laravel</category>
      <category>structure</category>
    </item>
  </channel>
</rss>
