Computer Science and Programming
156K subscribers
450 photos
32 videos
37 files
744 links
Channel specialized for advanced topics of:
* Artificial intelligence,
* Machine Learning,
* Deep Learning,
* Computer Vision,
* Data Science
* Python

Admin: @otchebuch

Memes: @memes_programming

Ads: @Source_Ads,
https://telega.io/c/computer_science
Download Telegram
5 books for Software Engineers

1. Clean Architecture (Martin)
2. Building Microservices (Newman)
3. Unit Testing (Khorikov)
4. Domain Driven Design (Evans)
5. Head First Design Patterns (Freeman & Robson)

What is your favourite? Comment bellow.
๐Ÿ‘222๐Ÿ‘Ž7
12 Design Patterns You Must Know

1. Factory Pattern ๐Ÿญ
Imagine a factory that produces different products. Similarly, this pattern creates objects without specifying their exact class, making code flexible and extendable. ๐Ÿงฉ

2. Observer Pattern ๐Ÿ”
Like subscribing to updates! Objects (observers) register to watch changes in a subject. When the subject changes, observers are notified automatically. ๐Ÿ“ก๐Ÿ””

3. Singleton Pattern ๐Ÿ•Š
Ensures a class has only one instance globally accessible. Useful for managing shared resources like databases. ๐ŸŒ๐Ÿ”’

4. Builder Pattern ๐Ÿ› 
Building complex objects step by step. Think of it as assembling Lego bricks to create something intricate without the mess! ๐Ÿงฑ๐Ÿ—

5. Adapter Pattern ๐ŸŒ‰
Converts the interface of one class into another interface clients expect. Makes incompatible components work together. ๐Ÿ”Œ๐Ÿ”Œ

6. Decorator Pattern ๐ŸŽˆ
Like adding toppings to your pizza! Dynamically adds responsibilities to objects without changing their code. A flexible alternative to subclassing. ๐Ÿ•โœจ

7. Proxy Pattern ๐Ÿ•ถ
Controls access to an object, acting as a stand-in with additional functionality, like lazy loading. ๐Ÿ”’๐Ÿ”

8. Strategy Pattern ๐ŸŽฏ
Switching strategies seamlessly! Allows selecting algorithms during runtime. Useful when you want to provide multiple ways to accomplish a task. ๐ŸŽฎ๐Ÿ”„

9. Command Pattern โŒจ๏ธ
Encapsulates requests as objects, allowing parameterization of clients with different requests and queuing of requests. Think of it as a to-do list for your program. ๐Ÿ“‹๐Ÿ“Œ

10. Template Pattern ๐Ÿ“„
Standardized process steps! Defines the structure of an algorithm, letting subclasses override specific steps. Ideal for reusable workflows. ๐Ÿ“Š๐Ÿ“ˆ

11. Iterator Pattern ๐Ÿ”„
Tour guide for collections! Provides a way to access elements of a collection without exposing its underlying representation. ๐Ÿšถโ€โ™‚๏ธ๐Ÿ—บ

12. State Pattern ๐Ÿšฆ
Like a traffic light! Allows an object to change its behavior when its internal state changes. Keeps your code organized as states pile up. ๐Ÿšฅ๐Ÿ”„
๐Ÿ‘140๐Ÿ‘Ž4
This media is not supported in your browser
VIEW IN TELEGRAM
In the world of software development and system integration, the methods by which one system communicates with another can have a significant impact on the efficiency and responsiveness of the overall process. Two common approaches to this communication are polling and webhooks.

In the context of software, webhooks are HTTP callbacks that allow one system to notify another system of an event as soon as it happens. In the VCS and CI/CD scenario:

1. The VCS, such as GitHub, Bitbucket, or GitLab, has a webhook feature.
2. Whenever a code push occurs, the VCS sends an immediate HTTP POST request to the CI/CD server, saying, "Hey, new code just arrived!"
3. The CI/CD server responds instantly, starting the build and deployment process without wasting time checking repeatedly.

Here is a simplified example

๐Ÿ”„ Polling:
Imagine you're waiting for an important text message from a friend. To check if the message has arrived, you periodically take out your phone, unlock it, and open the messaging app to see if there's a new message. You keep doing this every few minutes until you finally see the message. This process is similar to polling in the context of software systems.

In software, polling is a method where a system (e.g., a Continuous Integration/Continuous Deployment server) repeatedly checks another system (e.g., a Version Control System) for updates. In your VCS and CI/CD scenario, it works like this:

1. CI/CD server regularly checks the VCS repository for code changes.
2. It repeatedly asks, "Is there new code? Is there new code?"
3. When it detects new code, it triggers the build and deployment process.

๐ŸŽฃ Webhooks:
Now, imagine you have a special notification setup with your friend. Instead of repeatedly checking your phone, your friend promises to send you a message as soon as anything important happens. So, you can put your phone aside and carry on with other tasks, only looking at it when you receive a notification. This is analogous to webhooks.
๐Ÿ‘141โค1
This media is not supported in your browser
VIEW IN TELEGRAM
The 12 Factor App is a methodology for building scalable and maintainable web applications. It provides a set of guidelines for developing modern, cloud-native, and containerized applications. Here are the 12 factors explained in bullet points:

1. Codebase:
- One codebase per application.
- Use version control to manage code changes.

2. Dependencies:
- Explicitly declare and isolate dependencies.
- Avoid relying on system-wide packages.

3. Config:
- Store configuration in environment variables.
- Keep configuration separate from code.

4. Backing Services:
- Treat external services (databases, caches, etc.) as attached resources.
- Connect to them via URLs or environment variables.

5. Build, Release, Run:
- Strictly separate the build, release, and run stages of the application.
- Use consistent and repeatable build processes.

6. Processes:
- Execute the application as stateless processes.
- Avoid storing session data locally; use external services.

7. Port Binding:
- Export services via a port and communicate over the network.
- Web applications should bind to a port defined by the environment.

8. Concurrency:
- Scale out via the process model.
- Utilize multiple stateless processes to handle requests.

9. Disposability:
- Maximize robustness with fast startup and graceful shutdown.
- Terminate unneeded processes without impact.

10. Dev/Prod Parity:
- Keep development, staging, and production environments as similar as possible.
- Use the same dependencies and configuration.

11. Logs:
- Treat logs as event streams.
- Write application logs to standard output and allow log aggregation.

12. Admin Processes:
- Run administrative tasks as one-off processes.
- Use the same codebase and environment for administrative tasks.

Adhering to these 12 factors helps create applications that are easier to develop, deploy, and maintain, making them well-suited for cloud-native and containerized environments.
๐Ÿ‘117
This media is not supported in your browser
VIEW IN TELEGRAM
How do companies ship code to production?

Step 1: The process starts with a product owner creating user stories based on requirements.

Step 2: The dev team picks up the user stories from the backlog and puts them into a sprint for a two-week dev cycle.

Step 3: The developers commit source code into the code repository Git.

Step 4: A build is triggered in Jenkins. The source code must pass unit tests, code coverage threshold, and gates in SonarQube.

Step 5: Once the build is successful, the build is stored in artifactory. Then the build is deployed into the dev environment.

Step 6: There might be multiple dev teams working on different features. The features need to be tested independently, so they are deployed to QA1 and QA2.

Step 7: The QA team picks up the new QA environments and performs QA testing, regression testing, and performance testing.

Steps 8: Once the QA builds pass the QA teamโ€™s verification, they are deployed to the UAT environment.

Step 9: If the UAT testing is successful, the builds become release candidates and will be deployed to the production environment on schedule.

Step 10: SRE (Site Reliability Engineering) team is responsible for prod monitoring.
๐Ÿ‘121๐Ÿ‘Ž3
Media is too big
VIEW IN TELEGRAM
Sharing the tool that will make working with text easier!

CMD+ helps to make your day-to-day tasks easier and faster while providing you with customization options so that you can tailor the interface to fit your needs. With just a few simple commands, you can easily take care of various tasks such as text writing, translation, Excel promts, and rephrasing, eliminating the hassle of manually doing those activities. By automating these time-consuming processes, CMD+ saves you time and energy, allowing you to focus on more important tasks.

Download:
https://cmdplus.page.link/H3Ed
๐Ÿ‘39๐Ÿ‘Ž2
This media is not supported in your browser
VIEW IN TELEGRAM
7 Popular Network Protocols

1- HTTPS: Secure version of HTTP, used for secure communication over a computer network.

2 - Web Socket: Provides full-duplex communication channels over a single TCP connection.

3 - TCP: Provides reliable, ordered, and error-checked delivery of a stream of bytes.

4 - HTTP: Foundation of any data exchange on the Web, a protocol used for transmitting hypertext.

5 - FTP: Used for the transfer of computer files between a client and server on a computer network.

6 - UDP: Allows computer applications to send messages, in this case referred to as datagrams, to other hosts on an Internet Protocol (IP) network.

