<?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: Aditya Kumar</title>
    <description>The latest articles on DEV Community by Aditya Kumar (@as1100k).</description>
    <link>https://dev.to/as1100k</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%2F1149176%2F1609ab55-e04b-43e7-9d95-38ee3f784c30.jpg</url>
      <title>DEV Community: Aditya Kumar</title>
      <link>https://dev.to/as1100k</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/as1100k"/>
    <language>en</language>
    <item>
      <title>Bevy Discord 0.17 Migration Guide</title>
      <dc:creator>Aditya Kumar</dc:creator>
      <pubDate>Mon, 27 Oct 2025 18:22:40 +0000</pubDate>
      <link>https://dev.to/as1100k/bevy-discord-017-migration-guide-3f8c</link>
      <guid>https://dev.to/as1100k/bevy-discord-017-migration-guide-3f8c</guid>
      <description>&lt;p&gt;Hello Bevy developers!&lt;/p&gt;

&lt;p&gt;The latest version of &lt;a href="https://github.com/AS1100K/bevy-discord" rel="noopener noreferrer"&gt;&lt;code&gt;bevy-discord&lt;/code&gt;&lt;/a&gt;, &lt;strong&gt;version 0.7&lt;/strong&gt; is now live! This is a significant update that brings support for the much-anticipated &lt;strong&gt;Bevy 0.17&lt;/strong&gt;. This release also introduces several breaking changes designed to align the crate with Bevy's new APIs and improve overall consistency.&lt;/p&gt;

&lt;p&gt;This blog will walk you through all the necessary steps to get your project updated. Let's dive in!&lt;/p&gt;

&lt;h2&gt;
  
  
  Breaking Changes
&lt;/h2&gt;

&lt;p&gt;This release focuses on renaming and restructuring to match the upstream changes in Bevy 0.17.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Update Bevy and &lt;code&gt;bevy-discord&lt;/code&gt; Dependencies
&lt;/h3&gt;

&lt;p&gt;First, you'll need to update the versions in your &lt;code&gt;Cargo.toml&lt;/code&gt; file to use Bevy 0.17 and &lt;code&gt;bevy-discord&lt;/code&gt; 0.7.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight toml"&gt;&lt;code&gt;&lt;span class="c"&gt;# Before (in your Cargo.toml)&lt;/span&gt;
&lt;span class="nn"&gt;[dependencies]&lt;/span&gt;
&lt;span class="py"&gt;bevy&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"0.16"&lt;/span&gt;
&lt;span class="py"&gt;bevy-discord&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"0.6"&lt;/span&gt;

&lt;span class="c"&gt;# After&lt;/span&gt;
&lt;span class="nn"&gt;[dependencies]&lt;/span&gt;
&lt;span class="py"&gt;bevy&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"0.17"&lt;/span&gt;
&lt;span class="py"&gt;bevy-discord&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"0.7"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Aligning with Bevy 0.17: &lt;code&gt;Events&lt;/code&gt; are now &lt;code&gt;Messages&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;This is a key change, and it's driven directly by an important update in Bevy 0.17.&lt;/p&gt;

&lt;p&gt;In an effort to improve conceptual clarity, Bevy has renamed "buffered events" (the kind sent with &lt;code&gt;EventWriter&lt;/code&gt; and read with &lt;code&gt;EventReader&lt;/code&gt;) to &lt;code&gt;Messages&lt;/code&gt;. The term &lt;code&gt;Event&lt;/code&gt; is now used for a different purpose within the engine.&lt;/p&gt;

&lt;p&gt;To stay consistent with this new terminology, &lt;code&gt;bevy-discord&lt;/code&gt; has followed suit. The entire &lt;code&gt;bevy_discord::events&lt;/code&gt; module has been renamed to &lt;code&gt;bevy_discord::messages&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;You'll need to update your use statements accordingly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Before&lt;/span&gt;
&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nn"&gt;bevy_discord&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nn"&gt;events&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// After&lt;/span&gt;
&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nn"&gt;bevy_discord&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nn"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Structs Renamed to &lt;code&gt;...Message&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Following the move from Events to Messages, all the relevant structs have been renamed to reflect their new purpose and now carry a &lt;code&gt;Message&lt;/code&gt; suffix.&lt;/p&gt;

&lt;h4&gt;
  
  
  Bot Messages (Formerly Bot Events)
&lt;/h4&gt;

