A 3D Software Engineer is a programmer who builds software applications specifically designed for 3D graphics and visualization. They essentially bridge the gap between the artistic world of 3D modelling and the technical world of computer science.
Here's a breakdown of their responsibilities:
Software Development:
They write code and develop software applications that deal with 3D graphics, like animation tools, modelling software, or rendering engines.
Understanding 3D Concepts:
They have a deep understanding of 3D graphics and rendering algorithms. This allows them to optimize software for efficient creation and display of 3D visuals.
Problem-Solving:
They troubleshoot and debug software to ensure it functions smoothly and delivers high-quality results.
Collaboration:
They often work alongside software development teams and may even collaborate with 3D artists or designers to understand their needs and create effective tools.
Here are some of the industries that employ 3D Software Engineers:
- Video Game Development
- Film and Animation Studios
- Architecture and Engineering
- Medical Visualization
- Scientific Research
- Building software which will be used for developing flight-simulation, rocket and missile simulation, etc
If you're interested in this field, you'll need strong skills in computer science and mathematics, along with a passion for 3D graphics. Expertise in programming languages like C++ or Python and being familiar with 3D software like Maya or Blender would be a big plus.
My son, Ridit is at the juncture of software development and 3D modelling - having expertise in both of these fields.
Here are some of the animations my son Ridit created using Blender...
This is how it started for Ridit - the journey to learn 3D modelling.
And here are some others...
The passage of Time...
The Water Tornado...
The making of a filter coffee maker... (Fusion 360)
Here's his technical blog...
This blog mainly has stories of his journey as a software professional through the maze called software.
I am not a Nuclear Energy expert - but these days with the help of Gemini and ChatGPT, we can get the right information easily. This blog post is just to disseminate the good work done by the scientists of Bharat.
I am sure the Bharat that my son will be experiencing - will be much different than what we saw after coming out from the engineering colleges in '90s.
#JaiHind
Let's come to the point...
India's ambitious three-stage nuclear program is a strategic plan for developing nuclear power using domestic uranium and thorium reserves. It was formulated by Homi Bhabha, a renowned physicist in the 1950s. The ultimate goal of this program is to achieve long-term energy security for the country by effectively utilizing its abundant thorium reserves.
Here's a breakdown of the three stages:
Stage 1: Pressurized Heavy Water Reactors (PHWRs)
PHWRs use natural uranium as fuel and heavy water (deuterium oxide) as a moderator and coolant.
These reactors are efficient in extracting energy from uranium because heavy water is a more effective neutron moderator than regular water.
India has successfully built and operated numerous PHWRs, and they currently form the backbone of the country's nuclear power generation.
Stage 2: Fast Breeder Reactors (FBRs)
FBRs are designed to produce more fissile material (plutonium) than they consume.
They achieve this by using plutonium or enriched uranium as fuel and a liquid metal (like sodium) as coolant.
The plutonium produced in FBRs can be used as fuel in further reactors, reducing dependence on mined uranium.
India is actively developing FBR technology, and the Prototype Fast Breeder Reactor (PFBR) at Kalpakkam is a significant milestone in this direction.
Stage 3: Advanced Nuclear Power Systems (Thorium Reactors)
This stage focuses on utilizing India's vast thorium reserves for sustainable energy generation.
Thorium itself is not fissile, but it can be converted into fissile uranium-233, which can be used as fuel in nuclear reactors.
Advanced reactor designs like Advanced Heavy Water Reactors (AHWRs) and Molten Salt Reactors (MSRs) are being explored for efficient thorium utilization.
Significance of the 3-stage program:
India has limited uranium reserves but vast thorium reserves. This program allows India to achieve energy security by effectively using its domestic resources.
FBRs help in plutonium production, reducing reliance on imported fissile material.
Thorium-based reactors offer a sustainable and long-term solution for India's energy needs due to the abundance of thorium.
Challenges:
Developing and deploying advanced reactor technologies like FBRs and thorium reactors is a complex and time-consuming process.
Nuclear safety and waste management are critical concerns that need to be addressed effectively.
Overall, India's three-stage nuclear program is a far-sighted approach to ensuring the country's long-term energy security. It leverages domestic resources and promotes sustainable nuclear power generation.
Economic nuke on America - the Baltimore Bridge Collapse ...
Why we must upgrade our critical systems from legacy software which was not written keeping cyber attack in mind.
Watch...
In the early part of my software career, i worked on the Human Machine Interface (HMI) software of two different companies - Omron's NTWin and Mitsubishi's GOT.
As the Human Machine Interface or the HMI software used for SCADA were not written keeping cyber attacks on mind, they are just plain vulnerable to the hackers.
Within the various SCADA solutions, the HMI represents the clearest and most present target for attackers. The HMI acts as a centralised hub for managing critical infrastructure. If an attacker succeeds
in compromising the HMI, nearly anything can be done to the infrastructure itself, including causing physical damage to SCADA equipment. Even if attackers decide not to disrupt operations, they can still exploit the HMI to gather information about a system or disable alarms and notifications meant to alert operators of danger to SCADA equipment.
Read... Humans of Universe... Read...
Here is a document on the vulnerability of the HMI software.
From recent incidents in the USA - the vulnerability of HMI...
Oldsmar, Florida water treatment plant (2021):
Attackers remotely accessed the HMI via insecure remote tools (e.g., TeamViewer with shared/default passwords) and tried to poison water by increasing sodium hydroxide levels.
Unitronics PLC/HMI hacks (2023 onward):
IRGC-affiliated actors ("CyberAv3ngers") defaced HMI screens at U.S. water facilities and elsewhere by exploiting internet-exposed devices with default passwords ("1111"). please educate me on these two incidents
And here we go - the sophisticated malware called Stuxnet - which was responsible for crippling the Iranian nuclear plant...
Can't believe?
Watch how it targeted the SIEMENS PLC at a nuclear plant in Iran.
Stuxnet was crafted to exploit specific vulnerabilities in Windows and the Siemens software stack. The worm utilized multiple zero-day exploits in Windows and targeted Siemens Step7 software running on Windows systems to reprogram PLCs. Since Stuxnet's payload and propagation mechanisms were tailored to this environment, a system running Linux would inherently be immune to these specific exploits.
You know that most legacy HMI software was written using C++, and memory corruption is one of the most common vulnerabilities in HMI software.
I, therefore, was just wondering about the suitability of usage of Rust instead of C++ for writing Human Machine Interface software as the former is designed to handle the memory corruption issue quite nicely.
And voila - my guess was correct...
Rust can be a compelling alternative to C++ for developing SCADA Human-Machine Interfaces (HMIs), especially considering the memory safety advantages Rust offers. Here are some key points on why Rust could be a better choice:
Memory Safety
Elimination of Common Vulnerabilities:
Rust's design inherently prevents common memory-related issues such as buffer overflows, null pointer dereferencing, and use-after-free errors. These types of vulnerabilities are prevalent in systems programmed in C++.
Borrow Checker:
Rust’s borrow checker enforces strict ownership and borrowing rules at compile-time, ensuring that memory safety issues are caught early in the development process, thereby reducing the risk of memory corruption in deployed systems.
Performance
Comparable to C++: Rust is designed to offer performance comparable to C and C++. It achieves this through zero-cost abstractions, meaning you can write high-level code without incurring a performance penalty.
Efficient Concurrency: Rust's concurrency model prevents data races at compile time, allowing for safe and efficient concurrent programming, which is crucial for the high reliability and performance required in SCADA systems.
Modern Language Features
Error Handling: Rust provides robust error handling mechanisms through its Result and Option types, promoting safer and more explicit error management compared to exceptions in C++.
Strong Type System: Rust’s strong and expressive type system helps catch more errors at compile time, reducing runtime bugs and improving overall code quality.
Ecosystem and Tooling
Growing Ecosystem: Rust’s ecosystem is rapidly growing, with many libraries and tools available for systems programming, networking, and interfacing with hardware, which are essential for SCADA systems.
Cargo: Rust’s package manager and build system, Cargo, simplifies dependency management, builds, and project organization, contributing to developer productivity and code maintainability.
Adoption and Community
Industry Adoption: While Rust is still relatively new compared to C++, it has been gaining traction in various industries, including embedded systems and safety-critical applications, demonstrating its suitability for high-reliability domains like SCADA.
Active Community: Rust has a vibrant and supportive community, which helps in quickly resolving issues, sharing best practices, and continuously improving the language and its ecosystem.
Challenges
Learning Curve: The main challenge in adopting Rust is its steep learning curve, especially for developers accustomed to C++. The concepts of ownership, borrowing, and lifetimes can take time to master.
In summary, Rust offers significant advantages in terms of memory safety, performance, and modern language features, making it a strong candidate for developing SCADA HMIs. Its ability to prevent common vulnerabilities associated with memory corruption makes it particularly appealing for the high-security requirements of SCADA systems.
And now as CrowdStrike hitting hard, the C++ memory exception is already in news.
Is null pointer exception the reason for CrowdStrike? see below...
The observer design pattern is a very popular design pattern in the Object Oriented world. I must admit, I first saw the usefulness of this design pattern while studying the document view architecture of the MFC source code.
Later on, I used this pattern in many places.
There is a lot of similarity between the Observer Pattern, the Callback mechanism, and the Event Handler pattern in Java. Usually, the callback method is used when there is only one observer who awaits the signal from the subject.
So, let me put it in this fashion.
Suppose, there is a central document that is viewed by a few applications - someone is viewing it in a spreadsheet, someone as a Pie chart, and so on.
Now if the data in the document is updated, all the viewers must be updated and they should synchronise their views with the latest data set. So basically all the viewers were observing the central data. The moment it changes, all the observers get their respective views updated.
The class diagram and the sequence diagram of the observer pattern will be as follows.
Class Diagram
Sequence Diagram
Here goes an example of Observer Pattern written in Rust.
It's truly said that if you teach a person, actually two people learn.
As a guru of my young son, Ridit, I taught him many design patterns and he implemented them in three different languages.
Here's his discussion on Adaptor Design Pattern.
Please go through his explanation.
Today I implemented his work of Adapter Pattern using Rust.
In Rust... I keep my Trust.
Rust addresses memory safety and concurrency issues that plague other systems languages like C and C++. This makes it attractive for building reliable, high-performance systems.
Rust is already being used in embedded systems, operating system kernels, and high-performance computing. Rust's memory safety makes it ideal for applications where security is paramount.
In simple words, the future of Rust programming language looks bright.
Here's the source code for the Adapter Design Pattern in Rust.
The strategy design pattern is a behavioral design pattern that lets you dynamically switch the behavior of an object at runtime. It achieves this by separating the core functionality of the object from the specific algorithms it uses.
Here's a breakdown of the core concepts:
Strategy Interface: This interface defines the common operation that all the different algorithms will implement. This ensures that all the interchangeable strategies can be used by the context object.
Concrete Strategies: These are the classes that implement the specific algorithms. Each concrete strategy class implements the strategy interface and provides its own unique behavior for the operation.
Context Object: This object holds a reference to a strategy object and delegates the specific operation to it. It can change its behavior at runtime by switching the reference to a different concrete strategy.
Here's an example of an UML diagram for the Strategy Design Pattern.
In my code, the
traitTransportationToAirport{
fngoing_to_the_airport(&self);
}
plays the role of the Strategy interface.
Three concrete Strategy classes have been derived from this interface - namely, By_Ola, By_Bus and By_Rapido.
These concrete strategy classes help to pick up a specific way for going to the airport dynamically, i.e., in runtime.
Here's the source code for Strategy Pattern implemented in Rust.