<?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: Ken Eucker</title>
    <description>The latest articles on DEV Community by Ken Eucker (@keneucker).</description>
    <link>https://dev.to/keneucker</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%2F149623%2F98e0050d-a09c-4e1e-856e-8cd0911b92bd.jpeg</url>
      <title>DEV Community: Ken Eucker</title>
      <link>https://dev.to/keneucker</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/keneucker"/>
    <language>en</language>
    <item>
      <title>Graduating from contributor to author</title>
      <dc:creator>Ken Eucker</dc:creator>
      <pubDate>Fri, 17 Dec 2021 12:46:15 +0000</pubDate>
      <link>https://dev.to/keneucker/graduating-from-contributor-to-author-4kgn</link>
      <guid>https://dev.to/keneucker/graduating-from-contributor-to-author-4kgn</guid>
      <description>&lt;p&gt;Something happened yesterday that is sort of a big deal for me: I became the author and sole maintainer of a pre-existing open-source project that I have been collaborating on with the original author for several years.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Backstory&lt;/strong&gt;&lt;br&gt;
Back in 2018, when I started the BikeTag Project, I was looking to use a third party imagestore for this project that would allow for unlimited use without cost. Enter Imgur.&lt;/p&gt;

&lt;p&gt;Imgur allows for unlimited high resolution uploads at no cost and with high availability. (sometimes, lol)&lt;/p&gt;

&lt;p&gt;The BikeTag website (&lt;a href="https://biketag.org"&gt;biketag.org&lt;/a&gt;) relies entirely upon Imgur for it's functionality. There is no "database" backend for the BikeTag website or game. All data for the active game is stored within the title and description of the images uploaded to Imgur. Because of this, I now have a pretty intimate relationship with the Imgur API and the platform itself.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;As an Open-Source contributor&lt;/strong&gt;&lt;br&gt;
When I sit down to start a new Javascript project, and I have a need for an API to implement a feature, I find myself looking at two factors when adding a dependency: when was it last published, and is it a top-level package name? I found this Imgur library because it was named "imgur" on npm. It's really that simple. And although it hadn't been touched in about 5 years -- the interface was simple and it got me up and running within minutes as the &lt;a href="https://www.npmjs.com/package/imgur"&gt;Unofficial Imgur Javascript Library&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;As my use of the &lt;a href="https://github.com/kaimallea/node-imgur"&gt;Imgur&lt;/a&gt; library evolved, I ran into issues with the code that needed to be addressed. I had no real experience in collaborating with other developers on existing open-source projects with as high a usage as this project (over 1,000 monthly downloads at the time). I reached out to the original author and didn't get a response.&lt;/p&gt;