&lt;p&gt;The old &lt;code&gt;B&amp;lt;EVENT_NAME&amp;gt;&lt;/code&gt; pattern has been replaced with a more descriptive name.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Old Pattern&lt;/strong&gt;: &lt;code&gt;bevy_discord::events::bot::B&amp;lt;EVENT_NAME&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;New Pattern&lt;/strong&gt;: &lt;code&gt;bevy_discord::messages::bot::&amp;lt;EVENT_NAME&amp;gt;Message&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;There are some exceptions exists like &lt;code&gt;BReadyEvent&lt;/code&gt; is now &lt;code&gt;BotReadyMessage&lt;/code&gt; and &lt;code&gt;BMessage&lt;/code&gt; is now &lt;code&gt;DiscordMessage&lt;/code&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Here's a practical example of a system handling the Reaction message:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Before&lt;/span&gt;
&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nn"&gt;bevy_discord&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nn"&gt;events&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nn"&gt;bot&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;BReactionAdd&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;handle_reaction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;mut&lt;/span&gt; &lt;span class="n"&gt;events&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;EventReader&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;BReactionAdd&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;reaction&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;events&lt;/span&gt;&lt;span class="nf"&gt;.read&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// Logic here ...&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// After&lt;/span&gt;
&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nn"&gt;bevy_discord&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nn"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nn"&gt;bot&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;ReactionAddMessage&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;handle_reaction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;mut&lt;/span&gt; &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;MessageReader&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;ReactionAddMessage&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;reaction&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="nf"&gt;.read&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// Logic here ...&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Rich Presence Messages (Formerly Rich Presence Events)
&lt;/h4&gt;

&lt;p&gt;Similarly, the Rich Presence event types have also been streamlined.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Old Pattern&lt;/strong&gt;: &lt;code&gt;bevy_discord::events::rich_presence::RichPresence&amp;lt;EVENT_NAME&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;New Pattern&lt;/strong&gt;: &lt;code&gt;bevy_discord::messages::rich_presence::&amp;lt;EVENT_NAME&amp;gt;Message&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. System Set Renamed: &lt;code&gt;DiscordSet&lt;/code&gt; to &lt;code&gt;DiscordSystems&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;To better align with Bevy's current naming conventions for system sets, &lt;code&gt;DiscordSet&lt;/code&gt; has been renamed to &lt;code&gt;DiscordSystems&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  New Features &amp;amp; Improvements
&lt;/h2&gt;

&lt;p&gt;This release isn't just about breaking changes! It also includes some nice quality-of-life improvements.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;Debug&lt;/code&gt; and &lt;code&gt;Clone&lt;/code&gt; Derivations&lt;/strong&gt;: Many core types, including plugins, configs, messages, and resources, now derive &lt;code&gt;Debug&lt;/code&gt; and &lt;code&gt;Clone&lt;/code&gt;. This makes debugging your application and managing state much easier.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rust 2024 Edition&lt;/strong&gt;: The crate has been upgraded to the Rust 2024 edition, keeping it modern and performant.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Improved Docs&lt;/strong&gt;: The documentation on &lt;a href="//docs.rs/bevy-discord"&gt;docs.rs&lt;/a&gt; is now clearer.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's it! The migration to &lt;code&gt;bevy-discord&lt;/code&gt; 0.7 primarily involves updating names and paths to align with the excellent changes in Bevy 0.17.&lt;/p&gt;

&lt;p&gt;Happy Coding!&lt;/p&gt;

</description>
      <category>rust</category>
      <category>bevy</category>
      <category>discord</category>
      <category>migrationguide</category>
    </item>
    <item>
      <title>GSOC 2025 Report: AprilTag, FAST, and ORB Detectors</title>
      <dc:creator>Aditya Kumar</dc:creator>
      <pubDate>Mon, 01 Sep 2025 09:50:04 +0000</pubDate>
      <link>https://dev.to/as1100k/gsoc-2025-report-apriltag-fast-and-orb-detectors-45bn</link>
      <guid>https://dev.to/as1100k/gsoc-2025-report-apriltag-fast-and-orb-detectors-45bn</guid>
      <description>&lt;p&gt;This project adds three detection/feature modules to &lt;code&gt;kornia-rs&lt;/code&gt; ecosystem: a full AprilTag Detector, FAST Corner Detector, and an ORB Detector. The implementations are CPU-focused, modular, well-documented, and include examples, tests, and benchmarks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Goals
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Implement AprilTag detection and decoding pipeline (configurable, mult-family)&lt;/li&gt;
&lt;li&gt;Implement newer complete FAST corner detection&lt;/li&gt;
&lt;li&gt;Implement ORB Detector&lt;/li&gt;
&lt;li&gt;Provide examples, tests, and benchmarks; compare to common libraries when possible&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  AprilTag Detectors
&lt;/h2&gt;

