Posts from January 2015
-
Today was the .css assessment, and after working late (and falling asleep while working a few times) and doing the practice twice, then studying the solutions last night and this morning, I kicked ass.
To summarize: good design often has a logic, and good instructors are consistent, almost without fail. If there are exceptions, they are for a good reason - your instructor is working at the forefront of the field and the rules aren't established, the design language you're working with has some foibles that you have to work around.
In our case, I've managed to pick up on and benefit from the design habits of our CSS specialist, Jonathan, and have slowly been trying to incorporate them into my own design language. For instance, set consistent (and generous) margins/padding, keep visual space symmetrical, tend to favor making item borders on the inside and container borders on the outside, … and so forth. I haven't built all of this into my site yet—it still looks like baby's first webpage, although thankfully not as 90s as all that—but there are a lot of things coming together very quickly.
Case in point: investing in figuring out backbone means that I've basically added three full collections, three full models, and half a dozen views to my app today alone. I also added two utility … packages? files? to my app that enable some neat stuff, one that makes my life easier, and another that enables a pretty cool "live search" feature to the website.
Yeah, it's all pretty silly overall—I'm reinventing the wheel—but I know why and how I'm reinventing the wheel here, which is okay by me.
There's very little of what I'm doing that is really challenging now, which is okay after the weekend. To use a workout metaphor, this is my plateau, where I'm consolidating gains before looking for more of a training effect. Again, I'm okay with that.
Meanwhile, I'm able to explain to a lot of people what their code is doing wrong, or able to sort through arbitrary code and understand it pretty idiomatically; I'm much more confident with
git
and amalias
ing my most common commands regularly, and can find my way around Atom like nothing.Wow, they have taught us something. :P
-
I was actually going to post a partial update about my work over the weekend, but didn't manage to find the time. It might be a worthwhile task to do on my train commute, given that the normal sources of distraction are quite boring lately (although I suspect that others might think the same of my "content" on platforms such as fb).
Long story short: after running a couple errands on Saturday, I made it to the office by 6 pm, and worked straight through until about 2am, slightly tipsy and having learning a whole lot about how rails and backbone routes interact. There are a couple people who were here when I got here, and I had a very enriching time between talking through errors and feature development. I ended up bouncing a lot of ideas off of one guy in particular, and that helped me nail down a particularly complicated process that had been giving me fits.
Sunday, I woke up around 10 and started at the office around 2, and worked there for ten hours until the lack of running water in the building (long story) and the late hour drove me home. (I was also running on fumes, energy-wise). It was a long day of debugging, thinking through the backbone object model, and offering moral support to the other people working from the office.
I, by no means, have the most broken nor the most functional app, but I feel that I'm in a good place right now—which is good, since I'm setting my own pace :P I'm confident in the kernel of my project: every re-factor so far has been on the order of 5-20 lines of code, with a noticeably left-leaning Poisson distribution (i.e. more short patches than long).
Today, then, I woke up not sure what day it was, and I was somewhat disappointed to realize it was "only" Monday. When you work through the weekend, there's not much point trying to differentiate between each day. Nonetheless, today was better than a typical day at work, from my past life… this feels like just "what I do" now.
One thing that I like about the approach I've been taking toward development is that at every stage, my app works. I have yet to have a period, once I finished the core view, that adding a feature caused another feature to fail. Part of this is due to my deliberate approach to development, thinking through how the features will interact down the road, but most of it is due to a highly incremental process of grafting features on sensibly.
I do, however, wonder if I can keep this up.
-
It's telling about my state of mind that I tried using an Atom shortcut, namely cmd-enter, to insert a carriage return below the current line, and ended up instead sending my blog post off into the internets.
We've all been staring at text editors for nine hours (minus breaks and lunch) and it's been a long, albeit productive, day. I can tell what everyone's up to and no joke I'm behind… however, I haven't asked for technical help or code review in three days.
… I'm not sure if I should be proud or ashamed of this fact…
My rails product looks pretty good. The models all work, modulo a couple details that will start to come out in the wash; most of the controllers are up and running well, and many of the views work the way I want. I'm starting to transition to Backbone—normally, we would have been doing three-minute presentations of our progress today, but that's been pushed off to Monday, at which point instead of showing our Rails MVP we'll be showing our Backbone MVP.
What this means, for me: I have no free time this weekend. Or, more accurately, my free time will be spent in the arms of javascript and, more precisely, Backbone.
Now that I remember how to rails, it'll be interesting to transition back to JS.
-
We were told about the Draper Gem pretty early on, and I didn't quite get it… I mean, I understand separation of concerns, but I didn't see the specific need for Draper.
I get it now.
-
I'm trying to take
git
very seriously, which means that every time I wrap up some context, I'll try to stage it separately and commit just that portion of the project. I was joking with someone today that others' commit messages consist of "Monday", "Tuesday", etc. I've made 55 commits (according to github) in the past two days, which is something. party hornSo, what'd I do today? Well, there was a bit of yak shaving today, although admittedly not as much as yesterday—I'm making a lot of progress learning the details I need to know to accomplish what I want to do—but there's always more to learn. Some time around lunch, I broke down and started trying to hammer out as much as I could as quickly as possible, and damn the looks… for the most part.
So, in terms of physics, my position is way behind where it could be—I'm jealous of the guy who's got robust rspec unit tests running—my velocity is just about what it should be, and my acceleration is going really well. I think… I have a hard time perceiving the struggles of the people around me, and seeing which things I'm doing better than them, but every time someone transitions from Rails to Backbone I get a bit more self-conscious.
This seems to be a theme with me.
It's not that bad. Honestly, most of the pressure I'm feeling comes from the instructors. I know they mean well, and I know I should work faster and get over some of my hangups, but … I guess I'm overcoming my baggage in terms of how I attack problems. This is my problem and I'm personally invested in it, as opposed to some of the "toy" work we'd done, and I'm much more certain of the architecture and layout of all the tiny pieces. When I want to add something, I know which three files I need to tweak to make it happen (most of the time…), I open those windows, make those tweaks, commit, and am off to the races.
Contrast that with the general befuddlement I'd often experience when following along with some of the projects' specs. It's kind of nice.
Oh, I neglected to comment on my actual workflow. So, among the panes that I keep open are a small set of text files for "overall TODOs" (e.g. architecture and styling), for "upcoming TODOs", which are tasks that are a bit less ambitious than the first set but don't fit nicely into a smaller context (generally, I have 5-8 of these at a time), and then individual TODO: comments inside the source files. These last identify places where my code is broken but I can't do anything about it (I don't have the skills/time to fix it) or where there's an edge case that's known and I know how to address it, but it's not a priority at the moment.
This seems to be working pretty well for me, at least today. It certainly helps me shed the weight of tangential thoughts (helping me maintain focus on the matter at hand) and have a good place to go to feed me when I hit one of those transitional lulls.
They told us to try to finish our rails apps tonight. I got all my models composed, and have a lot of headway on my controllers; my views are sparse… and I need sleep. There's only so much that can be done in a day, although I could keep working.
-
By typing !m apparently you can email markdown. I don't know where the
!m
has to go. Like, on a line by itself?
or just starting a line?
I know you can send it in the subject, but that's for chumps.
Edit: Lol, apparently the email portal strips out every occurrence of the string "!m", which is used to tell it that you're using markdown.
-
We're all solo all the time from here on out.
Today was super interesting, and super… how to say it… introspective? Revealing? As mentioned, today was the beginning of two weeks of solo work on a single final project, and I spent a lot of time looking at myself, wondering, "what am I doing?"
An aside. We're working on CRUD projects—Create, Read, Update, Destroy—which describes in some way, shape, or form 90% of the web apps that people use. Sure, there are some flourishes, because the "things" in any given web page can be text, videos, votes, cats, whatever, but at the end of the day all that's being done is authentication followed by doing stuff to entries in a database and then serving content.
What makes CRUD apps interesting, then, is the content they provide and the interaction model they offer, as well as the way they integrate the data they have on hand. Stack overflow is a forum with sorting, at the end of the day, but there are layers on layers of customizations and social … stuff they enable that makes them the foremost place for responses to technical questions on the (English-speaking?) web.
Getting to that point is always hard. A lot of the web is still non-RESTful phpBB systems and so forth, whereas what we've been learning is slightly more advanced and much more responsive (not in the screen scaling sense) than the pre-AJAX web.
Today, however, was straight up phpBB-level work. Which made it … weird. It's one thing to be learning Rails for the first time and to know that you're not stopping there, but it's another thing entirely when you have to seriously examine a problem you want to solve knowing that it's just a waypoint on a long path. Needless to say, a lot of the romance has fallen off web technologies for me, now: everything seems pretty easy, in a way (despite my struggles to cover ground today, more on that later), and I'm much less impressed with most single-page apps, or even massive online presences. It all seems like "just" pushing bits around.
Sure, there's a lot to be said for impressive widgets, scaleability, and presentation, but my main bugbears on the modern web all come back to utility. When 90% of the single-page apps feel little more advanced than MS Word's outline view, what are people really doing? I think a new interaction model is due, but I don't know what it looks like. It will, of course, seem obvious in hindsight.
Back to the day, then. I know I was frittering away time, learning about advanced validations or how to be more succinct with Rails. Part of my introspection is realizing that I really do prefer small, focused tasks (bug hunting, making something tiny and super-polished) over architecting… but the model for this project is to cover as much ground as possible, showing off knowledge of many technologies and areas of study as possible. In a sense, breadth, not depth. I bet I could break any of our projects, two weeks from now, in ten minutes if not less—and that's just not the kind of problem solving I like. I'd rather make something tiny and robust than expansive and potentially brittle.
Am I missing the point of MVPs and Agile development?
Tomorrow, my goal will be to subsume my pickiness under the banner of covering ground - I will try to be picky over broader architectural issues. Does that even make sense? They're saying we should be working on Backbone by tomorrow, but I know I'll still be doing a lot of rails for much of the day.
Nonetheless, we pushed to heroku today, and … yeah. It's a bit ridiculous how sparse my app is, but that's life. It'll look better tomorrow, I swear.
-
Today: solo
Today's project was to create a web chat client using
socket.io
. Surprisingly, to me, I had a lot of fun doing this work—this sort of systems~ish programming is right up my alley. Massaging packets and managing client-server data processing is fun, once I figured out a couple questions about namespacing and the like.In terms of "people won't remember what you said, only how you made them feel", I know that I had fun today… but between 5:30 and 8 pm, I made some changes that completely broke how the server handles command requests. I can change my user
nick
, and then immediately the socket closes, and a new socket is created, losing all the previous state. I managed, in just under two hours, to track down the call that's causing the error—something about callingsocket.emit
inside a particular logic branch—but I couldn't manage to kill the bug, and it's kind of driving me insane.That said, this is one of the first projects in a long while that I want to keep working on even at the end of the day (as can be seen by my still being at the office after 8 pm). It was a ton of fun, which I can't seem to overemphasize despite my best efforts, but I have to throw in the towel. Maybe this will be something that I can keep working on after the final project.
Speaking of, today was the day that we had to present our initial wireframes to the instructors. Tommy sat down with me and my admittedly crappy, half-baked wireframes, and we walked through the app I'm going to spend the next two weeks creating. This is the really fun, really hard part, one because I keep having to rein myself in, and two because … actually, that's it.
When it comes to large projects, I struggle to keep the scope of my work to a reasonable level, instead letting my ambitions smash up against the realities of implementation. This will either be an unmitigated disaster or a really excellent personal learning experience. I'm good at debugging and problem solving, but when it comes time to interview after this cycle is over, I don't want to have to say that my greatest weakness is that I don't know how to bite off only what I can chew.
The assessment went well; again, the class as a whole were missing quite a few points, but the median score was perfect, which means that a few people had a lot of failed tests. Hopefully they'll overcome; I'd hate to see any of the people I've been working with the past eight weeks get washed out now… although I can understand if it has to be that way. We're not General Assembly; we have to maintain some standards ;)
-
Today's partner: Jake
Yes, you read that right. We didn't travel back in time; to the contrary, time keeps marching forward (despite the date overflow back to Jan 1).
Today was the day we put Jonathan's lectures on CSS to use. It was kind of funny; I made sure to do my best to read the lectures for the day last night, and by this morning not only had I been assigned a different partner, but the readings and project were different. It turns out that JT was putting some final touches on his version of the CSS day, and it was (I believe) a much more effective day than what I thought we would have been doing.
On a plus note, today was much more approachable than Backbone has been, for me. Boxing off elements and figuring out style hierarchies is something I'm capable of wrapping my mind around, and despite some of css' foibles it was easily in reach. Per usual, coming up with descriptive names for things was challenging—Jonathan is of the belief that you should add
class
es to DOM elements early in the design process, even though we often weren't sure what role something would be playing—but this is one of those times that the cmd-D shortcut, for selecting the next token in the source file, came in handy. You see, any time you decide that something isn't named quite right, you can simply find the first occurrence of that name in your source file and mash cmd-D to select subsequent items, then overwrite them all at once.There's something very satisfying about using eight or more cursors to overwrite some chunks of text. :D
I'm not totally solid on CSS, but I am much more comfortable with it than I ever have been with Backbone. Really, I would not mind doing more of this—converting wireframes into semantic websites—but I know that this is not, by far, my strong suit. After all, I didn't have the skill to actually create a design from scratch, only to make it into semi-sane CSS, and I can't believe that that's a skill that's so much in demand that I can make my mark there.
It's fun, though :)
Tomorrow's the Backbone assessment, and per usual, I feel like I understand it a lot more than I have so far. I still have issues juggling state between all the separate files, but I was able to cobble together 100% passing specs by the 50 minute mark (out of an hour) despite not always knowing exactly what the pattern I was trying to replicate looked like. Looking at the practice solution and my own code side-by-side, there were maybe two redundant lines, and very few differences otherwise.
-
Today: solo day
I think it's just me, and not the time off. Backbone is… opaque.
Today was our solo project day with javascript/Backbone, and let me tell you, I was struggling. I've been looking forward to having another solo day, but I consistently fail to gain traction on these days. So, I don't know, I'm kind of torn about solo work. All I know is that I'll have to figure it out eventually: how not to struggle the first hour or two after I sit down at the computer, since that's the time I should be "making my money."
Our project today was to work on a clone of Trello. This is an app that I (thought I) had installed on my phone once upon a time, but I didn't quite realize what it did. Basically, you have boards, lists, and cards. Boards have a name/topic ("trello project"), lists have a topic ("features to add"), and cards have short bits of content that can be rearranged and reordered as needed to describe the list they contain. Additionally, there are collaboration features and a bunch of different varieties of actions that can be done to cards… all pretty cool until you realize that it's topologically equivalent to a tree/outline, and that there are literally a million variations on this theme out there.
As an aside, how many ways can you have to make an outline? Maybe I'm missing something here, but the main differentiation between say, Trello and workflowy is simply presentation. All these things are supposed to help make you more productive, but if the stuff you need to get out doesn't outline readily, or is topologically distinct from a tree, you'll spend all your time trying to shoehorn it into a broken topology.
That isn't to say there's no value in the presentation layer. Structurally, there's little difference between OmniFocus, WorkFlowy, any of a number of GTD apps, and a MS Word outline… but functionally, presentation matters. The biggest thing that any of these programs do is to hide junk that's not "in scope" at the present moment, as well as allowing you to manipulate objects and their sublists as a coherent object. I've told people countless times about the power of the MS Word Outline for structuring a document, but where it really shines is when you have a good idea where you want to end up and just need to flesh out concrete topics. It, and others, are not so good at just letting you dump a mess of thoughts and then bucket them as needed—there often is no general purpose "inbox" that can collect detritus that you can in turn process later, despite this requiring little more than a database field and a view. I wonder what all these app developers' workflows look like that this is desirable behavior.
Anyway, I started today really slowly, and gradually picked up steam as the day progressed. Toward 3 pm, though, I felt my momentum fail as I struggled with some stuff that I can't quite quantify about Backbone. I couldn't think of what I needed to do or what I even would need to do to figure out what needed to happen, and I can't decide whether it was because of Backbone, javascript, the instructions, or what. I still largely prefer ruby and rails, but I understand that JS is the bread and butter of webdev, so it'll pay to overcome my issues, and yet I can't properly decide … much of anything. Guh.