<?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: Nikos Chamakos</title>
    <description>The latest articles on DEV Community by Nikos Chamakos (@nikoscham).</description>
    <link>https://dev.to/nikoscham</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%2F3183482%2Fb75f44e2-6b80-4560-b893-7aadfebb1beb.png</url>
      <title>DEV Community: Nikos Chamakos</title>
      <link>https://dev.to/nikoscham</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nikoscham"/>
    <language>en</language>
    <item>
      <title>From Engineer to Developer: Building FEAScript for Browser-Based FEM</title>
      <dc:creator>Nikos Chamakos</dc:creator>
      <pubDate>Mon, 20 Oct 2025 11:49:52 +0000</pubDate>
      <link>https://dev.to/nikoscham/from-engineer-to-developer-building-feascript-for-browser-based-fem-3cf6</link>
      <guid>https://dev.to/nikoscham/from-engineer-to-developer-building-feascript-for-browser-based-fem-3cf6</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/t/hacktoberfest"&gt;2025 Hacktoberfest Writing Challenge&lt;/a&gt;: Maintainer Spotlight&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  1. JavaScript is bad, right?
&lt;/h2&gt;

&lt;p&gt;Engineers hate installing software. As a chemical engineer myself, I’ve learned to focus on the practical side of things—how to provide solutions and overcome obstacles. Sure, issues like dependencies, version incompatibilities, or retrieving licenses for proprietary software can be seen as obstacles we should use our skills to overcome. But that’s not usually the main problem. What we really need is to reach our target with as few distractions as possible.&lt;/p&gt;

&lt;p&gt;In many cases in my work, I’ve faced challenges such as this:&lt;/p&gt;

&lt;p&gt;I wanted to develop a web application for a customer that would solve a system of equations using Finite Element Method, or FEM, (the method I know best). But I wanted to deliver it dependency-free. I didn’t want to tell the customer, “&lt;em&gt;Hey, here’s the web app, but you’ll need to install this and that.&lt;/em&gt;” These people don’t have time for that. I wanted it to be easy for them—and I wanted it to be free (or as low-cost as possible).&lt;/p&gt;

&lt;p&gt;So, what was the solution? Have you heard the phrase, “&lt;em&gt;If you want peace, prepare for war&lt;/em&gt;”? That’s exactly what I did. To avoid dependencies and incompatibilities, I dove deep into programming to build my own library.&lt;/p&gt;

&lt;p&gt;Of course, I’m not a freshman in software development—I’ve been coding throughout my PhD (I’ve always had an inclination toward programming). But I mostly worked in “&lt;em&gt;engineering languages&lt;/em&gt;” like C++ and Fortran. Creating software in these languages is super fast—I know—but it didn’t solve my problem. For this, I needed something notorious, something engineers love to hate: JavaScript!&lt;/p&gt;

&lt;p&gt;JavaScript can solve the dependency problem since it runs in the browser, right? But wait a minute—building a Finite Element solver in JavaScript? That’s crazy, right? It’s slow, right? It’s a disaster, right? &lt;strong&gt;Right?&lt;/strong&gt; 😨&lt;/p&gt;

&lt;h2&gt;
  
  
  2. I choose JavaScript
&lt;/h2&gt;

