Recently, I gave a presentation to my research group at the university on Version Control Systems, specifically regarding why and how to use Git. Given my position as a grad student, that may sound odd, so here’s some context. While there exists a non-trivial amount of programming involved in the Geomatics department, our program does not necessarily cover a wealth of software engineering practices or techniques. Certainly one of the greater tragedies of the department, is that there’s simply not enough time to teach everybody both the underlying mathematics that we use day-to-day, and likewise how to better organize and write software. Given I do have some experience with version control software, I decided it may be useful for other members of my group if I presented some of this knowledge to the group. I recieved some really positive feedback from the presentation, and decided to make a post about it, if only for future reference.
It’s no secret to my friends that love programming. Moreover, to my colleagues at work, it’s no secret that I am very passionate about it as a hobby and as something I do (semi-)professionally. Unfortunately, or perhaps not-so-unfortunately, I learned to code while I was going through my Bachelors in Engineering. While my courses, and eventually my own self-directed learning stuck with me, I never quite got the same education as somebody who was in Software Engineering or Computer Science. Nonetheless, I have worked through some hellish codebases before, and while I may not be an enterprise coder, I do think that I’ve enough experience thus far to discuss an opinion that I’ve received a lot of flak for recently. If you haven’t guessed, I’m talking about code comments.
This post was largely inspired by an image I encountered while browsing the yard sale we call the internet. It’s somewhat contrived, but it’s a play on a classic riddle. I’m going to examine this riddle in detail, and hopefully slay god and have some fun with logic in the meantime.
One particular type of data that I find I increasingly deal with is 3D point cloud data. Point cloud data is fairly simple to grasp, it’s merely a “cloud” of points which each have their own individual coordinates in a Cartesian (think X, Y, Z) system. If that still doesn’t clear it up, watch this excellent video which shows off a cool example of point cloud data to model a shipping gallery. The sources of such point cloud datasets vary, including laser scanners, range cameras, or even your standard close-range photogrammetric techniques. In this post, I’m going to examine some typical techniques for fitting linear geometric shapes (lines, planes) to 3D point cloud data. It may get hairy with all the math involved, but I’ll try to keep the equations down where possible.
If you’ve ever owned a computer, you can probably imagine a few scenarios where having proper backups is helpful and to some extent, necessary. However, in many cases setting up an appropriate system for backing up your files can be either tedious or brings some air of uncertainty. Recently, I set up my own system for performing backups in (Debian) Linux, and I figured I’d write down my process for my own sake, but likewise to share with others who may not be so sure why or what they may want to backup.