<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>software engineering on Sadman Kabir Soumik</title>
    <link>https://blog.sksoumik.com/categories/software-engineering/</link>
    <description>Recent content in software engineering on Sadman Kabir Soumik</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <copyright>Copyright © 2022, Sadman Kabir Soumik</copyright>
    <lastBuildDate>Fri, 15 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.sksoumik.com/categories/software-engineering/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>How vLLM Works for Serving Large Language Models</title>
      <link>https://blog.sksoumik.com/artificial-intelligence/how_vllm_works_for_serving_llms/</link>
      <pubDate>Fri, 15 May 2026 00:00:00 +0000</pubDate>
      
      <guid>https://blog.sksoumik.com/artificial-intelligence/how_vllm_works_for_serving_llms/</guid>
      <description>
        
          
            You have downloaded an open source Large Language Model.
Maybe it is Llama, Qwen, Gemma, or another model.
You load it on an NVIDIA GPU and send a prompt:
1What is the capital of Bangladesh? The model answers:
1The capital of Bangladesh is Dhaka. Everything works.
But then 100 users start sending requests at the same time.
Suddenly things become harder.
Some requests wait.
GPU memory fills up.
Your expensive GPU may not be used efficiently.
          
          
        
      </description>
    </item>
    
    <item>
      <title>Brute-Force to Optimized Python Solutions for All LeetCode Blind-75 Problems</title>
      <link>https://blog.sksoumik.com/software-engineering/optimized-python-solutions-blind-75-leetcode/</link>
      <pubDate>Sun, 26 Feb 2023 00:00:00 +0000</pubDate>
      
      <guid>https://blog.sksoumik.com/software-engineering/optimized-python-solutions-blind-75-leetcode/</guid>
      <description>
        
          
            Blind-75 is a curated list of 75 LeetCode problems compiled by Yangshun Tay. The list can be accessed at this link.
Initially, I solved each problem using a brute-force approach, which often resulted in a Time Limit Exceeded (TLE) error. Then, I solved each problem with an optimized method that was accepted on LeetCode. For every problem on the list, I have provided both the naive brute force solution and an optimized solution.
          
          
        
      </description>
    </item>
    
    <item>
      <title>Building an Instagram Auto-Liker Bot - A Step-by-Step Guide</title>
      <link>https://blog.sksoumik.com/software-engineering/building-automated-instagram-liker-bot/</link>
      <pubDate>Thu, 12 Jan 2023 00:00:00 +0000</pubDate>
      
      <guid>https://blog.sksoumik.com/software-engineering/building-automated-instagram-liker-bot/</guid>
      <description>
        
          
            Goal of The Project The project aims to build an Instagram bot that will auto-scroll pages down and Like/Love posts automatically. We must log in to Instagram from our web browser and then run the program.
You will find all the source code in this GitHub repository.
Dependencies 1pip install pyautogui 2# if you are on Linux, you also need to install scrot 3sudo apt-get install scrot Task 1 At first, we need to find the exact RGB value of the love sign on Instagram when the post has already been liked, so that our program doesn&#39;t click on the posts that has been already liked.
          
          
        
      </description>
    </item>
    
    <item>
      <title>Cracking the LeetCode Two Sum Variations - All 5 Problems</title>
      <link>https://blog.sksoumik.com/software-engineering/all-leetcode-two-sum-problem-variations-with-python-solutions/</link>
      <pubDate>Fri, 21 Oct 2022 00:00:00 +0000</pubDate>
      
      <guid>https://blog.sksoumik.com/software-engineering/all-leetcode-two-sum-problem-variations-with-python-solutions/</guid>
      <description>
        
          
            Author: Sadman Kabir Soumik
Original Two Sum Problem Given an array of integers nums and an integer target, return indices of the two numbers such that they add up to target. You may assume that each input would have exactly one solution, and you may not use the same element twice. You can return the answer in any order.
1Example 1: 2Input: nums = [2,7,11,15], target = 9 3Output: [0,1] 4Explanation: Because nums[0] + nums[1] == 9, we return [0, 1].
          
          
        
      </description>
    </item>
    
    <item>
      <title>Working with Elasticsearch on Linux Using Python Client</title>
      <link>https://blog.sksoumik.com/software-engineering/elasticsearch-python-client-tutorial/</link>
      <pubDate>Fri, 19 Aug 2022 00:00:00 +0000</pubDate>
      
      <guid>https://blog.sksoumik.com/software-engineering/elasticsearch-python-client-tutorial/</guid>
      <description>
        
          
            Elasticsearch Elasticsearch is a distributed, open-source search and analytics engine based on the Apache Lucene search library. It&#39;s designed to provide fast and scalable search and analysis capabilities for large volumes of data.
