< prev 16 Jan 2015 to 7 Jan 2015 next >

Posts filed under 'AppAcademy'

  • When you accidentally hit the Easter Egg shortcut while trying to write your daily report at 2 am

    $('body').removeClass('more-drake')

  • Week 9 Day 4 - Down to the wire

    Spent most of the day today trying to make up for lost time, which doesn't really work but most of the day I had that level of speed. I left the office at 11:00 last night and midnight tonight, and got in a half-hour late this morning because there just isn't enough time.

    A benefit to overthinking everything and going down blind alleys is that my bug-hunting skills are only getting better. After three productive hours prior to lunch doing… I barely remember, but something… I tried doing something a bit too clever (having to do with separation of concerns again), and didn't come up for air until after 6. From 6 to midnight I was plenty productive, but messing up like that still stings.

    In brief: I monkey-patched the Backbone Router prototype to offer callbacks before and after routing, and then tried using those hooks to grab a user who wasn't logged in and redirect them to the login page (while preserving state). Once again, on my way home, I think I understand what I was doing wrong, and can see how to fix it, but I ended up ripping most of that code out and leaving it basically exactly how we were taught in the auth demo.

    I still don't like having a currentUser global, but for my app it's not a terrible idea, since you need to have some purpose coming to a blackboard-like site. It's not like your typical modern website, where there's generally some functionality that's meaningful even without an account, so… whatever.

    Oh, so I remember now—one of the fastest ways to make me hate your website or app is to have data entry be painful. So I spent three hours making syllabus creation absolutely beautiful, modulo a couple tweaks, and ran into a bug that I couldn't figure out even with Tommy's help. Basically, I had the event creation success callback call a JQuery focus() event on the first field in the form, and it kept losing focus after render. So I said to hell with it, and installed a setTimeout call that waits 50ms then focuses back on the first field. Hacky, but resilient.

    No matter what I do, more of these sorts of hacks creep into my codebase. But then I see things like when iOS autocompletes a word, then you press punctuation, it backspaces and writes the punctuation and a space instead of just inserting it at the previous position.

    I can't decide if this says more about the UX rot of iOS or the inevitability of hacky solutions.

    Tomorrow we're presenting again and I think I'm going to bum rush the core features, no matter how they look, rather than polish anything. I have a TODO.md full of broken things, but that's just going to be the nature of the beast.

    Wanna know what kind of day it's been? I just remembered that I didn't eat my breakfast. I packed it in my bag 16 hours ago.

  • Week 9 Day 3 - The one good thing

    … about everyone having a slow day is that you can commiserate.

    I spent a while this morning moving items out of my TODO list and into Trello—might as well use it for something now that I have an account. I found that trying to read to-dos off of a serial text file is next to impossible, and until I can afford a more full-featured project management app, it should do the trick. (Why is OmniFocus so expensive?)

    From there I went down a rabbit hole of other people's code, doing a lot of thinking about separation of concerns and where and how views should interact, and how routers play into all that. The good thing is many people have asked themselves similar questions before; the bad news is that so many people have thought about it that there's no one good answer for how to address it, and Backbone is agnostic about the whole mess.

    That was most of my day. I did read a lot of code and learned more and more about how Backbone actually works under the hood (as well as playing with a number of neat Underscore functions) but at the end of the day what I have to show for it is clickable column headers that update the sort order of their associated table, and some utility code … not so much output.

    I'm already thinking about what I want to and need to do tomorrow, and prioritizing various tasks based on the knowledge that we'll probably have a 1-hour lecture at some point and that we have to present again on Friday… It's going to be close. Hopefully I'll have some "wow" by then.

  • Week 9 Day 2 - Movin' right along

    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 am aliasing my most common commands regularly, and can find my way around Atom like nothing.

    Wow, they have taught us something. :P

  • Week 9 Day 1 - What day is it?

    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.

  • Week 8 Day 5 - A brief pause

    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.

  • So, decorators

    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.

  • Week 8 Day 4 - The most committed person at appacademy

    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 horn

    So, 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.

  • Week 8 Day 3 - On my own

    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.

  • Week 8 Day 2 - Let me tell you something

    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 calling socket.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 ;)

< prev 16 Jan 2015 to 7 Jan 2015 next >