7 - SMTP: Internet standard for email transmission across Internet Protocol (IP) networks.
๐Ÿ‘178๐Ÿ‘Ž4
This media is not supported in your browser
VIEW IN TELEGRAM
12 Microservices Best Practices You Should Know

1 - Single Responsibility
2 - Containers
3 - Orchestration
4 - Resilience and Fault Tolerance
5 - Scalability
6 - CI/CD
7 - Observability
8 - Security
9 - API Gateway
10 - Stateless
11 - DB Per Service
12 - Event Driven Architecture
๐Ÿ‘135โค1๐Ÿ‘Ž1
This media is not supported in your browser
VIEW IN TELEGRAM
Top Programming Languages of All Times
๐Ÿ‘158๐Ÿ‘Ž13
CI/CD example for API written in Java/Spring Boot.

๐Ÿ‘‰ CI/CD stands for Continuous Integration/Continuous Deployment. It is a software development process that involves automating the building, testing, and deployment of code changes.

๐Ÿญ The CI/CD pipeline can be thought of as a factory assembly line, where each step is automated to ensure the code is high quality and ready for deployment.

๐Ÿ›  The pipeline starts with Continuous Integration, where code changes are automatically built, tested, and merged into a shared repository. This step helps catch errors early and ensures the code is stable and functioning correctly.

๐Ÿ“ฆ Once the code has passed the integration tests, it moves on to Continuous Deployment. This step involves automatically packaging and deploying the code changes to a staging or production environment.

๐Ÿ‘€ Automated testing is performed at each stage of the pipeline to ensure that the code meets the required standards and that the new changes do not break any existing functionality.

๐Ÿš€ The ultimate goal of a CI/CD pipeline is to speed up the software development process, reduce errors, and quickly deliver new features and improvements to users.
๐Ÿ‘80๐Ÿ‘Ž2โค1
๐ŸŒŸ Why Clean Architecture?

โœ… Maintainability: Changes in one layer won't lead to a domino effect of changes throughout the codebase. ๐Ÿ”„๐Ÿšซ

โœ… Testability: Each layer is testable in isolation, making it easier to ensure your code works as expected. โœ”๏ธ๐Ÿงช

โœ… Scalability: You can swap out components without disrupting the entire system. It grows with your project! ๐Ÿ“ˆ๐Ÿ”„

โœ… Adaptability: Technology evolves, but your core business logic remains intact. Upgrades are smoother and less painful. โš™๏ธ๐Ÿ”ง

๐Ÿ“š Layers of Clean Architecture:

- Entity Layer: The core business logic lives here. It represents the heart of your application. โค๏ธ๐Ÿง 
- Use Case Layer: This layer holds application-specific use cases and business rules. It orchestrates interactions between entities and ensures they stay clean and focused. ๐Ÿค๐Ÿ“‹

- Interface Adapters: These adapters bridge the gap between the use cases and the external world, like user interfaces and databases. They keep things flexible and adaptable. ๐ŸŒ๐Ÿ”Œ

- Frameworks & Drivers: The outermost layer deals with frameworks, tools, and external systems. It's where you connect to databases, APIs, and UI frameworks. ๐Ÿ–ฅ๐Ÿ”—
๐Ÿ‘86
This media is not supported in your browser
VIEW IN TELEGRAM
โ—๏ธJava vs. Pythonโ—๏ธ

โžก๏ธ Python and Java are both popular and powerful programming languages, each with its own unique strengths. Python is known for its simplicity and readability, making it an excellent choice for beginners and rapid development. Its concise syntax allows developers to express concepts with fewer lines of code, promoting faster iteration and prototyping. Python's extensive library ecosystem empowers developers to access a wide range of pre-built tools for various tasks.

โžก๏ธ On the other hand, Java is recognized for its platform independence and robustness. It's a statically-typed language, which means errors can be caught at compile time, enhancing code reliability. Java's "write once, run anywhere" philosophy enables applications to run on different platforms without modification, thanks to the Java Virtual Machine (JVM). This also makes Java well-suited for building large-scale, performance-critical applications.

โžก๏ธ In summary, Python emphasizes simplicity, readability, and rapid development, while Java prioritizes platform independence, robustness, and performance. The choice between the two largely depends on the project's requirements and the developer's preferences.
๐Ÿ‘233๐Ÿ‘Ž5
5 Principles of Object Oriented Design (SOLID)
๐Ÿ‘112๐Ÿ‘Ž2
Top 4 Forms of Authentication Mechanisms