&lt;p&gt;So, two years ago, I started programming. Initially, I was translating some old Fortran routines I had developed during my PhD into JavaScript. It wasn’t easy (#$!@# 0-based indexing)! But I managed to create a proof of concept—a 2D heat conduction simulation. Still, there was much work to do.&lt;/p&gt;

&lt;p&gt;Another thing: JavaScript is a heavily object-oriented language, while Fortran (90, which I was using) is primarily functional. I’m still trying to shake off that functional mindset I inherited from Fortran. &lt;/p&gt;

&lt;p&gt;So I have chosen JavaScript, but &lt;strong&gt;not because it's easy&lt;/strong&gt;. The road is tough, but I have to go on.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. FEAScript
&lt;/h2&gt;

&lt;p&gt;The project has improved a lot since its beginning in 2023—and I’ve improved along with it. I’ve dived into the strange but brilliant world of JavaScript. I’ve taken courses, I’ve read (and read, and read…), and I’m still learning. The journey is just beginning.&lt;/p&gt;

&lt;p&gt;So what can FEAScript offer up to now?&lt;/p&gt;

&lt;p&gt;Using its API, you can run simulations for heat conduction, front propagation, or even solve a general-form partial differential equation. And you can do all of this directly in your browser (for web apps), in a Node.js environment, or on interactive JavaScript notebooks such as &lt;a href="https://scribbler.live/" rel="noopener noreferrer"&gt;Scribber&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;You can generate meshes using an in-house mesher (currently for simple cases), or import more advanced meshes created in &lt;a href="https://gmsh.info/doc/texinfo/gmsh.html" rel="noopener noreferrer"&gt;Gmsh&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;For solving linear systems, FEAScript supports LU decomposition (adapted from &lt;a href="https://mathjs.org/" rel="noopener noreferrer"&gt;math.js&lt;/a&gt;) and an in-house Frontal solver. For nonlinear systems, you can use the Newton-Raphson method.&lt;/p&gt;

&lt;p&gt;(Many more features are also included. Check the resources if you want to dive deeper - Hint: FEAScript is not as slow as a C++ developer might think, thanks to V8 🙏).&lt;/p&gt;

&lt;p&gt;And what does it need? It just &lt;strong&gt;needs your help&lt;/strong&gt;! &lt;/p&gt;

&lt;h2&gt;
  
  
  4. Hacktoberfest
&lt;/h2&gt;

&lt;p&gt;When I tagged my repository for Hacktoberfest, I honestly didn’t believe anyone would want to contribute. Not because I doubted the value of my project, but because Finite Elements is a niche topic. But luckily, reality proved me wrong!&lt;/p&gt;

&lt;p&gt;I’d describe these contributors as “&lt;em&gt;navigator explorers&lt;/em&gt;”—and that’s impressive. They want to contribute even though they might not know much about Finite Elements, or how difficult it can be to understand the whole codebase that’s (hmm) still not ideally written. 🙂&lt;/p&gt;

&lt;p&gt;I’ve had the honor of receiving contributions from such brave people, and that’s the beauty of open-source: they don’t have to fully understand the entire code. They can build a small piece—something necessary for the rest of the project, yet independent of it.&lt;/p&gt;

&lt;p&gt;That’s beautiful to my eyes. &lt;strong&gt;Thank you ❤️&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Recourses
&lt;/h2&gt;

&lt;p&gt;Wow, thanks for reading this far! So, what’s next?&lt;/p&gt;

&lt;p&gt;Want to learn more about the project?&lt;br&gt;
👉 Visit the &lt;a href="https://feascript.com/" rel="noopener noreferrer"&gt;website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Want to contribute?&lt;br&gt;
💻 Check out the &lt;a href="https://github.com/FEAScript/FEAScript-core" rel="noopener noreferrer"&gt;repository&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Want to support the project?&lt;br&gt;
❤️ Donate via &lt;a href="https://github.com/sponsors/FEAScript" rel="noopener noreferrer"&gt;GitHub sponsors&lt;/a&gt; or &lt;a href="https://liberapay.com/FEAScript/donate" rel="noopener noreferrer"&gt;Liberapay&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hacktoberfest</category>
      <category>opensource</category>
      <category>javascript</category>
    </item>
    <item>
      <title>JavaScript for Scientific Computations: Oxymoron or a Real Possibility?</title>
      <dc:creator>Nikos Chamakos</dc:creator>
      <pubDate>Sun, 10 Aug 2025 05:38:18 +0000</pubDate>
      <link>https://dev.to/nikoscham/javascript-for-scientific-computations-oxymoron-or-a-real-possibility-f8</link>
      <guid>https://dev.to/nikoscham/javascript-for-scientific-computations-oxymoron-or-a-real-possibility-f8</guid>
      <description>&lt;p&gt;Originally posted on the &lt;a href="https://blog.feascript.com/opinion/2025/04/04/javascript-for-scientific-computations.html" rel="noopener noreferrer"&gt;FEAScript Blog&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  A Heretical Statement
&lt;/h2&gt;

&lt;p&gt;Scientific computing has long been the domain of performance-heavy languages like C++ and Fortran. More recently, Python has gained traction, particularly in statistical analysis and machine learning. Yet, when it comes to computationally demanding tasks like finite element analysis (FEA), C++ and Fortran remain the standard.&lt;/p&gt;

&lt;p&gt;But what if JavaScript—a language originally designed for web development—could challenge this norm? At first glance, the idea sounds almost heretical. Can JavaScript truly handle scientific computing? Let's break it down from the ground up.&lt;/p&gt;




&lt;h2&gt;
  
  
  Speed
&lt;/h2&gt;

&lt;p&gt;In order to evaluate JavaScript's speed compared to C++ (which is widely accepted as a very fast language for scientific computations), we can reference the work of Franziska Hinkelmann (Engineering Manager at Google) &lt;sup id="fnref1"&gt;1&lt;/sup&gt;. According to her measurements, JavaScript is almost as fast as C++ for tasks like prime number calculation. This performance can be obtained by utilizing the TurboFan optimization feature of Google's V8 JavaScript engine. Similar comparisons by Momtchil Momtchev &lt;sup id="fnref2"&gt;2&lt;/sup&gt; show that JavaScript, optimized by TurboFan, can achieve performance close to C++ for tasks like matrix operations.&lt;/p&gt;




&lt;h2&gt;
  
  
  Libraries
&lt;/h2&gt;

&lt;p&gt;We cannot deny that JavaScript lacks the extensive scientific ecosystem of C++ or Fortran. However, several libraries have emerged in recent years that bring serious numerical capabilities to the JavaScript world:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://mathjs.org/" rel="noopener noreferrer"&gt;math.js&lt;/a&gt;&lt;/strong&gt;: A comprehensive math library supporting a wide range of mathematical operations, including matrix calculations and symbolic math.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/scijs/ndarray" rel="noopener noreferrer"&gt;ndarray&lt;/a&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;a href="https://github.com/scijs" rel="noopener noreferrer"&gt;scijs&lt;/a&gt;&lt;/strong&gt; ecosystem: A collection of libraries focused on multidimensional arrays and scientific computing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/numbers/numbers.js" rel="noopener noreferrer"&gt;numbers.js&lt;/a&gt;&lt;/strong&gt;: A library for basic numerical methods, such as root finding and integration.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://scribbler.live/" rel="noopener noreferrer"&gt;Scribbler&lt;/a&gt;&lt;/strong&gt;: A notebook tool with several preloaded scientific libraries.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://feascript.com/" rel="noopener noreferrer"&gt;FEAScript&lt;/a&gt;&lt;/strong&gt;: The finite element simulation library that we are developing, with a focus on simplicity and zero-install usage.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  WebAssembly (Wasm) Considerations
&lt;/h2&gt;

&lt;p&gt;While WebAssembly (Wasm) offers tremendous potential for accelerating browser-based numerical computation, it comes with caveats. As of today, no major FEA library has been successfully compiled to WebAssembly with full functionality. Compiling complex software like CalculiX is theoretically possible but brings numerous challenges: handling extensive C/C++ dependencies, dealing with file I/O in a sandboxed environment, and working around limitations in threading and hardware acceleration.&lt;/p&gt;

&lt;p&gt;On the other hand, pure JavaScript libraries offer a simpler, native solution for scientific computations that run entirely in the browser without compilation. Of course, a potential enhancement down the line might be integrating WebAssembly &lt;em&gt;selectively&lt;/em&gt; for the more performance-critical parts. But that’s for the future.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusions
&lt;/h2&gt;

&lt;p&gt;So, is JavaScript for scientific computing an oxymoron? Maybe not. While it may never dethrone C++ or Fortran in heavy-duty HPC environments, JavaScript is evolving. Thanks to modern engines like V8 and a growing ecosystem of numerical libraries, it's now possible to perform non-trivial scientific computations with reasonable performance.&lt;/p&gt;

&lt;p&gt;The future might not belong to JavaScript alone, but it certainly has a place at the scientific computing table!&lt;/p&gt;




&lt;h2&gt;
  
  
  References
&lt;/h2&gt;




&lt;ol&gt;

&lt;li id="fn1"&gt;
&lt;p&gt;F. Hinkelmann. "Speed up Your Node.js App with Native Addons." &lt;a href="https://www.fhinkel.rocks/posts/Speed-up-Your-Node-js-App-with-Native-Addons" rel="noopener noreferrer"&gt;https://www.fhinkel.rocks/posts/Speed-up-Your-Node-js-App-with-Native-Addons&lt;/a&gt;, 2017. ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn2"&gt;
&lt;p&gt;M. Momtchev. "In 2021, is there still a huge performance difference between JavaScript and C++ for CPU-bound?" &lt;a href="https://mmomtchev.medium.com/in-2021-is-there-still-a-huge-performance-difference-between-javascript-and-c-for-cpu-bound-8ff798d999d6" rel="noopener noreferrer"&gt;https://mmomtchev.medium.com/in-2021-is-there-still-a-huge-performance-difference-between-javascript-and-c-for-cpu-bound-8ff798d999d6&lt;/a&gt;, 2021. ↩&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;

</description>
      <category>feascript</category>
      <category>fem</category>
      <category>fea</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