&lt;p&gt;An AprilTag is a fiducial marker: a flat, square pattern that encodes a small binary code inside a black/white border. Once detected and decoded in an image, a tag lets you compute camera pose relative to the tag if you know the tag's physical size and the camera intrinsics. They are widely used for camera calibration, robot localization, AR markers and many tasks where 2D to 3D reference is useful.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why AprilTags are useful:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Robust detection under many viewing angles and lighting conditions.&lt;/li&gt;
&lt;li&gt;Provide direct geometric constraints for pose estimation&lt;/li&gt;
&lt;li&gt;Small payload, easy to print and deploy&lt;/li&gt;
&lt;/ul&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%2Fnd3wwsj6ctxj9gw92bfd.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%2Fnd3wwsj6ctxj9gw92bfd.jpeg" alt="The entire AprilTag decoding pipeline" width="800" height="450"&gt;&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%2F7yqhf3eefpdj9n7qboph.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%2F7yqhf3eefpdj9n7qboph.png" alt="AprilTag Detection output" width="800" height="527"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;During the first half of the coding period, I primarily worked on creating the &lt;a href="https://github.com/kornia/kornia-rs/tree/main/crates/kornia-apriltag" rel="noopener noreferrer"&gt;&lt;code&gt;kornia-apriltag&lt;/code&gt;&lt;/a&gt; crate that focuses on AprilTag Detection. It breaks down the entire decoding pipeline in the following steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Adaptive Threshold&lt;/li&gt;
&lt;li&gt;Connected Components (aka Union Find)&lt;/li&gt;
&lt;li&gt;Gradient Clusters&lt;/li&gt;
&lt;li&gt;Quad Fitting&lt;/li&gt;
&lt;li&gt;Tag Decoding&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The API of &lt;code&gt;kornia-apriltag&lt;/code&gt; is a well documented crate which is easy to use while being super customizable. The following code snippet is the easiest way to use the crate:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nn"&gt;kornia_apriltag&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;config&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;DecodeTagsConfig&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;all&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="k"&gt;mut&lt;/span&gt; &lt;span class="n"&gt;decoder&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;AprilTagDecoder&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;image_size&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;detections&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;decoder&lt;/span&gt;&lt;span class="nf"&gt;.decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;img&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="c1"&gt;// Do whatever you want with the detections, or just plot them&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But you can go much further by choosing which Tag Families to consider detection and their individual configs and even replace/customize any step of the pipeline as all of the functions are well-documented and exposed publicly.&lt;/p&gt;

&lt;p&gt;You can find a complete example in &lt;a href="https://github.com/kornia/kornia-rs/tree/main/examples/apriltag" rel="noopener noreferrer"&gt;&lt;code&gt;examples/apriltag&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;PRs associated: &lt;a href="https://github.com/kornia/kornia-rs/pull/380" rel="noopener noreferrer"&gt;#380&lt;/a&gt;, &lt;a href="https://github.com/kornia/kornia-rs/pull/384" rel="noopener noreferrer"&gt;#384&lt;/a&gt;, &lt;a href="https://github.com/kornia/kornia-rs/pull/406" rel="noopener noreferrer"&gt;#406&lt;/a&gt;, &lt;a href="https://github.com/kornia/kornia-rs/pull/410" rel="noopener noreferrer"&gt;#410&lt;/a&gt;, &lt;a href="https://github.com/kornia/kornia-rs/pull/419" rel="noopener noreferrer"&gt;#419&lt;/a&gt;, &lt;a href="https://github.com/kornia/kornia-rs/pull/420" rel="noopener noreferrer"&gt;#420&lt;/a&gt;, &lt;a href="https://github.com/kornia/kornia-rs/pull/429" rel="noopener noreferrer"&gt;#429&lt;/a&gt;, &lt;a href="https://github.com/kornia/kornia-rs/pull/433" rel="noopener noreferrer"&gt;#433&lt;/a&gt;, &lt;a href="https://github.com/kornia/kornia-rs/pull/435" rel="noopener noreferrer"&gt;#435&lt;/a&gt;, &lt;a href="https://github.com/kornia/kornia-rs/pull/436" rel="noopener noreferrer"&gt;#436&lt;/a&gt;, &lt;a href="https://github.com/kornia/kornia-rs/pull/438" rel="noopener noreferrer"&gt;#438&lt;/a&gt;, &lt;a href="https://github.com/kornia/kornia-rs/pull/440" rel="noopener noreferrer"&gt;#440&lt;/a&gt;, &lt;a href="https://github.com/kornia/kornia-rs/pull/444" rel="noopener noreferrer"&gt;#444&lt;/a&gt;, &lt;a href="https://github.com/kornia/kornia-rs/pull/458" rel="noopener noreferrer"&gt;#458&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Issues associated: &lt;a href="https://github.com/kornia/kornia-rs/issues/408" rel="noopener noreferrer"&gt;#408&lt;/a&gt;, &lt;a href="https://github.com/kornia/kornia-rs/issues/450" rel="noopener noreferrer"&gt;#450&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Resources
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/AprilRobotics/apriltag" rel="noopener noreferrer"&gt;AprilRobotics/apriltag&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/powei-lin/aprilgrid-rs" rel="noopener noreferrer"&gt;powei-lin/aprilgrid-rs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://april.eecs.umich.edu/papers/details.php?name=olson2011tags" rel="noopener noreferrer"&gt;https://april.eecs.umich.edu/papers/details.php?name=olson2011tags&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://april.eecs.umich.edu/papers/details.php?name=wang2016iros" rel="noopener noreferrer"&gt;https://april.eecs.umich.edu/papers/details.php?name=wang2016iros&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://april.eecs.umich.edu/papers/details.php?name=krogius2019iros" rel="noopener noreferrer"&gt;https://april.eecs.umich.edu/papers/details.php?name=krogius2019iros&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ORB Detectors
&lt;/h2&gt;

