<?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: James Kaguru Kihuha</title>
    <description>The latest articles on DEV Community by James Kaguru Kihuha (@jameskaguru).</description>
    <link>https://dev.to/jameskaguru</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%2F1162895%2Fb97c673c-f6aa-4621-b385-773441f96a6f.jpeg</url>
      <title>DEV Community: James Kaguru Kihuha</title>
      <link>https://dev.to/jameskaguru</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jameskaguru"/>
    <language>en</language>
    <item>
      <title>Deno X WebGPU X Threejs</title>
      <dc:creator>James Kaguru Kihuha</dc:creator>
      <pubDate>Tue, 02 Dec 2025 16:44:39 +0000</pubDate>
      <link>https://dev.to/jameskaguru/deno-x-webgpu-x-threejs-3poc</link>
      <guid>https://dev.to/jameskaguru/deno-x-webgpu-x-threejs-3poc</guid>
      <description>&lt;p&gt;As the tradition goes in computer graphics we always start by drawing our first triangle on the screen. Personally I did my first following the &lt;a href="https://webgpufundamentals.org/" rel="noopener noreferrer"&gt;WebGPU Fundamentals&lt;/a&gt;. And as you can imagine drawing the first triangle was easy, everything after that was a steep learning curve. But today we are on a different topic. Something I've been eyeing recently which is &lt;strong&gt;Deno WebGPU&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;For those who aren't familiar with Deno its basically a different runtime for JS, a swap in replacement for &lt;strong&gt;NodeJs&lt;/strong&gt; which comes with alot of benefits such as the one I'm talking about today which &lt;strong&gt;Deno WebGPU&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Deno WebGPU expands the reach of the JS Developer allowing them to run their graphics application natively on the users device rather than in a browser enviroment which has the benefit of less overhead and something which I'm really excited about is the reduced network cost of transfering large gltf models (These are basically the the 3d objects that get rendered). With this  out of the way you can now focus on creating a good 3d epxerience using Deno which can compile your 3d application into an executable than can be run on various platforms i.e macOS, Windows and Linux using &lt;a href="https://docs.deno.com/runtime/reference/cli/compile/" rel="noopener noreferrer"&gt;Deno compile&lt;/a&gt;.(At the moment deno doesn't support targeting Android)&lt;/p&gt;

&lt;p&gt;And as you can imagine inorder to create 3d applications you require a decent renderer and thats where threejs comes in. Threejs allows you to define your scene in JS and render them on a screen. Ideally threejs works on the browser but with a few tweaks here and there you can have threejs running on your native application.&lt;/p&gt;

&lt;p&gt;Anyway I've created a threejs starter repo to help track how the changes in threejs affect rendering on deno and you can download or even fork the repo to try it out.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/james-kaguru/threejs_starter/tree/dev" rel="noopener noreferrer"&gt;https://github.com/james-kaguru/threejs_starter/tree/dev&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Cheers. 🍻 &lt;/p&gt;

</description>
      <category>webdev</category>
      <category>deno</category>
      <category>threejs</category>
      <category>webgpu</category>
    </item>
    <item>
      <title>Auth servers</title>
      <dc:creator>James Kaguru Kihuha</dc:creator>
      <pubDate>Mon, 28 Jul 2025 12:10:46 +0000</pubDate>
      <link>https://dev.to/jameskaguru/auth-servers-d9p</link>
      <guid>https://dev.to/jameskaguru/auth-servers-d9p</guid>
      <description></description>
      <category>authentication</category>
      <category>api</category>
      <category>security</category>
      <category>systemdesign</category>
    </item>
    <item>
      <title>Introduction to Observability</title>
      <dc:creator>James Kaguru Kihuha</dc:creator>
      <pubDate>Thu, 12 Oct 2023 08:19:11 +0000</pubDate>
      <link>https://dev.to/jameskaguru/introduction-to-opentelemtry-2n3h</link>
      <guid>https://dev.to/jameskaguru/introduction-to-opentelemtry-2n3h</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Observability&lt;/strong&gt; is defined as how well one understands the inner workings of a system  by examining its output. It gives us the much needed insights into our applications that are in production. Observable applications are easy to troubleshoot as one is able to clearly identify bottlenecks in the applications or root cause of an issue. Observability is important especially with the increase in complexity of systems. Without observability, monitoring of large and complex applications would be a daunting task.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pillars of observability
&lt;/h2&gt;

&lt;p&gt;Observability is built on three pillars: &lt;strong&gt;metrics, logs, and traces&lt;/strong&gt;. All these together are known as &lt;strong&gt;telemetry data&lt;/strong&gt;. The applications being monitored are supposed to emit the data which can then be sent to an appropriate observability platform such as &lt;a href="https://newrelic.com/" rel="noopener noreferrer"&gt;NewRelic&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7vfrenz592zx28wbohj5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7vfrenz592zx28wbohj5.png" alt="NewRelic" width="800" height="356"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Metrics&lt;/strong&gt;&lt;br&gt;
Metrics are numerical measurements on a particular aspect of a system behaviour, such as CPU usage, memory usage, and request latency. Metrics are typically collected at regular intervals and aggregated over time.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fznl6p5s1ycr3vgwxa7g3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fznl6p5s1ycr3vgwxa7g3.png" alt="Metrics" width="800" height="554"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Metrics are used to indicate the measure of the performance of a system. e.g request latency is a metric that measures how fast a system responds to a request. Measuring the request latency helps one gain insights about how slow or fast a system is.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Logs&lt;/strong&gt;&lt;br&gt;
Logs are time stamped records of a wide variety of system activity. Logs are typically used for debugging but lack contextual information as compared to traces. Logs can contain a wide varierty of information which with one key piece of imformation being the log level. Log level indicates the severity of the logs, with the lowest level indicating an event or activity that requires a prompt attention. The logging levels of as per the &lt;a href="https://datatracker.ietf.org/doc/html/rfc5424#page-4" rel="noopener noreferrer"&gt;RFC5424&lt;/a&gt; standards as shown below. &lt;br&gt;
0 - &lt;strong&gt;Emergency&lt;/strong&gt;: system is unusable&lt;br&gt;
1 - &lt;strong&gt;Alert&lt;/strong&gt;: action must be taken immediately&lt;br&gt;
2 - &lt;strong&gt;Critical&lt;/strong&gt;: critical conditions&lt;br&gt;
3 - &lt;strong&gt;Error&lt;/strong&gt;: error conditions&lt;br&gt;
4 - &lt;strong&gt;Warning&lt;/strong&gt;: warning conditions&lt;br&gt;
5 - &lt;strong&gt;Notice&lt;/strong&gt;: normal but significant condition&lt;br&gt;
6 - &lt;strong&gt;Informational&lt;/strong&gt;: informational messages&lt;br&gt;
7 - &lt;strong&gt;Debug&lt;/strong&gt;: debug-level messages&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiom5491v205gs3ht3vd9.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiom5491v205gs3ht3vd9.jpeg" alt="Metrics" width="800" height="399"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Traces&lt;/strong&gt; &lt;br&gt;
A trace is a collection of spans that represent a complete request or transaction. Traces track the flow of a request through a distributed system, such as a web application or a microservices architecture. A span is a unit of work or operation within a trace. Spans are used to represent the individual operations that make up a trace, such as a web request, a database query or a service call.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd3rm3rtwpvfia9e0t1tu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd3rm3rtwpvfia9e0t1tu.png" alt="Trace and span example" width="800" height="334"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Traces are mainly used for debugging and troubleshooting purposes. They are the most detailed of the three pillars as they offer a really in depth view into an application.&lt;/p&gt;

&lt;h2&gt;
  
  
  Benefits of observability
&lt;/h2&gt;

&lt;p&gt;Observability has many benefits for DevOps teams and SREs, including:&lt;br&gt;
&lt;strong&gt;Improved debugging and troubleshooting:&lt;/strong&gt; Observability can help teams to quickly and easily identify the root cause of problems in production. This can lead to faster resolutions and less downtime.&lt;br&gt;
&lt;strong&gt;Improved performance and reliability:&lt;/strong&gt; Observability can help teams to identify and fix performance bottlenecks and reliability issues. This can lead to a better user experience and reduced costs.&lt;br&gt;
&lt;strong&gt;Reduced risk of outages and incidents:&lt;/strong&gt; Observability can help teams to identify potential problems before they cause outages or incidents. This can help to reduce the risk of service disruptions and data loss.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Future of Observability
&lt;/h2&gt;

&lt;p&gt;Observability is a rapidly evolving field. New tools and technologies are emerging all the time. One of the most exciting trends in observability is the OpenTelemetry project which seeks to provide a uniform way of creating and managing telemetry data. The project is a gamechanger as is it easens the setup of metrics, logs and traces through &lt;a href="https://opentelemetry.io/docs/concepts/instrumentation/automatic/" rel="noopener noreferrer"&gt;automatic instrumentation&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>devops</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