At its core, Elasticsearch is a document-oriented database that stores data in JSON format. This allows it to index and search through data quickly and efficiently. Elasticsearch uses a powerful query language called Elasticsearch Query DSL to perform complex search queries on this data.
          
          
        
      </description>
    </item>
    
    <item>
      <title>Core Concepts of System Design in Software Engineering</title>
      <link>https://blog.sksoumik.com/software-engineering/system-design-fundamentals-software-engineering/</link>
      <pubDate>Wed, 20 Jul 2022 00:00:00 +0000</pubDate>
      
      <guid>https://blog.sksoumik.com/software-engineering/system-design-fundamentals-software-engineering/</guid>
      <description>
        
          
            What is System Design in Software Engineering? System design in software engineering is defining the structure, components, connections, and information for a system that meets specific needs. It is a vital step in software development as it outlines how the system will work and be structured. A team of developers usually performs this process with input from business analysts and end-users.
Process of Designing a System To create a good software system, we need to follow these steps:
          
          
        
      </description>
    </item>
    
    <item>
      <title>Bypass reCAPTCHA And Prevent IP Blocking Using Tor Proxy</title>
      <link>https://blog.sksoumik.com/software-engineering/rotate-ip-with-every-http-request-bypass-recaptcha-tor-proxy/</link>
      <pubDate>Wed, 09 Mar 2022 00:00:00 +0000</pubDate>
      
      <guid>https://blog.sksoumik.com/software-engineering/rotate-ip-with-every-http-request-bypass-recaptcha-tor-proxy/</guid>
      <description>
        
          
            When we run web crawlers, sometimes we get blocked by the target site. Sometimes we get reCAPTCHA to solve, and crawling gets interrupted. We can rotate the IP address with each request to avoid these issues, which solves the IP blocking and reCAPTCHA issues.
This blog is the written version of the video content I published on YouTube. If you prefer watching videos than reading blogs, then you can watch the video.
          
          
        
      </description>
    </item>
    
    <item>
      <title>Be a Master at Python Through Some Cool Code Snippets</title>
      <link>https://blog.sksoumik.com/software-engineering/python-code-snippets-tricks-tips/</link>
      <pubDate>Sun, 27 Jun 2021 00:00:00 +0000</pubDate>
      
      <guid>https://blog.sksoumik.com/software-engineering/python-code-snippets-tricks-tips/</guid>
      <description>
        
          
            Combine two lists as a dictionary | dict(zip) Program