&lt;p&gt;ORB (Oriented FAST and Rotated BRIEF) is a feature detection and description algorithm optimized for speed and robustness. It combines FAST for keypoint detection, orientation assignment for each keypoint, and BRIEF-like binary descriptors that are rotation-aware. ORB is widely used for feature matching, visual odometry, and as input to SLAM pipelines.&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%2Fn6owzhjzdo1ycz5zp69j.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%2Fn6owzhjzdo1ycz5zp69j.png" alt="Basic ORB Detector" width="800" height="497"&gt;&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%2F9zee62hsba2wqwut3d3a.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%2F9zee62hsba2wqwut3d3a.png" alt="ORB Detector on live webcam feed and a static image" width="800" height="385"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The second half of the coding period, I implemented an ORB Detector in the &lt;a href="https://github.com/kornia/kornia-rs/tree/main/crates/kornia-imgproc" rel="noopener noreferrer"&gt;&lt;code&gt;kornia-imgproc&lt;/code&gt;&lt;/a&gt; crate.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nn"&gt;kornia_imgproc&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nn"&gt;features&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="k"&gt;mut&lt;/span&gt; &lt;span class="n"&gt;orb_detector&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;OrbDetector&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nn"&gt;OrbDetectorConfig&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;default&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="n"&gt;image&lt;/span&gt;&lt;span class="nf"&gt;.size&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="n"&gt;orb_detector&lt;/span&gt;&lt;span class="nf"&gt;.detect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;image&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;descriptors&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;orb_detector&lt;/span&gt;&lt;span class="nf"&gt;.extract&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;image&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;Detection&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;keypoints&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;..&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;orb_detector&lt;/span&gt;&lt;span class="nf"&gt;.get_detection&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The matching of the descriptors is also as simple as the detection:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Your detection logic&lt;/span&gt;

&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;matches&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;match_descriptors&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;first_descriptors&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;second_descriptors&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;None&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;None&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// let's plot them&lt;/span&gt;
&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="k"&gt;mut&lt;/span&gt; &lt;span class="n"&gt;coords&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;Vec&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;i2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;matches&lt;/span&gt;&lt;span class="nf"&gt;.iter&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;kp1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;keypoints1&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i1&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;kp2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;keypoints2&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i2&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

    &lt;span class="n"&gt;coords&lt;/span&gt;&lt;span class="nf"&gt;.push&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;kp1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;kp2&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Your plotting logic&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;PRs associated: &lt;a href="https://github.com/kornia/kornia-rs/pull/457" rel="noopener noreferrer"&gt;#457 (UNDER REVIEW)&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Resources
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/scikit-image/scikit-image" rel="noopener noreferrer"&gt;scikit-image&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/opencv/opencv" rel="noopener noreferrer"&gt;OpenCV&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ieeexplore.ieee.org/document/6126544" rel="noopener noreferrer"&gt;https://ieeexplore.ieee.org/document/6126544&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  FAST Corner Detector
&lt;/h2&gt;

&lt;p&gt;FAST (Features from Accelerated Segment Test) is a high-speed corner detector. For each candidate pixel, FAST compares the intensities of a circle of surrounding pixels to the center pixel. If a contiguous arc of pixels is all brighter (or all darker) than the center by a threshold, then the pixel is classified as a corner.&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%2F57ov7kw8i4zcllip783t.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%2F57ov7kw8i4zcllip783t.png" alt="Key points identified by FAST Corner Detector" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;During the second half of the coding period while implementing ORB Detector I needed complete implementation of FAST corner detector. So, I implemented a newer complete version of FAST Corner detector in &lt;a href="https://github.com/kornia/kornia-rs/tree/main/crates/kornia-imgproc" rel="noopener noreferrer"&gt;&lt;code&gt;kornia-imgproc&lt;/code&gt;&lt;/a&gt; crate.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nn"&gt;kornia_imgproc&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nn"&gt;features&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;FastDetector&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="k"&gt;mut&lt;/span&gt; &lt;span class="n"&gt;fast_detector&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;FastDetector&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;image_size&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;threshold&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;arc_length&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;min_distance&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;fast_detector&lt;/span&gt;&lt;span class="nf"&gt;.compute_corner_response&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;image&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;keypoints&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;fast_detector&lt;/span&gt;&lt;span class="nf"&gt;.extract_keypoints&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="c1"&gt;// Go ahead plot the keypoints&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can find a complete example using FAST Corner Detector in &lt;a href="https://github.com/kornia/kornia-rs/tree/main/examples/fast_detector" rel="noopener noreferrer"&gt;&lt;code&gt;examples/fast_detector&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;PRs associated: &lt;a href="https://github.com/kornia/kornia-rs/pull/460" rel="noopener noreferrer"&gt;#460 (UNDER REVIEW)&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Resources
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/scikit-image/scikit-image" rel="noopener noreferrer"&gt;scikit-image&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.sciencedirect.com/science/article/abs/pii/S0262885697000565" rel="noopener noreferrer"&gt;https://www.sciencedirect.com/science/article/abs/pii/S0262885697000565&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Timeline
&lt;/h2&gt;

