I have gone through a number of tutorials on newer front-end tools like AngularJS, Grunt, and Backbone. Nothing compares to building something of your own, though. After dipping my toe into the water numerous times before, I dove into the deep end and started combining these tools on my own.
I normally feel fairly well-versed in Git, which is to say, I can commit code, I can see what’s happening, and I generally know enough to not screw anything up. I thought my Git Fu was tight enough that I at least had a good grasp on all that could be done with the version control system until I came across a project that used submodules. In Git, a submodule is a connection from one repository to another. Say, for instance, you’re working on a suite of similar products. You want each one to have its own repository. That makes plenty of sense. But suppose each of these products shared a common messaging platform. Instead of maintaining this same code across the suite of products, which would defeat a lot of the purpose of setting up a VCS, you can give it its own subrepo, and have each product in your suite set up a submodule to reference that repo. All seems well and good, but there are a few gotchas to keep in mind.
As I’ve started diving into more client-side heavy web apps, I’m finding myself constantly asking why any given tool was developed. Lots of web technologies can look cool, but what problem is each trying to solve. Bower was one that mystified me, even as I let Yeoman go ahead and install it in my latest project. It describes itself as a package manager for the web. As a user of npm, I was aware of various packages and tools that can be installed, but I did not understand what packages Bower could be capable of handling. What problem is Bower trying to solve?
It goes without saying that the possibilities involving jQuery Selectors are vast. I recently needed to select all table cells within a given table that only spanned one row. The start to this seemed easy enough. The not selector would be able to target all td’s with a rowspan, but how could the selector cover all possible rowspans? It might be easy to assume that the values would be small enough.