Debug inside the container—directly from PyCharm In the previous article, we looked at setting up Python with Docker. We skipped all of the environment headaches. If you’re using PyCharm, you might have noticed that everything is underlined red, like your code is broken. Let’s fix that with Docker again. https://www.dinocajic.com/python-p1-getting-started-with-python-and-docker-compose/ Open up PyCharm and go to your interpreter. It should be at the bottom right of your screen. Select Add New Interpreter and then Docker. We already have a Dockerfile inside of our project so we can simply leave the settings as is. If you don’t see Docker on
Articles
Containerize your first Python project in minutes Docker is one of those environments that I can’t live without anymore. It’s interesting that there aren’t many resources that discuss getting a basic Python script going with Docker and docker-compose. Let’s see how simple this is to do with Python. Create a new directory for your project and navigate into it: mkdir python_test cd python_test Create a new file called Dockerfile with the following content: FROM python:3.11-slim-buster WORKDIR /app COPY requirements.txt ./ RUN pip install –no-cache-dir -r requirements.txt COPY . . CMD [ “python”, “app.py” ] This Dockerfile sets up a Python 3.11 environment,
The language that does it all I jumped into this Python tutorial series without explaining why one might want to learn Python in the first place. Python is a high-level, interpreted programming language that was first released in 1991 by Guido van Rossum. It is named after Monty Python, the British comedy group, which explains why many of its tutorials and examples use humorous references. https://www.dinocajic.com/python-p1-getting-started-with-python-and-docker-compose/ Python is designed to be easy to learn and read, with a syntax that emphasizes readability and reduces the cost of program maintenance. Its simple and elegant syntax has made it popular among beginners,
Compose complex layouts with multiple slots In the previous article, we looked at the $slot variable and how to inject content into our components. But what if our component was composed of multiple slots? Make different components you say? We could, but sometimes that’s just not practical. There can be over-segmentation. https://www.dinocajic.com/laravel-p69-blade-slots-intro/ To illustrate this concept, I’ll create a resources/views/components/details.blade.php file. The component will contain the details tag that’s standard with HTML. It just allows for the text to be clicked on and expanded. https://developer.mozilla.org/en-US/docs/Web/HTML/Element/details The structure of the details tag is as follows: <details> <summary>Details</summary> Something small enough to escape casual notice. </details> We would like to
Plug content into components with ease Aside from passing attribute data to blade components, sometimes you need to pass a large chunk of data. That data can be displayed through slots. Laravel renders the data by echoing out the $slot variable. https://www.dinocajic.com/laravel-p68-defining-custom-directives-in-blade/ We’ll start by creating a button component. All we want to be able to do with our button component is change the inner-text. It’ll be located in resources/views/components/button.blade.php. <button class=”btn”> {{ $slot }} </button> To use it, we’ll create a new Blade file: resources/views/blade-test/index.blade.php. <x-button> Test </x-button> We just need a route to display it. Route::get(‘/blade-slots’, function () { return view(‘blade-slots.index’); });
Extend Blade on your terms How many times have you wished that a specific directive existed in Blade? If the answer to that question is “many,” then do I have a surprise for you. You can create your own directives in Blade. First, you need to create a service provider using the php artisan make:provider command. This provider will register your Blade directives with Laravel. # php artisan make:provider CustomBladeServiceProvider INFO Provider [app/Providers/CustomBladeServiceProvider.php] created successfully. # <?php namespace App\Providers; use Illuminate\Support\ServiceProvider; class CustomBladeServiceProvider extends ServiceProvider { /** * Register services. * * @return void */ public function register() { // } /**
In B2B sales, speed and preparedness are everything. Yet the data shows a sobering reality: 51% of deals are lost because the seller misses a follow-up step or can’t share information the buyer needs when they need it. Nearly half of salespeople (42%) admit they don’t have sufficient information before even talking to a prospect, a knowledge gap that can stall momentum from the very start. And when a hot inbound lead comes in, waiting just 30 minutes to respond can make your team 21× less likely to qualify that lead, since 78% of buyers ultimately go with the first
It’s a question I’ve been asking myself a lot lately. In the rush to innovate and keep up with trends, how often do we pause and scrutinize our day-to-day work? Before diving into any shiny new tool or technology, we need to take a hard look in the mirror and ask: What are the key things we’re wasting time on? Often, this means confronting inefficient workflows, redundant processes, and “busywork” that creeps into every corner of the organization. The truth is, we can’t fix or automate something we haven’t first acknowledged as a problem . The Temptation of Flashy AI
In the last six months, a clear trend has emerged: organizations across industries are realizing that successful AI implementation hinges not just on cutting-edge algorithms, but on effective change management. From enterprise giants to scrappy startups and public agencies, leaders are grappling with how to prepare their people and processes for an AI-powered future. Surveys show near-universal enthusiasm for AI; 95% of US companies report using generative AI tools , yet they also reveal major growing pains. The paradox of 2025 is that while AI adoption is soaring, many organizations feel less ready than ever to harness it fully. Let’s
In the past six months, artificial intelligence has sprinted ahead forcing institutions in education, labor, and governance to run twice as fast just to keep up. The rise of autonomous “agentic” AI systems and ever-more powerful generative tools is transforming how we learn, work, and regulate. New AI models can not only compose text and code but also take actions on our behalf (scheduling tasks, executing workflows, handling customer service inquiries, etc.), blurring the line between tool and independent agent. This breakneck progress is a double-edged sword: it offers unprecedented efficiency and creativity, yet it challenges existing policies and frameworks
