
{"id":788,"date":"2022-10-25T02:33:14","date_gmt":"2022-10-25T02:33:14","guid":{"rendered":"https:\/\/www.starcoder.com\/wordpress\/?p=788"},"modified":"2022-10-25T03:20:44","modified_gmt":"2022-10-25T03:20:44","slug":"20-years-of-xrg","status":"publish","type":"post","link":"https:\/\/www.starcoder.com\/wordpress\/2022\/10\/20-years-of-xrg\/","title":{"rendered":"20 Years of XRG"},"content":{"rendered":"<p>Today hits an important milestone for one of my apps: it has been 20 years since I published the first public release of <a href=\"https:\/\/gaucho.software\/xrg\/\">XRG<\/a>. \u00a0XRG 0.1.1 was released on October 24, 2002 and was built for OS X 10.2, but also supposedly worked on OS X 10.1. \u00a0The release DMG file was a whopping 169 KB.<\/p>\n<p>XRG was the project I used to teach myself how to develop Cocoa apps using Objective-C. \u00a0Over the years, the code has been refactored several times over, but I\u2019m sure there is still some original code scattered about the project. \u00a0When XRG was introduced, modern Objective-C features didn\u2019t exist yet. \u00a0Garbage Collection was a fad that I was thankful to never use, and ARC wasn\u2019t even a figment of anyone\u2019s imagination, so retain\/release calls were everywhere. \u00a0Of course I switched to ARC when it became available, and I\u2019ve also refactored the code over the years to use Objective-C literals, dot notation for method calls, auto-synthesized object parameters, and object subscripting. \u00a0<\/p>\n<p>The one thing I haven\u2019t done is add any Swift code to the project. \u00a0I decided years ago that XRG will remain my love letter to the Objective-C language. \u00a0Objective-C was the perfect language for the OS X versions of the day, and there\u2019s just something about writing Obj-C code that feels comforting. \u00a0I certainly wouldn\u2019t use it for a new codebase for a multitude of reasons, but keeping XRG written entirely in Objective-C helps keep me proficient in the language, and also avoids all the headaches of a hybrid Obj-C\/Swift codebase. \u00a0To be honest, as long as Objective-C remains a first class citizen on macOS, I\u2019m not sure I ever will refactor it in Swift.<\/p>\n<p>Most importantly, I can thank XRG for jump-starting my career in Mac and iOS development. \u00a0If I hadn\u2019t created XRG, I wouldn\u2019t have been introduced to the Indie developer scene that inspired me to create Seasonality. \u00a0If I hadn&#8217;t created Seasonality, it\u2019s very likely I wouldn\u2019t be an iOS developer today. \u00a0It just boggles my mind to consider what path I\u2019d be on if I hadn\u2019t started working on XRG.<\/p>\n<p>Twenty years later, and it\u2019s still the first app I install on a new Mac. \u00a0Since I use it all the time, I&#8217;ve continued to maintain and improve it when time allows. \u00a0It has been an amazing ride\u2026here\u2019s to the next decade.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Today hits an important milestone for one of my apps: it has been 20 years since I published the first public release of XRG. \u00a0XRG 0.1.1 was released on October 24, 2002 and was built for OS X 10.2, but also supposedly worked on OS X 10.1. \u00a0The release DMG file was a whopping 169 [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[46],"tags":[],"class_list":["post-788","post","type-post","status-publish","format-standard","hentry","category-xrg-gaucho-software-2","post-preview"],"_links":{"self":[{"href":"https:\/\/www.starcoder.com\/wordpress\/wp-json\/wp\/v2\/posts\/788","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.starcoder.com\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.starcoder.com\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.starcoder.com\/wordpress\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.starcoder.com\/wordpress\/wp-json\/wp\/v2\/comments?post=788"}],"version-history":[{"count":2,"href":"https:\/\/www.starcoder.com\/wordpress\/wp-json\/wp\/v2\/posts\/788\/revisions"}],"predecessor-version":[{"id":790,"href":"https:\/\/www.starcoder.com\/wordpress\/wp-json\/wp\/v2\/posts\/788\/revisions\/790"}],"wp:attachment":[{"href":"https:\/\/www.starcoder.com\/wordpress\/wp-json\/wp\/v2\/media?parent=788"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.starcoder.com\/wordpress\/wp-json\/wp\/v2\/categories?post=788"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.starcoder.com\/wordpress\/wp-json\/wp\/v2\/tags?post=788"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}