Hello everyone. This will be my last post for my Open Source electives, and I can honestly say I’ve enjoyed my time working with the assortment of projects I was able to get involved with. Without further ado, my updates:
I had a few outstanding issues to resolve with earlier PRs. For my issue 122 fix I had to resolve a nit modeswitch had with my sh.mv documentation. I had explicitly included ‘./’ in most of my examples, and he said that since that would be implicit I could just omit every reference. I also had to fix an asynchronicity issue in my Unix timestamp fix (done() was called twice in one test, and I resolved by making timestamp conversion synchronous and catching parse errors instead).
My first new issue, issue 158, involved adding a new test to fs.watch()’s spec to ensure that when a file is changed, watches on hardlinks are updated as well. I added the test, and was able to verify that it worked, but found out that fs.watch() is not working correctly. When original files are modified, watchers tracking hardlinks will not be notified, so my test currently times out. When I receive more feedback on my PR, I’ll probably be filing a new bug to report this issue.
My next issue, issue 87, required an implementation of fs.fsync(), a command which typically writes open file buffers to disk when called. Because of the way filer’s architecture is laid out at the moment, fsync() doesn’t apply (we don’t have unwritten buffers that would wait for such a command). For the time being, fsync() has been implemented as a no-op. I did include some basic tests and documentation changes, as well.
Issue 7 required project documentation to be altered so that it explicitly mentioned the accepted type for our ‘buffer’ parameters. The only valid argument is a subclass of ArrayBufferView; ArrayBuffers were invalid, but there was no mention of that in the docs, and for some it would be counter-intuitive. This was a quick and straight-forward change.
Issue 97 was a similarly simple documentation change. In an earlier issue, Dave and modeswitch had determined that we will not be implementing fs.realpath() at this point in the software stack, because there is no awareness of a current working directory. For that reason, it has been relocated to filer.io, which should provide that context. I changed the documentation entry to explain this choice in case users wanted it for node.js parity.
My last issue, issue 42 required modifications to fs.read() to accommodate node.js’ legacy argument format. I managed to get this implemented (despite some headaches with remapping arguments), and included a test.
Finally, I wanted to summarize how these courses have shaped my opinions of open source development. Above all, I have realized the value of open cooperation and collaboration. These tenets result in an unequaled environment for learning best practices and production level programming. Having a networked community (via Github and IRC) presents opportunities that wouldn’t appear in typical bedroom coding scenarios. Through these courses, I learned that JS is actually a viable language for web application development (and that the open frameworks supporting that paradigm are much more refined than I would have thought). I was introduced to a variety of technologies and patterns that I would not have been exposed to in my regular courses; marketable skills that have helped me in my co-operative education pursuits. It also gave me the ability to orient myself in new code bases, experience I had been sorely lacking until now. I’ve learned that if I want to be successful moving forward, I need to make more of an effort to assert myself, communicate with my peers, and schedule ample time for professional development.
Thanks everyone. I just wanted to say that I’ve had fun, and I certainly intend to continue with my contributions.
GLHF
Kevin Kofler
PRs:
Issue 86
Issue 122
Issue 158
Issue 87
Issue 7
Issue 97
Issue 42