&lt;p&gt;The following is the list of all the PR/Issue(s) created by me during the GSoC Coding Period.&lt;/p&gt;

&lt;p&gt;Goal Classification&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;AprilTag&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ORB Detector&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;FAST Detector&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Other&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Date&lt;/th&gt;
&lt;th&gt;Title&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Goal&lt;/th&gt;
&lt;th&gt;Link&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1.&lt;/td&gt;
&lt;td&gt;Jun 2&lt;/td&gt;
&lt;td&gt;Add kornia-apriltag crate&lt;/td&gt;
&lt;td&gt;PR&lt;/td&gt;
&lt;td&gt;AprilTag&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/kornia/kornia-rs/pull/380" rel="noopener noreferrer"&gt;#380&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2.&lt;/td&gt;
&lt;td&gt;Jun 2&lt;/td&gt;
&lt;td&gt;Use &lt;code&gt;std::hint::black_box&lt;/code&gt; instead of &lt;code&gt;criterion::black_box&lt;/code&gt; because it’s deprecated&lt;/td&gt;
&lt;td&gt;PR&lt;/td&gt;
&lt;td&gt;Other&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/kornia/kornia-rs/pull/381" rel="noopener noreferrer"&gt;#381&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3.&lt;/td&gt;
&lt;td&gt;Jun 2&lt;/td&gt;
&lt;td&gt;Update ONNX example to use ort 2.0.0-rc.10&lt;/td&gt;
&lt;td&gt;PR&lt;/td&gt;
&lt;td&gt;Other&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/kornia/kornia-rs/pull/382" rel="noopener noreferrer"&gt;#382&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4.&lt;/td&gt;
&lt;td&gt;Jun 4&lt;/td&gt;
&lt;td&gt;Add Adaptive Threshold Binary functions&lt;/td&gt;
&lt;td&gt;PR&lt;/td&gt;
&lt;td&gt;AprilTag&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/kornia/kornia-rs/pull/384" rel="noopener noreferrer"&gt;#384&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5.&lt;/td&gt;
&lt;td&gt;Jun 8&lt;/td&gt;
&lt;td&gt;Fix kornia-io docs.rs not building&lt;/td&gt;
&lt;td&gt;PR&lt;/td&gt;
&lt;td&gt;Other&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/kornia/kornia-rs/pull/388" rel="noopener noreferrer"&gt;#388&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6.&lt;/td&gt;
&lt;td&gt;Jun 20&lt;/td&gt;
&lt;td&gt;Add Connected Components for AprilTag detection&lt;/td&gt;
&lt;td&gt;PR&lt;/td&gt;
&lt;td&gt;AprilTag&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/kornia/kornia-rs/pull/406" rel="noopener noreferrer"&gt;#406&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7.&lt;/td&gt;
&lt;td&gt;Jun 21&lt;/td&gt;
&lt;td&gt;Safe Implementation of Image TileIterator yielding borrowed slices&lt;/td&gt;
&lt;td&gt;Issue&lt;/td&gt;
&lt;td&gt;AprilTag&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/kornia/kornia-rs/issues/408" rel="noopener noreferrer"&gt;#408&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8.&lt;/td&gt;
&lt;td&gt;Jun 21&lt;/td&gt;
&lt;td&gt;Implement Zero-copy Image conversion in kornia-py&lt;/td&gt;
&lt;td&gt;Issue&lt;/td&gt;
&lt;td&gt;Other&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/kornia/kornia-rs/issues/409" rel="noopener noreferrer"&gt;#409&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9.&lt;/td&gt;
&lt;td&gt;Jun 23&lt;/td&gt;
&lt;td&gt;Add gradient cluster detection&lt;/td&gt;
&lt;td&gt;PR&lt;/td&gt;
&lt;td&gt;AprilTag&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/kornia/kornia-rs/pull/410" rel="noopener noreferrer"&gt;#410&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10.&lt;/td&gt;
&lt;td&gt;Jun 26&lt;/td&gt;
&lt;td&gt;Replace clippy-action with direct cargo clippy command&lt;/td&gt;
&lt;td&gt;PR&lt;/td&gt;
&lt;td&gt;Other&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/kornia/kornia-rs/pull/412" rel="noopener noreferrer"&gt;#412&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11.&lt;/td&gt;
&lt;td&gt;Jun 29&lt;/td&gt;
&lt;td&gt;Add Quad Fitting&lt;/td&gt;
&lt;td&gt;PR&lt;/td&gt;
&lt;td&gt;AprilTag&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/kornia/kornia-rs/pull/419" rel="noopener noreferrer"&gt;#419&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;12.&lt;/td&gt;
&lt;td&gt;Jul 1&lt;/td&gt;
&lt;td&gt;Add AprilTag Decoding&lt;/td&gt;
&lt;td&gt;PR&lt;/td&gt;
&lt;td&gt;AprilTag&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/kornia/kornia-rs/pull/420" rel="noopener noreferrer"&gt;#420&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;13.&lt;/td&gt;
&lt;td&gt;Jul 5&lt;/td&gt;
&lt;td&gt;Remove &lt;code&gt;license-file&lt;/code&gt; from &lt;code&gt;smol_vlm&lt;/code&gt; example&lt;/td&gt;
&lt;td&gt;PR&lt;/td&gt;
&lt;td&gt;Other&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/kornia/kornia-rs/pull/424" rel="noopener noreferrer"&gt;#424&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;14.&lt;/td&gt;
&lt;td&gt;Jul 10&lt;/td&gt;
&lt;td&gt;Add support for multiple AprilTag Families&lt;/td&gt;
&lt;td&gt;PR&lt;/td&gt;
&lt;td&gt;AprilTag&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/kornia/kornia-rs/pull/429" rel="noopener noreferrer"&gt;#429&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;15.&lt;/td&gt;
&lt;td&gt;Jul 16&lt;/td&gt;
&lt;td&gt;Add &lt;code&gt;TagFamilyKind::all&lt;/code&gt; method and use it in DecodeTagsConfig&lt;/td&gt;
&lt;td&gt;PR&lt;/td&gt;
&lt;td&gt;AprilTag&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/kornia/kornia-rs/pull/433" rel="noopener noreferrer"&gt;#433&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;16.&lt;/td&gt;
&lt;td&gt;Jul 18&lt;/td&gt;
&lt;td&gt;Reset sharpening buffer for every Quad&lt;/td&gt;
&lt;td&gt;PR&lt;/td&gt;
&lt;td&gt;AprilTag&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/kornia/kornia-rs/pull/435" rel="noopener noreferrer"&gt;#435&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;17.&lt;/td&gt;
&lt;td&gt;Jul 18&lt;/td&gt;
&lt;td&gt;Add AprilTag detection example&lt;/td&gt;
&lt;td&gt;PR&lt;/td&gt;
&lt;td&gt;AprilTag&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/kornia/kornia-rs/pull/436" rel="noopener noreferrer"&gt;#436&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;18.&lt;/td&gt;
&lt;td&gt;Jul 19&lt;/td&gt;
&lt;td&gt;Add AprilTag Benchmark&lt;/td&gt;
&lt;td&gt;PR&lt;/td&gt;
&lt;td&gt;AprilTag&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/kornia/kornia-rs/pull/438" rel="noopener noreferrer"&gt;#438&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;19.&lt;/td&gt;
&lt;td&gt;Jul 22&lt;/td&gt;
&lt;td&gt;Update &lt;code&gt;apriltag-imgs&lt;/code&gt; submodule URL&lt;/td&gt;
&lt;td&gt;PR&lt;/td&gt;
&lt;td&gt;AprilTag&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/kornia/kornia-rs/pull/440" rel="noopener noreferrer"&gt;#440&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;20.&lt;/td&gt;
&lt;td&gt;Aug 2&lt;/td&gt;
&lt;td&gt;Add Image downscaling support in AprilTag Detection&lt;/td&gt;
&lt;td&gt;PR&lt;/td&gt;
&lt;td&gt;AprilTag&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/kornia/kornia-rs/pull/444" rel="noopener noreferrer"&gt;#444&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;21.&lt;/td&gt;
&lt;td&gt;Aug 27&lt;/td&gt;
&lt;td&gt;Implement ORB Detector&lt;/td&gt;
&lt;td&gt;PR&lt;/td&gt;
&lt;td&gt;ORB Detector&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/kornia/kornia-rs/pull/457" rel="noopener noreferrer"&gt;#457&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;22.&lt;/td&gt;
&lt;td&gt;Aug 28&lt;/td&gt;
&lt;td&gt;Add benchmark aprilgrid-rs&lt;/td&gt;
&lt;td&gt;PR&lt;/td&gt;
&lt;td&gt;AprilTag&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/kornia/kornia-rs/pull/458" rel="noopener noreferrer"&gt;#458&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;23.&lt;/td&gt;
&lt;td&gt;Aug 29&lt;/td&gt;
&lt;td&gt;Implement newer FAST Corner Detector&lt;/td&gt;
&lt;td&gt;PR&lt;/td&gt;
&lt;td&gt;FAST Detector&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/kornia/kornia-rs/pull/460" rel="noopener noreferrer"&gt;#460&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;24.&lt;/td&gt;
&lt;td&gt;Aug 30&lt;/td&gt;
&lt;td&gt;Add Gaussian Blur support for u8 images&lt;/td&gt;
&lt;td&gt;Issue&lt;/td&gt;
&lt;td&gt;Other&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/kornia/kornia-rs/issues/461" rel="noopener noreferrer"&gt;#461&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;25.&lt;/td&gt;
&lt;td&gt;Aug 30&lt;/td&gt;
&lt;td&gt;Add HarrisResponse support for u8 images&lt;/td&gt;
&lt;td&gt;Issue&lt;/td&gt;
&lt;td&gt;Other&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/kornia/kornia-rs/issues/462" rel="noopener noreferrer"&gt;#462&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Challenges faced
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;My university end-term exams overlapped with the first half of the coding period, and I initially expected this to limit my time. In practice, I became more interested in AprilTags and allocated increasing effort to the project.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Since &lt;code&gt;kornia-rs&lt;/code&gt; is a low-level Computer Vision library, I need to understand the algorithms/detectors that I implemented well. But the issue was that I was in my 2nd semester and core computer science stuff starts from 3rd semester in my university. Luckily I understood the papers well and understood the code of existing implementations which made it slightly easier.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Learning Outcomes
&lt;/h2&gt;