1keys = [&amp;#39;a&amp;#39;, &amp;#39;b&amp;#39;, &amp;#39;c&amp;#39;] 2values = [1, 2, 3] 3dictionary = dict(zip(keys, values)) 4print(dictionary) Output
1{&amp;#39;a&amp;#39;: 1, &amp;#39;b&amp;#39;: 2, &amp;#39;c&amp;#39;: 3} Program
1keys = (&amp;#39;name&amp;#39;, &amp;#39;age&amp;#39;, &amp;#39;location&amp;#39;) 2values = (&amp;#39;Soumik&amp;#39;, 26, &amp;#39;Bangladesh&amp;#39;) 3 4new_dict = dict(zip(keys, values)) 5print(new_dict) Output
1# output 2{&amp;#39;name&amp;#39; : &amp;#39;Soumik&amp;#39;, &amp;#39;age&amp;#39; : 26, &amp;#39;location&amp;#39; : &amp;#39;Bangladesh&amp;#39;} Create nested directory Program
1from pathlib import Path 2 3Path(&amp;#34;father/child&amp;#34;).mkdir(parents=True, exist_ok=True) We can also the os module.
          
          
        
      </description>
    </item>
    
    <item>
      <title>Python Collections Module Tutorial</title>
      <link>https://blog.sksoumik.com/software-engineering/tutorial-on-python-collections-module/</link>
      <pubDate>Fri, 23 Apr 2021 00:00:00 +0000</pubDate>
      
      <guid>https://blog.sksoumik.com/software-engineering/tutorial-on-python-collections-module/</guid>
      <description>
        
          
            Python&#39;s collections module implements specialized container datatypes providing alternatives to Python’s general purpose built-in containers, dict, list, set, and tuple.
This module has the following containers:
11. Counter() 22. namedtuple() 33. deque() 44. defaultdict() 55. OrderedDict() 66. UserDict() 77. UserString() 88. UserList() 99. ChainMap() In my experience, out of all of these modules Counter, defaultdict, OrderedDict, and deque are the most useful ones. The following section explains how Counter, defaultdict, OrderedDict, and deque works.
          
          
        
      </description>
    </item>
    
    <item>
      <title>How to design a large scale software system that supports millions of users.</title>
      <link>https://blog.sksoumik.com/artificial-intelligence/designing-large-scale-high-performance-software-systems/</link>
      <pubDate>Fri, 12 Mar 2021 00:00:00 +0000</pubDate>
      
      <guid>https://blog.sksoumik.com/artificial-intelligence/designing-large-scale-high-performance-software-systems/</guid>
      <description>
        
          
            Start With A Simple Architecture To begin building an app, we will start from the beginning. We will create a basic app with some users. The easiest way to do this is to put the whole app on one server. This is a common way to start. The app and any API&#39;s will run on a server like Apache or Tomcat. We will also use a database like Oracle or MySQL.
          
          
        
      </description>
    </item>
    
    <item>
      <title>Unleashing the Power of Bit Manipulation in Computer Science</title>
      <link>https://blog.sksoumik.com/software-engineering/bit_manupulation_in_python/</link>
      <pubDate>Fri, 12 Jun 2020 00:00:00 +0000</pubDate>
      
      <guid>https://blog.sksoumik.com/software-engineering/bit_manupulation_in_python/</guid>
      <description>
        
          
            Bit Manipulation Bit manipulation is a technique used in computer science to manipulate data at the level of its binary representation. This can be useful for a variety of tasks, such as low-level optimization, data compression, and cryptography.
At its core, bit manipulation involves working with individual bits, rather than larger units of data such as bytes or words. This is typically done using bitwise operators, which perform operations on the individual bits of a number.
          
          
        
      </description>
    </item>
    
    <item>
      <title>Comparing REST API and gRPC - Choosing the Right Web API</title>
      <link>https://blog.sksoumik.com/software-engineering/choosing-right-web-api-rest-grpc/</link>
      <pubDate>Fri, 10 Apr 2020 00:00:00 +0000</pubDate>
      
      <guid>https://blog.sksoumik.com/software-engineering/choosing-right-web-api-rest-grpc/</guid>
      <description>
        
          
            REST (Representational State Transfer) and gRPC are two different techniques for creating web APIs (Application Programming Interfaces).
What is REST API? A popular architectural design for developing web APIs is REST. It is built on the HTTP (HyperText Transfer Protocol) and operates on resources defined by URLs using common HTTP methods including GET, POST, PUT, and DELETE. REST APIs are simple to use with a variety of programming languages and tools since they exchange data using the JSON (JavaScript Object Notation) format.
          
          
        
      </description>
    </item>
    
    <item>
      <title>Compiler vs Interpreter - A Simple Guide for Beginners</title>
      <link>https://blog.sksoumik.com/software-engineering/compiler-vs-interpreter-in-simple-terms/</link>
      <pubDate>Tue, 21 Jan 2020 00:00:00 +0000</pubDate>
      
      <guid>https://blog.sksoumik.com/software-engineering/compiler-vs-interpreter-in-simple-terms/</guid>
      <description>
        
          
            Imagine you’ve written a letter in English, but your friend only speaks Spanish. You’d need someone (or something) to translate it for them, right? In programming, your code is like that letter, and the computer only understands a special language called &amp;quot;machine language&amp;quot; (all 0s and 1s). A compiler and an interpreter are like translators that help the computer understand what you’ve written in languages like Python, C++, or Java.
          
          
        
      </description>
    </item>
    
    <item>
      <title>Dynamic Programming - Step by Step Guide with Examples</title>
      <link>https://blog.sksoumik.com/software-engineering/dynamic-programming-step-by-step-explanation/</link>
      <pubDate>Mon, 23 Dec 2019 00:00:00 +0000</pubDate>
      
      <guid>https://blog.sksoumik.com/software-engineering/dynamic-programming-step-by-step-explanation/</guid>
      <description>
        
          
            Dynamic programming is a method for solving complex problems by breaking them down into smaller subproblems. It is a mathematical optimization technique that is mainly used for solving problems that exhibit the properties of overlapping subproblems and optimal substructure.
The basic idea behind dynamic programming is to solve a complex problem by breaking it down into smaller subproblems, solving each of those subproblems just once, and storing their solutions. The solutions to the subproblems are then used to solve the original problem.
          
          
        
      </description>
    </item>
    
    <item>
      <title>Multi-Threading vs Multi-Processing</title>
      <link>https://blog.sksoumik.com/software-engineering/multi-threading_vs_multi-processing/</link>
      <pubDate>Sun, 24 Nov 2019 00:00:00 +0000</pubDate>
      
      <guid>https://blog.sksoumik.com/software-engineering/multi-threading_vs_multi-processing/</guid>
      <description>
        
          
            Let&#39;s say you&#39;ve got a big school project to do. You need to write a report, paint a picture, and build a model. Here&#39;s how you might tackle the project under different scenarios:
Multi-processing This is like having multiple copies of yourself, each working independently on a different part of the project. One of you is writing the report, another one is painting the picture, and the third one is building the model.
          
          
        
      </description>
    </item>
    
    <item>
      <title>Decorators in Python</title>
      <link>https://blog.sksoumik.com/software-engineering/decorators_in_python/</link>
      <pubDate>Mon, 20 May 2019 00:00:00 +0000</pubDate>
      
      <guid>https://blog.sksoumik.com/software-engineering/decorators_in_python/</guid>
      <description>
        
          
            Decorator is a design pattern to extend the functionality of a function without modifying the structure of the original function. Decorators are usually applied to functions using the @decorator syntax, immediately before the function definition.
Example of how to use a decorator to extend the functionality of a function:
1def my_decorator(func): 2 def wrapper(*args, **kwargs): 3 # Do something before the function is called 4 result = func(*args, **kwargs) 5 # Do something after the function is called 6 return result 7 return wrapper 8 9@my_decorator 10def add(x, y): 11 return x + y The add function is decorated with the my_decorator function.
          
          
        
      </description>
    </item>
    
    <item>
      <title>Basic Coding Problems You Must Be Able to Solve As a Computer Science Graduate</title>
      <link>https://blog.sksoumik.com/software-engineering/basic_coding_problems_that_you_must_know_as_a_cse_graduate/</link>
      <pubDate>Fri, 22 Feb 2019 00:00:00 +0000</pubDate>
      
      <guid>https://blog.sksoumik.com/software-engineering/basic_coding_problems_that_you_must_know_as_a_cse_graduate/</guid>
      <description>
        
          
            Check Prime Number A prime number is a positive integer greater than 1 that has no positive integer divisors other than 1 and itself. For example, the first six prime numbers are 2, 3, 5, 7, 11, and 13.
The number 6 is not a prime number because it has more than two positive integer divisors. In fact, the divisors of 6 are 1, 2, 3, and 6.
To determine if a number is prime, you can check if it has any positive integer divisors other than 1 and itself.
          
          
        
      </description>
    </item>
    
    <item>
      <title>Learning the Django Framework Fundamentals</title>
      <link>https://blog.sksoumik.com/software-engineering/understanding-django-framework-python/</link>
      <pubDate>Sat, 05 Jan 2019 00:00:00 +0000</pubDate>
      
      <guid>https://blog.sksoumik.com/software-engineering/understanding-django-framework-python/</guid>
      <description>
        
          
            What&#39;s the architecture of Django framework? The architecture of Django is based on the Model-View-Controller (MVC) pattern, which is a way of organizing code in a web application. In Django, this pattern is modified slightly and is referred to as Model-View-Template (MVT).
Here&#39;s a simple explanation of each component in Django&#39;s architecture:
Model: This component represents the data and database schema of your web application. Models define the structure of your data and provide an API for querying and manipulating that data.
          
          
        
      </description>
    </item>
    
    <item>
      <title>Understanding Dependency Injection - Real-World Examples and Advantages</title>
      <link>https://blog.sksoumik.com/software-engineering/dependency-injection-real-world-examples-advantages/</link>
      <pubDate>Sat, 10 Feb 2018 00:00:00 +0000</pubDate>
      
      <guid>https://blog.sksoumik.com/software-engineering/dependency-injection-real-world-examples-advantages/</guid>
      <description>
        
          
            Dependency injection is a design pattern that is widely used in software development to promote good software design and make code more flexible and easier to test. In this blog post, we will take a closer look at what dependency injection is, how it works, and its advantages.
What is Dependency Injection? Dependency injection is a technique that allows an object to receive its dependencies (other objects it needs to function) from the outside, rather than creating them itself.
          
          
        
      </description>
    </item>
    
  </channel>
</rss>