&lt;p&gt;Then, something important happened: the request module had been deprecated and with it came a scary message during installation/build. This package, request, is still used by millions of projects on GitHub and the deprecation warning impacted many of my projects. Most notably, I had a gulp build tool that was using request in many nested dependencies. So I went hunting and soon became a collaborator on several different node projects as I communicated with the original authors and begged for updates to their packages. In this process, I eventually tracked down and got a response from the Imgur author. Soon, an update to the imgur package followed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Journey To Author&lt;/strong&gt;&lt;br&gt;
It must be difficult for the author of a library to have a community need arise 6 years after you stopped using/needing/maintaing a body of code. The original author of the Imgur package put in the effort, though, and for that I am very grateful. In our collaboration, we sparked a rewrite of the package into TypeScript (attempt #2 for this project) that would also include unit testing.&lt;/p&gt;

&lt;p&gt;What transpired over the next 3 years was a combination of the original author's time and attention being pulled away from the project and my need to modify and use the code superceeding the desire to collaborate. This lead to me maintaining a separate fork of the project with features what would only later find themselves in the original body of work.&lt;/p&gt;

&lt;p&gt;Over the last year, the active development on the project stalled and I found myself relying on a codebase that had now  diverged greatly from it's origin. I was feeling stuck behind using GitHub alone and I decided to name the package something different and publish it to npm so I could use it more reliably in other projects. Then, last week, I get an update from the original author that they had decided to pass the project on and had chosen me to take over as authoer and maintainer, given that I was the most active in it's continued development.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Future Of Open-Source&lt;/strong&gt;&lt;br&gt;
As for the future of &lt;em&gt;my&lt;/em&gt; open-source goes: there's lots of work to be done!&lt;/p&gt;

&lt;p&gt;I had done an analysis of every fork of the project last year to see how the community was using the project. In the move to TypeScript, I sought to have an API that I could use both in NodeJS and in the Browser. This project, however, was started as &lt;code&gt;node-imgur&lt;/code&gt; and included the &lt;code&gt;fs&lt;/code&gt; library was used for supporting filesystem uploads out of the box.&lt;/p&gt;

&lt;p&gt;When I forked the node-imgur project to start the development of the new BikeTag-API, I immediately began working on an isomorphic build of the codebase so that it would be usable in both environments(server, client). Now, after readying the new BikeTag-API for release, I have a build of the Imgur package that is isomorphic and I am excited to introduce it to the community.&lt;/p&gt;

&lt;p&gt;It should be a fun journey! This project currently has 2,800 weekly downloads and at the point of transfer it had 180 stars and 49 forks. I plan to release the new, TS-isomorphic, Unofficial Imgur API at the end of this year. &lt;a href="https://github.com/keneucker/imgur"&gt;&lt;code&gt;imgur@2.0.0&lt;/code&gt;&lt;/a&gt; will drop filesystem support in favor of streams, forcing the community to provide their own fs strategies, while also aiming to reach feature parity with 100% of Imgur's API endpoints by 2.1.0 later in 2022.&lt;/p&gt;

&lt;p&gt;Thank you for reading about my experience in becoming an author and maintainer of a popular npm package. If you liked my story and want to support my FOSS work, please consider &lt;a href="https://github.com/sponsors/KenEucker"&gt;sponsoring me&lt;/a&gt; or becoming a &lt;a href="https://patreon.com/biketag"&gt;patron of the BikeTag Project&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;~ Ken&lt;/p&gt;

</description>
      <category>node</category>
      <category>javascript</category>
      <category>npm</category>
      <category>github</category>
    </item>
    <item>
      <title>Keeping it simple and sane</title>
      <dc:creator>Ken Eucker</dc:creator>
      <pubDate>Fri, 12 Mar 2021 18:20:30 +0000</pubDate>
      <link>https://dev.to/keneucker/keeping-is-simple-and-sane-20al</link>
      <guid>https://dev.to/keneucker/keeping-is-simple-and-sane-20al</guid>
      <description>&lt;p&gt;I started working with Sanity.io this month after a friend mentioned enjoying it. I have to say, I am also really enjoying the way that sanity provides an incredibly easy mechanism for creating structured content and a way to get that content into your website. I started using sanity for the BikeTag project and I can quickly see the power in this platform for the needs of that project.&lt;/p&gt;

&lt;p&gt;For BikeTag, all we have are images and data associated with those images. Up until using sanity.io (which we haven't officially launched on our site yet), our data and images have all been stored in Imgur. Imgur provides free, unlimited, image stores with a title and description field. From the onset, I believed that the needs of the BikeTag project wouldn't need anything more than that. We used the description and a pattern to store fields like: tagnumber, username, found location, and hint. Each image came from the imgur API with those fields and so we had no complex data needs beyond what little information was stored with each image.&lt;/p&gt;

&lt;p&gt;As our data needs have grown over the last three years of the project, I began searching for a data solution that would be quick and easy to implement but also provide the most value over time. This open-source project's biggest limitation are the costs, in that there is absolutely no money to pay for things like a datastore or for G suite.&lt;/p&gt;

&lt;p&gt;Enter sanity.io:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;2 free datastores per project&lt;/li&gt;
&lt;li&gt;unlimited projects(?)&lt;/li&gt;
&lt;li&gt;bundles with an imagestore, natively&lt;/li&gt;
&lt;li&gt;5GB of image storage per project&lt;/li&gt;
&lt;li&gt;generous quotas for developer/small projects&lt;/li&gt;
&lt;li&gt;available plans for open source projects&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sanity is great and their slack community is invaluable. The project maintainers and community are very responsive to help experts and newbies alike. Asking for help and getting pointed in the right direction happens so fast on their slack channel #help it beats out anything I've experienced on a support level. And it's all virtually free, until you have a high value need.&lt;/p&gt;

&lt;p&gt;I created this post to share my initial thoughts on Sanity.IO as a platform and to present my first community contribution to the sanity ecosystem:&lt;br&gt;
&lt;a href="https://www.sanity.io/schemas/set-slug-on-publish-with-referenced-field-value-ZMcsmDfWFDUo5_BrLtVpY"&gt;https://www.sanity.io/schemas/set-slug-on-publish-with-referenced-field-value-ZMcsmDfWFDUo5_BrLtVpY&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thanks for reading, check out:&lt;br&gt;
&lt;a href="https://sanity.io"&gt;https://sanity.io&lt;/a&gt;&lt;br&gt;
&lt;a href="https://biketag.org"&gt;https://biketag.org&lt;/a&gt;&lt;/p&gt;

</description>
      <category>sanityio</category>
      <category>devops</category>
      <category>opensource</category>
      <category>javascript</category>
    </item>
    <item>
      <title>My Success in Open Source projects on GitHub</title>
      <dc:creator>Ken Eucker</dc:creator>
      <pubDate>Tue, 30 Apr 2019 08:47:48 +0000</pubDate>
      <link>https://dev.to/keneucker/my-success-in-open-source-projects-on-github-46jk</link>
      <guid>https://dev.to/keneucker/my-success-in-open-source-projects-on-github-46jk</guid>
      <description>&lt;p&gt;I am happy to be able to speak to some success in open source collaboration as the turn of 2019 has proven to be a year of contributions to projects much larger than myself. It's all quite nerdy from here on out, so feel free to enjoy as much of  the tl;dr as you can and know that I am excited for more of the same!&lt;/p&gt;

&lt;p&gt;tl;dr: responded to security issues on many gulp packages, made contributions to gulp-dropbox, became a maintainer and contributor for gulp-include, made dependency updates to understrap/understrap-child, and published my first React component on npm!&lt;/p&gt;

&lt;p&gt;Back in November of 2018, a security issue was discovered in a package that was widely distributed as a dependency for many other packages. I discovered this after running a security audit on my dependencies and discovered that many were simply out of date. In responding to the security issue, I found myself trying to reach out to and contact directly the developers who had projects from two to four years old but hadn't yet addressed the needed dependency updates.&lt;/p&gt;

&lt;p&gt;I have been working extensively with gulp in building my own dynamic site generator and build pipeline, as well as using it to power my one-off websites. Gulp is wonderfully powerful and I appreciate all of the hard work that has gone into the library. I also enjoy the fact that plugins can be years old with no modifications to their code. The gulp community really has compartmentalization down to a manageable degree that "one and done" can truly be a reality. I enjoy this, to a reasonable extent, of course.&lt;/p&gt;

&lt;p&gt;By March of this year, after emailing and mentioning people on twitter and Instagram, I found myself being challenged to come up with fixes and solutions to the inner workings of code that I had previously used only as replaceable utility functions. I had always wanted to collaborate on open source projects and when my contributions first got published I was ecstatic. First it was gulp-dropbox, then I found myself becoming a maintainer for gulp-include in order to bring that project up to date with a community that had grown to 12,000. &lt;/p&gt;

&lt;p&gt;Now, as I continue to evolve as a WordPress developer utilizing version 5 with the gutenberg editor and guten blocks, I'm feeling even more empowered. Any project that I start working with that presents any issue for me I simply fork and fix and create a PR according to the contributing guidelines of the project. If they accept it, great! If they ignore it, that's alright too. The beauty of all this open source code is that I can also use my diverged copy of the code to suit my specific needs and continue on.&lt;/p&gt;

&lt;p&gt;In the last month I have been really active in creating forks on github and creating more open source code projects of my own. I discovered the works of Ahmad Awais, a brilliantly talented and incredibly accomplished open source developer and have been very inspired ever since. I created a React component for creating a dropdown to select a post using the wp-api and it's something I feel could really be useful for others as well. So I published that component and hope to have an update in the future with more success on that project!&lt;/p&gt;

&lt;p&gt;Yay for Open Source! Yay for free code! Yay for collaboration!&lt;/p&gt;

</description>
      <category>github</category>
      <category>wordpress</category>
      <category>javascript</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