&lt;p&gt;I learned a lot during these 3 months and had a lot of new experiences. Prior to this, I had not worked in a team; my experience was primarily solo projects and occasional open-source contributions. But during this time, we had weekly sync and regular conversation of what and how to do the next thing. It was truly a wonderful experience.&lt;/p&gt;

</description>
      <category>googlesummerofcode2025</category>
      <category>gsoc2025</category>
    </item>
    <item>
      <title>Year in Review: What 2024 Taught Me as a Developer</title>
      <dc:creator>Aditya Kumar</dc:creator>
      <pubDate>Wed, 27 Aug 2025 06:41:10 +0000</pubDate>
      <link>https://dev.to/as1100k/year-in-review-what-2024-taught-me-as-a-developer-58hd</link>
      <guid>https://dev.to/as1100k/year-in-review-what-2024-taught-me-as-a-developer-58hd</guid>
      <description>&lt;p&gt;As 2024 comes to a close, I find myself reflecting on a year that has been truly transformative. This year was filled with milestones, new opportunities, and countless lessons that have shaped my journey as a developer and a learner. Here’s a glimpse into what I accomplished, learned, and aspired to achieve in 2024.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Major Milestone: Ambala College of Engineering
&lt;/h2&gt;

&lt;p&gt;This year began with a significant step in my academic journey—getting into Ambala College of Engineering. It marked the culmination of my high school years and the beginning of a new chapter filled with opportunities to grow as an engineer and innovator.&lt;/p&gt;