1. SSH Keys - Cryptographic keys are used to access remote systems and servers securely

2. OAuth Tokens - Tokens that provide limited access to user data on third-party applications

3. SSL Certificates - Digital certificates ensure secure and encrypted communication between servers and clients

4. Credentials - User authentication information is used to verify and grant access to various systems and services
๐Ÿ‘102โค1
Hereโ€™s description of 9 types of API testing:

โžก๏ธ 1. Unit Testing: Involves testing individual components or functions of an API in isolation to ensure they function correctly and produce the expected output.

โžก๏ธ 2. Functional Testing: Focuses on testing the overall functionality of the API, verifying that it performs as intended and produces accurate results.

โžก๏ธ 3. Integration Testing: Tests interactions between different components or services within an API to ensure they work together seamlessly and communicate effectively.

โžก๏ธ 4. Load Testing: Evaluates the API's performance under heavy load by simulating a large number of concurrent requests to identify potential bottlenecks and optimize resource usage.

โžก๏ธ 5. Security Testing: Aims to identify vulnerabilities in the API by testing for potential security risks, such as unauthorized access, data leakage, or injection attacks.

โžก๏ธ 6. Stress Testing: Pushes the API beyond its limits by applying extreme conditions, such as high traffic or limited resources, to determine how well it can handle such scenarios.

โžก๏ธ 7. Negative Testing: Involves deliberately sending invalid or incorrect inputs to the API to verify that it responds appropriately with error messages or other expected behaviors.

โžก๏ธ 8. Boundary Testing: Focuses on testing the limits of the API's inputs, such as minimum and maximum values, to ensure it handles these boundaries correctly.

โžก๏ธ 9. Usability Testing: Evaluates the user-friendliness of the API by assessing how easily developers can understand its documentation, endpoints, and responses, ultimately enhancing the developer experience.
๐Ÿ‘131โค1
GridFormer: Point-Grid Transformer for Surface Reconstruction

Paper:
https://arxiv.org/pdf/2401.02292.pdf

GitHub:
https://github.com/list17/GridFormer

๐Ÿ”—@computer_science_and_programming
Please open Telegram to view this post
VIEW IN TELEGRAM
๐Ÿ‘46๐Ÿ‘Ž1
This media is not supported in your browser
VIEW IN TELEGRAM
Instagram System Design Overview

- Clients (iOS, Android, Web).
- Microservices for varied functionalities.
- Databases: MySQL, Cassandra, Redis.
- Object storage (Amazon S3) & CDN for media.
- Caching with Memcached/Redis
- Scaling, load balancing, auto-scaling.
- Asynchronous processing with queues
- Secure authentication (OAuth), RBAC.
- Monitoring (Prometheus, Grafana) & analytics.
- Push notifications for real-time updates.
๐Ÿ‘132
This media is not supported in your browser
VIEW IN TELEGRAM
12 Most Common git Commands YOU MUST KNOW

- init
- clone
- status
- add
- commit
- push
- pull
- branch
- checkout / switch
- merge
- diff
- log
๐Ÿ‘167๐Ÿ”ฅ1๐Ÿ˜1
This media is not supported in your browser
VIEW IN TELEGRAM
NoSQL vs SQL

NoSQL databases provide flexible data models ideal for diverse data structures and scalability.

1. Key-Value: Simple, uses key-value pairs (e.g., Redis).
2. Document: Stores data in JSON/BSON documents (e.g., MongoDB).
3. Graph: Manages complex relationships with nodes and edges (e.g., Neo4j).
4. Column Store: Optimized for analytics, organizes data by columns (e.g., Cassandra).

SQL databases, like RDBMS and OLAP, provide structured, relational storage for traditional and analytical needs

1. RDBMS: Traditional relational databases with tables (e.g., PostgreSQL & MySQL).
2. OLAP: Designed for complex analysis and multidimensional data (e.g., SQL Server Analysis Services).
๐Ÿ‘134
This media is not supported in your browser
VIEW IN TELEGRAM
6 Software ARCHITECTURAL PATTERNS

- Event Driven
- Layered
- Monolithic
- Microservice
- MVC
- Master Slave
๐Ÿ‘156
Explore Human Parsing Modality for Action Recognition

๐Ÿ“„ https://arxiv.org/pdf/2401.02138.pdf

๐Ÿ’ป https://github.com/liujf69/EPP-Net-Action
Please open Telegram to view this post
VIEW IN TELEGRAM
๐Ÿ‘45