&lt;h2&gt;
  
  
  Diving Into Open Source Contributions
&lt;/h2&gt;

&lt;p&gt;One of my biggest focuses this year was contributing to open source projects. Here are some highlights:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Wikimedia
&lt;/h3&gt;

&lt;p&gt;While I wasn’t actively involved in the MediaWiki organization this year, I am planning to be more engaged in 2025 as I deeply admire what Wikimedia does for society—free education for everyone! Along the way, I also learned how to use Gerrit and managed to get 4 PRs closed across multiple VCS platforms, including Gerrit and the Wikisource project on GitHub.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Azalea-rs
&lt;/h3&gt;

&lt;p&gt;With six pull requests merged, I made significant contributions to &lt;a href="https://github.com/azalea-rs/azalea/pulls?q=is%3Apr+author%3AAS1100K+" rel="noopener noreferrer"&gt;azalea-rs&lt;/a&gt;, a Rust library for creating Minecraft Bots, improving its functionality and learning a lot in the process.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Rust
&lt;/h3&gt;

&lt;p&gt;This year also marked my first contribution to the Rust programming language. While &lt;a href="https://github.com/rust-lang/rust/pull/134880" rel="noopener noreferrer"&gt;the PR&lt;/a&gt; is still awaiting merging due to holiday delays, it was a milestone in my journey with Rust. The experience taught me about the rigor and community involvement required in contributing to such a widely used language.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The PR has been merged 🎉&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Bevy-Discord: Bridging Discord with Bevy
&lt;/h2&gt;

&lt;p&gt;I created and open-sourced a Rust crate called &lt;a href="https://github.com/as1100k/bevy-discord" rel="noopener noreferrer"&gt;&lt;strong&gt;bevy-discord&lt;/strong&gt;&lt;/a&gt;, which connects the Discord API with the game engine Bevy. Solving the challenges of integrating these two platforms was a fulfilling experience. While the crate is already functional, I’m planning to add a &lt;a href="https://discord.com/developers/docs/rich-presence/overview" rel="noopener noreferrer"&gt;rich presence&lt;/a&gt; feature to make it even more versatile and useful for game developers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Initiating rs-workspace: A Successor to actions-rs
&lt;/h2&gt;

&lt;p&gt;Inspired by GitHub’s &lt;a href="https://github.com/actions-rs" rel="noopener noreferrer"&gt;&lt;strong&gt;actions-rs&lt;/strong&gt;&lt;/a&gt; project, I initiated &lt;a href="https://github.com/rs-workspace" rel="noopener noreferrer"&gt;&lt;strong&gt;rs-workspace&lt;/strong&gt;&lt;/a&gt;, aiming to provide enhanced Rust workflow automation tools. So far, I’ve built one action, &lt;a href="https://github.com/rs-workspace/rust-toolchain" rel="noopener noreferrer"&gt;rust-toolchain&lt;/a&gt;, and I’m excited to expand this project further in the coming months.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cargo-Wiki: A WIP Rust Documentation Generator
&lt;/h2&gt;

&lt;p&gt;I began working on &lt;a href="https://github.com/as1100k/cargo-wiki" rel="noopener noreferrer"&gt;&lt;strong&gt;cargo-wiki&lt;/strong&gt;&lt;/a&gt;, a WIP tool designed to generate Rust documentation in markdown format. My goal is to make the output exceptionally human-readable, avoiding HTML tags wherever possible. This project led to my first Rust contribution when I identified a documentation error in &lt;a href="https://github.com/rust-lang/rustdoc-types/" rel="noopener noreferrer"&gt;rustdoc-types&lt;/a&gt;, but it was a error in &lt;a href="https://github.com/rust-lang/rust/tree/master/src/librustdoc" rel="noopener noreferrer"&gt;librustdoc&lt;/a&gt; which &lt;a href="https://github.com/rust-lang/rust/issues/134853" rel="noopener noreferrer"&gt;my PR&lt;/a&gt; attempts to fix. The process of resolving this issue was immensely rewarding and deepened my understanding of Rust’s internals.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building a Portfolio and Blog
&lt;/h2&gt;

&lt;p&gt;I created my personal portfolio and blog using Astro, employing some unconventional methods to keep the project scalable and organized:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Git Submodules for Content Management&lt;/strong&gt;: Instead of storing blog content directly in the repo, I used a separate content repository linked as a git submodule. Symbolic links for directories made the setup seamless, ensuring my website repo remains fork-friendly.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/as1100k/adityais.dev/compare/0a1bd1..76ab37" rel="noopener noreferrer"&gt;Commit &lt;code&gt;0a1bd1&lt;/code&gt; to &lt;code&gt;76ab37&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Hosting Journey&lt;/strong&gt;: Initially, I hosted the website on Netlify, leveraging their dynamic functions for up-to-date GitHub repo cards. Later, I migrated to Cloudflare Pages for better infrastructure, and finally settled on GitHub Pages. By automating builds and submodule updates with GitHub Actions, I created an efficient, maintenance-free deployment process.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/AS1100K/adityais.dev/commit/0a1bd18fea0e91ee9efa19fe5ac37ed2bc1f4871" rel="noopener noreferrer"&gt;GitHub Pages Migration Commit&lt;/a&gt;, &lt;a href="https://github.com/AS1100K/adityais.dev/pull/1" rel="noopener noreferrer"&gt;Cloudflare Pages Migration PR #1&lt;/a&gt;, &lt;a href="https://github.com/AS1100K/adityais.dev/commit/fc93ad83e9f13c5366379ce0ee64d4060aa795b3" rel="noopener noreferrer"&gt;Original Netlify Commit&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Challenges, Lessons, and the Road Ahead
&lt;/h2&gt;

&lt;p&gt;This year wasn’t without its challenges. Balancing multiple projects, managing time, and diving into new technologies pushed me out of my comfort zone. However, these challenges also provided invaluable lessons and skills that I’ll carry forward into the new year.&lt;/p&gt;

&lt;p&gt;As I look to 2025, I’m excited to continue working on my existing projects, contributing to open source, and exploring new opportunities for growth. Here’s to another year of innovation and learning!&lt;/p&gt;

</description>
      <category>yearinreview</category>
    </item>
  </channel>
</rss>
